
    +hg-                    n   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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZd dZd!dZd"dZdZ	 	 	 	 	 	 	 	 d#dZ G d d      Z G d d      Zy)$    )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y)RSAPrivateKeyc                     y)z3
        Decrypts the provided ciphertext.
        N )self
ciphertextpaddings      `/var/www/html/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pydecryptzRSAPrivateKey.decrypt           c                     yz7
        The bit length of the public modulus.
        Nr   r   s    r   key_sizezRSAPrivateKey.key_size   r   r   c                     y)zD
        The RSAPublicKey associated with this private key.
        Nr   r   s    r   
public_keyzRSAPrivateKey.public_key   r   r   c                     y)z!
        Signs the data.
        Nr   )r   datar   	algorithms       r   signzRSAPrivateKey.sign$   r   r   c                     y)z/
        Returns an RSAPrivateNumbers.
        Nr   r   s    r   private_numberszRSAPrivateKey.private_numbers/   r   r   c                     yz6
        Returns the key serialized as bytes.
        Nr   )r   encodingformatencryption_algorithms       r   private_byteszRSAPrivateKey.private_bytes5   r   r   N)r   bytesr   r   returnr&   r'   int)r'   RSAPublicKey)r   r&   r   r   r   8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]r'   r&   )r'   RSAPrivateNumbers)r"   _serialization.Encodingr#   z_serialization.PrivateFormatr$   z)_serialization.KeySerializationEncryptionr'   r&   )__name__
__module____qualname__abcabstractmethodr   propertyr   r   r   r   r%   r   r   r   r
   r
      s     
   
 	 
 	 # L	
 
  	 
 	) - H	
 
 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y)r*   c                     y)z/
        Encrypts the given plaintext.
        Nr   )r   	plaintextr   s      r   encryptzRSAPublicKey.encryptE   r   r   c                     yr   r   r   s    r   r   zRSAPublicKey.key_sizeK   r   r   c                     y)z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   public_numberszRSAPublicKey.public_numbersR   r   r   c                     yr!   r   )r   r"   r#   s      r   public_byteszRSAPublicKey.public_bytesX   r   r   c                     y)z5
        Verifies the signature of the data.
        Nr   )r   	signaturer   r   r   s        r   verifyzRSAPublicKey.verifyb   r   r   c                     y)z@
        Recovers the original data from the signature.
        Nr   )r   r?   r   r   s       r   recover_data_from_signaturez(RSAPublicKey.recover_data_from_signaturen   r   r   c                     y)z"
        Checks equality.
        Nr   r   others     r   __eq__zRSAPublicKey.__eq__y   r   r   N)r7   r&   r   r   r'   r&   r(   r'   RSAPublicNumbers)r"   r-   r#   z_serialization.PublicFormatr'   r&   )
r?   r&   r   r&   r   r   r   r+   r'   None)r?   r&   r   r   r   z%typing.Optional[hashes.HashAlgorithm]r'   r&   rE   objectr'   bool)r.   r/   r0   r1   r2   r8   r3   r   r;   r=   r@   rB   rF   r   r   r   r*   r*   D   s1    
   
 	 
 	) , 
	  			 	 #		
 L	 
	 	 	 # 9	
 
  	 r   r*   c                J    ddl m} t        | |       |j                  | |      S Nr   )backend),cryptography.hazmat.backends.openssl.backendrO   _verify_rsa_parametersgenerate_rsa_private_key)public_exponentr   rO   ossls       r   generate_private_keyrU      s%    
 M?H5(((CCr   c                B    | dvrt        d      |dk  rt        d      y )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)rS   r   s     r   rQ   rQ      s6    j(?
 	

 #~>?? r   c                   |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  |k7  rt        d      y )NrW   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.rX   )pqprivate_exponentdmp1dmq1iqmprS   moduluss           r   _check_private_key_componentsrc      s	    {011G|/00G|/00w233w233w2337">??o8FGGa788ax1},--ax1},--1u233 r   c                t    |dk  rt        d      | dk  s| |k\  rt        d      | dz  dk(  rt        d      y )NrW   zn must be >= 3.ze must be >= 3 and < n.r[   r   ze must be odd.rX   )ens     r   _check_public_key_componentsrg      sJ    1u*++1uQ2331uz)** r   c                x    d\  }}| |}}|dkD  r(t        ||      \  }}|||z  z
  }||||f\  }}}}|dkD  r(||z  S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )r[   r   r   )divmod)	re   mx1x2abr]   rxns	            r   _modinvrq      sb     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.
    )rq   )r\   r]   s     r   rsa_crt_iqmprs      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   )r^   r\   s     r   rsa_crt_dmp1ru          
 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   )r^   r]   s     r   rsa_crt_dmq1rx      rv   r   i  c                   ||z  dz
  }|}|dz  dk(  r|dz  }|dz  dk(  rd}d}|sh|t         k  r_|}||k  rGt        |||       }|dk7  r*|| dz
  k7  r"t        |d|       dk(  rt        |dz   |       }	d}n|dz  }||k  rG|dz  }|s
|t         k  r_|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   rY   ri   sorted)rf   re   dktottspottedrm   kcandr\   r]   ro   s               r   rsa_recover_prime_factorsr      s    q519D 	A
a%1*F a%1* G	A!44$hq!Q<DqyTa!e_T1aA1E q!$FA $h 	
Q !44 MNN!Q<DAq6M6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y	)r,   c                r   t        |t              rPt        |t              r@t        |t              r0t        |t              r t        |t              rt        |t              st        d      t        |t              st        d      || _        || _        || _        || _        || _        || _	        || _
        y )NzNRSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must all be an integers.zFRSAPrivateNumbers public_numbers must be an RSAPublicNumbers instance.)
isinstancer)   	TypeErrorrH   _p_q_d_dmp1_dmq1_iqmp_public_numbers)r   r\   r]   r   r_   r`   ra   r;   s           r   __init__zRSAPrivateNumbers.__init__+  s     1c"a%a%dC(dC(dC(' 
 .*:; 
 


