o
    �õ±jÔJ  ã                   @   sÆ  d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	m
Z
 eje d¡d�Zdd„ Zdd	„ ZG d
d„ de jƒZG dd„ dƒZG dd„ de jƒZejejejejejejejg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"G dd„ dƒZ#G dd„ dƒZ$G d d!„ d!ƒZ%G d"d#„ d#ƒ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efd,d-„Z*d8d.d/„Z+efd0d1„Z,efd2d3„Z-d4d5„ Z.d6d7„ Z/dS )9é    N)ÚAS_REQÚAS_REPÚAP_REQÚAP_REP)ÚMetaDataÚ 5c33530deaf90d4db2ec4ae3786ec308©Úbytes_lec                 C   ó   t t | ¡ƒS ©N)Úcl_buffÚioÚBytesIO©Údata© r   úŸ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/spnegoex/protocol/messages.pyÚcl_bytes   ó   r   c                 C   sD   |   d¡}|d dkr|d S |d d }|   |¡}tj|ddd�S )Né   r   é   é€   ÚbigF©Ú	byteorderÚsigned)ÚreadÚintÚ
from_bytes)ÚbuffÚxÚbcountÚyr   r   r   r      s   

r   c                   @   s    e Zd ZdZdZdZdZdZdS )ÚPKU2U_TOKEN_TYPEó    s    s    s    s    N)Ú__name__Ú
__module__Ú__qualname__Ú
KRB_AP_REQÚ
KRB_AP_REPÚ	KRB_ERRORÚ
KRB_AS_REQÚ
KRB_AS_REPr   r   r   r   r#       s    r#   c                   @   s>   e Zd Zddd„Zedd„ ƒZedd„ ƒZdd	„ Zd
d„ ZdS )ÚPKU2U_TOKENr$   c                 C   s   || _ d | _t d¡| _d S )NÚ2b0601050207)Útok_idÚinner_tokenÚbytesÚfromhexÚ
_pku2u_oid)Úselfr/   r   r   r   Ú__init__(   s   zPKU2U_TOKEN.__init__c                 C   ó   t  t | ¡¡S r   )r-   Úfrom_bufferr   r   r   r   r   r   r   .   ó   zPKU2U_TOKEN.from_bytesc                 C   sì   t ƒ }|  ¡ }|  d¡ t| ƒ}|  d¡ ||  ¡ | d 7 }t| ƒ}|  |¡}t|  d¡ƒ|_|  ||  ¡  ¡}|jtjkrGt |¡|_	|S |jtj
krUt |¡|_	|S |jtjkrct |¡|_	|S |jtjkrqt |¡|_	|S ||_	|S )Nr   é   )r-   Útellr   r   r#   r/   r+   r   Úloadr0   r,   r   r(   r   r)   r   )r   ÚtÚt_hdrÚtotal_lengthÚ
oid_lengthÚt_oidÚt_datar   r   r   r7   2   s0   


	øúüÿzPKU2U_TOKEN.from_bufferc                 C   sP   |dkr|j dddd�S |  | ¡ d d d¡}dt|ƒB j dddd�}|| S )	Nr   r   r   F)r   é   é   r   )Úto_bytesÚ
