## NAME

`BN_rand`

,
`BN_rand_range`

,
`BN_pseudo_rand`

,
`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_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_rand_range`

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

`BN_pseudo_rand`

()
is a deprecated alias for `BN_rand`

(), and
`BN_pseudo_rand_range`

()
for `BN_rand_range`

().

## 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`

() first appeared in SSLeay 0.5.1
and has been available since OpenBSD 2.4.

The `top` == -1 case and the function
`BN_rand_range`

() first appeared in OpenSSL 0.9.6a and
have been available since OpenBSD 3.0.