403Webshell
Server IP : 217.160.0.135  /  Your IP : 216.73.217.85
Web Server : Apache
System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64
User : sws1074145052 ( 1074145052)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

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

p�g����ddlZddlZddlZddlZddlZddlmZddlmZmZddl	m
Z
mZddlm
Z
ddlmZddlmZddlmZmZmZmZdd	lmZmZmZdd
lmZmZddlmZm Z ddl!m"Z"m#Z#m$Z$dd
l%m&Z&ddl'm(Z(ddl)m*Z*m+Z+ddl,m-Z-m.Z.ddl/m0Z0m1Z1ddl2m3Z3m4Z4ddl5mZ6ddl7m8Z8ddl9m:Z:m;Z;ddl<m=Z=ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFddlGmHZHmIZImJZJmKZKddlLmMZMmNZNmOZOddlPmQZQmRZRddlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ddl`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZiddljmkZkddllmmZmmnZnddlompZpmqZqmrZrmsZsmtZtejud d!d"g��ZvGd#�d$��ZwGd%�d&��ZxGd'�d(��Zyd)exd*eTfd+�Zzex��Z{dS),�N)�contextmanager)�utils�x509)�UnsupportedAlgorithm�_Reasons)�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)�AsymmetricPadding)�dh�dsa�ec�ed25519�ed448�rsa�x25519�x448)�MGF1�OAEP�PKCS1v15�PSS)�#CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES�PRIVATE_KEY_TYPES�PUBLIC_KEY_TYPES)�BlockCipherAlgorithm�CipherAlgorithm)�AES�AES128�AES256�ARC4�Camellia�ChaCha20�SM4�	TripleDES�_BlowfishInternal�_CAST5Internal�
_IDEAInternal�
_SEEDInternal)	�CBC�CFB�CFB8�CTR�ECB�GCM�Mode�OFB�XTS)�scrypt)�pkcs7�ssh)�PBES�PKCS12Certificate�PKCS12KeyAndCertificates�_ALLOWED_PKCS12_TYPES�_PKCS12_CAS_TYPES�
_MemoryBIO�bio�char_ptrc��eZdZdS)�_RC2N)�__name__�
__module__�__qualname__���N/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/backend.pyr\r\�s�������Drar\c��eZdZdZdZhd�ZefZej	ej
ejejej
ejejejejejejejfZejejejejfZdZdZddzZdZdezZ d�Z!de"fd	�Z#	d�de$de%j&e%j'e(j)dd
fd
�Z*de$fd�Z+d�d�Z,d�d�Z-e.j/d���Z0d�d�Z1de"fd�Z2de"fd�Z3de4fd�Z5de6dej7de8fd�Z9dej7fd�Z:dej7fd�Z;dej7de$fd�Z<dej7de$fd�Z=de$fd�Z>dej7de$fd�Z?dej7dej@fd�ZAd eBd!eCde$fd"�ZDd#�ZEd�d$�ZFd eBd!eCdeGfd%�ZHd eBd!eCdeGfd&�ZIdej7de$fd'�ZJdej7d(e4d)e6d*e4d+e6de6fd,�ZKde%j'e(j)fd-�ZLde%j'e(jMfd.�ZNde4fd/�ZOd�d0e4fd1�ZPd2e4d3e4deQjRfd4�ZSd2e4d3e4de$fd5�ZTd6eQjUdeQjRfd7�ZVd6eQjWdeQjXfd8�ZYd9�ZZd:�Z[d;e6fd<�Z\d=�Z]de6fd>�Z^de_fd?�Z`deafd@�Zbdej7de$fdA�ZcdBedde$fdC�Zed3e4defjgfdD�ZhdEefjgdefjifdF�Zjd3e4defjifdG�ZkdH�Zld6efjmdefjifdI�Znd6efjodefjpfdJ�Zqd6efjrdefjgfdK�ZsdL�Ztde$fdM�Zudej7de$fdN�Zvde$fdO�ZwdexdeyfdP�Zzd;e6dQe%j&e6de_fdR�Z{d;e6deafdS�Z|d;e6de}j~fdT�Zd;e6dQe%j&e6de_fdU�Z�dV�Z�d;e6deafdW�Z�d;e6de}j~fdX�Z�dYe�j�de%j�fdZ�Z�d[e%j�de�j�fd\�Z�d]e�j�de%j�fd^�Z�d_e%j�de�j�fd`�Z�dae�j�de%j�fdb�Z�dce%j�de�j�fdd�Z�dae�j�dee�de$fdf�Z�d]e�j�de$fdg�Z�dh�Z�di�Z�de%j�fdj�Z�dkej�de$fdl�Z�dmej�dkej�de$fdn�Z�dkej�dej�fdo�Z�d6ej�dej�fdp�Z�d6ej�dej�fdq�Z�dkej�dre6dej�fds�Z�dte4dkej�dej�fdu�Z�dkej�fdv�Z�dwe4fdx�Z�dej�dkej�de$fdy�Z�dz�Z�dkej�de4fd{�Z�e/d|���Z�d}�Z�d~e4de4fd��Z�d�e�j�d�e�j�d�e�j�de6fd��Z�d��Z�d��Z�d�e�j�d�e�j�de6fd��Z�de$fd��Z�d�e4d3e4de}j~fd��Z�d��Z�dEe}j~de}j�fd��Z�d�e4d3e4de}j�fd��Z�d6e}j�de}j�fd��Z�d6e}j�de}j�fd��Z�d6e}j�de}j~fd��Z�	d�d�e4d�e4d�e%j&e4de$fd��Z�de$fd��Z�d;e6de�j�fd��Z�d;e6de�j�fd��Z�d��Z�de�j�fd��Z�de$fd��Z�d;e6de�j�fd��Z�d;e6de�j�fd��Z�de�j�fd��Z�de$fd��Z�de$fd��Z�d;e6de�j�fd��Z�d;e6de�j�fd��Z�de�j�fd��Z�de$fd��Z�d;e6de�j�fd��Z�d;e6de�j�fd��Z�de�j�fd��Z�d+e6d)e6d(e4d�e4d�e4d�e4de6fd��Z�de$fd��Z�e.j/d(e4de%j�e�fd����Z�d(e4dd
fd��Z�e.j/d����Z�d;e6dQe%j&e6de%j�e%j&e_e%j&e�j�e%j'e�j�ffd��Z�d;e6dQe%j&e6de�fd��Z�d�e%j&e6de%j&e�dYe%j&e�j�d�e%j&e%j'e�d�e�j�de6fd��Z�de$fd��Z�de6de�fd��Z�de$fd��Z�d;e6de%j'e�j�fd��Z�d;e6de%j'e�j�fd��Z�d��Z�d�e%j'e�j�d�e�j�fd��Z�d�e�j�d�e�j�d�e%j'e�j�de6fd��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�c��tj��|_|jj|_|jj|_d|_|���|_	i|_
|���|j	r'|jjrtjdt��n|���|jjg|_|jjr&|j�|jj��dSdS)NFz<OpenSSL FIPS mode is enabled. Can't enable DRBG fork safety.)r&�Binding�_binding�ffi�_ffi�lib�_lib�_rsa_skip_check_key�_is_fips_enabled�
_fips_enabled�_cipher_registry�_register_default_ciphers�"CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE�warnings�warn�UserWarning�activate_osrandom_engine�EVP_PKEY_DH�	_dh_types�Cryptography_HAS_EVP_PKEY_DHX�append�EVP_PKEY_DHX��selfs rb�__init__zBackend.__init__�s�����)�)��
��M�%��	��M�%��	�#(�� �!�2�2�4�4��� "����&�&�(�(�(���	,�$�)�"N�	,��M�N��
�
�
�
�

�)�)�+�+�+��)�/�0����9�2�	:��N�!�!�$�)�"8�9�9�9�9�9�	:�	:ra�returnc�\�d�|���|j��S)Nz'<OpenSSLBackend(version: {}, FIPS: {})>)�format�openssl_version_textrwr�s rb�__repr__zBackend.__repr__�s.��8�?�?��%�%�'�'��);�
�
�	
raN�ok�errorsc�:�tj|j||���S)N)r�)r&�_openssl_assertrt)r�r�r�s   rb�openssl_assertzBackend.openssl_assert�s��
�&�t�y�"�V�D�D�D�Drac��|jjr%|j�|jj��}nt|jdd�����}|dkr|j���t|��S)N�	FIPS_modec��dS�Nrr`r`rarb�<lambda>z*Backend._is_fips_enabled.<locals>.<lambda>�s��1�rar)rt�Cryptography_HAS_300_FIPS�&EVP_default_properties_is_fips_enabledrr�NULL�getattr�ERR_clear_error�bool)r��modes  rbrvzBackend._is_fips_enabled�sx���9�.�	@��9�C�C��	����D�D�>�7�4�9�k�9�9�=�=�?�?�D��1�9�9��I�%�%�'�'�'��D�z�z�rac��|j���|���sJ�|���|_dS�N)rp�_enable_fipsrvrwr�s rbr�zBackend._enable_fips�sJ��	
�
�"�"�$�$�$��$�$�&�&�&�&�&�!�2�2�4�4����rac��|jjr�|j���}||jjkr�|j�|��|j�|jj��}|�|dk��|j�|��}|�|dk��dSdSdS�Nrm)	rtrz�ENGINE_get_default_RANDrrr��ENGINE_unregister_RAND�RAND_set_rand_methodr��
ENGINE_finish�r��e�ress   rb�activate_builtin_randomzBackend.activate_builtin_random�s����9�7�
	.��	�1�1�3�3�A��D�I�N�"�"��	�0�0��3�3�3��i�4�4�T�Y�^�D�D���#�#�C�1�H�-�-�-��i�-�-�a�0�0���#�#�C�1�H�-�-�-�-�-�
	.�
	.�#�"rac#�K�|j�|jj��}|�||jjk��|j�|��}|�|dk��	|V�|j�|��}|�|dk��|j�|��}|�|dk��dS#|j�|��}|�|dk��|j�|��}|�|dk��wxYwr�)	rt�ENGINE_by_id�Cryptography_osrandom_engine_idr�rrr��ENGINE_init�ENGINE_freer�r�s   rb�_get_osurandom_enginezBackend._get_osurandom_engine�s?����
�I�"�"�4�9�#L�M�M�����A����/�0�0�0��i�#�#�A�&�&�����C�1�H�%�%�%�	*��G�G�G��)�'�'��*�*�C�����q��)�)�)��)�)�)�!�,�,�C�����q��)�)�)�)�)��	�)�'�'��*�*�C�����q��)�)�)��)�)�)�!�,�,�C�����q��)�)�)�)���s
�>C*�*A(Ec��|jjr�|���|���5}|j�|��}|�|dk��ddd��n#1swxYwY|j�|jj��}|�|dk��dSdSr�)	rtrzr�r��ENGINE_set_default_RANDr�r�rrr�r�s   rbr~z Backend.activate_osrandom_engines����9�7�		*��(�(�*�*�*��+�+�-�-�
.���i�7�7��:�:���#�#�C�1�H�-�-�-�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.����
.�
.�
.�
.�
�)�0�0����@�@�C�����q��)�)�)�)�)�		*�		*s�4A5�5A9�<A9c	��|j�dd��}|���5}|j�|dt|��||jjd��}|�|dk��ddd��n#1swxYwY|j�|���	d��S)N�char[]�@sget_implementationr�ascii)
rr�newr�rt�ENGINE_ctrl_cmd�lenr�r��string�decode)r��bufr�r�s    rb�osrandom_engine_implementationz&Backend.osrandom_engine_implementations����i�m�m�H�b�)�)��
�
'�
'�
)�
)�	)�Q��)�+�+��(�#�c�(�(�C�������C�
����a��(�(�(�		)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�
�y����$�$�+�+�G�4�4�4s�AB�B�Bc��|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�)rrr�rt�OpenSSL_version�OPENSSL_VERSIONr�r�s rbr�zBackend.openssl_version_text#sA���y����I�%�%�d�i�&?�@�@�
�
�
�&��/�/�	rac�4�|j���Sr�)rt�OpenSSL_version_numr�s rb�openssl_version_numberzBackend.openssl_version_number.s���y�,�,�.�.�.ra�key�	algorithmc�$�t|||��Sr�r)r�r�r�s   rb�create_hmac_ctxzBackend.create_hmac_ctx1s���D�#�y�1�1�1rac��|jdks|jdkr7d�|j|jdz���d��}n|j�d��}|j�|��}|S)N�blake2b�blake2sz{}{}�r�)�namer��digest_size�encodert�EVP_get_digestbyname)r�r��alg�evp_mds    rb�_evp_md_from_algorithmzBackend._evp_md_from_algorithm6s~���>�Y�&�&�)�.�I�*E�*E��-�-���	� 5�� 9����f�W�o�o�
�C��.�'�'��0�0�C���/�/��4�4���
rac�v�|�|��}|�||jjk��|Sr�)r�r�rrr��r�r�r�s   rb�_evp_md_non_null_from_algorithmz'Backend._evp_md_non_null_from_algorithmAs7���,�,�Y�7�7�����F�d�i�n�4�5�5�5��
rac��|jrt||j��sdS|�|��}||jjkS�NF)rw�
isinstance�_fips_hashesr�rrr�r�s   rb�hash_supportedzBackend.hash_supportedFsH����	�j��D�<M�&N�&N�	��5��,�,�Y�7�7������'�'rac�r�|jrt|tj��rdS|�|��Sr��rwr�r'�SHA1r��r�r�s  rb�signature_hash_supportedz Backend.signature_hash_supportedMs;��
��	�*�Y���"D�"D�	��5��"�"�9�-�-�-rac�4�|jrdS|jjdkS�NFrm)rwrt�Cryptography_HAS_SCRYPTr�s rb�scrypt_supportedzBackend.scrypt_supportedVs"����	:��5��9�4��9�9rac�r�|jrt|tj��rdS|�|��S)NTr�r�s  rb�hmac_supportedzBackend.hmac_supported\s9����	�*�Y���"D�"D�	��4��"�"�9�-�-�-rac�"�t||��Sr�rr�s  rb�create_hash_ctxzBackend.create_hash_ctxcs���D�)�,�,�,ra�cipherr�c���|jrt||j��sdS	|jt	|��t	|��f}n#t
$rYdSwxYw||||��}|jj|kSr�)rwr��
_fips_ciphersrx�type�KeyErrorrrr�)r�r�r��adapter�
evp_ciphers     rb�cipher_supportedzBackend.cipher_supportedhs�����	��f�d�&8�9�9�
��u�	��+�D��L�L�$�t�*�*�,D�E�G�G���	�	�	��5�5�	�����W�T�6�4�0�0�
��y�~��+�+s�)A
�

