
    >OOf                       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j                  dddg      ZC G d d      ZD G d d      ZE G d d      ZFddZG eE       ZHy)    )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y)_RC2N)__name__
__module____qualname__     m/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.pyr3   r3   G   s    r8   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j0                  ej2                  ej4                  ej6                  fZdZdZddz  ZdZ de z  Z!d<d	Z"d=d
Z#	 d>	 	 	 	 	 d?dZ$d<dZ%d=dZ&d@dZ'dAdZ(dAdZ)dBdZ*	 	 	 	 dBdZ+dCdZ,dBdZ-dDdZ.d<dZ/d<dZ0	 	 	 	 	 	 dEdZ1	 	 	 	 	 	 dEdZ2dBdZ3dFdZ4	 	 	 	 	 	 dGdZ5dHdZ6d Z7dId Z8dBd!Z9dJd"Z:dJd#Z;dCd$Z<dBd%Z=dCd&Z>dKd'Z?dLd(Z@dMd)ZA	 	 	 	 dNd*ZBdOd+ZC	 	 	 	 	 	 dPd,ZD	 	 	 	 	 	 dQd-ZEdCd.ZFdCd/ZGdCd0ZHdCd1ZIdCd2ZJdCd3ZKdCd4ZLdRd5ZMeNj                  d6        ZP	 	 	 	 	 	 dSd7ZQ	 	 	 	 	 	 dTd8ZR	 	 	 	 	 	 	 	 	 	 	 	 dUd9ZSdCd:ZTdCd;ZUy)V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     c                   t        j                         | _        | j                  j                  | _        | j                  j
                  | _        t        j                         | _	        i | _
        | j                          y 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__}   s^    )MM%%	MM%%	)99;
  	 	&&(r8   c                t    dj                  | j                         | j                  t        j                        S )Nz3<OpenSSLBackend(version: {}, FIPS: {}, Legacy: {})>)formatopenssl_version_textrN   rL   _legacy_provider_loadedrQ   s    r9   __repr__zBackend.__repr__   s3    DKK%%'00
 	
r8   Nc                0    t        j                  ||      S )N)errors)r
   _openssl_assert)rR   okrZ   s      r9   openssl_assertzBackend.openssl_assert   s    
 &&r&99r8   c                    | j                   j                          t        j                         sJ t        j                         | _        y rE   )rG   _enable_fipsrL   rM   rN   rQ   s    r9   r_   zBackend._enable_fips   s7     	""$++---)99;r8   c                    | j                   j                  | j                  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)rI   stringrK   OpenSSL_versionOPENSSL_VERSIONdecoderQ   s    r9   rV   zBackend.openssl_version_text   s@     yyII%%dii&?&?@

&/	r8   c                6    | j                   j                         S rE   )rK   OpenSSL_version_numrQ   s    r9   openssl_version_numberzBackend.openssl_version_number   s    yy,,..r8   c                    |j                   dv r-|j                    |j                  dz   j                  d      }n|j                   j                  d      }| j                  j	                  |      }|S )N)blake2bblake2s   ra   )namedigest_sizeencoderK   EVP_get_digestbyname)rR   	algorithmalgevp_mds       r9   _evp_md_from_algorithmzBackend._evp_md_from_algorithm   sk    >>33^^$Y%:%:Q%>$?@GGC ..''0C//4r8   c                x    | j                  |      }| j                  || j                  j                  k7         |S rE   )rt   r]   rI   NULLrR   rq   rs   s      r9   _evp_md_non_null_from_algorithmz'Backend._evp_md_non_null_from_algorithm   s2    ,,Y7Fdiinn45r8   c                    | j                   rt        || j                        sy| j                  |      }|| j                  j
                  k7  S NF)rN   
isinstance_fips_hashesrt   rI   rv   rw   s      r9   hash_supportedzBackend.hash_supported   s@    jD<M<M&N,,Y7''r8   c                r    | j                   rt        |t        j                        ry| j	                  |      S rz   rN   r{   r   SHA1r}   rR   rq   s     r9   signature_hash_supportedz Backend.signature_hash_supported   s.    
 *Y"D""9--r8   c                N    | j                   ry| j                  j                  dk(  S )NFrC   )rN   rK   Cryptography_HAS_SCRYPTrQ   s    r9   scrypt_supportedzBackend.scrypt_supported   s#    994499r8   c                r    | j                   rt        |t        j                        ry| j	                  |      S )NTr   r   s     r9   hmac_supportedzBackend.hmac_supported   s,    *Y"D""9--r8   c                    | j                   rt        || j                        sy	 | j                  t	        |      t	        |      f   } || ||      }| j                  j                  |k7  S # t
        $ r Y yw xY wrz   )rN   r{   _fips_ciphersrO   typeKeyErrorrI   rv   )rR   ciphermodeadapter
