£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
l_(                 @   sT  d dl mZmZmZ d dlZyd dlmZ W n  ek
rL   d dlmZ Y nX 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 e	jejG dd	 d	eZe	jejG d
d deZe	jejG dd deZeZd%ddZdd Zdd Zdd Zdd Zdd Zdd Z dd Z!dZ"dd  Z#G d!d" d"eZ$G d#d$ d$eZ%dS )&    )absolute_importdivisionprint_functionN)gcd)utils)UnsupportedAlgorithm_Reasons)_get_backend)
RSABackendc               @   sR   e Zd Zejdd Zejdd Zejdd Zejdd Z	ejd	d
 Z
dS )RSAPrivateKeyc             C   s   dS )zN
        Returns an AsymmetricSignatureContext used for signing data.
        N )selfpadding	algorithmr   r   /usr/lib64/python3.6/rsa.pysigner   s    zRSAPrivateKey.signerc             C   s   dS )z3
        Decrypts the provided ciphertext.
        Nr   )r   Z
ciphertextr   r   r   r   decrypt   s    zRSAPrivateKey.decryptc             C   s   dS )z7
        The bit length of the public modulus.
        Nr   )r   r   r   r   key_size%   s    zRSAPrivateKey.key_sizec             C   s   dS )zD
        The RSAPublicKey associated with this private key.
        Nr   )r   r   r   r   
public_key+   s    zRSAPrivateKey.public_keyc             C   s   dS )z!
        Signs the data.
        Nr   )r   datar   r   r   r   r   sign1   s    zRSAPrivateKey.signN)__name__
__module____qualname__abcabstractmethodr   r   abstractpropertyr   r   r   r   r   r   r   r      s
   r   c               @   s(   e Zd Zejdd Zejdd ZdS )RSAPrivateKeyWithSerializationc             C   s   dS )z/
        Returns an RSAPrivateNumbers.
        Nr   )r   r   r   r   private_numbers:   s    z.RSAPrivateKeyWithSerialization.private_numbersc             C   s   dS )z6
        Returns the key serialized as bytes.
        Nr   )r   encodingformatZencryption_algorithmr   r   r   private_bytes@   s    z,RSAPrivateKeyWithSerialization.private_bytesN)r   r   r   r   r   r   r!   r   r   r   r   r   8   s   r   c               @   s`   e Zd Zejdd Zejdd Zejdd Zejdd Z	ejd	d
 Z
ejdd ZdS )RSAPublicKeyc             C   s   dS )zY
        Returns an AsymmetricVerificationContext used for verifying signatures.
        Nr   )r   	signaturer   r   r   r   r   verifierI   s    zRSAPublicKey.verifierc             C   s   dS )z/
        Encrypts the given plaintext.
        Nr   )r   Z	plaintextr   r   r   r   encryptO   s    zRSAPublicKey.encryptc             C   s   dS )z7
        The bit length of the public modulus.
        Nr   )r   r   r   r   r   U   s    zRSAPublicKey.key_sizec             C   s   dS )z-
        Returns an RSAPublicNumbers
        Nr   )r   r   r   r   public_numbers[   s    zRSAPublicKey.public_numbersc             C   s   dS )z6
        Returns the key serialized as bytes.
        Nr   )r   r   r    r   r   r   public_bytesa   s    zRSAPublicKey.public_bytesc             C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r   r#   r   r   r   r   r   r   verifyg   s    zRSAPublicKey.verifyN)r   r   r   r   r   r$   r%   r   r   r&   r'   r(   r   r   r   r   r"   G   s   r"   c             C   s4   t |}t|tstdtjt| | |j| |S )Nz-Backend object does not implement RSABackend.)r	   
isinstancer
   r   r   ZBACKEND_MISSING_INTERFACE_verify_rsa_parametersZgenerate_rsa_private_key)public_exponentr   backendr   r   r   generate_private_keyq   s    

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.)r.   r/   )
ValueError)r+   r   r   r   r   r*   }   s
    r*   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.)r0   )pqprivate_exponentdmp1dmq1iqmpr+   modulusr   r   r   _check_private_key_components   s0    r9   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.r1   r   ze must be odd.)r0   )enr   r   r   _check_public_key_components   s    r<   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
    r1   r   )r1   r   )divmod)	r:   mZx1Zx2abr3   rZxnr   r   r   _modinv   s    

rB   c             C   s
   t || S )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rB   )r2   r3   r   r   r   rsa_crt_iqmp   s    rC   c             C   s   | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    r1   r   )r4   r2   r   r   r   rsa_crt_dmp1   s    rD   c             C   s   | |d  S )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    r1   r   )r4   r3   r   r   r   rsa_crt_dmq1   s    rE   i  c             C   s   || d }|}x|d dkr(|d }qW d}d}xx| r|t k r|}xX||k rt||| }|dkr|| d krt|d| dkrt|d | }	d}P |d9 }qHW |d7 }q4W |std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.
    r1      r   FTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowr   r0   r=   sorted)r;   r:   dZktottZspottedr?   kZcandr2   r3   rA   r   r   r   rsa_recover_prime_factors   s*    
$rN   c               @   s|   e Zd Zdd ZejdZejdZejdZejdZ	ejdZ
ejdZejd	ZdddZdd Zdd Zdd Zd
S )RSAPrivateNumbersc             C   s   t |tj sTt |tj sTt |tj sTt |tj sTt |tj sTt |tj r\tdt |tsntd|| _|| _|| _|| _|| _	|| _
|| _d S )NzNRSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must all be an integers.zFRSAPrivateNumbers public_numbers must be an RSAPublicNumbers instance.)r)   sixinteger_types	TypeErrorRSAPublicNumbers_p_q_d_dmp1_dmq1_iqmp_public_numbers)r   r2   r3   rK   r5   r6   r7   r&   r   r   r   __init__  s$    
zRSAPrivateNumbers.__init__rT   rU   rV   rW   rX   rY   rZ   Nc             C   s   t |}|j| S )N)r	   Zload_rsa_private_numbers)r   r,   r   r   r   private_key5  s    zRSAPrivateNumbers.private_keyc             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)   rO   NotImplementedr2   r3   rK   r5   r6   r7   r&   )r   otherr   r   r   __eq__9  s    
zRSAPrivateNumbers.__eq__c             C   s
   | |k S )Nr   )r   r^   r   r   r   __ne__G  s    zRSAPrivateNumbers.__ne__c             C   s$   t | j| j| j| j| j| j| jfS )N)hashr2   r3   rK   r5   r6   r7   r&   )r   r   r   r   __hash__J  s    zRSAPrivateNumbers.__hash__)N)r   r   r   r[   r   read_only_propertyr2   r3   rK   r5   r6   r7   r&   r\   r_   r`   rb   r   r   r   r   rO     s   







