barretenberg
Loading...
Searching...
No Matches
file_crs_factory.hpp
1#pragma once
2#include "../io.hpp"
3#include "barretenberg/ecc/curves/bn254/bn254.hpp"
4#include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp"
5#include "barretenberg/ecc/scalar_multiplication/point_table.hpp"
6#include "barretenberg/ecc/scalar_multiplication/scalar_multiplication.hpp"
7#include "crs_factory.hpp"
8#include <cstddef>
9#include <utility>
10
11namespace barretenberg::srs::factories {
12
16template <typename Curve> class FileCrsFactory : public CrsFactory<Curve> {
17 public:
18 FileCrsFactory(std::string path, size_t initial_degree = 0);
19 FileCrsFactory(FileCrsFactory&& other) = default;
20
21 std::shared_ptr<barretenberg::srs::factories::ProverCrs<Curve>> get_prover_crs(size_t degree) override;
22
23 std::shared_ptr<barretenberg::srs::factories::VerifierCrs<Curve>> get_verifier_crs(size_t degree = 0) override;
24
25 private:
26 std::string path_;
27 size_t degree_;
28 std::shared_ptr<barretenberg::srs::factories::ProverCrs<Curve>> prover_crs_;
29 std::shared_ptr<barretenberg::srs::factories::VerifierCrs<Curve>> verifier_crs_;
30};
31
32template <typename Curve> class FileProverCrs : public ProverCrs<Curve> {
33 public:
34 FileProverCrs(const size_t num_points, std::string const& path)
35 : num_points(num_points)
36 {
37 monomials_ = scalar_multiplication::point_table_alloc<typename Curve::AffineElement>(num_points);
38
39 srs::IO<Curve>::read_transcript_g1(monomials_.get(), num_points, path);
40 scalar_multiplication::generate_pippenger_point_table<Curve>(monomials_.get(), monomials_.get(), num_points);
41 };
42
43 typename Curve::AffineElement* get_monomial_points() { return monomials_.get(); }
44
45 [[nodiscard]] size_t get_monomial_size() const { return num_points; }
46
47 private:
48 size_t num_points;
49 std::shared_ptr<typename Curve::AffineElement[]> monomials_;
50};
51
52template <typename Curve> class FileVerifierCrs : public VerifierCrs<Curve> {
53 public:
54 FileVerifierCrs(std::string const& path, const size_t num_points);
55};
56
57template <> class FileVerifierCrs<curve::BN254> : public VerifierCrs<curve::BN254> {
58 using Curve = curve::BN254;
59
60 public:
61 FileVerifierCrs(std::string const& path, const size_t num_points = 0);
62 virtual ~FileVerifierCrs();
63 Curve::G2AffineElement get_g2x() const override { return g2_x; };
64 pairing::miller_lines const* get_precomputed_g2_lines() const override { return precomputed_g2_lines; };
65 Curve::AffineElement get_first_g1() const override { return first_g1; };
66
67 private:
68 Curve::AffineElement first_g1;
69 Curve::G2AffineElement g2_x;
70 pairing::miller_lines* precomputed_g2_lines;
71};
72
73template <> class FileVerifierCrs<curve::Grumpkin> : public VerifierCrs<curve::Grumpkin> {
74 using Curve = curve::Grumpkin;
75
76 public:
77 FileVerifierCrs(std::string const& path, const size_t num_points);
78 virtual ~FileVerifierCrs() = default;
79 Curve::AffineElement* get_monomial_points() const override;
80 size_t get_monomial_size() const override;
81 Curve::AffineElement get_first_g1() const override { return first_g1; };
82
83 private:
84 Curve::AffineElement first_g1;
85 size_t num_points;
86 std::shared_ptr<Curve::AffineElement[]> monomials_;
87};
88
89extern template class FileProverCrs<curve::BN254>;
90extern template class FileProverCrs<curve::Grumpkin>;
91
92} // namespace barretenberg::srs::factories
Definition: io.hpp:60
Definition: crs_factory.hpp:72
Definition: file_crs_factory.hpp:16
Definition: file_crs_factory.hpp:32
Curve::AffineElement * get_monomial_points()
Returns the monomial points in a form to be consumed by scalar_multiplication pippenger algorithm.
Definition: file_crs_factory.hpp:43
pairing::miller_lines const * get_precomputed_g2_lines() const override
As the G_2 element of the CRS is fixed, we can precompute the operations performed on it during the p...
Definition: file_crs_factory.hpp:64
Curve::AffineElement get_first_g1() const override
Returns the first G_1 element from the CRS, used by the Shplonk verifier to compute the final commtim...
Definition: file_crs_factory.hpp:65
Curve::AffineElement get_first_g1() const override
Returns the first G_1 element from the CRS, used by the Shplonk verifier to compute the final commtim...
Definition: file_crs_factory.hpp:81
Definition: file_crs_factory.hpp:52
Definition: crs_factory.hpp:18
Definition: crs_factory.hpp:30
Definition: bn254.hpp:10
Definition: grumpkin.hpp:36
Definition: pairing.hpp:27