o
    àý°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                   @  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+dbd+d,„Z,d_d-d.„Z-dcd1d2„Z.dcd3d4„Z/d`d5d6„Z0d_d7d8„Z1d`d9d:„Z2ddd=d>„Z3dedAdB„Z4dfdDdE„Z5d`dFdG„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   ÚBindingÚ_bindingÚffiÚ_ffiÚlibÚ_libÚrust_opensslÚis_fips_enabledÚ_fips_enabled©Úself© r!   úŸ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/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   Ú_legacy_provider_loadedr   r!   r!   r"   Ú__repr__K   s   ÿþÿzBackend.__repr__ÚokÚboolc                 C  s
   t  |¡S r   )r   Ú_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   Úenable_fipsÚ
_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    r4   r!   r!   r"   r:   h   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"   Úsignature_hash_supportedn   s   
z Backend.signature_hash_supportedc                 C  ó   | j rdS ttjjdƒS ©NFÚderive)r   Úhasattrr   ÚkdfÚScryptr   r!   r!   r"   Úscrypt_supportedw   ó   zBackend.scrypt_supportedc                 C  r>   r?   )r   rA   r   rB   ÚArgon2idr   r!   r!   r"   Úargon2_supported}   rE   zBackend.argon2_supportedc                 C  s`   | j rt|tjƒrdS tjr+t|tjtjtjtjtj	tj
tjtjtjtjtjtjfƒS |  |¡S ©NT)r   r8   r   r<   r   ÚCRYPTOGRAPHY_IS_AWSLCÚMD5ÚSHA224ÚSHA256ÚSHA384ÚSHA512Ú
SHA512_224Ú
SHA512_256ÚSHA3_224ÚSHA3_256ÚSHA3_384ÚSHA3_512r:   r;   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 r7   )r   r8   Ú_fips_ciphersr   ÚciphersÚcipher_supported)r    rV   rW   r!   r!   r"   rZ   ›   s   zBackend.cipher_supportedúlist[rust_openssl.OpenSSLError]c                 C  r/   r   )r   Úcapture_error_stackr   r!   r!   r"   Ú_consume_errors¤   r3   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<   rK   rL   rM   rN   r;   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)r8   r   r   Ú_mgfr	   r   Ú_salt_lengthÚDIGEST_LENGTHr:   Ú
_algorithmr
   r^   ©r    r_   r!   r!   r"   Úrsa_padding_supported¶   s   
ÿÿ
þzBackend.rsa_padding_supportedc                 C  s   | j r
t|tƒr
dS |  |¡S r7   )r   r8   r   re   rd   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   )rh   r=   r;   r!   r!   r"   Údsa_hash_supportedØ   s   
zBackend.dsa_hash_supportedc                 C  s   |   |td|j ƒ¡S )Nó    )rZ   r   Ú
block_sizer;   r!   r!   r"   Úcmac_algorithm_supportedÝ   s   ÿz Backend.cmac_algorithm_supportedÚcurveúec.EllipticCurvec                 C  r6   r7   )r   r8   Ú_fips_ecdh_curvesr   r   Úcurve_supported)r    rm   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 r7   )r8   r   ÚECDSArq   r4   Ú
asym_utilsÚ	Prehashedr:   )r    rr   rm   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   )rq   r8   r   ÚECDH)r    r4   rm   r!   r!   r"   Ú+elliptic_curve_exchange_algorithm_supportedø   s   ÿz3Backend.elliptic_curve_exchange_algorithm_supportedc                 C  s   t j S r   )r   rg   r   r!   r!   r"   Údh_supportedÿ   r3   zBackend.dh_supportedc                 C  s   | j jdkS )Nr   )r   Ú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  r3   zBackend.x25519_supportedc                 C  s"   | j rdS tj otj otj S r7   )r   r   ÚCRYPTOGRAPHY_IS_LIBRESSLrg   rI   r   r!   r!   r"   Úx448_supported  s   ÿýzBackend.x448_supportedc                 C  ó   t jpt jpt jS r   ©r   rI   rg   Ú#CRYPTOGRAPHY_OPENSSL_350_OR_GREATERr   r!   r!   r"   Úmlkem_supported  ó
   ÿýzBackend.mlkem_supportedc                 C  r�   r   r‚   r   r!   r!   r"   Úmldsa_supported  r…   zBackend.mldsa_supportedc                 C  s   dS rH   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   r   rg   rI   r   r!   r!   r"   Úed448_supported"  s
   ÿýzBackend.ed448_supportedc                 C  s   t jo| j S r   )r   Ú#CRYPTOGRAPHY_OPENSSL_320_OR_GREATERr   r   r!   r!   r"   Úecdsa_deterministic_supported)  s   þz%Backend.ecdsa_deterministic_supportedc                 C  s   t jrdS | j S rH   )r   rI   r   r   r!   r!   r"   Úpoly1305_supported/  s   zBackend.poly1305_supportedN)r   r   )r   r$   )r(   r)   r   r   )r   r0   )r4   r5   r   r)   )r   r)   )rV   r   rW   r   r   r)   )r   r[   )r_   r   r   r)   )rm   rn   r   r)   )rr   rs   rm   rn   r   r)   )r4   rx   rm   rn   r   r)   )@Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   rX   r   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   ÚSHAKE128ÚSHAKE256r9   r   Ú	SECP224R1Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ro   Ú_fips_rsa_min_key_sizeÚ_fips_rsa_min_public_exponentÚ_fips_dsa_min_modulusÚ_fips_dh_min_key_sizeÚ_fips_dh_min_modulusr#   r'   r+   r.   r%   r2   r:   r=   rD   rG   rU   rZ   r]   r^   re   rf   rh   ri   rl   rq   rw   rz   r{   r}   r~   r€   r„   r†   r‡   rˆ   rŠ   r‹   r!   r!   r!   r"   r      sv    ôü





	


	



	













	



r   N)Ú
__future__r   Ú"cryptography.hazmat.bindings._rustr   r   Ú$cryptography.hazmat.bindings.opensslr   Úcryptography.hazmat.primitivesr   Ú*cryptography.hazmat.primitives._asymmetricr   Ú)cryptography.hazmat.primitives.asymmetricr   r   ru   Ú1cryptography.hazmat.primitives.asymmetric.paddingr	   r
   r   r   Ú&cryptography.hazmat.primitives.ciphersr   Ú1cryptography.hazmat.primitives.ciphers.algorithmsr   Ú,cryptography.hazmat.primitives.ciphers.modesr   r   r   Úbackendr!   r!   r!   r"   Ú<module>   s     
