
    khْ                     P   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$ 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZD  ej                  eF      ZG G d de-      ZH G d deI      ZJ G d de&      ZK G d de&      ZL G d de&      ZM G d de&      ZN G d deN      ZO G d deP      ZQ G d  d!eP      ZR G d" d#eN      ZS e<d$      ZT e<d%      ZU e<d&      ZV G d' d(      ZW G d) d*eW      ZX G d+ d,eX      ZY G d- d.eW      ZZ G d/ d0      Z[ G d1 d2e[      Z\ G d3 d4e\      Z] G d5 d6      Z^ G d7 d8e$      Z_y)9    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)safe_int)
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nunpack	unpad_aesc                       e Zd Zy)PDFNoValidXRefN__name__
__module____qualname__     P/var/www/teggl/fontify/venv/lib/python3.12/site-packages/pdfminer/pdfdocument.pyr7   r7   =       r=   r7   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r9   r:   r;   __doc__r<   r=   r>   rA   rA   A       r=   rA   c                       e Zd Zy)PDFNoOutlinesNr8   r<   r=   r>   rF   rF   H   r?   r=   rF   c                       e Zd Zy)PDFNoPageLabelsNr8   r<   r=   r>   rH   rH   L   r?   r=   rH   c                       e Zd Zy)PDFDestinationNotFoundNr8   r<   r=   r>   rJ   rJ   P   r?   r=   rJ   c                       e Zd Zy)PDFEncryptionErrorNr8   r<   r=   r>   rL   rL   T   r?   r=   rL   c                       e Zd Zy)PDFPasswordIncorrectNr8   r<   r=   r>   rN   rN   X   r?   r=   rN   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.
    NrB   r<   r=   r>   rP   rP   \   rD   r=   rP   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.
    NrB   r<   r=   r>   rR   rR   c   rD   r=   rR   c                       e Zd Zy)PDFTextExtractionNotAllowedNr8   r<   r=   r>   rT   rT   j   r?   r=   rT   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_traileru       !!r=   c                     g S r\   r<   r_   s    r>   
get_objidszPDFBaseXRef.get_objidsx   s    	r=   objidc                     t        |      r\   )r   r`   re   s     r>   get_poszPDFBaseXRef.get_pos~   s    %  r=   parserNc                     t         r\   r]   )r`   ri   s     r>   loadzPDFBaseXRef.load   rb   r=   )r9   r:   r;   r	   strr   ra   r
   intrd   r   r   rh   r    rk   r<   r=   r>   rY   rY   t   s\    "T#s(^ "HSM !S !U8C=#s+B%C !"9 " "r=   rY   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)PDFXRefrZ   Nc                      i | _         i | _        y r\   )offsetstrailerr_   s    r>   __init__zPDFXRef.__init__   s    BD')r=   c                 <    d| j                   j                         z  S )Nz<PDFXRef: offsets=%r>rq   keysr_   s    r>   __repr__zPDFXRef.__repr__   s    &$,,*;*;*=>>r=   ri   c           
         	 	 |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et        |
      }t        |      }||d ||f| j                  |<   t        j                  d| d|
