U
    ¥‹®gè  ã                   @   sP   d dl Z d dlZd dlmZ d dlmZmZmZ ddd„Zddd„Z	d	d
„ Z
dS )é    N)Úpadding)ÚCipherÚ
algorithmsÚmodesTc                 C   sh   t t | ¡t |¡ƒ}| ¡ }| |¡| ¡  }|r`t|ƒdkr`t	 
d¡ ¡ }| |¡| ¡  S |S d S )Nr   é€   )r   r   ÚAESr   ÚCBCÚ	decryptorÚupdateÚfinalizeÚlenr   ÚPKCS7Úunpadder)ÚkeyÚdataÚivÚuse_paddingÚcipherr	   Ú	plaintextr   © r   úA/tmp/pip-unpacked-wheel-owvgwkas/pyhanko/pdf_utils/crypt/_util.pyÚaes_cbc_decrypt   s    r   c                 C   sj   |d krt  d¡}tt | ¡t |¡ƒ}| ¡ }|rTt 	d¡ 
¡ }| |¡| ¡  }|| |¡| ¡  fS )Né   r   )ÚsecretsZtoken_bytesr   r   r   r   r   Ú	encryptorr   r   Úpadderr
   r   )r   r   r   r   r   r   r   r   r   r   Úaes_cbc_encrypt   s    
r   c                 C   s,   t t | ¡d d}| ¡ }| |¡| ¡  S )N)Úmode)r   r   ZARC4r   r
   r   )r   r   r   r   r   r   r   Úrc4_encrypt    s    r   )T)T)r   ÚstructZcryptography.hazmat.primitivesr   Z&cryptography.hazmat.primitives.ciphersr   r   r   r   r   r   r   r   r   r   Ú<module>   s   

