o
    C©ZhŽ  ã                   @  sª  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 Bdddg¡ZCG dd„ dƒZDG dd„ dƒZEG dd„ dƒZFd!dd „ZGeEƒ 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ÚbioZchar_ptrc                   @  s   e Zd ZdS )Ú_RC2N)Ú__name__Ú
__module__Ú__qualname__© r4   r4   úc/var/www/html/lang_env/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/backend.pyr0   G   s    r0   c                   @  sŠ  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dZ de > Z!ddd„Z"dždd„Z#	dŸd dd„Z$ddd„Z%dždd„Z&d¡dd„Z'd¢d d!„Z(d¢d"d#„Z)d£d$d%„Z*d£d&d'„Z+d¤d(d)„Z,d£d*d+„Z-d¥d0d1„Z.dd2d3„Z/dd4d5„Z0d¦d7d8„Z1d¦d9d:„Z2d£d;d<„Z3d§d>d?„Z4d¨dBdC„Z5d©dGdH„Z6dIdJ„ Z7dªdKdL„Z8d£dMdN„Z9d«dQdR„Z:d«dSdT„Z;d¤dUdV„Z<d£dWdX„Z=d¤dYdZ„Z>d¬d^d_„Z?d­dadb„Z@d®dedf„ZAd¯dhdi„ZBd°dldm„ZCd±dpdq„ZDd²dsdt„ZEd¤dudv„ZFd¤dwdx„ZGd¤dydz„ZHd¤d{d|„ZId¤d}d~„ZJd¤dd€„ZKd¤dd‚„ZLd³d„d…„ZMeNjOd†d‡„ ƒZPd´d‹dŒ„ZQdµdŽd„ZRd¶d—d˜„ZSd¤d™dš„ZTd¤d›dœ„ZUdS )·ÚBackendz)
    OpenSSL API binding interfaces.
    r   >   s   aes-128-gcms   aes-256-gcms   aes-256-ccms   aes-128-ccms   aes-192-gcms   aes-192-ccmztyping.ClassVar[set[bytes]]Ú
_fips_aeadi   i  é   ÚreturnÚNonec                 C  s:   t  ¡ | _| jj| _| jj| _t ¡ | _	i | _
|  ¡  d S ©N)r	   ZBindingÚ_bindingÚffiÚ_ffiÚlibÚ_libÚrust_opensslÚis_fips_enabledÚ_fips_enabledÚ_cipher_registryÚ_register_default_ciphers©Úselfr4   r4   r5   Ú__init__}   s   



ýzBackend.__init__Ústrc                 C  s   d  |  ¡ | jtj¡S )Nz3<OpenSSLBackend(version: {}, FIPS: {}, Legacy: {})>)ÚformatÚopenssl_version_textrC   rA   Ú_legacy_provider_loadedrF   r4   r4   r5   Ú__repr__‰   s
   ýzBackend.__repr__NÚokÚboolÚerrorsú&list[rust_openssl.OpenSSLError] | Nonec                 C  s   t j||dS )N)rP   )r	   Z_openssl_assert)rG   rN   rP   r4   r4   r5   Úopenssl_assert   s   zBackend.openssl_assertc                 C  s$   | j  ¡  t ¡ sJ ‚t ¡ | _d S r;   )r<   Ú_enable_fipsrA   rB   rC   rF   r4   r4   r5   rS   —   s   
zBackend._enable_fipsc                 C  s   | 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)r>   Ústringr@   ZOpenSSL_versionÚOPENSSL_VERSIONÚdecoderF   r4   r4   r5   rK   ž   s
   ÿþzBackend.openssl_version_textÚintc                 C  s
   | j  ¡ S r;   )r@   ZOpenSSL_version_numrF   r4   r4   r5   Úopenssl_version_number©   ó   
