o
    j/                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZmZmZ G dd	 d	ZG d
d dZdS )    N)sha256)Certificate)asyauthSecret)logger)SPNEGOClientNative)	NegoDatasNegoData	TSRequestr	   TSPasswordCredsTSCredentialsTSRemoteGuardCredsTSRemoteGuardPackageCredc                   @   s4   e Zd Zdd Zdd ZdddZdefd	d
ZdS )	SSLTunnelc                 C   sp   t t j| _d| j_t j| j_| j jt jdB dB O  _t 	 | _
t 	 | _| jj| j
| jdd| _d| _d S )NFi   i   )server_side)ssl
SSLContextPROTOCOL_TLS_CLIENTssl_ctxcheck_hostname	CERT_NONEverify_modeoptionsOP_NO_COMPRESSION	MemoryBIOtls_in_bufftls_out_buffwrap_biotls_objhandshake_doneself r!   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/credssp/client/native.py__init__   s   



zSSLTunnel.__init__c                 C   s   | j jddS )NT)binary_form)r   getpeercertr   r!   r!   r"   get_peer_certificate      zSSLTunnel.get_peer_certificateNc                 C   s   |d ur
| j | | jdu r6z| j  W n tjy/   	 | j }|dkr,| Y S 	 Y n    d| _d}	 z	|| j 7 }W n tjyM   Y |S w q9)NFT    )	r   writer   r   do_handshaker   SSLWantReadErrorr   read)r    dataclient_hellobuffr!   r!   r"   data_in    s.   

zSSLTunnel.data_inr-   c                 C   s4   | j | d}	 | j }|dkr||7 }q	 |S )Nr(   )r   r)   r   r,   )r    r-   r/   rawr!   r!   r"   data_out;   s   
zSSLTunnel.data_outN)__name__
__module____qualname__r#   r&   r0   bytesr2   r!   r!   r!   r"   r      s
    

r   c                   @   s   e Zd Zdd Ze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 Zdd Zd'ddZdd Zd d! Zd"d# Zd(d%d&Zd$S ))CredSSPClientNativec                 C   s@   || _ d | _d | _d| _td| _d| _d| _d | _	d | _
d S )N       Tr   )
credentialauth_ctxcredversionosurandomnonce,_CredSSPClientNative__internal_auth_continueseqno)_CredSSPClientNative__internal_ssl_tunnel_CredSSPClientNative__pubkey)r    r;   r!   r!   r"   r#   I   s   
zCredSSPClientNative.__init__c                 C   sT   t | }|d d d j}|d dkrtd |dd  S td|   |S )Ntbs_certificatesubject_public_key_info
public_keyr   z!CredSSP - removing pubkey padding   zCredSSP - pubkey: %s)r   loadcontentsr   debughex)certdatacertpubkeyr!   r!   r"   certificate_to_pubkeyT   s   

z)CredSSPClientNative.certificate_to_pubkeyc                 C   s:   | j d u rd S | j j }|d u st|dkrd S |d S )Nr   )rD   r   cipherlen)r    ciphersr!   r!   r"   get_cipher_name`   s   
z#CredSSPClientNative.get_cipher_namec                 C   
   | j  S r3   )r<   get_extra_infor   r!   r!   r"   rW   h      
z"CredSSPClientNative.get_extra_infoc                 C   rV   r3   r<   get_active_credentialr   r!   r!   r"   rZ   k   rX   z)CredSSPClientNative.get_active_credentialc                 C   rV   r3   )r;   build_contextr   r!   r!   r"   get_copyn   rX   zCredSSPClientNative.get_copyc                 C   s   | j S r3   )rC   r   r!   r!   r"   get_internal_seqq   s   z$CredSSPClientNative.get_internal_seqc                 C   s   | j   d S r3   rY   r   r!   r!   r"   rZ   t   r'   c                 C   rV   r3   )r<   is_guestr   r!   r!   r"   r^   w   rX   zCredSSPClientNative.is_guestc                 C   rV   r3   )r<   signing_neededr   r!   r!   r"   r_   z   rX   z"CredSSPClientNative.signing_neededc                 C   rV   r3   )r<   encryption_neededr   r!   r!   r"   r`   }   rX   z%CredSSPClientNative.encryption_neededc                 C   rV   r3   )r<   get_seq_numberr   r!   r!   r"   ra      rX   z"CredSSPClientNative.get_seq_numberc                    
   t d)Nz2CredSSP - verify is not supported by the protocol!	Exception)r    r-   	signaturer!   r!   r"   verify      zCredSSPClientNative.verifyinitFc                    rb   )Nz0CredSSP - sign is not supported by the protocol!rc   )r    r-   