d|d        Vt        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Not adding object z to xref because position z or generation number z cannot be parsed as an intzxref objects: %r)nextlinestripr,   r7   
startswithseeksplitlenmaprm   
ValueErrorranger   rq   logwarningdebugload_trailer)r`   ri   poslinef	error_msgstartnobjsre   _pos_bgenno_buse_bpos_igenno_is                  r>   rk   zPDFXRef.load   s   I$oo/dzz|  z*C 

4 A1v{1&74(K	$Y//0!$S! ueem4 M & 1IQ::<D JJt$q6Q;"7z QI(33*+'D= "7+$)<+/*@DLL'KK,UG3MeY W007{:UW') X 			$dll3&!O  I$%GHHI  0,VJgdXF	$Y//0  M()KLLMs#   %F
 F" '#G
F"F?G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)Nry      zUnexpected EOF - file corruptedr   z
trailer=%r)	nexttokenr-   rl   
nextobjectr,   popr7   rr   updater&   r   r   )r`   ri   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 r\   rr   r_   s    r>   ra   zPDFXRef.get_trailer       ||r=   c                 6    | j                   j                         S r\   ru   r_   s    r>   rd   zPDFXRef.get_objids   s    ||  ""r=   re   c                      | j                   |   S r\   )rq   rg   s     r>   rh   zPDFXRef.get_pos   s    ||E""r=   rZ   N)r9   r:   r;   rs   rl   rw   r    rk   r   r	   r   ra   r   rm   rd   r   r   rh   r<   r=   r>   ro   ro      s    *?# ?."9 ." ."`.9 . .T#s(^ #HSM ##S #U8C=#s+B%C #r=   ro   c                   L    e Zd ZdefdZ ej                  d      ZdeddfdZ	y)PDFXRefFallbackrZ   c                 <    d| j                   j                         z  S )Nz<PDFXRefFallback: offsets=%r>ru   r_   s    r>   rw   zPDFXRefFallback.__repr__   s    .$,,2C2C2EFFr=   z^(\d+)\s+(\d+)\s+obj\bri   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   ry   trailer: %rzlatin-1r   NN is not defined: %rr{   )r   r~   r,   r   r   r   r   rr   decode
PDFOBJ_CUEmatchgroupsrm   rq   r   
isinstancer$   getLITERAL_OBJSTMr*   KeyErrorr   STRICTr"   r!   get_dataappendr   minr   r   )r`   ri   r   
line_bytesr   mobjid_sgenno_sre   gennor   objstreamnparser1objsindexobjid1s                     r>   rk   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)
r9   r:   r;   rl   rw   recompiler   r    rk   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)PDFXRefStreamrZ   Nc                 X    d | _         d | _        d | _        d | _        d | _        g | _        y r\   )dataentlenfl1fl2fl3rangesr_   s    r>   rs   zPDFXRefStream.__init__  s,    %)	%)"&"&"&-/r=   c                      d| j                   z  S )Nz<PDFXRefStream: ranges=%r>)r   r_   s    r>   rw   zPDFXRefStream.__repr__  s    +t{{;;r=   ri   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   r{   zInvalid index numberWz&xref stream: objid=%s, fields=%d,%d,%dz, )r   r   r   r$   r   LITERAL_XREFr7   r   r"   r   extendr   r   r   rm   r0   r   r   r   r   r   r   attrsrr   r   r   joinr   repr)	r`   ri   r   re   r   r   r   sizeindex_arrays	            r>   rk   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 r\   r   r_   s    r>   ra   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   r{   )r   r   r   r   r4   r   )r`   r   r   ioffsetentf1s          r>   rd   zPDFXRefStream.get_objids/  s      KK 	$LE55\ ${{...yy,,,qii$++)=>S488_a07bAg!)O$	$s   BBBre   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   r{   )r   r   r   r   r   r   r   r4   )
r`   re   r   r   r   r   r   r   f2f3s
             r>   rh   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   )r9   r:   r;   rs   rl   rw   r    rk   r	   r   ra   r   rm   rd   r   r   rh   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)r{   r|   .supported_revisionsdocidparampasswordrZ   Nc                 N    || _         || _        || _        | j                          y r\   )r   r   r   init)r`   r   r   r   s       r>   rs   z#PDFStandardSecurityHandler.__init__\  s"     

 		r=   c                     | j                          | j                  | j                  vrd| j                  z  }t	        |      | j                          y )NzUnsupported revision: param=%r)init_paramsrr   r   rL   init_key)r`   r   s     r>   r   zPDFStandardSecurityHandler.initg  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_paramsn  s    4::>>#q124::c?+DJJsOR04::c?+4::c?+

x <=r=   c                 h    | j                  | j                        | _        | j                  t        y r\   )authenticater   keyrN   r_   s    r>   r   z#PDFStandardSecurityHandler.init_keyv  s-    $$T]]388&& r=   c                 2    t        | j                  dz        S )N   boolr   r_   s    r>   is_printablez'PDFStandardSecurityHandler.is_printable{      DFFQJr=   c                 2    t        | j                  dz        S )N   r  r_   s    r>   is_modifiablez(PDFStandardSecurityHandler.is_modifiable~  r  r=   c                 2    t        | j                  dz        S )N   r  r_   s    r>   is_extractablez)PDFStandardSecurityHandler.is_extractable  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 )Nr{   r   r      r=   c              3   <   K   | ]  }t        |z  f        y wr\   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_u  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      r|   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 r\   )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 )Nr{   r  )r   r   r   )r`   r  r   s      r>   r1  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   r|   r$  r#  r	  r{      r=   c              3   <   K   | ]  }t        |z  f        y wr\   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=   re   r   r   r   c                 (    | j                  |||      S r\   )decrypt_rc4)r`   re   r   r   r   s        r>   r7  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"  r|   r{   r  )	r  r%  r&  r   r  r   r   r   r7  )r`   re   r   r   r  r  s         r>   r:  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   r\   )r9   r:   r;   r  r   r   rm   __annotations__r   r  r	   rl   r   rs   r   r   r   r  r  r
  r  r   r)  r   r   r-  r1  r.  r7  r:  r<   r=   r>   r   r   U  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   rZ   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(  rL   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)r:  decrypt_aes128r`   rQ  s     r>   rN  z$PDFStandardSecurityHandlerV4.get_cfm  s+    4<###W_&&&r=   re   r   r   r   c                     | j                   s%|#|j                  d      }|t        |      dk(  r|S || j                  } | j                  |   |||      S )Nr   Metadata)r(  r   r/   rK  rL  )r`   re   r   r   r   rQ  ts          r>   r7  z$PDFStandardSecurityHandlerV4.decrypt  s\     $$):		&!A}aJ!><99Dtxx~eUD11r=   c                     |S r\   r<   )r`   re   r   r   s       r>   rO  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                  |      }	t        |	      S )Nr"  r|   r{   s   sAlTr  backend)r  r%  r&  r   r  r   r   r   r   AESr   CBCr   	decryptorr   r5   )
r`   re   r   r   r  r  initialization_vector
ciphertextcipher	plaintexts
             r>   rU  z+PDFStandardSecurityHandlerV4.decrypt_aes128  s    xx###HHkk$&r*+kk$&r*+  	 3xkkm/c#c(B/0 $Sb	"#Y
NN3II+,#%

 $$&--j9	##r=   r   )NN)r9   r:   r;   r   r   rm   r>  r   rl   r   r   r  rN  r	   r   r7  rO  rU  __classcell__rP  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 $C $ $5 $U $r=   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#     rZ   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   )rH  r   r   r)   r   oeuer   o_hasho_validation_salt
o_key_saltr   u_hashu_validation_salt
u_key_salt)r`   rP  s    r>   r   z(PDFStandardSecurityHandlerV5.init_params,  s    DJJt,-DJJt,-ffSbk!%2&&+ffSbk!%2&&+r=   rQ  c                 &    |dk(  r| j                   S y )NAESV3)decrypt_aes256rV  s     r>   rN  z$PDFStandardSecurityHandlerV5.get_cfm8  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                   r\  )_normalize_password_password_hashrq  r   rp  rr  r   r   r^  r   r_  r   r`  r   rn  rt  rs  ru  ro  )r`   r   
password_br  rc  s        r>   r   z)PDFStandardSecurityHandlerV5.authenticate>  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 )Nri  r=   r   )saslprepzutf-8   )r   pdfminer._saslprepr~  r,  )r`   r   r~  s      r>   rz  z0PDFStandardSecurityHandlerV5._normalize_passwordT  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>   r{  z+PDFStandardSecurityHandlerV5._password_hash^  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_passwordi  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_passwordv  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)r|   Nr<   )r  bs     r>   r  z<PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>  s     .Q1q5.s   r|   )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 r\   )r   r   r^  r   r_  	encryptorr   finalize)r`   r  r  r   rc  r  s         r>   r  z-PDFStandardSecurityHandlerV5._aes_cbc_encrypt  sL    
s+UYYr];$$&	%	(:(:(<<<r=   re   r   c                    |d d }|dd  }| j                   J t        t        j                  | j                         t	        j
                  |      t                     }|j                         j                  |      }t        |      S )Nr  r\  )
r  r   r   r^  r   r_  r   r`  r   r5   )r`   re   r   r   ra  rb  rc  rd  s           r>   rx  z+PDFStandardSecurityHandlerV5.decrypt_aes256  s|     $Sb	"#Y
xx###NN488$II+,#%

 $$&--j9	##r=   r   r\   )r9   r:   r;   r   r   rl   r   r   rm   r  rN  r   rz  r{  r  r  staticmethodr  r  rx  re  rf  s   @r>   rh  rh  )  sa    
&C HXsC6G6N-O$P S Xe_ ,.C .E . #'		>	> 	> 		>
 
	> #'	  	
 
" #'	  	
 
2 3% 3C 3 3=E =u =E =e =

$C 
$ 
$5 
$U 
$r=   rh  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   r{   r  r#  security_handler_registryri   r   cachingfallbackrZ   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_fromr7   r  r   rk   r   ra   r(   r&   _initialize_passwordr"   r   LITERAL_CATALOGr   r   )
r`   ri   r   r  r  r   newxrefxrefrr   id_values
             r>   rs   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   rL   r'   r  r7  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   re   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)Nr{   zindex too big: %r)re   r  _get_objectsr  
