Botan 3.12.0
Crypto and TLS for C&
Botan::XMSS_Parameters Class Referencefinal

#include <xmss_parameters.h>

Public Types

enum  xmss_algorithm_t : uint32_t {
  XMSS_SHA2_10_256 = 0x00000001 , XMSS_SHA2_16_256 = 0x00000002 , XMSS_SHA2_20_256 = 0x00000003 , XMSS_SHA2_10_512 = 0x00000004 ,
  XMSS_SHA2_16_512 = 0x00000005 , XMSS_SHA2_20_512 = 0x00000006 , XMSS_SHAKE_10_256 = 0x00000007 , XMSS_SHAKE_16_256 = 0x00000008 ,
  XMSS_SHAKE_20_256 = 0x00000009 , XMSS_SHAKE_10_512 = 0x0000000a , XMSS_SHAKE_16_512 = 0x0000000b , XMSS_SHAKE_20_512 = 0x0000000c ,
  XMSS_SHA2_10_192 = 0x0000000d , XMSS_SHA2_16_192 = 0x0000000e , XMSS_SHA2_20_192 = 0x0000000f , XMSS_SHAKE256_10_256 = 0x00000010 ,
  XMSS_SHAKE256_16_256 = 0x00000011 , XMSS_SHAKE256_20_256 = 0x00000012 , XMSS_SHAKE256_10_192 = 0x00000013 , XMSS_SHAKE256_16_192 = 0x00000014 ,
  XMSS_SHAKE256_20_192 = 0x00000015
}

Public Member Functions

size_t element_size () const
size_t estimated_strength () const
std::string_view hash_function_name () const
size_t hash_id_size () const
size_t len () const
std::string_view name () const
xmss_algorithm_t oid () const
XMSS_Parametersoperator= (const XMSS_Parameters &other)=default
XMSS_Parametersoperator= (XMSS_Parameters &&other) noexcept=default
bool operator== (const XMSS_Parameters &p) const
XMSS_WOTS_Parameters::ots_algorithm_t ots_oid () const
size_t raw_legacy_private_key_size () const
size_t raw_private_key_size () const
size_t raw_public_key_size () const
size_t total_number_of_signatures () const
size_t tree_height () const
size_t wots_parameter () const
XMSS_WOTS_Parameters wots_parameters () const
 XMSS_Parameters (const XMSS_Parameters &other)=default
 XMSS_Parameters (std::string_view algo_name)
 XMSS_Parameters (xmss_algorithm_t oid)
 XMSS_Parameters (XMSS_Parameters &&other) noexcept=default
 ~XMSS_Parameters ()=default

Static Public Member Functions

static XMSS_Parameters from_id (xmss_algorithm_t id)
static XMSS_Parameters from_name (std::string_view algo_name)
static xmss_algorithm_t xmss_id_from_string (std::string_view algo_name)

Detailed Description

Describes a signature method for XMSS, as defined in: [1] XMSS: Extended Hash-Based Signatures, Request for Comments: 8391 Release: May 2018. https://datatracker.ietf.org/doc/rfc8391/ [2] Recommendation for Stateful Hash-Based Signature Schemes NIST Special Publication 800-208 Release: October 2020. https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-208.pdf

Definition at line 121 of file xmss_parameters.h.

Member Enumeration Documentation

◆ xmss_algorithm_t

Enumerator
XMSS_SHA2_10_256 
XMSS_SHA2_16_256 
XMSS_SHA2_20_256 
XMSS_SHA2_10_512 
XMSS_SHA2_16_512 
XMSS_SHA2_20_512 
XMSS_SHAKE_10_256 
XMSS_SHAKE_16_256 
XMSS_SHAKE_20_256 
XMSS_SHAKE_10_512 
XMSS_SHAKE_16_512 
XMSS_SHAKE_20_512 
XMSS_SHA2_10_192 
XMSS_SHA2_16_192 
XMSS_SHA2_20_192 
XMSS_SHAKE256_10_256 
XMSS_SHAKE256_16_256 
XMSS_SHAKE256_20_256 
XMSS_SHAKE256_10_192 
XMSS_SHAKE256_16_192 
XMSS_SHAKE256_20_192 

Definition at line 123 of file xmss_parameters.h.

