
     h,                        d dl Z d dl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 G d	 d
e j                  ZeZ	 d(dededej        defdZdededdfdZdededededededededdfdZdededdfdZdededefdZdededefdZdededefdZdededefd Zd!Zdeded"edej        eef         fd#Z G d$ d%          Z G d& d'          ZdS ))    N)gcd)_serializationhashes)AsymmetricPadding)utilsc            	       f   e Zd Zej        dededefd            Zeej        de	fd                        Z
ej        dd            Zej        deded	ej        ej        ej        f         defd
            Zej        dd            Zej        dej        dej        dej        defd            ZdS )RSAPrivateKey
ciphertextpaddingreturnc                     dS )z3
        Decrypts the provided ciphertext.
        N )selfr
   r   s      i/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pydecryptzRSAPrivateKey.decrypt             c                     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	algorithmc                     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_numbers.   r   r   encodingformatencryption_algorithmc                     dS z6
        Returns the key serialized as bytes.
        Nr   )r   r"   r#   r$   s       r   private_byteszRSAPrivateKey.private_bytes4   r   r   N)r   r   )r   r   )__name__
__module____qualname__abcabstractmethodbytesr   r   propertyintr   r   typingUnion
asym_utils	Prehashedr   HashAlgorithmr   r!   r   EncodingPrivateFormatKeySerializationEncryptionr'   r   r   r   r	   r	      sx       % 2C     
 #     X
 	   
 	 # <
 4f6J JK	
 
    	   
 	 ) , -G	
 
     r   r	   )	metaclassc                      e Zd Zej        dededefd            Zeej        de	fd                        Z
ej        dd            Zej        dej        d	ej        defd
            Zej        dedededej        ej        ej        f         ddf
