Functional Base64 prior to cleanup

This commit is contained in:
Marcos Kirsch 2015-02-07 12:12:48 -06:00
parent 1c709b838b
commit b1f87f3ffa

33
b64.lua
View File

@ -108,6 +108,34 @@ function enc(data)
return result return result
end end
local function toBase64Byte(char)
ascii = string.byte(char, 1)
if ascii >= string.byte('A', 1) and ascii <= string.byte('Z', 1) then
return ascii - string.byte('A', 1)
elseif ascii >= string.byte('a', 1) and ascii <= string.byte('z', 1) then
return ascii - string.byte('a', 1) + 26
elseif ascii >= string.byte('0', 1) and ascii <= string.byte('9', 1) then
return ascii + 4
elseif ascii == string.byte('-', 1) then
return 62
elseif ascii == string.byte('_', 1) then
return 63
elseif ascii == string.byte('=', 1) then
return nil
else
return "ERROR! Char is invalid for Base64 encoding: "..char
end
end
print(toBase64Byte('A'))
print(toBase64Byte('B'))
print(toBase64Byte('C'))
print(toBase64Byte('D'))
print(toBase64Byte('a'))
print(toBase64Byte('b'))
print(toBase64Byte('c'))
print(toBase64Byte('d'))
-- decryption table -- decryption table
local base64bytes = { local base64bytes = {
['A']=0, ['A']=0,
@ -183,8 +211,9 @@ function dec(data)
local chars = {} local chars = {}
local result="" local result=""
for dpos=0,string.len(data)-1,4 do for dpos=0,string.len(data)-1,4 do
for char=1,4 do chars[char] = base64bytes[(string.sub(data,(dpos+char),(dpos+char)) or "=")] end -- for char=1,4 do chars[char] = base64bytes[(string.sub(data,(dpos+char),(dpos+char)) or "=")] end
result = string.format( for char=1,4 do chars[char] = toBase64Byte((string.sub(data,(dpos+char),(dpos+char)) or "=")) end
result = string.format(
'%s%s%s%s', '%s%s%s%s',
result, result,
string.char(lor(lsh(chars[1],2), rsh(chars[2],4))), string.char(lor(lsh(chars[1],2), rsh(chars[2],4))),