# FreeBSD Manual Pages

RANDOM(9) BSD Kernel Developer's Manual RANDOM(9)NAMEarc4rand,arc4random,random,read_random,read_random_uio,srandom-- supply pseudo-random numbersSYNOPSIS#include<sys/libkern.h>voidsrandom(u_longseed);u_longrandom(void);voidarc4rand(void*ptr,u_intlength,intreseed);uint32_tarc4random(void);#include<sys/random.h>intread_random(void*buffer,intcount);intread_random_uio(structuio*uio,boolnonblock);DESCRIPTIONTherandom() function will by default produce a sequence of numbers that can be duplicated by callingsrandom() with some constant as theseed. Thesrandom() function may be called with any arbitraryseedvalue to get slightly more unpredictable numbers. It is important to remember that therandom() function is entirely predictable, and is therefore not of use where knowledge of the sequence of numbers may be of benefit to an attacker. Thearc4rand() function will return very good quality random numbers, better suited for security-related purposes. The random numbers fromarc4rand() are seeded from the entropy device if it is available. Auto- matic 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 thereseedargument. Theread_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 thebufferis ignored and zero is returned. Thebufferis filled with no more thancountbytes. It is strongly advised thatread_random() is not used; instead usearc4rand() unless it is necessary to know that no entropy has been returned. Theread_random_uio() function behaves identically to read(2) on/dev/random. Theuioargument points to a buffer where random data should be stored. This function only returns data if the random device is seeded. It blocks if unseeded, except when thenonblockargument is true. All the bits returned byrandom(),arc4rand(),read_random(), andread_random_uio() are usable. For example, `random()&01' will produce a random binary value. Thearc4random() is a convenience function which callsarc4rand() to re- turn a 32 bit pseudo-random integer.RETURN VALUESTherandom() function uses a non-linear additive feedback random number generator employing a default table of size 31 containing 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, ap- proximately 16*((2**31)-1). Thearc4rand() function uses the RC4 algorithm to generate successive pseudo-random bytes. Thearc4random() function usesarc4rand() to gener- ate pseudo-random numbers in the range from 0 to (2**32)-1. Theread_random() function returns the number of bytes placed inbuffer.read_random_uio() returns zero when successful, otherwise an error code is returned.ERRORSread_random_uio() may fail if: [EFAULT]uiopoints to an invalid memory region. [EWOULDBLOCK] The random device is unseeded andnonblockis true.AUTHORSDan Moschuk wrotearc4random(). Mark R V Murray wroteread_random(). BSD July 16, 2015 BSD

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | AUTHORS

Want to link to this manual page? Use this URL:

<https://www.freebsd.org/cgi/man.cgi?query=arc4rand&manpath=FreeBSD+12.0-RELEASE+and+Ports>