Функция хеширования SHA-1.

• Для входного сообщения произвольной длины (максимум бит) алгоритм генерирует 160-битное хеш-значение.

• SHA-1 реализует хеш-функцию, построенную на идее функции сжатия. Входами функции сжатия являются блок сообщения длиной 512 бит и выход предыдущего блока сообщения. Выход представляет собой значение всех хеш-блоков до этого момента. Иными словами хеш-блока равен . Хеш-значением всего сообщения является выход последнего блока.

Инициализация .Исходное сообщение разбивается на блоки по 512 бит в каждом. Последний блок дополняется до длины, кратной 512 бит. Сначала добавляется 1, а потом нули, чтобы длина блока стала равной (512 - 64 = 448) бит. В оставшиеся 64 бита записывается длина исходного сообщения в битах. Если последний блок имеет длину более 448, но менее 512 бит, то дополнение выполняется следующим образом: сначала добавляется 1, затем нули вплоть до конца 512-битного блока; после этого создается ещё один 512-битный блок, который заполняется вплоть до 448 бит нулями, после чего в оставшиеся 64 бита записывается длина исходного сообщения в битах. Дополнение последнего блока осуществляется всегда, даже если сообщение уже имеет нужную длину. Инициализируются пять 32-битовых переменных.

• Определяются четыре нелинейные операции и четыре константы.

= 0x5A827999 • 0≤t≤19
= 0x6ED9EBA1 • 20≤t≤39
= 0x8F1BBCDC • 40≤t≤59
= 0xCA62C1D6 • 60≤t≤79

Главный цикл.Главный цикл итеративно обрабатывает каждый 512-битный блок. Итерация состоит из четырех этапов по двадцать операций в каждом. Блок сообщения преобразуется из 16 32-битовых слов в 80 32-битовых слов по следующему правилу:

при 0≤t≤15
= (-3 -8 -14 -16) << 1 при 16≤t≤79

• здесь << — это циклический сдвиг влево

для от 0 до 79
temp = (a<<5) + (b,c,d) + e +
e = d
d = c
c = b<<30
b = a
a = temp

• После этого a, b, c, d, e прибавляются к A, B, C , D , E соответственно. Начинается следующая итерация.

• Итоговым значением будет объединение пяти 32-битовых слов в одно 160-битное хеш-значение.