1*28f17cb2SRobert Mustacchi /* 2*28f17cb2SRobert Mustacchi * This file and its contents are supplied under the terms of the 3*28f17cb2SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*28f17cb2SRobert Mustacchi * You may only use this file in accordance with the terms of version 5*28f17cb2SRobert Mustacchi * 1.0 of the CDDL. 6*28f17cb2SRobert Mustacchi * 7*28f17cb2SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*28f17cb2SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*28f17cb2SRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*28f17cb2SRobert Mustacchi */ 11*28f17cb2SRobert Mustacchi 12*28f17cb2SRobert Mustacchi /* 13*28f17cb2SRobert Mustacchi * Copyright (c) 2015, Joyent, Inc. 14*28f17cb2SRobert Mustacchi */ 15*28f17cb2SRobert Mustacchi 16*28f17cb2SRobert Mustacchi /* 17*28f17cb2SRobert Mustacchi * getentropy(3C) is an OpenBSD compatible wrapper around getrandom(2). 18*28f17cb2SRobert Mustacchi */ 19*28f17cb2SRobert Mustacchi 20*28f17cb2SRobert Mustacchi #include <errno.h> 21*28f17cb2SRobert Mustacchi #include <sys/random.h> 22*28f17cb2SRobert Mustacchi 23*28f17cb2SRobert Mustacchi int getentropy(void * buf,size_t buflen)24*28f17cb2SRobert Mustacchigetentropy(void *buf, size_t buflen) 25*28f17cb2SRobert Mustacchi { 26*28f17cb2SRobert Mustacchi int ret; 27*28f17cb2SRobert Mustacchi 28*28f17cb2SRobert Mustacchi if (buflen > 256) { 29*28f17cb2SRobert Mustacchi errno = EIO; 30*28f17cb2SRobert Mustacchi return (-1); 31*28f17cb2SRobert Mustacchi } 32*28f17cb2SRobert Mustacchi 33*28f17cb2SRobert Mustacchi ret = getrandom(buf, buflen, 0); 34*28f17cb2SRobert Mustacchi if (ret == -1 || ret != buflen) { 35*28f17cb2SRobert Mustacchi if (errno != EFAULT) 36*28f17cb2SRobert Mustacchi errno = EIO; 37*28f17cb2SRobert Mustacchi return (-1); 38*28f17cb2SRobert Mustacchi } 39*28f17cb2SRobert Mustacchi 40*28f17cb2SRobert Mustacchi return (0); 41*28f17cb2SRobert Mustacchi } 42