File: //lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-310.pyc
o
�)%a�Q �
@ sn d dl Z d dlmZ d dlmZmZmZ d dlmZm Z m
Z
d dlmZm
Z
d dlmZmZmZ d dlmZmZmZmZmZmZ d dlmZmZmZmZ d ed
e jeef dejde fd
d�Z!d
e jd de"dede"fdd�Z#d
e jd de"de dede"f
dd�Z$dd� Z%dd� Z&dd� Z'dd� Z(dd � Z)G d!d"� d"e�Z*G d#d$� d$e�Z+G d%d&� d&e�Z,G d'd(� d(e�Z-dS ))� N)�utils)�InvalidSignature�UnsupportedAlgorithm�_Reasons)�_calculate_digest_and_algorithm�_check_not_prehashed�_warn_sign_verify_deprecated)�hashes�
serialization)�AsymmetricSignatureContext�AsymmetricVerificationContextr )�AsymmetricPadding�MGF1�OAEP�PKCS1v15�PSS�calculate_max_pss_salt_length)�
RSAPrivateKey�RSAPrivateNumbers�RSAPublicKey�RSAPublicNumbers�pss�key�hash_algorithm�returnc C s( | j }|tju s
|tju rt||�S |S �N)�_salt_lengthr �
MAX_LENGTHr r )r r r �salt� r �J/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/rsa.py�_get_rsa_pss_salt_length) s
r! )�_RSAPrivateKey�
_RSAPublicKey�data�paddingc C s� t |t�s td��t |t�r| jj}n+t |t�r4| jj}t |jt �s(t
dtj��| �
|�s3t
dtj��n
t
d�|j�tj��t| ||||�S )Nz1Padding must be an instance of AsymmetricPadding.�'Only MGF1 is supported by this backend.zPThis combination of padding and hash algorithm is not supported by this backend.�${} is not supported by this backend.)�
isinstancer
� TypeErrorr �_lib�RSA_PKCS1_PADDINGr �RSA_PKCS1_OAEP_PADDING�_mgfr r r �UNSUPPORTED_MGF�rsa_padding_supported�UNSUPPORTED_PADDING�format�name�_enc_dec_rsa_pkey_ctx)�backendr r$ r% �padding_enumr r r �_enc_dec_rsa6 s,
�
��
�r6 r5 c C s� t |t�r| jj}| jj}n| jj}| jj}| j�|j| j j
�}| �|| j j
k� | j �|| jj
�}||�}| �|dk� | j�||�}| �|dk� | j�|j�} | �| dk� t |t�r�| jjr�| �|jj�}
| j�||
�}| �|dk� | �|j�}| j�||�}| �|dk� t |t�r�|jd ur�t|j�dkr�| j�t|j��}| �|| j j
k� | j �||jt|j�� | j�||t|j��}| �|dk� | j �d| �}
| j �d| �}||||
|t|��}| j �|�d |
d � }| j�� |dkr�td��|S )N� r �size_t *�unsigned char[]zEncryption/decryption failed.) r( r# r* �EVP_PKEY_encrypt_init�EVP_PKEY_encrypt�EVP_PKEY_decrypt_init�EVP_PKEY_decrypt�EVP_PKEY_CTX_new� _evp_pkey�_ffi�NULL�openssl_assert�gc�EVP_PKEY_CTX_free�EVP_PKEY_CTX_set_rsa_padding�
EVP_PKEY_sizer �Cryptography_HAS_RSA_OAEP_MD�_evp_md_non_null_from_algorithmr- �
_algorithm�EVP_PKEY_CTX_set_rsa_mgf1_md�EVP_PKEY_CTX_set_rsa_oaep_md�_label�len�OPENSSL_malloc�memmove� EVP_PKEY_CTX_set0_rsa_oaep_label�new�buffer�ERR_clear_error�
ValueError)r4 r r$ r5 r% �init�crypt�pkey_ctx�res�buf_size�mgf1_md�oaep_md�labelptr�outlen�buf�resbufr r r r3 Z sT
��
�
r3 c C s� t |t�s td��| j�|j�}| �|dk� t |t�r"| jj}|S t |t �rPt |j
t�s3tdt
j��t |tj�s=td��||j d dk rJtd��| jj}|S td�|j�t
j��)Nz'Expected provider of AsymmetricPadding.r r&