Консольная программа, позволяющая:
- Генерировать ключи заданной длины.
- Подписывать заданный файл.
- Проверять подпись.
- Шифровать заданный файл.
- Расшифровывать файл.
Программа позволяет работать с файлами любой длины. Программа является утилитой командной строки. [имя_программы] --help – выводит как ей пользоваться
[имя_программы] genkey --size 1024 --pubkey pk.txt --secret secret.txt Генерирует ключи. Открытый сохраняется в pk.txt, закрытый – в secret.txt. Размер может быть любой, кратный 256: 256, 512, 1024, 2048.
[имя_программы] sign --infile file.txt --secret secret.txt --sigfile signature.txt Вычислят подпись файла, сохраняет ее в signature.txt.
[имя_программы] check --infile file.txt --pubkey pk.txt --sigfile signature.txt Проверяет подпись файла, результат пишет в stdout.
[имя_программы] --infile file.txt --pubkey pk.txt --outfile file_out.txt Шифрует файл для получателя. Результат помещает в file_out.txt
[имя_программы] --infile file.txt.enc --secret secret.txt --outfile file.txt Расшифровывает файл. Результат помещает в file.txt.
##Итог
Оценка оптимизаций на разных этапах производилась путем сравнение свободных клетотаблиц времени к ключу, затраченного на зашифаровку, расшифровку файла.
На этом и последующих рисунках будет показываться размер ключа в битах, время в секундах, минутах и часах, в первом, втором, третьем и четвертом столбце соответсветнно. Кроме того, в последующих столбцах приводятся сравнения по затраченному времени относительно других результатов (времени без оптимизаций (эталон) или промежуточных результатов).
Для данной оптимизации был выбран алгоритм перемножения многочленов методом быстрого преобразования Фурье Для перемножения чисел в исходной программе используется метод Карацубы, сложность алгоритма которого: O(n^(log_2(3)))
В машинно-независимых оптимизациях были свернуты некоторые циклы, развернут короткий цикл и заменен цикл for на внутреннию функцию языка Си (memcpy)
Время выполнения программы с aсселблерной вставкой незначительно уменьшилось.
Время выполнения программы с машинно-зависимой оптимизацией незначительно увеличилось.
Финальное время выполнения алгоритма суммарно уменьшилось в 4 раза.