A�Ac�z�||f|jvr#td�||�����||j||f<dS)Nz"Duplicate registration for: {} {}.)rx�
ValueErrorr�)r��
cipher_cls�mode_clsr�s    rb�register_cipher_adapterzBackend.register_cipher_adaptervsY����!�T�%:�:�:��4�;�;�������
�
7>���j�(�2�3�3�3rac	�`�tttfD]U}ttt
ttttfD]&}|�
||td�����'�Vttt
ttfD]+}|�
t|td�����,ttttfD]+}|�
t|td�����,|�
tt
td����tttt
fD]+}|�
t|td�����,tttt
fD]+}|�
t|td�����,t!jt$t&gtttt
g��D])\}}|�
||td�����*|�
t(t+d��td����|�
t,t+d��td����|�
t.t+d��td	����|�
tt0t2��t
ttttfD]+}|�
t4|td
�����,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�chacha20zsm4-{mode.name})r;r<r=rGrJrKrNrHrIrLr��GetCipherByNamer?rBrCrF�	itertools�productrDrEr>r�r\r@rO�_get_xts_cipherrA)r�r�r�s   rbryz!Backend._register_default_cipherss�����/�	�	�J� �#�s�C��d�C�@�
�
���,�,���#�E�������
��c�3��S�1�	�	�H��(�(���� M�N�N�
�
�
�
�
�c�4��-�	�	�H��(�(��8�_�5K�%L�%L�
�
�
�
�	
�$�$��s�O�J�7�7�	
�	
�	
��c�3��,�	�	�H��(�(�!�8�_�=M�-N�-N�
�
�
�
��c�3��,�	�	�H��(�(��x��9K�)L�)L�
�
�
�
�%.�$5�
�]�+�
�#�s�C� �%
�%
�	�	� �J��
�(�(���� ;�<�<�
�
�
�
�
	
�$�$�T�4��:�:��u�7M�7M�N�N�N��$�$�T�4��:�:��u�7M�7M�N�N�N��$�$��d�4�j�j�/�*�"=�"=�	
�	
�	
�	
�$�$�S�#��?�?�?��c�3��S�1�	�	�H��(�(��X��/@�A�A�
�
�
�
�	�	rac�:�t|||tj��Sr�)r	�_ENCRYPT�r�r�r�s   rb�create_symmetric_encryption_ctxz'Backend.create_symmetric_encryption_ctx�����d�F�D�.�2I�J�J�Jrac�:�t|||tj��Sr�)r	�_DECRYPTr�s   rb�create_symmetric_decryption_ctxz'Backend.create_symmetric_decryption_ctx�rrac�,�|�|��Sr�)r�r�s  rb�pbkdf2_hmac_supportedzBackend.pbkdf2_hmac_supported�s���"�"�9�-�-�-ra�length�salt�
iterations�key_materialc
��|j�d|��}|�|��}|j�|��}|j�|t
|��|t
|��||||��}	|�|	dk��|j�|��dd�S)N�unsigned char[]rm)	rrr�r��from_bufferrt�PKCS5_PBKDF2_HMACr�r��buffer)
r�r�rrrr	r�r��key_material_ptrr�s
          rb�derive_pbkdf2_hmaczBackend.derive_pbkdf2_hmac�s����i�m�m�-�v�6�6���5�5�i�@�@���9�0�0��>�>���i�)�)���������I�I�����	
�	
��	
���C�1�H�%�%�%��y����$�$�Q�Q�Q�'�'rac�4�tj|j��Sr�)r&�_consume_errorsrtr�s rbrzBackend._consume_errors�s���&�t�y�1�1�1rac�4�tj|j��Sr�)r&�_consume_errors_with_textrtr�s rbrz!Backend._consume_errors_with_text�s���0���;�;�;rac���||jjksJ�|�|j�|����|j�|��}|j�d|��}|j�||��}|�|dk��t�	|j�
|��d|�d��}|S)Nrr�big)rrr�r�rt�BN_is_negative�BN_num_bytesr��	BN_bn2bin�int�
from_bytesr)r��bn�bn_num_bytes�bin_ptr�bin_len�vals      rb�
_bn_to_intzBackend._bn_to_int�s����T�Y�^�#�#�#�#�����	� 8� 8�� <� <�<�=�=�=��y�-�-�b�1�1���)�-�-� 1�<�@�@���)�%�%�b�'�2�2�����G�q�L�)�)�)��n�n�T�Y�-�-�g�6�6�x��x�@�%�H�H���
ra�numc�X�|�||jjksJ�|�|jj}|�t|���dzdz��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 @rmr)	rrr��to_bytesr�
bit_lengthrt�	BN_bin2bnr�r�)r�r"r�binary�bn_ptrs     rb�
_int_to_bnzBackend._int_to_bn�s����z�R�4�9�>�1�1�1�1�
�:����B����c�#�.�.�"2�"2�S�"8�1�"<�=�=�u�E�E����$�$�V�S��[�[�"�=�=�����F�d�i�n�4�5�5�5��
ra�public_exponent�key_sizec�:�tj||��|j���}|�||jjk��|j�||jj��}|�	|��}|j�||jj
��}|j�||||jj��}|�|dk��|�|��}t||||j��Sr�)r/�_verify_rsa_parametersrt�RSA_newr�rrr��gc�RSA_freer)�BN_free�RSA_generate_key_ex�_rsa_cdata_to_evp_pkeyr ru)r�r*r+�	rsa_cdatarr��evp_pkeys       rb�generate_rsa_private_keyz Backend.generate_rsa_private_key�s���	�"�?�H�=�=�=��I�%�%�'�'�	����I����7�8�8�8��I�L�L��D�I�,>�?�?�	�
�_�_�_�
-�
-��
�Y�\�\�"�d�i�/�
0�
0���i�+�+��x��T�Y�^�
�
��	
���C�1�H�%�%�%��.�.�y�9�9����)�X�t�'?�
�
�	
rac�,�|dko|dzdko|dkS)N�rmrir`)r�r*r+s   rb�!generate_rsa_parameters_supportedz)Backend.generate_rsa_parameters_supporteds/��
�q� �
 ��!�#�q�(�
 ��C��	
ra�numbersc
��tj|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/||||j��Sr�)r/�_check_private_key_components�p�q�d�dmp1�dmq1�iqmp�public_numbersr��nrtr.r�rrr�r/r0r)�RSA_set0_factors�RSA_set0_key�RSA_set0_crt_paramsr3r ru)
r�r:r4r=r>r?r@rArBr�rDr�r5s
             rb�load_rsa_private_numbersz Backend.load_rsa_private_numberss���	�)��I��I��I��L��L��L��"�$��"�$�		
�		
�		
��I�%�%�'�'�	����I����7�8�8�8��I�L�L��D�I�,>�?�?�	��O�O�G�I�&�&���O�O�G�I�&�&���O�O�G�I�&�&�����w�|�,�,�����w�|�,�,�����w�|�,�,���O�O�G�2�4�5�5���O�O�G�2�4�5�5���i�(�(��A�q�9�9�����C�1�H�%�%�%��i�$�$�Y��1�a�8�8�����C�1�H�%�%�%��i�+�+�I�t�T�4�H�H�����C�1�H�%�%�%��.�.�y�9�9����)�X�t�'?�
�
�	
rac�6�tj|j|j��|j���}|�||jjk��|j�	||jj
��}|�|j��}|�|j��}|j�||||jj��}|�|dk��|�
|��}t|||��Sr�)r/�_check_public_key_componentsr�rDrtr.r�rrr�r/r0r)rFr3r!)r�r:r4r�rDr�r5s       rb�load_rsa_public_numberszBackend.load_rsa_public_numbers@s���	�(���G�I�>�>�>��I�%�%�'�'�	����I����7�8�8�8��I�L�L��D�I�,>�?�?�	��O�O�G�I�&�&���O�O�G�I�&�&���i�$�$�Y��1�d�i�n�E�E�����C�1�H�%�%�%��.�.�y�9�9���T�9�h�7�7�7rac���|j���}|�||jjk��|j�||jj��}|Sr�)rt�EVP_PKEY_newr�rrr�r/�
EVP_PKEY_free�r�r5s  rb�_create_evp_pkey_gczBackend._create_evp_pkey_gcOsQ���9�)�)�+�+�����H��	��6�7�7�7��9�<�<��$�)�*A�B�B���rac��|���}|j�||��}|�|dk��|Sr�)rPrt�EVP_PKEY_set1_RSAr�)r�r4r5r�s    rbr3zBackend._rsa_cdata_to_evp_pkeyU�G���+�+�-�-���i�)�)�(�I�>�>�����C�1�H�%�%�%��ra�datac�2�|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.
        )
rrrrt�BIO_new_mem_bufr�r�r�rXr/�BIO_free)r�rT�data_ptrrYs    rb�
_bytes_to_biozBackend._bytes_to_bio[sx���9�(�(��.�.���i�'�'��#�d�)�)�<�<�����C�4�9�>�1�2�2�2��$�)�,�,�s�D�I�,>�?�?��J�J�Jrac�B�|j���}|�||jjk��|j�|��}|�||jjk��|j�||jj��}|S)z.
        Creates an empty memory BIO.
        )rt�	BIO_s_memr�rrr��BIO_newr/rW)r��
bio_methodrYs   rb�_create_mem_bio_gczBackend._create_mem_bio_gchs����Y�(�(�*�*�
����J�$�)�.�8�9�9�9��i���
�+�+�����C�4�9�>�1�2�2�2��i�l�l�3��	� 2�3�3���
rac�F�|j�d��}|j�||��}|�|dk��|�|d|jjk��|j�|d|��dd�}|S)zE
        Reads a memory BIO. This only works on memory BIOs.
        zchar **rN)rrr�rt�BIO_get_mem_datar�r�r)r�rYr��buf_len�bio_datas     rb�
_read_mem_biozBackend._read_mem_bioss����i�m�m�I�&�&���)�,�,�S�#�6�6�����G�a�K�(�(�(����C��F�d�i�n�4�5�5�5��9�#�#�C��F�G�4�4�Q�Q�Q�7���rac���|j�|��}||jjkry|j�|��}|�||jjk��|j�||jj��}t||||j
��S||jjkr�|jjs�|jj
s�|jjs�|j�|��}|�||jjk��|j�||jj��}|���}|j�||��}|�|dk��|�|�|��d���S||jjkrs|j�|��}|�||jjk��|j�||jj��}t-|||��S||jjkrs|j�|��}|�||jjk��|j�||jj��}t5|||��S||jvrs|j�|��}|�||jjk��|j�||jj��}t=|||��S|t?|jdd��krtA||��S|t?|jdd��krtC||��S|t?|jdd��krtE||��S|t?|jdd��krtG||��StId���)	zd
        Return the appropriate type of PrivateKey given an evp_pkey cdata
        pointer.
        rmN)�password�EVP_PKEY_ED25519�
