
    h                       d Z ddlmZ ddlmZmZmZ ddlmZ ddlZddl	Z	ddl
Z
ddlZddlmZ ddlZddlmZmZ ddlmZmZmZmZmZmZmZ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)m*Z* dd
l+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddlm4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ddlOmPZPmQZQmRZRmSZS ddlTmUZU ddlVmWZWmXZX ddlYmZZZm[Z[m\Z\ ddl]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZh ddlimjZjmkZk ddllmmZm  G d de          Zne ZoeoZpe"Zqe"Zrdddddddd d!d"	Zs G d# d$e,          Zte!Zue"Zvi d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKZwi d%dLd'dMd)dNdOdPd+dQdRdSd-dTdUdVd/dWd1dXd5dYd7dZd9dXd;d[d=d\d?d]dAd^d_d`dadbdcZx G dd dee,          Zy G df dge,          Zz G dh die(          Z{ G dj dke,          Z|eZ}dldmdndodpdqdrdsdtdu	Z~ G dv dwe,          Zdx Zi Z G dy dze(          Zi d%d{d'd|d)d}dOd~d+ddRdd-ddUdddddddddddddddddddZ G d de,          Z G d de,          ZeZeed%<    G d de,          ZeedO<    G d de,          Zeed+<   eZeedU<   i d%dd'dd)dd3dd9dd;dd=dd?ddCddEdddddddddddddddi ddddddddddddddddddddddēddƓddȓddʓdd̓ddΓddГddddԜZi Z G dՄ de(          Z G dׄ de,          Z G dل de,          Zeyed'<    G dۄ de,          Z G d݄ de,          Zeed3<    G d߄ de,          Z G d de,          ZeedC<    G d de,          Z G d de,          Zeed<    G d de,          Zeed<    G d deP          Z G d de(          Z G d de,          Zeed<    G d deP          Zeed<    G d deP          Zeed<    G d de,          Zeed<    G d deP          Zeed<    G d de,          Zeed<    G d de,          Zeed<    G d de,          Zeed<    G d  de,          Z G d de,          Z G d de(          Z G d de,          Z G d d	e,          Z G d
 de,          Z G d de,          Z G d de,          Z G d de,          Z G d de,          Zeefed<    G d de,          Z G d de,          Zeed=<    G d de,          Z G d de,          Z G d de,          Zeed?<    G d de,          Zeed<    G d  d!e,          Z G d" d#e,          Zeed<   i d%d$d'd%d)d&d1d'd3d(d5d)d7d*d9d+d;d,d=d-d?d.dEd/d0d1d2d3d4d5d6d7d8d9d:d;d<d=Z G d> d?e,          Z G d@ dAe,          Zg dBZ G dC d&e,          Z G dD dEe,          Z e% e"dFd+d͐G           e)dHd1edϐG           e* e&dIg edJG                     e$dK e            edLG                    Z G dM dNe,          Z G dO dPe,          Z G dQ dRe,          Z e% e"dFd+dSG           e)dHd3ed͐G           e* e&dIg edϐG                     epdTdUdJG           e$dVdetdLG           e$dWdedG           e$dXdeydYG                    Z G dZ d[e,          Z G d\ d]e,          Z G d^ d_e,          Z e% e$d`dezdSG           e&dag ed͐G           erdbddϐG           e* eudc eZ            dJG                     e}dddUedLG           eude eZ            dG           e* eudf eZ            dYG                     eudg eZ            dG           e* eudh eZ            diG                     epdjdUdkG           e$dl et            etdmG           e* edndoG                     e* e&dpg edqG                              Z G dr d5e,          Z G ds d7e,          Z G dt due,          Zeed%<    G dv dwe,          Z G dx dye,          Z G dz d9e,          Z G d{ d|e,          Z G d} d:e,          Z G d~ de,          Z G d de,          Z G d de,          Z G d de,          Z G d de(          Z G d de,          Z G d deP          Z G d de(          Z G d de,          Z G d de,          Z G d de,          Z G d de,          Z G d deP          Z G d deP          Z֐ddd<dddd-d.ddddZאdddddZؐddddZi Z G d deP          Z G d de^          Z G d deP          Zeeڐd<    G d deP          Zeeڐd<    G d deP          Zeeڐd<   g dZ G d deP          Zeeڐd<    G d deP          Zeeڐd<    G d de,          Zeeڐd<   eegd<   eehd<   eegd<   eegd<    G dƄ de,          Z eQekedȐɦ            eQekedȐʦ            eSekedȐdȐ˦           eeڐd<   eeڐd<   eeڐd<   eeڐd<   eeڐd<    G dф deP          Z eSee            eQejedȐɦ            eSejedȐʦ            G dӄ deP          Z G dՄ de,          Z G dׄ deP          ZdِdڐdېdܐdݐdސdߐddZ G d deP          Z G d deP          Z eQekedɦ            eQekedʦ            eRekedd˦            eRekedd˦            G d deP          Z eSee            eQejedɦ            eSejedʦ            G d de.          Zd Zd Z	 ddZdddg ddddfdZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ G d def          ZdS (  a  
Kerberos V5

Implements parts of:

- Kerberos Network Authentication Service (V5): RFC4120
- Kerberos Version 5 GSS-API: RFC1964, RFC4121
- Kerberos Pre-Authentication: RFC6113 (FAST)
- Kerberos Principal Name Canonicalization and Cross-Realm Referrals: RFC6806
- Microsoft Windows 2000 Kerberos Change Password and Set Password Protocols: RFC3244
- User to User Kerberos Authentication: draft-ietf-cat-user2user-03
- Public Key Cryptography Based User-to-User Authentication (PKU2U): draft-zhu-pku2u-09
- Initial and Pass Through Authentication Using Kerberos V5 (IAKERB):
  draft-ietf-kitten-iakerb-03
- Kerberos Protocol Extensions: [MS-KILE]
- Kerberos Protocol Extensions: Service for User: [MS-SFU]


.. note::
    You will find more complete documentation for this layer over at
    `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	timedeltatimezone)IntEnumN)warning)
BER_id_decBER_Decoding_Error)ASN1_BIT_STRINGASN1_BOOLEAN
ASN1_ClassASN1_GENERAL_STRINGASN1_GENERALIZED_TIMEASN1_INTEGERASN1_STRINGASN1_Codecs)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_STRING_PacketFieldASN1F_enum_INTEGERASN1F_optional)ASN1_Packet)	AutomatonATMT)conf)bytes_encode)log_runtime)ConditionalFieldFieldLenField
FlagsFieldIntEnumFieldLEIntEnumFieldLenFieldLEShortEnumFieldLEShortField	LongFieldMultipleTypeFieldPacketFieldPacketLenFieldPacketListFieldPadFieldShortEnumField
ShortFieldStrFieldStrFieldUtf16StrFixedLenEnumField
XByteFieldXLEIntFieldXLEShortFieldXStrFixedLenFieldXStrLenField	XStrField)Packetbind_bottom_upbind_top_downbind_layers)StreamSocket)strrotstrxor)GeneralizedTimeRandNumRandBin)GSSAPI_BLOBGSS_C_FLAGSGSS_S_BAD_MECHGSS_S_COMPLETEGSS_S_CONTINUE_NEEDEDGSS_S_DEFECTIVE_TOKENGSS_S_FAILUREGssChannelBindingsSSP_GSSAPI_OIDS_GSSAPI_SIGNATURE_OIDS)TCPUDP)Optionalc                   Z    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdS )ASN1_Class_KRBKerberos`   a   b   c   j   k   l   m   n   o   u   v   y   z   {   |   }   ~   N)__name__
__module____qualname__nameTokenTicketAuthenticatorEncTicketPartAS_REQAS_REPTGS_REQTGS_REPAP_REQAP_REPPRIVCREDEncASRepPartEncTGSRepPartEncAPRepPartEncKrbPrivPartEncKrbCredPartERROR     Y/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/kerberos.pyrY   rY      sm        DEFMMFFGGFFDDLMLNNEEEr   rY   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                        
   c            	           e Zd Zej        Z e edded           e	dg e
d                    Zedefd            Zed	efd
            ZdS )PrincipalNamenameTyper      explicit_tag
nameString   upnc                 ~    t          |           \  }}t          t          |          gt          d                    S )Nr   r   r   )
_parse_upnr   r   r   )r   user_s      r   fromUPNzPrincipalName.fromUPN   s?    S//a+D112!!__
 
 
 	
r   spnc                 <   t          |           \  } }|                     d          r;t          d |                     d          D             t	          d                    S t          d |                     d          D             t	          d                    S )Nkrbtgtc                 ,    g | ]}t          |          S r   r   .0xs     r   
<listcomp>z)PrincipalName.fromSPN.<locals>.<listcomp>   !    KKKq/22KKKr   /r   r   c                 ,    g | ]}t          |          S r   r   r   s     r   r   z)PrincipalName.fromSPN.<locals>.<listcomp>   r   r   r   )
_parse_spn
startswithr   splitr   )r   r   s     r   fromSPNzPrincipalName.fromSPN   s    CQ>>(## 		 KKCIIcNNKKK%a   
 !KKCIIcNNKKK%a   r   N)rm   rn   ro   r   BER
ASN1_codecr   r   _PRINCIPAL_NAME_TYPESr   KerberosString	ASN1_rootstaticmethodstrr   bytesr   r   r   r   r   r      s        J!		
 	
 	
 	,NNNN I 
S 
 
 
 \
 U    \  r   r   r   DES-CBC-CRCr   zDES-CBC-MD4r   DES-CBC-MD5r   zDES3-CBC-MD5r   zDES3-CBC-SHA1	   zDSAWITHSHA1-CMSOIDr   zMD5WITHRSAENCRYPTION-CMSOID   zSHA1WITHRSAENCRYPTION-CMSOID   zRC2CBC-ENVOID   zRSAENCRYPTION-ENVOID   zRSAES-OAEP-ENV-OID   zDES-EDE3-CBC-ENV-OID   zDES3-CBC-SHA1-KD   AES128-CTS-HMAC-SHA1-96   AES256-CTS-HMAC-SHA1-96   zAES128-CTS-HMAC-SHA256-128   zAES256-CTS-HMAC-SHA384-192RC4-HMACzRC4-HMAC-EXPzCAMELLIA128-CTS-CMACzCAMELLIA256-CTS-CMAC)            CRC32zRSA-MD4zRSA-MD4-DESr   zDES-MACz	DES-MAC-Kr   zRSA-MD4-DES-KzRSA-MD5   zRSA-MD5-DESzRSA-MD5-DES3SHA1zHMAC-SHA1-DES3-KDzHMAC-SHA1-DES3zHMAC-SHA1-96-AES128zHMAC-SHA1-96-AES256zCMAC-CAMELLIA128zCMAC-CAMELLIA256zHMAC-SHA256-128-AES128zHMAC-SHA384-192-AES256KRB-AUTHENTICATORMD5)r   r     l   v c            
           e Zd Zej        Z e edded           e	 e
ddd                     edd	d
                    Zd ZddZddZdS )EncryptedDataetyper   r   r   kvnoNr   cipher    c                 R   | j         rt          | j         t                    r| j         j        }|dk    r	dt          fS nZt          | j         t
                    r	dt          fS t          | j         t                    r	dt          fS t          | j         t                    r(t          | j         j         t                    r	dt          fS t          | j         t                    r	dt          fS t          | j         t                    r	dt          fS t          | j         t                    r	dt          fS t          | j         t                    r	dt           fS t          | j         t"                    r	d	t$          fS t          | j         t&                    r	d
t(          fS t+          d          )zB
        Get current key usage number and encrypted class
        r   r   r   r   r   r   r   r   r   3   ACould not guess key usage number. Please specify key_usage_number)
underlayer
isinstancePADATA
padataTypePA_ENC_TS_ENC
KRB_Ticketrt   
KRB_AS_REPr}   
KRB_AP_REQKRB_AuthenticatorKRB_TGS_REPr~   
KRB_AP_REPr   KRB_PRIVr   KRB_CREDr   KrbFastArmoredReq
KrbFastReq
ValueError)selfpatypes     r   	get_usagezEncryptedData.get_usage%  s   
 ? "	&$/622 !&3Q;;m++  DOZ88 &-''DOZ88 &,&DOZ88 &Z*F> > & +++DO[99 &-''DOZ88 &,,,DOZ88 &<''DOX66 &>))DOX66 &>))DO->?? &:~%O
 
 	
r   c                 8   ||                                  \  }}|                    || j        j                  }|r^	  ||          S # t          $ rE |t
          k    r8	 t          |          }t          j        d           |cY S # t          $ r Y nw xY w w xY w|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)
        Nz:Implementation bug detected. This looks like MIT Kerberos.)	r   decryptr   valr
   r}   r~   r&   r   )r   keykey_usage_numberclsdress         r   r   zEncryptedData.decryptQ  s     #$(NN$4$4!cKK($+/:: 	s1vv%   ,&&
+A.. $+X    #


-   '( s/   
A B$BB
BBBBc                     ||                                  d         }|j        | _        t          |                    |||                    | _        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   r   r   encryptr   )r   r   textr   r   s        r   r   zEncryptedData.encryptw  sS     ##~~//2Y
!KK($:KFF
 
r   NN)rm   rn   ro   r   r   r   r   r   _KRB_E_TYPESr    UInt32r   r   r   r   r   r   r   r   r   r     s        J7D,TJJJvvfd>>>??Xr555 I*
 *
 *
X$ $ $ $L
 
 
 
 
 
r   r   c                       e Zd Zej        Z e edded           e	ddd                    Z
d Zed	             Zd
S )EncryptionKeykeytyper   r   r   keyvaluer   r   c                 P    ddl m}  || j        j        | j        j                  S )Nr   Key)r   r   )scapy.libs.rfc3961r  r   r   r   )r   r  s     r   toKeyzEncryptionKey.toKey  s=    ******s,"!
 
 
 	
r   c                 8    t          |j        |j                  S )N)r   r   )r   r   r   )r   r   s     r   fromKeyzEncryptionKey.fromKey  s#    IW
 
 
 	
