Ë
    ýQµiÓ ã                  ó<  — d dl mZ d dlZd dlZd dlZd dlZd dlmZ 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 d d
l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" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZO d dlPmQZQmRZRmSZSmTZTmUZU  ej¬                  dddg«      ZW G d„ d«      ZX G d„ d«      ZY G d„ d«      ZZd!d „Z[ eY«       Z\y)"é    )ÚannotationsN)Úcontextmanager)ÚutilsÚx509)ÚUnsupportedAlgorithmÚ_Reasons)Úaead)Ú_CipherContext©Ú_CMACContext)Ú_EllipticCurvePrivateKeyÚ_EllipticCurvePublicKey)Ú_RSAPrivateKeyÚ_RSAPublicKey)Úopenssl)Úbinding)ÚhashesÚserialization)ÚAsymmetricPadding)ÚdhÚdsaÚecÚed448Úed25519ÚrsaÚx448Úx25519)ÚMGF1ÚOAEPÚPSSÚPKCS1v15)ÚPrivateKeyTypesÚPublicKeyTypes)ÚBlockCipherAlgorithmÚCipherAlgorithm)ÚAESÚAES128ÚAES256ÚARC4ÚSM4ÚCamelliaÚChaCha20Ú	TripleDESÚ_BlowfishInternalÚ_CAST5InternalÚ_IDEAInternalÚ_SEEDInternal)	ÚCBCÚCFBÚCFB8ÚCTRÚECBÚGCMÚOFBÚXTSÚMode)Ússh)ÚPBESÚPKCS12CertificateÚPKCS12KeyAndCertificatesÚPKCS12PrivateKeyTypesÚ_PKCS12CATypesÚ
_MemoryBIOÚbioÚchar_ptrc                  ó   — e Zd Zy)Ú_RC2N)Ú__name__Ú
__module__Ú__qualname__© ó    úN/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/backend.pyrE   rE   \   s   „ ØrJ   rE   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j0                  ej2                  ej4                  fZdZdZddz  ZdZdez  Z dwd„Z!dxd„Z"	 dy	 	 	 	 	 dzd
„Z#dwd„Z$dxd„Z%d{d„Z&d|d„Z'd|d„Z(d}d„Z)	 	 	 	 d}d„Z*d~d„Z+d}d„Z,dd„Z-dwd„Z.dwd„Z/	 	 	 	 	 	 d€d„Z0	 	 	 	 	 	 d€d„Z1d}d„Z2d�d„Z3d{d„Z4d‚d„Z5	 	 	 	 	 	 dƒd„Z6	 	 	 	 	 	 d„d„Z7	 	 	 	 	 	 d…d„Z8	 	 	 	 d†d „Z9d!„ Z:d"„ Z;d‡d#„Z<d$„ Z=dˆd%„Z>	 	 	 	 d‰d&„Z?dŠd'„Z@d}d(„ZAd‹d)„ZBd‹d*„ZCdŒd+„ZD	 	 	 	 d�d,„ZE	 	 	 	 dŽd-„ZF	 	 	 	 d�d.„ZG	 	 	 	 d�d/„ZH	 	 	 	 d‘d0„ZId~d1„ZJd}d2„ZKd~d3„ZLd’d4„ZM	 	 	 	 	 	 	 	 d“d5„ZNd”d6„ZOd•d7„ZP	 	 	 	 	 	 	 	 d“d8„ZQd9„ ZRd”d:„ZSd•d;„ZTd–d<„ZUd—d=„ZVd˜d>„ZW	 	 d™d?„ZXdšd@„ZYd›dA„ZZ	 	 	 	 	 	 dœdB„Z[	 	 	 	 d�dC„Z\	 	 	 	 dždD„Z]	 	 	 	 dŸdE„Z^	 	 	 	 	 	 d dF„Z_	 	 	 	 	 	 d¡dG„Z`d¢dH„Zad£dI„Zb	 	 	 	 	 	 d¤dJ„ZcdK„ Zdd¥dL„ZeefdM„ «       Zg	 	 	 	 	 	 d¦dN„Zh	 	 	 	 	 	 	 	 d§dO„Zi	 	 dˆdP„ZjdˆdQ„Zk	 	 	 	 	 	 d¨dR„Zld~dS„Zm	 	 	 	 	 	 d©dT„Zn	 	 	 	 dªdU„Zo	 	 	 	 	 	 d«dV„Zp	 	 	 	 d¬dW„Zq	 	 	 	 d­dX„Zr	 	 	 	 d®dY„Zs	 dy	 	 	 	 	 	 	 d¯dZ„Ztd~d[„Zud°d\„Zv	 	 	 	 d±d]„Zwd²d^„Zxd~d_„Zyd³d`„Zzd´da„Z{dµdb„Z|d~dc„Z}d~dd„Z~	 	 	 	 d¶de„Z	 	 	 	 d·df„Z€d¸dg„Z�d~dh„Z‚d¹di„Zƒdºdj„Z„d»dk„Z…d~dl„Z†d¼dm„Z‡eˆjÌ                  dn„ «       Z‰	 	 	 	 	 	 d½do„ZŠ	 	 	 	 	 	 d¾dp„Z‹	 	 	 	 	 	 	 	 	 	 	 	 d¿dq„ZŒd~dr„Z�d~ds„ZŽ	 	 	 	 dÀdt„Z�	 	 	 	 dÀdu„Z�dÁdv„Z‘y	)ÂÚBackendz)
    OpenSSL API binding interfaces.
    r   >   ó   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
                  | _        t        j                  «       | _	        i | _
        | j                  «        | j                  j                  g| _        | j                  j                  r0| j                  j                  | j                  j                   «       y y ©N)r   ÚBindingÚ_bindingÚffiÚ_ffiÚlibÚ_libÚrust_opensslÚis_fips_enabledÚ_fips_enabledÚ_cipher_registryÚ_register_default_ciphersÚEVP_PKEY_DHÚ	_dh_typesÚCryptography_HAS_EVP_PKEY_DHXÚappendÚEVP_PKEY_DHX©Úselfs    rK   Ú__init__zBackend.__init__’   s    € ÜŸ™Ó)ˆŒØ—M‘M×%Ñ%ˆŒ	Ø—M‘M×%Ñ%ˆŒ	Ü)×9Ñ9Ó;ˆÔð
 ð 	Ôð 	×&Ñ&Ô(ØŸ)™)×/Ñ/Ð0ˆŒØ�9‰9×2Ò2Ø�N‰N×!Ñ! $§)¡)×"8Ñ"8Õ9ð 3rJ   c                ó€   — dj                  | j                  «       | j                  | j                  j                  «      S )Nz3<OpenSSLBackend(version: {}, FIPS: {}, Legacy: {})>)ÚformatÚopenssl_version_textr`   rY   Ú_legacy_provider_loadedrh   s    rK   Ú__repr__zBackend.__repr__¡   s7   € ØD×KÑKØ×%Ñ%Ó'Ø×ÑØ�M‰M×1Ñ1ó
ð 	
rJ   Nc                óF   — t        j                  | j                  ||¬«      S )N)Úerrors)r   Ú_openssl_assertr]   )ri   Úokrq   s      rK   Úopenssl_assertzBackend.openssl_assert¨   s   € ô
 ×&Ñ& t§y¡y°"¸VÔDÐDrJ   c                ó–   — | j                   j                  «        t        j                  «       sJ ‚t        j                  «       | _        y rW   )rY   Ú_enable_fipsr^   r_   r`   rh   s    rK   rv   zBackend._enable_fips¯   s7   € ð 	�‰×"Ñ"Ô$Ü×+Ñ+Ô-Ð-Ð-Ü)×9Ñ9Ó;ˆÕrJ   c                ó°   — | j                   j                  | j                  j                  | j                  j                  «      «      j                  d«      S )zÀ
        Friendly string name of the loaded OpenSSL library. This is not
        necessarily the same version as it was compiled against.

        Example: OpenSSL 1.1.1d  10 Sep 2019
        Úascii)r[   Ústringr]   ÚOpenSSL_versionÚOPENSSL_VERSIONÚdecoderh   s    rK   rm   zBackend.openssl_version_text¶   s@   € ð �y‰y×ÑØ�I‰I×%Ñ% d§i¡i×&?Ñ&?Ó@ó
ç
‰&�‹/ð	rJ   c                ó6   — | j                   j                  «       S rW   )r]   ÚOpenSSL_version_numrh   s    rK   Úopenssl_version_numberzBackend.openssl_version_numberÁ   s   € Ø�y‰y×,Ñ,Ó.Ð.rJ   c                ó   — |j                   dk(  s|j                   dk(  r9dj                  |j                   |j                  dz  «      j                  d«      }n|j                   j                  d«      }| j                  j                  |«      }|S )NÚblake2bÚblake2sz{}{}é   rx   )Únamerl   Údigest_sizeÚencoder]   ÚEVP_get_digestbyname)ri   Ú	algorithmÚalgÚevp_mds       rK   Ú_evp_md_from_algorithmzBackend._evp_md_from_algorithmÄ   sv   € Ø�>‰>˜YÒ&¨)¯.©.¸IÒ*EØ—-‘-Ø—‘ 	× 5Ñ 5¸Ñ 9óç‰f�W‹oñ ð —.‘.×'Ñ'¨Ó0ˆCà—‘×/Ñ/°Ó4ˆØˆrJ   c                óx   — | j                  |«      }| j                  || j                  j                  k7  «       |S rW   )r‹   rt   r[   ÚNULL©ri   rˆ   rŠ   s      rK   Ú_evp_md_non_null_from_algorithmz'Backend._evp_md_non_null_from_algorithmÏ   s2   € Ø×,Ñ,¨YÓ7ˆØ×Ñ˜F d§i¡i§n¡nÑ4Ô5ØˆrJ   c                óœ   — | j                   rt        || j                  «      sy| j                  |«      }|| j                  j
                  k7  S ©NF)r`   Ú
isinstanceÚ_fips_hashesr‹   r[   r�   rŽ   s      rK   Úhash_supportedzBackend.hash_supportedÔ   s@   € Ø×Ò¤j°¸D×<MÑ<MÔ&NØà×,Ñ,¨YÓ7ˆØ˜Ÿ™Ÿ™Ñ'Ð'rJ   c                ór   — | j                   rt        |t        j                  «      ry| j	                  |«      S r‘   ©r`   r’   r   ÚSHA1r”   ©ri   rˆ   s     rK   Úsignature_hash_supportedz Backend.signature_hash_supportedÛ   s.   € ð
 ×Ò¤*¨Y¼¿¹Ô"DØØ×"Ñ" 9Ó-Ð-rJ   c                óN   — | j                   ry| j                  j                  dk(  S ©NFrU   )r`   r]   ÚCryptography_HAS_SCRYPTrh   s    rK   Úscrypt_supportedzBackend.scrypt_supportedä   s#   € Ø×ÒØà—9‘9×4Ñ4¸Ñ9Ð9rJ   c                ór   — | j                   rt        |t        j                  «      ry| j	                  |«      S )NTr–   r˜   s     rK   Úhmac_supportedzBackend.hmac_supportedê   s,   € à×Ò¤*¨Y¼¿¹Ô"DØà×"Ñ" 9Ó-Ð-rJ   c                óô   — | j                   rt        || j                  «      sy	 | j                  t	        |«      t	        |«      f   } || ||«      }| j                  j                  |k7  S # t
        $ r Y yw xY wr‘   )r`   r’   Ú_fips_ciphersra   ÚtypeÚKeyErrorr[   r�   )ri   ÚcipherÚmodeÚadapterÚ
evp_ciphers        rK   Úcipher_supportedzBackend.cipher_supportedñ   sy   € Ø×Òô ˜f d×&8Ñ&8Ô9Øð	Ø×+Ñ+¬D°«L¼$¸t»*Ð,DÑEˆGñ ˜T 6¨4Ó0ˆ
Ø�y‰y�~‰~ Ñ+Ð+øô ò 	Ùð	ús   ¥#A+ Á+	A7Á6A7c                ó|   — ||f| j                   v rt        dj                  ||«      «      ‚|| j                   ||f<   y )Nz"Duplicate registration for: {} {}.)ra   Ú
ValueErrorrl   )ri   Ú
cipher_clsÚmode_clsr¦   s       rK   Úregister_cipher_adapterzBackend.register_cipher_adapterÿ   sL   € Ø˜Ð! T×%:Ñ%:Ñ:ÜØ4×;Ñ;Ø óóð ð
 7>ˆ×Ñ˜j¨(Ð2Ò3rJ   c           	     ó¦  — t         t        t        fD ]H  }t        t        t
        t        t        t        t        fD ]  }| j                  ||t        d«      «       Œ  ŒJ t        t        t
        t        t        fD ]"  }| j                  t        |t        d«      «       Œ$ t        t        t        t        fD ]"  }| j                  t        |t        d«      «       Œ$ | j                  t        t
        t        d«      «       | j                  t        t        d «      t        d«      «       | j                  t         t         t"        «       t
        t        t        t        t        fD ]"  }| j                  t$        |t        d«      «       Œ$ | j&                  j(                  s| j*                  j,                  �s!t        t        t        t
        fD ]"  }| j                  t.        |t        d«      «       Œ$ t        t        t        t
        fD ]"  }| j                  t0        |t        d«      «       Œ$ t3        j4                  t6        t8        gt        t        t        t
        g«      D ]!  \  }}| j                  ||t        d«      «       Œ# | j                  t:        t        d «      t        d	«      «       | j                  t<        t        d «      t        d
«      «       y y )Nz+{cipher.name}-{cipher.key_size}-{mode.name}zdes-ede3-{mode.name}zdes-ede3Úchacha20zsm4-{mode.name}zbf-{mode.name}zseed-{mode.name}z{cipher.name}-{mode.name}Úrc4Úrc2)r&   r'   r(   r2   r5   r6   r8   r3   r4   r7   r­   ÚGetCipherByNamer+   r-   r,   r¢   r9   Ú_get_xts_cipherr*   rY   rn   r]   Ú#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERr.   r1   Ú	itertoolsÚproductr/   r0   r)   rE   )ri   r«   r¬   s      rK   rb   z!Backend._register_default_ciphers  sj  € Ü¤¬Ð/ò 	ˆJÜ ¤#¤s¬C´´d¼CÐ@ò �Ø×,Ñ,ØØÜ#ØEóõñð	ô œc¤3¬¬SÐ1ò 	ˆHØ×(Ñ(ÜØÜÐ MÓNõð	ô œc¤4¬Ð-ò 	ˆHØ×(Ñ(Ü˜8¤_Ð5KÓ%Lõð	ð 	×$Ñ$Ü”sœO¨JÓ7ô	
ð 	×$Ñ$Ü”d˜4“j¤/°*Ó"=ô	
ð 	×$Ñ$¤S¬#¬Ô?Üœc¤3¬¬SÐ1ò 	ˆHØ×(Ñ(Ü�XœÐ/@ÓAõð	ð �M‰M×1Ò1Ø—9‘9×@Ó@ä ¤#¤s¬CÐ0ò �Ø×,Ñ,Ü%ØÜ#Ð$4Ó5õðô !¤#¤s¬CÐ0ò �Ø×,Ñ,Ü!ØÜ#Ð$6Ó7õðô )2×(9Ñ(9Ü¤Ð/Ü”cœ3¤Ð$ó)ò Ñ$�
˜Hð ×,Ñ,ØØÜ#Ð$?Ó@õð	ð ×(Ñ(Ü”d˜4“j¤/°%Ó"8ôð ×(Ñ(Ü”d˜4“j¤/°%Ó"8õð7 ArJ   c                ó:   — t        | ||t         j                  «      S rW   )r
   Ú_ENCRYPT©ri   r¤   r¥   s      rK   Úcreate_symmetric_encryption_ctxz'Backend.create_symmetric_encryption_ctxL  ó   € ô ˜d F¨D´.×2IÑ2IÓJÐJrJ   c                ó:   — t        | ||t         j                  «      S rW   )r
   Ú_DECRYPTr¹   s      rK   Úcreate_symmetric_decryption_ctxz'Backend.create_symmetric_decryption_ctxQ  r»   rJ   c                ó$   — | j                  |«      S rW   )rŸ   r˜   s     rK   Úpbkdf2_hmac_supportedzBackend.pbkdf2_hmac_supportedV  s   € Ø×"Ñ" 9Ó-Ð-rJ   c                ó*   — t        j                  «       S rW   )r^   Úcapture_error_stackrh   s    rK   Ú_consume_errorszBackend._consume_errorsY  s   € Ü×/Ñ/Ó1Ð1rJ   c                óÄ  — || j                   j                  k7  sJ ‚| j                  | j                  j	                  |«       «       | j                  j                  |«      }| j                   j                  d|«      }| j                  j                  ||«      }| j                  |dk\  «       t        j                  | j                   j                  |«      d | d«      }|S )Nzunsigned char[]r   Úbig)r[   r�   rt   r]   ÚBN_is_negativeÚBN_num_bytesÚnewÚ	BN_bn2binÚintÚ
from_bytesÚbuffer)ri   ÚbnÚbn_num_bytesÚbin_ptrÚbin_lenÚvals         rK   Ú
_bn_to_intzBackend._bn_to_int\  s´   € Ø�T—Y‘Y—^‘^Ò#Ð#Ð#Ø×Ñ §	¡	× 8Ñ 8¸Ó <Ð<Ô=à—y‘y×-Ñ-¨bÓ1ˆØ—)‘)—-‘-Ð 1°<Ó@ˆØ—)‘)×%Ñ% b¨'Ó2ˆà×Ñ˜G q™LÔ)Ü�n‰n˜TŸY™Y×-Ñ-¨gÓ6°x¸Ð@À%ÓHˆØˆ
rJ   c                ó(  — |j                  t        |j                  «       dz  dz   «      d«      }| j                  j	                  |t        |«      | j                  j                  «      }| j                  || j                  j                  k7  «       |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.
        g       @rU   rÅ   )	Úto_bytesrÊ   Ú
bit_lengthr]   Ú	BN_bin2bnÚlenr[   r�   rt   )ri   ÚnumÚbinaryÚbn_ptrs       rK   Ú
_int_to_bnzBackend._int_to_bnh  sn   € ð —‘œc #§.¡.Ó"2°SÑ"8¸1Ñ"<Ó=¸uÓEˆØ—‘×$Ñ$ V¬S°«[¸$¿)¹)¿.¹.ÓIˆØ×Ñ˜F d§i¡i§n¡nÑ4Ô5ØˆrJ   c                ó`  — t        j                  ||«       | j                  j                  «       }| j	                  || j
                  j                  k7  «       | j
                  j                  || j                  j                  «      }| j                  |«      }| j
                  j                  || j                  j                  «      }| j                  j                  |||| j
                  j                  «      }| j	                  |dk(  «       | j                  |«      }t        | ||d¬«      S )NrU   T©Úunsafe_skip_rsa_key_validation)r   Ú_verify_rsa_parametersr]   ÚRSA_newrt   r[   r�   ÚgcÚRSA_freerÛ   ÚBN_freeÚRSA_generate_key_exÚ_rsa_cdata_to_evp_pkeyr   )ri   Úpublic_exponentÚkey_sizeÚ	rsa_cdatarÍ   ÚresÚevp_pkeys          rK   Úgenerate_rsa_private_keyz Backend.generate_rsa_private_keyt  sì   € ô 	×"Ñ" ?°HÔ=à—I‘I×%Ñ%Ó'ˆ	Ø×Ñ˜I¨¯©¯©Ñ7Ô8Ø—I‘I—L‘L ¨D¯I©I×,>Ñ,>Ó?ˆ	à�_‰_˜_Ó-ˆØ�Y‰Y�\‰\˜"˜dŸi™i×/Ñ/Ó0ˆà�i‰i×+Ñ+Ø�x  T§Y¡Y§^¡^ó
ˆð 	×Ñ˜C 1™HÔ%Ø×.Ñ.¨yÓ9ˆô Ø�)˜XÀdô
ð 	
rJ   c                ó.   — |dk\  xr |dz  dk7  xr |dk\  S )Né   rU   r   i   rI   )ri   ræ   rç   s      rK   Ú!generate_rsa_parameters_supportedz)Backend.generate_rsa_parameters_supported‹  s/   € ð ˜qÑ ò  Ø !Ñ# qÑ(ò à˜C‘ð	
rJ   c           
     ó(  — t        j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  j                  |j                  j                  «       | j                  j                  «       }| j                  || j                  j                  k7  «       | j                  j!                  || j                  j"                  «      }| j%                  |j                  «      }| j%                  |j                  «      }| j%                  |j                  «      }| j%                  |j
                  «      }| j%                  |j                  «      }| j%                  |j                  «      }	| j%                  |j                  j                  «      }
| j%                  |j                  j                  «      }| j                  j'                  |||«      }| j                  |dk(  «       | j                  j)                  |||
|«      }| j                  |dk(  «       | j                  j+                  ||||	«      }| j                  |dk(  «       | j-                  |«      }t/        | |||¬«      S )NrU   rÝ   )r   Ú_check_private_key_componentsÚpÚqÚdÚdmp1Údmq1ÚiqmpÚpublic_numbersÚeÚnr]   rà   rt   r[   r�   rá   râ   rÛ   ÚRSA_set0_factorsÚRSA_set0_keyÚRSA_set0_crt_paramsrå   r   )ri   ÚnumbersrÞ   rè   rñ   rò   ró   rô   rõ   rö   rø   rù   ré   rê   s                 rK   Úload_rsa_private_numbersz Backend.load_rsa_private_numbers”  sò  € ô
 	×)Ñ)Ø�I‰IØ�I‰IØ�I‰IØ�L‰LØ�L‰LØ�L‰LØ×"Ñ"×$Ñ$Ø×"Ñ"×$Ñ$ô		
ð —I‘I×%Ñ%Ó'ˆ	Ø×Ñ˜I¨¯©¯©Ñ7Ô8Ø—I‘I—L‘L ¨D¯I©I×,>Ñ,>Ó?ˆ	Ø�O‰O˜GŸI™IÓ&ˆØ�O‰O˜GŸI™IÓ&ˆØ�O‰O˜GŸI™IÓ&ˆØ�‰˜wŸ|™|Ó,ˆØ�‰˜wŸ|™|Ó,ˆØ�‰˜wŸ|™|Ó,ˆØ�O‰O˜G×2Ñ2×4Ñ4Ó5ˆØ�O‰O˜G×2Ñ2×4Ñ4Ó5ˆØ�i‰i×(Ñ(¨°A°qÓ9ˆØ×Ñ˜C 1™HÔ%Ø�i‰i×$Ñ$ Y°°1°aÓ8ˆØ×Ñ˜C 1™HÔ%Ø�i‰i×+Ñ+¨I°t¸TÀ4ÓHˆØ×Ñ˜C 1™HÔ%Ø×.Ñ.¨yÓ9ˆäØØØØ+Iô	
ð 	
rJ   c                ón  — t        j                  |j                  |j                  «       | j                  j                  «       }| j                  || j                  j                  k7  «       | j                  j                  || j                  j                  «      }| j                  |j                  «      }| j                  |j                  «      }| j                  j                  |||| j                  j                  «      }| j                  |dk(  «       | j                  |«      }t        | ||«      S ©NrU   )r   Ú_check_public_key_componentsrø   rù   r]   rà   rt   r[   r�   rá   râ   rÛ   rû   rå   r   )ri   rý   rè   rø   rù   ré   rê   s          rK   Úload_rsa_public_numberszBackend.load_rsa_public_numbers½  sÞ   € ô 	×(Ñ(¨¯©°G·I±IÔ>Ø—I‘I×%Ñ%Ó'ˆ	Ø×Ñ˜I¨¯©¯©Ñ7Ô8Ø—I‘I—L‘L ¨D¯I©I×,>Ñ,>Ó?ˆ	Ø�O‰O˜GŸI™IÓ&ˆØ�O‰O˜GŸI™IÓ&ˆØ�i‰i×$Ñ$ Y°°1°d·i±i·n±nÓEˆØ×Ñ˜C 1™HÔ%Ø×.Ñ.¨yÓ9ˆä˜T 9¨hÓ7Ð7rJ   c                óê   — | j                   j                  «       }| j                  || j                  j                  k7  «       | j                  j                  || j                   j                  «      }|S rW   )r]   ÚEVP_PKEY_newrt   r[   r�   rá   ÚEVP_PKEY_free)ri   rê   s     rK   Ú_create_evp_pkey_gczBackend._create_evp_pkey_gcÌ  sR   € Ø—9‘9×)Ñ)Ó+ˆØ×Ñ˜H¨¯	©	¯©Ñ6Ô7Ø—9‘9—<‘< ¨$¯)©)×*AÑ*AÓBˆØˆrJ   c                ó†   — | j                  «       }| j                  j                  ||«      }| j                  |dk(  «       |S r   )r  r]   ÚEVP_PKEY_set1_RSArt   )ri   rè   rê   ré   s       rK   rå   zBackend._rsa_cdata_to_evp_pkeyÒ  s=   € Ø×+Ñ+Ó-ˆØ�i‰i×)Ñ)¨(°IÓ>ˆØ×Ñ˜C 1™HÔ%ØˆrJ   c                óF  — | j                   j                  |«      }| j                  j                  |t	        |«      «      }| j                  || j                   j                  k7  «       t        | j                   j                  || j                  j                  «      |«      S )z®
        Return a _MemoryBIO namedtuple of (BIO, char*).

        The char* is the storage for the BIO and it must stay alive until the
        BIO is finished with.
        )
r[   Úfrom_bufferr]   ÚBIO_new_mem_bufr×   rt   r�   rA   rá   ÚBIO_free)ri   ÚdataÚdata_ptrrB   s       rK   Ú_bytes_to_biozBackend._bytes_to_bioØ  ss   € ð —9‘9×(Ñ(¨Ó.ˆØ�i‰i×'Ñ'¨´#°d³)Ó<ˆØ×Ñ˜C 4§9¡9§>¡>Ñ1Ô2ä˜$Ÿ)™)Ÿ,™, s¨D¯I©I×,>Ñ,>Ó?ÀÓJÐJrJ   c                óp  — | j                   j                  «       }| j                  || j                  j                  k7  «       | j                   j                  |«      }| j                  || j                  j                  k7  «       | j                  j                  || j                   j                  «      }|S )z.
        Creates an empty memory BIO.
        )r]   Ú	BIO_s_memrt   r[   r�   ÚBIO_newrá   r  )ri   Ú
bio_methodrB   s      rK   Ú_create_mem_bio_gczBackend._create_mem_bio_gcå  sƒ   € ð —Y‘Y×(Ñ(Ó*ˆ
Ø×Ñ˜J¨$¯)©)¯.©.Ñ8Ô9Ø�i‰i×Ñ 
Ó+ˆØ×Ñ˜C 4§9¡9§>¡>Ñ1Ô2Ø�i‰i�l‰l˜3 §	¡	× 2Ñ 2Ó3ˆØˆ
rJ   c                ó6  — | j                   j                  d«      }| j                  j                  ||«      }| j	                  |dkD  «       | j	                  |d   | j                   j
                  k7  «       | j                   j                  |d   |«      dd }|S )zE
        Reads a memory BIO. This only works on memory BIOs.
        zchar **r   N)r[   rÈ   r]   ÚBIO_get_mem_datart   r�   rÌ   )ri   rB   ÚbufÚbuf_lenÚbio_datas        rK   Ú_read_mem_biozBackend._read_mem_bioð  s�   € ð �i‰i�m‰m˜IÓ&ˆØ—)‘)×,Ñ,¨S°#Ó6ˆØ×Ñ˜G a™KÔ(Ø×Ñ˜C ™F d§i¡i§n¡nÑ4Ô5Ø—9‘9×#Ñ# C¨¡F¨GÓ4±QÐ7ˆØˆrJ   c                óP	  — | j                   j                  |«      }|| j                   j                  k(  r‚| j                   j                  |«      }| j	                  || j
                  j                  k7  «       | j
                  j                  || j                   j                  «      }t        | |||¬«      S || j                   j                  k(  �r| j                   j                  �s| j                   j                  sì| j                   j                  sÖ| j                   j                  |«      }| j	                  || j
                  j                  k7  «       | j
                  j                  || j                   j                  «      }| j                  «       }| j                   j                  ||«      }| j	                  |dk(  «       | j!                  | j#                  |«      d|¬«      S || j                   j$                  k(  rBt&        j(                  j+                  t-        | j
                  j/                  d|«      «      «      S || j                   j0                  k(  r€| j                   j3                  |«      }| j	                  || j
                  j                  k7  «       | j
                  j                  || j                   j4                  «      }t7        | ||«      S || j8                  v rBt&        j:                  j+                  t-        | j
                  j/                  d|«      «      «      S |t=        | j                   dd«      k(  rBt&        j>                  j+                  t-        | j
                  j/                  d|«      «      «      S |t=        | j                   dd«      k(  rBt&        j@                  j+                  t-        | j
                  j/                  d|«      «      «      S || j                   jB                  k(  rBt&        jD                  j+                  t-        | j
                  j/                  d|«      «      «      S |t=        | j                   dd«      k(  rBt&        jF                  j+                  t-        | j
                  j/                  d|«      «      «      S tI        d	«      ‚)
zd
        Return the appropriate type of PrivateKey given an evp_pkey cdata
        pointer.
        rÝ   rU   N)ÚpasswordrÞ   Ú	uintptr_tÚEVP_PKEY_ED25519ÚEVP_PKEY_X448ÚEVP_PKEY_ED448úUnsupported key type.)%r]   ÚEVP_PKEY_idÚEVP_PKEY_RSAÚEVP_PKEY_get1_RSArt   r[   r�   rá   râ   r   ÚEVP_PKEY_RSA_PSSÚCRYPTOGRAPHY_IS_LIBRESSLÚCRYPTOGRAPHY_IS_BORINGSSLÚ#CRYPTOGRAPHY_OPENSSL_LESS_THAN_111Er  Úi2d_RSAPrivateKey_bioÚload_der_private_keyr  ÚEVP_PKEY_DSAr^   r   Úprivate_key_from_ptrrÊ   ÚcastÚEVP_PKEY_ECÚEVP_PKEY_get1_EC_KEYÚEC_KEY_freer   rd   r   Úgetattrr   r   ÚEVP_PKEY_X25519r   r   r   )ri   rê   rÞ   Úkey_typerè   rB   ré   Úec_cdatas           rK   Ú_evp_pkey_to_private_keyz Backend._evp_pkey_to_private_keyû  s“  € ð —9‘9×(Ñ(¨Ó2ˆà�t—y‘y×-Ñ-Ò-ØŸ	™	×3Ñ3°HÓ=ˆIØ×Ñ 	¨T¯Y©Y¯^©^Ñ ;Ô<ØŸ	™	Ÿ™ Y°·	±	×0BÑ0BÓCˆIÜ!ØØØØ/Mô	ð ð ˜Ÿ	™	×2Ñ2Ó2Ø—I‘I×6Ó6Ø—I‘I×7Ò7Ø—I‘I×AÒAð Ÿ	™	×3Ñ3°HÓ=ˆIØ×Ñ 	¨T¯Y©Y¯^©^Ñ ;Ô<ØŸ	™	Ÿ™ Y°·	±	×0BÑ0BÓCˆIØ×)Ñ)Ó+ˆCØ—)‘)×1Ñ1°#°yÓAˆCØ×Ñ  q¡Ô)Ø×,Ñ,Ø×"Ñ" 3Ó'ØØ/Mð -ó ð ð
 ˜Ÿ™×/Ñ/Ò/Ü×#Ñ#×8Ñ8Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð ˜Ÿ™×.Ñ.Ò.Ø—y‘y×5Ñ5°hÓ?ˆHØ×Ñ ¨D¯I©I¯N©NÑ :Ô;Ø—y‘y—|‘| H¨d¯i©i×.CÑ.CÓDˆHÜ+¨D°(¸HÓEÐEØ˜Ÿ™Ñ'Ü—?‘?×7Ñ7Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð œ §¡Ð,>ÀÓEÒEä×'Ñ'×<Ñ<Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð œ §¡¨O¸TÓBÒBä×$Ñ$×9Ñ9Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð ˜Ÿ™×2Ñ2Ò2Ü×&Ñ&×;Ñ;Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð œ §¡Ð,<¸dÓCÒCä×%Ñ%×:Ñ:Ü�D—I‘I—N‘N ;°Ó9Ó:óð ô 'Ð'>Ó?Ð?rJ   c                ó^	  — | j                   j                  |«      }|| j                   j                  k(  r€| j                   j                  |«      }| j	                  || j
                  j                  k7  «       | j
                  j                  || j                   j                  «      }t        | ||«      S || j                   j                  k(  �r| j                   j                  sÿ| j                   j                  sé| j                   j                  sÓ| j                   j                  |«      }| j	                  || j
                  j                  k7  «       | j
                  j                  || j                   j                  «      }| j                  «       }| j                   j                  ||«      }| j	                  |dk(  «       | j!                  | j#                  |«      «      S || j                   j$                  k(  rBt&        j(                  j+                  t-        | j
                  j/                  d|«      «      «      S || j                   j0                  k(  r�| j                   j3                  |«      }|| j
                  j                  k(  r| j5                  «       }t7        d|«      ‚| j
                  j                  || j                   j8                  «      }t;        | ||«      S || j<                  v rBt&        j>                  j+                  t-        | j
                  j/                  d|«      «      «      S |tA        | j                   dd«      k(  rBt&        jB                  j+                  t-        | j
                  j/                  d|«      «      «      S |tA        | j                   dd«      k(  rBt&        jD                  j+                  t-        | j
                  j/                  d|«      «      «      S || j                   jF                  k(  rBt&        jH                  j+                  t-        | j
                  j/                  d|«      «      «      S |tA        | j                   dd«      k(  rBt&        jJ                  j+                  t-        | j
                  j/                  d|«      «      «      S tM        d«      ‚)	zc
        Return the appropriate type of PublicKey given an evp_pkey cdata
        pointer.
        rU   r  zUnable to load EC keyr  Nr  r   r!  )'r]   r"  r#  r$  rt   r[   r�   rá   râ   r   r%  r&  r'  r(  r  Úi2d_RSAPublicKey_bioÚload_der_public_keyr  r+  r^   r   Úpublic_key_from_ptrrÊ   r-  r.  r/  rÃ   rª   r0  r   rd   r   r1  r   r   r2  r   r   r   )ri   rê   r3  rè   rB   ré   r4  rq   s           rK   Ú_evp_pkey_to_public_keyzBackend._evp_pkey_to_public_keyG  s„  € ð —9‘9×(Ñ(¨Ó2ˆà�t—y‘y×-Ñ-Ò-ØŸ	™	×3Ñ3°HÓ=ˆIØ×Ñ 	¨T¯Y©Y¯^©^Ñ ;Ô<ØŸ	™	Ÿ™ Y°·	±	×0BÑ0BÓCˆIÜ   y°(Ó;Ð;à˜Ÿ	™	×2Ñ2Ó2Ø—I‘I×6Ò6Ø—I‘I×7Ò7Ø—I‘I×AÒAàŸ	™	×3Ñ3°HÓ=ˆIØ×Ñ 	¨T¯Y©Y¯^©^Ñ ;Ô<ØŸ	™	Ÿ™ Y°·	±	×0BÑ0BÓCˆIØ×)Ñ)Ó+ˆCØ—)‘)×0Ñ0°°iÓ@ˆCØ×Ñ  q¡Ô)Ø×+Ñ+¨D×,>Ñ,>¸sÓ,CÓDÐDØ˜Ÿ™×/Ñ/Ò/Ü×#Ñ#×7Ñ7Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð ˜Ÿ™×.Ñ.Ò.Ø—y‘y×5Ñ5°hÓ?ˆHØ˜4Ÿ9™9Ÿ>™>Ò)Ø×-Ñ-Ó/�Ü Ð!8¸&ÓAÐAØ—y‘y—|‘| H¨d¯i©i×.CÑ.CÓDˆHÜ*¨4°¸8ÓDÐDØ˜Ÿ™Ñ'Ü—?‘?×6Ñ6Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð œ §¡Ð,>ÀÓEÒEä×'Ñ'×;Ñ;Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð œ §¡¨O¸TÓBÒBä×$Ñ$×8Ñ8Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð ˜Ÿ™×2Ñ2Ò2Ü×&Ñ&×:Ñ:Ü�D—I‘I—N‘N ;°Ó9Ó:óð ð œ §¡Ð,<¸dÓCÒCä×%Ñ%×9Ñ9Ü�D—I‘I—N‘N ;°Ó9Ó:óð ô 'Ð'>Ó?Ð?rJ   c                óþ   — | j                   rt        |t        j                  «      ryt        |t        j                  t        j                  t        j
                  t        j                  t        j                  f«      S r‘   )r`   r’   r   r—   ÚSHA224ÚSHA256ÚSHA384ÚSHA512r˜   s     rK   Ú_oaep_hash_supportedzBackend._oaep_hash_supported†  sS   € Ø×Ò¤*¨Y¼¿¹Ô"DØäØä—‘Ü—‘Ü—‘Ü—‘Ü—‘ðó	
ð 		
rJ   c                ó  — t        |t        «      ryt        |t        «      rzt        |j                  t        «      r`| j
                  r/t        |j                  j                  t        j                  «      ry| j                  |j                  j                  «      S t        |t        «      r\t        |j                  t        «      rB| j                  |j                  j                  «      xr | j                  |j                  «      S y)NTF)r’   r!   r    Ú_mgfr   r`   Ú
_algorithmr   r—   r”   r   r@  ©ri   Úpaddings     rK   Úrsa_padding_supportedzBackend.rsa_padding_supported•  sÂ   € Ü�gœxÔ(ØÜ˜¤Ô%¬*°W·\±\Ä4Ô*Hð ×!Ò!¤jØ—‘×'Ñ'¬¯©ô'ð à×*Ñ*¨7¯<©<×+BÑ+BÓCÐCÜ˜¤Ô&¬:°g·l±lÄDÔ+IØ×,Ñ,Ø—‘×'Ñ'óò @à×+Ñ+¨G×,>Ñ,>Ó?ð@ð rJ   c                ó^   — | j                   rt        |t        «      ry| j                  |«      S r‘   )r`   r’   r!   rF  rD  s     rK   Úrsa_encryption_supportedz Backend.rsa_encryption_supported¨  s(   € Ø×Ò¤*¨W´hÔ"?Øà×-Ñ-¨gÓ6Ð6rJ   c                ó^   — |dvrt        d«      ‚t        j                  j                  |«      S )N)i   rT   i   i   z0Key size must be 1024, 2048, 3072, or 4096 bits.)rª   r^   r   Úgenerate_parameters)ri   rç   s     rK   Úgenerate_dsa_parameterszBackend.generate_dsa_parameters®  s4   € ØÐ3Ñ3ÜØBóð ô ×Ñ×3Ñ3°HÓ=Ð=rJ   c                ó"   — |j                  «       S rW   ©Úgenerate_private_key©ri   Ú
parameterss     rK   Úgenerate_dsa_private_keyz Backend.generate_dsa_private_key¶  ó   € ð ×.Ñ.Ó0Ð0rJ   c                óF   — | j                  |«      }| j                  |«      S rW   )rK  rQ  )ri   rç   rP  s      rK   Ú'generate_dsa_private_key_and_parametersz/Backend.generate_dsa_private_key_and_parameters»  s%   € ð ×1Ñ1°(Ó;ˆ
Ø×,Ñ,¨ZÓ8Ð8rJ   c                ój   — t        j                  |«       t        j                   j                  |«      S rW   )r   Ú_check_dsa_private_numbersr^   Úfrom_private_numbers©ri   rý   s     rK   Úload_dsa_private_numbersz Backend.load_dsa_private_numbersÁ  s)   € ô 	×&Ñ& wÔ/Ü×Ñ×4Ñ4°WÓ=Ð=rJ   c                ó~   — t        j                  |j                  «       t        j                   j	                  |«      S rW   )r   Ú_check_dsa_parametersÚparameter_numbersr^   Úfrom_public_numbersrX  s     rK   Úload_dsa_public_numberszBackend.load_dsa_public_numbersÇ  s/   € ô 	×!Ñ! '×";Ñ";Ô<Ü×Ñ×3Ñ3°GÓ<Ð<rJ   c                ój   — t        j                  |«       t        j                   j                  |«      S rW   )r   r[  r^   Úfrom_parameter_numbersrX  s     rK   Úload_dsa_parameter_numbersz"Backend.load_dsa_parameter_numbersÍ  s)   € ô 	×!Ñ! 'Ô*Ü×Ñ×6Ñ6°wÓ?Ð?rJ   c                óN   — | j                   j                   xr | j                   S rW   )r]   r'  r`   rh   s    rK   Údsa_supportedzBackend.dsa_supportedÓ  s%   € à—	‘	×3Ñ3Ð3ÒN¸D×<NÑ<NÐ8Nð	
rJ   c                óF   — | j                  «       sy| j                  |«      S r‘   )rc  r™   r˜   s     rK   Údsa_hash_supportedzBackend.dsa_hash_supportedØ  s"   € Ø×!Ñ!Ô#ØØ×,Ñ,¨YÓ7Ð7rJ   c                óR   — | j                  |t        d|j                  z  «      «      S )Nó    )r¨   r2   Ú
block_sizer˜   s     rK   Úcmac_algorithm_supportedz Backend.cmac_algorithm_supportedÝ  s*   € Ø×$Ñ$Ø”s˜7 Y×%9Ñ%9Ñ9Ó:ó
ð 	
rJ   c                ó   — t        | |«      S rW   r   r˜   s     rK   Úcreate_cmac_ctxzBackend.create_cmac_ctxâ  s   € Ü˜D )Ó,Ð,rJ   c                óR   — | j                  | j                  j                  |||«      S rW   )Ú	_load_keyr]   ÚPEM_read_bio_PrivateKey)ri   r  r  rÞ   s       rK   Úload_pem_private_keyzBackend.load_pem_private_keyå  s+   € ð �~‰~Ø�I‰I×-Ñ-ØØØ*ó	
ð 	
rJ   c                ó8  — | j                  |«      }| j                  j                  d«      }| j                  j	                  |j
                  | j                  j                  | j                  j                  | j                  j                  d«      |«      }|| j                  j                  k7  rA| j                  j                  || j                  j                  «      }| j                  |«      S | j                  «        | j                  j                  |j
                  «      }| j                  |dk(  «       | j                  j                  |j
                  | j                  j                  | j                  j                  | j                  j                  d«      |«      }|| j                  j                  k7  rN| j                  j                  || j                  j                   «      }| j#                  |«      }t%        | ||«      S | j'                  «        y )NúCRYPTOGRAPHY_PASSWORD_DATA *ÚCryptography_pem_password_cbrU   )r  r[   rÈ   r]   ÚPEM_read_bio_PUBKEYrB   r�   Ú	addressofÚ_original_librá   r  r:  rÃ   Ú	BIO_resetrt   ÚPEM_read_bio_RSAPublicKeyrâ   rå   r   Ú_handle_key_loading_error)ri   r  Úmem_bioÚuserdatarê   ré   rè   s          rK   Úload_pem_public_keyzBackend.load_pem_public_keyò  s•  € Ø×$Ñ$ TÓ*ˆð —9‘9—=‘=Ð!?Ó@ˆØ—9‘9×0Ñ0Ø�K‰KØ�I‰I�N‰NØ�I‰I×ÑØ—	‘	×'Ñ'Ð)Góð ó
