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> 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_(std::move(points))
27 {
28 if (monomials_.empty() || !monomials_[0].on_curve()) {
29 throw_or_abort("invalid g1_identity passed to MemBn254CrsFactory");
30 }
31 bb::pairing::precompute_miller_lines(bb::g2::one, precomputed_g2_lines[0]);
32 bb::pairing::precompute_miller_lines(g2_x, precomputed_g2_lines[1]);
33 }
34
35 ~MemBn254Crs() override { aligned_free(precomputed_g2_lines); }
36
37 std::span<Curve::AffineElement> get_monomial_points() override { return monomials_; }
38
39 size_t get_monomial_size() const override { return monomials_.size(); }
40
41 g2::affine_element get_g2x() const override { return g2_x; }
42
43 pairing::miller_lines const* get_precomputed_g2_lines() const override { return precomputed_g2_lines; }
44 g1::affine_element get_g1_identity() const override { return monomials_[0]; };
45
46 private:
48 pairing::miller_lines* precomputed_g2_lines;
50};
51
52} // namespace
53
54namespace bb::srs::factories {
55
57 : crs_(std::make_shared<MemBn254Crs>(std::move(points), g2_point))
58{
59 vinfo("Initialized ", curve::BN254::name, " CRS from memory with num points = ", crs_->get_monomial_size());
60}
61
63{
64 if (crs_->get_monomial_size() < degree) {
66 "prover trying to get too many points in MemBn254CrsFactory! ", crs_->get_monomial_size(), " vs ", degree));
67 }
68 return crs_;
69}
70
71} // 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_
MemBn254CrsFactory(std::vector< g1::affine_element > points, g2::affine_element const &g2_point)
std::shared_ptr< Crs< curve::BN254 > > get_crs(size_t degree) override
std::string format(Args... args)
Definition log.hpp:23
#define vinfo(...)
Definition log.hpp:94
constexpr void precompute_miller_lines(const g2Projective &Q, miller_lines &lines)
Precomputation of Miller lines for a point Q in G2.
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
STL namespace.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
void throw_or_abort(std::string const &err)