lua-resty-urandom
Linux/BSD 内核空间 CSPRNG 的缓冲包装器
$ opm get p0pr0ck5/lua-resty-urandom
名称
lua-resty-urandom - Linux/BSD 内核空间 CSPRNG 的缓冲包装器
状态
该库处于积极开发中,并已准备好用于生产环境。
描述
lua-resty-urandom 旨在提供对 /dev/urandom
设备的有效访问。后台读取使用伪随机数据填充每个工作进程的缓冲区,可以将其作为字符串或字符串表检索。
安装
通过 Luarocks 或 OPM 安装
$ luarocks install lua-resty-urandom
$ opm install p0pr0ck5/lua-resty-urandom # assume lua_system_constants >= 0.1.2 is installed
概要
init_worker_by_lua_block {
local urandom = require "resty.urandom"
urandom.init({
max_size = 1024 * 1024,
chunk_size = 128,
rate = .1
})
}
[...snip...]
server {
location /random {
content_by_lua_block {
local urandom = require "resty.urandom"
local gargs = ngx.req.get_uri_args()
local length = gargs.length or 128
local data, len, err = urandom.get_string(tonumber(length))
if (err) then
ngx.log(ngx.WARN, err)
else
ngx.say(data)
end
}
}
location /random-t {
content_by_lua_block {
local urandom = require "resty.urandom"
local gargs = ngx.req.get_uri_args()
local num = gargs.num or 1
local data, len, err = urandom.get_chunks(tonumber(num))
if (err) then
ngx.log(ngx.WARN, err)
else
for i in ipairs(data) do
ngx.say(data[i])
end
end
}
}
}
用法
urandom.init(opts)
使用选项表初始化缓冲区几何形状和填充速率。
max_size:要存储的伪随机数据的总量,以字节为单位。
chunk_size:存储在给定“块”中的数据量,以字节为单位。
rate:以秒为单位,从
/dev/urandom
中填充缓冲区一部分数据的速率。此调用直接传递给ngx.timer.at
(因此可以使用秒的分数)。read_size:一次从 urandom 读取的字节数。
max_fill:后台缓冲区填充函数每次调用的读取总字节数。如果此值小于
read_size
,则线程将在尝试再次读取以满足此值之前让出。lock_timeout:等待工作进程信号量的时长,以秒为单位。
块的总数计算为 floor(max_size / chunk_size),因此,如果 chunk_size 不是偶数除数,则缓冲区的总大小将小于给定的 max_size。所以请正确计算 :p
urandom.get_string(length)
获取伪随机数据的字符串。如果 length
大于 chunk_size
,则将使用多个块来满足请求。如果 length
不是 chunk_size
的偶数除数,则将使用附加块的一部分来满足请求,并丢弃块中剩余的数据。
如果请求的数据量大于缓冲区中当前可用的数据量,则响应将被截断为缓冲区中可用数据的长度。
urandom.get_chunks(n)
获取包含 n
个值的表,每个值的大小为 chunk_length
。如果请求的块数大于缓冲区中当前可用的块数,则响应将被截断为缓冲区中可用块的数量。
许可证
本程序是自由软件:您可以在自由软件基金会发布的 GNU 通用公共许可证的条款下重新分发和/或修改它,无论是许可证的版本 3 还是(根据您的选择)任何更高版本。
本程序按“原样”分发,没有任何保证;甚至没有对适销性或适用于特定目的的隐含保证。有关更多详细信息,请参阅 GNU 通用公共许可证。
您应该已经收到了本程序附带的 GNU 通用公共许可证副本。如果没有,请参阅 https://gnu.ac.cn/licenses/
错误
请通过在 GitHub 问题跟踪器中创建工单来报告错误。
作者
Robert Paprocki (p0pr0ck5)
许可证
gpl3
版本
-
Linux/BSD 内核空间 CSPRNG 的缓冲包装器 2017-05-21 22:09:27
-
Linux/BSD 内核空间 CSPRNG 的缓冲包装器 2016-09-30 16:55:38