diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 91dacfb38..d8b7b8fa3 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -45,8 +45,8 @@ Application::Application() : mConnectionPool(mIOService), mPeerDoor(NULL), mRPCDoor(NULL), mWSPublicDoor(NULL), mWSPrivateDoor(NULL), mSweepTimer(mAuxService) { - RAND_bytes(mNonce256.begin(), mNonce256.size()); - RAND_bytes(reinterpret_cast(&mNonceST), sizeof(mNonceST)); + getRand(mNonce256.begin(), mNonce256.size()); + getRand(reinterpret_cast(&mNonceST), sizeof(mNonceST)); mJobQueue.setThreadCount(); mSweepTimer.expires_from_now(boost::posix_time::seconds(60)); mSweepTimer.async_wait(boost::bind(&Application::sweep, this)); diff --git a/src/cpp/ripple/ECIES.cpp b/src/cpp/ripple/ECIES.cpp index 447794f93..ac9c37155 100644 --- a/src/cpp/ripple/ECIES.cpp +++ b/src/cpp/ripple/ECIES.cpp @@ -116,8 +116,7 @@ std::vector CKey::encryptECIES(CKey& otherKey, const std::vector< { ECIES_ENC_IV_TYPE iv; - if (RAND_bytes(static_cast(iv.begin()), ECIES_ENC_BLK_SIZE) != 1) - throw std::runtime_error("insufficient entropy"); + getRand(static_cast(iv.begin()), ECIES_ENC_BLK_SIZE); ECIES_ENC_KEY_TYPE secret; ECIES_HMAC_KEY_TYPE hmacKey; @@ -280,8 +279,7 @@ bool checkECIES(void) std::vector message(4096); int msglen = i%3000; - if (RAND_bytes(static_cast(&message.front()), msglen) != 1) - throw std::runtime_error("insufficient entropy"); + getRand(static_cast(&message.front()), msglen); message.resize(msglen); // encrypt message with sender's private key and recipient's public key diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 9ec450ddf..07ac2dfc1 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1311,19 +1311,8 @@ bool NetworkOPs::subServer(InfoSub* ispListener, Json::Value& jvResult) jvResult["stand_alone"] = theConfig.RUN_STANDALONE; - switch (RAND_bytes(uRandom.begin(), uRandom.size())) - { - case 0: - case 1: - jvResult["random"] = uRandom.ToString(); - break; - - case -1: - default: - // XXX Should probably stop running. - cLog(lsFATAL) << "Internal error: unable to generate secure random."; - break; - } + getRand(uRandom.begin(), uRandom.size()); + jvResult["random"] = uRandom.ToString(); return mSubServer.insert(ispListener).second; } diff --git a/src/cpp/ripple/ProofOfWork.cpp b/src/cpp/ripple/ProofOfWork.cpp index 1e4ab5d9b..9f6892964 100644 --- a/src/cpp/ripple/ProofOfWork.cpp +++ b/src/cpp/ripple/ProofOfWork.cpp @@ -61,7 +61,7 @@ uint256 ProofOfWork::solve(int maxIterations) const throw std::runtime_error("invalid proof of work target/iteration"); uint256 nonce; - RAND_bytes(nonce.begin(), nonce.size()); + getRand(nonce.begin(), nonce.size()); std::vector buf2; buf2.resize(mIterations); @@ -112,7 +112,7 @@ bool ProofOfWork::checkSolution(const uint256& solution) const ProofOfWorkGenerator::ProofOfWorkGenerator() : mValidTime(180) { setDifficulty(1); - RAND_bytes(mSecret.begin(), mSecret.size()); + getRand(mSecret.begin(), mSecret.size()); } ProofOfWork ProofOfWorkGenerator::getProof() @@ -123,7 +123,7 @@ ProofOfWork ProofOfWorkGenerator::getProof() int now = static_cast(time(NULL) / 4); uint256 challenge; - RAND_bytes(challenge.begin(), challenge.size()); + getRand(challenge.begin(), challenge.size()); boost::mutex::scoped_lock sl(mLock); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index a471baa68..c2c1c437c 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -664,24 +664,16 @@ Json::Value RPCHandler::doRandom(Json::Value jvRequest) { uint256 uRandom; - switch (RAND_bytes(uRandom.begin(), uRandom.size())) + try { - case 0: - case 1: - { - Json::Value jvResult; - - jvResult["random"] = uRandom.ToString(); - - return jvResult; - } - break; - - case -1: - return rpcError(rpcNOT_SUPPORTED); - - default: - return rpcError(rpcINTERNAL); + getRand(uRandom.begin(), uRandom.size()); + Json::Value jvResult; + jvResult["random"] = uRandom.ToString(); + return jvResult; + } + catch (...) + { + return rpcError(rpcINTERNAL); } } diff --git a/src/cpp/ripple/RippleAddress.cpp b/src/cpp/ripple/RippleAddress.cpp index ecb152857..7841f322e 100644 --- a/src/cpp/ripple/RippleAddress.cpp +++ b/src/cpp/ripple/RippleAddress.cpp @@ -792,7 +792,7 @@ void RippleAddress::setSeedRandom() // XXX Maybe we should call MakeNewKey uint128 key; - RAND_bytes(key.begin(), key.size()); + getRand(key.begin(), key.size()); RippleAddress::setSeed(key); } diff --git a/src/cpp/ripple/SNTPClient.cpp b/src/cpp/ripple/SNTPClient.cpp index d9663d134..d99cee4e1 100644 --- a/src/cpp/ripple/SNTPClient.cpp +++ b/src/cpp/ripple/SNTPClient.cpp @@ -78,7 +78,7 @@ void SNTPClient::resolveComplete(const boost::system::error_code& error, boost:: } query.mReceivedReply = false; query.mLocalTimeSent = now; - RAND_bytes(reinterpret_cast(&query.mQueryNonce), sizeof(query.mQueryNonce)); + getRand(reinterpret_cast(&query.mQueryNonce), sizeof(query.mQueryNonce)); reinterpret_cast(SNTPQueryData)[NTP_OFF_XMITTS_INT] = time(NULL) + NTP_UNIX_OFFSET; reinterpret_cast(SNTPQueryData)[NTP_OFF_XMITTS_FRAC] = query.mQueryNonce; mSocket.async_send_to(boost::asio::buffer(SNTPQueryData, 48), *sel,