Botan 2.19.5 Crypto and TLS for C&

Public Types | Public Member Functions | Protected Attributes | List of all members
Botan::XMSS_Address Class Referencefinal

`#include <xmss_address.h>`

## Public Types
enum class | Key_Mask : uint8_t { Key_Mode = 0 , Mask_Mode = 1 , Mask_MSB_Mode = 1 , Mask_LSB_Mode = 2 }
enum class | Type : uint8_t { None = 255 , OTS_Hash_Address = 0 , LTree_Address = 1 , Hash_Tree_Address = 2 }

## Public Member Functions
secure_vector< uint8_t > & | bytes ()
const secure_vector< uint8_t > & | bytes () const
uint32_t | get_chain_address () const
uint32_t | get_hash_address () const
Key_Mask | get_key_mask_mode () const
uint8_t | get_layer_addr () const
uint32_t | get_ltree_address () const
uint32_t | get_ots_address () const
uint64_t | get_tree_addr () const
uint32_t | get_tree_height () const
uint32_t | get_tree_index () const
Type | get_type () const
void | set_chain_address (uint32_t value)
void | set_hash_address (uint32_t value)
void | set_key_mask_mode (Key_Mask value)
void | set_layer_addr ()
void | set_ltree_address (uint32_t value)
void | set_ots_address (uint32_t value)
void | set_tree_addr ()
void | set_tree_height (uint32_t value)
void | set_tree_index (uint32_t value)
void | set_type (Type type)
size_t | size () const
| XMSS_Address ()
| XMSS_Address (const secure_vector< uint8_t > &data)
| XMSS_Address (secure_vector< uint8_t > &&data)
| XMSS_Address (Type type)

## Protected Attributes
secure_vector< uint8_t > | m_data

## Detailed Description

Generic XMSS Address type holding 256 Bits of data. Properties of all three address formats L-Tree-Address, Hash-Tree-Address, OTS-Hash-Address can be called depending on the type currently assigned to the XMSS address using set_type().

Definition at line 21 of file xmss_address.h.

## Member Enumeration Documentation

## ◆ Key_Mask

enum class Botan::XMSS_Address::Key_Mask : uint8_t
| strong

The available modes for an XMSS Address:

- Key_Mode: Used to generate the key.
- Mask_Mode: Sets the n-byte bitmask (OTS-Hash-Address)
- Mask_MSB_Mode: Used to generate the b most significant bytes of the 2n-byte bitmask (LTree Address and Hash Tree Address).
- Mask_LSB_Mode: Used to generated the b least significant bytes of the 2n-byte bitmask. (LTree Address and Hash Tree Address).

Enumerator
Key_Mode |
Mask_Mode |
Mask_MSB_Mode |
Mask_LSB_Mode |

Definition at line 45 of file xmss_address.h.

46 {
47 Key_Mode = 0,
48 Mask_Mode = 1,
49 Mask_MSB_Mode = 1,
50 Mask_LSB_Mode = 2
51 };

## ◆ Type

enum class Botan::XMSS_Address::Type : uint8_t
| strong

Distinct types an XMSS_Address can represent. The available types are specified in [1] - 2.5 Hash Function Address Scheme.

Enumerator
None |
OTS_Hash_Address |
LTree_Address |
Hash_Tree_Address |

Definition at line 28 of file xmss_address.h.

29 {
30 None = 255,
31 OTS_Hash_Address = 0,
32 LTree_Address = 1,
33 Hash_Tree_Address = 2
34 };
Botan::PKCS11::Flag::None
@ None

## Constructor & Destructor Documentation

## ◆ XMSS_Address() [1/4]

Botan::XMSS_Address::XMSS_Address | ( |  | ) |
| inline

Definition at line 340 of file xmss_address.h.

341 : m_data(m_address_size)
342 {
343 set_type(Type::None);
344 }
Botan::XMSS_Address::Type::None
@ None
Botan::XMSS_Address::m_data
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365
Botan::XMSS_Address::set_type
void set_type(Type type)
Definition: xmss_address.h:111

References None, and set_type().

## ◆ XMSS_Address() [2/4]

Botan::XMSS_Address::XMSS_Address | ( | Type | type | ) |
| inline

Definition at line 346 of file xmss_address.h.

347 : m_data(m_address_size)
348 {
349 set_type(type);
350 }
type
MechanismType type
Definition: p11_mechanism.cpp:44

References set_type(), and type.

## ◆ XMSS_Address() [3/4]

Botan::XMSS_Address::XMSS_Address | ( | const secure_vector< uint8_t > & | data | ) |
| inline

Definition at line 352 of file xmss_address.h.

352 : m_data(data)
353 {
354 BOTAN_ASSERT(m_data.size() == m_address_size,
355 "XMSS_Address must be of 256 bits size.");
356 }
BOTAN_ASSERT
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:55

References BOTAN_ASSERT, and m_data.

## ◆ XMSS_Address() [4/4]

Botan::XMSS_Address::XMSS_Address | ( | secure_vector< uint8_t > && | data | ) |
| inline

Definition at line 358 of file xmss_address.h.

358 : m_data(std::move(data))
359 {
360 BOTAN_ASSERT(m_data.size() == m_address_size,
361 "XMSS_Address must be of 256 bits size.");
362 }

References BOTAN_ASSERT, and m_data.

## Member Function Documentation

## ◆ bytes() [1/2]

secure_vector< uint8_t > & Botan::XMSS_Address::bytes | ( |  | ) |
| inline

Definition at line 327 of file xmss_address.h.

328 {
329 return m_data;
330 }

References m_data.

## ◆ bytes() [2/2]

const secure_vector< uint8_t > & Botan::XMSS_Address::bytes | ( |  | ) | const
| inline

Definition at line 322 of file xmss_address.h.

323 {
324 return m_data;
325 }

References m_data.

Referenced by Botan::XMSS_WOTS_PrivateKey::at(), Botan::XMSS_WOTS_PublicKey::chain(), and Botan::XMSS_Common_Ops::randomize_tree_hash().

## ◆ get_chain_address()

uint32_t Botan::XMSS_Address::get_chain_address | ( |  | ) | const
| inline

Retrieve the chain address. A call to this method is only valid, if the address type is set to Type::OTS_Hash_Address.

Returns
  chain address.

Definition at line 208 of file xmss_address.h.

209 {
210 BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
211 "get_chain_address() requires XMSS_Address::Type::"
212 "OTS_Hash_Address.");
213 return get_lo32(2);
214 }
Botan::XMSS_Address::Type::OTS_Hash_Address
@ OTS_Hash_Address
Botan::XMSS_Address::get_type
Type get_type() const
Definition: xmss_address.h:96

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

## ◆ get_hash_address()

uint32_t Botan::XMSS_Address::get_hash_address | ( |  | ) | const
| inline

Retrieves the address of the hash function call within the chain. A call to this method is only valid, if the address type is set to Type::OTS_Hash_Address.

Returns
  address of the hash function call within chain.

Definition at line 267 of file xmss_address.h.

268 {
269 BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
270 "get_hash_address() requires XMSS_Address::Type::"
271 "OTS_Hash_Address.");
272 return get_hi32(3);
273 }

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

## ◆ get_key_mask_mode()

Key_Mask Botan::XMSS_Address::get_key_mask_mode | ( |  | ) | const
| inline

Retrieves the mode the address os currently set to. (See XMSS_Address::Key_Mask for details.)

Returns
  currently active mode

Definition at line 123 of file xmss_address.h.

124 {
125 return Key_Mask(m_data[31]);
126 }
Botan::XMSS_Address::Key_Mask
Key_Mask
Definition: xmss_address.h:46

References m_data.

## ◆ get_layer_addr()

uint8_t Botan::XMSS_Address::get_layer_addr | ( |  | ) | const
| inline

Layer Address for XMSS is constantly zero and can not be changed this property is only of relevance to XMSS_MT.

Returns
  Layer address, which is constant 0 for XMSS.

Definition at line 59 of file xmss_address.h.

59{ return 0; }

## ◆ get_ltree_address()

uint32_t Botan::XMSS_Address::get_ltree_address | ( |  | ) | const
| inline

Retrieves the index of the leaf computed with this LTree. A call to this method is only valid, if the address type is set to Type::LTree_Address.

Returns
  index of the leaf.

Definition at line 179 of file xmss_address.h.

180 {
181 BOTAN_ASSERT(get_type() == Type::LTree_Address,
182 "set_ltree_address() requires XMSS_Address::Type::"
183 "LTree_Address.");
184 return get_hi32(2);
185 }
Botan::XMSS_Address::Type::LTree_Address
@ LTree_Address

References BOTAN_ASSERT, get_type(), and LTree_Address.

## ◆ get_ots_address()

uint32_t Botan::XMSS_Address::get_ots_address | ( |  | ) | const
| inline

Retrieve the index of the OTS key pair within the tree. A call to this method is only valid, if the address type is set to Type::OTS_Hash_Address.

Returns
  index of OTS key pair.

Definition at line 149 of file xmss_address.h.

150 {
151 BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
152 "get_ots_address() requires XMSS_Address::Type::"
153 "OTS_Hash_Address.");
154 return get_hi32(2);
155 }

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

## ◆ get_tree_addr()

uint64_t Botan::XMSS_Address::get_tree_addr | ( |  | ) | const
| inline

Tree Address for XMSS is constantly zero and can not be changed this property is only of relevance to XMSS_MT.

Returns
  Tree address, which is constant 0 for XMSS.

Definition at line 77 of file xmss_address.h.

77{ return 0; }

## ◆ get_tree_height()

uint32_t Botan::XMSS_Address::get_tree_height | ( |  | ) | const
| inline

Retrieves the height of the tree node to be computed within the tree. A call to this method is only valid, if the address type is set to Type::LTree_Address or Type::Hash_Tree_Address.

Returns
  height of the tree node.

Definition at line 235 of file xmss_address.h.

236 {
237 BOTAN_ASSERT(get_type() == Type::LTree_Address ||
238 get_type() == Type::Hash_Tree_Address,
239 "get_tree_height() requires XMSS_Address::Type::"
240 "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
241 return get_lo32(2);
242 }
Botan::XMSS_Address::Type::Hash_Tree_Address
@ Hash_Tree_Address

References BOTAN_ASSERT, get_type(), Hash_Tree_Address, and LTree_Address.

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

## ◆ get_tree_index()

uint32_t Botan::XMSS_Address::get_tree_index | ( |  | ) | const
| inline

Retrieves the index of the tree node at current tree height in the tree. A call to this method is only valid, if the address type is set to Type::LTree_Address or Type::Hash_Tree_Address.

Returns
  index of the tree node at current height.

Definition at line 297 of file xmss_address.h.

298 {
299 BOTAN_ASSERT(get_type() == Type::LTree_Address ||
300 get_type() == Type::Hash_Tree_Address,
301 "get_tree_index() requires XMSS_Address::Type::"
302 "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
303 return get_hi32(3);
304 }

References BOTAN_ASSERT, get_type(), Hash_Tree_Address, and LTree_Address.

## ◆ get_type()

Type Botan::XMSS_Address::get_type | ( |  | ) | const
| inline

retrieves the logical type currently assigned to the XMSS Address instance.

Returns
  Type of the address (OTS_Hash_Address, LTree_Address or Hash_Tree_Address)

Definition at line 96 of file xmss_address.h.

97 {
98 return static_cast<Type>(m_data[15]);
99 }
Botan::XMSS_Address::Type
Type
Definition: xmss_address.h:29

References m_data.

Referenced by get_chain_address(), get_hash_address(), get_ltree_address(), get_ots_address(), get_tree_height(), get_tree_index(), set_chain_address(), set_hash_address(), set_key_mask_mode(), set_ltree_address(), set_ots_address(), set_tree_height(), and set_tree_index().

## ◆ set_chain_address()

void Botan::XMSS_Address::set_chain_address | ( | uint32_t | value | ) |
| inline

Set the chain address. A call to this method is only valid, if the address type is set to Type::OTS_Hash_Address.

Definition at line 220 of file xmss_address.h.

221 {
222 BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
223 "set_chain_address() requires XMSS_Address::Type::"
224 "OTS_Hash_Address.");
225 set_lo32(2, value);
226 }

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

Referenced by Botan::XMSS_WOTS_PrivateKey::generate_public_key(), and Botan::XMSS_WOTS_PrivateKey::sign().

## ◆ set_hash_address()

void Botan::XMSS_Address::set_hash_address | ( | uint32_t | value | ) |
| inline

Sets the address of the hash function call within the chain. A call to this method is only valid, if the address type is set to Type::OTS_Hash_Address.

Parameters

  value | address of the hash function call within chain.

Definition at line 282 of file xmss_address.h.

283 {
284 BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
285 "set_hash_address() requires XMSS_Address::Type::"
286 "OTS_Hash_Address.");
287 set_hi32(3, value);
288 }

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

Referenced by Botan::XMSS_WOTS_PublicKey::chain().

## ◆ set_key_mask_mode()

void Botan::XMSS_Address::set_key_mask_mode | ( | Key_Mask | value | ) |
| inline

Changes the mode the address currently used address mode. (XMSS_Address::Key_Mask for details.)

Parameters

  value | Target mode.

Definition at line 134 of file xmss_address.h.

135 {
136 BOTAN_ASSERT(value != Key_Mask::Mask_LSB_Mode ||
137 get_type() != Type::OTS_Hash_Address,
138 "Invalid Key_Mask for current XMSS_Address::Type.");
139 m_data[31] = static_cast<uint8_t>(value);
140 }
Botan::XMSS_Address::Key_Mask::Mask_LSB_Mode
@ Mask_LSB_Mode

References BOTAN_ASSERT, get_type(), m_data, Mask_LSB_Mode, and OTS_Hash_Address.

Referenced by Botan::XMSS_WOTS_PublicKey::chain(), and Botan::XMSS_Common_Ops::randomize_tree_hash().

## ◆ set_layer_addr()

void Botan::XMSS_Address::set_layer_addr | ( |  | ) |
| inline

