o
    ¾ÙøiÜ’  ã                   @   s   d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZmZmZmZ d dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lm Z  d dl!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ e AeB¡ZCG dd„ de)ƒZDG dd„ deEƒZFG dd„ de"ƒZGG dd„ de"ƒZHG dd„ de"ƒZIG dd„ de"ƒZJG dd„ deJƒZKG dd „ d eLƒZMG d!d"„ d"eLƒZNG d#d$„ d$eJƒZOe8d%ƒZPe8d&ƒZQe8d'ƒZRG d(d)„ d)ƒZSG d*d+„ d+eSƒZTG d,d-„ d-eTƒZUG d.d/„ d/eSƒZVG d0d1„ d1ƒZWG d2d3„ d3eWƒZXG d4d5„ d5eXƒZYG d6d7„ d7ƒZZG d8d9„ d9e ƒZ[dS ):é    N)ÚCallableÚIterableÚIteratorÚKeysViewÚSequence)Úmd5Úsha256Úsha384Úsha512)ÚAnyÚClassVarÚcast)Údefault_backend)ÚCipherÚ
algorithmsÚmodes)Úsettings)ÚArcfour)Úsafe_int)Ú
NumberTree)ÚPDFExceptionÚPDFKeyErrorÚPDFObjectNotFoundÚPDFTypeError)Ú	PDFParserÚPDFStreamParserÚPDFSyntaxError)	ÚDecipherCallableÚ	PDFStreamÚdecipher_allÚ
dict_valueÚ	int_valueÚ
list_valueÚ	str_valueÚstream_valueÚ
uint_value)ÚPSEOF)ÚKWDÚLITÚliteral_name)ÚchoplistÚdecode_textÚformat_int_alphaÚformat_int_romanÚnunpackÚ	unpad_aesc                   @   ó   e Zd ZdS )ÚPDFNoValidXRefN©Ú__name__Ú
__module__Ú__qualname__© r6   r6   úa/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/pdfminer/pdfdocument.pyr1   4   ó    r1   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©r3   r4   r5   Ú__doc__r6   r6   r6   r7   r:   8   ó    r:   c                   @   r0   )ÚPDFNoOutlinesNr2   r6   r6   r6   r7   r>   ?   r8   r>   c                   @   r0   )ÚPDFNoPageLabelsNr2   r6   r6   r6   r7   r?   C   r8   r?   c                   @   r0   )ÚPDFDestinationNotFoundNr2   r6   r6   r6   r7   r@   G   r8   r@   c                   @   r0   )ÚPDFEncryptionErrorNr2   r6   r6   r6   r7   rA   K   r8   rA   c                   @   r0   )ÚPDFPasswordIncorrectNr2   r6   r6   r6   r7   rB   O   r8   rB   c                   @   r9   )ÚPDFEncryptionWarningzyLegacy warning for failed decryption.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr;   r6   r6   r6   r7   rC   S   r=   rC   c                   @   r9   )Ú"PDFTextExtractionNotAllowedWarningzŠLegacy warning for PDF that does not allow extraction.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr;   r6   r6   r6   r7   rD   Z   r=   rD   c                   @   r0   )ÚPDFTextExtractionNotAllowedNr2   r6   r6   r6   r7   rE   a   r8   rE   ÚObjStmÚXRefÚCatalogc                   @   sf   e Zd Zdeeef fdd„Zdee fdd„Z	dede
edB eef fdd	„Zd
eddfdd„ZdS )ÚPDFBaseXRefÚreturnc                 C   ó   t ‚©N©ÚNotImplementedError©Úselfr6   r6   r7   Úget_trailerl   ó   zPDFBaseXRef.get_trailerc                 C   s   g S rL   r6   rO   r6   r6   r7   Ú
get_objidso   rR   zPDFBaseXRef.get_objidsÚobjidNc                 C   s   t |ƒ‚rL   )r   ©rP   rT   r6   r6   r7   Úget_posu   s   zPDFBaseXRef.get_posÚparserc                 C   rK   rL   rM   )rP   rW   r6   r6   r7   Úloadx   rR   zPDFBaseXRef.load)r3   r4   r5   ÚdictÚstrr   rQ   r   ÚintrS   ÚtuplerV   r   rX   r6   r6   r6   r7   rI   k   s
     rI   c                   @   s�   e Zd Zddd„Zdefdd„Zdeddfdd	„Zdeddfd
