a
    kÄ#d·Ä  ã                   @   s	  d Z ddlmZ ddlmZmZ 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mZmZmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z% dd	l&m'Z'm(Z( dd
l)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z?m@Z@ ddlAmBZBmCZC G dd„ deƒZDG dd„ deƒZEG dd„ deƒZFG dd„ deƒZGeZHeHZIeZJeZKG dd„ de%ƒZLeZMeZNG dd„ de%ƒZOdd„ ZPdd„ ZQi ZRG d d!„ d!e!ƒZSG d"d#„ d#eSƒZTG d$d%„ d%e%ƒZUG d&d'„ d'e%ƒZVeVZWeWeRd(< G d)d*„ d*e%ƒZXeXeRd+< G d,d-„ d-e%ƒZYeYeRd.< eVZZeZeRd/< d0d1d2d3d4d5œZ[G d6d7„ d7e%ƒZ\G d8d9„ d9e%ƒZ]eZ^d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLœZ_i Z`G dMdN„ dNeSƒZaG dOdP„ dPe%ƒZbG dQdR„ dRe%ƒZce\e`dS< G dTdU„ dUe%ƒZdG dVdW„ dWe%ƒZeeee`dX< G dYdZ„ dZe%ƒZfG d[d\„ d\e%ƒZgege`d]< G d^d_„ d_e%ƒZhG d`da„ dae%ƒZieie`db< G dcdd„ dde%ƒZjeje`de< G dfdg„ dge9ƒZkeke`dh< G didj„ dje%ƒZlele`dk< G dldm„ dmeSƒZmG dndo„ doe%ƒZnG dpdq„ dqe%ƒZoG drds„ dse%ƒZpG dtdu„ due%ƒZqG dvdw„ dwe%ƒZrG dxdy„ dye%ƒZsG dzd{„ d{e%ƒZteperfe`d|< G d}d~„ d~e%ƒZuG dd€„ d€e%ƒZveve`d�< G d‚dƒ„ dƒe%ƒZwG d„d…„ d…e%ƒZxG d†d‡„ d‡e%ƒZyeye`dˆ< d‰dŠd‹dŒd�dŽd�d�d‘d’d“d”d•d–d—d˜d™dšœZzG d›dœ„ dœe%ƒZ{G d�dž„ dže%ƒZ|g dŸ¢Z}G d d‹„ d‹e%ƒZ~G d¡d¢„ d¢e%ƒZeed£d.d¤d¥�e"d¦d§ezd¨d¥�e#e d©g ebdªd¥�ƒed«eƒ ed¬d¥�ƒZ€G d­d®„ d®e%ƒZ�G d¯d°„ d°e%ƒZ‚G d±d²„ d²e%ƒZƒeed£d.d³d¥�e"d¦dXezd¤d¥�e#e d©g ebd¨d¥�ƒeId´dµdªd¥�ed¶deLd¬d¥�ed·de{dhd¥�ed¸de\d¹d¥�ƒZ„G dºd»„ d»e%ƒZ…G d¼d½„ d½e%ƒZ†G d¾d¿„ d¿e%ƒZ‡eedÀde]d³d¥�e dÁg e‡d¤d¥�eKdÂdd¨d¥�e#eMdÃe?ƒ dªd¥�ƒe^dÄde}d¬d¥�eMdÅe?ƒ dhd¥�e#eMdÆe?ƒ d¹d¥�ƒeMdÇe?ƒ dkd¥�e#eMdÈe?ƒ dÉd¥�ƒeIdÊdµdËd¥�edÌeLƒ eLdÍd¥�e#ePdÎdÏd¥�ƒe dÐg ebdÑd¥�ƒZˆG dÒd”„ d”e%ƒZ‰G dÓd•„ d•e%ƒZŠG dÔdÕ„ dÕe%ƒZ‹e‹e`d(< G dÖd×„ d×e%ƒZŒG dØdÙ„ dÙe%ƒZ�G dÚdÛ„ dÛe%ƒZŽG dÜdÝ„ dÝeSƒZ�G dÞdß„ dße%ƒZ�dàdádâdãdädådædçdèœZ‘dédêdëdìdíœZ’d0dîd4dïœZ“G dðdñ„ dñe9ƒZ”G dòdó„ dóe%ƒZ•G dôdõ„ dõe9ƒZ–G död÷„ d÷e9ƒZ—G dødù„ dùe9ƒZ˜g dú¢Z™G dûdü„ düe9ƒZšG dýdþ„ dþe9ƒZ›G dÿ�d „ �d e9ƒZœG �d�d„ �de%ƒZ�e:eCe��d�d� e:eCe��d�d� e;eCe��d�d�d� e;e”e�ƒ e;e–e�ƒ e;e—e�ƒ e;e—e�ƒ G �d�d„ �de9ƒZže;eže�ƒ e:eBež�d�d� e;eBež�d�d� G �d	�d
„ �d
e'ƒZŸ�d�d�d„Z dS (  aN  
Kerberos V5

Implements parts of:

- Kerberos Network Authentication Service (V5): RFC4120
- Kerberos Version 5 GSS-API: RFC1964, RFC4121
- Kerberos Pre-Authentication: RFC6113 (FAST)

You will find more complete documentation for this layer over
`Kerberos <https://scapy.readthedocs.io/en/latest/layers/kerberos.html>`_

Example decryption:

