U
    a4                     @   s  d dl Z d dlZd dlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZ zd dlmZ d dlmZmZmZ d dlmZmZmZmZmZmZmZmZ d d	l m!Z!m"Z" d d
l#m$Z$m%Z% d dl&m'Z' d dl(m)Z) dZ*W n e+k
r   dZ*Y nX e,ddddddddddg
Z-dd Z.G dd de/Z0G dd de0Z1G dd  d e0Z2e*rG d!d" d"e0Z3G d#d$ d$e0Z4G d%d& d&e3Z5dS )'    N   )constant_time_comparestring_typesInvalidKeyError)base64url_decodebase64url_encodeder_to_raw_signatureforce_bytesforce_unicodefrom_base64url_uintraw_to_der_signatureto_base64url_uint)hashes)load_pem_private_keyload_pem_public_keyload_ssh_public_key)RSAPrivateKeyRSAPublicKeyRSAPrivateNumbersRSAPublicNumbersrsa_recover_prime_factorsrsa_crt_dmp1rsa_crt_dmq1rsa_crt_iqmp)EllipticCurvePrivateKeyEllipticCurvePublicKey)ecpadding)default_backend)InvalidSignatureTFRS256RS384RS512ES256ES384ES521ES512PS256PS384PS512c                  C   s   t  ttjttjttjd} tr| ttjttjttjttjttjttjttjt	t	jt	t	jt	t	jd
 | S )zE
    Returns the algorithms that are implemented by the library.
    )noneZHS256ZHS384ZHS512)
r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   )
NoneAlgorithmHMACAlgorithmSHA256SHA384SHA512
has_cryptoupdateRSAAlgorithmECAlgorithmRSAPSSAlgorithm)Zdefault_algorithms r6   }/home/adriano.carvalho/ftp/files/BrinquedotecaVirtual/brinquedotecavirtual/venv/lib/python3.8/site-packages/jwt/algorithms.pyget_default_algorithms&   s&    r8   c                   @   s@   e Zd ZdZdd Zdd Zdd Zedd	 Zed
d Z	dS )	AlgorithmzH
    The interface for an algorithm used to sign and verify tokens.
    c                 C   s   t dS )z
        Performs necessary validation and conversions on the key and returns
        the key value in the proper format for sign() and verify().
        NNotImplementedErrorselfkeyr6   r6   r7   prepare_keyF   s    zAlgorithm.prepare_keyc                 C   s   t dS )zn
        Returns a digital signature for the specified message
        using the specified key value.
        Nr:   r=   msgr>   r6   r6   r7   signM   s    zAlgorithm.signc                 C   s   t dS )zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        Nr:   r=   rA   r>   sigr6   r6   r7   verifyT   s    zAlgorithm.verifyc                 C   s   t dS )z7
        Serializes a given RSA key into a JWK
        Nr:   key_objr6   r6   r7   to_jwk[   s    zAlgorithm.to_jwkc                 C   s   t dS )zb
        Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object
        Nr:   )jwkr6   r6   r7   from_jwkb   s    zAlgorithm.from_jwkN)
__name__
__module____qualname____doc__r?   rB   rE   staticmethodrH   rJ   r6   r6   r6   r7   r9   B   s   
r9   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r,   zZ
    Placeholder for use when no signing or verification
    operations are required.
    c                 C   s    |dkrd }|d k	rt d|S )N z*When alg = "none", key value must be None.r   r<   r6   r6   r7   r?   o   s
    zNoneAlgorithm.prepare_keyc                 C   s   dS )N    r6   r@   r6   r6   r7   rB   x   s    zNoneAlgorithm.signc                 C   s   dS )NFr6   rC   r6   r6   r7   rE   {   s    zNoneAlgorithm.verifyN)rK   rL   rM   rN   r?   rB   rE   r6   r6   r6   r7   r,   j   s   	r,   c                   @   sZ   e Zd ZdZejZejZej	Z
dd Zdd Zedd Zedd	 Zd
d Zdd ZdS )r-   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 C   s
   || _ d S Nhash_algr=   rT   r6   r6   r7   __init__   s    zHMACAlgorithm.__init__c                    s6   t   ddddg}t fdd|D r2td S )Ns   -----BEGIN PUBLIC KEY-----s   -----BEGIN CERTIFICATE-----s   -----BEGIN RSA PUBLIC KEY-----   ssh-rsac                    s   g | ]}| kqS r6   r6   ).0Zstring_valuer>   r6   r7   
<listcomp>   s     z-HMACAlgorithm.prepare_key.<locals>.<listcomp>zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r
   anyr   )r=   r>   Zinvalid_stringsr6   rY   r7   r?      s    zHMACAlgorithm.prepare_keyc                 C   s   t ttt| ddS )Noct)kkty)jsondumpsr   r   r
   rF   r6   r6   r7   rH      s    zHMACAlgorithm.to_jwkc                 C   s,   t | }|ddkr tdt|d S )Nr^   r\   zNot an HMAC keyr]   )r_   loadsgetr   r   )rI   objr6   r6   r7   rJ      s    
zHMACAlgorithm.from_jwkc                 C   s   t ||| j S rR   )hmacnewrT   digestr@   r6   r6   r7   rB      s    zHMACAlgorithm.signc                 C   s   t || ||S rR   )r   rB   rC   r6   r6   r7   rE      s    zHMACAlgorithm.verifyN)rK   rL   rM   rN   hashlibsha256r.   sha384r/   sha512r0   rV   r?   rO   rH   rJ   rB   rE   r6   r6   r6   r7   r-      s   

