o
    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	Z d\ddZ!d]ddZ"d[ddZ#d\ddZ$d^ddZ%d_ddZ&d_ddZ'd`ddZ(d`d d!Z)d_d"d#Z*dad(d)Z+d_d*d+Z,dbd-d.Z-d_d/d0Z.dcd3d4Z/dcd5d6Z0d`d7d8Z1d_d9d:Z2d`d;d<Z3ddd?d@Z4dedCdDZ5dfdFdGZ6d`dHdIZ7d`dJdKZ8d`dLdMZ9d`dNdOZ:d`dPdQZ;d`dRdSZ<d`dTdUZ=d`dVdWZ>d`dXdYZ?dZS )gBackendz)
    OpenSSL API binding interfaces.
    r   i   i     returnNonec                 C  s,   t  | _| jj| _| jj| _t | _	d S N)
r   ZBindingZ_bindingffiZ_ffilib_librust_opensslis_fips_enabled_fips_enabledself r   _/var/www/html/venv/lib/python3.10/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__okboolc                 C  s
   t |S r   )r   Z_openssl_assert)r   r$   r   r   r   openssl_assertR      
zBackend.openssl_assertc                 C  s&   t t j t  sJ t  | _d S r   )r   Zenable_fipsZ
_providersr   r   r   r   r   r   _enable_fipsU   s   zBackend._enable_fipsc                 C     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  r)   r   )r   openssl_versionr   r   r   r   openssl_version_numbere      zBackend.openssl_version_number	algorithmhashes.HashAlgorithmc                 C  "   | j rt|| jsdS tj|S NF)r   
isinstance_fips_hashesr   r   hash_supportedr   r.   r   r   r   r4   h   s   zBackend.hash_supportedc                 C      | j rt|tjrdS | |S r1   r   r2   r   SHA1r4   r5   r   r   r   signature_hash_supportedn   s   
z Backend.signature_hash_supportedc                 C     | j rdS ttjjdS NFZderive)r   hasattrr   kdfZScryptr   r   r   r   scrypt_supportedw      zBackend.scrypt_supportedc                 C  r:   r;   )r   r<   r   r=   ZArgon2idr   r   r   r   argon2_supported}   r?   zBackend.argon2_supportedc                 C  r6   )NTr7   r5   r   r   r   hmac_supported   s   
zBackend.hmac_supportedcipherr   moder   c                 C  s$   | j rt|| jsdS tj||S r1   )r   r2   _fips_ciphersr   cipherscipher_supported)r   rB   rC   r   r   r   rF      s   zBackend.cipher_supportedc                 C  s
   |  |S r   )rA   r5   r   r   r   pbkdf2_hmac_supported   r'   zBackend.pbkdf2_hmac_supportedlist[rust_openssl.OpenSSLError]c                 C  r)   r   )r   Zcapture_error_stackr   r   r   r   _consume_errors   r-   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 r1   )r   r2   r   r8   SHA224SHA256SHA384SHA512r5   r   r   r   _oaep_hash_supported   s   zBackend._oaep_hash_supportedpaddingr   c                 C  s|   t |trdS t |tr$t |jtr$| jr|jtjkrdS | |jj	S t |t
r<t |jtr<| |jj	o;| |j	S dS )NTF)r2   r   r   Z_mgfr	   r   Z_salt_lengthZDIGEST_LENGTHr4   
_algorithmr
   rN   r   rO   r   r   r   rsa_padding_supported   s   

zBackend.rsa_padding_supportedc                 C  s   | j r
t|tr
dS | |S r1   )r   r2   r   rR   rQ   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 r1   )rU   r9   r5   r   r   r   dsa_hash_supported   s   
zBackend.dsa_hash_supportedc                 C  s   |  |td|j S )N    )rF   r   
block_sizer5   r   r   r   cmac_algorithm_supported   s   z Backend.cmac_algorithm_supportedcurveec.EllipticCurvec                 C  r0   r1   )r   r2   _fips_ecdh_curvesr   r   Zcurve_supported)r   rZ   r   r   r   elliptic_curve_supported   s
   z Backend.elliptic_curve_supportedsignature_algorithm"ec.EllipticCurveSignatureAlgorithmc                 C  s4   t |tjsdS | |ot |jtjp| |jS r1   )r2   r   ZECDSAr]   r.   
asym_utilsZ	Prehashedr4   )r   r^   rZ   r   r   r   ,elliptic_curve_signature_algorithm_supported   s   

z4Backend.elliptic_curve_signature_algorithm_supportedec.ECDHc                 C  s   |  |o
t|tjS r   )r]   r2   r   ZECDH)r   r.   rZ   r   r   r   +elliptic_curve_exchange_algorithm_supported   s   z3Backend.elliptic_curve_exchange_algorithm_supportedc                 C     t j S r   r   rT   r   r   r   r   dh_supported   r-   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     | j rdS dS NFTr   r   r   r   r   x25519_supported      zBackend.x25519_supportedc                 C     | j rdS tj otj S r1   r   r   ZCRYPTOGRAPHY_IS_LIBRESSLrT   r   r   r   r   x448_supported   
   zBackend.x448_supportedc                 C  rh   ri   rj   r   r   r   r   ed25519_supported  rl   zBackend.ed25519_supportedc                 C  rm   r1   rn   r   r   r   r   ed448_supported	  rp   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  rh   ri   rj   r   r   r   r   poly1305_supported  rl   zBackend.poly1305_supportedc                 C  rd   r   re   r   r   r   r   pkcs7_supported  r-   zBackend.pkcs7_supportedN)r   r   )r   r!   )r$   r%   r   r   )r   r*   )r.   r/   r   r%   )r   r%   )rB   r   rC   r   r   r%   )r   rH   )rO   r   r   r%   )rZ   r[   r   r%   )r^   r_   rZ   r[   r   r%   )r.   rb   rZ   r[   r   r%   )@__name__
__module____qualname____doc__namer   rD   r   rJ   rK   rL   rM   Z
SHA512_224Z
SHA512_256ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ZSHAKE128ZSHAKE256r3   r   Z	SECP224R1Z	SECP256R1Z	SECP384R1Z	SECP521R1r\   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,   r4   r9   r>   r@   rA   rF   rG   rI   rN   rR   rS   rU   rV   rY   r]   ra   rc   rf   rg   rk   ro   rq   rr   rs   rt   ru   r   r   r   r   r      sv    





	


	



	

















r   N)
__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   r`   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   backendr   r   r   r   <module>   s     
