8#include <botan/sha160.h>
9#include <botan/loadstor.h>
10#include <botan/rotate.h>
23 E += (D ^ (B & (C ^ D))) + msg + 0x5A827999 +
rotate_left(A, 5);
32 E += (B ^ C ^ D) + msg + 0x6ED9EBA1 +
rotate_left(A, 5);
41 E += ((B & C) | ((B | C) & D)) + msg + 0x8F1BBCDC +
rotate_left(A, 5);
50 E += (B ^ C ^ D) + msg + 0xCA62C1D6 +
rotate_left(A, 5);
68 for(
size_t i = 0; i != blocks; ++i)
72 for(
size_t j = 16; j != 80; j += 8)
84 F1(A, B, C, D, E,
W[ 0]); F1(E, A, B, C, D,
W[ 1]);
85 F1(D, E, A, B, C,
W[ 2]); F1(C, D, E, A, B,
W[ 3]);
86 F1(B, C, D, E, A,
W[ 4]); F1(A, B, C, D, E,
W[ 5]);
87 F1(E, A, B, C, D,
W[ 6]); F1(D, E, A, B, C,
W[ 7]);
88 F1(C, D, E, A, B,
W[ 8]); F1(B, C, D, E, A,
W[ 9]);
89 F1(A, B, C, D, E,
W[10]); F1(E, A, B, C, D,
W[11]);
90 F1(D, E, A, B, C,
W[12]); F1(C, D, E, A, B,
W[13]);
91 F1(B, C, D, E, A,
W[14]); F1(A, B, C, D, E,
W[15]);
92 F1(E, A, B, C, D,
W[16]); F1(D, E, A, B, C,
W[17]);
93 F1(C, D, E, A, B,
W[18]); F1(B, C, D, E, A,
W[19]);
95 F2(A, B, C, D, E,
W[20]); F2(E, A, B, C, D,
W[21]);
96 F2(D, E, A, B, C,
W[22]); F2(C, D, E, A, B,
W[23]);
97 F2(B, C, D, E, A,
W[24]); F2(A, B, C, D, E,
W[25]);
98 F2(E, A, B, C, D,
W[26]); F2(D, E, A, B, C,
W[27]);
99 F2(C, D, E, A, B,
W[28]); F2(B, C, D, E, A,
W[29]);
100 F2(A, B, C, D, E,
W[30]); F2(E, A, B, C, D,
W[31]);
101 F2(D, E, A, B, C,
W[32]); F2(C, D, E, A, B,
W[33]);
102 F2(B, C, D, E, A,
W[34]); F2(A, B, C, D, E,
W[35]);
103 F2(E, A, B, C, D,
W[36]); F2(D, E, A, B, C,
W[37]);
104 F2(C, D, E, A, B,
W[38]); F2(B, C, D, E, A,
W[39]);
106 F3(A, B, C, D, E,
W[40]); F3(E, A, B, C, D,
W[41]);
107 F3(D, E, A, B, C,
W[42]); F3(C, D, E, A, B,
W[43]);
108 F3(B, C, D, E, A,
W[44]); F3(A, B, C, D, E,
W[45]);
109 F3(E, A, B, C, D,
W[46]); F3(D, E, A, B, C,
W[47]);
110 F3(C, D, E, A, B,
W[48]); F3(B, C, D, E, A,
W[49]);
111 F3(A, B, C, D, E,
W[50]); F3(E, A, B, C, D,
W[51]);
112 F3(D, E, A, B, C,
W[52]); F3(C, D, E, A, B,
W[53]);
113 F3(B, C, D, E, A,
W[54]); F3(A, B, C, D, E,
W[55]);
114 F3(E, A, B, C, D,
W[56]); F3(D, E, A, B, C,
W[57]);
115 F3(C, D, E, A, B,
W[58]); F3(B, C, D, E, A,
W[59]);
117 F4(A, B, C, D, E,
W[60]); F4(E, A, B, C, D,
W[61]);
118 F4(D, E, A, B, C,
W[62]); F4(C, D, E, A, B,
W[63]);
119 F4(B, C, D, E, A,
W[64]); F4(A, B, C, D, E,
W[65]);
120 F4(E, A, B, C, D,
W[66]); F4(D, E, A, B, C,
W[67]);
121 F4(C, D, E, A, B,
W[68]); F4(B, C, D, E, A,
W[69]);
122 F4(A, B, C, D, E,
W[70]); F4(E, A, B, C, D,
W[71]);
123 F4(D, E, A, B, C,
W[72]); F4(C, D, E, A, B,
W[73]);
124 F4(B, C, D, E, A,
W[74]); F4(A, B, C, D, E,
W[75]);
125 F4(E, A, B, C, D,
W[76]); F4(D, E, A, B, C,
W[77]);
126 F4(C, D, E, A, B,
W[78]); F4(B, C, D, E, A,
W[79]);
size_t hash_block_size() const
size_t output_length() const
SecureVector< u32bit > digest
void compress_n(const byte[], size_t blocks)
void zeroise(MemoryRegion< T > &vec)
T load_be(const byte in[], size_t off)
T rotate_left(T input, size_t rot)
void store_be(u16bit in, byte out[2])