以纯Lua(版本5.3或更高版本)
December 2018
October 2018
April 2018
添加了 Morus ,这是CAESAR认证加密竞赛的决赛选手(第4轮)。
添加 Gimli ,基于Gimli排列的加密函数(Dan Bernstein等,2017,https://gimli.cr.yp.to/)。 正在进行中 - 目前,只实施了核心排列。
添加了 Base85 ,包括Ascii85编码的ZeroMQ变体。
2017年12月
2017年8月
六月2017
在一个地方收集众所周知的,和/或有用的和/或有趣的加密算法的独立实现。
用户应该能够获取任何文件并将其放入项目中:
所有文件都是用纯Lua,5.3及以上版本编写的(在5.3.4上测试)。由于广泛使用了位运算符和字符串打包/解包,所以需要Lua 5.3。
这些文件不应要求超出标准Lua 5.3库的任何第三方库或C扩展。
文件不应定义任何全局。如果需要,他们应该返回一个包含算法函数和常量的表。
欢迎提供贡献,修复,错误报告和建议。
这个集合是什么而不是:
一个完整的,结构化的加密库 - 没有对一致的API结构和文档做出承诺。这不是一个库 - 只是一组希望有用的加密源代码片段。
高性能,重型加密实现 - 毕竟,这是纯 Lua ... :-)
内存高效的实现(见上文)
内存安全算法 - 使用Lua不可变字符串并根据需要进行垃圾收集。当不再需要或不泄漏时,不保证信息,特别是密钥材料被正确擦除。
加密
Morus,一个令人惊讶的 快速(见下面的性能)经过认证的加密算法及相关数据(AEAD)。 Morus是 CAESAR 竞赛的决赛选手(第4轮) - 参见http://www3.ntu.edu.sg/home/wuhj/research/caesar/caesar.html
NORX,一种非常快速认证的加密算法,带有相关数据(AEAD)。 NORX是 CAESAR 的第3轮候选人。这个Lua代码实现了默认的NORX 64-4-1变体(状态是16个64位字,4个循环,没有并行执行,密钥和随机数是256位) - 请参阅https://norx.io/
NORX32,NORX的一种变体,适用于较小的体系结构(32位及更少)。密钥和随机数是128位。 (注意,这个NORX32 Lua实现的速度是默认的64位NORX的一半。这里只包括与其他实现的兼容性 - 在Lua中,使用默认的NORX实现!)
Rabbit,一种快速流密码,在eSTREAM产品组合中与Salsa20一起选择,并在 RFC 4503中定义(128位密钥,64位IV - 请参阅rabbit.lua中的更多信息和链接)
Chacha20,Poly1305和经过身份验证的流加密,如 RFC 7539 和XChacha20流加密(带有24字节随机数的Chacha20)中所定义
Salsa20,一种快速加密算法和用于认证加密的NaCl secretbox()API(使用Salsa20和Poly1305 - 见box.lua)Salsa20,Poly1305和NaCl库由Dan Bernstein,Tanja Lange等人设计。 http://nacl.cr.yp.to/。
RC4 - 用于轻量级,低强度加密。也可以用作简单的伪随机数发生器。
公钥
哈希
Blake2b - Blake是NIST SHA-3选拔过程中的最后一轮候选人。 Blake2b是Blake的改进版本。请参阅https://blake2.net/。它已在 RFC 7693
SHA2加密哈希系列(sha256和sha512)
SHA3加密哈希系列(以前称为Keccak - 256位和512位版本)
SipHash是Jean-Philippe Aumasson和Dan Bernstein为短信息速度优化的键控散列函数系列。此处实现的变体是默认的SipHash-2-4。
MD5,如 RFC 1321
非加密校验和(CRC-32,Adler-32),...
一些(联合国)相关实用程序:
有朝一日可能实施的实现:
Ed25519签名
每个文件中更好的文档:-)
这些原始数字给出了算法相对性能的概念。它们对应于10 MB字符串(10 * 1024 * 1024字节)的加密或散列。
它们是在Linux x86_64,CPU i5 M430 @ 2.27 GHz的笔记本电脑上收集的。 Lua版本是5.3.4(ELF 64位) - 参见文件'test_perf.lua';取消注释您想要在最后运行的任何测试。
Plain text size: 10 MBytes. Elapsed time in seconds Encryption - rc4 raw 7.4 - rabbit 4.7 - xtea ctr 11.0 - chacha20 7.9 - salsa20 8.0 - norx aead 4.5 - norx32 aead 9.2 - morus aead 1.7 Hash - md5 3.7 - sha2-256 9.1 - sha2-512 6.4 - sha3-256 23.2 - sha3-512 43.0 - blake2b-512 9.4 - blake2b-256 9.3 - poly1305 hmac 1.2 - adler-32 1.3 - crc-32 1.8 Elliptic curve (ec25519) - scalarmult (100 times) 18.9
可以运行一些简单的测试(test_all.lua)。各个测试文件在“test”目录中提供。
实现应该通过测试,但除此之外,无法保证这些实现符合任何要求:-) - 使用风险自负!
此处包含的所有文件均在MIT许可证下分发(请参阅文件许可证)
salsa20和box / secretbox实施由Pierre Chapuis提供 - https://github.com/catwell
sha2-256和sha2-512核心排列来自Egor Skriptunoff的pure_lua_SHA2项目 - https://github.com/Egor-Skriptunoff/pure_lua_SHA2