
    ;3hǐ                     @   d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d dlm Z  d dl!m"Z" d d	l#m$Z$m%Z%m&Z&m'Z' d d
l(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZA  ej                  eC      ZD G d de+      ZE G d deF      ZG G d de$      ZH G d de$      ZI G d de$      ZJ G d de$      ZK G d deK      ZL G d deM      ZN G d d eM      ZO G d! d"eK      ZP e:d#      ZQ e:d$      ZR e:d%      ZS G d& d'      ZT G d( d)eT      ZU G d* d+eU      ZV G d, d-eT      ZW G d. d/      ZX G d0 d1eX      ZY G d2 d3eY      ZZ G d4 d5      Z[ G d6 d7e"      Z\y)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                       e Zd Zy)PDFNoValidXRefN__name__
__module____qualname__     T/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/pdfminer/pdfdocument.pyr5   r5   ;       r;   r5   c                       e Zd ZdZy)PDFNoValidXRefWarningztLegacy warning for missing xref.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr7   r8   r9   __doc__r:   r;   r<   r?   r?   ?       r;   r?   c                       e Zd Zy)PDFNoOutlinesNr6   r:   r;   r<   rD   rD   F   r=   r;   rD   c                       e Zd Zy)PDFNoPageLabelsNr6   r:   r;   r<   rF   rF   J   r=   r;   rF   c                       e Zd Zy)PDFDestinationNotFoundNr6   r:   r;   r<   rH   rH   N   r=   r;   rH   c                       e Zd Zy)PDFEncryptionErrorNr6   r:   r;   r<   rJ   rJ   R   r=   r;   rJ   c                       e Zd Zy)PDFPasswordIncorrectNr6   r:   r;   r<   rL   rL   V   r=   r;   rL   c                       e Zd ZdZy)PDFEncryptionWarningzyLegacy warning for failed decryption.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr@   r:   r;   r<   rN   rN   Z   rB   r;   rN   c                       e Zd ZdZy)"PDFTextExtractionNotAllowedWarningzLegacy warning for PDF that does not allow extraction.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr@   r:   r;   r<   rP   rP   a   rB   r;   rP   c                       e Zd Zy)PDFTextExtractionNotAllowedNr6   r:   r;   r<   rR   rR   h   r=   r;   rR   ObjStmXRefCatalogc                   f    e Zd Zdeeef   fdZdee   fdZ	dede
ee   eef   fdZdeddfdZy)	PDFBaseXRefreturnc                     t         NNotImplementedErrorselfs    r<   get_trailerzPDFBaseXRef.get_trailers       !!r;   c                     g S rZ   r:   r]   s    r<   
get_objidszPDFBaseXRef.get_objidsv   s    	r;   objidc                     t        |      rZ   )r   r^   rc   s     r<   get_poszPDFBaseXRef.get_pos|   s    %  r;   parserNc                     t         rZ   r[   )r^   rg   s     r<   loadzPDFBaseXRef.load   r`   r;   )r7   r8   r9   r	   strr   r_   r
   intrb   r   r   rf   r   ri   r:   r;   r<   rW   rW   r   s\    "T#s(^ "HSM !S !U8C=#s+B%C !"9 " "r;   rW   c                       e Zd ZddZdefdZdeddfdZdeddfdZde	ee
f   fdZdee   fd	Zd
edeee   eef   fdZy)PDFXRefrX   Nc                      i | _         i | _        y rZ   )offsetstrailerr]   s    r<   __init__zPDFXRef.__init__   s    BD')r;   c                 <    d| j                   j                         z  S )Nz<PDFXRef: offsets=%r>ro   keysr]   s    r<   __repr__zPDFXRef.__repr__   s    &$,,*;*;*=>>r;   rg   c                 b   	 	 |j                         \  }}|j                         }|s(	 |j	                  d      r|j                  |       n|j                  d      }t        |      dk7  rd|d|}t        |      	 t        t        |      \  }}t        |||z         D ]  }	 |j                         \  }	}|j                         }|j                  d      }t        |      dk7  rd	|d
|}t        |      |\  }
}}|dk7  red t        |
      t        |      f| j                  |<    -t        j                  d| j                         | j                  |       y # t        $ r t        d      w xY w# t        $ r d|d|}t        |      w xY w# t        $ r t        d      w xY w)Nz Unexpected EOF - file corrupted?   trailer       zTrailer not found: z: line=zInvalid line:    zInvalid XRef format: z, line=   nzxref objects: %r)nextlinestripr+   r5   
startswithseeksplitlenmaprk   
ValueErrorrangero   logdebugload_trailer)r^   rg   poslinef	error_msgstartnobjsrc   _pos_bgenno_buse_bs                r<   ri   zPDFXRef.load   s   I$oo/dzz|  z*C 

4 A1v{1&74(K	$Y//0!$S! ueem4 GM & 1IQ::<D JJt$q6Q;"7z QI(33*+'D='+SZW&FU#G) D 			$dll3&!;  I$%GHHI  0,VJgdXF	$Y//0  M()KLLMs#   %E!  E9 &#F!E69FF.c                 ~   	 |j                         \  }}|t        d      u sJ t        |             |j                         \  }}| j                  j                  t        |             t        j                  d| j                         y # t        $ r) |j                  d      }|st        d      |d   \  }}Y vw xY w)Nrw      zUnexpected EOF - file corruptedr   z
trailer=%r)	nexttokenr,   rj   
nextobjectr+   popr5   rp   updater%   r   r   )r^   rg   r   kwddicxs         r<   r   zPDFXRef.load_trailer   s    	'')HQ#j/)33s83)((*HQ 	JsO,		,-  	

1A$%FGGtHQ		s   AB
 
/B<;B<c                     | j                   S rZ   rp   r]   s    r<   r_   zPDFXRef.get_trailer       ||r;   c                 6    | j                   j                         S rZ   rs   r]   s    r<   rb   zPDFXRef.get_objids   s    ||  ""r;   rc   c                      | j                   |   S rZ   )ro   re   s     r<   rf   zPDFXRef.get_pos   s    ||E""r;   rX   N)r7   r8   r9   rq   rj   ru   r   ri   r   r	   r   r_   r   rk   rb   r   r   rf   r:   r;   r<   rm   rm      s    *?# ?$"9 $" $"L.9 . .T#s(^ #HSM ##S #U8C=#s+B%C #r;   rm   c                   L    e Zd ZdefdZ ej                  d      ZdeddfdZ	y)PDFXRefFallbackrX   c                 <    d| j                   j                         z  S )Nz<PDFXRefFallback: offsets=%r>rs   r]   s    r<   ru   zPDFXRefFallback.__repr__   s    .$,,2C2C2EFFr;   z^(\d+)\s+(\d+)\s+obj\brg   Nc                 F   |j                  d       	 	 |j                         \  }}|j                  d      rC|j                  |       | j	                  |       t
        j                  d| j                         y |j                  d      }| j                  j                  |      }|s|j                         \  }}t        |      }t        |      }	d ||	f| j                  |<   |j                  |       |j                         \  }
}t        |t               rx|j#                  d      t$        u rat'        |      }	 |d   }t1        |j3                               }g }	 	 |j                         \  }
}|j5                  t7        t        |             3# t        $ r Y y w xY w# t(        $ r# t*        j,                  rt/        d|z        d}Y w xY w# t        $ r Y nw xY wt9        |t;        |      dz        }t=        |      D ]  }||dz     }||df| j                  |<    )	Nr   rw   trailer: %rzlatin-1r   NN is not defined: %rry   )r   r|   r+   r~   r   r   r   rp   decode
PDFOBJ_CUEmatchgroupsrk   ro   r   
isinstancer#   getLITERAL_OBJSTMr)   KeyErrorr   STRICTr!   r    get_dataappendr   minr   r   )r^   rg   r   
line_bytesr   mobjid_sgenno_src   gennor   objstreamnparser1objsindexobjid1s                     r<   ri   zPDFXRefFallback.load   s   A$*OO$5!j $$Z0C !!&)		-6$$Y/D%%d+A!"WgLELE#'e"4DLLKK((*HQ#y)cggfo.O%c*sA
 *&//*;<"$#*#5#5#7CDcN3 A   ,   ,-Cf-LMMA  3t9>*"1X =E!%!)_F,15!+<DLL(=s5   F <F" 4G 	FF")GG	GG)
r7   r8   r9   rj   ru   recompiler   r   ri   r:   r;   r<   r   r      s6    G# G 56J*=9 *= *=r;   r   c                   z    e Zd ZddZdefdZdeddfdZdeee	f   fdZ
dee   fdZd	edeee   eef   fd
Zy)PDFXRefStreamrX   Nc                 X    d | _         d | _        d | _        d | _        d | _        g | _        y rZ   )dataentlenfl1fl2fl3rangesr]   s    r<   rq   zPDFXRefStream.__init__   s,    %)	%)"&"&"&-/r;   c                      d| j                   z  S )Nz<PDFXRefStream: ranges=%r>)r   r]   s    r<   ru   zPDFXRefStream.__repr__  s    +t{{;;r;   rg   c           	         |j                         \  }}|j                         \  }}|j                         \  }}|j                         \  }}t        |t              r|j	                  d      t
        urt        d      |d   }|j	                  dd|f      }t        |      dz  dk7  rt        d      | j                  j                  t        t        t        t        t        f      t        d|                   |d   \  | _        | _        | _        | j                   | j"                  | j$                  J |j'                         | _        | j                   | j"                  z   | j$                  z   | _        |j,                  | _        t0        j3                  d	d
j5                  t7        t8        | j                              | j                   | j"                  | j$                         y )Nr   zInvalid PDF stream spec.SizeIndexr   ry   zInvalid index numberWz&xref stream: objid=%s, fields=%d,%d,%dz, )r   r   r   r#   r   LITERAL_XREFr5   r   r!   r   extendr   r   r   rk   r/   r   r   r   r   r   r   attrsrp   r   r   joinr   repr)	r^   rg   r   rc   r   r   r   sizeindex_arrays	            r<   ri   zPDFXRefStream.load  s   %%'
E%%'
E##%C'')F&),

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||		4IIc$,-HHHHHH	
r;   c                     | j                   S rZ   r   r]   s    r<   r_   zPDFXRefStream.get_trailer   r   r;   c              #   8  K   | j                   D ]  \  }}t        |      D ]t  }| j                  J | j                  J | j                  |z  }| j                  ||| j                  z    }t	        |d | j
                   d      }|dk(  s|dk(  sn||z    v  y w)Nr   ry   )r   r   r   r   r3   r   )r^   r   r   ioffsetentf1s          r<   rb   zPDFXRefStream.get_objids#  s      KK 	$LE55\ ${{...yy,,,qii$++)=>S488_a07bAg!)O$	$s   BBBrc   c                 n   d}| j                   D ]!  \  }}||k  r|||z   k  r
|||z
  z  } n||z  }# t        |      | j                  J | j                  J | j                  | j
                  | j                  J | j                  |z  }| j                  ||| j                  z    }t        |d | j                   d      }t        || j                  | j                  | j
                  z          }t        || j                  | j
                  z   d        }	|dk(  rd ||	fS |dk(  r||	dfS t        |      )Nr   r   ry   )r   r   r   r   r   r   r   r3   )
r^   rc   r   r   r   r   r   r   f2f3s
             r<   rf   zPDFXRefStream.get_pos.  sJ    KK 	%LE5~%%%-"7&	% e$${{&&&yy$$$xx#(<AUUUu$ii$++!56S488_a(SDHHtxx$789SDHH,./07"b>!1WA; e$$r;   r   )r7   r8   r9   rq   rj   ru   r   ri   r	   r   r_   r   rk   rb   r   r   rf   r:   r;   r<   r   r      sm    0<# <
9 
 
2T#s(^ 	$HSM 	$%S %U8C=#s+B%C %r;   r   c                   L   e Zd ZU dZdZeedf   ed<   	 ddee	   de
eef   dedd	fd
ZddZddZddZdefdZdefdZdefdZde	de	fdZde	de	fdZdedee	   fdZde	dee	   fdZde	defdZde	dee	   fdZ	 d dedede	dee
eef      de	f
dZdedede	de	fdZy	)!PDFStandardSecurityHandlers    (N^NuAd NV.. h>/dSiz)ry   rz   .supported_revisionsdocidparampasswordrX   Nc                 N    || _         || _        || _        | j                          y rZ   )r   r   r   init)r^   r   r   r   s       r<   rq   z#PDFStandardSecurityHandler.__init__P  s"     

 		r;   c                     | j                          | j                  | j                  vrd| j                  z  }t	        |      | j                          y )NzUnsupported revision: param=%r)init_paramsrr   r   rJ   init_key)r^   r   s     r<   r   zPDFStandardSecurityHandler.init[  sB    6611184::EI$Y//r;   c                    t        | j                  j                  dd            | _        t        | j                  d         | _        t        | j                  d   d      | _        t        | j                  d         | _        t        | j                  d         | _	        t        | j                  j                  dd	            | _
        y )
NVr   RP    OULength(   )r&   r   r   vr   r*   pr(   oulengthr]   s    r<   r   z&PDFStandardSecurityHandler.init_paramsb  s    4::>>#q124::c?+DJJsOR04::c?+4::c?+

x <=r;   c                 h    | j                  | j                        | _        | j                  t        y rZ   )authenticater   keyrL   r]   s    r<   r   z#PDFStandardSecurityHandler.init_keyj  s-    $$T]]388&& r;   c                 2    t        | j                  dz        S )N   boolr   r]   s    r<   is_printablez'PDFStandardSecurityHandler.is_printableo      DFFQJr;   c                 2    t        | j                  dz        S )N   r   r]   s    r<   is_modifiablez(PDFStandardSecurityHandler.is_modifiabler  r  r;   c                 2    t        | j                  dz        S )N   r   r]   s    r<   is_extractablez)PDFStandardSecurityHandler.is_extractableu  s    DFFRK  r;   r   c                    | j                   dk(  r$t        |      j                  | j                        S t	        | j                        }|j                  | j                  d          t        |      j                  |j                               }t        dd      D ]?  dj                  fdt        |      D              }t        |      j                  |      }A ||z  }|S )Nry   r   r      r;   c              3   <   K   | ]  }t        |z  f        y wrZ   bytes.0cr   s     r<   	<genexpr>z7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>       @UAE8_@   )r   r   encryptPASSWORD_PADDINGr   r   r   digestr   r   iter)r^   r   hashresultkr   s        @r<   	compute_uz$PDFStandardSecurityHandler.compute_ux  s    66Q;3<''(=(=>> t,,-DKK

1&S\))$++-8F1b\ 4HH@d3i@@ ++F34 fFMr;   c                 B   || j                   z   d d }t        |      }|j                  | j                         |j                  t	        j
                  d| j                               |j                  | j                  d          | j                  dk\  r+t        t        |       j                  s|j                  d       |j                         }d}| j                  dk\  r;| j                  dz  }t        d	      D ]  }t        |d |       j                         }  |d | S )
Nr   <Lr   r   s      rz   r  2   )r  r   r   r   structpackr   r   r   r   PDFStandardSecurityHandlerV4encrypt_metadatar  r   r   )r^   r   r  r  r   r   s         r<   compute_encryption_keyz1PDFStandardSecurityHandler.compute_encryption_key  s    t444cr:8}DFFFKKdff-.DJJqM"66Q;4d;LL/066Q;q A2Y 2VBQZ//12bqzr;   c                 p    |j                  d      }| j                  |      }|| j                  |      }|S )Nlatin1)encodeauthenticate_user_passwordauthenticate_owner_password)r^   r   password_bytesr   s       r<   r   z'PDFStandardSecurityHandler.authenticate  s:    !2--n=;22>BC
r;   c                 L    | j                  |      }| j                  |      r|S y rZ   )r$  verify_encryption_key)r^   r   r   s      r<   r(  z5PDFStandardSecurityHandler.authenticate_user_password  s(    ))(3%%c*Jr;   c                     | j                  |      }| j                  dk(  r|| j                  k(  S |d d | j                  d d k(  S )Nry   r  )r  r   r   )r^   r   r   s      r<   r,  z0PDFStandardSecurityHandler.verify_encryption_key  sD    NN366Q;;"v$$r;   c                 T   || j                   z   d d }t        |      }| j                  dk\  r)t        d      D ]  }t        |j	                               } d}| j                  dk\  r| j
                  dz  }|j	                         d | }| j                  dk(  r%t        |      j                  | j                        }n[| j                  }t        ddd      D ]?  d	j                  fd
t        |      D              }t        |      j                  |      }A | j                  |      S )Nr   rz   r  r  r  ry      r;   c              3   <   K   | ]  }t        |z  f        y wrZ   r  r  s     r<   r  zIPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>  r  r  )r  r   r   r   r  r   r   decryptr   r   r  r(  )	r^   r   r  r   r   r   user_passwordr  r   s	           @r<   r)  z6PDFStandardSecurityHandler.authenticate_owner_password  s   t444cr:8}66Q;2Y *4;;=)*66Q;q AkkmBQ66Q;#CL008M FFM2r2& BHH@d3i@@ '
 2 2= AB ..}==r;   rc   r   r   r   c                 (    | j                  |||      S rZ   )decrypt_rc4)r^   rc   r   r   r   s        r<   r2  z"PDFStandardSecurityHandler.decrypt  s     ud33r;   c                 4   | j                   J | j                   t        j                  d|      d d z   t        j                  d|      d d z   }t        |      }|j	                         d t        t        |      d       }t        |      j                  |      S )Nr  rz   ry   r  )	r   r   r!  r   r  r   r   r   r2  )r^   rc   r   r   r   r  s         r<   r5  z&PDFStandardSecurityHandler.decrypt_rc4  s    xx###hhT51"155D%8PQSRS8TT3xkkm/c#c(B/0s|##D))r;    r   rZ   )r7   r8   r9   r  r   r   rk   __annotations__r   r  r	   rj   r   rq   r   r   r   r   r  r  r  r  r$  r   r   r(  r,  r)  r2  r5  r:   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                        e Zd ZU dZeedf   ed<   d fdZdede	e
eeegef      fdZ	 	 dded	ed
ede	eeef      de	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 xZS )r"  )r   .r   rX   c                 (   t         |           d| _        t        | j                  j                  d            | _        t        | j                  d         | _        t        | j                  d         | _	        t        | j                  j                  dd            | _        | j                  | j                  k7  rd| j                  z  }t        |      i | _        | j                  j                         D ]M  \  }}| j                  t        |d               }|d	| j                  z  }t        |      || j                  |<   O | j                   | j                  d
<   | j                  | j                  vrd| j                  z  }t        |      y )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   r#  rJ   cfmitemsget_cfmdecrypt_identity)r^   r   r  r   r   	__class__s        r<   r   z(PDFStandardSecurityHandlerV4.init_params  sH   TZZ^^D12 F!34	 F!34	 $TZZ^^4Et%L M99		!<tzzII$Y//GGMMO 	DAq\!E(34AyCdjjP	(33DHHQK	  $4499DHH$:TZZGI$Y// %r;   namec                 H    |dk(  r| j                   S |dk(  r| j                  S y )NV2AESV2)r5  decrypt_aes128r^   rL  s     r<   rI  z$PDFStandardSecurityHandlerV4.get_cfm  s+    4<###W_&&&r;   rc   r   r   r   c                     | j                   s%|#|j                  d      }|t        |      dk(  r|S || j                  } | j                  |   |||      S )Nr   Metadata)r#  r   r.   rF  rG  )r^   rc   r   r   r   rL  ts          r<   r2  z$PDFStandardSecurityHandlerV4.decrypt  s\     $$):		&!A}aJ!><99Dtxx~eUD11r;   c                     |S rZ   r:   )r^   rc   r   r   s       r<   rJ  z-PDFStandardSecurityHandlerV4.decrypt_identity  s    r;   c                    | j                   J | j                   t        j                  d|      d d z   t        j                  d|      d d z   dz   }t        |      }|j	                         d t        t        |      d       }|d d }|dd  }t        t        j                  |      t        j                  |      t                     }|j                         j                  |      S )Nr  rz   ry   s   sAlTr  backend)r   r   r!  r   r  r   r   r   r   AESr   CBCr   	decryptorr   )	r^   rc   r   r   r   r  initialization_vector
ciphertextciphers	            r<   rP  z+PDFStandardSecurityHandlerV4.decrypt_aes128  s    xx###HHkk$&r*+kk$&r*+  	 3xkkm/c#c(B/0 $Sb	"#Y
NN3II+,#%

 !((44r;   r   )NN)r7   r8   r9   r   r   rk   r9  r   rj   r   r   r  rI  r	   r   r2  rJ  rP  __classcell__rK  s   @r<   r"  r"    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 5r;   r"  c            	            e Zd ZdZd fdZdedeeeee	ge	f      fdZ
dedee	   fdZdede	fdZ	 dde	d	e	d
ee	   de	fdZ	 dde	d	e	d
ee	   de	fdZ	 dde	d	e	d
ee	   de	fdZ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 xZS )PDFStandardSecurityHandlerV5)r     rX   c                    t         |           d| _        t        | j                  d         | _        t        | j                  d         | _        | j                  d d | _        | j                  dd | _	        | j                  dd  | _
        | j                  d d | _        | j                  dd | _        | j                  dd  | _        y )N   OEUEr   r   )rC  r   r   r(   r   oeuer   o_hasho_validation_salt
o_key_saltr   u_hashu_validation_salt
u_key_salt)r^   rK  s    r<   r   z(PDFStandardSecurityHandlerV5.init_params  s    DJJt,-DJJt,-ffSbk!%2&&+ffSbk!%2&&+r;   rL  c                 &    |dk(  r| j                   S y )NAESV3)decrypt_aes256rQ  s     r<   rI  z$PDFStandardSecurityHandlerV5.get_cfm+  s    7?&&&r;   r   c                    | j                  |      }| j                  || j                  | j                        }|| j                  k(  r| j                  || j
                  | j                        }t        t        j                  |      t        j                  d      t                     }|j                         j                  | j                        S | j                  || j                        }|| j                   k(  r| j                  || j"                        }t        t        j                  |      t        j                  d      t                     }|j                         j                  | j$                        S y )Ns                   rW  )_normalize_password_password_hashrk  r   rj  rl  r   r   rY  r   rZ  r   r[  r   rh  rn  rm  ro  ri  )r^   r   
password_br  r^  s        r<   r   z)PDFStandardSecurityHandlerV5.authenticate1  s%   --h7
"":t/E/EtvvN4;;&&z4??DFFKDt$		*%')F
 ##%,,TWW55"":t/E/EF4;;&&z4??CDt$		*%')F
 ##%,,TWW55r;   c                 j    | j                   dk(  r|syddlm}  ||      }|j                  d      d d S )Nrc  r;   r   )saslprepzutf-8   )r   pdfminer._saslpreprx  r'  )r^   r   rx  s      r<   rt  z0PDFStandardSecurityHandlerV5._normalize_passwordG  s6    66Q;3)Hw'--r;   saltvectorc                 r    | j                   dk(  r| j                  |||      S | j                  ||dd |      S )z2Compute password hash depending on revision numberr  r   r  )r   _r5_password_r6_password)r^   r   r{  r|  s       r<   ru  z+PDFStandardSecurityHandlerV5._password_hashQ  s?     66Q;$$XtV<<  4!9f==r;   c                     t        |      }|j                  |       ||j                  |       |j                         S )z#Compute the password for revision 5)r   r   r  )r^   r   r{  r|  r  s        r<   r~  z)PDFStandardSecurityHandlerV5._r5_password\  s8     hDKK{{}r;   c                    t        |      }|j                  |       ||j                  |       |j                         }t         t        t        f}dx}}|dk  s||dz
  kD  r{||z   |xs dz   dz  }	| j                  |dd |dd |	      }
|| j                  |
dd          } ||
      j                         }|
t        |
      dz
     }|dz  }|dk  rr||dz
  kD  r{|dd 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   )r^   r   r{  r|  initial_hashr  hashesround_nolast_byte_valk1e	next_hashs               r<   r  z)PDFStandardSecurityHandlerV5._r6_passwordi  s
    h'D!'!&&)#$$=m}x"}<Q,&-C0B6B%%!CR&Qr"XB%GA t003B89I!##%Ac!fqjMMMH m}x"}< "vr;   input_bytesc                 ,    t        d | D              dz  S )Nc              3   &   K   | ]	  }|d z    yw)rz   Nr:   )r  bs     r<   r  z<PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>  s     .Q1q5.s   rz   )sum)r  s    r<   r  z)PDFStandardSecurityHandlerV5._bytes_mod_3  s     .+..22r;   r   r  r   c                     t        t        j                  |      t        j                  |            }|j                         }|j                  |      |j                         z   S rZ   )r   r   rY  r   rZ  	encryptorr   finalize)r^   r   r  r   r^  r  s         r<   r  z-PDFStandardSecurityHandlerV5._aes_cbc_encrypt  sL    
s+UYYr];$$&	%	(:(:(<<<r;   rc   r   c                     |d d }|dd  }| j                   J t        t        j                  | j                         t	        j
                  |      t                     }|j                         j                  |      S )Nr  rW  )	r   r   r   rY  r   rZ  r   r[  r   )r^   rc   r   r   r\  r]  r^  s          r<   rr  z+PDFStandardSecurityHandlerV5.decrypt_aes256  sr     $Sb	"#Y
xx###NN488$II+,#%

 !((44r;   r   rZ   )r7   r8   r9   r   r   rj   r   r   rk   r  rI  r   rt  ru  r~  r  staticmethodr  r  rr  r_  r`  s   @r<   rb  rb    sa    
