o
    "“io   ã                   @  s  d dl mZ d dlZd dlZd dl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 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)Ú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d S )(ÚRSAPrivateKeyÚ
ciphertextÚbytesÚpaddingr   Úreturnc                 C  ó   dS )z3
        Decrypts the provided ciphertext.
        N© )Úselfr
   r   r   r   úm/var/www/html/premium_crap/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ú+asym_utils.Prehashed | hashes.HashAlgorithmc                 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_numbers1   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_bytes7   r   zRSAPrivateKey.private_bytesc                 C  r   ©z!
        Returns a copy.
        Nr   r   r   r   r   Ú__copy__B   r   zRSAPrivateKey.__copy__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	   )Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   Úpropertyr   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d,d!d"„ƒZejd-d#d$„ƒZd%S ).r   Ú	plaintextr   r   r   r   c                 C  r   )z/
        Encrypts the given plaintext.
        Nr   )r   r3   r   r   r   r   ÚencryptN   r   zRSAPublicKey.encryptr   c                 C  r   r   r   r   r   r   r   r   T   r   zRSAPublicKey.key_sizeÚRSAPublicNumbersc                 C  r   )z-
        Returns an RSAPublicNumbers
        Nr   r   r   r   r   Úpublic_numbers[   r   zRSAPublicKey.public_numbersr    r!   r"   ú_serialization.PublicFormatc                 C  r   r&   r   )r   r    r"   r   r   r   Úpublic_bytesa   r   zRSAPublicKey.public_bytesÚ	signaturer   r   r   ÚNonec                 C  r   )z5
        Verifies the signature of the data.
        Nr   )r   r9   r   r   r   r   r   r   Úverifyk   r   zRSAPublicKey.verifyúhashes.HashAlgorithm | Nonec                 C  r   )z@
        Recovers the original data from the signature.
        Nr   )r   r9   r   r   r   r   r   Úrecover_data_from_signaturew   r   z(RSAPublicKey.recover_data_from_signatureÚotherÚobjectÚboolc                 C  r   )z"
        Checks equality.
        Nr   )r   r>   r   r   r   Ú__eq__‚   r   zRSAPublicKey.__eq__c                 C  r   r(   r   r   r   r   r   r)   ˆ   r   zRSAPublicKey.__copy__N)r3   r   r   r   r   r   r*   )r   r5   )r    r!   r"   r7   r   r   )
r9   r   r   r   r   r   r   r   r   r:   )r9   r   r   r   r   r<   r   r   )r>   r?   r   r@   r+   )r,   r-   r.   r/   r0   r4   r1   r   r6   r8   r;   r=   rA   r)   r   r   r   r   r   M   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)rB   r   rC   r   r   r   rI   –   s   
rI   r:   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)rB   r   r   r   r   rF   Ÿ   s   ÿÿrF   Ú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)	rM   rN   Úx1Úx2ÚaÚbÚqÚrÚxnr   r   r   Ú_modinvª   s   
ýrX   ÚprU   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.
    rO   úValues can't be <= 1)rL   rX   )rY   rU   r   r   r   Úrsa_crt_iqmp·   s   
r[   Ú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.
    rO   rZ   rK   )r\   rY   r   r   r   Úrsa_crt_dmp1À   ó   r^   c                 C  r]   )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rO   rZ   rK   )r\   rU   r   r   r   Úrsa_crt_dmq1Ê   r_   r`   c                 C  sL   | dks|dks|dkrt dƒ‚|d |d  t|d |d ƒ }t| |ƒ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.
    rO   rZ   )rL   r   rX   )rM   rY   rU   Úlambda_nr   r   r   Úrsa_recover_private_exponentÔ   s   "
rb   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.
    rO   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)rL   ÚpowÚ_MAX_RECOVERY_ATTEMPTSÚrandomÚrandintr   rP   Úsorted)rc   rM   rd   ÚktotÚtÚspottedÚtriesrS   ÚkÚcandrY   rU   rV   r   r   r   Úrsa_recover_prime_factorsð   s<   ÿ$÷ûrt   rE   )rB   r   r   r   rC   rD   r   r	   )rB   r   r   r   r   r:   )rM   r   rN   r   r   r   )rY   r   rU   r   r   r   )r\   r   rY   r   r   r   )r\   r   rU   r   r   r   )rM   r   rY   r   rU   r   r   r   )rc   r   rM   r   rd   r   r   re   )$Ú
__future__r   r/   rk   ÚtypingÚmathr   Ú"cryptography.hazmat.bindings._rustr   rG   Úcryptography.hazmat.primitivesr   r   Ú*cryptography.hazmat.primitives._asymmetricr   Ú)cryptography.hazmat.primitives.asymmetricr   Ú
asym_utilsÚABCMetar	   ÚRSAPrivateKeyWithSerializationÚregisterrH   r   ÚRSAPublicKeyWithSerializationr   r5   rI   rF   rX   r[   r^   r`   rb   rj   rt   r   r   r   r   Ú<module>   s6   7Bý
	


	



