
    : j,!                       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	ej        
          ZeZe                    e
j        j                    G d dej        
          ZeZe                    e
j        j                   e
j        j        Ze
j        j        Z	 d%d&dZd'dZd(dZd)dZd*dZ d+dZ!d,dZ"d Z#d-d$Z$dS ).    )annotationsN)gcdlcm)openssl)_serializationhashes)AsymmetricPadding)utilsc                  .   e Zd Zej        dd            Zeej        dd                        Zej        dd
            Zej        d d            Z	ej        d!d            Z
ej        d"d            Zej        d#d            Zej        d$d            ZdS )%RSAPrivateKey
ciphertextbytespaddingr	   returnc                    dS )z3
        Decrypts the provided ciphertext.
        N )selfr   r   s      C:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\cryptography/hazmat/primitives/asymmetric/rsa.pydecryptzRSAPrivateKey.decrypt             intc                    dS z7
        The bit length of the public modulus.
        Nr   r   s    r   key_sizezRSAPrivateKey.key_size   r   r   RSAPublicKeyc                    dS )zD
        The RSAPublicKey associated with this private key.
        Nr   r   s    r   
public_keyzRSAPrivateKey.public_key    r   r   data	algorithmEasym_utils.Prehashed | hashes.HashAlgorithm | asym_utils.NoDigestInfoc                    dS )z!
        Signs the data.
        Nr   )r   r    r   r!   s       r   signzRSAPrivateKey.sign&   r   r   RSAPrivateNumbersc                    dS )z/
        Returns an RSAPrivateNumbers.
        Nr   r   s    r   private_numberszRSAPrivateKey.private_numbers3   r   r   encoding_serialization.Encodingformat_serialization.PrivateFormatencryption_algorithm)_serialization.KeySerializationEncryptionc                    dS z6
        Returns the key serialized as bytes.
        Nr   )r   r(   r*   r,   s       r   private_byteszRSAPrivateKey.private_bytes9   r   r   c                    dS z!
        Returns a copy.
        Nr   r   s    r   __copy__zRSAPrivateKey.__copy__D   r   r   memodictc                    dS z&
        Returns a deep copy.
        Nr   r   r4   s     r   __deepcopy__zRSAPrivateKey.__deepcopy__J   r   r   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   )r4   r5   r   r   )__name__
__module____qualname__abcabstractmethodr   propertyr   r   r$   r'   r0   r3   r9   r   r   r   r   r      s<          
     X
 	   
 	
 
 
 
 	   
 	    	   
 	     r   r   )	metaclassc                  P   e Zd Zej        d!d            Zeej        d"d                        Zej        d#d
            Zej        d$d            Z	ej        d%d            Z
ej        d&d            Zej        d'd            Zej        d(d            Zej        d)d            Zd S )*r   	plaintextr   r   r	   r   c                    dS )z/
        Encrypts the given plaintext.
        Nr   )r   rD   r   s      r   encryptzRSAPublicKey.encryptV   r   r   r   c                    dS r   r   r   s    r   r   zRSAPublicKey.key_size\   r   r   RSAPublicNumbersc                    dS )z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   public_numberszRSAPublicKey.public_numbersc   r   r   r(   r)   r*   _serialization.PublicFormatc                    dS r/   r   )r   r(   r*   s      r   public_byteszRSAPublicKey.public_bytesi   r   r   	signaturer    r!   +asym_utils.Prehashed | hashes.HashAlgorithmNonec                    dS )z5
        Verifies the signature of the data.
        Nr   )r   rN   r    r   r!   s        r   verifyzRSAPublicKey.verifys   r   r   5hashes.HashAlgorithm | asym_utils.NoDigestInfo | Nonec                    dS )z@
        Recovers the original data from the signature.
        Nr   )r   rN   r   r!   s       r   recover_data_from_signaturez(RSAPublicKey.recover_data_from_signature   r   r   otherobjectboolc                    dS )z"
        Checks equality.
        Nr   )r   rV   s     r   __eq__zRSAPublicKey.__eq__   r   r   c                    dS r2   r   r   s    r   r3   zRSAPublicKey.__copy__   r   r   r4   r5   c                    dS r7   r   r8   s     r   r9   zRSAPublicKey.__deepcopy__   r   r   N)rD   r   r   r	   r   r   r:   )r   rH   )r(   r)   r*   rK   r   r   )
