o
    Žõ±j´\  ã                   @   sl  d dl mZ d dlZd dlZd dlZd dlZd dlT d dlmZ d dl	T G dd„ dej
ƒZG dd„ dej
ƒZG d	d
„ d
ƒZG dd„ dejƒZG dd„ dejƒZG dd„ dƒZG dd„ dƒZG dd„ dejƒZG dd„ dƒZG dd„ dejƒZG dd„ dƒZG dd„ dejƒZG dd„ dejƒZG dd „ d ƒZG d!d"„ d"ejƒZG d#d$„ d$ƒZG d%d&„ d&ƒZG d'd(„ d(ƒZdS ))é    )ÚContextN)Ú*)ÚNegotiateDialectsc                   @   ó   e Zd ZdZdZdZdS )ÚNegotiateSecurityModer   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚNONEÚSMB2_NEGOTIATE_SIGNING_ENABLEDÚSMB2_NEGOTIATE_SIGNING_REQUIRED© r   r   úš/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/protocol/smb2/commands/negotiate.pyr      ó    r   c                   @   ó(   e Zd ZdZdZdZdZdZdZdZ	dS )	ÚNegotiateCapabilitiesr   r   é   é   é   é    é@   N)
r	   r
   r   ÚDFSÚLEASINGÚ	LARGE_MTUÚMULTI_CHANNELÚPERSISTENT_HANDLESÚDIRECTORY_LEASINGÚ
ENCRYPTIONr   r   r   r   r      ó    r   c                   @   s0   e Zd Zdd„ Zdd„ Zedd„ ƒZdd„ Zd	S )
ÚNEGOTIATE_REQc                 C   sL   d| _ d | _d | _d| _d | _d | _d| _d | _d | _d| _	g | _
g | _d S )Né$   r   )ÚStructureSizeÚDialectCountÚSecurityModeÚReservedÚCapabilitiesÚ
ClientGuidÚClientStartTimeÚNegotiateContextOffsetÚNegotiateContextCountÚ	Reserved2ÚNegotiateContextListÚDialects©Úselfr   r   r   Ú__init__    s   
zNEGOTIATE_REQ.__init__c                 C   sÊ  | j g kr	tdƒ‚| jjdddd�}|t| j ƒjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| j ¡ 7 }t	j
| j v rÇd}| j D ]}||jjdddd�7 }qRdt|ƒ }|d	d
| d
  7 }dt|ƒ | _t| jƒ| _|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }||7 }t| jƒD ]\}}|| ¡ 7 }|| jd krÄ|d	d
t|ƒ d
  7 }q§|S || jjd
ddd�7 }| j D ]}||jjdddd�7 }qÕ|S )Nz!At least one dialect MUST be set!r   ÚlittleF©Ú	byteorderÚsignedr   ó    éd   ó    r   r   )r.   Ú	Exceptionr#   Úto_bytesÚlenr%   r&   r'   r(   r   ÚSMB311Úvaluer*   r-   r+   r,   Ú	enumerater)   )r0   ÚtÚdpÚdialectÚpadding_startsÚiÚctxr   r   r   r:   /   s<   