d            Zej        dededej        ej                 defd            ZdS )r   	plaintextr   r   c                     dS )z/
        Encrypts the given plaintext.
        Nr   )r   r:   r   s      r   encryptzRSAPublicKey.encryptD   r   r   c                     dS r   r   r   s    r   r   zRSAPublicKey.key_sizeJ   r   r   RSAPublicNumbersc                     dS )z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   public_numberszRSAPublicKey.public_numbersQ   r   r   r"   r#   c                     dS r&   r   )r   r"   r#   s      r   public_byteszRSAPublicKey.public_bytesW   r   r   	signaturer   r   Nc                     dS )z5
        Verifies the signature of the data.
        Nr   )r   rC   r   r   r   s        r   verifyzRSAPublicKey.verifya   r   r   c                     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_signaturem   r   r   r   r>   )r(   r)   r*   r+   r,   r-   r   r<   r.   r/   r   r@   r   r5   PublicFormatrB   r0   r1   r2   r3   r   r4   rE   OptionalrG   r   r   r   r   r   C   s        1B u    
 #     X
 	   
 	 ) + 
	    			 	 #		
 <
 4f6J JK	 
	 	 	 	 	 # ?6#78	
 
     r   r   public_exponentr   backendr   c                 Z    ddl m} t          | |           |                    | |          S Nr   )rL   ),cryptography.hazmat.backends.openssl.backendrL   _verify_rsa_parametersgenerate_rsa_private_key)rK   r   rL   ossls       r   generate_private_keyrS   |   s=    
 MLLLLL?H555(((CCCr   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 512-bits.
ValueError)rK   r   s     r   rP   rP      sE    j((?
 
 	

 #~~>??? ~r   pqprivate_exponentdmp1dmq1iqmpmodulusc                 "   |dk     rt          d          | |k    rt          d          ||k    rt          d          ||k    rt          d          ||k    rt          d          ||k    rt          d          ||k    rt          d          |dk     s||k    rt          d	          |d
z  dk    rt          d          |d
z  dk    rt          d          |d
z  dk    rt          d          | |z  |k    rt          d          d S )NrU   zmodulus must be >= 3.zp must be < modulus.zq must be < modulus.zdmp1 must be < modulus.zdmq1 must be < modulus.ziqmp must be < modulus.z#private_exponent must be < modulus.z+public_exponent must be >= 3 and < modulus.   r   zpublic_exponent must be odd.zdmp1 must be odd.zdmq1 must be odd.zp*q must equal modulus.rV   )rX   rY   rZ   r[   r\   r]   rK   r^   s           r   _check_private_key_componentsra      sO    {{0111G||/000G||/000w2333w2333w23337"">???o88FGGGa7888ax1}},---ax1}},---1u2333 r   enc                     |dk     rt          d          | dk     s| |k    rt          d          | dz  dk    rt          d          d S )NrU   zn must be >= 3.ze must be >= 3 and < n.r`   r   ze must be odd.rV   )rb   rc   s     r   _check_public_key_componentsre      s]    1uu*+++1uuQ23331uzz)*** zr   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   r   )divmod)	rb   rf   x1x2abrY   rxns	            r   _modinvro      sh     FBaqA
a%%a||1!b&[!R|1b" a%% 6Mr   c                 "    t          ||           S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )ro   )rX   rY   s     r   rsa_crt_iqmprq      s     1a==r   c                     | |dz
  z  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    r`   r   )rZ   rX   s     r   rsa_crt_dmp1rs          
 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   )rZ   rY   s     r   rsa_crt_dmq1rv      rt   r   i  dc                    ||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   rW   rh   sorted)rc   rb   rw   ktottspottedrk   kcandrX   rY   rm   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   c                   6   e Zd Zdededededededdfd	Zed
efd            Zed
efd            Zed
efd            Zed
efd            Z	ed
efd            Z
ed
efd            Zedd            Z	 ddddej        ded
efdZded
efdZd
efdZdS )r   rX   rY   rw   r[   r\   r]   r@   r>   c                    t          |t                    rit          |t                    rTt          |t                    r?t          |t                    r*t          |t                    rt          |t                    st          d          t          |t                    st          d          || _        || _        || _        || _        || _        || _	        || _
        d S )NzNRSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must all be an integers.zFRSAPrivateNumbers public_numbers must be an RSAPublicNumbers instance.)
isinstancer/   	TypeErrorr>   _p_q_d_dmp1_dmq1_iqmp_public_numbers)r   rX   rY   rw   r[   r\   r]   r@   s           r   __init__zRSAPrivateNumbers.__init__$  s     1c""	a%%	 a%%	 dC((		
 dC((	 dC((	 '  
 .*:;; 	  
 


-r   r   c                     | j         S N)r   r   s    r   rX   zRSAPrivateNumbers.pI  	    wr   c                     | j         S r   )r   r   s    r   rY   zRSAPrivateNumbers.qM  r   r   c                     | j         S r   )r   r   s    r   rw   zRSAPrivateNumbers.dQ  r   r   c                     | j         S r   )r   r   s    r   r[   zRSAPrivateNumbers.dmp1U  
    zr   c                     | j         S r   )r   r   s    r   r\   zRSAPrivateNumbers.dmq1Y  r   r   c                     | j         S r   )r   r   s    r   r]   zRSAPrivateNumbers.iqmp]  r   r   c                     | j         S r   )r   r   s    r   r@   z RSAPrivateNumbers.public_numbersa  s    ##r   NF)unsafe_skip_rsa_key_validationrL   r   c                :    ddl m} |                    | |          S rN   )rO   rL   load_rsa_private_numbers)r   rL   r   rR   s       r   private_keyzRSAPrivateNumbers.private_keye  s@    	
 	
 	
 	
 	
 	
 ,,0
 
 	
r   otherc                    t          |t                    st          S | j        |j        k    o_| j        |j        k    oO| j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j	        |j	        k    S r   )
r   r   NotImplementedrX   rY   rw   r[   r\   r]   r@   r   r   s     r   __eq__zRSAPrivateNumbers.__eq__s  s    %!233 	"!! Feg <%'!<%'!< 	UZ'< 	UZ'	<
 	UZ'< #u';;	
r   c           	      t    t          | j        | j        | j        | j        | j        | j        | j        f          S r   )hashrX   rY   rw   r[   r\   r]   r@   r   s    r   __hash__zRSAPrivateNumbers.__hash__  s=    			#

 

 
	
r   rH   r   )r(   r)   r*   r/   r   r.   rX   rY   rw   r[   r\   r]   r@   r0   Anyboolr	   r   objectr   r   r   r   r   r   r   #  s       #.#. #. 	#.
 #. #. #. +#. #. #. #.J 3    X 3    X 3    X c    X c    X c    X $ $ $ X$
 #
 05	
 
 

 )-	

 

 
 
 

F 
t 
 
 
 

# 
 
 
 
 
 
r   r   c                       e Zd ZdedefdZedefd            Zedefd            Zddej	        de
fd	Zdefd
ZdedefdZdefdZdS )r>   rb   rc   c                     t          |t                    rt          |t                    st          d          || _        || _        d S )Nz,RSAPublicNumbers arguments must be integers.)r   r/   r   _e_n)r   rb   rc   s      r   r   zRSAPublicNumbers.__init__  sH    !S!! 	LAs);); 	LJKKKr   r   c                     | j         S r   )r   r   s    r   rb   zRSAPublicNumbers.e  r   r   c                     | j         S r   )r   r   s    r   rc   zRSAPublicNumbers.n  r   r   NrL   c                 8    ddl m} |                    |           S rN   )rO   rL   load_rsa_public_numbers)r   rL   rR   s      r   r   zRSAPublicNumbers.public_key  s6    	
 	
 	
 	
 	
 	
 ++D111r   c                 ,    d                     |           S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r#   r   s    r   __repr__zRSAPublicNumbers.__repr__  s    5<<TBBBr   r   c                 z    t          |t                    st          S | j        |j        k    o| j        |j        k    S r   )r   r>   r   rb   rc   r   s     r   r   zRSAPublicNumbers.__eq__  s8    %!122 	"!!v 6TVuw%66r   c                 8    t          | j        | j        f          S r   )r   rb   rc   r   s    r   r   zRSAPublicNumbers.__hash__  s    TVTV$%%%r   r   )r(   r)   r*   r/   r   r.   rb   rc   r0   r   r   r   strr   r   r   r   r   r   r   r   r>   r>     s
       # #     3    X 3    X2 2&* 2 2 2 2 2C# C C C C7F 7t 7 7 7 7&# & & & & & &r   r>   r   ) r+   r0   mathr   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr   )cryptography.hazmat.primitives.asymmetricr   r2   ABCMetar	   RSAPrivateKeyWithSerializationr   RSAPublicKeyWithSerializationr/   r   rS   rP   ra   re   ro   rq   rs   rv   r{   Tupler   r   r>   r   r   r   <module>r      s;   


        A A A A A A A A H H H H H H I I I I I I. . . . .ck . . . .b "/ 3 3 3 3 3S[ 3 3 3 3l !-  D DDD ZD 	D D D D@C @3 @4 @ @ @ @,4
,4
,4 ,4 	,4
 ,4 ,4 ,4 ,4 
,4 ,4 ,4 ,4^+C +C +D + + + +
s 
s 
s 
 
 
 
C C C    &3 &3 &3 & & & &&3 &3 &3 & & & &  *
***\#s(* * * *Zi
 i
 i
 i
 i
 i
 i
 i
X!& !& !& !& !& !& !& !& !& !&r   