zBackend.openssl_version_numberÚ	algorithmúhashes.HashAlgorithmc                 C  sB   |j dv r|j › |jd ›  d¡}n|j  d¡}| j |¡}|S )N)Úblake2bÚblake2sé   rT   )ÚnameÚdigest_sizeÚencoder@   ZEVP_get_digestbyname)rG   r[   ÚalgÚevp_mdr4   r4   r5   Ú_evp_md_from_algorithm¬   s   
ÿzBackend._evp_md_from_algorithmc                 C  s    |   |¡}|  || jjk¡ |S r;   )re   rR   r>   ÚNULL©rG   r[   rd   r4   r4   r5   Ú_evp_md_non_null_from_algorithm·   s   
z'Backend._evp_md_non_null_from_algorithmc                 C  s,   | j rt|| jƒsdS |  |¡}|| jjkS ©NF)rC   Ú
isinstanceÚ_fips_hashesre   r>   rf   rg   r4   r4   r5   Úhash_supported¼   s   
zBackend.hash_supportedc                 C  ó    | j rt|tjƒrdS |  |¡S ri   ©rC   rj   r
   ÚSHA1rl   ©rG   r[   r4   r4   r5   Úsignature_hash_supportedÃ   s   
z Backend.signature_hash_supportedc                 C  s   | j rdS | jjdkS )NFr8   )rC   r@   ZCryptography_HAS_SCRYPTrF   r4   r4   r5   Úscrypt_supportedÌ   s   zBackend.scrypt_supportedc                 C  rm   )NTrn   rp   r4   r4   r5   Úhmac_supportedÒ   s   
zBackend.hmac_supportedÚcipherr   Úmoder(   c                 C  s^   | j rt|| jƒsdS z| jt|ƒt|ƒf }W n
 ty"   Y dS w || ||ƒ}| jj|kS ri   )rC   rj   Ú_fips_ciphersrD   ÚtypeÚKeyErrorr>   rf   )rG   rt   ru   ÚadapterÚ
evp_cipherr4   r4   r5   Úcipher_supportedÙ   s   ÿzBackend.cipher_supportedc                 C  s6   ||f| j v rtd|› d|› dƒ‚|| j ||f< d S )NzDuplicate registration for: ú Ú.)rD   Ú
ValueError)rG   Ú
cipher_clsÚmode_clsry   r4   r4   r5   Úregister_cipher_adapterç   s
   ÿzBackend.register_cipher_adapterc                 C  s¬  t ttfD ]}ttttttt	fD ]}|  
||tdƒ¡ qqtttttfD ]}|  
t|tdƒ¡ q$ttttfD ]}|  
t|tdƒ¡ q6|  
tttdƒ¡ |  
ttd ƒt| jjrXdndƒ¡ |  
t tt¡ tttttt	fD ]}|  
t|tdƒ¡ qktjs~| jjsÔttttfD ]}|  
t|tdƒ¡ q„ttttfD ]}|  
t|tdƒ¡ q–t ttgttttg¡D ]\}}|  
||td	ƒ¡ q®|  
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-ede3ZchachaZchacha20zsm4-{mode.name}zbf-{mode.name}zseed-{mode.name}z{cipher.name}-{mode.name}Zrc4Zrc2) r   r   r   r    r#   r$   r&   r!   r"   r%   r   ÚGetCipherByNamer   r   r   rw   r@   ÚCRYPTOGRAPHY_IS_LIBRESSLr'   Ú_get_xts_cipherr   rA   rL   Ú#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERr   r   Ú	itertoolsÚproductr   r   r   r0   )rG   r   r€   r4   r4   r5   rE   î   s†   ÿýÿý
ÿ
ÿÿý
ÿÿþýý
þýÿÿãz!Backend._register_default_ciphersr   c                 C  ó   t | ||t jƒS r;   )r   Z_ENCRYPT©rG   rt   ru   r4   r4   r5   Úcreate_symmetric_encryption_ctx8  ó   z'Backend.create_symmetric_encryption_ctxc                 C  rˆ   r;   )r   Z_DECRYPTr‰   r4   r4   r5   Úcreate_symmetric_decryption_ctx=  r‹   z'Backend.create_symmetric_decryption_ctxc                 C  s
   |   |¡S r;   )rs   rp   r4   r4   r5   Úpbkdf2_hmac_supportedB  rZ   zBackend.pbkdf2_hmac_supportedúlist[rust_openssl.OpenSSLError]c                 C  s   t  ¡ S r;   )rA   Zcapture_error_stackrF   r4   r4   r5   Ú_consume_errorsE  s   zBackend._consume_errorsÚpublic_exponentÚkey_sizec                 C  s   |dko|d@ dko|dkS )Né   r8   r   i   r4   )rG   r   r‘   r4   r4   r5   Ú!generate_rsa_parameters_supportedH  s
   
ÿýz)Backend.generate_rsa_parameters_supportedÚdataÚbytesr.   c                 C  sH   | 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.
        )
