оптимизированный для космоса код - PullRequest
3 голосов
/ 03 июня 2010

Существуют ключевые автономные алгоритмы, особенно связанные с криптографией, такие как AES, RSA, SHA1 и т. Д., Которые вы можете найти бесплатно в Интернете для многих реализаций.

Некоторые написаны, чтобы быть красивыми и портативными чистыми C.

Некоторые написаны, чтобы быть быстрыми - часто с макросами и явным развертыванием.

Насколько я могу судить, никто не пытается быть особенно сверхмалым - поэтому я смирился с написанием своего собственного - явно расшифровки AES128 и SHA1 для ARM THUMB2. (Я проверил, скомпилировав все, что я могу найти для моей целевой машины с GCC, с -Os и -mthumb и т. Д.)

Какие шаблоны и приемы можно использовать для этого?

Существуют ли компиляторы / инструменты, которые могут свернуть код?

Ответы [ 2 ]

4 голосов
/ 03 июня 2010

до оптимизации пространства (или скорости): компиляторы в наши дни довольно умны, пробовали ли вы, если нормальная, читаемая реализация 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.
2 голосов
/ 04 июля 2010

Это зависит от того, какое пространство вы пытаетесь оптимизировать: код или данные. По существу, обычно используются три варианта AES128, каждый из которых отличается объемом предварительно вычисленного табличного пространства поиска.

  • Самая быстрая версия использует 4k, организованные как четыре 32-битных x 256 входных таблицы поиска (обычно называемые T-таблицами). Если вы можете позволить себе такой объем пространства данных, то единственными инструкциями в этой версии являются EOR для объединения результатов таблицы, которые свернутся в очень маленький фрагмент кода.
  • Промежуточная версия использует 8-битную таблицу поиска по 256 записей для кодирования SBox. Остаточные инструкции должны реализовывать шаги сдвига строк и смешивания столбцов, чтобы размер кода был больше.
  • Наименьшая (размер данных) версия вообще не использует таблицы поиска, но должна вычислять все отдельные операции AES-поля, включая инверсию. При этом будет использовано большинство инструкций, даже если вы сложите и умножение поля, и инверсию в подпрограммы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...