o
    j1                     @   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                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )GSSAPIFlagsi   i @  i                       N)__name__
__module____qualname__GSS_C_DCE_STYLEGSS_C_EXTENDED_ERROR_FLAGGSS_C_IDENTIFY_FLAG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/minikerberos/gssapi/gssapi.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_bytes0      zGSSMIC_RC4.from_bytesc                 C   sF   t  }| d|_| d|_| d|_| d|_| d|_|S )Nr
   r   r   )r+   readr/   r0   r1   r2   r3   )buffmicr   r   r   r:   4   s   zGSSMIC_RC4.from_bufferc                 C   s<   | j }|| j7 }|| j7 }|| j7 }| jd ur|| j7 }|S r9   r.   r5   tr   r   r   to_bytes?   s   




zGSSMIC_RC4.to_bytesNr   r   r   r6   staticmethodr?   r:   rF   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/   r0   SEAL_ALGr1   r2   r3   
Confounderr4   r   r   r   r6   J      
zGSSWRAP_RC4.__init__c                 C   r8   r9   )rI   r:   r;   r<   r=   r   r   r   r?   S   r@   zGSSWRAP_RC4.from_bytesc                 C   s^   t  }| d|_| d|_| d|_| d|_| d|_| d|_| d|_|S )Nr
   r   )	rI   rA   r/   r0   rK   r1   r2   r3   rL   )rB   wrapr   r   r   r:   W   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 r9   rJ   rD   r   r   r   rF   d   s   





zGSSWRAP_RC4.to_bytesNrG   r   r   r   r   rI   I   s    	

rI   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 r9   session_key)r5   rQ   r   r   r   r6   t   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      rR   bigFsigned       r-   r   	digestmod   signaturekey    littler   r   )lenbytesr+   rF   r2   r   newrQ   contentsupdatedigestr   r3   r   encrypt)r5   r>   sequenceNumber	directionGSS_GETMIC_HEADERpadpadStrrC   	Ksign_ctxKsignidtemp
chksum_ctxKseq_ctxKseqr   r   r   
GSS_GetMICw   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    rR   r   rT   FrU   rW   r-   r   rX   rZ      r\          r   T)r]   r^   rI   rK   rF   r2   osurandomrL   r   r_   rQ   r`   ra   rb   r   r3   r   rc   r?   decrypt)r5   r>   seq_numre   rc   	auth_dataGSS_WRAP_HEADERrg   rh   tokenrl   rj   rk   	Sgn_CksumklocalbKcryptro   rN   snd_seqrc4
cipherText	finalDatar   r   r   GSS_Wrap   sr   
2


zGSSAPI_RC4.GSS_Wrapc                 C   s   |  |||d|S )NF)r   )r5   r>   rx   re   ry   r   r   r   
GSS_Unwrap   s   zGSSAPI_RC4.GSS_Unwrap)rR   )rR   TNrR   N)r   r   r   r6   rp   r   r   r   r   r   r   rO   s   s
    

&RrO   c                   @   r*   )
GSSMICc                 C   s"   d| _ d | _d| _d | _d | _d S )Ns   s   )r/   Flagsr1   r2   r3   r4   r   r   r   r6      r7   zGSSMIC.__init__c                 C   r8   r9   )r   r:   r;   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	   rT   FrU      r   )
r   rA   r/   r&   intr?   r   r1   r2   r3   rB   mr   r   r   r:      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	   rT   FrU   r   )r/   r   rF   r1   r2   r3   rD   r   r   r   rF   	  s   


zGSSMIC.to_bytesNrG   r   r   r   r   r      s    

	r   c                   @   r*   )
GSSWrapTokenc                 C   s.   d| _ d | _d| _d | _d | _d | _d | _d S )Ns      )r/   r   r1   ECRRCr2   Datar4   r   r   r   r6     rM   zGSSWrapToken.__init__c                 C   r8   r9   )r   r:   r;   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	   rT   FrU   r   )r   rA   r/   r&   r   r?   r   r1   r   r   r2   r   r   r   r   r:   "  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	   rT   FrU   r
   r   )r/   r   rF   r1   r   r   r2   r   rD   r   r   r   rF   -  s   


zGSSWrapToken.to_bytesNrG   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 r9   )rQ   checksum_profilecipher_typecipher)r5   rQ   r   r   r   r   r   r6   :  s   
zGSSAPI_AES.__init__c                 C   s4   |t |; }t || }||d  |d |  }|S r9   r]   )r5   r>   numBytesleftresultr   r   r   rotate@  s   zGSSAPI_AES.rotatec                 C   s(   |t |; }||d  |d |  }|S r9   r   )r5   r>   r   r   r   r   r   unrotateF  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   rS   r   )r]   r^   r   r&   r)   r   r2   r   checksumrQ   r   r%   valuerF   )r5   r>   rx   rg   rh   r   r   r   r   r   rp   K  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 )Nr[   r   r      r   )r   	blocksizer]   r   r&   r(   r)   r   r   r   r2   rc   rQ   r   r$   r   rF   r   )
r5   r>   rx   r   rg   rh   rE   cipher_textret1ret2r   r   r   r   X  s    zGSSAPI_AES.GSS_WraprR   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   rw   rQ   r   r"   r   )
r5   r>   rx   re   ry   r   rE   rotatedr   
plain_textr   r   r   r   m  s   zGSSAPI_AES.GSS_Unwrapr   )	r   r   r   r6   r   r   rp   r   r   r   r   r   r   r   9  s    r   c                 C   sh   | 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
tjjfv r-t| S td| j  )NzUnsupported etype %s)enctyper   EnctypeAES256r   
_AES256CTS_SHA1AES256AES128
_AES128CTS_SHA1AES128r   RC4_MD4rO   	ExceptionrP   r   r   r   
get_gssapix  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   )ry   )r^   fromhexr   Keyr   r   r   r   r   printhex)data_paddedtoken_1cipherText_1cipherText_2rQ   r>   rd   r   r   gssapir1r2r   r   r   test  s    






r   __main__)enumr;   ru   minikerberos.protocol.constantsr   minikerberos.protocolr   unicrypto.hashlibr   	unicryptor   unicrypto.symmetricr   rz   IntFlagr   Enumr   r&   r+   rI   rO   r   r   r   r   r   r   r   r   r   r   <module>   s0    !* !%?