r>   Zfrom_bufferr@   ZBIO_new_mem_bufÚlenrR   rf   r.   ÚgcÚBIO_free)rG   r”   Zdata_ptrr/   r4   r4   r5   Ú_bytes_to_bioQ  s   zBackend._bytes_to_bioc                 C  sP   | j  ¡ }|  || jjk¡ | j  |¡}|  || jjk¡ | j || j j¡}|S )z.
        Creates an empty memory BIO.
        )r@   Z	BIO_s_memrR   r>   rf   ZBIO_newr—   r˜   )rG   Z
bio_methodr/   r4   r4   r5   Ú_create_mem_bio_gc^  s   
zBackend._create_mem_bio_gcc                 C  s\   | 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)r>   Únewr@   ZBIO_get_mem_datarR   rf   Úbuffer)rG   r/   ÚbufÚbuf_lenZbio_datar4   r4   r5   Ú_read_mem_bioi  s   zBackend._read_mem_bioc                 C  s4   | j rt|tjƒrdS t|tjtjtjtjtjfƒS ri   )rC   rj   r
   ro   ÚSHA224ÚSHA256ÚSHA384ÚSHA512rp   r4   r4   r5   Ú_oaep_hash_supportedt  s   ûþzBackend._oaep_hash_supportedÚpaddingr   c                 C  s€   t |tƒrdS t |tƒr&t |jtƒr&| jrt |jjtjƒrdS |  	|jj¡S t |t
ƒr>t |jtƒr>|  |jj¡o=|  |j¡S dS )NTF)rj   r   r   Z_mgfr   rC   Ú
_algorithmr
   ro   rl   r   r¤   ©rG   r¥   r4   r4   r5   Úrsa_padding_supportedƒ  s   

ÿÿ
þzBackend.rsa_padding_supportedc                 C  s   | j r
t|tƒr
dS |  |¡S ri   )rC   rj   r   r¨   r§   r4   r4   r5   Úrsa_encryption_supported–  s   
z Backend.rsa_encryption_supportedc                 C  s   | j j o| j S r;   )r@   ÚCRYPTOGRAPHY_IS_BORINGSSLrC   rF   r4   r4   r5   Údsa_supportedœ  s   ÿzBackend.dsa_supportedc                 C  s   |   ¡ sdS |  |¡S ri   )r«   rq   rp   r4   r4   r5   Údsa_hash_supported¡  s   
zBackend.dsa_hash_supportedc                 C  s   |   |td|j ƒ¡S )Nó    )r{   r    Ú
block_sizerp   r4   r4   r5   Úcmac_algorithm_supported¦  s   ÿz Backend.cmac_algorithm_supportedÚcertúx509.Certificateú
typing.Anyc                 C  sT   |  tjj¡}|  |¡}| j |j| jj	¡}|  
|| jj	k¡ | j || jj¡}|S r;   )Úpublic_bytesr   ÚEncodingÚDERr™   r@   Zd2i_X509_bior/   r>   rf   rR   r—   Ú	X509_free)rG   r°   r”   Úmem_bior   r4   r4   r5   Ú
_cert2ossl«  s   
zBackend._cert2osslÚx509_ptrc                 C  s4   |   ¡ }| j ||¡}|  |dk¡ t |  |¡¡S ©Nr8   )rš   r@   Zi2d_X509_biorR   r   Zload_der_x509_certificaterŸ   )rG   r¹   r/   Úresr4   r4   r5   Ú
_ossl2cert³  s   zBackend._ossl2certÚkeyr,   c                 C  s\   |  tjjtjjt ¡ ¡}|  |¡}| j 	|j
| jj¡}|  || jjk¡ | j || jj¡S r;   )Zprivate_bytesr   r´   rµ   ÚPrivateFormatZPKCS8ÚNoEncryptionr™   r@   Zd2i_PrivateKey_bior/   r>   rf   rR   r—   ÚEVP_PKEY_free)rG   r½   r”   r·   Úevp_pkeyr4   r4   r5   Ú	_key2ossl¹  s   ý
þzBackend._key2osslútyping.NoReturnc                   sŒ   |st dƒ‚|d  ˆ jjˆ jj¡s.|d  ˆ jjˆ jj¡s.ˆ jjr2|d  ˆ jjˆ jj	¡r2t dƒ‚t
‡ fdd„|D ƒƒrAt 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  s$    | ]}|  ˆ jjˆ jj¡V  qd S r;   )Ú_lib_reason_matchr@   ÚERR_LIB_EVPZ'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM)Ú.0ÚerrorrF   r4   r5   Ú	<genexpr>ä  s   € üþ
ÿz4Backend._handle_key_loading_error.<locals>.<genexpr>z!Unsupported public key algorithm.zÊCould 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Ä   r@   rÅ   ZEVP_R_BAD_DECRYPTZERR_LIB_PKCS12Z!PKCS12_R_PKCS12_CIPHERFINAL_ERRORZCryptography_HAS_PROVIDERSZERR_LIB_PROVZPROV_R_BAD_DECRYPTÚany)rG   rP   r4   rF   r5   Ú_handle_key_loading_errorÈ  s:   ÿÿÿþü	÷
þöûûz!Backend._handle_key_loading_errorÚcurveúec.EllipticCurvec                 C  s"   | j rt|| jƒsdS tj |¡S ri   )rC   rj   Ú_fips_ecdh_curvesrA   r   Zcurve_supported)rG   rË   r4   r4   r5   Ú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 ri   )rj   r   ZECDSArÎ   r[   Ú
asym_utilsZ	Prehashedrl   )rG   rÏ   rË   r4   r4   r5   Ú,elliptic_curve_signature_algorithm_supportedþ  s   

