U
    ÒZj:,  ã                
   @   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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   úp/var/www/html/TRUCKING_PROJECT/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_bytes5   s    zRSAPrivateKey.private_bytesN)Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodÚbytesr   r   ÚabstractpropertyÚ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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   ÚencryptE   s    zRSAPublicKey.encryptr   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_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   D   s0   ü	ú
û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rˆt d	ƒ‚|d
@ dkrœt dƒ‚|d
@ dkr°t dƒ‚|d
@ dkrÄt dƒ‚| | |krØt 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 r”t||| ƒ}|dkrŠ|| d krŠt|d| ƒdkrŠt|d | ƒ}	d}q”|d9 }q>|d7 }q.|sªtdƒ‚t| |	ƒ\}
}|dksÄt‚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ej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_numbersN©r8   r
   c                 C   s   ddl m} | | ¡S r9   )r:   r8   Zload_rsa_private_numbers©r   r8   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   rr   r   r   r   Ú__eq__l  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__z  s    ùÿzRSAPrivateNumbers.__hash__)N)r   r    r!   r&   rl   ÚpropertyrA   rB   rX   rD   rE   rF   r1   r'   ÚAnyr   rp   ÚobjectÚboolru   rw   r   r   r   r   r   #  s2   ø%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   )r|   r   r   r   r   rJ   �  s    zRSAPublicNumbers.ec                 C   s   | j S rm   )r}   r   r   r   r   rK   ”  s    zRSAPublicNumbers.nNrn   c                 C   s   ddl m} | | ¡S r9   )r:   r8   Zload_rsa_public_numbersro   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__rq   c                 C   s&   t |tƒstS | j|jko$| j|jkS rm   )rc   r0   rs   rJ   rK   rt   r   r   r   ru   ¢  s    
zRSAPublicNumbers.__eq__c                 C   s   t | j| jfƒS rm   )rv   rJ   rK   r   r   r   r   rw   ¨  s    zRSAPublicNumbers.__hash__)N)r   r    r!   r&   rl   rx   rJ   rK   r'   ry   r   r   Ústrr~   rz   r{   ru   rw   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&   ry   r=   r;   rI   rM   rT   rU   rV   rW   r[   ÚTuplerb   r   r0   r   r   r   r   Ú<module>   sP   05 ýü÷/  þ-e