Skip to content

Commit 4ca6ea0

Browse files
committed
enable defering challenge check
1 parent bf1f00a commit 4ca6ea0

File tree

3 files changed

+34
-82
lines changed

3 files changed

+34
-82
lines changed

src/gadgets/lookup.rs

+12-26
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::gadgets::nonnative::util::Num;
1111
use crate::gadgets::utils::alloc_const;
1212
use crate::spartan::math::Math;
1313
use crate::traits::commitment::CommitmentEngineTrait;
14-
use crate::traits::commitment::CommitmentTrait;
14+
use crate::traits::AbsorbInROTrait;
1515
use crate::traits::ROCircuitTrait;
1616
use crate::traits::ROConstants;
1717
use crate::traits::ROTrait;
@@ -476,10 +476,8 @@ impl<'a, G: Group> LookupTraceBuilder<'a, G> {
476476
G: Group<Base = <G2 as Group>::Scalar>,
477477
G2: Group<Base = <G as Group>::Scalar>,
478478
{
479-
let ro_consts = <<G2 as Group>::RO as ROTrait<
480-
<G2 as Group>::Base,
481-
<G2 as Group>::Scalar,
482-
>>::Constants::default();
479+
let ro_consts =
480+
<<G as Group>::RO as ROTrait<<G as Group>::Base, <G as Group>::Scalar>>::Constants::default();
483481
let final_values: Vec<<G as Group>::Scalar> = final_table
484482
.get_table()
485483
.iter()
@@ -491,30 +489,18 @@ impl<'a, G: Group> LookupTraceBuilder<'a, G> {
491489
.map(|(_, _, counter)| *counter)
492490
.collect();
493491

494-
// final_value and final_commitment
495-
let (
496-
(comm_final_value_cordx, comm_final_value_cordy, comm_final_value_infinity),
497-
(comm_final_counter_cordx, comm_final_counter_cordy, comm_final_counter_infinity),
498-
) = rayon::join(
499-
|| G::CE::commit(ck, &final_values).to_coordinates(),
500-
|| G::CE::commit(ck, &final_counters).to_coordinates(),
492+
// final_value and final_counter
493+
let (comm_final_value, comm_final_counter) = rayon::join(
494+
|| G::CE::commit(ck, &final_values),
495+
|| G::CE::commit(ck, &final_counters),
501496
);
502497

503-
let mut hasher = <G2 as Group>::RO::new(ro_consts, 7);
498+
let mut hasher = <G as Group>::RO::new(ro_consts, 7);
499+
let intermediate_gamma: G2::Scalar = scalar_as_base::<G>(intermediate_gamma);
504500
hasher.absorb(intermediate_gamma);
505-
hasher.absorb(scalar_as_base::<G2>(comm_final_value_cordx));
506-
hasher.absorb(scalar_as_base::<G2>(comm_final_value_cordy));
507-
hasher.absorb(scalar_as_base::<G2>(G2::Scalar::from(u64::from(
508-
comm_final_value_infinity,
509-
))));
510-
hasher.absorb(scalar_as_base::<G2>(comm_final_counter_cordx));
511-
hasher.absorb(scalar_as_base::<G2>(comm_final_counter_cordy));
512-
hasher.absorb(scalar_as_base::<G2>(G2::Scalar::from(u64::from(
513-
comm_final_counter_infinity,
514-
))));
515-
516-
let hash_bits = hasher.squeeze(NUM_CHALLENGE_BITS);
517-
scalar_as_base::<G2>(hash_bits)
501+
comm_final_value.absorb_in_ro(&mut hasher);
502+
comm_final_counter.absorb_in_ro(&mut hasher);
503+
hasher.squeeze(NUM_CHALLENGE_BITS)
518504
}
519505
}
520506

src/lib.rs

+3-17
Original file line numberDiff line numberDiff line change
@@ -1747,6 +1747,7 @@ mod tests {
17471747
G1::Scalar::from(2) * addr + G1::Scalar::from(1),
17481748
new_left_child,
17491749
);
1750+
// swap right pair
17501751
let (new_parent_right, new_right_child) = if right_child < new_parent_left {
17511752
(right_child, new_parent_left)
17521753
} else {
@@ -1994,11 +1995,8 @@ mod tests {
19941995

19951996
let (circuit_primaries, final_table, expected_intermediate_gamma) =
19961997
HeapifyCircuit::new(&initial_table, ro_consts);
1997-
// let mut circuit_primary = TrivialTestCircuit::default();
1998-
// let z0_primary = vec![<G1 as Group>::Scalar::ZERO; 6];
19991998

20001999
let circuit_secondary = TrivialTestCircuit::default();
2001-
// let mut circuit_primary = TrivialTestCircuit::default();
20022000

20032001
// produce public parameters
20042002
let pp_hint1 = Some(SPrime::<G1>::commitment_key_floor());
@@ -2016,8 +2014,7 @@ mod tests {
20162014
);
20172015

20182016
let z0_primary =
2019-
HeapifyCircuit::<G1, G2>::get_z0(&pp.ck_primary, &initial_table, expected_intermediate_gamma);
2020-
// println!("num constraints {:?}", pp.num_constraints());
2017+
HeapifyCircuit::<G1, G2>::get_z0(&pp.ck_primary, &final_table, expected_intermediate_gamma);
20212018

20222019
// 5th is initial index.
20232020
// +1 for index end with 0
@@ -2063,20 +2060,9 @@ mod tests {
20632060
})
20642061
.unwrap();
20652062
assert!(res.is_ok());
2066-
/*
2067-
let next_gamma = &z[0];
2068-
let gamma = &z[1];
2069-
let next_R = &z[2];
2070-
let next_W = &z[3];
2071-
let next_rw_counter = &z[4];
2072-
let next_index = &z[5];
2073-
*/
20742063
let (zn_primary, _) = res.unwrap();
20752064

2076-
// TODO move below check to LookupSNARK
2077-
// assert_eq!(zn_primary[0], zn_primary[1]); // challenge == pre_compute_challenge
2078-
2079-
assert_eq!(<G1 as Group>::Scalar::from(1).neg(), zn_primary[5]); // last index == -1
2065+
assert_eq!(<G1 as Group>::Scalar::from(1).neg(), zn_primary[5]);
20802066

20812067
let number_of_iterated_nodes = (heap_size - 4) / 2 + 1;
20822068
assert_eq!(

src/spartan/lookupsnark.rs

+19-39
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use crate::{
1818
traits::{
1919
commitment::{CommitmentEngineTrait, CommitmentTrait},
2020
evaluation::EvaluationEngineTrait,
21-
Group, ROTrait, TranscriptEngineTrait,
21+
AbsorbInROTrait, Group, ROTrait, TranscriptEngineTrait,
2222
},
2323
Commitment, CommitmentKey, CompressedCommitment,
2424
};
@@ -83,7 +83,6 @@ impl<G: Group, EE: EvaluationEngineTrait<G>> VerifierKey<G, EE> {
8383

8484
impl<G: Group, EE: EvaluationEngineTrait<G>> SimpleDigestible for VerifierKey<G, EE> {}
8585

86-
#[allow(unused)]
8786
/// LookupSNARK
8887
pub struct LookupSNARK<G: Group, EE: EvaluationEngineTrait<G>> {
8988
a: PhantomData<(G, EE)>,
@@ -187,8 +186,6 @@ where
187186
final_table.iter().map(|(_, value, _)| *value).collect();
188187
let final_counters: Vec<<G as Group>::Scalar> =
189188
final_table.iter().map(|(_, _, counter)| *counter).collect();
190-
// TODO add comm_final_value, comm_final_counter to gamma challange
191-
// which means we need to move final_values, final_counters commitment at earlier
192189
let comm_init_value = pk.comm_init_value;
193190
let (comm_final_value, comm_final_counter) = rayon::join(
194191
|| G::CE::commit(ck, &final_values),
@@ -560,7 +557,6 @@ where
560557
})
561558
}
562559

563-
#[allow(unused)]
564560
fn verify_challenge<G2: Group>(
565561
comm_final_value: <<G as Group>::CE as CommitmentEngineTrait<G>>::Commitment,
566562
comm_final_counter: <<G as Group>::CE as CommitmentEngineTrait<G>>::Commitment,
@@ -571,35 +567,19 @@ where
571567
G: Group<Base = <G2 as Group>::Scalar>,
572568
G2: Group<Base = <G as Group>::Scalar>,
573569
{
574-
// verify fingerprint
575-
let ro_consts = <<G2 as Group>::RO as ROTrait<
576-
<G2 as Group>::Base,
577-
<G2 as Group>::Scalar,
578-
>>::Constants::default();
579-
580-
let (
581-
(comm_final_value_cordx, comm_final_value_cordy, comm_final_value_infinity),
582-
(comm_final_counter_cordx, comm_final_counter_cordy, comm_final_counter_infinity),
583-
) = rayon::join(
584-
|| comm_final_value.to_coordinates(),
585-
|| comm_final_counter.to_coordinates(),
586-
);
570+
// verify fingerprint challenge
571+
let ro_consts =
572+
<<G as Group>::RO as ROTrait<<G as Group>::Base, <G as Group>::Scalar>>::Constants::default();
573+
574+
// final_value and final_counter
587575

588-
let mut hasher = <G2 as Group>::RO::new(ro_consts, 7);
576+
let mut hasher = <G as Group>::RO::new(ro_consts, 7);
577+
let fingerprint_intermediate_gamma: G2::Scalar =
578+
scalar_as_base::<G>(fingerprint_intermediate_gamma);
589579
hasher.absorb(fingerprint_intermediate_gamma);
590-
hasher.absorb(scalar_as_base::<G2>(comm_final_value_cordx));
591-
hasher.absorb(scalar_as_base::<G2>(comm_final_value_cordy));
592-
hasher.absorb(scalar_as_base::<G2>(G2::Scalar::from(u64::from(
593-
comm_final_value_infinity,
594-
))));
595-
hasher.absorb(scalar_as_base::<G2>(comm_final_counter_cordx));
596-
hasher.absorb(scalar_as_base::<G2>(comm_final_counter_cordy));
597-
hasher.absorb(scalar_as_base::<G2>(G2::Scalar::from(u64::from(
598-
comm_final_counter_infinity,
599-
))));
600-
601-
let hash_bits = hasher.squeeze(NUM_CHALLENGE_BITS);
602-
let computed_gamma = scalar_as_base::<G2>(hash_bits);
580+
comm_final_value.absorb_in_ro(&mut hasher);
581+
comm_final_counter.absorb_in_ro(&mut hasher);
582+
let computed_gamma = hasher.squeeze(NUM_CHALLENGE_BITS);
603583
if fingerprint_gamma != computed_gamma {
604584
println!(
605585
"fingerprint_gamma {:?} != computed_gamma {:?},,,fingerprint_intermediate_gamma",
@@ -614,7 +594,7 @@ where
614594
pub fn verify<G2: Group>(
615595
&self,
616596
vk: &VerifierKey<G, EE>,
617-
_fingerprint_intermediate_gamma: G::Scalar,
597+
fingerprint_intermediate_gamma: G::Scalar,
618598
fingerprint_gamma: G::Scalar,
619599
) -> Result<(), NovaError>
620600
where
@@ -625,12 +605,12 @@ where
625605
let comm_final_counter = Commitment::<G>::decompress(&self.comm_final_counter)?;
626606

627607
// TODO enable verify challenge
628-
// Self::verify_challenge::<G2>(
629-
// comm_final_value,
630-
// comm_final_counter,
631-
// fingerprint_intermediate_gamma,
632-
// fingerprint_gamma,
633-
// )?;
608+
Self::verify_challenge::<G2>(
609+
comm_final_value,
610+
comm_final_counter,
611+
fingerprint_intermediate_gamma,
612+
fingerprint_gamma,
613+
)?;
634614

635615
let mut transcript = G::TE::new(b"LookupSNARK");
636616
let mut u_vec: Vec<PolyEvalInstance<G>> = Vec::new();

0 commit comments

Comments
 (0)