a
    còf°%  ã                   @  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„Z&dddœdd„Z'd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/d0„Z.d1dd2œd3d4„Z/d1dd2œd5d6„Z0ddœd7d8„Z1dddœd9d:„Z2ddœd;d<„Z3d=dd>œd?d@„Z4dAd=ddBœdCdD„Z5dEd=ddFœdGdH„Z6ddœdIdJ„Z7ddœdKdL„Z8ddœdMdN„Z9ddœdOdP„Z:ddœdQdR„Z;ddœdSdT„Z<ddœdUdV„Z=ddœdWdX„Z>ddœdYdZ„Z?d[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ÚffiÚ_ffiÚlibÚ_libÚrust_opensslÚis_fips_enabledÚ_fips_enabled©Úself© r   úi/home/httpd/docs/test/DocsMgr/lib/python3.9/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J ‚t  ¡ | _d S r   )r   Zenable_fipsZ
_providersr   r   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)Ú	algorithmc                 C  sB   |j dv r&|j › |jd › � d¡}n|j  d¡}| j |¡}|S )N)Úblake2bÚblake2sé   Úascii)ÚnameÚdigest_sizeÚencoder   ZEVP_get_digestbyname)r   r,   ÚalgÚevp_mdr   r   r    Ú_evp_md_from_algorithmh   s    
ÿzBackend._evp_md_from_algorithm)r,   r   c                 C  s,   | j rt|| jƒsdS |  |¡}|| jjkS ©NF)r   Ú
isinstanceÚ_fips_hashesr6   r   ZNULL)r   r,   r5   r   r   r    Úhash_supporteds   s    
zBackend.hash_supportedc                 C  s    | j rt|tjƒrdS |  |¡S r7   ©r   r8   r   ÚSHA1r:   ©r   r,   r   r   r    Úsignature_hash_supportedz   s    z Backend.signature_hash_supportedc                 C  s   | j r
dS ttjdƒS d S )NFZderive_scrypt)r   Úhasattrr   Zkdfr   r   r   r    Úscrypt_supportedƒ   s    zBackend.scrypt_supportedc                 C  s    | j rt|tjƒrdS |  |¡S )NTr;   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 r7   )r   r8   Ú_fips_ciphersr   ÚciphersÚcipher_supported)r   rB   rC   r   r   r    rF   �   s    zBackend.cipher_supportedc                 C  s
   |   |¡S r   )rA   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 r7   )r   r8   r   r<   ÚSHA224ÚSHA256ÚSHA384ÚSHA512r=   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)r8   r   r   Z_mgfr	   r   Ú
_algorithmr   r<   r:   r
   rM   ©r   rN   r   r   r    Úrsa_padding_supported®   s    

ÿÿ
þzBackend.rsa_padding_supportedc                 C  s"   | j rt|tƒrdS |  |¡S d S r7   )r   r8   r   rQ   rP   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 r7   )rT   r>   r=   r   r   r    Údsa_hash_supportedÍ   s    zBackend.dsa_hash_supportedc                 C  s   |   |td|j ƒ¡S )Nó    )rF   r   Ú
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 r7   )r   r8   Ú_fips_ecdh_curvesr   r   Zcurve_supported)r   rY   r   r   r    Úelliptic_curve_supported×   s
    ÿz Backend.elliptic_curve_supportedz"ec.EllipticCurveSignatureAlgorithm)Úsignature_algorithmrY   r   c                 C  s4   t |tjƒsdS |  |¡o2t |jtjƒp2|  |j¡S r7   )r8   r   ZECDSAr[   r,   Ú
asym_utilsZ	Prehashedr:   )r   r\   rY   r   r   r    Ú,elliptic_curve_signature_algorithm_supportedß   s    

þz4Backend.elliptic_curve_signature_algorithm_supportedzec.ECDH)r,   rY   r   c                 C  s   |   |¡ot|tjƒS r   )r[   r8   r   ZECDH)r   r,   rY   r   r   r    Ú+elliptic_curve_exchange_algorithm_supportedí   s    ÿz3Backend.elliptic_curve_exchange_algorithm_supportedc                 C  s   t j S r   ©r   rS   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 r7   ©r   r   ZCRYPTOGRAPHY_IS_LIBRESSLrS   r   r   r   r    Úx448_supportedÿ   s
    þzBackend.x448_supportedc                 C  s   | j r
dS dS rc   rd   r   r   r   r    Úed25519_supported  s    zBackend.ed25519_supportedc                 C  s   | j r
dS tj otj S r7   rf   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 rc   rd   r   r   r   r    Úpoly1305_supported  s    zBackend.poly1305_supportedc                 C  s   t j S r   r`   r   r   r   r    Úpkcs7_supported  s    zBackend.pkcs7_supportedN)@Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r   rD   r   rI   rJ   rK   rL   Z
SHA512_224Z
SHA512_256ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ZSHAKE128ZSHAKE256r9   r   Z	SECP224R1Z	SECP256R1Z	SECP384R1Z	SECP521R1rZ   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+   r6   r:   r>   r@   rA   rF   rG   rH   rM   rQ   rR   rT   rU   rX   r[   r^   r_   ra   rb   re   rg   rh   ri   rj   rk   rl   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   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     