
    i0Q                        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  \ R                  " S/ SQ5      r	  " S S\R                  5      r " S S\R                  5      rS	\R                  \\	4   S
\S\R                  \\4   S\4S jr  S/S\R"                  \\	4   S\S\S\R&                  \   S\R&                  \R(                  \R                  \\	4   /\R*                  4      S\R*                  4S jjrS
\S\S\R                  \\4   S\S\4
S jr S0S\S\S\4S jjr S0S\S\S\4S jjr  S1S\R                  \\4   S\S\S\4S jjr S0S\S\S\4S jjr S0S\S\S\4S jjr S0S\S\S\4S jjr S0S\R>                  \   S\S\4S  jjr S!\S\4S" jr!S\S\RD                  \	\4   4S# jr#S\R                  \	\4   S\4S$ jr$S\R                  \	\4   S\4S% jr%S\R                  \	\4   S\4S& jr&S\R                  \	\4   S\4S' jr'S\R                  \	\4   S\R                  4S( jr(S\R                  \	\4   S\4S) jr)S\R                  \	\4   S\4S* jr*S\R                  \	\4   S\4S+ jr+S\R                  \	\4   S\R>                  \	   4S, jr,S\R                  \	\4   S\R"                  \\	4   4S- jr-S\S\RD                  \\4   4S. jr.g)2    N)to_bytesto_text	ASN1Value	tag_classconstructed
tag_numberb_datac                   Z    \ 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	)
TagClass   r            returnc                     [         R                  S[         R                  S[         R                  S[         R                  S0$ )N	UniversalApplicationzContext-specificPrivate)r   	universalapplicationcontext_specificprivateclss    F/home/james-whalen/.local/lib/python3.13/site-packages/spnego/_asn1.pynative_labelsTagClass.native_labels!   s;       -%%'9i	
 	
     N)__name__
__module____qualname____firstlineno__r   r   r   r   classmethodtypingDictstrr   __static_attributes__r    r   r   r   r      s=    IKG
fkk*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 r$S!r%S"r&S#r'S$r(S%r)S&r*\+S'\,RZ                  \.\/4   4S( j5       r0S)r1g*)+TypeTagNumber+   r   r   r   r                  	   
                                                   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[         RF                  S#[         RH                  S$[         RJ                  S%0E$ )&NzEnd-of-Content (EOC)BOOLEANINTEGERz
BIT STRINGzOCTET STRINGNULLzOBJECT IDENTIFIERzObject DescriptorEXTERNALzREAL (float)
ENUMERATEDzEMBEDDED PDV
UTF8StringzRELATIVE-OIDTIMERESERVEDzSEQUENCE or SEQUENCE OFzSET or SET OFNumericStringPrintableString	T61StringVideotexString	IA5StringUTCTimeGeneralizedTimeGraphicStringVisibleStringGeneralStringUniversalString	CHARACTER	BMPStringDATEzTIME-OF-DAYz	DATE-TIMEDURATIONzOID-IRIzRELATIVE-OID-IRI)&r+   end_of_contentbooleaninteger
bit_stringoctet_stringnullobject_identifierobject_descriptorexternalreal
enumeratedembedded_pdvutf8_stringrelative_oidtimereservedsequencesetnumeric_stringprintable_string
t61_stringvideotex_string
ia5_stringutc_timegeneralized_timegraphic_stringvisible_stringgeneral_stringuniversal_stringcharacter_string
bmp_stringdatetime_of_day	date_timedurationoid_irirelative_oid_irir   s    r   r   TypeTagNumber.native_labelsT   s   &
((*@&
!!9&
 !!9&
 $$l	&

 &&&
 &
 ++-@&
 ++-@&
 ""J&
 &
 $$l&
 &&&
 %%|&
 &&&
 &
  ""J!&
" ""$=#&
$ %&
& ((/'&
( **,=)&
* $$k+&
, ))+;-&
. $$k/&
0 ""I1&
2 **,=3&
4 ((/5&
6 ((/7&
8 ((/9&
: **,=;&
< **K=&
> $$k?&
@ A&
B %%}C&
D ##[E&
F ""J!!9**,>K&
 &	
r   r    N)2r!   r"   r#   r$   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   sequence_ofrv   set_ofrw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r%   r&   r'   intr(   r   r)   r    r   r   r+   r+   +   s    NGGJLDHDJLKLDHHK
CFNJOJHNNNJDKIHG'
fkk#s(3 '
 '
r   r+   tlvr   r	   r   c                 f   [        U [        5      (       Ga  U[        R                  :X  a  [        R                  5       R                  US5      nSU< S[        U R                  5      R                   SU R                  R                   3< S[        U R                  [        5      (       a8  [        U R                  5      R                   SU R                  R                   3OU R                  < 3nGOS[        U R                  5      R                   SU R                  R                   3< S[        U R                  [        5      (       a8  [        U R                  5      R                   SU R                  R                   3OU R                  < S[        U5      R                   SUR                   3< S[        U[        5      (       a$  [        U5      R                   SUR                   3OU< 3nU R                  U:w  d  U R                  U:w  a  [        U5      eU R                  $ U $ )	zCExtract the bytes and validates the existing tag of an ASN.1 value.zUnknown tag typezInvalid ASN.1 z tags, actual tag class .z and tag number zInvalid ASN.1 tags, actual tag z and number z, expecting class )
isinstancer   r   r   r+   r   gettyper   r!   namer	   
ValueErrorr
   )r   r   r	   
label_namemsgs        r   extract_asn1_tlvr      s    #y!!***&446:::GYZJ&//0#--2D2D1EF "#..-@@ CNN+445Qs~~7J7J6KL(	C + &//0#--2D2D1EF "#..-@@ CNN+445Qs~~7J7J6KL( 	?++,Ainn-=> "*m<< J'001:??2CD#$C ==I%:)ES/!zzJr   ru   tagstructure_name
field_nameunpack_funcc           	          X;  a  gU(       d  X   $  U" X   5      $ ! [          a4  nU(       a	  U< SU< 3OUn[        SU< S[        U5      < 35      UeSnAff = f)zVGets an optional tag entry in a tagged sequence will a further unpacking of the value.Nz in zFailed unpacking z: )r   r(   )ru   r   r   r   r   ewheres          r   get_sequence_valuer      sa     }M8=)) M=Gj.9^eSVDE1LMs   	 
A/AAr   r
   c                 J   [        5       nU S:  d  U S:  a  [        S5      eU S-  nXQ(       a  SOSS-  -  nUS:  a  XR-  nUR                  U5        O0US-  nUR                  U5        UR                  [	        U5      5        [        U5      nUS:  a  UR                  U5        Oq[        5       nU(       a"  UR                  US	-  5        US
-  nU(       a  M"  UR                  5         UR                  [        U5      S-  5        UR                  U5        [        U5      U-   $ )aP  Pack the ASN.1 value into the ASN.1 bytes.

Will pack the raw bytes into an ASN.1 Type Length Value (TLV) value. A TLV is in the form:

| Identifier Octet(s) | Length Octet(s) | Data Octet(s) |

Args:
    tag_class: The tag class of the data.
    constructed: Whether the data is constructed (True), i.e. contains 0, 1, or more element encodings, or is
        primitive (False).
    tag_number: The type tag number if tag_class is universal else the explicit tag number of the TLV.
    b_data: The encoded value to pack into the ASN.1 TLV.

Returns:
    bytes: The ASN.1 value as raw bytes.
r   r   z!tag_class must be between 0 and 3r/   r   r.   rG         r1   )	bytearrayr   appendextend_pack_asn1_octet_numberlenreversebytes)r   r   r	   r
   b_asn1_dataidentifier_octetslengthlength_octetss           r   	pack_asn1r      s$   , +K 1}	A<==!Q{!a77B',- 	R,-2:>? [F|6"!  *!45qLF f 	3}-
:;=)&&r   valuec                 r    SU -   nU(       a*  [        [        R                  S[        R                  U5      nU$ )N    F)r   r   r   r+   rh   r   r   r
   s      r   pack_asn1_bit_stringr     s2    
 u_F
8--um6N6NPVWMr   c                 |    [        U SS9nU(       a*  [        [        R                  S[        R
                  U5      nU$ )zQPacks an int into an ASN.1 ENUMERATED byte value with optional universal tagging.F)r   )pack_asn1_integerr   r   r   r+   ro   r   s      r   pack_asn1_enumeratedr     s5    
 u%0F
8--um6N6NPVWMr   encodingc                 z    [        XS9nU(       a*  [        [        R                  S[        R
                  U5      nU$ )z]Packs an string value into an ASN.1 GeneralString byte value with optional universal tagging.)r   F)r   r   r   r   r+   r   )r   r   r   r
   s       r   pack_asn1_general_stringr      s3     e/F
8--um6R6RTZ[Mr   c                 "   SnSnU S:  a  U * n SnSn[        5       nX:  a.  U S-  nU(       a  SU-
  nUR                  U5        U S-  n X:  a  M.  UR                  U(       a  SU -
  OU S-  5        U(       a,  [        U5       H  u  peUS:  a  XF==   S-  ss'     OSXF'   M     U(       a  US	   S:X  a  UR                  S5        UR                  5         [	        U5      nU(       a*  [        [        R                  S[        R                  U5      nU$ )
zTPacks an int value into an ASN.1 INTEGER byte value with optional universal tagging.F   r   Tr   r   r1   r   )
r   r   	enumerater   r   r   r   r   r+   rg   )r   r   is_negativelimitb_intvalidxb_values           r   r   r   -  s     KEqyKE
-dl*CS! - 
LLK4%<UdBC!%(HCTz
a
EJ ) uRyD(T	MMOElG
H..}7L7LgVNr   oidc                    [        5       nU R                  S5       Vs/ s H  n[        U5      PM     nn[        U5      S:  a  [	        S5      eUR                  US   S-  US   -   5        USS  H  nUR                  [        U5      5        M     [        U5      nU(       a*  [        [        R                  S[        R                  U5      nU$ s  snf )	z^Packs an str value into an ASN.1 OBJECT IDENTIFIER byte value with optional universal tagging.r   r   z0An OID must have 2 or more elements split by '.'r   (   r   NF)r   splitr   r   r   r   r   r   r   r   r   r   r+   rk   )r   r   b_oidi	oid_splitr   r   s          r   pack_asn1_object_identifierr   Z  s    
 KE!$30AQI0
9~KLL 
LL)A,#y|34},S12  ElG
H..}7V7VX_`N 1s   Cc                 h    U(       a*  [        [        R                  S[        R                  U 5      n U $ )z[Packs an bytes value into an ASN.1 OCTET STRING byte value with optional universal tagging.F)r   r   r   r+   ri   )r
   r   s     r   pack_asn1_octet_stringr   r  s)    
 8--um6P6PRXYMr   c                     SR                  U 5      nU(       a*  [        [        R                  S[        R
                  U5      nU$ )z`Packs a list of encoded bytes into an ASN.1 SEQUENCE byte value with optional universal tagging.r   T)joinr   r   r   r+   ru   )ru   r   r
   s      r   pack_asn1_sequencer   }  s6    
 XXhF
8--t]5K5KVTMr   numc                     [        5       nU (       a9  U S-  n[        U5      (       a  US-  nUR                  U5        U S-  n U (       a  M9  UR                  5         U$ )zKPacks an int number into an ASN.1 integer value that spans multiple octets.r   r   r0   )r   r   r   r   )r   
num_octetsoctet_values      r   r   r     s_    J
J& z??:%K+& 		 # r   c           	         [         R                  " SU SS 5      S   n[        US-  S-	  5      n[        US-  5      nUS-  nSnUS:X  a  [	        U SS 5      u  pFXV-  nU[        R
                  :X  a  [        U5      nXS n [         R                  " SU SS 5      S   nSnUS	-  (       aK  XS
-  -  nSn[        SU5       H2  n	[         R                  " SX	U	S-    5      S   n
XzSUS-
  U	-
  -  -  -  nM4     [        UUUXX-    S9nXX-   S 4$ )ay  Unpacks an ASN.1 TLV into each element.

Unpacks the raw ASN.1 value into a `ASN1Value` tuple and returns the remaining bytes that are not part of the
ASN.1 TLV.

Args:
    b_data: The raw bytes to unpack as an ASN.1 TLV.

Returns:
    ASN1Value: The ASN.1 value that is unpacked from the raw bytes passed in.
    bytes: Any remaining bytes that are not part of the ASN1Value.
BNr   r      r/   rH   rG   r   r   r1   r   )	structunpackr   bool_unpack_asn1_octet_numberr   r+   ranger   )r
   octet1r   r   r	   length_offsetoctet_countr   r   r   	octet_valr   s               r   unpack_asn1r     sQ    ]]3r
+A.F&:-!34Iv
*+K*$JMR";F12J"G
$H&&&":.
N#F]]3r
+A.FM
*,,M*Cc6a+@A!DIA):S)@$ABBF + m&<=	E /1222r   c                    [        U [        R                  [        R                  5      n[
        R                  " SUSS 5      S   n[
        R                  " SUSS 5      S   nX2-	  U-  nUSS [
        R                  " SU5      -   $ )z"Unpacks an ASN.1 BIT STRING value.r   Nr   r   r   )r   r   r   r+   rh   r   r   pack)r   r
   unused_bits
last_octets       r   unpack_asn1_bit_stringr     s}    eX%7%79Q9QRF --VBQZ03KsF2bM215J+;J!B<&++c:666r   c                 ^    [        U [        R                  [        R                  5      nUS:g  $ )zUnpacks an ASN.1 BOOLEAN value.r   )r   r   r   r+   rf   r   r
   s     r   unpack_asn1_booleanr     s'    eX%7%79N9NOFWr   c                 j    [        U [        R                  [        R                  5      n[        U5      $ )z"Unpacks an ASN.1 ENUMERATED value.)r   r   r   r+   ro   unpack_asn1_integerr   s     r   unpack_asn1_enumeratedr     s'    eX%7%79Q9QRFv&&r   c                 T    [        U [        R                  [        R                  5      $ )z%Unpacks an ASN.1 GeneralString value.)r   r   r   r+   r   r   s    r   unpack_asn1_general_stringr     s    E8#5#5}7S7STTr   c                 x   [        [        U [        R                  [        R
                  5      5      nUR                  S5      (       a  USS nSnS HJ  n [        R                  R                  X5      nUR                  [        R                  R                  S9s  $    Ue! [         a  nUn SnAMb  SnAff = f)z'Unpacks an ASN.1 GeneralizedTime value.ZNr   )z%Y%m%d%H%M%S.%fz%Y%m%d%H%M%S)tzinfo)r   r   r   r   r+   r}   endswithdatetimestrptimereplacetimezoneutcr   )r   dataerrdatetime_formatdtr   s         r   unpack_asn1_generalized_timer     s    #E8+=+=}?]?]^_D
 }}SCRy
C>	""++DBB::X%6%6%:%::;; ? 		  	C	s   AB""
B9,B44B9c                    [        [        U [        R                  [        R
                  5      5      nUS   S-  nU(       am  [        [        U5      5       H  nSX   -
  X'   M     [        [        U5      S-
  SS5       H,  nX   S:X  a  XS-
  ==   S-  ss'   SX'     OX==   S-  ss'     O   SnU H  nUS-  U-  nM     U(       a  US-  nU$ )zUnpacks an ASN.1 INTEGER value.r   r   r   r   r   r1   )r   r   r   r   r+   rg   r   r   )r   r   r   r   	int_valuer   s         r   r   r     s    &uh.@.@-BWBWXYE(Z'Ks5z"AehEH # s5zA~r2.Ax4!e! A / I!^s*	  R	r   c                    [        U [        R                  [        R                  5      n[
        R                  " SUSS 5      S   nUS-  nX#-
  S-  U/nSnU[        U5      :w  a5  [        XS 5      u  pgUR                  U5        XW-  nU[        U5      :w  a  M5  SR                  U Vs/ s H  n[        U5      PM     sn5      $ s  snf )z)Unpacks an ASN.1 OBJECT IDENTIFIER value.r   Nr   r   r   r   )r   r   r   r+   rk   r   r   r   r   r   r   r(   )	r   r
   first_elementsecond_elementidsr   r   	octet_lenr   s	            r   unpack_asn1_object_identifierr  %  s    eX%7%79X9XYFMM#vbqz215M"R'N*r1>
BC
C
V
26$<@

3 V

 88S)SSVS)**)s   *Cc                 T    [        U [        R                  [        R                  5      $ )z$Unpacks an ASN.1 OCTET STRING value.)r   r   r   r+   ri   r   s    r   unpack_asn1_octet_stringr	  6  s    E8#5#5}7Q7QRRr   c                     [        U [        R                  [        R                  5      n/ nU(       a'  [        U5      u  p1UR                  U5        U(       a  M'  U$ )z Unpacks an ASN.1 SEQUENCE value.)r   r   r   r+   ru   r   r   )r   r
   valuesvs       r   unpack_asn1_sequencer  ;  sJ    eX%7%79O9OPFF
'	a & Mr   c           	          [        [        U 5       Vs/ s H&  oR                  [        UR                  5      S   4PM(     sn5      $ s  snf )z0Unpacks an ASN.1 SEQUENCE value as a dictionary.r   )dictr  r	   r   r
   )r   r   s     r   unpack_asn1_tagged_sequencer  G  s=    CWX]C^_C^a,,AHH 5a 89C^_``_s   -Ac                     SnSn [         R                  " SXUS-    5      S   nUS-  nUS-  US-  -   nUS-  (       d   X4$ M?  )zDUnpacks an ASN.1 INTEGER value that can span across multiple octets.r   r   r   r0   r   r   )r   r   )r
   r   r   elements       r   r   r   L  s`    	A
C
--V#'%:;A>q!V*,-#6M r   )NN)T)Tascii)/collectionsr   enumr   r&   spnego._textr   r   
namedtupler   IntEnumr   r+   Unionr   r   r   r'   r(   OptionalCallableAnyr   r   r   r   r   r   r   r   r   Listr   r   Tupler   r   r   r   r   r   r   r  r	  r  r  r   r    r   r   <module>r     s^        *"";0de	
t|| 
 Q
DLL Q
h(	eY&	'(( S-/0( 	(^ (,bfMkk#y.)M	M M $	M
 &,,ui?O2P1QSYS]S]1]!^_M ZZM*F'F'F' ]C/0F' 	F'
 F'V 				 	 				 	 
<<U
#
	
 
 	
 **	* *^ 		 4 	  	kk% 			 	  ./3 /3&,,y%/?"@ /3d	7&,,y%/?"@ 	7U 	7v||Iu,<= $ '&,,y%/?"@ 'S 'Ufll9e3C&D U U
Y5E(F 8K\K\ ,v||Iu,<= # <+i6F)G +C +"SFLLE1A$B Su S
	Y-= > 	6;;yCY 	av||Iu4D'E a&++VY[dVdJe a
e S#X0F r   