File: //opt/alt/python37/lib64/python3.7/site-packages/Crypto/Cipher/__pycache__/blockalgo.cpython-37.pyc
B
    Bd\R41  �               @   sp   d Z ddlZejd dkr0ejd dkr0ddlT ddlT dZdZdZdZdZ	d	Z
d
Zddd�ZG d
d� d�Z
dS )z4Module with definitions common to all block ciphers.�    N�   �   )�*�   �   �   �   �   c             C   s6   |� | �}t|�|kr.|r&td|  ��|| }|p4|S )zFFind a parameter in tuple and dictionary arguments a function receivesz!Parameter '%s' is specified twice)�get�len�
ValueError)�name�index�args�kwargs�defaultZparam� r   �J/opt/alt/python37/lib64/python3.7/site-packages/Crypto/Cipher/blockalgo.py�
_getParameter|   s    
r   c               @   s(   e Zd ZdZdd� Zdd� Zdd� ZdS )	�	BlockAlgoz)Class modelling an abstract block cipher.c             O   s�  t dd||td�| _|j| _| jtkrH|j|f|�|�| _| jj| _�n^d| _d| _	t dd||�| _| jsrt
d��|j|ttd�| j | jd	 d
�}t
| j�| jkr�|�| j| jdd �  td�| jd   �d | jd � | _n�t
| j�| jd k�rf| j| _|�| jtd�| jd   �d | jd � | _| jdd � | jd
d� k�rTt
d��| jd d� | _nt
d| j| jd f ��|j|t| j| j d � | jd	 d
�| _d S )N�moder   )r   FZivr   zMODE_OPENPGP requires an IV� �   )Zsegment_size���r   ���z%Failed integrity check for OPENPGP IVz4Length of IV must be %d or %d bytes for MODE_OPENPGP)r   �MODE_ECBr   �
block_size�MODE_OPENPGP�new�_cipherZIV�_done_first_block�_done_last_blockr   �MODE_CFB�br   �encrypt�
_encrypted_IV�decrypt)�self�factory�keyr   r   Z	IV_cipherr   r   r   �__init__�   s>