€û
zNEGOTIATE_REQ.to_bytesc              	   C   sø  t ƒ }tj|  d¡ddd�|_|jdksJ ‚tj|  d¡ddd�|_|jdks)J ‚ttj|  d¡ddd�ƒ|_|  d¡|_t	tj|  d¡ddd�ƒ|_
t | ¡|_|  ¡ }|  dtj¡ g |_td|jƒD ]}|j ttj|  d¡ddd�ƒ¡ qe|  ¡ }|  |tj¡ tj|jv rçtj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_g |_|  |jtj¡ td|jƒD ]%}|j t | ¡¡ |  ¡ }t|dƒ\}}|dkrä|  |d	 d tj¡ q¿|S tj|  d¡ddd�|_|  |tj¡ |S )
Nr   r2   Fr3   r"   r   r   r   r   )r!   ÚintÚ
from_bytesÚreadr#   r$   r   r%   r&   r   r'   ÚGUIDÚfrom_bufferr(   ÚtellÚseekÚioÚSEEK_CURr.   ÚrangeÚappendr   ÚSEEK_SETr<   r*   r+   r,   r-   ÚSMB2NegotiateContextÚdivmodr)   )ÚbuffÚcmdÚposÚ_Úpos_buff_endÚpad_posÚqÚmr   r   r   rI   T   sB   $€ýzNEGOTIATE_REQ.from_bufferc                 C   sÚ   d}|d| j  7 }|d| j 7 }|d| jj 7 }|d| j 7 }|dt| jƒ 7 }|d| j 7 }tj	| j
v rW|d| j 7 }|d	| j 7 }|d
| j 7 }| jD ]}|t|ƒ7 }qMn|d| j 7 }| j
D ]	}|d|j 7 }qa|S )Nz==== SMB2 NEGOTIATE REQ ====
úStructureSize: %s
zDialectCount:  %s
zSecurityMode:  %s
zReserved:      %s
zCapabilities:  %s
zClientGuid:    %s
zNegotiateContextOffset:    %s
zNegotiateContextCount:    %s
zReserved2:    %s
zClientStartTime:    %s
z	 Dialect: %s
)r#   r$   r%   Únamer&   Úreprr'   r(   r   r<   r.   r*   r+   r,   r-   r)   )r0   r?   rD   rA   r   r   r   Ú__repr__~   s$   
ÿ
zNEGOTIATE_REQ.__repr__N)r	   r
   r   r1   r:   ÚstaticmethodrI   r^   r   r   r   r   r!      s    %
)r!   c                   @   r   )	ÚSMB2ContextTyper   r   é   é   é   é   r   N)
r	   r
   r   ÚPREAUTH_INTEGRITY_CAPABILITIESÚENCRYPTION_CAPABILITIESÚCOMPRESSION_CAPABILITIESÚNETNAME_NEGOTIATE_CONTEXT_IDÚTRANSPORT_CAPABILITIESÚRDMA_TRANSFORM_CAPABILITIESÚSIGNING_CAPABILITIESr   r   r   r   r`   •   r    r`   c                   @   s   e Zd ZdZdS )ÚSMB2HashAlgorithmr   N)r	   r
   r   ÚSHA_512r   r   r   r   rl   Ÿ   s    rl   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )rQ   c                 C   s   d S ©Nr   r/   r   r   r   r1   ¥   s   zSMB2NegotiateContext.__init__c                 C   s°   |   ¡ }ttj|  d¡ddd�ƒ}|  |¡ |tjkr t | ¡S |tj	kr*t
 | ¡S |tjkr4t | ¡S |tjkr>t | ¡S |tjkrHt | ¡S |tjkrRt | ¡S td| ƒ‚)Nr   r2   Fr3   zUnknown contextype %s)rJ   r`   rE   rF   rG   rK   re   Ú SMB2PreauthIntegrityCapabilitiesrI   rf   ÚSMB2EncryptionCapabilitiesrg   ÚSMB2CompressionCapabilitiesrh   ÚSMB2NetnameNegotiateContextIDri   ÚSMB2TransportCapabilitiesrk   ÚSMB2SigningCapabilitiesr9   )rS   rU   ÚContextTyper   r   r   rI   ¨   s    












z SMB2NegotiateContext.from_bufferN)r	   r
   r   r1   r_   rI   r   r   r   r   rQ   ¤   s    rQ   c                   @   sF   e Zd Zdd„ Zedd„ ƒZeejgdfdd„ƒZdd	„ Z	d
d„ Z
dS )ro   c                 C   s0   t j| _d | _d| _d | _d | _d | _d | _d S ©Nr   )	r`   re   ru   Ú
DataLengthr&   ÚHashAlgorithmCountÚ
SaltLengthÚHashAlgorithmsÚSaltr/   r   r   r   r1   Ã   ó   
z)SMB2PreauthIntegrityCapabilities.__init__c              	   C   sÌ   t ƒ }ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_	g |_
t|jƒD ]}|j
 ttj|  d¡ddd�ƒ¡ qI|  |j	¡|_|S ©Nr   r2   Fr3   r   )ro   r`   rE   rF   rG   ru   rw   r&   rx   ry   rz   rN   rO   rl   r{   ©rS   ÚcaprV   r   r   r   rI   Í   s   $z,SMB2PreauthIntegrityCapabilities.from_bufferr6   c                 C   s   t ƒ }| |_||_|S rn   )ro   rz   r{   )Ú
hash_algosÚsaltr   r   r   r   Ú	constructÝ   s   z*SMB2PreauthIntegrityCapabilities.constructc                 C   sÂ   t | jƒ| _t | jƒ| _| jjdddd�}|| jjdddd�7 }| jD ]}||jjdddd�7 }q#|| j7 }t |ƒ| _| jjjdddd�}|| jjdddd�7 }|| j	jdddd�7 }||7 }|S r}   )
r;   r{   ry   rz   rx   r:   r=   rw   ru   r&   )r0   ÚdataÚhashalgor?   r   r   r   r:   ä   s   


z)SMB2PreauthIntegrityCapabilities.to_bytesc                 C   sL   d}|d| j  7 }|d| j 7 }|d| j 7 }| jD ]	}|d|j 7 }q|S )Nz/==== SMB2 Preauth Integrity Capabilities ====
zHashAlgorithmCount: %s
zSaltLength: %s
z
Salt: %s
zHashAlgo: %s
)rx   ry   r{   rz   r\   )r0   r?   Úalgor   r   r   r^   ö   s   
z)SMB2PreauthIntegrityCapabilities.__repr__N)r	   r
   r   r1   r_   rI   rl   rm   r‚   r:   r^   r   r   r   r   ro   Â   s    

ro   c                   @   s   e Zd ZdZdZdZdZdS )Ú
SMB2Cipherr   r   ra   r   N)r	   r
   r   ÚAES_128_CCMÚAES_128_GCMÚAES_256_CCMÚAES_256_GCMr   r   r   r   r†     s
    r†   c                   @   ó<   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ ZdS )rp   c                 C   ó$   t j| _d | _d| _d | _d | _d S rv   )r`   rf   ru   rw   r&   ÚCipherCountÚCiphersr/   r   r   r   r1   
  ó
   