d„Zde	ee
f fdd„Zdee fdd„ZdedeedB eef fdd„ZdS )ÚPDFXRefrJ   Nc                 C   s   i | _ i | _d S rL   )ÚoffsetsÚtrailerrO   r6   r6   r7   Ú__init__}   s   
zPDFXRef.__init__c                 C   ó   d| j  ¡ ›d�S )Nz<PDFXRef: offsets=ú>©r^   ÚkeysrO   r6   r6   r7   Ú__repr__�   ó   zPDFXRef.__repr__rW   c                 C   sÐ  	 z|  ¡ \}}| ¡ }|sW q W n ty" } ztdƒ|‚d }~ww | d¡r.| |¡ n¬| d¡}t|ƒdkrEd|›d|›�}t|ƒ‚z	tt	|ƒ\}}W n t
yg } zd|›d|›�}t|ƒ|‚d }~ww t||| ƒD ]i}	z|  ¡ \}
}| ¡ }W n tyŽ } ztdƒ|‚d }~ww | d¡}t|ƒd	kr¦d
|›d|›�}t|ƒ‚|\}}}|dkr°qot|ƒ}t|ƒ}|d urÉ|d urÉd ||f| j|	< qot d|	› d|›d|›d�¡ qoq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&   r1   Ú
startswithÚseekÚsplitÚlenÚmapr[   Ú
ValueErrorÚranger   r^   ÚlogÚwarningÚdebugÚload_trailer)rP   rW   ÚposÚlineÚerrÚfÚ	error_msgÚstartÚnobjsrT   Ú_Úpos_bÚgenno_bÚuse_bÚpos_iÚgenno_ir6   r6   r7   rX   „   sh   ÿ
€ÿ



€þ
€ÿ

ÿÿÙ,zPDFXRef.loadc                 C   sŽ   z|  ¡ \}}|tdƒu sJ t|ƒƒ‚| ¡ \}}W n ty5   | d¡}|s-tdƒd ‚|d \}}Y nw | j t	|ƒ¡ t
 d| j¡ d S )Nrg   é   zUnexpected EOF - file corruptedr   z
trailer=%r)Ú	nexttokenr'   rZ   Ú
nextobjectr&   Úpopr1   r_   Úupdater    ru   rw   )rP   rW   r€   ÚkwdÚdicÚxr6   r6   r7   rx   ´   s   

üzPDFXRef.load_trailerc                 C   ó   | j S rL   ©r_   rO   r6   r6   r7   rQ   Á   ó   zPDFXRef.get_trailerc                 C   s
   | j  ¡ S rL   rc   rO   r6   r6   r7   rS   Ä   ó   
zPDFXRef.get_objidsrT   c                 C   s
   | j | S rL   )r^   rU   r6   r6   r7   rV   Ç   r‘   zPDFXRef.get_pos©rJ   N)r3   r4   r5   r`   rZ   re   r   rX   rx   rY   r   rQ   r   r[   rS   r\   rV   r6   r6   r6   r7   r]   |   s    
0$r]   c                   @   s6   e Zd Zdefdd„Ze d¡Zdeddfdd„Z	dS )	ÚPDFXRefFallbackrJ   c                 C   ra   )Nz<PDFXRefFallback: offsets=rb   rc   rO   r6   r6   r7   re   Ì   rf   zPDFXRefFallback.__repr__z^(\d+)\s+(\d+)\s+obj\brW   Nc                 C   sœ  |  d¡ 	 z| ¡ \}}W n
 ty   Y d S w | d¡r1|  |¡ |  |¡ t d| j¡ d S | d¡}| j	 
|¡}|s?q| ¡ \}}t|ƒ}t|ƒ}	d ||	f| j|< |  |¡ | ¡ \}
}t|tƒrÍ| d¡tu rÍt|ƒ}z|d }W n tyŒ   tjrˆtd|›�ƒd ‚d}Y nw t| ¡ ƒ}g }z	 | ¡ \}
}| tt|ƒ¡ q— ty®   Y nw t|t|ƒd	 ƒ}t|ƒD ]}||d	  }||df| j|< q¼q)
Nr   r†   rg   útrailer: %rzlatin-1ÚTypeÚNúN is not defined: ri   )ro   rl   r&   rn   rx   ru   rw   r_   ÚdecodeÚ
PDFOBJ_CUEÚmatchÚgroupsr[   r^   rˆ   Ú
isinstancer   ÚgetÚLITERAL_OBJSTMr$   ÚKeyErrorr   ÚSTRICTr   r   Úget_dataÚappendr   Úminrq   rt   )rP   rW   ry   Ú
line_bytesrz   ÚmÚobjid_sÚgenno_srT   Úgennor€   ÚobjÚstreamÚnÚparser1ÚobjsÚindexÚobjid1r6   r6   r7   rX   Ñ   s\   
ÿ




ýþÿØzPDFXRefFallback.load)
r3   r4   r5   rZ   re   ÚreÚcompiler™   r   rX   r6   r6   r6   r7   r“   Ë   s    
r“   c                   @   s~   e Zd Zddd„Zdefdd„Zdeddfdd	„Zdeee	f fd
d„Z
dee fdd„ZdedeedB eef fdd„ZdS )ÚPDFXRefStreamrJ   Nc                 C   s(   d | _ d | _d | _d | _d | _g | _d S rL   )ÚdataÚentlenÚfl1Úfl2Úfl3ÚrangesrO   r6   r6   r7   r`   ÿ   s   
zPDFXRefStream.__init__c                 C   s   d| j ›d�S )Nz<PDFXRefStream: ranges=rb   )r¸   rO   r6   r6   r7   re     ó   zPDFXRefStream.__repr__rW   c           	      C   s*  |  ¡ \}}|  ¡ \}}|  ¡ \}}| ¡ \}}t|tƒr$| d¡tur(tdƒ‚|d }| dd|f¡}t|ƒd dkr@tdƒ‚| j	 
tttttf  td|ƒƒ¡ |d \| _| _| _| jd urk| jd urk| jd usmJ ‚| ¡ | _| j| j | j | _|j| _t d	d
 tt| j	ƒ¡| j| j| j¡ d S )Nr•   zInvalid PDF stream spec.ÚSizeÚIndexr   ri   zInvalid index numberÚWz&xref stream: objid=%s, fields=%d,%d,%dz, )r‡   rˆ   rœ   r   r�   ÚLITERAL_XREFr1   rq   r   r¸   Úextendr   r   r\   r[   r*   rµ   r¶   r·   r¡   r³   r´   Úattrsr_   ru   rw   Újoinrr   Úrepr)	rP   rW   r€   Ú_objidÚ_gennoÚ_kwdrª   ÚsizeÚindex_arrayr6   r6   r7   rX   
  s.   $"
