Make sure that GetRandomBytes never fails
We're using GetRandomBytes in several contexts where it's either unwieldy to return an error, or an error would mean a fatal exception anyhow. @gmaxwell checked OpenSSL a while ago and discovered that it never actually fails, but it can't hurt to be a bit paranoid here.
This commit is contained in:
parent
9ea87f9e18
commit
65e3a1e762
3 changed files with 5 additions and 8 deletions
|
@ -82,13 +82,12 @@ void RandAddSeedPerfmon()
|
|||
#endif
|
||||
}
|
||||
|
||||
bool GetRandBytes(unsigned char* buf, int num)
|
||||
void GetRandBytes(unsigned char* buf, int num)
|
||||
{
|
||||
if (RAND_bytes(buf, num) != 1) {
|
||||
LogPrintf("%s: OpenSSL RAND_bytes() failed with error: %s\n", __func__, ERR_error_string(ERR_get_error(), NULL));
|
||||
return false;
|
||||
assert(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
uint64_t GetRand(uint64_t nMax)
|
||||
|
|
|
@ -19,7 +19,7 @@ void RandAddSeedPerfmon();
|
|||
/**
|
||||
* Functions to gather random data via the OpenSSL PRNG
|
||||
*/
|
||||
bool GetRandBytes(unsigned char* buf, int num);
|
||||
void GetRandBytes(unsigned char* buf, int num);
|
||||
uint64_t GetRand(uint64_t nMax);
|
||||
int GetRandInt(int nMax);
|
||||
uint256 GetRandHash();
|
||||
|
|
|
@ -422,15 +422,13 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
|
|||
RandAddSeedPerfmon();
|
||||
|
||||
vMasterKey.resize(WALLET_CRYPTO_KEY_SIZE);
|
||||
if (!GetRandBytes(&vMasterKey[0], WALLET_CRYPTO_KEY_SIZE))
|
||||
return false;
|
||||
GetRandBytes(&vMasterKey[0], WALLET_CRYPTO_KEY_SIZE);
|
||||
|
||||
CMasterKey kMasterKey;
|
||||
RandAddSeedPerfmon();
|
||||
|
||||
kMasterKey.vchSalt.resize(WALLET_CRYPTO_SALT_SIZE);
|
||||
if (!GetRandBytes(&kMasterKey.vchSalt[0], WALLET_CRYPTO_SALT_SIZE))
|
||||
return false;
|
||||
GetRandBytes(&kMasterKey.vchSalt[0], WALLET_CRYPTO_SALT_SIZE);
|
||||
|
||||
CCrypter crypter;
|
||||
int64_t nStartTime = GetTimeMillis();
|
||||
|
|
Loading…
Reference in a new issue