evp_ciphers        r9   cipher_supportedzBackend.cipher_supported   sy     fd&8&89	++DL$t*,DEG T640
yy~~++  		s   #A+ +	A76A7c                j    ||f| j                   v rt        d| d| d      || j                   ||f<   y )NzDuplicate registration for:  .)rO   
ValueError)rR   
cipher_clsmode_clsr   s       r9   register_cipher_adapterzBackend.register_cipher_adapter   sK    !T%:%::.zl!H:QG  7>j(23r8   c           	        t         t        t        fD ]H  }t        t        t
        t        t        t        t        fD ]  }| j                  ||t        d               J t        t        t
        t        t        fD ]"  }| j                  t        |t        d             $ t        t        t        t        fD ]"  }| j                  t        |t        d             $ | j                  t        t
        t        d             | j                  t        t        d       t        | j                   j"                  rdnd             | j                  t         t$        t&               t
        t        t        t        t        t        fD ]"  }| j                  t(        |t        d             $ t*        j,                  s| j                   j.                  s!t        t        t        t
        fD ]"  }| j                  t0        |t        d             $ t        t        t        t
        fD ]"  }| j                  t2        |t        d             $ t5        j6                  t8        t:        gt        t        t        t
        g      D ]!  \  }}| j                  ||t        d	             # | j                  t<        t        d       t        d
             | j                  t>        t        d       t        d             y y )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   rK   CRYPTOGRAPHY_IS_LIBRESSLr(   _get_xts_cipherr   rL   rW   #CRYPTOGRAPHY_OPENSSL_300_OR_GREATERr   r    	itertoolsproductr   r   r   r3   )rR   r   r   s      r9   rP   z!Backend._register_default_ciphers   s{   / 	J #sCdC@ ,,#E	 c3S1 	H(( MN	 c4- 	H((8_5K%L	 	$$sOJ7	

 	$$J II>>J	
 	$$S#?c3S#6 	H((X/@A	 0099@@ #sC0 ,,%#$45 !#sC0 ,,!#$67 )2(9(9/c3$) $
H ,,#$?@	 ((d4j/%"8 ((d4j/%"87 Ar8   c                :    t        | ||t         j                        S rE   )r   _ENCRYPTrR   r   r   s      r9   create_symmetric_encryption_ctxz'Backend.create_symmetric_encryption_ctx8       dFD.2I2IJJr8   c                :    t        | ||t         j                        S rE   )r   _DECRYPTr   s      r9   create_symmetric_decryption_ctxz'Backend.create_symmetric_decryption_ctx=  r   r8   c                $    | j                  |      S rE   )r   r   s     r9   pbkdf2_hmac_supportedzBackend.pbkdf2_hmac_supportedB  s    ""9--r8   c                *    t        j                         S rE   )rL   capture_error_stackrQ   s    r9   _consume_errorszBackend._consume_errorsE  s    //11r8   c                .    |dk\  xr |dz  dk7  xr |dk\  S )N   rC   r   i   r7   )rR   public_exponentkey_sizes      r9   !generate_rsa_parameters_supportedz)Backend.generate_rsa_parameters_supportedH  s/     q   !#q( C	
r8   c                F   | j                   j                  |      }| j                  j                  |t	        |            }| j                  || j                   j                  k7         t        | j                   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.
        )
rI   from_bufferrK   BIO_new_mem_buflenr]   rv   r/   gcBIO_free)rR   datadata_ptrr0   s       r9   _bytes_to_biozBackend._bytes_to_bioQ  ss     99((.ii''#d)<C499>>12$)),,sDII,>,>?JJr8   c                p   | j                   j                         }| j                  || j                  j                  k7         | j                   j                  |      }| j                  || j                  j                  k7         | j                  j                  || j                   j                        }|S )z.
        Creates an empty memory BIO.
        )rK   	BIO_s_memr]   rI   rv   BIO_newr   r   )rR   
