Skip to content

Commit e1f433d

Browse files
BillyDonahueevergreen
authored andcommitted
SERVER-43641 upgrade random.h
This reverts commit a40b196.
1 parent 3cb9e79 commit e1f433d

25 files changed

+302
-278
lines changed

src/mongo/bson/oid.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ OID::InstanceUnique _instanceUnique;
5454

5555
MONGO_INITIALIZER_GENERAL(OIDGeneration, MONGO_NO_PREREQUISITES, ("default"))
5656
(InitializerContext* context) {
57-
std::unique_ptr<SecureRandom> entropy(SecureRandom::create());
58-
counter = std::make_unique<AtomicWord<int64_t>>(entropy->nextInt64());
59-
_instanceUnique = OID::InstanceUnique::generate(*entropy);
57+
SecureRandom entropy;
58+
counter = std::make_unique<AtomicWord<int64_t>>(entropy.nextInt64());
59+
_instanceUnique = OID::InstanceUnique::generate(entropy);
6060
return Status::OK();
6161
}
6262

@@ -72,9 +72,8 @@ OID::Increment OID::Increment::next() {
7272
}
7373

7474
OID::InstanceUnique OID::InstanceUnique::generate(SecureRandom& entropy) {
75-
int64_t rand = entropy.nextInt64();
7675
OID::InstanceUnique u;
77-
std::memcpy(u.bytes, &rand, kInstanceUniqueSize);
76+
entropy.fill(u.bytes, kInstanceUniqueSize);
7877
return u;
7978
}
8079

@@ -119,8 +118,8 @@ size_t OID::Hasher::operator()(const OID& oid) const {
119118
}
120119

121120
void OID::regenMachineId() {
122-
std::unique_ptr<SecureRandom> entropy(SecureRandom::create());
123-
_instanceUnique = InstanceUnique::generate(*entropy);
121+
SecureRandom entropy;
122+
_instanceUnique = InstanceUnique::generate(entropy);
124123
}
125124