Layer Address for XMSS is constantly zero and can not be changed this property is only of relevance to XMSS_MT. Calling this method for XMSS will result in an error.

Definition at line 66 of file xmss_address.h.

67 {
68 BOTAN_ASSERT(false, "Only available in XMSS_MT.");
69 }

References BOTAN_ASSERT.

## ◆ set_ltree_address()

void Botan::XMSS_Address::set_ltree_address | ( | uint32_t | value | ) |
| inline

Sets the index of the leaf computed with this LTree. A call to this method is only valid, if the address type is set to Type::LTree_Address.

Parameters

  value | index of the leaf.

Definition at line 194 of file xmss_address.h.

195 {
196 BOTAN_ASSERT(get_type() == Type::LTree_Address,
197 "set_ltree_address() requires XMSS_Address::Type::"
198 "LTree_Address.");
199 set_hi32(2, value);
200 }

References BOTAN_ASSERT, get_type(), and LTree_Address.

## ◆ set_ots_address()

void Botan::XMSS_Address::set_ots_address | ( | uint32_t | value | ) |
| inline

Sets the index of the OTS key pair within the tree. A call to this method is only valid, if the address type is set to Type::OTS_Hash_Address.

Parameters

  value | index of OTS key pair.

Definition at line 164 of file xmss_address.h.

165 {
166 BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
167 "set_ots_address() requires XMSS_Address::Type::"
168 "OTS_Hash_Address.");
169 set_hi32(2, value);
170 }

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

## ◆ set_tree_addr()

void Botan::XMSS_Address::set_tree_addr | ( |  | ) |
| inline

Tree Address for XMSS is constantly zero and can not be changed this property is only of relevance to XMSS_MT. Calling this method for XMSS will result in an error.

Definition at line 84 of file xmss_address.h.

85 {
86 BOTAN_ASSERT(false, "Only available in XMSS_MT.");
87 }

References BOTAN_ASSERT.

## ◆ set_tree_height()

void Botan::XMSS_Address::set_tree_height | ( | uint32_t | value | ) |
| inline

Sets the height of the tree node to be computed within the tree. A call to this method is only valid, if the address type is set to Type::LTree_Address or Type::Hash_Tree_Address.

Parameters

  value | height of the tree node.

Definition at line 251 of file xmss_address.h.

252 {
253 BOTAN_ASSERT(get_type() == Type::LTree_Address ||
254 get_type() == Type::Hash_Tree_Address,
255 "set_tree_height() requires XMSS_Address::Type::"
256 "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
257 set_lo32(2, value);
258 }

References BOTAN_ASSERT, get_type(), Hash_Tree_Address, and LTree_Address.

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

## ◆ set_tree_index()

void Botan::XMSS_Address::set_tree_index | ( | uint32_t | value | ) |
| inline

Sets the index of the tree node at current tree height in the tree. A call to this method is only valid, if the address type is set to Type::LTree_Address or Type::Hash_Tree_Address.

Parameters

  value | index of the tree node at current height.

Definition at line 313 of file xmss_address.h.

314 {
315 BOTAN_ASSERT(get_type() == Type::LTree_Address ||
316 get_type() == Type::Hash_Tree_Address,
317 "set_tree_index() requires XMSS_Address::Type::"
318 "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
319 set_hi32(3, value);
320 }

References BOTAN_ASSERT, get_type(), Hash_Tree_Address, and LTree_Address.

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

## ◆ set_type()

void Botan::XMSS_Address::set_type | ( | Type | type | ) |
| inline

Changes the logical type currently assigned to the XMSS Address instance. Please note that changing the type will automatically reset the 128 LSBs of the Address to zero. This affects the key_mask_mode property as well as all properties identified by XMSS_Address::Property.

Parameters

  type | Type that shall be assigned to the address (OTS_Hash_Address, LTree_Address or Hash_Tree_Address)

Definition at line 111 of file xmss_address.h.

112 {
113 m_data[15] = static_cast<uint8_t>(type);
114 std::fill(m_data.begin() + 16, m_data.end(), static_cast<uint8_t>(0));
115 }

References m_data, and type.

Referenced by XMSS_Address().

## ◆ size()

size_t Botan::XMSS_Address::size | ( |  | ) | const
| inline

Returns
  the size of an XMSS_Address

Definition at line 335 of file xmss_address.h.

336 {
337 return m_data.size();
338 }

References m_data.

## Member Data Documentation

## ◆ m_data

secure_vector<uint8_t> Botan::XMSS_Address::m_data
| protected

Definition at line 365 of file xmss_address.h.

Referenced by bytes(), get_key_mask_mode(), get_type(), set_key_mask_mode(), set_type(), size(), and XMSS_Address().

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

- src/lib/pubkey/xmss/xmss_address.h