bio_methodr0   s      r9   _create_mem_bio_gczBackend._create_mem_bio_gc^  s     YY((*
J$))..89ii
+C499>>12iill3		 2 23
r8   c                6   | j                   j                  d      }| j                  j                  ||      }| j	                  |dkD         | j	                  |d   | j                   j
                  k7         | j                   j                  |d   |      dd }|S )zE
        Reads a memory BIO. This only works on memory BIOs.
        zchar **r   N)rI   newrK   BIO_get_mem_datar]   rv   buffer)rR   r0   bufbuf_lenbio_datas        r9   _read_mem_biozBackend._read_mem_bioi  s     iimmI&)),,S#6GaK(CFdiinn4599##CFG4Q7r8   c                    | j                   rt        |t        j                        ryt        |t        j                  t        j                  t        j
                  t        j                  t        j                  f      S rz   )rN   r{   r   r   SHA224SHA256SHA384SHA512r   s     r9   _oaep_hash_supportedzBackend._oaep_hash_supportedt  sS    *Y"D	
 		
r8   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)r{   r   r   _mgfr   rN   
_algorithmr   r   r}   r   r   rR   paddings     r9   rsa_padding_supportedzBackend.rsa_padding_supported  s    gx(%*W\\4*H !!j''' **7<<+B+BCC&:gllD+I,,'' @++G,>,>?@ r8   c                ^    | j                   rt        |t              ry| j                  |      S rz   )rN   r{   r   r   r   s     r9   rsa_encryption_supportedz Backend.rsa_encryption_supported  s(    *Wh"?--g66r8   c                N    | j                   j                   xr | j                   S rE   )rK   CRYPTOGRAPHY_IS_BORINGSSLrN   rQ   s    r9   dsa_supportedzBackend.dsa_supported  s%    		333ND<N<N8N	
r8   c                F    | j                         sy| j                  |      S rz   )r   r   r   s     r9   dsa_hash_supportedzBackend.dsa_hash_supported  s"    !!#,,Y77r8   c                R    | j                  |t        d|j                  z              S )N    )r   r!   
block_sizer   s     r9   cmac_algorithm_supportedz Backend.cmac_algorithm_supported  s*    $$s7Y%9%99:
 	
r8   c                   |j                  t        j                  j                        }| j	                  |      }| j
                  j                  |j                  | j                  j                        }| j                  || j                  j                  k7         | j                  j                  || j
                  j                        }|S rE   )public_bytesr   EncodingDERr   rK   d2i_X509_bior0   rI   rv   r]   r   	X509_free)rR   certr   mem_bior   s        r9   
_cert2osslzBackend._cert2ossl  s      !7!7!;!;<$$T*yy%%gkk499>>BDDIINN23yy||D$))"5"56r8   c                    | j                         }| j                  j                  ||      }| j                  |dk(         t	        j
                  | j                  |            S NrC   )r   rK   i2d_X509_bior]   r   load_der_x509_certificater   )rR   x509_ptrr0   ress       r9   
_ossl2certzBackend._ossl2cert  sT    %%'ii$$S(3C1H%--d.@.@.EFFr8   c                   |j                  t        j                  j                  t        j                  j
                  t        j                               }| j                  |      }| j                  j                  |j                  | j                  j                        }| j                  || j                  j                  k7         | j                  j                  || j                  j                        S rE   )private_bytesr   r   r   PrivateFormatPKCS8NoEncryptionr   rK   d2i_PrivateKey_bior0   rI   rv   r]   r   EVP_PKEY_free)rR   keyr   r   evp_pkeys        r9   	_key2osslzBackend._key2ossl  s      ""&&''--&&(

 $$T*99//KKIINN
 	H		67yy||Hdii&=&=>>r8   c                $    |st        d      |d   j                   j                  j                   j                  j                        s|d   j                   j                  j
                   j                  j                        sS j                  j                  rH|d   j                   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     K   | ]>  }|j                  j                  j                  j                  j                         @ y wrE   )_lib_reason_matchrK   ERR_LIB_EVP'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM).0errorrR   s     r9   	<genexpr>z4Backend._handle_key_loading_error.<locals>.<genexpr>  s@      

 	 ##		%%		AA
s   AA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   rK   r   EVP_R_BAD_DECRYPTERR_LIB_PKCS12!PKCS12_R_PKCS12_CIPHERFINAL_ERRORCryptography_HAS_PROVIDERSERR_LIB_PROVPROV_R_BAD_DECRYPTany)rR   rZ   s   ` r9   _handle_key_loading_errorz!Backend._handle_key_loading_error  s       1I''		%%tyy'B'B ay**		((		;;
 		441I//II**II00 ?@@ 

  
 
 @AA 4  r8   c                    | j                   rt        || j                        syt        j                  j                  |      S rz   )rN   r{   _fips_ecdh_curvesrL   r   curve_supported)rR   curves     r9   elliptic_curve_supportedz Backend.elliptic_curve_supported  s7    j4))'
 ..u55r8   c                    t        |t        j                        sy| j                  |      xrA t        |j                  t
        j                        xs | j                  |j                        S rz   )r{   r   ECDSAr  rq   
asym_utils	Prehashedr}   )rR   signature_algorithmr  s      r9   ,elliptic_curve_signature_algorithm_supportedz4Backend.elliptic_curve_signature_algorithm_supported  s`     -rxx8,,U3 
*44j6J6JK B""#6#@#@A	
r8   c                \    | j                  |      xr t        |t        j                        S rE   )r  r{   r   ECDH)rR   rq   r  s      r9   +elliptic_curve_exchange_algorithm_supportedz3Backend.elliptic_curve_exchange_algorithm_supported  s,     ,,U3 

rww9
 	
r8   c                0    | j                   j                   S rE   rK   r   rQ   s    r9   dh_supportedzBackend.dh_supported      996666r8   c                4    | j                   j                  dk(  S r   )rK   Cryptography_HAS_EVP_PKEY_DHXrQ   s    r9   dh_x942_serialization_supportedz'Backend.dh_x942_serialization_supported  s    yy66!;;r8   c                    | j                   ryyNFTrN   rQ   s    r9   x25519_supportedzBackend.x25519_supported      r8   c                |    | j                   ry| j                  j                   xr | j                  j                   S rz   rN   rK   r   r   rQ   s    r9   x448_supportedzBackend.x448_supported  8    		222 8II777	
r8   c                    | j                   ryyr"  r#  rQ   s    r9   ed25519_supportedzBackend.ed25519_supported&  r%  r8   c                |    | j                   ry| j                  j                   xr | j                  j                   S rz   r'  rQ   s    r9   ed448_supportedzBackend.ed448_supported+  r)  r8   c                .    t        j                  | |      S rE   )r   _aead_cipher_supported)rR   r   s     r9   aead_cipher_supportedzBackend.aead_cipher_supported3  s    **488r8   c                .    t        |      D ]  }d||<   	 y )Nr   )range)rR   r   lengthis       r9   
_zero_datazBackend._zero_data6  s      v 	ADG	r8   c              #    K   || j                   j                   yt        |      }| j                   j                  d|dz         }| j                   j	                  |||       	 | | j                  | j                   j                  d|      |       y# | j                  | j                   j                  d|      |       w xY w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 *)rI   rv   r   r   memmover5  cast)rR   r   data_lenr   s       r9   _zeroed_null_terminated_bufz#Backend._zeroed_null_terminated_buf=  s      <)).. 4yH))--(Q,7CIIc42L	 		{C @(K		{C @(Ks   A#C&B *-C.CCc                    | j                  ||      }|j                  |j                  r|j                  j                  nd |j                  D cg c]  }|j                   c}fS c c}w rE   )load_pkcs12r   r   certificateadditional_certs)rR   r   passwordpkcs12r   s        r9   %load_key_and_certificates_from_pkcs12z-Backend.load_key_and_certificates_from_pkcs12T  s\     !!$1JJ'-{{FKK##*0*A*AB$TB
 	
 Cs   A&c                	   |t        j                  d|       | j                  |      }| j                  j	                  |j
                  | j                  j                        }|| j                  j                  k(  r| j                          t        d      | j                  j                  || j                  j                        }| j                  j                  d      }| j                  j                  d      }| j                  j                  d      }| j                  |      5 }| j                  j                  |||||      }	d d d        	dk(  r| j                          t        d      d }
d }g }|d   | j                  j                  k7  rw| j                  j                  |d   | j                  j                        }t         j"                  j%                  t'        | j                  j)                  d|            d	
      }|d   | j                  j                  k7  r| j                  j                  |d   | j                  j*                        }| j-                  |      }d }| j                  j/                  || j                  j                        }|| j                  j                  k7  r| j                  j1                  |      }t3        ||      }
|d   | j                  j                  k7  r| j                  j                  |d   | j                  j4                        }| j                  j7                  |d         }| j                  j8                  s| j                  j:                  rt=        |      }nt?        t=        |            }|D ]	  }| j                  jA                  ||      }| jC                  || j                  j                  k7         | j                  j                  || j                  j*                        }| j-                  |      }d }| j                  j/                  || j                  j                        }|| j                  j                  k7  r| j                  j1                  |      }|jE                  t3        ||              tG        ||
|      S # 1 sw Y   kxY w)Nr?  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   rK   d2i_PKCS12_bior0   rI   rv   r   r   r   PKCS12_freer   r:  PKCS12_parser   rL   keysprivate_key_from_ptrintr8  r   r   X509_alias_get0rb   r+   sk_X509_freesk_X509_numr   r   r2  reversedsk_X509_valuer]   appendr,   )rR   r   r?  r0   p12evp_pkey_ptrr   sk_x509_ptrpassword_bufr   r   r   additional_certificatesr   r   cert_objrm   
maybe_namesk_x509numindicesr4  	addl_cert	addl_names                           r9   r<  zBackend.load_pkcs12b  s    "":x8  &ii&&sww		?$))..   "@AAiill3		 5 56yy}}]399==+iimm$CD--h7 	<))((\<;C	 !8  ">??"$?diinn,yy||LOTYY5L5LMH ##88DIINN;9:/4 9 C
 A;$))..(99<<TYY-@-@ADt,HD224HJTYY^^+yy''
3$Xt4Dq>TYY^^+iill;q>4993I3IJG))''A7C 		==9966*"5:. yy..w:##DDIINN$:;yy||D$))*=*=> OOD1	 	!YY66tTYY^^L
/ $		 0 0 <I'..%i; (T3JKKu	 	s   * R33R=c                h   d }|t        j                  d|       t        |t        j                        r d}d}d}	d}
| j
                  j                  }nat        |t        j                        r| j                  j                  r-| j                  j                  }| j                  j                  }n,| j                  j                  }| j                  j                  }d}	d}
| j
                  j                  }|j                  }nt        |t        j                        r|j                  t        j                  j                   u rcd}d}d}	d}
|j                  }|j"                  }|t$        j&                  u r-| j                  j                  }| j                  j                  }nd|t$        j(                  u rN| j                  j                  st+        d      | j                  j                  }| j                  j                  }n|J |j,                  e| j                  j.                  st+        d      | j1                  |j,                        }| j3                  || j
                  j                  k7         n| j
                  j                  }|j4                  |j4                  }	nt7        d      |t9        |      dk(  r| j
                  j                  }nP| j                  j;                         }| j
                  j=                  || j                  j>                        }g }|D ]  }t        |t@              r|jB                  }| jE                  |jF                        }|2| j                  jI                  || j
                  j                  d      }n&| j                  jI                  ||t9        |            }| j3                  |dk(         n| jE                  |      }|jK                  |       | j                  jM                  ||      }tN        j3                  |dk\          | jQ                  |      5 }| jQ                  |      5 }|r| jE                  |      n| j
                  j                  }|| jS                  |      n| j
                  j                  }| j                  jU                  ||||||||	|
d
      }|| j
                  j                  k(  r| jW                         }t7        d	|      	 d d d        | j                  j.                  rN|| j
                  j                  k7  r5| j                  jY                  |d| j
                  j                  d|
|       d d d        | j3                  | j
                  j                  k7         | j
                  j=                  || j                  jZ                        }| j]                         }| j                  j_                  ||      }| j3                  |dkD         | ja                  |      S # 1 sw Y   xY w# 1 sw Y   xY w)
Nrm   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   rI   rv   BestAvailableEncryptionrK   r   NID_aes_256_cbc&NID_pbe_WithSHA1And3_Key_TripleDES_CBCr?  _KeySerializationEncryption_formatr   PKCS12_key_cert_algorithmr*   PBESv1SHA1And3KeyTripleDESCBCPBESv2SHA256AndAES256CBCr   
_hmac_hashCryptography_HAS_PKCS12_SET_MACrx   r]   _kdf_roundsr   r   sk_X509_new_nullr   rM  r+   friendly_namer   r=  X509_alias_set1rQ  sk_X509_pushbackendr:  r   PKCS12_creater   PKCS12_set_macrG  r   i2d_PKCS12_bior   )rR   rm   r   r   casencryption_algorithmr?  nid_certnid_keypkcs12_itermac_itermac_alg
keycertalgrY  ossl_cascaca_aliasossl_car   rU  name_buf	ossl_cert	ossl_pkeyrR  rZ   r0   s                             r9   (serialize_key_and_certificates_to_pkcs12z0Backend.serialize_key_and_certificates_to_pkcs12  s=    vt,*M,F,FGHGKHiinnG -"G"G
 yy<<9944))3399KK))JJK HiinnG+44H$m&O&O %,,**112
 HGKH+44H-AAJT???99KK))JJt<<<yyDD.L   9944))33!))) $..:yy@@..  >>(33 ##Gtyy~~$=>))..#//;2>> >??;#c(a-iinnGii002Giill7DII,B,BCG H 1b"34!//H"oobnn=G'"ii77#TYY^^R #ii77#Xs8} ''q1"oob1G(ii,,Wg>&&sax0#1& --h7 )	<11$7 859DOOD1tyy~~	+.?DNN3'		  ii--  $))..(!113F$,   )%: 		99tyy~~-		(( IINNC)	V 	C499>>12iill3		 5 56%%'ii&&sC0C!G$!!#&&a )	 )	s&   ?X(B,X>A,X(X%	 X((X1c                    | j                   ry| j                  j                  s| j                  j                  ry| j                  j                  dk(  S )NFTrC   )rN   rK   r   r   Cryptography_HAS_POLY1305rQ   s    r9   poly1305_supportedzBackend.poly1305_supportedU  s@    II//yy119966!;;r8   c                0    | j                   j                   S rE   r  rQ   s    r9   pkcs7_supportedzBackend.pkcs7_supported`  r  r8   )returnNone)r  strrE   )r\   boolrZ   z&list[rust_openssl.OpenSSLError] | Noner  r  )r  rK  )rq   hashes.HashAlgorithm)rq   r  r  r  )r  r  )r   r   r   r)   r  r  )r   r   r   r)   r  r   )r  list[rust_openssl.OpenSSLError])r   rK  r   rK  r  r  )r   bytesr  r/   )r  r  )r   r   r  r  )r   x509.Certificater  
typing.Any)r   r  r  r  )r   r-   r  r  )rZ   r  r  ztyping.NoReturn)r  ec.EllipticCurver  r  )r  z"ec.EllipticCurveSignatureAlgorithmr  r  r  r  )rq   zec.ECDHr  r  r  r  )r3  rK  r  r  )r   r  r?  bytes | Noner  zNtuple[PrivateKeyTypes | None, x509.Certificate | None, list[x509.Certificate]])r   r  r?  r  r  r,   )rm   r  r   zPKCS12PrivateKeyTypes | Noner   zx509.Certificate | Noneru  zlist[_PKCS12CATypes] | Nonerv  z(serialization.KeySerializationEncryptionr  r  )Vr4   r5   r6   __doc__rm   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_modulusrS   rX   r]   r_   rV   rh   rt   rx   r}   r   r   r   r   r   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r$  r(  r+  r-  r0  r5  
contextlibcontextmanagerr:  rA  r<  r  r  r  r7   r8   r9   r;   r;   K   s0    D/J+  FM 	L 	


	 "$)!I  55
)
 :>:: 7: 
	:<	/	
(.-.	.:.,>HTK%K-1K	K
K%K-1K	K
.2
"
.1
	
K		
&7

8


G?,5,	,\6
?
  
 
	

 
)9
	
7<



9 L L,

%1


JLJL%1JL	!JLXe'e' *e' &	e'
 )e' Ge' 
e'N	<7r8   r;   c                      e Zd ZddZddZy)r   c                    || _         y rE   )_fmt)rR   fmts     r9   rS   zGetCipherByName.__init__e  s	    	r8   c                   | j                   j                  ||      j                         }|j                  j	                  |j                  d            }||j                  j                  k(  rj|j                  j                  rT|j                  j                  |j                  j                  |j                  d      |j                  j                        }|j                          |S )N)r   r   ra   )r  rU   lowerrK   EVP_get_cipherbynamero   rI   rv   Cryptography_HAS_300_EVP_CIPHEREVP_CIPHER_fetchr   )rR   rq  r   r   cipher_namer   s         r9   __call__zGetCipherByName.__call__h  s    ii&&f4&@FFH\\66w'

 ',,+++<< 66!!""7+!!J 	!r8   N)r  r  )rq  r;   r   r   r   r)   )r4   r5   r6   rS   r  r7   r8   r9   r   r   d  s    r8   r   c                |    d|j                   dz   d}| j                  j                  |j                  d            S )Nzaes-   z-xtsra   )r   rK   r  ro   )rq  r   r   r  s       r9   r   r   }  s:    A-.d3K<<,,[-?-?-HIIr8   )rq  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	   rL   $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   rq  r7   r8   r9   <module>r     s   
 #     $ 8 5 G F 8 @ H 8 I    
 
 
  $[##L5*2EF
	 	V7 V7r 2J
 )r8   