message_no	directionreset_cipherr!   r!   r"   sign   rg   zCredSSPClientNative.signc                    $   | j d u r
td| j |d fS Nz"CredSSP - no SSL tunnel available!)rD   rd   r2   r    r-   ri   argskwargsr!   r!   r"   encrypt      
zCredSSPClientNative.encryptc                    rm   rn   )rD   rd   r0   ro   r!   r!   r"   decrypt   rs   zCredSSPClientNative.decryptc                 C   s&   | j d ur| j |||fS |||fS r3   )rD   r2   )r    r-   to_continueerrr!   r!   r"   __return   s   

zCredSSPClientNative.__returnNc              
      s  z| j d u r!|d urt|| _ n| jd u r!td t | _| jd urY| j|}| jjdu rNtd | j d u rEt| j	 | _ |}|dkrMd }ntd |dd fW S td| j
  td|  |d u r| jj|||dI d H \}| _
}	|	d ur|	d	|i}
| jtt|
gd
}t|}td|j  | | dd W S | j
du rt|}td|j  |jd | jk rtd|jd | jf  |jd | _|jd d u rtd|jd d d	 }td|  | jj|||dI d H \}| _
}	|	d ur|	d	|i}
d| ji}|d urtt|
g|d< td| j
  | j
du r| j | _| jdv rod}t|| j | j   }td|   | j|| jI d H \}}|  jd7  _|| |d< | j|d< n!| jdv r| j| j | jI d H \}}|  jd7  _|| |d< t|}td|j  | | dd W S td t|j}|d d urtdt|d d @  |d d u rtd!| j|d dI d H \}}td"|   | jdv rd#}t|| j | j   }td|   ||krtd$n| jdv r%|dd  | j dd  kr%td$|du rdddd%}| j }|jt j!krX|j"}|j"d u rGd&}|#d'|j$#d'|j%#d'd%}t&|}t'd| d(}| j| | jI d H \}}|  jd7  _| j|| d)}t|}td*|j  | | dd W S t(d+ d}d,#d'|d-}t)d.t*|i}| j| | jI d H \}}|  jd7  _| j|| d)}| t| dd W S  ty } zd d |fW  Y d }~S d }~ww )/NzFCredSSP - creating internal SSL tunnel, as no certificate was providedTz#CredSSP - SSL tunnel handshake doner(   z+CredSSP - SSL tunnel handshake not done yetzCredSSP - auth continue: %szCredSSP - token: %s)flagsspn	negoToken)r>   
negoTokensz(CredSSP - sending initial auth token: %sz#CredSSP - got token from server: %sr>   zS[CREDSSP] Server supports version %s which is smaller than our supported version %sr{   z!SSPI auth not supported by serverr   zCredSSP - SSPI token: %sz$CredSSP - internal auth continue: %sF)   r9   s&   CredSSP Client-To-Server Binding Hash zCredSSP - ClientServerHash: %srI   
pubKeyAuthclientNonce)         z)CredSSP - sending internal auth token: %sz CredSSP - internal auth finished	errorCodez(CredSSP - Server sent an error! Code: %sl    zMissing pubKeyAuthzCredSSP - verification data: %ss&   CredSSP Server-To-Client Binding Hash z%CredSSP - Server verification failed!)
domainNameuserNamepassword.z	utf-16-le)credTypecredentials)r>   authInfoz!CredSSP - sending credentials: %sz-DO NOT USE THIS! THIS IS NOT IMPLEMENTED YET!KERBEROS)packageName
credBuffer	logonCred)+rE   r8   rQ   rD   r   rL   r   r0   r   r&   rB   r<   authenticater>   r   r   r	   native_CredSSPClientNative__returndumprJ   rd   r]   rC   r   rA   digestrM   rr   rt   rZ   styper   PASSWORDdomainencodeusernamesecretr
   r   printr   r   )r    tokenrx   certificatery   remote_credguardrq   ssldata
returndatarv   	negotokenretokenresulttdata	sspitokenClientServerHashMagicClientServerHashsealedMessagere   verification_data_credsr=   r   resr   r-   remcredguardcredser!   r!   r"   r      s  






 
 







z CredSSPClientNative.authenticate)rh   F)NNNF)r4   r5   r6   r#   staticmethodrQ   rU   rW   rZ   r\   r]   r^   r_   r`   ra   rf   rl   rr   rt   r   r   r!   r!   r!   r"   r8   H   s(    

r8   )r?   r   hashlibr   asn1crypto.x509r   asyauth.common.constantsr   asyauth.protocols.credsspr   &asyauth.protocols.spnego.client.nativer   /asyauth.protocols.credssp.messages.asn1_structsr   r   r	   r
   r   r   r   r   r8   r!   r!   r!   r"   <module>   s   (7