123 : uint32_t /* NOLINT(*-enum-size,*-use-enum-class) */ {
124 // from RFC 8391
125 XMSS_SHA2_10_256 = 0x00000001,
126 XMSS_SHA2_16_256 = 0x00000002,
127 XMSS_SHA2_20_256 = 0x00000003,
128
129 // from RFC 8391 but not approved by NIST SP.800-208
130 // (see footnote on page 16)
131 XMSS_SHA2_10_512 = 0x00000004,
132 XMSS_SHA2_16_512 = 0x00000005,
133 XMSS_SHA2_20_512 = 0x00000006,
134 XMSS_SHAKE_10_256 = 0x00000007,
135 XMSS_SHAKE_16_256 = 0x00000008,
136 XMSS_SHAKE_20_256 = 0x00000009,
137 XMSS_SHAKE_10_512 = 0x0000000a,
138 XMSS_SHAKE_16_512 = 0x0000000b,
139 XMSS_SHAKE_20_512 = 0x0000000c,
140
141 // from NIST SP.800-208
142 XMSS_SHA2_10_192 = 0x0000000d,
143 XMSS_SHA2_16_192 = 0x0000000e,
144 XMSS_SHA2_20_192 = 0x0000000f,
145 XMSS_SHAKE256_10_256 = 0x00000010,
146 XMSS_SHAKE256_16_256 = 0x00000011,
147 XMSS_SHAKE256_20_256 = 0x00000012,
148 XMSS_SHAKE256_10_192 = 0x00000013,
149 XMSS_SHAKE256_16_192 = 0x00000014,
150 XMSS_SHAKE256_20_192 = 0x00000015,
151 };

Constructor & Destructor Documentation

◆ XMSS_Parameters() [1/4]

Botan::XMSS_Parameters::XMSS_Parameters ( std::string_view algo_name)
explicit

Definition at line 203 of file xmss_parameters.cpp.

203 {
204 *this = XMSS_Parameters::from_name(algo_name);
205}
static XMSS_Parameters from_name(std::string_view algo_name)

References from_name().

Referenced by from_id(), from_name(), operator=(), operator=(), operator==(), XMSS_Parameters(), XMSS_Parameters(), and ~XMSS_Parameters().

◆ XMSS_Parameters() [2/4]

Botan::XMSS_Parameters::XMSS_Parameters ( xmss_algorithm_t oid)
explicit

Definition at line 207 of file xmss_parameters.cpp.

207 {
209}
xmss_algorithm_t oid() const
static XMSS_Parameters from_id(xmss_algorithm_t id)

References from_id(), and oid().

◆ XMSS_Parameters() [3/4]

Botan::XMSS_Parameters::XMSS_Parameters ( const XMSS_Parameters & other)
default

References XMSS_Parameters().

◆ XMSS_Parameters() [4/4]

Botan::XMSS_Parameters::XMSS_Parameters ( XMSS_Parameters && other)
defaultnoexcept

References XMSS_Parameters().

◆ ~XMSS_Parameters()

Botan::XMSS_Parameters::~XMSS_Parameters ( )
default

Member Function Documentation

◆ element_size()

size_t Botan::XMSS_Parameters::element_size ( ) const
inline

Retrieves the uniform length of a message, and the size of each node. This correlates to XMSS parameter "n" defined in [1].

Returns
element length in bytes.

Definition at line 183 of file xmss_parameters.h.

183{ return m_element_size; }

References element_size().

Referenced by element_size(), Botan::XMSS_Common_Ops::randomize_tree_hash(), raw_legacy_private_key_size(), and raw_public_key_size().

◆ estimated_strength()

size_t Botan::XMSS_Parameters::estimated_strength ( ) const
inline

Returns the estimated pre-quantum security level of the chosen algorithm.

Definition at line 225 of file xmss_parameters.h.

225{ return 8 * m_element_size; }

Referenced by Botan::XMSS_PublicKey::estimated_strength(), and Botan::XMSS_PublicKey::key_length().

◆ from_id()

XMSS_Parameters Botan::XMSS_Parameters::from_id ( xmss_algorithm_t id)
static

Definition at line 217 of file xmss_parameters.cpp.

217 {
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}
XMSS_Parameters(std::string_view algo_name)

References oid(), Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_192, Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_256, Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_512, Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE_256, Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE_256_192, Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE_256_256, Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE_512, XMSS_Parameters(), XMSS_SHA2_10_192, XMSS_SHA2_10_256, XMSS_SHA2_10_512, XMSS_SHA2_16_192, XMSS_SHA2_16_256, XMSS_SHA2_16_512, XMSS_SHA2_20_192, XMSS_SHA2_20_256, XMSS_SHA2_20_512, XMSS_SHAKE256_10_192, XMSS_SHAKE256_10_256, XMSS_SHAKE256_16_192, XMSS_SHAKE256_16_256, XMSS_SHAKE256_20_192, XMSS_SHAKE256_20_256, XMSS_SHAKE_10_256, XMSS_SHAKE_10_512, XMSS_SHAKE_16_256, XMSS_SHAKE_16_512, XMSS_SHAKE_20_256, and XMSS_SHAKE_20_512.

