diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libc/stdlib/random.3 | 110 | 
1 files changed, 56 insertions, 54 deletions
| diff --git a/src/lib/libc/stdlib/random.3 b/src/lib/libc/stdlib/random.3 index b3bc560ad3..ad92b60387 100644 --- a/src/lib/libc/stdlib/random.3 +++ b/src/lib/libc/stdlib/random.3 | |||
| @@ -25,14 +25,15 @@ | |||
| 25 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 25 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 26 | .\" SUCH DAMAGE. | 26 | .\" SUCH DAMAGE. | 
| 27 | .\" | 27 | .\" | 
| 28 | .\" $OpenBSD: random.3,v 1.26 2014/11/25 17:40:38 millert Exp $ | 28 | .\" $OpenBSD: random.3,v 1.27 2014/12/08 21:45:20 deraadt Exp $ | 
| 29 | .\" | 29 | .\" | 
| 30 | .Dd $Mdocdate: November 25 2014 $ | 30 | .Dd $Mdocdate: December 8 2014 $ | 
| 31 | .Dt RANDOM 3 | 31 | .Dt RANDOM 3 | 
| 32 | .Os | 32 | .Os | 
| 33 | .Sh NAME | 33 | .Sh NAME | 
| 34 | .Nm random , | 34 | .Nm random , | 
| 35 | .Nm srandom , | 35 | .Nm srandom , | 
| 36 | .Nm srandom_deterministic , | ||
| 36 | .Nm srandomdev , | 37 | .Nm srandomdev , | 
| 37 | .Nm initstate , | 38 | .Nm initstate , | 
| 38 | .Nm setstate | 39 | .Nm setstate | 
| @@ -44,6 +45,8 @@ | |||
| 44 | .Ft void | 45 | .Ft void | 
| 45 | .Fn srandom "unsigned int seed" | 46 | .Fn srandom "unsigned int seed" | 
| 46 | .Ft void | 47 | .Ft void | 
| 48 | .Fn srandom_deterministic "unsigned int seed" | ||
| 49 | .Ft void | ||
| 47 | .Fn srandomdev void | 50 | .Fn srandomdev void | 
| 48 | .Ft char * | 51 | .Ft char * | 
| 49 | .Fn initstate "unsigned int seed" "char *state" "size_t n" | 52 | .Fn initstate "unsigned int seed" "char *state" "size_t n" | 
| @@ -51,58 +54,48 @@ | |||
| 51 | .Fn setstate "char *state" | 54 | .Fn setstate "char *state" | 
| 52 | .Sh DESCRIPTION | 55 | .Sh DESCRIPTION | 
| 53 | .Bf -symbolic | 56 | .Bf -symbolic | 
| 54 | This interface is not cryptographically secure, so consider using | 57 | Standards insist that this interface return deterministic results. | 
| 55 | .Xr arc4random 3 | 58 | Unsafe usage is very common, so | 
| 56 | instead. | 59 | .Ox | 
| 60 | changed the subsystem to return non-deterministic results by default. | ||
| 57 | .Ef | 61 | .Ef | 
| 58 | .Pp | 62 | .Pp | 
| 59 | The | 63 | To satisfy portable code, | 
| 60 | .Fn random | ||
| 61 | function uses a non-linear additive feedback random number generator employing | ||
| 62 | a default table of size 31 long integers to return successive pseudo-random | ||
| 63 | numbers in the range from 0 to (2**31)\-1. | ||
| 64 | The period of this random number generator is very large, approximately | ||
| 65 | 16*((2**31)\-1). | ||
| 66 | .Pp | ||
| 67 | The | ||
| 68 | .Fn random | ||
| 69 | and | ||
| 70 | .Fn srandom | 64 | .Fn srandom | 
| 71 | functions have (almost) the same calling sequence and initialization | 65 | or | 
| 72 | properties as | 66 | .Fn srandomdev | 
| 73 | .Xr rand 3 Ns / Ns Xr srand 3 . | 67 | may be called to initialize the subsystem. | 
| 74 | The difference is that | 68 | In | 
| 75 | .Xr rand | 69 | .Ox | 
| 76 | produces a much less random sequence \(em in fact, the low dozen bits | 70 | the | 
| 77 | generated by rand go through a cyclic pattern. | 71 | .Ar seed | 
| 78 | All the bits generated by | 72 | variable is ignored, and strong random number results will be provided from | 
| 73 | .Xr arc4random 3. | ||
| 74 | In other systems, the | ||
| 75 | .Ar seed | ||
| 76 | variable primes a simplistic deterministic algorithm. | ||
| 77 | .Pp | ||
| 78 | If the standardized behavior is required | ||
| 79 | .Fn srandom_deterministic | ||
| 80 | can be substituted for | ||
| 81 | .Fn srandom , | ||
| 82 | then subsequent | ||
| 79 | .Fn random | 83 | .Fn random | 
| 80 | are usable. | 84 | calls will return results using the deterministic algorithm. | 
| 81 | For example, | ||
| 82 | .Sq Li random()&01 | ||
| 83 | will produce a random binary | ||
| 84 | value. | ||
| 85 | .Pp | 85 | .Pp | 
| 86 | Like | 86 | In non-deterministic (default) mode, the | 
| 87 | .Xr rand 3 , | ||
| 88 | .Fn random | 87 | .Fn random | 
| 89 | will by default produce a sequence of numbers that can be duplicated | 88 | function returns results from | 
| 90 | by calling | 89 | .Xr arc4random 3 | 
| 91 | .Fn srandom | 90 | in the range from 0 to (2**31)\-1. | 
| 92 | with | ||
| 93 | .Ql 1 | ||
| 94 | as the seed. | ||
| 95 | .Pp | 91 | .Pp | 
| 96 | The | 92 | In deterministic mode, the | 
| 97 | .Fn srandomdev | 93 | .Fn random | 
| 98 | routine switches to an algorithm using state derived from | 94 | function uses a non-linear additive feedback random number generator employing | 
| 99 | random numbers obtained from the kernel. | 95 | a default table of size 31 long integers to return successive pseudo-random | 
| 100 | Note that this particular seeding procedure can generate | 96 | numbers in the range from 0 to (2**31)\-1. | 
| 101 | states which are impossible to reproduce by calling | 97 | The period of this random number generator is very large, approximately | 
| 102 | .Fn srandom | 98 | 16*((2**31)\-1), but the results are a deterministic sequence from the seed. | 
| 103 | with any value, since the succeeding terms in the | ||
| 104 | state buffer are no longer derived from the LC algorithm applied to | ||
| 105 | a fixed seed. | ||
| 106 | .Pp | 99 | .Pp | 
| 107 | The | 100 | The | 
| 108 | .Fn initstate | 101 | .Fn initstate | 
| @@ -151,9 +144,12 @@ and | |||
| 151 | is that the size of the state array does not have to be remembered after | 144 | is that the size of the state array does not have to be remembered after | 
| 152 | it is initialized. | 145 | it is initialized. | 
| 153 | .Pp | 146 | .Pp | 
| 154 | With 256 bytes of state information, the period of the random number | 147 | Use of | 
| 155 | generator is greater than 2**69 | 148 | .Fn srandom_deterministic , | 
| 156 | which should be sufficient for most purposes. | 149 | .Fn initstate , | 
| 150 | or | ||
| 151 | .Fn setstate | ||
| 152 | forces the subsystem into deterministic mode. | ||
| 157 | .Sh DIAGNOSTICS | 153 | .Sh DIAGNOSTICS | 
| 158 | If | 154 | If | 
| 159 | .Fn initstate | 155 | .Fn initstate | 
| @@ -169,7 +165,6 @@ messages are printed on the standard error output. | |||
| 169 | .Sh STANDARDS | 165 | .Sh STANDARDS | 
| 170 | The | 166 | The | 
| 171 | .Fn random , | 167 | .Fn random , | 
| 172 | .Fn srandom , | ||
| 173 | .Fn initstate , | 168 | .Fn initstate , | 
| 174 | and | 169 | and | 
| 175 | .Fn setstate | 170 | .Fn setstate | 
| @@ -177,14 +172,21 @@ functions conform to | |||
| 177 | .St -xpg4.2 . | 172 | .St -xpg4.2 . | 
| 178 | .Pp | 173 | .Pp | 
| 179 | The | 174 | The | 
| 175 | .Fn srandom | ||
| 176 | function does not conform to | ||
| 177 | .St -xpg4.2 , | ||
| 178 | intentionally. | ||
| 179 | .Pp | ||
| 180 | The | ||
| 180 | .Fn srandomdev | 181 | .Fn srandomdev | 
| 181 | function is an extension. | 182 | function is an extension. | 
| 183 | .Pp | ||
| 184 | The | ||
| 185 | .Fn srandom_deterministic | ||
| 186 | function is an OpenBSD extension. | ||
| 182 | .Sh HISTORY | 187 | .Sh HISTORY | 
| 183 | These | 188 | These | 
| 184 | functions appeared in | 189 | functions appeared in | 
| 185 | .Bx 4.2 . | 190 | .Bx 4.2 . | 
| 186 | .Sh AUTHORS | 191 | .Sh AUTHORS | 
| 187 | .An Earl T. Cohen | 192 | .An Earl T. Cohen | 
| 188 | .Sh BUGS | ||
| 189 | The historical implementation used to have very weak seeding. | ||
| 190 | As a result, the random sequence did not vary much with the seed. | ||
