---
name: "RAND_DRBG_generate"
section: "3ssl"
platform: "linux"
package: "libssl-doc"
version: "1.1.1w-0+deb11u1"
release: "Debian 11 (Bullseye)"
platforms: ["linux"]
url: "https://new.carta.tech/RAND_DRBG_generate"
---

# RAND\_DRBG\_generate(3ssl)

generate random bytes using the given drbg instance

## NAME

RAND\_DRBG\_generate, RAND\_DRBG\_bytes - generate random bytes using the given drbg instance

## SYNOPSIS

```
 #include <openssl/rand_drbg.h>
 int RAND_DRBG_generate(RAND_DRBG *drbg,
                        unsigned char *out, size_t outlen,
                        int prediction_resistance,
                        const unsigned char *adin, size_t adinlen);
 int RAND_DRBG_bytes(RAND_DRBG *drbg,
                     unsigned char *out, size_t outlen);
```

## DESCRIPTION

**RAND\_DRBG\_generate()** generates **outlen** random bytes using the given DRBG instance **drbg** and stores them in the buffer at **out**.

Before generating the output, the DRBG instance checks whether the maximum number of generate requests (*reseed interval*) or the maximum timespan (*reseed time interval*) since its last seeding have been reached. If this is the case, the DRBG reseeds automatically. Additionally, an immediate reseeding can be requested by setting the **prediction\_resistance** flag to 1. See NOTES section for more details.

The caller can optionally provide additional data to be used for reseeding by passing a pointer **adin** to a buffer of length **adinlen**. This additional data is mixed into the internal state of the random generator but does not contribute to the entropy count. The additional data can be omitted by setting **adin** to NULL and **adinlen** to 0;

**RAND\_DRBG\_bytes()** generates **outlen** random bytes using the given DRBG instance **drbg** and stores them in the buffer at **out**. This function is a wrapper around the **RAND\_DRBG\_generate()** call, which collects some additional data from low entropy sources (e.g., a high resolution timer) and calls RAND\_DRBG\_generate(drbg, out, outlen, 0, adin, adinlen).

## RETURN VALUES

**RAND\_DRBG\_generate()** and **RAND\_DRBG\_bytes()** return 1 on success, and 0 on failure.

## NOTES

The *reseed interval* and *reseed time interval* of the **drbg** are set to reasonable default values, which in general do not have to be adjusted. If necessary, they can be changed using **RAND\_DRBG\_set\_reseed\_interval**(3) and **RAND\_DRBG\_set\_reseed\_time\_interval**(3), respectively.

A request for prediction resistance can only be satisfied by pulling fresh entropy from one of the approved entropy sources listed in section 5.5.2 of \[NIST SP 800-90C\]. Since the default DRBG implementation does not have access to such an approved entropy source, a request for prediction resistance will always fail. In other words, prediction resistance is currently not supported yet by the DRBG.

## SEE ALSO

**RAND\_bytes**(3), **RAND\_DRBG\_set\_reseed\_interval**(3), **RAND\_DRBG\_set\_reseed\_time\_interval**(3), **RAND\_DRBG**(7)

## HISTORY

The RAND\_DRBG functions were added in OpenSSL 1.1.1.

## COPYRIGHT

Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License").  You may not use this file except in compliance with the License.  You can obtain a copy in the file LICENSE in the source distribution or at \<https://www.openssl.org/source/license.html\>.
