# HG changeset patch # User Myhailo Danylenko # Date 1350234832 -10800 # Node ID 89841bd3db8c00ff2c092bbe5aef06c1e0439b1e # Parent 067712fb29f668ec724c7c33c5578bbf77b58bc9 [examples] Add pure-lua base64 implementation diff -r 067712fb29f6 -r 89841bd3db8c examples/base64.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/base64.lua Sun Oct 14 20:13:52 2012 +0300 @@ -0,0 +1,44 @@ +#!/usr/bin/env lua +-- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss +-- licensed under the terms of the LGPL2 +-- http://lua-users.org/wiki/BaseSixtyFour + +-- character table string +local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + +-- encoding +local function enc(data) + return ((data:gsub('.', function(x) + local r,b='',x:byte() + for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end + return r; + end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) + if (#x < 6) then return '' end + local c=0 + for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end + return b:sub(c+1,c+1) + end)..({ '', '==', '=' })[#data%3+1]) +end + +-- decoding +local function dec(data) + data = string.gsub(data, '[^'..b..'=]', '') + return (data:gsub('.', function(x) + if (x == '=') then return '' end + local r,f='',(b:find(x)-1) + for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end + return r; + end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) + if (#x ~= 8) then return '' end + local c=0 + for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end + return string.char(c) + end)) +end + +return { + encode = enc, + decode = dec, + } + +-- the end vim: se ts=4 sw=4: