Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ecc_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
6
7namespace bb::avm2 {
8
9template <typename FF_>
10template <typename ContainerOverSubrelations, typename AllEntities>
11void eccImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
12 const AllEntities& in,
13 [[maybe_unused]] const RelationParameters<FF_>&,
14 [[maybe_unused]] const FF_& scaling_factor)
15{
16 using C = ColumnAndShifts;
17
18 const auto ecc_INFINITY_X = FF(0);
19 const auto ecc_INFINITY_Y = FF(0);
20 const auto ecc_X_DIFF = (in.get(C::ecc_q_x) - in.get(C::ecc_p_x));
21 const auto ecc_Y_DIFF = (in.get(C::ecc_q_y) - in.get(C::ecc_p_y));
22 const auto ecc_COMPUTED_R_X =
23 ((in.get(C::ecc_lambda) * in.get(C::ecc_lambda) - in.get(C::ecc_p_x)) - in.get(C::ecc_q_x));
24 const auto ecc_COMPUTED_R_Y =
25 (in.get(C::ecc_lambda) * (in.get(C::ecc_p_x) - in.get(C::ecc_r_x)) - in.get(C::ecc_p_y));
26 const auto ecc_INVERSE_PRED = in.get(C::ecc_x_match) * (FF(1) - in.get(C::ecc_y_match));
27 const auto ecc_BOTH_INF = in.get(C::ecc_p_is_inf) * in.get(C::ecc_q_is_inf);
28 const auto ecc_BOTH_NON_INF = (FF(1) - in.get(C::ecc_p_is_inf)) * (FF(1) - in.get(C::ecc_q_is_inf));
29 const auto ecc_EITHER_INF = ((in.get(C::ecc_p_is_inf) + in.get(C::ecc_q_is_inf)) - FF(2) * ecc_BOTH_INF);
30
31 {
32 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
33 auto tmp = static_cast<View>(in.get(C::ecc_sel)) * (FF(1) - static_cast<View>(in.get(C::ecc_sel)));
34 std::get<0>(evals) += (tmp * scaling_factor);
35 }
36 {
37 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
38 auto tmp = static_cast<View>(in.get(C::ecc_double_op)) * (FF(1) - static_cast<View>(in.get(C::ecc_double_op)));
39 std::get<1>(evals) += (tmp * scaling_factor);
40 }
41 {
42 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
43 auto tmp = static_cast<View>(in.get(C::ecc_add_op)) * (FF(1) - static_cast<View>(in.get(C::ecc_add_op)));
44 std::get<2>(evals) += (tmp * scaling_factor);
45 }
46 { // OP_CHECK
47 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
48 auto tmp = (static_cast<View>(in.get(C::ecc_sel)) -
49 (static_cast<View>(in.get(C::ecc_double_op)) + static_cast<View>(in.get(C::ecc_add_op)) +
50 CView(ecc_INVERSE_PRED)));
51 std::get<3>(evals) += (tmp * scaling_factor);
52 }
53 {
54 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
55 auto tmp = static_cast<View>(in.get(C::ecc_p_is_inf)) * (FF(1) - static_cast<View>(in.get(C::ecc_p_is_inf)));
56 std::get<4>(evals) += (tmp * scaling_factor);
57 }
58 {
59 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
60 auto tmp = static_cast<View>(in.get(C::ecc_q_is_inf)) * (FF(1) - static_cast<View>(in.get(C::ecc_q_is_inf)));
61 std::get<5>(evals) += (tmp * scaling_factor);
62 }
63 {
64 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
65 auto tmp = static_cast<View>(in.get(C::ecc_r_is_inf)) * (FF(1) - static_cast<View>(in.get(C::ecc_r_is_inf)));
66 std::get<6>(evals) += (tmp * scaling_factor);
67 }
68 {
69 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
70 auto tmp = static_cast<View>(in.get(C::ecc_x_match)) * (FF(1) - static_cast<View>(in.get(C::ecc_x_match)));
71 std::get<7>(evals) += (tmp * scaling_factor);
72 }
73 { // X_MATCH
74 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
75 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
76 ((CView(ecc_X_DIFF) * (static_cast<View>(in.get(C::ecc_x_match)) *
77 (FF(1) - static_cast<View>(in.get(C::ecc_inv_x_diff))) +
78 static_cast<View>(in.get(C::ecc_inv_x_diff))) -
79 FF(1)) +
80 static_cast<View>(in.get(C::ecc_x_match)));
81 std::get<8>(evals) += (tmp * scaling_factor);
82 }
83 {
84 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
85 auto tmp = static_cast<View>(in.get(C::ecc_y_match)) * (FF(1) - static_cast<View>(in.get(C::ecc_y_match)));
86 std::get<9>(evals) += (tmp * scaling_factor);
87 }
88 { // Y_MATCH
89 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
90 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
91 ((CView(ecc_Y_DIFF) * (static_cast<View>(in.get(C::ecc_y_match)) *
92 (FF(1) - static_cast<View>(in.get(C::ecc_inv_y_diff))) +
93 static_cast<View>(in.get(C::ecc_inv_y_diff))) -
94 FF(1)) +
95 static_cast<View>(in.get(C::ecc_y_match)));
96 std::get<10>(evals) += (tmp * scaling_factor);
97 }
98 { // DOUBLE_PRED
99 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
100 auto tmp = (static_cast<View>(in.get(C::ecc_double_op)) -
101 static_cast<View>(in.get(C::ecc_x_match)) * static_cast<View>(in.get(C::ecc_y_match)));
102 std::get<11>(evals) += (tmp * scaling_factor);
103 }
104 {
105 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
106 auto tmp = static_cast<View>(in.get(C::ecc_double_op)) *
107 (static_cast<View>(in.get(C::ecc_p_is_inf)) - static_cast<View>(in.get(C::ecc_q_is_inf)));
108 std::get<12>(evals) += (tmp * scaling_factor);
109 }
110 {
111 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
112 auto tmp =
113 (FF(1) - static_cast<View>(in.get(C::ecc_result_infinity))) * static_cast<View>(in.get(C::ecc_double_op)) *
114 (FF(2) * static_cast<View>(in.get(C::ecc_p_y)) * static_cast<View>(in.get(C::ecc_inv_2_p_y)) - FF(1));
115 std::get<13>(evals) += (tmp * scaling_factor);
116 }
117 { // COMPUTED_LAMBDA
118 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
119 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
120 (static_cast<View>(in.get(C::ecc_lambda)) -
121 (static_cast<View>(in.get(C::ecc_double_op)) * FF(3) * static_cast<View>(in.get(C::ecc_p_x)) *
122 static_cast<View>(in.get(C::ecc_p_x)) * static_cast<View>(in.get(C::ecc_inv_2_p_y)) +
123 static_cast<View>(in.get(C::ecc_add_op)) * CView(ecc_Y_DIFF) *
124 static_cast<View>(in.get(C::ecc_inv_x_diff))));
125 std::get<14>(evals) += (tmp * scaling_factor);
126 }
127 {
128 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
129 auto tmp =
130 (static_cast<View>(in.get(C::ecc_use_computed_result)) -
131 static_cast<View>(in.get(C::ecc_sel)) * CView(ecc_BOTH_NON_INF) * (FF(1) - CView(ecc_INVERSE_PRED)));
132 std::get<15>(evals) += (tmp * scaling_factor);
133 }
134 { // INFINITY_RESULT
135 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
136 auto tmp = (static_cast<View>(in.get(C::ecc_result_infinity)) -
137 (CView(ecc_INVERSE_PRED) * CView(ecc_BOTH_NON_INF) + CView(ecc_BOTH_INF)));
138 std::get<16>(evals) += (tmp * scaling_factor);
139 }
140 { // OUTPUT_X_COORD
141 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
142 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
143 (((static_cast<View>(in.get(C::ecc_r_x)) -
144 CView(ecc_EITHER_INF) *
145 (static_cast<View>(in.get(C::ecc_p_is_inf)) * static_cast<View>(in.get(C::ecc_q_x)) +
146 static_cast<View>(in.get(C::ecc_q_is_inf)) * static_cast<View>(in.get(C::ecc_p_x)))) -
147 static_cast<View>(in.get(C::ecc_result_infinity)) * CView(ecc_INFINITY_X)) -
148 static_cast<View>(in.get(C::ecc_use_computed_result)) * CView(ecc_COMPUTED_R_X));
149 std::get<17>(evals) += (tmp * scaling_factor);
150 }
151 { // OUTPUT_Y_COORD
152 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
153 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
154 (((static_cast<View>(in.get(C::ecc_r_y)) -
155 CView(ecc_EITHER_INF) *
156 (static_cast<View>(in.get(C::ecc_p_is_inf)) * static_cast<View>(in.get(C::ecc_q_y)) +
157 static_cast<View>(in.get(C::ecc_q_is_inf)) * static_cast<View>(in.get(C::ecc_p_y)))) -
158 static_cast<View>(in.get(C::ecc_result_infinity)) * CView(ecc_INFINITY_Y)) -
159 static_cast<View>(in.get(C::ecc_use_computed_result)) * CView(ecc_COMPUTED_R_Y));
160 std::get<18>(evals) += (tmp * scaling_factor);
161 }
162 { // OUTPUT_INF_FLAG
163 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
164 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
165 (static_cast<View>(in.get(C::ecc_r_is_inf)) - static_cast<View>(in.get(C::ecc_result_infinity)));
166 std::get<19>(evals) += (tmp * scaling_factor);
167 }
168}
169
170} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
Definition ecc_impl.hpp:11
AvmFlavorSettings::FF FF
Definition field.hpp:10
ColumnAndShifts
Definition columns.hpp:34
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define CView(v)
Container for parameters used by the grand product (permutation, lookup) Honk relations.