mirror of
https://github.com/arnaucube/sonobe.git
synced 2026-01-09 07:21:28 +01:00
fix sumcheck verifier for when poly=0 (#126)
Co-authored-by: NiDimi <moonkace24@gmail.com>
This commit is contained in:
@@ -219,29 +219,39 @@ pub mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn sumcheck_poseidon() {
|
pub fn sumcheck_poseidon() {
|
||||||
|
let n_vars = 5;
|
||||||
|
|
||||||
let mut rng = test_rng();
|
let mut rng = test_rng();
|
||||||
let poly_mle = DenseMultilinearExtension::rand(5, &mut rng);
|
let poly_mle = DenseMultilinearExtension::rand(n_vars, &mut rng);
|
||||||
let virtual_poly = VirtualPolynomial::new_from_mle(&Arc::new(poly_mle), Fr::ONE);
|
let virtual_poly = VirtualPolynomial::new_from_mle(&Arc::new(poly_mle), Fr::ONE);
|
||||||
|
|
||||||
|
sumcheck_poseidon_opt(virtual_poly);
|
||||||
|
|
||||||
|
// test with zero poly
|
||||||
|
let poly_mle = DenseMultilinearExtension::from_evaluations_vec(
|
||||||
|
n_vars,
|
||||||
|
vec![Fr::ZERO; 2u32.pow(n_vars as u32) as usize],
|
||||||
|
);
|
||||||
|
let virtual_poly = VirtualPolynomial::new_from_mle(&Arc::new(poly_mle), Fr::ONE);
|
||||||
|
sumcheck_poseidon_opt(virtual_poly);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sumcheck_poseidon_opt(virtual_poly: VirtualPolynomial<Fr>) {
|
||||||
let poseidon_config = poseidon_canonical_config::<Fr>();
|
let poseidon_config = poseidon_canonical_config::<Fr>();
|
||||||
|
|
||||||
// sum-check prove
|
// sum-check prove
|
||||||
let mut poseidon_transcript_prove: PoseidonSponge<Fr> =
|
let mut transcript_p: PoseidonSponge<Fr> = PoseidonSponge::<Fr>::new(&poseidon_config);
|
||||||
PoseidonSponge::<Fr>::new(&poseidon_config);
|
let sum_check =
|
||||||
let sum_check = IOPSumCheck::<Fr, PoseidonSponge<Fr>>::prove(
|
IOPSumCheck::<Fr, PoseidonSponge<Fr>>::prove(&virtual_poly, &mut transcript_p).unwrap();
|
||||||
&virtual_poly,
|
|
||||||
&mut poseidon_transcript_prove,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
// sum-check verify
|
// sum-check verify
|
||||||
let claimed_sum = IOPSumCheck::<Fr, PoseidonSponge<Fr>>::extract_sum(&sum_check);
|
let claimed_sum = IOPSumCheck::<Fr, PoseidonSponge<Fr>>::extract_sum(&sum_check);
|
||||||
let mut poseidon_transcript_verify: PoseidonSponge<Fr> =
|
let mut transcript_v: PoseidonSponge<Fr> = PoseidonSponge::<Fr>::new(&poseidon_config);
|
||||||
PoseidonSponge::<Fr>::new(&poseidon_config);
|
|
||||||
let res_verify = IOPSumCheck::<Fr, PoseidonSponge<Fr>>::verify(
|
let res_verify = IOPSumCheck::<Fr, PoseidonSponge<Fr>>::verify(
|
||||||
claimed_sum,
|
claimed_sum,
|
||||||
&sum_check,
|
&sum_check,
|
||||||
&virtual_poly.aux_info,
|
&virtual_poly.aux_info,
|
||||||
&mut poseidon_transcript_verify,
|
&mut transcript_v,
|
||||||
);
|
);
|
||||||
|
|
||||||
assert!(res_verify.is_ok());
|
assert!(res_verify.is_ok());
|
||||||
|
|||||||
@@ -137,7 +137,11 @@ impl<F: PrimeField + Absorb> SumCheckVerifier<F> for IOPVerifierState<F> {
|
|||||||
{
|
{
|
||||||
let poly = DensePolynomial::from_coefficients_slice(coeffs);
|
let poly = DensePolynomial::from_coefficients_slice(coeffs);
|
||||||
let eval_at_one: F = poly.iter().sum();
|
let eval_at_one: F = poly.iter().sum();
|
||||||
let eval_at_zero: F = poly.coeffs[0];
|
let eval_at_zero: F = if poly.coeffs.is_empty() {
|
||||||
|
F::zero()
|
||||||
|
} else {
|
||||||
|
poly.coeffs[0]
|
||||||
|
};
|
||||||
let eval = eval_at_one + eval_at_zero;
|
let eval = eval_at_one + eval_at_zero;
|
||||||
|
|
||||||
// the deferred check during the interactive phase:
|
// the deferred check during the interactive phase:
|
||||||
|
|||||||
Reference in New Issue
Block a user