o
    ÖèFh�  ã                   @  s
  d dl m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d.dd„Zd/dd„Zd0d!d"„Zd1d#d$„Zd%Z d2d)d*„Z!dS )3é    )ÚannotationsN)Úgcd)Úopenssl)Ú_serializationÚhashes)ÚAsymmetricPadding)Úutilsc                   @  sp   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dS )%ÚRSAPrivateKeyÚ
ciphertextÚbytesÚpaddingr   Úreturnc                 C  ó   dS )z3
        Decrypts the provided ciphertext.
        N© )Úselfr
   r   r   r   úf/var/www/html/loop/nvenv/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_numbers0   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_bytes6   r   zRSAPrivateKey.private_bytesN)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	      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d#S )+r   Ú	plaintextr   r   r   r   c                 C  r   )z/
        Encrypts the given plaintext.
        Nr   )r   r0   r   r   r   r   ÚencryptG   r   zRSAPublicKey.encryptr   c                 C  r   r   r   r   r   r   r   r   M   r   zRSAPublicKey.key_sizeÚRSAPublicNumbersc                 C  r   )z-
        Returns an RSAPublicNumbers
        Nr   r   r   r   r   Úpublic_numbersT   r   zRSAPublicKey.public_numbersr    r!   r"   ú_serialization.PublicFormatc                 C  r   r&   r   )r   r    r"   r   r   r   Úpublic_bytesZ   r   zRSAPublicKey.public_bytesÚ	signaturer   r   r   ÚNonec                 C  r   )z5
        Verifies the signature of the data.
        Nr   )r   r6   r   r   r   r   r   r   Úverifyd   r   zRSAPublicKey.verifyúhashes.HashAlgorithm | Nonec                 C  r   )z@
        Recovers the original data from the signature.
        Nr   )r   r6   r   r   r   r   r   Úrecover_data_from_signaturep   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__N)r0   r   r   r   r   r   r(   )r   r2   )r    r!   r"   r4   r   r   )
r6   r   r   r   r   r   r   r   r   r7   )r6   r   r   r   r   r9   r   r   )r;   r<   r   r=   )r)   r*   r+   r,   r-   r1   r.   r   r3   r5   r8   r:   r>   r   r   r   r   r   F   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)r?   r   r@   r   r   r   rF   ‰   s   
rF   r7   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 512-bits.)Ú
ValueError)r?   r   r   r   r   rC   ’   s   ÿÿrC   Ú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)	rI   rJ   Úx1Úx2ÚaÚbÚqÚrÚxnr   r   r   Ú_modinv�   s   
ýrT   ÚprQ   c                 C  s
   t || ƒS )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rT   )rU   rQ   r   r   r   Úrsa_crt_iqmpª   s   
rV   Úprivate_exponentc                 C  ó   | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rK   r   )rW   rU   r   r   r   Úrsa_crt_dmp1±   ó   rY   c                 C  rX   )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rK   r   )rW   rQ   r   r   r   Úrsa_crt_dmq1¹   rZ   r[   iè  ÚnÚdútuple[int, int]c                 C  sú   || d }|}|d dkr|d }|d dksd}d}|s\|t k r\|}||k rRt||| ƒ}|dkrJ|| d krJt|d| ƒdkrJt|d | ƒ}	d}n|d9 }||k s(|d7 }|s\|t k s"|sbtdƒ‚t| |	ƒ\}
}|dksoJ ‚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.
    rK   é   r   FTz2Unable to compute factors p and q from exponent d.)Úreverse)Ú_MAX_RECOVERY_ATTEMPTSÚpowr   rH   rL   Úsorted)r\   rI   r]   ÚktotÚtÚspottedrO   ÚkÚcandrU   rQ   rR   r   r   r   Úrsa_recover_prime_factorsÇ   s2   ÿ$÷òri   rB   )r?   r   r   r   r@   rA   r   r	   )r?   r   r   r   r   r7   )rI   r   rJ   r   r   r   )rU   r   rQ   r   r   r   )rW   r   rU   r   r   r   )rW   r   rQ   r   r   r   )r\   r   rI   r   r]   r   r   r^   )"Ú
__future__r   r,   ÚtypingÚmathr   Ú"cryptography.hazmat.bindings._rustr   rD   Úcryptography.hazmat.primitivesr   r   Ú*cryptography.hazmat.primitives._asymmetricr   Ú)cryptography.hazmat.primitives.asymmetricr   Ú
asym_utilsÚABCMetar	   ÚRSAPrivateKeyWithSerializationÚregisterrE   r   ÚRSAPublicKeyWithSerializationr   r2   rF   rC   rT   rV   rY   r[   ra   ri   r   r   r   r   Ú<module>   s2   1<ý
	



