Botan 3.12.0
Crypto and TLS for C&
xmss_parameters.cpp
Go to the documentation of this file.
1/*
2 * XMSS Parameters
3 * Describes 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/assert.h>
17#include <botan/exceptn.h>
18#include <botan/internal/fmt.h>
19
20namespace Botan {
21
23 if(param_set == "XMSS-SHA2_10_256") {
24 return XMSS_SHA2_10_256;
25 }
26 if(param_set == "XMSS-SHA2_16_256") {
27 return XMSS_SHA2_16_256;
28 }
29 if(param_set == "XMSS-SHA2_20_256") {
30 return XMSS_SHA2_20_256;
31 }
32 if(param_set == "XMSS-SHA2_10_512") {
33 return XMSS_SHA2_10_512;
34 }
35 if(param_set == "XMSS-SHA2_16_512") {
36 return XMSS_SHA2_16_512;
37 }
38 if(param_set == "XMSS-SHA2_20_512") {
39 return XMSS_SHA2_20_512;
40 }
41 if(param_set == "XMSS-SHAKE_10_256") {
42 return XMSS_SHAKE_10_256;
43 }
44 if(param_set == "XMSS-SHAKE_16_256") {
45 return XMSS_SHAKE_16_256;
46 }
47 if(param_set == "XMSS-SHAKE_20_256") {
48 return XMSS_SHAKE_20_256;
49 }
50 if(param_set == "XMSS-SHAKE_10_512") {
51 return XMSS_SHAKE_10_512;
52 }
53 if(param_set == "XMSS-SHAKE_16_512") {
54 return XMSS_SHAKE_16_512;
55 }
56 if(param_set == "XMSS-SHAKE_20_512") {
57 return XMSS_SHAKE_20_512;
58 }
59 if(param_set == "XMSS-SHA2_10_192") {
60 return XMSS_SHA2_10_192;
61 }
62 if(param_set == "XMSS-SHA2_16_192") {
63 return XMSS_SHA2_16_192;
64 }
65 if(param_set == "XMSS-SHA2_20_192") {
66 return XMSS_SHA2_20_192;
67 }
68 if(param_set == "XMSS-SHAKE256_10_256") {
70 }
71 if(param_set == "XMSS-SHAKE256_16_256") {
73 }
74 if(param_set == "XMSS-SHAKE256_20_256") {
76 }
77 if(param_set == "XMSS-SHAKE256_10_192") {
79 }
80 if(param_set == "XMSS-SHAKE256_16_192") {
82 }
83 if(param_set == "XMSS-SHAKE256_20_192") {
85 }
86
87 throw Lookup_Error(fmt("Unknown XMSS algorithm param '{}'", param_set));
88}
89
90std::string_view XMSS_Parameters::hash_function_name() const {
91 switch(m_oid) {
95 return "SHA-256";
96
100 return "SHA-512";
101
105 return "SHAKE-128(256)";
106
110 return "SHAKE-256(512)";
111
112 case XMSS_SHA2_10_192:
113 case XMSS_SHA2_16_192:
114 case XMSS_SHA2_20_192:
115 return "Truncated(SHA-256,192)";
116
120 return "SHAKE-256(256)";
121
125 return "SHAKE-256(192)";
126
127 default:
129 }
130}
131
132std::string_view XMSS_Parameters::name() const {
133 switch(m_oid) {
134 case XMSS_SHA2_10_256:
135 return "XMSS-SHA2_10_256";
136
137 case XMSS_SHA2_16_256:
138 return "XMSS-SHA2_16_256";
139
140 case XMSS_SHA2_20_256:
141 return "XMSS-SHA2_20_256";
142
143 case XMSS_SHA2_10_512:
144 return "XMSS-SHA2_10_512";
145
146 case XMSS_SHA2_16_512:
147 return "XMSS-SHA2_16_512";
148
149 case XMSS_SHA2_20_512:
150 return "XMSS-SHA2_20_512";
151
153 return "XMSS-SHAKE_10_256";
154
156 return "XMSS-SHAKE_16_256";
157
159 return "XMSS-SHAKE_20_256";
160
162 return "XMSS-SHAKE_10_512";
163
165 return "XMSS-SHAKE_16_512";
166
168 return "XMSS-SHAKE_20_512";
169
170 case XMSS_SHA2_10_192:
171 return "XMSS-SHA2_10_192";
172
173 case XMSS_SHA2_16_192:
174 return "XMSS-SHA2_16_192";
175
176 case XMSS_SHA2_20_192:
177 return "XMSS-SHA2_20_192";
178
180 return "XMSS-SHAKE256_10_256";
181
183 return "XMSS-SHAKE256_16_256";
184
186 return "XMSS-SHAKE256_20_256";
187
189 return "XMSS-SHAKE256_10_192";
190
192 return "XMSS-SHAKE256_16_192";
193
195 return "XMSS-SHAKE256_20_192";
196
197 default:
199 }
200}
201
202// NOLINTBEGIN(*-member-init)
203XMSS_Parameters::XMSS_Parameters(std::string_view algo_name) {
204 *this = XMSS_Parameters::from_name(algo_name);
205}
206
210
211// NOLINTEND(*-member-init)
212
216
218 switch(oid) {
219 case XMSS_SHA2_10_256:
221
222 case XMSS_SHA2_16_256:
224
225 case XMSS_SHA2_20_256:
227
228 case XMSS_SHA2_10_512:
230
231 case XMSS_SHA2_16_512:
233
234 case XMSS_SHA2_20_512:
236
239
242
245
248
251
254
255 case XMSS_SHA2_10_192:
257
258 case XMSS_SHA2_16_192:
260
261 case XMSS_SHA2_20_192:
263
266
269
272
275
278
281
282 default:
283 throw Not_Implemented("Algorithm id does not match any known XMSS algorithm id:" + std::to_string(oid));
284 }
285}
286
287} // namespace Botan
#define BOTAN_ASSERT_UNREACHABLE()
Definition assert.h:163
static XMSS_Parameters from_name(std::string_view algo_name)
static xmss_algorithm_t xmss_id_from_string(std::string_view algo_name)
std::string_view name() const
XMSS_Parameters(std::string_view algo_name)
xmss_algorithm_t oid() const
std::string_view hash_function_name() const
static XMSS_Parameters from_id(xmss_algorithm_t id)
std::string fmt(std::string_view format, const T &... args)
Definition fmt.h:53