U
    Óøïc#  ã                   @   s^   d dl Z d dlZd dlmZ d dlmZmZmZ edœdd„Z	ddd	„Z
dd
d„Zdd„ ZdS )é    N)Úpadding)ÚCipherÚ
algorithmsÚmodes©Úvalc                 C   s   t  dt  d| d@ ¡¡d S )Nz<iz<Il   ÿÿ r   )ÚstructÚunpackÚpackr   © r   úA/tmp/pip-unpacked-wheel-0kb_yl26/pyhanko/pdf_utils/crypt/_util.pyÚ	as_signed   s    r   Tc                 C   s\   t t | ¡t |¡ƒ}| ¡ }| |¡| ¡  }|rTt 	d¡ 
¡ }| |¡| ¡  S |S d S )Né€   )r   r   ÚAESr   ÚCBCÚ	decryptorÚupdateÚfinalizer   ÚPKCS7Úunpadder)ÚkeyÚdataÚivÚuse_paddingÚcipherr   Ú	plaintextr   r   r   r   Ú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   r   Zcryptography.hazmat.primitivesr   Z&cryptography.hazmat.primitives.ciphersr   r   r   Úintr   r   r!   r#   r   r   r   r   Ú<module>   s   

