o
    eg-                     @  s  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 dejd	ZeZG d
d dejd	ZeZ	d6d7ddZd8ddZd9ddZd:d"d#Zd;d%d&Zd<d'd(Zd=d)d*Zd>d+d,Zd-Zd?d0d1ZG d2d3 d3ZG d4d5 d5ZdS )@    )annotationsN)gcd)_serializationhashes)AsymmetricPadding)utilsc                   @  sp   e Zd ZejdddZeejd d	d
Zejd!ddZejd"ddZ	ejd#ddZ
ejd$ddZdS )%RSAPrivateKey
ciphertextbytespaddingr   returnc                 C     dS )z3
        Decrypts the provided ciphertext.
        N )selfr	   r   r   r   `/var/www/html/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pydecrypt       zRSAPrivateKey.decryptintc                 C  r   z7
        The bit length of the public modulus.
        Nr   r   r   r   r   key_size   r   zRSAPrivateKey.key_sizeRSAPublicKeyc                 C  r   )zD
        The RSAPublicKey associated with this private key.
        Nr   r   r   r   r   
public_key   r   zRSAPrivateKey.public_keydata	algorithm8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]c                 C  r   )z!
        Signs the data.
        Nr   )r   r   r   r   r   r   r   sign$   r   zRSAPrivateKey.signRSAPrivateNumbersc                 C  r   )z/
        Returns an RSAPrivateNumbers.
        Nr   r   r   r   r   private_numbers/   r   zRSAPrivateKey.private_numbersencoding_serialization.Encodingformat_serialization.PrivateFormatencryption_algorithm)_serialization.KeySerializationEncryptionc                 C  r   z6
        Returns the key serialized as bytes.
        Nr   )r   r   r!   r#   r   r   r   private_bytes5   r   zRSAPrivateKey.private_bytesN)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    
r   )	metaclassc                   @  s   e Zd Zejd$ddZeejd%d	d
Zejd&ddZejd'ddZ	ejd(ddZ
ejd)ddZejd*d!d"Zd#S )+r   	plaintextr
   r   r   r   c                 C  r   )z/
        Encrypts the given plaintext.
        Nr   )r   r/   r   r   r   r   encryptE   r   zRSAPublicKey.encryptr   c                 C  r   r   r   r   r   r   r   r   K   r   zRSAPublicKey.key_sizeRSAPublicNumbersc                 C  r   )z-
        Returns an RSAPublicNumbers
        Nr   r   r   r   r   public_numbersR   r   zRSAPublicKey.public_numbersr   r    r!   _serialization.PublicFormatc                 C  r   r%   r   )r   r   r!   r   r   r   public_bytesX   r   zRSAPublicKey.public_bytes	signaturer   r   r   Nonec                 C  r   )z5
        Verifies the signature of the data.
        Nr   )r   r5   r   r   r   r   r   r   verifyb   r   zRSAPublicKey.verify%typing.Optional[hashes.HashAlgorithm]c                 C  r   )z@
        Recovers the original data from the signature.
        Nr   )r   r5   r   r   r   r   r   recover_data_from_signaturen   r   z(RSAPublicKey.recover_data_from_signatureotherobjectboolc                 C  r   )z"
        Checks equality.
        Nr   r   r:   r   r   r   __eq__y   r   zRSAPublicKey.__eq__N)r/   r
   r   r   r   r
   r'   r   r1   )r   r    r!   r3   r   r
   )
r5   r
   r   r
   r   r   r   r   r   r6   )r5   r
   r   r   r   r8   r   r
   r:   r;   r   r<   )r(   r)   r*   r+   r,   r0   r-   r   r2   r4   r7   r9   r>   r   r   r   r   r   D   s     	
r   public_exponentr   r   backend
typing.Anyr   c                 C  s"   ddl m} t| | || |S Nr   )rB   ),cryptography.hazmat.backends.openssl.backendrB   _verify_rsa_parametersgenerate_rsa_private_key)rA   r   rB   osslr   r   r   generate_private_key   s   
rI   r6   c                 C  s$   | 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)rA   r   r   r   r   rF      s   rF   pqprivate_exponentdmp1dmq1iqmpmodulusc                 C  s   |dk rt d| |krt d||krt d||kr t d||kr(t d||kr0t d||kr8t d|dk s@||krDt d	|d
@ dkrNt d|d
@ dkrXt d|d
@ dkrbt d| | |krlt dd S )NrJ   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.rK   )rM   rN   rO   rP   rQ   rR   rA   rS   r   r   r   _check_private_key_components   s2   
rU   enc                 C  s@   |dk rt d| dk s| |krt d| d@ dkrt dd S )NrJ   zn must be >= 3.ze must be >= 3 and < n.rT   r   ze must be odd.rK   )rV   rW   r   r   r   _check_public_key_components   s   rX   mc           	      C  sX   d\}}| |}}|dkr(t ||\}}|||  }||||f\}}}}|dks|| S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )rT   r   r   )divmod)	rV   rY   x1x2abrN   rxnr   r   r   _modinv   s   
ra   c                 C  s
   t || S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )ra   )rM   rN   r   r   r   rsa_crt_iqmp   s   
rb   c                 C     | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rT   r   )rO   rM   r   r   r   rsa_crt_dmp1      rd   c                 C  rc   )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rT   r   )rO   rN   r   r   r   rsa_crt_dmq1   re   rf   i  dtyping.Tuple[int, int]c                 C  s   || d }|}|d dkr|d }|d dksd}d}|s\|t k r\|}||k rRt||| }|dkrJ|| d krJt|d| dkrJt|d | }	d}n|d9 }||k s(|d7 }|s\|t k s"|sbtdt| |	\}
}|dksoJ t|	|
fd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.
    rT      r   FTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowr   rL   rZ   sorted)rW   rV   rg   ktottspottedr]   kcandrM   rN   r_   r   r   r   rsa_recover_prime_factors   s2   $rs   c                   @  s   e Zd Zd+d
dZed,ddZed,ddZed,ddZed,ddZed,ddZ	ed,ddZ
ed-ddZ	d.ddd/d#d$Zd0d'd(Zd,d)d*ZdS )1r   rM   r   rN   rg   rP   rQ   rR   r2   r1   c                 C  s   t |trt |trt |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   	TypeErrorr1   _p_q_d_dmp1_dmq1_iqmp_public_numbers)r   rM   rN   rg   rP   rQ   rR   r2   r   r   r   __init__+  s4   

zRSAPrivateNumbers.__init__r   c                 C     | j S N)rv   r   r   r   r   rM   P     zRSAPrivateNumbers.pc                 C  r~   r   )rw   r   r   r   r   rN   T  r   zRSAPrivateNumbers.qc                 C  r~   r   )rx   r   r   r   r   rg   X  r   zRSAPrivateNumbers.dc                 C  r~   r   )ry   r   r   r   r   rP   \  r   zRSAPrivateNumbers.dmp1c                 C  r~   r   )rz   r   r   r   r   rQ   `  r   zRSAPrivateNumbers.dmq1c                 C  r~   r   )r{   r   r   r   r   rR   d  r   zRSAPrivateNumbers.iqmpc                 C  r~   r   )r|   r   r   r   r   r2   h  r   z RSAPrivateNumbers.public_numbersNF)unsafe_skip_rsa_key_validationrB   rC   r   r<   r   c                C  s   ddl m} || |S rD   )rE   rB   load_rsa_private_numbers)r   rB   r   rH   r   r   r   private_keyl  s   zRSAPrivateNumbers.private_keyr:   r;   c                 C  sb   t |tstS | j|jko0| j|jko0| j|jko0| j|jko0| j|jko0| j|jko0| j	|j	kS r   )
rt   r   NotImplementedrM   rN   rg   rP   rQ   rR   r2   r=   r   r   r   r>   z  s   






