Skip to main content

Python bindings for Network Security Services (NSS) and Netscape Portable Runtime (NSPR)

Project description

python-nss-ng

Platform Compatibility CI/CD Pipeline Python 3.10+ License: MPL-2.0

Python bindings for Network Security Services (NSS) and Netscape Portable Runtime (NSPR).

Supported Platforms

python-nss-ng officially supports:

  • Linux (all major distributions)
  • macOS

Windows is NOT supported. Attempting to import python-nss-ng on Windows will raise a RuntimeError.

Overview

python-nss-ng is a Python binding for NSS (Network Security Services) and NSPR (Netscape Portable Runtime). NSS provides cryptography services supporting SSL, TLS, PKI, PKIX, X509, PKCS*, etc. NSS is an alternative to OpenSSL and used extensively by major software projects. NSS is FIPS-140 certified.

NSS uses NSPR because NSPR provides an abstraction of common operating system services, in the areas of networking and process management. Python also provides an abstraction of common operating system services but because NSS and NSPR have tight coupling, python-nss-ng exposes elements of NSPR.

Project Modernization (2025)

This project received modernization work to support current Python versions and build standards:

Changes Made

  • Python Support: Now supports Python 3.10, 3.11, 3.12, 3.13, and 3.14
  • Build System: Migrated from legacy distutils to modern setuptools with pyproject.toml
  • Version Management: Implemented dynamic versioning using setuptools-scm
  • Package Structure: Follows current PEP standards (PEP 517, PEP 518, PEP 621)
  • Development Tools: Added support for uv, modern testing with pytest, and code quality with ruff

NSS/NSPR Compatibility

C Extension Compatibility: The C code now compiles with NSS 3.100+ and works with NSS 3.117.

Recent Fixes:

  • Resolved typedef conflicts (RSAPublicKeyPyRSAPublicKey, etc.)
  • Fixed SPDX comment block formatting issues
  • All 32 tests pass with NSS 3.117 and NSPR 4.38

Tested Versions:

  • NSS 3.117
  • NSPR 4.38.2
  • Python 3.10, 3.11, 3.12, 3.13, 3.14

System Requirements

Required Libraries

Before building python-nss-ng, you need the C language header files and libraries for both NSPR and NSS installed. This is system and distribution specific.

Fedora/RHEL/CentOS

sudo dnf install nss-devel nspr-devel

Debian/Ubuntu

sudo apt-get install libnss3-dev libnspr4-dev

macOS (Homebrew)

brew install nss nspr

Installation

Using uv (Recommended)

# Create a virtual environment with Python 3.10+
uv venv --python 3.10

# Activate the environment
source .venv/bin/activate  # Linux/macOS
# or
.venv\Scripts\activate  # Windows

# Install in development mode
uv pip install -e ".[dev]"

Using pip

# Create a virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install in development mode
pip install -e ".[dev]"

Custom Include/Library Paths

If NSS/NSPR live in non-standard locations, set the NSS_INCLUDE_ROOTS environment variable:

export NSS_INCLUDE_ROOTS="/custom/path/include:/another/path/include"
pip install -e .

Development

Test Dependencies

The test suite requires NSS command-line tools for certificate generation:

NSS Tools: Fedora/RHEL/CentOS

sudo dnf install nss-tools

NSS Tools: Debian/Ubuntu

sudo apt-get install libnss3-tools

NSS Tools: macOS (Homebrew)

The nss package includes NSS tools:

brew install nss

Running Tests

Quick Start (Automated)

Use the comprehensive test runner script that handles all setup:

# Run all tests (handles setup, builds C extension, creates certificates)
./scripts/run-all-tests.sh

# Quick mode: pure Python tests only (no C extension build needed)
./scripts/run-all-tests.sh --quick

# Other options
./scripts/run-all-tests.sh --help

The script automatically:

  • Checks for dependencies (uv, NSS, NSPR)
  • Creates virtual environment
  • Installs test dependencies
  • Builds C extension (if needed)
  • Sets up test certificates
  • Runs tests

Manual Testing

# Install with test dependencies
uv pip install -e ".[test]"

# Run tests (recommended for reliability)
pytest test/ -n0

# Or run with parallel execution (may have occasional intermittent failures)
pytest test/

Note: Some tests have known intermittent failures with parallel execution. Tests automatically generate certificates in a pki/ directory within the test folder using certutil from nss-tools. For fully reliable results, use -n0 to disable parallel execution. See TESTING.md for details about test reliability and certificate generation.

Building

# Build source distribution and wheel
uv pip install build
python -m build

Build Performance ⚡

Builds are now 40-80% faster thanks to automatic optimizations:

  • Probe Caching: Library locations cached (27% faster)
  • Parallel Compilation: Uses all CPU cores (40% faster)
  • ccache in CI: Compilation results cached (78% faster CI)

All optimizations work automatically! For even faster local builds:

# Optional: Install ccache for 87% faster rebuilds
brew install ccache  # macOS
export CC="ccache clang"

See BUILD_OPTIMIZATION_QUICKSTART.md for details.

Code Quality

Check code style and format code:

ruff check .
ruff format .

Project Structure

python-nss-ng/
├── src/                    # C extension source files and Python package
│   ├── __init__.py        # Main package initialization
│   ├── py_nss.c           # NSS bindings
│   ├── py_ssl.c           # SSL/TLS bindings
│   ├── py_nspr_io.c       # NSPR I/O bindings
│   └── py_nspr_error.c    # NSPR error handling
├── test/                  # Test suite
├── doc/                   # Documentation
├── pyproject.toml        # Modern Python project configuration
├── meson.build           # Meson build configuration
└── MANIFEST.in           # Source distribution file inclusion rules

Documentation

More information on python-nss-ng is available on the python-nss-ng project page.

For information on NSS and NSPR, see the following:

License

This project is triple-licensed under:

  • Mozilla Public License 2.0 (MPL-2.0)
  • GNU General Public License v2 or later (GPLv2+)
  • GNU Lesser General Public License v2 or later (LGPLv2+)

See LICENSE.mpl, LICENSE.gpl, and LICENSE.lgpl files for details.

Contributing

This is a modernization effort for an existing project. Contributions to fix the NSS compatibility issues and modernize the C code are welcome!

Priority Issues

  1. Fix C code compatibility with NSS 3.100+
  2. Update API usage for modern NSS/NSPR
  3. Add comprehensive test coverage
  4. Improve documentation
  5. Add type hints to Python code

Authors and Maintainers

  • Original Author: John Dennis jdennis@redhat.com
  • Current Maintainer: Project seeking active maintainer

Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_nss_ng-1.0.5.tar.gz (561.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

python_nss_ng-1.0.5-cp314-cp314-manylinux_2_38_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.38+ x86-64

python_nss_ng-1.0.5-cp314-cp314-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.38+ ARM64

python_nss_ng-1.0.5-cp313-cp313-manylinux_2_38_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.38+ x86-64

python_nss_ng-1.0.5-cp313-cp313-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.38+ ARM64

python_nss_ng-1.0.5-cp312-cp312-manylinux_2_38_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.38+ x86-64

python_nss_ng-1.0.5-cp312-cp312-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.38+ ARM64

python_nss_ng-1.0.5-cp311-cp311-manylinux_2_38_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.38+ x86-64

python_nss_ng-1.0.5-cp311-cp311-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.38+ ARM64

python_nss_ng-1.0.5-cp310-cp310-manylinux_2_38_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.38+ x86-64

python_nss_ng-1.0.5-cp310-cp310-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.38+ ARM64

File details

Details for the file python_nss_ng-1.0.5.tar.gz.

File metadata

  • Download URL: python_nss_ng-1.0.5.tar.gz
  • Upload date:
  • Size: 561.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for python_nss_ng-1.0.5.tar.gz
Algorithm Hash digest
SHA256 3e5f1432bc368901b7039199fa113d6fbd4081bccc52a4a031d4ba8077d36448
MD5 c5c912d5a74988d1c7a2802ba42eefa8
BLAKE2b-256 9a8d01d57b2aaabe77c2feb27f178e9acfd201d5e5f1263a3bf66e951bbb9772

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5.tar.gz:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp314-cp314-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp314-cp314-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 8d865850a161ab73e4d3ba8cf4b74249366865ecf7398a7e363a68421240397b
MD5 7116f80baa1c3c4b1d01197fdd2fd903
BLAKE2b-256 031adf37b873e91decb528fd55d14fe27d5d87668b7b7c7f6c560d7599fd4b54

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp314-cp314-manylinux_2_38_x86_64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp314-cp314-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp314-cp314-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 02836c9e284f6b2a1e8ed4079fd74044063ec3d411094743142cf740a7676e47
MD5 edc1a022bb0cfd934fc45d33e1967caf
BLAKE2b-256 ae36021b7218a2d3f38930896d58ab41bfab14c45d3ab68022a8b8bf389500db

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp314-cp314-manylinux_2_38_aarch64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp313-cp313-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp313-cp313-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 9754c064c3be2264489353c0ca7459480769cb801be9e5d5b705435d3378a2cf
MD5 cc542baab9c13fe89e45090513f5e8e7
BLAKE2b-256 c97f856829908558823af01c4626ed5d04e61cc06abdd1e5286d38a095064210

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp313-cp313-manylinux_2_38_x86_64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp313-cp313-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp313-cp313-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 fb212226e5569c6627bb00e3210e1090c95f56ea6d1815fa975b167f3b051107
MD5 af373ac2e75499973b6562a5ffaa7e54
BLAKE2b-256 198c9022bf657abf4ecff802056db0c091df47cae14f77323a7915d9223ed02b

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp313-cp313-manylinux_2_38_aarch64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp312-cp312-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp312-cp312-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 59b8e9dc8f2cda283575c29d930895f251da6ae40855b270f2066e758bc9d83c
MD5 2114c7c7aee078853464b5964b825183
BLAKE2b-256 66d9e846fbabd3ad248d8c4a0c0854acfa6c79cd1f1c1819cbeac1b62b39e346

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp312-cp312-manylinux_2_38_x86_64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp312-cp312-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp312-cp312-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 2c1a8b20427b20e7319ec324a8b1df24483d80a67b951118636ac8c45f0231e5
MD5 b661cbcbd22bfbe5b3f1b8a1e49d6122
BLAKE2b-256 de0fe03fd6225803e6568843d39f712f45781617a87810101ce0f6a7e4d61ba4

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp312-cp312-manylinux_2_38_aarch64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp311-cp311-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp311-cp311-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 3b5a09b9c6109df55c0152b07f4f1b68cf8bdc7c0ba1b84a521d205b7fc82c58
MD5 73346a9453ed745713253b63fb26fdd5
BLAKE2b-256 664d642ae5cb10aa9054b2a5903f6aad17db9cffa1f39aa08f262bb75a101df8

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp311-cp311-manylinux_2_38_x86_64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp311-cp311-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp311-cp311-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 647c761cb82cb96a9d1ae882969ae450f97d0d45d15d830b145419c06ea78133
MD5 0dc8bad5e79676478990a0e0735ed7d3
BLAKE2b-256 8bdf4557909167916e51ac44464413b5668320bcc0a0f14360790bd7004b520b

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp311-cp311-manylinux_2_38_aarch64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp310-cp310-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp310-cp310-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 00bf5262eedb3419f24d9632cd41672b16bad1bfa2453894de6890b0fd4dfc73
MD5 ff274bd19c1a10d4a8231f41fead0fe7
BLAKE2b-256 7235a080f01ef6cf11d6cca85db97fdd4dc249f0a730d7c0cac7c047714d649f

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp310-cp310-manylinux_2_38_x86_64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_nss_ng-1.0.5-cp310-cp310-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.5-cp310-cp310-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 93f39e2c433e7a79c70c67c7c305241ec0b6d81a51eb84a2875882725f063878
MD5 8933f4112285284f412ae0f4c0f70f57
BLAKE2b-256 495db75de7ce822089a4d8cc15c6431ee5106f434c77c4cc1e2701ca99dbc034

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.5-cp310-cp310-manylinux_2_38_aarch64.whl:

Publisher: build-test-release.yaml on ModeSevenIndustrialSolutions/python-nss-ng

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page