Ë
    ýQµig-  ã                  ón  — d dl m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
 d dlmZ  G d„ dej                  ¬	«      ZeZ G d
„ dej                  ¬	«      ZeZ	 d	 	 	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zd d„Zd!d„Zd"d„ZdZ	 	 	 	 	 	 	 	 d#d„Z G d„ d«      Z G d„ d«      Zy)$é    )ÚannotationsN)Úgcd)Ú_serializationÚhashes)ÚAsymmetricPadding)Úutilsc                  ó  — e Zd Zej                  dd„«       Zeej                  d	d„«       «       Zej                  d
d„«       Zej                  	 	 	 	 	 	 	 	 dd„«       Z	ej                  dd„«       Z
ej                  	 	 	 	 	 	 	 	 dd„«       Zy)ÚRSAPrivateKeyc                 ó   — y)z3
        Decrypts the provided ciphertext.
        N© )ÚselfÚ
ciphertextÚpaddings      úO/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/rsa.pyÚdecryptzRSAPrivateKey.decrypt   ó   � ó    c                 ó   — y©z7
        The bit length of the public modulus.
        Nr   ©r   s    r   Úkey_sizezRSAPrivateKey.key_size   r   r   c                 ó   — y)zD
        The RSAPublicKey associated with this private key.
        Nr   r   s    r   Ú
public_keyzRSAPrivateKey.public_key   r   r   c                 ó   — y)z!
        Signs the data.
        Nr   )r   Údatar   Ú	algorithms       r   ÚsignzRSAPrivateKey.sign$   r   r   c                 ó   — y)z/
        Returns an RSAPrivateNumbers.
        Nr   r   s    r   Úprivate_numberszRSAPrivateKey.private_numbers/   r   r   c                 ó   — y©z6
        Returns the key serialized as bytes.
        Nr   )r   ÚencodingÚformatÚencryption_algorithms       r   Úprivate_byteszRSAPrivateKey.private_bytes5   r   r   N)r   Úbytesr   r   Úreturnr&   ©r'   Úint)r'   ÚRSAPublicKey)r   r&   r   r   r   ú8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]r'   r&   )r'   ÚRSAPrivateNumbers)r"   ú_serialization.Encodingr#   z_serialization.PrivateFormatr$   z)_serialization.KeySerializationEncryptionr'   r&   )Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   Úpropertyr   r   r   r   r%   r   r   r   r
   r
      sò   „ Ø×Ñòó ðð
 Ø×Ñòó ó ðð
 	×Ñòó ðð
 	×Ñðàðð #ðð Lð	ð
 
òó ðð 	×Ñòó ðð
 	×Ñðà)ðð -ðð Hð	ð
 
òó ñr   r
   )Ú	metaclassc                  óP  — e Zd Zej                  d	d„«       Zeej                  d
d„«       «       Zej                  dd„«       Zej                  	 	 	 	 	 	 dd„«       Z	ej                  	 	 	 	 	 	 	 	 	 	 dd„«       Z
ej                  	 	 	 	 	 	 	 	 dd„«       Zej                  dd„«       Zy)r*   c                 ó   — y)z/
        Encrypts the given plaintext.
        Nr   )r   Ú	plaintextr   s      r   ÚencryptzRSAPublicKey.encryptE   r   r   c                 ó   — yr   r   r   s    r   r   zRSAPublicKey.key_sizeK   r   r   c                 ó   — y)z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   Úpublic_numberszRSAPublicKey.public_numbersR   r   r   c                 ó   — yr!   r   )r   r"   r#   s      r   Úpublic_byteszRSAPublicKey.public_bytesX   r   r   c                 ó   — y)z5
        Verifies the signature of the data.
        Nr   )r   Ú	signaturer   r   r   s        r   ÚverifyzRSAPublicKey.verifyb   r   r   c                 ó   — y)z@
        Recovers the original data from the signature.
        Nr   )r   r?   r   r   s       r   Úrecover_data_from_signaturez(RSAPublicKey.recover_data_from_signaturen   r   r   c                 ó   — y)z"
        Checks equality.
        Nr   ©r   Úothers     r   Ú__eq__zRSAPublicKey.__eq__y   r   r   N)r7   r&   r   r   r'   r&   r(   ©r'   ÚRSAPublicNumbers)r"   r-   r#   z_serialization.PublicFormatr'   r&   )
