Задача «Симметричное шифрование»

Задача

Произвести рефакторинг исходного кода на языке C алгоритма шифрования TwoFish.

Исходный код

Архив с исходными кодами на сайте автора.

  • DEBUG.H – отладочная печать.
  • PLATFORM.H – макросы для работы на платформах с различным порядком байтов, макросы для циклических сдвигов бит.
  • TABLE.H – таблицы перестановок, а также макросы для расчета кодов Рида-Соломона.
  • AES.H – объявление структур данных, коды ошибок, вспомогательные функции.
  • TWOFISH.C – реализация большинства функций алгоритма.

В исходном коде присутствует тест шифратора.

Описание

В процессе рефакторинга необходимо:

  • Переписать код на C++ (конструкторы, деструкторы, объявление переменных не в начале блока, а там где они реально используются, и т. п.)
  • Избавиться от define'ов (объявление констант) и глобальных переменных.
  • Обработку ошибок перенести на механизм исключений и std::exception.
  • В рамках данного задания упростить работу с порядком байт: везде считать порядок байт Little-endian (см. макросы LittleEndian, Bswap(x), b0(x), и т.п.).
  • В рамках данного задания так же можно считать, что все структуры автоматически выровнены по 32 бита, поэтому дополнительные проверки в коде на это выравнивание избыточны (см. макро-константы ALIGN32).
  • В рамках задания отладочную печать необходимо либо перевести на std::string и std::iostream, либо полностью удалить.
  • По возможности избавиться от макро-функций, макро-констант, отдав предпочтение inline-функциям.
  • Выделить класс блочного шифратора, глобальные функции имеющие отношение к шифратору преобразовать в методы.
  • Выбор режима шифрования (ECB или CBC) организовать на основе паттерна стратегия.

Архив с проектами для Visual Studio 2013 и Visual Studio 2015. По сравнению с исходным кодом добавлен функционал для тестирования шифратора на наборе файлов с ключами, исходным текстом и результатами шифрования.

Об этом и других симметричных алгоритмах шифрования можно дополнительно почитать в статье на ixbt.com.