|
1 | 1 | # include <stdint.h>
|
2 | 2 |
|
3 |
| -typedef unsigned __int128 uint128_t; |
| 3 | +typedef unsigned __int128 uint128_t; |
4 | 4 |
|
5 | 5 | typedef uint64_t limb;
|
6 | 6 | typedef uint128_t widelimb;
|
7 | 7 |
|
8 | 8 | typedef limb felem[4];
|
9 | 9 | typedef widelimb widefelem[7];
|
10 | 10 |
|
11 |
| -felem p = {0x1FFFFFFFFFFFFFF, |
12 |
| - 0xFFFFFFFFFFFFFF, |
13 |
| - 0xFFFFE000000000, |
| 11 | +felem p = {0x1FFFFFFFFFFFFFF, |
| 12 | + 0xFFFFFFFFFFFFFF, |
| 13 | + 0xFFFFE000000000, |
14 | 14 | 0x00000000000002};
|
15 | 15 |
|
16 | 16 |
|
17 | 17 | /*-
|
18 | 18 | * Reduce seven 128-bit coefficients to four 64-bit coefficients.
|
19 | 19 | * Requires in[i] < 2^126,
|
20 | 20 | * ensures out[0] < 2^56, out[1] < 2^56, out[2] < 2^56, out[3] <= 2^56 + 2^16 */
|
21 |
| -void reduce(felem out, const widefelem in) |
| 21 | +void reduce( |
| 22 | + limb out0, limb out1, limb out2, limb out3, widelimb in0, widelimb in1, |
| 23 | + widelimb in2, widelimb in3, widelimb in4, widelimb in5, widelimb in6) |
22 | 24 | {
|
| 25 | + felem out = {out0, out1, out2, out3}; |
| 26 | + const widefelem in = {in0, in1, in2, in3, in4, in5, in6}; |
23 | 27 |
|
24 | 28 | __CPROVER_assume(in[0]<(widelimb)((widelimb)1<<126));
|
25 | 29 | __CPROVER_assume(in[1]<((widelimb)1<<126));
|
26 | 30 | __CPROVER_assume(in[2]<((widelimb)1<<126));
|
27 | 31 | __CPROVER_assume(in[3]<((widelimb)1<<126));
|
| 32 | + __CPROVER_assume(in[4]<((widelimb)1<<126)); |
| 33 | + __CPROVER_assume(in[5]<((widelimb)1<<126)); |
| 34 | + __CPROVER_assume(in[6]<((widelimb)1<<126)); |
28 | 35 |
|
29 | 36 | static const widelimb two127p15 = (((widelimb) 1) << 127) +
|
30 | 37 | (((widelimb) 1) << 15);
|
@@ -75,9 +82,9 @@ void reduce(felem out, const widefelem in)
|
75 | 82 |
|
76 | 83 | output[2] += output[1] >> 56;
|
77 | 84 | /* output[2] < 2^57 + 2^72 */
|
78 |
| - |
| 85 | + |
79 | 86 | assert(output[2] < (((widelimb)1)<<57)+(((widelimb)1)<<72));
|
80 |
| - |
| 87 | + |
81 | 88 | out[1] = output[1] & 0x00ffffffffffffff;
|
82 | 89 | output[3] += output[2] >> 56;
|
83 | 90 | /* output[3] <= 2^56 + 2^16 */
|
|
0 commit comments