§
    pïg:,  ã                   óÖ  — 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 d dl	m
Z  G d„ de j        ¬¦  «        ZeZ G d	„ d
e j        ¬¦  «        ZeZ	 d(dededej        defd„Zdededdfd„Zdededededededededdfd„Zdededdfd„Zdededefd„Zdededefd„Zdededefd„Zdededefd „Zd!Zdeded"edej        eef         fd#„Z G d$„ d%¦  «        Z G d&„ d'¦  «        ZdS ))é    N)Úgcd)Ú_serializationÚhashes)ÚAsymmetricPadding)Úutilsc            	       óV  — e Zd Zej        dededefd„¦   «         Zej        de	fd„¦   «         Z
ej        dd„¦   «         Zej        deded	ej        ej        ej        f         defd
„¦   «         Zej        dd„¦   «         Zej        dej        dej        dej        defd„¦   «         ZdS )ÚRSAPrivateKeyÚ
ciphertextÚpaddingÚreturnc                 ó   — dS )z3
        Decrypts the provided ciphertext.
        N© )Úselfr
   r   s      úO/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/rsa.pyÚdecryptzRSAPrivateKey.decrypt   ó   € € € ó    c                 ó   — dS ©z7
        The bit length of the public modulus.
        Nr   ©r   s    r   Úkey_sizezRSAPrivateKey.key_size   r   r   ÚRSAPublicKeyc                 ó   — dS )zD
        The RSAPublicKey associated with this private key.
        Nr   r   s    r   Ú
public_keyzRSAPrivateKey.public_key   r   r   ÚdataÚ	algorithmc                 ó   — dS )z!
        Signs the data.
        Nr   )r   r   r   r   s       r   ÚsignzRSAPrivateKey.sign$   r   r   ÚRSAPrivateNumbersc                 ó   — dS )z/
        Returns an RSAPrivateNumbers.
        Nr   r   s    r   Úprivate_numberszRSAPrivateKey.private_numbers/   r   r   ÚencodingÚformatÚencryption_algorithmc                 ó   — dS ©z6
        Returns the key serialized as bytes.
        Nr   )r   r"   r#   r$   s       r   Úprivate_byteszRSAPrivateKey.private_bytes5   r   r   N)r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodÚbytesr   r   ÚabstractpropertyÚintr   r   ÚtypingÚUnionÚ
asym_utilsÚ	Prehashedr   ÚHashAlgorithmr   r!   r   ÚEncodingÚPrivateFormatÚKeySerializationEncryptionr'   r   r   r   r	   r	      sn  € € € € € ØÔð %ð Ð2Cð Èð ð ð ñ Ôðð
 	Ôð˜#ð ð ð ñ Ôðð
 	Ôðð ð ñ Ôðð
 	Ôðàðð #ðð ”< 
Ô 4°fÔ6JÐ JÔKð	ð
 
ðð ð ñ Ôðð 	Ôðð ð ñ Ôðð
 	Ôðà Ô)ðð Ô,ðð -ÔGð	ð
 
ðð ð ñ Ôðð ð r   r	   )Ú	metaclassc                   ó|  — e Zd Zej        dededefd„¦   «         Zej        de	fd„¦   «         Z
ej        dd„¦   «         Zej        dej        d	ej        defd
„¦   «         Zej        dedededej        ej        ej        f         ddf
d„¦   «         Zej        dededej        ej                 defd„¦   «         ZdS )r   Ú	plaintextr   r   c                 ó   — dS )z/
        Encrypts the given plaintext.
        Nr   )r   r:   r   s      r   ÚencryptzRSAPublicKey.encryptE   r   r   c                 ó   — dS r   r   r   s    r   r   zRSAPublicKey.key_sizeK   r   r   ÚRSAPublicNumbersc                 ó   — dS )z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   Úpublic_numberszRSAPublicKey.public_numbersQ   r   r   r"   r#   c                 ó   — dS r&   r   )r   r"   r#   s      r   Úpublic_byteszRSAPublicKey.public_bytesW   r   r   Ú	signaturer   r   Nc                 ó   — dS )z5
        Verifies the signature of the data.
        Nr   )r   rC   r   r   r   s        r   ÚverifyzRSAPublicKey.verifya   r   r   c                 ó   — dS )z@
        Recovers the original data from the signature.
        Nr   )r   rC   r   r   s       r   Úrecover_data_from_signaturez(RSAPublicKey.recover_data_from_signaturem   r   r   ©r   r>   )r(   r)   r*   r+   r,   r-   r   r<   r.   r/   r   r@   r   r5   ÚPublicFormatrB   r0   r1   r2   r3   r   r4   rE   ÚOptionalrG   r   r   r   r   r   D   s›  € € € € € ØÔð ð Ð1Bð Àuð ð ð ñ Ôðð
 	Ôð˜#ð ð ð ñ Ôðð
 	Ôðð ð ñ Ôðð
 	Ôðà Ô)ðð Ô+ðð 
