ó
    tÇðiÅ1  ã                  ó„  • 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                  ó|  • \ 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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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       Ú-/usr/lib/python3/dist-packages/jwt/api_jws.pyÚ__init__ÚPyJWS.__init__    s�   € ô
 2Ó3ˆÔà)Ñ5ŒC�
ŒO¼3¸t×?OÑ?OÓ;Pð 	Ôô
 ˜×(Ñ(×-Ñ-Ó/Ö0ˆCØ×*Ñ*Õ*Ø×$Ñ$ 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Fc                ó¨  • / 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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!                  Xò5      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   ©ÚencodingrI   )Ú,Ú:)Ú
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%   rZ   ÚPyJWS.encodei   s¬  € ð ˆð ÑÜ˜#œu×%Ñ%Ø ×/Ñ/‘
à$‘
à"ˆJö Ø!Ÿ+™+ eÓ,ˆKÞØ$ U™^�
à!Ÿ+™+ eÓ,ˆKØ˜eÒ#Ø&*Ð#ð *.¯©ÀÑ!LˆæØ×"Ñ" 7°TÐ"Ñ:Ø�M‰M˜'Ô"à�e�}Ø�u�æØ!ˆF�5ŠMØ�f‹_à�u�ä—j’jØ˜z¨|ñ
ç
‰&‹(ð 	ð 	�‰Ô(¨Ó5Ô6æØ!‰Kä*¨7Ó3ˆKØ�‰˜Ô$ð Ÿ	™	 (Ó+ˆà×,Ñ,¨ZÓ8ˆÜ�cœ5×!Ñ!Ø—'‘'ˆCØ×!Ñ! #Ó&ˆØ—L‘L Ó4ˆ	à�‰Ô(¨Ó3Ô4ö ØˆH�Q‰KØŸ™ 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  pšp¼U 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                  X«XÂU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   TFzƒIt is required that you pass in a value for the "detached_payload" argument to decode a message having the b64 header set to false.rQ   r   r   )r`   rj   rn   )ÚwarningsÚwarnÚtupler   r   r!   r/   r   r   Ú_loadrV   rT   r\   ÚrsplitÚ_verify_signature)r"   Újwtr$   r#   r!   Údetached_payloadÚkwargsÚmerged_optionsr*   r`   rm   rj   rn   s                r%   Údecode_completeÚPyJWS.decode_complete¶   s&  € ö Ü�MŠMð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'Øòð ‰?ØˆGØ4˜DŸL™LÐ4¨GÐ4ˆØ)Ð*<Ñ=Ðæ¦J´zÀ#Äu×7MÑ7MÜØnóð ð 59·J±J¸s³OÑ1ˆ à×Ñ˜vÔ&à�:‰:�e˜TÓ" eÒ+ØÑ'Ü!ð Zóð ð 'ˆGØ ŸI™I }×';Ñ';¸DÀ!Ó'DÀQÑ'GÈÐ&QÓRˆMæØ×"Ñ" =¸)È*Ô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: rr   rs   )r|   r`   )ru   rv   rw   r   r   r   )r"   r{   r$   r#   r!   r|   r}   Údecodeds           r%   r_   ÚPyJWS.decodeæ   sb   € ö Ü�MŠMð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'Øòð ×&Ñ&Ø�jÐ<Lð 'ð 
ˆð �yÑ!Ð!r(   c                óP   • U R                  U5      S   nU R                  U5        U$ )z¶Returns 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
rr   )rx   rV   )r"   r{   rb   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X¢X‹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! [         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)NrR   z$Invalid token type. Token must be a rQ   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/   ÚstrrZ   Úbytesr   ry   Úsplitr.   r   r0   ÚbinasciiÚErrorrX   ÚloadsÚdict)r"   r{   rm   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚerrÚheader_datarj   rB   r`   rn   s               r%   rx   ÚPyJWS._load  sœ  € Ü�cœ3×ÑØ—*‘*˜WÓ%ˆCä˜#œu×%Ñ%ÜÐ DÄUÀGÐLÓMÐMð	>Ø,/¯J©J°t¸QÓ,?Ñ)ˆMØ.;×.AÑ.AÀ$ÈÓ.JÑ+ˆNð	AÜ*¨>Ó:ˆKð	DÜ—Z’Z Ó,ˆFô ˜&¤$×'Ñ'ÜÐLÓMÐMð	BÜ& Ó7ˆGð	AÜ(¨Ó8ˆIð ¨Ð:Ð:øô5 ó 	>ÜÐ3Ó4¸#Ð=ûð	>ûô
 œ8Ÿ>™>Ð*ó 	AÜÐ6Ó7¸SÐ@ûð	Aûô
 ó 	DÜÐ 7¸°sÐ;Ó<À!ÐCûð	Dûô œ8Ÿ>™>Ð*ó 	BÜÐ7Ó8¸cÐAûð	Bûô
 œ8Ÿ>™>Ð*ó 	AÜÐ6Ó7¸SÐ@ûð	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   rS   r7   r   r   r$   rC   r@   r]   Úverifyr   )
r"   rm   rj   rn   r$   r#   rG   r3   Úprepared_keyrB   s
             r%   rz   ÚPyJWS._verify_signature-  sú   € ð Ñ¤*¨S´%×"8Ñ"8Ø×,Ñ,Ð-ˆJð	MØ˜‘-ˆCö �zÑ-°#Ó2GÜ'Ð(PÓQÐQä�cœ5×!Ñ!Ø—m‘mˆGØŸ7™7‰LðNØ×4Ñ4°SÓ9�ð #×.Ñ.¨sÓ3ˆLà�~‰~˜m¸9×EÑEÜ'Ð(GÓHÐHð Føô! ó 	MÜ'Ð(AÓBÈÐLð	Mûô 'ó NÜ+Ð,EÓFÈAÐMûðNús#   §B: Á5C Â:CÃ
C/ÃC*Ã*C/rH   zset[str]Ú_supported_critrJ   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"   rb   rK   s      r%   rV   ÚPyJWS._validate_headersO  s=   € ð �GÓØ×Ñ˜w u™~Ô.Þ˜F gÓ-Ø×Ñ Õ(ð .ˆxr(   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_kidW  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)r/   r   Úlenr   rˆ   r™   )r"   rb   rœ   Úexts       r%   rž   ÚPyJWS._validate_crit[  s�   € Ø�v‰ˆÜ˜$¤×%Ñ%¬¨T«°a«Ü#Ð$UÓVÐVÛˆCÜ˜c¤3×'Ñ'Ü'Ð(WÓXÐXØ×.Ñ.Ó.Ü'Ð*JÈ3È%Ð(PÓQÐQØÕ!Ü'Ø*¨3¨%Ð/HÐIóð ò 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 | bytesra   z
str | Nonerb   r§   rc   ztype[json.JSONEncoder] | Nonerd   Úboolre   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¨   z*tuple[bytes, bytes, dict[str, Any], bytes])r«   N)rm   r‰   rj   r¯   rn   r‰   r$   r­   r#   r¦   r¨   r©   )rb   r¯   rK   rª   r¨   r©   )r›   r   r¨   r©   )rb   r¯   r¨   r©   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rU   r&   Ústaticmethodr    r4   r9   r<   rC   rZ   r   r_   r…   rx   rz   r™   Ú__annotations__rV   r�   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ð.
ð )ð	.
ð
 'ð.
ð 'ð.
ð 
õ.
ðf 8:Ø+/Ø)-Ø)-ð"àð"ð 5ð"ð )ð	"ð
 'ð"ð 'ð"ð 
õ"ô,	ô$;ðV 8:Ø+/ðIàðIð ðIð ð	Ið
 5ðIð )ðIð 
õIð@ "' €O�XÓ'ð <Añ)Ø%ð)Ø48ð)à	õ)ôP÷r(   r   )%Ú
__future__r   r‹   rX   ru   Úcollections.abcr   Útypingr   r   r#   r   r	   r
   r   Úapi_jwkr   Ú
exceptionsr   r   r   r   Úutilsr   r   r   r   r   r   Ú_jws_global_objrZ   r   r_   r4   r9   rC   r…   r+   r(   r%   Ú<module>r¾      s¥   ðÝ "ã Û Û Ý $ß %÷ó õ ÷ó ÷ 6Ý ,æßA÷Jñ JñZ
 “'€Ø	×	Ñ	€Ø!×1Ñ1€Ø	×	Ñ	€Ø$×7Ñ7Ð Ø&×;Ñ;Ð Ø'×=Ñ=Ð Ø'×=Ñ=Ñ r(   