o
    Z2h                     @  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   ~/home/skpark/git/infrasmart_work/infrasmart/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)	rL   rM   x1x2abqrxnr   r   r   _modinv   s   
rW   prT   c                 C  s
   t || S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rW   )rX   rT   r   r   r   rsa_crt_iqmp   s   
rY   private_exponentc                 C     | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rN   r   )rZ   rX   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.
    rN   r   )rZ   rT   r   r   r   rsa_crt_dmq1   r]   r^   c                 C  s,   |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.
    rN   )r   rW   )rL   rX   rT   lambda_nr   r   r   rsa_recover_private_exponent   s   "
r`   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<|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.
    rN   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)rK   pow_MAX_RECOVERY_ATTEMPTSrandomrandintr   rO   sorted)ra   rL   rb   ktottspottedtriesrR   kcandrX   rT   rU   r   r   r   rsa_recover_prime_factors   s<   $rr   rE   )rB   r   r   r   rC   rD   r   r	   )rB   r   r   r   r   r:   )rL   r   rM   r   r   r   )rX   r   rT   r   r   r   )rZ   r   rX   r   r   r   )rZ   r   rT   r   r   r   )rL   r   rX   r   rT   r   r   r   )ra   r   rL   r   rb   r   r   rc   )$
__future__r   r/   ri   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   rW   rY   r\   r^   r`   rh   rr   r   r   r   r   <module>   s6   7B
	




