改造起因
在上篇文章, 我描述了为skynet
添加稳定的websocket
支持的起始并阐述了这么做的原因.
这几天在测试的时候发现, 当使用skynet
内置的httpc库的时候会遇见crypt
缺少一些我需要用到的算法(例如: crc
、sha256
、hmac_sha256
等等).
这里完全可以假设开发者在框架选型的时候没发现这个问题, 那可能会到开发中期需要第三方平台接入或扩展不同架构的时候才可能会发现了.
显然这将会在无形之中就会给一个项目引入不可预料的稳定性因素. 为了尽可能的避免这个因素, 扩展一些常见的加密(摘要)算法支持是必不可少的.
首选方案肯定使用已经成熟的库. 但是很可惜, lua5.3没有较为可靠并且现成的实现库可以fork
后直接使用.
而且可以用来参考的库仅有: luajit
利用ffi
实现的库、OpenSSL
的实现. 然而这些无法直接或间接移植到lua 5.3.
这是目前遇到的最坏的情况! 最终, 我们只能用Lua的C API来粘合C语言的Crypt实现来完成Lua版本的Crypt扩展库改造工作.
改造开始
我在网上寻找一段时间后发现一个比较不错的Lua sha实现.
这份代码包含md5
、sha128
、sha384
、sha512
的C实现, 其用大量的宏来完