+
    i1                       ^ RI Ht ^ RIt^ RIt^ RIt^ RIHt ^ RIHtH	t	 ^RI
HtHtHtHt ^RIHt ^RIHtHtHtHt ^RIHtHt ^R	IHt ]'       d	   ^R
I
HtHt  ! R R4      t]! 4       t]P<                  t]P>                  t]P@                  t ]PB                  t!]PD                  t"]PF                  t#]PH                  t$R# )    )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                     ] tR t^t$ RtR'R R llt]R R l4       tR R ltR	 R
 lt	R R lt
R R ltR(R R lltR)R R lltR)R R lltR R ltR R ltR*R R lltR0tR]R&   RR/R  R! lltR" R# ltR$ R% ltR&tR# )+PyJWSJWTNc               $    V ^8  d   QhRRRRRR/# )   
algorithmsSequence[str] | Noneoptionsdict[str, Any] | NonereturnNone )formats   "-/usr/lib/python3/dist-packages/jwt/api_jws.py__annotate__PyJWS.__annotate__    s-     B B(B 'B 
	B    c                	F   \        4       V n        Ve   \        V4      M\        V P                  4      V n        \	        V P                  P                  4       4       F"  pW0P                  9  g   K  V P                  V K$  	  Vf   / p/ V P                  4       CVCV n        R # )N)r   _algorithmsset_valid_algslistkeys_get_default_optionsr   )selfr   r   keys   &&& r"   __init__PyJWS.__init__    s    
 23)5C
O3t?O?O;P 	
 ((--/0C***$$S) 1 ?GA$335AAr%   c                   V ^8  d   QhRR/# )r   r   zdict[str, bool]r    )r!   s   "r"   r#   r$   4   s     * */ *r%   c                 	
    R R/# )verify_signatureTr    r    r%   r"   r,   PyJWS._get_default_options3   s    "D))r%   c               $    V ^8  d   QhRRRRRR/# )r   alg_idstralg_objr   r   r   r    )r!   s   "r"   r#   r$   7   s!     % % %y %T %r%   c                    WP                   9   d   \        R4      h\        V\        4      '       g   \	        R4      hW P                   V&   V P
                  P                  V4       R# )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-   r6   r8   s   &&&r"   register_algorithmPyJWS.register_algorithm7   sW     %%%?@@'9--?@@#* V$r%   c                    V ^8  d   QhRRRR/# )r   r6   r7   r   r   r    )r!   s   "r"   r#   r$   D   s     ( (3 (4 (r%   c                    WP                   9  d   \        R4      hV P                   V V P                  P                  V4       R# )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-   r6   s   &&r"   unregister_algorithmPyJWS.unregister_algorithmD   sF    
 )))1 
 V$'r%   c                   V ^8  d   QhRR/# )r   r   z	list[str]r    )r!   s   "r"   r#   r$   R   s     & &	 &r%   c                ,    \        V P                  4      # )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                    V ^8  d   QhRRRR/# )r   alg_namer7   r   r   r    )r!   s   "r"   r#   r$   X   s     H Hc Hi Hr%   c                     V P                   V,          #   \         d9   p\        '       g   T\        9   d   \	        RT R24      Th\	        R4      ThRp?ii ; i)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'   rB   r	   r
   NotImplementedError)r-   rK   es   && r"   get_algorithm_by_namePyJWS.get_algorithm_by_nameX   se    	H##H-- 	H:(.C"C)!(+de &&?@aG	Hs    A3AAFc               8    V ^8  d   QhRRRRRRRRR	R
RRRRRR/# )r   payloadbytesr.   z(AllowedPrivateKeys | PyJWK | str | bytes	algorithmz
str | Noneheadersr   json_encoderztype[json.JSONEncoder] | Noneis_payload_detachedboolsort_headersr   r7   r    )r!   s   "r"   r#   r$   i   sd     K. K.K. 6K. 	K.
 'K. 4K. "K. K. 
