o
    ÖèFhŽ  ã                   @  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ÚbioÚchar_ptrc                   @  s   e Zd ZdS )Ú_RC2N)Ú__name__Ú
__module__Ú__qualname__© r5   r5   úe/var/www/html/loop/nvenv/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/backend.pyr1   G   s    r1   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!d�dd„Z"dždd„Z#	dŸ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¤d(d)„Z,d£d*d+„Z-d¥d0d1„Z.d�d2d3„Z/d�d4d5„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¤d�d‚„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   >   ó   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                 C  s:   t  ¡ | _| jj| _| jj| _t ¡ | _	i | _
|  ¡  d S ©N)r	   ÚBindingÚ_bindingÚffiÚ_ffiÚlibÚ_libÚrust_opensslÚis_fips_enabledÚ_fips_enabledÚ_cipher_registryÚ_register_default_ciphers©Úselfr5   r5   r6   Ú__init__}   s   



ýzBackend.__init__Ústrc                 C  s   d  |  ¡ | jtj¡S )Nz3<OpenSSLBackend(version: {}, FIPS: {}, Legacy: {})>)ÚformatÚopenssl_version_textrK   rI   Ú_legacy_provider_loadedrN   r5   r5   r6   Ú__repr__‰   s
   ýzBackend.__repr__NÚokÚboolÚerrorsú&list[rust_openssl.OpenSSLError] | Nonec                 C  s   t j||d�S )N)rX   )r	   Ú_openssl_assert)rO   rV   rX   r5   r5   r6   Úopenssl_assert�   s   zBackend.openssl_assertc                 C  s$   | j  ¡  t ¡ sJ ‚t ¡ | _d S rB   )rD   Ú_enable_fipsrI   rJ   rK   rN   r5   r5   r6   r\   —   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)rF   ÚstringrH   ÚOpenSSL_versionÚOPENSSL_VERSIONÚdecoderN   r5   r5   r6   rS   ž   s
   ÿþzBackend.openssl_version_textÚintc                 C  s
   | j  ¡ S rB   )rH   ÚOpenSSL_version_numrN   r5   r5   r6   Ú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é   r]   )ÚnameÚdigest_sizeÚencoderH   ÚEVP_get_digestbyname)rO   rf   ÚalgÚevp_mdr5   r5   r6   Ú_evp_md_from_algorithm¬   s   
ÿzBackend._evp_md_from_algorithmc                 C  s    |   |¡}|  || jjk¡ |S rB   )rq   r[   rF   ÚNULL©rO   rf   rp   r5   r5   r6   Ú_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)rK   Ú
isinstanceÚ_fips_hashesrq   rF   rr   rs   r5   r5   r6   Úhash_supported¼   s   
zBackend.hash_supportedc                 C  ó    | j rt|tjƒrdS |  |¡S ru   ©rK   rv   r
   ÚSHA1rx   ©rO   rf   r5   r5   r6   Úsignature_hash_supportedÃ   s   
z Backend.signature_hash_supportedc                 C  s   | j rdS | jjdkS )NFr?   )rK   rH   ÚCryptography_HAS_SCRYPTrN   r5   r5   r6   Úscrypt_supportedÌ   s   zBackend.scrypt_supportedc                 C  ry   )NTrz   r|   r5   r5   r6   Ú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 ru   )rK   rv   Ú_fips_ciphersrL   ÚtypeÚKeyErrorrF   rr   )rO   r�   r‚   ÚadapterÚ
evp_cipherr5   r5   r6   Ú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: ú Ú.)rL   Ú
ValueError)rO   Ú
cipher_clsÚmode_clsr†   r5   r5   r6   Ú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-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„   rH   ÚCRYPTOGRAPHY_IS_LIBRESSLr'   Ú_get_xts_cipherr   rI   rT   Ú#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERr   r   Ú	itertoolsÚproductr   r   r   r1   )rO   rŒ   r�   r5   r5   r6   rM   î   s†   ÿýÿý
ÿ
ÿÿý
ÿÿþýý
þýÿÿãz!Backend._register_default_ciphersr   c                 C  ó   t | ||t jƒS rB   )r   Ú_ENCRYPT©rO   r�   r‚   r5   r5   r6   Úcreate_symmetric_encryption_ctx8  ó   z'Backend.create_symmetric_encryption_ctxc                 C  r™   rB   )r   Ú_DECRYPTr›   r5   r5   r6   Úcreate_symmetric_decryption_ctx=  r�   z'Backend.create_symmetric_decryption_ctxc                 C  s
   |   |¡S rB   )r€   r|   r5   r5   r6   Úpbkdf2_hmac_supportedB  re   zBackend.pbkdf2_hmac_supportedúlist[rust_openssl.OpenSSLError]c                 C  s   t  ¡ S rB   )rI   Úcapture_error_stackrN   r5   r5   r6   Ú_consume_errorsE  s   zBackend._consume_errorsÚpublic_exponentÚkey_sizec                 C  s   |dko|d@ dko|dkS )Né   r?   r   i   r5   )rO   r¤   r¥   r5   r5   r6   Ú!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.
        )
