代码之家  ›  专栏  ›  技术社区  ›  Will

超空间优化代码

  •  3
  • Will  · 技术社区  · 14 年前

    有些是写的很好,可移植干净的C。

    据我所知,没有人试图特别小-所以我辞职写我自己-明确AES128解密和SHA1的手臂拇指2(我已经用GCC和-Os和-mthumb之类的工具编译了我能找到的所有目标机器的代码,并进行了验证)

    是否有可以汇总代码的编译器/工具?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Andrew    14 年前

    这取决于您要优化的空间类型:代码还是数据。AES128基本上有三种常用变体,每种变体的预计算查找表空间量不同。

    • 最快的版本使用4k作为四个32位x256条目的查找表(通常称为T表)。如果你能负担得起那么多的数据空间,那么这个版本中唯一的指令就是合并表结果的eor,这些结果将汇总成一小段代码。
    • 中间版本使用8位x256项查找表对SBox进行编码。剩余指令需要实现移位行和混合列步骤,这样代码的大小就更大了。
        2
  •  4
  •   akira    14 年前

    在针对空间(或速度)进行优化之前:现在的编译器非常聪明,如果告诉编译器针对空间进行优化,您是否尝试过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.