>>> from scapy.libs.rfc3961 import Key, EncryptionType
>>> pkt = Ether(hex_bytes("525400695813525400216c2b08004500015da71840008006dc\
83c0a87a9cc0a87a11c209005854f6ab2392c25bd650182014b6e00000000001316a8201\
2d30820129a103020105a20302010aa3633061304ca103020102a24504433041a0030201\
12a23a043848484decb01c9b62a1cabfbc3f2d1ed85aa5e093ba8358a8cea34d4393af93\
bf211e274fa58e814878db9f0d7a28d94e7327660db4f3704b3011a10402020080a20904\
073005a0030101ffa481b73081b4a00703050040810010a1123010a003020101a1093007\
1b0577696e3124a20e1b0c444f4d41494e2e4c4f43414ca321301fa003020102a1183016\
1b066b72627467741b0c444f4d41494e2e4c4f43414ca511180f32303337303931333032\
343830355aa611180f32303337303931333032343830355aa7060204701cc5d1a8153013\
0201120201110201170201180202ff79020103a91d301b3019a003020114a11204105749\
4e31202020202020202020202020"))
>>> enc = pkt[Kerberos].root.padata[0].padataValue
>>> k = Key(enc.etype.val, key=hex_bytes("7fada4e566ae4fb270e2800a23a\
e87127a819d42e69b5e22de0ddc63da80096d"))
>>> enc.decrypt(k)
é    )Ú
namedtuple)ÚdatetimeÚ	timedeltaN)	ÚASN1_BIT_STRINGÚASN1_BOOLEANÚASN1_GENERAL_STRINGÚASN1_GENERALIZED_TIMEÚASN1_INTEGERÚASN1_SEQUENCEÚASN1_STRINGÚASN1_Class_UNIVERSALÚASN1_Codecs)ÚBERcodec_SEQUENCE)ÚASN1F_BOOLEANÚASN1F_CHOICEÚASN1F_FLAGSÚASN1F_GENERAL_STRINGÚASN1F_GENERALIZED_TIMEÚASN1F_INTEGERÚ	ASN1F_OIDÚASN1F_PACKETÚASN1F_SEQUENCEÚASN1F_SEQUENCE_OFÚASN1F_STRINGÚASN1F_enum_INTEGERÚASN1F_optional)ÚASN1_Packet)Ú	AutomatonÚATMT)Úbytes_encode)Úlog_runtime)
Ú	ByteFieldÚ
FlagsFieldÚ
LEIntFieldÚLenFieldÚLEShortEnumFieldÚLEShortFieldÚPadFieldÚ
ShortFieldÚStrFixedLenEnumFieldÚXStrFixedLenField)ÚPacketÚbind_bottom_upÚbind_layers)ÚStreamSocket)ÚGeneralizedTimeÚRandNum)ÚTCPÚUDPc                   @   s   e Zd ZdZdZdS )ÚASN1_Class_KRBZKERBEROSé`   N)Ú__name__Ú
__module__Ú__qualname__ÚnameÚAPPLICATION© r:   r:   úL/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/kerberos.pyr3   a   s   r3   c                   @   s   e Zd ZejZdS )ÚASN1_GSSAPI_APPLICATIONN©r5   r6   r7   r3   r9   Útagr:   r:   r:   r;   r<   f   s   r<   c                   @   s   e Zd ZejZdS )ÚBERcodec_GSSAPI_APPLICATIONNr=   r:   r:   r:   r;   r?   j   s   r?   c                   @   s   e Zd ZejZdS )ÚASN1F_KRB_APPLICATIONN)r5   r6   r7   r3   r9   ZASN1_tagr:   r:   r:   r;   r@   n   s   r@   c                   @   sH   e Zd ZejZeeddddddddd	d
ddœ	dd�edg e	dd�ƒZ
dS )ÚPrincipalNameÚnameTyper   z
NT-UNKNOWNzNT-PRINCIPALzNT-SRV-INSTz
NT-SRV-HSTzNT-SRV-XHSTzNT-UIDzNT-X500-PRINCIPALzNT-SMTP-NAMEzNT-ENTERPRISE)	r   é   é   é   é   é   é   é   é
   é    ©Zexplicit_tagÚ
nameStringé¡   N)r5   r6   r7   r   ÚBERÚ
ASN1_codecr   r   r   ÚKerberosStringÚ	ASN1_rootr:   r:   r:   r;   rA   {   s&   ÷òïrA   c                   @   sF   e Zd ZejZeeddddddddd	d
ddœ	dd�edddd�ƒZ	dS )ÚHostAddressÚaddrTyper   ZIPv4ZDirectionalZChaosNetZXNSZISOzDECNET Phase IVzAppleTalk DDPZNetBiosZIPv6)	rD   rE   rG   rH   rI   é   é   é   é   rK   rL   ÚaddressÚ rN   N)
r5   r6   r7   r   rO   rP   r   r   r   rR   r:   r:   r:   r;   rS   –   s&   öñîrS   c                 K   s   t | g tfi |¤ŽS ©N)r   rS   )r8   Úkwargsr:   r:   r;   Ú<lambda>®   s   ÿÿr]   c                  K   sH   t tddddddddd	d
ddddddddœdd�tdddd�fi | ¤ŽS )NZchecksumtyper   ZCRC32zRSA-MD4zRSA-MD4-DESzDES-MACz	DES-MAC-KzRSA-MD4-DES-KzRSA-MD5zRSA-MD5-DESzRSA-MD5-DES3ÚSHA1zHMAC-SHA1-DES3-KDzHMAC-SHA1-DES3zHMAC-SHA1-96-AES128zHMAC-SHA1-96-AES256)rC   rD   rE   rF   rG   rH   rI   é   é	   rJ   rU   é   é   é   rV   rK   rL   ZchecksumrZ   rN   )r   r   r   )r\   r:   r:   r;   r]   ²   s2   ðëèçc                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )Ú_ASN1FString_PacketFieldrC   c                    s(   t |tƒrtt|ƒƒ}tt| ƒ ||¡S r[   )Ú
isinstancer   r   ÚbytesÚsuperrd   Úi2m)ÚselfÚpktÚval©Ú	__class__r:   r;   rh   Ö   s    
z_ASN1FString_PacketField.i2mc                    s&   t |dƒr| |¡ tt| ƒ ||¡S )NÚadd_underlayer)Úhasattrrn   rg   rd   Úany2i)ri   rj   Úxrl   r:   r;   rp   Û   s    

z_ASN1FString_PacketField.any2i)r5   r6   r7   Zholds_packetsrh   rp   Ú__classcell__r:   r:   rl   r;   rd   Ó   s   rd   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_AuthorizationData_value_Fieldc                    s^   t t| ƒ ||¡}|jjtv rZt |jjd ¡}|d js<|S |rZ||d j|d�|d fS |S ©Nr   ©Z_underlayerrC   )rg   rs   Úm2iÚadTyperk   Ú_PADATA_CLASSESÚ_AUTHORIZATIONDATA_VALUESÚget)ri   rj   Úsrk   Úclsrl   r:   r;   rv   â   s    
z"_AuthorizationData_value_Field.m2i©r5   r6   r7   rv   rr   r:   r:   rl   r;   rs   á   s   rs   c                   @   sN   e Zd ZejZeeddddddddd	d
ddddddœdd�edddd�ƒZ	dS )ÚAuthorizationDataItemrw   r   zAD-IF-RELEVANTzAD-INTENDED-FOR-SERVERz!AD-INTENDED-FOR-APPLICATION-CLASSzAD-KDC-ISSUEDz	AD-AND-ORzAD-MANDATORY-TICKET-EXTENSIONSzAD-IN-TICKET-EXTENSIONSzAD-MANDATORY-FOR-KDCzOSF-DCEZSESAMEzAD-OSD-DCE-PKI-CERTIDzAD-WIN2K-PACzAD-ETYPE-NEGOTIATION)rC   rD   rE   rF   rG   rH   rI   r_   é@   éA   éB   é€   é�   rK   rL   ZadDatarZ   rN   N)
r5   r6   r7   r   rO   rP   r   r   rs   rR   r:   r:   r:   r;   r~   í   s.   òíêr~   c                   @   s"   e Zd ZejZedeƒ geƒZdS )ÚAuthorizationDataÚseqN)	r5   r6   r7   r   rO   rP   r   r~   rR   r:   r:   r:   r;   r„   	  s   
ÿr„   rC   c                
   @   sP   e Zd ZejZeedd�ee	dddd�ƒee
ddedd�ƒe
d	ded
d�ƒZdS )ÚAD_KDCIssuedrK   rL   ZiRealmrZ   rN   ZiSnameNé¢   Úelementsé£   )r5   r6   r7   r   rO   rP   r   ÚChecksumr   ÚRealmr   rA   r„   rR   r:   r:   r:   r;   r†     s   ÿúr†   rF   c                   @   s2   e Zd ZejZeedddd�edde	dd�ƒZ
dS )Ú	AD_AND_ORZconditionCountr   rK   rL   rˆ   NrN   )r5   r6   r7   r   rO   rP   r   ÚInt32r   r„   rR   r:   r:   r:   r;   rŒ   #  s
   þrŒ   rG   r_   ZDESZ3DESzAES-128zAES-256ÚRC4)rC   rV   é   é   é   c                   @   s^   e Zd ZejZeeddedd�e	e
dddd�ƒedd	d
d�ƒZdd„ Zddd„Zddd„ZdS )ÚEncryptedDataÚetyperC   rK   rL   Zkvnor   rN   ÚcipherrZ   r‡   c                 C   sˆ   | j r|t| j tƒr,| j j}|dkr|dtfS nPt| j tƒr@dtfS t| j tƒrTdtfS t| j t	ƒrhdt
fS t| j tƒr|dtfS tdƒ‚dS )zB
        Get current key usage number and encrypted class
        rD   rC   rE   é   é3   zACould not guess key usage number. Please specify key_usage_numberN)Ú
underlayerre   ÚPADATAÚ
padataTypeÚPA_ENC_TS_ENCÚ
KRB_TicketÚEncTicketPartÚ
KRB_AS_REPÚEncASRepPartÚ
KRB_AP_REQÚKRB_AuthenticatorÚKrbFastArmoredReqÚ
KrbFastReqÚ
ValueError)ri   Zpatyper:   r:   r;   Ú	get_usageE  s     
ÿzEncryptedData.get_usageNc                 C   s4   |du r|   ¡ \}}| || jj¡}|r0||ƒS |S )ap  
        Decrypt and return the data contained in cipher.

        :param key: the key to use for decryption
        :param key_usage_number: (optional) specify the key usage number.
                                 Guessed otherwise
        :param cls: (optional) the class of the decrypted payload
                               Guessed otherwise (or bytes)
        N)r¤   Údecryptr”   rk   )ri   ÚkeyÚkey_usage_numberr|   Údr:   r:   r;   r¥   `  s    
