• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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