
    #	h-                       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  SS	KJrJr  SS
KJr  \(       a  SSK
JrJr   " S S5      r\" 5       r\R<                  r\R>                  r\R@                  r \RB                  r!\RD                  r"\RF                  r#\RH                  r$g)    )annotationsN)Sequence)TYPE_CHECKINGAny   )	Algorithmget_default_algorithms
has_cryptorequires_cryptography)PyJWK)DecodeErrorInvalidAlgorithmErrorInvalidSignatureErrorInvalidTokenError)base64url_decodebase64url_encode)RemovedInPyjwt3Warning)AllowedPrivateKeysAllowedPublicKeysc                  N   \ 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
 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#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c  0 n0 U R                  5       EUEU l        g )N)r	   _algorithmsset_valid_algslistkeys_get_default_optionsoptions)self
algorithmsr!   keys       =/var/www/html/env/lib/python3.13/site-packages/jwt/api_jws.py__init__PyJWS.__init__    s    
 23)5C
O3t?O?O;P 	
 ((--/0C***$$S) 1 ?GA$335AA    c                 
    SS0$ )Nverify_signatureT r+   r(   r%   r    PyJWS._get_default_options3   s    "D))r(   c                    XR                   ;   a  [        S5      e[        U[        5      (       d  [	        S5      eX R                   U'   U R
                  R                  U5        g)zG
Registers a new Algorithm for use when creating and verifying tokens.
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_algorithm7   sW     %%%?@@'9--?@@#* V$r(   c                    XR                   ;  a  [        S5      eU R                   U	 U R                  R                  U5        g)zu
Unregisters an Algorithm for use when creating and verifying tokens
Throws KeyError if algorithm is not registered.
zJThe specified algorithm could not be removed because it is not registered.N)r   KeyErrorr   remove)r"   r2   s     r%   unregister_algorithmPyJWS.unregister_algorithmD   sF    
 )))1 
 V$'r(   c                ,    [        U R                  5      $ )z=
Returns a list of supported values for the 'alg' parameter.
)r   r   )r"   s    r%   get_algorithmsPyJWS.get_algorithmsR   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.get_algorithm_by_name("RS256")
zAlgorithm 'z9' could not be found. Do you have cryptography installed?Algorithm not supportedN)r   r7   r
   r   NotImplementedError)r"   alg_namees      r%   get_algorithm_by_namePyJWS.get_algorithm_by_nameX   se    	H##H-- 	H:(.C"C)!(+de &&?@aG	Hs    
A1AAc                   / n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5        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!                  X5      nUR                  [        U5      5        U(       a  SUS'   S
R                  U5      nUR#                  S5      $ )NHS256algb64FT)typrG   rI   ),:)
separatorscls	sort_keys   .r(   r   utf-8)r/   r   algorithm_nameget
header_typ_validate_headersupdatejsondumpsencodeappendr   joinrC   r$   prepare_key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_inputr3   	signatureencoded_strings                      r%   rX   PyJWS.encodei   s     #u%% //
$
"J !++e,K$U^
!++e,Ke#&*# *.!L""7+MM'"e}u!F5Mf_ujjz|

&( 	 	(56!K*73K$ 		(+,,Z8c5!!''C!!#&LL4	(34 HQK8,$$W--r(   c                   U(       a4  [         R                  " S[        UR                  5       5       3[        SS9  Uc  0 n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                  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:    
stacklevelr*   z\It is required that you pass in a value for the "algorithms" argument when calling decode().rH   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.rO   r   r   )r^   rh   rl   )warningswarntupler   r   r!   r/   r   r   _loadrR   rZ   rsplit_verify_signature)r"   jwtr$   r#   r!   detached_payloadkwargsmerged_optionsr*   r^   rk   rh   rl   s                r%   decode_completePyJWS.decode_complete   s    MM'',V[[]';&<> ' ?G4DLL4G4)*<=Jz#u7M7Mn  59JJsO1::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: rp   rq   )rz   r^   )rs   rt   ru   r   r   r}   )r"   ry   r$   r#   r!   rz   r{   decodeds           r%   r]   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
rp   )rv   rT   )r"   ry   r`   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)NrP   z$Invalid token type. Token must be a rO   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)r/   strrX   bytesr   rw   splitr.   r   r0   binasciiErrorrV   loadsdict)r"   ry   rk   crypto_segmentheader_segmentpayload_segmenterrheader_datarh   rB   r^   rl   s               r%   rv   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                  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)NrG   zAlgorithm not specifiedz&The specified alg value is not allowedr?   zSignature verification failed)r/   r   rQ   r7   r   r   r$   rC   r@   r[   verifyr   )
r"   rk   rh   rl   r$   r#   rG   r3   prepared_keyrB   s
             r%   rx   PyJWS._verify_signature+  s     *S%"8"8,,-J	M-C z-#2G'(PQQc5!!mmG77LN44S9 #..s3L~~m9EE'(GHH F!  	M'(ABL	M ' N+,EFAMNs#   B: 5C :C
C/C**C/c                :    SU;   a  U R                  US   5        g g )Nkid)_validate_kid)r"   r`   s     r%   rT   PyJWS._validate_headersJ  s!    Gwu~. r(   c                D    [        U[        5      (       d  [        S5      eg )Nz(Key ID header parameter must be a string)r/   r   r   )r"   r   s     r%   r   PyJWS._validate_kidN  s     #s###$NOO $r(   )r   r   r!   )NN)r#   Sequence[str] | Noner!   dict[str, Any] | NonereturnNone)r   zdict[str, bool])r2   r   r3   r   r   r   )r2   r   r   r   )r   z	list[str])rA   r   r   r   )NNNFT)r^   r   r$   z(AllowedPrivateKeys | PyJWK | str | bytesr_   z
str | Noner`   r   ra   ztype[json.JSONEncoder] | Nonerb   boolrc   r   r   r   ) NNN)ry   str | bytesr$   'AllowedPublicKeys | PyJWK | str | bytesr#   r   r!   r   rz   bytes | Noner   dict[str, Any])ry   r   r$   r   r#   r   r!   r   rz   r   r   r   )ry   r   r   r   )ry   r   r   z*tuple[bytes, bytes, dict[str, Any], bytes])r   N)rk   r   rh   r   rl   r   r$   r   r#   r   r   r   )r`   r   r   r   )r   r   r   r   )__name__
__module____qualname____firstlineno__rS   r&   staticmethodr    r4   r9   r<   rC   rX   r}   r]   r   rv   rx   rT   r   __static_attributes__r+   r(   r%   r   r      s   J ,0)-B(B 'B 
	B& * *%(&H* !%)-6:$)!K.K. 6K. 	K.
 'K. 4K. "K. K. 
K.` 8:+/)-)-,
,
 5,
 )	,

 ',
 ',
 
,
b 8:+/)-)-"" 5" )	"
 '" '" 
",	$;V 8:+/II I 	I
 5I )I 
I>/Pr(   r   )%
__future__r   r   rV   rs   collections.abcr   typingr   r   r#   r   r	   r
   r   api_jwkr   
exceptionsr   r   r   r   utilsr   r   r   r   r   r   _jws_global_objrX   r}   r]   r4   r9   rC   r   r+   r(   r%   <module>r      s    "    $ %    6 ,AsP sPl	 '			!11			$77 &;; '== '== r(   