
    )Jf                       d dl mZ d dlZd dlZd dlZd dlZd dlmZ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 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'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZA  ejB        dddg          ZC G d d          ZD G d d          ZE G d d          ZFd dZG eE            ZHdS )!    )annotationsN)utilsx509)UnsupportedAlgorithm)aead)_CipherContext)openssl)binding)hashesserialization)AsymmetricPadding)ec)r   )MGF1OAEPPSSPKCS1v15)PrivateKeyTypes)CipherAlgorithm)AESAES128AES256ARC4SM4CamelliaChaCha20	TripleDES_BlowfishInternal_CAST5Internal_IDEAInternal_SEEDInternal)	CBCCFBCFB8CTRECBGCMOFBXTSMode)PBESPKCS12CertificatePKCS12KeyAndCertificatesPKCS12PrivateKeyTypes_PKCS12CATypes
_MemoryBIObiochar_ptrc                      e Zd ZdS )_RC2N)__name__
__module____qualname__     o/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/backend.pyr3   r3   G   s        Dr8   r3   c                     e Zd ZU dZdZh dZded<   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  ZdZ de z  Z!dkdZ"dldZ#	 dmdndZ$dkdZ%dldZ&dodZ'dpdZ(dpdZ)dqdZ*dqdZ+drdZ,dqdZ-dsd$Z.dkd%Z/dkd&Z0dtd(Z1dtd)Z2dqd*Z3dud,Z4dvd/Z5dwd3Z6d4 Z7dxd5Z8dqd6Z9dyd9Z:dyd:Z;drd;Z<dqd<Z=drd=Z>dzdAZ?d{dCZ@d|dFZAd}dHZBd~dKZCddNZDddPZEdrdQZFdrdRZGdrdSZHdrdTZIdrdUZJdrdVZKdrdWZLddYZMeNjO        dZ             ZPdd^ZQdd`ZRddhZSdrdiZTdrdjZUdS )Backendz)
    OpenSSL API binding interfaces.
    r	   >      aes-128-ccm   aes-128-gcm   aes-192-ccm   aes-192-gcm   aes-256-ccm   aes-256-gcmztyping.ClassVar[set[bytes]]
_fips_aeadi   i     returnNonec                    t          j                    | _        | j        j        | _        | j        j        | _        t          j                    | _	        i | _
        |                                  d S N)r
   Binding_bindingffi_ffilib_librust_opensslis_fips_enabled_fips_enabled_cipher_registry_register_default_ciphersselfs    r9   __init__zBackend.__init__}   sa    ))M%	M%	)9;;
  	 	&&(((((r8   strc                r    d                     |                                 | j        t          j                  S )Nz3<OpenSSLBackend(version: {}, FIPS: {}, Legacy: {})>)formatopenssl_version_textrP   rN   _legacy_provider_loadedrS   s    r9   __repr__zBackend.__repr__   s5    DKK%%''0
 
 	
r8   Nokboolerrors&list[rust_openssl.OpenSSLError] | Nonec                .    t          j        ||          S )N)r^   )r
   _openssl_assert)rT   r\   r^   s      r9   openssl_assertzBackend.openssl_assert   s    
 &r&9999r8   c                    | j                                          t          j                    sJ t          j                    | _        d S rG   )rI   _enable_fipsrN   rO   rP   rS   s    r9   rd   zBackend._enable_fips   sD     	""$$$+-----)9;;r8   c                    | j                             | j                            | j        j                                                d          S )z
        Friendly string name of the loaded OpenSSL library. This is not
        necessarily the same version as it was compiled against.

        Example: OpenSSL 1.1.1d  10 Sep 2019
        ascii)rK   stringrM   OpenSSL_versionOPENSSL_VERSIONdecoderS   s    r9   rY   zBackend.openssl_version_text   sA     yI%%di&?@@
 