r   N)rm   rn   ro   r   r   r   r   r   r   r   r   r  classmethodr  r   r   r   r   r     s        J9aDIIIZ$777 I

 
 
 
 
 [
 
 
r   r   c                        e Zd Z fdZ xZS )_Checksum_Fieldc                     t          t          |                               ||          }|d         j        s|S |j        j        dk    r$t          |d         j        |          |d         fS |S )Nr   r   _underlayerr   )superr  m2ir   	cksumtypeKRB_AuthenticatorChecksumr   pktsr   	__class__s       r   r  z_Checksum_Field.m2i  sl    OT**..sA661vz 	J=&&,SVZSIII3q6QQ
r   rm   rn   ro   r  __classcell__r  s   @r   r  r    s8                r   r  c                   |    e Zd Zej        Z e edded           e	ddd                    Z
d Zdd
ZddZd	S )Checksumr  r   r   r   checksumr   r   c                 F   | j         rt          | j         t                    rdS t          | j         t                    rdS t          | j         t                    rdS t          | j         t
                    rdS t          | j         t                    rdS t          d          )z.
        Get current key usage number
        r   r   r   2   r   )r   r   r   PA_FOR_USERPA_S4U_X509_USERAD_KDCIssuedr   r   r   s    r   r   zChecksum.get_usage  s    
 ? 	$/+<==  qDO[99 rDO-=>> rDO\:: rDO->?? rO
 
 	
r   Nc                 t    ||                                  }|                    ||| j        j                   dS )a"  
        Decrypt and return the data contained in cipher.

        :param key: the key to use to check the checksum
        :param text: the bytes to verify
        :param key_usage_number: (optional) specify the key usage number.
                                 Guessed otherwise
        N)r   verify_checksumr  r   )r   r   r   r   s       r   verifyzChecksum.verify  s>     ##~~//,dDM4EFFFFFr   c                     ||                                  }|p|j        | _        t          |                    ||| j                            | _        dS )a!  
        Encrypt text and set it into cipher.

        :param key: the key to use to make the checksum
        :param text: the bytes to make a checksum of
        :param key_usage_number: (optional) specify the key usage number.
                                 Guessed otherwise
        N)keyusager   r  )r   r  r   make_checksumr  )r   r   r   r   r  s        r   makezChecksum.make  s`     ##~~//"3cm#).   
 
r   Nr   )rm   rn   ro   r   r   r   r   r   _KRB_S_TYPESr  r   r   r"  r&  r   r   r   r  r    s        J		
 	
 	
 	
BT::: I
 
 
4G G G G
 
 
 
 
 
r   r  IPv4DirectionalChaosNetXNSISOzDECNET Phase IVzAppleTalk DDPNetBiosIPv6)	r   r   r   r   r   r   r   r   r   c                   f    e Zd Zej        Z e edded           e	ddd                    Z
dS )	HostAddressaddrTyper   r   r   addressr   r   N)rm   rn   ro   r   r   r   r   r   _ADDR_TYPESr   r   r   r   r   r1  r1    s]        J		
 	
 	
 	Y666 IIIr   r1  c                 *    t          | g t          fi |S r'  )r   r1  )rp   kwargss     r   <lambda>r7    s%    '8"k( (#( ( r   c                        e Zd Z fdZ xZS )_AuthorizationData_value_Fieldc                    t          t          |                               ||          }|d         j        s|S |j        j        t
          v r4t          |j        j                 |d         j        |          |d         fS |S Nr   r
  r   )r  r9  r  r   adType_AUTHORIZATIONDATA_VALUESr  s       r   r  z"_AuthorizationData_value_Field.m2i  s~    2D99==c1EE1vz 	J:>666)#*.9#a&*RUVVVA  
r   r  r  s   @r   r9  r9    s8        	 	 	 	 	 	 	 	 	r   r9  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-KDC@   zOSF-DCEA   SESAMEB   zAD-OSD-DCE-PKI-CERTID   zAD-WIN2K-PAC   zAD-ETYPE-NEGOTIATION   !KERB-AUTH-DATA-TOKEN-RESTRICTIONS   
KERB-LOCAL   zAD-AUTH-DATA-AP-OPTIONS   zKERB-AUTH-DATA-CLIENT-TARGETc                   f    e Zd Zej        Z e edded           e	ddd                    Z
dS )	AuthorizationDataItemr<  r   r   r   adDatar   r   N)rm   rn   ro   r   r   r   r   r   	_AD_TYPESr9  r   r   r   r   rL  rL  >  s^        J		
 	
 	
 	'&x$GGG IIIr   rL  c                   H    e Zd Zej        Z ed e            ge          ZdS )AuthorizationDataseqN)	rm   rn   ro   r   r   r   r   rL  r   r   r   r   rP  rP  K  s<        J!!%%''(*? IIIr   rP  c                       e Zd Zej        Z e ed e            ed           e	 e
ddd                     e	 edded	                     ed
ded                    ZdS )r  
adChecksumr   r   iRealmr   r   iSnameNr   elements   )rm   rn   ro   r   r   r   r   r   r  r    Realmr   rP  r   r   r   r   r  r  V  s        J\88::xdKKKE(BT222	
 	
 	||HdMPTUUUVVZ'8tLLL IIIr   r  c            	       f    e Zd Zej        Z e eddd           edde	d                    Z
dS )	AD_AND_ORconditionCountr   r   r   rV  Nr   )rm   rn   ro   r   r   r   r   Int32r   rP  r   r   r   r   rZ  rZ  e  sR        J555Z'8tLLL IIIr   rZ  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-FOR-USER   zPA-FOR-X509-USER   zPA-FOR-CHECK_DUPS   zPA-AS-CHECKSUM   zPA-FX-COOKIE   zPA-AUTHENTICATION-SET   zPA-AUTH-SET-SELECTED   z
PA-FX-FAST   zPA-FX-ERROR   zPA-ENCRYPTED-CHALLENGEzPA-OTP-CHALLENGEzPA-OTP-REQUESTzPA-OTP-CONFIRMzPA-OTP-PIN-CHANGE   zPA-EPAK-AS-REQ   zPA-EPAK-AS-REP   zPA-PKINIT-KX   zPA-PKU2U-NAME   zPA-REQ-ENC-PA-REP   zPA-AS-FRESHNESS   zPA-SPAKEr   zKERB-KEY-LIST-REQr   zKERB-KEY-LIST-REPzPA-SUPPORTED-ENCTYPESzPA-EXTENDED-ERRORzPA-PAC-OPTIONS)         c                   "     e Zd ZdZ fdZ x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                    t          t          |                               ||          }|j        j        t
          v rt
          |j        j                 }t          |t                    rV|j        j        d uot          |j        j        t                    p t          |j        t          t          f          }||         }|d         j        s|S  ||d         j        |          |d         fS |S r;  )r  rq  r  r   r   _PADATA_CLASSESr   tupler   	KRB_ERRORr   r   )r   r  r  r   r   is_replyr  s         r   r  z_PADATA_value_Field.m2i  s    '..223::>00!#."45C#u%% $N-T9 I"3>#<iHHK  [0IJJ  (mq6: 
3s1vzs333SV;;
r   )rm   rn   ro   __doc__r  r  r  s   @r   rq  rq    sB         
        r   rq  c                   f    e Zd Zej        Z e edded           e	ddd                    Z
dS )	r   r   r   r   r   padataValuer   r   N)rm   rn   ro   r   r   r   r   r   _PADATA_TYPESrq  r   r   r   r   r   r     s[        J<MMMM	
 	
 	
 IIIr   r   c            
           e Zd Zej        Z e ed e            d           e	 e
ddd                              ZdS )r   patimestampr   r   pausecr   r   N)rm   rn   ro   r   r   r   r   KerberosTimerG   r    Microsecondsr   r   r   r   r   r     s`        J]OO$5$5DIII||HadCCCDD IIIr   r   c            
       x    e Zd Zej        Z e edded           e	 e
ddd                              ZdS )	ETYPE_INFO_ENTRYr   r   r   r   saltr   r   N)rm   rn   ro   r   r   r   r   r   r   r    r   r   r   r   r   r  r    s`        J7CDIIIL$777	
 	
 IIIr   r  c                   H    e Zd Zej        Z ed e            ge          ZdS )
ETYPE_INFOrQ  N)	rm   rn   ro   r   r   r   r   r  r   r   r   r   r  r    s7        J!!%*:*:*<*<)=?OPPIIIr   r  c                       e Zd Zej        Z e edded           e	 e
ddd                     e	 eddd	                              Zd
S )ETYPE_INFO_ENTRY2r   r   r   r   r  r   r   	s2kparamsr   N)rm   rn   ro   r   r   r   r   r   r   r    r   r   r   r   r   r   r  r    s        J7CDIIIN62D999	
 	
 	Lbt<<<	
 	
 IIIr   r  c                   H    e Zd Zej        Z ed e            ge          ZdS )ETYPE_INFO2rQ  N)	rm   rn   ro   r   r   r   r   r  r   r   r   r   r  r    s7        J!!%*;*;*=*=)>@QRRIIIr   r  c                       e Zd Zej        Z e eddd           e e	ddd                     e e	ddd	                              Z
d
S )PA_AUTHENTICATION_SET_ELEMpaTyper   r   r   paHintr   r   paValuer   N)rm   rn   ro   r   r   r   r   r\  r    r   r   r   r   r   r  r    s        Jh---L2D999	
 	
 	LBT:::	
 	
 IIIr   r  c                   H    e Zd Zej        Z ed e            ge          ZdS )PA_AUTHENTICATION_SETelemsN)	rm   rn   ro   r   r   r   r   r  r   r   r   r   r  r    s<        J!!,,../1K IIIr   r  c                   J    e Zd Zej        Z e eddd                    ZdS )PA_PAC_REQUEST
includePacTr   r   N)	rm   rn   ro   r   r   r   r   r   r   r   r   r   r  r    s:        JlDt<<< IIIr   r  c                   p    e Zd Z edddddi           edddd	d
dddd           eddd          gZdS )LSAP_TOKEN_INFO_INTEGRITYFlagsr   r   zUAC-RestrictedTokenIL    	UntrustedLowMediumHighSystemzProtected process)r      r  i 0   @  i P  	MachineIDr       lengthN)rm   rn   ro   r)   r+   r=   fields_descr   r   r   r  r  )  s        
,		
 	
 	'!$"$/ 	
 	
 	+s2666+KKKr   r  c                        e Zd Z fdZ xZS )_KerbAdRestrictionEntry_Fieldc                     t          t          |                               ||          }|d         j        s|S |j        j        dk    r$t          |d         j        |          |d         fS |S r;  )r  r  r  r   restrictionTyper  r  s       r   r  z!_KerbAdRestrictionEntry_Field.m2iG  sn    1488<<S!DD1vz 	J"f,,,SVZSIII3q6QQ
r   r  r  s   @r   r  r  F  8                r   r  c            
           e Zd ZdZej        Z e e eddddid           e	ddd	                              Z
d
S )KERB_AD_RESTRICTION_ENTRYzKERB-AD-RESTRICTION-ENTRYr  r   r  r   r   restrictionr   r   N)rm   rn   ro   rp   r   r   r   r   r   r  r   r   r   r   r  r  P  sx        &DJ!/0!	   *)-4PPP	
 	

 
IIIr   r  c                   4    e Zd ZdZ eddddd          gZdS )KERB_AUTH_DATA_AP_OPTIONSzKERB-AUTH-DATA-AP-OPTIONS	apOptionsr  KERB_AP_OPTIONS_CBT&KERB_AP_OPTIONS_UNVERIFIED_TARGET_NAME)r  i   N)rm   rn   ro   rp   r+   r  r   r   r   r  r  f  s?        &D-@ 	
 	
	KKKr   r  c                   ,    e Zd ZdZ edd          gZdS )KERB_AUTH_DATA_CLIENT_TARGETzKERB-AD-TARGET-PRINCIPALr   r   N)rm   rn   ro   rp   r8   r  r   r   r   r  r  z  s)        %DeR  KKKr   r  c                   H    e Zd Zej        Z e edg e                    Z	dS )KERB_AD_LOGIN_ALIASloginAliasesN)
rm   rn   ro   r   r   r   r   r   r   r   r   r   r   r  r    s4        J00]SSTTIIIr   r  P   c            
       f    e Zd Z edddg dd  ed          D             z   g dz             gZdS )	PA_SUPPORTED_ENCTYPESflagsr   r  )r   r   r   r   r   c                     g | ]}d |z  S )zbit_%dr   r   is     r   r   z PA_SUPPORTED_ENCTYPES.<listcomp>  s    ///x!|///r   r   )zFAST-supportedzCompount-identity-supportedzClaims-supportedz!Resource-SID-compression-disabledN)rm   rn   ro   r)   ranger  r   r   r   r  r    sp        
   0/UU2YY///0  		
 	
KKKr   r  rm  c                   P    e Zd Zej        Z e eddg dd                    ZdS )PA_PAC_OPTIONSoptionsr   )ClaimszBranch-AwarezForward-to-Full-DC%Resource-based-constrained-delegationr   r   N)	rm   rn   ro   r   r   r   r   KerberosFlagsr   r   r   r   r  r    sT        J   
	
 
	
 
	
 IIIr   r  ro  c            	       L    e Zd Zej        Z edg  edde                    Z	dS )KERB_KEY_LIST_REQkeytypesr   r   N)
rm   rn   ro   r   r   r   r   r   r   r   r   r   r   r  r    s?        J!!
2q,// IIIr   r  c            	       L    e Zd Zej        Z edg  edde                    Z	dS )KERB_KEY_LIST_REPkeysr   N)
rm   rn   ro   r   r   r   r   r   r   r   r   r   r   r  r    s>        J!!
R}-- IIIr   r  c                   f    e Zd Zej        Z e edded           e	ddd                    Z
dS )KERB_SUPERSEDED_BY_USERrp   Nr   r   realmr   )rm   rn   ro   r   r   r   r   r   r   rX  r   r   r   r   r  r    sP        JVT=tDDDgt$/// IIIr   r  c                       e Zd Zej        Z e edg  edde	          d           e
 edg  edde	          d                     ed e            d           ed	 e            d
                    ZdS )KERB_DMSA_KEY_PACKAGEcurrentKeysr   Nr   r   previousKeysexpirationIntervalr   fetchInterval   )rm   rn   ro   r   r   r   r   r   r   r   r    r~  rG   r   r   r   r   r  r    s        JLT=11		
 	
 	
 	R}55!	  	
 	
 	)??+<+<4PPP_oo&7&7dKKK! IIIr   r  c                        e Zd Z fdZ xZS )_KrbFastArmor_value_Fieldc                     t          t          |                               ||          }|d         j        s|S |j        j        dk    r$t          |d         j        |          |d         fS |S )Nr   r   r
  )r  r  r  r   	armorTyper   r  s       r   r  z_KrbFastArmor_value_Field.m2i  sm    -t4488a@@1vz 	J=!!c!fjc:::CFBB
r   r  r  s   @r   r  r    r  r   r  c                   j    e Zd Zej        Z e eddddid           eddd                    Z	d	S )
KrbFastArmorr  r   FX_FAST_ARMOR_AP_REQUESTr   r   
armorValuer   r   N)
rm   rn   ro   r   r   r   r   r   r  r   r   r   r   r  r    sa        JQ :;$	
 	
 	
 	"!,FFF	 IIIr   r  c                       e Zd Zej        Z e e e ed e	            e	d                     ed e
            e
d           edded                              ZdS )	r   armorr   r   reqChecksumr   
encFastReqNr   )rm   rn   ro   r   r   r   r   r    r   r  r  r   r   r   r   r   r   r     s        JNWllnnlQUVVV  L

H4PPPLt]NNN	
 	
 IIIr   r   c            
       b    e Zd Zej        Z ed ed           ede	e	d                    Z
dS )PA_FX_FAST_REQUESTarmoredDatar   reqr   implicit_tagN)rm   rn   ro   r   r   r   r   r   r   r   r   r   r   r   r  r  )  L        JBU-/@tTTT IIIr   r  c            
       ^    e Zd Zej        Z e e edded                              Z	dS )KrbFastArmoredRep
encFastRepNr   r   )
rm   rn   ro   r   r   r   r   r   r   r   r   r   r   r  r  5  sK        JLt]NNN	
 	
 IIIr   r  c            
       b    e Zd Zej        Z ed ed           ede	e	d                    Z
dS )PA_FX_FAST_REPLYr  r   r  r   r  N)rm   rn   ro   r   r   r   r   r   r   r  r   r   r   r   r  r  >  r  r   r  c                       e Zd Zej        Z e ed e            d           e	ddd           e
ddd	           ed
ded           ed e            ed                    ZdS )KrbFastFinished	timestampr   r   usecr   r   crealmr   r   cnameNrW  ticketChecksumr  )rm   rn   ro   r   r   r   r   r~  rG   r  rX  r   r   r  r   r   r   r   r  r  G  s        J[//"3"3$GGGVQT222h...WdMEEE%xxzz8$OOO IIIr   r  c                       e Zd Zej        Z e ed e            ged           e	 e
dded                     e	 e
d e            ed                     ed	d
d                    ZdS )KrbFastResponsepadatar   r   stengthenKeyNr   finishedr   noncer   rW  )rm   rn   ro   r   r   r   r   r   r   r    r   r   r  r   r   r   r   r   r  r  R  s        J(VVXXJTJJJL}4PPP	
 	
 	LOO--T  	
 	

 	w--- IIIr   r  c                       e Zd Zej        Z e e eddd                     e eddd                     e eddd                              Z	d	S )
ExternalPrincipalIdentifiersubjectNamer   r   r  issuerAndSerialNumberr   subjectKeyIdentifierr   N)
rm   rn   ro   r   r   r   r   r    r   r   r   r   r   r  r  j  s        JL>>>	
 	
 	L0"4HHH	
 	
 	L/$GGG	
 	

 
IIIr   r  c                       e Zd Zej        Z e eddd           e e	d e
            ge
d                     e eddd	                              Zd
S )PA_PK_AS_REQsignedAuthpackr   r   r  trustedCertifiersr   r   kdcPkIdr   N)rm   rn   ro   r   r   r   r   r   r    r   r  r   r   r   r   r  r  y  s        J%r===#,,../+!	  	
 	
 	LBT:::	
 	
 IIIr   r  c            
       v    e Zd Zej        Z e eddd           e eddd                              Z	dS )		DHRepInfodhSignedDatar   r   r  serverDHNoncer   r   N)
rm   rn   ro   r   r   r   r   r   r    r   r   r   r   r  r    s]        J^Rd;;;L"4@@@	
 	
 IIIr   r  c                   4    e Zd Zej        Z edd          ZdS )
EncKeyPack
encKeyPackr   N)rm   rn   ro   r   r   r   r   r   r   r   r   r  r    s&        J\2..IIIr   r  c                       e Zd Zej        Z ed ed           ed e	            e	d           ed e
            e
d                    ZdS )	PA_PK_AS_REPrepr   dhInfor   r   r  r   N)rm   rn   ro   r   r   r   r   r   r   r  r  r   r   r   r   r  r    sl        JBXyy{{IDIII\::<<$OOO	 IIIr   r  c            
           e Zd Zej        Z e ed e            ed           e	ddd           ed e
            e
d           ed	d
d                    ZdS )r  userNamer   r   	userRealmr   r   cksumr   authPackagerZ   rW  N)rm   rn   ro   r   r   r   r   r   r   rX  r  r   r   r   r   r   r  r    s        JZ-dSSSk2D111Whhjj(FFF}jtDDD	 IIIr   r  c                       e Zd Zej        Z e eddd           e e	dde
d                     edd	d
           e eddd                     e edd	g dd                              ZdS )	S4UUserIDr  r   r   r   r  Nr   r  r   r   subjectCertificaterW  r  )reserved!KDC_CHECK_LOGON_HOUR_RESTRICTIONSKDC_KEY_USAGE_27r  )rm   rn   ro   r   r   r   r   r   r    r   r   rX  r   r   r   r   r   r   r  r    s        Jw---L$DIII	
 	
 	h...L-t$GGG	
 	
 	K  
 "	 	 		
 	
 IIIr   r  c            	           e Zd Zej        Z e ed e            ed           ed e	            e	d                    Z
dS )r  userIdr   r   r  r   N)rm   rn   ro   r   r   r   r   r   r  r  r   r   r   r   r  r    s^        JXyy{{IDIIIZXDIII IIIr   r  rr   rs   rt   zAS-REQzAS-REPzTGS-REQzTGS-REPzAP-REQzAP-REPzKRB-TGT-REQzKRB-TGT-REPzKRB-SAFE   zKRB-PRIV   zKRB-CREDr   r}   r   r~      r   r   EnvKrbCredPartz	KRB-ERROR)         c                       e Zd Zej        Z e e eddd           eddd           e	d e
            e
d	           e	d
 e            ed                    ej                  Zd ZdS )r   tktVnor   r   r   r  r   r   snamer   encPartrW  r  c                     d                     d | j        j        D                       d| j        j                                        S )Nr   c              3   H   K   | ]}|j                                         V  d S r'  r   decoder   s     r   	<genexpr>z$KRB_Ticket.getSPN.<locals>.<genexpr>  s,      CCQU\\^^CCCCCCr   @)joinr'  r   r  r   r,  r  s    r   getSPNzKRB_Ticket.getSPN  sK    HHCCTZ-BCCCCCCCJN!!###
 	
r   N)rm   rn   ro   r   r   r   r   r   rX  r   r   r   rY   rr   r   r0  r   r   r   r   r     s        JM(AD999E'2D111L--//=tTTTLMMOO]QUVVV		
 	
 $*  I
 
 
 
 
r   r   c                   d    e Zd Zej        Z e eddd           eddd                    Z	dS )	TransitedEncodingtrTyper   r   r   contentsr   r   N)
rm   rn   ro   r   r   r   r   r\  r   r   r   r   r   r2  r2    sN        Jh---Z$777 IIIr   r2  )r  forwardable	forwarded	proxiableproxyzmay-postdate	postdatedinvalid	renewableinitialzpre-authentz
hw-authentztransited-since-policy-checkedzok-as-delegateunusedcanonicalize	anonymousc                   .   e Zd Zej        Z e e edded           e	d e
            e
d           eddd           e	d	 e            ed
           e	d e            ed           ed e            d           e ed e            d                     ed e            d           e ed e            d                     e edd                     e e	dded                              ej                  ZdS )rt   r  r   r   r   r   r   r  r   r  rW  	transitedr  authtimerm  	starttimern  endtimero  	renewTill   	addresses   authorizationDataN   r  )rm   rn   ro   r   r   r   r   r  _TICKET_FLAGSr   r   rX  r   r2  r~  rG   r    HostAddressesrP  rY   rt   r   r   r   r   rt   rt   1  s       JM!	   LTRRRE(BT222L--//=tTTTL..002CRV   L__%6%6TJJJN[//*;*;$OOO  LOO$5$5DIIIN[//*;*;$OOO  Nk===  N'/@t   1	
 	
< $1?     IIIr   c                   L   e Zd Zej        Z e eddg dd  edd          D             z   g dz   d	           e	 e
d
ded	                     eddd	           e	 e
dded	                     e	 eddd	                     ed e            d	           e	 ed e            d	                     eddd	           edg ed	           e	 edd	                     e	 e
dded	                     e	 ed g ed!	                              ZdS )"KRB_KDC_REQ_BODY
kdcOptionsr   )r  r5  r6  r7  r8  zallow-postdater9  unused7r;  unused9unused10zopt-hardware-authunused12unused13zcname-in-addl-tktr>  zrequest-anonymousc                     g | ]}d |z  S )zunused%dr   r  s     r   r   zKRB_KDC_REQ_BODY.<listcomp>r  s    555!zA~555r   r   r   )zdisable-transited-checkzrenewable-okzenc-tkt-in-skeyunused29renewvalidater   r   r  Nr   r  r   r'  rW  from_r  tillrm  rtimern  r  r   ro  r   rF  rG  rH  encAuthorizationDatarJ  additionalTickets   )rm   rn   ro   r   r   r   r   r  r  r    r   r   rX  r~  rG   r   r   r\  rL  r   r   r   r   r   r   rN  rN  Y  s       J  & 65uuR}}555'6(  )8 ? 	
  	
  	
B 	||GT=tTTTUUgr---L$DIII	
 	
 	||GTEEEFFV__..TBBB||G__->->TRRRSSw---'2u4@@@M+D999	
 	
 	L&m$  	
 	

 	12zPTUUU	
 	
i7 7IIIr   rN  pvnor   msgTyper  rW  reqBodyr  c                       e Zd Zej        Z e eddddgd  edd          D             z   dgz   d	
           e	d e
            ge
d
           edded
                    ZdS )r   fastOptionsr   RESERVEDzhide-client-namesc                     g | ]}d |z  S )zres%dr   r  s     r   r   zKrbFastReq.<listcomp>  s    111qw{111r   r   r   zkdc-follow-referralsr   r   r  r   ra  Nr   )rm   rn   ro   r   r   r   r   r  r  r   r   r   rN  r   r   r   r   r   r     s        J# 21EE!RLL111	2
 &&' 
	
 
	
 
	
 	(VVXXJTJJJY&6TJJJ IIIr   r   c                   @    e Zd Zej        Z eeej	                  Z
dS )
KRB_AS_REQr  N)rm   rn   ro   r   r   r   r   KRB_KDC_REQrY   ru   r   r   r   r   rg  rg    4        J#*  IIIr   rg  c                   V    e Zd Zej        Z eeej	                  Z
 ed          ZdS )KRB_TGS_REQr  r   N)rm   rn   ro   r   r   r   r   rh  rY   rw   r   r   r`  r   r   r   rk  rk    sE        J#+  I l2GGGr   rk  r   r  r   r  ticketr(  rn  c                   @    e Zd Zej        Z eeej	                  Z
