§
    pïgîŒ ã                   ó  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ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mZmZ d d
lmZmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5mZ6 d dl7m8Z8 d dl9m:Z:m;Z; d dl<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF d dlGmHZHmIZImJZJmKZK d dlLmMZMmNZNmOZO d dlPmQZQmRZR d dlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ d dl`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZi d dljmkZk d dllmmZmmnZn d dlompZpmqZqmrZrmsZsmtZt  e ju        d d!d"g¦  «        Zv G d#„ d$¦  «        Zw G d%„ d&¦  «        Zx G d'„ d(¦  «        Zyd)exd*eTfd+„Zz ex¦   «         Z{dS ),é    N)Úcontextmanager)ÚutilsÚx509)ÚUnsupportedAlgorithmÚ_Reasons)Úaead)Ú_CipherContext©Ú_CMACContext)Ú_DHParametersÚ_DHPrivateKeyÚ_DHPublicKeyÚ_dh_params_dup)Ú_DSAParametersÚ_DSAPrivateKeyÚ_DSAPublicKey)Ú_EllipticCurvePrivateKeyÚ_EllipticCurvePublicKey)Ú_Ed25519PrivateKeyÚ_Ed25519PublicKey)Ú_ED448_KEY_SIZEÚ_Ed448PrivateKeyÚ_Ed448PublicKey©Ú_HashContext©Ú_HMACContext)Ú_POLY1305_KEY_SIZEÚ_Poly1305Context)Ú_RSAPrivateKeyÚ_RSAPublicKey)Ú_X25519PrivateKeyÚ_X25519PublicKey)Ú_X448PrivateKeyÚ_X448PublicKey)r   )Úbinding)ÚhashesÚserialization)ÚAsymmetricPadding)ÚdhÚdsaÚecÚed25519Úed448ÚrsaÚx25519Úx448)ÚMGF1ÚOAEPÚPKCS1v15ÚPSS)Ú#CERTIFICATE_ISSUER_PUBLIC_KEY_TYPESÚPRIVATE_KEY_TYPESÚPUBLIC_KEY_TYPES)ÚBlockCipherAlgorithmÚCipherAlgorithm)ÚAESÚAES128ÚAES256ÚARC4ÚCamelliaÚChaCha20ÚSM4Ú	TripleDESÚ_BlowfishInternalÚ_CAST5InternalÚ_IDEAInternalÚ_SEEDInternal)	ÚCBCÚCFBÚCFB8ÚCTRÚECBÚGCMÚModeÚOFBÚXTS)Úscrypt)Úpkcs7Ússh)ÚPBESÚPKCS12CertificateÚPKCS12KeyAndCertificatesÚ_ALLOWED_PKCS12_TYPESÚ_PKCS12_CAS_TYPESÚ
_MemoryBIOÚbioÚchar_ptrc                   ó   — e Zd ZdS )Ú_RC2N)Ú__name__Ú
__module__Ú__qualname__© ó    úN/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/backend.pyr\   r\   ƒ   s   € € € € € Ø€Dra   r\   c                   ó  — e Zd ZdZdZh d£ZefZej	        ej
        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        fZej        ej        ej        ej        fZdZdZddz  ZdZdez  Z d„ Z!de"fd	„Z#	 d¾de$de%j&        e%j'        e(j)                          dd
fd„Z*de$fd„Z+d¿d„Z,d¿d„Z-e.j/        d„ ¦   «         Z0d¿d„Z1de"fd„Z2de"fd„Z3de4fd„Z5de6dej7        de8fd„Z9dej7        fd„Z:dej7        fd„Z;dej7        de$fd„Z<dej7        de$fd„Z=de$fd„Z>dej7        de$fd„Z?dej7        dej@        fd„ZAd eBd!eCde$fd"„ZDd#„ ZEd¿d$„ZFd eBd!eCdeGfd%„ZHd eBd!eCdeGfd&„ZIdej7        de$fd'„ZJdej7        d(e4d)e6d*e4d+e6de6fd,„ZKde%j'        e(j)                 fd-„ZLde%j'        e(jM                 fd.„ZNde4fd/„ZOd¾d0e4fd1„ZPd2e4d3e4deQjR        fd4„ZSd2e4d3e4de$fd5„ZTd6eQjU        deQjR        fd7„ZVd6eQjW        deQjX        fd8„ZYd9„ ZZd:„ Z[d;e6fd<„Z\d=„ Z]de6fd>„Z^de_fd?„Z`deafd@„Zbdej7        de$fdA„ZcdBedde$fdC„Zed3e4defjg        fdD„ZhdEefjg        defji        fdF„Zjd3e4defji        fdG„ZkdH„ Zld6efjm        defji        fdI„Znd6efjo        defjp        fdJ„Zqd6efjr        defjg        fdK„ZsdL„ Ztde$fdM„Zudej7        de$fdN„Zvde$fdO„ZwdexdeyfdP„Zzd;e6dQe%j&        e6         de_fdR„Z{d;e6deafdS„Z|d;e6de}j~        fdT„Zd;e6dQe%j&        e6         de_fdU„Z€dV„ Z�d;e6deafdW„Z‚d;e6de}j~        fdX„ZƒdYe„j…        de%j†        fdZ„Z‡d[e%j†        de„j…        fd\„Zˆd]e„j‰        de%j†        fd^„ZŠd_e%j†        de„j‰        fd`„Z‹dae„jŒ        de%j†        fdb„Z�dce%j†        de„jŒ        fdd„ZŽdae„jŒ        dee�de$fdf„Z�d]e„j‰        de$fdg„Z‘dh„ Z’di„ Z“de%j”        fdj„Z•dkej–        de$fdl„Z—dmej˜        dkej–        de$fdn„Z™dkej–        dejš        fdo„Z›d6ejœ        dejš        fdp„Z�d6ejž        dejŸ        fdq„Z dkej–        dre6dejŸ        fds„Z¡dte4dkej–        dejš        fdu„Z¢dkej–        fdv„Z£dwe4fdx„Z¤dej¥        dkej–        de$fdy„Z¦dz„ Z§dkej–        de4fd{„Z¨e/d|„ ¦   «         Z©d}„ Zªd~e4de4fd€„Z«d�e¬j­        d‚e¬j®        dƒe¬j¯        de6fd„„Z°d…„ Z±d†„ Z²d�e¬j­        d‚e¬j³        de6fd‡„Z´de$fdˆ„Zµd‰e4d3e4de}j~        fdŠ„Z¶d‹„ Z·dEe}j~        de}j¸        fdŒ„Z¹d‰e4d3e4de}j¸        fd�„Zºd6e}j»        de}j¸        fdŽ„Z¼d6e}j½        de}j¾        fd�„Z¿d6e}jÀ        de}j~        fd�„ZÁ	 d¾d‘e4d’e4d“e%j&        e4         de$fd”„ZÂde$fd•„ZÃd;e6deÄjÅ        fd–„ZÆd;e6deÄjÇ        fd—„ZÈd˜„ ZÉdeÄjÇ        fd™„ZÊde$fdš„ZËd;e6deÌjÍ        fd›„ZÎd;e6deÌjÏ        fdœ„ZÐdeÌjÏ        fd�„ZÑde$fdž„ZÒde$fdŸ„ZÓd;e6deÔjÕ        fd „ZÖd;e6deÔj×        fd¡„ZØdeÔj×        fd¢„ZÙde$fd£„ZÚd;e6deÛjÜ        fd¤„ZÝd;e6deÛjÞ        fd¥„ZßdeÛjÞ        fd¦„Zàd+e6d)e6d(e4d§e4d¨e4d‘e4de6fd©„Záde$fdª„Zâe.j/        d(e4de%jã        eä         fd«„¦   «         Zåd(e4dd
fd¬„Zæe.j/        d­„ ¦   «         Zçd;e6dQe%j&        e6         de%jè        e%j&        e_         e%j&        e„j…                 e%j'        e„j…                 f         fd®„Zéd;e6dQe%j&        e6         deêfd¯„Zëd°e%j&        e6         de%j&        eì         dYe%j&        e„j…                 d±e%j&        e%j'        eí                  dƒe¬j¯        de6fd²„Zîde$fd³„Zïde6deðfd´„Zñde$fdµ„Zòd;e6de%j'        e„j…                 fd¶„Zód;e6de%j'        e„j…                 fd·„Zôd¸„ Zõd¹e%j'        e„j…                 d�e¬j­        fdº„Zöd»e÷jø        d�e¬j­        d¼e%j'        e÷jù                 de6fd½„Zúd
S )ÀÚBackendz)
    OpenSSL API binding interfaces.
    Úopenssl>   ó   aes-128-ccmó   aes-128-gcmó   aes-192-ccmó   aes-192-gcmó   aes-256-ccmó   aes-256-gcmé   i  é   c                 óü  — t          j        ¦   «         | _        | j        j        | _        | j        j        | _        d| _        |                      ¦   «         | _	        i | _
        |                      ¦   «          | j	        r'| j        j        rt          j        dt          ¦  «         n|                      ¦   «          | j        j        g| _        | j        j        r&| j                             | j        j        ¦  «         d S d S )NFz<OpenSSL FIPS mode is enabled. Can't enable DRBG fork safety.)r&   ÚBindingÚ_bindingÚffiÚ_ffiÚlibÚ_libÚ_rsa_skip_check_keyÚ_is_fips_enabledÚ_fips_enabledÚ_cipher_registryÚ_register_default_ciphersÚ"CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINEÚwarningsÚwarnÚUserWarningÚactivate_osrandom_engineÚEVP_PKEY_DHÚ	_dh_typesÚCryptography_HAS_EVP_PKEY_DHXÚappendÚEVP_PKEY_DHX©Úselfs    rb   Ú__init__zBackend.__init__¹   sð   € ÝœÑ)Ô)ˆŒØ”MÔ%ˆŒ	Ø”MÔ%ˆŒ	Ø#(ˆÔ Ø!×2Ò2Ñ4Ô4ˆÔà "ˆÔØ×&Ò&Ñ(Ô(Ð(ØÔð 	, $¤)Ô"Nð 	,ÝŒMØNÝñô ð ð ð
 ×)Ò)Ñ+Ô+Ð+Øœ)Ô/Ð0ˆŒØŒ9Ô2ð 	:ØŒN×!Ò! $¤)Ô"8Ñ9Ô9Ð9Ð9Ð9ð	:ð 	:ra   Úreturnc                 ó\   — d                      |                      ¦   «         | j        ¦  «        S )Nz'<OpenSSLBackend(version: {}, FIPS: {})>)ÚformatÚopenssl_version_textrw   r„   s    rb   Ú__repr__zBackend.__repr__Í   s.   € Ø8×?Ò?Ø×%Ò%Ñ'Ô'¨Ô);ñ
ô 
ð 	
ra   NÚokÚerrorsc                 ó:   — t          j        | j        ||¬¦  «        S )N)r�   )r&   Ú_openssl_assertrt   )r…   rŒ   r�   s      rb   Úopenssl_assertzBackend.openssl_assertÒ   s   € õ
 Ô& t¤y°"¸VÐDÑDÔDÐDra   c                 óþ   — | j         j        r%| j                              | j        j        ¦  «        }n t          | j         dd„ ¦  «        ¦   «         }|dk    r| j                              ¦   «          t          |¦  «        S )NÚ	FIPS_modec                  ó   — dS ©Nr   r`   r`   ra   rb   ú<lambda>z*Backend._is_fips_enabled.<locals>.<lambda>ß   s   € ¸1€ ra   r   )rt   ÚCryptography_HAS_300_FIPSÚ&EVP_default_properties_is_fips_enabledrr   ÚNULLÚgetattrÚERR_clear_errorÚbool)r…   Úmodes     rb   rv   zBackend._is_fips_enabledÙ   sx   € ØŒ9Ô.ð 	@Ø”9×CÒCØ”	”ñô ˆDˆDð >•7˜4œ9 k°9°9Ñ=Ô=Ñ?Ô?ˆDà�1Š9ˆ9àŒI×%Ò%Ñ'Ô'Ð'Ý�D‰zŒzÐra   c                 ó–   — | j                              ¦   «          |                      ¦   «         sJ ‚|                      ¦   «         | _        d S ©N)rp   Ú_enable_fipsrv   rw   r„   s    rb   rŸ   zBackend._enable_fipsæ   sJ   € ð 	Œ×"Ò"Ñ$Ô$Ð$Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&Ø!×2Ò2Ñ4Ô4ˆÔÐÐra   c                 óŒ  — | j         j        rµ| j                              ¦   «         }|| j        j        k    rŽ| j                              |¦  «         | j                              | j        j        ¦  «        }|                      |dk    ¦  «         | j                              |¦  «        }|                      |dk    ¦  «         d S d S d S ©Nrm   )	rt   rz   ÚENGINE_get_default_RANDrr   r˜   ÚENGINE_unregister_RANDÚRAND_set_rand_methodr�   ÚENGINE_finish©r…   ÚeÚress      rb   Úactivate_builtin_randomzBackend.activate_builtin_randomí   s½   € ØŒ9Ô7ð 
	.à”	×1Ò1Ñ3Ô3ˆAØ�D”I”NÒ"Ð"Ø”	×0Ò0°Ñ3Ô3Ð3à”i×4Ò4°T´Y´^ÑDÔD�Ø×#Ò# C¨1¢HÑ-Ô-Ð-à”i×-Ò-¨aÑ0Ô0�Ø×#Ò# C¨1¢HÑ-Ô-Ð-Ð-Ð-ð
	.ð 
	.ð #Ð"ra   c              #   óª  K  — | j                              | j         j        ¦  «        }|                      || j        j        k    ¦  «         | j                              |¦  «        }|                      |dk    ¦  «         	 |V — | j                              |¦  «        }|                      |dk    ¦  «         | j                              |¦  «        }|                      |dk    ¦  «         d S # | j                              |¦  «        }|                      |dk    ¦  «         | j                              |¦  «        }|                      |dk    ¦  «         w xY wr¡   )	rt   ÚENGINE_by_idÚCryptography_osrandom_engine_idr�   rr   r˜   ÚENGINE_initÚENGINE_freer¥   r¦   s      rb   Ú_get_osurandom_enginezBackend._get_osurandom_engineú   s?  è è € ð ŒI×"Ò" 4¤9Ô#LÑMÔMˆØ×Ò˜A ¤¤Ò/Ñ0Ô0Ð0àŒi×#Ò# AÑ&Ô&ˆØ×Ò˜C 1šHÑ%Ô%Ð%ð	*ØˆGˆGˆGð ”)×'Ò'¨Ñ*Ô*ˆCØ×Ò  q¢Ñ)Ô)Ð)à”)×)Ò)¨!Ñ,Ô,ˆCØ×Ò  q¢Ñ)Ô)Ð)Ð)Ð)øð	 ”)×'Ò'¨Ñ*Ô*ˆCØ×Ò  q¢Ñ)Ô)Ð)à”)×)Ò)¨!Ñ,Ô,ˆCØ×Ò  q¢Ñ)Ô)Ð)Ð)øøøs   Á>C* Ã*A(Ec                 ó‚  — | j         j        r²|                      ¦   «          |                      ¦   «         5 }| j                              |¦  «        }|                      |dk    ¦  «         d d d ¦  «         n# 1 swxY w Y   | j                              | j        j        ¦  «        }|                      |dk    ¦  «         d S d S r¡   )	rt   rz   r©   r¯   ÚENGINE_set_default_RANDr�   r¤   rr   r˜   r¦   s      rb   r~   z Backend.activate_osrandom_engine  sõ   € ØŒ9Ô7ð 		*à×(Ò(Ñ*Ô*Ð*Ø×+Ò+Ñ-Ô-ð .°à”i×7Ò7¸Ñ:Ô:�Ø×#Ò# C¨1¢HÑ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð
 ”)×0Ò0°´´Ñ@Ô@ˆCØ×Ò  q¢Ñ)Ô)Ð)Ð)Ð)ð		*ð 		*s   µ4A5Á5A9Á<A9c           	      óˆ  — | j                              dd¦  «        }|                      ¦   «         5 }| j                             |dt          |¦  «        || j         j        d¦  «        }|                      |dk    ¦  «         d d d ¦  «         n# 1 swxY w Y   | j                              |¦  «         	                    d¦  «        S )Núchar[]é@   s   get_implementationr   Úascii)
rr   Únewr¯   rt   ÚENGINE_ctrl_cmdÚlenr˜   r�   ÚstringÚdecode)r…   Úbufr§   r¨   s       rb   Úosrandom_engine_implementationz&Backend.osrandom_engine_implementation  sê   € ØŒi�mŠm˜H bÑ)Ô)ˆØ×'Ò'Ñ)Ô)ð 	)¨QØ”)×+Ò+ØÐ(­#¨c©(¬(°C¸¼¼Èñô ˆCð ×Ò  a¢Ñ(Ô(Ð(ð		)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð
 Œy×Ò Ñ$Ô$×+Ò+¨GÑ4Ô4Ð4s   °ABÂBÂB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
        rµ   )rr   r¹   rt   ÚOpenSSL_versionÚOPENSSL_VERSIONrº   r„   s    rb   rŠ   zBackend.openssl_version_text#  sA   € ð Œy×ÒØŒI×%Ò% d¤iÔ&?Ñ@Ô@ñ
ô 
ç
Š&�‰/Œ/ð	ra   c                 ó4   — | j                              ¦   «         S rž   )rt   ÚOpenSSL_version_numr„   s    rb   Úopenssl_version_numberzBackend.openssl_version_number.  s   € ØŒy×,Ò,Ñ.Ô.Ð.ra   ÚkeyÚ	algorithmc                 ó$   — t          | ||¦  «        S rž   r   )r…   rÃ   rÄ   s      rb   Úcreate_hmac_ctxzBackend.create_hmac_ctx1  s   € õ ˜D # yÑ1Ô1Ð1ra   c                 ó  — |j         dk    s|j         dk    r7d                     |j         |j        dz  ¦  «                             d¦  «        }n|j                              d¦  «        }| j                             |¦  «        }|S )NÚblake2bÚblake2sz{}{}é   rµ   )Únamer‰   Údigest_sizeÚencodert   ÚEVP_get_digestbyname)r…   rÄ   ÚalgÚevp_mds       rb   Ú_evp_md_from_algorithmzBackend._evp_md_from_algorithm6  s~   € ØŒ>˜YÒ&Ð&¨)¬.¸IÒ*EÐ*EØ—-’-Ø” 	Ô 5¸Ñ 9ñô çŠf�W‰oŒoð ˆCð ”.×'Ò'¨Ñ0Ô0ˆCà”×/Ò/°Ñ4Ô4ˆØˆra   c                 óv   — |                       |¦  «        }|                      || j        j        k    ¦  «         |S rž   )rÑ   r�   rr   r˜   ©r…   rÄ   rÐ   s      rb   Ú_evp_md_non_null_from_algorithmz'Backend._evp_md_non_null_from_algorithmA  s7   € Ø×,Ò,¨YÑ7Ô7ˆØ×Ò˜F d¤i¤nÒ4Ñ5Ô5Ð5Øˆra   c                 óˆ   — | j         rt          || j        ¦  «        sdS |                      |¦  «        }|| j        j        k    S ©NF)rw   Ú
isinstanceÚ_fips_hashesrÑ   rr   r˜   rÓ   s      rb   Úhash_supportedzBackend.hash_supportedF  sH   € ØÔð 	¥j°¸DÔ<MÑ&NÔ&Nð 	Ø�5à×,Ò,¨YÑ7Ô7ˆØ˜œœÒ'Ð'ra   c                 ór   — | j         rt          |t          j        ¦  «        rdS |                      |¦  «        S rÖ   ©rw   r×   r'   ÚSHA1rÙ   ©r…   rÄ   s     rb   Úsignature_hash_supportedz Backend.signature_hash_supportedM  s;   € ð
 Ôð 	¥*¨Y½¼Ñ"DÔ"Dð 	Ø�5Ø×"Ò" 9Ñ-Ô-Ð-ra   c                 ó4   — | j         rdS | j        j        dk    S ©NFrm   )rw   rt   ÚCryptography_HAS_SCRYPTr„   s    rb   Úscrypt_supportedzBackend.scrypt_supportedV  s"   € ØÔð 	:Ø�5à”9Ô4¸Ò9Ð9ra   c                 ór   — | j         rt          |t          j        ¦  «        rdS |                      |¦  «        S )NTrÛ   rÝ   s     rb   Úhmac_supportedzBackend.hmac_supported\  s9   € àÔð 	¥*¨Y½¼Ñ"DÔ"Dð 	Ø�4à×"Ò" 9Ñ-Ô-Ð-ra   c                 ó"   — t          | |¦  «        S rž   r   rÝ   s     rb   Úcreate_hash_ctxzBackend.create_hash_ctxc  s   € õ ˜D )Ñ,Ô,Ð,ra   Úcipherrœ   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Ö   )rw   r×   Ú_fips_ciphersrx   ÚtypeÚKeyErrorrr   r˜   )r…   rç   rœ   ÚadapterÚ
evp_ciphers        rb   Úcipher_supportedzBackend.cipher_supportedh  s’   € ØÔð 	õ ˜f dÔ&8Ñ9Ô9ð Ø�uð	ØÔ+­D°©L¬L½$¸t¹*¼*Ð,DÔEˆGˆGøÝð 	ð 	ð 	Ø�5�5ð	øøøà�W˜T 6¨4Ñ0Ô0ˆ
ØŒyŒ~ Ò+Ð+s    )A
 Á

AÁAc                 óz   — ||f| j         v r#t          d                     ||¦  «        ¦  «        ‚|| j         ||f<   d S )Nz"Duplicate registration for: {} {}.)rx   Ú
ValueErrorr‰   )r…   Ú
cipher_clsÚmode_clsrì   s       rb   Úregister_cipher_adapterzBackend.register_cipher_adapterv  sY   € Ø˜Ð! TÔ%:Ð:Ð:ÝØ4×;Ò;Ø ñô ñô ð ð
 7>ˆÔ˜j¨(Ð2Ñ3Ð3Ð3ra   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          t          t
          fD ]+}|  
                    t          |t          d¦  «        ¦  «         Œ,t          t          t          t
          fD ]+}|  
                    t          |t          d¦  «        ¦  «         Œ,t!          j        t$          t&          gt          t          t          t
          g¦  «        D ])\  }}|  
                    ||t          d¦  «        ¦  «         Œ*|  
                    t(          t+          d ¦  «        t          d¦  «        ¦  «         |  
                    t,          t+          d ¦  «        t          d¦  «        ¦  «         |  
                    t.          t+          d ¦  «        t          d	¦  «        ¦  «         |  
                    t           t0          t2          ¦  «         t
          t          t          t          t          fD ]+}|  
                    t4          |t          d
¦  «        ¦  «         Œ,d S )Nz+{cipher.name}-{cipher.key_size}-{mode.name}zdes-ede3-{mode.name}zdes-ede3zbf-{mode.name}zseed-{mode.name}z{cipher.name}-{mode.name}Úrc4Úrc2Úchacha20zsm4-{mode.name})r;   r<   r=   rG   rJ   rK   rN   rH   rI   rL   ró   ÚGetCipherByNamer?   rB   rC   rF   Ú	itertoolsÚproductrD   rE   r>   rê   r\   r@   rO   Ú_get_xts_cipherrA   )r…   rñ   rò   s      rb   ry   z!Backend._register_default_ciphers  s  € Ý¥­Ð/ð 	ð 	ˆJÝ ¥#¥s­Cµµd½CÐ@ð ð �Ø×,Ò,ØØÝ#ØEñô ñô ð ð ðõ �c¥3­­SÐ1ð 	ð 	ˆHØ×(Ò(ÝØÝÐ MÑNÔNñô ð ð õ
 �c¥4­Ð-ð 	ð 	ˆHØ×(Ò(Ý˜8¥_Ð5KÑ%LÔ%Lñô ð ð ð 	×$Ò$Ý•s�O¨JÑ7Ô7ñ	
ô 	
ð 	
õ �c¥3­Ð,ð 	ð 	ˆHØ×(Ò(Ý! 8­_Ð=MÑ-NÔ-Nñô ð ð õ �c¥3­Ð,ð 	ð 	ˆHØ×(Ò(Ý˜x­Ð9KÑ)LÔ)Lñô ð ð õ %.Ô$5Ý�]Ð+Ý•#•s�CÐ ñ%
ô %
ð 	ð 	Ñ ˆJ˜ð ×(Ò(ØØÝÐ ;Ñ<Ô<ñô ð ð ð
 	×$Ò$¥T­4°©:¬:µÀuÑ7MÔ7MÑNÔNÐNà×$Ò$¥T­4°©:¬:µÀuÑ7MÔ7MÑNÔNÐNØ×$Ò$Ý•d˜4‘j”j¥/°*Ñ"=Ô"=ñ	
ô 	
ð 	
ð 	×$Ò$¥S­#­Ñ?Ô?Ð?Ý�c¥3­­SÐ1ð 	ð 	ˆHØ×(Ò(Ý�X�Ð/@ÑAÔAñô ð ð ð	ð 	ra   c                 ó:   — t          | ||t           j        ¦  «        S rž   )r	   Ú_ENCRYPT©r…   rç   rœ   s      rb   Úcreate_symmetric_encryption_ctxz'Backend.create_symmetric_encryption_ctx³  ó   € õ ˜d F¨Dµ.Ô2IÑJÔJÐJra   c                 ó:   — t          | ||t           j        ¦  «        S rž   )r	   Ú_DECRYPTrþ   s      rb   Úcreate_symmetric_decryption_ctxz'Backend.create_symmetric_decryption_ctx¸  r   ra   c                 ó,   — |                       |¦  «        S rž   )rä   rÝ   s     rb   Úpbkdf2_hmac_supportedzBackend.pbkdf2_hmac_supported½  s   € Ø×"Ò" 9Ñ-Ô-Ð-ra   ÚlengthÚsaltÚ
iterationsÚkey_materialc           
      ó‚  — | j                              d|¦  «        }|                      |¦  «        }| j                              |¦  «        }| j                             |t          |¦  «        |t          |¦  «        ||||¦  «        }	|                      |	dk    ¦  «         | j                              |¦  «        d d …         S )Núunsigned char[]rm   )	rr   r¶   rÔ   Úfrom_bufferrt   ÚPKCS5_PBKDF2_HMACr¸   r�   Úbuffer)
r…   rÄ   r  r  r  r	  r»   rÐ   Úkey_material_ptrr¨   s
             rb   Úderive_pbkdf2_hmaczBackend.derive_pbkdf2_hmacÀ  s¹   € ð Œi�mŠmÐ-¨vÑ6Ô6ˆØ×5Ò5°iÑ@Ô@ˆØœ9×0Ò0°Ñ>Ô>ÐØŒi×)Ò)ØÝ�ÑÔØÝ�‰IŒIØØØØñ	
ô 	
ˆð 	×Ò˜C 1šHÑ%Ô%Ð%ØŒy×Ò Ñ$Ô$ Q Q QÔ'Ð'ra   c                 ó4   — t          j        | j        ¦  «        S rž   )r&   Ú_consume_errorsrt   r„   s    rb   r  zBackend._consume_errorsØ  s   € ÝÔ& t¤yÑ1Ô1Ð1ra   c                 ó4   — t          j        | j        ¦  «        S rž   )r&   Ú_consume_errors_with_textrt   r„   s    rb   r  z!Backend._consume_errors_with_textÛ  s   € õ Ô0°´Ñ;Ô;Ð;ra   c                 óÎ  — || j         j        k    sJ ‚|                      | j                             |¦  «         ¦  «         | j                             |¦  «        }| j                              d|¦  «        }| j                             ||¦  «        }|                      |dk    ¦  «         t           	                    | j          
                    |¦  «        d |…         d¦  «        }|S )Nr  r   Úbig)rr   r˜   r�   rt   ÚBN_is_negativeÚBN_num_bytesr¶   Ú	BN_bn2binÚintÚ
from_bytesr  )r…   ÚbnÚbn_num_bytesÚbin_ptrÚbin_lenÚvals         rb   Ú
_bn_to_intzBackend._bn_to_intà  sÉ   € Ø�T”Y”^Ò#Ð#Ð#Ð#Ø×Ò ¤	× 8Ò 8¸Ñ <Ô <Ð<Ñ=Ô=Ð=à”y×-Ò-¨bÑ1Ô1ˆØ”)—-’-Ð 1°<Ñ@Ô@ˆØ”)×%Ò% b¨'Ñ2Ô2ˆà×Ò˜G qšLÑ)Ô)Ð)Ý�nŠn˜TœY×-Ò-¨gÑ6Ô6°x¸°xÔ@À%ÑHÔHˆØˆ
ra   Únumc                 óX  — |�|| j         j        k    sJ ‚|€| j         j        }|                     t          |                     ¦   «         dz  dz   ¦  «        d¦  «        }| j                             |t          |¦  «        |¦  «        }|                      || j         j        k    ¦  «         |S )a
  
        Converts a python integer to a BIGNUM. The returned BIGNUM will not
        be garbage collected (to support adding them to structs that take
        ownership of the object). Be sure to register it for GC if it will
        be discarded after use.
        Ng       @rm   r  )	rr   r˜   Úto_bytesr  Ú
bit_lengthrt   Ú	BN_bin2bnr¸   r�   )r…   r"  r  ÚbinaryÚbn_ptrs        rb   Ú
_int_to_bnzBackend._int_to_bnì  s›   € ð ˆz˜R 4¤9¤>Ò1Ð1Ð1Ð1àˆ:Ø””ˆBà—’�c #§.¢.Ñ"2Ô"2°SÑ"8¸1Ñ"<Ñ=Ô=¸uÑEÔEˆØ”×$Ò$ V­S°©[¬[¸"Ñ=Ô=ˆØ×Ò˜F d¤i¤nÒ4Ñ5Ô5Ð5Øˆra   Úpublic_exponentÚkey_sizec                 ó:  — t          j        ||¦  «         | j                             ¦   «         }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }|  	                    |¦  «        }| j                             || j        j
        ¦  «        }| j                             |||| j        j        ¦  «        }|                      |dk    ¦  «         |                      |¦  «        }t          | ||| j        ¦  «        S r¡   )r/   Ú_verify_rsa_parametersrt   ÚRSA_newr�   rr   r˜   ÚgcÚRSA_freer)  ÚBN_freeÚRSA_generate_key_exÚ_rsa_cdata_to_evp_pkeyr    ru   )r…   r*  r+  Ú	rsa_cdatar  r¨   Úevp_pkeys          rb   Úgenerate_rsa_private_keyz Backend.generate_rsa_private_keyý  sû   € õ 	Ô" ?°HÑ=Ô=Ð=à”I×%Ò%Ñ'Ô'ˆ	Ø×Ò˜I¨¬¬Ò7Ñ8Ô8Ð8Ø”I—L’L ¨D¬IÔ,>Ñ?Ô?ˆ	à�_Š_˜_Ñ-Ô-ˆØŒY�\Š\˜"˜dœiÔ/Ñ0Ô0ˆàŒi×+Ò+Ø�x  T¤Y¤^ñ
ô 
ˆð 	×Ò˜C 1šHÑ%Ô%Ð%Ø×.Ò.¨yÑ9Ô9ˆåØ�)˜X tÔ'?ñ
ô 
ð 	
ra   c                 ó,   — |dk    o|dz  dk    o|dk    S )Né   rm   r   i   r`   )r…   r*  r+  s      rb   Ú!generate_rsa_parameters_supportedz)Backend.generate_rsa_parameters_supported  s/   € ð ˜qÒ ð  Ø !Ñ# qÒ(ð à˜C’ð	
ra   Únumbersc           
      ó¬  — t          j        |j        |j        |j        |j        |j        |j        |j        j	        |j        j
        ¦  «         | j                             ¦   «         }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }|                      |j        ¦  «        }|                      |j        ¦  «        }|                      |j        ¦  «        }|                      |j        ¦  «        }|                      |j        ¦  «        }|                      |j        ¦  «        }|                      |j        j	        ¦  «        }	|                      |j        j
        ¦  «        }