&//	r8   intc                4    | j                                         S rG   )rM   OpenSSL_version_numrS   s    r9   openssl_version_numberzBackend.openssl_version_number   s    y,,...r8   	algorithmhashes.HashAlgorithmc                    |j         dv r'|j          |j        dz                       d          }n|j                             d          }| j                            |          }|S )N)blake2bblake2s   rf   )namedigest_sizeencoderM   EVP_get_digestbyname)rT   ro   algevp_mds       r9   _evp_md_from_algorithmzBackend._evp_md_from_algorithm   sp    >333^@Y%:Q%>@@GG CC .''00C//44r8   c                v    |                      |          }|                     || j        j        k               |S rG   )r{   rb   rK   NULLrT   ro   rz   s      r9   _evp_md_non_null_from_algorithmz'Backend._evp_md_non_null_from_algorithm   s7    ,,Y77Fdin4555r8   c                    | j         rt          || j                  sdS |                     |          }|| j        j        k    S NF)rP   
isinstance_fips_hashesr{   rK   r}   r~   s      r9   hash_supportedzBackend.hash_supported   sH     	jD<M&N&N 	5,,Y77''r8   c                r    | j         rt          |t          j                  rdS |                     |          S r   rP   r   r   SHA1r   rT   ro   s     r9   signature_hash_supportedz Backend.signature_hash_supported   s;    
  	*Y"D"D 	5""9---r8   c                4    | j         rdS | j        j        dk    S )NFrC   )rP   rM   Cryptography_HAS_SCRYPTrS   s    r9   scrypt_supportedzBackend.scrypt_supported   s"     	:59499r8   c                r    | j         rt          |t          j                  rdS |                     |          S )NTr   r   s     r9   hmac_supportedzBackend.hmac_supported   s9     	*Y"D"D 	4""9---r8   cipherr   moder)   c                    | j         rt          || j                  sdS 	 | j        t	          |          t	          |          f         }n# t
          $ r Y dS w xY w || ||          }| j        j        |k    S r   )rP   r   _fips_ciphersrQ   typeKeyErrorrK   r}   )rT   r   r   adapter
evp_ciphers        r9   cipher_supportedzBackend.cipher_supported   s     	 fd&899 u	+DLL$t**,DEGG 	 	 	55	WT6400
y~++s   )A
 

