diff --git a/src/algs.rs b/src/algs.rs index 017758d..72072df 100644 --- a/src/algs.rs +++ b/src/algs.rs @@ -39,7 +39,7 @@ pub(crate) fn to_int(x: &[u8], n: u32) -> u64 { /// /// Input: Integer `x`, string length `n`.
/// Output: Byte string of length `n` containing binary representation of `x` in big-endian byte-order. -pub(crate) fn to_byte(x: u16, n: u32) -> [u8; ((crate::LEN2 * crate::LGW + 7) / 8) as usize] { +pub(crate) fn to_byte(x: u32, n: u32) -> [u8; ((crate::LEN2 * crate::LGW + 7) / 8) as usize] { let mut s = [0u8; ((crate::LEN2 * crate::LGW + 7) / 8) as usize]; // Size fixed across all profiles (2) debug_assert_eq!(n, ((crate::LEN2 * crate::LGW + 7) / 8)); // just in case life changes debug_assert_eq!(n, 2); // optimize: this resolves into a two-byte (be) write! @@ -68,7 +68,7 @@ pub(crate) fn to_byte(x: u16, n: u32) -> [u8; ((crate::LEN2 * crate::LGW + 7) / /// Algorithm 3: `base_2^b(X, b, out_len)` on page 15. /// Compute the base 2^b representation of X. /// -/// Input: Byte string `X` of length at least ceil(out_len·b/8), integer `b`, output length `out_len`.
+/// Input: Byte string `X` of length at least `ceil(out_len·b/8)`, integer `b`, output length `out_len`.
/// Output: Array of `out_len` integers in the range `[0, . . . , 2^b − 1]`. pub(crate) fn base_2b(x: &[u8], b: u32, out_len: u32, baseb: &mut [u32]) { debug_assert!(x.len() >= (out_len * b).div_ceil(8) as usize); @@ -260,7 +260,7 @@ pub(crate) fn wots_sign, LEN> = GenericArray::default(); // 1: csum ← 0 - let mut csum = 0; + let mut csum = 0_u32; // 2: // 3: msg ← base_2b (M, lgw , len1 ) ▷ Convert message to base w @@ -324,7 +324,7 @@ pub(crate) fn wots_pk_from_sig( hashers, sk_seed, - i * 2u32.pow(A::to_u32() - j) + s as u32, + i * 2u32.pow(A::to_u32() - j) + s, j, pk_seed, adrs, @@ -933,7 +933,7 @@ pub(crate) fn fors_pk_from_sig< adrs.set_tree_height(0); // 5: ADRS.setTreeIndex(i · 2^a + indices[i]) - adrs.set_tree_index(i * 2u32.pow(A::to_u32()) + indices[i as usize] as u32); + adrs.set_tree_index(i * 2u32.pow(A::to_u32()) + indices[i as usize]); // 6: node[0] ← F(PK.seed, ADRS, sk) let mut node_0 = (hashers.f)(pk_seed, &adrs, &sk); @@ -1192,7 +1192,7 @@ pub(crate) fn slh_verify< // 8: // 9: digest ← Hmsg(R, PK.seed, PK.root, M) ▷ Compute message digest - let digest = (hashers.h_msg)(&r, &pk.pk_seed, &pk.pk_root, m); + let digest = (hashers.h_msg)(r, &pk.pk_seed, &pk.pk_root, m); // 10: md ← digest[0 : ceil(k·a/8)] ▷ first ceil(k·a/8) bytes let index1 = (K::to_usize() * A::to_usize()).div_ceil(8); diff --git a/src/hashers.rs b/src/hashers.rs index 7482e11..46dcc38 100644 --- a/src/hashers.rs +++ b/src/hashers.rs @@ -1,6 +1,11 @@ use crate::types::Adrs; use generic_array::{ArrayLength, GenericArray}; +// TODO: We can do a bit better extracting common functionality versus parameter sets... + + +// Holds hasher function references; constructed by each wrapper +#[allow(clippy::type_complexity)] pub(crate) struct Hashers { pub(crate) h_msg: fn(&[u8], &[u8], &[u8], &[u8]) -> GenericArray, pub(crate) prf: fn(&[u8], &[u8], &Adrs) -> GenericArray, @@ -29,70 +34,63 @@ pub(crate) mod shake { use sha3::Shake256; - pub fn shake256_a(input: &[&[u8]], out: &mut [u8]) { + #[allow(clippy::module_name_repetitions)] + pub fn shake256(input: &[&[u8]], out: &mut [u8]) { let mut hasher = Shake256::default(); input.iter().for_each(|item| hasher.update(item)); let mut reader = hasher.finalize_xof(); reader.read(out); } + pub(crate) fn h_msg( r: &[u8], pk_seed: &[u8], pk_root: &[u8], m: &[u8], ) -> GenericArray { let mut digest: GenericArray = GenericArray::default(); - shake256_a(&[&r, &pk_seed, &pk_root, m], &mut digest); + shake256(&[&r, &pk_seed, &pk_root, m], &mut digest); digest } + + #[allow(clippy::similar_names)] // pk_seed and sk_seed pub(crate) fn prf( pk_seed: &[u8], sk_seed: &[u8], adrs: &Adrs, ) -> GenericArray { let mut digest: GenericArray = GenericArray::default(); - shake256_a(&[pk_seed, &adrs.to_32_bytes(), sk_seed], &mut digest); // Note that the spec swaps order of last to params + shake256(&[pk_seed, &adrs.to_32_bytes(), sk_seed], &mut digest); // Note that the spec swaps order of last to params digest } + pub(crate) fn prf_msg( sk_prf: &[u8], opt_rand: &[u8], m: &[u8], ) -> GenericArray { let mut digest: GenericArray = GenericArray::default(); - shake256_a(&[sk_prf, opt_rand, m], &mut digest); + shake256(&[sk_prf, opt_rand, m], &mut digest); digest } + pub(crate) fn f(pk_seed: &[u8], adrs: &Adrs, m1: &[u8]) -> GenericArray { let mut digest: GenericArray = GenericArray::default(); - shake256_a(&[pk_seed, &adrs.to_32_bytes(), m1], &mut digest); + shake256(&[pk_seed, &adrs.to_32_bytes(), m1], &mut digest); digest } + pub(crate) fn h( pk_seed: &[u8], adrs: &Adrs, m1: &[u8], m2: &[u8], ) -> GenericArray { let mut digest: GenericArray = GenericArray::default(); - shake256_a(&[pk_seed, &adrs.to_32_bytes(), m1, m2], &mut digest); + shake256(&[pk_seed, &adrs.to_32_bytes(), m1, m2], &mut digest); digest } - // 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 { - let mut hasher = Shake256::default(); - hasher.update(pk_seed); - hasher.update(&adrs.to_32_bytes()); - ml.iter().for_each(|item| hasher.update(item)); - let mut reader = hasher.finalize_xof(); - let mut result = GenericArray::default(); - reader.read(&mut result); - result - } - // 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 { + // Perhaps there is a more elegant way to covert ml into list of bytes + pub(crate) fn t_l( + pk_seed: &[u8], adrs: &Adrs, ml: &GenericArray, X>, + ) -> GenericArray { let mut hasher = Shake256::default(); hasher.update(pk_seed); hasher.update(&adrs.to_32_bytes()); @@ -104,20 +102,27 @@ pub(crate) mod shake { } } + +#[cfg(any( +feature = "slh_dsa_sha2_128f", +feature = "slh_dsa_sha2_128s" +))] pub(crate) mod sha2_cat_1 { use crate::types::Adrs; use core::cmp::min; use generic_array::{ArrayLength, GenericArray}; use sha2::{Digest, Sha256}; - // Requires length of output less than or equal to 32 byte digeest + pub fn sha2_256(input: &[&[u8]], out: &mut [u8]) { + debug_assert!(out.len() <= 32); let mut hasher = Sha256::new(); input.iter().for_each(|item| hasher.update(item)); let result = hasher.finalize(); out.copy_from_slice(&result[0..out.len()]); } + pub(crate) fn h_msg( r: &[u8], pk_seed: &[u8], pk_root: &[u8], m: &[u8], ) -> GenericArray { @@ -137,6 +142,8 @@ pub(crate) mod sha2_cat_1 { result } + + #[allow(clippy::similar_names)] // pk_seed and sk_seed pub(crate) fn prf( pk_seed: &[u8], sk_seed: &[u8], adrs: &Adrs, ) -> GenericArray { @@ -165,7 +172,7 @@ pub(crate) mod sha2_cat_1 { inner_hasher.update(&padded[..]); inner_hasher.update(a0); inner_hasher.update(b1); - for p in padded.iter_mut() { + for p in &mut padded { *p ^= 0x6a; } let mut outer_hasher = Sha256::new(); @@ -185,6 +192,7 @@ pub(crate) mod sha2_cat_1 { digest } + pub(crate) fn f(pk_seed: &[u8], adrs: &Adrs, m1: &[u8]) -> GenericArray { let mut digest: GenericArray = GenericArray::default(); let to_byte = [0u8; 64]; @@ -200,6 +208,7 @@ pub(crate) mod sha2_cat_1 { digest } + pub(crate) fn h( pk_seed: &[u8], adrs: &Adrs, m1: &[u8], m2: &[u8], ) -> GenericArray { @@ -218,7 +227,8 @@ pub(crate) mod sha2_cat_1 { digest } - // Until a more elegant way is found to covert ml into list of bytes + + // Perhaps there is a more elegant way to covert ml into list of bytes pub(crate) fn t_l( pk_seed: &[u8], adrs: &Adrs, ml: &GenericArray, LEN>, ) -> GenericArray { @@ -227,24 +237,7 @@ pub(crate) mod sha2_cat_1 { let mut hasher = Sha256::new(); hasher.update(pk_seed); hasher.update(&to_byte[0..(64 - N::to_usize())]); - hasher.update(&adrs.to_22_bytes()); - ml.iter().for_each(|item| hasher.update(item)); - let digest = hasher.finalize(); - result.copy_from_slice(&digest[0..N::to_usize()]); - result - } - - // 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 { - let mut result = GenericArray::default(); - let to_byte = [0u8; 64]; - let mut hasher = Sha256::new(); - hasher.update(pk_seed); - hasher.update(&to_byte[0..(64 - N::to_usize())]); - hasher.update(&adrs.to_22_bytes()); + hasher.update(adrs.to_22_bytes()); ml.iter().for_each(|item| hasher.update(item)); let digest = hasher.finalize(); result.copy_from_slice(&digest[0..N::to_usize()]); @@ -252,28 +245,38 @@ pub(crate) mod sha2_cat_1 { } } + +#[cfg(any( +feature = "slh_dsa_sha2_192f", +feature = "slh_dsa_sha2_192s", +feature = "slh_dsa_sha2_256f", +feature = "slh_dsa_sha2_256s" +))] pub(crate) mod sha2_cat_3_5 { use crate::types::Adrs; use core::cmp::min; use generic_array::{ArrayLength, GenericArray}; use sha2::{Digest, Sha256, Sha512}; - // Requires length of output less than or equal to 32 byte digeest + pub fn sha2_256(input: &[&[u8]], out: &mut [u8]) { + debug_assert!(out.len() <= 32); let mut hasher = Sha256::new(); input.iter().for_each(|item| hasher.update(item)); let result = hasher.finalize(); out.copy_from_slice(&result[0..out.len()]); } - // Requires length of output less than or equal to 32 byte digeest + pub fn sha2_512(input: &[&[u8]], out: &mut [u8]) { + debug_assert!(out.len() <= 64); let mut hasher = Sha512::new(); input.iter().for_each(|item| hasher.update(item)); let result = hasher.finalize(); out.copy_from_slice(&result[0..out.len()]); } + pub(crate) fn h_msg( r: &[u8], pk_seed: &[u8], pk_root: &[u8], m: &[u8], ) -> GenericArray { @@ -290,10 +293,11 @@ pub(crate) mod sha2_cat_3_5 { start += 64; counter += 1; } - //println!("h_msg: {:?}", &result[0..4]); result } + + #[allow(clippy::similar_names)] // pk_seed and sk_seed pub(crate) fn prf( pk_seed: &[u8], sk_seed: &[u8], adrs: &Adrs, ) -> GenericArray { @@ -308,10 +312,10 @@ pub(crate) mod sha2_cat_3_5 { ], &mut digest, ); // Note that the spec swaps order of last to params - //println!("prf: {:?}", &digest[0..4]); digest } + pub fn hmac_sha_512(key: &[u8], a0: &[u8], b1: &[u8]) -> [u8; 64] { let k2 = key; let mut padded = [0x36; 128]; @@ -322,7 +326,7 @@ pub(crate) mod sha2_cat_3_5 { inner_hasher.update(&padded[..]); inner_hasher.update(a0); inner_hasher.update(b1); - for p in padded.iter_mut() { + for p in &mut padded { *p ^= 0x6a; } let mut outer_hasher = Sha512::new(); @@ -336,13 +340,12 @@ pub(crate) mod sha2_cat_3_5 { sk_prf: &[u8], opt_rand: &[u8], m: &[u8], ) -> GenericArray { let mut digest: GenericArray = GenericArray::default(); - //sha2_256(&[sk_prf, opt_rand, m], &mut digest); let xxx = hmac_sha_512(sk_prf, opt_rand, m); digest.copy_from_slice(&xxx[0..N::to_usize()]); - //println!("prf_msg: {:?}", &digest[0..4]); digest } + pub(crate) fn f(pk_seed: &[u8], adrs: &Adrs, m1: &[u8]) -> GenericArray { let mut digest: GenericArray = GenericArray::default(); let to_byte = [0u8; 64]; @@ -355,10 +358,10 @@ pub(crate) mod sha2_cat_3_5 { ], &mut digest, ); - //println!("f: {:?}", &digest[0..4]); digest } + pub(crate) fn h( pk_seed: &[u8], adrs: &Adrs, m1: &[u8], m2: &[u8], ) -> GenericArray { @@ -374,11 +377,11 @@ pub(crate) mod sha2_cat_3_5 { ], &mut digest, ); - //println!("h: {:?} pkseed {:?} m1 {:?}", &digest[0..4], pk_seed[0], m1[0]); digest } - // Until a more elegant way is found to covert ml into list of bytes + + // Perhaps there is a more elegant way to covert ml into list of bytes pub(crate) fn t_l( pk_seed: &[u8], adrs: &Adrs, ml: &GenericArray, LEN>, ) -> GenericArray { @@ -387,24 +390,7 @@ pub(crate) mod sha2_cat_3_5 { let mut hasher = Sha512::new(); hasher.update(pk_seed); hasher.update(&to_byte[0..(128 - N::to_usize())]); - hasher.update(&adrs.to_22_bytes()); - ml.iter().for_each(|item| hasher.update(item)); - let digest = hasher.finalize(); - result.copy_from_slice(&digest[0..N::to_usize()]); - result - } - - // 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 { - let mut result = GenericArray::default(); - let to_byte = [0u8; 128]; - let mut hasher = Sha512::new(); - hasher.update(pk_seed); - hasher.update(&to_byte[0..(128 - N::to_usize())]); - hasher.update(&adrs.to_22_bytes()); + hasher.update(adrs.to_22_bytes()); ml.iter().for_each(|item| hasher.update(item)); let digest = hasher.finalize(); result.copy_from_slice(&digest[0..N::to_usize()]); diff --git a/src/lib.rs b/src/lib.rs index 34d130e..c894ae2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,8 +8,10 @@ // 1. General clean-up // 2. SerDes on keys // 3. Proper traits and non-rng functions -// 4. Separate into proper files -// 5. Doc, of course! +// 4. Adrs as raw bytes +// 5. clippy +// 6. Separate into proper files +// 7. Doc, of course! mod algs; mod hashers; mod test; @@ -33,7 +35,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::(rng, &HASHERS) + crate::algs::slh_keygen_with_rng::(rng, &HASHERS) } /// blah @@ -41,7 +43,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::( + let sig = crate::algs::slh_sign_with_rng::( rng, &HASHERS, &m, &sk, randomize, ); sig.map(|s| s.deserialize()) @@ -50,8 +52,8 @@ macro_rules! functionality { /// blah #[must_use] pub fn slh_verify(m: &[u8], sig_bytes: &[u8; SIG_LEN], pk: &SlhPublicKey) -> bool { - let sig = SlhDsaSig::::serialize(sig_bytes); - crate::algs::slh_verify::(&HASHERS, &m, &sig, &pk) + let sig = SlhDsaSig::::serialize(sig_bytes); + crate::algs::slh_verify::(&HASHERS, &m, &sig, &pk) } #[cfg(test)] @@ -82,7 +84,7 @@ macro_rules! functionality { /// TKTK #[cfg(feature = "slh_dsa_sha2_128s")] pub mod slh_dsa_sha2_128s { - use crate::hashers::sha2_cat_1::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::sha2_cat_1::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U12, U14, U16, U2, U3, U30, U63, U7, U9}; @@ -93,12 +95,12 @@ pub mod slh_dsa_sha2_128s { type A = U12; type K = U14; type M = U30; - type LEN = Sum, U3>; + type Len = Sum, U3>; //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: t_l }; functionality!(); } @@ -107,7 +109,7 @@ pub mod slh_dsa_sha2_128s { /// TKTK #[cfg(feature = "slh_dsa_shake_128s")] pub mod slh_dsa_shake_128s { - use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U12, U14, U16, U2, U3, U30, U63, U7, U9}; @@ -118,12 +120,12 @@ pub mod slh_dsa_shake_128s { type A = U12; type K = U14; type M = U30; - type LEN = Sum, U3>; + type Len = Sum, U3>; //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: t_l }; functionality!(); } @@ -132,7 +134,7 @@ pub mod slh_dsa_shake_128s { /// TKTK #[cfg(feature = "slh_dsa_sha2_128f")] pub mod slh_dsa_sha2_128f { - use crate::hashers::sha2_cat_1::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::sha2_cat_1::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U16, U2, U22, U3, U33, U34, U6, U66}; @@ -143,12 +145,12 @@ pub mod slh_dsa_sha2_128f { type A = U6; type K = U33; type M = U34; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 17088; //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: t_l }; functionality!(); } @@ -157,7 +159,7 @@ pub mod slh_dsa_sha2_128f { /// TKTK #[cfg(feature = "slh_dsa_shake_128f")] pub mod slh_dsa_shake_128f { - use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U16, U2, U22, U3, U33, U34, U6, U66}; @@ -168,12 +170,12 @@ pub mod slh_dsa_shake_128f { type A = U6; type K = U33; type M = U34; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 17088; //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: t_l }; functionality!(); } @@ -182,7 +184,7 @@ pub mod slh_dsa_shake_128f { /// TKTK #[cfg(feature = "slh_dsa_sha2_192s")] pub mod slh_dsa_sha2_192s { - use crate::hashers::sha2_cat_3_5::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::sha2_cat_3_5::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U14, U17, U2, U24, U3, U39, U63, U7, U9}; @@ -193,12 +195,12 @@ pub mod slh_dsa_sha2_192s { type A = U14; type K = U17; type M = U39; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 16224; //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: t_l }; functionality!(); } @@ -207,7 +209,7 @@ pub mod slh_dsa_sha2_192s { /// TKTK #[cfg(feature = "slh_dsa_shake_192s")] pub mod slh_dsa_shake_192s { - use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U14, U17, U2, U24, U3, U39, U63, U7, U9}; @@ -218,12 +220,12 @@ pub mod slh_dsa_shake_192s { type A = U14; type K = U17; type M = U39; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 16224; //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: t_l }; functionality!(); } @@ -232,7 +234,7 @@ pub mod slh_dsa_shake_192s { /// TKTK #[cfg(feature = "slh_dsa_sha2_192f")] pub mod slh_dsa_sha2_192f { - use crate::hashers::sha2_cat_3_5::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::sha2_cat_3_5::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U2, U22, U24, U3, U33, U42, U66, U8}; @@ -243,12 +245,12 @@ pub mod slh_dsa_sha2_192f { type A = U8; type K = U33; type M = U42; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 35664; //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: t_l }; functionality!(); } @@ -257,7 +259,7 @@ pub mod slh_dsa_sha2_192f { /// TKTK #[cfg(feature = "slh_dsa_shake_192f")] pub mod slh_dsa_shake_192f { - use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U2, U22, U24, U3, U33, U42, U66, U8}; @@ -268,12 +270,12 @@ pub mod slh_dsa_shake_192f { type A = U8; type K = U33; type M = U42; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 35664; //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: t_l }; functionality!(); } @@ -282,7 +284,7 @@ pub mod slh_dsa_shake_192f { /// TKTK #[cfg(feature = "slh_dsa_sha2_256s")] pub mod slh_dsa_sha2_256s { - use crate::hashers::sha2_cat_3_5::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::sha2_cat_3_5::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U14, U2, U22, U3, U32, U47, U64, U8}; @@ -293,12 +295,12 @@ pub mod slh_dsa_sha2_256s { type A = U14; type K = U22; type M = U47; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 29792; //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: t_l }; functionality!(); } @@ -307,7 +309,7 @@ pub mod slh_dsa_sha2_256s { /// TKTK #[cfg(feature = "slh_dsa_shake_256s")] pub mod slh_dsa_shake_256s { - use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U14, U2, U22, U3, U32, U47, U64, U8}; @@ -318,12 +320,12 @@ pub mod slh_dsa_shake_256s { type A = U14; type K = U22; type M = U47; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 29792; //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: t_l }; functionality!(); } @@ -332,7 +334,7 @@ pub mod slh_dsa_shake_256s { /// TKTK #[cfg(feature = "slh_dsa_sha2_256f")] pub mod slh_dsa_sha2_256f { - use crate::hashers::sha2_cat_3_5::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::sha2_cat_3_5::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U17, U2, U3, U32, U35, U4, U49, U68, U9}; @@ -343,12 +345,12 @@ pub mod slh_dsa_sha2_256f { type A = U9; type K = U35; type M = U49; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 49856; //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: t_l }; functionality!(); } @@ -357,7 +359,7 @@ pub mod slh_dsa_sha2_256f { /// TKTK #[cfg(feature = "slh_dsa_shake_256f")] pub mod slh_dsa_shake_256f { - use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l, t_len}; + use crate::hashers::shake::{f, h, h_msg, prf, prf_msg, t_l}; use crate::hashers::Hashers; use generic_array::typenum::{Prod, Sum, U17, U2, U3, U32, U35, U4, U49, U68, U9}; @@ -368,12 +370,12 @@ pub mod slh_dsa_shake_256f { type A = U9; type K = U35; type M = U49; - type LEN = Sum, U3>; + type Len = Sum, U3>; //const PK_LEN: usize = 32; const SIG_LEN: usize = 49856; //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: t_l }; functionality!(); }