aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/pubkey/xmss
diff options
context:
space:
mode:
authorMatthias Gierlings <[email protected]>2016-11-12 20:38:35 +0100
committerMatthias Gierlings <[email protected]>2016-11-12 21:51:10 +0100
commitcd888d1f437945808284694664d95f273309a536 (patch)
tree647d5b6a93c23f465b75c59218648ffe6261df57 /src/lib/pubkey/xmss
parent8ae1f77cf639e2589efb8ac12dc689029737b3be (diff)
Adds changes from XMSS Review & resolves conflicts
Diffstat (limited to 'src/lib/pubkey/xmss')
-rw-r--r--src/lib/pubkey/xmss/xmss_index_registry.h7
-rw-r--r--src/lib/pubkey/xmss/xmss_tools.cpp32
-rw-r--r--src/lib/pubkey/xmss/xmss_tools.h3
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_addressed_publickey.h14
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_privatekey.h28
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_publickey.h23
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_signature_operation.cpp6
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_signature_operation.h12
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_verification_operation.cpp10
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_verification_operation.h17
10 files changed, 32 insertions, 120 deletions
diff --git a/src/lib/pubkey/xmss/xmss_index_registry.h b/src/lib/pubkey/xmss/xmss_index_registry.h
index 3e5aaa794..8759ca03b 100644
--- a/src/lib/pubkey/xmss/xmss_index_registry.h
+++ b/src/lib/pubkey/xmss/xmss_index_registry.h
@@ -12,19 +12,12 @@
#include <cstddef>
#include <limits>
#include <memory>
-<<<<<<< HEAD
-=======
-#include <mutex>
->>>>>>> 959425d... Added Extended Hash-Based Signatures (XMSS)
#include <string>
#include <botan/hash.h>
#include <botan/secmem.h>
#include <botan/types.h>
#include <botan/atomic.h>
-<<<<<<< HEAD
#include <botan/mutex.h>
-=======
->>>>>>> 959425d... Added Extended Hash-Based Signatures (XMSS)
namespace Botan {
diff --git a/src/lib/pubkey/xmss/xmss_tools.cpp b/src/lib/pubkey/xmss/xmss_tools.cpp
deleted file mode 100644
index 13e66759c..000000000
--- a/src/lib/pubkey/xmss/xmss_tools.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * XMSS Tools
- * Contains some helper functions.
- * (C) 2016 Matthias Gierlings
- *
- * Botan is released under the Simplified BSD License (see license.txt)
- **/
-#include <botan/xmss_tools.h>
-
-namespace Botan {
-
-XMSS_Tools::XMSS_Tools()
- {
-#if defined(BOTAN_TARGET_CPU_HAS_KNOWN_ENDIANESS)
-#if defined(BOTAN_TARGET_CPU_IS_LITTLE_ENDIAN)
- m_is_little_endian = true;
-#else
- m_is_little_endian = false;
-#endif
-#else
- uint16_t data = 0x01;
- m_is_little_endian = reinterpret_cast<const byte*>(&data)[0] == 0x01;
-#endif
- }
-
-const XMSS_Tools& XMSS_Tools::get()
- {
- static const XMSS_Tools self;
- return self;
- }
-
-}
diff --git a/src/lib/pubkey/xmss/xmss_tools.h b/src/lib/pubkey/xmss/xmss_tools.h
index ab60665c7..a62f17ebf 100644
--- a/src/lib/pubkey/xmss/xmss_tools.h
+++ b/src/lib/pubkey/xmss/xmss_tools.h
@@ -11,10 +11,7 @@
#include <stdint.h>
#include <iterator>
#include <type_traits>
-<<<<<<< HEAD
#include <botan/cpuid.h>
-=======
->>>>>>> 959425d... Added Extended Hash-Based Signatures (XMSS)
#include <botan/types.h>
#include <botan/secmem.h>
diff --git a/src/lib/pubkey/xmss/xmss_wots_addressed_publickey.h b/src/lib/pubkey/xmss/xmss_wots_addressed_publickey.h
index 52165684f..a07b0b803 100644
--- a/src/lib/pubkey/xmss/xmss_wots_addressed_publickey.h
+++ b/src/lib/pubkey/xmss/xmss_wots_addressed_publickey.h
@@ -77,19 +77,9 @@ class XMSS_WOTS_Addressed_PublicKey : public virtual Public_Key
return m_pub_key.estimated_strength();
}
- virtual size_t max_input_bits() const override
+ virtual size_t key_length() const override
{
- return m_pub_key.max_input_bits();
- }
-
- virtual size_t message_part_size() const override
- {
- return m_pub_key.message_part_size();
- }
-
- virtual size_t message_parts() const override
- {
- return m_pub_key.message_parts();
+ return m_pub_key.estimated_strength();
}
virtual std::vector<byte> x509_subject_public_key() const override
diff --git a/src/lib/pubkey/xmss/xmss_wots_privatekey.h b/src/lib/pubkey/xmss/xmss_wots_privatekey.h
index 312db8b7b..179a4b51b 100644
--- a/src/lib/pubkey/xmss/xmss_wots_privatekey.h
+++ b/src/lib/pubkey/xmss/xmss_wots_privatekey.h
@@ -12,6 +12,7 @@
#include <memory>
#include <botan/alg_id.h>
#include <botan/assert.h>
+#include <botan/exceptn.h>
#include <botan/pk_keys.h>
#include <botan/types.h>
#include <botan/xmss_wots_parameters.h>
@@ -150,8 +151,7 @@ class BOTAN_DLL XMSS_WOTS_PrivateKey : public virtual XMSS_WOTS_PublicKey,
*
* @return A XMSS_WOTS_PublicKey.
**/
- XMSS_WOTS_PublicKey generate_public_key(
- XMSS_Address& adrs);
+ XMSS_WOTS_PublicKey generate_public_key(XMSS_Address& adrs);
/**
* Algorithm 4: "WOTS_genPK"
@@ -165,10 +165,9 @@ class BOTAN_DLL XMSS_WOTS_PrivateKey : public virtual XMSS_WOTS_PublicKey,
* @param adrs Hash function address encoding the address of
* the WOTS+ key pair within a greater structure.
**/
- void generate_public_key(
- XMSS_WOTS_PublicKey& pub_key,
- wots_keysig_t&& in_key_data,
- XMSS_Address& adrs);
+ void generate_public_key(XMSS_WOTS_PublicKey& pub_key,
+ wots_keysig_t&& in_key_data,
+ XMSS_Address& adrs);
/**
* Algorithm 5: "WOTS_sign"
@@ -180,9 +179,8 @@ class BOTAN_DLL XMSS_WOTS_PrivateKey : public virtual XMSS_WOTS_PublicKey,
*
* @return signature for msg.
**/
- wots_keysig_t sign(
- const secure_vector<byte>& msg,
- XMSS_Address& adrs);
+ wots_keysig_t sign(const secure_vector<byte>& msg,
+ XMSS_Address& adrs);
/**
* Retrieves the secret seed used to generate WOTS+ chains. The seed
@@ -195,14 +193,6 @@ class BOTAN_DLL XMSS_WOTS_PrivateKey : public virtual XMSS_WOTS_PublicKey,
return m_private_seed;
}
- ///**
- // * Retrieves the secret seed used to generate WOTS+ chains. The seed
- // * should be a uniformly random n-byte value.
- // *
- // * @return secret seed.
- // **/
- //secure_vector<byte>& private_seed() { return m_private_seed; }
-
/**
* Sets the secret seed used to generate WOTS+ chains. The seed
* should be a uniformly random n-byte value.
@@ -228,7 +218,7 @@ class BOTAN_DLL XMSS_WOTS_PrivateKey : public virtual XMSS_WOTS_PublicKey,
virtual AlgorithmIdentifier
pkcs8_algorithm_identifier() const override
{
- BOTAN_ASSERT(false, "No AlgorithmIdentifier available for XMSS-WOTS.");
+ throw Not_Implemented("No AlgorithmIdentifier available for XMSS-WOTS.");
}
virtual std::unique_ptr<PK_Ops::Signature>
@@ -238,7 +228,7 @@ class BOTAN_DLL XMSS_WOTS_PrivateKey : public virtual XMSS_WOTS_PublicKey,
virtual secure_vector<byte> pkcs8_private_key() const override
{
- BOTAN_ASSERT(false, "No PKCS8 key format defined for XMSS-WOTS.");
+ throw Not_Implemented("No PKCS8 key format defined for XMSS-WOTS.");
}
private:
diff --git a/src/lib/pubkey/xmss/xmss_wots_publickey.h b/src/lib/pubkey/xmss/xmss_wots_publickey.h
index 9efb04667..626d55225 100644
--- a/src/lib/pubkey/xmss/xmss_wots_publickey.h
+++ b/src/lib/pubkey/xmss/xmss_wots_publickey.h
@@ -15,6 +15,7 @@
#include <botan/alg_id.h>
#include <botan/asn1_oid.h>
#include <botan/assert.h>
+#include <botan/exceptn.h>
#include <botan/pk_keys.h>
#include <botan/types.h>
#include <botan/xmss_wots_parameters.h>
@@ -200,22 +201,28 @@ class BOTAN_DLL XMSS_WOTS_PublicKey : virtual public Public_Key
operator wots_keysig_t& () { return m_key; }
const secure_vector<byte>& public_seed() const { return m_public_seed; }
+
secure_vector<byte>& public_seed() { return m_public_seed; }
+
void set_public_seed(const secure_vector<byte>& public_seed)
{
m_public_seed = public_seed;
}
+
void set_public_seed(secure_vector<byte>&& public_seed)
{
m_public_seed = std::move(public_seed);
}
const wots_keysig_t& key_data() const { return m_key; }
+
wots_keysig_t& key_data() { return m_key; }
+
void set_key_data(const wots_keysig_t& key_data)
{
m_key = key_data;
}
+
void set_key_data(wots_keysig_t&& key_data)
{
m_key = std::move(key_data);
@@ -233,12 +240,12 @@ class BOTAN_DLL XMSS_WOTS_PublicKey : virtual public Public_Key
virtual AlgorithmIdentifier algorithm_identifier() const override
{
- BOTAN_ASSERT(false, "No AlgorithmIdentifier available for XMSS-WOTS.");
+ throw Not_Implemented("No AlgorithmIdentifier available for XMSS-WOTS.");
}
virtual bool check_key(RandomNumberGenerator&, bool) const override
{
- BOTAN_ASSERT(false, "No key strength check implemented for XMSS-WOTS.");
+ return true;
}
virtual std::unique_ptr<PK_Ops::Verification>
@@ -255,19 +262,9 @@ class BOTAN_DLL XMSS_WOTS_PublicKey : virtual public Public_Key
return m_wots_params.estimated_strength();
}
- virtual size_t message_part_size() const override
- {
- return m_wots_params.element_size();
- }
-
- virtual size_t message_parts() const override
- {
- return 1;
- }
-
virtual std::vector<byte> x509_subject_public_key() const override
{
- BOTAN_ASSERT(false, "No x509 key format defined for XMSS-WOTS.");
+ throw Not_Implemented("No x509 key format defined for XMSS-WOTS.");
}
bool operator==(const XMSS_WOTS_PublicKey& key)
diff --git a/src/lib/pubkey/xmss/xmss_wots_signature_operation.cpp b/src/lib/pubkey/xmss/xmss_wots_signature_operation.cpp
index 82f32b88e..532e4d782 100644
--- a/src/lib/pubkey/xmss/xmss_wots_signature_operation.cpp
+++ b/src/lib/pubkey/xmss/xmss_wots_signature_operation.cpp
@@ -21,13 +21,15 @@ XMSS_WOTS_Signature_Operation::XMSS_WOTS_Signature_Operation(
m_priv_key(private_key),
m_msg_buf(0)
{
- m_msg_buf.reserve(m_priv_key.message_part_size());
+ m_msg_buf.reserve(
+ m_priv_key.private_key().wots_parameters().element_size());
}
void
XMSS_WOTS_Signature_Operation::update(const byte msg[], size_t msg_len)
{
- BOTAN_ASSERT(msg_len == message_part_size() &&
+ BOTAN_ASSERT(msg_len == m_priv_key.private_key().wots_parameters().
+ element_size() &&
m_msg_buf.size() == 0,
"XMSS WOTS only supports one message part of size n.");
diff --git a/src/lib/pubkey/xmss/xmss_wots_signature_operation.h b/src/lib/pubkey/xmss/xmss_wots_signature_operation.h
index 2b469e200..69ba6b4fe 100644
--- a/src/lib/pubkey/xmss/xmss_wots_signature_operation.h
+++ b/src/lib/pubkey/xmss/xmss_wots_signature_operation.h
@@ -29,23 +29,11 @@ class XMSS_WOTS_Signature_Operation : public virtual PK_Ops::Signature,
public XMSS_WOTS_Common_Ops
{
public:
- typedef XMSS_WOTS_Addressed_PrivateKey Key_Type;
-
XMSS_WOTS_Signature_Operation(
const XMSS_WOTS_Addressed_PrivateKey& private_key);
virtual ~XMSS_WOTS_Signature_Operation() {}
- virtual size_t message_part_size() const override
- {
- return m_priv_key.message_part_size();
- }
-
- virtual size_t message_parts() const override
- {
- return m_priv_key.message_parts();
- }
-
/**
* Creates a XMSS WOTS signature for the message provided through call
* to update(). XMSS wots only supports one message part and a fixed
diff --git a/src/lib/pubkey/xmss/xmss_wots_verification_operation.cpp b/src/lib/pubkey/xmss/xmss_wots_verification_operation.cpp
index 6bff05b93..d66c508bb 100644
--- a/src/lib/pubkey/xmss/xmss_wots_verification_operation.cpp
+++ b/src/lib/pubkey/xmss/xmss_wots_verification_operation.cpp
@@ -21,22 +21,26 @@ XMSS_WOTS_Verification_Operation::XMSS_WOTS_Verification_Operation(
m_pub_key(public_key),
m_msg_buf(0)
{
- m_msg_buf.reserve(m_pub_key.message_part_size());
+ m_msg_buf.reserve(m_pub_key.public_key().wots_parameters().
+ element_size());
}
void
XMSS_WOTS_Verification_Operation::update(const byte msg[], size_t msg_len)
{
- BOTAN_ASSERT(msg_len == message_part_size() &&
+ BOTAN_ASSERT(msg_len == m_pub_key.public_key().wots_parameters().
+ element_size() &&
m_msg_buf.size() == 0,
"XMSS WOTS only supports one message part of size n.");
for(size_t i = 0; i < msg_len; i++)
+ {
m_msg_buf.push_back(msg[i]);
+ }
}
bool XMSS_WOTS_Verification_Operation::is_valid_signature(const byte sig[],
- size_t sig_len)
+ size_t sig_len)
{
const XMSS_WOTS_Parameters& w = m_pub_key.public_key().wots_parameters();
diff --git a/src/lib/pubkey/xmss/xmss_wots_verification_operation.h b/src/lib/pubkey/xmss/xmss_wots_verification_operation.h
index d4d961e80..1125a6af8 100644
--- a/src/lib/pubkey/xmss/xmss_wots_verification_operation.h
+++ b/src/lib/pubkey/xmss/xmss_wots_verification_operation.h
@@ -29,28 +29,11 @@ class XMSS_WOTS_Verification_Operation
public XMSS_WOTS_Common_Ops
{
public:
- typedef XMSS_WOTS_Addressed_PublicKey Key_Type;
-
XMSS_WOTS_Verification_Operation(
const XMSS_WOTS_Addressed_PublicKey& public_key);
virtual ~XMSS_WOTS_Verification_Operation() {}
- virtual size_t max_input_bits() const override
- {
- return m_pub_key.max_input_bits();
- }
-
- virtual size_t message_part_size() const override
- {
- return m_pub_key.message_part_size();
- }
-
- virtual size_t message_parts() const override
- {
- return m_pub_key.message_parts();
- }
-
virtual bool is_valid_signature(const byte sig[],
size_t sig_len) override;