o
    �õ±j„0  ã                   @   s  d dl Z 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ZG dd	„ d	e jƒZG d
d„ de jƒZG dd„ de jƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZdd„ Zdd„ Zedkr‚eƒ  dS dS )é    N)ÚEncryptionType)Ú
encryption)Úmd5)Úhmac)ÚRC4ó   `+	*†H†÷c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	ÚGSSAPIFlagsi   é   é   é   é   é   é    N)
Ú__name__Ú
__module__Ú__qualname__ÚGSS_C_DCE_STYLEÚGSS_C_DELEG_FLAGÚGSS_C_MUTUAL_FLAGÚGSS_C_REPLAY_FLAGÚGSS_C_SEQUENCE_FLAGÚGSS_C_CONF_FLAGÚGSS_C_INTEG_FLAG© r   r   ú—/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/kerberos/gssapismb.pyr      s    r   c                   @   s   e Zd ZdZdZdZdZdS )ÚKG_USAGEé   é   é   é   N)r   r   r   ÚACCEPTOR_SEALÚACCEPTOR_SIGNÚINITIATOR_SEALÚINITIATOR_SIGNr   r   r   r   r      s
    r   c                   @   s   e Zd ZdZdZdZdS )Ú
FlagsFieldr   r
   r   N)r   r   r   ÚSentByAcceptorÚSealedÚAcceptorSubkeyr   r   r   r   r$   !   s    r$   c                   @   ó4   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	S )
Ú
GSSMIC_RC4c                 C   s"   d| _ d| _d| _d | _d | _d S )Ns   ó    ó   ÿÿÿÿ©ÚTOK_IDÚSGN_ALGÚFillerÚSND_SEQÚ	SGN_CKSUM©Úselfr   r   r   Ú__init__(   ó
   
zGSSMIC_RC4.__init__c                 C   ó   t  t | ¡¡S ©N)r)   Úfrom_bufferÚioÚBytesIO©Údatar   r   r   Ú
from_bytes/   ó   zGSSMIC_RC4.from_bytesc                 C   sF   t ƒ }|  d¡|_|  d¡|_|  d¡|_|  d¡|_|  d¡|_|S )Nr
   r   r   )r)   Úreadr-   r.   r/   r0   r1   )ÚbuffÚmicr   r   r   r8   3   s   zGSSMIC_RC4.from_bufferc                 C   s<   | j }|| j7 }|| j7 }|| j7 }| jd ur|| j7 }|S r7   r,   ©r3   Útr   r   r   Úto_bytes>   s   




zGSSMIC_RC4.to_bytesN©r   r   r   r4   Ústaticmethodr=   r8   rD   r   r   r   r   r)   '   s    


r)   c                   @   r(   )
ÚGSSWRAP_RC4c                 C   s.   d| _ d| _d | _d| _d | _d | _d | _d S )Ns   r*   s   ÿÿ©r-   r.   ÚSEAL_ALGr/   r0   r1   Ú
Confounderr2   r   r   r   r4   I   ó   
zGSSWRAP_RC4.__init__c                 C   r6   r7   )rG   r8   r9   r:   r;   r   r   r   r=   R   r>   zGSSWRAP_RC4.from_bytesc                 C   s^   t ƒ }|  d¡|_|  d¡|_|  d¡|_|  d¡|_|  d¡|_|  d¡|_|  d¡|_|S )Nr
   r   )	rG   r?   r-   r.   rI   r/   r0   r1   rJ   )r@   Úwrapr   r   r   r8   V   s   zGSSWRAP_RC4.from_bufferc                 C   sR   | j }|| j7 }|| j7 }|| j7 }|| j7 }| jr'|| j7 }| jr'|| j7 }|S r7   rH   rB   r   r   r   rD   c   s   





zGSSWRAP_RC4.to_bytesNrE   r   r   r   r   rG   H   s    	

rG   c                   @   s2   e Zd Zdd„ Zddd„Zddd	„Zdd
d„ZdS )Ú
GSSAPI_RC4c                 C   s
   || _ d S r7   ©Úsession_key)r3   rO   r   r   r   r4   s   s   
zGSSAPI_RC4.__init__Úinitc                 C   sT  d}dt |ƒd  d@ }t|gƒ| }||7 }tƒ }|dkr*|jdddd�d |_n|jdddd�d	 |_tj| jjd
d�}| 	d¡ | 
¡ }	d}
t|
jdddd�| ¡ d d…  ƒ 
¡ }tj|	d
d�}| 	|¡ | 
¡ d d… |_d}
tj| jjd
d�}| 	|
jdddd�¡ tj| 
¡ d
d�}| 	|j¡ | 
¡ }t|ƒ |j¡|_|| ¡  S )Ns   `#	*†H†÷r   é   rP   ÚbigF©Úsignedó       r+   r   ©Ú	digestmodó   signaturekey é   Úlittler   r   )ÚlenÚbytesr)   rD   r0   r   ÚnewrO   ÚcontentsÚupdateÚdigestr   r1   r   Úencrypt)r3   r<   ÚsequenceNumberÚ	directionÚGSS_GETMIC_HEADERÚpadÚpadStrrA   Ú	Ksign_ctxÚKsignÚidÚtempÚ
chksum_ctxÚKseq_ctxÚKseqr   r   r   Ú
GSS_GetMICv   s0   
(
zGSSAPI_RC4.GSS_GetMICTNc                 C   s  d}dt |ƒd  d@ }t|gƒ| }||7 }tƒ }	d|	_|dkr-|jdddd	�d
 |	_n|jdddd	�d |	_t d¡|	_t	j
