U
    2ÜŸj˜(  ã                   @  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                   @  sz  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?ddœdZd[„Z@ddœd\d]„ZAd^S )_ÚBackendz)
    OpenSSL API binding interfaces.
    r   i   i  é   ÚNone)Úreturnc                 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   úP/tmp/pip-unpacked-wheel-mmhsgb0a/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   Ú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   r0   h   s    zBackend.hash_supportedc                 C  s    | j rt|tjƒrdS |  |¡S r-   )r   r.   r   ÚSHA1r0   r1   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 r4   )r   r5   r   r6   ZArgon2idr   r   r   r   Úargon2_supported}   s    zBackend.argon2_supportedc              
   C  sP   | j rt|tjƒrdS tjrFt|tjtjtjtjtj	tj
tjtjfƒS |  |¡S ©NT)r   r.   r   r2   r   ÚCRYPTOGRAPHY_IS_AWSLCÚMD5ÚSHA224ÚSHA256ÚSHA384ÚSHA512Ú
SHA512_224Ú
SHA512_256r0   r1   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   ÚciphersÚcipher_supported)r   rC   rD   r   r   r   rG   —   s    zBackend.cipher_supportedc                 C  s
   |   |¡S r   )rB   r1   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   r2   r<   r=   r>   r?   r1   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_LENGTHr0   Ú
_algorithmr
   rJ   ©r   rK   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   rN   rM   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-   )rQ   r3   r1   r   r   r   Údsa_hash_supported×   s    zBackend.dsa_hash_supportedc                 C  s   |   |td|j ƒ¡S )Nó    )rG   r   Ú
block_sizer1   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   rV   r   r   r   Úelliptic_curve_supportedá   s     ÿz Backend.elliptic_curve_supportedz"ec.EllipticCurveSignatureAlgorithm)Úsignature_algorithmrV   r   c                 C  s4   t |tjƒsdS |  |¡o2t |jtjƒp2|  |j¡S r-   )r.   r   ZECDSArX   r,   Ú
asym_utilsZ	Prehashedr0   )r   rY   rV   r   r   r   Ú,elliptic_curve_signature_algorithm_supportedé   s    

þz4Backend.elliptic_curve_signature_algorithm_supportedzec.ECDH)r,   rV   r   c                 C  s   |   |¡ot|tjƒS r   )rX   r.   r   ZECDH)r   r,   rV   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   rP   r:   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   ÚCRYPTOGRAPHY_IS_LIBRESSLrP   r:   r   r   r   r   Úx448_supported
  s    ÿýzBackend.x448_supportedc                 C  s   t jp
t jS r   ©r   r:   rP   r   r   r   r   Úmlkem_supported  s    þzBackend.mlkem_supportedc                 C  s   t jp
t jS r   rc   r   r   r   r   Úmldsa_supported  s    þzBackend.mldsa_supportedc                 C  s   dS r9   r   r   r   r   r   Úed25519_supported  s    zBackend.ed25519_supportedc                 C  s   t j ot j ot j S r   )r   ra   rP   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   r_   r   r   r   r   Úpoly1305_supported/  s    zBackend.poly1305_supportedc                 C  s   dS r9   r   r   r   r   r   Úpkcs7_supported2  s    zBackend.pkcs7_supportedN)BÚ__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   rE   r   r<   r=   r>   r?   r@   rA   ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ZSHAKE128ZSHAKE256r/   r   Z	SECP224R1Z	SECP256R1Z	SECP384R1Z	SECP521R1rW   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+   r0   r3   r7   r8   rB   rG   rH   rI   rJ   rN   rO   rQ   rR   rU   rX   r[   r\   r]   r^   r`   rb   rd   re   rf   rg   rh   ri   rj   r   r   r   r   r      sx   ôü				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   rZ   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     