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 | List of all members
Botan::XMSS_Signature Class Referencefinal

`#include <xmss_signature.h>`

## Public Member Functions
secure_vector< uint8_t > | bytes () const
const secure_vector< uint8_t > | randomness () const
secure_vector< uint8_t > & | randomness ()
void | set_randomness (const secure_vector< uint8_t > &randomness)
void | set_randomness (secure_vector< uint8_t > &&randomness)
void | set_tree (const XMSS_WOTS_PublicKey::TreeSignature &tree_sig)
void | set_tree (XMSS_WOTS_PublicKey::TreeSignature &&tree_sig)
void | set_unused_leaf_idx (size_t idx)
const XMSS_WOTS_PublicKey::TreeSignature & | tree () const
XMSS_WOTS_PublicKey::TreeSignature & | tree ()
size_t | unused_leaf_index () const
| XMSS_Signature (XMSS_Parameters::xmss_algorithm_t oid, const secure_vector< uint8_t > &raw_sig)
| XMSS_Signature (size_t leaf_idx, const secure_vector< uint8_t > &randomness, const XMSS_WOTS_PublicKey::TreeSignature &tree_sig)
| XMSS_Signature (size_t leaf_idx, secure_vector< uint8_t > &&randomness, XMSS_WOTS_PublicKey::TreeSignature &&tree_sig)

## Detailed Description

Definition at line 20 of file xmss_signature.h.

## Constructor & Destructor Documentation

Botan::XMSS_Signature::XMSS_Signature | ( | XMSS_Parameters::xmss_algorithm_t | oid,
|  | const secure_vector< uint8_t > & | raw_sig
| ) |  |

Creates a signature from an XMSS signature method and a uint8_t sequence representing a raw signature.

Parameters

  oid | XMSS signature method
  raw_sig | An XMSS signature serialized using XMSS_Signature::bytes().

Definition at line 12 of file xmss_signature.cpp.

References Botan::XMSS_WOTS_PublicKey::TreeSignature::authentication_path(), Botan::XMSS_Parameters::element_size(), Botan::XMSS_Parameters::len(), Botan::XMSS_WOTS_PublicKey::TreeSignature::ots_signature(), and Botan::XMSS_Parameters::tree_height().

14 : m_leaf_idx(0), m_randomness(0, 0x00), m_tree_sig()
15 {
16 XMSS_Parameters xmss_params(oid);
17
18 if(raw_sig.size() != (xmss_params.len() + xmss_params.tree_height() + 1)
19 * xmss_params.element_size() + sizeof(uint32_t))
20 {
21 throw Decoding_Error("XMSS signature size invalid.");
22 }
23
24 for(size_t i = 0; i < 4; i++)
25 { m_leaf_idx = ((m_leaf_idx << 8) | raw_sig[i]); }
26
27 if(m_leaf_idx >= (1ull << xmss_params.tree_height()))
28 {
29 throw Decoding_Error("XMSS signature leaf index out of bounds.");
30 }
31
32 auto begin = raw_sig.begin() + sizeof(uint32_t);
33 auto end = begin + xmss_params.element_size();
34 std::copy(begin, end, std::back_inserter(m_randomness));
35
36 for(size_t i = 0; i < xmss_params.len(); i++)
37 {
38 begin = end;
39 end = begin + xmss_params.element_size();
40 m_tree_sig.ots_signature().push_back(secure_vector<uint8_t>(0));
41 m_tree_sig.ots_signature().back().reserve(
42 xmss_params.element_size());
43 std::copy(begin,
44 end,
45 std::back_inserter(m_tree_sig.ots_signature().back()));
46 }
47
48 for(size_t i = 0; i < xmss_params.tree_height(); i++)
49 {
50 begin = end;
51 end = begin + xmss_params.element_size();
52 m_tree_sig.authentication_path().push_back(secure_vector<uint8_t>(0));
53 m_tree_sig.authentication_path().back().reserve(
54 xmss_params.element_size());
55 std::copy(begin,
56 end,
57 std::back_inserter(m_tree_sig.authentication_path().back()));
58 }
59 }
Botan::XMSS_WOTS_PublicKey::TreeSignature::ots_signature
const wots_keysig_t & ots_signature() const
Definition: xmss_wots_publickey.h:51
Botan::XMSS_WOTS_PublicKey::TreeSignature::authentication_path
const wots_keysig_t & authentication_path() const
Definition: xmss_wots_publickey.h:61

Botan::XMSS_Signature::XMSS_Signature | ( | size_t | leaf_idx,
|  | const secure_vector< uint8_t > & | randomness,
|  | const XMSS_WOTS_PublicKey::TreeSignature & | tree_sig
| ) |  |
| inline

Creates an XMSS Signature from a leaf index used for signature generation, a random value and a tree signature.

Parameters

  leaf_idx | Leaf index used to generate the signature.
  randomness | A random value.
  tree_sig | A tree signature.

Definition at line 42 of file xmss_signature.h.

45 : m_leaf_idx(leaf_idx), m_randomness(randomness),
46 m_tree_sig(tree_sig) {}
Botan::XMSS_Signature::randomness
const secure_vector< uint8_t > randomness() const
Definition: xmss_signature.h:65

