3
ãde×,  ã            
   @   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   úd/var/www/agendate/envp3/lib/python3.6/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.encrypt)r
   c             C   s   dS )z7
        The bit length of the public modulus.
        Nr   )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 )z6
        Returns the key serialized as bytes.
        Nr   )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   r/   r   r	   r   r   r   r   Úverifya   s    zRSAPublicKey.verify)r/   r	   r   r
   c             C   s   dS )z@
        Recovers the original data from the signature.
        Nr   )r   r/   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   r-   r   r(   ZPublicFormatr.   r#   r$   r%   r&   r   r'   r0   ÚOptionalr1   r   r   r   r   r   C   s,   
r   )Úpublic_exponentr   Úbackendr
   c             C   s"   ddl m} t| |ƒ |j| |ƒS )Nr   )r4   )Ú,cryptography.hazmat.backends.openssl.backendr4   Ú_verify_rsa_parametersZgenerate_rsa_private_key)r3   r   r4   Úosslr   r   r   Úgenerate_private_key|   s    
r8   )r3   r   r
   c             C   s$   | dkrt dƒ‚|dk r t dƒ‚d S )Né   é  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.)r9   r:   )Ú
ValueError)r3   r   r   r   r   r6   ‡   s
    r6   )	ÚpÚqÚprivate_exponentÚdmp1Údmq1Úiqmpr3   Ú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 )Nr9   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;   )r<   r=   r>   r?   r@   rA   r3   rB   r   r   r   Ú_check_private_key_components’   s0    
rD   )Ú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 )Nr9   zn must be >= 3.ze must be >= 3 and < n.rC   r   ze must be odd.)r;   )rE   rF   r   r   r   Ú_check_public_key_componentsÁ   s    rG   )rE   Úmr
   c       	      C   sV   d\}}| | }}x:|dkrLt ||ƒ\}}|||  }||||f\}}}}qW || S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    rC   r   )rC   r   )Údivmod)	rE   rH   Úx1Zx2ÚaÚbr=   ÚrZxnr   r   r   Ú_modinvÌ   s    

rN   )r<   r=   r
   c             C   s
   t || ƒS )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rN   )r<   r=   r   r   r   Úrsa_crt_iqmpÙ   s    rO   )r>   r<   r
   c             C   s   | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    rC   r   )r>   r<   r   r   r   Úrsa_crt_dmp1à   s    rP   )r>   r=   r
   c             C   s   | |d  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    rC   r   )r>   r=   r   r   r   Úrsa_crt_dmq1è   s    rQ   iè  )rF   rE   Údr
   c             C   sî   || d }|}x|d dkr(|d }qW d}d}xx| rª|t k rª|}xX||k ržt||| ƒ}|dkr”|| d kr”t|d| ƒdkr”t|d | ƒ}	d}P |d9 }qHW |d7 }q4W |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.
    rC   é   r   FTz2Unable to compute factors p and q from exponent d.)Úreverse)Ú_MAX_RECOVERY_ATTEMPTSÚpowr   r;   rI   ÚAssertionErrorÚsorted)rF   rE   rR   ZktotÚtZspottedrK   ÚkÚcandr<   r=   rM   r   r   r   Úrsa_recover_prime_factorsö   s,    
$r\   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   r,   )r<   r=   rR   r?   r@   rA   r-   c             C   s�   t |tƒ sHt |tƒ sHt |tƒ sHt |tƒ sHt |tƒ sHt |tƒ rPtdƒ‚t |tƒsbt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   r<   r=   rR   r?   r@   rA   r-   r   r   r   Ú__init__$  s$    
zRSAPrivateNumbers.__init__)r
   c             C   s   | j S )N)r_   )r   r   r   r   r<   I  s    zRSAPrivateNumbers.pc             C   s   | j S )N)r`   )r   r   r   r   r=   M  s    zRSAPrivateNumbers.qc             C   s   | j S )N)ra   )r   r   r   r   rR   Q  s    zRSAPrivateNumbers.dc             C   s   | j S )N)rb   )r   r   r   r   r?   U  s    zRSAPrivateNumbers.dmp1c             C   s   | j S )N)rc   )r   r   r   r   r@   Y  s    zRSAPrivateNumbers.dmq1c             C   s   | j S )N)rd   )r   r   r   r   rA   ]  s    zRSAPrivateNumbers.iqmpc             C   s   | j S )N)re   )r   r   r   r   r-   a  s    z RSAPrivateNumbers.public_numbersNF)Úunsafe_skip_rsa_key_validation)r4   rg   r
   c            C   s   ddl m} |j| |ƒS )Nr   )r4   )r5   r4   Zload_rsa_private_numbers)r   r4   rg   r7   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 )N)
r]   r   ÚNotImplementedr<   r=   rR   r?   r@   rA   r-   )r   ri   r   r   r   Ú__eq__s  s    
zRSAPrivateNumbers.__eq__c             C   s$   t | j| j| j| j| j| j| jfƒS )N)Úhashr<   r=   rR   r?   r@   rA   r-   )r   r   r   r   Ú__hash__�  s    zRSAPrivateNumbers.__hash__)N)r   r   r   r"   rf   r!   r<   r=   rR   r?   r@   rA   r-   r#   ÚAnyÚboolr   rh   Úobjectrk   rm   r   r   r   r   r   #  s4   	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 )r,   )rE   rF   c             C   s0   t |tƒ st |tƒ r tdƒ‚|| _|| _d S )Nz,RSAPublicNumbers arguments must be integers.)r]   r"   r^   Ú_eÚ_n)r   rE   rF   r   r   r   rf   �  s    zRSAPublicNumbers.__init__)r
   c             C   s   | j S )N)rq   )r   r   r   r   rE   —  s    zRSAPublicNumbers.ec             C   s   | j S )N)rr   )r   r   r   r   rF   ›  s    zRSAPublicNumbers.nN)r4   r
   c             C   s   ddl m} |j| ƒS )Nr   )r4   )r5   r4   Zload_rsa_public_numbers)r   r4   r7   r   r   r   r   Ÿ  s    zRSAPublicNumbers.public_keyc             C   s
   dj | ƒS )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r   )r   r   r   r   Ú__repr__¦  s    zRSAPublicNumbers.__repr__)ri   r
   c             C   s&   t |tƒstS | j|jko$| j|jkS )N)r]   r,   rj   rE   rF   )r   ri   r   r   r   rk   ©  s    
zRSAPublicNumbers.__eq__c             C   s   t | j| jfƒS )N)rl   rE   rF   )r   r   r   r   rm   ¯  s    zRSAPublicNumbers.__hash__)N)r   r   r   r"   rf   r!   rE   rF   r#   rn   r   r   Ústrrs   rp   ro   rk   rm   r   r   r   r   r,   �  s   r,   )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"   rn   r8   r6   rD   rG   rN   rO   rP   rQ   rU   ÚTupler\   r   r,   r   r   r   r   Ú<module>   s>   16
&+l