rO   c               @   sR   e Zd Zdd ZejdZejdZdddZdd	 Z	d
d Z
dd Zdd ZdS )rS   c             C   s4   t |tj st |tj r$td|| _|| _d S )Nz,RSAPublicNumbers arguments must be integers.)r)   rP   rQ   rR   _e_n)r   r:   r;   r   r   r   r[   Y  s
    zRSAPublicNumbers.__init__rd   re   Nc             C   s   t |}|j| S )N)r	   Zload_rsa_public_numbers)r   r,   r   r   r   r   e  s    zRSAPublicNumbers.public_keyc             C   s
   dj | S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r    )r   r   r   r   __repr__i  s    zRSAPublicNumbers.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r)   rS   r]   r:   r;   )r   r^   r   r   r   r_   l  s    
zRSAPublicNumbers.__eq__c             C   s
   | |k S )Nr   )r   r^   r   r   r   r`   r  s    zRSAPublicNumbers.__ne__c             C   s   t | j| jfS )N)ra   r:   r;   )r   r   r   r   rb   u  s    zRSAPublicNumbers.__hash__)N)r   r   r   r[   r   rc   r:   r;   r   rf   r_   r`   rb   r   r   r   r   rS   X  s   	


rS   )N)&Z
__future__r   r   r   r   Zmathr   ImportErrorZ	fractionsrP   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.backendsr	   Z'cryptography.hazmat.backends.interfacesr
   Zadd_metaclassABCMetaobjectr   r   r"   ZRSAPublicKeyWithSerializationr-   r*   r9   r<   rB   rC   rD   rE   rH   rN   rO   rS   r   r   r   r   <module>   s:    &
(+H