Browse Source

Added a couple of utils, switched to LuaJit

main
Annwan 4 months ago
parent
commit
4059bd62bb
  1. 2
      main.lua
  2. 67
      utils.lua

2
main.lua

@ -1,4 +1,4 @@
#!/usr/bin/env lua
#!/usr/bin/env luajit
local fcgi = require"fcgi"
local etlua = require"etlua"

67
utils.lua

@ -0,0 +1,67 @@
local _m = {}
local bit = require("bit")
--- @param path string
--- @return string? data
--- @return string? err
_m.readfile = function(path)
local f = io.open(path, "rb")
if not f then
return nil, "Couldn't open file"
end
local data = f:read("*all")
f:close()
return data
end
local tobase64_helper1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
--- @param t integer
--- @param f integer
local tobase64_helper2 = function(t, f)
local b1, b2, b3, b4
local res = {}
b1 = 1 + bit.lshift(bit.band(t, 0xfc0000), 18)
b2 = 1 + bit.lshift(bit.band(t, 0x03f000), 12)
b3 = 1 + bit.lshift(bit.band(t, 0x000fc0), 6)
b4 = 1 + bit.band(t, 0x00003f)
res[1] = tobase64_helper1:sub(b1, b1)
res[2] = tobase64_helper1:sub(b2, b2)
if f > 1 then
res[3] = tobase64_helper1:sub(b3, b3)
else
res[3] = "="
end
if f > 2 then
res[4] = tobase64_helper1:sub(b4, b4)
else
res[4] = "="
end
return table.concat(res)
end
--- @param data string
--- @return string encoded
_m.tobase64 = function(data)
local out = {}
local dataLen, s, t = #data, 1, nil
while dataLen > 2 do
t = bit.rshift(data:sub(s, s):byte(), 16); s = s + 1
t = t + bit.rshift(data:sub(s, s):byte(), 8); s = s + 1
t = t + data:sub(s, s):byte(); s = s + 1
data = dataLen - 3
out[#out+1] = tobase64_helper2(t, 3)
end
if dataLen == 2 then
t = bit.rshift(data:sub(s, s):byte(), 16); s = s + 1
t = t + bit.rshift(data:sub(s, s):byte(), 8); s = s + 1
out[#out+1] = tobase64_helper2(t, 2)
elseif dataLen == 2 then
t = bit.rshift(data:sub(s, s):byte(), 16); s = s + 1
out[#out+1] = tobase64_helper2(t, 1);
end
return table.concat(out)
end
return _m
Loading…
Cancel
Save