rF   Úfrom_bufferrH   ÚBIO_new_mem_bufÚlenr[   rr   r.   ÚgcÚBIO_free)rO   r¨   Údata_ptrr/   r5   r5   r6   Ú_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.
        )rH   Ú	BIO_s_memr[   rF   rr   ÚBIO_newr­   r®   )rO   Ú
bio_methodr/   r5   r5   r6   Ú_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)rF   ÚnewrH   ÚBIO_get_mem_datar[   rr   Úbuffer)rO   r/   ÚbufÚbuf_lenÚbio_datar5   r5   r6   Ú_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 ru   )rK   rv   r
   r{   ÚSHA224ÚSHA256ÚSHA384ÚSHA512r|   r5   r5   r6   Ú_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)rv   r   r   Ú_mgfr   rK   Ú
_algorithmr
   r{   rx   r   rÀ   ©rO   rÁ   r5   r5   r6   Úrsa_padding_supportedƒ  s   

ÿÿ
þzBackend.rsa_padding_supportedc                 C  s   | j r
t|tƒr
dS |  |¡S ru   )rK   rv   r   rÅ   rÄ   r5   r5   r6   Úrsa_encryption_supported–  s   
z Backend.rsa_encryption_supportedc                 C  s   | j j o| j S rB   )rH   ÚCRYPTOGRAPHY_IS_BORINGSSLrK   rN   r5   r5   r6   Údsa_supportedœ  s   ÿzBackend.dsa_supportedc                 C  s   |   ¡ sdS |  |¡S ru   )rÈ   r}   r|   r5   r5   r6   Údsa_hash_supported¡  s   
zBackend.dsa_hash_supportedc                 C  s   |   |td|j ƒ¡S )Nó    )rˆ   r    Ú
block_sizer|   r5   r5   r6   Ú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 rB   )Úpublic_bytesr   ÚEncodingÚDERr°   rH   Úd2i_X509_bior/   rF   rr   r[   r­   Ú	X509_free)rO   rÍ   r¨   Úmem_bior   r5   r5   r6   Ú
_cert2ossl«  s   
zBackend._cert2osslÚx509_ptrc                 C  s4   |   ¡ }| j ||¡}|  |dk¡ t |  |¡¡S ©Nr?   )r´   rH   Úi2d_X509_bior[   r   Úload_der_x509_certificater»   )rO   r×   r/   Úresr5   r5   r6   Ú
_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 rB   )Úprivate_bytesr   rÑ   rÒ   ÚPrivateFormatÚPKCS8ÚNoEncryptionr°   rH   Úd2i_PrivateKey_bior/   rF   rr   r[   r­   ÚEVP_PKEY_free)rO   rÝ   r¨   rÕ   Úevp_pkeyr5   r5   r6   Ú	_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 rB   )Ú_lib_reason_matchrH   ÚERR_LIB_EVPÚ'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM)Ú.0ÚerrorrN   r5   r6   Ú	<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ç   rH   rè   ÚEVP_R_BAD_DECRYPTÚERR_LIB_PKCS12Ú!PKCS12_R_PKCS12_CIPHERFINAL_ERRORÚCryptography_HAS_PROVIDERSÚERR_LIB_PROVÚPROV_R_BAD_DECRYPTÚany)rO   rX   r5   rN   r6   Ú_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 ru   )rK   rv   Ú_fips_ecdh_curvesrI   r   Úcurve_supported)rO   rõ   r5   r5   r6   Ú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 ru   )rv   r   ÚECDSArù   rf   Ú
asym_utilsÚ	Prehashedrx   )rO   rú   rõ   r5   r5   r6   Ú,elliptic_curve_signature_algorithm_supportedþ  s   

