Pieter Wuille
11 years ago
committed by
Pieter Wuille
4 changed files with 203 additions and 186 deletions
@ -0,0 +1,202 @@ |
|||||||
|
// Copyright (c) 2014 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT/X11 software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include "crypto/ripemd160.h" |
||||||
|
#include "crypto/sha1.h" |
||||||
|
#include "crypto/sha2.h" |
||||||
|
#include "util.h" |
||||||
|
|
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#include <boost/test/unit_test.hpp> |
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE(crypto_tests) |
||||||
|
|
||||||
|
template<typename Hasher, typename In, typename Out> |
||||||
|
void TestVector(const Hasher &h, const In &in, const Out &out) { |
||||||
|
Out hash; |
||||||
|
hash.resize(out.size()); |
||||||
|
{ |
||||||
|
// Test that writing the whole input string at once works.
|
||||||
|
Hasher(h).Write((unsigned char*)&in[0], in.size()).Finalize(&hash[0]); |
||||||
|
BOOST_CHECK(hash == out); |
||||||
|
} |
||||||
|
for (int i=0; i<32; i++) { |
||||||
|
// Test that writing the string broken up in random pieces works.
|
||||||
|
Hasher hasher(h); |
||||||
|
size_t pos = 0; |
||||||
|
while (pos < in.size()) { |
||||||
|
size_t len = insecure_rand() % ((in.size() - pos + 1) / 2 + 1); |
||||||
|
hasher.Write((unsigned char*)&in[pos], len); |
||||||
|
pos += len; |
||||||
|
if (pos > 0 && pos + 2 * out.size() > in.size()) { |
||||||
|
// Test that writing the rest at once to a copy of a hasher works.
|
||||||
|
Hasher(hasher).Write((unsigned char*)&in[pos], in.size() - pos).Finalize(&hash[0]); |
||||||
|
BOOST_CHECK(hash == out); |
||||||
|
} |
||||||
|
} |
||||||
|
hasher.Finalize(&hash[0]); |
||||||
|
BOOST_CHECK(hash == out); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void TestSHA1(const std::string &in, const std::string &hexout) { TestVector(CSHA1(), in, ParseHex(hexout));} |
||||||
|
void TestSHA256(const std::string &in, const std::string &hexout) { TestVector(CSHA256(), in, ParseHex(hexout));} |
||||||
|
void TestSHA512(const std::string &in, const std::string &hexout) { TestVector(CSHA512(), in, ParseHex(hexout));} |
||||||
|
void TestRIPEMD160(const std::string &in, const std::string &hexout) { TestVector(CRIPEMD160(), in, ParseHex(hexout));} |
||||||
|
|
||||||
|
void TestHMACSHA512(const std::string &hexkey, const std::string &hexin, const std::string &hexout) { |
||||||
|
std::vector<unsigned char> key = ParseHex(hexkey); |
||||||
|
TestVector(CHMAC_SHA512(&key[0], key.size()), ParseHex(hexin), ParseHex(hexout)); |
||||||
|
} |
||||||
|
|
||||||
|
std::string LongTestString(void) { |
||||||
|
std::string ret; |
||||||
|
for (int i=0; i<200000; i++) { |
||||||
|
ret += (unsigned char)(i); |
||||||
|
ret += (unsigned char)(i >> 4); |
||||||
|
ret += (unsigned char)(i >> 8); |
||||||
|
ret += (unsigned char)(i >> 12); |
||||||
|
ret += (unsigned char)(i >> 16); |
||||||
|
} |
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
const std::string test1 = LongTestString(); |
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(ripemd160_testvectors) { |
||||||
|
TestRIPEMD160("", "9c1185a5c5e9fc54612808977ee8f548b2258d31"); |
||||||
|
TestRIPEMD160("abc", "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc"); |
||||||
|
TestRIPEMD160("message digest", "5d0689ef49d2fae572b881b123a85ffa21595f36"); |
||||||
|
TestRIPEMD160("secure hash algorithm", "20397528223b6a5f4cbc2808aba0464e645544f9"); |
||||||
|
TestRIPEMD160("RIPEMD160 is considered to be safe", "a7d78608c7af8a8e728778e81576870734122b66"); |
||||||
|
TestRIPEMD160("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", |
||||||
|
"12a053384a9c0c88e405a06c27dcf49ada62eb2b"); |
||||||
|
TestRIPEMD160("For this sample, this 63-byte string will be used as input data", |
||||||
|
"de90dbfee14b63fb5abf27c2ad4a82aaa5f27a11"); |
||||||
|
TestRIPEMD160("This is exactly 64 bytes long, not counting the terminating byte", |
||||||
|
"eda31d51d3a623b81e19eb02e24ff65d27d67b37"); |
||||||
|
TestRIPEMD160(std::string(1000000, 'a'), "52783243c1697bdbe16d37f97f68f08325dc1528"); |
||||||
|
TestRIPEMD160(test1, "464243587bd146ea835cdf57bdae582f25ec45f1"); |
||||||
|
} |
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(sha1_testvectors) { |
||||||
|
TestSHA1("", "da39a3ee5e6b4b0d3255bfef95601890afd80709"); |
||||||
|
TestSHA1("abc", "a9993e364706816aba3e25717850c26c9cd0d89d"); |
||||||
|
TestSHA1("message digest", "c12252ceda8be8994d5fa0290a47231c1d16aae3"); |
||||||
|
TestSHA1("secure hash algorithm", "d4d6d2f0ebe317513bbd8d967d89bac5819c2f60"); |
||||||
|
TestSHA1("SHA1 is considered to be safe", "f2b6650569ad3a8720348dd6ea6c497dee3a842a"); |
||||||
|
TestSHA1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", |
||||||
|
"84983e441c3bd26ebaae4aa1f95129e5e54670f1"); |
||||||
|
TestSHA1("For this sample, this 63-byte string will be used as input data", |
||||||
|
"4f0ea5cd0585a23d028abdc1a6684e5a8094dc49"); |
||||||
|
TestSHA1("This is exactly 64 bytes long, not counting the terminating byte", |
||||||
|
"fb679f23e7d1ce053313e66e127ab1b444397057"); |
||||||
|
TestSHA1(std::string(1000000, 'a'), "34aa973cd4c4daa4f61eeb2bdbad27316534016f"); |
||||||
|
TestSHA1(test1, "b7755760681cbfd971451668f32af5774f4656b5"); |
||||||
|
} |
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(sha256_testvectors) { |
||||||
|
TestSHA256("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); |
||||||
|
TestSHA256("abc", "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"); |
||||||
|
TestSHA256("message digest", |
||||||
|
"f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650"); |
||||||
|
TestSHA256("secure hash algorithm", |
||||||
|
"f30ceb2bb2829e79e4ca9753d35a8ecc00262d164cc077080295381cbd643f0d"); |
||||||
|
TestSHA256("SHA256 is considered to be safe", |
||||||
|
"6819d915c73f4d1e77e4e1b52d1fa0f9cf9beaead3939f15874bd988e2a23630"); |
||||||
|
TestSHA256("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", |
||||||
|
"248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"); |
||||||
|
TestSHA256("For this sample, this 63-byte string will be used as input data", |
||||||
|
"f08a78cbbaee082b052ae0708f32fa1e50c5c421aa772ba5dbb406a2ea6be342"); |
||||||
|
TestSHA256("This is exactly 64 bytes long, not counting the terminating byte", |
||||||
|
"ab64eff7e88e2e46165e29f2bce41826bd4c7b3552f6b382a9e7d3af47c245f8"); |
||||||
|
TestSHA256("As Bitcoin relies on 80 byte header hashes, we want to have an example for that.", |
||||||
|
"7406e8de7d6e4fffc573daef05aefb8806e7790f55eab5576f31349743cca743"); |
||||||
|
TestSHA256(std::string(1000000, 'a'), |
||||||
|
"cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0"); |
||||||
|
TestSHA256(test1, "a316d55510b49662420f49d145d42fb83f31ef8dc016aa4e32df049991a91e26"); |
||||||
|
} |
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(sha512_testvectors) { |
||||||
|
TestSHA512("", |
||||||
|
"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce" |
||||||
|
"47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"); |
||||||
|
TestSHA512("abc", |
||||||
|
"ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" |
||||||
|
"2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"); |
||||||
|
TestSHA512("message digest", |
||||||
|
"107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f33" |
||||||
|
"09e16455ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c"); |
||||||
|
TestSHA512("secure hash algorithm", |
||||||
|
"7746d91f3de30c68cec0dd693120a7e8b04d8073cb699bdce1a3f64127bca7a3" |
||||||
|
"d5db502e814bb63c063a7a5043b2df87c61133395f4ad1edca7fcf4b30c3236e"); |
||||||
|
TestSHA512("SHA512 is considered to be safe", |
||||||
|
"099e6468d889e1c79092a89ae925a9499b5408e01b66cb5b0a3bd0dfa51a9964" |
||||||
|
"6b4a3901caab1318189f74cd8cf2e941829012f2449df52067d3dd5b978456c2"); |
||||||
|
TestSHA512("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", |
||||||
|
"204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c335" |
||||||
|
"96fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445"); |
||||||
|
TestSHA512("For this sample, this 63-byte string will be used as input data", |
||||||
|
"b3de4afbc516d2478fe9b518d063bda6c8dd65fc38402dd81d1eb7364e72fb6e" |
||||||
|
"6663cf6d2771c8f5a6da09601712fb3d2a36c6ffea3e28b0818b05b0a8660766"); |
||||||
|
TestSHA512("This is exactly 64 bytes long, not counting the terminating byte", |
||||||
|
"70aefeaa0e7ac4f8fe17532d7185a289bee3b428d950c14fa8b713ca09814a38" |
||||||
|
"7d245870e007a80ad97c369d193e41701aa07f3221d15f0e65a1ff970cedf030"); |
||||||
|
TestSHA512("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno" |
||||||
|
"ijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", |
||||||
|
"8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018" |
||||||
|
"501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909"); |
||||||
|
TestSHA512(std::string(1000000, 'a'), |
||||||
|
"e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb" |
||||||
|
"de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b"); |
||||||
|
TestSHA512(test1, |
||||||
|
"40cac46c147e6131c5193dd5f34e9d8bb4951395f27b08c558c65ff4ba2de594" |
||||||
|
"37de8c3ef5459d76a52cedc02dc499a3c9ed9dedbfb3281afd9653b8a112fafc"); |
||||||
|
} |
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(hmac_sha512_testvectors) { |
||||||
|
// test cases 1, 2, 3, 4, 6 and 7 of RFC 4231
|
||||||
|
TestHMACSHA512("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
||||||
|
"4869205468657265", |
||||||
|
"87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cde" |
||||||
|
"daa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854"); |
||||||
|
TestHMACSHA512("4a656665", |
||||||
|
"7768617420646f2079612077616e7420666f72206e6f7468696e673f", |
||||||
|
"164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea250554" |
||||||
|
"9758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737"); |
||||||
|
TestHMACSHA512("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
||||||
|
"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" |
||||||
|
"dddddddddddddddddddddddddddddddddddd", |
||||||
|
"fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39" |
||||||
|
"bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb"); |
||||||
|
TestHMACSHA512("0102030405060708090a0b0c0d0e0f10111213141516171819", |
||||||
|
"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" |
||||||
|
"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd", |
||||||
|
"b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3db" |
||||||
|
"a91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd"); |
||||||
|
TestHMACSHA512("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||||||
|
"aaaaaa", |
||||||
|
"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a" |
||||||
|
"65204b6579202d2048617368204b6579204669727374", |
||||||
|
"80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f352" |
||||||
|
"6b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598"); |
||||||
|
TestHMACSHA512("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||||||
|
"aaaaaa", |
||||||
|
"5468697320697320612074657374207573696e672061206c6172676572207468" |
||||||
|
"616e20626c6f636b2d73697a65206b657920616e642061206c61726765722074" |
||||||
|
"68616e20626c6f636b2d73697a6520646174612e20546865206b6579206e6565" |
||||||
|
"647320746f20626520686173686564206265666f7265206265696e6720757365" |
||||||
|
"642062792074686520484d414320616c676f726974686d2e", |
||||||
|
"e37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944" |
||||||
|
"b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58"); |
||||||
|
} |
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END() |
@ -1,27 +0,0 @@ |
|||||||
// Copyright (c) 2014 The Bitcoin Core developers
|
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
||||||
|
|
||||||
#include "crypto/sha1.h" |
|
||||||
#include "util.h" |
|
||||||
|
|
||||||
#include <vector> |
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp> |
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(sha1_tests) |
|
||||||
|
|
||||||
void SHA1TestVector(const std::string &in, const std::string &out) { |
|
||||||
std::vector<unsigned char> hash; |
|
||||||
hash.resize(20); |
|
||||||
CSHA1().Write((unsigned char*)&in[0], in.size()).Finalize(&hash[0]); |
|
||||||
BOOST_CHECK_EQUAL(HexStr(hash), out); |
|
||||||
} |
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(sha1_testvectors) { |
|
||||||
SHA1TestVector("abc", "a9993e364706816aba3e25717850c26c9cd0d89d"); |
|
||||||
SHA1TestVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "84983e441c3bd26ebaae4aa1f95129e5e54670f1"); |
|
||||||
SHA1TestVector(std::string(1000000, 'a'), "34aa973cd4c4daa4f61eeb2bdbad27316534016f"); |
|
||||||
} |
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END() |
|
@ -1,157 +0,0 @@ |
|||||||
// Copyright (c) 2014 The Bitcoin Core developers
|
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
||||||
|
|
||||||
#include "crypto/sha2.h" |
|
||||||
#include "util.h" |
|
||||||
|
|
||||||
#include <vector> |
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp> |
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(sha2_tests) |
|
||||||
|
|
||||||
void SHA256TestVector(const std::string &in, const std::string &out) { |
|
||||||
std::vector<unsigned char> hash; |
|
||||||
hash.resize(32); |
|
||||||
CSHA256().Write((unsigned char*)&in[0], in.size()).Finalize(&hash[0]); |
|
||||||
BOOST_CHECK_EQUAL(HexStr(hash), out); |
|
||||||
} |
|
||||||
|
|
||||||
void SHA512TestVector(const std::string &in, const std::string &out) { |
|
||||||
std::vector<unsigned char> hash; |
|
||||||
hash.resize(64); |
|
||||||
CSHA512().Write((unsigned char*)&in[0], in.size()).Finalize(&hash[0]); |
|
||||||
BOOST_CHECK_EQUAL(HexStr(hash), out); |
|
||||||
} |
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(sha256_testvectors) { |
|
||||||
SHA256TestVector("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); |
|
||||||
SHA256TestVector("abc", "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"); |
|
||||||
SHA256TestVector("message digest", "f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650"); |
|
||||||
SHA256TestVector("secure hash algorithm", "f30ceb2bb2829e79e4ca9753d35a8ecc00262d164cc077080295381cbd643f0d"); |
|
||||||
SHA256TestVector("SHA256 is considered to be safe", "6819d915c73f4d1e77e4e1b52d1fa0f9cf9beaead3939f15874bd988e2a23630"); |
|
||||||
SHA256TestVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"); |
|
||||||
SHA256TestVector("For this sample, this 63-byte string will be used as input data", "f08a78cbbaee082b052ae0708f32fa1e50c5c421aa772ba5dbb406a2ea6be342"); |
|
||||||
SHA256TestVector("This is exactly 64 bytes long, not counting the terminating byte", "ab64eff7e88e2e46165e29f2bce41826bd4c7b3552f6b382a9e7d3af47c245f8"); |
|
||||||
SHA256TestVector("As Bitcoin relies on 80 byte header hashes, we want to have an example for that.", "7406e8de7d6e4fffc573daef05aefb8806e7790f55eab5576f31349743cca743"); |
|
||||||
} |
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(sha512_testvectors) { |
|
||||||
SHA512TestVector("abc", "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"); |
|
||||||
SHA512TestVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445"); |
|
||||||
SHA512TestVector("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909"); |
|
||||||
SHA512TestVector(std::string(1000000, 'a'), "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b"); |
|
||||||
SHA512TestVector("", "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"); |
|
||||||
} |
|
||||||
|
|
||||||
typedef struct { |
|
||||||
const char *pszKey; |
|
||||||
const char *pszData; |
|
||||||
const char *pszMAC; |
|
||||||
} testvec_t; |
|
||||||
|
|
||||||
// test cases 1, 2, 3, 4, 6 and 7 of RFC 4231
|
|
||||||
static const testvec_t vtest[] = { |
|
||||||
{ |
|
||||||
"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" |
|
||||||
"0b0b0b0b", |
|
||||||
"4869205468657265", |
|
||||||
"87aa7cdea5ef619d4ff0b4241a1d6cb0" |
|
||||||
"2379f4e2ce4ec2787ad0b30545e17cde" |
|
||||||
"daa833b7d6b8a702038b274eaea3f4e4" |
|
||||||
"be9d914eeb61f1702e696c203a126854" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"4a656665", |
|
||||||
"7768617420646f2079612077616e7420" |
|
||||||
"666f72206e6f7468696e673f", |
|
||||||
"164b7a7bfcf819e2e395fbe73b56e0a3" |
|
||||||
"87bd64222e831fd610270cd7ea250554" |
|
||||||
"9758bf75c05a994a6d034f65f8f0e6fd" |
|
||||||
"caeab1a34d4a6b4b636e070a38bce737" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaa", |
|
||||||
"dddddddddddddddddddddddddddddddd" |
|
||||||
"dddddddddddddddddddddddddddddddd" |
|
||||||
"dddddddddddddddddddddddddddddddd" |
|
||||||
"dddd", |
|
||||||
"fa73b0089d56a284efb0f0756c890be9" |
|
||||||
"b1b5dbdd8ee81a3655f83e33b2279d39" |
|
||||||
"bf3e848279a722c806b485a47e67c807" |
|
||||||
"b946a337bee8942674278859e13292fb" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"0102030405060708090a0b0c0d0e0f10" |
|
||||||
"111213141516171819", |
|
||||||
"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" |
|
||||||
"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" |
|
||||||
"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" |
|
||||||
"cdcd", |
|
||||||
"b0ba465637458c6990e5a8c5f61d4af7" |
|
||||||
"e576d97ff94b872de76f8050361ee3db" |
|
||||||
"a91ca5c11aa25eb4d679275cc5788063" |
|
||||||
"a5f19741120c4f2de2adebeb10a298dd" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaa", |
|
||||||
"54657374205573696e67204c61726765" |
|
||||||
"72205468616e20426c6f636b2d53697a" |
|
||||||
"65204b6579202d2048617368204b6579" |
|
||||||
"204669727374", |
|
||||||
"80b24263c7c1a3ebb71493c1dd7be8b4" |
|
||||||
"9b46d1f41b4aeec1121b013783f8f352" |
|
||||||
"6b56d037e05f2598bd0fd2215d6a1e52" |
|
||||||
"95e64f73f63f0aec8b915a985d786598" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
|
||||||
"aaaaaa", |
|
||||||
"54686973206973206120746573742075" |
|
||||||
"73696e672061206c6172676572207468" |
|
||||||
"616e20626c6f636b2d73697a65206b65" |
|
||||||
"7920616e642061206c61726765722074" |
|
||||||
"68616e20626c6f636b2d73697a652064" |
|
||||||
"6174612e20546865206b6579206e6565" |
|
||||||
"647320746f2062652068617368656420" |
|
||||||
"6265666f7265206265696e6720757365" |
|
||||||
"642062792074686520484d414320616c" |
|
||||||
"676f726974686d2e", |
|
||||||
"e37b6a775dc87dbaa4dfa9f96e5e3ffd" |
|
||||||
"debd71f8867289865df5a32d20cdc944" |
|
||||||
"b6022cac3c4982b10d5eeb55c3e4de15" |
|
||||||
"134676fb6de0446065c97440fa8c6a58" |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(hmacsha512_testvectors) |
|
||||||
{ |
|
||||||
for (unsigned int n=0; n<sizeof(vtest)/sizeof(vtest[0]); n++) |
|
||||||
{ |
|
||||||
std::vector<unsigned char> vchKey = ParseHex(vtest[n].pszKey); |
|
||||||
std::vector<unsigned char> vchData = ParseHex(vtest[n].pszData); |
|
||||||
std::vector<unsigned char> vchMAC = ParseHex(vtest[n].pszMAC); |
|
||||||
unsigned char vchTemp[64]; |
|
||||||
CHMAC_SHA512(&vchKey[0], vchKey.size()).Write(&vchData[0], vchData.size()).Finalize(&vchTemp[0]); |
|
||||||
BOOST_CHECK(memcmp(&vchTemp[0], &vchMAC[0], 64) == 0); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END() |
|
Loading…
Reference in new issue