summaryrefslogtreecommitdiff
path: root/src/mongo/db/time_proof_service.cpp
diff options
context:
space:
mode:
authorJames Wahlin <james.wahlin@mongodb.com>2019-10-02 14:48:40 +0000
committerevergreen <evergreen@mongodb.com>2019-10-02 14:48:40 +0000
commita40b196bd3cecd0b66a6323f57e6f08efe0af392 (patch)
tree32ffa94f852e91e2b5d4cac3ea8728998b3837e0 /src/mongo/db/time_proof_service.cpp
parent3175a30264d26b31309e9a4abfb69d9f14136702 (diff)
downloadmongo-a40b196bd3cecd0b66a6323f57e6f08efe0af392.tar.gz
Revert "SERVER-43641 upgrade random.h"
This reverts commit 96da177c6ae7b7ed0f29983ad033d8a59524b0b2.
Diffstat (limited to 'src/mongo/db/time_proof_service.cpp')
-rw-r--r--src/mongo/db/time_proof_service.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mongo/db/time_proof_service.cpp b/src/mongo/db/time_proof_service.cpp
index da65e441712..7e29f0b2254 100644
--- a/src/mongo/db/time_proof_service.cpp
+++ b/src/mongo/db/time_proof_service.cpp
@@ -45,9 +45,15 @@ namespace mongo {
const uint64_t kRangeMask = 0x0000'0000'0000'FFFF;
TimeProofService::Key TimeProofService::generateRandomKey() {
- std::array<std::uint8_t, SHA1Block::kHashLength> keyBuffer;
- SecureRandom().fill(keyBuffer.data(), keyBuffer.size());
- return fassert(40384, SHA1Block::fromBuffer(keyBuffer.data(), keyBuffer.size()));
+ // SecureRandom only produces 64-bit numbers, so 3 is the minimum for 20 random bytes.
+ const size_t kRandomNumbers = 3;
+ std::array<std::int64_t, kRandomNumbers> keyBuffer;
+ std::unique_ptr<SecureRandom> rng(SecureRandom::create());
+ std::generate(keyBuffer.begin(), keyBuffer.end(), [&] { return rng->nextInt64(); });
+
+ return fassert(40384,
+ SHA1Block::fromBuffer(reinterpret_cast<std::uint8_t*>(keyBuffer.data()),
+ SHA1Block::kHashLength));
}
TimeProofService::TimeProof TimeProofService::getProof(LogicalTime time, const Key& key) {