X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fcrypter.h;h=733d9a31230a76f87516656f30f75dcabdbeda87;hb=32b53bb54ee7591fd47dd1ee24e05b73337f40b5;hp=0f9ea02175ac3c5a7528a2648964fe2065bf85a1;hpb=6b8de05d0a6696dff4b7dccec5b74889f3cdc486;p=novacoin.git diff --git a/src/crypter.h b/src/crypter.h index 0f9ea02..733d9a3 100644 --- a/src/crypter.h +++ b/src/crypter.h @@ -4,8 +4,9 @@ #ifndef __CRYPTER_H__ #define __CRYPTER_H__ -#include "util.h" /* for SecureString */ +#include "allocators.h" /* for SecureString */ #include "key.h" +#include "serialize.h" const unsigned int WALLET_CRYPTO_KEY_SIZE = 32; const unsigned int WALLET_CRYPTO_SALT_SIZE = 8; @@ -75,21 +76,28 @@ public: void CleanKey() { - memset(&chKey, 0, sizeof chKey); - memset(&chIV, 0, sizeof chIV); - munlock(&chKey, sizeof chKey); - munlock(&chIV, sizeof chIV); + OPENSSL_cleanse(&chKey, sizeof chKey); + OPENSSL_cleanse(&chIV, sizeof chIV); fKeySet = false; } CCrypter() { fKeySet = false; + + // Try to keep the key data out of swap (and be a bit over-careful to keep the IV that we don't even use out of swap) + // Note that this does nothing about suspend-to-disk (which will put all our key data on disk) + // Note as well that at no point in this program is any attempt made to prevent stealing of keys by reading the memory of the running process. + LockedPageManager::instance.LockRange(&chKey[0], sizeof chKey); + LockedPageManager::instance.LockRange(&chIV[0], sizeof chIV); } ~CCrypter() { CleanKey(); + + LockedPageManager::instance.UnlockRange(&chKey[0], sizeof chKey); + LockedPageManager::instance.UnlockRange(&chIV[0], sizeof chIV); } };