
    #jܒ                        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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 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+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@  ejA        eB          ZC G d de)          ZD G d deE          ZF G d de"          ZG G d de"          ZH G d de"          ZI G d de"          ZJ G d deJ          ZK G d d eL          ZM G d! d"eL          ZN G d# d$eJ          ZO e8d%          ZP e8d&          ZQ e8d'          ZR G d( d)          ZS G d* d+eS          ZT G d, d-eT          ZU G d. d/eS          ZV G d0 d1          ZW G d2 d3eW          ZX G d4 d5eX          ZY G d6 d7          ZZ G d8 d9e           Z[dS ):    N)CallableIterableIteratorKeysViewSequence)md5sha256sha384sha512)AnyClassVar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dS )PDFNoValidXRefN__name__
__module____qualname__     \/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/pdfminer/pdfdocument.pyr2   r2   4           Dr8   r2   c                       e Zd ZdZdS )PDFNoValidXRefWarningztLegacy warning for missing xref.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr4   r5   r6   __doc__r7   r8   r9   r<   r<   8              r8   r<   c                       e Zd ZdS )PDFNoOutlinesNr3   r7   r8   r9   rA   rA   ?   r:   r8   rA   c                       e Zd ZdS )PDFNoPageLabelsNr3   r7   r8   r9   rC   rC   C   r:   r8   rC   c                       e Zd ZdS )PDFDestinationNotFoundNr3   r7   r8   r9   rE   rE   G   r:   r8   rE   c                       e Zd ZdS )PDFEncryptionErrorNr3   r7   r8   r9   rG   rG   K   r:   r8   rG   c                       e Zd ZdS )PDFPasswordIncorrectNr3   r7   r8   r9   rI   rI   O   r:   r8   rI   c                       e Zd ZdZdS )PDFEncryptionWarningzyLegacy warning for failed decryption.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr=   r7   r8   r9   rK   rK   S   r?   r8   rK   c                       e Zd ZdZdS )"PDFTextExtractionNotAllowedWarningzLegacy warning for PDF that does not allow extraction.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr=   r7   r8   r9   rM   rM   Z   r?   r8   rM   c                       e Zd ZdS )PDFTextExtractionNotAllowedNr3   r7   r8   r9   rO   rO   a   r:   r8   rO   ObjStmXRefCatalogc                   z    e Zd Zdeeef         fdZdee         fdZ	dede
edz  eef         fdZdeddfdZdS )	PDFBaseXRefreturnc                     t           NNotImplementedErrorselfs    r9   get_trailerzPDFBaseXRef.get_trailerl       !!r8   c                     g S rW   r7   rZ   s    r9   
get_objidszPDFBaseXRef.get_objidso   s    	r8   objidNc                      t          |          rW   )r   r[   r`   s     r9   get_poszPDFBaseXRef.get_posu   s    %   r8   parserc                     t           rW   rX   )r[   rd   s     r9   loadzPDFBaseXRef.loadx   r]   r8   )r4   r5   r6   dictstrr   r\   r   intr_   tuplerc   r   rf   r7   r8   r9   rT   rT   k   s        "T#s(^ " " " "HSM    !S !U3:sC+?%@ ! ! ! !"9 " " " " " " "r8   rT   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dz  eef         fdZdS )PDFXRefrU   Nc                 "    i | _         i | _        d S rW   )offsetstrailerrZ   s    r9   __init__zPDFXRef.__init__}   s    ?A')r8   c                 <    d| j                                         dS )Nz<PDFXRef: offsets=>rn   keysrZ   s    r9   __repr__zPDFXRef.__repr__   s!    <DL$5$5$7$7<<<<r8   rd   c           
         	 	 |                                 \  }}|                                }|s0n"# t          $ r}t          d          |d }~ww xY w|                    d          r|                    |           n|                    d          }t          |          dk    rd|d|}t          |          	 t          t          |          \  }}n*# t          $ r}d|d|}t          |          |d }~ww xY wt          |||z             D ]}		 |                                 \  }
}|                                }n"# t          $ r}t          d          |d }~ww xY w|                    d          }t          |          d	k    rd
|d|}t          |          |\  }}}|dk    rt          |          }t          |          }||d ||f| j        |	<   t                              d|	 d|d|d           t                              d| j                   |                     |           d S )NTz 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'   r2   
startswithseeksplitlenmapri   
ValueErrorranger   rn   logwarningdebugload_trailer)r[   rd   poslineerrf	error_msgstartnobjsr`   _pos_bgenno_buse_bpos_igenno_is                   r9   rf   zPDFXRef.load   s   *	R$oo//dzz||  R R R$%GHHcQRz** C   

4  A1vv{{K&KK4KK	$Y///9!$S! 9 9 9FVFFdFF	$Y//S89 ueem44  V & 1 1IQ::<<DD V V V()KLLRUUVJJt$$q66Q;; Q Q Q Q QI(333*+'D== "7++$)<+/*@DL''KKWU W We W W07W W W   O*	X 			$dl333&!!!!!sD   -2 
AAA C 
D #C;;D +E
E$EE$c                    	 |                                 \  }}|t          d          u sJ t          |                      |                                \  }}nB# t          $ r5 |                    d          }|st          d          d |d         \  }}Y nw xY w| j                            t          |                     t                              d| j                   d S )Nrw      zUnexpected EOF - file corruptedr   z
trailer=%r)	nexttokenr(   rh   
nextobjectr'   popr2   ro   updater!   r   r   )r[   rd   r   kwddicxs         r9   r   zPDFXRef.load_trailer   s    	''))HQ#j//)))3s88)))((**HQ 	 	 	

1A R$%FGGTQtHQ		
 	JsOO,,,		,-----s   AA <BBc                     | j         S rW   ro   rZ   s    r9   r\   zPDFXRef.get_trailer   
    |r8   c                 4    | j                                         S rW   rs   rZ   s    r9   r_   zPDFXRef.get_objids   s    |  """r8   r`   c                     | j         |         S rW   )rn   rb   s     r9   rc   zPDFXRef.get_pos   s    |E""r8   rU   N)r4   r5   r6   rp   rh   ru   r   rf   r   rg   r   r\   r   ri   r_   rj   rc   r7   r8   r9   rl   rl   |   s        * * * *=# = = = =."9 ." ." ." ." ."`.9 . . . . .T#s(^    #HSM # # # ##S #U3:sC+?%@ # # # # # #r8   rl   c                   J    e Zd ZdefdZ ej        d          ZdeddfdZ	dS )PDFXRefFallbackrU   c                 <    d| j                                         dS )Nz<PDFXRefFallback: offsets=rr   rs   rZ   s    r9   ru   zPDFXRefFallback.__repr__   s!    DDL,=,=,?,?DDDDr8   z^(\d+)\s+(\d+)\s+obj\brd   Nc                     |                     d           	 	 |                                \  }}n# t          $ r Y d S w xY w|                    d          rL|                     |           |                     |           t
                              d| j                   d S |                    d          }| j	        
                    |          }|s|                                \  }}t          |          }t          |          }	d ||	f| j        |<   |                     |           |                                \  }
}t          |t                     r&|                    d          t$          u r	t'          |          }	 |d         }n1# t(          $ r$ t*          j        rt/          d|          d d}Y nw xY wt1          |                                          }g }	 	 |                                \  }
}|                    t7          t          |                     @# t          $ r Y nw xY wt9          |t;          |          d	z            }t=          |          D ]}||d	z           }||df| j        |<   i)
Nr   r   rw   trailer: %rzlatin-1TypeNN is not defined: ry   )r   r|   r'   r~   r   r   r   ro   decode
PDFOBJ_CUEmatchgroupsri   rn   r   
isinstancer   getLITERAL_OBJSTMr%   KeyErrorr   STRICTr   r   get_dataappendr   minr   r   )r[   rd   r   
line_bytesr   mobjid_sgenno_sr`   gennor   objstreamnparser1objsindexobjid1s                     r9   rf   zPDFXRefFallback.load   s   A(	=$*OO$5$5!jj   $$Z00 C   !!&)))		-666$$Y//D%%d++A !"WgLLELLE#'e"4DLKK((**HQ#y)) =cggfoo.O.O%c**sAA    X,-L&-L-LMMSWWAAA *&//*;*;<<"$4#*#5#5#7#7CDcNN3334    D3t99>**"1XX = =E!%!)_F,15!+<DL((Q(	=s1   0 
>>F +F<;F<#AH$ $
H10H1)
r4   r5   r6   rh   ru   recompiler   r   rf   r7   r8   r9   r   r      sj        E# E E E E 566J*=9 *= *= *= *= *= *= *=r8   r   c                       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dz  eef         fd
ZdS )PDFXRefStreamrU   Nc                 Z    d | _         d | _        d | _        d | _        d | _        g | _        d S rW   )dataentlenfl1fl2fl3rangesrZ   s    r9   rp   zPDFXRefStream.__init__   s0    "&	"&###-/r8   c                     d| j         dS )Nz<PDFXRefStream: ranges=rr   )r   rZ   s    r9   ru   zPDFXRefStream.__repr__  s    99999r8   rd   c           	         |                                 \  }}|                                 \  }}|                                 \  }}|                                \  }}t          |t                    r|                    d          t
          urt          d          |d         }|                    dd|f          }t          |          dz  dk    rt          d          | j	        
                    t          t          t          t          t          f                  t          d|                               |d         \  | _        | _        | _        | j        | j        | j        J |                                | _        | j        | j        z   | j        z   | _        |j        | _        t0                              d	d
                    t7          t8          | j	                            | j        | j        | j                   d S )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_XREFr2   r   r   r   extendr   r   rj   ri   r+   r   r   r   r   r   r   attrsro   r   r   joinr   repr)	r[   rd   r   _objid_genno_kwdr   sizeindex_arrays	            r9   rf   zPDFXRefStream.load
  s   &&((F&&((F$$&&	D''))F&),, 	=

60B0B,0V0V !;<<<f~jj1d)44{a1$$ !78884sCx 98A{;S;STTUUU)/&48TXx#(<AUAUUOO%%	h)DH4|		4IIc$,,--HHH	
 	
 	
 	
 	
r8   c                     | j         S rW   r   rZ   s    r9   r\   zPDFXRefStream.get_trailer#  r   r8   c              #     K   | j         D ]z\  }}t          |          D ]e}| j        J | j        J | j        |z  }| j        ||| j        z            }t	          |d | j                 d          }|dk    s|dk    r||z   V  f{d S )Nr   ry   )r   r   r   r   r/   r   )r[   r   r   ioffsetentf1s          r9   r_   zPDFXRefStream.get_objids&  s       K 	$ 	$LE55\\ $ ${...y,,,qi$+)= =>S48_a0077bAgg!)OOO$	$ 	$r8   r`   c                 ,   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   r/   )
r[   r`   r   r   r   r   r   r   f2f3s
             r9   rc   zPDFXRefStream.get_pos1  sQ    K 	% 	%LE5~~%%%-"7"7&e$$${&&&y$$$x#(<AUAUUu$i$+!556S48_a((SDHtx$77899SDH,../0077"b>!1WWA; e$$$r8   r   )r4   r5   r6   rp   rh   ru   r   rf   rg   r   r\   r   ri   r_   rj   rc   r7   r8   r9   r   r      s        0 0 0 0:# : : : :
9 
 
 
 
 
2T#s(^    	$HSM 	$ 	$ 	$ 	$%S %U3:sC+?%@ % % % % % %r8   r   c                   f   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	d
z  fdZde	d	e	d
z  fdZde	d	efdZde	d	e	d
z  fdZ	 d!dedede	de
eef         d
z  d	e	f
dZdedede	d	e	fdZd
S )"PDFStandardSecurityHandlers    (N^NuAd NV.. h>/dSiz)ry   rz   .supported_revisions docidparampasswordrU   Nc                 X    || _         || _        || _        |                                  d S rW   )r   r   r   init)r[   r   r   r   s       r9   rp   z#PDFStandardSecurityHandler.__init__R  s*     

 		r8   c                     |                                   | j        | j        vrd| j        }t	          |          |                                  d S )NzUnsupported revision: param=)init_paramsrr   r   rG   init_key)r[   r   s     r9   r   zPDFStandardSecurityHandler.init]  sR    6111EtzEEI$Y///r8   c                    t          | j                            dd                    | _        t          | j        d                   | _        t          | j        d         d          | _        t          | j        d                   | _        t          | j        d                   | _	        t          | j                            dd	                    | _
        d S )
NVr   RP    OULength(   )r"   r   r   vr   r&   pr$   oulengthrZ   s    r9   r   z&PDFStandardSecurityHandler.init_paramsd  s    4:>>#q11224:c?++DJsOR004:c?++4:c?++
x < <==r8   c                 `    |                      | j                  | _        | j        t          d S rW   )authenticater   keyrI   rZ   s    r9   r   z#PDFStandardSecurityHandler.init_keyl  s/    $$T]338&& r8   c                 0    t          | j        dz            S )N   boolr   rZ   s    r9   is_printablez'PDFStandardSecurityHandler.is_printableq      DFQJr8   c                 0    t          | j        dz            S )N   r  rZ   s    r9   is_modifiablez(PDFStandardSecurityHandler.is_modifiablet  r  r8   c                 0    t          | j        dz            S )N   r  rZ   s    r9   is_extractablez)PDFStandardSecurityHandler.is_extractablew  s    DFRK   r8   r  c                    | j         dk    r't          |                              | j                  S t	          | j                  }|                    | j        d                    t          |                              |                                          }t          dd          D ]Rd	                    fdt          |          D                       }t          |                              |          }S||z  }|S )Nry   r   r      r8   c              3   >   K   | ]}t          |z  f          V  d S rW   bytes.0cr   s     r9   	<genexpr>z7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>  /      @@UAE8__@@@@@@r8   )r   r   encryptPASSWORD_PADDINGr   r   r   digestr   r   iter)r[   r  hashresultkr   s        @r9   	compute_uz$PDFStandardSecurityHandler.compute_uz  s    6Q;;3<<''(=>>> t,--DKK
1&&&S\\))$++--88F1b\\ 4 4HH@@@@d3ii@@@@@ ++F33fFMr8   c                 f   || j         z   d d         }t          |          }|                    | j                   |                    t	          j        d| j                             |                    | j        d                    | j        dk    r/t          t          |           j        s|                    d           |                                }d}| j        dk    rE| j        dz  }t          d	          D ]+}t          |d |                                                   },|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         r9   compute_encryption_keyz1PDFStandardSecurityHandler.compute_encryption_key  s   t44crc:8}}DFFKdf--...DJqM"""FaKK5t<<M  KK+,,,6Q;;q A2YY 2 2VBQBZ//11bqbzr8   c                     |                     d          }|                     |          }||                     |          }|S )Nlatin1)encodeauthenticate_user_passwordauthenticate_owner_password)r[   r   password_bytesr  s       r9   r  z'PDFStandardSecurityHandler.authenticate  sC    !22--n==;22>BBC
r8   c                 ^    |                      |          }|                     |          r|S d S rW   )r,  verify_encryption_key)r[   r   r  s      r9   r0  z5PDFStandardSecurityHandler.authenticate_user_password  s5    ))(33%%c** 	J4r8   c                     |                      |          }| j        dk    r|| j        k    S |d d         | j        d d         k    S )Nry   r  )r#  r   r  )r[   r  r  s      r9   r4  z0PDFStandardSecurityHandler.verify_encryption_key  sG    NN36Q;;;"v$$r8   c                    || j         z   d d         }t          |          }| j        dk    r3t          d          D ]#}t          |                                          }$d}| j        dk    r
| j        dz  }|                                d |         }| j        dk    r(t          |                              | j                  }nk| j        }t          ddd          D ]Rd		                    fd
t          |          D                       }t          |                              |          }S|                     |          S )Nr   rz   r'  r&  r  ry      r8   c              3   >   K   | ]}t          |z  f          V  d S rW   r  r  s     r9   r  zIPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>  r  r8   )r  r   r   r   r  r  r   decryptr   r   r  r0  )	r[   r   r   r   r   r  user_passwordr"  r   s	           @r9   r1  z6PDFStandardSecurityHandler.authenticate_owner_password  s4   t44crc:8}}6Q;;2YY * *4;;==))6Q;;q AkkmmBQB6Q;;#CLL0088MM FM2r2&& B BHH@@@@d3ii@@@@@ '

 2 2= A A..}===r8   r`   r   r   r   c                 0    |                      |||          S rW   )decrypt_rc4)r[   r`   r   r   r   s        r9   r:  z"PDFStandardSecurityHandler.decrypt  s     ud333r8   c                 j   | j         J | j         t          j        d|          d d         z   t          j        d|          d d         z   }t          |          }|                                d t          t          |          d                   }t          |                              |          S )Nr%  rz   ry   r  )	r  r(  r)  r   r  r   r   r   r:  )r[   r`   r   r   r  r   s         r9   r=  z&PDFStandardSecurityHandler.decrypt_rc4  s    x###hT511"1"55D%8P8PQSRSQS8TT3xxkkmm/c#c((B///0s||##D)))r8   r   r   rW   )r4   r5   r6   r  r   rj   ri   __annotations__r   r  rg   rh   r   rp   r   r   r   r	  r
  r  r  r#  r,  r  r0  r4  r1  r:  r=  r7   r8   r9   r   r   L  sy        U  ,2sCx111 		 		 CH~	 		
 
	 	 	 	   > > > >' ' ' '
 d         t        ! ! ! ! !U u    u     *S UT\    5 UT\    % %4 % % % %>E >edl > > > >2 (,4 44 4 	4
 CH~$4 
4 4 4 4* *S * *% * * * * * *r8   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
ge
f         dz  fdZ	 	 dd	ed
ede
deeef         dz  dedz  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   rU   Nc                 (   t                                                       d| _        t          | j                            d                    | _        t          | j        d                   | _        t          | j        d                   | _	        t          | j                            dd                    | _        | j        | j	        k    rd| j        }t          |          i | _        | j                                        D ]R\  }}|                     t          |d                             }|d	| j        }t          |          || j        |<   S| j        | j        d
<   | j	        | j        vrd| j        }t          |          d S )N   CFStmFStrFEncryptMetadataTz Unsupported crypt filter: param=CFMz#Unknown crypt filter method: param=IdentityzUndefined crypt filter: param=)superr   r  r!   r   r   cfr*   stmfstrfr	  r+  rG   cfmitemsget_cfmdecrypt_identity)r[   r   r"  r   r   	__class__s        r9   r   z(PDFStandardSecurityHandlerV4.init_params  si   TZ^^D1122 F!344	 F!344	 $TZ^^4Et%L%L M M9	!!I4:III$Y///GMMOO 	 	DAq\!E(3344AyP$*PP	(333DHQKK#49DH$$GGGI$Y/// %$r8   namec                 :    |dk    r| j         S |dk    r| j        S d S )NV2AESV2)r=  decrypt_aes128r[   rS  s     r9   rP  z$PDFStandardSecurityHandlerV4.get_cfm  s+    4<<##W__&&4r8   r`   r   r   r   c                     | j         s.|,|                    d          }|t          |          dk    r|S || j        } | j        |         |||          S )Nr   Metadata)r+  r   r*   rM  rN  )r[   r`   r   r   r   rS  ts          r9   r:  z$PDFStandardSecurityHandlerV4.decrypt  se     $ 	):		&!!A}aJ!>!><9Dtx~eUD111r8   c                     |S rW   r7   )r[   r`   r   r   s       r9   rQ  z-PDFStandardSecurityHandlerV4.decrypt_identity	  s    r8   c                 D   | j         J | j         t          j        d|          d d         z   t          j        d|          d d         z   dz   }t          |          }|                                d t          t          |          d                   }|d d         }|dd          }t          t          j	        |          t          j        |          t                                }|                                                    |          }	t          |	          S )Nr%  rz   ry   s   sAlTr  backend)r  r(  r)  r   r  r   r   r   r   AESr   CBCr   	decryptorr   r0   )
r[   r`   r   r   r  r   initialization_vector
ciphertextcipher	plaintexts
             r9   rW  z+PDFStandardSecurityHandlerV4.decrypt_aes128  s   x###Hk$&&rr*+k$&&rr*+  	 3xxkkmm/c#c((B///0 $SbS	"##Y
N3I+,,#%%
 
 

 $$&&--j99	###r8   r   )NN)r4   r5   r6   r   rj   ri   r@  r   rh   r   r  rP  rg   r   r:  rQ  rW  __classcell__rR  s   @r9   r*  r*    s\        +/sCx///0 0 0 0 0 0,C Hc3->-E$F$M     (,2 22 2 	2
 CH~$2 Dj2 
2 2 2 2 c # U u    $C $ $5 $U $ $ $ $ $ $ $ $r8   r*  c            	       ,    e Zd ZdZd fdZdedeeeegef         dz  fdZ	dededz  fdZ
dedefd	Z	 dded
ededz  defdZ	 dded
ededz  defdZ	 dded
ededz  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&     rU   Nc                    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          | _        d S )N   OEUEr   r   )rJ  r   r  r$   r   oeuer   o_hasho_validation_salt
o_key_saltr  u_hashu_validation_salt
u_key_salt)r[   rR  s    r9   r   z(PDFStandardSecurityHandlerV5.init_params$  s    DJt,--DJt,--fSbSk!%2&+fSbSk!%2&+r8   rS  c                      |dk    r| j         S d S )NAESV3)decrypt_aes256rX  s     r9   rP  z$PDFStandardSecurityHandlerV5.get_cfm0  s    7??&&4r8   r   c                    |                      |          }|                     || j        | j                  }|| j        k    r|                     || j        | j                  }t          t          j        |          t          j
        d          t                                }|                                                    | j                  S |                     || j                  }|| j        k    r|                     || j                  }t          t          j        |          t          j
        d          t                                }|                                                    | j                  S d S )Ns                   r^  )_normalize_password_password_hashrs  r  rr  rt  r   r   r`  r   ra  r   rb  r   rp  rv  ru  rw  rq  )r[   r   
password_br   re  s        r9   r  z)PDFStandardSecurityHandlerV5.authenticate6  sP   --h77
"":t/EtvNN4;&&z4?DFKKDt$$	*%%'))  F
 ##%%,,TW555"":t/EFF4;&&z4?CCDt$$	*%%'))  F
 ##%%,,TW555tr8   c                 |    | j         dk    r|sdS ddlm}  ||          }|                    d          d d         S )Nrk  r8   r   )saslprepzutf-8   )r   pdfminer._saslprepr  r/  )r[   r   r  s      r9   r|  z0PDFStandardSecurityHandlerV5._normalize_passwordL  sV    6Q;; s333333x))Hw''--r8   saltvectorc                     | j         dk    r|                     |||          S |                     ||dd         |          S )z2Compute password hash depending on revision numberr&  r   r  )r   _r5_password_r6_password)r[   r   r  r  s       r9   r}  z+PDFStandardSecurityHandlerV5._password_hashV  sG     6Q;;$$XtV<<<  4!9f===r8   c                     t          |          }|                    |           ||                    |           |                                S )z#Compute the password for revision 5)r	   r   r  )r[   r   r  r  r   s        r9   r  z)PDFStandardSecurityHandlerV5._r5_passworda  sI     hDKK{{}}r8   c                 D   t          |          }|                    |           ||                    |           |                                }t           t          t          f}dx}}|dk     s	||dz
  k    r||z   |pdz   dz  }	|                     |dd         |dd         |	          }
||                     |
dd                            } ||
                                          }|
t          |
          dz
           }|dz  }|dk     ||dz
  k    |dd         S )	z#Compute the password for revision 6Nr   @   r   r8   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               r9   r  z)PDFStandardSecurityHandlerV5._r6_passwordn  s=    h''D!!!'''!!&&)#$$=mm}x"}<<Q,&-C0B6B%%!CRC&Qr"uXB%GGA t003B3889I	!##%%Ac!ffqjMMMH mm}x"}<< "vr8   input_bytesc                 :    t          d | D                       dz  S )Nc              3       K   | ]	}|d z  V  
dS )rz   Nr7   )r  bs     r9   r  z<PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>  s&      ..Q1q5......r8   rz   )sum)r  s    r9   r  z)PDFStandardSecurityHandlerV5._bytes_mod_3  s&     ..+.....22r8   r  r  r   c                     t          t          j        |          t          j        |                    }|                                }|                    |          |                                z   S rW   )r   r   r`  r   ra  	encryptorr   finalize)r[   r  r  r   re  r  s         r9   r  z-PDFStandardSecurityHandlerV5._aes_cbc_encrypt  sY    
s++UYr]];;$$&&	%%	(:(:(<(<<<r8   r`   r   c                 6   |d d         }|dd          }| j         J t          t          j        | j                   t	          j        |          t                                }|                                                    |          }t          |          S )Nr  r^  )
r  r   r   r`  r   ra  r   rb  r   r0   )r[   r`   r   r   rc  rd  re  rf  s           r9   rz  z+PDFStandardSecurityHandlerV5.decrypt_aes256  s     $SbS	"##Y
x###N48$$I+,,#%%
 
 

 $$&&--j99	###r8   r   rW   )r4   r5   r6   r   r   rh   r   ri   r  rP  r  r|  r}  r  r  staticmethodr  r  rz  rg  rh  s   @r9   rj  rj  !  s)        
& 
& 
& 
& 
& 
&C Hc3->-E$F$M    S UT\    ,.C .E . . . .  $		> 	>	> 	> 		>
 
	> 	> 	> 	>  $	   	
 
   "  $	   	
 
   2 3% 3C 3 3 3 \3=E =u =E =e = = = =

$C 
$ 
$5 
$U 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$r8   rj  c                      e Zd ZU dZeeeedZe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!z  d
efdZ"dee!z  d
efdZ#ded
e
fdZ$dede
d ee%         d
dfd!Z&dS )$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_registryr   Trd   r   cachingfallbackrU   Nc                     || _         g | _        g | _        i | _        d| _        d| _        d| _        i | _        i | _        || _        | j        	                    |            dx| _
        x| _        | _        	 |                     |          }|                     ||| j                   nV# t          $ rI |rDd|_        t#                      }|                    |           | j                            |           Y nw xY w| j        D ]}|                                }|sd|v rLd|v rt+          |d                   nd}	|	t-          |d                   f| _        |                     |           d|v r-| j                            t-          |d                              d|v rt-          |d                   | _         nt1          d          | j                            d	          t4          urt6          j        rt1          d
          dS dS )z1Set the document to use a given PDFParser object.NTEncryptID)r8   r8   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_fromr2   r  r   rf   r   r\   r#   r!   _initialize_passwordr   r   LITERAL_CATALOGr   r   )
r[   rd   r   r  r  r   newxrefxrefro   id_values
             r9   rp   zPDFDocument.__init__  s:    (*
	')2615;=AC!!$'''GKKKD.1D	+..((CTZ8888 	+ 	+ 	+ +"&)++V$$$
!!'***	+ J 	M 	MD&&((G G## 9=:gdm444Z#+Z	8J-K-K"L))(333  	  GFO!<!<===  )'&/:: !
 !!KLLL<F##?::x: !5666 ;:::s   71B) )AC<;C<   objc                 0   | j         J | j         \  }}t          |                    d                    dk    rt          d|          t	          |                    dd                    }| j                            |          }|t          d|           ||||          }|j        | _        |                                | _        |	                                | _	        |
                                | _
        | j        J d| j        _        d S )NFilterStandardzUnknown filter: param=r   r   zUnknown algorithm: param=F)r  r*   r   rG   r"   r  r:  r  r
  r  r  r  r  )r[   r   r   r   r   factoryhandlers          r9   r  z PDFDocument._initialize_password  s   ***		(++,,
::$%Ge%G%GHHHeiiQ''((044Q77?$%J%J%JKKK'%11#0022$2244%4466|''' %r8   r   r   r`   c                 .   |j         | j        v r| j        |j                  \  }}n9|                     |          \  }}| j        r|j         J ||f| j        |j         <   |dz  |z   }	 ||         }n%# t          $ r}t          d|          |d }~ww xY w|S )Nry   zindex too big: )r`   r  _get_objectsr  
IndexErrorr   )	r[   r   r   r`   r   r   r   r   r   s	            r9   _getobj_objstmzPDFDocument._getobj_objstm  s    <4,,,)&,7IT11))&11IT1| <|///37)!&,/EEM	Gq'CC 	G 	G 	G !<5!<!<==3F	G
s   'A0 0
B:BBc                    |                     d          t          urt          j        rt	          d|          	 t          t          |d                   }n1# t          $ r$ t          j        rt	          d|          d d}Y nw xY wt          |	                                          }|
                    |            g }	 	 |                                \  }}|                    |           -# t          $ r Y nw xY w||fS )Nr   zNot a stream object: r   r   r   )r   r   r   r   r   r   ri   r   r   r   r  r   r   r'   )r[   r   r   rd   r   r   r   s          r9   r  zPDFDocument._get_objects  s-   ::f^333 !C!C!CDDD	S&+&&AA 	 	 	 P$%D&%D%DEE4OAAA	 !!2!233D!!!	!!,,..CC   !  	 	 	D	ays#   A +BB.C0 0
C=<C=r   c                 x   | j         J | j                             |           | j                                         \  }}| j                                         \  }}| j                                         \  }}||k    r`g }|| j        ur:| j                                         \  }}|                    |           || j        u:t          |          dk    r|d         }||k    rt          d|d|          |t          d          k    rt          d|          | j                                         \  }}|S )Nry   zobjid mismatch: =r  zInvalid object spec: offset=)	r  r   r   KEYWORD_OBJr   r   r   r(   r   )	r[   r   r`   r   r   r   r   r   r   s	            r9   _getobj_parsezPDFDocument._getobj_parse!  sE   |'''#l,,..Fl,,..F<))++C U??AT---<1133C T--- 1vv{{2U?? !HF!H!Hu!H!HIII#f++ !G!G!GHHH<**,,C
r8   c                    | j         st          d          t                              d|           || j        v r| j        |         \  }}n'| j         D ]}	 |                    |          \  }}}n# t          $ r Y )w xY w	 |:t          |                     |                    }| 	                    |||          }n4| 
                    ||          }| j        rt          | j        |||          }t          |t                    r|                    ||            n&# t           t"          f$ r Y w xY wt%          |          t                              d||           | j        r||f| j        |<   |S )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=%rNzregister: objid=%r: %r)r  r   r   r   r  rc   r   r%   getobjr  r  r  r    r   r   	set_objidr'   r   r   r  )r[   r`   r   r   r  strmidr   r   s           r9   r  zPDFDocument.getobj=  s    z 	A?@@@		$e,,, D%%%,U3LS%%
 / /-1\\%-@-@*VUEE   H)!-dkk&.A.A!B!B"11&%GG"00>>= Q".t}eUC"P"PC!#y11 4eU333E~.   H (...II.s;;;| 8,/<!%(