| j                             |||¦  «        }|                      |dk    ¦  «         | j                             ||
|	|¦  «        }|                      |dk    ¦  «         | j                             ||||¦  «        }|                      |dk    ¦  «         |                      |¦  «        }t/          | ||| j        ¦  «        S r¡   )r/   Ú_check_private_key_componentsÚpÚqÚdÚdmp1Údmq1ÚiqmpÚpublic_numbersr§   Únrt   r.  r�   rr   r˜   r/  r0  r)  ÚRSA_set0_factorsÚRSA_set0_keyÚRSA_set0_crt_paramsr3  r    ru   )r…   r:  r4  r=  r>  r?  r@  rA  rB  r§   rD  r¨   r5  s                rb   Úload_rsa_private_numbersz Backend.load_rsa_private_numbers  sý  € õ 	Ô)ØŒIØŒIØŒIØŒLØŒLØŒLØÔ"Ô$ØÔ"Ô$ñ		
ô 		
ð 		
ð ”I×%Ò%Ñ'Ô'ˆ	Ø×Ò˜I¨¬¬Ò7Ñ8Ô8Ð8Ø”I—L’L ¨D¬IÔ,>Ñ?Ô?ˆ	Ø�OŠO˜GœIÑ&Ô&ˆØ�OŠO˜GœIÑ&Ô&ˆØ�OŠO˜GœIÑ&Ô&ˆØ�Š˜wœ|Ñ,Ô,ˆØ�Š˜wœ|Ñ,Ô,ˆØ�Š˜wœ|Ñ,Ô,ˆØ�OŠO˜GÔ2Ô4Ñ5Ô5ˆØ�OŠO˜GÔ2Ô4Ñ5Ô5ˆØŒi×(Ò(¨°A°qÑ9Ô9ˆØ×Ò˜C 1šHÑ%Ô%Ð%ØŒi×$Ò$ Y°°1°aÑ8Ô8ˆØ×Ò˜C 1šHÑ%Ô%Ð%ØŒi×+Ò+¨I°t¸TÀ4ÑHÔHˆØ×Ò˜C 1šHÑ%Ô%Ð%Ø×.Ò.¨yÑ9Ô9ˆåØ�)˜X tÔ'?ñ
ô 
ð 	
ra   c                 ó6  — t          j        |j        |j        ¦  «         | j                             ¦   «         }|                      || j        j        k    ¦  «         | j         	                    || j        j
        ¦  «        }|                      |j        ¦  «        }|                      |j        ¦  «        }| j                             |||| j        j        ¦  «        }|                      |dk    ¦  «         |                      |¦  «        }t          | ||¦  «        S r¡   )r/   Ú_check_public_key_componentsr§   rD  rt   r.  r�   rr   r˜   r/  r0  r)  rF  r3  r!   )r…   r:  r4  r§   rD  r¨   r5  s          rb   Úload_rsa_public_numberszBackend.load_rsa_public_numbers@  sç   € õ 	Ô(¨¬°G´IÑ>Ô>Ð>Ø”I×%Ò%Ñ'Ô'ˆ	Ø×Ò˜I¨¬¬Ò7Ñ8Ô8Ð8Ø”I—L’L ¨D¬IÔ,>Ñ?Ô?ˆ	Ø�OŠO˜GœIÑ&Ô&ˆØ�OŠO˜GœIÑ&Ô&ˆØŒi×$Ò$ Y°°1°d´i´nÑEÔEˆØ×Ò˜C 1šHÑ%Ô%Ð%Ø×.Ò.¨yÑ9Ô9ˆå˜T 9¨hÑ7Ô7Ð7ra   c                 óÈ   — | j                              ¦   «         }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }|S rž   )rt   ÚEVP_PKEY_newr�   rr   r˜   r/  ÚEVP_PKEY_free©r…   r5  s     rb   Ú_create_evp_pkey_gczBackend._create_evp_pkey_gcO  sQ   € Ø”9×)Ò)Ñ+Ô+ˆØ×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆØˆra   c                 ó–   — |                       ¦   «         }| j                             ||¦  «        }|                      |dk    ¦  «         |S r¡   )rP  rt   ÚEVP_PKEY_set1_RSAr�   )r…   r4  r5  r¨   s       rb   r3  zBackend._rsa_cdata_to_evp_pkeyU  óG   € Ø×+Ò+Ñ-Ô-ˆØŒi×)Ò)¨(°IÑ>Ô>ˆØ×Ò˜C 1šHÑ%Ô%Ð%Øˆra   Údatac                 ó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.
        )