zEncryptedData.decryptc                 C   s2   |du r|   ¡ d }|j| _|j|||d�| _dS )aj  
        Encrypt text and set it into cipher.

        :param key: the key to use for encryption
        :param text: the bytes value to encode
        :param confounder: (optional) specify the confounder bytes. Random otherwise
        :param key_usage_number: (optional) specify the key usage number.
                                 Guessed otherwise
        Nr   )Ú
confounder)r¤   Zeptyper“   Úencryptr”   )ri   r¦   Útextr©   r§   r:   r:   r;   rª   q  s    
zEncryptedData.encrypt)NN)NN)r5   r6   r7   r   rO   rP   r   r   Ú_KRB_E_TYPESr   ÚUInt32r   rR   r¤   r¥   rª   r:   r:   r:   r;   r’   =  s   ý
r’   c                   @   s:   e Zd ZejZeeddedd�e	dddd�ƒZ
dd	„ Zd
S )ÚEncryptionKeyÚkeytyper   rK   rL   ÚkeyvaluerZ   rN   c                 C   s    ddl m} || jj| jjd�S )Nr   )ÚKey)r¦   )Úscapy.libs.rfc3961r±   r¯   rk   r°   )ri   r±   r:   r:   r;   ÚtoKeyˆ  s    zEncryptionKey.toKeyN)r5   r6   r7   r   rO   rP   r   r   r¬   r   rR   r³   r:   r:   r:   r;   r®   �  s   þr®   z
PA-TGS-REQzPA-ENC-TIMESTAMPz
PA-PW-SALTzPA-ETYPE-INFOzPA-PK-AS-REQ-OLDzPA-PK-AS-REP-OLDzPA-PK-AS-REQzPA-PK-AS-REPzPA-ETYPE-INFO2zPA-SVR-REFERRAL-INFOzPA-PAC-REQUESTzPA-FX-COOKIEzPA-AUTHENTICATION-SETzPA-AUTH-SET-SELECTEDz
PA-FX-FASTzPA-FX-ERRORzPA-SUPPORTED-ENCTYPESzPA-PAC-OPTIONS)rC   rD   rE   r•   rb   rc   rV   r�   é   rW   r‚   é…   é†   é‡   éˆ   é‰   é¥   é§   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )Ú_PADATA_value_FieldzŒ
    A special field that properly dispatches PA-DATA values according to
    padata-type and if the paquet is a request or a response.
    c                    s’   t t| ƒ ||¡}|jjtv rŽt|jj }t|tƒrf|jjd urNt|jjt	ƒp\t|jt
tfƒ}|| }|d jst|S ||d j|d�|d fS |S rt   )rg   r¼   rv   r™   rk   rx   re   Útupler—   Ú	KRB_ERRORr�   ÚKRB_TGS_REP)ri   rj   r{   rk   r|   Zis_replyrl   r:   r;   rv   ´  s    
þý
z_PADATA_value_Field.m2i)r5   r6   r7   Ú__doc__rv   rr   r:   r:   rl   r;   r¼   ®  s   r¼   c                   @   s2   e Zd ZejZeeddedd�e	dddd�ƒZ
dS )	r˜   r™   r   rN   rL   ÚpadataValuerZ   r‡   N)r5   r6   r7   r   rO   rP   r   r   Ú_PADATA_TYPESr¼   rR   r:   r:   r:   r;   r˜   Ä  s   ýþr˜   c                   @   s6   e Zd ZejZeedeƒ dd�e	e
dddd�ƒƒZdS )rš   ÚpatimestamprK   rL   Zpausecr   rN   N)r5   r6   r7   r   rO   rP   r   ÚKerberosTimer/   r   ÚMicrosecondsrR   r:   r:   r:   r;   rš   Ó  s
   þrš   rD   c                   @   s6   e Zd ZejZeeddedd�e	e
