Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ec_operations.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7#include "ec_operations.hpp"
13
14namespace acir_format {
15
16template <typename Builder>
17void create_ec_add_constraint(Builder& builder, const EcAdd& input, bool has_valid_witness_assignments)
18{
19 // Input to cycle_group points
20 using cycle_group_ct = bb::stdlib::cycle_group<Builder>;
21
22 auto input1_point = to_grumpkin_point(
23 input.input1_x, input.input1_y, input.input1_infinite, has_valid_witness_assignments, builder);
24 auto input2_point = to_grumpkin_point(
25 input.input2_x, input.input2_y, input.input2_infinite, has_valid_witness_assignments, builder);
26
27 // Addition
28 cycle_group_ct result = input1_point + input2_point;
29 cycle_group_ct standard_result = result.get_standard_form();
30 auto x_normalized = standard_result.x.normalize();
31 auto y_normalized = standard_result.y.normalize();
32 auto infinite = standard_result.is_point_at_infinity().normalize();
33
34 if (x_normalized.is_constant()) {
35 builder.fix_witness(input.result_x, x_normalized.get_value());
36 } else {
37 builder.assert_equal(x_normalized.witness_index, input.result_x);
38 }
39 if (y_normalized.is_constant()) {
40 builder.fix_witness(input.result_y, y_normalized.get_value());
41 } else {
42 builder.assert_equal(y_normalized.witness_index, input.result_y);
43 }
44 if (infinite.is_constant()) {
45 builder.fix_witness(input.result_infinite, infinite.get_value());
46 } else {
47 builder.assert_equal(infinite.witness_index, input.result_infinite);
48 }
49}
50
52 const EcAdd& input,
53 bool has_valid_witness_assignments);
55 const EcAdd& input,
56 bool has_valid_witness_assignments);
57
58} // namespace acir_format
cycle_group represents a group Element of the proving system's embedded curve i.e....
AluTraceBuilder builder
Definition alu.test.cpp:123
template void create_ec_add_constraint< bb::UltraCircuitBuilder >(bb::UltraCircuitBuilder &builder, const EcAdd &input, bool has_valid_witness_assignments)
void create_ec_add_constraint(Builder &builder, const EcAdd &input, bool has_valid_witness_assignments)
template void create_ec_add_constraint< bb::MegaCircuitBuilder >(bb::MegaCircuitBuilder &builder, const EcAdd &input, bool has_valid_witness_assignments)
bb::stdlib::cycle_group< Builder > to_grumpkin_point(const WitnessOrConstant< FF > &input_x, const WitnessOrConstant< FF > &input_y, const WitnessOrConstant< FF > &input_infinite, bool has_valid_witness_assignments, Builder &builder)
WitnessOrConstant< bb::fr > input1_y
WitnessOrConstant< bb::fr > input1_infinite
WitnessOrConstant< bb::fr > input2_y
WitnessOrConstant< bb::fr > input2_infinite
WitnessOrConstant< bb::fr > input1_x
WitnessOrConstant< bb::fr > input2_x