ARC4RANDOM(3) | Library Functions Manual | ARC4RANDOM(3) |

`arc4random`

, `arc4random_buf`

,
`arc4random_uniform`

,
`arc4random_stir`

,
`arc4random_addrandom`

—
arc4 random number generator

`#include <stdlib.h>`

`u_int32_t`

`arc4random`

(`void`);

`void`

`arc4random_buf`

(`void
*buf`, `size_t
nbytes`);

`u_int32_t`

`arc4random_uniform`

(`u_int32_t
upper_bound`);

`void`

`arc4random_stir`

(`void`);

`void`

`arc4random_addrandom`

(`u_char
*dat`, `int
datlen`);

`arc4random`

() function provides a high quality 32-bit
pseudo-random number very quickly. `arc4random`

() seeds
itself on a regular basis from the kernel strong random number subsystem
described in random(4). On each
call, an ARC4 generator is used to generate a new result. The
`arc4random`

() function uses the ARC4 cipher key stream
generator, which uses 8*8 8-bit S-Boxes. The S-Boxes can be in about (2**1700)
states.
`arc4random`

() provides a cryptographically
secure pseudo-random number generator, as opposed to the fast but poor
quality interfaces described in
rand(3),
random(3), and
drand48(3).

`arc4random_buf`

() fills the region
`buf` of length `nbytes` with
ARC4-derived random data.

`arc4random_uniform`

() will return a
uniformly distributed random number less than
`upper_bound`.
`arc4random_uniform`

() is recommended over
constructions like “```
arc4random() %
upper_bound
```

” as it avoids "modulo bias" when the
upper bound is not a power of two.

The `arc4random_stir`

() function reads data
using sysctl(3) from
`kern.arandom` and uses it to permute the S-Boxes via
`arc4random_addrandom`

().

There is no need to call `arc4random_stir`

()
before using `arc4random`

(), since
`arc4random`

() automatically initializes itself.

`Alleged RC4`

’ algorithm. Since
RC4 was trademarked, the cipher is now referred to as
ARC4.
These functions first appeared in OpenBSD 2.1.

June 5, 2013 | OpenBSD-5.4 |