aboutsummaryrefslogtreecommitdiffstats
path: root/env/lib/python3.10/site-packages/pikepdf/models/encryption.py
diff options
context:
space:
mode:
Diffstat (limited to 'env/lib/python3.10/site-packages/pikepdf/models/encryption.py')
-rw-r--r--env/lib/python3.10/site-packages/pikepdf/models/encryption.py176
1 files changed, 0 insertions, 176 deletions
diff --git a/env/lib/python3.10/site-packages/pikepdf/models/encryption.py b/env/lib/python3.10/site-packages/pikepdf/models/encryption.py
deleted file mode 100644
index d6b5036..0000000
--- a/env/lib/python3.10/site-packages/pikepdf/models/encryption.py
+++ /dev/null
@@ -1,176 +0,0 @@
-# SPDX-FileCopyrightText: 2022 James R. Barlow
-# SPDX-License-Identifier: MPL-2.0
-
-"""For managing PDF encryption."""
-
-from __future__ import annotations
-
-import sys
-from typing import TYPE_CHECKING, Any, NamedTuple, cast
-
-if sys.version_info >= (3, 8):
- from typing import Literal
-else:
- from typing_extensions import Literal # pragma: no cover
-
-if TYPE_CHECKING:
- from pikepdf._qpdf import EncryptionMethod
-
-
-class Permissions(NamedTuple):
- """
- Stores the user-level permissions for an encrypted PDF.
-
- A compliant PDF reader/writer should enforce these restrictions on people
- who have the user password and not the owner password. In practice, either
- password is sufficient to decrypt all document contents. A person who has
- the owner password should be allowed to modify the document in any way.
- pikepdf does not enforce the restrictions in any way; it is up to application
- developers to enforce them as they see fit.
-
- Unencrypted PDFs implicitly have all permissions allowed. Permissions can
- only be changed when a PDF is saved.
- """
-
- accessibility: bool = True
- """Can users use screen readers and accessibility tools to read the PDF?"""
-
- extract: bool = True
- """Can users extract contents?"""
-
- modify_annotation: bool = True
- """Can users modify annotations?"""
-
- modify_assembly: bool = False
- """Can users arrange document contents?"""
-
- modify_form: bool = True
- """Can users fill out forms?"""
-
- modify_other: bool = True
- """Can users modify the document?"""
-
- print_lowres: bool = True
- """Can users print the document at low resolution?"""
-
- print_highres: bool = True
- """Can users print the document at high resolution?"""
-
-
-DEFAULT_PERMISSIONS = Permissions()
-
-
-class EncryptionInfo:
- """
- Reports encryption information for an encrypted PDF.
-
- This information may not be changed, except when a PDF is saved.
- This object is not used to specify the encryption settings to save
- a PDF, due to non-overlapping information requirements.
- """
-
- def __init__(self, encdict: dict[str, Any]):
- """
- Initialize EncryptionInfo.
-
- Generally pikepdf will initialize and return it.
-
- Args:
- encdict: Python dictionary containing encryption settings.
- """
- self._encdict = encdict
-
- @property
- def R(self) -> int:
- """Revision number of the security handler."""
- return int(self._encdict['R'])
-
- @property
- def V(self) -> int:
- """Version of PDF password algorithm."""
- return int(self._encdict['V'])
-
- @property
- def P(self) -> int:
- """Return encoded permission bits.
-
- See :meth:`Pdf.allow` instead.
- """
- return int(self._encdict['P'])
-
- @property
- def stream_method(self) -> EncryptionMethod:
- """Encryption method used to encode streams."""
- return cast('EncryptionMethod', self._encdict['stream'])
-
- @property
- def string_method(self) -> EncryptionMethod:
- """Encryption method used to encode strings."""
- return cast('EncryptionMethod', self._encdict['string'])
-
- @property
- def file_method(self) -> EncryptionMethod:
- """Encryption method used to encode the whole file."""
- return cast('EncryptionMethod', self._encdict['file'])
-
- @property
- def user_password(self) -> bytes:
- """If possible, return the user password.
-
- The user password can only be retrieved when a PDF is opened
- with the owner password and when older versions of the
- encryption algorithm are used.
-
- The password is always returned as ``bytes`` even if it has
- a clear Unicode representation.
- """
- return bytes(self._encdict['user_passwd'])
-
- @property
- def encryption_key(self) -> bytes:
- """Return the RC4 or AES encryption key used for this file."""
- return bytes(self._encdict['encryption_key'])
-
- @property
- def bits(self) -> int:
- """Return the number of bits in the encryption algorithm.
-
- e.g. if the algorithm is AES-256, this returns 256.
- """
- return len(self._encdict['encryption_key']) * 8
-
-
-class Encryption(NamedTuple):
- """Specify the encryption settings to apply when a PDF is saved."""
-
- owner: str = ''
- """The owner password to use. This allows full control
- of the file. If blank, the PDF will be encrypted and
- present as "(SECURED)" in PDF viewers. If the owner password
- is blank, the user password should be as well."""
-
- user: str = ''
- """The user password to use. With this password, some
- restrictions will be imposed by a typical PDF reader.
- If blank, the PDF can be opened by anyone, but only modified
- as allowed by the permissions in ``allow``."""
-
- R: Literal[2, 3, 4, 5, 6] = 6
- """Select the security handler algorithm to use. Choose from:
- ``2``, ``3``, ``4`` or ``6``. By default, the highest version of
- is selected (``6``). ``5`` is a deprecated algorithm that should
- not be used."""
-
- allow: Permissions = DEFAULT_PERMISSIONS
- """The permissions to set.
- If omitted, all permissions are granted to the user."""
-
- aes: bool = True
- """If True, request the AES algorithm. If False, use RC4.
- If omitted, AES is selected whenever possible (R >= 4)."""
-
- metadata: bool = True
- """If True, also encrypt the PDF metadata. If False,
- metadata is not encrypted. Reading document metadata without
- decryption may be desirable in some cases. Requires ``aes=True``.
- If omitted, metadata is encrypted whenever possible."""