40 items
NAME ↑ SIZE MODIFIED PERMS ACTIONS
.. / Parent Directory
__init__.cpython-39.opt-1.pyc — 272 B
2025-09-18 08:51 · rw-r--r--
272 B 2025-09-18 08:51 rw-r--r--
__init__.cpython-39.pyc — 272 B
2025-09-18 08:51 · rw-r--r--
272 B 2025-09-18 08:51 rw-r--r--
aead.cpython-39.opt-1.pyc — 3.74 KB
2025-09-18 08:51 · rw-r--r--
3.74 KB 2025-09-18 08:51 rw-r--r--
aead.cpython-39.pyc — 3.76 KB
2025-09-18 08:51 · rw-r--r--
3.76 KB 2025-09-18 08:51 rw-r--r--
backend.cpython-39.opt-1.pyc — 59.54 KB
2025-09-18 08:51 · rw-r--r--
59.54 KB 2025-09-18 08:51 rw-r--r--
backend.cpython-39.pyc — 59.71 KB
2025-09-18 08:51 · rw-r--r--
59.71 KB 2025-09-18 08:51 rw-r--r--
ciphers.cpython-39.opt-1.pyc — 6.23 KB
2025-09-18 08:51 · rw-r--r--
6.23 KB 2025-09-18 08:51 rw-r--r--
ciphers.cpython-39.pyc — 6.23 KB
2025-09-18 08:51 · rw-r--r--
6.23 KB 2025-09-18 08:51 rw-r--r--
cmac.cpython-39.opt-1.pyc — 2.53 KB
2025-09-18 08:51 · rw-r--r--
2.53 KB 2025-09-18 08:51 rw-r--r--
cmac.cpython-39.pyc — 2.53 KB
2025-09-18 08:51 · rw-r--r--
2.53 KB 2025-09-18 08:51 rw-r--r--
decode_asn1.cpython-39.opt-1.pyc — 586 B
2025-09-18 08:51 · rw-r--r--
586 B 2025-09-18 08:51 rw-r--r--
decode_asn1.cpython-39.pyc — 586 B
2025-09-18 08:51 · rw-r--r--
586 B 2025-09-18 08:51 rw-r--r--
dh.cpython-39.opt-1.pyc — 8.17 KB
2025-09-18 08:51 · rw-r--r--
8.17 KB 2025-09-18 08:51 rw-r--r--
dh.cpython-39.pyc — 8.17 KB
2025-09-18 08:51 · rw-r--r--
8.17 KB 2025-09-18 08:51 rw-r--r--
dsa.cpython-39.opt-1.pyc — 8.79 KB
2025-09-18 08:51 · rw-r--r--
8.79 KB 2025-09-18 08:51 rw-r--r--
dsa.cpython-39.pyc — 8.79 KB
2025-09-18 08:51 · rw-r--r--
8.79 KB 2025-09-18 08:51 rw-r--r--
ec.cpython-39.opt-1.pyc — 10.23 KB
2025-09-18 08:51 · rw-r--r--
10.23 KB 2025-09-18 08:51 rw-r--r--
ec.cpython-39.pyc — 10.33 KB
2025-09-18 08:51 · rw-r--r--
10.33 KB 2025-09-18 08:51 rw-r--r--
ed25519.cpython-39.opt-1.pyc — 4.29 KB
2025-09-18 08:51 · rw-r--r--
4.29 KB 2025-09-18 08:51 rw-r--r--
ed25519.cpython-39.pyc — 4.29 KB
2025-09-18 08:51 · rw-r--r--
4.29 KB 2025-09-18 08:51 rw-r--r--
ed448.cpython-39.opt-1.pyc — 4.26 KB
2025-09-18 08:51 · rw-r--r--
4.26 KB 2025-09-18 08:51 rw-r--r--
ed448.cpython-39.pyc — 4.26 KB
2025-09-18 08:51 · rw-r--r--
4.26 KB 2025-09-18 08:51 rw-r--r--
encode_asn1.cpython-39.opt-1.pyc — 516 B
2025-09-18 08:51 · rw-r--r--
516 B 2025-09-18 08:51 rw-r--r--
encode_asn1.cpython-39.pyc — 516 B
2025-09-18 08:51 · rw-r--r--
516 B 2025-09-18 08:51 rw-r--r--
hashes.cpython-39.opt-1.pyc — 2.61 KB
2025-09-18 08:51 · rw-r--r--
2.61 KB 2025-09-18 08:51 rw-r--r--
hashes.cpython-39.pyc — 2.61 KB
2025-09-18 08:51 · rw-r--r--
2.61 KB 2025-09-18 08:51 rw-r--r--
hmac.cpython-39.opt-1.pyc — 2.61 KB
2025-09-18 08:51 · rw-r--r--
2.61 KB 2025-09-18 08:51 rw-r--r--
hmac.cpython-39.pyc — 2.61 KB
2025-09-18 08:51 · rw-r--r--
2.61 KB 2025-09-18 08:51 rw-r--r--
poly1305.cpython-39.opt-1.pyc — 1.97 KB
2025-09-18 08:51 · rw-r--r--
1.97 KB 2025-09-18 08:51 rw-r--r--
poly1305.cpython-39.pyc — 1.97 KB
2025-09-18 08:51 · rw-r--r--
1.97 KB 2025-09-18 08:51 rw-r--r--
rsa.cpython-39.opt-1.pyc — 13.46 KB
2025-09-18 08:51 · rw-r--r--
13.46 KB 2025-09-18 08:51 rw-r--r--
rsa.cpython-39.pyc — 13.46 KB
2025-09-18 08:51 · rw-r--r--
13.46 KB 2025-09-18 08:51 rw-r--r--
utils.cpython-39.opt-1.pyc — 2.16 KB
2025-09-18 08:51 · rw-r--r--
2.16 KB 2025-09-18 08:51 rw-r--r--
utils.cpython-39.pyc — 2.16 KB
2025-09-18 08:51 · rw-r--r--
2.16 KB 2025-09-18 08:51 rw-r--r--
x25519.cpython-39.opt-1.pyc — 3.6 KB
2025-09-18 08:51 · rw-r--r--
3.6 KB 2025-09-18 08:51 rw-r--r--
x25519.cpython-39.pyc — 3.6 KB
2025-09-18 08:51 · rw-r--r--
3.6 KB 2025-09-18 08:51 rw-r--r--
x448.cpython-39.opt-1.pyc — 3.38 KB
2025-09-18 08:51 · rw-r--r--
3.38 KB 2025-09-18 08:51 rw-r--r--
x448.cpython-39.pyc — 3.38 KB
2025-09-18 08:51 · rw-r--r--
3.38 KB 2025-09-18 08:51 rw-r--r--
x509.cpython-39.opt-1.pyc — 1020 B
2025-09-18 08:51 · rw-r--r--
1020 B 2025-09-18 08:51 rw-r--r--
x509.cpython-39.pyc — 1020 B
2025-09-18 08:51 · rw-r--r--
1020 B 2025-09-18 08:51 rw-r--r--
ONLINE
__pycache__
40 items
01:04:54
TERMINAL FM
Edit
Preview
Download
Rename
Copy
Chmod
Delete
a hX@szddlZddlZddlZddlZddlZddlmZddlmZmZddl m Z m Z ddl m ZddlmZddlmZddlmZdd lmZmZmZmZdd lmZmZmZdd lmZm Z dd l!m"Z"m#Z#dd l$m%Z%m&Z&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-m.Z.ddl/m0Z0m1Z1ddl2m3Z3m4Z4ddl5m6Z6m7Z7ddl8mZ9ddl:m;Z;ddlZ>ddl?m@Z@mAZAmBZBmCZCmDZDddlEmFZFmGZGmHZHmIZIddlJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTddlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]ddl^m_Z_ddl`maZambZbddlcmdZdmeZeddlfmgZgehdd d!gZiGd"d#d#ejZkGd$d%d%eZ Gd&d'd'ejZld(d)Zme ZndS)*N)contextmanager)utilsx509)UnsupportedAlgorithm_Reasons)Backend)aead)_CipherContext _CMACContext) _DHParameters _DHPrivateKey _DHPublicKey_dh_params_dup)_DSAParameters_DSAPrivateKey _DSAPublicKey)_EllipticCurvePrivateKey_EllipticCurvePublicKey)_Ed25519PrivateKey_Ed25519PublicKey)_ED448_KEY_SIZE_Ed448PrivateKey_Ed448PublicKey _HashContext _HMACContext)_POLY1305_KEY_SIZE_Poly1305Context)_RSAPrivateKey _RSAPublicKey)_X25519PrivateKey_X25519PublicKey)_X448PrivateKey_X448PublicKey)r)binding)hashes serialization)dhdsaeced25519rsa)MGF1OAEPPKCS1v15PSS) AESARC4BlowfishCAST5CamelliaChaCha20IDEASEEDSM4 TripleDES)CBCCFBCFB8CTRECBGCMOFBXTS)scrypt)pkcs7ssh)PKCS12CertificatePKCS12KeyAndCertificates)PUBLIC_KEY_TYPES _MemoryBIObioZchar_ptrc@s eZdZdS)_RC2N)__name__ __module__ __qualname__rPrPR/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/backend.pyrLrsrLc @seZdZdZdZhdZefZej ej ej ej ej ejejejejejejejf ZejejejejfZdZdZdd>ZdZde>Z ddZ!d d Z"dd d Z#ddZ$ddZ%ddZ&e'j(ddZ)ddZ*ddZ+ddZ,ddZ-ddZ.d d!Z/d"d#Z0d$d%Z1d&d'Z2d(d)Z3d*d+Z4d,d-Z5d.d/Z6d0d1Z7d2d3Z8d4d5Z9d6d7Z:d8d9Z;d:d;Zd?Z>d d@dAZ?dBdCZ@dDdEZAdFdGZBdHdIZCdJdKZDdLdMZEdNdOZFdPdQZGdRdSZHdTdUZIdVdWZJdXdYZKdZd[ZLd\d]ZMd^d_ZNd`daZOdbdcZPdddeZQdfdgZRdhdiZSdjdkZTeUdldmdnZVejWeUdodpdqZXdrdsZYdtduZZdvdwZ[dxdyZ\dzd{Z]d|d}Z^d~dZ_ddZ`ddZaddZbecjdeejfdddZgeejfecjddddZhecjieejfdddZjeejfecjidddZkecjleejfdddZmeejfecjldddZnecjleoeUdddZpecjieUdddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZe(ddZddZddZdd„ZddĄZddƄZddȄZddʄZdd̄Zdd΄ZddЄZdd҄ZddԄZddքZdd؄ZddڄZd!dd܄ZddބZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZe'j(ddZddZe'j(d d Zd d Zd dZddZddZddZddZddZddZddZddZd S("rz) OpenSSL API binding interfaces. Zopenssl>s aes-256-gcms aes-256-ccms aes-128-ccms aes-192-gcms aes-192-ccms aes-128-gcmicCst|_|jj|_|jj|_d|_||_ i|_ | |j rX|jj rXt dtn||jjg|_|jjr|j|jjdS)NFz)formatopenssl_version_textrZrerPrPrQ__repr__s zBackend.__repr__NcCstj|j||dS)N)errors)r&Z_openssl_assertrW)rfokrkrPrPrQopenssl_assertszBackend.openssl_assertcCsH|jjr|j|jj}nt|jddd}|dkr@|jt|S)NZ FIPS_modecSsdSNrrPrPrPrPrQz*Backend._is_fips_enabled..r)rWZCryptography_HAS_300_FIPSZ&EVP_default_properties_is_fips_enabledrUNULLgetattrZERR_clear_errorbool)rfmoderPrPrQrYs zBackend._is_fips_enabledcCs$|j|sJ||_dSN)rT _enable_fipsrYrZrerPrPrQrvs  zBackend._enable_fipscCsf|jjrb|j}||jjkrb|j||j|jj}||dk|j|}||dkdSNrS) rWr]ZENGINE_get_default_RANDrUrqZENGINE_unregister_RANDRAND_set_rand_methodrm ENGINE_finishrferesrPrPrQactivate_builtin_randoms    zBackend.activate_builtin_randomc cs|j|jj}|||jjk|j|}||dkz>|VW|j|}||dk|j|}||dkn6|j|}||dk|j|}||dk0dSrw) rWZ ENGINE_by_idZCryptography_osrandom_engine_idrmrUrqZ ENGINE_initZ ENGINE_freeryrzrPrPrQ_get_osurandom_engines     zBackend._get_osurandom_enginecCst|jjrp||*}|j|}||dkWdn1sH0Y|j|jj}||dkdSrw) rWr]r}r~ZENGINE_set_default_RANDrmrxrUrqrzrPrPrQras  ,z Backend.activate_osrandom_enginec Cst|jdd}|<}|j|dt|||jjd}||dkWdn1sX0Y|j| dS)Nchar[]@sget_implementationrascii) rUnewr~rWZENGINE_ctrl_cmdlenrqrmstringdecode)rfbufr{r|rPrPrQosrandom_engine_implementations ,z&Backend.osrandom_engine_implementationcCs|j|j|jjdS)z Friendly string name of the loaded OpenSSL library. This is not necessarily the same version as it was compiled against. Example: OpenSSL 1.1.1d 10 Sep 2019 r)rUrrWZOpenSSL_versionZOPENSSL_VERSIONrrerPrPrQris zBackend.openssl_version_textcCs |jSru)rWZOpenSSL_version_numrerPrPrQopenssl_version_numberszBackend.openssl_version_numbercCs t|||Srur)rfkey algorithmrPrPrQcreate_hmac_ctxszBackend.create_hmac_ctxcCsL|jdks|jdkr0d|j|jdd}n |jd}|j|}|S)NZblake2bZblake2sz{}{}r)namerhZ digest_sizeencoderWZEVP_get_digestbyname)rfrZalgevp_mdrPrPrQ_evp_md_from_algorithms   zBackend._evp_md_from_algorithmcCs ||}|||jjk|Sru)rrmrUrqrfrrrPrPrQ_evp_md_non_null_from_algorithm*s z'Backend._evp_md_non_null_from_algorithmcCs,|jrt||jsdS||}||jjkSNF)rZ isinstance _fips_hashesrrUrqrrPrPrQhash_supported/s zBackend.hash_supportedcCs|jr dS|jjdkSdSNFrS)rZrWZCryptography_HAS_SCRYPTrerPrPrQscrypt_supported6szBackend.scrypt_supportedcCs |jrt|tjrdS||SNT)rZrr'SHA1rrfrrPrPrQhmac_supported<szBackend.hmac_supportedcCs t||SrurrrPrPrQcreate_hash_ctxCszBackend.create_hash_ctxcCs^|jrt||jsdSz|jt|t|f}WntyDYdS0||||}|jj|kSr)rZr _fips_ciphersr[typeKeyErrorrUrq)rfcipherrtadapter evp_cipherrPrPrQcipher_supportedFs   zBackend.cipher_supportedcCs0||f|jvrtd||||j||f<dS)Nz"Duplicate registration for: {} {}.)r[ ValueErrorrh)rf cipher_clsmode_clsrrPrPrQregister_cipher_adapterTszBackend.register_cipher_adaptercCs~tttttttfD]}|t|t dqtttttfD]}|t |t dq8ttttfD]}|t |t dq\|t tt dttttfD]}|t |t dqttttfD]}|t |t dqtttgttttgD]\}}|||t dq|ttdt d|ttdt d|ttdt d |ttttttttfD]}|t|t d q`dS) Nz+{cipher.name}-{cipher.key_size}-{mode.name}zdes-ede3-{mode.name}zdes-ede3zbf-{mode.name}zseed-{mode.name}z{cipher.name}-{mode.name}Zrc4Zrc2Zchacha20zsm4-{mode.name})r<r?r@rBr=r>rArr2GetCipherByNamer6r;r4r9 itertoolsproductr5r8r3rrLr7rC_get_xts_cipherr:)rfrrrPrPrQr\]s\      z!Backend._register_default_cipherscCst|||tjSru)r Z_ENCRYPTrfrrtrPrPrQcreate_symmetric_encryption_ctxsz'Backend.create_symmetric_encryption_ctxcCst|||tjSru)r Z_DECRYPTrrPrPrQcreate_symmetric_decryption_ctxsz'Backend.create_symmetric_decryption_ctxcCs ||Sru)rrrPrPrQpbkdf2_hmac_supportedszBackend.pbkdf2_hmac_supportedc Csh|jd|}||}|j|}|j|t||t|||||} || dk|j|ddS)Nunsigned char[]rS) rUrr from_bufferrWZPKCS5_PBKDF2_HMACrrmbuffer) rfrlengthsaltZ iterations key_materialrrkey_material_ptrr|rPrPrQderive_pbkdf2_hmacs   zBackend.derive_pbkdf2_hmaccCs t|jSru)r&_consume_errorsrWrerPrPrQrszBackend._consume_errorscCs t|jSru)r&_consume_errors_with_textrWrerPrPrQrsz!Backend._consume_errors_with_textcCsz||jjksJ||j| |j|}|jd|}|j||}||dkt |j |d|d}|S)Nrrbig) rUrqrmrWZBN_is_negativeZ BN_num_bytesrZ BN_bn2binint from_bytesr)rfbnZ bn_num_bytesZbin_ptrZbin_lenvalrPrPrQ _bn_to_ints zBackend._bn_to_intcCsn|dus||jjksJ|dur(|jj}|t|ddd}|j|t||}|||jjk|S)a  Converts a python integer to a BIGNUM. The returned BIGNUM will not be garbage collected (to support adding them to structs that take ownership of the object). Be sure to register it for GC if it will be discarded after use. Ng @rSr) rUrqto_bytesr bit_lengthrWZ BN_bin2bnrrm)rfnumrZbinaryZbn_ptrrPrPrQ _int_to_bnszBackend._int_to_bncCst|||j}|||jjk|j||jj}| |}|j||jj }|j ||||jj}||dk| |}t ||||jSrw)r-Z_verify_rsa_parametersrWRSA_newrmrUrqgcRSA_freerBN_freeZRSA_generate_key_ex_rsa_cdata_to_evp_pkeyr rX)rfpublic_exponentkey_size rsa_cdatarr|evp_pkeyrPrPrQgenerate_rsa_private_keys      z Backend.generate_rsa_private_keycCs|dko|d@dko|dkS)NrSrirP)rfrrrPrPrQ!generate_rsa_parameters_supporteds  z)Backend.generate_rsa_parameters_supportedc Cs6t|j|j|j|j|j|j|jj |jj |j }| ||jjk|j||j j}||j}||j}||j}||j}||j}||j}||jj } ||jj } |j |||} | | dk|j || | |} | | dk|j ||||} | | dk||} t||| |jSrw)r-Z_check_private_key_componentspqddmp1dmq1iqmppublic_numbersr{nrWrrmrUrqrrrZRSA_set0_factors RSA_set0_keyZRSA_set0_crt_paramsrr rX) rfnumbersrrrrrrrr{rr|rrPrPrQload_rsa_private_numberss>         z Backend.load_rsa_private_numberscCst|j|j|j}|||jjk|j ||jj }| |j}| |j}|j ||||jj}||dk| |}t|||Srw)r-Z_check_public_key_componentsr{rrWrrmrUrqrrrrrr!)rfrrr{rr|rrPrPrQload_rsa_public_numbers s    zBackend.load_rsa_public_numberscCs2|j}|||jjk|j||jj}|Sru)rWZ EVP_PKEY_newrmrUrqr EVP_PKEY_freerfrrPrPrQ_create_evp_pkey_gcs zBackend._create_evp_pkey_gccCs(|}|j||}||dk|Srw)rrWZEVP_PKEY_set1_RSArm)rfrrr|rPrPrQrszBackend._rsa_cdata_to_evp_pkeycCsH|j|}|j|t|}|||jjkt|j||jj |S)z Return a _MemoryBIO namedtuple of (BIO, char*). The char* is the storage for the BIO and it must stay alive until the BIO is finished with. ) rUrrWZBIO_new_mem_bufrrmrqrJrBIO_free)rfdatadata_ptrrKrPrPrQ _bytes_to_bio#s zBackend._bytes_to_biocCsP|j}|||jjk|j|}|||jjk|j||jj}|S)z. Creates an empty memory BIO. )rWZ BIO_s_memrmrUrqZBIO_newrr)rfZ bio_methodrKrPrPrQ_create_mem_bio_gc0s   zBackend._create_mem_bio_gccCs\|jd}|j||}||dk||d|jjk|j|d|dd}|S)zE Reads a memory BIO. This only works on memory BIOs. zchar **rN)rUrrWZBIO_get_mem_datarmrqr)rfrKrZbuf_lenbio_datarPrPrQ _read_mem_bio;s  zBackend._read_mem_biocCs|j|}||jjkrX|j|}|||jjk|j||jj}t ||||j S||jj kr|j |}|||jjk|j||jj }t|||S||jjkr|j|}|||jjk|j||jj}t|||S||jvr0|j|}|||jjk|j||jj}t|||S|t|jddkrNt||S|t|jddkrlt||S|t|jddkrt||S|t|jddkrt||StddS)zd Return the appropriate type of PrivateKey given an evp_pkey cdata pointer. EVP_PKEY_ED25519N EVP_PKEY_X448EVP_PKEY_X25519EVP_PKEY_ED448Unsupported key type.)rW EVP_PKEY_id EVP_PKEY_RSAEVP_PKEY_get1_RSArmrUrqrrr rX EVP_PKEY_DSAEVP_PKEY_get1_DSADSA_freer EVP_PKEY_ECEVP_PKEY_get1_EC_KEY EC_KEY_freerrbEVP_PKEY_get1_DHDH_freer rrrr$r"rrrfrkey_typer dsa_cdataec_cdatadh_cdatarPrPrQ_evp_pkey_to_private_keyFs@                 z Backend._evp_pkey_to_private_keycCs|j|}||jjkrT|j|}|||jjk|j||jj}t |||S||jj kr|j |}|||jjk|j||jj }t |||S||jjkr|j|}|||jjk|j||jj}t|||S||jvr,|j|}|||jjk|j||jj}t|||S|t|jddkrJt||S|t|jddkrht||S|t|jddkrt||S|t|jddkrt||StddS)zc Return the appropriate type of PublicKey given an evp_pkey cdata pointer. rNrrrr)rWrrrrmrUrqrrr!rrrrrrrrrbrrrrrrr%r#rrrrPrPrQ_evp_pkey_to_public_keyss<                 zBackend._evp_pkey_to_public_keycCs6|jjr&t|tjtjtjtjtjfSt|tjSdSru) rWZCryptography_HAS_RSA_OAEP_MDrr'rSHA224SHA256SHA384SHA512rrPrPrQ_oaep_hash_supporteds zBackend._oaep_hash_supportedcCst|trdSt|trNt|jtrN|jr>t|jjtjr>dS| |jjSnXt|t rt|jtr| |jjo| |jo|j dupt |j dkp|jjdkSdSdS)NTrrSF)rr0r1Z_mgfr.rZZ _algorithmr'rrr/rZ_labelrrWZCryptography_HAS_RSA_OAEP_LABEL)rfZpaddingrPrPrQrsa_padding_supporteds      zBackend.rsa_padding_supportedc Cs~|dvrtd|j}|||jjk|j||jj}|j|||jjd|jj|jj|jj}||dkt ||S)N)irRi iz0Key size must be 1024, 2048, 3072, or 4096 bits.rrS) rrWDSA_newrmrUrqrrZDSA_generate_parameters_exr)rfrctxr|rPrPrQgenerate_dsa_parameterss$  zBackend.generate_dsa_parameterscCsT|j|j}|||jjk|j||jj}|j|| |}t |||Sru) rWZ DSAparams_dupZ _dsa_cdatarmrUrqrrZDSA_generate_key_dsa_cdata_to_evp_pkeyr)rf parametersrrrPrPrQgenerate_dsa_private_keys   z Backend.generate_dsa_private_keycCs||}||Sru)rr )rfrrrPrPrQ'generate_dsa_private_key_and_parameterss z/Backend.generate_dsa_private_key_and_parameterscCsB|j||||}||dk|j|||}||dkdSrw)rW DSA_set0_pqgrmZ DSA_set0_key)rfrrrgpub_keypriv_keyr|rPrPrQ_dsa_cdata_set_valuesszBackend._dsa_cdata_set_valuesc Cst||jj}|j}|||jjk|j ||jj }| |j }| |j }| |j}| |jj}| |j}|||||||||} t||| Sru)r*Z_check_dsa_private_numbersrparameter_numbersrWrrmrUrqrrrrrr yxrrr) rfrrrrrr r rrrPrPrQload_dsa_private_numberss       z Backend.load_dsa_private_numbersc Cst|j|j}|||jjk|j||jj }| |jj }| |jj }| |jj }| |j}|jj}|||||||||}t|||Sru)r*_check_dsa_parametersrrWrrmrUrqrrrrrr rrrr) rfrrrrr r rrrPrPrQload_dsa_public_numberss    zBackend.load_dsa_public_numberscCst||j}|||jjk|j||jj}| |j }| |j }| |j }|j ||||}||dkt||Srw)r*rrWrrmrUrqrrrrrr r r)rfrrrrr r|rPrPrQload_dsa_parameter_numberss     z"Backend.load_dsa_parameter_numberscCs(|}|j||}||dk|Srw)rrWZEVP_PKEY_set1_DSArm)rfrrr|rPrPrQr!szBackend._dsa_cdata_to_evp_pkey)returncCs|j Sru)rZrerPrPrQ dsa_supported'szBackend.dsa_supported)rrcCs|s dS||Sr)rrrrPrPrQdsa_hash_supported*szBackend.dsa_hash_supportedcCsdSrrP)rfrrr rPrPrQdsa_parameters_supported/sz Backend.dsa_parameters_supportedcCs||td|jS)N)rr<Z block_sizerrPrPrQcmac_algorithm_supported2sz Backend.cmac_algorithm_supportedcCs t||Srur rrPrPrQcreate_cmac_ctx7szBackend.create_cmac_ctxcCs||jj|j||Sru) _load_keyrWZPEM_read_bio_PrivateKeyr)rfrpasswordrPrPrQload_pem_private_key:s zBackend.load_pem_private_keycCs||}|j|j|jj|jj|jj}||jjkrR|j||jj}||S| |j |j}| |dk|j |j|jj|jj|jj}||jjkr|j||jj }||}t|||S|dSrw)rrWZPEM_read_bio_PUBKEYrKrUrqrrrr BIO_resetrmZPEM_read_bio_RSAPublicKeyrrr!_handle_key_loading_errorrfrmem_biorr|rrPrPrQload_pem_public_keyBs$      zBackend.load_pem_public_keycCs^||}|j|j|jj|jj|jj}||jjkrR|j||jj}t||S| dSru) rrWZPEM_read_bio_DHparamsrKrUrqrrr r")rfrr$rrPrPrQload_pem_parameters[s   zBackend.load_pem_parameterscCs>||}|||}|r$||S||jj|j||SdSru)r"_evp_pkey_from_der_traditional_keyrrrWZd2i_PKCS8PrivateKey_bio)rfrrrrrPrPrQload_der_private_keygs   zBackend.load_der_private_keycCs^|j|j|jj}||jjkrN||j||jj}|durJtd|S|dSdS)N4Password was given but private key is not encrypted.) rWd2i_PrivateKey_biorKrUrqrrr TypeError)rfrrrrPrPrQr'zs z*Backend._evp_pkey_from_der_traditional_keycCs||}|j|j|jj}||jjkrF|j||jj}||S| |j |j}| |dk|j |j|jj}||jjkr|j||jj }||}t|||S|dSrw)rrWZd2i_PUBKEY_biorKrUrqrrrrr!rmZd2i_RSAPublicKey_biorrr!r"r#rPrPrQload_der_public_keys        zBackend.load_der_public_keycCs||}|j|j|jj}||jjkrF|j||jj}t||S|jj r| |j |j}| |dk|j |j|jj}||jjkr|j||jj}t||S|dSrw)rrWZd2i_DHparams_biorKrUrqrrr rcrr!rmZCryptography_d2i_DHxparams_bior")rfrr$rr|rPrPrQload_der_parameterss       zBackend.load_der_parameters)certrcCsT|tjj}||}|j|j|jj }| ||jj k|j ||jj }|Sru) public_bytesr(EncodingDERrrWZ d2i_X509_biorKrUrqrmr X509_free)rfr.rr$rrPrPrQ _cert2ossls  zBackend._cert2ossl)rrcCs4|}|j||}||dkt||Srw)rrWZ i2d_X509_biorm rust_x509Zload_der_x509_certificater)rfrrKr|rPrPrQ _ossl2certszBackend._ossl2cert)csrrcCsT|tjj}||}|j|j|jj }| ||jj k|j ||jj }|Sru) r/r(r0r1rrWZd2i_X509_REQ_biorKrUrqrmrZ X509_REQ_free)rfr6rr$x509_reqrPrPrQ _csr2ossls  zBackend._csr2ossl)r7rcCs4|}|j||}||dkt||Srw)rrWZi2d_X509_REQ_biormr4Zload_der_x509_csrr)rfr7rKr|rPrPrQ _ossl2csrszBackend._ossl2csr)crlrcCsT|tjj}||}|j|j|jj }| ||jj k|j ||jj }|Sru) r/r(r0r1rrWZd2i_X509_CRL_biorKrUrqrmrZ X509_CRL_free)rfr:rr$x509_crlrPrPrQ _crl2ossls  zBackend._crl2ossl)r;rcCs4|}|j||}||dkt||Srw)rrWZi2d_X509_CRL_biormr4Zload_der_x509_crlr)rfr;rKr|rPrPrQ _ossl2crlszBackend._ossl2crl)r: public_keyrcCsJt|tttfstd||}|j||j}|dkrF| dSdS)NzGExpecting one of DSAPublicKey, RSAPublicKey, or EllipticCurvePublicKey.rSFT) rrr!rr+r<rWZX509_CRL_verify _evp_pkeyr)rfr:r>r;r|rPrPrQ_crl_is_signature_valids  zBackend._crl_is_signature_validcCs`||}|j|}|||jjk|j||jj}|j||}|dkr\| dSdS)NrSFT) r8rWZX509_REQ_get_pubkeyrmrUrqrrZX509_REQ_verifyr)rfr6r7Zpkeyr|rPrPrQ_csr_is_signature_valids  zBackend._csr_is_signature_validcCs"|j|j|jdkrtddS)NrSzKeys do not correspond)rWZ EVP_PKEY_cmpr?r)rfZkey1Zkey2rPrPrQ_check_keys_correspond szBackend._check_keys_correspondc Cs&||}|jd}|durFtd||j|}||_t||_||j |jj |j |j j d|}||jj kr|jdkr||jdkrtdq|jdksJtd|jd n|||j||j j}|dur|jdkrtd |dur|jd ks|dusJ||S) NzCRYPTOGRAPHY_PASSWORD_DATA *rZCryptography_pem_password_cbrz3Password was not given but private key is encryptedzAPasswords longer than {} bytes are not supported by this backend.rSr))rrUrr_check_byteslikerrrrrKrqZ addressofrWZ _original_liberrorrr+rrhmaxsizer"rrZcalled) rfZopenssl_read_funcZ convert_funcrrr$ZuserdataZ password_ptrrrPrPrQrsT        zBackend._load_keycs}|stdn|djjjjsf|djjjjsfjjrp|djj jj rptdn4t fdd|Drtdnt |}td|dS)Nz|Could not deserialize key data. The data may be in an incorrect format or it may be encrypted with an unsupported algorithm.rz Bad decrypt. Incorrect password?c3s"|]}|jjjjVqdSru)_lib_reason_matchrW ERR_LIB_EVPZ'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM).0rFrerPrQ bs z4Backend._handle_key_loading_error..z!Unsupported public key algorithm.zCould not deserialize key data. The data may be in an incorrect format, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters).)rrrHrWrIZEVP_R_BAD_DECRYPTZERR_LIB_PKCS12Z!PKCS12_R_PKCS12_CIPHERFINAL_ERRORZCryptography_HAS_PROVIDERSZ ERR_LIB_PROVZPROV_R_BAD_DECRYPTanyr&Z_errors_with_text)rfrkrPrerQr"Fs>       z!Backend._handle_key_loading_errorcCstz||}Wnty(|jj}Yn0|j|}||jjkrN|dS|||jjk|j |dSdS)NFT) _elliptic_curve_to_nidrrW NID_undefZEC_GROUP_new_by_curve_namerUrqrrmZ EC_GROUP_free)rfcurve curve_nidgrouprPrPrQelliptic_curve_supportedus    z Backend.elliptic_curve_supportedcCst|tjsdS||Sr)rr+ZECDSArR)rfZsignature_algorithmrOrPrPrQ,elliptic_curve_signature_algorithm_supporteds z4Backend.elliptic_curve_signature_algorithm_supportedcCs\||rD||}|j|}||dk||}t|||Std|j t j dS)z@ Generate a new private key on the named curve. rSz#Backend object does not support {}.N) rR_ec_key_new_by_curverWZEC_KEY_generate_keyrm_ec_cdata_to_evp_pkeyrrrhrrUNSUPPORTED_ELLIPTIC_CURVE)rfrOrr|rrPrPrQ#generate_elliptic_curve_private_keys      z+Backend.generate_elliptic_curve_private_keycCsz|j}||j}|j||j|jj}|j ||}|dkrR| t d| ||j |j}||}t|||S)NrSInvalid EC key.)rrTrOrUrr private_valuerW BN_clear_freeEC_KEY_set_private_keyrr)_ec_key_set_public_key_affine_coordinatesrrrUr)rfrZpublicrrYr|rrPrPrQ#load_elliptic_curve_private_numberss   z+Backend.load_elliptic_curve_private_numberscCs4||j}|||j|j}||}t|||Sru)rTrOr\rrrUr)rfrrrrPrPrQ"load_elliptic_curve_public_numberss    z*Backend.load_elliptic_curve_public_numbersc Cs||}|j|}|||jjk|j|}|||jjk|j||jj}| @}|j |||t ||}|dkr| t dWdn1s0Y|j||}||dk||}t|||S)NrSz(Invalid public bytes for the given curve)rTrWEC_KEY_get0_grouprmrUrq EC_POINT_newr EC_POINT_free _tmp_bn_ctxZEC_POINT_oct2pointrrrEC_KEY_set_public_keyrUr) rfrOZ point_bytesrrQpointbn_ctxr|rrPrPrQ load_elliptic_curve_public_bytess"    & z(Backend.load_elliptic_curve_public_bytesc Csb||}||\}}|j|}|||jjk|j||jj}| |}|j||jj }| |}|j ||||jj|jj|} || dk|j |} |j |} |||| | |} | dkr|tdWdn1s0Y|j||} || dk| |} |j| |jj } |j|| } || dk||} t||| S)NrSz'Unable to derive key from private_value)rT _ec_key_determine_group_get_funcrWr`rmrUrqrrarrZrbZ EC_POINT_mulZ BN_CTX_getrrrcr[rUr)rfrYrOrget_funcrQrdvaluerer|Zbn_xZbn_yZprivaterrPrPrQ!derive_elliptic_curve_private_keys4      &  z)Backend.derive_elliptic_curve_private_keycCs||}||Sru)rM_ec_key_new_by_curve_nid)rfrOrPrPrPrQrTs zBackend._ec_key_new_by_curvecCs0|j|}|||jjk|j||jjSru)rWZEC_KEY_new_by_curve_namermrUrqrr)rfrPrrPrPrQrks z Backend._ec_key_new_by_curve_nidcCs,|jrt||jsdS||o*t|tjSr)rZr_fips_ecdh_curvesrRr+ZECDH)rfrrOrPrPrQ+elliptic_curve_exchange_algorithm_supporteds z3Backend.elliptic_curve_exchange_algorithm_supportedcCs(|}|j||}||dk|Srw)rrWZEVP_PKEY_set1_EC_KEYrm)rfrrr|rPrPrQrU szBackend._ec_cdata_to_evp_pkeycCsNddd}||j|j}|j|}||jjkrJtd|jtj |S)z/ Get the NID for a curve name. Z prime192v1Z prime256v1)Z secp192r1Z secp256r1z${} is not a supported elliptic curve) getrrW OBJ_sn2nidrrNrrhrrV)rfrOZ curve_aliasesZ curve_namerPrPrPrQrMs   zBackend._elliptic_curve_to_nidc csd|j}|||jjk|j||jj}|j|z|VW|j|n|j|0dSru) rWZ BN_CTX_newrmrUrqrZ BN_CTX_freeZ BN_CTX_startZ BN_CTX_end)rfrerPrPrQrb#s  zBackend._tmp_bn_ctxcCs|||jjk|jd}|||jjk|j|}|||jjk|j|}|||jjk|j|}|||jjk||kr|jj r|jj }n|jj }|sJ||fS)zu Given an EC_KEY determine the group and what function is required to get point coordinates. scharacteristic-two-field) rmrUrqrWrorNr_ZEC_GROUP_method_ofZEC_METHOD_get_field_typeZCryptography_HAS_EC2MZ$EC_POINT_get_affine_coordinates_GF2mZ#EC_POINT_get_affine_coordinates_GFp)rfrZ nid_two_fieldrQmethodnidrhrPrPrQrg.s     z(Backend._ec_key_determine_group_get_funccCst|dks|dkrtd|j|||jj}|j|||jj}|j|||}|dkrp|td|S)zg Sets the public key point in the EC_KEY context to the affine x and y values. rz2Invalid EC key. Both x and y must be non-negative.rSrX)rrUrrrWrZ(EC_KEY_set_public_key_affine_coordinatesr)rfrrrr|rPrPrQr\Jsz1Backend._ec_key_set_public_key_affine_coordinatesc Cs(t|tjstdt|tjs(tdt|tjs|j j}n | |j jkrV|j j}nt d ||||S|tjjur|rt d | |j jkr|j j}n8| |j jkr|j j}n | |j jkr|j j}nt d |||St d |tjjur|tjj urt !||St d t ddS)N/encoding must be an item from the Encoding enumz2format must be an item from the PrivateFormat enumzBEncryption algorithm must be a KeySerializationEncryption instancerpizBPasswords longer than 1023 bytes are not supported by this backendzUnsupported encryption typezUnsupported encoding for PKCS8zCEncrypted traditional OpenSSL format is not supported in FIPS mode.z+Unsupported key type for TraditionalOpenSSLzDEncryption is not supported for DER encoded traditional OpenSSL keysz+Unsupported encoding for TraditionalOpenSSLz=OpenSSH private key format can only be used with PEM encodingformat is invalid with this key)"rr(r0r+Z PrivateFormatZKeySerializationEncryption NoEncryptionBestAvailableEncryptionrrrZPKCS8PEMrWZPEM_write_bio_PKCS8PrivateKeyr1Zi2d_PKCS8PrivateKey_bio_private_key_bytes_via_bioZTraditionalOpenSSLrZrrZPEM_write_bio_RSAPrivateKeyrZPEM_write_bio_DSAPrivateKeyrZPEM_write_bio_ECPrivateKeyZi2d_RSAPrivateKey_bioZi2d_ECPrivateKey_bioZi2d_DSAPrivateKey_bio_bio_func_outputOpenSSHrFZserialize_ssh_private_key) rfencodingrhencryption_algorithmrrcdatar write_biorrPrPrQ_private_key_bytes^s                  zBackend._private_key_bytesc Cs<|s|jj}n |jd}|||||t||jj|jjS)Ns aes-256-cbc)rUrqrWEVP_get_cipherbynamerxr)rfr}rrrrPrPrQrws  z"Backend._private_key_bytes_via_biocGs0|}||g|R}||dk||Srw)rrmr)rfr}argsrKr|rPrPrQrxszBackend._bio_func_outputcCst|tjstdt|tjs(td|tjjurt|tjjurJ|jj}n|tjj ur`|jj }nt d| ||S|tjj ur|j|}||jjkrt d|tjjur|jj}n|tjj ur|jj}nt d| ||S|tjjur|tjjurt|St dt ddS)Nrrz1format must be an item from the PublicFormat enumz8SubjectPublicKeyInfo works only with PEM or DER encodingz+PKCS1 format is supported only for RSA keysz)PKCS1 works only with PEM or DER encodingz1OpenSSH format must be used with OpenSSH encodingrs)rr(r0r+Z PublicFormatZSubjectPublicKeyInforvrWZPEM_write_bio_PUBKEYr1Zi2d_PUBKEY_biorrxZPKCS1rrZPEM_write_bio_RSAPublicKeyZi2d_RSAPublicKey_bioryrFZserialize_ssh_public_key)rfrzrhrrr|r}rrPrPrQ_public_key_bytess@                 zBackend._public_key_bytescCs|tjjurtd|jd}|j||jj||jj|tjj urj|d|jjkr`|jj }q|jj }n8|tjj ur|d|jjkr|jj }q|jj}ntd|}|||}||dk||S)Nz!OpenSSH encoding is not supportedz BIGNUM **rrrrS)r(r0ryr+rUrrWZ DH_get0_pqgrqrvZPEM_write_bio_DHxparamsZPEM_write_bio_DHparamsr1ZCryptography_i2d_DHxparams_bioZi2d_DHparams_biorrmr)rfrzrhr|rr}rKr|rPrPrQ_parameter_bytess"         zBackend._parameter_bytescCs |jj SrurWCRYPTOGRAPHY_IS_BORINGSSLrerPrPrQ dh_supported'szBackend.dh_supportedcCs|tjkrtdtj|dvr*td|j}|||jjk|j ||jj }|j ||||jj}||dkt ||S)Nz$DH key_size must be at least {} bits)zDH generator must be 2 or 5rS) r)Z_MIN_MODULUS_SIZErrhrWDH_newrmrUrqrrZDH_generate_parameters_exr )rf generatorrZdh_param_cdatar|rPrPrQgenerate_dh_parameters*s    zBackend.generate_dh_parameterscCs(|}|j||}||dk|Srw)rrWZEVP_PKEY_set1_DHrm)rfrrr|rPrPrQ_dh_cdata_to_evp_pkey@szBackend._dh_cdata_to_evp_pkeycCs<t|j|}|j|}||dk||}t|||Srw)rZ _dh_cdatarWZDH_generate_keyrmrr )rfrZ dh_key_cdatar|rrPrPrQgenerate_dh_private_keyFs    zBackend.generate_dh_private_keycCs||||Sru)rr)rfrrrPrPrQ&generate_dh_private_key_and_parametersPs z.Backend.generate_dh_private_key_and_parametersc Cs>|jj}|j}|||jjk|j||jj}| |j }| |j }|j durf| |j }n|jj}| |jj }| |j}|j||||} || dk|j|||} || dk|jdd} |j|| } || dk| ddkr(|j dkr | d|jjAdks(td||} t||| S)NrSint[]rrz.DH private numbers did not pass safety checks.)rrrWrrmrUrqrrrrr rrr DH_set0_pqg DH_set0_keyrCryptography_DH_checkZDH_NOT_SUITABLE_GENERATORrrr ) rfrrrrr rr rr|codesrrPrPrQload_dh_private_numbersUs4       zBackend.load_dh_private_numbersc Cs|j}|||jjk|j||jj}|j}||j }||j }|j durd||j }n|jj}||j }|j ||||}||dk|j|||jj}||dk||} t||| Srw)rWrrmrUrqrrrrrr rrrrrr) rfrrrrr rr r|rrPrPrQload_dh_public_numberss       zBackend.load_dh_public_numberscCs|j}|||jjk|j||jj}||j}||j }|j dur^||j }n|jj}|j ||||}||dkt ||Srw) rWrrmrUrqrrrrr rrr )rfrrrr rr|rPrPrQload_dh_parameter_numberss    z!Backend.load_dh_parameter_numberscCs|j}|||jjk|j||jj}||}||}|durV||}n|jj}|j||||}||dk|j dd}|j ||}||dk|ddkS)NrSrr) rWrrmrUrqrrrrrr)rfrr rrr|rrPrPrQdh_parameters_supporteds    zBackend.dh_parameters_supportedcCs |jjdkSrw)rWrcrerPrPrQdh_x942_serialization_supportedsz'Backend.dh_x942_serialization_supportedcCsht|dkrtd|}|j||jj}||dk|j||t|}||dkt||S)N z%An X25519 public key is 32 bytes longrS) rrrrWZEVP_PKEY_set_type NID_X25519rmZEVP_PKEY_set1_tls_encodedpointr#)rfrrr|rPrPrQx25519_load_public_bytess  z Backend.x25519_load_public_bytescCst|dkrtdd}|dF}||dd<||dd<||}|j|j|jj}Wdn1sn0Y| ||jjk|j ||jj }| |j ||jj kt||S)Nrz&An X25519 private key is 32 bytes longs0.0+en" 0r)rr_zeroed_bytearrayrrWr*rKrUrqrmrrrrr")rfrZ pkcs8_prefixbarKrrPrPrQx25519_load_private_bytess     2z!Backend.x25519_load_private_bytescCs|j||jj}|||jjk|j||jj}|j|}||dk|jd}|j ||}||dk||d|jjk|j|d|jj }|S)NrS EVP_PKEY **r) rWZEVP_PKEY_CTX_new_idrUrqrmrZEVP_PKEY_CTX_freeZEVP_PKEY_keygen_initrZEVP_PKEY_keygenr)rfrqZ evp_pkey_ctxr|Z evp_ppkeyrrPrPrQ_evp_pkey_keygen_gcs  zBackend._evp_pkey_keygen_gccCs||jj}t||Sru)rrWrr"rrPrPrQx25519_generate_keyszBackend.x25519_generate_keycCs|jr dS|jj Sr)rZrWCRYPTOGRAPHY_IS_LIBRESSLrerPrPrQx25519_supported szBackend.x25519_supportedcCs`t|dkrtd|j|jj|jj|t|}|||jjk|j||jj }t ||S)N8z#An X448 public key is 56 bytes long) rrrWEVP_PKEY_new_raw_public_keyNID_X448rUrqrmrrr%rfrrrPrPrQx448_load_public_bytess zBackend.x448_load_public_bytescCslt|dkrtd|j|}|j|jj|jj|t|}|||jjk|j ||jj }t ||S)Nrz$An X448 private key is 56 bytes long) rrrUrrWEVP_PKEY_new_raw_private_keyrrqrmrrr$rfrrrrPrPrQx448_load_private_bytess  zBackend.x448_load_private_bytescCs||jj}t||Sru)rrWrr$rrPrPrQx448_generate_key'szBackend.x448_generate_keycCs|jr dS|jj o|jj Sr)rZrWZ"CRYPTOGRAPHY_OPENSSL_LESS_THAN_111rrerPrPrQx448_supported+s  zBackend.x448_supportedcCs|jr dS|jj Sr)rZrW#CRYPTOGRAPHY_OPENSSL_LESS_THAN_111BrerPrPrQed25519_supported3szBackend.ed25519_supportedcCsntd|t|tjkr"td|j|jj|j j |t|}| ||j j k|j ||jj }t||S)Nrz&An Ed25519 public key is 32 bytes long)r _check_bytesrr,_ED25519_KEY_SIZErrWr NID_ED25519rUrqrmrrrrrPrPrQed25519_load_public_bytes8s z!Backend.ed25519_load_public_bytescCszt|tjkrtdtd||j|}|j |jj |jj |t|}| ||jj k|j ||jj}t||S)Nz'An Ed25519 private key is 32 bytes longr)rr,rrrrErUrrWrrrqrmrrrrrPrPrQed25519_load_private_bytesFs  z"Backend.ed25519_load_private_bytescCs||jj}t||Sru)rrWrrrrPrPrQed25519_generate_keyTszBackend.ed25519_generate_keycCs|jr dS|jj o|jj Sr)rZrWrrrerPrPrQed448_supportedXs  zBackend.ed448_supportedcCsltd|t|tkr td|j|jj|jj |t|}| ||jj k|j ||jj }t ||S)Nrz$An Ed448 public key is 57 bytes long)rrrrrrWr NID_ED448rUrqrmrrrrrPrPrQed448_load_public_bytes`s  zBackend.ed448_load_public_bytescCsxtd|t|tkr td|j|}|j|jj |jj |t|}| ||jj k|j ||jj }t||S)Nrz%An Ed448 private key is 57 bytes long)rrErrrrUrrWrrrqrmrrrrrPrPrQed448_load_private_bytesms   z Backend.ed448_load_private_bytescCs||jj}t||Sru)rrWrrrrPrPrQed448_generate_key{szBackend.ed448_generate_keyc Cs|jd|}|j|}|j|t||t||||tj|| } | dkrr|} d||d} t d | | |j |ddS)NrrSizJNot enough memory to derive key. These parameters require {} MB of memory.) rUrrrWZEVP_PBE_scryptrrDZ _MEM_LIMITr MemoryErrorrhr) rfrrrrrrrrr|rkZ min_memoryrPrPrQ derive_scrypts0  zBackend.derive_scryptcCs2t|}|jr||jvrdS|j||jjkSr)rZ_aead_cipher_namerZ _fips_aeadrWrrUrq)rfr cipher_namerPrPrQaead_cipher_supporteds zBackend.aead_cipher_supportedc cs2t|}z|VW|||n|||0dS)z This method creates a bytearray, which we copy data into (hopefully also from a mutable buffer that can be dynamically erased!), and then zero when we're done. N) bytearray _zero_data)rfrrrPrPrQrszBackend._zeroed_bytearraycCst|D] }d||<qdSrn)range)rfrrirPrPrQrs zBackend._zero_datac cs||dur|jjVndt|}|jd|d}|j|||z |VW||jd||n||jd||0dS)a This method takes bytes, which can be a bytestring or a mutable buffer like a bytearray, and yields a null-terminated version of that data. This is required because PKCS12_parse doesn't take a length with its password char * and ffi.from_buffer doesn't provide null termination. So, to support zeroing the data via bytearray we need to build this ridiculous construct that copies the memory, but zeroes it after use. NrrSz uint8_t *)rUrqrrZmemmovercast)rfrZdata_lenrrPrPrQ_zeroed_null_terminated_bufs  z#Backend._zeroed_null_terminated_bufcCs2|||}|j|jr|jjnddd|jDfS)NcSsg|] }|jqSrP) certificate)rJr.rPrPrQ rpzABackend.load_key_and_certificates_from_pkcs12..) load_pkcs12rr.rZadditional_certs)rfrrZpkcs12rPrPrQ%load_key_and_certificates_from_pkcs12s  z-Backend.load_key_and_certificates_from_pkcs12cCs|durtd|||}|j|j|jj}||jjkrN|t d|j ||jj }|j d}|j d}|j d}| |$}|j|||||} Wdn1s0Y|jjr|| dkr|t dd} d} g} |d|jjkr(|j |d|jj} || } |d|jjkr|j |d|jj}||}d}|j||jj}||jjkr|j|}t||} |d|jjkr~|j |d|jj}|j|d}|jjs|jjrt|}n tt|}|D]}|j||}|||jjk|j ||jj}||}d}|j||jj}||jjkrj|j|}| t||qt | | | S)Nrz!Could not deserialize PKCS12 datarzX509 **zCryptography_STACK_OF_X509 **rzInvalid password or PKCS12 data)!rrErrWZd2i_PKCS12_biorKrUrqrrr PKCS12_freerrZ PKCS12_parserrrr2r5ZX509_alias_get0rrG sk_X509_free sk_X509_num#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERrrreversed sk_X509_valuermrdrH)rfrrrKp12Z evp_pkey_ptrZx509_ptrZ sk_x509_ptr password_bufr|r.rZadditional_certificatesrrZcert_objrZ maybe_namesk_x509rindicesrZ addl_certZ addl_namerPrPrQrsp        "        zBackend.load_pkcs12cCsd}|durtd|t|tjr6d}d}d} d} n4t|tjrb|jj}|jj}d} d} |j}nt d|dus~t |dkr|j j } nZ|j } |j | |jj} g} |D]4} || }| ||j| |}t|dkq||}||Z}|r ||n|j j }|r|jn|j j }|j||||| ||| | d }Wdn1sZ0YWdn1sz0Y|||j j k|j ||jj}|}|j||}||dk||S)NrrCri NrSzUnsupported key encryption type)rrrr(rtrurWZ&NID_pbe_WithSHA1And3_Key_TripleDES_CBCrrrrUrqsk_X509_new_nullrrr3rd sk_X509_pushbackendrmrr?Z PKCS12_createrrZi2d_PKCS12_bior)rfrrr.Zcasr{rZnid_certZnid_keyZ pkcs12_iterZmac_iterrZossl_cascaZossl_car|rZname_buf ossl_certrrrKrPrPrQ(serialize_key_and_certificates_to_pkcs12sb        D z0Backend.serialize_key_and_certificates_to_pkcs12cCs|jr dS|jjdkSr)rZrWZCryptography_HAS_POLY1305rerPrPrQpoly1305_supportedcszBackend.poly1305_supportedcCs*td|t|tkr tdt||S)NrzA poly1305 key is 32 bytes long)rrErrrr)rfrrPrPrQcreate_poly1305_ctxhs  zBackend.create_poly1305_ctxcCs |jj SrurrerPrPrQpkcs7_supportedoszBackend.pkcs7_supportedcCsntd|||}|j|j|jj|jj|jj}||jjkrR|t d|j ||jj }| |SNrzUnable to parse PKCS7 data) rrrrWZPEM_read_bio_PKCS7rKrUrqrrr PKCS7_free_load_pkcs7_certificatesrfrrKp7rPrPrQload_pem_pkcs7_certificatesrs   z#Backend.load_pem_pkcs7_certificatescCsbtd|||}|j|j|jj}||jjkrF|t d|j ||jj }| |Sr) rrrrWZ d2i_PKCS7_biorKrUrqrrrrrrrPrPrQload_der_pkcs7_certificatess   z#Backend.load_der_pkcs7_certificatesc Cs|j|j}|||jjk||jjkr>td|tj g}|j j |j j krV|S|j j j}|j|}t|D]d}|j||}|||j j k|j|}||dk|j ||jj}||} || qt|S)NzNOnly basic signed structures are currently supported. NID for this data was {}rS)rWZ OBJ_obj2nidrrmrNZNID_pkcs7_signedrrhrZUNSUPPORTED_SERIALIZATIONrsignrUrqr.rrrZ X509_up_refrr2r5rd) rfrrqcertsrrrrr|r.rPrPrQrs.       z Backend._load_pkcs7_certificatescCs||j}|jj}d}t|jdkr0|jj}n\|j}|j ||jj }g}|jD]4} | | } | | |j || } || dkqVtjj|vr||jjO}||jjO}|j|jj|jj||jj|} || |jjk|j | |jj} d} tjj|vr| |jjO} ntjj|vr.| |jjO} tjj|vrH| |jjO} |jD]H\}}}| |} ||}|j| | |j|| }|||jjkqN|D]<}|tjjur||jj O}n|tjj!ur||jj"O}q|#}|t$j%j&ur|j'|| |j(|} n|t$j%j)urJ|j*| |j(|} || dk|j+|| |j(|} nR|t$j%j,us\J|j*| |j(|} || dk|jj-r|.|j/|| } || dk|0|S)NrrS)1r_datarWZ PKCS7_PARTIALrZ_additional_certsrUrqrrrr3rdrrmrEZ PKCS7OptionsZDetachedSignatureZPKCS7_DETACHEDZ PKCS7_signrZNoCapabilitiesZPKCS7_NOSMIMECAPZ NoAttributesZ PKCS7_NOATTRZNoCertsZ PKCS7_NOCERTSZ_signersrZPKCS7_sign_add_signerr?TextZ PKCS7_TEXTZBinaryZ PKCS7_BINARYrr(r0ZSMIMEZSMIME_write_PKCS7rKrvZ PKCS7_finalZPEM_write_bio_PKCS7_streamr1rrZ i2d_PKCS7_bior)rfZbuilderrzoptionsrKZ init_flagsZ final_flagsrZ ossl_certsr.rr|rZ signer_flagsrZ private_keyZhash_algorithmZmdZ p7signerinfooptionZbio_outrPrPrQ pkcs7_signs~                 zBackend.pkcs7_sign)N)N)N)rMrNrO__doc__rrr2rr'rrrrZ SHA512_224Z SHA512_256ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ZSHAKE128ZSHAKE256rr+Z SECP224R1Z SECP256R1Z SECP384R1Z SECP521R1rlZ_fips_rsa_min_key_sizeZ_fips_rsa_min_public_exponentZ_fips_dsa_min_modulusZ_fips_dh_min_key_sizeZ_fips_dh_min_modulusrgrjrmrYrvr} contextlibrr~rarrirrrrrrrrrrr\rrrrrrrrrrrrrrrrrrrrrrr r rrrrrrsrZ HashAlgorithmrrrrr r%r&r(r'r,r-rZ CertificatetypingAnyr3r5ZCertificateSigningRequestr8r9ZCertificateRevocationListr<r=rIr@rArBrr"rRrSrWr]r^rfrjrTrkrmrUrMrbrgr\r~rwrxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrPrPrPrQrvs\          1 "    -+        5/  %  i0 . "          L D    rc@seZdZddZddZdS)rcCs ||_dSru)_fmt)rffmtrPrPrQrg szGetCipherByName.__init__cCs&|jj||d}|j|dS)N)rrtr)rrhlowerrWrr)rfrrrtrrPrPrQ__call__ szGetCipherByName.__call__N)rMrNrOrgrrPrPrPrQr srcCs"d|jd}|j|dS)Nz aes-{}-xtsrr)rhrrWrr)rrrtrrPrPrQr sr)o collectionsrrrr^rZ cryptographyrrZcryptography.exceptionsrrZ'cryptography.hazmat.backends.interfacesrZBackendInterfaceZ$cryptography.hazmat.backends.opensslrZ,cryptography.hazmat.backends.openssl.ciphersr Z)cryptography.hazmat.backends.openssl.cmacr Z'cryptography.hazmat.backends.openssl.dhr r rrZ(cryptography.hazmat.backends.openssl.dsarrrZ'cryptography.hazmat.backends.openssl.ecrrZ,cryptography.hazmat.backends.openssl.ed25519rrZ*cryptography.hazmat.backends.openssl.ed448rrrZ+cryptography.hazmat.backends.openssl.hashesrZ)cryptography.hazmat.backends.openssl.hmacrZ-cryptography.hazmat.backends.openssl.poly1305rrZ(cryptography.hazmat.backends.openssl.rsar r!Z+cryptography.hazmat.backends.openssl.x25519r"r#Z)cryptography.hazmat.backends.openssl.x448r$r%Z"cryptography.hazmat.bindings._rustr4Z$cryptography.hazmat.bindings.opensslr&Zcryptography.hazmat.primitivesr'r(Z)cryptography.hazmat.primitives.asymmetricr)r*r+r,r-Z1cryptography.hazmat.primitives.asymmetric.paddingr.r/r0r1Z1cryptography.hazmat.primitives.ciphers.algorithmsr2r3r4r5r6r7r8r9r:r;Z,cryptography.hazmat.primitives.ciphers.modesr<r=r>r?r@rArBrCZ"cryptography.hazmat.primitives.kdfrDZ,cryptography.hazmat.primitives.serializationrErFZ3cryptography.hazmat.primitives.serialization.pkcs12rGrHZcryptography.x509.baserI namedtuplerJobjectrLrrrrPrPrPrQsp         0 (