dddd�ƒƒZdS )	ÚETYPE_INFO_ENTRYr“   rC   rK   rL   ÚsaltrZ   rN   N)r5   r6   r7   r   rO   rP   r   r   r¬   r   r   rR   r:   r:   r:   r;   rÆ   á  s   ÿþrÆ   c                   @   s"   e Zd ZejZedeƒ geƒZdS )Ú
ETYPE_INFOr…   N)	r5   r6   r7   r   rO   rP   r   rÆ   rR   r:   r:   r:   r;   rÈ   ë  s   rÈ   r•   c                	   @   sF   e Zd ZejZeeddedd�e	e
dddd�ƒe	eddd	d�ƒƒZd
S )ÚETYPE_INFO_ENTRY2r“   rC   rK   rL   rÇ   rZ   rN   Z	s2kparamsr‡   N)r5   r6   r7   r   rO   rP   r   r   r¬   r   rQ   r   rR   r:   r:   r:   r;   rÉ   õ  s   ÿÿûrÉ   c                   @   s"   e Zd ZejZedeƒ geƒZdS )ÚETYPE_INFO2r…   N)	r5   r6   r7   r   rO   rP   r   rÉ   rR   r:   r:   r:   r;   rÊ     s   rÊ   r´   c                	   @   sD   e Zd ZejZeedddd�ee	dddd�ƒee	ddd	d�ƒƒZ
d
S )ÚPA_AUTHENTICATION_SET_ELEMZpaTyper   rK   rL   ZpaHintrZ   rN   ZpaValuer‡   N)r5   r6   r7   r   rO   rP   r   r�   r   r   rR   r:   r:   r:   r;   rË     s   ÿÿûrË   c                   @   s"   e Zd ZejZedeƒ geƒZdS )ÚPA_AUTHENTICATION_SETZelemsN)	r5   r6   r7   r   rO   rP   r   rË   rR   r:   r:   r:   r;   rÌ     s   
ÿrÌ   r¶   c                   @   s$   e Zd ZejZeedddd�ƒZdS )ÚPA_PAC_REQUESTÚ
includePacTrK   rL   N)	r5   r6   r7   r   rO   rP   r   r   rR   r:   r:   r:   r;   rÍ   %  s   ÿrÍ   r‚   c                   @   s:   e Zd Zedddg d¢dd„ edƒD ƒ g d¢ ƒgZd	S )
ÚPA_SUPPORTED_ENCTYPESÚflagsr   iàÿÿÿ)zDES-CBC-CRCzDES-CBC-MD5zRC4-HMACzAES128-CTS-HMAC-SHA1-96zAES256-CTS-HMAC-SHA1-96c                 C   s   g | ]}d | ‘qS )zbit_%dr:   ©Ú.0Úir:   r:   r;   Ú
<listcomp>?  ó    z PA_SUPPORTED_ENCTYPES.<listcomp>r•   )zFAST-supportedzCompount-identity-supportedzClaims-supportedz!Resource-SID-compression-disabledN)r5   r6   r7   r"   ÚrangeÚfields_descr:   r:   r:   r;   rÏ   2  s   ùøüÿrÏ   rº   c                   @   s*   e Zd ZejZeeddg d¢dd�ƒZdS )ÚPA_PAC_OPTIONSÚoptionsr   )ZClaimszBranch-AwarezForward-to-Full-DCrK   rL   N)	r5   r6   r7   r   rO   rP   r   ÚKerberosFlagsrR   r:   r:   r:   r;   rØ   O  s   øÿrØ   r»   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_KrbFastArmor_value_Fieldc                    sJ   t t| ƒ ||¡}|d js |S |jjdkrFt|d j|d�|d fS |S )Nr   rC   ru   )rg   rÛ   rv   rk   Ú	armorTyperŸ   ©ri   rj   r{   rk   rl   r:   r;   rv   f  s    
z_KrbFastArmor_value_Field.m2ir}   r:   r:   rl   r;   rÛ   e  s   rÛ   c                   @   s6   e Zd ZejZeeddddidd�edddd�ƒZ	d	S )
ÚKrbFastArmorrÜ   rC   ZFX_FAST_ARMOR_AP_REQUESTrK   rL   Z
armorValuerZ   rN   N)
r5   r6   r7   r   rO   rP   r   r   rÛ   rR   r:   r:   r:   r;   rÞ   o  s   ÿürÞ   c                
   @   sF   e Zd ZejZeeeede	ƒ e	dd�ƒe
dd�eddedd�ƒƒZdS )r¡   ZarmorrK   rL   rN   Z
encFastReqNr‡   )r5   r6   r7   r   rO   rP   r   r   r   rÞ   rŠ   r’   rR   r:   r:   r:   r;   r¡   |  s   ÿûÿr¡   c                	   @   s.   e Zd ZejZededƒede	e	dd�ƒZ
dS )ÚPA_FX_FAST_REQUESTÚarmoredDatarZ   ÚreqrK   ©Zimplicit_tagN)r5   r6   r7   r   rO   rP   r   r   r   r¡   rR   r:   r:   r:   r;   rß   ‰  s   ýrß   c                   @   s*   e Zd ZejZeeeddedd�ƒƒZ	dS )ÚKrbFastArmoredRepZ
encFastRepNrK   rL   )
r5   r6   r7   r   rO   rP   r   r   r’   rR   r:   r:   r:   r;   rã   •  s   ÿÿrã   c                	   @   s.   e Zd ZejZededƒede	e	dd�ƒZ
dS )ÚPA_FX_FAST_REPLYrà   rZ   rá   rK   râ   N)r5   r6   r7   r   rO   rP   r   r   r   rã   rR   r:   r:   r:   r;   rä   ž  s   ýrä   c                
   @   sT   e Zd ZejZeedddd�ede	ƒ dd�e
ddd	d�ed
dedd�edd�ƒZdS )ÚKrbFastFinishedÚ	timestampr   rK   rL   ZusecrN   ÚcrealmrZ   r‡   ÚcnameNr‰   é¤   )r5   r6   r7   r   rO   rP   r   rÅ   rÄ   r/   r‹   r   rA   rŠ   rR   r:   r:   r:   r;   rå   §  s   ûrå   c                
   @   s\   e Zd ZejZeedeƒ gedd�e	e
ddedd�ƒe	e
deƒ edd�ƒed	d
dd�ƒZdS )ÚKrbFastResponseÚpadatarK   rL   ZstengthenKeyNrN   Úfinishedr‡   Únoncer   r‰   )r5   r6   r7   r   rO   rP   r   r   r˜   r   r   r®   rå   r­   rR   r:   r:   r:   r;   rê   ²  s   ÿ
ÿÿörê   r¸   c                	   @   sH   e Zd ZejZeeedddd�ƒeedddd�ƒeedddd�ƒƒZ	d	S )
ÚExternalPrincipalIdentifierZsubjectNamerZ   rK   râ   ZissuerAndSerialNumberrN   ZsubjectKeyIdentifierr‡   N)
r5   r6   r7   r   rO   rP   r   r   r   rR   r:   r:   r:   r;   rî   Ê  s   ÿÿÿùrî   c                	   @   sJ   e Zd ZejZeedddd�ee	de
ƒ ge
dd�ƒeeddd	d�ƒƒZd
S )ÚPA_PK_AS_REQZsignedAuthpackrZ   rK   râ   ZtrustedCertifiersrN   rL   ZkdcPkIdr‡   N)r5   r6   r7   r   rO   rP   r   r   r   r   rî   rR   r:   r:   r:   r;   rï   Ù  s   üÿÿörï   rV   c                   @   s4   e Zd ZejZeedddd�eedddd�ƒƒZ	dS )	Ú	DHRepInfoZdhSignedDatarZ   rK   râ   ZserverDHNoncerN   rL   N)
r5   r6   r7   r   rO   rP   r   r   r   rR   r:   r:   r:   r;   rð   ð  s   ÿþrð   c                   @   s   e Zd ZejZeddƒZdS )Ú
EncKeyPackÚ
encKeyPackrZ   N)r5   r6   r7   r   rO   rP   r   rR   r:   r:   r:   r;   rñ   ú  s   rñ   c                
   @   s@   e Zd ZejZededƒede	ƒ e	dd�ede
