o
    �õ±jR  ã                   @   sj   d dl Z d dlmZ d dlmZ d dlmZ G dd„ dƒZdd„ Zdd	d
„Z	dd„ Z
edkr3eƒ  dS dS )é    N)ÚFields)ÚNegotiateFlags)ÚVersionc                   @   sJ   e Zd Zdd„ Zedd„ ƒZedd„ ƒZeddd	„ƒZd
d„ Zdd„ Z	dS )ÚNTLMNegotiatec                 C   s:   d| _ d| _d | _d | _d | _d | _d | _d | _d | _d S )Ns   NTLMSSP é   )	Ú	SignatureÚMessageTyper   ÚDomainNameFieldsÚWorkstationFieldsr   ÚPayloadÚDomainÚWorkstation)Úself© r   úœ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/ntlm/messages/negotiate.pyÚ__init__
   s   
zNTLMNegotiate.__init__c                 C   s   t  t | ¡¡S ©N)r   Úfrom_bufferÚioÚBytesIO)Úbbuffr   r   r   Ú
from_bytes   s   zNTLMNegotiate.from_bytesc                 C   sH  t ƒ }|  d¡|_tj|  d¡ddd�|_ttj|  d¡ddd�ƒ|_t | ¡|_	t | ¡|_
|jtj@ r;t | ¡|_|  ¡ }|  ¡ |_|j	jdkrr|  |j	jtj¡ |  |j
j¡}z| d¡|_W n tyq   | d¡|_Y nw |j
jdkr¢|  |j
jtj¡ |  |j
j¡}z	| d¡|_W |S  ty¡   | d¡|_Y |S w |S )	Né   é   ÚlittleF©Ú	byteorderÚsignedr   úutf-16lezutf-8)r   Úreadr   Úintr   r   r   r   r   r	   r
   ÚNEGOTIATE_VERSIONr   Útellr   ÚlengthÚseekÚoffsetr   ÚSEEK_SETÚdecoder   ÚUnicodeDecodeErrorr   )ÚbuffÚtÚcurrPosÚraw_datar   r   r   r      s:   
þúúzNTLMNegotiate.from_bufferNc                 C   sð   t ƒ }| |_d|_d}| tj@ r|stdƒ‚|d7 }||_|jtj@ rC|rC| d¡}| j|7  _tt	|ƒ|ƒ|_
|t	|ƒ7 }||_ntddƒ|_
|jtj@ rp|rp| d¡}| j|7  _tt	|ƒ|ƒ|_|t	|ƒ7 }||_|S tddƒ|_|S )Nó    é    z.NEGOTIATE_VERSION set but no Version supplied!r   r   r   )r   r   r   r!   Ú	Exceptionr   ÚNEGOTIATE_OEM_DOMAIN_SUPPLIEDÚencoder   Úlenr	   r   Ú"NEGOTIATE_OEM_WORKSTATION_SUPPLIEDr
   r   )ÚflagsÚ
domainnameÚworkstationnameÚversionÚnegoÚpayload_posÚdatar   r   r   Ú	constructE   s2   


þzNTLMNegotiate.constructc                 C   sx   d}|| j 7 }|| jjdddd�7 }|| jjdddd�7 }|| j ¡ 7 }|| j ¡ 7 }| jr5|| j ¡ 7 }|| j7 }|S )Nr-   r   r   Fr   )r   r   Úto_bytesr   r	   r
   r   r   ©r   r*   r   r   r   r<   j   s   

zNTLMNegotiate.to_bytesc                 C   st   d}|dt | jƒ 7 }|dt | jƒ 7 }|dt | jƒ 7 }|dt | jƒ 7 }|dt | jƒ 7 }|dt | jƒ 7 }|S )Nz== NTLMNegotiate ==
zSignature  : %s
zMessageType: %s
zNegotiateFlags: %s
zVersion    : %s
zDomain     : %s
zWorkstation: %s
)Úreprr   r   r   r   r   r   r=   r   r   r   Ú__repr__v   s   zNTLMNegotiate.__repr__)NNN)
Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r   r;   r<   r?   r   r   r   r   r   	   s    

)$r   c                   C   s   t ƒ  tƒ  d S r   )Útest_reconstrutÚtest_constructr   r   r   r   Útest�   s   
rF   c                 C   sJ   t dƒ | st d¡}n| }t |¡}t t|ƒƒ | ¡ }||ks#J ‚d S )Nz=== reconstruct===ÚP4e544c4d5353500001000000978208e2000000000000000000000000000000000a00d73a0000000f)ÚprintÚbytesÚfromhexr   r   r>   r<   )r:   Únego_test_datar8   Únego_test_data_verifyr   r   r   rD   …   s   
rD   c                  C   s  t jt jB t jB t jB t jB t jB t jB t jB t j	B t j
B t jB t jB t jB t jB } tj| ddt ¡ d�}| ¡  tt|ƒƒ t| ¡ ƒ t jt jB t jB t jB t jB t jB t jB t j	B t j
B t jB t jB t jB t jB } tj| ddd�}t| ¡ ƒ tt|ƒƒ t| ¡ ƒ d S )Nzalma.comÚtestjoe)r5   r6   r7   Útestjoe2)r5   r6   )r   ÚNEGOTIATE_56ÚNEGOTIATE_KEY_EXCHÚNEGOTIATE_128r!   Ú"NEGOTIATE_EXTENDED_SESSIONSECURITYÚNEGOTIATE_ALWAYS_SIGNÚNEGOTIATE_NTLMÚNEGOTIATE_LM_KEYÚNEGOTIATE_SIGNÚREQUEST_TARGETÚNTLM_NEGOTIATE_OEMÚNEGOTIATE_UNICODEr3   r0   r   r;   r   r<   rH   r>   rD   )r4   r8   r   r   r   rE   �   sh   ÿþýýýüüüüûûÿþþþýýýýüürE   Ú__main__r   )r   Ú(asyauth.protocols.ntlm.structures.fieldsr   Ú1asyauth.protocols.ntlm.structures.negotiate_flagsr   Ú)asyauth.protocols.ntlm.structures.versionr   r   rF   rD   rE   r@   r   r   r   r   Ú<module>   s    x

ÿ