From 6f7542c1a98efa986f2bced6f98bd1b5b92bb9cf Mon Sep 17 00:00:00 2001 From: Luna Date: Wed, 24 Jun 2015 22:50:20 +0200 Subject: [PATCH] working lua impl. of base64 --- lua_modules/base64/base64_v2.lua | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 lua_modules/base64/base64_v2.lua diff --git a/lua_modules/base64/base64_v2.lua b/lua_modules/base64/base64_v2.lua new file mode 100644 index 00000000..f7fbd22f --- /dev/null +++ b/lua_modules/base64/base64_v2.lua @@ -0,0 +1,35 @@ +--this version actually works + +local tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +base64 = { + enc = function(data) + local l,out = 0,'' + local d = data..string.rep('\0',(3-data:len()%3)%3) + for i=1,d:len() do + l = bit.lshift(l,8) + l = l+d:byte(i,i) + if i%3==0 then + while l > 0 do + local a = bit.rshift(l,18)+1 + out = out..tab:sub(a,a) + l = bit.band(bit.lshift(l,6),0xFFFFFF) + end + end + end + return out..({'','==','='})[data:len()%3+1] + end, + dec = function(data) + local a,b = data:gsub('=','A') + local out = '' + local l = 0 + for i=1,a:len() do + l=l+tab:find(a:sub(i,i))-1 + if i%4==0 then + out=out..string.char(bit.rshift(l,16),bit.band(bit.rshift(l,8),255),bit.band(l,255)) + l=0 + end + l=bit.lshift(l,6) + end + return out:sub(1,-b-1) + end +}