32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
41 #if (X448_SUPPORT == ENABLED || ED448_SUPPORT == ENABLED)
58 for(i = 1; i < 16; i++)
78 r[0] = temp & 0x0FFFFFFF;
79 temp =
ASR32(temp, 28);
81 r[1] = temp & 0x0FFFFFFF;
82 temp =
ASR32(temp, 28);
84 r[2] = temp & 0x0FFFFFFF;
85 temp =
ASR32(temp, 28);
87 r[3] = temp & 0x0FFFFFFF;
88 temp =
ASR32(temp, 28);
90 r[4] = temp & 0x0FFFFFFF;
91 temp =
ASR32(temp, 28);
93 r[5] = temp & 0x0FFFFFFF;
94 temp =
ASR32(temp, 28);
96 r[6] = temp & 0x0FFFFFFF;
97 temp =
ASR32(temp, 28);
99 r[7] = temp & 0x0FFFFFFF;
100 temp =
ASR32(temp, 28);
102 r[8] = temp & 0x0FFFFFFF;
103 temp =
ASR32(temp, 28);
105 r[9] = temp & 0x0FFFFFFF;
106 temp =
ASR32(temp, 28);
107 temp +=
a[10] +
b[10];
108 r[10] = temp & 0x0FFFFFFF;
109 temp =
ASR32(temp, 28);
110 temp +=
a[11] +
b[11];
111 r[11] = temp & 0x0FFFFFFF;
112 temp =
ASR32(temp, 28);
113 temp +=
a[12] +
b[12];
114 r[12] = temp & 0x0FFFFFFF;
115 temp =
ASR32(temp, 28);
116 temp +=
a[13] +
b[13];
117 r[13] = temp & 0x0FFFFFFF;
118 temp =
ASR32(temp, 28);
119 temp +=
a[14] +
b[14];
120 r[14] = temp & 0x0FFFFFFF;
121 temp =
ASR32(temp, 28);
122 temp +=
a[15] +
b[15];
123 r[15] = temp & 0x0FFFFFFF;
124 temp =
ASR32(temp, 28);
145 for(temp =
b, i = 0; i < 16; i++)
148 r[i] = temp & 0x0FFFFFFF;
149 temp =
ASR32(temp, 28);
171 r[0] = temp & 0x0FFFFFFF;
172 temp =
ASR32(temp, 28);
174 r[1] = temp & 0x0FFFFFFF;
175 temp =
ASR32(temp, 28);
177 r[2] = temp & 0x0FFFFFFF;
178 temp =
ASR32(temp, 28);
180 r[3] = temp & 0x0FFFFFFF;
181 temp =
ASR32(temp, 28);
183 r[4] = temp & 0x0FFFFFFF;
184 temp =
ASR32(temp, 28);
186 r[5] = temp & 0x0FFFFFFF;
187 temp =
ASR32(temp, 28);
189 r[6] = temp & 0x0FFFFFFF;
190 temp =
ASR32(temp, 28);
192 r[7] = temp & 0x0FFFFFFF;
193 temp =
ASR32(temp, 28);
195 r[8] = temp & 0x0FFFFFFF;
196 temp =
ASR32(temp, 28);
198 r[9] = temp & 0x0FFFFFFF;
199 temp =
ASR32(temp, 28);
200 temp +=
a[10] -
b[10];
201 r[10] = temp & 0x0FFFFFFF;
202 temp =
ASR32(temp, 28);
203 temp +=
a[11] -
b[11];
204 r[11] = temp & 0x0FFFFFFF;
205 temp =
ASR32(temp, 28);
206 temp +=
a[12] -
b[12];
207 r[12] = temp & 0x0FFFFFFF;
208 temp =
ASR32(temp, 28);
209 temp +=
a[13] -
b[13];
210 r[13] = temp & 0x0FFFFFFF;
211 temp =
ASR32(temp, 28);
212 temp +=
a[14] -
b[14];
213 r[14] = temp & 0x0FFFFFFF;
214 temp =
ASR32(temp, 28);
215 temp +=
a[15] -
b[15];
216 r[15] = temp & 0x0FFFFFFF;
217 temp =
ASR32(temp, 28);
238 for(temp = -
b, i = 0; i < 16; i++)
241 r[i] = temp & 0x0FFFFFFF;
242 temp =
ASR32(temp, 28);
263 acc = (int64_t)
a[0] *
b[0];
264 r[0] = acc & 0x0FFFFFFF;
265 acc =
ASR64(acc, 28);
266 acc += (int64_t)
a[0] *
b[1];
267 acc += (int64_t)
a[1] *
b[0];
268 r[1] = acc & 0x0FFFFFFF;
269 acc =
ASR64(acc, 28);
270 acc += (int64_t)
a[0] *
b[2];
271 acc += (int64_t)
a[1] *
b[1];
272 acc += (int64_t)
a[2] *
b[0];
273 r[2] = acc & 0x0FFFFFFF;
274 acc =
ASR64(acc, 28);
275 acc += (int64_t)
a[0] *
b[3];
276 acc += (int64_t)
a[1] *
b[2];
277 acc += (int64_t)
a[2] *
b[1];
278 acc += (int64_t)
a[3] *
b[0];
279 r[3] = acc & 0x0FFFFFFF;
280 acc =
ASR64(acc, 28);
281 acc += (int64_t)
a[0] *
b[4];
282 acc += (int64_t)
a[1] *
b[3];
283 acc += (int64_t)
a[2] *
b[2];
284 acc += (int64_t)
a[3] *
b[1];
285 acc += (int64_t)
a[4] *
b[0];
286 r[4] = acc & 0x0FFFFFFF;
287 acc =
ASR64(acc, 28);
288 acc += (int64_t)
a[0] *
b[5];
289 acc += (int64_t)
a[1] *
b[4];
290 acc += (int64_t)
a[2] *
b[3];
291 acc += (int64_t)
a[3] *
b[2];
292 acc += (int64_t)
a[4] *
b[1];
293 acc += (int64_t)
a[5] *
b[0];
294 r[5] = acc & 0x0FFFFFFF;
295 acc =
ASR64(acc, 28);
296 acc += (int64_t)
a[0] *
b[6];
297 acc += (int64_t)
a[1] *
b[5];
298 acc += (int64_t)
a[2] *
b[4];
299 acc += (int64_t)
a[3] *
b[3];
300 acc += (int64_t)
a[4] *
b[2];
301 acc += (int64_t)
a[5] *
b[1];
302 acc += (int64_t)
a[6] *
b[0];
303 r[6] = acc & 0x0FFFFFFF;
304 acc =
ASR64(acc, 28);
305 acc += (int64_t)
a[0] *
b[7];
306 acc += (int64_t)
a[1] *
b[6];
307 acc += (int64_t)
a[2] *
b[5];
308 acc += (int64_t)
a[3] *
b[4];
309 acc += (int64_t)
a[4] *
b[3];
310 acc += (int64_t)
a[5] *
b[2];
311 acc += (int64_t)
a[6] *
b[1];
312 acc += (int64_t)
a[7] *
b[0];
313 r[7] = acc & 0x0FFFFFFF;
314 acc =
ASR64(acc, 28);
315 acc += (int64_t)
a[1] *
b[7];
316 acc += (int64_t)
a[2] *
b[6];
317 acc += (int64_t)
a[3] *
b[5];
318 acc += (int64_t)
a[4] *
b[4];
319 acc += (int64_t)
a[5] *
b[3];
320 acc += (int64_t)
a[6] *
b[2];
321 acc += (int64_t)
a[7] *
b[1];
322 r[8] = acc & 0x0FFFFFFF;
323 acc =
ASR64(acc, 28);
324 acc += (int64_t)
a[2] *
b[7];
325 acc += (int64_t)
a[3] *
b[6];
326 acc += (int64_t)
a[4] *
b[5];
327 acc += (int64_t)
a[5] *
b[4];
328 acc += (int64_t)
a[6] *
b[3];
329 acc += (int64_t)
a[7] *
b[2];
330 r[9] = acc & 0x0FFFFFFF;
331 acc =
ASR64(acc, 28);
332 acc += (int64_t)
a[3] *
b[7];
333 acc += (int64_t)
a[4] *
b[6];
334 acc += (int64_t)
a[5] *
b[5];
335 acc += (int64_t)
a[6] *
b[4];
336 acc += (int64_t)
a[7] *
b[3];
337 r[10] = acc & 0x0FFFFFFF;
338 acc =
ASR64(acc, 28);
339 acc += (int64_t)
a[4] *
b[7];
340 acc += (int64_t)
a[5] *
b[6];
341 acc += (int64_t)
a[6] *
b[5];
342 acc += (int64_t)
a[7] *
b[4];
343 r[11] = acc & 0x0FFFFFFF;
344 acc =
ASR64(acc, 28);
345 acc += (int64_t)
a[5] *
b[7];
346 acc += (int64_t)
a[6] *
b[6];
347 acc += (int64_t)
a[7] *
b[5];
348 r[12] = acc & 0x0FFFFFFF;
349 acc =
ASR64(acc, 28);
350 acc += (int64_t)
a[6] *
b[7];
351 acc += (int64_t)
a[7] *
b[6];
352 r[13] = acc & 0x0FFFFFFF;
353 acc =
ASR64(acc, 28);
354 acc += (int64_t)
a[7] *
b[7];
355 r[14] = acc & 0x0FFFFFFF;
356 acc =
ASR64(acc, 28);
357 r[15] = acc & 0x0FFFFFFF;
358 acc =
ASR64(acc, 28);
361 r[0] += (int32_t) acc;
362 r[8] += (int32_t) acc;
410 temp =
u[0] -
u[8] + v[0] + w[8];
411 r[0] = temp & 0x0FFFFFFF;
412 temp =
ASR32(temp, 28);
413 temp +=
u[1] -
u[9] + v[1] + w[9];
414 r[1] = temp & 0x0FFFFFFF;
415 temp =
ASR32(temp, 28);
416 temp +=
u[2] -
u[10] + v[2] + w[10];
417 r[2] = temp & 0x0FFFFFFF;
418 temp =
ASR32(temp, 28);
419 temp +=
u[3] -
u[11] + v[3] + w[11];
420 r[3] = temp & 0x0FFFFFFF;
421 temp =
ASR32(temp, 28);
422 temp +=
u[4] -
u[12] + v[4] + w[12];
423 r[4] = temp & 0x0FFFFFFF;
424 temp =
ASR32(temp, 28);
425 temp +=
u[5] -
u[13] + v[5] + w[13];
426 r[5] = temp & 0x0FFFFFFF;
427 temp =
ASR32(temp, 28);
428 temp +=
u[6] -
u[14] + v[6] + w[14];
429 r[6] = temp & 0x0FFFFFFF;
430 temp =
ASR32(temp, 28);
431 temp +=
u[7] -
u[15] + v[7] + w[15];
432 r[7] = temp & 0x0FFFFFFF;
433 temp =
ASR32(temp, 28);
434 temp += -
u[0] + v[8] + w[0] + w[8];
435 r[8] = temp & 0x0FFFFFFF;
436 temp =
ASR32(temp, 28);
437 temp += -
u[1] + v[9] + w[1] + w[9];
438 r[9] = temp & 0x0FFFFFFF;
439 temp =
ASR32(temp, 28);
440 temp += -
u[2] + v[10] + w[2] + w[10];
441 r[10] = temp & 0x0FFFFFFF;
442 temp =
ASR32(temp, 28);
443 temp += -
u[3] + v[11] + w[3] + w[11];
444 r[11] = temp & 0x0FFFFFFF;
445 temp =
ASR32(temp, 28);
446 temp += -
u[4] + v[12] + w[4] + w[12];
447 r[12] = temp & 0x0FFFFFFF;
448 temp =
ASR32(temp, 28);
449 temp += -
u[5] + v[13] + w[5] + w[13];
450 r[13] = temp & 0x0FFFFFFF;
451 temp =
ASR32(temp, 28);
452 temp += -
u[6] + v[14] + w[6] + w[14];
453 r[14] = temp & 0x0FFFFFFF;
454 temp =
ASR32(temp, 28);
455 temp += -
u[7] + v[15] + w[7] + w[15];
456 r[15] = temp & 0x0FFFFFFF;
457 temp =
ASR32(temp, 28);
462 r[0] = temp & 0x0FFFFFFF;
463 temp =
ASR32(temp, 28);
466 r[8] = temp & 0x0FFFFFFF;
467 temp =
ASR32(temp, 28);
485 for(temp = 0, i = 0; i < 16; i++)
487 temp += (int64_t)
a[i] *
b;
488 r[i] = temp & 0x0FFFFFFF;
489 temp =
ASR64(temp, 28);
493 r[0] += (int32_t) temp;
494 r[8] += (int32_t) temp;
526 for(i = 1; i <
n; i++)
676 for(temp = 0, i = 0; i < 16; i++)
679 r[i] = temp & 0x0FFFFFFF;
680 temp =
ASR32(temp, 28);
684 for(
r[8] += temp, i = 0; i < 16; i++)
687 r[i] = temp & 0x0FFFFFFF;
688 temp =
ASR32(temp, 28);
692 for(temp = 1, i = 0; i < 8; i++)
695 b[i] = temp & 0x0FFFFFFF;
696 temp =
ASR32(temp, 28);
699 for(temp += 1, i = 8; i < 16; i++)
702 b[i] = temp & 0x0FFFFFFF;
703 temp =
ASR32(temp, 28);
725 for(i = 0; i < 16; i++)
749 for(i = 0; i < 16; i++)
752 dummy =
mask & (
a[i] ^
b[i]);
777 for(i = 0; i < 16; i++)
801 for(i = 0; i < 16; i++)
808 return ((uint32_t) (
mask | (~
mask + 1))) >> 31;
824 for(
a[0] = 0, i = 0; i < 7; i++)
827 a[i] |= (temp << (i * 4)) & 0x0FFFFFFF;
828 a[i + 1] = temp >> (28 - i * 4);
831 for(
a[8] = 0, i = 0; i < 7; i++)
834 a[i + 8] |= (temp << (i * 4)) & 0x0FFFFFFF;
835 a[i + 9] = temp >> (28 - i * 4);
852 for(i = 0; i < 7; i++)
854 temp = (
a[i + 1] << (28 - i * 4)) | (
a[i] >> (i * 4));
858 for(i = 0; i < 7; i++)
860 temp = (
a[i + 9] << (28 - 4 * i)) | (
a[i + 8] >> (i * 4));