AAc                `    ||f| j         v rt          d| d| d          || j         ||f<   d S )NzDuplicate registration for:  .)rQ   
ValueError)rT   
cipher_clsmode_clsr   s       r9   register_cipher_adapterzBackend.register_cipher_adapter   sW    !T%:::GzGGHGGG   7>j(2333r8   c           	        t           t          t          fD ]U}t          t          t
          t          t          t          t          fD ]&}| 
                    ||t          d                     'Vt          t          t
          t          t          fD ]+}| 
                    t          |t          d                     ,t          t          t          t          fD ]+}| 
                    t          |t          d                     ,| 
                    t          t
          t          d                     | 
                    t          t          d           t          | j        j        rdnd                     | 
                    t           t$          t&                     t
          t          t          t          t          t          fD ]+}| 
                    t(          |t          d                     ,t*          j        s| j        j        s]t          t          t          t
          fD ]+}| 
                    t0          |t          d                     ,t          t          t          t
          fD ]+}| 
                    t2          |t          d                     ,t5          j        t8          t:          gt          t          t          t
          g          D ])\  }}| 
                    ||t          d	                     *| 
                    t<          t          d           t          d
                     | 
                    t>          t          d           t          d                     d S d S )Nz+{cipher.name}-{cipher.key_size}-{mode.name}zdes-ede3-{mode.name}zdes-ede3chachachacha20zsm4-{mode.name}zbf-{mode.name}zseed-{mode.name}z{cipher.name}-{mode.name}rc4rc2) r   r   r   r!   r$   r%   r'   r"   r#   r&   r   GetCipherByNamer   r   r   r   rM   CRYPTOGRAPHY_IS_LIBRESSLr(   _get_xts_cipherr   rN   rZ   #CRYPTOGRAPHY_OPENSSL_300_OR_GREATERr   r    	itertoolsproductr   r   r   r3   )rT   r   r   s      r9   rR   z!Backend._register_default_ciphers   sV   / 	 	J #sCdC@  ,,#E     c3S1 	 	H(( MNN   
 c4- 	 	H((8_5K%L%L    	$$sOJ77	
 	
 	

 	$$JJ I>NJ 	
 	
 	
 	$$S#???c3S#6 	 	H((X/@AA    0	9@	 !#sC0  ,,%#$455   
 !#sC0  ,,!#$677   
 )2(9/c3$) )  $
H ,,#$?@@   
 ((d4jj/%"8"8   ((d4jj/%"8"8    ;	 	r8   r   c                :    t          | ||t           j                  S rG   )r   _ENCRYPTrT   r   r   s      r9   create_symmetric_encryption_ctxz'Backend.create_symmetric_encryption_ctx8       dFD.2IJJJr8   c                :    t          | ||t           j                  S rG   )r   _DECRYPTr   s      r9   create_symmetric_decryption_ctxz'Backend.create_symmetric_decryption_ctx=  r   r8   c                ,    |                      |          S rG   )r   r   s     r9   pbkdf2_hmac_supportedzBackend.pbkdf2_hmac_supportedB  s    ""9---r8   list[rust_openssl.OpenSSLError]c                (    t          j                    S rG   )rN   capture_error_stackrS   s    r9   _consume_errorszBackend._consume_errorsE  s    /111r8   public_exponentkey_sizec                ,    |dk    o|dz  dk    o|dk    S )N   rC   r   i   r7   )rT   r   r   s      r9   !generate_rsa_parameters_supportedz)Backend.generate_rsa_parameters_supportedH  s/     q   !#q( C	
r8   databytesr/   c                2   | j                             |          }| j                            |t	          |                    }|                     || j         j        k               t          | j                             || j        j	                  |          S )z
        Return a _MemoryBIO namedtuple of (BIO, char*).

        The char* is the storage for the BIO and it must stay alive until the
        BIO is finished with.
        )
rK   from_bufferrM   BIO_new_mem_buflenrb   r}   r/   gcBIO_free)rT   r   data_ptrr0   s       r9   _bytes_to_biozBackend._bytes_to_bioQ  sx     9((..i''#d))<<C49>1222$),,sDI,>??JJJr8   c                B   | j                                         }|                     || j        j        k               | j                             |          }|                     || j        j        k               | j                            || j         j                  }|S )z.
        Creates an empty memory BIO.
        )rM   	BIO_s_memrb   rK   r}   BIO_newr   r   )rT   
bio_methodr0   s      r9   _create_mem_bio_gczBackend._create_mem_bio_gc^  s     Y((**
J$).8999i
++C49>1222ill3	 233
r8   c                F   | j                             d          }| j                            ||          }|                     |dk               |                     |d         | j         j        k               | j                             |d         |          dd         }|S )zE
        Reads a memory BIO. This only works on memory BIOs.
        zchar **r   N)rK   newrM   BIO_get_mem_datarb   r}   buffer)rT   r0   bufbuf_lenbio_datas        r9   _read_mem_biozBackend._read_mem_bioi  s     immI&&),,S#66GaK(((CFdin45559##CFG44QQQ7r8   c                    | j         rt          |t          j                  rdS t          |t          j        t          j        t          j        t          j        t          j        f          S r   )rP   r   r   r   SHA224SHA256SHA384SHA512r   s     r9   _oaep_hash_supportedzBackend._oaep_hash_supportedt  sX     	*Y"D"D 	5	
 	
 		
r8   paddingr   c                   t          |t                    rdS t          |t                    rft          |j        t                    rL| j        r&t          |j        j        t          j                  rdS | 	                    |j        j                  S t          |t                    rSt          |j        t                    r9|                     |j        j                  o|                     |j                  S dS )NTF)r   r   r   _mgfr   rP   
_algorithmr   r   r   r   r   rT   r   s     r9   rsa_padding_supportedzBackend.rsa_padding_supported  s    gx(( 	4%% 	*W\4*H*H 	 ! Dj'' ' D t**7<+BCCC&& 	:glD+I+I 	,,'  @++G,>??@ 5r8   c                h    | j         rt          |t                    rdS |                     |          S r   )rP   r   r   r   r   s     r9   rsa_encryption_supportedz Backend.rsa_encryption_supported  s7     	7*Wh"?"? 	75--g666r8   c                ,    | j         j         o| j         S rG   )rM   CRYPTOGRAPHY_IS_BORINGSSLrP   rS   s    r9   dsa_supportedzBackend.dsa_supported  s    	33ND<N8N	
r8   c                X    |                                  sdS |                     |          S r   )r   r   r   s     r9   dsa_hash_supportedzBackend.dsa_hash_supported  s/    !!## 	5,,Y777r8   c                X    |                      |t          d|j        z                      S )N    )r   r!   
block_sizer   s     r9   cmac_algorithm_supportedz Backend.cmac_algorithm_supported  s/    $$s7Y%99::
 
 	
r8   certx509.Certificate
typing.Anyc                \   |                     t          j        j                  }|                     |          }| j                            |j        | j        j	                  }| 
                    || j        j	        k               | j                            || j        j                  }|S rG   )public_bytesr   EncodingDERr   rM   d2i_X509_bior0   rK   r}   rb   r   	X509_free)rT   r   r   mem_bior   s        r9   
_cert2osslzBackend._cert2ossl  s      !7!;<<$$T**y%%gk49>BBDDIN2333y||D$)"566r8   x509_ptrc                    |                                  }| j                            ||          }|                     |dk               t	          j        |                     |                    S NrC   )r   rM   i2d_X509_biorb   r   load_der_x509_certificater   )rT   r   r0   ress       r9   
_ossl2certzBackend._ossl2cert  sa    %%''i$$S(33C1H%%%-d.@.@.E.EFFFr8   keyr-   c                   |                     t          j        j        t          j        j        t          j                              }|                     |          }| j        	                    |j
        | j        j                  }|                     || j        j        k               | j                            || j        j                  S rG   )private_bytesr   r   r   PrivateFormatPKCS8NoEncryptionr   rM   d2i_PrivateKey_bior0   rK   r}   rb   r   EVP_PKEY_free)rT   r   r   r   evp_pkeys        r9   	_key2osslzBackend._key2ossl  s      "&'-&((
 

 $$T**9//KIN
 
 	H	6777y||Hdi&=>>>r8   typing.NoReturnc                    |st          d          |d                              j        j         j        j                  sl|d                              j        j         j        j                  s< j        j        r?|d                              j        j         j        j	                  rt          d          t           fd|D                       rt          d          t          d|          )Nz|Could not deserialize key data. The data may be in an incorrect format or it may be encrypted with an unsupported algorithm.r   z Bad decrypt. Incorrect password?c              3  l   K   | ].}|                     j        j        j        j                  V  /d S rG   )_lib_reason_matchrM   ERR_LIB_EVP'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM).0errorrT   s     r9   	<genexpr>z4Backend._handle_key_loading_error.<locals>.<genexpr>  sY       
 

 	 ##	%	A 
 
 
 
 
 
r8   z!Unsupported public key algorithm.zCould not deserialize key data. The data may be in an incorrect format, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters).)r   r
  rM   r  EVP_R_BAD_DECRYPTERR_LIB_PKCS12!PKCS12_R_PKCS12_CIPHERFINAL_ERRORCryptography_HAS_PROVIDERSERR_LIB_PROVPROV_R_BAD_DECRYPTany)rT   r^   s   ` r9   _handle_key_loading_errorz!Backend._handle_key_loading_error  s6     )	   1I''	%ty'B "	 ay**	(	; 	"	 	4"	 1I//I*I0 "	  ?@@@ 
 
 
 

  
 
 
 
 
 	 @AAA 4   r8   curveec.EllipticCurvec                |    | j         rt          || j                  sdS t          j                            |          S r   )rP   r   _fips_ecdh_curvesrN   r   curve_supported)rT   r  s     r9   elliptic_curve_supportedz Backend.elliptic_curve_supported  sC     	j4)'
 '
 	 5..u555r8   signature_algorithm"ec.EllipticCurveSignatureAlgorithmc                    t          |t          j                  sdS |                     |          o8t          |j        t
          j                  p|                     |j                  S r   )r   r   ECDSAr  ro   
