o
    yi)6                     @   s  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZ d dlmZ d dlm  m  mZ d dlmZ d dl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# d dl$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z- edddZ.edZ/G dd deZ0G dd de0Z1G dd de0Z2de3e4e5e0 f fddZ6dee4e	f de0fddZ7ee4e
e8e9ge9f f Z:ee4e
e8ee4 e9ge9f f Z;ede:e;Z<ede
d e	f dZ=d!e=de=fd"d#Z>e>dddd$d%e8d&e;d'ee4 d(ee9 d)eee4e9f  de0fd*d+Z?e>ddd,d%e8d-e:d(ee9 d)eee4e9f  de0f
d.d/Z@dddd0d%e8d&e;d-e:d1ee4 d(ee9 d)eee4e9f  de0fd2d3ZA		d:d4e8d1ee4 d)eee4e9f  de0fd5d6ZB		d:d7e8d1ee4 d)eee4e9f  de0fd8d9ZCdS );    N)ABCabstractmethod)Mapping)wraps)AnyCallableOptionalTypeVarUnion)warn)InvalidSignature)default_backend)padding)RSAPrivateKeyRSAPrivateNumbersRSAPublicKeyRSAPublicNumbersrsa_crt_dmp1rsa_crt_dmq1rsa_crt_iqmprsa_recover_prime_factors)HashAlgorithm   )MalformedJWKErrorUnsupportedKeyTypeError)	b64decode	b64encodeuint_b64decodeuint_b64encode_AJWKAbstractJWKBase)bound_Tc                   @   s   e Zd ZedefddZedefddZedefddZede	de	fd	d
Z
ede	de	defddZeddedeeef fddZeedee deeef defddZdS )r    returnc                 C      d S N selfr&   r&   g/var/www/snowflake_co_dev_github/snow_flake_back_end_deploy/env/lib/python3.10/site-packages/jwt/jwk.pyget_kty@      zAbstractJWKBase.get_ktyc                 C   r$   r%   r&   r'   r&   r&   r)   get_kidD   r+   zAbstractJWKBase.get_kidc                 C   r$   r%   r&   r'   r&   r&   r)   is_sign_keyH   r+   zAbstractJWKBase.is_sign_keymessagec                 K   r$   r%   r&   )r(   r.   optionsr&   r&   r)   signL   r+   zAbstractJWKBase.sign	signaturec                 K   r$   r%   r&   )r(   r.   r1   r/   r&   r&   r)   verifyP   r+   zAbstractJWKBase.verifyTpublic_onlyc                 C   r$   r%   r&   )r(   r3   r&   r&   r)   to_dictT   r+   zAbstractJWKBase.to_dictclsdctc                 C   r$   r%   r&   )r5   r6   r&   r&   r)   	from_dictX   s   zAbstractJWKBase.from_dictNT)__name__
__module____qualname__r   strr*   r,   boolr-   bytesr0   r2   dictr4   classmethodtyper   objectr7   r&   r&   r&   r)   r    >   s     *c                       s   e Zd Zddeddf fddZdd Zdd	 Zdefd
dZde	eegef fddZ
dedefddZdededefddZdddZedd Z  ZS )OctetJWKNkeyr#   c                    s>   t t|   || _|| _h d  fdd| D | _d S )N>   algusex5cx5tx5ukey_opsx5t#s256c                       i | ]\}}| v r||qS r&   r&   .0kvoptnamesr&   r)   
<dictcomp>f       z%OctetJWK.__init__.<locals>.<dictcomp>)superr    __init__rD   kiditemsr/   )r(   rD   rW   r/   	__class__rQ   r)   rV   `   s
   zOctetJWK.__init__c                 C      dS )Noctr&   r'   r&   r&   r)   r*   h      zOctetJWK.get_ktyc                 C   s   | j S r%   )rW   r'   r&   r&   r)   r,   k   s   zOctetJWK.get_kidc                 C   r[   )NTr&   r'   r&   r&   r)   r-   n   r]   zOctetJWK.is_sign_keyc                 C      |d S )Nsignerr&   r(   r/   r&   r&   r)   _get_signerq      zOctetJWK._get_signerr.   c                 K   s   |  |}||| jS r%   )ra   rD   )r(   r.   r/   r_   r&   r&   r)   r0   t   s   
zOctetJWK.signr1   c                 K   s   |  |}t|||| jS r%   )ra   hmaccompare_digestrD   )r(   r.   r1   r/   r_   r&   r&   r)   r2   x   s   
zOctetJWK.verifyTc                 C   s0   dt | jd}|| j | jr| j|d< |S )Nr\   )ktyrO   rW   )r   rD   updater/   rW   )r(   r3   r6   r&   r&   r)   r4   |   s   
zOctetJWK.to_dictc              
   C   s>   z| t |d fi |W S  ty } ztd|d }~ww )NrO   zk is required)r   KeyErrorr   )r5   r6   whyr&   r&   r)   r7      s   
zOctetJWK.from_dictr%   r8   )r9   r:   r;   r>   rV   r*   r,   r=   r-   r   ra   r0   r2   r4   r@   r7   __classcell__r&   r&   rY   r)   rC   ^   s    

rC   c                       s   e Zd ZdZdeeef ddf fddZdefddZ	de
g ef fd	d
ZdejfddZdedefddZdededefddZdd Zdd ZdddZedd Z  ZS )RSAJWKz@
    https://tools.ietf.org/html/rfc7518.html#section-6.3.1
    keyobjr#   Nc                    s8   t t|   || _h d  fdd| D | _d S )N>   rE   rW   rF   rG   rH   rI   rJ   rK   c                    rL   r&   r&   rM   rQ   r&   r)   rS      rT   z#RSAJWK.__init__.<locals>.<dictcomp>)rU   r    rV   rk   rX   r/   )r(   rk   r/   rY   rQ   r)   rV      s   
zRSAJWK.__init__c                 C   s   t | jtS r%   )
isinstancerk   r   r'   r&   r&   r)   r-         zRSAJWK.is_sign_keyc                 C   r^   )Nhash_funr&   r`   r&   r&   r)   _get_hash_fun   rb   zRSAJWK._get_hash_func                 C   s.   z|d W S  t y   td t  Y S w )Nr   zTyou should not use RSAJWK.verify/sign without jwa intermiediary, used legacy padding)rg   r   r   PKCS1v15r`   r&   r&   r)   _get_padding   s   
zRSAJWK._get_paddingr.   c                 K   s:   t | jtr
td| |}| |}| j||| S )NzRequires a private key.)rl   rk   r   
ValueErrorro   rq   r0   )r(   r.   r/   rn   _paddingr&   r&   r)   r0      s
   

zRSAJWK.signr1   c                 K   s`   |  |}| |}t| jtr| j }n| j}z|||||  W dS  ty/   Y dS w )NTF)ro   rq   rl   rk   r   
public_keyr2   r   )r(   r.   r1   r/   rn   rs   pubkeyr&   r&   r)   r2      s   

zRSAJWK.verifyc                 C   r[   )NRSAr&   r'   r&   r&   r)   r*      r]   zRSAJWK.get_ktyc                 C   s   | j dS )NrW   )r/   getr'   r&   r&   r)   r,      rm   zRSAJWK.get_kidTc                 C   s   ddi}| | j t| jtrP| j }|j}| t|jt|j	d |sN| t|jt|j	t|j
t|jt|jt|jt|jt|jd |S | j }| t|jt|j	d |S )Nre   rv   )en)rx   ry   dpqdpdqqi)rf   r/   rl   rk   r   private_numberspublic_numbersr   rx   ry   rz   r{   r|   dmp1dmq1iqmp)r(   r3   r6   priv_numberspub_numbersr&   r&   r)   r4      s>   

zRSAJWK.to_dictc              
   C   sP  d|v rt dzt|d }t|d }W n ty' } ztd|d }~ww t||}d|vr>| |jt dfi |S t|d }h d}t| |@ }t	|d	krst
|||\}	}
t||	|
t||	t||
t|	|
|d
}n(||krt|t|d t|d t|d t|d t|d |d
}ntd| |jt dfi |S )Nothz0RSA keys with multiples primes are not supportedrx   ry   ze and n are requiredrz   )backend>   r{   r|   r}   r~   r   r   )rz   r{   r|   r   r   r   r   r{   r|   r}   r~   r   z=p, q, dp, dq, qi MUST be present orall of them MUST be absent)r   r   rg   r   r   rt   r   setkeyslenr   r   r   r   r   private_key)r5   r6   rx   ry   rh   r   rz   
privparamsproductr{   r|   r   r&   r&   r)   r7      s\   

	




