kpqc 0.1.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 (191) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +21 -0
  4. data/README.md +174 -0
  5. data/Rakefile +57 -0
  6. data/THIRD_PARTY_NOTICES.md +53 -0
  7. data/ext/kpqc/aimer128f/extconf.rb +4 -0
  8. data/ext/kpqc/aimer128s/extconf.rb +4 -0
  9. data/ext/kpqc/aimer192f/extconf.rb +4 -0
  10. data/ext/kpqc/aimer192s/extconf.rb +4 -0
  11. data/ext/kpqc/aimer256f/extconf.rb +4 -0
  12. data/ext/kpqc/aimer256s/extconf.rb +4 -0
  13. data/ext/kpqc/extconf_helper.rb +93 -0
  14. data/ext/kpqc/haetae2/extconf.rb +4 -0
  15. data/ext/kpqc/haetae3/extconf.rb +4 -0
  16. data/ext/kpqc/haetae5/extconf.rb +4 -0
  17. data/ext/kpqc/module.c +195 -0
  18. data/ext/kpqc/ntruplus1152/extconf.rb +4 -0
  19. data/ext/kpqc/ntruplus768/extconf.rb +4 -0
  20. data/ext/kpqc/ntruplus864/extconf.rb +4 -0
  21. data/ext/kpqc/randombytes.c +107 -0
  22. data/ext/kpqc/smaugt128/extconf.rb +4 -0
  23. data/ext/kpqc/smaugt192/extconf.rb +4 -0
  24. data/ext/kpqc/smaugt256/extconf.rb +4 -0
  25. data/ext/kpqc/timer/extconf.rb +4 -0
  26. data/kpqc.gemspec +41 -0
  27. data/lib/kpqc/aimer.rb +38 -0
  28. data/lib/kpqc/api.rb +129 -0
  29. data/lib/kpqc/haetae.rb +25 -0
  30. data/lib/kpqc/ntruplus.rb +25 -0
  31. data/lib/kpqc/smaugt.rb +29 -0
  32. data/lib/kpqc/types.rb +103 -0
  33. data/lib/kpqc/version.rb +6 -0
  34. data/lib/kpqc.rb +33 -0
  35. data/test/algorithm_test.rb +111 -0
  36. data/test/api_test.rb +52 -0
  37. data/test/interop.mjs +34 -0
  38. data/test/interop_test.rb +82 -0
  39. data/test/kat/aimer128f.rsp +10 -0
  40. data/test/kat/aimer128s.rsp +10 -0
  41. data/test/kat/aimer192f.rsp +10 -0
  42. data/test/kat/aimer192s.rsp +10 -0
  43. data/test/kat/aimer256f.rsp +10 -0
  44. data/test/kat/aimer256s.rsp +10 -0
  45. data/test/kat/haetae2.rsp +10 -0
  46. data/test/kat/haetae3.rsp +10 -0
  47. data/test/kat/haetae5.rsp +10 -0
  48. data/test/kat/ntruplus1152.rsp +8 -0
  49. data/test/kat/ntruplus768.rsp +8 -0
  50. data/test/kat/ntruplus864.rsp +8 -0
  51. data/test/kat/smaugt128.rsp +8 -0
  52. data/test/kat/smaugt192.rsp +8 -0
  53. data/test/kat/smaugt256.rsp +8 -0
  54. data/test/kat/timer.rsp +8 -0
  55. data/test/kat_drbg.rb +155 -0
  56. data/test/kat_test.rb +99 -0
  57. data/test/test_helper.rb +21 -0
  58. data/vendor/AIMer/LICENSE +21 -0
  59. data/vendor/AIMer/aim2.c +163 -0
  60. data/vendor/AIMer/aim2.h +36 -0
  61. data/vendor/AIMer/aim2_constant.h +74 -0
  62. data/vendor/AIMer/api.h +42 -0
  63. data/vendor/AIMer/common/crypto_declassify.h +7 -0
  64. data/vendor/AIMer/common/fips202.c +878 -0
  65. data/vendor/AIMer/common/fips202.h +166 -0
  66. data/vendor/AIMer/common/rng.h +56 -0
  67. data/vendor/AIMer/field.h +43 -0
  68. data/vendor/AIMer/field128.c +454 -0
  69. data/vendor/AIMer/field192.c +485 -0
  70. data/vendor/AIMer/field256.c +564 -0
  71. data/vendor/AIMer/hash.c +50 -0
  72. data/vendor/AIMer/hash.h +37 -0
  73. data/vendor/AIMer/params/params-aimer-128f.h +34 -0
  74. data/vendor/AIMer/params/params-aimer-128s.h +34 -0
  75. data/vendor/AIMer/params/params-aimer-192f.h +34 -0
  76. data/vendor/AIMer/params/params-aimer-192s.h +34 -0
  77. data/vendor/AIMer/params/params-aimer-256f.h +34 -0
  78. data/vendor/AIMer/params/params-aimer-256s.h +34 -0
  79. data/vendor/AIMer/params.h +5 -0
  80. data/vendor/AIMer/sign.c +631 -0
  81. data/vendor/AIMer/sign.h +40 -0
  82. data/vendor/AIMer/tree.c +75 -0
  83. data/vendor/AIMer/tree.h +26 -0
  84. data/vendor/HAETAE/LICENSE +22 -0
  85. data/vendor/HAETAE/include/api.h +54 -0
  86. data/vendor/HAETAE/include/common.h +12 -0
  87. data/vendor/HAETAE/include/config.h +42 -0
  88. data/vendor/HAETAE/include/decompose.h +19 -0
  89. data/vendor/HAETAE/include/encoding.h +20 -0
  90. data/vendor/HAETAE/include/fft.h +26 -0
  91. data/vendor/HAETAE/include/fips202.h +40 -0
  92. data/vendor/HAETAE/include/fixpoint.h +125 -0
  93. data/vendor/HAETAE/include/ntt.h +16 -0
  94. data/vendor/HAETAE/include/packing.h +58 -0
  95. data/vendor/HAETAE/include/params.h +117 -0
  96. data/vendor/HAETAE/include/poly.h +65 -0
  97. data/vendor/HAETAE/include/polyfix.h +65 -0
  98. data/vendor/HAETAE/include/polymat.h +32 -0
  99. data/vendor/HAETAE/include/polyvec.h +131 -0
  100. data/vendor/HAETAE/include/randombytes.h +39 -0
  101. data/vendor/HAETAE/include/rans_byte.h +335 -0
  102. data/vendor/HAETAE/include/reduce.h +31 -0
  103. data/vendor/HAETAE/include/sampler.h +23 -0
  104. data/vendor/HAETAE/include/symmetric.h +52 -0
  105. data/vendor/HAETAE/src/decompose.c +73 -0
  106. data/vendor/HAETAE/src/encoding.c +700 -0
  107. data/vendor/HAETAE/src/fft.c +235 -0
  108. data/vendor/HAETAE/src/fips202.c +745 -0
  109. data/vendor/HAETAE/src/fixpoint.c +143 -0
  110. data/vendor/HAETAE/src/ntt.c +98 -0
  111. data/vendor/HAETAE/src/packing.c +595 -0
  112. data/vendor/HAETAE/src/poly.c +371 -0
  113. data/vendor/HAETAE/src/polyfix.c +298 -0
  114. data/vendor/HAETAE/src/polymat.c +82 -0
  115. data/vendor/HAETAE/src/polyvec.c +534 -0
  116. data/vendor/HAETAE/src/reduce.c +96 -0
  117. data/vendor/HAETAE/src/sampler.c +310 -0
  118. data/vendor/HAETAE/src/sign.c +558 -0
  119. data/vendor/HAETAE/src/symmetric-shake.c +50 -0
  120. data/vendor/NTRUplus/LICENSE +21 -0
  121. data/vendor/NTRUplus/NTRU+1152/api.h +24 -0
  122. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.c +878 -0
  123. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.h +166 -0
  124. data/vendor/NTRUplus/NTRU+1152/kem.c +286 -0
  125. data/vendor/NTRUplus/NTRU+1152/ntt.c +394 -0
  126. data/vendor/NTRUplus/NTRU+1152/ntt.h +16 -0
  127. data/vendor/NTRUplus/NTRU+1152/params.h +18 -0
  128. data/vendor/NTRUplus/NTRU+1152/poly.c +318 -0
  129. data/vendor/NTRUplus/NTRU+1152/poly.h +31 -0
  130. data/vendor/NTRUplus/NTRU+1152/randombytes.h +9 -0
  131. data/vendor/NTRUplus/NTRU+1152/symmetric.c +39 -0
  132. data/vendor/NTRUplus/NTRU+1152/symmetric.h +12 -0
  133. data/vendor/NTRUplus/NTRU+768/api.h +24 -0
  134. data/vendor/NTRUplus/NTRU+768/fips202/fips202.c +878 -0
  135. data/vendor/NTRUplus/NTRU+768/fips202/fips202.h +166 -0
  136. data/vendor/NTRUplus/NTRU+768/kem.c +286 -0
  137. data/vendor/NTRUplus/NTRU+768/ntt.c +379 -0
  138. data/vendor/NTRUplus/NTRU+768/ntt.h +16 -0
  139. data/vendor/NTRUplus/NTRU+768/params.h +18 -0
  140. data/vendor/NTRUplus/NTRU+768/poly.c +320 -0
  141. data/vendor/NTRUplus/NTRU+768/poly.h +31 -0
  142. data/vendor/NTRUplus/NTRU+768/randombytes.h +9 -0
  143. data/vendor/NTRUplus/NTRU+768/symmetric.c +39 -0
  144. data/vendor/NTRUplus/NTRU+768/symmetric.h +12 -0
  145. data/vendor/NTRUplus/NTRU+864/api.h +24 -0
  146. data/vendor/NTRUplus/NTRU+864/fips202/fips202.c +878 -0
  147. data/vendor/NTRUplus/NTRU+864/fips202/fips202.h +166 -0
  148. data/vendor/NTRUplus/NTRU+864/kem.c +286 -0
  149. data/vendor/NTRUplus/NTRU+864/ntt.c +383 -0
  150. data/vendor/NTRUplus/NTRU+864/ntt.h +16 -0
  151. data/vendor/NTRUplus/NTRU+864/params.h +18 -0
  152. data/vendor/NTRUplus/NTRU+864/poly.c +314 -0
  153. data/vendor/NTRUplus/NTRU+864/poly.h +31 -0
  154. data/vendor/NTRUplus/NTRU+864/randombytes.h +9 -0
  155. data/vendor/NTRUplus/NTRU+864/symmetric.c +39 -0
  156. data/vendor/NTRUplus/NTRU+864/symmetric.h +12 -0
  157. data/vendor/SMAUG-T/LICENSE +22 -0
  158. data/vendor/SMAUG-T/include/api.h +37 -0
  159. data/vendor/SMAUG-T/include/cbd.h +15 -0
  160. data/vendor/SMAUG-T/include/ciphertext.h +45 -0
  161. data/vendor/SMAUG-T/include/common.h +12 -0
  162. data/vendor/SMAUG-T/include/config.h +48 -0
  163. data/vendor/SMAUG-T/include/dg.h +28 -0
  164. data/vendor/SMAUG-T/include/fips202.h +41 -0
  165. data/vendor/SMAUG-T/include/hash.h +21 -0
  166. data/vendor/SMAUG-T/include/hwt.h +28 -0
  167. data/vendor/SMAUG-T/include/indcpa.h +33 -0
  168. data/vendor/SMAUG-T/include/key.h +34 -0
  169. data/vendor/SMAUG-T/include/pack.h +78 -0
  170. data/vendor/SMAUG-T/include/packring.h +50 -0
  171. data/vendor/SMAUG-T/include/params.h +84 -0
  172. data/vendor/SMAUG-T/include/poly.h +41 -0
  173. data/vendor/SMAUG-T/include/randombytes.h +11 -0
  174. data/vendor/SMAUG-T/include/toomcook.h +14 -0
  175. data/vendor/SMAUG-T/include/verify.h +16 -0
  176. data/vendor/SMAUG-T/src/cbd.c +159 -0
  177. data/vendor/SMAUG-T/src/ciphertext.c +95 -0
  178. data/vendor/SMAUG-T/src/dg.c +112 -0
  179. data/vendor/SMAUG-T/src/fips202.c +745 -0
  180. data/vendor/SMAUG-T/src/hash.c +15 -0
  181. data/vendor/SMAUG-T/src/hwt.c +121 -0
  182. data/vendor/SMAUG-T/src/indcpa.c +187 -0
  183. data/vendor/SMAUG-T/src/kem.c +194 -0
  184. data/vendor/SMAUG-T/src/key.c +102 -0
  185. data/vendor/SMAUG-T/src/pack.c +349 -0
  186. data/vendor/SMAUG-T/src/packring.c +503 -0
  187. data/vendor/SMAUG-T/src/poly.c +200 -0
  188. data/vendor/SMAUG-T/src/toomcook.c +256 -0
  189. data/vendor/SMAUG-T/src/verify.c +48 -0
  190. data/vendor/SOURCES.json +130 -0
  191. metadata +280 -0
