28 tmp *= scaling_factor;
29 std::get<0>(evals) +=
typename Accumulator::View(tmp);
33 auto tmp = in.get(C::poseidon2_hash_sel) * (
FF(1) - poseidon2_hash_LATCH_CONDITION) *
34 (in.get(C::poseidon2_hash_output_shift) - in.get(C::poseidon2_hash_output));
35 tmp *= scaling_factor;
36 std::get<1>(evals) +=
typename Accumulator::View(tmp);
40 auto tmp = in.get(C::poseidon2_hash_start) * (
FF(1) - in.get(C::poseidon2_hash_start));
41 tmp *= scaling_factor;
42 std::get<2>(evals) +=
typename Accumulator::View(tmp);
46 auto tmp = in.get(C::poseidon2_hash_sel_shift) *
47 (in.get(C::poseidon2_hash_start_shift) - poseidon2_hash_LATCH_CONDITION);
48 tmp *= scaling_factor;
49 std::get<3>(evals) +=
typename Accumulator::View(tmp);
53 auto tmp = in.get(C::poseidon2_hash_end) * (
FF(1) - in.get(C::poseidon2_hash_end));
54 tmp *= scaling_factor;
55 std::get<4>(evals) +=
typename Accumulator::View(tmp);
59 auto tmp = in.get(C::poseidon2_hash_end) * in.get(C::precomputed_first_row);
60 tmp *= scaling_factor;
61 std::get<5>(evals) +=
typename Accumulator::View(tmp);
65 auto tmp = in.get(C::poseidon2_hash_padding) * (in.get(C::poseidon2_hash_padding) -
FF(1)) *
66 (in.get(C::poseidon2_hash_padding) -
FF(2));
67 tmp *= scaling_factor;
68 std::get<6>(evals) +=
typename Accumulator::View(tmp);
72 auto tmp = in.get(C::poseidon2_hash_sel) * in.get(C::poseidon2_hash_start) *
73 (in.get(C::poseidon2_hash_num_perm_rounds_rem) *
FF(3) - poseidon2_hash_PADDED_LEN);
74 tmp *= scaling_factor;
75 std::get<7>(evals) +=
typename Accumulator::View(tmp);
80 in.get(C::poseidon2_hash_sel) * (
FF(1) - poseidon2_hash_LATCH_CONDITION) *
81 ((in.get(C::poseidon2_hash_num_perm_rounds_rem_shift) - in.get(C::poseidon2_hash_num_perm_rounds_rem)) +
83 tmp *= scaling_factor;
84 std::get<8>(evals) +=
typename Accumulator::View(tmp);
88 auto tmp = in.get(C::poseidon2_hash_sel) *
89 ((poseidon2_hash_NEXT_ROUND_COUNT *
90 (in.get(C::poseidon2_hash_end) * (
FF(1) - in.get(C::poseidon2_hash_num_perm_rounds_rem_inv)) +
91 in.get(C::poseidon2_hash_num_perm_rounds_rem_inv)) -
93 in.get(C::poseidon2_hash_end));
94 tmp *= scaling_factor;
95 std::get<9>(evals) +=
typename Accumulator::View(tmp);
99 auto tmp = in.get(C::poseidon2_hash_sel) * in.get(C::poseidon2_hash_start) *
100 (in.get(C::poseidon2_hash_a_0) - in.get(C::poseidon2_hash_input_0));
101 tmp *= scaling_factor;
106 auto tmp = in.get(C::poseidon2_hash_sel) * (
FF(1) - poseidon2_hash_LATCH_CONDITION) *
107 ((in.get(C::poseidon2_hash_a_0_shift) - in.get(C::poseidon2_hash_b_0)) -
108 in.get(C::poseidon2_hash_input_0_shift));
109 tmp *= scaling_factor;
114 auto tmp = in.get(C::poseidon2_hash_sel) * in.get(C::poseidon2_hash_start) *
115 (in.get(C::poseidon2_hash_a_1) - in.get(C::poseidon2_hash_input_1));
116 tmp *= scaling_factor;
121 auto tmp = in.get(C::poseidon2_hash_sel) * (
FF(1) - poseidon2_hash_LATCH_CONDITION) *
122 ((in.get(C::poseidon2_hash_a_1_shift) - in.get(C::poseidon2_hash_b_1)) -
123 in.get(C::poseidon2_hash_input_1_shift));
124 tmp *= scaling_factor;
129 auto tmp = in.get(C::poseidon2_hash_sel) * in.get(C::poseidon2_hash_start) *
130 (in.get(C::poseidon2_hash_a_2) - in.get(C::poseidon2_hash_input_2));
131 tmp *= scaling_factor;
136 auto tmp = in.get(C::poseidon2_hash_sel) * (
FF(1) - poseidon2_hash_LATCH_CONDITION) *
137 ((in.get(C::poseidon2_hash_a_2_shift) - in.get(C::poseidon2_hash_b_2)) -
138 in.get(C::poseidon2_hash_input_2_shift));
139 tmp *= scaling_factor;
144 auto tmp = in.get(C::poseidon2_hash_sel) * in.get(C::poseidon2_hash_start) *
145 (in.get(C::poseidon2_hash_a_3) - poseidon2_hash_IV);
146 tmp *= scaling_factor;
151 auto tmp = in.get(C::poseidon2_hash_sel) * (
FF(1) - poseidon2_hash_LATCH_CONDITION) *
152 (in.get(C::poseidon2_hash_a_3_shift) - in.get(C::poseidon2_hash_b_3));
153 tmp *= scaling_factor;
158 auto tmp = in.get(C::poseidon2_hash_sel) * poseidon2_hash_LATCH_CONDITION *
159 (in.get(C::poseidon2_hash_output) - in.get(C::poseidon2_hash_b_0));
160 tmp *= scaling_factor;