xref: /titanic_44/usr/src/man/man3c/arc4random.3c (revision 9d12795f87b63c2e39e87bff369182edd34677d3)
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