zRSAPrivateNumbers.__eq__c                 C  s$   t | j| j| j| j| j| j| jfS r   )hashrM   rN   rg   rP   rQ   rR   r2   r   r   r   r   __hash__  s   zRSAPrivateNumbers.__hash__)rM   r   rN   r   rg   r   rP   r   rQ   r   rR   r   r2   r1   r'   r?   r   )rB   rC   r   r<   r   r   r@   )r(   r)   r*   r}   r-   rM   rN   rg   rP   rQ   rR   r2   r   r>   r   r   r   r   r   r   *  s,    
%
r   c                   @  s\   e Zd ZdddZedddZedd	d
ZddddZdddZd ddZ	dddZ
dS )!r1   rV   r   rW   c                 C  s,   t |tr
t |tstd|| _|| _d S )Nz,RSAPublicNumbers arguments must be integers.)rt   r   ru   _e_n)r   rV   rW   r   r   r   r}     s   
zRSAPublicNumbers.__init__r   c                 C  r~   r   )r   r   r   r   r   rV     r   zRSAPublicNumbers.ec                 C  r~   r   )r   r   r   r   r   rW     r   zRSAPublicNumbers.nNrB   rC   r   c                 C  s   ddl m} || S rD   )rE   rB   load_rsa_public_numbers)r   rB   rH   r   r   r   r     s   
zRSAPublicNumbers.public_keystrc                 C  s
   d | S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r!   r   r   r   r   __repr__  s   
zRSAPublicNumbers.__repr__r:   r;   r<   c                 C  s&   t |tstS | j|jko| j|jkS r   )rt   r1   r   rV   rW   r=   r   r   r   r>     s   
zRSAPublicNumbers.__eq__c                 C  s   t | j| jfS r   )r   rV   rW   r   r   r   r   r     s   zRSAPublicNumbers.__hash__)rV   r   rW   r   r'   r   )rB   rC   r   r   )r   r   r@   )r(   r)   r*   r}   r-   rV   rW   r   r   r>   r   r   r   r   r   r1     s    


r1   r   )rA   r   r   r   rB   rC   r   r   )rA   r   r   r   r   r6   )rM   r   rN   r   rO   r   rP   r   rQ   r   rR   r   rA   r   rS   r   r   r6   )rV   r   rW   r   r   r6   )rV   r   rY   r   r   r   )rM   r   rN   r   r   r   )rO   r   rM   r   r   r   )rO   r   rN   r   r   r   )rW   r   rV   r   rg   r   r   rh   )
__future__r   r+   typingmathr   cryptography.hazmat.primitivesr   r   *cryptography.hazmat.primitives._asymmetricr   )cryptography.hazmat.primitives.asymmetricr   
asym_utilsABCMetar   RSAPrivateKeyWithSerializationr   RSAPublicKeyWithSerializationrI   rF   rU   rX   ra   rb   rd   rf   rk   rs   r   r1   r   r   r   r   <module>   s0   1<


/




-l