rr   r  rt   ÚBIO_new_mem_bufr¸   r�   r˜   rX   r/  ÚBIO_free)r…   rT  Údata_ptrrY   s       rb   Ú_bytes_to_biozBackend._bytes_to_bio[  sx   € ð ”9×(Ò(¨Ñ.Ô.ˆØŒi×'Ò'¨µ#°d±)´)Ñ<Ô<ˆØ×Ò˜C 4¤9¤>Ò1Ñ2Ô2Ð2å˜$œ)Ÿ,š, s¨D¬IÔ,>Ñ?Ô?ÀÑJÔJÐJra   c                 óB  — | j                              ¦   «         }|                      || j        j        k    ¦  «         | j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }|S )z.
        Creates an empty memory BIO.
        )rt   Ú	BIO_s_memr�   rr   r˜   ÚBIO_newr/  rW  )r…   Ú
bio_methodrY   s      rb   Ú_create_mem_bio_gczBackend._create_mem_bio_gch  s…   € ð ”Y×(Ò(Ñ*Ô*ˆ
Ø×Ò˜J¨$¬)¬.Ò8Ñ9Ô9Ð9ØŒi×Ò 
Ñ+Ô+ˆØ×Ò˜C 4¤9¤>Ò1Ñ2Ô2Ð2ØŒi�lŠl˜3 ¤	Ô 2Ñ3Ô3ˆØˆ
ra   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)rr   r¶   rt   ÚBIO_get_mem_datar�   r˜   r  )r…   rY   r»   Úbuf_lenÚbio_datas        rb   Ú_read_mem_biozBackend._read_mem_bios  s�   € ð Œi�mŠm˜IÑ&Ô&ˆØ”)×,Ò,¨S°#Ñ6Ô6ˆØ×Ò˜G ašKÑ(Ô(Ð(Ø×Ò˜C œF d¤i¤nÒ4Ñ5Ô5Ð5Ø”9×#Ò# C¨¤F¨GÑ4Ô4°Q°Q°QÔ7ˆØˆra   c                 óÊ  — | j                              |¦  «        }|| j         j        k    ry| j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }t          | ||| j
        ¦  «        S || j         j        k    rø| j         j        sì| j         j        sà| j         j        sÔ| j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }|                      ¦   «         }| j                              ||¦  «        }|                      |dk    ¦  «         |                      |                      |¦  «        d¬¦  «        S || j         j        k    rs| j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }t-          | ||¦  «        S || j         j        k    rs| j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }t5          | ||¦  «        S || j        v rs| j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }t=          | ||¦  «        S |t?          | j         dd¦  «        k    rtA          | |¦  «        S |t?          | j         dd¦  «        k    rtC          | |¦  «        S |t?          | j         dd¦  «        k    rtE          | |¦  «        S |t?          | j         dd¦  «        k    rtG          | |¦  «        S tI          d¦  «        ‚)	zd
        Return the appropriate type of PrivateKey given an evp_pkey cdata
        pointer.
        rm   N)ÚpasswordÚEVP_PKEY_ED25519ÚEVP_PKEY_X448ÚEVP_PKEY_X25519ÚEVP_PKEY_ED448úUnsupported key type.)%rt   ÚEVP_PKEY_idÚEVP_PKEY_RSAÚEVP_PKEY_get1_RSAr�   rr   r˜   r/  r0  r    ru   ÚEVP_PKEY_RSA_PSSÚCRYPTOGRAPHY_IS_LIBRESSLÚCRYPTOGRAPHY_IS_BORINGSSLÚ#CRYPTOGRAPHY_OPENSSL_LESS_THAN_111Er^  Úi2d_RSAPrivateKey_bioÚload_der_private_keyrc  ÚEVP_PKEY_DSAÚEVP_PKEY_get1_DSAÚDSA_freer   ÚEVP_PKEY_ECÚEVP_PKEY_get1_EC_KEYÚEC_KEY_freer   r€   ÚEVP_PKEY_get1_DHÚDH_freer   r™   r   r$   r"   r   r   )	r…   r5  Úkey_typer4  rY   r¨   Ú	dsa_cdataÚec_cdataÚdh_cdatas	            rb   Ú_evp_pkey_to_private_keyz Backend._evp_pkey_to_private_key~  s‹  € ð ”9×(Ò(¨Ñ2Ô2ˆà�t”yÔ-Ò-Ð-Øœ	×3Ò3°HÑ=Ô=ˆIØ×Ò 	¨T¬Y¬^Ò ;Ñ<Ô<Ð<Øœ	Ÿš Y°´	Ô0BÑCÔCˆIÝ!Ø�i ¨4Ô+Cñô ð ð ˜œ	Ô2Ò2Ð2Ø”IÔ6ð 3à”IÔ7ð 3ð ”IÔAð 3ð œ	×3Ò3°HÑ=Ô=ˆIØ×Ò 	¨T¬Y¬^Ò ;Ñ<Ô<Ð<Øœ	Ÿš Y°´	Ô0BÑCÔCˆIØ×)Ò)Ñ+Ô+ˆCØ”)×1Ò1°#°yÑAÔAˆCØ×Ò  q¢Ñ)Ô)Ð)Ø×,Ò,Ø×"Ò" 3Ñ'Ô'°$ð -ñ ô ð ð ˜œÔ/Ò/Ð/Øœ	×3Ò3°HÑ=Ô=ˆIØ×Ò 	¨T¬Y¬^Ò ;Ñ<Ô<Ð<Øœ	Ÿš Y°´	Ô0BÑCÔCˆIÝ! $¨	°8Ñ<Ô<Ð<Ø˜œÔ.Ò.Ð.Ø”y×5Ò5°hÑ?Ô?ˆHØ×Ò ¨D¬I¬NÒ :Ñ;Ô;Ð;Ø”y—|’| H¨d¬iÔ.CÑDÔDˆHÝ+¨D°(¸HÑEÔEÐEØ˜œÐ'Ð'Ø”y×1Ò1°(Ñ;Ô;ˆHØ×Ò ¨D¬I¬NÒ :Ñ;Ô;Ð;Ø”y—|’| H¨d¬iÔ.?Ñ@Ô@ˆHÝ   x°Ñ:Ô:Ð:Ø� ¤Ð,>ÀÑEÔEÒEÐEå% d¨HÑ5Ô5Ð5Ø� ¤¨O¸TÑBÔBÒBÐBå" 4¨Ñ2Ô2Ð2Ø� ¤Ð,=¸tÑDÔDÒDÐDå$ T¨8Ñ4Ô4Ð4Ø� ¤Ð,<¸dÑCÔCÒCÐCå# D¨(Ñ3Ô3Ð3å&Ð'>Ñ?Ô?Ð?ra   c                 óÜ  — | j                              |¦  «        }|| j         j        k    rs| j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }t          | ||¦  «        S || j         j
        k    rö| j         j        sê| j         j        sÞ| j         j        sÒ| j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }|                      ¦   «         }| j                              ||¦  «        }|                      |dk    ¦  «         |                      |                      |¦  «        ¦  «        S || j         j        k    rs| j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }t+          | ||¦  «        S || j         j        k    r„| j                              |¦  «        }|| j        j        k    r$|                      ¦   «         }t3          d|¦  «        ‚| j                             || j         j        ¦  «        }t7          | ||¦  «        S || j        v rs| j                              |¦  «        }	|                      |	| j        j        k    ¦  «         | j                             |	| j         j        ¦  «        }	t?          | |	|¦  «        S |tA          | j         dd¦  «        k    rtC          | |¦  «        S |tA          | j         dd¦  «        k    rtE          | |¦  «        S |tA          | j         dd¦  «        k    rtG          | |¦  «        S |tA          | j         dd¦  «        k    rtI          | |¦  «        S tK          d¦  «        ‚)	zc
        Return the appropriate type of PublicKey given an evp_pkey cdata
        pointer.
        rm   zUnable to load EC keyrf  Nrg  rh  ri  rj  )&rt   rk  rl  rm  r�   rr   r˜   r/  r0  r!   rn  ro  rp  rq  r^  Úi2d_RSAPublicKey_bioÚload_der_public_keyrc  rt  ru  rv  r   rw  rx  r  rð   ry  r   r€   rz  r{  r   r™   r   r%   r#   r   r   )
r…   r5  r|  r4  rY   r¨   r}  r~  r�   r  s
             rb   Ú_evp_pkey_to_public_keyzBackend._evp_pkey_to_public_key¾  s�  € ð ”9×(Ò(¨Ñ2Ô2ˆà�t”yÔ-Ò-Ð-Øœ	×3Ò3°HÑ=Ô=ˆIØ×Ò 	¨T¬Y¬^Ò ;Ñ<Ô<Ð<Øœ	Ÿš Y°´	Ô0BÑCÔCˆIÝ   y°(Ñ;Ô;Ð;à˜œ	Ô2Ò2Ð2Ø”IÔ6ð 3à”IÔ7ð 3ð ”IÔAð 3ð
 œ	×3Ò3°HÑ=Ô=ˆIØ×Ò 	¨T¬Y¬^Ò ;Ñ<Ô<Ð<Øœ	Ÿš Y°´	Ô0BÑCÔCˆIØ×)Ò)Ñ+Ô+ˆCØ”)×0Ò0°°iÑ@Ô@ˆCØ×Ò  q¢Ñ)Ô)Ð)Ø×+Ò+¨D×,>Ò,>¸sÑ,CÔ,CÑDÔDÐDØ˜œÔ/Ò/Ð/Øœ	×3Ò3°HÑ=Ô=ˆIØ×Ò 	¨T¬Y¬^Ò ;Ñ<Ô<Ð<Øœ	Ÿš Y°´	Ô0BÑCÔCˆIÝ   y°(Ñ;Ô;Ð;Ø˜œÔ.Ò.Ð.Ø”y×5Ò5°hÑ?Ô?ˆHØ˜4œ9œ>Ò)Ð)Ø×7Ò7Ñ9Ô9�Ý Ð!8¸&ÑAÔAÐAØ”y—|’| H¨d¬iÔ.CÑDÔDˆHÝ*¨4°¸8ÑDÔDÐDØ˜œÐ'Ð'Ø”y×1Ò1°(Ñ;Ô;ˆHØ×Ò ¨D¬I¬NÒ :Ñ;Ô;Ð;Ø”y—|’| H¨d¬iÔ.?Ñ@Ô@ˆHÝ  h°Ñ9Ô9Ð9Ø� ¤Ð,>ÀÑEÔEÒEÐEå$ T¨8Ñ4Ô4Ð4Ø� ¤¨O¸TÑBÔBÒBÐBå! $¨Ñ1Ô1Ð1Ø� ¤Ð,=¸tÑDÔDÒDÐDå# D¨(Ñ3Ô3Ð3Ø� ¤Ð,<¸dÑCÔCÒCÐCå" 4¨Ñ2Ô2Ð2å&Ð'>Ñ?Ô?Ð?ra   c                 ó�   — t          |t          j        t          j        t          j        t          j        t          j        f¦  «        S rž   )r×   r'   rÜ   ÚSHA224ÚSHA256ÚSHA384ÚSHA512rÝ   s     rb   Ú_oaep_hash_supportedzBackend._oaep_hash_supportedø  s5   € ÝØå”Ý”Ý”Ý”Ý”ðñ	
ô 	
ð 		
ra   Úpaddingc                 óú  — 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×   r4   r5   Ú_mgfr2   rw   Ú
_algorithmr'   rÜ   rÙ   r3   rŠ  )r…   r‹  s     rb   Úrsa_padding_supportedzBackend.rsa_padding_supported  sñ   € Ý�g�xÑ(Ô(ð 	Ø�4Ý˜¥Ñ%Ô%ð 	­*°W´\Å4Ñ*HÔ*Hð 	ð Ô!ð D¥jØ”Ô'­¬ñ'ô 'ð Dð �tà×*Ò*¨7¬<Ô+BÑCÔCÐCÝ˜¥Ñ&Ô&ð 	­:°g´lÅDÑ+IÔ+Ið 	Ø×,Ò,Ø”Ô'ñô ð @à×+Ò+¨GÔ,>Ñ?Ô?ð@ð �5ra   c           	      óÌ  — |dvrt          d¦  «        ‚| j                             ¦   «         }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }| j                             ||| j        j        d| j        j        | j        j        | j        j        ¦  «        }|                      |dk    ¦  «         t          | |¦  «        S )N)i   rl   i   i   z0Key size must be 1024, 2048, 3072, or 4096 bits.r   rm   )
rð   rt   ÚDSA_newr�   rr   r˜   r/  rv  ÚDSA_generate_parameters_exr   )r…   r+  Úctxr¨   s       rb   Úgenerate_dsa_parameterszBackend.generate_dsa_parameters  sÕ   € ØÐ3Ð3Ð3ÝØBñô ð ð Œi×ÒÑ!Ô!ˆØ×Ò˜C 4¤9¤>Ò1Ñ2Ô2Ð2ØŒi�lŠl˜3 ¤	Ô 2Ñ3Ô3ˆàŒi×2Ò2ØØØŒIŒNØØŒIŒNØŒIŒNØŒIŒNñ
ô 
ˆð 	×Ò˜C 1šHÑ%Ô%Ð%å˜d CÑ(Ô(Ð(ra   Ú
parametersc                 óP  — | j                              |j        ¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }| j                              |¦  «         |  	                    |¦  «        }t          | ||¦  «        S rž   )rt   ÚDSAparams_dupÚ
_dsa_cdatar�   rr   r˜   r/  rv  ÚDSA_generate_keyÚ_dsa_cdata_to_evp_pkeyr   )r…   r•  r“  r5  s       rb   Úgenerate_dsa_private_keyz Backend.generate_dsa_private_key/  s•   € ð Œi×%Ò%ØÔ!ñ
ô 
ˆð 	×Ò˜C 4¤9¤>Ò1Ñ2Ô2Ð2ØŒi�lŠl˜3 ¤	Ô 2Ñ3Ô3ˆØŒ	×"Ò" 3Ñ'Ô'Ð'Ø×.Ò.¨sÑ3Ô3ˆå˜d C¨Ñ2Ô2Ð2ra   c                 óV   — |                       |¦  «        }|                      |¦  «        S rž   )r”  r›  )r…   r+  r•  s      rb   Ú'generate_dsa_private_key_and_parametersz/Backend.generate_dsa_private_key_and_parameters<  s+   € ð ×1Ò1°(Ñ;Ô;ˆ
Ø×,Ò,¨ZÑ8Ô8Ð8ra   c                 óÜ   — | j                              ||||¦  «        }|                      |dk    ¦  «         | j                              |||¦  «        }|                      |dk    ¦  «         d S r¡   )rt   ÚDSA_set0_pqgr�   ÚDSA_set0_key)r…   r}  r=  r>  ÚgÚpub_keyÚpriv_keyr¨   s           rb   Ú_dsa_cdata_set_valueszBackend._dsa_cdata_set_valuesB  sl   € ØŒi×$Ò$ Y°°1°aÑ8Ô8ˆØ×Ò˜C 1šHÑ%Ô%Ð%ØŒi×$Ò$ Y°¸ÑBÔBˆØ×Ò˜C 1šHÑ%Ô%Ð%Ð%Ð%ra   c                 ó’  — t          j        |¦  «         |j        j        }| j                             ¦   «         }|                      || j        j        k    ¦  «         | j         	                    || j        j
        ¦  «        }|                      |j        ¦  «        }|                      |j        ¦  «        }|                      |j        ¦  «        }|                      |j        j        ¦  «        }|                      |j        ¦  «        }|                      ||||||¦  «         |                      |¦  «        }	t'          | ||	¦  «        S rž   )r+   Ú_check_dsa_private_numbersrC  Úparameter_numbersrt   r‘  r�   rr   r˜   r/  rv  r)  r=  r>  r¡  ÚyÚxr¤  rš  r   )
r…   r:  r§  r}  r=  r>  r¡  r¢  r£  r5  s
             rb   Úload_dsa_private_numbersz Backend.load_dsa_private_numbersH  s  € õ 	Ô& wÑ/Ô/Ð/Ø#Ô2ÔDÐà”I×%Ò%Ñ'Ô'ˆ	Ø×Ò˜I¨¬¬Ò7Ñ8Ô8Ð8Ø”I—L’L ¨D¬IÔ,>Ñ?Ô?ˆ	à�OŠOÐ-Ô/Ñ0Ô0ˆØ�OŠOÐ-Ô/Ñ0Ô0ˆØ�OŠOÐ-Ô/Ñ0Ô0ˆØ—/’/ 'Ô"8Ô":Ñ;Ô;ˆØ—?’? 7¤9Ñ-Ô-ˆØ×"Ò" 9¨a°°A°wÀÑIÔIÐIà×.Ò.¨yÑ9Ô9ˆå˜d I¨xÑ8Ô8Ð8ra   c                 ó|  — t          j        |j        ¦  «         | j                             ¦   «         }|                      || j        j        k    ¦  «         | j                             || j        j	        ¦  «        }|  
                    |j        j        ¦  «        }|  
                    |j        j        ¦  «        }|  
                    |j        j        ¦  «        }|  
                    |j        ¦  «        }| j        j        }|                      ||||||¦  «         |                      |¦  «        }t#          | ||¦  «        S rž   )r+   Ú_check_dsa_parametersr§  rt   r‘  r�   rr   r˜   r/  rv  r)  r=  r>  r¡  r¨  r¤  rš  r   )	r…   r:  r}  r=  r>  r¡  r¢  r£  r5  s	            rb   Úload_dsa_public_numberszBackend.load_dsa_public_numbers]  s  € õ 	Ô! 'Ô";Ñ<Ô<Ð<Ø”I×%Ò%Ñ'Ô'ˆ	Ø×Ò˜I¨¬¬Ò7Ñ8Ô8Ð8Ø”I—L’L ¨D¬IÔ,>Ñ?Ô?ˆ	à�OŠO˜GÔ5Ô7Ñ8Ô8ˆØ�OŠO˜GÔ5Ô7Ñ8Ô8ˆØ�OŠO˜GÔ5Ô7Ñ8Ô8ˆØ—/’/ '¤)Ñ,Ô,ˆØ”9”>ˆØ×"Ò" 9¨a°°A°wÀÑIÔIÐIà×.Ò.¨yÑ9Ô9ˆå˜T 9¨hÑ7Ô7Ð7ra   c                 ó  — t          j        |¦  «         | j                             ¦   «         }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }|  	                    |j
        ¦  «        }|  	                    |j        ¦  «        }|  	                    |j        ¦  «        }| j                             ||||¦  «        }|                      |dk    ¦  «         t          | |¦  «        S r¡   )r+   r¬  rt   r‘  r�   rr   r˜   r/  rv  r)  r=  r>  r¡  rŸ  r   )r…   r:  r}  r=  r>  r¡  r¨   s          rb   Úload_dsa_parameter_numbersz"Backend.load_dsa_parameter_numbersp  sÛ   € õ 	Ô! 'Ñ*Ô*Ð*Ø”I×%Ò%Ñ'Ô'ˆ	Ø×Ò˜I¨¬¬Ò7Ñ8Ô8Ð8Ø”I—L’L ¨D¬IÔ,>Ñ?Ô?ˆ	à�OŠO˜GœIÑ&Ô&ˆØ�OŠO˜GœIÑ&Ô&ˆØ�OŠO˜GœIÑ&Ô&ˆØŒi×$Ò$ Y°°1°aÑ8Ô8ˆØ×Ò˜C 1šHÑ%Ô%Ð%å˜d IÑ.Ô.Ð.ra   c                 ó–   — |                       ¦   «         }| j                             ||¦  «        }|                      |dk    ¦  «         |S r¡   )rP  rt   ÚEVP_PKEY_set1_DSAr�   )r…   r}  r5  r¨   s       rb   rš  zBackend._dsa_cdata_to_evp_pkey€  rS  ra   c                 ó   — | j          S rž   )rw   r„   s    rb   Údsa_supportedzBackend.dsa_supported†  s   € ØÔ%Ð%Ð%ra   c                 óX   — |                       ¦   «         sdS |                      |¦  «        S rÖ   )r³  rÞ   rÝ   s     rb   Údsa_hash_supportedzBackend.dsa_hash_supported‰  s/   € Ø×!Ò!Ñ#Ô#ð 	Ø�5Ø×,Ò,¨YÑ7Ô7Ð7ra   c                 óX   — |                       |t          d|j        z  ¦  «        ¦  «        S )Nó    )rî   rG   Ú
block_sizerÝ   s     rb   Úcmac_algorithm_supportedz Backend.cmac_algorithm_supportedŽ  s/   € Ø×$Ò$Ø•s˜7 YÔ%9Ñ9Ñ:Ô:ñ
ô 
ð 	
ra   c                 ó"   — t          | |¦  «        S rž   r
   rÝ   s     rb   Úcreate_cmac_ctxzBackend.create_cmac_ctx“  s   € Ý˜D )Ñ,Ô,Ð,ra   re  c                 óP   — |                       | j        j        | j        ||¦  «        S rž   )Ú	_load_keyrt   ÚPEM_read_bio_PrivateKeyr€  )r…   rT  re  s      rb   Úload_pem_private_keyzBackend.load_pem_private_key–  s.   € ð �~Š~ØŒIÔ-ØÔ)ØØñ	
ô 
ð 	
ra   c                 óª  — |                       |¦  «        }| j                             d¦  «        }| j                             |j        | j        j        | j                             | j        j        d¦  «        |¦  «        }|| j        j        k    r:| j         	                    || j        j
        ¦  «        }|                      |¦  «        S |                      ¦   «          | j                             |j        ¦  «        }|                      |dk    ¦  «         | j                             |j        | j        j        | j                             | j        j        d¦  «        |¦  «        }|| j        j        k    rK| j         	                    || j        j        ¦  «        }|                      |¦  «        }t%          | ||¦  «        S |                      ¦   «          d S )NúCRYPTOGRAPHY_PASSWORD_DATA *ÚCryptography_pem_password_cbrm   )rY  rr   r¶   rt   ÚPEM_read_bio_PUBKEYrY   r˜   Ú	addressofÚ_original_libr/  rN  r„  r  Ú	BIO_resetr�   ÚPEM_read_bio_RSAPublicKeyr0  r3  r!   Ú_handle_key_loading_error)r…   rT  Úmem_bioÚuserdatar5  r¨   r4  s          rb   Úload_pem_public_keyzBackend.load_pem_public_key   s¥  € Ø×$Ò$ TÑ*Ô*ˆð ”9—=’=Ð!?Ñ@Ô@ˆØ”9×0Ò0ØŒKØŒIŒNØŒI×ÒØ”	Ô'Ð)Gñô ð ñ
ô 
ˆð �t”y”~Ò%Ð%Ø”y—|’| H¨d¬iÔ.EÑFÔFˆHØ×/Ò/°Ñ9Ô9Ð9ð
 × Ò Ñ"Ô"Ð"Ø”)×%Ò% g¤kÑ2Ô2ˆCØ×Ò  q¢Ñ)Ô)Ð)Øœ	×;Ò;Ø”Ø”	”Ø”	×#Ò#Ø”IÔ+Ð-Kñô ð ñô ˆIð ˜DœIœNÒ*Ð*Ø œIŸLšL¨°D´IÔ4FÑGÔG�	Ø×6Ò6°yÑAÔA�Ý$ T¨9°hÑ?Ô?Ð?à×.Ò.Ñ0Ô0Ð0Ð0Ð0ra   c                 ób  — |                       |¦  «        }| j                             |j        | j        j        | j        j        | j        j        ¦  «        }|| j        j        k    r5| j                             || j        j        ¦  «        }t          | |¦  «        S |  	                    ¦   «          d S rž   )
rY  rt   ÚPEM_read_bio_DHparamsrY   rr   r˜   r/  r{  r   rÈ  )r…   rT  rÉ  r  s       rb   Úload_pem_parameterszBackend.load_pem_parametersÊ  s–   € Ø×$Ò$ TÑ*Ô*ˆà”9×2Ò2ØŒK˜œœ¨¬¬¸¼¼ñ
ô 
ˆð �t”y”~Ò%Ð%Ø”y—|’| H¨d¬iÔ.?Ñ@Ô@ˆHÝ   xÑ0Ô0Ð0à×*Ò*Ñ,Ô,Ð,Ð,Ð,ra   c                 óÔ   — |                       |¦  «        }|                      ||¦  «        }|r|                      |¦  «        S |                      | j        j        | j        ||¦  «        S rž   )rY  Ú"_evp_pkey_from_der_traditional_keyr€  r½  rt   Úd2i_PKCS8PrivateKey_bio)r…   rT  re  rb  rÃ   s        rb   rs  zBackend.load_der_private_keyÖ  st   € ð ×%Ò% dÑ+Ô+ˆØ×5Ò5°hÀÑIÔIˆØð 
	Ø×0Ò0°Ñ5Ô5Ð5ð —>’>Ø”	Ô1ØÔ-ØØñ	ô ð ra   c                 ó:  — | j                              |j        | j        j        ¦  «        }|| j        j        k    rL|                      ¦   «          | j                             || j         j        ¦  «        }|�t          d¦  «        ‚|S |                      ¦   «          d S )Nú4Password was given but private key is not encrypted.)	rt   Úd2i_PrivateKey_biorY   rr   r˜   r  r/  rN  Ú	TypeError)r…   rb  re  rÃ   s       rb   rÐ  z*Backend._evp_pkey_from_der_traditional_keyë  s•   € ØŒi×*Ò*¨8¬<¸¼¼ÑHÔHˆØ�$”)”.Ò Ð ð × Ò Ñ"Ô"Ð"à”)—,’,˜s D¤IÔ$;Ñ<Ô<ˆCØÐ#ÝØJñô ð ð ˆJà× Ò Ñ"Ô"Ð"Ø�4ra   c                 óâ  — |                       |¦  «        }| j                             |j        | j        j        ¦  «        }|| j        j        k    r:| j                             || j        j        ¦  «        }|                      |¦  «        S |  	                    ¦   «          | j         
                    |j        ¦  «        }|                      |dk    ¦  «         | j                             |j        | j        j        ¦  «        }|| j        j        k    rK| j                             || j        j        ¦  «        }|                      |¦  «        }t          | ||¦  «        S |                      ¦   «          d S r¡   )rY  rt   Úd2i_PUBKEY_biorY   rr   r˜   r/  rN  r„  r  rÆ  r�   Úd2i_RSAPublicKey_bior0  r3  r!   rÈ  )r…   rT  rÉ  r5  r¨   r4  s         rb   rƒ  zBackend.load_der_public_keyþ  s<  € Ø×$Ò$ TÑ*Ô*ˆØ”9×+Ò+¨G¬K¸¼¼ÑHÔHˆØ�t”y”~Ò%Ð%Ø”y—|’| H¨d¬iÔ.EÑFÔFˆHØ×/Ò/°Ñ9Ô9Ð9ð
 × Ò Ñ"Ô"Ð"Ø”)×%Ò% g¤kÑ2Ô2ˆCØ×Ò  q¢Ñ)Ô)Ð)Øœ	×6Ò6Ø”˜TœYœ^ñô ˆIð ˜DœIœNÒ*Ð*Ø œIŸLšL¨°D´IÔ4FÑGÔG�	Ø×6Ò6°yÑAÔA�Ý$ T¨9°hÑ?Ô?Ð?à×.Ò.Ñ0Ô0Ð0Ð0Ð0ra   c                 óÄ  — |                       |¦  «        }| j                             |j        | j        j        ¦  «        }|| j        j        k    r5| j                             || j        j        ¦  «        }t          | |¦  «        S | j        j	        r»|  
                    ¦   «          | j                             |j        ¦  «        }|                      |dk    ¦  «         | j                             |j        | j        j        ¦  «        }|| j        j        k    r5| j                             || j        j        ¦  «        }t          | |¦  «        S |                      ¦   «          d S r¡   )rY  rt   Úd2i_DHparams_biorY   rr   r˜   r/  r{  r   r�   r  rÆ  r�   ÚCryptography_d2i_DHxparams_biorÈ  )r…   rT  rÉ  r  r¨   s        rb   Úload_der_parameterszBackend.load_der_parameters  s.  € Ø×$Ò$ TÑ*Ô*ˆØ”9×-Ò-¨g¬k¸4¼9¼>ÑJÔJˆØ�t”y”~Ò%Ð%Ø”y—|’| H¨d¬iÔ.?Ñ@Ô@ˆHÝ   xÑ0Ô0Ð0ØŒYÔ4ð 
	5à× Ò Ñ"Ô"Ð"Ø”)×%Ò% g¤kÑ2Ô2ˆCØ×Ò  q¢Ñ)Ô)Ð)Ø”y×?Ò?Ø”˜TœYœ^ñô ˆHð ˜4œ9œ>Ò)Ð)Øœ9Ÿ<š<¨°$´)Ô2CÑDÔD�Ý$ T¨8Ñ4Ô4Ð4à×&Ò&Ñ(Ô(Ð(Ð(Ð(ra   Úcertc                 ó\  — |                      t          j        j        ¦  «        }|                      |¦  «        }| j                             |j        | j        j	        ¦  «        }|  
                    || j        j	        k    ¦  «         | j                             || j        j        ¦  «        }|S rž   )Úpublic_bytesr(   ÚEncodingÚDERrY  rt   Úd2i_X509_biorY   rr   r˜   r�   r/  Ú	X509_free)r…   rÝ  rT  rÉ  r   s        rb   Ú
