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.4.tar.gz (534.6 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.4-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.4-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.4-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.4-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.4-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.4-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.4-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.4-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.4-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.4-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.4.tar.gz.

File metadata

  • Download URL: python_nss_ng-1.0.4.tar.gz
  • Upload date:
  • Size: 534.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.12

File hashes

Hashes for python_nss_ng-1.0.4.tar.gz
Algorithm Hash digest
SHA256 daaaa489c9271f92ef5e7ab9c98695c0628a36319f417d7c36e08c391ed72d59
MD5 975394e113c61d238cf7e439fa628289
BLAKE2b-256 e007864c8484f9cc4fff259233b5b54a7393499bdfe411110db01fa7972ba4b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4.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.4-cp314-cp314-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp314-cp314-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 544dd59d4fc2c993e6b6a10122b8da582382854b84bce0284301bb9a8e5d49f5
MD5 95eef1f6929e0a6849c296cdce0d2797
BLAKE2b-256 c0082e8ad7405dd351f28e446fc88e4108f76d1d65f5fcb85ef6b11b080548b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp314-cp314-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp314-cp314-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 4e774befddd205963f19b8665eb3e7420f4f50d41d050e58ac2c67be29205608
MD5 cbd7502eeb789f5901cc66584e005081
BLAKE2b-256 6c58da9d9e9060532ea7fa311340b4613043c99d3a7494d84cf659989d804369

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp313-cp313-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp313-cp313-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 e6c706e06b7423ee609e3b651452819ec5b83771b4b3e37ac63955e5233f3592
MD5 d62e000db1642d25c0ac1b407c9171a8
BLAKE2b-256 acd53f5555355a6aad2e95d8c6aa542a73f0a290c41b3f9e72380f464b1b4033

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp313-cp313-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp313-cp313-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 792376310a8be2b9b879a2e69c19f9247d18bfa1ed37061aae219bc09644f884
MD5 2781eba9501ebab45f1f171edeeb3e8e
BLAKE2b-256 29341b5199de2101e48148898940e5332f2349d1a286a1ed289bb3d807cf2447

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp312-cp312-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp312-cp312-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 54607ade16e9b09e61a11e11d684d8f0a47a3965661cb020974e1d9d8de20e3e
MD5 ad1901b725647ae11c4205b6381b7a92
BLAKE2b-256 43c339d7957360f9891bde13f243d300381984e30c457e5e090c1a799e2fd145

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp312-cp312-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp312-cp312-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 d828dcd5cef39902e7e88a82ee22423c88c0c336265c3bc7afc631d91bac9994
MD5 f49a635695f3a07593392451de1d907d
BLAKE2b-256 ea70a1ecd6461b1efbf43155f7bb21238cc721dcf6f4e57cbe908be5a97f19b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp311-cp311-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp311-cp311-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 d980157bf6e7970506b5dd6ae6f803be546c30adaee6379a3fef8ab365d43033
MD5 fc2c7e46f60b9b3e8350c262eadce58c
BLAKE2b-256 38b542aff0c4e4ab358b97cb48350269943fcd2e9405bec7f63552d0d9f85e61

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp311-cp311-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp311-cp311-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 7d9d53d9f1eeb2ca9d31316aaa893828a0e489597d92774c7fbc0e02fcc55f10
MD5 8f5f95cd613c77ec7aed3a20a0c71108
BLAKE2b-256 e48b7ecda5bdd1ee849b500163512372bb7efa18dcfd5b4903f79964989e6e04

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp310-cp310-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp310-cp310-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 c1ecf14cb8b06846c9164fe6f730c7eb27bc7a584712efbe6209dec648475170
MD5 15f4ea32e12427593241ebce78b0c9b6
BLAKE2b-256 e4b1e031463226f6f2f890f15b296e7da4e426da0618d7886728ed8997e93224

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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.4-cp310-cp310-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.0.4-cp310-cp310-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 63b79e137baa0a165a40469e6492195f139876a900e0ebbe6a17277bd80212bd
MD5 aa8ef8d433f979f8f21acab831223bc4
BLAKE2b-256 66b8a9c81482bf58ffb17c560ef21e6a025aecc1b10a171d856f4d69f9ab66b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_nss_ng-1.0.4-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