ð	ð ð ñ Ôðð 	Ôð	àð	ð ð	ð #ð		ð
 ”< 
Ô 4°fÔ6JÐ JÔKð	ð 
ð	ð 	ð 	ñ Ôð	ð 	Ôðàðð #ðð ”? 6Ô#7Ô8ð	ð
 
ðð ð ñ Ôðð ð r   r   Úpublic_exponentr   Úbackendr   c                 óZ   — ddl m} t          | |¦  «         |                     | |¦  «        S ©Nr   )rL   )Ú,cryptography.hazmat.backends.openssl.backendrL   Ú_verify_rsa_parametersÚgenerate_rsa_private_key)rK   r   rL   Úossls       r   Úgenerate_private_keyrS   |   s=   € ð
 MÐLÐLÐLÐLÐLå˜?¨HÑ5Ô5Ð5Ø×(Ò(¨¸(ÑCÔCÐCr   c                 óV   — | dvrt          d¦  «        ‚|dk     rt          d¦  «        ‚d S )N)é   i  zopublic_exponent must be either 3 (for legacy compatibility) or 65537. Almost everyone should choose 65537 here!i   z#key_size must be at least 512-bits.©Ú
ValueError)rK   r   s     r   rP   rP   ‡   sE   € Ø˜jÐ(Ð(Ýð?ñ
ô 
ð 	
ð
 �#‚~€~ÝÐ>Ñ?Ô?Ð?ð €~r   ÚpÚqÚprivate_exponentÚdmp1Údmq1ÚiqmpÚmodulusc                 ó"  — |dk     rt          d¦  «        ‚| |k    rt          d¦  «        ‚||k    rt          d¦  «        ‚||k    rt          d¦  «        ‚||k    rt          d¦  «        ‚||k    rt          d¦  «        ‚||k    rt          d¦  «        ‚|dk     s||k    rt          d	¦  «        ‚|d
z  dk    rt          d¦  «        ‚|d
z  dk    rt          d¦  «        ‚|d
z  dk    rt          d¦  «        ‚| |z  |k    rt          d¦  «        ‚d S )NrU   zmodulus must be >= 3.zp must be < modulus.zq must be < modulus.zdmp1 must be < modulus.zdmq1 must be < modulus.ziqmp must be < modulus.z#private_exponent must be < modulus.z+public_exponent must be >= 3 and < modulus.é   r   zpublic_exponent must be odd.zdmp1 must be odd.zdmq1 must be odd.zp*q must equal modulus.rV   )rX   rY   rZ   r[   r\   r]   rK   r^   s           r   Ú_check_private_key_componentsra   ’   sO  € ð �‚{€{ÝÐ0Ñ1Ô1Ð1àˆG‚|€|ÝÐ/Ñ0Ô0Ð0àˆG‚|€|ÝÐ/Ñ0Ô0Ð0àˆw‚€ÝÐ2Ñ3Ô3Ð3àˆw‚€ÝÐ2Ñ3Ô3Ð3àˆw‚€ÝÐ2Ñ3Ô3Ð3à˜7Ò"Ð"ÝÐ>Ñ?Ô?Ð?à˜ÒÐ˜o°Ò8Ð8ÝÐFÑGÔGÐGà˜Ñ˜aÒÐÝÐ7Ñ8Ô8Ð8àˆa�x�1‚}€}ÝÐ,Ñ-Ô-Ð-àˆa�x�1‚}€}ÝÐ,Ñ-Ô-Ð-àˆ1�u�ÒÐÝÐ2Ñ3Ô3Ð3ð Ðr   ÚeÚnc                 ó–   — |dk     rt          d¦  «        ‚| dk     s| |k    rt          d¦  «        ‚| dz  dk    rt          d¦  «        ‚d S )NrU   zn must be >= 3.ze must be >= 3 and < n.r`   r   ze must be odd.rV   )rb   rc   s     r   Ú_check_public_key_componentsre   Á   s]   € Øˆ1‚u€uÝÐ*Ñ+Ô+Ð+àˆ1‚u€u��Q’�ÝÐ2Ñ3Ô3Ð3àˆ1�u�‚z€zÝÐ)Ñ*Ô*Ð*ð €zr   Úmc                 ó‚   — d\  }}| |}}|dk    r,t          ||¦  «        \  }}|||z  z
  }||||f\  }}}}|dk    °,||z  S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )r`   r   r   )Údivmod)	rb   rf   Úx1Úx2ÚaÚbrY   ÚrÚxns	            r   Ú_modinvro   Ì   sh   € ð �F€BˆØˆa€q€AØ
ˆaŠ%ˆ%Ý�a˜‰|Œ|‰ˆˆ1Ø�!�b‘&‰[ˆØ˜!˜R �|‰ˆˆ1ˆb�"ð ˆaŠ%ˆ%ð �‰6€Mr   c                 ó"   — t          || ¦  «        S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )ro   )rX   rY   s     r   Úrsa_crt_iqmprq   Ù   s   € õ �1�a‰=Œ=Ðr   c                 ó   — | |dz
  z  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    r`   r   )rZ   rX   s     r   Úrsa_crt_dmp1rs   à   ó   € ð
 ˜q 1™uÑ%Ð%r   c                 ó   — | |dz
  z  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    r`   r   )rZ   rY   s     r   Úrsa_crt_dmq1rv   è   rt   r   iè  Údc                 óÒ  — ||z  dz
  }|}|dz  dk    r|dz  }|dz  dk    °d}d}|s{|t           k     rp|}||k     rVt          ||| ¦  «        }|dk    r4|| dz
  k    r+t          |d| ¦  «        dk    rt          |dz   | ¦  «        }	d}n|dz  }||k     °V|dz  }|s|t           k     °p|st          d¦  «        ‚t	          | |	¦  «        \  }
}|dk    sJ ‚t          |	|
fd¬¦  «        \  }	}
|	|
fS )z¡
    Compute factors p and q from the private exponent d. We assume that n has
    no more than two factors. This function is adapted from code in PyCrypto.
    r`   é   r   FTz2Unable to compute factors p and q from exponent d.)Úreverse)Ú_MAX_RECOVERY_ATTEMPTSÚpowr   rW   rh   Úsorted)rc   rb   rw   ÚktotÚtÚspottedrk   ÚkÚcandrX   rY   rm   s               r   Úrsa_recover_prime_factorsrƒ   ö   sN  € ð ˆq‰5�1‰9€Dð 	€AØ
ˆa‰%�1Š*ˆ*Ø�‰Fˆð ˆa‰%�1Š*ˆ*ð €GØ	€AØð ˜!Õ4Ò4Ð4Øˆà�$ŠhˆhÝ�q˜!˜Q‘<”<ˆDà�qŠyˆy˜T a¨!¡eš_˜_µ°T¸1¸a±´ÀAÒ1EÐ1Eõ ˜˜q™ !Ñ$Ô$�Ø�ØØ�‰FˆAð �$Šhˆhð 	
ˆQ‰ˆð ð ˜!Õ4Ò4Ð4ð ð OÝÐMÑNÔNÐNå�!�Q‰<Œ<�D€A€qØ�Š6ˆ6ˆ6ˆ6Ý�1�a�& $Ð'Ñ'Ô'�D€A€qØˆqˆ6€Mr   c                   ó*  — e Zd Zdededededededdfd	„Zed
efd„¦   «         Zed
efd„¦   «         Zed
efd„¦   «         Zed
efd„¦   «         Z	ed
efd„¦   «         Z
ed
efd„¦   «         Zedd„¦   «         Zddej        d
efd„Zded
efd„Zd
efd„ZdS )r   rX   rY   rw   r[   r\   r]   r@   r>   c                 óÊ  — t          |t          ¦  «        rit          |t          ¦  «        rTt          |t          ¦  «        r?t          |t          ¦  «        r*t          |t          ¦  «        rt          |t          ¦  «        st          d¦  «        ‚t          |t          ¦  «        st          d¦  «        ‚|| _        || _        || _        || _        || _        || _	        || _
        d S )NzNRSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must all be an integers.zFRSAPrivateNumbers public_numbers must be an RSAPublicNumbers instance.)Ú
