Введем три функции для длины 256 бит:
где - перестановка байта
- номер байта.
Число уникально представляется через целые числа
и правило перестановки
записывается:
Функция компрессии двух 256-битовых блоков сообщения и результата хэширования предыдущего блока
имеет вид:
Вычисление :
Вычисления ключей и
производятся через вспомогательные функции:
где
Сначала пять переменных копируются в другие переменные:
a=A, b=B, c=C, d=D, e=E;
Главный цикл состоит их четырех этапов по 20 операций в каждом. Каждая операция представляет собой нелинейную функцию над тремя из ,
,
,
и
, а затем выполняется сдвиг и сложение. В SHA используется следующий набор нелинейных функций:
в алгоритме используются следующие четыре константы:
Если - это номер операции (
),
представляет собой
-ый подблок расширенного сообщения,
- это циклический сдвиг влево на
битов, то главный цикл выглядит следующим образом:
for t=0 to 79 TEMP=(a<<<5)+f_t(b,c,d)+e+W[t]+K[t] e=d d=c c=b<<<30 b=a a=TEMP
После всего этого и
добавляются к
и
, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение
и
.
A=A+a;B=B+b;C=C+c;D=D+d;E=E+e;
Шнайер 329