kpqc 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/README.md +9 -6
  4. data/THIRD_PARTY_NOTICES.md +14 -47
  5. data/ext/kpqc/extconf_helper.rb +6 -3
  6. data/ext/kpqc/secure_clear.c +8 -0
  7. data/kpqc.gemspec +4 -2
  8. data/lib/kpqc/aimer.rb +6 -6
  9. data/lib/kpqc/version.rb +1 -1
  10. data/test/kat/aimer128f.rsp +4 -4
  11. data/test/kat/aimer128s.rsp +4 -4
  12. data/test/kat/aimer192f.rsp +4 -4
  13. data/test/kat/aimer192s.rsp +4 -4
  14. data/test/kat/aimer256f.rsp +4 -4
  15. data/test/kat/aimer256s.rsp +4 -4
  16. data/test/kat/haetae2.rsp +1 -1
  17. data/test/kat/haetae3.rsp +1 -1
  18. data/test/kat/haetae5.rsp +1 -1
  19. data/vendor/AIMer/LICENSE +1 -1
  20. data/vendor/AIMer/aim3.c +227 -0
  21. data/vendor/AIMer/aim3.h +63 -0
  22. data/vendor/AIMer/field.h +12 -4
  23. data/vendor/AIMer/field128.c +24 -381
  24. data/vendor/AIMer/field192.c +24 -400
  25. data/vendor/AIMer/field256.c +28 -447
  26. data/vendor/AIMer/field_common.c +98 -0
  27. data/vendor/AIMer/field_internal.h +218 -0
  28. data/vendor/AIMer/params/params-aimer-128f.h +8 -8
  29. data/vendor/AIMer/params/params-aimer-128s.h +8 -8
  30. data/vendor/AIMer/params/params-aimer-192f.h +8 -8
  31. data/vendor/AIMer/params/params-aimer-192s.h +8 -8
  32. data/vendor/AIMer/params/params-aimer-256f.h +8 -8
  33. data/vendor/AIMer/params/params-aimer-256s.h +8 -8
  34. data/vendor/AIMer/params.h +5 -0
  35. data/vendor/AIMer/sign.c +246 -167
  36. data/vendor/AIMer/sign.h +6 -6
  37. data/vendor/AIMer/tree.c +10 -4
  38. data/vendor/AIMer/tree.h +1 -1
  39. data/vendor/HAETAE/include/fixpoint.h +14 -14
  40. data/vendor/HAETAE/include/rans_byte.h +10 -9
  41. data/vendor/HAETAE/src/decompose.c +8 -4
  42. data/vendor/HAETAE/src/encoding.c +5 -5
  43. data/vendor/HAETAE/src/fft.c +1 -1
  44. data/vendor/HAETAE/src/fips202.c +26 -14
  45. data/vendor/HAETAE/src/fixpoint.c +21 -18
  46. data/vendor/HAETAE/src/ntt.c +2 -0
  47. data/vendor/HAETAE/src/packing.c +15 -15
  48. data/vendor/HAETAE/src/poly.c +30 -3
  49. data/vendor/HAETAE/src/polyfix.c +2 -2
  50. data/vendor/HAETAE/src/polymat.c +2 -2
  51. data/vendor/HAETAE/src/polyvec.c +7 -5
  52. data/vendor/HAETAE/src/reduce.c +2 -0
  53. data/vendor/HAETAE/src/sampler.c +231 -47
  54. data/vendor/HAETAE/src/sign.c +11 -10
  55. data/vendor/NTRUplus/NTRU+1152/api.h +27 -8
  56. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.c +12 -269
  57. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.h +4 -113
  58. data/vendor/NTRUplus/NTRU+1152/kem.c +110 -40
  59. data/vendor/NTRUplus/NTRU+1152/ntt.c +50 -54
  60. data/vendor/NTRUplus/NTRU+1152/poly.c +21 -13
  61. data/vendor/NTRUplus/NTRU+1152/poly.h +3 -3
  62. data/vendor/NTRUplus/NTRU+1152/randombytes.h +1 -0
  63. data/vendor/NTRUplus/NTRU+1152/symmetric.c +3 -9
  64. data/vendor/NTRUplus/NTRU+1152/symmetric.h +13 -3
  65. data/vendor/NTRUplus/NTRU+1152/util.h +15 -0
  66. data/vendor/NTRUplus/NTRU+768/api.h +27 -8
  67. data/vendor/NTRUplus/NTRU+768/fips202/fips202.c +12 -269
  68. data/vendor/NTRUplus/NTRU+768/fips202/fips202.h +4 -113
  69. data/vendor/NTRUplus/NTRU+768/kem.c +110 -40
  70. data/vendor/NTRUplus/NTRU+768/ntt.c +50 -54
  71. data/vendor/NTRUplus/NTRU+768/poly.c +23 -13
  72. data/vendor/NTRUplus/NTRU+768/poly.h +3 -3
  73. data/vendor/NTRUplus/NTRU+768/randombytes.h +1 -0
  74. data/vendor/NTRUplus/NTRU+768/symmetric.c +3 -9
  75. data/vendor/NTRUplus/NTRU+768/symmetric.h +13 -3
  76. data/vendor/NTRUplus/NTRU+768/util.h +15 -0
  77. data/vendor/NTRUplus/NTRU+864/api.h +27 -8
  78. data/vendor/NTRUplus/NTRU+864/fips202/fips202.c +12 -269
  79. data/vendor/NTRUplus/NTRU+864/fips202/fips202.h +4 -113
  80. data/vendor/NTRUplus/NTRU+864/kem.c +110 -40
  81. data/vendor/NTRUplus/NTRU+864/ntt.c +24 -28
  82. data/vendor/NTRUplus/NTRU+864/poly.c +26 -12
  83. data/vendor/NTRUplus/NTRU+864/poly.h +3 -3
  84. data/vendor/NTRUplus/NTRU+864/randombytes.h +1 -0
  85. data/vendor/NTRUplus/NTRU+864/symmetric.c +3 -9
  86. data/vendor/NTRUplus/NTRU+864/symmetric.h +13 -3
  87. data/vendor/NTRUplus/NTRU+864/util.h +15 -0
  88. data/vendor/SMAUG-T/src/cbd.c +4 -4
  89. data/vendor/SMAUG-T/src/ciphertext.c +2 -2
  90. data/vendor/SMAUG-T/src/dg.c +2 -2
  91. data/vendor/SMAUG-T/src/hwt.c +4 -4
  92. data/vendor/SMAUG-T/src/indcpa.c +5 -5
  93. data/vendor/SMAUG-T/src/kem.c +9 -7
  94. data/vendor/SMAUG-T/src/key.c +2 -2
  95. data/vendor/SMAUG-T/src/pack.c +8 -8
  96. metadata +16 -13
  97. data/vendor/AIMer/aim2.c +0 -163
  98. data/vendor/AIMer/aim2.h +0 -36
  99. data/vendor/AIMer/aim2_constant.h +0 -74
  100. data/vendor/SOURCES.json +0 -130
