Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
mem_bn254_crs_factory.cpp
Go to the documentation of this file.
7
8namespace {
9
10using namespace bb;
11using namespace bb::srs::factories;
12
13class MemBn254Crs : public Crs<curve::BN254> {
14 using Curve = curve::BN254;
15
16 public:
17 MemBn254Crs(const MemBn254Crs&) = delete;
18 MemBn254Crs(MemBn254Crs&&) noexcept = default;
19 MemBn254Crs& operator=(const MemBn254Crs&) = delete;
20 MemBn254Crs& operator=(MemBn254Crs&&) = delete;
21
22 MemBn254Crs(std::vector<Curve::AffineElement> const& points, g2::affine_element const& g2_point)
23 : g2_x(g2_point)
24 , precomputed_g2_lines(
25 static_cast<pairing::miller_lines*>(aligned_alloc(64, sizeof(bb::pairing::miller_lines) * 2)))
26 , monomials_(points.size())
27 {
28 if (points.empty() || !points[0].on_curve()) {
29 throw_or_abort("invalid g1_identity passed to MemBn254CrsFactory");
30 }
31 std::copy(points.begin(), points.end(), monomials_.begin());
32 bb::pairing::precompute_miller_lines(bb::g2::one, precomputed_g2_lines[0]);
33 bb::pairing::precompute_miller_lines(g2_x, precomputed_g2_lines[1]);
34 }
35
36 ~MemBn254Crs() override { aligned_free(precomputed_g2_lines); }
37
38 std::span<Curve::AffineElement> get_monomial_points() override { return monomials_; }
39
40 size_t get_monomial_size() const override { return monomials_.size(); }
41
42 g2::affine_element get_g2x() const override { return g2_x; }
43
44 pairing::miller_lines const* get_precomputed_g2_lines() const override { return precomputed_g2_lines; }
45 g1::affine_element get_g1_identity() const override { return monomials_[0]; };
46
47 private:
49 pairing::miller_lines* precomputed_g2_lines;
51};
52
53} // namespace
54
55namespace bb::srs::factories {
56
58 g2::affine_element const& g2_point)
59 : crs_(std::make_shared<MemBn254Crs>(points, g2_point))
60{
61 vinfo("Initialized ", curve::BN254::name, " CRS from memory with num points = ", crs_->get_monomial_size());
62}
63
65{
66 if (crs_->get_monomial_size() < degree) {
68 "prover trying to get too many points in MemBn254CrsFactory! ", crs_->get_monomial_size(), " vs ", degree));
69 }
70 return crs_;
71}
72
73} // namespace bb::srs::factories
static constexpr const char * name
Definition bn254.hpp:27
group class. Represents an elliptic curve group element. Group is parametrised by Fq and Fr
Definition group.hpp:36
static constexpr element one
Definition group.hpp:46
std::shared_ptr< Crs< curve::BN254 > > crs_
std::shared_ptr< Crs< curve::BN254 > > get_crs(size_t degree) override
MemBn254CrsFactory(std::vector< g1::affine_element > const &points, g2::affine_element const &g2_point)
std::string format(Args... args)
Definition log.hpp:20
void vinfo(Args... args)
Definition log.hpp:76
constexpr void precompute_miller_lines(const g2::element &Q, miller_lines &lines)
Entry point for Barretenberg command-line interface.
STL namespace.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
void throw_or_abort(std::string const &err)