3#include "../commitment_key.test.hpp"
9using Curve = curve::BN254;
22 static constexpr size_t n = 16;
23 static constexpr size_t log_n = 4;
34 ck = create_commitment_key<CK>(
n);
35 vk = create_verifier_commitment_key<VK>();
51 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
60 const Fr evaluation = witness.evaluate(challenge);
62 prove_and_verify({ challenge, evaluation }, witness);
70 const Fr evaluation = witness.evaluate(challenge);
73 witness.at(0) -= evaluation;
75 prove_and_verify({ challenge,
Fr::zero() }, witness);
82 const Fr evaluation = witness.evaluate(challenge);
85 Commitment commitment =
ck.commit(witness);
87 PCS::compute_opening_proof(
ck, { witness, { challenge, wrong_evaluation } }, prover_transcript);
92 auto pairing_point = PCS::reduce_verify(opening_claim, verifier_transcript);
94 EXPECT_EQ(
vk.pairing_check(pairing_point[0], pairing_point[1]),
false);
99 static constexpr size_t POLY_SIZE = 10;
101 for (
size_t idx = 0; idx < POLY_SIZE; ++idx) {
109 const Fr evaluation = zero.
evaluate(challenge);
111 prove_and_verify({ challenge, evaluation }, zero);
118 auto constant_term = witness.at(0);
120 prove_and_verify({ challenge, constant_term }, witness);
127 const Fr evaluation = constant.evaluate(challenge);
129 prove_and_verify({ challenge, evaluation }, constant);
136 const Fr evaluation = empty_poly.
evaluate(challenge);
138 prove_and_verify({ challenge, evaluation }, empty_poly);
161 const Fr evaluation = witness.evaluate(challenge);
167 PCS::compute_opening_proof(
ck, { witness_polynomial, opening_pair }, prover_transcript);
170 auto pairing_points = PCS::reduce_verify(opening_claim, verifier_transcript);
172 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
178 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
193 auto prover_opening_claims =
194 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
199 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
203 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
212 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
214 auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
217 vk.get_g1_identity(),
219 .batch_opening_claim;
221 const auto pairing_points =
222 PCS::reduce_verify_batch_opening_claim(
std::move(batch_opening_claim), verifier_transcript);
225 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
230 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
248 auto prover_opening_claims =
249 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
254 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
258 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
267 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
269 auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
272 vk.get_g1_identity(),
279 .batch_opening_claim;
280 const auto pairing_points =
281 PCS::reduce_verify_batch_opening_claim(
std::move(batch_opening_claim), verifier_transcript);
284 EXPECT_EQ(
vk.pairing_check(pairing_points[0], pairing_points[1]),
true);
288 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
304 auto prover_opening_claims =
305 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
310 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
314 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
321 const size_t to_be_shifted_commitments_start = 2;
324 const size_t shifted_commitments_start = 4;
326 const size_t num_shifted_commitments = 2;
336 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
338 auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
341 vk.get_g1_identity(),
343 repeated_commitments)
344 .batch_opening_claim;
346 const auto pairing_points =
347 PCS::reduce_verify_batch_opening_claim(
std::move(batch_opening_claim), verifier_transcript);
350 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.
static Univariate get_random()
Representation of the Grumpkin Verifier Commitment Key inside a bn254 circuit.
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()