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!dadd„Z"d_dd„Z#d`dd„Z$dbdd„Z%dcdd„Z&dcdd„Z'dddd„Z(ddd d!„Z)dcd"d#„Z*ded(d)„Z+dcd*d+„Z,dfd-d.„Z-dcd/d0„Z.dgd3d4„Z/dgd5d6„Z0ddd7d8„Z1dcd9d:„Z2ddd;d<„Z3dhd?d@„Z4didCdD„Z5djdFdG„Z6dddHdI„Z7dddJdK„Z8dddLdM„Z9dddNdO„Z:dddPdQ„Z;dddRdS„Z<dddTdU„Z=dddVdW„Z>dddXdY„Z?dddZd[„Z@ddd\d]„ZAd^S )kÚ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!   úi/var/www/html/CropPilot/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   ó   
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  r0   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    r5   r!   r!   r"   r;   h   s   zBackend.hash_supportedc                 C  s    | j rt|tjƒrdS |  |¡S r8   )r   r9   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   rB   r   rC   ÚArgon2idr   r!   r!   r"   Úargon2_supported}   rF   zBackend.argon2_supportedc              
   C  sP   | 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fƒS |  |¡S ©NT)r   r9   r   r=   r   ÚCRYPTOGRAPHY_IS_AWSLCÚMD5ÚSHA224ÚSHA256ÚSHA384ÚSHA512Ú
SHA512_224Ú
SHA512_256r;   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 r8   )r   r9   Ú_fips_ciphersr   ÚciphersÚcipher_supported)r    rS   rT   r!   r!   r"   rW   —   s   zBackend.cipher_supportedc                 C  s
   |   |¡S r   )rR   r<   r!   r!   r"   Úpbkdf2_hmac_supported    r,   zBackend.pbkdf2_hmac_supportedúlist[rust_openssl.OpenSSLError]c                 C  r0   r   )r   Úcapture_error_stackr   r!   r!   r"   Ú_consume_errors£   r4   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 r8   )r   r9   r   r=   rL   rM   rN   rO   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)r9   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 r8   )r   r9   r   rc   rb   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Ñ   ó   þzBackend.dsa_supportedc                 C  s   |   ¡ sdS |  |¡S r8   )rf   r>   r<   r!   r!   r"   Údsa_hash_supported×   s   
zBackend.dsa_hash_supportedc                 C  s   |   |td|j ƒ¡S )Nó    )rW   r   Ú
block_sizer<   r!   r!   r"   Úcmac_algorithm_supportedÜ   s   ÿz Backend.cmac_algorithm_supportedÚcurveúec.EllipticCurvec                 C  r7   r8   )r   r9   Ú_fips_ecdh_curvesr   r   Úcurve_supported)r    rl   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 r8   )r9   r   ÚECDSArp   r5   Ú
asym_utilsÚ	Prehashedr;   )r    rq   rl   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   )rp   r9   r   ÚECDH)r    r5   rl   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   re   rJ   r   r!   r!   r"   Údh_supportedþ   rg   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  ó   | j  S r   ©r   r   r!   r!   r"   Úx25519_supported  r4   zBackend.x25519_supportedc                 C  s"   | j rdS tj otj otj S r8   )r   r   ÚCRYPTOGRAPHY_IS_LIBRESSLre   rJ   r   r!   r!   r"   Úx448_supported
  s   ÿýzBackend.x448_supportedc                 C  ó   t jpt jpt jS r   ©r   rJ   re   Ú#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  ó   dS rI   r!   r   r!   r!   r"   Úed25519_supported!  ó   zBackend.ed25519_supportedc                 C  s   t j ot j ot j S r   )r   r€   re   rJ   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  r}   r   r~   r   r!   r!   r"   Úpoly1305_supported1  r4   zBackend.poly1305_supportedc                 C  rˆ   rI   r!   r   r!   r!   r"   Úpkcs7_supported4  rŠ   zBackend.pkcs7_supportedN)r   r   )r   r$   )r(   r)   r   r   )r   r1   )r5   r6   r   r)   )r   r)   )rS   r   rT   r   r   r)   )r   rY   )r]   r   r   r)   )rl   rm   r   r)   )rq   rr   rl   rm   r   r)   )r5   rw   rl   rm   r   r)   )BÚ__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   rU   r   rL   rM   rN   rO   rP   rQ   ÚSHA3_224ÚSHA3_256ÚSHA3_384ÚSHA3_512ÚSHAKE128ÚSHAKE256r:   r   Ú	SECP224R1Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1rn   Ú_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%   r3   r;   r>   rE   rH   rR   rW   rX   r[   r\   rc   rd   rf   rh   rk   rp   rv   ry   rz   r|   r   r�   r…   r‡   r‰   r‹   r�   rŽ   r�   r!   r!   r!   r"   r      sz    ôü





	


	



	














	




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   rt   Ú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     
