o
    �õ±j•0  ã                   @   s  d dl Z d dlZd dlZd dlmZmZmZ d dlmZ ej	Z	ej
Z
ejZejZejZejZejZeZejZejZejZejZejZejZeZeeƒZeeƒZeeƒZ e Z!G dd„ dej"ƒZ"dZ#e dddd d d ¡Z$d	d
„ Z%G dd„ de"ƒZ&ee&ƒZ'e&Z(e'Z)eZ*eZ+G dd„ de"ƒZ,ee,ƒZ-G dd„ de"ƒZ.G dd„ de"ƒZ/G dd„ dej"ƒZ0G dd„ de"ƒZ1G dd„ de"ƒZ2ee2ƒZ3ee0ƒZ4e0Z5e4Z6e0Z7e4Z8G dd„ de j9ƒZ:dd„ Z;d,dd„Z<dej=ej>B ej?B ej@B d ddfdd „ZAd-d!d"„ZBd.d$d%„ZCd/d&d'„ZDd(d)„ ZEd*d+„ ZFdS )0é    N)ÚSECBUFFER_TYPEÚSEC_EÚISC_REQ)ÚGSSWrapTokenc                   @   s"   e Zd ZeejƒdkrdZdS dS )Ú	Structureé   é   N)Ú__name__Ú
__module__Ú__qualname__ÚsizeofÚctypesÚc_void_pÚ_pack_© r   r   ú•/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/common/winapi/functiondefs.pyr      s    ÿr   i@  iA  r   c                 C   s$   | j d> | j }ttj|d d� S )Né    é
   )Úmicroseconds)ÚdwHighDateTimeÚdwLowDateTimeÚ_FILETIME_null_dateÚdatetimeÚ	timedelta)ÚftÚ	timestampr   r   r   ÚFiletimeToDateTime&   s   r   c                   @   s   e Zd ZdefdefgZdS )ÚFILETIMEr   r   N)r	   r
   r   ÚDWORDÚ_fields_r   r   r   r   r   .   ó    þr   c                   @   s   e Zd ZdefdefgZdS )ÚLUIDÚLowPartÚHighPartN)r	   r
   r   r   ÚLONGr   r   r   r   r   r!   :   r    r!   c                
   @   sF   e Zd Zdefdefdefdefdefdefdefdefd	efg	Zd
S )ÚSEC_CHANNEL_BINDINGSÚdwInitiatorAddrTypeÚcbInitiatorLengthÚdwInitiatorOffsetÚdwAcceptorAddrTypeÚcbAcceptorLengthÚdwAcceptorOffsetÚcbApplicationDataLengthÚdwApplicationDataOffsetÚBufferN)r	   r
   r   ÚULONGÚLPVOIDr   r   r   r   r   r%   B   s    ÷r%   c                   @   s(   e Zd ZdefdefgZedd„ ƒZdS )ÚSecPkgContext_SessionKeyÚSessionKeyLengthÚ
SessionKeyc                 C   s   t j| j| jd�S ©N)Úsize)r   Ú	string_atr3   r2   ©Úselfr   r   r   r.   S   s   zSecPkgContext_SessionKey.BufferN)r	   r
   r   r/   ÚLPBYTEr   Úpropertyr.   r   r   r   r   r1   P   s    r1   c                   @   s$   e Zd ZdefdefgZdd„ ZdS )Ú	SecHandleÚdwLowerÚdwUpperc                 C   s$   t j | t  tƒ ¡t  tƒ ¡¡ d S ©N)r   r   Ú__init__Úpointerr/   r7   r   r   r   r?   [   s   $zSecHandle.__init__N)r	   r
   r   ÚPULONGr   r?   r   r   r   r   r;   X   s    r;   c                   @   sF   e Zd ZdZdefdefdefgZde ej	fdd„Z
edd	„ ƒZd
S )Ú	SecBufferzñStores a memory buffer: size, type-flag, and POINTER. 
	The type can be empty (0) or token (2).
	InitializeSecurityContext will write to the buffer that is flagged "token"
	and update the size, or else fail 0x80090321=SEC_E_BUFFER_TOO_SMALL.ÚcbBufferÚ
BufferTypeÚpvBufferó    c              
   C   s:   t j|t|ƒd�}t | t|ƒ|jt  t  |¡t	¡¡ d S r4   )
r   Úcreate_string_bufferÚlenr   r?   r   ÚvalueÚcastr@   ÚPVOID)r8   ÚtokenÚbuffer_typeÚbufr   r   r   r?   d   s   (zSecBuffer.__init__c                 C   s   t | jƒtj| j| jd�fS r4   )r   rD   r   r6   rE   rC   r7   r   r   r   r.   g   s   zSecBuffer.BufferN)r	   r
   r   Ú__doc__r/   rK   r   Úmaxtoken_sizer   ÚSECBUFFER_TOKENr?   r:   r.   r   r   r   r   rB   ^   s    rB   c                   @   sH   e Zd ZdZdefdefdeeƒfgZddd„Zdd	„ Z	e