ˆð �t—y‘y—~‘~Ò%Ø—y‘y—|‘| H¨d¯i©i×.EÑ.EÓFˆHØ×/Ñ/°Ó9Ð9ð
 × Ñ Ô"Ø—)‘)×%Ñ% g§k¡kÓ2ˆCØ×Ñ  q¡Ô)ØŸ	™	×;Ñ;Ø—‘Ø—	‘	—‘Ø—	‘	×#Ñ#Ø—I‘I×+Ñ+Ð-Kóð óˆIð ˜DŸI™IŸN™NÒ*Ø ŸI™IŸL™L¨°D·I±I×4FÑ4FÓG�	Ø×6Ñ6°yÓA�Ü$ T¨9°hÓ?Ð?à×.Ñ.Õ0rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   Úfrom_pem_parameters©ri   r  s     rK   Úload_pem_parameterszBackend.load_pem_parameters  ó   € Ü�‰×2Ñ2°4Ó8Ð8rJ   c                óÀ   — | j                  |«      }| j                  ||«      }|r| j                  ||«      S | j                  | j                  j
                  |||«      S rW   )r  Ú"_evp_pkey_from_der_traditional_keyr5  rm  r]   Úd2i_PKCS8PrivateKey_bio)ri   r  r  rÞ   r  Úkeys         rK   r*  zBackend.load_der_private_key  sk   € ð ×%Ñ% dÓ+ˆØ×5Ñ5°hÀÓIˆÙØ×0Ñ0ØÐ3óð ð —>‘>Ø—	‘	×1Ñ1ØØØ.ó	ð rJ   c                óH  — | j                   j                  |j                  | j                  j                  «      }|| j                  j                  k7  r?| j                  j                  || j                   j                  «      }|�t        d«      ‚|S | j                  «        y )Nú4Password was given but private key is not encrypted.)	r]   Úd2i_PrivateKey_biorB   r[   r�   rá   r  Ú	TypeErrorrÃ   )ri   r  r  r„  s       rK   r‚  z*Backend._evp_pkey_from_der_traditional_key9  s~   € Ø�i‰i×*Ñ*¨8¯<©<¸¿¹¿¹ÓHˆØ�$—)‘)—.‘.Ò Ø—)‘)—,‘,˜s D§I¡I×$;Ñ$;Ó<ˆCØÐ#ÜØJóð ð ˆJà× Ñ Ô"ØrJ   c                óB  — | j                  |«      }| j                  j                  |j                  | j                  j
                  «      }|| j                  j
                  k7  rA| j                  j                  || j                  j                  «      }| j                  |«      S | j                  «        | j                  j                  |j                  «      }| j                  |dk(  «       | j                  j                  |j                  | j                  j
                  «      }|| j                  j
                  k7  rN| j                  j                  || j                  j                  «      }| j                  |«      }t        | ||«      S | j!                  «        y r   )r  r]   Úd2i_PUBKEY_biorB   r[   r�   rá   r  r:  rÃ   rv  rt   Úd2i_RSAPublicKey_biorâ   rå   r   rx  )ri   r  ry  rê   ré   rè   s         rK   r8  zBackend.load_der_public_keyG  s+  € Ø×$Ñ$ TÓ*ˆØ—9‘9×+Ñ+¨G¯K©K¸¿¹¿¹ÓHˆØ�t—y‘y—~‘~Ò%Ø—y‘y—|‘| H¨d¯i©i×.EÑ.EÓFˆHØ×/Ñ/°Ó9Ð9ð
 × Ñ Ô"Ø—)‘)×%Ñ% g§k¡kÓ2ˆCØ×Ñ  q¡Ô)ØŸ	™	×6Ñ6Ø—‘˜TŸY™YŸ^™^óˆIð ˜DŸI™IŸN™NÒ*Ø ŸI™IŸL™L¨°D·I±I×4FÑ4FÓG�	Ø×6Ñ6°yÓA�Ü$ T¨9°hÓ?Ð?à×.Ñ.Õ0rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   Úfrom_der_parametersr~  s     rK   Úload_der_parameterszBackend.load_der_parameters^  r€  rJ   c                óž  — |j                  t        j                  j                  «      }| j	                  |«      }| j
                  j                  |j                  | j                  j                  «      }| j                  || j                  j                  k7  «       | j                  j                  || j
                  j                  «      }|S rW   )Úpublic_bytesr   ÚEncodingÚDERr  r]   Úd2i_X509_biorB   r[   r�   rt   rá   Ú	X509_free)ri   Úcertr  ry  r   s        rK   Ú
_cert2osslzBackend._cert2ossla  sŽ   € Ø× Ñ ¤×!7Ñ!7×!;Ñ!;Ó<ˆØ×$Ñ$ TÓ*ˆØ�y‰y×%Ñ% g§k¡k°4·9±9·>±>ÓBˆØ×Ñ˜D D§I¡I§N¡NÑ2Ô3Ø�y‰y�|‰|˜D $§)¡)×"5Ñ"5Ó6ˆØˆrJ   c                óÊ   — | j                  «       }| j                  j                  ||«      }| j                  |dk(  «       t	        j
                  | j                  |«      «      S r   )r  r]   Úi2d_X509_biort   r   Úload_der_x509_certificater  )ri   Úx509_ptrrB   ré   s       rK   Ú
_ossl2certzBackend._ossl2certi  sT   € Ø×%Ñ%Ó'ˆØ�i‰i×$Ñ$ S¨(Ó3ˆØ×Ñ˜C 1™HÔ%Ü×-Ñ-¨d×.@Ñ.@ÀÓ.EÓFÐFrJ   c                óò  — |j                  t        j                  j                  t        j                  j
                  t        j                  «       «      }| j                  |«      }| j                  j                  |j                  | j                  j                  «      }| j                  || j                  j                  k7  «       | j                  j                  || j                  j                  «      S rW   )Úprivate_bytesr   r‘  r’  ÚPrivateFormatÚPKCS8ÚNoEncryptionr  r]   r‡  rB   r[   r�   rt   rá   r  )ri   r„  r  ry  rê   s        rK   Ú	_key2osslzBackend._key2osslo  s°   € Ø× Ñ Ü×"Ñ"×&Ñ&Ü×'Ñ'×-Ñ-Ü×&Ñ&Ó(ó
ˆð
 ×$Ñ$ TÓ*ˆà—9‘9×/Ñ/Ø�K‰KØ�I‰I�N‰Nó
ˆð 	×Ñ˜H¨¯	©	¯©Ñ6Ô7Ø�y‰y�|‰|˜H d§i¡i×&=Ñ&=Ó>Ð>rJ   c                ó¶  — | j                  |«      }| j                  j                  d«      }|�Ht        j                  d|«       | j                  j                  |«      }||_        t        |«      |_         ||j                  | j                  j                  | j                  j                  | j                  j                  d«      |«      }|| j                  j                  k(  r�|j                  dk7  rb| j                  «        |j                  dk(  rt!        d«      ‚|j                  dk(  sJ ‚t#        dj%                  |j&                  d	z
  «      «      ‚| j)                  «        | j                  j+                  || j                  j,                  «      }|�|j.                  dk(  rt!        d
«      ‚|�|j.                  d	k(  s|�J ‚| j1                  ||«      S )Nrq  r  rr  r   éÿÿÿÿz3Password was not given but private key is encryptedéþÿÿÿzAPasswords longer than {} bytes are not supported by this backend.rU   r†  )r  r[   rÈ   r   Ú_check_bytesliker
  r  r×   ÚlengthrB   r�   rt  r]   ru  ÚerrorrÃ   rˆ  rª   rl   Úmaxsizerx  rá   r  Úcalledr5  )	ri   Úopenssl_read_funcr  r  rÞ   ry  rz  Úpassword_ptrrê   s	            rK   rm  zBackend._load_key~  s³  € ð ×$Ñ$ TÓ*ˆà—9‘9—=‘=Ð!?Ó@ˆØÐÜ×"Ñ" :¨xÔ8ØŸ9™9×0Ñ0°Ó:ˆLØ ,ˆHÔÜ! (›mˆHŒOá$Ø�K‰KØ�I‰I�N‰NØ�I‰I×ÑØ—	‘	×'Ñ'Ð)Góð ó
ˆð �t—y‘y—~‘~Ò%Ø�~‰~ Ò"Ø×$Ñ$Ô&Ø—>‘> RÒ'Ü#ØMóð ð $Ÿ>™>¨RÒ/Ð/Ð/Ü$ð+ß+1©6°(×2BÑ2BÀQÑ2FÓ+Góð ð
 ×.Ñ.Ô0à—9‘9—<‘< ¨$¯)©)×*AÑ*AÓBˆàÐ H§O¡O°qÒ$8ÜØFóð ð
 Ð  X§_¡_¸Ò%9ØÐð	ð ð ×,Ñ,ØÐ4ó
ð 	
rJ   c                óD  ‡ — ‰ j                  «       }|st        d«      ‚|d   j                  ‰ j                  j                  ‰ j                  j
                  «      s�|d   j                  ‰ j                  j                  ‰ j                  j                  «      sS‰ j                  j                  rH|d   j                  ‰ j                  j                  ‰ j                  j                  «      rt        d«      ‚t        ˆ fd„|D «       «      rt        d«      ‚t        d|«      ‚)Nz|Could not deserialize key data. The data may be in an incorrect format or it may be encrypted with an unsupported algorithm.r   z Bad decrypt. Incorrect password?c              3  ó’   •K  — | ]>  }|j                  ‰j                  j                  ‰j                  j                  «      –— Œ@ y ­wrW   )Ú_lib_reason_matchr]   ÚERR_LIB_EVPÚ'EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM)Ú.0r§  ri   s     €rK   ú	<genexpr>z4Backend._handle_key_loading_error.<locals>.<genexpr>Î  s@   øè ø€ ò 
ð
 ð	 ×#Ñ#Ø—	‘	×%Ñ%Ø—	‘	×AÑA÷ñ
