AnonSec Shell
Server IP : 209.38.156.173  /  Your IP : 216.73.216.122   [ Reverse IP ]
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux lakekumayuhotel 5.15.0-136-generic #147-Ubuntu SMP Sat Mar 15 15:53:30 UTC 2025 x86_64
User : root ( 0)
PHP Version : 8.1.2-1ubuntu2.22
Disable Function : NONE
Domains : 2 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-310.pyc
o

g�ee��@s�ddlZddlZddlZddlZddlZddlmZddlmZmZddl	m
Z
mZddlm
Z
mZmZmZmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZddl m!Z!ddl"m#Z#dd	l$m%Z%dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1m2Z2m3Z3m4Z4ddl5m6Z6m7Z7m8Z8dd
l9m:Z:m;Z;ddl<m=Z=m>Z>ddl?m@Z@mAZAmBZBddlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLddlMmNZNddlOmPZPddlQmRZRmSZSddlTmUZUmVZVddlWmXZXmYZYddlZm[Z[m\Z\ddl]m^Z^m_Z_ddl`maZambZbmcZcmdZdddlemfZfddlgmhZhmiZiddljmkZkmlZlmmZmmnZnmoZompZpddlqmrZrmsZsmtZtmuZuddlvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZddl�m�Z�m�Z�m�Z�m�Z�m�Z�m�Z�m�Z�m�Z�ddl�m�Z�dd l�m�Z�m�Z�dd!l�m�Z�e��d"d#d$g�Z�Gd%d&�d&e��Z�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��e�e��ef���j�j�e�Gd'd(�d(e���������������Z�Gd)d*�d*e��Z�d+d,�Z�e��Z�dS)-�N)�contextmanager)�utils�x509)�UnsupportedAlgorithm�_Reasons)�INTEGER�NULL�SEQUENCE�
encode_der�encode_der_integer)
�CMACBackend�
CipherBackend�DERSerializationBackend�	DHBackend�
DSABackend�EllipticCurveBackend�HMACBackend�HashBackend�PBKDF2HMACBackend�PEMSerializationBackend�
RSABackend�
ScryptBackend�X509Backend)�aead)�_CipherContext��_CMACContext)	�_CRL_ENTRY_REASON_ENUM_TO_CODE�_CRL_EXTENSION_HANDLERS�_EXTENSION_HANDLERS_BASE�_EXTENSION_HANDLERS_SCT�"_OCSP_BASICRESP_EXTENSION_HANDLERS�_OCSP_REQ_EXTENSION_HANDLERS�'_OCSP_SINGLERESP_EXTENSION_HANDLERS_SCT�_REVOKED_EXTENSION_HANDLERS�_X509ExtensionParser)�
_DHParameters�
_DHPrivateKey�_DHPublicKey�_dh_params_dup)�_DSAParameters�_DSAPrivateKey�
_DSAPublicKey)�_EllipticCurvePrivateKey�_EllipticCurvePublicKey)�_Ed25519PrivateKey�_Ed25519PublicKey)�_ED448_KEY_SIZE�_Ed448PrivateKey�_Ed448PublicKey)	�$_CRL_ENTRY_EXTENSION_ENCODE_HANDLERS�_CRL_EXTENSION_ENCODE_HANDLERS�_EXTENSION_ENCODE_HANDLERS�)_OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERS�'_OCSP_REQUEST_EXTENSION_ENCODE_HANDLERS�_encode_asn1_int_gc�_encode_asn1_str_gc�_encode_name_gc�_txt2obj_gc��_HashContext��_HMACContext)�_OCSPRequest�
_OCSPResponse)�_POLY1305_KEY_SIZE�_Poly1305Context)�_RSAPrivateKey�
_RSAPublicKey)�_X25519PrivateKey�_X25519PublicKey)�_X448PrivateKey�_X448PublicKey)�_Certificate�_CertificateRevocationList�_CertificateSigningRequest�_RevokedCertificate)�binding)�hashes�
serialization)�dh�dsa�ec�ed25519�ed448�rsa)�MGF1�OAEP�PKCS1v15�PSS)	�AES�ARC4�Blowfish�CAST5�Camellia�ChaCha20�IDEA�SEED�	TripleDES)�CBC�CFB�CFB8�CTR�ECB�GCM�OFB�XTS)�scrypt)�pkcs7�ssh)�ocsp�
_MemoryBIO�bio�char_ptrc@seZdZdS)�_RC2N)�__name__�
__module__�__qualname__�rxrx�N/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/backend.pyrt�srtc
@sjeZdZdZdZhd�ZeefZe	j
e	je	je	j
e	je	je	je	je	je	je	je	je	jf
ZdZdZdd>ZdZde>Zdd�Z�d(d
d�Zdd
�Zdd�Z e!j"dd��Z#dd�Z$dd�Z%dd�Z&dd�Z'dd�Z(dd�Z)dd�Z*d d!�Z+d"d#�Z,d$d%�Z-d&d'�Z.d(d)�Z/d*d+�Z0d,d-�Z1d.d/�Z2d0d1�Z3d2d3�Z4d4d5�Z5d6d7�Z6d8d9�Z7d:d;�Z8d<d=�Z9�d(d>d?�Z:d@dA�Z;dBdC�Z<dDdE�Z=dFdG�Z>dHdI�Z?dJdK�Z@dLdM�ZAdNdO�ZBdPdQ�ZCdRdS�ZDdTdU�ZEdVdW�ZFdXdY�ZGdZd[�ZHd\d]�ZId^d_�ZJd`da�ZKdbdc�ZLddde�ZMdfdg�ZNdhdi�ZOdjdk�ZPdldm�ZQdndo�ZRdpdq�ZSdrds�ZTdtdu�ZUdvdw�ZVdxdy�ZWdzd{�ZXd|d}�ZYd~d�ZZd�d��Z[d�d��Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�d��Zcd�d��Zdd�d��Zed�d��Zfd�d��Zgd�d��Zhd�d��Zid�d��Zjd�d��Zkd�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpd�d��Zqd�d��Zrd�d��Zsd�d��Ztd�d��Zud�d��Zvd�d��Zwd�d��Zxd�d��Zyd�d��Zzd�d��Z{d�dÄZ|d�dńZ}d�dDŽZ~e"d�dɄ�Zd�d˄Z�d�d̈́Z�d�dτZ�d�dфZ�d�dӄZ�d�dՄZ�d�dׄZ�d�dلZ�d�dۄZ�d�d݄Z�d�d߄Z�d�d�Z�d�d�Z�d�d�Z��d(d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d	�Z��d
�d�Z��d�d
�Z��d�d�Z��d�d�Z�e!j"�d�d��Z��d�d�Z�e!j"�d�d��Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d �d!�Z��d"�d#�Z��d$�d%�Z��d&�d'�Z�d	S()�Backendz)
    OpenSSL API binding interfaces.
    �openssl>�aes-128-ccm�aes-128-gcm�aes-192-ccm�aes-192-gcm�aes-256-ccm�aes-256-gcm�i�cCs�t��|_|jj|_|jj|_|��|_i|_	|�
�|��|��|jr1|jj
r1t�dt�n|��|jjg|_|jjrI|j�|jj�dSdS)Nz<OpenSSL FIPS mode is enabled. Can't enable DRBG fork safety.)rO�Binding�_binding�ffi�_ffi�lib�_lib�_is_fips_enabled�
_fips_enabled�_cipher_registry�_register_default_ciphers�_register_x509_ext_parsers�_register_x509_encoders�"CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE�warnings�warn�UserWarning�activate_osrandom_engine�EVP_PKEY_DH�	_dh_types�Cryptography_HAS_EVP_PKEY_DHX�append�EVP_PKEY_DHX��selfrxrxry�__init__�s$



��zBackend.__init__NcCstj|j||d�S)N)�errors)rO�_openssl_assertr�)r��okr�rxrxry�openssl_assert�szBackend.openssl_assertcCs2t|jddd��}|�}|dkr|j��t|�S)N�	FIPS_modecS�dS�Nrrxrxrxrxry�<lambda>�sz*Backend._is_fips_enabled.<locals>.<lambda>r)�getattrr��ERR_clear_error�bool)r��	fips_mode�moderxrxryr��s

