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