dS )r   r  N)rm   rn   ro   r   r   r   r   KRB_KDC_REPrY   rv   r   r   r   r   r   r     ri  r   r   c                   @    e Zd Zej        Z eeej	                  Z
dS )r   r  N)rm   rn   ro   r   r   r   r   rn  rY   rx   r   r   r   r   r   r     s4        J#+  IIIr   r   c                   t    e Zd Zej        Z e eddd           ed e	            d                    Z
dS )LastReqItemlrTyper   r   r   lrValuer   N)rm   rn   ro   r   r   r   r   r\  r~  rG   r   r   r   r   rq  rq    sV        Jh---Y 1 1EEE IIIr   rq  r   lastReqr  keyExpirationr  rB  rC  rD  rE  rF  srealmrH  r'  rJ  caddrr^  encryptedPaData   c                   @    e Zd Zej        Z eeej	                  Z
dS )r}   r  N)rm   rn   ro   r   r   r   r   EncKDCRepPartrY   r}   r   r   r   r   r}   r}   
  s4        J#0  IIIr   c                   @    e Zd Zej        Z eeej	                  Z
dS )r~   r  N)rm   rn   ro   r   r   r   r   r{  rY   r~   r   r   r   r   r~   r~     s4        J#1  IIIr   c                       e Zd Zej        Z e e eddd           edde	d           e
dd	g d
d           edded           edded                    ej                  ZdS )r   r_  r   r   r   r`  r   r   r  r   )r  zuse-session-keyzmutual-requiredr   rl  NrW  authenticatorr  r  )rm   rn   ro   r   r   r   r   r   r   KRB_MSG_TYPESr  r   r   r   rY   ry   r   r   r   r   r   r     s        JM&!$777y"m$OOOM  
 "	 	 	 L4$GGGL$DQQQ	
 	
  $*#  IIIr   r   c                      e Zd Zej        Z e e eddd           eddd           e	dd	e
d
           e e	dd	ed                     eddd           ed e            d           e e	dd	ed                     e eddd                     e e	dd	ed                    	  	        ej                  Zd	S )r   authenticatorPvnor   r   r   r  r   r   r  Nr   r  rW  cusecr   r  ctimerm  subkeyrn  	seqNumberro  r\  rF  r  )rm   rn   ro   r   r   r   r   r   rX  r   r   r    r  r  r~  rG   r   r   rP  rY   rs   r   r   r   r   r   r   7  sR       JM-qtDDDE(BT222L$DIIINWdH4HHH  L!$777L//"3"3$GGGNXt]NNN  N{AD999  N*D2CRV   	
 	
* $1-  IIIr   r   c                       e Zd Zej        Z e e eddd           edde	d           e
dd	ed
                    ej                  Zd	S )r   r_  r   r   r   r`  r   r   r(  Nr   r  )rm   rn   ro   r   r   r   r   r   r   r  r   r   rY   rz   r   r   r   r   r   r   V  s        JM&!$777y"m$OOOLD-dKKK	
 	

 $*  IIIr   r   c                       e Zd Zej        Z e e ed e            d           e	ddd           e
 edded	                     e
 ed
dd                              ej                  ZdS )r   r  r   r   r  r   r   r  Nr   r  rW  r  )rm   rn   ro   r   r   r   r   r~  rG   r  r    r   r   r   rY   r   r   r   r   r   r   r   b  s        JL//"3"3$GGGL!$777NXt]NNN  N{AD999 		
 		
 $0  IIIr   c                       e Zd Zej        Z e e eddd           edde	d           e
dd	ed
                    ej                  Zd	S )r   r_  r   r   r   r`  r  r   r(  NrW  r  )rm   rn   ro   r   r   r   r   r   r   r  r   r   rY   r{   r   r   r   r   r   r   v  s        JM&!$777y"m$OOOLD-dKKK	
 	

 $(  IIIr   r   c                   J   e Zd Zej        Z e e ed ed          d           e	 e
ddd                     e	 eddd	                     e	 ed
dd                     edded           e	 edded                              ej                  ZdS )r   userDatar   r   r   r  Nr   r  r   r  rW  sAddressr  cAddressrm  r  )rm   rn   ro   r   r   r   r   r   r   r    r~  r  r   r   r1  rY   r   r   r   r   r   r   r     s       JL[[__4HHHN[$TBBB  NVT===  N{Dt<<<  LT;TJJJNZ{NNN 	
 	
  $2#  IIIr   c                       e Zd Zej        Z e e eddd           edde	d           e
d e            ged	           ed
ded                    ej                  ZdS )r   r_  r   r   r   r`  r  r   ticketsr   r(  NrW  r  )rm   rn   ro   r   r   r   r   r   r   r  r   r   r   r   rY   r|   r   r   r   r   r   r     s        JM&!$777y"m$OOOi**,,RVWWWLD-dKKK		
 	
 $(  IIIr   r   c                      e Zd Zej        Z e ed e            ed           e	 e
ddd                     e	 edded                     e	 ed	ded
                     e	 eddd                     e	 eddd                     e	 eddd                     e	 eddd                     e	 e
ddd                     e	 edded                     e	 edd                              ZdS )KrbCredInfor   r   r   prealmNr   pnamer   r  rW  rB  r  rC  rm  rD  rn  rE  ro  rv  rF  r'  rH  rw  rJ  )rm   rn   ro   r   r   r   r   r   r   r    rX  r   r  rK  r~  rL  r   r   r   r   r  r    s       JUMMOO]NNNE(Dt444	
 	
 	L$DIII	
 	
 	M!	  	
 	
 	LT===	
 	
 	||KDIIIJJLDt<<<	
 	
 	Ld>>>	
 	
 	E(Dt444	
 	
 	L$DIII	
 	
 	M'555	
 	
A# #IIIr   r  c                   ^   e Zd Zej        Z e e ed e            ged           e	 e
ddd                     e	 eddd                     e	 ed	dd
                     e	 edded                     e	 edded                              ej                  ZdS )r   
ticketInfor   r   r  Nr   r  r   r  rW  r  r  r  rm  r  )rm   rn   ro   r   r   r   r   r   r  r    r   r~  r  r   r1  rY   r   r   r   r   r   r   r     s(       J!	   Nw4888  N[$TBBB  NVT===  NZ{NNN  NZ{NNN '	
 	
. $21  IIIr   r   c                   H    e Zd Zej        Z ed e            ge          ZdS )
MethodDatarQ  N)	rm   rn   ro   r   r   r   r   r   r   r   r   r   r  r    s1        J!!%&&((V<<IIIr   r  c                        e Zd Z fdZ xZS )_KRBERROR_data_Fieldc                    t          t          |                               ||          }|d         j        s|S |j        j        dv r$t          |d         j        |          |d         fS |j        j        dv r$t          |d         j        |          |d         fS |j        j        dk    r$t          |d         j        |          |d         fS |S )Nr   )r   r   r   r
  r   )r   r   r   r   r#  )   <   E   )r  r  r  r   	errorCoder  KERB_ERROR_DATAKRB_TGT_REPr  s       r   r  z_KRBERROR_data_Field.m2i  s    ($//33C;;1vz 	J=,, c!fjc:::CFBB]"<<< #3q6:3???QGG]"$$s1vzs;;;SVCC
