o
    vh]                     @   sh   d dl Z d dlZd dlmZ d dlmZ g d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defddZedefdd	Z	ed
efddZ
defddZdefddZdefddZdef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   a/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/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      t )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'.
        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   r   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    	
r   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defddZdefddZdS )r   zd
    Permission flags for the standard security handler.

    See Table 22 in ISO 32000-2:2020.
                                r   c                       t  fdd jD dB S )Nc                 3       | ]
}| v r|j V  qd S r&   r   .0xr    r   r   	<genexpr>h       z0StandardPermissions.as_uint32.<locals>.<genexpr>l   ` sum	__class__r    r   r    r   r"   g   s   zStandardPermissions.as_uint32c                 C   
   t j| vS r&   )r   TOLERATE_MISSING_PDF_MACr    r   r   r   r'   j      
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_PRINTINGrD   r-   r"   r/   r'   r   r   r   r   r   V   s    r   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defddZdef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                    r9   )Nc                 3   r:   r&   r   r;   r    r   r   r>      r?   z.PubKeyPermissions.as_uint32.<locals>.<genexpr>l   ` r@   r    r   r    r   r"      s   zPubKeyPermissions.as_uint32c                 C   rC   r&   )r   rD   r    r   r   r   r'      rE   zPubKeyPermissions.mac_requiredN)r(   r)   r*   r+   ALLOW_ENCRYPTION_CHANGErF   rG   rH   rI   rJ   rK   rL   rM   rD   r-   r"   r/   r'   r   r   r   r   r   n   s    r   )
r   r   enumr   	functoolsr   __all__r   r   r   r   r   r   r   <module>   s    M