24 static int LuaBase64Encode(
lua_State *L, SCBase64Mode mode)
27 const char *input = luaL_checklstring(L, 1, &input_len);
28 size_t out_len = SCBase64EncodeBufferSize(input_len);
29 char *output =
SCCalloc(out_len + 1,
sizeof(
char));
31 return luaL_error(L,
"malloc");
33 if (SCBase64EncodeWithMode((uint8_t *)input, (
unsigned long)input_len, (u_char *)output,
34 (
unsigned long *)&out_len, mode) != 0) {
36 return luaL_error(L,
"base64 encoding failed");
38 lua_pushstring(L, (
const char *)output);
44 static int LuaBase64EncodeStandard(
lua_State *L)
46 return LuaBase64Encode(L, SCBase64ModeStrict);
49 static int LuaBase64EncodeStandardNoPad(
lua_State *L)
51 return LuaBase64Encode(L, SCBase64ModeNoPad);
54 static int LuaBase64Decode(
lua_State *L, SCBase64Mode mode)
57 const char *input = luaL_checklstring(L, 1, &input_len);
58 char *output =
SCCalloc(input_len,
sizeof(
char));
60 return luaL_error(L,
"malloc");
62 uint32_t n = SCBase64Decode((uint8_t *)input, (uintptr_t)input_len, mode, (uint8_t *)output);
65 return luaL_error(L,
"base64 decoding failed");
69 lua_pushstring(L, (
const char *)output);
75 static int LuaBase64DecodeStandard(
lua_State *L)
77 return LuaBase64Decode(L, SCBase64ModeStrict);
80 static int LuaBase64DecodeStandardNoPad(
lua_State *L)
82 return LuaBase64Decode(L, SCBase64ModeNoPad);
85 static int LuaBase64DecodeStandardPadOpt(
lua_State *L)
87 return LuaBase64Decode(L, SCBase64ModePadOpt);
90 static int LuaBase64DecodeRFC2045(
lua_State *L)
92 return LuaBase64Decode(L, SCBase64ModeRFC2045);
95 static int LuaBase64DecodeRFC4648(
lua_State *L)
97 return LuaBase64Decode(L, SCBase64ModeRFC4648);
100 static const struct luaL_Reg base64lib[] = {
102 {
"encode", LuaBase64EncodeStandard },
103 {
"encode_nopad", LuaBase64EncodeStandardNoPad },
104 {
"decode", LuaBase64DecodeStandard },
105 {
"decode_nopad", LuaBase64DecodeStandardNoPad },
106 {
"decode_padopt", LuaBase64DecodeStandardPadOpt },
107 {
"decode_rfc2045", LuaBase64DecodeRFC2045 },
108 {
"decode_rfc4648", LuaBase64DecodeRFC4648 },
115 luaL_newlib(L, base64lib);