1 // SPDX-License-Identifier: CDDL-1.0 2 /* 3 * CDDL HEADER START 4 * 5 * The contents of this file are subject to the terms of the 6 * Common Development and Distribution License (the "License"). 7 * You may not use this file except in compliance with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or https://opensource.org/licenses/CDDL-1.0. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 24 * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 25 * Copyright (c) 2012, 2018 by Delphix. All rights reserved. 26 * Copyright (c) 2012, Joyent, Inc. All rights reserved. 27 */ 28 29 #ifndef _SYS_RANDOM_H 30 #define _SYS_RANDOM_H 31 32 extern int random_get_bytes(uint8_t *ptr, size_t len); 33 extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len); 34 35 extern void random_force_pseudo(boolean_t onoff); 36 37 static __inline__ uint32_t 38 random_in_range(uint32_t range) 39 { 40 uint32_t r; 41 42 #if !defined(__APPLE__) || !defined(IN_BASE) 43 ASSERT(range != 0); 44 #endif 45 46 if (range == 1) 47 return (0); 48 49 (void) random_get_pseudo_bytes((uint8_t *)&r, sizeof (r)); 50 51 return (r % range); 52 } 53 54 #endif /* _SYS_RANDOM_H */ 55