&C HXsC6G6N-O$P S Xe_ ,.C .E . #'		>	> 	> 		>
 
	> #'	  	
 
" #'	  	
 
2 3% 3C 3 3=E =u =E =e =
	5C 	5 	55 	5U 	5r;   rb  c                   z   e Zd ZU dZeeeedZee	e
e   f   ed<   	 	 	 d dededededd	f
d
Z ed      Zd!dedd	fdZdede	de	defdZdedeee   e	f   fdZde	de	defdZde	defdZeeeeeef   Zdee   fdZdee   fdZdede ee!f   defdZ"de ee!f   defdZ#dede	fdZ$dede	dee%   dd	fdZ&y	)"PDFDocumentaP  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   ry   r   r  security_handler_registryrg   r   cachingfallbackrX   Nc                    || _         g | _        g | _        i | _        d| _        d| _        d| _        i | _        i | _        || _        | j                  j                  |        dx| _
        x| _        | _        	 | j                  |      }| j                  ||| j                         | j                  D ]  }|j)                         }|sd|v r;d|v rt+        |d         }	nd}	|	t-        |d         f| _        | j/                  |       d|v r'| j                  j'                  t-        |d                d|v st-        |d         | _         n t1        d      | j                  j3                  d	      t4        urt6        j8                  rt1        d
      yy# t        $ rC |r=d|_        t#               }|j%                  |       | j                  j'                  |       Y ;w xY w)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_xrefread_xref_fromr5   r  r   ri   r   r_   r'   r%   _initialize_passwordr!   r   LITERAL_CATALOGr   r   )