| jjdd�}
|
 d¡ |
 ¡ }d}t|jdddd	�|	 ¡ d d…  |	j | ƒ ¡ }t	j
|dd�}
|
 |¡ |
 ¡ d d… |	_d}| jjD ]}|t|dA gƒ7 }q†d}t	j
|dd�}
|
 |jdddd	�¡ t	j
|
 ¡ dd�}
|
 |jdddd	�¡ |
 ¡ }d}t	j
| jjdd�}
|
 |jdddd	�¡ t	j
|
 ¡ dd�}
|
 |	j¡ |
 ¡ }t|ƒ |	j¡|	_|d u�rlt |dt |ƒ d … ¡}d}t	j
| jjdd�}
|
 |jdddd	�¡ t	j
|
 ¡ dd�}
|
 |j¡ t|
 ¡ ƒ |j¡}d}t	j
|dd�}
|
 |jdddd	�¡ t	j
|
 ¡ dd�}
|
 |d d… ¡ |
 ¡ }t|ƒ}| |	j| ¡dd … }n|du �r‚t|ƒ}| |	j¡|	_| |¡}n|}||	 ¡  }||fS )Nr   r   é   s    rP   r   rR   FrS   rU   r+   r   rV   rX   é   rZ   ó    éð   r   T)r[   r\   rG   rI   rD   r0   ÚosÚurandomrJ   r   r]   rO   r^   r_   r`   r   r1   r   ra   r=   Údecrypt)r3   r<   Úseq_numrc   ra   Ú	auth_dataÚGSS_WRAP_HEADERre   rf   Útokenrj   rh   ri   Ú	Sgn_CksumÚklocalÚbÚKcryptrm   rL   Úsnd_seqÚrc4Ú
cipherTextÚ	finalDatar   r   r   ÚGSS_Wrapœ   sr   
2


zGSSAPI_RC4.GSS_Wrapc                 C   s   |   |||d|¡S )NF)r‚   )r3   r<   rv   rc   rw   r   r   r   Ú
GSS_Unwrapî   s   zGSSAPI_RC4.GSS_Unwrap)rP   )rP   TN©rP   N)r   r   r   r4   rn   r‚   rƒ   r   r   r   r   rM   r   s
    

&RrM   c                   @   r(   )
ÚGSSMICc                 C   s"   d| _ d | _d| _d | _d | _d S )Ns   s   ÿÿÿÿÿ)r-   ÚFlagsr/   r0   r1   r2   r   r   r   r4   ó   r5   zGSSMIC.__init__c                 C   r6   r7   )r…   r8   r9   r:   r;   r   r   r   r=   ú   r>   zGSSMIC.from_bytesc                 C   s`   t ƒ }|  d¡|_ttj|  d¡ddd�ƒ|_|  d¡|_tj|  d¡ddd�|_|  ¡ |_	|S )Nr
   r	   rR   FrS   é   r   )