ƒ e
dd�ƒZdS )	ÚPA_PK_AS_REPÚreprZ   ZdhInforK   rL   rò   rN   N)r5   r6   r7   r   rO   rP   r   r   r   rð   rñ   rR   r:   r:   r:   r;   ró   ÿ  s   üró   r�   ZTicketZAuthenticatorrœ   zAS-REQzAS-REPzTGS-REQzTGS-REPzAP-REQzKRB-SAFEzKRB-PRIVzKRB-CREDrž   ÚEncTGSRepPartZEncApRepPartZEncKrbPrivPartZEnvKrbCredPartz	KRB-ERROR)rC   rD   rE   rJ   r•   rU   ra   rb   rW   é   é   é   é   é   é   é   é   c                   @   sT   e Zd ZejZeeedddd�e	dddd�e
dd	ed
d�e
dd	edd�ƒdd�Zd	S )r›   ZtktVnor   rK   rL   ÚrealmrZ   rN   ÚsnameNr‡   ÚencPartr‰   rC   râ   )r5   r6   r7   r   rO   rP   r@   r   r   r‹   r   rA   r’   rR   r:   r:   r:   r;   r›   %  s   üùr›   c                   @   s0   e Zd ZejZeedddd�edddd�ƒZ	dS )	ÚTransitedEncodingZtrTyper   rK   rL   ÚcontentsrZ   rN   N)
r5   r6   r7   r   rO   rP   r   r�   r   rR   r:   r:   r:   r;   r  2  s
   þr  )ÚreservedÚforwardableÚ	forwardedÚ	proxiableÚproxyzmay-postdateÚ	postdatedÚinvalidÚ	renewableÚinitialzpre-authentz
hw-authentztransited-since-policy-checkedzok-as-delegatec                   @   sÆ   e Zd ZejZeeedde	dd�e
ddedd�edd	d
d�e
ddedd�e
deƒ edd�edeƒ dd�eedeƒ dd�ƒedeƒ dd�eedeƒ dd�ƒeeddd�ƒee
ddedd�ƒƒdd�ZdS )rœ   rÐ   r   rK   rL   r¦   NrN   rç   rZ   r‡   rè   r‰   Z	transitedré   Úauthtimerº   Ú	starttimeé¦   Úendtimer»   Ú	renewTillé¨   Ú	addressesé©   ZauthorizationDataéª   rE   râ   )r5   r6   r7   r   rO   rP   r@   r   rÚ   Ú_TICKET_FLAGSr   r®   r‹   rA   r  rÄ   r/   r   ÚHostAddressesr„   rR   r:   r:   r:   r;   rœ   L  sD   ü
ÿÿÿ
ÿÿÿèác                   @   sò   e Zd ZejZeeddg d¢dd„ eddƒD ƒ g d¢ d	d
�e	e
ddedd
�ƒedddd
�e	e
ddedd
�ƒe	edddd
�ƒedeƒ dd
�e	edeƒ dd
�ƒedddd
�edg edd
�e	eddd
�ƒe	e
dded d
�ƒe	ed!g ed"d
�ƒƒZdS )#ÚKRB_KDC_REQ_BODYÚ
kdcOptionsrZ   )r  r  r  r  r  zallow-postdater  Zunused7r
  Zunused9Zunused10zopt-hardware-authZunused12Zunused13zconstrained-delegationZcanonicalizezrequest-anonymousc                 C   s   g | ]}d | ‘qS )zunused%dr:   rÑ   r:   r:   r;   rÔ   �  rÕ   zKRB_KDC_REQ_BODY.<listcomp>r�   rù   )zdisable-transited-checkzrenewable-okzenc-tkt-in-skeyZunused29ZrenewÚvalidaterK   rL   rè   NrN   rþ   r‡   rÿ   r‰   Zfrom_ré   Útillrº   Úrtimer  rí   r   r»   r“   r  r  r  ÚencAuthorizationDatar  ÚadditionalTicketsé«   )r5   r6   r7   r   rO   rP   r   rÚ   rÖ   r   r   rA   r‹   rÄ   r/   r­   r   r�   r  r’   r›   rR   r:   r:   r:   r;   r  t  sD   íìá!ÿ
ÿÿÿÿÌr  ÚpvnorN   rL   ÚmsgTyperJ   r‡   rë   r‰   ÚreqBodyré   c                	   @   sd   e Zd ZejZeeddddgdd„ eddƒD ƒ d	g d
d�e	de
ƒ ge
dd�eddedd�ƒZdS )r¢   ZfastOptionsrZ   ZRESERVEDzhide-client-namesc                 C   s   g | ]}d | ‘qS )zres%dr:   rÑ   r:   r:   r;   rÔ   Ã  rÕ   zKrbFastReq.<listcomp>rD   rV   zkdc-follow-referralsrK   rL   rë   rN   r!  Nr‡   )r5   r6   r7   r   rO   rP   r   rÚ   rÖ   r   r˜   r   r  rR   r:   r:   r:   r;   r¢   ¸  s"   þüû÷ór¢   c                   @   s   e Zd ZejZeedd�ZdS )Ú
KRB_AS_REQrJ   râ   N©	r5   r6   r7   r   rO   rP   r@   ÚKRB_KDC_REQrR   r:   r:   r:   r;   r"  Ì  s
   þr"  c                   @   s   e Zd ZejZeedd�ZdS )ÚKRB_TGS_REQrU   râ   Nr#  r:   r:   r:   r;   r%  Ô  s
   þr%  rK   rç   rZ   rè   Úticketr   r  c                   @   s   e Zd ZejZeedd�ZdS )r�   r•   râ   N©	r5   r6   r7   r   rO   rP   r@   ÚKRB_KDC_REPrR   r:   r:   r:   r;   r�   ë  s
   þr�   c                   @   s   e Zd ZejZeedd�ZdS )r¿   ra   râ   Nr'  r:   r:   r:   r;   r¿   ó  s
   þr¿   c                   @   s2   e Zd ZejZeedddd�ede	ƒ dd�ƒZ
dS )ÚLastReqItemZlrTyper   rK   rL   ZlrValuerN   N)r5   r6   r7   r   rO   rP   r   r�   rÄ   r/   rR   r:   r:   r:   r;   r)  û  s
   þr)  r¦   ZlastReqrí   ZkeyExpirationrÐ   r  r  r  r  r  Zsrealmr  rÿ   r  Zcaddrr  ZencryptedPaDataé¬   c                   @   s   e Zd ZejZeedd�ZdS )rž   rø   râ   N©	r5   r6   r7   r   rO   rP   r@   ÚEncKDCRepPartrR   r:   r:   r:   r;   rž   $  s
   þc                   @   s   e Zd ZejZeedd�ZdS )rõ   rù   râ   Nr+  r:   r:   r:   r;   rõ   ,  s
   þc                   @   sh   e Zd ZejZeeedddd�e	dde
dd�edd	g d
¢dd�eddedd�eddedd�ƒdd�ZdS )rŸ   r  rG   rK   rL   r   rb   rN   Z	apOptionsrZ   )r  zuse-session-keyzmutual-requiredr‡   r&  Nr‰   Zauthenticatorré   râ   )r5   r6   r7   r   rO   rP   r@   r   r   r   ÚKRB_MSG_TYPESrÚ   r   r›   r’   rR   r:   r:   r:   r;   rŸ   7  s    ø
òïrŸ   c                   @   s    e Zd ZejZeeedddd�e	dddd�e
dd	ed
d�eedd�ƒedddd�edeƒ dd�ee
dd	edd�ƒeedddd�ƒee
dd	edd�ƒƒ	dd�Zd	S )r    ZauthenticatorPvnorG   rK   rL   rç   rZ   rN   rè   Nr‡   rE   Úcusecr   ré   Úctimerº   Úsubkeyr  Z	seqNumberr»   r  r  rD   râ   )r5   r6   r7   r   rO   rP   r@   r   r   r‹   r   rA   r   rŠ   rÅ   rÄ   r/   r®   r­   r„   rR   r:   r:   r:   r;   r    Q  s.   ÿÿÿÿóìr    c                
   @   sH   e Zd ZejZeeedddd�e	dde