r?   r&   r   r&   r   r   r   r+   r'   ÚNone)r?   r&   r   r   r   z%typing.Optional[hashes.HashAlgorithm]r'   r&   ©rE   Úobjectr'   Úbool)r.   r/   r0   r1   r2   r8   r3   r   r;   r=   r@   rB   rF   r   r   r   r*   r*   D   s1  „ Ø×Ñòó ðð
 Ø×Ñòó ó ðð
 	×Ñòó ðð
 	×Ñðà)ðð ,ðð 
ò	ó ðð 	×Ñð	àð	ð ð	ð #ð		ð
 Lð	ð 
ò	ó ð	ð 	×Ñðàðð #ðð 9ð	ð
 
òó ðð 	×Ñòó ñr   r*   c                óJ   — ddl m} t        | |«       |j                  | |«      S ©Nr   )Úbackend)Ú,cryptography.hazmat.backends.openssl.backendrO   Ú_verify_rsa_parametersÚgenerate_rsa_private_key)Úpublic_exponentr   rO   Úossls       r   Úgenerate_private_keyrU   ƒ   s%   € õ
 Mä˜?¨HÔ5Ø×(Ñ(¨¸(ÓCÐCr   c                óB   — | dvrt        d«      ‚|dk  rt        d«      ‚y )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)rS   r   s     r   rQ   rQ   Ž   s6   € Ø˜jÑ(Üð?ó
ð 	
ð
 �#‚~ÜÐ>Ó?Ð?ð r   c                ó¦  — |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  |k7  rt        d«      ‚y )NrW   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.rX   )ÚpÚqÚprivate_exponentÚdmp1Údmq1ÚiqmprS   Úmoduluss           r   Ú_check_private_key_componentsrc   ™   s	  € ð �‚{ÜÐ0Ó1Ð1àˆG‚|ÜÐ/Ó0Ð0àˆG‚|ÜÐ/Ó0Ð0àˆw‚ÜÐ2Ó3Ð3àˆw‚ÜÐ2Ó3Ð3àˆw‚ÜÐ2Ó3Ð3à˜7Ò"ÜÐ>Ó?Ð?à˜Ò˜o°Ò8ÜÐFÓGÐGà˜Ñ˜aÒÜÐ7Ó8Ð8àˆa�x�1‚}ÜÐ,Ó-Ð-àˆa�x�1‚}ÜÐ,Ó-Ð-àˆ1�u�ÒÜÐ2Ó3Ð3ð r   c                ót   — |dk  rt        d«      ‚| dk  s| |k\  rt        d«      ‚| dz  dk(  rt        d«      ‚y )NrW   zn must be >= 3.ze must be >= 3 and < n.r[   r   ze must be odd.rX   )ÚeÚns     r   Ú_check_public_key_componentsrg   È   sJ   € Øˆ1‚uÜÐ*Ó+Ð+àˆ1‚u��Q’ÜÐ2Ó3Ð3àˆ1�u�‚zÜÐ)Ó*Ð*ð r   c                óx   — d\  }}| |}}|dkD  r(t        ||«      \  }}|||z  z
  }||||f\  }}}}|dkD  rŒ(||z  S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )r[   r   r   )Údivmod)	re   ÚmÚx1Úx2ÚaÚbr]   ÚrÚxns	            r   Ú_modinvrq   Ó   sb   € ð �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.
    )rq   )r\   r]   s     r   Úrsa_crt_iqmprs   à   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   )r^   r\   s     r   Úrsa_crt_dmp1ru   ç   ó   € ð
 ˜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   )r^   r]   s     r   Úrsa_crt_dmq1rx   ï   rv   r   iè  c                ó�  — ||z  dz
  }|}|dz  dk(  r|dz  }|dz  dk(  rŒd}d}|sh|t         k  r_|}||k  rGt        ||| «      }|dk7  r*|| dz
  k7  r"t        |d| «      dk(  rt        |dz   | «      }	d}n|dz  }||k  rŒG|dz  }|s