isinstancer/   Ú	TypeErrorr>   Ú_pÚ_qÚ_dÚ_dmp1Ú_dmq1Ú_iqmpÚ_public_numbers)r   rX   rY   rw   r[   r\   r]   r@   s           r   Ú__init__zRSAPrivateNumbers.__init__$  s÷   € õ ˜1�cÑ"Ô"ð	å˜a¥Ñ%Ô%ð	õ ˜a¥Ñ%Ô%ð	õ ˜d¥CÑ(Ô(ð		õ
 ˜d¥CÑ(Ô(ð	õ ˜d¥CÑ(Ô(ð	õ ð'ñô ð õ
 ˜.Õ*:Ñ;Ô;ð 	Ýðñô ð ð
 ˆŒØˆŒØˆŒØˆŒ
ØˆŒ
ØˆŒ
Ø-ˆÔÐÐr   r   c                 ó   — | j         S ©N)rˆ   r   s    r   rX   zRSAPrivateNumbers.pI  ó	   € àŒwˆr   c                 ó   — | j         S r‘   )r‰   r   s    r   rY   zRSAPrivateNumbers.qM  r’   r   c                 ó   — | j         S r‘   )rŠ   r   s    r   rw   zRSAPrivateNumbers.dQ  r’   r   c                 ó   — | j         S r‘   )r‹   r   s    r   r[   zRSAPrivateNumbers.dmp1U  ó
   € àŒzÐr   c                 ó   — | j         S r‘   )rŒ   r   s    r   r\   zRSAPrivateNumbers.dmq1Y  r–   r   c                 ó   — | j         S r‘   )r�   r   s    r   r]   zRSAPrivateNumbers.iqmp]  r–   r   c                 ó   — | j         S r‘   )rŽ   r   s    r   r@   z RSAPrivateNumbers.public_numbersa  s   € àÔ#Ð#r   NrL   c                 ó8   — ddl m} |                     | ¦  «        S rN   )rO   rL   Úload_rsa_private_numbers©r   rL   rR   s      r   Úprivate_keyzRSAPrivateNumbers.private_keye  s6   € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ×,Ò,¨TÑ2Ô2Ð2r   Úotherc                 ó  — t          |t          ¦  «        st          S | j        |j        k    o_| j        |j        k    oO| j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j	        |j	        k    S r‘   )
r†   r   ÚNotImplementedrX   rY   rw   r[   r\   r]   r@   ©r   rž   s     r   Ú__eq__zRSAPrivateNumbers.__eq__l  sž   € Ý˜%Õ!2Ñ3Ô3ð 	"Ý!Ð!ð ŒF�e”gÒð <Ø”˜%œ'Ò!ð<à”˜%œ'Ò!ð<ð ”	˜UœZÒ'ð<ð ”	˜UœZÒ'ð	<ð
 ”	˜UœZÒ'ð<ð Ô# uÔ';Ò;ð	
r   c           	      ót   — t          | j        | j        | j        | j        | j        | j        | j        f¦  «        S r‘   )ÚhashrX   rY   rw   r[   r\   r]   r@   r   s    r   Ú__hash__zRSAPrivateNumbers.__hash__z  s=   € Ýà”Ø”Ø”Ø”	Ø”	Ø”	ØÔ#ðñ

ô 

ð 
	
r   rH   r‘   )r(   r)   r*   r/   r�   ÚpropertyrX   rY   rw   r[   r\   r]   r@   r0   ÚAnyr	   r�   ÚobjectÚboolr¢   r¥   r   r   r   r   r   #  sÝ  € € € € € ð#.àð#.ð ð#.ð ð	#.ð
 ð#.ð ð#.ð ð#.ð +ð#.ð #.ð #.ð #.ðJ ð�3ð ð ð ñ „Xðð ð�3ð ð ð ñ „Xðð ð�3ð ð ð ñ „Xðð ð�cð ð ð ñ „Xðð ð�cð ð ð ñ „Xðð ð�cð ð ð ñ „Xðð ð$ð $ð $ñ „Xð$ð3ð 3 6¤:ð 3¸ð 3ð 3ð 3ð 3ð
˜Fð 
 tð 
