1 .\" 2 .\" This file and its contents are supplied under the terms of the 3 .\" Common Development and Distribution License ("CDDL"), version 1.0. 4 .\" You may only use this file in accordance with the terms of version 5 .\" 1.0 of the CDDL. 6 .\" 7 .\" A full copy of the text of the CDDL should have accompanied this 8 .\" source. A copy of the CDDL is also available via the Internet at 9 .\" http://www.illumos.org/license/CDDL. 10 .\" 11 .\" 12 .\" Copyright 2018 Joyent, Inc. 13 .\" 14 .Dd "November 6, 2018" 15 .Dt GETRANDOM 2 16 .Os 17 .Sh NAME 18 .Nm getrandom 19 .Nd get random numbers 20 .Sh LIBRARY 21 .Lb libc 22 .Sh SYNOPSIS 23 .In sys/random.h 24 .Ft ssize_t 25 .Fo getrandom 26 .Fa "void *bufp" 27 .Fa "size_t buflen" 28 .Fa "unsigned int flags" 29 .Fc 30 .Sh DESCRIPTION 31 The 32 .Fn getrandom 33 function is used to retrieve random and pseudo-random numbers from the 34 operating system. 35 .Pp 36 By default, the 37 .Fn getrandom 38 function will read up to 39 .Fa buflen 40 bytes of pseudo-random data into 41 .Fa bufp . 42 Pseudo-random data will be retrieved from the same source that provides 43 data to 44 .Pa /dev/urandom . 45 The 46 .Fn getrandom 47 function may return less data than was requested in 48 .Fa buflen . 49 This can happen because of interrupts from signals, availability of 50 data, or because the request was too large. 51 Callers must always check to see how much data was actually returned. 52 .Pp 53 The following values may be bitwise-ORed together in the 54 .Fa flags 55 argument to modify the behavior of the function: 56 .Bl -tag -width Dv 57 .It Dv GRND_NONBLOCK 58 Instead of blocking, return immediately if data is not available. 59 If no data was obtained, 60 .Er EAGAIN 61 will be set in 62 .Va errno . 63 Otherwise, less data will be returned than requested. 64 .It Dv GRND_RANDOM 65 Use the same source of random data as reading from 66 .Pa /dev/random , 67 instead of 68 .Pa /dev/urandom . 69 .El 70 .Pp 71 The 72 .Fn getrandom 73 function is intended to eliminate the need to explicitly call 74 .Xr open 2 75 and 76 .Xr read 2 77 on 78 .Pa /dev/random 79 or 80 .Pa /dev/urandom . 81 This eliminates the need to have the character devices available or 82 cases where a program may not have an available file descriptor. 83 For other uses, 84 .Xr arc4random 3C 85 may be a better interface. 86 .Sh RETURN VALUES 87 Upon successful completion, the 88 .Fn getrandom 89 function returns the number of bytes written into 90 .Fa bufp . 91 Otherwise, 92 .Sy -1 93 is returned and 94 .Va errno 95 is set to indicate the error. 96 .Sh ERRORS 97 The 98 .Fn getrandom 99 function will fail if: 100 .Bl -tag -width Er 101 .It Er EAGAIN 102 The 103 .Fn getrandom 104 function would have blocked and 105 .Dv GRND_NONBLOCK 106 flag was set. 107 .It Er EFAULT 108 The 109 .Fa bufp 110 argument points to an illegal address. 111 .It Er EINAVL 112 An invalid value was passed in 113 .Fa flags . 114 .It Er EINTR 115 A signal was caught during the operation and no data was transferred. 116 .It Er EIO 117 An internal error occurred with the corresponding 118 .Xr random 7D 119 device. 120 .El 121 .Sh INTERFACE STABILITY 122 .Sy Committed 123 .Sh MT-LEVEL 124 .Sy MT-Safe 125 .Sh SEE ALSO 126 .Xr open 2 , 127 .Xr read 2 , 128 .Xr arc4random 3C , 129 .Xr random 7D 130 .Sh STANDARDS 131 .Fn getrandom 132 is non-standard. 133 It originally appeared in Linux.