EVP_PKEY_X448�EVP_PKEY_X25519�EVP_PKEY_ED448�Unsupported key type.)%rt�EVP_PKEY_id�EVP_PKEY_RSA�EVP_PKEY_get1_RSAr�rrr�r/r0r ru�EVP_PKEY_RSA_PSS�CRYPTOGRAPHY_IS_LIBRESSL�CRYPTOGRAPHY_IS_BORINGSSL�#CRYPTOGRAPHY_OPENSSL_LESS_THAN_111Er^�i2d_RSAPrivateKey_bio�load_der_private_keyrc�EVP_PKEY_DSA�EVP_PKEY_get1_DSA�DSA_freer�EVP_PKEY_EC�EVP_PKEY_get1_EC_KEY�EC_KEY_freerr��EVP_PKEY_get1_DH�DH_freer
r�rr$r"rr)	r�r5�key_typer4rYr��	dsa_cdata�ec_cdata�dh_cdatas	         rb�_evp_pkey_to_private_keyz Backend._evp_pkey_to_private_key~s����9�(�(��2�2���t�y�-�-�-��	�3�3�H�=�=�I����	�T�Y�^� ;�<�<�<��	���Y��	�0B�C�C�I�!��i��4�+C���
�
��	�2�2�2��I�6�
3��I�7�
3��I�A�
3��	�3�3�H�=�=�I����	�T�Y�^� ;�<�<�<��	���Y��	�0B�C�C�I��)�)�+�+�C��)�1�1�#�y�A�A�C�����q��)�)�)��,�,��"�"�3�'�'�$�-���
����/�
/�
/��	�3�3�H�=�=�I����	�T�Y�^� ;�<�<�<��	���Y��	�0B�C�C�I�!�$�	�8�<�<�<�
���.�
.�
.��y�5�5�h�?�?�H�����D�I�N� :�;�;�;��y�|�|�H�d�i�.C�D�D�H�+�D�(�H�E�E�E�
���
'�
'��y�1�1�(�;�;�H�����D�I�N� :�;�;�;��y�|�|�H�d�i�.?�@�@�H� ��x��:�:�:�
����,>��E�E�
E�
E�%�d�H�5�5�5�
����O�T�B�B�
B�
B�"�4��2�2�2�
����,=�t�D�D�
D�
D�$�T�8�4�4�4�
����,<�d�C�C�
C�
C�#�D�(�3�3�3�&�'>�?�?�?rac���|j�|��}||jjkrs|j�|��}|�||jjk��|j�||jj��}t|||��S||jj
kr�|jjs�|jjs�|jj
s�|j�|��}|�||jjk��|j�||jj��}|���}|j�||��}|�|dk��|�|�|����S||jjkrs|j�|��}|�||jjk��|j�||jj��}t+|||��S||jjkr�|j�|��}||jjkr$|���}t3d|���|j�||jj��}t7|||��S||jvrs|j�|��}	|�|	|jjk��|j�|	|jj��}	t?||	|��S|tA|jdd��krtC||��S|tA|jdd��krtE||��S|tA|jdd��krtG||��S|tA|jdd��krtI||��StKd���)	zc
        Return the appropriate type of PublicKey given an evp_pkey cdata
        pointer.
        rmzUnable to load EC keyrfNrgrhrirj)&rtrkrlrmr�rrr�r/r0r!rnrorprqr^�i2d_RSAPublicKey_bio�load_der_public_keyrcrtrurvrrwrxrr�ryrr�rzr{rr�rr%r#rr)
r�r5r|r4rYr�r}r~r�rs
          rb�_evp_pkey_to_public_keyzBackend._evp_pkey_to_public_key�s����9�(�(��2�2���t�y�-�-�-��	�3�3�H�=�=�I����	�T�Y�^� ;�<�<�<��	���Y��	�0B�C�C�I� ��y�(�;�;�;���	�2�2�2��I�6�
3��I�7�
3��I�A�
3�
�	�3�3�H�=�=�I����	�T�Y�^� ;�<�<�<��	���Y��	�0B�C�C�I��)�)�+�+�C��)�0�0��i�@�@�C�����q��)�)�)��+�+�D�,>�,>�s�,C�,C�D�D�D�
���/�
/�
/��	�3�3�H�=�=�I����	�T�Y�^� ;�<�<�<��	���Y��	�0B�C�C�I� ��y�(�;�;�;�
���.�
.�
.��y�5�5�h�?�?�H��4�9�>�)�)��7�7�9�9�� �!8�&�A�A�A��y�|�|�H�d�i�.C�D�D�H�*�4��8�D�D�D�
���
'�
'��y�1�1�(�;�;�H�����D�I�N� :�;�;�;��y�|�|�H�d�i�.?�@�@�H���h��9�9�9�
����,>��E�E�
E�
E�$�T�8�4�4�4�
����O�T�B�B�
B�
B�!�$��1�1�1�
����,=�t�D�D�
D�
D�#�D�(�3�3�3�
����,<�d�C�C�
C�
C�"�4��2�2�2�&�'>�?�?�?rac��t|tjtjtjtjtjf��Sr�)r�r'r��SHA224�SHA256�SHA384�SHA512r�s  rb�_oaep_hash_supportedzBackend._oaep_hash_supported�s5�������
��
��
��
�
�	
�	
�		
ra�paddingc��t|t��rdSt|t��rft|jt��rL|jr&t|jjtj��rdS|�	|jj��St|t��rSt|jt��r9|�|jj��o|�|j��SdS)NTF)r�r4r5�_mgfr2rw�
_algorithmr'r�r�r3r�)r�r�s  rb�rsa_padding_supportedzBackend.rsa_padding_supporteds����g�x�(�(�	��4�
���
%�
%�	�*�W�\�4�*H�*H�	��!�
D�j���'���'�'�
D��t��*�*�7�<�+B�C�C�C�
���
&�
&�	�:�g�l�D�+I�+I�	��,�,���'���@��+�+�G�,>�?�?�
@��5rac	���|dvrtd���|j���}|�||jjk��|j�||jj��}|j�|||jjd|jj|jj|jj��}|�|dk��t||��S)N)irliiz0Key size must be 1024, 2048, 3072, or 4096 bits.rrm)
r�rt�DSA_newr�rrr�r/rv�DSA_generate_parameters_exr)r�r+�ctxr�s    rb�generate_dsa_parameterszBackend.generate_dsa_parameterss����3�3�3��B���
��i���!�!�����C�4�9�>�1�2�2�2��i�l�l�3��	� 2�3�3���i�2�2����I�N�
��I�N��I�N��I�N�
�
��	
���C�1�H�%�%�%��d�C�(�(�(ra�
parametersc�P�|j�|j��}|�||jjk��|j�||jj��}|j�|��|�	|��}t|||��Sr�)rt�
DSAparams_dup�
_dsa_cdatar�rrr�r/rv�DSA_generate_key�_dsa_cdata_to_evp_pkeyr)r�r�r�r5s    rb�generate_dsa_private_keyz Backend.generate_dsa_private_key/s����i�%�%��!�
�
��	
���C�4�9�>�1�2�2�2��i�l�l�3��	� 2�3�3���	�"�"�3�'�'�'��.�.�s�3�3���d�C��2�2�2rac�V�|�|��}|�|��Sr�)r�r�)r�r+r�s   rb�'generate_dsa_private_key_and_parametersz/Backend.generate_dsa_private_key_and_parameters<s+���1�1�(�;�;�
��,�,�Z�8�8�8rac���|j�||||��}|�|dk��|j�|||��}|�|dk��dSr�)rt�DSA_set0_pqgr��DSA_set0_key)r�r}r=r>�g�pub_key�priv_keyr�s        rb�_dsa_cdata_set_valueszBackend._dsa_cdata_set_valuesBsl���i�$�$�Y��1�a�8�8�����C�1�H�%�%�%��i�$�$�Y���B�B�����C�1�H�%�%�%�%�%rac��tj|��|jj}|j���}|�||jjk��|j�	||jj
��}|�|j��}|�|j
��}|�|j��}|�|jj��}|�|j��}|�||||||��|�|��}	t'|||	��Sr�)r+�_check_dsa_private_numbersrC�parameter_numbersrtr�r�rrr�r/rvr)r=r>r��y�xr�r�r)
r�r:r�r}r=r>r�r�r�r5s
          rb�load_dsa_private_numbersz Backend.load_dsa_private_numbersHs��	�&�w�/�/�/�#�2�D���I�%�%�'�'�	����I����7�8�8�8��I�L�L��D�I�,>�?�?�	��O�O�-�/�0�0���O�O�-�/�0�0���O�O�-�/�0�0���/�/�'�"8�":�;�;���?�?�7�9�-�-���"�"�9�a��A�w��I�I�I��.�.�y�9�9���d�I�x�8�8�8rac�|�tj|j��|j���}|�||jjk��|j�||jj	��}|�
|jj��}|�
|jj��}|�
|jj
��}|�
|j��}|jj}|�||||||��|�|��}t#|||��Sr�)r+�_check_dsa_parametersr�rtr�r�rrr�r/rvr)r=r>r�r�r�r�r)	r�r:r}r=r>r�r�r�r5s	         rb�load_dsa_public_numberszBackend.load_dsa_public_numbers]s��	�!�'�";�<�<�<��I�%�%�'�'�	����I����7�8�8�8��I�L�L��D�I�,>�?�?�	��O�O�G�5�7�8�8���O�O�G�5�7�8�8���O�O�G�5�7�8�8���/�/�'�)�,�,���9�>���"�"�9�a��A�w��I�I�I��.�.�y�9�9���T�9�h�7�7�7rac��tj|��|j���}|�||jjk��|j�||jj��}|�	|j
��}|�	|j��}|�	|j��}|j�
||||��}|�|dk��t||��Sr�)r+r�rtr�r�rrr�r/rvr)r=r>r�r�r)r�r:r}r=r>r�r�s       rb�load_dsa_parameter_numbersz"Backend.load_dsa_parameter_numbersps���	�!�'�*�*�*��I�%�%�'�'�	����I����7�8�8�8��I�L�L��D�I�,>�?�?�	��O�O�G�I�&�&���O�O�G�I�&�&���O�O�G�I�&�&���i�$�$�Y��1�a�8�8�����C�1�H�%�%�%��d�I�.�.�.rac��|���}|j�||��}|�|dk��|Sr�)rPrt�EVP_PKEY_set1_DSAr�)r�r}r5r�s    rbr�zBackend._dsa_cdata_to_evp_pkey�rSrac��|jSr�)rwr�s rb�
dsa_supportedzBackend.dsa_supported�s���%�%�%rac�X�|���sdS|�|��Sr�)r�r�r�s  rb�dsa_hash_supportedzBackend.dsa_hash_supported�s/���!�!�#�#�	��5��,�,�Y�7�7�7rac�X�|�|td|jz����S)N�)r�rG�
block_sizer�s  rb�cmac_algorithm_supportedz Backend.cmac_algorithm_supported�s/���$�$��s�7�Y�%9�9�:�:�
�
�	
rac�"�t||��Sr�r
r�s  rb�create_cmac_ctxzBackend.create_cmac_ctx�s���D�)�,�,�,rarec�P�|�|jj|j||��Sr�)�	_load_keyrt�PEM_read_bio_PrivateKeyr�)r�rTres   rb�load_pem_private_keyzBackend.load_pem_private_key�s.���~�~��I�-��)���	
�
�	
rac��|�|��}|j�d��}|j�|j|jj|j�|jjd��|��}||jjkr:|j�	||jj
��}|�|��S|���|j�
|j��}|�|dk��|j�|j|jj|j�|jjd��|��}||jjkrK|j�	||jj��}|�|��}t%|||��S|���dS)N�CRYPTOGRAPHY_PASSWORD_DATA *�Cryptography_pem_password_cbrm)rYrrr�rt�PEM_read_bio_PUBKEYrYr��	addressof�
_original_libr/rNr�r�	BIO_resetr��PEM_read_bio_RSAPublicKeyr0r3r!�_handle_key_loading_error)r�rT�mem_bio�userdatar5r�r4s       rb�load_pem_public_keyzBackend.load_pem_public_key�s����$�$�T�*�*���9�=�=�!?�@�@���9�0�0��K��I�N��I����	�'�)G�
�
�
�

�
���t�y�~�%�%��y�|�|�H�d�i�.E�F�F�H��/�/��9�9�9�

� � �"�"�"��)�%�%�g�k�2�2�C�����q��)�)�)��	�;�;����	���	�#�#��I�+�-K����
��I��D�I�N�*�*� �I�L�L��D�I�4F�G�G�	��6�6�y�A�A��$�T�9�h�?�?�?��.�.�0�0�0�0�0rac�b�|�|��}|j�|j|jj|jj|jj��}||jjkr5|j�||jj��}t||��S|�	��dSr�)
rYrt�PEM_read_bio_DHparamsrYrrr�r/r{rr�)r�rTr�rs    rb�load_pem_parameterszBackend.load_pem_parameters�s����$�$�T�*�*���9�2�2��K����������
�
���t�y�~�%�%��y�|�|�H�d�i�.?�@�@�H� ��x�0�0�0��*�*�,�,�,�,�,rac���|�|��}|�||��}|r|�|��S|�|jj|j||��Sr�)rY�"_evp_pkey_from_der_traditional_keyr�r�rt�d2i_PKCS8PrivateKey_bio)r�rTrerbr�s     rbrszBackend.load_der_private_key�st���%�%�d�+�+���5�5�h��I�I���
	��0�0��5�5�5��>�>��	�1��-���	��
rac�:�|j�|j|jj��}||jjkrL|���|j�||jj��}|�td���|S|���dS)N�4Password was given but private key is not encrypted.)	rt�d2i_PrivateKey_biorYrrr�rr/rN�	TypeError)r�rbrer�s    rbr�z*Backend._evp_pkey_from_der_traditional_key�s����i�*�*�8�<����H�H���$�)�.� � �
� � �"�"�"��)�,�,�s�D�I�$;�<�<�C��#��J�����J�� � �"�"�"��4rac���|�|��}|j�|j|jj��}||jjkr:|j�||jj��}|�|��S|�	��|j�
|j��}|�|dk��|j�|j|jj��}||jjkrK|j�||jj
��}|�|��}t|||��S|���dSr�)rYrt�d2i_PUBKEY_biorYrrr�r/rNr�rr�r��d2i_RSAPublicKey_bior0r3r!r�)r�rTr�r5r�r4s      rbr�zBackend.load_der_public_key�s<���$�$�T�*�*���9�+�+�G�K����H�H���t�y�~�%�%��y�|�|�H�d�i�.E�F�F�H��/�/��9�9�9�

� � �"�"�"��)�%�%�g�k�2�2�C�����q��)�)�)��	�6�6���T�Y�^���I��D�I�N�*�*� �I�L�L��D�I�4F�G�G�	��6�6�y�A�A��$�T�9�h�?�?�?��.�.�0�0�0�0�0rac���|�|��}|j�|j|jj��}||jjkr5|j�||jj��}t||��S|jj	r�|�
��|j�|j��}|�|dk��|j�
|j|jj��}||jjkr5|j�||jj��}t||��S|���dSr�)rYrt�d2i_DHparams_biorYrrr�r/r{rr�rr�r��Cryptography_d2i_DHxparams_bior�)r�rTr�rr�s     rb�load_der_parameterszBackend.load_der_parameterss.���$�$�T�*�*���9�-�-�g�k�4�9�>�J�J���t�y�~�%�%��y�|�|�H�d�i�.?�@�@�H� ��x�0�0�0�
�Y�
4�
	5�� � �"�"�"��)�%�%�g�k�2�2�C�����q��)�)�)��y�?�?���T�Y�^���H��4�9�>�)�)��9�<�<��$�)�2C�D�D��$�T�8�4�4�4��&�&�(�(�(�(�(ra�certc�\�|�tjj��}|�|��}|j�|j|jj	��}|�
||jj	k��|j�||jj��}|Sr�)
�public_bytesr(�Encoding�DERrYrt�d2i_X509_biorYrrr�r�r/�	X509_free)r�r�rTr�rs     rb�
_cert2osslzBackend._cert2ossl)s���� � ��!7�!;�<�<���$�$�T�*�*���y�%�%�g�k�4�9�>�B�B�����D�D�I�N�2�3�3�3��y�|�|�D�$�)�"5�6�6���rarc���|���}|j�||��}|�|dk��t	j|�|����Sr�)r^rt�i2d_X509_bior��	rust_x509�load_der_x509_certificaterc)r�rrYr�s    rb�
_ossl2certzBackend._ossl2cert1sa���%�%�'�'���i�$�$�S�$�/�/�����C�1�H�%�%�%��2�4�3E�3E�c�3J�3J�K�K�Kra�csrc�\�|�tjj��}|�|��}|j�|j|jj	��}|�
||jj	k��|j�||jj��}|Sr�)
r�r(r�r�rYrt�d2i_X509_REQ_biorYrrr�r�r/�
X509_REQ_free)r�r�rTr��x509_reqs     rb�	_csr2osslzBackend._csr2ossl7������
� 6� :�;�;���$�$�T�*�*���9�-�-�g�k�4�9�>�J�J�����H��	��6�7�7�7��9�<�<��$�)�*A�B�B���rar�c���|���}|j�||��}|�|dk��t	j|�|����Sr�)r^rt�i2d_X509_REQ_bior�r��load_der_x509_csrrc)r�r�rYr�s    rb�	_ossl2csrzBackend._ossl2csr?�c���%�%�'�'���i�(�(��h�7�7�����C�1�H�%�%�%��*�4�+=�+=�c�+B�+B�C�C�Cra�crlc�\�|�tjj��}|�|��}|j�|j|jj	��}|�
||jj	k��|j�||jj��}|Sr�)
r�r(r�r�rYrt�d2i_X509_CRL_biorYrrr�r�r/�
X509_CRL_free)r�r�rTr��x509_crls     rb�	_crl2osslzBackend._crl2osslGr�rar�c���|���}|j�||��}|�|dk��t	j|�|����Sr�)r^rt�i2d_X509_CRL_bior�r��load_der_x509_crlrc)r�r�rYr�s    rb�	_ossl2crlzBackend._ossl2crlOr�ra�
public_keyc�
�t|tttf��st	d���|�|��}|j�||j��}|dkr|�	��dSdS)NzGExpecting one of DSAPublicKey, RSAPublicKey, or EllipticCurvePublicKey.rmFT)
r�rr!rr�r�rt�X509_CRL_verify�	_evp_pkeyr)r�r�rr�r�s     rb�_crl_is_signature_validzBackend._crl_is_signature_validWs���
����'�
�
�
�	��.���
��>�>�#�&�&���i�'�'��*�2F�G�G���!�8�8�� � �"�"�"��5��trac�b�|�|��}|j�|��}|�||jjk��|j�||jj��}|j�||��}|dkr|�	��dSdS)NrmFT)
r�rt�X509_REQ_get_pubkeyr�rrr�r/rN�X509_REQ_verifyr)r�r�r��pkeyr�s     rb�_csr_is_signature_validzBackend._csr_is_signature_validqs����>�>�#�&�&���y�,�,�X�6�6�����D�D�I�N�2�3�3�3��y�|�|�D�$�)�"9�:�:���i�'�'��$�7�7���!�8�8�� � �"�"�"��5��trac�v�|j�|j|j��dkrtd���dS)NrmzKeys do not correspond)rt�EVP_PKEY_cmprr�)r��key1�key2s   rb�_check_keys_correspondzBackend._check_keys_correspond�s;���9�!�!�$�.�$�.�A�A�Q�F�F��5�6�6�6�G�Frac��|�|��}|j�d��}|�Jtjd|��|j�|��}||_t|��|_||j	|jj
|j�|jj
d��|��}||jj
kr�|jdkre|���|jdkrt!d���|jdksJ�t#d�|jd	z
�����|���|���|j�||jj��}|�|jdkrt!d
���|�|jd	ks|�J�||��S)Nr�rer�r���z3Password was not given but private key is encrypted���zAPasswords longer than {} bytes are not supported by this backend.rmr�)rYrrr�r�_check_byteslikerrer�rrYr�r�rtr��errorrr�r�r��maxsizer�r/rN�called)	r��openssl_read_func�convert_funcrTrer�r��password_ptrr5s	         rbr�zBackend._load_key�s����$�$�T�*�*���9�=�=�!?�@�@�����"�:�x�8�8�8��9�0�0��:�:�L� ,�H��!�(�m�m�H�O�$�$��K��I�N��I����	�'�)G�
�
�
�

�
���t�y�~�%�%��~��"�"��$�$�&�&�&��>�R�'�'�#�M����$�>�R�/�/�/�/�$�+�+1�6�(�2B�Q�2F�+G�+G����
�.�.�0�0�0�
	
�������9�<�<��$�)�*A�B�B����H�O�q�$8�$8��F���
�

� �X�_��%9�%9�
�
�
�
��|�H�%�%�%rac�@������}|std���|d��jj�jj��sl|d��jj�jj��s<�jjr?|d��jj	�jj
��rtd���t�fd�|D����rtd���tj
|��}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?c3�l�K�|].}|��jj�jj��V��/dSr�)�_lib_reason_matchrt�ERR_LIB_EVP�'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM)�.0rr�s  �rb�	<genexpr>z4Backend._handle_key_loading_error.<locals>.<genexpr>�sY�����
�
�
�	
�#�#��	�%��	�A�
�
�
�
�
�
�
�
raz!Unsupported public key algorithm.z�Could 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).)rr�rrtr�EVP_R_BAD_DECRYPT�ERR_LIB_PKCS12�!PKCS12_R_PKCS12_CIPHERFINAL_ERROR�Cryptography_HAS_PROVIDERS�ERR_LIB_PROV�PROV_R_BAD_DECRYPT�anyr&�_errors_with_text)r�r��errors_with_texts`  rbr�z!Backend._handle_key_loading_error�sV����%�%�'�'���*	�����
�
�1�I�'�'��	�%�t�y�'B�
�
�#	��a�y�*�*��	�(��	�;���	#	��	�4�#	��1�I�/�/��I�*��I�0���#	� �?�@�@�@�
�
�
�
�
�
 �
�
�
�
�
�	��@�A�A�A� '�8��@�@���4�!���
ra�curvec�f�	|�|��}n#t$r|jj}YnwxYw|j�|��}||jjkr|���dS|�||jjk��|j�	|��dS)NFT)
�_elliptic_curve_to_nidrrt�	NID_undef�EC_GROUP_new_by_curve_namerrr�rr��
EC_GROUP_free)r�r)�	curve_nid�groups    rb�elliptic_curve_supportedz Backend.elliptic_curve_supported�s���	,��3�3�E�:�:�I�I��#�	,�	,�	,��	�+�I�I�I�	,�����	�4�4�Y�?�?���D�I�N�"�"�� � �"�"�"��5����	�T�Y�-@� @�A�A�A��I�#�#�E�*�*�*��4s��1�1�signature_algorithmc�d�t|tj��sdS|�|��Sr�)r�r,�ECDSAr1)r�r2r)s   rb�,elliptic_curve_signature_algorithm_supportedz4Backend.elliptic_curve_signature_algorithm_supported�s2���-�r�x�8�8�	��5��,�,�U�3�3�3rac�l�|�|��rn|�|��}|j�|��}|�|dk��|�|��}t
|||��Std�|j	��tj���)z@
        Generate a new private key on the named curve.
        rmz#Backend object does not support {}.)r1�_ec_key_new_by_curvert�EC_KEY_generate_keyr��_ec_cdata_to_evp_pkeyrrr�r�r�UNSUPPORTED_ELLIPTIC_CURVE)r�r)r~r�r5s     rb�#generate_elliptic_curve_private_keyz+Backend.generate_elliptic_curve_private_keys����(�(��/�/�
	��0�0��7�7�H��)�/�/��9�9�C�����q��)�)�)��1�1�(�;�;�H�+�D�(�H�E�E�E�&�5�<�<�U�Z�H�H��3���
rac���|j}|�|j��}|j�|�|j��|jj��}|j�	||��}|dkr#|�
��td���|�||j
|j��|�|��}t!|||��S)Nrm�Invalid EC key.)rCr7r)rrr/r)�
private_valuert�
BN_clear_free�EC_KEY_set_private_keyrr��)_ec_key_set_public_key_affine_coordinatesr�r�r9r)r�r:�publicr~r>r�r5s       rb�#load_elliptic_curve_private_numbersz+Backend.load_elliptic_curve_private_numberss����'���,�,�V�\�:�:���	����O�O�G�1�2�2�D�I�4K�
�
�
��i�.�.�x��G�G���!�8�8�� � �"�"�"��.�/�/�/��6�6��f�h���	
�	
�	
��-�-�h�7�7��'��h��A�A�Arac���|�|j��}|�||j|j��|�|��}t
|||��Sr�)r7r)rAr�r�r9r)r�r:r~r5s    rb�"load_elliptic_curve_public_numbersz*Backend.load_elliptic_curve_public_numbers0sc���,�,�W�]�;�;���6�6��g�i���	
�	
�	
��-�-�h�7�7��&�t�X�x�@�@�@ra�point_bytesc	� �|�|��}|j�|��}|�||jjk��|j�|��}|�||jjk��|j�||jj��}|�	��5}|j�
|||t|��|��}|dkr#|���td���	ddd��n#1swxYwY|j�||��}|�|dk��|�|��}t!|||��S)Nrmz(Invalid public bytes for the given curve)r7rt�EC_KEY_get0_groupr�rrr��EC_POINT_newr/�
EC_POINT_free�_tmp_bn_ctx�EC_POINT_oct2pointr�rr��EC_KEY_set_public_keyr9r)	r�r)rFr~r0�point�bn_ctxr�r5s	         rb� load_elliptic_curve_public_bytesz(Backend.load_elliptic_curve_public_bytes;s����,�,�U�3�3���	�+�+�H�5�5�����E�T�Y�^�3�4�4�4��	�&�&�u�-�-�����E�T�Y�^�3�4�4�4��	���U�D�I�$;�<�<��
�
�
�
�
�	M�6��)�.�.��u�k�3�{�+;�+;�V���C��a�x�x��$�$�&�&�&� �!K�L�L�L��		M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M����	M�	M�	M�	M��i�-�-�h��>�>�����C�1�H�%�%�%��-�-�h�7�7��&�t�X�x�@�@�@s�	AD+�+D/�2D/r>c	���|�|��}|�|��\}}|j�|��}|�||jjk��|j�||jj��}|�	|��}|j�||jj
��}|���5}|j�||||jj|jj|��}	|�|	dk��|j�
|��}
|j�
|��}||||
||��}	|	dkr#|���td���	ddd��n#1swxYwY|j�||��}	|�|	dk��|�	|��}|j�||jj
��}|j�||��}	|�|	dk��|�|��}
t'|||
��S)Nrmz'Unable to derive key from private_value)r7� _ec_key_determine_group_get_funcrtrIr�rrr�r/rJr)r?rK�EC_POINT_mul�
BN_CTX_getrr�rMr@r9r)r�r>r)r~�get_funcr0rN�valuerOr��bn_x�bn_y�privater5s              rb�!derive_elliptic_curve_private_keyz)Backend.derive_elliptic_curve_private_keyQs���,�,�U�3�3���?�?��I�I���%��	�&�&�u�-�-�����E�T�Y�^�3�4�4�4��	���U�D�I�$;�<�<�����
�.�.���	���U�D�I�$;�<�<��
�
�
�
�
�	L�6��)�(�(��u�e�T�Y�^�T�Y�^�V���C�
����q��)�)�)��9�'�'��/�/�D��9�'�'��/�/�D��(�5�%��t�V�<�<�C��a�x�x��$�$�&�&�&� �!J�K�K�K��	L�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L����	L�	L�	L�	L��i�-�-�h��>�>�����C�1�H�%�%�%��/�/�-�0�0���)�,�,�w��	�(?�@�@���i�.�.�x��A�A�����C�1�H�%�%�%��-�-�h�7�7��'��h��A�A�As�B9F$�$F(�+F(c�V�|�|��}|�|��Sr�)r+�_ec_key_new_by_curve_nid)r�r)r/s   rbr7zBackend._ec_key_new_by_curvexs)���/�/��6�6�	��,�,�Y�7�7�7rar/c���|j�|��}|�||jjk��|j�||jj��Sr�)rt�EC_KEY_new_by_curve_namer�rrr�r/ry)r�r/r~s   rbr\z Backend._ec_key_new_by_curve_nid|sO���9�5�5�i�@�@�����H��	��6�7�7�7��y�|�|�H�d�i�&;�<�<�<rac��|jrt||j��sdS|�|��ot|tj��Sr�)rwr��_fips_ecdh_curvesr1r,�ECDH)r�r�r)s   rb�+elliptic_curve_exchange_algorithm_supportedz3Backend.elliptic_curve_exchange_algorithm_supported�s]����	�j��4�)�'
�'
�	��5��,�,�U�3�3�
�
��r�w�9
�9
�	
rac��|���}|j�||��}|�|dk��|Sr�)rPrt�EVP_PKEY_set1_EC_KEYr�)r�r~r5r�s    rbr9zBackend._ec_cdata_to_evp_pkey�sG���+�+�-�-���i�,�,�X�x�@�@�����C�1�H�%�%�%��rac�,�ddd�}|�|j|j��}|j�|�����}||jjkr2t
d�|j��tj	���|S)z/
        Get the NID for a curve name.
        �
prime192v1�
prime256v1)�	secp192r1�	secp256r1z${} is not a supported elliptic curve)
�getr�rt�
OBJ_sn2nidr�r,rr�rr:)r�r)�
curve_aliases�
curve_namer/s     rbr+zBackend._elliptic_curve_to_nid�s���
'3��N�N�
�"�&�&�u�z�5�:�>�>�
��I�(�(��):�):�)<�)<�=�=�	���	�+�+�+�&�6�=�=�e�j�I�I��3���
��rac#�|K�|j���}|�||jjk��|j�||jj��}|j�|��	|V�|j�|��dS#|j�|��wxYwr�)	rt�
BN_CTX_newr�rrr�r/�BN_CTX_free�BN_CTX_start�
BN_CTX_end)r�rOs  rbrKzBackend._tmp_bn_ctx�s�������%�%�'�'�����F�d�i�n�4�5�5�5�����f�d�i�&;�<�<���	���v�&�&�&�	)��L�L�L��I� � ��(�(�(�(�(��D�I� � ��(�(�(�(���s�?B�B;c��|�||jjk��|j�d��}|�||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)r�rrr�rtrkr,rH�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_fieldr0�method�nidrUs       rbrRz(Backend._ec_key_determine_group_get_func�s*��
	
���C�4�9�>�1�2�2�2��	�,�,�-H�I�I�
����M�T�Y�-@�@�A�A�A��	�+�+�C�0�0�����E�T�Y�^�3�4�4�4���-�-�e�4�4�����F�d�i�n�4�5�5�5��i�0�0��8�8�����C�4�9�#6�6�7�7�7��-���D�I�$C���y�E�H�H��y�D�H��������rar�r�c��|dks|dkrtd���|j�|�|��|jj��}|j�|�|��|jj��}|j�|||��}|dkr#|���td���dS)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.rmr=N)r�rrr/r)rtr1�(EC_KEY_set_public_key_affine_coordinatesr)r�r�r�r�r�s     rbrAz1Backend._ec_key_set_public_key_affine_coordinates�s���
�q�5�5�A��E�E��D���
�
�I�L�L�����+�+�T�Y�->�?�?���I�L�L�����+�+�T�Y�->�?�?���i�@�@��a��K�K���!�8�8�� � �"�"�"��.�/�/�/��8ra�encodingr��encryption_algorithmc�<�t|tj��std���t|tj��std���t|tj��std���t|tj��rd}n�t|tj��r*|j}t|��dkrtd���nQt|tj��r(|j|cxurtjj
urnn|j}ntd���|tjjurf|tjjur
|jj}n/|tjjur
|jj}ntd���|�|||��S|tjju�r�|jr)t|tj��std	���|j�|��}	|tjjur}|	|jjkr
|jj}nI|	|jjkr
|jj}n,|	|jjkr
|jj}ntd
���|�|||��S|tjjur�|rtd���|	|jjkr
|jj}nI|	|jjkr
|jj}n,|	|jjkr
|jj }ntd
���|�!||��Std���|tjj
ur8|tjjurtEj#|||��Std
���td���)N�/encoding must be an item from the Encoding enumz2format must be an item from the PrivateFormat enumzBEncryption algorithm must be a KeySerializationEncryption instancerai�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�r(r�r��
PrivateFormat�KeySerializationEncryption�NoEncryption�BestAvailableEncryptionrer�r��_KeySerializationEncryption�_format�OpenSSH�PKCS8�PEMrt�PEM_write_bio_PKCS8PrivateKeyr��i2d_PKCS8PrivateKey_bio�_private_key_bytes_via_bio�TraditionalOpenSSLrwrkrl�PEM_write_bio_RSAPrivateKeyrt�PEM_write_bio_DSAPrivateKeyrw�PEM_write_bio_ECPrivateKeyrr�i2d_ECPrivateKey_bio�i2d_DSAPrivateKey_bio�_bio_func_outputrR�_serialize_ssh_private_key)
r�r~r�rr�r5�cdatare�	write_bior|s
          rb�_private_key_byteszBackend._private_key_bytes�s���(�M�$:�;�;�	O��M�N�N�N��&�-�"=�>�>�	��D���
�� �-�"J�
�
�	�����
��*�M�,F�G�G�	<��H�H�
� �-�"G�
�
�	<�,�4�H��8�}�}�t�#�#� �#����$�
�$�m�&O�
�
�
	<�%�,��3�3�3�3��*�2�3�3�3�3�3�,�4�H�H��:�;�;�;��]�0�6�6�6��=�1�5�5�5� �I�C�	�	��]�3�7�7�7� �I�=�	�	� �!A�B�B�B��2�2��8�X���
�
�]�0�C�C�C��!�
�*�$�m�&@�+�+�
�!�.�����y�,�,�X�6�6�H��=�1�5�5�5��t�y�5�5�5� $�	� E�I�I����!7�7�7� $�	� E�I�I����!6�6�6� $�	� D�I�I�$�E�����6�6��u�h�����=�1�5�5�5���$�3�����t�y�5�5�5� $�	� ?�I�I����!6�6�6� $�	� >�I�I����!7�7�7� $�	� ?�I�I�$�E�����,�,�Y��>�>�>��J�K�K�K��]�0�8�8�8��=�1�5�5�5��5���#7�����%���
��:�;�;�;rac	���|s
|jj}n|j�d��}|�||||t|��|jj|jj��S)Nsaes-256-cbc)rrr�rt�EVP_get_cipherbynamer�r�)r�r�r5rer�s     rbr�z"Backend._private_key_bytes_via_bioWsh���	H����J�J���7�7��G�G�J��$�$�������M�M��I�N��I�N�
�
�	
rac��|���}||g|�R�}|�|dk��|�|��Sr�)r^r�rc)r�r��argsrYr�s     rbr�zBackend._bio_func_outputhsV���%�%�'�'���i��#�d�#�#�#�����C�1�H�%�%�%��!�!�#�&�&�&rac��t|tj��std���t|tj��std���|tjjure|tjjur
|jj}n/|tjj	ur
|jj
}ntd���|�||��S|tjj
ur�|j�|��}||jjkrtd���|tjjur
|jj}n/|tjj	ur
|jj}ntd���|�||��S|tjjur6|tjjurt'j|��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�r(r�r��PublicFormat�SubjectPublicKeyInfor�rt�PEM_write_bio_PUBKEYr��i2d_PUBKEY_bior�r��PKCS1rkrl�PEM_write_bio_RSAPublicKeyr�r�rR�serialize_ssh_public_key)r�r~r�r�r5r�r�r|s        rb�_public_key_byteszBackend._public_key_bytesns����(�M�$:�;�;�	O��M�N�N�N��&�-�"<�=�=�	��C���
�
�]�/�D�D�D��=�1�5�5�5� �I�:�	�	��]�3�7�7�7� �I�4�	�	� �N�����(�(��H�=�=�=��]�/�5�5�5��y�,�,�X�6�6�H��4�9�1�1�1� �!N�O�O�O��=�1�5�5�5� �I�@�	�	��]�3�7�7�7� �I�:�	�	� �!L�M�M�M��(�(��E�:�:�:��]�/�7�7�7��=�1�9�9�9��3�C�8�8�8��C���
��:�;�;�;rac��|jjSr��rtrpr�s rb�dh_supportedzBackend.dh_supported�����9�6�6�6ra�	generatorc��|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 5rm)
r*�_MIN_MODULUS_SIZEr�r�rt�DH_newr�rrr�r/r{�DH_generate_parameters_exr)r�r�r+�dh_param_cdatar�s     rb�generate_dh_parameterszBackend.generate_dh_parameters�s����b�*�*�*��6�=�=��(�����
��F�"�"��:�;�;�;���)�)�+�+�����N�d�i�n�<�=�=�=�����n�d�i�6G�H�H���i�1�1��H�i����
�
��	
���C�1�H�%�%�%��T�>�2�2�2rac��|���}|j�||��}|�|dk��|Sr�)rPrt�EVP_PKEY_set1_DHr�)r�rr5r�s    rb�_dh_cdata_to_evp_pkeyzBackend._dh_cdata_to_evp_pkey�sG���+�+�-�-���i�(�(��8�<�<�����C�1�H�%�%�%��rac���t|j|��}|j�|��}|�|dk��|�|��}t
|||��Sr�)r�	_dh_cdatart�DH_generate_keyr�r�r
)r�r��dh_key_cdatar�r5s     rb�generate_dh_private_keyzBackend.generate_dh_private_key�so��&�� �$�
�
���i�'�'��5�5�����C�1�H�%�%�%��-�-�l�;�;���T�<��:�:�:rac�T�|�|�||����Sr�)r�r�)r�r�r+s   rb�&generate_dh_private_key_and_parametersz.Backend.generate_dh_private_key_and_parameters�s/���+�+��'�'�	�8�<�<�
�
�	
rac�P�|jj}|j���}|�||jjk��|j�||jj��}|�	|j
��}|�	|j��}|j�|�	|j��}n|jj}|�	|jj
��}|�	|j��}|j�||||��}	|�|	dk��|j�|||��}	|�|	dk��|j�dd��}
|j�||
��}	|�|	dk��|
ddkr3|jdkr|
d|jjzdkst)d���|�|��}t-|||��S)Nrm�int[]rr�z.DH private numbers did not pass safety checks.)rCr�rtr�r�rrr�r/r{r)r=r�r>r�r��DH_set0_pqg�DH_set0_keyr��Cryptography_DH_check�DH_NOT_SUITABLE_GENERATORr�r�r
)r�r:r�rr=r�r>r�r�r��codesr5s            rb�load_dh_private_numberszBackend.load_dh_private_numbers�s���$�2�D���9�#�#�%�%�����H��	��6�7�7�7��9�<�<��$�)�*;�<�<���O�O�-�/�0�0���O�O�-�/�0�0����*���� 1� 3�4�4�A�A��	��A��/�/�'�"8�":�;�;���?�?�7�9�-�-���i�#�#�H�a��A�6�6�����C�1�H�%�%�%��i�#�#�H�g�x�@�@�����C�1�H�%�%�%��	�
�
�g�q�)�)���i�-�-�h��>�>�����C�1�H�%�%�%���8�q�=�=���1�$�$��a��4�9�>�>�!�C�C��M�N�N�N��-�-�h�7�7���T�8�X�6�6�6rac��|j���}|�||jjk��|j�||jj��}|j}|�|j	��}|�|j
��}|j�|�|j��}n|jj}|�|j��}|j�
||||��}|�|dk��|j�|||jj��}|�|dk��|�|��}	t!|||	��Sr�)rtr�r�rrr�r/r{r�r)r=r�r>r�r�r�r�r)
r�r:rr�r=r�r>r�r�r5s
          rb�load_dh_public_numberszBackend.load_dh_public_numberssJ���9�#�#�%�%�����H��	��6�7�7�7��9�<�<��$�)�*;�<�<��#�5���O�O�-�/�0�0���O�O�-�/�0�0����*���� 1� 3�4�4�A�A��	��A��/�/�'�)�,�,���i�#�#�H�a��A�6�6�����C�1�H�%�%�%��i�#�#�H�g�t�y�~�F�F�����C�1�H�%�%�%��-�-�h�7�7���D�(�H�5�5�5rac��|j���}|�||jjk��|j�||jj��}|�|j��}|�|j	��}|j
�|�|j
��}n|jj}|j�||||��}|�|dk��t||��Sr�)
rtr�r�rrr�r/r{r)r=r�r>r�r)r�r:rr=r�r>r�s       rb�load_dh_parameter_numbersz!Backend.load_dh_parameter_numbers(s����9�#�#�%�%�����H��	��6�7�7�7��9�<�<��$�)�*;�<�<���O�O�G�I�&�&���O�O�G�I�&�&���9� �����	�*�*�A�A��	��A��i�#�#�H�a��A�6�6�����C�1�H�%�%�%��T�8�,�,�,rar=r�r>c��|j���}|�||jjk��|j�||jj��}|�|��}|�|��}|�|�|��}n|jj}|j�||||��}|�|dk��|j�	dd��}|j�
||��}|�|dk��|ddkS)Nrmr�r)rtr�r�rrr�r/r{r)r�r�r�)r�r=r�r>rr�r�s       rb�dh_parameters_supportedzBackend.dh_parameters_supported<s���9�#�#�%�%�����H��	��6�7�7�7��9�<�<��$�)�*;�<�<���O�O�A�����O�O�A�����=�����"�"�A�A��	��A��i�#�#�H�a��A�6�6�����C�1�H�%�%�%��	�
�
�g�q�)�)���i�-�-�h��>�>�����C�1�H�%�%�%��Q�x�1�}�rac�"�|jjdkSr�)rtr�r�s rb�dh_x942_serialization_supportedz'Backend.dh_x942_serialization_supportedTs���y�6�!�;�;rac��t|��dkrtd���|���}|j�||jj��}|�|dk��|j�||t|����}|�|dk��t||��S)N� z%An X25519 public key is 32 bytes longrm)	r�r�rPrt�EVP_PKEY_set_type�
NID_X25519r��EVP_PKEY_set1_tls_encodedpointr#)r�rTr5r�s    rb�x25519_load_public_bytesz Backend.x25519_load_public_bytesWs����t�9�9��?�?��D�E�E�E��+�+�-�-���i�)�)�(�D�I�4H�I�I�����C�1�H�%�%�%��i�6�6��d�C��I�I�
�
��	
���C�1�H�%�%�%���h�/�/�/rac�d�t|��dkrtd���d}|�d��5}||dd�<||dd�<|�|��}|j�|j|jj��}ddd��n#1swxYwY|�	||jjk��|j�
||jj��}|�	|j�|��|jj
k��t||��S)Nr�z&An X25519 private key is 32 bytes longs0.0+en" �0r�)r�r��_zeroed_bytearrayrYrtr�rYrrr�r�r/rNrkrhr")r�rT�pkcs8_prefix�barYr5s      rb�x25519_load_private_bytesz!Backend.x25519_load_private_bytesfsg��&�t�9�9��?�?��E�F�F�F�B��
�
#�
#�B�
'�
'�	M�2�#�B�q��t�H��B�r�s�s�G��$�$�R�(�(�C��y�3�3�C�G�T�Y�^�L�L�H�		M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M����	M�	M�	M�	M�	
���H��	��6�7�7�7��9�<�<��$�)�*A�B�B������I�!�!�(�+�+�t�y�/H�H�	
�	
�	
�!��x�0�0�0s�AB�B�Bc��|j�||jj��}|�||jjk��|j�||jj��}|j�|��}|�|dk��|j�d��}|j�	||��}|�|dk��|�|d|jjk��|j�|d|jj
��}|S)Nrm�EVP_PKEY **r)rt�EVP_PKEY_CTX_new_idrrr�r�r/�EVP_PKEY_CTX_free�EVP_PKEY_keygen_initr��EVP_PKEY_keygenrN)r�r{�evp_pkey_ctxr��	evp_ppkeyr5s      rb�_evp_pkey_keygen_gczBackend._evp_pkey_keygen_gc�s���y�4�4�S�$�)�.�I�I�����L�D�I�N�:�;�;�;��y�|�|�L�$�)�2M�N�N���i�,�,�\�:�:�����C�1�H�%�%�%��I�M�M�-�0�0�	��i�'�'��i�@�@�����C�1�H�%�%�%����I�a�L�D�I�N�:�;�;�;��9�<�<�	�!��d�i�.E�F�F���rac�`�|�|jj��}t||��Sr�)r�rtr�r"rOs  rb�x25519_generate_keyzBackend.x25519_generate_key�s*���+�+�D�I�,@�A�A�� ��x�0�0�0rac�.�|jrdS|jjSr�)rwrtror�s rb�x25519_supportedzBackend.x25519_supported�s ����	��5��9�5�5�5rac�r�t|��dkrtd���|j�|jj|jj|t|����}|�||jjk��|j�||jj	��}t||��S)N�8z#An X448 public key is 56 bytes long)r�r�rt�EVP_PKEY_new_raw_public_key�NID_X448rrr�r�r/rNr%�r�rTr5s   rb�x448_load_public_byteszBackend.x448_load_public_bytes�s����t�9�9��?�?��B�C�C�C��9�8�8��I���	���c�$�i�i�
�
��	
���H��	��6�7�7�7��9�<�<��$�)�*A�B�B���d�H�-�-�-rac��t|��dkrtd���|j�|��}|j�|jj|jj|t|����}|�||jjk��|j�	||jj
��}t||��S)Nr�z$An X448 private key is 56 bytes long)r�r�rrrrt�EVP_PKEY_new_raw_private_keyr�r�r�r/rNr$�r�rTrXr5s    rb�x448_load_private_byteszBackend.x448_load_private_bytes�s����t�9�9��?�?��C�D�D�D��9�(�(��.�.���9�9�9��I���	���#�d�)�)�
�
��	
���H��	��6�7�7�7��9�<�<��$�)�*A�B�B���t�X�.�.�.rac�`�|�|jj��}t||��Sr�)r�rtr�r$rOs  rb�x448_generate_keyzBackend.x448_generate_key�s*���+�+�D�I�,>�?�?���t�X�.�.�.rac�H�|jrdS|jjo|jjSr�)rwrt�"CRYPTOGRAPHY_OPENSSL_LESS_THAN_111rpr�s rb�x448_supportedzBackend.x448_supported�s2����	��5��	�<�<�
8��I�7�7�	
rac�.�|jrdS|jjSr�)rwrt�#CRYPTOGRAPHY_OPENSSL_LESS_THAN_111Br�s rb�ed25519_supportedzBackend.ed25519_supported�s ����	��5��9�@�@�@rac��tjd|��t|��tjkrtd���|j�|jj|j	j
|t|����}|�||j	j
k��|j	�||jj
��}t||��S)NrTz&An Ed25519 public key is 32 bytes long)r�_check_bytesr�r-�_ED25519_KEY_SIZEr�rtr��NID_ED25519rrr�r�r/rNrr�s   rb�ed25519_load_public_bytesz!Backend.ed25519_load_public_bytes�s���	��6�4�(�(�(��t�9�9��1�1�1��E�F�F�F��9�8�8��I�!�4�9�>�4��T���
�
��	
���H��	��6�7�7�7��9�<�<��$�)�*A�B�B�� ��x�0�0�0rac���t|��tjkrtd���t	jd|��|j�|��}|j�	|jj
|jj|t|����}|�||jjk��|j�
||jj��}t||��S)Nz'An Ed25519 private key is 32 bytes longrT)r�r-r�r�rrrrrrtr�r�r�r�r/rNrr�s    rb�ed25519_load_private_bytesz"Backend.ed25519_load_private_bytes�s����t�9�9��1�1�1��F�G�G�G�
��v�t�,�,�,��9�(�(��.�.���9�9�9��I�!�4�9�>�8�S��Y�Y�
�
��	
���H��	��6�7�7�7��9�<�<��$�)�*A�B�B��!�$��1�1�1rac�`�|�|jj��}t||��Sr�)r�rtr�rrOs  rb�ed25519_generate_keyzBackend.ed25519_generate_key�s*���+�+�D�I�,A�B�B��!�$��1�1�1rac�H�|jrdS|jjo|jjSr�)rwrtr�rpr�s rb�ed448_supportedzBackend.ed448_supported�s2����	��5��	�=�=�
8��I�7�7�	
rac��tjd|��t|��tkrt	d���|j�|jj|jj	|t|����}|�
||jj	k��|j�||jj��}t||��S)NrTz$An Ed448 public key is 57 bytes long)rr�r�rr�rtr��	NID_ED448rrr�r�r/rNrr�s   rb�ed448_load_public_byteszBackend.ed448_load_public_bytes�s���
��6�4�(�(�(��t�9�9��'�'��C�D�D�D��9�8�8��I������s�4�y�y�
�
��	
���H��	��6�7�7�7��9�<�<��$�)�*A�B�B���t�X�.�.�.rac���tjd|��t|��tkrt	d���|j�|��}|j�|jj	|jj
|t|����}|�||jj
k��|j�||jj
��}t||��S)NrTz%An Ed448 private key is 57 bytes long)rrr�rr�rrrrtr�rr�r�r/rNrr�s    rb�ed448_load_private_bytesz Backend.ed448_load_private_bytess���
��v�t�,�,�,��t�9�9��'�'��D�E�E�E��9�(�(��.�.���9�9�9��I������3�t�9�9�
�
��	
���H��	��6�7�7�7��9�<�<��$�)�*A�B�B����h�/�/�/rac�`�|�|jj��}t||��Sr�)r�rtrrrOs  rb�ed448_generate_keyzBackend.ed448_generate_keys*���+�+�D�I�,?�@�@����h�/�/�/rarD�rc���|j�d|��}|j�|��}|j�|t|��|t|��|||tj||�
�
}	|	dkrB|���}
d|z|zdz}td�
|��|
���|j�|��dd�S)Nrrm�izJNot enough memory to derive key. These parameters require {} MB of memory.)rrr�rrt�EVP_PBE_scryptr�rP�
_MEM_LIMITr�MemoryErrorr�r)r�r	rrrDrr=r�rr�r��
min_memorys            rb�
derive_scryptzBackend.derive_scrypts����i�m�m�-�v�6�6���9�0�0��>�>���i�&�&���������I�I�
�
�
�����
�
���!�8�8��3�3�5�5�F��q��1���1�J��$�$*�F�:�$6�$6����
�
�y����$�$�Q�Q�Q�'�'rac���tj|��}|jr||jvrdS|�d��r|jjdkS|j�|��|jj	kS)NFs-sivrm)
r�_aead_cipher_namerw�
_fips_aead�endswithrt�#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERr�rrr�)r�r��cipher_names   rb�aead_cipher_supportedzBackend.aead_cipher_supported6sy���,�V�4�4����	�+�T�_�"D�"D��5�����(�(�	��9�@�A�E�E��	�.�.�{�;�;�t�y�~�M�
rac#�K�t|��}	|V�|�||��dS#|�||��wxYw)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�rr�s   rbr�zBackend._zeroed_bytearrayDsW�����v�
�
��	(��H�H�H��O�O�B��'�'�'�'�'��D�O�O�B��'�'�'�'���s	�/�Ac�4�t|��D]}d||<�dSr�)�range)r�rTr�is    rbrzBackend._zero_dataQs.���v���	�	�A��D��G�G�	�	rac#�K�|�|jjV�dSt|��}|j�d|dz��}|j�|||��	|V�|�|j�d|��|��dS#|�|j�d|��|��wxYw)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�rmz	uint8_t *)rrr�r�r��memmover�cast)r�rT�data_lenr�s    rb�_zeroed_null_terminated_bufz#Backend._zeroed_null_terminated_bufXs������<��)�.� � � � � ��4�y�y�H��)�-�-��(�Q�,�7�7�C��I���c�4��2�2�2�
L��	�	�	�����	���{�C� @� @�(�K�K�K�K�K������	���{�C� @� @�(�K�K�K�K���s�B�1Cc��|�||��}|j|jr|jjndd�|jD��fS)Nc��g|]	}|j��
Sr`)�certificate�rr�s  rb�
<listcomp>zABackend.load_key_and_certificates_from_pkcs12.<locals>.<listcomp>zs��B�B�B�$�T�
�B�B�Bra)�load_pkcs12r�r�r(�additional_certs)r�rTre�pkcs12s    rb�%load_key_and_certificates_from_pkcs12z-Backend.load_key_and_certificates_from_pkcs12osP���!�!�$��1�1���J�'-�{�<�F�K�#�#��B�B�&�*A�B�B�B�
�	
rac�X�|�tjd|��|�|��}|j�|j|jj��}||jjkr#|���td���|j�
||jj��}|j�d��}|j�d��}|j�d��}|�
|��5}|j�|||||��}	ddd��n#1swxYwY|���|	dkrtd���d}
d}g}|d|jjkr@|j�
|d|jj��}
|�|
��}|d|jjkr�|j�
|d|jj��}|�|��}d}|j�||jj��}||jjkr|j�|��}t+||��}
|d|jjk�r�|j�
|d|jj��}|j�|d��}|jjs|jjrt5|��}nt7t5|����}|D]�}|j�||��}|�||jjk��|j�
||jj��}|�|��}d}|j�||jj��}||jjkr|j�|��}|�t+||������t?||
|��S)Nrez!Could not deserialize PKCS12 datar�zX509 **zCryptography_STACK_OF_X509 **rzInvalid password or PKCS12 data) rrrYrt�d2i_PKCS12_biorYrrr�rr�r/�PKCS12_freer�r%�PKCS12_parserNr�r�r��X509_alias_get0r�rT�sk_X509_free�sk_X509_numrrpr�reversed�
sk_X509_valuer�r�rU)r�rTrerY�p12�evp_pkey_ptr�x509_ptr�sk_x509_ptr�password_bufr�r�r��additional_certificatesr5r�cert_objr��
maybe_name�sk_x509r"�indicesr �	addl_cert�	addl_names                        rbr+zBackend.load_pkcs12}s������"�:�x�8�8�8�� � ��&�&���i�&�&�s�w��	��?�?���$�)�.� � �� � �"�"�"��@�A�A�A��i�l�l�3��	� 5�6�6���y�}�}�]�3�3���9�=�=��+�+���i�m�m�$C�D�D��
�
-�
-�h�
7�
7�	�<��)�(�(��\�<��;���C�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
�������!�8�8��>�?�?�?�����"$����?�d�i�n�,�,��y�|�|�L��O�T�Y�5L�M�M�H��/�/��9�9�C��A�;�$�)�.�(�(��9�<�<����T�Y�-@�A�A�D����t�,�,�H��D���2�2�4����H�H�J��T�Y�^�+�+��y�'�'�
�3�3��$�X�t�4�4�D��q�>�T�Y�^�+�+��i�l�l�;�q�>�4�9�3I�J�J�G��)�'�'��A��7�7�C��	�=�
/��9�6�
/� ��*�*���"�5��:�:�.�.���
�
���y�.�.�w��:�:���#�#�D�D�I�N�$:�;�;�;��y�|�|�D�$�)�*=�>�>�� �O�O�D�1�1�	� �	�!�Y�6�6�t�T�Y�^�L�L�
�����/�/� $�	� 0� 0�� <� <�I�'�.�.�%�i��;�;�����(��T�3J�K�K�Ks�D=�=E�Er��casc�h
�d}|�tjd|��t|tj��rd}d}d}	d}
|jj}�n�t|tj��rV|jj	r|jj
}|jj
}n|jj}|jj}d}	d}
|jj}|j}�n@t|tj
���r|jtjjur�d}d}d}	d}
|j}|j}|t$jur|jj}|jj}nF|t$jur4|jj	st+d���|jj
}|jj
}n|�J�|j�Y|jjst+d���|�|j��}|�||jjk��n|jj}|j�|j}	nt7d���|�t9|��dkr|jj}
�nA|j���}
|j�|
|jj��}
g}|D]�}t|t@��r�|j!}|�"|j#��}|�$|��5}|j�%||d��}|�|dk��ddd��n#1swxYwYn|�"|��}|�&|��|j�'|
|��}tP�|dk����|�$|��5}|�$|��5}|r|�"|��n|jj}|�|j)}n|jj}|j�*|||||
|||	|
d�
�
}||jjkr$|�+��}t7d	|���	ddd��n#1swxYwY|jjr:||jjkr*|j�,||d|jjd|
|��ddd��n#1swxYwY|�||jjk��|j�||jj-��}|�.��}|j�/||��}|�|dk��|�0|��S)
Nr�rri Nrmz2PBESv2 is not supported by this version of OpenSSLzBSetting MAC algorithm is not supported by this version of OpenSSL.zUnsupported key encryption typez=Failed to create PKCS12 (does the key match the certificate?))1rr�r�r(r�rrr�r�rtr�NID_aes_256_cbc�&NID_pbe_WithSHA1And3_Key_TripleDES_CBCrer�r�r��PKCS12�_key_cert_algorithmrS�PBESv1SHA1And3KeyTripleDESCBC�PBESv2SHA256AndAES256CBCr�
_hmac_hash�Cryptography_HAS_PKCS12_SET_MACr�r��_kdf_roundsr�r��sk_X509_new_nullr/r4rT�
friendly_namer�r(r%�X509_alias_set1r��sk_X509_push�backendr�
PKCS12_creater�PKCS12_set_macr1r^�i2d_PKCS12_biorc)r�r�r�r�rDrre�nid_cert�nid_key�pkcs12_iter�mac_iter�mac_alg�
keycertalgr@�ossl_cas�ca�ca_alias�ossl_ca�ca_name_bufr�r<�name_buf�	ossl_certr5r8r�rYs                           rb�(serialize_key_and_certificates_to_pkcs12z0Backend.serialize_key_and_certificates_to_pkcs12�s!��������v�t�,�,�,��*�M�,F�G�G�K	@��H��G��K��H��i�n�G�G�
� �-�"G�
�
�E	@��y�<�
K��9�4���)�3����9�K���)�J���K��H��i�n�G�+�4�H�H��$�m�&O�
�
�0	@�%�,��*�1�2�2�
�H��G��K��H�+�4�H�-�A�J��T�?�?�?��9�K���)�J����t�<�<�<��y�D��.�L���� �9�4���)�3���!�)�)�)�$�.�:��y�@��.�.�����>�>�(�3�����#�#�G�t�y�~�$=�>�>�>�>��)�.��#�/�;�2�>����>�?�?�?��;�#�c�(�(�a�-�-��i�n�G�G��i�0�0�2�2�G��i�l�l�7�D�I�,B�C�C�G��H��
1�
1���b�"3�4�4�2�!�/�H�"�o�o�b�n�=�=�G��9�9� ���6�$�"�i�7�7�#�[�"�����+�+�C�1�H�5�5�5�
6�6�6�6�6�6�6�6�6�6�6����6�6�6�6��#�o�o�b�1�1�G�����(�(�(��i�,�,�W�g�>�>���&�&�s�a�x�0�0�0�0�
�
-�
-�h�
7�
7�*	�<��1�1�$�7�7�
�8�59�M�D�O�O�D�1�1�1�t�y�~�	��?�"�}�H�H�#�y�~�H��i�-�-� ��������������$�)�.�(�(�!�1�1�3�3�F�$�,�����)�'
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�<�	�9�
��t�y�~�-�-��	�(�(�� ���I�N�������E*	�*	�*	�*	�*	�*	�*	�*	�*	�*	�*	����*	�*	�*	�*	�X	
���C�4�9�>�1�2�2�2��i�l�l�3��	� 5�6�6���%�%�'�'���i�&�&�s�C�0�0�����C�!�G�$�$�$��!�!�#�&�&�&sJ�,6K.�.K2	�5K2	�3R�	BP'�R�'P+	�+R�.P+	�/A	R�R�Rc�4�|jrdS|jjdkSr�)rwrt�Cryptography_HAS_POLY1305r�s rb�poly1305_supportedzBackend.poly1305_supportedm	s"����	��5��y�2�a�7�7rac��tjd|��t|��tkrt	d���t||��S)Nr�zA poly1305 key is 32 bytes long)rrr�rr�r)r�r�s  rb�create_poly1305_ctxzBackend.create_poly1305_ctxr	sF��
��u�c�*�*�*��s�8�8�)�)�)��>�?�?�?���c�*�*�*rac��|jjSr�r�r�s rb�pkcs7_supportedzBackend.pkcs7_supportedy	r�rac��tjd|��|�|��}|j�|j|jj|jj|jj��}||jjkr#|���td���|j�
||jj��}|�|��S�NrTzUnable to parse PKCS7 data)
rr�rYrt�PEM_read_bio_PKCS7rYrrr�rr�r/�
PKCS7_free�_load_pkcs7_certificates�r�rTrY�p7s    rb�load_pem_pkcs7_certificatesz#Backend.load_pem_pkcs7_certificates|	s���	��6�4�(�(�(�� � ��&�&��
�Y�
)�
)��G�T�Y�^�T�Y�^�T�Y�^�
�
��������� � �"�"�"��9�:�:�:�
�Y�\�\�"�d�i�2�
3�
3���,�,�R�0�0�0rac��tjd|��|�|��}|j�|j|jj��}||jjkr#|���td���|j�
||jj��}|�|��Srm)
rr�rYrt�
d2i_PKCS7_biorYrrr�rr�r/rorprqs    rb�load_der_pkcs7_certificatesz#Backend.load_der_pkcs7_certificates�	s���	��6�4�(�(�(�� � ��&�&��
�Y�
$�
$�S�W�d�i�n�
=�
=��
������� � �"�"�"��9�:�:�:�
�Y�\�\�"�d�i�2�
3�
3���,�,�R�0�0�0rac�:�|j�|j��}|�||jjk��||jjkr-t
d�|��tj	���g}|j
j|jj
kr|S|j
jj}|j�|��}t!|��D]�}|j�||��}|�||jj
k��|j�|��}|�|dk��|j�||jj��}|�|��}	|�|	����|S)NzNOnly basic signed structures are currently supported. NID for this data was {}rm)rt�OBJ_obj2nidr�r�r,�NID_pkcs7_signedrr�r�UNSUPPORTED_SERIALIZATIONr?�signrrr�r�r5rr7�X509_up_refr/r�r�r�)
r�rrr{�certsr@r"r rr�r�s
          rbrpz Backend._load_pkcs7_certificates�	sk���i�#�#�B�G�,�,�����C�4�9�#6�6�7�7�7��$�)�,�,�,�&�(�(.��s����2���
�)+��
�4�9��	��&�&��L��$�)�.���i�#�#�G�,�,���s���		�		�A��9�*�*�7�A�6�6�D������	�� 6�7�7�7��)�'�'��-�-�C�
����q��)�)�)��9�<�<��d�i�&9�:�:�D��?�?�4�(�(�D��L�L�������rar}c��t|��}|rtd�|D����std���|tjjtjjfvrtd���|j���}|j	�
||jj��}g}|D]`}|�|��}|�
|��|j�||��}|�|dk���a|j�|j	j|j	j||j	j|jj��}|���}	|tjjur(|j�|	||j	jd��}n0|tjjusJ�|j�|	|��}|�|dk��|�|	��S)Nc3�JK�|]}t|tj��V��dSr�)r�r�Certificater)s  rbrz7Backend.pkcs7_serialize_certificates.<locals>.<genexpr>�	s@���� 
� 
�37�J�t�T�-�.�.� 
� 
� 
� 
� 
� 
raz.certs must be a list of certs with length >= 1z/encoding must DER or PEM from the Encoding enumrmr)�list�allr�r(r�r�r�rtrOrrr/r4r�r�rRr��
PKCS7_signr��
PKCS7_PARTIALr^�PEM_write_bio_PKCS7_stream�
i2d_PKCS7_biorc)
r�r}r~�certs_sk�
ossl_certsr�rcr�rr�bio_outs
          rb�pkcs7_serialize_certificatesz$Backend.pkcs7_serialize_certificates�	s��
�U�����	N�C� 
� 
�;@� 
� 
� 
�
�
�	N��L�M�M�M���"�&��"�&�
�
�
��M�N�N�N��9�-�-�/�/���9�<�<��$�)�*@�A�A���
��	*�	*�D�����-�-�I����i�(�(�(��)�(�(��9�=�=�C�����q��)�)�)�)��Y�
!�
!��I�N��I�N���I�N��I�#�
�
���)�)�+�+���}�-�1�1�1��)�6�6���T�Y�^�Q���C�C��}�5�9�9�9�9�9��)�)�)�'�2�6�6�C����C�1�H�%�%�%��!�!�'�*�*�*ra�builder�optionsc��|j�J�|�|j��}|jj}d}t	|j��dkr
|jj}n�|j���}|j�	||jj
��}g}|jD]`}	|�|	��}
|�|
��|j�
||
��}|�|dk���atjj|vr||jjz}||jjz}|j�|jj|jj||jj|��}|�||jjk��|j�	||jj��}d}
tjj|vr|
|jjz}
n"tjj|vr|
|jjz}
tjj|vr|
|jjz}
|jD]v\}}}|�|��}
|�|��}|j�||
|j||
��}|�||jjk���w|D]G}|tjjur||jj z}�%|tjj!ur||jj"z}�H|�#��}|tHj%j&ur#|j�'|||j(|��}n�|tHj%j)ur]|j�*||j(|��}|�|dk��|j�+|||j(|��}n�|tHj%j,usJ�|j�*||j(|��}|�|dk��|jj-r|�.��|j�/||��}|�|dk��|�0|��S)Nrrm)1�_datarYrtr�r��_additional_certsrrr�rOr/r4r�r�rRr�rQ�PKCS7Options�DetachedSignature�PKCS7_DETACHEDr�ro�NoCapabilities�PKCS7_NOSMIMECAP�NoAttributes�PKCS7_NOATTR�NoCerts�
PKCS7_NOCERTS�_signersr��PKCS7_sign_add_signerr�Text�
PKCS7_TEXT�Binary�PKCS7_BINARYr^r(r��SMIME�SMIME_write_PKCS7rYr��PKCS7_finalr�r�rrr�rc)r�r�r~r�rY�
init_flags�final_flagsr}r�r�rcr�rr�signer_flagsr(�private_key�hash_algorithm�md�p7signerinfo�optionr�s                     rb�
pkcs7_signzBackend.pkcs7_sign�	s7���}�(�(�(�� � ���/�/���Y�,�
����w�(�)�)�Q�.�.��I�N�E�E��I�.�.�0�0�E��I�L�L���	�(>�?�?�E��J��1�
.�
.�� �O�O�D�1�1�	��!�!�)�,�,�,��i�,�,�U�I�>�>���#�#�C�1�H�-�-�-�-���/�7�:�:��$�)�2�2�J��4�9�3�3�K��Y�
!�
!��I�N��I�N���I�N��
�
��	
���B�$�)�.�0�1�1�1�
�Y�\�\�"�d�i�2�
3�
3������,��7�7��D�I�6�6�L�L�
�
�
,��
7�
7��D�I�2�2�L���%��0�0��D�I�3�3�L�8?�8H�
	@�
	@�4�K��n�����4�4�I��5�5�n�E�E�B��9�:�:����%�����L�
�����	�� >�?�?�?�?��	6�	6�F���+�0�0�0��t�y�3�3����5�-�4�4�4��t�y�5�5����)�)�+�+���}�-�3�3�3��)�-�-���S�W�k���C�C���/�3�
3�
3��)�'�'��C�G�[�A�A�C�����q��)�)�)��)�6�6���S�W�k���C�C��}�5�9�9�9�9�9��)�'�'��C�G�[�A�A�C�����q��)�)�)��y�<�
'��$�$�&�&�&��)�)�)�'�2�6�6�C����C�1�H�%�%�%��!�!�'�*�*�*rar�)r�N)�r]r^r_�__doc__r�rr;r�r'r�r�r�r��
SHA512_224�
SHA512_256�SHA3_224�SHA3_256�SHA3_384�SHA3_512�SHAKE128�SHAKE256r�r,�	SECP224R1�	SECP256R1�	SECP384R1�	SECP521R1r`�_fips_rsa_min_key_size�_fips_rsa_min_public_exponent�_fips_dsa_min_modulus�_fips_dh_min_key_size�_fips_dh_min_modulusr��strr�r��typing�Optional�Listr&�
_OpenSSLErrorr�rvr�r��
contextlibrr�r~r�r�rr��bytes�
HashAlgorithmrr�r�r�r�r�r�r��HashContextr�r:rMr�r�ryr	r�rrrr�_OpenSSLErrorWithTextrr!r)r/�
RSAPrivateKeyr6r9�RSAPrivateNumbersrH�RSAPublicNumbers�RSAPublicKeyrKrPr3rYr^rcr7r�r8r�r�r)r�r+�
DSAParametersr��
DSAPrivateKeyr�r�r��DSAPrivateNumbersr��DSAPublicNumbers�DSAPublicKeyr��DSAParameterNumbersr�r�r�r�r�r9rr�r�r�r*�DHParametersr�rsr�r�r�rr��Anyr�r��CertificateSigningRequestr�r��CertificateRevocationListr�r�r6rr	rr��NoReturnr��
EllipticCurver1�EllipticCurveSignatureAlgorithmr5�EllipticCurvePrivateKeyr;�EllipticCurvePrivateNumbersrC�EllipticCurvePublicNumbers�EllipticCurvePublicKeyrErPrZr7r\rarbr9r+rKrRrAr(r�r�r�r�r�r�r�r�r�r�r��DHPrivateKeyr�r��DHPrivateNumbersr��DHPublicNumbers�DHPublicKeyr��DHParameterNumbersr�r�r�r0�X25519PublicKeyr��X25519PrivateKeyr�r�r�r�r1�
X448PublicKeyr��X448PrivateKeyr�r�r�r�r-�Ed25519PublicKeyr��Ed25519PrivateKeyrrrr.�Ed448PublicKeyr�Ed448PrivateKeyr	rrr�Iteratorrr�rr%�Tupler.rUr+rVrWrdrgrrirkrsrvrpr�rQ�PKCS7SignatureBuilderr�r�r`rarbrdrd�s����������D����J��F�M�	�
��
��
��
�����������������
�L�	��
��
��
��	��"��$)�!���I�� ��� 5�5��:�:�:�(
�#�
�
�
�
�GK�E�E��E�����G�,A� B�C�E�
�	E�E�E�E��$�����5�5�5�5�.�.�.�.���*�*���*�&
*�
*�
*�
*�5��5�5�5�5�	�c�	�	�	�	�/��/�/�/�/�2��2�%+�%9�2�	�2�2�2�2�
	��0D�	�	�	�	���9M�����
(��(<�(��(�(�(�(�.��-�.�	
�.�.�.�.�:�$�:�:�:�:�.��(<�.��.�.�.�.�-��-�-�	�	�-�-�-�-�
,��,�d�,�t�,�,�,�,�>�>�>�2�2�2�2�hK�%�K�-1�K�	�K�K�K�K�
K�%�K�-1�K�	�K�K�K�K�
.�v�/C�.��.�.�.�.�(��'�(��(��	(�
�(��
(�
�(�(�(�(�02���W�-B�!C�2�2�2�2�<�	��W�2�	3�<�<�<�<�

��
�
�
�
���c�����"
�"�
�.1�
�	�	�
�
�
�
�,
�"�
�.1�
�	
�
�
�
�
�"
��,�"
�	�	�"
�"
�"
�"
�H
8��+�
8�	�	�
8�
8�
8�
8�������K�%�K�K�K�K�	�	�	�	�E�	�	�	�	�>@�4E�>@�>@�>@�>@�@8@�3C�8@�8@�8@�8@�t

�f�.B�

�t�

�

�

�

��->��4�����&)��)��8I�)�)�)�)�03��+�3�	�	�3�3�3�3�9��9�	�	�9�9�9�9�&�&�&�9��,�9�	�	�9�9�9�9�*8��+�8�	�	�8�8�8�8�&/��.�/�	�	�/�/�/�/� ���&�t�&�&�&�&�8�F�,@�8�T�8�8�8�8�

�T�
�
�
�
�
-�)=�-�,�-�-�-�-�
��
�%+�_�U�%;�
�	�
�
�
�
�(1��(1�2B�(1�(1�(1�(1�T
-��
-�"�/�
-�
-�
-�
-����%+�_�U�%;��	�����*���&1��1�2B�1�1�1�1�.)��)�"�/�)�)�)�)�(�t�/��F�J�����L�v�z�L�d�.>�L�L�L�L��T�;���
�����D��
�D�	
�	'�D�D�D�D��T�;���
�����D��
�D�	
�	'�D�D�D�D��
�
+��8��
�	����4
��1�
�	
�
�
�
�
�7�7�7�3&�3&�3&�j-�6�?�-�-�-�-�^�b�.>��4����� 	4��?�	4���	4�
�		4�	4�	4�	4���%��	�	#�����,B��5�B�	�	#�B�B�B�B�.	A��4�	A�	�	"�	A�	A�	A�	A�A��%�A�49�A�	�	"�A�A�A�A�,%B� �%B�)+�)9�%B�	�	#�%B�%B�%B�%B�N8�"�*:�8�8�8�8�=�#�=�=�=�=�


���

�)+�)9�

�	
�

�

�

�

�����B�,<�������"�)�)��^�)����80��0��0�0�0�0�$x<��(�x<��+�x<�,�F�	x<�
�x<�x<�x<�x<�t
�
�
�"'�'�'�5<��(�5<��*�5<�
�5<�5<�5<�5<�n7�d�7�7�7�7�3��3�(+�3�	��3�3�3�3�0���;��/�;�	��;�;�;�;�
��
�(+�
�	��
�
�
�
�.7��*�.7�	��.7�.7�.7�.7�`6��)�6�	��6�6�6�6�:-��,�-�	��-�-�-�-�*9=�������!'���!5��	
�����0<��<�<�<�<�
0�U�
0�v�7M�
0�
0�
0�
0�"1��"1�	�	 �"1�"1�"1�"1�H���1�V�%<�1�1�1�1�6�$�6�6�6�6�
	.�5�	.�T�5G�	.�	.�	.�	.�
/�E�
/�d�6I�
/�
/�
/�
/�/�4�#6�/�/�/�/�
��
�
�
�
�A�4�A�A�A�A�
1��1�	�	!�1�1�1�1� 2��2�	�	"�2�2�2�2� 2�g�&?�2�2�2�2�
��
�
�
�
�/�E�/�e�6J�/�/�/�/�0�U�0�u�7L�0�0�0�0�0�E�$9�0�0�0�0�!(��!(��!(��	!(�
�!(��
!(��!(�
�!(�!(�!(�!(�F�t�������
(��
(���	�0J�
(�
(�
(���
(��s��t�������L�L���L�,
��
�%+�_�U�%;�
�	����)�*����(�)���D�$�%�	'�
�
�
�
�
�HL��HL�%+�_�U�%;�HL�	!�HL�HL�HL�HL�Td'��o�e�$�d'��_�2�
3�d'��o�d�.�/�	d'�
�_�V�[�):�;�
<�d'�,�F�
d'�
�d'�d'�d'�d'�L8�D�8�8�8�8�
+�u�+�1A�+�+�+�+�7��7�7�7�7�
1��
1�	��T�%�	&�
1�
1�
1�
1�1��1�	��T�%�	&�1�1�1�1����:-+��{�4�+�,�-+� �(�-+�-+�-+�-+�^`+��,�`+� �(�`+���U�/�0�	`+�

�`+�`+�`+�`+�`+�`+rardc�.�eZdZdefd�Zdededefd�ZdS)r��fmtc��||_dSr�)�_fmt)r�r�s  rbr�zGetCipherByName.__init__H
s
����	�	�	rarSr�r�c��|j�||������}|j�|�d����}||jjkrO|jjrC|j�	|jj|�d��|jj��}|�
��|S)N)r�r�r�)r�r��lowerrtr�r�rrr��Cryptography_HAS_300_EVP_CIPHER�EVP_CIPHER_fetchr)r�rSr�r�rr�s      rb�__call__zGetCipherByName.__call__K
s����i�&�&�f�4�&�@�@�F�F�H�H���\�6�6����w�'�'�
�
�
�
�'�,�+�+�+���<�
,�!��6�6���!��"�"�7�+�+���!���J�	���!�!�!��raN)	r]r^r_r�r�rdr:rMr�r`rarbr�r�G
sX�������C����������������rar�rSr�c��d�|jdz��}|j�|�d����S)Nz
aes-{}-xtsr�r�)r�r+rtr�r�)rSr�r�rs    rbr�r�`
s@���%�%�f�o��&:�;�;�K��<�,�,�[�-?�-?��-H�-H�I�I�Ira)|�collectionsr�r�r�r{r�cryptographyrr�cryptography.exceptionsrr�$cryptography.hazmat.backends.opensslr�,cryptography.hazmat.backends.openssl.ciphersr	�)cryptography.hazmat.backends.openssl.cmacr�'cryptography.hazmat.backends.openssl.dhrr
rr�(cryptography.hazmat.backends.openssl.dsarrr�'cryptography.hazmat.backends.openssl.ecrr�,cryptography.hazmat.backends.openssl.ed25519rr�*cryptography.hazmat.backends.openssl.ed448rrr�+cryptography.hazmat.backends.openssl.hashesr�)cryptography.hazmat.backends.openssl.hmacr�-cryptography.hazmat.backends.openssl.poly1305rr�(cryptography.hazmat.backends.openssl.rsar r!�+cryptography.hazmat.backends.openssl.x25519r"r#�)cryptography.hazmat.backends.openssl.x448r$r%�"cryptography.hazmat.bindings._rustr��$cryptography.hazmat.bindings.opensslr&�cryptography.hazmat.primitivesr'r(�*cryptography.hazmat.primitives._asymmetricr)�)cryptography.hazmat.primitives.asymmetricr*r+r,r-r.r/r0r1�1cryptography.hazmat.primitives.asymmetric.paddingr2r3r4r5�/cryptography.hazmat.primitives.asymmetric.typesr6r7r8�&cryptography.hazmat.primitives.ciphersr9r:�1cryptography.hazmat.primitives.ciphers.algorithmsr;r<r=r>r?r@rArBrCrDrErF�,cryptography.hazmat.primitives.ciphers.modesrGrHrIrJrKrLrMrNrO�"cryptography.hazmat.primitives.kdfrP�,cryptography.hazmat.primitives.serializationrQrR�3cryptography.hazmat.primitives.serialization.pkcs12rSrTrUrVrW�
namedtuplerXr\rdr�r�rSr`rarb�<module>rs��������������
�
�
�
�����%�%�%�%�%�%�$�$�$�$�$�$�$�$�B�B�B�B�B�B�B�B�5�5�5�5�5�5�G�G�G�G�G�G�B�B�B�B�B�B�����������������������
��������������������������
E�D�D�D�D�D�B�B�B�B�B�B���������������������������������������9�8�8�8�8�8�@�@�@�@�@�@�@�@�H�H�H�H�H�H�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�����������������������
��������
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�6�5�5�5�5�5�C�C�C�C�C�C�C�C���������������$�[�
#�L�5�*�2E�
F�
F�
�	�	�	�	�	�	�	�	�}&+�}&+�}&+�}&+�}&+�}&+�}&+�}&+�@N��������2J�W�J�c�J�J�J�J�
�'�)�)���ra

Youez - 2016 - github.com/yon3zu
LinuXploit