_cert2osslzBackend._cert2ossl)  s‡   € Ø× Ò ¥Ô!7Ô!;Ñ<Ô<ˆØ×$Ò$ TÑ*Ô*ˆØŒy×%Ò% g¤k°4´9´>ÑBÔBˆØ×Ò˜D D¤I¤NÒ2Ñ3Ô3Ð3ØŒy�|Š|˜D $¤)Ô"5Ñ6Ô6ˆØˆra   r   c                 óà   — |                       ¦   «         }| j                             ||¦  «        }|                      |dk    ¦  «         t	          j        |                      |¦  «        ¦  «        S r¡   )r^  rt   Úi2d_X509_bior�   Ú	rust_x509Úload_der_x509_certificaterc  )r…   r   rY   r¨   s       rb   Ú
_ossl2certzBackend._ossl2cert1  sa   € Ø×%Ò%Ñ'Ô'ˆØŒi×$Ò$ S¨$Ñ/Ô/ˆØ×Ò˜C 1šHÑ%Ô%Ð%ÝÔ2°4×3EÒ3EÀcÑ3JÔ3JÑKÔKÐKra   Úcsrc                 ó\  — |                      t          j        j        ¦  «        }|                      |¦  «        }| j                             |j        | j        j	        ¦  «        }|  
                    || j        j	        k    ¦  «         | j                             || j        j        ¦  «        }|S rž   )rß  r(   rà  rá  rY  rt   Úd2i_X509_REQ_biorY   rr   r˜   r�   r/  ÚX509_REQ_free)r…   rê  rT  rÉ  Úx509_reqs        rb   Ú	_csr2osslzBackend._csr2ossl7  ó‡   € Ø×Ò¥Ô 6Ô :Ñ;Ô;ˆØ×$Ò$ TÑ*Ô*ˆØ”9×-Ò-¨g¬k¸4¼9¼>ÑJÔJˆØ×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆØˆra   rî  c                 óà   — |                       ¦   «         }| j                             ||¦  «        }|                      |dk    ¦  «         t	          j        |                      |¦  «        ¦  «        S r¡   )r^  rt   Úi2d_X509_REQ_bior�   rç  Úload_der_x509_csrrc  )r…   rî  rY   r¨   s       rb   Ú	_ossl2csrzBackend._ossl2csr?  óc   € ð ×%Ò%Ñ'Ô'ˆØŒi×(Ò(¨¨hÑ7Ô7ˆØ×Ò˜C 1šHÑ%Ô%Ð%ÝÔ*¨4×+=Ò+=¸cÑ+BÔ+BÑCÔCÐCra   Úcrlc                 ó\  — |                      t          j        j        ¦  «        }|                      |¦  «        }| j                             |j        | j        j	        ¦  «        }|  
                    || j        j	        k    ¦  «         | j                             || j        j        ¦  «        }|S rž   )rß  r(   rà  rá  rY  rt   Úd2i_X509_CRL_biorY   rr   r˜   r�   r/  ÚX509_CRL_free)r…   rö  rT  rÉ  Úx509_crls        rb   Ú	_crl2osslzBackend._crl2osslG  rð  ra   rú  c                 óà   — |                       ¦   «         }| j                             ||¦  «        }|                      |dk    ¦  «         t	          j        |                      |¦  «        ¦  «        S r¡   )r^  rt   Úi2d_X509_CRL_bior�   rç  Úload_der_x509_crlrc  )r…   rú  rY   r¨   s       rb   Ú	_ossl2crlzBackend._ossl2crlO  rõ  ra   Ú
public_keyc                 ó
  — t          |t          t          t          f¦  «        st	          d¦  «        ‚|                      |¦  «        }| j                             ||j        ¦  «        }|dk    r|  	                    ¦   «          dS dS )NzGExpecting one of DSAPublicKey, RSAPublicKey, or EllipticCurvePublicKey.rm   FT)
r×   r   r!   r   rÕ  rû  rt   ÚX509_CRL_verifyÚ	_evp_pkeyr  )r…   rö  r   rú  r¨   s        rb   Ú_crl_is_signature_validzBackend._crl_is_signature_validW  s’   € õ
 ØåÝÝ'ðñ
ô 
ð 	õ ð.ñô ð ð —>’> #Ñ&Ô&ˆØŒi×'Ò'¨°*Ô2FÑGÔGˆà�!Š8ˆ8Ø× Ò Ñ"Ô"Ð"Ø�5àˆtra   c                 ób  — |                       |¦  «        }| j                             |¦  «        }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }| j                             ||¦  «        }|dk    r|  	                    ¦   «          dS dS )Nrm   FT)
rï  rt   ÚX509_REQ_get_pubkeyr�   rr   r˜   r/  rN  ÚX509_REQ_verifyr  )r…   rê  rî  Úpkeyr¨   s        rb   Ú_csr_is_signature_validzBackend._csr_is_signature_validq  s�   € ð —>’> #Ñ&Ô&ˆØŒy×,Ò,¨XÑ6Ô6ˆØ×Ò˜D D¤I¤NÒ2Ñ3Ô3Ð3ØŒy�|Š|˜D $¤)Ô"9Ñ:Ô:ˆØŒi×'Ò'¨°$Ñ7Ô7ˆà�!Š8ˆ8Ø× Ò Ñ"Ô"Ð"Ø�5àˆtra   c                 óv   — | j                              |j        |j        ¦  «        dk    rt          d¦  «        ‚d S )Nrm   zKeys do not correspond)rt   ÚEVP_PKEY_cmpr  rð   )r…   Úkey1Úkey2s      rb   Ú_check_keys_correspondzBackend._check_keys_correspond€  s;   € ØŒ9×!Ò! $¤.°$´.ÑAÔAÀQÒFÐFÝÐ5Ñ6Ô6Ð6ð GÐFra   c                 ó‚  — |                       |¦  «        }| j                             d¦  «        }|�Jt          j        d|¦  «         | j                             |¦  «        }||_        t          |¦  «        |_         ||j	        | j        j
        | j                             | j        j        d¦  «        |¦  «        }|| j        j
        k    r„|j        dk    re|                      ¦   «          |j        dk    rt!          d¦  «        ‚|j        dk    sJ ‚t#          d                     |j        d	z
  ¦  «        ¦  «        ‚|                      ¦   «          |                      ¦   «          | j                             || j        j        ¦  «        }|�|j        dk    rt!          d
¦  «        ‚|�|j        d	k    s|�J ‚ ||¦  «        S )NrÁ  re  rÂ  r   éÿÿÿÿz3Password was not given but private key is encryptedéþÿÿÿzAPasswords longer than {} bytes are not supported by this backend.rm   rÓ  )rY  rr   r¶   r   Ú_check_bytesliker  re  r¸   r  rY   r˜   rÄ  rt   rÅ  Úerrorr  rÕ  rð   r‰   ÚmaxsizerÈ  r/  rN  Úcalled)	r…   Úopenssl_read_funcÚconvert_funcrT  re  rÉ  rÊ  Úpassword_ptrr5  s	            rb   r½  zBackend._load_key„  sÛ  € Ø×$Ò$ TÑ*Ô*ˆà”9—=’=Ð!?Ñ@Ô@ˆØÐÝÔ" :¨xÑ8Ô8Ð8Øœ9×0Ò0°Ñ:Ô:ˆLØ ,ˆHÔÝ! (™mœmˆHŒOà$Ð$ØŒKØŒIŒNØŒI×ÒØ”	Ô'Ð)Gñô ð ñ
ô 
ˆð �t”y”~Ò%Ð%ØŒ~ Ò"Ð"Ø×$Ò$Ñ&Ô&Ð&Ø”> RÒ'Ð'Ý#ØMñô ð ð $œ>¨RÒ/Ð/Ð/Ð/Ý$ð+ß+1ª6°(Ô2BÀQÑ2FÑ+GÔ+Gñô ð ð
 ×.Ò.Ñ0Ô0Ð0ð
 	×ÒÑÔÐà”9—<’< ¨$¬)Ô*AÑBÔBˆàÐ H¤O°qÒ$8Ð$8ÝØFñô ð ð
 Ð  X¤_¸Ò%9Ð%9ØÐÐÐàˆ|˜HÑ%Ô%Ð%ra   c                 ó@  ‡ — ‰                       ¦   «         }|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          j        |¦  «        }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 rž   )Ú_lib_reason_matchrt   ÚERR_LIB_EVPÚ'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM)Ú.0r  r…   s     €rb   ú	<genexpr>z4Backend._handle_key_loading_error.<locals>.<genexpr>Õ  sY   øè è € ð 
ð 
ð
 ð	 ×#Ò#Ø”	Ô%Ø”	ÔAñô ð