dd�edd	ed
d�ƒdd�Zd	S )Ú
KRB_AP_REPr  rG   rK   rL   r   rc   rN   r   Nr‡   râ   )r5   r6   r7   r   rO   rP   r@   r   r   r   r-  r   r’   rR   r:   r:   r:   r;   r1  n  s   ýúr1  c                   @   s"   e Zd ZejZedeƒ geƒZdS )Ú
MethodDatar…   N)	r5   r6   r7   r   rO   rP   r   r˜   rR   r:   r:   r:   r;   r2  }  s   r2  c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_KRBERROR_data_Fieldc                    sJ   t t| ƒ ||¡}|d js |S |jjdv rFt|d j|d�|d fS |S )Nr   )rX   rø   ru   rC   )rg   r3  rv   rk   Ú	errorCoder2  rÝ   rl   r:   r;   rv   ƒ  s    
z_KRBERROR_data_Field.m2ir}   r:   r:   rl   r;   r3  ‚  s   r3  c                P   @   sj  e Zd ZejZeeedddd�e	dde
dd�eedeƒ d	d�ƒeed
ddd�ƒedeƒ dd�edddd�e	ddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVœDdWd�eedXdYdZd�ƒeed[d\ed]d�ƒed^dYd_d�ed`d\edad�eedbdYdcd�ƒeedddYded�ƒƒddf�Zd\S )gr¾   r  rG   rK   rL   r   rý   rN   r/  r‡   r.  r   r‰   Zstimeré   Zsusecrº   r4  ZKDC_ERR_NONEZKDC_ERR_NAME_EXPZKDC_ERR_SERVICE_EXPZKDC_ERR_BAD_PVNOZKDC_ERR_C_OLD_MAST_KVNOZKDC_ERR_S_OLD_MAST_KVNOZKDC_ERR_C_PRINCIPAL_UNKNOWNZKDC_ERR_S_PRINCIPAL_UNKNOWNZKDC_ERR_PRINCIPAL_NOT_UNIQUEZKDC_ERR_NULL_KEYZKDC_ERR_CANNOT_POSTDATEZKDC_ERR_NEVER_VALIDZKDC_ERR_POLICYZKDC_ERR_BADOPTIONZKDC_ERR_ETYPE_NOSUPPZKDC_ERR_SUMTYPE_NOSUPPZKDC_ERR_PADATA_TYPE_NOSUPPZKDC_ERR_TRTYPE_NOSUPPZKDC_ERR_CLIENT_REVOKEDZKDC_ERR_SERVICE_REVOKEDZKDC_ERR_TGT_REVOKEDZKDC_ERR_CLIENT_NOTYETZKDC_ERR_SERVICE_NOTYETZKDC_ERR_KEY_EXPIREDZKDC_ERR_PREAUTH_FAILEDZKDC_ERR_PREAUTH_REQUIREDZKDC_ERR_SERVER_NOMATCHZKDC_ERR_MUST_USE_USER2USERZKDC_ERR_PATH_NOT_ACCEPTEDZKDC_ERR_SVC_UNAVAILABLEZKRB_AP_ERR_BAD_INTEGRITYZKRB_AP_ERR_TKT_EXPIREDZKRB_AP_ERR_TKT_NYVZKRB_AP_ERR_REPEATZKRB_AP_ERR_NOT_USZKRB_AP_ERR_BADMATCHZKRB_AP_ERR_SKEWZKRB_AP_ERR_BADADDRZKRB_AP_ERR_BADVERSIONZKRB_AP_ERR_MSG_TYPEZKRB_AP_ERR_MODIFIEDZKRB_AP_ERR_BADORDERZKRB_AP_ERR_BADKEYVERZKRB_AP_ERR_NOKEYZKRB_AP_ERR_MUT_FAILZKRB_AP_ERR_BADDIRECTIONZKRB_AP_ERR_METHODZKRB_AP_ERR_BADSEQZKRB_AP_ERR_INAPP_CKSUMZKRB_AP_PATH_NOT_ACCEPTEDZKRB_ERR_RESPONSE_TOO_BIGZKRB_ERR_GENERICZKRB_ERR_FIELD_TOOLONGZKDC_ERROR_CLIENT_NOT_TRUSTEDZKDC_ERROR_KDC_NOT_TRUSTEDZKDC_ERROR_INVALID_SIGZKDC_ERR_KEY_TOO_WEAKZKDC_ERR_CERTIFICATE_MISMATCHZKRB_AP_ERR_NO_TGTZKDC_ERR_WRONG_REALMZ KRB_AP_ERR_USER_TO_USER_REQUIREDZKDC_ERR_CANT_VERIFY_CERTIFICATEZKDC_ERR_INVALID_CERTIFICATEZKDC_ERR_REVOKED_CERTIFICATEZ!KDC_ERR_REVOCATION_STATUS_UNKNOWNZ%KDC_ERR_REVOCATION_STATUS_UNAVAILABLEZKDC_ERR_CLIENT_NAME_MISMATCHZKDC_ERR_KDC_NAME_MISMATCH)Dr   rC   rD   rE   rF   rG   rH   rI   r_   r`   rJ   r•   rU   ra   rb   rc   rV   r�   r�   r´   rW   rö   r÷   r‘   rX   rø   rù   rú   rû   rü   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é,   é-   é.   é/   é0   é1   é2   r–   é4   é<   é=   é>   é?   r   r€   r�   éC   éD   éE   éF   éG   éH   éI   éJ   éK   éL   r  rç   rZ   r»   rè   Nr  rþ   r  rÿ   r  ZeTextr  ZeDatar*  râ   )r5   r6   r7   r   rO   rP   r@   r   r   r   r-  r   rÄ   r/   rÅ   r‹   r   rA   rQ   r3  rR   r:   r:   r:   r;   r¾   Ž  sÄ   ÿÿ»G¶Lÿ¢`Ÿr¾   z%GSS_InitialContextToken_1964 (AP-REQ)z%GSS_InitialContextToken_1964 (AP-REP)z$GSS_InitialContextToken_1964 (ERROR)zGSS_GetMIC-RFC1964zGSS_Wrap-RFC1964zGSS_Delete_sec_context-RFC1964Z
GSS_GetMICZGSS_Wrap)ó    s    s    ó   ó   ó   ó   ó   zDES MAC MD5zMD2.5zDES MACÚHMAC)r   rC   rD   r�   Únone)r   éÿÿ  rV   c                   @   s"   e Zd ZdZeddedd�gZdS )Ú*KRB5_InitialContextToken_innerContextTokenz;Kerberos v5 InitialContextToken innerContextToken (RFC1964)ÚTOK_IDrX  rD   ©ÚlengthN)r5   r6   r7   r8   r)   Ú_TOK_IDSr×   r:   r:   r:   r;   r`    s   ÿr`  c                   @   s8   e Zd ZdZejZeeddƒe	de
ƒ e
dd�dd�ZdS )ÚKRB_InitialContextTokenz)Kerberos v5 InitialContextToken (RFC1964)ZMechTypez1.2.840.113554.1.2.2ZinnerContextTokenr   râ   N)r5   r6   r7   r8   r   rO   rP   r@   r   r   r`  rR   r:   r:   r:   r;   re    s   üøre  c                
   @   sV   e Zd ZdZeddedd�eddeƒedd	ƒe	d