bit_lengthÚlen)r4   r    Úlbr<   r   r   r   Úlength_encodeL   s
   zPKU2U_TOKEN.length_encodec                 C   sZ   d}||   t| jƒ¡7 }|| j7 }|| jj7 }|| j7 }d}||   t|ƒ¡7 }||7 }|S )Nó   ó   `)rH   rF   r3   r/   Úvaluer0   )r4   r   r<   r   r   r   rD   T   s   

zPKU2U_TOKEN.to_bytesN)r$   )	r%   r&   r'   r5   Ústaticmethodr   r7   rH   rD   r   r   r   r   r-   '   s    


r-   c                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚMESSAGE_TYPEr   r   r9   é   é   é   é   rB   N)r%   r&   r'   ÚINITIATOR_NEGOÚACCEPTOR_NEGOÚINITIATOR_META_DATAÚACCEPTOR_META_DATAÚ	CHALLENGEÚ
AP_REQUESTÚVERIFYÚALERTr   r   r   r   rM   a   s    rM   c                   @   ó   e Zd ZdZdd„ ZdS )ÚBYTE_VECTORz�
		BYTE_VECTOR encapsulates a variable length array of octets (or bytes)
		that are stored consecutively.  Each element in is a byte (8 bits).
	c                 C   ó   d | _ d | _d S r   )ÚByteArrayOffsetÚByteArrayLength©r4   r   r   r   r5   s   ó   
zBYTE_VECTOR.__init__N©r%   r&   r'   Ú__doc__r5   r   r   r   r   r[   n   s    r[   c                   @   rZ   )ÚAUTH_SCHEME_VECTORz¥
		AUTH_SCHEME_VECTOR encapsulates a variable length array of
		AUTH_SCHEMEs that are stored consecutively.  Each element is a
		structure of the type AUTH_SCHEME.
	c                 C   r\   r   )ÚAuthSchemeArrayOffsetÚAuthSchemeCountr_   r   r   r   r5   }   r`   zAUTH_SCHEME_VECTOR.__init__Nra   r   r   r   r   rc   w   s    rc   c                   @   rZ   )ÚEXTENSION_VECTORz 
		EXTENSION_VECTOR encapsulates a variable length array of EXTENSIONs
		that are stored consecutively.  Each element is a structure of the
		type EXTENSION.

	c                 C   r\   r   )ÚExtensionArrayOffsetÚExtensionCountr_   r   r   r   r5   ˆ   r`   zEXTENSION_VECTOR.__init__Nra   r   r   r   r   rf   �   s    rf   c                   @   s0   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZdS )	Ú	EXTENSIONzT
	This part is not tested, as the RFC doesn't define any extensions at the moment!
	c                 C   ó   d | _ d | _d | _d | _d S r   )ÚExtensionTyperg   ÚExtensionArrayLengthÚExtensionValuer_   r   r   r   r5   �   ó   
zEXTENSION.__init__c                 C   r6   r   )ri   r7   r   r   r   r   r   r   r   —   r8   zEXTENSION.from_bytesc                 C   sl   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_|  |j¡ |  |j¡|_|S ©NrO   ÚlittleFr   )	ri   r   r   r   rk   rg   rl   Úseekrm   ©r   Úmsgr   r   r   r7   ›   s   zEXTENSION.from_bufferN)r%   r&   r'   rb   r5   rL   r   r7   r   r   r   r   ri   Œ   s    
ri   c                   @   ó,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )ÚCHECKSUMc                 C   s(   d| _ d | _d | _d | _d | _d | _d S )Né   )ÚcbHeaderLengthÚChecksumSchemeÚChecksumTypeÚChecksumArrayOffsetÚChecksumArrayLengthÚChecksumValuer_   r   r   r   r5   ¨   ó   
zCHECKSUM.__init__c                 C   r6   r   )ru   r7   r   r   r   r   r   r   r   ±   r8   zCHECKSUM.from_bytesc                 C   s®   |   ¡ }tƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_	|j	dkrU|  
|j¡ |  |j	¡|_|S ©NrO   rp   Fr   r   )r:   ru   r   r   r   rw   rx   ry   rz   r{   rq   r|   ©r   Ústart_offsetrs   r   r   r   r7   µ   s   
zCHECKSUM.from_bufferN©r%   r&   r'   r5   rL   r   r7   r   r   r   r   ru   ¦   s    	
ru   c                   @   ó4   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZd	S )
ÚMESSAGE_HEADERc                 C   s.   d| _ d | _d | _d | _d | _d | _d| _d S )Ns   NEGOEXTSé(   )Ú	SignatureÚMessageTypeÚSequenceNumrw   ÚcbMessageLengthÚConversationIdÚ_hdrsizer_   r   r   r   r5   Ç   ó   
zMESSAGE_HEADER.__init__c                 C   sn   | j }|| jjjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| j7 }|S ro   )r…   r†   rK   rD   r‡   rw   rˆ   r‰   )r4   r<   r   r   r   rD   Ð   s   
zMESSAGE_HEADER.to_bytesc                 C   r6   r   )rƒ   r7   r   r   r   r   r   r   r   Ù   r8   zMESSAGE_HEADER.from_bytesc                 C   s†   t ƒ }|  d¡|_ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_	|  d¡|_
|S )NrC   rO   rp   Fr   é   )rƒ   r   r…   rM   r   r   r†   r‡   rw   rˆ   r‰   rr   r   r   r   r7   Ý   s   zMESSAGE_HEADER.from_bufferN©r%   r&   r'   r5   rD   rL   r   r7   r   r   r   r   rƒ   Å   s    		
rƒ   c                   @   r‚   )
ÚNEGO_MESSAGEc                 C   sH   d | _ t d¡| _d| _d| _d| _d| _d| _d| _	g | _
tg| _d S )Né    r   é`   )ÚHeaderÚosÚurandomÚRandomÚProtocolVersionrd   re   rg   rh   ÚmsgsizeÚ
ExtensionsÚNEGOEXTS_DEFAULT_AUTHIDÚAuthSchemesr_   r   r   r   r5   é   s   zNEGO_MESSAGE.__init__c                 C   sR  | j | j_| j | _t ¡ }| jD ]}| |j¡ |  j	d7  _	q| 
d¡ | ¡ }t ¡ }t| jƒdkrN| j t|ƒ | _| jD ]}| |¡ |  jd7  _q?| 
d¡ || ¡ 7 }| j t|ƒ | j_| j ¡ }|| j7 }|| jjdddd�7 }|| jjdddd�7 }|| j	jdddd�7 }|| jjdddd�7 }|| jjdddd�7 }||7 }|S )Nr   r   rC   rp   Fr   rO   )r–   r‘   rw   rd   r   r   r™   Úwriter	   re   rq   r   rF   r—   rg   Ú	to_bufferrh   rˆ   rD   r”   r•   )r4   r   ÚauthÚpayloadÚextÚresr   r   r   rD   ö   s4   