r   r  r  s   @r   r  r    s8                r   r  c                      e Zd Zej        Z e e eddd           edde	d           e
 edd	d
                     e
 edd	d                     ed e            d           eddd           eddi 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/d0d1d2i d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTi dUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvi dwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddd           e
 edd	d                     e
 edd	ed                     eddd           ed e            ed           e
 eddd                     e
 eddd                              ej                  Zd	S )ru  r_  r   r   r   r`  r$  r   r  Nr   r  rW  stimer  susecr   rm  r  KDC_ERR_NONEr   KDC_ERR_NAME_EXPr   KDC_ERR_SERVICE_EXPr   KDC_ERR_BAD_PVNOr   KDC_ERR_C_OLD_MAST_KVNOKDC_ERR_S_OLD_MAST_KVNOr   KDC_ERR_C_PRINCIPAL_UNKNOWNr   KDC_ERR_S_PRINCIPAL_UNKNOWNr   KDC_ERR_PRINCIPAL_NOT_UNIQUEr   KDC_ERR_NULL_KEYr   KDC_ERR_CANNOT_POSTDATEr   KDC_ERR_NEVER_VALIDr   KDC_ERR_POLICYr   KDC_ERR_BADOPTIONr   KDC_ERR_ETYPE_NOSUPPr   KDC_ERR_SUMTYPE_NOSUPPr   KDC_ERR_PADATA_TYPE_NOSUPPr   KDC_ERR_TRTYPE_NOSUPPr   KDC_ERR_CLIENT_REVOKEDr   KDC_ERR_SERVICE_REVOKEDr   KDC_ERR_TGT_REVOKEDr  KDC_ERR_CLIENT_NOTYETr  KDC_ERR_SERVICE_NOTYETr   KDC_ERR_KEY_EXPIREDr   KDC_ERR_PREAUTH_FAILEDr   KDC_ERR_PREAUTH_REQUIREDr   KDC_ERR_SERVER_NOMATCHr   KDC_ERR_MUST_USE_USER2USERr"  KDC_ERR_PATH_NOT_ACCEPTEDr#  KDC_ERR_SVC_UNAVAILABLE   KRB_AP_ERR_BAD_INTEGRITYr  KRB_AP_ERR_TKT_EXPIRED!   KRB_AP_ERR_TKT_NYV"   KRB_AP_ERR_REPEAT#   KRB_AP_ERR_NOT_US$   KRB_AP_ERR_BADMATCH%   KRB_AP_ERR_SKEW&   KRB_AP_ERR_BADADDR'   KRB_AP_ERR_BADVERSION(   KRB_AP_ERR_MSG_TYPEr  KRB_AP_ERR_MODIFIED*   KRB_AP_ERR_BADORDER,   KRB_AP_ERR_BADKEYVER-   KRB_AP_ERR_NOKEY.   KRB_AP_ERR_MUT_FAIL/   KRB_AP_ERR_BADDIRECTION0   KRB_AP_ERR_METHOD1   KRB_AP_ERR_BADSEQr  KRB_AP_ERR_INAPP_CKSUMr   KRB_AP_PATH_NOT_ACCEPTED4   KRB_ERR_RESPONSE_TOO_BIGr  KRB_ERR_GENERIC=   KRB_ERR_FIELD_TOOLONG>   KDC_ERROR_CLIENT_NOT_TRUSTED?   KDC_ERROR_KDC_NOT_TRUSTEDr?  KDC_ERROR_INVALID_SIGr@  KDC_ERR_KEY_TOO_WEAKrB  KDC_ERR_CERTIFICATE_MISMATCHC   KRB_AP_ERR_NO_TGTD   KDC_ERR_WRONG_REALMr   KRB_AP_ERR_USER_TO_USER_REQUIREDF   KDC_ERR_CANT_VERIFY_CERTIFICATEG   KDC_ERR_INVALID_CERTIFICATEH   KDC_ERR_REVOKED_CERTIFICATEI   !KDC_ERR_REVOCATION_STATUS_UNKNOWNJ   %KDC_ERR_REVOCATION_STATUS_UNAVAILABLEK   KDC_ERR_CLIENT_NAME_MISMATCHL   KDC_ERR_KDC_NAME_MISMATCHKRB_AP_ERR_IAKERB_KDC_NOT_FOUND!KRB_AP_ERR_IAKERB_KDC_NO_RESPONSEKDC_ERR_PREAUTH_EXPIRED"KDC_ERR_MORE_PREAUTH_DATA_REQUIRED&KDC_ERR_PREAUTH_BAD_AUTHENTICATION_SET%KDC_ERR_UNKNOWN_CRITICAL_FAST_OPTIONS)U   V   Z   [   \   ]   rn  r  ro  r  rF  r  r   rH  r'  rJ  eTextr^  eDatary  r  )rm   rn   ro   r   r   r   r   r   r   r  r    r~  r  rG   rX  r   r   r   r  rY   r   r   r   r   r   ru  ru    s       JM&!$777y"m$OOONWd>>>  NWd>>>  L//"3"3$GGGL!$777N~N )N ,	N
 )N 0N 0N 4N 4N 5N )N 1N -N (N +N  .!N" 0#N$ 4%N N& /'N( 0)N* 1+N, --N. //N0 01N2 -3N4 05N6 27N8 09N: 4;N< 3=N> 1?N@ 2ANB 0CND ,ENF +GN N NH +INJ -KNL )MNN ,ONP /QNR -SNT -UNV -WNX .YNZ *[N\ -]N^ 1_N` +aNb +cNd 0eNf 2gNh 2iN N Nj )kNl /mNn 6oNp 3qNr /sNt .uNv 6wNx +yNz -{N| :}N~ 9N@ 5ANB 5CND ;ENF ?GNH 6INJ 3KN NN :;1<@?[N N N^ "eS S Sh N554dCCCDDNWdMMMM  E'2D111L--//=tTTTN>>'2DIIIJJN//$OOOPPMg	
 g	
P $)Sj j jIIIr   ru  c                   T    e Zd Z edd           edd           edd          gZdS )KERB_EXT_ERRORstatusr   r  r  r   N)rm   rn   ro   r;   r  r   r   r   r  r    sB        Ha  J""GZ((KKKr   r  c                        e Zd Z fdZ xZS )_Error_Fieldc                     t          t          |                               ||          }|d         j        s|S |j        j        dk    r$t          |d         j        |          |d         fS |S )Nr   r   r
  r   )r  r  r  r   dataTyper  r  s       r   r  z_Error_Field.m2i  sl    L$''++C331vz 	J<q  !#a&*#>>>AFF
r   r  r  s   @r   r  r    r  r   r  c            
           e Zd Zej        Z e eddddddd           e e	d	d
d                              Z
d
S )r  r  r   KERB_AP_ERR_TYPE_NTSTATUSKERB_AP_ERR_TYPE_SKEW_RECOVERYKERB_ERR_TYPE_EXTENDED)r   r   r   r   r   	dataValueNr   )rm   rn   ro   r   r   r   r   r   r    r  r   r   r   r   r  r    sy        J.3+ 
 		
 		
 		
 	||KDIIIJJ IIIr   r  c                       e Zd Zej        Z e eddd           edde	d           e
 edd	ed
                     e
 edd	d                              Zd	S )KRB_TGT_REQr_  r   r   r   r`  r   r   r'  Nr   r  rW  )rm   rn   ro   r   r   r   r   r   r   r  r    r   r   rX  r   r   r   r   r  r    s        Jfad3339b-dKKKL$DIII	
 	
 	E'4d333	
 	
	 	IIIr   r  c            
           e Zd Zej        Z e eddd           edde	d           e
dd	ed
                    Zd	S )r  r_  r   r   r   r`  r   r   rl  Nr   )rm   rn   ro   r   r   r   r   r   r   r  r   r   r   r   r   r   r  r    sg        Jfad3339b-dKKKXtZdCCC IIIr   r  c                   \    e Zd Zej        Z e ed e            ed                    Z	dS )KRB_FINISHEDgssMicr   r   N)
rm   rn   ro   r   r   r   r   r   r  r   r   r   r   r"  r"    sB        JXxxzz8$GGG IIIr   r"  c            
           e Zd Z edddddd           eddd	d
           e ed	 e            e          d fg ed	dd                     gZ	dS )KRB_GSS_EXTtyper   GSS_EXTS_CHANNEL_BINDINGGSS_EXTS_IAKERB_FINISHEDGSS_EXTS_FINISHED)r   r   r   r  Ndata!I	length_offmtc                     | j         dk    S )Nr   )r&  r  s    r   r7  zKRB_GSS_EXT.<lambda>  s    J 6 r   r   c                     | j         S r'  r  r0  s    r   r7  zKRB_GSS_EXT.<lambda>  s    cj r   length_from)
rm   rn   ro   r*   r(   r0   r1   r"  r>   r  r   r   r   r%  r%    s         76/	 		
 		
 	hDAAA  KEE66 L2H2HIII	
 	
KKKr   r%  c                   R   e Zd Z edddd           ed e            ed            edd	d
dddddddddd	           e edd	          d            e eddd          d            e ed e	            e	d           d            e
d e            e          gZdS )r  LgthNBnd<Ir,  c                     | j         S r'  )r5  r0  s    r   r7  z"KRB_AuthenticatorChecksum.<lambda>  s    CH r   r2  r  r   r  GSS_C_DELEG_FLAGGSS_C_MUTUAL_FLAGGSS_C_REPLAY_FLAGGSS_C_SEQUENCE_FLAGGSS_C_CONF_FLAGGSS_C_INTEG_FLAGGSS_C_DCE_STYLEGSS_C_IDENTIFY_FLAGGSS_C_EXTENDED_ERROR_FLAG)	r   r   r   r   r   r  r  r  r  DlgOptc                     | j         j        S r'  r  r9  r0  s    r   r7  z"KRB_AuthenticatorChecksum.<lambda>      	2 r   DlgthDeleg)r-  c                     | j         j        S r'  rD  r0  s    r   r7  z"KRB_AuthenticatorChecksum.<lambda>  rE  r   c                     | j         S r'  )rF  r0  s    r   r7  z"KRB_AuthenticatorChecksum.<lambda>  s    sy r   c                     | j         j        S r'  rD  r0  s    r   r7  z"KRB_AuthenticatorChecksum.<lambda>  rE  r   Exts)rm   rn   ro   r(   r2   rQ   r)   r'   r.   r   r3   r%  r  r   r   r   r  r    sD       fde>>>  ,,		
 	
 	
 	
())+'()-3 		
 	
" 	L1%%22	
 	
 	M'47;;;22	
 	
 	NX;P;P   32		
 	
 	{;;Q)KKKr   r  z
KRB-AP-REQz
KRB-AP-REPzGSS_GetMIC-RFC1964zGSS_Wrap-RFC1964zGSS_Delete_sec_context-RFC1964
GSS_GetMICGSS_WrapIAKERB_PROXY)                                     zDES MAC MD5zMD2.5zDES MACHMAC)r   r   r   r   DESnoneRC4)r     r   c                       e Zd ZdZ edded           ed e            d           gZd Z	d	 Z
edd            Zd
S )KRB_InnerTokenzKerberos v5 InnerTokenTOK_IDrO  r   r  rootc                 6    t          |j                 |           S r'  )_InitialContextTokensra  )r   _parents     r   r7  zKRB_InnerToken.<lambda>G  s    4W^DQGG r   c           	          |                      dt                              | j        t	          | j                            z            S )NzKerberos %s)sprintf_TOK_IDSgetra  reprr  s    r   	mysummaryzKRB_InnerToken.mysummaryK  s:    ||HLLd4;6G6GHHH
 
 	
r   c                 :    | j         dv rt          j        S t          S )N)rR  rS  rW  rX  )ra  r$   padding_layerrZ   r   payloads     r   guess_payload_classz"KRB_InnerToken.guess_payload_classP  s    ;NNN%%r   Nc                 Z    |r(t          |          dk    r|dd         dk    rt          S | S )Nr   r   s   	*H)lenKRB_GSSAPI_Token)r   _pktargskargss       r   dispatch_hookzKRB_InnerToken.dispatch_hookU  s7     	(CIIOOAbDzDDD''
r   r'  )rm   rn   ro   rp   r9   rh  r1   r   r  rk  rp  r  rw  r   r   r   r`  r`  @  s        #DX{HQGGGJLLGG	
 	
K
 
 

  
    [  r   r`  c            	           e Zd ZdZej        Z e edd           e	d e
            e
d          ej                  ZdS )rs  zKerberos GSSAPI-TokenMechType1.2.840.113554.1.2.2
innerTokenr   r  N)rm   rn   ro   rp   r   r   r   r   r   r   r`  rY   rq   r   r   r   r   rs  rs  a  sp        "DJ	*455N		
 	
 	
 $)	 	 	IIIr   rs  c            
           e Zd ZdZ edde           edd           eddd	           e ed
dd	          dd          gZ	d Z
dS )KRB_GSS_MIC_RFC1964zKerberos v5 MIC Token (RFC1964)SGN_ALGr   Fillerl    SND_SEQr   r   r  	SGN_CKSUM   alignpadwithc                     t           j        S r'  r$   rm  rn  s     r   default_payload_classz)KRB_GSS_MIC_RFC1964.default_payload_class      !!r   N)rm   rn   ro   rp   r-   	_SGN_ALGSr;   r=   r4   r  r  r   r   r   r}  r}  s  s        ,DAy11Hj)))S333k3q999	
 	
 	
		K" " " " "r   r}  rR  c                       e Zd ZdZ edde           edde           edd           eddd	
           e	 eddd	
          d	d           eddd	
          gZ
d ZdS )KRB_GSS_Wrap_RFC1964zKerberos v5 GSS_Wrap (RFC1964)r~  r   SEAL_ALGr  r^  r  r   r   r  r  r  r  
CONFOUNDERc                     t           j        S r'  r  rn  s     r   r  z*KRB_GSS_Wrap_RFC1964.default_payload_class  r  r   N)rm   rn   ro   rp   r-   r  
_SEAL_ALGSr<   r=   r4   r  r  r   r   r   r  r    s        +DAy11Q
33h'')S333k3q999	
 	
 	
 	,A666K" " " " "r   r  rS  c                        e Zd ZdZej        ZdS )"KRB_GSS_Delete_sec_context_RFC1964z,Kerberos v5 GSS_Delete_sec_context (RFC1964)N)rm   rn   ro   rp   r}  r  r   r   r   r  r    s        9D%1KKKr   r  rT  )SentByAcceptorSealedAcceptorSubkeyc                   |    e Zd ZdZ eddde           eddd           ed	d           ed
d          gZ	d Z
dS )KRB_GSS_MICzKerberos v5 MIC Tokenr  r   r   r  s   r   r  r  r  s               c                     t           j        S r'  r  rn  s     r   r  z!KRB_GSS_MIC.default_payload_class  r  r   N)rm   rn   ro   rp   r)   _KRB5_GSS_Flagsr=   r/   r?   r  r  r   r   r   r  r    sv        "D
7Aq/22($;AFFF	)Q	+|,,	K" " " " "r   r  rW  c                       e Zd ZdZ eddde           edd           edd           edd           ed	d           e	 e
d
d          d fg ed
dd                     gZd ZdS )KRB_GSS_WrapzKerberos v5 Wrap Tokenr  r   r   r     ECRRCr  Datar   c                     | j         j        S r'  )r  r  r0  s    r   r7  zKRB_GSS_Wrap.<lambda>  s    	 0 r   c                     | j         S r'  )r  r0  s    r   r7  zKRB_GSS_Wrap.<lambda>  s    cf r   r2  c                     t           j        S r'  r  rn  s     r   r  z"KRB_GSS_Wrap.default_payload_class  r  r   N)rm   rn   ro   rp   r)   r  r:   r6   r/   r0   r?   r>   r  r  r   r   r   r  r    s        #D
7Aq/22
8T""
4
5!	)Q Ifc**00 L2D2DEEE	
 	
