o
    �õ±j¿  ã                   @   s    d dl Z d dlmZmZ d dlmZmZ G dd„ dƒZG dd„ dƒZG dd	„ d	ƒZ	G d
d„ dƒZ
G dd„ dƒZdd„ ZedkrNd dlmZ d dlZeƒ  dS dS )é    N)Údatetime2timestampÚtimestamp2datetime)ÚAVPairsÚ
AVPAIRTypec                   @   ó<   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZd	d
„ ZdS )Ú
LMResponsec                 C   ó
   d | _ d S ©N©ÚResponse©Úself© r   ú§/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/ntlm/structures/challenge_response.pyÚ__init__   ó   
zLMResponse.__init__c                 C   ó   | j S r	   r
   r   r   r   r   Úto_bytes   ó   zLMResponse.to_bytesc                 C   ó   t  t | ¡¡S r	   )r   Úfrom_bufferÚioÚBytesIO©Úbbuffr   r   r   Ú
from_bytes   ó   zLMResponse.from_bytesc                 C   s   t ƒ }|  d¡|_|S ©Né   )r   Úreadr   ©ÚbuffÚtr   r   r   r      s   zLMResponse.from_bufferc                 C   s   d}|dt | j ¡ ƒ 7 }|S )Nz== LMResponse ==
úResponse: %s
)Úreprr   Úhex©r   r"   r   r   r   Ú__repr__   s   zLMResponse.__repr__N©	Ú__name__Ú
__module__Ú__qualname__r   r   Ústaticmethodr   r   r'   r   r   r   r   r      ó    

r   c                   @   r   )ÚLMv2Responsec                 C   ó   d | _ d | _d S r	   ©r   ÚChallengeFromClinetr   r   r   r   r       ó   
zLMv2Response.__init__c                 C   s   | j | j S r	   r0   r   r   r   r   r   %   s   zLMv2Response.to_bytesc                 C   r   r	   )r.   r   r   r   r   r   r   r   r   (   r   zLMv2Response.from_bytesc                 C   s*   t ƒ }|  d¡ ¡ |_|  d¡ ¡ |_|S )Né   é   )r.   r   r%   r   r1   r    r   r   r   r   ,   s   zLMv2Response.from_bufferc                 C   s,   d}|dt | jƒ 7 }|dt | jƒ 7 }|S )Nz== LMv2Response ==
r#   úChallengeFromClinet: %s
)r$   r   r1   r&   r   r   r   r'   3   s   zLMv2Response.__repr__Nr(   r   r   r   r   r.      s    

r.   c                   @   r   )ÚNTLMv1Responsec                 C   r   r	   r
   r   r   r   r   r   <   r   zNTLMv1Response.__init__c                 C   r   r	   r
   r   r   r   r   r   ?   r   zNTLMv1Response.to_bytesc                 C   r   r	   )r6   r   r   r   r   r   r   r   r   B   r   zNTLMv1Response.from_bytesc                 C   s   t ƒ }|  d¡ ¡ |_|S r   )r6   r   r%   r   r    r   r   r   r   F   s   zNTLMv1Response.from_bufferc                 C   s   d}|dt | jƒ 7 }|S )Nz== NTLMv1Response ==
r#   )r$   r   r&   r   r   r   r'   L   s   zNTLMv1Response.__repr__Nr(   r   r   r   r   r6   ;   r-   r6   c                   @   r   )ÚNTLMv2Responsec                 C   r/   r	   r0   r   r   r   r   r   T   r2   zNTLMv2Response.__init__c                 C   s   | j | j ¡  S r	   )r   r1   r   r   r   r   r   r   X   s   zNTLMv2Response.to_bytesc                 C   r   r	   )r7   r   r   r   r   r   r   r   r   [   r   zNTLMv2Response.from_bytesc                 C   s*   t ƒ }|  d¡|_|  ¡ }t | ¡|_|S )Nr3   )r7   r   r   ÚtellÚNTLMv2ClientChallenger   r1   )r!   r"   Úposr   r   r   r   _   s
   zNTLMv2Response.from_bufferc                 C   s0   d}|dt | j ¡ ƒ 7 }|dt | jƒ 7 }|S )Nz== NTLMv2Response ==
zResponse           : %s
r5   )r$   r   r%   r1   r&   r   r   r   r'   h   s   zNTLMv2Response.__repr__Nr(   r   r   r   r   r7   S   s    

