MCPcopy Create free account
hub / github.com/arkworks-rs/poly-commit / check_elems

Method check_elems

poly-commit/src/sonic_pc/mod.rs:94–133  ·  view source on GitHub ↗
(
        combined_comms: BTreeMap<Option<usize>, E::G1>,
        combined_witness: E::G1,
        combined_adjusted_witness: E::G1,
        vk: &VerifierKey<E>,
    )

Source from the content-addressed store, hash-verified

92 }
93
94 fn check_elems(
95 combined_comms: BTreeMap<Option<usize>, E::G1>,
96 combined_witness: E::G1,
97 combined_adjusted_witness: E::G1,
98 vk: &VerifierKey<E>,
99 ) -> Result<bool, Error> {
100 let check_time = start_timer!(|| "Checking elems");
101 let mut g1_projective_elems: Vec<E::G1> = Vec::new();
102 let mut g2_prepared_elems: Vec<E::G2Prepared> = Vec::new();
103
104 for (degree_bound, comm) in combined_comms.into_iter() {
105 let shift_power = if let Some(degree_bound) = degree_bound {
106 vk.get_shift_power(degree_bound)
107 .ok_or(Error::UnsupportedDegreeBound(degree_bound))?
108 } else {
109 vk.prepared_h.clone()
110 };
111
112 g1_projective_elems.push(comm);
113 g2_prepared_elems.push(shift_power);
114 }
115
116 g1_projective_elems.push(-combined_adjusted_witness);
117 g2_prepared_elems.push(vk.prepared_h.clone());
118
119 g1_projective_elems.push(-combined_witness);
120 g2_prepared_elems.push(vk.prepared_beta_h.clone());
121
122 let g1_prepared_elems_iter: Vec<E::G1Prepared> =
123 E::G1::normalize_batch(g1_projective_elems.as_slice())
124 .into_iter()
125 .map(|a| a.into())
126 .collect::<Vec<_>>();
127
128 let is_one: bool = E::multi_pairing(g1_prepared_elems_iter, g2_prepared_elems)
129 .0
130 .is_one();
131 end_timer!(check_time);
132 Ok(is_one)
133 }
134}
135
136impl<E, P> PolynomialCommitment<E::ScalarField, P> for SonicKZG10<E, P>

Callers

nothing calls this directly

Calls 3

pushMethod · 0.80
is_oneMethod · 0.80
get_shift_powerMethod · 0.45

Tested by

no test coverage detected