Botan 2.1.0 Crypto and TLS for C++11

- Main Page
- Namespaces
- Classes
- Files

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

Public Types | Public Member Functions | Static Public Member Functions | List of all members
Botan::XMSS_WOTS_Parameters Class Reference

`#include <xmss_wots_parameters.h>`

## Public Types
enum | ots_algorithm_t { WOTSP_SHA2_256_W16 = 0x01000001, WOTSP_SHA2_512_W16 = 0x02000002, WOTSP_SHAKE128_W16 = 0x03000003, WOTSP_SHAKE256_W16 = 0x04000004 }

## Public Member Functions
void | append_checksum (secure_vector< uint8_t > &data)
secure_vector< uint8_t > | base_w (const secure_vector< uint8_t > &msg, size_t out_size) const
secure_vector< uint8_t > | base_w (size_t value) const
size_t | element_size () const
size_t | estimated_strength () const
const std::string & | hash_function_name () const
size_t | len () const
size_t | len_1 () const
size_t | len_2 () const
size_t | lg_w () const
const std::string & | name () const
ots_algorithm_t | oid () const
bool | operator== (const XMSS_WOTS_Parameters &p) const
size_t | wots_parameter () const
| XMSS_WOTS_Parameters (const std::string &algo_name)
| XMSS_WOTS_Parameters (ots_algorithm_t ots_spec)

## Static Public Member Functions
static ots_algorithm_t | xmss_wots_id_from_string (const std::string &param_set)

## Detailed Description

Descibes a signature method for XMSS Winternitz One Time Signatures, as defined in: [1] XMSS: Extended Hash-Based Signatures, draft-itrf-cfrg-xmss-hash-based-signatures-06 Release: July 2016. https://datatracker.ietf.org/doc/ draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1

Definition at line 34 of file xmss_wots_parameters.h.

## Member Enumeration Documentation

enum Botan::XMSS_WOTS_Parameters::ots_algorithm_t

Enumerator
WOTSP_SHA2_256_W16 |
WOTSP_SHA2_512_W16 |
WOTSP_SHAKE128_W16 |
WOTSP_SHAKE256_W16 |

Definition at line 37 of file xmss_wots_parameters.h.

38 {
39 WOTSP_SHA2_256_W16 = 0x01000001,
40 WOTSP_SHA2_512_W16 = 0x02000002,
41 WOTSP_SHAKE128_W16 = 0x03000003,
42 WOTSP_SHAKE256_W16 = 0x04000004
43 };
Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE128_W16
Definition: xmss_wots_parameters.h:41
Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_256_W16
Definition: xmss_wots_parameters.h:39
Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_512_W16
Definition: xmss_wots_parameters.h:40
Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE256_W16
Definition: xmss_wots_parameters.h:42

## Constructor & Destructor Documentation

Botan::XMSS_WOTS_Parameters::XMSS_WOTS_Parameters | ( | const std::string & | algo_name | ) |

Definition at line 35 of file xmss_wots_parameters.cpp.

36 : XMSS_WOTS_Parameters(xmss_wots_id_from_string(param_set))
37 {}
Botan::XMSS_WOTS_Parameters::xmss_wots_id_from_string
static ots_algorithm_t xmss_wots_id_from_string(const std::string &param_set)
Definition: xmss_wots_parameters.cpp:22
Botan::XMSS_WOTS_Parameters::XMSS_WOTS_Parameters
XMSS_WOTS_Parameters(const std::string &algo_name)
Definition: xmss_wots_parameters.cpp:35

Botan::XMSS_WOTS_Parameters::XMSS_WOTS_Parameters | ( | ots_algorithm_t | ots_spec | ) |

Definition at line 39 of file xmss_wots_parameters.cpp.

References BOTAN_ASSERT, element_size(), wots_parameter(), WOTSP_SHA2_256_W16, WOTSP_SHA2_512_W16, WOTSP_SHAKE128_W16, and WOTSP_SHAKE256_W16.