þz4Backend.elliptic_curve_signature_algorithm_supportedúec.ECDHc                 C  s   |   |¡o
t|tjƒS rB   )rù   rv   r   ÚECDH)rO   rf   rõ   r5   r5   r6   Ú+elliptic_curve_exchange_algorithm_supported  s   ÿz3Backend.elliptic_curve_exchange_algorithm_supportedc                 C  ó
   | j j S rB   ©rH   rÇ   rN   r5   r5   r6   Údh_supported  re   zBackend.dh_supportedc                 C  s   | j jdkS rØ   )rH   ÚCryptography_HAS_EVP_PKEY_DHXrN   r5   r5   r6   Údh_x942_serialization_supported  ó   z'Backend.dh_x942_serialization_supportedc                 C  ó   | j rdS dS ©NFT©rK   rN   r5   r5   r6   Úx25519_supported  ó   zBackend.x25519_supportedc                 C  ó   | j rdS | jj o| jj S ru   ©rK   rH   r”   rÇ   rN   r5   r5   r6   Úx448_supported  ó
   
þzBackend.x448_supportedc                 C  r	  r
  r  rN   r5   r5   r6   Úed25519_supported&  r  zBackend.ed25519_supportedc                 C  r  ru   r  rN   r5   r5   r6   Úed448_supported+  r  zBackend.ed448_supportedc                 C  s   t  | |¡S rB   )r   Ú_aead_cipher_supported)rO   r�   r5   r5   r6   Úaead_cipher_supported3  r  zBackend.aead_cipher_supportedÚlengthc                 C  s   t |ƒD ]}d||< qd S )Nr   )Úrange)rO   r¨   r  Úir5   r5   r6   Ú
_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[]r?   z	uint8_t *)rF   rr   r¬   rµ   Úmemmover  Úcast)rO   r¨   Údata_lenr¸   r5   r5   r6   Ú_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 r5   )Úcertificate)rê   rÍ   r5   r5   r6   Ú
<listcomp>_  s    zABackend.load_key_and_certificates_from_pkcs12.<locals>.<listcomp>)Úload_pkcs12rÝ   rÍ   r!  Úadditional_certs)rO   r¨   r  Úpkcs12r5   r5   r6   Ú%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 dataÚ	uintptr_tF)Úunsafe_skip_rsa_key_validation)$r   Ú_check_bytesliker°   rH   Úd2i_PKCS12_bior/   rF   rr   r£   r‹   r­   ÚPKCS12_freerµ   r  ÚPKCS12_parserã   rI   ÚkeysÚprivate_key_from_ptrrb   r  rÔ   rÜ   ÚX509_alias_get0r^   r*   Úsk_X509_freeÚsk_X509_numr–   rÇ   r  ÚreversedÚsk_X509_valuer[   Úappendr+   )rO   r¨   r  r/   Úp12Úevp_pkey_ptrr×   Úsk_x509_ptrÚpassword_bufrÛ   rÍ   rÝ   Úadditional_certificatesrä   r   Úcert_objrk   Ú
maybe_nameÚsk_x509ÚnumÚindicesr  Ú	addl_certÚ	addl_namer5   r5   r6   r#  b  st   

ÿÿþ

ÿþ