zNEGO_MESSAGE.to_bytesc                 C   r6   r   )rŽ   r7   r   r   r   r   r   r   r     r8   zNEGO_MESSAGE.from_bytesc                 C   s   |   ¡ }tƒ }t | ¡|_|  d¡|_tj|  d¡ddd�|_	tj|  d¡ddd�|_
tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_g |_|jdkrv|  ||j
 ¡ t|jƒD ]}|  d¡}|j tj|d	�¡ qd|jdkrŽ|  ||j ¡ t | ¡}|j |¡ |S )
Nr�   rC   rp   Fr   rO   r   rŒ   r   )r:   rŽ   rƒ   r7   r‘   r   r”   r   r   r•   rd   re   rg   rh   r™   rq   ÚrangeÚappendÚuuidÚUUIDri   r—   )r   r€   rs   ÚiÚ	auth_dataÚext_datar   r   r   r7     s(   



zNEGO_MESSAGE.from_bufferNr�   r   r   r   r   rŽ   è   s    !
rŽ   c                   @   r‚   )
ÚEXCHANGE_MESSAGEc                 C   s.   d | _ d | _d | _d | _d | _d| _d | _d S )Né@   )r‘   Ú
AuthSchemeÚExchangeOffsetÚExchangeByteCountÚExchanger–   Úexchange_data_rawr_   r   r   r   r5   :  r‹   zEXCHANGE_MESSAGE.__init__c                 C   s~   t | jƒ| _| j| _| j| j | j_| j| j_| j ¡ }|| j	j
7 }|| jjdddd�7 }|| jjdddd�7 }|| j7 }|S ro   )rF   r¬   r«   r–   rª   r‘   rˆ   rw   rD   r©   r	   ©r4   rŸ   r   r   r   rD   C  s   


zEXCHANGE_MESSAGE.to_bytesc                 C   r6   r   )r§   r7   r   r   r   r   r   r   r   R  r8   zEXCHANGE_MESSAGE.from_bytesc                 C   sÚ   |   ¡ }tƒ }t | ¡|_tj|  d¡d�|_t	j
|  d¡ddd�|_t	j
|  d¡ddd�|_|  ||j ¡ |  |j¡}||_|jjtjtjfv rTt 
|¡}||_|S |jjtjtjfv rht |¡}||_|S ||_|S )NrŒ   r   rO   rp   Fr   )r:   r§   rƒ   r7   r‘   r¢   r£   r   r©   r   r   rª   r«   rq   r­   r†   rM   rW   rV   r-   r¬   rT   rU   r   r;   )r   r€   rs   Ú	exch_dataÚtokenr   r   r   r7   V  s&   
	ù
ÿzEXCHANGE_MESSAGE.from_bufferNr�   r   r   r   r   r§   9  s    	
r§   c                   @   r‚   )
ÚVERIFY_MESSAGEc                 C   s:   d | _ d | _d| _d| _d | _d | _d | _d | _d| _d S )Nrv   r   éP   )	r‘   r©   rw   rx   ry   rz   r{   ÚChecksumr–   r_   r   r   r   r5   q  s   
zVERIFY_MESSAGE.__init__c                 C   sÌ   t | jƒ| _| j| _| jt | jƒ | j_| j| j_| j ¡ }|| j	j
7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|d7 }|| j7 }|S )NrO   rp   Fr   s       )rF   r³   r{   r–   rz   r‘   rˆ   rw   rD   r©   r	   rx   ry   r®   r   r   r   rD   }  s   