ddd�e
e	dddd�ddd�gZdS )ÚKRB5_GSS_GetMIC_RFC1964z Kerberos v5 GSS_GetMIC (RFC1964)ra  rX  rD   rb  ÚSGN_ALGr   r  ì   ÿÿ ÚSND_SEQrÕ   r_   Ú	SGN_CKSUMó   ©ÚalignZpadwithN)r5   r6   r7   r8   r)   rd  r%   Ú	_SGN_ALGSr#   r*   r'   r×   r:   r:   r:   r;   rf  2  s   
ýûrf  c                   @   sl   e Zd ZdZeddedd�eddeƒeddeƒe	d	d
ƒe
dddd�ee
dddd�ddd�e
dddd�gZdS )ÚKRB5_GSS_Wrap_RFC1964zKerberos v5 GSS_Wrap (RFC1964)ra  rY  rD   rb  rg  r   ZSEAL_ALGr  r_  ri  rÕ   r_   rj  rk  rl  Z
CONFOUNDERN)r5   r6   r7   r8   r)   rd  r%   rn  Ú
_SEAL_ALGSr&   r*   r'   r×   r:   r:   r:   r;   ro  D  s   

ýôro  c                   @   s   e Zd ZdZdZejZdS )Ú#KRB5_GSS_Delete_sec_context_RFC1964z,Kerberos v5 GSS_Delete_sec_context (RFC1964)rZ  N)r5   r6   r7   r8   ra  rf  r×   r:   r:   r:   r;   rq  Y  s   rq  )ZSentByAcceptorZSealedZAcceptorSubkeyc                
   @   sX   e Zd ZdZeddedd�edddeƒed	d
ƒe	dddd�e
e	dddd�ddd�gZdS )ÚKRB5_GSS_GetMICzKerberos v5 GSS_GetMICra  r[  rD   rb  ÚFlagsr_   r   r  rh  ri  rÕ   rj  rk  rl  N)r5   r6   r7   r8   r)   rd  r"   Ú_KRB5_GSS_Flagsr#   r*   r'   r×   r:   r:   r:   r;   rr  j  s   ýûrr  c                   @   sh   e Zd ZdZeddedd�edddeƒed	d
ƒe	ddƒe	ddƒe
dddd�ee
dddd�ddd�gZdS )ÚKRB5_GSS_WrapzKerberos v5 GSS_Wrapra  r\  rD   rb  rs  r_   r   r  éÿ   ZECZRRCri  rÕ   rj  rk  rl  N)r5   r6   r7   r8   r)   rd  r"   rt  r!   r(   r*   r'   r×   r:   r:   r:   r;   ru  |  s   ýùru  c                   @   s   e Zd Zeddd„ƒZdS )ÚKRB5_GSSNc                 O   sŒ   |rˆt |ƒdkrˆ|d d… dkr$tS |d d… dkr8tS |d d… dkrLtS |d d… dv r`tS |d d… dkrttS |d d… dkrˆtS tS )NrD   rX  rY  rZ  )rW  z z r[  r\  )Úlenrf  ro  rq  r`  rr  ru  )r|   Z_pktÚargsZkargsr:   r:   r;   Údispatch_hook‘  s    zKRB5_GSS.dispatch_hook)N)r5   r6   r7   Úclassmethodrz  r:   r:   r:   r;   rw  �  s   rw  c                   @   s8   e Zd ZejZeddeee	e
eeeeeeƒZdd„ ZdS )ÚKerberosÚrootNc                 C   s
   | j  ¡ S r[   )r}  Úsummary©ri   r:   r:   r;   Ú	mysummary¹  s    zKerberos.mysummary)r5   r6   r7   r   rO   rP   r   re  r›   r    r"  r�   r%  r¿   rŸ   r1  r¾   rR   r€  r:   r:   r:   r;   r|  ¨  s    ôr|  éX   )Úsport)Údport)r‚  rƒ  c                   @   s(   e Zd Zedddd�gZedd„ ƒZdS )ÚKerberosTCPHeaderrx  Nú!I)Úfmtc                 O   sD   t |ƒdk rd S t d|d d… ¡d }t |ƒ|d kr@| |ƒS d S )NrF   r…  r   )rx  ÚstructÚunpack)r|   Údatary  r\   rc  r:   r:   r;   Útcp_reassembleÍ  s
    z KerberosTCPHeader.tcp_reassemble)r5   r6   r7   r$   r×   r{  rŠ  r:   r:   r:   r;   r„  Ê  s   r„  c                       sÒ   e Zd ZedddgƒZd‡ fdd„	Z‡ fdd	„Zd
d„ Zej	dd�dd„ ƒZ
e e
¡dd„ ƒZe e¡dd„ ƒZe 	¡ dd„ ƒZe e¡dd„ ƒZe e¡dd„ ƒZe e¡dd„ ƒZej	dd�dd„ ƒZ‡  ZS ) ÚKerberosClientZ	AS_ResultZasrepZ
sessionkeyNr�  c           	         sÊ   dd l }|stdƒ‚|s tdƒ‚|s,tdƒ‚|s8tdƒ‚d | _t ¡ ‰ ˆ  d¡ ˆ  ||f¡ tˆ tƒ‰ t|ƒ 	¡ | _
t|ƒ| _t|ƒ 	¡ | _|| _d| _tt| ƒjf ‡ fdd	„‡ fdd	„d
œ|¤Ž d S )Nr   z
Invalid IPzInvalid hostzInvalid userzInvalid domaing      @Fc                     s   ˆ S r[   r:   )Ú_©Úsockr:   r;   r]   ý  rÕ   z)KerberosClient.__init__.<locals>.<lambda>)ZrecvsockÚll)r²   r£   ÚresultÚsocketÚ
settimeoutÚconnectr.   r„  r   ÚupperÚhostÚuserÚdomainr¦   Úpre_authrg   r‹  Ú__init__)	ri   Úipr•  r–  r—  r¦   Úportr\   Úscapyrl   r�  r;   r™  â  s0    