K"" " " " "r   r  rX  c            
       v    e Zd Zej        Z e eddd           e e	ddd                              Z
dS )IAKERB_HEADERtargetRealmr   r   r   cookieNr   )rm   rn   ro   r   r   r   r   rX  r    r   r   r   r   r   r  r    s]        JmRd333L4d;;;	
 	
 IIIr   r  rY  rz  1.2.840.113554.1.2.2.3z1.3.6.1.5.2.5c                   N    e Zd Zej        Z eddeee	e
eeeeee          Zd ZdS )rZ   rb  Nc                 4    | j                                         S r'  )rb  summaryr  s    r   rk  zKerberos.mysummary	  s    y  """r   )rm   rn   ro   r   r   r   r   rs  r   r   rg  r   rk  r   r   r   ru  r   rk  r   r   r   rZ   rZ   	  s_        J I"# # # # #r   rZ   X   )sport)dport)r  r  rO  rP  rQ  rU  rV  c                   B    e Zd Z eddd          gZed             ZdS )KerberosTCPHeaderrr  Nr+  r.  c                     t          |          dk     rd S t          j        d|d d                   d         }t          |          |dz   k    r | |          S d S Nr   r+  r   rr  structunpackr   r*  ru  r6  r  s        r   tcp_reassemblez KerberosTCPHeader.tcp_reassemble.	  _    t99q==4tT"1"X..q1t99
""3t99 #"r   rm   rn   ro   r,   r  r  r  r   r   r   r  r  (	  sH         8E4T2223K  [  r   r  c                      e Zd Z edd           edd           edd           ed e            ed            e ed	 e            ed
           d            e ed e            ed           d           gZ	d Z
dS )KPASSWD_REQrr  Nr_    apreqlenapreqc                     | j         S r'  r  r0  s    r   r7  zKPASSWD_REQ.<lambda>F	      s| r   r2  krbprivc                 &    | j         dz
  | j        z
  S Nr   )rr  r  r0  s    r   r7  zKPASSWD_REQ.<lambda>M	      !cl(B r   c                     | j         dk    S Nr   r  r0  s    r   r7  zKPASSWD_REQ.<lambda>O	      ) r   errorc                     | j         dz
  S r  rr  r0  s    r   r7  zKPASSWD_REQ.<lambda>S	      ST r   c                     | j         dk    S r  r  r0  s    r   r7  zKPASSWD_REQ.<lambda>U	  r  r   c                 
   | j         -t          j        dt          |                    |dd          z   }| j        D| j        =|d d         t          j        dt          | j                            z   |dd          z   }||z   S Nz!Hr   r   r   )rr  r  packr  r  r  r   ppays      r   
post_buildzKPASSWD_REQ.post_buildY	  y    8D#a&&))AabbE1A= T\%="1"D#dj//:::QqrrUBA3wr   )rm   rn   ro   r6   r2   r   r'   r   ru  r  r  r   r   r   r  r  @	  s       
5$
66""
:t$$ZZ\\:;S;S	
 	
 	
 	N

BB	   *)	
 	
 	Ni=T=T   *)		
 	
!K0    r   r  c                       e Zd Zej        Z e ed ed          d           e	 e
dded                     e	 eddd	                              ZdS )
ChangePasswdData	newpasswdr   r   r   targnameNr   	targrealmr   )rm   rn   ro   r   r   r   r   r   r   r    r   r   rX  r   r   r   r   r  r  a	  s        J[++b//EEELT=tLLL	
 	
 	uu[$TBBBCC IIIr   r  c                      e Zd Z edd           edd           edd           ed e            ed            e ed	 e            ed
           d            e ed e            ed           d           gZ	d Z
d ZdS )KPASSWD_REPrr  Nr_  r   apreplenaprepc                     | j         S r'  r  r0  s    r   r7  zKPASSWD_REP.<lambda>r	  r  r   r2  r  c                 &    | j         dz
  | j        z
  S r  )rr  r  r0  s    r   r7  zKPASSWD_REP.<lambda>y	  r  r   c                     | j         dk    S r  r  r0  s    r   r7  zKPASSWD_REP.<lambda>{	  r  r   r  c                     | j         dz
  S r  r  r0  s    r   r7  zKPASSWD_REP.<lambda>	  r  r   c                     | j         dk    S r  r  r0  s    r   r7  zKPASSWD_REP.<lambda>	  r  r   c                 
   | j         -t          j        dt          |                    |dd          z   }| j        D| j        =|d d         t          j        dt          | j                            z   |dd          z   }||z   S r  )rr  r  r  r  r  r  r  s      r   r  zKPASSWD_REP.post_build	  r  r   c                 ,    t          |t                    S r'  )r   r  )r   others     r   answerszKPASSWD_REP.answers	  s    %---r   )rm   rn   ro   r6   r2   r   r'   r   ru  r  r  r  r   r   r   r  r  l	  s       
5$
66""
:t$$ZZ\\:;S;S	
 	
 	
 	N

BB	   *)	
 	
 	Ni=T=T   *)		
 	
!K0  . . . . .r   r  KRB5_KPASSWD_SUCCESSKRB5_KPASSWD_MALFORMEDKRB5_KPASSWD_HARDERRORKRB5_KPASSWD_AUTHERRORKRB5_KPASSWD_SOFTERRORKRB5_KPASSWD_ACCESSDENIEDKRB5_KPASSWD_BAD_VERSION KRB5_KPASSWD_INITIAL_FLAG_NEEDED)r   r   r   r   r   r   r   r   c                   @    e Zd Z edde           edd          gZdS )KPasswdRepData
resultCoder   resultStringr   N)rm   rn   ro   r5   KPASSWD_RESULTSr7   r  r   r   r   r  r  	  s5        |Q88$$KKKr   r  c                   &    e Zd Zedd            ZdS )KpasswdNc                     |rpt          |          dk    r]|dd         dk    rt          S |dd         dk    r:t          |dd                   d         dz  }|d	k    rt          S |d
k    rt          S t          S )Nr   r   s   s    r   r   r   r  r   r   )rr  r  r	   r  )r   rt  ru  rv  asn1_tags        r   rw  zKpasswd.dispatch_hook	  s     	'CIINNAaCyK''""ack))%d1Q3i003d:r>>&&^^&&r   r'  )rm   rn   ro   r  rw  r   r   r   r  r  	  s2        
 
 
 [
 
 
r   r    c                   B    e Zd Z eddd          gZed             ZdS )KpasswdTCPHeaderrr  Nr+  r  c                     t          |          dk     rd S t          j        d|d d                   d         }t          |          |dz   k    r | |          S d S r  r  r  s        r   r  zKpasswdTCPHeader.tcp_reassemble	  r  r   r  r   r   r   r  r  	  sF        8E4T2223K  [  r   r  c                       e Zd Z edg d          Z edg d          Z G d de          Zej        ddddddddg dddddd	d
f fd	Z	d Z
 fdZd Zd Zd Z ej        d          d             Z ej        e          d             Z ej        e          d             Z ej        e          d             Z ej        e          d             Z ej                    d             Z ej                    d             Zd Z ej        ed          d             Z ej        ed          d             Z ej        ed          d              Z ej        e          d!             Z  ej        e          d"             Z! ej        e          d#             Z" ej        e          d$             Z# ej        e#          d%             Z$ ej        d&          d'             Z% xZ&S )(KerberosClient	AS_Result)asrep
sessionkeykdcrep
TGS_Result)tgsrepr  r  c                       e Zd ZdZdZdZdS )KerberosClient.MODEr   r   r   N)rm   rn   ro   ru   rw   GET_SALTr   r   r   MODEr  	  s        r   r	  NFr  r   c           
      <   dd l }ddlm} |st          d          |st          d          ||| j        j        | j        j        fv rt          |          \  }}nT|| j        j        k    r5t          |          \  }}|s |r|j
        j                                        }nt          d          || j        j        | j        j        fv r|st          d          n!|| j        j        k    r|st          d          |s) |||d||                    d	d          
          j        }|| j        j        k    r&|t          d          ddl m} |j        |j        g}n"| ddl m} |j        |j        |j        |j        g}|| _        || _        d | _        || _        || _        || _        |                                 }| j        | j        j        | j        j        fv r/|                                | _        |ot;          |          | _        || _        || _         |                                | _
        || _!        |	| _"        |
| _#        || _$        || _%        || _&        || _'        d| _(        d| _)        d | _*         tW          tX          |           j-        dd|i| d S )Nr   	dclocatorzInvalid upnzInvalid spnzInvalid realmzInvalid hostzInvalid ticketconnectdebugtimeoutmodeportr  z(Cannot specify etypes in GET_SALT mode !EncryptionTypeFsockr   ).r  scapy.layers.ldapr  r   r	  ru   r  r   rw   r   r  r   r,  ri  ipr  AES256_CTS_HMAC_SHA1_96AES128_CTS_HMAC_SHA1_96RC4_HMACDES_CBC_MD5etypesr  result_timeout_ip_port_connectupperhostr%   passwordr   r   rl  rW  additional_ticketsu2ufor_user	s4u2proxyr   should_followuppre_authfxcookier  r  __init__)r   r  r  r#  r   r$  r  r   rl  rW  r%  r&  r'  r(  r  r   r  r  r6  scapyr  r   r  r  r  s                           r   r,  zKerberosClient.__init__	  s   * 	"!!!////// 	,]+++ 	,]+++=	($)*<===%c??55***%c??5 6 6 #L,3355E 111DI$di&8999 1 0001TY&&& 3 !1222 
	 jj!,,     49%%%! !KLLL999999 66FF ^999999 66'*	F 	
}}9)49+=>>>

DI$?h)?)?DM[[]]

"4 "  %,nd##, 	
 	
	
	
 	
 	
 	
 	
r   c                     t          j                     }|                    | j                   |                    | j        | j        f           t          |t                    }|S r'  )socket
settimeoutr  r  r  r   rD   r  )r   r  s     r   r!  zKerberosClient._connectG
  sQ    }&&&dh
+,,,D"344r   c                 v    t          t          |                               t                      |z             d S r'  )r  r  sendr  )r   r  r  s     r   r2  zKerberosClient.sendN
  s3    nd##(():)<)<s)BCCCCCr   c                    t          d | j        D             d dd t          | j                  t	          |t          d          z             t	          |t          d          z             t          t          dd                                                              }| j	        r|j
                            dd	           |S )
Nc                 ,    g | ]}t          |          S r   )r   r   s     r   r   z0KerberosClient._base_kdc_req.<locals>.<listcomp>S
  s    888q<??888r   z"forwardable+renewable+canonicalizer   )hoursr   )r   r]  rO  r  r  rZ  r[  r  r$  r   )rN  r  r   r  r   r   r   rH   _fixrW  rO  set)r   now_timekdcreqs      r   _base_kdc_reqzKerberosClient._base_kdc_reqQ
  s    !88DK888";%dj11&x)"2E2E2E'EFF'923F3F3F(FGGwq*55::<<==

 

 

 : 	)!!"a(((r   c                    t          j        t          j                                      d          }|                     |          }t          t          d          t          | j	        
                    dd                              g|_        t                              | j                  |_        t                              | j                  |_        t'          t)          t+          t          d          t-          t/          d	          
                    g|                    }| j        r|j        j                            dt+          dt9                                           |j        j        d         j                            | j        tA          tC          |                               | j"        r4|j        j                            dt+          d| j"                             |S )Nr   microsecondr9  r   r    r2  r3  rC  )r  r   ry  r  ra  rb  r   )r|  r`  )#r   nowr   utcreplacer;  r1  r   r   r#  ljustrG  r   r   r   r  r   r   r'  rZ   rg  r   r  r   r*  rb  r  insertr   ry  r   r   r   r   r+  )r   r9  kdc_reqasreqs       r   as_reqzKerberosClient.as_reqa
  s   <--55!5DD$$h$77%b))#DIOOB$<$<==  
 &--dh77%--dh77#/#4#4$2l2>N>N$O$O$O      

 

 

 = 
	J$$" -     Ja ,44-4I(4S4STTT   = 	J$$" $     r   c           
      *   t          j        t          j                                      d          }|                     |          }t          | j                  \  }}t          t          |          t                              | j                  d t          |          t          d          d d d           }t          | j        t!                                }| j        r| j        |_        | j        r|j                            dd           t                              | j                  |_        t3          t5          t7          t          d          |          g|	          
          }| j        Bddlm} t?          t                              | j                  t          t          | j                  d                   tA                                }	tC          j"        d|	j#        j$        j%                  d&                    d |	j#        j'        D                       |	j(        j%        z   |	j)        j%        z   *                                z   }
|	j+        ,                    | j-        |
|j.                   |j/        j0        1                    t7          t          d          |	                     | j2        rd|j/        j0        1                    t7          t          d          tg          d                               |j                            dd           | j-        j4        r@tA                      |_+        |j+        ,                    | j-        tk          |                     |j6        7                    | j-        |           |S )Nr   r=  r?  r  r  r  r  r  r  r  r\  )rl  r~  r"  r   rC  rD  rE  )ChecksumType)r  r  r  r7  r   c              3   $   K   | ]}|j         V  d S r'  )r   r   s     r   r-  z)KerberosClient.tgs_req.<locals>.<genexpr>
  s$      IIaAEIIIIIIr   )r  rD  ro  r  )r  r   )8r   rF  r   rG  rH  r;  r   r   r   r   r   r   r   r   r   rl  r   r%  r]  r&  rO  r8  r   r   r'  rZ   rk  r   r'  r  rP  r  r  r  r  r  r   r   r/  r   r  r  encoder  r&  r   HMAC_MD5rb  r  appendr(  r  r  r   r~  r   )r   r9  rK  r   r  r~  r  tgsreqrP  	paforuserS4UByteArrays              r   tgs_reqzKerberosClient.tgs_req
  s{   <--55!5DD$$h$77tx((	6)&v..''11'11q//!%	
 	
 	
 $+]__MMM " 	@(,(?G%8 	*""2q)))%--dh77#/??$)      

 

 

 =$777777#&..t}==-j.G.G.JKKjj  I
 ";i(15  GGII9+=+HIIIII)-.+/0 &((L O  &/ !   
 K%%+C00 )     > 	*K%%+C00 . G! ! !     ""2q))) 8 	"***M$$g  
 	##DHm<<<r   r   )r<  c                     d S r'  r   r  s    r   BEGINzKerberosClient.BEGIN
      r   c                 l    | j         | j        j        | j        j        fv r|                                 d S r'  )r  r	  ru   r  SENT_AP_REQr  s    r   should_send_as_reqz!KerberosClient.should_send_as_req
  s8    9)49+=>>>""$$$ ?>r   c                 X    | j         | j        j        k    r|                                 d S r'  )r  r	  rw   SENT_TGS_REQr  s    r   should_send_tgs_reqz"KerberosClient.should_send_tgs_req
  s.    9	)))##%%% *)r   c                 T    |                      |                                            d S r'  )r2  rM  r  s    r   send_as_reqzKerberosClient.send_as_req
  s"    		$++--     r   c                 T    |                      |                                            d S r'  )r2  rX  r  s    r   send_tgs_reqzKerberosClient.send_tgs_req  s"    		$,,..!!!!!r   c                     d S r'  r   r  s    r   r]  zKerberosClient.SENT_AP_REQ  r[  r   c                     d S r'  r   r  s    r   r`  zKerberosClient.SENT_TGS_REQ	  r[  r   c                 x   ddl m}m} d }d}|r|D ]o}|j        dk    rK|I|j        j        d         }|j        j        | j        v r#|j        j        }||j	        k    r|j
        j        }X|j        dk    r|j        | _        p|p| j        d         }| j        #|                    || j        |          | _        d S d S )Nr   )r  r  r   r   r`  )r  r  r  r   ry  rQ  r   r   r  r  r  r+  r   string_to_keyr$  )r   padatasr  r  r   r  r  elts           r   _process_padatas_and_keyz'KerberosClient._process_padatas_and_key  s    ::::::::! 7 7$,, ,03Cy}33 #	 N$;;;#&8<D&#--$*$6DM'Q8(( DHHH r   r   )prioc                 6   | j         | j        j        k    rt          |vr|                                 t          |j        t                    s(t          j	        d           |                                 |j        j
        dk    rk|j        j        j        D ]W}|j        dk    rJ|j        j        d         }|j        j        | j        v r%|j        j        | _        |                                 Xd S t          j	        d           |                                 d S )NzPre-auth is likely disabled !r   r   r   zFailed to retrieve the salt !)r  r	  r  rZ   FINALr   rb  ru  r&   r  r  r  rQ  r   ry  r   r   r  r  r  )r   r  r  rk  s       r   receive_salt_modez KerberosClient.receive_salt_mode'  s    9	***s""jjll"ch	22 #!"ABBBjjll"x!R''!hn0 / /F(D00$04Q79=DK77*-(,DK"&**,,./ / !"ABBBjjll" +*r   c                    t           |v rt          |j        t                    r|j        j        dk    r| j        s6| j        r| j        s(t          j	        d           | 
                                |                     |j        j        j                   d| _        d| _        |                                 t          j	        d           |                                 | 
                                d S d S )Nr   zDGot 'KDC_ERR_PREAUTH_REQUIRED', but no key, nor upn+pass was passed.TReceived KRB_ERROR)rZ   r   rb  ru  r  r   r   r$  r&   r  ro  rl  r  rQ  r)  r*  rZ  showr   r  s     r   receive_krb_error_as_reqz'KerberosClient.receive_krb_error_as_req<  s     s??z#(I>>?x!R''x ' ' '%?   **,,&--chn.@AAA'+$ $jjll"!"6777


