| /* |
| * |
| * Copyright (c) 2011-2015 Nest Labs, Inc. |
| * All rights reserved. |
| * |
| * This document is the property of Nest. It is considered |
| * confidential and proprietary information. |
| * |
| * This document may not be reproduced or transmitted in any form, |
| * in whole or in part, without the express written permission of |
| * Nest. |
| * |
| * Description: |
| * Custom implemenation of OpenSSL's random number API that maps |
| * these functions onto the system's random number source (gCTRDRBG_ctx), |
| * which is an instance of the PolarSSL AES_CTR DRBG fed by the |
| * hardware random number source. |
| */ |
| |
| #include <rand.h> |
| #include <openssl/rand.h> |
| #include <openssl/err.h> |
| |
| extern int GetSecureRandomData(unsigned char *, uint16_t); |
| |
| int RAND_bytes(unsigned char *buf, int num) |
| { |
| int retval = 0, err; |
| |
| err = GetSecureRandomData(buf, num); |
| |
| if (err == 0) |
| { |
| retval = 1; |
| }else{ |
| RANDerr(RAND_F_RAND_GET_RAND_METHOD, RAND_R_PRNG_ERROR); |
| } |
| |
| return retval; |
| } |
| |
| void RAND_add(const void *buf, int num, double entropy) |
| { |
| /* Do nothing. This function is used to add additionaly entropy into the OpenSSL entropy pool. |
| * In the context of Pumice, all entropy comes from the system hardware RNG, making this |
| * function unnecessary. |
| */ |
| } |
| |
| int RAND_pseudo_bytes(unsigned char *buf, int num) |
| { |
| return RAND_bytes(buf, num); |
| } |
| |