16#include <gtest/gtest.h>
50 for (
const auto& claim : claim_data) {
51 prover_claims.emplace_back(claim.prover_opening_claim());
60 for (
const auto& claim : claim_data) {
61 verifier_claims.emplace_back(claim.verifier_opening_claim());
64 return verifier_claims;
69 std::vector<Commitment> commitments;
70 for (
const auto& claim : claim_data) {
71 commitments.emplace_back(claim.polynomial_commiment());
84 if (num_points != 0) {
91inline CommitmentKey<curve::Grumpkin> create_commitment_key<CommitmentKey<curve::Grumpkin>>(
const size_t num_points)
94 if (num_points != 0) {
95 return CommitmentKey<curve::Grumpkin>(num_points);
103 return CK(num_points);
115inline VerifierCommitmentKey<curve::Grumpkin> create_verifier_commitment_key<VerifierCommitmentKey<curve::Grumpkin>>()
156 std::vector<Fr> u(num_variables);
157 for (
size_t l = 0; l < num_variables; ++l) {
170 EXPECT_EQ(y, y_expected) <<
"OpeningClaim: evaluations mismatch";
174 commitment_expected =
commit(witness);
176 commitment_expected =
ck.
commit(witness);
179 EXPECT_EQ(commitment, commitment_expected) <<
"OpeningClaim: commitment mismatch";
184 auto& [x, y] = opening_pair;
186 EXPECT_EQ(y, y_expected) <<
"OpeningPair: evaluations mismatch";
199 const size_t num_claims = multi_claims.size();
200 ASSERT_EQ(witnesses.size(), num_claims);
202 for (
size_t j = 0; j < num_claims; ++j) {
213 for (
auto claim : opening_claims) {
215 Fr y_expected = claim.polynomial.evaluate(x);
216 EXPECT_EQ(y, y_expected) <<
"OpeningPair: evaluations mismatch";
223 const size_t num_claims = poly_sizes.size();
225 claims.reserve(num_claims);
226 for (
const auto& poly_size : poly_sizes) {
229 auto eval = poly.evaluate(r);
230 auto commitment = this->
commit(poly);
234 claims.emplace_back(claim);
243 const size_t num_claims = claims.size();
244 size_t max_poly_size = 0;
247 std::vector<Fr> coefficients;
248 coefficients.reserve(num_claims);
249 for (
size_t idx = 0; idx < num_claims; idx++) {
251 max_poly_size =
std::max(max_poly_size, claims[idx].poly.size());
257 std::vector<Fr> evals;
258 evals.reserve(num_claims);
259 for (
const auto& [coeff, claim] :
zip_view(coefficients, claims)) {
260 linear_combination.
add_scaled(claim.poly, coeff);
262 auto tmp = claim.poly.evaluate(challenge);
263 evals.emplace_back(tmp);
270 claims.emplace_back(new_claim);
CommitmentKey object over a pairing group 𝔾₁.
Commitment commit(PolynomialSpan< const Fr > polynomial) const
Uses the ProverSRS to create a commitment to p(X)
bool initialized() const
Checks the commitment key is properly initialized.
std::shared_ptr< srs::factories::Crs< Curve > > srs
Commitment commit(const Polynomial &polynomial)
void verify_opening_pair(const OpeningPair< Curve > &opening_pair, const Polynomial &witness)
static VK verification_key
static void TearDownTestSuite()
Polynomial random_polynomial(const size_t poly_size)
typename Curve::ScalarField Fr
void verify_batch_opening_pair(std::vector< ProverOpeningClaim< Curve > > opening_claims)
Ensures that a set of opening pairs is correct by checking that evaluations are correct by recomputin...
std::vector< Fr > random_evaluation_point(const size_t num_variables)
void verify_opening_claim(const OpeningClaim< Curve > &claim, const Polynomial &witness, CommitmentKey< Curve > ck=CommitmentKey< Curve >())
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.
typename Curve::AffineElement Commitment
static void SetUpTestSuite()
std::vector< UnivariateClaimData< Curve > > generate_claim_data(const std::vector< size_t > &poly_sizes)
std::pair< std::vector< Fr >, std::vector< Fr > > combine_claims(std::vector< UnivariateClaimData< Curve > > &claims)
OpeningPair< Curve > random_eval(const Polynomial &polynomial)
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
OpeningPair< Curve > opening_pair
Opening pair (r,v) for some witness polynomial p(X) such that p(r) = v.
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
static Polynomial random(size_t size, size_t start_index=0)
Fr evaluate(const Fr &z, size_t target_size) const
void add_scaled(PolynomialSpan< const Fr > other, Fr scaling_factor) &
adds the polynomial q(X) 'other', multiplied by a scaling factor.
Polynomial p and an opening pair (r,v) such that p(r) = v.
ProverOpeningClaim< Curve > prover_opening_claim() const
typename Curve::ScalarField Fr
static std::vector< Commitment > polynomial_commitments(const std::vector< UnivariateClaimData > &claim_data)
static std::vector< OpeningClaim< Curve > > verifier_opening_claims(const std::vector< UnivariateClaimData > &claim_data)
static std::vector< ProverOpeningClaim< Curve > > prover_opening_claims(const std::vector< UnivariateClaimData > &claim_data)
typename Curve::AffineElement Commitment
OpeningPair< Curve > OpeningPair
Commitment polynomial_commiment() const
UnivariateClaimData(Polynomial &poly, Commitment &commitment, OpeningPair &opening_pair)
OpeningClaim< Curve > verifier_opening_claim() const
Representation of the Grumpkin Verifier Commitment Key inside a bn254 circuit.
typename Group::affine_element AffineElement
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
std::shared_ptr< factories::CrsFactory< curve::Grumpkin > > get_grumpkin_crs_factory()
Entry point for Barretenberg command-line interface.
CommitmentKey< Curve > create_commitment_key(const size_t num_points)
::testing::Types< curve::BN254 > CommitmentSchemeParams
constexpr size_t COMMITMENT_TEST_NUM_BN254_POINTS
constexpr size_t COMMITMENT_TEST_NUM_GRUMPKIN_POINTS
VK create_verifier_commitment_key()
::testing::Types< curve::Grumpkin > IpaCommitmentSchemeParams
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static field random_element(numeric::RNG *engine=nullptr) noexcept