K.r%   c                	   . pVf'   \        V\        4      '       d   VP                  p	MRp	MTp	V'       d<   VP                  R4      p
V
'       d
   VR,          p	VP                  R4      pVRJ d   RpRV P                  RV	/pV'       d%   V P                  VRR7       VP                  V4       VR,          '       g   VR V'       d   RVR&   M
RV9   d   VR \        P                  ! VRWWR7      P                  4       pVP                  \        V4      4       V'       d   TpM\        V4      pVP                  V4       R	P                  V4      pV P                  V	4      p\        V\        4      '       d   VP                  pVP                  V4      pVP!                  W4      pVP                  \        V4      4       V'       d   R
V^&   R	P                  V4      pVP#                  R4      # )NHS256algb64FTtyp)encoding)
separatorscls	sort_keys   .r%   utf-8),:)r;   r   algorithm_nameget
header_typ_validate_headersupdatejsondumpsencodeappendr   joinrP   r.   prepare_keysigndecode)r-   rS   r.   rU   rV   rW   rX   rZ   segments
algorithm_headers_algheaders_b64headerjson_headermsg_payloadsigning_inputr8   	signatureencoded_strings   &&&&&&&&           r"   ro   PyJWS.encodei   s     #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!!#&LL4	(34 HQK8,$$W--r%   c               0    V ^8  d   QhRRRRRRRRR	R
RR/# )r   jwtstr | bytesr.   'AllowedPublicKeys | PyJWK | str | bytesr   r   r   r   detached_payloadbytes | Noner   dict[str, Any]r    )r!   s   "r"   r#   r$      sF     .
 .
.
 5.
 )	.

 '.
 '.
 
.
r%   c                	R   V'       d8   \         P                  ! R \        VP                  4       4       2\        ^R7       Vf   / p/ V P
                  CVCpVR,          pV'       d*   V'       g"   \        V\        4      '       g   \        R4      hV P                  V4      w  rrV P                  V4       VP                  RR4      RJ d<   Vf   \        R4      hTp	RP                  V
P                  R^4      ^ ,          V	.4      p
V'       d   V P                  WWV4       R	V	R
VRV/# )zypassing additional kwargs to decode_complete() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: 
stacklevelr3   z\It is required that you pass in a value for the "algorithms" argument when calling decode().r^   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.rd   rS   ry   r}   )warningswarntupler+   r   r   r;   r   r   _loadrk   ri   rq   rsplit_verify_signature)r-   r   r.   r   r   r   kwargsmerged_optionsr3   rS   r|   ry   r}   s   &&&&&&,      r"   decode_completePyJWS.decode_complete   s,    MM'',V[[]';&<> ' ?G4DLL4G4)*<=Jz#u7M7Mn  59JJsO1v&::eT"e+'! Z  'G II}';';D!'DQ'G&QRM""=)*U wf
 	
r%   c               0    V ^8  d   Qh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   "r"   r#   r$      sF     " "" 5" )	"
 '" '" 
"r%   c                	    V'       d8   \         P                  ! R \        VP                  4       4       2\        ^R7       V P                  WW4VR7      pVR,          # )zppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: r   )r   rS   )r   r   r   r+   r   r   )r-   r   r.   r   r   r   r   decodeds   &&&&&&, r"   rt   PyJWS.decode   sb     MM'',V[[]';&<> ' &&j<L ' 
 y!!r%   c                    V ^8  d   QhRRRR/# )r   r   r   r   r   r    )r!   s   "r"   r#   r$      s     	 	 	 	r%   c                X    V P                  V4      ^,          pV P                  V4       V# )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
)r   rk   )r-   r   rV   s   && r"   get_unverified_headerPyJWS.get_unverified_header   s)     **S/!$w'r%   c                    V ^8  d   QhRRRR/# )r   r   r   r   z*tuple[bytes, bytes, dict[str, Any], bytes]r    )r!   s   "r"   r#   r$     s     $; $; $;)S $;r%   c                	N   \        V\        4      '       d   VP                  R 4      p\        V\        4      '       g   \	        R\         24      h VP                  R^4      w  r#VP                  R^4      w  rE \        T4      p \        P                  ! T4      p\        T\        4      '       g   \	        R4      h \        T4      p
 \        T4      pYY3#   \         d   p\	        R4      ThRp?ii ; i  \        \        P                  3 d   p\	        R4      ThRp?ii ; i  \         d   p	\	        RT	 24      T	hRp	?	ii ; i  \        \        P                  3 d   p\	        R4      ThRp?ii ; i  \        \        P                  3 d   p\	        R	4      ThRp?ii ; i)
