Задача
Произвести рефакторинг исходного кода на языке 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.