Annotate

util-src/crand.c @ 8448:f516a52f19e8

util.crand: Make it possible to use arc4random on Linux (needs libbsd)
author Kim Alvefur <zash@zash.se>
date Sun, 03 Dec 2017 15:21:12 +0100
parent 8447:200f4f1b7833
child 8449:b572a708fd41
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 /* Prosody IM
7829
1fb477d19fdd util.crand: Update copyright header
Kim Alvefur <zash@zash.se>
parents: 7826
diff changeset
2 -- Copyright (C) 2008-2017 Matthew Wild
1fb477d19fdd util.crand: Update copyright header
Kim Alvefur <zash@zash.se>
parents: 7826
diff changeset
3 -- Copyright (C) 2008-2017 Waqas Hussain
1fb477d19fdd util.crand: Update copyright header
Kim Alvefur <zash@zash.se>
parents: 7826
diff changeset
4 -- Copyright (C) 2016-2017 Kim Alvefur
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 --
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 -- This project is MIT/X11 licensed. Please see the
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 -- COPYING file in the source package for more information.
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 --
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 */
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 /*
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 * crand.c
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 * C PRNG interface
7830
b9910a507250 util.crand: Add comment describing purpose of module
Kim Alvefur <zash@zash.se>
parents: 7829
diff changeset
14 *
b9910a507250 util.crand: Add comment describing purpose of module
Kim Alvefur <zash@zash.se>
parents: 7829
diff changeset
15 * The purpose of this module is to provide access to a PRNG in
b9910a507250 util.crand: Add comment describing purpose of module
Kim Alvefur <zash@zash.se>
parents: 7829
diff changeset
16 * environments without /dev/urandom
b9910a507250 util.crand: Add comment describing purpose of module
Kim Alvefur <zash@zash.se>
parents: 7829
diff changeset
17 *
b9910a507250 util.crand: Add comment describing purpose of module
Kim Alvefur <zash@zash.se>
parents: 7829
diff changeset
18 * Caution! This has not been extensively tested.
b9910a507250 util.crand: Add comment describing purpose of module
Kim Alvefur <zash@zash.se>
parents: 7829
diff changeset
19 *
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 */
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7918
diff changeset
22 #define _DEFAULT_SOURCE
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7918
diff changeset
23
8422
6eecf82ccd8e util.crand: Always include stdlib to be sure __GLIBC_PREREQ is defined
Kim Alvefur <zash@zash.se>
parents: 8127
diff changeset
24 #include <stdlib.h>
8423
65c82a7d0537 util.crand: Reorder includes so system ones are first
Kim Alvefur <zash@zash.se>
parents: 8422
diff changeset
25 #include <string.h>
65c82a7d0537 util.crand: Reorder includes so system ones are first
Kim Alvefur <zash@zash.se>
parents: 8422
diff changeset
26 #include <errno.h>
8422
6eecf82ccd8e util.crand: Always include stdlib to be sure __GLIBC_PREREQ is defined
Kim Alvefur <zash@zash.se>
parents: 8127
diff changeset
27
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 #include "lualib.h"
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 #include "lauxlib.h"
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 #if defined(WITH_GETRANDOM)
7934
485b9e66fedf util.crand: Only include getrandom shiv with glibc older than 2.25
Kim Alvefur <zash@zash.se>
parents: 7933
diff changeset
32
8127
3e443d6791e6 util.crand: Build with musl/non-glibc (can't have undefined argument-taking macros?)
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
33 #ifndef __GLIBC_PREREQ
8425
91c220f43826 util.crand: Add comments about defines
Kim Alvefur <zash@zash.se>
parents: 8424
diff changeset
34 /* Not compiled with glibc at all */
8127
3e443d6791e6 util.crand: Build with musl/non-glibc (can't have undefined argument-taking macros?)
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
35 #define __GLIBC_PREREQ(a,b) 0
3e443d6791e6 util.crand: Build with musl/non-glibc (can't have undefined argument-taking macros?)
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
36 #endif
3e443d6791e6 util.crand: Build with musl/non-glibc (can't have undefined argument-taking macros?)
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
37
7934
485b9e66fedf util.crand: Only include getrandom shiv with glibc older than 2.25
Kim Alvefur <zash@zash.se>
parents: 7933
diff changeset
38 #if ! __GLIBC_PREREQ(2,25)
8425
91c220f43826 util.crand: Add comments about defines
Kim Alvefur <zash@zash.se>
parents: 8424
diff changeset
39 /* Not compiled with a glibc that provides getrandom() */
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 #include <unistd.h>
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 #include <sys/syscall.h>
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 #ifndef SYS_getrandom
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 #error getrandom() requires Linux 3.17 or later
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 #endif
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
7934
485b9e66fedf util.crand: Only include getrandom shiv with glibc older than 2.25
Kim Alvefur <zash@zash.se>
parents: 7933
diff changeset
47 /* This wasn't present before glibc 2.25 */
7933
c91ec7689424 util.crand: Change argumen names to match some man page
Kim Alvefur <zash@zash.se>
parents: 7932
diff changeset
48 int getrandom(void *buf, size_t buflen, unsigned int flags) {
c91ec7689424 util.crand: Change argumen names to match some man page
Kim Alvefur <zash@zash.se>
parents: 7932
diff changeset
49 return syscall(SYS_getrandom, buf, buflen, flags);
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 }
7934
485b9e66fedf util.crand: Only include getrandom shiv with glibc older than 2.25
Kim Alvefur <zash@zash.se>
parents: 7933
diff changeset
51 #else
485b9e66fedf util.crand: Only include getrandom shiv with glibc older than 2.25
Kim Alvefur <zash@zash.se>
parents: 7933
diff changeset
52 #include <sys/random.h>
485b9e66fedf util.crand: Only include getrandom shiv with glibc older than 2.25
Kim Alvefur <zash@zash.se>
parents: 7933
diff changeset
53 #endif
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 #elif defined(WITH_OPENSSL)
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 #include <openssl/rand.h>
8448
f516a52f19e8 util.crand: Make it possible to use arc4random on Linux (needs libbsd)
Kim Alvefur <zash@zash.se>
parents: 8447
diff changeset
57 #elif defined(WITH_ARC4RANDOM)
f516a52f19e8 util.crand: Make it possible to use arc4random on Linux (needs libbsd)
Kim Alvefur <zash@zash.se>
parents: 8447
diff changeset
58 #ifdef __linux__
f516a52f19e8 util.crand: Make it possible to use arc4random on Linux (needs libbsd)
Kim Alvefur <zash@zash.se>
parents: 8447
diff changeset
59 #include <bsd/stdlib.h>
f516a52f19e8 util.crand: Make it possible to use arc4random on Linux (needs libbsd)
Kim Alvefur <zash@zash.se>
parents: 8447
diff changeset
60 #endif
f516a52f19e8 util.crand: Make it possible to use arc4random on Linux (needs libbsd)
Kim Alvefur <zash@zash.se>
parents: 8447
diff changeset
61 #else
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 #error util.crand compiled without a random source
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 #endif
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64
8447
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
65 #ifndef SMALLBUFSIZ
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
66 #define SMALLBUFSIZ 32
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
67 #endif
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
68
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 int Lrandom(lua_State *L) {
8447
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
70 char smallbuf[SMALLBUFSIZ];
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
71 char *buf = &smallbuf[0];
8446
a72898dde1a0 util.crand: Remove unneeded cast
Kim Alvefur <zash@zash.se>
parents: 8445
diff changeset
72 const size_t len = luaL_checkinteger(L, 1);
8447
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
73
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
74 if(len > SMALLBUFSIZ) {
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
75 buf = lua_newuserdata(L, len);
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
76 }
200f4f1b7833 util.crand: Use a small buffer on the stack for small pieces of random, should be faster
Kim Alvefur <zash@zash.se>
parents: 8446
diff changeset
77
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 #if defined(WITH_GETRANDOM)
7932
6c5e4f24b51e util.crand: Move comment block
Kim Alvefur <zash@zash.se>
parents: 7931
diff changeset
80 /*
6c5e4f24b51e util.crand: Move comment block
Kim Alvefur <zash@zash.se>
parents: 7931
diff changeset
81 * This acts like a read from /dev/urandom with the exception that it
6c5e4f24b51e util.crand: Move comment block
Kim Alvefur <zash@zash.se>
parents: 7931
diff changeset
82 * *does* block if the entropy pool is not yet initialized.
6c5e4f24b51e util.crand: Move comment block
Kim Alvefur <zash@zash.se>
parents: 7931
diff changeset
83 */
8443
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
84 int left = len;
8444
adb079840714 util.crand: Only keep return value of getrandom() as the others don't return partial results
Kim Alvefur <zash@zash.se>
parents: 8443
diff changeset
85 char *p = buf;
8443
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
86
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
87 do {
8444
adb079840714 util.crand: Only keep return value of getrandom() as the others don't return partial results
Kim Alvefur <zash@zash.se>
parents: 8443
diff changeset
88 int ret = getrandom(p, left, 0);
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89
8443
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
90 if(ret < 0) {
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
91 lua_pushstring(L, strerror(errno));
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
92 return lua_error(L);
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
93 }
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
94
8444
adb079840714 util.crand: Only keep return value of getrandom() as the others don't return partial results
Kim Alvefur <zash@zash.se>
parents: 8443
diff changeset
95 p += ret;
8443
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
96 left -= ret;
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
97 } while(left > 0);
980885ba062c util.crand: Try getrandom() again until buffer is filled
Kim Alvefur <zash@zash.se>
parents: 8425
diff changeset
98
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 #elif defined(WITH_ARC4RANDOM)
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 arc4random_buf(buf, len);
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
101 #elif defined(WITH_OPENSSL)
8424
b0a267f77d9e util.crand: Apply formatter
Kim Alvefur <zash@zash.se>
parents: 8423
diff changeset
102
7915
e3d3ebd417f4 util.crand: Throw error if OpenSSLs RNG is not seeded
Kim Alvefur <zash@zash.se>
parents: 7832
diff changeset
103 if(!RAND_status()) {
e3d3ebd417f4 util.crand: Throw error if OpenSSLs RNG is not seeded
Kim Alvefur <zash@zash.se>
parents: 7832
diff changeset
104 lua_pushliteral(L, "OpenSSL PRNG not seeded");
7918
12e5a54907b6 util.crand: Clarify that lua_error does not return
Kim Alvefur <zash@zash.se>
parents: 7915
diff changeset
105 return lua_error(L);
7915
e3d3ebd417f4 util.crand: Throw error if OpenSSLs RNG is not seeded
Kim Alvefur <zash@zash.se>
parents: 7832
diff changeset
106 }
e3d3ebd417f4 util.crand: Throw error if OpenSSLs RNG is not seeded
Kim Alvefur <zash@zash.se>
parents: 7832
diff changeset
107
8445
2d3a3d12ec87 util.crand: Silence signedness warning
Kim Alvefur <zash@zash.se>
parents: 8444
diff changeset
108 if(RAND_bytes((unsigned char *)buf, len) != 1) {
7832
d02ef0ae94af util.crand: TODOs
Kim Alvefur <zash@zash.se>
parents: 7831
diff changeset
109 /* TODO ERR_get_error() */
7826
7702ce682427 util.crand: Raise hard errors
Kim Alvefur <zash@zash.se>
parents: 7825
diff changeset
110 lua_pushstring(L, "RAND_bytes() failed");
7702ce682427 util.crand: Raise hard errors
Kim Alvefur <zash@zash.se>
parents: 7825
diff changeset
111 return lua_error(L);
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
112 }
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
113
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
114 #endif
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
115
8444
adb079840714 util.crand: Only keep return value of getrandom() as the others don't return partial results
Kim Alvefur <zash@zash.se>
parents: 8443
diff changeset
116 lua_pushlstring(L, buf, len);
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
117 return 1;
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
118 }
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
119
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 int luaopen_util_crand(lua_State *L) {
7818
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 7439
diff changeset
121 #if (LUA_VERSION_NUM > 501)
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 7439
diff changeset
122 luaL_checkversion(L);
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 7439
diff changeset
123 #endif
7915
e3d3ebd417f4 util.crand: Throw error if OpenSSLs RNG is not seeded
Kim Alvefur <zash@zash.se>
parents: 7832
diff changeset
124
7969
1c6a07606309 util-src: Specify size of various tables to be allocated
Kim Alvefur <zash@zash.se>
parents: 7934
diff changeset
125 lua_createtable(L, 0, 2);
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
126 lua_pushcfunction(L, Lrandom);
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
127 lua_setfield(L, -2, "bytes");
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
128
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
129 #if defined(WITH_GETRANDOM)
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
130 lua_pushstring(L, "Linux");
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131 #elif defined(WITH_ARC4RANDOM)
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 lua_pushstring(L, "arc4random()");
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133 #elif defined(WITH_OPENSSL)
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134 lua_pushstring(L, "OpenSSL");
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
135 #endif
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
136 lua_setfield(L, -2, "_source");
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138 return 1;
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 }
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140