
    Fg@                     @   S SK r S SKrS SKrS SKrS SKJrJrJrJr  S SK	J
r
JrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJrJrJr  S SKJr  S SKJ r   S SK!J"r"  S S	K#J$r$J%r%J&r&J'r'  S S
K(J)r)J*r*J+r+  S SK,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7  S SK8J9r9J:r:J;r;  S SK<J=r=J>r>J?r?J@r@JArA  \R                  " \C5      rD " S S\+5      rE " S S\F5      rG " S S\$5      rH " S S\$5      rI " S S\$5      rJ " S S\$5      rK " S S\K5      rL " S S\M5      rN " S S \M5      rO " S! S"\K5      rP\:" S#5      rQ\:" S$5      rR\:" S%5      rS " S& S'5      rT " S( S)\T5      rU " S* S+\U5      rV " S, S-\T5      rW " S. S/5      rX " S0 S1\X5      rY " S2 S3\Y5      rZ " S4 S55      r[ " S6 S7\"5      r\g)8    N)md5sha256sha384sha512)AnyCallableDictIterableIteratorKeysViewListOptionalSequenceTupleTypeUnioncast)default_backend)Cipher
algorithmsmodes)settings)Arcfour)
NumberTree)PDFExceptionPDFKeyErrorPDFObjectNotFoundPDFTypeError)	PDFParserPDFStreamParserPDFSyntaxError)	DecipherCallable	PDFStreamdecipher_all
dict_value	int_value
list_value	str_valuestream_value
uint_value)PSEOF)KWDLITliteral_name)choplistdecode_textformat_int_alphaformat_int_romannunpackc                       \ rS rSrSrg)PDFNoValidXRef;    N__name__
__module____qualname____firstlineno____static_attributes__r7       c/Users/admin/workspace/ai/PDFMathTranslate/myenv/lib/python3.13/site-packages/pdf2zh/pdfdocument.pyr5   r5   ;       r>   r5   c                       \ rS rSrSrSrg)PDFNoValidXRefWarning?   zlLegacy warning for missing xref.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r7   Nr9   r:   r;   r<   __doc__r=   r7   r>   r?   rB   rB   ?       r>   rB   c                       \ rS rSrSrg)PDFNoOutlinesF   r7   Nr8   r7   r>   r?   rH   rH   F   r@   r>   rH   c                       \ rS rSrSrg)PDFNoPageLabelsJ   r7   Nr8   r7   r>   r?   rK   rK   J   r@   r>   rK   c                       \ rS rSrSrg)PDFDestinationNotFoundN   r7   Nr8   r7   r>   r?   rN   rN   N   r@   r>   rN   c                       \ rS rSrSrg)PDFEncryptionErrorR   r7   Nr8   r7   r>   r?   rQ   rQ   R   r@   r>   rQ   c                       \ rS rSrSrg)PDFPasswordIncorrectV   r7   Nr8   r7   r>   r?   rT   rT   V   r@   r>   rT   c                       \ rS rSrSrSrg)PDFEncryptionWarningZ   zqLegacy warning for failed decryption.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r7   NrD   r7   r>   r?   rW   rW   Z   rF   r>   rW   c                       \ rS rSrSrSrg)"PDFTextExtractionNotAllowedWarninga   zLegacy warning for PDF that does not allow extraction.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r7   NrD   r7   r>   r?   rZ   rZ   a   rF   r>   rZ   c                       \ rS rSrSrg)PDFTextExtractionNotAllowedh   r7   Nr8   r7   r>   r?   r]   r]   h   r@   r>   r]   ObjStmXRefCatalogc                   v    \ rS rSrS\\\4   4S jrS\\	   4S jr
S\	S\\\	   \	\	4   4S jrS\SS4S	 jrS
rg)PDFBaseXRefr   returnc                     [         eNNotImplementedErrorselfs    r?   get_trailerPDFBaseXRef.get_trailers       !!r>   c                     / $ rg   r7   rj   s    r?   
get_objidsPDFBaseXRef.get_objidsv   s    	r>   objidc                     [        U5      erg   )r   rk   rr   s     r?   get_posPDFBaseXRef.get_pos|   s    %  r>   parserNc                     [         erg   rh   )rk   rw   s     r?   loadPDFBaseXRef.load   rn   r>   r7   )r9   r:   r;   r<   r	   strr   rl   r
   intrp   r   r   ru   r   ry   r=   r7   r>   r?   rc   rc   r   s\    "T#s(^ "HSM !S !U8C=#s+B%C !"9 " "r>   rc   c                       \ rS rSrSS jrS\4S jrS\SS4S jrS\SS4S jr	S\
\\4   4S	 jrS\\   4S
 jrS\S\\\   \\4   4S jrSrg)PDFXRef   re   Nc                      0 U l         0 U l        g rg   offsetstrailerrj   s    r?   __init__PDFXRef.__init__   s    BD')r>   c                 <    SU R                   R                  5       -  $ )Nz<PDFXRef: offsets=%r>r   keysrj   s    r?   __repr__PDFXRef.__repr__   s    &$,,*;*;*=>>r>   rw   c                 N     UR                  5       u  p#UR                  5       nU(       d  M-   UR	                  S5      (       a  UR                  U5        OUR                  S5      n[        U5      S:w  a  SU< SU< 3n[        U5      e [        [        U5      u  pg[        XfU-   5       H  n UR                  5       u  pUR                  5       nUR                  S5      n[        U5      S:w  a  S	U< S
