19d12795fSRobert Mustacchi /* 29d12795fSRobert Mustacchi * This file and its contents are supplied under the terms of the 39d12795fSRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 49d12795fSRobert Mustacchi * You may only use this file in accordance with the terms of version 59d12795fSRobert Mustacchi * 1.0 of the CDDL. 69d12795fSRobert Mustacchi * 79d12795fSRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 89d12795fSRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 99d12795fSRobert Mustacchi * http://www.illumos.org/license/CDDL. 109d12795fSRobert Mustacchi */ 119d12795fSRobert Mustacchi 129d12795fSRobert Mustacchi /* 13*de6af22aSJason King * Copyright (c) 2018, Joyent, Inc. 149d12795fSRobert Mustacchi */ 159d12795fSRobert Mustacchi 169d12795fSRobert Mustacchi /* 179d12795fSRobert Mustacchi * getentropy(3C) is an OpenBSD compatible wrapper around getrandom(2). 189d12795fSRobert Mustacchi */ 199d12795fSRobert Mustacchi 209d12795fSRobert Mustacchi #include <errno.h> 219d12795fSRobert Mustacchi #include <sys/random.h> 229d12795fSRobert Mustacchi 239d12795fSRobert Mustacchi int getentropy(void * buf,size_t buflen)249d12795fSRobert Mustacchigetentropy(void *buf, size_t buflen) 259d12795fSRobert Mustacchi { 26*de6af22aSJason King ssize_t ret; 279d12795fSRobert Mustacchi 289d12795fSRobert Mustacchi if (buflen > 256) { 299d12795fSRobert Mustacchi errno = EIO; 309d12795fSRobert Mustacchi return (-1); 319d12795fSRobert Mustacchi } 329d12795fSRobert Mustacchi 339d12795fSRobert Mustacchi ret = getrandom(buf, buflen, 0); 349d12795fSRobert Mustacchi if (ret == -1 || ret != buflen) { 359d12795fSRobert Mustacchi if (errno != EFAULT) 369d12795fSRobert Mustacchi errno = EIO; 379d12795fSRobert Mustacchi return (-1); 389d12795fSRobert Mustacchi } 399d12795fSRobert Mustacchi 409d12795fSRobert Mustacchi return (0); 419d12795fSRobert Mustacchi } 42