Ë
    ¬â°j‰6  ã                  ób  — d dl mZ d dlZd dlZd dlZd dlmZmZ ddlm	Z	m
Z
mZmZ ddlmZmZmZmZ ddlmZmZ ddlmZ erdd	lmZmZ  G d
„ d«      Z e«       Zej4                  Zej6                  Zej8                  Zej:                  Zej<                  Zej>                  Zej@                  Z y)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyé   )Ú	AlgorithmÚget_default_algorithmsÚ
has_cryptoÚrequires_cryptography)ÚDecodeErrorÚInvalidAlgorithmErrorÚInvalidSignatureErrorÚInvalidTokenError)Úbase64url_decodeÚbase64url_encode)ÚRemovedInPyjwt3Warning)ÚAllowedPrivateKeysÚAllowedPublicKeysc                  óJ  — e Zd ZU dZ	 	 d	 	 	 	 	 dd„Zedd„«       Zdd„Zdd„Zdd„Z	dd„Z
	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
„Z	 	 	 	 d 	 	 	 	 	 	 	 	 	 	 	 d!d„Z	 	 	 	 d 	 	 	 	 	 	 	 	 	 	 	 d"d„Zd#d„Zd$d„Z	 	 d%	 	 	 	 	 	 	 	 	 	 	 d&d„ZdhZded<   d	dœ	 	 	 	 	 d'd„Zd(d„Zd)d„Zy)*ÚPyJWSÚJWTNc                ó2  — t        «       | _        |�t        |«      nt        | j                  «      | _        t	        | j                  j                  «       «      D ]  }|| j                  vsŒ| j                  |= Œ  |€i }i | j                  «       ¥|¥| _        y )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__zPyJWS.__init__   s—   € ô
 2Ó3ˆÔà)Ð5ŒC�
ŒO¼3¸t×?OÑ?OÓ;Pð 	Ôô
 ˜×(Ñ(×-Ñ-Ó/Ó0ò 	*ˆCØ˜$×*Ñ*Ò*Ø×$Ñ$ SÑ)ð	*ð ˆ?ØˆGØA˜$×3Ñ3Ó5ÐA¸ÐAˆ�ó    c                 ó
   — ddiS )NÚverify_signatureT© r'   r$   r"   r   zPyJWS._get_default_options1   s   € à" DÐ)Ð)r$   c                óÀ   — || j                   v rt        d«      ‚t        |t        «      st	        d«      ‚|| j                   |<   | j
                  j                  |«       y)zW
        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_algorithmzPyJWS.register_algorithm5   sX   € ð �T×%Ñ%Ñ%ÜÐ?Ó@Ð@ä˜'¤9Ô-ÜÐ?Ó@Ð@à#*ˆ×Ñ˜Ñ Ø×Ñ×Ñ˜VÕ$r$   c                ó†   — || j                   vrt        d«      ‚| j                   |= | j                  j                  |«       y)z�
        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   r-   s     r"   Úunregister_algorithmzPyJWS.unregister_algorithmB   sH   € ð
 ˜×)Ñ)Ñ)Üð1óð ð
 ×Ñ˜VÐ$Ø×Ñ×Ñ Õ'r$   c                ó,   — t        | j                  «      S )zM
        Returns a list of supported values for the 'alg' parameter.
        )r   r   )r   s    r"   Úget_algorithmszPyJWS.get_algorithmsP   s   € ô �D×$Ñ$Ó%Ð%r$   c                ó˜   — 	 | j                   |   S # t        $ r/}t        s|t        v rt	        d|› d�«      |‚t	        d«      |‚d}~ww xY w)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   r1   r	   r
   ÚNotImplementedError)r   Úalg_nameÚes      r"   Úget_algorithm_by_namezPyJWS.get_algorithm_by_nameV   sc   € ð	HØ×#Ñ# HÑ-Ð-øÜò 	HÝ (Ô.CÑ"CÜ)Ø! ( Ð+dÐeóàðô &Ð&?Ó@ÀaÐGûð	Hús   ‚ ‘	A	š*AÁA	Fc                óT  — g }|�|nd}	|r/|j                  d«      }
|
r|d   }	|j                  d«      }|du rd}| j                  |	dœ}|r$| j                  |d¬«       |j                  |«       |d   s|d= |r@d|d<   |j                  d	g «      }t	        |t
        «      st        d
«      ‚d|vrg |¢d‘|d	<   nd|v r|d= t        j                  |d||¬«      j                  «       }|j                  t        |«      «       |r|}nt        |«      }|j                  |«       dj                  |«      }| j                  |	«      }|j                  |«      }|j                  ||«      }|j                  t        |«      «       |rd|d<   dj                  |«      }|j!                  d«      S )NÚnoneÚalgÚb64FT)Útypr>   ©Úencodingr@   Úcritz%Invalid 'crit' header: must be a list)ú,ú:)Ú
separatorsÚclsÚ	sort_keysó   .r$   r   úutf-8)ÚgetÚ
header_typÚ_validate_headersÚupdater*   r   r   ÚjsonÚdumpsÚencodeÚappendr   Újoinr;   Úprepare_keyÚsignÚdecode)r   Úpayloadr!   Ú	algorithmÚheadersÚjson_encoderÚis_payload_detachedÚsort_headersÚsegmentsÚ
algorithm_Úheaders_algÚheaders_b64ÚheaderÚexisting_critÚjson_headerÚmsg_payloadÚsigning_inputr.   Ú	signatureÚencoded_strings                       r"   rQ   zPyJWS.encodeg   sÇ  € ð ˆð (1Ð'<™)À&ˆ
ñ Ø!Ÿ+™+ eÓ,ˆKÙØ$ U™^�
à!Ÿ+™+ eÓ,ˆKØ˜eÑ#Ø&*Ð#ð *.¯©ÀÑ!LˆáØ×"Ñ" 7°TÐ"Ô:Ø�M‰M˜'Ô"à�eŠ}Ø�u�áØ!ˆF�5‰Mð
 #ŸJ™J v¨rÓ2ˆMÜ˜m¬TÔ2Ü'Ø;óð ð ˜MÑ)Ø!8 =Ð!8°%Ð!8��v’Ø�f‰_à�u�ä—j‘jØ˜z¨|À|ô
ç
‰&‹(ð 	ð 	�‰Ô(¨Ó5Ô6áØ!‰Kä*¨7Ó3ˆKØ�‰˜Ô$ð Ÿ	™	 (Ó+ˆà×,Ñ,¨ZÓ8ˆØ×!Ñ! #Ó&ˆØ—L‘L °Ó4ˆ	à�‰Ô(¨Ó3Ô4ñ ØˆH�Q‰KØŸ™ 8Ó,ˆà×$Ñ$ WÓ-Ð-r$   c                ó@  — |r4t        j                  dt        |j                  «       «      › �t        «       |€i }i | j
                  ¥|¥}|d   }|r|st        d«      ‚| j                  |«      \  }	}
}}| j                  |«       |j                  dd«      du ri|j                  d«      xs g }t        |t        «      rd|vrt        d«      ‚|€t        d	«      ‚|}	d
j                  |
j                  d
d«      d   |	g«      }
|r| j                  |
||||«       |	||dœS )Nzypassing additional kwargs to decode_complete() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: r&   z\It is required that you pass in a value for the "algorithms" argument when calling decode().r?   TFrC   zAThe 'b64' header parameter requires 'b64' to be listed in 'crit'.zƒ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.rI   r   r   )rW   ra   rf   )ÚwarningsÚwarnÚtupler   r   r   r   Ú_loadrM   rK   r*   r   r   rS   ÚrsplitÚ_verify_signature)r   Újwtr!   r    r   Údetached_payloadÚkwargsÚmerged_optionsr&   rW   re   ra   rf   rC   s                 r"   Údecode_completezPyJWS.decode_complete·   s`  € ñ Ü�M‰Mð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'ô	ð ˆ?ØˆGØ4˜DŸL™LÐ4¨GÐ4ˆØ)Ð*<Ñ=Ðá¡JÜØnóð ð 59·J±J¸s³OÑ1ˆ� ¨	à×Ñ˜vÔ&à�:‰:�e˜TÓ" eÑ+ð —:‘:˜fÓ%Ò+¨ˆDÜ˜d¤DÔ)¨U¸$Ñ->Ü'ð(óð ð  Ð'Ü!ð Zóð ð 'ˆGØ ŸI™I }×';Ñ';¸DÀ!Ó'DÀQÑ'GÈÐ&QÓRˆMáØ×"Ñ"ØØØØØôð ØØ"ñ
ð 	
r$   c                ó¤   — |r4t        j                  dt        |j                  «       «      › �t        «       | j                  |||||¬«      }|d   S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: )rp   rW   )ri   rj   rk   r   r   rs   )r   ro   r!   r    r   rp   rq   Údecodeds           r"   rV   zPyJWS.decodeõ   sc   € ñ Ü�M‰Mð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'ô	ð ×&Ñ&Ø��j 'Ð<Lð 'ó 
ˆð �yÑ!Ð!r$   c                óP   — | j                  |«      d   }| j                  |«       |S )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
        é   )rl   rM   )r   ro   rY   s      r"   Úget_unverified_headerzPyJWS.get_unverified_header
  s)   € ð —*‘*˜S“/ !Ñ$ˆØ×Ñ˜wÔ'àˆr$   c                ód  — t        |t        «      r|j                  d«      }t        |t        «      st	        dt        › �«      ‚	 |j                  dd«      \  }}|j                  dd«      \  }}	 t        |«      }	 t        j                  |«      }t        |t        «      st	        d«      ‚|j                  d	d
