§
    ¢”j¨7  ã                  ój  — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZmZmZmZmZ dd	lmZmZ dd
lmZmZ erddl
mZmZ ddlmZ  e ¦   «         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)ÚSequence)ÚTYPE_CHECKINGÚAnyé   )Ú	AlgorithmÚget_default_algorithmsÚ
has_cryptoÚrequires_cryptography)ÚPyJWK)ÚDecodeErrorÚInvalidAlgorithmErrorÚInvalidKeyErrorÚInvalidSignatureErrorÚInvalidTokenError)Úbase64url_decodeÚbase64url_encode)ÚInsecureKeyLengthWarningÚRemovedInPyjwt3Warning)ÚAllowedPrivateKeysÚAllowedPublicKeys)Ú
SigOptionsc                  óÞ   — e Zd ZU dZ	 	 dAdBd	„ZedCd„¦   «         ZdDd„ZdEd„ZdFd„Z	dGd„Z
eddddfdHd%„Z	 	 	 	 dIdJd.„Z	 	 	 	 dIdKd0„ZdLd1„ZdMd3„Z	 	 dNdOd7„Zd8hZd9ed:<   dd;œdPd=„ZdQd?„ZdRd@„ZdS )SÚPyJWSÚJWTNÚ
algorithmsúSequence[str] | NoneÚoptionsúSigOptions | NoneÚreturnÚNonec                óN  — t          ¦   «         | _        |�t          |¦  «        nt          | j        ¦  «        | _        t	          | j                             ¦   «         ¦  «        D ]}|| j        vr| j        |= Œ|                      ¦   «         | _        |�i | j        ¥|¥| _        d S d S )N)r	   Ú_algorithmsÚsetÚ_valid_algsÚlistÚkeysÚ_get_default_optionsr   )Úselfr   r   Úkeys       úZ/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/jwt/api_jws.pyÚ__init__zPyJWS.__init__$   s±   € õ
 2Ñ3Ô3ˆÔà)Ð5�C�
‰OŒOˆO½3¸tÔ?OÑ;PÔ;Pð 	Ôõ
 ˜Ô(×-Ò-Ñ/Ô/Ñ0Ô0ð 	*ð 	*ˆCØ˜$Ô*Ð*Ð*ØÔ$ SÐ)øà#'×#<Ò#<Ñ#>Ô#>ˆŒØÐØ6˜dœlÐ6¨gÐ6ˆDŒLˆLˆLð Ðó    r   c                 ó   — dddœS )NTF)Úverify_signatureÚenforce_minimum_key_length© r1   r-   r+   r(   zPyJWS._get_default_options7   s   € à$(ÈÐNÐNÐNr-   Úalg_idÚstrÚalg_objr   c                óÆ   — || j         v rt          d¦  «        ‚t          |t          ¦  «        st	          d¦  «        ‚|| j         |<   | j                             |¦  «         dS )zÙ
        Registers a new Algorithm for use when creating and verifying tokens.

        :param str alg_id: the ID of the Algorithm
        :param alg_obj: the Algorithm object
        :type alg_obj: Algorithm
        z Algorithm already has a handler.z!Object is not of type `Algorithm`N)r#   Ú
ValueErrorÚ
isinstancer   Ú	TypeErrorr%   Úadd)r)   r2   r4   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
        :param str alg_id: the ID of the Algorithm
        :raises 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_algorithmzPyJWS.unregister_algorithmL   sS   € ð ˜Ô)Ð)Ð)Ýð1ñô ð ð
 Ô˜VÐ$ØÔ×Ò Ñ'Ô'Ð'Ð'Ð'r-   ú	list[str]c                ó*   — t          | j        ¦  «        S )zh
        Returns a list of supported values for the `alg` parameter.

        :rtype: list[str]
        )r&   r%   )r)   s    r+   Úget_algorithmszPyJWS.get_algorithms[   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)a/  
        For a given string name, return the matching Algorithm object.

        Example usage:
        >>> jws_obj = PyJWS()
        >>> jws_obj.get_algorithm_by_name("RS256")

        :param alg_name: The name of the algorithm to retrieve
        :type alg_name: str
        :rtype: Algorithm
        zAlgorithm 'z9' could not be found. Do you have cryptography installed?úAlgorithm not supportedN)r#   r<   r
   r   ÚNotImplementedError)r)   rB   Úes      r+   Úget_algorithm_by_namezPyJWS.get_algorithm_by_namec   s‚   € ð	HØÔ# HÔ-Ð-øÝð 	Hð 	Hð 	HÝð  (Õ.CÐ"CÐ"CÝ)Øe (ÐeÐeÐeñô àðõ &Ð&?Ñ@Ô@ÀaÐGøøøøð	Høøøs   ‚ �
