
    .Ph                       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	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ej        d d            ZdS )!RSAPrivateKey
ciphertextbytespaddingr   returnc                    dS )z3
        Decrypts the provided ciphertext.
        N )selfr   r   s      m/var/www/html/test/jupyter/venv/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_numbers1   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_bytes7   r   r   c                    dS z!
        Returns a copy.
        Nr   r   s    r   __copy__zRSAPrivateKey.__copy__B   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   )__name__
__module____qualname__abcabstractmethodr   propertyr   r   r#   r&   r/   r2   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ej        d%d            ZdS )&r   	plaintextr   r   r   r   c                    dS )z/
        Encrypts the given plaintext.
        Nr   )r   r=   r   s      r   encryptzRSAPublicKey.encryptN   r   r   r   c                    dS r   r   r   s    r   r   zRSAPublicKey.key_sizeT   r   r   RSAPublicNumbersc                    dS )z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   public_numberszRSAPublicKey.public_numbers[   r   r   r'   r(   r)   _serialization.PublicFormatc                    dS r.   r   )r   r'   r)   s      r   public_byteszRSAPublicKey.public_bytesa   r   r   	signaturer   r    r!   Nonec                    dS )z5
        Verifies the signature of the data.
        Nr   )r   rG   r   r   r    s        r   verifyzRSAPublicKey.verifyk   r   r   hashes.HashAlgorithm | Nonec                    dS )z@
        Recovers the original data from the signature.
        Nr   )r   rG   r   r    s       r   recover_data_from_signaturez(RSAPublicKey.recover_data_from_signaturew   r   r   otherobjectboolc                    dS )z"
        Checks equality.
        Nr   )r   rN   s     r   __eq__zRSAPublicKey.__eq__   r   r   c                    dS r1   r   r   s    r   r2   zRSAPublicKey.__copy__   r   r   N)r=   r   r   r   r   r   r3   )r   rA   )r'   r(   r)   rD   r   r   )
rG   r   r   r   r   r   r    r!   r   rH   )rG   r   r   r   r    rK   r   r   )rN   rO   r   rP   r4   )r5   r6   r7   r8   r9   r?   r:   r   rC   rF   rJ   rM   rR   r2   r   r   r   r   r   M   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)rT   r   rU   s      r   r\   r\      s-    
 ?H55500(KKKr   rH   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)rT   r   s     r   rY   rY      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`   ra   x1x2abqrxns	            r   _modinvrl      sh     FBaqA
a%%a||1!b&[!R|1b" a%% 6Mr   pri   c                "    t          ||           S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rl   )rm   ri   s     r   rsa_crt_iqmpro      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.
    rc   r   )rp   rm   s     r   rsa_crt_dmp1rr          
 q1u%%r   c                    | |dz
  z  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rc   r   )rp   ri   s     r   rsa_crt_dmq1ru      rs   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.
    rc   )r   rl   )r`   rm   ri   lambda_ns       r   rsa_recover_private_exponentrx      s=    " A!a% CAq1u$5$55H1h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.
    rc   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)r_   pow_MAX_RECOVERY_ATTEMPTSrandomrandintr   rd   sorted)ry   r`   rz   ktottspottedtriesrg   kcandrm   ri   rj   s                r   rsa_recover_prime_factorsr      s    	Avva-...	SQUA.///q519D 	A
a%1**F a%1** GE %"888N1a!e$$
$hhq!Q<<DqyyTa!e__T1aA1E1E q!$$FA $hh  %"888  OMNNN!Q<<DAq66661a&$'''DAqq6Mr   rX   )rT   r   r   r   rU   rV   r   r   )rT   r   r   r   r   rH   )r`   r   ra   r   r   r   )rm   r   ri   r   r   r   )rp   r   rm   r   r   r   )rp   r   ri   r   r   r   )r`   r   rm   r   ri   r   r   r   )ry   r   r`   r   rz   r   r   r{   )$
__future__r   r8   r   typingmathr   "cryptography.hazmat.bindings._rustr   rZ   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr   )cryptography.hazmat.primitives.asymmetricr	   
asym_utilsABCMetar   RSAPrivateKeyWithSerializationregisterr[   r   RSAPublicKeyWithSerializationr$   rA   r\   rY   rl   ro   rr   ru   rx   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4 4 4 4 4ck 4 4 4 4n "/    |'5 6 6 6? ? ? ? ?S[ ? ? ? ?D !-    l&3 4 4 4 $6 #4  L L L L LA A A A
 
 
 
   & & & && & & &       .  - - - - - -r   