zBackend._is_fips_enabledcCsn|jjr3|j��}||jjkr5|j�|�|j�|jj�}|�|dk�|j�|�}|�|dk�dSdSdS�Nr�)	r�r��ENGINE_get_default_RANDr�r�ENGINE_unregister_RAND�RAND_set_rand_methodr��
ENGINE_finish�r��e�resrxrxry�activate_builtin_random�s
�zBackend.activate_builtin_randomc
cs��|j�|jj�}|�||jjk�|j�|�}|�|dk�z |VW|j�|�}|�|dk�|j�|�}|�|dk�dS|j�|�}|�|dk�|j�|�}|�|dk�wr�)	r��ENGINE_by_id�Cryptography_osrandom_engine_idr�r�r�ENGINE_init�ENGINE_freer�r�rxrxry�_get_osurandom_engine	s��zBackend._get_osurandom_enginecCsx|jjr:|��|���}|j�|�}|�|dk�Wd�n1s$wY|j�|jj�}|�|dk�dSdSr�)	r�r�r�r��ENGINE_set_default_RANDr�r�r�rr�rxrxryr�s
��z Backend.activate_osrandom_enginec	Cst|j�dd�}|���}|j�|dt|�||jjd�}|�|dk�Wd�n1s,wY|j�|��	d�S)N�char[]�@sget_implementationr�ascii)
r��newr�r��ENGINE_ctrl_cmd�lenrr��string�decode)r��bufr�r�rxrxry�osrandom_engine_implementation)s
��z&Backend.osrandom_engine_implementationcCs|j�|j�|jj���d�S)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�)r�r�r��OpenSSL_version�OPENSSL_VERSIONr�r�rxrxry�openssl_version_text2s
��zBackend.openssl_version_textcCs
|j��S�N)r��OpenSSL_version_numr�rxrxry�openssl_version_number=�
zBackend.openssl_version_numbercCst|||�Sr�r?)r��key�	algorithmrxrxry�create_hmac_ctx@�zBackend.create_hmac_ctxcCsL|jdks
|jdkrd�|j|jd��d�}n|j�d�}|j�|�}|S)N�blake2b�blake2sz{}{}�r�)�name�format�digest_size�encoder��EVP_get_digestbyname)r�r��alg�evp_mdrxrxry�_evp_md_from_algorithmCs��zBackend._evp_md_from_algorithmcCs |�|�}|�||jjk�|Sr�)r�r�r�r�r�r�r�rxrxry�_evp_md_non_null_from_algorithmNs
z'Backend._evp_md_non_null_from_algorithmcCs,|jrt||j�sdS|�|�}||jjkS�NF)r��
isinstance�_fips_hashesr�r�rr�rxrxry�hash_supportedSs
zBackend.hash_supportedcC�
|�|�Sr��r��r�r�rxrxry�hmac_supportedZr�zBackend.hmac_supportedcC�
t||�Sr�r=r�rxrxry�create_hash_ctx]r�zBackend.create_hash_ctxcCs^|jrt||j�sdSz
|jt|�t|�f}Wn
ty"YdSw||||�}|jj|kSr�)r�r��
_fips_ciphersr��type�KeyErrorr�r)r��cipherr��adapter�
evp_cipherrxrxry�cipher_supported`s�zBackend.cipher_supportedcCs0||f|jvrtd�||���||j||f<dS)Nz"Duplicate registration for: {} {}.)r��
ValueErrorr�)r��
cipher_cls�mode_clsr�rxrxry�register_cipher_adapterjs��zBackend.register_cipher_adaptercCsVtttttttfD]}|�t|t	d��q	tttttfD]}|�t
|t	d��qttttfD]}|�t|t	d��q.|�ttt	d��ttttfD]}|�t|t	d��qIttttfD]}|�t
|t	d��q[t�ttgttttg�D]
\}}|�||t	d��qs|�ttd�t	d��|�ttd�t	d��|�ttd�t	d	��|�ttt�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}�rc4�rc2�chacha20)rerhrirkrfrgrjr�r\�GetCipherByNamer`rdr^rc�	itertools�productr_rbr]r�rtrarl�_get_xts_cipher)r�r�r�rxrxryr�ssT��
�
�
�
�
���z!Backend._register_default_cipherscCs�t��}t��}|jjr|�t�|�t�t||jj	|jj
|d�|_t||jj|jj
|d�|_t||jj|jjtd�|_t||jj|jjtd�|_t||jj|jjtd�|_t||jj|jjtd�|_t||jj|jj|d�|_ dS)N)�	ext_count�get_ext�handlers)!r�copyr$r��Cryptography_HAS_SCT�updater r#r%�X509_get_ext_count�X509_get_ext�_certificate_extension_parser�sk_X509_EXTENSION_num�sk_X509_EXTENSION_value�_csr_extension_parser�X509_REVOKED_get_ext_count�X509_REVOKED_get_ext�_revoked_cert_extension_parser�X509_CRL_get_ext_count�X509_CRL_get_extr�_crl_extension_parser�OCSP_REQUEST_get_ext_count�OCSP_REQUEST_get_extr"�_ocsp_req_ext_parser�OCSP_BASICRESP_get_ext_count�OCSP_BASICRESP_get_extr!�_ocsp_basicresp_ext_parser�OCSP_SINGLERESP_get_ext_count�OCSP_SINGLERESP_get_ext�_ocsp_singleresp_ext_parser)r��ext_handlers�singleresp_handlersrxrxryr��s^

�������z"Backend._register_x509_ext_parserscCs6t��|_t��|_t��|_t��|_t	��|_
dSr�)r6r��_extension_encode_handlersr5�_crl_extension_encode_handlersr4�$_crl_entry_extension_encode_handlersr8�'_ocsp_request_extension_encode_handlersr7�)_ocsp_basicresp_extension_encode_handlersr�rxrxryr��s
����zBackend._register_x509_encoderscC�t|||tj�Sr�)r�_ENCRYPT�r�r�r�rxrxry�create_symmetric_encryption_ctx��z'Backend.create_symmetric_encryption_ctxcCrr�)r�_DECRYPTrrxrxry�create_symmetric_decryption_ctx�rz'Backend.create_symmetric_decryption_ctxcCr�r�)r�r�rxrxry�pbkdf2_hmac_supported�r�zBackend.pbkdf2_hmac_supportedc

Csh|j�d|�}|�|�}|j�|�}|j�|t|�|t|�||||�}	|�|	dk�|j�|�dd�S)N�unsigned char[]r�)	r�r�r��from_bufferr��PKCS5_PBKDF2_HMACr�r��buffer)
r�r��length�salt�
iterations�key_materialr�r��key_material_ptrr�rxrxry�derive_pbkdf2_hmac�s
�
zBackend.derive_pbkdf2_hmaccC�t�|j�Sr�)rO�_consume_errorsr�r�rxrxryr,r�zBackend._consume_errorscCr+r�)rO�_consume_errors_with_textr�r�rxrxryr-r�z!Backend._consume_errors_with_textcCsx||jjksJ�|j�|�}|j�d|�}|j�||�}|�|dk�t�|j�	|�d|�d�}|j�
|�r:|}|S)Nr!r�big)r�rr��BN_num_bytesr��	BN_bn2binr��int�
from_bytesr$�BN_is_negative)r��bn�bn_num_bytes�bin_ptr�bin_len�valrxrxry�
_bn_to_intszBackend._bn_to_intcCsn|dus||jjksJ�|dur|jj}|�t|��dd�d�}|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 @r�r.)	r�r�to_bytesr1�
bit_lengthr��	BN_bin2bnr�r�)r��numr4�binary�bn_ptrrxrxry�
_int_to_bnszBackend._int_to_bncCs�t�||�|j��}|�||jjk�|j�||jj�}|�	|�}|j�||jj
�}|j�||||jj�}|�|dk�|�|�}t
|||�Sr�)rW�_verify_rsa_parametersr��RSA_newr�r�r�gc�RSA_freer@�BN_free�RSA_generate_key_ex�_rsa_cdata_to_evp_pkeyrE)r��public_exponent�key_size�	rsa_cdatar4r��evp_pkeyrxrxry�generate_rsa_private_key$s

�
z Backend.generate_rsa_private_keycCs|dko
|d@dko
|dkS)N�r�rirx)r�rHrIrxrxry�!generate_rsa_parameters_supported6s

��z)Backend.generate_rsa_parameters_supportedc

Cs2t�|j|j|j|j|j|j|jj	|jj
�|j��}|�
||jjk�|j�||jj�}|�|j�}|�|j�}|�|j�}|�|j�}|�|j�}|�|j�}|�|jj	�}	|�|jj
�}
|j�|||�}|�
|dk�|j�||
|	|�}|�
|dk�|j�||||�}|�
|dk�|�|�}t|||�Sr�)rW�_check_private_key_components�p�q�d�dmp1�dmq1�iqmp�public_numbersr��nr�rBr�r�rrCrDr@�RSA_set0_factors�RSA_set0_key�RSA_set0_crt_paramsrGrE)
r��numbersrJrPrQrRrSrTrUr�rWr�rKrxrxry�load_rsa_private_numbers=s:�


z Backend.load_rsa_private_numberscCs�t�|j|j�|j��}|�||jjk�|j�	||jj
�}|�|j�}|�|j�}|j�||||jj�}|�|dk�|�
|�}t|||�Sr�)rW�_check_public_key_componentsr�rWr�rBr�r�rrCrDr@rYrGrF)r�r[rJr�rWr�rKrxrxry�load_rsa_public_numbers]s

zBackend.load_rsa_public_numberscCs2|j��}|�||jjk�|j�||jj�}|Sr�)r��EVP_PKEY_newr�r�rrC�
EVP_PKEY_free�r�rKrxrxry�_create_evp_pkey_gcjs
zBackend._create_evp_pkey_gccC�(|��}|j�||�}|�|dk�|Sr�)rbr��EVP_PKEY_set1_RSAr�)r�rJrKr�rxrxryrGp�zBackend._rsa_cdata_to_evp_pkeycCsH|j�|�}|j�|t|��}|�||jjk�t|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.
        )
r�r"r��BIO_new_mem_bufr�r�rrqrC�BIO_free)r��data�data_ptrrrrxrxry�
_bytes_to_biovszBackend._bytes_to_biocCsP|j��}|�||jjk�|j�|�}|�||jjk�|j�||jj�}|S)z.
        Creates an empty memory BIO.
        )r��	BIO_s_memr�r�r�BIO_newrCrg)r��
bio_methodrrrxrxry�_create_mem_bio_gc�s
zBackend._create_mem_bio_gccCs\|j�d�}|j�||�}|�|dk�|�|d|jjk�|j�|d|�dd�}|S)zE
        Reads a memory BIO. This only works on memory BIOs.
        zchar **rN)r�r�r��BIO_get_mem_datar�rr$)r�rrr��buf_len�bio_datarxrxry�
_read_mem_bio�szBackend._read_mem_biocC�|j�|�}||jjkr*|j�|�}|�||jjk�|j�||jj�}t	|||�S||jj
krN|j�|�}|�||jjk�|j�||jj�}t
|||�S||jjkrr|j�|�}|�||jjk�|j�||jj�}t|||�S||jvr�|j�|�}|�||jjk�|j�||jj�}t|||�S|t|jdd�kr�t||�S|t|jdd�kr�t||�S|t|jdd�kr�t||�S|t|jdd�kr�t||�Std��)zd
        Return the appropriate type of PrivateKey given an evp_pkey cdata
        pointer.
        �EVP_PKEY_ED25519N�
EVP_PKEY_X448�EVP_PKEY_X25519�EVP_PKEY_ED448�Unsupported key type.)r��EVP_PKEY_id�EVP_PKEY_RSA�EVP_PKEY_get1_RSAr�r�rrCrDrE�EVP_PKEY_DSA�EVP_PKEY_get1_DSA�DSA_freer+�EVP_PKEY_EC�EVP_PKEY_get1_EC_KEY�EC_KEY_freer-r��EVP_PKEY_get1_DH�DH_freer'r�r/rIrGr2r�r�rK�key_typerJ�	dsa_cdata�ec_cdata�dh_cdatarxrxry�_evp_pkey_to_private_key��<




z Backend._evp_pkey_to_private_keycCrs)zc
        Return the appropriate type of PublicKey given an evp_pkey cdata
        pointer.
        rtNrurvrwrx)r�ryrzr{r�r�rrCrDrFr|r}r~r,rr�r�r.r�r�r�r(r�r0rJrHr3rr�rxrxry�_evp_pkey_to_public_key�r�zBackend._evp_pkey_to_public_keycCs2|jjrt|tjtjtjtjtjf�St|tj�Sr�)	r��Cryptography_HAS_RSA_OAEP_MDr�rP�SHA1�SHA224�SHA256�SHA384�SHA512r�rxrxry�_oaep_hash_supported�s��zBackend._oaep_hash_supportedcCs�t|t�rdSt|t�rt|jt�r|�|jj�St|t�rCt|jt�rC|�|jj�oB|�|j�oB|j	dupBt
|j	�dkpB|jjdkSdS)NTrr�F)
r�rZr[�_mgfrXr��
_algorithmrYr��_labelr�r��Cryptography_HAS_RSA_OAEP_LABEL)r��paddingrxrxry�rsa_padding_supported�s

�
�	zBackend.rsa_padding_supportedc	Cs~|dvrtd��|j��}|�||jjk�|j�||jj�}|j�|||jjd|jj|jj|jj�}|�|dk�t	||�S)N)ir�iiz0Key size must be 1024, 2048, 3072, or 4096 bits.rr�)
r�r��DSA_newr�r�rrCr~�DSA_generate_parameters_exr*)r�rI�ctxr�rxrxry�generate_dsa_parameterss$�
�

zBackend.generate_dsa_parameterscCsT|j�|j�}|�||jjk�|j�||jj�}|j�|�|�	|�}t
|||�Sr�)r��
DSAparams_dup�
_dsa_cdatar�r�rrCr~�DSA_generate_key�_dsa_cdata_to_evp_pkeyr+)r��
parametersr�rKrxrxry�generate_dsa_private_key's
z Backend.generate_dsa_private_keycC�|�|�}|�|�Sr�)r�r�)r�rIr�rxrxry�'generate_dsa_private_key_and_parameters0�

z/Backend.generate_dsa_private_key_and_parameterscCsB|j�||||�}|�|dk�|j�|||�}|�|dk�dSr�)r��DSA_set0_pqgr��DSA_set0_key)r�r�rPrQ�g�pub_key�priv_keyr�rxrxry�_dsa_cdata_set_values4szBackend._dsa_cdata_set_valuesc
Cs�t�|�|jj}|j��}|�||jjk�|j�	||jj
�}|�|j�}|�|j
�}|�|j�}|�|jj�}|�|j�}|�||||||�|�|�}	t|||	�Sr�)rS�_check_dsa_private_numbersrV�parameter_numbersr�r�r�r�rrCr~r@rPrQr��y�xr�r�r+)
r�r[r�r�rPrQr�r�r�rKrxrxry�load_dsa_private_numbers:s


z Backend.load_dsa_private_numbersc	Cs�t�|j�|j��}|�||jjk�|j�||jj	�}|�
|jj�}|�
|jj�}|�
|jj
�}|�
|j�}|jj}|�||||||�|�|�}t|||�Sr�)rS�_check_dsa_parametersr�r�r�r�r�rrCr~r@rPrQr�r�r�r�r,)	r�r[r�rPrQr�r�r�rKrxrxry�load_dsa_public_numbersMs

zBackend.load_dsa_public_numberscCs�t�|�|j��}|�||jjk�|j�||jj�}|�	|j
�}|�	|j�}|�	|j�}|j�
||||�}|�|dk�t||�Sr�)rSr�r�r�r�r�rrCr~r@rPrQr�r�r*)r�r[r�rPrQr�r�rxrxry�load_dsa_parameter_numbers^s


z"Backend.load_dsa_parameter_numberscCrcr�)rbr��EVP_PKEY_set1_DSAr�)r�r�rKr�rxrxryr�lrezBackend._dsa_cdata_to_evp_pkeycCr�r�r�r�rxrxry�dsa_hash_supportedrr�zBackend.dsa_hash_supportedcCr�)NTrx)r�rPrQr�rxrxry�dsa_parameters_supportedusz Backend.dsa_parameters_supportedcCs|�|td|j��S)N�)r�re�
block_sizer�rxrxry�cmac_algorithm_supportedxs�z Backend.cmac_algorithm_supportedcCr�r�rr�rxrxry�create_cmac_ctx}r�zBackend.create_cmac_ctxcCs�t|tjtjf�r|durtd��dSt|tjtj	t
jf�s"td��t|t
j�s,td��t|t
j�r<t|tj�s>td��dSdS)Nz8algorithm must be None when signing via ed25519 or ed448z;Key must be an rsa, dsa, ec, ed25519, or ed448 private key.z.Algorithm must be a registered hash algorithm.z2MD5 hash algorithm is only supported with RSA keys)r�rU�Ed25519PrivateKeyrV�Ed448PrivateKeyr�rW�
RSAPrivateKeyrS�
DSAPrivateKeyrT�EllipticCurvePrivateKey�	TypeErrorrP�
HashAlgorithm�MD5�r��private_keyr�rxrxry�_x509_check_signature_params�s0��������z$Backend._x509_check_signature_paramsc
	s�t|tj�s
td����||���||�}�j��}��|�j	j
k��j	�|�jj�}�j�
|tjjj�}��|dk��j�|t�|j��}��|dk�|��}�j�||j�}��|dk��j��}��|�j	j
k��j	�|�fdd��}�j|j�j|�jjdd��j�||�}��|dk�|jD]!\}	}
t�|	j�}�j� ||tj!j"j#j|
t$|
��}��|dk�q��j�%||j|�}|dkrӈ�&�}t'd|��t(�|�S)	N�Builder type mismatch.r�cs�j�|�j��jjd��S)N�X509_EXTENSION_free)r��sk_X509_EXTENSION_pop_freer��	addressof�
_original_lib)r�r�rxryr��s��z)Backend.create_x509_csr.<locals>.<lambda>F��
extensionsr��x509_obj�add_funcrCr�Signing failed))r�r� CertificateSigningRequestBuilderr�r��_evp_md_x509_null_if_eddsar��X509_REQ_newr�r�rrC�
X509_REQ_free�X509_REQ_set_version�Version�v1�value�X509_REQ_set_subject_namer;�
_subject_name�
public_key�X509_REQ_set_pubkey�	_evp_pkey�sk_X509_EXTENSION_new_null�_create_x509_extensions�_extensionsr�sk_X509_EXTENSION_insert�X509_REQ_add_extensions�_attributesr<�
dotted_string�X509_REQ_add1_attr_by_OBJr��	_ASN1Type�
UTF8Stringr��
X509_REQ_signr-r�rM)
r��builderr�r�r��x509_reqr�r��sk_extension�attr_oid�attr_val�objr�rxr�ry�create_x509_csr�s\
�

��
�

zBackend.create_x509_csrc	Csvt|tj�s
td��|�||�|�||�}|j��}|j�	||jj
�}|j�||jj
�}|�|dk�|j�|t||j��}|�|dk�|j�||jj�}|�|dk�t||j�}|j�||�}|�|dk�|�|j�|�|j�|�|j�|�|j�|j|j|j||jj dd�|j�!|t||j"��}|�|dk�|j�#||j|�}|dkr�|�$�}t%d|��t&||�S�Nr�r�Tr�rr�)'r�r�CertificateBuilderr�r�r�r��X509_newr�rC�	X509_free�X509_set_version�_versionr�r��X509_set_subject_namer;r��X509_set_pubkey�_public_keyr�r9�_serial_number�X509_set_serialNumber�_set_asn1_time�X509_getm_notBefore�_not_valid_before�X509_getm_notAfter�_not_valid_afterr�r�r�X509_add_ext�X509_set_issuer_name�_issuer_name�	X509_signr-r�rK)	r�r�r�r�r��	x509_certr��
serial_numberr�rxrxry�create_x509_certificate�sR
�����	�

zBackend.create_x509_certificatecCs$t|tjtjf�r
|jjS|�|�Sr�)r�rUr�rVr�r�rr�r�rxrxryr�"s
�
z"Backend._evp_md_x509_null_if_eddsacCsL|jdkr|�d��d�}n|�d��d�}|j�||�}|�|dk�dS)Niz
%Y%m%d%H%M%SZr�z
%y%m%d%H%M%SZr�)�year�strftimer�r��ASN1_TIME_set_stringr�)r��	asn1_time�time�asn1_strr�rxrxryr�+s

zBackend._set_asn1_timecCs>|j��}|�||jjk�|j�||jj�}|�||�|Sr�)r��
ASN1_TIME_newr�r�rrC�ASN1_TIME_freer�)r�r
r	rxrxry�_create_asn1_time3s

zBackend._create_asn1_timecCsrt|tj�s
td��|�||�|�||�}|j��}|j�	||jj
�}|j�|d�}|�|dk�|j�
|t||j��}|�|dk�|�|j�}|j�||�}|�|dk�|�|j�}|j�||�}|�|dk�|j|j|j||jjdd�|jD] }	|j�|	j�}
|�|
|jjk�|j�||
�}|�|dk�q}|j�||j|�}|dkr�|� �}t!d|��t"||�Sr�)#r�r� CertificateRevocationListBuilderr�r�r�r��X509_CRL_newr�rC�
X509_CRL_free�X509_CRL_set_versionr��X509_CRL_set_issuer_namer;rr�_last_update�X509_CRL_set1_lastUpdate�_next_update�X509_CRL_set1_nextUpdater�r�r�X509_CRL_add_ext�_revoked_certificates�X509_REVOKED_dup�
_x509_revokedr�X509_CRL_add0_revoked�
X509_CRL_signr�r-r�rL)r�r�r�r�r��x509_crlr��last_update�next_update�revoked_cert�revokedr�rxrxry�create_x509_crl:sF
��
	

zBackend.create_x509_crlc
Csdt|�D]+\}}|�||�}|�||jjk�|r"|j�||jj�}||||�}	|�|	dk�qdSr�)�	enumerate�_create_x509_extensionr�r�rrCr�r�)
r�r�r�r�r�rC�i�	extension�x509_extensionr�rxrxryr�rs��zBackend._create_x509_extensionscCs2t||jj�}|j�|jj||jrd|�Sd|�S)Nr�r)r<�oidr�r��X509_EXTENSION_create_by_OBJr�r�critical)r�r'r�r�rxrxry�_create_raw_x509_extension�s��z"Backend._create_raw_x509_extensioncCst|jtj�rt||jj�}|�||�St|jtj�r4ttgdd�|jD��R�}t||�}|�||�St|jtj	�rHt|tt
��}|�||�Sz||j}Wnty^t
d�|j���w|||j�}|j�|jj�d��}|�||jjk�|j�||jr�d|�Sd|�S)NcSsg|]
}ttt|j���qSrx)r
rrr�)�.0r�rxrxry�
<listcomp>�s��z2Backend._create_x509_extension.<locals>.<listcomp>zExtension not supported: {}r�r�r)r�r�r�UnrecognizedExtensionr:r,�
TLSFeaturer
r	�
PrecertPoisonrr)r��NotImplementedErrorr�r��OBJ_txt2nidr�r�r��	NID_undef�X509V3_EXT_i2dr+)r�r�r'r��asn1r��
ext_struct�nidrxrxryr%�sB���

�����zBackend._create_x509_extensioncCs�t|tj�s
td��|j��}|�||jjk�|j�	||jj
�}t||j�}|j�
||�}|�|dk�|�|j�}|j�||�}|�|dk�|j|j|j||jjdd�t|d|�S)Nr�r�Tr�)r�r�RevokedCertificateBuilderr�r��X509_REVOKED_newr�r�rrC�X509_REVOKED_freer9r��X509_REVOKED_set_serialNumberr�_revocation_date�X509_REVOKED_set_revocationDater�r�r�X509_REVOKED_add_extrN)r�r��x509_revokedrr��rev_daterxrxry�create_x509_revoked_certificate�s*
��z'Backend.create_x509_revoked_certificatecCs|�|jj|j||�Sr�)�	_load_keyr��PEM_read_bio_PrivateKeyr�)r�rh�passwordrxrxry�load_pem_private_key�s�zBackend.load_pem_private_keycCs�|�|�}|j�|j|jj|jj|jj�}||jjkr)|j�||jj�}|�|�S|�	�|j�
|j�}|�|dk�|j�|j|jj|jj|jj�}||jjkre|j�||jj
�}|�|�}t|||�S|��dSr�)rjr��PEM_read_bio_PUBKEYrrr�rrCr`r�r,�	BIO_resetr��PEM_read_bio_RSAPublicKeyrDrGrF�_handle_key_loading_error�r�rh�mem_biorKr�rJrxrxry�load_pem_public_key�s$
�
�
zBackend.load_pem_public_keycCs^|�|�}|j�|j|jj|jj|jj�}||jjkr)|j�||jj�}t||�S|�	�dSr�)
rjr��PEM_read_bio_DHparamsrrr�rrCr�r&rJ)r�rhrLr�rxrxry�load_pem_parameters�s
�
zBackend.load_pem_parameterscCs:|�|�}|�||�}|r|�|�S|�|jj|j||�Sr�)rj�"_evp_pkey_from_der_traditional_keyr�rCr��d2i_PKCS8PrivateKey_bio)r�rhrErqr�rxrxry�load_der_private_key�s

�zBackend.load_der_private_keycCsZ|j�|j|jj�}||jjkr'|��|j�||jj�}|dur%td��|S|��dS)N�4Password was given but private key is not encrypted.)	r��d2i_PrivateKey_biorrr�rr,rCr`r�)r�rqrEr�rxrxryrPs�z*Backend._evp_pkey_from_der_traditional_keycCs�|�|�}|j�|j|jj�}||jjkr#|j�||jj�}|�|�S|�	�|j�
|j�}|�|dk�|j�|j|jj�}||jjkrY|j�||jj
�}|�|�}t|||�S|��dSr�)rjr��d2i_PUBKEY_biorrr�rrCr`r�r,rHr��d2i_RSAPublicKey_biorDrGrFrJrKrxrxry�load_der_public_keys 


�
zBackend.load_der_public_keycCs�|�|�}|j�|j|jj�}||jjkr#|j�||jj�}t||�S|jj	rW|�
�|j�|j�}|�|dk�|j�
|j|jj�}||jjkrW|j�||jj�}t||�S|��dSr�)rjr��d2i_DHparams_biorrr�rrCr�r&r�r,rHr��Cryptography_d2i_DHxparams_biorJ)r�rhrLr�r�rxrxry�load_der_parameters+s 


�
zBackend.load_der_parameterscC�b|�|�}|j�|j|jj|jj|jj�}||jjkr#|��td��|j�||jj	�}t
||�S)Nz{Unable to load certificate. See https://cryptography.io/en/latest/faq.html#why-can-t-i-import-my-pem-file for more details.)rjr��PEM_read_bio_X509rrr�rr,r�rCr�rK�r�rhrLrrxrxry�load_pem_x509_certificate?�
��
z!Backend.load_pem_x509_certificatecC�V|�|�}|j�|j|jj�}||jjkr|��td��|j�||jj	�}t
||�S)NzUnable to load certificate)rjr��d2i_X509_biorrr�rr,r�rCr�rKr]rxrxry�load_der_x509_certificateO�

z!Backend.load_der_x509_certificatecCr[)NzsUnable to load CRL. See https://cryptography.io/en/latest/faq.html#why-can-t-i-import-my-pem-file for more details.)rjr��PEM_read_bio_X509_CRLrrr�rr,r�rCrrL�r�rhrLrrxrxry�load_pem_x509_crlYr_zBackend.load_pem_x509_crlcCr`)NzUnable to load CRL)rjr��d2i_X509_CRL_biorrr�rr,r�rCrrLrerxrxry�load_der_x509_crlirczBackend.load_der_x509_crlcCr[)NzwUnable to load request. See https://cryptography.io/en/latest/faq.html#why-can-t-i-import-my-pem-file for more details.)rjr��PEM_read_bio_X509_REQrrr�rr,r�rCr�rM�r�rhrLr�rxrxry�load_pem_x509_csrsr_zBackend.load_pem_x509_csrcCr`)NzUnable to load request)rjr��d2i_X509_REQ_biorrr�rr,r�rCr�rMrjrxrxry�load_der_x509_csr�rczBackend.load_der_x509_csrc	Cs|�|�}|j�d�}|dur#t�d|�|j�|�}||_t|�|_||j	|jj
|j�|jj
d�|�}||jj
kra|jdkr]|��|jdkrLtd��|jdksSJ�td�|jd	���|��|��|j�||jj�}|dur{|jdkr{td
��|dur�|jd	ks�|dus�J�||�S)NzCRYPTOGRAPHY_PASSWORD_DATA *rE�Cryptography_pem_password_cbr���z3Password was not given but private key is encrypted���zAPasswords longer than {} bytes are not supported by this backend.r�rS)rjr�r�r�_check_bytesliker"rEr�r%rrrr�r�r��errorr,r�r�r��maxsizerJrCr`�called)	r��openssl_read_func�convert_funcrhrErL�userdata�password_ptrrKrxrxryrC�sR