|t         k  rŒ_|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   rY   ri   Úsorted)rf   re   ÚdÚktotÚtÚspottedrm   ÚkÚcandr\   r]   ro   s               r   Úrsa_recover_prime_factorsr…   ý   s  € ð ˆq‰5�1‰9€Dð 	€AØ
ˆa‰%�1Š*Ø�‰Fˆð ˆa‰%�1‹*ð €GØ	€AÙ˜!Ô4Ò4Øˆà�$ŠhÜ�q˜!˜Q“<ˆDà�qŠy˜T a¨!¡eš_´°T¸1¸a³ÀAÒ1Eô ˜˜q™ !Ó$�Ø�ØØ�‰FˆAð �$‹hð 	
ˆQ‰ˆñ ˜!Ô4Ó4ñ ÜÐMÓNÐNä�!�Q‹<�D€A€qØ�Š6€Mˆ6Ü�1�a�& $Ô'�D€A€qØˆqˆ6€Mr   c                  óÚ   — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Z	edd„«       Z
edd„«       Z	 dd
dœ	 	 	 	 	 dd„Zdd„Zdd„Zy	)r,   c                ór  — t        |t        «      rPt        |t        «      r@t        |t        «      r0t        |t        «      r t        |t        «      rt        |t        «      st        d«      ‚t        |t        «      st        d«      ‚|| _        || _        || _        || _        || _        || _	        || _
        y )NzNRSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must all be an integers.zFRSAPrivateNumbers public_numbers must be an RSAPublicNumbers instance.)Ú
isinstancer)   Ú	TypeErrorrH   Ú_pÚ_qÚ_dÚ_dmp1Ú_dmq1Ú_iqmpÚ_public_numbers)r   r\   r]   r   r_   r`   ra   r;   s           r   Ú__init__zRSAPrivateNumbers.__init__+  s¥   € ô ˜1œcÔ"Ü˜a¤Ô%Ü˜a¤Ô%Ü˜d¤CÔ(Ü˜d¤CÔ(Ü˜d¤CÔ(äð'óð ô
 ˜.Ô*:Ô;Üðóð ð
 ˆŒØˆŒØˆŒØˆŒ
ØˆŒ
ØˆŒ
Ø-ˆÕr   c                ó   — | j                   S ©N)rŠ   r   s    r   r\   zRSAPrivateNumbers.pP  ó   € à�w‰wˆr   c                ó   — | j                   S r“   )r‹   r   s    r   r]   zRSAPrivateNumbers.qT  r”   r   c                ó   — | j                   S r“   )rŒ   r   s    r   r   zRSAPrivateNumbers.dX  r”   r   c                ó   — | j                   S r“   )r�   r   s    r   r_   zRSAPrivateNumbers.dmp1\  ó   € à�z‰zÐr   c                ó   — | j                   S r“   )rŽ   r   s    r   r`   zRSAPrivateNumbers.dmq1`  r˜   r   c                ó   — | j                   S r“   )r�   r   s    r   ra   zRSAPrivateNumbers.iqmpd  r˜   r   c                ó   — | j                   S r“   )r�   r   s    r   r;   z RSAPrivateNumbers.public_numbersh  s   € à×#Ñ#Ð#r   NF)Úunsafe_skip_rsa_key_validationc               ó2   — ddl m} |j                  | |«      S rN   )rP   rO   Úload_rsa_private_numbers)r   rO   rœ   rT   s       r   Úprivate_keyzRSAPrivateNumbers.private_keyl  s"   € õ	
ð ×,Ñ,ØÐ0ó
ð 	
r   c                ó¤  — t        |t        «      st        S | j                  |j                  k(  xr  | j                  |j                  k(  xr… | j
                  |j
                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r“   )
rˆ   r,   ÚNotImplementedr\   r]   r   r_   r`   ra   r;   rD   s     r   rF   zRSAPrivateNumbers.__eq__z  s´   € Ü˜%Ô!2Ô3Ü!Ð!ð �F‰F�e—g‘gÑò <Ø—‘˜%Ÿ'™'Ñ!ò<à—‘˜%Ÿ'™'Ñ!ò<ð —	‘	˜UŸZ™ZÑ'ò<ð —	‘	˜UŸZ™ZÑ'ò	<ð
 —	‘	˜UŸZ™ZÑ'ò<ð ×#Ñ# u×';Ñ';Ñ;ð	