d
d„ ƒZdS )ÚSecBufferDesczsDescriptor stores SECBUFFER_VERSION=0, number of buffers (e.g. one),
	and POINTER to an array of SecBuffer structs.Ú	ulVersionÚcBuffersÚpBuffersNc                 C   sH   |d urt  | dt|ƒtt|ƒ |Ž ¡ d S t  | ddt tƒ ¡¡ d S )Nr   r   )r   r?   rH   rB   r   r@   )r8   Ú
secbuffersr   r   r   r?   o   s   $zSecBufferDesc.__init__c                 C   s
   | j | S r>   )rU   )r8   Úindexr   r   r   Ú__getitem__u   s   
zSecBufferDesc.__getitem__c                 C   s*   g }t | jƒD ]}| | j| j¡ q|S r>   )ÚrangerT   ÚappendrU   r.   )r8   ÚdataÚir   r   r   ÚBuffersx   s   zSecBufferDesc.Buffersr>   )r	   r
   r   rO   r/   ÚPOINTERrB   r   r?   rX   r:   r]   r   r   r   r   rR   k   s    
rR   c                   @   s   e Zd ZdZdZdS )ÚDecryptFlagsr   l       N)r	   r
   r   Ú	SIGN_ONLYÚSECQOP_WRAP_NO_ENCRYPTr   r   r   r   r_   ‡   s    r_   c                 C   s4   dd„ }t jj}tg|_t|_||_|t| ƒƒ}d S )Nc                 S   ó,   t | ƒt jkrt | ƒS tdd| t | ƒf ƒ‚©Nú!%s failed with error code %s (%s)ÚDecryptMessage©r   ÚOKÚ	Exception©ÚresultÚfuncÚ	argumentsr   r   r   ÚerrcŒ   ó   zFreeContextBuffer.<locals>.errc)	ÚwindllÚSecur32ÚFreeContextBufferrK   Úargtypesr   ÚrestypeÚerrcheckÚbyref)Úsecbuffrm   Ú_FreeContextBufferÚresr   r   r   rq   ‹   s   rq   c                 C   sˆ   dd„ }t jj}tttttttttg	|_	t
|_||_d }| r%t|  d¡ƒ}t| d¡ƒ}	tƒ }
tƒ }|||	|||d d t|
ƒt|ƒƒ	}|
S )Nc                 S   s(   t | ƒt jkr	| S tdd| t | ƒf ƒ‚)Nrd   ÚAcquireCredentialsHandlerf   ri   r   r   r   rm   �   s   z&AcquireCredentialsHandle.<locals>.errcÚascii)ro   rp   ÚAcquireCredentialsHandleAÚ	PSEC_CHARr/   ÚPLUIDrK   ÚPCredHandleÚ
PTimeStamprr   r   rs   rt   ÚLPSTRÚencodeÚ
CredHandleÚ	TimeStampru   )Úclient_nameÚpackage_nameÚ	tragetspnÚ
cred_usageÚpluidÚauthdatarm   Ú_AcquireCredentialsHandleÚcnÚpnÚcredsÚtsrx   r   r   r   ry   œ   s    ry   c                    s|  ‡ fdd„}t jj}tttttttttttt	g|_
t|_||_ˆ r)tˆ  d¡ƒ}	nd }	tƒ }
tƒ }tƒ }g }|r=t|ƒg}|r_dt|ƒjdddd� d	jdddd� | }| t|tjd
�¡ t|ƒ}|sŠtƒ }|t| ƒd |	t|ƒd||ryt|ƒnd dt|ƒt|
ƒt|ƒt|ƒƒ}n#|t| ƒt|ƒ|	t|ƒd||r�t|ƒnd dt|ƒt|
ƒt|ƒt|ƒƒ}|
j}|||d d t|jƒ|fS )Nc                    s@   t | ƒt jt jt jt jt jfv rt | ƒS tdd| t | ƒˆ f ƒ‚)Nz,%s failed with error code %s (%s) Target: %sÚInitializeSecurityContext)r   rg   ÚCOMPLETE_AND_CONTINUEÚCOMPLETE_NEEDEDÚCONTINUE_NEEDEDÚINCOMPLETE_CREDENTIALSrh   ri   ©Útargetr   r   rm   µ   s    z'InitializeSecurityContext.<locals>.errcrz   s                           r   ÚlittleF)Ú	byteorderÚsignedr   ©rL   rM   r   r   )ro   rp   ÚInitializeSecurityContextAr~   ÚPCtxtHandler|   r/   ÚPSecBufferDescrA   r   rr   r   rs   rt   r€   r�   rR   rƒ   rB   rH   Úto_bytesrZ   r   ÚSECBUFFER_CHANNEL_BINDINGSÚ
CtxtHandleru   Úintr]   r   rI   )r�   r•   ÚctxÚflagsÚTargetDataReprL   Úcb_datarm   Ú_InitializeSecurityContextÚptargetÚnewbufÚoutputflagsÚexpiryÚsbÚcbrx   r[   r   r”   r   r�   ´   s0   
,DFr�   c           	      C   s°   dd„ }t jj}ttttg|_t|_	||_
g }| t|tjd�¡ | t|d d… tjd�¡ | t|dd … tjd�¡ t|ƒ}tƒ }t|ƒ}|t| ƒt|ƒ|t|ƒƒ}|jS )Nc                 S   rb   rc   rf   ri   r   r   r   rm   Ø   rn   zDecryptMessage.<locals>.errcr™   éÿÿÿÿ)ro   rp   re   r›   rœ   r/   rA   rr   r   rs   rt   rZ   rB   r   rQ   ÚSECBUFFER_DATAÚSECBUFFER_PADDINGrR   ru   r]   )	r¡   rL   r[   Ú
message_norm   Ú_DecryptMessagerV   r¢   rx   r   r   r   re   ×   s   re   Tc           
      C   s´   dd„ }t jj}ttttg|_t|_||_	d}g }| 
