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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +174 -0
- data/Rakefile +57 -0
- data/THIRD_PARTY_NOTICES.md +53 -0
- data/ext/kpqc/aimer128f/extconf.rb +4 -0
- data/ext/kpqc/aimer128s/extconf.rb +4 -0
- data/ext/kpqc/aimer192f/extconf.rb +4 -0
- data/ext/kpqc/aimer192s/extconf.rb +4 -0
- data/ext/kpqc/aimer256f/extconf.rb +4 -0
- data/ext/kpqc/aimer256s/extconf.rb +4 -0
- data/ext/kpqc/extconf_helper.rb +93 -0
- data/ext/kpqc/haetae2/extconf.rb +4 -0
- data/ext/kpqc/haetae3/extconf.rb +4 -0
- data/ext/kpqc/haetae5/extconf.rb +4 -0
- data/ext/kpqc/module.c +195 -0
- data/ext/kpqc/ntruplus1152/extconf.rb +4 -0
- data/ext/kpqc/ntruplus768/extconf.rb +4 -0
- data/ext/kpqc/ntruplus864/extconf.rb +4 -0
- data/ext/kpqc/randombytes.c +107 -0
- data/ext/kpqc/smaugt128/extconf.rb +4 -0
- data/ext/kpqc/smaugt192/extconf.rb +4 -0
- data/ext/kpqc/smaugt256/extconf.rb +4 -0
- data/ext/kpqc/timer/extconf.rb +4 -0
- data/kpqc.gemspec +41 -0
- data/lib/kpqc/aimer.rb +38 -0
- data/lib/kpqc/api.rb +129 -0
- data/lib/kpqc/haetae.rb +25 -0
- data/lib/kpqc/ntruplus.rb +25 -0
- data/lib/kpqc/smaugt.rb +29 -0
- data/lib/kpqc/types.rb +103 -0
- data/lib/kpqc/version.rb +6 -0
- data/lib/kpqc.rb +33 -0
- data/test/algorithm_test.rb +111 -0
- data/test/api_test.rb +52 -0
- data/test/interop.mjs +34 -0
- data/test/interop_test.rb +82 -0
- data/test/kat/aimer128f.rsp +10 -0
- data/test/kat/aimer128s.rsp +10 -0
- data/test/kat/aimer192f.rsp +10 -0
- data/test/kat/aimer192s.rsp +10 -0
- data/test/kat/aimer256f.rsp +10 -0
- data/test/kat/aimer256s.rsp +10 -0
- data/test/kat/haetae2.rsp +10 -0
- data/test/kat/haetae3.rsp +10 -0
- data/test/kat/haetae5.rsp +10 -0
- data/test/kat/ntruplus1152.rsp +8 -0
- data/test/kat/ntruplus768.rsp +8 -0
- data/test/kat/ntruplus864.rsp +8 -0
- data/test/kat/smaugt128.rsp +8 -0
- data/test/kat/smaugt192.rsp +8 -0
- data/test/kat/smaugt256.rsp +8 -0
- data/test/kat/timer.rsp +8 -0
- data/test/kat_drbg.rb +155 -0
- data/test/kat_test.rb +99 -0
- data/test/test_helper.rb +21 -0
- data/vendor/AIMer/LICENSE +21 -0
- data/vendor/AIMer/aim2.c +163 -0
- data/vendor/AIMer/aim2.h +36 -0
- data/vendor/AIMer/aim2_constant.h +74 -0
- data/vendor/AIMer/api.h +42 -0
- data/vendor/AIMer/common/crypto_declassify.h +7 -0
- data/vendor/AIMer/common/fips202.c +878 -0
- data/vendor/AIMer/common/fips202.h +166 -0
- data/vendor/AIMer/common/rng.h +56 -0
- data/vendor/AIMer/field.h +43 -0
- data/vendor/AIMer/field128.c +454 -0
- data/vendor/AIMer/field192.c +485 -0
- data/vendor/AIMer/field256.c +564 -0
- data/vendor/AIMer/hash.c +50 -0
- data/vendor/AIMer/hash.h +37 -0
- data/vendor/AIMer/params/params-aimer-128f.h +34 -0
- data/vendor/AIMer/params/params-aimer-128s.h +34 -0
- data/vendor/AIMer/params/params-aimer-192f.h +34 -0
- data/vendor/AIMer/params/params-aimer-192s.h +34 -0
- data/vendor/AIMer/params/params-aimer-256f.h +34 -0
- data/vendor/AIMer/params/params-aimer-256s.h +34 -0
- data/vendor/AIMer/params.h +5 -0
- data/vendor/AIMer/sign.c +631 -0
- data/vendor/AIMer/sign.h +40 -0
- data/vendor/AIMer/tree.c +75 -0
- data/vendor/AIMer/tree.h +26 -0
- data/vendor/HAETAE/LICENSE +22 -0
- data/vendor/HAETAE/include/api.h +54 -0
- data/vendor/HAETAE/include/common.h +12 -0
- data/vendor/HAETAE/include/config.h +42 -0
- data/vendor/HAETAE/include/decompose.h +19 -0
- data/vendor/HAETAE/include/encoding.h +20 -0
- data/vendor/HAETAE/include/fft.h +26 -0
- data/vendor/HAETAE/include/fips202.h +40 -0
- data/vendor/HAETAE/include/fixpoint.h +125 -0
- data/vendor/HAETAE/include/ntt.h +16 -0
- data/vendor/HAETAE/include/packing.h +58 -0
- data/vendor/HAETAE/include/params.h +117 -0
- data/vendor/HAETAE/include/poly.h +65 -0
- data/vendor/HAETAE/include/polyfix.h +65 -0
- data/vendor/HAETAE/include/polymat.h +32 -0
- data/vendor/HAETAE/include/polyvec.h +131 -0
- data/vendor/HAETAE/include/randombytes.h +39 -0
- data/vendor/HAETAE/include/rans_byte.h +335 -0
- data/vendor/HAETAE/include/reduce.h +31 -0
- data/vendor/HAETAE/include/sampler.h +23 -0
- data/vendor/HAETAE/include/symmetric.h +52 -0
- data/vendor/HAETAE/src/decompose.c +73 -0
- data/vendor/HAETAE/src/encoding.c +700 -0
- data/vendor/HAETAE/src/fft.c +235 -0
- data/vendor/HAETAE/src/fips202.c +745 -0
- data/vendor/HAETAE/src/fixpoint.c +143 -0
- data/vendor/HAETAE/src/ntt.c +98 -0
- data/vendor/HAETAE/src/packing.c +595 -0
- data/vendor/HAETAE/src/poly.c +371 -0
- data/vendor/HAETAE/src/polyfix.c +298 -0
- data/vendor/HAETAE/src/polymat.c +82 -0
- data/vendor/HAETAE/src/polyvec.c +534 -0
- data/vendor/HAETAE/src/reduce.c +96 -0
- data/vendor/HAETAE/src/sampler.c +310 -0
- data/vendor/HAETAE/src/sign.c +558 -0
- data/vendor/HAETAE/src/symmetric-shake.c +50 -0
- data/vendor/NTRUplus/LICENSE +21 -0
- data/vendor/NTRUplus/NTRU+1152/api.h +24 -0
- data/vendor/NTRUplus/NTRU+1152/fips202/fips202.c +878 -0
- data/vendor/NTRUplus/NTRU+1152/fips202/fips202.h +166 -0
- data/vendor/NTRUplus/NTRU+1152/kem.c +286 -0
- data/vendor/NTRUplus/NTRU+1152/ntt.c +394 -0
- data/vendor/NTRUplus/NTRU+1152/ntt.h +16 -0
- data/vendor/NTRUplus/NTRU+1152/params.h +18 -0
- data/vendor/NTRUplus/NTRU+1152/poly.c +318 -0
- data/vendor/NTRUplus/NTRU+1152/poly.h +31 -0
- data/vendor/NTRUplus/NTRU+1152/randombytes.h +9 -0
- data/vendor/NTRUplus/NTRU+1152/symmetric.c +39 -0
- data/vendor/NTRUplus/NTRU+1152/symmetric.h +12 -0
- data/vendor/NTRUplus/NTRU+768/api.h +24 -0
- data/vendor/NTRUplus/NTRU+768/fips202/fips202.c +878 -0
- data/vendor/NTRUplus/NTRU+768/fips202/fips202.h +166 -0
- data/vendor/NTRUplus/NTRU+768/kem.c +286 -0
- data/vendor/NTRUplus/NTRU+768/ntt.c +379 -0
- data/vendor/NTRUplus/NTRU+768/ntt.h +16 -0
- data/vendor/NTRUplus/NTRU+768/params.h +18 -0
- data/vendor/NTRUplus/NTRU+768/poly.c +320 -0
- data/vendor/NTRUplus/NTRU+768/poly.h +31 -0
- data/vendor/NTRUplus/NTRU+768/randombytes.h +9 -0
- data/vendor/NTRUplus/NTRU+768/symmetric.c +39 -0
- data/vendor/NTRUplus/NTRU+768/symmetric.h +12 -0
- data/vendor/NTRUplus/NTRU+864/api.h +24 -0
- data/vendor/NTRUplus/NTRU+864/fips202/fips202.c +878 -0
- data/vendor/NTRUplus/NTRU+864/fips202/fips202.h +166 -0
- data/vendor/NTRUplus/NTRU+864/kem.c +286 -0
- data/vendor/NTRUplus/NTRU+864/ntt.c +383 -0
- data/vendor/NTRUplus/NTRU+864/ntt.h +16 -0
- data/vendor/NTRUplus/NTRU+864/params.h +18 -0
- data/vendor/NTRUplus/NTRU+864/poly.c +314 -0
- data/vendor/NTRUplus/NTRU+864/poly.h +31 -0
- data/vendor/NTRUplus/NTRU+864/randombytes.h +9 -0
- data/vendor/NTRUplus/NTRU+864/symmetric.c +39 -0
- data/vendor/NTRUplus/NTRU+864/symmetric.h +12 -0
- data/vendor/SMAUG-T/LICENSE +22 -0
- data/vendor/SMAUG-T/include/api.h +37 -0
- data/vendor/SMAUG-T/include/cbd.h +15 -0
- data/vendor/SMAUG-T/include/ciphertext.h +45 -0
- data/vendor/SMAUG-T/include/common.h +12 -0
- data/vendor/SMAUG-T/include/config.h +48 -0
- data/vendor/SMAUG-T/include/dg.h +28 -0
- data/vendor/SMAUG-T/include/fips202.h +41 -0
- data/vendor/SMAUG-T/include/hash.h +21 -0
- data/vendor/SMAUG-T/include/hwt.h +28 -0
- data/vendor/SMAUG-T/include/indcpa.h +33 -0
- data/vendor/SMAUG-T/include/key.h +34 -0
- data/vendor/SMAUG-T/include/pack.h +78 -0
- data/vendor/SMAUG-T/include/packring.h +50 -0
- data/vendor/SMAUG-T/include/params.h +84 -0
- data/vendor/SMAUG-T/include/poly.h +41 -0
- data/vendor/SMAUG-T/include/randombytes.h +11 -0
- data/vendor/SMAUG-T/include/toomcook.h +14 -0
- data/vendor/SMAUG-T/include/verify.h +16 -0
- data/vendor/SMAUG-T/src/cbd.c +159 -0
- data/vendor/SMAUG-T/src/ciphertext.c +95 -0
- data/vendor/SMAUG-T/src/dg.c +112 -0
- data/vendor/SMAUG-T/src/fips202.c +745 -0
- data/vendor/SMAUG-T/src/hash.c +15 -0
- data/vendor/SMAUG-T/src/hwt.c +121 -0
- data/vendor/SMAUG-T/src/indcpa.c +187 -0
- data/vendor/SMAUG-T/src/kem.c +194 -0
- data/vendor/SMAUG-T/src/key.c +102 -0
- data/vendor/SMAUG-T/src/pack.c +349 -0
- data/vendor/SMAUG-T/src/packring.c +503 -0
- data/vendor/SMAUG-T/src/poly.c +200 -0
- data/vendor/SMAUG-T/src/toomcook.c +256 -0
- data/vendor/SMAUG-T/src/verify.c +48 -0
- data/vendor/SOURCES.json +130 -0
- 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
|
+
}
|
data/vendor/SOURCES.json
ADDED
|
@@ -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
|
+
}
|