r…   r?   r-   r$   Úintr=   r†   r/   r0   r1   ©r@   Úmr   r   r   r8   þ   s   
zGSSMIC.from_bufferc                 C   sT   | j }|| jjdddd�7 }|| j7 }|| jjdddd�7 }| jd ur(|| j7 }|S )Nr	   rR   FrS   r   )r-   r†   rD   r/   r0   r1   rB   r   r   r   rD     s   


zGSSMIC.to_bytesNrE   r   r   r   r   r…   ò   s    

	r…   c                   @   r(   )
ÚGSSWrapTokenc                 C   s.   d| _ d | _d| _d | _d | _d | _d | _d S )Ns   ó   ÿ)r-   r†   r/   ÚECÚRRCr0   ÚDatar2   r   r   r   r4     rK   zGSSWrapToken.__init__c                 C   r6   r7   )r‹   r8   r9   r:   r;   r   r   r   r=     r>   zGSSWrapToken.from_bytesc                 C   s†   t ƒ }|  d¡|_ttj|  d¡ddd�ƒ|_|  d¡|_tj|  d¡ddd�|_tj|  d¡ddd�|_	tj|  d¡ddd�|_
|S )Nr
   r	   rR   FrS   r   )r‹   r?   r-   r$   rˆ   r=   r†   r/   r�   rŽ   r0   r‰   r   r   r   r8   !  s   zGSSWrapToken.from_bufferc                 C   s€   | j }|| jjdddd�7 }|| j7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }| jd ur>|| j7 }|S )Nr	   rR   FrS   r
   r   )r-   r†   rD   r/   r�   rŽ   r0   r�   rB   r   r   r   rD   ,  s   


zGSSWrapToken.to_bytesNrE   r   r   r   r   r‹     s    	


r‹   c                   @   s>   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„ZdS )Ú
GSSAPI_AESc                 C   s   || _ || _|| _d | _d S r7   )rO   Úchecksum_profileÚcipher_typeÚcipher)r3   rO   r’   r‘   r   r   r   r4   9  s   
zGSSAPI_AES.__init__c                 C   s4   |t |ƒ; }t |ƒ| }||d … |d |…  }|S r7   ©r[   )r3   r<   ÚnumBytesÚleftÚresultr   r   r   Úrotate?  s   zGSSAPI_AES.rotatec                 C   s(   |t |ƒ; }||d … |d |…  }|S r7   r”   )r3   r<   r•   r—   r   r   r   ÚunrotateE  s   zGSSAPI_AES.unrotatec                 C   st   dt |ƒd  d@ }t|gƒ| }||7 }tƒ }tj|_||_|  ¡ }| | j	t
jj|| ¡ d d…  ¡|_| ¡ S )Nr   rQ   r   )r[   r\   r…   r$   r'   r†   r0   r‘   ÚchecksumrO   r   r#   ÚvaluerD   )r3   r<   rv   re   rf   rŠ   r‘   r   r   r   rn   J  s   &zGSSAPI_AES.GSS_GetMICc           
      C   sÎ   |   ¡ }|jt|ƒ|j  d@ }d| }||7 }tƒ }tjtjB |_||_d|_	||_
| | jtjj|| ¡  d ¡}d|_	|  ||j	|j ¡}|d|j	 |j d … }| ¡ |d d|j	 |j …  }	||	fS )NrY   rŒ   r   é   r   )r’   Ú	blocksizer[   r‹   r$   r&   r'   r†   r�   rŽ   r0   ra   rO   r   r"   r›   rD   r˜   )
r3   r<   rv   r“   re   rf   rC   Úcipher_textÚret1Úret2r   r   r   r‚   W  s    zGSSAPI_AES.GSS_WraprP   Nc           
      C   sj   |   ¡ }t |dd … ¡}|dd … | }|  ||j|j ¡}| | jtj	j
