Введем три функции для
длины 256 бит:
,
,
,
где
- перестановка байта
- номер байта.
Число
уникально представляется через целые числа
и правило перестановки
записывается:
,
.
Функция компрессии двух 256-битовых блоков сообщения
и результата хэширования предыдущего блока
имеет вид:
Вычисление
:
,
.
Вычисления ключей
и
производятся через вспомогательные функции:
,
,
,
.
где
.
Сначала пять переменных копируются в другие переменные:
a=A, b=B, c=C, d=D, e=E;
Главный цикл состоит их четырех этапов по 20 операций в каждом. Каждая операция представляет собой нелинейную функцию над тремя из
,
,
,
и
, а затем выполняется сдвиг и сложение. В SHA используется следующий набор нелинейных функций:
в алгоритме используются следующие четыре константы:
по
) в 80 32-битовых слов (
по
) с помощью следующего алгоритма:
Если
- это номер операции (
),
представляет собой
-ый подблок расширенного сообщения,
- это циклический сдвиг влево на
битов, то главный цикл выглядит следующим образом:
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