Your IP : 216.73.216.224


Current Path : /lib/python3/dist-packages/jwt/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/jwt/__pycache__/api_jws.cpython-38.pyc

U

�u�iZ#�@s�ddlZddlZddlZz ddlmZmZmZmZmZWne	k
rLYnXddl
mZmZm
Z
mZddlmZmZmZmZddlmZmZmZmZddlmZmZmZmZGdd	�d	e�Ze�Z e j!Z!e j"Z"e j#Z#e j$Z$e j%Z%dS)
�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@s�eZdZdZd#dd�Zedd��Zdd�Zd	d
�Zdd�Z	d$dd�Z
d%dd�Zdd�Zdd�Z
d&dd�ZdhZdd�dd�Zdd �Zd!d"�ZdS)'�PyJWSZJWTNcCsft�|_|dk	rt|�nt|j�|_t|j���D]}||jkr2|j|=q2|sRi}t|��|�|_dS)N)	r	�_algorithms�set�_valid_algs�list�keysr�_get_default_options�options)�self�
algorithmsr�key�r#�-/usr/lib/python3/dist-packages/jwt/api_jws.py�__init__s�

zPyJWS.__init__cCsddiS)N�verify_signatureTr#r#r#r#r$r's�zPyJWS._get_default_optionscCs>||jkrtd��t|t�s$td��||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 �alg_id�alg_objr#r#r$�register_algorithm-s


zPyJWS.register_algorithmcCs*||jkrtd��|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_algorithm:s
zPyJWS.unregister_algorithmcCs
t|j�S)zM
        Returns a list of supported values for the 'alg' parameter.
        )rr)r r#r#r$�get_algorithmsFszPyJWS.get_algorithms�HS256cCs�g}|dkrd}||jkr|j|d�}|rB|j|dd�|�|�ttj|d|d��}|�t|��|�t|��d�	|�}	z$|j
|}
|
�|�}|
�|	|�}Wn6t
k
r�ts�|tkr�td|��ntd	��YnX|�t|��d�	|�S)
NZnone)�typ�algT��encoding)�,�:)Z
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_keyZsignr.r
r�NotImplementedError)r �payloadr"�	algorithm�headersZjson_encoderZsegments�headerZjson_header�
signing_inputr,�	signaturer#r#r$�encodeLs@

��


��zPyJWS.encode�Tc
Ksvt|j|�}|d}|r(|s(t�dt�|�|�\}	}
}}|�|�|sZtjdtdd�n|rr|�|	|
||||�|	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)rr�warnings�warn�DeprecationWarning�_loadr=�_verify_signature)
r �jwtr"�verifyr!r�kwargsZmerged_optionsr&rErIrHrJr#r#r$�decode�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
        rM)rRr=)r rTrGr#r#r$�get_unverified_header�s
zPyJWS.get_unverified_headerc
Csht|t�r|�d�}tt|�t�s0td�t���z$|�dd�\}}|�	dd�\}}Wnt
k
rptd��YnXzt|�}Wn"tt
jfk
r�td��YnXzt�|�d��}Wn.t
k
r�}ztd|��W5d}~XYnXt|t�s�td��zt|�}	Wn$tt
jfk
�r(td	��YnXzt|�}
Wn$tt
jfk
�rZtd
��YnX|	|||
fS)Nzutf-8z'Invalid token type. Token must be a {0}r:rzNot enough segmentszInvalid header paddingzInvalid header string: %sz,Invalid header string: must be a json objectzInvalid payload paddingzInvalid crypto padding)r(rrK�
issubclass�typer
r�format�rsplit�splitr'rr)�binascii�Errorr?�loadsrWr)r rTrIZcrypto_segmentZheader_segmentZpayload_segmentZheader_datarH�erErJr#r#r$rR�s<

�
zPyJWS._loadc	Csr|�d�}|dk	r"||kr"td��z.|j|}|�|�}|�|||�sNtd��Wntk
rltd��YnXdS)Nr4z&The specified alg value is not allowedzSignature verification failedr;)�getrrrCrUrr.)	r rErIrHrJr"r!r4r,r#r#r$rS�s


zPyJWS._verify_signatureZb64Fr5cCs0d|kr|�|d�|s,d|kr,|�|�dS)N�kid�crit)�
_validate_kid�_validate_crit)r rGr6r#r#r$r=�szPyJWS._validate_headerscCst|t�std��dS)Nz(Key ID header parameter must be a string)r(rr)r rcr#r#r$re�s
zPyJWS._validate_kidcCst|d}t|t�rt|�dkr&td��|D]D}t|t�s@td��||jkrXtd�|���||kr*td�|���q*dS)Nrdrz/Invalid 'crit' header: must be a non-empty listz-Invalid 'crit' header: values must be stringsz"Unsupported critical extension: {}z/Critical extension '{}' is missing from headers)r(r�lenr�str�_supported_critr[)r rGrdZextr#r#r$rf�s

�zPyJWS._validate_crit)NN)r2NN)rLTNN)rLN)�__name__�
__module__�__qualname__r<r%�staticmethodrr-r0r1rKrWrXrRrSrir=rerfr#r#r#r$rs4


	�
7�
!(�
�r)&r^r?rO�typingrrrrr�ImportErrorr!rr	r
r�compatrr
rr�
exceptionsrrrrZutilsrrrr�objectrZ_jws_global_objrKrWr-r0rXr#r#r#r$�<module>s$ p