
    _fg-                    2   d dl mZ 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.dZd/dZd0dZd1dZd2d!Zd3d"Zd4d#Zd5d$Zd%Zd6d(Z G d) d*          Z G d+ d,          ZdS )7    )annotationsN)gcd)_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      _/var/www/html/env/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	algorithm8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]c                    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_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_bytes5   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   r8   r   s      r   encryptzRSAPublicKey.encryptE   r   r   r   c                    dS r   r   r   s    r   r   zRSAPublicKey.key_sizeK   r   r   RSAPublicNumbersc                    dS )z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   public_numberszRSAPublicKey.public_numbersR   r   r   r&   r'   r(   _serialization.PublicFormatc                    dS r-   r   )r   r&   r(   s      r   public_byteszRSAPublicKey.public_bytesX   r   r   	signaturer   r   r    Nonec                    dS )z5
        Verifies the signature of the data.
        Nr   )r   rB   r   r   r   s        r   verifyzRSAPublicKey.verifyb   r   r   %typing.Optional[hashes.HashAlgorithm]c                    dS )z@
        Recovers the original data from the signature.
        Nr   )r   rB   r   r   s       r   recover_data_from_signaturez(RSAPublicKey.recover_data_from_signaturen   r   r   otherobjectboolc                    dS )z"
        Checks equality.
        Nr   r   rI   s     r   __eq__zRSAPublicKey.__eq__y   r   r   N)r8   r   r   r   r   r   r/   r   r<   )r&   r'   r(   r?   r   r   )
rB   r   r   r   r   r   r   r    r   rC   )rB   r   r   r   r   rF   r   r   rI   rJ   r   rK   )r0   r1   r2   r3   r4   r:   r5   r   r>   rA   rE   rH   rN   r   r   r   r   r   D   s          
     X
 	   
 	    		 	 	 	 	    	     r   r   public_exponentr   r   backend
typing.Anyr   c                Z    ddl m} t          | |           |                    | |          S Nr   )rR   ),cryptography.hazmat.backends.openssl.backendrR   _verify_rsa_parametersgenerate_rsa_private_key)rQ   r   rR   ossls       r   generate_private_keyrZ      s=    
 MLLLLL?H555(((CCCr   rC   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)rQ   r   s     r   rW   rW      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 )Nr\   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.r]   )r_   r`   ra   rb   rc   rd   rQ   re   s           r   _check_private_key_componentsrh      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 )Nr\   zn must be >= 3.ze must be >= 3 and < n.rg   r   ze must be odd.r]   )ri   rj   s     r   _check_public_key_componentsrl      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
    )rg   r   r   )divmod)	ri   rm   x1x2abr`   rxns	            r   _modinvrv      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.
    )rv   )r_   r`   s     r   rsa_crt_iqmprx      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.
    rg   r   )ra   r_   s     r   rsa_crt_dmp1rz          
 q1u%%r   c                    | |dz
  z  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rg   r   )ra   r`   s     r   rsa_crt_dmq1r}      r{   r   i  dtyping.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.
    rg      r   FTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowr   r^   ro   sorted)rj   ri   r~   ktottspottedrr   kcandr_   r`   rt   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                      e Zd Zd d
Zed!d            Zed!d            Zed!d            Zed!d            Zed!d            Z	ed!d            Z
ed"d            Z	 d#ddd$dZd%dZd!dZdS )&r#   r_   r   r`   r~   rb   rc   rd   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   r_   r`   r~   rb   rc   rd   r>   s           r   __init__zRSAPrivateNumbers.__init__+  s     1c""	a%%	 a%%	 dC((		
 dC((	 dC((	 '  
 .*:;; 	  
 


-r   r   c                    | j         S N)r   r   s    r   r_   zRSAPrivateNumbers.pP  	    wr   c                    | j         S r   )r   r   s    r   r`   zRSAPrivateNumbers.qT  r   r   c                    | j         S r   )r   r   s    r   r~   zRSAPrivateNumbers.dX  r   r   c                    | j         S r   )r   r   s    r   rb   zRSAPrivateNumbers.dmp1\  
    zr   c                    | j         S r   )r   r   s    r   rc   zRSAPrivateNumbers.dmq1`  r   r   c                    | j         S r   )r   r   s    r   rd   zRSAPrivateNumbers.iqmpd  r   r   c                    | j         S r   )r   r   s    r   r>   z RSAPrivateNumbers.public_numbersh  s    ##r   NF)unsafe_skip_rsa_key_validationrR   rS   r   rK   r
   c               :    ddl m} |                    | |          S rU   )rV   rR   load_rsa_private_numbers)r   rR   r   rY   s       r   private_keyzRSAPrivateNumbers.private_keyl  s@    	
 	
 	
 	
 	
 	
 ,,0
 
 	
r   rI   rJ   c                   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#   NotImplementedr_   r`   r~   rb   rc   rd   r>   rM   s     r   rN   zRSAPrivateNumbers.__eq__z  s    %!233 	"!! Feg <%'!<%'!< 	UZ'< 	UZ'	<
 	UZ'< #u';;	
r   c           	     t    t          | j        | j        | j        | j        | j        | j        | j        f          S r   )hashr_   r`   r~   rb   rc   rd   r>   r   s    r   __hash__zRSAPrivateNumbers.__hash__  s=    			#

 

 
	
r   )r_   r   r`   r   r~   r   rb   r   rc   r   rd   r   r>   r<   r/   rO   r   )rR   rS   r   rK   r   r
   rP   )r0   r1   r2   r   r5   r_   r`   r~   rb   rc   rd   r>   r   rN   r   r   r   r   r#   r#   *  s^       #. #. #. #.J    X    X    X    X    X    X $ $ $ X$
 #
 05	
 
 
 
 
 

 
 
 

 
 
 
 
 
r   r#   c                  h    e Zd ZddZedd            Zedd            ZdddZddZddZ	ddZ
dS )r<   ri   r   rj   c                    t          |t                    rt          |t                    st          d          || _        || _        d S )Nz,RSAPublicNumbers arguments must be integers.)r   r   r   _e_n)r   ri   rj   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   ri   zRSAPublicNumbers.e  r   r   c                    | j         S r   )r   r   s    r   rj   zRSAPublicNumbers.n  r   r   NrR   rS   r   c                8    ddl m} |                    |           S rU   )rV   rR   load_rsa_public_numbers)r   rR   rY   s      r   r   zRSAPublicNumbers.public_key  s6    	
 	
 	
 	
 	
 	
 ++D111r   strc                ,    d                     |           S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r(   r   s    r   __repr__zRSAPublicNumbers.__repr__  s    5<<TBBBr   rI   rJ   rK   c                z    t          |t                    st          S | j        |j        k    o| j        |j        k    S r   )r   r<   r   ri   rj   rM   s     r   rN   zRSAPublicNumbers.__eq__  s8    %!122 	"!!v 6TVuw%66r   c                8    t          | j        | j        f          S r   )r   ri   rj   r   s    r   r   zRSAPublicNumbers.__hash__  s    TVTV$%%%r   )ri   r   rj   r   r/   r   )rR   rS   r   r   )r   r   rP   )r0   r1   r2   r   r5   ri   rj   r   r   rN   r   r   r   r   r<   r<     s               X    X2 2 2 2 2C C C C7 7 7 7& & & & & &r   r<   r   )rQ   r   r   r   rR   rS   r   r
   )rQ   r   r   r   r   rC   )r_   r   r`   r   ra   r   rb   r   rc   r   rd   r   rQ   r   re   r   r   rC   )ri   r   rj   r   r   rC   )ri   r   rm   r   r   r   )r_   r   r`   r   r   r   )ra   r   r_   r   r   r   )ra   r   r`   r   r   r   )rj   r   ri   r   r~   r   r   r   )
__future__r   r3   typingmathr   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr   )cryptography.hazmat.primitives.asymmetricr   
asym_utilsABCMetar
   RSAPrivateKeyWithSerializationr   RSAPublicKeyWithSerializationrZ   rW   rh   rl   rv   rx   rz   r}   r   r   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 "/ 9 9 9 9 9S[ 9 9 9 9x !-  D D D D D@ @ @ @,4 ,4 ,4 ,4^+ + + +
 
 
 
   & & & && & & &  * * * *Zi
 i
 i
 i
 i
 i
 i
 i
X!& !& !& !& !& !& !& !& !& !&r   