§
    7�)c�)  ã                  ó  — 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  G d	„ d
¦  «        Z e¦   «         Zej        Zej        Zej        Zej        Zej        Zej        Zej        ZdS )é    )ÚannotationsN)ÚAnyÚTypeé   )Ú	AlgorithmÚget_default_algorithmsÚ
has_cryptoÚrequires_cryptography)ÚDecodeErrorÚInvalidAlgorithmErrorÚInvalidSignatureErrorÚInvalidTokenError)Úbase64url_decodeÚbase64url_encode)ÚRemovedInPyjwt3Warningc                  ó¸   — e Zd ZdZd6d7d„Zed8d„¦   «         Zd9d„Zd:d„Zd;d„Z	d<d„Z
	 	 	 	 d=d>d„Z	 	 	 	 d?d@d(„Z	 	 	 	 d?dAd)„ZdBd,„ZdCd.„Z	 	 dDdEd2„ZdFd3„ZdGd5„ZdS )HÚPyJWSÚJWTNÚreturnÚNonec                ó6  — t          ¦   «         | _        |�t          |¦  «        nt          | j        ¦  «        | _        t	          | j                             ¦   «         ¦  «        D ]}|| j        vr| j        |= Œ|€i }i |                      ¦   «         ¥|¥| _        d S )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¢   € Ý1Ñ3Ô3ˆÔà)Ð5�C�
‰OŒOˆO½3¸tÔ?OÑ;PÔ;Pð 	Ôõ
 ˜Ô(×-Ò-Ñ/Ô/Ñ0Ô0ð 	*ð 	*ˆCØ˜$Ô*Ð*Ð*ØÔ$ SÐ)øàˆ?ØˆGØA˜$×3Ò3Ñ5Ô5ÐA¸ÐAˆŒˆˆó    údict[str, bool]c                 ó
   — ddiS )NÚverify_signatureT© r(   r$   r"   r   zPyJWS._get_default_options*   s   € à" DÐ)Ð)r$   Úalg_idÚstrÚalg_objr   c                óÆ   — || j         v rt          d¦  «        ‚t          |t          ¦  «        st	          d¦  «        ‚|| j         |<   | j                             |¦  «         dS )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   r)   r+   s      r"   Úregister_algorithmzPyJWS.register_algorithm.   sm   € ð �TÔ%Ð%Ð%ÝÐ?Ñ@Ô@Ð@å˜'¥9Ñ-Ô-ð 	AÝÐ?Ñ@Ô@Ð@à#*ˆÔ˜Ñ ØÔ×Ò˜VÑ$Ô$Ð$Ð$Ð$r$   c                óz   — || j         vrt          d¦  «        ‚| j         |= | j                             |¦  «         dS )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_algorithm;   sS   € ð
 ˜Ô)Ð)Ð)Ýð1ñô ð ð
 Ô˜VÐ$ØÔ×Ò Ñ'Ô'Ð'Ð'Ð'r$   ú	list[str]c                ó*   — t          | j        ¦  «        S )zM
        Returns a list of supported values for the 'alg' parameter.
        )r   r   )r   s    r"   Úget_algorithmszPyJWS.get_algorithmsI   s   € õ �DÔ$Ñ%Ô%Ð%r$   Úalg_namec                óª   — 	 | j         |         S # t          $ r9}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   r3   r	   r
   ÚNotImplementedError)r   r9   Úes      r"   Úget_algorithm_by_namezPyJWS.get_algorithm_by_nameO   s‚   € ð	HØÔ# HÔ-Ð-øÝð 	Hð 	Hð 	HÝð  (Õ.CÐ"CÐ"CÝ)Øe (ÐeÐeÐeñô àðõ &Ð&?Ñ@Ô@ÀaÐGøøøøð	Høøøs   ‚ �
A™4AÁAÚHS256FÚpayloadÚbytesr!   Ú	algorithmú
str | NoneÚheadersúdict[str, Any] | NoneÚjson_encoderúType[json.JSONEncoder] | NoneÚis_payload_detachedÚboolc                ód  — g }|�|nd}|r:|                      d¦  «        }	|	r|d         }|                      d¦  «        }
|
du rd}| j        |dœ}|r*|                      |¦  «         |                     |¦  «         |d         s|d= |rd|d<   nd|v r|d= t	          j        |d|d¬	¦  «                             ¦   «         }|                     t          |¦  «        ¦  «         |r|}nt          |¦  «        }|                     |¦  «         d
 	                    |¦  «        }|  
                    |¦  «        }|                     |¦  «        }|                     ||¦  «        }|                     t          |¦  «        ¦  «         |rd|d<   d
 	                    |¦  «        }|                     d¦  «        S )NÚnoneÚalgÚb64FT)ÚtyprL   rN   )ú,ú:)Ú
separatorsÚclsÚ	sort_keysó   .r$   r   úutf-8)ÚgetÚ
header_typÚ_validate_headersÚupdateÚjsonÚdumpsÚencodeÚappendr   Újoinr>   Úprepare_keyÚsignÚdecode)r   r@   r!   rB   rD   rF   rH   ÚsegmentsÚ
algorithm_Úheaders_algÚheaders_b64ÚheaderÚjson_headerÚmsg_payloadÚsigning_inputr+   Ú	signatureÚencoded_strings                     r"   r\   zPyJWS.encode`   só  € ð ˆð (1Ð'<˜)˜)À&ˆ
ð ð 	+Ø!Ÿ+š+ eÑ,Ô,ˆKØð ,Ø$ Uœ^�
à!Ÿ+š+ eÑ,Ô,ˆKØ˜eÐ#Ð#Ø&*Ð#ð *.¬ÀÐ!LÐ!Lˆàð 	#Ø×"Ò" 7Ñ+Ô+Ð+Ø�MŠM˜'Ñ"Ô"Ð"à�eŒ}ð 	Ø�u�àð 	Ø!ˆF�5‰MˆMØ�fˆ_ˆ_à�u�õ ”jØ˜z¨|Àtð
ñ 
ô 
ç
Š&‰(Œ(ð 	ð 	�ŠÕ(¨Ñ5Ô5Ñ6Ô6Ð6àð 	4Ø!ˆKˆKå*¨7Ñ3Ô3ˆKØ�Š˜Ñ$Ô$Ð$ð Ÿ	š	 (Ñ+Ô+ˆà×,Ò,¨ZÑ8Ô8ˆØ×!Ò! #Ñ&Ô&ˆØ—L’L °Ñ4Ô4ˆ	à�ŠÕ(¨Ñ3Ô3Ñ4Ô4Ð4ð ð 	ØˆH�Q‰KØŸš 8Ñ,Ô,ˆà×$Ò$ WÑ-Ô-Ð-r$   Ú Újwtr    úlist[str] | Noner   Údetached_payloadúbytes | Noneúdict[str, Any]c                ó   — |r<t          j        dt          |                     ¦   «         ¦  «        › �t          ¦  «         |€i }i | j        ¥|¥}|d         }|r|st          d¦  «        ‚|                      |¦  «        \  }	}
}}|                     dd¦  «        du rD|€t          d¦  «        ‚|}	d 	                    |
 
                    dd	¦  «        d
         |	g¦  «        }
