为了允许小型 C++ 应用程序在通过 Internet 连接的客户端更新自身,我需要一种基于公钥验证下载的机制。DSA 或 RSA 等算法似乎能够很好地做到这一点。
然而,看看众所周知的可用库(Crypto++、LibTomCrypt),它们最终都会使我的二进制文件大于 500k,而在我看来,这样的逻辑可以在几个 k 中实现。是否有任何库在小于 20k 的足迹中实现 RSA/DSA 哈希验证?
由于我没有找到适合我特定需求的库,因此我为此创建了自己的库:http: //github.com/paiq/dsa_verify。当前的实现有大约 50k 的程序内存占用,主要是由于包含了 bignum 数学库,但未来的版本可能会被剥离更多。
如果您只有 Windows,则只要您的应用程序部署在 win2k 或更高版本上,您就可以链接到 windows Crypto API。Windows 加密 MSDN 文章。
编辑:另一种可能的解决方案,如果您只需要验证下载没有被损坏,那么快速搜索一下MD5 的这个小实现的来源。根据编译的目标代码顶部 3k 的自述文件。
你真的需要密码吗?通常,要验证下载,您可以使用 MD5 或 SHA 等哈希函数。也许你可以找到一个使用这些的小型图书馆。
无论哪种方式,您都可以尝试 openssl 库。但是,我机器上的 .a 大约是 400K 和 250K 被剥离。
在http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.143.3049&rep=rep1&type=pdf中描述了一个椭圆曲线库,根据作者可以将其配置为仅需要大约 7k ROM 及以下微控制器上的 200 字节 RAM
我想您可能会发现MIRACL库满足您的需求。
校验和可以轻松处理此类验证工作。