Ë
    [üàgò-  ã                  óz  — 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 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j<                  Zej>                  Zej@                  Z ejB                  Z!ejD                  Z"ejF                  Z#ejH                  Z$y)é    )Ú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                  ó   — e Zd Z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!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       úI/var/www/skyplay_api_hub/venv/lib/python3.12/site-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_options3   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_algorithm7   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_algorithmD   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_algorithmsR   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   r3   r
   r   ÚNotImplementedError)r!   Úalg_nameÚes      r$   Úget_algorithm_by_namezPyJWS.get_algorithm_by_nameX   sc   € ð	HØ×#Ñ# HÑ-Ð-øÜò 	HÝ (Ô.CÑ"CÜ)Ø! ( Ð+dÐeóàðô &Ð&?Ó@ÀaÐGûð	Hús   ‚ ‘	A	š*AÁA	c                óP  — g }|€ t        |t        «      r|j                  }	nd}	n|}	|r/|j                  d«      }
|
r|d   }	|j                  d«      }|du rd}| j                  |	dœ}|r"| j                  |«       |j                  |«       |d   s|d= |rd|d<   nd|v r|d= t        j                  |d||¬	«      j                  «       }|j                  t        |«      «       |r|}nt        |«      }|j                  |«       d
j                  |«      }| j                  |	«      }t        |t        «      r|j                  }|j                  |«      }|j!                  ||«      }|j                  t        |«      «       |rd|d<   d
j                  |«      }|j#                  d«      S )NÚHS256ÚalgÚb64FT)Útypr@   rB   )ú,ú:)Ú
separatorsÚclsÚ	sort_keysó   .r&   r   úutf-8)r,   r   Úalgorithm_nameÚgetÚ
header_typÚ_validate_headersÚupdateÚjsonÚdumpsÚencodeÚappendr   Újoinr=   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_inputr0   Ú	signatureÚencoded_strings                      r$   rQ   zPyJWS.encodei   s¥  € ð ˆð ÐÜ˜#œuÔ%Ø ×/Ñ/‘
à$‘
à"ˆJñ Ø!Ÿ+™+ eÓ,ˆKÙØ$ U™^�
à!Ÿ+™+ eÓ,ˆKØ˜eÑ#Ø&*Ð#ð *.¯©ÀÑ!LˆáØ×"Ñ" 7Ô+Ø�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                óÚ  — |r6t        j                  dt        |j                  «       «      › �t        d¬«       |€i }i | j
                  ¥|¥}|d   }|r|st        |t        «      st        d«      ‚| j                  |«      \  }	}
}}|j                  dd«      du r5|€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: é   ©Ú
stacklevelr(   z\It is required that you pass in a value for the "algorithms" argument when calling decode().rA   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.rH   r   r   )rW   ra   re   )ÚwarningsÚwarnÚtupler   r   r    r,   r   r   Ú_loadrK   rS   ÚrsplitÚ_verify_signature)r!   Újwtr#   r"   r    Údetached_payloadÚkwargsÚmerged_optionsr(   rW   rd   ra   re   s                r$   Údecode_completezPyJWS.decode_complete¶   s  € ñ Ü�M‰Mð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'Øõð ˆ?ØˆGØ4˜DŸL™LÐ4¨GÐ4ˆØ)Ð*<Ñ=Ðá¡J´zÀ#ÄuÔ7MÜØnóð ð 59·J±J¸s³OÑ1ˆ� ¨	à�:‰:�e˜TÓ" eÑ+ØÐ'Ü!ð Zóð ð 'ˆGØ ŸI™I }×';Ñ';¸DÀ!Ó'DÀQÑ'GÈÐ&QÓRˆMáØ×"Ñ" =°&¸)ÀSÈ*ÔUð ØØ"ñ
ð 	
r&   c                ó¨   — |r6t        j                  dt        |j                  «       «      › �t        d¬«       | j                  |||||¬«      }|d   S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rh   ri   )rr   rW   )rk   rl   rm   r   r   ru   )r!   rq   r#   r"   r    rr   rs   Údecodeds           r$   rV   zPyJWS.decodeä   sf   € ñ Ü�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
        rh   )rn   rM   )r!   rq   rY   s      r$   Úget_unverified_headerzPyJWS.get_unverified_headerú   s)   € ð —*‘*˜S“/ !Ñ$ˆØ×Ñ˜wÔ'àˆr&   c                ó  — 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«      ‚	 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)NrI   z$Invalid token type. Token must be a rH   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,   ÚstrrQ   Úbytesr   ro   Úsplitr+   r   r-   ÚbinasciiÚErrorrO   ÚloadsÚdict)r!   rq   rd   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚerrÚheader_datara   r<   rW   re   s               r$   rn   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ð	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
 Á0C' Á<D Â-D4 Â9E! Ã
	C$ÃCÃC$Ã'DÄ DÄDÄ	D1ÄD,Ä,D1Ä4EÅEÅEÅ!FÅ:FÆFc                ó´  — |€t        |t        «      r|j                  g}	 |d   }|r|�||vrt	        d«      ‚t        |t        «      r|j
                  }|j                  }n#	 | j                  |«      }|j                  |«      }|j                  |||«      st        d«      ‚y # t        $ r t	        d«      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 allowedr9   zSignature verification failed)r,   r   rJ   r3   r   r   r#   r=   r:   rT   Úverifyr   )
