o
    j,                     @   s   d dl mZmZ d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dlmZ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 G dd dZdS )    )
get_gssapiGSSWrapToken)AP_REP)Key)ISC_REQ)r   _enctype_table)r   AP_REQ)r   )r   )InitialContextToken)	WSNETAuthc                   @   s^   e Z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efddZdS )KerberosClientWSNETc                 C   s<   d| _ || _t | _d | _d | _d | _d | _d | _d | _	d S )Nr   )

iterationssettingsr
   ksspiclienttargetgssapietypesession_key
seq_number)selfr    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/kerberos/client/wsnet.py__init__   s   
zKerberosClientWSNET.__init__c                 C   s   | j S )z
		Returns the initial sequence number. It is 0 by default, but can be adjusted during authentication, 
		by passing the 'seq_number' parameter in the 'authenticate' function
		)r   r   r   r   r   get_seq_number   s   z"KerberosClientWSNET.get_seq_numberc                 C      t j| jv S )z3
		Checks if integrity protection was negotiated
		)r   	INTEGRITYflagsr   r   r   r   signing_needed$      z"KerberosClientWSNET.signing_neededc                 C   r   )z3
		Checks if confidentiality flag was negotiated
		)r   CONFIDENTIALITYr   r   r   r   r   encryption_needed*   r   z%KerberosClientWSNET.encryption_neededinitc                    s   | j j|||dS )z
		Signs a message. 
		)	direction)r   
GSS_GetMIC)r   data
message_nor#   r   r   r   sign0   s   zKerberosClientWSNET.signc                    s*   | j j||g|R i |\}}||fS )z
		Encrypts a message. 
		)r   GSS_Wrap)r   r%   r&   argskwargseeeer   r   r   encrypt6   s    zKerberosClientWSNET.encryptc                    s   | j j||g|R i |S )z9
		Decrypts message. Also performs integrity checking.
		)r   
GSS_Unwrap)r   r%   r&   r)   r*   r   r   r   decrypt=   s   zKerberosClientWSNET.decryptc                 C   s   | j jS )N)r   contentsr   r   r   r   get_session_keyC   s   z#KerberosClientWSNET.get_session_keyNr   c              
      sp  z|d u rt jt jB t jB t jB }t j|v r| jdkr[t jt jB t jB t jB t jB t jB }| jj	dd|d|j
ddI d H \}}}}	|	d urI|	t || _|  jd7  _|dd fW S | jdkr| jj	dd|d|j
|dI d H \}}}
}	|	d ur~d d |	fW S t || _| j I d H \}}	|	d urd d |	fW S t|
j}t|d	 d
 || _t j| jv rt| j| _nt| j| _|d	 d
 dkr| j I d H \}}	|	d urd d |	fW S t|dd  j| _|  jd7  _| j I d H  |
dd fW S td| jj	dd|d|j
ddI d H \}}}}	|	d urd d |	fW S t || _t|}t|jd }| j I d H \}}	|	d ur;|	tt|jd d	 d
   }t|j || _| j I d H  |jd d	 d
 dkr| j I d H \}}	|	d uryd d |	fW S t|dd  j| _t j| jv rt| j| _nt| j| _|! dd fW S  ty } zd d |fW  Y d }~S d }~ww )Nr   KERBEROS        )authdata   Tzenc-partr         FzFSSPI Kerberos -RPC - auth encountered too many calls for authenticate.innerContextTokenticket)"r   r    r   REPLAY_DETECTSEQUENCE_DETECTMUTUAL_AUTHr   USE_DCE_STYLEr   authenticatevaluer   get_sessionkeyr   loadnativer   r   
gssapi_smbr   r   get_sequencenor   
from_bytesSND_SEQr   
disconnect	Exceptionr	   r   r   intenctypedump)r   authDatar   cb_dataspnr*   statusretflagsapreqerrr%   session_key_dataaprepraw_seq_data	tokendatatokencipherer   r   r   r?   F   s   

(

(
(




z KerberosClientWSNET.authenticate)r"   )NNN)__name__
__module____qualname__r   r   r   r!   r'   r,   r.   r0   r   r?   r   r   r   r   r      s    
r   N)minikerberos.gssapi.gssapir   r   "minikerberos.protocol.asn1_structsr    minikerberos.protocol.encryptionr   asyauth.common.winapi.constantsr   r   r   $asyauth.protocols.kerberos.gssapismbrD   asyauth.common.winapi.tokenr	   wsnet.pyodide.clientauthr
   r   r   r   r   r   <module>   s   