A™4AÁAFTÚpayloadÚbytesr*   ú(AllowedPrivateKeys | PyJWK | str | bytesÚ	algorithmú
str | NoneÚheadersúdict[str, Any] | NoneÚjson_encoderútype[json.JSONEncoder] | NoneÚis_payload_detachedÚboolÚsort_headersc                óè  — g }|t           u r t          |t          ¦  «        r|j        }	n'd}	n$|€ t          |t          ¦  «        r|j        }	nd}	n|}	|r:|                     d¦  «        }
|
r|d         }	|                     d¦  «        }|du rd}| j        |	dœ}|r,|                      |d¬¦  «         |                     |¦  «         |d	         s|d	= |rd|d<   nd|v r|d= t          j	        |d
||¬¦  «         
                    ¦   «         }|                     t          |¦  «        ¦  «         |r|}nt          |¦  «        }|                     |¦  «         d                     |¦  «        }|                      |	¦  «        }t          |t          ¦  «        r|j        }|                     |¦  «        }|                     |¦  «        }|rF| j                             dd¦  «        rt'          |¦  «        ‚t)          j        |t,          d¬¦  «         |                     ||¦  «        }|                     t          |¦  «        ¦  «         |rd|d<   d                     |¦  «        }|                     d¦  «        S )NÚHS256ÚnoneÚalgÚb64FT)ÚtyprW   ©ÚencodingrY   )ú,ú:)Ú
separatorsÚclsÚ	sort_keysó   .r0   é   ©Ú
stacklevelr-   r   úutf-8)Ú_ALGORITHM_UNSETr7   r   Úalgorithm_nameÚgetÚ
header_typÚ_validate_headersÚupdateÚjsonÚdumpsÚencodeÚappendr   ÚjoinrG   r*   Úprepare_keyÚcheck_key_lengthr   r   ÚwarningsÚwarnr   ÚsignÚdecode)r)   rH   r*   rK   rM   rO   rQ   rS   ÚsegmentsÚ
algorithm_Úheaders_algÚheaders_b64ÚheaderÚjson_headerÚmsg_payloadÚsigning_inputr4   Úkey_length_msgÚ	signatureÚencoded_strings                       r+   rn   zPyJWS.encodex   s½  € ð !#ˆð Õ(Ð(Ð(Ý˜#�uÑ%Ô%ð %Ø Ô/�
�
à$�
�
ØÐÝ˜#�uÑ%Ô%ð $Ø Ô/�
�
à#�
�
à"ˆJð ð 	+Ø!Ÿ+š+ eÑ,Ô,ˆKØð ,Ø$ Uœ^�
à!Ÿ+š+ eÑ,Ô,ˆKØ˜eÐ#Ð#Ø&*Ð#ð *.¬ÀÐ!LÐ!Lˆàð 	#Ø×"Ò" 7°TÐ"Ñ:Ô:Ð:Ø�MŠM˜'Ñ"Ô"Ð"à�eŒ}ð 	Ø�u�àð 	Ø!ˆF�5‰MˆMØ�fˆ_ˆ_à�u�å”jØ˜z¨|À|ð
ñ 
ô 
ç
Š&‰(Œ(ð 	ð 	�ŠÕ(¨Ñ5Ô5Ñ6Ô6Ð6àð 	4Ø!ˆKˆKå*¨7Ñ3Ô3ˆKØ�Š˜Ñ$Ô$Ð$ð Ÿ	š	 (Ñ+Ô+ˆà×,Ò,¨ZÑ8Ô8ˆÝ�c�5Ñ!Ô!ð 	Ø”'ˆCØ×!Ò! #Ñ&Ô&ˆà ×1Ò1°#Ñ6Ô6ˆØð 	VØŒ|×ÒÐ <¸eÑDÔDð VÝ% nÑ5Ô5Ð5å”˜nÕ.FÐSTÐUÑUÔUÐUà—L’L °Ñ4Ô4ˆ	à�ŠÕ(¨Ñ3Ô3Ñ4Ô4Ð4ð ð 	ØˆH�Q‰KØŸš 8Ñ,Ô,ˆà×$Ò$ WÑ-Ô-Ð-r-   Ú Újwtústr | bytesú'AllowedPublicKeys | PyJWK | str | bytesÚdetached_payloadúbytes | NoneÚkwargsúdict[str, Any]c                ód  — |r>t          j        dt          |                     ¦   «         ¦  «        › �t          d¬¦  «         |€| j        }ni | j        ¥|¥}|d         }|r&|s$t          |t          ¦  «        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: rb   rc   r/   z\It is required that you pass in a value for the "algorithms" argument when calling decode().rX   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.ra   r   r   )rH   r{   r€   )rs   rt   Útupler'   r   r   r7   r   r   Ú_loadrj   rh   rp   ÚrsplitÚ_verify_signature)r)   rƒ   r*   r   r   r†   rˆ   Úmerged_optionsr/   rH   r~   r{   r€   s                r+   Údecode_completezPyJWS.decode_completeÒ   s‡  € ð ð 	ÝŒMð>å',¨V¯[ª[©]¬]Ñ';Ô';ð>ð >õ 'Øðñ ô ð ð ˆ?Ø!œ\ˆNˆNà8 ¤Ð8°Ð8ˆNà)Ð*<Ô=Ðàð 	 Jð 	µzÀ#ÅuÑ7MÔ7Mð 	ÝØnñô ð ð 59·J²J¸s±O´OÑ1ˆ� ¨	à×Ò˜vÑ&Ô&Ð&à�:Š:�e˜TÑ"Ô" eÐ+Ð+ØÐ'Ý!ð Zñô ð ð 'ˆGØ ŸIšI }×';Ò';¸DÀ!Ñ'DÔ'DÀQÔ'GÈÐ&QÑRÔRˆMàð 	VØ×"Ò" =°&¸)ÀSÈ*ÑUÔUÐUð ØØ"ð
ð 
ð 	
r-   r   c                óÆ   — |r>t          j        dt          |                     ¦   «         ¦  «        › �t          d¬¦  «         |                      |||||¬¦  «        }|d         S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rb   rc   )r†   rH   )rs   rt   r‹   r'   r   r�   )r)   rƒ   r*   r   r   r†   rˆ   Údecodeds           r+   rv   zPyJWS.decode  s„   € ð ð 	ÝŒMð>å',¨V¯[ª[©]¬]Ñ';Ô';ð>ð >õ 'Øðñ ô ð ð ×&Ò&Ø��j 'Ð<Lð 'ñ 
ô 
ˆð �yÔ!Ð!r-   c                ó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
        rb   )rŒ   rj   )r)   rƒ   rM   s      r+   Úget_unverified_headerzPyJWS.get_unverified_header  s1   € ð —*’*˜S‘/”/ !Ô$ˆØ×Ò˜wÑ'Ô'Ð'àˆr-   ú*tuple[bytes, bytes, dict[str, Any], 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 )Nre   z$Invalid token type. Token must be a ra   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)r7   r3   rn   rI   r   r�   Úsplitr6   r   r8   ÚbinasciiÚErrorrl   ÚloadsÚdict)r)   rƒ   r~   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚerrÚheader_datar{   rF   rH   r€   s               r+   rŒ   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r~   r{   r€   c                ó¬  — |€t          |t          ¦  «        r|j        g}	 |d         }n# t          $ r t	          d¦  «        d ‚w xY w|r|�||vrt	          d¦  «        ‚t          |t          ¦  «        r|j        }|j        }nN	 |                      |¦  «        }n"# t          $ r}	t	          d¦  «        |	‚d }	~	ww xY w| 	                    |¦  «        }| 
                    |¦  «        }