40 : m_oid(oid)
41 {
42 switch(oid)
43 {
44 case WOTSP_SHA2_256_W16:
45 m_element_size = 32;
46 m_w = 16;
47 m_len = 67;
48 m_name = "WOTSP_SHA2-256_W16";
49 m_hash_name = "SHA-256";
50 m_strength = 256;
51 break;
52 case WOTSP_SHA2_512_W16:
53 m_element_size = 64;
54 m_w = 16;
55 m_len = 131;
56 m_name = "WOTSP_SHA2-512_W16";
57 m_hash_name = "SHA-512";
58 m_strength = 512;
59 break;
60 case WOTSP_SHAKE128_W16:
61 m_element_size = 32;
62 m_w = 16;
63 m_len = 67;
64 m_name = "WOTSP_SHAKE128_W16";
65 m_hash_name = "SHAKE-128(256)";
66 m_strength = 256;
67 break;
68 case WOTSP_SHAKE256_W16:
69 m_element_size = 64;
70 m_w = 16;
71 m_len = 131;
72 m_name = "WOTSP_SHAKE256_W16";
73 m_hash_name = "SHAKE-256(512)";
74 m_strength = 512;
75 break;
76 default:
77 throw Unsupported_Argument(
78 "Algorithm id does not match any XMSS WOTS algorithm id.");
79 break;
80 }
81
82 m_w == 16 ? m_lg_w = 4 : m_lg_w = 2;
83 m_len_1 = static_cast<size_t>(ceil((8 * element_size()) / m_lg_w));
84 m_len_2 = static_cast<size_t>(
85 floor(log2(m_len_1 * (wots_parameter() - 1)) / m_lg_w) + 1);
86 BOTAN_ASSERT(m_len == m_len_1 + m_len_2, "Invalid XMSS WOTS parameter "
87 "\"len\" detedted.");
88 }
Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE128_W16
Definition: xmss_wots_parameters.h:41
Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_256_W16
Definition: xmss_wots_parameters.h:39
Botan::XMSS_WOTS_Parameters::element_size
size_t element_size() const
Definition: xmss_wots_parameters.h:87
BOTAN_ASSERT
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:27
Botan::XMSS_WOTS_Parameters::wots_parameter
size_t wots_parameter() const
Definition: xmss_wots_parameters.h:95
Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_512_W16
Definition: xmss_wots_parameters.h:40
Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE256_W16
Definition: xmss_wots_parameters.h:42
Botan::XMSS_WOTS_Parameters::oid
ots_algorithm_t oid() const
Definition: xmss_wots_parameters.h:105

## Member Function Documentation

void Botan::XMSS_WOTS_Parameters::append_checksum | ( | secure_vector< uint8_t > & | data | ) |

Definition at line 124 of file xmss_wots_parameters.cpp.

References base_w(), and wots_parameter().

Referenced by Botan::XMSS_WOTS_PrivateKey::sign().

125 {
126 size_t csum = 0;
127
128 for(size_t i = 0; i < data.size(); i++)
129 {
130 csum += wots_parameter() - 1 - data[i];
131 }
132
133 secure_vector<uint8_t> csum_bytes = base_w(csum);
134 std::move(csum_bytes.begin(), csum_bytes.end(), std::back_inserter(data));
135 }
Botan::XMSS_WOTS_Parameters::base_w
secure_vector< uint8_t > base_w(const secure_vector< uint8_t > &msg, size_t out_size) const
Definition: xmss_wots_parameters.cpp:91
Botan::XMSS_WOTS_Parameters::wots_parameter
size_t wots_parameter() const
Definition: xmss_wots_parameters.h:95

secure_vector< uint8_t > Botan::XMSS_WOTS_Parameters::base_w | ( | const secure_vector< uint8_t > & | msg,
|  | size_t | out_size
| ) |  | const

Algorithm 1: convert input string to base.

Parameters

  msg | Input string (referred to as X in [1]).
  out_size | size of message in base w.

Returns
  Input string converted to the given base.

Definition at line 91 of file xmss_wots_parameters.cpp.

Referenced by append_checksum(), base_w(), and Botan::XMSS_WOTS_PrivateKey::sign().

92 {
93 secure_vector<uint8_t> result;
94 size_t in = 0;
95 size_t total = 0;
96 size_t bits = 0;
97
98 for(size_t i = 0; i < out_size; i++)
99 {
100 if(bits == 0)
101 {
102 total = msg[in];
103 in++;
104 bits += 8;
105 }
106 bits -= m_lg_w;
107 result.push_back(static_cast<uint8_t>((total >> bits) & (m_w - 1)));
108 }
109 return result;
110 }

secure_vector< uint8_t > Botan::XMSS_WOTS_Parameters::base_w | ( | size_t | value | ) | const

Definition at line 113 of file xmss_wots_parameters.cpp.

References base_w(), and Botan::XMSS_Tools::concat().

114 {
115 value <<= (8 - ((m_len_2 * m_lg_w) % 8));
116 size_t len_2_bytes = static_cast<size_t>(
117 ceil(static_cast<float>(m_len_2 * m_lg_w) / 8.f));
118 secure_vector<uint8_t> result;
119 XMSS_Tools::concat(result, value, len_2_bytes);
120 return base_w(result, m_len_2);
121 }
Botan::XMSS_WOTS_Parameters::base_w
secure_vector< uint8_t > base_w(const secure_vector< uint8_t > &msg, size_t out_size) const
Definition: xmss_wots_parameters.cpp:91
Botan::XMSS_Tools::concat
static void concat(secure_vector< uint8_t > &target, const T &src)
Definition: xmss_tools.h:63

size_t Botan::XMSS_WOTS_Parameters::element_size | ( |  | ) | const
| inline