þz4Backend.elliptic_curve_signature_algorithm_supportedúec.ECDHc                 C  s   |   |¡o
t|tjƒS r;   )rÎ   rj   r   ZECDH)rG   r[   rË   r4   r4   r5   Ú+elliptic_curve_exchange_algorithm_supported  s   ÿz3Backend.elliptic_curve_exchange_algorithm_supportedc                 C  ó
   | j j S r;   ©r@   rª   rF   r4   r4   r5   Údh_supported  rZ   zBackend.dh_supportedc                 C  s   | j jdkS rº   )r@   ZCryptography_HAS_EVP_PKEY_DHXrF   r4   r4   r5   Údh_x942_serialization_supported  ó   z'Backend.dh_x942_serialization_supportedc                 C  ó   | j rdS dS ©NFT©rC   rF   r4   r4   r5   Úx25519_supported  ó   zBackend.x25519_supportedc                 C  ó   | j rdS | jj o| jj S ri   ©rC   r@   rƒ   rª   rF   r4   r4   r5   Úx448_supported  ó
   
þzBackend.x448_supportedc                 C  rÚ   rÛ   rÜ   rF   r4   r4   r5   Úed25519_supported&  rÞ   zBackend.ed25519_supportedc                 C  rß   ri   rà   rF   r4   r4   r5   Úed448_supported+  râ   zBackend.ed448_supportedc                 C  s   t  | |¡S r;   )r   Z_aead_cipher_supported)rG   rt   r4   r4   r5   Úaead_cipher_supported3  rÙ   zBackend.aead_cipher_supportedÚlengthc                 C  s   t |ƒD ]}d||< qd S )Nr   )Úrange)rG   r”   ræ   Úir4   r4   r5   Ú
_zero_data6  s   
ÿzBackend._zero_datac                 c  s~    |du r| j jV  dS t|ƒ}| j  d|d ¡}| j  |||¡ z|V  W |  | j  d|¡|¡ dS |  | j  d|¡|¡ 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[]r8   z	uint8_t *)r>   rf   r–   r›   Zmemmoveré   Úcast)rG   r”   Údata_lenr   r4   r4   r5   Ú_zeroed_null_terminated_buf=  s   €2z#Backend._zeroed_null_terminated_bufÚpasswordúbytes | NoneúNtuple[PrivateKeyTypes | None, x509.Certificate | None, list[x509.Certificate]]c                 C  s2   |   ||¡}|j|jr|jjnd dd„ |jD ƒfS )Nc                 S  s   g | ]}|j ‘qS r4   )Úcertificate)rÆ   r°   r4   r4   r5   Ú
<listcomp>_  s    zABackend.load_key_and_certificates_from_pkcs12.<locals>.<listcomp>)Úload_pkcs12r½   r°   rð   Zadditional_certs)rG   r”   rí   Zpkcs12r4   r4   r5   Ú%load_key_and_certificates_from_pkcs12T  s
   ýz-Backend.load_key_and_certificates_from_pkcs12r+   c                 C  s‚  |d ur
t  d|¡ |  |¡}| j |j| jj¡}|| jjkr'|  ¡  t	dƒ‚| j 
|| jj¡}| j d¡}| j d¡}| j d¡}|  |¡}| j |||||¡}	W d   ƒ n1 s\w   Y  |	dkrm|  ¡  t	dƒ‚d }
d }g }|d | jjkr•| j 
|d | jj¡}tjjt| j d|¡ƒd	d
}|d | jjkrÉ| j 
|d | jj¡}|  |¡}d }| j || jj¡}|| jjkrÄ| j |¡}t||ƒ}
|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r2| j |¡}| "t||ƒ¡ qút#||
|ƒS )Nrí   z!Could not deserialize PKCS12 datazEVP_PKEY **zX509 **zCryptography_STACK_OF_X509 **r   zInvalid password or PKCS12 dataZ	uintptr_tF)Zunsafe_skip_rsa_key_validation)$r   Z_check_bytesliker™   r@   Zd2i_PKCS12_bior/   r>   rf   r   r~   r—   ÚPKCS12_freer›   rì   ZPKCS12_parserÀ   rA   ÚkeysZprivate_key_from_ptrrX   rê   r¶   r¼   ZX509_alias_get0rU   r*   Úsk_X509_freeZsk_X509_numr…   rª   rç   ÚreversedZsk_X509_valuerR   Úappendr+   )rG   r”   rí   r/   Úp12Zevp_pkey_ptrr¹   Zsk_x509_ptrÚpassword_bufr»   r°   r½   Zadditional_certificatesrÁ   r   Zcert_objr`   Z
maybe_nameÚsk_x509ÚnumÚindicesrè   Z	addl_certZ	addl_namer4   r4   r5   rò   b  st   

ÿÿþ

ÿþ

ÿzBackend.load_pkcs12r`   úPKCS12PrivateKeyTypes | Noneúx509.Certificate | NoneÚcasúlist[_PKCS12CATypes] | NoneÚencryption_algorithmú(serialization.KeySerializationEncryptionc                 C  sš  d }|d urt  d|¡ t|tjƒrd}d}d}	d}
| jj}nšt|tjƒrF| jj	r2| jj
}| jj
}n| jj}| jj}d}	d}
| jj}|j}nst|tjƒrµ|jtjju rµd}d}d}	d}
|j}|j}|tju ro| jj}| jj}n|tju r…| jj	s|tdƒ‚| jj
}| jj
}n|d u s‹J ‚|jd ur¨| jjs˜tdƒ‚|  |j¡}|  || jjk¡ n| jj}|jd ur´|j}	ntdƒ‚|d u sÃt|ƒdkrÈ| jj}n]| j ¡ }| j || jj¡}g }|D ]J}t|t ƒr|j!}|  "|j#¡}|d u rú| j $|| jjd¡}n
| j $||t|ƒ¡}|  |dk¡ n|  "|¡}| %|¡ | j &||¡}t' |dk¡ qÚ|  (|¡q}|  (|¡A}|r9|  "|¡n| jj}|d urG|  )|¡n| jj}| j *||||||||	|
d¡
}|| jjkrj|  +¡ }td	|ƒ‚W d   ƒ n	1 suw   Y  | jjr”|| jjkr”| j ,||d| jjd|
|¡ W d   ƒ n	1 sŸw   Y  |  || jjk¡ | j || jj-¡}|  .¡ }| j /||¡}|  |dk¡ |  0|¡S )
Nr`   éÿÿÿÿr   i N  r8   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_bytesrj   r   r¿   r>   rf   ZBestAvailableEncryptionr@   r…   ZNID_aes_256_cbcZ&NID_pbe_WithSHA1And3_Key_TripleDES_CBCrí   Z_KeySerializationEncryptionÚ_formatr¾   ZPKCS12Z_key_cert_algorithmr)   ZPBESv1SHA1And3KeyTripleDESCBCZPBESv2SHA256AndAES256CBCr   Z
_hmac_hashZCryptography_HAS_PKCS12_SET_MACrh   rR   Z_kdf_roundsr~   r–   Zsk_X509_new_nullr—   rö   r*   Zfriendly_namer¸   rð   ZX509_alias_set1rø   Zsk_X509_pushÚbackendrì   rÂ   ZPKCS12_creater   ZPKCS12_set_macrô   rš   Zi2d_PKCS12_biorŸ   )rG   r`   r½   r°   r   r  rí   Znid_certZnid_keyZpkcs12_iterZmac_iterZmac_algZ
keycertalgrû   Zossl_casÚcaZca_aliasZossl_car»   rú   Zname_bufZ	ossl_certZ	ossl_pkeyrù   rP   r/   r4   r4   r5   Ú(serialize_key_and_certificates_to_pkcs12®  sú   
ÿ
ÿÿÿ


ÿ

ÿÿ
€


ÿ
ÿ

ÿöûþîÿù€ß+
z0Backend.serialize_key_and_certificates_to_pkcs12c                 C  s*   | j rdS | jjs| jjrdS | jjdkS )NFTr8   )rC   r@   rª   rƒ   ZCryptography_HAS_POLY1305rF   r4   r4   r5   Úpoly1305_supportedU  s   ÿþzBackend.poly1305_supportedc                 C  rÕ   r;   rÖ   rF   r4   r4   r5   Úpkcs7_supported`  rZ   zBackend.pkcs7_supported)r9   r:   )r9   rI   r;   )rN   rO   rP   rQ   r9   r:   )r9   rX   )r[   r\   )r[   r\   r9   rO   )r9   rO   )rt   r   ru   r(   r9   rO   )rt   r   ru   r(   r9   r   )r9   rŽ   )r   rX   r‘   rX   r9   rO   )r”   r•   r9   r.   )r9   r•   )r¥   r   r9   rO   )r°   r±   r9   r²   )r¹   r²   r9   r±   )r½   r,   r9   r²   )rP   rŽ   r9   rÃ   )rË   rÌ   r9   rO   )rÏ   rÐ   rË   rÌ   r9   rO   )r[   rÓ   rË   rÌ   r9   rO   )ræ   rX   r9   r:   )r”   r•   rí   rî   r9   rï   )r”   r•   rí   rî   r9   r+   )r`   rî   r½   rþ   r°   rÿ   r   r  r  r  r9   r•   )Vr1   r2   r3   Ú__doc__r`   r7   Ú__annotations__r   rv   r
   r    r¡   r¢   r£   Z
SHA512_224Z
SHA512_256ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ZSHAKE128ZSHAKE256rk   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_modulusrH   rM   rR   rS   rK   rY   re   rh   rl   rq   rr   rs   r{   r   rE   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ä   rå   ré   Ú
contextlibÚcontextmanagerrì   ró   rò   r	  r
  r  r4   r4   r4   r5   r6   K   s¢   
 
ôü


ý







	




J




	











.













L 
(r6   c                   @  s    e Zd Zddd„Zddd„ZdS )r‚   ÚfmtrI   c                 C  s
   || _ d S r;   )Ú_fmt)rG   r  r4   r4   r5   rH   e  rZ   zGetCipherByName.__init__r  r6   rt   r   ru   r(   c                 C  sd   | j j||d ¡ }|j | d¡¡}||jjkr,|jjr,|j 	|jj| d¡|jj¡}| 
¡  |S )N)rt   ru   rT   )r  rJ   Úlowerr@   ÚEVP_get_cipherbynamerb   r>   rf   ZCryptography_HAS_300_EVP_CIPHERZEVP_CIPHER_fetchr   )rG   r  rt   ru   Úcipher_namerz   r4   r4   r5   Ú__call__h  s   ÿÿýzGetCipherByName.__call__N)r  rI   )r  r6   rt   r   ru   r(   )r1   r2   r3   rH   r  r4   r4   r4   r5   r‚   d  s    
r‚   r  rt   r   c                 C  s$   d|j d › d}| j | d¡¡S )Nzaes-é   z-xtsrT   )r‘   r@   r  rb   )r  rt   ru   r  r4   r4   r5   r„   }  s   r„   )r  r6   rt   r   )IÚ
__future__r   Úcollectionsr  r†   ÚtypingZcryptographyr   r   Zcryptography.exceptionsr   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.ciphersr   Z"cryptography.hazmat.bindings._rustr   rA   Z$cryptography.hazmat.bindings.opensslr	   Zcryptography.hazmat.primitivesr
   r   Z*cryptography.hazmat.primitives._asymmetricr   Z)cryptography.hazmat.primitives.asymmetricr   rÑ   Z1cryptography.hazmat.primitives.asymmetric.paddingr   r   r   r   Z/cryptography.hazmat.primitives.asymmetric.typesr   Z&cryptography.hazmat.primitives.ciphersr   Z1cryptography.hazmat.primitives.ciphers.algorithmsr   r   r   r   r   r   r   r   r   r   r   r   Z,cryptography.hazmat.primitives.ciphers.modesr    r!   r"   r#   r$   r%   r&   r'   r(   Z3cryptography.hazmat.primitives.serialization.pkcs12r)   r*   r+   r,   r-   Ú
namedtupler.   r0   r6   r‚   r„   r  r4   r4   r4   r5   Ú<module>   sB   8,      

