
    Ng                        d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ ddlmZ ddlm Z  dd	l!m"Z" dd
l#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>  ej?        e@          ZA G d de$          ZB G d deC          ZD G d de)          ZE G d de)          ZF G d de)          ZG G d de)          ZH G d deH          ZI G d deJ          ZK G d deJ          ZL G d  d!eH          ZM G d" d#eM          ZN e7d$          ZO e7d%          ZP e7d&          ZQ G d' d(          ZR G d) d*eR          ZS G d+ d,eS          ZT G d- d.eR          ZU G d/ d0          ZV G d1 d2eV          ZW G d3 d4eW          ZX G d5 d6          ZY G d7 d8e"          ZZdS )9    N)sha256md5sha384sha512)AnyCallableDictIterableIteratorKeysViewListOptionalSequenceTupleTypeUnioncast)default_backend)Cipher
algorithmsmodes   )settings)Arcfour)
NumberTree)PDFSyntaxError	PDFParserPDFStreamParser)DecipherCallablePDFExceptionPDFTypeError	PDFStreamPDFObjectNotFounddecipher_all	int_value	str_value
list_value
uint_value
dict_valuestream_value)PSEOFliteral_nameLITKWD)choplistdecode_textnunpackformat_int_romanformat_int_alphac                       e Zd ZdS )PDFNoValidXRefN__name__
__module____qualname__     P/var/www/html/ai-engine/env/lib/python3.11/site-packages/pdfminer/pdfdocument.pyr5   r5   1           Dr;   r5   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r7   r8   r9   __doc__r:   r;   r<   r?   r?   5            
 	Dr;   r?   c                       e Zd ZdS )PDFNoOutlinesNr6   r:   r;   r<   rD   rD   >   r=   r;   rD   c                       e Zd ZdS )PDFNoPageLabelsNr6   r:   r;   r<   rF   rF   B   r=   r;   rF   c                       e Zd ZdS )PDFDestinationNotFoundNr6   r:   r;   r<   rH   rH   F   r=   r;   rH   c                       e Zd ZdS )PDFEncryptionErrorNr6   r:   r;   r<   rJ   rJ   J   r=   r;   rJ   c                       e Zd ZdS )PDFPasswordIncorrectNr6   r:   r;   r<   rL   rL   N   r=   r;   rL   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@   r:   r;   r<   rN   rN   R   rB   r;   rN   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@   r:   r;   r<   rP   rP   [   rB   r;   rP   c                       e Zd ZdS )PDFTextExtractionNotAllowedNr6   r:   r;   r<   rR   rR   d   r=   r;   rR   c                   (     e Zd Zdeddf fdZ xZS ) PDFTextExtractionNotAllowedErrorargsreturnNc                 b    ddl m}  |dt                      t                      j        |  d S )Nr   )warnzhPDFTextExtractionNotAllowedError will be removed in the future. Use PDFTextExtractionNotAllowed instead.)warningsrX   DeprecationWarningsuper__init__)selfrU   rX   	__class__s      r<   r\   z)PDFTextExtractionNotAllowedError.__init__i   sM    !!!!!!7	
 	
 	

 	$r;   )r7   r8   r9   objectr\   __classcell__r^   s   @r<   rT   rT   h   sK         f                      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 )	PDFBaseXRefrV   c                     t           NNotImplementedErrorr]   s    r<   get_trailerzPDFBaseXRef.get_trailer{       !!r;   c                     g S rh   r:   rk   s    r<   
get_objidszPDFBaseXRef.get_objids~   s    	r;   objidc                      t          |          rh   )KeyErrorr]   rp   s     r<   get_poszPDFBaseXRef.get_pos   s    uoor;   parserNc                     t           rh   ri   )r]   ru   s     r<   loadzPDFBaseXRef.load   rm   r;   )r7   r8   r9   r	   strr   rl   r
   intro   r   r   rt   r   rw   r:   r;   r<   rf   rf   z   s        "T#s(^ " " " "HSM    S U8C=#s+B%C    "9 " " " " " " "r;   rf   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 )PDFXRefrV   Nc                 "    i | _         i | _        d S rh   )offsetstrailerrk   s    r<   r\   zPDFXRef.__init__   s    BD')r;   c                 :    d| j                                         z  S )Nz<PDFXRef: offsets=%r>r}   keysrk   s    r<   __repr__zPDFXRef.__repr__   s    &$,*;*;*=*=>>r;   ru   c                 ^   	 	 |                                 \  }}|                                }|s0n# t          $ r t          d          w xY w|                    d          r|                    |           n}|                    d          }t          |          dk    r%d                    ||          }t          |          	 t          t          |          \  }}n3# t          $ r& d                    ||          }t          |          w xY wt          |||z             D ]}	 |                                 \  }	}|                                }n# t          $ r t          d          w xY w|                    d          }t          |          dk    r%d	                    ||          }t          |          |\  }
}}|d
k    rd t          |
          t          |          f| j        |<   ΐt                              d| j                   |                     |           d S )NTz Unexpected EOF - file corrupted?   trailer       z"Trailer not found: {!r}: line={!r}zInvalid line: {!r}: line={!r}   z$Invalid XRef format: {!r}, line={!r}   nzxref objects: %r)nextlinestripr+   r5   
startswithseeksplitlenformatmapry   
ValueErrorranger}   logdebugload_trailer)r]   ru   poslinef	error_msgstartnobjsrp   _pos_bgenno_buse_bs                r<   rw   zPDFXRef.load   se   #	GI$oo//dzz||  I I I$%GHHHIz** C   

4  A1vv{{@GGPTUU	$Y///0!$S! 0 0 0;BB64PP	$Y///0 ueem44 G GM & 1 1IQ::<<DD M M M()KLLLMJJt$$q66Q;; F M M! !I )333*+'D=='+SZZW&FU##G#	GH 			$dl333&!!!!!s!   -2 A	C" "0D++EE1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 )Nr   r   zUnexpected EOF - file corruptedr   z
trailer=%r)	nexttokenr.   rx   
nextobjectr+   popr5   r~   updater)   r   r   )r]   ru   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 rh   r~   rk   s    r<   rl   zPDFXRef.get_trailer   
    |r;   c                 4    | j                                         S rh   r   rk   s    r<   ro   zPDFXRef.get_objids   s    |  """r;   rp   c                 <    	 | j         |         S # t          $ r  w xY wrh   )r}   rr   rs   s     r<   rt   zPDFXRef.get_pos   s2    	<&& 	 	 		s    rV   N)r7   r8   r9   r\   rx   r   r   rw   r   r	   r   rl   r   ry   ro   r   r   rt   r:   r;   r<   r{   r{      s        * * * *?# ? ? ? ?&"9 &" &" &" &" &"P.9 . . . . .T#s(^    #HSM # # # #S U8C=#s+B%C      r;   r{   c                   J    e Zd ZdefdZ ej        d          ZdeddfdZ	dS )PDFXRefFallbackrV   c                 :    d| j                                         z  S )Nz<PDFXRefFallback: offsets=%r>r   rk   s    r<   r   zPDFXRefFallback.__repr__   s    .$,2C2C2E2EFFr;   z^(\d+)\s+(\d+)\s+obj\bru   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   r   trailer: %rzlatin-1r   NN is not defined: %rr   )r   r   r+   r   r   r   r   r~   decode
PDFOBJ_CUEmatchgroupsry   r}   r   
isinstancer"   getLITERAL_OBJSTMr*   rr   r   STRICTr   r   get_dataappendr   minr   r   )r]   ru   r   
line_bytesr   mobjid_sgenno_srp   gennor   objstreamnparser1objsindexobjid1s                     r<   rw   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)
r7   r8   r9   rx   r   recompiler   r   rw   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 )PDFXRefStreamrV   Nc                 Z    d | _         d | _        d | _        d | _        d | _        g | _        d S rh   )dataentlenfl1fl2fl3rangesrk   s    r<   r\   zPDFXRefStream.__init__	  s0    %)	%)"&"&"&-/r;   c                     d| j         z  S )Nz<PDFXRefStream: ranges=%r>)r   rk   s    r<   r   zPDFXRefStream.__repr__  s    +t{;;r;   ru   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_XREFr5   r   r   r   extendr   r   r   ry   r/   r   r   r   r   r   r   attrsr~   r   r   joinr   repr)	r]   ru   r   rp   r   r   r   sizeindex_arrays	            r<   rw   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 rh   r   rk   s    r<   rl   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   r1   r   )r]   r   r   ioffsetentf1s          r<   ro   zPDFXRefStream.get_objids1  s      "k 	$ 	$NUE5\\ $ ${...y,,,qi$+)= =>S48_a0077bAgg!)OOO$ 	r;   rp   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   rr   r   r   r   r   r   r1   )
r]   rp   r   r   r   r   r   r   f2f3s
             r<   rt   zPDFXRefStream.get_pos=  sM   "k 	" 	"NUE~~%%%-"7"7&5//!{&&&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; 5//!r;   r   )r7   r8   r9   r\   rx   r   r   rw   r	   r   rl   r   ry   ro   r   r   rt   r:   r;   r<   r   r     s        0 0 0 0<# < < < <9     4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passwordrV   Nc                 X    || _         || _        || _        |                                  d S rh   )r   r   r   init)r]   r   r   r   s       r<   r\   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   rJ   init_key)r]   r   s     r<   r   zPDFStandardSecurityHandler.initi  sP    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lengthrk   s    r<   r   z&PDFStandardSecurityHandler.init_paramsq  s    4:>>#q11224:c?++DJsOR004:c?++4:c?++
x < <==r;   c                 `    |                      | j                  | _        | j        t          d S rh   )authenticater   keyrL   rk   s    r<   r   z#PDFStandardSecurityHandler.init_keyz  s,    $$T]338&&r;   c                 0    t          | j        dz            S )N   boolr  rk   s    r<   is_printablez'PDFStandardSecurityHandler.is_printable      DFQJr;   c                 0    t          | j        dz            S )N   r  rk   s    r<   is_modifiablez(PDFStandardSecurityHandler.is_modifiable  r  r;   c                 0    t          | j        dz            S )N   r  rk   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 rh   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 rh   )r0  verify_encryption_key)r]   r   r	  s      r<   r4  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<   r8  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 rh   r  r  s     r<   r  zIPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>  r  r;   )r!  r   r   r   r"  r  r   decryptr  r   r#  r4  )	r]   r   r$  r   r   r	  user_passwordr&  r   s	           @r<   r5  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;   rp   r   r   r   c                 0    |                      |||          S rh   )decrypt_rc4)r]   rp   r   r   r   s        r<   r>  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   r>  )r]   rp   r   r   r	  r$  s         r<   rA  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   rh   )r7   r8   r9   r!  r   r   ry   __annotations__r   r  r	   rx   r   r\   r   r   r   r  r  r  r  r'  r0  r   r  r4  r8  r5  r>  rA  r:   r;   r<   r   r   X  sw        	1  ,2sCx111 NP e_-1#s(^GJ	             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   rV   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)r[   r   r  r)   r   r   cfr,   stmfstrfr  r/  rJ   cfmitemsget_cfmdecrypt_identity)r]   r   r&  r  r   r^   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)rA  decrypt_aes128r]   rU  s     r<   rS  z$PDFStandardSecurityHandlerV4.get_cfm   s+    4<<##W__&&4r;   rp   r   r   r   c                     | j         s.|,|                    d          }|t          |          dk    r|S || j        } | j        |         |||          S )Nr   Metadata)r/  r   r,   rP  rQ  )r]   rp   r   r   r   rU  ts          r<   r>  z$PDFStandardSecurityHandlerV4.decrypt  se     $ 	):		&!!A}aJ!>!><9Dtx~eUD111r;   c                     |S rh   r:   )r]   rp   r   r   s       r<   rT  z-PDFStandardSecurityHandlerV4.decrypt_identity  s    r;   c                 &   | j         J | j         t          j        d|          d d         z   t          j        d|          d d         z   dz   }t          |          }|                                d t          t          |          d                   }|d d         }|dd          }t          t          j	        |          t          j        |          t                                }|                                                    |          S )Nr)  r   r   s   sAlTr  backend)r	  r,  r-  r   r"  r   r   r   r   AESr   CBCr   	decryptorr   )	r]   rp   r   r   r	  r$  initialization_vector
ciphertextciphers	            r<   rY  z+PDFStandardSecurityHandlerV4.decrypt_aes128  s   x###Hk$&&rr*+k$&&rr*+  	 3xxkkmm/c#c((B///0 $SbS	"##Y
N3I+,,#%%
 
 

 !!((444r;   r   )NN)r7   r8   r9   r   r   ry   rD  r   rx   r   r   r  rS  r	   r   r>  rT  rY  r`   ra   s   @r<   r.  r.    s\        +/sCx///     .C HXsC6G6N-O$P     +/"2 22 2 	2
 S#X'2 sm2 
2 2 2 2 c # U u    5C 5 55 5U 5 5 5 5 5 5 5 5r;   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*     rV   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  )r[   r   r  r&   r   oeuer  o_hasho_validation_salt
o_key_saltr  u_hashu_validation_salt
u_key_salt)r]   r^   s    r<   r   z(PDFStandardSecurityHandlerV5.init_params3  s    DJt,--DJt,--fSbSk!%2&+fSbSk!%2&+r;   rU  c                      |dk    r| j         S d S )NAESV3)decrypt_aes256rZ  s     r<   rS  z$PDFStandardSecurityHandlerV5.get_cfm@  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_hashrr  r  rq  rs  r   r   rb  r   rc  r   rd  r   ro  ru  rt  rv  rp  )r]   r   
password_br$  rg  s        r<   r  z)PDFStandardSecurityHandlerV5.authenticateF  sL   --h77
"":t/EtvNN4;&&z4?DFKKDt$$ei
&;&;_EVEV  F ##%%,,TW555"":t/EFF4;&&z4?CCDt$$ei
&;&;_EVEV  F ##%%,,TW555tr;   c                 |    | j         dk    r|sdS ddlm}  ||          }|                    d          d d         S )Nrj  r;   r   )saslprepzutf-8   )r   	_saslprepr  r3  )r]   r   r  s      r<   r{  z0PDFStandardSecurityHandlerV5._normalize_passwordX  sV    6Q;; s++++++x))Hw''--r;   saltvectorc                     | j         dk    r|                     |||          S |                     ||dd         |          S )zD
        Compute password hash depending on revision number
        r*  r   r  )r   _r5_password_r6_password)r]   r   r  r  s       r<   r|  z+PDFStandardSecurityHandlerV5._password_hashb  sG     6Q;;$$XtV<<<  4!9f===r;   c                     t          |          }|                    |           ||                    |           |                                S )z5
        Compute the password for revision 5
        )r   r   r"  )r]   r   r  r  r$  s        r<   r  z)PDFStandardSecurityHandlerV5._r5_passwordl  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 )	z5
        Compute the password for revision 6
        Nr   @   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_passwordx  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 rh   )r   r   rb  r   rc  	encryptorr   finalize)r]   r	  r  r   rg  r  s         r<   r  z-PDFStandardSecurityHandlerV5._aes_cbc_encrypt  sY    
s++UYr]];;$$&&	%%	(:(:(<(<<<r;   rp   r   c                    |d d         }|dd          }| j         J t          t          j        | j                   t	          j        |          t                                }|                                                    |          S )Nr  r`  )	r	  r   r   rb  r   rc  r   rd  r   )r]   rp   r   r   re  rf  rg  s          r<   ry  z+PDFStandardSecurityHandlerV5.decrypt_aes256  s     $SbS	"##Y
x###N48$$I+,,#%%
 
 

 !!((444r;   r   rh   )r7   r8   r9   r   r   rx   r   r   ry   r  rS  r  r{  r|  r  r  staticmethodr  r  ry  r`   ra   s   @r<   ri  ri  /  s             C HXsC6G6N-O$P    S Xe_    $.C .E . . . . GK> >>%*>4<UO>	> > > > GK
 

%*
4<UO
	
 
 
 
 GK %*4<UO	   0 3% 3C 3 3 3 \3=E =u =E =e = = = =
	5C 	5 	55 	5U 	5 	5 	5 	5 	5 	5 	5 	5r;   ri  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   Tru   r   cachingfallbackrV   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 )z1Set the document to use a given PDFParser object.NTEncryptID)r;   r;   InfoRootz(No /Root object! - Is this really a PDF?r   zCatalog not found!)r  xrefsinfocatalog
encryptiondecipher_parser_cached_objs_parsed_objsset_documentr  r  r  	find_xrefread_xref_fromr5   r  r   rw   r   rl   r'   r)   _initialize_passwordr   r   LITERAL_CATALOGr   r   )
r]   ru   r   r  r  r   newxrefxrefr~   id_values
             r<   r\   zPDFDocument.__init__  s7    (*
	')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   rJ   r%   r  r>  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   rp   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)rp   r  _get_objectsr  
IndexErrorr   )r]   r   r   rp   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   ry   rr   r   r   r  r   r   r+   )r]   r   r   ru   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                    | j         J | j                             |           | j                                         \  }}| j                                         \  }}| j                                         \  }}||k    r`g }|| j        ur:| j                                         \  }}|                    |           || j        u:t          |          dk    r|d         }||k    r#t          d                    ||                    |t          d          k    rt          d|z            | j         	                                \  }}|S )Nr   zobjid mismatch: {!r}={!r}r  zInvalid object spec: offset=%r)
r  r   r   KEYWORD_OBJr   r   r   r   r.   r   )	r]   r   rp   r   r   r   r   r   r   s	            r<   _getobj_parsezPDFDocument._getobj_parse0  sB   |'''#l,,..F\++--
E<))++C U??AT---<1133C T--- 1vv{{2U?? !<!C!CFE!R!RSSS#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  rt   rr   r*   getobjr  r  r  r$   r   r"   	set_objidr+   r   r#   r  )r]   rp   r   r   r  strmidr   r   s           r<   r  zPDFDocument.getobjL  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levelrV   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 )	NTitleADestSEFirstLastr   Next)r)   r0   r&   r   )r  r  titledestactionsesearchs         r<   r  z(PDFDocument.get_outlines.<locals>.searchx  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Fr;   r   )r  rD   r_   ry   r   r  OutlineType)r]   r  s    @r<   get_outlineszPDFDocument.get_outlinest  sl    T\))	& 	 	+:Q1R 	 	 	 	 	 	 vdl:.222r;   c                     | j         J 	 t          | j         d                   }n# t          t          f$ r t          w xY w|j        S )z
        Generate 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!   rr   rF   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drV   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   rx   r  r   r/   r)   rr   )
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 ! !C:&&&r;   )r)   r  r!   rr   r	   rx   r   )r]   r  r	  r  d0r  s    ``  @r<   lookup_namezPDFDocument.lookup_name  s    	't|G455EEh' 	' 	' 	'C:&&&	' c
##	'd38n 	' 	' 	' 	' 	' 	' 	' 	' 	'$ vbzzs	     #ArU  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  rr   r  rH   r)   )r]   rU  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    r n|r|}>t	          d          t                              d|           |J t          |          S )z0Internal function used to locate the first XRef.Nzfind_xref: %rs	   startxrefUnexpected EOFzxref found: pos=%r)revreadlinesr   r   r   r5   ry   )r]   ru   prevr   s       r<   r  zPDFDocument.find_xref  s     '')) 	3 	3D::<<DIIot,,,|##  !1222		&---4yy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 )z$Reads XRefs from the given location.r  z"read_xref_from: start=%d, token=%rr   XRefStmPrevN)r   resetr   r+   r5   r   r   r   ry   r   rw   KEYWORD_XREFr   r{   r   rl   r%   r  )r]   ru   r   r  r   tokenr  r~   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s   A A)r   TTrC  )'r7   r8   r9   rA   r   r.  ri  r  r	   ry   r   rD  r   rx   r  r\   r.   r  r  r"   r_   r  r   r   r  r  r  r   r  r   r  r  r   r  r  r  r  rf   r  r:   r;   r<   r  r    s        
 
 &%''	N NtC.H)I$IJ    : :: : 	:
 : 
: : : :x #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    $  (+ 484E 	           r;   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.
    rV   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   r0   r&   r%   	itertoolscountr   _format_page_label)r]   r   nextr   label_dict_unchecked
label_dictstyleprefixfirst_valuer  endr   range_lengthvaluelabels                  r<   r  zPageLabels.labels  sz      v;;!vay|q00 *$%IJJJ a!R)))5>vq5I5I 	% 	%1T0E/#$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-   rx   r2   upperr3   r   warning)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)r7   r8   r9   rA   propertyr   rx   r  r  ry   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   r   r   arcfourr   data_structuresr   	pdfparserr   r   r   pdftypesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   psparserr+   r,   r-   r.   utilsr/   r0   r1   r2   r3   	getLoggerr7   r   r5   SyntaxWarningr?   rD   rF   rH   rJ   rL   UserWarningrN   rP   rR   rT   r   r   r  rf   r{   r   r   r   r.  ri  r  r  r:   r;   r<   <module>r%     s        				  / / / / / / / / / / / /                               9 8 8 8 8 8 L L L L L L L L L L             ' ' ' ' ' ' A A A A A A A A A A                            4 3 3 3 3 3 3 3 3 3 3 3 U U U U U U U U U U U U U Ug!!	 	 	 	 	^ 	 	 		 	 	 	 	M 	 	 		 	 	 	 	L 	 	 		 	 	 	 	l 	 	 		 	 	 	 	\ 	 	 		 	 	 	 	 	 	 		 	 	 	 	- 	 	 		 	 	 	 	; 	 	 		 	 	 	 	 	 	 		 	 	 	 	"4 	 	 		  	  	  	  	 'B 	  	  	  Xs6{{#i.." " " " " " " ""G G G G Gk G G GT0= 0= 0= 0= 0=g 0= 0= 0=fM" M" M" M" M"K M" M" M"`J* J* J* J* J* J* J* J*ZG5 G5 G5 G5 G5#= G5 G5 G5Tt5 t5 t5 t5 t5#? t5 t5 t5nR R R R R R R Rj
7 7 7 7 7 7 7 7 7 7r;   