65 auto points = create_add_points(1, 2,
true);
67 auto [x1, y1, x2, y2, x3, y3] = add_add_gate_variables(
builder, points);
68 builder.create_ecc_add_gate({ x1, y1, x2, y2, x3, y3, 1 });
76 auto test_invalid_coordinate = [](
auto modify_points) {
78 auto points = create_add_points(1, 2,
true);
79 modify_points(points);
80 auto [x1, y1, x2, y2, x3, y3] = add_add_gate_variables(
builder, points);
81 builder.create_ecc_add_gate({ x1, y1, x2, y2, x3, y3, 1 });
85 test_invalid_coordinate([](AdditionPoints& p) { p.p1.x +=
bb::fr(1); });
86 test_invalid_coordinate([](AdditionPoints& p) { p.p1.y +=
bb::fr(1); });
87 test_invalid_coordinate([](AdditionPoints& p) { p.p2.x +=
bb::fr(1); });
88 test_invalid_coordinate([](AdditionPoints& p) { p.p2.y +=
bb::fr(1); });
89 test_invalid_coordinate([](AdditionPoints& p) { p.result.x +=
bb::fr(1); });
90 test_invalid_coordinate([](AdditionPoints& p) { p.result.y +=
bb::fr(1); });
97 auto points = create_add_points(1, 2,
false);
98 auto [x1, y1, x2, y2, x3, y3] = add_add_gate_variables(
builder, points);
99 builder.create_ecc_add_gate({ x1, y1, x2, y2, x3, y3, -1 });
106 auto test_invalid_coordinate = [](
auto modify_points) {
108 auto points = create_add_points(1, 2,
false);
109 modify_points(points);
110 auto [x1, y1, x2, y2, x3, y3] = add_add_gate_variables(
builder, points);
111 builder.create_ecc_add_gate({ x1, y1, x2, y2, x3, y3, -1 });
115 test_invalid_coordinate([](AdditionPoints& p) { p.p1.x +=
bb::fr(1); });
116 test_invalid_coordinate([](AdditionPoints& p) { p.p1.y +=
bb::fr(1); });
117 test_invalid_coordinate([](AdditionPoints& p) { p.p2.x +=
bb::fr(1); });
118 test_invalid_coordinate([](AdditionPoints& p) { p.p2.y +=
bb::fr(1); });
119 test_invalid_coordinate([](AdditionPoints& p) { p.result.x +=
bb::fr(1); });
120 test_invalid_coordinate([](AdditionPoints& p) { p.result.y +=
bb::fr(1); });
138 auto test_invalid_coordinate = [](
auto modify_points) {
140 auto points = create_dbl_points(1);
141 modify_points(points);
142 auto [x1, y1, x3, y3] = add_dbl_gate_variables(
builder, points);
143 builder.create_ecc_dbl_gate({ x1, y1, x3, y3 });
147 test_invalid_coordinate([](DoublingPoints& p) { p.p1.x +=
bb::fr(1); });
148 test_invalid_coordinate([](DoublingPoints& p) { p.p1.y +=
bb::fr(1); });
149 test_invalid_coordinate([](DoublingPoints& p) { p.result.x +=
bb::fr(1); });
150 test_invalid_coordinate([](DoublingPoints& p) { p.result.y +=
bb::fr(1); });
159 auto add_points = create_add_points(1, 2,
true);
160 auto sub_points = create_add_points(1, 3,
false);
161 auto dbl_points = create_dbl_points(2);
164 auto [add_x1, add_y1, add_x2, add_y2, add_x3, add_y3] = add_add_gate_variables(
builder, add_points);
165 auto [sub_x1, sub_y1, sub_x2, sub_y2, sub_x3, sub_y3] = add_add_gate_variables(
builder, sub_points);
166 auto [dbl_x1, dbl_y1, dbl_x3, dbl_y3] = add_dbl_gate_variables(
builder, dbl_points);
168 builder.create_ecc_add_gate({ add_x1, add_y1, add_x2, add_y2, add_x3, add_y3, 1 });
169 builder.create_ecc_add_gate({ sub_x1, sub_y1, sub_x2, sub_y2, sub_x3, sub_y3, -1 });
170 builder.create_ecc_dbl_gate({ dbl_x1, dbl_y1, dbl_x3, dbl_y3 });
172 EXPECT_EQ(
builder.blocks.elliptic.size(), 6UL);
182 auto first_add = create_add_points(1, 2,
true);
189 auto [x1, y1, x2, y2, x_temp, y_temp] = add_add_gate_variables(
builder, first_add);
192 uint32_t x3 =
builder.add_variable(p3.
x);
193 uint32_t y3 =
builder.add_variable(p3.
y);
194 uint32_t x_result =
builder.add_variable(result.x);
195 uint32_t y_result =
builder.add_variable(result.y);
197 builder.create_ecc_add_gate({ x1, y1, x2, y2, x_temp, y_temp, 1 });
198 builder.create_ecc_add_gate({ x_temp, y_temp, x3, y3, x_result, y_result, 1 });
200 EXPECT_EQ(
builder.blocks.elliptic.size(), 3UL);
210 auto first_add = create_add_points(1, 2,
true);
221 auto [x1, y1, x2, y2, x_temp1, y_temp1] = add_add_gate_variables(
builder, first_add);
224 uint32_t x_temp2 =
builder.add_variable(temp2.
x);
225 uint32_t y_temp2 =
builder.add_variable(temp2.
y);
228 uint32_t x3 =
builder.add_variable(p3.
x);
229 uint32_t y3 =
builder.add_variable(p3.
y);
230 uint32_t x_result =
builder.add_variable(result.x);
231 uint32_t y_result =
builder.add_variable(result.y);
233 builder.create_ecc_add_gate({ x1, y1, x2, y2, x_temp1, y_temp1, 1 });
234 builder.create_ecc_dbl_gate({ x_temp1, y_temp1, x_temp2, y_temp2 });
235 builder.create_ecc_add_gate({ x_temp2, y_temp2, x3, y3, x_result, y_result, 1 });
237 EXPECT_EQ(
builder.blocks.elliptic.size(), 4UL);
247 auto first_add = create_add_points(1, 2,
true);
259 auto [x1, y1, x2, y2, x_temp1, y_temp1] = add_add_gate_variables(
builder, first_add);
262 uint32_t x_temp2 =
builder.add_variable(temp2.
x);
263 uint32_t y_temp2 =
builder.add_variable(temp2.
y);
266 uint32_t x3 =
builder.add_variable(p3.
x);
267 uint32_t y3 =
builder.add_variable(p3.
y);
268 uint32_t x_result =
builder.add_variable(result.x);
269 uint32_t y_result =
builder.add_variable(result.y);
271 builder.create_ecc_add_gate({ x1, y1, x2, y2, x_temp1, y_temp1, 1 });
272 builder.create_ecc_dbl_gate({ x_temp1, y_temp1, x_temp2, y_temp2 });
273 builder.create_ecc_add_gate({ x_temp2, y_temp2, x3, y3, x_result, y_result, 1 });
275 EXPECT_EQ(
builder.blocks.elliptic.size(), 4UL);