crypter: fix the stored initialization vector size
AES IV's are 16bytes, not 32. This was harmless but confusing. Add WALLET_CRYPTO_IV_SIZE to make its usage explicit.
This commit is contained in:
parent
daa384120a
commit
1c391a5866
2 changed files with 7 additions and 6 deletions
|
@ -37,7 +37,7 @@ bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::v
|
||||||
|
|
||||||
bool CCrypter::SetKey(const CKeyingMaterial& chNewKey, const std::vector<unsigned char>& chNewIV)
|
bool CCrypter::SetKey(const CKeyingMaterial& chNewKey, const std::vector<unsigned char>& chNewIV)
|
||||||
{
|
{
|
||||||
if (chNewKey.size() != WALLET_CRYPTO_KEY_SIZE || chNewIV.size() != WALLET_CRYPTO_KEY_SIZE)
|
if (chNewKey.size() != WALLET_CRYPTO_KEY_SIZE || chNewIV.size() != WALLET_CRYPTO_IV_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
memcpy(&chKey[0], &chNewKey[0], sizeof chKey);
|
memcpy(&chKey[0], &chNewKey[0], sizeof chKey);
|
||||||
|
@ -105,8 +105,8 @@ bool CCrypter::Decrypt(const std::vector<unsigned char>& vchCiphertext, CKeyingM
|
||||||
static bool EncryptSecret(const CKeyingMaterial& vMasterKey, const CKeyingMaterial &vchPlaintext, const uint256& nIV, std::vector<unsigned char> &vchCiphertext)
|
static bool EncryptSecret(const CKeyingMaterial& vMasterKey, const CKeyingMaterial &vchPlaintext, const uint256& nIV, std::vector<unsigned char> &vchCiphertext)
|
||||||
{
|
{
|
||||||
CCrypter cKeyCrypter;
|
CCrypter cKeyCrypter;
|
||||||
std::vector<unsigned char> chIV(WALLET_CRYPTO_KEY_SIZE);
|
std::vector<unsigned char> chIV(WALLET_CRYPTO_IV_SIZE);
|
||||||
memcpy(&chIV[0], &nIV, WALLET_CRYPTO_KEY_SIZE);
|
memcpy(&chIV[0], &nIV, WALLET_CRYPTO_IV_SIZE);
|
||||||
if(!cKeyCrypter.SetKey(vMasterKey, chIV))
|
if(!cKeyCrypter.SetKey(vMasterKey, chIV))
|
||||||
return false;
|
return false;
|
||||||
return cKeyCrypter.Encrypt(*((const CKeyingMaterial*)&vchPlaintext), vchCiphertext);
|
return cKeyCrypter.Encrypt(*((const CKeyingMaterial*)&vchPlaintext), vchCiphertext);
|
||||||
|
@ -115,8 +115,8 @@ static bool EncryptSecret(const CKeyingMaterial& vMasterKey, const CKeyingMateri
|
||||||
static bool DecryptSecret(const CKeyingMaterial& vMasterKey, const std::vector<unsigned char>& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext)
|
static bool DecryptSecret(const CKeyingMaterial& vMasterKey, const std::vector<unsigned char>& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext)
|
||||||
{
|
{
|
||||||
CCrypter cKeyCrypter;
|
CCrypter cKeyCrypter;
|
||||||
std::vector<unsigned char> chIV(WALLET_CRYPTO_KEY_SIZE);
|
std::vector<unsigned char> chIV(WALLET_CRYPTO_IV_SIZE);
|
||||||
memcpy(&chIV[0], &nIV, WALLET_CRYPTO_KEY_SIZE);
|
memcpy(&chIV[0], &nIV, WALLET_CRYPTO_IV_SIZE);
|
||||||
if(!cKeyCrypter.SetKey(vMasterKey, chIV))
|
if(!cKeyCrypter.SetKey(vMasterKey, chIV))
|
||||||
return false;
|
return false;
|
||||||
return cKeyCrypter.Decrypt(vchCiphertext, *((CKeyingMaterial*)&vchPlaintext));
|
return cKeyCrypter.Decrypt(vchCiphertext, *((CKeyingMaterial*)&vchPlaintext));
|
||||||
|
|
|
@ -13,6 +13,7 @@ class uint256;
|
||||||
|
|
||||||
const unsigned int WALLET_CRYPTO_KEY_SIZE = 32;
|
const unsigned int WALLET_CRYPTO_KEY_SIZE = 32;
|
||||||
const unsigned int WALLET_CRYPTO_SALT_SIZE = 8;
|
const unsigned int WALLET_CRYPTO_SALT_SIZE = 8;
|
||||||
|
const unsigned int WALLET_CRYPTO_IV_SIZE = 16;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private key encryption is done based on a CMasterKey,
|
* Private key encryption is done based on a CMasterKey,
|
||||||
|
@ -71,7 +72,7 @@ class CCrypter
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
unsigned char chKey[WALLET_CRYPTO_KEY_SIZE];
|
unsigned char chKey[WALLET_CRYPTO_KEY_SIZE];
|
||||||
unsigned char chIV[WALLET_CRYPTO_KEY_SIZE];
|
unsigned char chIV[WALLET_CRYPTO_IV_SIZE];
|
||||||
bool fKeySet;
|
bool fKeySet;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in a new issue