«      du r|rt	        d«      ‚d}
n	 t        |«      }
	 t        |«      }|
|||fS # t        $ r}t	        d«      |‚d }~ww xY w# t        t        j                  f$ r}t	        d«      |‚d }~ww xY w# t        $ r}	t	        d|	› �«      |	‚d }	~	ww xY w# t        t        j                  f$ r}t	        d«      |‚d }~ww xY w# t        t        j                  f$ r}t	        d«      |‚d }~ww xY w)NrJ   z$Invalid token type. Token must be a rI   r   zNot enough segmentszInvalid header paddingzInvalid header string: z,Invalid header string: must be a json objectr?   TFz2Payload segment must be empty when 'b64' is false.r$   zInvalid payload paddingzInvalid crypto padding)r*   ÚstrrQ   Úbytesr   rm   Úsplitr)   r   r+   ÚbinasciiÚErrorrO   ÚloadsÚdictrK   )r   ro   re   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚerrÚheader_datara   r:   rW   rf   s               r"   rl   zPyJWS._load  sË  € Ü�cœ3ÔØ—*‘*˜WÓ%ˆCä˜#œuÔ%ÜÐ DÄUÀGÐLÓMÐMð	>Ø,/¯J©J°t¸QÓ,?Ñ)ˆM˜>Ø.;×.AÑ.AÀ$ÈÓ.JÑ+ˆN˜Oð	AÜ*¨>Ó:ˆKð	DÜ—Z‘Z Ó,ˆFô ˜&¤$Ô'ÜÐLÓMÐMà�:‰:�e˜TÓ" eÑ+ñ Ü!ØHóð ð ‰GðFÜ*¨?Ó;�ð	AÜ(¨Ó8ˆIð ˜¨°	Ð:Ð:øôQ ò 	>ÜÐ3Ó4¸#Ð=ûð	>ûô
 œ8Ÿ>™>Ð*ò 	AÜÐ6Ó7¸SÐ@ûð	Aûô
 ò 	DÜÐ 7¸°sÐ;Ó<À!ÐCûð	Dûô, œxŸ~™~Ð.ò FÜ!Ð";Ó<À#ÐEûðFûô
 œ8Ÿ>™>Ð*ò 	AÜÐ6Ó7¸SÐ@ûð	Aúsx   Á*C. Á0D Á<D8 ÃE ÃF Ã.	DÃ7DÄDÄD5Ä$D0Ä0D5Ä8	EÅEÅEÅFÅ1E=Å=FÆF/ÆF*Æ*F/c                ó"  — 	 |d   }|r|�||vrt        d«      ‚	 | j                  |«      }|j	                  |«      }	|j                  ||	|«      st        d«      ‚y # t         $ r t        d«      ‚w xY w# t        $ r}t        d«      |‚d }~ww xY w)Nr>   zAlgorithm not specifiedz&The specified alg value is not allowedr7   zSignature verification failed)r1   r   r;   r8   rT   Úverifyr   )
