что нам дано сообщение длиной
Предположим, что нам дано сообщение длиной b бит, где b – произвольное неотрицательное целое число, и пусть биты сообщения записаны в следующем порядке:
m0 m1 ... m(b–1).
Для вычисления свертки сообщения выполняются следующие пять шагов.
Шаг 1. Добавление битов заполнения.
Сообщение дополняется (расширяется) так, что его длина (в битах) становится сравнимой с 448 по модулю 512. Расширение выполняется всегда, даже если длина сообщения уже сравнима с 448 по модулю 512
Расширение выполняется следующим образом: к сообщению добавляется один бит, равный 1, а оставшиеся биты заполняются нулевыми значениями. Таким образом, количество добавленных битов может лежать в диапазоне от 1 до 512 включительно.
Шаг 2. Добавление длины.
64-битное представление длины сообщения b (до добавления битов расширения) дописывается к результату предыдущего шага. В том маловероятном случае, когда длина сообщения превысит 264, используются только младшие 64 бита представления. Эти биты добавляются в виде двух 32-разрядных слов, при этом младшее слово дописывается первым. После этой операции длина сообщения в точности кратна 512 битам и, аналогично, кратна 16 (32-разрядным) словам. Обозначим M[0..N-1] слова полученного сообщения.
Шаг 3. Инициализация буфера свертки.
Буфер из четырех слов (A, B, C, D) используется для вычисления свертки сообщения. Эти регистры инициализируются следующими шестнадцатеричными значениями:
A = 01234567,
B = 89abcdef,
C = fedcba98,
D = 76543210.
Шаг 4. Обработка сообщения блоками по 16 слов.
Определим сначала 4 вспомогательные функции, аргументом и результатом каждой из которых являются 32-битовые слова.
F(X,Y,Z) = XY Ъ Ш(X) Z
G(X,Y,Z) = XZ Ъ Y Ш(Z)
H(X,Y,Z) = X Е Y Е Z
I(X,Y,Z) = Y Е (X Ъ Ш(Z)).
На этом шаге используется таблица из 64 слов T[1…64], построенная на основе функции синуса. Пусть T[i] обозначает i–й элемент таблицы, который равен целой части от 4294967296 ґabs(sin(i)), где i