U
    EZh,                  
   @   sX  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d+eeejedddZeeddddZeeeeeeeedd	ddZeeddddZeeedddZeeedddZeeedddZeeed d!d"Zd#Zeeeejeef d$d%d&ZG d'd( d(ZG d)d* d*ZdS ),    N)gcd)_serializationhashes)AsymmetricPadding)utilsc                   @   s   e Zd ZejeeedddZeeje	dddZ
ejdddd	Zejeeejejejf ed
ddZejddddZejejejejedddZdS )RSAPrivateKey)
ciphertextpaddingreturnc                 C   s   dS )z3
        Decrypts the provided ciphertext.
        N )selfr   r	   r   r   t/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pydecrypt   s    zRSAPrivateKey.decrypt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_key)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)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_bytes4   s    zRSAPrivateKey.private_bytesN)__name__
__module____qualname__abcabstractmethodbytesr   r   propertyintr   r   typingUnion
asym_utils	Prehashedr   HashAlgorithmr   r   r   EncodingZPrivateFormatZKeySerializationEncryptionr   r   r   r   r   r      s*   
r   )	metaclassc                   @   s   e Zd ZejeeedddZeeje	dddZ
ejdddd	Zejejejed
ddZejeeeejejejf ddddZejeeejej edddZdS )r   )	plaintextr	   r
   c                 C   s   dS )z/
        Encrypts the given plaintext.
        Nr   )r   r.   r	   r   r   r   encryptD   s    zRSAPublicKey.encryptr   c                 C   s   dS r   r   r   r   r   r   r   J   s    zRSAPublicKey.key_sizeRSAPublicNumbersc                 C   s   dS )z-
        Returns an RSAPublicNumbers
        Nr   r   r   r   r   public_numbersQ   s    zRSAPublicKey.public_numbers)r   r   r
   c                 C   s   dS r   r   )r   r   r   r   r   r   public_bytesW   s    zRSAPublicKey.public_bytesN)	signaturer   r	   r   r
   c                 C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r   r3   r   r	   r   r   r   r   verifya   s    zRSAPublicKey.verify)r3   r	   r   r
   c                 C   s   dS )z@
        Recovers the original data from the signature.
        Nr   )r   r3   r	   r   r   r   r   recover_data_from_signaturem   s    z(RSAPublicKey.recover_data_from_signature)r   r    r!   r"   r#   r$   r   r/   r%   r&   r   r1   r   r,   ZPublicFormatr2   r'   r(   r)   r*   r   r+   r4   Optionalr5   r   r   r   r   r   C   s2   	
r   )public_exponentr   backendr
   c                 C   s"   ddl m} t| | || |S Nr   )r8   ),cryptography.hazmat.backends.openssl.backendr8   _verify_rsa_parametersZgenerate_rsa_private_key)r7   r   r8   osslr   r   r   generate_private_key|   s    
r=   )r7   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)r7   r   r   r   r   r;      s    r;   )	pqprivate_exponentdmp1dmq1iqmpr7   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 )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?   )rA   rB   rC   rD   rE   rF   r7   rG   r   r   r   _check_private_key_components   s0    
rI   )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 )Nr>   zn must be >= 3.ze must be >= 3 and < n.rH   r   ze must be odd.r?   rJ   rK   r   r   r   _check_public_key_components   s    rM   )rJ   mr
   c           	      C   sR   d\}}| | }}|dkrJt ||\}}|||  }||||f\}}}}q|| S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )rH   r   r   )divmod)	rJ   rN   x1Zx2abrB   rZxnr   r   r   _modinv   s    
rT   )rA   rB   r
   c                 C   s
   t || S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rT   )rA   rB   r   r   r   rsa_crt_iqmp   s    rU   )rC   rA   r
   c                 C   s   | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rH   r   )rC   rA   r   r   r   rsa_crt_dmp1   s    rV   )rC   rB   r
   c                 C   s   | |d  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rH   r   )rC   rB   r   r   r   rsa_crt_dmq1   s    rW   i  )rK   rJ   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.
    rH      r   FTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowr   r@   rO   AssertionErrorsorted)rK   rJ   rX   ZktottZspottedrQ   kcandrA   rB   rS   r   r   r   rsa_recover_prime_factors   s,    