ûzPDFXRefStream.loadc                 C   rŽ   rL   r�   rO   r6   r6   r7   rQ   #  r�   zPDFXRefStream.get_trailerc                 c   sŒ   � | j D ]?\}}t|ƒD ]6}| jd usJ ‚| jd usJ ‚| j| }| j||| j … }t|d | j… dƒ}|dks=|dkrB|| V  qqd S )Nr†   ri   )r¸   rt   r´   r³   r.   rµ   )rP   r~   r   ÚiÚoffsetÚentÚf1r6   r6   r7   rS   &  s   €

€ùÿzPDFXRefStream.get_objidsrT   c           
      C   s  d}| j D ]\}}||kr||| k r||| 7 } n	||7 }qt|ƒ‚| jd us+J ‚| jd us2J ‚| jd urA| jd urA| jd usCJ ‚| j| }| j||| j … }t|d | j… dƒ}t|| j| j| j … ƒ}t|| j| j d … ƒ}	|dkr~d ||	fS |dkr‡||	dfS t|ƒ‚)Nr   r†   ri   )r¸   r   r´   r³   rµ   r¶   r·   r.   )
rP   rT   r®   r~   r   rÈ   rÉ   rÊ   Úf2Úf3r6   r6   r7   rV   1  s(   
"


zPDFXRefStream.get_posr’   )r3   r4   r5   r`   rZ   re   r   rX   rY   r   rQ   r   r[   rS   r\   rV   r6   r6   r6   r7   r²   þ   s    
$r²   c                   @   sX  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d„Zd/dd„Zd/dd„Zd/dd„Zd	efdd„Zd	efdd„Zd	efdd„Zde	d	e	fdd„Zde	d	e	fdd„Zded	e	d
B fdd„Zde	d	e	d
B fd d!„Zde	d	efd"d#„Zde	d	e	d
B fd$d%„Z	
d0d&ed'ed(e	d)e
eef d
B d	e	f
d*d+„Zd&ed'ed(e	d	e	fd,d-„Zd
S )1ÚPDFStandardSecurityHandlers    (¿N^NuŠAd NVÿú.. ¶Ðh>€/©þdSiz)ri   rj   .Úsupported_revisionsÚ ÚdocidÚparamÚpasswordrJ   Nc                 C   s   || _ || _|| _|  ¡  d S rL   )rÐ   rÑ   rÒ   Úinit)rP   rÐ   rÑ   rÒ   r6   r6   r7   r`   R  s   z#PDFStandardSecurityHandler.__init__c                 C   s4   |   ¡  | j| jvrd| j›�}t|ƒ‚|  ¡  d S )NzUnsupported revision: param=)Úinit_paramsÚrrÎ   rÑ   rA   Úinit_key)rP   r}   r6   r6   r7   rÓ   ]  s
   zPDFStandardSecurityHandler.initc                 C   sn   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ÚlengthrO   r6   r6   r7   rÔ   d  s   z&PDFStandardSecurityHandler.init_paramsc                 C   s    |   | j¡| _| jd u rt‚d S rL   )ÚauthenticaterÒ   ÚkeyrB   rO   r6   r6   r7   rÖ   l  s   
