
    .iْ                        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jE        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_dS )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dS )PDFNoValidXRefN__name__
__module____qualname__     P/var/www/html/analyses/venv/lib/python3.11/site-packages/pdfminer/pdfdocument.pyr7   r7   =           Dr=   r7   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r9   r:   r;   __doc__r<   r=   r>   rA   rA   A              r=   rA   c                       e Zd ZdS )PDFNoOutlinesNr8   r<   r=   r>   rF   rF   H   r?   r=   rF   c                       e Zd ZdS )PDFNoPageLabelsNr8   r<   r=   r>   rH   rH   L   r?   r=   rH   c                       e Zd ZdS )PDFDestinationNotFoundNr8   r<   r=   r>   rJ   rJ   P   r?   r=   rJ   c                       e Zd ZdS )PDFEncryptionErrorNr8   r<   r=   r>   rL   rL   T   r?   r=   rL   c                       e Zd ZdS )PDFPasswordIncorrectNr8   r<   r=   r>   rN   rN   X   r?   r=   rN   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.
    NrB   r<   r=   r>   rP   rP   \   rD   r=   rP   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.
    NrB   r<   r=   r>   rR   rR   c   rD   r=   rR   c                       e Zd ZdS )PDFTextExtractionNotAllowedNr8   r<   r=   r>   rT   rT   j   r?   r=   rT   ObjStmXRefCatalogc                       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dS )	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dS )PDFXRefrZ   Nc                 "    i | _         i | _        d S r\   )offsetstrailerr_   s    r>   __init__zPDFXRef.__init__   s    BD')r=   c                 :    d| j                                         z  S )Nz<PDFXRef: offsets=%r>rq   keysr_   s    r>   __repr__zPDFXRef.__repr__   s    &$,*;*;*=*=>>r=   ri   c           
      d   	 	 |                                 \  }}|                                }|s0n# t          $ r t          d          w xY w|                    d          r|                    |           n|                    d          }t          |          dk    rd|d|}t          |          	 t          t          |          \  }}n%# t          $ r d|d|}t          |          w xY wt          |||z             D ]}	 |                                 \  }	}|                                }n# t          $ r t          d          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,   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||  I I I$%GHHHIz** C   

4  A1vv{{K&KK4KK	$Y///0!$S! 0 0 0FVFFdFF	$Y///0 ueem44  M & 1 1IQ::<<DD M M M()KLLLM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&!!!!!s!   -2 A;C "C6+D;;Ec                    	 |                                 \  }}|t          d          u sJ t          |                      |                                \  }}nA# t          $ r4 |                    d          }|st          d          |d         \  }}Y nw xY w| j                            t          |                     t                              d| j                   d S )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//)))3s88)))((**HQ 	 	 	

1A H$%FGGGtHQ		
 	JsOO,,,		,-----s   AA ;BBc                     | j         S r\   rr   r_   s    r>   ra   zPDFXRef.get_trailer   
    |r=   c                 4    | 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                   J    e Zd ZdefdZ ej        d          ZdeddfdZ	dS )PDFXRefFallbackrZ   c                 :    d| j                                         z  S )Nz<PDFXRefFallback: offsets=%r>ru   r_   s    r>   rw   zPDFXRefFallback.__repr__   s    .$,2C2C2E2EFFr=   z^(\d+)\s+(\d+)\s+obj\bri   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         }n0# t(          $ r# t*          j        rt/          d|z            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        |<   h)
Nr   r   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$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    N,-Cf-LMMM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# #
H0/H0)
r9   r:   r;   rl   rw   recompiler   r    rk   r<   r=   r>   r   r      sj        G# G G G G 566J*=9 *= *= *= *= *= *= *=r=   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e         eef         fd
ZdS )PDFXRefStreamrZ   Nc                 Z    d | _         d | _        d | _        d | _        d | _        g | _        d S r\   )dataentlenfl1fl2fl3rangesr_   s    r>   rs   zPDFXRefStream.__init__  s0    %)	%)"&"&"&-/r=   c                     d| j         z  S )Nz<PDFXRefStream: ranges=%r>)r   r_   s    r>   rw   zPDFXRefStream.__repr__  s    +t{;;r=   ri   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   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&),, 	=

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#(<AUAUAUOO%%	h)DH4|		4IIc$,,--HHH	
 	
 	
 	
 	
r=   c                     | j         S r\   r   r_   s    r>   ra   zPDFXRefStream.get_trailer,  r   r=   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   r{   )r   r   r   r   r4   r   )r`   r   r   ioffsetentf1s          r>   rd   zPDFXRefStream.get_objids/  s       K 	$ 	$LE55\\ $ ${...y,,,qi$+)= =>S48_a0077bAgg!)OOO$	$ 	$r=   re   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   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:  sQ    K 	% 	%LE5~~%%%-"7"7&e$$${&&&y$$$x#(<AUAUAUu$i$+!556S48_a((SDHtx$77899SDH,../0077"b>!1WW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     s        0 0 0 0<# < < < <
9 
 
 
 
 
2T#s(^    	$HSM 	$ 	$ 	$ 	$%S %U8C=#s+B%C % % % % % %r=   r   c                   ~   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d
S )"PDFStandardSecurityHandlers    (N^NuAd NV.. h>/dSiz)r{   r|   .supported_revisions docidparampasswordrZ   Nc                 X    || _         || _        || _        |                                  d S r\   )r   r   r   init)r`   r   r   r   s       r>   rs   z#PDFStandardSecurityHandler.__init__\  s*     

 		r=   c                     |                                   | j        | j        vrd| j        z  }t	          |          |                                  d S )NzUnsupported revision: param=%r)init_paramsrr   r   rL   init_key)r`   r   s     r>   r   zPDFStandardSecurityHandler.initg  sO    611184:EI$Y///r=   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lengthr_   s    r>   r   z&PDFStandardSecurityHandler.init_paramsn  s    4:>>#q11224:c?++DJsOR004:c?++4:c?++
x < <==r=   c                 `    |                      | j                  | _        | j        t          d S r\   )authenticater   keyrN   r_   s    r>   r   z#PDFStandardSecurityHandler.init_keyv  s/    $$T]338&& r=   c                 0    t          | j        dz            S )N   boolr   r_   s    r>   is_printablez'PDFStandardSecurityHandler.is_printable{      DFQJr=   c                 0    t          | j        dz            S )N   r  r_   s    r>   is_modifiablez(PDFStandardSecurityHandler.is_modifiable~  r  r=   c                 0    t          | j        dz            S )N   r  r_   s    r>   is_extractablez)PDFStandardSecurityHandler.is_extractable  s    DFRK   r=   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 )Nr{   r   r      r=   c              3   >   K   | ]}t          |z  f          V  d S r\   bytes.0cr   s     r>   	<genexpr>z7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>  /      @@UAE8__@@@@@@r=   )r   r   encryptPASSWORD_PADDINGr   r   r   digestr   r   iter)r`   r  hashresultkr   s        @r>   	compute_uz$PDFStandardSecurityHandler.compute_u  s    6Q;;3<<''(=>>> t,--DKK
1&&&S\\))$++--88F1b\\ 4 4HH@@@@d3ii@@@@@ ++F33fFMr=   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      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4crc:8}}DFFKdf--...DJqM"""6Q;;4d;;L 1/0006Q;;q A2YY 2 2VBQBZ//11bqbzr=   c                     |                     d          }|                     |          }||                     |          }|S )Nlatin1)encodeauthenticate_user_passwordauthenticate_owner_password)r`   r   password_bytesr  s       r>   r  z'PDFStandardSecurityHandler.authenticate  sC    !22--n==;22>BBC
r=   c                 ^    |                      |          }|                     |          r|S d S r\   )r)  verify_encryption_key)r`   r   r  s      r>   r-  z5PDFStandardSecurityHandler.authenticate_user_password  s5    ))(33%%c** 	J4r=   c                     |                      |          }| 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  sG    NN36Q;;;"v$$r=   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   r|   r$  r#  r
  r{      r=   c              3   >   K   | ]}t          |z  f          V  d S 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  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..}===r=   re   r   r   r   c                 0    |                      |||          S r\   )decrypt_rc4)r`   re   r   r   r   s        r>   r7  z"PDFStandardSecurityHandler.decrypt  s     ud333r=   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"  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    x###hT511"1"55D%8P8PQSRSQS8TT3xxkkmm/c#c((B///0s||##D)))r=   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  s{        	1  ,2sCx111 		 		 CH~	 		
 
	 	 	 	   > > > >' ' ' '
 d         t        ! ! ! ! !U u    u     &S Xe_    5 Xe_    % %4 % % % %>E >huo > > > >2 +/4 44 4 	4
 S#X'4 
4 4 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   Nc                 (   t                                                       d| _        t          | j                            d                    | _        t          | j        d                   | _        t          | j        d                   | _	        t          | j                            dd                    | _        | j        | j	        k    rd| j        z  }t          |          i | _        | j                                        D ]R\  }}|                     t          |d                             }|d	| j        z  }t          |          || j        |<   S| j        | j        d
<   | j	        | j        vrd| j        z  }t          |          d S )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  s`   TZ^^D1122 F!344	 F!344	 $TZ^^4Et%L%L M M9	!!<tzII$Y///GMMOO 	 	DAq\!E(3344AyCdjP	(333DHQKK#49DH$$:TZGI$Y/// %$r=   namec                 :    |dk    r| j         S |dk    r| j        S d S )NV2AESV2)r:  decrypt_aes128r`   rP  s     r>   rM  z$PDFStandardSecurityHandlerV4.get_cfm  s+    4<<##W__&&4r=   re   r   r   r   c                     | j         s.|,|                    d          }|t          |          dk    r|S || j        } | j        |         |||          S )Nr   Metadata)r(  r   r/   rJ  rK  )r`   re   r   r   r   rP  ts          r>   r7  z$PDFStandardSecurityHandlerV4.decrypt  se     $ 	):		&!!A}aJ!>!><9Dtx~eUD111r=   c                     |S r\   r<   )r`   re   r   r   s       r>   rN  z-PDFStandardSecurityHandlerV4.decrypt_identity  s    r=   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"  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>   rT  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	###r=   r   )NN)r9   r:   r;   r   r   rm   r=  r   rl   r   r   r  rM  r	   r   r7  rN  rT  __classcell__rO  s   @r>   r'  r'    s\        +/sCx///0 0 0 0 0 0,C HXsC6G6N-O$P     +/"2 22 2 	2
 S#X'2 sm2 
2 2 2 2 c # U u    $C $ $5 $U $ $ $ $ $ $ $ $r=   r'  c            	       J    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   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   )rG  r   r   r)   r   oeuer   o_hasho_validation_salt
o_key_saltr   u_hashu_validation_salt
u_key_salt)r`   rO  s    r>   r   z(PDFStandardSecurityHandlerV5.init_params,  s    DJt,--DJt,--fSbSk!%2&+fSbSk!%2&+r=   rP  c                      |dk    r| j         S d S )NAESV3)decrypt_aes256rU  s     r>   rM  z$PDFStandardSecurityHandlerV5.get_cfm8  s    7??&&4r=   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_hashrp  r   ro  rq  r   r   r]  r   r^  r   r_  r   rm  rs  rr  rt  rn  )r`   r   
password_br  rb  s        r>   r  z)PDFStandardSecurityHandlerV5.authenticate>  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tr=   c                 |    | j         dk    r|sdS ddlm}  ||          }|                    d          d d         S )Nrh  r=   r   )saslprepzutf-8   )r   pdfminer._saslprepr}  r,  )r`   r   r}  s      r>   ry  z0PDFStandardSecurityHandlerV5._normalize_passwordT  sV    6Q;; s333333x))Hw''--r=   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       r>   rz  z+PDFStandardSecurityHandlerV5._password_hash^  sG     6Q;;$$XtV<<<  4!9f===r=   c                     t          |          }|                    |           ||                    |           |                                S )z#Compute the password for revision 5)r   r   r  )r`   r   r  r  r  s        r>   r  z)PDFStandardSecurityHandlerV5._r5_passwordi  sI     hDKK{{}}r=   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   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!!!'''!!&&)#$$=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r=   input_bytesc                 :    t          d | D                       dz  S )Nc              3       K   | ]	}|d z  V  
dS )r|   Nr<   )r  bs     r>   r  z<PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>  s&      ..Q1q5......r=   r|   )sum)r  s    r>   r  z)PDFStandardSecurityHandlerV5._bytes_mod_3  s&     ..+.....22r=   r  r  r   c                     t          t          j        |          t          j        |                    }|                                }|                    |          |                                z   S r\   )r   r   r]  r   r^  	encryptorr   finalize)r`   r  r  r   rb  r  s         r>   r  z-PDFStandardSecurityHandlerV5._aes_cbc_encrypt  sY    
s++UYr]];;$$&&	%%	(:(:(<(<<<r=   re   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   r^  r   r_  r   r5   )r`   re   r   r   r`  ra  rb  rc  s           r>   rw  z+PDFStandardSecurityHandlerV5.decrypt_aes256  s     $SbS	"##Y
x###N48$$I+,,#%%
 
 

 $$&&--j99	###r=   r   r\   )r9   r:   r;   r   r   rl   r   r   rm   r  rM  r  ry  rz  r  r  staticmethodr  r  rw  rd  re  s   @r>   rg  rg  )  s)        
& 
& 
& 
& 
& 
&C HXsC6G6N-O$P    S Xe_    ,.C .E . . . . #'		> 	>	> 	> 		>
 
	> 	> 	> 	> #'	   	
 
   " #'	   	
 
   2 3% 3C 3 3 3 \3=E =u =E =e = = = =

$C 
$ 
$5 
$U 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$r=   rg  c                      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&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   r{   r  r#  security_handler_registryr   Tri   r   cachingfallbackrZ   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 rMd|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)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__  sD    (*
	')5948;=AC!!$'''GKKKD.1D	+..((CTZ8888 	+ 	+ 	+ +"&)++V$$$
!!'***	+ J 	M 	MD&&((G G##7??)'$-88HH
  *H#+Z	8J-K-K"L))(333  	  GFO!<!<===  )'&/:: !
 !!KLLL<F##?:: ;$%9::: ;:; ;s   71B) )AC<;C<   objc                 0   | j         J | j         \  }}t          |                    d                    dk    rt          d|z            t	          |                    dd                    }| j                            |          }|t          d|z             ||||          }|j        | _        |                                | _        |	                                | _	        |
                                | _
        | j        J d| j        _        d S )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HeiiQ''((044Q77?$%BU%JKKK'%11#0022$2244%4466|''' %r=   r   r   re   c                 $   |j         | j        v r| j        |j                  \  }}n9|                     |          \  }}| j        r|j         J ||f| j        |j         <   |dz  |z   }	 ||         }n # t          $ r t          d|z            w xY w|S )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,,,)&,7IT11))&11IT1| <|///37)!&,/EEM	>q'CC 	> 	> 	> !4u!<===	>
s   'A0 0Bc                    |                     d          t          urt          j        rt	          d|z            	 t          t          |d                   }n0# t          $ r# t          j        rt	          d|z            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: %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3 I$%>%GHHH	S&+&&AA 	 	 	 F$%;f%DEEEAAA	 !!2!233D!!!	!!,,..CC   !  	 	 	D	ays#   A *BB.C/ /
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|z            | 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.  sB   |'''#l,,..F\++--
E<))++C U??AT---<1133C T--- 1vv{{2U?? !HF!H!Hu!H!HIII#f++ !AC!GHHH<**,,C
r=   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  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  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levelrZ   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&   r1   r)   r   )r  r  titledestactionsesearchs         r>   r  z(PDFDocument.get_outlines.<locals>.searchv  s     u%%E%%<<6U??'	%.(A(ABBE 99V,,D"YYs^^F4B %vr::::%FeOO!6%.%!)<<<<<<<<<!6%-77777777777 r=   r   )r  rF   objectrm   r   r  OutlineType)r`   r  s    @r>   get_outlineszPDFDocument.get_outlinesr  sl    T\))	8& 	8 	8+:Q1R 	8 	8 	8 	8 	8 	8 vdl:.222r=   c                     | j         J 	 t          | j         d                   }n# t          t          f$ r t          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   rH   labels)r`   page_labelss     r>   get_page_labelszPDFDocument.get_page_labels  s^     |'''	"$T\,%?@@KKh' 	" 	" 	"!!	" !!s   & ?catr  c                    	 t          | j        d                   }n&# t          t          f$ r t	          f          w xY wt          |                   }dt
          t          t          f         dt          ffd |          S )NNamesdrZ   c           	         d| v r&t          | d                   \  }}|k     s|k     rd S d| v r|t          | d                   }t          t          t          t          t
          t          t          f         t          f                  t          d|                              }|         S d| v r6t          | d                   D ] } 	t          |                    }|r|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2R88rCxx4!||!!G*--%c5j(93(>"?@(1dBSBST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  s    	*t|G455EEh' 	* 	* 	*sCj)))	* c
##	*d38n 	* 	* 	* 	* 	* 	* 	* 	* 	*$ vbzzs	     #ArP  c                     	 |                      d|          }n]# t          $ rP d| j        vrt          |          t	          | j        d                   }||vrt          |          ||         }Y nw xY w|S )NDests)r  r   r  rJ   r&   )r`   rP  r   r  s       r>   get_destzPDFDocument.get_dest  s    
	""7D11CC 	 	 	dl**,T222DL122B2~~,T222T(CCC	 
s    AA32A3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.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55||~~ M()K4)K)KLLLD		zz()SE)S)STTT -...r=   r   r  c                    |                     |           |                                 	 |                                \  }}n# t          $ r t	          d          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  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%% 	3 	3 	3 !1222	3		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)r   TTr<  )'r9   r:   r;   rC   r   r'  rg  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 NtC.H)I$IJ    9; 9;9; 9; 	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 3 3 3("# " " " ""s sEz): s    8U3:. 3    /	 /c / / / /6"4"4 "4 K 	"4
 
"4 "4 "4 "4 "4 "4r=   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.
    rZ   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   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  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$$$$%	% 	%r=   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.   rl   r3   upperr2   r   r   )r  r  r  s      r>   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r=   N)r9   r:   r;   rC   propertyr   rl   r  r  rm   r   r  r<   r=   r>   r  r    s~         
 % % % % X%< # 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'  rg  r  r  r<   r=   r>   <module>r)     sG        				  / / / / / / / / / / / /                               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%\H* H* H* H* H* H* H* H*VF$ F$ F$ F$ F$#= F$ F$ F$Rz$ z$ z$ z$ z$#? z$ z$ z$zY4 Y4 Y4 Y4 Y4 Y4 Y4 Y4x
7 7 7 7 7 7 7 7 7 7r=   