U
    ๓Nf  ใ                   @   sด   d dl mZ d dlmZ dZdZG dd deZG dd de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eeeedddZeeeedddZdS )้    )ฺ	CryptBase)ฺDependencyErrorz/cryptography>=3.1 is required for AES algorithm)Zlocal_crypt_fallbackz0.0.0c                   @   s<   e Zd ZeddddZeedddZeeddd	ZdS )
ฺCryptRC4Nฉฺkeyฺreturnc                 C   sh   t td| _d}tdD ]H}|| j|  ||t|   d }| j| | j|  | j|< | j|< qd S )N้   r   )ฺ	bytearrayฺrangeฺsฺlen)ฺselfr   ฺjฺiฉ r   ๚D/tmp/pip-unpacked-wheel-zevpxvmc/pypdf/_crypt_providers/_fallback.pyฺ__init__&   s
    "zCryptRC4.__init__ฉฺdatar   c                 C   sค   t | j}dd tt|D }d\}}tt|D ]b}|d d }|||  d }|| ||  ||< ||< ||| ||  d  }|| |A ||< q4tt |S )Nc                 S   s   g | ]}d qS )r   r   )ฺ.0ฺ_r   r   r   ฺ
<listcomp>/   s     z$CryptRC4.encrypt.<locals>.<listcomp>)r   r   ้   r   )r	   r   r
   r   ฺbytes)r   r   r   ฺoutr   r   ฺkฺxr   r   r   ฺencrypt-   s    
zCryptRC4.encryptc                 C   s
   |   |กS ฉN)r   ฉr   r   r   r   r   ฺdecrypt9   s    zCryptRC4.decryptฉฺ__name__ฺ
__module__ฺ__qualname__r   r   r   r    r   r   r   r   r   %   s   r   c                   @   s<   e Zd ZeddddZeedddZeeddd	ZdS )
ฺCryptAESNr   c                 C   s   d S r   r   )r   r   r   r   r   r   >   s    zCryptAES.__init__r   c                 C   s   t td S r   ฉr   ฺ_DEPENDENCY_ERROR_STRr   r   r   r   r   A   s    zCryptAES.encryptc                 C   s   t td S r   r&   r   r   r   r   r    D   s    zCryptAES.decryptr!   r   r   r   r   r%   =   s   r%   )r   r   r   c                 C   s   t |  |กS r   )r   r   ฉr   r   r   r   r   ฺrc4_encryptH   s    r)   c                 C   s   t |  |กS r   )r   r    r(   r   r   r   ฺrc4_decryptL   s    r*   c                 C   s   t td S r   r&   r(   r   r   r   ฺaes_ecb_encryptP   s    r+   c                 C   s   t td S r   r&   r(   r   r   r   ฺaes_ecb_decryptT   s    r,   )r   ฺivr   r   c                 C   s   t td S r   r&   ฉr   r-   r   r   r   r   ฺaes_cbc_encryptX   s    r/   c                 C   s   t td S r   r&   r.   r   r   r   ฺaes_cbc_decrypt\   s    r0   N)Zpypdf._crypt_providers._baser   Zpypdf.errorsr   r'   Zcrypt_providerr   r%   r   r)   r*   r+   r,   r/   r0   r   r   r   r   ฺ<module>   s   