114 {
115 const int32_t f0 = f[0];
116 const int32_t f1 = f[1];
117 const int32_t f2 = f[2];
118 const int32_t f3 = f[3];
119 const int32_t f4 = f[4];
120 const int32_t f5 = f[5];
121 const int32_t f6 = f[6];
122 const int32_t f7 = f[7];
123 const int32_t f8 = f[8];
124 const int32_t f9 = f[9];
125
126 const int32_t g0 = g[0];
127 const int32_t g1 = g[1];
128 const int32_t g2 = g[2];
129 const int32_t g3 = g[3];
130 const int32_t g4 = g[4];
131 const int32_t g5 = g[5];
132 const int32_t g6 = g[6];
133 const int32_t g7 = g[7];
134 const int32_t g8 = g[8];
135 const int32_t g9 = g[9];
136
137 const int32_t g1_19 = 19 * g1;
138 const int32_t g2_19 = 19 * g2;
139 const int32_t g3_19 = 19 * g3;
140 const int32_t g4_19 = 19 * g4;
141 const int32_t g5_19 = 19 * g5;
142 const int32_t g6_19 = 19 * g6;
143 const int32_t g7_19 = 19 * g7;
144 const int32_t g8_19 = 19 * g8;
145 const int32_t g9_19 = 19 * g9;
146 const int32_t f1_2 = 2 * f1;
147 const int32_t f3_2 = 2 * f3;
148 const int32_t f5_2 = 2 * f5;
149 const int32_t f7_2 = 2 * f7;
150 const int32_t f9_2 = 2 * f9;
151
152 const int64_t f0g0 = f0 * static_cast<int64_t>(g0);
153 const int64_t f0g1 = f0 * static_cast<int64_t>(g1);
154 const int64_t f0g2 = f0 * static_cast<int64_t>(g2);
155 const int64_t f0g3 = f0 * static_cast<int64_t>(g3);
156 const int64_t f0g4 = f0 * static_cast<int64_t>(g4);
157 const int64_t f0g5 = f0 * static_cast<int64_t>(g5);
158 const int64_t f0g6 = f0 * static_cast<int64_t>(g6);
159 const int64_t f0g7 = f0 * static_cast<int64_t>(g7);
160 const int64_t f0g8 = f0 * static_cast<int64_t>(g8);
161 const int64_t f0g9 = f0 * static_cast<int64_t>(g9);
162 const int64_t f1g0 = f1 * static_cast<int64_t>(g0);
163 const int64_t f1g1_2 = f1_2 * static_cast<int64_t>(g1);
164 const int64_t f1g2 = f1 * static_cast<int64_t>(g2);
165 const int64_t f1g3_2 = f1_2 * static_cast<int64_t>(g3);
166 const int64_t f1g4 = f1 * static_cast<int64_t>(g4);
167 const int64_t f1g5_2 = f1_2 * static_cast<int64_t>(g5);
168 const int64_t f1g6 = f1 * static_cast<int64_t>(g6);
169 const int64_t f1g7_2 = f1_2 * static_cast<int64_t>(g7);
170 const int64_t f1g8 = f1 * static_cast<int64_t>(g8);
171 const int64_t f1g9_38 = f1_2 * static_cast<int64_t>(g9_19);
172 const int64_t f2g0 = f2 * static_cast<int64_t>(g0);
173 const int64_t f2g1 = f2 * static_cast<int64_t>(g1);
174 const int64_t f2g2 = f2 * static_cast<int64_t>(g2);
175 const int64_t f2g3 = f2 * static_cast<int64_t>(g3);
176 const int64_t f2g4 = f2 * static_cast<int64_t>(g4);
177 const int64_t f2g5 = f2 * static_cast<int64_t>(g5);
178 const int64_t f2g6 = f2 * static_cast<int64_t>(g6);
179 const int64_t f2g7 = f2 * static_cast<int64_t>(g7);
180 const int64_t f2g8_19 = f2 * static_cast<int64_t>(g8_19);
181 const int64_t f2g9_19 = f2 * static_cast<int64_t>(g9_19);
182 const int64_t f3g0 = f3 * static_cast<int64_t>(g0);
183 const int64_t f3g1_2 = f3_2 * static_cast<int64_t>(g1);
184 const int64_t f3g2 = f3 * static_cast<int64_t>(g2);
185 const int64_t f3g3_2 = f3_2 * static_cast<int64_t>(g3);
186 const int64_t f3g4 = f3 * static_cast<int64_t>(g4);
187 const int64_t f3g5_2 = f3_2 * static_cast<int64_t>(g5);
188 const int64_t f3g6 = f3 * static_cast<int64_t>(g6);
189 const int64_t f3g7_38 = f3_2 * static_cast<int64_t>(g7_19);
190 const int64_t f3g8_19 = f3 * static_cast<int64_t>(g8_19);
191 const int64_t f3g9_38 = f3_2 * static_cast<int64_t>(g9_19);
192 const int64_t f4g0 = f4 * static_cast<int64_t>(g0);
193 const int64_t f4g1 = f4 * static_cast<int64_t>(g1);
194 const int64_t f4g2 = f4 * static_cast<int64_t>(g2);
195 const int64_t f4g3 = f4 * static_cast<int64_t>(g3);
196 const int64_t f4g4 = f4 * static_cast<int64_t>(g4);
197 const int64_t f4g5 = f4 * static_cast<int64_t>(g5);
198 const int64_t f4g6_19 = f4 * static_cast<int64_t>(g6_19);
199 const int64_t f4g7_19 = f4 * static_cast<int64_t>(g7_19);
200 const int64_t f4g8_19 = f4 * static_cast<int64_t>(g8_19);
201 const int64_t f4g9_19 = f4 * static_cast<int64_t>(g9_19);
202 const int64_t f5g0 = f5 * static_cast<int64_t>(g0);
203 const int64_t f5g1_2 = f5_2 * static_cast<int64_t>(g1);
204 const int64_t f5g2 = f5 * static_cast<int64_t>(g2);
205 const int64_t f5g3_2 = f5_2 * static_cast<int64_t>(g3);
206 const int64_t f5g4 = f5 * static_cast<int64_t>(g4);
207 const int64_t f5g5_38 = f5_2 * static_cast<int64_t>(g5_19);
208 const int64_t f5g6_19 = f5 * static_cast<int64_t>(g6_19);
209 const int64_t f5g7_38 = f5_2 * static_cast<int64_t>(g7_19);
210 const int64_t f5g8_19 = f5 * static_cast<int64_t>(g8_19);
211 const int64_t f5g9_38 = f5_2 * static_cast<int64_t>(g9_19);
212 const int64_t f6g0 = f6 * static_cast<int64_t>(g0);
213 const int64_t f6g1 = f6 * static_cast<int64_t>(g1);
214 const int64_t f6g2 = f6 * static_cast<int64_t>(g2);
215 const int64_t f6g3 = f6 * static_cast<int64_t>(g3);
216 const int64_t f6g4_19 = f6 * static_cast<int64_t>(g4_19);
217 const int64_t f6g5_19 = f6 * static_cast<int64_t>(g5_19);
218 const int64_t f6g6_19 = f6 * static_cast<int64_t>(g6_19);
219 const int64_t f6g7_19 = f6 * static_cast<int64_t>(g7_19);
220 const int64_t f6g8_19 = f6 * static_cast<int64_t>(g8_19);
221 const int64_t f6g9_19 = f6 * static_cast<int64_t>(g9_19);
222 const int64_t f7g0 = f7 * static_cast<int64_t>(g0);
223 const int64_t f7g1_2 = f7_2 * static_cast<int64_t>(g1);
224 const int64_t f7g2 = f7 * static_cast<int64_t>(g2);
225 const int64_t f7g3_38 = f7_2 * static_cast<int64_t>(g3_19);
226 const int64_t f7g4_19 = f7 * static_cast<int64_t>(g4_19);
227 const int64_t f7g5_38 = f7_2 * static_cast<int64_t>(g5_19);
228 const int64_t f7g6_19 = f7 * static_cast<int64_t>(g6_19);
229 const int64_t f7g7_38 = f7_2 * static_cast<int64_t>(g7_19);
230 const int64_t f7g8_19 = f7 * static_cast<int64_t>(g8_19);
231 const int64_t f7g9_38 = f7_2 * static_cast<int64_t>(g9_19);
232 const int64_t f8g0 = f8 * static_cast<int64_t>(g0);
233 const int64_t f8g1 = f8 * static_cast<int64_t>(g1);
234 const int64_t f8g2_19 = f8 * static_cast<int64_t>(g2_19);
235 const int64_t f8g3_19 = f8 * static_cast<int64_t>(g3_19);
236 const int64_t f8g4_19 = f8 * static_cast<int64_t>(g4_19);
237 const int64_t f8g5_19 = f8 * static_cast<int64_t>(g5_19);
238 const int64_t f8g6_19 = f8 * static_cast<int64_t>(g6_19);
239 const int64_t f8g7_19 = f8 * static_cast<int64_t>(g7_19);
240 const int64_t f8g8_19 = f8 * static_cast<int64_t>(g8_19);
241 const int64_t f8g9_19 = f8 * static_cast<int64_t>(g9_19);
242 const int64_t f9g0 = f9 * static_cast<int64_t>(g0);
243 const int64_t f9g1_38 = f9_2 * static_cast<int64_t>(g1_19);
244 const int64_t f9g2_19 = f9 * static_cast<int64_t>(g2_19);
245 const int64_t f9g3_38 = f9_2 * static_cast<int64_t>(g3_19);
246 const int64_t f9g4_19 = f9 * static_cast<int64_t>(g4_19);
247 const int64_t f9g5_38 = f9_2 * static_cast<int64_t>(g5_19);
248 const int64_t f9g6_19 = f9 * static_cast<int64_t>(g6_19);
249 const int64_t f9g7_38 = f9_2 * static_cast<int64_t>(g7_19);
250 const int64_t f9g8_19 = f9 * static_cast<int64_t>(g8_19);
251 const int64_t f9g9_38 = f9_2 * static_cast<int64_t>(g9_19);
252
253 int64_t h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38;
254 int64_t h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19;
255 int64_t h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38;
256 int64_t h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19;
257 int64_t h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38;
258 int64_t h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19;
259 int64_t h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38;
260 int64_t h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19;
261 int64_t h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38;
262 int64_t h9 = f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0;
263
264
265
266
267
268
269
272
273
274
275
276
277
280
281
282
283
284
285
288
289
290
291
292
295
296
297
298
299
302
303
304
305
306
308
309
310
311
313
314
315
316 return FE_25519(h0, h1, h2, h3, h4, h5, h6, h7, h8, h9);
317}