o
    "“iò-  ã                   @  sî   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rVddl
mZmZ G d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ÚInvalidSignatureErrorÚInvalidTokenError)Úbase64url_decodeÚbase64url_encode)ÚRemovedInPyjwt3Warning)ÚAllowedPrivateKeysÚAllowedPublicKeysc                   @  sÌ   e Zd ZdZ		dGdHd	d
„ZedIdd„ƒZdJdd„ZdKdd„ZdLdd„Z	dMdd„Z
					dNdOd*d+„Z	,			dPdQd3d4„Z	,			dPdRd6d7„ZdSd8d9„ZdTd;d<„Z	,	dUdVd@dA„ZdWdBdC„ZdXdEdF„ZdS )YÚPyJWSÚJWTNÚ
algorithmsúSequence[str] | NoneÚoptionsúdict[str, Any] | NoneÚreturnÚNonec                 C  sl   t ƒ | _|d urt|ƒnt| jƒ| _t| j ¡ ƒD ]}|| jvr$| j|= q|d u r+i }i |  ¡ ¥|¥| _d S )N)r   Ú_algorithmsÚsetÚ_valid_algsÚlistÚkeysÚ_get_default_optionsr   )Úselfr   r   Úkey© r%   úK/var/www/html/premium_crap/venv/lib/python3.10/site-packages/jwt/api_jws.pyÚ__init__    s   ÿ
€zPyJWS.__init__údict[str, bool]c                   C  s   ddiS )NÚverify_signatureTr%   r%   r%   r%   r&   r"   3   s   zPyJWS._get_default_optionsÚalg_idÚstrÚalg_objr   c                 C  s>   || 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,   r%   r%   r&   Úregister_algorithm7   s   


zPyJWS.register_algorithmc                 C  s*   || 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*   r%   r%   r&   Úunregister_algorithmD   s   
ÿzPyJWS.unregister_algorithmú	list[str]c                 C  s
   t | jƒS )zM
        Returns a list of supported values for the 'alg' parameter.
        )r    r   )r#   r%   r%   r&   Úget_algorithmsR   s   
zPyJWS.get_algorithmsÚalg_namec              
   C  sN   z| j | W S  ty& } zts|tv rtd|› d�ƒ|‚tdƒ|‚d}~w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   r2   r	   r
   ÚNotImplementedError)r#   r7   Úer%   r%   r&   Úget_algorithm_by_nameX   s   
ÿþ
€ûzPyJWS.get_algorithm_by_nameFTÚpayloadÚbytesr$   ú(AllowedPrivateKeys | PyJWK | str | bytesÚ	algorithmú
str | NoneÚheadersÚjson_encoderútype[json.JSONEncoder] | NoneÚis_payload_detachedÚboolÚsort_headersc                 C  sN  g }|d u rt |tƒr|j}	nd}	n|}	|r,| d¡}
|
r!|d }	| d¡}|du r,d}| j|	dœ}|r>|  |¡ | |¡ |d sE|d= |rLd|d< nd|v rS|d= tj|d||d	� 	¡ }| 
t|ƒ¡ |rj|}nt|ƒ}| 
|¡ d
 |¡}|  |	¡}t |tƒr…|j}| |¡}| ||¡}| 
t|ƒ¡ |r�d|d< d
 |¡}| d¡S )NÚHS256ÚalgÚb64FT)ÚtyprH   rJ   )ú,ú:)Ú
separatorsÚclsÚ	sort_keysó   .ó    r   úutf-8)r.   r   Úalgorithm_nameÚgetÚ
header_typÚ_validate_headersÚupdateÚjsonÚdumpsÚencodeÚappendr   Újoinr;   r$   Úprepare_keyÚsignÚdecode)r#   r<   r$   r?   rA   rB   rD   rF   ÚsegmentsÚ
algorithm_Úheaders_algÚheaders_b64ÚheaderÚjson_headerÚmsg_payloadÚsigning_inputr,   Ú	signatureÚencoded_stringr%   r%   r&   rZ   i   sX   






ÿþ






zPyJWS.encodeÚ Újwtústr | bytesú'AllowedPublicKeys | PyJWK | str | bytesÚdetached_payloadúbytes | Noneúdict[str, Any]c                 K  sÐ   |rt jdt| ¡ ƒ› �tdd� |d u ri }i | j¥|¥}|d }|r/|s/t|tƒs/tdƒ‚|  	|¡\}	}
}}| 
dd¡du rW|d u rHtd	ƒ‚|}	d
 |
 d
