Botan  2.1.0
Crypto and TLS for C++11
xmss_wots_common_ops.cpp
Go to the documentation of this file.
1 /**
2  * XMSS WOTS Common Ops
3  * Operations shared by XMSS WOTS signature generation and verification
4  * operations.
5  *
6  * (C) 2016 Matthias Gierlings
7  *
8  * Botan is released under the Simplified BSD License (see license.txt)
9  **/
10 
11 #include <botan/internal/xmss_wots_common_ops.h>
12 
13 namespace Botan {
14 
15 void
17  size_t start_idx,
18  size_t steps,
19  XMSS_Address& adrs,
20  const secure_vector<uint8_t>& seed)
21  {
22  for(size_t i = start_idx;
23  i < (start_idx + steps) && i < m_wots_params.wots_parameter();
24  i++)
25  {
26  adrs.set_hash_address(i);
27 
28  //Calculate tmp XOR bitmask
30  xor_buf(result, m_hash.prf(seed, adrs.bytes()), result.size());
31 
32  // Calculate key
34 
35  //Calculate f(key, tmp XOR bitmask)
36  m_hash.f(result, m_hash.prf(seed, adrs.bytes()), result);
37  }
38  }
39 
40 }
void xor_buf(T out[], const T in[], size_t length)
Definition: mem_ops.h:115
void chain(secure_vector< uint8_t > &result, size_t start_idx, size_t steps, XMSS_Address &adrs, const secure_vector< uint8_t > &seed)
void f(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
Definition: xmss_hash.h:74
std::vector< T, secure_allocator< T >> secure_vector
Definition: secmem.h:121
XMSS_WOTS_Parameters m_wots_params
void prf(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
Definition: xmss_hash.h:38
Definition: alg_id.cpp:13
void set_key_mask_mode(Key_Mask value)
Definition: xmss_address.h:136
const secure_vector< uint8_t > & bytes() const
Definition: xmss_address.h:326
void set_hash_address(uint32_t value)
Definition: xmss_address.h:286