|
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