d¡d |	g¡}
|rb|  |
||||¡ |	||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().rI   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.rP   r   r   )r<   rd   rh   )ÚwarningsÚwarnÚtupler!   r   r   r.   r   r   Ú_loadrT   r\   ÚrsplitÚ_verify_signature)r#   rk   r$   r   r   rn   ÚkwargsÚmerged_optionsr)   r<   rg   rd   rh   r%   r%   r&   Údecode_complete¶   s<   	
þûÿÿýzPyJWS.decode_completer   c                 K  s>   |rt jdt| ¡ ƒ› �tdd� | j|||||d�}|d S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rq   rr   )rn   r<   )rt   ru   rv   r!   r   r|   )r#   rk   r$   r   r   rn   rz   Údecodedr%   r%   r&   r_   ä   s   	
þû
ÿzPyJWS.decodec                 C  s   |   |¡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
        rq   )rw   rV   )r#   rk   rA   r%   r%   r&   Úget_unverified_headerú   s   
zPyJWS.get_unverified_headerú*tuple[bytes, bytes, dict[str, Any], bytes]c              
   C  sl  t |tƒr
| d¡}t |tƒstdt› �ƒ‚z| dd¡\}}| dd¡\}}W n ty9 } ztdƒ|‚d }~ww zt|ƒ}W n t	t
jfyT } ztdƒ|‚d }~ww zt |¡}W n typ }	 ztd|	› �ƒ|	‚d }	~	ww t |tƒsztdƒ‚zt|ƒ}
W n t	t
jfy” } ztd	ƒ|‚d }~ww zt|ƒ}W n t	t
jfy¯ } ztd
ƒ|‚d }~ww |
|||fS )NrR   z$Invalid token type. Token must be a rP   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+   rZ   r=   r   rx   Úsplitr-   r   r/   ÚbinasciiÚErrorrX   ÚloadsÚdict)r#   rk   rg   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚerrÚheader_datard   r:   r<   rh   r%   r%   r&   rw     sL   



€ÿ
€ÿ€ÿ

€ÿ
€ÿzPyJWS._loadrg   rd   rh   c           
   
   C  sÊ   |d u rt |tƒr|jg}z|d }W n ty   tdƒd ‚w |r*|d ur.||vr.tdƒ‚t |tƒr:|j}|j}nz|  |¡}W n tyR }	 ztdƒ|	‚d }	~	ww | 	|¡}| 
|||¡sctdƒ‚d S )NrH   zAlgorithm not specifiedz&The specified alg value is not allowedr8   zSignature verification failed)r.   r   rS   r2   r   r   r$   r;   r9   r]   Úverifyr   )
r#   rg   rd   rh   r$   r   rH   r,   Úprepared_keyr:   r%   r%   r&   ry   +  s,   
ÿ

€ÿ
ÿzPyJWS._verify_signaturec                 C  s   d|v r|   |d ¡ d S d S )NÚkid)Ú_validate_kid)r#   rA   r%   r%   r&   rV   J  s   ÿzPyJWS._validate_headersrŒ   c                 C  s   t |tƒs	tdƒ‚d S )Nz(Key ID header parameter must be a string)r.   r+   r   )r#   rŒ   r%   r%   r&   r�   N  s   
ÿzPyJWS._validate_kid)NN)r   r   r   r   r   r   )r   r(   )r*   r+   r,   r   r   r   )r*   r+   r   r   )r   r5   )r7   r+   r   r   )NNNFT)r<   r=   r$   r>   r?   r@   rA   r   rB   rC   rD   rE   rF   rE   r   r+   )rj   NNN)rk   rl   r$   rm   r   r   r   r   rn   ro   r   rp   )rk   rl   r$   rm   r   r   r   r   rn   ro   r   r   )rk   rl   r   rp   )rk   rl   r   r   )rj   N)rg   r=   rd   rp   rh   r=   r$   rm   r   r   r   r   )rA   rp   r   r   )rŒ   r   r   r   )Ú__name__Ú
__module__Ú__qualname__rU   r'   Ústaticmethodr"   r1   r4   r6   r;   rZ   r|   r_   r~   rw   ry   rV   r�   r%   r%   r%   r&   r      sD    ý



øPú1ú

+ú
r   )%Ú
__future__r   r�   rX   rt   Úcollections.abcr   Útypingr   r   r   r   r   r	   r
   Úapi_jwkr   Ú
exceptionsr   r   r   r   Úutilsr   r   r   r   r   r   Ú_jws_global_objrZ   r|   r_   r1   r4   r;   r~   r%   r%   r%   r&   Ú<module>   s0      8
