Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
test_utils.hpp
Go to the documentation of this file.
1#pragma once
4#include <vector>
5
6namespace bb {
10template <typename Curve>
15generate_concatenation_inputs(const std::vector<typename Curve::ScalarField>& u_challenge,
16 const size_t num_concatenated,
17 const size_t group_size,
18 const CommitmentKey<Curve>& ck)
19{
20 using Fr = typename Curve::ScalarField;
21 using Commitment = typename Curve::AffineElement;
22 using Polynomial = bb::Polynomial<Fr>;
23
24 size_t N = 1 << u_challenge.size();
25 size_t MINI_CIRCUIT_N = N / group_size; // size of chunks
26
27 // Polynomials "chunks" that are concatenated in the PCS
28 std::vector<std::vector<Polynomial>> concatenation_groups;
29
30 // Concatenated polynomials
31 std::vector<Polynomial> concatenated_polynomials;
32
33 // Evaluations of concatenated polynomials
34 std::vector<Fr> c_evaluations;
35
36 // For each polynomial to be concatenated
37 for (size_t i = 0; i < num_concatenated; ++i) {
38 std::vector<Polynomial> concatenation_group;
39 Polynomial concatenated_polynomial(N);
40 for (size_t j = 0; j < group_size; j++) {
41 Polynomial chunk_polynomial(N);
42 // Fill the chunk polynomial with random values and appropriately fill the space in
43 // concatenated_polynomial
44 for (size_t k = 0; k < MINI_CIRCUIT_N; k++) {
45 // Chunks should be shiftable
46 auto tmp = Fr(0);
47 if (k > 0) {
48 tmp = Fr::random_element();
49 }
50 chunk_polynomial.at(k) = tmp;
51 concatenated_polynomial.at(k * group_size + j) = tmp;
52 }
53 concatenation_group.emplace_back(chunk_polynomial);
54 }
55 // Store chunks
56 concatenation_groups.emplace_back(concatenation_group);
57 // Store concatenated polynomial
58 concatenated_polynomials.emplace_back(concatenated_polynomial);
59 // Get evaluation
60 c_evaluations.emplace_back(concatenated_polynomial.evaluate_mle(u_challenge));
61 }
62
63 // Compute commitments of all polynomial chunks
64 std::vector<std::vector<Commitment>> concatenation_groups_commitments;
65 for (size_t i = 0; i < num_concatenated; ++i) {
66 std::vector<Commitment> concatenation_group_commitment;
67 for (size_t j = 0; j < group_size; j++) {
68 concatenation_group_commitment.emplace_back(ck.commit(concatenation_groups[i][j]));
69 }
70 concatenation_groups_commitments.emplace_back(concatenation_group_commitment);
71 }
72
73 return { concatenation_groups, concatenated_polynomials, c_evaluations, concatenation_groups_commitments };
74};
75} // namespace bb
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
std::size_t size() const
typename Group::affine_element AffineElement
Definition grumpkin.hpp:63
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
CommitmentKey< Curve > ck
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Curve::ScalarField Fr
static field random_element(numeric::RNG *engine=nullptr) noexcept