## NAME

`BN_rand`

,
`BN_pseudo_rand`

,
`BN_rand_range`

,
`BN_pseudo_rand_range`

—
generate pseudo-random
number

## SYNOPSIS

```
#include
<openssl/bn.h>
```

`int`

`BN_rand`

(`BIGNUM *rnd`,
`int bits`, `int top`,
`int bottom`);

`int`

`BN_pseudo_rand`

(`BIGNUM *rnd`,
`int bits`, `int top`,
`int bottom`);

`int`

`BN_rand_range`

(`BIGNUM *rnd`,
`BIGNUM *range`);

`int`

`BN_pseudo_rand_range`

(`BIGNUM
*rnd`, `BIGNUM *range`);

## DESCRIPTION

`BN_rand`

()
generates a cryptographically strong pseudo-random number of
`bits` in length and stores it in
`rnd`. If `top` is -1, the most
significant bit of the random number can be zero. If
`top` is 0, it is set to 1, and if
`top` is 1, the two most significant bits of the number
will be set to 1, so that the product of two such random numbers will always
have 2*`bits` length. If `bottom` is
true, the number will be odd. The value of `bits` must
be zero or greater. If `bits` is +1 then
`top` cannot also be 1.

`BN_pseudo_rand`

()
does the same, but pseudo-random numbers generated by this function are not
necessarily unpredictable. They can be used for non-cryptographic purposes
and for certain purposes in cryptographic protocols, but usually not for key
generation etc.

`BN_rand_range`

()
generates a cryptographically strong pseudo-random number
`rnd` in the range 0 <= `rnd`
< `range`.
`BN_pseudo_rand_range`

()
does the same, but is based on `BN_pseudo_rand`

(), and
hence numbers generated by it are not necessarily unpredictable.

## RETURN VALUES

The functions return 1 on success, 0 on error. The error codes can be obtained by ERR_get_error(3).

## SEE ALSO

## HISTORY

`BN_rand`

() is available in all versions of
SSLeay and OpenSSL. `BN_pseudo_rand`

() was added in
OpenSSL 0.9.5. The `top` == -1 case and the function
`BN_rand_range`

() were added in OpenSSL 0.9.6a.
`BN_pseudo_rand_range`

() was added in OpenSSL
0.9.6c.