3#include "../commitment_key.test.hpp"
9using Curve = curve::BN254;
21 static constexpr size_t n = 16;
22 static constexpr size_t log_n = 4;
33 ck = create_commitment_key<CK>(
n);
34 vk = create_verifier_commitment_key<VK>();
50 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
59 const Fr evaluation = witness.evaluate(challenge);
61 prove_and_verify({ challenge, evaluation }, witness);
69 const Fr evaluation = witness.evaluate(challenge);
72 witness.at(0) -= evaluation;
74 prove_and_verify({ challenge,
Fr::zero() }, witness);
79 static constexpr size_t POLY_SIZE = 10;
81 for (
size_t idx = 0; idx < POLY_SIZE; ++idx) {
89 const Fr evaluation = zero.
evaluate(challenge);
91 prove_and_verify({ challenge, evaluation }, zero);
98 const Fr evaluation = constant.evaluate(challenge);
100 prove_and_verify({ challenge, evaluation }, constant);
107 const Fr evaluation = empty_poly.
evaluate(challenge);
109 prove_and_verify({ challenge, evaluation }, empty_poly);
132 const Fr evaluation = witness.evaluate(challenge);
138 PCS::compute_opening_proof(
ck, { witness_polynomial, opening_pair }, prover_transcript);
141 auto pairing_points = PCS::reduce_verify(opening_claim, verifier_transcript);
143 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
149 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
164 auto prover_opening_claims =
165 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
170 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
174 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
183 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
185 auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
189 verifier_transcript);
191 const auto pairing_points =
192 PCS::reduce_verify_batch_opening_claim(
std::move(batch_opening_claim), verifier_transcript);
195 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
200 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
218 auto prover_opening_claims =
219 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
224 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
228 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
237 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
239 auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
251 const auto pairing_points =
252 PCS::reduce_verify_batch_opening_claim(
std::move(batch_opening_claim), verifier_transcript);
255 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
259 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
275 auto prover_opening_claims =
276 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
281 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
285 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
292 const size_t to_be_shifted_commitments_start = 2;
295 const size_t shifted_commitments_start = 4;
297 const size_t num_shifted_commitments = 2;
307 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
309 auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
314 repeated_commitments);
316 const auto pairing_points =
317 PCS::reduce_verify_batch_opening_claim(
std::move(batch_opening_claim), verifier_transcript);
320 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
static std::shared_ptr< BaseTranscript > prover_init_empty()
For testing: initializes transcript with some arbitrary data so that a challenge can be generated aft...
static std::shared_ptr< BaseTranscript > verifier_init_empty(const std::shared_ptr< BaseTranscript > &transcript)
For testing: initializes transcript based on proof data then receives junk data produced by BaseTrans...
CommitmentKey object over a pairing group 𝔾₁.
Commitment commit(PolynomialSpan< const Fr > polynomial) const
Uses the ProverSRS to create a commitment to p(X)
static PairingPointsType reduce_verify(const OpeningClaim< Curve > &claim, const std::shared_ptr< Transcript > &verifier_transcript)
Computes the input points for the pairing check needed to verify a KZG opening claim of a single poly...
static void compute_opening_proof(const CK &ck, const ProverOpeningClaim< Curve > &opening_claim, const std::shared_ptr< Transcript > &prover_trancript)
Computes the KZG commitment to an opening proof polynomial at a single evaluation point.
typename Curve::ScalarField Fr
static constexpr size_t log_n
typename Curve::AffineElement Commitment
static void prove_and_verify(const OpeningPair< Curve > &opening_pair, bb::Polynomial< Fr > &witness)
static constexpr size_t n
static void SetUpTestSuite()
static constexpr Commitment g1_identity
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
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
Fr & at(size_t index)
Our mutable accessor, unlike operator[]. We abuse precedent a bit to differentiate at() and operator[...
bool is_zero() const
Check whether or not a polynomial is identically zero.
An efficient verifier for the evaluation proofs of multilinear polynomials and their shifts.
static Univariate get_random()
Commitment get_g1_identity() const
typename Group::affine_element AffineElement
element class. Implements ecc group arithmetic using Jacobian coordinates See https://hyperelliptic....
Entry point for Barretenberg command-line interface.
TEST_F(IPATest, ChallengesAreZero)
CommitmentKey< Curve > ck
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Constructs random polynomials, computes commitments and corresponding evaluations.
ClaimBatcher claim_batcher
PolynomialBatcher polynomial_batcher
static field random_element(numeric::RNG *engine=nullptr) noexcept
static constexpr field zero()