��	

������zBackend._load_keycs����}|s
td��|d��jj�jj�s2|d��jj�jj�s2�jjr6|d��jj	�jj
�r6td��t�fdd�|D��rEtd��td��)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$�|]
}|��jj�jj�VqdSr�)�_lib_reason_matchr��ERR_LIB_EVP�'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM)r-rrr�rxry�	<genexpr>�s���
�z4Backend._handle_key_loading_error.<locals>.<genexpr>z!Unsupported public key algorithm.)r,r�ryr�rz�EVP_R_BAD_DECRYPT�ERR_LIB_PKCS12�!PKCS12_R_PKCS12_CIPHERFINAL_ERROR�Cryptography_HAS_PROVIDERS�ERR_LIB_PROV�PROV_R_BAD_DECRYPT�any)r�r�rxr�ryrJ�s:�����	�
����z!Backend._handle_key_loading_errorcCspz|�|�}Wn
ty|jj}Ynw|j�|�}||jjkr'|��dS|�||jjk�|j�	|�dS)NFT)
�_elliptic_curve_to_nidrr�r4�EC_GROUP_new_by_curve_namer�rr,r��
EC_GROUP_free)r��curve�	curve_nid�grouprxrxry�elliptic_curve_supported�s�z Backend.elliptic_curve_supportedcCst|tj�sdS|�|�Sr�)r�rT�ECDSAr�)r��signature_algorithmr�rxrxry�,elliptic_curve_signature_algorithm_supported�s
z4Backend.elliptic_curve_signature_algorithm_supportedcCsX|�|�r"|�|�}|j�|�}|�|dk�|�|�}t|||�Std�|j	�t
j��)z@
        Generate a new private key on the named curve.
        r�z#Backend object does not support {}.)r��_ec_key_new_by_curver��EC_KEY_generate_keyr��_ec_cdata_to_evp_pkeyr-rr�r�r�UNSUPPORTED_ELLIPTIC_CURVE)r�r�r�r�rKrxrxry�#generate_elliptic_curve_private_keys



�z+Backend.generate_elliptic_curve_private_keycCsp|j}|�|j�}|j�|�|j�|jj�}|j�	||�}|�
|dk�|�||j|j
�}|�|�}t|||�Sr�)rVr�r�r�rCr@�
private_valuer��
BN_clear_free�EC_KEY_set_private_keyr��)_ec_key_set_public_key_affine_coordinatesr�r�r�r-)r�r[�publicr�r�r�rKrxrxry�#load_elliptic_curve_private_numberss�
�
z+Backend.load_elliptic_curve_private_numberscCs4|�|j�}|�||j|j�}|�|�}t|||�Sr�)r�r�r�r�r�r�r.)r�r[r�rKrxrxry�"load_elliptic_curve_public_numbers.s
�
z*Backend.load_elliptic_curve_public_numbersc	Cs�|�|�}|j�|�}|�||jjk�|j�|�}|�||jjk�|j�||jj�}|�	�� }|j�
|||t|�|�}|dkrI|��t
d��Wd�n1sSwY|j�||�}|�|dk�|�|�}t|||�S)Nr�z(Invalid public bytes for the given curve)r�r��EC_KEY_get0_groupr�r�r�EC_POINT_newrC�
EC_POINT_free�_tmp_bn_ctx�EC_POINT_oct2pointr�r,r��EC_KEY_set_public_keyr�r.)	r�r��point_bytesr�r��point�bn_ctxr�rKrxrxry� load_elliptic_curve_public_bytes7s&

���
z(Backend.load_elliptic_curve_public_bytesc	CsX|�|�}|�|�\}}|j�|�}|�||jjk�|j�||jj�}|�	|�}|j�||jj
�}|���9}|j�||||jj|jj|�}	|�|	dk�|j�
|�}
|j�
|�}||||
||�}	|�|	dk�Wd�n1srwY|j�||�}	|�|	dk�|�	|�}|j�||jj
�}|j�||�}	|�|	dk�|�|�}
t|||
�Sr�)r�� _ec_key_determine_group_get_funcr�r�r�r�rrCr�r@r�r��EC_POINT_mul�
BN_CTX_getr�r�r�r-)r�r�r�r��get_funcr�r�r�r�r��bn_x�bn_y�privaterKrxrxry�!derive_elliptic_curve_private_keyKs2


��

z)Backend.derive_elliptic_curve_private_keycCr�r�)r��_ec_key_new_by_curve_nid)r�r�r�rxrxryr�nr�zBackend._ec_key_new_by_curvecCs0|j�|�}|�||jjk�|j�||jj�Sr�)r��EC_KEY_new_by_curve_namer�r�rrCr�)r�r�r�rxrxryr�rsz Backend._ec_key_new_by_curve_nidcCr`)NzUnable to load OCSP request)rjr��d2i_OCSP_REQUEST_biorrr�rr,r�rC�OCSP_REQUEST_freerA)r�rhrL�requestrxrxry�load_der_ocsp_requestwrczBackend.load_der_ocsp_requestcCr`)NzUnable to load OCSP response)rjr��d2i_OCSP_RESPONSE_biorrr�rr,r�rC�OCSP_RESPONSE_freerB)r�rhrL�responserxrxry�load_der_ocsp_response�rczBackend.load_der_ocsp_responsec	Cs�|j��}|�||jjk�|j�||jj�}|j\}}}|�|�}|j�	||j
|j
�}|�||jjk�|j�||�}|�||jjk�|j|j
|j||jjdd�t||�S)NTr�)r��OCSP_REQUEST_newr�r�rrCr��_requestr��OCSP_cert_to_id�_x509�OCSP_request_add0_idr�r�r�OCSP_REQUEST_add_extrA)	r�r��ocsp_req�cert�issuerr�r��certid�onereqrxrxry�create_ocsp_request�s"

�
zBackend.create_ocsp_requestc	Cs�|�||�|j��}|�||jjk�|j�||jj�}|�|j	j
�}|j�||j	jj
|j	jj
�}|�||jjk�|j�||jj�}|j	jdurMd}nt|j	j}|j	jdur^|jj}n|�|j	j�}|jj}	|j	jdurv|�|j	j�}	|�|j	j�}
|j�|||j	jj|||
|	�}|�||jjk�|�||�}|j\}}
|jj}|
tjjur�||jjO}|j dur�|j D]}|j�!||j
�}|�|dk�q�|j"|j#|j$||jj%dd�|j�&||j
|j'||jj|�}|dkr�|�(�}t)d|��|S)Nror�Tr�zAError while signing. responder_cert must be signed by private_key)*r�r��OCSP_BASICRESP_newr�r�rrC�OCSP_BASICRESP_freer��	_responser�r��_certr��_issuer�OCSP_CERTID_free�_revocation_reasonr�_revocation_timerr�_this_update�OCSP_basic_add1_status�_cert_statusr�r��
_responder_id�OCSP_NOCERTSrp�OCSPResponderEncoding�HASH�OCSP_RESPID_KEY�_certs�OCSP_basic_add1_certr�r�r�OCSP_BASICRESP_add_ext�OCSP_basic_signr�r-r�)r�r�r�r��basicr�r��reason�rev_timer �this_updater��responder_cert�responder_encoding�flagsr�r�rxrxry�_create_ocsp_basic_response�s�
���
���	


