---
name: "random_harvest"
section: "9"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/random_harvest"
---

# random\_harvest(9)

gather entropy from the kernel for the entropy device

## NAME

**random\_harvest** – gather entropy from the kernel for the entropy device

## SYNOPSIS

**#include \<sys/types.h\>**

**#include \<sys/random.h\>**

*void*\

**random\_harvest**(*void \*entropy*, *u\_int size*, *u\_int bits*, *u\_int frac*, *enum esource source*);

## DESCRIPTION

The **random\_harvest**() function is used by device drivers and other kernel processes to pass data that is considered (at least partially) stochastic to the entropy device.

The caller should pass a pointer (to no more than 16 bytes) of the “random” data in *entropy*. The argument *size* contains the number of bytes pointed to. The caller should *very conservatively* estimate the number of random bits in the sample, and pass this in *bits* or *frac*. If the estimated number of bits per sample is an integer, then *bits* is used, and *frac* is 0. Otherwise, for low-entropy samples, “fractional” entropy can be supplied in *frac*. (This is considered to be *frac*, */* 1024 bits of entropy.) The *source* is chosen from RANDOM\_WRITE, RANDOM\_KEYBOARD, RANDOM\_MOUSE, RANDOM\_NET and RANDOM\_INTERRUPT, and is used to indicate the source of the entropy.

Interrupt harvesting has been simplified for the kernel programmer. If a device driver registers an interrupt handler with [BUS\_SETUP\_INTR(9)](/BUS_SETUP_INTR/9.md) or [bus\_setup\_intr(9)](/bus_setup_intr/9.md), then it is only necessary to include the INTR\_ENTROPY bit in the *flags* argument to have that interrupt source be used for entropy harvesting.

## SEE ALSO

[random(4)](/random/4.md), [BUS\_SETUP\_INTR(9)](/BUS_SETUP_INTR/9.md)

## AUTHORS

The FreeBSD [random(4)](/random/4.md) entropy device and supporting documentation was written by Mark R V Murray.
