1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file. 4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <errno.h> 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <unistd.h> 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/logging.h" 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "components/nacl/loader/nonsfi/irt_interfaces.h" 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "components/nacl/loader/nonsfi/irt_util.h" 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace nacl { 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace nonsfi { 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace { 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// FD for urandom. 17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint secure_random_fd = -1; 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint IrtGetRandomBytes(void* buf, size_t count, size_t* nread) { 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK_NE(secure_random_fd, -1); 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return CheckErrorWithResult(read(secure_random_fd, buf, count), 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch nread); 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst nacl_irt_random kIrtRandom = { 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IrtGetRandomBytes 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid SetUrandomFd(int fd) { 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK_EQ(secure_random_fd, -1); 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch secure_random_fd = fd; 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace nonsfi 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace nacl 38