From 946df93b0b17b5e628463f66a1d26a35fe2fecbb Mon Sep 17 00:00:00 2001 From: eschorn1 Date: Sat, 27 Jan 2024 18:58:56 -0600 Subject: [PATCH] hhh --- src/algs.rs | 16 ++++++++++------ src/hashers.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++-- src/lib.rs | 30 ++++++++++++++--------------- 3 files changed, 74 insertions(+), 24 deletions(-) diff --git a/src/algs.rs b/src/algs.rs index f532780..a2ecf0a 100644 --- a/src/algs.rs +++ b/src/algs.rs @@ -125,8 +125,8 @@ pub(crate) fn base_2b(x: &[u8], b: u32, out_len: usize, baseb: &mut [u64]) { /// Input: Input string `X`, start index `i`, number of steps `s`, public seed `PK.seed`, address `ADRS`.
/// Output: Value of `F` iterated `s` times on `X`. pub(crate) fn chain( - hashers: &Hashers, cap_x: GenericArray, i: usize, s: usize, pk_seed: &[u8], - adrs: &Adrs, + hashers: &Hashers, cap_x: GenericArray, i: usize, s: usize, + pk_seed: &[u8], adrs: &Adrs, ) -> Option> { let mut adrs = adrs.clone(); @@ -427,7 +427,8 @@ pub(crate) fn xmss_node< } else { // // 9: lnode ← xmss_node(SK.seed, 2 * i, z − 1, PK.seed, ADRS) - let lnode = xmss_node::(hashers, sk_seed, 2 * i, z - 1, pk_seed, &adrs)?; + let lnode = + xmss_node::(hashers, sk_seed, 2 * i, z - 1, pk_seed, &adrs)?; // 10: rnode ← xmss_node(SK.seed, 2 * i + 1, z − 1, PK.seed, ADRS) let rnode = @@ -467,7 +468,8 @@ pub(crate) fn xmss_sign< M: ArrayLength, N: ArrayLength, >( - hashers: &Hashers, m: &[u8], sk_seed: &[u8], idx: u32, pk_seed: &[u8], adrs: &Adrs, + hashers: &Hashers, m: &[u8], sk_seed: &[u8], idx: u32, pk_seed: &[u8], + adrs: &Adrs, ) -> Result, &'static str> { let mut adrs = adrs.clone(); let mut sig_xmss = XmssSig::default(); @@ -615,7 +617,8 @@ pub(crate) fn ht_sign< adrs.set_tree_address(idx_tree); // 4: SIG_tmp ← xmss_sign(M, SK.seed, idxleaf, PK.seed, ADRS) - let mut sig_tmp = xmss_sign::(hashers, m, sk_seed, idx_leaf, pk_seed, &adrs)?; + let mut sig_tmp = + xmss_sign::(hashers, m, sk_seed, idx_leaf, pk_seed, &adrs)?; // 5: SIG_HT ← SIG_tmp let mut sig_ht = HtSig::default(); @@ -642,7 +645,8 @@ pub(crate) fn ht_sign< adrs.set_tree_address(idx_tree); // 12: SIG_tmp ← xmss_sign(root, SK.seed, idx_leaf, PK.seed, ADRS) - sig_tmp = xmss_sign::(hashers, &root, sk_seed, idx_leaf, pk_seed, &adrs)?; + sig_tmp = + xmss_sign::(hashers, &root, sk_seed, idx_leaf, pk_seed, &adrs)?; // 13: SIG_HT ← SIG_HT ∥ SIG_tmp sig_ht.xmss_sigs[j as usize] = sig_tmp.clone(); diff --git a/src/hashers.rs b/src/hashers.rs index bc46b06..57782e3 100644 --- a/src/hashers.rs +++ b/src/hashers.rs @@ -31,7 +31,7 @@ pub(crate) mod shake { use sha3::Shake256; - pub(crate) fn shake256_a(input: &[&[u8]], out: &mut [u8]) { + fn shake256_a(input: &[&[u8]], out: &mut [u8]) { let mut hasher = Shake256::default(); input.iter().for_each(|item| hasher.update(item)); let mut reader = hasher.finalize_xof(); @@ -104,5 +104,53 @@ pub(crate) mod shake { reader.read(&mut result); result } - +} + +pub(crate) mod sha2_cat1 { + use crate::types::Adrs; + use generic_array::{ArrayLength, GenericArray}; + + + pub(crate) fn h_msg( + _r: &[u8], _pk_seed: &[u8], _pk_root: &[u8], _m: &[u8], + ) -> GenericArray { + unimplemented!() + } + + pub(crate) fn prf( + _pk_seed: &[u8], _sk_seed: &[u8], _adrs: &Adrs, + ) -> GenericArray { + unimplemented!() + } + + pub(crate) fn prf_msg( + _sk_prf: &[u8], _opt_rand: &[u8], _m: &[u8], + ) -> GenericArray { + unimplemented!() + } + + pub(crate) fn f(_pk_seed: &[u8], _adrs: &Adrs, _m1: &[u8]) -> GenericArray { + unimplemented!() + } + + pub(crate) fn h( + _pk_seed: &[u8], _adrs: &Adrs, _m1: &[u8], _m2: &[u8], + ) -> GenericArray { + unimplemented!() + } + + // Until a more elegant way is found to covert ml into list of bytes + pub(crate) fn t_l( + _pk_seed: &[u8], _adrs: &Adrs, _ml: &GenericArray, LEN>, + ) -> GenericArray { + unimplemented!() + } + + // TODO: Squash K and LEN versions + // Until a more elegant way is found to covert ml into list of bytes + pub(crate) fn t_len( + _pk_seed: &[u8], _adrs: &Adrs, _ml: &GenericArray, K>, + ) -> GenericArray { + unimplemented!() + } } diff --git a/src/lib.rs b/src/lib.rs index d2dcfc7..0f0979e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,17 +1,16 @@ #![no_std] #![deny(clippy::pedantic)] #![deny(warnings)] - - //#![deny(missing_docs)] -#[allow(dead_code)] + +/// TKTK crate doc +/// crate doc? // TODO // 1. General clean-up -// 2. revisit/clean hash functions -// 3. Doc, of course! - -// TKTK crate doc -/// crate doc? +// 2. Placeholders for other hash functions +// 3. Implement all suites (with internal found-trip test function) +// 4. Separate into proper files +// 5. Doc, of course! mod algs; mod hashers; mod test; @@ -23,7 +22,7 @@ const LGW: u32 = 4; const W: u32 = 16; const LEN2: u32 = 3; - +/// blah macro_rules! functionality { () => { use crate::types::{SlhDsaSig, SlhPrivateKey, SlhPublicKey}; @@ -35,7 +34,7 @@ macro_rules! functionality { pub fn slh_keygen_with_rng( rng: &mut impl CryptoRngCore, ) -> Result<(SlhPrivateKey, SlhPublicKey), &'static str> { - crate::algs::slh_keygen_with_rng::, U3>, M, N>(rng, &HASHERS) + crate::algs::slh_keygen_with_rng::(rng, &HASHERS) } /// blah @@ -43,7 +42,7 @@ macro_rules! functionality { pub fn slh_sign_with_rng( rng: &mut impl CryptoRngCore, m: &[u8], sk: &SlhPrivateKey, randomize: bool, ) -> Result<[u8; SIG_LEN], &'static str> { - let sig = crate::algs::slh_sign_with_rng::, U3>, M, N>( + let sig = crate::algs::slh_sign_with_rng::( rng, &HASHERS, &m, &sk, randomize, ); sig.map(|s| s.deserialize()) @@ -52,10 +51,8 @@ macro_rules! functionality { /// blah #[must_use] pub fn slh_verify(m: &[u8], sig_bytes: &[u8; SIG_LEN], pk: &SlhPublicKey) -> bool { - let sig = SlhDsaSig::, U3>, N>::serialize(sig_bytes); - crate::algs::slh_verify::, U3>, M, N>( - &HASHERS, &m, &sig, &pk, - ) + let sig = SlhDsaSig::::serialize(sig_bytes); + crate::algs::slh_verify::(&HASHERS, &m, &sig, &pk) } #[cfg(test)] @@ -100,7 +97,8 @@ pub mod slh_dsa_sha2_128s { //const PK_LEN: usize = 32; const SIG_LEN: usize = 7856; //const SK_LEN: usize = 0000; - static HASHERS: Hashers = Hashers:: { h_msg, prf, prf_msg, f, h, t_l, t_len }; + static HASHERS: Hashers = + Hashers:: { h_msg, prf, prf_msg, f, h, t_l, t_len }; functionality!(); }