���z#Backend._create_ocsp_basic_responsecCsb|tjjur|�|||�}n|jj}|j�|j|�}|�	||jjk�|j�
||jj�}t||�Sr�)
rp�OCSPResponseStatus�
SUCCESSFULr�r�rr��OCSP_response_creater�r�rCr�rB)r��response_statusr�r�r�r��	ocsp_resprxrxry�create_ocsp_response�s��
zBackend.create_ocsp_responsecCs|�|�o
t|tj�Sr�)r�r�rT�ECDH)r�r�r�rxrxry�+elliptic_curve_exchange_algorithm_supporteds�z3Backend.elliptic_curve_exchange_algorithm_supportedcCrcr�)rbr��EVP_PKEY_set1_EC_KEYr�)r�r�rKr�rxrxryr�	rezBackend._ec_cdata_to_evp_pkeycCsNddd�}|�|j|j�}|j�|���}||jjkr%td�|j�tj	��|S)z/
        Get the NID for a curve name.
        �
prime192v1�
prime256v1)�	secp192r1�	secp256r1z${} is not a supported elliptic curve)
�getr�r��
OBJ_sn2nidr�r4rr�rr�)r�r��
curve_aliases�
curve_namer�rxrxryr�s

�zBackend._elliptic_curve_to_nidc	csd�|j��}|�||jjk�|j�||jj�}|j�|�z|VW|j�|�dS|j�|�wr�)	r��
BN_CTX_newr�r�rrC�BN_CTX_free�BN_CTX_start�
BN_CTX_end)r�r�rxrxryr� s�
zBackend._tmp_bn_ctxcCs�|�||jjk�|j�d�}|�||jjk�|j�|�}|�||jjk�|j�|�}|�||jjk�|j�|�}|�||jjk�||krR|jj	rR|jj
}n|jj}|sZJ�||fS)zu
        Given an EC_KEY determine the group and what function is required to
        get point coordinates.
        scharacteristic-two-field)r�r�rr�r�r4r��EC_GROUP_method_of�EC_METHOD_get_field_type�Cryptography_HAS_EC2M�$EC_POINT_get_affine_coordinates_GF2m�#EC_POINT_get_affine_coordinates_GFp)r�r��
nid_two_fieldr��methodr8r�rxrxryr�+s
z(Backend._ec_key_determine_group_get_funccCst|dks|dkrtd��|j�|�|�|jj�}|j�|�|�|jj�}|j�|||�}|dkr8|��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.r�zInvalid EC key.)r�r�rCr@r�rE�(EC_KEY_set_public_key_affine_coordinatesr,)r�r�r�r�r�rxrxryr�Gs�z1Backend._ec_key_set_public_key_affine_coordinatesc
Cst|tj�s
td��t|tj�std��t|tj�std��t|tj�r'd}nt|tj�r;|j}t	|�dkr:t
d��nt
d��|tjjurf|tjjurP|j
j}n|tjjur[|j
j}nt
d��|�|||�S|tjjur�|jryt|tj�syt
d	��|j
�|�}	|tjjur�|	|j
jkr�|j
j}n|	|j
jkr�|j
j}n|	|j
jkr�|j
j}nt
d
��|�|||�S|tjjur�|r�t
d��|	|j
jkr�|j
j}n|	|j
jkr�|j
j}n|	|j
jkr�|j
j}nt
d
��|�||�St
d��|tjju�r|tjjur�t �!||�St
d
��t
d��)N�/encoding must be an item from the Encoding enumz2format must be an item from the PrivateFormat enumzBEncryption algorithm must be a KeySerializationEncryption instance�i�zBPasswords 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 encoding�format is invalid with this key)"r�rQ�Encodingr��
PrivateFormat�KeySerializationEncryption�NoEncryption�BestAvailableEncryptionrEr�r��PKCS8�PEMr��PEM_write_bio_PKCS8PrivateKey�DER�i2d_PKCS8PrivateKey_bio�_private_key_bytes_via_bio�TraditionalOpenSSLr�ryrz�PEM_write_bio_RSAPrivateKeyr|�PEM_write_bio_DSAPrivateKeyr�PEM_write_bio_ECPrivateKey�i2d_RSAPrivateKey_bio�i2d_ECPrivateKey_bio�i2d_DSAPrivateKey_bio�_bio_func_output�OpenSSHro�serialize_ssh_private_key)
r��encodingr��encryption_algorithmr�rK�cdatarE�	write_bior�rxrxry�_private_key_bytes[s�������

���


���


��zBackend._private_key_bytesc	Cs<|s|jj}n|j�d�}|�||||t|�|jj|jj�S)Nsaes-256-cbc)r�rr��EVP_get_cipherbynamerr�)r�rrKrEr�rxrxryr�s
�z"Backend._private_key_bytes_via_biocGs0|��}||g|�R�}|�|dk�|�|�Sr�)rnr�rr)r�r�argsrrr�rxrxryr�s
zBackend._bio_func_outputcCst|tj�s
td��t|tj�std��|tjjur:|tjjur%|jj}n|tjj	ur0|jj
}ntd��|�||�S|tjj
urp|j�|�}||jjkrPtd��|tjjur[|jj}n|tjj	urf|jj}ntd��|�||�S|tjjur�|tjjur�t�|�Std��td��)Nr�z1format 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 encodingr�)r�rQr�r��PublicFormat�SubjectPublicKeyInforr��PEM_write_bio_PUBKEYr�i2d_PUBKEY_bior�r�PKCS1ryrz�PEM_write_bio_RSAPublicKey�i2d_RSAPublicKey_biorro�serialize_ssh_public_key)r�rr�r�rKrrr�rxrxry�_public_key_bytes�s@�

�


�zBackend._public_key_bytescCs�|tjjur
td��|j�d�}|j�||jj||jj�|tjj	ur5|d|jjkr0|jj
}n!|jj}n|tjjurM|d|jjkrH|jj
}n	|jj}ntd��|��}|||�}|�|dk�|�|�S)Nz!OpenSSH encoding is not supportedz	BIGNUM **rr�r�)rQr�rr�r�r�r��DH_get0_pqgrr�PEM_write_bio_DHxparams�PEM_write_bio_DHparamsr�Cryptography_i2d_DHxparams_bio�i2d_DHparams_biornr�rr)r�rr�rrQrrrr�rxrxry�_parameter_bytess"





zBackend._parameter_bytescCs�|tjkr
td�tj���|dvrtd��|j��}|�||jjk�|j�	||jj
�}|j�||||jj�}|�|dk�t||�S)Nz$DH key_size must be at least {} bits)��zDH generator must be 2 or 5r�)
rR�_MIN_MODULUS_SIZEr�r�r��DH_newr�r�rrCr��DH_generate_parameters_exr&)r��	generatorrI�dh_param_cdatar�rxrxry�generate_dh_parameters$s 
��
�
zBackend.generate_dh_parameterscCrcr�)rbr��EVP_PKEY_set1_DHr�)r�r�rKr�rxrxry�_dh_cdata_to_evp_pkey:rezBackend._dh_cdata_to_evp_pkeycCs<t|j|�}|j�|�}|�|dk�|�|�}t|||�Sr�)r)�	_dh_cdatar��DH_generate_keyr�r2r')r�r��dh_key_cdatar�rKrxrxry�generate_dh_private_key@s

zBackend.generate_dh_private_keycCs|�|�||��Sr�)r6r0)r�r.rIrxrxry�&generate_dh_private_key_and_parametersJs
�z.Backend.generate_dh_private_key_and_parameterscCs8|jj}|j��}|�||jjk�|j�||jj�}|�	|j
�}|�	|j�}|jdur3|�	|j�}n|jj}|�	|jj
�}|�	|j�}|j�||||�}	|�|	dk�|j�|||�}	|�|	dk�|j�dd�}
|j�||
�}	|�|	dk�|
ddkr�|jdkr�|
d|jjAdks�td��|�|�}t|||�S)Nr��int[]rr)z.DH private numbers did not pass safety checks.)rVr�r�r,r�r�rrCr�r@rPr�rQr�r��DH_set0_pqg�DH_set0_keyr��Cryptography_DH_check�DH_NOT_SUITABLE_GENERATORr�r2r')r�r[r�r�rPr�rQr�r�r��codesrKrxrxry�load_dh_private_numbersOs4


��
zBackend.load_dh_private_numbersc
Cs�|j��}|�||jjk�|j�||jj�}|j}|�|j	�}|�|j
�}|jdur2|�|j�}n|jj}|�|j�}|j�
||||�}|�|dk�|j�|||jj�}|�|dk�|�|�}	t|||	�Sr�)r�r,r�r�rrCr�r�r@rPr�rQr�r9r:r2r()
r�r[r�r�rPr�rQr�r�rKrxrxry�load_dh_public_numbers}s 


