
    i7                       S SK Jr  S SKrS SKrS SKrS SKJr  S SKJrJ	r	  SSK
JrJrJrJr  SSKJr  SSKJrJrJrJrJr  SS	KJrJr  SS
KJrJr  \(       a  SSK
JrJr  SSKJr  \ " 5       r! " S S5      r"\"" 5       r#\#RH                  r$\#RJ                  r%\#RL                  r&\#RN                  r'\#RP                  r(\#RR                  r)\#RT                  r*g)    )annotationsN)Sequence)TYPE_CHECKINGAny   )	Algorithmget_default_algorithms
has_cryptorequires_cryptography)PyJWK)DecodeErrorInvalidAlgorithmErrorInvalidKeyErrorInvalidSignatureErrorInvalidTokenError)base64url_decodebase64url_encode)InsecureKeyLengthWarningRemovedInPyjwt3Warning)AllowedPrivateKeysAllowedPublicKeys)
SigOptionsc                     \ rS rSr% Sr  S     SS jjr\SS j5       rSS jrSS jr	SS jr
S S	 jr\SSS
S4               S!S jjr    S"             S#S jjr    S"             S$S jjrS%S jrS&S jr  S'           S(S jjrS1rS\S'   S
S.     S)S jjrS*S jrS+S jrSrg),PyJWS!   JWTNc                ^   [        5       U l        Ub  [        U5      O[        U R                  5      U l        [	        U R                  R                  5       5       H!  nX0R                  ;  d  M  U R                  U	 M#     U R                  5       U l        Ub  0 U R                  EUEU l        g g )N)r	   _algorithmsset_valid_algslistkeys_get_default_optionsoptions)self
algorithmsr$   keys       V/home/maestro/MAESTRO/maestro-backend/venv/lib/python3.13/site-packages/jwt/api_jws.py__init__PyJWS.__init__$   s    
 23)5C
O3t?O?O;P 	
 ((--/0C***$$S) 1 $(#<#<#>6dll6g6DL     c                     SSS.$ )NTF)verify_signatureenforce_minimum_key_length r/   r+   r(   r#   PyJWS._get_default_options7   s    $(NNr+   c                    XR                   ;   a  [        S5      e[        U[        5      (       d  [	        S5      eX R                   U'   U R
                  R                  U5        g)z
Registers a new Algorithm for use when creating and verifying tokens.

:param str alg_id: the ID of the Algorithm
:param alg_obj: the Algorithm object
:type alg_obj: Algorithm
z Algorithm already has a handler.z!Object is not of type `Algorithm`N)r   
ValueError
isinstancer   	TypeErrorr    add)r%   alg_idalg_objs      r(   register_algorithmPyJWS.register_algorithm;   sW     %%%?@@'9--?@@#* V$r+   c                    XR                   ;  a  [        S5      eU R                   U	 U R                  R                  U5        g)z
Unregisters an Algorithm for use when creating and verifying tokens
:param str alg_id: the ID of the Algorithm
:raises KeyError: if algorithm is not registered.
zJThe specified algorithm could not be removed because it is not registered.N)r   KeyErrorr    remove)r%   r6   s     r(   unregister_algorithmPyJWS.unregister_algorithmL   sF     )))1 
 V$'r+   c                ,    [        U R                  5      $ )zP
Returns a list of supported values for the `alg` parameter.

