
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ’Óà_ž  ã                   @   s´   d dl Z d dlZd dlm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 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dS )
é    N)ÚMapping)ÚAnyÚDictÚListÚOptionalÚTypeé   )Ú	AlgorithmÚget_default_algorithmsÚ
has_cryptoÚrequires_cryptography)ÚDecodeErrorÚInvalidAlgorithmErrorÚInvalidSignatureErrorÚInvalidTokenError)Úbase64url_decodeÚbase64url_encodec                   @   sÐ   e Zd ZdZd!dd„Zedd„ ƒZdd„ Zd	d
„ Zdd„ Z	d"e
eeee eeej  edœdd„Zd#eeee eeeef dœdd„Zd$eeee eedœdd„Zdd„ Zdd„ Zd%dd„Zdd„ Zdd „ ZdS )&ÚPyJWSZJWTNc                 C   sh   t ƒ | _|d k	rt|ƒnt| jƒ| _t| j ¡ ƒD ]}|| jkr2| j|= q2|d krVi }|  ¡ |–| _d S )N)r
   Ú_algorithmsÚsetÚ_valid_algsÚlistÚkeysÚ_get_default_optionsÚoptions)ÚselfÚ
algorithmsr   Úkey© r   ú</opt/alt/python38/lib/python3.8/site-packages/jwt/api_jws.pyÚ__init__   s    ÿ

zPyJWS.__init__c                   C   s   ddiS )NÚverify_signatureTr   r   r   r   r   r   '   s    zPyJWS._get_default_optionsc                 C   s>   || j k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   Úalg_idÚalg_objr   r   r   Úregister_algorithm+   s    


zPyJWS.register_algorithmc                 C   s*   || j k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_algorithm8   s    
ÿzPyJWS.unregister_algorithmc                 C   s
   t | jƒS )zM
        Returns a list of supported values for the 'alg' parameter.
        )r   r   )r   r   r   r   Úget_algorithmsF   s    zPyJWS.get_algorithmsÚHS256)Úpayloadr   Ú	algorithmÚheadersÚjson_encoderÚreturnc                 C   sö   g }|d krd}|| j kr| j|dœ}|r>|  |¡ | |¡ tj|d|d� ¡ }| t|ƒ¡ | t|ƒ¡ d 	|¡}	z$| j
| }
|
 |¡}|
 |	|¡}W n6 tk
rÒ   tsÆ|tkrÆtd| ƒ‚ntdƒ‚Y nX | t|ƒ¡ d 	|¡}| d¡S )	NZnone)ÚtypÚalg)ú,ú:)Ú
separatorsÚclsó   .zFAlgorithm '%s' could not be found. Do you have cryptography installed?úAlgorithm not supportedúutf-8)r   Ú
header_typÚ_validate_headersÚupdateÚjsonÚdumpsÚencodeÚappendr   Újoinr   Úprepare_keyÚsignr)   r   r   ÚNotImplementedErrorÚdecode)r   r.   r   r/   r0   r1   ÚsegmentsÚheaderZjson_headerÚsigning_inputr'   Ú	signatureÚencoded_stringr   r   r   rA   L   s>    


  ÿ



ÿÿ
zPyJWS.encodeÚ )Újwtr   r   r   r2   c                 K   sb   |d kri }| j |–}|d }|r.|s.tdƒ‚|  |¡\}}	}
}|rV|  |	|
|||¡ ||
|dœS )Nr!   z\It is required that you pass in a value for the "algorithms" argument when calling decode().)r.   rI   rK   )r   r   Ú_loadÚ_verify_signature)r   rN   r   r   r   ÚkwargsZmerged_optionsr!   r.   rJ   rI   rK   r   r   r   Údecode_complete€   s    
ÿýzPyJWS.decode_completec                 K   s   | j ||||f|Ž}|d S )Nr.   )rR   )r   rN   r   r   r   rQ   Údecodedr   r   r   rG   �   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
        é   )rO   r=   )r   rN   r0   r   r   r   Úget_unverified_header¨   s    
zPyJWS.get_unverified_headerc              
   C   s¢  t |tƒr| d¡}t |tƒs,tdt› �ƒ‚z$| dd¡\}}| dd¡\}}W n, tk
r| } ztdƒ|‚W 5 d }~X Y nX zt|ƒ}W n2 t	t
jfk
r¼ } ztdƒ|‚W 5 d }~X Y nX zt |¡}W n0 tk
rü }	 ztd|	 ƒ|	‚W 5 d }	~	X Y nX t |tƒ�stdƒ‚zt|ƒ}
W n4 t	t
jfk
�rR } ztd	ƒ|‚W 5 d }~X Y nX zt|ƒ}W n4 t	t
jfk
�r” } ztd
ƒ|‚W 5 d }~X Y nX |
|||fS )Nr;   z$Invalid token type. Token must be a r9   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#   ÚstrrA   Úbytesr   ÚrsplitÚsplitr"   r   r$   ÚbinasciiÚErrorr?   Úloadsr   )r   rN   rJ   Zcrypto_segmentZheader_segmentZpayload_segmentÚerrZheader_datarI   Úer.   rK   r   r   r   rO   ³   s8    


 zPyJWS._loadc                 C   sr   |  d¡}|d k	r"||kr"tdƒ‚z.| j| }| |¡}| |||¡sNtdƒ‚W n tk
rl   tdƒ‚Y nX d S )Nr4   z&The specified alg value is not allowedzSignature verification failedr:   )Úgetr   r   rD   Zverifyr   r)   )r   rJ   rI   rK   r   r   r4   r'   r   r   r   rP   Ù   s    	


zPyJWS._verify_signaturec                 C   s   d|kr|   |d ¡ d S )NÚkid)Ú_validate_kid)r   r0   r   r   r   r=   ñ   s    zPyJWS._validate_headersc                 C   s   t |tƒstdƒ‚d S )Nz(Key ID header parameter must be a string)r#   rV   r   )r   r`   r   r   r   ra   õ   s    
zPyJWS._validate_kid)NN)r-   NN)rM   NN)rM   NN)rM   N)Ú__name__Ú
__module__Ú__qualname__r<   r    Ústaticmethodr   r(   r+   r,   rW   rV   r   r   r   r?   ÚJSONEncoderrA   r   r   rR   rG   rU   rO   rP   r=   ra   r   r   r   r   r      sZ   


   úù7   û
ù    ûù+  ú
r   )rZ   r?   Úcollections.abcr   Útypingr   r   r   r   r   r   r	   r
   r   r   Ú
exceptionsr   r   r   r   Úutilsr   r   r   Z_jws_global_objrA   rR   rG   r(   r+   rU   r   r   r   r   Ú<module>   s    f