Я надеюсь, что под "64-разрядными длинными целыми числами" вы действительно подразумеваете длинные беззнаковые целые числа ... Серьезно, не делайте свою собственную реализацию SHA-512, пока полностью не поймете, как выполняется арифметика bigint с использованием меньших целых чисел.
Если вы хотите реализовать что-то соответствующее, то используйте 128-битный полный.Если вы используете один единственный вызов функции для хеширования всего блока, вам вряд ли понадобятся полные 128 бит, 64 будет в порядке.Но чтобы соответствовать, вы должны разрешить хэшировать полный блок в пакетах.Таким образом, у вас есть 3 функции, подобные этим:
Init - Инициализирует внутреннее состояние для следующего хэширования.
Add - добавляет блок данных к текущему хэшированию с внутренней буферизацией неполных блоков ивнутренний счет 128-битного размера.Он занимает блок памяти, поэтому чистый интерфейс в стиле C будет использовать size_t
для количества байтов.Тем не менее, 64-разрядное целое число без знака достаточно хорошо для предполагаемой цели и упрощает подсчет.
Готово - выполняет заполнение, завершает хеширование и возвращает окончательное значение хеш-функции.
Очевидно, этоДля подхода требуется дополнительная внешне видимая структура для хранения текущего состояния.