1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/rand/rand_unix.c */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com). 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to. The following conditions 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA, 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed. 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package. 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in the 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * documentation and/or other materials provided with the distribution. 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * must display the following acknowledgement: 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes cryptographic software written by 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Eric Young (eay@cryptsoft.com)" 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The word 'cryptographic' can be left out if the rouines from the library 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * being used are not cryptographic related :-). 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the apps directory (application code) you must include an acknowledgement: 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE. 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed. i.e. this code cannot simply be 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.] 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ==================================================================== 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the documentation and/or other materials provided with the 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * distribution. 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * software must display the following acknowledgment: 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software developed by the OpenSSL Project 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * endorse or promote products derived from this software without 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * prior written permission. For written permission, please contact 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * openssl-core@openssl.org. 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL" 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * nor may "OpenSSL" appear in their names without prior written 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * permission of the OpenSSL Project. 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * acknowledgment: 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software developed by the OpenSSL Project 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE. 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ==================================================================== 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com). This product includes software written by Tim 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com). 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h> 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define USE_SOCKETS 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "e_os.h" 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "cryptlib.h" 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/rand.h> 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "rand_lcl.h" 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if !(defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE)) 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/types.h> 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/time.h> 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/times.h> 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/stat.h> 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <fcntl.h> 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <unistd.h> 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <time.h> 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(OPENSSL_SYS_LINUX) /* should actually be available virtually everywhere */ 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# include <poll.h> 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <limits.h> 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef FD_SETSIZE 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define FD_SETSIZE (8*sizeof(fd_set)) 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1367b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#if defined(OPENSSL_SYS_VOS) 1377b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 1387b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom/* The following algorithm repeatedly samples the real-time clock 1397b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom (RTC) to generate a sequence of unpredictable data. The algorithm 1407b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom relies upon the uneven execution speed of the code (due to factors 1417b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom such as cache misses, interrupts, bus activity, and scheduling) and 1427b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom upon the rather large relative difference between the speed of the 1437b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom clock and the rate at which it can be read. 1447b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 1457b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom If this code is ported to an environment where execution speed is 1467b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom more constant or where the RTC ticks at a much slower rate, or the 1477b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom clock can be read with fewer instructions, it is likely that the 1487b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom results would be far more predictable. 1497b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 1507b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom As a precaution, we generate 4 times the minimum required amount of 1517b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom seed data. */ 1527b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 153221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint RAND_poll(void) 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ 1557b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom short int code; 1567b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom gid_t curr_gid; 157221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pid_t curr_pid; 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom uid_t curr_uid; 1597b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom int i, k; 160221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom struct timespec ts; 1617b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom unsigned char v; 162221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1637b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#ifdef OPENSSL_SYS_VOS_HPPA 1647b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom long duration; 1657b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom extern void s$sleep (long *_duration, short int *_code); 1667b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#else 1677b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#ifdef OPENSSL_SYS_VOS_IA32 1687b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom long long duration; 1697b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom extern void s$sleep2 (long long *_duration, short int *_code); 1707b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#else 1717b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#error "Unsupported Platform." 1727b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#endif /* OPENSSL_SYS_VOS_IA32 */ 1737b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#endif /* OPENSSL_SYS_VOS_HPPA */ 1747b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 1757b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom /* Seed with the gid, pid, and uid, to ensure *some* 1767b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom variation between different processes. */ 1777b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 1787b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom curr_gid = getgid(); 1797b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom RAND_add (&curr_gid, sizeof curr_gid, 1); 1807b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom curr_gid = 0; 1817b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 1827b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom curr_pid = getpid(); 1837b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom RAND_add (&curr_pid, sizeof curr_pid, 1); 1847b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom curr_pid = 0; 185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1867b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom curr_uid = getuid(); 1877b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom RAND_add (&curr_uid, sizeof curr_uid, 1); 1887b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom curr_uid = 0; 1897b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 1907b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom for (i=0; i<(ENTROPY_NEEDED*4); i++) 1917b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom { 1927b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom /* burn some cpu; hope for interrupts, cache 1937b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom collisions, bus interference, etc. */ 1947b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom for (k=0; k<99; k++) 1957b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom ts.tv_nsec = random (); 1967b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 1977b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#ifdef OPENSSL_SYS_VOS_HPPA 1987b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom /* sleep for 1/1024 of a second (976 us). */ 1997b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom duration = 1; 2007b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom s$sleep (&duration, &code); 2017b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#else 2027b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#ifdef OPENSSL_SYS_VOS_IA32 2037b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom /* sleep for 1/65536 of a second (15 us). */ 2047b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom duration = 1; 2057b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom s$sleep2 (&duration, &code); 2067b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#endif /* OPENSSL_SYS_VOS_IA32 */ 2077b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom#endif /* OPENSSL_SYS_VOS_HPPA */ 2087b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 2097b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom /* get wall clock time. */ 2107b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom clock_gettime (CLOCK_REALTIME, &ts); 2117b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom 2127b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom /* take 8 bits */ 2137b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom v = (unsigned char) (ts.tv_nsec % 256); 2147b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom RAND_add (&v, sizeof v, 1); 2157b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom v = 0; 2167b476c43f6a45574eb34697244b592e7b09f05a3Brian Carlstrom } 217221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return 1; 218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#elif defined __OpenBSD__ 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint RAND_poll(void) 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project u_int32_t rnd = 0, i; 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned char buf[ENTROPY_NEEDED]; 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (i = 0; i < sizeof(buf); i++) { 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (i % 4 == 0) 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rnd = arc4random(); 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project buf[i] = rnd; 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rnd >>= 8; 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project RAND_add(buf, sizeof(buf), ENTROPY_NEEDED); 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memset(buf, 0, sizeof(buf)); 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else /* !defined(__OpenBSD__) */ 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint RAND_poll(void) 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned long l; 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pid_t curr_pid = getpid(); 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(DEVRANDOM) || defined(DEVRANDOM_EGD) 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned char tmpbuf[ENTROPY_NEEDED]; 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int n = 0; 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef DEVRANDOM 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const char *randomfiles[] = { DEVRANDOM }; 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project struct stat randomstats[sizeof(randomfiles)/sizeof(randomfiles[0])]; 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int fd; 249221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom unsigned int i; 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef DEVRANDOM_EGD 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const char *egdsockets[] = { DEVRANDOM_EGD, NULL }; 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const char **egdsocket = NULL; 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef DEVRANDOM 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memset(randomstats,0,sizeof(randomstats)); 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Use a random entropy pool device. Linux, FreeBSD and OpenBSD 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * have this. Use /dev/urandom if you can as /dev/random may block 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * if it runs out of random entries. */ 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 262221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom for (i = 0; (i < sizeof(randomfiles)/sizeof(randomfiles[0])) && 263221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (n < ENTROPY_NEEDED); i++) 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ((fd = open(randomfiles[i], O_RDONLY 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef O_NONBLOCK 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project |O_NONBLOCK 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef O_BINARY 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project |O_BINARY 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef O_NOCTTY /* If it happens to be a TTY (god forbid), do not make it 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project our controlling tty */ 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project |O_NOCTTY 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project )) >= 0) 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int usec = 10*1000; /* spend 10ms on each file */ 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int r; 280221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom unsigned int j; 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project struct stat *st=&randomstats[i]; 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Avoid using same input... Used to be O_NOFOLLOW 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * above, but it's not universally appropriate... */ 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (fstat(fd,st) != 0) { close(fd); continue; } 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (j=0;j<i;j++) 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (randomstats[j].st_ino==st->st_ino && 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project randomstats[j].st_dev==st->st_dev) 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project break; 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (j<i) { close(fd); continue; } 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project do 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int try_read = 0; 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 298221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#if defined(OPENSSL_SYS_BEOS_R5) 299221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom /* select() is broken in BeOS R5, so we simply 300221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * try to read something and snooze if we couldn't */ 301221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom try_read = 1; 302221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 303221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#elif defined(OPENSSL_SYS_LINUX) 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* use poll() */ 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project struct pollfd pset; 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pset.fd = fd; 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pset.events = POLLIN; 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pset.revents = 0; 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (poll(&pset, 1, usec / 1000) < 0) 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project usec = 0; 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project try_read = (pset.revents & POLLIN) != 0; 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* use select() */ 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fd_set fset; 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project struct timeval t; 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t.tv_sec = 0; 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t.tv_usec = usec; 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 324e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu if (FD_SETSIZE > 0 && (unsigned)fd >= FD_SETSIZE) 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* can't use select, so just try to read once anyway */ 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project try_read = 1; 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FD_ZERO(&fset); 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FD_SET(fd, &fset); 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (select(fd+1,&fset,NULL,NULL,&t) >= 0) 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project usec = t.tv_usec; 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (FD_ISSET(fd, &fset)) 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project try_read = 1; 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project usec = 0; 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (try_read) 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r = read(fd,(unsigned char *)tmpbuf+n, ENTROPY_NEEDED-n); 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r > 0) 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project n += r; 350221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#if defined(OPENSSL_SYS_BEOS_R5) 351221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (r == 0) 352221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom snooze(t.tv_usec); 353221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r = -1; 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Some Unixen will update t in select(), some 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project won't. For those who won't, or if we 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project didn't use select() in the first place, 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project give up here, otherwise, we will do 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project this once again for the remaining 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project time. */ 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (usec == 10*1000) 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project usec = 0; 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while ((r > 0 || 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (errno == EINTR || errno == EAGAIN)) && usec != 0 && n < ENTROPY_NEEDED); 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project close(fd); 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* defined(DEVRANDOM) */ 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef DEVRANDOM_EGD 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Use an EGD socket to read entropy from an EGD or PRNGD entropy 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * collecting daemon. */ 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (egdsocket = egdsockets; *egdsocket && n < ENTROPY_NEEDED; egdsocket++) 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int r; 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r = RAND_query_egd_bytes(*egdsocket, (unsigned char *)tmpbuf+n, 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ENTROPY_NEEDED-n); 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r > 0) 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project n += r; 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* defined(DEVRANDOM_EGD) */ 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(DEVRANDOM) || defined(DEVRANDOM_EGD) 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (n > 0) 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project RAND_add(tmpbuf,sizeof tmpbuf,(double)n); 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OPENSSL_cleanse(tmpbuf,n); 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* put in some default random data, we need more than just this */ 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project l=curr_pid; 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project RAND_add(&l,sizeof(l),0.0); 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project l=getuid(); 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project RAND_add(&l,sizeof(l),0.0); 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project l=time(NULL); 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project RAND_add(&l,sizeof(l),0.0); 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 407221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#if defined(OPENSSL_SYS_BEOS) 408221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 409221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom system_info sysInfo; 410221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom get_system_info(&sysInfo); 411221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom RAND_add(&sysInfo,sizeof(sysInfo),0); 412221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 413221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 414221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(DEVRANDOM) || defined(DEVRANDOM_EGD) 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* defined(__OpenBSD__) */ 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* !(defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE)) */ 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(OPENSSL_SYS_VXWORKS) 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint RAND_poll(void) 428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 432