diff options
author | Jack Lloyd <[email protected]> | 2016-11-25 11:37:34 -0500 |
---|---|---|
committer | Jack Lloyd <[email protected]> | 2016-11-25 11:37:34 -0500 |
commit | ee01125c47fed991f5b6403383ccf4bdc753c02b (patch) | |
tree | 7a95964bcdba5c72a7cf850b37b22b2458f5d6ed /src/lib | |
parent | 1adda900e3fcc8b874f7bc8c18665150b40a5c80 (diff) | |
parent | 035081b44b68f9a91261e5086291c97842f88e51 (diff) |
Merge GH #736 Add SHAKE support to XMSS
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/hash/hash.cpp | 8 | ||||
-rw-r--r-- | src/lib/pubkey/xmss/xmss_parameters.cpp | 141 | ||||
-rw-r--r-- | src/lib/pubkey/xmss/xmss_parameters.h | 13 | ||||
-rw-r--r-- | src/lib/pubkey/xmss/xmss_wots_parameters.cpp | 37 | ||||
-rw-r--r-- | src/lib/pubkey/xmss/xmss_wots_parameters.h | 5 |
5 files changed, 102 insertions, 102 deletions
diff --git a/src/lib/hash/hash.cpp b/src/lib/hash/hash.cpp index 112554127..186811b64 100644 --- a/src/lib/hash/hash.cpp +++ b/src/lib/hash/hash.cpp @@ -251,10 +251,18 @@ std::unique_ptr<HashFunction> HashFunction::create(const std::string& algo_spec, { return std::unique_ptr<HashFunction>(new SHAKE_128(req.arg_as_integer(0, 128))); } + if(req.algo_name() == "SHAKE-128(256)") + { + return std::unique_ptr<HashFunction>(new SHAKE_128(req.arg_as_integer(0, 256))); + } if(req.algo_name() == "SHAKE-256") { return std::unique_ptr<HashFunction>(new SHAKE_256(req.arg_as_integer(0, 256))); } + if(req.algo_name() == "SHAKE-256(512)") + { + return std::unique_ptr<HashFunction>(new SHAKE_256(req.arg_as_integer(0, 512))); + } #endif #if defined(BOTAN_HAS_WHIRLPOOL) diff --git a/src/lib/pubkey/xmss/xmss_parameters.cpp b/src/lib/pubkey/xmss/xmss_parameters.cpp index ad0e43642..f1f3281cf 100644 --- a/src/lib/pubkey/xmss/xmss_parameters.cpp +++ b/src/lib/pubkey/xmss/xmss_parameters.cpp @@ -24,13 +24,13 @@ const std::map<std::string, XMSS_Parameters::xmss_algorithm_t> { "XMSS_SHA2-256_W16_H20", XMSS_SHA2_256_W16_H20 }, { "XMSS_SHA2-512_W16_H10", XMSS_SHA2_512_W16_H10 }, { "XMSS_SHA2-512_W16_H16", XMSS_SHA2_512_W16_H16 }, - { "XMSS_SHA2-512_W16_H20", XMSS_SHA2_512_W16_H20 } -// { "XMSS_SHAKE128_W16_H10", xmss_algorithm_t::XMSS_SHAKE128_W16_H10 }, -// { "XMSS_SHAKE128_W16_H16", xmss_algorithm_t::XMSS_SHAKE128_W16_H16 }, -// { "XMSS_SHAKE128_W16_H20", xmss_algorithm_t::XMSS_SHAKE128_W16_H20 }, -// { "XMSS_SHAKE256_W16_H10", xmss_algorithm_t::XMSS_SHAKE256_W16_H10 }, -// { "XMSS_SHAKE256_W16_H16", xmss_algorithm_t::XMSS_SHAKE256_W16_H16 }, -// { "XMSS_SHAKE256_W16_H20", xmss_algorithm_t::XMSS_SHAKE256_W16_H20 } + { "XMSS_SHA2-512_W16_H20", XMSS_SHA2_512_W16_H20 }, + { "XMSS_SHAKE128_W16_H10", XMSS_SHAKE128_W16_H10 }, + { "XMSS_SHAKE128_W16_H16", XMSS_SHAKE128_W16_H16 }, + { "XMSS_SHAKE128_W16_H20", XMSS_SHAKE128_W16_H20 }, + { "XMSS_SHAKE256_W16_H10", XMSS_SHAKE256_W16_H10 }, + { "XMSS_SHAKE256_W16_H16", XMSS_SHAKE256_W16_H16 }, + { "XMSS_SHAKE256_W16_H20", XMSS_SHAKE256_W16_H20 } }; XMSS_Parameters::XMSS_Parameters(const std::string& algo_name) @@ -102,73 +102,66 @@ XMSS_Parameters::XMSS_Parameters(xmss_algorithm_t oid) m_strength = 512; m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_512_W16; break; -// FIXME: Uncomment once SHAKE128/256 implementation is available in Botan. -// case XMSS_SHAKE128_W16_H10: -// m_element_size = 32; -// m_w = 16; -// m_len = 67; -// m_tree_height = 10; -// m_name = "XMSS_SHAKE128_W16_H10"; -// m_hash_name = ""; -// m_strength = 256; -// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16; -// BOTAN_ASSERT(false, "XMSS_SHAKE128_W16_H10 not implemented."); -// break; -// case XMSS_SHAKE128_W16_H16: -// m_element_size = 32; -// m_w = 16; -// m_len = 67; -// m_tree_height = 16; -// m_name = "XMSS_SHAKE128_W16_H16"; -// m_hash_name = ""; -// m_strength = 256; -// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16; -// BOTAN_ASSERT(false, "XMSS_SHAKE128_W16_H16 not implemented."); -// break; -// case XMSS_SHAKE128_W16_H20: -// m_element_size = 32; -// m_w = 16; -// m_len = 67; -// m_tree_height = 20; -// m_name = "XMSS_SHAKE128_W16_H20"; -// m_hash_name = ""; -// m_strength = 256; -// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16; -// BOTAN_ASSERT(false, "XMSS_SHAKE128_W16_H20 not implemented."); -// break; -// case XMSS_SHAKE256_W16_H10: -// m_element_size = 64; -// m_w = 16; -// m_len = 131; -// m_tree_height = 10; -// m_name = "XMSS_SHAKE256_W16_H10"; -// m_hash_name = ""; -// m_strength = 512; -// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16; -// BOTAN_ASSERT(false, "XMSS_SHAKE256_W16_H10 not implemented."); -// break; -// case XMSS_SHAKE256_W16_H16: -// m_element_size = 64; -// m_w = 16; -// m_len = 131; -// m_tree_height = 16; -// m_name = "XMSS_SHAKE256_W16_H16"; -// m_hash_name = ""; -// m_strength = 512; -// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16; -// BOTAN_ASSERT(false, "XMSS_SHAKE256_W16_H16 not implemented."); -// break; -// case XMSS_SHAKE256_W16_H20: -// m_element_size = 64; -// m_w = 16; -// m_len = 131; -// m_tree_height = 20; -// m_name = "XMSS_SHAKE256_W16_H20"; -// m_hash_name = ""; -// m_strength = 512; -// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16; -// BOTAN_ASSERT(false, "XMSS_SHAKE256_W16_H20 not implemented."); -// break; + case XMSS_SHAKE128_W16_H10: + m_element_size = 32; + m_w = 16; + m_len = 67; + m_tree_height = 10; + m_name = "XMSS_SHAKE128_W16_H10"; + m_hash_name = "SHAKE-128(256)"; + m_strength = 256; + m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16; + break; + case XMSS_SHAKE128_W16_H16: + m_element_size = 32; + m_w = 16; + m_len = 67; + m_tree_height = 16; + m_name = "XMSS_SHAKE128_W16_H16"; + m_hash_name = "SHAKE-128(256)"; + m_strength = 256; + m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16; + break; + case XMSS_SHAKE128_W16_H20: + m_element_size = 32; + m_w = 16; + m_len = 67; + m_tree_height = 20; + m_name = "XMSS_SHAKE128_W16_H20"; + m_hash_name = "SHAKE-128(256)"; + m_strength = 256; + m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16; + break; + case XMSS_SHAKE256_W16_H10: + m_element_size = 64; + m_w = 16; + m_len = 131; + m_tree_height = 10; + m_name = "XMSS_SHAKE256_W16_H10"; + m_hash_name = "SHAKE-256(512)"; + m_strength = 512; + m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16; + break; + case XMSS_SHAKE256_W16_H16: + m_element_size = 64; + m_w = 16; + m_len = 131; + m_tree_height = 16; + m_name = "XMSS_SHAKE256_W16_H16"; + m_hash_name = "SHAKE-256(512)"; + m_strength = 512; + m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16; + break; + case XMSS_SHAKE256_W16_H20: + m_element_size = 64; + m_w = 16; + m_len = 131; + m_tree_height = 20; + m_name = "XMSS_SHAKE256_W16_H20"; + m_hash_name = "SHAKE-256(512)"; + m_strength = 512; + m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16; + break; default: throw Unsupported_Argument( "Algorithm id does not match any XMSS algorithm id."); diff --git a/src/lib/pubkey/xmss/xmss_parameters.h b/src/lib/pubkey/xmss/xmss_parameters.h index 11e3b3f8a..7a83af381 100644 --- a/src/lib/pubkey/xmss/xmss_parameters.h +++ b/src/lib/pubkey/xmss/xmss_parameters.h @@ -36,13 +36,12 @@ class BOTAN_DLL XMSS_Parameters XMSS_SHA2_512_W16_H10 = 0x04000004, XMSS_SHA2_512_W16_H16 = 0x05000005, XMSS_SHA2_512_W16_H20 = 0x06000006, -// FIXME: Uncomment once SHAKE128/256 implementation is available in Botan. -// XMSS_SHAKE128_W16_H10 = 0x07000007, -// XMSS_SHAKE128_W16_H16 = 0x08000008, -// XMSS_SHAKE128_W16_H20 = 0x09000009, -// XMSS_SHAKE256_W16_H10 = 0x0a00000a, -// XMSS_SHAKE256_W16_H16 = 0x0b00000b, -// XMSS_SHAKE256_W16_H20 = 0x0c00000c + XMSS_SHAKE128_W16_H10 = 0x07000007, + XMSS_SHAKE128_W16_H16 = 0x08000008, + XMSS_SHAKE128_W16_H20 = 0x09000009, + XMSS_SHAKE256_W16_H10 = 0x0a00000a, + XMSS_SHAKE256_W16_H16 = 0x0b00000b, + XMSS_SHAKE256_W16_H20 = 0x0c00000c }; XMSS_Parameters(const std::string& algo_name); diff --git a/src/lib/pubkey/xmss/xmss_wots_parameters.cpp b/src/lib/pubkey/xmss/xmss_wots_parameters.cpp index 139cdd382..274da8d31 100644 --- a/src/lib/pubkey/xmss/xmss_wots_parameters.cpp +++ b/src/lib/pubkey/xmss/xmss_wots_parameters.cpp @@ -21,7 +21,9 @@ const std::map<std::string, XMSS_WOTS_Parameters::ots_algorithm_t> XMSS_WOTS_Parameters::m_oid_name_lut = { { "WOTSP_SHA2-256_W16", WOTSP_SHA2_256_W16 }, - { "WOTSP_SHA2-512_W16", WOTSP_SHA2_512_W16 } + { "WOTSP_SHA2-512_W16", WOTSP_SHA2_512_W16 }, + { "WOTSP_SHAKE128_W16", WOTSP_SHAKE128_W16 }, + { "WOTSP_SHAKE256_W16", WOTSP_SHAKE256_W16 } }; XMSS_WOTS_Parameters::XMSS_WOTS_Parameters(const std::string& algo_name) @@ -49,23 +51,22 @@ XMSS_WOTS_Parameters::XMSS_WOTS_Parameters(ots_algorithm_t oid) m_hash_name = "SHA-512"; m_strength = 512; break; -// FIXME: Uncomment once SHAKE128/256 implementation is available in Botan. -// case WOTSP_SHAKE128_W16: -// m_element_size = 32; -// m_w = 16; -// m_len = 67; -// m_name = "WOTSP_SHAKE128_W16"; -// m_hash_name = "<MISSING>"; -// m_strength = 256; -// break; -// case WOTSP_SHAKE256_W16: -// m_element_size = 64; -// m_w = 16; -// m_len = 131; -// m_name = "WOTSP_SHAKE256_W16"; -// m_hash_name = "<MISSING>"; -// m_strength = 512; -// break; + case WOTSP_SHAKE128_W16: + m_element_size = 32; + m_w = 16; + m_len = 67; + m_name = "WOTSP_SHAKE128_W16"; + m_hash_name = "SHAKE-128(256)"; + m_strength = 256; + break; + case WOTSP_SHAKE256_W16: + m_element_size = 64; + m_w = 16; + m_len = 131; + m_name = "WOTSP_SHAKE256_W16"; + m_hash_name = "SHAKE-256(512)"; + m_strength = 512; + break; default: throw Unsupported_Argument( "Algorithm id does not match any XMSS WOTS algorithm id."); diff --git a/src/lib/pubkey/xmss/xmss_wots_parameters.h b/src/lib/pubkey/xmss/xmss_wots_parameters.h index 4a69afd20..15644a257 100644 --- a/src/lib/pubkey/xmss/xmss_wots_parameters.h +++ b/src/lib/pubkey/xmss/xmss_wots_parameters.h @@ -38,9 +38,8 @@ class XMSS_WOTS_Parameters { WOTSP_SHA2_256_W16 = 0x01000001, WOTSP_SHA2_512_W16 = 0x02000002, -// FIXME: Uncomment once SHAKE128/256 implementation is available in Botan. -// WOTSP_SHAKE128_W16 = 0x03000003, -// WOTSP_SHAKE256_W16 = 0x04000004 + WOTSP_SHAKE128_W16 = 0x03000003, + WOTSP_SHAKE256_W16 = 0x04000004 }; XMSS_WOTS_Parameters(const std::string& algo_name); |