Skip to main content

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

Project description

qcrypto

Version: 0.4.2

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
  • files_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.4.0 — File Encryption & Streaming AES-GCM

New Features

• Added encrypt_file() and decrypt_file() for real file encryption workflows. • Introduced streaming AES-256-GCM, allowing encryption/decryption of large files without loading the entire file into memory. • File ciphertext format matches the existing encrypt() API for full compatibility.

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 + 16-byte GCM tag

Other Improvements

• Added round-trip file encryption tests. • Updated __init__.py to expose file encryption helpers. • Internal refactoring to support chunked I/O while preserving the standardized hybrid ciphertext structure.


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.4.2.tar.gz (11.2 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.4.2-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for qcrypto-0.4.2.tar.gz
Algorithm Hash digest
SHA256 fc16620efb0aa5194be30736b6d1a37608ddda55a891de136c28fbbbfc80a765
MD5 2a22065937177171aba60574a8f9a5cc
BLAKE2b-256 617418b042de76319725ecd0a241041057536af70e512472100fe22bda86321b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qcrypto-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 9.5 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.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f1831ef0dd38331d09f694b279a897bcb2a16c19c0d1a9048a6409dafd6e5b9e
MD5 6f88feafd23fec1c5423a12194cec3d2
BLAKE2b-256 3736c6826931d7e68687242a9171142da966cebf6e8492b50aba06fb2d31646d

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