From 6a7361ca937c8ac56c98cc43cc11c4b31d5ab44b Mon Sep 17 00:00:00 2001 From: Piotr Roslaniec Date: Mon, 26 Jun 2023 14:31:51 +0200 Subject: [PATCH] benchmarks evaluation domains --- ferveo/benches/bench_main.rs | 1 + ferveo/benches/benchmarks/eval_domain.rs | 57 ++++++++++++++++++++++++ ferveo/benches/benchmarks/mod.rs | 1 + ferveo/src/pvss.rs | 2 +- 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 ferveo/benches/benchmarks/eval_domain.rs diff --git a/ferveo/benches/bench_main.rs b/ferveo/benches/bench_main.rs index fbd7c746..81bdb5d9 100644 --- a/ferveo/benches/bench_main.rs +++ b/ferveo/benches/bench_main.rs @@ -7,4 +7,5 @@ criterion_main! { // bench_batch_inverse, // benchmarks::pairing::ec, benchmarks::validity_checks::validity_checks, + benchmarks::eval_domain::eval_domain, } diff --git a/ferveo/benches/benchmarks/eval_domain.rs b/ferveo/benches/benchmarks/eval_domain.rs new file mode 100644 index 00000000..cdb6d3c1 --- /dev/null +++ b/ferveo/benches/benchmarks/eval_domain.rs @@ -0,0 +1,57 @@ +#![allow(clippy::redundant_closure)] +#![allow(clippy::unit_arg)] + +pub use ark_bls12_381::Bls12_381 as EllipticCurve; +use ark_ff::Field; +use ark_poly::EvaluationDomain; +use criterion::{black_box, criterion_group, BenchmarkId, Criterion}; +use digest::crypto_common::rand_core::SeedableRng; +use ferveo_pre_release::*; +use rand::prelude::StdRng; + +const NUM_SHARES_CASES: [usize; 6] = [2, 4, 8, 16, 32, 64]; + +pub fn bench_eval_domain(c: &mut Criterion) { + let mut group = c.benchmark_group("EVAL DOMAIN"); + group.sample_size(10); + + let rng = &mut StdRng::seed_from_u64(0); + let s = ark_bls12_381::Fr::from_random_bytes(&[0u8; 32]).unwrap(); + + for shares_num in NUM_SHARES_CASES { + let eval_radix2_eval_domain = { + let domain = + ark_poly::Radix2EvaluationDomain::new(shares_num).unwrap(); + let phi = SecretPolynomial::::new( + &s, shares_num, rng, + ); + + move || { + black_box(phi.0.evaluate_over_domain_by_ref(domain)); + } + }; + + let eval_mixed_eval_domain = { + let domain = + ark_poly::MixedRadixEvaluationDomain::new(shares_num).unwrap(); + let phi = SecretPolynomial::::new( + &s, shares_num, rng, + ); + + move || { + black_box(phi.0.evaluate_over_domain_by_ref(domain)); + } + }; + + group.bench_function( + BenchmarkId::new("eval_radix2_eval_domain", shares_num), + |b| b.iter(|| eval_radix2_eval_domain()), + ); + group.bench_function( + BenchmarkId::new("eval_mixed_eval_domain", shares_num), + |b| b.iter(|| eval_mixed_eval_domain()), + ); + } +} + +criterion_group!(eval_domain, bench_eval_domain); diff --git a/ferveo/benches/benchmarks/mod.rs b/ferveo/benches/benchmarks/mod.rs index 0a6bfabe..7e19ab37 100644 --- a/ferveo/benches/benchmarks/mod.rs +++ b/ferveo/benches/benchmarks/mod.rs @@ -1,3 +1,4 @@ //pub mod block_proposer; // pub mod pairing; +pub mod eval_domain; pub mod validity_checks; diff --git a/ferveo/src/pvss.rs b/ferveo/src/pvss.rs index d79f7c21..af05c4da 100644 --- a/ferveo/src/pvss.rs +++ b/ferveo/src/pvss.rs @@ -71,7 +71,7 @@ impl Default for PubliclyVerifiableParams { /// Secret polynomial used in the PVSS protocol /// We wrap this in a struct so that we can zeroize it after use -struct SecretPolynomial(DensePolynomial); +pub struct SecretPolynomial(pub DensePolynomial); impl SecretPolynomial { pub fn new(