Referenced by from_name(), XMSS_Parameters(), Botan::XMSS_PublicKey::XMSS_PublicKey(), Botan::XMSS_PublicKey::XMSS_PublicKey(), Botan::XMSS_PublicKey::XMSS_PublicKey(), and Botan::XMSS_Signature::XMSS_Signature().

◆ from_name()

XMSS_Parameters Botan::XMSS_Parameters::from_name ( std::string_view algo_name)
static

Definition at line 213 of file xmss_parameters.cpp.

213 {
215}
static xmss_algorithm_t xmss_id_from_string(std::string_view algo_name)

References from_id(), xmss_id_from_string(), and XMSS_Parameters().

Referenced by Botan::create_private_key(), and XMSS_Parameters().

◆ hash_function_name()

std::string_view Botan::XMSS_Parameters::hash_function_name ( ) const

Definition at line 90 of file xmss_parameters.cpp.

90 {
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}
#define BOTAN_ASSERT_UNREACHABLE()
Definition assert.h:163

References BOTAN_ASSERT_UNREACHABLE, XMSS_SHA2_10_192, XMSS_SHA2_10_256, XMSS_SHA2_10_512, XMSS_SHA2_16_192, XMSS_SHA2_16_256, XMSS_SHA2_16_512, XMSS_SHA2_20_192, XMSS_SHA2_20_256, XMSS_SHA2_20_512, XMSS_SHAKE256_10_192, XMSS_SHAKE256_10_256, XMSS_SHAKE256_16_192, XMSS_SHAKE256_16_256, XMSS_SHAKE256_20_192, XMSS_SHAKE256_20_256, XMSS_SHAKE_10_256, XMSS_SHAKE_10_512, XMSS_SHAKE_16_256, XMSS_SHAKE_16_512, XMSS_SHAKE_20_256, and XMSS_SHAKE_20_512.

Referenced by Botan::XMSS_Hash::XMSS_Hash(), and ~XMSS_Parameters().

◆ hash_id_size()

size_t Botan::XMSS_Parameters::hash_id_size ( ) const
inline

Retrieves the length of the hash identifier (domain separator) in bytes. See definition of toByte() in RFC 8391 Section 2.4 and the concrete definitions of hash functions in Section 5.1 where this parameter is always equal to the output length of the underlying hash primitive. Also see NIST SP.800-208 where instantiations utilizing truncated hashes use shorter hash IDs.

Definition at line 193 of file xmss_parameters.h.

193{ return m_hash_id_size; }

◆ len()

size_t Botan::XMSS_Parameters::len ( ) const
inline

Definition at line 213 of file xmss_parameters.h.

213{ return m_len; }

Referenced by Botan::XMSS_Common_Ops::create_l_tree().

◆ name()

std::string_view Botan::XMSS_Parameters::name ( ) const
Returns
XMSS registry name for the chosen parameter set.

Definition at line 132 of file xmss_parameters.cpp.

132 {
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}

References BOTAN_ASSERT_UNREACHABLE, XMSS_SHA2_10_192, XMSS_SHA2_10_256, XMSS_SHA2_10_512, XMSS_SHA2_16_192, XMSS_SHA2_16_256, XMSS_SHA2_16_512, XMSS_SHA2_20_192, XMSS_SHA2_20_256, XMSS_SHA2_20_512, XMSS_SHAKE256_10_192, XMSS_SHAKE256_10_256, XMSS_SHAKE256_16_192, XMSS_SHAKE256_16_256, XMSS_SHAKE256_20_192, XMSS_SHAKE256_20_256, XMSS_SHAKE_10_256, XMSS_SHAKE_10_512, XMSS_SHAKE_16_256, XMSS_SHAKE_16_512, XMSS_SHAKE_20_256, and XMSS_SHAKE_20_512.

Referenced by ~XMSS_Parameters().

◆ oid()

xmss_algorithm_t Botan::XMSS_Parameters::oid ( ) const
inline

Definition at line 215 of file xmss_parameters.h.

215{ return m_oid; }

Referenced by Botan::create_private_key(), from_id(), and XMSS_Parameters().

