8 #ifndef BOTAN_XMSS_ADDRESS_H__
9 #define BOTAN_XMSS_ADDRESS_H__
13 #include <botan/xmss_tools.h>
140 "Invalid Key_Mask for current XMSS_Address::Type.");
141 m_data[31] =
static_cast<uint8_t
>(value);
154 "get_ots_address() requires XMSS_Address::Type::"
155 "OTS_Hash_Address.");
169 "set_ots_address() requires XMSS_Address::Type::"
170 "OTS_Hash_Address.");
184 "set_ltree_address() requires XMSS_Address::Type::"
199 "set_ltree_address() requires XMSS_Address::Type::"
213 "get_chain_address() requires XMSS_Address::Type::"
214 "OTS_Hash_Address.");
227 "set_chain_address() requires XMSS_Address::Type::"
228 "OTS_Hash_Address.");
243 "get_tree_height() requires XMSS_Address::Type::"
244 "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
259 "set_tree_height() requires XMSS_Address::Type::"
260 "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
274 "get_hash_address() requires XMSS_Address::Type::"
275 "OTS_Hash_Address.");
289 "set_hash_address() requires XMSS_Address::Type::"
290 "OTS_Hash_Address.");
305 "get_tree_index() requires XMSS_Address::Type::"
306 "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
321 "set_tree_index() requires XMSS_Address::Type::"
322 "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
359 "XMSS_Address must be of 256 bits size.");
365 "XMSS_Address must be of 256 bits size.");
372 static const size_t m_address_size = 32;
374 inline uint32_t get_hi32(
size_t offset)
const
376 return ((0x000000FF & m_data[8 * offset + 3]) |
377 (0x000000FF & m_data[8 * offset + 2]) << 8 |
378 (0x000000FF & m_data[8 * offset + 1]) << 16 |
379 (0x000000FF & m_data[8 * offset ]) << 24);
382 inline void set_hi32(
size_t offset, uint32_t value)
384 m_data[offset * 8 ] = ((value >> 24) & 0xFF);
385 m_data[offset * 8 + 1] = ((value >> 16) & 0xFF);
386 m_data[offset * 8 + 2] = ((value >> 8) & 0xFF);
387 m_data[offset * 8 + 3] = ((value ) & 0xFF);
390 inline uint32_t get_lo32(
size_t offset)
const
392 return ((0x000000FF & m_data[8 * offset + 7]) |
393 (0x000000FF & m_data[8 * offset + 6]) << 8 |
394 (0x000000FF & m_data[8 * offset + 5]) << 16 |
395 (0x000000FF & m_data[8 * offset + 4]) << 24);
398 inline void set_lo32(
size_t offset, uint32_t value)
400 m_data[offset * 8 + 4] = ((value >> 24) & 0xFF);
401 m_data[offset * 8 + 5] = ((value >> 16) & 0xFF);
402 m_data[offset * 8 + 6] = ((value >> 8) & 0xFF);
403 m_data[offset * 8 + 7] = ((value ) & 0xFF);
void set_ots_address(uint32_t value)
void set_tree_height(uint32_t value)
secure_vector< uint8_t > & bytes()
void set_ltree_address(uint32_t value)
secure_vector< uint8_t > m_data
uint64_t get_tree_addr() const
#define BOTAN_ASSERT(expr, assertion_made)
Key_Mask get_key_mask_mode() const
std::vector< T, secure_allocator< T >> secure_vector
uint32_t get_ltree_address() const
uint32_t get_chain_address() const
void set_chain_address(uint32_t value)
XMSS_Address(secure_vector< uint8_t > &&data)
void set_key_mask_mode(Key_Mask value)
const secure_vector< uint8_t > & bytes() const
uint8_t get_layer_addr() const
uint32_t get_tree_index() const
void set_tree_index(uint32_t value)
uint32_t get_tree_height() const
void set_hash_address(uint32_t value)
XMSS_Address(const secure_vector< uint8_t > &data)
uint32_t get_ots_address() const
uint32_t get_hash_address() const