X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fcrypter.cpp;h=2a6f36d1dbf2b539d9dcb30f63ef06de35c83f89;hb=15e9a03687e99d6b1a7a90e56e69a37faa6bb9b8;hp=6deab04bb7e74381ece5d01f9fe6a837a4d00b73;hpb=9acf270b14e561fe959ff25001f083a00e5e1caa;p=novacoin.git diff --git a/src/crypter.cpp b/src/crypter.cpp index 6deab04..2a6f36d 100644 --- a/src/crypter.cpp +++ b/src/crypter.cpp @@ -6,13 +6,13 @@ #include #include #include + +#include "crypter.h" + #ifdef WIN32 #include #endif -#include "crypter.h" -#include "scrypt.h" - bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) { if (nRounds < 1 || chSalt.size() != WALLET_CRYPTO_SALT_SIZE) @@ -25,21 +25,10 @@ bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::v (unsigned char *)&strKeyData[0], strKeyData.size(), nRounds, chKey, chIV); } - if (nDerivationMethod == 1) - { - // Passphrase conversion - uint256 scryptHash = scrypt_salted_multiround_hash((const void*)strKeyData.c_str(), strKeyData.size(), &chSalt[0], 8, nRounds); - - i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha512(), &chSalt[0], - (unsigned char *)&scryptHash, sizeof scryptHash, nRounds, chKey, chIV); - memset(&scryptHash, 0, sizeof scryptHash); - } - - if (i != (int)WALLET_CRYPTO_KEY_SIZE) { - memset(&chKey, 0, sizeof chKey); - memset(&chIV, 0, sizeof chIV); + OPENSSL_cleanse(&chKey, sizeof chKey); + OPENSSL_cleanse(&chIV, sizeof chIV); return false; } @@ -75,9 +64,9 @@ bool CCrypter::Encrypt(const CKeyingMaterial& vchPlaintext, std::vector& vchCiphertext, CKeyingM bool fOk = true; EVP_CIPHER_CTX_init(&ctx); - if (fOk) fOk = EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); - if (fOk) fOk = EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen); - if (fOk) fOk = EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0])+nPLen, &nFLen); + if (fOk) fOk = EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV) != 0; + if (fOk) fOk = EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen) != 0; + if (fOk) fOk = EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0]) + nPLen, &nFLen) != 0; EVP_CIPHER_CTX_cleanup(&ctx); if (!fOk) return false;