3#include "../pcs_test_utils.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(pairing_points.check(),
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(pairing_point.check(),
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(pairing_points.check(),
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(pairing_points.check(),
true);
230 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
246 auto prover_opening_claims =
247 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
252 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
256 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
265 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
267 auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
270 vk.get_g1_identity(),
277 .batch_opening_claim;
278 const auto pairing_points =
279 PCS::reduce_verify_batch_opening_claim(
std::move(batch_opening_claim), verifier_transcript);
282 EXPECT_EQ(pairing_points.check(),
true);
286 std::vector<Fr> mle_opening_point = random_evaluation_point(log_n);
302 auto prover_opening_claims =
303 GeminiProver::prove(n, mock_claims.
polynomial_batcher, mle_opening_point,
ck, prover_transcript);
308 const auto opening_claim = ShplonkProver::prove(
ck, prover_opening_claims, prover_transcript);
312 PCS::compute_opening_proof(
ck, opening_claim, prover_transcript);
319 const size_t to_be_shifted_commitments_start = 2;
322 const size_t shifted_commitments_start = 4;
324 const size_t num_shifted_commitments = 2;
334 std::ranges::fill(padding_indicator_array,
Fr{ 1 });
336 auto batch_opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
339 vk.get_g1_identity(),
341 repeated_commitments)
342 .batch_opening_claim;
344 const auto pairing_points =
345 PCS::reduce_verify_batch_opening_claim(
std::move(batch_opening_claim), verifier_transcript);
348 EXPECT_EQ(pairing_points.check(),
true);
static std::shared_ptr< BaseTranscript > test_prover_init_empty()
For testing: initializes transcript with some arbitrary data so that a challenge can be generated aft...
static std::shared_ptr< BaseTranscript > test_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) 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()