Оптимизация производительности SpongeV16::absorb для больших файлов
В этом обновлении была проведена ключевая оптимизация функции SpongeV16::absorb, которая отвечает за "впитывание" данных в криптографическую губку.
Это изменение кардинально повышает скорость шифрования и расшифровки файлов большого размера.
Ранее, при обработке данных, функция последовательно удаляла каждый обработанный блок из начала внутреннего буфера (std::vector).
Такая операция (erase в начале вектора) крайне затратна, так как при каждом вызове она сдвигает все последующие данные в памяти.
Для больших файлов это создавало эффект "снежного кома", приводя к квадратичной зависимости времени выполнения от размера данных и вызывая серьезные "тормоза".
Теперь этот процесс был переработан
Вместо физического удаления блоков в цикле используется легковесный индекс, который просто указывает на начало следующего блока.
После того как все возможные полные блоки в буфере обработаны, вся использованная часть данных удаляется одним-единственным вызовом, что является гораздо более эффективной операцией.
Это изменение не затрагивает криптографическую логику — алгоритм производит абсолютно те же вычисления и генерирует идентичный результат.
Безопасность и надежность шифрования остались на прежнем высочайшем уровне, а обратная совместимость со старыми файлами полностью сохранена.
Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg