|
|
@ -58,12 +58,12 @@ void TestRIPEMD160(const std::string &in, const std::string &hexout) { TestVecto |
|
|
|
|
|
|
|
|
|
|
|
void TestHMACSHA256(const std::string &hexkey, const std::string &hexin, const std::string &hexout) { |
|
|
|
void TestHMACSHA256(const std::string &hexkey, const std::string &hexin, const std::string &hexout) { |
|
|
|
std::vector<unsigned char> key = ParseHex(hexkey); |
|
|
|
std::vector<unsigned char> key = ParseHex(hexkey); |
|
|
|
TestVector(CHMAC_SHA256(&key[0], key.size()), ParseHex(hexin), ParseHex(hexout)); |
|
|
|
TestVector(CHMAC_SHA256(key.data(), key.size()), ParseHex(hexin), ParseHex(hexout)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void TestHMACSHA512(const std::string &hexkey, const std::string &hexin, const std::string &hexout) { |
|
|
|
void TestHMACSHA512(const std::string &hexkey, const std::string &hexin, const std::string &hexout) { |
|
|
|
std::vector<unsigned char> key = ParseHex(hexkey); |
|
|
|
std::vector<unsigned char> key = ParseHex(hexkey); |
|
|
|
TestVector(CHMAC_SHA512(&key[0], key.size()), ParseHex(hexin), ParseHex(hexout)); |
|
|
|
TestVector(CHMAC_SHA512(key.data(), key.size()), ParseHex(hexin), ParseHex(hexout)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void TestAES128(const std::string &hexkey, const std::string &hexin, const std::string &hexout) |
|
|
|
void TestAES128(const std::string &hexkey, const std::string &hexin, const std::string &hexout) |
|
|
@ -76,13 +76,13 @@ void TestAES128(const std::string &hexkey, const std::string &hexin, const std:: |
|
|
|
assert(key.size() == 16); |
|
|
|
assert(key.size() == 16); |
|
|
|
assert(in.size() == 16); |
|
|
|
assert(in.size() == 16); |
|
|
|
assert(correctout.size() == 16); |
|
|
|
assert(correctout.size() == 16); |
|
|
|
AES128Encrypt enc(&key[0]); |
|
|
|
AES128Encrypt enc(key.data()); |
|
|
|
buf.resize(correctout.size()); |
|
|
|
buf.resize(correctout.size()); |
|
|
|
buf2.resize(correctout.size()); |
|
|
|
buf2.resize(correctout.size()); |
|
|
|
enc.Encrypt(&buf[0], &in[0]); |
|
|
|
enc.Encrypt(buf.data(), in.data()); |
|
|
|
BOOST_CHECK_EQUAL(HexStr(buf), HexStr(correctout)); |
|
|
|
BOOST_CHECK_EQUAL(HexStr(buf), HexStr(correctout)); |
|
|
|
AES128Decrypt dec(&key[0]); |
|
|
|
AES128Decrypt dec(key.data()); |
|
|
|
dec.Decrypt(&buf2[0], &buf[0]); |
|
|
|
dec.Decrypt(buf2.data(), buf.data()); |
|
|
|
BOOST_CHECK_EQUAL(HexStr(buf2), HexStr(in)); |
|
|
|
BOOST_CHECK_EQUAL(HexStr(buf2), HexStr(in)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -96,12 +96,12 @@ void TestAES256(const std::string &hexkey, const std::string &hexin, const std:: |
|
|
|
assert(key.size() == 32); |
|
|
|
assert(key.size() == 32); |
|
|
|
assert(in.size() == 16); |
|
|
|
assert(in.size() == 16); |
|
|
|
assert(correctout.size() == 16); |
|
|
|
assert(correctout.size() == 16); |
|
|
|
AES256Encrypt enc(&key[0]); |
|
|
|
AES256Encrypt enc(key.data()); |
|
|
|
buf.resize(correctout.size()); |
|
|
|
buf.resize(correctout.size()); |
|
|
|
enc.Encrypt(&buf[0], &in[0]); |
|
|
|
enc.Encrypt(buf.data(), in.data()); |
|
|
|
BOOST_CHECK(buf == correctout); |
|
|
|
BOOST_CHECK(buf == correctout); |
|
|
|
AES256Decrypt dec(&key[0]); |
|
|
|
AES256Decrypt dec(key.data()); |
|
|
|
dec.Decrypt(&buf[0], &buf[0]); |
|
|
|
dec.Decrypt(buf.data(), buf.data()); |
|
|
|
BOOST_CHECK(buf == in); |
|
|
|
BOOST_CHECK(buf == in); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -114,16 +114,16 @@ void TestAES128CBC(const std::string &hexkey, const std::string &hexiv, bool pad |
|
|
|
std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE); |
|
|
|
std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE); |
|
|
|
|
|
|
|
|
|
|
|
// Encrypt the plaintext and verify that it equals the cipher
|
|
|
|
// Encrypt the plaintext and verify that it equals the cipher
|
|
|
|
AES128CBCEncrypt enc(&key[0], &iv[0], pad); |
|
|
|
AES128CBCEncrypt enc(key.data(), iv.data(), pad); |
|
|
|
int size = enc.Encrypt(&in[0], in.size(), &realout[0]); |
|
|
|
int size = enc.Encrypt(in.data(), in.size(), realout.data()); |
|
|
|
realout.resize(size); |
|
|
|
realout.resize(size); |
|
|
|
BOOST_CHECK(realout.size() == correctout.size()); |
|
|
|
BOOST_CHECK(realout.size() == correctout.size()); |
|
|
|
BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + hexout); |
|
|
|
BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + hexout); |
|
|
|
|
|
|
|
|
|
|
|
// Decrypt the cipher and verify that it equals the plaintext
|
|
|
|
// Decrypt the cipher and verify that it equals the plaintext
|
|
|
|
std::vector<unsigned char> decrypted(correctout.size()); |
|
|
|
std::vector<unsigned char> decrypted(correctout.size()); |
|
|
|
AES128CBCDecrypt dec(&key[0], &iv[0], pad); |
|
|
|
AES128CBCDecrypt dec(key.data(), iv.data(), pad); |
|
|
|
size = dec.Decrypt(&correctout[0], correctout.size(), &decrypted[0]); |
|
|
|
size = dec.Decrypt(correctout.data(), correctout.size(), decrypted.data()); |
|
|
|
decrypted.resize(size); |
|
|
|
decrypted.resize(size); |
|
|
|
BOOST_CHECK(decrypted.size() == in.size()); |
|
|
|
BOOST_CHECK(decrypted.size() == in.size()); |
|
|
|
BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin); |
|
|
|
BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin); |
|
|
@ -133,12 +133,12 @@ void TestAES128CBC(const std::string &hexkey, const std::string &hexiv, bool pad |
|
|
|
{ |
|
|
|
{ |
|
|
|
std::vector<unsigned char> sub(i, in.end()); |
|
|
|
std::vector<unsigned char> sub(i, in.end()); |
|
|
|
std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE); |
|
|
|
std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE); |
|
|
|
int _size = enc.Encrypt(&sub[0], sub.size(), &subout[0]); |
|
|
|
int _size = enc.Encrypt(sub.data(), sub.size(), subout.data()); |
|
|
|
if (_size != 0) |
|
|
|
if (_size != 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
subout.resize(_size); |
|
|
|
subout.resize(_size); |
|
|
|
std::vector<unsigned char> subdecrypted(subout.size()); |
|
|
|
std::vector<unsigned char> subdecrypted(subout.size()); |
|
|
|
_size = dec.Decrypt(&subout[0], subout.size(), &subdecrypted[0]); |
|
|
|
_size = dec.Decrypt(subout.data(), subout.size(), subdecrypted.data()); |
|
|
|
subdecrypted.resize(_size); |
|
|
|
subdecrypted.resize(_size); |
|
|
|
BOOST_CHECK(decrypted.size() == in.size()); |
|
|
|
BOOST_CHECK(decrypted.size() == in.size()); |
|
|
|
BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string(" != ") + HexStr(sub)); |
|
|
|
BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string(" != ") + HexStr(sub)); |
|
|
@ -155,16 +155,16 @@ void TestAES256CBC(const std::string &hexkey, const std::string &hexiv, bool pad |
|
|
|
std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE); |
|
|
|
std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE); |
|
|
|
|
|
|
|
|
|
|
|
// Encrypt the plaintext and verify that it equals the cipher
|
|
|
|
// Encrypt the plaintext and verify that it equals the cipher
|
|
|
|
AES256CBCEncrypt enc(&key[0], &iv[0], pad); |
|
|
|
AES256CBCEncrypt enc(key.data(), iv.data(), pad); |
|
|
|
int size = enc.Encrypt(&in[0], in.size(), &realout[0]); |
|
|
|
int size = enc.Encrypt(in.data(), in.size(), realout.data()); |
|
|
|
realout.resize(size); |
|
|
|
realout.resize(size); |
|
|
|
BOOST_CHECK(realout.size() == correctout.size()); |
|
|
|
BOOST_CHECK(realout.size() == correctout.size()); |
|
|
|
BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + hexout); |
|
|
|
BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + hexout); |
|
|
|
|
|
|
|
|
|
|
|
// Decrypt the cipher and verify that it equals the plaintext
|
|
|
|
// Decrypt the cipher and verify that it equals the plaintext
|
|
|
|
std::vector<unsigned char> decrypted(correctout.size()); |
|
|
|
std::vector<unsigned char> decrypted(correctout.size()); |
|
|
|
AES256CBCDecrypt dec(&key[0], &iv[0], pad); |
|
|
|
AES256CBCDecrypt dec(key.data(), iv.data(), pad); |
|
|
|
size = dec.Decrypt(&correctout[0], correctout.size(), &decrypted[0]); |
|
|
|
size = dec.Decrypt(correctout.data(), correctout.size(), decrypted.data()); |
|
|
|
decrypted.resize(size); |
|
|
|
decrypted.resize(size); |
|
|
|
BOOST_CHECK(decrypted.size() == in.size()); |
|
|
|
BOOST_CHECK(decrypted.size() == in.size()); |
|
|
|
BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin); |
|
|
|
BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin); |
|
|
@ -174,12 +174,12 @@ void TestAES256CBC(const std::string &hexkey, const std::string &hexiv, bool pad |
|
|
|
{ |
|
|
|
{ |
|
|
|
std::vector<unsigned char> sub(i, in.end()); |
|
|
|
std::vector<unsigned char> sub(i, in.end()); |
|
|
|
std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE); |
|
|
|
std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE); |
|
|
|
int _size = enc.Encrypt(&sub[0], sub.size(), &subout[0]); |
|
|
|
int _size = enc.Encrypt(sub.data(), sub.size(), subout.data()); |
|
|
|
if (_size != 0) |
|
|
|
if (_size != 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
subout.resize(_size); |
|
|
|
subout.resize(_size); |
|
|
|
std::vector<unsigned char> subdecrypted(subout.size()); |
|
|
|
std::vector<unsigned char> subdecrypted(subout.size()); |
|
|
|
_size = dec.Decrypt(&subout[0], subout.size(), &subdecrypted[0]); |
|
|
|
_size = dec.Decrypt(subout.data(), subout.size(), subdecrypted.data()); |
|
|
|
subdecrypted.resize(_size); |
|
|
|
subdecrypted.resize(_size); |
|
|
|
BOOST_CHECK(decrypted.size() == in.size()); |
|
|
|
BOOST_CHECK(decrypted.size() == in.size()); |
|
|
|
BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string(" != ") + HexStr(sub)); |
|
|
|
BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string(" != ") + HexStr(sub)); |
|
|
|