File: //lib/python3/dist-packages/rsa/__pycache__/pkcs1.cpython-38.pyc
U
�5�[�7 � @ sl d Z ddlZddlZddlmZ ddlmZmZmZ ddddd d
d�Z ej
ejejej
ejejd�ZG dd
� d
e�ZG dd� de�ZG dd� de�Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zd d!� Zd"d#� Zd$d%� Zd&d'� Zddddddd
gZ e!d(k�rhe"d)� ddl#Z#ed*�D ]>Z$e#�%� \Z&Z'e&�r< �q`e$d+ dk�r e$�r e"d,e$ � �q e"d-� dS ).ab Functions for PKCS#1 version 1.5 encryption and signing
This module implements certain functionality from PKCS#1 version 1.5. For a
very clear example, read http://www.di-mgt.com.au/rsa_alg.html#pkcs1schemes
At least 8 bytes of random padding is used when encrypting a message. This makes
these methods much more secure than the ones in the ``rsa`` module.
WARNING: this module leaks information when decryption fails. The exceptions
that are raised contain the Python traceback information, which can be used to
deduce where in the process the failure occurred. DO NOT PASS SUCH INFORMATION
to your users.
� N)�range)�common� transform�cores 0 0*�H��
s 0!0 + s 0-0
`�He s 010
`�He s 0A0
`�He 0s 0Q0
`�He @)ZMD5zSHA-1zSHA-224zSHA-256zSHA-384zSHA-512c @ s e Zd ZdZdS )�CryptoErrorz-Base class for all exceptions in this module.N��__name__�
__module__�__qualname__�__doc__� r r �+/usr/lib/python3/dist-packages/rsa/pkcs1.pyr 9 s r c @ s e Zd ZdZdS )�DecryptionErrorzRaised when decryption fails.Nr r r r r
r = s r c @ s e Zd ZdZdS )�VerificationErrorzRaised when verification fails.Nr r r r r
r A s r c C s� |d }t | �}||kr(td||f ��d}|| d }t |�|k r||t |� }t�|d �}|�dd�}||d|� }q8t |�|ks�t�d�d|d| g�S ) a Pads the message for encryption, returning the padded message.
:return: 00 02 RANDOM_DATA 00 MESSAGE
>>> block = _pad_for_encryption(b'hello', 16)
>>> len(block)
16
>>> block[0:2]
b'\x00\x02'
>>> block[-6:]
b'\x00hello'
� �;%i bytes needed for message, but there is only space for %i� � � � N� )�len�
OverflowError�os�urandom�replace�AssertionError�join)�message�
target_length�
max_msglength� msglengthZpadding�padding_lengthZneeded_bytesZnew_paddingr r r
�_pad_for_encryptionE s&