blob: 2ddd184a25592229f33ae21866ce6a486f1f1869 [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2012 The Chromium Authors
sergeyu@chromium.org1968d9772012-07-26 22:53:132// 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
penghuang@chromium.org4a887832014-06-17 20:28:477#include <nacl/nacl_random.h>
avi9b6f42932015-12-26 22:15:148#include <stddef.h>
9#include <stdint.h>
penghuang@chromium.org4a887832014-06-17 20:28:4710
Hans Wennborgc3cffa62020-04-27 10:09:1211#include "base/check_op.h"
Austin Sullivana41f7f62024-01-09 20:11:5012#include "base/containers/span.h"
sergeyu@chromium.org1968d9772012-07-26 22:53:1313
sergeyu@chromium.org1968d9772012-07-26 22:53:1314namespace base {
15
Austin Sullivana41f7f62024-01-09 20:11:5016void RandBytes(span<uint8_t> output) {
17 while (!output.empty()) {
John Mellorafab972d2017-09-26 16:28:1918 size_t nread;
Austin Sullivana41f7f62024-01-09 20:11:5019 const int error = nacl_secure_random(output.data(), output.size(), &nread);
John Mellorafab972d2017-09-26 16:28:1920 CHECK_EQ(error, 0);
Austin Sullivana41f7f62024-01-09 20:11:5021 CHECK_LE(nread, output.size());
22 output = output.subspan(nread);
John Mellorafab972d2017-09-26 16:28:1923 }
dalecurtis@chromium.orgc910c5a2014-01-23 02:14:2824}
25
sergeyu@chromium.org1968d9772012-07-26 22:53:1326} // namespace base