ð 
ð 
ð 
ð 
ð 
ra   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  rt   r  ÚEVP_R_BAD_DECRYPTÚERR_LIB_PKCS12Ú!PKCS12_R_PKCS12_CIPHERFINAL_ERRORÚCryptography_HAS_PROVIDERSÚERR_LIB_PROVÚPROV_R_BAD_DECRYPTÚanyr&   Ú_errors_with_text)r…   r�   Úerrors_with_texts   `  rb   rÈ  z!Backend._handle_key_loading_error¹  sV  ø€ Ø×%Ò%Ñ'Ô'ˆàð *	Ýðñô ð ð �1ŒI×'Ò'Ø”	Ô% t¤yÔ'Bñô ð#	ð �aŒy×*Ò*Ø”	Ô(Ø”	Ô;ñô ð	#	ð ”	Ô4ð#	ð ˜1”I×/Ò/Ø”IÔ*Ø”IÔ0ñô ð#	õ  Ð?Ñ@Ô@Ð@åð 
ð 
ð 
ð 
ð
  ð
ñ 
ô 
ñ 
ô 
ð 	õ Ð@ÑAÔAÐAõ  'Ô8¸Ñ@Ô@ÐÝð4ð !ñô ð ra   Úcurvec                 óf  — 	 |                       |¦  «        }n# t          $ r | j        j        }Y nw xY w| j                             |¦  «        }|| j        j        k    r|                      ¦   «          dS |                      || j        j        k    ¦  «         | j         	                    |¦  «         dS )NFT)
Ú_elliptic_curve_to_nidr   rt   Ú	NID_undefÚEC_GROUP_new_by_curve_namerr   r˜   r  r�   ÚEC_GROUP_free)r…   r)  Ú	curve_nidÚgroups       rb   Úelliptic_curve_supportedz Backend.elliptic_curve_supportedè  s»   € ð	,Ø×3Ò3°EÑ:Ô:ˆIˆIøÝ#ð 	,ð 	,ð 	,Øœ	Ô+ˆIˆIˆIð	,øøøð ”	×4Ò4°YÑ?Ô?ˆà�D”I”NÒ"Ð"Ø× Ò Ñ"Ô"Ð"Ø�5à×Ò 	¨T¬YÔ-@Ò @ÑAÔAÐAØŒI×#Ò# EÑ*Ô*Ð*Ø�4s   ‚ ˜1°1Úsignature_algorithmc                 ód   — t          |t          j        ¦  «        sdS |                      |¦  «        S rÖ   )r×   r,   ÚECDSAr1  )r…   r2  r)  s      rb   Ú,elliptic_curve_signature_algorithm_supportedz4Backend.elliptic_curve_signature_algorithm_supportedø  s2   € õ Ð-­r¬xÑ8Ô8ð 	Ø�5à×,Ò,¨UÑ3Ô3Ð3ra   c                 ól  — |                       |¦  «        rn|                      |¦  «        }| j                             |¦  «        }|                      |dk    ¦  «         |                      |¦  «        }t          | ||¦  «        S t          d                     |j	        ¦  «        t          j        ¦  «        ‚)z@
        Generate a new private key on the named curve.
        rm   z#Backend object does not support {}.)r1  Ú_ec_key_new_by_curvert   ÚEC_KEY_generate_keyr�   Ú_ec_cdata_to_evp_pkeyr   r   r‰   rË   r   ÚUNSUPPORTED_ELLIPTIC_CURVE)r…   r)  r~  r¨   r5  s        rb   Ú#generate_elliptic_curve_private_keyz+Backend.generate_elliptic_curve_private_key  sª   € ð ×(Ò(¨Ñ/Ô/ð 	Ø×0Ò0°Ñ7Ô7ˆHà”)×/Ò/°Ñ9Ô9ˆCØ×Ò  q¢Ñ)Ô)Ð)à×1Ò1°(Ñ;Ô;ˆHå+¨D°(¸HÑEÔEÐEå&Ø5×<Ò<¸U¼ZÑHÔHÝÔ3ñô ð ra   c                 óÔ  — |j         }|                      |j        ¦  «        }| j                             |                      |j        ¦  «        | j        j        ¦  «        }| j         	                    ||¦  «        }|dk    r#|  
                    ¦   «          t          d¦  «        ‚|                      ||j        |j        ¦  «         |                      |¦  «        }t!          | ||¦  «        S )Nrm   úInvalid EC key.)rC  r7  r)  rr   r/  r)  Úprivate_valuert   ÚBN_clear_freeÚEC_KEY_set_private_keyr  rð   Ú)_ec_key_set_public_key_affine_coordinatesr©  r¨  r9  r   )r…   r:  Úpublicr~  r>  r¨   r5  s          rb   Ú#load_elliptic_curve_private_numbersz+Backend.load_elliptic_curve_private_numbers  sÜ   € ð Ô'ˆà×,Ò,¨V¬\Ñ:Ô:ˆàœ	ŸšØ�OŠO˜GÔ1Ñ2Ô2°D´IÔ4Kñ
ô 
ˆð Œi×.Ò.¨x¸ÑGÔGˆØ�!Š8ˆ8Ø× Ò Ñ"Ô"Ð"ÝÐ.Ñ/Ô/Ð/à×6Ò6Ø�f”h ¤ñ	
ô 	
ð 	
ð ×-Ò-¨hÑ7Ô7ˆå'¨¨h¸ÑAÔAÐAra   c                 óÄ   — |                       |j        ¦  «        }|                      ||j        |j        ¦  «         |                      |¦  «        }t          | ||¦  «        S rž   )r7  r)  rA  r©  r¨  r9  r   )r…   r:  r~  r5  s       rb   Ú"load_elliptic_curve_public_numbersz*Backend.load_elliptic_curve_public_numbers0  sc   € ð ×,Ò,¨W¬]Ñ;Ô;ˆØ×6Ò6Ø�g”i ¤ñ	
ô 	
ð 	
ð ×-Ò-¨hÑ7Ô7ˆå& t¨X°xÑ@Ô@Ð@ra   Úpoint_bytesc           	      ó   — |                       |¦  «        }| j                             |¦  «        }|                      || j        j        k    ¦  «         | j                             |¦  «        }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }|  	                    ¦   «         5 }| j         
                    |||t          |¦  «        |¦  «        }|dk    r#|                      ¦   «          t          d¦  «        ‚	 d d d ¦  «         n# 1 swxY w Y   | j                             ||¦  «        }|                      |dk    ¦  «         |                      |¦  «        }t!          | ||¦  «        S )Nrm   z(Invalid public bytes for the given curve)r7  rt   ÚEC_KEY_get0_groupr�   rr   r˜   ÚEC_POINT_newr/  ÚEC_POINT_freeÚ_tmp_bn_ctxÚEC_POINT_oct2pointr¸   r  rð   ÚEC_KEY_set_public_keyr9  r   )	r…   r)  rF  r~  r0  ÚpointÚbn_ctxr¨   r5  s	            rb   Ú load_elliptic_curve_public_bytesz(Backend.load_elliptic_curve_public_bytes;  sº  € ð ×,Ò,¨UÑ3Ô3ˆØ”	×+Ò+¨HÑ5Ô5ˆØ×Ò˜E T¤Y¤^Ò3Ñ4Ô4Ð4Ø”	×&Ò& uÑ-Ô-ˆØ×Ò˜E T¤Y¤^Ò3Ñ4Ô4Ð4Ø”	—’˜U D¤IÔ$;Ñ<Ô<ˆØ×ÒÑÔð 	M 6Ø”)×.Ò.Ø�u˜k­3¨{Ñ+;Ô+;¸Vñô ˆCð �aŠxˆxØ×$Ò$Ñ&Ô&Ð&Ý Ð!KÑLÔLÐLð ð		Mð 	Mð 	Mñ 	Mô 	Mð 	Mð 	Mð 	Mð 	Mð 	Mð 	Møøøð 	Mð 	Mð 	Mð 	Mð Œi×-Ò-¨h¸Ñ>Ô>ˆØ×Ò˜C 1šHÑ%Ô%Ð%Ø×-Ò-¨hÑ7Ô7ˆÝ& t¨X°xÑ@Ô@Ð@s   Ã	AD+Ä+D/Ä2D/r>  c           	      óî  — |                       |¦  «        }|                      |¦  «        \  }}| j                             |¦  «        }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }|  	                    |¦  «        }| j                             || j        j
        ¦  «        }|                      ¦   «         5 }| j                             |||| j        j        | j        j        |¦  «        }	|                      |	dk    ¦  «         | j                             |¦  «        }
| j                             |¦  «        } ||||
||¦  «        }	|	dk    r#|                      ¦   «          t          d¦  «        ‚	 d d d ¦  «         n# 1 swxY w Y   | j                             ||¦  «        }	|                      |	dk    ¦  «         |  	                    |¦  «        }| j                             || j        j
        ¦  «        }| j                             ||¦  «        }	|                      |	dk    ¦  «         |                      |¦  «        }t'          | ||¦  «        S )Nrm   z'Unable to derive key from private_value)r7  Ú _ec_key_determine_group_get_funcrt   rI  r�   rr   r˜   r/  rJ  r)  r?  rK  ÚEC_POINT_mulÚ
BN_CTX_getr  rð   rM  r@  r9  r   )r…   r>  r)  r~  Úget_funcr0  rN  ÚvaluerO  r¨   Úbn_xÚbn_yÚprivater5  s                 rb   Ú!derive_elliptic_curve_private_keyz)Backend.derive_elliptic_curve_private_keyQ  s  € ð ×,Ò,¨UÑ3Ô3ˆà×?Ò?ÀÑIÔI‰ˆ�%à”	×&Ò& uÑ-Ô-ˆØ×Ò˜E T¤Y¤^Ò3Ñ4Ô4Ð4Ø”	—’˜U D¤IÔ$;Ñ<Ô<ˆà—’ Ñ.Ô.ˆØ”	—’˜U D¤IÔ$;Ñ<Ô<ˆà×ÒÑÔð 	L 6Ø”)×(Ò(Ø�u˜e T¤Y¤^°T´Y´^ÀVñô ˆCð ×Ò  q¢Ñ)Ô)Ð)à”9×'Ò'¨Ñ/Ô/ˆDØ”9×'Ò'¨Ñ/Ô/ˆDà�(˜5 %¨¨t°VÑ<Ô<ˆCØ�aŠxˆxØ×$Ò$Ñ&Ô&Ð&Ý Ð!JÑKÔKÐKð ð	Lð 	Lð 	Lñ 	Lô 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Løøøð 	Lð 	Lð 	Lð 	Lð Œi×-Ò-¨h¸Ñ>Ô>ˆØ×Ò˜C 1šHÑ%Ô%Ð%Ø—/’/ -Ñ0Ô0ˆØ”)—,’,˜w¨¬	Ô(?Ñ@Ô@ˆØŒi×.Ò.¨x¸ÑAÔAˆØ×Ò˜C 1šHÑ%Ô%Ð%à×-Ò-¨hÑ7Ô7ˆå'¨¨h¸ÑAÔAÐAs   ÃB9F$Æ$F(Æ+F(c                 óV   — |                       |¦  «        }|                      |¦  «        S rž   )r+  Ú_ec_key_new_by_curve_nid)r…   r)  r/  s      rb   r7  zBackend._ec_key_new_by_curvex  s)   € Ø×/Ò/°Ñ6Ô6ˆ	Ø×,Ò,¨YÑ7Ô7Ð7ra   r/  c                 óÆ   — | j                              |¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        S rž   )rt   ÚEC_KEY_new_by_curve_namer�   rr   r˜   r/  ry  )r…   r/  r~  s      rb   r\  z Backend._ec_key_new_by_curve_nid|  sO   € Ø”9×5Ò5°iÑ@Ô@ˆØ×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7ØŒy�|Š|˜H d¤iÔ&;Ñ<Ô<Ð<ra   c                 óœ   — | j         rt          || j        ¦  «        sdS |                      |¦  «        ot          |t          j        ¦  «        S rÖ   )rw   r×   Ú_fips_ecdh_curvesr1  r,   ÚECDH)r…   rÄ   r)  s      rb   Ú+elliptic_curve_exchange_algorithm_supportedz3Backend.elliptic_curve_exchange_algorithm_supported�  s]   € ð Ôð 	¥jØ�4Ô)ñ'
ô '
ð 	ð �5à×,Ò,¨UÑ3Ô3ð 
½
Ø•r”wñ9
ô 9
ð 	
ra   c                 ó–   — |                       ¦   «         }| j                             ||¦  «        }|                      |dk    ¦  «         |S r¡   )rP  rt   ÚEVP_PKEY_set1_EC_KEYr�   )r…   r~  r5  r¨   s       rb   r9  zBackend._ec_cdata_to_evp_pkey�  sG   € Ø×+Ò+Ñ-Ô-ˆØŒi×,Ò,¨X°xÑ@Ô@ˆØ×Ò˜C 1šHÑ%Ô%Ð%Øˆra   c                 ó,  — dddœ}|                      |j        |j        ¦  «        }| j                             |                     ¦   «         ¦  «        }|| j        j        k    r2t          d                     |j        ¦  «        t          j	        ¦  «        ‚|S )z/
        Get the NID for a curve name.
        Ú
prime192v1Ú
prime256v1)Ú	secp192r1Ú	secp256r1z${} is not a supported elliptic curve)
ÚgetrË   rt   Ú
OBJ_sn2nidrÍ   r,  r   r‰   r   r:  )r…   r)  Úcurve_aliasesÚ
curve_namer/  s        rb   r+  zBackend._elliptic_curve_to_nid“  sŽ   € ð
 '3ÀÐNÐNˆà"×&Ò& u¤z°5´:Ñ>Ô>ˆ
à”I×(Ò(¨×):Ò):Ñ)<Ô)<Ñ=Ô=ˆ	Ø˜œ	Ô+Ò+Ð+Ý&Ø6×=Ò=¸e¼jÑIÔIÝÔ3ñô ð ð Ðra   c              #   ó|  K  — | j                              ¦   «         }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }| j                              |¦  «         	 |V — | j                              |¦  «         d S # | j                              |¦  «         w xY wrž   )	rt   Ú
BN_CTX_newr�   rr   r˜   r/  ÚBN_CTX_freeÚBN_CTX_startÚ
BN_CTX_end)r…   rO  s     rb   rK  zBackend._tmp_bn_ctx¤  s¬   è è € à”×%Ò%Ñ'Ô'ˆØ×Ò˜F d¤i¤nÒ4Ñ5Ô5Ð5Ø”—’˜f d¤iÔ&;Ñ<Ô<ˆØŒ	×Ò˜vÑ&Ô&Ð&ð	)ØˆLˆLˆLàŒI× Ò  Ñ(Ô(Ð(Ð(Ð(øˆDŒI× Ò  Ñ(Ô(Ð(Ð(øøøs   Á?B ÂB;c                 ó–  — |                       || j        j        k    ¦  «         | j                             d¦  «        }|                       || j        j        k    ¦  «         | j                             |¦  «        }|                       || j        j        k    ¦  «         | j                             |¦  «        }|                       || j        j        k    ¦  «         | j                             |¦  «        }|                       || j        j        k    ¦  «         ||k    r| j        j	        r| j        j
        }n| j        j        }|sJ ‚||fS )zu
        Given an EC_KEY determine the group and what function is required to
        get point coordinates.
        s   characteristic-two-field)r�   rr   r˜   rt   rk  r,  rH  ÚEC_GROUP_method_ofÚEC_METHOD_get_field_typeÚCryptography_HAS_EC2MÚ$EC_POINT_get_affine_coordinates_GF2mÚ#EC_POINT_get_affine_coordinates_GFp)r…   r“  Únid_two_fieldr0  ÚmethodÚnidrU  s          rb   rR  z(Backend._ec_key_determine_group_get_func¯  s*  € ð
 	×Ò˜C 4¤9¤>Ò1Ñ2Ô2Ð2àœ	×,Ò,Ð-HÑIÔIˆØ×Ò˜M¨T¬YÔ-@Ò@ÑAÔAÐAà”	×+Ò+¨CÑ0Ô0ˆØ×Ò˜E T¤Y¤^Ò3Ñ4Ô4Ð4à”×-Ò-¨eÑ4Ô4ˆØ×Ò˜F d¤i¤nÒ4Ñ5Ô5Ð5àŒi×0Ò0°Ñ8Ô8ˆØ×Ò˜C 4¤9Ô#6Ò6Ñ7Ô7Ð7à�-ÒÐ D¤IÔ$CÐØ”yÔEˆHˆHà”yÔDˆHàˆˆˆà˜ˆÐra   r©  r¨  c                 ó¦  — |dk     s|dk     rt          d¦  «        ‚| j                             |                      |¦  «        | j        j        ¦  «        }| j                             |                      |¦  «        | j        j        ¦  «        }| j                             |||¦  «        }|dk    r#|                      ¦   «          t          d¦  «        ‚dS )zg
        Sets the public key point in the EC_KEY context to the affine x and y
        values.
        r   z2Invalid EC key. Both x and y must be non-negative.rm   r=  N)rð   rr   r/  r)  rt   r1  Ú(EC_KEY_set_public_key_affine_coordinatesr  )r…   r“  r©  r¨  r¨   s        rb   rA  z1Backend._ec_key_set_public_key_affine_coordinatesË  sÂ   € ð ˆqŠ5ˆ5�A˜’E�EÝØDñô ð ð ŒI�LŠL˜Ÿš¨Ñ+Ô+¨T¬YÔ->Ñ?Ô?ˆØŒI�LŠL˜Ÿš¨Ñ+Ô+¨T¬YÔ->Ñ?Ô?ˆØŒi×@Ò@ÀÀaÈÑKÔKˆØ�!Š8ˆ8Ø× Ò Ñ"Ô"Ð"ÝÐ.Ñ/Ô/Ð/ð ˆ8ra   Úencodingr‰   Úencryption_algorithmc                 ó<  — t          |t          j        ¦  «        st          d¦  «        ‚t          |t          j        ¦  «        st          d¦  «        ‚t          |t          j        ¦  «        st          d¦  «        ‚t          |t          j        ¦  «        rd}n•t          |t          j        ¦  «        r*|j        }t          |¦  «        dk    rt          d¦  «        ‚nQt          |t          j        ¦  «        r(|j        |cxu rt          j        j        u rn n|j        }nt          d¦  «        ‚|t          j        j        u rf|t          j        j        u r| j        j        }n/|t          j        j        u r| j        j        }nt          d¦  «        ‚|                      |||¦  «        S |t          j        j        u �r‰| j        r)t          |t          j        ¦  «        st          d	¦  «        ‚| j                             |¦  «        }	|t          j        j        u r}|	| j        j        k    r| j        j        }nI|	| j        j        k    r| j        j        }n,|	| j        j        k    r| j        j        }nt          d
¦  «        ‚|                      |||¦  «        S |t          j        j        u r�|rt          d¦  «        ‚|	| j        j        k    r| j        j        }nI|	| j        j        k    r| j        j        }n,|	| j        j        k    r| j        j         }nt          d
¦  «        ‚|  !                    ||¦  «        S t          d¦  «        ‚|t          j        j        u r8|t          j        j        u rtE          j#        |||¦  «        S t          d¦  «        ‚t          d¦  «        ‚)Nú/encoding must be an item from the Encoding enumz2format must be an item from the PrivateFormat enumzBEncryption algorithm must be a KeySerializationEncryption instancera   iÿ  zBPasswords longer than 1023 bytes are not supported by this backendzUnsupported encryption typezUnsupported encoding for PKCS8zCEncrypted traditional OpenSSL format is not supported in FIPS mode.z+Unsupported key type for TraditionalOpenSSLzDEncryption is not supported for DER encoded traditional OpenSSL keysz+Unsupported encoding for TraditionalOpenSSLz=OpenSSH private key format can only be used with PEM encodingúformat is invalid with this key)$r×   r(   rà  rÕ  ÚPrivateFormatÚKeySerializationEncryptionÚNoEncryptionÚBestAvailableEncryptionre  r¸   rð   Ú_KeySerializationEncryptionÚ_formatÚOpenSSHÚPKCS8ÚPEMrt   ÚPEM_write_bio_PKCS8PrivateKeyrá  Úi2d_PKCS8PrivateKey_bioÚ_private_key_bytes_via_bioÚTraditionalOpenSSLrw   rk  rl  ÚPEM_write_bio_RSAPrivateKeyrt  ÚPEM_write_bio_DSAPrivateKeyrw  ÚPEM_write_bio_ECPrivateKeyrr  Úi2d_ECPrivateKey_bioÚi2d_DSAPrivateKey_bioÚ_bio_func_outputrR   Ú_serialize_ssh_private_key)
r…   r~  r‰   r  rÃ   r5  Úcdatare  Ú	write_bior|  s
             rb   Ú_private_key_byteszBackend._private_key_bytesÝ  s  € õ ˜(¥MÔ$:Ñ;Ô;ð 	OÝÐMÑNÔNÐNÝ˜&¥-Ô"=Ñ>Ô>ð 	ÝØDñô ð õ Ø ¥-Ô"Jñ
ô 
ð 	õ ðñô ð õ Ð*­MÔ,FÑGÔGð 	<ØˆHˆHÝØ ¥-Ô"Gñ
ô 
ð 	<ð ,Ô4ˆHÝ�8‰}Œ}˜tÒ#Ð#Ý ð#ñô ð ð $õ Ø$¥mÔ&Oñô ð
	<ð %Ô,Øð3ð 3ð 3ð 3åÔ*Ô2ð3ð 3ð 3ð 3ð 3ð ,Ô4ˆHˆHåÐ:Ñ;Ô;Ð;ð •]Ô0Ô6Ð6Ð6Ø�=Ô1Ô5Ð5Ð5Ø œIÔC�	�	Ø�]Ô3Ô7Ð7Ð7Ø œIÔ=�	�	å Ð!AÑBÔBÐBØ×2Ò2Ø˜8 Xñô ð ð
 •]Ô0ÔCÐCÑCØÔ!ð ­*Ø$¥mÔ&@ñ+ô +ð õ !ð.ñô ð ð ”y×,Ò,¨XÑ6Ô6ˆHà�=Ô1Ô5Ð5Ð5Ø˜tœyÔ5Ò5Ð5Ø $¤	Ô E�I�IØ ¤Ô!7Ò7Ð7Ø $¤	Ô E�I�IØ ¤Ô!6Ò6Ð6Ø $¤	Ô D�I�Iå$ØEñô ð ð ×6Ò6Ø˜u hñô ð ð �=Ô1Ô5Ð5Ð5Øð Ý$ð3ñô ð ð ˜tœyÔ5Ò5Ð5Ø $¤	Ô ?�I�IØ ¤Ô!6Ò6Ð6Ø $¤	Ô >�I�IØ ¤Ô!7Ò7Ð7Ø $¤	Ô ?�I�Iå$ØEñô ð ð ×,Ò,¨Y¸Ñ>Ô>Ð>åÐJÑKÔKÐKð •]Ô0Ô8Ð8Ð8Ø�=Ô1Ô5Ð5Ð5ÝÔ5Ø˜Ð#7ñô ð õ ð%ñô ð õ Ð:Ñ;Ô;Ð;ra   c           	      óÌ   — |s| j         j        }n| j                             d¦  «        }|                      ||||t          |¦  «        | j         j        | j         j        ¦  «        S )Ns   aes-256-cbc)rr   r˜   rt   ÚEVP_get_cipherbynamer•  r¸   )r…   r˜  r5  re  rí   s        rb   rŽ  z"Backend._private_key_bytes_via_bioW  sh   € Øð 	HØœœˆJˆJð œ×7Ò7¸ÑGÔGˆJà×$Ò$ØØØØÝ�‰MŒMØŒIŒNØŒIŒNñ
ô 
ð 	
ra   c                 ó˜   — |                       ¦   «         } ||g|¢R Ž }|                      |dk    ¦  «         |                      |¦  «        S r¡   )r^  r�   rc  )r…   r˜  ÚargsrY   r¨   s        rb   r•  zBackend._bio_func_outputh  sV   € Ø×%Ò%Ñ'Ô'ˆØˆi˜Ð#˜dÐ#Ð#Ð#ˆØ×Ò˜C 1šHÑ%Ô%Ð%Ø×!Ò! #Ñ&Ô&Ð&ra   c                 ó¨  — t          |t          j        ¦  «        st          d¦  «        ‚t          |t          j        ¦  «        st          d¦  «        ‚|t          j        j        u re|t          j        j        u r| j        j        }n/|t          j        j	        u r| j        j
        }nt          d¦  «        ‚|                      ||¦  «        S |t          j        j        u rž| j                             |¦  «        }|| j        j        k    rt          d¦  «        ‚|t          j        j        u r| j        j        }n/|t          j        j	        u r| j        j        }nt          d¦  «        ‚|                      ||¦  «        S |t          j        j        u r6|t          j        j        u rt'          j        |¦  «        S t          d¦  «        ‚t          d¦  «        ‚)Nr�  z1format must be an item from the PublicFormat enumz8SubjectPublicKeyInfo works only with PEM or DER encodingz+PKCS1 format is supported only for RSA keysz)PKCS1 works only with PEM or DER encodingz1OpenSSH format must be used with OpenSSH encodingr‚  )r×   r(   rà  rÕ  ÚPublicFormatÚSubjectPublicKeyInfor‹  rt   ÚPEM_write_bio_PUBKEYrá  Úi2d_PUBKEY_biorð   r•  ÚPKCS1rk  rl  ÚPEM_write_bio_RSAPublicKeyr‚  r‰  rR   Úserialize_ssh_public_key)r…   r~  r‰   rÃ   r5  r—  r˜  r|  s           rb   Ú_public_key_byteszBackend._public_key_bytesn  sÎ  € õ ˜(¥MÔ$:Ñ;Ô;ð 	OÝÐMÑNÔNÐNÝ˜&¥-Ô"<Ñ=Ô=ð 	ÝØCñô ð ð
 •]Ô/ÔDÐDÐDØ�=Ô1Ô5Ð5Ð5Ø œIÔ:�	�	Ø�]Ô3Ô7Ð7Ð7Ø œIÔ4�	�	å ØNñô ð ð ×(Ò(¨°HÑ=Ô=Ð=ð •]Ô/Ô5Ð5Ð5à”y×,Ò,¨XÑ6Ô6ˆHØ˜4œ9Ô1Ò1Ð1Ý Ð!NÑOÔOÐOà�=Ô1Ô5Ð5Ð5Ø œIÔ@�	�	Ø�]Ô3Ô7Ð7Ð7Ø œIÔ:�	�	å Ð!LÑMÔMÐMØ×(Ò(¨°EÑ:Ô:Ð:ð •]Ô/Ô7Ð7Ð7Ø�=Ô1Ô9Ð9Ð9ÝÔ3°CÑ8Ô8Ð8åØCñô ð õ Ð:Ñ;Ô;Ð;ra   c                 ó   — | j         j         S rž   ©rt   rp  r„   s    rb   Údh_supportedzBackend.dh_supported¥  ó   € Ø”9Ô6Ð6Ð6ra   Ú	generatorc                 ó  — |t           j        k     r,t          d                     t           j        ¦  «        ¦  «        ‚|dvrt          d¦  «        ‚| j                             ¦   «         }|                      || j        j        k    ¦  «         | j         	                    || j        j
        ¦  «        }| j                             |||| j        j        ¦  «        }|                      |dk    ¦  «         t          | |¦  «        S )Nz$DH key_size must be at least {} bits)é   é   zDH generator must be 2 or 5rm   )r*   Ú_MIN_MODULUS_SIZErð   r‰   rt   ÚDH_newr�   rr   r˜   r/  r{  ÚDH_generate_parameters_exr   )r…   r«  r+  Údh_param_cdatar¨   s        rb   Úgenerate_dh_parameterszBackend.generate_dh_parameters¨  sñ   € ð •bÔ*Ò*Ð*ÝØ6×=Ò=ÝÔ(ñô ñô ð ð ˜FÐ"Ð"ÝÐ:Ñ;Ô;Ð;àœ×)Ò)Ñ+Ô+ˆØ×Ò˜N¨d¬i¬nÒ<Ñ=Ô=Ð=ØœŸš n°d´iÔ6GÑHÔHˆàŒi×1Ò1Ø˜H i°´´ñ
ô 
ˆð 	×Ò˜C 1šHÑ%Ô%Ð%å˜T >Ñ2Ô2Ð2ra   c                 ó–   — |                       ¦   «         }| j                             ||¦  «        }|                      |dk    ¦  «         |S r¡   )rP  rt   ÚEVP_PKEY_set1_DHr�   )r…   r  r5  r¨   s       rb   Ú_dh_cdata_to_evp_pkeyzBackend._dh_cdata_to_evp_pkeyÀ  sG   € Ø×+Ò+Ñ-Ô-ˆØŒi×(Ò(¨°8Ñ<Ô<ˆØ×Ò˜C 1šHÑ%Ô%Ð%Øˆra   c                 óÞ   — t          |j        | ¦  «        }| j                             |¦  «        }|                      |dk    ¦  «         |                      |¦  «        }t          | ||¦  «        S r¡   )r   Ú	_dh_cdatart   ÚDH_generate_keyr�   r¶  r   )r…   r•  Údh_key_cdatar¨   r5  s        rb   Úgenerate_dh_private_keyzBackend.generate_dh_private_keyÆ  so   € õ &ØÔ  $ñ
ô 
ˆð Œi×'Ò'¨Ñ5Ô5ˆØ×Ò˜C 1šHÑ%Ô%Ð%à×-Ò-¨lÑ;Ô;ˆå˜T <°Ñ:Ô:Ð:ra   c                 óT   — |                       |                      ||¦  «        ¦  «        S rž   )r»  r³  )r…   r«  r+  s      rb   Ú&generate_dh_private_key_and_parametersz.Backend.generate_dh_private_key_and_parametersÔ  s/   € ð ×+Ò+Ø×'Ò'¨	°8Ñ<Ô<ñ
ô 
ð 	
ra   c                 óP  — |j         j        }| j                             ¦   «         }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }|  	                    |j
        ¦  «        }|  	                    |j        ¦  «        }|j        �|  	                    |j        ¦  «        }n| j        j        }|  	                    |j         j        ¦  «        }|  	                    |j        ¦  «        }| j                             ||||¦  «        }	|                      |	dk    ¦  «         | j                             |||¦  «        }	|                      |	dk    ¦  «         | j                             dd¦  «        }
| j                             ||
¦  «        }	|                      |	dk    ¦  «         |
d         dk    r3|j        dk    r|
d         | j        j        z  dk    st)          d¦  «        ‚|                      |¦  «        }t-          | ||¦  «        S )Nrm   úint[]r   r­  z.DH private numbers did not pass safety checks.)rC  r§  rt   r°  r�   rr   r˜   r/  r{  r)  r=  r¡  r>  r¨  r©  ÚDH_set0_pqgÚDH_set0_keyr¶   ÚCryptography_DH_checkÚDH_NOT_SUITABLE_GENERATORrð   r¶  r   )r…   r:  r§  r  r=  r¡  r>  r¢  r£  r¨   Úcodesr5  s               rb   Úload_dh_private_numberszBackend.load_dh_private_numbersÛ  sé  € ð $Ô2ÔDÐà”9×#Ò#Ñ%Ô%ˆØ×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*;Ñ<Ô<ˆà�OŠOÐ-Ô/Ñ0Ô0ˆØ�OŠOÐ-Ô/Ñ0Ô0ˆàÔÐ*Ø—’Ð 1Ô 3Ñ4Ô4ˆAˆAà”	”ˆAà—/’/ 'Ô"8Ô":Ñ;Ô;ˆØ—?’? 7¤9Ñ-Ô-ˆàŒi×#Ò# H¨a°°AÑ6Ô6ˆØ×Ò˜C 1šHÑ%Ô%Ð%àŒi×#Ò# H¨g°xÑ@Ô@ˆØ×Ò˜C 1šHÑ%Ô%Ð%à”	—’˜g qÑ)Ô)ˆØŒi×-Ò-¨h¸Ñ>Ô>ˆØ×Ò˜C 1šHÑ%Ô%Ð%ð �Œ8�qŠ=ˆ=ØÔ 1Ò$Ð$Ø�a”˜4œ9Ô>Ñ>À!ÒCÐCåÐMÑNÔNÐNà×-Ò-¨hÑ7Ô7ˆå˜T 8¨XÑ6Ô6Ð6ra   c                 ó   — | j                              ¦   «         }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }|j        }|                      |j	        ¦  «        }|                      |j
        ¦  «        }|j        �|                      |j        ¦  «        }n| j        j        }|                      |j        ¦  «        }| j                              ||||¦  «        }|                      |dk    ¦  «         | j                              ||| j        j        ¦  «        }|                      |dk    ¦  «         |                      |¦  «        }	t!          | ||	¦  «        S r¡   )rt   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¨   r5  s
             rb   Úload_dh_public_numberszBackend.load_dh_public_numbers  sJ  € ð ”9×#Ò#Ñ%Ô%ˆØ×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*;Ñ<Ô<ˆà#Ô5Ðà�OŠOÐ-Ô/Ñ0Ô0ˆØ�OŠOÐ-Ô/Ñ0Ô0ˆàÔÐ*Ø—’Ð 1Ô 3Ñ4Ô4ˆAˆAà”	”ˆAà—/’/ '¤)Ñ,Ô,ˆàŒi×#Ò# H¨a°°AÑ6Ô6ˆØ×Ò˜C 1šHÑ%Ô%Ð%àŒi×#Ò# H¨g°t´y´~ÑFÔFˆØ×Ò˜C 1šHÑ%Ô%Ð%à×-Ò-¨hÑ7Ô7ˆå˜D (¨HÑ5Ô5Ð5ra   c                 ó  — | j                              ¦   «         }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }|                      |j        ¦  «        }|                      |j	        ¦  «        }|j
        �|                      |j
        ¦  «        }n| j        j        }| j                              ||||¦  «        }|                      |dk    ¦  «         t          | |¦  «        S r¡   )rt   r°  r�   rr   r˜   r/  r{  r)  r=  r¡  r>  rÀ  r   )r…   r:  r  r=  r¡  r>  r¨   s          rb   Úload_dh_parameter_numbersz!Backend.load_dh_parameter_numbers(  sÝ   € ð ”9×#Ò#Ñ%Ô%ˆØ×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*;Ñ<Ô<ˆà�OŠO˜GœIÑ&Ô&ˆØ�OŠO˜GœIÑ&Ô&ˆàŒ9Ð Ø—’ ¤	Ñ*Ô*ˆAˆAà”	”ˆAàŒi×#Ò# H¨a°°AÑ6Ô6ˆØ×Ò˜C 1šHÑ%Ô%Ð%å˜T 8Ñ,Ô,Ð,ra   r=  r¡  r>  c                 ó‚  — | j                              ¦   «         }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }|                      |¦  «        }|                      |¦  «        }|�|                      |¦  «        }n| j        j        }| j                              ||||¦  «        }|                      |dk    ¦  «         | j         	                    dd¦  «        }| j          
                    ||¦  «        }|                      |dk    ¦  «         |d         dk    S )Nrm   r¿  r   )rt   r°  r�   rr   r˜   r/  r{  r)  rÀ  r¶   rÂ  )r…   r=  r¡  r>  r  r¨   rÄ  s          rb   Údh_parameters_supportedzBackend.dh_parameters_supported<  s  € ð ”9×#Ò#Ñ%Ô%ˆØ×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*;Ñ<Ô<ˆà�OŠO˜AÑÔˆØ�OŠO˜AÑÔˆàˆ=Ø—’ Ñ"Ô"ˆAˆAà”	”ˆAàŒi×#Ò# H¨a°°AÑ6Ô6ˆØ×Ò˜C 1šHÑ%Ô%Ð%à”	—’˜g qÑ)Ô)ˆØŒi×-Ò-¨h¸Ñ>Ô>ˆØ×Ò˜C 1šHÑ%Ô%Ð%à�QŒx˜1Š}Ðra   c                 ó"   — | j         j        dk    S r¡   )rt   r�   r„   s    rb   Údh_x942_serialization_supportedz'Backend.dh_x942_serialization_supportedT  s   € ØŒyÔ6¸!Ò;Ð;ra   c                 óŽ  — t          |¦  «        dk    rt          d¦  «        ‚|                      ¦   «         }| j                             || j        j        ¦  «        }|                      |dk    ¦  «         | j                             ||t          |¦  «        ¦  «        }|                      |dk    ¦  «         t          | |¦  «        S )Né    z%An X25519 public key is 32 bytes longrm   )	r¸   rð   rP  rt   ÚEVP_PKEY_set_typeÚ
NID_X25519r�   ÚEVP_PKEY_set1_tls_encodedpointr#   )r…   rT  r5  r¨   s       rb   Úx25519_load_public_bytesz Backend.x25519_load_public_bytesW  sµ   € õ ˆt‰9Œ9˜Š?ˆ?ÝÐDÑEÔEÐEà×+Ò+Ñ-Ô-ˆØŒi×)Ò)¨(°D´IÔ4HÑIÔIˆØ×Ò˜C 1šHÑ%Ô%Ð%ØŒi×6Ò6Ø�d�C ™IœIñ
ô 
ˆð 	×Ò˜C 1šHÑ%Ô%Ð%Ý  hÑ/Ô/Ð/ra   c                 ód  — t          |¦  «        dk    rt          d¦  «        ‚d}|                      d¦  «        5 }||dd…<   ||dd …<   |                      |¦  «        }| j                             |j        | j        j        ¦  «        }d d d ¦  «         n# 1 swxY w Y   |  	                    || j        j        k    ¦  «         | j         
                    || j        j        ¦  «        }|  	                    | j                             |¦  «        | j        j        k    ¦  «         t          | |¦  «        S )NrÏ  z&An X25519 private key is 32 bytes longs   0. 0+en" é0   r   é   )r¸   rð   Ú_zeroed_bytearrayrY  rt   rÔ  rY   rr   r˜   r�   r/  rN  rk  rh  r"   )r…   rT  Úpkcs8_prefixÚbarY   r5  s         rb   Úx25519_load_private_bytesz!Backend.x25519_load_private_bytesf  sg  € õ& ˆt‰9Œ9˜Š?ˆ?ÝÐEÑFÔFÐFàBˆØ×#Ò# BÑ'Ô'ð 	M¨2Ø#ˆBˆq�ˆt‰HØˆBˆrˆsˆs‰GØ×$Ò$ RÑ(Ô(ˆCØ”y×3Ò3°C´G¸T¼Y¼^ÑLÔLˆHð		Mð 	Mð 	Mñ 	Mô 	Mð 	Mð 	Mð 	Mð 	Mð 	Mð 	Møøøð 	Mð 	Mð 	Mð 	Mð 	×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆØ×ÒØŒI×!Ò! (Ñ+Ô+¨t¬yÔ/HÒHñ	
ô 	
ð 	
õ !  xÑ0Ô0Ð0s   ºABÂBÂBc                 óŠ  — | j                              || j        j        ¦  «        }|                      || j        j        k    ¦  «         | j                             || j         j        ¦  «        }| j                              |¦  «        }|                      |dk    ¦  «         | j                             d¦  «        }| j          	                    ||¦  «        }|                      |dk    ¦  «         |                      |d         | j        j        k    ¦  «         | j                             |d         | j         j
        ¦  «        }|S )Nrm   úEVP_PKEY **r   )rt   ÚEVP_PKEY_CTX_new_idrr   r˜   r�   r/  ÚEVP_PKEY_CTX_freeÚEVP_PKEY_keygen_initr¶   ÚEVP_PKEY_keygenrN  )r…   r{  Úevp_pkey_ctxr¨   Ú	evp_ppkeyr5  s         rb   Ú_evp_pkey_keygen_gczBackend._evp_pkey_keygen_gcŠ  s  € Ø”y×4Ò4°S¸$¼)¼.ÑIÔIˆØ×Ò˜L¨D¬I¬NÒ:Ñ;Ô;Ð;Ø”y—|’| L°$´)Ô2MÑNÔNˆØŒi×,Ò,¨\Ñ:Ô:ˆØ×Ò˜C 1šHÑ%Ô%Ð%Ø”I—M’M -Ñ0Ô0ˆ	ØŒi×'Ò'¨°iÑ@Ô@ˆØ×Ò˜C 1šHÑ%Ô%Ð%Ø×Ò˜I aœL¨D¬I¬NÒ:Ñ;Ô;Ð;Ø”9—<’< 	¨!¤¨d¬iÔ.EÑFÔFˆØˆra   c                 ó`   — |                       | j        j        ¦  «        }t          | |¦  «        S rž   )rã  rt   rÑ  r"   rO  s     rb   Úx25519_generate_keyzBackend.x25519_generate_key—  s*   € Ø×+Ò+¨D¬IÔ,@ÑAÔAˆÝ   xÑ0Ô0Ð0ra   c                 ó.   — | j         rdS | j        j         S rÖ   )rw   rt   ro  r„   s    rb   Úx25519_supportedzBackend.x25519_supported›  s    € ØÔð 	Ø�5Ø”9Ô5Ð5Ð5ra   c                 ór  — t          |¦  «        dk    rt          d¦  «        ‚| j                             | j        j        | j        j        |t          |¦  «        ¦  «        }|                      || j        j        k    ¦  «         | j                             || j        j	        ¦  «        }t          | |¦  «        S )Né8   z#An X448 public key is 56 bytes long)r¸   rð   rt   ÚEVP_PKEY_new_raw_public_keyÚNID_X448rr   r˜   r�   r/  rN  r%   ©r…   rT  r5  s      rb   Úx448_load_public_byteszBackend.x448_load_public_bytes   s˜   € Ýˆt‰9Œ9˜Š?ˆ?ÝÐBÑCÔCÐCà”9×8Ò8ØŒIÔ ¤	¤°µc¸$±i´iñ
