o
    �õ±j  ã                   @   sJ   d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	 G dd„ dƒZ
dS )é    )ÚWinSSPIÚSSPIPackage)ÚISC_REQÚ
SSPIResult)ÚNTLMClientNative)ÚNTLMCredentialc                   @   sº   e Zd Zdefdd„Zedd„ ƒZdd„ Zd+d	d
„Zd+dd„Z	dd„ Z
d,dd„Zd-dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d„ Z
d,d'd„Zd.d)d*„ZdS )/ÚNTLMClientSSPIÚ
credentialc                 C   s0   || _ ttjƒ| _d | _t| j ƒ| _tj	| _
d S ©N)r	   r   r   ÚNTLMÚsspiÚsession_keyr   Úntlm_ctxr   Ú
CONNECTIONÚflags)Úselfr	   © r   ú•/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/ntlm/client/sspi.pyÚ__init__   s
   zNTLMClientSSPI.__init__c                 C   ó   | j jS r
   )r   ÚntlmChallenge©r   r   r   r   r      s   zNTLMClientSSPI.ntlmChallengec                 C   r   r
   )r   Ú
seq_numberr   r   r   r   Úget_seq_number   s   zNTLMClientSSPI.get_seq_numberÚClientc                 C   ó   | j j|d�S ©N)Úmode)r   Úget_sealkey©r   r   r   r   r   r      ó   zNTLMClientSSPI.get_sealkeyc                 C   r   r   )r   Úget_signkeyr   r   r   r   r!      r    zNTLMClientSSPI.get_signkeyc                 Ã   s   �| j  |||¡I d H S r
   ©r   Úencrypt)r   ÚdataÚsequence_nor   r   r   r#      s   €zNTLMClientSSPI.encryptÚinitNc                 Ã   ó   �| j j||||d�I d H S ©N)Ú	directionÚ	auth_data©r   Údecrypt©r   r$   r%   r)   r*   r   r   r   r,      ó   €zNTLMClientSSPI.decryptFc                 Ã   r'   )N)r)   Úreset_cipher)r   Úsign)r   r$   Ú
message_nor)   r/   r   r   r   r0   !   r.   zNTLMClientSSPI.signc                 Ã   ó   �| j  ||¡I d H S r
   )r   Úverify)r   r$   Ú	signaturer   r   r   r3   $   ó   €zNTLMClientSSPI.verifyc                 C   s   | j  ||||||¡S r
   )r   ÚSEAL)r   Ú
signingKeyÚ
sealingKeyÚmessageToSignÚmessageToEncryptÚseqNumÚcipher_encryptr   r   r   r6   '   s   zNTLMClientSSPI.SEALc                 C   s   | j  ||||¡S r
   )r   ÚSIGN)r   r7   Úmessager;   r<   r   r   r   r=   *   s   zNTLMClientSSPI.SIGNc                 C   s   | j s	| j ¡ | _ | j S r
   )r   r   Úget_session_keyr   r   r   r   r?   -   s   zNTLMClientSSPI.get_session_keyc                 C   ó
   | j  ¡ S r
   )r   Úget_extra_infor   r   r   r   rA   3   ó   
zNTLMClientSSPI.get_extra_infoc                 C   r@   r
   )r   Úis_extended_securityr   r   r   r   rC   6   rB   z#NTLMClientSSPI.is_extended_securityc                 C   r@   r
   )r   Úsigning_neededr   r   r   r   rD   9   rB   zNTLMClientSSPI.signing_neededc                 C   r@   r
   )r   Úencryption_neededr   r   r   r   rE   <   rB   z NTLMClientSSPI.encryption_neededc                 Ã   r2   r
   r"   )r   r$   r1   r   r   r   r#   ?   r5   c                 Ã   r'   r(   r+   r-   r   r   r   r,   B   r.   r   c                 Ë   sÊ   �d}|d u r
| j }|d u r6| j d |¡ | jj||||d�\}}	| _ }
|tjkr+d}| j |	¡ |	|d fS | j |¡ | jj||||d�\}}	| _ }
|tjkrRd}| j 	|	¡ | j 
|  ¡ ¡ |	|d fS )NF)r   Úcb_dataT)r   r   Úacquire_handleÚinitialize_contextr   ÚCONTINUEr   Úload_negotiateÚload_challengeÚload_authenticateÚload_sessionkeyr?   )r   ÚauthDatar   r   ÚspnrF   ÚkwargsÚto_continueÚresultr$   Úexpiryr   r   r   ÚauthenticateE   s$   €



zNTLMClientSSPI.authenticate)r   )r&   N)NF)NNr   NN)Ú__name__Ú
__module__Ú__qualname__r   r   Úpropertyr   r   r   r!   r#   r,   r0   r3   r6   r=   r?   rA   rC   rD   rE   rT   r   r   r   r   r      s*    





r   N)Úasyauth.common.winapi.winsspir   r   Úasyauth.common.winapi.constantsr   r   Ú$asyauth.protocols.ntlm.client.nativer   Úasyauth.common.credentials.ntlmr   r   r   r   r   r   Ú<module>   s
    