Skip to content
BSD syscall#500

svc · unix #500

getentropy

Fills a buffer with up to 256 bytes of high-quality random data from the kernel CSPRNG.

Prototype

int getentropy(void *buffer, size_t size);

Returns: int

Arguments

NameTypeDirDescription
buffervoid-
sizesize_t-

Version history

XNU tagmacOS#
xnu-3789.1.32macOS 10.12 Sierra500
xnu-4570.1.46macOS 10.13 High Sierra500
xnu-4903.221.2macOS 10.14 Mojave500
xnu-6153.11.26macOS 10.15 Catalina500
xnu-7195.50.7.100.1macOS 11.0 Big Sur500
xnu-8019.41.5macOS 12.0 Monterey500
xnu-8792.41.9macOS 13.0 Ventura500
xnu-10002.1.13macOS 14.0 Sonoma500
xnu-11215.1.10macOS 15.0 Sequoia500
xnu-11417.101.15macOS 15.4 Sequoia500
xnu-12377.1.9macOS 26.0 Tahoe500
xnu-10002.41.9—500
xnu-10002.61.3—500
xnu-10002.81.5—500
xnu-10063.101.15—500
xnu-10063.121.3—500
xnu-10063.141.1—500
xnu-11215.41.3—500
xnu-11215.61.5—500
xnu-11215.81.4—500
xnu-11417.121.6—500
xnu-11417.140.69—500
xnu-12377.101.15—500
xnu-12377.41.6—500
xnu-12377.61.12—500
xnu-12377.81.4—500
xnu-3789.21.4—500
xnu-3789.31.2—500
xnu-3789.41.3—500
xnu-3789.51.2—500
xnu-3789.60.24—500
xnu-3789.70.16—500
xnu-4570.20.62—500
xnu-4570.31.3—500
xnu-4570.41.2—500
xnu-4570.51.1—500
xnu-4570.61.1—500
xnu-4570.71.2—500
xnu-4903.231.4—500
xnu-4903.241.1—500
xnu-4903.270.47—500
xnu-6153.101.6—500
xnu-6153.121.1—500
xnu-6153.141.1—500
xnu-6153.41.3—500
xnu-6153.61.1—500
xnu-6153.81.5—500
xnu-7195.101.1—500
xnu-7195.121.3—500
xnu-7195.141.2—500
xnu-7195.60.75—500
xnu-7195.81.3—500
xnu-8019.61.5—500
xnu-8019.80.24—500
xnu-8020.101.4—500
xnu-8020.121.3—500
xnu-8020.140.41—500
xnu-8792.61.2—500
xnu-8792.81.2—500
xnu-8796.101.5—500
xnu-8796.121.2—500
xnu-8796.141.3—500

Examples

Generate a 32-byte key

#include <sys/random.h>

unsigned char key[32];
if (getentropy(key, sizeof key) != 0) {
    perror("getentropy");
}

Notes

Backed by the macOS kernel's Fortuna-based RNG seeded from hardware entropy sources (SEP on Apple Silicon, RDRAND or boot entropy on Intel). Cannot fail under normal conditions and never blocks; the only EFAULT/EINVAL paths are bad buffer pointers or sizes >256. This is the recommended primitive for keys, nonces, and tokens — preferred over /dev/random.

Related APIs

gethostuuidgettimeofdaygetpid