r^   rg   r   r  r  r   newxrefxrefrp   id_values
             r<   rq   zPDFDocument.__init__  s    (*
	')5948;=AC!!$'GKKKD.1D	+..(CTZZ8 JJ 	MD&&(GG#7?)'$-8H
  *H#+Z	8J-K"L))(3 		  GFO!<= )'&/:)	M, !!KLL<<F#?:$%9::  ;=  	+"&)+V$

!!'*	+s   8.F AG"!G"   objc                    | j                   J | j                   \  }}t        |j                  d            dk7  rt        d|z        t	        |j                  dd            }| j
                  j                  |      }|t        d|z         ||||      }|j                  | _        |j                         | _        |j                         | _	        |j                         | _
        | j                  J d| j                  _        y )NFilterStandardzUnknown filter: param=%rr   r   zUnknown algorithm: param=%rF)r  r.   r   rJ   r&   r  r2  r  r  r  r  r  r  )r^   r   r   r   r   factoryhandlers          r<   r  z 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   rc   c                 T   |j                   | j                  v r| j                  |j                      \  }}nI| j                  |      \  }}| j                  r)|j                   J ||f| j                  |j                   <   |dz  |z   }	 ||   }|S # t        $ r t        d|z        w xY w)Nry   zindex too big: %r)rc   r  _get_objectsr  
