From 92a7e20d3019bbd020bdc5dcd8fd96f56e31a8f7 Mon Sep 17 00:00:00 2001 From: therealyingtong Date: Thu, 12 Aug 2021 20:52:37 +0800 Subject: [PATCH] Remove sinsemilla_s_generators() function. Co-authored-by: Jack Grigg --- src/primitives/sinsemilla.rs | 5 +++-- src/primitives/sinsemilla/constants.rs | 27 ++++++++++---------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/primitives/sinsemilla.rs b/src/primitives/sinsemilla.rs index 49c20ab8..f08e5ff3 100644 --- a/src/primitives/sinsemilla.rs +++ b/src/primitives/sinsemilla.rs @@ -13,7 +13,7 @@ use self::addition::IncompletePoint; mod constants; mod sinsemilla_s; pub use constants::*; -pub use sinsemilla_s::*; +pub(crate) use sinsemilla_s::*; pub(crate) fn lebs2ip_k(bits: &[bool]) -> u32 { assert!(bits.len() == K); @@ -120,7 +120,8 @@ impl HashDomain { .chunks(K) .fold(IncompletePoint::from(self.Q), |acc, chunk| { let (S_x, S_y) = SINSEMILLA_S[lebs2ip_k(chunk) as usize]; - acc + pallas::Affine::from_xy(S_x, S_y).unwrap().to_curve() + acc + let S_chunk = pallas::Affine::from_xy(S_x, S_y).unwrap().to_curve(); + (acc + S_chunk) + acc }) } diff --git a/src/primitives/sinsemilla/constants.rs b/src/primitives/sinsemilla/constants.rs index 5593aab2..47f3535f 100644 --- a/src/primitives/sinsemilla/constants.rs +++ b/src/primitives/sinsemilla/constants.rs @@ -1,7 +1,4 @@ //! Sinsemilla generators -use group::Curve; -use halo2::arithmetic::{CurveAffine, CurveExt}; -use pasta_curves::pallas; /// Number of bits of each message piece in $\mathsf{SinsemillaHashToPoint}$ pub const K: usize = 10; @@ -62,15 +59,6 @@ pub const Q_MERKLE_CRH: ([u8; 32], [u8; 32]) = ( /// SWU hash-to-curve personalization for Sinsemilla $S$ generators. pub const S_PERSONALIZATION: &str = "z.cash:SinsemillaS"; -/// Creates the Sinsemilla S generators used in each round of the Sinsemilla hash -pub fn sinsemilla_s_generators() -> impl Iterator { - let hasher = pallas::Point::hash_to_curve(S_PERSONALIZATION); - (0..(1u32 << K)).map(move |j| { - let point = hasher(&j.to_le_bytes()).to_affine().coordinates().unwrap(); - (*point.x(), *point.y()) - }) -} - #[cfg(test)] mod tests { use super::super::{CommitDomain, HashDomain}; @@ -79,16 +67,21 @@ mod tests { COMMIT_IVK_PERSONALIZATION, MERKLE_CRH_PERSONALIZATION, NOTE_COMMITMENT_PERSONALIZATION, }; use group::Curve; - use halo2::arithmetic::FieldExt; + use halo2::arithmetic::{CurveAffine, CurveExt, FieldExt}; use halo2::pasta::pallas; #[test] fn sinsemilla_s() { use super::super::sinsemilla_s::SINSEMILLA_S; - let sinsemilla_s: Vec<_> = sinsemilla_s_generators().collect(); - assert_eq!(sinsemilla_s.len(), SINSEMILLA_S.len()); - for (expected, actual) in sinsemilla_s.iter().zip(&SINSEMILLA_S[..]) { - assert_eq!(expected, actual); + let hasher = pallas::Point::hash_to_curve(S_PERSONALIZATION); + + for j in 0..(1u32 << K) { + let computed = { + let point = hasher(&j.to_le_bytes()).to_affine().coordinates().unwrap(); + (*point.x(), *point.y()) + }; + let actual = SINSEMILLA_S[j as usize]; + assert_eq!(computed, actual); } }