s%   A11
A>=A>BDD32D3c                     d| j         vrt          dt          dt          dt          t
          j                 ffd | j         d         d          S )NOutlinesentrylevelrU   c              3     K   t          |           } d| v rrd| v sd| v rjt          t          | d                             }|                     d          }|                     d          }|                     d          }|||||fV  d| v rd| v r | d         |dz             E d {V  d| v r | d         |          E d {V  d S d S )	NTitleADestSEFirstLastr   Next)r!   r,   r$   r   )r  r  titledestactionsesearchs         r9   r  z(PDFDocument.get_outlines.<locals>.searchk  s     u%%E%SE\\Vu__#IeGn$=$=>>yy((3YYt__eT626666%FeOO!6%.%!)<<<<<<<<<!6%-77777777777 r8   r   )r  rA   objectri   r   r  OutlineType)r[   r  s    @r9   get_outlineszPDFDocument.get_outlinesg  sl    T\))	8& 	8 	8+:Q1R 	8 	8 	8 	8 	8 	8 vdl:.222r8   c                     | j         J 	 t          | j         d                   }n!# t          t          f$ r}t          |d}~ww xY w|j        S )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.
        N
PageLabels)r  r  r   r   rC   labels)r[   page_labelsr   s      r9   get_page_labelszPDFDocument.get_page_labelsz  sd     |'''	+$T\,%?@@KKh' 	+ 	+ 	+!s*	+ !!s   & A?Acatr  c                 &   	 t          | j        d                   }n+# t          t          f$ r}t	          f          |d }~ww xY wt          |                   }dt
          t          t          f         dt          ffd |          S )NNamesdrU   c           	         d| v r&t          | d                   \  }}|k     s|k     rd S d| v rrt          | d                   }t          t          t          t          t
          t          z  t          f                  t          d|                              }|         S d| v r6t          | d                   D ] } 	t          |                    }|r|c S !t          f          )NLimitsr  ry   Kids)r#   rg   r   r   rj   rh   r  r   r+   r!   r   )
r  r  k2r   namesr  r   r  r  lookups
          r9   r  z'PDFDocument.lookup_name.<locals>.lookup  s    1}}%ak22R88rCxx4!||!!G*--%eS(8"9:HQ<M<MNN  Sz!{{#AfI.. ! !Az!}}--A ! !sCj)))r8   )r!   r  r   r   r   rg   rh   r   )r[   r  r  r  r   d0r  s    ``   @r9   lookup_namezPDFDocument.lookup_name  s    	3t|G455EEh' 	3 	3 	3sCj))s2	3 c
##	*d38n 	* 	* 	* 	* 	* 	* 	* 	* 	*$ vbzzs     AAArS  c                     	 |                      d|          }n_# t          $ rR d| j        vrt          |          d t	          | j        d                   }||vrt          |          d ||         }Y nw xY w|S )NDests)r  r   r  rE   r!   )r[   rS  r   r  s       r9   get_destzPDFDocument.get_dest  s    
	""7D11CC 	 	 	dl**,T22<DL122B2~~,T22<T(CCC	 
s    AA54A5c                    d}|                                 D ]}|                                }t                              d|           |dk    rlt                              d|           |                                st          d|          t          |          }|dk    st          d|           |c S |r|}t          d          )	z0Internal function used to locate the first XRef.r8   zfind_xref: %rs	   startxrefzxref found: pos=%rzInvalid xref position: r   z Invalid negative xref position: Unexpected EOF)revreadlinesr}   r   r   isdigitr2   ri   )r[   rd   prevr   r   s        r9   r  zPDFDocument.find_xref  s     '')) 	 	D::<<DIIot,,,|##		.555||~~ M()K4)K)KLLLD		zz()SE)S)STTT -...r8   r   r  c                    |                     |           |                                 	 |                                \  }}n"# t          $ r}t	          d          |d}~ww xY wt
                              d||           t          |t                    rM|                     |           |                                 t                      }|
                    |           n@||j        u r|                                 t                      }|
                    |           |                    |           |                                }t
                              d|           d|v r,t!          |d                   }|                     |||           d|v r.t!          |d                   }|                     |||           dS dS )z$Reads XRefs from the given location.r  Nz"read_xref_from: start=%d, token=%rr   XRefStmPrev)r   resetr   r'   r2   r   r   r   ri   r   rf   KEYWORD_XREFr|   rl   r   r\   r"   r  )	r[   rd   r   r  r   tokenr   r  ro   s	            r9   r  zPDFDocument.read_xref_from  s    	E	<!++--LS%% 	< 	< 	< !122;	<		6uEEEeS!! 
	KKLLNNN -DIIf+++!!!99DIIfT""$$		-)))GI.//CU333WGFO,,CU33333 s   A 
A"AA")r   TTr?  )'r4   r5   r6   r>   r   r*  rj  r  r   rg   ri   typer@  r   rh   r	  rp   r(   r  r  r   r  r  rj   listr  r  r  r   r  r   r  r  r  r  r  r  rT   r  r7   r8   r9   r  r    s        
 
 &%''	X XxS$7Q2R-R(ST    57 5757 57 	57
 57 
57 57 57 57n #f++K& &S &$ & & & &"Y s 3 6    9 tF|S7H1I    ( S V    8&C &F & & & &P S#sC/0K3h{3 3 3 3 3&"# " " " ""s u     8S5[ S    /	 /c / / / /6"4"4 "4 K 	"4
 
"4 "4 "4 "4 "4 "4r8   r  c                   ^    e Zd ZdZedee         fd            Zede	de
defd            ZdS )r  zWPageLabels from the document catalog.

    See Section 8.3.1 in the PDF Reference.
    rU   c           	   #     K   | j         }t          |          dk    s|d         d         dk    r3t          j        rt	          d          |                    ddi f           t          |d          D ]\  }\  }}t          |          }|                    d          }t          t          |                    dd                              }t          |                    dd                    }|t          |          k    rt          j        |          }	n#||         \  }
}|
|z
  }t          |||z             }	|	D ]}|                     ||          }||z   V   d S )Nr   z"PageLabels is missing page index 0r   Sr   r8   St)valuesr   r   r   r   insert	enumerater!   r   r,   r$   r"   	itertoolscountr   _format_page_label)r[   r   nextr   label_dict_unchecked
label_dictstyleprefixfirst_valuer  endr   range_lengthvaluelabels                  r9   r  zPageLabels.labels  sz      v;;!vay|q00 *$%IJJJ a!R)))3<VQ3G3G 	% 	%/D/5.#$899JNN3''E :>>#s+C+C!D!DEEF#JNN4$;$;<<Ks6{{"" )2(D(DQ"U{{K,,FGG % %//u==un$$$$%	% 	%r8   r  r  c                    |d}n|t          d          u rt          |           }n|t          d          u r"t          |                                           }n|t          d          u rt          |           }nq|t          d          u r"t	          |                                           }n>|t          d          u rt	          |           }nt
                              d|           d}|S )	z+Format page label value in a specific styleNr   Dr   r   r  azUnknown page label style: %r)r)   rh   r.   upperr-   r   r   )r  r  r  s      r9   r  zPageLabels._format_page_label  s     =EEc#hhJJEEc#hh$U++1133EEc#hh$U++EEc#hh$U++1133EEc#hh$U++EEKK6>>>Er8   N)r4   r5   r6   r>   propertyr   rh   r  r  ri   r   r  r7   r8   r9   r  r    s~         
 % % % % X%< # c c    \  r8   r  )\r	  loggingr   r(  collections.abcr   r   r   r   r   hashlibr   r	   r
   r   typingr   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.utilsr+   r,   r-   r.   r/   r0   	getLoggerr4   r   r2   SyntaxWarningr<   rA   rC   rE   rG   rI   UserWarningrK   rM   rO   r   r   r  rT   rl   r   r   r   r*  rj  r  r  r7   r8   r9   <module>r.     s        				  L L L L L L L L L L L L L L / / / / / / / / / / / /          9 8 8 8 8 8 L L L L L L L L L L       $ $ $ $ $ $ % % % % % % / / / / / /            J I I I I I I I I I
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ( ' ' ' ' ' 4 4 4 4 4 4 4 4 4 4                g!!	 	 	 	 	^ 	 	 	    M   	 	 	 	 	L 	 	 		 	 	 	 	l 	 	 		 	 	 	 	\ 	 	 		 	 	 	 	 	 	 		 	 	 	 	- 	 	 	    ;          	 	 	 	 	"4 	 	 	
 Xs6{{#i.." " " " " " " ""L# L# L# L# L#k L# L# L#^0= 0= 0= 0= 0=g 0= 0= 0=fK% K% K% K% K%K K% K% K%\I* I* I* I* I* I* I* I*XF$ F$ F$ F$ F$#= F$ F$ F$Rz$ z$ z$ z$ z$#? z$ z$ z$zU4 U4 U4 U4 U4 U4 U4 U4p
7 7 7 7 7 7 7 7 7 7r8   