ô 
ˆð 	×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆÝ˜d HÑ-Ô-Ð-ra   c                 ó¦  — t          |¦  «        dk    rt          d¦  «        ‚| j                             |¦  «        }| j                             | j        j        | j        j        |t          |¦  «        ¦  «        }|                      || j        j        k    ¦  «         | j         	                    || j        j
        ¦  «        }t          | |¦  «        S )Nré  z$An X448 private key is 56 bytes long)r¸   rð   rr   r  rt   ÚEVP_PKEY_new_raw_private_keyrë  r˜   r�   r/  rN  r$   ©r…   rT  rX  r5  s       rb   Úx448_load_private_byteszBackend.x448_load_private_bytes«  s­   € Ýˆt‰9Œ9˜Š?ˆ?ÝÐCÑDÔDÐDà”9×(Ò(¨Ñ.Ô.ˆØ”9×9Ò9ØŒIÔ ¤	¤°½#¸d¹)¼)ñ
ô 
ˆð 	×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆÝ˜t XÑ.Ô.Ð.ra   c                 ó`   — |                       | j        j        ¦  «        }t          | |¦  «        S rž   )rã  rt   rë  r$   rO  s     rb   Úx448_generate_keyzBackend.x448_generate_key·  s*   € Ø×+Ò+¨D¬IÔ,>Ñ?Ô?ˆÝ˜t XÑ.Ô.Ð.ra   c                 óH   — | j         rdS | j        j         o| j        j         S rÖ   )rw   rt   Ú"CRYPTOGRAPHY_OPENSSL_LESS_THAN_111rp  r„   s    rb   Úx448_supportedzBackend.x448_supported»  s2   € ØÔð 	Ø�5à”	Ô<Ð<ð 8Ø”IÔ7Ð7ð	
ra   c                 ó.   — | j         rdS | j        j         S rÖ   )rw   rt   Ú#CRYPTOGRAPHY_OPENSSL_LESS_THAN_111Br„   s    rb   Úed25519_supportedzBackend.ed25519_supportedÃ  s    € ØÔð 	Ø�5Ø”9Ô@Ð@Ð@ra   c                 ó°  — t          j        d|¦  «         t          |¦  «        t          j        k    rt          d¦  «        ‚| j                             | j        j        | j	        j
        |t          |¦  «        ¦  «        }|                      || j	        j
        k    ¦  «         | j	                             || j        j        ¦  «        }t          | |¦  «        S )NrT  z&An Ed25519 public key is 32 bytes long)r   Ú_check_bytesr¸   r-   Ú_ED25519_KEY_SIZErð   rt   rê  ÚNID_ED25519rr   r˜   r�   r/  rN  r   rì  s      rb   Úed25519_load_public_bytesz!Backend.ed25519_load_public_bytesÈ  s²   € õ 	Ô˜6 4Ñ(Ô(Ð(åˆt‰9Œ9�Ô1Ò1Ð1ÝÐEÑFÔFÐFà”9×8Ò8ØŒIÔ! 4¤9¤>°4½¸T¹¼ñ
ô 
ˆð 	×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆå   xÑ0Ô0Ð0ra   c                 óä  — t          |¦  «        t          j        k    rt          d¦  «        ‚t	          j        d|¦  «         | j                             |¦  «        }| j         	                    | j        j
        | j        j        |t          |¦  «        ¦  «        }|                      || j        j        k    ¦  «         | j                             || j        j        ¦  «        }t          | |¦  «        S )Nz'An Ed25519 private key is 32 bytes longrT  )r¸   r-   rü  rð   r   r  rr   r  rt   rï  rý  r˜   r�   r/  rN  r   rð  s       rb   Úed25519_load_private_bytesz"Backend.ed25519_load_private_bytesØ  sÇ   € õ ˆt‰9Œ9�Ô1Ò1Ð1ÝÐFÑGÔGÐGåÔ˜v tÑ,Ô,Ð,Ø”9×(Ò(¨Ñ.Ô.ˆØ”9×9Ò9ØŒIÔ! 4¤9¤>°8½SÀ¹Y¼Yñ
ô 
ˆð 	×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆå! $¨Ñ1Ô1Ð1ra   c                 ó`   — |                       | j        j        ¦  «        }t          | |¦  «        S rž   )rã  rt   rý  r   rO  s     rb   Úed25519_generate_keyzBackend.ed25519_generate_keyè  s*   € Ø×+Ò+¨D¬IÔ,AÑBÔBˆÝ! $¨Ñ1Ô1Ð1ra   c                 óH   — | j         rdS | j        j         o| j        j         S rÖ   )rw   rt   rø  rp  r„   s    rb   Úed448_supportedzBackend.ed448_supportedì  s2   € ØÔð 	Ø�5à”	Ô=Ð=ð 8Ø”IÔ7Ð7ð	
ra   c                 ó¦  — t          j        d|¦  «         t          |¦  «        t          k    rt	          d¦  «        ‚| j                             | j        j        | j        j	        |t          |¦  «        ¦  «        }|  
                    || j        j	        k    ¦  «         | j                             || j        j        ¦  «        }t          | |¦  «        S )NrT  z$An Ed448 public key is 57 bytes long)r   rû  r¸   r   rð   rt   rê  Ú	NID_ED448rr   r˜   r�   r/  rN  r   rì  s      rb   Úed448_load_public_byteszBackend.ed448_load_public_bytesô  s­   € ÝÔ˜6 4Ñ(Ô(Ð(Ýˆt‰9Œ9�Ò'Ð'ÝÐCÑDÔDÐDà”9×8Ò8ØŒIÔ ¤¤°µs¸4±y´yñ
ô 
ˆð 	×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆå˜t XÑ.Ô.Ð.ra   c                 óÚ  — t          j        d|¦  «         t          |¦  «        t          k    rt	          d¦  «        ‚| j                             |¦  «        }| j                             | j        j	        | j        j
        |t          |¦  «        ¦  «        }|                      || j        j
        k    ¦  «         | j                             || j        j        ¦  «        }t          | |¦  «        S )NrT  z%An Ed448 private key is 57 bytes long)r   r  r¸   r   rð   rr   r  rt   rï  r  r˜   r�   r/  rN  r   rð  s       rb   Úed448_load_private_bytesz Backend.ed448_load_private_bytes  sÂ   € ÝÔ˜v tÑ,Ô,Ð,Ýˆt‰9Œ9�Ò'Ð'ÝÐDÑEÔEÐEà”9×(Ò(¨Ñ.Ô.ˆØ”9×9Ò9ØŒIÔ ¤¤°½3¸t¹9¼9ñ
ô 
ˆð 	×Ò˜H¨¬	¬Ò6Ñ7Ô7Ð7Ø”9—<’< ¨$¬)Ô*AÑBÔBˆå  hÑ/Ô/Ð/ra   c                 ó`   — |                       | j        j        ¦  «        }t          | |¦  «        S rž   )rã  rt   r  r   rO  s     rb   Úed448_generate_keyzBackend.ed448_generate_key  s*   € Ø×+Ò+¨D¬IÔ,?Ñ@Ô@ˆÝ  hÑ/Ô/Ð/ra   rD  Úrc                 óÎ  — | j                              d|¦  «        }| j                              |¦  «        }| j                             |t          |¦  «        |t          |¦  «        |||t          j        ||¦
  «
        }	|	dk    rB|                      ¦   «         }
d|z  |z  dz  }t          d 
                    |¦  «        |
¦  «        ‚| j                              |¦  «        d d …         S )Nr  rm   é€   i   zJNot enough memory to derive key. These parameters require {} MB of memory.)rr   r¶   r  rt   ÚEVP_PBE_scryptr¸   rP   Ú
_MEM_LIMITr  ÚMemoryErrorr‰   r  )r…   r	  r  r  rD  r  r=  r»   r  r¨   r�   Ú
min_memorys               rb   Úderive_scryptzBackend.derive_scrypt  sî   € ð Œi�mŠmÐ-¨vÑ6Ô6ˆØœ9×0Ò0°Ñ>Ô>ÐØŒi×&Ò&ØÝ�ÑÔØÝ�‰IŒIØØØÝÔØØñ
ô 
ˆð �!Š8ˆ8Ø×3Ò3Ñ5Ô5ˆFð ˜q™ 1™¨Ñ1ˆJÝð$ß$*¢F¨:Ñ$6Ô$6Øñô ð ð
 Œy×Ò Ñ$Ô$ Q Q QÔ'Ð'ra   c                 óè   — t          j        |¦  «        }| j        r|| j        vrdS |                     d¦  «        r| j        j        dk    S | j                             |¦  «        | j        j	        k    S )NFs   -sivrm   )
r   Ú_aead_cipher_namerw   Ú
_fips_aeadÚendswithrt   Ú#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERr›  rr   r˜   )r…   rç   Úcipher_names      rb   Úaead_cipher_supportedzBackend.aead_cipher_supported6  sy   € ÝÔ,¨VÑ4Ô4ˆØÔð 	 +°T´_Ð"DÐ"DØ�5ð ×Ò Ñ(Ô(ð 	Ø”9Ô@ÀAÒEÐEð ”	×.Ò.¨{Ñ;Ô;¸t¼y¼~ÒMðra   c              #   ó”   K  — t          |¦  «        }	 |V — |                      ||¦  «         dS # |                      ||¦  «         w xY w)zÁ
        This method creates a bytearray, which we copy data into (hopefully
        also from a mutable buffer that can be dynamically erased!), and then
        zero when we're done.
        N)Ú	bytearrayÚ
_zero_data)r…   r  rÙ  s      rb   r×  zBackend._zeroed_bytearrayD  sW   è è € õ �vÑÔˆð	(ØˆHˆHˆHà�OŠO˜B Ñ'Ô'Ð'Ð'Ð'øˆD�OŠO˜B Ñ'Ô'Ð'Ð'øøøs	   “/ ¯Ac                 ó4   — t          |¦  «        D ]}d||<   Œd S r”   )Úrange)r…   rT  r  Úis       rb   r  zBackend._zero_dataQ  s.   € õ �v‘”ð 	ð 	ˆAØˆD�‰GˆGð	ð 	ra   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.
        Nr³   rm   z	uint8_t *)rr   r˜   r¸   r¶   Úmemmover  Úcast)r…   rT  Údata_lenr»   s       rb   Ú_zeroed_null_terminated_bufz#Backend._zeroed_null_terminated_bufX  sÆ   è è € ð ˆ<Ø”)”.Ð Ð Ð Ð Ð å˜4‘y”yˆHØ”)—-’- ¨(°Q©,Ñ7Ô7ˆCØŒI×Ò˜c 4¨Ñ2Ô2Ð2ðLØ�	�	�	ð —’ ¤	§¢¨{¸CÑ @Ô @À(ÑKÔKÐKÐKÐKø�—’ ¤	§¢¨{¸CÑ @Ô @À(ÑKÔKÐKÐKøøøs   ÁB Â1Cc                 ó†   — |                       ||¦  «        }|j        |j        r|j        j        nd d„ |j        D ¦   «         fS )Nc                 ó   — g | ]	}|j         ‘Œ
S r`   )Úcertificate©r  rÝ  s     rb   ú
<listcomp>zABackend.load_key_and_certificates_from_pkcs12.<locals>.<listcomp>z  s   € ÐBÐBÐB $ˆTÔÐBÐBÐBra   )Úload_pkcs12rÃ   rÝ  r(  Úadditional_certs)r…   rT  re  Úpkcs12s       rb   Ú%load_key_and_certificates_from_pkcs12z-Backend.load_key_and_certificates_from_pkcs12o  sP   € ð ×!Ò! $¨Ñ1Ô1ˆàŒJØ'-¤{Ð<ˆFŒKÔ#Ð#¸ØBÐB¨&Ô*AÐBÑBÔBð
ð 	
ra   c                 óX  — |�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    r@| j         
                    |d         | j        j        ¦  «        }|                      |¦  «        }|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t5          |¦  «        }nt7          t5          |¦  «        ¦  «        }|D ]î}| j                             ||¦  «        }|                      || j        j        k    ¦  «         | j         
                    || j        j        ¦  «        }|                      |¦  «        }d }| j                             || j        j        ¦  «        }|| j        j        k    r| j                             |¦  «        }|                     t+          ||¦  «        ¦  «         Œït?          ||
