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