ÿz#PDFStandardSecurityHandler.init_keyc                 C   ó   t | jd@ ƒS )Né   ©Úboolrà   rO   r6   r6   r7   Úis_printableq  r¹   z'PDFStandardSecurityHandler.is_printablec                 C   ræ   )Né   rè   rO   r6   r6   r7   Úis_modifiablet  r¹   z(PDFStandardSecurityHandler.is_modifiablec                 C   ræ   )Né   rè   rO   r6   r6   r7   Úis_extractablew  r¹   z)PDFStandardSecurityHandler.is_extractablerå   c                    sŒ   | j dkrt|ƒ | j¡S t| jƒ}| | jd ¡ t|ƒ | ¡ ¡}tddƒD ]‰ d 	‡ fdd„t
|ƒD ƒ¡}t|ƒ |¡}q(||7 }|S )Nri   r   r†   é   ó    c                 3   ó   � | ]
}t |ˆ A fƒV  qd S rL   ©Úbytes©Ú.0Úc©rÇ   r6   r7   Ú	<genexpr>„  ó   € z7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>)rÕ   r   ÚencryptÚPASSWORD_PADDINGr   rŠ   rÐ   Údigestrt   rÀ   Úiter)rP   rå   ÚhashÚresultÚkr6   r÷   r7   Ú	compute_uz  s   

z$PDFStandardSecurityHandler.compute_uc                 C   s¸   || j  d d… }t|ƒ}| | j¡ | t d| j¡¡ | | jd ¡ | jdkr5t	t
| ƒjs5| d¡ | ¡ }d}| jdkrV| jd }td	ƒD ]}t|d |… ƒ ¡ }qI|d |… S )
NrÚ   ú<Lr   rç   s   ÿÿÿÿé   rj   rë   é2   )rû   r   rŠ   rá   ÚstructÚpackrà   rÐ   rÕ   r   ÚPDFStandardSecurityHandlerV4Úencrypt_metadatarü   rã   rt   )rP   rÒ   rþ   rÿ   r«   r€   r6   r6   r7   Úcompute_encryption_key‰  s    

ÿ


z1PDFStandardSecurityHandler.compute_encryption_keyc                 C   s*   |  d¡}|  |¡}|d u r|  |¡}|S )NÚlatin1)ÚencodeÚauthenticate_user_passwordÚauthenticate_owner_password)rP   rÒ   Úpassword_bytesrå   r6   r6   r7   rä   ž  s
   


z'PDFStandardSecurityHandler.authenticatec                 C   s   |   |¡}|  |¡r|S d S rL   )r	  Úverify_encryption_key)rP   rÒ   rå   r6   r6   r7   r  ¥  s   

z5PDFStandardSecurityHandler.authenticate_user_passwordc                 C   s8   |   |¡}| jdkr|| jkS |d d… | jd d… kS )Nri   rí   )r  rÕ   râ   )rP   rå   râ   r6   r6   r7   r  ¬  s   


z0PDFStandardSecurityHandler.verify_encryption_keyc                    sÎ   || j  d d… }t|ƒ}| jdkrtdƒD ]}t| ¡ ƒ}qd}| jdkr+| jd }| ¡ d |… }| jdkrAt|ƒ | j¡}n!| j}tdddƒD ]‰ d	 	‡ fd
d„t
|ƒD ƒ¡}t|ƒ |¡}qJ|  |¡S )NrÚ   rj   r  r  rë   ri   é   éÿÿÿÿrð   c                 3   rñ   rL   rò   rô   r÷   r6   r7   rø   Ã  rù   zIPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>)rû   r   rÕ   rt   rü   rã   r   Údecryptrá   rÀ   rý   r  )rP   rÒ   rþ   r€   r«   rå   Úuser_passwordr   r6   r÷   r7   r  ³  s    




z6PDFStandardSecurityHandler.authenticate_owner_passwordrT   r¨   r³   r¿   c                 C   s   |   |||¡S rL   )Údecrypt_rc4)rP   rT   r¨   r³   r¿   r6   r6   r7   r  Ç  s   z"PDFStandardSecurityHandler.decryptc                 C   sl   | j d usJ ‚| j t d|¡d d…  t d|¡d d…  }t|ƒ}| ¡ d tt|ƒdƒ… }t|ƒ |¡S )Nr  rj   ri   rí   )	rå   r  r  r   rü   r£   rq   r   r  )rP   rT   r¨   r³   rå   rþ   r6   r6   r7   r  Ð  s
   .z&PDFStandardSecurityHandler.decrypt_rc4©rÏ   r’   rL   )r3   r4   r5   rû   rÎ   r\   r[   Ú__annotations__r   ró   rY   rZ   r   r`   rÓ   rÔ   rÖ   ré   rê   rì   rî   r  r	  rä   r  r  r  r  r  r6   r6   r6   r7   rÍ   L  sN   
 ÿüþ
ýü
û


ûþýüû
ú	rÍ   c                       sÄ   e Zd ZU dZeedf ed< d‡ fdd„Zdede	eee
ge
f dB fd	d
„Z		ddedede
deeef dB dedB de
fdd„Zdedede
de
fdd„Zdedede
de
fdd„Z‡  ZS )r  )rç   .rÎ   rJ   Nc                    sø   t ƒ  ¡  d| _t| j d¡ƒ| _t| jd ƒ| _t| jd ƒ| _	t
| j dd¡ƒ| _| j| j	kr;d| j›�}t|ƒ‚i | _| j ¡ D ] \}}|  t|d ƒ¡}|d u r^d	| j›�}t|ƒ‚|| j|< qC| j| jd
< | j	| jvrzd| j›�}t|ƒ‚d S )Né€   ÚCFÚStmFÚStrFÚEncryptMetadataTz Unsupported crypt filter: param=ÚCFMz#Unknown crypt filter method: param=ÚIdentityzUndefined crypt filter: param=)ÚsuperrÔ   rã   r    rÑ   r�   Úcfr)   ÚstmfÚstrfré   r  rA   ÚcfmÚitemsÚget_cfmÚdecrypt_identity)rP   r}   r   rß   r|   ©Ú	__class__r6   r7   rÔ   Û  s*   
þz(PDFStandardSecurityHandlerV4.init_paramsÚnamec                 C   s    |dkr| j S |dkr| jS d S )NÚV2ÚAESV2)r  Údecrypt_aes128©rP   r(  r6   r6   r7   r$  ñ  s
   z$PDFStandardSecurityHandlerV4.get_cfmrT   r¨   r³   r¿   c                 C   sP   | j s|d ur| d¡}|d urt|ƒdkr|S |d u r| j}| j| |||ƒS )Nr•   ÚMetadata)r  r�   r)   r!  r"  )rP   rT   r¨   r³   r¿   r(  Útr6   r6   r7   r  ù  s   
z$PDFStandardSecurityHandlerV4.decryptc                 C   s   |S rL   r6   )rP   rT   r¨   r³   r6   r6   r7   r%  	  rR   z-PDFStandardSecurityHandlerV4.decrypt_identityc           
      C   s¬   | j d usJ ‚| j t d|¡d d…  t d|¡d d…  d }t|ƒ}| ¡ d tt|ƒdƒ… }|d d… }|dd … }tt 	|¡t
 |¡tƒ d�}| ¡  |¡}	t|	ƒS )Nr  rj   ri   s   sAlTrí   ©Úbackend)rå   r  r  r   rü   r£   rq   r   r   ÚAESr   ÚCBCr   Ú	decryptorrŠ   r/   )
rP   rT   r¨   r³   rå   rþ   Úinitialization_vectorÚ
ciphertextÚcipherÚ	plaintextr6   r6   r7   r+    s(   ÿþýÿýz+PDFStandardSecurityHandlerV4.decrypt_aes128r’   )NN)r3   r4   r5   rÎ   r\   r[   r  rÔ   rZ   r   ró   r$  rY   r   r  r%  r+  Ú__classcell__r6   r6   r&  r7   r  Ø  s*   
 $úþýüûú
ù"r  c                	       s  e Zd ZdZd"‡ fdd„Zdedeeeegef dB fdd„Z	d	ededB fd
d„Z
d	edefdd„Z	d#d	edededB defdd„Z	d#d	edededB defdd„Z	d#d	edededB defdd„Zededefdd„ƒZdedededefdd„Zdedededefd d!„Z‡  ZS )$ÚPDFStandardSecurityHandlerV5)r  é   rJ   Nc                    s”   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_saltrO   r&  r6   r7   rÔ   $  s   
z(PDFStandardSecurityHandlerV5.init_paramsr(  c                 C   s   |dkr| j S d S )NÚAESV3)Údecrypt_aes256r,  r6   r6   r7   r$  0  s   z$PDFStandardSecurityHandlerV5.get_cfmrÒ   c                 C   sº   |   |¡}|  || j| j¡}|| jkr2|  || j| j¡}tt |¡t	 
d¡tƒ d�}| ¡  | j¡S |  || j¡}|| jkr[|  || j¡}tt |¡t	 
d¡tƒ d�}| ¡  | j¡S d S )Ns                   r/  )Ú_normalize_passwordÚ_password_hashrA  râ   r@  rB  r   r   r1  r   r2  r   r3  rŠ   r>  rD  rC  rE  r?  )rP   rÒ   Ú
password_brþ   r6  r6   r6   r7   rä   6  s(   

ý
ýz)PDFStandardSecurityHandlerV5.authenticatec                 C   s8   | j dkr|s	dS ddlm} ||ƒ}| d¡d d… S )Nr:  rð   r   )Úsaslprepzutf-8é   )rÕ   Úpdfminer._saslpreprK  r  )rP   rÒ   rK  r6   r6   r7   rH  L  s   
z0PDFStandardSecurityHandlerV5._normalize_passwordÚsaltÚvectorc                 C   s.   | j dkr|  |||¡S |  ||dd… |¡S )z2Compute password hash depending on revision numberr  r   rë   )rÕ   Ú_r5_passwordÚ_r6_password)rP   rÒ   rN  rO  r6   r6   r7   rI  V  s   
z+PDFStandardSecurityHandlerV5._password_hashc                 C   s,   t |ƒ}| |¡ |dur| |¡ | ¡ S )z#Compute the password for revision 5N)r   rŠ   rü   )rP   rÒ   rN  rO  rþ   r6   r6   r7   rP  a  s
   

z)PDFStandardSecurityHandlerV5._r5_passwordc                 C   sà   t |ƒ}| |¡ |dur| |¡ | ¡ }t ttf}d }}|dk s)||d krj|| |p/d d }	| j|dd… |dd… |	d�}
||  |
dd… ¡ }||
ƒ ¡ }|
t|
ƒd  }|d7 }|dk s)||d ks)|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_3rq   )rP   rÒ   rN  rO  Úinitial_hashr   ÚhashesÚround_noÚlast_byte_valÚk1ÚeÚ	next_hashr6   r6   r7   rQ  n  s    


 ø	z)PDFStandardSecurityHandlerV5._r6_passwordÚinput_bytesc                 C   s   t dd„ | D ƒƒd S )Nc                 s   s   � | ]}|d  V  qdS )rj   Nr6   )rõ   Úbr6   r6   r7   rø   Š  s   € z<PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>rj   )Úsum)r]  r6   r6   r7   rU  ‡  s   z)PDFStandardSecurityHandlerV5._bytes_mod_3rå   rS  r³   c                 C   s0   t t |¡t |¡ƒ}| ¡ }| |¡| ¡  S rL   )r   r   r1  r   r2  Ú	encryptorrŠ   Úfinalize)rP   rå   rS  r³   r6  r`  r6   r6   r7   rT  Œ  s   z-PDFStandardSecurityHandlerV5._aes_cbc_encryptrT   r¨   c                 C   sZ   |d d… }|dd … }| j d usJ ‚tt | j ¡t |¡tƒ d�}| ¡  |¡}t	|ƒS )Nrí   r/  )
