o
    yi                     @   s4  d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	m
Z
mZ ddlmZ ddlmZ ded	eegef fd
dZG dd dZG dd deZe ZG dd deZee jZee jZee jZG dd deZee	Zee
Z eeZ!G dd deZ"e"e	Z#e"e
Z$e"eZ%d	e&eef fddZ'dS )    N)AnyCallableOptional)padding)SHA256SHA384SHA512   )InvalidKeyTypeError)AbstractJWKBasealgreturnc                 C   s>   |  drtjS |  drtjS |  drtjS t|  d)NS256S384S512z is not supported)endswithhashlibsha256sha384sha512
ValueError)r    r   g/var/www/snowflake_co_dev_github/snow_flake_back_end_deploy/env/lib/python3.10/site-packages/jwt/jwa.pystd_hash_by_alg"   s   


r   c                   @   D   e Zd Zdedee defddZdedee dedefddZd	S )
AbstractSigningAlgorithmmessagekeyr   c                 C      t  NNotImplementedErrorselfr   r   r   r   r   sign.   s   zAbstractSigningAlgorithm.sign	signaturec                 C   r   r   r    r#   r   r   r%   r   r   r   verify1   s   zAbstractSigningAlgorithm.verifyN	__name__
__module____qualname__bytesr   r   r$   boolr'   r   r   r   r   r   ,       r   c                   @   r   )
NoneAlgorithmr   r   r   c                 C   s   dS N    r   r"   r   r   r   r$   <   s   zNoneAlgorithm.signr%   c                 C   s   t |dS r0   )hmaccompare_digestr&   r   r   r   r'   ?   s   zNoneAlgorithm.verifyNr(   r   r   r   r   r/   :   r.   r/   c                   @   s   e Zd Zdeg ef ddfddZdee defddZd	e	de	de	fd
dZ
d	e	dee de	fddZd	e	dee de	defddZdS )HMACAlgorithmhash_funr   Nc                 C   
   || _ d S r   r5   r#   r5   r   r   r   __init__M      
zHMACAlgorithm.__init__r   c                 C   s   |r|  dkrtd|S )NoctzOctet key is required)get_ktyr
   )r#   r   r   r   r   
_check_keyP   s   zHMACAlgorithm._check_keyr   c                 C   s   t ||| j S r   )r2   newr5   digestr"   r   r   r   _signU   s   zHMACAlgorithm._signc                 C   s   |  |}|j|| jdS N)signer)r=   r$   r@   r"   r   r   r   r$   X   s   
zHMACAlgorithm.signr%   c                 C   s   |  |}|j||| jdS rA   )r=   r'   r@   r&   r   r   r   r'   \   s   
zHMACAlgorithm.verify)r)   r*   r+   r   r   r9   r   r   r=   r,   r@   r$   r-   r'   r   r   r   r   r4   K   s    r4   c                   @   st   e Zd ZdeddfddZ	ddee dedefd	d
Zde	dee de	fddZ
de	dee de	defddZdS )RSAAlgorithmr5   r   Nc                 C   r6   r   r7   r8   r   r   r   r9   m   r:   zRSAAlgorithm.__init__Fr   must_sign_keyc                 C   0   |r|  dkrtd|r| std|S NRSAzRSA key is requiredz;a RSA private key is required, but passed is RSA public keyr<   r
   is_sign_keyr#   r   rD   r   r   r   r=   p      zRSAAlgorithm._check_keyr   c                 C   s$   | j |dd}|j|| jt dS )NTrD   r5   r   )r=   r$   r5   r   PKCS1v15r"   r   r   r   r$   }   s   zRSAAlgorithm.signr%   c                 C   s"   |  |}|j||| jt dS )NrM   )r=   r'   r5   r   rN   r&   r   r   r   r'      s   
zRSAAlgorithm.verifyF)r)   r*   r+   objectr9   r   r   r-   r=   r,   r$   r'   r   r   r   r   rC   k   s(    
rC   c                   @   s|   e Zd Zdeg ef ddfddZ	ddee dedefd	d
Z	de
dee de
fddZde
dee de
defddZdS )PSSRSAAlgorithmr5   r   Nc                 C   r6   r   r7   r8   r   r   r   r9      r:   zPSSRSAAlgorithm.__init__Fr   rD   c                 C   rE   rF   rH   rJ   r   r   r   r=      rK   zPSSRSAAlgorithm._check_keyr   c                 C   s:   | j |dd}|j|| jtjt|  |  jddS )NTrL   mgfsalt_lengthrM   )r=   r$   r5   r   PSSMGF1digest_sizer"   r   r   r   r$      s   zPSSRSAAlgorithm.signr%   c              	   C   s8   |  |}|j||| jtjt|  |  jddS )NrR   rM   )r=   r'   r5   r   rU   rV   rW   r&   r   r   r   r'      s   
zPSSRSAAlgorithm.verifyrO   )r)   r*   r+   r   r   r9   r   r   r-   r=   r,   r$   r'   r   r   r   r   rQ      s(    
rQ   c                
   C   s   t ttttttttd	S )N	HS256HS384HS512RS256RS384RS512PS256PS384PS512rX   r   r   r   r   supported_signing_algorithms   s   rb   )(r   r2   typingr   r   r   )cryptography.hazmat.primitives.asymmetricr   %cryptography.hazmat.primitives.hashesr   r   r   
exceptionsr
   jwkr   strr,   rP   r   r   r/   noner4   r   rY   r   rZ   r   r[   rC   r\   r]   r^   rQ   r_   r`   ra   dictrb   r   r   r   r   <module>   s0   



'.