o
    j0                     @   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re  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 }qd}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 rt|}||	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 )N810e00001a204de2d64fd111a3da0000f875ae0d1c4500003400000034000000008040050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff 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    	!* !%?
