Ë
    ýQµiAU  ã                  óä  — d dl mZ d dlZd dlZd dlmZmZ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mZ d dlmZmZmZmZ ej>                  rd d	l m!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) G d„ de«      Z* G d„ de«      Z+y)é    )ÚannotationsN)ÚInvalidSignatureÚUnsupportedAlgorithmÚ_Reasons)Ú_calculate_digest_and_algorithm)ÚhashesÚserialization)Úutils)	ÚMGF1ÚOAEPÚPSSÚAsymmetricPaddingÚPKCS1v15Ú_AutoÚ_DigestLengthÚ
_MaxLengthÚcalculate_max_pss_salt_length)ÚRSAPrivateKeyÚRSAPrivateNumbersÚRSAPublicKeyÚRSAPublicNumbers)ÚBackendc                ó  — |j                   }t        |t        «      rt        ||«      S t        |t        «      r|j
                  S t        |t        «      r1t        |t        «      rt        d«      ‚| j                  j                  S |S )Nz6PSS salt length can only be set to AUTO when verifying)Ú_salt_lengthÚ
isinstancer   r   r   Údigest_sizer   r   Ú
ValueErrorÚ_libÚRSA_PSS_SALTLEN_AUTO)ÚbackendÚpssÚkeyÚhash_algorithmÚsalts        úJ/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/rsa.pyÚ_get_rsa_pss_salt_lengthr&   *   sw   € ð ×Ñ€Dä�$œ
Ô#Ü,¨S°.ÓAÐAÜ	�Dœ-Ô	(Ø×)Ñ)Ð)Ü	�Dœ%Ô	 Ü�cœ=Ô)ÜØHóð ð �|‰|×0Ñ0Ð0àˆó    c                óü  — t        |t        «      st        d«      ‚t        |t        «      r| j                  j
                  }n¬t        |t        «      ru| j                  j                  }t        |j                  t        «      st        dt        j                  «      ‚| j                  |«      sAt        dt        j                  «      ‚t        |j                  › d�t        j                  «      ‚t!        | ||||«      S )Nz1Padding must be an instance of AsymmetricPadding.ú'Only MGF1 is supported by this backend.zPThis combination of padding and hash algorithm is not supported by this backend.ú" is not supported by this backend.)r   r   Ú	TypeErrorr   r   ÚRSA_PKCS1_PADDINGr   ÚRSA_PKCS1_OAEP_PADDINGÚ_mgfr   r   r   ÚUNSUPPORTED_MGFÚrsa_padding_supportedÚUNSUPPORTED_PADDINGÚnameÚ_enc_dec_rsa_pkey_ctx)r    r"   ÚdataÚpaddingÚpadding_enums        r%   Ú_enc_dec_rsar7   @   sÛ   € ô �gÔ0Ô1ÜÐKÓLÐLä�'œ8Ô$Ø—|‘|×5Ñ5‰Ü	�GœTÔ	"Ø—|‘|×:Ñ:ˆä˜'Ÿ,™,¬Ô-Ü&Ø9Ü×(Ñ(óð ð
 ×,Ñ,¨WÔ5Ü&ð-ä×,Ñ,óð ô #Ø�|‰|ˆnÐ>Ð?Ü×(Ñ(ó
ð 	
ô
 ! ¨#¨t°\À7ÓKÐKr'   c           	     ó¦  — t        |t        «      r-| j                  j                  }| j                  j                  }n,| j                  j
                  }| j                  j                  }| j                  j                  |j                  | j                  j                  «      }| j                  || j                  j                  k7  «       | j                  j                  || j                  j                  «      } ||«      }| j                  |dk(  «       | j                  j                  ||«      }| j                  |dkD  «       | j                  j                  |j                  «      }	| j                  |	dkD  «       t        |t         «      r | j#                  |j$                  j&                  «      }
