
    2i!                    
   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j+                  e	j,                  j&                          G d dej$                  
      ZeZej+                  e	j,                  j.                         e	j,                  j2                  Ze	j,                  j4                  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#y)    )annotationsN)gcd)openssl)_serializationhashes)AsymmetricPadding)utilsc                  f   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y	)RSAPrivateKeyc                     y)z3
        Decrypts the provided ciphertext.
        N )self
ciphertextpaddings      c/var/www/html/qr/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_numbers3   r   r   c                     yz6
        Returns the key serialized as bytes.
        Nr   )r   encodingformatencryption_algorithms       r   private_byteszRSAPrivateKey.private_bytes9   r   r   c                     yz!
        Returns a copy.
        Nr   r   s    r   __copy__zRSAPrivateKey.__copy__D   r   r   c                     yz&
        Returns a deep copy.
        Nr   r   memos     r   __deepcopy__zRSAPrivateKey.__deepcopy__J   r   r   N)r   bytesr   r   returnr/   r0   intr0   RSAPublicKey)r   r/   r   r   r   zEasym_utils.Prehashed | hashes.HashAlgorithm | asym_utils.NoDigestInfor0   r/   )r0   RSAPrivateNumbers)r#   _serialization.Encodingr$   z_serialization.PrivateFormatr%   z)_serialization.KeySerializationEncryptionr0   r/   )r0   r   )r-   dictr0   r   )__name__
__module____qualname__abcabstractmethodr   propertyr   r   r   r    r&   r)   r.   r   r   r   r   r      s%    
   
 	 
 	

 #
"	
 

 
 	 
 	) - H	
 
  	 
 	 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ej                  dd	       Zy
)r4   c                     y)z/
        Encrypts the given plaintext.
        Nr   )r   	plaintextr   s      r   encryptzRSAPublicKey.encryptV   r   r   c                     yr   r   r   s    r   r   zRSAPublicKey.key_size\   r   r   c                     y)z-
        Returns an RSAPublicNumbers
        Nr   r   s    r   public_numberszRSAPublicKey.public_numbersc   r   r   c                     yr"   r   )r   r#   r$   s      r   public_byteszRSAPublicKey.public_bytesi   r   r   c                     y)z5
        Verifies the signature of the data.
        Nr   )r   	signaturer   r   r   s        r   verifyzRSAPublicKey.verifys   r   r   c                     y)z@
        Recovers the original data from the signature.
        Nr   )r   rI   r   r   s       r   recover_data_from_signaturez(RSAPublicKey.recover_data_from_signature   r   r   c                     y)z"
        Checks equality.
        Nr   )r   others     r   __eq__zRSAPublicKey.__eq__   r   r   c                     yr(   r   r   s    r   r)   zRSAPublicKey.__copy__   r   r   c                     yr+   r   r,   s     r   r.   zRSAPublicKey.__deepcopy__   r   r   N)rA   r/   r   r   r0   r/   r1   )r0   RSAPublicNumbers)r#   r6   r$   z_serialization.PublicFormatr0   r/   )
rI   r/   r   r/   r   r   r   z+asym_utils.Prehashed | hashes.HashAlgorithmr0   None)rI   r/   r   r   r   z5hashes.HashAlgorithm | asym_utils.NoDigestInfo | Noner0   r/   )rN   objectr0   boolr3   )r-   r7   r0   r4   )r8   r9   r:   r;   r<   rB   r=   r   rE   rG   rJ   rL   rO   r)   r.   r   r   r   r4   r4   U   se    
   
 	 
 	) , 
	  			 	 #		
 ?	 
	 	 	 # I	
 
  	 
 	 
 	 r   r4   c                Z    t        | |       t        j                  j                  | |      S N)_verify_rsa_parametersrust_opensslrsagenerate_private_key)public_exponentr   backends      r   r[   r[      s'    
 ?H500(KKr   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 1024-bits.
ValueError)r\   r   s     r   rX   rX      s6    j(?
 	

 $?@@ 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   )divmod)	emx1x2abqrxns	            r   _modinvrn      sb     FBaqA
a%a|1!b&[!R|1b" a% 6Mr   c                D    | dk  s|dk  rt        d      t        ||       S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    rc   Values can't be <= 1)ra   rn   )prk   s     r   rsa_crt_iqmprr      s)     	Ava/001a=r   c                <    | dk  s|dk  rt        d      | |dz
  z  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rc   rp   r`   )private_exponentrq   s     r   rsa_crt_dmp1ru      -    
 1Q/00q1u%%r   c                <    | dk  s|dk  rt        d      | |dz
  z  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rc   rp   r`   )rt   rk   s     r   rsa_crt_dmq1rx      rv   r   c                    | dk  s
|dk  s|dk  rt        d      |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   rp   )ra   r   rn   )re   rq   rk   lambda_ns       r   rsa_recover_private_exponentr{      sV    " 	Ava16/00A!a% CAq1u$55H1hr   i  c                (   |dk  s|dk  rt        d      dt        d||z  |       k7  rt        d      ||z  dz
  }|}|dz  dk(  r|dz  }|dz  dk(  rd}d}|s|t        k  rxt        j                  d| dz
        }|dz  }|}||k  rGt        |||       }	|	dk7  r*|	| dz
  k7  r"t        |	d|       dk(  rt        |	dz   |       }
d}n|dz  }||k  rG|s
|t        k  rx|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)ra   pow_MAX_RECOVERY_ATTEMPTSrandomrandintr   rd   sorted)nre   dktottspottedtriesri   kcandrq   rk   rl   s                r   rsa_recover_prime_factorsr      sa    	Ava-..	SQUA.//q519D 	A
a%1*F a%1* GE%"88NN1a!e$
$hq!Q<DqyTa!e_T1aA1E q!$FA $h %"88 MNN!Q<DAq6M61a&$'DAqq6Mr   rW   )r\   r2   r   r2   r]   z
typing.Anyr0   r   )r\   r2   r   r2   r0   rS   )re   r2   rf   r2   r0   r2   )rq   r2   rk   r2   r0   r2   )rt   r2   rq   r2   r0   r2   )rt   r2   rk   r2   r0   r2   )re   r2   rq   r2   rk   r2   r0   r2   )r   r2   re   r2   r   r2   r0   ztuple[int, int])$
__future__r   r;   r   typingmathr   "cryptography.hazmat.bindings._rustr   rY   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr   )cryptography.hazmat.primitives.asymmetricr	   
asym_utilsABCMetar   RSAPrivateKeyWithSerializationregisterrZ   r4   RSAPublicKeyWithSerializationr5   rR   r[   rX   rn   rr   ru   rx   r{   r   r   r   r   r   <module>r      s  
 # 
    F A H I<ckk <~ "/    |''55 6ES[[ EP !-    l&&33 4 $$66 ##44  LLL L 	LA
&& 2  -r   