1/* 2 * Copyright (c) 2011-12 Apple Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#include "ossl-config.h" 25 26 27#include <stdio.h> 28#include <stdlib.h> 29 30#include "ossl-rand.h" 31/* #include "rk-roken.h" */ 32#include "ossl-randi.h" 33 34/* 35 * ARC4RANDOM(3) 36 */ 37static void 38arc4_seed(const void *indata, int size) 39{ 40 arc4random_addrandom((unsigned char *)indata, size); 41} 42 43 44static int 45arc4_bytes(unsigned char *outdata, int size) 46{ 47 arc4random_buf((void *)outdata, (size_t)size); 48 return (1); 49} 50 51 52static void 53arc4_cleanup(void) 54{ 55} 56 57 58static void 59arc4_add(const void *indata, int size, double entropi) 60{ 61 arc4random_addrandom((unsigned char *)indata, size); 62} 63 64 65static int 66arc4_pseudorand(unsigned char *outdata, int size) 67{ 68 return (arc4_bytes(outdata, size)); 69} 70 71 72static int 73arc4_status(void) 74{ 75 return (1); 76} 77 78 79const RAND_METHOD ossl_rand_arc4_method = 80{ 81 .seed = arc4_seed, 82 .bytes = arc4_bytes, 83 .cleanup = arc4_cleanup, 84 .add = arc4_add, 85 .pseudorand = arc4_pseudorand, 86 .status = arc4_status 87}; 88 89const RAND_METHOD * 90RAND_arc4_method(void) 91{ 92 return (&ossl_rand_arc4_method); 93} 94