IndexErrorr!   )r^   r   r   rc   r   r   r   r   s           r<   _getobj_objstmzPDFDocument._getobj_objstm  s    <<4,,,))&,,7IT1))&1IT1||||///37)!!&,,/EEM	>q'C 
  	> !4u!<==	>s   B B'c                    |j                  d      t        urt        j                  rt	        d|z        	 t        t        |d         }t        |j                               }|j                  |        g }	 	 |j                         \  }}|j                  |       %# t        $ r# t        j                  rt	        d|z        d}Y ~w xY w# t        $ r Y ||fS w xY w)Nr   zNot a stream object: %rr   r   r   )r   r   r   r   r!   r   rk   r   r    r   r  r   r   r+   )r^   r   r   rg   r   r   r   s          r<   r  zPDFDocument._get_objects  s    ::f^3$%>%GHH	S&+&A
 !!23D!	!,,.CC    	$%;f%DEEA	  	ay	s#   B 7&C )C	C		CCr   c                 n   | j                   J | j                   j                  |       | j                   j                         \  }}| j                   j                         \  }}| j                   j                         \  }}||k7  r`g }|| j                  ur=| j                   j                         \  }}|j	                  |       || j                  ur=t        |      dk\  r|d   }||k7  rt        d|d|      |t        d      k7  rt        d|z        | j                   j                         \  }}|S )Nry   zobjid mismatch: =r  zInvalid object spec: offset=%r)	r  r   r   KEYWORD_OBJr   r   r!   r,   r   )	r^   r   rc   r   r   r   r   r   r   s	            r<   _getobj_parsezPDFDocument._getobj_parse   s!   ||'''#ll,,.F\\++-