| j                  j)                  ||
«      }| j                  |dkD  «       | j#                  |j&                  «      }| j                  j+                  ||«      }| j                  |dkD  «       t        |t         «      rø|j,                  �ìt/        |j,                  «      dkD  rÔ| j                  j1                  t/        |j,                  «      «      }| j                  || j                  j                  k7  «       | j                  j3                  ||j,                  t/        |j,                  «      «       | j                  j5                  ||t/        |j,                  «      «      }| j                  |dk(  «       | j                  j7                  d|	«      }| j                  j7                  d|	«      } |||||t/        |«      «      }| j                  j9                  |«      d |d    }| j                  j;                  «        |dk  rt=        d«      ‚|S )Né   r   úsize_t *úunsigned char[]zEncryption/decryption failed.)r   Ú_RSAPublicKeyr   ÚEVP_PKEY_encrypt_initÚEVP_PKEY_encryptÚEVP_PKEY_decrypt_initÚEVP_PKEY_decryptÚEVP_PKEY_CTX_newÚ	_evp_pkeyÚ_ffiÚNULLÚopenssl_assertÚgcÚEVP_PKEY_CTX_freeÚEVP_PKEY_CTX_set_rsa_paddingÚEVP_PKEY_sizer   Ú_evp_md_non_null_from_algorithmr.   Ú
_algorithmÚEVP_PKEY_CTX_set_rsa_mgf1_mdÚEVP_PKEY_CTX_set_rsa_oaep_mdÚ_labelÚlenÚOPENSSL_mallocÚmemmoveÚ EVP_PKEY_CTX_set0_rsa_oaep_labelÚnewÚbufferÚERR_clear_errorr   )r    r"   r4   r6   r5   ÚinitÚcryptÚpkey_ctxÚresÚbuf_sizeÚmgf1_mdÚoaep_mdÚlabelptrÚoutlenÚbufÚresbufs                   r%   r3   r3   d   sï  € ô �#”}Ô%Ø�|‰|×1Ñ1ˆØ—‘×-Ñ-‰à�|‰|×1Ñ1ˆØ—‘×-Ñ-ˆà�|‰|×,Ñ,¨S¯]©]¸G¿L¹L×<MÑ<MÓN€HØ×Ñ˜8 w§|¡|×'8Ñ'8Ñ8Ô9Ø�|‰|�‰˜x¨¯©×)GÑ)GÓH€HÙ
ˆx‹.€CØ×Ñ˜3 !™8Ô$Ø
�,‰,×
3Ñ
3°H¸lÓ
K€CØ×Ñ˜3 ™7Ô#Ø�|‰|×)Ñ)¨#¯-©-Ó8€HØ×Ñ˜8 a™<Ô(Ü�'œ4Ô Ø×9Ñ9Ø�L‰L×#Ñ#ó
ˆð �l‰l×7Ñ7¸À'ÓJˆØ×Ñ˜s Q™wÔ'Ø×9Ñ9¸'×:LÑ:LÓMˆØ�l‰l×7Ñ7¸À'ÓJˆØ×Ñ˜s Q™wÔ'ô 	�7œDÔ!Ø�N‰NÐ&Ü�—‘Ó !Ò#ð —<‘<×.Ñ.¬s°7·>±>Ó/BÓCˆØ×Ñ˜x¨7¯<©<×+<Ñ+<Ñ<Ô=Ø�‰×Ñ˜X w§~¡~´s¸7¿>¹>Ó7JÔKØ�l‰l×;Ñ;Ø�h¤ G§N¡NÓ 3ó
ˆð 	×Ñ˜s a™xÔ(à�\‰\×Ñ˜j¨(Ó3€FØ
�,‰,×
Ñ
Ð,¨hÓ
7€Cñ �˜#˜v t¬S°«YÓ
7€CØ�\‰\× Ñ  Ó% k¨¨q©	Ð2€FØ‡L�L× Ñ Ô"Ø
ˆa‚xÜÐ8Ó9Ð9Ø€Mr'   c                óŠ  — t        |t        «      st        d«      ‚| j                  j	                  |j
                  «      }| j                  |dkD  «       t        |t        «      r| j                  j                  }|S t        |t        «      r‘t        |j                  t        «      st        dt        j                  «      ‚t        |t        j                   «      st        d«      ‚||j"                  z
  dz
  dk  rt%        d«      ‚| j                  j&                  }|S t        |j(                  › d�t        j*                  «      ‚)Nz'Expected provider of AsymmetricPadding.r   r)   z*Expected instance of hashes.HashAlgorithm.é   zDDigest too large for key size. Use a larger key or different digest.r*   )r   r   r+   r   rI   rB   rE   r   r,   r   r.   r   r   r   r/   r   ÚHashAlgorithmr   r   ÚRSA_PKCS1_PSS_PADDINGr2   r1   )r    r"   r5   Ú	algorithmÚ	pkey_sizer6   s         r%   Ú_rsa_sig_determine_paddingrg   §   s#  € ô �gÔ0Ô1ÜÐAÓBÐBà—‘×*Ñ*¨3¯=©=Ó9€IØ×Ñ˜9 q™=Ô)ä�'œ8Ô$à—|‘|×5Ñ5ˆð6 Ðô5 
�GœSÔ	!Ü˜'Ÿ,™,¬Ô-Ü&Ø9Ü×(Ñ(óð ô ˜)¤V×%9Ñ%9Ô:ÜÐHÓIÐIð �y×,Ñ,Ñ,¨qÑ0°1Ò4Üð+óð ð
 —|‘|×9Ñ9ˆð Ðô #Ø�|‰|ˆnÐ>Ð?Ü×(Ñ(ó
ð 	
r'   c           	     óÈ  — t        | |||«      }| j                  j                  |j                  | j                  j
                  «      }| j                  || j                  j
                  k7  «       | j                  j                  || j                  j                  «      } ||«      }|dk7  r| j                  «       }t        d|«      ‚|�u| j                  |«      }	| j                  j                  ||	«      }|dk  rC| j                  «        t        dj                  |j                  «      t         j"                  «      ‚| j                  j%                  ||«      }|dk  rC| j                  «        t        dj                  |j                  «      t         j&                  «      ‚t)        |t*        «      r­t)        |t,        j.                  «      sJ ‚| j                  j1                  |t3        | |||«      «      }| j                  |dkD  «       | j                  |j4                  j6                  «      }
| j                  j9                  ||
«      }| j                  |dkD  «       |S )Nr9   z#Unable to sign/verify with this keyr   z4{} is not supported by this backend for RSA signing.z4{} is not supported for the RSA signature operation.)rg   r   rA   rB   rC   rD   rE   rF   rG   Ú_consume_errorsr   rJ   ÚEVP_PKEY_CTX_set_signature_mdr   Úformatr2   r   ÚUNSUPPORTED_HASHrH   r1   r   r   r   rc   Ú EVP_PKEY_CTX_set_rsa_pss_saltlenr&   r.   rK   rL   )r    r5   re   r"   Ú	init_funcr6   rX   rY   ÚerrorsÚevp_mdr[   s              r%   Ú_rsa_sig_setuprq   ×   s  € ô .¨g°s¸GÀYÓO€LØ�|‰|×,Ñ,¨S¯]©]¸G¿L¹L×<MÑ<MÓN€HØ×Ñ˜8 w§|¡|×'8Ñ'8Ñ8Ô9Ø�|‰|�‰˜x¨¯©×)GÑ)GÓH€HÙ
�HÓ
€CØ
ˆa‚xØ×(Ñ(Ó*ˆÜÐ>ÀÓGÐGàÐØ×8Ñ8¸ÓCˆØ�l‰l×8Ñ8¸À6ÓJˆØ�!Š8Ø×#Ñ#Ô%Ü&ØF×MÑMØ—N‘Nóô ×)Ñ)ó	ð ð �,‰,×
3Ñ
3°H¸lÓ
K€CØ
ˆa‚xØ×ÑÔ!Ü"ØB×IÑIØ—‘óô ×(Ñ(ó	
ð 	
ô �'œ3ÔÜ˜)¤V×%9Ñ%9Ô:Ð:Ð:Ø�l‰l×;Ñ;ØÜ$ W¨g°s¸IÓFó
ˆð 	×Ñ˜s Q™wÔ'à×9Ñ9Ø�L‰L×#Ñ#ó
ˆð �l‰l×7Ñ7¸À'ÓJˆØ×Ñ˜s Q™wÔ'à€Or'   Ú_RSAPrivateKeyc           	     ó*  — t        | |||| j                  j                  «      }| j                  j	                  d«      }| j                  j                  || j                  j                  ||t        |«      «      }| j                  |dk(  «       | j                  j	                  d|d   «      }| j                  j                  ||||t        |«      «      }|dk7  r| j                  «       }	t        d|	«      ‚| j                  j                  |«      d d  S )Nr:   r9   r;   r   zuDigest or salt length too long for key size. Use a larger key or shorter salt length if you are specifying a PSS salt)rq   r   ÚEVP_PKEY_sign_initrC   rS   ÚEVP_PKEY_signrD   rO   rE   ri   r   rT   )
r    r5   re   Úprivate_keyr4   rX   ÚbuflenrY   r_   ro   s
             r%   Ú_rsa_sig_signrx     s   € ô ØØØØØ�‰×'Ñ'ó€Hð �\‰\×Ñ˜jÓ)€FØ
�,‰,×
$Ñ
$Ø�'—,‘,×#Ñ# V¨T´3°t³9ó€Cð ×Ñ˜3 !™8Ô$Ø
�,‰,×
Ñ
Ð,¨f°Q©iÓ
8€CØ
�,‰,×
$Ñ
$ X¨s°F¸DÄ#ÀdÃ)Ó
L€CØ
ˆa‚xØ×(Ñ(Ó*ˆÜðFàó
ð 	
ð �<‰<×Ñ˜sÓ#¡AÐ&Ð&r'   r<   c           	     ó
  — t        | |||| j                  j                  «      }| j                  j                  ||t	        |«      |t	        |«      «      }| j                  |dk\  «       |dk(  r| j                  «        t        ‚y )Nr   )rq   r   ÚEVP_PKEY_verify_initÚEVP_PKEY_verifyrO   rE   ri   r   )r    r5   re   Ú
