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// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7#pragma once
10#include <vector>
11
12namespace bb {
16template <typename Curve>
21generate_concatenation_inputs(const std::vector<typename Curve::ScalarField>& u_challenge,
22 const size_t num_concatenated,
23 const size_t group_size,
24 const CommitmentKey<Curve>& ck)
25{
26 using Fr = typename Curve::ScalarField;
27 using Commitment = typename Curve::AffineElement;
29
30 size_t N = 1 << u_challenge.size();
31 size_t MINI_CIRCUIT_N = N / group_size; // size of chunks
32
33 // Polynomials "chunks" that are concatenated in the PCS
34 std::vector<std::vector<Polynomial>> concatenation_groups;
35
36 // Concatenated polynomials
37 std::vector<Polynomial> concatenated_polynomials;
38
39 // Evaluations of concatenated polynomials
40 std::vector<Fr> c_evaluations;
41
42 // For each polynomial to be concatenated
43 for (size_t i = 0; i < num_concatenated; ++i) {
44 std::vector<Polynomial> concatenation_group;
45 Polynomial concatenated_polynomial(N);
46 for (size_t j = 0; j < group_size; j++) {
47 Polynomial chunk_polynomial(N);
48 // Fill the chunk polynomial with random values and appropriately fill the space in
49 // concatenated_polynomial
50 for (size_t k = 0; k < MINI_CIRCUIT_N; k++) {
51 // Chunks should be shiftable
52 auto tmp = Fr(0);
53 if (k > 0) {
54 tmp = Fr::random_element();
55 }
56 chunk_polynomial.at(k) = tmp;
57 concatenated_polynomial.at(k * group_size + j) = tmp;
58 }
59 concatenation_group.emplace_back(chunk_polynomial);
60 }
61 // Store chunks
62 concatenation_groups.emplace_back(concatenation_group);
63 // Store concatenated polynomial
64 concatenated_polynomials.emplace_back(concatenated_polynomial);
65 // Get evaluation
66 c_evaluations.emplace_back(concatenated_polynomial.evaluate_mle(u_challenge));
67 }
68
69 // Compute commitments of all polynomial chunks
70 std::vector<std::vector<Commitment>> concatenation_groups_commitments;
71 for (size_t i = 0; i < num_concatenated; ++i) {
72 std::vector<Commitment> concatenation_group_commitment;
73 for (size_t j = 0; j < group_size; j++) {
74 concatenation_group_commitment.emplace_back(ck.commit(concatenation_groups[i][j]));
75 }
76 concatenation_groups_commitments.emplace_back(concatenation_group_commitment);
77 }
78
79 return { concatenation_groups, concatenated_polynomials, c_evaluations, concatenation_groups_commitments };
80};
81} // 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:56
typename Flavor::Polynomial Polynomial
Entry point for Barretenberg command-line interface.
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