
    mj                     T   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ 	 d d
lmZ defZ G d de      Z G d de      ZdededefdZdededefdZdededefdZdededefdZdedededefdZdedededefdZy# e$ r	 d d
lmZ Y hw xY w)    N)__version__)AES)Cipher)CBCECB)PKCS7)	CryptBase)logger_warning)PdfStreamError)ARC4cryptographyc                   F    e Zd ZdeddfdZdedefdZddded	edefd
Zy)CryptRC4keyreturnNc                 :    t        t        |      d       | _        y N)mode)r   r   cipherselfr   s     W/root/.hermes/venv/lib/python3.12/site-packages/pypdf/_crypt_providers/_cryptography.py__init__zCryptRC4.__init__2   s    T#YT2    datac                 z    | j                   j                         }|j                  |      |j                         z   S N)r   	encryptorupdatefinalize)r   r   r   s      r   encryptzCryptRC4.encrypt5   3    KK))+	%	(:(:(<<<r   Tstrictr$   c                z    | j                   j                         }|j                  |      |j                         z   S r   )r   	decryptorr   r    )r   r   r$   r&   s       r   decryptzCryptRC4.decrypt9   r"   r   __name__
__module____qualname__bytesr   r!   boolr'    r   r   r   r   1   sG    3E 3d 3=E =e = 6: =E =d =e =r   r   c                   F    e Zd ZdeddfdZdedefdZddded	edefd
Zy)CryptAESr   r   Nc                 $    t        |      | _        y r   )r   algr   s     r   r   zCryptAES.__init__?   s    s8r   r   c                 J   t        j                  d      }t        d      j                         }|j	                  |      |j                         z   }t        | j                  t        |            }|j                         }||j	                  |      z   |j                         z   S )N      )
secretstoken_bytesr   padderr   r    r   r2   r   r   )r   r   ivr8   padded_datar   r   s          r   r!   zCryptAES.encryptB   s      $s""$mmD)FOO,==#b'*$$&	I$$[11I4F4F4HHHr   Tr#   r$   c                   |d d }|dd  }|s|S |s]t        |      dz  dk7  rLt        dt               t        d      j	                         }|j                  |      |j                         z   }t        | j                  t        |            }|j                         }	 |j                  |      |j                         z   }t        d      j                         }		 |	j                  |      |	j                         z   S # t        $ r}t        |      d }~ww xY w# t        $ r2}|rt        |      t        dt        |       |d |d     cY d }~S d }~ww xY w)	Nr4   r   zAdding missing padding.)sourcer5   z%Ignoring padding error: %(exception)s)r<   	exception)lenr
   r)   r   r8   r   r    r   r2   r   r&   
ValueErrorr   unpadder)
r   r   r$   r9   r8   r   r&   r:   r=   rA   s
             r   r'   zCryptAES.decryptK   sC   #2YBCyK#d)b.A-4XF3Z&&(F==&)::D#b'*$$&		,#**4093E3E3GGK
 :&&(	3??;/(2C2C2EEE  	, ++	,  	3$Y//B8_hi1+b/!122		3s6   "C< !D <	DDD	E!'EEEr(   r.   r   r   r0   r0   >   sJ    E d IE Ie I 6: 3E 3d 3e 3r   r0   r   r   r   c                     t        t        |       d       j                         }|j                  |      |j	                         z   S r   )r   r   r   r   r    r   r   r   s      r   rc4_encryptrD   i   :    tCyt,668ID!I$6$6$888r   c                     t        t        |       d       j                         }|j                  |      |j	                         z   S r   )r   r   r&   r   r    r   r   r&   s      r   rc4_decryptrH   n   rE   r   c                     t        t        |       t                     j                         }|j	                  |      |j                         z   S r   )r   r   r   r   r   r    rC   s      r   aes_ecb_encryptrJ   s   <    s3xce,668ID!I$6$6$888r   c                     t        t        |       t                     j                         }|j	                  |      |j                         z   S r   )r   r   r   r&   r   r    rG   s      r   aes_ecb_decryptrM   x   rK   r   r9   c                     t        t        |       t        |            j                         }|j	                  |      |j                         z   S r   )r   r   r   r   r   r    )r   r9   r   r   s       r   aes_cbc_encryptrO   }   >    s3xc"g.88:ID!I$6$6$888r   c                     t        t        |       t        |            j                         }|j	                  |      |j                         z   S r   )r   r   r   r&   r   r    )r   r9   r   r&   s       r   aes_cbc_decryptrR      rP   r   )r6   r   r   1cryptography.hazmat.primitives.ciphers.algorithmsr   +cryptography.hazmat.primitives.ciphers.baser   ,cryptography.hazmat.primitives.ciphers.modesr   r   &cryptography.hazmat.primitives.paddingr   pypdf._crypt_providers._baser	   pypdf._utilsr
   pypdf.errorsr   /cryptography.hazmat.decrepit.ciphers.algorithmsr   ImportErrorcrypt_providerr   r0   r,   rD   rH   rJ   rM   rO   rR   r.   r   r   <module>r]      s  8  $ A > A 8 2 ' 'GD !+.
=y 
=(3y (3V9U 9% 9E 9
9U 9% 9E 9
9 9e 9 9
9 9e 9 9
9 9E 9 95 9
9 9E 9 95 9o  GFGs   B B'&B'