1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//! # pqc-sig — Post-Quantum Digital Signatures
//!
//! A standalone, WASM-compatible library implementing post-quantum signature algorithms:
//!
//! - **ML-DSA** (NIST FIPS 204) — Primary standard, pure Rust, WASM-native
//! - [`fips204::MlDsa44Keypair`] — Security Level 2
//! - [`fips204::MlDsa65Keypair`] — Security Level 3 (recommended)
//! - [`fips204::MlDsa87Keypair`] — Security Level 5
//!
//! - **SLH-DSA** (NIST FIPS 205) — Stateless hash-based, pure Rust, WASM-native
//! - SHA2 variants: 128s/128f, 192s/192f, 256s/256f
//! - SHAKE variants: 128s/128f, 192s/192f, 256s/256f
//!
//! - **FN-DSA** (NIST FIPS 206 / Falcon) — requires `fndsa` feature, pure Rust, WASM-compatible
//! - [`fips206::FnDsa512Keypair`] — Security Level 1
//! - [`fips206::FnDsa1024Keypair`] — Security Level 5
//!
//! - **Hybrid Ed25519 + ML-DSA-65** — requires `hybrid` feature; classical/PQC combiner for migration bridging
//! - [`hybrid::HybridSigner`]
//!
//! ## Quick Start
//!
//! ```rust,no_run
//! use pqc_sig::fips204::MlDsa65Keypair;
//! use rand::rngs::OsRng;
//!
//! // Generate a keypair
//! let keypair = MlDsa65Keypair::generate(&mut OsRng).unwrap();
//! let pk = keypair.public_key();
//!
//! // Sign a message
//! let message = b"Hello, post-quantum world!";
//! let signature = keypair.sign(&mut OsRng, message).unwrap();
//!
//! // Verify the signature
//! MlDsa65Keypair::verify(&pk, message, &signature).unwrap();
//! ```
//!
//! ## WASM Usage
//!
//! Build with the `wasm` feature for `wasm32-unknown-unknown` targets:
//! ```toml
//! pqc-sig = { version = "0.2", features = ["wasm"] }
//! ```
//!
//! ## `no_std` Support
//!
//! This crate is `no_std`-compatible with `alloc`. Disable the `std` feature:
//! ```toml
//! pqc-sig = { version = "0.2", default-features = false }
//! ```
extern crate alloc;
// ── Public Modules ────────────────────────────────────────────────────────────
/// Error types for all signature operations.
/// Wire types: public keys, secret keys, signatures, algorithm identifiers.
/// ML-DSA (NIST FIPS 204) — pure Rust, WASM-native.
/// SLH-DSA (NIST FIPS 205) — pure Rust, WASM-native.
/// FN-DSA / Falcon (NIST FIPS 206) — requires `fndsa` feature, pure Rust, WASM-compatible.
/// Hybrid classical + post-quantum signatures (Ed25519 + ML-DSA-65) — requires `hybrid` feature.
/// WASM bindings via `wasm-bindgen` — requires `wasm` feature.
// ── Top-Level Re-exports ──────────────────────────────────────────────────────
pub use ;
pub use ;
// FIPS 204 — ML-DSA
pub use ;
// FIPS 205 — SLH-DSA
pub use ;
// FIPS 206 — FN-DSA (feature-gated)
pub use ;
// Hybrid Ed25519 + ML-DSA-65 (feature-gated)
pub use ;
// ── Crate Metadata ────────────────────────────────────────────────────────────
/// Crate version string.
pub const VERSION: &str = env!;
/// Primary signature algorithm (ML-DSA-65, FIPS 204 Level 3).
pub const PRIMARY_ALGORITHM: &str = "ML-DSA-65";
/// Audit signature algorithm (ML-DSA-87, FIPS 204 Level 5).
pub const AUDIT_ALGORITHM: &str = "ML-DSA-87";
/// WASM integrity algorithm (SLH-DSA-SHA2-128s, FIPS 205).
pub const WASM_INTEGRITY_ALGORITHM: &str = "SLH-DSA-SHA2-128s";
/// Compact signature algorithm (FN-DSA-512, FIPS 206).
pub const COMPACT_ALGORITHM: &str = "FN-DSA-512";