o
    àý°j,!  ã                   @  s   d dl mZ d dlZd dlZd dlZd dl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 G dd	„ d	ejd
�ZeZe e
jj¡ G dd„ dejd
�ZeZe e
jj¡ e
jjZe
jjZ	d-d.dd„Zd/dd„Zd0dd„Zd1dd„Zd2d!d"„Z d3d#d$„Z!d4d%d&„Z"d'Z#d5d+d,„Z$dS )6é    )ÚannotationsN)ÚgcdÚlcm)Úopenssl)Ú_serializationÚhashes)ÚAsymmetricPadding)Úutilsc                   @  s�   e Zd Zejd%dd„ƒZeejd&d	d
„ƒƒZejd'dd„ƒZejd(dd„ƒZ	ejd)dd„ƒZ
ejd*dd„ƒZejd+dd„ƒZejd,d"d#„ƒZd$S )-ÚRSAPrivateKeyÚ
ciphertextÚbytesÚpaddingr   Úreturnc                 C  ó   dS )z3
        Decrypts the provided ciphertext.
        N© )Úselfr   r   r   r   ú /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pyÚdecrypt   ó    zRSAPrivateKey.decryptÚintc                 C  r   ©z7
        The bit length of the public modulus.
        Nr   ©r   r   r   r   Úkey_size   r   zRSAPrivateKey.key_sizeÚRSAPublicKeyc                 C  r   )zD
        The RSAPublicKey associated with this private key.
        Nr   r   r   r   r   Ú
public_key    r   zRSAPrivateKey.public_keyÚdataÚ	algorithmúEasym_utils.Prehashed | hashes.HashAlgorithm | asym_utils.NoDigestInfoc                 C  r   )z!
        Signs the data.
        Nr   )r   r   r   r   r   r   r   Úsign&   r   zRSAPrivateKey.signÚRSAPrivateNumbersc                 C  r   )z/
        Returns an RSAPrivateNumbers.
        Nr   r   r   r   r   Úprivate_numbers3   r   zRSAPrivateKey.private_numbersÚencodingú_serialization.EncodingÚformatú_serialization.PrivateFormatÚencryption_algorithmú)_serialization.KeySerializationEncryptionc                 C  r   ©z6
        Returns the key serialized as bytes.
        Nr   )r   r!   r#   r%   r   r   r   Úprivate_bytes9   r   zRSAPrivateKey.private_bytesc                 C  r   ©z!
        Returns a copy.
        Nr   r   r   r   r   Ú__copy__D   r   zRSAPrivateKey.__copy__ÚmemoÚdictc                 C  r   ©z&
        Returns a deep copy.
        Nr   ©r   r+   r   r   r   Ú__deepcopy__J   r   zRSAPrivateKey.__deepcopy__N)r   r   r   r   r   r   ©r   r   ©r   r   )r   r   r   r   r   r   r   r   )r   r   )r!   r"   r#   r$   r%   r&   r   r   )r   r
   )r+   r,   r   r
   )Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   Úpropertyr   r   r   r    r(   r*   r/   r   r   r   r   r
      s$    
r
   )Ú	metaclassc                   @  s    e Zd Zejd*dd„ƒZeejd+d	d
„ƒƒZejd,dd„ƒZejd-dd„ƒZ	ejd.dd„ƒZ
ejd/dd„ƒZejd0d!d"„ƒZejd1d#d$„ƒZejd2d'd(„ƒZd)S )3r   Ú	plaintextr   r   r   r   c                 C  r   )z/
        Encrypts the given plaintext.
        Nr   )r   r9   r   r   r   r   ÚencryptV   r   zRSAPublicKey.encryptr   c                 C  r   r   r   r   r   r   r   r   \   r   zRSAPublicKey.key_sizeÚRSAPublicNumbersc                 C  r   )z-
        Returns an RSAPublicNumbers
        Nr   r   r   r   r   Úpublic_numbersc   r   zRSAPublicKey.public_numbersr!   r"   r#   ú_serialization.PublicFormatc                 C  r   r'   r   )r   r!   r#   r   r   r   Úpublic_bytesi   r   zRSAPublicKey.public_bytesÚ	signaturer   r   ú+asym_utils.Prehashed | hashes.HashAlgorithmÚNonec                 C  r   )z5
        Verifies the signature of the data.
        Nr   )r   r?   r   r   r   r   r   r   Úverifys   r   zRSAPublicKey.verifyú5hashes.HashAlgorithm | asym_utils.NoDigestInfo | Nonec                 C  r   )z@
        Recovers the original data from the signature.
        Nr   )r   r?   r   r   r   r   r   Úrecover_data_from_signature   r   z(RSAPublicKey.recover_data_from_signatureÚotherÚobjectÚboolc                 C  r   )z"
        Checks equality.
        Nr   )r   rE   r   r   r   Ú__eq__Š   r   zRSAPublicKey.__eq__c                 C  r   r)   r   r   r   r   r   r*   �   r   zRSAPublicKey.__copy__r+   r,   c                 C  r   r-   r   r.   r   r   r   r/   –   r   zRSAPublicKey.__deepcopy__N)r9   r   r   r   r   r   r0   )r   r;   )r!   r"   r#   r=   r   r   )
