@@ -83,7 +83,12 @@ namespace nil {
83
83
} // namespace commitments
84
84
85
85
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 >
87
92
static typename KZG::params_type setup (std::size_t max_degree, typename KZG::scalar_value_type alpha) {
88
93
typename KZG::scalar_value_type alpha_scaled = alpha;
89
94
typename KZG::commitment_key_type commitment_key = {KZG::curve_type::template g1_type<>::value_type::one ()};
@@ -98,15 +103,25 @@ namespace nil {
98
103
return typename KZG::params_type (commitment_key, verification_key);
99
104
}
100
105
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 >
102
112
static typename KZG::commitment_type commit (const typename KZG::params_type ¶ms,
103
113
const typename math::polynomial<typename KZG::scalar_value_type> &f) {
104
114
BOOST_ASSERT (f.size () <= params.commitment_key .size ());
105
115
return algebra::multiexp<typename KZG::multiexp_method>(params.commitment_key .begin (),
106
116
params.commitment_key .begin () + f.size (), f.begin (), f.end (), 1 );
107
117
}
108
118
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 >
110
125
static typename KZG::proof_type proof_eval (typename KZG::params_type params,
111
126
const typename math::polynomial<typename KZG::scalar_value_type> &f,
112
127
typename KZG::scalar_value_type i,
@@ -125,7 +140,12 @@ namespace nil {
125
140
return commit<KZG>(params, q);
126
141
}
127
142
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 >
129
149
static bool verify_eval (typename KZG::params_type params,
130
150
typename KZG::proof_type p,
131
151
typename KZG::commitment_type C_f,
@@ -165,6 +185,7 @@ namespace nil {
165
185
struct batched_kzg : public kzg <CurveType> {
166
186
167
187
typedef CurveType curve_type;
188
+ typedef KZGParams kzg_type;
168
189
constexpr static const std::size_t batch_size = KZGParams::batch_size;
169
190
typedef typename curve_type::gt_type::value_type gt_value_type;
170
191
@@ -184,7 +205,12 @@ namespace nil {
184
205
185
206
namespace algorithms {
186
207
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 >
188
214
static typename math::polynomial<typename KZG::scalar_value_type> accumulate (const std::vector<typename math::polynomial<typename KZG::scalar_value_type>> &polys,
189
215
const typename KZG::scalar_value_type &factor) {
190
216
std::size_t num = polys.size ();
@@ -197,7 +223,12 @@ namespace nil {
197
223
return result;
198
224
}
199
225
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 >
201
232
static typename KZG::evals_type evaluate_polynomials (const typename KZG::batch_of_batches_of_polynomials_type &polys,
202
233
const std::vector<typename KZG::scalar_value_type> zs) {
203
234
@@ -215,7 +246,12 @@ namespace nil {
215
246
return evals;
216
247
}
217
248
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 >
219
255
static std::vector<typename KZG::commitment_type> commit (const typename KZG::params_type ¶ms,
220
256
const std::vector<typename math::polynomial<typename KZG::scalar_value_type>> &polys) {
221
257
std::vector<typename KZG::commitment_type> commitments;
@@ -225,7 +261,12 @@ namespace nil {
225
261
return commitments;
226
262
}
227
263
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 >
229
270
static typename KZG::batched_proof_type proof_eval (const typename KZG::params_type ¶ms,
230
271
const typename KZG::batch_of_batches_of_polynomials_type &polys,
231
272
const typename KZG::evals_type &evals,
@@ -246,7 +287,12 @@ namespace nil {
246
287
return proofs;
247
288
}
248
289
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 >
250
296
static bool verify_eval (typename KZG::params_type params,
251
297
const typename KZG::batched_proof_type &proof,
252
298
const typename KZG::evals_type &evals,
0 commit comments