a hS @ sZ d dl Z d dlmZ d dlmZmZmZ d dlmZm Z m Z d dlmZm Z d dlmZmZmZ d dlmZmZmZmZmZmZ d dlmZmZmZmZ ee jeef eje d d dZ!e jd e"ee"d ddZ#e jd e"e ee"dddZ$dd Z%dd Z&dd Z'dd Z(dd Z)G dd deZ*G dd d eZ+G d!d" d"eZ,G d#d$ d$eZ-dS )% N)utils)InvalidSignatureUnsupportedAlgorithm_Reasons)_calculate_digest_and_algorithm_check_not_prehashed_warn_sign_verify_deprecated)hashes serialization)AsymmetricSignatureContextAsymmetricVerificationContextr )AsymmetricPaddingMGF1OAEPPKCS1v15PSScalculate_max_pss_salt_length) RSAPrivateKeyRSAPrivateNumbersRSAPublicKeyRSAPublicNumbers)psskeyhash_algorithmreturnc C s, | j }|tju s|tju r$t||S |S d S N)Z_salt_lengthr Z MAX_LENGTHr r )r r r Zsalt r N/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/rsa.py_get_rsa_pss_salt_length) s r )_RSAPrivateKey _RSAPublicKey)r datapaddingr c C s t |tstdt |tr&| jj}nVt |trh| jj}t |jt sPt dtj| |s|t dtjnt d|jtjt| ||||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 _libRSA_PKCS1_PADDINGr ZRSA_PKCS1_OAEP_PADDING_mgfr r r UNSUPPORTED_MGFZrsa_padding_supportedUNSUPPORTED_PADDINGformatname_enc_dec_rsa_pkey_ctx)backendr r! r" padding_enumr r r _enc_dec_rsa6 s* r1 )r r! r0 r" r c C s t |tr| jj}| jj}n| jj}| jj}| j|j| j j }| || j j k | j || jj }||}| |dk | j||}| |dk | j|j} | | dk t |tr| jjr| |jj} | j|| }| |dk | |j}| j||}| |dk t |tr|jd urt|jdkr| jt|j}| || j j k | j ||jt|j | j||t|j}| |dk | j d| } | j d| }|||| |t|}| j |d | d }| j |dkrtd|S )N r size_t *unsigned char[]zEncryption/decryption failed.) r% r r' ZEVP_PKEY_encrypt_initZEVP_PKEY_encryptZEVP_PKEY_decrypt_initZEVP_PKEY_decryptEVP_PKEY_CTX_new _evp_pkey_ffiNULLopenssl_assertgcEVP_PKEY_CTX_freeEVP_PKEY_CTX_set_rsa_padding EVP_PKEY_sizer ZCryptography_HAS_RSA_OAEP_MD_evp_md_non_null_from_algorithmr) _algorithmEVP_PKEY_CTX_set_rsa_mgf1_mdZEVP_PKEY_CTX_set_rsa_oaep_mdZ_labellenZOPENSSL_mallocZmemmoveZ EVP_PKEY_CTX_set0_rsa_oaep_labelnewbufferERR_clear_error ValueError)r/ r r! r0 r" initZcryptpkey_ctxresZbuf_sizemgf1_mdZoaep_mdZlabelptrZoutlenbufresbufr r r r. Z sX r. c C s t |tstd| j|j}| |dk t |trB| jj}nnt |t rt |j tsdtdt jt |tjsxtd||j d dk rtd| jj}ntd|jt j|S )Nz'Expected provider of AsymmetricPadding.r r# z*Expected instance of hashes.HashAlgorithm. zDDigest too large for key size. Use a larger key or different digest.r$ )r% r r&