o
    kYi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 zDd 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+y}   dZ*Y nw e,g d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 d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rA| 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.
    )noneHS256HS384HS512r!   )
NoneAlgorithmHMACAlgorithmSHA256SHA384SHA512
has_cryptoupdateRSAAlgorithmECAlgorithmRSAPSSAlgorithm)default_algorithms r;   R/var/www/html/asistente-voz-ia/venv/lib/python3.10/site-packages/jwt/algorithms.pyget_default_algorithms&   s&   r=   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      t )z
        Performs necessary validation and conversions on the key and returns
        the key value in the proper format for sign() and verify().
        NotImplementedErrorselfkeyr;   r;   r<   prepare_keyF      zAlgorithm.prepare_keyc                 C   r?   )zn
        Returns a digital signature for the specified message
        using the specified key value.
        r@   rC   msgrD   r;   r;   r<   signM   rF   zAlgorithm.signc                 C   r?   )zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        r@   rC   rH   rD   sigr;   r;   r<   verifyT   rF   zAlgorithm.verifyc                 C   r?   )z7
        Serializes a given RSA key into a JWK
        r@   key_objr;   r;   r<   to_jwk[   rF   zAlgorithm.to_jwkc                 C   r?   )zb
        Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object
        r@   )jwkr;   r;   r<   from_jwkb   rF   zAlgorithm.from_jwkN)
__name__
__module____qualname____doc__rE   rI   rL   staticmethodrO   rQ   r;   r;   r;   r<   r>   B   s    
r>   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r0   zZ
    Placeholder for use when no signing or verification
    operations are required.
    c                 C   s    |dkrd }|d urt d|S )N z*When alg = "none", key value must be None.r   rB   r;   r;   r<   rE   o   s
   zNoneAlgorithm.prepare_keyc                 C      dS )N    r;   rG   r;   r;   r<   rI   x      zNoneAlgorithm.signc                 C   rX   )NFr;   rJ   r;   r;   r<   rL   {   rZ   zNoneAlgorithm.verifyN)rR   rS   rT   rU   rE   rI   rL   r;   r;   r;   r<   r0   j   s
    	r0   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 )r1   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 C   
   || _ d S Nhash_algrC   r^   r;   r;   r<   __init__      
zHMACAlgorithm.__init__c                    s2   t   g d}t fdd|D rtd S )N)s   -----BEGIN PUBLIC KEY-----s   -----BEGIN CERTIFICATE-----s   -----BEGIN RSA PUBLIC KEY-----   ssh-rsac                       g | ]}| v qS r;   r;   ).0string_valuerD   r;   r<   
<listcomp>       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   )rC   rD   invalid_stringsr;   rf   r<   rE      s   zHMACAlgorithm.prepare_keyc                 C   s   t ttt| ddS )Noct)kkty)jsondumpsr   r   r
   rM   r;   r;   r<   rO      s   zHMACAlgorithm.to_jwkc                 C   s,   t | }|ddkrtdt|d S )Nrm   rk   zNot an HMAC keyrl   )rn   loadsgetr   r   )rP   objr;   r;   r<   rQ      s   
zHMACAlgorithm.from_jwkc                 C   s   t ||| j S r\   )hmacnewr^   digestrG   r;   r;   r<   rI      s   zHMACAlgorithm.signc                 C   s   t || ||S r\   )r   rI   rJ   r;   r;   r<   rL      s   zHMACAlgorithm.verifyN)rR   rS   rT   rU   hashlibsha256r2   sha384r3   sha512r4   r`   rE   rV   rO   rQ   rI   rL   r;   r;   r;   r<   r1      s    

r1   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 )r7   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        c                 C   r[   r\   r]   r_   r;   r;   r<   r`      ra   zRSAAlgorithm.__init__c                 C   s   t |ts
t |tr|S t |trBt|}z|dr#t|t d}nt|d t d}W |S W |S  t	yA   t
|t d}Y |S w td)Nrb   backendpasswordr{   Expecting a PEM-formatted key.)
isinstancer   r   r   r
   
startswithr   r   r   
ValueErrorr   	TypeErrorrB   r;   r;   r<   rE      s$   


