9#include <botan/internal/xmss_common_ops.h>
10#include <botan/internal/xmss_hash.h>
29 hash.
prf(bitmask_l, seed, adrs.
bytes());
33 hash.
prf(bitmask_r, seed, adrs.
bytes());
36 bitmask_r.size() == right.size(),
37 "Bitmask size doesn't match node size.");
40 for(
size_t i = 0; i < left.size(); i++)
42 concat_xor[i] = left[i] ^ bitmask_l[i];
43 concat_xor[i + left.size()] = right[i] ^ bitmask_r[i];
46 hash.
h(result, key, concat_xor);
58 size_t l = params.
len();
63 for(
size_t i = 0; i < l >> 1; i++)
70 pk[l >> 1] = pk[l - 1];
72 l = (l >> 1) + (l & 0x01);
#define BOTAN_ASSERT(expr, assertion_made)
void set_key_mask_mode(Key_Mask value)
uint32_t get_tree_height() const
void set_tree_height(uint32_t value)
void set_tree_index(uint32_t value)
const secure_vector< uint8_t > & bytes() const
static void create_l_tree(secure_vector< uint8_t > &result, wots_keysig_t pk, XMSS_Address &adrs, const secure_vector< uint8_t > &seed, XMSS_Hash &hash, const XMSS_Parameters ¶ms)
static void randomize_tree_hash(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &left, const secure_vector< uint8_t > &right, XMSS_Address &adrs, const secure_vector< uint8_t > &seed, XMSS_Hash &hash, const XMSS_Parameters ¶ms)
void prf(secure_vector< uint8_t > &result, std::span< const uint8_t > key, std::span< const uint8_t > data)
void h(secure_vector< uint8_t > &result, std::span< const uint8_t > key, std::span< const uint8_t > data)
size_t element_size() const
std::vector< secure_vector< uint8_t > > wots_keysig_t
std::vector< T, secure_allocator< T > > secure_vector