a
    ϏPf                     @  sD  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d	dddZddddddZddddddZddddddZddddddZddddd d!Zd"Z dddd#d$d%d&Z!dS )(    )annotationsN)gcd)openssl)_serializationhashes)AsymmetricPadding)utilsc                   @  s   e Zd ZejddddddZeejdddd	Zejd
dddZejdddddddZ	ejddddZ
ejdddddddZdS )RSAPrivateKeybytesr   )
ciphertextpaddingreturnc                 C  s   dS )z3
        Decrypts the provided ciphertext.
        N )selfr   r   r   r   n/var/www/html/python-backend/venv/lib/python3.9/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pydecrypt   s    zRSAPrivateKey.decryptintr   c                 C  s   dS z7
        The bit length of the public modulus.
        Nr   r   r   r   r   key_size   s    zRSAPrivateKey.key_sizeRSAPublicKeyc                 C  s   dS )zD
        The RSAPublicKey associated with this private key.
        Nr   r   r   r   r   
public_key   s    zRSAPrivateKey.public_key+asym_utils.Prehashed | hashes.HashAlgorithm)datar   	algorithmr   c                 C  s   dS )z!
        Signs the data.
        Nr   )r   r   r   r   r   r   r   sign%   s    zRSAPrivateKey.signRSAPrivateNumbersc                 C  s   dS )z/
        Returns an RSAPrivateNumbers.
        Nr   r   r   r   r   private_numbers0   s    zRSAPrivateKey.private_numbers_serialization.Encodingz_serialization.PrivateFormatz)_serialization.KeySerializationEncryption)encodingformatencryption_algorithmr   c                 C  s   dS z6
        Returns the key serialized as bytes.
        Nr   )r   r    r!   r"   r   r   r   private_bytes6   s    zRSAPrivateKey.private_bytesN)__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dddZeejdddd	Zejd
dddZejddddddZ	ejddddddddZ
ejdddddddZejdddddZd S )!r   r
   r   )	plaintextr   r   c                 C  s   dS )z/
        Encrypts the given plaintext.
        Nr   )r   r,   r   r   r   r   encryptG   s    zRSAPublicKey.encryptr   r   c                 C  s   dS r   r   r   r   r   r   r   M   s    zRSAPublicKey.key_sizeRSAPublicNumbersc                 C  s   dS )z-
        Returns an RSAPublicNumbers
        Nr   r   r   r   r   public_numbersT   s    zRSAPublicKey.public_numbersr   z_serialization.PublicFormat)r    r!   r   c                 C  s   dS r#   r   )r   r    r!   r   r   r   public_bytesZ   s    zRSAPublicKey.public_bytesr   None)	signaturer   r   r   r   c                 C  s   dS )z5
        Verifies the signature of the data.
        Nr   )r   r2   r   r   r   r   r   r   verifyd   s    zRSAPublicKey.verifyzhashes.HashAlgorithm | None)r2   r   r   r   c                 C  s   dS )z@
        Recovers the original data from the signature.
        Nr   )r   r2   r   r   r   r   r   recover_data_from_signaturep   s    z(RSAPublicKey.recover_data_from_signatureobjectbool)otherr   c                 C  s   dS )z"
        Checks equality.
        Nr   )r   r7   r   r   r   __eq__{   s    zRSAPublicKey.__eq__N)r%   r&   r'   r(   r)   r-   r*   r   r/   r0   r3   r4   r8   r   r   r   r   r   F   s   	
r   r   z
typing.Any)public_exponentr   backendr   c                 C  s   t | | tj| |S )N)_verify_rsa_parametersrust_opensslrsagenerate_private_key)r9   r   r:   r   r   r   r>      s    
r>   r1   )r9   r   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 512-bits.)
ValueError)r9   r   r   r   r   r;      s    r;   )emr   c           	      C  sR   d\}}| | }}|dkrJt ||\}}|||  }||||f\}}}}q|| S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )   r   r   )divmod)	rA   rB   x1Zx2abqrZxnr   r   r   _modinv   s    
rJ   )prH   r   c                 C  s
   t || S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rJ   )rK   rH   r   r   r   rsa_crt_iqmp   s    rL   )private_exponentrK   r   c                 C  s   | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rC   r   )rM   rK   r   r   r   rsa_crt_dmp1   s    rN   )rM   rH   r   c                 C  s   | |d  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rC   r   )rM   rH   r   r   r   rsa_crt_dmq1   s    rO   i  ztuple[int, int])nrA   dr   c                 C  s   || d }|}|d dkr&|d }qd}d}|s|t k r|}||k rt||| }|dkr|| d krt|d| dkrt|d | }	d}q|d9 }q>|d7 }q.|stdt| |	\}
}|dksJ 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.
    rC      r   FTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowr   r@   rD   sorted)rP   rA   rQ   ZktottZspottedrF   kcandrK   rH   rI   r   r   r   rsa_recover_prime_factors   s,    
$

rZ   )N)"
__future__r   r(   typingmathr   Z"cryptography.hazmat.bindings._rustr   r<   Zcryptography.hazmat.primitivesr   r   Z*cryptography.hazmat.primitives._asymmetricr   Z)cryptography.hazmat.primitives.asymmetricr   Z
asym_utilsABCMetar	   ZRSAPrivateKeyWithSerializationregisterr=   r   ZRSAPublicKeyWithSerializationr   r.   r>   r;   rJ   rL   rN   rO   rT   rZ   r   r   r   r   <module>   s0   1< 	