libsoliton/soliton
Kamal Tufekcic 89f5be4f40
All checks were successful
CI / lint (push) Successful in 1m12s
CI / test-python (push) Successful in 1m37s
CI / test-zig (push) Successful in 1m30s
CI / test-wasm (push) Successful in 1m45s
CI / test (push) Successful in 13m14s
CI / miri (push) Successful in 12m49s
CI / build (push) Successful in 1m5s
CI / fuzz-regression (push) Successful in 1h17m23s
CI / publish (push) Successful in 1m38s
CI / publish-python (push) Successful in 1m28s
CI / publish-wasm (push) Successful in 1m21s
Fix MSRV, version bumps
Signed-off-by: Kamal Tufekcic <kamal@lo.sh>
2026-04-23 18:53:00 +03:00
..
benches initial commit 2026-04-23 15:51:07 +03:00
fuzz Fix MSRV, version bumps 2026-04-23 18:53:00 +03:00
src initial commit 2026-04-23 15:51:07 +03:00
tests initial commit 2026-04-23 15:51:07 +03:00
build.rs initial commit 2026-04-23 15:51:07 +03:00
Cargo.toml initial commit 2026-04-23 15:51:07 +03:00
LICENSE.md initial commit 2026-04-23 15:51:07 +03:00
README.md initial commit 2026-04-23 15:52:12 +03:00

libsoliton

Pure-Rust post-quantum cryptographic library. Provides composite identity keys (X-Wing + ML-DSA-65), hybrid signatures, KEM-based authentication, asynchronous key exchange, double-ratchet message encryption, streaming AEAD, and encrypted storage — all without a C toolchain.

Features

  • Hybrid post-quantum: X-Wing (X25519 + ML-KEM-768) for KEM, Ed25519 + ML-DSA-65 for signatures
  • Double ratchet: KEM-based ratchet with per-epoch forward secrecy and post-compromise security
  • Streaming AEAD: Chunked XChaCha20-Poly1305 with random-access decrypt
  • Encrypted storage: Versioned key rings, community blobs, DM queue blobs
  • Zero-knowledge auth: KEM challenge-response proof of identity key possession
  • Pure Rust: No C dependencies, no system linker requirements, cross-compiles to WASM

Usage

use soliton::identity::generate_identity;
use soliton::primitives::sha3_256;

// Generate a post-quantum identity keypair
let id = generate_identity().unwrap();
let fingerprint = sha3_256::hash(id.public_key.as_bytes());

// Sign and verify
let sig = soliton::identity::hybrid_sign(&id.secret_key, b"hello").unwrap();
soliton::identity::hybrid_verify(&id.public_key, b"hello", &sig).unwrap();

See CHEATSHEET.md for the full API reference.

Documentation

License

AGPL-3.0-only