有关键自足的算法 - 尤其是密码学相关的,如AES,RSA,SHA1等等 - 你可以找到的许多实现免费上网。超空间优化的代码
一些写是好的和便携干净C.
一些被写入要快 - 往往与宏和明确的展开。
据我所知,没有试图要特别超小 - 所以我辞职,写我自己 - 明确AES128解密和SHA1为ARM的Thumb2。 (我已经编译所有我能找到我的目标机器与-Os GCC和-mthumb和这样的验证)
我可以用什么方式和技巧来做到这一点?
是否有编译器/工具,可以卷起的代码?
有关键自足的算法 - 尤其是密码学相关的,如AES,RSA,SHA1等等 - 你可以找到的许多实现免费上网。超空间优化的代码
一些写是好的和便携干净C.
一些被写入要快 - 往往与宏和明确的展开。
据我所知,没有试图要特别超小 - 所以我辞职,写我自己 - 明确AES128解密和SHA1为ARM的Thumb2。 (我已经编译所有我能找到我的目标机器与-Os GCC和-mthumb和这样的验证)
我可以用什么方式和技巧来做到这一点?
是否有编译器/工具,可以卷起的代码?
这取决于你正在设法优化什么样的空间:代码或数据。通常使用的AES128基本上有三种不同的版本,每种版本的预计算查找表空间的数量都不相同。
在优化空间(或速度)之前:编译器最近很聪明,如果正常,可读的aes128实现足够小以满足您的需求,如果您告诉编译器优化空间,您是否尝试过?
要去写自己的aes128版本也许是一件好的教育工作,但是你肯定会为错误而战,而密码学并不是那种无足轻重的东西。和错误或弱(由于您的实施的一些错误)几乎是最糟糕的情况下,你可以有。
,因为你是靶向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.
好一点,是的,我已经编译几乎每一个AES实现我能找到我的目标架构和测量功能尺寸的照顾。我得到的最紧密的是2.4KB,许多实现超过5KB。最紧张的仍然是宏观展开... SHA1是同样的故事 - 最紧张的是1.7KB,“快速”的是7或8KB。我想要更小一些,但需要耗费运行时间。 – Will 2010-06-03 09:25:58
你有没有尝试过另一个编译器(想到clang.llvm.org)? – akira 2010-06-03 10:12:28