jjll" ???r   r   c                     t           |v rAt          |j        t                    r)|                                                     |          d S d S r'  )rZ   r   rb  r   ro  action_parametersrt  s     r   receive_as_repzKerberosClient.receive_as_repQ  sB    s??z#(J???**,,00555 ???r   c                     | j         rBd| _         |                     |                                            |                                 t	          j        d           |                                 )NFz(Socket was closed in an unexpected state)r)  update_sockr!  rZ  r&   r  ro  r  s    r   retry_after_eof_in_apreqz'KerberosClient.retry_after_eof_in_apreqV  s_     	#(D T]]__---**,,HIII**,,r   c                 6   |                      |j        j                   | j        st	          j        d           |j        j        }|                    | j                  }| 	                    |j        |j        
                                |          | _        d S )Nz2Pre-authentication was disabled for this account !)rl  rb  r  r*  r&   r   r(  r   r   RES_AS_MODEr  r  r   r  encr   s       r   decrypt_as_repzKerberosClient.decrypt_as_repa  s}    %%cho666} 	V TUUUhkk$(##&&sx#FFr   c                     t           |v rVt          |j        t                    r>t	          j        d           |                                 |                                 d S d S )Nrr  )rZ   r   rb  ru  r&   r   rs  ro  rt  s     r   receive_krb_error_tgs_reqz(KerberosClient.receive_krb_error_tgs_reqk  sS    s??z#(I>>? 4555HHJJJ**,, ???r   c                    t           |v rt          |j        t                    ri| j        s9|j        j        j        j        d         j        dk    rt          j
        d           |                                                     |          d S d S )Nr   s   krbtgtz(Received a cross-realm referral ticket !)rZ   r   rb  r   rW  rl  r'  r   r   r&   r   ro  rw  rt  s     r   receive_tgs_repzKerberosClient.receive_tgs_repr  s{    s??z#(K@@?: P#(/"7"B1"E"IY"V"V#$NOOO**,,00555 ???r   c                     |j         j        }|                    | j                  }|                     |j         |j                                        |          | _        d S r'  )rb  r(  r   r   RES_TGS_MODEr  r  r~  s       r   decrypt_tgs_repzKerberosClient.decrypt_tgs_repy  sJ     hkk$(##''#'--//3GGr   )finalc                     d S r'  r   r  s    r   ro  zKerberosClient.FINAL  r[  r   )'rm   rn   ro   r   r}  r  r   r	  ru   r,  r!  r2  r;  rM  rX  r#   staterZ  	conditionr^  ra  actionrc  re  r]  r`  rl  receive_conditionrp  ru  rx  eofr{  r  r  r  r  ro  r  r  s   @r   r  r  	  s       *[*K*K*KLLK:l,N,N,NOOL    w    [%o
 o
 o
 o
 o
 o
b  D D D D D   - - -^] ] ]~ TZ   T^E% % % T^E& & & T[#$$! ! %$! T[$%%" " &%" TZ\\  \ TZ\\  \  4 TKa000# # 10#( TKa000# # 10#( TKa0006 6 106 TXk   T[  G G ! G TL))  *) TL))6 6 *)6 T[!!H H "!H TZa      r   r  c                 8   t          j        d|           }|st          d| z            |                    d          dk    r+|                    d          }|                    d          }n*|                    d          }|                    d          }||fS )Nz^([^@\\/]+)(@|\\|/)([^@\\/]+)$zInvalid UPN: '%s'r   r.  r   r   rematchr   group)r   mr   domains       r   r   r     s    
2C88A 4,s2333wwqzzSwwqzzwwqzz<r   c                     t          j        d|           }|st          d| z            |                    d          |                    d          fS )Nz-^((?:[^@\\/]+)/(?:[^@\\/]+))(?:@([^@\\/]+))?$zInvalid SPN: '%s'r   r   r  )r   r  s     r   r   r     sO    
A3GGA 4,s2333771::qwwqzz!!r   WIN10c                 J   |t          |           \  }}|6|4	 ddlm}	  |	dd          }n# t          $ r t	          d          }Y nw xY wt          d	t
          j        j        |||pd|z   || ||d|}
|
                                 |
	                                 |
j
        S )
a  
    Kerberos AS-Req

    :param upn: the user principal name formatted as "DOMAIN\user", "DOMAIN/user"
                or "user@DOMAIN"
    :param spn: (optional) the full service principal name.
                Defaults to "krbtgt/<realm>"
    :param ip: the KDC ip. (optional. If not provided, Scapy will query the DNS for
               _kerberos._tcp.dc._msdcs.domain.local).
    :param key: (optional) pass the Key object.
    :param password: (optional) otherwise, pass the user's password
    :param realm: (optional) the realm to use. Otherwise use the one from UPN.
    :param host: (optional) the host performing the AS-Req. WIN10 by default.

    :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_CTS_HMAC_SHA1_96, key=hex_bytes("6d0748c546
        ...: f4e99205e78f8da7681d4ec5520ae4815543720c2a647c1ae814c9"))
        >>> krb_as_req("user1@DOMAIN.LOCAL", "192.168.122.17", key=key)
    Nr   promptzEnter password: Tis_passwordkrbtgt/)r  r  r  r   r#  r   r$  r   r   )r   prompt_toolkitr  ImportErrorinputr  r	  ru   runstopr  )r   r   r  r   r$  r  r#  r6  r   r  clis              r   
krb_as_reqr    s    > }c??5
{5111111!6"4$GGG 5 5 5 !3445
 
 '$9u$
 
 
 
C GGIIIHHJJJ:s   . A
	A
Fc                     t          dt           j        j        || ||||||||	|
|d|}|                                 |                                 |j        S )a-  
    Kerberos TGS-Req

    :param upn: the user principal name formatted as "DOMAIN\user", "DOMAIN/user"
                or "user@DOMAIN"
    :param spn: the full service principal name (e.g. "cifs/srv1")
    :param sessionkey: the session key retrieved from the tgt
    :param ticket: the tgt ticket
    :param ip: the KDC ip. (optional. If not provided, Scapy will query the DNS for
               _kerberos._tcp.dc._msdcs.domain.local).
    :param renew: ask for renewal
    :param realm: (optional) the realm to use. Otherwise use the one from SPN.
    :param additional_tickets: (optional) a list of additional tickets to pass.
    :param u2u: (optional) if specified, enable U2U and request the ticket to be
                signed using the session key from the first additional ticket.
    :param etypes: array of EncryptionType values.
                   By default: AES128, AES256, RC4, DES_MD5
    :param for_user: a user principal name to request the ticket for. This is the
                     S4U2Self extension.

    :return: returns a named tuple (tgsrep=<...>, 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_CTS_HMAC_SHA1_96, key=hex_bytes("6d0748c546
        ...: f4e99205e78f8da7681d4ec5520ae4815543720c2a647c1ae814c9"))
        >>> krb_as_req("user1@DOMAIN.LOCAL", "192.168.122.17", key=key)
    )r  r  r   r  r   r   rl  rW  r%  r&  r  r'  r(  r   )r  r	  rw   r  r  r  )r   r   r  rl  r  rW  r  r%  r&  r  r'  r(  r6  r  s                 r   krb_tgs_reqr    sy    b   (-   C  GGIIIHHJJJ:r   c           	      n    t          d| |||d|}|sdS t          d| ||j        |j        j        |d|S )z&
    Kerberos AS-Req then TGS-Req
    )r   r  r   r$  N)r   r   r  rl  r  r   )r  r  r  r  rl  )r   r   r  r   r$  r6  r   s          r   krb_as_and_tgsr    sk     
Jx
J
J6
J
JC  >y    r   c           
          |t          |           \  }}t          dt          j        j        ||d|z   | |d|}|                                 |                                 |j        S )zG
    Kerberos AS-Req only to get the salt associated with the UPN.
    Nr  )r  r  r  r   r   r#  r   )r   r  r	  r  r  r  r  )r   r  r  r#  r6  r   r  s          r   krb_get_saltr  )  s|     }c??5
  )   C GGIIIHHJJJ:r   c                 x   ddl m} |st          |           \  }}d|z  }| |||
d||          j        }|||                                                    d          d         }|dv sJ d	|z              |d
k    rBt          j        d           d}	t          | |||||          }|dS |j	        j
        }|j        }|	t          |          }	n|	r|| }|	s|r
J d            |A|,t          | |||||          }|dS |j        j
        }|j        }t          d%| |||||d|}|                    dd          \  }}}|t"          k    r't%          d           |r|                                 dS |j        j        }t-          j                    }|                    |
           |                    ||f           t3          |t4                    }|4	 ddlm}  |dd          }n# t:          $ r t=          d          }Y nw xY wt?          tA                                }|j!        "                    |j#        tI          tK          tM          d          tO          d                    tO          |	r7tQ          tS          |tT          +                    |          |                    n|          dd|j,                             |-                    t5                      t]          |	rdnd||          z  |
