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.2.0.tar.gz (569.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.2.0-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.2.0-cp314-cp314-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.38+ ARM64

python_nss_ng-1.2.0-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.2.0-cp313-cp313-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.38+ ARM64

python_nss_ng-1.2.0-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.2.0-cp312-cp312-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.38+ ARM64

python_nss_ng-1.2.0-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.2.0-cp311-cp311-manylinux_2_38_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.38+ ARM64

python_nss_ng-1.2.0-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.2.0-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.2.0.tar.gz.

File metadata

  • Download URL: python_nss_ng-1.2.0.tar.gz
  • Upload date:
  • Size: 569.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.2.0.tar.gz
Algorithm Hash digest
SHA256 a0b6f174bbfd438a668e7d42fe4227c1257a15c314fe00276f148badbb8aa215
MD5 88a4d364b5e4efdc4eb57e0449fc0191
BLAKE2b-256 16877b1125af79894252da0df271a78c5ad3be73529ff8e44d9631bdef3cf560

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp314-cp314-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp314-cp314-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 56dadc712c7d5e9630f85942912aac317aed52b2d7eaccaab1d0bc8133723b12
MD5 4f044b18ae0cbb3921f42cc3f8e6060c
BLAKE2b-256 156f028c7a8cde7ec96317e6141ff2e561e5c8e748ccc4d91e55b480eb0cd892

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp314-cp314-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp314-cp314-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 56c525b43c17dbe664bd8cac512c1b8e83c5467907ff99bbd69fffb070d13bd6
MD5 a16b680656fa9a6d552b508005d7650e
BLAKE2b-256 ab05d505d7f0efd125b02f129251a534db9ce43290827e936685690e57a17f02

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp313-cp313-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp313-cp313-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 c14074fbb4b27d7a54f8a9d11240f70ee74c0f43f52448d59428d18a6949103a
MD5 f5a1d0d07c90e25311a42ab3e169cb13
BLAKE2b-256 2fd5da755a22554121561de893e0914de3151181d095a163e61160d0cacb265e

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp313-cp313-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp313-cp313-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 74e5dc3cf66381d32b6a48eed1f750be1bd89a4ac005ebb77c37d1f24855d8e6
MD5 b0ead9b06d893e862a7c8d06162b061b
BLAKE2b-256 2fe7cc1ea9c2ba068e7ba693115bcbf303a5156cdcd2c2f062809b63bd287d21

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp312-cp312-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp312-cp312-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 c5e4f8afc259a4f14210516301ad6543dddb8249c4707cecdad9768c53f79750
MD5 20c97ccac9ff70235f03de014b7026e9
BLAKE2b-256 436a6445a8b337f81c1fd707e1d8556752495b66efcebf8773c5444e23bab2b3

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp312-cp312-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp312-cp312-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 c288a11cb4d136eb0dd4c8e632cc04853dbdec64bd91119886d8efb0782b5234
MD5 295c93021e11e9424605811d9c888806
BLAKE2b-256 7ab496f5bc37d0491bca8f564139f9767445a34792dfbb7a10cf5ea01be108c7

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp311-cp311-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp311-cp311-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 c670d35b5bff31108a5725f67b406c08a5a953b801b9ac7aa71f336a8fa8d680
MD5 c655aa2dbaada190e8426afec9e5b548
BLAKE2b-256 3ac3e6621d988dc51ae52b57ca653d8e13f79d053035ab76e93cc72382aea820

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp311-cp311-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp311-cp311-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 951949c613a4b612b9405e74202715d63f9a9d8caeba2003063e85e74b2f4667
MD5 dc598d6474d87dea67548cf49568f0da
BLAKE2b-256 43497a0e4d2d835c015ca3988b64def8ec6f8cfcecfe007ac4e5976d50f93e31

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp310-cp310-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp310-cp310-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 b786be93029524587b8e148e4250f44125124b45f184e717841ee619533b8571
MD5 d6b78010eff54d8ab5b1409915430115
BLAKE2b-256 ccb88ca8854601a40946dd6d1a05003e42c2386b3624a140cf701edd63ded861

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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.2.0-cp310-cp310-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for python_nss_ng-1.2.0-cp310-cp310-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 ed19aa155dc0c140f21e9a7b4925606919883a3218691e7796c68e0a567ae790
MD5 9992344cafc73fcd09f6d475e0da083b
BLAKE2b-256 d9290c11221c6b5bf44c914baa3685e724e308e8ca6621a250a1dd2b40241c70

See more details on using hashes here.

Provenance

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

Publisher: build-test-release.yaml on lfreleng-actions/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