Шаг 5: выход

После обработки всех 512-битных блоков выходом L-ой стадии является 160-битный дайджест сообщения.

Рассмотрим более детально логику в каждом из 80 циклов обработки одного 512-битного блока. Каждый цикл можно представить в виде:

A, B, C, D, E (CLS5 (A) + ft (B, C, D) + E + Wt + Kt), A, CLS30 (B), C, D

Где

A, B, C, D, E - пять слов из буфера.
t - номер цикла, 0 <= t <= 79.
ft - элементарная логическая функция.
CLSs - циклический левый сдвиг 32-битного аргумента на s битов.
Wt - 32-битное слово, полученное из текущего входного 512-битного блока.
Kt - дополнительная константа.
+ - сложение по модулю 232.


Рис. 9.3.Логика выполнения отдельного цикла

Каждая элементарная функция получает на входе три 32-битных слова и создает на выходе одно 32-битное слово. Элементарная функция выполняет набор побитных логических операций, т.е. n-ый бит выхода является функцией от n-ых битов трех входов. Функции следующие:

Номер цикла ft (B, C, D)
(0 <= t <= 19)
(20 <= t <= 39)
(40 <= t <= 59)
(60 <= t <= 79)

На самом деле используются только три различные функции. Для 0 <= t <= 19 функция является условной: if B then C else D. Для 20 <= t <= 39 и 60 <= t <= 79 функция создает бит четности. Для 40 <= t <= 59 функция является истинной, если два или три аргумента истинны.

32-битные слова Wt получаются из очередного 512-битного блока сообщения следующим образом.


Рис. 9.4.Получение входных значений каждого цикла из очередного блока

Первые 16 значений Wt берутся непосредственно из 16 слов текущего блока. Оставшиеся значения определяются следующим образом:

В первых 16 циклах вход состоит из 32-битного слова данного блока. Для оставшихся 64 циклов вход состоит из XOR нескольких слов из блока сообщения.

Алгоритм SHA-1 можно суммировать следующим образом:

Где

IV - начальное значение буфера ABCDE.
ABCDEq - результат обработки q-того блока сообщения.
L - число блоков в сообщении, включая поля добавления и длины.
- сумма по модулю 232, выполняемая отдельно для каждого слова буфера.
SHA - значение дайджеста сообщения.