z#SMB2EncryptionCapabilities.__init__c              	   C   ó¦   t ƒ }ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_g |_	t
|jƒD ]}|j	 ttj|  d¡ddd�ƒ¡ q=|S r}   )rp   r`   rE   rF   rG   ru   rw   r&   r�   rŽ   rN   rO   r†   r~   r   r   r   rI     ó   $z&SMB2EncryptionCapabilities.from_bufferc                 C   ó   t ƒ }| |_t| ƒ|_|S rn   )rp   rŽ   r;   r�   )Úsupp_enc_listÚsr   r   r   Úfrom_enc_list   ó   
z(SMB2EncryptionCapabilities.from_enc_listc                 C   óŠ   | j jdddd�}| jD ]}||jjdddd�7 }qt|ƒ| _| jjjdddd�}|| jjdddd�7 }|| jjdddd�7 }||7 }|S r}   )r�   r:   rŽ   r=   r;   rw   ru   r&   )r0   rƒ   Úcipherr?   r   r   r   r:   (  ó   

z#SMB2EncryptionCapabilities.to_bytesc                 C   ó0   d}|d| j  7 }| jD ]	}|d|j 7 }q|S )Nz(==== SMB2 Encryption Capabilities ====
zCipherCount: %s
zCipher: %s
)r�   rŽ   r\   )r0   r?   r˜   r   r   r   r^   7  ó
   
z#SMB2EncryptionCapabilities.__repr__N©	r	   r
   r   r1   r_   rI   r•   r:   r^   r   r   r   r   rp   	  ó    

rp   c                   @   r   )ÚSMB2SigningAlgorithmr   r   r   N)r	   r
   r   ÚHMAC_SHA256ÚAES_CMACÚAES_GMACr   r   r   r   rž   ?  r   rž   c                   @   r‹   )rt   c                 C   rŒ   rv   )r`   rk   ru   rw   r&   ÚSigningAlgorithmCountÚSigningAlgorithmsr/   r   r   r   r1   F  r�   z SMB2SigningCapabilities.__init__c              	   C   r�   r}   )rt   r`   rE   rF   rG   ru   rw   r&   r¢   r£   rN   rO   rž   r~   r   r   r   rI   N  r‘   z#SMB2SigningCapabilities.from_bufferc                 C   r’   rn   )rt   r£   r;   r¢   )Úsupp_sig_listr”   r   r   r   r•   \  r–   z%SMB2SigningCapabilities.from_enc_listc                 C   r—   r}   )r¢   r:   r£   r=   r;   rw   ru   r&   )r0   rƒ   Úsigr?   r   r   r   r:   d  r™   z SMB2SigningCapabilities.to_bytesc                 C   rš   )Nz%==== SMB2 Singing Capabilities ====
zSigningAlgorithmCount: %s
z	Sig: %s
)r¢   r£   r\   )r0   r?   r¥   r   r   r   r^   s  r›   z SMB2SigningCapabilities.__repr__Nrœ   r   r   r   r   rt   E  r�   rt   c                   @   s    e Zd ZdZdZdZdZdZdS )ÚSMB2CompressionTyper   r   r   ra   r   N)r	   r
   r   r   ÚLZNT1ÚLZ77ÚLZ77_HuffmanÚ
Pattern_V1r   r   r   r   r¦   {  s    r¦   c                   @   ó   e Zd ZdZdZdS )ÚSMB2CompressionFlagsr   r   N)r	   r
   r   r   ÚCHAINEDr   r   r   r   r¬   ‚  ó    r¬   c                   @   s>   e Zd Zdd„ Zedd„ ƒZeddd„ƒZdd	„ Zd
d„ ZdS )rq   c                 C   s0   t j| _d | _d| _d | _d| _d | _g | _d S rv   )	r`   rg   ru   rw   r&   ÚCompressionAlgorithmCountÚPaddingÚFlagsÚCompressionAlgorithmsr/   r   r   r   r1   ‡  r|   z$SMB2CompressionCapabilities.__init__c              	   C   sÔ   t ƒ }ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_	t
tj|  d¡ddd�ƒ|_t|jƒD ]}|j ttj|  d¡ddd�ƒ¡ qT|S r}   )rq   r`   rE   rF   rG   ru   rw   r&   r¯   r°   r¬   r±   rN   r²   rO   r¦   r~   r   r   r   rI   ‘  s   $z'SMB2CompressionCapabilities.from_bufferFc                 C   s2   t ƒ }tj|_|du rtj|_| |_t| ƒ|_|S )NT)rq   r¬   r   r±   r­   r²   r;   r¯   )Úsupp_comp_listÚ
is_chainedr”   r   r   r   Úfrom_comp_list   s   
z*SMB2CompressionCapabilities.from_comp_listc                 C   sÎ   | j jdddd�}|| jjdddd�7 }|| jjjdddd�7 }|| j jdddd�7 }| jD ]}||jjdddd�7 }q.t|ƒ| _| jjjdddd�}|| jjdddd�7 }|| j	jdddd�7 }||7 }|S r}   )
r¯   r:   r°   r±   r=   r²   r;   rw   ru   r&   )r0   rƒ   Úcompalgor?   r   r   r   r:   ¬  s   

z$SMB2CompressionCapabilities.to_bytesc                 C   s2   d}|d| j j 7 }| jD ]	}|d|j 7 }q|S )Nz)==== SMB2 Compression Capabilities ====
úFlags: %s
zCompression type: %s
)r±   r\   r²   )r0   r?   r¶   r   r   r   r^   ¾  s
   
z$SMB2CompressionCapabilities.__repr__N)F)	r	   r
   r   r1   r_   rI   rµ   r:   r^   r   r   r   r   rq   †  s    

rq   c                   @   r«   )ÚSMB2TransportCapabilityFlagsr   r   N)r	   r
   r   r   ÚACCEPT_TRANSPORT_LEVEL_SECURITYr   r   r   r   r¸   Æ  r®   r¸   c                   @   ó0   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	S )
rs   c                 C   s   t j| _d | _d| _d | _d S rv   )r`   rg   ru   rw   r&   r±   r/   r   r   r   r1   Ë  ó   
z"SMB2TransportCapabilities.__init__c                 C   sr   t ƒ }ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_ttj|  d¡ddd�ƒ|_	|S r}   )
rq   r`   rE   rF   rG   ru   rw   r&   r¸   r±   ©rS   r   r   r   r   rI   Ò  s   z%SMB2TransportCapabilities.from_bufferc                 C   sh   | j jdddd�}t|ƒ| _| jjjdddd�}|| jjdddd�7 }|| jjdddd�7 }||7 }|S r}   )r±   r:   r;   rw   ru   r=   r&   )r0   rƒ   r?   r   r   r   r:   Û  s   
z"SMB2TransportCapabilities.to_bytesc                 C   ó   d}|d| j  7 }|S )Nz'==== SMB2 Transport Capabilities ====
r·   )r±   ©r0   r?   r   r   r   r^   æ  ó   z"SMB2TransportCapabilities.__repr__N©r	   r
   r   r1   r_   rI   r:   r^   r   r   r   r   rs   Ê  s    
rs   c                   @   rº   )
rr   c                 C   s   t j| _d | _d | _d | _d S rn   )r`   rh   ru   rw   r&   ÚNetNamer/   r   r   r   r1   ì  r»   z&SMB2NetnameNegotiateContextID.__init__c                 C   sj   t ƒ }ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_|  |j¡ d¡|_	|S )Nr   r2   Fr3   r   z	utf-16-le)
rr   r`   rE   rF   rG   ru   rw   r&   ÚdecoderÁ   r¼   r   r   r   rI   ó  s   z)SMB2NetnameNegotiateContextID.from_bufferc                 C   s   | j  d¡S )Nz	utf-18-le)rÁ   Úencoder/   r   r   r   r:   ý  s   z&SMB2NetnameNegotiateContextID.to_bytesc                 C   r½   )Nz-==== SMB2 Netname Negotiate Context ID ====
zNetName: %s
)rÁ   r¾   r   r   r   r^      r¿   z&SMB2NetnameNegotiateContextID.__repr__NrÀ   r   r   r   r   rr   ë  s    
	rr   c                   @   r‹   )ÚNEGOTIATE_REPLYc                 C   sp   d| _ d | _d | _d | _d | _d | _d| _d| _d| _d | _	d | _
d| _d| _d| _d| _d | _g | _d | _d S )NéA   i  € r   r6   )r#   r%   ÚDialectRevisionr+   Ú
ServerGuidr'   ÚMaxTransactSizeÚMaxReadSizeÚMaxWriteSizeÚ
SystemTimeÚServerStartTimeÚSecurityBufferOffsetÚSecurityBufferLengthr*   ÚBufferr°   r-   ÚSecurityBufferr/   r   r   r   r1     s$   
zNEGOTIATE_REPLY.__init__c                 C   s   t  t | ¡¡S rn   )rÄ   rI   rL   ÚBytesIO)Úbbuffr   r   r   rF     s   zNEGOTIATE_REPLY.from_bytesc                 C   sø  t ƒ }tj|  d¡ddd�|_|jdksJ ‚ttj|  d¡ddd�ƒ|_ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_	t
 |  d¡¡|_ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_t|  d¡ƒ|_t|  d¡ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_|  ¡ }|jd	krÅ|  |jtj¡ |  |j¡|_|  ¡ }|jtjkrúg |_|  |jtj¡ t|j	ƒD ]}|j t  !| ¡¡ d|  ¡  d }|  |tj"¡ qß|S )
Nr   r2   Fr3   rÅ   r   r   r   r   )#rÄ   rE   rF   rG   r#   r   r%   r   rÆ   r+   rH   rÇ   r   r'   rÈ   rÉ   rÊ   Útimestamp2datetimerË   rÌ   rÍ   rÎ   r*   rJ   rK   rL   rP   rÏ   r<   r-   rN   rO   rQ   rI   rM   )rS   ÚmsgrU   rW   rV   Úpadsizer   r   r   rI   !  s:   
zNEGOTIATE_REPLY.from_bufferc                 C   s¤  d| _ t| jƒ| _| jjdddd�}|| jjdddd�7 }|| jjjdddd�7 }|| j	jdddd�7 }|| j
 ¡ 7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|t| jƒ7 }|t| jƒ7 }|| j jdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| j7 }| j	dkrÐt| jƒD ]*\}}|| ¡ 7 }|| j	d krÏtt|ƒd	 d
ƒ\}}|d|d d
 t|ƒ  7 }q¥|S )Né€   r   r2   Fr3   r   r   r   r   r   r8   )rÍ   r;   rÐ   rÎ   r#   r:   r%   rÆ   r=   r+   rÇ   r'   rÈ   rÉ   rÊ   Údatetime2timestamprË   rÌ   r*   r>   r-   rR   )r0   r?   rC   ÚngctxrY   rZ   r   r   r   r:   E  s2   

€zNEGOTIATE_REPLY.to_bytesc                 C   sÞ   d}|d| j  7 }|dt| jƒ 7 }|d| jj 7 }|d| j 7 }|dt| jƒ 7 }|d| j 7 }|d| j 7 }|d	| j	 7 }|d
| j
 ¡  7 }|d| j ¡  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|S )Nz ==== SMB2 NEGOTIATE REPLY ====
r[   zSecurityMode: %s
zDialectRevision: %s
zServerGuid: %s
zCapabilities: %s
zMaxTransactSize: %s
zMaxReadSize: %s
zMaxWriteSize: %s
zSystemTime: %s
zServerStartTime: %s
zSecurityBufferOffset: %s
zSecurityBufferLength: %s
zBuffer: %s
zNegotiateContextList: %s
)r#   r]   r%   rÆ   r\   rÇ   r'   rÈ   rÉ   rÊ   rË   Ú	isoformatrÌ   rÍ   rÎ   rÏ   r-   r¾   r   r   r   r^   d  s    zNEGOTIATE_REPLY.__repr__N)	r	   r
   r   r1   r_   rF   rI   r:   r^   r   r   r   r   rÄ     s    

#rÄ   )Úcontextvarsr   ÚenumrL   ÚdatetimeÚuuidÚaiosmb.commons.utils.ts2dtÚaiosmb.protocol.commonr   Ú.aiosmb.wintypes.dtyp.constrcuted_security.guidÚIntFlagr   r   r!   ÚEnumr`   rl   rQ   ro   r†   rp   rž   rt   r¦   r¬   rq   ÚIntEnumr¸   rs   rr   rÄ   r   r   r   r   Ú<module>   s4    v
@66@!