Ë
    o UfŸ  ã                   óL  — d dl Z d dlZd dlZ	 d dlmZ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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  G d„ d	e«      Z e«       Z e jB                  Z!e jD                  Z"e jF                  Z#e jH                  Z$e jJ                  Z%y# e	$ r Y Œ†w xY w)
é    N)ÚCallableÚDictÚListÚOptionalÚUnioné   )Ú	AlgorithmÚget_default_algorithmsÚ
has_cryptoÚrequires_cryptography)ÚMappingÚbinary_typeÚstring_typesÚ	text_type)ÚDecodeErrorÚInvalidAlgorithmErrorÚInvalidSignatureErrorÚInvalidTokenError)Úbase64url_decodeÚbase64url_encodeÚforce_bytesÚ
merge_dictc                   óz   — e Zd ZdZdd„Zed„ «       Zd„ Zd„ Zd„ Z		 	 	 dd„Z
	 	 	 	 dd	„Zd
„ Zd„ Z	 dd„Zd„ Zd„ Zy)ÚPyJWSÚJWTNc                 ó>  — t        «       | _        |�t        |«      nt        | j                  «      | _        t	        | j                  j                  «       «      D ]  }|| j                  vsŒ| j                  |= Œ  |si }t        | j                  «       |«      | _        y )N)	r
   Ú_algorithmsÚsetÚ_valid_algsÚlistÚkeysr   Ú_get_default_optionsÚoptions)ÚselfÚ
algorithmsr#   Úkeys       úJC:\Users\user\Documents\project_loop\venv\Lib\site-packages\jwt/api_jws.pyÚ__init__zPyJWS.__init__   s‘   € Ü1Ó3ˆÔØ/9Ð/EœC 
œOÜ!$ T×%5Ñ%5Ó!6ð 	Ôô ˜×(Ñ(×-Ñ-Ó/Ó0ò 	*ˆCØ˜$×*Ñ*Ò*Ø×$Ñ$ SÑ)ð	*ñ ØˆGä! $×";Ñ";Ó"=¸wÓGˆ�ó    c                  ó
   — ddiS )NÚverify_signatureT© r,   r)   r'   r"   zPyJWS._get_default_options'   s   € ð  ð
ð 	
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_algorithm-   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$   r2   s     r'   Úunregister_algorithmzPyJWS.unregister_algorithm:   sH   € ð
 ˜×)Ñ)Ñ)Üð <ó =ð =ð ×Ñ˜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_algorithmsF   s   € ô �D×$Ñ$Ó%Ð%r)   c                 ó‚  — g }|€d}|| j                   vr	 | j                  |dœ}|r"| j                  |«       |j                  |«       t	        t        j                  |d|¬«      «      }|j                  t        |«      «       |j                  t        |«      «       dj                  |«      }		 | j                  |   }
|
j                  |«      }|
j                  |	|«      }|j                  t        |«      «       dj                  |«      S # t        $ r( t        s|t        v rt!        d|z  «      ‚t!        d«      ‚w xY w)NÚnone)ÚtypÚalg)ú,ú:)Ú
separatorsÚclsó   .zFAlgorithm '%s' could not be found. Do you have cryptography installed?úAlgorithm not supported)r   Ú
header_typÚ_validate_headersÚupdater   ÚjsonÚdumpsÚappendr   Újoinr   Úprepare_keyÚsignr6   r   r   ÚNotImplementedError)r$   Úpayloadr&   Ú	algorithmÚheadersÚjson_encoderÚsegmentsÚheaderÚjson_headerÚsigning_inputr3   Ú	signatures               r'   ÚencodezPyJWS.encodeL   sF  € ð ˆàÐØˆIà˜D×,Ñ,Ñ,Øð Ÿ™°Ñ;ˆáØ×"Ñ" 7Ô+Ø�M‰M˜'Ô"ä!Ü�J‰JØØ%Ø ôó
ˆð 	�‰Ô(¨Ó5Ô6Ø�‰Ô(¨Ó1Ô2ð Ÿ	™	 (Ó+ˆð	EØ×&Ñ& yÑ1ˆGØ×%Ñ% cÓ*ˆCØŸ™ ]°CÓ8ˆIð 	�‰Ô(¨Ó3Ô4à�y‰y˜Ó"Ð"øô ò 	EÝ )Ô/DÑ"DÜ)ð!Ø#,ñ-óð ô
 *Ð*CÓDÐDð	Eús   Â02D Ä1D>c                 ó  — t        | j                  |«      }|d   }|r|st        j                  dt        «       | j                  |«      \  }	}
}}|st        j                  dt        d¬«       |	S |r| j                  |	|
||||«       |	S )Nr+   z�It is strongly recommended that you pass in a value for the "algorithms" argument when calling decode(). This argument will be mandatory in a future version.zSThe verify parameter is deprecated. Please use verify_signature in options instead.é   )Ú
stacklevel)r   r#   ÚwarningsÚwarnÚDeprecationWarningÚ_loadÚ_verify_signature)r$   Újwtr&   Úverifyr%   r#   ÚkwargsÚmerged_optionsr+   rO   rV   rT   rW   s                r'   ÚdecodezPyJWS.decode�   sœ   € ô $ D§L¡L°'Ó:ˆØ)Ð*<Ñ=Ðá¡JÜ�M‰MðGô #ô	ð 59·J±J¸s³OÑ1ˆ� ¨	áÜ�M‰Mð Lä,¸õ<ð ˆñ	 Ø×"Ñ" 7¨M¸6À9Ø#&¨
ô4ð ˆ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
        rZ   )r_   rF   )r$   ra   rQ   s      r'   Úget_unverified_headerzPyJWS.get_unverified_header    s)   € ð —*‘*˜S“/ !Ñ$ˆØ×Ñ˜wÔ'àˆr)   c                 ó:  — t        |t        «      r|j                  d«      }t        t	        |«      t
        «      st        dj                  t
        «      «      ‚	 |j                  dd«      \  }}|j                  dd«      \  }}	 t        |«      }	 t        j                   |j#                  d«      «      }t        |t$        «      st        d«      ‚	 t        |«      }		 t        |«      }
|	|||
fS # t        $ r t        d«      ‚w xY w# t        t        j                  f$ r t        d«      ‚w xY w# t        $ r}t        d|z  «      ‚d }~ww xY w# t        t        j                  f$ r t        d	«      ‚w xY w# t        t        j                  f$ r t        d
«      ‚w xY w)Nzutf-8z'Invalid token type. Token must be a {0}rC   r   zNot enough segmentszInvalid header paddingzInvalid header string: %sz,Invalid header string: must be a json objectzInvalid payload paddingzInvalid crypto padding)r/   r   rX   Ú
issubclassÚtyper   r   ÚformatÚrsplitÚsplitr.   r   r0   ÚbinasciiÚErrorrH   Úloadsre   r   )r$   ra   rV   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚheader_datarT   ÚerO   rW   s              r'   r_   zPyJWS._load«   s™  € Ü�cœ9Ô%Ø—*‘*˜WÓ%ˆCäœ$˜s›)¤[Ô1ÜÐG×NÑNÜóó ð ð	5Ø,/¯J©J°t¸QÓ,?Ñ)ˆM˜>Ø.;×.AÑ.AÀ$ÈÓ.JÑ+ˆN˜Oð	8Ü*¨>Ó:ˆKð	?Ü—Z‘Z × 2Ñ 2°7Ó ;Ó<ˆFô ˜&¤'Ô*ÜÐLÓMÐMð	9Ü& Ó7ˆGð	8Ü(¨Ó8ˆIð ˜¨°	Ð:Ð:øô5 ò 	5ÜÐ3Ó4Ð4ð	5ûô
 œ8Ÿ>™>Ð*ò 	8ÜÐ6Ó7Ð7ð	8ûô
 ò 	?ÜÐ9¸AÑ=Ó>Ð>ûð	?ûô œ8Ÿ>™>Ð*ò 	9ÜÐ7Ó8Ð8ð	9ûô
 œ8Ÿ>™>Ð*ò 	8ÜÐ6Ó7Ð7ð	8úsH   Á*C. ÂD Â$D. ÃE ÃE5 Ã.DÄ%D+Ä.	E
Ä7EÅE
Å%E2Å5%Fc                 óö   — |j                  d«      }|�||vrt        d«      ‚	 | j                  |   }|j                  |«      }|j	                  |||«      st        d«      ‚y # t        $ r t        d«      ‚w xY w)Nr>   z&The specified alg value is not allowedzSignature verification failedrD   )Úgetr   r   rL   rb   r   r6   )	r$   rO   rV   rT   rW   r&   r%   r>   r3   s	            r'   r`   zPyJWS._verify_signatureÒ   s’   € ð �j‰j˜ÓˆàÐ! c°Ñ&;Ü'Ð(PÓQÐQð	CØ×&Ñ& sÑ+ˆGØ×%Ñ% cÓ*ˆCà—>‘> -°°iÔ@Ü+Ð,KÓLÐLð Aøô ò 	CÜ'Ð(AÓBÐBð	Cús   ¤>A# Á#A8c                 ó6   — d|v r| j                  |d   «       y y )NÚkid)Ú_validate_kid)r$   rQ   s     r'   rF   zPyJWS._validate_headersä   s!   € Ø�GÑØ×Ñ˜w u™~Õ.ð r)   c                 ó:   — t        |t        «      st        d«      ‚y )Nz(Key ID header parameter must be a string)r/   r   r   )r$   ry   s     r'   rz   zPyJWS._validate_kidè   s   € Ü˜#œ|Ô,Ü#Ð$NÓOÐOð -r)   )NN)ÚHS256NN)Ú TNN)r}   N)Ú__name__Ú
__module__Ú__qualname__rE   r(   Ústaticmethodr"   r4   r8   r:   rX   re   rg   r_   r`   rF   rz   r,   r)   r'   r   r      su   „ Ø€JóHð ñ
ó ð
ò
%ò
(ò&ð !ØØ ó3#ðn ØØØóò>	ò%;ðP .2óCò$/óPr)   r   )&rn   rH   r\   Útypingr   r   r   r   r   ÚImportErrorr%   r	   r
   r   r   Úcompatr   r   r   r   Ú
exceptionsr   r   r   r   Úutilsr   r   r   r   Úobjectr   Ú_jws_global_objrX   re   r4   r8   rg   r,   r)   r'   ú<module>r‰      s¨   ðÛ Û Û ð	ç<Õ<÷ó ÷ BÓ A÷ó ÷ OÓ NôUPˆFô UPñp “'€Ø	×	Ñ	€Ø	×	Ñ	€Ø$×7Ñ7Ð Ø&×;Ñ;Ð Ø'×=Ñ=Ñ øðW ò 	Ùð	ús   ŽB ÂB#Â"B#