Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
sha256_mem_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 sha256_memImpl<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_U32 = FF(4);
19 const auto constants_AVM_HIGHEST_MEM_ADDRESS = FF(4294967295UL);
20 const auto sha256_LATCH_CONDITION = in.get(C::sha256_end) + in.get(C::precomputed_first_row);
21 const auto sha256_NOT_END = (in.get(C::sha256_sel) - in.get(C::sha256_end));
22 const auto sha256_STATE_READ_CONDITION = (in.get(C::sha256_start) - in.get(C::sha256_mem_out_of_range_err));
23 const auto sha256_OUTPUT_WRITE_CONDITION =
24 (in.get(C::sha256_sel_mem_state_or_output) - sha256_STATE_READ_CONDITION);
25 const auto sha256_STATE_TAG_DIFF_0 = (in.get(C::sha256_memory_tag_0_) - constants_MEM_TAG_U32);
26 const auto sha256_STATE_TAG_DIFF_1 = (in.get(C::sha256_memory_tag_1_) - constants_MEM_TAG_U32);
27 const auto sha256_STATE_TAG_DIFF_2 = (in.get(C::sha256_memory_tag_2_) - constants_MEM_TAG_U32);
28 const auto sha256_STATE_TAG_DIFF_3 = (in.get(C::sha256_memory_tag_3_) - constants_MEM_TAG_U32);
29 const auto sha256_STATE_TAG_DIFF_4 = (in.get(C::sha256_memory_tag_4_) - constants_MEM_TAG_U32);
30 const auto sha256_STATE_TAG_DIFF_5 = (in.get(C::sha256_memory_tag_5_) - constants_MEM_TAG_U32);
31 const auto sha256_STATE_TAG_DIFF_6 = (in.get(C::sha256_memory_tag_6_) - constants_MEM_TAG_U32);
32 const auto sha256_STATE_TAG_DIFF_7 = (in.get(C::sha256_memory_tag_7_) - constants_MEM_TAG_U32);
33 const auto sha256_BATCHED_TAG_CHECK = FF(1) * sha256_STATE_TAG_DIFF_0 + FF(8) * sha256_STATE_TAG_DIFF_1 +
34 FF(64) * sha256_STATE_TAG_DIFF_2 + FF(512) * sha256_STATE_TAG_DIFF_3 +
35 FF(4096) * sha256_STATE_TAG_DIFF_4 + FF(32768) * sha256_STATE_TAG_DIFF_5 +
36 FF(262144) * sha256_STATE_TAG_DIFF_6 + FF(2097152) * sha256_STATE_TAG_DIFF_7;
37 const auto sha256_INPUT_TAG_DIFF =
38 in.get(C::sha256_sel_read_input_from_memory) * (in.get(C::sha256_input_tag) - constants_MEM_TAG_U32);
39 const auto sha256_END_ON_ERROR = in.get(C::sha256_mem_out_of_range_err) +
40 in.get(C::sha256_sel_invalid_state_tag_err) +
41 in.get(C::sha256_sel_invalid_input_row_tag_err);
42
43 {
44 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
45 auto tmp = static_cast<View>(in.get(C::sha256_sel)) * (FF(1) - static_cast<View>(in.get(C::sha256_sel)));
46 std::get<0>(evals) += (tmp * scaling_factor);
47 }
48 {
49 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
50 auto tmp = static_cast<View>(in.get(C::sha256_start)) * (FF(1) - static_cast<View>(in.get(C::sha256_start)));
51 std::get<1>(evals) += (tmp * scaling_factor);
52 }
53 {
54 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
55 auto tmp = static_cast<View>(in.get(C::sha256_end)) * (FF(1) - static_cast<View>(in.get(C::sha256_end)));
56 std::get<2>(evals) += (tmp * scaling_factor);
57 }
58 { // SEL_ON_START_OR_END
59 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
60 auto tmp = (static_cast<View>(in.get(C::sha256_start)) + static_cast<View>(in.get(C::sha256_end))) *
61 (FF(1) - static_cast<View>(in.get(C::sha256_sel)));
62 std::get<3>(evals) += (tmp * scaling_factor);
63 }
64 { // TRACE_CONTINUITY
65 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
66 auto tmp = (FF(1) - CView(sha256_LATCH_CONDITION)) *
67 (static_cast<View>(in.get(C::sha256_sel)) - static_cast<View>(in.get(C::sha256_sel_shift)));
68 std::get<4>(evals) += (tmp * scaling_factor);
69 }
70 { // START_AFTER_LATCH
71 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
72 auto tmp = static_cast<View>(in.get(C::sha256_sel_shift)) *
73 (static_cast<View>(in.get(C::sha256_start_shift)) - CView(sha256_LATCH_CONDITION));
74 std::get<5>(evals) += (tmp * scaling_factor);
75 }
76 { // CONTINUITY_EXEC_CLK
77 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
78 auto tmp = (FF(1) - CView(sha256_LATCH_CONDITION)) * (static_cast<View>(in.get(C::sha256_execution_clk_shift)) -
79 static_cast<View>(in.get(C::sha256_execution_clk)));
80 std::get<6>(evals) += (tmp * scaling_factor);
81 }
82 { // CONTINUITY_SPACE_ID
83 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
84 auto tmp = (FF(1) - CView(sha256_LATCH_CONDITION)) * (static_cast<View>(in.get(C::sha256_space_id_shift)) -
85 static_cast<View>(in.get(C::sha256_space_id)));
86 std::get<7>(evals) += (tmp * scaling_factor);
87 }
88 { // CONTINUITY_OUTPUT_ADDR
89 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
90 auto tmp = (FF(1) - CView(sha256_LATCH_CONDITION)) * (static_cast<View>(in.get(C::sha256_output_addr_shift)) -
91 static_cast<View>(in.get(C::sha256_output_addr)));
92 std::get<8>(evals) += (tmp * scaling_factor);
93 }
94 { // CONTINUITY_INPUT_ADDR
95 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
96 auto tmp =
97 (FF(1) - CView(sha256_LATCH_CONDITION)) * (static_cast<View>(in.get(C::sha256_input_addr_shift)) -
98 (static_cast<View>(in.get(C::sha256_input_addr)) +
99 static_cast<View>(in.get(C::sha256_sel_is_input_round))));
100 std::get<9>(evals) += (tmp * scaling_factor);
101 }
102 {
103 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
104 auto tmp = static_cast<View>(in.get(C::sha256_start)) *
105 (static_cast<View>(in.get(C::sha256_max_mem_addr)) - CView(constants_AVM_HIGHEST_MEM_ADDRESS));
106 std::get<10>(evals) += (tmp * scaling_factor);
107 }
108 {
109 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
110 auto tmp =
111 (static_cast<View>(in.get(C::sha256_max_state_addr)) -
112 static_cast<View>(in.get(C::sha256_start)) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(7)));
113 std::get<11>(evals) += (tmp * scaling_factor);
114 }
115 {
116 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
117 auto tmp =
118 (static_cast<View>(in.get(C::sha256_max_input_addr)) -
119 static_cast<View>(in.get(C::sha256_start)) * (static_cast<View>(in.get(C::sha256_input_addr)) + FF(15)));
120 std::get<12>(evals) += (tmp * scaling_factor);
121 }
122 {
123 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
124 auto tmp =
125 (static_cast<View>(in.get(C::sha256_max_output_addr)) -
126 static_cast<View>(in.get(C::sha256_start)) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(7)));
127 std::get<13>(evals) += (tmp * scaling_factor);
128 }
129 {
130 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
131 auto tmp = (static_cast<View>(in.get(C::sha256_mem_out_of_range_err)) -
132 static_cast<View>(in.get(C::sha256_start)) *
133 (FF(1) - (FF(1) - static_cast<View>(in.get(C::sha256_sel_state_out_of_range_err))) *
134 (FF(1) - static_cast<View>(in.get(C::sha256_sel_input_out_of_range_err))) *
135 (FF(1) - static_cast<View>(in.get(C::sha256_sel_output_out_of_range_err)))));
136 std::get<14>(evals) += (tmp * scaling_factor);
137 }
138 {
139 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
140 auto tmp = (static_cast<View>(in.get(C::sha256_u32_tag)) -
141 static_cast<View>(in.get(C::sha256_sel)) * CView(constants_MEM_TAG_U32));
142 std::get<15>(evals) += (tmp * scaling_factor);
143 }
144 { // START_OR_END_MEM
145 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
146 auto tmp = (static_cast<View>(in.get(C::sha256_sel_mem_state_or_output)) -
147 (CView(sha256_STATE_READ_CONDITION) +
148 static_cast<View>(in.get(C::sha256_end)) * (FF(1) - static_cast<View>(in.get(C::sha256_err)))));
149 std::get<16>(evals) += (tmp * scaling_factor);
150 }
151 {
152 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
153 auto tmp =
154 (static_cast<View>(in.get(C::sha256_memory_address_0_)) -
155 (CView(sha256_STATE_READ_CONDITION) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(0)) +
156 CView(sha256_OUTPUT_WRITE_CONDITION) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(0))));
157 std::get<17>(evals) += (tmp * scaling_factor);
158 }
159 {
160 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
161 auto tmp =
162 (static_cast<View>(in.get(C::sha256_memory_address_1_)) -
163 (CView(sha256_STATE_READ_CONDITION) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(1)) +
164 CView(sha256_OUTPUT_WRITE_CONDITION) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(1))));
165 std::get<18>(evals) += (tmp * scaling_factor);
166 }
167 {
168 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
169 auto tmp =
170 (static_cast<View>(in.get(C::sha256_memory_address_2_)) -
171 (CView(sha256_STATE_READ_CONDITION) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(2)) +
172 CView(sha256_OUTPUT_WRITE_CONDITION) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(2))));
173 std::get<19>(evals) += (tmp * scaling_factor);
174 }
175 {
176 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
177 auto tmp =
178 (static_cast<View>(in.get(C::sha256_memory_address_3_)) -
179 (CView(sha256_STATE_READ_CONDITION) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(3)) +
180 CView(sha256_OUTPUT_WRITE_CONDITION) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(3))));
181 std::get<20>(evals) += (tmp * scaling_factor);
182 }
183 {
184 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
185 auto tmp =
186 (static_cast<View>(in.get(C::sha256_memory_address_4_)) -
187 (CView(sha256_STATE_READ_CONDITION) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(4)) +
188 CView(sha256_OUTPUT_WRITE_CONDITION) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(4))));
189 std::get<21>(evals) += (tmp * scaling_factor);
190 }
191 {
192 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
193 auto tmp =
194 (static_cast<View>(in.get(C::sha256_memory_address_5_)) -
195 (CView(sha256_STATE_READ_CONDITION) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(5)) +
196 CView(sha256_OUTPUT_WRITE_CONDITION) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(5))));
197 std::get<22>(evals) += (tmp * scaling_factor);
198 }
199 {
200 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
201 auto tmp =
202 (static_cast<View>(in.get(C::sha256_memory_address_6_)) -
203 (CView(sha256_STATE_READ_CONDITION) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(6)) +
204 CView(sha256_OUTPUT_WRITE_CONDITION) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(6))));
205 std::get<23>(evals) += (tmp * scaling_factor);
206 }
207 {
208 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
209 auto tmp =
210 (static_cast<View>(in.get(C::sha256_memory_address_7_)) -
211 (CView(sha256_STATE_READ_CONDITION) * (static_cast<View>(in.get(C::sha256_state_addr)) + FF(7)) +
212 CView(sha256_OUTPUT_WRITE_CONDITION) * (static_cast<View>(in.get(C::sha256_output_addr)) + FF(7))));
213 std::get<24>(evals) += (tmp * scaling_factor);
214 }
215 {
216 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
217 auto tmp = (static_cast<View>(in.get(C::sha256_memory_register_0_)) -
218 (CView(sha256_STATE_READ_CONDITION) * static_cast<View>(in.get(C::sha256_init_a)) +
219 CView(sha256_OUTPUT_WRITE_CONDITION) * static_cast<View>(in.get(C::sha256_output_a_rhs))));
220 std::get<25>(evals) += (tmp * scaling_factor);
221 }
222 {
223 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
224 auto tmp = (static_cast<View>(in.get(C::sha256_memory_register_1_)) -
225 (CView(sha256_STATE_READ_CONDITION) * static_cast<View>(in.get(C::sha256_init_b)) +
226 CView(sha256_OUTPUT_WRITE_CONDITION) * static_cast<View>(in.get(C::sha256_output_b_rhs))));
227 std::get<26>(evals) += (tmp * scaling_factor);
228 }
229 {
230 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
231 auto tmp = (static_cast<View>(in.get(C::sha256_memory_register_2_)) -
232 (CView(sha256_STATE_READ_CONDITION) * static_cast<View>(in.get(C::sha256_init_c)) +
233 CView(sha256_OUTPUT_WRITE_CONDITION) * static_cast<View>(in.get(C::sha256_output_c_rhs))));
234 std::get<27>(evals) += (tmp * scaling_factor);
235 }
236 {
237 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
238 auto tmp = (static_cast<View>(in.get(C::sha256_memory_register_3_)) -
239 (CView(sha256_STATE_READ_CONDITION) * static_cast<View>(in.get(C::sha256_init_d)) +
240 CView(sha256_OUTPUT_WRITE_CONDITION) * static_cast<View>(in.get(C::sha256_output_d_rhs))));
241 std::get<28>(evals) += (tmp * scaling_factor);
242 }
243 {
244 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
245 auto tmp = (static_cast<View>(in.get(C::sha256_memory_register_4_)) -
246 (CView(sha256_STATE_READ_CONDITION) * static_cast<View>(in.get(C::sha256_init_e)) +
247 CView(sha256_OUTPUT_WRITE_CONDITION) * static_cast<View>(in.get(C::sha256_output_e_rhs))));
248 std::get<29>(evals) += (tmp * scaling_factor);
249 }
250 {
251 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
252 auto tmp = (static_cast<View>(in.get(C::sha256_memory_register_5_)) -
253 (CView(sha256_STATE_READ_CONDITION) * static_cast<View>(in.get(C::sha256_init_f)) +
254 CView(sha256_OUTPUT_WRITE_CONDITION) * static_cast<View>(in.get(C::sha256_output_f_rhs))));
255 std::get<30>(evals) += (tmp * scaling_factor);
256 }
257 {
258 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
259 auto tmp = (static_cast<View>(in.get(C::sha256_memory_register_6_)) -
260 (CView(sha256_STATE_READ_CONDITION) * static_cast<View>(in.get(C::sha256_init_g)) +
261 CView(sha256_OUTPUT_WRITE_CONDITION) * static_cast<View>(in.get(C::sha256_output_g_rhs))));
262 std::get<31>(evals) += (tmp * scaling_factor);
263 }
264 {
265 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
266 auto tmp = (static_cast<View>(in.get(C::sha256_memory_register_7_)) -
267 (CView(sha256_STATE_READ_CONDITION) * static_cast<View>(in.get(C::sha256_init_h)) +
268 CView(sha256_OUTPUT_WRITE_CONDITION) * static_cast<View>(in.get(C::sha256_output_h_rhs))));
269 std::get<32>(evals) += (tmp * scaling_factor);
270 }
271 {
272 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
273 auto tmp = (static_cast<View>(in.get(C::sha256_rw)) - CView(sha256_OUTPUT_WRITE_CONDITION));
274 std::get<33>(evals) += (tmp * scaling_factor);
275 }
276 {
277 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
278 auto tmp = static_cast<View>(in.get(C::sha256_sel_invalid_state_tag_err)) *
279 (FF(1) - static_cast<View>(in.get(C::sha256_sel_invalid_state_tag_err)));
280 std::get<34>(evals) += (tmp * scaling_factor);
281 }
282 { // BATCH_ZERO_CHECK_READ
283 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
284 auto tmp = (CView(sha256_STATE_READ_CONDITION) * CView(sha256_BATCHED_TAG_CHECK) *
285 ((FF(1) - static_cast<View>(in.get(C::sha256_sel_invalid_state_tag_err))) *
286 (FF(1) - static_cast<View>(in.get(C::sha256_batch_tag_inv))) +
287 static_cast<View>(in.get(C::sha256_batch_tag_inv))) -
288 static_cast<View>(in.get(C::sha256_sel_invalid_state_tag_err)));
289 std::get<35>(evals) += (tmp * scaling_factor);
290 }
291 { // BATCH_ENFORCE_ZERO_WRITE
292 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
293 auto tmp = CView(sha256_OUTPUT_WRITE_CONDITION) * CView(sha256_BATCHED_TAG_CHECK);
294 std::get<36>(evals) += (tmp * scaling_factor);
295 }
296 { // INPUT_ROUND_CTR_START_COND
297 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
298 auto tmp = static_cast<View>(in.get(C::sha256_start)) *
299 (static_cast<View>(in.get(C::sha256_input_rounds_rem)) - FF(16));
300 std::get<37>(evals) += (tmp * scaling_factor);
301 }
302 { // INPUT_ROUND_CTR_DECR_COND
303 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
304 auto tmp = CView(sha256_NOT_END) * (static_cast<View>(in.get(C::sha256_input_rounds_rem_shift)) -
305 (static_cast<View>(in.get(C::sha256_input_rounds_rem)) -
306 static_cast<View>(in.get(C::sha256_sel_is_input_round))));
307 std::get<38>(evals) += (tmp * scaling_factor);
308 }
309 {
310 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
311 auto tmp = static_cast<View>(in.get(C::sha256_sel_is_input_round)) *
312 (FF(1) - static_cast<View>(in.get(C::sha256_sel_is_input_round)));
313 std::get<39>(evals) += (tmp * scaling_factor);
314 }
315 { // SEL_IS_INPUT_ROUND_ZERO_CHECK
316 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
317 auto tmp = (static_cast<View>(in.get(C::sha256_input_rounds_rem)) *
318 ((FF(1) - static_cast<View>(in.get(C::sha256_sel_is_input_round))) *
319 (FF(1) - static_cast<View>(in.get(C::sha256_input_rounds_rem_inv))) +
320 static_cast<View>(in.get(C::sha256_input_rounds_rem_inv))) -
321 static_cast<View>(in.get(C::sha256_sel_is_input_round)));
322 std::get<40>(evals) += (tmp * scaling_factor);
323 }
324 {
325 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
326 auto tmp = (static_cast<View>(in.get(C::sha256_sel_read_input_from_memory)) -
327 static_cast<View>(in.get(C::sha256_sel)) *
328 ((FF(1) - static_cast<View>(in.get(C::sha256_mem_out_of_range_err))) -
329 static_cast<View>(in.get(C::sha256_sel_invalid_state_tag_err))) *
330 static_cast<View>(in.get(C::sha256_sel_is_input_round)));
331 std::get<41>(evals) += (tmp * scaling_factor);
332 }
333 {
334 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
335 auto tmp = static_cast<View>(in.get(C::sha256_sel_read_input_from_memory)) *
336 (static_cast<View>(in.get(C::sha256_input)) - static_cast<View>(in.get(C::sha256_w)));
337 std::get<42>(evals) += (tmp * scaling_factor);
338 }
339 {
340 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
341 auto tmp = static_cast<View>(in.get(C::sha256_sel_invalid_input_tag_err)) *
342 (FF(1) - static_cast<View>(in.get(C::sha256_sel_invalid_input_tag_err)));
343 std::get<43>(evals) += (tmp * scaling_factor);
344 }
345 {
346 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
347 auto tmp = static_cast<View>(in.get(C::sha256_sel_invalid_input_row_tag_err)) *
348 (FF(1) - static_cast<View>(in.get(C::sha256_sel_invalid_input_row_tag_err)));
349 std::get<44>(evals) += (tmp * scaling_factor);
350 }
351 { // INPUT_TAG_DIFF_CHECK
352 using View = typename std::tuple_element_t<45, ContainerOverSubrelations>::View;
353 auto tmp = (CView(sha256_INPUT_TAG_DIFF) *
354 ((FF(1) - static_cast<View>(in.get(C::sha256_sel_invalid_input_row_tag_err))) *
355 (FF(1) - static_cast<View>(in.get(C::sha256_input_tag_diff_inv))) +
356 static_cast<View>(in.get(C::sha256_input_tag_diff_inv))) -
357 static_cast<View>(in.get(C::sha256_sel_invalid_input_row_tag_err)));
358 std::get<45>(evals) += (tmp * scaling_factor);
359 }
360 {
361 using View = typename std::tuple_element_t<46, ContainerOverSubrelations>::View;
362 auto tmp = CView(sha256_END_ON_ERROR) * (static_cast<View>(in.get(C::sha256_end)) - FF(1));
363 std::get<46>(evals) += (tmp * scaling_factor);
364 }
365 { // TAG_ERROR_INIT
366 using View = typename std::tuple_element_t<47, ContainerOverSubrelations>::View;
367 auto tmp = CView(sha256_LATCH_CONDITION) * (static_cast<View>(in.get(C::sha256_sel_invalid_input_tag_err)) -
368 static_cast<View>(in.get(C::sha256_sel_invalid_input_row_tag_err)));
369 std::get<47>(evals) += (tmp * scaling_factor);
370 }
371 { // TAG_ERROR_PROPAGATION
372 using View = typename std::tuple_element_t<48, ContainerOverSubrelations>::View;
373 auto tmp = (FF(1) - CView(sha256_LATCH_CONDITION)) *
374 (static_cast<View>(in.get(C::sha256_sel_invalid_input_tag_err)) -
375 static_cast<View>(in.get(C::sha256_sel_invalid_input_tag_err_shift)));
376 std::get<48>(evals) += (tmp * scaling_factor);
377 }
378 {
379 using View = typename std::tuple_element_t<49, ContainerOverSubrelations>::View;
380 auto tmp = (static_cast<View>(in.get(C::sha256_err)) -
381 (static_cast<View>(in.get(C::sha256_mem_out_of_range_err)) +
382 static_cast<View>(in.get(C::sha256_sel_invalid_state_tag_err)) +
383 static_cast<View>(in.get(C::sha256_sel_invalid_input_tag_err))));
384 std::get<49>(evals) += (tmp * scaling_factor);
385 }
386}
387
388} // 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.