asym_utils	Prehashedr   )rT   r  r  s      r9   ,elliptic_curve_signature_algorithm_supportedz4Backend.elliptic_curve_signature_algorithm_supported  sh     -rx88 	5,,U33 
*4j6JKK B""#6#@AA	
r8   ec.ECDHc                `    |                      |          ot          |t          j                  S rG   )r  r   r   ECDH)rT   ro   r  s      r9   +elliptic_curve_exchange_algorithm_supportedz3Backend.elliptic_curve_exchange_algorithm_supported  s2     ,,U33 

rw9
 9
 	
r8   c                    | j         j         S rG   rM   r   rS   s    r9   dh_supportedzBackend.dh_supported      9666r8   c                "    | j         j        dk    S r   )rM   Cryptography_HAS_EVP_PKEY_DHXrS   s    r9   dh_x942_serialization_supportedz'Backend.dh_x942_serialization_supported  s    y6!;;r8   c                    | j         rdS dS NFTrP   rS   s    r9   x25519_supportedzBackend.x25519_supported       	5tr8   c                H    | j         rdS | j        j         o| j        j         S r   rP   rM   r   r   rS   s    r9   x448_supportedzBackend.x448_supported  2     	5	22 8I77	
r8   c                    | j         rdS dS r1  r2  rS   s    r9   ed25519_supportedzBackend.ed25519_supported&  r4  r8   c                H    | j         rdS | j        j         o| j        j         S r   r6  rS   s    r9   ed448_supportedzBackend.ed448_supported+  r8  r8   c                ,    t          j        | |          S rG   )r   _aead_cipher_supported)rT   r   s     r9   aead_cipher_supportedzBackend.aead_cipher_supported3  s    *4888r8   lengthc                4    t          |          D ]}d||<   d S )Nr   )range)rT   r   r@  is       r9   
_zero_datazBackend._zero_data6  s.     v 	 	ADGG	 	r8   c              #    K   || j         j        V  dS t          |          }| j                             d|dz             }| j                             |||           	 |V  |                     | j                             d|          |           dS # |                     | j                             d|          |           w xY w)a  
        This method takes bytes, which can be a bytestring or a mutable
        buffer like a bytearray, and yields a null-terminated version of that
        data. This is required because PKCS12_parse doesn't take a length with
        its password char * and ffi.from_buffer doesn't provide null
        termination. So, to support zeroing the data via bytearray we
        need to build this ridiculous construct that copies the memory, but
        zeroes it after use.
        Nzchar[]rC   z	uint8_t *)rK   r}   r   r   memmoverD  cast)rT   r   data_lenr   s       r9   _zeroed_null_terminated_bufz#Backend._zeroed_null_terminated_buf=  s       <).     4yyH)--(Q,77CIc4222L			 	{C @ @(KKKKK	{C @ @(KKKKs   B 1Cpasswordbytes | NoneNtuple[PrivateKeyTypes | None, x509.Certificate | None, list[x509.Certificate]]c                    |                      ||          }|j        |j        r|j        j        nd d |j        D             fS )Nc                    g | ]	}|j         
S r7   )certificate)r  r   s     r9   
<listcomp>zABackend.load_key_and_certificates_from_pkcs12.<locals>.<listcomp>_  s    BBB$TBBBr8   )load_pkcs12r   r   rO  additional_certs)rT   r   rJ  pkcs12s       r9   %load_key_and_certificates_from_pkcs12z-Backend.load_key_and_certificates_from_pkcs12T  sP     !!$11J'-{<FK##BB&*ABBB
 	
r8   r,   c                   |t          j        d|           |                     |          }| j                            |j        | j        j                  }|| j        j        k    r#|                                  t          d          | j        
                    || j        j                  }| j                            d          }| j                            d          }| j                            d          }|                     |          5 }| j                            |||||          }	d d d            n# 1 swxY w Y   |	dk    r#|                                  t          d          d }
d }g }|d         | j        j        k    rr| j        
                    |d         | j        j                  }t           j                            t'          | j                            d|                    d	
          }|d         | j        j        k    r| j        
                    |d         | j        j                  }|                     |          }d }| j                            || j        j                  }|| j        j        k    r| j                            |          }t3          ||          }
|d         | j        j        k    r| j        
                    |d         | j        j                  }| j                            |d                   }| j        j        s| j        j        rt=          |          }nt?          t=          |                    }|D ]}| j                             ||          }| !                    || j        j        k               | j        
                    || j        j                  }|                     |          }d }| j                            || j        j                  }|| j        j        k    r| j                            |          }|"                    t3          ||                     tG          ||
|          S )NrJ  z!Could not deserialize PKCS12 datazEVP_PKEY **zX509 **zCryptography_STACK_OF_X509 **r   zInvalid password or PKCS12 data	uintptr_tF)unsafe_skip_rsa_key_validation)$r   _check_bytesliker   rM   d2i_PKCS12_bior0   rK   r}   r   r   r   PKCS12_freer   rI  PKCS12_parser  rN   keysprivate_key_from_ptrrk   rG  r   r   X509_alias_get0rg   r+   sk_X509_freesk_X509_numr   r   rB  reversedsk_X509_valuerb   appendr,   )rT   r   rJ  r0   p12evp_pkey_ptrr   sk_x509_ptrpassword_bufr   r   r   additional_certificatesr  r   cert_objru   
maybe_namesk_x509numindicesrC  	addl_cert	addl_names                           r9   rQ  zBackend.load_pkcs12b  s    ":x888  &&i&&sw	??$).    """@AAAill3	 566y}}]339==++imm$CDD--h77 	<)((\<; C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 !88  """>???"$?din,,y||LOTY5LMMH #88DINN;99::/4 9  C
 A;$).((9<<TY-@AADt,,HD224HHJTY^++y''
33$Xt44Dq>TY^++ill;q>493IJJG)''A77C 	=/96/  **"5::..  y..w::##DDIN$:;;;y||D$)*=>> OOD11	 	!Y66tTY^LL
// $	 0 0 < <I'..%i;;    (T3JKKKs   D==EEru   PKCS12PrivateKeyTypes | Nonex509.Certificate | Nonecaslist[_PKCS12CATypes] | Noneencryption_algorithm(serialization.KeySerializationEncryptionc                
   d }|t          j        d|           t          |t          j                  rd}d}d}	d}
| j        j        }nt          |t          j                  rV| j        j	        r| j        j
        }| j        j
        }n| j        j        }| j        j        }d}	d}
| j        j        }|j        }n@t          |t          j                  r|j        t          j        j        u rd}d}d}	d}
|j        }|j        }|t$          j        u r| j        j        }| j        j        }nF|t$          j        u r4| j        j	        st+          d          | j        j
        }| j        j
        }n|J |j        Y| j        j        st+          d          |                     |j                  }|                     || j        j        k               n| j        j        }|j        |j        }	nt7          d          |t9          |          dk    r| j        j        }nL| j                                        }| j                            || j        j                  }g }|D ]}t          |t@                    r|j!        }| "                    |j#                  }|'| j        $                    || j        j        d          }n)| j        $                    ||t9          |                    }|                     |dk               n| "                    |          }|%                    |           | j        &                    ||          }tN                              |dk               
| (                    |          5 }| (                    |          5 }|r| "                    |          n| j        j        }|| )                    |          n| j        j        }| j        *                    ||||||||	|
d
  
        }|| j        j        k    r$| +                                }t7          d	|          	 d d d            n# 1 swxY w Y   | j        j        r:|| j        j        k    r*| j        ,                    ||d| j        j        d|
|           d d d            n# 1 swxY w Y   |                     || j        j        k               | j                            || j        j-                  }| .                                }| j        /                    ||          }|                     |dk               | 0                    |          S )
Nru   r   i N  rC   z2PBESv2 is not supported by this version of OpenSSLzBSetting MAC algorithm is not supported by this version of OpenSSL.zUnsupported key encryption typez=Failed to create PKCS12 (does the key match the certificate?))1r   _check_bytesr   r   r  rK   r}   BestAvailableEncryptionrM   r   NID_aes_256_cbc&NID_pbe_WithSHA1And3_Key_TripleDES_CBCrJ  _KeySerializationEncryption_formatr   PKCS12_key_cert_algorithmr*   PBESv1SHA1And3KeyTripleDESCBCPBESv2SHA256AndAES256CBCr   
_hmac_hashCryptography_HAS_PKCS12_SET_MACr   rb   _kdf_roundsr   r   sk_X509_new_nullr   r_  r+   friendly_namer   rO  X509_alias_set1rc  sk_X509_pushbackendrI  r  PKCS12_creater   PKCS12_set_macrZ  r   i2d_PKCS12_bior   )rT   ru   r   r   rr  rt  rJ  nid_certnid_keypkcs12_itermac_itermac_alg
keycertalgrk  ossl_cascaca_aliasossl_car   rg  name_buf	ossl_cert	ossl_pkeyrd  r^   r0   s                             r9   (serialize_key_and_certificates_to_pkcs12z0Backend.serialize_key_and_certificates_to_pkcs12  s    vt,,,*M,FGG K	@HGKHinGG -"G
 
 E	@ y< K94)39K)JK HinG+4HH$m&O 0	@ %,*12 2
 HGKH+4H-AJT???9K)Jt<<<yD .L    94)3!))) $.:y@ ..   >>(3  ##Gty~$=>>>>).#/;2> >???;#c((a--inGGi0022Gill7DI,BCCG H 1 1b"344 2!/H"oobn==G'"i77#TY^R  #i77#Xs8}}  ''q1111"oob11G(((i,,Wg>>&&sax0000--h77 )	<11$77 859MDOOD111ty~	+.?DNN3'''	  i--   $).((!1133F$,    )%              : 	9ty~--	(( IN  C)	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	V 	C49>1222ill3	 566%%''i&&sC00C!G$$$!!#&&&s8   >RBP?3R?Q	RQ	A	RR #R c                h    | j         rdS | j        j        s| j        j        rdS | j        j        dk    S )NFTrC   )rP   rM   r   r   Cryptography_HAS_POLY1305rS   s    r9   poly1305_supportedzBackend.poly1305_supportedU  sC     	<5I/	<y1	< 496!;;r8   c                    | j         j         S rG   r*  rS   s    r9   pkcs7_supportedzBackend.pkcs7_supported`  r,  r8   )rD   rE   )rD   rV   rG   )r\   r]   r^   r_   rD   rE   )rD   rk   )ro   rp   )ro   rp   rD   r]   )rD   r]   )r   r   r   r)   rD   r]   )r   r   r   r)   rD   r   )rD   r   )r   rk   r   rk   rD   r]   )r   r   rD   r/   )rD   r   )r   r   rD   r]   )r   r   rD   r   )r   r   rD   r   )r   r-   rD   r   )r^   r   rD   r  )r  r  rD   r]   )r  r  r  r  rD   r]   )ro   r%  r  r  rD   r]   )r@  rk   rD   rE   )r   r   rJ  rK  rD   rL  )r   r   rJ  rK  rD   r,   )ru   rK  r   rp  r   rq  rr  rs  rt  ru  rD   r   )Vr4   r5   r6   __doc__ru   rB   __annotations__r   r   r   r   r   r   r   