◆ operator=() [1/2]

XMSS_Parameters & Botan::XMSS_Parameters::operator= ( const XMSS_Parameters & other)
default

References XMSS_Parameters().

◆ operator=() [2/2]

XMSS_Parameters & Botan::XMSS_Parameters::operator= ( XMSS_Parameters && other)
defaultnoexcept

References XMSS_Parameters().

◆ operator==()

bool Botan::XMSS_Parameters::operator== ( const XMSS_Parameters & p) const
inline

Definition at line 237 of file xmss_parameters.h.

237{ return m_oid == p.m_oid; }

References XMSS_Parameters().

◆ ots_oid()

XMSS_WOTS_Parameters::ots_algorithm_t Botan::XMSS_Parameters::ots_oid ( ) const
inline

Definition at line 217 of file xmss_parameters.h.

217{ return m_wots_oid; }

◆ raw_legacy_private_key_size()

size_t Botan::XMSS_Parameters::raw_legacy_private_key_size ( ) const
inline

Definition at line 229 of file xmss_parameters.h.

229 {
230 return raw_public_key_size() + sizeof(uint32_t) + 2 * element_size();
231 }
size_t raw_public_key_size() const
size_t element_size() const

References element_size(), and raw_public_key_size().

Referenced by raw_private_key_size().

◆ raw_private_key_size()

size_t Botan::XMSS_Parameters::raw_private_key_size ( ) const
inline

Definition at line 233 of file xmss_parameters.h.

233 {
234 return raw_legacy_private_key_size() + 1 /* identifier for WOTS+ key derivation method */;
235 }
size_t raw_legacy_private_key_size() const

References raw_legacy_private_key_size().

◆ raw_public_key_size()

size_t Botan::XMSS_Parameters::raw_public_key_size ( ) const
inline

Definition at line 227 of file xmss_parameters.h.

227{ return sizeof(uint32_t) + 2 * element_size(); }

References element_size().

Referenced by raw_legacy_private_key_size().

◆ total_number_of_signatures()

size_t Botan::XMSS_Parameters::total_number_of_signatures ( ) const
inline
Returns
total number of signatures allowed for this XMSS instance

Definition at line 203 of file xmss_parameters.h.

203{ return static_cast<size_t>(1) << tree_height(); }

References tree_height().

◆ tree_height()

size_t Botan::XMSS_Parameters::tree_height ( ) const
inline
Returns
The height (number of levels - 1) of the tree

Definition at line 198 of file xmss_parameters.h.

198{ return m_tree_height; }

Referenced by total_number_of_signatures().

◆ wots_parameter()

size_t Botan::XMSS_Parameters::wots_parameter ( ) const
inline

The Winternitz parameter.

Returns
numeric base used for internal representation of data.

Definition at line 211 of file xmss_parameters.h.

211{ return 16; }

◆ wots_parameters()

XMSS_WOTS_Parameters Botan::XMSS_Parameters::wots_parameters ( ) const
inline

Definition at line 219 of file xmss_parameters.h.

219{ return XMSS_WOTS_Parameters::from_id(m_wots_oid); }
static XMSS_WOTS_Parameters from_id(ots_algorithm_t id)

References Botan::XMSS_WOTS_Parameters::from_id().

◆ xmss_id_from_string()

XMSS_Parameters::xmss_algorithm_t Botan::XMSS_Parameters::xmss_id_from_string ( std::string_view algo_name)
static

Definition at line 22 of file xmss_parameters.cpp.

22 {
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}
std::string fmt(std::string_view format, const T &... args)
Definition fmt.h:53

References Botan::fmt(), XMSS_SHA2_10_192, XMSS_SHA2_10_256, XMSS_SHA2_10_512, XMSS_SHA2_16_192, XMSS_SHA2_16_256, XMSS_SHA2_16_512, XMSS_SHA2_20_192, XMSS_SHA2_20_256, XMSS_SHA2_20_512, XMSS_SHAKE256_10_192, XMSS_SHAKE256_10_256, XMSS_SHAKE256_16_192, XMSS_SHAKE256_16_256, XMSS_SHAKE256_20_192, XMSS_SHAKE256_20_256, XMSS_SHAKE_10_256, XMSS_SHAKE_10_512, XMSS_SHAKE_16_256, XMSS_SHAKE_16_512, XMSS_SHAKE_20_256, and XMSS_SHAKE_20_512.

Referenced by from_name().


The documentation for this class was generated from the following files: