diff --git a/src/spairs.rs b/src/spairs.rs index 12b32a0..91fd2e3 100644 --- a/src/spairs.rs +++ b/src/spairs.rs @@ -48,6 +48,31 @@ pub struct Stage2Values { pub pk_k: Vec } +impl Stage2Values { + pub fn new(pk_a: &[G1], pk_b_temp: &[G1], pk_c: &[G1]) -> Self { + let mut pk_k = Vec::with_capacity(pk_a.len()+3); + + for ((a, b), c) in pk_a.iter().take(pk_a.len() - 1) + .zip(pk_b_temp.iter().take(pk_b_temp.len() - 1)) + .zip(pk_c.iter().take(pk_c.len() - 1)) + { + pk_k.push(*a + *b + *c); + } + + // Perform Z extention as libsnark does. + pk_k.push(pk_a[pk_a.len() - 1]); + pk_k.push(pk_b_temp[pk_b_temp.len() - 1]); + pk_k.push(pk_c[pk_c.len() - 1]); + + Stage2Values { + vk_gamma: G2::one(), + vk_beta_gamma_one: G1::one(), + vk_beta_gamma_two: G2::one(), + pk_k: pk_k + } + } +} + #[derive(Clone, PartialEq, Eq)] pub struct Spair { f: G, diff --git a/src/transcript.rs b/src/transcript.rs index db0d4e5..050c2aa 100644 --- a/src/transcript.rs +++ b/src/transcript.rs @@ -250,31 +250,18 @@ impl<'a, R: Rng> Transcript<'a, R, RandomCoeffStage1> { } pub fn next(self) -> Transcript<'a, R, RandomCoeffStage2> { - let mut pk_k = Vec::with_capacity(self.meta.values.pk_a.len()+3); - - for ((&a, &b), &c) in self.meta.values.pk_a.iter().take(self.meta.values.pk_a.len() - 1) - .zip(self.meta.values.pk_b_temp.iter().take(self.meta.values.pk_b_temp.len() - 1)) - .zip(self.meta.values.pk_c.iter().take(self.meta.values.pk_c.len() - 1)) - { - pk_k.push(a + b + c); - } - - // Perform Z extention as libsnark does. - pk_k.push(self.meta.values.pk_a[self.meta.values.pk_a.len() - 1]); - pk_k.push(self.meta.values.pk_b_temp[self.meta.values.pk_b_temp.len() - 1]); - pk_k.push(self.meta.values.pk_c[self.meta.values.pk_c.len() - 1]); + let stage2 = Stage2Values::new( + &self.meta.values.pk_a, + &self.meta.values.pk_b_temp, + &self.meta.values.pk_c + ); Transcript { meta: RandomCoeffStage2 { spairs: self.meta.spairs, powers_of_tau_g1: self.meta.powers_of_tau_g1, coeffs_1: self.meta.values, - values: Stage2Values { - vk_gamma: G2::one(), - vk_beta_gamma_one: G1::one(), - vk_beta_gamma_two: G2::one(), - pk_k: pk_k - }, + values: stage2, curplayer: 0 }, cs: self.cs,