r?   r   r   r   r   r   r   r@   r   rA   )r?   r   r   r   r   rC   r   r   )rE   rF   r   rG   r1   )r+   r,   r   r   )r2   r3   r4   r5   r6   r:   r7   r   r<   r>   rB   rD   rH   r*   r/   r   r   r   r   r   U   s(    	
r   Úpublic_exponentr   r   Úbackendú
typing.Anyr   c                 C  s   t | |ƒ tj | |¡S ©N)Ú_verify_rsa_parametersÚrust_opensslÚrsaÚgenerate_private_key)rI   r   rJ   r   r   r   rP   ¤   s   
rP   rA   c                 C  s$   | 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 1024-bits.©Ú
ValueError)rI   r   r   r   r   rM   ­   s   ÿÿrM   ÚeÚmc           	      C  sX   d\}}| |}}|dkr(t ||ƒ\}}|||  }||||f\}}}}|dks|| S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )é   r   r   )Údivmod)	rT   rU   Úx1Úx2ÚaÚbÚqÚrÚxnr   r   r   Ú_modinv¸   s   
ýr_   Úpr\   c                 C  s"   | dks|dkrt dƒ‚t|| ƒS )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    rV   úValues can't be <= 1)rS   r_   )r`   r\   r   r   r   Úrsa_crt_iqmpÅ   s   
rb   Úprivate_exponentc                 C  ó$   | dks|dkrt dƒ‚| |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rV   ra   rR   )rc   r`   r   r   r   Úrsa_crt_dmp1Î   ó   re   c                 C  rd   )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rV   ra   rR   )rc   r\   r   r   r   Úrsa_crt_dmq1Ø   rf   rg   c                 C  s8   | dks|dks|dkrt dƒ‚t| t|d |d ƒƒS )zè
    Compute the RSA private_exponent (d) given the public exponent (e)
    and the RSA primes p and q.

    This uses the Carmichael totient function to generate the
    smallest possible working value of the private exponent.
    rV   ra   )rS   r_   r   )rT   r`   r\   r   r   r   Úrsa_recover_private_exponentâ   s   rh   iô  ÚnÚdútuple[int, int]c                 C  s>  |dks|dkrt dƒ‚dtd|| | ƒkrt dƒ‚|| d }|}|d dkr2|d }|d dks(d}d}|s~|tk r~t d| d ¡}|d7 }|}||k rxt||| ƒ}	|	dkrp|	| d krpt|	d| ƒdkrpt|	d | ƒ}
d}n|d9 }||k sN|s~|tk s<|s„t d	ƒ‚t| |
ƒ\}}|dks‘J ‚t|
|fd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.
    rV   zd, e can't be <= 1é   zn, d, e don't matché   r   FTz2Unable to compute factors p and q from exponent d.)Úreverse)rS   ÚpowÚ_MAX_RECOVERY_ATTEMPTSÚrandomÚrandintr   rW   Úsorted)ri   rT   rj   ÚktotÚtÚspottedÚtriesrZ   ÚkÚcandr`   r\   r]   r   r   r   Úrsa_recover_prime_factorsú   s<   ÿ$÷ûrz   rL   )rI   r   r   r   rJ   rK   r   r
   )rI   r   r   r   r   rA   )rT   r   rU   r   r   r   )r`   r   r\   r   r   r   )rc   r   r`   r   r   r   )rc   r   r\   r   r   r   )rT   r   r`   r   r\   r   r   r   )ri   r   rT   r   rj   r   r   rk   )%Ú
__future__r   r5   rq   ÚtypingÚmathr   r   Ú"cryptography.hazmat.bindings._rustr   rN   Úcryptography.hazmat.primitivesr   r   Ú*cryptography.hazmat.primitives._asymmetricr   Ú)cryptography.hazmat.primitives.asymmetricr	   Ú
asym_utilsÚABCMetar
   ÚRSAPrivateKeyWithSerializationÚregisterrO   r   ÚRSAPublicKeyWithSerializationr   r;   rP   rM   r_   rb   re   rg   rh   rp   rz   r   r   r   r   Ú<module>   s6   ?Hý
	


	