SHA512_224
SHA512_256SHA3_224SHA3_256SHA3_384SHA3_512SHAKE128SHAKE256r   r   	SECP224R1	SECP256R1	SECP384R1	SECP521R1r  _fips_rsa_min_key_size_fips_rsa_min_public_exponent_fips_dsa_min_modulus_fips_dh_min_key_size_fips_dh_min_modulusrU   r[   rb   rd   rY   rn   r{   r   r   r   r   r   r   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r$  r(  r+  r/  r3  r7  r:  r<  r?  rD  
contextlibcontextmanagerrI  rT  rQ  r  r  r  r7   r8   r9   r;   r;   K   s          D/ / /J     FM 	L 	


	 "$)!I  55
) 
) 
) 
)
 
 
 
 :>: : : : :< < < <	 	 	 	/ / / /	 	 	 	   
( ( ( (. . . .: : : :. . . ., , , ,> > > >H H H HTK K K K
K K K K
. . . .2 2 2 2
 
 
 
K K K K	 	 		 	 	 	
 
 
 
   &7 7 7 7
 
 
 

8 8 8 8

 
 
 

   G G G G? ? ? ?, , , ,\6 6 6 6
 
 
 

 
 
 
7 7 7 7< < < <   

 
 
 
   

 
 
 
9 9 9 9    L L L,
 
 
 
JL JL JL JLXe' e' e' e'N	< 	< 	< 	<7 7 7 7 7 7r8   r;   c                      e Zd ZddZdd
ZdS )r   fmtrV   c                    || _         d S rG   )_fmt)rT   r  s     r9   rU   zGetCipherByName.__init__e  s    			r8   r  r;   r   r   r   r)   c                   | j                             ||                                          }|j                            |                    d                    }||j        j        k    rO|j        j        rC|j        	                    |j        j        |                    d          |j        j                  }|
                                 |S )N)r   r   rf   )r  rX   lowerrM   EVP_get_cipherbynamerw   rK   r}   Cryptography_HAS_300_EVP_CIPHEREVP_CIPHER_fetchr   )rT   r  r   r   cipher_namer   s         r9   __call__zGetCipherByName.__call__h  s    i&&f4&@@FFHH\66w''
 

 ',+++< , !66!""7++! J 	!!!r8   N)r  rV   )r  r;   r   r   r   r)   )r4   r5   r6   rU   r  r7   r8   r9   r   r   d  s<                r8   r   r  r   r   c                x    d|j         dz   d}| j                            |                    d                    S )Nzaes-   z-xtsrf   )r   rM   r  rw   )r  r   r   r  s       r9   r   r   }  s=    3A-333K<,,[-?-?-H-HIIIr8   )r  r;   r   r   )I