IndexErrorr"   )r`   r   r   re   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   rm   r   r!   r   r  r   r   r,   )r`   r   r   ri   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 )Nr{   zobjid mismatch: =r  zInvalid object spec: offset=%r)	r  r   r   KEYWORD_OBJr   r   r"   r-   r   )	r`   r   re   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  rh   r   r*   getobjr  r  r  r%   r   r$   	set_objidr,   r"   r   r  )r`   re   r   r   r  strmidr   r   s           r>   r  zPDFDocument.getobjJ  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levelrZ   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&   r1   r)   r   )r  r  titledestactionsesearchs         r>   r  z(PDFDocument.get_outlines.<locals>.searchv  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  rF   objectrm   r   r  OutlineType)r`   r  s    @r>   get_outlineszPDFDocument.get_outlinesr  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   rH   labels)r`   page_labelss     r>   get_page_labelszPDFDocument.get_page_labels  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drZ   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  r{   Kids)r(   dictr   r   r   r   rl   r  r   r0   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	   rl   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rQ  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  rJ   r&   )r`   rQ  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   isdigitr7   rm   )r`   ri   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,   r7   r   r   r   rm   r   rk   KEYWORD_XREFr~   ro   r   ra   r'   r  )r`   ri   r   r  r   tokenr  rr   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+)r=  TTr<  )'r9   r:   r;   rC   r   r'  rh  r  r	   rm   r   r>  r    rl   r  rs   r-   r  r  r$   r  r  r   r   r  r  r  r   r  r   r  r  r   r  r  r  r  rY   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.
    rZ   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   r1   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 styler=  Dr   r   r  azUnknown page label style: %r)r.   rl   r3   upperr2   r   r   )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)r9   r:   r;   rC   propertyr   rl   r  r  rm   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.castingr   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.utilsr0   r1   r2   r3   r4   r5   	getLoggerr9   r   r7   SyntaxWarningrA   rF   rH   rJ   rL   rN   UserWarningrP   rR   rT   r   r   r  rY   ro   r   r   r   r'  rh  r  r  r<   r=   r>   <module>r*     s     	  / /     9 L L  $ % /  J I
 
 
 ( 4 4  g!	^ 	M 	L 		l 		\ 		 		- 	;  	"4 	
 X6{i." ""L#k L#^0=g 0=fK%K K%\H* H*VF$#= F$Rz$#? z$zY4 Y4x
7 7r=   