E<<))+C U?AT---<<113C T--- 1v{2U? #3F:Qui!HII#f+ !AC!GHH<<**,C
r;   c                    | j                   st        d      t        j                  d|       || j                  v r| j                  |   \  }}|S | j                   D ]  }	 |j                  |      \  }}}	 |.t        | j                  |            }| j                  |||      }n6| j                  ||      }| j                  rt        | j                  |||      }t        |t              r|j                  ||        n t%        |      t        j                  d||       | j&                  r||f| j                  |<   |S # t        $ r Y w xY w# t         t"        f$ r Y w xY w)zGet object from PDF

        :raises PDFException if PDFDocument is not initialized
        :raises PDFObjectNotFound if objid does not exist in PDF
        zPDFDocument is not initializedzgetobj: objid=%rzregister: objid=%r: %r)r  r   r   r   r  rf   r   r)   getobjr  r  r  r$   r   r#   	set_objidr+   r!   r   r  )r^   rc   r   r   r  strmidr   r   s           r<   r  zPDFDocument.getobj<  sb    zz?@@		$e,D%%%,,U3LS%4 
1 

 /-1\\%-@*VUE)!-dkk&.A!B"11&%G"00>==".t}}eUC"PC!#y1eU3!/( (..II.s;||,/<!!%(
