Permalink
Browse files

Fix serialisation, now it works by base64

  • Loading branch information...
1 parent 57d6bf1 commit 13f1ee0bb6b2965cc5e412785af354e4fa26918e leon-dis committed Mar 15, 2011
Showing with 62 additions and 2 deletions.
  1. +51 −0 bin/base64.lua
  2. +11 −2 bin/shell-env.lua
View
@@ -0,0 +1,51 @@
+#!/usr/bin/env lua
+-- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss <alexthkloss@web.de>
+-- licensed under the terms of the LGPL2
+
+-- character table string
+local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+
+-- encoding
+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
+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
+
+-- command line if not called as library
+if (arg ~= nil) then
+ local func = 'enc'
+ for n,v in ipairs(arg) do
+ if (n > 0) then
+ if (v == "-h") then print "base64.lua [-e] [-d] text/data" break
+ elseif (v == "-e") then func = 'enc'
+ elseif (v == "-d") then func = 'dec'
+ else print(_G[func](v)) end
+ end
+ end
+else
+ module('base64',package.seeall)
+end
View
@@ -2,6 +2,12 @@
require "posix"
+--get path of running application to load base64 module
+lpath=posix.dirname(arg[0])
+package.path=package.path .. ";" .. lpath .. "/?.lua"
+require "base64"
+
+
sys_config_name = ".envrc"
sys_env_path = "SHELLENV" -- store current config path
sys_env_backup = "SHELLENV_BACKUP"
@@ -67,11 +73,14 @@ serial_vars = function (env)
res_str = res_str .. k .. "," .. string.len(v) .. "," .. v .. ";"
end
end
- return res_str
+
+ str=enc(res_str)
+ return str
end
-deserial_vars = function (str) --TODO do it in C
+deserial_vars = function (encstr) --TODO do it in C
+ str=dec(encstr)
start_pos = 1
pos = 0
end_pos = 0

0 comments on commit 13f1ee0

Please sign in to comment.