zVERIFY_MESSAGE.to_bytesc                 C   r6   r   )r±   r7   r   r   r   r   r   r   r   �  r8   zVERIFY_MESSAGE.from_bytesc                 C   sÎ   |   ¡ }tƒ }t | ¡|_tj|  d¡d�|_t	j
|  d¡ddd�|_t	j
|  d¡ddd�|_t	j
|  d¡ddd�|_t	j
|  d¡ddd�|_t	j
|  d¡ddd�|_|jdkre|  |j¡ |  |j¡|_|S ©NrŒ   r   rO   rp   Fr   r   )r:   r±   rƒ   r7   r‘   r¢   r£   r   r©   r   r   rw   rx   ry   rz   r{   rq   r³   r   r   r   r   r7   “  s   
zVERIFY_MESSAGE.from_bufferNr�   r   r   r   r   r±   p  s    
r±   c                   @   rt   )ÚALERT_MESSAGEc                 C   s(   d | _ d | _d | _d | _d | _g | _d S r   )r‘   r©   Ú	ErrorCodeÚAlertArrayOffsetÚ
AlertCountÚAlertsr_   r   r   r   r5   §  r}   zALERT_MESSAGE.__init__c                 C   r6   r   )rµ   r7   r   r   r   r   r   r   r   °  r8   zALERT_MESSAGE.from_bytesc                 C   s¶   |   ¡ }tƒ }t | ¡|_tj|  d¡d�|_t	j
|  d¡ddd�|_t	j
|  d¡ddd�|_t	j
|  d¡ddd�|_|jdkrY|  ||j ¡ t|jƒD ]}|j t | ¡¡ qM|S r´   )r:   rµ   rƒ   r7   r‘   r¢   r£   r   r©   r   r   r¶   r·   r¸   rq   r    r¹   r¡   ÚAlert)r   r€   rs   Ú_r   r   r   r7   ´  s   
zALERT_MESSAGE.from_bufferNr�   r   r   r   r   rµ   ¦  s    	
rµ   c                   @   ó   e Zd ZdZdS )Ú
ALERT_TYPEr   N)r%   r&   r'   ÚPULSEr   r   r   r   r½   Æ  ó    r½   c                   @   r¼   )ÚALERT_VERIFYr   N)r%   r&   r'   ÚNO_KEYr   r   r   r   rÀ   É  r¿   rÀ   c                   @   s   e Zd Zdd„ ZdS )ÚALERT_PULSEc                 C   r\   r   )rw   ÚReasonr_   r   r   r   r5   Í  r`   zALERT_PULSE.__init__N)r%   r&   r'   r5   r   r   r   r   rÂ   Ì  s    rÂ   c                   @   rt   )rY   c                 C   rj   r   )Ú	AlertTypeÚAlertDataOffsetÚAlertDataLengthÚ
AlertValuer_   r   r   r   r5   Ò  rn   zALERT.__init__c                 C   r6   r   )rY   r7   r   r   r   r   r   r   r   Ù  r8   zALERT.from_bytesc                 C   s‚   |   ¡ }tƒ }ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|  d¡ddd�|_|jdkr?|  	|j¡ |  |j¡|_
|S r~   )r:   rY   r½   r   r   r   rÄ   rÅ   rÆ   rq   rÇ   r   r   r   r   r7   Ý  s   
zALERT.from_bufferNr�   r   r   r   r   rY   Ñ  s    
rY   c                 C   s:   t ƒ }tj|_| |_||_tƒ }||_||_||_	| 
¡ S r   )rƒ   rM   rT   r†   r‡   r‰   r§   r‘   r©   r¬   rD   )Ú
seq_numberÚconv_idÚmetadataÚ
authschemeÚhdrÚemr   r   r   Úgenerate_initiator_metadataì  s   rÎ   c                 C   sJ   t ƒ }tj|_| |_||_tƒ }||_|d ur||_|d ur!||_	| 
¡ S r   )rƒ   rM   rR   r†   r‡   r‰   rŽ   r‘   r™   r—   rD   )rÈ   rÉ   ÚauthschemesÚ
extensionsrÌ   Únegor   r   r   Úgenerate_init_negoù  s   rÒ   c                 C   sX   t ƒ }tj|_| |_||_tƒ }||_||_t	ƒ }||_
||_| ¡ |_| ¡ | ¡ fS r   )rƒ   rM   rW   r†   r‡   r‰   r§   r‘   r©   r-   r/   r0   rD   r¬   )rÈ   rÉ   Úap_reqÚtok_typerË   rÌ   Úexchanger°   r   r   r   Úgenerate_ap_req  s   
rÖ   c                 C   s@   t ƒ }tj|_| |_||_tƒ }||_||_||_	||_
| ¡ S r   )rƒ   rM   rX   r†   r‡   r‰   r±   r‘   r©   r³   ry   rD   )rÈ   rÉ   ÚchecksumÚchecksumtyperË   rÌ   Úverifyr   r   r   Úgenerate_verify  s   rÚ   c                 C   r
   r   )Únegoexts_parse_bufferr   r   r   r   r   r   Únegoexts_parse_bytes&  r   rÜ   c                 C   s  i }|   ¡ }|  dd¡ |   ¡ }|  |¡ d}|   ¡ |kr�|dkr�|d8 }|   ¡ }t | ¡}|  |¡ |  |j¡}|jtjtj	fv rHt
 |¡}n*|jtjtjtjtjfv r[t |¡}n|jtjkrgt |¡}n|jtjkrrt |¡}|||j< |   ¡ |kr�|dks!|dkr‰tdƒ |S )Nr   r9   éÿ   r   ÚSAD)r:   rq   rƒ   r7   r   rˆ   r†   rM   rR   rS   rŽ   r   rV   rT   rU   rW   r§   rX   r±   rY   rµ   Úprint)r   ÚresdÚstartÚendÚmaxiterrÌ   r   rŸ   r   r   r   rÛ   )  s2   




ñrÛ   )NN)0Úenumr   r¢   r’   Ú"minikerberos.protocol.asn1_structsr   r   r   r   Úminikerberos.protocol.rfc4556r   r£   r1   r2   r˜   r   r   ÚEnumr#   r-   rM   rR   rV   rT   rU   rW   rX   rY   ÚNEGOEXT_MESSAGE_TYPESr[   rc   rf   ri   ru   rƒ   rŽ   r§   r±   rµ   r½   rÀ   rÂ   rÎ   rÒ   rÖ   rÚ   rÜ   rÛ   r   r   r   r   Ú<module>   sB    	: 
	
#Q76 
