Botan 2.13.0 Crypto and TLS for C++11

- Main Page
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Botan::XMSS_Common_Ops Class Reference

`#include <xmss_common_ops.h>`

Inheritance diagram for Botan::XMSS_Common_Ops:

## Public Member Functions
| XMSS_Common_Ops (XMSS_Parameters::xmss_algorithm_t oid)

## Protected Member Functions
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)
void | create_l_tree (secure_vector< uint8_t > &result, wots_keysig_t pk, XMSS_Address &adrs, const secure_vector< uint8_t > &seed)
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)
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)

## Protected Attributes
XMSS_Hash | m_hash
XMSS_Parameters | m_xmss_params

## Detailed Description

Operations shared by XMSS signature generation and verification operations.

Definition at line 26 of file xmss_common_ops.h.

## Constructor & Destructor Documentation

Botan::XMSS_Common_Ops::XMSS_Common_Ops | ( | XMSS_Parameters::xmss_algorithm_t | oid | ) |
| inline

Definition at line 29 of file xmss_common_ops.h.

30 : m_xmss_params(oid), m_hash(m_xmss_params.hash_function_name()) {}
Botan::XMSS_Common_Ops::m_xmss_params
XMSS_Parameters m_xmss_params
Definition: xmss_common_ops.h:121
Botan::XMSS_Common_Ops::m_hash
XMSS_Hash m_hash
Definition: xmss_common_ops.h:122
Botan::XMSS_Parameters::hash_function_name
const std::string & hash_function_name() const
Definition: xmss_parameters.h:55

## Member Function Documentation

void Botan::XMSS_Common_Ops::create_l_tree | ( | secure_vector< uint8_t > & | result,
|  | wots_keysig_t | pk,
|  | XMSS_Address & | adrs,
|  | const secure_vector< uint8_t > & | seed,
|  | XMSS_Hash & | hash
| ) |  |
| protected

Algorithm 8: "ltree" Create an L-tree used to compute the leaves of the binary hash tree. Takes a WOTS+ public key and compresses it to a single n-byte value.

This overload is used in multithreaded scenarios, where it is required to provide seperate instances of XMSS_Hash to each thread.

Parameters

  [out] | result | Public key compressed to a single n-byte value pk[0].
  [in] | pk | Winternitz One Time Signatures+ public key.
  [in] | adrs | Address encoding the address of the L-Tree
  [in] | seed | The seed generated during the public key generation.
  [in] | hash | Instance of XMSS_Hash, that may only be used by the thead executing create_l_tree.

Definition at line 46 of file xmss_common_ops.cpp.

References Botan::XMSS_Address::get_tree_height(), Botan::XMSS_Parameters::len(), m_xmss_params, randomize_tree_hash(), Botan::XMSS_Address::set_tree_height(), and Botan::XMSS_Address::set_tree_index().

Referenced by create_l_tree().

51 {
52 size_t l = m_xmss_params.len();
53 adrs.set_tree_height(0);
54
55 while(l > 1)
56 {
57 for(size_t i = 0; i < l >> 1; i++)
58 {
59 adrs.set_tree_index(static_cast<uint32_t>(i));
60 randomize_tree_hash(pk[i], pk[2 * i], pk[2 * i + 1], adrs, seed, hash);
61 }
62 if(l & 0x01)
63 {
64 pk[l >> 1] = pk[l - 1];
65 }
66 l = (l >> 1) + (l & 0x01);
67 adrs.set_tree_height(adrs.get_tree_height() + 1);
68 }
69 result = pk[0];
70 }
Botan::XMSS_Common_Ops::m_xmss_params
XMSS_Parameters m_xmss_params
Definition: xmss_common_ops.h:121
Botan::XMSS_Parameters::len
size_t len() const
Definition: xmss_parameters.h:82
Botan::XMSS_Common_Ops::randomize_tree_hash
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)
Definition: xmss_common_ops.cpp:14
hash
MechanismType hash
Definition: p11_mechanism.cpp:64

void Botan::XMSS_Common_Ops::create_l_tree | ( | secure_vector< uint8_t > & | result,
|  | wots_keysig_t | pk,
|  | XMSS_Address & | adrs,
|  | const secure_vector< uint8_t > & | seed
| ) |  |
| inline protected

Algorithm 8: "ltree" Create an L-tree used to compute the leaves of the binary hash tree. Takes a WOTS+ public key and compresses it to a single n-byte value.

Parameters

  [out] | result | Public key compressed to a single n-byte value pk[0].
  [in] | pk | Winternitz One Time Signatures+ public key.
  [in] | adrs | Address encoding the address of the L-Tree
  [in] | seed | The seed generated during the public key generation.

Definition at line 112 of file xmss_common_ops.h.

References create_l_tree(), and m_hash.