@@ -0,0 +1,200 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #include "poly.h"
4
+ #include "toomcook.h"
5
+ #include <string.h>
6
+
7
+ #if SMAUGT_MODE == SMAUGT_MODET
8
+ /*************************************************
9
+ * Name: flipabs
10
+ *
11
+ * Description: Computes |(x mod q) - Q/2|
12
+ *
13
+ * Arguments: - uint16_t x: input coefficient
14
+ *
15
+ * Return: |(x mod q) - Q/2|
16
+ **************************************************/
17
+ uint16_t flipabs(uint16_t x) {
18
+ int16_t r, m;
19
+ r = x - (SMAUGT_MODULUS_SCALED_Q_HALF);
20
+ m = r >> 15;
21
+ return (r + m) ^ m;
22
+ }
23
+
24
+ /*************************************************
25
+ * Name: d2_ecd
26
+ *
27
+ * Description: Convert 16-byte message to polynomial
28
+ *
29
+ * Arguments: - poly *r: pointer to output polynomial
30
+ * - const uint8_t msg[SMAUGT_MSG_BYTES]: pointer to input message
31
+ **************************************************/
32
+ void d2_ecd(poly *r, const uint8_t msg[SMAUGT_MSG_BYTES]) {
33
+ unsigned int mask;
34
+ for (size_t i = 0; i < SMAUGT_MSG_BYTES; i++) {
35
+ for (size_t j = 0; j < 8; j++) {
36
+ mask = (msg[i] >> j) & 1;
37
+ mask = (mask * SMAUGT_MODULUS_SCALED_Q_HALF) &
38
+ SMAUGT_MODULUS_SCALED_Q_HALF;
39
+ r->coeffs[8 * i + j] = mask;
40
+ r->coeffs[8 * i + j + 128] = mask;
41
+ }
42
+ }
43
+ }
44
+
45
+ /*************************************************
46
+ * Name: d2_dcd
47
+ *
48
+ * Description: Convert polynomial to 16-byte message
49
+ *
50
+ * Arguments: - uint8_t msg[SMAUGT_MSG_BYTES]: pointer to output message
51
+ * - const poly *x: pointer to input polynomial
52
+ **************************************************/
53
+ void d2_dcd(uint8_t msg[SMAUGT_MSG_BYTES], const poly *x) {
54
+ uint16_t t;
55
+ for (size_t i = 0; i < SMAUGT_MSG_BYTES; i++)
56
+ msg[i] = 0;
57
+
58
+ for (size_t i = 0; i < SMAUGT_N / 2; i++) {
59
+ t = flipabs(x->coeffs[i]);
60
+ t += flipabs(x->coeffs[i + 128]);
61
+ t = t - SMAUGT_MODULUS_SCALED_Q_HALF;
62
+ t >>= 15;
63
+ msg[i >> 3] |= t << (i & 7);
64
+ }
65
+ }
66
+ #endif
67
+ /*************************************************
68
+ * Name: poly_add
69
+ *
70
+ * Description: Add two polynomials. no modular reduction is performed
71
+ *
72
+ * Arguments: - poly *r: pointer to output polynomial
73
+ * - const poly *a: pointer to first input polynomial
74
+ * - const poly *b: pointer to second input polynomial
75
+ **************************************************/
76
+ static inline void poly_add(poly *r, const poly *a, const poly *b) {
77
+ unsigned int i;
78
+ for (i = 0; i < SMAUGT_N; i++)
79
+ r->coeffs[i] = a->coeffs[i] + b->coeffs[i];
80
+ }
81
+
82
+ /*************************************************
83
+ * Name: poly_sub
84
+ *
85
+ * Description: Subtract two polynomials. no modular reduction is performed
86
+ *
87
+ * Arguments: - poly *r: pointer to output polynomial
88
+ * - const poly *a: pointer to first input polynomial
89
+ * - const poly *b: pointer to second input polynomial
90
+ **************************************************/
91
+ static inline void poly_sub(poly *r, const poly *a, const poly *b) {
92
+ unsigned int i;
93
+ for (i = 0; i < SMAUGT_N; i++)
94
+ r->coeffs[i] = a->coeffs[i] - b->coeffs[i];
95
+ }
96
+
97
+ #define vec_vec_mult SMAUGT_NAMESPACE(vec_vec_mult)
98
+ /*************************************************
99
+ * Name: vec_vec_mult
100
+ *
101
+ * Description: Multiply two vector of polynomials.
102
+ *
103
+ * Arguments: - poly *r: pointer to output polynomial
104
+ * - const polyvec *a: pointer to input vector of polynomials
105
+ * - const polyvec *b: pointer to input vector of polynomials
106
+ **************************************************/
107
+ void vec_vec_mult(poly *r, const polyvec *a, const polyvec *b) {
108
+ unsigned int i;
109
+ for (i = 0; i < SMAUGT_K; i++)
110
+ poly_mul_acc(a->vec[i].coeffs, b->vec[i].coeffs, r->coeffs);
111
+ }
112
+
113
+ /*************************************************
114
+ * Name: vec_vec_mult_add
115
+ *
116
+ * Description: Multiply two vectors of polynomials and add the result to output
117
+ * polynomial
118
+ *
119
+ * Arguments: - poly *r: pointer to output polynomial
120
+ * - const polyvec *a: pointer to input vector of polynomials
121
+ * - const polyvec *b: pointer to input vector of polynomials
122
+ * - uint8_t mod: modulus (16-SMAUGT_LOG_P) or (16-SMAUGT_LOG_Q)
123
+ **************************************************/
124
+ void vec_vec_mult_add(poly *r, const polyvec *a, const polyvec *b,
125
+ uint8_t mod) {
126
+ unsigned int i, j;
127
+ polyvec al;
128
+ poly res;
129
+
130
+ for (i = 0; i < SMAUGT_K; ++i)
131
+ for (j = 0; j < SMAUGT_N; ++j)
132
+ al.vec[i].coeffs[j] = a->vec[i].coeffs[j] >> mod;
133
+
134
+ memset(&res, 0, sizeof(poly));
135
+ vec_vec_mult(&res, &al, b);
136
+ for (j = 0; j < SMAUGT_N; ++j)
137
+ res.coeffs[j] <<= mod;
138
+
139
+ poly_add(r, r, &res);
140
+ }
141
+
142
+ /*************************************************
143
+ * Name: matrix_vec_mult_add
144
+ *
145
+ * Description: Transpose the matrix of polynomial and multiply it with the
146
+ * vector of polynomials.
147
+ *
148
+ * Arguments: - polyvec *r: pointer to output vector of polynomials
149
+ * - const polyvec a[SMAUGT_K]: pointer to input matrix of
150
+ * polynomials
151
+ * - const polyvec *b: pointer to input vector of polynomials
152
+ **************************************************/
153
+ void matrix_vec_mult_add(polyvec *r, const polyvec a[SMAUGT_K],
154
+ const polyvec *b) {
155
+ unsigned int i, j, k;
156
+ polyvec at;
157
+
158
+ for (i = 0; i < SMAUGT_K; ++i) {
159
+ for (j = 0; j < SMAUGT_K; ++j)
160
+ for (k = 0; k < SMAUGT_N; ++k)
161
+ at.vec[j].coeffs[k] =
162
+ a[j].vec[i].coeffs[k] >> SMAUGT_MODULUS_16_LOG_Q;
163
+
164
+ vec_vec_mult(&r->vec[i], &at, b);
165
+ for (j = 0; j < SMAUGT_N; ++j)
166
+ r->vec[i].coeffs[j] <<= SMAUGT_MODULUS_16_LOG_Q;
167
+ }
168
+ }
169
+
170
+ /*************************************************
171
+ * Name: matrix_vec_mult_sub
172
+ *
173
+ * Description: Multiply the matrix of polynomial with the vector of polynomial
174
+ * and subtract the result to output vector of polynomials.
175
+ *
176
+ * Arguments: - polyvec *r: pointer to input/output vector of polynomials
177
+ * - const polyvec a[SMAUGT_K]: pointer to input matrix of
178
+ * polynomials
179
+ * - const polyvec *b: pointer to input vector of polynomials
180
+ **************************************************/
181
+ void matrix_vec_mult_sub(polyvec *r, const polyvec a[SMAUGT_K],
182
+ const polyvec *b) {
183
+ unsigned int i, j, k;
184
+ polyvec al;
185
+ poly res;
186
+
187
+ for (i = 0; i < SMAUGT_K; ++i) {
188
+ for (j = 0; j < SMAUGT_K; ++j)
189
+ for (k = 0; k < SMAUGT_N; ++k)
190
+ al.vec[j].coeffs[k] =
191
+ a[i].vec[j].coeffs[k] >> SMAUGT_MODULUS_16_LOG_Q;
192
+
193
+ memset(&res, 0, sizeof(poly));
194
+ vec_vec_mult(&res, &al, b);
195
+ for (j = 0; j < SMAUGT_N; ++j)
196
+ res.coeffs[j] <<= SMAUGT_MODULUS_16_LOG_Q;
197
+
198
+ poly_sub(&r->vec[i], &r->vec[i], &res);
199
+ }
200
+ }
@@ -0,0 +1,256 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #include "toomcook.h"
4
+ #include <stdint.h>
5
+ #include <string.h>
6
+
7
+ #define SCHB_N 16
8
+
9
+ #define N_RES (SMAUGT_N << 1)
10
+ #define N_SB (SMAUGT_N >> 2)
11
+ #define N_SB_RES (2 * N_SB - 1)
12
+
13
+ #define OVERFLOWING_MUL(X, Y) ((uint16_t)((uint32_t)(X) * (uint32_t)(Y)))
14
+
15
+ #define KARATSUBA_N 64
16
+ #define karatsuba_simple SMAUGT_NAMESPACE(karatsuba_simple)
17
+ static void karatsuba_simple(const uint16_t *a_1, const uint16_t *b_1,
18
+ uint16_t *result_final) {
19
+ uint16_t d01[KARATSUBA_N / 2 - 1];
20
+ uint16_t d0123[KARATSUBA_N / 2 - 1];
21
+ uint16_t d23[KARATSUBA_N / 2 - 1];
22
+ uint16_t result_d01[KARATSUBA_N - 1];
23
+
24
+ int32_t i, j;
25
+
26
+ memset(result_d01, 0, (KARATSUBA_N - 1) * sizeof(uint16_t));
27
+ memset(d01, 0, (KARATSUBA_N / 2 - 1) * sizeof(uint16_t));
28
+ memset(d0123, 0, (KARATSUBA_N / 2 - 1) * sizeof(uint16_t));
29
+ memset(d23, 0, (KARATSUBA_N / 2 - 1) * sizeof(uint16_t));
30
+ memset(result_final, 0, (2 * KARATSUBA_N - 1) * sizeof(uint16_t));
31
+
32
+ uint16_t acc1, acc2, acc3, acc4, acc5, acc6, acc7, acc8, acc9, acc10;
33
+
34
+ for (i = 0; i < KARATSUBA_N / 4; i++) {
35
+ acc1 = a_1[i]; // a0
36
+ acc2 = a_1[i + KARATSUBA_N / 4]; // a1
37
+ acc3 = a_1[i + 2 * KARATSUBA_N / 4]; // a2
38
+ acc4 = a_1[i + 3 * KARATSUBA_N / 4]; // a3
39
+ for (j = 0; j < KARATSUBA_N / 4; j++) {
40
+
41
+ acc5 = b_1[j]; // b0
42
+ acc6 = b_1[j + KARATSUBA_N / 4]; // b1
43
+
44
+ result_final[i + j + 0 * KARATSUBA_N / 4] =
45
+ result_final[i + j + 0 * KARATSUBA_N / 4] +
46
+ OVERFLOWING_MUL(acc1, acc5);
47
+ result_final[i + j + 2 * KARATSUBA_N / 4] =
48
+ result_final[i + j + 2 * KARATSUBA_N / 4] +
49
+ OVERFLOWING_MUL(acc2, acc6);
50
+
51
+ acc7 = acc5 + acc6; // b01
52
+ acc8 = acc1 + acc2; // a01
53
+ d01[i + j] = d01[i + j] + (uint16_t)(acc7 * (uint64_t)acc8);
54
+ //--------------------------------------------------------
55
+
56
+ acc7 = b_1[j + 2 * KARATSUBA_N / 4]; // b2
57
+ acc8 = b_1[j + 3 * KARATSUBA_N / 4]; // b3
58
+ result_final[i + j + 4 * KARATSUBA_N / 4] =
59
+ result_final[i + j + 4 * KARATSUBA_N / 4] +
60
+ OVERFLOWING_MUL(acc7, acc3);
61
+
62
+ result_final[i + j + 6 * KARATSUBA_N / 4] =
63
+ result_final[i + j + 6 * KARATSUBA_N / 4] +
64
+ OVERFLOWING_MUL(acc8, acc4);
65
+
66
+ acc9 = acc3 + acc4;
67
+ acc10 = acc7 + acc8;
68
+ d23[i + j] = d23[i + j] + OVERFLOWING_MUL(acc9, acc10);
69
+ //--------------------------------------------------------
70
+
71
+ acc5 = acc5 + acc7; // b02
72
+ acc7 = acc1 + acc3; // a02
73
+ result_d01[i + j + 0 * KARATSUBA_N / 4] =
74
+ result_d01[i + j + 0 * KARATSUBA_N / 4] +
75
+ OVERFLOWING_MUL(acc5, acc7);
76
+
77
+ acc6 = acc6 + acc8; // b13
78
+ acc8 = acc2 + acc4;
79
+ result_d01[i + j + 2 * KARATSUBA_N / 4] =
80
+ result_d01[i + j + 2 * KARATSUBA_N / 4] +
81
+ OVERFLOWING_MUL(acc6, acc8);
82
+
83
+ acc5 = acc5 + acc6;
84
+ acc7 = acc7 + acc8;
85
+ d0123[i + j] = d0123[i + j] + OVERFLOWING_MUL(acc5, acc7);
86
+ }
87
+ }
88
+
89
+ // 2nd last stage
90
+
91
+ for (i = 0; i < KARATSUBA_N / 2 - 1; i++) {
92
+ d0123[i] = d0123[i] - result_d01[i + 0 * KARATSUBA_N / 4] -
93
+ result_d01[i + 2 * KARATSUBA_N / 4];
94
+ d01[i] = d01[i] - result_final[i + 0 * KARATSUBA_N / 4] -
95
+ result_final[i + 2 * KARATSUBA_N / 4];
96
+ d23[i] = d23[i] - result_final[i + 4 * KARATSUBA_N / 4] -
97
+ result_final[i + 6 * KARATSUBA_N / 4];
98
+ }
99
+
100
+ for (i = 0; i < KARATSUBA_N / 2 - 1; i++) {
101
+ result_d01[i + 1 * KARATSUBA_N / 4] =
102
+ result_d01[i + 1 * KARATSUBA_N / 4] + d0123[i];
103
+ result_final[i + 1 * KARATSUBA_N / 4] =
104
+ result_final[i + 1 * KARATSUBA_N / 4] + d01[i];
105
+ result_final[i + 5 * KARATSUBA_N / 4] =
106
+ result_final[i + 5 * KARATSUBA_N / 4] + d23[i];
107
+ }
108
+
109
+ // Last stage
110
+ for (i = 0; i < KARATSUBA_N - 1; i++) {
111
+ result_d01[i] =
112
+ result_d01[i] - result_final[i] - result_final[i + KARATSUBA_N];
113
+ }
114
+
115
+ for (i = 0; i < KARATSUBA_N - 1; i++) {
116
+ result_final[i + 1 * KARATSUBA_N / 2] =
117
+ result_final[i + 1 * KARATSUBA_N / 2] + result_d01[i];
118
+ }
119
+ }
120
+
121
+ #define toom_cook_4way SMAUGT_NAMESPACE(toom_cook_4way)
122
+ static void toom_cook_4way(const uint16_t *a1, const uint16_t *b1,
123
+ uint16_t *result) {
124
+ uint16_t inv3 = 43691, inv9 = 36409, inv15 = 61167;
125
+
126
+ uint16_t aw1[N_SB], aw2[N_SB], aw3[N_SB], aw4[N_SB], aw5[N_SB], aw6[N_SB],
127
+ aw7[N_SB];
128
+ uint16_t bw1[N_SB], bw2[N_SB], bw3[N_SB], bw4[N_SB], bw5[N_SB], bw6[N_SB],
129
+ bw7[N_SB];
130
+ uint16_t w1[N_SB_RES] = {0}, w2[N_SB_RES] = {0}, w3[N_SB_RES] = {0},
131
+ w4[N_SB_RES] = {0}, w5[N_SB_RES] = {0}, w6[N_SB_RES] = {0},
132
+ w7[N_SB_RES] = {0};
133
+ uint16_t r0, r1, r2, r3, r4, r5, r6, r7;
134
+ uint16_t *A0, *A1, *A2, *A3, *B0, *B1, *B2, *B3;
135
+ A0 = (uint16_t *)a1;
136
+ A1 = (uint16_t *)&a1[N_SB];
137
+ A2 = (uint16_t *)&a1[2 * N_SB];
138
+ A3 = (uint16_t *)&a1[3 * N_SB];
139
+ B0 = (uint16_t *)b1;
140
+ B1 = (uint16_t *)&b1[N_SB];
141
+ B2 = (uint16_t *)&b1[2 * N_SB];
142
+ B3 = (uint16_t *)&b1[3 * N_SB];
143
+
144
+ uint16_t *C;
145
+ C = result;
146
+
147
+ int i, j;
148
+
149
+ // EVALUATION
150
+ for (j = 0; j < N_SB; ++j) {
151
+ r0 = A0[j];
152
+ r1 = A1[j];
153
+ r2 = A2[j];
154
+ r3 = A3[j];
155
+ r4 = r0 + r2;
156
+ r5 = r1 + r3;
157
+ r6 = r4 + r5;
158
+ r7 = r4 - r5;
159
+ aw3[j] = r6;
160
+ aw4[j] = r7;
161
+ r4 = ((r0 << 2) + r2) << 1;
162
+ r5 = (r1 << 2) + r3;
163
+ r6 = r4 + r5;
164
+ r7 = r4 - r5;
165
+ aw5[j] = r6;
166
+ aw6[j] = r7;
167
+ r4 = (r3 << 3) + (r2 << 2) + (r1 << 1) + r0;
168
+ aw2[j] = r4;
169
+ aw7[j] = r0;
170
+ aw1[j] = r3;
171
+ }
172
+ for (j = 0; j < N_SB; ++j) {
173
+ r0 = B0[j];
174
+ r1 = B1[j];
175
+ r2 = B2[j];
176
+ r3 = B3[j];
177
+ r4 = r0 + r2;
178
+ r5 = r1 + r3;
179
+ r6 = r4 + r5;
180
+ r7 = r4 - r5;
181
+ bw3[j] = r6;
182
+ bw4[j] = r7;
183
+ r4 = ((r0 << 2) + r2) << 1;
184
+ r5 = (r1 << 2) + r3;
185
+ r6 = r4 + r5;
186
+ r7 = r4 - r5;
187
+ bw5[j] = r6;
188
+ bw6[j] = r7;
189
+ r4 = (r3 << 3) + (r2 << 2) + (r1 << 1) + r0;
190
+ bw2[j] = r4;
191
+ bw7[j] = r0;
192
+ bw1[j] = r3;
193
+ }
194
+
195
+ // MULTIPLICATION
196
+
197
+ karatsuba_simple(aw1, bw1, w1);
198
+ karatsuba_simple(aw2, bw2, w2);
199
+ karatsuba_simple(aw3, bw3, w3);
200
+ karatsuba_simple(aw4, bw4, w4);
201
+ karatsuba_simple(aw5, bw5, w5);
202
+ karatsuba_simple(aw6, bw6, w6);
203
+ karatsuba_simple(aw7, bw7, w7);
204
+
205
+ // INTERPOLATION
206
+ for (i = 0; i < N_SB_RES; ++i) {
207
+ r0 = w1[i];
208
+ r1 = w2[i];
209
+ r2 = w3[i];
210
+ r3 = w4[i];
211
+ r4 = w5[i];
212
+ r5 = w6[i];
213
+ r6 = w7[i];
214
+
215
+ r1 = r1 + r4;
216
+ r5 = r5 - r4;
217
+ r3 = ((r3 - r2) >> 1);
218
+ r4 = r4 - r0;
219
+ r4 = r4 - (r6 << 6);
220
+ r4 = (r4 << 1) + r5;
221
+ r2 = r2 + r3;
222
+ r1 = r1 - (r2 << 6) - r2;
223
+ r2 = r2 - r6;
224
+ r2 = r2 - r0;
225
+ r1 = r1 + 45 * r2;
226
+ r4 = (uint16_t)(((r4 - (r2 << 3)) * (uint32_t)inv3) >> 3);
227
+ r5 = r5 + r1;
228
+ r1 = (uint16_t)(((r1 + (r3 << 4)) * (uint32_t)inv9) >> 1);
229
+ r3 = -(r3 + r1);
230
+ r5 = (uint16_t)(((30 * r1 - r5) * (uint32_t)inv15) >> 2);
231
+ r2 = r2 - r4;
232
+ r1 = r1 - r5;
233
+
234
+ C[i] += r6;
235
+ C[i + 64] += r5;
236
+ C[i + 128] += r4;
237
+ C[i + 192] += r3;
238
+ C[i + 256] += r2;
239
+ C[i + 320] += r1;
240
+ C[i + 384] += r0;
241
+ }
242
+ }
243
+
244
+ /* res += a*b */
245
+ void poly_mul_acc(const int16_t a[SMAUGT_N], const int16_t b[SMAUGT_N],
246
+ int16_t res[SMAUGT_N]) {
247
+ uint16_t c[2 * SMAUGT_N] = {0};
248
+ int i;
249
+
250
+ toom_cook_4way((uint16_t *)a, (uint16_t *)b, c);
251
+
252
+ /* reduction */
253
+ for (i = SMAUGT_N; i < 2 * SMAUGT_N; i++) {
254
+ res[i - SMAUGT_N] += (c[i - SMAUGT_N] - c[i]);
255
+ }
256
+ }
@@ -0,0 +1,48 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #include <stddef.h>
4
+ #include <stdint.h>
5
+
6
+ #include "verify.h"
7
+
8
+ /*************************************************
9
+ * Name: verify
10
+ *
11
+ * Description: Compare two arrays for equality in constant time.
12
+ *
13
+ * Arguments: - const uint8_t *a: pointer to first byte array
14
+ * - const uint8_t *b: pointer to second byte array
15
+ * - size_t len: length of the byte arrays
16
+ *
17
+ * Return: 0 if the byte arrays are equal, 1 otherwise
18
+ **************************************************/
19
+ int verify(const uint8_t *a, const uint8_t *b, size_t len) {
20
+ size_t i;
21
+ uint8_t r = 0;
22
+
23
+ for (i = 0; i < len; i++)
24
+ r |= a[i] ^ b[i];
25
+
26
+ return (-(uint64_t)r) >> 63;
27
+ }
28
+
29
+ /*************************************************
30
+ * Name: cmov
31
+ *
32
+ * Description: Copy len bytes from x to r if b is 1;
33
+ * don't modify x if b is 0. Requires b to be in {0,1};
34
+ * assumes two's complement representation of negative integers.
35
+ * Runs in constant time.
36
+ *
37
+ * Arguments: - uint8_t *r: pointer to output byte array
38
+ * - const uint8_t *x: pointer to input byte array
39
+ * - size_t len: amount of bytes to be copied
40
+ * - uint8_t b: condition bit; has to be in {0,1}
41
+ **************************************************/
42
+ void cmov(uint8_t *r, const uint8_t *x, size_t len, uint8_t b) {
43
+ size_t i;
44
+
45
+ b = -b;
46
+ for (i = 0; i < len; i++)
47
+ r[i] ^= b & (r[i] ^ x[i]);
48
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "vendor/AIMer/aim2.c": "58892d4b14f346a2e1ad34cb090091c8b3de76e59d75d3eccb008a2dff444612",
3
+ "vendor/AIMer/aim2.h": "312f0fdf0d3fcbcb081ac7a7e883ae3253a708ac702caac6f3d338056e5cddd5",
4
+ "vendor/AIMer/aim2_constant.h": "63238e60c59944b18066d22788f91eeb8891f0805273e5c8c5a5279ad84de97b",
5
+ "vendor/AIMer/api.h": "b73308e7e8610d9403903cf124a460d979c45e03630699ffa3e23eaac029a418",
6
+ "vendor/AIMer/common/crypto_declassify.h": "191ae6c633e9de222b370a0efa48dd95abfeb7c5b357078b17d18898950903bb",
7
+ "vendor/AIMer/common/fips202.c": "4871baddebf2d4771d86b5088719123e2e43addce1a3c0eca75b4d18970ffc1f",
8
+ "vendor/AIMer/common/fips202.h": "bf99a54bc1988380418054a18bd5a14d059770e70c1aac23b6d9c914539168e0",
9
+ "vendor/AIMer/common/rng.h": "81209b4388f6171e71b2885fbdaf239435342d2621be3c3cfd34a50374bbc959",
10
+ "vendor/AIMer/field.h": "c5352c1e004e995e4b7a824ee8f2bcf48b2d3aa57fe9b46264558727fe0f5b6a",
11
+ "vendor/AIMer/field128.c": "b742225325a020ca778a564114ca86592d5cd0c4e042562677ee187dca2d7ae8",
12
+ "vendor/AIMer/field192.c": "1f21af8d218d8ee89408b153bfc3fdf6fa71c432fff7a3f9b54ee1f20d606a3d",
13
+ "vendor/AIMer/field256.c": "36865cf0c0538bb2364067b269a165257515fd4c07556a79c59296f3720d7e5b",
14
+ "vendor/AIMer/hash.c": "850f1304af20d732d5ce6524a9dd52d873aa386815e692215e850a44f9bd66f9",
15
+ "vendor/AIMer/hash.h": "d102028355f4f6581a93d3612332a75600ad3677a1c1bbe40bad86898bb4602e",
16
+ "vendor/AIMer/params/params-aimer-128f.h": "4faf07f3e506f8c052b5c4b482354bc3beef6ad108471030c006ef5a5694cd4a",
17
+ "vendor/AIMer/params/params-aimer-128s.h": "fba25c728a548c01673f99edaf98aac592a35d07d241483815357f3eb2f6f270",
18
+ "vendor/AIMer/params/params-aimer-192f.h": "95605422d913e1a5a5d24a756f316cb34eb35decfbc6f60155167022dca5b3fd",
19
+ "vendor/AIMer/params/params-aimer-192s.h": "4731c3d1118a9b5899e95566881da19b2b4c696b9106bfc608550c841655c1c1",
20
+ "vendor/AIMer/params/params-aimer-256f.h": "227b93396216e5c2ae7c88a85386c03635afa45dd0e4ecf88f86146285bf204a",
21
+ "vendor/AIMer/params/params-aimer-256s.h": "182d9ec1c5439359c136030e4afaa900d026f20d8aa52ac0026d40b79e5cd3db",
22
+ "vendor/AIMer/params.h": "c795218db56b490f66cef2074527e97f155aea0d32226f13b7fae5ead2f0bd1f",
23
+ "vendor/AIMer/sign.c": "811d55d41c3fc980ae20f0dcec09feaef0d14857edd06fe906fe64e51ed82ebb",
24
+ "vendor/AIMer/sign.h": "f6d588846998e5e49dea4f7e3258c8eaf103413f2300b9d8124f896ed088a884",
25
+ "vendor/AIMer/tree.c": "d47369c7875222349c13f6337d286979bce6ba128512e2ab985deddecc932d04",
26
+ "vendor/AIMer/tree.h": "fa9f007a052aa6e83ea1cde04ce4d194baec721218fc49abd53ee994c1187451",
27
+ "vendor/HAETAE/include/api.h": "a1b7b25a53efffdfaf404942164282677a3c568c927dc502e73824eee1ee50fb",
28
+ "vendor/HAETAE/include/common.h": "72c062d86e4c6b900fb1df18cfc892526d3ebec17dc2b417db4a76a2531fe5e1",
29
+ "vendor/HAETAE/include/config.h": "4a9c0d19d428ff0fa2e4163fa5641a966d3a1fa992f57e2a8c71fe5e2866110b",
30
+ "vendor/HAETAE/include/decompose.h": "363d32f5172eac507b652fda495236c11376a01d62cc45b163053b2b209251f9",
31
+ "vendor/HAETAE/include/encoding.h": "a6b45d7f5d6e09c7befa736abe834df44a72f1e0cddb67aff0cf1b3615461b76",
32
+ "vendor/HAETAE/include/fft.h": "9472c620a6c4883860803a2e879fed21a4b00af862ac11b5b2f236cc1974c5db",
33
+ "vendor/HAETAE/include/fips202.h": "c67414df97bba53295e3f5131507e295a2b729ca43c092e8309d419739ce00c1",
34
+ "vendor/HAETAE/include/fixpoint.h": "4f3542f526b6c356b1ae467d4ce44bc8468d8585a25f5325fca6926b156b33f9",
35
+ "vendor/HAETAE/include/ntt.h": "0b2b59261bf3579d5eb63d7e07f2ea48d336a71e26c5b818ee480e55117a4544",
36
+ "vendor/HAETAE/include/packing.h": "b533193fb3f8590adc257b77b04aa2ed6a11c161d09805affa99af75455c6b7a",
37
+ "vendor/HAETAE/include/params.h": "cba72f62fab3f53b4165510afecd1e3d9ebee63cd5e875d2a3e51437db3a5726",
38
+ "vendor/HAETAE/include/poly.h": "2fe642667d2fbbd871931d622d916dfe840dac71fbd0e1f4bdbbf57cbb0940e0",
39
+ "vendor/HAETAE/include/polyfix.h": "ba5b3b326f82de64667062788f0809a545cf285c07167cfb0286438485cb34da",
40
+ "vendor/HAETAE/include/polymat.h": "63ff13454523f9749dede09c258072552239d922e202f147aa86bb8832e083a2",
41
+ "vendor/HAETAE/include/polyvec.h": "a2a64cb0f89018a3fd01012401e9fd285f265c4721255cd9abe8028d4f3e4a60",
42
+ "vendor/HAETAE/include/randombytes.h": "9a4b4bda5951c3aa0c8af29b5e319dc8f93bf65f038ac0c0044df22039dc6ced",
43
+ "vendor/HAETAE/include/rans_byte.h": "54b1760d9c4b67d3ecbcbb4254f41210970541fdd899031163cdfb09dca88a9f",
44
+ "vendor/HAETAE/include/reduce.h": "e7238538fee0a6ab986aff9403651c652592980f1ad6e10453ebdbf5afea5a84",
45
+ "vendor/HAETAE/include/sampler.h": "208f24a6d34351036239eb4a35b4d0c4d24dbe8f73fb54b3e5bcc6c8a27dd5fd",
46
+ "vendor/HAETAE/include/symmetric.h": "0f5db9e019cb2dfb34a96986b8adcfd3f2ecafd6ba2955ca6ee8c5dd21001cc7",
47
+ "vendor/HAETAE/src/decompose.c": "16057e4232a74e3f1be035041cc4324dfa260a07a1a276c895afa3b2870fa574",
48
+ "vendor/HAETAE/src/encoding.c": "ad14676fd5a91959abc963334123cc7343b1415a236d6ffc9ae7e225a8270a0d",
49
+ "vendor/HAETAE/src/fft.c": "cdb2a8599234c754da5eccc25aca2f761793e7e97a317b5f18ef33698b3c44ad",
50
+ "vendor/HAETAE/src/fips202.c": "17e72eee44f8c4a47a39ac4804ce15236b30f2c3ec767c99f92a7838aa79ccab",
51
+ "vendor/HAETAE/src/fixpoint.c": "341cbaf1ecad123218e85dae19ccbbff0dde2df2cc3e5f90c9cdcbdf94246a05",
52
+ "vendor/HAETAE/src/ntt.c": "034e984a72a521aa9b7c9c92bb36dcf133b80f78b1ef85b1e8e556c02ebe6d36",
53
+ "vendor/HAETAE/src/packing.c": "1b4bb8775425cfa5c7c5f516bb00904c3dc5dfb3014d0d1e6750ab62ce763e07",
54
+ "vendor/HAETAE/src/poly.c": "bc2194fa0929674b6dee6f876b100b7637c99abf0a196cc53edbf77010720f17",
55
+ "vendor/HAETAE/src/polyfix.c": "cf7935818dae320471e87312468269c30fb21e3003b043cfc8f10dd12a2ed264",
56
+ "vendor/HAETAE/src/polymat.c": "c0c3f60690716d82e5cfefd9841f0300b0a4102211a85c525e5a1caacaa69cab",
57
+ "vendor/HAETAE/src/polyvec.c": "022d28e6dac529e4259b0db5501d6bf93bcb390765054e99f1104a9001889426",
58
+ "vendor/HAETAE/src/reduce.c": "8806547100d8cffe10c26bfa9ea79dc4747ef4d1e33ae559a1d4d71c097cdf00",
59
+ "vendor/HAETAE/src/sampler.c": "53548231f71cd56bfbe3c5218875ffb960bc3dc835b99fa9e46ee654d841b712",
60
+ "vendor/HAETAE/src/sign.c": "2dcc7c2a701f1bdaddba3dd12be9eefe571ca51432b54c9e8a67178f83a4ae5b",
61
+ "vendor/HAETAE/src/symmetric-shake.c": "68731ce2106de35b76b89787a7922340b50d663fd562cce566c08a2acb770417",
62
+ "vendor/SMAUG-T/include/api.h": "37aaa15592d0a64526de446927864eb2ac6e518a0f8ce59a6564baecf75083bb",
63
+ "vendor/SMAUG-T/include/cbd.h": "24742be57b3b3bc42938d2f2583b38fd5b74b3182ab96adb90a99cc83ceba5ce",
64
+ "vendor/SMAUG-T/include/ciphertext.h": "a54816cddb1d326b318fa3e30643b0ad9ba260eb4204a8f44f18654c011769e8",
65
+ "vendor/SMAUG-T/include/common.h": "b9bfe50157cb8090cac54acdc366abbf120d5f4fe679b23b1e2c0cb053668970",
66
+ "vendor/SMAUG-T/include/config.h": "20e87adc107580676b3297a700f9fff84986a1b4a77324a0328c37640e290ca7",
67
+ "vendor/SMAUG-T/include/dg.h": "803b5a6a7db75f0d3b71fc1207c33e69feedd601113720a3c200672260949a4e",
68
+ "vendor/SMAUG-T/include/fips202.h": "f7d3b2e001a7aff0b034f0b012e3bf33f34a739a15a0437002f58426175ee9fb",
69
+ "vendor/SMAUG-T/include/hash.h": "5d02e2325d21f063a10e0f5ad730ad48494651afaad34eb9d121dd01aa60937b",
70
+ "vendor/SMAUG-T/include/hwt.h": "e5a4d136e33dfd0f2b225888a058c6e8aad64070797fb3c882a63cf5939ae8c0",
71
+ "vendor/SMAUG-T/include/indcpa.h": "d870dcafdfb5dc490dba6cdb60d2ba4d860eb4089f836205b4165bbba0373112",
72
+ "vendor/SMAUG-T/include/key.h": "1a21a3db0636153f79e7b6745d6ed3182e74d2041587f0616745d6b9ff143183",
73
+ "vendor/SMAUG-T/include/pack.h": "e9217303e7e34397ed602c952075f91cb7a35b2aeda0d1a621bec15e81c5e44f",
74
+ "vendor/SMAUG-T/include/packring.h": "03ecb692793dc0523df23793e17f1f331bdd5e694be9c71d66df5aaaaa9e8af2",
75
+ "vendor/SMAUG-T/include/params.h": "5ef5666a889e1397de9daa092d9a32d0d06cd29df895cb797b75837d4d8938da",
76
+ "vendor/SMAUG-T/include/poly.h": "1602c5949f6c7f95f7c08d1e10c4e84a4844e5bc65825daf1e67966e274de2ca",
77
+ "vendor/SMAUG-T/include/randombytes.h": "727ddbb9b1c17116a43b4b731bb804be7d7267ff45adf63daf866376f3502495",
78
+ "vendor/SMAUG-T/include/toomcook.h": "3cd9611f83bd1856489aff175360672fee4882477557cc61329f9e60a1b24a84",
79
+ "vendor/SMAUG-T/include/verify.h": "3d5c280a0086901eefc4db4968f7c4853cf55bfd18ec4aac1c560456c315c66a",
80
+ "vendor/SMAUG-T/src/cbd.c": "82a164cd7402991e8702529b8804c201780cb5c9e173bd54738843cf4dc5427b",
81
+ "vendor/SMAUG-T/src/ciphertext.c": "919b4467829f7c543635827d351e30ce8b8014ba5e21cb722c44ef7f14a6d6cf",
82
+ "vendor/SMAUG-T/src/dg.c": "a3c72cd81120116a2608546e07ce442c8d83445051c516e2418f5022f5afc2d3",
83
+ "vendor/SMAUG-T/src/fips202.c": "3d41e7232b4581edc2cc0de7a6c041e773aec5736877357e4d3dbe660a65e9bf",
84
+ "vendor/SMAUG-T/src/hash.c": "a7d236420ede30b6294bdc4bbdd6e51c019a1dca39ea237f7337f19dc0b11e08",
85
+ "vendor/SMAUG-T/src/hwt.c": "f9da5c27f970f32a9d2f31a284c3d6b1fead3c8081906dd811777784f4ffabe3",
86
+ "vendor/SMAUG-T/src/indcpa.c": "1573a412921e2131fa321340ea00aa7637ccd1a0356e7a95f89e05dc1a2a4c72",
87
+ "vendor/SMAUG-T/src/kem.c": "fc542541ab26c62dc1f8f7b7f97e0ded0ab7921891aa311118f13afb6ba76c3a",
88
+ "vendor/SMAUG-T/src/key.c": "8c74792dd136aa10af43b2e71ac96b73912ca2fe3f5868303a1d8cc69dd1fafb",
89
+ "vendor/SMAUG-T/src/pack.c": "9256679884b392d5d7d7266d6e5b2733183c6ed1839cc0cb1f4b8248bfbef61c",
90
+ "vendor/SMAUG-T/src/packring.c": "fb6307cab3c4d9fb995acb8d9f459aa80ede71bd2639f209b4c0d0391ab426e0",
91
+ "vendor/SMAUG-T/src/poly.c": "d482cad2391551f1cdf1ceb7e99a5794df926ac4adc50d57cd9303d0d448c0f7",
92
+ "vendor/SMAUG-T/src/toomcook.c": "e8461ed10944b7bbfc0cf4232556f8cbaeb91f72a952a94a6f20a7a4cc21e56e",
93
+ "vendor/SMAUG-T/src/verify.c": "6d345e8b02f603fe8b8954b3a51a1f8ede63eac292fe971e66ea6c9128aa3e98",
94
+ "vendor/NTRUplus/NTRU+1152/api.h": "76275b8a5ae938aaabe94342237eff64e9eaa7b048b3de110485cc4fb98b704e",
95
+ "vendor/NTRUplus/NTRU+1152/fips202/fips202.c": "4871baddebf2d4771d86b5088719123e2e43addce1a3c0eca75b4d18970ffc1f",
96
+ "vendor/NTRUplus/NTRU+1152/fips202/fips202.h": "bf99a54bc1988380418054a18bd5a14d059770e70c1aac23b6d9c914539168e0",
97
+ "vendor/NTRUplus/NTRU+1152/kem.c": "2cd1f9c393a7ff8c414efbda932153b765d80f39e59bfb7e9760aa83da239862",
98
+ "vendor/NTRUplus/NTRU+1152/ntt.c": "77c9807a9566f01cd9e2df3f94f871c4858e91f8cc820900fc56e438b89fddec",
99
+ "vendor/NTRUplus/NTRU+1152/ntt.h": "ff0a9a18927593738820592c162455963e363ed138693bd8eeb74d149f2b5af5",
100
+ "vendor/NTRUplus/NTRU+1152/params.h": "3caa8223ce95acd081a2300e53ecdb9145c5b16215b414602954d117c06d78bd",
101
+ "vendor/NTRUplus/NTRU+1152/poly.c": "b6b53a43839a8f627c54ef2e25f765a3cf92b3a4fa465ba1591177c58fd46200",
102
+ "vendor/NTRUplus/NTRU+1152/poly.h": "e4c1fbc5453464881dba450fb22cf56edf2a02d1b078d4f6c7206b283be1f105",
103
+ "vendor/NTRUplus/NTRU+1152/randombytes.h": "5ece412ed498abfd892ecec23480910b76cb8ea1b605da10adc5584ede79f048",
104
+ "vendor/NTRUplus/NTRU+1152/symmetric.c": "e46dee314ce9f0aab46eb905c6e2f99c91d6751898aa7f052e09ccda136f12c2",
105
+ "vendor/NTRUplus/NTRU+1152/symmetric.h": "4734a7c10345908b9a9c5ce60f83a068140689a7a629101941a03d07b409b5c1",
106
+ "vendor/NTRUplus/NTRU+768/api.h": "76275b8a5ae938aaabe94342237eff64e9eaa7b048b3de110485cc4fb98b704e",
107
+ "vendor/NTRUplus/NTRU+768/fips202/fips202.c": "4871baddebf2d4771d86b5088719123e2e43addce1a3c0eca75b4d18970ffc1f",
108
+ "vendor/NTRUplus/NTRU+768/fips202/fips202.h": "bf99a54bc1988380418054a18bd5a14d059770e70c1aac23b6d9c914539168e0",
109
+ "vendor/NTRUplus/NTRU+768/kem.c": "2cd1f9c393a7ff8c414efbda932153b765d80f39e59bfb7e9760aa83da239862",
110
+ "vendor/NTRUplus/NTRU+768/ntt.c": "457e13722b81aa2f38faf8d88f6f67e4b7c872804fa5c23d404f24adc643a457",
111
+ "vendor/NTRUplus/NTRU+768/ntt.h": "1edc2346f1705cc98af0f64b2f0ac974f3d58ab9b6603ebbfa415f4e135f5851",
112
+ "vendor/NTRUplus/NTRU+768/params.h": "420bef5432154798239e1f09b18f31947e3afff248ff98d4e83346b84d27ebb8",
113
+ "vendor/NTRUplus/NTRU+768/poly.c": "afb0bb56bbe7172b058ce1acf03adbb60fe14e726e21052c84324a7cf7e56e23",
114
+ "vendor/NTRUplus/NTRU+768/poly.h": "e4c1fbc5453464881dba450fb22cf56edf2a02d1b078d4f6c7206b283be1f105",
115
+ "vendor/NTRUplus/NTRU+768/randombytes.h": "5ece412ed498abfd892ecec23480910b76cb8ea1b605da10adc5584ede79f048",
116
+ "vendor/NTRUplus/NTRU+768/symmetric.c": "e46dee314ce9f0aab46eb905c6e2f99c91d6751898aa7f052e09ccda136f12c2",
117
+ "vendor/NTRUplus/NTRU+768/symmetric.h": "4734a7c10345908b9a9c5ce60f83a068140689a7a629101941a03d07b409b5c1",
118
+ "vendor/NTRUplus/NTRU+864/api.h": "76275b8a5ae938aaabe94342237eff64e9eaa7b048b3de110485cc4fb98b704e",
119
+ "vendor/NTRUplus/NTRU+864/fips202/fips202.c": "4871baddebf2d4771d86b5088719123e2e43addce1a3c0eca75b4d18970ffc1f",
120
+ "vendor/NTRUplus/NTRU+864/fips202/fips202.h": "bf99a54bc1988380418054a18bd5a14d059770e70c1aac23b6d9c914539168e0",
121
+ "vendor/NTRUplus/NTRU+864/kem.c": "2cd1f9c393a7ff8c414efbda932153b765d80f39e59bfb7e9760aa83da239862",
122
+ "vendor/NTRUplus/NTRU+864/ntt.c": "e71c8e5eacbbae2d702ae8bb12eb77b34bd8a53fa1ed61cb3c517e1fcefb091d",
123
+ "vendor/NTRUplus/NTRU+864/ntt.h": "7af0edccfb9778b06472f26fe92641aa66eb86e4fb20872dd01d85b1affd43af",
124
+ "vendor/NTRUplus/NTRU+864/params.h": "39618b1552ab1f1f259ec2733211bca127b72948cec860563c1abe06ea132b50",
125
+ "vendor/NTRUplus/NTRU+864/poly.c": "fd23f07293637685058fb5286fc82984ea4d97f06405e9a280e9a6e52c051992",
126
+ "vendor/NTRUplus/NTRU+864/poly.h": "e4c1fbc5453464881dba450fb22cf56edf2a02d1b078d4f6c7206b283be1f105",
127
+ "vendor/NTRUplus/NTRU+864/randombytes.h": "5ece412ed498abfd892ecec23480910b76cb8ea1b605da10adc5584ede79f048",
128
+ "vendor/NTRUplus/NTRU+864/symmetric.c": "e46dee314ce9f0aab46eb905c6e2f99c91d6751898aa7f052e09ccda136f12c2",
129
+ "vendor/NTRUplus/NTRU+864/symmetric.h": "4734a7c10345908b9a9c5ce60f83a068140689a7a629101941a03d07b409b5c1"
130
+ }