Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
kzg10.hpp
Go to the documentation of this file.
1 
9 #ifndef __LIBSNARK_POLYNOMIAL_COMMITMENTS_KZG10_HPP__
10 #define __LIBSNARK_POLYNOMIAL_COMMITMENTS_KZG10_HPP__
11 
13 
14 #include <libff/algebra/curves/public_params.hpp>
15 #include <libff/algebra/fields/fp.hpp>
16 #include <vector>
17 
22 
23 namespace libsnark
24 {
25 
30 template<typename ppT> class kzg10
31 {
32 public:
33  using Field = libff::Fr<ppT>;
34 
37  class srs
38  {
39  public:
40  srs(std::vector<libff::G1<ppT>> &&alpha_powers_g1,
41  const libff::G2<ppT> &alpha_g2);
42 
45  std::vector<libff::G1<ppT>> alpha_powers_g1;
46 
48  libff::G2<ppT> alpha_g2;
49  };
50 
51  using commitment = libff::G1<ppT>;
52 
54  using evaluation_witness = libff::G1<ppT>;
55 
57  static srs setup_from_secret(size_t max_degree, const Field &alpha);
58 
63  static srs setup(size_t max_degree);
64 
67  static commitment commit(const srs &srs, const polynomial<Field> &phi);
68 
71  static bool verify_poly(
72  const srs &srs, commitment C, const polynomial<Field> &phi);
73 
74  static Field evaluate_polynomial(const polynomial<Field> &phi, Field i);
75 
79  const polynomial<Field> &phi,
80  const Field &i,
81  const Field &evaluation,
82  const srs &srs);
83 
88  static bool verify_evaluation(
89  const Field &i,
90  const Field &evaluation,
91  const srs &srs,
92  const evaluation_witness &witness,
93  const commitment &C);
94 };
95 
96 } // namespace libsnark
97 
99 
100 #endif // __LIBSNARK_POLYNOMIAL_COMMITMENTS_KZG10_HPP__
libsnark::kzg10::srs::alpha_powers_g1
std::vector< libff::G1< ppT > > alpha_powers_g1
Definition: kzg10.hpp:45
libsnark::kzg10::commit
static commitment commit(const srs &srs, const polynomial< Field > &phi)
polynomial.hpp
libsnark
Definition: accumulation_vector.hpp:18
libsnark::kzg10::evaluate_polynomial
static Field evaluate_polynomial(const polynomial< Field > &phi, Field i)
libsnark::polynomial
std::vector< FieldT > polynomial
Definition: polynomial.hpp:17
libsnark::kzg10::srs::srs
srs(std::vector< libff::G1< ppT >> &&alpha_powers_g1, const libff::G2< ppT > &alpha_g2)
kzg10.tcc
libsnark::kzg10::setup_from_secret
static srs setup_from_secret(size_t max_degree, const Field &alpha)
Intended only for testing.
libsnark::kzg10::verify_evaluation
static bool verify_evaluation(const Field &i, const Field &evaluation, const srs &srs, const evaluation_witness &witness, const commitment &C)
libsnark::kzg10::commitment
libff::G1< ppT > commitment
Definition: kzg10.hpp:51
libsnark::kzg10::Field
libff::Fr< ppT > Field
Definition: kzg10.hpp:33
libsnark::kzg10::setup
static srs setup(size_t max_degree)
libsnark::kzg10::verify_poly
static bool verify_poly(const srs &srs, commitment C, const polynomial< Field > &phi)
libsnark::kzg10::create_evaluation_witness
static evaluation_witness create_evaluation_witness(const polynomial< Field > &phi, const Field &i, const Field &evaluation, const srs &srs)
libsnark::kzg10
Definition: kzg10.hpp:30
libsnark::kzg10::srs::alpha_g2
libff::G2< ppT > alpha_g2
Secret \alpha encoded in G2: [\alpha]_2.
Definition: kzg10.hpp:48
libsnark::kzg10::srs
Definition: kzg10.hpp:37
libsnark::kzg10::evaluation_witness
libff::G1< ppT > evaluation_witness
A witness for the evaluation of a polynomial at some point.
Definition: kzg10.hpp:54