Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
keccakf1600_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 keccakf1600Impl<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_HIGHEST_MEM_ADDRESS = FF(4294967295UL);
20 const auto constants_AVM_BITWISE_AND_OP_ID = FF(0);
21 const auto constants_AVM_BITWISE_XOR_OP_ID = FF(2);
22 const auto constants_AVM_KECCAKF1600_STATE_SIZE = FF(25);
23 const auto keccakf1600_ROT_LEN_01 = FF(36);
24 const auto keccakf1600_POW_ROT_LEN_01 = FF(68719476736UL);
25 const auto keccakf1600_POW_ROT_64_MIN_LEN_01 = FF(268435456);
26 const auto keccakf1600_ROT_LEN_02 = FF(3);
27 const auto keccakf1600_POW_ROT_LEN_02 = FF(8);
28 const auto keccakf1600_POW_ROT_64_MIN_LEN_02 = FF(2305843009213693952UL);
29 const auto keccakf1600_ROT_LEN_03 = FF(41);
30 const auto keccakf1600_POW_ROT_LEN_03 = FF(2199023255552UL);
31 const auto keccakf1600_POW_ROT_64_MIN_LEN_03 = FF(8388608);
32 const auto keccakf1600_ROT_LEN_04 = FF(18);
33 const auto keccakf1600_POW_ROT_LEN_04 = FF(262144);
34 const auto keccakf1600_POW_ROT_64_MIN_LEN_04 = FF(70368744177664UL);
35 const auto keccakf1600_ROT_LEN_10 = FF(1);
36 const auto keccakf1600_POW_ROT_LEN_10 = FF(2);
37 const auto keccakf1600_POW_ROT_64_MIN_LEN_10 = FF(uint256_t{ 9223372036854775808UL, 0UL, 0UL, 0UL });
38 const auto keccakf1600_ROT_LEN_11 = FF(44);
39 const auto keccakf1600_POW_ROT_LEN_11 = FF(17592186044416UL);
40 const auto keccakf1600_POW_ROT_64_MIN_LEN_11 = FF(1048576);
41 const auto keccakf1600_ROT_LEN_12 = FF(10);
42 const auto keccakf1600_POW_ROT_LEN_12 = FF(1024);
43 const auto keccakf1600_POW_ROT_64_MIN_LEN_12 = FF(18014398509481984UL);
44 const auto keccakf1600_ROT_LEN_13 = FF(45);
45 const auto keccakf1600_POW_ROT_LEN_13 = FF(35184372088832UL);
46 const auto keccakf1600_POW_ROT_64_MIN_LEN_13 = FF(524288);
47 const auto keccakf1600_ROT_LEN_14 = FF(2);
48 const auto keccakf1600_POW_ROT_LEN_14 = FF(4);
49 const auto keccakf1600_POW_ROT_64_MIN_LEN_14 = FF(4611686018427387904UL);
50 const auto keccakf1600_ROT_LEN_20 = FF(62);
51 const auto keccakf1600_POW_ROT_LEN_20 = FF(4611686018427387904UL);
52 const auto keccakf1600_POW_ROT_64_MIN_LEN_20 = FF(4);
53 const auto keccakf1600_ROT_LEN_21 = FF(6);
54 const auto keccakf1600_POW_ROT_LEN_21 = FF(64);
55 const auto keccakf1600_POW_ROT_64_MIN_LEN_21 = FF(288230376151711744UL);
56 const auto keccakf1600_ROT_LEN_22 = FF(43);
57 const auto keccakf1600_POW_ROT_LEN_22 = FF(8796093022208UL);
58 const auto keccakf1600_POW_ROT_64_MIN_LEN_22 = FF(2097152);
59 const auto keccakf1600_ROT_LEN_23 = FF(15);
60 const auto keccakf1600_POW_ROT_LEN_23 = FF(32768);
61 const auto keccakf1600_POW_ROT_64_MIN_LEN_23 = FF(562949953421312UL);
62 const auto keccakf1600_ROT_LEN_24 = FF(61);
63 const auto keccakf1600_POW_ROT_LEN_24 = FF(2305843009213693952UL);
64 const auto keccakf1600_POW_ROT_64_MIN_LEN_24 = FF(8);
65 const auto keccakf1600_ROT_LEN_30 = FF(28);
66 const auto keccakf1600_POW_ROT_LEN_30 = FF(268435456);
67 const auto keccakf1600_POW_ROT_64_MIN_LEN_30 = FF(68719476736UL);
68 const auto keccakf1600_ROT_LEN_31 = FF(55);
69 const auto keccakf1600_POW_ROT_LEN_31 = FF(36028797018963968UL);
70 const auto keccakf1600_POW_ROT_64_MIN_LEN_31 = FF(512);
71 const auto keccakf1600_ROT_LEN_32 = FF(25);
72 const auto keccakf1600_POW_ROT_LEN_32 = FF(33554432);
73 const auto keccakf1600_POW_ROT_64_MIN_LEN_32 = FF(549755813888UL);
74 const auto keccakf1600_ROT_LEN_33 = FF(21);
75 const auto keccakf1600_POW_ROT_LEN_33 = FF(2097152);
76 const auto keccakf1600_POW_ROT_64_MIN_LEN_33 = FF(8796093022208UL);
77 const auto keccakf1600_ROT_LEN_34 = FF(56);
78 const auto keccakf1600_POW_ROT_LEN_34 = FF(72057594037927936UL);
79 const auto keccakf1600_POW_ROT_64_MIN_LEN_34 = FF(256);
80 const auto keccakf1600_ROT_LEN_40 = FF(27);
81 const auto keccakf1600_POW_ROT_LEN_40 = FF(134217728);
82 const auto keccakf1600_POW_ROT_64_MIN_LEN_40 = FF(137438953472UL);
83 const auto keccakf1600_ROT_LEN_41 = FF(20);
84 const auto keccakf1600_POW_ROT_LEN_41 = FF(1048576);
85 const auto keccakf1600_POW_ROT_64_MIN_LEN_41 = FF(17592186044416UL);
86 const auto keccakf1600_ROT_LEN_42 = FF(39);
87 const auto keccakf1600_POW_ROT_LEN_42 = FF(549755813888UL);
88 const auto keccakf1600_POW_ROT_64_MIN_LEN_42 = FF(33554432);
89 const auto keccakf1600_ROT_LEN_43 = FF(8);
90 const auto keccakf1600_POW_ROT_LEN_43 = FF(256);
91 const auto keccakf1600_POW_ROT_64_MIN_LEN_43 = FF(72057594037927936UL);
92 const auto keccakf1600_ROT_LEN_44 = FF(14);
93 const auto keccakf1600_POW_ROT_LEN_44 = FF(16384);
94 const auto keccakf1600_POW_ROT_64_MIN_LEN_44 = FF(1125899906842624UL);
95 const auto keccakf1600_STATE_RHO_00 = in.get(C::keccakf1600_state_theta_00);
96 const auto keccakf1600_STATE_PI_00 = keccakf1600_STATE_RHO_00;
97 const auto keccakf1600_STATE_PI_01 = in.get(C::keccakf1600_state_rho_30);
98 const auto keccakf1600_STATE_PI_02 = in.get(C::keccakf1600_state_rho_10);
99 const auto keccakf1600_STATE_PI_03 = in.get(C::keccakf1600_state_rho_40);
100 const auto keccakf1600_STATE_PI_04 = in.get(C::keccakf1600_state_rho_20);
101 const auto keccakf1600_STATE_PI_10 = in.get(C::keccakf1600_state_rho_11);
102 const auto keccakf1600_STATE_PI_11 = in.get(C::keccakf1600_state_rho_41);
103 const auto keccakf1600_STATE_PI_12 = in.get(C::keccakf1600_state_rho_21);
104 const auto keccakf1600_STATE_PI_13 = in.get(C::keccakf1600_state_rho_01);
105 const auto keccakf1600_STATE_PI_14 = in.get(C::keccakf1600_state_rho_31);
106 const auto keccakf1600_STATE_PI_20 = in.get(C::keccakf1600_state_rho_22);
107 const auto keccakf1600_STATE_PI_21 = in.get(C::keccakf1600_state_rho_02);
108 const auto keccakf1600_STATE_PI_22 = in.get(C::keccakf1600_state_rho_32);
109 const auto keccakf1600_STATE_PI_23 = in.get(C::keccakf1600_state_rho_12);
110 const auto keccakf1600_STATE_PI_24 = in.get(C::keccakf1600_state_rho_42);
111 const auto keccakf1600_STATE_PI_30 = in.get(C::keccakf1600_state_rho_33);
112 const auto keccakf1600_STATE_PI_31 = in.get(C::keccakf1600_state_rho_13);
113 const auto keccakf1600_STATE_PI_32 = in.get(C::keccakf1600_state_rho_43);
114 const auto keccakf1600_STATE_PI_33 = in.get(C::keccakf1600_state_rho_23);
115 const auto keccakf1600_STATE_PI_34 = in.get(C::keccakf1600_state_rho_03);
116 const auto keccakf1600_STATE_PI_40 = in.get(C::keccakf1600_state_rho_44);
117 const auto keccakf1600_STATE_PI_41 = in.get(C::keccakf1600_state_rho_24);
118 const auto keccakf1600_STATE_PI_42 = in.get(C::keccakf1600_state_rho_04);
119 const auto keccakf1600_STATE_PI_43 = in.get(C::keccakf1600_state_rho_34);
120 const auto keccakf1600_STATE_PI_44 = in.get(C::keccakf1600_state_rho_14);
121 const auto keccakf1600_POW_64_MIN_1 = FF(uint256_t{ 18446744073709551615UL, 0UL, 0UL, 0UL });
122 const auto keccakf1600_HIGHEST_SLICE_ADDRESS =
123 (constants_AVM_HIGHEST_MEM_ADDRESS - constants_AVM_KECCAKF1600_STATE_SIZE) + FF(1);
124
125 {
126 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
127 auto tmp =
128 static_cast<View>(in.get(C::keccakf1600_sel)) * (FF(1) - static_cast<View>(in.get(C::keccakf1600_sel)));
129 std::get<0>(evals) += (tmp * scaling_factor);
130 }
131 { // SEL_NO_ERROR
132 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
133 auto tmp = static_cast<View>(in.get(C::keccakf1600_start)) *
134 ((static_cast<View>(in.get(C::keccakf1600_sel_no_error)) - FF(1)) +
135 static_cast<View>(in.get(C::keccakf1600_error)));
136 std::get<1>(evals) += (tmp * scaling_factor);
137 }
138 {
139 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
140 auto tmp =
141 static_cast<View>(in.get(C::keccakf1600_start)) * (FF(1) - static_cast<View>(in.get(C::keccakf1600_start)));
142 std::get<2>(evals) += (tmp * scaling_factor);
143 }
144 {
145 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
146 auto tmp =
147 static_cast<View>(in.get(C::keccakf1600_start)) * (static_cast<View>(in.get(C::keccakf1600_round)) - FF(1));
148 std::get<3>(evals) += (tmp * scaling_factor);
149 }
150 { // KECCAK_SEL_ROUND_NON_ZERO
151 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
152 auto tmp = (static_cast<View>(in.get(C::keccakf1600_round)) *
153 ((FF(1) - static_cast<View>(in.get(C::keccakf1600_sel))) *
154 (FF(1) - static_cast<View>(in.get(C::keccakf1600_round_inv))) +
155 static_cast<View>(in.get(C::keccakf1600_round_inv))) -
156 static_cast<View>(in.get(C::keccakf1600_sel)));
157 std::get<4>(evals) += (tmp * scaling_factor);
158 }
159 { // KECCAK_ROUND_INCREMENT
160 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
161 auto tmp =
162 static_cast<View>(in.get(C::keccakf1600_sel)) * (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
163 ((static_cast<View>(in.get(C::keccakf1600_round_shift)) - static_cast<View>(in.get(C::keccakf1600_round))) -
164 FF(1));
165 std::get<5>(evals) += (tmp * scaling_factor);
166 }
167 {
168 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
169 auto tmp =
170 static_cast<View>(in.get(C::keccakf1600_last)) * (FF(1) - static_cast<View>(in.get(C::keccakf1600_last)));
171 std::get<6>(evals) += (tmp * scaling_factor);
172 }
173 {
174 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
175 auto tmp =
176 static_cast<View>(in.get(C::keccakf1600_sel)) *
177 (static_cast<View>(in.get(C::keccakf1600_bitwise_xor_op_id)) - CView(constants_AVM_BITWISE_XOR_OP_ID));
178 std::get<7>(evals) += (tmp * scaling_factor);
179 }
180 {
181 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
182 auto tmp =
183 static_cast<View>(in.get(C::keccakf1600_sel)) *
184 (static_cast<View>(in.get(C::keccakf1600_bitwise_and_op_id)) - CView(constants_AVM_BITWISE_AND_OP_ID));
185 std::get<8>(evals) += (tmp * scaling_factor);
186 }
187 {
188 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
189 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
190 (static_cast<View>(in.get(C::keccakf1600_tag_u64)) - CView(constants_MEM_TAG_U64));
191 std::get<9>(evals) += (tmp * scaling_factor);
192 }
193 { // THETA_XOR_ROW_MSB_0_BOOLEAN
194 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
195 auto tmp = static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_0)) *
196 (FF(1) - static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_0)));
197 std::get<10>(evals) += (tmp * scaling_factor);
198 }
199 { // THETA_XOR_ROW_0_DECOMPOSITION
200 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
201 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_0)) -
202 (FF(uint256_t{ 9223372036854775808UL, 0UL, 0UL, 0UL }) *
203 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_0)) +
204 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_0))));
205 std::get<11>(evals) += (tmp * scaling_factor);
206 }
207 { // THETA_XOR_ROW_ROTL1_0
208 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
209 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_rotl1_0)) -
210 (FF(2) * static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_0)) +
211 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_0))));
212 std::get<12>(evals) += (tmp * scaling_factor);
213 }
214 { // THETA_XOR_ROW_MSB_1_BOOLEAN
215 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
216 auto tmp = static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_1)) *
217 (FF(1) - static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_1)));
218 std::get<13>(evals) += (tmp * scaling_factor);
219 }
220 { // THETA_XOR_ROW_1_DECOMPOSITION
221 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
222 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_1)) -
223 (FF(uint256_t{ 9223372036854775808UL, 0UL, 0UL, 0UL }) *
224 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_1)) +
225 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_1))));
226 std::get<14>(evals) += (tmp * scaling_factor);
227 }
228 { // THETA_XOR_ROW_ROTL1_1
229 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
230 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_rotl1_1)) -
231 (FF(2) * static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_1)) +
232 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_1))));
233 std::get<15>(evals) += (tmp * scaling_factor);
234 }
235 { // THETA_XOR_ROW_MSB_2_BOOLEAN
236 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
237 auto tmp = static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_2)) *
238 (FF(1) - static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_2)));
239 std::get<16>(evals) += (tmp * scaling_factor);
240 }
241 { // THETA_XOR_ROW_2_DECOMPOSITION
242 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
243 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_2)) -
244 (FF(uint256_t{ 9223372036854775808UL, 0UL, 0UL, 0UL }) *
245 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_2)) +
246 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_2))));
247 std::get<17>(evals) += (tmp * scaling_factor);
248 }
249 { // THETA_XOR_ROW_ROTL1_2
250 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
251 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_rotl1_2)) -
252 (FF(2) * static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_2)) +
253 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_2))));
254 std::get<18>(evals) += (tmp * scaling_factor);
255 }
256 { // THETA_XOR_ROW_MSB_3_BOOLEAN
257 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
258 auto tmp = static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_3)) *
259 (FF(1) - static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_3)));
260 std::get<19>(evals) += (tmp * scaling_factor);
261 }
262 { // THETA_XOR_ROW_3_DECOMPOSITION
263 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
264 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_3)) -
265 (FF(uint256_t{ 9223372036854775808UL, 0UL, 0UL, 0UL }) *
266 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_3)) +
267 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_3))));
268 std::get<20>(evals) += (tmp * scaling_factor);
269 }
270 { // THETA_XOR_ROW_ROTL1_3
271 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
272 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_rotl1_3)) -
273 (FF(2) * static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_3)) +
274 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_3))));
275 std::get<21>(evals) += (tmp * scaling_factor);
276 }
277 { // THETA_XOR_ROW_MSB_4_BOOLEAN
278 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
279 auto tmp = static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_4)) *
280 (FF(1) - static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_4)));
281 std::get<22>(evals) += (tmp * scaling_factor);
282 }
283 { // THETA_XOR_ROW_4_DECOMPOSITION
284 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
285 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_4)) -
286 (FF(uint256_t{ 9223372036854775808UL, 0UL, 0UL, 0UL }) *
287 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_4)) +
288 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_4))));
289 std::get<23>(evals) += (tmp * scaling_factor);
290 }
291 { // THETA_XOR_ROW_ROTL1_4
292 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
293 auto tmp = (static_cast<View>(in.get(C::keccakf1600_theta_xor_row_rotl1_4)) -
294 (FF(2) * static_cast<View>(in.get(C::keccakf1600_theta_xor_row_low63_4)) +
295 static_cast<View>(in.get(C::keccakf1600_theta_xor_row_msb_4))));
296 std::get<24>(evals) += (tmp * scaling_factor);
297 }
298 { // STATE_THETA_01_DECOMPOSE
299 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
300 auto tmp =
301 (static_cast<View>(in.get(C::keccakf1600_state_theta_01)) -
302 (CView(keccakf1600_POW_ROT_64_MIN_LEN_01) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_01)) +
303 static_cast<View>(in.get(C::keccakf1600_state_theta_low_01))));
304 std::get<25>(evals) += (tmp * scaling_factor);
305 }
306 { // STATE_RHO_01
307 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
308 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_01)) -
309 (CView(keccakf1600_POW_ROT_LEN_01) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_01)) +
310 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_01))));
311 std::get<26>(evals) += (tmp * scaling_factor);
312 }
313 { // STATE_THETA_02_DECOMPOSE
314 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
315 auto tmp =
316 (static_cast<View>(in.get(C::keccakf1600_state_theta_02)) -
317 (CView(keccakf1600_POW_ROT_64_MIN_LEN_02) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_02)) +
318 static_cast<View>(in.get(C::keccakf1600_state_theta_low_02))));
319 std::get<27>(evals) += (tmp * scaling_factor);
320 }
321 { // STATE_RHO_02
322 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
323 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_02)) -
324 (CView(keccakf1600_POW_ROT_LEN_02) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_02)) +
325 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_02))));
326 std::get<28>(evals) += (tmp * scaling_factor);
327 }
328 { // STATE_THETA_03_DECOMPOSE
329 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
330 auto tmp =
331 (static_cast<View>(in.get(C::keccakf1600_state_theta_03)) -
332 (CView(keccakf1600_POW_ROT_64_MIN_LEN_03) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_03)) +
333 static_cast<View>(in.get(C::keccakf1600_state_theta_low_03))));
334 std::get<29>(evals) += (tmp * scaling_factor);
335 }
336 { // STATE_RHO_03
337 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
338 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_03)) -
339 (CView(keccakf1600_POW_ROT_LEN_03) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_03)) +
340 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_03))));
341 std::get<30>(evals) += (tmp * scaling_factor);
342 }
343 { // STATE_THETA_04_DECOMPOSE
344 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
345 auto tmp =
346 (static_cast<View>(in.get(C::keccakf1600_state_theta_04)) -
347 (CView(keccakf1600_POW_ROT_64_MIN_LEN_04) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_04)) +
348 static_cast<View>(in.get(C::keccakf1600_state_theta_low_04))));
349 std::get<31>(evals) += (tmp * scaling_factor);
350 }
351 { // STATE_RHO_04
352 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
353 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_04)) -
354 (CView(keccakf1600_POW_ROT_LEN_04) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_04)) +
355 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_04))));
356 std::get<32>(evals) += (tmp * scaling_factor);
357 }
358 { // STATE_THETA_10_DECOMPOSE
359 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
360 auto tmp =
361 (static_cast<View>(in.get(C::keccakf1600_state_theta_10)) -
362 (CView(keccakf1600_POW_ROT_64_MIN_LEN_10) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_10)) +
363 static_cast<View>(in.get(C::keccakf1600_state_theta_low_10))));
364 std::get<33>(evals) += (tmp * scaling_factor);
365 }
366 { // STATE_RHO_10
367 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
368 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_10)) -
369 (CView(keccakf1600_POW_ROT_LEN_10) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_10)) +
370 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_10))));
371 std::get<34>(evals) += (tmp * scaling_factor);
372 }
373 { // STATE_THETA_11_DECOMPOSE
374 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
375 auto tmp =
376 (static_cast<View>(in.get(C::keccakf1600_state_theta_11)) -
377 (CView(keccakf1600_POW_ROT_64_MIN_LEN_11) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_11)) +
378 static_cast<View>(in.get(C::keccakf1600_state_theta_low_11))));
379 std::get<35>(evals) += (tmp * scaling_factor);
380 }
381 { // STATE_RHO_11
382 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
383 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_11)) -
384 (CView(keccakf1600_POW_ROT_LEN_11) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_11)) +
385 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_11))));
386 std::get<36>(evals) += (tmp * scaling_factor);
387 }
388 { // STATE_THETA_12_DECOMPOSE
389 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
390 auto tmp =
391 (static_cast<View>(in.get(C::keccakf1600_state_theta_12)) -
392 (CView(keccakf1600_POW_ROT_64_MIN_LEN_12) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_12)) +
393 static_cast<View>(in.get(C::keccakf1600_state_theta_low_12))));
394 std::get<37>(evals) += (tmp * scaling_factor);
395 }
396 { // STATE_RHO_12
397 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
398 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_12)) -
399 (CView(keccakf1600_POW_ROT_LEN_12) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_12)) +
400 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_12))));
401 std::get<38>(evals) += (tmp * scaling_factor);
402 }
403 { // STATE_THETA_13_DECOMPOSE
404 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
405 auto tmp =
406 (static_cast<View>(in.get(C::keccakf1600_state_theta_13)) -
407 (CView(keccakf1600_POW_ROT_64_MIN_LEN_13) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_13)) +
408 static_cast<View>(in.get(C::keccakf1600_state_theta_low_13))));
409 std::get<39>(evals) += (tmp * scaling_factor);
410 }
411 { // STATE_RHO_13
412 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
413 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_13)) -
414 (CView(keccakf1600_POW_ROT_LEN_13) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_13)) +
415 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_13))));
416 std::get<40>(evals) += (tmp * scaling_factor);
417 }
418 { // STATE_THETA_14_DECOMPOSE
419 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
420 auto tmp =
421 (static_cast<View>(in.get(C::keccakf1600_state_theta_14)) -
422 (CView(keccakf1600_POW_ROT_64_MIN_LEN_14) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_14)) +
423 static_cast<View>(in.get(C::keccakf1600_state_theta_low_14))));
424 std::get<41>(evals) += (tmp * scaling_factor);
425 }
426 { // STATE_RHO_14
427 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
428 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_14)) -
429 (CView(keccakf1600_POW_ROT_LEN_14) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_14)) +
430 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_14))));
431 std::get<42>(evals) += (tmp * scaling_factor);
432 }
433 { // STATE_THETA_20_DECOMPOSE
434 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
435 auto tmp =
436 (static_cast<View>(in.get(C::keccakf1600_state_theta_20)) -
437 (CView(keccakf1600_POW_ROT_64_MIN_LEN_20) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_20)) +
438 static_cast<View>(in.get(C::keccakf1600_state_theta_low_20))));
439 std::get<43>(evals) += (tmp * scaling_factor);
440 }
441 { // STATE_RHO_20
442 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
443 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_20)) -
444 (CView(keccakf1600_POW_ROT_LEN_20) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_20)) +
445 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_20))));
446 std::get<44>(evals) += (tmp * scaling_factor);
447 }
448 { // STATE_THETA_21_DECOMPOSE
449 using View = typename std::tuple_element_t<45, ContainerOverSubrelations>::View;
450 auto tmp =
451 (static_cast<View>(in.get(C::keccakf1600_state_theta_21)) -
452 (CView(keccakf1600_POW_ROT_64_MIN_LEN_21) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_21)) +
453 static_cast<View>(in.get(C::keccakf1600_state_theta_low_21))));
454 std::get<45>(evals) += (tmp * scaling_factor);
455 }
456 { // STATE_RHO_21
457 using View = typename std::tuple_element_t<46, ContainerOverSubrelations>::View;
458 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_21)) -
459 (CView(keccakf1600_POW_ROT_LEN_21) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_21)) +
460 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_21))));
461 std::get<46>(evals) += (tmp * scaling_factor);
462 }
463 { // STATE_THETA_22_DECOMPOSE
464 using View = typename std::tuple_element_t<47, ContainerOverSubrelations>::View;
465 auto tmp =
466 (static_cast<View>(in.get(C::keccakf1600_state_theta_22)) -
467 (CView(keccakf1600_POW_ROT_64_MIN_LEN_22) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_22)) +
468 static_cast<View>(in.get(C::keccakf1600_state_theta_low_22))));
469 std::get<47>(evals) += (tmp * scaling_factor);
470 }
471 { // STATE_RHO_22
472 using View = typename std::tuple_element_t<48, ContainerOverSubrelations>::View;
473 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_22)) -
474 (CView(keccakf1600_POW_ROT_LEN_22) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_22)) +
475 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_22))));
476 std::get<48>(evals) += (tmp * scaling_factor);
477 }
478 { // STATE_THETA_23_DECOMPOSE
479 using View = typename std::tuple_element_t<49, ContainerOverSubrelations>::View;
480 auto tmp =
481 (static_cast<View>(in.get(C::keccakf1600_state_theta_23)) -
482 (CView(keccakf1600_POW_ROT_64_MIN_LEN_23) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_23)) +
483 static_cast<View>(in.get(C::keccakf1600_state_theta_low_23))));
484 std::get<49>(evals) += (tmp * scaling_factor);
485 }
486 { // STATE_RHO_23
487 using View = typename std::tuple_element_t<50, ContainerOverSubrelations>::View;
488 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_23)) -
489 (CView(keccakf1600_POW_ROT_LEN_23) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_23)) +
490 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_23))));
491 std::get<50>(evals) += (tmp * scaling_factor);
492 }
493 { // STATE_THETA_24_DECOMPOSE
494 using View = typename std::tuple_element_t<51, ContainerOverSubrelations>::View;
495 auto tmp =
496 (static_cast<View>(in.get(C::keccakf1600_state_theta_24)) -
497 (CView(keccakf1600_POW_ROT_64_MIN_LEN_24) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_24)) +
498 static_cast<View>(in.get(C::keccakf1600_state_theta_low_24))));
499 std::get<51>(evals) += (tmp * scaling_factor);
500 }
501 { // STATE_RHO_24
502 using View = typename std::tuple_element_t<52, ContainerOverSubrelations>::View;
503 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_24)) -
504 (CView(keccakf1600_POW_ROT_LEN_24) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_24)) +
505 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_24))));
506 std::get<52>(evals) += (tmp * scaling_factor);
507 }
508 { // STATE_THETA_30_DECOMPOSE
509 using View = typename std::tuple_element_t<53, ContainerOverSubrelations>::View;
510 auto tmp =
511 (static_cast<View>(in.get(C::keccakf1600_state_theta_30)) -
512 (CView(keccakf1600_POW_ROT_64_MIN_LEN_30) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_30)) +
513 static_cast<View>(in.get(C::keccakf1600_state_theta_low_30))));
514 std::get<53>(evals) += (tmp * scaling_factor);
515 }
516 { // STATE_RHO_30
517 using View = typename std::tuple_element_t<54, ContainerOverSubrelations>::View;
518 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_30)) -
519 (CView(keccakf1600_POW_ROT_LEN_30) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_30)) +
520 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_30))));
521 std::get<54>(evals) += (tmp * scaling_factor);
522 }
523 { // STATE_THETA_31_DECOMPOSE
524 using View = typename std::tuple_element_t<55, ContainerOverSubrelations>::View;
525 auto tmp =
526 (static_cast<View>(in.get(C::keccakf1600_state_theta_31)) -
527 (CView(keccakf1600_POW_ROT_64_MIN_LEN_31) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_31)) +
528 static_cast<View>(in.get(C::keccakf1600_state_theta_low_31))));
529 std::get<55>(evals) += (tmp * scaling_factor);
530 }
531 { // STATE_RHO_31
532 using View = typename std::tuple_element_t<56, ContainerOverSubrelations>::View;
533 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_31)) -
534 (CView(keccakf1600_POW_ROT_LEN_31) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_31)) +
535 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_31))));
536 std::get<56>(evals) += (tmp * scaling_factor);
537 }
538 { // STATE_THETA_32_DECOMPOSE
539 using View = typename std::tuple_element_t<57, ContainerOverSubrelations>::View;
540 auto tmp =
541 (static_cast<View>(in.get(C::keccakf1600_state_theta_32)) -
542 (CView(keccakf1600_POW_ROT_64_MIN_LEN_32) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_32)) +
543 static_cast<View>(in.get(C::keccakf1600_state_theta_low_32))));
544 std::get<57>(evals) += (tmp * scaling_factor);
545 }
546 { // STATE_RHO_32
547 using View = typename std::tuple_element_t<58, ContainerOverSubrelations>::View;
548 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_32)) -
549 (CView(keccakf1600_POW_ROT_LEN_32) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_32)) +
550 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_32))));
551 std::get<58>(evals) += (tmp * scaling_factor);
552 }
553 { // STATE_THETA_33_DECOMPOSE
554 using View = typename std::tuple_element_t<59, ContainerOverSubrelations>::View;
555 auto tmp =
556 (static_cast<View>(in.get(C::keccakf1600_state_theta_33)) -
557 (CView(keccakf1600_POW_ROT_64_MIN_LEN_33) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_33)) +
558 static_cast<View>(in.get(C::keccakf1600_state_theta_low_33))));
559 std::get<59>(evals) += (tmp * scaling_factor);
560 }
561 { // STATE_RHO_33
562 using View = typename std::tuple_element_t<60, ContainerOverSubrelations>::View;
563 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_33)) -
564 (CView(keccakf1600_POW_ROT_LEN_33) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_33)) +
565 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_33))));
566 std::get<60>(evals) += (tmp * scaling_factor);
567 }
568 { // STATE_THETA_34_DECOMPOSE
569 using View = typename std::tuple_element_t<61, ContainerOverSubrelations>::View;
570 auto tmp =
571 (static_cast<View>(in.get(C::keccakf1600_state_theta_34)) -
572 (CView(keccakf1600_POW_ROT_64_MIN_LEN_34) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_34)) +
573 static_cast<View>(in.get(C::keccakf1600_state_theta_low_34))));
574 std::get<61>(evals) += (tmp * scaling_factor);
575 }
576 { // STATE_RHO_34
577 using View = typename std::tuple_element_t<62, ContainerOverSubrelations>::View;
578 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_34)) -
579 (CView(keccakf1600_POW_ROT_LEN_34) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_34)) +
580 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_34))));
581 std::get<62>(evals) += (tmp * scaling_factor);
582 }
583 { // STATE_THETA_40_DECOMPOSE
584 using View = typename std::tuple_element_t<63, ContainerOverSubrelations>::View;
585 auto tmp =
586 (static_cast<View>(in.get(C::keccakf1600_state_theta_40)) -
587 (CView(keccakf1600_POW_ROT_64_MIN_LEN_40) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_40)) +
588 static_cast<View>(in.get(C::keccakf1600_state_theta_low_40))));
589 std::get<63>(evals) += (tmp * scaling_factor);
590 }
591 { // STATE_RHO_40
592 using View = typename std::tuple_element_t<64, ContainerOverSubrelations>::View;
593 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_40)) -
594 (CView(keccakf1600_POW_ROT_LEN_40) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_40)) +
595 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_40))));
596 std::get<64>(evals) += (tmp * scaling_factor);
597 }
598 { // STATE_THETA_41_DECOMPOSE
599 using View = typename std::tuple_element_t<65, ContainerOverSubrelations>::View;
600 auto tmp =
601 (static_cast<View>(in.get(C::keccakf1600_state_theta_41)) -
602 (CView(keccakf1600_POW_ROT_64_MIN_LEN_41) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_41)) +
603 static_cast<View>(in.get(C::keccakf1600_state_theta_low_41))));
604 std::get<65>(evals) += (tmp * scaling_factor);
605 }
606 { // STATE_RHO_41
607 using View = typename std::tuple_element_t<66, ContainerOverSubrelations>::View;
608 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_41)) -
609 (CView(keccakf1600_POW_ROT_LEN_41) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_41)) +
610 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_41))));
611 std::get<66>(evals) += (tmp * scaling_factor);
612 }
613 { // STATE_THETA_42_DECOMPOSE
614 using View = typename std::tuple_element_t<67, ContainerOverSubrelations>::View;
615 auto tmp =
616 (static_cast<View>(in.get(C::keccakf1600_state_theta_42)) -
617 (CView(keccakf1600_POW_ROT_64_MIN_LEN_42) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_42)) +
618 static_cast<View>(in.get(C::keccakf1600_state_theta_low_42))));
619 std::get<67>(evals) += (tmp * scaling_factor);
620 }
621 { // STATE_RHO_42
622 using View = typename std::tuple_element_t<68, ContainerOverSubrelations>::View;
623 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_42)) -
624 (CView(keccakf1600_POW_ROT_LEN_42) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_42)) +
625 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_42))));
626 std::get<68>(evals) += (tmp * scaling_factor);
627 }
628 { // STATE_THETA_43_DECOMPOSE
629 using View = typename std::tuple_element_t<69, ContainerOverSubrelations>::View;
630 auto tmp =
631 (static_cast<View>(in.get(C::keccakf1600_state_theta_43)) -
632 (CView(keccakf1600_POW_ROT_64_MIN_LEN_43) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_43)) +
633 static_cast<View>(in.get(C::keccakf1600_state_theta_low_43))));
634 std::get<69>(evals) += (tmp * scaling_factor);
635 }
636 { // STATE_RHO_43
637 using View = typename std::tuple_element_t<70, ContainerOverSubrelations>::View;
638 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_43)) -
639 (CView(keccakf1600_POW_ROT_LEN_43) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_43)) +
640 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_43))));
641 std::get<70>(evals) += (tmp * scaling_factor);
642 }
643 { // STATE_THETA_44_DECOMPOSE
644 using View = typename std::tuple_element_t<71, ContainerOverSubrelations>::View;
645 auto tmp =
646 (static_cast<View>(in.get(C::keccakf1600_state_theta_44)) -
647 (CView(keccakf1600_POW_ROT_64_MIN_LEN_44) * static_cast<View>(in.get(C::keccakf1600_state_theta_hi_44)) +
648 static_cast<View>(in.get(C::keccakf1600_state_theta_low_44))));
649 std::get<71>(evals) += (tmp * scaling_factor);
650 }
651 { // STATE_RHO_44
652 using View = typename std::tuple_element_t<72, ContainerOverSubrelations>::View;
653 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_rho_44)) -
654 (CView(keccakf1600_POW_ROT_LEN_44) * static_cast<View>(in.get(C::keccakf1600_state_theta_low_44)) +
655 static_cast<View>(in.get(C::keccakf1600_state_theta_hi_44))));
656 std::get<72>(evals) += (tmp * scaling_factor);
657 }
658 {
659 using View = typename std::tuple_element_t<73, ContainerOverSubrelations>::View;
660 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
661 (static_cast<View>(in.get(C::keccakf1600_rot_len_02)) - CView(keccakf1600_ROT_LEN_02));
662 std::get<73>(evals) += (tmp * scaling_factor);
663 }
664 {
665 using View = typename std::tuple_element_t<74, ContainerOverSubrelations>::View;
666 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
667 (static_cast<View>(in.get(C::keccakf1600_rot_len_04)) - CView(keccakf1600_ROT_LEN_04));
668 std::get<74>(evals) += (tmp * scaling_factor);
669 }
670 {
671 using View = typename std::tuple_element_t<75, ContainerOverSubrelations>::View;
672 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
673 (static_cast<View>(in.get(C::keccakf1600_rot_len_10)) - CView(keccakf1600_ROT_LEN_10));
674 std::get<75>(evals) += (tmp * scaling_factor);
675 }
676 {
677 using View = typename std::tuple_element_t<76, ContainerOverSubrelations>::View;
678 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
679 (static_cast<View>(in.get(C::keccakf1600_rot_len_12)) - CView(keccakf1600_ROT_LEN_12));
680 std::get<76>(evals) += (tmp * scaling_factor);
681 }
682 {
683 using View = typename std::tuple_element_t<77, ContainerOverSubrelations>::View;
684 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
685 (static_cast<View>(in.get(C::keccakf1600_rot_len_14)) - CView(keccakf1600_ROT_LEN_14));
686 std::get<77>(evals) += (tmp * scaling_factor);
687 }
688 {
689 using View = typename std::tuple_element_t<78, ContainerOverSubrelations>::View;
690 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
691 (static_cast<View>(in.get(C::keccakf1600_rot_len_21)) - CView(keccakf1600_ROT_LEN_21));
692 std::get<78>(evals) += (tmp * scaling_factor);
693 }
694 {
695 using View = typename std::tuple_element_t<79, ContainerOverSubrelations>::View;
696 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
697 (static_cast<View>(in.get(C::keccakf1600_rot_len_23)) - CView(keccakf1600_ROT_LEN_23));
698 std::get<79>(evals) += (tmp * scaling_factor);
699 }
700 {
701 using View = typename std::tuple_element_t<80, ContainerOverSubrelations>::View;
702 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
703 (static_cast<View>(in.get(C::keccakf1600_rot_len_30)) - CView(keccakf1600_ROT_LEN_30));
704 std::get<80>(evals) += (tmp * scaling_factor);
705 }
706 {
707 using View = typename std::tuple_element_t<81, ContainerOverSubrelations>::View;
708 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
709 (static_cast<View>(in.get(C::keccakf1600_rot_len_32)) - CView(keccakf1600_ROT_LEN_32));
710 std::get<81>(evals) += (tmp * scaling_factor);
711 }
712 {
713 using View = typename std::tuple_element_t<82, ContainerOverSubrelations>::View;
714 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
715 (static_cast<View>(in.get(C::keccakf1600_rot_len_33)) - CView(keccakf1600_ROT_LEN_33));
716 std::get<82>(evals) += (tmp * scaling_factor);
717 }
718 {
719 using View = typename std::tuple_element_t<83, ContainerOverSubrelations>::View;
720 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
721 (static_cast<View>(in.get(C::keccakf1600_rot_len_40)) - CView(keccakf1600_ROT_LEN_40));
722 std::get<83>(evals) += (tmp * scaling_factor);
723 }
724 {
725 using View = typename std::tuple_element_t<84, ContainerOverSubrelations>::View;
726 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
727 (static_cast<View>(in.get(C::keccakf1600_rot_len_41)) - CView(keccakf1600_ROT_LEN_41));
728 std::get<84>(evals) += (tmp * scaling_factor);
729 }
730 {
731 using View = typename std::tuple_element_t<85, ContainerOverSubrelations>::View;
732 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
733 (static_cast<View>(in.get(C::keccakf1600_rot_len_43)) - CView(keccakf1600_ROT_LEN_43));
734 std::get<85>(evals) += (tmp * scaling_factor);
735 }
736 {
737 using View = typename std::tuple_element_t<86, ContainerOverSubrelations>::View;
738 auto tmp = static_cast<View>(in.get(C::keccakf1600_sel)) *
739 (static_cast<View>(in.get(C::keccakf1600_rot_len_44)) - CView(keccakf1600_ROT_LEN_44));
740 std::get<86>(evals) += (tmp * scaling_factor);
741 }
742 {
743 using View = typename std::tuple_element_t<87, ContainerOverSubrelations>::View;
744 auto tmp =
745 static_cast<View>(in.get(C::keccakf1600_sel)) *
746 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_01)) - (FF(64) - CView(keccakf1600_ROT_LEN_01)));
747 std::get<87>(evals) += (tmp * scaling_factor);
748 }
749 {
750 using View = typename std::tuple_element_t<88, ContainerOverSubrelations>::View;
751 auto tmp =
752 static_cast<View>(in.get(C::keccakf1600_sel)) *
753 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_03)) - (FF(64) - CView(keccakf1600_ROT_LEN_03)));
754 std::get<88>(evals) += (tmp * scaling_factor);
755 }
756 {
757 using View = typename std::tuple_element_t<89, ContainerOverSubrelations>::View;
758 auto tmp =
759 static_cast<View>(in.get(C::keccakf1600_sel)) *
760 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_11)) - (FF(64) - CView(keccakf1600_ROT_LEN_11)));
761 std::get<89>(evals) += (tmp * scaling_factor);
762 }
763 {
764 using View = typename std::tuple_element_t<90, ContainerOverSubrelations>::View;
765 auto tmp =
766 static_cast<View>(in.get(C::keccakf1600_sel)) *
767 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_13)) - (FF(64) - CView(keccakf1600_ROT_LEN_13)));
768 std::get<90>(evals) += (tmp * scaling_factor);
769 }
770 {
771 using View = typename std::tuple_element_t<91, ContainerOverSubrelations>::View;
772 auto tmp =
773 static_cast<View>(in.get(C::keccakf1600_sel)) *
774 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_20)) - (FF(64) - CView(keccakf1600_ROT_LEN_20)));
775 std::get<91>(evals) += (tmp * scaling_factor);
776 }
777 {
778 using View = typename std::tuple_element_t<92, ContainerOverSubrelations>::View;
779 auto tmp =
780 static_cast<View>(in.get(C::keccakf1600_sel)) *
781 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_22)) - (FF(64) - CView(keccakf1600_ROT_LEN_22)));
782 std::get<92>(evals) += (tmp * scaling_factor);
783 }
784 {
785 using View = typename std::tuple_element_t<93, ContainerOverSubrelations>::View;
786 auto tmp =
787 static_cast<View>(in.get(C::keccakf1600_sel)) *
788 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_24)) - (FF(64) - CView(keccakf1600_ROT_LEN_24)));
789 std::get<93>(evals) += (tmp * scaling_factor);
790 }
791 {
792 using View = typename std::tuple_element_t<94, ContainerOverSubrelations>::View;
793 auto tmp =
794 static_cast<View>(in.get(C::keccakf1600_sel)) *
795 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_31)) - (FF(64) - CView(keccakf1600_ROT_LEN_31)));
796 std::get<94>(evals) += (tmp * scaling_factor);
797 }
798 {
799 using View = typename std::tuple_element_t<95, ContainerOverSubrelations>::View;
800 auto tmp =
801 static_cast<View>(in.get(C::keccakf1600_sel)) *
802 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_34)) - (FF(64) - CView(keccakf1600_ROT_LEN_34)));
803 std::get<95>(evals) += (tmp * scaling_factor);
804 }
805 {
806 using View = typename std::tuple_element_t<96, ContainerOverSubrelations>::View;
807 auto tmp =
808 static_cast<View>(in.get(C::keccakf1600_sel)) *
809 (static_cast<View>(in.get(C::keccakf1600_rot_64_min_len_42)) - (FF(64) - CView(keccakf1600_ROT_LEN_42)));
810 std::get<96>(evals) += (tmp * scaling_factor);
811 }
812 { // STATE_PI_NOT_00
813 using View = typename std::tuple_element_t<97, ContainerOverSubrelations>::View;
814 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_00)) -
815 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
816 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_00)));
817 std::get<97>(evals) += (tmp * scaling_factor);
818 }
819 { // STATE_PI_NOT_01
820 using View = typename std::tuple_element_t<98, ContainerOverSubrelations>::View;
821 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_01)) -
822 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
823 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_01)));
824 std::get<98>(evals) += (tmp * scaling_factor);
825 }
826 { // STATE_PI_NOT_02
827 using View = typename std::tuple_element_t<99, ContainerOverSubrelations>::View;
828 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_02)) -
829 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
830 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_02)));
831 std::get<99>(evals) += (tmp * scaling_factor);
832 }
833 { // STATE_PI_NOT_03
834 using View = typename std::tuple_element_t<100, ContainerOverSubrelations>::View;
835 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_03)) -
836 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
837 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_03)));
838 std::get<100>(evals) += (tmp * scaling_factor);
839 }
840 { // STATE_PI_NOT_04
841 using View = typename std::tuple_element_t<101, ContainerOverSubrelations>::View;
842 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_04)) -
843 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
844 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_04)));
845 std::get<101>(evals) += (tmp * scaling_factor);
846 }
847 { // STATE_PI_NOT_10
848 using View = typename std::tuple_element_t<102, ContainerOverSubrelations>::View;
849 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_10)) -
850 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
851 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_10)));
852 std::get<102>(evals) += (tmp * scaling_factor);
853 }
854 { // STATE_PI_NOT_11
855 using View = typename std::tuple_element_t<103, ContainerOverSubrelations>::View;
856 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_11)) -
857 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
858 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_11)));
859 std::get<103>(evals) += (tmp * scaling_factor);
860 }
861 { // STATE_PI_NOT_12
862 using View = typename std::tuple_element_t<104, ContainerOverSubrelations>::View;
863 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_12)) -
864 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
865 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_12)));
866 std::get<104>(evals) += (tmp * scaling_factor);
867 }
868 { // STATE_PI_NOT_13
869 using View = typename std::tuple_element_t<105, ContainerOverSubrelations>::View;
870 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_13)) -
871 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
872 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_13)));
873 std::get<105>(evals) += (tmp * scaling_factor);
874 }
875 { // STATE_PI_NOT_14
876 using View = typename std::tuple_element_t<106, ContainerOverSubrelations>::View;
877 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_14)) -
878 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
879 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_14)));
880 std::get<106>(evals) += (tmp * scaling_factor);
881 }
882 { // STATE_PI_NOT_20
883 using View = typename std::tuple_element_t<107, ContainerOverSubrelations>::View;
884 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_20)) -
885 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
886 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_20)));
887 std::get<107>(evals) += (tmp * scaling_factor);
888 }
889 { // STATE_PI_NOT_21
890 using View = typename std::tuple_element_t<108, ContainerOverSubrelations>::View;
891 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_21)) -
892 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
893 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_21)));
894 std::get<108>(evals) += (tmp * scaling_factor);
895 }
896 { // STATE_PI_NOT_22
897 using View = typename std::tuple_element_t<109, ContainerOverSubrelations>::View;
898 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_22)) -
899 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
900 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_22)));
901 std::get<109>(evals) += (tmp * scaling_factor);
902 }
903 { // STATE_PI_NOT_23
904 using View = typename std::tuple_element_t<110, ContainerOverSubrelations>::View;
905 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_23)) -
906 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
907 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_23)));
908 std::get<110>(evals) += (tmp * scaling_factor);
909 }
910 { // STATE_PI_NOT_24
911 using View = typename std::tuple_element_t<111, ContainerOverSubrelations>::View;
912 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_24)) -
913 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
914 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_24)));
915 std::get<111>(evals) += (tmp * scaling_factor);
916 }
917 { // STATE_PI_NOT_30
918 using View = typename std::tuple_element_t<112, ContainerOverSubrelations>::View;
919 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_30)) -
920 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
921 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_30)));
922 std::get<112>(evals) += (tmp * scaling_factor);
923 }
924 { // STATE_PI_NOT_31
925 using View = typename std::tuple_element_t<113, ContainerOverSubrelations>::View;
926 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_31)) -
927 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
928 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_31)));
929 std::get<113>(evals) += (tmp * scaling_factor);
930 }
931 { // STATE_PI_NOT_32
932 using View = typename std::tuple_element_t<114, ContainerOverSubrelations>::View;
933 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_32)) -
934 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
935 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_32)));
936 std::get<114>(evals) += (tmp * scaling_factor);
937 }
938 { // STATE_PI_NOT_33
939 using View = typename std::tuple_element_t<115, ContainerOverSubrelations>::View;
940 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_33)) -
941 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
942 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_33)));
943 std::get<115>(evals) += (tmp * scaling_factor);
944 }
945 { // STATE_PI_NOT_34
946 using View = typename std::tuple_element_t<116, ContainerOverSubrelations>::View;
947 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_34)) -
948 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
949 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_34)));
950 std::get<116>(evals) += (tmp * scaling_factor);
951 }
952 { // STATE_PI_NOT_40
953 using View = typename std::tuple_element_t<117, ContainerOverSubrelations>::View;
954 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_40)) -
955 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
956 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_40)));
957 std::get<117>(evals) += (tmp * scaling_factor);
958 }
959 { // STATE_PI_NOT_41
960 using View = typename std::tuple_element_t<118, ContainerOverSubrelations>::View;
961 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_41)) -
962 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
963 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_41)));
964 std::get<118>(evals) += (tmp * scaling_factor);
965 }
966 { // STATE_PI_NOT_42
967 using View = typename std::tuple_element_t<119, ContainerOverSubrelations>::View;
968 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_42)) -
969 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
970 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_42)));
971 std::get<119>(evals) += (tmp * scaling_factor);
972 }
973 { // STATE_PI_NOT_43
974 using View = typename std::tuple_element_t<120, ContainerOverSubrelations>::View;
975 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_43)) -
976 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
977 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_43)));
978 std::get<120>(evals) += (tmp * scaling_factor);
979 }
980 { // STATE_PI_NOT_44
981 using View = typename std::tuple_element_t<121, ContainerOverSubrelations>::View;
982 auto tmp = (static_cast<View>(in.get(C::keccakf1600_state_pi_not_44)) -
983 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) *
984 (CView(keccakf1600_POW_64_MIN_1) - CView(keccakf1600_STATE_PI_44)));
985 std::get<121>(evals) += (tmp * scaling_factor);
986 }
987 { // NEXT_STATE_IN_00
988 using View = typename std::tuple_element_t<122, ContainerOverSubrelations>::View;
989 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
990 (static_cast<View>(in.get(C::keccakf1600_state_in_00_shift)) -
991 static_cast<View>(in.get(C::keccakf1600_state_iota_00)));
992 std::get<122>(evals) += (tmp * scaling_factor);
993 }
994 { // NEXT_STATE_IN_01
995 using View = typename std::tuple_element_t<123, ContainerOverSubrelations>::View;
996 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
997 (static_cast<View>(in.get(C::keccakf1600_state_in_01_shift)) -
998 static_cast<View>(in.get(C::keccakf1600_state_chi_01)));
999 std::get<123>(evals) += (tmp * scaling_factor);
1000 }
1001 { // NEXT_STATE_IN_02
1002 using View = typename std::tuple_element_t<124, ContainerOverSubrelations>::View;
1003 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1004 (static_cast<View>(in.get(C::keccakf1600_state_in_02_shift)) -
1005 static_cast<View>(in.get(C::keccakf1600_state_chi_02)));
1006 std::get<124>(evals) += (tmp * scaling_factor);
1007 }
1008 { // NEXT_STATE_IN_03
1009 using View = typename std::tuple_element_t<125, ContainerOverSubrelations>::View;
1010 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1011 (static_cast<View>(in.get(C::keccakf1600_state_in_03_shift)) -
1012 static_cast<View>(in.get(C::keccakf1600_state_chi_03)));
1013 std::get<125>(evals) += (tmp * scaling_factor);
1014 }
1015 { // NEXT_STATE_IN_04
1016 using View = typename std::tuple_element_t<126, ContainerOverSubrelations>::View;
1017 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1018 (static_cast<View>(in.get(C::keccakf1600_state_in_04_shift)) -
1019 static_cast<View>(in.get(C::keccakf1600_state_chi_04)));
1020 std::get<126>(evals) += (tmp * scaling_factor);
1021 }
1022 { // NEXT_STATE_IN_10
1023 using View = typename std::tuple_element_t<127, ContainerOverSubrelations>::View;
1024 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1025 (static_cast<View>(in.get(C::keccakf1600_state_in_10_shift)) -
1026 static_cast<View>(in.get(C::keccakf1600_state_chi_10)));
1027 std::get<127>(evals) += (tmp * scaling_factor);
1028 }
1029 { // NEXT_STATE_IN_11
1030 using View = typename std::tuple_element_t<128, ContainerOverSubrelations>::View;
1031 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1032 (static_cast<View>(in.get(C::keccakf1600_state_in_11_shift)) -
1033 static_cast<View>(in.get(C::keccakf1600_state_chi_11)));
1034 std::get<128>(evals) += (tmp * scaling_factor);
1035 }
1036 { // NEXT_STATE_IN_12
1037 using View = typename std::tuple_element_t<129, ContainerOverSubrelations>::View;
1038 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1039 (static_cast<View>(in.get(C::keccakf1600_state_in_12_shift)) -
1040 static_cast<View>(in.get(C::keccakf1600_state_chi_12)));
1041 std::get<129>(evals) += (tmp * scaling_factor);
1042 }
1043 { // NEXT_STATE_IN_13
1044 using View = typename std::tuple_element_t<130, ContainerOverSubrelations>::View;
1045 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1046 (static_cast<View>(in.get(C::keccakf1600_state_in_13_shift)) -
1047 static_cast<View>(in.get(C::keccakf1600_state_chi_13)));
1048 std::get<130>(evals) += (tmp * scaling_factor);
1049 }
1050 { // NEXT_STATE_IN_14
1051 using View = typename std::tuple_element_t<131, ContainerOverSubrelations>::View;
1052 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1053 (static_cast<View>(in.get(C::keccakf1600_state_in_14_shift)) -
1054 static_cast<View>(in.get(C::keccakf1600_state_chi_14)));
1055 std::get<131>(evals) += (tmp * scaling_factor);
1056 }
1057 { // NEXT_STATE_IN_20
1058 using View = typename std::tuple_element_t<132, ContainerOverSubrelations>::View;
1059 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1060 (static_cast<View>(in.get(C::keccakf1600_state_in_20_shift)) -
1061 static_cast<View>(in.get(C::keccakf1600_state_chi_20)));
1062 std::get<132>(evals) += (tmp * scaling_factor);
1063 }
1064 { // NEXT_STATE_IN_21
1065 using View = typename std::tuple_element_t<133, ContainerOverSubrelations>::View;
1066 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1067 (static_cast<View>(in.get(C::keccakf1600_state_in_21_shift)) -
1068 static_cast<View>(in.get(C::keccakf1600_state_chi_21)));
1069 std::get<133>(evals) += (tmp * scaling_factor);
1070 }
1071 { // NEXT_STATE_IN_22
1072 using View = typename std::tuple_element_t<134, ContainerOverSubrelations>::View;
1073 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1074 (static_cast<View>(in.get(C::keccakf1600_state_in_22_shift)) -
1075 static_cast<View>(in.get(C::keccakf1600_state_chi_22)));
1076 std::get<134>(evals) += (tmp * scaling_factor);
1077 }
1078 { // NEXT_STATE_IN_23
1079 using View = typename std::tuple_element_t<135, ContainerOverSubrelations>::View;
1080 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1081 (static_cast<View>(in.get(C::keccakf1600_state_in_23_shift)) -
1082 static_cast<View>(in.get(C::keccakf1600_state_chi_23)));
1083 std::get<135>(evals) += (tmp * scaling_factor);
1084 }
1085 { // NEXT_STATE_IN_24
1086 using View = typename std::tuple_element_t<136, ContainerOverSubrelations>::View;
1087 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1088 (static_cast<View>(in.get(C::keccakf1600_state_in_24_shift)) -
1089 static_cast<View>(in.get(C::keccakf1600_state_chi_24)));
1090 std::get<136>(evals) += (tmp * scaling_factor);
1091 }
1092 { // NEXT_STATE_IN_30
1093 using View = typename std::tuple_element_t<137, ContainerOverSubrelations>::View;
1094 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1095 (static_cast<View>(in.get(C::keccakf1600_state_in_30_shift)) -
1096 static_cast<View>(in.get(C::keccakf1600_state_chi_30)));
1097 std::get<137>(evals) += (tmp * scaling_factor);
1098 }
1099 { // NEXT_STATE_IN_31
1100 using View = typename std::tuple_element_t<138, ContainerOverSubrelations>::View;
1101 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1102 (static_cast<View>(in.get(C::keccakf1600_state_in_31_shift)) -
1103 static_cast<View>(in.get(C::keccakf1600_state_chi_31)));
1104 std::get<138>(evals) += (tmp * scaling_factor);
1105 }
1106 { // NEXT_STATE_IN_32
1107 using View = typename std::tuple_element_t<139, ContainerOverSubrelations>::View;
1108 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1109 (static_cast<View>(in.get(C::keccakf1600_state_in_32_shift)) -
1110 static_cast<View>(in.get(C::keccakf1600_state_chi_32)));
1111 std::get<139>(evals) += (tmp * scaling_factor);
1112 }
1113 { // NEXT_STATE_IN_33
1114 using View = typename std::tuple_element_t<140, ContainerOverSubrelations>::View;
1115 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1116 (static_cast<View>(in.get(C::keccakf1600_state_in_33_shift)) -
1117 static_cast<View>(in.get(C::keccakf1600_state_chi_33)));
1118 std::get<140>(evals) += (tmp * scaling_factor);
1119 }
1120 { // NEXT_STATE_IN_34
1121 using View = typename std::tuple_element_t<141, ContainerOverSubrelations>::View;
1122 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1123 (static_cast<View>(in.get(C::keccakf1600_state_in_34_shift)) -
1124 static_cast<View>(in.get(C::keccakf1600_state_chi_34)));
1125 std::get<141>(evals) += (tmp * scaling_factor);
1126 }
1127 { // NEXT_STATE_IN_40
1128 using View = typename std::tuple_element_t<142, ContainerOverSubrelations>::View;
1129 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1130 (static_cast<View>(in.get(C::keccakf1600_state_in_40_shift)) -
1131 static_cast<View>(in.get(C::keccakf1600_state_chi_40)));
1132 std::get<142>(evals) += (tmp * scaling_factor);
1133 }
1134 { // NEXT_STATE_IN_41
1135 using View = typename std::tuple_element_t<143, ContainerOverSubrelations>::View;
1136 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1137 (static_cast<View>(in.get(C::keccakf1600_state_in_41_shift)) -
1138 static_cast<View>(in.get(C::keccakf1600_state_chi_41)));
1139 std::get<143>(evals) += (tmp * scaling_factor);
1140 }
1141 { // NEXT_STATE_IN_42
1142 using View = typename std::tuple_element_t<144, ContainerOverSubrelations>::View;
1143 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1144 (static_cast<View>(in.get(C::keccakf1600_state_in_42_shift)) -
1145 static_cast<View>(in.get(C::keccakf1600_state_chi_42)));
1146 std::get<144>(evals) += (tmp * scaling_factor);
1147 }
1148 { // NEXT_STATE_IN_43
1149 using View = typename std::tuple_element_t<145, ContainerOverSubrelations>::View;
1150 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1151 (static_cast<View>(in.get(C::keccakf1600_state_in_43_shift)) -
1152 static_cast<View>(in.get(C::keccakf1600_state_chi_43)));
1153 std::get<145>(evals) += (tmp * scaling_factor);
1154 }
1155 { // NEXT_STATE_IN_44
1156 using View = typename std::tuple_element_t<146, ContainerOverSubrelations>::View;
1157 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1158 (static_cast<View>(in.get(C::keccakf1600_state_in_44_shift)) -
1159 static_cast<View>(in.get(C::keccakf1600_state_chi_44)));
1160 std::get<146>(evals) += (tmp * scaling_factor);
1161 }
1162 {
1163 using View = typename std::tuple_element_t<147, ContainerOverSubrelations>::View;
1164 auto tmp = static_cast<View>(in.get(C::keccakf1600_start)) *
1165 (static_cast<View>(in.get(C::keccakf1600_highest_slice_address)) -
1166 CView(keccakf1600_HIGHEST_SLICE_ADDRESS));
1167 std::get<147>(evals) += (tmp * scaling_factor);
1168 }
1169 { // ERROR
1170 using View = typename std::tuple_element_t<148, ContainerOverSubrelations>::View;
1171 auto tmp = (static_cast<View>(in.get(C::keccakf1600_error)) -
1172 (FF(1) - (FF(1) - static_cast<View>(in.get(C::keccakf1600_src_out_of_range_error))) *
1173 (FF(1) - static_cast<View>(in.get(C::keccakf1600_dst_out_of_range_error))) *
1174 (FF(1) - static_cast<View>(in.get(C::keccakf1600_tag_error)))));
1175 std::get<148>(evals) += (tmp * scaling_factor);
1176 }
1177 { // DST_ADDR_PROPAGATION
1178 using View = typename std::tuple_element_t<149, ContainerOverSubrelations>::View;
1179 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1180 (static_cast<View>(in.get(C::keccakf1600_dst_addr_shift)) -
1181 static_cast<View>(in.get(C::keccakf1600_dst_addr)));
1182 std::get<149>(evals) += (tmp * scaling_factor);
1183 }
1184 { // CLK_PROPAGATION
1185 using View = typename std::tuple_element_t<150, ContainerOverSubrelations>::View;
1186 auto tmp =
1187 (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1188 (static_cast<View>(in.get(C::keccakf1600_clk_shift)) - static_cast<View>(in.get(C::keccakf1600_clk)));
1189 std::get<150>(evals) += (tmp * scaling_factor);
1190 }
1191 { // SPACE_ID_PROPAGATION
1192 using View = typename std::tuple_element_t<151, ContainerOverSubrelations>::View;
1193 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1194 (static_cast<View>(in.get(C::keccakf1600_space_id_shift)) -
1195 static_cast<View>(in.get(C::keccakf1600_space_id)));
1196 std::get<151>(evals) += (tmp * scaling_factor);
1197 }
1198 { // SEL_NO_ERROR_PROPAGATION
1199 using View = typename std::tuple_element_t<152, ContainerOverSubrelations>::View;
1200 auto tmp = (FF(1) - static_cast<View>(in.get(C::keccakf1600_last))) *
1201 (static_cast<View>(in.get(C::keccakf1600_sel_no_error_shift)) -
1202 static_cast<View>(in.get(C::keccakf1600_sel_no_error)));
1203 std::get<152>(evals) += (tmp * scaling_factor);
1204 }
1205 { // SEL_SLICE_READ
1206 using View = typename std::tuple_element_t<153, ContainerOverSubrelations>::View;
1207 auto tmp = (static_cast<View>(in.get(C::keccakf1600_sel_slice_read)) -
1208 static_cast<View>(in.get(C::keccakf1600_start)) *
1209 (FF(1) - static_cast<View>(in.get(C::keccakf1600_src_out_of_range_error))) *
1210 (FF(1) - static_cast<View>(in.get(C::keccakf1600_dst_out_of_range_error))));
1211 std::get<153>(evals) += (tmp * scaling_factor);
1212 }
1213 { // SEL_SLICE_WRITE
1214 using View = typename std::tuple_element_t<154, ContainerOverSubrelations>::View;
1215 auto tmp =
1216 (static_cast<View>(in.get(C::keccakf1600_sel_slice_write)) -
1217 static_cast<View>(in.get(C::keccakf1600_sel_no_error)) * static_cast<View>(in.get(C::keccakf1600_last)));
1218 std::get<154>(evals) += (tmp * scaling_factor);
1219 }
1220}
1221
1222} // 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.