blob: 35b4b26c68d97544b8fb42599bfa9f4678192060 [file] [log] [blame]
[email protected]1968d9772012-07-26 22:53:131// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/rand_util.h"
6
[email protected]4a887832014-06-17 20:28:477#include <nacl/nacl_random.h>
avi9b6f42932015-12-26 22:15:148#include <stddef.h>
9#include <stdint.h>
[email protected]4a887832014-06-17 20:28:4710
[email protected]1968d9772012-07-26 22:53:1311#include "base/logging.h"
[email protected]1968d9772012-07-26 22:53:1312
13namespace {
14
[email protected]4a887832014-06-17 20:28:4715void GetRandomBytes(void* output, size_t num_bytes) {
[email protected]4a887832014-06-17 20:28:4716 char* output_ptr = static_cast<char*>(output);
17 while (num_bytes > 0) {
18 size_t nread;
19 const int error = nacl_secure_random(output_ptr, num_bytes, &nread);
20 CHECK_EQ(error, 0);
21 CHECK_LE(nread, num_bytes);
22 output_ptr += nread;
23 num_bytes -= nread;
[email protected]1968d9772012-07-26 22:53:1324 }
[email protected]4a887832014-06-17 20:28:4725}
[email protected]1968d9772012-07-26 22:53:1326
27} // namespace
28
29namespace base {
30
[email protected]c910c5a2014-01-23 02:14:2831// NOTE: This function must be cryptographically secure. http://crbug.com/140076
avi9b6f42932015-12-26 22:15:1432uint64_t RandUint64() {
33 uint64_t result;
[email protected]4a887832014-06-17 20:28:4734 GetRandomBytes(&result, sizeof(result));
[email protected]1968d9772012-07-26 22:53:1335 return result;
36}
37
[email protected]c910c5a2014-01-23 02:14:2838void RandBytes(void* output, size_t output_length) {
[email protected]4a887832014-06-17 20:28:4739 GetRandomBytes(output, output_length);
[email protected]c910c5a2014-01-23 02:14:2840}
41
[email protected]1968d9772012-07-26 22:53:1342} // namespace base