r   c           	     ó²   — t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  f«      S r“   )Úhashr\   r]   r   r_   r`   ra   r;   r   s    r   Ú__hash__zRSAPrivateNumbers.__hash__ˆ  sG   € Üà—‘Ø—‘Ø—‘Ø—	‘	Ø—	‘	Ø—	‘	Ø×#Ñ#ðó

ð 
	
r   )r\   r)   r]   r)   r   r)   r_   r)   r`   r)   ra   r)   r;   rH   r(   rG   r“   )rO   ú
typing.Anyrœ   rL   r'   r
   rJ   )r.   r/   r0   r‘   r3   r\   r]   r   r_   r`   ra   r;   rŸ   rF   r¤   r   r   r   r,   r,   *  s  „ ð#.àð#.ð ð#.ð ð	#.ð
 ð#.ð ð#.ð ð#.ð )ó#.ðJ òó ðð òó ðð òó ðð òó ðð òó ðð òó ðð ò$ó ð$ð
 #ð
ð 05ñ	
àð
ð )-ð	
ð
 
ó
ó
ô
r   r,   c                  óZ   — e Zd Zd	d„Zed
d„«       Zed
d„«       Zddd„Zdd„Zdd„Z	d
d„Z
y)rH   c                óv   — t        |t        «      rt        |t        «      st        d«      ‚|| _        || _        y )Nz,RSAPublicNumbers arguments must be integers.)rˆ   r)   r‰   Ú_eÚ_n)r   re   rf   s      r   r‘   zRSAPublicNumbers.__init__—  s/   € Ü˜!œSÔ!¬°A´sÔ);ÜÐJÓKÐKàˆŒØˆ�r   c                ó   — | j                   S r“   )r¨   r   s    r   re   zRSAPublicNumbers.ež  r”   r   c                ó   — | j                   S r“   )r©   r   s    r   rf   zRSAPublicNumbers.n¢  r”   r   Nc                ó0   — ddl m} |j                  | «      S rN   )rP   rO   Úload_rsa_public_numbers)r   rO   rT   s      r   r   zRSAPublicNumbers.public_key¦  s   € õ	
ð ×+Ñ+¨DÓ1Ð1r   c                ó$   — dj                  | «      S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r#   r   s    r   Ú__repr__zRSAPublicNumbers.__repr__­  s   € Ø5×<Ñ<¸TÓBÐBr   c                ó–   — t        |t        «      st        S | j                  |j                  k(  xr | j                  |j                  k(  S r“   )rˆ   rH   r¡   re   rf   rD   s     r   rF   zRSAPublicNumbers.__eq__°  s8   € Ü˜%Ô!1Ô2Ü!Ð!à�v‰v˜Ÿ™Ñ Ò6 T§V¡V¨u¯w©wÑ%6Ð6r   c                óD   — t        | j                  | j                  f«      S r“   )r£   re   rf   r   s    r   r¤   zRSAPublicNumbers.__hash__¶  s   € Ü�T—V‘V˜TŸV™VÐ$Ó%Ð%r   )re   r)   rf   r)   r(   r“   )rO   r¥   r'   r*   )r'   ÚstrrJ   )r.   r/   r0   r‘   r3   re   rf   r   r¯   rF   r¤   r   r   r   rH   rH   –  sD   „ óð òó ðð òó ðô2óCó7ô&r   rH   r“   )rS   r)   r   r)   rO   r¥   r'   r
   )rS   r)   r   r)   r'   rI   )r\   r)   r]   r)   r^   r)   r_   r)   r`   r)   ra   r)   rS   r)   rb   r)   r'   rI   )re   r)   rf   r)   r'   rI   )re   r)   rj   r)   r'   r)   )r\   r)   r]   r)   r'   r)   )r^   r)   r\   r)   r'   r)   )r^   r)   r]   r)   r'   r)   )rf   r)   re   r)   r   r)   r'   ztyping.Tuple[int, int])Ú
__future__r   r1   ÚtypingÚmathr   Úcryptography.hazmat.primitivesr   r   Ú*cryptography.hazmat.primitives._asymmetricr   Ú)cryptography.hazmat.primitives.asymmetricr   Ú
asym_utilsÚABCMetar
   ÚRSAPrivateKeyWithSerializationr*   ÚRSAPublicKeyWithSerializationrU   rQ   rc   rg   rq   rs   ru   rx   r|   r…   r,   rH   r   r   r   ú<module>r½      sA  ðõ
 #ã 
Û Ý ç AÝ HÝ Iô.˜cŸk™kõ .ðb "/Ð ô9˜SŸ[™[õ 9ðx !-Ð ð ðDØðDàðDð ðDð ó	Dó@ð,4Ø
ð,4à
ð,4ð ð,4ð ð	,4ð
 ð,4ð ð,4ð ð,4ð ð,4ð 
ó,4ó^+ó
óó&ó&ð Ð ð*Ø
ð*Øð*Øð*àó*÷Zi
ñ i
÷X!&ò !&r   