Add GetRandomBytes to redbean Lua (#244)

This commit is contained in:
Paul Kulchenko 2021-08-16 12:12:29 -07:00 committed by GitHub
parent 5029e20bef
commit 916f19eea1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 1 deletions

View file

@ -698,6 +698,10 @@ FUNCTIONS
Returns the request HTTP protocol version, which can be 9 for Returns the request HTTP protocol version, which can be 9 for
HTTP/0.9, 10 for HTTP/1.0, or 11 for HTTP/1.1. HTTP/0.9, 10 for HTTP/1.0, or 11 for HTTP/1.1.
GetRandomBytes([length:int]) → str
Returns string with the specified number of random bytes (1..256).
If no length is specified, then the string of length 16 is returned.
GetRedbeanVersion() → int GetRedbeanVersion() → int
Returns the Redbean version in the format 0xMMmmpp, with major (MM), Returns the Redbean version in the format 0xMMmmpp, with major (MM),
minor (mm), and patch (pp) versions encoded. The version value 1.4 minor (mm), and patch (pp) versions encoded. The version value 1.4
@ -850,7 +854,7 @@ FUNCTIONS
If this option is programmed then redbean will not transmit a If this option is programmed then redbean will not transmit a
Server Name Indicator (SNI) when performing Fetch() requests. Server Name Indicator (SNI) when performing Fetch() requests.
ProgramSslPresharedKey(key:str, identity:str) ProgramSslPresharedKey(key:str,identity:str)
This function can be used to enable the PSK ciphersuites This function can be used to enable the PSK ciphersuites
which simplify SSL and enhance its performance in controlled which simplify SSL and enhance its performance in controlled
environments. `key` may contain 1..32 bytes of random binary environments. `key` may contain 1..32 bytes of random binary

View file

@ -4471,6 +4471,21 @@ static int LuaSha512(lua_State *L) {
return LuaHasher(L, 64, mbedtls_sha512_ret_512); return LuaHasher(L, 64, mbedtls_sha512_ret_512);
} }
static int LuaGetRandomBytes(lua_State *L) {
char *p;
size_t n = luaL_optinteger(L, 1, 16);
if (!(n > 0 && n <= 256)) {
luaL_argerror(L, 1, "not in range 1..256");
unreachable;
}
p = malloc(n);
CHECK_EQ(n, getrandom(p, n, 0));
lua_pushlstring(L, p, n);
free(p);
return 1;
}
static int LuaGetHttpReason(lua_State *L) { static int LuaGetHttpReason(lua_State *L) {
lua_pushstring(L, GetHttpReason(luaL_checkinteger(L, 1))); lua_pushstring(L, GetHttpReason(luaL_checkinteger(L, 1)));
return 1; return 1;
@ -5153,6 +5168,7 @@ static const luaL_Reg kLuaFuncs[] = {
{"GetPath", LuaGetPath}, // {"GetPath", LuaGetPath}, //
{"GetPayload", LuaGetPayload}, // {"GetPayload", LuaGetPayload}, //
{"GetPort", LuaGetPort}, // {"GetPort", LuaGetPort}, //
{"GetRandomBytes", LuaGetRandomBytes}, //
{"GetRedbeanVersion", LuaGetRedbeanVersion}, // {"GetRedbeanVersion", LuaGetRedbeanVersion}, //
{"GetRemoteAddr", LuaGetRemoteAddr}, // {"GetRemoteAddr", LuaGetRemoteAddr}, //
{"GetScheme", LuaGetScheme}, // {"GetScheme", LuaGetScheme}, //