1
0
Files
envoy-apisix/plugins/crypto.lua
2023-04-14 17:12:13 +08:00

39 lines
1002 B
Lua

local ffi = require('ffi')
local crypto = ffi.load("crypto.so.1.1", true)
local ffi_string = ffi.string
ffi.cdef[[
char *MD5(const char *d, size_t n, char *md);
int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
]]
local _M = { version = 0.2 }
function string.tohex(str)
return (str:gsub('.', function (c)
return string.format('%02X', string.byte(c))
end))
end
function _M.md5(data)
local buf = ffi.new("char[16]")
crypto.MD5(data, #data, buf)
return ffi_string(buf):tohex()
end
function _M.decode_base64(data)
local len = #data - #data/4
local buf = ffi.new("unsigned char["..len.."]")
len = crypto.EVP_DecodeBlock(buf, data, #data)
return ffi_string(buf, len - 1)
end
function _M.encode_base64(data)
local len = #data + #data/4
local buf = ffi.new("unsigned char["..len.."]")
len = crypto.EVP_EncodeBlock(buf, data, #data)
return ffi_string(buf, len - 1)
end
return _M