barretenberg
Loading...
Searching...
No Matches
commitment_key.hpp
1#pragma once
2
10#include "barretenberg/ecc/curves/bn254/bn254.hpp"
11#include "barretenberg/ecc/curves/bn254/pairing.hpp"
12#include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp"
13#include "barretenberg/ecc/scalar_multiplication/scalar_multiplication.hpp"
14#include "barretenberg/numeric/bitop/pow.hpp"
15#include "barretenberg/polynomials/polynomial.hpp"
16#include "barretenberg/polynomials/polynomial_arithmetic.hpp"
17#include "barretenberg/srs/factories/crs_factory.hpp"
18#include "barretenberg/srs/factories/file_crs_factory.hpp"
19#include "barretenberg/srs/global_crs.hpp"
20
21#include <cstddef>
22#include <memory>
23#include <string_view>
24
26
35template <class Curve> class CommitmentKey {
36
37 using Fr = typename Curve::ScalarField;
38 using Commitment = typename Curve::AffineElement;
39
40 public:
41 CommitmentKey() = delete;
42
50 CommitmentKey(const size_t num_points,
51 std::shared_ptr<barretenberg::srs::factories::CrsFactory<Curve>> crs_factory =
52 barretenberg::srs::get_crs_factory())
53 : pippenger_runtime_state(num_points)
54 , srs(crs_factory->get_prover_crs(num_points))
55 {}
56
57 // Note: This constructor is used only by Plonk; For Honk the srs is extracted by the CommitmentKey
58 CommitmentKey(const size_t num_points, std::shared_ptr<barretenberg::srs::factories::ProverCrs<Curve>> prover_crs)
59 : pippenger_runtime_state(num_points)
60 , srs(prover_crs)
61 {}
62
69 Commitment commit(std::span<const Fr> polynomial)
70 {
71 const size_t degree = polynomial.size();
72 ASSERT(degree <= srs->get_monomial_size());
73 return barretenberg::scalar_multiplication::pippenger_unsafe<Curve>(
74 const_cast<Fr*>(polynomial.data()), srs->get_monomial_points(), degree, pippenger_runtime_state);
75 };
76
78 std::shared_ptr<barretenberg::srs::factories::ProverCrs<Curve>> srs;
79};
80
81} // namespace proof_system::honk::pcs
Definition: crs_factory.hpp:72
Definition: crs_factory.hpp:18
CommitmentKey object over a pairing group 𝔾₁.
Definition: commitment_key.hpp:35
CommitmentKey(const size_t num_points, std::shared_ptr< barretenberg::srs::factories::CrsFactory< Curve > > crs_factory=barretenberg::srs::get_crs_factory())
Construct a new Kate Commitment Key object from existing SRS.
Definition: commitment_key.hpp:50
Commitment commit(std::span< const Fr > polynomial)
Uses the ProverSRS to create a commitment to p(X)
Definition: commitment_key.hpp:69
Provides interfaces for different 'CommitmentKey' classes.
Definition: claim.hpp:6