d          }|st_          d           t`          |vr#|                                 tc          d!          |                    ||j2                  \  }}}|tf          k    r't%          d"           |r|                                 dS |j4        j!        5                    |j#                  }tm          |j7        j8                  }|j9        dk    r8t%          |:                    d#                     |                                 dS tw          |:                    d$                     dS )&a  
    Change a password using RFC3244's Kerberos Set / Change Password.

    :param upn: the UPN to use for authentication
    :param targetupn: (optional) the UPN to change the password of. If not specified,
                      same as upn.
    :param ip: the KDC ip. (optional. If not provided, Scapy will query the DNS for
               _kerberos._tcp.dc._msdcs.domain.local).
    :param key: (optional) pass the Key object.
    :param ticket: (optional) a ticket to use. Either a TGT or ST for kadmin/changepw.
    :param password: (optional) otherwise, pass the user's password
    :param realm: (optional) the realm to use. Otherwise use the one from UPN.
    :param setpassword: (optional) use "Set Password" mechanism.
    :param ssp: (optional) a Kerberos SSP for the service kadmin/changepw@REALM.
                If provided, you probably don't need anything else. Otherwise built.
    r   r  zkadmin/changepw@%sNr  r  r   )r   kadminzUnexpected ticket type ! %sr   zAUsing 'Set Password' mode. This only works with admin privileges.T)r   r   rl  r  r  r  z-Cannot use targetupn in changepassword mode !)r   r   r   r  r$  r  )UPNSPNSTKEYDC_IPr  	req_flagsz,SSP failed on initial GSS_Init_sec_context !r  zEnter NEW password: r  r(  r   s    erA  )r  r  r  )r  r  r  r  r  r  r   )r_  r  r  )r  verbosezKPASSWD_REQ timed out !z!Invalid response to KPASSWD_REQ !z/SSP failed on subsequent GSS_Init_sec_context !zKPASSWD failed !z%resultCode%r   )<r  r  r   r  r0  r   r&   infor  r  rl  r  boolr  r  KerberosSSPGSS_Init_sec_contextrN   r   rs  r{  rb  r/  r0  r  rD   r  r  r  r  r  r   r   r(  r   KrbSessionKeyr   r1  r   r   r   r  r   r   
SendSeqNumsr1r  TimeoutErrorr  r   r  rM   r  r   r  r  r   r  rg  print)r   	targetupnr  r$  newpasswordr   rl  r  sspsetpasswordr  r  r  r6  r  r   r   tktspnrespContexttok	negResultr  r  r  r  	krbansweruserReps                               r   kpasswdr  =  s6   @ ,+++++ #c??5

&C	zY 
 
 
  	 {v)&&s++A.----/Lv/U---XS   K  D |['F/C9oo	 *	XiXX)XXXX
{>!  D |Z&F/C 

 
 
 
 "66 7  GS) )))>??? 	HHJJJNE=??DOOGLL"d.//D	8------ &!7TJJJKK 	8 	8 	8 677KKK	8}///GO %a#$455   ! !$"-!.!6!6y!A!A"'     !
 
 (%	
 	
 	
  . 88
&-A
 
 
	
   	 	D  64555$		<===!66w
KKGS)N""ABBB 	HHJJJ$,,W-BCCIY/344GQ 233444	'//.
)
)*****s   G. .H
	H
c                       e Zd ZdZdZdZ G d dej                  Z G d dej                  Z	 	 	 	 	 	 	 	 	 	 	 d fd	Z	ddZ
d ZddZd Z	 ddedee         fdZd ZddefdZddefdZddefdZdefdZdefdZ xZS )r  a  
    The KerberosSSP

    Client settings:

    :param ST: the service ticket to use for access.
               If not provided, will be retrieved
    :param SPN: the SPN of the service to use
    :param UPN: The client UPN
    :param DC_IP: (optional) is ST+KEY are not provided, will need to contact
                  the KDC at this IP. If not provided, will perform dc locator.
    :param TGT: (optional) pass a TGT to use to get the ST.
    :param KEY: the session key associated with the ST if it is provided,
                OR the session key associated with the TGT
                OR the kerberos key associated with the UPN
    :param PASSWORD: (optional) if a UPN is provided and not a KEY, this is the
                     password of the UPN.
    :param U2U: (optional) use U2U when requesting the ST.

    Server settings:

    :param SPN: the SPN of the service to use
    :param KEY: the kerberos key to use to decrypt the AP-req
    :param TGT: (optional) pass a TGT to use for U2U
    :param DC_IP: (optional) if TGT is not provided, request one on the KDC at
                  this IP using using the KEY when using U2U.
    :param REQUIRE_U2U: (optional, default False) require U2U
    rz  r   c                   "    e Zd ZdZdZdZdZdZdS )KerberosSSP.STATEr   r   r   r   r   N)rm   rn   ro   INITCLI_SENT_TGTREQCLI_SENT_APREQCLI_RCVD_APREPSRV_SENT_APREPr   r   r   STATEr    s'        r   r  c                   4     e Zd Zg dZd fd	Zd Zd Z xZS )KerberosSSP.CONTEXT)
SessionKeyServerHostnameU2Ur  STSessionKeySeqNumr  
RecvSeqNum
IsAcceptorSendSealKeyUsageSendSignKeyUsageRecvSealKeyUsageRecvSignKeyUsageNc                 v   t           j        j        | _        d | _        d | _        d| _        d| _        d| _        d | _	        d | _
        || _        |rd| _        d| _        d| _        d| _        nd| _        d| _        d| _        d| _        t!          t           j        |                               |           d S )NFr   r  r   r   r   r  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  CONTEXTr,  )r   r  r  r  s      r   r,  zKerberosSSP.CONTEXT.__init__)  s    $*/DJ"DO"&DDHDODO!%D $D(DO 	+(*%(*%(*%(*%%(*%(*%(*%(*%+%t,,55	5JJJJJr   c                 H    |                      | j        | j                   d S )Nr  )r,  r  r  r  s    r   
clifailurezKerberosSSP.CONTEXT.clifailure@  s"    MM$/TZM@@@@@r   c                     | j         rdS dS )NzKerberosSSP-U2Ur  )r  r  s    r   __repr__zKerberosSSP.CONTEXT.__repr__C  s    x )(( =r   r'  )rm   rn   ro   	__slots__r,  r  r  r  r  s   @r   r  r    su        
 
 
	 	K 	K 	K 	K 	K 	K.	A 	A 	A	! 	! 	! 	! 	! 	! 	!r   r  NFr   c                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        || _	        |
ddl
m} |j        }
|
| _         t          t          |           j        di | d S )Nr   r  r   )r  r  r  r  TGTPASSWORDr  r  REQUIRE_U2Ur  r  r  r  	SKEY_TYPEr  r  r,  )r   r  r  r  r  r  r  r  r  r  r  r  r6  r  r  s                 r   r,  zKerberosSSP.__init__H  s      
&
999999&>I")k4  )33F33333r   c                 |   |j         j        dv rd                    d |D                       }t          dt	          d|j        rdndz   |j                  	          }|t          |          d
d         z  }|j                             |j	        |          |j
        _        nt          |xj        dz  c_        |S )zM
        [MS-KILE] sect 3.4.5.6

        - AES: RFC4121 sect 4.2.6.1
        r   r   r   c              3   2   K   | ]}|j         	|j        V  d S r'  signr*  r   s     r   r-  z+KerberosSSP.GSS_GetMICEx.<locals>.<genexpr>p  +      ==af=af======r   rW  r  +SentByAcceptorr   )r  r  ra  rb  Nr   r$  r   r   )r  r   r/  r`  r  r  r  r   r%  r  rb  r  NotImplementedError)r   r  msgsqop_reqToSignsigs         r   GSS_GetMICExzKerberosSSP.GSS_GetMICExh  s      &(22XX==d=====F " *,3,>F((BH#.    C eCjj"o%F!(!6!D!D 1 "E " "CH
 &%a
r   c                 F   |j         j        |_        |j        j        dv r[d                    d |D                       }|t          |          dd         z  }|j                            |j        |          }nt          ||j         j
        k    rt          d          dS )zM
        [MS-KILE] sect 3.4.5.7

        - AES: RFC4121 sect 4.2.6.1
        r  r   c              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z.KerberosSSP.GSS_VerifyMICEx.<locals>.<genexpr>  r  r   Nr   r  ERROR: Checksums don't match)rb  r  r  r  r   r/  r   r%  r  r  r  r   )r   r  r  	signaturer  r  s         r   GSS_VerifyMICExzKerberosSSP.GSS_VerifyMICEx  s     '^3 &(22XX==d=====FeI&&ss++F'55 1 6  CC
 &%).***;<<< +*r   c           	      t   |j         t          j        z  ot          d |D                       }|j        j        dv rt          dt          d|j        rdndz   |rdndz   |j	        d	          
          }|xj	        dz  c_	        |rt          j        |j        j        j                  }d                    d |D                       }t          |          }| |j        j        j        z  pd|j        _        d|j        j        z  }	||	z  }t%          |          dd         }
||
z  }|}|d                    d |D                       z  }||	z  }||
z  }d|j        _        |j                            |j        |||          }t-          ||j        j        |j        j        z             }t          |          |z
  }|d|         |j        _        |}|D ]4}t          |j                  }|j        r||||z            |_        ||z  }5||fS d                    d |D                       }t          |          }|}|t%          |          dd         z  }|j                            |j        |          }d|j        _        d|j        _        |D ]}|j        rd|_        ||z   }t-          ||j        j                  |j        _        ||fS |j        j        dv rOddlm}m}m}m } tC          j"        d|j	                  }t          dtG          d|rdnd||j        rdndz              
          }|xj	        dz  c_	         |d                    d! |D                                 }d                    d" |D                       }|j        j$        }t          j        d#          }tK          |t          |          d$z            }|j        j        d%k    r, ||          &                    d&          }|dd'         d(z   }n ||          &                    d          } ||          &                    |          }|j                            d)t%          |          dd#         |z   |z             dd#         |j        _'        |r ||(                    |          d*          )                                }|*                    |          |j        _+        |*                    |          }d}|D ]4}t          |j                  }|j        r||||z            |_        ||z  }5n||j        _+        |j        j        d%k    r, ||          &                    d&          }|dd'         d(z   }n ||          &                    d          } ||          &                    |j        j'                  } ||(                    |          d*          )                                }|*                    |j        j,                  |j        _,        t[          d+|,          }||fS t\          )-z
        [MS-KILE] sect 3.4.5.4

        - AES: RFC4121 sect 4.2.6.2 and [MS-KILE] sect 3.4.5.4.1
        - HMAC-RC4: RFC4757 sect 7.3 and [MS-KILE] sect 3.4.5.4.1
        c              3   $   K   | ]}|j         V  d S r'  )conf_req_flagr   s     r   r-  z)KerberosSSP.GSS_WrapEx.<locals>.<genexpr>  s=       P
 P
 !AOP
 P
 P
 P
 P
 P
r   r  rX  r  r  r   z+Sealedr   )r  r  r  r  r   r   c              3   2   K   | ]}|j         	|j        V  d S r'  r  r*  r   s     r   r-  z)KerberosSSP.GSS_WrapEx.<locals>.<genexpr>  s+      HH1HHHHHHHr   r       Nc              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z)KerberosSSP.GSS_WrapEx.<locals>.<genexpr>  s+      "B"Ba16"B16"B"B"B"B"B"Br   r"  )r$  	plaintextr   signtextc              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z)KerberosSSP.GSS_WrapEx.<locals>.<genexpr>  s+      ??1???????r   r  r   r   r   CipherHmac_MD5_rfc1964paddecrepit_algorithmsz>IrS  rZ  r]  r\  s          )r~  r  r  c              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z)KerberosSSP.GSS_WrapEx.<locals>.<genexpr>  +      )I)IQ!&)I!&)I)I)I)I)I)Ir   c              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z)KerberosSSP.GSS_WrapEx.<locals>.<genexpr>  +       I IA I I I I I I Ir   r      r      fortybits     r   	   r   r  rz  ry  r{  )/r  rK   r=  anyr  r   r`  r  r  r  osurandomep	blocksizer/  rr  rb  r  r   r  r   r  rE   r  r*  r  r%  r  r  r  r  r  r  r  r  r  r   rF   digestr  ARC4	encryptorupdater  r  rs  r  )r   r  r  r  confidentialityr  
Confounderr  DataLenr  PlainHeaderr  toklenoffsetmsgmsglenMicr  r  r  r  rQ  	ToEncryptKssKlocalKcryptrc4Kseqs                               r   
GSS_WrapExzKerberosSSP.GSS_WrapEx  s    #=;+FF 
C P
 P
%)P
 P
 P
 M
 M
  &(22 "!*,3,>F((BH$3;yy= $.  	 	 	C !# G!  Z(=(@(JKK
xxHHHHHHHd))!(G,A,D,NNUSU 38;.#Cjj"o###(("B"B4"B"B"BBBB& +%  " ,44$5")#	 5   dCHL38;$>??TW, $WfW ) )C ]]F( )#'&(@#A&(Sy 
 xx???????d))%**SbS/) +99$5 :   !  " ' 'Cx '#&cz &tSX\ : :Sy "(H44            +dG$677C ")"&5AUU6 #-1++0
 
 
  C !# [)I)I$)I)I)I!I!IJJF I I I I IIII'+CAJCSG!344F$*b00!&))001WXXk1!&))001DEEXf%%,,S11F!(!6!D!D3ZZ^j069 "E " " qb"CH
  1f055f==DIIISSUU&)jj&<&<#zz),, ) )C ]]F( )#'&(@#A&(	) '1#$*b00x}}++,RSSBQBx+-x}}++,?@@8D>>(();<<D&,11$77dCCCMMOOC"zz#(*:;;CH"/  C 9%%r   c                 
   |j         j        dv ry|j        j        j        }|rD|j        j        }|d                    d D                       z  }t          ||j        j        |j        j	        z   d          }fd}|j         
                    |j        ||          }|dd	         |d	d         }}|                                }d
|j        _        |t          |          dd         k    rt          d          d
}	D ]4}
t          |
j                  }|
j        r||	|	|z            |
_        |	|z  }	5t                    dk    rd
         j        s|d
         _        S |j        j        }|d                    d D                       z  }t          ||j        j        d          }|d|j        j	                  ||j        j	         d         }}|}|                                }d
|j        _        d
|j        _	        |t          |          dd         z  }|j                             |j        |          }||k    rt          d          t                    dk    rd
         j        s|d
         _        S |j         j        dv rd
dlm}m}m}m} |j        }|j        j        dk    }d                    d D                       }|j         j        }|j         j        dk    r, ||                              d          }|dd         dz   }n ||                              d          } ||                              |j        j                  } ||                    |          d                                          }|                    |j        j                   dd         }tC          |t          |          dz            }|j         j        dk    r, ||                              d          }|dd         dz   }n ||                              d          } ||                              |          }|r ||                    |          d                                          }|                    |j        j"                  }|                    |          }d
}	D ]4}
t          |
j                  }|
j        r||	|	|z            |
_        |	|z  }	5n|j        j"        } |d                    d D                                 }|j         #                    dt          |          dd         |z   |z   |j        j                    S tH          )!zr
        [MS-KILE] sect 3.4.5.5

        - AES: RFC4121 sect 4.2.6.2
        - HMAC-RC4: RFC4757 sect 7.3
        r  r   c              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z+KerberosSSP.GSS_UnwrapEx.<locals>.<genexpr>T  r  r   F)rightc                     d}| }D ]D}t          |j                  }|j        r|||||z            z  }||z  }3|j        r
||j        z  }E|||d          z  }|S r  )rr  r*  r  r  )r%  DecTextr)  r  r*  r+  r  s         r   
MakeToSignz,KerberosSSP.GSS_UnwrapEx.<locals>.MakeToSignY  s    F'F# / /!$SX, /"gfv.F&GGF"f,FF X /"ch.Fgfgg..F!Mr   )r$  
ciphertextpresignfuncNir   r   zERROR: Headers don't matchr   c              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z+KerberosSSP.GSS_UnwrapEx.<locals>.<genexpr>  s+       @ @A @ @ @ @ @ @ @r   r  r  r  r  r^  c              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z+KerberosSSP.GSS_UnwrapEx.<locals>.<genexpr>  r  r   r   r  r   r  r  r  r   r  c              3   2   K   | ]}|j         	|j        V  d S r'  r  r   s     r   r-  z+KerberosSSP.GSS_UnwrapEx.<locals>.<genexpr>  r  r   r   r   )r$  r   r  )%r  r   rb  r  r  r  r/  rE   r  r  r   r  copyr   r   rr  r*  r  r%  r  r  r  r  r  r{  r  r   r   r  r!  r"  r#  r  rF   r  r!  r  )r   r  r  r  r$  r  r9  	f16headerhdrr)  r*  r+  r,  r  r  r  r  r  r  r  	ToDecryptr.  r2  r1  rQ  r/  r0  r%  s     `                         r   GSS_UnwrapExzKerberosSSP.GSS_UnwrapExG  s     &(22'n29O P ~* I I I I IIIIdIN$69J$JRWXXX" " " " "" ,44$5# * 5   #JJ  
  nn&& c

3B3//$%ABBB ) )C ]]F( )#'&(@#A&(t99>>$q',>#'DGL !~* @ @ @ @ @@@@dIN$6eDDD !5IN$5#5!56in>O=O=Q=Q8Rc nn&& %**SbS/)+99$5 :  
 #::$%CDDDt99>>$q',>#'DGL"(H44            &C "h/69O  I I I I IIII'+C$*b00x}}++,RSSBQBx+-x}}++,?@@8D>>(();<<D&,11$77dCCCMMOOC**SX-..rr2CCSG!344F$*b00!&))001WXXk1!&))001DEEXf%%,,S11F 1f055f==DIIISSUU ZZ(;<<
zz),, ) )C ]]F( )#'&(@#A&(	) !X0
 [)I)I$)I)I)I!I!IJJF!113ZZ^j069h( 2   
 K%%r   r  r  c                    ||                      d|          }ddlm} |j        | j        j        k    rL| j        rE| j        j        |_        |t          dt          dt                                          t          fS |j        | j        j        | j        j        fv r| j        st          d	          | j        i| j        st          d
          g }| j        r	 |j        j        j        }n:# t$          $ r- 	 |j        j        }n# t$          $ r |d t&          fcY cY S w xY wY nw xY wt)          |t*                    s#|                                 t          d          |j        g}| j        Q| j        st          d          t5          | j        | j        | j        | j        | j        || j        | j                  }n:t;          | j        | j        | j        | j        | j        || j        | j                  }|s
|d t>          fS |j         j        |j!        c| _        | _        n| j        st          d          | j        |_"        tG          | j        j$        j%                  dk    r3| j        j$        j%        d         j&        '                                |_(        tS          d          }|j*        tV          j,        z  r|-                    dd           | j        r|-                    dd           d|_        t]          || j        t_                                }	ta          j1        td          j3                  4                    d          }
|5                    | j6        to          j8        d                    |_9        tu          dd          ;                                |_<        t{          | j                  \  }}|	j>        ?                    |j"        t          |t          B                    | j                  t          dt          t          |j*                                      t          |
          t          d          t          I                    |j9                  |j<        t          t          dt          t          dt          t          t          t          d                                         !          t          d"d#!          g$          !          g$          %                     | j        jP        |_        |j*        tV          jQ        z  r
||	t          fS |t          t          |	&          '          t          fS |j        | j        jP        k    rt)          |t                    r|}nh	 |j        j        j        }nU# t$          $ rH 	 |j        j        }n7# t$          $ r* 	 |j        }n# t$          $ r |d t&          fcY cY cY S w xY wY nw xY wY nw xY wt)          |t                    s
|d t&          fS |jS        T                    |j"                  }|jU        4|jU        jV        j&        |_W        |jU        X                                |_9        | j        jY        |_        |j*        tV          jQ        z  rta          j1        td          j3                  4                    d          }
t          t_                      (          }|jS        ?                    |j"        t          t          |
          |j[        d )                     ||t          fS |d t          fS |j        | j        jY        k    r|j*        tV          jQ        z  r