__future__r   collectionsr  r   typingcryptographyr   r   cryptography.exceptionsr   $cryptography.hazmat.backends.opensslr   ,cryptography.hazmat.backends.openssl.ciphersr   "cryptography.hazmat.bindings._rustr	   rN   $cryptography.hazmat.bindings.opensslr
   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr   )cryptography.hazmat.primitives.asymmetricr   r"  1cryptography.hazmat.primitives.asymmetric.paddingr   r   r   r   /cryptography.hazmat.primitives.asymmetric.typesr   &cryptography.hazmat.primitives.ciphersr   1cryptography.hazmat.primitives.ciphers.algorithmsr   r   r   r   r   r   r   r   r   r   r   r    ,cryptography.hazmat.primitives.ciphers.modesr!   r"   r#   r$   r%   r&   r'   r(   r)   3cryptography.hazmat.primitives.serialization.pkcs12r*   r+   r,   r-   r.   
namedtupler/   r3   r;   r   r   r  r7   r8   r9   <module>r     s  
 # " " " " "              $ $ $ $ $ $ $ $ 8 8 8 8 8 8 5 5 5 5 5 5 G G G G G G F F F F F F 8 8 8 8 8 8 @ @ @ @ @ @ @ @ H H H H H H 8 8 8 8 8 8 I I I I I I                                                
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
              $[#L5*2EFF
	 	 	 	 	 	 	 	V7 V7 V7 V7 V7 V7 V7 V7r       2J J J J
 '))r8   