U
    üS‚gÅ$  ã                   @  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_bindingÚffiZ_ffiÚlibÚ_libÚrust_opensslÚis_fips_enabledÚ_fips_enabled©Úself© r   úP/tmp/pip-unpacked-wheel-xwsikbwl/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 r5   )r   r6   r   r7   ZArgon2idr   r   r   r   Úargon2_supported}   s    zBackend.argon2_supportedc                 C  s    | j rt|tjƒrdS |  |¡S )NTr2   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   r;   r<   r   r   r   r?   Š   s    zBackend.cipher_supportedc                 C  s
   |   |¡S r   )r:   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   r3   ÚSHA224ÚSHA256ÚSHA384ÚSHA512r1   r   r   r   Ú_oaep_hash_supported™   s    ûþzBackend._oaep_hash_supportedr   )Úpaddingr   c                 C  s†   t |tƒrdS t |tƒrNt |jtƒrN| jr>t |jjtjƒr>dS |  	|jj¡S n4t |t
ƒr~t |jtƒr~|  |jj¡o||  |j¡S dS d S )NTF)r.   r   r   Z_mgfr	   r   Ú
_algorithmr   r3   r0   r
   rF   ©r   rG   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   rJ   rI   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-   )rM   r4   r1   r   r   r   Údsa_hash_supportedÇ   s    zBackend.dsa_hash_supportedc                 C  s   |   |td|j ƒ¡S )Nó    )r?   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   rR   r   r   r   Úelliptic_curve_supportedÑ   s     ÿz Backend.elliptic_curve_supportedz"ec.EllipticCurveSignatureAlgorithm)Úsignature_algorithmrR   r   c                 C  s4   t |tjƒsdS |  |¡o2t |jtjƒp2|  |j¡S r-   )r.   r   ZECDSArT   r,   Ú
asym_utilsZ	Prehashedr0   )r   rU   rR   r   r   r   Ú,elliptic_curve_signature_algorithm_supportedÙ   s    

þz4Backend.elliptic_curve_signature_algorithm_supportedzec.ECDH)r,   rR   r   c                 C  s   |   |¡ot|tjƒS r   )rT   r.   r   ZECDH)r   r,   rR   r   r   r   Ú+elliptic_curve_exchange_algorithm_supportedç   s     ÿz3Backend.elliptic_curve_exchange_algorithm_supportedc                 C  s   t j S r   ©r   rL   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 r
dS dS ©NFT©r   r   r   r   r   Úx25519_supportedô   s    zBackend.x25519_supportedc                 C  s   | j r
dS tj otj S r-   ©r   r   ZCRYPTOGRAPHY_IS_LIBRESSLrL   r   r   r   r   Úx448_supportedù   s
    þzBackend.x448_supportedc                 C  s   | j r
dS dS r\   r]   r   r   r   r   Úed25519_supported  s    zBackend.ed25519_supportedc                 C  s   | j r
dS 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 r
dS dS r\   r]   r   r   r   r   Úpoly1305_supported  s    zBackend.poly1305_supportedc                 C  s   t j S r   rY   r   r   r   r   Úpkcs7_supported  s    zBackend.pkcs7_supportedN)@Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   r=   r   rB   rC   rD   rE   Z
SHA512_224Z
SHA512_256ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ZSHAKE128ZSHAKE256r/   r   Z	SECP224R1Z	SECP256R1Z	SECP384R1Z	SECP521R1rS   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   r4   r8   r9   r:   r?   r@   rA   rF   rJ   rK   rM   rN   rQ   rT   rW   rX   rZ   r[   r^   r`   ra   rb   rc   rd   re   r   r   r   r   r      st   ôü			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   rV   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      