• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 5079590438

25 May 2023 12:28PM UTC coverage: 92.228% (+0.5%) from 91.723%
5079590438

Pull #3502

github

Pull Request #3502: Apply clang-format to the codebase

75589 of 81959 relevant lines covered (92.23%)

12139530.51 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.26
/src/lib/pubkey/xmss/xmss_parameters.cpp
1
/*
2
 * XMSS Parameters
3
 * Descibes a signature method for XMSS, as defined in:
4
 * [1] XMSS: Extended Hash-Based Signatures,
5
 *     Request for Comments: 8391
6
 *     Release: May 2018.
7
 *     https://datatracker.ietf.org/doc/rfc8391/
8
 *
9
 * (C) 2016,2017,2018 Matthias Gierlings
10
 *
11
 * Botan is released under the Simplified BSD License (see license.txt)
12
 **/
13

14
#include <botan/xmss_parameters.h>
15

16
#include <botan/exceptn.h>
17
#include <botan/internal/fmt.h>
18

19
namespace Botan {
20

21
XMSS_Parameters::xmss_algorithm_t XMSS_Parameters::xmss_id_from_string(std::string_view param_set) {
10✔
22
   if(param_set == "XMSS-SHA2_10_256") {
13✔
23
      return XMSS_SHA2_10_256;
3✔
24
   }
25
   if(param_set == "XMSS-SHA2_16_256") {
10✔
26
      return XMSS_SHA2_16_256;
×
27
   }
28
   if(param_set == "XMSS-SHA2_20_256") {
10✔
29
      return XMSS_SHA2_20_256;
×
30
   }
31
   if(param_set == "XMSS-SHA2_10_512") {
9✔
32
      return XMSS_SHA2_10_512;
1✔
33
   }
34
   if(param_set == "XMSS-SHA2_16_512") {
8✔
35
      return XMSS_SHA2_16_512;
×
36
   }
37
   if(param_set == "XMSS-SHA2_20_512") {
8✔
38
      return XMSS_SHA2_20_512;
×
39
   }
40
   if(param_set == "XMSS-SHAKE_10_256") {
7✔
41
      return XMSS_SHAKE_10_256;
1✔
42
   }
43
   if(param_set == "XMSS-SHAKE_16_256") {
6✔
44
      return XMSS_SHAKE_16_256;
×
45
   }
46
   if(param_set == "XMSS-SHAKE_20_256") {
6✔
47
      return XMSS_SHAKE_20_256;
×
48
   }
49
   if(param_set == "XMSS-SHAKE_10_512") {
5✔
50
      return XMSS_SHAKE_10_512;
1✔
51
   }
52
   if(param_set == "XMSS-SHAKE_16_512") {
4✔
53
      return XMSS_SHAKE_16_512;
×
54
   }
55
   if(param_set == "XMSS-SHAKE_20_512") {
4✔
56
      return XMSS_SHAKE_20_512;
×
57
   }
58
   if(param_set == "XMSS-SHA2_10_192") {
4✔
59
      return XMSS_SHA2_10_192;
2✔
60
   }
61
   if(param_set == "XMSS-SHA2_16_192") {
2✔
62
      return XMSS_SHA2_16_192;
×
63
   }
64
   if(param_set == "XMSS-SHA2_20_192") {
2✔
65
      return XMSS_SHA2_20_192;
×
66
   }
67
   if(param_set == "XMSS-SHAKE256_10_256") {
3✔
68
      return XMSS_SHAKE256_10_256;
1✔
69
   }
70
   if(param_set == "XMSS-SHAKE256_16_256") {
2✔
71
      return XMSS_SHAKE256_16_256;
×
72
   }
73
   if(param_set == "XMSS-SHAKE256_20_256") {
2✔
74
      return XMSS_SHAKE256_20_256;
×
75
   }
76
   if(param_set == "XMSS-SHAKE256_10_192") {
1✔
77
      return XMSS_SHAKE256_10_192;
1✔
78
   }
79
   if(param_set == "XMSS-SHAKE256_16_192") {
×
80
      return XMSS_SHAKE256_16_192;
×
81
   }
82
   if(param_set == "XMSS-SHAKE256_20_192") {
×
83
      return XMSS_SHAKE256_20_192;
×
84
   }
85

86
   throw Lookup_Error(fmt("Unknown XMSS algorithm param '{}'", param_set));
×
87
}
88

89
XMSS_Parameters::XMSS_Parameters(std::string_view param_set) :
3✔
90
      XMSS_Parameters(XMSS_Parameters::xmss_id_from_string(param_set)) {}
3✔
91

92
XMSS_Parameters::XMSS_Parameters(xmss_algorithm_t oid) : m_oid(oid) {
2,908✔
93
   switch(oid) {
2,908✔
94
      case XMSS_SHA2_10_256:
322✔
95
         m_element_size = 32;
322✔
96
         m_hash_id_size = 32;
322✔
97
         m_w = 16;
322✔
98
         m_len = 67;
322✔
99
         m_tree_height = 10;
322✔
100
         m_name = "XMSS-SHA2_10_256";
322✔
101
         m_hash_name = "SHA-256";
322✔
102
         m_strength = 256;
322✔
103
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_256;
322✔
104
         break;
322✔
105
      case XMSS_SHA2_16_256:
125✔
106
         m_element_size = 32;
125✔
107
         m_hash_id_size = 32;
125✔
108
         m_w = 16;
125✔
109
         m_len = 67;
125✔
110
         m_tree_height = 16;
125✔
111
         m_name = "XMSS-SHA2_16_256";
125✔
112
         m_hash_name = "SHA-256";
125✔
113
         m_strength = 256;
125✔
114
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_256;
125✔
115
         break;
125✔
116
      case XMSS_SHA2_20_256:
125✔
117
         m_element_size = 32;
125✔
118
         m_hash_id_size = 32;
125✔
119
         m_w = 16;
125✔
120
         m_len = 67;
125✔
121
         m_tree_height = 20;
125✔
122
         m_name = "XMSS-SHA2_20_256";
125✔
123
         m_hash_name = "SHA-256";
125✔
124
         m_strength = 256;
125✔
125
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_256;
125✔
126
         break;
125✔
127
      case XMSS_SHA2_10_512:
301✔
128
         m_element_size = 64;
301✔
129
         m_hash_id_size = 64;
301✔
130
         m_w = 16;
301✔
131
         m_len = 131;
301✔
132
         m_tree_height = 10;
301✔
133
         m_name = "XMSS-SHA2_10_512";
301✔
134
         m_hash_name = "SHA-512";
301✔
135
         m_strength = 512;
301✔
136
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_512;
301✔
137
         break;
301✔
138
      case XMSS_SHA2_16_512:
125✔
139
         m_element_size = 64;
125✔
140
         m_hash_id_size = 64;
125✔
141
         m_w = 16;
125✔
142
         m_len = 131;
125✔
143
         m_tree_height = 16;
125✔
144
         m_name = "XMSS-SHA2_16_512";
125✔
145
         m_hash_name = "SHA-512";
125✔
146
         m_strength = 512;
125✔
147
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_512;
125✔
148
         break;
125✔
149
      case XMSS_SHA2_20_512:
125✔
150
         m_element_size = 64;
125✔
151
         m_hash_id_size = 64;
125✔
152
         m_w = 16;
125✔
153
         m_len = 131;
125✔
154
         m_tree_height = 20;
125✔
155
         m_name = "XMSS-SHA2_20_512";
125✔
156
         m_hash_name = "SHA-512";
125✔
157
         m_strength = 512;
125✔
158
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_512;
125✔
159
         break;
125✔
160
      case XMSS_SHAKE_10_256:
204✔
161
         m_element_size = 32;
204✔
162
         m_hash_id_size = 32;
204✔
163
         m_w = 16;
204✔
164
         m_len = 67;
204✔
165
         m_tree_height = 10;
204✔
166
         m_name = "XMSS-SHAKE_10_256";
204✔
167
         m_hash_name = "SHAKE-128(256)";
204✔
168
         m_strength = 256;
204✔
169
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256;
204✔
170
         break;
204✔
171
      case XMSS_SHAKE_16_256:
125✔
172
         m_element_size = 32;
125✔
173
         m_hash_id_size = 32;
125✔
174
         m_w = 16;
125✔
175
         m_len = 67;
125✔
176
         m_tree_height = 16;
125✔
177
         m_name = "XMSS-SHAKE_16_256";
125✔
178
         m_hash_name = "SHAKE-128(256)";
125✔
179
         m_strength = 256;
125✔
180
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256;
125✔
181
         break;
125✔
182
      case XMSS_SHAKE_20_256:
125✔
183
         m_element_size = 32;
125✔
184
         m_hash_id_size = 32;
125✔
185
         m_w = 16;
125✔
186
         m_len = 67;
125✔
187
         m_tree_height = 20;
125✔
188
         m_name = "XMSS-SHAKE_20_256";
125✔
189
         m_hash_name = "SHAKE-128(256)";
125✔
190
         m_strength = 256;
125✔
191
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256;
125✔
192
         break;
125✔
193
      case XMSS_SHAKE_10_512:
204✔
194
         m_element_size = 64;
204✔
195
         m_hash_id_size = 64;
204✔
196
         m_w = 16;
204✔
197
         m_len = 131;
204✔
198
         m_tree_height = 10;
204✔
199
         m_name = "XMSS-SHAKE_10_512";
204✔
200
         m_hash_name = "SHAKE-256(512)";
204✔
201
         m_strength = 512;
204✔
202
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_512;
204✔
203
         break;
204✔
204
      case XMSS_SHAKE_16_512:
125✔
205
         m_element_size = 64;
125✔
206
         m_hash_id_size = 64;
125✔
207
         m_w = 16;
125✔
208
         m_len = 131;
125✔
209
         m_tree_height = 16;
125✔
210
         m_name = "XMSS-SHAKE_16_512";
125✔
211
         m_hash_name = "SHAKE-256(512)";
125✔
212
         m_strength = 512;
125✔
213
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_512;
125✔
214
         break;
125✔
215
      case XMSS_SHAKE_20_512:
125✔
216
         m_element_size = 64;
125✔
217
         m_hash_id_size = 64;
125✔
218
         m_w = 16;
125✔
219
         m_len = 131;
125✔
220
         m_tree_height = 20;
125✔
221
         m_name = "XMSS-SHAKE_20_512";
125✔
222
         m_hash_name = "SHAKE-256(512)";
125✔
223
         m_strength = 512;
125✔
224
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_512;
125✔
225
         break;
125✔
226
      case XMSS_SHA2_10_192:
167✔
227
         m_element_size = 24;
167✔
228
         m_hash_id_size = 4;
167✔
229
         m_w = 16;
167✔
230
         m_len = 51;
167✔
231
         m_tree_height = 10;
167✔
232
         m_name = "XMSS-SHA2_10_192";
167✔
233
         m_hash_name = "Truncated(SHA-256,192)";
167✔
234
         m_strength = 192;
167✔
235
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_192;
167✔
236
         break;
167✔
237
      case XMSS_SHA2_16_192:
69✔
238
         m_element_size = 24;
69✔
239
         m_hash_id_size = 4;
69✔
240
         m_w = 16;
69✔
241
         m_len = 51;
69✔
242
         m_tree_height = 16;
69✔
243
         m_name = "XMSS-SHA2_16_192";
69✔
244
         m_hash_name = "Truncated(SHA-256,192)";
69✔
245
         m_strength = 192;
69✔
246
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_192;
69✔
247
         break;
69✔
248
      case XMSS_SHA2_20_192:
69✔
249
         m_element_size = 24;
69✔
250
         m_hash_id_size = 4;
69✔
251
         m_w = 16;
69✔
252
         m_len = 51;
69✔
253
         m_tree_height = 20;
69✔
254
         m_name = "XMSS-SHA2_20_192";
69✔
255
         m_hash_name = "Truncated(SHA-256,192)";
69✔
256
         m_strength = 192;
69✔
257
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_192;
69✔
258
         break;
69✔
259
      case XMSS_SHAKE256_10_256:
148✔
260
         m_element_size = 32;
148✔
261
         m_hash_id_size = 32;
148✔
262
         m_w = 16;
148✔
263
         m_len = 67;
148✔
264
         m_tree_height = 10;
148✔
265
         m_name = "XMSS-SHAKE256_10_256";
148✔
266
         m_hash_name = "SHAKE-256(256)";
148✔
267
         m_strength = 256;
148✔
268
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256_256;
148✔
269
         break;
148✔
270
      case XMSS_SHAKE256_16_256:
69✔
271
         m_element_size = 32;
69✔
272
         m_hash_id_size = 32;
69✔
273
         m_w = 16;
69✔
274
         m_len = 67;
69✔
275
         m_tree_height = 16;
69✔
276
         m_name = "XMSS-SHAKE256_16_256";
69✔
277
         m_hash_name = "SHAKE-256(256)";
69✔
278
         m_strength = 256;
69✔
279
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256_256;
69✔
280
         break;
69✔
281
      case XMSS_SHAKE256_20_256:
69✔
282
         m_element_size = 32;
69✔
283
         m_hash_id_size = 32;
69✔
284
         m_w = 16;
69✔
285
         m_len = 67;
69✔
286
         m_tree_height = 20;
69✔
287
         m_name = "XMSS-SHAKE256_20_256";
69✔
288
         m_hash_name = "SHAKE-256(256)";
69✔
289
         m_strength = 256;
69✔
290
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256_256;
69✔
291
         break;
69✔
292
      case XMSS_SHAKE256_10_192:
148✔
293
         m_element_size = 24;
148✔
294
         m_hash_id_size = 4;
148✔
295
         m_w = 16;
148✔
296
         m_len = 51;
148✔
297
         m_tree_height = 10;
148✔
298
         m_name = "XMSS-SHAKE256_10_192";
148✔
299
         m_hash_name = "SHAKE-256(192)";
148✔
300
         m_strength = 192;
148✔
301
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256_192;
148✔
302
         break;
148✔
303
      case XMSS_SHAKE256_16_192:
69✔
304
         m_element_size = 24;
69✔
305
         m_hash_id_size = 4;
69✔
306
         m_w = 16;
69✔
307
         m_len = 51;
69✔
308
         m_tree_height = 16;
69✔
309
         m_name = "XMSS-SHAKE256_16_192";
69✔
310
         m_hash_name = "SHAKE-256(192)";
69✔
311
         m_strength = 192;
69✔
312
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256_192;
69✔
313
         break;
69✔
314
      case XMSS_SHAKE256_20_192:
69✔
315
         m_element_size = 24;
69✔
316
         m_hash_id_size = 4;
69✔
317
         m_w = 16;
69✔
318
         m_len = 51;
69✔
319
         m_tree_height = 20;
69✔
320
         m_name = "XMSS-SHAKE256_20_192";
69✔
321
         m_hash_name = "SHAKE-256(192)";
69✔
322
         m_strength = 192;
69✔
323
         m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE_256_192;
69✔
324
         break;
69✔
325

326
      default:
×
327
         throw Not_Implemented("Algorithm id does not match any known XMSS algorithm id:" + std::to_string(oid));
×
328
   }
329
}
2,908✔
330

331
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc