
    i                     \   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJrJ	r	J
r
JrJrJrJrJrJrJrJrJr  SSKJr   SES\R,                  \\\R2                  4   S\R4                  \R6                     S\R8                  \\4   4S jjr SES\R,                  \\\R2                  4   S\R4                  \R6                     S\4S	 jjr SES\R,                  \\R>                  4   S\R4                  \R6                     S\R8                  \\R@                  4   4S
 jjr!  SFS\R,                  S   S\R4                  \   S\R4                  \   S\R,                  \\R8                  \\R@                  4   4   4S jjr"S\R,                  \#\4   SS4S jr$S\R,                  \#\4   SS4S jr%\RL                  " SSS/5      r' \RL                  " SSS/5      r(  " S S\R>                  5      r) " S S\R>                  5      r* " S S\RV                  5      r, " S S\RV                  5      r- " S S\RV                  5      r. " S  S!\RV                  5      r/ " S" S#\RV                  5      r0 " S$ S%\RV                  5      r1 " S& S'\RV                  5      r2 " S( S)\35      r4 " S* S+\4S,9r5 " S- S.\55      r6 " S/ S0\55      r7 " S1 S2\65      r8 " S3 S4\75      r9 " S5 S6\55      r: " S7 S8\55      r; " S9 S:\55      r< " S; S<5      r= " S= S>5      r> " S? S@5      r? " SA SB5      r@ " SC SD5      rAg)Ga  Kerberos Messages

Various Kerberos message structures that is used by 'python -m spnego' to unpack raw ASN.1 values and print out a
pretty structure for end users. This code is not used in the actual spnego authentication processes and is just used
for debugging purposes.
    N)	ASN1ValueTagClassextract_asn1_tlvget_sequence_valueunpack_asn1unpack_asn1_bit_stringunpack_asn1_general_stringunpack_asn1_generalized_timeunpack_asn1_integerunpack_asn1_octet_stringunpack_asn1_sequenceunpack_asn1_tagged_sequenceto_textvalue	enum_typereturnc                     S[         R                  S[         R                  [        [        4   4S jnU(       a  U" U5      $ U" U 5      $ )zJGets the human friendly labels of a known enum and what value they map to.vr   c                     [         R                  " [         R                  [        [        4   [        U SS 5      " 5       5      $ )Nnative_labelsc                      0 $ N r       J/home/james-whalen/.local/lib/python3.13/site-packages/spnego/_kerberos.py<lambda>2_enum_labels.<locals>.get_labels.<locals>.<lambda>*   s    VXr   )typingcastDictintstrgetattr)r   s    r   
get_labels _enum_labels.<locals>.get_labels)   s,    {{6;;sCx0'!_j2Y2[\\r   )r   Anyr!   r"   r#   )r   r   r%   s      r   _enum_labelsr(   #   sB    ]fjj ]V[[c%: ] %.:i D:e3DDr   c                 $   Sn[        U [        R                  5      (       a  U R                  n[	        X5      n[        U [        R                  5      (       a  U R
                  OU n UR                  5        H  u  pEX:X  d  M  Un  O   U< SU < S3$ )zBParses an IntEnum into a human representative object of that enum.UNKNOWNz ())
isinstanceenumEnumnamer(   r   items)r   r   	enum_namelabelsr   r/   s         r   
parse_enumr3   /   st    
 I%##JJ	%+F%eTYY77EKKUE<<>:I "
 "5))r   c                     [        U 5      n/ n[        X5      n[        U 5      n UR                  5        H)  u  pVX-  U:X  d  M  X) -  n UR                  SXe4-  5        M+     U S:w  a  UR                  SU -  5        UUS.$ )z3Parses an IntFlag into each flag value that is set.z%s (%d)r   zUNKNOWN (%d))rawflags)r"   r(   r0   append)r   r   	raw_valuer6   r2   r   r/   s          r   parse_flagsr9   C   s    
 E
IE%+FJE<<>9>RKELLdY./ "
 z^e+,  r   token)KerberosV5MsgPADataPAETypeInfo2EncryptedDataTicket
KdcReqBodysecretencodingc                 &  ^^^ U(       a  UOSmS[         R                  S[         R                  4S jnS[        R                  S[        4S jnS[        S[        4U4S jjmS[        S[        4S jnS[
        S[         R                  [        [         R                  4   4U4S jjnS[        S[         R                  [        [         R                  4   4U4S	 jjnS[         R                  S[         R                  [        [         R                  [        [         R                  4   4   4UU4S
 jjn[        U [        5      (       a  U" U 5      $ 0 n	[        U S0 5       GH&  u  pn[        X5      n/ n[        U[        5      (       a  UR                  US   5        US   n[        R                  U[        R                  [         [        R"                  [$        [        R                  U[        R&                  T[        R                  U[        R(                  U[        R*                  U[        R,                  U0	U   nUc  SnO=[        U[.        5      (       a  U Vs/ s H  nUb	  U" U/UQ76 OSPM     nnO	U" U/UQ76 nUX'   GM)     U	$ s  snf )z(Parses a KerberosV5Msg object to a dict.zutf-8r   r   c                     U $ r   r   r   s    r   parse_default+parse_kerberos_token.<locals>.parse_defaultd   s    r   c                 "    U R                  5       $ r   )	isoformatrE   s    r   parse_datetime,parse_kerberos_token.<locals>.parse_datetimeg   s      r   c                    > [        U TSS9$ )Nreplace)rB   errorsr   )r   text_encodings    r   
parse_text(parse_kerberos_token.<locals>.parse_textj   s    u}YGGr   c                 J    [         R                  " U 5      R                  5       $ r   )base64	b16encodedecoderE   s    r   parse_bytes)parse_kerberos_token.<locals>.parse_bytesm   s    &--//r   c                    > [        U R                  5      U R                   Vs/ s H  nT" U5      PM     snS.$ s  snf )N)	name-typename-string)r3   	name_typer   )r   r   rP   s     r   parse_principal_name2parse_kerberos_token.<locals>.parse_principal_namep   s6    #EOO438;;?;aJqM;?
 	
?s   ;c                 T   > [        U R                  5      T" U R                  5      S.$ )N)	addr-typeaddress)r3   	addr_typer   )r   rP   s    r   parse_host_address0parse_kerberos_token.<locals>.parse_host_addressv   s%    #EOO4!%++.
 	
r   c                    > [        U TT5      $ r   )parse_kerberos_token)r   rA   rO   s    r   parse_token)parse_kerberos_token.<locals>.parse_token|   s    #E6=AAr   	PARSE_MAP   r   N)r   r'   datetimer#   bytesPrincipalNamer!   HostAddressUnionr,   r$   tupler7   	ParseTypedefaultr-   r3   r6   r9   textprincipal_namehost_addressr:   list)r:   rA   rB   rF   rJ   rV   r\   rb   rf   msgr/   	attr_name	attr_type
attr_value
parse_args
parse_funcparsed_valuer   rP   rO   s    `                @@r   re   re   \   s:    !)HgMVZZ FJJ !h// !C !H% HC H05 0S 0
M 
fkk#vzz/6R 

+ 
&++c6::o2N 
B6:: B&,,sFKKVZZ<X7X*Y B B %5!!
C&-e["&E"U.

i''il+!!I }NNJOO[NNJOO[$$&:""$6OO[
'
 
'
 L
D))[ef[eVW!-Jq6:6TQ[eLfL &j>:>L 	; 'F> J gs   Jrm   c           	          [        U 5      n[        [        USSS[        5      5      n[        USSS[        5      n[        X#5      $ )z(Unpacks an ASN.1 value to a HostAddress.r   rm   r_   ri   r`   )r   KerberosHostAddressTyper   r   r   rm   )r   sr[   r/   s       r   unpack_hostnamer      sD    #E*A'(:1aP[]p(qrIaM9>VWDy''r   rl   c           	          [        U 5      n[        [        USSS[        5      5      n[        USSS[        5       Vs/ s H  n[        U5      PM     nn[        X$5      $ s  snf )z*Unpacks an ASN.1 value to a PrincipalName.r   rl   rY   ri   rZ   )r   KerberosPrincipalNameTyper   r   r   r	   rl   )r   r   r[   nr/   s        r   unpack_principal_namer      sm    #E*A)*<Q?T_at*uvI $Aq/=J^__A 	#1%_ 	 
 ))s   Ara   r[   c                   V    \ rS rSrSrSrSr\S\R                  S \
4   4S j5       rSrg)	KerberosAPOptions       @      r   c                 f    [         R                  S[         R                  S[         R                  S0$ )Nzmutual-requiredzuse-session-keyreserved)r   mutual_requireduse_session_keyr   clss    r   r   KerberosAPOptions.native_labels   s1     --/@--/@&&

 	
r   r   N)__name__
__module____qualname____firstlineno__r   r   r   classmethodr   r!   r#   r   __static_attributes__r   r   r   r   r      s9     O OH
fkk*=s*BC 
 
r   r   c                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#\$S"\%RL                  S \'4   4S# j5       r(S$r)g%)&KerberosKDCOptions   l        i   @i    i   i   i   i   i   i   i  @ i    i   i   i   i   i   i   i @  i    i   i   i   i      r   r   r               ri   r   c                 ,   0 [         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R
                  S_[         R                  S_[         R                  S_[         R                  S_[         R                  S	_[         R                  S
_[         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R                   S_[         R"                  S_[         R$                  S[         R&                  S[         R(                  S[         R*                  S[         R,                  S[         R.                  S[         R0                  S[         R2                  S[         R4                  S[         R6                  S[         R8                  S[         R:                  S[         R<                  S[         R>                  S[         R@                  S 0E$ )!Nr   forwardable	forwarded	proxiableproxyzallow-postdate	postdatedunused7	renewableunused9unused10zopt-hardware-authunused12unused13zconstrained-delegationcanonicalizezrequest-anonymousunused17unused18unused19unused20unused21unused22unused23unused24unused25zdisable-transited-checkzrenewable-okzenc-tkt-in-skeyunused29renewvalidate)!r   r   r   r   r   r   allow_postdater   r   r   r   r   opt_hardware_authr   r   constrained_delegationr   request_anonymousr   r   r   r   r   r   r   r   r   disable_transited_checkrenewable_okenc_tkt_in_skeyr   r   r   r   s    r   r    KerberosKDCOptions.native_labels  s   !
''!
**M!
 ((+!
 ((+	!

 $$g!
 --/?!
 ((+!
 &&	!
 ((+!
 &&	!
 ''!
 002E!
 ''!
 ''!
 557O!
  ++^!!
" 002E#!
$ ''''''''''''''''''668Q++^..0A''$$g''A!
 !	
r   r   N)*r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r#   r   r   r   r   r   r   r      s    HKIIENIGIGH"HH'L"HHHHHHHHH(L OHEH"
fkk*>*CD "
 "
r   r   c                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSr\S\R(                  S \4   4S j5       rSrg)KerberosEncryptionTypei:  ri   r      r      r                           r   c                    [         R                  S[         R                  S[         R                  S[         R                  S[         R
                  S[         R                  S[         R                  S[         R                  S[         R                  S	[         R                  S
[         R                  S[         R                  S[         R                  S[         R                  S0$ )NDES_CBC_CRCDES_CBC_MD4DES_CBC_MD5DES_CBC_RAWDES3_CBC_RAWDES3_CBC_SHA1AES128_CTS_HMAC_SHA1_96AES256_CTS_HMAC_SHA1_96AES128_CTS_HMAC_SHA256_128AES256_CTS_HMAC_SHA384_192RC4_HMACRC4_HMAC_EXPCAMELLIA128_CTS_CMACCAMELLIA256_CTS_CMAC)r   des_cbc_crcdes_cbc_md4des_cbc_md5des_cbc_rawdes3_cbc_rawdes3_cbc_sha1aes128_cts_hmac_sha1_96aes256_cts_hmac_sha1_96aes128_cts_hmac_sha256_128aes256_cts_hmac_sha384_192rc4_hmacrc4_hmac_expcamellia128_cts_cmaccamellia256_cts_cmacr   s    r   r   $KerberosEncryptionType.native_labelsJ  s     #..".."..".."//"00/"::<U"::<U"==?["==?["++Z"//"779O"779O
 	
r   r   N)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   :  sv    KKKKLM$$!'!'HL!!
fkk*BC*GH 
 
r   r   c                   Z   \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0S/r1S0r2S1r3S2r4S3r5S4r6S5r7S6r8S7r9S8r:S9r;S:r<S;r=S<r>S=r?S>r@S?rAS@rBSArCSBrDSCrESDrFSErG\HSF\IR                  S \K4   4SG j5       rLSHrMgI)JKerberosErrorCodei_  r   ri   r   r   r      r      r   	   
                  r   r   r   r   r         r   r   r   r               r   !   "   #   $   %   &   '   (   )   *   ,   -   .   /   0   1   2   3   4   <   =   >   5   r   A   B   C   D   E   F   G   H   I   J   K   L   r   c                 	   0 [         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R
                  S_[         R                  S_[         R                  S_[         R                  S_[         R                  S	_[         R                  S
_[         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R                   S_[         R"                  S_0 [         R$                  S_[         R&                  S_[         R(                  S_[         R*                  S_[         R,                  S_[         R.                  S_[         R0                  S_[         R2                  S_[         R4                  S_[         R6                  S_[         R8                  S_[         R:                  S_[         R<                  S_[         R>                  S_[         R@                  S _[         RB                  S!_[         RD                  S"_E0 [         RF                  S#_[         RH                  S$_[         RJ                  S%_[         RL                  S&_[         RN                  S'_[         RP                  S(_[         RR                  S)_[         RT                  S*_[         RV                  S+_[         RX                  S,_[         RZ                  S-_[         R\                  S._[         R^                  S/_[         R`                  S0_[         Rb                  S1_[         Rd                  S2_[         Rf                  S3_E0 [         Rh                  S4_[         Rj                  S5_[         Rl                  S6_[         Rn                  S7_[         Rp                  S8_[         Rr                  S9_[         Rt                  S:_[         Rv                  S;_[         Rx                  S<_[         Rz                  S=_[         R|                  S>_[         R~                  S?_[         R                  S@_[         R                  SA_[         R                  SB_[         R                  SC_[         R                  SD_E$ )ENKDC_ERR_NONEKDC_ERR_NAME_EXPKDC_ERR_SERVICE_EXPKDC_ERR_BAD_PVNOKDC_ERR_C_OLD_MAST_KVNOKDC_ERR_S_OLD_MAST_KVNOKDC_ERR_C_PRINCIPAL_UNKNOWNKDC_ERR_S_PRINCIPAL_UNKNOWNKDC_ERR_PRINCIPAL_NOT_UNIQUEKDC_ERR_NULL_KEYKDC_ERR_CANNOT_POSTDATEKDC_ERR_NEVER_VALIDKDC_ERR_POLICYKDC_ERR_BADOPTIONKDC_ERR_ETYPE_NOSUPPKDC_ERR_SUMTYPE_NOSUPPKDC_ERR_PADATA_TYPE_NOSUPPKDC_ERR_TRTYPE_NOSUPPKDC_ERR_CLIENT_REVOKEDKDC_ERR_SERVICE_REVOKEDKDC_ERR_TGT_REVOKEDKDC_ERR_CLIENT_NOTYETKDC_ERR_SERVICE_NOTYETKDC_ERR_KEY_EXPIREDKDC_ERR_PREAUTH_FAILEDKDC_ERR_PREAUTH_REQUIREDKDC_ERR_SERVER_NOMATCHKDC_ERR_MUST_USE_USER2USERKDC_ERR_PATH_NOT_ACCEPTEDKDC_ERR_SVC_UNAVAILABLEKRB_AP_ERR_BAD_INTEGRITY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_TYPEKRB_AP_ERR_MODIFIEDKRB_AP_ERR_BADORDERKRB_AP_ERR_BADKEYVERKRB_AP_ERR_NOKEYKRB_AP_ERR_MUT_FAILKRB_AP_ERR_BADDIRECTIONKRB_AP_ERR_METHODKRB_AP_ERR_BADSEQKRB_AP_ERR_INAPP_CKSUMKRB_AP_PATH_NOT_ACCEPTEDKRB_ERR_RESPONSE_TOO_BIGKRB_ERR_GENERICKRB_ERR_FIELD_TOOLONGKDC_ERROR_CLIENT_NOT_TRUSTEDKDC_ERROR_KDC_NOT_TRUSTEDKDC_ERROR_INVALID_SIGKDC_ERR_KEY_TOO_WEAKKDC_ERR_CERTIFICATE_MISMATCHKRB_AP_ERR_NO_TGTKDC_ERR_WRONG_REALM KRB_AP_ERR_USER_TO_USER_REQUIREDKDC_ERR_CANT_VERIFY_CERTIFICATEKDC_ERR_INVALID_CERTIFICATEKDC_ERR_REVOKED_CERTIFICATE!KDC_ERR_REVOCATION_STATUS_UNKNOWN%KDC_ERR_REVOCATION_STATUS_UNAVAILABLEKDC_ERR_CLIENT_NAME_MISMATCHKDC_ERR_KDC_NAME_MISMATCH)Er   nonename_expservice_expbad_pvnoc_old_mast_kvnos_old_mast_kvnoc_principal_unknowns_principal_unknownprincipal_not_uniquenull_keycannot_postdatenever_validpolicy	badoptionetype_nosuppsumtype_nosupppadata_type_nosupptrtype_nosuppclient_revokedservice_revokedtgt_revokedclient_notyetservice_notyetkey_expiredpreauth_failedpreauth_requiredserver_nomatchmust_use_user2userpath_not_acceptedkdc_svc_unavailableap_bad_integrityap_txt_expired
ap_tkt_nyv	ap_repeat
ap_not_useap_badmatchap_skew
ap_badaddrap_badversionap_msg_typeap_modifiedap_badorderap_badkeyverap_nokeyap_mut_failap_baddirection	ap_method	ap_badseqap_inapp_cksumap_path_not_acceptedresponse_too_biggenericfield_toolongkdc_client_not_trustedkdc_not_trustedkdc_invalid_sigkdc_key_too_weakkdc_certificate_mismatch	ap_no_tgtkdc_wrong_realmap_user_to_user_requiredkdc_cant_verify_certificatekdc_invalid_certificatekdc_revoked_certificatekdc_revocation_status_unknown!kdc_revocation_status_unavailablekdc_client_name_mismatchkdc_name_mismatchr   s    r   r   KerberosErrorCode.native_labels  s   E
""NE
&&(:E
 ))+@E
 &&(:	E

 --/HE
 --/HE
 113PE
 113PE
 224RE
 &&(:E
 --/HE
 ))+@E
 $$&6E
 '')<E
 **,BE
  ,,.F!E
" 002N#E
$ ++-D%E
& ,,.F'E
( --/H)E
* ))+@+E
, ++-D-E
. ,,.F/E
0 ))+@1E
2 ,,.F3E
4 ..0J5E
6 ,,.F7E
8 002N9E
: //1L;E
< 113L=E
> ..0J?E
@ ,,.FAE
B ((*>CE
D '')<EE
F ((*=GE
H ))+@IE
J %%'8KE
L ((*>ME
N ++-DOE
P ))+@QE
R ))+@SE
T ))+@UE
V **,BWE
X &&(:YE
Z ))+@[E
\ --/H]E
^ '')<_E
` '')<aE
b ,,.FcE
d 224NeE
f ..0JgE
h %%'8iE
j ++-DkE
l 446TmE
n --/JoE
p --/FqE
r ..0FsE
t 668VuE
v '')<wE
x --/DyE
z 668Z{E
| 99;\}E
~ 557TE
@ 557TAE
B ;;=`CE
D ??AhEE
F 668VGE
H //1LIE
 E	
r   r   N)Nr   r   r   r   rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r!   r#   r   r   r   r   r   r   r   _  s   DHKHOOHOKFILNMNOKMNKNNNJIJKGJMKKKLHKOIINGMOO!IO!"$  $&!(*%!F
fkk*=s*BC F
 F
r   r   c                   j    \ rS rSrSrSrSrSrSrSr	Sr
S	r\S
\R                  S \4   4S j5       rSrg)KerberosMessageTypei  r   r   r   r   r   r   r      r   c                    [         R                  S[         R                  S[         R                  S[         R                  S[         R
                  S[         R                  S[         R                  S[         R                  S0$ )	Nr*   zAS-REQzAS-REPzTGS-REQzTGS-REPAP-REQAP-REP	KRB-ERROR)	r  unknownas_reqas_reptgs_reqtgs_repap_reqap_reperrorr   s    r   r   !KerberosMessageType.native_labels  sf      ''&&&&''''&&&&%%{	
 		
r   r   N)r   r   r   r   r  r  r  r  r  r  r  r  r   r   r!   r#   r   r   r   r   r   r  r    sR    GFFGGFFE

fkk*?*DE 

 

r   r  c                   Z   \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!Sr"Sr#S r$S!r%S"r&S#r'S$r(S%r)S&r*S'r+S(r,S)r-S)r.S*r/S+r0S,r1S-r2S.r3S/r4S0r5S1r6S2r7S3r8S4r9S5r:S6r;S7r<S8r=S9r>S:r?S;r@S<rAS=rBS>rCS?rDS/rES@rFSArG\HSB\IR                  S \K4   4SC j5       rLSDrMgE)FKerberosPADataTypei	  ri   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  e   f   g   h   i   j   k   l   m   o   p   r                                                                           r   c                    0 [         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R
                  S_[         R                  S_[         R                  S_[         R                  S_[         R                  S	_[         R                  S
_[         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R                  S_[         R                   S_[         R"                  S_0 [         R$                  S_[         R&                  S_[         R(                  S_[         R*                  S_[         R,                  S_[         R.                  S_[         R0                  S_[         R2                  S_[         R4                  S_[         R6                  S_[         R8                  S_[         R:                  S_[         R<                  S_[         R>                  S_[         R@                  S _[         RB                  S!_[         RD                  S"_E0 [         RF                  S#_[         RH                  S$_[         RJ                  S%_[         RL                  S&_[         RN                  S'_[         RP                  S(_[         RR                  S)_[         RT                  S*_[         RV                  S+_[         RX                  S,_[         RZ                  S-_[         R\                  S._[         R^                  S/_[         R`                  S0_[         Rb                  S1_[         Rd                  S2_[         Rf                  S3_E0 [         Rh                  S4_[         Rj                  S5_[         Rl                  S6_[         Rn                  S7_[         Rp                  S8_[         Rr                  S9_[         Rt                  S:_[         Rv                  S;_[         Rx                  S<_[         Rz                  S=_[         R|                  S>_[         R~                  S?_[         R                  S@_[         R                  SA_[         R                  SB_[         R                  SC_E$ )DNz
PA-TGS-REQzPA-ENC-TIMESTAMPz
PA-PW-SALTr   zPA-ENC-UNIX-TIMEzPA-SANDIA-SECUREIDz	PA-SESAMEz
PA-OSF-DCEzPA-CYBERSAFE-SECUREIDzPA-AFS3-SALTzPA-ETYPE-INFOzPA-SAM-CHALLENGEzPA-SAM-RESPONSEzPA-PK-AS-REQ_OLDzPA-PK-AS-REP_OLDzPA-PK-AS-REQzPA-PK-AS-REPzPA-PK-OCSP-RESPONSEPA-ETYPE-INFO2z-PA-USE-SPECIFIED-KVNO or PA-SVR-REFERRAL-INFOzPA-SAM-REDIRECTzPA-GET-FROM-TYPED-DATAz	TD-PADATAzPA-SAM-ETYPE-INFOzPA-ALT-PRINCzPA-SERVER-REFERRALzPA-SAM-CHALLENGE2zPA-SAM-RESPONSE2zPA-EXTRA-TGTzTD-PKINIT-CMS-CERTIFICATESzTD-KRB-PRINCIPALzTD-KRB-REALMzTD-TRUSTED-CERTIFIERSzTD-CERTIFICATE-INDEXzTD-APP-DEFINED-ERRORzTD-REQ-NONCEz
TD-REQ-SEQTD_DH_PARAMETERSzTD-CMS-DIGEST-ALGORITHMSzTD-CERT-DIGEST-ALGORITHMSzPA-PAC-REQUESTzPA-FOR_USERzPA-FOR-X509-USERzPA-FOR-CHECK_DUPSzPA-AS-CHECKSUMzPA-FX-COOKIEzPA-AUTHENTICATION-SETzPA-AUTH-SET-SELECTEDz
PA-FX-FASTzPA-FX-ERRORzPA-ENCRYPTED-CHALLENGEzPA-OTP-CHALLENGEzPA-OTP-REQUESTzPA-OTP-CONFIRMzPA-OTP-PIN-CHANGEzPA-EPAK-AS-REQzPA-EPAK-AS-REPPA_PKINIT_KXPA_PKU2U_NAMEzPA-REQ-ENC-PA-REPPA_AS_FRESHNESSzPA-SPAKEzKERB-KEY-LIST-REQzKERB-KEY-LIST-REPzPA-SUPPORTED-ETYPESzPA-EXTENDED_ERRORzPA-PAC-OPTIONS)Dr  r  enc_timestamppw_saltr   enc_unix_timesandia_secureidsesameosf_dcecybersafe_secureid	afs3_salt
etype_infosam_challengesam_responsepk_as_req_oldpk_as_rep_old	pk_as_req	pk_as_reppk_ocsp_responseetype_info2use_specified_kvnosam_redirectget_from_typed_data	td_padatasam_etype_info	alt_princserver_referralsam_challenge2sam_response2	extra_tgttd_pkinit_cms_certificatestd_krb_principaltd_krb_realmtd_trusted_certifierstd_certificate_indextd_app_defined_errortd_req_nonce
td_req_seqtd_dh_parameterstd_cms_digest_algorithmstd_cert_digest_algorithmspac_requestfor_userfor_x509_userfor_check_dupsas_checksum	fx_cookieauthentication_setauth_set_selectedfx_fastfx_errorencrypted_challengeotp_challengeotp_requestotp_confirmotp_pin_changeepak_as_reqepak_as_rep	pkinit_kx
pku2u_name
enc_pa_repas_freshnessspakekerb_key_list_reqkerb_key_list_repsupported_etypesextended_errorpac_optionsr   s    r   r    KerberosPADataType.native_labelsO  sx   D
&&D
,,.@D
 &&D
 ''	D

 ,,.@D
 ..0DD
 %%{D
 &&D
 113JD
 ((.D
 ))?D
 ,,.@D
 ++->D
 ,,.@D
 ,,.@D
  ((.!D
" ((.#D
$ //1F%D
& **,<'D
( 113b)D
* ++->+D
, 224L-D
. ((+/D
0 --/B1D
2 ((.3D
4 ..0D5D
6 --/B7D
8 ,,.@9D
: ((.;D
< 99;W=D
> //1C?D
@ ++^AD
B 446MCD
D 335KED
F 335KGD
H ++^ID
J ))<KD
L //1CMD
N 779SOD
P 88:UQD
R **,<SD
T ''UD
V ,,.@WD
X --/BYD
Z **,<[D
\ ((.]D
^ 113J_D
` 002HaD
b &&cD
d ''eD
f 224LgD
h ,,.@iD
j **,<kD
l **,<mD
n --/BoD
p **,<qD
r **,<sD
t ((.uD
v ))?wD
x ))+>yD
z ++->{D
| $$j}D
~ 002ED
@ 002EAD
B //1FCD
D --/BED
F **,<GD
 D	
r   r   N)Nr   r   r   r   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  svr_referral_infor  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r   r   r!   r#   r   r   r   r   r   r  r  	  s   GMGHMOFGIJMLMMIIKLINIONMI!$LLJ" #KHMNKIGHMKKNKKIJJLENKE
fkk*>*CD E
 E
r   r  c                   n    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
r\S\R                  S \4   4S j5       rSrg)r   i  r   ri   r   r   r   r   r   r   r   r   c                 &   [         R                  S[         R                  S[         R                  S[         R                  S[         R
                  S[         R                  S[         R                  S[         R                  S[         R                  S	0	$ )
Nz
NT-UNKNOWNzNT-PRINCIPALzNT-SRV-INSTz
NT-SRV-HSTzNT-SRV-XHSTzNT-UIDzNT-X500-PRINCIPALzNT-SMTP-NAMEzNT-ENTERPRISE)
r   r  	principalsrv_instsrv_hstsrv_xhstuidx500_principal	smtp_name
enterpriser   s    r   r   'KerberosPrincipalNameType.native_labels  sr     &--|%//%..%--|%..%))8%446I%//%00/

 
	
r   r   N)r   r   r   r   r  r)  r*  r+  r,  r-  r.  r/  r0  r   r   r!   r#   r   r   r   r   r   r   r     sW    GIHGH
CNIJ
fkk*Es*JK 
 
r   r   c                   n    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
r\S\R                  S \4   4S j5       rSrg)r~   i  r   r   r   r   r   r   r   r   r   r   c                 &   [         R                  S[         R                  S[         R                  S[         R                  S[         R
                  S[         R                  S[         R                  S[         R                  S[         R                  S	0	$ )
NIPv4DirectionalChaosNetXNSISOzDECNET Phase IVzAppleTalk DDPNetBiosIPv6)
r~   ipv4directional	chaos_netxnsisodecnet_phase_ivapple_talk_ddpnetbiosipv6r   s    r   r   %KerberosHostAddressType.native_labels  sr     $((&#//#--z#''#''#335F#22O#++Y#((&

 
	
r   r   N)r   r   r   r   r;  r<  r=  r>  r?  r@  rA  rB  rC  r   r   r!   r#   r   r   r   r   r   r~   r~     sW    DKI
C
CONGD
fkk*CS*HI 
 
r   r~   c                   8    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrg)rp   i  r   ri   r   r   r   r   r   r   r   r   N)r   r   r   r   rq   r-   r6   rj   rr   rk   rs   rt   r:   r   r   r   r   rp   rp     s/    GDEHDENLEr   rp   c                      ^  \ rS rSr% 0 r\R                  \\R                  \S 4   4   \S'   S\R                  S\R                  SS4S jr
S\R                  \\4   SS 4U 4S	 jjrS
rU =r$ )_KerberosMsgTypei  _KerberosMsgType__registryargskwargsr   Nc                     [        U SS5      nX0R                  ;  a  0 U R                  U'   [        U SS 5      nUb  X R                  U   U'   g g )NPVNOr   MESSAGE_TYPE)r$   rH  )r   rI  rJ  pvnomsg_types        r   __init___KerberosMsgType.__init__  sT    
 sFA&~~%#%CNN4 35-0NN4 *  r   sequencec                    > SnSU;  a  Sn[        X   5      n[        XS-      5      nU R                  U   R                  X@5      n[        [        U]  U5      $ )Nr   ri   )r   rH  getsuperrG  __call__)r   rR  pvno_idxrN  message_typenew_cls	__class__s         r   rV  _KerberosMsgType.__call__  sa    
 HH"8#56*8qL+AB..&**<=%w8BBr   r   )r   r   r   r   rH  r   r!   r"   __annotations__r'   rP  r   rV  r   __classcell__)rZ  s   @r   rG  rG    s    IKJCS2D-D!EEFK1zz1 **1 
	1C++c9n-C 
C Cr   rG  c                       \ rS rSr\R
                  rSrS\R                  \
\4   SS4S jr\S\R                  \\4   SS 4S j5       rS	rg)
r;   i  r   rR  r   Nc                     Xl         g r   rR  selfrR  s     r   rP  KerberosV5Msg.__init__  s     r   r   c                 .    [        U 5      n[        U5      $ r   )r   r;   )r   msg_sequences     r   unpackKerberosV5Msg.unpack  s    259\**r   r`  )r   r   r   r   r  r  rM  rL  r   r!   r"   r   rP  staticmethodrn   rk   rf  r   r   r   r   r;   r;     sb    &..LD!S)^!< ! ! +fll9e#34 + + +r   r;   )	metaclassc                       \ rS rSrSr\R                  rSS\R                  4SS\R                  4SS\R                  4SS	\R                  4/rS
\R                  \\4   SS4S jrSrg)KrbAsReqi	  a  The KRB_AS_REQ message.

The KRB_AS_REQ message is used when the client wishes to retrieve a the initial ticket for a service. The
KRB_TGS_REQ message is identical except for the tag and msg-type is used when retrieving additional tickets for a
service.

The ASN.1 definition for the KDC-REQ structure is defined in `RFC 4120 5.4.1`_::

    KDC-REQ         ::= SEQUENCE {
        -- NOTE: first tag is [1], not [0]
        pvno            [1] INTEGER (5) ,
        msg-type        [2] INTEGER (10 -- AS -- | 12 -- TGS --),
        padata          [3] SEQUENCE OF PA-DATA OPTIONAL
                            -- NOTE: not empty --,
        req-body        [4] KDC-REQ-BODY
    }

Args:
    sequence: The ASN.1 sequence value as a dict to unpack.

Attributes:
    padata (PAData): The pre-authentication data.
    req_body (KdcReqBody): The body of the request.

.. _RFC 4120 5.4.1:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.4.1
rN  rL  msg-typerM  padatareq-bodyreq_bodyrR  r   Nc                     S[         R                  [        [        4   S[         R                  4S jn[        USSSU5      U l        [        USSS[        R                  5      U l	        g )	Nr   r   c                 j    [        U 5       Vs/ s H  n[        R                  U5      PM     sn$ s  snf r   r   r<   rf  r   ps     r   unpack_padata(KrbAsReq.__init__.<locals>.unpack_padata0  *    .B5.IJ.IFMM!$.IJJJ   0r   zKDC-REQpa-datar   rn  )
r   rn   r   rk   Listr   rm  r@   rf  ro  rb  rR  ru  s      r   rP  KrbAsReq.__init__/  sZ    	Ki.>!? 	KFKK 	K )1iMZ*8Q	:zO`O`ar   )rm  ro  )r   r   r   r   __doc__r  r  rM  rp   rq   r-   r:   rh   r   r!   r"   r   rP  r   r   r   r   rk  rk  	  sz    8 '--L 
**+	^Y^^4	8Y__-	Z1	IbS)^!< b br   rk  c            	       (   \ rS rSrSr\R                  rSS\R                  4SS\R                  4SS\R                  4SS\R                  4S	S	\R                  4S
S
\R                  4SS\R                  4/rS\R                   \\4   SS4S jrSrg)KrbAsRepi7  a  The KRB_AS_REP message.

The KRB_AS_REP message is used for a reply from the KDC to a KRB_AS_REQ message. The KRB_TGS_REP message is
identical except for the tag and msg-type.

The ASN.1 definition for the KDC-REP structure is defined in `RFC 4120 5.4.2`_::

    KDC-REP         ::= SEQUENCE {
        pvno            [0] INTEGER (5),
        msg-type        [1] INTEGER (11 -- AS -- | 13 -- TGS --),
        padata          [2] SEQUENCE OF PA-DATA OPTIONAL
                            -- NOTE: not empty --,
        crealm          [3] Realm,
        cname           [4] PrincipalName,
        ticket          [5] Ticket,
        enc-part        [6] EncryptedData
                            -- EncASRepPart or EncTGSRepPart,
                            -- as appropriate
    }

Args:
    sequence: The ASN.1 sequence value as a dict to unpack.

Attributes:
    padata (PAData): The pre-authentication data.
    crealm (bytes): The client realm.
    cname (PrincipalName): The client principal name.
    ticket (Ticket): The newly issued ticket.
    enc_part (EncryptedData): The encrypted part of the message.

.. _RFC 4120 5.4.2:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.4.2
rN  rL  rl  rM  rm  crealmcnameticketenc-partenc_partrR  r   Nc                 x   S[         R                  [        [        4   S[         R                  4S jn[        USSSU5      U l        [        USSS[        5      U l        [        US	SS
[        5      U l
        [        USSS[        R                  5      U l        [        USSS[        R                  5      U l        g )Nr   r   c                 j    [        U 5       Vs/ s H  n[        R                  U5      PM     sn$ s  snf r   rr  rs  s     r   ru  (KrbAsRep.__init__.<locals>.unpack_padatag  rw  rx  r   zKDC-REPry  r   r  r   r  r   r  r   r  )r   rn   r   rk   rz  r   rm  r	   r  r   r  r?   rf  r  r>   r  r{  s      r   rP  KrbAsRep.__init__f  s    	Ki.>!? 	KFKK 	K )1iMZ(1iKef'!YI^_
(1i6==Y*8Q	:}OcOcdr   )r  r  r  rm  r  )r   r   r   r   r}  r  r  rM  rp   rq   r-   r:   rr   rs   rh   r   r!   r"   r   rP  r   r   r   r   r  r  7  s     D '--L 
**+	^Y^^4	8Y__-	8Y^^,	'9334	8Y__-	Z1IeS)^!< e er   r  c                   0    \ rS rSrSr\R                  rSrg)	KrbTgsReqiq  zLThe KRB_TGS_REQ is the same as KRB_AS_REQ but with a different MESSAGE_TYPE.r   N)	r   r   r   r   r}  r  r  rM  r   r   r   r   r  r  q      V&..Lr   r  c                   0    \ rS rSrSr\R                  rSrg)	KrbTgsRepiw  zLThe KRB_TGS_REP is the same as KRB_AS_REP but with a different MESSAGE_TYPE.r   N)	r   r   r   r   r}  r  r  rM  r   r   r   r   r  r  w  r  r   r  c                       \ rS rSrSr\R                  rSS\R                  4SS\R                  4SS\R                  4S	S	\R                  4S
S
\R                  4/rS\R                  \\4   SS4S jrSrg)KrbApReqi}  aF  The KRB_AP_REQ message.

The KRB_AP_REQ message contains is used to authenticate the initiator to an acceptor.

The ASN.1 definition for the KRB_AP_REQ structure is defined in `RFC 4120 5.5.1`_::

    AP-REQ          ::= [APPLICATION 14] SEQUENCE {
        pvno            [0] INTEGER (5),
        msg-type        [1] INTEGER (14),
        ap-options      [2] APOptions,
        ticket          [3] Ticket,
        authenticator   [4] EncryptedData -- Authenticator
    }

Args:
    sequence: The ASN.1 sequence value as a dict to unpack.

Attributes:
    ap_options (KerberosAPOptions): Options related to the AP request.
    ticket (Ticket): The ticket authenticating the client to the server.
    authenticator (EncryptedData): The encrypted authenticator.

.. _RFC 4120 5.5.1:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.5.1
rN  rL  rl  rM  
ap-options
ap_optionsr  authenticatorrR  r   Nc                    [        USSS[        5      n[        [        R                  " SU5      S   5      nX0l        [        USSS[        R                  5      U l        [        USSS	[        R                  5      U l	        g )
Nr   r  r  z<Ir   r   r  r   r  )
r   r   r   structrf  r  r?   r  r>   r  )rb  rR  raw_ap_optionsr  s       r   rP  KrbApReq.__init__  sh    +Ha<Qgh&v}}T>'J1'MN
$(1h&--X/!XXeXlXlmr   )r  r  r  )r   r   r   r   r}  r  r  rM  rp   rq   r-   r6   r:   rh   r   r!   r"   r   rP  r   r   r   r   r  r  }  s    4 '--L 
**+	^Y^^4	|Y__5	8Y__-	/9??;InS)^!< n nr   r  c                       \ rS rSrSr\R                  rSS\R                  4SS\R                  4SS\R                  4/rS	\R                  \\4   S
S4S jrSrg)KrbApRepi  aT  The KRB_AP_REP message.

The KRB_AP_REP is a response to an application request `KRB_AP_REQ`.

The ASN.1 definition for the KRB_AP_REP structure is defined in `RFC 4120 5.5.2`_::

    AP-REP          ::= [APPLICATION 15] SEQUENCE {
        pvno            [0] INTEGER (5),
        msg-type        [1] INTEGER (15),
        enc-part        [2] EncryptedData -- EncAPRepPart
    }

Args:
    sequence: The ASN.1 sequence value as a dict to unpack.

Attributes:
    enc_part (EncryptedData): The encrypted authenticator.

.. _RFC 4120 5.5.2:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.5.2
rN  rL  rl  rM  r  r  rR  r   Nc                 H    [        USSS[        R                  5      U l        g )Nr   r  r  )r   r>   rf  r  ra  s     r   rP  KrbApRep.__init__  s    *8Q*mNbNbcr   )r  )r   r   r   r   r}  r  r  rM  rp   rq   r-   r:   rh   r   r!   r"   r   rP  r   r   r   r   r  r    sl    , '--L 
**+	^Y^^4	Z1IdS)^!< d dr   r  c                      \ rS rSrSr\R                  rSS\R                  4SS\R                  4SS\R                  4SS\R                  4S	S	\R                  4S
S
\R                  4SS\R                  4SS\R                  4SS\R                  4SS\R                  4SS\R                  4SS\R                  4SS\R                  4/rS\R"                  \\4   SS4S jrSrg)KrbErrori  a  The KRB_ERROR message.

The KRB_ERROR is a message sent in the occurrence of an error.

The ASN.1 definition for the KRB_ERROR structure is defined in `RFC 4120 5.9.1`_::

    KRB-ERROR       ::= [APPLICATION 30] SEQUENCE {
        pvno            [0] INTEGER (5),
        msg-type        [1] INTEGER (30),
        ctime           [2] KerberosTime OPTIONAL,
        cusec           [3] Microseconds OPTIONAL,
        stime           [4] KerberosTime,
        susec           [5] Microseconds,
        error-code      [6] Int32,
        crealm          [7] Realm OPTIONAL,
        cname           [8] PrincipalName OPTIONAL,
        realm           [9] Realm -- service realm --,
        sname           [10] PrincipalName -- service name --,
        e-text          [11] KerberosString OPTIONAL,
        e-data          [12] OCTET STRING OPTIONAL
    }

Args:
    sequence: The ASN.1 sequence value as a dict to unpack.

Attributes:
    ctime (datetime.datetime): The current time on the client's host.
    cusec (int): The microsecond part of the client's timestamp.
    stime (datetime.datetime): The current time of the server.
    susec (int): The microsecond part of the server's timestamp.
    error_code (KerberosErrorCode): THe error code returned by the kerberos when a request fails.
    crealm (bytes): The realm that issues a ticket.
    cname (PrincipalName): The principal name in the ticket.
    realm (bytes): The service realm.
    sname (PrincipalName): The service name.
    e_text (bytes): Additional text to explain the error code.
    e_data (bytes): Additional data about the error.

.. _RFC 4120 5.9.1:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.9.1
rN  rL  rl  rM  ctimecusecstimesusec
error-code
error_coder  r  realmsnamee-texte_texte-datae_datarR  r   Nc           	      &   [        USSS[        5      U l        [        USSS[        5      U l        [        USSS[        5      U l        [        USSS	[        5      U l        [        [        US
SS[        5      5      U l        [        USSS[        5      U l
        [        USSS[        5      U l        [        USSS[        5      U l        [        USSS[        5      U l        [        USSS[        5      U l        [        USSS[         5      U l        g )Nr   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  ra  s     r   rP  KrbError.__init__  s    '!['Kgh
'!['K^_
'!['Kgh
'!['K^_
+xKGZ[
 )1k8Mgh'!['K`a
'!['Kef
'"k7Lab
(2{HNhi(2{HNfgr   )r  r  r  r  r  r  r  r  r  r  r  )r   r   r   r   r}  r  r  rM  rp   rq   r-   rj   rr   rs   rk   rh   r   r!   r"   r   rP  r   r   r   r   r  r    s   (T ',,L 
**+	^Y^^4	'9--.	'9,,-	'9--.	'9,,-	|Y^^4	8Y^^,	'9334	'9>>*	'9334	8Y^^,	8Y__-I hS)^!< h hr   r  c                       \ rS rSrSrSS\R                  4SS\R                  4/rS\	R                  \\4   S\SS4S	 jr\S\	R                   4S
 j5       r\S\	R                  \\4   SS 4S j5       rSrg)r<   i  a  Kerberos PA-DATA.

The ASN.1 definition for the PA-DATA structure is defined in `RFC 4120 5.2.7`_::

    PA-DATA         ::= SEQUENCE {
        -- NOTE: first tag is [1], not [0]
        padata-type     [1] Int32,
        padata-value    [2] OCTET STRING -- might be encoded AP-REQ
    }

Args:
    data_type: Indicates the type of data the value represents.
    value: The PAData value, usually the DER encoding of another message.

Attributes:
    data_type (Union[int, KerberosPADataType]): See args.
    b_value (bytes): The raw bytes of padata-value, use `value` to get a structured object of these bytes if
        available.

.. RFC 4120 5.2.7:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.2.7
padata-type	data_typepadata-valuer   r   Nc                     Xl         X l        g r   )r  b_value)rb  r  r   s      r   rP  PAData.__init__8  s    "r   c                    U R                   [        R                  :X  aA  [        R	                  [        [        U R                  5      S   R                  5      S   5      $ [        [        R                  5      [        R                  S4[        [        R                  5      [        R                  S40nU R                   U;   al  U[        U R                   5         u  p#[        U R                  5      S   nU(       a!  [        U5       Vs/ s H
  oR" U5      PM     sn$ U" UR                  5      $ U R                  $ s  snf )Nr   FT)r  r  r  r  rf  r   r  b_datar"   r  r>   r  r=   r   )rb  data_type_mapunpack_funcis_sequencer  r   s         r   r   PAData.value<  s   >>/777##KDLL0I!0L0S0S$TUV$WXX "001M4H4H%3P"../,2E2Et1L

 >>]*'4S5H'I$K!$,,/2G0DW0MN0M1A0MNN #7>>22 << Os   
D<c                     [        U 5      nS[        R                  [        [        4   S[        R                  [
        [        4   4S jn[        USSSU5      n[        USSS[        5      n[        X45      $ )	Nr   r   c                 T    [        U 5      n [        U5      $ ! [         a    Us $ f = fr   )r   r  
ValueError)r   int_vals     r   unpack_data_type'PAData.unpack.<locals>.unpack_data_typeX  s0    )%0G)'22 s   
 ''ri   zPA-DATAr  r   r  )
r   r   rn   r   rk   r  r"   r   r   r<   )r   rR  r  r  pa_values        r   rf  PAData.unpackT  sp    .u5	FLLE1A$B 	v||TfhkTkGl 	 'xI}N^_	%h9nNfgi**r   )r  r  )r   r   r   r   r}  rp   r-   r:   rh   r   rn   r"   r  rk   rP  propertyr'   r   rh  r   rf  r   r   r   r   r<   r<     s    0 
Y^^4	)//2I
&,,s4F/F"G PU Z^   vzz    . +fll9e#34 + + +r   r<   c                       \ rS rSrSrSS\R                  4SS\R                  4SS\R                  4/rS\	S\
R                  \   S\
R                  \   SS4S jr\S	\
R                  \\4   SS 4S
 j5       rSrg)r=   if  a  Kerberos PA-ETYPE-INFO2 container.

The ASN.1 definition for the PA-ETYPE-INFO2 structure is defined in `RFC 4120 5.2.7.5`_::

    ETYPE-INFO2-ENTRY       ::= SEQUENCE {
        etype           [0] Int32,
        salt            [1] KerberosString OPTIONAL,
        s2kparams       [2] OCTET STRING OPTIONAL
    }

Args:
    etype: The etype that defines the cipher used.
    salt: The used in the cipher associated with the cryptosystem.
    s2kparams: Extra params to be interpreted by the cipher associated with the cryptosystem.

Attributes:
    etype (KerberosEncryptionType): See args.
    salt (Optional[bytes]): See args.
    s2kparams (Optional[bytes]): See args.

.. RFC 4120 5.2.7.5:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.2.7.5
etypesalt	s2kparamsr   Nc                 (    Xl         X l        X0l        g r   )r  r  r  )rb  r  r  r  s       r   rP  PAETypeInfo2.__init__  s     
	"r   r   c           	          [        U 5      n[        [        USSS[        5      5      n[        USSS[        5      n[        USSS[
        5      n[        X#U5      $ )	Nr   r  r  ri   zETYPE-INFO2-ENTRYr  r   r  )r   r   r   r   r	   r   r=   )r   rR  r  r  r  s        r   rf  PAETypeInfo2.unpack  s\    .u5&'9(AGWY`bu'vw!(A/BFLfg&x4GVno	E33r   )r  r  r  )r   r   r   r   r}  rp   r-   rk   rh   r   r   OptionalrP  rh  rn   r   rf  r   r   r   r   r=   r=   f  s    2 
'9>>*	)	k9??3I#%# ooe$# ??5)	#
 
# 4fll9e#34 4 4 4r   r=   c                       \ rS rSrSrSS\R                  4SS\R                  4SS\R                  4/r	S\
S\R                  \   S\SS4S jr\S	\R                   \\4   SS 4S
 j5       rSrg)r>   i  a  Kerberos EncryptedData container.

The ASN.1 definition for the EncryptedData structure is defined in `RFC 4120 5.2.9`_::

    EncryptedData   ::= SEQUENCE {
        etype   [0] Int32 -- EncryptionType --,
        kvno    [1] UInt32 OPTIONAL,
        cipher  [2] OCTET STRING -- ciphertext
    }

Args:
    etype: The encryption algorithm that was used to encipher the cipher.
    kvno: The version number of the key under which data is encrypted. It is only present in messages encrypted
        under long lasting keys.
    cipher: The enciphered text.

Attributes:
    etype (KerberosEncryptionType): See args.
    kvno (Optional[int]): See args.
    cipher (bytes): See args.

.. RFC 4120 5.2.9:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.2.9
r  kvnocipherr   Nc                 (    Xl         X l        X0l        g r   )r  r  r  )rb  r  r  r  s       r   rP  EncryptedData.__init__  s    
	r   r   c           	          [        U 5      n[        [        USSS[        5      5      n[        USSS[        5      n[        USSS[        5      n[        X#U5      $ )Nr   r>   r  ri   r  r   r  )r   r   r   r   r   r>   )r   rR  r  r  r  s        r   rf  EncryptedData.unpack  sY    .u5&'9(AX_at'uv!(AH[\#Ha(LdeU&11r   )r  r  r  )r   r   r   r   r}  rp   r-   rq   rk   rh   r   r   r  r"   rP  rh  rn   r   rf  r   r   r   r   r>   r>     s    4 
'9>>*	**+	8Y__-I4 FOOC<P Z_ dh 
 2fll5)#34 2 2 2r   r>   c            
           \ rS rSrSrSS\R                  4SS\R                  4SS\R                  4SS\R                  4/r
S\S\S\R                  \   S\S	S
4
S jr\S\R&                  \\4   S	S 4S j5       rSrg
)r?   i  aH  Kerberos Ticket.

The ASN.1 definition for the Ticket structure is defined in `RFC 4120 5.3`_::

    Ticket          ::= [APPLICATION 1] SEQUENCE {
        tkt-vno         [0] INTEGER (5),
        realm           [1] Realm,
        sname           [2] PrincipalName,
        enc-part        [3] EncryptedData -- EncTicketPart
    }

Args:
    tkt_vno: The version number for the ticket format.
    realm: The realm that issued a ticket.
    sname: All the name components of the server's identity.
    enc_part: The encrypted part of the ticket, it is encrypted in the key shared by Kerberos and the end server.

Attributes:
    tkt_vno (int): See args.
    realm (bytes): See args.
    sname (List[PrincipalName]): See args.
    enc_part (EncryptedData): See args.

.. _RFC 4120 5.3:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.3
tkt-vnotkt_vnor  r  r  r  r   Nc                 4    Xl         X l        X0l        X@l        g r   )r  r  r  r  )rb  r  r  r  r  s        r   rP  Ticket.__init__  s     

 r   r   c                 *   [        U [        R                  S5      n[        [	        U5      S   5      n[        USSS[        5      n[        USSS[        5      n[        USSS[        5      n[        USSS	[        R                  5      n[        X4XV5      $ )
Nri   r   r?   r  r  r   r  r   r  )r   r   applicationr   r   r   r   r	   r   r>   rf  r?   )r   r  rR  r  r  r  r  s          r   rf  Ticket.unpack  s    !%)=)=qA.{6/B1/EF$Xq(IGZ["8Q'C]^"8Q'CXY%h8ZI]I]^ge66r   )r  r  r  r  )r   r   r   r   r}  rp   rq   rr   rs   r:   rh   r"   rk   r   rz  rl   r>   rP  rh  rn   r   rf  r   r   r   r   r?   r?     s    8 
Iy001	'9>>*	'9334	Z1	I
!
! 
! {{=)	
!
  
! 

! 	7fll9e#34 	7 	7 	7r   r?   c                      \ rS rSrSrSS\R                  \44SS\R                  4SS\R                  4SS\R                  4SS	\R                  4S
S\R                  4SS\R                  4SS\R                  4SS\R                  4SS\R                  4SS\R                  4SS\R                  4/rS\S\R$                  \   S\S\S	\R$                  \
R                     S\
R                  S\R$                  \
R                     S\S\R*                  \   S\R$                  \R*                  \      S\R$                  \   S\R$                  \R*                  \      SS4S jr\S\R8                  \\4   SS 4S j5       rSrg)r@   i  a
  The KRB_AS_REQ message.

The KRB_AS_REQ message is used when the client wishes to retrieve a the initial ticket for a service. The
KRB_TGS_REQ message is identical except for the tag and msg-type is used when retrieving additional tickets for a
service.

The ASN.1 definition for the KDC-REQ structure is defined in `RFC 4120 5.4.1`_::

    KDC-REQ-BODY    ::= SEQUENCE {
        kdc-options             [0] KDCOptions,
        cname                   [1] PrincipalName OPTIONAL
                                    -- Used only in AS-REQ --,
        realm                   [2] Realm
                                    -- Server's realm
                                    -- Also client's in AS-REQ --,
        sname                   [3] PrincipalName OPTIONAL,
        from                    [4] KerberosTime OPTIONAL,
        till                    [5] KerberosTime,
        rtime                   [6] KerberosTime OPTIONAL,
        nonce                   [7] UInt32,
        etype                   [8] SEQUENCE OF Int32 -- EncryptionType
                                    -- in preference order --,
        addresses               [9] HostAddresses OPTIONAL,
        enc-authorization-data  [10] EncryptedData OPTIONAL
                                    -- AuthorizationData --,
        additional-tickets      [11] SEQUENCE OF Ticket OPTIONAL
                                    -- NOTE: not empty
    }

Args:
    kdc_options: Flags desired by the client and other behaviour desired.
    cname: The client name.
    realm: The realm part of the server's principal.
    sname: The service name.
    postdated_from: When the requested ticket is to be posted from.
    postdated_till: The expiration date requested by the client.
    rtime: The requested renew-till time.
    nonce: Random number generated by the client.
    etype: The desired encryption algorithm to be used in priority order.
    addresses: Addresses from which the requested ticket is to be valid.
    enc_authorization_data: Encrypted authorization data.
    additional_tickets: Additional tickets to be optionally included in a request.

Attributes:
    kdc_options (int): See args.
    cname (Optional[PrincipalName]): See args.
    realm (bytes): See args.
    sname (PrincipalName): See args.
    postdated_from (Optional[datetime.datetime]): See args.
    postdated_till (datetime.datetime): See args.
    rtime (Optional[datetime.datetime]): See args.
    nonce (int): See args.
    etype (List[KerberosEncryptionType]): See args.
    addresses (Optional[List[HostAddress]]): See args.
    enc_authorization_data (Optional[EncryptedData]): See args.
    additional_tickets (Optional[Ticket]): See args.

.. _RFC 4120 5.4.1:
    https://www.rfc-editor.org/rfc/rfc4120#section-5.4.1
kdc-optionskdc_optionsr  r  r  frompostdated_fromtillpostdated_tillrtimenoncer  	addressesenc-authorization-dataenc_authorization_dataadditional-ticketsadditional_ticketsr   Nc                     Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        Xl        g r   )r  r  r  r  r  r  r  r  r  r  r  r  )rb  r  r  r  r  r  r  r  r  r  r  r  r  s                r   rP  KdcReqBody.__init__S  sE     '


,,


"&<#"4r   r   c                    [        U 5      nS[        R                  [        [        4   S[
        4S jnS[        R                  [        [        4   S[        R                  [           4S jnS[        R                  [        [        4   S[        R                  [           4S jnS[        R                  [        [        4   S[        R                  [           4S jn[        USSS	U5      n[        US
SS[        5      n[        USSS[        5      n[        USSS[        5      n	[        USSS[        5      n
[        USSS[        5      n[        USSS[        5      n[        USSS[        5      n[        USSSU5      n[        USSSU5      n[        USSS[        R                   5      n[        USSSU5      n[#        UUUU	U
UUUUUUU5      $ ) Nr   r   c                 L    [        U 5      n[        R                  " SU5      S   $ )Nz>Ir   )r   r  rf  )r   r  s     r   unpack_kdc_options-KdcReqBody.unpack.<locals>.unpack_kdc_optionss  s"    +E2F==v.q11r   c                 h    [        U 5       Vs/ s H  n[        [        U5      5      PM     sn$ s  snf r   )r   r   r   )r   es     r   unpack_etype'KdcReqBody.unpack.<locals>.unpack_etypew  s.    L`afLghLgq*+>q+ABLghhhs   /c                 V    [        U 5       Vs/ s H  n[        U5      PM     sn$ s  snf r   )r   r   )r   hs     r   unpack_addresses+KdcReqBody.unpack.<locals>.unpack_addressesz  s&    0DU0KL0K1OA&0KLLLs   &c                 j    [        U 5       Vs/ s H  n[        R                  U5      PM     sn$ s  snf r   )r   r?   rf  )r   ts     r   unpack_ticket(KdcReqBody.unpack.<locals>.unpack_ticket}  rw  rx  r   zKDC-REQ-BODYr  ri   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r  )r   r   rn   r   rk   r"   rz  r   rm   r?   r   r   r	   r
   r   r>   rf  r@   )r   rR  r  r  r  r  r  r  r  r  r  r  r  r  r  r  enc_auth_datar  s                     r   rf  KdcReqBody.unpacko  s   .u5	2fll9e3C&D 	2 	2	iY-= > 	i6;;OeCf 	i	MFLLE1A$B 	Mv{{S^G_ 	M	Ki.>!? 	KFKKPVDW 	K )1nmUgh"8QI^_"8QIcd"8QI^_+HaQmn+HaQmn"8QIef"8QI\]"8QV&xNKQab	*8RIacpcwcwx/"nNbdqr
 	
r   )r  r  r  r  r  r  r  r  r  r  r  r  ) r   r   r   r   r}  rp   r6   r   rs   rr   rj   rq   r-   rt   r:   rh   r"   r   r  rl   rk   rz  r   rm   r>   r?   rP  rh  rn   r   rf  r   r   r   r   r@   r@     s   ;| 
	9K'LM	'9334	'9>>*	'9334	!9#5#56	!9#5#56	'9--.	'9,,-	'9>>*	k9#9#9:	!#;Y__M	3Y__EI55 }-5 	5
 5 (9(9:5 !))5 x0015 5 {{125 ??6;;{#;<5 !' >5 #OOFKK,?@5 
58 *
fll9e#34 *
 *
 *
r   r@   r   )NN)Br}  rS   collectionsrj   r-   r  r   spnego._asn1r   r   r   r   r   r   r	   r
   r   r   r   r   spnego._textr   rn   r"   r#   r.   r  Typer!   r(   r3   IntFlagr'   r9   re   rk   r   r   
namedtuplerm   rl   r   r   IntEnumr   r   r  r  r   r~   rp   typerG  r;   rk  r  r  r  r  r  r  r<   r=   r>   r?   r@   r   r   r   <module>r     sk            !
 /3	E<<S$))+,	Ev{{+	E [[c	E /3*<<S$))+,*v{{+* 	*, /3<<T\\)*v{{+ [[fjj!6 $(%)F<<jkFOOC F ooc"F \\#v{{3

?334	FR(6<<y(89 (m (
*eY.>!? 
*O 
* $$]['4JK" &&g8NO&
 
E
 E
R!
T\\ !
JM
 M
b
$,, 
2L
 L
`
 
6
dll 
4	 	Ct C@+. ++b} +b\7e} 7et/ // /+n} +n\ d}  dFJh} JhZH+ H+V14 14h-2 -2`97 97xT
 T
r   