U
    ςdg-                  
   @  sX  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d0dddddddZddddddZdddddddddd	ddZddddddZddddddZdddddd Zdddd!d"d#Zdddd$d%d&Zd'Zdddd(d)d*d+ZG d,d- d-ZG d.d/ d/ZdS )1    )annotationsN)gcd)_serializationhashes)AsymmetricPadding)utilsc                   @  s   e Zd ZejddddddZeejdddd	Zejd
dddZejdddddddZ	ejddddZ
ejdddddddZdS )RSAPrivateKeybytesr   )
ciphertextpaddingreturnc                 C  s   dS )z3
        Decrypts the provided ciphertext.
        N )selfr
   r   r   r   j/var/www/html/myproject/myenv/lib/python3.8/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pydecrypt   s    zRSAPrivateKey.decryptintr   c                 C  s   dS z7
        The bit length of the public modulus.
        Nr   r   r   r   r   key_size   s    zRSAPrivateKey.key_sizeRSAPublicKeyc                 C  s   dS )zD
        The RSAPublicKey associated with this private key.
        Nr   r   r   r   r   
public_key   s    zRSAPrivateKey.public_key8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm])datar   	algorithmr   c                 C  s   dS )z!
        Signs the data.
        Nr   )r   r   r   r   r   r   r   sign$   s    zRSAPrivateKey.signRSAPrivateNumbersc                 C  s   dS )z/
        Returns an RSAPrivateNumbers.
        Nr   r   r   r   r   private_numbers/   s    zRSAPrivateKey.private_numbers_serialization.Encodingz_serialization.PrivateFormatz)_serialization.KeySerializationEncryption)encodingformatencryption_algorithmr   c                 C  s   dS z6
        Returns the key serialized as bytes.
        Nr   )r   r   r    r!   r   r   r   private_bytes5   s    zRSAPrivateKey.private_bytesN)__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dddZeejdddd	Zejd
dddZejddddddZ	ejddddddddZ
ejdddddddZejdddddZd S )!r   r	   r   )	plaintextr   r   c                 C  s   dS )z/
        Encrypts the given plaintext.
        Nr   )r   r+   r   r   r   r   encryptE   s    zRSAPublicKey.encryptr   r   c                 C  s   dS r   r   r   r   r   r   r   K   s    zRSAPublicKey.key_sizeRSAPublicNumbersc                 C  s   dS )z-
        Returns an RSAPublicNumbers
        Nr   r   r   r   r   public_numbersR   s    zRSAPublicKey.public_numbersr   z_serialization.PublicFormat)r   r    r   c                 C  s   dS r"   r   )r   r   r    r   r   r   public_bytesX   s    zRSAPublicKey.public_bytesr   None)	signaturer   r   r   r   c                 C  s   dS )z5
        Verifies the signature of the data.
        Nr   )r   r1   r   r   r   r   r   r   verifyb   s    zRSAPublicKey.verifyz%typing.Optional[hashes.HashAlgorithm])r1   r   r   r   c                 C  s   dS )z@
        Recovers the original data from the signature.
        Nr   )r   r1   r   r   r   r   r   recover_data_from_signaturen   s    z(RSAPublicKey.recover_data_from_signatureobjectboolotherr   c                 C  s   dS )z"
        Checks equality.
        Nr   r   r7   r   r   r   __eq__y   s    zRSAPublicKey.__eq__N)r$   r%   r&   r'   r(   r,   r)   r   r.   r/   r2   r3   r9   r   r   r   r   r   D   s   	