|¡}	|	d |jd  … d fS )Nr   r   r   )r’   r‹   r=   r™   rŽ   r�   ru   rO   r   r    r›   )
r3   r<   rv   rc   rw   r“   rC   Úrotatedrž   Ú
plain_textr   r   r   rƒ   l  s   zGSSAPI_AES.GSS_Unwrapr„   )	r   r   r   r4   r˜   r™   rn   r‚   rƒ   r   r   r   r   r�   8  s    r�   c                 C   s`   | j tjjkrt| tjtjƒS | j tjjkrt| tjtj	ƒS | j tjj
kr)t| ƒS td| j  ƒ‚)NzUnsupported etype %s)Úenctyper   ÚEnctypeÚAES256r�   Ú
_AES256CTSÚ_SHA1AES256ÚAES128Ú
_AES128CTSÚ_SHA1AES128r   rM   Ú	ExceptionrN   r   r   r   Ú
get_gssapiw  s   r¬   c                  C   sÀ   t  d¡} t  d¡}t  d¡}t  d¡}t tjjt  d¡¡}t  d¡}d}t  d¡}t  d	¡}t|ƒ}	|	 ||¡\}
}|	j|
dd
| d� t	|
 
¡ ƒ t	| 
¡ ƒ |
|ksXJ ‚||ks^J ‚d S )NÚÀ810e00001a204de2d64fd111a3da0000f875ae0d1c4500003400000034000000008040050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffÚ 050406ff000c00000000000000000000Á  0880ed78d6196dde3f3fb23eeea650bc4ae025fa2a9c337c75c024d9d8f0186c75a4a9060e2a40a9ad024317bf5df6a86cb4a764a9ca36843f8fa4f99c03e2bde46f5a29aafc83dacdf9f0a5677446b5d910417142dc7b7ba7ded76cddc4acf9bf7ed44008cb9850e5701f2f9285dad6463ca8d0e365d4f1700f3d054e242ebcde2f3146ddd411a627af7486Á  08cb9850e5701f2f9285dad6463ca8d0e365d4f1700f3d054e242ebcde2f3146ddd411a627af74860880ed78d6196dde3f3fb23eeea650bc4ae025fa2a9c337c75c024d9d8f0186c75a4a9060e2a40a9ad024317bf5df6a86cb4a764a9ca36843f8fa4f99c03e2bde46f5a29aafc83dacdf9f0a5677446b5d910417142dc7b7ba7ded76cddc4acf9bf7ed440Ú@3e242e91996aadd513ecb1bc2369e44183e08e08c51550fa4b681e77f75ed8e1Ú¨810e00001a204de2d64fd111a3da0000f875ae0d1c4500003400000034000000008040050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffr   Ú¨4ae025fa2a9c337c75c024d9d8f0186c75a4a9060e2a40a9ad024317bf5df6a86cb4a764a9ca36843f8fa4f99c03e2bde46f5a29aafc83dacdf9f0a5677446b5d910417142dc7b7ba7ded76cddc4acf9bf7ed440Ú�050406ff000c001c000000000000000008cb9850e5701f2f9285dad6463ca8d0e365d4f1700f3d054e242ebcde2f3146ddd411a627af74860880ed78d6196dde3f3fb23eeea650bcs   ÿÿÿÿÿÿÿÿ)rw   )r\   Úfromhexr   ÚKeyr¤   r¥   r¬   r‚   rƒ   ÚprintÚhex)Údata_paddedÚtoken_1ÚcipherText_1ÚcipherText_2rO   r<   rb   rŸ   r    ÚgssapiÚr1Úr2r   r   r   Útest‚  s    






rÀ   Ú__main__)Úenumr9   rs   Úminikerberos.protocol.constantsr   Úminikerberos.protocolr   Úunicrypto.hashlibr   Ú	unicryptor   Úunicrypto.symmetricr   rx   ÚIntFlagr   ÚEnumr   r$   r)   rG   rM   r…   r‹   r�   r¬   rÀ   r   r   r   r   r   Ú<module>   s0    	!* !%?
ÿ