Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
keccak_memory_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 keccak_memoryImpl<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 constants_MEM_TAG_U64 = FF(5);
19 const auto constants_AVM_KECCAKF1600_NUM_ROUNDS = FF(24);
20 const auto constants_AVM_KECCAKF1600_STATE_SIZE = FF(25);
21 const auto keccak_memory_TAG_MIN_U64 = (in.get(C::keccak_memory_tag) - constants_MEM_TAG_U64);
22
23 {
24 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
25 auto tmp =
26 static_cast<View>(in.get(C::keccak_memory_sel)) * (FF(1) - static_cast<View>(in.get(C::keccak_memory_sel)));
27 std::get<0>(evals) += (tmp * scaling_factor);
28 }
29 {
30 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
31 auto tmp = static_cast<View>(in.get(C::keccak_memory_start_read)) *
32 (FF(1) - static_cast<View>(in.get(C::keccak_memory_start_read)));
33 std::get<1>(evals) += (tmp * scaling_factor);
34 }
35 {
36 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
37 auto tmp = static_cast<View>(in.get(C::keccak_memory_start_write)) *
38 (FF(1) - static_cast<View>(in.get(C::keccak_memory_start_write)));
39 std::get<2>(evals) += (tmp * scaling_factor);
40 }
41 { // CTR_INIT
42 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
43 auto tmp = (static_cast<View>(in.get(C::keccak_memory_start_read)) +
44 static_cast<View>(in.get(C::keccak_memory_start_write))) *
45 (static_cast<View>(in.get(C::keccak_memory_ctr)) - FF(1));
46 std::get<3>(evals) += (tmp * scaling_factor);
47 }
48 { // RW_READ_INIT
49 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
50 auto tmp =
51 static_cast<View>(in.get(C::keccak_memory_start_read)) * static_cast<View>(in.get(C::keccak_memory_rw));
52 std::get<4>(evals) += (tmp * scaling_factor);
53 }
54 { // RW_WRITE_INIT
55 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
56 auto tmp = static_cast<View>(in.get(C::keccak_memory_start_write)) *
57 (FF(1) - static_cast<View>(in.get(C::keccak_memory_rw)));
58 std::get<5>(evals) += (tmp * scaling_factor);
59 }
60 { // SEL_CTR_NON_ZERO
61 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
62 auto tmp = (static_cast<View>(in.get(C::keccak_memory_ctr)) *
63 ((FF(1) - static_cast<View>(in.get(C::keccak_memory_sel))) *
64 (FF(1) - static_cast<View>(in.get(C::keccak_memory_ctr_inv))) +
65 static_cast<View>(in.get(C::keccak_memory_ctr_inv))) -
66 static_cast<View>(in.get(C::keccak_memory_sel)));
67 std::get<6>(evals) += (tmp * scaling_factor);
68 }
69 {
70 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
71 auto tmp = static_cast<View>(in.get(C::keccak_memory_ctr_end)) *
72 (FF(1) - static_cast<View>(in.get(C::keccak_memory_ctr_end)));
73 std::get<7>(evals) += (tmp * scaling_factor);
74 }
75 { // CTR_END
76 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
77 auto tmp = static_cast<View>(in.get(C::keccak_memory_sel)) *
78 (((CView(constants_AVM_KECCAKF1600_STATE_SIZE) - static_cast<View>(in.get(C::keccak_memory_ctr))) *
79 (static_cast<View>(in.get(C::keccak_memory_ctr_end)) *
80 (FF(1) - static_cast<View>(in.get(C::keccak_memory_state_size_min_ctr_inv))) +
81 static_cast<View>(in.get(C::keccak_memory_state_size_min_ctr_inv))) +
82 static_cast<View>(in.get(C::keccak_memory_ctr_end))) -
83 FF(1));
84 std::get<8>(evals) += (tmp * scaling_factor);
85 }
86 { // LAST
87 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
88 auto tmp = (static_cast<View>(in.get(C::keccak_memory_last)) -
89 (FF(1) - (FF(1) - static_cast<View>(in.get(C::keccak_memory_ctr_end))) *
90 (FF(1) - static_cast<View>(in.get(C::keccak_memory_single_tag_error)))));
91 std::get<9>(evals) += (tmp * scaling_factor);
92 }
93 { // CTR_INCREMENT
94 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
95 auto tmp =
96 static_cast<View>(in.get(C::keccak_memory_sel)) *
97 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
98 ((static_cast<View>(in.get(C::keccak_memory_ctr_shift)) - static_cast<View>(in.get(C::keccak_memory_ctr))) -
99 FF(1));
100 std::get<10>(evals) += (tmp * scaling_factor);
101 }
102 { // SINGLE_TAG_ERROR_BOOLEAN
103 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
104 auto tmp = static_cast<View>(in.get(C::keccak_memory_single_tag_error)) *
105 (FF(1) - static_cast<View>(in.get(C::keccak_memory_single_tag_error)));
106 std::get<11>(evals) += (tmp * scaling_factor);
107 }
108 { // NO_TAG_ERROR_ON_WRITE
109 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
110 auto tmp = static_cast<View>(in.get(C::keccak_memory_rw)) *
111 static_cast<View>(in.get(C::keccak_memory_single_tag_error));
112 std::get<12>(evals) += (tmp * scaling_factor);
113 }
114 { // TAG_ERROR_INIT
115 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
116 auto tmp = static_cast<View>(in.get(C::keccak_memory_last)) *
117 (static_cast<View>(in.get(C::keccak_memory_tag_error)) -
118 static_cast<View>(in.get(C::keccak_memory_single_tag_error)));
119 std::get<13>(evals) += (tmp * scaling_factor);
120 }
121 { // TAG_ERROR_PROPAGATION
122 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
123 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
124 (static_cast<View>(in.get(C::keccak_memory_tag_error)) -
125 static_cast<View>(in.get(C::keccak_memory_tag_error_shift)));
126 std::get<14>(evals) += (tmp * scaling_factor);
127 }
128 { // MEM_ADDR_INCREMENT
129 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
130 auto tmp = static_cast<View>(in.get(C::keccak_memory_sel)) *
131 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
132 ((static_cast<View>(in.get(C::keccak_memory_addr)) + FF(1)) -
133 static_cast<View>(in.get(C::keccak_memory_addr_shift)));
134 std::get<15>(evals) += (tmp * scaling_factor);
135 }
136 { // SPACEID_PROPAGATION
137 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
138 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
139 (static_cast<View>(in.get(C::keccak_memory_space_id)) -
140 static_cast<View>(in.get(C::keccak_memory_space_id_shift)));
141 std::get<16>(evals) += (tmp * scaling_factor);
142 }
143 { // CLK_PROPAGATION
144 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
145 auto tmp =
146 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
147 (static_cast<View>(in.get(C::keccak_memory_clk_shift)) - static_cast<View>(in.get(C::keccak_memory_clk)));
148 std::get<17>(evals) += (tmp * scaling_factor);
149 }
150 { // RW_PROPAGATION
151 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
152 auto tmp =
153 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
154 (static_cast<View>(in.get(C::keccak_memory_rw_shift)) - static_cast<View>(in.get(C::keccak_memory_rw)));
155 std::get<18>(evals) += (tmp * scaling_factor);
156 }
157 { // SINGLE_TAG_ERROR
158 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
159 auto tmp = static_cast<View>(in.get(C::keccak_memory_sel)) *
160 (CView(keccak_memory_TAG_MIN_U64) *
161 ((FF(1) - static_cast<View>(in.get(C::keccak_memory_single_tag_error))) *
162 (FF(1) - static_cast<View>(in.get(C::keccak_memory_tag_min_u64_inv))) +
163 static_cast<View>(in.get(C::keccak_memory_tag_min_u64_inv))) -
164 static_cast<View>(in.get(C::keccak_memory_single_tag_error)));
165 std::get<19>(evals) += (tmp * scaling_factor);
166 }
167 { // VAL01
168 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
169 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_1_)) -
170 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
171 static_cast<View>(in.get(C::keccak_memory_val_0__shift)));
172 std::get<20>(evals) += (tmp * scaling_factor);
173 }
174 { // VAL02
175 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
176 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_2_)) -
177 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
178 static_cast<View>(in.get(C::keccak_memory_val_1__shift)));
179 std::get<21>(evals) += (tmp * scaling_factor);
180 }
181 { // VAL03
182 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
183 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_3_)) -
184 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
185 static_cast<View>(in.get(C::keccak_memory_val_2__shift)));
186 std::get<22>(evals) += (tmp * scaling_factor);
187 }
188 { // VAL04
189 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
190 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_4_)) -
191 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
192 static_cast<View>(in.get(C::keccak_memory_val_3__shift)));
193 std::get<23>(evals) += (tmp * scaling_factor);
194 }
195 { // VAL05
196 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
197 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_5_)) -
198 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
199 static_cast<View>(in.get(C::keccak_memory_val_4__shift)));
200 std::get<24>(evals) += (tmp * scaling_factor);
201 }
202 { // VAL06
203 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
204 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_6_)) -
205 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
206 static_cast<View>(in.get(C::keccak_memory_val_5__shift)));
207 std::get<25>(evals) += (tmp * scaling_factor);
208 }
209 { // VAL07
210 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
211 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_7_)) -
212 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
213 static_cast<View>(in.get(C::keccak_memory_val_6__shift)));
214 std::get<26>(evals) += (tmp * scaling_factor);
215 }
216 { // VAL8
217 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
218 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_8_)) -
219 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
220 static_cast<View>(in.get(C::keccak_memory_val_7__shift)));
221 std::get<27>(evals) += (tmp * scaling_factor);
222 }
223 { // VAL09
224 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
225 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_9_)) -
226 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
227 static_cast<View>(in.get(C::keccak_memory_val_8__shift)));
228 std::get<28>(evals) += (tmp * scaling_factor);
229 }
230 { // VAL10
231 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
232 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_10_)) -
233 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
234 static_cast<View>(in.get(C::keccak_memory_val_9__shift)));
235 std::get<29>(evals) += (tmp * scaling_factor);
236 }
237 { // VAL11
238 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
239 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_11_)) -
240 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
241 static_cast<View>(in.get(C::keccak_memory_val_10__shift)));
242 std::get<30>(evals) += (tmp * scaling_factor);
243 }
244 { // VAL12
245 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
246 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_12_)) -
247 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
248 static_cast<View>(in.get(C::keccak_memory_val_11__shift)));
249 std::get<31>(evals) += (tmp * scaling_factor);
250 }
251 { // VAL13
252 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
253 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_13_)) -
254 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
255 static_cast<View>(in.get(C::keccak_memory_val_12__shift)));
256 std::get<32>(evals) += (tmp * scaling_factor);
257 }
258 { // VAL14
259 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
260 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_14_)) -
261 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
262 static_cast<View>(in.get(C::keccak_memory_val_13__shift)));
263 std::get<33>(evals) += (tmp * scaling_factor);
264 }
265 { // VAL15
266 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
267 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_15_)) -
268 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
269 static_cast<View>(in.get(C::keccak_memory_val_14__shift)));
270 std::get<34>(evals) += (tmp * scaling_factor);
271 }
272 { // VAL16
273 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
274 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_16_)) -
275 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
276 static_cast<View>(in.get(C::keccak_memory_val_15__shift)));
277 std::get<35>(evals) += (tmp * scaling_factor);
278 }
279 { // VAL17
280 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
281 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_17_)) -
282 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
283 static_cast<View>(in.get(C::keccak_memory_val_16__shift)));
284 std::get<36>(evals) += (tmp * scaling_factor);
285 }
286 { // VAL18
287 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
288 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_18_)) -
289 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
290 static_cast<View>(in.get(C::keccak_memory_val_17__shift)));
291 std::get<37>(evals) += (tmp * scaling_factor);
292 }
293 { // VAL19
294 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
295 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_19_)) -
296 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
297 static_cast<View>(in.get(C::keccak_memory_val_18__shift)));
298 std::get<38>(evals) += (tmp * scaling_factor);
299 }
300 { // VAL20
301 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
302 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_20_)) -
303 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
304 static_cast<View>(in.get(C::keccak_memory_val_19__shift)));
305 std::get<39>(evals) += (tmp * scaling_factor);
306 }
307 { // VAL21
308 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
309 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_21_)) -
310 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
311 static_cast<View>(in.get(C::keccak_memory_val_20__shift)));
312 std::get<40>(evals) += (tmp * scaling_factor);
313 }
314 { // VAL22
315 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
316 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_22_)) -
317 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
318 static_cast<View>(in.get(C::keccak_memory_val_21__shift)));
319 std::get<41>(evals) += (tmp * scaling_factor);
320 }
321 { // VAL23
322 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
323 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_23_)) -
324 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
325 static_cast<View>(in.get(C::keccak_memory_val_22__shift)));
326 std::get<42>(evals) += (tmp * scaling_factor);
327 }
328 { // VAL24
329 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
330 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val_24_)) -
331 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
332 static_cast<View>(in.get(C::keccak_memory_val_23__shift)));
333 std::get<43>(evals) += (tmp * scaling_factor);
334 }
335 {
336 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
337 auto tmp =
338 static_cast<View>(in.get(C::keccak_memory_sel)) *
339 (static_cast<View>(in.get(C::keccak_memory_num_rounds)) - CView(constants_AVM_KECCAKF1600_NUM_ROUNDS));
340 std::get<44>(evals) += (tmp * scaling_factor);
341 }
342}
343
344} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
ColumnAndShifts
Definition columns.hpp:34
AvmFlavorSettings::FF FF
Definition field.hpp:10
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.