re   z$Invalid token type. Token must be a rd   zNot enough segmentsNzInvalid header paddingzInvalid header string: z,Invalid header string: must be a json objectzInvalid payload paddingzInvalid crypto padding)r;   r7   ro   rT   r   r   splitr:   r   r<   binasciiErrorrm   loadsdict)r-   r   r|   crypto_segmentheader_segmentpayload_segmenterrheader_datary   rO   rS   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 :C8 D' >E	 
E8 C5$C00C58D$DD$'E2EE	E5$E00E58F$FF$c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r   r|   rT   ry   r   r}   r.   r   r   r   r   r   r    )r!   s   "r"   r#   r$   -  sN     I II I 	I
 5I )I 
Ir%   c                	    Vf$   \        V\        4      '       d   VP                  .p VR,          pT'       d   Te   Ye9  d   \	        R4      h\        T\        4      '       d   TP
                  pTP                  pM# T P                  T4      pTP                  T4      pTP                  YT4      '       g   \        R4      hR #   \         d    \	        R4      R hi ; i  \         d   p	\	        R4      T	hR p	?	ii ; i)Nr]   zAlgorithm not specifiedz&The specified alg value is not allowedrM   zSignature verification failed)r;   r   rh   rB   r   r   r.   rP   rN   rr   verifyr   )
r-   r|   ry   r}   r.   r   r]   r8   prepared_keyrO   s
   &&&&&&    r"   r   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#   	C ?C! C!C=,C88C=r^   zset[str]_supported_critr`   c               $    V ^8  d   QhRRRRRR/# )r   rV   r   r`   rY   r   r   r    )r!   s   "r"   r#   r$   O  s$     ) )%)48)	)r%   c               	    R V9   d   V P                  VR ,          4       V'       g   RV9   d   V P                  V4       R# R# R# )kidcritN)_validate_kid_validate_crit)r-   rV   r`   s   &&$r"   rk   PyJWS._validate_headersO  s=     Gwu~.Fg-( .xr%   c                    V ^8  d   QhRRRR/# )r   r   r   r   r   r    )r!   s   "r"   r#   r$   W  s     P P P Pr%   c                	H    \        V\        4      '       g   \        R 4      hR# )z(Key ID header parameter must be a stringN)r;   r7   r   )r-   r   s   &&r"   r   PyJWS._validate_kidW  s     #s###$NOO $r%   c                    V ^8  d   QhRRRR/# )r   rV   r   r   r   r    )r!   s   "r"   r#   r$   [  s      n  r%   c                	4   VR ,          p\        V\        4      '       d   \        V4      ^ 8X  d   \        R4      hV FW  p\        V\        4      '       g   \        R4      hW0P
                  9  d   \        RV 24      hW19  g   KJ  \        RV R24      h	  R# )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 headersN)r;   r*   lenr   r7   r   )r-   rV   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)NNNFT) NNN)r   N)__name__
__module____qualname____firstlineno__rj   r/   staticmethodr,   r>   rD   rH   rP   ro   r   rt   r   r   r   r   __annotations__rk   r   r   __static_attributes__r    r%   r"   r   r      s    JB& * *%(&H"K.Z.
`",	$;LI@ "'OX');@)P r%   r   )%
__future__r   r   rm   r   collections.abcr   typingr   r   r   r   r   r	   r
   api_jwkr   
exceptionsr   r   r   r   utilsr   r   r   r   r   r   _jws_global_objro   r   rt   r>   rD   rP   r   r    r%   r"   <module>r      s    "    $ %    6 ,AJ JZ
 '			!11			$77 &;; '== '== r%   