public_keyÚ	signaturer4   rX   rY   s           r%   Ú_rsa_sig_verifyr~   ,  s‚   € ô ØØØØØ�‰×)Ñ)ó€Hð �,‰,×
&Ñ
&Ø�)œS ›^¨T´3°t³9ó€Cð ×Ñ˜3 !™8Ô$Ø
ˆa‚xØ×ÑÔ!ÜÐð r'   c           	     ó
  — t        | |||| j                  j                  «      }| j                  j                  |j                  «      }| j                  |dkD  «       | j                  j                  d|«      }| j                  j                  d|«      }| j                  j                  ||||t        |«      «      }	| j                  j                  |«      d |d    }
| j                  j                  «        |	dk7  rt        ‚|
S )Nr   r;   r:   r9   )rq   r   ÚEVP_PKEY_verify_recover_initrI   rB   rE   rC   rS   ÚEVP_PKEY_verify_recoverrO   rT   rU   r   )r    r5   re   r|   r}   rX   Úmaxlenr_   rw   rY   r`   s              r%   Ú_rsa_sig_recoverrƒ   G  sê   € ô ØØØØØ�‰×1Ñ1ó€Hð �\‰\×'Ñ'¨
×(<Ñ(<Ó=€FØ×Ñ˜6 A™:Ô&Ø
�,‰,×
Ñ
Ð,¨fÓ
5€CØ�\‰\×Ñ˜j¨&Ó1€FØ
�,‰,×
.Ñ
.Ø�#�v˜y¬#¨i«.ó€Cð �\‰\× Ñ  Ó% k¨¨q©	Ð2€FØ‡L�L× Ñ Ô"ð ˆa‚xÜÐØ€Mr'   c                  ó¦   — e Zd ZU ded<   ded<   ded<   	 	 	 	 dd„Zdd„Zdd„Zedd	„«       Zdd
„Z	dd„Z
dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Zy)rr   ÚobjectrB   Ú
_rsa_cdataÚintÚ	_key_sizec               ó   — |�sG|j                   j                  |«      }|dk7  r|j                  «       }t        d|«      ‚|j                  j                  d«      }|j                  j                  d«      }|j                   j                  |||«       |j                  |d   |j                  j                  k7  «       |j                  |d   |j                  j                  k7  «       |j                   j                  |d   «      }	|j                   j                  |d   «      }
|	dk7  s|
dk7  r|j                  «       }t        d|«      ‚|| _
        || _        || _        d| _        t        j                  «       | _        | j                  j                  j                  d«      }| j                  j                   j#                  | j                  || j                  j                  j                  | j                  j                  j                  «       | j                  j                  |d   | j                  j                  j                  k7  «       | j                  j                   j%                  |d   «      | _        y )Nr9   zInvalid private keyú	BIGNUM **r   F)r   ÚRSA_check_keyri   r   rC   rS   ÚRSA_get0_factorsrE   rD   Ú	BN_is_oddÚ_backendr†   rB   Ú_blindedÚ	threadingÚLockÚ_blinding_lockÚRSA_get0_keyÚBN_num_bitsrˆ   )Úselfr    Ú	rsa_cdataÚevp_pkeyÚunsafe_skip_rsa_key_validationrY   ro   ÚpÚqÚp_oddÚq_oddÚns               r%   Ú__init__z_RSAPrivateKey.__init__p  só  € ò .Ø—,‘,×,Ñ,¨YÓ7ˆCØ�aŠxØ ×0Ñ0Ó2�Ü Ð!6¸Ó?Ð?ð —‘× Ñ  Ó-ˆAØ—‘× Ñ  Ó-ˆAØ�L‰L×)Ñ)¨)°Q¸Ô:Ø×"Ñ" 1 Q¡4¨7¯<©<×+<Ñ+<Ñ#<Ô=Ø×"Ñ" 1 Q¡4¨7¯<©<×+<Ñ+<Ñ#<Ô=Ø—L‘L×*Ñ*¨1¨Q©4Ó0ˆEØ—L‘L×*Ñ*¨1¨Q©4Ó0ˆEØ˜Šz˜U ašZØ ×0Ñ0Ó2�Ü Ð!6¸Ó?Ð?àˆŒØ#ˆŒØ!ˆŒàˆŒÜ'Ÿn™nÓ.ˆÔà�M‰M×Ñ×"Ñ" ;Ó/ˆØ�‰×Ñ×'Ñ'Ø�O‰OØØ�M‰M×Ñ×#Ñ#Ø�M‰M×Ñ×#Ñ#ô		
ð 	�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEØŸ™×+Ñ+×7Ñ7¸¸!¹Ó=ˆ�r'   c                ó€   — | j                   s&| j                  5  | j                  «        d d d «       y y # 1 sw Y   y xY w©N)r�   r’   Ú_non_threadsafe_enable_blinding©r•   s    r%   Ú_enable_blindingz_RSAPrivateKey._enable_blinding¡  s?   € ð �}Š}Ø×$Ñ$ñ 7Ø×4Ñ4Ô6÷7ð 7ð ÷7ð 7ús   ™4´=c                ó  — | j                   st| j                  j                  j                  | j                  | j                  j
                  j                  «      }| j                  j                  |dk(  «       d| _         y y )Nr9   T)r�   rŽ   r   ÚRSA_blinding_onr†   rC   rD   rE   )r•   rY   s     r%   r¡   z._RSAPrivateKey._non_threadsafe_enable_blinding¨  sb   € ð
 �}Š}Ø—-‘-×$Ñ$×4Ñ4Ø—‘ §¡×!3Ñ!3×!8Ñ!8óˆCð �M‰M×(Ñ(¨°©Ô2Ø ˆD�Mð r'   c                ó   — | j                   S r    ©rˆ   r¢   s    r%   Úkey_sizez_RSAPrivateKey.key_size´  ó   € à�~‰~Ðr'   c                ó¨   — | j                  «        | j                  dz   dz  }|t        |«      k7  rt        d«      ‚t	        | j
                  | ||«      S )Né   é   z,Ciphertext length must be equal to key size.)r£   r¨   rO   r   r7   rŽ   )r•   Ú
ciphertextr5   Úkey_size_bytess       r%   Údecryptz_RSAPrivateKey.decrypt¸  sN   € Ø×ÑÔØŸ-™-¨!Ñ+°Ñ1ˆØœS ›_Ò,ÜÐKÓLÐLä˜DŸM™M¨4°¸WÓEÐEr'   c                óÄ  — | j                   j                  j                  | j                  «      }| j                   j	                  || j                   j
                  j                  k7  «       | j                   j
                  j                  || j                   j                  j                  «      }| j                   j                  |«      }t        | j                   ||«      S r    )rŽ   r   ÚRSAPublicKey_dupr†   rE   rC   rD   rF   ÚRSA_freeÚ_rsa_cdata_to_evp_pkeyr<   )r•   Úctxr—   s      r%   r|   z_RSAPrivateKey.public_keyÀ  sš   € Ø�m‰m× Ñ ×1Ñ1°$·/±/ÓBˆØ�‰×$Ñ$ S¨D¯M©M×,>Ñ,>×,CÑ,CÑ%CÔDØ�m‰m× Ñ ×#Ñ# C¨¯©×);Ñ);×)DÑ)DÓEˆØ—=‘=×7Ñ7¸Ó<ˆÜ˜TŸ]™]¨C°Ó:Ð:r'   c                óf	  — | j                   j                  j                  d«      }| j                   j                  j                  d«      }| j                   j                  j                  d«      }| j                   j                  j                  d«      }| j                   j                  j                  d«      }| j                   j                  j                  d«      }| j                   j                  j                  d«      }| j                   j                  j                  d«      }| j                   j                  j	                  | j
                  |||«       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j                  j                  | j
                  ||«       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j                  j                  | j
                  |||«       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j                  |d   | j                   j                  j                  k7  «       t        | j                   j                  |d   «      | j                   j                  |d   «      | j                   j                  |d   «      | j                   j                  |d   «      | j                   j                  |d   «      | j                   j                  |d   «      t        | j                   j                  |d   «      | j                   j                  |d   «      ¬«      ¬«      S )NrŠ   r   ©Úer�   )r™   rš   ÚdÚdmp1Údmq1ÚiqmpÚpublic_numbers)rŽ   rC   rS   r   r“   r†   rE   rD   rŒ   ÚRSA_get0_crt_paramsr   Ú
_bn_to_intr   )	r•   r�   r·   r¸   r™   rš   r¹   rº   r»   s	            r%   Úprivate_numbersz_RSAPrivateKey.private_numbersÇ  sX  € Ø�M‰M×Ñ×"Ñ" ;Ó/ˆØ�M‰M×Ñ×"Ñ" ;Ó/ˆØ�M‰M×Ñ×"Ñ" ;Ó/ˆØ�M‰M×Ñ×"Ñ" ;Ó/ˆØ�M‰M×Ñ×"Ñ" ;Ó/ˆØ�}‰}×!Ñ!×%Ñ% kÓ2ˆØ�}‰}×!Ñ!×%Ñ% kÓ2ˆØ�}‰}×!Ñ!×%Ñ% kÓ2ˆØ�‰×Ñ×'Ñ'¨¯©¸¸A¸qÔAØ�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEØ�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEØ�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEØ�‰×Ñ×+Ñ+¨D¯O©O¸QÀÔBØ�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEØ�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEØ�‰×Ñ×.Ñ.Ø�O‰O˜T 4¨ô	
ð 	�‰×$Ñ$ T¨!¡W°·±×0BÑ0B×0GÑ0GÑ%GÔHØ�‰×$Ñ$ T¨!¡W°·±×0BÑ0B×0GÑ0GÑ%GÔHØ�‰×$Ñ$ T¨!¡W°·±×0BÑ0B×0GÑ0GÑ%GÔHÜ Ø�m‰m×&Ñ& q¨¡tÓ,Ø�m‰m×&Ñ& q¨¡tÓ,Ø�m‰m×&Ñ& q¨¡tÓ,Ø—‘×)Ñ)¨$¨q©'Ó2Ø—‘×)Ñ)¨$¨q©'Ó2Ø—‘×)Ñ)¨$¨q©'Ó2Ü+Ø—-‘-×*Ñ*¨1¨Q©4Ó0Ø—-‘-×*Ñ*¨1¨Q©4Ó0ôô
ð 	
r'   c                ój   — | j                   j                  |||| | j                  | j                  «      S r    )rŽ   Ú_private_key_bytesrB   r†   )r•   Úencodingrk   Úencryption_algorithms       r%   Úprivate_bytesz_RSAPrivateKey.private_bytesê  s5   € ð �}‰}×/Ñ/ØØØ ØØ�N‰NØ�O‰Oó
ð 	
r'   c                ór   — | j                  «        t        ||«      \  }}t        | j                  ||| |«      S r    )r£   r   rx   rŽ   )r•   r4   r5   re   s       r%   Úsignz_RSAPrivateKey.signù  s7   € ð 	×ÑÔÜ9¸$À	ÓJ‰ˆˆiÜ˜TŸ]™]¨G°YÀÀdÓKÐKr'   N)r    r   r˜   Úbool)ÚreturnÚNone©rÈ   r‡   )r­   Úbytesr5   r   rÈ   rË   )rÈ   r   )rÈ   r   )rÂ   úserialization.Encodingrk   zserialization.PrivateFormatrÃ   z(serialization.KeySerializationEncryptionrÈ   rË   )r4   rË   r5   r   re   ú8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]rÈ   rË   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__rž   r£   r¡   Úpropertyr¨   r¯   r|   r¿   rÄ   rÆ   © r'   r%   rr   rr   k  s·   … ØÓØÓØƒNð/>àð/>ð )-ó/>ób7ó
!ð òó ðóFó;ó!
ðF
à(ð
ð ,ð
ð Gð	
ð
 
ó
ðLàðLð #ðLð Lð	Lð
 
ôLr'   c                  ó¦   — e Zd ZU ded<   ded<   ded<   dd„Zedd„«       Zdd„Zdd	„Zdd
„Z		 	 	 	 	 	 dd„Z
	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Zy)r<   r…   rB   r†   r‡   rˆ   c                ó,  — || _         || _        || _        | j                   j                  j	                  d«      }| j                   j
                  j                  | j                  || j                   j                  j                  | j                   j                  j                  «       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j
                  j                  |d   «      | _
        y )NrŠ   r   )rŽ   r†   rB   rC   rS   r   r“   rD   rE   r”   rˆ   )r•   r    r–   r—   r�   s        r%   rž   z_RSAPublicKey.__init__	  sÆ   € ØˆŒØ#ˆŒØ!ˆŒà�M‰M×Ñ×"Ñ" ;Ó/ˆØ�‰×Ñ×'Ñ'Ø�O‰OØØ�M‰M×Ñ×#Ñ#Ø�M‰M×Ñ×#Ñ#ô		
ð 	�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEØŸ™×+Ñ+×7Ñ7¸¸!¹Ó=ˆ�r'   c                ó   — | j                   S r    r§   r¢   s    r%   r¨   z_RSAPublicKey.key_size  r©   r'   c                ó¨   — t        |t        «      st        S | j                  j                  j                  | j                  |j                  «      dk(  S )Nr9   )r   r<   ÚNotImplementedrŽ   r   ÚEVP_PKEY_cmprB   )r•   Úothers     r%   Ú__eq__z_RSAPublicKey.__eq__  sC   € Ü˜%¤Ô/Ü!Ð!ð �M‰M×Ñ×+Ñ+¨D¯N©N¸E¿O¹OÓLØñð	
r'   c                ó2   — t        | j                  | ||«      S r    )r7   rŽ   )r•   Ú	plaintextr5   s      r%   Úencryptz_RSAPublicKey.encrypt%  s   € Ü˜DŸM™M¨4°¸GÓDÐDr'   c                ó¼  — | j                   j                  j                  d«      }| j                   j                  j                  d«      }| j                   j                  j	                  | j
                  ||| j                   j                  j                  «       | j                   j                  |d   | j                   j                  j                  k7  «       | j                   j                  |d   | j                   j                  j                  k7  «       t        | j                   j                  |d   «      | j                   j                  |d   «      ¬«      S )NrŠ   r   r¶   )
rŽ   rC   rS   r   r“   r†   rD   rE   r   r¾   )r•   r�   r·   s      r%   r¼   z_RSAPublicKey.public_numbers(  sü   € Ø�M‰M×Ñ×"Ñ" ;Ó/ˆØ�M‰M×Ñ×"Ñ" ;Ó/ˆØ�‰×Ñ×'Ñ'Ø�O‰O˜Q  4§=¡=×#5Ñ#5×#:Ñ#:ô	
ð 	�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEØ�‰×$Ñ$ Q q¡T¨T¯]©]×-?Ñ-?×-DÑ-DÑ%DÔEÜØ�m‰m×&Ñ& q¨¡tÓ,Ø�m‰m×&Ñ& q¨¡tÓ,ô
ð 	
r'   c                óh   — | j                   j                  ||| | j                  | j                  «      S r    )rŽ   Ú_public_key_bytesrB   r†   )r•   rÂ   rk   s      r%   Úpublic_bytesz_RSAPublicKey.public_bytes5  s.   € ð
 �}‰}×.Ñ.Ø�f˜d D§N¡N°D·O±Oó
ð 	
r'   c                óV   — t        ||«      \  }}t        | j                  ||| ||«       y r    )r   r~   rŽ   )r•   r}   r4   r5   re   s        r%   Úverifyz_RSAPublicKey.verify>  s-   € ô :¸$À	ÓJ‰ˆˆiÜØ�M‰M˜7 I¨t°YÀõ	
r'   c                ó~   — t        |t        j                  «      rt        d«      ‚t	        | j
                  ||| |«      S )NzoPrehashed is only supported in the sign and verify methods. It cannot be used with recover_data_from_signature.)r   Ú
asym_utilsÚ	Prehashedr+   rƒ   rŽ   )r•   r}   r5   re   s       r%   Úrecover_data_from_signaturez)_RSAPublicKey.recover_data_from_signatureJ  sE   € ô �i¤×!5Ñ!5Ô6ÜðFóð ô  Ø�M‰M˜7 I¨t°Yó
ð 	
r'   N)r    r   rÊ   )rÚ   r…   rÈ   rÇ   )rÝ   rË   r5   r   rÈ   rË   )rÈ   r   )rÂ   rÌ   rk   zserialization.PublicFormatrÈ   rË   )
r}   rË   r4   rË   r5   r   re   rÍ   rÈ   rÉ   )r}   rË   r5   r   re   ú%typing.Optional[hashes.HashAlgorithm]rÈ   rË   )rÎ   rÏ   rÐ   rÑ   rž   rÒ   r¨   rÛ   rÞ   r¼   râ   rä   rè   rÓ   r'   r%   r<   r<     s¾   … ØÓØÓØƒNó>ð òó ðó
óEó
ð
à(ð
ð +ð
ð 
ó	
ð

àð

ð ð

ð #ð	

ð
 Lð

ð 
ó

ð
àð
ð #ð
ð 9ð	
ð
 
ô
r'   )
r    r   r!   r   r"   z)typing.Union[RSAPrivateKey, RSAPublicKey]r#   úhashes.HashAlgorithmrÈ   r‡   )
r    r   r"   ú+typing.Union[_RSAPrivateKey, _RSAPublicKey]r4   rË   r5   r   rÈ   rË   )r    r   r"   rë   r4   rË   r6   r‡   r5   r   rÈ   rË   )
r    r   r"   rë   r5   r   re   ré   rÈ   r‡   )
r    r   r5   r   re   ré   r"   z+typing.Union[_RSAPublicKey, _RSAPrivateKey]rn   z"typing.Callable[[typing.Any], int])r    r   r5   r   re   rê   rv   rr   r4   rË   rÈ   rË   )r    r   r5   r   re   rê   r|   r<   r}   rË   r4   rË   rÈ   rÉ   )r    r   r5   r   re   ré   r|   r<   r}   rË   rÈ   rË   ),Ú
__future__r   r�   ÚtypingÚcryptography.exceptionsr   r   r   Ú*cryptography.hazmat.backends.openssl.utilsr   Úcryptography.hazmat.primitivesr   r	   Ú)cryptography.hazmat.primitives.asymmetricr
   ræ   Ú1cryptography.hazmat.primitives.asymmetric.paddingr   r   r   r   r   r   r   r   r   Ú-cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.backendr   r&   r7   r3   rg   rq   rx   r~   rƒ   rr   r<   rÓ   r'   r%   ú<module>rö      sK  ðõ
 #ã Û ÷ñ õ
÷ AÝ I÷
÷ 
õ 
÷ó ð 
×ÒÝDðØðà	ðð 
3ðð )ð	ð
 	óð,!LØð!Là	4ð!Lð ð!Lð ð	!Lð
 ó!LðH@Øð@à	4ð@ð ð@ð ð	@ð
 ð@ð ó@ðF)Øð)à	4ð)ð ð)ð 5ð	)ð
 	ó)ð`2Øð2àð2ð 5ð2ð 
5ð	2ð
 2ó2ðj'Øð'àð'ð $ð'ð  ð	'ð
 ð'ð ó'ð@Øðàðð $ðð ð	ð
 ðð ðð 
óð6!Øð!àð!ð 5ð!ð ð	!ð
 ð!ð ó!ôHVL�]ô VLôrS
�Lõ S
r'   