rN   r   r    r   r   r	   r!   rO   r   rP   )rN   r   r   r	   r!   rS   r   r   )rV   rW   r   rX   r;   )r4   r5   r   r   )r<   r=   r>   r?   r@   rF   rA   r   rJ   rM   rR   rU   rZ   r3   r9   r   r   r   r   r   U   s`          
     X
 	   
 	    		 	 	 	 	    	   
 	   
 	     r   r   public_exponentr   r   backend
typing.Anyr   c                b    t          | |           t          j                            | |          S N)_verify_rsa_parametersrust_opensslrsagenerate_private_key)r]   r   r^   s      r   re   re      s-    
 ?H55500(KKKr   rP   c                V    | 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)r]   r   s     r   rb   rb      sP    j( 
?
 
 	

 $ A?@@@A Ar   emc                    d\  }}| |}}|dk    r,t          ||          \  }}|||z  z
  }||||f\  }}}}|dk    ,||z  S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )   r   r   )divmod)	rj   rk   x1x2abqrxns	            r   _modinvrv      sn     FBaqA
a% $a||1!b&[!R|1b" a% $ 6Mr   prs   c                X    | dk    s|dk    rt          d          t          ||           S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    rm   Values can't be <= 1)ri   rv   )rw   rs   s     r   rsa_crt_iqmprz      s8     	Av 1a 1/0001a==r   private_exponentc                H    | dk    s|dk    rt          d          | |dz
  z  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rm   ry   rh   )r{   rw   s     r   rsa_crt_dmp1r}      :    
 1 1Q 1/000q1u%%r   c                H    | dk    s|dk    rt          d          | |dz
  z  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rm   ry   rh   )r{   rs   s     r   rsa_crt_dmq1r      r~   r   c                    | dk    s|dk    s|dk    rt          d          t          | t          |dz
  |dz
                      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.
    rm   ry   )ri   rv   r   )rj   rw   rs   s      r   rsa_recover_private_exponentr      sW     	Av 1a 116 1/0001c!a%Q''(((r   i  ndtuple[int, int]c                   |dk    s|dk    rt          d          dt          d||z  |           k    rt          d          ||z  dz
  }|}|dz  dk    r|dz  }|dz  dk    d}d}|s|t          k     rt          j        d| dz
            }|dz  }|}||k     rVt          |||           }	|	dk    r4|	| dz
  k    r+t          |	d|           dk    rt          |	dz   |           }
d}n|dz  }||k     V|s|t          k     |st          d	          t          | |
          \  }}|dk    sJ t          |
|f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.
    rm   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)ri   pow_MAX_RECOVERY_ATTEMPTSrandomrandintr   rn   sorted)r   rj   r   ktottspottedtriesrq   kcandrw   rs   rt   s                r   rsa_recover_prime_factorsr      s    	Av /a /-...	SQUA 0.///q519D 	A
a%1* F a%1*  GE %"88 N1a!e$$
$h 		q!Q<<Dqy Ta!e_ T1aA1E  q!$$FA $h 		  %"88   OMNNN!Q<<DAq6MMM1a&$'''DAqq6Mr   ra   )r]   r   r   r   r^   r_   r   r   )r]   r   r   r   r   rP   )rj   r   rk   r   r   r   )rw   r   rs   r   r   r   )r{   r   rw   r   r   r   )r{   r   rs   r   r   r   )rj   r   rw   r   rs   r   r   r   )r   r   rj   r   r   r   r   r   )%
__future__r   r?   r   typingmathr   r   "cryptography.hazmat.bindings._rustr   rc   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr	   )cryptography.hazmat.primitives.asymmetricr
   
asym_utilsABCMetar   RSAPrivateKeyWithSerializationregisterrd   r   RSAPublicKeyWithSerializationr%   rH   re   rb   rv   rz   r}   r   r   r   r   r   r   r   <module>r      s(  
 # " " " " " 



           F F F F F F A A A A A A A A H H H H H H I I I I I I< < < < <ck < < < <~ "/    |'5 6 6 6E E E E ES[ E E E EP !-    l&3 4 4 4 $6 #4  L L L L LA A A A
 
 
 
   & & & && & & &) ) ) )*  - - - - - -r   