zRSAJWK.from_dictr8   )r9   r:   r;   __doc__r
   r   r   rV   r=   r-   r   r   ro   r   AsymmetricPaddingrq   r>   r0   r2   r*   r,   r4   r@   r7   ri   r&   r&   rY   r)   rj      s"    


&rj   r#   c                   C   s
   t tdS )N)r\   rv   )rC   rj   r&   r&   r&   r)   supported_key_types+  s   r   r6   c                 C   sT   t | ts	tdd| vrtdt }| d }||vr#td| || | S )Nzdct must be a dictre   zkty MUST be presentzunsupported key type: )rl   r?   	TypeErrorr   r   r   r7   )r6   	supportedre   r&   r&   r)   jwk_from_dict2  s   
r   _Loader_C.funcc                    s4   d j v sd j v stdt  fdd}|S )NprivatepubliczDthe wrapped function must have either public or private in it's namec                    s<   t |tr
tt|}|dd u ri |d<  | |fi |S )Nr/   )rl   r<   getattrserialization_modulerw   )contentloaderkwargsr   r&   r)   wrapperS  s
   

z3jwk_from_bytes_argument_conversion.<locals>.wrapper)r9   	Exceptionr   )r   r   r&   r   r)   "jwk_from_bytes_argument_conversionL  s   
r   passwordr   r/   r   private_loaderr   r   r/   c             
   C   s`   |du ri }z|| ||}t |trt|fi |W S td ty/ } ztd|d}~ww )7This function is meant to be called from jwk_from_bytesNunsupported key typezthis is probably a public key)rl   r   rj   r   rr   )r   r   r   r   r/   privkeyexr&   r&   r)   jwk_from_private_bytesa  s   


r   r   r/   public_loaderc             
   C   s^   |du ri }z|| |}t |trt|fi |W S td ty. } ztd|d}~ww )r   Nr   zcould not deserialize)rl   r   rj   r   rr   )r   r   r   r/   ru   rh   r&   r&   r)   jwk_from_public_bytesv  s   	


r   )private_passwordr   r/   r   c             	   C   s8   z
t | ||||dW S  ty   t| |||d Y S w )Nr   r   )r   r   r   )r   r   r   r   r   r/   r&   r&   r)   jwk_from_bytes  s    	
r   pem_contentc                 C      t | dd|d |dS )Nload_pem_private_keyload_pem_public_keyr   r   r   r   r/   r   )r   r   r/   r&   r&   r)   jwk_from_pem     r   der_contentc                 C   r   )Nload_der_private_keyload_der_public_keyr   r   )r   r   r/   r&   r&   r)   jwk_from_der  r   r   )NN)Drc   abcr   r   collections.abcr   	functoolsr   typingr   r   r   r	   r
   warningsr   ,cryptography.hazmat.primitives.serializationhazmat
primitivesserializationr   cryptography.exceptionsr   cryptography.hazmat.backendsr   )cryptography.hazmat.primitives.asymmetricr   -cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r   r   r   %cryptography.hazmat.primitives.hashesr   
exceptionsr   r   utilsr   r   r   r   r   r"   r    rC   rj   r?   r<   rA   r   r   r>   rB   PublicKeyLoaderTPrivateKeyLoaderTr   r   r   r   r   r   r   r   r&   r&   r&   r)   <module>   s   (
 0 

