o
    Df`                     @   sx   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 G dd deZd	d
 ZdS )    )rsa)RSAPublicKeyRSAPrivateKeyWithSerializationRSAPrivateNumbersRSAPublicNumbersrsa_recover_prime_factorsrsa_crt_dmp1rsa_crt_dmq1rsa_crt_iqmp)default_backend)base64_to_intint_to_base64   )AsymmetricKeyc                   @   sv   e Zd ZdZdZeZeZddgZ	g dZ
ddgZdZdd Zd	d
 Zdd Zdd ZeddddZedddZdS )RSAKeyz"Key class of the ``RSA`` key type.RSAen)ddpdqr   r   pqqis   ssh-rsac              	   C   sT   | j  }t|jjt|jjt|jt|jt|jt|j	t|j
t|jdS )N)r   r   r   r   r   r   r   r   )private_keyprivate_numbersr   public_numbersr   r   r   r   r   dmp1dmq1iqmpselfnumbers r#   U/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/jose/rfc7518/rsa_key.pydumps_private_key   s   


zRSAKey.dumps_private_keyc                 C   s    | j  }t|jt|jdS )N)r   r   )
public_keyr   r   r   r   r    r#   r#   r$   dumps_public_key%   s   
zRSAKey.dumps_public_keyc              	   C   s   | j }d|v rtdtt|d t|d }t|r@t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 )Nothz"oth" is not supported yetr   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )
_dict_data
ValueErrorr   r   has_all_prime_factorsr   r   r   r   r   r	   r
   r   r   )r!   objr   r"   r   r   r   r#   r#   r$   load_private_key,   s<   





	
	zRSAKey.load_private_keyc                 C   s*   t t| jd t| jd }|t S )Nr   r   )r   r   r)   r&   r   r    r#   r#   r$   load_public_keyN   s
   zRSAKey.load_public_key   NFreturnc                 C   sP   |dk rt d|d dkrt dtjd|t d}|s!| }| j||dS )	Ni   z"key_size must not be less than 512   r   zInvalid key_size for RSAKeyi  )public_exponentkey_sizebackendoptions)r*   r   generate_private_keyr   r&   
import_key)clsr3   r6   
is_privateraw_keyr#   r#   r$   generate_keyU   s   zRSAKey.generate_keyc                 C   s>   |  | | |d}||_d|v rt|s|  |  |S )Nr5   r   )check_required_fieldsr)   r+   load_raw_keyload_dict_key)r9   rawr6   keyr#   r#   r$   import_dict_keyd   s   

zRSAKey.import_dict_key)r/   NF)r0   r   )N)__name__
__module____qualname____doc__ktyr   PUBLIC_KEY_CLSr   PRIVATE_KEY_CLSPUBLIC_KEY_FIELDSPRIVATE_KEY_FIELDSREQUIRED_JSON_FIELDSSSH_PUBLIC_PREFIXr%   r'   r-   r.   classmethodr<   rB   r#   r#   r#   r$   r      s"    "r   c                    s:   g d} fdd|D }t |rdS t|rtddS )N)r   r   r   r   r   c                    s   g | ]}| v qS r#   r#   ).0propr,   r#   r$   
<listcomp>r   s    z)has_all_prime_factors.<locals>.<listcomp>Tz@RSA key must include all parameters if any are present besides dF)allanyr*   )r,   propsprops_foundr#   rQ   r$   r+   p   s   r+   N))cryptography.hazmat.primitives.asymmetricr   -cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r   r	   r
   cryptography.hazmat.backendsr   authlib.common.encodingr   r   rfc7517r   r   r+   r#   r#   r#   r$   <module>   s    (d