126125
unsigned OID::getMachineId() {

src/mongo/client/sasl_scram_client_conversation.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,10 @@ StatusWith<bool> SaslSCRAMClientConversation::_firstStep(std::string* outputData
8282
}
8383

8484
// Create text-based nonce as base64 encoding of a binary blob of length multiple of 3
85-
const int nonceLenQWords = 3;
85+
static constexpr size_t nonceLenQWords = 3;
8686
uint64_t binaryNonce[nonceLenQWords];
8787

88-
unique_ptr<SecureRandom> sr(SecureRandom::create());
89-
90-
binaryNonce[0] = sr->nextInt64();
91-
binaryNonce[1] = sr->nextInt64();
92-
binaryNonce[2] = sr->nextInt64();
88+
SecureRandom().fill(binaryNonce, sizeof(binaryNonce));
9389

9490
std::string user =
9591
_saslClientSession->getParameter(SaslClientSession::parameterUser).toString();

src/mongo/crypto/mechanism_scram.h

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,9 @@ class Presecrets {
102102
}
103103

104104
static std::vector<std::uint8_t> generateSecureRandomSalt() {
105-
// Express salt length as a number of quad words, rounded up.
106-
constexpr auto qwords = (saltLength() + sizeof(std::int64_t) - 1) / sizeof(std::int64_t);
107-
std::array<std::int64_t, qwords> userSalt;
108-
109-
std::unique_ptr<SecureRandom> sr(SecureRandom::create());
110-
std::generate(userSalt.begin(), userSalt.end(), [&sr] { return sr->nextInt64(); });
111-
return std::vector<std::uint8_t>(reinterpret_cast<std::uint8_t*>(userSalt.data()),
112-
reinterpret_cast<std::uint8_t*>(userSalt.data()) +
113-
saltLength());
105+
std::vector<std::uint8_t> salt(saltLength());
106+
SecureRandom().fill(salt.data(), salt.size());
107+
return salt;
114108
}
115109

116110
private:

src/mongo/crypto/symmetric_crypto.cpp

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,7 @@
4848
namespace mongo {
4949
namespace crypto {
5050

51-
namespace {
52-
std::unique_ptr<SecureRandom> random;
53-
} // namespace
54-
5551
MONGO_INITIALIZER(CreateKeyEntropySource)(InitializerContext* context) {
56-
random = std::unique_ptr<SecureRandom>(SecureRandom::create());
5752
return Status::OK();
5853
}
5954

@@ -90,16 +85,8 @@ std::string getStringFromCipherMode(aesMode mode) {
9085

9186
SymmetricKey aesGenerate(size_t keySize, SymmetricKeyId keyId) {
9287
invariant(keySize == sym256KeySize);
93-
9488
SecureVector<uint8_t> key(keySize);
95-
96-
size_t offset = 0;
97-
while (offset < keySize) {
98-
std::uint64_t randomValue = random->nextInt64();
99-
memcpy(key->data() + offset, &randomValue, sizeof(randomValue));
100-
offset += sizeof(randomValue);
101-
}
102-
89+
SecureRandom().fill(key->data(), key->size());
10390
return SymmetricKey(std::move(key), aesAlgorithm, std::move(keyId));
10491
}
10592

src/mongo/db/auth/sasl_scram_server_conversation.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,7 @@ StatusWith<std::tuple<bool, std::string>> SaslSCRAMServerMechanism<Policy>::_fir
235235
const int nonceLenQWords = 3;
236236
uint64_t binaryNonce[nonceLenQWords];
237237

238-
std::unique_ptr<SecureRandom> sr(SecureRandom::create());
239-
240-
binaryNonce[0] = sr->nextInt64();
241-
binaryNonce[1] = sr->nextInt64();
242-
binaryNonce[2] = sr->nextInt64();
238+
SecureRandom().fill(binaryNonce, sizeof(binaryNonce));
243239

244240
_nonce =
245241
clientNonce + base64::encode(reinterpret_cast<char*>(binaryNonce), sizeof(binaryNonce));

src/mongo/db/commands/authentication_commands.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ class CmdAuthenticate : public BasicCommand {
201201
*/
202202
class CmdGetNonce : public BasicCommand {
203203
public:
204-
CmdGetNonce() : BasicCommand("getnonce"), _random(SecureRandom::create()) {}
204+
CmdGetNonce() : BasicCommand("getnonce") {}
205205

206206
AllowedOnSecondary secondaryAllowed(ServiceContext*) const override {
207207
return AllowedOnSecondary::kAlways;
@@ -240,11 +240,11 @@ class CmdGetNonce : public BasicCommand {
240240
private:
241241
int64_t getNextNonce() {
242242
stdx::lock_guard<SimpleMutex> lk(_randMutex);
243-
return _random->nextInt64();
243+
return _random.nextInt64();
244244
}
245245

246246
SimpleMutex _randMutex; // Synchronizes accesses to _random.
247-
std::unique_ptr<SecureRandom> _random;
247+
SecureRandom _random;
248248
} cmdGetNonce;
249249

250250
bool CmdAuthenticate::run(OperationContext* opCtx,

src/mongo/db/cursor_manager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ std::pair<Status, int> CursorManager::killCursorsWithMatchingSessions(
100100
}
101101

102102
CursorManager::CursorManager()
103-
: _random(std::make_unique<PseudoRandom>(SecureRandom::create()->nextInt64())),
103+
: _random(std::make_unique<PseudoRandom>(SecureRandom().nextInt64())),
104104
_cursorMap(std::make_unique<Partitioned<stdx::unordered_map<CursorId, ClientCursor*>>>()) {}
105105

106106
CursorManager::~CursorManager() {

src/mongo/db/db.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -852,7 +852,7 @@ void setUpReplication(ServiceContext* serviceContext) {
852852
std::make_unique<repl::TopologyCoordinator>(topoCoordOptions),
853853
replicationProcess,
854854
storageInterface,
855-
SecureRandom::create()->nextInt64());
855+
SecureRandom().nextInt64());
856856
repl::ReplicationCoordinator::set(serviceContext, std::move(replCoord));
857857
repl::setOplogCollectionName(serviceContext);
858858

src/mongo/db/free_mon/free_mon_controller_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ namespace mongo {
7474
namespace {
7575

7676
auto makeRandom() {
77-
auto seed = SecureRandom::create()->nextInt64();
77+
auto seed = SecureRandom().nextInt64();
7878
unittest::log() << "PseudoRandom(" << std::showbase << std::hex << seed << std::dec
7979
<< std::noshowbase << ")";
8080
return PseudoRandom(seed);

src/mongo/db/repl/idempotency_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ void RandomizedIdempotencyTest::runIdempotencyTestCase() {
165165
const double kDocProbability = 0.375;
166166
const double kArrProbability = 0.0;
167167

168-
this->seed = SecureRandom::create()->nextInt64();
168+
this->seed = SecureRandom().nextInt64();
169169
PseudoRandom seedGenerator(this->seed);
170170
RandomizedScalarGenerator scalarGenerator{PseudoRandom(seedGenerator.nextInt64())};
171171
UpdateSequenceGenerator updateGenerator(

0 commit comments

Comments
 (0)