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 {
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 { // SINGLE_TAG_ERROR_BOOLEAN
168 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
169 auto tmp = static_cast<View>(in.get(C::keccak_memory_single_tag_error)) *
170 (FF(1) - static_cast<View>(in.get(C::keccak_memory_single_tag_error)));
171 std::get<20>(evals) += (tmp * scaling_factor);
172 }
173 { // VAL01
174 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
175 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val01)) -
176 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
177 static_cast<View>(in.get(C::keccak_memory_val00_shift)));
178 std::get<21>(evals) += (tmp * scaling_factor);
179 }
180 { // VAL02
181 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
182 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val02)) -
183 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
184 static_cast<View>(in.get(C::keccak_memory_val01_shift)));
185 std::get<22>(evals) += (tmp * scaling_factor);
186 }
187 { // VAL03
188 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
189 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val03)) -
190 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
191 static_cast<View>(in.get(C::keccak_memory_val02_shift)));
192 std::get<23>(evals) += (tmp * scaling_factor);
193 }
194 { // VAL04
195 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
196 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val04)) -
197 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
198 static_cast<View>(in.get(C::keccak_memory_val03_shift)));
199 std::get<24>(evals) += (tmp * scaling_factor);
200 }
201 { // VAL10
202 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
203 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val10)) -
204 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
205 static_cast<View>(in.get(C::keccak_memory_val04_shift)));
206 std::get<25>(evals) += (tmp * scaling_factor);
207 }
208 { // VAL11
209 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
210 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val11)) -
211 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
212 static_cast<View>(in.get(C::keccak_memory_val10_shift)));
213 std::get<26>(evals) += (tmp * scaling_factor);
214 }
215 { // VAL12
216 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
217 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val12)) -
218 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
219 static_cast<View>(in.get(C::keccak_memory_val11_shift)));
220 std::get<27>(evals) += (tmp * scaling_factor);
221 }
222 { // VAL13
223 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
224 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val13)) -
225 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
226 static_cast<View>(in.get(C::keccak_memory_val12_shift)));
227 std::get<28>(evals) += (tmp * scaling_factor);
228 }
229 { // VAL14
230 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
231 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val14)) -
232 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
233 static_cast<View>(in.get(C::keccak_memory_val13_shift)));
234 std::get<29>(evals) += (tmp * scaling_factor);
235 }
236 { // VAL20
237 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
238 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val20)) -
239 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
240 static_cast<View>(in.get(C::keccak_memory_val14_shift)));
241 std::get<30>(evals) += (tmp * scaling_factor);
242 }
243 { // VAL21
244 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
245 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val21)) -
246 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
247 static_cast<View>(in.get(C::keccak_memory_val20_shift)));
248 std::get<31>(evals) += (tmp * scaling_factor);
249 }
250 { // VAL22
251 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
252 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val22)) -
253 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
254 static_cast<View>(in.get(C::keccak_memory_val21_shift)));
255 std::get<32>(evals) += (tmp * scaling_factor);
256 }
257 { // VAL23
258 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
259 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val23)) -
260 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
261 static_cast<View>(in.get(C::keccak_memory_val22_shift)));
262 std::get<33>(evals) += (tmp * scaling_factor);
263 }
264 { // VAL24
265 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
266 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val24)) -
267 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
268 static_cast<View>(in.get(C::keccak_memory_val23_shift)));
269 std::get<34>(evals) += (tmp * scaling_factor);
270 }
271 { // VAL30
272 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
273 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val30)) -
274 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
275 static_cast<View>(in.get(C::keccak_memory_val24_shift)));
276 std::get<35>(evals) += (tmp * scaling_factor);
277 }
278 { // VAL31
279 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
280 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val31)) -
281 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
282 static_cast<View>(in.get(C::keccak_memory_val30_shift)));
283 std::get<36>(evals) += (tmp * scaling_factor);
284 }
285 { // VAL32
286 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
287 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val32)) -
288 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
289 static_cast<View>(in.get(C::keccak_memory_val31_shift)));
290 std::get<37>(evals) += (tmp * scaling_factor);
291 }
292 { // VAL33
293 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
294 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val33)) -
295 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
296 static_cast<View>(in.get(C::keccak_memory_val32_shift)));
297 std::get<38>(evals) += (tmp * scaling_factor);
298 }
299 { // VAL34
300 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
301 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val34)) -
302 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
303 static_cast<View>(in.get(C::keccak_memory_val33_shift)));
304 std::get<39>(evals) += (tmp * scaling_factor);
305 }
306 { // VAL40
307 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
308 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val40)) -
309 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
310 static_cast<View>(in.get(C::keccak_memory_val34_shift)));
311 std::get<40>(evals) += (tmp * scaling_factor);
312 }
313 { // VAL41
314 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
315 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val41)) -
316 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
317 static_cast<View>(in.get(C::keccak_memory_val40_shift)));
318 std::get<41>(evals) += (tmp * scaling_factor);
319 }
320 { // VAL42
321 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
322 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val42)) -
323 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
324 static_cast<View>(in.get(C::keccak_memory_val41_shift)));
325 std::get<42>(evals) += (tmp * scaling_factor);
326 }
327 { // VAL43
328 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
329 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val43)) -
330 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
331 static_cast<View>(in.get(C::keccak_memory_val42_shift)));
332 std::get<43>(evals) += (tmp * scaling_factor);
333 }
334 { // VAL44
335 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
336 auto tmp = (static_cast<View>(in.get(C::keccak_memory_val44)) -
337 (FF(1) - static_cast<View>(in.get(C::keccak_memory_last))) *
338 static_cast<View>(in.get(C::keccak_memory_val43_shift)));
339 std::get<44>(evals) += (tmp * scaling_factor);
340 }
341 {
342 using View = typename std::tuple_element_t<45, ContainerOverSubrelations>::View;
343 auto tmp =
344 static_cast<View>(in.get(C::keccak_memory_sel)) *
345 (static_cast<View>(in.get(C::keccak_memory_num_rounds)) - CView(constants_AVM_KECCAKF1600_NUM_ROUNDS));
346 std::get<45>(evals) += (tmp * scaling_factor);
347 }
348}
349
350} // 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.