97 if (src_out_of_range) {
100 if (dst_out_of_range) {
114 src_mem_values[k] = mem_val;
121 format(
"Read slice tag invalid - addr: ", addr,
" tag: ",
static_cast<uint32_t
>(
tag)));
131 state_input_values[k % 5][k / 5] = src_mem_values[k];
140 for (
size_t i = 0; i < 5; ++i) {
141 MemoryValue xor_accumulator = state_input_values[i][0];
142 for (
size_t j = 0; j < 4; ++j) {
143 xor_accumulator =
bitwise.xor_op(xor_accumulator, state_input_values[i][j + 1]);
144 theta_xor_values[i][j] = xor_accumulator;
150 for (
size_t i = 0; i < 5; ++i) {
151 theta_xor_row_rotl1_values.at(i) = unconstrained_rotate_left(theta_xor_values[i][3], 1);
156 for (
size_t i = 0; i < 5; ++i) {
157 theta_combined_xor_values.at(i) =
158 bitwise.xor_op(theta_xor_values[(i + 4) % 5][3], theta_xor_row_rotl1_values.at((i + 1) % 5));
163 for (
size_t i = 0; i < 5; ++i) {
164 for (
size_t j = 0; j < 5; ++j) {
165 state_theta_values[i][j] =
166 bitwise.xor_op(state_input_values[i][j], theta_combined_xor_values.at(i));
177 for (
size_t i = 0; i < 5; ++i) {
178 for (
size_t j = 0; j < 5; ++j) {
181 state_rho_values[i][j] = unconstrained_rotate_left(state_theta_values[i][j],
len);
182 if (
len > 0 &&
len <= 32) {
183 range_check.assert_range(state_theta_values[i][j].as<uint64_t>() >> (64 -
len),
len);
184 }
else if (
len > 32) {
185 range_check.assert_range(state_theta_values[i][j].as<uint64_t>() & ((1ULL << (64 -
len)) - 1),
195 for (
size_t i = 0; i < 5; ++i) {
196 for (
size_t j = 0; j < 5; ++j) {
198 state_pi_not_values[i][j] = ~state_pi_values[i][j];
206 for (
size_t i = 0; i < 5; ++i) {
207 for (
size_t j = 0; j < 5; ++j) {
208 state_pi_and_values[i][j] =
209 bitwise.and_op(state_pi_not_values[(i + 1) % 5][j], state_pi_values[(i + 2) % 5][j]);
210 state_chi_values[i][j] =
bitwise.xor_op(state_pi_values[i][j], state_pi_and_values[i][j]);
219 rounds_data.at(round_idx) = {
220 .state = two_dim_array_to_uint64(state_input_values),
221 .theta_xor = two_dim_array_to_uint64(theta_xor_values),
222 .theta_xor_row_rotl1 = array_to_uint64(theta_xor_row_rotl1_values),
223 .theta_combined_xor = array_to_uint64(theta_combined_xor_values),
224 .state_theta = two_dim_array_to_uint64(state_theta_values),
225 .state_rho = two_dim_array_to_uint64(state_rho_values),
226 .state_pi_not = two_dim_array_to_uint64(state_pi_not_values),
227 .state_pi_and = two_dim_array_to_uint64(state_pi_and_values),
228 .state_chi = two_dim_array_to_uint64(state_chi_values),
229 .state_iota_00 = iota_00_value.
as<uint64_t>(),
232 state_input_values = state_chi_values;
233 state_input_values[0][0] = iota_00_value;
237 for (
size_t i = 0; i < 5; i++) {
238 for (
size_t j = 0; j < 5; j++) {
243 keccakf1600_event.
rounds = rounds_data;