[build-system]
# These requirements must be kept sync with the requirements on ./github/requirements/build-requirements files
requires = [
    # First version of setuptools to support pyproject.toml configuration
    "setuptools>=61.0.0",
    "wheel",
    # Must be kept in sync with `project.dependencies`
    "cffi>=1.12; platform_python_implementation != 'PyPy'",
    "setuptools-rust>=1.7.0",
]
build-backend = "setuptools.build_meta"

[project]
name = "cryptography"
version = "42.0.8"
authors = [
    {name = "The Python Cryptographic Authority and individual contributors", email = "cryptography-dev@python.org"}
]
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
readme = "README.rst"
license = {text = "Apache-2.0 OR BSD-3-Clause"}
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: Apache Software License",
    "License :: OSI Approved :: BSD License",
    "Natural Language :: English",
    "Operating System :: MacOS :: MacOS X",
    "Operating System :: POSIX",
    "Operating System :: POSIX :: BSD",
    "Operating System :: POSIX :: Linux",
    'Operating System :: Microsoft :: Windows',
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.7",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
    "Topic :: Security :: Cryptography",
]
requires-python = ">=3.7"
dependencies = [
    # Must be kept in sync with `build-system.requires`
    "cffi>=1.12; platform_python_implementation != 'PyPy'",
]

[project.urls]
homepage = "https://github.com/pyca/cryptography"
documentation = "https://cryptography.io/"
source = "https://github.com/pyca/cryptography/"
issues = "https://github.com/pyca/cryptography/issues"
changelog = "https://cryptography.io/en/latest/changelog/"

[tool.setuptools]
zip-safe = false
package-dir = {"" = "src"}

[tool.setuptools.packages.find]
where = ["src"]
include = ["cryptography*"]

[project.optional-dependencies]
ssh = ["bcrypt >=3.1.5"]

# All the following are used for our own testing.
nox = ["nox"]
test = [
    "pytest >=6.2.0",
    "pytest-benchmark",
    "pytest-cov",
    "pytest-xdist",
    "pretend",
    "certifi",
]
test-randomorder = ["pytest-randomly"]
docs = ["sphinx >=5.3.0", "sphinx-rtd-theme >=1.1.1"]
docstest =  ["pyenchant >=1.6.11", "readme-renderer", "sphinxcontrib-spelling >=4.0.1"]
sdist = ["build"]
# `click` included because its needed to type check `release.py`
pep8test = ["ruff", "mypy", "check-sdist", "click"]

[[tool.setuptools-rust.ext-modules]]
target = "cryptography.hazmat.bindings._rust"
path = "src/rust/Cargo.toml"
py-limited-api = "auto"
rust-version = ">=1.63.0"


[tool.pytest.ini_options]
addopts = "-r s --capture=no --strict-markers --benchmark-disable"
console_output_style = "progress-even-when-capture-no"
markers = [
    "skip_fips: this test is not executed in FIPS mode",
    "supported: parametrized test requiring only_if and skip_message",
]

[tool.mypy]
show_error_codes = true
check_untyped_defs = true
no_implicit_reexport = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_unused_configs = true
strict_equality = true

[[tool.mypy.overrides]]
module = [
    "pretend"
]
ignore_missing_imports = true

[tool.coverage.run]
branch = true
relative_files = true
source = [
    "cryptography",
    "tests/",
]

[tool.coverage.paths]
source = [
   "src/cryptography",
   "*.nox/*/lib*/python*/site-packages/cryptography",
   "*.nox\\*\\Lib\\site-packages\\cryptography",
   "*.nox/pypy/site-packages/cryptography",
]
tests =[
   "tests/",
   "*tests\\",
]

[tool.coverage.report]
exclude_lines = [
    "@abc.abstractmethod",
    "@typing.overload",
    "if typing.TYPE_CHECKING",
]

[tool.ruff]
ignore = ['N818']
select = ['E', 'F', 'I', 'N', 'W', 'UP', 'RUF']
line-length = 79

[tool.ruff.isort]
known-first-party = ["cryptography", "cryptography_vectors", "tests"]

[tool.check-sdist]
git-only = [
    "vectors/*",
    "release.py",
    "ci-constraints-requirements.txt",
    ".gitattributes",
    ".gitignore",
]