rå   r   r   r1  r   r2  r   r3  rŠ   r/   )rP   rT   r¨   r³   r4  r5  r6  r7  r6   r6   r7   rG  ‘  s   
ýz+PDFStandardSecurityHandlerV5.decrypt_aes256r’   rL   )r3   r4   r5   rÎ   rÔ   rZ   r   r[   ró   r$  rä   rH  rI  rP  rQ  ÚstaticmethodrU  rT  rG  r8  r6   r6   r&  r7   r9  !  sP    $üþýü
ûüþýü
ûüþýü
û"r9  c                   @   sp  e Zd ZU dZeeeedœZee	e
ee f  ed< 			d.dededed	ed
df
dd„ZedƒZd/ded
dfdd„Zdede
de
d
efdd„Zded
eee e
f fdd„Zde
de
d
efdd„Zde
d
efdd„Zeeeeeef Zd
ee fdd„Zd
ee fdd „Z d!ed"ee!B d
efd#d$„Z"d%ee!B d
efd&d'„Z#ded
e
fd(d)„Z$ded*e
d+ee% d
dfd,d-„Z&dS )0Ú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†   ri   rç   r  Úsecurity_handler_registryrÏ   TrW   rÒ   ÚcachingÚfallbackrJ   Nc           
      C   sl  || _ g | _g | _i | _d| _d| _d| _i | _i | _|| _| j 	| ¡ d | _
 | _| _z|  |¡}|  ||| j¡ W n tyX   |rVd|_tƒ }| |¡ | j |¡ Y nw | jD ]B}| ¡ }|seq\d|v rƒd|v rst|d ƒnd}	|	t|d ƒf| _|  |¡ d|v r‘| j t|d ƒ¡ d|v ržt|d ƒ| _ nq\tdƒ‚| j d	¡tur²tjr´t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!)re  ÚxrefsÚinfoÚcatalogÚ
encryptionÚdecipherÚ_parserÚ_cached_objsÚ_parsed_objsÚset_documentrê   rì   rî   Ú	find_xrefÚread_xref_fromr1   rf  r“   rX   r¢   rQ   r"   r    Ú_initialize_passwordr   r�   ÚLITERAL_CATALOGr   r    )
rP   rW   rÒ   re  rf  ry   ÚnewxrefÚxrefr_   Úid_valuer6   r6   r7   r`   ²  sR   

€û

ýÿzPDFDocument.__init__ó   objc                 C   s¶   | j d usJ ‚| j \}}t| d¡ƒdkrtd|›�ƒ‚t| dd¡ƒ}| j |¡}|d u r5td|›�ƒ‚||||ƒ}|j| _| ¡ | _| 	¡ | _	| 
¡ | _
| jd usUJ ‚d| j_d S )NÚFilterÚStandardzUnknown filter: param=r×   r   zUnknown algorithm: param=F)rn  r)   r�   rA   r!   rd  r  ro  rê   rì   rî   rp  rf  )rP   rÒ   rÐ   rÑ   rß   ÚfactoryÚhandlerr6   r6   r7   rv  í  s   



z PDFDocument._initialize_passwordrª   r®   rT   c           	   
   C   s”   |j | jv r| j|j  \}}n|  |¡\}}| jr(|j d us J ‚||f| j|j < |d | }z|| }W |S  tyI } ztd|›�ƒ|‚d }~ww )Nri   zindex too big: )rT   rr  Ú_get_objectsre  Ú
IndexErrorr   )	rP   rª   r®   rT   r­   r«   rÇ   r©   r{   r6   r6   r7   Ú_getobj_objstmþ  s   
þ€ÿzPDFDocument._getobj_objstmc                 C   s°   |  d¡turtjrtd|›�ƒ‚z	tt|d ƒ}W n ty0   tjr,td|›�ƒd ‚d}Y nw t| 	¡ ƒ}| 
| ¡ g }z	 | ¡ \}}| |¡ q@ tyW   Y ||fS w )Nr•   zNot a stream object: r–   r—   r   )r�   rž   r   r    r   r   r[   rŸ   r   r¡   rs  rˆ   r¢   r&   )rP   rª   r«   rW   r­   r€   r©   r6   r6   r7   r€    s*   ý

þþzPDFDocument._get_objectsry   c           	      C   sØ   | j d usJ ‚| j  |¡ | j  ¡ \}}| j  ¡ \}}| j  ¡ \}}||krHg }|| jur>| j  ¡ \}}| |¡ || jus-t|ƒdkrH|d }||krVtd|›d|›�ƒ‚|tdƒkrctd|›�ƒ‚| j  ¡ \}}|S )Nri   éþÿÿÿzobjid mismatch: ú=r{  zInvalid object spec: offset=)	rp  ro   r‡   ÚKEYWORD_OBJr¢   rq   r   r'   rˆ   )	rP   ry   rT   r€   r¯   rÃ   r‹   r�   r©   r6   r6   r7   Ú_getobj_parse!  s&   


þzPDFDocument._getobj_parsec              
   C   s  | j stdƒ‚t d|¡ || jv r| j| \}}|S | j D ]S}z
| |¡\}}}W n	 ty3   Y qw z2|durHt|  |¡ƒ}|  	|||¡}n|  
||¡}| jrYt| j|||ƒ}t|tƒrd| ||¡ W  n ttfyq   Y qw t|ƒ‚t d||¡ | jr‡||f| j|< |S )z�Get 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)rk  r   ru   rw   rq  rV   rŸ   r$   Úgetobjr‚  r†  ro  r   rœ   r   Ú	set_objidr&   r   r   re  )rP   rT   r©   r¨   ry  Ústrmidr®   rª   r6   r6   r7   r‡  =  s<   

èÿ
ÿzPDFDocument.getobjc                    s>   d| j vrt‚dtdtdttj f‡ fdd„‰ ˆ | j d dƒS )NÚOutlinesÚentryÚlevelrJ   c                 3   s¬   � t | ƒ} d| v r0d| v sd| v r0tt| d ƒƒ}|  d¡}|  d¡}|  d¡}|||||fV  d| v rDd| v rDˆ | d |d ƒE d H  d| v rTˆ | d |ƒE d H  d S d S )	NÚTitleÚAÚDestÚSEÚFirstÚLastr†   ÚNext)r    r+   r#   r�   )r‹  rŒ  ÚtitleÚdestÚactionÚse©Úsearchr6   r7   r™  k  s   €


ÿz(PDFDocument.get_outlines.<locals>.searchr   )rm  r>   Úobjectr[   r   rc  ÚOutlineTyperO   r6   r˜  r7   Úget_outlinesg  s   
 zPDFDocument.get_outlinesc              
   C   sH   | j dusJ ‚zt| j d ƒ}W |jS  ttfy# } zt|‚d}~ww )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)rm  r�  r   rŸ   r?   Úlabels)rP   Úpage_labelsr{   r6   r6   r7   Úget_page_labelsz  s   ý€ÿzPDFDocument.get_page_labelsÚcatrå   c              
      st   z	t | jd ƒ}W n ttfy } ztˆ ˆfƒ|‚d }~ww t |ˆ  ƒ}dtttf dtf‡ ‡‡fdd„‰ˆ|ƒS )NÚNamesÚdrJ   c                    sª   d| v rt | d ƒ\}}ˆ|k s|ˆk rd S d| v r6t | d ƒ}ttttttB tf  td|ƒƒƒ}|ˆ S d| v rOt | d ƒD ]}ˆt	|ƒƒ}|rN|  S q@t
ˆ ˆfƒ‚)NÚLimitsr¢  ri   ÚKids)r"   rY   r   r   r\   rZ   ró   r   r*   r    r   )r£  rZ  Úk2r­   Únamesrö   rß   ©r¡  rå   Úlookupr6   r7   r©  “  s"   ÿÿz'PDFDocument.lookup_name.<locals>.lookup)r    rm  r   rŸ   r   rY   rZ   r   )rP   r¡  rå   r§  r{   Úd0r6   r¨  r7   Úlookup_name‹  s   €ÿ"zPDFDocument.lookup_namer(  c                 C   sd   z	|   d|¡}W |S  ty1   d| jvrt|ƒd ‚t| jd ƒ}||vr*t|ƒd ‚|| }Y |S w )NÚDests)r«  rŸ   rm  r@   r    )rP   r(  r©   rª  r6   r6   r7   Úget_dest§  s   	ø



øzPDFDocument.get_destc                 C   s†   d}|  ¡ D ]8}| ¡ }t d|¡ |dkr:t d|¡ | ¡ s'td|›�ƒ‚t|ƒ}|dks6td|› �ƒ‚|  S |r>|}q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)Úrevreadlinesrm   ru   rw   Úisdigitr1   r[   )rP   rW   Úprevrz   r~   r6   r6   r7   rt  ¶  s    €zPDFDocument.find_xrefr~   rk  c           	   
   C   s  |  |¡ | ¡  z| ¡ \}}W n ty" } ztdƒ|‚d}~ww t d||¡ t|tƒrA|  |¡ | ¡  t	ƒ }| 
|¡ n||ju rJ| ¡  tƒ }| 
|¡ | |¡ | ¡ }t d|¡ d|v rrt|d ƒ}|  |||¡ d|v r…t|d ƒ}|  |||¡ dS dS )z$Reads XRefs from the given location.r®  Nz"read_xref_from: start=%d, token=%rr”   ÚXRefStmÚPrev)ro   Úresetr‡   r&   r1   ru   rw   rœ   r[   r²   rX   ÚKEYWORD_XREFrl   r]   r¢   rQ   r!   ru  )	rP   rW   r~   rk  ry   Útokenr{   ry  r_   r6   r6   r7   ru  Ñ  s8   

€ÿ




ýzPDFDocument.read_xref_from)rÏ   TTr  )'r3   r4   r5   r<   rÍ   r  r9  rd  r   rY   r[   Útyper  r   rZ   ré   r`   r'   r…  rv  r   rš  r‚  r\   Úlistr€  r†  r‡  r   r›  r   rœ  r   ró   r«  r­  rt  rI   ru  r6   r6   r6   r7   rc  ž  sT   
 ü
ûþýüû
ú7(þýüûrc  c                   @   s@   e Zd ZdZedee fdd„ƒZede	de
defdd„ƒZd	S )
r�  zWPageLabels from the document catalog.

    See Section 8.3.1 in the PDF Reference.
    rJ   c                 c   sî   � | j }t|ƒdks|d d dkr!tjrtdƒ‚| ddi f¡ t|dƒD ]N\}\}}t|ƒ}| d¡}t	t
| dd¡ƒƒ}t| dd¡ƒ}|t|ƒkrSt |¡}	n|| \}
}|
| }t||| ƒ}	|	D ]}|  ||¡}|| V  qfq&d S )Nr   z"PageLabels is missing page index 0r†   ÚSrÙ   rð   ÚSt)Úvaluesrq   r   r    r   ÚinsertÚ	enumerater    r�   r+   r#   r!   Ú	itertoolsÚcountrt   Ú_format_page_label)rP   r¸   Únextr~   Úlabel_dict_uncheckedÚ
label_dictÚstyleÚprefixÚfirst_valuer»  Úendr€   Úrange_lengthÚvalueÚlabelr6   r6   r7   rž  ü  s*   €
þñzPageLabels.labelsrÉ  rÄ  c                 C   s¤   |du rd}|S |t dƒu rt| ƒ}|S |t dƒu r"t| ƒ ¡ }|S |t dƒu r.t| ƒ}|S |t dƒu r<t| ƒ ¡ }|S |t dƒu rHt| ƒ}|S t d|¡ d}|S )	z+Format page label value in a specific styleNrÏ   ÚDrØ   rÕ   rŽ  ÚazUnknown page label style: %r)r(   rZ   r-   Úupperr,   ru   rv   )rÉ  rÄ  rÊ  r6   r6   r7   rÀ    s*   óõ
÷ùûþzPageLabels._format_page_labelN)r3   r4   r5   r<   Úpropertyr   rZ   rž  rb  r[   r   rÀ  r6   r6   r6   r7   r�  ö  s    r�  )\r¾  Úloggingr°   r  Úcollections.abcr   r   r   r   r   Úhashlibr   r   r	   r
   Útypingr   r   r   Úcryptography.hazmat.backendsr   Ú&cryptography.hazmat.primitives.ciphersr   r   r   Úpdfminerr   Úpdfminer.arcfourr   Úpdfminer.castingr   Úpdfminer.data_structuresr   Úpdfminer.pdfexceptionsr   r   r   r   Úpdfminer.pdfparserr   r   r   Úpdfminer.pdftypesr   r   r   r    r!   r"   r#   r$   r%   Úpdfminer.psexceptionsr&   Úpdfminer.psparserr'   r(   r)   Úpdfminer.utilsr*   r+   r,   r-   r.   r/   Ú	getLoggerr3   ru   r1   ÚSyntaxWarningr:   r>   r?   r@   rA   rB   ÚUserWarningrC   rD   rE   rž   r½   rw  rI   r]   r“   r²   rÍ   r  r9  rc  r�  r6   r6   r6   r7   Ú<module>   sZ    , 
	O3N I}  Z