## table of contents

RANDOM(9) | Kernel Developer's Manual | RANDOM(9) |

# NAME¶

**arc4rand**,

**arc4random**,

**random**,

**read_random**,

**srandom**— supply pseudo-random numbers

# SYNOPSIS¶

**#include <sys/libkern.h>**

`void`

**srandom**(

`u_long seed`);

`u_long`

**random**(

`void`);

`void`

**arc4rand**(

`void *ptr`,

`u_int length`,

`int reseed`);

`u_int32_t`

**arc4random**(

`void`);

**#include <sys/random.h>**

`int`

**read_random**(

`void *buffer`,

`int count`);

# DESCRIPTION¶

The**random**() function will by default produce a sequence of numbers that can be duplicated by calling

**srandom**() with ‘

`1`

’ as the `seed`. The

**srandom**() function may be called with any arbitrary

`seed`value to get slightly more unpredictable numbers. It is important to remember that the

**random**() function is entirely predictable, and is therefore not of use where knowledge of the sequence of numbers may be of benefit to an attacker. The

**arc4rand**() function will return very good quality random numbers, slightly better suited for security-related purposes. The random numbers from

**arc4rand**() are seeded from the entropy device if it is available. Automatic reseeds happen after a certain timeinterval and after a certain number of bytes have been delivered. A forced reseed can be forced by passing a non-zero value in the

`reseed`argument. The

**read_random**() function is used to return entropy directly from the entropy device if it has been loaded. If the entropy device is not loaded, then the

`buffer`is filled with output generated by

**random**(). The

`buffer`is filled with no more than

`count`bytes. It is advised that

**read_random**() is not used; instead use

**arc4rand**() All the bits generated by

**random**(),

**arc4rand**() and

**read_random**() are usable. For example, ‘

`random()&01`

’ will
produce a random binary value.
The **arc4random**() is a convenience function which calls

**arc4rand**() to return a 32 bit pseudo-random integer.

# RETURN VALUES¶

The**random**() function uses a non-linear additive feedback random number generator employing a default table of size 31 long integers to return successive pseudo-random numbers in the range from 0 to (2**31)−1. The period of this random number generator is very large, approximately 16*((2**31)−1). The

**arc4rand**() function uses the RC4 algorithm to generate successive pseudo-random bytes. The

**arc4random**() function uses

**arc4rand**() to generate pseudo-random numbers in the range from 0 to (2**32)−1. The

**read_random**() function returns the number of bytes placed in

`buffer`.

# AUTHORS¶

Dan Moschuk wrote**arc4random**().

Mark R V Murray wrote

**read_random**().

September 25, 2000 | Debian |