|¦  «        S )Nre  z!Could not deserialize PKCS12 datarÜ  zX509 **zCryptography_STACK_OF_X509 **r   zInvalid password or PKCS12 data) r   r  rY  rt   Úd2i_PKCS12_biorY   rr   r˜   r  rð   r/  ÚPKCS12_freer¶   r%  ÚPKCS12_parserN  r€  rã  ré  ÚX509_alias_get0r¹   rT   Úsk_X509_freeÚsk_X509_numr  rp  r  ÚreversedÚsk_X509_valuer�   r‚   rU   )r…   rT  re  rY   Úp12Úevp_pkey_ptrÚx509_ptrÚsk_x509_ptrÚpassword_bufr¨   rÝ  rÃ   Úadditional_certificatesr5  r   Úcert_objrË   Ú
maybe_nameÚsk_x509r"  Úindicesr   Ú	addl_certÚ	addl_names                           rb   r+  zBackend.load_pkcs12}  sç  € ð ÐÝÔ" :¨xÑ8Ô8Ð8à× Ò  Ñ&Ô&ˆØŒi×&Ò& s¤w°´	´Ñ?Ô?ˆØ�$”)”.Ò Ð Ø× Ò Ñ"Ô"Ð"ÝÐ@ÑAÔAÐAàŒi�lŠl˜3 ¤	Ô 5Ñ6Ô6ˆØ”y—}’} ]Ñ3Ô3ˆØ”9—=’= Ñ+Ô+ˆØ”i—m’mÐ$CÑDÔDˆØ×-Ò-¨hÑ7Ô7ð 	¸<Ø”)×(Ò(Ø�\ <°¸;ñô ˆCð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×ÒÑÔÐØ�!Š8ˆ8ÝÐ>Ñ?Ô?Ð?àˆØˆØ"$Ðà˜Œ?˜dœiœnÒ,Ð,Ø”y—|’| L°¤O°T´YÔ5LÑMÔMˆHØ×/Ò/°Ñ9Ô9ˆCà�AŒ;˜$œ)œ.Ò(Ð(Ø”9—<’< ¨¤¨T¬YÔ-@ÑAÔAˆDØ—’ tÑ,Ô,ˆHØˆDØœ×2Ò2°4¸¼¼ÑHÔHˆJØ˜TœYœ^Ò+Ð+Ø”y×'Ò'¨
Ñ3Ô3�Ý$ X¨tÑ4Ô4ˆDà�qŒ>˜TœYœ^Ò+Ñ+Ø”i—l’l ;¨q¤>°4´9Ô3IÑJÔJˆGØ”)×'Ò'¨°A¬Ñ7Ô7ˆCð ”	Ô=ð/à”9Ô6ð/õ   ™*œ*��å"¥5¨¡:¤:Ñ.Ô.�àð ð �Ø”y×.Ò.¨w¸Ñ:Ô:�Ø×#Ò# D¨D¬I¬NÒ$:Ñ;Ô;Ð;Ø”y—|’| D¨$¬)Ô*=Ñ>Ô>�Ø ŸOšO¨DÑ1Ô1�	Ø �	Ø!œY×6Ò6°t¸T¼Y¼^ÑLÔL�
Ø ¤¤Ò/Ð/Ø $¤	× 0Ò 0°Ñ <Ô <�IØ'×.Ò.Ý% i°Ñ;Ô;ñô ð ð õ (¨¨TÐ3JÑKÔKÐKs   ÄD=Ä=EÅErË   Úcasc                 óh
  — d }|�t          j        d|¦  «         t          |t          j        ¦  «        rd}d}d}	d}
| j        j        }�n°t          |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 rþd}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        }�nA| j                             ¦   «         }| j                             || j        j        ¦  «        }g }|D ]þ}t          |t@          ¦  «        r„|j!        }|  "                    |j#        ¦  «        }|  $                    |¦  «        5 }| j         %                    ||d¦  «        }|                      |dk    ¦  «         d d d ¦  «         n# 1 swxY w Y   n|  "                    |¦  «        }| &                    |¦  «         | j         '                    ||¦  «        }tP                               |dk    ¦  «         Œÿ|  $                    |¦  «        5 }|  $                    |¦  «        5 }|r|  "                    |¦  «        n| j        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 )
NrË   r  r   i N  rm   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   rû  r×   r(   r…  rr   r˜   r†  rt   r  ÚNID_aes_256_cbcÚ&NID_pbe_WithSHA1And3_Key_TripleDES_CBCre  r‡  rˆ  rƒ  ÚPKCS12Ú_key_cert_algorithmrS   ÚPBESv1SHA1And3KeyTripleDESCBCÚPBESv2SHA256AndAES256CBCr   Ú
_hmac_hashÚCryptography_HAS_PKCS12_SET_MACrÔ   r�   Ú_kdf_roundsrð   r¸   Úsk_X509_new_nullr/  r4  rT   Úfriendly_namerä  r(  r%  ÚX509_alias_set1r‚   Úsk_X509_pushÚbackendr  ÚPKCS12_creater  ÚPKCS12_set_macr1  r^  Úi2d_PKCS12_biorc  )r…   rË   rÃ   rÝ  rD  r  re  Únid_certÚnid_keyÚpkcs12_iterÚmac_iterÚmac_algÚ
keycertalgr@  Úossl_casÚcaÚca_aliasÚossl_caÚca_name_bufr¨   r<  Úname_bufÚ	ossl_certr5  r8  r�   rY   s                              rb   Ú(serialize_key_and_certificates_to_pkcs12z0Backend.serialize_key_and_certificates_to_pkcs12Ç  s!  € ð ˆØÐÝÔ˜v tÑ,Ô,Ð,åÐ*­MÔ,FÑGÔGð K	@ØˆHØˆGØˆKØˆHØ”i”nˆG‰GÝØ ¥-Ô"Gñ
ô 
ð E	@ð ŒyÔ<ð KØœ9Ô4�Øœ)Ô3��àœ9ÔK�Øœ)ÔJ�àˆKð ˆHà”i”nˆGØ+Ô4ˆH‰HåØ$¥mÔ&Oñô ñ0	@ð %Ô,ÝÔ*Ô1ð2ð 2ð
 ˆHØˆGàˆKàˆHØ+Ô4ˆHØ-ÔAˆJØ�TÔ?Ð?Ð?Øœ9ÔK�Øœ)ÔJ��Ø�tÔ<Ð<Ð<Ø”yÔDð Ý.ØLñô ð ð  œ9Ô4�Øœ)Ô3��à!Ð)Ð)Ð)ð $Ô.Ð:Ø”yÔ@ð Ý.ð.ñô ð ð ×>Ò>Ø(Ô3ñô �ð ×#Ò# G¨t¬y¬~Ò$=Ñ>Ô>Ð>Ð>àœ)œ.�à#Ô/Ð;Ø2Ô>�øõ Ð>Ñ?Ô?Ð?àˆ;�#˜c™(œ( aš-˜-Ø”i”nˆG‰Gà”i×0Ò0Ñ2Ô2ˆGØ”i—l’l 7¨D¬IÔ,BÑCÔCˆGð ˆHØð 1ð 1�Ý˜bÕ"3Ñ4Ô4ð 2Ø!Ô/�HØ"Ÿošo¨b¬nÑ=Ô=�GØ×9Ò9Ø ñô ð 6à$Ø"œi×7Ò7Ø# [°"ñô ˜ð ×+Ò+¨C°1ªHÑ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6øð #Ÿošo¨bÑ1Ô1�GØ—’ Ñ(Ô(Ð(Ø”i×,Ò,¨W°gÑ>Ô>�Ý×&Ò& s¨a¢xÑ0Ô0Ð0Ð0à×-Ò-¨hÑ7Ô7ð *	¸<Ø×1Ò1°$Ñ7Ô7ð ¸8Ø59ÐM˜DŸOšO¨DÑ1Ô1Ð1¸t¼y¼~�	Ø�?Ø"œ}�H�Hà#œyœ~�Hà”i×-Ò-Ø ØØØØØØØØØñô �ð ˜$œ)œ.Ò(Ð(Ø!×1Ò1Ñ3Ô3�FÝ$ð,ð ñô ð ð )ð'ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð< ”	Ô9ðà˜tœyœ~Ò-Ð-à”	×(Ò(ØØ ØØ”I”NØØØñô ð ðE*	ð *	ð *	ñ *	ô *	ð *	ð *	ð *	ð *	ð *	ð *	øøøð *	ð *	ð *	ð *	ðX 	×Ò˜C 4¤9¤>Ò1Ñ2Ô2Ð2ØŒi�lŠl˜3 ¤	Ô 5Ñ6Ô6ˆà×%Ò%Ñ'Ô'ˆØŒi×&Ò& s¨CÑ0Ô0ˆØ×Ò˜C !šGÑ$Ô$Ð$Ø×!Ò! #Ñ&Ô&Ð&sJ   Ê,6K.Ë.K2	Ë5K2	Í3RÎ	BP'ÐRÐ'P+	Ð+RÐ.P+	Ð/A	RÒRÒRc                 ó4   — | j         rdS | j        j        dk    S rà   )rw   rt   ÚCryptography_HAS_POLY1305r„   s    rb   Úpoly1305_supportedzBackend.poly1305_supportedm	  s"   € ØÔð 	Ø�5ØŒyÔ2°aÒ7Ð7ra   c                 óš   — t          j        d|¦  «         t          |¦  «        t          k    rt	          d¦  «        ‚t          | |¦  «        S )NrÃ   zA poly1305 key is 32 bytes long)r   r  r¸   r   rð   r   )r…   rÃ   s     rb   Úcreate_poly1305_ctxzBackend.create_poly1305_ctxr	  sF   € ÝÔ˜u cÑ*Ô*Ð*Ýˆs‰8Œ8Õ)Ò)Ð)ÝÐ>Ñ?Ô?Ð?å  cÑ*Ô*Ð*ra   c                 ó   — | j         j         S rž   r¨  r„   s    rb   Úpkcs7_supportedzBackend.pkcs7_supportedy	  rª  ra   c                 ó°  — t          j        d|¦  «         |                      |¦  «        }| j                             |j        | j        j        | j        j        | j        j        ¦  «        }|| j        j        k    r#|                      ¦   «          t          d¦  «        ‚| j         
                    || j        j        ¦  «        }|                      |¦  «        S ©NrT  zUnable to parse PKCS7 data)r   rû  rY  rt   ÚPEM_read_bio_PKCS7rY   rr   r˜   r  rð   r/  Ú
PKCS7_freeÚ_load_pkcs7_certificates©r…   rT  rY   Úp7s       rb   Úload_pem_pkcs7_certificatesz#Backend.load_pem_pkcs7_certificates|	  s¸   € õ 	Ô˜6 4Ñ(Ô(Ð(Ø× Ò  Ñ&Ô&ˆØŒY×)Ò)ØŒG�T”Y”^ T¤Y¤^°T´Y´^ñ
ô 
ˆð �””ÒÐØ× Ò Ñ"Ô"Ð"ÝÐ9Ñ:Ô:Ð:àŒY�\Š\˜"˜dœiÔ2Ñ3Ô3ˆØ×,Ò,¨RÑ0Ô0Ð0ra   c                 ó„  — t          j        d|¦  «         |                      |¦  «        }| j                             |j        | j        j        ¦  «        }|| j        j        k    r#|                      ¦   «          t          d¦  «        ‚| j         
                    || j        j        ¦  «        }|                      |¦  «        S rm  )r   rû  rY  rt   Úd2i_PKCS7_biorY   rr   r˜   r  rð   r/  ro  rp  rq  s       rb   Úload_der_pkcs7_certificatesz#Backend.load_der_pkcs7_certificates‹	  s¥   € õ 	Ô˜6 4Ñ(Ô(Ð(Ø× Ò  Ñ&Ô&ˆØŒY×$Ò$ S¤W¨d¬i¬nÑ=Ô=ˆØ�””ÒÐØ× Ò Ñ"Ô"Ð"ÝÐ9Ñ:Ô:Ð:àŒY�\Š\˜"˜dœiÔ2Ñ3Ô3ˆØ×,Ò,¨RÑ0Ô0Ð0ra   c                 ó:  — | j                              |j        ¦  «        }|                      || j         j        k    ¦  «         || j         j        k    r-t          d                     |¦  «        t          j	        ¦  «        ‚g }|j
        j        | j        j        k    r|S |j
        j        j        }| j                              |¦  «        }t!          |¦  «        D ]Â}| j                              ||¦  «        }|                      || j        j        k    ¦  «         | j                              |¦  «        }|                      |dk    ¦  «         | j                             || j         j        ¦  «        }|                      |¦  «        }	|                     |	¦  «         ŒÃ|S )NzNOnly basic signed structures are currently supported. NID for this data was {}rm   )rt   ÚOBJ_obj2nidrê   r�   r,  ÚNID_pkcs7_signedr   r‰   r   ÚUNSUPPORTED_SERIALIZATIONr?  Úsignrr   r˜   rÝ  r5  r  r7  ÚX509_up_refr/  rã  ré  r‚   )
r…   rr  r{  Úcertsr@  r"  r   r   r¨   rÝ  s
             rb   rp  z Backend._load_pkcs7_certificates˜	  sk  € ØŒi×#Ò# B¤GÑ,Ô,ˆØ×Ò˜C 4¤9Ô#6Ò6Ñ7Ô7Ð7Ø�$”)Ô,Ò,Ð,Ý&ð(ß(.ª¨s©¬ÝÔ2ñô ð ð )+ˆØŒ4Œ9˜œ	œÒ&Ð&ØˆLà”$”)”.ˆØŒi×#Ò# GÑ,Ô,ˆÝ�s‘”ð 		ð 		ˆAØ”9×*Ò*¨7°AÑ6Ô6ˆDØ×Ò ¨¬	¬Ò 6Ñ7Ô7Ð7Ø”)×'Ò'¨Ñ-Ô-ˆCð ×Ò  q¢Ñ)Ô)Ð)Ø”9—<’<  d¤iÔ&9Ñ:Ô:ˆDØ—?’? 4Ñ(Ô(ˆDØ�LŠL˜ÑÔÐÐàˆra   r}  c                 ó  — t          |¦  «        }|rt          d„ |D ¦   «         ¦  «        st          d¦  «        ‚|t          j        j        t          j        j        fvrt          d¦  «        ‚| j                             ¦   «         }| j	         
                    || j        j        ¦  «        }g }|D ]`}|                      |¦  «        }|                     |¦  «         | j                             ||¦  «        }|                      |dk    ¦  «         Œa| j                             | j	        j        | j	        j        || j	        j        | j        j        ¦  «        }|                      ¦   «         }	|t          j        j        u r(| j                             |	|| j	        j        d¦  «        }n0|t          j        j        u sJ ‚| j                             |	|¦  «        }|                      |dk    ¦  «         |                      |	¦  «        S )Nc              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S rž   )r×   r   ÚCertificater)  s     rb   r  z7Backend.pkcs7_serialize_certificates.<locals>.<genexpr>»	  s@   è è € ð  
ð  
Ø37�J�t�TÔ-Ñ.Ô.ð 
ð  
ð  
ð  
ð  
ð  
ra   z.certs must be a list of certs with length >= 1z/encoding must DER or PEM from the Encoding enumrm   r   )ÚlistÚallrÕ  r(   rà  r‹  rá  rt   rO  rr   r/  r4  rä  r‚   rR  r�   Ú
PKCS7_signr˜   ÚPKCS7_PARTIALr^  ÚPEM_write_bio_PKCS7_streamÚi2d_PKCS7_biorc  )
r…   r}  r~  Úcerts_skÚ
ossl_certsrÝ  rc  r¨   rr  Úbio_outs
             rb   Úpkcs7_serialize_certificatesz$Backend.pkcs7_serialize_certificatesµ	  s  € õ
 �U‘”ˆØð 	N�Cð  
ð  
Ø;@ð 
ñ  
ô  
ñ 
ô 
ð 	Nõ ÐLÑMÔMÐMàÝÔ"Ô&ÝÔ"Ô&ð
ð 
ð 
õ ÐMÑNÔNÐNà”9×-Ò-Ñ/Ô/ˆØ”9—<’< ¨$¬)Ô*@ÑAÔAˆàˆ
Øð 	*ð 	*ˆDØŸš¨Ñ-Ô-ˆIØ×Ò˜iÑ(Ô(Ð(Ø”)×(Ò(¨°9Ñ=Ô=ˆCØ×Ò  q¢Ñ)Ô)Ð)Ð)ð ŒY×!Ò!ØŒIŒNØŒIŒNØØŒIŒNØŒIÔ#ñ
ô 
ˆð ×)Ò)Ñ+Ô+ˆØ•}Ô-Ô1Ð1Ð1Ø”)×6Ò6Ø˜˜TœYœ^¨Qñô ˆCˆCð �}Ô5Ô9Ð9Ð9Ð9Ð9Ø”)×)Ò)¨'°2Ñ6Ô6ˆCà×Ò˜C 1šHÑ%Ô%Ð%Ø×!Ò! 'Ñ*Ô*Ð*ra   ÚbuilderÚoptionsc                 ó®  — |j         €J ‚|                      |j         ¦  «        }| j        j        }d}t	          |j        ¦  «        dk    r| j        j        }n¨| j                             ¦   «         }| j         	                    || j        j
        ¦  «        }g }|j        D ]`}	|                      |	¦  «        }