-r   c                    | j                   S N)r   r   s    r   r\   zRSAPrivateNumbers.pP      ww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   r_   zRSAPrivateNumbers.dmp1\      zzr   c                    | j                   S r   )r   r   s    r   r`   zRSAPrivateNumbers.dmq1`  r   r   c                    | j                   S r   )r   r   s    r   ra   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_validationc               2    ddl m} |j                  | |      S rN   )rP   rO   load_rsa_private_numbers)r   rO   r   rT   s       r   private_keyzRSAPrivateNumbers.private_keyl  s"    	
 ,,0
 	
r   c                   t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  xr | j
                  |j
                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )
r   r,   NotImplementedr\   r]   r   r_   r`   ra   r;   rD   s     r   rF   zRSAPrivateNumbers.__eq__z  s    %!23!! FFegg <%''!<%''!< 		UZZ'< 		UZZ'	<
 		UZZ'< ##u';';;	
r   c           	         t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  f      S r   )hashr\   r]   r   r_   r`   ra   r;   r   s    r   __hash__zRSAPrivateNumbers.__hash__  sG    						##

 
	
r   )r\   r)   r]   r)   r   r)   r_   r)   r`   r)   ra   r)   r;   rH   r(   rG   r   )rO   
typing.Anyr   rL   r'   r
   rJ   )r.   r/   r0   r   r3   r\   r]   r   r_   r`   ra   r;   r   rF   r   r   r   r   r,   r,   *  s   #.#. #. 	#.
 #. #. #. )#.J             $ $
 #
 05	

 )-	

 



r   r,   c                  Z    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
y)rH   c                v    t        |t              rt        |t              st        d      || _        || _        y )Nz,RSAPublicNumbers arguments must be integers.)r   r)   r   _e_n)r   re   rf   s      r   r   zRSAPublicNumbers.__init__  s/    !S!As);JKKr   c                    | j                   S r   )r   r   s    r   re   zRSAPublicNumbers.e  r   r   c                    | j                   S r   )r   r   s    r   rf   zRSAPublicNumbers.n  r   r   Nc                0    ddl m} |j                  |       S rN   )rP   rO   load_rsa_public_numbers)r   rO   rT   s      r   r   zRSAPublicNumbers.public_key  s    	
 ++D11r   c                $    dj                  |       S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r#   r   s    r   __repr__zRSAPublicNumbers.__repr__  s    5<<TBBr   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r   )r   rH   r   re   rf   rD   s     r   rF   zRSAPublicNumbers.__eq__  s8    %!12!!vv 6TVVuww%66r   c                D    t        | j                  | j                  f      S r   )r   re   rf   r   s    r   r   zRSAPublicNumbers.__hash__  s    TVVTVV$%%r   )re   r)   rf   r)   r(   r   )rO   r   r'   r*   )r'   strrJ   )r.   r/   r0   r   r3   re   rf   r   r   rF   r   r   r   r   rH   rH     sD        2C7&r   rH   r   )rS   r)   r   r)   rO   r   r'   r
   )rS   r)   r   r)   r'   rI   )r\   r)   r]   r)   r^   r)   r_   r)   r`   r)   ra   r)   rS   r)   rb   r)   r'   rI   )re   r)   rf   r)   r'   rI   )re   r)   rj   r)   r'   r)   )r\   r)   r]   r)   r'   r)   )r^   r)   r\   r)   r'   r)   )r^   r)   r]   r)   r'   r)   )rf   r)   re   r)   r   r)   r'   ztyping.Tuple[int, int])
__future__r   r1   typingmathr   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr   )cryptography.hazmat.primitives.asymmetricr   
asym_utilsABCMetar
   RSAPrivateKeyWithSerializationr*   RSAPublicKeyWithSerializationrU   rQ   rc   rg   rq   rs   ru   rx   r|   r   r,   rH   r   r   r   <module>r      sA  
 # 
   A H I.ckk .b "/ 9S[[ 9x !-  DDD D 	D@,4
,4
,4 ,4 	,4
 ,4 ,4 ,4 ,4 
,4^+
&&  *
****Zi
 i
X!& !&r   