HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/jwt/__pycache__/api_jws.cpython-310.pyc
o

we[+�@s�ddlmZddlZddlZddlZddlmZmZddlm	Z	m
Z
mZmZddl
mZmZmZmZddlmZmZddlmZerJdd	lmZmZGd
d�d�Ze�ZejZejZejZejZejZejZej Z dS)�)�annotationsN)�
TYPE_CHECKING�Any�)�	Algorithm�get_default_algorithms�
has_crypto�requires_cryptography)�DecodeError�InvalidAlgorithmError�InvalidSignatureError�InvalidTokenError)�base64url_decode�base64url_encode)�RemovedInPyjwt3Warning)�AllowedPrivateKeys�AllowedPublicKeysc@s�eZdZdZ		dHdId	d
�ZedJdd
��ZdKdd�ZdLdd�ZdMdd�Z	dNdd�Z
					dOdPd+d,�Z	-			dQdRd4d5�Z	-			dQdSd7d8�Z
dTd9d:�ZdUd<d=�Z	-	dVdWdAdB�ZdXdCdD�ZdYdFdG�ZdS)Z�PyJWS�JWTN�
algorithms�list[str] | None�options�dict[str, Any] | None�return�NonecCslt�|_|durt|�nt|j�|_t|j���D]}||jvr$|j|=q|dur+i}i|���|�|_dS)N)r�_algorithms�set�_valid_algs�list�keys�_get_default_optionsr)�selfrr�key�r#�D/home/arjun/projects/env/lib/python3.10/site-packages/jwt/api_jws.py�__init__s�
�zPyJWS.__init__�dict[str, bool]cCsddiS)N�verify_signatureTr#r#r#r#r$r 1szPyJWS._get_default_options�alg_id�str�alg_objrcCs>||jvr	td��t|t�std��||j|<|j�|�dS)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_algorithm5s


zPyJWS.register_algorithmcCs*||jvr	td��|j|=|j�|�dS)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_algorithmBs
�zPyJWS.unregister_algorithm�	list[str]cCs
t|j�S)zM
        Returns a list of supported values for the 'alg' parameter.
        )rr)r!r#r#r$�get_algorithmsPs
zPyJWS.get_algorithms�alg_namec
CsNz|j|WSty&}zts|tvrtd|�d��|�td�|�d}~ww)z�
        For a given string name, return the matching Algorithm object.

        Example usage:

        >>> jws_obj.get_algorithm_by_name("RS256")
        zAlgorithm 'z9' could not be found. Do you have cryptography installed?�Algorithm not supportedN)rr0rr	�NotImplementedError)r!r5�er#r#r$�get_algorithm_by_nameVs
��
��zPyJWS.get_algorithm_by_name�HS256FT�payload�bytesr"� AllowedPrivateKeys | str | bytes�	algorithm�
str | None�headers�json_encoder�type[json.JSONEncoder] | None�is_payload_detached�bool�sort_headerscCs*g}|dur|nd}	|r"|�d�}
|
r|d}	|�d�}|dur"d}|j|	d�}|r4|�|�|�|�|ds;|d=|rBd|d<nd|vrI|d=tj|d||d	���}
|�t|
��|r`|}nt|�}|�|�d
�	|�}|�
|	�}|�|�}|�||�}|�t|��|r�d|d<d
�	|�}|�
d
�S)N�none�alg�b64FT)�typrGrI)�,�:)�
separators�cls�	sort_keys�.�r�utf-8)�get�
header_typ�_validate_headers�update�json�dumps�encode�appendr�joinr9�prepare_key�sign�decode)r!r;r"r>r@rArCrE�segments�
algorithm_�headers_alg�headers_b64�header�json_header�msg_payload�
signing_inputr*�	signature�encoded_stringr#r#r$rXgsL





��





zPyJWS.encode��jwt�str | bytes�AllowedPublicKeys | str | bytes�detached_payload�bytes | None�dict[str, Any]c
Ks�|rt�dt|�����t�|duri}i|j�|�}|d}|r(|s(td��|�|�\}	}
}}|�dd�durP|durAtd��|}	d�	|
�
dd	�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().rHTFz�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.rOrr)r;rbrf)�warnings�warn�tuplerrrr
�_loadrRrZ�rsplit�_verify_signature)
r!rir"rrrl�kwargs�merged_optionsr'r;rerbrfr#r#r$�decode_complete�s:	
�����zPyJWS.decode_completercKs:|rt�dt|�����t�|j|||||d�}|dS)Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: )rlr;)rorprqrrrw)r!rir"rrrlru�decodedr#r#r$r]�s	
��
�zPyJWS.decodecCs|�|�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
        �)rrrT)r!rir@r#r#r$�get_unverified_header�s
zPyJWS.get_unverified_header�*tuple[bytes, bytes, dict[str, Any], bytes]c
Cslt|t�r
|�d�}t|t�stdt����z|�dd�\}}|�dd�\}}Wnty9}ztd�|�d}~wwzt|�}Wnt	t
jfyT}ztd�|�d}~wwzt�
|�}Wntyp}	ztd|	���|	�d}	~	wwt|t�sztd��zt|�}
Wnt	t
jfy�}ztd	�|�d}~wwzt|�}Wnt	t
jfy�}ztd
�|�d}~ww|
|||fS)NrQz$Invalid token type. Token must be a rOrzNot enough segmentszInvalid header paddingzInvalid header string: z,Invalid header string: must be a json objectzInvalid payload paddingzInvalid crypto padding)r,r)rXr<r
rs�splitr+rr-�binascii�ErrorrV�loads�dict)r!rire�crypto_segment�header_segment�payload_segment�err�header_datarbr8r;rfr#r#r$rr�sL



��
����

��
��zPyJWS._loadrerbrfc

Cs�z|d}Wntytd��w|r|dur ||vr td��z|�|�}Wnty8}ztd�|�d}~ww|�|�}	|�||	|�sItd��dS)NrGzAlgorithm not specifiedz&The specified alg value is not allowedr6zSignature verification failed)r0rr9r7r[�verifyr)
r!rerbrfr"rrGr*r8�prepared_keyr#r#r$rts"�
��
�zPyJWS._verify_signaturecCsd|vr
|�|d�dSdS)N�kid)�
_validate_kid)r!r@r#r#r$rT8s�zPyJWS._validate_headersr�cCst|t�s	td��dS)Nz(Key ID header parameter must be a string)r,r)r
)r!r�r#r#r$r�<s
�zPyJWS._validate_kid)NN)rrrrrr)rr&)r(r)r*rrr)r(r)rr)rr3)r5r)rr)r:NNFT)r;r<r"r=r>r?r@rrArBrCrDrErDrr))rhNNN)rirjr"rkrrrrrlrmrrn)rirjr"rkrrrrrlrmrr)rirjrrn)rirjrr{)rhN)rer<rbrnrfr<r"rkrrrr)r@rnrr)r�rrr)�__name__�
__module__�__qualname__rSr%�staticmethodr r/r2r4r9rXrwr]rzrrrtrTr�r#r#r#r$rsD�



�H�0�

+�
r)!�
__future__rr}rVro�typingrrrrrrr	�
exceptionsr
rrr
�utilsrrrrrr�_jws_global_objrXrwr]r/r2r9rzr#r#r#r$�<module>s,(