有一些关键的自包含算法 - 特别是与加密相关的算法,如AES,RSA,SHA1等 - 您可以在互联网上找到许多免费的实现。
有些写得很好,便携干净。
有些是快速编写的 - 通常使用宏,并显式展开。
据我所知,没有人试图特别超小 - 所以我不得不写自己的 - 明确的AES128解密和SHA THUMB2的SHA1。 (我已通过编译所有我可以找到的所有我可以找到的GCC与-Os和-mthumb等目标机器验证)
我可以使用哪些模式和技巧来做到这一点?
是否有可以汇总代码的编译器/工具?
答案 0 :(得分:4)
在优化空间(或速度)之前:编译器现在非常聪明,如果你告诉编译器优化空间,你是否尝试过aes128的正常,可读的实现足够小以满足你的需求?
去编写你自己的版本的aes128可能是一个很好的教育事物,但你肯定会为bug而斗争,而密码学并不是那种愚蠢的东西。 <错误或弱(由于你的实施的一些错误)是你可以有的更糟糕的情况。
因为你的目标是ARM,gcc作为该平台的编译器很常见:
-Os Optimize for size.
-Os enables all -O2 optimizations that do not typically
increase code size. It also performs further optimizations
designed to reduce code size.
答案 1 :(得分:2)
这取决于您尝试优化的空间类型:代码或数据。通常使用的AES128基本上有三种变体,每种变体的预计算查找表空间的数量不同。