r-   c                   @   sZ   e Zd ZdZejZejZejZdd Zdd Z	e
dd Ze
dd	 Zd
d Zdd ZdS )r3   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        c                 C   s
   || _ d S rR   rS   rU   r6   r6   r7   rV      s    zRSAAlgorithm.__init__c                 C   s   t |tst |tr|S t |tr~t|}z.|drFt|t d}nt|d t d}W q t	k
rz   t
|t d}Y qX ntd|S )NrW   backendpasswordrl   Expecting a PEM-formatted key.)
isinstancer   r   r   r
   
startswithr   r   r   
ValueErrorr   	TypeErrorr<   r6   r6   r7   r?      s    


zRSAAlgorithm.prepare_keyc                 C   s   d }t | dd r|  }ddgtt|jjtt|jjtt|jtt|jtt|j	tt|j
tt|jtt|jd
}nBt | dd r|  }ddgtt|jtt|jd}ntdt|S )Nprivate_numbersRSArB   )
r^   key_opsnedpqdpdqqirE   )r^   rv   rw   rx   Not a public or private key)getattrrt   r   r   public_numbersrw   rx   ry   rz   r{   dmp1dmq1iqmpr   r_   r`   )rG   rc   numbersr6   r6   r7   rH      s.    zRSAAlgorithm.to_jwkc           	   	      s  zt |  W n tk
r*   tdY nX  ddkrBtdd krhd krhd krhd krptd	d
ddddg} fdd|D }t|}|rt|stdtt d t d }|rt	t d t d
 t d t d t d t d |d}nHt d }t
|j||j\}}t	|||t||t||t|||d}|t S d krd krtt d t d }|t S tdd S )NzKey is not valid JSONr^   ru   zNot an RSA keyry   rx   rw   Zothz5Unsupported RSA private key: > 2 primes not supportedrz   r{   r|   r}   r~   c                    s   g | ]}| kqS r6   r6   )rX   proprc   r6   r7   rZ   	  s     z)RSAAlgorithm.from_jwk.<locals>.<listcomp>z@RSA key must include all parameters if any are present besides d)ry   rz   r{   r   r   r   r   r   )r_   ra   rr   r   rb   r[   allr   r   r   r   rw   rx   r   r   r   Zprivate_keyr   Z
public_key)	rI   Zother_propsZprops_foundZany_props_foundr   r   ry   rz   r{   r6   r   r7   rJ      sf    
 







  

 
zRSAAlgorithm.from_jwkc                 C   s   | |t |  S rR   )rB   r   PKCS1v15rT   r@   r6   r6   r7   rB   8  s    zRSAAlgorithm.signc                 C   s:   z| ||t |   W dS  tk
r4   Y dS X d S )NTF)rE   r   r   rT   r    rC   r6   r6   r7   rE   ;  s
    zRSAAlgorithm.verifyN)rK   rL   rM   rN   r   r.   r/   r0   rV   r?   rO   rH   rJ   rB   rE   r6   r6   r6   r7   r3      s   
#
>r3   c                   @   sB   e Zd ZdZejZejZejZdd Zdd Z	dd Z
dd	 Zd
S )r4   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        c                 C   s
   || _ d S rR   rS   rU   r6   r6   r7   rV   K  s    zECAlgorithm.__init__c                 C   s   t |tst |tr|S t |tr~t|}z,|drFt|t d}nt|t d}W q t	k
rz   t
|d t d}Y qX ntd|S )Ns   ecdsa-sha2-rk   rm   ro   )rp   r   r   r   r
   rq   r   r   r   rr   r   rs   r<   r6   r6   r7   r?   N  s    


zECAlgorithm.prepare_keyc                 C   s"   | |t|  }t||jS rR   )rB   r   ECDSArT   r	   curve)r=   rA   r>   der_sigr6   r6   r7   rB   f  s    zECAlgorithm.signc                 C   sb   zt ||j}W n tk
r&   Y dS X z|||t|   W dS  tk
r\   Y dS X d S )NFT)r   r   rr   rE   r   r   rT   r    )r=   rA   r>   rD   r   r6   r6   r7   rE   k  s    zECAlgorithm.verifyN)rK   rL   rM   rN   r   r.   r/   r0   rV   r?   rB   rE   r6   r6   r6   r7   r4   B  s   r4   c                   @   s    e Zd ZdZdd Zdd ZdS )r5   zA
        Performs a signature using RSASSA-PSS with MGF1
        c                 C   s*   | |tjt|  | jjd|  S )NZmgfZsalt_length)rB   r   PSSMGF1rT   digest_sizer@   r6   r6   r7   rB   |  s    zRSAPSSAlgorithm.signc              	   C   sN   z2| ||tjt|  | jjd|   W dS  tk
rH   Y dS X d S )Nr   TF)rE   r   r   r   rT   r   r    rC   r6   r6   r7   rE     s    	zRSAPSSAlgorithm.verifyN)rK   rL   rM   rN   rB   rE   r6   r6   r6   r7   r5   w  s   
r5   )6rg   rd   r_   compatr   r   
exceptionsr   utilsr   r   r	   r
   r   r   r   r   Zcryptography.hazmat.primitivesr   Z,cryptography.hazmat.primitives.serializationr   r   r   Z-cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r   r   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   Zcryptography.hazmat.backendsr   Zcryptography.exceptionsr    r1   ImportErrorsetZrequires_cryptographyr8   objectr9   r,   r-   r3   r4   r5   r6   r6   r6   r7   <module>   s@   ((
    (4 5