U< 3n[        U5      eUu  pnUS:w  a  Mh  S [        U
5      [        U5      4U R                  U'   M     GM>  U R                  U5        g ! [         a    [        S5      ef = f! [         a    SU< SU< 3n[        U5      ef = f! [         a    [        S5      ef = f)Nz Unexpected EOF - file corrupted?   trailer       zTrailer not found: z: line=zInvalid line:    zInvalid XRef format: z, line=   n)nextlinestripr+   r5   
startswithseeksplitlenmapr|   
ValueErrorranger   load_trailer)rk   rw   poslinef	error_msgstartnobjsrr   _pos_bgenno_buse_bs                r?   ry   PDFXRef.load   s   I$oo/zz|  z**C 

4 A1v{1&74(K	$Y//0!$S! uem4M & 1IQ::<D JJt$q6Q;"7z QI(33*+'D='+SZW&FU# 5) F 	&!;  I$%GHHI  0,VJgdXF	$Y//0  M()KLLMs#   )E E+ 1"FE(+ FF$c                 L    UR                  5       u  p#U[        S5      L d   [        U5      5       eUR                  5       u  nu  p$U R                  R                  [        U5      5        g ! [         a-    UR                  S5      nU(       d  [        S5      eUS   u  p$ N[f = f)Nr      zUnexpected EOF - file corruptedr   )
	nexttokenr,   r{   
nextobjectr+   popr5   r   updater%   )rk   rw   r   kwddicxs         r?   r   PDFXRef.load_trailer   s    	'')HQ#j/)33s83) ++-KAx 	JsO,  	

1A$%FGGtHQ		s   AA, ,4B#"B#c                     U R                   $ rg   r   rj   s    r?   rl   PDFXRef.get_trailer       ||r>   c                 6    U R                   R                  5       $ rg   r   rj   s    r?   rp   PDFXRef.get_objids   s    ||  ""r>   rr   c                      U R                   U   $ rg   )r   rt   s     r?   ru   PDFXRef.get_pos   s    ||E""r>   r   re   N)r9   r:   r;   r<   r   r{   r   r   ry   r   r	   r   rl   r   r|   rp   r   r   ru   r=   r7   r>   r?   r~   r~      s    *?# ?$"9 $" $"L
-9 
- 
-T#s(^ #HSM ##S #U8C=#s+B%C #r>   r~   c                   X    \ rS rSrS\4S jr\R                  " S5      rS\	SS4S jr
Srg)	PDFXRefFallback   re   c                 <    SU R                   R                  5       -  $ )Nz<PDFXRefFallback: offsets=%r>r   rj   s    r?   r   PDFXRefFallback.__repr__   s    .$,,2C2C2EFFr>   z^(\d+)\s+(\d+)\s+obj\brw   Nc                 B   UR                  S5          UR                  5       u  p#UR                  S5      (       a#  UR                  U5        U R	                  U5        g UR                  S5      nU R                  R                  U5      nU(       d  M  UR                  5       u  pg[        U5      n[        U5      n	S X)4U R                  U'   UR                  U5        UR                  5       u  n
u  p[        U[        5      (       a|  UR                  S5      [        L ad  [!        U5      n US   n[+        UR-                  5       5      n/ n  UR                  5       u  n
u  pUR/                  [1        [        U5      5        M6  GMt  ! [         a     g f = f! ["         a(    [$        R&                  (       a  [)        SU-  5      eSn Nf = f! [         a     Of = f[3        U[5        U5      S-  5      n[7        U5       H  nUUS-     nUUS4U R                  U'   M     N)Nr   r   zlatin-1r   NN is not defined: %rr   )r   r   r+   r   r   decode
PDFOBJ_CUEmatchgroupsr|   r   r   
isinstancer#   getLITERAL_OBJSTMr)   KeyErrorr   STRICTr!   r    get_dataappendr   minr   r   )rk   rw   r   
line_bytesr   mobjid_sgenno_srr   gennor   objstreamnparser1objsindexobjid1s                     r?   ry   PDFXRefFallback.load   s   A$*OO$5! $$Z00C !!&)$$Y/D%%d+A!"WLELE#'"4DLLKK ++-KAx#y))cggfo.O%c*sA
 *&//*;<"$&-&8&8&:8ADcN3 A   ,   ,-Cf-LMMA  3t9>*"1XE!%!)_F,15!+<DLL( &s5   F ,F 7G 
FF/G	G	
GGr7   )r9   r:   r;   r<   r{   r   recompiler   r   ry   r=   r7   r>   r?   r   r      s4    G# G 56J*=9 *= *=r>   r   c                       \ rS rSrSS jrS\4S jrS\SS4S jrS\	\\
4   4S jrS\\   4S	 jrS
\S\\\   \\4   4S jrSrg)PDFXRefStream   re   Nc                 X    S U l         S U l        S U l        S U l        S U l        / U l        g rg   )dataentlenfl1fl2fl3rangesrj   s    r?   r   PDFXRefStream.__init__   s,    %)	%)"&"&"&-/r>   c                      SU R                   -  $ )Nz<PDFXRefStream: ranges=%r>)r   rj   s    r?   r   PDFXRefStream.__repr__  s    +t{{;;r>   rw   c           	      (   UR                  5       u  p#UR                  5       u  p$UR                  5       u  p%UR                  5       u  nu  p&[        U[        5      (       a  UR	                  S5      [
        La  [        S5      eUS   nUR	                  SSU45      n[        U5      S-  S:w  a  [        S5      eU R                  R                  [        [        [        [        [        4      [        SU5      5      5        US   u  U l        U l        U l        U R                   b  U R"                  b  U R$                  c   eUR'                  5       U l        U R                   U R"                  -   U R$                  -   U l        UR,                  U l        g )	Nr   zInvalid PDF stream spec.SizeIndexr   r   zInvalid index numberW)r   r   r   r#   r   LITERAL_XREFr5   r   r!   r   extendr   r   r   r|   r/   r   r   r   r   r   r   attrsr   )	rk   rw   r   rr   r   r   r   sizeindex_arrays	            r?   ry   PDFXRefStream.load  sE   %%'
%%'
##%**,;A&),,

60B,0V !;<<f~jj1d)4{a1$ !7884sCx 98A{;STU)/&48TXxx#(<AUUUOO%	hh)DHH4||r>   c                     U R                   $ rg   r   rj   s    r?   rl   PDFXRefStream.get_trailer   r   r>   c              #   D  #    U R                    H  u  p[        U5       Hx  nU R                  c   eU R                  c   eU R                  U-  nU R                  XDU R                  -    n[	        US U R
                   S5      nUS:X  d  US:X  d  Mr  X-   v   Mz     M     g 7f)Nr   r   )r   r   r   r   r3   r   )rk   r   r   ioffsetentf1s          r?   rp   PDFXRefStream.get_objids#  s      KKLE5\{{...yy,,,qii$++)=>S488_a07bAg)O " (s   BB B rr   c                 p   SnU R                    H  u  p4X1::  a  XU-   :  a	  X!U-
  -  n  OX$-  nM!     [        U5      eU R                  c   eU R                  c   eU R                  b  U R
                  b  U R                  c   eU R                  U-  nU R                  XUU R                  -    n[        US U R                   S5      n[        X`R                  U R                  U R
                  -    5      n[        X`R                  U R
                  -   S  5      n	US:X  a  S X4$ US:X  a  XS4$ [        U5      e)Nr   r   r   )r   r   r   r   r   r   r   r3   )
rk   rr   r   r   r   r   r   r   f2f3s
             r?   ru   PDFXRefStream.get_pos.  s1    KKLE~%%-"7& ( e$${{&&&yy$$$xx#(<AUUUu$ii$++!56S488_a(SDHHtxx$789SDHH,./07">!1WA; e$$r>   )r   r   r   r   r   r   r   r   )r9   r:   r;   r<   r   r{   r   r   ry   r	   r   rl   r   r|   rp   r   r   ru   r=   r7   r>   r?   r   r      sm    0<# <$9 $ $2T#s(^ 	$HSM 	$%S %U8C=#s+B%C %r>   r   c                   v   \ rS rSr% SrSr\\S4   \S'    S S\	\
   S\\\4   S\S	S
4S jjrS!S jrS!S jrS!S jrS	\4S jrS	\4S jrS	\4S jrS\
S	\
4S jrS\
S	\
4S jrS\S	\\
   4S jrS\
S	\\
   4S jrS\
S	\4S jrS\
S	\\
   4S jr S"S\S\S\
S\\\\4      S	\
4
S jjrS\S\S\
S	\
4S jrSrg
)#PDFStandardSecurityHandleriI  s    (N^NuAd NV.. h>/dSiz)r   r   .supported_revisionsdocidparampasswordre   Nc                 H    Xl         X l        X0l        U R                  5         g rg   )r  r  r  init)rk   r  r  r  s       r?   r   #PDFStandardSecurityHandler.__init__P  s     

 		r>   c                     U R                  5         U R                  U R                  ;  a  SU R                  -  n[	        U5      eU R                  5         g )NzUnsupported revision: param=%r)init_paramsrr  r  rQ   init_key)rk   r   s     r?   r  PDFStandardSecurityHandler.init[  sB    6611184::EI$Y//r>   c                    [        U R                  R                  SS5      5      U l        [        U R                  S   5      U l        [        U R                  S   S5      U l        [        U R                  S   5      U l        [        U R                  S   5      U l	        [        U R                  R                  SS	5      5      U l
        g )
NVr   RP    OULength(   )r&   r  r   vr
  r*   pr(   oulengthrj   s    r?   r	  &PDFStandardSecurityHandler.init_paramsb  s    4::>>#q124::c?+DJJsOR04::c?+4::c?+

x <=r>   c                 j    U R                  U R                  5      U l        U R                  c  [        eg rg   )authenticater  keyrT   rj   s    r?   r  #PDFStandardSecurityHandler.init_keyj  s-    $$T]]388&& r>   c                 2    [        U R                  S-  5      $ )N   boolr  rj   s    r?   is_printable'PDFStandardSecurityHandler.is_printableo      DFFQJr>   c                 2    [        U R                  S-  5      $ )N   r"  rj   s    r?   is_modifiable(PDFStandardSecurityHandler.is_modifiabler  r&  r>   c                 2    [        U R                  S-  5      $ )N   r"  rj   s    r?   is_extractable)PDFStandardSecurityHandler.is_extractableu  s    DFFRK  r>   r  c                   ^ U R                   S:X  a$  [        U5      R                  U R                  5      $ [	        U R                  5      nUR                  U R                  S   5        [        U5      R                  UR                  5       5      n[        SS5       HA  mSR                  U4S j[        U5       5       5      n[        U5      R                  U5      nMC     X3-  nU$ )Nr   r   r      r>   c              3   B   >#    U  H  n[        UT-  45      v   M     g 7frg   bytes.0cr   s     r?   	<genexpr>7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>       @iUAE8__i   )r
  r   encryptPASSWORD_PADDINGr   r   r  digestr   joiniter)rk   r  hashresultkr   s        @r?   	compute_u$PDFStandardSecurityHandler.compute_ux  s    66Q;3<''(=(=>> t,,-DKK

1&S\))$++-8F1b\HH@d3i@@ ++F3 " FMr>   c                 T   XR                   -   S S n[        U5      nUR                  U R                  5        UR                  [        R
                  " SU R                  5      5        UR                  U R                  S   5        U R                  S:  a0  [        [        U 5      R                  (       d  UR                  S5        UR                  5       nSnU R                  S:  a=  U R                  S-  n[        S	5       H  n[        US U 5      R                  5       nM!     US U $ )
Nr  <Lr   r!  s      r   r(  2   )r<  r   r   r  structpackr  r  r
  r   PDFStandardSecurityHandlerV4encrypt_metadatar=  r  r   )rk   r  r@  rA  r   r   s         r?   compute_encryption_key1PDFStandardSecurityHandler.compute_encryption_key  s    444cr:8}DFFFKKdff-.DJJqM"66Q;4d;LL/066Q;q A2YVBQZ//1 bqzr>   c                 r    UR                  S5      nU R                  U5      nUc  U R                  U5      nU$ )Nlatin1)encodeauthenticate_user_passwordauthenticate_owner_password)rk   r  password_bytesr  s       r?   r  'PDFStandardSecurityHandler.authenticate  s:    !2--n=;22>BC
r>   c                 V    U R                  U5      nU R                  U5      (       a  U$ g rg   )rM  verify_encryption_key)rk   r  r  s      r?   rR  5PDFStandardSecurityHandler.authenticate_user_password  s+    ))(3%%c**Jr>   c                     U R                  U5      nU R                  S:X  a  X R                  :H  $ US S U R                  S S :H  $ )Nr   r,  )rC  r
  r  )rk   r  r  s      r?   rW  0PDFStandardSecurityHandler.verify_encryption_key  sB    NN366Q;;"v$$r>   c                 b  ^ XR                   -   S S n[        U5      nU R                  S:  a+  [        S5       H  n[        UR	                  5       5      nM     SnU R                  S:  a  U R
                  S-  nUR	                  5       S U nU R                  S:X  a%  [        U5      R                  U R                  5      nO^U R                  n[        SSS5       HA  mS	R                  U4S
 j[        U5       5       5      n[        U5      R                  U5      nMC     U R                  U5      $ )Nr  r   rH  rG  r(  r      r>   c              3   B   >#    U  H  n[        UT-  45      v   M     g 7frg   r2  r4  s     r?   r7  IPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>  r9  r:  )r<  r   r
  r   r=  r  r   decryptr  r>  r?  rR  )	rk   r  r@  r   r   r  user_passwordrB  r   s	           @r?   rS  6PDFStandardSecurityHandler.authenticate_owner_password  s    444cr:8}66Q;2Y4;;=) 66Q;q AkkmBQ66Q;#CL008M FFM2r2&HH@d3i@@ '
 2 2= A ' ..}==r>   rr   r   r   r   c                 &    U R                  XU5      $ rg   )decrypt_rc4)rk   rr   r   r   r   s        r?   r`  "PDFStandardSecurityHandler.decrypt  s     d33r>   c                 :   U R                   c   eU R                   [        R                  " SU5      S S -   [        R                  " SU5      S S -   n[        U5      nUR	                  5       S [        [        U5      S5       n[        U5      R                  U5      $ )NrF  r   r   r,  )	r  rI  rJ  r   r=  r   r   r   r`  )rk   rr   r   r   r  r@  s         r?   rd  &PDFStandardSecurityHandler.decrypt_rc4  s    xx###hhT51"155D%8PQSRS8TT3xkkm/c#c(B/0s|##D))r>   )
r  r  r  r  r  r  r  r
  r  r   r   rg   ) r9   r:   r;   r<   r<  r  r   r|   __annotations__r   r3  r	   r{   r   r   r  r	  r  r#  r$  r)  r-  rC  rM  r   r  rR  rW  rS  r`  rd  r=   r7   r>   r?   r   r   I  sv   	1  ,2sCx1 			 CH~	 		
 
	>'
 d   t  ! !U u u  &S Xe_ 5 Xe_ % %4 %>E >huo >2 +/44 4 	4
 S#X'4 
4* *S * *% *r>   r   c                      ^  \ rS rSr% Sr\\S4   \S'   SU 4S jjrS\	S\
\\\\/\4      4S jr  SS	\S
\S\S\
\\	\4      S\
\	   S\4S jjrS	\S
\S\S\4S jrS	\S
\S\S\4S jrSrU =r$ )rK  i  )r!  .r  re   c                 0  > [         TU ]  5         SU l        [        U R                  R                  S5      5      U l        [        U R                  S   5      U l        [        U R                  S   5      U l	        [        U R                  R                  SS5      5      U l        U R                  U R                  :w  a  SU R                  -  n[        U5      e0 U l        U R                  R                  5        HM  u  p#U R                  [        US   5      5      nUc  S	U R                  -  n[        U5      eX@R                  U'   MO     U R                   U R                  S
'   U R                  U R                  ;  a  SU R                  -  n[        U5      eg )N   CFStmFStrFEncryptMetadataTz"Unsupported crypt filter: param=%rCFMz%Unknown crypt filter method: param=%rIdentityz Undefined crypt filter: param=%r)superr	  r  r%   r  r   cfr.   stmfstrfr#  rL  rQ   cfmitemsget_cfmdecrypt_identity)rk   r   rB  r  r   	__class__s        r?   r	  (PDFStandardSecurityHandlerV4.init_params  s?   TZZ^^D12 F!34	 F!34	 $TZZ^^4Et%L M99		!<tzzII$Y//GGMMODA\!E(34AyCdjjP	(33HHQK $  $4499DHH$:TZZGI$Y// %r>   namec                 L    US:X  a  U R                   $ US:X  a  U R                  $ g )NV2AESV2)rd  decrypt_aes128rk   r~  s     r?   rz  $PDFStandardSecurityHandlerV4.get_cfm  s+    4<###W_&&&r>   rr   r   r   r   c                     U R                   (       d(  Ub%  UR                  S5      nUb  [        U5      S:X  a  U$ Uc  U R                  nU R                  U   " XU5      $ )Nr   Metadata)rL  r   r.   rw  rx  )rk   rr   r   r   r   r~  ts          r?   r`  $PDFStandardSecurityHandlerV4.decrypt  sX     $$):		&!A}aJ!><99Dxx~eD11r>   c                     U$ rg   r7   )rk   rr   r   r   s       r?   r{  -PDFStandardSecurityHandlerV4.decrypt_identity  s    r>   c                    U R                   c   eU R                   [        R                  " SU5      S S -   [        R                  " SU5      S S -   S-   n[        U5      nUR	                  5       S [        [        U5      S5       nUS S nUSS  n[        [        R                  " U5      [        R                  " U5      [        5       S9nUR                  5       R                  U5      $ )NrF  r   r   s   sAlTr,  backend)r  rI  rJ  r   r=  r   r   r   r   AESr   CBCr   	decryptorr   )	rk   rr   r   r   r  r@  initialization_vector
ciphertextciphers	            r?   r  +PDFStandardSecurityHandlerV4.decrypt_aes128  s    xx###HHkk$&r*+kk$&r*+  	 3xkkm/c#c(B/0 $Sb	"#Y
NN3II+,#%

 !((44r>   )ru  rx  rL  r  rv  rw  r   )NN)r9   r:   r;   r<   r  r   r|   rj  r	  r{   r   r   r3  rz  r	   r   r`  r{  r  r=   __classcell__r|  s   @r?   rK  rK    s    +/sCx/0,C HXsC6G6N-O$P  +/"22 2 	2
 S#X'2 sm2 
2 c # U u 5C 5 55 5U 5 5r>   rK  c            	       D  ^  \ rS rSrSrSU 4S jjrS\S\\\	\	\
/\
4      4S jrS\S\\
   4S jrS\S\
4S	 jr SS\
S
\
S\\
   S\
4S jjr SS\
S
\
S\\
   S\
4S jjr SS\
S
\
S\\
   S\
4S jjr\S\
S\	4S j5       rS\
S\
S\
S\
4S jrS\	S\	S\
S\
4S jrSrU =r$ )PDFStandardSecurityHandlerV5i  )rG     re   c                   > [         TU ]  5         SU l        [        U R                  S   5      U l        [        U R                  S   5      U l        U R                  S S U l        U R                  SS U l	        U R                  SS  U l
        U R                  S S U l        U R                  SS U l        U R                  SS  U l        g )N   OEUEr  r  )rt  r	  r  r(   r  oeuer  o_hasho_validation_salt
o_key_saltr  u_hashu_validation_salt
u_key_salt)rk   r|  s    r?   r	  (PDFStandardSecurityHandlerV5.init_params  s    DJJt,-DJJt,-ffSbk!%2&&+ffSbk!%2&&+r>   r~  c                 (    US:X  a  U R                   $ g )NAESV3)decrypt_aes256r  s     r?   rz  $PDFStandardSecurityHandlerV5.get_cfm+  s    7?&&&r>   r  c                    U R                  U5      nU R                  X R                  U R                  5      nX0R                  :X  a  U R                  X R
                  U R                  5      n[        [        R                  " U5      [        R                  " S5      [        5       S9nUR                  5       R                  U R                  5      $ U R                  X R                  5      nX0R                   :X  a  U R                  X R"                  5      n[        [        R                  " U5      [        R                  " S5      [        5       S9nUR                  5       R                  U R$                  5      $ g )Ns                   r  )_normalize_password_password_hashr  r  r  r  r   r   r  r   r  r   r  r   r  r  r  r  r  )rk   r  
password_br@  r  s        r?   r  )PDFStandardSecurityHandlerV5.authenticate1  s   --h7
"":/E/EtvvN;;&&z??DFFKDt$		*%')F
 ##%,,TWW55"":/E/EF;;&&z??CDt$		*%')F
 ##%,,TWW55r>   c                 v    U R                   S:X  a  U(       d  gSSKJn  U" U5      nUR                  S5      S S $ )Nr  r>   r   )saslprepzutf-8   )r
  pdf2zh._saslprepr  rQ  )rk   r  r  s      r?   r  0PDFStandardSecurityHandlerV5._normalize_passwordG  s6    66Q;1)Hw'--r>   saltvectorc                 p    U R                   S:X  a  U R                  XU5      $ U R                  XSS U5      $ )z2Compute password hash depending on revision numberrG  r   r(  )r
  _r5_password_r6_password)rk   r  r  r  s       r?   r  +PDFStandardSecurityHandlerV5._password_hashQ  s;     66Q;$$XV<<  !9f==r>   c                     [        U5      nUR                  U5        Ub  UR                  U5        UR                  5       $ )z#Compute the password for revision 5)r   r   r=  )rk   r  r  r  r@  s        r?   r  )PDFStandardSecurityHandlerV5._r5_password\  s8     hDKK{{}r>   c                    [        U5      nUR                  U5        Ub  UR                  U5        UR                  5       n[         [        [        4nS=pxUS:  d  XS-
  :  a~  X-   U=(       d    S-   S-  n	U R                  USS USS U	S9n
X`R                  U
SS 5         nU" U
5      R                  5       nU
[        U
5      S-
     nUS-  nUS:  a  Mt  XS-
  :  a  M~  USS $ )	z#Compute the password for revision 6Nr   @   r  r>   r,  )r  ivr   r   )r   r   r=  r   r   _aes_cbc_encrypt_bytes_mod_3r   )rk   r  r  r  initial_hashrB  hashesround_nolast_byte_valk1e	next_hashs               r?   r  )PDFStandardSecurityHandlerV5._r6_passwordi  s     h'D!'!&&)#$$m}"}<,&-C0B6B%%!CR&Qr"XB%GA 003B89I!##%Ac!fqjMMMH m}"}< "vr>   input_bytesc                 ,    [        S U  5       5      S-  $ )Nc              3   *   #    U  H	  oS -  v   M     g7f)r   Nr7   )r5  bs     r?   r7  <PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>  s     .+Qq5+s   r   )sum)r  s    r?   r  )PDFStandardSecurityHandlerV5._bytes_mod_3  s     .+..22r>   r  r  r   c                     [        [        R                  " U5      [        R                  " U5      5      nUR                  5       nUR                  U5      UR                  5       -   $ rg   )r   r   r  r   r  	encryptorr   finalize)rk   r  r  r   r  r  s         r?   r  -PDFStandardSecurityHandlerV5._aes_cbc_encrypt  sL    
s+UYYr];$$&	%	(:(:(<<<r>   rr   r   c                     US S nUSS  nU R                   c   e[        [        R                  " U R                   5      [        R
                  " U5      [        5       S9nUR                  5       R                  U5      $ )Nr,  r  )	r  r   r   r  r   r  r   r  r   )rk   rr   r   r   r  r  r  s          r?   r  +PDFStandardSecurityHandlerV5.decrypt_aes256  sr     $Sb	"#Y
xx###NN488$II+,#%

 !((44r>   )	r  r  r  r  r  r  r  r  r  r   rg   )r9   r:   r;   r<   r  r	  r{   r   r   r|   r3  rz  r  r  r  r  r  staticmethodr  r  r  r=   r  r  s   @r?   r  r    sf    
&C HXsC6G6N-O$P S Xe_ ,.C .E . #'		>	> 	> 		>
 
	> #'	  	
 
" #'	  	
 
2 3% 3C 3 3=E =u =E =e =
	5C 	5 	55 	5U 	5 	5r>   r  c                      \ rS rSr% Sr\\\\S.r\	\
\\   4   \S'      S"S\S\S\S\S	S
4
S jjr\" S5      rS#S\S	S
4S jjrS\S\
S\
S	\4S jrS\S	\\\   \
4   4S jrS\
S\
S	\4S jrS\
S	\4S jr\\\\\\4   rS	\\   4S jrS	\\   4S jr S\S\!\\"4   S	\4S jr#S\!\\"4   S	\4S jr$S\S	\
4S jr%S\S\
S\\&   S	S
4S  jr'S!r(g
)$PDFDocumenti  a4  PDFDocument object represents a PDF document.

Since a PDF file can be very big, normally it is not loaded at
once. So PDF document has to cooperate with a PDF parser in order to
dynamically import the data as processing goes.

Typical usage:
  doc = PDFDocument(parser, password)
  obj = doc.getobj(objid)

)r   r   r!  rG  security_handler_registryrw   r  cachingfallbackre   Nc                    X0l         / U l        / U l        0 U l        SU l        SU l        SU l        0 U l        0 U l        Xl        U R                  R                  U 5        S=U l
        =U l        U l         U R                  U5      nXPl        U R                  XU R                  5        U R                   H  nUR+                  5       nU(       d  M  SU;   a=  SU;   a  [-        US   5      n	OSn	U	[/        US   5      4U l        U R1                  U5        SU;   a'  U R                  R)                  [/        US   5      5        SU;   d  M  [/        US   5      U l          O   [3        S5      eU R                  R5                  S	5      [6        La!  [8        R:                  (       a  [3        S
5      egg! [          aH    U(       a=  SUl        [%        5       nUR'                  U5        U R                  R)                  U5         GNWf = f)z1Set the document to use a given PDFParser object.NTEncryptID)r>   r>   InfoRootz(No /Root object! - Is this really a PDF?r   zCatalog not found!)r  xrefsinfocatalog
encryptiondecipher_parser_cached_objs_parsed_objsset_documentr$  r)  r-  	find_xrefr   read_xref_fromr5   r  r   ry   r   rl   r'   r%   _initialize_passwordr!   r   LITERAL_CATALOGr   r   )
rk   rw   r  r  r  r   newxrefxrefr   id_values
             r?   r   PDFDocument.__init__  s    (*
	')5948;=AC!!$'GKKKD.1D
	+..(CHTZZ8 JJD&&(GG#7?)'$-8H
  *H#+Z	8J-K"L))(3 		  GFO!<= )'&/:) , !!KLL<<F#?:$%9::  ;=  	+"&)+V$

!!'*	+s   63F/ /AH H   objc                    U R                   c   eU R                   u  p#[        UR                  S5      5      S:w  a  [        SU-  5      e[	        UR                  SS5      5      nU R
                  R                  U5      nUc  [        SU-  5      eU" X#U5      nUR                  U l        UR                  5       U l        UR                  5       U l	        UR                  5       U l
        U R                  c   eSU R                  l        g )NFilterStandardzUnknown filter: param=%rr  r   zUnknown algorithm: param=%rF)r  r.   r   rQ   r&   r  r`  r  r$  r)  r-  r  r  )rk   r  r  r  r  factoryhandlers          r?   r   PDFDocument._initialize_password  s    ***		(+,
:$%?%%GHHeiiQ'(0044Q7?$%BU%JKK%1#002$224%446||''' %r>   r   r   rr   c                 ^   UR                   U R                  ;   a  U R                  UR                      u  pEOMU R                  U5      u  pEU R                  (       a)  UR                   c   eXE4U R                  UR                   '   US-  U-   n XF   nU$ ! [         a    [        SU-  5      ef = f)Nr   zindex too big: %r)rr   r  _get_objectsr  
IndexErrorr!   )rk   r   r   rr   r   r   r   r   s           r?   _getobj_objstmPDFDocument._getobj_objstm  s    <<4,,,))&,,7IT1))&1IT||||///37)!!&,,/EEM	>'C 
  	> !4u!<==	>s   B B,c                    UR                  S5      [        La#  [        R                  (       a  [	        SU-  5      e [        [        US   5      n[        UR                  5       5      nUR                  U 5        / n  UR                  5       u  nu  pVUR                  U5        M(  ! [         a(    [        R                  (       a  [	        SU-  5      eSn Nf = f! [         a     XB4$ f = f)Nr   zNot a stream object: %rr   r   r   )r   r   r   r   r!   r   r|   r   r    r   r  r   r   r+   )rk   r   r   rw   r   r   r   s          r?   r  PDFDocument._get_objects  s    ::f^3$%>%GHH	S&+&A
 !!23D!	$//18AC    	$%;f%DEEA	  	y	s#   B& =)C &/CC
C*)C*r   c                 x   U R                   c   eU R                   R                  U5        U R                   R                  5       u  p4U R                   R                  5       u  p5U R                   R                  5       u  p6XB:w  aa  / nX`R                  La=  U R                   R                  5       u  p6UR	                  U5        X`R                  La  M=  [        U5      S:  a  US   nXB:w  a  [        SU< SU< 35      eU[        S5      :w  a  [        SU-  5      eU R                   R                  5       u  nu  p9X4$ )Nr   zobjid mismatch: =r  zInvalid object spec: offset=%r)	r  r   r   KEYWORD_OBJr   r   r!   r,   r   )
rk   r   rr   r   r   r   r   r   endr   s
             r?   _getobj_parsePDFDocument._getobj_parse"  s   ||'''#ll,,.\\++-
<<))+ ?A---<<113 --- 1v{2? #3F:Qui!HII#f+ !AC!GHH//1Xaxr>   c                    U R                   (       d  [        S5      eXR                  ;   a  U R                  U   u  p#U$ U R                    H  n UR                  U5      u  pVn Ub-  [        U R                  U5      5      nU R                  XvU5      nO;U R                  Xa5      u  pU R                  (       a  [        U R                  XU5      n[        U[        5      (       a  UR                  X5          O   [!        U5      eU R"                  (       a  X#4U R                  U'   U$ ! [         a     M  f = f! [        [        4 a     GM  f = f)zGet object from PDF

:raises PDFException if PDFDocument is not initialized
:raises PDFObjectNotFound if objid does not exist in PDF
zPDFDocument is not initialized)r  r   r  ru   r   r)   getobjr  r  r  r$   r   r#   	set_objidr+   r!   r   r  )	rk   rr   r   r   r  strmidr   r   r  s	            r?   r	  PDFDocument.getobj>  s2    zz?@@%%%,,U3LS4 
1 

-1\\%-@*VE)!-dkk&.A!B"11&G#'#5#5e#C==".t}}eC"PC!#y11e3! #( (..||,/<!!%(
+    ~. s%   D'$BD8'
D54D58EEc                    ^ SU R                   ;  a  [        eS[        S[        S[        [
        R                     4U4S jjmT" U R                   S   S5      $ )NOutlinesentrylevelre   c              3   n  >#    [        U 5      n SU ;   a]  SU ;   d  SU ;   aQ  [        [        U S   5      5      nU R                  S5      nU R                  S5      nU R                  S5      nXX4U4v   SU ;   a  SU ;   a  T" U S   US-   5       S h  vN   SU ;   a  T" U S   U5       S h  vN   g g  N  N7f)	NTitleADestSEFirstLastr   Next)r%   r0   r(   r   )r  r  titledestactionsesearchs         r?   r  (PDFDocument.get_outlines.<locals>.searchj  s     u%E%%<6U?'	%.(ABE 99V,D"YYs^F4B r::%FeO!%.%!)<<<!%-777  =7s$   BB5B1B5*B3+B53B5r   )r  rH   objectr|   r   r  OutlineType)rk   r  s    @r?   get_outlinesPDFDocument.get_outlinesf  sR    T\\)	8& 	8 	8+:Q:Q1R 	8 dll:.22r>   c                     U R                   c   e [        U R                   S   5      nUR
                  $ ! [        [        4 a    [        ef = f)zGenerate page label strings for the PDF document.

If the document includes page labels, generates strings, one per page.
If not, raises PDFNoPageLabels.

The resulting iteration is unbounded.

PageLabels)r  r$  r   r   rK   labels)rk   page_labelss     r?   get_page_labelsPDFDocument.get_page_labelsz  sV     ||'''	"$T\\,%?@K !!! h' 	"!!	"s	   5 Acatr  c                    ^^^  [        U R                  S   5      n[        UT   5      nS[
        [        [        4   S[        4UUU4S jjmT" U5      $ ! [        [        4 a    [	        TT45      ef = f)NNamesdre   c           	        > SU ;   a  [        U S   5      u  pTU:  d  UT:  a  g SU ;   aW  [        U S   5      n[        [        [        [        [
        [        [        4   [        4      [        SU5      5      5      nUT   $ SU ;   a1  [        U S   5       H  nT	" [        U5      5      nU(       d  M  Us  $    [        TT45      e)NLimitsr+  r   Kids)r'   dictr   r   r   r   r{   r3  r   r/   r%   r   )
r,  r  k2r   namesr6  r  r)  r  lookups
          r?   r3  'PDFDocument.lookup_name.<locals>.lookup  s    1}%ak28rCx!|!!G*-%c5j(93(>"?@(1dBST Sz!{#AfI.Az!}-Aq  / sCj))r>   )r%   r  r   r   r   r	   r{   r   )rk   r)  r  r2  d0r3  s    ``  @r?   lookup_namePDFDocument.lookup_name  s|    	*t||G45E c
#	*d38n 	* 	* 	*$ bz/ h' 	*sCj))	*s   A A4r~  c                      U R                  SU5      nU$ ! [         aK    SU R                  ;  a  [        U5      e[	        U R                  S   5      nX;  a  [        U5      eX1   n U$ f = f)NDests)r6  r   r  rN   r%   )rk   r~  r   r5  s       r?   get_destPDFDocument.get_dest  sw    
	""7D1C 
  	dll*,T22DLL12B~,T22(C
	s    AA+*A+c                    SnUR                  5        Hk  nUR                  5       nUS:X  aG  UR                  5       (       d  [        SU< 35      e[	        U5      nUS:  d  [        SU 35      eUs  $ U(       d  Mi  UnMm     [        S5      e)z0Internal function used to locate the first XRef.r>   s	   startxrefzInvalid xref position: r   z Invalid negative xref position: Unexpected EOF)revreadlinesr   isdigitr5   r|   )rk   rw   prevr   r   s        r?   r  PDFDocument.find_xref  s     '')D::<D |# ||~~(+B4()KLLD	z(+KE7)STTt% *( -..r>   r   r  c                    UR                  U5        UR                  5          UR                  5       u  pE[        U[        5      (       a=  UR                  U5        UR                  5         [        5       nUR                  U5        O9XQR                  L a  UR                  5         [        5       nUR                  U5        UR                  U5        UR                  5       nSU;   a   [        US   5      nU R                  XU5        SU;   a!  [        US   5      nU R                  XU5        gg! [         a    [	        S5      ef = f)z$Reads XRefs from the given location.r=  XRefStmPrevN)r   resetr   r+   r5   r   r|   r   ry   KEYWORD_XREFr   r~   r   rl   r&   r  )rk   rw   r   r  r   tokenr  r   s           r?   r  PDFDocument.read_xref_from  s    	E	3!++-LS eS!!KKLLN -DIIf+++!9DIIfT""$GI./CU3WGFO,CU3 )  	3 !122	3s   D/ /E)r  r  r  r  r  r  r  r  r-  r)  r$  r   r  )ri  TTrh  ))r9   r:   r;   r<   rE   r   rK  r  r  r	   r|   r   rj  r   r{   r#  r   r,   r  r  r#   r  r  r   r   r  r  r	  r   r   r   r!  r'  r   r3  r6  r:  r  rc   r  r=   r7   r>   r?   r  r    s   
 &%''	NtC.H)I$IJ  ;;;; ;; 	;;
 ;; 
;;z f+K&S &$ &"Y s 3 6 9 tF|S7H1I * S V 8$C $F $L S#sC/0K3h{3 3("# ""s sEz): s 8U3:. 3 /	 /c /6"4"4 "4 K 	"4
 
"4r>   r  c                   V    \ rS rSrSr\S\\   4S j5       r\	S\
S\S\4S j5       rSrg	)
r$  i  zOPageLabels from the document catalog.

See Section 8.3.1 in the PDF Reference.
re   c           	   #   d  #    U R                   n[        U5      S:X  d  US   S   S:w  a4  [        R                  (       a  [	        S5      eUR                  SS0 45        [        US5       H  u  nu  p4[        U5      nUR                  S5      n[        [        UR                  SS5      5      5      n[        UR                  SS5      5      nU[        U5      :X  a  [        R                  " U5      n	OX   u  pX-
  n[        XU-   5      n	U	 H  nU R                  X5      nX~-   v   M     M     g 7f)Nr   z"PageLabels is missing page index 0r   Sr  r>   St)valuesr   r   r   r!   insert	enumerater%   r   r0   r(   r&   	itertoolscountr   _format_page_label)rk   r   nextr   label_dict_unchecked
label_dictstyleprefixfirst_valuerM  r  r   range_lengthvaluelabels                  r?   r%  PageLabels.labels  s     v;!vay|q0$%IJJ a!R)3<VQ3G/D/5#$89JNN3'E :>>#s+C!DEF#JNN4$;<Ks6{" )2(D"{{,,FG//=n$   4Hs   D.D0rZ  rV  c                    Uc  SnU$ U[        S5      L a  [        U 5      nU$ U[        S5      L a  [        U 5      R                  5       nU$ U[        S5      L a  [        U 5      nU$ U[        S5      L a  [	        U 5      R                  5       nU$ U[        S5      L a  [	        U 5      nU$ [
        R                  SU5        SnU$ )z+Format page label value in a specific styleri  Dr  r
  r  azUnknown page label style: %r)r-   r{   r2   upperr1   logwarning)rZ  rV  r[  s      r?   rR  PageLabels._format_page_label  s     =E  c#hJE  c#h$U+113E  c#h$U+E  c#h$U+113E  c#h$U+E  KK6>Er>   r7   N)r9   r:   r;   r<   rE   propertyr   r{   r%  r  r|   r   rR  r=   r7   r>   r?   r$  r$    sO    
 % % %< # c c  r>   r$  )]rP  loggingr   rI  hashlibr   r   r   r   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   cryptography.hazmat.backendsr   &cryptography.hazmat.primitives.ciphersr   r   r   pdf2zhr   pdf2zh.arcfourr   pdf2zh.data_structuresr   pdf2zh.pdfexceptionsr   r   r   r   pdf2zh.pdfparserr   r    r!   pdf2zh.pdftypesr"   r#   r$   r%   r&   r'   r(   r)   r*   pdf2zh.psexceptionsr+   pdf2zh.psparserr,   r-   r.   pdf2zh.utilsr/   r0   r1   r2   r3   	getLoggerr9   ra  r5   SyntaxWarningrB   rH   rK   rN   rQ   rT   UserWarningrW   rZ   r]   r   r   r  rc   r~   r   r   r   rK  r  r  r$  r7   r>   r?   <module>rv     s     	  / /     9 L L  " -  H G
 
 
 & 2 2  !	^ 	M 	L 		l 		\ 		 		- 	;  	"4 	
 X6{i." ""B#k B#J0=g 0=fK%K K%\H* H*VE5#= E5Py5#? y5x[4 [4|
7 7r>   