zBackend.load_dh_public_numberscCs�|j��}|�||jjk�|j�||jj�}|�|j�}|�|j	�}|j
dur/|�|j
�}n|jj}|j�||||�}|�|dk�t||�Sr�)
r�r,r�r�rrCr�r@rPr�rQr9r&)r�r[r�rPr�rQr�rxrxry�load_dh_parameter_numbers�s


z!Backend.load_dh_parameter_numberscCs�|j��}|�||jjk�|j�||jj�}|�|�}|�|�}|dur+|�|�}n|jj}|j�||||�}|�|dk�|j�	dd�}|j�
||�}|�|dk�|ddkS)Nr�r8r)r�r,r�r�rrCr�r@r9r�r;)r�rPr�rQr�r�r=rxrxry�dh_parameters_supported�s


zBackend.dh_parameters_supportedcCs|jjdkSr�)r�r�r�rxrxry�dh_x942_serialization_supported�r�z'Backend.dh_x942_serialization_supportedcsxt�|�}�j�d�}�j�||�}��|d�jjk��j�|�fdd��}��|dk��j�|d|�dd�S)Nzunsigned char **rcs�j�|d�Sr�)r��OPENSSL_free)�pointerr�rxryr��sz)Backend.x509_name_bytes.<locals>.<lambda>)	r;r�r�r��
i2d_X509_NAMEr�rrCr$)r�r��	x509_name�ppr�rxr�ry�x509_name_bytes�s
�zBackend.x509_name_bytescCsht|�dkr
td��|��}|j�||jj�}|�|dk�|j�||t|��}|�|dk�t||�S)N� z%An X25519 public key is 32 bytes longr�)	r�r�rbr��EVP_PKEY_set_type�
NID_X25519r��EVP_PKEY_set1_tls_encodedpointrH)r�rhrKr�rxrxry�x25519_load_public_bytes�s
�
z Backend.x25519_load_public_bytescCs�t|�dkr
td��d}|�d��#}||dd�<||dd�<|�|�}|j�|j|jj�}Wd�n1s7wY|�	||jjk�|j�
||jj�}|�	|j�|�|jj
k�t||�S)NrIz&An X25519 private key is 32 bytes longs0.0+en" �0r�)r�r��_zeroed_bytearrayrjr�rTrrr�rr�rCr`ryrvrG)r�rh�pkcs8_prefix�barrrKrxrxry�x25519_load_private_bytes�s
��
z!Backend.x25519_load_private_bytescCs�|j�||jj�}|�||jjk�|j�||jj�}|j�|�}|�|dk�|j�d�}|j�	||�}|�|dk�|�|d|jjk�|j�|d|jj
�}|S)Nr��EVP_PKEY **r)r��EVP_PKEY_CTX_new_idr�rr�rC�EVP_PKEY_CTX_free�EVP_PKEY_keygen_initr��EVP_PKEY_keygenr`)r�r8�evp_pkey_ctxr��	evp_ppkeyrKrxrxry�_evp_pkey_keygen_gc�szBackend._evp_pkey_keygen_gccC�|�|jj�}t||�Sr�)r[r�rKrGrarxrxry�x25519_generate_key	�
zBackend.x25519_generate_keycC�|jrdS|jjSr�)r�r��CRYPTOGRAPHY_IS_LIBRESSLr�rxrxry�x25519_supported	�
zBackend.x25519_supportedcCs`t|�dkr
td��|j�|jj|jj|t|��}|�||jjk�|j�||jj	�}t
||�S)N�8z#An X448 public key is 56 bytes long)r�r�r��EVP_PKEY_new_raw_public_key�NID_X448r�rr�rCr`rJ�r�rhrKrxrxry�x448_load_public_bytes	s�
zBackend.x448_load_public_bytescCslt|�dkr
td��|j�|�}|j�|jj|jj|t|��}|�||jjk�|j�	||jj
�}t||�S)Nrcz$An X448 private key is 56 bytes long)r�r�r�r"r��EVP_PKEY_new_raw_private_keyrerr�rCr`rI�r�rhrirKrxrxry�x448_load_private_bytes 	s�
zBackend.x448_load_private_bytescCr\r�)r[r�rerIrarxrxry�x448_generate_key,	r^zBackend.x448_generate_keycCr_r�)r�r��"CRYPTOGRAPHY_OPENSSL_LESS_THAN_111r�rxrxry�x448_supported0	rbzBackend.x448_supportedcCr_r��r�r��#CRYPTOGRAPHY_OPENSSL_LESS_THAN_111Br�rxrxry�ed25519_supported5	rbzBackend.ed25519_supportedcCsnt�d|�t|�tjkrtd��|j�|jj|j	j
|t|��}|�||j	j
k�|j	�||jj
�}t||�S)Nrhz&An Ed25519 public key is 32 bytes long)r�_check_bytesr�rU�_ED25519_KEY_SIZEr�r�rd�NID_ED25519r�rr�rCr`r0rfrxrxry�ed25519_load_public_bytes:	s�
z!Backend.ed25519_load_public_bytescCszt|�tjkrtd��t�d|�|j�|�}|j�	|jj
|jj|t|��}|�||jjk�|j�
||jj�}t||�S)Nz'An Ed25519 private key is 32 bytes longrh)r�rUrrr�rrqr�r"r�rhrsrr�rCr`r/rirxrxry�ed25519_load_private_bytesH	s�
z"Backend.ed25519_load_private_bytescCr\r�)r[r�rsr/rarxrxry�ed25519_generate_keyV	r^zBackend.ed25519_generate_keycCr_r�rnr�rxrxry�ed448_supportedZ	rbzBackend.ed448_supportedcCslt�d|�t|�tkrtd��|j�|jj|jj	|t|��}|�
||jj	k�|j�||jj�}t
||�S)Nrhz$An Ed448 public key is 57 bytes long)rrqr�r1r�r�rd�	NID_ED448r�rr�rCr`r3rfrxrxry�ed448_load_public_bytes_	s�
zBackend.ed448_load_public_bytescCsxt�d|�t|�tkrtd��|j�|�}|j�|jj	|jj
|t|��}|�||jj
k�|j�||jj
�}t||�S)Nrhz%An Ed448 private key is 57 bytes long)rrqr�r1r�r�r"r�rhrxrr�rCr`r2rirxrxry�ed448_load_private_bytesl	s�
z Backend.ed448_load_private_bytescCr\r�)r[r�rxr2rarxrxry�ed448_generate_keyz	r^zBackend.ed448_generate_keycCs�|j�d|�}|j�|�}|j�|t|�|t|�|||tj||�
}	|	dkr9|��}
d||d}t	d�
|�|
��|j�|�dd�S)Nr!r��izJNot enough memory to derive key. These parameters require {} MB of memory.)r�r�r"r��EVP_PBE_scryptr�rm�
_MEM_LIMITr-�MemoryErrorr�r$)r�r(r&r%rW�rrPr�r)r�r��
min_memoryrxrxry�
derive_scrypt~	s.��zBackend.derive_scryptcCs2t�|�}|jr||jvrdS|j�|�|jjkSr�)r�_aead_cipher_namer��
_fips_aeadr�rr�r)r�r��cipher_namerxrxry�aead_cipher_supported�	s
zBackend.aead_cipher_supportedc
cs2�t|�}z|VW|�||�dS|�||�w)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)r�r%rRrxrxryrP�	s
�zBackend._zeroed_bytearraycCst|�D]}d||<qdSr�)�range)r�rhr%r&rxrxryr��	s
�zBackend._zero_dataccs~�|dur|jjVdSt|�}|j�d|d�}|j�|||�z|VW|�|j�d|�|�dS|�|j�d|�|�w)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.
        Nr�r�z	uint8_t *)r�rr�r��memmover��cast)r�rh�data_lenr�rxrxry�_zeroed_null_terminated_buf�	s�2z#Backend._zeroed_null_terminated_bufcCs�|dur