|                     |
¦  «         | j                             ||
¦  «        }|                      |dk    ¦  «         Œat          j        j        |v r|| j        j        z  }|| j        j        z  }| j                             | j        j        | j        j        || j        j        |¦  «        }|                      || j        j        k    ¦  «         | j         	                    || j        j        ¦  «        }d}t          j        j        |v r|| j        j        z  }n"t          j        j        |v r|| j        j        z  }t          j        j        |v r|| j        j        z  }|j        D ]v\  }}}|                      |¦  «        }
|                      |¦  «        }| j                             ||
|j        ||¦  «        }|                      || j        j        k    ¦  «         Œw|D ]G}|t          j        j        u r|| j        j         z  }Œ%|t          j        j!        u r|| j        j"        z  }ŒH|  #                    ¦   «         }|tH          j%        j&        u r#| j         '                    |||j(        |¦  «        }nú|tH          j%        j)        u r]| j         *                    ||j(        |¦  «        }|                      |dk    ¦  «         | j         +                    |||j(        |¦  «        }nŠ|tH          j%        j,        u sJ ‚| j         *                    ||j(        |¦  «        }|                      |dk    ¦  «         | j        j-        r|  .                    ¦   «          | j         /                    ||¦  «        }|                      |dk    ¦  «         |  0                    |¦  «        S )Nr   rm   )1Ú_datarY  rt   r„  r¸   Ú_additional_certsrr   r˜   rO  r/  r4  rä  r‚   rR  r�   rQ   ÚPKCS7OptionsÚDetachedSignatureÚPKCS7_DETACHEDrƒ  ro  ÚNoCapabilitiesÚPKCS7_NOSMIMECAPÚNoAttributesÚPKCS7_NOATTRÚNoCertsÚPKCS7_NOCERTSÚ_signersrÔ   ÚPKCS7_sign_add_signerr  ÚTextÚ
PKCS7_TEXTÚBinaryÚPKCS7_BINARYr^  r(   rà  ÚSMIMEÚSMIME_write_PKCS7rY   r‹  ÚPKCS7_finalr…  rá  r  r  r†  rc  )r…   r‹  r~  rŒ  rY   Ú
init_flagsÚfinal_flagsr}  rˆ  rÝ  rc  r¨   rr  Úsigner_flagsr(  Úprivate_keyÚhash_algorithmÚmdÚp7signerinfoÚoptionr‰  s                        rb   Ú
pkcs7_signzBackend.pkcs7_signä	  s7  € ð Œ}Ð(Ð(Ð(Ø× Ò  ¤Ñ/Ô/ˆØ”YÔ,ˆ
ØˆåˆwÔ(Ñ)Ô)¨QÒ.Ð.Ø”I”NˆEˆEà”I×.Ò.Ñ0Ô0ˆEØ”I—L’L ¨¬	Ô(>Ñ?Ô?ˆEàˆJØÔ1ð .ð .�Ø ŸOšO¨DÑ1Ô1�	Ø×!Ò! )Ñ,Ô,Ð,Ø”i×,Ò,¨U°IÑ>Ô>�Ø×#Ò# C¨1¢HÑ-Ô-Ð-Ð-åÔÔ/°7Ð:Ð:à˜$œ)Ô2Ñ2ˆJØ˜4œ9Ô3Ñ3ˆKð ŒY×!Ò!ØŒIŒNØŒIŒNØØŒIŒNØñ
ô 
ˆð 	×Ò˜B $¤)¤.Ò0Ñ1Ô1Ð1ØŒY�\Š\˜"˜dœiÔ2Ñ3Ô3ˆØˆõ ÔÔ,°Ð7Ð7Ø˜DœIÔ6Ñ6ˆLˆLÝÔÔ,°Ð7Ð7Ø˜DœIÔ2Ñ2ˆLåÔÔ%¨Ð0Ð0Ø˜DœIÔ3Ñ3ˆLà8?Ô8Hð 
	@ð 
	@Ñ4ˆK˜ nØŸš¨Ñ4Ô4ˆIØ×5Ò5°nÑEÔEˆBØœ9×:Ò:ØØØÔ%ØØñô ˆLð ×Ò °´	´Ò >Ñ?Ô?Ð?Ð?àð 	6ð 	6ˆFð �Ô+Ô0Ð0Ð0Ø˜tœyÔ3Ñ3��Ø�5Ô-Ô4Ð4Ð4Ø˜tœyÔ5Ñ5�øà×)Ò)Ñ+Ô+ˆØ•}Ô-Ô3Ð3Ð3à”)×-Ò-Ø˜˜SœW kñô ˆCˆCð �Ô/Ô3Ð3Ð3Ø”)×'Ò'¨¨C¬G°[ÑAÔAˆCØ×Ò  q¢Ñ)Ô)Ð)Ø”)×6Ò6Ø˜˜SœW kñô ˆCˆCð �}Ô5Ô9Ð9Ð9Ð9Ð9ð ”)×'Ò'¨¨C¬G°[ÑAÔAˆCØ×Ò  q¢Ñ)Ô)Ð)ð ŒyÔ<ð 'Ø×$Ò$Ñ&Ô&Ð&Ø”)×)Ò)¨'°2Ñ6Ô6ˆCØ×Ò˜C 1šHÑ%Ô%Ð%Ø×!Ò! 'Ñ*Ô*Ð*ra   rž   )r‡   N)ûr]   r^   r_   Ú__doc__rË   r  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_modulusr†   Ústrr‹   r›   ÚtypingÚOptionalÚListr&   Ú_OpenSSLErrorr�   rv   rŸ   r©   Ú
contextlibr   r¯   r~   r¼   rŠ   r  rÂ   ÚbytesÚHashAlgorithmr   rÆ   rÑ   rÔ   rÙ   rÞ   râ   rä   ÚHashContextræ   r:   rM   rî   ró   ry   r	   rÿ   r  r  r  r  Ú_OpenSSLErrorWithTextr  r!  r)  r/   ÚRSAPrivateKeyr6  r9  ÚRSAPrivateNumbersrH  ÚRSAPublicNumbersÚRSAPublicKeyrK  rP  r3  rY  r^  rc  r7   r€  r8   r„  rŠ  r)   r�  r+   ÚDSAParametersr”  ÚDSAPrivateKeyr›  r�  r¤  ÚDSAPrivateNumbersrª  ÚDSAPublicNumbersÚDSAPublicKeyr­  ÚDSAParameterNumbersr¯  rš  r³  rµ  r¹  r9   r   r»  r¿  rË  r*   ÚDHParametersrÎ  rs  rÐ  rƒ  rÜ  r   r€  ÚAnyrä  ré  ÚCertificateSigningRequestrï  rô  ÚCertificateRevocationListrû  rÿ  r6   r  r	  r  r½  ÚNoReturnrÈ  ÚEllipticCurver1  ÚEllipticCurveSignatureAlgorithmr5  ÚEllipticCurvePrivateKeyr;  ÚEllipticCurvePrivateNumbersrC  ÚEllipticCurvePublicNumbersÚEllipticCurvePublicKeyrE  rP  rZ  r7  r\  ra  rb  r9  r+  rK  rR  rA  r(   rà  rƒ  r„  r™  rŽ  r•  rŸ  r¦  r©  r³  r¶  ÚDHPrivateKeyr»  r½  ÚDHPrivateNumbersrÅ  ÚDHPublicNumbersÚDHPublicKeyrÇ  ÚDHParameterNumbersrÉ  rË  rÍ  r0   ÚX25519PublicKeyrÓ  ÚX25519PrivateKeyrÚ  rã  rå  rç  r1   ÚX448PublicKeyrí  ÚX448PrivateKeyrñ  ró  rö  rù  r-   ÚEd25519PublicKeyrþ  ÚEd25519PrivateKeyr   r  r  r.   ÚEd448PublicKeyr  ÚEd448PrivateKeyr	  r  r  r  ÚIteratorr  r×  r  r%  ÚTupler.  rU   r+  rV   rW   rd  rg  r   ri  rk  rs  rv  rp  rŠ  rQ   ÚPKCS7SignatureBuilderr�  rª  r`   ra   rb   rd   rd   ‡   s®  € € € € € ðð ð €Dðð ð €Jð �F€Mð 	ŒØŒØŒØŒØÔØÔØŒØŒØŒØŒØŒØŒð€Lð 	ŒØ
ŒØ
ŒØ
Œð	Ðð "ÐØ$)Ð!Ø ™IÐØ ÐØÐ 5Ñ5Ðð:ð :ð :ð(
˜#ð 
ð 
ð 
ð 
ð GKðEð EàðEð ” ¤¨GÔ,AÔ BÔCðEð 
ð	Eð Eð Eð Eð $ð ð ð ð ð5ð 5ð 5ð 5ð.ð .ð .ð .ð Ôð*ð *ñ Ôð*ð&
*ð 
*ð 
*ð 
*ð5°ð 5ð 5ð 5ð 5ð	 cð 	ð 	ð 	ð 	ð/¨ð /ð /ð /ð /ð2Øð2Ø%+Ô%9ð2à	ð2ð 2ð 2ð 2ð
	°Ô0Dð 	ð 	ð 	ð 	ð¸Ô9Mð ð ð ð ð
(¨Ô(<ð (Àð (ð (ð (ð (ð.ØÔ-ð.à	ð.ð .ð .ð .ð: $ð :ð :ð :ð :ð.¨Ô(<ð .Àð .ð .ð .ð .ð-ØÔ-ð-à	Ô	ð-ð -ð -ð -ð
, ð ,¸dð ,Àtð ,ð ,ð ,ð ,ð>ð >ð >ð2ð 2ð 2ð 2ðhKØ%ðKØ-1ðKà	ðKð Kð Kð Kð
KØ%ðKØ-1ðKà	ðKð Kð Kð Kð
.¨vÔ/Cð .Èð .ð .ð .ð .ð(àÔ'ð(ð ð(ð ð	(ð
 ð(ð ð(ð 
ð(ð (ð (ð (ð02 ¤¨WÔ-BÔ!Cð 2ð 2ð 2ð 2ð<à	Œ�WÔ2Ô	3ð<ð <ð <ð <ð

 ð 
ð 
ð 
ð 
ðð ˜cð ð ð ð ð"
Ø"ð
Ø.1ð
à	Ô	ð
ð 
ð 
ð 
ð,
Ø"ð
Ø.1ð
à	ð
ð 
ð 
ð 
ð"
ØÔ,ð"
à	Ô	ð"
ð "
ð "
ð "
ðH8ØÔ+ð8à	Ô	ð8ð 8ð 8ð 8ðð ð ðð ð ðK %ð Kð Kð Kð Kð	ð 	ð 	ð	 Eð 	ð 	ð 	ð 	ð>@Ð4Eð >@ð >@ð >@ð >@ð@8@Ð3Cð 8@ð 8@ð 8@ð 8@ðt

¨fÔ.Bð 

Àtð 

ð 

ð 

ð 

ðÐ->ð À4ð ð ð ð ð&)°ð )¸Ô8Ið )ð )ð )ð )ð03ØÔ+ð3à	Ô	ð3ð 3ð 3ð 3ð9Øð9à	Ô	ð9ð 9ð 9ð 9ð&ð &ð &ð9ØÔ,ð9à	Ô	ð9ð 9ð 9ð 9ð*8ØÔ+ð8à	Ô	ð8ð 8ð 8ð 8ð&/ØÔ.ð/à	Ô	ð/ð /ð /ð /ð ð ð ð&˜tð &ð &ð &ð &ð8¨FÔ,@ð 8ÀTð 8ð 8ð 8ð 8ð

°Tð 
ð 
ð 
ð 
ð
-Ð)=ð -À,ð -ð -ð -ð -ð
Øð
Ø%+¤_°UÔ%;ð
à	ð
ð 
ð 
ð 
ð(1¨ð (1Ð2Bð (1ð (1ð (1ð (1ðT
-¨ð 
-°"´/ð 
-ð 
-ð 
-ð 
-ðØðØ%+¤_°UÔ%;ðà	ðð ð ð ð*ð ð ð&1¨ð 1Ð2Bð 1ð 1ð 1ð 1ð.)¨ð )°"´/ð )ð )ð )ð )ð(˜tÔ/ð °F´Jð ð ð ð ðL˜vœzð L¨dÔ.>ð Lð Lð Lð Lð˜TÔ;ð ÀÄ
ð ð ð ð ðDØœ
ðDà	Ô	'ðDð Dð Dð Dð˜TÔ;ð ÀÄ
ð ð ð ð ðDØœ
ðDà	Ô	'ðDð Dð Dð DðàÔ+ðð 8ðð 
ð	ð ð ð ð4ØÔ1ðà	ðð ð ð ð7ð 7ð 7ð3&ð 3&ð 3&ðj-¨6¬?ð -ð -ð -ð -ð^¨bÔ.>ð À4ð ð ð ð ð 	4àÔ?ð	4ð Ôð	4ð 
ð		4ð 	4ð 	4ð 	4ðØÔ%ðà	Ô	#ðð ð ð ð,BØÔ5ðBà	Ô	#ðBð Bð Bð Bð.	AØÔ4ð	Aà	Ô	"ð	Að 	Að 	Að 	AðAØÔ%ðAØ49ðAà	Ô	"ðAð Að Að Að,%BØ ð%BØ)+Ô)9ð%Bà	Ô	#ð%Bð %Bð %Bð %BðN8¨"Ô*:ð 8ð 8ð 8ð 8ð=°#ð =ð =ð =ð =ð


Øœð

Ø)+Ô)9ð

à	ð

ð 

ð 

ð 

ðð ð ð¨BÔ,<ð Àð ð ð ð ð" ð)ð )ñ „^ð)ðð ð ð80Àð 0Èð 0ð 0ð 0ð 0ð$x<àÔ(ðx<ð Ô+ðx<ð ,ÔFð	x<ð 
ðx<ð x<ð x<ð x<ðt
ð 
ð 
ð"'ð 'ð 'ð5<àÔ(ð5<ð Ô*ð5<ð 
ð5<ð 5<ð 5<ð 5<ðn7˜dð 7ð 7ð 7ð 7ð3Øð3Ø(+ð3à	Œð3ð 3ð 3ð 3ð0ð ð ð;Øœ/ð;à	Œð;ð ;ð ;ð ;ð
Øð
Ø(+ð
à	Œð
ð 
ð 
ð 
ð.7ØÔ*ð.7à	Œð.7ð .7ð .7ð .7ð`6ØÔ)ð6à	Œð6ð 6ð 6ð 6ð:-ØÔ,ð-à	Œð-ð -ð -ð -ð* 9=ðð ØðØðØ!'¤°Ô!5ðà	ðð ð ð ð0<°ð <ð <ð <ð <ð0¨Uð 0°vÔ7Mð 0ð 0ð 0ð 0ð"1Øð"1à	Ô	 ð"1ð "1ð "1ð "1ðHð ð ð1 VÔ%<ð 1ð 1ð 1ð 1ð6 $ð 6ð 6ð 6ð 6ð
	.¨5ð 	.°TÔ5Gð 	.ð 	.ð 	.ð 	.ð
/¨Eð 
/°dÔ6Ið 
/ð 
/ð 
/ð 
/ð/ 4Ô#6ð /ð /ð /ð /ð
 ð 
ð 
ð 
ð 
ðA 4ð Að Að Að Að
1Øð1à	Ô	!ð1ð 1ð 1ð 1ð 2Øð2à	Ô	"ð2ð 2ð 2ð 2ð 2 gÔ&?ð 2ð 2ð 2ð 2ð
 ð 
ð 
ð 
ð 
ð/¨Eð /°eÔ6Jð /ð /ð /ð /ð0¨Uð 0°uÔ7Lð 0ð 0ð 0ð 0ð0 EÔ$9ð 0ð 0ð 0ð 0ð!(àð!(ð ð!(ð ð	!(ð
 ð!(ð ð!(ð ð!(ð 
ð!(ð !(ð !(ð !(ðF¨tð ð ð ð ð Ôð
(¨ð 
(°´À	Ô0Jð 
(ð 
(ð 
(ñ Ôð
(ð sð ¨tð ð ð ð ð ÔðLð Lñ ÔðLð,
Øð
Ø%+¤_°UÔ%;ð
à	ŒØŒÐ)Ô*ØŒ˜Ô(Ô)ØŒ�DÔ$Ô%ð	'ô
ð
ð 
ð 
ð 
ðHLØðHLØ%+¤_°UÔ%;ðHLà	!ðHLð HLð HLð HLðTd'àŒo˜eÔ$ðd'ð Œ_Ð2Ô3ðd'ð Œo˜dÔ.Ô/ð	d'ð
 Œ_˜Vœ[Ð):Ô;Ô<ðd'ð ,ÔFðd'ð 
ðd'ð d'ð d'ð d'ðL8 Dð 8ð 8ð 8ð 8ð
+ uð +Ð1Að +ð +ð +ð +ð7 ð 7ð 7ð 7ð 7ð1Øð1à	Œ�TÔ%Ô	&ð1ð 1ð 1ð 1ð1Øð1à	Œ�TÔ%Ô	&ð1ð 1ð 1ð 1ðð ð ð:-+àŒ{˜4Ô+Ô,ð-+ð  Ô(ð-+ð -+ð -+ð -+ð^`+àÔ,ð`+ð  Ô(ð`+ð ”˜UÔ/Ô0ð	`+ð
 
ð`+ð `+ð `+ð `+ð `+ð `+ra   rd   c                   ó.   — e Zd Zdefd„Zdededefd„ZdS )rø   Úfmtc                 ó   — || _         d S rž   )Ú_fmt)r…   rí  s     rb   r†   zGetCipherByName.__init__H
  s   € ØˆŒ	ˆ	ˆ	ra   rS  rç   rœ   c                 ó¢  — | j                              ||¬¦  «                             ¦   «         }|j                             |                     d¦  «        ¦  «        }||j        j        k    rO|j        j        rC|j         	                    |j        j        |                     d¦  «        |j        j        ¦  «        }| 
                    ¦   «          |S )N)rç   rœ   rµ   )rï  r‰   Úlowerrt   r›  rÍ   rr   r˜   ÚCryptography_HAS_300_EVP_CIPHERÚEVP_CIPHER_fetchr  )r…   rS  rç   rœ   r  rí   s         rb   Ú__call__zGetCipherByName.__call__K
  sÃ   € Ø”i×&Ò&¨f¸4Ð&Ñ@Ô@×FÒFÑHÔHˆØ”\×6Ò6Ø×Ò˜wÑ'Ô'ñ
ô 
ˆ
ð ˜'œ,Ô+Ò+Ð+Ø”Ô<ð ,ð !œ×6Ò6Ø”Ô!Ø×"Ò" 7Ñ+Ô+Ø”Ô!ñô ˆJð 	×ÒÑ!Ô!Ð!ØÐra   N)	r]   r^   r_   r½  r†   rd   r:   rM   rô  r`   ra   rb   rø   rø   G
  sX   € € € € € ð˜Cð ð ð ð ð ð °ð Èð ð ð ð ð ð ra   rø   rS  rç   c                 ó–   — d                      |j        dz  ¦  «        }| j                             |                     d¦  «        ¦  «        S )Nz
aes-{}-xtsr­  rµ   )r‰   r+  rt   r›  rÍ   )rS  rç   rœ   r  s       rb   rû   rû   `
  s@   € Ø×%Ò% f¤o¸Ñ&:Ñ;Ô;€KØŒ<×,Ò,¨[×-?Ò-?ÀÑ-HÔ-HÑIÔIÐIra   )|ÚcollectionsrÂ  rù   r¾  r{   r   Úcryptographyr   r   Úcryptography.exceptionsr   r   Ú$cryptography.hazmat.backends.opensslr   Ú,cryptography.hazmat.backends.openssl.ciphersr	   Ú)cryptography.hazmat.backends.openssl.cmacr   Ú'cryptography.hazmat.backends.openssl.dhr   r   r   r   Ú(cryptography.hazmat.backends.openssl.dsar   r   r   Ú'cryptography.hazmat.backends.openssl.ecr   r   Ú,cryptography.hazmat.backends.openssl.ed25519r   r   Ú*cryptography.hazmat.backends.openssl.ed448r   r   r   Ú+cryptography.hazmat.backends.openssl.hashesr   Ú)cryptography.hazmat.backends.openssl.hmacr   Ú-cryptography.hazmat.backends.openssl.poly1305r   r   Ú(cryptography.hazmat.backends.openssl.rsar    r!   Ú+cryptography.hazmat.backends.openssl.x25519r"   r#   Ú)cryptography.hazmat.backends.openssl.x448r$   r%   Ú"cryptography.hazmat.bindings._rustrç  Ú$cryptography.hazmat.bindings.opensslr&   Úcryptography.hazmat.primitivesr'   r(   Ú*cryptography.hazmat.primitives._asymmetricr)   Ú)cryptography.hazmat.primitives.asymmetricr*   r+   r,   r-   r.   r/   r0   r1   Ú1cryptography.hazmat.primitives.asymmetric.paddingr2   r3   r4   r5   Ú/cryptography.hazmat.primitives.asymmetric.typesr6   r7   r8   Ú&cryptography.hazmat.primitives.ciphersr9   r:   Ú1cryptography.hazmat.primitives.ciphers.algorithmsr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   Ú,cryptography.hazmat.primitives.ciphers.modesrG   rH   rI   rJ   rK   rL   rM   rN   rO   Ú"cryptography.hazmat.primitives.kdfrP   Ú,cryptography.hazmat.primitives.serializationrQ   rR   Ú3cryptography.hazmat.primitives.serialization.pkcs12rS   rT   rU   rV   rW   Ú
namedtuplerX   r\   rd   rø   rû   rS  r`   ra   rb   ú<module>r     s  ðð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %à $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø GÐ GÐ GÐ GÐ GÐ GØ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 EÐ DÐ DÐ DÐ DÐ DØ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð 9Ð 8Ð 8Ð 8Ð 8Ð 8Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø HÐ HÐ HÐ HÐ HÐ Hð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cðð ð ð ð ð ð ð ð ð ð ð ð ð ð $ˆ[Ô# L°5¸*Ð2EÑFÔF€
ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð}&+ð }&+ð }&+ð }&+ð }&+ñ }&+ô }&+ð }&+ð@Nð ð ð ð ñ ô ð ð2J˜Wð J¨cð Jð Jð Jð Jð
 ˆ'‰)Œ)€€€ra   