|r|                      |
||||¦  «         |	||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().rM   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.rT   r   r   )r@   rf   rj   )ÚwarningsÚwarnÚtupler   r   r   r   Ú_loadrV   r^   ÚrsplitÚ_verify_signature)r   rm   r!   r    r   ro   ÚkwargsÚmerged_optionsr'   r@   ri   rf   rj   s                r"   Údecode_completezPyJWS.decode_complete¥   sV  € ð ð 	ÝŒMð>å',¨V¯[ª[©]¬]Ñ';Ô';ð>ð >õ 'ñ	ô ð ð ˆ?ØˆGØ4˜DœLÐ4¨GÐ4ˆØ)Ð*<Ô=Ðàð 	 Jð 	ÝØnñô ð ð 59·J²J¸s±O´OÑ1ˆ� ¨	à�:Š:�e˜TÑ"Ô" eÐ+Ð+ØÐ'Ý!ð Zñô ð ð 'ˆGØ ŸIšI }×';Ò';¸DÀ!Ñ'DÔ'DÀQÔ'GÈÐ&QÑRÔRˆMàð 	VØ×"Ò" =°&¸)ÀSÈ*ÑUÔUÐUð ØØ"ð
ð 
ð 	
r$   c                óÂ   — |r<t          j        dt          |                     ¦   «         ¦  «        › �t          ¦  «         |                      |||||¬¦  «        }|d         S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: )ro   r@   )rs   rt   ru   r   r   r{   )r   rm   r!   r    r   ro   ry   Údecodeds           r"   ra   zPyJWS.decodeÒ   s|   € ð ð 	ÝŒMð>å',¨V¯[ª[©]¬]Ñ';Ô';ð>ð >õ 'ñ	ô ð ð ×&Ò&Ø��j 'Ð<Lð 'ñ 
ô 
ˆð �yÔ!Ð!r$   ústr | bytesÚdictc                óf   — |                       |¦  «        d         }|                      |¦  «         |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
        é   )rv   rX   )r   rm   rD   s      r"   Úget_unverified_headerzPyJWS.get_unverified_headerç   s1   € ð —*’*˜S‘/”/ !Ô$ˆØ×Ò˜wÑ'Ô'Ð'àˆr$   ú tuple[bytes, bytes, dict, bytes]c                óž  — t          |t          ¦  «        r|                     d¦  «        }t          |t          ¦  «        st	          dt          › �¦  «        ‚	 |                     dd¦  «        \  }}|                     dd¦  «        \  }}n"# t          $ r}t	          d¦  «        |‚d }~ww xY w	 t          |¦  «        }n.# t          t          j        f$ r}t	          d¦  «        |‚d }~ww xY w	 t          j        |¦  «        }n%# t          $ r}	t	          d|	› �¦  «        |	‚d }	~	ww xY wt          |t          ¦  «        st	          d¦  «        ‚	 t          |¦  «        }