tdtjd�¡ | 
t|tjd�¡ t|ƒ}tdƒ}tdƒ}|| |t|ƒ|ƒ}|du rSt |jd d ¡}	|	jS |jd d S )	Nc                 S   rb   ©Nrd   ÚEncryptMessagerf   ri   r   r   r   rm   ò   rn   z6GetSequenceNumberFromEncryptdataKerberos.<locals>.errcs   HAHAHAHAHAHAHAHAó                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r™   r   r   T)ro   rp   r²   r›   r/   rœ   rr   r   rs   rt   rZ   rB   r   rQ   r­   rR   ru   r   Ú
from_bytesr]   ÚSND_SEQ)
r¡   Úunwraprm   Ú_EncryptMessager[   rV   r¢   r¯   rx   Útokr   r   r   Ú(GetSequenceNumberFromEncryptdataKerberosñ   s"   r¹   c           	      C   sž   dd„ }t jj}ttttg|_t|_||_	g }| 
tdtjd�¡ | 
t|tjd�¡ | 
tdtjd�¡ t|ƒ}tdƒ}t|ƒ}|| |t|ƒ|ƒ}||jfS )Nc                 S   rb   r±   rf   ri   r   r   r   rm     rn   zEncryptMessage.<locals>.errcr³   r™   r   )ro   rp   r²   r›   r/   rœ   rr   r   rs   rt   rZ   rB   r   rQ   r­   r®   rR   ru   r]   )	r¡   r[   r¯   ÚfQOPrm   r·   rV   r¢   rx   r   r   r   r²     s   
r²   c                 C   sB   dd„ }t jj}tttg|_t|_||_	|t
| ƒ|jt
|ƒƒ}d S )Nc                 S   rb   )Nrd   ÚQueryContextAttributesrf   ri   r   r   r   rm   -  rn   z$QueryContextAttributes.<locals>.errc)ro   rp   ÚQueryContextAttributesWr›   r/   rK   rr   r   rs   rt   ru   rI   )r¡   ÚattrÚ
sec_structrm   Ú_QueryContextAttributesrx   r   r   r   r»   +  s   r»   c                 C   sv   dd„ }t jj}ttttg|_t|_||_	t
d| ƒ t
d| ƒ tt|ƒƒ}t |t|ƒ¡}|t| ƒ|j||ƒ}d S )Nc                 S   rb   )Nrd   ÚSetContextAttributesrf   ri   r   r   r   rm   ?  rn   z"SetContextAttributes.<locals>.errczset data: %szset attr: %s)ro   rp   ÚSetContextAttributesWr›   r/   rK   rr   r   rs   rt   ÚprintrH   r   rG   ru   rI   )r¡   r½   r[   rm   Ú_SetContextAttributesÚdata_lenÚ	data_buffrx   r   r   r   rÀ   =  s   rÀ   )NN)r   )T)r   N)GÚenumr   r   Úasyauth.common.winapi.constantsr   r   r   Úminikerberos.gssapi.gssapir   ro   ru   Ú	addressofr   ÚSIZEOFÚc_char_pr€   Úc_charÚCHARÚPCHARÚc_uint32r   r^   Úc_int32r$   r/   r   r0   Úc_ubyteÚBYTErK   ÚPPVOIDr9   ÚLPULONGrA   r   rP   r   r   r   Ú	PFILETIMErƒ   r   ÚSEC_CHARr|   r!   r}   r%   r1   r;   rB   rR   rœ   Ú
PSecHandler‚   r~   rŸ   r›   ÚEnumr_   rq   ry   Ú	INTEGRITYÚCONFIDENTIALITYÚSEQUENCE_DETECTÚREPLAY_DETECTr�   re   r¹   r²   r»   rÀ   r   r   r   r   Ú<module>   sp    
(
#