|
rF| j                             dd¦  «        rt          |
¦  «        ‚t          j        |
t           d¬¦  «         |                     |||¦  «        st%          d	¦  «        ‚d S )
NrW   zAlgorithm not specifiedz&The specified alg value is not allowedrD   r0   Fé   rc   zSignature verification failed)r7   r   rg   r<   r   r   r*   rG   rE   rq   rr   r   rh   r   rs   rt   r   Úverifyr   )r)   r~   r{   r€   r*   r   rW   r4   Úprepared_keyrF   r   s              r+   rŽ   zPyJWS._verify_signatureL  s¥  € ð Ð¥*¨Sµ%Ñ"8Ô"8ÐØÔ,Ð-ˆJð	MØ˜”-ˆCˆCøÝð 	Mð 	Mð 	MÝ'Ð(AÑBÔBÈÐLð	Møøøð ð 	R�zÐ-°#¸ZÐ2GÐ2GÝ'Ð(PÑQÔQÐQå�c�5Ñ!Ô!ð 	4Ø”mˆGØœ7ˆLˆLðNØ×4Ò4°SÑ9Ô9��øÝ&ð Nð Nð NÝ+Ð,EÑFÔFÈAÐMøøøøðNøøøà"×.Ò.¨sÑ3Ô3ˆLà ×1Ò1°,Ñ?Ô?ˆØð 	VØŒ|×ÒÐ <¸eÑDÔDð VÝ% nÑ5Ô5Ð5å”˜nÕ.FÐSTÐUÑUÔUÐUà�~Š~˜m¨\¸9ÑEÔEð 	IÝ'Ð(GÑHÔHÐHð	Ið 	Is!   ¡* ªAÂB Â
B9Â$B4Â4B9rX   zset[str]Ú_supported_critrZ   r[   c               ó‚   — d|v r|                       |d         ¦  «         |sd|v r|                      |¦  «         d S d S d S )NÚkidÚcrit)Ú_validate_kidÚ_validate_crit)r)   rM   r[   s      r+   rj   zPyJWS._validate_headersu  sc   € ð �GÐÐØ×Ò˜w uœ~Ñ.Ô.Ð.Øð 	)˜F gÐ-Ð-Ø×Ò Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)Ð-Ð-r-   r§   c                óN   — t          |t          ¦  «        st          d¦  «        ‚d S )Nz(Key ID header parameter must be a string)r7   r3   r   )r)   r§   s     r+   r©   zPyJWS._validate_kid}  s0   € Ý˜#�sÑ#Ô#ð 	PÝ#Ð$NÑOÔOÐOð	Pð 	Pr-   c                ó:  — |d         }t          |t          ¦  «        rt          |¦  «        dk    rt          d¦  «        ‚|D ]X}t          |t          ¦  «        st          d¦  «        ‚|| j        vrt          d|› �¦  «        ‚||vrt          d|› d�¦  «        ‚ŒYd S )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)r7   r&   Úlenr   r3   r¥   )r)   rM   r¨   Úexts       r+   rª   zPyJWS._validate_crit�  sË   € Ø�vŒˆÝ˜$¥Ñ%Ô%ð 	W­¨T©¬°aª¨Ý#Ð$UÑVÔVÐVØð 	ð 	ˆCÝ˜c¥3Ñ'Ô'ð YÝ'Ð(WÑXÔXÐXØ˜$Ô.Ð.Ð.Ý'Ð(PÈ3Ð(PÐ(PÑQÔQÐQØ˜'Ð!Ð!Ý'ØI¨3ÐIÐIÐIñô ð ð "ð	ð 	r-   )NN)r   r   r   r   r    r!   )r    r   )r2   r3   r4   r   r    r!   )r2   r3   r    r!   )r    r?   )rB   r3   r    r   )rH   rI   r*   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rR   r    r3   )r‚   NNN)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    r   )rƒ   r„   r    r‰   )rƒ   r„   r    r•   )r‚   N)r~   rI   r{   r‰   r€   rI   r*   r…   r   r   r    r!   )rM   r‰   r[   rR   r    r!   )r§   r   r    r!   )rM   r‰   r    r!   )Ú__name__Ú
__module__Ú__qualname__ri   r,   Ústaticmethodr(   r:   r>   rA   rG   rf   rn   r�   rv   r”   rŒ   rŽ   r¥   Ú__annotations__rj   r©   rª   r1   r-   r+   r   r   !   sè  € € € € € € Ø€Jð ,0Ø%)ð7ð 7ð 7ð 7ð 7ð& ðOð Oð Oñ „\ðOð%ð %ð %ð %ð"(ð (ð (ð (ð&ð &ð &ð &ðHð Hð Hð Hð2 !1Ø)-Ø6:Ø$)Ø!ðX.ð X.ð X.ð X.ð X.ðz 8:Ø+/Ø%)Ø)-ð1
ð 1
ð 1
ð 1
ð 1
ðl 8:Ø+/Ø%)Ø)-ð"ð "ð "ð "ð "ð,	ð 	ð 	ð 	ð$;ð $;ð $;ð $;ðV 8:Ø+/ð$Ið $Ið $Ið $Ið $IðN "' €OÐ'Ð'Ð'Ñ'ð <Að)ð )ð )ð )ð )ð )ðPð Pð Pð Pðð ð ð ð ð r-   r   )+Ú
__future__r   r˜   rl   rs   Úcollections.abcr   Útypingr   r   r   r   r	   r
   r   Úapi_jwkr   Ú
exceptionsr   r   r   r   r   Úutilsr   r   r   r   r   r   Útypesr   Úobjectrf   r   Ú_jws_global_objrn   r�   rv   r:   r>   rG   r”   r1   r-   r+   ú<module>r½      sâ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fàð "ØAÐAÐAÐAÐAÐAÐAÐAØ!Ð!Ð!Ð!Ð!Ð!à�6‘8”8Ð ðlð lð lð lð lñ lô lð lð^ �%‘'”'€Ø	Ô	€Ø!Ô1€Ø	Ô	€Ø$Ô7Ð Ø&Ô;Ð Ø'Ô=Ð Ø'Ô=Ð Ð Ð r-   