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_pushlstring(L, output, out_len);
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);
60 lua_pushlstring(L,
"", 0);
63 char *output =
SCCalloc(input_len,
sizeof(
char));
65 return luaL_error(L,
"malloc");
67 uint32_t n = SCBase64Decode((uint8_t *)input, (uintptr_t)input_len, mode, (uint8_t *)output);
70 return luaL_error(L,
"base64 decoding failed");
75 lua_pushlstring(L, output, n);
81 static int LuaBase64DecodeStandard(
lua_State *L)
83 return LuaBase64Decode(L, SCBase64ModeStrict);
86 static int LuaBase64DecodeStandardNoPad(
lua_State *L)
88 return LuaBase64Decode(L, SCBase64ModeNoPad);
91 static int LuaBase64DecodeStandardPadOpt(
lua_State *L)
93 return LuaBase64Decode(L, SCBase64ModePadOpt);
96 static int LuaBase64DecodeRFC2045(
lua_State *L)
98 return LuaBase64Decode(L, SCBase64ModeRFC2045);
101 static int LuaBase64DecodeRFC4648(
lua_State *L)
103 return LuaBase64Decode(L, SCBase64ModeRFC4648);
106 static const struct luaL_Reg base64lib[] = {
108 {
"encode", LuaBase64EncodeStandard },
109 {
"encode_nopad", LuaBase64EncodeStandardNoPad },
110 {
"decode", LuaBase64DecodeStandard },
111 {
"decode_nopad", LuaBase64DecodeStandardNoPad },
112 {
"decode_padopt", LuaBase64DecodeStandardPadOpt },
113 {
"decode_rfc2045", LuaBase64DecodeRFC2045 },
114 {
"decode_rfc4648", LuaBase64DecodeRFC4648 },
121 luaL_newlib(L, base64lib);