<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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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.)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 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| |	ƒ\}
}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