t�d|�|�|�}|j�|j|jj�}||jjkr'|��t	d��|j�
||jj�}|j�d�}|j�d�}|j�d�}|�
|��}|j�|||||�}	Wd�n1s\wY|	dkrm|��t	d��d}
d}g}|d|jjkr�|j�
|d|jj�}
|�|
�}|d|jjkr�|j�
|d|jj�}t||�}
|d|jjkr�|j�
|d|jj�}|j�|d�}|jjr�t|�}ntt|��}|D]#}|j�||�}|�||jjk�|j�
||jj�}|�t||��q�||
|fS)NrEz!Could not deserialize PKCS12 datarTzX509 **zCryptography_STACK_OF_X509 **rzInvalid password or PKCS12 data)rrqrjr��d2i_PKCS12_biorrr�rr,r�rC�PKCS12_freer�r��PKCS12_parser`r�r�rK�sk_X509_free�sk_X509_num�#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERr��reversed�
sk_X509_valuer�r�)r�rhrErr�p12�evp_pkey_ptr�x509_ptr�sk_x509_ptr�password_bufr�r�r��additional_certificatesrKr�sk_x509r=�indicesr&rxrxry�%load_key_and_certificates_from_pkcs12�	sP

��



z-Backend.load_key_and_certificates_from_pkcs12cCs�d}|durt�d|�t|tj�rd}d}d}	d}
nt|tj�r1|jj}|jj}d}	d}
|j}nt	d��|dus?t
|�dkrD|jj}n"|j�
�}|j�||jj�}|D]}|j�||j�}
t�|
dk�qT|�|��:}|�|��%}|j�|||r||jn|jj|r�|jn|jj||||	|
d�
}Wd�n1s�wYWd�n1s�wY|�||jjk�|j�||jj�}|��}|j�||�}
|�|
dk�|�|�S)Nr�rori Nr�zUnsupported key encryption type)rrqr�rQrrr��&NID_pbe_WithSHA1And3_Key_TripleDES_CBCrEr�r�r�r�sk_X509_new_nullrCr��sk_X509_pushr��backendr�r��
PKCS12_creater�r�rn�i2d_PKCS12_biorr)r�r�r�r��casrrE�nid_cert�nid_key�pkcs12_iter�mac_iterr��car�r��name_bufr�rrrxrxry�(serialize_key_and_certificates_to_pkcs12
s^�

����
z0Backend.serialize_key_and_certificates_to_pkcs12cCs|jrdS|jjdkS)NFr�)r�r��Cryptography_HAS_POLY1305r�rxrxry�poly1305_supported?
szBackend.poly1305_supportedcCs*t�d|�t|�tkrtd��t||�S)Nr�zA poly1305 key is 32 bytes long)rrqr�rCr�rD)r�r�rxrxry�create_poly1305_ctxD
s
zBackend.create_poly1305_ctxcCsnt�d|�|�|�}|j�|j|jj|jj|jj�}||jjkr)|��t	d��|j�
||jj�}|�|�S�NrhzUnable to parse PKCS7 data)
rrqrjr��PEM_read_bio_PKCS7rrr�rr,r�rC�
PKCS7_free�_load_pkcs7_certificates�r�rhrr�p7rxrxry�load_pem_pkcs7_certificatesK
s
�
z#Backend.load_pem_pkcs7_certificatescCsbt�d|�|�|�}|j�|j|jj�}||jjkr#|��t	d��|j�
||jj�}|�|�Sr�)
rrqrjr��
d2i_PKCS7_biorrr�rr,r�rCr�r�r�rxrxry�load_der_pkcs7_certificatesX
s

z#Backend.load_der_pkcs7_certificatesc	Cs�|j�|j�}|�||jjk�||jjkrtd�|�tj	��g}|j
j|jj
kr+|S|j
jj}|j�|�}t|�D]0}|j�||�}|�||jj
k�|j�|�}|�|dk�|j�||jj�}|�t||��q:|S)NzNOnly basic signed structures are currently supported. NID for this data was {}r�)r��OBJ_obj2nidr�r�r4�NID_pkcs7_signedrr�r�UNSUPPORTED_SERIALIZATIONrR�signr�rr�r�r�r��X509_up_refrCr�r�rK)	r�r�r8�certsr�r=r&rr�rxrxryr�c
s*�
z Backend._load_pkcs7_certificatescCst|�|j�}|jj}d}t|j�dkr|jj}n#|j��}|j�	||jj
�}|jD]}|j�||j�}	|�
|	dk�q)tjj|vrM||jjO}||jjO}|j�|jj|jj||jj|�}
|�
|
|jjk�|j�	|
|jj�}
d}tjj|vr~||jjO}ntjj|vr�||jjO}tjj|vr�||jjO}|jD]\}}
}|�|�}|j�|
|j|
j||�}|�
||jjk�q�|D]}|tjjur�||jjO}q�|tjj ur�||jj!O}q�|�"�}|t#j$j%ur�|j�&||
|j'|�}	nB|t#j$j(u�r|j�)|
|j'|�}	|�
|	dk�|j�*||
|j'|�}	n |t#j$j+u�sJ�|j�)|
|j'|�}	|�
|	dk�|j�,||
�}	|�
|	dk�|�-|�S)Nrr�).rj�_datar��
PKCS7_PARTIALr��_additional_certsr�rr�rCr�r�r�r�rn�PKCS7Options�DetachedSignature�PKCS7_DETACHED�
PKCS7_signr��NoCapabilities�PKCS7_NOSMIMECAP�NoAttributes�PKCS7_NOATTR�NoCerts�
PKCS7_NOCERTS�_signersr��PKCS7_sign_add_signerr��Text�
PKCS7_TEXT�Binary�PKCS7_BINARYrnrQr��SMIME�SMIME_write_PKCS7rrr�PKCS7_final�PEM_write_bio_PKCS7_streamr�
i2d_PKCS7_biorr)r�r�r�optionsrr�
init_flags�final_flagsr�r�r�r��signer_flags�certificater��hash_algorithm�md�p7signerinfo�option�bio_outrxrxry�
pkcs7_sign
st


�
��
�
�
zBackend.pkcs7_signr�)�rurvrw�__doc__r�r�r\rdr�rPr�r�r�r�r��
SHA512_224�
SHA512_256�SHA3_224�SHA3_256�SHA3_384�SHA3_512�SHAKE128�SHAKE256r��_fips_rsa_min_key_size�_fips_rsa_min_public_exponent�_fips_dsa_min_modulus�_fips_dh_min_key_size�_fips_dh_min_modulusr�r�r�r��
contextlibrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr r*r,r-r9r@rLrNr\r^rbrGrjrnrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�rr#r�r,r%rBrFrMrOrRrPrWrZr^rbrfrhrkrmrCrJr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr"r(r0r2r6r7r>r?r@rArBrHrMrSr[r]rargrjrkrmrprtrurvrwryrzr{r�r�rPr�r�r�r�r�r�r�r�r�r�rxrxrxryrz�sX�
	
	-5
 

++	HB	8"


5,		#

U

i0
."

7>
rzc@seZdZdd�Zdd�ZdS)r�cCs
||_dSr�)�_fmt)r��fmtrxrxryr��
r�zGetCipherByName.__init__cCs&|jj||d���}|j�|�d��S)N)r�r�r�)r�r��lowerr�rr�)r�r�r�r�r�rxrxry�__call__�
szGetCipherByName.__call__N)rurvrwr�r�rxrxrxryr��
sr�cCs"d�|jd�}|j�|�d��S)Nz
aes-{}-xtsr)r�)r�rIr�rr�)r�r�r�r�rxrxryr��
sr�)��collectionsr�r��typingr�r�cryptographyrr�cryptography.exceptionsrr�cryptography.hazmat._derrrr	r
r�'cryptography.hazmat.backends.interfacesrr
rrrrrrrrrrr�$cryptography.hazmat.backends.opensslr�,cryptography.hazmat.backends.openssl.ciphersr�)cryptography.hazmat.backends.openssl.cmacr�0cryptography.hazmat.backends.openssl.decode_asn1rrrr r!r"r#r$r%�'cryptography.hazmat.backends.openssl.dhr&r'r(r)�(cryptography.hazmat.backends.openssl.dsar*r+r,�'cryptography.hazmat.backends.openssl.ecr-r.�,cryptography.hazmat.backends.openssl.ed25519r/r0�*cryptography.hazmat.backends.openssl.ed448r1r2r3�0cryptography.hazmat.backends.openssl.encode_asn1r4r5r6r7r8r9r:r;r<�+cryptography.hazmat.backends.openssl.hashesr>�)cryptography.hazmat.backends.openssl.hmacr@�)cryptography.hazmat.backends.openssl.ocsprArB�-cryptography.hazmat.backends.openssl.poly1305rCrD�(cryptography.hazmat.backends.openssl.rsarErF�+cryptography.hazmat.backends.openssl.x25519rGrH�)cryptography.hazmat.backends.openssl.x448rIrJ�)cryptography.hazmat.backends.openssl.x509rKrLrMrN�$cryptography.hazmat.bindings.opensslrO�cryptography.hazmat.primitivesrPrQ�)cryptography.hazmat.primitives.asymmetricrRrSrTrUrVrW�1cryptography.hazmat.primitives.asymmetric.paddingrXrYrZr[�1cryptography.hazmat.primitives.ciphers.algorithmsr\r]r^r_r`rarbrcrd�,cryptography.hazmat.primitives.ciphers.modesrerfrgrhrirjrkrl�"cryptography.hazmat.primitives.kdfrm�,cryptography.hazmat.primitives.serializationrnro�cryptography.x509rp�
namedtuplerq�objectrt�register_interface�register_interface_ifr�r��Cryptography_HAS_SCRYPTrzr�r�r�rxrxrxry�<module>s�<,, ,(
�*0	


Anon7 - 2022
AnonSec Team