shrimps_signer/lib.rs
1//! # shrimps-signer
2//!
3//! Post-quantum [SHRIMPS](https://delvingbitcoin.org/t/shrimps-2-5-kb-post-quantum-signatures-across-multiple-stateful-devices/2355)
4//! signature scheme implementation: WOTS+ one-time signatures over a Merkle tree,
5//! designed for efficient verification inside a STARK prover.
6//!
7//! ## Parameters (128-bit post-quantum security)
8//!
9//! | Parameter | Value | Meaning |
10//! |-----------|-------|---------|
11//! | **N** | 16 | Hash output bytes (SHA-256 truncated) |
12//! | **W** | 16 | Winternitz parameter (4-bit digits) |
13//! | **H** | 12 | Merkle tree height (4096 one-time keys) |
14//! | **LEN** | 35 | WOTS+ chains per signature (32 msg + 3 checksum) |
15//!
16//! Compact signature size: **772 bytes** (4 + 560 + 192 + 16).
17//!
18//! ## Usage
19//!
20//! ```rust
21//! use shrimps_signer::shrimps::{keygen, sign, verify};
22//! use shrimps_signer::state::MemoryStateTracker;
23//!
24//! let seed = [0u8; 32];
25//! let keypair = keygen(&seed);
26//!
27//! let mut state = MemoryStateTracker::new();
28//! let sig = sign(&keypair, b"hello shrimps", 0, &mut state).unwrap();
29//!
30//! verify(&keypair.public_key, &keypair.pub_seed, b"hello shrimps", &sig).unwrap();
31//! ```
32//!
33//! ## Modules
34//!
35//! - [`params`] — Scheme constants (N, W, H, LEN, etc.)
36//! - [`hash`] — SHA-256 truncated hashing and PRF
37//! - [`wots`] — WOTS+ key generation, signing, and verification
38//! - [`merkle`] — Merkle tree construction, auth paths, and root computation
39//! - [`shrimps`] — Top-level keygen, sign, verify API
40//! - [`state`] — Leaf index tracking to prevent one-time signature reuse
41//! - [`error`] — Error types
42//! - [`testvec`] — Test vector generation for cross-language validation
43
44pub mod params;
45pub mod hash;
46pub mod wots;
47pub mod merkle;
48pub mod shrimps;
49pub mod testvec;
50pub mod error;
51pub mod state;