mirror of
https://gitgud.io/fatchan/haproxy-protection.git
synced 2025-05-09 02:05:37 +00:00
Reorganise, move code to not be split between haproxy and src folder
This commit is contained in:
105
src/lua/libs/randbytes.lua
Normal file
105
src/lua/libs/randbytes.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
-- randbytes.lua
|
||||
-- Colin 'Oka' Hall-Coates
|
||||
-- MIT, 2015
|
||||
-- https://github.com/okabsd/randbytes
|
||||
local defaults = setmetatable ({
|
||||
bytes = 4,
|
||||
mask = 256,
|
||||
file = 'urandom',
|
||||
filetable = {'urandom', 'random'}
|
||||
}, { __newindex = function () return false end })
|
||||
|
||||
local files = {
|
||||
urandom = false,
|
||||
random = false
|
||||
}
|
||||
|
||||
local utils = {}
|
||||
|
||||
function utils:gettable (...)
|
||||
local t, r = {...}, defaults.filetable
|
||||
if #t > 0 then r = t end
|
||||
return r
|
||||
end
|
||||
|
||||
function utils:open (...)
|
||||
for _, f in next, self:gettable (...) do
|
||||
for k, _ in next, files do
|
||||
if k == f then
|
||||
files[f] = assert (io.open ('/dev/'..f, 'rb'))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function utils:close (...)
|
||||
for _, f in next, self:gettable (...) do
|
||||
for k, _ in next, files do
|
||||
if files[f] and k == f then
|
||||
files[f] = not assert (files[f]:close ())
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function utils:reader (f, b)
|
||||
if f then
|
||||
return f:read (b or defaults.bytes)
|
||||
end
|
||||
end
|
||||
|
||||
local randbytes = {
|
||||
generate = function (f, ...)
|
||||
if f then
|
||||
local n, m = 0, select (2, ...) or defaults.mask
|
||||
local s = utils:reader (f, select (1, ...))
|
||||
|
||||
for i = 1, s:len () do
|
||||
n = m * n + s:byte (i)
|
||||
end
|
||||
|
||||
return n
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
function randbytes:open (...)
|
||||
utils:open (...)
|
||||
return self
|
||||
end
|
||||
|
||||
function randbytes:close (...)
|
||||
utils:close (...)
|
||||
return self
|
||||
end
|
||||
|
||||
function randbytes:uread (...)
|
||||
return utils:reader (files.urandom, ...)
|
||||
end
|
||||
|
||||
function randbytes:read (...)
|
||||
return utils:reader (files.random, ...)
|
||||
end
|
||||
|
||||
function randbytes:urandom (...)
|
||||
return self.generate (files.urandom, ...)
|
||||
end
|
||||
|
||||
function randbytes:random (...)
|
||||
return self.generate (files.random, ...)
|
||||
end
|
||||
|
||||
function randbytes:setdefault (k, v)
|
||||
defaults[k] = v or defaults[k]
|
||||
return defaults[k]
|
||||
end
|
||||
|
||||
utils:open ()
|
||||
|
||||
return setmetatable (randbytes, {
|
||||
__call = function (t, ...)
|
||||
return utils:reader (files[defaults.file], ...)
|
||||
end,
|
||||
__metatable = false,
|
||||
__newindex = function () return false end
|
||||
})
|
Reference in New Issue
Block a user