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

Commit 34a17b4

Browse files
committed
Updated bls for new interfraces.
1 parent 3097c92 commit 34a17b4

File tree

10 files changed

+311
-332
lines changed

10 files changed

+311
-332
lines changed

.github/workflows/run_tests.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ jobs:
7878
blueprint_verifiers_placeholder_f1_loop_test,
7979
blueprint_verifiers_placeholder_f3_loop_test,
8080
blueprint_verifiers_placeholder_gate_component_test,
81+
blueprint_algebra_curves_plonk_bls12_g2_test,
82+
blueprint_algebra_fields_plonk_non_native_fp12_arithmetic_test,
8183
blueprint_proxy_test
8284
] # Tests to execute
8385
include: # Abused to enable proof generation for some tests; add more as needed

include/nil/blueprint/components/algebra/curves/detail/plonk/bls12_g2_point_addition.hpp

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_BLS12_G2_POINT_ADDITION_HPP
3030
#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_BLS12_G2_POINT_ADDITION_HPP
3131

32+
#include <functional>
33+
3234
#include <nil/crypto3/zk/snark/arithmetization/plonk/constraint_system.hpp>
3335

3436
#include <nil/blueprint/blueprint/plonk/assignment.hpp>
@@ -58,16 +60,15 @@ namespace nil {
5860
// +--+--+--+--+--+--+---+---+--+--+--+--+
5961
//
6062

61-
template<typename ArithmetizationType, typename BlueprintFieldType>
63+
template<typename ArithmetizationType>
6264
class bls12_g2_point_addition;
6365

64-
template<typename BlueprintFieldType, typename ArithmetizationParams>
65-
class bls12_g2_point_addition<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>,
66-
BlueprintFieldType>
67-
: public plonk_component<BlueprintFieldType, ArithmetizationParams, 0, 0> {
66+
template<typename BlueprintFieldType>
67+
class bls12_g2_point_addition<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
68+
: public plonk_component<BlueprintFieldType> {
6869

6970
public:
70-
using component_type = plonk_component<BlueprintFieldType, ArithmetizationParams, 0, 0>;
71+
using component_type = plonk_component<BlueprintFieldType>;
7172

7273
using var = typename component_type::var;
7374
using manifest_type = plonk_component_manifest;
@@ -104,8 +105,8 @@ namespace nil {
104105
struct input_type {
105106
std::array<var,4> P, Q;
106107

107-
std::vector<var> all_vars() const {
108-
std::vector<var> res = {};
108+
std::vector<std::reference_wrapper<var>> all_vars() {
109+
std::vector<std::reference_wrapper<var>> res = {};
109110
for(auto & e : P) { res.push_back(e); }
110111
for(auto & e : Q) { res.push_back(e); }
111112
return res;
@@ -150,23 +151,20 @@ namespace nil {
150151
component_type(witnesses, constants, public_inputs, get_manifest()) {};
151152
};
152153

153-
template<typename BlueprintFieldType, typename ArithmetizationParams>
154+
template<typename BlueprintFieldType>
154155
using plonk_bls12_g2_point_addition =
155156
bls12_g2_point_addition<
156-
crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>,
157-
BlueprintFieldType>;
157+
crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>;
158158

159-
template<typename BlueprintFieldType, typename ArithmetizationParams>
160-
typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::result_type generate_assignments(
161-
const plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams> &component,
162-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>
159+
template<typename BlueprintFieldType>
160+
typename plonk_bls12_g2_point_addition<BlueprintFieldType>::result_type generate_assignments(
161+
const plonk_bls12_g2_point_addition<BlueprintFieldType> &component,
162+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
163163
&assignment,
164-
const typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::input_type
164+
const typename plonk_bls12_g2_point_addition<BlueprintFieldType>::input_type
165165
&instance_input,
166166
const std::uint32_t start_row_index) {
167167

168-
using value_type = typename BlueprintFieldType::value_type;
169-
170168
const std::size_t WA = component.witness_amount();
171169

172170
using policy_type_fp2 = crypto3::algebra::fields::fp2<BlueprintFieldType>;
@@ -222,22 +220,22 @@ namespace nil {
222220
assignment.witness(component.W((22 + i) % WA),start_row_index + (WA < 24)) = yR.data[i];
223221
}
224222

225-
return typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::result_type(
223+
return typename plonk_bls12_g2_point_addition<BlueprintFieldType>::result_type(
226224
component, start_row_index);
227225
}
228226

229-
template<typename BlueprintFieldType, typename ArithmetizationParams>
227+
template<typename BlueprintFieldType>
230228
std::size_t generate_gates(
231-
const plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams> &component,
232-
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>> &bp,
233-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>
229+
const plonk_bls12_g2_point_addition<BlueprintFieldType> &component,
230+
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &bp,
231+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
234232
&assignment,
235-
const typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::input_type
233+
const typename plonk_bls12_g2_point_addition<BlueprintFieldType>::input_type
236234
&instance_input) {
237235

238236
const std::size_t WA = component.witness_amount();
239237

240-
using var = typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::var;
238+
using var = typename plonk_bls12_g2_point_addition<BlueprintFieldType>::var;
241239
using constraint_type = crypto3::zk::snark::plonk_constraint<BlueprintFieldType>;
242240

243241
// Fp2 field over constraints:
@@ -325,31 +323,29 @@ namespace nil {
325323
return bp.add_gate(Cs);
326324
}
327325

328-
template<typename BlueprintFieldType, typename ArithmetizationParams>
326+
template<typename BlueprintFieldType>
329327
void generate_copy_constraints(
330-
const plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams> &component,
331-
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>> &bp,
332-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>
328+
const plonk_bls12_g2_point_addition<BlueprintFieldType> &component,
329+
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &bp,
330+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
333331
&assignment,
334-
const typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::input_type &instance_input,
332+
const typename plonk_bls12_g2_point_addition<BlueprintFieldType>::input_type &instance_input,
335333
const std::size_t start_row_index) {
336334

337-
using var = typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::var;
338-
339-
const std::size_t WA = component.witness_amount();
335+
using var = typename plonk_bls12_g2_point_addition<BlueprintFieldType>::var;
340336

341337
for(std::size_t i = 0; i < 4; i++) {
342338
bp.add_copy_constraint({var(component.W(i), start_row_index, false), instance_input.P[i]});
343339
}
344340
}
345341

346-
template<typename BlueprintFieldType, typename ArithmetizationParams>
347-
typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::result_type generate_circuit(
348-
const plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams> &component,
349-
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>> &bp,
350-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>
342+
template<typename BlueprintFieldType>
343+
typename plonk_bls12_g2_point_addition<BlueprintFieldType>::result_type generate_circuit(
344+
const plonk_bls12_g2_point_addition<BlueprintFieldType> &component,
345+
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &bp,
346+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
351347
&assignment,
352-
const typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::input_type &instance_input,
348+
const typename plonk_bls12_g2_point_addition<BlueprintFieldType>::input_type &instance_input,
353349
const std::size_t start_row_index) {
354350

355351
std::size_t selector_index = generate_gates(component, bp, assignment, instance_input);
@@ -358,7 +354,7 @@ namespace nil {
358354

359355
generate_copy_constraints(component, bp, assignment, instance_input, start_row_index);
360356

361-
return typename plonk_bls12_g2_point_addition<BlueprintFieldType, ArithmetizationParams>::result_type(
357+
return typename plonk_bls12_g2_point_addition<BlueprintFieldType>::result_type(
362358
component, start_row_index);
363359
}
364360

include/nil/blueprint/components/algebra/curves/detail/plonk/bls12_g2_point_double.hpp

Lines changed: 35 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,15 @@ namespace nil {
4949
// Input: (xP, yP) = P[4]
5050
// Output: (xR, yR) = R[4], R = [2]P as element of E'(F_p^2)
5151

52-
template<typename ArithmetizationType, typename BlueprintFieldType>
52+
template<typename ArithmetizationType>
5353
class bls12_g2_point_double;
5454

55-
template<typename BlueprintFieldType, typename ArithmetizationParams>
56-
class bls12_g2_point_double<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>,
57-
BlueprintFieldType>
58-
: public plonk_component<BlueprintFieldType, ArithmetizationParams, 0, 0> {
55+
template<typename BlueprintFieldType>
56+
class bls12_g2_point_double<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
57+
: public plonk_component<BlueprintFieldType> {
5958

6059
public:
61-
using component_type = plonk_component<BlueprintFieldType, ArithmetizationParams, 0, 0>;
60+
using component_type = plonk_component<BlueprintFieldType>;
6261

6362
using var = typename component_type::var;
6463
using manifest_type = plonk_component_manifest;
@@ -95,8 +94,8 @@ namespace nil {
9594
struct input_type {
9695
std::array<var,4> P;
9796

98-
std::vector<var> all_vars() const {
99-
std::vector<var> res = {};
97+
std::vector<std::reference_wrapper<var>> all_vars() {
98+
std::vector<std::reference_wrapper<var>> res = {};
10099
for(auto & e : P) { res.push_back(e); }
101100
return res;
102101
}
@@ -138,23 +137,19 @@ namespace nil {
138137
component_type(witnesses, constants, public_inputs, get_manifest()) {};
139138
};
140139

141-
template<typename BlueprintFieldType, typename ArithmetizationParams>
140+
template<typename BlueprintFieldType>
142141
using plonk_bls12_g2_point_double =
143-
bls12_g2_point_double<
144-
crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>,
145-
BlueprintFieldType>;
146-
147-
template<typename BlueprintFieldType, typename ArithmetizationParams>
148-
typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::result_type generate_assignments(
149-
const plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams> &component,
150-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>
142+
bls12_g2_point_double<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>;
143+
144+
template<typename BlueprintFieldType>
145+
typename plonk_bls12_g2_point_double<BlueprintFieldType>::result_type generate_assignments(
146+
const plonk_bls12_g2_point_double<BlueprintFieldType> &component,
147+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
151148
&assignment,
152-
const typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::input_type
149+
const typename plonk_bls12_g2_point_double<BlueprintFieldType>::input_type
153150
&instance_input,
154151
const std::uint32_t start_row_index) {
155152

156-
using value_type = typename BlueprintFieldType::value_type;
157-
158153
using policy_type_fp2 = crypto3::algebra::fields::fp2<BlueprintFieldType>;
159154
using fp2_element = typename policy_type_fp2::value_type;
160155

@@ -176,20 +171,20 @@ namespace nil {
176171
assignment.witness(component.W(8 + i),start_row_index) = yR.data[i];
177172
}
178173

179-
return typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::result_type(
174+
return typename plonk_bls12_g2_point_double<BlueprintFieldType>::result_type(
180175
component, start_row_index);
181176
}
182177

183-
template<typename BlueprintFieldType, typename ArithmetizationParams>
178+
template<typename BlueprintFieldType>
184179
std::size_t generate_gates(
185-
const plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams> &component,
186-
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>> &bp,
187-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>
180+
const plonk_bls12_g2_point_double<BlueprintFieldType> &component,
181+
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &bp,
182+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
188183
&assignment,
189-
const typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::input_type
184+
const typename plonk_bls12_g2_point_double<BlueprintFieldType>::input_type
190185
&instance_input) {
191186

192-
using var = typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::var;
187+
using var = typename plonk_bls12_g2_point_double<BlueprintFieldType>::var;
193188
using constraint_type = crypto3::zk::snark::plonk_constraint<BlueprintFieldType>;
194189

195190
using fp2_constraint = detail::abstract_fp2_element<constraint_type>;
@@ -233,31 +228,29 @@ namespace nil {
233228
return bp.add_gate(Cs);
234229
}
235230

236-
template<typename BlueprintFieldType, typename ArithmetizationParams>
231+
template<typename BlueprintFieldType>
237232
void generate_copy_constraints(
238-
const plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams> &component,
239-
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>> &bp,
240-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>
233+
const plonk_bls12_g2_point_double<BlueprintFieldType> &component,
234+
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &bp,
235+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
241236
&assignment,
242-
const typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::input_type &instance_input,
237+
const typename plonk_bls12_g2_point_double<BlueprintFieldType>::input_type &instance_input,
243238
const std::size_t start_row_index) {
244239

245-
using var = typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::var;
246-
247-
const std::size_t WA = component.witness_amount();
240+
using var = typename plonk_bls12_g2_point_double<BlueprintFieldType>::var;
248241

249242
for(std::size_t i = 0; i < 4; i++) {
250243
bp.add_copy_constraint({var(component.W(i), start_row_index, false), instance_input.P[i]});
251244
}
252245
}
253246

254-
template<typename BlueprintFieldType, typename ArithmetizationParams>
255-
typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::result_type generate_circuit(
256-
const plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams> &component,
257-
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>> &bp,
258-
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType, ArithmetizationParams>>
247+
template<typename BlueprintFieldType>
248+
typename plonk_bls12_g2_point_double<BlueprintFieldType>::result_type generate_circuit(
249+
const plonk_bls12_g2_point_double<BlueprintFieldType> &component,
250+
circuit<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>> &bp,
251+
assignment<crypto3::zk::snark::plonk_constraint_system<BlueprintFieldType>>
259252
&assignment,
260-
const typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::input_type &instance_input,
253+
const typename plonk_bls12_g2_point_double<BlueprintFieldType>::input_type &instance_input,
261254
const std::size_t start_row_index) {
262255

263256
std::size_t selector_index = generate_gates(component, bp, assignment, instance_input);
@@ -266,7 +259,7 @@ namespace nil {
266259

267260
generate_copy_constraints(component, bp, assignment, instance_input, start_row_index);
268261

269-
return typename plonk_bls12_g2_point_double<BlueprintFieldType, ArithmetizationParams>::result_type(
262+
return typename plonk_bls12_g2_point_double<BlueprintFieldType>::result_type(
270263
component, start_row_index);
271264
}
272265

0 commit comments

Comments
 (0)