+    ~. s%    E6BE	EEE$#E$c                     d| j                   vrt        dt        dt        dt        t
        j                     ffd | j                   d   d      S )NOutlinesentrylevelrX   c              3   Z  K   t        |       } d| v r[d| v sd| v rSt        t        | d               }| j                  d      }| j                  d      }| j                  d      }|||||f d| v rd| v r | d   |dz         E d {    d| v r | d   |      E d {    y y 7 7 w)	NTitleADestSEFirstLastr   Next)r%   r0   r(   r   )r  r  titledestactionsesearchs         r<   r  z(PDFDocument.get_outlines.<locals>.searchh  s     u%E%%<6U?'	%.(ABE 99V,D"YYs^F4B %vr::%FeO!%.%!)<<<!%-777  =7s$   BB+B'	B+ B)!B+)B+r   )r  rD   objectrk   r   r  OutlineType)r^   r  s    @r<   get_outlineszPDFDocument.get_outlinesd  sR    T\\)	8& 	8 	8+:Q:Q1R 	8 dll:.22r;   c                     | j                   J 	 t        | j                   d         }|j
                  S # t        t        f$ r t        w xY w)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   rF   labels)r^   page_labelss     r<   get_page_labelszPDFDocument.get_page_labelsx  sV     ||'''	"$T\\,%?@K !!! h' 	"!!	"s	   4 A
