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   ZBindingZ_bindingÚffiZ_ffiÚlibÚ_libÚrust_opensslÚis_fips_enabledÚ_fips_enabled©Úself© r   úvC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\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__ÚokÚboolc                 C  s
   t  |¡S r   )r   Z_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   Zenable_fipsZ
_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
        N)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   r.   r   r   r   r4   h   s   zBackend.hash_supportedc                 C  s    | j rt|tjƒrdS |  |¡S r1   )r   r2   r   ÚSHA1r4   r5   r   r   r   Úsignature_hash_supportedn   s   
z Backend.signature_hash_supportedc                 C  ó   | j rdS ttjjdƒS ©NFZderive)r   Úhasattrr   ÚkdfZScryptr   r   r   r   Úscrypt_supportedw   ó   zBackend.scrypt_supportedc                 C  r8   r9   )r   r:   r   r;   ZArgon2idr   r   r   r   Úargon2_supported}   r=   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   r2   r   r6   r   ÚCRYPTOGRAPHY_IS_AWSLCÚMD5ÚSHA224ÚSHA256ÚSHA384ÚSHA512Ú
SHA512_224Ú
SHA512_256r4   r5   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 r1   )r   r2   Ú_fips_ciphersr   ÚciphersÚcipher_supported)r   rI   rJ   r   r   r   rM   —   s   zBackend.cipher_supportedc                 C  s
   |   |¡S r   )rH   r5   r   r   r   Úpbkdf2_hmac_supported    r'   zBackend.pbkdf2_hmac_supportedúlist[rust_openssl.OpenSSLError]c                 C  r)   r   )r   Zcapture_error_stackr   r   r   r   Ú_consume_errors£   r-   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 r1   )r   r2   r   r6   rB   rC   rD   rE   r5   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)r2   r   r   Z_mgfr	   r   Z_salt_lengthZDIGEST_LENGTHr4   Ú
_algorithmr
   rQ   ©r   rR   r   r   r   Úrsa_padding_supportedµ   s    
ÿ
þÿ
þzBackend.rsa_padding_supportedc                 C  s   | j r
t|tƒr
dS |  |¡S r1   )r   r2   r   rU   rT   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 r1   )rX   r7   r5   r   r   r   Údsa_hash_supported×   s   
zBackend.dsa_hash_supportedc                 C  s   |   |td|j ƒ¡S )Nó    )rM   r   Ú
block_sizer5   r   r   r   Úcmac_algorithm_supportedÜ   s   ÿz Backend.cmac_algorithm_supportedÚcurveúec.EllipticCurvec                 C  r0   r1   )r   r2   Ú_fips_ecdh_curvesr   r   Zcurve_supported)r   r^   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 r1   )r2   r   ZECDSAra   r.   Ú
asym_utilsZ	Prehashedr4   )r   rb   r^   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   )ra   r2   r   ZECDH)r   r.   r^   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   rW   r@   r   r   r   r   Údh_supportedþ   rY   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  ó   | j  S r   ©r   r   r   r   r   Úx25519_supported  r-   zBackend.x25519_supportedc                 C  s"   | j rdS tj otj otj S r1   )r   r   ÚCRYPTOGRAPHY_IS_LIBRESSLrW   r@   r   r   r   r   Úx448_supported
  s   ÿýzBackend.x448_supportedc                 C  ó   t jpt jpt jS r   ©r   r@   rW   Z#CRYPTOGRAPHY_OPENSSL_350_OR_GREATERr   r   r   r   Úmlkem_supported  ó
   ÿýzBackend.mlkem_supportedc                 C  ro   r   rp   r   r   r   r   Úmldsa_supported  rr   zBackend.mldsa_supportedc                 C  ó   dS r?   r   r   r   r   r   Úed25519_supported!  ó   zBackend.ed25519_supportedc                 C  s   t j ot j ot j S r   )r   rm   rW   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  rj   r   rk   r   r   r   r   Úpoly1305_supported1  r-   zBackend.poly1305_supportedc                 C  rt   r?   r   r   r   r   r   Úpkcs7_supported4  rv   zBackend.pkcs7_supportedN)r   r   )r   r!   )r$   r%   r   r   )r   r*   )r.   r/   r   r%   )r   r%   )rI   r   rJ   r   r   r%   )r   rO   )rR   r   r   r%   )r^   r_   r   r%   )rb   rc   r^   r_   r   r%   )r.   rf   r^   r_   r   r%   )BÚ__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   rK   r   rB   rC   rD   rE   rF   rG   ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ZSHAKE128ZSHAKE256r3   r   Z	SECP224R1Z	SECP256R1Z	SECP384R1Z	SECP521R1r`   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,   r4   r7   r<   r>   rH   rM   rN   rP   rQ   rU   rV   rX   rZ   r]   ra   re   rg   rh   ri   rl   rn   rq   rs   ru   rw   rx   ry   rz   r   r   r   r   r      sz    ôü





	


	



	














	




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   rd   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     
