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
5
6namespace bb::avm2 {
7
8template <typename FF_>
9template <typename ContainerOverSubrelations, typename AllEntities>
10void keccak_memoryImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
11 const AllEntities& in,
12 [[maybe_unused]] const RelationParameters<FF_>&,
13 [[maybe_unused]] const FF_& scaling_factor)
14{
15 using C = ColumnAndShifts;
16
17 PROFILE_THIS_NAME("accumulate/keccak_memory");
18
19 const auto constants_MEM_TAG_U64 = FF(5);
20 const auto constants_AVM_KECCAKF1600_NUM_ROUNDS = FF(24);
21 const auto constants_AVM_KECCAKF1600_STATE_SIZE = FF(25);
22 const auto keccak_memory_TAG_MIN_U64 = (in.get(C::keccak_memory_tag) - constants_MEM_TAG_U64);
23
24 {
25 using Accumulator = typename std::tuple_element_t<0, ContainerOverSubrelations>;
26 auto tmp = in.get(C::keccak_memory_sel) * (FF(1) - in.get(C::keccak_memory_sel));
27 tmp *= scaling_factor;
28 std::get<0>(evals) += typename Accumulator::View(tmp);
29 }
30 {
31 using Accumulator = typename std::tuple_element_t<1, ContainerOverSubrelations>;
32 auto tmp = in.get(C::keccak_memory_start_read) * (FF(1) - in.get(C::keccak_memory_start_read));
33 tmp *= scaling_factor;
34 std::get<1>(evals) += typename Accumulator::View(tmp);
35 }
36 {
37 using Accumulator = typename std::tuple_element_t<2, ContainerOverSubrelations>;
38 auto tmp = in.get(C::keccak_memory_start_write) * (FF(1) - in.get(C::keccak_memory_start_write));
39 tmp *= scaling_factor;
40 std::get<2>(evals) += typename Accumulator::View(tmp);
41 }
42 { // CTR_INIT
43 using Accumulator = typename std::tuple_element_t<3, ContainerOverSubrelations>;
44 auto tmp = (in.get(C::keccak_memory_start_read) + in.get(C::keccak_memory_start_write)) *
45 (in.get(C::keccak_memory_ctr) - FF(1));
46 tmp *= scaling_factor;
47 std::get<3>(evals) += typename Accumulator::View(tmp);
48 }
49 { // RW_READ_INIT
50 using Accumulator = typename std::tuple_element_t<4, ContainerOverSubrelations>;
51 auto tmp = in.get(C::keccak_memory_start_read) * in.get(C::keccak_memory_rw);
52 tmp *= scaling_factor;
53 std::get<4>(evals) += typename Accumulator::View(tmp);
54 }
55 { // RW_WRITE_INIT
56 using Accumulator = typename std::tuple_element_t<5, ContainerOverSubrelations>;
57 auto tmp = in.get(C::keccak_memory_start_write) * (FF(1) - in.get(C::keccak_memory_rw));
58 tmp *= scaling_factor;
59 std::get<5>(evals) += typename Accumulator::View(tmp);
60 }
61 { // SEL_CTR_NON_ZERO
62 using Accumulator = typename std::tuple_element_t<6, ContainerOverSubrelations>;
63 auto tmp = (in.get(C::keccak_memory_ctr) *
64 ((FF(1) - in.get(C::keccak_memory_sel)) * (FF(1) - in.get(C::keccak_memory_ctr_inv)) +
65 in.get(C::keccak_memory_ctr_inv)) -
66 in.get(C::keccak_memory_sel));
67 tmp *= scaling_factor;
68 std::get<6>(evals) += typename Accumulator::View(tmp);
69 }
70 {
71 using Accumulator = typename std::tuple_element_t<7, ContainerOverSubrelations>;
72 auto tmp = in.get(C::keccak_memory_ctr_end) * (FF(1) - in.get(C::keccak_memory_ctr_end));
73 tmp *= scaling_factor;
74 std::get<7>(evals) += typename Accumulator::View(tmp);
75 }
76 { // CTR_END
77 using Accumulator = typename std::tuple_element_t<8, ContainerOverSubrelations>;
78 auto tmp = in.get(C::keccak_memory_sel) *
79 (((in.get(C::keccak_memory_ctr) - constants_AVM_KECCAKF1600_STATE_SIZE) *
80 (in.get(C::keccak_memory_ctr_end) * (FF(1) - in.get(C::keccak_memory_ctr_min_state_size_inv)) +
81 in.get(C::keccak_memory_ctr_min_state_size_inv)) +
82 in.get(C::keccak_memory_ctr_end)) -
83 FF(1));
84 tmp *= scaling_factor;
85 std::get<8>(evals) += typename Accumulator::View(tmp);
86 }
87 { // LAST
88 using Accumulator = typename std::tuple_element_t<9, ContainerOverSubrelations>;
89 auto tmp = (in.get(C::keccak_memory_last) - (FF(1) - (FF(1) - in.get(C::keccak_memory_ctr_end)) *
90 (FF(1) - in.get(C::keccak_memory_single_tag_error))));
91 tmp *= scaling_factor;
92 std::get<9>(evals) += typename Accumulator::View(tmp);
93 }
94 { // CTR_INCREMENT
95 using Accumulator = typename std::tuple_element_t<10, ContainerOverSubrelations>;
96 auto tmp = in.get(C::keccak_memory_sel) * (FF(1) - in.get(C::keccak_memory_last)) *
97 ((in.get(C::keccak_memory_ctr_shift) - in.get(C::keccak_memory_ctr)) - FF(1));
98 tmp *= scaling_factor;
99 std::get<10>(evals) += typename Accumulator::View(tmp);
100 }
101 {
102 using Accumulator = typename std::tuple_element_t<11, ContainerOverSubrelations>;
103 auto tmp = in.get(C::keccak_memory_single_tag_error) * (FF(1) - in.get(C::keccak_memory_single_tag_error));
104 tmp *= scaling_factor;
105 std::get<11>(evals) += typename Accumulator::View(tmp);
106 }
107 { // NO_TAG_ERROR_ON_WRITE
108 using Accumulator = typename std::tuple_element_t<12, ContainerOverSubrelations>;
109 auto tmp = in.get(C::keccak_memory_rw) * in.get(C::keccak_memory_single_tag_error);
110 tmp *= scaling_factor;
111 std::get<12>(evals) += typename Accumulator::View(tmp);
112 }
113 { // TAG_ERROR_INIT
114 using Accumulator = typename std::tuple_element_t<13, ContainerOverSubrelations>;
115 auto tmp = in.get(C::keccak_memory_last) *
116 (in.get(C::keccak_memory_tag_error) - in.get(C::keccak_memory_single_tag_error));
117 tmp *= scaling_factor;
118 std::get<13>(evals) += typename Accumulator::View(tmp);
119 }
120 { // TAG_ERROR_PROPAGATION
121 using Accumulator = typename std::tuple_element_t<14, ContainerOverSubrelations>;
122 auto tmp = (FF(1) - in.get(C::keccak_memory_last)) *
123 (in.get(C::keccak_memory_tag_error) - in.get(C::keccak_memory_tag_error_shift));
124 tmp *= scaling_factor;
125 std::get<14>(evals) += typename Accumulator::View(tmp);
126 }
127 { // MEM_ADDR_INCREMENT
128 using Accumulator = typename std::tuple_element_t<15, ContainerOverSubrelations>;
129 auto tmp = in.get(C::keccak_memory_sel) * (FF(1) - in.get(C::keccak_memory_last)) *
130 ((in.get(C::keccak_memory_addr) + FF(1)) - in.get(C::keccak_memory_addr_shift));
131 tmp *= scaling_factor;
132 std::get<15>(evals) += typename Accumulator::View(tmp);
133 }
134 { // SPACEID_PROPAGATION
135 using Accumulator = typename std::tuple_element_t<16, ContainerOverSubrelations>;
136 auto tmp = (FF(1) - in.get(C::keccak_memory_last)) *
137 (in.get(C::keccak_memory_space_id) - in.get(C::keccak_memory_space_id_shift));
138 tmp *= scaling_factor;
139 std::get<16>(evals) += typename Accumulator::View(tmp);
140 }
141 { // CLK_PROPAGATION
142 using Accumulator = typename std::tuple_element_t<17, ContainerOverSubrelations>;
143 auto tmp = (FF(1) - in.get(C::keccak_memory_last)) *
144 (in.get(C::keccak_memory_clk_shift) - in.get(C::keccak_memory_clk));
145 tmp *= scaling_factor;
146 std::get<17>(evals) += typename Accumulator::View(tmp);
147 }
148 { // RW_PROPAGATION
149 using Accumulator = typename std::tuple_element_t<18, ContainerOverSubrelations>;
150 auto tmp =
151 (FF(1) - in.get(C::keccak_memory_last)) * (in.get(C::keccak_memory_rw_shift) - in.get(C::keccak_memory_rw));
152 tmp *= scaling_factor;
153 std::get<18>(evals) += typename Accumulator::View(tmp);
154 }
155 { // SINGLE_TAG_ERROR
156 using Accumulator = typename std::tuple_element_t<19, ContainerOverSubrelations>;
157 auto tmp = in.get(C::keccak_memory_sel) *
158 (keccak_memory_TAG_MIN_U64 * ((FF(1) - in.get(C::keccak_memory_single_tag_error)) *
159 (FF(1) - in.get(C::keccak_memory_tag_min_u64_inv)) +
160 in.get(C::keccak_memory_tag_min_u64_inv)) -
161 in.get(C::keccak_memory_single_tag_error));
162 tmp *= scaling_factor;
163 std::get<19>(evals) += typename Accumulator::View(tmp);
164 }
165 { // SINGLE_TAG_ERROR_BOOLEAN
166 using Accumulator = typename std::tuple_element_t<20, ContainerOverSubrelations>;
167 auto tmp = in.get(C::keccak_memory_single_tag_error) * (FF(1) - in.get(C::keccak_memory_single_tag_error));
168 tmp *= scaling_factor;
169 std::get<20>(evals) += typename Accumulator::View(tmp);
170 }
171 { // VAL01
172 using Accumulator = typename std::tuple_element_t<21, ContainerOverSubrelations>;
173 auto tmp = (in.get(C::keccak_memory_val01) -
174 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val00_shift));
175 tmp *= scaling_factor;
176 std::get<21>(evals) += typename Accumulator::View(tmp);
177 }
178 { // VAL02
179 using Accumulator = typename std::tuple_element_t<22, ContainerOverSubrelations>;
180 auto tmp = (in.get(C::keccak_memory_val02) -
181 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val01_shift));
182 tmp *= scaling_factor;
183 std::get<22>(evals) += typename Accumulator::View(tmp);
184 }
185 { // VAL03
186 using Accumulator = typename std::tuple_element_t<23, ContainerOverSubrelations>;
187 auto tmp = (in.get(C::keccak_memory_val03) -
188 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val02_shift));
189 tmp *= scaling_factor;
190 std::get<23>(evals) += typename Accumulator::View(tmp);
191 }
192 { // VAL04
193 using Accumulator = typename std::tuple_element_t<24, ContainerOverSubrelations>;
194 auto tmp = (in.get(C::keccak_memory_val04) -
195 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val03_shift));
196 tmp *= scaling_factor;
197 std::get<24>(evals) += typename Accumulator::View(tmp);
198 }
199 { // VAL10
200 using Accumulator = typename std::tuple_element_t<25, ContainerOverSubrelations>;
201 auto tmp = (in.get(C::keccak_memory_val10) -
202 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val04_shift));
203 tmp *= scaling_factor;
204 std::get<25>(evals) += typename Accumulator::View(tmp);
205 }
206 { // VAL11
207 using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>;
208 auto tmp = (in.get(C::keccak_memory_val11) -
209 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val10_shift));
210 tmp *= scaling_factor;
211 std::get<26>(evals) += typename Accumulator::View(tmp);
212 }
213 { // VAL12
214 using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>;
215 auto tmp = (in.get(C::keccak_memory_val12) -
216 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val11_shift));
217 tmp *= scaling_factor;
218 std::get<27>(evals) += typename Accumulator::View(tmp);
219 }
220 { // VAL13
221 using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>;
222 auto tmp = (in.get(C::keccak_memory_val13) -
223 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val12_shift));
224 tmp *= scaling_factor;
225 std::get<28>(evals) += typename Accumulator::View(tmp);
226 }
227 { // VAL14
228 using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>;
229 auto tmp = (in.get(C::keccak_memory_val14) -
230 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val13_shift));
231 tmp *= scaling_factor;
232 std::get<29>(evals) += typename Accumulator::View(tmp);
233 }
234 { // VAL20
235 using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>;
236 auto tmp = (in.get(C::keccak_memory_val20) -
237 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val14_shift));
238 tmp *= scaling_factor;
239 std::get<30>(evals) += typename Accumulator::View(tmp);
240 }
241 { // VAL21
242 using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>;
243 auto tmp = (in.get(C::keccak_memory_val21) -
244 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val20_shift));
245 tmp *= scaling_factor;
246 std::get<31>(evals) += typename Accumulator::View(tmp);
247 }
248 { // VAL22
249 using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>;
250 auto tmp = (in.get(C::keccak_memory_val22) -
251 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val21_shift));
252 tmp *= scaling_factor;
253 std::get<32>(evals) += typename Accumulator::View(tmp);
254 }
255 { // VAL23
256 using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>;
257 auto tmp = (in.get(C::keccak_memory_val23) -
258 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val22_shift));
259 tmp *= scaling_factor;
260 std::get<33>(evals) += typename Accumulator::View(tmp);
261 }
262 { // VAL24
263 using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>;
264 auto tmp = (in.get(C::keccak_memory_val24) -
265 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val23_shift));
266 tmp *= scaling_factor;
267 std::get<34>(evals) += typename Accumulator::View(tmp);
268 }
269 { // VAL30
270 using Accumulator = typename std::tuple_element_t<35, ContainerOverSubrelations>;
271 auto tmp = (in.get(C::keccak_memory_val30) -
272 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val24_shift));
273 tmp *= scaling_factor;
274 std::get<35>(evals) += typename Accumulator::View(tmp);
275 }
276 { // VAL31
277 using Accumulator = typename std::tuple_element_t<36, ContainerOverSubrelations>;
278 auto tmp = (in.get(C::keccak_memory_val31) -
279 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val30_shift));
280 tmp *= scaling_factor;
281 std::get<36>(evals) += typename Accumulator::View(tmp);
282 }
283 { // VAL32
284 using Accumulator = typename std::tuple_element_t<37, ContainerOverSubrelations>;
285 auto tmp = (in.get(C::keccak_memory_val32) -
286 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val31_shift));
287 tmp *= scaling_factor;
288 std::get<37>(evals) += typename Accumulator::View(tmp);
289 }
290 { // VAL33
291 using Accumulator = typename std::tuple_element_t<38, ContainerOverSubrelations>;
292 auto tmp = (in.get(C::keccak_memory_val33) -
293 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val32_shift));
294 tmp *= scaling_factor;
295 std::get<38>(evals) += typename Accumulator::View(tmp);
296 }
297 { // VAL34
298 using Accumulator = typename std::tuple_element_t<39, ContainerOverSubrelations>;
299 auto tmp = (in.get(C::keccak_memory_val34) -
300 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val33_shift));
301 tmp *= scaling_factor;
302 std::get<39>(evals) += typename Accumulator::View(tmp);
303 }
304 { // VAL40
305 using Accumulator = typename std::tuple_element_t<40, ContainerOverSubrelations>;
306 auto tmp = (in.get(C::keccak_memory_val40) -
307 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val34_shift));
308 tmp *= scaling_factor;
309 std::get<40>(evals) += typename Accumulator::View(tmp);
310 }
311 { // VAL41
312 using Accumulator = typename std::tuple_element_t<41, ContainerOverSubrelations>;
313 auto tmp = (in.get(C::keccak_memory_val41) -
314 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val40_shift));
315 tmp *= scaling_factor;
316 std::get<41>(evals) += typename Accumulator::View(tmp);
317 }
318 { // VAL42
319 using Accumulator = typename std::tuple_element_t<42, ContainerOverSubrelations>;
320 auto tmp = (in.get(C::keccak_memory_val42) -
321 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val41_shift));
322 tmp *= scaling_factor;
323 std::get<42>(evals) += typename Accumulator::View(tmp);
324 }
325 { // VAL43
326 using Accumulator = typename std::tuple_element_t<43, ContainerOverSubrelations>;
327 auto tmp = (in.get(C::keccak_memory_val43) -
328 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val42_shift));
329 tmp *= scaling_factor;
330 std::get<43>(evals) += typename Accumulator::View(tmp);
331 }
332 { // VAL44
333 using Accumulator = typename std::tuple_element_t<44, ContainerOverSubrelations>;
334 auto tmp = (in.get(C::keccak_memory_val44) -
335 (FF(1) - in.get(C::keccak_memory_last)) * in.get(C::keccak_memory_val43_shift));
336 tmp *= scaling_factor;
337 std::get<44>(evals) += typename Accumulator::View(tmp);
338 }
339 {
340 using Accumulator = typename std::tuple_element_t<45, ContainerOverSubrelations>;
341 auto tmp =
342 in.get(C::keccak_memory_sel) * (in.get(C::keccak_memory_num_rounds) - constants_AVM_KECCAKF1600_NUM_ROUNDS);
343 tmp *= scaling_factor;
344 std::get<45>(evals) += typename Accumulator::View(tmp);
345 }
346}
347
348} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
ColumnAndShifts
Definition columns.hpp:35
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define PROFILE_THIS_NAME(name)
Definition op_count.hpp:16
Container for parameters used by the grand product (permutation, lookup) Honk relations.