zRSAAlgorithm.prepare_keyc                 C   s   d }t | dd rE|  }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
}n!t | dd rb|  }ddgtt|jtt|jd}ntdt|S )Nprivate_numbersRSArI   )
rm   key_opsnedpqdpdqqirL   )rm   r   r   r   Not a public or private key)getattrr   r   r   public_numbersr   r   r   r   r   dmp1dmq1iqmpr   rn   ro   )rN   rr   numbersr;   r;   r<   rO      s.   
zRSAAlgorithm.to_jwkc           	   	      s  zt |  W n ty   tdw  ddkrtdd v rd v rd v rd v r2td	g d
} fdd|D }t|}|rMt|sMtdtt d t d }|rt	t d t d t d t d t d t d |d}n$t d }t
|j||j\}}t	|||t||t||t|||d}|t S d v rd v rtt d t d }|t S td)NzKey is not valid JSONrm   r   zNot an RSA keyr   r   r   othz5Unsupported RSA private key: > 2 primes not supported)r   r   r   r   r   c                    rc   r;   r;   )rd   proprr   r;   r<   rg   	  rh   z)RSAAlgorithm.from_jwk.<locals>.<listcomp>z@RSA key must include all parameters if any are present besides dr   r   r   r   r   )r   r   r   r   r   r   r   r   )rn   rp   r   r   rq   ri   allr   r   r   r   r   r   r   r   r   private_keyr   
public_key)	rP   other_propsprops_foundany_props_foundr   r   r   r   r   r;   r   r<   rQ      s`   








zRSAAlgorithm.from_jwkc                 C   s   | |t |  S r\   )rI   r   PKCS1v15r^   rG   r;   r;   r<   rI   8  s   zRSAAlgorithm.signc                 C   s4   z| ||t |   W dS  ty   Y dS w )NTF)rL   r   r   r^   r    rJ   r;   r;   r<   rL   ;  s   zRSAAlgorithm.verifyN)rR   rS   rT   rU   r   r2   r3   r4   r`   rE   rV   rO   rQ   rI   rL   r;   r;   r;   r<   r7      s    
#
>r7   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 )r8   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        c                 C   r[   r\   r]   r_   r;   r;   r<   r`   K  ra   zECAlgorithm.__init__c                 C   s   t |ts
t |tr|S t |trBt|}z|dr#t|t d}n
t|t d}W |S W |S  t	yA   t
|d t d}Y |S w td)Ns   ecdsa-sha2-rz   r|   r~   )r   r   r   r   r
   r   r   r   r   r   r   r   rB   r;   r;   r<   rE   N  s$   


	zECAlgorithm.prepare_keyc                 C   s"   | |t|  }t||jS r\   )rI   r   ECDSAr^   r	   curve)rC   rH   rD   der_sigr;   r;   r<   rI   f  s   zECAlgorithm.signc                 C   sZ   zt ||j}W n
 ty   Y dS w z|||t|   W dS  ty,   Y dS w )NFT)r   r   r   rL   r   r   r^   r    )rC   rH   rD   rK   r   r;   r;   r<   rL   k  s   zECAlgorithm.verifyN)rR   rS   rT   rU   r   r2   r3   r4   r`   rE   rI   rL   r;   r;   r;   r<   r8   B  s    r8   c                   @   s    e Zd ZdZdd Zdd ZdS )r9   zA
        Performs a signature using RSASSA-PSS with MGF1
        c                 C   s*   | |tjt|  | jjd|  S )Nmgfsalt_length)rI   r   PSSMGF1r^   digest_sizerG   r;   r;   r<   rI   |  s   zRSAPSSAlgorithm.signc              	   C   sH   z| ||tjt|  | jjd|   W dS  ty#   Y dS w )Nr   TF)rL   r   r   r   r^   r   r    rJ   r;   r;   r<   rL     s   	zRSAPSSAlgorithm.verifyN)rR   rS   rT   rU   rI   rL   r;   r;   r;   r<   r9   w  s    
r9   )6rv   rs   rn   compatr   r   
exceptionsr   utilsr   r   r	   r
   r   r   r   r   cryptography.hazmat.primitivesr   ,cryptography.hazmat.primitives.serializationr   r   r   -cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r   r   r   ,cryptography.hazmat.primitives.asymmetric.ecr   r   )cryptography.hazmat.primitives.asymmetricr   r   cryptography.hazmat.backendsr   cryptography.exceptionsr    r5   ImportErrorsetrequires_cryptographyr=   objectr>   r0   r1   r7   r8   r9   r;   r;   r;   r<   <module>   s<    (((4 5 