Skip to content
This repository was archived by the owner on Feb 17, 2025. It is now read-only.

Commit a6892c2

Browse files
committed
updated templates for functions #113
1 parent 78645c2 commit a6892c2

File tree

1 file changed

+55
-9
lines changed
  • include/nil/crypto3/zk/commitments/polynomial

1 file changed

+55
-9
lines changed

include/nil/crypto3/zk/commitments/polynomial/kzg.hpp

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,12 @@ namespace nil {
8383
} // namespace commitments
8484

8585
namespace algorithms {
86-
template<typename KZG>
86+
template<typename KZG,
87+
typename std::enable_if<
88+
std::is_base_of<
89+
commitments::kzg<typename KZG::curve_type>,
90+
KZG>::value,
91+
bool>::type = true>
8792
static typename KZG::params_type setup(std::size_t max_degree, typename KZG::scalar_value_type alpha) {
8893
typename KZG::scalar_value_type alpha_scaled = alpha;
8994
typename KZG::commitment_key_type commitment_key = {KZG::curve_type::template g1_type<>::value_type::one()};
@@ -98,15 +103,25 @@ namespace nil {
98103
return typename KZG::params_type(commitment_key, verification_key);
99104
}
100105

101-
template<typename KZG>
106+
template<typename KZG,
107+
typename std::enable_if<
108+
std::is_base_of<
109+
commitments::kzg<typename KZG::curve_type>,
110+
KZG>::value,
111+
bool>::type = true>
102112
static typename KZG::commitment_type commit(const typename KZG::params_type &params,
103113
const typename math::polynomial<typename KZG::scalar_value_type> &f) {
104114
BOOST_ASSERT(f.size() <= params.commitment_key.size());
105115
return algebra::multiexp<typename KZG::multiexp_method>(params.commitment_key.begin(),
106116
params.commitment_key.begin() + f.size(), f.begin(), f.end(), 1);
107117
}
108118

109-
template<typename KZG>
119+
template<typename KZG,
120+
typename std::enable_if<
121+
std::is_base_of<
122+
commitments::kzg<typename KZG::curve_type>,
123+
KZG>::value,
124+
bool>::type = true>
110125
static typename KZG::proof_type proof_eval(typename KZG::params_type params,
111126
const typename math::polynomial<typename KZG::scalar_value_type> &f,
112127
typename KZG::scalar_value_type i,
@@ -125,7 +140,12 @@ namespace nil {
125140
return commit<KZG>(params, q);
126141
}
127142

128-
template<typename KZG>
143+
template<typename KZG,
144+
typename std::enable_if<
145+
std::is_base_of<
146+
commitments::kzg<typename KZG::curve_type>,
147+
KZG>::value,
148+
bool>::type = true>
129149
static bool verify_eval(typename KZG::params_type params,
130150
typename KZG::proof_type p,
131151
typename KZG::commitment_type C_f,
@@ -165,6 +185,7 @@ namespace nil {
165185
struct batched_kzg : public kzg<CurveType> {
166186

167187
typedef CurveType curve_type;
188+
typedef KZGParams kzg_type;
168189
constexpr static const std::size_t batch_size = KZGParams::batch_size;
169190
typedef typename curve_type::gt_type::value_type gt_value_type;
170191

@@ -184,7 +205,12 @@ namespace nil {
184205

185206
namespace algorithms {
186207

187-
template<typename KZG>
208+
template<typename KZG,
209+
typename std::enable_if<
210+
std::is_base_of<
211+
commitments::batched_kzg<typename KZG::curve_type, typename KZG::kzg_type>,
212+
KZG>::value,
213+
bool>::type = true>
188214
static typename math::polynomial<typename KZG::scalar_value_type> accumulate(const std::vector<typename math::polynomial<typename KZG::scalar_value_type>> &polys,
189215
const typename KZG::scalar_value_type &factor) {
190216
std::size_t num = polys.size();
@@ -197,7 +223,12 @@ namespace nil {
197223
return result;
198224
}
199225

200-
template<typename KZG>
226+
template<typename KZG,
227+
typename std::enable_if<
228+
std::is_base_of<
229+
commitments::batched_kzg<typename KZG::curve_type, typename KZG::kzg_type>,
230+
KZG>::value,
231+
bool>::type = true>
201232
static typename KZG::evals_type evaluate_polynomials(const typename KZG::batch_of_batches_of_polynomials_type &polys,
202233
const std::vector<typename KZG::scalar_value_type> zs) {
203234

@@ -215,7 +246,12 @@ namespace nil {
215246
return evals;
216247
}
217248

218-
template<typename KZG>
249+
template<typename KZG,
250+
typename std::enable_if<
251+
std::is_base_of<
252+
commitments::batched_kzg<typename KZG::curve_type, typename KZG::kzg_type>,
253+
KZG>::value,
254+
bool>::type = true>
219255
static std::vector<typename KZG::commitment_type> commit(const typename KZG::params_type &params,
220256
const std::vector<typename math::polynomial<typename KZG::scalar_value_type>> &polys) {
221257
std::vector<typename KZG::commitment_type> commitments;
@@ -225,7 +261,12 @@ namespace nil {
225261
return commitments;
226262
}
227263

228-
template<typename KZG>
264+
template<typename KZG,
265+
typename std::enable_if<
266+
std::is_base_of<
267+
commitments::batched_kzg<typename KZG::curve_type, typename KZG::kzg_type>,
268+
KZG>::value,
269+
bool>::type = true>
229270
static typename KZG::batched_proof_type proof_eval(const typename KZG::params_type &params,
230271
const typename KZG::batch_of_batches_of_polynomials_type &polys,
231272
const typename KZG::evals_type &evals,
@@ -246,7 +287,12 @@ namespace nil {
246287
return proofs;
247288
}
248289

249-
template<typename KZG>
290+
template<typename KZG,
291+
typename std::enable_if<
292+
std::is_base_of<
293+
commitments::batched_kzg<typename KZG::curve_type, typename KZG::kzg_type>,
294+
KZG>::value,
295+
bool>::type = true>
250296
static bool verify_eval(typename KZG::params_type params,
251297
const typename KZG::batched_proof_type &proof,
252298
const typename KZG::evals_type &evals,

0 commit comments

Comments
 (0)