Skip to main content

Quantum-safe cryptography utilities built on top of liboqs-python

Project description

qcrypto

Version: 0.3.0

qcrypto is a lightweight Python library that provides simple, Pythonic wrappers around post-quantum cryptography (PQC) using the official liboqs-python bindings from the Open Quantum Safe project.

The library exposes unified, minimal interfaces for:

  • Post-quantum key encapsulation (KEM)
  • Post-quantum digital signatures
  • A hybrid PQC + AES-GCM authenticated encryption scheme

qcrypto is suitable for learning PQC concepts, prototyping, research, and experimentation with quantum-safe primitives.


Features

Post-Quantum Key Encapsulation (KEM)

  • Kyber (Kyber512 / Kyber768 / Kyber1024)
  • Classic McEliece (all parameter sets exposed by liboqs)
  • Public/secret key generation
  • Encapsulation → shared secret + ciphertext
  • Decapsulation → recover the same shared secret

Digital Signatures

  • Dilithium (2, 3, 5)

  • Falcon (Falcon-512, Falcon-1024)

  • SPHINCS+ (SHA2 and SHAKE variants)

  • Unified signature interface:

    • SignatureScheme for any liboqs signature algorithm
    • Convenience wrappers: DilithiumSig, FalconSig, SphincsSig

Hybrid PQC + AES-256-GCM Encryption

  • Kyber encapsulates a shared secret
  • HKDF-SHA256 derives an AES key
  • AES-256-GCM encrypts the message
  • Compact single-blob ciphertext format:
[1 byte]  version  
[1 byte]  algorithm id  
[2 bytes] Kyber ciphertext length  
[N bytes] Kyber ciphertext  
[12 bytes] AES-GCM nonce  
[M bytes] AES-GCM ciphertext+tag

High-level API:

from qcrypto import encrypt, decrypt

Legacy API retained:

encrypt_for_recipient()
decrypt_from_sender()

Key Serialization

  • save_public_key(), save_private_key()
  • KyberKEM.load_public_key(), KyberKEM.load_private_key()
  • Raw or base64 encoding

Installation

Python 3.8+:

pip install qcrypto

liboqs-python installs automatically.


Examples

All examples are located in the examples/ directory:

  • kyber_example.py
  • mceliece_example.py
  • dilithium_example.py
  • falcon_example.py
  • sphincs_example.py
  • signature_scheme_generic_example.py
  • hybrid_example.py
  • list_algorithms.py

Run an example:

python examples/kyber_example.py

Implementation Notes

  • Uses liboqs-python, which bundles optimized C implementations of PQC algorithms.
  • AES-256-GCM provided by the cryptography package.
  • Available algorithms depend on how liboqs was compiled on your platform.
  • Hybrid encryption uses HKDF-SHA256 and fresh 96-bit GCM nonces.
  • Pure Python library using modern src/ layout.

Changelog

v0.3.0 — Expanded PQC Support

New Algorithms

  • Falcon signatures (FalconSig)
  • SPHINCS+ signatures (SphincsSig)
  • Classic McEliece KEM (ClassicMcElieceKEM)

Unified Signature Interface

  • Added SignatureScheme supporting any liboqs signature algorithm.

Examples

  • Added Falcon, SPHINCS+, McEliece, and generic signature examples.

Internal Improvements

  • Restructured signatures/KEMs for easier future expansion.

v0.2.0 — Hybrid API Rewrite, Ciphertext Format, Key Serialization

  • Added new high-level hybrid encrypt() and decrypt()
  • Introduced standardized single-blob ciphertext format
  • Added key serialization helpers
  • Improved decapsulation API
  • Legacy API preserved for compatibility

Disclaimer

This library is for educational, experimental, and research use. It has not undergone formal security review and should not be used in production systems.


License

MIT License.


Resources

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

qcrypto-0.3.0.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

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

qcrypto-0.3.0-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file qcrypto-0.3.0.tar.gz.

File metadata

  • Download URL: qcrypto-0.3.0.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for qcrypto-0.3.0.tar.gz
Algorithm Hash digest
SHA256 203636b07396d4ce105ca610f7ea0c44d410c383dded9976a9129475ab339213
MD5 882c5e0dc41d895c712d1721936be6ea
BLAKE2b-256 a675f4e44bb01cb64964137110d1046dfdd8f83dda82331d27bcdf17eb1f4ecd

See more details on using hashes here.

File details

Details for the file qcrypto-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: qcrypto-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for qcrypto-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 da52a3917e922df1aef39701dee4f7e0c56cfc5c8f8e29cff27b0b2ae35973b7
MD5 ec49180b13ba76476fb7e5fe7e839731
BLAKE2b-256 e462ab18328b009b9cd1f9152137efc67b566f0d3f21ab64fc64c2651c75f4ee

See more details on using hashes here.

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