U
    ʹh'                     @  s   d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZ d d
lmZ d dlmZmZ G dd dZe ZdS )    )annotations)openssl)binding)hashes)AsymmetricPadding)ec)utils)MGF1OAEPPSSPKCS1v15)CipherAlgorithm)AES)CBCModec                   @  s^  e Zd ZdZdZefZejej	ej
ejejejejejejejejejfZejejejejfZdZdZdd> ZdZde> Zdddd	Z d
dddZ!dddddZ"ddddZ#d
dddZ$ddddZ%dddddZ&dddddZ'ddddZ(ddd d!Z)dddd"d#Z*d$d%dd&d'd(Z+dddd)d*Z,d+dd,d-Z-dddd.d/Z.d0dd1d2d3Z/d0dd1d4d5Z0ddd6d7Z1dddd8d9Z2ddd:d;Z3d<dd=d>d?Z4d@d<ddAdBdCZ5dDd<ddEdFdGZ6dddHdIZ7dddJdKZ8dddLdMZ9dddNdOZ:dddPdQZ;dddRdSZ<dddTdUZ=dddVdWZ>dddXdYZ?dZS )[Backendz)
    OpenSSL API binding interfaces.
    r   i   i     None)returnc                 C  s,   t  | _| jj| _| jj| _t | _	d S N)
r   ZBindingZ_bindingZffiZ_ffilib_librust_opensslis_fips_enabled_fips_enabledself r   R./venv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/backend.py__init__E   s    


zBackend.__init__strc                 C  s    d|    d| j dtj dS )Nz<OpenSSLBackend(version: z, FIPS: z
, Legacy: z)>)openssl_version_textr   r   Z_legacy_provider_loadedr   r   r   r   __repr__K   s    zBackend.__repr__bool)okr   c                 C  s
   t |S r   )r   Z_openssl_assert)r   r$   r   r   r   openssl_assertR   s    zBackend.openssl_assertc                 C  s&   t t j t  stt  | _d S r   )r   Zenable_fipsZ
_providersr   AssertionErrorr   r   r   r   r   _enable_fipsU   s    zBackend._enable_fipsc                 C  s   t  S )z
        Friendly string name of the loaded OpenSSL library. This is not
        necessarily the same version as it was compiled against.

        Example: OpenSSL 3.2.1 30 Jan 2024
        )r   r!   r   r   r   r   r!   \   s    zBackend.openssl_version_textintc                 C  s   t  S r   )r   Zopenssl_versionr   r   r   r   openssl_version_numbere   s    zBackend.openssl_version_numberzhashes.HashAlgorithm)	algorithmr   c                 C  s"   | j rt|| jsdS tj|S NF)r   
isinstance_fips_hashesr   r   hash_supportedr   r*   r   r   r   r.   h   s    zBackend.hash_supportedc                 C  s    | j rt|tjrdS | |S r+   )r   r,   r   SHA1r.   r/   r   r   r   signature_hash_supportedn   s    z Backend.signature_hash_supportedc                 C  s   | j r
dS ttjjdS d S NFZderive)r   hasattrr   kdfZScryptr   r   r   r   scrypt_supportedw   s    zBackend.scrypt_supportedc                 C  s   | j r
dS ttjjdS d S r2   )r   r3   r   r4   ZArgon2idr   r   r   r   argon2_supported}   s    zBackend.argon2_supportedc              	   C  sL   | j rt|tjrdS tjrBt|tjtjtjtjtj	tj
tjfS | |S )NT)r   r,   r   r0   r   CRYPTOGRAPHY_IS_AWSLCSHA224SHA256SHA384SHA512
SHA512_224
SHA512_256r.   r/   r   r   r   hmac_supported   s    zBackend.hmac_supportedr   r   )ciphermoder   c                 C  s$   | j rt|| jsdS tj||S r+   )r   r,   _fips_ciphersr   Zcipherscipher_supported)r   r?   r@   r   r   r   rB      s    zBackend.cipher_supportedc                 C  s
   |  |S r   )r>   r/   r   r   r   pbkdf2_hmac_supported   s    zBackend.pbkdf2_hmac_supportedzlist[rust_openssl.OpenSSLError]c                 C  s   t  S r   )r   Zcapture_error_stackr   r   r   r   _consume_errors   s    zBackend._consume_errorsc                 C  s4   | j rt|tjrdS t|tjtjtjtjtjfS r+   )r   r,   r   r0   r8   r9   r:   r;   r/   r   r   r   _oaep_hash_supported   s    zBackend._oaep_hash_supportedr   )paddingr   c                 C  s   t |trdS t |trHt |jtrH| jr:|jtjkr:dS | |jj	S t |t
