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mZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZ G dd	 d	ZdS )
    N)asyauthSecret)KerberosCredential)MESSAGE_TYPEPKU2U_TOKEN_TYPEgenerate_verifygenerate_initiator_metadatagenerate_init_negogenerate_ap_reqnegoexts_parse_bytes)
get_gssapi)PKINIT)	UniTargetc                   @   sP   e Zd ZdefddZdd Zdd Zdd	d
Zdd ZdddZ	dddZ
dS )SPNEGOEXClientNative
credentialc                 C   sX   || _ d | _| j  | _d | _d| _td| _d| _	d| _
d| _d | _d | _d| _d S )NF   r       )r   target
get_pkinitpkinitgssapiis_azureosurandom_convid_msgctr_krb_finished_data_msgssession_key_dataxxxxxiteractions)selfr    r!   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/spnegoex/client/native.py__init__   s   
zSPNEGOEXClientNative.__init__c                 C   s   | j jS N)session_keycontentsr    r!   r!   r"   get_session_key&   s   z$SPNEGOEXClientNative.get_session_keyc                 C   s"   t | j| j| jj| jj dS )N)r   )r   r   r   r   get_metadatar   r   get_hostname_or_ipr'   r!   r!   r"   __get_metadata)   s   "z#SPNEGOEXClientNative.__get_metadatainitc                       | j ||S r$   )r   
GSS_GetMIC)r    data
message_no	directionr!   r!   r"   sign,      zSPNEGOEXClientNative.signc                    r-   r$   )r   GSS_Wrap)r    r/   r0   r!   r!   r"   encrypt/   r3   zSPNEGOEXClientNative.encryptNc                    s   | j j||||dS )N)r1   	auth_data)r   
GSS_Unwrap)r    r/   r0   r1   r6   r!   r!   r"   decrypt2   s   zSPNEGOEXClientNative.decryptc           !         sr  | j dkr~|   |  j d7  _ | jdu r%| jj| jj g dd}n| jjjd u r0t	d| jjg dd}t
| j| j}|  jd7  _|  }|  jd7  _t| j| j|tj\}}	|  j|	7  _|  jd7  _|| | }
|  j|
7  _|
dd fS | j dkr8ddlm}m}m}m} |  j d7  _ |  j|7  _t|}|  jt|7  _|tj jjj}|  j|tj j7  _| j |\}}}|| _!i | _"|j#| j"d	< t$%d
| j"d< || j"d	  }||j&| j"d }|d }| j'|||| j"| j}t| j| j|tj(\}}|  jd7  _|)|d| j| }t*| j| j|d}|  jd7  _|| }|  j|7  _|dd fS | j dkrddlm}m}m}m} ddl+m,} |  j d7  _ |  j|7  _t|}|  jt|7  _|tj jjj}|t-|d d   }|d d }||j&| j!j.}|/|d|}|0|j} |t-| d d	   }||j&| d d | _1t2| j1| _3dS d S )Nr      T)forwardable	renewable	proxiablecanonicalize)r   kdcoptsz$DC IP must be set for kerberos auth!)r>   )Enctype_checksum_table_enctype_tableKeykeytype    keyvaluer         )EncAPRepPartzenc-partetypecipher   subkey)NFN)4r   setupr   r   build_asreqr   r   r*   dc_ip	Exceptionr   r   r   #_SPNEGOEXClientNative__get_metadatar	   r   
KRB_AS_REQr   r    minikerberos.protocol.encryptionr?   r@   rA   rB   r
   lenr   	CHALLENGEExchangeinner_tokennativeexchange_data_rawdecrypt_asrepr   r   AES256r   r   enctypebuild_apreq
KRB_AP_REQchecksumr   "minikerberos.protocol.asn1_structsrH   intr&   r8   loadr%   r   r   )!r    authDataflagsspnkwargsasreqnegodatametadataap_req	token_rawmsgr?   r@   rA   rB   msgsas_repencasrepr%   rJ   subkey_cipher
subkey_keysubkey_checksum
ap_req_msg_checksum_final
verify_msgret_msgrH   ap_repcipher_texttempenc_partr!   r!   r"   authenticate5   s|   



z!SPNEGOEXClientNative.authenticate)r,   )r,   N)NN)__name__
__module____qualname__r   r#   r(   rQ   r2   r5   r8   r|   r!   r!   r!   r"   r      s    

r   )r   base64asyauth.common.constantsr   #asyauth.common.credentials.kerberosr   ,asyauth.protocols.spnegoex.protocol.messagesr   r   r   r   r   r	   r
   $asyauth.protocols.kerberos.gssapismbr   minikerberos.pkinitr   asysocks.unicomm.common.targetr   r   r!   r!   r!   r"   <module>   s   	$