Derive commitment keys for Schnorr protocol from public params. This is done to avoid creating them if the same public params are used in multiple statements and is effectively a pre-processing step done for optimization.
(
&self,
)
| 226 | /// creating them if the same public params are used in multiple statements and is effectively a |
| 227 | /// pre-processing step done for optimization. |
| 228 | pub fn derive_commitment_keys( |
| 229 | &self, |
| 230 | ) -> Result< |
| 231 | ( |
| 232 | StatementDerivedParams<Vec<E::G1Affine>>, |
| 233 | StatementDerivedParams<Vec<E::G1Affine>>, |
| 234 | StatementDerivedParams<(Vec<E::G1Affine>, Vec<E::G1Affine>)>, |
| 235 | StatementDerivedParams<Vec<E::G1Affine>>, |
| 236 | StatementDerivedParams<[E::G1Affine; 2]>, |
| 237 | StatementDerivedParams<[E::G1Affine; 2]>, |
| 238 | StatementDerivedParams<[E::G1Affine; 2]>, |
| 239 | ), |
| 240 | ProofSystemError, |
| 241 | > { |
| 242 | let mut derived_bound_check_lego_comm = |
| 243 | DerivedParamsTracker::<LegoVerifyingKey<E>, Vec<E::G1Affine>, E>::new(); |
| 244 | let mut derived_ek_comm = |
| 245 | DerivedParamsTracker::<EncryptionKey<E>, Vec<E::G1Affine>, E>::new(); |
| 246 | let mut derived_chunked_comm = DerivedParamsTracker::< |
| 247 | (&ChunkedCommitmentGens<E::G1Affine>, u8), |
| 248 | (Vec<E::G1Affine>, Vec<E::G1Affine>), |
| 249 | E, |
| 250 | >::new(); |
| 251 | let mut derived_r1cs_comm = |
| 252 | DerivedParamsTracker::<LegoVerifyingKey<E>, Vec<E::G1Affine>, E>::new(); |
| 253 | let mut derived_bound_check_bpp_comm = |
| 254 | DerivedParamsTracker::<(E::G1Affine, E::G1Affine), [E::G1Affine; 2], E>::new(); |
| 255 | let mut derived_bound_check_smc_comm = |
| 256 | DerivedParamsTracker::<MemberCommitmentKey<E::G1Affine>, [E::G1Affine; 2], E>::new(); |
| 257 | let mut derived_ineq_comm = |
| 258 | DerivedParamsTracker::<PedersenCommitmentKey<E::G1Affine>, [E::G1Affine; 2], E>::new(); |
| 259 | |
| 260 | // To avoid creating variable with short lifetime |
| 261 | let mut saver_comm_keys = BTreeMap::new(); |
| 262 | let mut bpp_comm_keys = BTreeMap::new(); |
| 263 | |
| 264 | for (s_idx, statement) in self.statements.0.iter().enumerate() { |
| 265 | match statement { |
| 266 | Statement::SaverProver(_) | Statement::SaverVerifier(_) => { |
| 267 | let (comm_gens, chunk_bit_size) = match statement { |
| 268 | Statement::SaverProver(s) => ( |
| 269 | s.get_chunked_commitment_gens(&self.setup_params, s_idx)?, |
| 270 | s.chunk_bit_size, |
| 271 | ), |
| 272 | Statement::SaverVerifier(s) => ( |
| 273 | s.get_chunked_commitment_gens(&self.setup_params, s_idx)?, |
| 274 | s.chunk_bit_size, |
| 275 | ), |
| 276 | _ => unreachable!(), |
| 277 | }; |
| 278 | saver_comm_keys.insert(s_idx, (comm_gens, chunk_bit_size)); |
| 279 | } |
| 280 | Statement::BoundCheckBpp(s) => { |
| 281 | let ck = s |
| 282 | .get_setup_params(&self.setup_params, s_idx)? |
| 283 | .get_pedersen_commitment_key(); |
| 284 | bpp_comm_keys.insert(s_idx, ck); |
| 285 | } |
no test coverage detected