o
    €Ýh‰(  ã                   @   sP  d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	m
Z
mZ ddlmZ dZ		d"d
eeef dededededededefdd„Zdededededef
dd„Zd
eeef dededefdd„Zd
eeef dedededeeef f
dd„Zd
eeef dededededededeeef fdd„Zdeeef dedefd d!„ZdS )#z,Anything related to encryption / decryption.é    N)Úmd5)ÚAnyÚTupleÚUnioné   )Úb_Úord_Ústr_)ÚByteStringObjects    (¿N^NuŠAd NVÿú.. ¶Ðh>€/©þdSizTÚpasswordÚrevÚkeylenÚowner_entryÚp_entryÚ	id1_entryÚmetadata_encryptÚreturnc                 C   s¦   t t| ƒttƒ dd… ƒ}t|ƒ}| |j¡ t d|¡}	| |	¡ | |j¡ |dkr4|s4| d¡ | ¡ }
|dkrMt	dƒD ]}t|
d|… ƒ ¡ }
q@|
d|… S )z€
    Implementation of algorithm 3.2 of the PDF standard security handler.

    See section 3.5.2 of the PDF 1.6 reference.
    Né    z<ié   s   ÿÿÿÿé2   )
r   r	   Ú_encryption_paddingr   ÚupdateÚoriginal_bytesÚstructÚpackÚdigestÚrange)r   r   r   r   r   r   r   Úpassword_bytesÚmZp_entry_bytesÚmd5_hashÚ_© r!   úX/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/PyPDF2/_security.pyÚ_alg32/   s   

r#   Ú	owner_pwdÚuser_pwdc           
      C   sv   t | ||ƒ}t|ttƒ dd… ƒ}t||ƒ}|dkr9tddƒD ]}d}|D ]}	|tt|	ƒ|A ƒ7 }q&t||ƒ}q |S )z{
    Implementation of algorithm 3.3 of the PDF standard security handler,
    section 3.5.2 of the PDF 1.6 reference.
    Nr   r   r   é   Ú )Ú_alg33_1r   r	   r   ÚRC4_encryptr   Úchrr   )
r$   r%   r   r   ÚkeyZuser_pwd_bytesÚvalÚiÚnew_keyZkey_charr!   r!   r"   Ú_alg33e   s   
r/   c                 C   sl   t | tƒr	|  ¡ } t| ttƒ dd… ƒ}t|ƒ}| ¡ }|dkr.tdƒD ]}t|ƒ ¡ }q%|d|… }|S )zSteps 1-4 of algorithm 3.3Nr   r   r   )	Ú
isinstanceÚbytesÚdecoder   r	   r   r   r   r   )r   r   r   r   r   r   r    r+   r!   r!   r"   r(   ƒ   s   
r(   c                 C   s,   d}d}t | |||||ƒ}t|tƒ}||fS )ú€
    Implementation of algorithm 3.4 of the PDF standard security handler.

    See section 3.5.2 of the PDF 1.6 reference.
    é   é   )r#   r)   r   )r   r   r   r   r   r   r+   ÚUr!   r!   r"   Ú_alg34œ   s
   
r7   c                 C   sŒ   t | |||||ƒ}tƒ }| t¡ | |j¡ | ¡ }	t||	ƒ}
tddƒD ]}d}|D ]}|tt	t
|ƒ|A ƒƒ7 }q+t||
ƒ}
q%|
d |fS )r3   r   r&   ó    s                   )r#   r   r   r   r   r   r)   r   r   r*   r   )r   r   r   r   r   r   r   r+   r   r   r,   r-   r.   Úkr!   r!   r"   Ú_alg35µ   s   

r:   r+   Ú	plaintextc                 C   sä   t tdƒƒ}d}tdƒD ]!}|||  t| |t| ƒ  ƒ d }|| || ||< ||< qd\}}g }|D ]6}|d d }|||  d }|| || ||< ||< ||| ||  d  }| ttt|ƒ|A ƒƒ¡ q6d |¡S )Né   r   )r   r   r   r8   )Úlistr   r   ÚlenÚappendr   r*   Újoin)r+   r;   ÚSÚjr-   ÚretvalZplaintext_charÚtr!   r!   r"   r)   ç   s   $
r)   )T)Ú__doc__r   Úhashlibr   Útypingr   r   r   Z_utilsr   r   r	   Zgenericr
   r   Ústrr1   ÚintÚboolr#   r/   r(   r7   r:   r)   r!   r!   r!   r"   Ú<module>   sr   ÿù
ÿþýüûúù
ø6"
ÿþýü

û
ÿþýüûúù

ø"2