python binding

This commit is contained in:
eschorn1 2024-03-15 11:36:47 -05:00
parent 4a8c3d215f
commit bf62d98c42
3 changed files with 45 additions and 13 deletions

View file

@ -5,10 +5,11 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## 0.1.2 (2024-03-TK)
## 0.1.2 (2024-03-15)
- Internal improvements, removed dependency on generic-array
- Supporting examples for benchmarking, CT measurements, WASM development
- Internal improvements, removed dependency on generic-array, MSRV at 1.70
- Supporting examples for benchmarking, CT measurements, WASM development,
C FFI, and Python bindings
- Additional testcases
## 0.1.1 (2024-02-14)

View file

@ -7,14 +7,14 @@
![Rust Version][rustc-image]
[FIPS 205] (Initial Public Draft) Stateless Hash-Based Digital Signature Standard written in pure Rust for server,
desktop, browser and embedded applications.
desktop, browser and embedded applications. The code repository includes C FFI and Python bindings.
This crate implements the FIPS 205 **draft** standard in pure Rust with minimal and mainstream dependencies. All
twelve (!!) 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 205 as they become available.
full range of applications from server 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 205 as they become available.
See <https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.205.ipd.pdf> for a full description of the target functionality.
@ -31,7 +31,7 @@ let msg_bytes = [0u8, 1, 2, 3, 4, 5, 6, 7];
// Generate key pair and signature
let (pk1, sk) = slh_dsa_shake_128s::try_keygen_vt()?; // Generate both public and secret keys
let sig_bytes = sk.try_sign_ct(&msg_bytes, true)?; // Use the secret key to generate a msg signature
let sig_bytes = sk.try_sign_ct(&msg_bytes, true)?; // Use the secret key to generate signature
// Serialize the public key, and send with message and signature bytes
let (pk_send, msg_send, sig_send) = (pk1.into_bytes(), msg_bytes, sig_bytes);
@ -45,8 +45,8 @@ assert!(v);
# }
~~~
The Rust [Documentation][docs-link] lives under each **Module** corresponding to the desired
[security parameter](#modules) below.
The detailed Rust [Documentation][docs-link] lives under each **Module** corresponding to the
desired [security parameter](#modules) below.
## Notes

View file

@ -4,14 +4,45 @@
#![deny(missing_docs)]
#![doc = include_str!("../README.md")]
// Implements FIPS 205 draft Stateless Hash-Based Digital Signature Standard.
// See <https://csrc.nist.gov/pubs/fips/205/ipd>
//
// Algorithm 1 toInt(X, n) --> helpers.rs
// Algorithm 2 toByte(x, n) --> helpers.rs
// Algorithm 3 base_2b (X, b, out_len) --> helpers.rs
// Algorithm 4 chain(X, i, s, PK.seed, ADRS) --> wots.rs
// Algorithm 5 wots_PKgen(SK.seed, PK.seed, ADRS) --> wots.rs
// Algorithm 6 wots_sign(M, SK.seed, PK.seed, ADRS) --> wots.rs
// Algorithm 7 wots_PKFromSig(sig, M, PK.seed, ADRS) --> wots.rs
// Algorithm 8 xmss_node(SK.seed, i, z, PK.seed, ADRS) --> xmss.rs
// Algorithm 9 xmss_sign(M, SK.seed, idx, PK.seed, ADRS) --> xmss.rs
// Algorithm 10 xmss_PKFromSig(idx, SIGXMSS, M, PK.seed, ADRS) --> xmss.rs
// Algorithm 11 ht_sign(M, SK.seed, PK.seed, idxtree, idxleaf) --> hypertree.rs
// Algorithm 12 ht_verify(M, SIGHT, PK.seed, idxtree, idxleaf, PK.root) --> hypertree.rs
// Algorithm 13 fors_SKgen(SK.seed, PK.seed, ADRS, idx) --> fors.rs
// Algorithm 14 fors_node(SK.seed, i, z, PK.seed, ADRS) --> fors.rs
// Algorithm 15 fors_sign(md, SK.seed, PK.seed, ADRS) --> fors.rs
// Algorithm 16 fors_pkFromSig(SIGFORS, md, PK.seed, ADRS) --> fors.rs
// Algorithm 17 slh_keygen() --> slh.rs
// Algorithm 18 slh_sign(M, SK) --> slh.rs
// Algorithm 19 slh_verify(M, SIG, PK) --> slh.rs
// Algorithm 20 gen_len2 (n, lgw) --> precomputed
// Fairly elaborate hashing is found in hashers.rs
// Signature serialize/deserialize and Adrs support can be found in helpers.rs
// types are in types.rs, traits are in traits.rs, and lib.rs provides wrappers into slh.rs
// TODO: Roadmap
// 1. Additional (external) top-level test vectors
// 2. Implement fuzz harness for completeness
// 3. Revisit internal checks/asserts/ensure
// 4. Expansion of testing/functionality for C FFI and Python bindings
// 5. Better exposure of randomize, rng support for testing FFI/Python
/// Implements FIPS 205 draft Stateless Hash-Based Digital Signature Standard.
/// See <https://csrc.nist.gov/pubs/fips/205/ipd>
/// All functionality is covered by traits, such that consumers can utilize trait objects as desired.
pub mod traits;
mod fors;
mod hashers;
mod helpers;