
    tf                       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	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)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dS )RSAPrivateKey
ciphertextbytespaddingr   returnc                    dS )z3
        Decrypts the provided ciphertext.
        N )selfr   r   s      l/var/www/surfInsights/venv3-11/lib/python3.11/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	algorithm+asym_utils.Prehashed | hashes.HashAlgorithmc                    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_numbers0   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_bytes6   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   )__name__
__module____qualname__abcabstractmethodr   propertyr   r   r#   r&   r/   r   r   r   r   r      s           
     X
 	   
 	    	   
 	     r   r   )	metaclassc                     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dS )$r   	plaintextr   r   r   r   c                    dS )z/
        Encrypts the given plaintext.
        Nr   )r   r9   r   s      r   encryptzRSAPublicKey.encryptG   r   r   r   c                    dS r   r   r   s    r   r   zRSAPublicKey.key_sizeM   r   r   RSAPublicNumbersc                    dS )z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   public_numberszRSAPublicKey.public_numbersT   r   r   r'   r(   r)   _serialization.PublicFormatc                    dS r.   r   )r   r'   r)   s      r   public_byteszRSAPublicKey.public_bytesZ   r   r   	signaturer   r    r!   Nonec                    dS )z5
        Verifies the signature of the data.
        Nr   )r   rC   r   r   r    s        r   verifyzRSAPublicKey.verifyd   r   r   hashes.HashAlgorithm | Nonec                    dS )z@
        Recovers the original data from the signature.
        Nr   )r   rC   r   r    s       r   recover_data_from_signaturez(RSAPublicKey.recover_data_from_signaturep   r   r   otherobjectboolc                    dS )z"
        Checks equality.
        Nr   )r   rJ   s     r   __eq__zRSAPublicKey.__eq__{   r   r   N)r9   r   r   r   r   r   r0   )r   r=   )r'   r(   r)   r@   r   r   )
rC   r   r   r   r   r   r    r!   r   rD   )rC   r   r   r   r    rG   r   r   )rJ   rK   r   rL   )r1   r2   r3   r4   r5   r;   r6   r   r?   rB   rF   rI   rN   r   r   r   r   r   F   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)rO   r   rP   s      r   rW   rW      s-    
 ?H55500(KKKr   rD   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)rO   r   s     r   rT   rT      sE    j((?
 
 	

 $?@@@ 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)	r[   r\   x1x2abqrxns	            r   _modinvrg      sh     FBaqA
a%%a||1!b&[!R|1b" a%% 6Mr   prd   c                "    t          ||           S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rg   )rh   rd   s     r   rsa_crt_iqmprj      s     1a==r   private_exponentc                    | |dz
  z  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    r^   r   )rk   rh   s     r   rsa_crt_dmp1rm          
 q1u%%r   c                    | |dz
  z  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    r^   r   )rk   rd   s     r   rsa_crt_dmq1rp      rn   r   c                f    |dz
  |dz
  z  t          |dz
  |dz
            z  }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.
    r^   )r   rg   )r[   rh   rd   lambda_ns       r   rsa_recover_private_exponentrs      s=    " A!a% CAq1u$5$55H1hr   i  ndtuple[int, int]c                   ||z  dz
  }|}|dz  dk    r|dz  }|dz  dk    d}d}|s{|t           k     rp|}||k     rVt          |||           }|dk    r4|| dz
  k    r+t          |d|           dk    rt          |dz   |           }	d}n|dz  }||k     V|dz  }|s|t           k     p|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.
    r^      r   FTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowr   rZ   r_   sorted)rt   r[   ru   ktottspottedrb   kcandrh   rd   re   s               r   rsa_recover_prime_factorsr      sN    q519D 	A
a%1**F a%1** G	A !444$hhq!Q<<DqyyTa!e__T1aA1E1E q!$$FA $hh 	
Q  !444  OMNNN!Q<<DAq66661a&$'''DAqq6Mr   rS   )rO   r   r   r   rP   rQ   r   r   )rO   r   r   r   r   rD   )r[   r   r\   r   r   r   )rh   r   rd   r   r   r   )rk   r   rh   r   r   r   )rk   r   rd   r   r   r   )r[   r   rh   r   rd   r   r   r   )rt   r   r[   r   ru   r   r   rv   )#
__future__r   r4   typingmathr   "cryptography.hazmat.bindings._rustr   rU   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr   )cryptography.hazmat.primitives.asymmetricr	   
asym_utilsABCMetar   RSAPrivateKeyWithSerializationregisterrV   r   RSAPublicKeyWithSerializationr$   r=   rW   rT   rg   rj   rm   rp   rs   rz   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 . . . .b "/    |'5 6 6 69 9 9 9 9S[ 9 9 9 9x !-    l&3 4 4 4 $6 #4  L L L L LA A A A
 
 
 
   & & & && & & &       0  ( ( ( ( ( (r   