blob: 4f9a9672e52c50c97e9af5c21b0a701ce41778c6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
local alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
-- really bad
local function encode(s)
local x = 0
local n = 0
local out = {}
local outn = 1
local pad = ""
local function si(v, m) x = (x << m) | v; n = n + m end
local function so(m)
local rem = n - m
local res = x >> rem
x = x & ((1 << rem) - 1)
n = n - m
return res
end
local function o()
while n >= 6 do
local i = so(6)+1
out[outn] = alphabet:sub(i,i)
outn = outn + 1
end
end
for i = 1, #s do
si(s:byte(i), 8)
o()
end
if n > 0 then
local on = n
si(0, 6-n)
o()
pad = ('='):rep(3-on/2) -- bad
end
return table.concat(out)..pad
end
return {encode=encode}
|