有關鍵自足的算法 - 尤其是密碼學相關的,如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