catr   c                     	 t        | j                  d         }t        |         }dt
        t        t        f   dt        ffd |      S # t        t        f$ r t	        f      w xY w)NNamesdrX   c           	      p   d| v rt        | d         \  }}|k  s|k  ry d| v rWt        | d         }t        t        t        t        t
        t        t        f   t        f      t        d|                  }|   S d| v r*t        | d         D ]  } 	t        |            }|s|c S  t        f      )NLimitsr  ry   Kids)r'   dictr   r   r   r   rj   r  r   r/   r%   r   )
r  r  k2r   namesr  r   r  r   lookups
          r<   r  z'PDFDocument.lookup_name.<locals>.lookup  s    1}%ak2R8rCx!|!!G*-%c5j(93(>"?@(1dBST Sz!{#AfI. !Az!}-A ! sCj))r;   )r%   r  r   r   r   r	   rj   r   )r^   r  r   r  d0r  s    ``  @r<   lookup_namezPDFDocument.lookup_name  sw    	*t||G45E c
#	*d38n 	* 	*$ bz/ h' 	*sCj))	*s   A A1rL  c                     	 | j                  d|      }|S # t        $ rI d| j                  vrt        |      t	        | j                  d         }||vrt        |      ||   }Y |S w xY w)NDests)r  r   r  rH   r%   )r^   rL  r   r  s       r<   get_destzPDFDocument.get_dest  s{    
	""7D1C 
  	dll*,T22DLL12B2~,T22T(C
	s    AA('A(c                 R   d}|j                         D ]  }|j                         }t        j                  d|       |dk(  rVt        j                  d|       |j	                         st        d|      t        |      }|dk\  st        d|       |c S |s|} t        d      )	z0Internal function used to locate the first XRef.r;   zfind_xref: %rs	   startxrefzxref found: pos=%rzInvalid xref position: r   z Invalid negative xref position: Unexpected EOF)revreadlinesr}   r   r   isdigitr5   rk   )r^   rg   prevr   r   s        r<   r  zPDFDocument.find_xref  s     '') 	D::<DIIot,|#		.5||~(+B4()KLLD	z(+KE7)STT%	( -..r;   r   r  c                    |j                  |       |j                          	 |j                         \  }}t
        j                  d||       t        |t              r=|j                  |       |j                          t               }|j                  |       n9||j                  u r|j                          t               }|j                  |       |j                  |       |j                         }t
        j                  d|       d|v r!t!        |d         }| j#                  |||       d|v r"t!        |d         }| j#                  |||       yy# t        $ r t	        d      w xY w)z$Reads XRefs from the given location.r  z"read_xref_from: start=%d, token=%rr   XRefStmPrevN)r   resetr   r+   r5   r   r   r   rk   r   ri   KEYWORD_XREFr|   rm   r   r_   r&   r  )r^   rg   r   r  r   tokenr  rp   s           r<   r  zPDFDocument.read_xref_from  s;    	E	3!++-LS% 			6uEeS!KKLLN -DIIf+++!9DIIfT""$		-)GI./CU3WGFO,CU3 )  	3 !122	3s   E E+)r8  TTr7  )'r7   r8   r9   rA   r   r"  rb  r  r	   rk   r   r9  r   rj   r   rq   r,   r  r  r#   r  r  r   r   r  r  r  r   r  r   r  r  r   r  r  r  r  rW   r  r:   r;   r<   r  r    s   
 &%''	NtC.H)I$IJ  9;9; 9; 	9;
 9; 
