From 18991cdfbcffc4d245d1d100482901876d9f8b38 Mon Sep 17 00:00:00 2001
From: "a.stevan" <antoine.stevan@isae-supaero.fr>
Date: Fri, 5 Apr 2024 16:05:37 +0200
Subject: [PATCH 1/5] add "commit" to the benchmarks

---
 Cargo.toml        |  4 ++++
 benches/commit.rs | 38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 benches/commit.rs

diff --git a/Cargo.toml b/Cargo.toml
index c446fa49..108b4085 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -33,3 +33,7 @@ harness = false
 [[bench]]
 name = "setup"
 harness = false
+
+[[bench]]
+name = "commit"
+harness = false
diff --git a/benches/commit.rs b/benches/commit.rs
new file mode 100644
index 00000000..bf87031d
--- /dev/null
+++ b/benches/commit.rs
@@ -0,0 +1,38 @@
+use ark_bls12_381::{Fr, G1Projective};
+use ark_ec::CurveGroup;
+use ark_ff::PrimeField;
+use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial};
+use ark_std::{ops::Div, test_rng};
+
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+
+use komodo::zk;
+
+fn commit_template<F, G, P>(c: &mut Criterion, nb_bytes: usize)
+where
+    F: PrimeField,
+    G: CurveGroup<ScalarField = F>,
+    P: DenseUVPolynomial<F>,
+    for<'a, 'b> &'a P: Div<&'b P, Output = P>,
+{
+    let rng = &mut test_rng();
+
+    let degree = zk::nb_elements_in_setup::<F>(nb_bytes);
+
+    let setup = zk::setup::<_, F, G>(degree, rng).unwrap();
+    let polynomial = P::rand(degree, rng);
+
+    c.bench_function(
+        &format!("commit {} bytes on {}", nb_bytes, std::any::type_name::<F>()),
+        |b| b.iter(|| zk::commit(&setup, &polynomial)),
+    );
+}
+
+fn commit(c: &mut Criterion) {
+    for n in [1, 2, 4, 8, 16] {
+        commit_template::<Fr, G1Projective, DensePolynomial<Fr>>(c, black_box(n * 1024));
+    }
+}
+
+criterion_group!(benches, commit);
+criterion_main!(benches);
-- 
GitLab


From 0934c6cb16d4bcd3c74c97bb16a9faa19edf332d Mon Sep 17 00:00:00 2001
From: "a.stevan" <antoine.stevan@isae-supaero.fr>
Date: Fri, 5 Apr 2024 16:30:41 +0200
Subject: [PATCH 2/5] measure the Arkworks commit operation as well

---
 Cargo.toml        |  1 +
 benches/commit.rs | 52 +++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 108b4085..bf76cdf2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -20,6 +20,7 @@ tracing = "0.1.40"
 tracing-subscriber = "0.3.17"
 
 [dev-dependencies]
+ark-poly-commit = "0.4.0"
 criterion = "0.3"
 
 [[bench]]
diff --git a/benches/commit.rs b/benches/commit.rs
index bf87031d..e3594da9 100644
--- a/benches/commit.rs
+++ b/benches/commit.rs
@@ -1,9 +1,11 @@
-use ark_bls12_381::{Fr, G1Projective};
-use ark_ec::CurveGroup;
+use ark_bls12_381::{Bls12_381, Fr, G1Projective};
+use ark_ec::{pairing::Pairing, CurveGroup};
 use ark_ff::PrimeField;
 use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial};
 use ark_std::{ops::Div, test_rng};
 
+use ark_poly_commit::kzg10::{Powers, KZG10};
+
 use criterion::{black_box, criterion_group, criterion_main, Criterion};
 
 use komodo::zk;
@@ -23,16 +25,58 @@ where
     let polynomial = P::rand(degree, rng);
 
     c.bench_function(
-        &format!("commit {} bytes on {}", nb_bytes, std::any::type_name::<F>()),
+        &format!(
+            "commit {} bytes on {}",
+            nb_bytes,
+            std::any::type_name::<F>()
+        ),
         |b| b.iter(|| zk::commit(&setup, &polynomial)),
     );
 }
 
+fn ark_commit_template<E, P>(c: &mut Criterion, nb_bytes: usize)
+where
+    E: Pairing,
+    P: DenseUVPolynomial<E::ScalarField>,
+    for<'a, 'b> &'a P: Div<&'b P, Output = P>,
+{
+    let rng = &mut test_rng();
+
+    let degree = zk::nb_elements_in_setup::<E::ScalarField>(nb_bytes);
+
+    let setup = KZG10::<E, P>::setup(degree, false, rng).unwrap();
+    let powers_of_g = setup.powers_of_g[..=degree].to_vec();
+    let powers_of_gamma_g = (0..=degree).map(|i| setup.powers_of_gamma_g[&i]).collect();
+    let powers = Powers::<E> {
+        powers_of_g: ark_std::borrow::Cow::Owned(powers_of_g),
+        powers_of_gamma_g: ark_std::borrow::Cow::Owned(powers_of_gamma_g),
+    };
+    let polynomial = P::rand(degree, rng);
+
+    c.bench_function(
+        &format!(
+            "commit (arkworks) {} bytes on {}",
+            nb_bytes,
+            std::any::type_name::<E>()
+        ),
+        |b| b.iter(|| KZG10::commit(&powers, &polynomial, None, None)),
+    );
+}
+
 fn commit(c: &mut Criterion) {
     for n in [1, 2, 4, 8, 16] {
         commit_template::<Fr, G1Projective, DensePolynomial<Fr>>(c, black_box(n * 1024));
     }
 }
 
