3#include "barretenberg/commitment_schemes/commitment_key.hpp"
4#include "barretenberg/commitment_schemes/verification_key.hpp"
5#include "barretenberg/ecc/curves/bn254/g1.hpp"
6#include "barretenberg/polynomials/polynomial.hpp"
7#include "barretenberg/srs/factories/file_crs_factory.hpp"
14#include <gtest/gtest.h>
18template <
class CK>
inline std::shared_ptr<CK> CreateCommitmentKey();
20template <>
inline std::shared_ptr<CommitmentKey<curve::BN254>> CreateCommitmentKey<CommitmentKey<curve::BN254>>()
22 constexpr size_t n = 4096;
23 std::shared_ptr<barretenberg::srs::factories::CrsFactory<curve::BN254>> crs_factory(
25 return std::make_shared<CommitmentKey<curve::BN254>>(n, crs_factory);
28template <>
inline std::shared_ptr<CommitmentKey<curve::Grumpkin>> CreateCommitmentKey<CommitmentKey<curve::Grumpkin>>()
30 constexpr size_t n = 4096;
31 std::shared_ptr<barretenberg::srs::factories::CrsFactory<curve::Grumpkin>> crs_factory(
33 return std::make_shared<CommitmentKey<curve::Grumpkin>>(n, crs_factory);
36template <
typename CK>
inline std::shared_ptr<CK> CreateCommitmentKey()
39 return std::make_shared<CK>();
42template <
class VK>
inline std::shared_ptr<VK> CreateVerifierCommitmentKey();
45inline std::shared_ptr<VerifierCommitmentKey<curve::BN254>> CreateVerifierCommitmentKey<
46 VerifierCommitmentKey<curve::BN254>>()
48 constexpr size_t n = 4096;
49 std::shared_ptr<barretenberg::srs::factories::CrsFactory<curve::BN254>> crs_factory(
51 return std::make_shared<VerifierCommitmentKey<curve::BN254>>(n, crs_factory);
55inline std::shared_ptr<VerifierCommitmentKey<curve::Grumpkin>> CreateVerifierCommitmentKey<
56 VerifierCommitmentKey<curve::Grumpkin>>()
58 constexpr size_t n = 4096;
59 std::shared_ptr<barretenberg::srs::factories::CrsFactory<curve::Grumpkin>> crs_factory(
61 return std::make_shared<VerifierCommitmentKey<curve::Grumpkin>>(n, crs_factory);
63template <
typename VK>
inline std::shared_ptr<VK> CreateVerifierCommitmentKey()
66 return std::make_shared<VK>();
72 using Fr =
typename Curve::ScalarField;
73 using Commitment =
typename Curve::AffineElement;
78 : engine{ &numeric::random::get_engine() }
81 std::shared_ptr<CK> ck() {
return commitment_key; }
82 std::shared_ptr<VK> vk() {
return verification_key; }
89 for (
size_t i = 0; i < n; ++i) {
90 p[i] = Fr::random_element(engine);
95 Fr random_element() {
return Fr::random_element(engine); }
99 Fr x{ random_element() };
104 std::pair<OpeningClaim<Curve>,
Polynomial> random_claim(
const size_t n)
113 std::vector<Fr> random_evaluation_point(
const size_t num_variables)
115 std::vector<Fr> u(num_variables);
116 for (
size_t l = 0; l < num_variables; ++l) {
117 u[l] = random_element();
124 auto& commitment = claim.commitment;
125 auto& [x, y] = claim.opening_pair;
126 Fr y_expected = witness.evaluate(x);
127 EXPECT_EQ(y, y_expected) <<
"OpeningClaim: evaluations mismatch";
128 Commitment commitment_expected = commit(witness);
130 EXPECT_EQ(commitment, commitment_expected) <<
"OpeningClaim: commitment mismatch";
135 auto& [x, y] = opening_pair;
136 Fr y_expected = witness.evaluate(x);
137 EXPECT_EQ(y, y_expected) <<
"OpeningPair: evaluations mismatch";
148 std::span<const Polynomial> witnesses)
150 const size_t num_claims = multi_claims.size();
151 ASSERT_EQ(witnesses.size(), num_claims);
153 for (
size_t j = 0; j < num_claims; ++j) {
154 this->verify_opening_claim(multi_claims[j], witnesses[j]);
163 std::span<const Polynomial> witnesses)
165 const size_t num_pairs = opening_pairs.size();
166 ASSERT_EQ(witnesses.size(), num_pairs);
168 for (
size_t j = 0; j < num_pairs; ++j) {
169 this->verify_opening_pair(opening_pairs[j], witnesses[j]);
178 static void SetUpTestSuite()
181 if (commitment_key ==
nullptr) {
182 commitment_key = CreateCommitmentKey<CK>();
184 if (verification_key ==
nullptr) {
185 verification_key = CreateVerifierCommitmentKey<VK>();
192 static void TearDownTestSuite() {}
194 static typename std::shared_ptr<CK> commitment_key;
195 static typename std::shared_ptr<VK> verification_key;
198template <
typename Curve>
199typename std::shared_ptr<CommitmentKey<Curve>> CommitmentTest<Curve>::commitment_key =
nullptr;
200template <
typename Curve>
201typename std::shared_ptr<VerifierCommitmentKey<Curve>> CommitmentTest<Curve>::verification_key =
nullptr;
203using CommitmentSchemeParams = ::testing::Types<curve::BN254>;
204using IpaCommitmentSchemeParams = ::testing::Types<curve::Grumpkin>;
Definition: polynomial.hpp:12
Definition: file_crs_factory.hpp:16
Definition: engine.hpp:10
CommitmentKey object over a pairing group 𝔾₁.
Definition: commitment_key.hpp:35
Definition: commitment_key.test.hpp:68
void verify_batch_opening_claim(std::span< const OpeningClaim< Curve > > multi_claims, std::span< const Polynomial > witnesses)
Ensures that a 'BatchOpeningClaim' is correct by checking that.
Definition: commitment_key.test.hpp:147
void verify_batch_opening_pair(std::span< const OpeningPair< Curve > > opening_pairs, std::span< const Polynomial > witnesses)
Ensures that a set of opening pairs is correct by checking that evaluations are correct by recomputin...
Definition: commitment_key.test.hpp:162
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
Definition: claim.hpp:43
Opening pair (r,v) for some witness polynomial p(X) such that p(r) = v.
Definition: claim.hpp:12
Definition: verification_key.hpp:25
Provides interfaces for different 'CommitmentKey' classes.
Definition: claim.hpp:6