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