r   re   ra   rf   r!   r    r>   r.   r:   Úprepared_keys
             r"   rn   zPyJWS._verify_signatureI  s¸   € ð	CØ˜‘-ˆCñ �zÐ-°#¸ZÑ2GÜ'Ð(PÓQÐQð	JØ×0Ñ0°Ó5ˆGð ×*Ñ*¨3Ó/ˆà�~‰~˜m¨\¸9ÔEÜ'Ð(GÓHÐHð Føô ò 	CÜ'Ð(AÓBÐBð	Cûô #ò 	JÜ'Ð(AÓBÈÐIûð	Jús"   ‚A ›A4 ÁA1Á4	BÁ=B	Â	Br?   zset[str]Ú_supported_critrA   c               óf   — d|v r| j                  |d   «       |sd|v r| j                  |«       y y y )NÚkidrC   )Ú_validate_kidÚ_validate_crit)r   rY   rB   s      r"   rM   zPyJWS._validate_headerse  s=   € ð �GÑØ×Ñ˜w u™~Ô.Ù˜F gÑ-Ø×Ñ Õ(ð .ˆxr$   c                ó:   — t        |t        «      st        d«      ‚y )Nz(Key ID header parameter must be a string)r*   rz   r   )r   r‹   s     r"   rŒ   zPyJWS._validate_kidm  s   € Ü˜#œsÔ#Ü#Ð$NÓOÐOð $r$   c                ó  — |d   }t        |t        «      rt        |«      dk(  rt        d«      ‚|D ]L  }t        |t        «      st        d«      ‚|| j
                  vrt        d|› �«      ‚||vsŒ?t        d|› d�«      ‚ y )NrC   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   rz   r‰   )r   rY   rC   Úexts       r"   r�   zPyJWS._validate_critq  s“   € Ø�v‰ˆÜ˜$¤Ô%¬¨T«°aªÜ#Ð$UÓVÐVØò 	ˆCÜ˜c¤3Ô'Ü'Ð(WÓXÐXØ˜$×.Ñ.Ñ.Ü'Ð*JÈ3È%Ð(PÓQÐQØ˜'Ò!Ü'Ø*¨3¨%Ð/HÐIóð ñ	r$   )NN)r    úlist[str] | Noner   údict[str, Any] | NoneÚreturnÚNone)r”   zdict[str, bool])r-   rz   r.   r   r”   r•   )r-   rz   r”   r•   )r”   z	list[str])r9   rz   r”   r   )ÚHS256NNFT)rW   r{   r!   z AllowedPrivateKeys | str | bytesrX   z
str | NonerY   r“   rZ   ztype[json.JSONEncoder] | Noner[   Úboolr\   r—   r”   rz   )Ú NNN)ro   ústr | bytesr!   úAllowedPublicKeys | str | bytesr    r’   r   r“   rp   úbytes | Noner”   údict[str, Any])ro   r™   r!   rš   r    r’   r   r“   rp   r›   r”   r   )ro   r™   r”   rœ   )ro   r™   r”   z*tuple[bytes, bytes, dict[str, Any], bytes])r˜   N)re   r{   ra   rœ   rf   r{   r!   rš   r    r’   r”   r•   )rY   rœ   rB   r—   r”   r•   )r‹   r   r”   r•   )rY   rœ   r”   r•   )Ú__name__Ú
__module__Ú__qualname__rL   r#   Ústaticmethodr   r/   r3   r5   r;   rQ   rs   rV   rx   rl   rn   r‰   Ú__annotations__rM   rŒ   r�   r'   r$   r"   r   r      sû  … Ø€Jð (,Ø)-ðBà$ðBð 'ðBð 
ó	Bð& ò*ó ð*ó%ó(ó&óHð* !(Ø)-Ø6:Ø$)Ø!ðN.àðN.ð .ðN.ð ð	N.ð
 'ðN.ð 4ðN.ð "ðN.ð ðN.ð 
óN.ðf 02Ø'+Ø)-Ø)-ð<
àð<
ð -ð<
ð %ð	<
ð
 'ð<
ð 'ð<
ð 
ó<
ðB 02Ø'+Ø)-Ø)-ð"àð"ð -ð"ð %ð	"ð
 'ð"ð 'ð"ð 
ó"ó*	ó2;ðr 02Ø'+ðIàðIð ðIð ð	Ið
 -ðIð %ðIð 
óIð4 "' €O�XÓ'ð <Añ)Ø%ð)Ø48ð)à	ó)óPôr$   r   )!Ú
__future__r   r}   rO   ri   Útypingr   r   r    r   r   r	   r
   Ú
exceptionsr   r   r   r   Úutilsr   r   r   r   r   r   Ú_jws_global_objrQ   rs   rV   r/   r3   r;   rx   r'   r$   r"   ú<module>r§      s�   ðÝ "ã Û Û ß %÷ó ÷ó ÷ 6Ý ,áßA÷bñ bñJ “'€Ø	×	Ñ	€Ø!×1Ñ1€Ø	×	Ñ	€Ø$×7Ñ7Ð Ø&×;Ñ;Ð Ø'×=Ñ=Ð Ø'×=Ñ=Ñ r$   