n.# t          t          j        f$ r}t	          d	¦  «        |‚d }~ww xY w	 t          |¦  «        }n.# t          t          j        f$ r}t	          d
¦  «        |‚d }~ww xY w|
|||fS )NrU   z$Invalid token type. Token must be a rT   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.   r*   r\   rA   r   rw   Úsplitr-   r   r/   ÚbinasciiÚErrorrZ   Úloadsr   )r   rm   ri   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚerrÚheader_datarf   r=   r@   rj   s               r"   rv   zPyJWS._loadò   s0  € Ý�c�3ÑÔð 	&Ø—*’*˜WÑ%Ô%ˆCå˜#�uÑ%Ô%ð 	NÝÐLÅUÐLÐLÑMÔMÐMð	>Ø,/¯JªJ°t¸QÑ,?Ô,?Ñ)ˆM˜>Ø.;×.AÒ.AÀ$ÈÑ.JÔ.JÑ+ˆN˜O˜OøÝð 	>ð 	>ð 	>ÝÐ3Ñ4Ô4¸#Ð=øøøøð	>øøøð	AÝ*¨>Ñ:Ô:ˆKˆKøÝ�8œ>Ð*ð 	Að 	Að 	AÝÐ6Ñ7Ô7¸SÐ@øøøøð	Aøøøð	DÝ”Z Ñ,Ô,ˆFˆFøÝð 	Dð 	Dð 	DÝÐ;¸Ð;Ð;Ñ<Ô<À!ÐCøøøøð	Døøøõ ˜&¥$Ñ'Ô'ð 	NÝÐLÑMÔMÐMð	BÝ& Ñ7Ô7ˆGˆGøÝ�8œ>Ð*ð 	Bð 	Bð 	BÝÐ7Ñ8Ô8¸cÐAøøøøð	Bøøøð	AÝ(¨Ñ8Ô8ˆIˆIøÝ�8œ>Ð*ð 	Að 	Að 	AÝÐ6Ñ7Ô7¸SÐ@øøøøð	Aøøøð ˜¨°	Ð:Ð:sx   Á2B Â
B*ÂB%Â%B*Â.B> Â>C)ÃC$Ã$C)Ã-D Ä
D$ÄDÄD$ÅE ÅFÅ2FÆFÆF ÆGÆ1GÇGri   rf   rj   c                óF  — |                      d¦  «        }|r|�||vrt          d¦  «        ‚	 |                      |¦  «        }n"# t          $ r}t          d¦  «        |‚d }~ww xY w|                     |¦  «        }|                     |||¦  «        st          d¦  «        ‚d S )NrL   z&The specified alg value is not allowedr;   zSignature verification failed)rV   r   r>   r<   r_   Úverifyr   )	r   ri   rf   rj   r!   r    rL   r+   r=   s	            r"   rx   zPyJWS._verify_signature  sÒ   € ð �jŠj˜ÑÔˆàð 	R�zÐ-°#¸ZÐ2GÐ2GÝ'Ð(PÑQÔQÐQð	JØ×0Ò0°Ñ5Ô5ˆGˆGøÝ"ð 	Jð 	Jð 	JÝ'Ð(AÑBÔBÈÐIøøøøð	Jøøøà×!Ò! #Ñ&Ô&ˆà�~Š~˜m¨S°)Ñ<Ô<ð 	IÝ'Ð(GÑHÔHÐHð	Ið 	Is   ®A Á
A#ÁAÁA#c                óH   — d|v r|                       |d         ¦  «         d S d S )NÚkid)Ú_validate_kid)r   rD   s     r"   rX   zPyJWS._validate_headers/  s3   € Ø�GÐÐØ×Ò˜w uœ~Ñ.Ô.Ð.Ð.Ð.ð Ðr$   r‘   c                óN   — t          |t          ¦  «        st          d¦  «        ‚d S )Nz(Key ID header parameter must be a string)r.   r*   r   )r   r‘   s     r"   r’   zPyJWS._validate_kid3  s0   € Ý˜#�sÑ#Ô#ð 	PÝ#Ð$NÑOÔOÐOð	Pð 	Pr$   )NN)r   r   )r   r%   )r)   r*   r+   r   r   r   )r)   r*   r   r   )r   r6   )r9   r*   r   r   )r?   NNF)r@   rA   r!   r*   rB   rC   rD   rE   rF   rG   rH   rI   r   r*   )rl   NNN)rm   r*   r!   r*   r    rn   r   rE   ro   rp   r   rq   )rm   r*   r!   r*   r    rn   r   rE   ro   rp   r   r*   )rm   r~   r   r   )rm   r~   r   rƒ   )rl   N)ri   rA   rf   r   rj   rA   r!   r*   r    rn   r   r   )rD   rq   r   r   )r‘   r*   r   r   )Ú__name__Ú
__module__Ú__qualname__rW   r#   Ústaticmethodr   r1   r5   r8   r>   r\   r{   ra   r‚   rv   rx   rX   r’   r(   r$   r"   r   r      s¤  € € € € € Ø€JðBð Bð Bð Bð Bð ð*ð *ð *ñ „\ð*ð%ð %ð %ð %ð(ð (ð (ð (ð&ð &ð &ð &ðHð Hð Hð Hð* !(Ø)-Ø6:Ø$)ðC.ð C.ð C.ð C.ð C.ðP Ø'+Ø)-Ø)-ð+
ð +
ð +
ð +
ð +
ð` Ø'+Ø)-Ø)-ð"ð "ð "ð "ð "ð*	ð 	ð 	ð 	ð$;ð $;ð $;ð $;ðV Ø'+ðIð Ið Ið Ið Ið./ð /ð /ð /ðPð Pð Pð Pð Pð Pr$   r   )Ú
__future__r   r†   rZ   rs   Útypingr   r   r    r   r   r	   r
   Ú
exceptionsr   r   r   r   Úutilsr   r   r   r   Ú_jws_global_objr\   r{   ra   r1   r5   r>   r‚   r(   r$   r"   ú<module>r�      sv  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð]Pð ]Pð ]Pð ]Pð ]Pñ ]Pô ]Pð ]Pð@	 �%‘'”'€Ø	Ô	€Ø!Ô1€Ø	Ô	€Ø$Ô7Ð Ø&Ô;Ð Ø'Ô=Ð Ø'Ô=Ð Ð Ð r$   