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