$

rb   c                   @   s   e Zd ZeeeeeeddddZeedddZeeddd	Zeedd
dZeedddZ	eedddZ
eedddZeddddZdddejeedddZeedddZedddZdS ) r   r0   )rA   rB   rX   rD   rE   rF   r1   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&   	TypeErrorr0   _p_q_d_dmp1_dmq1_iqmp_public_numbers)r   rA   rB   rX   rD   rE   rF   r1   r   r   r   __init__$  s4    
zRSAPrivateNumbers.__init__r   c                 C   s   | j S N)re   r   r   r   r   rA   I  s    zRSAPrivateNumbers.pc                 C   s   | j S rm   )rf   r   r   r   r   rB   M  s    zRSAPrivateNumbers.qc                 C   s   | j S rm   )rg   r   r   r   r   rX   Q  s    zRSAPrivateNumbers.dc                 C   s   | j S rm   )rh   r   r   r   r   rD   U  s    zRSAPrivateNumbers.dmp1c                 C   s   | j S rm   )ri   r   r   r   r   rE   Y  s    zRSAPrivateNumbers.dmq1c                 C   s   | j S rm   )rj   r   r   r   r   rF   ]  s    zRSAPrivateNumbers.iqmpc                 C   s   | j S rm   )rk   r   r   r   r   r1   a  s    z RSAPrivateNumbers.public_numbersNF)unsafe_skip_rsa_key_validation)r8   rn   r
   c                C   s   ddl m} || |S r9   )r:   r8   Zload_rsa_private_numbers)r   r8   rn   r<   r   r   r   private_keye  s
     zRSAPrivateNumbers.private_keyotherr
   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 rm   )
rc   r   NotImplementedrA   rB   rX   rD   rE   rF   r1   r   rq   r   r   r   __eq__s  s    






zRSAPrivateNumbers.__eq__c                 C   s$   t | j| j| j| j| j| j| jfS rm   )hashrA   rB   rX   rD   rE   rF   r1   r   r   r   r   __hash__  s    zRSAPrivateNumbers.__hash__)N)r   r    r!   r&   rl   r%   rA   rB   rX   rD   rE   rF   r1   r'   Anyboolr   ro   objectrt   rv   r   r   r   r   r   #  s@   % r   c                   @   s   e Zd ZeedddZeedddZeedddZdej	e
d
ddZedddZeedddZedddZd	S )r0   rL   c                 C   s,   t |trt |tstd|| _|| _d S )Nz,RSAPublicNumbers arguments must be integers.)rc   r&   rd   _e_n)r   rJ   rK   r   r   r   rl     s    zRSAPublicNumbers.__init__r   c                 C   s   | j S rm   )rz   r   r   r   r   rJ     s    zRSAPublicNumbers.ec                 C   s   | j S rm   )r{   r   r   r   r   rK     s    zRSAPublicNumbers.nN)r8   r
   c                 C   s   ddl m} || S r9   )r:   r8   Zload_rsa_public_numbers)r   r8   r<   r   r   r   r     s    zRSAPublicNumbers.public_keyc                 C   s
   d | S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r   r   r   r   r   __repr__  s    zRSAPublicNumbers.__repr__rp   c                 C   s&   t |tstS | j|jko$| j|jkS rm   )rc   r0   rr   rJ   rK   rs   r   r   r   rt     s    
zRSAPublicNumbers.__eq__c                 C   s   t | j| jfS rm   )ru   rJ   rK   r   r   r   r   rv     s    zRSAPublicNumbers.__hash__)N)r   r    r!   r&   rl   r%   rJ   rK   r'   rw   r   r   strr|   ry   rx   rt   rv   r   r   r   r   r0     s   r0   )N) r"   r'   mathr   Zcryptography.hazmat.primitivesr   r   Z*cryptography.hazmat.primitives._asymmetricr   Z)cryptography.hazmat.primitives.asymmetricr   r)   ABCMetar   ZRSAPrivateKeyWithSerializationr   ZRSAPublicKeyWithSerializationr&   rw   r=   r;   rI   rM   rT   rU   rV   rW   r[   Tuplerb   r   r0   r   r   r   r   <module>   sP   16 /  -l