arnaucube
arnaucube/hyperplonkPublic Self-hosted repository
batch inversion
Charles Chen chancharles92@gmail.com
Fri, 16 Dec 2022 09:29:28 -0500
commit

81073dfee104055d67160fe82361d3c29beea525

parent

648ea51ff4892eb59f7ba71e35824c1414acb3ee

2 files changed, 6 insertions(+), 4 deletions(-)

jump to
M hyperplonk/src/mock.rs → hyperplonk/src/mock.rs

@@ -238,8 +238,8 @@ let pcs_srs =

MultilinearKzgPCS::<Bls12_381>::gen_srs_for_testing(&mut rng, SUPPORTED_SIZE)?; let nv = MAX_NUM_VARS; - let vanilla_gate = CustomizedGates::vanilla_plonk_gate(); - test_mock_circuit_zkp_helper(nv, &vanilla_gate, &pcs_srs)?; + let turboplonk_gate = CustomizedGates::jellyfish_turbo_plonk_gate(); + test_mock_circuit_zkp_helper(nv, &turboplonk_gate, &pcs_srs)?; Ok(()) }
M subroutines/src/poly_iop/prod_check/util.rs → subroutines/src/poly_iop/prod_check/util.rs

@@ -2,7 +2,7 @@ //! This module implements useful functions for the product check protocol.

use crate::poly_iop::{errors::PolyIOPErrors, structs::IOPProof, zero_check::ZeroCheck, PolyIOP}; use arithmetic::{get_index, VirtualPolynomial}; -use ark_ff::PrimeField; +use ark_ff::{batch_inversion, PrimeField}; use ark_poly::DenseMultilinearExtension; use ark_std::{end_timer, start_timer}; use std::sync::Arc;

@@ -31,13 +31,15 @@ for (g_eval, gi) in g_evals.iter_mut().zip(gx.iter()) {

*g_eval *= gi; } } + batch_inversion(&mut g_evals[..]); + for (f_eval, g_eval) in f_evals.iter_mut().zip(g_evals.iter()) { if *g_eval == F::zero() { return Err(PolyIOPErrors::InvalidParameters( "gxs has zero entries in the boolean hypercube".to_string(), )); } - *f_eval /= g_eval; + *f_eval *= g_eval; } end_timer!(start);