U
    <ßôg]  ã                   @   sj   d dl Z d dlZd dlmZ d dlmZ dddgZG dd„ deƒZG dd„ deeƒZG d	d„ deeƒZ	dS )
é    N)ÚFlag)ÚreduceÚPdfPermissionsÚStandardPermissionsÚPubKeyPermissionsc                   @   sŠ   e Zd ZdZedd„ ƒZeedœdd„ƒZeedœdd	„ƒZ	eed
œdd„ƒZ
edœdd„Zedœdd„Zedœdd„Zedœdd„ZdS )r   z1
    Utility mixin for PDF permission flags.
    c                 C   s   t tj| j ¡ ƒS )z&
        Set all permissions.
        )r   ÚoperatorÚor_Ú__members__Úvalues)Úcls© r   úG/tmp/pip-unpacked-wheel-w101_d3s/pyhanko/pdf_utils/crypt/permissions.pyÚallow_everything   s    zPdfPermissions.allow_everything)Ú
uint_flagsc                 C   s(   | dƒ}| D ]}||j @ r||O }q|S )zN
        Convert a 32-bit unsigned integer into PDF permission flags.
        r   ©Úvalue)r   r   ÚresultÚflagr   r   r   Ú	from_uint   s
    

zPdfPermissions.from_uint)Úflagsc                 C   s   t  d|¡d }|  |¡S )zH
        Convert a string of 4 bytes into PDF permission flags.
        ú>Ir   )ÚstructÚunpackr   )r   r   r   r   r   r   Ú
from_bytes'   s    zPdfPermissions.from_bytes)Úsint32_flagsc                 C   s   |   |d@ ¡S )zL
        Convert a 32-bit signed integer into PDF permission flags.
        l   ÿÿ )r   )r   r   r   r   r   Úfrom_sint320   s    zPdfPermissions.from_sint32©Úreturnc                 C   s   t ‚dS )a  
        Convert a set of PDF permission flags to their 32-bit
        unsigned integer representation.

        This will already take into account some conventions
        in the PDF specification, i.e. to set as-yet undefined
        permission flags to 'Allow'.
        N©ÚNotImplementedError©Úselfr   r   r   Ú	as_uint328   s    
zPdfPermissions.as_uint32c                 C   s   t  d|  ¡ ¡S )z_
        Convert a set of PDF permission flags to their binary
        representation.
        r   )r   Úpackr"   r    r   r   r   Úas_bytesD   s    zPdfPermissions.as_bytesc                 C   s   t  d|  ¡ ¡d S )zg
        Convert a set of PDF permission flags to their
        signed integer representation.
        z>ir   )r   r   r$   r    r   r   r   Ú	as_sint32K   s    zPdfPermissions.as_sint32c                 C   s   t ‚d S ©Nr   r    r   r   r   Úmac_requiredR   s    zPdfPermissions.mac_requiredN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   Úintr   Úbytesr   r   r"   r$   r%   Úboolr'   r   r   r   r   r   	   s   	
c                   @   sP   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
Zedœdd„Zedœdd„ZdS )r   zd
    Permission flags for the standard security handler.

    See Table 22 in ISO 32000-2:2020.
    é   é   é   é    é   é   é   é   é   r   c                    s   t ‡ fdd„ˆ jD ƒƒdB S )Nc                 3   s   | ]}|ˆ kr|j V  qd S r&   r   ©Ú.0Úxr    r   r   Ú	<genexpr>h   s      z0StandardPermissions.as_uint32.<locals>.<genexpr>l   À`ÿ ©ÚsumÚ	__class__r    r   r    r   r"   g   s    zStandardPermissions.as_uint32c                 C   s
   t j| kS r&   )r   ÚTOLERATE_MISSING_PDF_MACr    r   r   r   r'   j   s    z StandardPermissions.mac_requiredN)r(   r)   r*   r+   ÚALLOW_PRINTINGÚALLOW_MODIFICATION_GENERICÚALLOW_CONTENT_EXTRACTIONÚALLOW_ANNOTS_FORM_FILLINGÚALLOW_FORM_FILLINGÚALLOW_ASSISTIVE_TECHNOLOGYÚALLOW_REASSEMBLYÚALLOW_HIGH_QUALITY_PRINTINGr@   r-   r"   r/   r'   r   r   r   r   r   V   s   c                   @   sT   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZedœdd„Zedœdd„ZdS )r   zf
    Permission flags for the public-key security handler.

    See Table 24 in ISO 32000-2:2020.
    é   r0   r1   r2   r3   r4   r5   r6   r7   r8   r   c                    s   t ‡ fdd„ˆ jD ƒƒdB S )Nc                 3   s   | ]}|ˆ kr|j V  qd S r&   r   r9   r    r   r   r<   ‚   s      z.PubKeyPermissions.as_uint32.<locals>.<genexpr>l   Á`ÿ r=   r    r   r    r   r"   €   s    zPubKeyPermissions.as_uint32c                 C   s
   t j| kS r&   )r   r@   r    r   r   r   r'   „   s    zPubKeyPermissions.mac_requiredN)r(   r)   r*   r+   ZALLOW_ENCRYPTION_CHANGErA   rB   rC   rD   rE   rF   rG   rH   r@   r-   r"   r/   r'   r   r   r   r   r   n   s   )
r   r   Úenumr   Ú	functoolsr   Ú__all__r   r   r   r   r   r   r   Ú<module>   s   
M