rxt |jtrx| |jj	ov| |j	S dS d S )NTF)r,   r   r   Z_mgfr	   r   Z_salt_lengthZDIGEST_LENGTHr.   Z
_algorithmr
   rE   r   rF   r   r   r   rsa_padding_supported   s     


zBackend.rsa_padding_supportedc                 C  s"   | j rt|trdS | |S d S r+   )r   r,   r   rH   rG   r   r   r   rsa_encryption_supported   s    z Backend.rsa_encryption_supportedc                 C  s   t j o| j S r   )r   CRYPTOGRAPHY_IS_BORINGSSLr   r   r   r   r   dsa_supported   s    zBackend.dsa_supportedc                 C  s   |   sdS | |S r+   )rK   r1   r/   r   r   r   dsa_hash_supported   s    zBackend.dsa_hash_supportedc                 C  s   |  |td|j S )N    )rB   r   Z
block_sizer/   r   r   r   cmac_algorithm_supported   s     z Backend.cmac_algorithm_supportedzec.EllipticCurve)curver   c                 C  s"   | j rt|| jsdS tj|S r+   )r   r,   _fips_ecdh_curvesr   r   Zcurve_supported)r   rO   r   r   r   elliptic_curve_supported   s     z Backend.elliptic_curve_supportedz"ec.EllipticCurveSignatureAlgorithm)signature_algorithmrO   r   c                 C  s4   t |tjsdS | |o2t |jtjp2| |jS r+   )r,   r   ZECDSArQ   r*   
asym_utilsZ	Prehashedr.   )r   rR   rO   r   r   r   ,elliptic_curve_signature_algorithm_supported   s    

z4Backend.elliptic_curve_signature_algorithm_supportedzec.ECDH)r*   rO   r   c                 C  s   |  |ot|tjS r   )rQ   r,   r   ZECDH)r   r*   rO   r   r   r   +elliptic_curve_exchange_algorithm_supported   s     z3Backend.elliptic_curve_exchange_algorithm_supportedc                 C  s   t j ot j S r   r   rJ   r7   r   r   r   r   dh_supported   s    zBackend.dh_supportedc                 C  s   | j jdkS )Nr   )r   ZCryptography_HAS_EVP_PKEY_DHXr   r   r   r   dh_x942_serialization_supported  s    z'Backend.dh_x942_serialization_supportedc                 C  s   | j  S r   r   r   r   r   r   x25519_supported  s    zBackend.x25519_supportedc                 C  s"   | j r
dS tj o tj o tj S r+   r   r   ZCRYPTOGRAPHY_IS_LIBRESSLrJ   r7   r   r   r   r   x448_supported	  s    zBackend.x448_supportedc                 C  s   | j  S r   rY   r   r   r   r   ed25519_supported  s    zBackend.ed25519_supportedc                 C  s"   | j r
dS tj o tj o tj S r+   r[   r   r   r   r   ed448_supported  s    zBackend.ed448_supportedc                 C  s   t jo| j S r   )r   Z#CRYPTOGRAPHY_OPENSSL_320_OR_GREATERr   r   r   r   r   ecdsa_deterministic_supported  s    z%Backend.ecdsa_deterministic_supportedc                 C  s   | j  S r   rY   r   r   r   r   poly1305_supported$  s    zBackend.poly1305_supportedc                 C  s   t j ot j S r   rV   r   r   r   r   pkcs7_supported'  s    zBackend.pkcs7_supportedN)@__name__
__module____qualname____doc__namer   rA   r   r8   r9   r:   r;   r<   r=   ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ZSHAKE128ZSHAKE256r-   r   Z	SECP224R1Z	SECP256R1Z	SECP384R1Z	SECP521R1rP   Z_fips_rsa_min_key_sizeZ_fips_rsa_min_public_exponentZ_fips_dsa_min_modulusZ_fips_dh_min_key_sizeZ_fips_dh_min_modulusr   r"   r%   r'   r!   r)   r.   r1   r5   r6   r>   rB   rC   rD   rE   rH   rI   rK   rL   rN   rQ   rT   rU   rW   rX   rZ   r\   r]   r^   r_   r`   ra   r   r   r   r   r      st   					r   N)Z
__future__r   Z"cryptography.hazmat.bindings._rustr   r   Z$cryptography.hazmat.bindings.opensslr   Zcryptography.hazmat.primitivesr   Z*cryptography.hazmat.primitives._asymmetricr   Z)cryptography.hazmat.primitives.asymmetricr   r   rS   Z1cryptography.hazmat.primitives.asymmetric.paddingr	   r
   r   r   Z&cryptography.hazmat.primitives.ciphersr   Z1cryptography.hazmat.primitives.ciphers.algorithmsr   Z,cryptography.hazmat.primitives.ciphers.modesr   r   r   Zbackendr   r   r   r   <module>   s     