1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/rand_util.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <nacl/nacl_random.h> 8*6777b538SAndroid Build Coastguard Worker #include <stddef.h> 9*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "base/check_op.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/containers/span.h" 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker namespace base { 15*6777b538SAndroid Build Coastguard Worker RandBytes(span<uint8_t> output)16*6777b538SAndroid Build Coastguard Workervoid RandBytes(span<uint8_t> output) { 17*6777b538SAndroid Build Coastguard Worker while (!output.empty()) { 18*6777b538SAndroid Build Coastguard Worker size_t nread; 19*6777b538SAndroid Build Coastguard Worker const int error = nacl_secure_random(output.data(), output.size(), &nread); 20*6777b538SAndroid Build Coastguard Worker CHECK_EQ(error, 0); 21*6777b538SAndroid Build Coastguard Worker CHECK_LE(nread, output.size()); 22*6777b538SAndroid Build Coastguard Worker output = output.subspan(nread); 23*6777b538SAndroid Build Coastguard Worker } 24*6777b538SAndroid Build Coastguard Worker } 25*6777b538SAndroid Build Coastguard Worker RandBytes(void * output,size_t output_length)26*6777b538SAndroid Build Coastguard Workervoid RandBytes(void* output, size_t output_length) { 27*6777b538SAndroid Build Coastguard Worker RandBytes(make_span(static_cast<uint8_t*>(output), output_length)); 28*6777b538SAndroid Build Coastguard Worker } 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker } // namespace base 31