Retrieves the uniform length of a message, and the size of each node. This correlates to XMSS parameter "n" defined in [1].

Returns
  element length in bytes.

Definition at line 87 of file xmss_wots_parameters.h.

Referenced by Botan::XMSS_WOTS_Verification_Operation::is_valid_signature(), Botan::XMSS_WOTS_Signature_Operation::sign(), Botan::XMSS_PrivateKey::XMSS_PrivateKey(), XMSS_WOTS_Parameters(), and Botan::XMSS_WOTS_Signature_Operation::XMSS_WOTS_Signature_Operation().

87 { return m_element_size; }

size_t Botan::XMSS_WOTS_Parameters::estimated_strength | ( |  | ) | const
| inline

Definition at line 107 of file xmss_wots_parameters.h.

107 { return m_strength; }

const std::string& Botan::XMSS_WOTS_Parameters::hash_function_name | ( |  | ) | const
| inline

Returns
  Botan name for the hash function used.

Definition at line 75 of file xmss_wots_parameters.h.

76 {
77 return m_hash_name;
78 }

size_t Botan::XMSS_WOTS_Parameters::len | ( |  | ) | const
| inline

Definition at line 97 of file xmss_wots_parameters.h.

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

97 { return m_len; }

size_t Botan::XMSS_WOTS_Parameters::len_1 | ( |  | ) | const
| inline

Definition at line 99 of file xmss_wots_parameters.h.

Referenced by Botan::XMSS_WOTS_PrivateKey::sign().

99 { return m_len_1; }

size_t Botan::XMSS_WOTS_Parameters::len_2 | ( |  | ) | const
| inline

Definition at line 101 of file xmss_wots_parameters.h.

101 { return m_len_2; }

size_t Botan::XMSS_WOTS_Parameters::lg_w | ( |  | ) | const
| inline

Definition at line 103 of file xmss_wots_parameters.h.

103 { return m_lg_w; }

const std::string& Botan::XMSS_WOTS_Parameters::name | ( |  | ) | const
| inline

Returns
  XMSS WOTS registry name for the chosen parameter set.

Definition at line 67 of file xmss_wots_parameters.h.

68 {
69 return m_name;
70 }

ots_algorithm_t Botan::XMSS_WOTS_Parameters::oid | ( |  | ) | const
| inline

Definition at line 105 of file xmss_wots_parameters.h.

Referenced by Botan::XMSS_WOTS_PrivateKey::generate_public_key(), Botan::XMSS_WOTS_Verification_Operation::is_valid_signature(), and Botan::XMSS_PrivateKey::tree_hash().

105 { return m_oid; }

bool Botan::XMSS_WOTS_Parameters::operator== | ( | const XMSS_WOTS_Parameters & | p | ) | const
| inline

Definition at line 109 of file xmss_wots_parameters.h.

110 {
111 return m_oid == p.m_oid;
112 }

size_t Botan::XMSS_WOTS_Parameters::wots_parameter | ( |  | ) | const
| inline

The Winternitz parameter.

Returns
  numeric base used for internal representation of data.

Definition at line 95 of file xmss_wots_parameters.h.

Referenced by append_checksum(), Botan::XMSS_WOTS_Common_Ops::chain(), Botan::XMSS_WOTS_PublicKey::chain(), Botan::XMSS_WOTS_PrivateKey::generate_public_key(), and XMSS_WOTS_Parameters().

95 { return m_w; }

XMSS_WOTS_Parameters::ots_algorithm_t Botan::XMSS_WOTS_Parameters::xmss_wots_id_from_string | ( | const std::string & | param_set | ) |
| static

Definition at line 22 of file xmss_wots_parameters.cpp.

References WOTSP_SHA2_256_W16, WOTSP_SHA2_512_W16, WOTSP_SHAKE128_W16, and WOTSP_SHAKE256_W16.

23 {
24 if(param_set == "WOTSP_SHA2-256_W16")
25 return WOTSP_SHA2_256_W16;
26 if(param_set == "WOTSP_SHA2-512_W16")
27 return WOTSP_SHA2_512_W16;
28 if(param_set == "WOTSP_SHAKE128_W16")
29 return WOTSP_SHAKE128_W16;
30 if(param_set == "WOTSP_SHAKE256_W16")
31 return WOTSP_SHAKE256_W16;
32 throw Invalid_Argument("Unknown XMSS-WOTS algorithm param '" + param_set + "'");
33 }
Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE128_W16
Definition: xmss_wots_parameters.h:41
Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_256_W16
Definition: xmss_wots_parameters.h:39
Botan::XMSS_WOTS_Parameters::WOTSP_SHA2_512_W16
Definition: xmss_wots_parameters.h:40
Botan::XMSS_WOTS_Parameters::WOTSP_SHAKE256_W16
Definition: xmss_wots_parameters.h:42

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

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