SaQura for Python
Post-quantum-ready cryptography for Python. Wire-compatible with SaQura for .NET, Swift and Kotlin — data encrypted or signed on one platform decrypts and verifies on every other.
SaQura is async-first (await saqura.aes.encrypt(...)) with a synchronous
facade (saqura.sync), mirroring the Swift (async) and Kotlin (suspend) SDKs.
Features
| Module | What it does |
|---|---|
| AES | AES-256-GCM (auto-detects legacy CBC+HMAC on decrypt) |
| RSA | RSA-4096 — OAEP-SHA256 encryption, PSS-SHA256 signatures |
| Hybrid | RSA+AES envelope for large payloads (new + legacy HYBR) |
| Quantum | Post-quantum KEMs (FrodoKEM / Classic-McEliece / ML-KEM, Generations 2–8) and ML-DSA (FIPS 204) / SLH-DSA (FIPS 205) signatures, via liboqs |
| Licensing | Offline .lic verification (public-key-only) |
| Password | PBKDF2-HMAC-SHA512, 210 000 iterations |
Install
pip install saqura # AES / RSA / Hybrid / Licensing / Password
pip install "saqura[quantum]" # + post-quantum (pulls liboqs-python)
Requires Python 3.10+. Wheels are shipped compiled (no .py source).
Windows + post-quantum:
liboqs-python's default MSVC build miscompiles the FIPS-205 SLH-DSA path. After installing thequantumextra, run the bundled helper once —powershell -ExecutionPolicy Bypass -File tools\setup_liboqs_windows.ps1— to install a correct (clang-cl)liboqs. macOS and Linux are unaffected.
Tested
liboqsversion: this release is tested against nativeliboqs0.15.0.liboqs-pythonuses an already installedliboqs, or builds one on first import. To use the tested version, installliboqs0.15.0 beforehand, or setPYOQS_VERSION=0.15.0before the firstimport oqs(the Windows helper above already installs 0.15.0).
Usage
import asyncio, saqura
async def main():
# symmetric
blob = await saqura.aes.encrypt("hello", "my-key")
assert await saqura.aes.decrypt(blob, "my-key") == "hello"
# asymmetric — new_key_pair() returns (private_pem, public_pem)
priv, pub = await saqura.rsa.new_key_pair()
sig = await saqura.rsa.sign("invoice #42", priv)
assert await saqura.rsa.verify("invoice #42", sig, pub)
asyncio.run(main())
Synchronous facade — same names, no await:
import saqura
blob = saqura.sync.aes.encrypt("hello", "my-key")
text = saqura.sync.aes.decrypt(blob, "my-key")
Interoperability
All SaQura libraries share the same wire formats (AES-GCM nonce‖ct‖tag,
RSA-OAEP/PSS-SHA256, hybrid envelope, FrodoKEM / Classic-McEliece / ML-KEM blobs,
ML-DSA / SLH-DSA signatures, PBKDF2-SHA512, .lic license files). Cross-language
round-trips are verified against a shared test corpus, so a .lic issued for
.NET validates in Python and an AES blob from Swift decrypts in Python.
© 2025–2026 KyotoTech LLC. Proprietary.
Metadata
Release files for saqura 1.0.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 7.0 MB
Release files / saqura-1.0.10-cp314-cp314-macosx_26_0_arm64.whl
| Download URL | saqura-1.0.10-cp314-cp314-macosx_26_0_arm64.whl |
|---|---|
| Size | 342.9 kB |
| Tags | CPython 3.14 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7a2ee238363758a69d941461c3dcc593f3fda87f368fd148c643dd40a4b5fcfe
|
|
BLAKE2b-256 checksum How to use checksums |
c6b63a70f554a190e1f15f19824fb72ff06de59ae0e4fcd614a674afd3f3745a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp313-cp313-win_amd64.whl
| Download URL | saqura-1.0.10-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 309.2 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
39f4b20604af539cfe293e1fa8268c44584956923c91270d619242b470f9bff6
|
|
BLAKE2b-256 checksum How to use checksums |
363112b272430aa56b4c16b84ac8bc5a23f09ccff204c687d19b061a1e00e9b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | saqura-1.0.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 585.9 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
dae7e9ba093656bf5005e2f1b29480a33ce43d353f4b03d1507b7a845bd932c6
|
|
BLAKE2b-256 checksum How to use checksums |
db7a21d88140982f128a4cf890fd38421ccd5201fe35b0aa0b8c3a9b54e6b02f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | saqura-1.0.10-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 525.9 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
3e2618f1faacbf8b825a15bf89e07272c7a34365db7e68abb5609f9679419b04
|
|
BLAKE2b-256 checksum How to use checksums |
6e177a34ab0bb27b2b0f589b95b4d264ecac6fae1979cebdf7b95a426a535d6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp313-cp313-macosx_26_0_arm64.whl
| Download URL | saqura-1.0.10-cp313-cp313-macosx_26_0_arm64.whl |
|---|---|
| Size | 335.2 kB |
| Tags | CPython 3.13 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e810b71e7c7b4367179565d2f2699e1c6a109407fb1d4dd0e5f1573452540d17
|
|
BLAKE2b-256 checksum How to use checksums |
df7694a2a056fe1277537a33a7c2277e8fc451436a0480b2e6c513bfffca5de6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp312-cp312-win_amd64.whl
| Download URL | saqura-1.0.10-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 309.8 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3af1d58542dfe4f930cc17d73ba1ca37d6c9c2cf30a093957720c52c36d1c3b9
|
|
BLAKE2b-256 checksum How to use checksums |
3979000541bbaf705ecb941bb474e0a4dc030e8babbbe8249fd3cdd0f3933683
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | saqura-1.0.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 580.3 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
fb9dc23b0b9d61dad5cbf01af5ad4c81146f0e1b69f2a4d003a229d32f5ebd1b
|
|
BLAKE2b-256 checksum How to use checksums |
b9c970e034596b7498a04f629029dbb41471ae4b56004613281377dc659b0c4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | saqura-1.0.10-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 518.7 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
b8ff4d481ee28054f555f2f78c1ff44d4256c60132372944dbdb1c964db14e0e
|
|
BLAKE2b-256 checksum How to use checksums |
029841874a2b77f5028c6a3d3430916ed19ae0751c81a7579b3085094b99f01c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp312-cp312-macosx_26_0_arm64.whl
| Download URL | saqura-1.0.10-cp312-cp312-macosx_26_0_arm64.whl |
|---|---|
| Size | 325.5 kB |
| Tags | CPython 3.12 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8fdd7d48715e2385f7dc98cd4821e8ec64b0e1d2a9fb5ab6b1dc1077d78feb71
|
|
BLAKE2b-256 checksum How to use checksums |
b4ee73ab144877c34dcf1904de1ddbd7b7aa8f4077259272565216131e07fcb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp311-cp311-win_amd64.whl
| Download URL | saqura-1.0.10-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 316.0 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2424a4b03f0d95306bb2a3a7ca126de9d71cf4d205363df52e185d8c6a47ffae
|
|
BLAKE2b-256 checksum How to use checksums |
cb262b37a557d9f2799c283991cb32f83543fce2b5e9c14772959158037a4743
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | saqura-1.0.10-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 508.8 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
33f46542a0ca79fe378c6f8ef30a0fab9a340dfa7ca027ca9edc0863ae300d7e
|
|
BLAKE2b-256 checksum How to use checksums |
43f6f4a9c45e6536a7e3b7ec058ebfb94495028937ed856323d5b7c54053d931
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | saqura-1.0.10-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 475.7 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
07d08ed285ce6683e0ea1312456378d32baab8139646abe5a596abc4b7222a39
|
|
BLAKE2b-256 checksum How to use checksums |
29a99c26d6c1389a56de3295b6b786c1dcf786229b4d8814c1c51502d104725d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp311-cp311-macosx_26_0_arm64.whl
| Download URL | saqura-1.0.10-cp311-cp311-macosx_26_0_arm64.whl |
|---|---|
| Size | 316.9 kB |
| Tags | CPython 3.11 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
790e75d9fb8a5648af10383953c1bf67d67c6bb9bf60ed653b7dc032c09b441c
|
|
BLAKE2b-256 checksum How to use checksums |
a6371c6d949a292b5325090fd099c9a4b393995150b032edcac381a8547f260a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp310-cp310-win_amd64.whl
| Download URL | saqura-1.0.10-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 297.5 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d6c606ef95e2cc117c9aab31dc88caeca82cac804d5226acf028cc1e06d5abb6
|
|
BLAKE2b-256 checksum How to use checksums |
4ba83b028aa02099da4b859a784cfd9ef2e75fa9fa88bbdaeb3f4b7471fbeebf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | saqura-1.0.10-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 493.9 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
ae0ff22a42b5c086ddfe847d6be862b679b2400f2fe5ed776eae55948e3863c6
|
|
BLAKE2b-256 checksum How to use checksums |
367415a543e87434b7fe1e0b28e3a1f0f3ab2effa70ae6d26dacbad974a18742
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | saqura-1.0.10-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 462.3 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
1a7c93902cc86f15f95a565c715a9fcdd07a076632382dc721168c227198ebed
|
|
BLAKE2b-256 checksum How to use checksums |
7cec6de66de24c00d3ceb76b19621bc91116b846fbefa37314693864ab16dc14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|
Release files / saqura-1.0.10-cp310-cp310-macosx_26_0_arm64.whl
| Download URL | saqura-1.0.10-cp310-cp310-macosx_26_0_arm64.whl |
|---|---|
| Size | 308.8 kB |
| Tags | CPython 3.10 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
87e188169e998c4a3672e362ae713c046448a27b415d64665ec6df843e35b818
|
|
BLAKE2b-256 checksum How to use checksums |
770ebcb510a3f4cf5fc3bff0cbfabe40f2634a1306c9c788ae16cb551fb3c769
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.7
|