|
6 | 6 | #include "crypto/sha1.h"
|
7 | 7 | #include "crypto/sha256.h"
|
8 | 8 | #include "crypto/sha512.h"
|
| 9 | +#include "crypto/hmac_sha256.h" |
9 | 10 | #include "crypto/hmac_sha512.h"
|
10 | 11 | #include "random.h"
|
11 | 12 | #include "utilstrencodings.h"
|
@@ -50,6 +51,11 @@ void TestSHA256(const std::string &in, const std::string &hexout) { TestVector(C
|
50 | 51 | void TestSHA512(const std::string &in, const std::string &hexout) { TestVector(CSHA512(), in, ParseHex(hexout));}
|
51 | 52 | void TestRIPEMD160(const std::string &in, const std::string &hexout) { TestVector(CRIPEMD160(), in, ParseHex(hexout));}
|
52 | 53 |
|
| 54 | +void TestHMACSHA256(const std::string &hexkey, const std::string &hexin, const std::string &hexout) { |
| 55 | + std::vector<unsigned char> key = ParseHex(hexkey); |
| 56 | + TestVector(CHMAC_SHA256(&key[0], key.size()), ParseHex(hexin), ParseHex(hexout)); |
| 57 | +} |
| 58 | + |
53 | 59 | void TestHMACSHA512(const std::string &hexkey, const std::string &hexin, const std::string &hexout) {
|
54 | 60 | std::vector<unsigned char> key = ParseHex(hexkey);
|
55 | 61 | TestVector(CHMAC_SHA512(&key[0], key.size()), ParseHex(hexin), ParseHex(hexout));
|
@@ -160,6 +166,43 @@ BOOST_AUTO_TEST_CASE(sha512_testvectors) {
|
160 | 166 | "37de8c3ef5459d76a52cedc02dc499a3c9ed9dedbfb3281afd9653b8a112fafc");
|
161 | 167 | }
|
162 | 168 |
|
| 169 | +BOOST_AUTO_TEST_CASE(hmac_sha256_testvectors) { |
| 170 | + // test cases 1, 2, 3, 4, 6 and 7 of RFC 4231 |
| 171 | + TestHMACSHA256("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
| 172 | + "4869205468657265", |
| 173 | + "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7"); |
| 174 | + TestHMACSHA256("4a656665", |
| 175 | + "7768617420646f2079612077616e7420666f72206e6f7468696e673f", |
| 176 | + "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843"); |
| 177 | + TestHMACSHA256("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
| 178 | + "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" |
| 179 | + "dddddddddddddddddddddddddddddddddddd", |
| 180 | + "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe"); |
| 181 | + TestHMACSHA256("0102030405060708090a0b0c0d0e0f10111213141516171819", |
| 182 | + "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" |
| 183 | + "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd", |
| 184 | + "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b"); |
| 185 | + TestHMACSHA256("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 186 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 187 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 188 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 189 | + "aaaaaa", |
| 190 | + "54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a" |
| 191 | + "65204b6579202d2048617368204b6579204669727374", |
| 192 | + "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54"); |
| 193 | + TestHMACSHA256("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 194 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 195 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 196 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| 197 | + "aaaaaa", |
| 198 | + "5468697320697320612074657374207573696e672061206c6172676572207468" |
| 199 | + "616e20626c6f636b2d73697a65206b657920616e642061206c61726765722074" |
| 200 | + "68616e20626c6f636b2d73697a6520646174612e20546865206b6579206e6565" |
| 201 | + "647320746f20626520686173686564206265666f7265206265696e6720757365" |
| 202 | + "642062792074686520484d414320616c676f726974686d2e", |
| 203 | + "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2"); |
| 204 | +} |
| 205 | + |
163 | 206 | BOOST_AUTO_TEST_CASE(hmac_sha512_testvectors) {
|
164 | 207 | // test cases 1, 2, 3, 4, 6 and 7 of RFC 4231
|
165 | 208 | TestHMACSHA512("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
|
|
0 commit comments