1 // Copyright 2021 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 ///////////////////////////////////////////////////////////////////////////////
16
17 #include "tink/experimental/pqcrypto/signature/subtle/sphincs_subtle_utils.h"
18
19 #include <string>
20 #include <utility>
21
22 #include "gmock/gmock.h"
23 #include "gtest/gtest.h"
24 #include "absl/strings/str_cat.h"
25 #include "tink/experimental/pqcrypto/signature/subtle/sphincs_helper_pqclean.h"
26 #include "tink/util/status.h"
27 #include "tink/util/statusor.h"
28 #include "tink/util/test_matchers.h"
29
30 extern "C" {
31 #include "third_party/pqclean/crypto_sign/sphincs-haraka-128f-robust/api.h"
32 #include "third_party/pqclean/crypto_sign/sphincs-haraka-128f-simple/api.h"
33 #include "third_party/pqclean/crypto_sign/sphincs-haraka-128s-robust/api.h"
34 #include "third_party/pqclean/crypto_sign/sphincs-haraka-128s-simple/api.h"
35 #include "third_party/pqclean/crypto_sign/sphincs-haraka-192f-robust/api.h"
36 #include "third_party/pqclean/crypto_sign/sphincs-haraka-192f-simple/api.h"
37 #include "third_party/pqclean/crypto_sign/sphincs-haraka-192s-robust/api.h"
38 #include "third_party/pqclean/crypto_sign/sphincs-haraka-192s-simple/api.h"
39 #include "third_party/pqclean/crypto_sign/sphincs-haraka-256f-robust/api.h"
40 #include "third_party/pqclean/crypto_sign/sphincs-haraka-256f-simple/api.h"
41 #include "third_party/pqclean/crypto_sign/sphincs-haraka-256s-robust/api.h"
42 #include "third_party/pqclean/crypto_sign/sphincs-haraka-256s-simple/api.h"
43 #include "third_party/pqclean/crypto_sign/sphincs-sha256-128f-robust/api.h"
44 #include "third_party/pqclean/crypto_sign/sphincs-sha256-128f-simple/api.h"
45 #include "third_party/pqclean/crypto_sign/sphincs-sha256-128s-robust/api.h"
46 #include "third_party/pqclean/crypto_sign/sphincs-sha256-128s-simple/api.h"
47 #include "third_party/pqclean/crypto_sign/sphincs-sha256-192f-robust/api.h"
48 #include "third_party/pqclean/crypto_sign/sphincs-sha256-192f-simple/api.h"
49 #include "third_party/pqclean/crypto_sign/sphincs-sha256-192s-robust/api.h"
50 #include "third_party/pqclean/crypto_sign/sphincs-sha256-192s-simple/api.h"
51 #include "third_party/pqclean/crypto_sign/sphincs-sha256-256f-robust/api.h"
52 #include "third_party/pqclean/crypto_sign/sphincs-sha256-256f-simple/api.h"
53 #include "third_party/pqclean/crypto_sign/sphincs-sha256-256s-robust/api.h"
54 #include "third_party/pqclean/crypto_sign/sphincs-sha256-256s-simple/api.h"
55 #include "third_party/pqclean/crypto_sign/sphincs-shake256-128f-robust/api.h"
56 #include "third_party/pqclean/crypto_sign/sphincs-shake256-128f-simple/api.h"
57 #include "third_party/pqclean/crypto_sign/sphincs-shake256-128s-robust/api.h"
58 #include "third_party/pqclean/crypto_sign/sphincs-shake256-128s-simple/api.h"
59 #include "third_party/pqclean/crypto_sign/sphincs-shake256-192f-robust/api.h"
60 #include "third_party/pqclean/crypto_sign/sphincs-shake256-192f-simple/api.h"
61 #include "third_party/pqclean/crypto_sign/sphincs-shake256-192s-robust/api.h"
62 #include "third_party/pqclean/crypto_sign/sphincs-shake256-192s-simple/api.h"
63 #include "third_party/pqclean/crypto_sign/sphincs-shake256-256f-robust/api.h"
64 #include "third_party/pqclean/crypto_sign/sphincs-shake256-256f-simple/api.h"
65 #include "third_party/pqclean/crypto_sign/sphincs-shake256-256s-robust/api.h"
66 #include "third_party/pqclean/crypto_sign/sphincs-shake256-256s-simple/api.h"
67 }
68
69 namespace crypto {
70 namespace tink {
71 namespace subtle {
72 namespace {
73
74 using ::crypto::tink::test::IsOk;
75
76 struct SphincsUtilsTestCase {
77 std::string test_name;
78 SphincsHashType hash_type;
79 SphincsVariant variant;
80 SphincsSignatureType sig_length_type;
81 int32_t private_key_size;
82 int32_t public_key_size;
83 };
84
85 using SphincsUtilsTest = testing::TestWithParam<SphincsUtilsTestCase>;
86
TEST_P(SphincsUtilsTest,SphincsKeysLength)87 TEST_P(SphincsUtilsTest, SphincsKeysLength) {
88 const SphincsUtilsTestCase& test_case = GetParam();
89
90 SphincsParamsPqclean params = {
91 .hash_type = test_case.hash_type,
92 .variant = test_case.variant,
93 .sig_length_type = test_case.sig_length_type,
94 .private_key_size = test_case.private_key_size,
95 };
96
97 // Generate sphincs key pair.
98 util::StatusOr<SphincsKeyPair> key_pair = GenerateSphincsKeyPair(params);
99 ASSERT_THAT(key_pair, IsOk());
100
101 // Check keys size.
102 EXPECT_EQ(key_pair->GetPrivateKey().GetKey().size(),
103 test_case.private_key_size);
104 EXPECT_EQ(key_pair->GetPublicKey().GetKey().size(),
105 test_case.public_key_size);
106 }
107
TEST_P(SphincsUtilsTest,DifferentContent)108 TEST_P(SphincsUtilsTest, DifferentContent) {
109 const SphincsUtilsTestCase& test_case = GetParam();
110
111 SphincsParamsPqclean params = {
112 .hash_type = test_case.hash_type,
113 .variant = test_case.variant,
114 .sig_length_type = test_case.sig_length_type,
115 .private_key_size = test_case.private_key_size,
116 };
117
118 // Generate sphincs key pair.
119 util::StatusOr<SphincsKeyPair> key_pair = GenerateSphincsKeyPair(params);
120 ASSERT_THAT(key_pair, IsOk());
121
122 // Check keys content is different.
123 EXPECT_NE(util::SecretDataAsStringView(key_pair->GetPrivateKey().GetKey()),
124 key_pair->GetPublicKey().GetKey());
125 }
126
TEST(SphincsUtilsTest,InvalidPrivateKeySize)127 TEST(SphincsUtilsTest, InvalidPrivateKeySize) {
128 for (int keysize = 0; keysize <= kSphincsPrivateKeySize128; keysize++) {
129 if (keysize == kSphincsPrivateKeySize64 ||
130 keysize == kSphincsPrivateKeySize96 ||
131 keysize == kSphincsPrivateKeySize128) {
132 // Valid key size.
133 continue;
134 }
135 EXPECT_FALSE(ValidatePrivateKeySize(keysize).ok());
136 }
137 }
138
TEST(SphincsUtilsTest,InvalidPublicKeySize)139 TEST(SphincsUtilsTest, InvalidPublicKeySize) {
140 for (int keysize = 0; keysize <= kSphincsPrivateKeySize128; keysize++) {
141 if (keysize == kSphincsPublicKeySize32 ||
142 keysize == kSphincsPublicKeySize48 ||
143 keysize == kSphincsPublicKeySize64) {
144 // Valid key size.
145 continue;
146 }
147 EXPECT_FALSE(ValidatePublicKeySize(keysize).ok());
148 }
149 }
150
TEST_P(SphincsUtilsTest,ValidParams)151 TEST_P(SphincsUtilsTest, ValidParams) {
152 const SphincsUtilsTestCase& test_case = GetParam();
153
154 SphincsParamsPqclean params = {
155 .hash_type = test_case.hash_type,
156 .variant = test_case.variant,
157 .sig_length_type = test_case.sig_length_type,
158 .private_key_size = test_case.private_key_size,
159 };
160
161 EXPECT_TRUE(ValidateParams(params).ok());
162 }
163
TEST(SphincsUtilsTest,InvalidHashType)164 TEST(SphincsUtilsTest, InvalidHashType) {
165 SphincsParamsPqclean params = {
166 .hash_type = SphincsHashType::HASH_TYPE_UNSPECIFIED,
167 .variant = SphincsVariant::ROBUST,
168 .sig_length_type = SphincsSignatureType::FAST_SIGNING,
169 .private_key_size = kSphincsPrivateKeySize64,
170 };
171
172 EXPECT_FALSE(ValidateParams(params).ok());
173 }
174
TEST(SphincsUtilsTest,InvalidVariant)175 TEST(SphincsUtilsTest, InvalidVariant) {
176 SphincsParamsPqclean params = {
177 .hash_type = SphincsHashType::HARAKA,
178 .variant = SphincsVariant::VARIANT_UNSPECIFIED,
179 .sig_length_type = SphincsSignatureType::FAST_SIGNING,
180 .private_key_size = kSphincsPrivateKeySize64,
181 };
182
183 EXPECT_FALSE(ValidateParams(params).ok());
184 }
185
TEST(SphincsUtilsTest,InvalidSignatureType)186 TEST(SphincsUtilsTest, InvalidSignatureType) {
187 SphincsParamsPqclean params = {
188 .hash_type = SphincsHashType::HARAKA,
189 .variant = SphincsVariant::ROBUST,
190 .sig_length_type = SphincsSignatureType::SIG_TYPE_UNSPECIFIED,
191 .private_key_size = kSphincsPrivateKeySize64,
192 };
193
194 EXPECT_FALSE(ValidateParams(params).ok());
195 }
196
197 INSTANTIATE_TEST_SUITE_P(
198 SphincsUtilsTests, SphincsUtilsTest,
199 testing::ValuesIn<SphincsUtilsTestCase>(
200 {{"SPHINCSHARAKA128FROBUST", SphincsHashType::HARAKA,
201 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
202 PQCLEAN_SPHINCSHARAKA128FROBUST_CRYPTO_SECRETKEYBYTES,
203 PQCLEAN_SPHINCSHARAKA128FROBUST_CRYPTO_PUBLICKEYBYTES},
204 {"SPHINCSHARAKA128SROBUST", SphincsHashType::HARAKA,
205 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
206 PQCLEAN_SPHINCSHARAKA128SROBUST_CRYPTO_SECRETKEYBYTES,
207 PQCLEAN_SPHINCSHARAKA128SROBUST_CRYPTO_PUBLICKEYBYTES},
208 {"SPHINCSHARAKA128FSIMPLE", SphincsHashType::HARAKA,
209 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
210 PQCLEAN_SPHINCSHARAKA128FSIMPLE_CRYPTO_SECRETKEYBYTES,
211 PQCLEAN_SPHINCSHARAKA128FSIMPLE_CRYPTO_PUBLICKEYBYTES},
212 {"SPHINCSHARAKA128SSIMPLE", SphincsHashType::HARAKA,
213 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
214 PQCLEAN_SPHINCSHARAKA128SSIMPLE_CRYPTO_SECRETKEYBYTES,
215 PQCLEAN_SPHINCSHARAKA128SSIMPLE_CRYPTO_PUBLICKEYBYTES},
216
217 {"SPHINCSHARAKA192FROBUST", SphincsHashType::HARAKA,
218 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
219 PQCLEAN_SPHINCSHARAKA192FROBUST_CRYPTO_SECRETKEYBYTES,
220 PQCLEAN_SPHINCSHARAKA192FROBUST_CRYPTO_PUBLICKEYBYTES},
221 {"SPHINCSHARAKA192SROBUST", SphincsHashType::HARAKA,
222 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
223 PQCLEAN_SPHINCSHARAKA192SROBUST_CRYPTO_SECRETKEYBYTES,
224 PQCLEAN_SPHINCSHARAKA192SROBUST_CRYPTO_PUBLICKEYBYTES},
225 {"SPHINCSHARAKA192FSIMPLE", SphincsHashType::HARAKA,
226 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
227 PQCLEAN_SPHINCSHARAKA192FSIMPLE_CRYPTO_SECRETKEYBYTES,
228 PQCLEAN_SPHINCSHARAKA192FSIMPLE_CRYPTO_PUBLICKEYBYTES},
229 {"SPHINCSHARAKA192SSIMPLE", SphincsHashType::HARAKA,
230 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
231 PQCLEAN_SPHINCSHARAKA192SSIMPLE_CRYPTO_SECRETKEYBYTES,
232 PQCLEAN_SPHINCSHARAKA192SSIMPLE_CRYPTO_PUBLICKEYBYTES},
233
234 {"SPHINCSHARAKA256FROBUST", SphincsHashType::HARAKA,
235 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
236 PQCLEAN_SPHINCSHARAKA256FROBUST_CRYPTO_SECRETKEYBYTES,
237 PQCLEAN_SPHINCSHARAKA256FROBUST_CRYPTO_PUBLICKEYBYTES},
238 {"SPHINCSHARAKA256SROBUST", SphincsHashType::HARAKA,
239 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
240 PQCLEAN_SPHINCSHARAKA256SROBUST_CRYPTO_SECRETKEYBYTES,
241 PQCLEAN_SPHINCSHARAKA256SROBUST_CRYPTO_PUBLICKEYBYTES},
242 {"SPHINCSHARAKA256FSIMPLE", SphincsHashType::HARAKA,
243 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
244 PQCLEAN_SPHINCSHARAKA256FSIMPLE_CRYPTO_SECRETKEYBYTES,
245 PQCLEAN_SPHINCSHARAKA256FSIMPLE_CRYPTO_PUBLICKEYBYTES},
246 {"SPHINCSHARAKA256SSIMPLE", SphincsHashType::HARAKA,
247 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
248 PQCLEAN_SPHINCSHARAKA256SSIMPLE_CRYPTO_SECRETKEYBYTES,
249 PQCLEAN_SPHINCSHARAKA256SSIMPLE_CRYPTO_PUBLICKEYBYTES},
250
251 {"SPHINCSSHA256128FROBUST", SphincsHashType::SHA256,
252 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
253 PQCLEAN_SPHINCSSHA256128FROBUST_CRYPTO_SECRETKEYBYTES,
254 PQCLEAN_SPHINCSSHA256128FROBUST_CRYPTO_PUBLICKEYBYTES},
255 {"SPHINCSSHA256128SROBUST", SphincsHashType::SHA256,
256 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
257 PQCLEAN_SPHINCSSHA256128SROBUST_CRYPTO_SECRETKEYBYTES,
258 PQCLEAN_SPHINCSSHA256128SROBUST_CRYPTO_PUBLICKEYBYTES},
259 {"SPHINCSSHA256128FSIMPLE", SphincsHashType::SHA256,
260 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
261 PQCLEAN_SPHINCSSHA256128FSIMPLE_CRYPTO_SECRETKEYBYTES,
262 PQCLEAN_SPHINCSSHA256128FSIMPLE_CRYPTO_PUBLICKEYBYTES},
263 {"SPHINCSSHA256128SSIMPLE", SphincsHashType::SHA256,
264 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
265 PQCLEAN_SPHINCSSHA256128SSIMPLE_CRYPTO_SECRETKEYBYTES,
266 PQCLEAN_SPHINCSSHA256128SSIMPLE_CRYPTO_PUBLICKEYBYTES},
267
268 {"SPHINCSSHA256192FROBUST", SphincsHashType::SHA256,
269 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
270 PQCLEAN_SPHINCSSHA256192FROBUST_CRYPTO_SECRETKEYBYTES,
271 PQCLEAN_SPHINCSSHA256192FROBUST_CRYPTO_PUBLICKEYBYTES},
272 {"SPHINCSSHA256192SROBUST", SphincsHashType::SHA256,
273 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
274 PQCLEAN_SPHINCSSHA256192SROBUST_CRYPTO_SECRETKEYBYTES,
275 PQCLEAN_SPHINCSSHA256192SROBUST_CRYPTO_PUBLICKEYBYTES},
276 {"SPHINCSSHA256192FSIMPLE", SphincsHashType::SHA256,
277 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
278 PQCLEAN_SPHINCSSHA256192FSIMPLE_CRYPTO_SECRETKEYBYTES,
279 PQCLEAN_SPHINCSSHA256192FSIMPLE_CRYPTO_PUBLICKEYBYTES},
280 {"SPHINCSSHA256192SSIMPLE", SphincsHashType::SHA256,
281 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
282 PQCLEAN_SPHINCSSHA256192SSIMPLE_CRYPTO_SECRETKEYBYTES,
283 PQCLEAN_SPHINCSSHA256192SSIMPLE_CRYPTO_PUBLICKEYBYTES},
284
285 {"SPHINCSSHA256256FROBUST", SphincsHashType::SHA256,
286 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
287 PQCLEAN_SPHINCSSHA256256FROBUST_CRYPTO_SECRETKEYBYTES,
288 PQCLEAN_SPHINCSSHA256256FROBUST_CRYPTO_PUBLICKEYBYTES},
289 {"SPHINCSSHA256256SROBUST", SphincsHashType::SHA256,
290 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
291 PQCLEAN_SPHINCSSHA256256SROBUST_CRYPTO_SECRETKEYBYTES,
292 PQCLEAN_SPHINCSSHA256256SROBUST_CRYPTO_PUBLICKEYBYTES},
293 {"SPHINCSSHA256256FSIMPLE", SphincsHashType::SHA256,
294 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
295 PQCLEAN_SPHINCSSHA256256FSIMPLE_CRYPTO_SECRETKEYBYTES,
296 PQCLEAN_SPHINCSSHA256256FSIMPLE_CRYPTO_PUBLICKEYBYTES},
297 {"SPHINCSSHA256256SSIMPLE", SphincsHashType::SHA256,
298 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
299 PQCLEAN_SPHINCSSHA256256SSIMPLE_CRYPTO_SECRETKEYBYTES,
300 PQCLEAN_SPHINCSSHA256256SSIMPLE_CRYPTO_PUBLICKEYBYTES},
301
302 {"SPHINCSSHAKE256128FROBUST", SphincsHashType::SHAKE256,
303 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
304 PQCLEAN_SPHINCSSHAKE256128FROBUST_CRYPTO_SECRETKEYBYTES,
305 PQCLEAN_SPHINCSSHAKE256128FROBUST_CRYPTO_PUBLICKEYBYTES},
306 {"SPHINCSSHAKE256128SROBUST", SphincsHashType::SHAKE256,
307 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
308 PQCLEAN_SPHINCSSHAKE256128SROBUST_CRYPTO_SECRETKEYBYTES,
309 PQCLEAN_SPHINCSSHAKE256128SROBUST_CRYPTO_PUBLICKEYBYTES},
310 {"SPHINCSSHAKE256128FSIMPLE", SphincsHashType::SHAKE256,
311 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
312 PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CRYPTO_SECRETKEYBYTES,
313 PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CRYPTO_PUBLICKEYBYTES},
314 {"SPHINCSSHAKE256128SSIMPLE", SphincsHashType::SHAKE256,
315 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
316 PQCLEAN_SPHINCSSHAKE256128SSIMPLE_CRYPTO_SECRETKEYBYTES,
317 PQCLEAN_SPHINCSSHAKE256128SSIMPLE_CRYPTO_PUBLICKEYBYTES},
318
319 {"SPHINCSSHAKE256192FROBUST", SphincsHashType::SHAKE256,
320 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
321 PQCLEAN_SPHINCSSHAKE256192FROBUST_CRYPTO_SECRETKEYBYTES,
322 PQCLEAN_SPHINCSSHAKE256192FROBUST_CRYPTO_PUBLICKEYBYTES},
323 {"SPHINCSSHAKE256192SROBUST", SphincsHashType::SHAKE256,
324 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
325 PQCLEAN_SPHINCSSHAKE256192SROBUST_CRYPTO_SECRETKEYBYTES,
326 PQCLEAN_SPHINCSSHAKE256192SROBUST_CRYPTO_PUBLICKEYBYTES},
327 {"SPHINCSSHAKE256192FSIMPLE", SphincsHashType::SHAKE256,
328 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
329 PQCLEAN_SPHINCSSHAKE256192FSIMPLE_CRYPTO_SECRETKEYBYTES,
330 PQCLEAN_SPHINCSSHAKE256192FSIMPLE_CRYPTO_PUBLICKEYBYTES},
331 {"SPHINCSSHAKE256192SSIMPLE", SphincsHashType::SHAKE256,
332 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
333 PQCLEAN_SPHINCSSHAKE256192SSIMPLE_CRYPTO_SECRETKEYBYTES,
334 PQCLEAN_SPHINCSSHAKE256192SSIMPLE_CRYPTO_PUBLICKEYBYTES},
335
336 {"SPHINCSSHAKE256256FROBUST", SphincsHashType::SHAKE256,
337 SphincsVariant::ROBUST, SphincsSignatureType::FAST_SIGNING,
338 PQCLEAN_SPHINCSSHAKE256256FROBUST_CRYPTO_SECRETKEYBYTES,
339 PQCLEAN_SPHINCSSHAKE256256FROBUST_CRYPTO_PUBLICKEYBYTES},
340 {"SPHINCSSHAKE256256SROBUST", SphincsHashType::SHAKE256,
341 SphincsVariant::ROBUST, SphincsSignatureType::SMALL_SIGNATURE,
342 PQCLEAN_SPHINCSSHAKE256256SROBUST_CRYPTO_SECRETKEYBYTES,
343 PQCLEAN_SPHINCSSHAKE256256SROBUST_CRYPTO_PUBLICKEYBYTES},
344 {"SPHINCSSHAKE256256FSIMPLE", SphincsHashType::SHAKE256,
345 SphincsVariant::SIMPLE, SphincsSignatureType::FAST_SIGNING,
346 PQCLEAN_SPHINCSSHAKE256256FSIMPLE_CRYPTO_SECRETKEYBYTES,
347 PQCLEAN_SPHINCSSHAKE256256FSIMPLE_CRYPTO_PUBLICKEYBYTES},
348 {"SPHINCSSHAKE256256SSIMPLE", SphincsHashType::SHAKE256,
349 SphincsVariant::SIMPLE, SphincsSignatureType::SMALL_SIGNATURE,
350 PQCLEAN_SPHINCSSHAKE256256SSIMPLE_CRYPTO_SECRETKEYBYTES,
351 PQCLEAN_SPHINCSSHAKE256256SSIMPLE_CRYPTO_PUBLICKEYBYTES}}),
__anonf13886d70202(const testing::TestParamInfo<SphincsUtilsTest::ParamType>& info) 352 [](const testing::TestParamInfo<SphincsUtilsTest::ParamType>& info) {
353 return info.param.test_name;
354 });
355
356 } // namespace
357 } // namespace subtle
358 } // namespace tink
359 } // namespace crypto
360