3#include "../commitment_key.test.hpp"
9using Curve = curve::BN254;
23 static constexpr size_t n = 16;
24 static constexpr size_t log_n = 4;
35 ck = create_commitment_key<CK>(
n);
36 vk = create_verifier_commitment_key<VK>();
52 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
61 const Fr evaluation = witness.evaluate(challenge);
63 prove_and_verify({ challenge, evaluation }, witness);
71 const Fr evaluation = witness.evaluate(challenge);
74 witness.at(0) -= evaluation;
76 prove_and_verify({ challenge,
Fr::zero() }, witness);
81 static constexpr size_t POLY_SIZE = 10;
83 for (
size_t idx = 0; idx < POLY_SIZE; ++idx) {
91 const Fr evaluation = zero.
evaluate(challenge);
93 prove_and_verify({ challenge, evaluation }, zero);
100 const Fr evaluation = constant.evaluate(challenge);
102 prove_and_verify({ challenge, evaluation }, constant);
109 const Fr evaluation = empty_poly.
evaluate(challenge);
111 prove_and_verify({ challenge, evaluation }, empty_poly);
134 const Fr evaluation = witness.evaluate(challenge);
140 PCS::compute_opening_proof(
ck, { witness_polynomial, opening_pair }, prover_transcript);
143 auto pairing_points = PCS::reduce_verify(opening_claim, verifier_transcript);
145 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
158 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
174 auto prover_opening_claims =
175 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
180 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
184 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
192 auto gemini_verifier_claim =
193 GeminiVerifier::reduce_verification(mle_opening_point, mock_claims.
claim_batcher, verifier_transcript);
196 const auto shplonk_verifier_claim =
197 ShplonkVerifier::reduce_verification(
vk.
get_g1_identity(), gemini_verifier_claim, verifier_transcript);
201 auto pairing_points = PCS::reduce_verify(shplonk_verifier_claim, verifier_transcript);
205 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
212 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
228 auto prover_opening_claims =
229 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
234 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
238 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
247 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
249 const auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
253 verifier_transcript);
255 const auto pairing_points = PCS::reduce_verify_batch_opening_claim(batch_opening_claim, verifier_transcript);
258 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
263 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
282 auto prover_opening_claims =
283 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
288 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
292 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
301 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
303 const auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
315 const auto pairing_points = PCS::reduce_verify_batch_opening_claim(batch_opening_claim, verifier_transcript);
318 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
322 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
339 auto prover_opening_claims =
340 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
345 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
349 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
356 const size_t to_be_shifted_commitments_start = 2;
359 const size_t shifted_commitments_start = 4;
361 const size_t num_shifted_commitments = 2;
371 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
373 const auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
378 repeated_commitments);
380 const auto pairing_points = PCS::reduce_verify_batch_opening_claim(batch_opening_claim, verifier_transcript);
383 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
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...
static std::shared_ptr< BaseTranscript > prover_init_empty()
For testing: initializes transcript with some arbitrary data so that a challenge can be generated aft...
CommitmentKey object over a pairing group 𝔾₁.
Commitment commit(PolynomialSpan< const Fr > polynomial) const
Uses the ProverSRS to create a commitment to p(X)
static VerifierAccumulator 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 .....
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()