116 {
117 create_l_tree(result, pk, adrs, seed, m_hash);
118 }
Botan::XMSS_Common_Ops::create_l_tree
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)
Definition: xmss_common_ops.cpp:46
Botan::XMSS_Common_Ops::m_hash
XMSS_Hash m_hash
Definition: xmss_common_ops.h:122

void Botan::XMSS_Common_Ops::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
| ) |  |
| protected

Algorithm 7: "RAND_HASH"

Generates a randomized hash.

This overload is used in multithreaded scenarios, where it is required to provide seperate instances of XMSS_Hash to each thread.

Parameters

  [out] | result | The resulting randomized hash.
  [in] | left | Left half of the hash function input.
  [in] | right | Right half of the hash function input.
  [in] | adrs | Adress of the hash function call.
  [in] | seed | The seed for G.
  [in] | hash | Instance of XMSS_Hash, that may only by the thead executing generate_public_key.

Definition at line 14 of file xmss_common_ops.cpp.

References BOTAN_ASSERT, Botan::XMSS_Address::bytes(), Botan::XMSS_Parameters::element_size(), Botan::XMSS_Hash::h(), Botan::XMSS_Address::Key_Mode, m_xmss_params, Botan::XMSS_Address::Mask_LSB_Mode, Botan::XMSS_Address::Mask_MSB_Mode, Botan::XMSS_Hash::prf(), and Botan::XMSS_Address::set_key_mask_mode().

Referenced by create_l_tree(), randomize_tree_hash(), and Botan::XMSS_PrivateKey::tree_hash().

20 {
21 adrs.set_key_mask_mode(XMSS_Address::Key_Mask::Key_Mode);
22 secure_vector<uint8_t> key { hash.prf(seed, adrs.bytes()) };
23
24 adrs.set_key_mask_mode(XMSS_Address::Key_Mask::Mask_MSB_Mode);
25 secure_vector<uint8_t> bitmask_l { hash.prf(seed, adrs.bytes()) };
26
27 adrs.set_key_mask_mode(XMSS_Address::Key_Mask::Mask_LSB_Mode);
28 secure_vector<uint8_t> bitmask_r { hash.prf(seed, adrs.bytes()) };
29
30 BOTAN_ASSERT(bitmask_l.size() == left.size() &&
31 bitmask_r.size() == right.size(),
32 "Bitmask size doesn't match node size.");
33
34 secure_vector<uint8_t> concat_xor(m_xmss_params.element_size() * 2);
35 for(size_t i = 0; i < left.size(); i++)
36 {
37 concat_xor[i] = left[i] ^ bitmask_l[i];
38 concat_xor[i + left.size()] = right[i] ^ bitmask_r[i];
39 }
40
41 hash.h(result, key, concat_xor);
42 }
Botan::XMSS_Address::Key_Mask::Mask_MSB_Mode
Botan::XMSS_Parameters::element_size
size_t element_size() const
Definition: xmss_parameters.h:67
BOTAN_ASSERT
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:55
Botan::XMSS_Common_Ops::m_xmss_params
XMSS_Parameters m_xmss_params
Definition: xmss_common_ops.h:121
Botan::XMSS_Address::Key_Mask::Mask_LSB_Mode
hash
MechanismType hash
Definition: p11_mechanism.cpp:64
Botan::XMSS_Address::Key_Mask::Key_Mode

void Botan::XMSS_Common_Ops::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
| ) |  |
| inline protected

Algorithm 7: "RAND_HASH"

Generates a randomized hash.

Parameters

  [out] | result | The resulting randomized hash.
  [in] | left | Left half of the hash function input.
  [in] | right | Right half of the hash function input.
  [in] | adrs | Adress of the hash function call.
  [in] | seed | The seed for G.

Definition at line 69 of file xmss_common_ops.h.

References m_hash, and randomize_tree_hash().

75 {
76 randomize_tree_hash(result, left, right, adrs, seed, m_hash);
77 }
Botan::XMSS_Common_Ops::m_hash
XMSS_Hash m_hash
Definition: xmss_common_ops.h:122
Botan::XMSS_Common_Ops::randomize_tree_hash
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)
Definition: xmss_common_ops.cpp:14

## Member Data Documentation

XMSS_Hash Botan::XMSS_Common_Ops::m_hash
| protected

Definition at line 122 of file xmss_common_ops.h.

Referenced by create_l_tree(), randomize_tree_hash(), Botan::XMSS_Signature_Operation::sign(), Botan::XMSS_PrivateKey::tree_hash(), and Botan::XMSS_Signature_Operation::update().

XMSS_Parameters Botan::XMSS_Common_Ops::m_xmss_params
| protected

Definition at line 121 of file xmss_common_ops.h.

Referenced by create_l_tree(), randomize_tree_hash(), and Botan::XMSS_Signature_Operation::signature_length().

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

- src/lib/pubkey/xmss/xmss_common_ops.h
- src/lib/pubkey/xmss/xmss_common_ops.cpp