ÿzBackend.load_pkcs12rk   ú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 )
Nrk   éÿÿÿÿr   i N  r?   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_bytesrv   r   rá   rF   rr   ÚBestAvailableEncryptionrH   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_MACrt   r[   Ú_kdf_roundsr‹   r¬   Úsk_X509_new_nullr­   r0  r*   Úfriendly_namerÖ   r!  ÚX509_alias_set1r4  Úsk_X509_pushÚbackendr  rå   ÚPKCS12_creater£   ÚPKCS12_set_macr+  r´   Úi2d_PKCS12_bior»   )rO   rk   rÝ   rÍ   rC  rE  r  Únid_certÚnid_keyÚpkcs12_iterÚmac_iterÚmac_algÚ
keycertalgr<  Úossl_casÚcaÚca_aliasÚossl_carÛ   r8  Úname_bufÚ	ossl_certÚ	ossl_pkeyr5  rX   r/   r5   r5   r6   Ú(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 )NFTr?   )rK   rH   rÇ   r”   ÚCryptography_HAS_POLY1305rN   r5   r5   r6   Úpoly1305_supportedU  s   ÿþzBackend.poly1305_supportedc                 C  r  rB   r  rN   r5   r5   r6   Úpkcs7_supported`  re   zBackend.pkcs7_supported)r@   rA   )r@   rQ   rB   )rV   rW   rX   rY   r@   rA   )r@   rb   )rf   rg   )rf   rg   r@   rW   )r@   rW   )r�   r   r‚   r(   r@   rW   )r�   r   r‚   r(   r@   r   )r@   r¡   )r¤   rb   r¥   rb   r@   rW   )r¨   r©   r@   r.   )r@   r©   )rÁ   r   r@   rW   )rÍ   rÎ   r@   rÏ   )r×   rÏ   r@   rÎ   )rÝ   r,   r@   rÏ   )rX   r¡   r@   ræ   )rõ   rö   r@   rW   )rú   rû   rõ   rö   r@   rW   )rf   r   rõ   rö   r@   rW   )r  rb   r@   rA   )r¨   r©   r  r  r@   r   )r¨   r©   r  r  r@   r+   )rk   r  rÝ   rA  rÍ   rB  rC  rD  rE  rF  r@   r©   )Vr2   r3   r4   Ú__doc__rk   r>   Ú__annotations__r   rƒ   r
   r¼   r½   r¾   r¿   Ú
SHA512_224Ú
SHA512_256ÚSHA3_224ÚSHA3_256ÚSHA3_384ÚSHA3_512ÚSHAKE128ÚSHAKE256rw   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_modulusrP   rU   r[   r\   rS   rd   rq   rt   rx   r}   r   r€   rˆ   rŽ   rM   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#  rj  rl  rm  r5   r5   r5   r6   r7   K   s¢   
 
ôü


ý







	




J




	











.













L 
(r7   c                   @  s    e Zd Zddd„Zddd„ZdS )r“   ÚfmtrQ   c                 C  s
   || _ d S rB   )Ú_fmt)rO   rƒ  r5   r5   r6   rP   e  re   zGetCipherByName.__init__rY  r7   r�   r   r‚   r(   c                 C  sd   | j j||d� ¡ }|j | d¡¡}||jjkr,|jjr,|j 	|jj| d¡|jj¡}| 
¡  |S )N)r�   r‚   r]   )r„  rR   ÚlowerrH   ÚEVP_get_cipherbynamerm   rF   rr   ÚCryptography_HAS_300_EVP_CIPHERÚEVP_CIPHER_fetchr£   )rO   rY  r�   r‚   Úcipher_namer‡   r5   r5   r6   Ú__call__h  s   ÿÿýzGetCipherByName.__call__N)rƒ  rQ   )rY  r7   r�   r   r‚   r(   )r2   r3   r4   rP   rŠ  r5   r5   r5   r6   r“   d  s    
r“   rY  r�   r   c                 C  s$   d|j d › d�}| j | d¡¡S )Nzaes-é   z-xtsr]   )r¥   rH   r†  rm   )rY  r�   r‚   r‰  r5   r5   r6   r•   }  s   r•   )rY  r7   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   rI   Ú$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.   r1   r7   r“   r•   rY  r5   r5   r5   r6   Ú<module>   sB   8,      