-criterion_group!(benches, commit);
+fn ark_commit(c: &mut Criterion) {
+    for n in [1, 2, 4, 8, 16] {
+        ark_commit_template::<Bls12_381, DensePolynomial<<Bls12_381 as Pairing>::ScalarField>>(
+            c,
+            black_box(n * 1024),
+        );
+    }
+}
+
+criterion_group!(benches, commit, ark_commit);
 criterion_main!(benches);
-- 
GitLab


From aed74bffd3d96bf5680c88020e498a45f7707db9 Mon Sep 17 00:00:00 2001
From: "a.stevan" <antoine.stevan@isae-supaero.fr>
Date: Fri, 5 Apr 2024 16:50:10 +0200
Subject: [PATCH 3/5] measure the time of an Arkworks setup

---
 benches/setup.rs | 44 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)

diff --git a/benches/setup.rs b/benches/setup.rs
index 5ca6b63d..280189df 100644
--- a/benches/setup.rs
+++ b/benches/setup.rs
@@ -1,7 +1,8 @@
 use ark_bls12_381::{Fr, G1Projective};
-use ark_ec::CurveGroup;
+use ark_ec::{pairing::Pairing, CurveGroup};
 use ark_ff::PrimeField;
 use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial};
+use ark_poly_commit::kzg10::{self, KZG10};
 use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate};
 use ark_std::{ops::Div, test_rng};
 
@@ -114,11 +115,50 @@ where
     group.finish();
 }
 
+fn ark_setup_template<E, P>(c: &mut Criterion, nb_bytes: usize)
+where
+    E: Pairing,
+    P: DenseUVPolynomial<E::ScalarField>,
+    for<'a, 'b> &'a P: Div<&'b P, Output = P>,
+{
+    let rng = &mut test_rng();
+
+    let degree = zk::nb_elements_in_setup::<E::ScalarField>(nb_bytes);
+
+    c.bench_function(
+        &format!(
+            "setup (arkworks) {} bytes on {}",
+            nb_bytes,
+            std::any::type_name::<E>()
+        ),
+        |b| {
+            b.iter(|| {
+                let setup = KZG10::<E, P>::setup(degree, false, rng).unwrap();
+                let powers_of_g = setup.powers_of_g[..=degree].to_vec();
+                let powers_of_gamma_g = (0..=degree).map(|i| setup.powers_of_gamma_g[&i]).collect();
+                kzg10::Powers::<E> {
+                    powers_of_g: ark_std::borrow::Cow::Owned(powers_of_g),
+                    powers_of_gamma_g: ark_std::borrow::Cow::Owned(powers_of_gamma_g),
+                };
+            })
+        },
+    );
+}
+
 fn setup(c: &mut Criterion) {
     for n in [1, 2, 4, 8, 16] {
         setup_template::<Fr, G1Projective, DensePolynomial<Fr>>(c, black_box(n * 1024));
     }
 }
 
-criterion_group!(benches, setup);
+fn ark_setup(c: &mut Criterion) {
+    for n in [1, 2, 4, 8, 16] {
+        ark_setup_template::<Bls12_381, DensePolynomial<<Bls12_381 as Pairing>::ScalarField>>(
+            c,
+            black_box(n * 1024),
+        );
+    }
+}
+
+criterion_group!(benches, setup, ark_setup);
 criterion_main!(benches);
-- 
GitLab


From 11433b6c81beec631eca42a88557b3a35d69c53f Mon Sep 17 00:00:00 2001
From: "a.stevan" <antoine.stevan@isae-supaero.fr>
Date: Fri, 5 Apr 2024 16:50:32 +0200
Subject: [PATCH 4/5] compute the degree outside the measurement loop

---
 benches/setup.rs | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/benches/setup.rs b/benches/setup.rs
index 280189df..dee3b8da 100644
--- a/benches/setup.rs
+++ b/benches/setup.rs
@@ -1,4 +1,4 @@
-use ark_bls12_381::{Fr, G1Projective};
+use ark_bls12_381::{Bls12_381, Fr, G1Projective};
 use ark_ec::{pairing::Pairing, CurveGroup};
 use ark_ff::PrimeField;
 use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial};
@@ -21,9 +21,11 @@ where
 
     let rng = &mut test_rng();
 
+    let degree = zk::nb_elements_in_setup::<F>(nb_bytes);
+
     group.bench_function(
         &format!("setup {} on {}", nb_bytes, std::any::type_name::<F>()),
-        |b| b.iter(|| zk::setup::<_, F, G>(zk::nb_elements_in_setup::<F>(nb_bytes), rng).unwrap()),
+        |b| b.iter(|| zk::setup::<_, F, G>(degree, rng).unwrap()),
     );
 
     let setup = zk::setup::<_, F, G>(zk::nb_elements_in_setup::<F>(nb_bytes), rng).unwrap();
-- 
GitLab


From b8a8fb3ba4d1eab17963a2f4ba015b27bad766c8 Mon Sep 17 00:00:00 2001
From: "a.stevan" <antoine.stevan@isae-supaero.fr>
Date: Mon, 8 Apr 2024 09:39:46 +0200
Subject: [PATCH 5/5] make Clippy happy

---
 benches/setup.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/benches/setup.rs b/benches/setup.rs
index dee3b8da..5ef5d0eb 100644
--- a/benches/setup.rs
+++ b/benches/setup.rs
@@ -141,7 +141,7 @@ where
                 kzg10::Powers::<E> {
                     powers_of_g: ark_std::borrow::Cow::Owned(powers_of_g),
                     powers_of_gamma_g: ark_std::borrow::Cow::Owned(powers_of_gamma_g),
-                };
+                }
             })
         },
     );
-- 
GitLab