@@ -1,238 +1,23 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
 
3
3
  #include "field.h"
4
+ #include "field_internal.h"
4
5
  #include <stddef.h>
5
6
  #include <stdint.h>
6
7
 
7
- void gf_to_bytes(uint8_t *out, const gf in)
8
+ static void gf_mod(gf c, const uint64_t a[2 * AIM3_NUM_WORDS_FIELD])
8
9
  {
9
- int i, j;
10
- for (i = 0; i < AIM2_NUM_WORDS_FIELD; i++)
11
- {
12
- uint64_t u = in[i];
13
- for (j = 0; j < 8; j++)
14
- {
15
- *out++ = u;
16
- u >>= 8;
17
- }
18
- }
19
- }
20
-
21
- void gf_from_bytes(gf out, const uint8_t *in)
22
- {
23
- int i, j;
24
- for (i = 0; i < AIM2_NUM_WORDS_FIELD; i++)
25
- {
26
- uint64_t u = 0;
27
- for (j = 7; j >= 0; j--)
28
- {
29
- u = (u << 8) | in[8 * i + j];
30
- }
31
- out[i] = u;
32
- }
33
- }
34
-
35
- void gf_set0(gf a)
36
- {
37
- a[0] = 0;
38
- a[1] = 0;
39
- }
40
-
41
- void gf_copy(gf out, const gf in)
42
- {
43
- out[0] = in[0];
44
- out[1] = in[1];
45
- }
46
-
47
- void gf_add(gf c, const gf a, const gf b)
48
- {
49
- c[0] = a[0] ^ b[0];
50
- c[1] = a[1] ^ b[1];
51
- }
52
-
53
- static void poly64_mul(uint64_t *z1, uint64_t *z0, uint64_t x0, uint64_t y0)
54
- {
55
- const uint64_t C0 = 0x5555555555555555;
56
- const uint64_t C1 = 0x3333333333333333;
57
- const uint64_t C2 = 0x0f0f0f0f0f0f0f0f;
58
- const uint64_t C3 = 0x00ff00ff00ff00ff;
59
- const uint64_t C4 = 0x0000ffff0000ffff;
60
- const uint64_t C5 = 0x00000000ffffffff;
61
- uint64_t x1, x2, x3, x4, x5, x6, x7;
62
- uint64_t y1, y2, y3, y4, y5, y6, y7;
63
- uint64_t f0, f1, f2, f3, f4, f5, f6, f7;
64
- uint64_t g0, g1, g2, g3, g4, g5, g6, g7;
65
- uint64_t s, t;
66
-
67
- x1 = x0 ^ (x0 >> 32); // will ignore outside C5
68
- x2 = ((x0 ^ (x0 >> 16)) & C4) | ((x1 ^ (x1 << 16)) & (C4 << 16));
69
- x3 = ((x0 ^ (x0 >> 8)) & C3) | ((x1 ^ (x1 << 8)) & (C3 << 8));
70
- x4 = x2 ^ (x2 >> 8); // will ignore outside C3
71
- x5 = ((x0 ^ (x0 >> 4)) & C2) | ((x1 ^ (x1 << 4)) & (C2 << 4));
72
- x6 = ((x2 ^ (x2 >> 4)) & C2) | ((x3 ^ (x3 << 4)) & (C2 << 4));
73
- x7 = x4 ^ (x4 >> 4); // will ignore outside C2
74
- s = ((x0 >> 2) ^ x2) & C1;
75
- x0 ^= s << 2;
76
- x2 ^= s;
77
- s = ((x1 >> 2) ^ x3) & C1;
78
- x1 ^= s << 2;
79
- x3 ^= s;
80
- s = ((x4 >> 2) ^ x6) & C1;
81
- x4 ^= s << 2;
82
- x6 ^= s;
83
- s = ((x5 >> 2) ^ x7) & C1;
84
- x5 ^= s << 2;
85
- x7 ^= s;
86
- s = ((x0 >> 1) ^ x1) & C0;
87
- x0 ^= s << 1;
88
- x1 ^= s;
89
- s = ((x2 >> 1) ^ x3) & C0;
90
- x2 ^= s << 1;
91
- x3 ^= s;
92
- s = ((x4 >> 1) ^ x5) & C0;
93
- x4 ^= s << 1;
94
- x5 ^= s;
95
- s = ((x6 >> 1) ^ x7) & C0;
96
- x6 ^= s << 1;
97
- x7 ^= s;
98
-
99
- y1 = y0 ^ (y0 >> 32);
100
- y2 = ((y0 ^ (y0 >> 16)) & C4) | ((y1 ^ (y1 << 16)) & (C4 << 16));
101
- y3 = ((y0 ^ (y0 >> 8)) & C3) | ((y1 ^ (y1 << 8)) & (C3 << 8));
102
- y4 = y2 ^ (y2 >> 8);
103
- y5 = ((y0 ^ (y0 >> 4)) & C2) | ((y1 ^ (y1 << 4)) & (C2 << 4));
104
- y6 = ((y2 ^ (y2 >> 4)) & C2) | ((y3 ^ (y3 << 4)) & (C2 << 4));
105
- y7 = y4 ^ (y4 >> 4);
106
- s = ((y0 >> 2) ^ y2) & C1;
107
- y0 ^= s << 2;
108
- y2 ^= s;
109
- s = ((y1 >> 2) ^ y3) & C1;
110
- y1 ^= s << 2;
111
- y3 ^= s;
112
- s = ((y4 >> 2) ^ y6) & C1;
113
- y4 ^= s << 2;
114
- y6 ^= s;
115
- s = ((y5 >> 2) ^ y7) & C1;
116
- y5 ^= s << 2;
117
- y7 ^= s;
118
- s = ((y0 >> 1) ^ y1) & C0;
119
- y0 ^= s << 1;
120
- y1 ^= s;
121
- s = ((y2 >> 1) ^ y3) & C0;
122
- y2 ^= s << 1;
123
- y3 ^= s;
124
- s = ((y4 >> 1) ^ y5) & C0;
125
- y4 ^= s << 1;
126
- y5 ^= s;
127
- s = ((y6 >> 1) ^ y7) & C0;
128
- y6 ^= s << 1;
129
- y7 ^= s;
130
-
131
- f0 = x0 & y0;
132
- f1 = (x0 & y1) ^ (x1 & y0);
133
- f2 = (x0 & y2) ^ (x1 & y1) ^ (x2 & y0);
134
- f3 = (x0 & y3) ^ (x1 & y2) ^ (x2 & y1) ^ (x3 & y0);
135
- g0 = (x1 & y3) ^ (x2 & y2) ^ (x3 & y1);
136
- g1 = (x2 & y3) ^ (x3 & y2);
137
- g2 = x3 & y3;
138
-
139
- f4 = x4 & y4;
140
- f5 = (x4 & y5) ^ (x5 & y4);
141
- f6 = (x4 & y6) ^ (x5 & y5) ^ (x6 & y4);
142
- f7 = (x4 & y7) ^ (x5 & y6) ^ (x6 & y5) ^ (x7 & y4);
143
- g4 = (x5 & y7) ^ (x6 & y6) ^ (x7 & y5);
144
- g5 = (x6 & y7) ^ (x7 & y6);
145
- g6 = x7 & y7;
10
+ uint64_t t = a[2] ^ ((a[3] >> 57) ^ (a[3] >> 62) ^ (a[3] >> 63));
146
11
 
147
- s = ((f0 >> 1) ^ f1) & C0;
148
- f0 ^= s << 1;
149
- f1 ^= s;
150
- s = ((f2 >> 1) ^ f3) & C0;
151
- f2 ^= s << 1;
152
- f3 ^= s;
153
- s = ((f0 >> 2) ^ f2) & C1;
154
- f0 ^= s << 2;
155
- f2 ^= s;
156
- s = ((f1 >> 2) ^ f3) & C1;
157
- f1 ^= s << 2;
158
- f3 ^= s;
159
- s = ((g0 >> 1) ^ g1) & C0;
160
- g0 ^= s << 1;
161
- g1 ^= s;
162
- s = (g2 >> 1) & C0;
163
- g2 ^= s << 1;
164
- g3 = s;
165
- s = ((g0 >> 2) ^ g2) & C1;
166
- g0 ^= s << 2;
167
- g2 ^= s;
168
- s = ((g1 >> 2) ^ g3) & C1;
169
- g1 ^= s << 2;
170
- g3 ^= s;
12
+ c[1] = a[1] ^ a[3];
13
+ c[1] ^= (a[3] << 7) | (t >> 57);
14
+ c[1] ^= (a[3] << 2) | (t >> 62);
15
+ c[1] ^= (a[3] << 1) | (t >> 63);
171
16
 
172
- s = ((f4 >> 1) ^ f5) & C0;
173
- f4 ^= s << 1;
174
- f5 ^= s;
175
- s = ((f6 >> 1) ^ f7) & C0;
176
- f6 ^= s << 1;
177
- f7 ^= s;
178
- s = ((f4 >> 2) ^ f6) & C1;
179
- f4 ^= s << 2;
180
- f6 ^= s;
181
- s = ((f5 >> 2) ^ f7) & C1;
182
- f5 ^= s << 2;
183
- f7 ^= s;
184
- s = ((g4 >> 1) ^ g5) & C0;
185
- g4 ^= s << 1;
186
- g5 ^= s;
187
- s = (g6 >> 1) & C0;
188
- g6 ^= s << 1;
189
- g7 = s;
190
- s = ((g4 >> 2) ^ g6) & C1;
191
- g4 ^= s << 2;
192
- g6 ^= s;
193
- s = ((g5 >> 2) ^ g7) & C1;
194
- g5 ^= s << 2;
195
- g7 ^= s;
196
-
197
- t = f0 ^ g0;
198
- f0 ^= ((f5 ^ t) & C2) << 4;
199
- g0 ^= (g5 ^ (t >> 4)) & C2;
200
- t = f1 ^ g1;
201
- f1 ^= (f5 ^ (t << 4)) & (C2 << 4);
202
- g1 ^= ((g5 ^ t) >> 4) & C2;
203
- t = f2 ^ g2;
204
- f2 ^= ((f6 ^ t) & C2) << 4;
205
- g2 ^= (g6 ^ (t >> 4)) & C2;
206
- t = f3 ^ g3;
207
- f3 ^= (f6 ^ (t << 4)) & (C2 << 4);
208
- g3 ^= ((g6 ^ t) >> 4) & C2;
209
- t = f4 ^ g4;
210
- f4 ^= ((f7 ^ t) & C2) << 4;
211
- g4 ^= (g7 ^ (t >> 4)) & C2;
212
-
213
- t = f0 ^ g0;
214
- f0 ^= ((f3 ^ t) & C3) << 8;
215
- g0 ^= (g3 ^ (t >> 8)) & C3;
216
- t = f1 ^ g1;
217
- f1 ^= (f3 ^ (t << 8)) & (C3 << 8);
218
- g1 ^= ((g3 ^ t) >> 8) & C3;
219
- t = f2 ^ g2;
220
- f2 ^= ((f4 ^ t) & C3) << 8;
221
- g2 ^= (g4 ^ (t >> 8)) & C3;
222
-
223
- t = f0 ^ g0;
224
- f0 ^= ((f2 ^ t) & C4) << 16;
225
- g0 ^= (g2 ^ (t >> 16)) & C4;
226
- t = f1 ^ g1;
227
- f1 ^= (f2 ^ (t << 16)) & (C4 << 16);
228
- g1 ^= ((g2 ^ t) >> 16) & C4;
229
-
230
- t = f0 ^ g0;
231
- f0 ^= ((t ^ f1) & C5) << 32;
232
- g0 ^= ((t >> 32) ^ g1) & C5;
233
-
234
- *z0 = f0;
235
- *z1 = g0;
17
+ c[0] = a[0] ^ t;
18
+ c[0] ^= (t << 7);
19
+ c[0] ^= (t << 2);
20
+ c[0] ^= (t << 1);
236
21
  }