r!   rd   ra   re   r#   r"   r@   r0   Úprepared_keyr<   s
             r$   rp   zPyJWS._verify_signature+  sõ   € ð Ð¤*¨S´%Ô"8Ø×,Ñ,Ð-ˆJð	MØ˜‘-ˆCñ �zÐ-°#¸ZÑ2GÜ'Ð(PÓQÐQä�cœ5Ô!Ø—m‘mˆGØŸ7™7‰LðNØ×4Ñ4°SÓ9�ð #×.Ñ.¨sÓ3ˆLà�~‰~˜m¨\¸9ÔEÜ'Ð(GÓHÐHð Føô! ò 	MÜ'Ð(AÓBÈÐLð	Mûô 'ò NÜ+Ð,EÓFÈAÐMûðNús#   ¡B$ Á#B= Â$B:Â=	CÃCÃCc                ó6   — d|v r| j                  |d   «       y y )NÚkid)Ú_validate_kid)r!   rY   s     r$   rM   zPyJWS._validate_headersJ  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!   r‹   s     r$   rŒ   zPyJWS._validate_kidN  s   € Ü˜#œsÔ#Ü#Ð$NÓOÐOð $r&   )NN)r"   úSequence[str] | Noner    údict[str, Any] | NoneÚreturnÚNone)r�   zdict[str, bool])r/   r{   r0   r   r�   r‘   )r/   r{   r�   r‘   )r�   z	list[str])r;   r{   r�   r   )NNNFT)rW   r|   r#   z(AllowedPrivateKeys | PyJWK | str | bytesrX   z
str | NonerY   r�   rZ   ztype[json.JSONEncoder] | Noner[   Úboolr\   r’   r�   r{   )Ú NNN)rq   ústr | bytesr#   ú'AllowedPublicKeys | PyJWK | str | bytesr"   rŽ   r    r�   rr   úbytes | Noner�   údict[str, Any])rq   r”   r#   r•   r"   rŽ   r    r�   rr   r–   r�   r   )rq   r”   r�   r—   )rq   r”   r�   z*tuple[bytes, bytes, dict[str, Any], bytes])r“   N)rd   r|   ra   r—   re   r|   r#   r•   r"   rŽ   r�   r‘   )rY   r—   r�   r‘   )r‹   r   r�   r‘   )Ú__name__Ú
__module__Ú__qualname__rL   r%   Ústaticmethodr   r1   r5   r7   r=   rQ   ru   rV   ry   rn   rp   rM   rŒ   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ð,
ð )ð	,
ð
 'ð,
ð 'ð,
ð 
ó,
ðb 8:Ø+/Ø)-Ø)-ð"àð"ð 5ð"ð )ð	"ð
 'ð"ð 'ð"ð 
ó"ó,	ó$;ðV 8:Ø+/ðIàðIð ðIð ð	Ið
 5ðIð )ðIð 
óIó>/ôPr&   r   )%Ú
__future__r   r~   rO   rk   Úcollections.abcr   Útypingr   r   r"   r   r	   r
   r   Úapi_jwkr   Ú
exceptionsr   r   r   r   Úutilsr   r   r   r   r   r   Ú_jws_global_objrQ   ru   rV   r1   r5   r=   ry   r)   r&   r$   ú<module>r£      s§   ðÝ "ã Û Û Ý $ß %÷ó õ ÷ó ÷ 6Ý ,áßA÷sPñ sPñl	 “'€Ø	×	Ñ	€Ø!×1Ñ1€Ø	×	Ñ	€Ø$×7Ñ7Ð Ø&×;Ñ;Ð Ø'×=Ñ=Ð Ø'×=Ñ=Ñ r&   