9;v 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                   J    e Zd ZdZedee   fd       Zede	de
defd       Zy)r  zWPageLabels from the document catalog.

    See Section 8.3.1 in the PDF Reference.
    rX   c           	   #   X  K   | j                   }t        |      dk(  s|d   d   dk7  r/t        j                  rt	        d      |j                  ddi f       t        |d      D ]  \  }\  }}t        |      }|j                  d      }t        t        |j                  dd                  }t        |j                  dd            }|t        |      k(  rt        j                  |      }	n||   \  }
}|
|z
  }t        |||z         }	|	D ]  }| j                  ||      }||z      y w)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)r^   r   nextr   label_dict_unchecked
label_dictstyleprefixfirst_valuer  endr   range_lengthvaluelabels                  r<   r  z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Q"U{{K,,FG %//u=un$%	%s   D(D*r  r  c                 ~   |d}|S |t        d      u rt        |       }|S |t        d      u rt        |       j                         }|S |t        d      u rt        |       }|S |t        d      u rt	        |       j                         }|S |t        d      u rt	        |       }|S t
        j                  d|       d}|S )z+Format page label value in a specific styler8  Dr   r   r  azUnknown page label style: %r)r-   rj   r2   upperr1   r   warning)r  r  r  s      r<   r  z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;   N)r7   r8   r9   rA   propertyr   rj   r  r  rk   r   r  r:   r;   r<   r  r    sO    
 % % %< # c c  r;   r  )]r   loggingr   r   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   pdfminerr   pdfminer.arcfourr   pdfminer.data_structuresr   pdfminer.pdfexceptionsr   r   r   r   pdfminer.pdfparserr   r    r!   pdfminer.pdftypesr"   r#   r$   r%   r&   r'   r(   r)   r*   pdfminer.psexceptionsr+   pdfminer.psparserr,   r-   r.   pdfminer.utilsr/   r0   r1   r2   r3   	getLoggerr7   r   r5   SyntaxWarningr?   rD   rF   rH   rJ   rL   UserWarningrN   rP   rR   r   r   r  rW   rm   r   r   r   r"  rb  r  r  r:   r;   r<   <module>r$     s     	  / /     9 L L  $ /  J I
 
 
 ( 4 4  g!	^ 	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Y4 Y4x
7 7r;   