237
22
 
238
23
  void gf_mul(gf c, const gf a, const gf b)
@@ -247,112 +32,21 @@ void gf_mul(gf c, const gf a, const gf b)
247
32
  temp[1] ^= t[0] ^ temp[0] ^ temp[2];
248
33
  temp[2] = t[0] ^ t[1] ^ temp[0] ^ temp[1] ^ temp[3];
249
34
 
250
- t[0] = temp[2] ^ ((temp[3] >> 57) ^ (temp[3] >> 62) ^ (temp[3] >> 63));
251
-
252
- c[1] = temp[1] ^ temp[3];
253
- c[1] ^= (temp[3] << 7) | (t[0] >> 57);
254
- c[1] ^= (temp[3] << 2) | (t[0] >> 62);
255
- c[1] ^= (temp[3] << 1) | (t[0] >> 63);
256
-
257
- c[0] = temp[0] ^ t[0];
258
- c[0] ^= (t[0] << 7);
259
- c[0] ^= (t[0] << 2);
260
- c[0] ^= (t[0] << 1);
261
- }
262
-
263
- void gf_mul_add(gf c, const gf a, const gf b)
264
- {
265
- uint64_t t[2] = {0,};
266
- uint64_t temp[4] = {0,};
267
-
268
- poly64_mul(&temp[3], &temp[2], a[1], b[1]);
269
- poly64_mul(&temp[1], &temp[0], a[0], b[0]);
270
-
271
- poly64_mul(&t[1], &t[0], (a[0] ^ a[1]), (b[0] ^ b[1]));
272
- temp[1] ^= t[0] ^ temp[0] ^ temp[2];
273
- temp[2] = t[0] ^ t[1] ^ temp[0] ^ temp[1] ^ temp[3];
274
-
275
- t[0] = temp[2] ^ ((temp[3] >> 57) ^ (temp[3] >> 62) ^ (temp[3] >> 63));
276
-
277
- c[1] ^= temp[1] ^ temp[3];
278
- c[1] ^= (temp[3] << 7) | (t[0] >> 57);
279
- c[1] ^= (temp[3] << 2) | (t[0] >> 62);
280
- c[1] ^= (temp[3] << 1) | (t[0] >> 63);
281
-
282
- c[0] ^= temp[0] ^ t[0];
283
- c[0] ^= (t[0] << 7);
284
- c[0] ^= (t[0] << 2);
285
- c[0] ^= (t[0] << 1);
286
- }
287
-
288
- static void poly64_sqr(uint64_t *z1, uint64_t *z0, uint64_t x)
289
- {
290
- const uint64_t C0 = 0x5555555555555555;
291
- const uint64_t C1 = 0x3333333333333333;
292
- const uint64_t C2 = 0x0f0f0f0f0f0f0f0f;
293
- const uint64_t C3 = 0x00ff00ff00ff00ff;
294
- const uint64_t C4 = 0x0000ffff0000ffff;
295
- const uint64_t C5 = 0x00000000ffffffff;
296
- uint64_t y = x >> 32;
297
- x &= C5;
298
- x = (x | (x << 16)) & C4;
299
- y = (y | (y << 16)) & C4;
300
- x = (x | (x << 8)) & C3;
301
- y = (y | (y << 8)) & C3;
302
- x = (x | (x << 4)) & C2;
303
- y = (y | (y << 4)) & C2;
304
- x = (x | (x << 2)) & C1;
305
- y = (y | (y << 2)) & C1;
306
- x = (x | (x << 1)) & C0;
307
- y = (y | (y << 1)) & C0;
308
- *z0 = x;
309
- *z1 = y;
35
+ gf_mod(c, temp);
310
36
  }
311
37
 
312
38
  void gf_sqr(gf c, const gf a)
313
39
  {
314
- uint64_t t = 0;
315
40
  uint64_t temp[4] = {0,};
316
41
 
317
42
  poly64_sqr(&temp[1], &temp[0], a[0]);
318
43
  poly64_sqr(&temp[3], &temp[2], a[1]);
319
44
 
320
- t = temp[2] ^ ((temp[3] >> 57) ^ (temp[3] >> 62) ^ (temp[3] >> 63));
321
-
322
- c[1] = temp[1] ^ temp[3];
323
- c[1] ^= (temp[3] << 7) | (t >> 57);
324
- c[1] ^= (temp[3] << 2) | (t >> 62);
325
- c[1] ^= (temp[3] << 1) | (t >> 63);
326
-
327
- c[0] = temp[0] ^ t;
328
- c[0] ^= (t << 7);
329
- c[0] ^= (t << 2);
330
- c[0] ^= (t << 1);
331
- }
332
-
333
- void gf_exp(gf out, const gf in, const uint64_t *exp)
334
- {
335
- gf temp;
336
-
337
- gf_copy(temp, in);
338
- gf_set0(out);
339
- out[0] = 1;
340
- for (size_t i = 0; i < AIM2_NUM_WORDS_FIELD; i++)
341
- {
342
- uint64_t e = exp[i];
343
- for (size_t j = 0; j < AIM2_NUM_BITS_WORD; j++, e >>= 1)
344
- {
345
- if (e & 1)
346
- {
347
- gf_mul(out, out, temp);
348
- }
349
- gf_sqr(temp, temp);
350
- }
351
- }
45
+ gf_mod(c, temp);
352
46
  }
