o
    j0                     @   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 )	SecBufferzStores 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|}|st }|t| d |	t|d||ryt|nd dt|t|
t|t|}n#|t| t||	t|d||rt|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    
(
#

