22 static constexpr size_t LOG_N = 4;
23 static constexpr size_t N = 1UL << LOG_N;
42 for (
size_t idx = 0; idx <
N; ++idx) {
43 result += left[idx] * right[idx];
52 static std::vector<Fr> shift_tensor(
const std::vector<Fr>& point)
56 for (
size_t idx = 1; idx <
N; ++idx) {
66 input.claim_data.unshifted.multilinear_challenge = multilinear_challenge;
68 const auto shift = shift_tensor(multilinear_challenge);
70 for (
size_t idx = 0; idx < 5; ++idx) {
72 input.claim_data.unshifted.evaluations.emplace_back(
74 input.claim_data.unshifted.commitments.emplace_back(
ck.commit(polynomial));
75 input.unshifted_polynomials.emplace_back(
std::move(polynomial));
77 input.claim_data.unshifted.rho_powers =
78 PCS::TripleIpaClaimData::rho_powers(this->
random_element(), input.unshifted_polynomials.size());
80 const std::array<size_t, 2> shifted_sources = { 1, 3 };
81 input.claim_data.shifted.rho_powers =
82 PCS::TripleIpaClaimData::rho_powers(this->
random_element(), shifted_sources.size());
83 for (
const size_t source_idx : shifted_sources) {
84 input.claim_data.shifted.commitments.emplace_back(input.claim_data.unshifted.commitments[source_idx]);
85 input.claim_data.shifted.source_unshifted_evaluations.emplace_back(
86 input.claim_data.unshifted.evaluations[source_idx]);
87 input.claim_data.shifted.shifted_evaluations.emplace_back(
89 input.shifted_polynomials.emplace_back(input.unshifted_polynomials[source_idx].share());
93 input.claim_data.univariate.opening_pair.challenge = this->
random_element();
94 input.claim_data.univariate.opening_pair.evaluation =
95 input.univariate_polynomial.evaluate(input.claim_data.univariate.opening_pair.challenge);
96 input.claim_data.univariate.commitment =
ck.commit(input.univariate_polynomial);
104 return prover_transcript->export_proof();
121 const auto input = create_input();
122 const auto proof = prove(input);
123 EXPECT_TRUE(verify(input, proof));
126TEST_F(TripleIPATest, NativeVerifierDoesNotNeedWitnessPolynomials)
128 const auto input = create_input();
129 const auto proof = prove(input);
131 auto verifier_input = input;
132 verifier_input.unshifted_polynomials.clear();
133 verifier_input.univariate_polynomial = Poly();
134 EXPECT_TRUE(verify(verifier_input, proof));
139TEST_F(TripleIPATest, NativeBatchVerifyAccumulatorsDischargesMultipleProofs)
141 const auto input1 = create_input();
142 const auto proof1 = prove(input1);
143 const auto input2 = create_input();
144 const auto proof2 = prove(input2);
154TEST_F(TripleIPATest, NativeBatchVerifyAccumulatorsRejectsTamperedProof)
156 const auto input1 = create_input();
157 const auto proof1 = prove(input1);
158 const auto input2 = create_input();
159 auto proof2 = prove(input2);
161 ASSERT_FALSE(proof2.empty());
#define BB_ASSERT_EQ(actual, expected,...)
std::vector< DataType > Proof
CommitmentKey object over a pairing group 𝔾₁.
CommitmentKey< Curve > CK
Polynomial random_polynomial(const size_t poly_size)
VerifierCommitmentKey< Curve > VK
std::vector< Fr > random_evaluation_point(const size_t num_variables)
static void SetUpTestSuite()
IPA (inner product argument) commitment scheme class.
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.
static bool reduce_verify(const VK &vk, const TripleIpaClaim &claim, const std::shared_ptr< Transcript > &transcript)
static void compute_opening_proof(const CK &ck, const TripleIpaInput &input, const std::shared_ptr< Transcript > &transcript)
bb::TripleIpaInput< Curve > TripleIpaInput
Representation of the Grumpkin Verifier Commitment Key inside a bn254 circuit.
void init_grumpkin_file_crs_factory(const std::filesystem::path &path)
std::filesystem::path bb_crs_path()
std::shared_ptr< factories::CrsFactory< curve::Grumpkin > > get_grumpkin_crs_factory()
Entry point for Barretenberg command-line interface.
TEST_F(IPATest, ChallengesAreZero)
constexpr ScalarIndex shift(ScalarIndex ctx, size_t d)
CommitmentKey< Curve > ck
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr field one()
static constexpr field zero()