1*9d12795fSRobert Mustacchi.\" $OpenBSD: arc4random.3,v 1.35 2014/11/25 16:45:24 millert Exp $ 2*9d12795fSRobert Mustacchi.\" 3*9d12795fSRobert Mustacchi.\" Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de> 4*9d12795fSRobert Mustacchi.\" All rights reserved. 5*9d12795fSRobert Mustacchi.\" 6*9d12795fSRobert Mustacchi.\" Redistribution and use in source and binary forms, with or without 7*9d12795fSRobert Mustacchi.\" modification, are permitted provided that the following conditions 8*9d12795fSRobert Mustacchi.\" are met: 9*9d12795fSRobert Mustacchi.\" 1. Redistributions of source code must retain the above copyright 10*9d12795fSRobert Mustacchi.\" notice, this list of conditions and the following disclaimer. 11*9d12795fSRobert Mustacchi.\" 2. Redistributions in binary form must reproduce the above copyright 12*9d12795fSRobert Mustacchi.\" notice, this list of conditions and the following disclaimer in the 13*9d12795fSRobert Mustacchi.\" documentation and/or other materials provided with the distribution. 14*9d12795fSRobert Mustacchi.\" 3. All advertising materials mentioning features or use of this software 15*9d12795fSRobert Mustacchi.\" must display the following acknowledgement: 16*9d12795fSRobert Mustacchi.\" This product includes software developed by Niels Provos. 17*9d12795fSRobert Mustacchi.\" 4. The name of the author may not be used to endorse or promote products 18*9d12795fSRobert Mustacchi.\" derived from this software without specific prior written permission. 19*9d12795fSRobert Mustacchi.\" 20*9d12795fSRobert Mustacchi.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21*9d12795fSRobert Mustacchi.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22*9d12795fSRobert Mustacchi.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23*9d12795fSRobert Mustacchi.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24*9d12795fSRobert Mustacchi.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25*9d12795fSRobert Mustacchi.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26*9d12795fSRobert Mustacchi.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27*9d12795fSRobert Mustacchi.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*9d12795fSRobert Mustacchi.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29*9d12795fSRobert Mustacchi.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*9d12795fSRobert Mustacchi.\" 31*9d12795fSRobert Mustacchi.\" Manual page, using -mandoc macros 32*9d12795fSRobert Mustacchi.\" 33*9d12795fSRobert Mustacchi.Dd "Dec 31, 2014" 34*9d12795fSRobert Mustacchi.Dt ARC4RANDOM 3C 35*9d12795fSRobert Mustacchi.Os 36*9d12795fSRobert Mustacchi.Sh NAME 37*9d12795fSRobert Mustacchi.Nm arc4random , 38*9d12795fSRobert Mustacchi.Nm arc4random_buf , 39*9d12795fSRobert Mustacchi.Nm arc4random_uniform 40*9d12795fSRobert Mustacchi.Nd random number generator 41*9d12795fSRobert Mustacchi.Sh SYNOPSIS 42*9d12795fSRobert Mustacchi.In stdlib.h 43*9d12795fSRobert Mustacchi.Ft uint32_t 44*9d12795fSRobert Mustacchi.Fn arc4random "void" 45*9d12795fSRobert Mustacchi.Ft void 46*9d12795fSRobert Mustacchi.Fn arc4random_buf "void *buf" "size_t nbytes" 47*9d12795fSRobert Mustacchi.Ft uint32_t 48*9d12795fSRobert Mustacchi.Fn arc4random_uniform "uint32_t upper_bound" 49*9d12795fSRobert Mustacchi.Sh DESCRIPTION 50*9d12795fSRobert MustacchiThis family of functions provides higher quality data than those 51*9d12795fSRobert Mustacchidescribed in 52*9d12795fSRobert Mustacchi.Xr rand 3C , 53*9d12795fSRobert Mustacchi.Xr random 3C , 54*9d12795fSRobert Mustacchiand 55*9d12795fSRobert Mustacchi.Xr rand48 3C . 56*9d12795fSRobert Mustacchi.Pp 57*9d12795fSRobert MustacchiUse of these functions is encouraged for almost all random number 58*9d12795fSRobert Mustacchiconsumption because the other interfaces are deficient in either 59*9d12795fSRobert Mustacchiquality, portability, standardization, or availability. 60*9d12795fSRobert MustacchiThese functions can be called in almost all coding environments, 61*9d12795fSRobert Mustacchiincluding 62*9d12795fSRobert Mustacchi.Xr pthreads 5 63*9d12795fSRobert Mustacchiand 64*9d12795fSRobert Mustacchi.Xr chroot 2 . 65*9d12795fSRobert Mustacchi.Pp 66*9d12795fSRobert MustacchiHigh quality 32-bit pseudo-random numbers are generated very quickly. 67*9d12795fSRobert MustacchiOn each call, a cryptographic pseudo-random number generator is used 68*9d12795fSRobert Mustacchito generate a new result. 69*9d12795fSRobert MustacchiOne data pool is used for all consumers in a process, so that consumption 70*9d12795fSRobert Mustacchiunder program flow can act as additional stirring. 71*9d12795fSRobert MustacchiThe subsystem is re-seeded from the kernel random number subsystem using 72*9d12795fSRobert Mustacchi.Xr getentropy 2 73*9d12795fSRobert Mustacchion a regular basis, and also upon 74*9d12795fSRobert Mustacchi.Xr fork 2 . 75*9d12795fSRobert Mustacchi.Pp 76*9d12795fSRobert MustacchiThe 77*9d12795fSRobert Mustacchi.Fn arc4random 78*9d12795fSRobert Mustacchifunction returns a single 32-bit value. 79*9d12795fSRobert Mustacchi.Pp 80*9d12795fSRobert Mustacchi.Fn arc4random_buf 81*9d12795fSRobert Mustacchifills the region 82*9d12795fSRobert Mustacchi.Fa buf 83*9d12795fSRobert Mustacchiof length 84*9d12795fSRobert Mustacchi.Fa nbytes 85*9d12795fSRobert Mustacchiwith random data. 86*9d12795fSRobert Mustacchi.Pp 87*9d12795fSRobert Mustacchi.Fn arc4random_uniform 88*9d12795fSRobert Mustacchiwill return a single 32-bit value, uniformly distributed but less than 89*9d12795fSRobert Mustacchi.Fa upper_bound . 90*9d12795fSRobert MustacchiThis is recommended over constructions like 91*9d12795fSRobert Mustacchi.Dq Li arc4random() % upper_bound 92*9d12795fSRobert Mustacchias it avoids "modulo bias" when the upper bound is not a power of two. 93*9d12795fSRobert MustacchiIn the worst case, this function may consume multiple iterations 94*9d12795fSRobert Mustacchito ensure uniformity; see the source code to understand the problem 95*9d12795fSRobert Mustacchiand solution. 96*9d12795fSRobert Mustacchi.Sh RETURN VALUES 97*9d12795fSRobert MustacchiThese functions are always successful, and no return value is 98*9d12795fSRobert Mustacchireserved to indicate an error. 99*9d12795fSRobert Mustacchi.Sh INTERFACE STABILITY 100*9d12795fSRobert Mustacchi.Sy Committed 101*9d12795fSRobert Mustacchi.Sh MT-LEVEL 102*9d12795fSRobert Mustacchi.Sy MT-Safe 103*9d12795fSRobert Mustacchi.Sh SEE ALSO 104*9d12795fSRobert Mustacchi.Xr rand 3C , 105*9d12795fSRobert Mustacchi.Xr rand48 3C , 106*9d12795fSRobert Mustacchi.Xr random 3C 107