ð 
ð 
ð 
ð
˜#ð 
ð 
ð 
ð 
ð 
ð 
r   r   c                   óš   — e Zd Zdedefd„Zedefd„¦   «         Zedefd„¦   «         Zddej	        de
fd	„Zdefd
„Zdedefd„Zdefd„ZdS )r>   rb   rc   c                 ó”   — t          |t          ¦  «        rt          |t          ¦  «        st          d¦  «        ‚|| _        || _        d S )Nz,RSAPublicNumbers arguments must be integers.)r†   r/   r‡   Ú_eÚ_n)r   rb   rc   s      r   r�   zRSAPublicNumbers.__init__‰  sH   € Ý˜!�SÑ!Ô!ð 	L­°AµsÑ);Ô);ð 	LÝÐJÑKÔKÐKàˆŒØˆŒˆˆr   r   c                 ó   — | j         S r‘   )r¬   r   s    r   rb   zRSAPublicNumbers.e�  r’   r   c                 ó   — | j         S r‘   )r­   r   s    r   rc   zRSAPublicNumbers.n”  r’   r   NrL   c                 ó8   — ddl m} |                     | ¦  «        S rN   )rO   rL   Úload_rsa_public_numbersrœ   s      r   r   zRSAPublicNumbers.public_key˜  s6   € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ×+Ò+¨DÑ1Ô1Ð1r   c                 ó,   — d                      | ¦  «        S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r#   r   s    r   Ú__repr__zRSAPublicNumbers.__repr__Ÿ  s   € Ø5×<Ò<¸TÑBÔBÐBr   rž   c                 óz   — t          |t          ¦  «        st          S | j        |j        k    o| j        |j        k    S r‘   )r†   r>   r    rb   rc   r¡   s     r   r¢   zRSAPublicNumbers.__eq__¢  s8   € Ý˜%Õ!1Ñ2Ô2ð 	"Ý!Ð!àŒv˜œÒ Ð6 T¤V¨u¬wÒ%6Ð6r   c                 ó8   — t          | j        | j        f¦  «        S r‘   )r¤   rb   rc   r   s    r   r¥   zRSAPublicNumbers.__hash__¨  s   € Ý�T”V˜TœVÐ$Ñ%Ô%Ð%r   r‘   )r(   r)   r*   r/   r�   r¦   rb   rc   r0   r§   r   r   Ústrr³   r¨   r©   r¢   r¥   r   r   r   r>   r>   ˆ  s
  € € € € € ð˜#ð  #ð ð ð ð ð ð�3ð ð ð ñ „Xðð ð�3ð ð ð ñ „Xðð2ð 2 &¤*ð 2¸ð 2ð 2ð 2ð 2ðC˜#ð Cð Cð Cð Cð7˜Fð 7 tð 7ð 7ð 7ð 7ð&˜#ð &ð &ð &ð &ð &ð &r   r>   r‘   ) r+   r0   Úmathr   Úcryptography.hazmat.primitivesr   r   Ú*cryptography.hazmat.primitives._asymmetricr   Ú)cryptography.hazmat.primitives.asymmetricr   r2   ÚABCMetar	   ÚRSAPrivateKeyWithSerializationr   ÚRSAPublicKeyWithSerializationr/   r§   rS   rP   ra   re   ro   rq   rs   rv   r{   ÚTuplerƒ   r   r>   r   r   r   ú<module>r¿      sG  ðð €
€
€
Ø €€€Ø Ð Ð Ð Ð Ð à AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ HÐ HÐ HÐ HÐ HÐ Hðð ð ð ð ð ð
-ð -ð -ð -ð -˜cœkð -ñ -ô -ð -ð` "/Ð ð2ð 2ð 2ð 2ð 2˜Sœ[ð 2ñ 2ô 2ð 2ðj !-Ð ð ðDð DØðDàðDð ŒZðDð ð	Dð Dð Dð Dð@¨Cð @¸3ð @À4ð @ð @ð @ð @ð,4Ø
ð,4à
ð,4ð ð,4ð ð	,4ð
 ð,4ð ð,4ð ð,4ð ð,4ð 
ð,4ð ,4ð ,4ð ,4ð^+ Cð +¨Cð +°Dð +ð +ð +ð +ð
ˆsð 
�sð 
˜sð 
ð 
ð 
ð 
ð�Cð ˜Cð  Cð ð ð ð ð& 3ð &¨3ð &°3ð &ð &ð &ð &ð& 3ð &¨3ð &°3ð &ð &ð &ð &ð Ð ð*Ø
ð*Øð*Øð*à„\�#�s�(Ôð*ð *ð *ð *ðZb
ð b
ð b
ð b
ð b
ñ b
ô b
ð b
ðJ!&ð !&ð !&ð !&ð !&ñ !&ô !&ð !&ð !&ð !&r   