Botan  2.7.0
Crypto and TLS for C++11
Public Types | Public Member Functions | Protected Attributes | List of all members
Botan::XMSS_Address Class Referencefinal

#include <xmss_address.h>

Public Types

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

Public Member Functions

const secure_vector< uint8_t > & bytes () const
 
secure_vector< uint8_t > & bytes ()
 
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 (Type type)
 
 XMSS_Address (const secure_vector< uint8_t > &data)
 
 XMSS_Address (secure_vector< uint8_t > &&data)
 

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 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.

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

◆ Type

enum 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.

28  : uint8_t
29  {
30  None = 255,
31  OTS_Hash_Address = 0,
32  LTree_Address = 1,
33  Hash_Tree_Address = 2
34  };

Constructor & Destructor Documentation

◆ XMSS_Address() [1/4]

Botan::XMSS_Address::XMSS_Address ( )
inline

Definition at line 340 of file xmss_address.h.

References None, and set_type().

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

◆ XMSS_Address() [2/4]

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

Definition at line 346 of file xmss_address.h.

References set_type(), and type.

347  : m_data(m_address_size)
348  {
349  set_type(type);
350  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365
MechanismType type
void set_type(Type type)
Definition: xmss_address.h:111

◆ 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.

References BOTAN_ASSERT, and m_data.

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

◆ XMSS_Address() [4/4]

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

Definition at line 358 of file xmss_address.h.

References BOTAN_ASSERT, and m_data.

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  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

Member Function Documentation

◆ bytes() [1/2]

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

Definition at line 322 of file xmss_address.h.

References m_data.

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

323  {
324  return m_data;
325  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365

◆ bytes() [2/2]

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

Definition at line 327 of file xmss_address.h.

References m_data.

328  {
329  return m_data;
330  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365

◆ 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.

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

209  {
211  "get_chain_address() requires XMSS_Address::Type::"
212  "OTS_Hash_Address.");
213  return get_lo32(2);
214  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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.

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

268  {
270  "get_hash_address() requires XMSS_Address::Type::"
271  "OTS_Hash_Address.");
272  return get_hi32(3);
273  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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.

References m_data.

124  {
125  return Key_Mask(m_data[31]);
126  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365

◆ 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.

References BOTAN_ASSERT, get_type(), and LTree_Address.

180  {
182  "set_ltree_address() requires XMSS_Address::Type::"
183  "LTree_Address.");
184  return get_hi32(2);
185  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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.

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

150  {
152  "get_ots_address() requires XMSS_Address::Type::"
153  "OTS_Hash_Address.");
154  return get_hi32(2);
155  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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.

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

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

236  {
239  "get_tree_height() requires XMSS_Address::Type::"
240  "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
241  return get_lo32(2);
242  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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.

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

298  {
301  "get_tree_index() requires XMSS_Address::Type::"
302  "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
303  return get_hi32(3);
304  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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.

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().

97  {
98  return static_cast<Type>(m_data[15]);
99  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365

◆ 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.

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

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

221  {
223  "set_chain_address() requires XMSS_Address::Type::"
224  "OTS_Hash_Address.");
225  set_lo32(2, value);
226  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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
valueaddress of the hash function call within chain.

Definition at line 282 of file xmss_address.h.

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

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

283  {
285  "set_hash_address() requires XMSS_Address::Type::"
286  "OTS_Hash_Address.");
287  set_hi32(3, value);
288  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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
valueTarget mode.

Definition at line 134 of file xmss_address.h.

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().

135  {
138  "Invalid Key_Mask for current XMSS_Address::Type.");
139  m_data[31] = static_cast<uint8_t>(value);
140  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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.

References BOTAN_ASSERT.

67  {
68  BOTAN_ASSERT(false, "Only available in XMSS_MT.");
69  }
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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
valueindex of the leaf.

Definition at line 194 of file xmss_address.h.

References BOTAN_ASSERT, get_type(), and LTree_Address.

195  {
197  "set_ltree_address() requires XMSS_Address::Type::"
198  "LTree_Address.");
199  set_hi32(2, value);
200  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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
valueindex of OTS key pair.

Definition at line 164 of file xmss_address.h.

References BOTAN_ASSERT, get_type(), and OTS_Hash_Address.

165  {
167  "set_ots_address() requires XMSS_Address::Type::"
168  "OTS_Hash_Address.");
169  set_hi32(2, value);
170  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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.

References BOTAN_ASSERT.

85  {
86  BOTAN_ASSERT(false, "Only available in XMSS_MT.");
87  }
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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
valueheight of the tree node.

Definition at line 251 of file xmss_address.h.

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

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

252  {
255  "set_tree_height() requires XMSS_Address::Type::"
256  "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
257  set_lo32(2, value);
258  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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
valueindex of the tree node at current height.

Definition at line 313 of file xmss_address.h.

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

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

314  {
317  "set_tree_index() requires XMSS_Address::Type::"
318  "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
319  set_hi32(3, value);
320  }
Type get_type() const
Definition: xmss_address.h:96
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:43

◆ 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
typeType 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.

References m_data, and type.

Referenced by XMSS_Address().

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  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365
MechanismType type

◆ 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.

References m_data.

336  {
337  return m_data.size();
338  }
secure_vector< uint8_t > m_data
Definition: xmss_address.h:365

Member Data Documentation

◆ m_data

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

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