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}'4t7`coa**8ʦ Hms                   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