353
47
 
354
48
  // c = sum_i a[i] * b[i]
355
- void gf_mat_vec_mul(gf c, const gf a, const gf b[AIM2_NUM_BITS_FIELD])
49
+ void gf_mat_vec_mul(gf c, const gf a, const gf b[AIM3_NUM_BITS_FIELD])
356
50
  {
357
51
  const uint64_t *a_ptr = a;
358
52
  const gf *b_ptr = b;
@@ -360,40 +54,40 @@ void gf_mat_vec_mul(gf c, const gf a, const gf b[AIM2_NUM_BITS_FIELD])
360
54
  uint64_t temp_c0 = 0;
361
55
  uint64_t temp_c1 = 0;
362
56
  uint64_t mask;
363
- for (size_t i = AIM2_NUM_WORDS_FIELD; i; --i, ++a_ptr)
57
+ for (size_t i = AIM3_NUM_WORDS_FIELD; i; --i, ++a_ptr)
364
58
  {
365
59
  uint64_t index = *a_ptr;
366
- for (size_t j = AIM2_NUM_BITS_WORD; j; j -= 8, index >>= 8, b_ptr += 8)
60
+ for (size_t j = AIM3_NUM_BITS_WORD; j; j -= 8, index >>= 8, b_ptr += 8)
367
61
  {
368
- mask = -(index & 1);
62
+ mask = 0U - (index & 1);
369
63
  temp_c0 ^= (b_ptr[0][0] & mask);
370
64
  temp_c1 ^= (b_ptr[0][1] & mask);
371
65
 
372
- mask = -((index >> 1) & 1);
66
+ mask = 0U - ((index >> 1) & 1);
373
67
  temp_c0 ^= (b_ptr[1][0] & mask);
374
68
  temp_c1 ^= (b_ptr[1][1] & mask);
375
69
 
376
- mask = -((index >> 2) & 1);
70
+ mask = 0U - ((index >> 2) & 1);
377
71
  temp_c0 ^= (b_ptr[2][0] & mask);
378
72
  temp_c1 ^= (b_ptr[2][1] & mask);
379
73
 
380
- mask = -((index >> 3) & 1);
74
+ mask = 0U - ((index >> 3) & 1);
381
75
  temp_c0 ^= (b_ptr[3][0] & mask);
382
76
  temp_c1 ^= (b_ptr[3][1] & mask);
383
77
 
384
- mask = -((index >> 4) & 1);
78
+ mask = 0U - ((index >> 4) & 1);
385
79
  temp_c0 ^= (b_ptr[4][0] & mask);
386
80
  temp_c1 ^= (b_ptr[4][1] & mask);
387
81
 
388
- mask = -((index >> 5) & 1);
82
+ mask = 0U - ((index >> 5) & 1);
389
83
  temp_c0 ^= (b_ptr[5][0] & mask);
390
84
  temp_c1 ^= (b_ptr[5][1] & mask);
391
85
 
392
- mask = -((index >> 6) & 1);
86
+ mask = 0U - ((index >> 6) & 1);
393
87
  temp_c0 ^= (b_ptr[6][0] & mask);
394
88
  temp_c1 ^= (b_ptr[6][1] & mask);
395
89
 
396
- mask = -((index >> 7) & 1);
90
+ mask = 0U - ((index >> 7) & 1);
397
91
  temp_c0 ^= (b_ptr[7][0] & mask);
398
92
  temp_c1 ^= (b_ptr[7][1] & mask);
399
93
  }
@@ -401,54 +95,3 @@ void gf_mat_vec_mul(gf c, const gf a, const gf b[AIM2_NUM_BITS_FIELD])
401
95
  c[0] = temp_c0;
402
96
  c[1] = temp_c1;
403
97
  }
404
-
405
- // c += sum_i a[i] * b[i]
406
- void gf_mat_vec_mul_add(gf c, const gf a, const gf b[AIM2_NUM_BITS_FIELD])
407
- {
408
- const uint64_t *a_ptr = a;
409
- const gf *b_ptr = b;
410
-
411
- uint64_t temp_c0 = 0;
412
- uint64_t temp_c1 = 0;
413
- uint64_t mask;
414
- for (size_t i = AIM2_NUM_WORDS_FIELD; i; --i, ++a_ptr)
415
- {
416
- uint64_t index = *a_ptr;
417
- for (size_t j = AIM2_NUM_BITS_WORD; j; j -= 8, index >>= 8, b_ptr += 8)
418
- {
419
- mask = -(index & 1);
420
- temp_c0 ^= (b_ptr[0][0] & mask);
421
- temp_c1 ^= (b_ptr[0][1] & mask);
422
-
423
- mask = -((index >> 1) & 1);
424
- temp_c0 ^= (b_ptr[1][0] & mask);
425
- temp_c1 ^= (b_ptr[1][1] & mask);
426
-
427
- mask = -((index >> 2) & 1);
428
- temp_c0 ^= (b_ptr[2][0] & mask);
429
- temp_c1 ^= (b_ptr[2][1] & mask);
430
-
431
- mask = -((index >> 3) & 1);
432
- temp_c0 ^= (b_ptr[3][0] & mask);
433
- temp_c1 ^= (b_ptr[3][1] & mask);
434
-
435
- mask = -((index >> 4) & 1);
436
- temp_c0 ^= (b_ptr[4][0] & mask);
437
- temp_c1 ^= (b_ptr[4][1] & mask);
438
-
439
- mask = -((index >> 5) & 1);
440
- temp_c0 ^= (b_ptr[5][0] & mask);
441
- temp_c1 ^= (b_ptr[5][1] & mask);
442
-
443
- mask = -((index >> 6) & 1);
444
- temp_c0 ^= (b_ptr[6][0] & mask);
445
- temp_c1 ^= (b_ptr[6][1] & mask);
446
-
447
- mask = -((index >> 7) & 1);
448
- temp_c0 ^= (b_ptr[7][0] & mask);
449
- temp_c1 ^= (b_ptr[7][1] & mask);
450
- }
451
- }
452
- c[0] ^= temp_c0;
453
- c[1] ^= temp_c1;
454
- }