Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
multilinear_batching_prover.test.cpp
Go to the documentation of this file.
6
7#include <gtest/gtest.h>
8
9namespace bb {
10namespace {
11
15
16MultilinearBatchingProverClaim create_valid_claim()
17{
19
21
23 for (size_t i = 0; i < MultilinearBatchingFlavor::VIRTUAL_LOG_N; i++) {
24 claim.challenge[i] = FF::random_element();
25 }
26
27 const size_t dyadic_size = 16;
28 claim.non_shifted_polynomial = Polynomial(dyadic_size);
29 claim.shifted_polynomial = Polynomial::shiftable(dyadic_size);
30
31 claim.non_shifted_polynomial.at(0) = FF::random_element();
32 for (size_t i = 1; i < dyadic_size; i++) {
33 claim.non_shifted_polynomial.at(i) = FF::random_element();
34 claim.shifted_polynomial.at(i) = FF::random_element();
35 }
36
37 claim.non_shifted_commitment = Commitment::random_element();
38 claim.shifted_commitment = Commitment::random_element();
39
40 auto eq_polynomial = ProverEqPolynomial<FF>::construct(claim.challenge, 4);
41
42 // Compute non-shifted evaluation
43 claim.non_shifted_evaluation = 0;
44 for (size_t i = 0; i < claim.non_shifted_polynomial.size(); i++) {
45 claim.non_shifted_evaluation += claim.non_shifted_polynomial.at(i) * eq_polynomial.at(i);
46 }
47
48 // Compute shifted evaluation using the shifted polynomial
49 auto shifted = claim.shifted_polynomial.shifted();
50 claim.shifted_evaluation = 0;
51 for (size_t i = 0; i < shifted.size(); i++) {
52 claim.shifted_evaluation += shifted.at(i) * eq_polynomial.at(i);
53 }
54
55 claim.dyadic_size = dyadic_size;
56 return claim;
57}
58
59TEST(MultilinearBatchingProver, ConstructProof)
60{
61 auto transcript = std::make_shared<Transcript>();
62 auto accumulator_claim = std::make_shared<MultilinearBatchingProverClaim>(create_valid_claim());
63 auto instance_claim = std::make_shared<MultilinearBatchingProverClaim>(create_valid_claim());
64 MultilinearBatchingProver prover{ accumulator_claim, instance_claim, transcript };
65
66 auto proof = prover.construct_proof();
67 EXPECT_FALSE(proof.empty());
68}
69
71{
72 auto prover_transcript = std::make_shared<Transcript>();
73 auto accumulator_claim = std::make_shared<MultilinearBatchingProverClaim>(create_valid_claim());
74 auto instance_claim = std::make_shared<MultilinearBatchingProverClaim>(create_valid_claim());
75 MultilinearBatchingProver prover{ accumulator_claim, instance_claim, prover_transcript };
76
77 auto proof = prover.construct_proof();
78 EXPECT_FALSE(proof.empty());
79 auto verifier_transcript = std::make_shared<Transcript>();
80 verifier_transcript->load_proof(proof);
81 MultilinearBatchingVerifier<MultilinearBatchingFlavor> verifier{ verifier_transcript };
82
83 auto [verified, sumcheck_output] = verifier.verify_proof();
84 EXPECT_TRUE(verified);
85 auto challenge = sumcheck_output.challenge;
86 auto new_challenge = std::vector<FF>(MultilinearBatchingFlavor::VIRTUAL_LOG_N);
87}
88
89} // namespace
90} // namespace bb
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
std::pair< bool, VerifierClaim > verify_proof()
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
Polynomial shifted() const
Returns a Polynomial the left-shift of self.
Fr & at(size_t index)
Our mutable accessor, unlike operator[]. We abuse precedent a bit to differentiate at() and operator[...
std::size_t size() const
static Polynomial< FF > construct(std::span< const FF > challenges, size_t log_num_monomials)
Construct eq(X, r) coefficient table over Boolean hypercube {0,1}^d.
Entry point for Barretenberg command-line interface.
typename Flavor::FF FF
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13