ùs   ƒAAz!Unsupported public key algorithm.zÊCould not deserialize key data. The data may be in an incorrect format, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters).)rÃ   rª   r®  r]   r¯  ÚEVP_R_BAD_DECRYPTÚERR_LIB_PKCS12Ú!PKCS12_R_PKCS12_CIPHERFINAL_ERRORÚCryptography_HAS_PROVIDERSÚERR_LIB_PROVÚPROV_R_BAD_DECRYPTÚany)ri   rq   s   ` rK   rx  z!Backend._handle_key_loading_error²  s  ø€ Ø×%Ñ%Ó'ˆáÜðóð ð �1‰I×'Ñ'Ø—	‘	×%Ñ% t§y¡y×'BÑ'Bôð �a‰y×*Ñ*Ø—	‘	×(Ñ(Ø—	‘	×;Ñ;ôð
 —	‘	×4Ò4Ø˜1‘I×/Ñ/Ø—I‘I×*Ñ*Ø—I‘I×0Ñ0ôô Ð?Ó@Ð@äó 
ð
  ô
ô 
ô Ð@ÓAÐAô ð4ð óð rJ   c                ó‚  — 	 | j                  |«      }| j                  j	                  |«      }|| j
                  j                  k(  r| j                  «        y| j                  || j                  j                  k7  «       | j                  j                  |«       y# t        $ r | j                  j                  }Y Œªw xY w)NFT)
Ú_elliptic_curve_to_nidr   r]   Ú	NID_undefÚEC_GROUP_new_by_curve_namer[   r�   rÃ   rt   ÚEC_GROUP_free)ri   ÚcurveÚ	curve_nidÚgroups       rK   Úelliptic_curve_supportedz Backend.elliptic_curve_supportedà  sž   € ð	,Ø×3Ñ3°EÓ:ˆIð —	‘	×4Ñ4°YÓ?ˆà�D—I‘I—N‘NÒ"Ø× Ñ Ô"Øà×Ñ 	¨T¯Y©Y×-@Ñ-@Ñ @ÔAØ�I‰I×#Ñ# EÔ*Øøô $ò 	,ØŸ	™	×+Ñ+ŠIð	,ús   ‚B ÂB>Â=B>c                óZ   — t        |t        j                  «      sy| j                  |«      S r‘   )r’   r   ÚECDSArÂ  )ri   Úsignature_algorithmr¿  s      rK   Ú,elliptic_curve_signature_algorithm_supportedz4Backend.elliptic_curve_signature_algorithm_supportedð  s'   € ô Ð-¬r¯x©xÔ8Øà×,Ñ,¨UÓ3Ð3rJ   c                ó0  — | j                  |«      r^| j                  |«      }| j                  j                  |«      }| j	                  |dk(  «       | j                  |«      }t        | ||«      S t        d|j                  › d�t        j                  «      ‚)z@
        Generate a new private key on the named curve.
        rU   z Backend object does not support ú.)rÂ  Ú_ec_key_new_by_curver]   ÚEC_KEY_generate_keyrt   Ú_ec_cdata_to_evp_pkeyr   r   r„   r   ÚUNSUPPORTED_ELLIPTIC_CURVE)ri   r¿  r4  ré   rê   s        rK   Ú#generate_elliptic_curve_private_keyz+Backend.generate_elliptic_curve_private_keyû  s�   € ð ×(Ñ(¨Ô/Ø×0Ñ0°Ó7ˆHà—)‘)×/Ñ/°Ó9ˆCØ×Ñ  q¡Ô)à×1Ñ1°(Ó;ˆHä+¨D°(¸HÓEÐEä&Ø2°5·:±:°,¸aÐ@Ü×3Ñ3óð rJ   c           	     ó<  — |j                   }| j                  |j                  «      }| j                  j	                  | j                  |j                  «      | j                  j                  «      }| j                  j                  ||«      }|dk7  r| j                  «        t        d«      ‚| j                  «       5 }| j                  ||j                  |j                  |«       | j                  j!                  |«      }| j#                  || j                  j$                  k7  «       t&        j                  j)                  |«      }| j#                  || j                  j$                  k7  «       | j                  j+                  |«      }	| j#                  |	| j                  j$                  k7  «       | j                  j	                  |	| j                  j,                  «      }	| j                  j/                  ||	|| j                  j$                  | j                  j$                  |«      }| j#                  |dk(  «       | j                  j1                  |||	|«      dk7  rt        d«      ‚	 d d d «       | j3                  |«      }
t5        | ||
«      S # 1 sw Y   Œ'xY w)NrU   úInvalid EC key.r   )r÷   rÉ  r¿  r[   rá   rÛ   Úprivate_valuer]   ÚBN_clear_freeÚEC_KEY_set_private_keyrÃ   rª   Ú_tmp_bn_ctxÚ)_ec_key_set_public_key_affine_coordinatesÚxÚyÚEC_KEY_get0_grouprt   r�   ÚbackendÚEC_KEY_get0_public_keyÚEC_POINT_newÚEC_POINT_freeÚEC_POINT_mulÚEC_POINT_cmprË  r   )ri   rý   Úpublicr4  rÐ  ré   Úbn_ctxrÁ  Ú	set_pointÚcomputed_pointrê   s              rK   Ú#load_elliptic_curve_private_numbersz+Backend.load_elliptic_curve_private_numbers  s#  € ð ×'Ñ'ˆà×,Ñ,¨V¯\©\Ó:ˆàŸ	™	Ÿ™Ø�O‰O˜G×1Ñ1Ó2°D·I±I×4KÑ4Kó
ˆð �i‰i×.Ñ.¨x¸ÓGˆØ�!Š8Ø× Ñ Ô"ÜÐ.Ó/Ð/à×ÑÓð 	4 6Ø×:Ñ:Ø˜&Ÿ(™( F§H¡H¨fôð —I‘I×/Ñ/°Ó9ˆEØ×Ñ ¨¯©¯©Ñ 7Ô8ÜŸ™×;Ñ;¸HÓEˆIØ×Ñ 	¨T¯Y©Y¯^©^Ñ ;Ô<Ø!ŸY™Y×3Ñ3°EÓ:ˆNØ×Ñ °$·)±)·.±.Ñ @ÔAØ!ŸY™YŸ\™\Ø §	¡	× 7Ñ 7óˆNð —)‘)×(Ñ(ØØØØ—	‘	—‘Ø—	‘	—‘ØóˆCð ×Ñ  q¡Ô)à—	‘	×&Ñ&Ø˜9 n°fóð òô
 !Ð!2Ó3Ð3ð÷5	4ðB ×-Ñ-¨hÓ7ˆä'¨¨h¸ÓAÐA÷G	4ð 	4ús   Â=F.JÊJc                ó  — | j                  |j                  «      }| j                  «       5 }| j                  ||j                  |j
                  |«       d d d «       | j                  |«      }t        | ||«      S # 1 sw Y   Œ'xY wrW   )rÉ  r¿  rÓ  rÔ  rÕ  rÖ  rË  r   )ri   rý   r4  rß  rê   s        rK   Ú"load_elliptic_curve_public_numbersz*Backend.load_elliptic_curve_public_numbersE  s{   € ð ×,Ñ,¨W¯]©]Ó;ˆØ×ÑÓð 	 6Ø×:Ñ:Ø˜'Ÿ)™) W§Y¡Y°ô÷	ð ×-Ñ-¨hÓ7ˆä& t¨X°xÓ@Ð@÷	ð 	ús   ¬)A;Á;Bc           	     ó  — | j                  |«      }| j                  j                  |«      }| j                  || j                  j
                  k7  «       | j                  j                  |«      }| j                  || j                  j
                  k7  «       | j                  j                  || j                  j                  «      }| j                  «       5 }| j                  j                  |||t        |«      |«      }|dk7  r| j                  «        t        d«      ‚	 d d d «       | j                  j                  ||«      }| j                  |dk(  «       | j                  |«      }t!        | ||«      S # 1 sw Y   ŒWxY w)NrU   z(Invalid public bytes for the given curve)rÉ  r]   r×  rt   r[   r�   rÚ  rá   rÛ  rÓ  ÚEC_POINT_oct2pointr×   rÃ   rª   ÚEC_KEY_set_public_keyrË  r   )	ri   r¿  Úpoint_bytesr4  rÁ  Úpointrß  ré   rê   s	            rK   Ú load_elliptic_curve_public_bytesz(Backend.load_elliptic_curve_public_bytesQ  sJ  € ð ×,Ñ,¨UÓ3ˆØ—	‘	×+Ñ+¨HÓ5ˆØ×Ñ˜E T§Y¡Y§^¡^Ñ3Ô4Ø—	‘	×&Ñ& uÓ-ˆØ×Ñ˜E T§Y¡Y§^¡^Ñ3Ô4Ø—	‘	—‘˜U D§I¡I×$;Ñ$;Ó<ˆØ×ÑÓð 	M 6Ø—)‘)×.Ñ.Ø�u˜k¬3¨{Ó+;¸VóˆCð �aŠxØ×$Ñ$Ô&Ü Ð!KÓLÐLð ÷		Mð �i‰i×-Ñ-¨h¸Ó>ˆØ×Ñ˜C 1™HÔ%Ø×-Ñ-¨hÓ7ˆÜ& t¨X°xÓ@Ð@÷	Mð 	Mús   ÃA	E8Å8Fc           	     ó~  — | j                  |«      }| j                  j                  |«      }| j                  || j                  j
                  k7  «       | j                  j                  |«      }| j                  || j                  j
                  k7  «       | j                  j                  || j                  j                  «      }| j                  |«      }| j                  j                  || j                  j                  «      }| j                  «       5 }| j                  j                  |||| j                  j
                  | j                  j
                  |«      }| j                  |dk(  «       | j                  j                  |«      }	| j                  j                  |«      }
| j                  j                  |||	|
|«      }|dk7  r| j                  «        t!        d«      ‚	 d d d «       | j                  j#                  ||«      }| j                  |dk(  «       | j                  |«      }| j                  j                  || j                  j                  «      }| j                  j%                  ||«      }| j                  |dk(  «       | j'                  |«      }t)        | ||«      S # 1 sw Y   ŒÈxY w)NrU   z'Unable to derive key from private_value)rÉ  r]   r×  rt   r[   r�   rÚ  rá   rÛ  rÛ   rÑ  rÓ  rÜ  Ú
BN_CTX_getÚEC_POINT_get_affine_coordinatesrÃ   rª   rç  rÒ  rË  r   )ri   rÐ  r¿  r4  rÁ  ré  Úvaluerß  ré   Úbn_xÚbn_yÚprivaterê   s                rK   Ú!derive_elliptic_curve_private_keyz)Backend.derive_elliptic_curve_private_keyg  s2  € ð ×,Ñ,¨UÓ3ˆà—	‘	×+Ñ+¨HÓ5ˆØ×Ñ˜E T§Y¡Y§^¡^Ñ3Ô4à—	‘	×&Ñ& uÓ-ˆØ×Ñ˜E T§Y¡Y§^¡^Ñ3Ô4Ø—	‘	—‘˜U D§I¡I×$;Ñ$;Ó<ˆà—‘ Ó.ˆØ—	‘	—‘˜U D§I¡I×$;Ñ$;Ó<ˆà×ÑÓð 	L 6Ø—)‘)×(Ñ(Ø�u˜e T§Y¡Y§^¡^°T·Y±Y·^±^ÀVóˆCð ×Ñ  q¡Ô)à—9‘9×'Ñ'¨Ó/ˆDØ—9‘9×'Ñ'¨Ó/ˆDà—)‘)×;Ñ;Ø�u˜d D¨&óˆCð �aŠxØ×$Ñ$Ô&Ü Ð!JÓKÐKð ÷	Lð  �i‰i×-Ñ-¨h¸Ó>ˆØ×Ñ˜C 1™HÔ%Ø—/‘/ -Ó0ˆØ—)‘)—,‘,˜w¨¯	©	×(?Ñ(?Ó@ˆØ�i‰i×.Ñ.¨x¸ÓAˆØ×Ñ˜C 1™HÔ%à×-Ñ-¨hÓ7ˆä'¨¨h¸ÓAÐA÷3	Lð 	Lús   ÄCJ3Ê3J<c                óF   — | j                  |«      }| j                  |«      S rW   )r»  Ú_ec_key_new_by_curve_nid)ri   r¿  rÀ  s      rK   rÉ  zBackend._ec_key_new_by_curve‘  s#   € Ø×/Ñ/°Ó6ˆ	Ø×,Ñ,¨YÓ7Ð7rJ   c                óè   — | j                   j                  |«      }| j                  || j                  j                  k7  «       | j                  j                  || j                   j                  «      S rW   )r]   ÚEC_KEY_new_by_curve_namert   r[   r�   rá   r0  )ri   rÀ  r4  s      rK   rô  z Backend._ec_key_new_by_curve_nid•  sP   € Ø—9‘9×5Ñ5°iÓ@ˆØ×Ñ˜H¨¯	©	¯©Ñ6Ô7Ø�y‰y�|‰|˜H d§i¡i×&;Ñ&;Ó<Ð<rJ   c                ó¢   — | j                   rt        || j                  «      sy| j                  |«      xr t        |t        j
                  «      S r‘   )r`   r’   Ú_fips_ecdh_curvesrÂ  r   ÚECDH)ri   rˆ   r¿  s      rK   Ú+elliptic_curve_exchange_algorithm_supportedz3Backend.elliptic_curve_exchange_algorithm_supportedš  sL   € ð ×Ò¤jØ�4×)Ñ)ô'
ð à×,Ñ,¨UÓ3ò 
¼
Ø”r—w‘wó9
ð 	
rJ   c                ó†   — | j                  «       }| j                  j                  ||«      }| j                  |dk(  «       |S r   )r  r]   ÚEVP_PKEY_set1_EC_KEYrt   )ri   r4  rê   ré   s       rK   rË  zBackend._ec_cdata_to_evp_pkey¦  s=   € Ø×+Ñ+Ó-ˆØ�i‰i×,Ñ,¨X°xÓ@ˆØ×Ñ˜C 1™HÔ%ØˆrJ   c                ó.  — dddœ}|j                  |j                  |j                  «      }| j                  j                  |j	                  «       «      }|| j                  j
                  k(  r't        |j                  › d�t        j                  «      ‚|S )z/
        Get the NID for a curve name.
        Ú
prime192v1Ú
prime256v1)Ú	secp192r1Ú	secp256r1z" is not a supported elliptic curve)	Úgetr„   r]   Ú
OBJ_sn2nidr†   r¼  r   r   rÌ  )ri   r¿  Úcurve_aliasesÚ
curve_namerÀ  s        rK   r»  zBackend._elliptic_curve_to_nid¬  s„   € ð
 '3ÀÑNˆà"×&Ñ& u§z¡z°5·:±:Ó>ˆ
à—I‘I×(Ñ(¨×):Ñ):Ó)<Ó=ˆ	Ø˜Ÿ	™	×+Ñ+Ò+Ü&Ø—:‘:�,Ð@ÐAÜ×3Ñ3óð ð ÐrJ   c              #  ó¦  K  — | j                   j                  «       }| j                  || j                  j                  k7  «       | j                  j                  || j                   j                  «      }| j                   j                  |«       	 |–— | j                   j                  |«       y # | j                   j                  |«       w xY w­wrW   )	r]   Ú
BN_CTX_newrt   r[   r�   rá   ÚBN_CTX_freeÚBN_CTX_startÚ
BN_CTX_end)ri   rß  s     rK   rÓ  zBackend._tmp_bn_ctx½  s‘   è ø€ à—‘×%Ñ%Ó'ˆØ×Ñ˜F d§i¡i§n¡nÑ4Ô5Ø—‘—‘˜f d§i¡i×&;Ñ&;Ó<ˆØ�	‰	×Ñ˜vÔ&ð	)ØŠLà�I‰I× Ñ  Õ(øˆD�I‰I× Ñ  Õ(üs   ‚BCÂB1 ÂCÂ1CÃCc                ót  — |dk  s|dk  rt        d«      ‚| j                  j                  | j                  |«      | j                  j
                  «      }| j                  j                  | j                  |«      | j                  j
                  «      }| j                  j                  |«      }| j                  || j                  j                  k7  «       | j                  j                  |«      }| j                  || j                  j                  k7  «       | j                  j                  || j                  j                  «      }| j                  j                  |||||«      }|dk7  r| j                  «        t        d«      ‚| j                  j                  ||«      }| j                  |dk(  «       y)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.rU   rÏ  N)rª   r[   rá   rÛ   r]   rã   r×  rt   r�   rÚ  rÛ  ÚEC_POINT_set_affine_coordinatesrÃ   rç  )ri   r4  rÕ  rÖ  rß  rÁ  ré  ré   s           rK   rÔ  z1Backend._ec_key_set_public_key_affine_coordinatesÈ  sU  € ð ˆqŠ5�A˜’EÜØDóð ð �I‰I�L‰L˜Ÿ™¨Ó+¨T¯Y©Y×->Ñ->Ó?ˆØ�I‰I�L‰L˜Ÿ™¨Ó+¨T¯Y©Y×->Ñ->Ó?ˆØ—	‘	×+Ñ+¨HÓ5ˆØ×Ñ˜E T§Y¡Y§^¡^Ñ3Ô4Ø—	‘	×&Ñ& uÓ-ˆØ×Ñ˜E T§Y¡Y§^¡^Ñ3Ô4Ø—	‘	—‘˜U D§I¡I×$;Ñ$;Ó<ˆØ�i‰i×7Ñ7Ø�5˜!˜Q ó