Botan::XMSS_Signature::XMSS_Signature | ( | size_t | leaf_idx,
|  | secure_vector< uint8_t > && | randomness,
|  | XMSS_WOTS_PublicKey::TreeSignature && | tree_sig
| ) |  |
| inline

Creates an XMSS Signature from a leaf index used for signature generation, a random value and a tree signature.

Parameters

  leaf_idx | Leaf index used to generate the signature.
  randomness | A random value.
  tree_sig | A tree signature.

Definition at line 56 of file xmss_signature.h.

59 : m_leaf_idx(leaf_idx), m_randomness(std::move(randomness)),
60 m_tree_sig(std::move(tree_sig)) {}
Botan::XMSS_Signature::randomness
const secure_vector< uint8_t > randomness() const
Definition: xmss_signature.h:65

## Member Function Documentation

secure_vector< uint8_t > Botan::XMSS_Signature::bytes | ( |  | ) | const

Generates a serialized representation of XMSS Signature by concatenating the following elements in order: 8-byte leaf index, n-bytes randomness, ots_signature, authentication path.

n is the element_size(), len equal to len(), h the tree height defined by the chosen XMSS signature method.

Returns
  serialized signature, a sequence of (len + h + 1)n bytes.

Definition at line 61 of file xmss_signature.cpp.

References Botan::XMSS_WOTS_PublicKey::TreeSignature::authentication_path(), Botan::XMSS_WOTS_PublicKey::TreeSignature::ots_signature(), and tree().

62 {
63 secure_vector<uint8_t> result
64 {
65 static_cast<uint8_t>(m_leaf_idx >> 24U),
66 static_cast<uint8_t>(m_leaf_idx >> 16U),
67 static_cast<uint8_t>(m_leaf_idx >> 8U),
68 static_cast<uint8_t>(m_leaf_idx)
69 };
70
71 std::copy(m_randomness.begin(),
72 m_randomness.end(),
73 std::back_inserter(result));
74
75 for(const auto& sig : tree().ots_signature())
76 {
77 std::copy(sig.begin(),
78 sig.end(),
79 std::back_inserter(result));
80 }
81
82 for(const auto& auth : tree().authentication_path())
83 {
84 std::copy(auth.begin(),
85 auth.end(),
86 std::back_inserter(result));
87 }
88 return result;
89 }
Botan::XMSS_WOTS_PublicKey::TreeSignature::ots_signature
const wots_keysig_t & ots_signature() const
Definition: xmss_wots_publickey.h:51
Botan::XMSS_Signature::tree
const XMSS_WOTS_PublicKey::TreeSignature & tree() const
Definition: xmss_signature.h:85
Botan::XMSS_WOTS_PublicKey::TreeSignature::authentication_path
const wots_keysig_t & authentication_path() const
Definition: xmss_wots_publickey.h:61

const secure_vector<uint8_t> Botan::XMSS_Signature::randomness | ( |  | ) | const
| inline

Definition at line 65 of file xmss_signature.h.

Referenced by set_randomness().

66 {
67 return m_randomness;
68 }

secure_vector<uint8_t>& Botan::XMSS_Signature::randomness | ( |  | ) |
| inline

Definition at line 70 of file xmss_signature.h.

71 {
72 return m_randomness;
73 }

void Botan::XMSS_Signature::set_randomness | ( | const secure_vector< uint8_t > & | randomness | ) |
| inline

Definition at line 75 of file xmss_signature.h.

References randomness().

76 {
77 m_randomness = randomness;
78 }
Botan::XMSS_Signature::randomness
const secure_vector< uint8_t > randomness() const
Definition: xmss_signature.h:65

void Botan::XMSS_Signature::set_randomness | ( | secure_vector< uint8_t > && | randomness | ) |
| inline

Definition at line 80 of file xmss_signature.h.

References randomness().

81 {
82 m_randomness = std::move(randomness);
83 }
Botan::XMSS_Signature::randomness
const secure_vector< uint8_t > randomness() const
Definition: xmss_signature.h:65

void Botan::XMSS_Signature::set_tree | ( | const XMSS_WOTS_PublicKey::TreeSignature & | tree_sig | ) |
| inline

Definition at line 95 of file xmss_signature.h.

96 {
97 m_tree_sig = tree_sig;
98 }

void Botan::XMSS_Signature::set_tree | ( | XMSS_WOTS_PublicKey::TreeSignature && | tree_sig | ) |
| inline

Definition at line 100 of file xmss_signature.h.

101 {
102 m_tree_sig = std::move(tree_sig);
103 }

void Botan::XMSS_Signature::set_unused_leaf_idx | ( | size_t | idx | ) |
| inline

Definition at line 63 of file xmss_signature.h.

63 { m_leaf_idx = idx; }

const XMSS_WOTS_PublicKey::TreeSignature& Botan::XMSS_Signature::tree | ( |  | ) | const
| inline

Definition at line 85 of file xmss_signature.h.

Referenced by bytes().

86 {
87 return m_tree_sig;
88 }

XMSS_WOTS_PublicKey::TreeSignature& Botan::XMSS_Signature::tree | ( |  | ) |
| inline

Definition at line 90 of file xmss_signature.h.

91 {
92 return m_tree_sig;
93 }

size_t Botan::XMSS_Signature::unused_leaf_index | ( |  | ) | const
| inline

Definition at line 62 of file xmss_signature.h.

62 { return m_leaf_idx; }

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

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