
    Ug%                        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      Z e       Zy)    )annotations)openssl)binding)hashes)AsymmetricPadding)ec)utils)MGF1OAEPPSSPKCS1v15)CipherAlgorithm)AES)CBCModec                     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j0                  ej2                  fZdZdZddz  ZdZdez  Zd'dZ d(dZ!d)dZ"d'd	Z#d(d
Z$d*dZ%d+dZ&d,dZ'	 	 	 	 d,dZ(d-dZ)d,dZ*d.dZ+d,dZ,d/dZ-d,dZ.d0dZ/d0dZ0d-dZ1d,dZ2d-dZ3d1dZ4	 	 	 	 	 	 d2dZ5	 	 	 	 	 	 d3dZ6d-dZ7d-dZ8d-dZ9d-d Z:d-d!Z;d-d"Z<d-d#Z=d-d$Z>d-d%Z?y&)4Backendz)
    OpenSSL API binding interfaces.
    r   i   i     c                    t        j                         | _        | j                  j                  | _        | j                  j
                  | _        t        j                         | _	        y N)
r   Binding_bindingffi_ffilib_librust_opensslis_fips_enabled_fips_enabledselfs    j/var/www/django-tutorial/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.py__init__zBackend.__init__E   sC    )MM%%	MM%%	)99;    c                f    d| j                          d| j                   dt        j                   dS )Nz<OpenSSLBackend(version: z, FIPS: z
, Legacy: z)>)openssl_version_textr   r   _legacy_provider_loadedr    s    r"   __repr__zBackend.__repr__K   sC    '(A(A(C'D E''( )#;;<B@	
r$   c                ,    t        j                  |      S r   )r   _openssl_assert)r!   oks     r"   openssl_assertzBackend.openssl_assertR   s    &&r**r$   c                    t        j                  t         j                         t        j                         sJ t        j                         | _        y r   )r   enable_fips
_providersr   r   r    s    r"   _enable_fipszBackend._enable_fipsU   s;     	  !8!89++---)99;r$   c                *    t        j                         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    s    r"   r&   zBackend.openssl_version_text\   s     0022r$   c                *    t        j                         S r   )r   openssl_versionr    s    r"   openssl_version_numberzBackend.openssl_version_numbere   s    ++--r$   c                    |j                   dv r-|j                    |j                  dz   j                  d      }n|j                   j                  d      }| j                  j	                  |      }|S )N)blake2bblake2s   ascii)namedigest_sizeencoder   EVP_get_digestbyname)r!   	algorithmalgevp_mds       r"   _evp_md_from_algorithmzBackend._evp_md_from_algorithmh   sk    >>33^^$Y%:%:Q%>$?@GGC ..''0C//4r$   c                    | j                   rt        || j                        sy| j                  |      }|| j                  j
                  k7  S NF)r   
isinstance_fips_hashesrA   r   NULL)r!   r>   r@   s      r"   hash_supportedzBackend.hash_supporteds   s@    jD<M<M&N,,Y7''r$   c                r    | j                   rt        |t        j                        ry| j	                  |      S rC   r   rD   r   SHA1rG   r!   r>   s     r"   signature_hash_supportedz Backend.signature_hash_supportedz   s.    
 *Y"D""9--r$   c                P    | j                   ryt        t        j                  d      S )NFderive_scrypt)r   hasattrr   kdfr    s    r"   scrypt_supportedzBackend.scrypt_supported   s!    <++_==r$   c                r    | j                   rt        |t        j                        ry| j	                  |      S )NTrI   rK   s     r"   hmac_supportedzBackend.hmac_supported   s,    *Y"D""9--r$   c                    | j                   rt        || j                        syt        j                  j                  ||      S rC   )r   rD   _fips_ciphersr   cipherscipher_supported)r!   ciphermodes      r"   rW   zBackend.cipher_supported   s9     fd&8&89##44VTBBr$   c                $    | j                  |      S r   )rS   rK   s     r"   pbkdf2_hmac_supportedzBackend.pbkdf2_hmac_supported   s    ""9--r$   c                *    t        j                         S r   )r   capture_error_stackr    s    r"   _consume_errorszBackend._consume_errors   s    //11r$   c                    | j                   rt        |t        j                        ryt        |t        j                  t        j                  t        j
                  t        j                  t        j                  f      S rC   )r   rD   r   rJ   SHA224SHA256SHA384SHA512rK   s     r"   _oaep_hash_supportedzBackend._oaep_hash_supported   sS    *Y"D	
 		
r$   c                   t        |t              ryt        |t              rzt        |j                  t              r`| j
                  r/t        |j                  j                  t        j                        ry| j                  |j                  j                        S t        |t              r\t        |j                  t              rB| j                  |j                  j                        xr | j                  |j                        S y)NTF)rD   r   r   _mgfr
   r   
_algorithmr   rJ   rG   r   rd   r!   paddings     r"   rsa_padding_supportedzBackend.rsa_padding_supported   s    gx(%*W\\4*H !!j''' **7<<+B+BCC&:gllD+I,,'' @++G,>,>?@ r$   c                ^    | j                   rt        |t              ry| j                  |      S rC   )r   rD   r   rj   rh   s     r"   rsa_encryption_supportedz Backend.rsa_encryption_supported   s(    *Wh"?--g66r$   c                B    t         j                   xr | j                   S r   )r   CRYPTOGRAPHY_IS_BORINGSSLr   r    s    r"   dsa_supportedzBackend.dsa_supported   s$    666 '&&&	
r$   c                F    | j                         sy| j                  |      S rC   )ro   rL   rK   s     r"   dsa_hash_supportedzBackend.dsa_hash_supported   s"    !!#,,Y77r$   c                R    | j                  |t        d|j                  z              S )N    )rW   r   
block_sizerK   s     r"   cmac_algorithm_supportedz Backend.cmac_algorithm_supported   s*    $$s7Y%9%99:
 	
r$   c                    | j                   rt        || j                        syt        j                  j                  |      S rC   )r   rD   _fips_ecdh_curvesr   r   curve_supported)r!   curves     r"   elliptic_curve_supportedz Backend.elliptic_curve_supported   s7    j4))'
 ..u55r$   c                    t        |t        j                        sy| j                  |      xrA t        |j                  t
        j                        xs | j                  |j                        S rC   )rD   r   ECDSArz   r>   
asym_utils	PrehashedrG   )r!   signature_algorithmry   s      r"   ,elliptic_curve_signature_algorithm_supportedz4Backend.elliptic_curve_signature_algorithm_supported   s`     -rxx8,,U3 
*44j6J6JK B""#6#@#@A	
r$   c                \    | j                  |      xr t        |t        j                        S r   )rz   rD   r   ECDH)r!   r>   ry   s      r"   +elliptic_curve_exchange_algorithm_supportedz3Backend.elliptic_curve_exchange_algorithm_supported   s,     ,,U3 

rww9
 	
r$   c                $    t         j                   S r   r   rn   r    s    r"   dh_supportedzBackend.dh_supported       9999r$   c                4    | j                   j                  dk(  S )Nr   )r   Cryptography_HAS_EVP_PKEY_DHXr    s    r"   dh_x942_serialization_supportedz'Backend.dh_x942_serialization_supported   s    yy66!;;r$   c                    | j                   ryyNFTr   r    s    r"   x25519_supportedzBackend.x25519_supported       r$   c                d    | j                   ryt        j                   xr t        j                   S rC   r   r   CRYPTOGRAPHY_IS_LIBRESSLrn   r    s    r"   x448_supportedzBackend.x448_supported   0    555 ; :::	
r$   c                    | j                   ryyr   r   r    s    r"   ed25519_supportedzBackend.ed25519_supported  r   r$   c                d    | j                   ryt        j                   xr t        j                   S rC   r   r    s    r"   ed448_supportedzBackend.ed448_supported  r   r$   c                @    t         j                  xr | j                   S r   )r   #CRYPTOGRAPHY_OPENSSL_320_OR_GREATERr   r    s    r"   ecdsa_deterministic_supportedz%Backend.ecdsa_deterministic_supported  s!    << '&&&	
r$   c                    | j                   ryyr   r   r    s    r"   poly1305_supportedzBackend.poly1305_supported  r   r$   c                $    t         j                   S r   r   r    s    r"   pkcs7_supportedzBackend.pkcs7_supported  r   r$   N)returnNone)r   str)r+   boolr   r   )r   int)r>   hashes.HashAlgorithm)r>   r   r   r   )r   r   )rX   r   rY   r   r   r   )r   zlist[rust_openssl.OpenSSLError])ri   r   r   r   )ry   ec.EllipticCurver   r   )r   z"ec.EllipticCurveSignatureAlgorithmry   r   r   r   )r>   zec.ECDHry   r   r   r   )@__name__
__module____qualname____doc__r:   r   rU   r   r`   ra   rb   rc   
SHA512_224
SHA512_256SHA3_224SHA3_256SHA3_384SHA3_512SHAKE128SHAKE256rE   r   	SECP224R1	SECP256R1	SECP384R1	SECP521R1rw   _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,   r0   r&   r4   rA   rG   rL   rQ   rS   rW   r[   r^   rd   rj   rl   ro   rq   ru   rz   r   r   r   r   r   r   r   r   r   r   r    r$   r"   r   r      s    D FM 	L 	


	 "$)!I  55<
+<3.	(.-.	.>.C.2
&7
8


6
?
  
 
	

 
)9
	
:<





:r$   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	   r}   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"   <module>r      sK   
 # F 8 1 H 8 I A: A:H )r$   