ˆð �!Š8Ø× Ñ Ô"ÜÐ.Ó/Ð/Ø�i‰i×-Ñ-¨h¸Ó>ˆØ×Ñ˜C 1™HÕ%rJ   c                ó¶  — 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kD  rut        d«      ‚t        |t        j                  «      rE|j                  |cxu rt        j                  j                  u rn t        d«      ‚|j                  }nt        d«      ‚|t        j                  j                  u r„|t        j                  j                  u r| j                   j"                  }n>|t        j                  j$                  u r| j                   j&                  }nt        d«      ‚| j)                  |||«      S |t        j                  j*                  u �rƒ| j,                  r%t        |t        j                  «      st        d	«      ‚| j                   j/                  |«      }	|t        j                  j                  u rt|	| j                   j0                  k(  r| j                   j2                  }n1|	| j                   j4                  k(  sJ ‚| j                   j6                  }| j)                  |||«      S |t        j                  j$                  u r€|rt        d
«      ‚|	| j                   j0                  k(  r| j                   j8                  }n1|	| j                   j4                  k(  sJ ‚| j                   j:                  }| j=                  ||«      S t        d«      ‚|t        j                  j                  u r>|t        j                  j                  u rt?        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 instancerJ   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.zDEncryption 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ˆ  rž  ÚKeySerializationEncryptionr   ÚBestAvailableEncryptionr  r×   rª   Ú_KeySerializationEncryptionÚ_formatÚOpenSSHrŸ  ÚPEMr]   ÚPEM_write_bio_PKCS8PrivateKeyr’  Úi2d_PKCS8PrivateKey_bioÚ_private_key_bytes_via_bioÚTraditionalOpenSSLr`   r"  r#  ÚPEM_write_bio_RSAPrivateKeyr.  ÚPEM_write_bio_ECPrivateKeyr)  Úi2d_ECPrivateKey_bioÚ_bio_func_outputr;   Ú_serialize_ssh_private_key)
ri   Úencodingrl   Úencryption_algorithmr„  rê   Úcdatar  Ú	write_bior3  s
             rK   Ú_private_key_byteszBackend._private_key_bytesé  sp  € ô ˜(¤M×$:Ñ$:Ô;ÜÐMÓNÐNÜ˜&¤-×"=Ñ"=Ô>ÜØDóð ô Ø ¤-×"JÑ"Jô
ô ðóð ô Ð*¬M×,FÑ,FÔGØ‰HÜØ ¤-×"GÑ"Gô
ð ,×4Ñ4ˆHÜ�8‹}˜tÒ#Ü ð#óð ô
 Ø$¤m×&OÑ&Oôð %×,Ñ,Øó3ä×*Ñ*×2Ñ2ó3ô Ð:Ó;Ð;ð ,×4Ñ4‰HäÐ:Ó;Ð;ð ”]×0Ñ0×6Ñ6Ñ6Øœ=×1Ñ1×5Ñ5Ñ5Ø ŸI™I×CÑC‘	Øœ]×3Ñ3×7Ñ7Ñ7Ø ŸI™I×=Ñ=‘	ä Ð!AÓBÐBØ×2Ñ2Ø˜8 Xóð ð
 ”]×0Ñ0×CÑCÒCØ×!Ò!¬*Ø$¤m×&@Ñ&@ô+ô !ð.óð ð —y‘y×,Ñ,¨XÓ6ˆHàœ=×1Ñ1×5Ñ5Ñ5Ø˜tŸy™y×5Ñ5Ò5Ø $§	¡	× EÑ E‘Ià# t§y¡y×'<Ñ'<Ò<Ð<Ð<Ø $§	¡	× DÑ D�IØ×6Ñ6Ø˜u hóð ð œ=×1Ñ1×5Ñ5Ñ5ÙÜ$ð3óð ð ˜tŸy™y×5Ñ5Ò5Ø $§	¡	× ?Ñ ?‘Ià# t§y¡y×'<Ñ'<Ò<Ð<Ð<Ø $§	¡	× >Ñ >�IØ×,Ñ,¨Y¸Ó>Ð>äÐJÓKÐKð ”]×0Ñ0×8Ñ8Ñ8Øœ=×1Ñ1×5Ñ5Ñ5Ü×5Ñ5Ø˜Ð#7óð ô ð%óð ô Ð:Ó;Ð;rJ   c           	     óú   — |s| j                   j                  }n| j                  j                  d«      }| j	                  ||||t        |«      | j                   j                  | j                   j                  «      S )Ns   aes-256-cbc)r[   r�   r]   ÚEVP_get_cipherbynamer  r×   )ri   r"  rê   r  r§   s        rK   r  z"Backend._private_key_bytes_via_bioY  sf   € ñ ØŸ™Ÿ™‰Jð Ÿ™×7Ñ7¸ÓGˆJà×$Ñ$ØØØØÜ�‹MØ�I‰I�N‰NØ�I‰I�N‰Nó
ð 	
rJ   c                ó~   — | j                  «       } ||g|¢­Ž }| j                  |dk(  «       | j                  |«      S r   )r  rt   r  )ri   r"  ÚargsrB   ré   s        rK   r  zBackend._bio_func_outputl  sB   € Ø×%Ñ%Ó'ˆÙ˜Ð#˜dÒ#ˆØ×Ñ˜C 1™HÔ%Ø×!Ñ! #Ó&Ð&rJ   c                óV  — t        |t        j                  «      st        d«      ‚t        |t        j                  «      st        d«      ‚|t        j                  j
                  u rƒ|t        j                  j                  u r| j                  j                  }n>|t        j                  j                  u r| j                  j                  }nt        d«      ‚| j                  ||«      S |t        j                  j                  u rÂ| j                  j                  |«      }|| j                  j                  k7  rt        d«      ‚|t        j                  j                  u r| j                  j                   }n>|t        j                  j                  u r| j                  j"                  }nt        d«      ‚| j                  ||«      S |t        j                  j$                  u r<|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  r]   ÚPEM_write_bio_PUBKEYr’  Úi2d_PUBKEY_biorª   r  ÚPKCS1r"  r#  ÚPEM_write_bio_RSAPublicKeyr7  r  r;   Úserialize_ssh_public_key)ri   r  rl   r„  rê   r!  r"  r3  s           rK   Ú_public_key_byteszBackend._public_key_bytesr  sÇ  € ô ˜(¤M×$:Ñ$:Ô;ÜÐMÓNÐNÜ˜&¤-×"<Ñ"<Ô=ÜØCóð ð
 ”]×/Ñ/×DÑDÑDØœ=×1Ñ1×5Ñ5Ñ5Ø ŸI™I×:Ñ:‘	Øœ]×3Ñ3×7Ñ7Ñ7Ø ŸI™I×4Ñ4‘	ä ØNóð ð ×(Ñ(¨°HÓ=Ð=ð ”]×/Ñ/×5Ñ5Ñ5à—y‘y×,Ñ,¨XÓ6ˆHØ˜4Ÿ9™9×1Ñ1Ò1Ü Ð!NÓOÐOàœ=×1Ñ1×5Ñ5Ñ5Ø ŸI™I×@Ñ@‘	Øœ]×3Ñ3×7Ñ7Ñ7Ø ŸI™I×:Ñ:‘	ä Ð!LÓMÐMØ×(Ñ(¨°EÓ:Ð:ð ”]×/Ñ/×7Ñ7Ñ7Øœ=×1Ñ1×9Ñ9Ñ9Ü×3Ñ3°CÓ8Ð8äØCóð ô Ð:Ó;Ð;rJ   c                ó0   — | j                   j                   S rW   ©r]   r'  rh   s    rK   Údh_supportedzBackend.dh_supported©  ó   € Ø—9‘9×6Ñ6Ð6Ð6rJ   c                óB   — t         j                  j                  ||«      S rW   )r^   r   rJ  ©ri   Ú	generatorrç   s      rK   Úgenerate_dh_parameterszBackend.generate_dh_parameters¬  s   € ô �‰×2Ñ2°9¸hÓGÐGrJ   c                ó"   — |j                  «       S rW   rM  rO  s     rK   Úgenerate_dh_private_keyzBackend.generate_dh_private_key±  rR  rJ   c                óD   — | j                  | j                  ||«      «      S rW   )r:  r8  r6  s      rK   Ú&generate_dh_private_key_and_parametersz.Backend.generate_dh_private_key_and_parameters¶  s'   € ð ×+Ñ+Ø×'Ñ'¨	°8Ó<ó
ð 	
rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   rW  rX  s     rK   Úload_dh_private_numberszBackend.load_dh_private_numbers½  s   € ô �‰×3Ñ3°GÓ<Ð<rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   r]  rX  s     rK   Úload_dh_public_numberszBackend.load_dh_public_numbersÂ  s   € ô �‰×2Ñ2°7Ó;Ð;rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   r`  rX  s     rK   Úload_dh_parameter_numbersz!Backend.load_dh_parameter_numbersÇ  s   € ô �‰×5Ñ5°gÓ>Ð>rJ   c                óŽ   — 	 t         j                  j                  t        j                  |||¬«      «       y# t        $ r Y yw xY w)N)rñ   Úgrò   TF)r^   r   r`  ÚDHParameterNumbersrª   )ri   rñ   rD  rò   s       rK   Údh_parameters_supportedzBackend.dh_parameters_supportedÌ  sD   € ð	Ü�O‰O×2Ñ2Ü×%Ñ%¨¨Q°!Ô4ôð øô ò 	Ùð	ús   ‚58 ¸	AÁAc                ó4   — | j                   j                  dk(  S r   )r]   re   rh   s    rK   Údh_x942_serialization_supportedz'Backend.dh_x942_serialization_supportedØ  s   € Ø�y‰y×6Ñ6¸!Ñ;Ð;rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   Úfrom_public_bytesr~  s     rK   Úx25519_load_public_bytesz Backend.x25519_load_public_bytesÛ  s   € Ü×"Ñ"×4Ñ4°TÓ:Ð:rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   Úfrom_private_bytesr~  s     rK   Úx25519_load_private_bytesz!Backend.x25519_load_private_bytesÞ  s   € ô ×"Ñ"×5Ñ5°dÓ;Ð;rJ   c                ó>   — t         j                  j                  «       S rW   )r^   r   Úgenerate_keyrh   s    rK   Úx25519_generate_keyzBackend.x25519_generate_keyã  s   € Ü×"Ñ"×/Ñ/Ó1Ð1rJ   c                óJ   — | j                   ry| j                  j                   S r‘   )r`   r]   Ú#CRYPTOGRAPHY_LIBRESSL_LESS_THAN_370rh   s    rK   Úx25519_supportedzBackend.x25519_supportedæ  s!   € Ø×ÒØØ—9‘9×@Ñ@Ð@Ð@rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   rJ  r~  s     rK   Úx448_load_public_byteszBackend.x448_load_public_bytesë  s   € Ü× Ñ ×2Ñ2°4Ó8Ð8rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   rM  r~  s     rK   Úx448_load_private_byteszBackend.x448_load_private_bytesî  s   € Ü× Ñ ×3Ñ3°DÓ9Ð9rJ   c                ó>   — t         j                  j                  «       S rW   )r^   r   rP  rh   s    rK   Úx448_generate_keyzBackend.x448_generate_keyñ  s   € Ü× Ñ ×-Ñ-Ó/Ð/rJ   c                ó|   — | j                   ry| j                  j                   xr | j                  j                   S r‘   ©r`   r]   r&  r'  rh   s    rK   Úx448_supportedzBackend.x448_supportedô  ó8   € Ø×ÒØà—	‘	×2Ñ2Ð2ò 8Ø—I‘I×7Ñ7Ð7ð	
rJ   c                óH   — | j                   ry| j                  j                  S r‘   )r`   r]   Ú CRYPTOGRAPHY_HAS_WORKING_ED25519rh   s    rK   Úed25519_supportedzBackend.ed25519_supportedü  s   € Ø×ÒØØ�y‰y×9Ñ9Ð9rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   rJ  r~  s     rK   Úed25519_load_public_bytesz!Backend.ed25519_load_public_bytes  s   € ô ×#Ñ#×5Ñ5°dÓ;Ð;rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   rM  r~  s     rK   Úed25519_load_private_bytesz"Backend.ed25519_load_private_bytes  s   € ô ×#Ñ#×6Ñ6°tÓ<Ð<rJ   c                ó>   — t         j                  j                  «       S rW   )r^   r   rP  rh   s    rK   Úed25519_generate_keyzBackend.ed25519_generate_key  s   € Ü×#Ñ#×0Ñ0Ó2Ð2rJ   c                ó|   — | j                   ry| j                  j                   xr | j                  j                   S r‘   r\  rh   s    rK   Úed448_supportedzBackend.ed448_supported  r^  rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   rJ  r~  s     rK   Úed448_load_public_byteszBackend.ed448_load_public_bytes  s   € Ü×!Ñ!×3Ñ3°DÓ9Ð9rJ   c                ó@   — t         j                  j                  |«      S rW   )r^   r   rM  r~  s     rK   Úed448_load_private_bytesz Backend.ed448_load_private_bytes  s   € Ü×!Ñ!×4Ñ4°TÓ:Ð:rJ   c                ó>   — t         j                  j                  «       S rW   )r^   r   rP  rh   s    rK   Úed448_generate_keyzBackend.ed448_generate_key  s   € Ü×!Ñ!×.Ñ.Ó0Ð0rJ   c                ó.   — t        j                  | |«      S rW   )r	   Ú_aead_cipher_supported)ri   r¤   s     rK   Úaead_cipher_supportedzBackend.aead_cipher_supported  s   € Ü×*Ñ*¨4°Ó8Ð8rJ   c                ó.   — t        |«      D ]  }d||<   Œ	 y )Nr   )Úrange)ri   r  r¦  Úis       rK   Ú
_zero_datazBackend._zero_data"  s    € ô �v“ò 	ˆAØˆD�ŠGñ	rJ   c              #  ó”  K  — |€| j                   j                  –— yt        |«      }| j                   j                  d|dz   «      }| j                   j	                  |||«       	 |–— | j                  | j                   j                  d|«      |«       y# | j                  | j                   j                  d|«      |«       w xY w­w)aâ  
        This method takes bytes, which can be a bytestring or a mutable
        buffer like a bytearray, and yields a null-terminated version of that
        data. This is required because PKCS12_parse doesn't take a length with
        its password char * and ffi.from_buffer doesn't provide null
        termination. So, to support zeroing the data via bytearray we
        need to build this ridiculous construct that copies the memory, but
        zeroes it after use.
        Nzchar[]rU   z	uint8_t *)r[   r�   r×   rÈ   Úmemmoverv  r-  )ri   r  Údata_lenr  s       rK   Ú_zeroed_null_terminated_bufz#Backend._zeroed_null_terminated_buf)  s™   è ø€ ð ˆ<Ø—)‘)—.‘.Ó ä˜4“yˆHØ—)‘)—-‘- ¨(°Q©,Ó7ˆCØ�I‰I×Ñ˜c 4¨Ô2ðLØ’	ð —‘ §	¡	§¡¨{¸CÓ @À(ÕKø�—‘ §	¡	§¡¨{¸CÓ @À(ÕKüs   ‚A#CÁ&B Á*-CÂ.CÃCc                óÖ   — | j                  ||«      }|j                  |j                  r|j                  j                  nd |j                  D �cg c]  }|j                  ‘Œ c}fS c c}w rW   )Úload_pkcs12r„  r•  ÚcertificateÚadditional_certs)ri   r  r  Úpkcs12r•  s        rK   Ú%load_key_and_certificates_from_pkcs12z-Backend.load_key_and_certificates_from_pkcs12@  s\   € ð ×!Ñ! $¨Ó1ˆà�J‰JØ'-§{¢{ˆF�K‰K×#Ò#¸Ø*0×*AÑ*AÖB $ˆT×ÓÒBð
ð 	
ùò Cs   ÁA&c                ó	  — |�t        j                  d|«       | j                  |«      }| j                  j	                  |j
                  | j                  j                  «      }|| j                  j                  k(  r| j                  «        t        d«      ‚| j                  j                  || j                  j                  «      }| j                  j                  d«      }| j                  j                  d«      }| j                  j                  d«      }| j                  |«      5 }| j                  j                  |||||«      }	d d d «       	dk(  r| j                  «        t        d«      ‚d }
d }g }|d   | j                  j                  k7  rF| j                  j                  |d   | j                  j                  «      }| j!                  |d¬	«      }|d   | j                  j                  k7  r¶| j                  j                  |d   | j                  j"                  «      }| j%                  |«      }d }| j                  j'                  || j                  j                  «      }|| j                  j                  k7  r| j                  j)                  |«      }t+        ||«      }
|d   | j                  j                  k7  �r¬| j                  j                  |d   | j                  j,                  «      }| j                  j/                  |d   «      }| j                  j0                  s| j                  j2                  rt5        |«      }nt7        t5        |«      «      }|D �]	  }| j                  j9                  ||«      }| j;                  || j                  j                  k7  «       | j                  j                  || j                  j"                  «      }| j%                  |«      }d }| j                  j'                  || j                  j                  «      }|| j                  j                  k7  r| j                  j)                  |«      }|j=                  t+        ||«      «       �Œ t?        ||
|«      S # 1 sw Y   �Œ:xY w)
Nr  z!Could not deserialize PKCS12 datazEVP_PKEY **zX509 **zCryptography_STACK_OF_X509 **r   zInvalid password or PKCS12 dataFrÝ   ) r   r¥  r  r]   Úd2i_PKCS12_biorB   r[   r�   rÃ   rª   rá   ÚPKCS12_freerÈ   rz  ÚPKCS12_parser  r5  r”  r›  ÚX509_alias_get0ry   r=   Úsk_X509_freeÚsk_X509_numr´   r'  rt  ÚreversedÚsk_X509_valuert   rf   r>   )ri   r  r  rB   Úp12Úevp_pkey_ptrrš  Úsk_x509_ptrÚpassword_bufré   r•  r„  Úadditional_certificatesrê   r   Úcert_objr„   Ú
maybe_nameÚsk_x509rØ   Úindicesru  Ú	addl_certÚ	addl_names                           rK   r|  zBackend.load_pkcs12N  sˆ  € ð ÐÜ×"Ñ" :¨xÔ8à× Ñ  Ó&ˆØ�i‰i×&Ñ& s§w¡w°·	±	·±Ó?ˆØ�$—)‘)—.‘.Ò Ø× Ñ Ô"ÜÐ@ÓAÐAà�i‰i�l‰l˜3 §	¡	× 5Ñ 5Ó6ˆØ—y‘y—}‘} ]Ó3ˆØ—9‘9—=‘= Ó+ˆØ—i‘i—m‘mÐ$CÓDˆØ×-Ñ-¨hÓ7ð 	¸<Ø—)‘)×(Ñ(Ø�\ <°¸;óˆC÷	ð �!Š8Ø× Ñ Ô"ÜÐ>Ó?Ð?àˆØˆØ"$Ðà˜‰?˜dŸi™iŸn™nÒ,Ø—y‘y—|‘| L°¡O°T·Y±Y×5LÑ5LÓMˆHð ×/Ñ/Ø¸ð 0ó ˆCð �A‰;˜$Ÿ)™)Ÿ.™.Ò(Ø—9‘9—<‘< ¨¡¨T¯Y©Y×-@Ñ-@ÓAˆDØ—‘ tÓ,ˆHØˆDØŸ™×2Ñ2°4¸¿¹¿¹ÓHˆJØ˜TŸY™YŸ^™^Ò+Ø—y‘y×'Ñ'¨
Ó3�Ü$ X¨tÓ4ˆDà�q‰>˜TŸY™YŸ^™^Ó+Ø—i‘i—l‘l ;¨q¡>°4·9±9×3IÑ3IÓJˆGØ—)‘)×'Ñ'¨°A©Ó7ˆCð —	‘	×=Ò=Ø—9‘9×6Ò6ä ›*‘ä"¤5¨£:Ó.�àó �Ø—y‘y×.Ñ.¨w¸Ó:�Ø×#Ñ# D¨D¯I©I¯N©NÑ$:Ô;Ø—y‘y—|‘| D¨$¯)©)×*=Ñ*=Ó>�Ø ŸO™O¨DÓ1�	Ø �	Ø!ŸY™Y×6Ñ6°t¸T¿Y¹Y¿^¹^ÓL�
Ø §¡§¡Ò/Ø $§	¡	× 0Ñ 0°Ó <�IØ'×.Ñ.Ü% i°Ó;öðô (¨¨TÐ3JÓKÐK÷s	ñ 	ús   Ä* RÒRc                óh  — d }|�t        j                  d|«       t        |t        j                  «      r d}d}d}	d}
| j
                  j                  }�nat        |t        j                  «      r—| j                  j                  r-| j                  j                  }| j                  j                  }n,| j                  j                  }| j                  j                  }d}	d}
| j
                  j                  }|j                  }�n°t        |t        j                  «      �rŠ|j                  t        j                  j                   u �rcd}d}d}	d}
|j                  }|j"                  }|t$        j&                  u r-| j                  j                  }| j                  j                  }nd|t$        j(                  u rN| j                  j                  st+        d«      ‚| j                  j                  }| j                  j                  }n|�J ‚|j,                  �e| j                  j.                  st+        d«      ‚| j1                  |j,                  «      }| j3                  || j
                  j                  k7  «       n| j
                  j                  }|j4                  �|j4                  }	nt7        d«      ‚|�t9        |«      dk(  r| j
                  j                  }�nP| j                  j;                  «       }| j
                  j=                  || j                  j>                  «      }g }|D ]ÿ  }t        |t@        «      r–|jB                  }| jE                  |jF                  «      }|€2| j                  jI                  || j
                  j                  d«      }n&| j                  jI                  ||t9        |«      «      }| j3                  |dk(  «       n| jE                  |«      }|jK                  |«       | j                  jM                  ||«      }tN        j3                  |dk\  «       �Œ | jQ                  |«      5 }| jQ                  |«      5 }|r| jE                  |«      n| j
                  j                  }|�| jS                  |«      n| j
                  j                  }| j                  jU                  ||||||||	|
d«
      }|| j
                  j                  k(  r| jW                  «       }t7        d	|«      ‚	 d d d «       | j                  j.                  rN|| j
                  j                  k7  r5| j                  jY                  |d| j
                  j                  d|
|«       d d d «       | j3                  | j
                  j                  k7  «       | j
                  j=                  || j                  jZ                  «      }| j]                  «       }| j                  j_                  ||«      }| j3                  |dkD  «       | ja                  |«      S # 1 sw Y   �ŒxY w# 1 sw Y   Œ¿xY w)
Nr„   r£  r   i N  rU   z2PBESv2 is not supported by this version of OpenSSLzBSetting MAC algorithm is not supported by this version of OpenSSL.zUnsupported key encryption typez=Failed to create PKCS12 (does the key match the certificate?))1r   Ú_check_bytesr’   r   r   r[   r�   r  r]   r´   ÚNID_aes_256_cbcÚ&NID_pbe_WithSHA1And3_Key_TripleDES_CBCr  r  r  rž  ÚPKCS12Ú_key_cert_algorithmr<   ÚPBESv1SHA1And3KeyTripleDESCBCÚPBESv2SHA256AndAES256CBCr   Ú
_hmac_hashÚCryptography_HAS_PKCS12_SET_MACr�   rt   Ú_kdf_roundsrª   r×   Úsk_X509_new_nullrá   r†  r=   Úfriendly_namer–  r}  ÚX509_alias_set1rf   Úsk_X509_pushrØ  rz  r¡  ÚPKCS12_createrÃ   ÚPKCS12_set_macrƒ  r  Úi2d_PKCS12_bior  )ri   r„   r„  r•  Úcasr   r  Únid_certÚnid_keyÚpkcs12_iterÚmac_iterÚmac_algÚ
keycertalgr‘  Úossl_casÚcaÚca_aliasÚossl_caré   r�  Úname_bufÚ	ossl_certÚ	ossl_pkeyrŠ  rq   rB   s                             rK   Ú(serialize_key_and_certificates_to_pkcs12z0Backend.serialize_key_and_certificates_to_pkcs12™  s=  € ð ˆØÐÜ×Ñ˜v tÔ,äÐ*¬M×,FÑ,FÔGØˆHØˆGØˆKØˆHØ—i‘i—n‘nŠGÜØ ¤-×"GÑ"Gô
ð �y‰y×<Ò<ØŸ9™9×4Ñ4�ØŸ)™)×3Ñ3‘àŸ9™9×KÑK�ØŸ)™)×JÑJ�àˆKð ˆHà—i‘i—n‘nˆGØ+×4Ñ4ŠHäØ$¤m×&OÑ&Oõð %×,Ñ,Ü×*Ñ*×1Ñ1ò2ð
 ˆHØˆGàˆKàˆHØ+×4Ñ4ˆHØ-×AÑAˆJØœT×?Ñ?Ñ?ØŸ9™9×KÑK�ØŸ)™)×JÑJ‘Øœt×<Ñ<Ñ<Ø—y‘y×DÒDÜ.ØLóð ð  Ÿ9™9×4Ñ4�ØŸ)™)×3Ñ3‘à!Ð)Ð)Ð)ð $×.Ñ.Ð:Ø—y‘y×@Ò@Ü.ð.óð ð ×>Ñ>Ø(×3Ñ3ó�ð ×#Ñ# G¨t¯y©y¯~©~Ñ$=Õ>àŸ)™)Ÿ.™.�à#×/Ñ/Ð;Ø2×>Ñ>‘ô Ð>Ó?Ð?àˆ;œ#˜c›( aš-Ø—i‘i—n‘nŠGà—i‘i×0Ñ0Ó2ˆGØ—i‘i—l‘l 7¨D¯I©I×,BÑ,BÓCˆGð ˆHØò 1�Ü˜bÔ"3Ô4Ø!×/Ñ/�HØ"Ÿo™o¨b¯n©nÓ=�GØÐ'Ø"Ÿi™i×7Ñ7Ø# T§Y¡Y§^¡^°Ró™ð #Ÿi™i×7Ñ7Ø# X¬s°8«}ó˜ð ×'Ñ'¨¨q©Õ1à"Ÿo™o¨bÓ1�GØ—‘ Ô(Ø—i‘i×,Ñ,¨W°gÓ>�Ü×&Ñ& s¨a¡xÖ0ð#1ð& ×-Ñ-¨hÓ7ð )	¸<Ø×1Ñ1°$Ó7ð ¸8Ù59˜DŸO™O¨DÔ1¸t¿y¹y¿~¹~�	à+.¨?�D—N‘N 3Ô'ÀÇ	Á	ÇÁð ð —i‘i×-Ñ-Ø ØØØØØØØØØó�ð ˜$Ÿ)™)Ÿ.™.Ò(Ø!×1Ñ1Ó3�FÜ$ð,ð óð ð )÷%ð: —	‘	×9Ò9Ø˜tŸy™yŸ~™~Ò-à—	‘	×(Ñ(ØØ ØØ—I‘I—N‘NØØØô÷C)	ðV 	×Ñ˜C 4§9¡9§>¡>Ñ1Ô2Ø�i‰i�l‰l˜3 §	¡	× 5Ñ 5Ó6ˆà×%Ñ%Ó'ˆØ�i‰i×&Ñ& s¨CÓ0ˆØ×Ñ˜C !™GÔ$Ø×!Ñ! #Ó&Ð&÷añ ú÷)	ð )	ús&   Ð?X(ÑB,XÓ>A,X(ØX%	Ø X(Ø(X1c                óN   — | j                   ry| j                  j                  dk(  S r›   )r`   r]   ÚCryptography_HAS_POLY1305rh   s    rK   Úpoly1305_supportedzBackend.poly1305_supported@  s#   € Ø×ÒØØ�y‰y×2Ñ2°aÑ7Ð7rJ   c                ó0   — | j                   j                   S rW   r2  rh   s    rK   Úpkcs7_supportedzBackend.pkcs7_supportedE  r4  rJ   c                ó  — t        j                  d|«       | j                  |«      }| j                  j	                  |j
                  | j                  j                  | j                  j                  | j                  j                  «      }|| j                  j                  k(  r| j                  «        t        d«      ‚| j                  j                  || j                  j                  «      }| j                  |«      S ©Nr  zUnable to parse PKCS7 data)r   r–  r  r]   ÚPEM_read_bio_PKCS7rB   r[   r�   rÃ   rª   rá   Ú
PKCS7_freeÚ_load_pkcs7_certificates©ri   r  rB   Úp7s       rK   Úload_pem_pkcs7_certificatesz#Backend.load_pem_pkcs7_certificatesH  s¶   € ô 	×Ñ˜6 4Ô(Ø× Ñ  Ó&ˆØ�Y‰Y×)Ñ)Ø�G‰G�T—Y‘Y—^‘^ T§Y¡Y§^¡^°T·Y±Y·^±^ó
ˆð �—‘—‘ÒØ× Ñ Ô"ÜÐ9Ó:Ð:à�Y‰Y�\‰\˜"˜dŸi™i×2Ñ2Ó3ˆØ×,Ñ,¨RÓ0Ð0rJ   c                ó®  — t        j                  d|«       | j                  |«      }| j                  j	                  |j
                  | j                  j                  «      }|| j                  j                  k(  r| j                  «        t        d«      ‚| j                  j                  || j                  j                  «      }| j                  |«      S r¼  )r   r–  r  r]   Úd2i_PKCS7_biorB   r[   r�   rÃ   rª   rá   r¾  r¿  rÀ  s       rK   Úload_der_pkcs7_certificatesz#Backend.load_der_pkcs7_certificatesW  s�   € ô 	×Ñ˜6 4Ô(Ø× Ñ  Ó&ˆØ�Y‰Y×$Ñ$ S§W¡W¨d¯i©i¯n©nÓ=ˆØ�—‘—‘ÒØ× Ñ Ô"ÜÐ9Ó:Ð:à�Y‰Y�\‰\˜"˜dŸi™i×2Ñ2Ó3ˆØ×,Ñ,¨RÓ0Ð0rJ   c                óè  — | j                   j                  |j                  «      }| j                  || j                   j                  k7  «       || j                   j
                  k7  r)t        dj                  |«      t        j                  «      ‚g }|j                  j                  | j                  j                  k(  r|S |j                  j                  j                  }| j                   j                  |«      }t!        |«      D ]h  }| j                   j#                  ||«      }| j                  || j                  j                  k7  «       | j%                  |«      }|j'                  |«       Œj |S )NzNOnly basic signed structures are currently supported. NID for this data was {})r]   ÚOBJ_obj2nidr¢   rt   r¼  ÚNID_pkcs7_signedr   rl   r   ÚUNSUPPORTED_SERIALIZATIONró   Úsignr[   r�   r•  r‡  rt  r‰  r›  rf   )	ri   rÁ  ÚnidÚcertsr‘  rØ   ru  r   r•  s	            rK   r¿  z Backend._load_pkcs7_certificatesd  s  € Ø�i‰i×#Ñ# B§G¡GÓ,ˆØ×Ñ˜C 4§9¡9×#6Ñ#6Ñ6Ô7Ø�$—)‘)×,Ñ,Ò,Ü&ð(ß(.©¨s«Ü×2Ñ2óð ð )+ˆØ�4‰4�9‰9˜Ÿ	™	Ÿ™Ò&ØˆLà—$‘$—)‘)—.‘.ˆØ�i‰i×#Ñ# GÓ,ˆÜ�s“ò 	ˆAØ—9‘9×*Ñ*¨7°AÓ6ˆDØ×Ñ ¨¯	©	¯©Ñ 6Ô7Ø—?‘? 4Ó(ˆDØ�L‰L˜Õð		ð ˆrJ   )ÚreturnÚNone)rÍ  ÚstrrW   )rs   Úboolrq   z7typing.Optional[typing.List[rust_openssl.OpenSSLError]]rÍ  rÎ  )rÍ  rÊ   )rˆ   úhashes.HashAlgorithm)rˆ   rÑ  rÍ  rÐ  )rÍ  rÐ  )r¤   r%   r¥   r:   rÍ  rÐ  )r¤   r%   r¥   r:   rÍ  r
   )rÍ  z&typing.List[rust_openssl.OpenSSLError])rØ   rÊ   )ræ   rÊ   rç   rÊ   rÍ  úrsa.RSAPrivateKey)ræ   rÊ   rç   rÊ   rÍ  rÐ  )rý   zrsa.RSAPrivateNumbersrÞ   rÐ  rÍ  rÒ  )rý   zrsa.RSAPublicNumbersrÍ  zrsa.RSAPublicKey)r  ÚbytesrÍ  rA   )rÍ  rÓ  )rÞ   rÐ  rÍ  r"   )rÍ  r#   )rE  r   rÍ  rÐ  )rç   rÊ   rÍ  údsa.DSAParameters)rP  rÔ  rÍ  údsa.DSAPrivateKey)rç   rÊ   rÍ  rÕ  )rý   zdsa.DSAPrivateNumbersrÍ  rÕ  )rý   zdsa.DSAPublicNumbersrÍ  zdsa.DSAPublicKey)rý   zdsa.DSAParameterNumbersrÍ  rÔ  )rˆ   r$   rÍ  r   )r  rÓ  r  útyping.Optional[bytes]rÞ   rÐ  rÍ  r"   )r  rÓ  rÍ  r#   )r  rÓ  rÍ  údh.DHParameters)r•  úx509.CertificaterÍ  ú
