| Index: src/trusted/desc/nacl_desc_rng.c
|
| diff --git a/src/trusted/desc/nacl_desc_rng.c b/src/trusted/desc/nacl_desc_rng.c
|
| deleted file mode 100644
|
| index 46db13201b1526558fede357d15bcc38607d2bcf..0000000000000000000000000000000000000000
|
| --- a/src/trusted/desc/nacl_desc_rng.c
|
| +++ /dev/null
|
| @@ -1,203 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2012 The Native Client Authors. All rights reserved.
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -/*
|
| - * A NaClDesc subclass that exposes the platform secure RNG
|
| - * implementation.
|
| - */
|
| -
|
| -#include <string.h>
|
| -
|
| -#include "native_client/src/trusted/desc/nacl_desc_rng.h"
|
| -
|
| -#include "native_client/src/shared/platform/nacl_secure_random.h"
|
| -#include "native_client/src/shared/platform/nacl_secure_random_base.h"
|
| -#include "native_client/src/trusted/desc/nacl_desc_base.h"
|
| -
|
| -#include "native_client/src/trusted/service_runtime/include/sys/stat.h"
|
| -#include "native_client/src/trusted/service_runtime/include/sys/errno.h"
|
| -
|
| -static struct NaClDescVtbl const kNaClDescRngVtbl; /* fwd */
|
| -
|
| -static int NaClDescRngSubclassCtor(struct NaClDescRng *self) {
|
| - if (!NaClSecureRngCtor(&self->rng)) {
|
| - goto rng_ctor_fail;
|
| - }
|
| - NACL_VTBL(NaClRefCount, self) =
|
| - (struct NaClRefCountVtbl *) &kNaClDescRngVtbl;
|
| - return 1;
|
| -
|
| - /* failure cleanup */
|
| - rng_ctor_fail:
|
| - (*NACL_VTBL(NaClRefCount, self)->Dtor)((struct NaClRefCount *) self);
|
| - return 0;
|
| -}
|
| -
|
| -int NaClDescRngCtor(struct NaClDescRng *self) {
|
| - int rv;
|
| - if (!NaClDescCtor((struct NaClDesc *) self)) {
|
| - return 0;
|
| - }
|
| - rv = NaClDescRngSubclassCtor(self);
|
| - if (!rv) {
|
| - (*NACL_VTBL(NaClRefCount, self)->Dtor)((struct NaClRefCount *) self);
|
| - }
|
| - return rv;
|
| -}
|
| -
|
| -static void NaClDescRngDtor(struct NaClRefCount *vself) {
|
| - struct NaClDescRng *self = (struct NaClDescRng *) vself;
|
| -
|
| - (*NACL_VTBL(NaClSecureRngIf, &self->rng)->Dtor)(
|
| - (struct NaClSecureRngIf *) &self->rng);
|
| - NACL_VTBL(NaClDesc, self) = &kNaClDescVtbl;
|
| - (*NACL_VTBL(NaClRefCount, self)->Dtor)((struct NaClRefCount *) self);
|
| -}
|
| -
|
| -static ssize_t NaClDescRngRead(struct NaClDesc *vself,
|
| - void *buf,
|
| - size_t len) {
|
| - struct NaClDescRng *self = (struct NaClDescRng *) vself;
|
| -
|
| - (*NACL_VTBL(NaClSecureRngIf, &self->rng)->GenBytes)(
|
| - (struct NaClSecureRngIf *) &self->rng, buf, len);
|
| - return len;
|
| -}
|
| -
|
| -static ssize_t NaClDescRngWrite(struct NaClDesc *vself,
|
| - void const *buf,
|
| - size_t len) {
|
| - UNREFERENCED_PARAMETER(vself);
|
| - UNREFERENCED_PARAMETER(buf);
|
| -
|
| - /*
|
| - * Eventually we may want to have secure pseudorandom number
|
| - * generators that permit mixing user-supplied data -- presumably
|
| - * low entropy, from timing of events or something like that -- into
|
| - * the generator state. This must be done carefully, of course,
|
| - * since we would not want the user-supplied data to destroy the
|
| - * internal generator's entropy.
|
| - */
|
| - return len;
|
| -}
|
| -
|
| -static int NaClDescRngFstat(struct NaClDesc *vself,
|
| - struct nacl_abi_stat *statbuf) {
|
| - UNREFERENCED_PARAMETER(vself);
|
| -
|
| - memset(statbuf, 0, sizeof *statbuf);
|
| - statbuf->nacl_abi_st_dev = 0;
|
| -#if defined(NACL_MASK_INODES)
|
| - statbuf->nacl_abi_st_ino = NACL_FAKE_INODE_NUM;
|
| -#else
|
| - statbuf->nacl_abi_st_ino = 0;
|
| -#endif
|
| - statbuf->nacl_abi_st_mode = NACL_ABI_S_IRUSR | NACL_ABI_S_IFCHR;
|
| - statbuf->nacl_abi_st_nlink = 1;
|
| - statbuf->nacl_abi_st_uid = -1;
|
| - statbuf->nacl_abi_st_gid = -1;
|
| - statbuf->nacl_abi_st_rdev = 0;
|
| - statbuf->nacl_abi_st_size = 0;
|
| - statbuf->nacl_abi_st_blksize = 0;
|
| - statbuf->nacl_abi_st_blocks = 0;
|
| - statbuf->nacl_abi_st_atime = 0;
|
| - statbuf->nacl_abi_st_atimensec = 0;
|
| - statbuf->nacl_abi_st_mtime = 0;
|
| - statbuf->nacl_abi_st_mtimensec = 0;
|
| - statbuf->nacl_abi_st_ctime = 0;
|
| - statbuf->nacl_abi_st_ctimensec = 0;
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -/*
|
| - * We allow descriptor "transfer", where in reality we create a
|
| - * separate rng locally at the recipient end. This is arguably
|
| - * semantically different since there is no shared access to the same
|
| - * generator; on the other hand, it should be polynomial-time
|
| - * indistinguishable since the output is supposed to be
|
| - * cryptographically secure.
|
| - */
|
| -static int NaClDescRngExternalizeSize(struct NaClDesc *vself,
|
| - size_t *nbytes,
|
| - size_t *nhandles) {
|
| - return NaClDescExternalizeSize(vself, nbytes, nhandles);
|
| -}
|
| -
|
| -static int NaClDescRngExternalize(struct NaClDesc *vself,
|
| - struct NaClDescXferState *xfer) {
|
| - return NaClDescExternalize(vself, xfer);
|
| -}
|
| -
|
| -static struct NaClDescVtbl const kNaClDescRngVtbl = {
|
| - {
|
| - NaClDescRngDtor,
|
| - },
|
| - NaClDescMapNotImplemented,
|
| - NACL_DESC_UNMAP_NOT_IMPLEMENTED
|
| - NaClDescRngRead,
|
| - NaClDescRngWrite,
|
| - NaClDescSeekNotImplemented,
|
| - NaClDescPReadNotImplemented,
|
| - NaClDescPWriteNotImplemented,
|
| - NaClDescRngFstat,
|
| - NaClDescGetdentsNotImplemented,
|
| - NaClDescRngExternalizeSize,
|
| - NaClDescRngExternalize,
|
| - NaClDescLockNotImplemented,
|
| - NaClDescTryLockNotImplemented,
|
| - NaClDescUnlockNotImplemented,
|
| - NaClDescWaitNotImplemented,
|
| - NaClDescTimedWaitAbsNotImplemented,
|
| - NaClDescSignalNotImplemented,
|
| - NaClDescBroadcastNotImplemented,
|
| - NaClDescSendMsgNotImplemented,
|
| - NaClDescRecvMsgNotImplemented,
|
| - NaClDescLowLevelSendMsgNotImplemented,
|
| - NaClDescLowLevelRecvMsgNotImplemented,
|
| - NaClDescConnectAddrNotImplemented,
|
| - NaClDescAcceptConnNotImplemented,
|
| - NaClDescPostNotImplemented,
|
| - NaClDescSemWaitNotImplemented,
|
| - NaClDescGetValueNotImplemented,
|
| - NaClDescSetMetadata,
|
| - NaClDescGetMetadata,
|
| - NaClDescSetFlags,
|
| - NaClDescGetFlags,
|
| - NaClDescIsattyNotImplemented,
|
| - NACL_DESC_DEVICE_RNG,
|
| -};
|
| -
|
| -int NaClDescRngInternalize(struct NaClDesc **out_desc,
|
| - struct NaClDescXferState *xfer,
|
| - struct NaClDescQuotaInterface *quota_interface) {
|
| - int rv;
|
| - struct NaClDescRng *rng = malloc(sizeof *rng);
|
| -
|
| - UNREFERENCED_PARAMETER(xfer);
|
| - UNREFERENCED_PARAMETER(quota_interface);
|
| - if (NULL == rng) {
|
| - rv = -NACL_ABI_ENOMEM;
|
| - goto cleanup;
|
| - }
|
| - if (!NaClDescInternalizeCtor((struct NaClDesc *) rng, xfer)) {
|
| - free(rng);
|
| - rng = NULL;
|
| - rv = -NACL_ABI_ENOMEM;
|
| - goto cleanup;
|
| - }
|
| - if (!NaClDescRngSubclassCtor(rng)) {
|
| - rv = -NACL_ABI_EIO;
|
| - goto cleanup;
|
| - }
|
| - *out_desc = (struct NaClDesc *) rng;
|
| - rv = 0; /* yay! */
|
| - cleanup:
|
| - if (rv < 0) {
|
| - NaClDescSafeUnref((struct NaClDesc *) rng);
|
| - }
|
| - return rv;
|
| -}
|
|
|