IntegrityChain: FIPS 204 Module-Lattice-Based Digital Signature Standard
FIPS 204 (Initial Public Draft) Module-Lattice-Based Digital Signature Standard written in pure Rust for server, desktop, browser and embedded applications.
This crate implements the FIPS 204 draft standard in pure Rust with minimal and mainstream dependencies. All
three security parameter sets are fully functional. The implementation does not require the standard library, e.g.
#[no_std], has no heap allocations, e.g. no alloc needed, and exposes the RNG so it is suitable for the full
range of applications down to the bare-metal. The API is stabilized and the code is heavily biased towards safety
and correctness; further performance optimizations will be implemented as the standard matures. This crate will
quickly follow any changes to FIPS 204 as they become available.
See https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.ipd.pdf for a full description of the target functionality.
The functionality is extremely simple to use, as demonstrated by the following example.
// Use the desired target parameter set.
use ml_dsa_44; // Could also be ml_dsa_65 or ml_dsa_87.
use ;
# use Error;
#
#
The Rust Documentation lives under each Module corresponding to the desired security parameter below.
Notes
- This crate is fully functional and corresponds to the first initial public draft of FIPS 204.
- Constant-time assurances target the source-code level only, and are a work in progress.
- Note that FIPS 204 places specific requirements on randomness per section 3.5.1, hence the exposed
RNG. - Requires Rust 1.70 or higher. The minimum supported Rust version may be changed in the future, but it will be done with a minor version bump.
- All on-by-default features of this library are covered by SemVer.
- This software is experimental and still under active development -- USE AT YOUR OWN RISK!
- Code repository contains extensive examples related to benchmarking, fuzzing, CT checks, embedded HW, and WASM use.
License
Contents are licensed under either the Apache License, Version 2.0 or MIT license at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.