Skip to content

Commit f03db8c

Browse files
committed
subgroup check
1 parent 79bd5f9 commit f03db8c

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

w3f-plonk-common/src/kzg_acc.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,16 @@ impl<E: Pairing> KzgAccumulator<E> {
134134
}
135135

136136
pub fn verify(&self) -> bool {
137-
let acc = (-E::G1::msm(&self.acc_points, &self.acc_scalars).unwrap()).into_affine();
138137
let proof = E::G1::msm(&self.kzg_proofs, &self.randomizers)
139138
.unwrap()
140139
.into_affine();
140+
if !crate::is_in_correct_subgroup_assuming_on_curve::<E>(&proof) {
141+
return false;
142+
}
143+
let acc = (-E::G1::msm(&self.acc_points, &self.acc_scalars).unwrap()).into_affine();
144+
if !crate::is_in_correct_subgroup_assuming_on_curve::<E>(&acc) {
145+
return false;
146+
}
141147
KZG::<E>::verify_accumulated(AccumulatedOpening { acc, proof }, &self.kzg_vk)
142148
}
143149
}

w3f-plonk-common/src/lib.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#![cfg_attr(not(feature = "std"), no_std)]
22

3-
use ark_ff::{FftField, PrimeField};
3+
use ark_ec::pairing::Pairing;
4+
use ark_ec::AffineRepr;
5+
use ark_ff::{FftField, Field, PrimeField, Zero};
46
use ark_poly::univariate::DensePolynomial;
57
use ark_poly::{EvaluationDomain, Evaluations, GeneralEvaluationDomain, Polynomial};
68
use ark_serialize::{CanonicalDeserialize, CanonicalSerialize};
@@ -78,6 +80,12 @@ pub trait ColumnsCommited<F: PrimeField, C: Commitment<F>>:
7880
fn to_vec(self) -> Vec<C>;
7981
}
8082

83+
// suboptimal for BLS12-381
84+
fn is_in_correct_subgroup_assuming_on_curve<E: Pairing>(p: &E::G1Affine) -> bool {
85+
let r = E::ScalarField::characteristic();
86+
p.mul_bigint(r).is_zero()
87+
}
88+
8189
#[derive(Clone, CanonicalSerialize, CanonicalDeserialize)]
8290
pub struct Proof<F, CS, Commitments, Evaluations>
8391
where

0 commit comments

Comments
 (0)