ÿÿzKerberosClient.__init__c                    s   t t| ƒ tƒ | ¡ d S r[   )rg   r‹  Úsendr„  ©ri   rj   rl   r:   r;   r�     s    zKerberosClient.sendc                 C   sD  ddl m} t ¡ jdd�}ttttdƒt	t
dƒd�d�gtt|jƒt|jƒt|jƒt|jƒgttdƒt| j d	d
¡ƒd�gd tdƒtt| jƒgtdƒd�t| jƒttdƒt| jƒgtdƒd�t|tdd� ƒt|tdd� ƒttddƒƒd�
d�d�}| j�r@tdtƒ d�|jjd g|j_|jjd j  !| j"t#t|ƒd�¡ |S )Nr   )ÚEncryptionType)Úmicrosecondr‚   éÿÿÿÿ)rÎ   )r™   rÁ   rW   rV   ó    )rT   rY   Z 01000000100000010000000000010000rC   )rM   rB   s   krbtgtrD   rJ   )Úhoursiÿÿÿ)
r“   r  r  r  rè   rþ   rÿ   r  r  rí   )rë   r!  )r}  )rÃ   )$r²   rŸ  r   ÚutcnowÚreplacer|  r"  r˜   r	   rÍ   r   r  ÚAES256ZAES128rŽ   ZDES_MD5rS   r   r•  Úljustr   rA   r   r–  r—  r   r   r0   r˜  r’   r}  rë   rÁ   rª   r¦   rš   )ri   rŸ  Znow_timeZapreqr:   r:   r;   Úap_req  sd    þÿüþÿ
þþûâùÿ-þ
ûÿzKerberosClient.ap_reqrC   )r  c                 C   s   d S r[   r:   r  r:   r:   r;   ÚBEGINB  s    zKerberosClient.BEGINc                 C   s   |   ¡ ‚d S r[   )ÚSENT_AP_REQr  r:   r:   r;   Úshould_send_ap_reqF  s    z!KerberosClient.should_send_ap_reqc                 C   s   |   |  ¡ ¡ d S r[   )r�  r¨  r  r:   r:   r;   Úsend_ap_reqJ  s    zKerberosClient.send_ap_reqc                 C   s   d S r[   r:   r  r:   r:   r;   rª  N  s    zKerberosClient.SENT_AP_REQc                 C   sf   t |v rbt|jtƒrb|jjdkrH| js8t d¡ |  ¡ ‚d| _	|  
¡ ‚nt d¡ | ¡  |  ¡ ‚d S )Nrø   z6Got 'KDC_ERR_PREAUTH_REQUIRED', but no key was passed.TzReceived KRB_ERROR)r|  re   r}  r¾   r4  r¦   r    ÚwarningÚFINALr˜  r©  Úshowrž  r:   r:   r;   Úreceive_krb_error_ap_reqR  s    ÿ

z'KerberosClient.receive_krb_error_ap_reqc                 C   s&   t |v r"t|jtƒr"|  ¡  |¡‚d S r[   )r|  re   r}  r�   r®  Zaction_parametersrž  r:   r:   r;   Úreceive_ap_repb  s    zKerberosClient.receive_ap_repc                 C   s*   |j j}| | j¡}|  |j |j¡| _d S r[   )r}  r   r¥   r¦   ÚRESr�  )ri   rj   ÚencÚresr:   r:   r;   Údecrypt_ap_repg  s    zKerberosClient.decrypt_ap_rep)Úfinalc                 C   s   d S r[   r:   r  r:   r:   r;   r®  n  s    zKerberosClient.FINAL)NNNNNr�  )r5   r6   r7   r   r²  r™  r�  r¨  r   Ústater©  Ú	conditionr«  Úactionr¬  rª  Zreceive_conditionr°  r±  rµ  r®  rr   r:   r:   rl   r;   r‹  ß  s*    ÿ?








r‹  c                 K   s:  t  d| ¡}|stdƒ‚| d¡dkr<| d¡}| d¡}n| d¡}| d¡}|du �r
|du ršzdd	lm} |d
dd�}W n ty˜   td
ƒ}Y n0 | d¡rÒ| 	¡  
¡ d | ¡  
¡  d | ¡  
¡  }	n| 	¡  
¡ | 
¡  }	ddlm}
m} |
 |j| 
¡ |	¡}tf ||d||dœ|¤Ž}| ¡  | ¡  |jS )a  
    Kerberos AS-Req

    :param upn: the user principal name formatted as "DOMAIN\user" or "user@DOMAIN"
    :param ip: the KDC ip
    :param key: (optional) pass the Key object
    :param password: (optional) otherwise, pass the user's password

    :return: returns a named tuple (asrep=<...>, sessionkey=<...>)

    Example::

        >>> # The KDC is on 192.168.122.17, we ask a TGT for user1
        >>> krb_as_req("user1@DOMAIN.LOCAL", "192.168.122.17", password="Password1")

    Equivalent::

        >>> from scapy.libs.rfc3961 import Key, EncryptionType
        >>> key = Key(EncryptionType.AES256, key=hex_bytes("6d0748c546f4e99205
        ...: e78f8da7681d4ec5520ae4815543720c2a647c1ae814c9"))
        >>> krb_as_req("user1@DOMAIN.LOCAL", "192.168.122.17", key=key)
    z^([^@\\]+)(@|\\)([^@\\]+)$zInvalid UPN !rD   ú@rC   rE   Nr   )ÚpromptzEnter password: T)Zis_passwordú$s   hostó   .)r±   rŸ  ZWIN1)r—  rš  r•  r–  r¦   )ÚreÚmatchr£   ÚgroupZprompt_toolkitr»  ÚImportErrorÚinputÚendswithr”  ÚencodeÚlowerr²   r±   rŸ  Zstring_to_keyr¦  r‹  ÚrunÚstopr�  )Zupnrš  r¦   Úpasswordr\   Úmr–  r—  r»  rÇ   r±   rŸ  Úclir:   r:   r;   Ú
krb_as_reqs  sJ    





ÿ
þý
üÿ
ÿÿrË  )NN)¡rÀ   Úcollectionsr   r   r   r¾  r‘  r‡  Zscapy.asn1.mibrœ  Zscapy.asn1.asn1r   r   r   r   r	   r
   r   r   r   Zscapy.asn1.berr   Zscapy.asn1fieldsr   r   r   r   r   r   r   r   r   r   r   r   r   Zscapy.asn1packetr   Zscapy.automatonr   r   Zscapy.compatr   Zscapy.errorr    Zscapy.fieldsr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   Zscapy.packetr+   r,   r-   Zscapy.supersocketr.   Zscapy.volatiler/   r0   Zscapy.layers.inetr1   r2   r3   r<   r?   r@   rQ   r‹   r�   r­   rA   rÄ   rÅ   rS   r  rŠ   ry   rd   rs   r~   r„   ZAD_IF_RELEVANTr†   rŒ   ZADMANDATORYFORKDCr¬   r’   r®   rÚ   rÂ   rx   r¼   r˜   rš   rÆ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   rÏ   rØ   rÛ   rÞ   r¡   rß   rã   rä   rå   rê   rî   rï   rð   rñ   ró   r-  r›   r  r  rœ   r  r$  r¢   r"  r%  r(  r�   r¿   r)  r,  rž   rõ   rŸ   r    r1  r2  r3  r¾   rd  rn  rp  r`  re  rf  ro  rq  rt  rr  ru  rw  r|  r„  r‹  rË  r:   r:   r:   r;   Ú<module>   sÔ   ,<0û	Dî

		

ï(<ü
ÿ÷ÿüÿÿ
ÿä!köûü






 