Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
crs_factory.test.cpp
Go to the documentation of this file.
9#include <fstream>
10#include <gtest/gtest.h>
11#include <utility>
12
13using namespace bb;
14using namespace bb::srs::factories;
15using namespace bb::curve;
16namespace fs = std::filesystem;
17
18namespace {
19// BN254 consistency checker
20void check_bn254_consistency(const fs::path& crs_download_path, size_t num_points, bool allow_download)
21{
22 NativeBn254CrsFactory file_crs(crs_download_path, allow_download);
23
24 // read G1
25 std::vector<g1::affine_element> g1_points(num_points);
26 auto g1_buf = read_file(bb::srs::bb_crs_path() / "bn254_g1.dat", num_points * sizeof(g1::affine_element));
27 for (size_t i = 0; i < num_points; ++i) {
28 g1_points[i] = from_buffer<g1::affine_element>(g1_buf, i * sizeof(g1::affine_element));
29 }
30
31 // read G2
32 auto g2_buf = read_file(bb::srs::bb_crs_path() / "bn254_g2.dat", sizeof(g2::affine_element));
33 auto g2_point = from_buffer<g2::affine_element>(g2_buf);
34
35 // build in-memory CRS
36 MemBn254CrsFactory mem_crs(g1_points, g2_point);
37
38 // prover CRS
39 auto f_prover = file_crs.get_crs(num_points);
40 auto m_prover = mem_crs.get_crs(num_points);
41 EXPECT_EQ(m_prover->get_monomial_size(), f_prover->get_monomial_size());
42 for (size_t i = 0; i < num_points; ++i) {
43 EXPECT_EQ(std::make_pair(i, m_prover->get_monomial_points()[i]),
44 std::make_pair(i, f_prover->get_monomial_points()[i]));
45 }
46 // verifier CRS
47 auto f_ver = file_crs.get_verifier_crs();
48 auto m_ver = mem_crs.get_verifier_crs();
49 EXPECT_EQ(m_ver->get_g2x(), f_ver->get_g2x());
50 EXPECT_EQ(0,
51 memcmp(m_ver->get_precomputed_g2_lines(),
52 f_ver->get_precomputed_g2_lines(),
53 sizeof(pairing::miller_lines) * 2));
54}
55
56// Grumpkin consistency checker
57void check_grumpkin_consistency(const fs::path& crs_download_path, size_t num_points, bool allow_download)
58{
59 NativeGrumpkinCrsFactory file_crs(crs_download_path, allow_download);
60
61 // read G1
62 std::vector<Grumpkin::AffineElement> points(num_points);
63 auto data =
64 read_file(bb::srs::bb_crs_path() / "grumpkin_g1.flat.dat", num_points * sizeof(Grumpkin::AffineElement));
65
66 for (size_t i = 0; i < num_points; ++i) {
67 points[i] = from_buffer<Grumpkin::AffineElement>(data, i * sizeof(g1::affine_element));
68 }
69 MemGrumpkinCrsFactory mem_crs(points);
70
71 // prover CRS
72 auto f_prover = file_crs.get_crs(num_points);
73 auto m_prover = mem_crs.get_crs(num_points);
74 EXPECT_EQ(m_prover->get_monomial_size(), f_prover->get_monomial_size());
75 for (size_t i = 0; i < num_points; ++i) {
76 EXPECT_EQ(std::make_pair(i, m_prover->get_monomial_points()[i]),
77 std::make_pair(i, f_prover->get_monomial_points()[i]));
78 }
79}
80} // namespace
81
83{
84 check_bn254_consistency(bb::srs::bb_crs_path(), 1024, /*allow_download=*/false);
85 const std::filesystem::path& temp_crs_path = "barretenberg_srs_test_crs_bn254";
86 fs::remove_all(temp_crs_path);
87 fs::create_directories(temp_crs_path);
88 // Tiny download check to test the 'net CRS' path
89 ASSERT_ANY_THROW(check_bn254_consistency(temp_crs_path, 1, /*allow_download=*/false));
90 check_bn254_consistency(temp_crs_path, 1, /*allow_download=*/true);
91}
92
93TEST(CrsFactory, grumpkin)
94{
95 check_grumpkin_consistency(bb::srs::bb_crs_path(), 1024, /*allow_download=*/false);
96 const std::filesystem::path& temp_crs_path = "barretenberg_srs_test_crs_grumpkin";
97 fs::remove_all(temp_crs_path);
98 fs::create_directories(temp_crs_path);
99 // Tiny download check to test the 'net CRS' path
100 ASSERT_ANY_THROW(check_grumpkin_consistency(temp_crs_path, 1, /*allow_download=*/false));
101 check_grumpkin_consistency(temp_crs_path, 1, /*allow_download=*/true);
102}
typename Group::affine_element AffineElement
Definition grumpkin.hpp:56
const std::vector< FF > data
std::filesystem::path bb_crs_path()
Entry point for Barretenberg command-line interface.
TEST(MegaCircuitBuilder, CopyConstructor)
std::vector< uint8_t > read_file(const std::string &filename, size_t bytes=0)
Definition file_io.hpp:29
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13