typing.Any)rš  rÙ  rÍ  rØ  )r„  r?   rÍ  rÙ  )rÍ  r"   )rÍ  ztyping.NoReturn)r¿  úec.EllipticCurverÍ  rÐ  )rÅ  z"ec.EllipticCurveSignatureAlgorithmr¿  rÚ  rÍ  rÐ  )r¿  rÚ  rÍ  úec.EllipticCurvePrivateKey)rý   zec.EllipticCurvePrivateNumbersrÍ  rÛ  )rý   zec.EllipticCurvePublicNumbersrÍ  úec.EllipticCurvePublicKey)r¿  rÚ  rè  rÓ  rÍ  rÜ  )rÐ  rÊ   r¿  rÚ  rÍ  rÛ  )r¿  rÚ  )rÀ  rÊ   )rˆ   zec.ECDHr¿  rÚ  rÍ  rÐ  )r¿  rÚ  rÍ  rÊ   )rÕ  rÊ   rÖ  rÊ   rÍ  rÎ  )r  úserialization.Encodingrl   zserialization.PrivateFormatr   ú(serialization.KeySerializationEncryptionrÍ  rÓ  )r  rÝ  rl   zserialization.PublicFormatrÍ  rÓ  )r7  rÊ   rç   rÊ   rÍ  r×  )rP  r×  rÍ  údh.DHPrivateKey)r7  rÊ   rç   rÊ   rÍ  rß  )rý   zdh.DHPrivateNumbersrÍ  rß  )rý   zdh.DHPublicNumbersrÍ  zdh.DHPublicKey)rý   zdh.DHParameterNumbersrÍ  r×  )rñ   rÊ   rD  rÊ   rò   ztyping.Optional[int]rÍ  rÐ  )r  rÓ  rÍ  zx25519.X25519PublicKey)r  rÓ  rÍ  úx25519.X25519PrivateKey)rÍ  rà  )r  rÓ  rÍ  zx448.X448PublicKey)r  rÓ  rÍ  úx448.X448PrivateKey)rÍ  rá  )r  rÓ  rÍ  zed25519.Ed25519PublicKey)r  rÓ  rÍ  úed25519.Ed25519PrivateKey)rÍ  râ  )r  rÓ  rÍ  zed448.Ed448PublicKey)r  rÓ  rÍ  úed448.Ed448PrivateKey)rÍ  rã  )r¦  rÊ   rÍ  rÎ  )r  rÓ  r  rÖ  rÍ  zptyping.Tuple[typing.Optional[PrivateKeyTypes], typing.Optional[x509.Certificate], typing.List[x509.Certificate]])r  rÓ  r  rÖ  rÍ  r>   )r„   rÖ  r„  z&typing.Optional[PKCS12PrivateKeyTypes]r•  z!typing.Optional[x509.Certificate]r§  z,typing.Optional[typing.List[_PKCS12CATypes]]r   rÞ  rÍ  rÓ  )r  rÓ  rÍ  útyping.List[x509.Certificate])rÍ  rä  )’rF   rG   rH   Ú__doc__r„   Ú
_fips_aeadr&   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_modulusrj   ro   rt   rv   rm   r   r‹   r�   r”   r™   r�   rŸ   r¨   r­   rb   rº   r¾   rÀ   rÃ   rÒ   rÛ   rë   rî   rþ   r  r  rå   r  r  r  r5  r:  r@  rF  rH  rK  rQ  rT  rY  r^  ra  rc  re  ri  rk  ro  r{  r  r*  r‚  r8  rŽ  r–  r›  r¡  rm  rx  rÂ  rÆ  rÍ  râ  rä  rê  rò  rÉ  rô  rú  rË  r»  r   rÓ  rÔ  r#  r  r  r0  r3  r8  r:  r<  r>  r@  rB  rF  rH  rK  rN  rQ  rT  rV  rX  rZ  r]  ra  rc  re  rg  ri  rk  rm  ro  rr  rv  Ú
contextlibrz  r€  r|  rµ  r¸  rº  rÂ  rÅ  r¿  rI   rJ   rK   rM   rM   `   s1  „ ñð €Dò€Jð �F€Mð 	�‰Ø�‰Ø�‰Ø�‰Ø×ÑØ×ÑØ�‰Ø�‰Ø�‰Ø�‰Ø�‰Ø�‰ð€Lð 	�‰Ø
�‰Ø
�‰Ø
�‰ð	Ðð "ÐØ$)Ð!Ø ™IÐØ ÐØÐ 5Ñ5Ðó:ó
ð KOðEàðEð HðEð 
ó	Eó<ó	ó/ó	óó
(ð.Ø-ð.à	ó.ó:ó.ó,ó>óBðHKØ%ðKØ-1ðKà	óKð
KØ%ðKØ-1ðKà	óKó
.ó2ó
ó
ð
Ø"ð
Ø.1ð
à	ó
ð.
Ø"ð
Ø.1ð
à	ó
ð'
à&ð'
ð )-ð'
ð 
ó	'
ðR8Ø+ð8à	ó8òòóKò	ó	ðJ@Ø8<ðJ@à	óJ@óX=@ó~
óó&7ó>ð1Ø+ð1à	ó1ð
9Øð9à	ó9ð>Ø,ð>à	ó>ð=Ø+ð=à	ó=ð@Ø.ð@à	ó@ó
ó
8ó

ó
-ð
àð
ð )ð
ð )-ð	
ð
 
ó
ó(1óT9ðàðð )ðð )-ð	ð
 
óò4ó1ó.9óóGó?ð2
à	ó2
óh,ó\ð 	4à?ð	4ð  ð	4ð 
ó		4ðØ%ðà	#óð,2BØ5ð2Bà	#ó2Bðh
AØ4ð
Aà	"ó
AðAØ%ðAØ49ðAà	"óAð,(BØ ð(BØ)9ð(Bà	#ó(BóT8ó=ð


Ø ð

Ø)9ð

à	ó

òóð" ñ)ó ð)ð&ð ð&ð ð	&ð 
ó&ðBn<à(ðn<ð ,ðn<ð Gð	n<ð 
ón<ð`
à	ó
ó&'ð5<à(ð5<ð +ð5<ð 
ó5<ón7ðHØðHØ(+ðHà	óHð
1Ø)ð1à	ó1ð

Øð
Ø(+ð
à	ó
ð=Ø*ð=à	ó=ð
<Ø)ð<à	ó<ð
?Ø,ð?à	ó?ð 9=ð
Øð
Øð
Ø!5ð
à	ó
ó<ó;ð<Øð<à	 ó<ó
2óAó
9ó:ó0ó
ó:ð
<Øð<à	!ó<ð
=Øð=à	"ó=ó
3ó
ó:ó;ó1ó9óð ×ÑñLó ðLð,
Øð
Ø%;ð
ð
ó
ðILØðILØ%;ðILà	!óILðVe'à$ðe'ð 4ðe'ð 0ð	e'ð
 :ðe'ð Gðe'ð 
óe'óN8ó
7ð1Øð1à	&ó1ð1Øð1à	&ó1ôrJ   rM   c                  ó   — e Zd Zdd„Zdd„Zy)r²   c                ó   — || _         y rW   )Ú_fmt)ri   Úfmts     rK   rj   zGetCipherByName.__init__~  s	   € Øˆ�	rJ   c                óÖ  — | j                   j                  ||¬«      j                  «       }|j                  j	                  |j                  d«      «      }||j                  j                  k(  rj|j                  j                  rT|j                  j                  |j                  j                  |j                  d«      |j                  j                  «      }|j                  «        |S )N)r¤   r¥   rx   )rû  rl   Úlowerr]   r%  r†   r[   r�   ÚCryptography_HAS_300_EVP_CIPHERÚEVP_CIPHER_fetchrÃ   )ri   rØ  r¤   r¥   Úcipher_namer§   s         rK   Ú__call__zGetCipherByName.__call__�  s·   € Ø—i‘i×&Ñ&¨f¸4Ð&Ó@×FÑFÓHˆØ—\‘\×6Ñ6Ø×Ñ˜wÓ'ó
ˆ
ð ˜'Ÿ,™,×+Ñ+Ò+Ø—‘×<Ò<à Ÿ™×6Ñ6Ø—‘×!Ñ!Ø×"Ñ" 7Ó+Ø—‘×!Ñ!óˆJð 	×ÑÔ!ØÐrJ   N)rü  rÏ  )rØ  rM   r¤   r%   r¥   r:   )rF   rG   rH   rj   r  rI   rJ   rK   r²   r²   }  s   „ óôrJ   r²   c                ó|   — d|j                   dz  › d�}| j                  j                  |j                  d«      «      S )Nzaes-é   z-xtsrx   )rç   r]   r%  r†   )rØ  r¤   r¥   r  s       rK   r³   r³   –  s:   € Ø˜Ÿ™¨AÑ-Ð.¨dÐ3€KØ�<‰<×,Ñ,¨[×-?Ñ-?ÀÓ-HÓIÐIrJ   )rØ  rM   r¤   r&   )]Ú
__future__r   Úcollectionsrø  rµ   Útypingr   Úcryptographyr   r   Úcryptography.exceptionsr   r   Ú$cryptography.hazmat.backends.opensslr	   Ú,cryptography.hazmat.backends.openssl.ciphersr
   Ú)cryptography.hazmat.backends.openssl.cmacr   Ú'cryptography.hazmat.backends.openssl.ecr   r   Ú(cryptography.hazmat.backends.openssl.rsar   r   Ú"cryptography.hazmat.bindings._rustr   r^   Ú$cryptography.hazmat.bindings.opensslr   Úcryptography.hazmat.primitivesr   r   Ú*cryptography.hazmat.primitives._asymmetricr   Ú)cryptography.hazmat.primitives.asymmetricr   r   r   r   r   r   r   r   Ú1cryptography.hazmat.primitives.asymmetric.paddingr   r   r    r!   Ú/cryptography.hazmat.primitives.asymmetric.typesr"   r#   Ú&cryptography.hazmat.primitives.ciphersr$   r%   Ú1cryptography.hazmat.primitives.ciphers.algorithmsr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   Ú,cryptography.hazmat.primitives.ciphers.modesr2   r3   r4   r5   r6   r7   r8   r9   r:   Ú,cryptography.hazmat.primitives.serializationr;   Ú3cryptography.hazmat.primitives.serialization.pkcs12r<   r=   r>   r?   r@   Ú
namedtuplerA   rE   rM   r²   r³   rØ  rI   rJ   rK   ú<module>r     sá   ðõ
 #ã Û Û Û Ý %ç $ß BÝ 5Ý GÝ B÷÷õ GÝ 8ß @Ý H÷	÷ 	ó 	÷ó ÷÷÷÷ ÷ ó ÷
÷ 
õ 
õ =÷õ ð $ˆ[×#Ñ# L°5¸*Ð2EÓF€
÷	ñ 	÷Zñ Z÷z8ñ ó2Jñ
 ‹)�rJ   