a
    còfÍ  ã                   @   s   d dl Z d dlmZ d dlmZ d dlmZ zd dlmZ W n e	yZ   d dlmZ Y n0 d dl
mZ d dlmZmZ d dlmZ d	ef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 )é    N)Ú__version__)Úpadding)ÚAES)ÚARC4)ÚCipher)ÚCBCÚECB)Ú	CryptBaseÚcryptographyc                   @   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   s   t t|ƒd d�| _d S ©N)Úmode)r   r   Úcipher©Úselfr   © r   úa/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pypdf/_crypt_providers/_cryptography.pyÚ__init__0   s    zCryptRC4.__init__©Údatar   c                 C   s   | j  ¡ }| |¡| ¡  S ©N)r   Ú	encryptorÚupdateÚfinalize)r   r   r   r   r   r   Úencrypt3   s    
zCryptRC4.encryptc                 C   s   | j  ¡ }| |¡| ¡  S r   )r   Ú	decryptorr   r   )r   r   r   r   r   r   Údecrypt7   s    
zCryptRC4.decrypt©Ú__name__Ú
__module__Ú__qualname__Úbytesr   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   t |ƒ| _d S r   )r   Úalgr   r   r   r   r   =   s    zCryptAES.__init__r   c                 C   sX   t  d¡}t d¡ ¡ }| |¡| ¡  }t| jt	|ƒƒ}| 
¡ }|| |¡ | ¡  S )Né   é€   )ÚsecretsZtoken_bytesr   ÚPKCS7Úpadderr   r   r   r&   r   r   )r   r   ÚivÚpadr   r   r   r   r   r   @   s    
zCryptAES.encryptc                 C   sŒ   |d d… }|dd … }|s |S t |ƒd dkrPt d¡ ¡ }| |¡| ¡  }t| jt|ƒƒ}| 	¡ }| |¡| ¡  }|d |d  … S )Nr'   r   r(   éÿÿÿÿ)
Úlenr   r*   r+   r   r   r   r&   r   r   )r   r   r,   r-   r   r   Údr   r   r   r   I   s    zCryptAES.decryptr    r   r   r   r   r%   <   s   	r%   )r   r   r   c                 C   s&   t t| ƒd d� ¡ }| |¡| ¡  S r   )r   r   r   r   r   ©r   r   r   r   r   r   Úrc4_encrypt[   s    r2   c                 C   s&   t t| ƒd d� ¡ }| |¡| ¡  S r   )r   r   r   r   r   ©r   r   r   r   r   r   Úrc4_decrypt`   s    r4   c                 C   s(   t t| ƒtƒ d� ¡ }| |¡| ¡  S r   )r   r   r   r   r   r   r1   r   r   r   Úaes_ecb_encrypte   s    r5   c                 C   s(   t t| ƒtƒ d� ¡ }| |¡| ¡  S r   )r   r   r   r   r   r   r3   r   r   r   Úaes_ecb_decryptj   s    r6   )r   r,   r   r   c                 C   s*   t t| ƒt|ƒd� ¡ }| |¡| ¡  S r   )r   r   r   r   r   r   )r   r,   r   r   r   r   r   Úaes_cbc_encrypto   s    r7   c                 C   s*   t t| ƒt|ƒd� ¡ }| |¡| ¡  S r   )r   r   r   r   r   r   )r   r,   r   r   r   r   r   Úaes_cbc_decryptt   s    r8   )r)   r
   r   Zcryptography.hazmat.primitivesr   Z1cryptography.hazmat.primitives.ciphers.algorithmsr   Z/cryptography.hazmat.decrepit.ciphers.algorithmsr   ÚImportErrorZ+cryptography.hazmat.primitives.ciphers.baser   Z,cryptography.hazmat.primitives.ciphers.modesr   r   Zpypdf._crypt_providers._baser	   Zcrypt_providerr   r%   r$   r2   r4   r5   r6   r7   r8   r   r   r   r   Ú<module>   s&   