Man Linux: Main Page and Category List

arc4random,arc4random_buf,arc4random_uniform,arc4random_stir,arc4random_addrandom- arc4 random number generator

Utility functions from BSD systems (libbsd, -lbsd)

#include<stdlib.h>u_int32_tarc4random(void);voidarc4random_buf(void*buf,size_tnbytes);u_int32_tarc4random_uniform(u_int32_tupper_bound);voidarc4random_stir(void);voidarc4random_addrandom(unsignedchar*dat,intdatlen);

Thearc4random() function uses the key stream generator employed by the arc4 cipher, which uses 8*8 8 bit S-Boxes. The S-Boxes can be in about (2**1700) states. Thearc4random() function returns pseudo-random numbers in the range of 0 to (2**32)−1, and therefore has twice the range of rand(3) and random(3).arc4random_buf() function fills the regionbufof lengthnbyteswith ARC4-derived random data.arc4random_uniform() will return a uniformly distributed random number less thanupper_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. Thearc4random_stir() function reads data from/dev/urandomand uses it to permute the S-Boxes viaarc4random_addrandom(). There is no need to callarc4random_stir() before usingarc4random() functions family, since they automatically initialize themselves.

The following produces a drop-in replacement for the traditionalrand() andrandom() functions usingarc4random(): #define foo4random() (arc4random() % ((unsigned)RAND_MAX + 1))

rand(3), random(3), srandomdev(3)

RC4has been designed by RSA Data Security, Inc. It was posted anonymously to the USENET and was confirmed to be equivalent by several sources who had access to the original cipher. SinceRC4used to be a trade secret, the cipher is now referred to asARC4.