|d t          fS t          d*          )+NFr  r  r   r   r  rU  r  r  zMissing UPN attributeMissing SPN attributezKerberosSSP: Unexpected token !zCannot use TGT without the KEY)r   r   r  r  rl  r%  r&  r  )r   r   r  r   r$  r%  r&  r  zMust provide KEY with STr   r   0001T)r  rl  r~  r=  r   r6  r   )r  )r  r  r>  rF  r  )r  )r  )r<  rM  rH  s                   )rQ  rO  rE  r{  r  )r  r  r  zKerberosSSP: Unknown state)]r  r  r  r  r  r  r  r  rs  r`  r  rN   r  r   r  r  rb  r{  AttributeErrorrO   r   r  rs  rl  r  r  r  r  r  r  r  rP   r  r  r  rr  r'  r   r   r,  r  r   r  rK   r:  r8  r   r   r   rF  r   rG  rH  random_to_keyr  r  r  r  rH   r7  r  r   r~  r   r   r   r   r  r  intr   r   r   r  rP  rL  r  r  r   rI   r  r?  r   r(  r   r  r   r  r  r  r   r  rM   )r   r  r   r  r  r%  tgt_repr   r  ap_reqr9  r   r  ap_reprepPart
cli_ap_reps                   r   r  z KerberosSSP.GSS_Init_sec_context  s    ?lleylIIG******=DJO+++ J6GM 5-*(]]        &
 
 =TZ_dj.HIII8 : !8999wx >$%<===%'"8 :H"%("5":) H H HH&)n&9GG- H H H#*D2G#GGGGGGH $GH &g{;; L()JKKK*1.)9&8'8 K()IJJJ% H H:#'8#x+= H"j	 	 	CC ) H H: H!%+= H"j	 	 	C  8"D-77$'J$5s~!X = !;<<<#'8G 47=+,,11)-)A!)D)H)O)O)Q)Q&'..I}{<< &a%%%x #a%%%"#w+oo  F  |HL1199a9HHH$'$5$5
2% %G! ")J!7!7!<!<!>!>G"48,,IAv (($!!'//99""5!:W]ASAS!T!T!T   099&q//(001FGG%0):1'7'8(=3V3L<U>CGBKK>P>P=2 =2 =24. 4. 4.)* )* )* )>3?3?)* )* )*)&(" (" ("  * * *# # #& & &N !J5GM}{:: (=== $#1!'$ $ $  
 *  ]dj777#z** HH X05FF% 	H 	H 	HH!$!4) H H HH%(XFF- H H H#*D2G#GGGGGGGGH #FH		H fj11 <&;;;n,,W-ABBG~)%,^%<%@"(/(<(<(>(>% J5GM}{:: ;
 $<55==!=LL'@@@
"**( 3H==")"3#     
N::D.00MTZ666 ;; 7 D.009:::s   C1 1
D(<D	D(	D"D(!D""D('D(V 
W(!V.-W(.
W"9W W"WW"W(WW"W(!W""W('W(c                 X   | j         s	 d                    | j                            d          d                             dd                    }n# t          $ r t          d          w xY wt          || j        | j                  }|j	        j
        |j        c| _         | _        d S d S )Nr.  r   r   .z+Couldn't transform the SPN into a valid UPN)r   )r  r/  r  r   KeyErrorr   r  r  r  r  rl  r  )r   r   r   s      r   
_setup_u2uzKerberosSSP._setup_u2u  s    x 	BPhhtx~~c2215;;CCCDD P P P !NOOOPS$*$(;;;C!$!13>DHdhhh	B 	Bs   AA A+c                    ||                      dd          }ddlm} |j        | j        j        k    r)| j        st          d          t          |t                    r|}nH	 |j
        j        j
        }n5# t          $ r( 	 |j
        }n# t          $ r |d t          fcY cY S w xY wY nw xY wt          |t                    rV|                                  d|_        d t#          dt%          dt'          | j                  	          
          t*          fS t          |t                    s#|                                 t          d          | j        st          d          d                    d |j        j        j        d d         D                                                       }|| j                                        | j                                                            dd          d         fvr$t=          d|d| j                   |d t>          fS | j         r|j!        j"        d         dk    r|                                  d|_        tG          j$        tJ          j&                  '                    d          }t#          t%          dtQ          dtS          |          |j        j*        |j        j        t'          | j                            	                    }||t*          fS 	 |j        j+        ,                    | j                  }n# t          $ r}	t=          d|	z             tG          j$        tJ          j&                  '                    d          }t#          t%          dtQ          dtS          |          |j        j*        |j        j        d           	                    }||t          fcY d }	~	S d }	~	ww xY w|j-        .                                |_/        |j0        ,                    |j/                  }
d }|j!        j"        d         dk    r[|1                    | j2        tg          j4        d                    }||_5        |j-        |_6        tn          8                    |          }n| j        |_5        | j        j-        |_6        |
j9        r&|
j9        j:        dk    r|
j9        j;        j<        |_=        t}          t                                }|j+        @                    |j/        t          |
jB        |
jC        d |                     | j        jD        |_        |j=        t          jF        z  r
||t*          fS ||t          fS |j        | j        jD        k    r|j=        t          jF        z  r|s
|d t          fS t          |t|                    r|}nH	 |j
        j        j
        }n5# t          $ r( 	 |j
        }n# t          $ r |d t          fcY cY S w xY wY nw xY w	 |j+        ,                    |j/                   n3# t          $ r&}	t=          d|	z             |d t          fcY d }	~	S d }	~	ww xY w|d t          fS t          d t          |j                  z            )!NTr   rE  r   rF  r  rV  )rl  r  r  zUnexpected type in KerberosSSPzMissing KEY attributer   c              3   H   K   | ]}|j                                         V  d S r'  r+  r   s     r   r-  z5KerberosSSP.GSS_Accept_sec_context.<locals>.<genexpr>  s=        #$     r   r   rS  r   zKerberosSSP: bad SPN: z != rH  r=  rQ  r  )r  r  r  r'  r  rI  zKerberosSSP: %s (bad KEY?)r  r   r   r  )r  r  r  r  zKerberosSSP: Unknown state %s)Ir  r  r  r  r  r  r  r   r   r   rb  r{  rJ  rO   r  rU  r  rs  r`  r  r  rN   rs  r  r/  rl  r'  r   lowerr   r   rL   r  r  r   r   rF  r   rG  rH  ru  r   r  r(  r   r   r  r  r~  rK  r  r  r  r  r  r   r  r  r  r  r  r  r   r   r   r   r  r  r  rK   r?  rM   rj  )r   r  r   r  rN  tkt_spnr9  errtktexr~  r  appkeyrO  s                 r   GSS_Accept_sec_contextz"KerberosSSP.GSS_Accept_sec_context  s!   ?lldal@@G******=DJO++8 : !8999#z** DD X05FF% D D DD!$) D D D&.CCCCCCCD D &+.. C!!!"$!9#1#.!,'+x" " "$ $ $   *   
33 C !ABBB8 : !8999hh  (.(;(Frr(J    egg  tx~~//1A1A1G1GQ1O1OPQ1RSSSGGGTXXNOOOn44 ;F$4$8$;s$B$B!!!"#<55==!=LL&-*&&H"7"A"A"(-"5"(-"5"-'+x# # #          %:::;m+33DH== ; ; ;4r9:::#<55==!=LL&-*&&;"7"A"A"(-"5"(-"5"&  	  	  	    %::::::::;" $'7==??G "0889MNNMF#A&#--**NJrNN  )/%%+Z"&..v66(,%%)X\"" G &0F::$1$7$@$FGM888FN""$'-'-"!	     !J5GM}{:: >(===FN22MTZ666 ;; 7  <&;;;#z** DD X05FF% D D DD!$) D D D&.CCCCCCCD D<&&w';<<<< < < <4r9:::&;;;;;;;;< D.00<tGM?R?RRSSSs   %A7 7
B)B
	B)
B#B)"B##B)(B)9$L 
O(BOOO-V? ?
W1
WW1W+&W1*W++W10W15X 
YY :Y Yc                 :   ||                      d          }d|_        |j        | j        j        k    r4|                     ||          \  }}}| j        j        |_        |t          fS |j        | j        j        k    r|                     ||          \  }}}||fS d S )NT)	r  passiver  r  r  r^  r  rN   r  )r   r  r   r   r  s        r   GSS_PassivezKerberosSSP.GSS_Passive`  s    ?ll4((G"GO=DJO++!%!<!<Wc!J!JGQ J5GM111]dj777!%!:!:7C!H!HGQF?" 87r   c                     |j         |urd S |j        |j        c|_        |_        |j        |j        c|_        |_        |j          |_         d S r'  )r  r  r  r  r  )r   r  r  s      r   GSS_Passive_set_Directionz%KerberosSSP.GSS_Passive_set_Directionm  se    Z//F $$ 	; '":
 $$ 	; '": ")!33r   c                 |    |j         t          j        z  r'|j        j        dv rdS |j        j        dv rdS t
          dS )Nr  r  r  r  r"  )r  rK   r=  r  r   r  r   r  s     r   MaximumSignatureLengthz"KerberosSSP.MaximumSignatureLength{  sK    =;66 		$*h66r&,88r))2r   c                 *    t          |j                  S r'  )r  r  re  s     r   canMechListMICzKerberosSSP.canMechListMIC  s    G)***r   )NNNFNNNNFNr   )r   r   r'  )F)rm   rn   ro   rw  oid	auth_typerR   r  r  r,  r  r   r3  rC  rW   rK   r  rU  r^  ra  rc  rf  rh  r  r  s   @r   r  r    s        : !CI    	   .! .! .! .! .!#+ .! .! .!d 4 4 4 4 4 4@   6= = =(n& n& n& n&`W& W& W&t NRQ; Q;Q;5=k5JQ; Q; Q; Q;fB B BaT aTg aT aT aT aTF# #7 # # # #4 4 4 4 4 4
g 
 
 
 
+g + + + + + + + +r   r  )NNNNNr  )NNN)NNr  )NNNNNNNNNr   r  r   )rw  collectionsr   r   r   r   enumr   r  r  r/  r  scapy.errorr   scapy.asn1.mibr-  scapy.asn1.berr	   r
   scapy.asn1.asn1r   r   r   r   r   r   r   r   scapy.asn1fieldsr   r   r   r   r   r   r   r   r   r   r   r   r   r    scapy.asn1packetr!   scapy.automatonr"   r#   scapy.configr$   scapy.compatr%   r&   scapy.fieldsr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   scapy.packetr@   rA   rB   rC   scapy.supersocketrD   scapy.utilsrE   rF   scapy.volatilerG   rH   rI   scapy.layers.gssapirJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   scapy.layers.inetrU   rV   typingrW   rY   r   rX  r\  r   r   r   r~  r  r   r(  r   r   r  r  r  r4  r1  rL  r=  r9  rN  rL  rP  AD_IF_RELEVANTr  rZ  ADMANDATORYFORKDCrz  rs  rq  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   r2  rK  rt   rN  rh  r   rg  rk  rn  r   r   rq  r{  r}   r~   r   r   r   r   r   r   r   r  r   r  r  ru  r  r  r  r  r  r"  r%  r  rh  r  r  rd  r`  rs  r}  r  r  r  r  r  r  rZ   r  r  r  r  r  r  r  r  r  r   r   r  r  r  r  r  r  r   r   r   <module>r     s"  ( (T # " " " " " 2 2 2 2 2 2 2 2 2 2       				 				             9 9 9 9 9 9 9 9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                                 ) ( ( ( ( ( + + + + + + + +       % % % % % % # # # # # #                                                     6 L K K K K K K K K K K K * * * * * * & & & & & & & & < < < < < < < < < <                          ' & & & & & & &         Z   4 &	 
 
          K      F &
}} } ~	
   % &      ! !  $!" $#$ 	+  4wy } y	
 {  y } ~        !" #$ 	! /  6i
 i
 i
 i
 i
K i
 i
 i
X
 
 
 
 
K 
 
 
.    .   E
 E
 E
 E
 E
{ E
 E
 E
P  







 
 
 
 
 
+ 
 
 
 
 

 
 
 
 
%= 
 
 
  *	
  { '    	    	  	,!" #$ 	"%& 	''	.
 
 
 
 
K 
 
 
        #- ! 	 	 	 	 	; 	 	 	  , !          ) ! % 0 ! &|&& |& 	&
 & & & & & & 	& & 	& 	& 	&  !&" 	 #& &$ 	%&& '&( )&* 	!+&, 	-&. 	/&0 	1&2 	3&4 	5&6 	7&8 9&: ;&< 	=&> 	?&@ A&B 	C&D 	E& &F 
!		K& & &P    2   ,	 	 	 	 	[ 	 	 	    K    #     {   Q Q Q Q Q Q Q Q
 ! 

 
 
 
 
 
 
 
S S S S S+ S S S
 " 

 
 
 
 
 
 
 
    K    -     [    &        :    $<            "; #         "; #     6    "> # U U U U U+ U U U
 !4 "     F   0 - 
    [   " & 
        ) 
        ) 
    k       K   2     8       ;   
 
 
 
 
 
 
 
                  {       k       k     +,<=     +       ;   $ # 
       / / / / / / / /
    ;    #     +    #        4    {    ( x  	
  	 	     
 
 
   !" #$ 	)  4
 
 
 
 
 
 
 
&         *" " " " "K " " "P9 9 9 9 9{ 9 9 9x nM&!$///y"m$GGGN$$Xr6MMMNNL,,..0@tTTT	        (           +    nM&!$///y"m$GGGN(BTBBB  
E(BT***L$DAAAL4$???LD-dCCC
 
           +       +    Lm$???i[tDDD
F7AD)))N_oo&7&7dKKK  M
	   L__..TBBBN[//"3"3$GGG  LOO--DAAAN[//"3"3$GGG  
E(BT***L--//=tLLLNgD111  N+RdKKK 7 B    ;       K          .          >	 	 	 	 	 	 	 	    ;   (	 	 	 	 	{ 	 	 	    [   4
 
 
 
 
{ 
 
 
% % % % %+ % % %P    [   B= = = = = = = =
    3   2l l l l l l l ld    V       +       k   (    +       +       ;       &   8* * * * * * * *b %#1 $ 


 	 
	 
      V   B    {   $" " " " "& " " "" &9 k "
" " " " "6 " " "( &: k "2 2 2 2 2 2 2 2
 &H k "  
" 
" 
" 
" 
"& 
" 
" 
" &1 k "" " " " "6 " " ". &2 k "    K    &3 k " (6# $1? - .)7% & ._ # # # # #{ # # #. sHB ' ' ' ' sHB ' ' ' ' C2 . . . .%/ k "%/ k "%. k "%0 k "%0 k "        x ( ( ( s%R 0 0 0 0 C"" - - - -    &   B    {   !. !. !. !. !.& !. !. !.J "!)	 	    V       f    sG3 ' ' ' ' sG3 ' ' ' ' c;c 5 5 5 5 c;c 5 5 5 5	 	 	 	 	v 	 	 	 g & & & s$C 0 0 0 0 C! - - - -u u u u uY u u up
 
 
" " " GN6 6 6 6| 

C C C CL   "   , 
	
m+ m+ m+ m+fX+ X+ X+ X+ X+# X+ X+ X+ X+ X+r   