r   r   
typing.Any)public_exponentr   backendr   c                 C  s"   ddl m} t| | || |S Nr   )r<   ),cryptography.hazmat.backends.openssl.backendr<   _verify_rsa_parametersZgenerate_rsa_private_key)r;   r   r<   osslr   r   r   generate_private_key   s    
rA   r0   )r;   r   r   c                 C  s$   | dk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)r;   r   r   r   r   r?      s    r?   )	pqprivate_exponentdmp1dmq1iqmpr;   modulusr   c                 C  s   |dk rt d| |kr t d||kr0t d||kr@t d||krPt d||kr`t d||krpt d|dk s||krt d	|d
@ dkrt d|d
@ dkrt d|d
@ dkrt d| | |krt dd S )NrB   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.rC   )rE   rF   rG   rH   rI   rJ   r;   rK   r   r   r   _check_private_key_components   s0    
rM   )enr   c                 C  s@   |dk rt d| dk s | |kr(t d| d@ dkr<t dd S )NrB   zn must be >= 3.ze must be >= 3 and < n.rL   r   ze must be odd.rC   rN   rO   r   r   r   _check_public_key_components   s    rQ   )rN   mr   c           	      C  sR   d\}}| | }}|dkrJt ||\}}|||  }||||f\}}}}q|| S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )rL   r   r   )divmod)	rN   rR   x1Zx2abrF   rZxnr   r   r   _modinv   s    
rX   )rE   rF   r   c                 C  s
   t || S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rX   )rE   rF   r   r   r   rsa_crt_iqmp   s    rY   )rG   rE   r   c                 C  s   | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rL   r   )rG   rE   r   r   r   rsa_crt_dmp1   s    rZ   )rG   rF   r   c                 C  s   | |d  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rL   r   )rG   rF   r   r   r   rsa_crt_dmq1   s    r[   i  ztyping.Tuple[int, int])rO   rN   dr   c                 C  s   || d }|}|d dkr&|d }qd}d}|s|t k r|}||k rt||| }|dkr|| d krt|d| dkrt|d | }	d}q|d9 }q>|d7 }q.|stdt| |	\}
}|dkst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.
    rL      r   FTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowr   rD   rS   AssertionErrorsorted)rO   rN   r\   ZktottZspottedrU   kcandrE   rF   rW   r   r   r   rsa_recover_prime_factors   s,    
$

rf   c                   @  s   e Zd ZddddddddddZeddddZeddd	d
ZeddddZeddddZeddddZ	eddddZ
eddddZd$ddddddddZdddd d!Zddd"d#ZdS )%r   r   r-   )rE   rF   r\   rH   rI   rJ   r.   c                 C  s   t |tr<t |tr<t |tr<t |tr<t |tr<t |tsDtdt |tsVt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   rE   rF   r\   rH   rI   rJ   r.   r   r   r   __init__+  s4    
zRSAPrivateNumbers.__init__r   c                 C  s   | j S N)ri   r   r   r   r   rE   P  s    zRSAPrivateNumbers.pc                 C  s   | j S rq   )rj   r   r   r   r   rF   T  s    zRSAPrivateNumbers.qc                 C  s   | j S rq   )rk   r   r   r   r   r\   X  s    zRSAPrivateNumbers.dc                 C  s   | j S rq   )rl   r   r   r   r   rH   \  s    zRSAPrivateNumbers.dmp1c                 C  s   | j S rq   )rm   r   r   r   r   rI   `  s    zRSAPrivateNumbers.dmq1c                 C  s   | j S rq   )rn   r   r   r   r   rJ   d  s    zRSAPrivateNumbers.iqmpc                 C  s   | j S rq   )ro   r   r   r   r   r.   h  s    z RSAPrivateNumbers.public_numbersNF)unsafe_skip_rsa_key_validationr:   r5   r   )r<   rr   r   c                C  s   ddl m} || |S r=   )r>   r<   Zload_rsa_private_numbers)r   r<   rr   r@   r   r   r   private_keyl  s
     zRSAPrivateNumbers.private_keyr4   r6   c                 C  sb   t |tstS | j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j	|j	kS rq   )
rg   r   NotImplementedrE   rF   r\   rH   rI   rJ   r.   r8   r   r   r   r9   z  s    






zRSAPrivateNumbers.__eq__c                 C  s$   t | j| j| j| j| j| j| jfS rq   )hashrE   rF   r\   rH   rI   rJ   r.   r   r   r   r   __hash__  s    zRSAPrivateNumbers.__hash__)N)r$   r%   r&   rp   r)   rE   rF   r\   rH   rI   rJ   r.   rs   r9   rv   r   r   r   r   r   *  s*   % r   c                   @  s~   e Zd ZdddddZeddddZedddd	ZddddddZddddZdddddZ	ddddZ
d
S )r-   r   rP   c                 C  s,   t |trt |tstd|| _|| _d S )Nz,RSAPublicNumbers arguments must be integers.)rg   r   rh   _e_n)r   rN   rO   r   r   r   rp     s    zRSAPublicNumbers.__init__r   c                 C  s   | j S rq   )rw   r   r   r   r   rN     s    zRSAPublicNumbers.ec                 C  s   | j S rq   )rx   r   r   r   r   rO     s    zRSAPublicNumbers.nNr:   r   )r<   r   c                 C  s   ddl m} || S r=   )r>   r<   Zload_rsa_public_numbers)r   r<   r@   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__r4   r5   r6   c                 C  s&   t |tstS | j|jko$| j|jkS rq   )rg   r-   rt   rN   rO   r8   r   r   r   r9     s    
zRSAPublicNumbers.__eq__c                 C  s   t | j| jfS rq   )ru   rN   rO   r   r   r   r   rv     s    zRSAPublicNumbers.__hash__)N)r$   r%   r&   rp   r)   rN   rO   r   rz   r9   rv   r   r   r   r   r-     s   r-   )N)
__future__r   r'   typingmathr   Zcryptography.hazmat.primitivesr   r   Z*cryptography.hazmat.primitives._asymmetricr   Z)cryptography.hazmat.primitives.asymmetricr   Z
asym_utilsABCMetar   ZRSAPrivateKeyWithSerializationr   ZRSAPublicKeyWithSerializationrA   r?   rM   rQ   rX   rY   rZ   r[   r_   rf   r   r-   r   r   r   r   <module>   s.   1< /-l