r7   c                   @   sH   e Zd Zdd„ Zedd„ ƒZdd„ Zedd„ ƒZed	d
„ ƒZdd„ Z	dS )r9   c                 C   s@   d| _ d| _d| _d | _d| _d | _d| _d | _d | _d| _	d S )Né   r   ó    )
ÚRespTypeÚ
HiRespTypeÚ	Reserved1Ú	TimeStampÚ	Reserved2ÚChallengeFromClientÚ	Reserved3ÚDetailsÚtimestamp_dtÚraw_datar   r   r   r   r   p   s   
zNTLMv2ClientChallenge.__init__c                 C   s&   t ƒ }t| ƒ|_||_||_| |_|S )zX
		timestamp: datetime.datetime
		client_challenge: 8 bytes
		details: AVPairs object
		)r9   r   r@   rB   rD   rE   )Ú	timestampÚclient_challengeÚdetailsÚccr   r   r   Ú	construct}   s   
zNTLMv2ClientChallenge.constructc                 C   s�   | j jdddd�}|| jjdddd�7 }|| jjdddd�7 }|| j7 }|| j7 }|| jjdddd�7 }|| j ¡ 7 }|| jjdddd�7 }|S )Nr;   ÚlittleF©Ú	byteorderÚsignedé   é   )	r=   r   r>   r?   r@   rB   rA   rD   rC   r&   r   r   r   r   ‹   s   

zNTLMv2ClientChallenge.to_bytesc                 C   r   r	   )r9   r   r   r   r   r   r   r   r   —   r   z NTLMv2ClientChallenge.from_bytesc                 C   s²   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_|  d¡|_|  d¡|_tj|  d¡ddd�|_	t
 | ¡|_tj|  d¡ddd�|_t|jƒ|_|S )Nr;   rL   FrM   rP   r4   rQ   )r9   Úintr   r   r=   r>   r?   r@   rB   rA   r   r   rD   rC   r   rE   )r!   rJ   r   r   r   r   ›   s   z!NTLMv2ClientChallenge.from_bufferc                 C   sT   d}|dt | jƒ 7 }|dt | jƒ 7 }|dt | j ¡ ƒ 7 }|dt | jƒ 7 }|S )Nz== NTLMv2ClientChallenge ==
zRespType           : %s
zTimeStamp          : %s
zChallengeFromClient: %s
zDetails            : %s
)r$   r=   rE   rB   r%   rD   r&   r   r   r   r'   «   s   zNTLMv2ClientChallenge.__repr__N)
r)   r*   r+   r   r,   rK   r   r   r   r'   r   r   r   r   r9   o   s    


r9   c            	      C   sð   dd l } t d¡}t |¡}tt|ƒƒ t | ¡ ¡}tt|ƒƒ tdƒ tt|ƒƒ tdƒ tt| ¡ ƒƒ t	t
jdt
jdt
jdt
jdt
jd	t
jd
t
jdt
jdt
jdi	ƒ}|   ddd¡}t d¡}t |||¡}tt|ƒƒ t | ¡ ¡}d S )Nr   Á  0101000000000000aec600bfc5fdd4011bfa20699d7628730000000002000800540045005300540001001200570049004e003200300031003900410044000400120074006500730074002e0063006f007200700003002600570049004e003200300031003900410044002e0074006500730074002e0063006f007200700007000800aec600bfc5fdd40106000400020000000800300030000000000000000000000000200000527d27f234de743760966384d36f61ae2aa4fc2a380699f8caa600011b486d890a0010000000000000000000000000000000000009001e0063006900660073002f00310030002e00310030002e00310030002e0032000000000000000000z=== Original ===z
=== CC ===ÚTESTÚ	WIN2019ADz	test.corpzWIN2019AD.test.corps   ®Æ ¿ÅýÔs      s0   0               R}'ò4Þt7`–c„Óoa®*¤ü*8™øÊ¦ Hm‰s                   ztermsrv/10.10.10.2iã  r;   r4   )ÚdatetimeÚbytesÚfromhexr9   r   Úprintr$   r   Úhexdumpr   r   ÚMsvAvNbDomainNameÚMsvAvNbComputerNameÚMsvAvDnsDomainNameÚMsvAvDnsComputerNameÚMsvAvTimestampÚ
MsvAvFlagsÚMsvAvSingleHostÚMsvChannelBindingsÚMsvAvTargetNameÚosÚurandomrK   )	rV   Ú	test_datarJ   Úcc2rI   rG   rH   Úcc3Úcc4r   r   r   Útest³   s    

>
rj   Ú__main__)rZ   )r   Úasyauth.utils.timestampr   r   Ú(asyauth.protocols.ntlm.structures.avpairr   r   r   r.   r6   r7   r9   rj   r)   Úasyauth.utils.hexdumprZ   rd   r   r   r   r   Ú<module>   s    D
ý