:rtype: list[str]
)r!   r    )r%   s    r(   get_algorithmsPyJWS.get_algorithms[   s     D$$%%r+   c                     U R                   U   $ ! [         a6  n[        (       d  U[        ;   a  [	        SU S35      Ue[	        S5      UeSnAff = f)z
For a given string name, return the matching Algorithm object.

Example usage:
>>> jws_obj = PyJWS()
>>> jws_obj.get_algorithm_by_name("RS256")

:param alg_name: The name of the algorithm to retrieve
:type alg_name: str
:rtype: Algorithm
zAlgorithm 'z9' could not be found. Do you have cryptography installed?Algorithm not supportedN)r   r;   r
   r   NotImplementedError)r%   alg_namees      r(   get_algorithm_by_namePyJWS.get_algorithm_by_namec   se    	H##H-- 	H:(.C"C)!(+de &&?@aG	Hs    
A1AAFTc                   / nU[         L a%  [        U[        5      (       a  UR                  n	O-Sn	O*Uc%  [        U[        5      (       a  UR                  n	OSn	OUn	U(       a5  UR	                  S5      n
U
(       a  US   n	UR	                  S5      nUSL a  SnU R
                  U	S.nU(       a!  U R                  USS9  UR                  U5        US	   (       d  US		 U(       a  SUS'   O	SU;   a  US	 [        R                  " US
XWS9R                  5       nUR                  [        U5      5        U(       a  UnO[        U5      nUR                  U5        SR                  U5      nU R                  U	5      n[        U[        5      (       a  UR                  nUR!                  U5      nUR#                  U5      nU(       aF  U R$                  R	                  SS5      (       a  ['        U5      e[(        R*                  " U[,        SS9  UR/                  X5      nUR                  [        U5      5        U(       a  SUS'   SR                  U5      nUR1                  S5      $ )NHS256nonealgb64FT)typrL   encodingrN   ),:)
separatorscls	sort_keys   .r.      
stacklevelr+   r   utf-8)_ALGORITHM_UNSETr3   r   algorithm_nameget
header_typ_validate_headersupdatejsondumpsencodeappendr   joinrG   r'   prepare_keycheck_key_lengthr$   r   warningswarnr   signdecode)r%   payloadr'   	algorithmheadersjson_encoderis_payload_detachedsort_headerssegments
algorithm_headers_algheaders_b64headerjson_headermsg_payloadsigning_inputr7   key_length_msg	signatureencoded_strings                       r(   rc   PyJWS.encodex   s    !# ((#u%% //
$
#u%% //
#
"J !++e,K$U^
!++e,Ke#&*# *.!L""7T":MM'"e}u!F5Mf_ujjz|

&( 	 	(56!K*73K$ 		(+,,Z8c5!!''C!!#& 11#6|| <eDD%n55n.FSTULL4	(34 HQK8,$$W--r+   c                >   U(       a4  [         R                  " S[        UR                  5       5       3[        SS9  Uc  U R
                  nO0 U R
                  EUEnUS   nU(       a'  U(       d   [        U[        5      (       d  [        S5      eU R                  U5      u  ppU R                  U5        UR                  SS5      SL a6  Uc  [        S	5      eUn	S
R                  U
R                  S
S5      S   U	/5      n
U(       a  U R                  XXU5        U	UUS.$ )Nzypassing additional kwargs to decode_complete() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rW   rX   r-   z\It is required that you pass in a value for the "algorithms" argument when calling decode().rM   TFzIt is required that you pass in a value for the "detached_payload" argument to decode a message having the b64 header set to false.rV   r   r   )rl   rv   r{   )rh   ri   tupler"   r   r$   r3   r   r   _loadr_   r]   re   rsplit_verify_signature)r%   jwtr'   r&   r$   detached_payloadkwargsmerged_optionsr-   rl   ry   rv   r{   s                r(   decode_completePyJWS.decode_complete   s*    MM'',V[[]';&<> ' ?!\\N888N)*<=Jz#u7M7Mn  59JJsO1v&::eT"e+'! Z  'G II}';';D!'DQ'G&QRM""=)*U "
 	
r+   c                    U(       a4  [         R                  " S[        UR                  5       5       3[        SS9  U R                  XX4US9nUS   $ )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rW   rX   )r   rl   )rh   ri   r   r"   r   r   )r%   r   r'   r&   r$   r   r   decodeds           r(   rk   PyJWS.decode  sb     MM'',V[[]';&<> ' &&j<L ' 
 y!!r+   c                P    U R                  U5      S   nU R                  U5        U$ )zReturns back the JWT header parameters as a `dict`

Note: The signature is not verified so the header parameters
should not be fully trusted until signature verification is complete
rW   )r   r_   )r%   r   rn   s      r(   get_unverified_headerPyJWS.get_unverified_header  s)     **S/!$w'r+   c                >   [        U[        5      (       a  UR                  S5      n[        U[        5      (       d  [	        S[         35      e UR                  SS5      u  p#UR                  SS5      u  pE [        U5      n [        R                  " U5      n[        U[        5      (       d  [	        S5      e [        U5      n
 [        U5      nXX4$ ! [         a  n[	        S5      UeS nAff = f! [        [        R                  4 a  n[	        S5      UeS nAff = f! [         a  n	[	        SU	 35      U	eS n	A	ff = f! [        [        R                  4 a  n[	        S	5      UeS nAff = f! [        [        R                  4 a  n[	        S
5      UeS nAff = f)NrZ   z$Invalid token type. Token must be a rV   r   zNot enough segmentszInvalid header paddingzInvalid header string: z,Invalid header string: must be a json objectzInvalid payload paddingzInvalid crypto padding)r3   strrc   bytesr   r   splitr2   r   r4   binasciiErrorra   loadsdict)r%   r   ry   crypto_segmentheader_segmentpayload_segmenterrheader_datarv   rF   rl   r{   s               r(   r   PyJWS._load&  s   c3**W%C#u%% DUGLMM	>,/JJtQ,?)M.;.A.A$.J+N	A*>:K	D%)ZZ%<F &$''LMM	B&7G	A(8I ::5  	>34#=	>
 8>>* 	A67S@	A
  	D 7s;<!C	D 8>>* 	B78cA	B
 8>>* 	A67S@	Asx   (C 8C4 D" ;E E1 
C1 C,,C14DDD"
E ,D;;E E.E))E.1FFFc                   Uc"  [        U[        5      (       a  UR                  /n US   nU(       a  Ub  Xe;  a  [	        S5      e[        U[        5      (       a  UR
                  nUR                  nO# U R                  U5      nUR                  U5      nUR                  U5      n
U
(       aF  U R                  R                  SS5      (       a  [        U
5      e[        R                  " U
[         SS9  UR#                  XU5      (       d  [%        S	5      eg ! [         a    [	        S5      S ef = f! [         a  n	[	        S5      U	eS n	A	ff = f)
NrL   zAlgorithm not specifiedz&The specified alg value is not allowedrC   r.   F   rX   zSignature verification failed)r3   r   r\   r;   r   r   r'   rG   rD   rf   rg   r$   r]   r   rh   ri   r   verifyr   )r%   ry   rv   r{   r'   r&   rL   r7   prepared_keyrF   rz   s              r(   r   PyJWS._verify_signatureL  sB    *S%"8"8,,-J	M-C z-#2G'(PQQc5!!mmG77LN44S9 #..s3L 11,?|| <eDD%n55n.FSTU~~m9EE'(GHH F/  	M'(ABL	M ' N+,EFAMNs#   D 5D2 D/2
E<EErM   zset[str]_supported_critrO   c               x    SU;   a  U R                  US   5        U(       d  SU;   a  U R                  U5        g g g )Nkidcrit)_validate_kid_validate_crit)r%   rn   rP   s      r(   r_   PyJWS._validate_headersu  s=     Gwu~.Fg-( .xr+   c                D    [        U[        5      (       d  [        S5      eg )Nz(Key ID header parameter must be a string)r3   r   r   )r%   r   s     r(   r   PyJWS._validate_kid}  s     #s###$NOO $r+   c                    US   n[        U[        5      (       a  [        U5      S:X  a  [        S5      eU HT  n[        U[        5      (       d  [        S5      eX0R
                  ;  a  [        SU 35      eX1;  d  MG  [        SU S35      e   g )Nr   r   z/Invalid 'crit' header: must be a non-empty listz-Invalid 'crit' header: values must be stringsz Unsupported critical extension: zCritical extension 'z' is missing from headers)r3   r!   lenr   r   r   )r%   rn   r   exts       r(   r   PyJWS._validate_crit  s    v$%%Ta#$UVVCc3'''(WXX...'*J3%(PQQ!'*3%/HI  r+   )r   r    r$   )NN)r&   Sequence[str] | Noner$   SigOptions | NonereturnNone)r   r   )r6   r   r7   r   r   r   )r6   r   r   r   )r   z	list[str])rE   r   r   r   )rl   r   r'   z(AllowedPrivateKeys | PyJWK | str | bytesrm   z
str | Nonern   zdict[str, Any] | Nonero   ztype[json.JSONEncoder] | Nonerp   boolrq   r   r   r   ) NNN)r   str | bytesr'   'AllowedPublicKeys | PyJWK | str | bytesr&   r   r$   r   r   bytes | Noner   dict[str, Any]r   r   )r   r   r'   r   r&   r   r$   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   z*tuple[bytes, bytes, dict[str, Any], bytes])r   N)ry   r   rv   r   r{   r   r'   r   r&   r   r   r   )rn   r   rP   r   r   r   )r   r   r   r   )rn   r   r   r   )__name__
__module____qualname____firstlineno__r^   r)   staticmethodr#   r8   r=   r@   rG   r[   rc   r   rk   r   r   r   r   __annotations__r_   r   r   __static_attributes__r/   r+   r(   r   r   !   s   J ,0%)7(7 #7 
	7& O O%"(&H2 !1)-6:$)!X.X. 6X. 	X.
 'X. 4X. "X. X. 
X.z 8:+/%))-1
1
 51
 )	1

 #1
 '1
 !1
 
1
l 8:+/%))-"" 5" )	"
 #" '" !" 
",	$;V 8:+/$I$I $I 	$I
 5$I )$I 
$IN "'OX' <A)%)48)	)Pr+   r   )+
__future__r   r   ra   rh   collections.abcr   typingr   r   r&   r   r	   r
   r   api_jwkr   
exceptionsr   r   r   r   r   utilsr   r   r   r   r   r   typesr   objectr[   r   _jws_global_objrc   r   rk   r8   r=   rG   r   r/   r+   r(   <module>r      s    "    $ %    6 FA!8 l l^ '			!11			$77 &;; '== '== r+   