o
    `^h)                     @   sl  d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	m
Z
 ddlmZ zddlmZ W n ey;   ddlmZ Y nw d	Z	
d$deded dedededededefddZdededed dedef
ddZdeded dedefddZdededededeeef f
ddZdeded 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)TupleUnion   )b_ord_str_)ByteStringObject)Literals    (N^NuAd 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<ir   s   2   )
r   r   _encryption_paddingr   updateoriginal_bytesstructpackdigestrange)r   r   r   r   r   r   r   password_bytesmp_entry_bytesmd5_hash_ r$   N/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/PyPDF2/_security.py_alg326   s   

r&   owner_passworduser_passwordc           
      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   keyuser_password_bytesvalinew_keykey_charr$   r$   r%   _alg33l   s   
r4   c                 C   sZ   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   )r   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   r.   Ur$   r$   r%   _alg34   s
   
r8   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 )r5   r   r)       s                   )r&   r   r   r   r   r   r,   r   r   r-   r   )r   r   r   r   r   r   r   r.   r    r"   r0   r1   r2   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   r9   )listr   r   lenappendr   r-   join)r.   r<   Sjr1   retvalplaintext_chartr$   r$   r%   r,      s   $
r,   )T)__doc__r   hashlibr   typingr   r   _utilsr   r   r   genericr	   r
   ImportErrortyping_extensionsr   strintboolbytesr&   r4   r+   r8   r;   r,   r$   r$   r$   r%   <module>   s   
6
 



"2