RANDOM(9) | FreeBSD 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*);

*uint32_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

wrote**arc4random**(). wrote

**read_random**().

September 25, 2000 | FreeBSD |