mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
Merge #15663: crypto: Remove unused AES-128 code
f6ee177f7 Remove unused AES-128 code (practicalswift) Pull request description: Remove unused AES-128 code. As far as I can tell this AES-128 code has never been in use in the project (outside of testing/benchmarking). The AES-256 code is used in `CCrypter::Encrypt`/`CCrypter::Decrypt` (`src/wallet/crypter.cpp`). Trivia: 0.15% of the project's C++ LOC count (excluding dependencies) is trimmed off: ``` $ LOC_BEFORE=$(git grep -I "" HEAD~1 -- "*.cpp" "*.h" ":(exclude)src/leveldb/" ":(exclude)src/secp256k1/" ":(exclude)src/univalue/" | wc -l) $ LOC_AFTER=$(git grep -I "" -- "*.cpp" "*.h" ":(exclude)src/leveldb/" ":(exclude)src/secp256k1/" ":(exclude)src/univalue/" | wc -l) $ bc <<< "scale=4; ${LOC_AFTER}/${LOC_BEFORE}" .9985 ``` :-) Tree-SHA512: 9588a3cd795a89ef658b8ee7323865f57723cb4ed9560c21de793f82d35e2835059e7d6d0705e99e3d16bf6b2a444b4bf19568d50174ff3776caf8a3168f5c85
This commit is contained in:
parent
407b503918
commit
b902736621
@ -12,36 +12,6 @@ extern "C" {
|
|||||||
#include <crypto/ctaes/ctaes.c>
|
#include <crypto/ctaes/ctaes.c>
|
||||||
}
|
}
|
||||||
|
|
||||||
AES128Encrypt::AES128Encrypt(const unsigned char key[16])
|
|
||||||
{
|
|
||||||
AES128_init(&ctx, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
AES128Encrypt::~AES128Encrypt()
|
|
||||||
{
|
|
||||||
memset(&ctx, 0, sizeof(ctx));
|
|
||||||
}
|
|
||||||
|
|
||||||
void AES128Encrypt::Encrypt(unsigned char ciphertext[16], const unsigned char plaintext[16]) const
|
|
||||||
{
|
|
||||||
AES128_encrypt(&ctx, 1, ciphertext, plaintext);
|
|
||||||
}
|
|
||||||
|
|
||||||
AES128Decrypt::AES128Decrypt(const unsigned char key[16])
|
|
||||||
{
|
|
||||||
AES128_init(&ctx, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
AES128Decrypt::~AES128Decrypt()
|
|
||||||
{
|
|
||||||
memset(&ctx, 0, sizeof(ctx));
|
|
||||||
}
|
|
||||||
|
|
||||||
void AES128Decrypt::Decrypt(unsigned char plaintext[16], const unsigned char ciphertext[16]) const
|
|
||||||
{
|
|
||||||
AES128_decrypt(&ctx, 1, plaintext, ciphertext);
|
|
||||||
}
|
|
||||||
|
|
||||||
AES256Encrypt::AES256Encrypt(const unsigned char key[32])
|
AES256Encrypt::AES256Encrypt(const unsigned char key[32])
|
||||||
{
|
{
|
||||||
AES256_init(&ctx, key);
|
AES256_init(&ctx, key);
|
||||||
@ -182,35 +152,3 @@ AES256CBCDecrypt::~AES256CBCDecrypt()
|
|||||||
{
|
{
|
||||||
memset(iv, 0, sizeof(iv));
|
memset(iv, 0, sizeof(iv));
|
||||||
}
|
}
|
||||||
|
|
||||||
AES128CBCEncrypt::AES128CBCEncrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn)
|
|
||||||
: enc(key), pad(padIn)
|
|
||||||
{
|
|
||||||
memcpy(iv, ivIn, AES_BLOCKSIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
AES128CBCEncrypt::~AES128CBCEncrypt()
|
|
||||||
{
|
|
||||||
memset(iv, 0, AES_BLOCKSIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int AES128CBCEncrypt::Encrypt(const unsigned char* data, int size, unsigned char* out) const
|
|
||||||
{
|
|
||||||
return CBCEncrypt(enc, iv, data, size, pad, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
AES128CBCDecrypt::AES128CBCDecrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn)
|
|
||||||
: dec(key), pad(padIn)
|
|
||||||
{
|
|
||||||
memcpy(iv, ivIn, AES_BLOCKSIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
AES128CBCDecrypt::~AES128CBCDecrypt()
|
|
||||||
{
|
|
||||||
memset(iv, 0, AES_BLOCKSIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int AES128CBCDecrypt::Decrypt(const unsigned char* data, int size, unsigned char* out) const
|
|
||||||
{
|
|
||||||
return CBCDecrypt(dec, iv, data, size, pad, out);
|
|
||||||
}
|
|
||||||
|
@ -12,33 +12,8 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const int AES_BLOCKSIZE = 16;
|
static const int AES_BLOCKSIZE = 16;
|
||||||
static const int AES128_KEYSIZE = 16;
|
|
||||||
static const int AES256_KEYSIZE = 32;
|
static const int AES256_KEYSIZE = 32;
|
||||||
|
|
||||||
/** An encryption class for AES-128. */
|
|
||||||
class AES128Encrypt
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
AES128_ctx ctx;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit AES128Encrypt(const unsigned char key[16]);
|
|
||||||
~AES128Encrypt();
|
|
||||||
void Encrypt(unsigned char ciphertext[16], const unsigned char plaintext[16]) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** A decryption class for AES-128. */
|
|
||||||
class AES128Decrypt
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
AES128_ctx ctx;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit AES128Decrypt(const unsigned char key[16]);
|
|
||||||
~AES128Decrypt();
|
|
||||||
void Decrypt(unsigned char plaintext[16], const unsigned char ciphertext[16]) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** An encryption class for AES-256. */
|
/** An encryption class for AES-256. */
|
||||||
class AES256Encrypt
|
class AES256Encrypt
|
||||||
{
|
{
|
||||||
@ -89,30 +64,4 @@ private:
|
|||||||
unsigned char iv[AES_BLOCKSIZE];
|
unsigned char iv[AES_BLOCKSIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
class AES128CBCEncrypt
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AES128CBCEncrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn);
|
|
||||||
~AES128CBCEncrypt();
|
|
||||||
int Encrypt(const unsigned char* data, int size, unsigned char* out) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const AES128Encrypt enc;
|
|
||||||
const bool pad;
|
|
||||||
unsigned char iv[AES_BLOCKSIZE];
|
|
||||||
};
|
|
||||||
|
|
||||||
class AES128CBCDecrypt
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AES128CBCDecrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn);
|
|
||||||
~AES128CBCDecrypt();
|
|
||||||
int Decrypt(const unsigned char* data, int size, unsigned char* out) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const AES128Decrypt dec;
|
|
||||||
const bool pad;
|
|
||||||
unsigned char iv[AES_BLOCKSIZE];
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BITCOIN_CRYPTO_AES_H
|
#endif // BITCOIN_CRYPTO_AES_H
|
||||||
|
@ -69,26 +69,6 @@ static void TestHMACSHA512(const std::string &hexkey, const std::string &hexin,
|
|||||||
TestVector(CHMAC_SHA512(key.data(), key.size()), ParseHex(hexin), ParseHex(hexout));
|
TestVector(CHMAC_SHA512(key.data(), key.size()), ParseHex(hexin), ParseHex(hexout));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TestAES128(const std::string &hexkey, const std::string &hexin, const std::string &hexout)
|
|
||||||
{
|
|
||||||
std::vector<unsigned char> key = ParseHex(hexkey);
|
|
||||||
std::vector<unsigned char> in = ParseHex(hexin);
|
|
||||||
std::vector<unsigned char> correctout = ParseHex(hexout);
|
|
||||||
std::vector<unsigned char> buf, buf2;
|
|
||||||
|
|
||||||
assert(key.size() == 16);
|
|
||||||
assert(in.size() == 16);
|
|
||||||
assert(correctout.size() == 16);
|
|
||||||
AES128Encrypt enc(key.data());
|
|
||||||
buf.resize(correctout.size());
|
|
||||||
buf2.resize(correctout.size());
|
|
||||||
enc.Encrypt(buf.data(), in.data());
|
|
||||||
BOOST_CHECK_EQUAL(HexStr(buf), HexStr(correctout));
|
|
||||||
AES128Decrypt dec(key.data());
|
|
||||||
dec.Decrypt(buf2.data(), buf.data());
|
|
||||||
BOOST_CHECK_EQUAL(HexStr(buf2), HexStr(in));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void TestAES256(const std::string &hexkey, const std::string &hexin, const std::string &hexout)
|
static void TestAES256(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);
|
||||||
@ -108,47 +88,6 @@ static void TestAES256(const std::string &hexkey, const std::string &hexin, cons
|
|||||||
BOOST_CHECK(buf == in);
|
BOOST_CHECK(buf == in);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TestAES128CBC(const std::string &hexkey, const std::string &hexiv, bool pad, const std::string &hexin, const std::string &hexout)
|
|
||||||
{
|
|
||||||
std::vector<unsigned char> key = ParseHex(hexkey);
|
|
||||||
std::vector<unsigned char> iv = ParseHex(hexiv);
|
|
||||||
std::vector<unsigned char> in = ParseHex(hexin);
|
|
||||||
std::vector<unsigned char> correctout = ParseHex(hexout);
|
|
||||||
std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE);
|
|
||||||
|
|
||||||
// Encrypt the plaintext and verify that it equals the cipher
|
|
||||||
AES128CBCEncrypt enc(key.data(), iv.data(), pad);
|
|
||||||
int size = enc.Encrypt(in.data(), in.size(), realout.data());
|
|
||||||
realout.resize(size);
|
|
||||||
BOOST_CHECK(realout.size() == correctout.size());
|
|
||||||
BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + hexout);
|
|
||||||
|
|
||||||
// Decrypt the cipher and verify that it equals the plaintext
|
|
||||||
std::vector<unsigned char> decrypted(correctout.size());
|
|
||||||
AES128CBCDecrypt dec(key.data(), iv.data(), pad);
|
|
||||||
size = dec.Decrypt(correctout.data(), correctout.size(), decrypted.data());
|
|
||||||
decrypted.resize(size);
|
|
||||||
BOOST_CHECK(decrypted.size() == in.size());
|
|
||||||
BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin);
|
|
||||||
|
|
||||||
// Encrypt and re-decrypt substrings of the plaintext and verify that they equal each-other
|
|
||||||
for(std::vector<unsigned char>::iterator i(in.begin()); i != in.end(); ++i)
|
|
||||||
{
|
|
||||||
std::vector<unsigned char> sub(i, in.end());
|
|
||||||
std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE);
|
|
||||||
int _size = enc.Encrypt(sub.data(), sub.size(), subout.data());
|
|
||||||
if (_size != 0)
|
|
||||||
{
|
|
||||||
subout.resize(_size);
|
|
||||||
std::vector<unsigned char> subdecrypted(subout.size());
|
|
||||||
_size = dec.Decrypt(subout.data(), subout.size(), subdecrypted.data());
|
|
||||||
subdecrypted.resize(_size);
|
|
||||||
BOOST_CHECK(decrypted.size() == in.size());
|
|
||||||
BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string(" != ") + HexStr(sub));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void TestAES256CBC(const std::string &hexkey, const std::string &hexiv, bool pad, const std::string &hexin, const std::string &hexout)
|
static void TestAES256CBC(const std::string &hexkey, const std::string &hexiv, bool pad, const std::string &hexin, const std::string &hexout)
|
||||||
{
|
{
|
||||||
std::vector<unsigned char> key = ParseHex(hexkey);
|
std::vector<unsigned char> key = ParseHex(hexkey);
|
||||||
@ -461,14 +400,9 @@ BOOST_AUTO_TEST_CASE(hmac_sha512_testvectors) {
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(aes_testvectors) {
|
BOOST_AUTO_TEST_CASE(aes_testvectors) {
|
||||||
// AES test vectors from FIPS 197.
|
// AES test vectors from FIPS 197.
|
||||||
TestAES128("000102030405060708090a0b0c0d0e0f", "00112233445566778899aabbccddeeff", "69c4e0d86a7b0430d8cdb78070b4c55a");
|
|
||||||
TestAES256("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "00112233445566778899aabbccddeeff", "8ea2b7ca516745bfeafc49904b496089");
|
TestAES256("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "00112233445566778899aabbccddeeff", "8ea2b7ca516745bfeafc49904b496089");
|
||||||
|
|
||||||
// AES-ECB test vectors from NIST sp800-38a.
|
// AES-ECB test vectors from NIST sp800-38a.
|
||||||
TestAES128("2b7e151628aed2a6abf7158809cf4f3c", "6bc1bee22e409f96e93d7e117393172a", "3ad77bb40d7a3660a89ecaf32466ef97");
|
|
||||||
TestAES128("2b7e151628aed2a6abf7158809cf4f3c", "ae2d8a571e03ac9c9eb76fac45af8e51", "f5d3d58503b9699de785895a96fdbaaf");
|
|
||||||
TestAES128("2b7e151628aed2a6abf7158809cf4f3c", "30c81c46a35ce411e5fbc1191a0a52ef", "43b1cd7f598ece23881b00e3ed030688");
|
|
||||||
TestAES128("2b7e151628aed2a6abf7158809cf4f3c", "f69f2445df4f9b17ad2b417be66c3710", "7b0c785e27e8ad3f8223207104725dd4");
|
|
||||||
TestAES256("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", "6bc1bee22e409f96e93d7e117393172a", "f3eed1bdb5d2a03c064b5a7e3db181f8");
|
TestAES256("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", "6bc1bee22e409f96e93d7e117393172a", "f3eed1bdb5d2a03c064b5a7e3db181f8");
|
||||||
TestAES256("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", "ae2d8a571e03ac9c9eb76fac45af8e51", "591ccb10d410ed26dc5ba74a31362870");
|
TestAES256("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", "ae2d8a571e03ac9c9eb76fac45af8e51", "591ccb10d410ed26dc5ba74a31362870");
|
||||||
TestAES256("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", "30c81c46a35ce411e5fbc1191a0a52ef", "b6ed21b99ca6f4f9f153e7b1beafed1d");
|
TestAES256("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", "30c81c46a35ce411e5fbc1191a0a52ef", "b6ed21b99ca6f4f9f153e7b1beafed1d");
|
||||||
@ -476,27 +410,6 @@ BOOST_AUTO_TEST_CASE(aes_testvectors) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(aes_cbc_testvectors) {
|
BOOST_AUTO_TEST_CASE(aes_cbc_testvectors) {
|
||||||
|
|
||||||
// NIST AES CBC 128-bit encryption test-vectors
|
|
||||||
TestAES128CBC("2b7e151628aed2a6abf7158809cf4f3c", "000102030405060708090A0B0C0D0E0F", false, \
|
|
||||||
"6bc1bee22e409f96e93d7e117393172a", "7649abac8119b246cee98e9b12e9197d");
|
|
||||||
TestAES128CBC("2b7e151628aed2a6abf7158809cf4f3c", "7649ABAC8119B246CEE98E9B12E9197D", false, \
|
|
||||||
"ae2d8a571e03ac9c9eb76fac45af8e51", "5086cb9b507219ee95db113a917678b2");
|
|
||||||
TestAES128CBC("2b7e151628aed2a6abf7158809cf4f3c", "5086cb9b507219ee95db113a917678b2", false, \
|
|
||||||
"30c81c46a35ce411e5fbc1191a0a52ef", "73bed6b8e3c1743b7116e69e22229516");
|
|
||||||
TestAES128CBC("2b7e151628aed2a6abf7158809cf4f3c", "73bed6b8e3c1743b7116e69e22229516", false, \
|
|
||||||
"f69f2445df4f9b17ad2b417be66c3710", "3ff1caa1681fac09120eca307586e1a7");
|
|
||||||
|
|
||||||
// The same vectors with padding enabled
|
|
||||||
TestAES128CBC("2b7e151628aed2a6abf7158809cf4f3c", "000102030405060708090A0B0C0D0E0F", true, \
|
|
||||||
"6bc1bee22e409f96e93d7e117393172a", "7649abac8119b246cee98e9b12e9197d8964e0b149c10b7b682e6e39aaeb731c");
|
|
||||||
TestAES128CBC("2b7e151628aed2a6abf7158809cf4f3c", "7649ABAC8119B246CEE98E9B12E9197D", true, \
|
|
||||||
"ae2d8a571e03ac9c9eb76fac45af8e51", "5086cb9b507219ee95db113a917678b255e21d7100b988ffec32feeafaf23538");
|
|
||||||
TestAES128CBC("2b7e151628aed2a6abf7158809cf4f3c", "5086cb9b507219ee95db113a917678b2", true, \
|
|
||||||
"30c81c46a35ce411e5fbc1191a0a52ef", "73bed6b8e3c1743b7116e69e22229516f6eccda327bf8e5ec43718b0039adceb");
|
|
||||||
TestAES128CBC("2b7e151628aed2a6abf7158809cf4f3c", "73bed6b8e3c1743b7116e69e22229516", true, \
|
|
||||||
"f69f2445df4f9b17ad2b417be66c3710", "3ff1caa1681fac09120eca307586e1a78cb82807230e1321d3fae00d18cc2012");
|
|
||||||
|
|
||||||
// NIST AES CBC 256-bit encryption test-vectors
|
// NIST AES CBC 256-bit encryption test-vectors
|
||||||
TestAES256CBC("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", \
|
TestAES256CBC("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", \
|
||||||
"000102030405060708090A0B0C0D0E0F", false, "6bc1bee22e409f96e93d7e117393172a", \
|
"000102030405060708090A0B0C0D0E0F", false, "6bc1bee22e409f96e93d7e117393172a", \
|
||||||
|
Loading…
Reference in New Issue
Block a user