Skip to content

Commit a8ff58b

Browse files
authored
Add range proof traits (#17659)
Add BatchedRangeProof trait to aptos-dkg
1 parent 9ecf4a6 commit a8ff58b

File tree

8 files changed

+689
-576
lines changed

8 files changed

+689
-576
lines changed

crates/aptos-dkg/benches/range_proof.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
use aptos_dkg::{
5-
range_proofs::dekart_univariate::{batch_prove, batch_verify, DST},
5+
range_proofs::{dekart_univariate::Proof as UnivariateDeKART, traits::BatchedRangeProof},
66
utils::test_utils,
77
};
88
use ark_ec::pairing::Pairing;
99
use ark_std::rand::thread_rng;
1010
use criterion::{criterion_group, criterion_main, Criterion};
1111

1212
/// Generic benchmark function over any pairing curve
13-
fn bench_range_proof<E: Pairing>(c: &mut Criterion, curve_name: &str) {
13+
fn bench_range_proof<E: Pairing, B: BatchedRangeProof<E>>(c: &mut Criterion, curve_name: &str) {
1414
let mut group = c.benchmark_group(format!("range_proof/{}", curve_name));
1515

1616
let ell = std::env::var("L")
@@ -27,14 +27,14 @@ fn bench_range_proof<E: Pairing>(c: &mut Criterion, curve_name: &str) {
2727
b.iter_with_setup(
2828
|| {
2929
let mut rng = thread_rng();
30-
let (pp, zz, cc, r) = test_utils::range_proof_random_instance(n, ell, &mut rng);
31-
(pp, zz, cc, r)
30+
let (pk, _, values, comm, comm_r) =
31+
test_utils::range_proof_random_instance::<_, B, _>(n, ell, &mut rng);
32+
(pk, values, comm, comm_r)
3233
},
33-
|(pp, z_vals, com, prover_state)| {
34-
let mut fs_t = merlin::Transcript::new(DST);
34+
|(pk, values, comm, r)| {
35+
let mut fs_t = merlin::Transcript::new(B::DST);
3536
let mut rng = thread_rng();
36-
let _proof =
37-
batch_prove::<E, _>(&mut rng, &pp, &z_vals, &com, &prover_state, &mut fs_t);
37+
let _proof = B::prove(&pk, &values, ell, &comm, &r, &mut fs_t, &mut rng);
3838
},
3939
)
4040
});
@@ -43,23 +43,27 @@ fn bench_range_proof<E: Pairing>(c: &mut Criterion, curve_name: &str) {
4343
b.iter_with_setup(
4444
|| {
4545
let mut rng = thread_rng();
46-
let (pp, zz, cc, r) = test_utils::range_proof_random_instance(n, ell, &mut rng);
47-
let mut fs_t = merlin::Transcript::new(DST);
48-
let proof = batch_prove::<E, _>(&mut rng, &pp, &zz, &cc, &r, &mut fs_t);
49-
(pp, cc, proof)
46+
let (pk, vk, values, comm, r) =
47+
test_utils::range_proof_random_instance::<_, B, _>(n, ell, &mut rng);
48+
let mut fs_t = merlin::Transcript::new(B::DST);
49+
let proof = B::prove(&pk, &values, ell, &comm, &r, &mut fs_t, &mut rng);
50+
(vk, n, ell, comm, proof)
5051
},
51-
|(pp, com, proof)| {
52-
let mut fs_t = merlin::Transcript::new(DST);
53-
batch_verify::<E>(&pp, &com, &proof, &mut fs_t).unwrap();
52+
|(vk, n, ell, comm, proof)| {
53+
let mut fs_t = merlin::Transcript::new(B::DST);
54+
proof.verify(&vk, n, ell, &comm, &mut fs_t).unwrap();
5455
},
5556
)
5657
});
5758
}
5859

5960
// Specialize benchmark for a concrete pairing curve
6061
fn bench_groups(c: &mut Criterion) {
61-
bench_range_proof::<ark_bn254::Bn254>(c, "BN254");
62-
bench_range_proof::<ark_bls12_381::Bls12_381>(c, "BLS12-381");
62+
use ark_bls12_381::Bls12_381;
63+
use ark_bn254::Bn254;
64+
65+
bench_range_proof::<Bn254, UnivariateDeKART<Bn254>>(c, "BN254");
66+
bench_range_proof::<Bls12_381, UnivariateDeKART<Bls12_381>>(c, "BLS12-381");
6367
}
6468

6569
criterion_group!(

crates/aptos-dkg/src/fiat_shamir.rs

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
1010
use crate::{
1111
pvss::{traits::Transcript, ThresholdConfig},
12-
range_proofs::dekart_univariate,
12+
range_proofs::traits::BatchedRangeProof,
1313
utils::random::random_scalar_from_uniform_bytes,
1414
SCALAR_NUM_BYTES,
1515
};
@@ -85,15 +85,12 @@ pub trait PVSS<T: Transcript>: ScalarProtocol {
8585
fn challenge_linear_combination_scalars(&mut self, num_scalars: usize) -> Vec<blstrs::Scalar>;
8686
}
8787

88-
pub trait RangeProof<E: Pairing> {
88+
pub trait RangeProof<E: Pairing, B: BatchedRangeProof<E>> {
8989
fn append_sep(&mut self, dst: &[u8]);
9090

91-
fn append_vk(&mut self, vk: &(&E::G1, &E::G2, &E::G2, &E::G2));
91+
fn append_vk(&mut self, vk: &B::VerificationKey);
9292

93-
fn append_public_statement(
94-
&mut self,
95-
public_statement: &(usize, &dekart_univariate::Commitment<E>),
96-
);
93+
fn append_public_statement(&mut self, public_statement: B::PublicStatement);
9794

9895
fn append_bit_commitments(&mut self, bit_commitments: &(&[E::G1Affine], &[E::G2Affine]));
9996

@@ -170,38 +167,23 @@ impl<T: Transcript> PVSS<T> for merlin::Transcript {
170167
use ark_serialize::CanonicalSerialize;
171168

172169
#[allow(non_snake_case)]
173-
impl<E: Pairing> RangeProof<E> for merlin::Transcript {
170+
impl<E: Pairing, B: BatchedRangeProof<E>> RangeProof<E, B> for merlin::Transcript {
174171
fn append_sep(&mut self, dst: &[u8]) {
175172
self.append_message(b"dom-sep", dst);
176173
}
177174

178-
fn append_vk(&mut self, vk: &(&E::G1, &E::G2, &E::G2, &E::G2)) {
175+
fn append_vk(&mut self, vk: &B::VerificationKey) {
179176
let mut vk_bytes = Vec::new();
180-
vk.0.serialize_compressed(&mut vk_bytes) // TODO: change this
181-
.expect("vk0 serialization should succeed");
182-
vk.1.serialize_compressed(&mut vk_bytes)
183-
.expect("vk1 serialization should succeed");
184-
vk.2.serialize_compressed(&mut vk_bytes)
185-
.expect("vk2 serialization should succeed");
186-
vk.3.serialize_compressed(&mut vk_bytes)
187-
.expect("vk3 serialization should succeed");
177+
vk.serialize_compressed(&mut vk_bytes)
178+
.expect("vk serialization should succeed");
188179
self.append_message(b"vk", vk_bytes.as_slice());
189180
}
190181

191-
fn append_public_statement(
192-
&mut self,
193-
public_statement: &(usize, &dekart_univariate::Commitment<E>),
194-
) {
182+
fn append_public_statement(&mut self, public_statement: B::PublicStatement) {
195183
let mut public_statement_bytes = Vec::new();
196184
public_statement
197-
.0
198185
.serialize_compressed(&mut public_statement_bytes)
199186
.expect("public_statement0 serialization should succeed");
200-
public_statement
201-
.1
202-
.serialize_compressed(&mut public_statement_bytes)
203-
.expect("public_statement1 serialization should succeed");
204-
// TODO: CHANGE THIS STUFF
205187
self.append_message(b"public-statements", public_statement_bytes.as_slice());
206188
}
207189

0 commit comments

Comments
 (0)