68#if defined(BOTAN_HAS_SHA1_X86_SHA_NI)
74#if defined(BOTAN_HAS_SHA1_ARMV8)
80#if defined(BOTAN_HAS_SHA1_SIMD_4X32)
82 return simd_compress_n(digest, input, blocks);
87 uint32_t A = digest[0], B = digest[1], C = digest[2], D = digest[3], E = digest[4];
88 std::array<uint32_t, 80> W;
89 auto W_in = std::span{W}.first<
block_bytes /
sizeof(uint32_t)>();
93 for(
size_t i = 0; i != blocks; ++i) {
98 for(
size_t j = 16; j != 80; j += 8) {
99 W[j + 0] =
rotl<1>(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16]);
100 W[j + 1] =
rotl<1>(W[j - 2] ^ W[j - 7] ^ W[j - 13] ^ W[j - 15]);
101 W[j + 2] =
rotl<1>(W[j - 1] ^ W[j - 6] ^ W[j - 12] ^ W[j - 14]);
102 W[j + 3] =
rotl<1>(W[j ] ^ W[j - 5] ^ W[j - 11] ^ W[j - 13]);
103 W[j + 4] =
rotl<1>(W[j + 1] ^ W[j - 4] ^ W[j - 10] ^ W[j - 12]);
104 W[j + 5] =
rotl<1>(W[j + 2] ^ W[j - 3] ^ W[j - 9] ^ W[j - 11]);
105 W[j + 6] =
rotl<1>(W[j + 3] ^ W[j - 2] ^ W[j - 8] ^ W[j - 10]);
106 W[j + 7] =
rotl<1>(W[j + 4] ^ W[j - 1] ^ W[j - 7] ^ W[j - 9]);
111 F1(A, B, C, D, E, W[0]);
112 F1(E, A, B, C, D, W[1]);
113 F1(D, E, A, B, C, W[2]);
114 F1(C, D, E, A, B, W[3]);
115 F1(B, C, D, E, A, W[4]);
116 F1(A, B, C, D, E, W[5]);
117 F1(E, A, B, C, D, W[6]);
118 F1(D, E, A, B, C, W[7]);
119 F1(C, D, E, A, B, W[8]);
120 F1(B, C, D, E, A, W[9]);
121 F1(A, B, C, D, E, W[10]);
122 F1(E, A, B, C, D, W[11]);
123 F1(D, E, A, B, C, W[12]);
124 F1(C, D, E, A, B, W[13]);
125 F1(B, C, D, E, A, W[14]);
126 F1(A, B, C, D, E, W[15]);
127 F1(E, A, B, C, D, W[16]);
128 F1(D, E, A, B, C, W[17]);
129 F1(C, D, E, A, B, W[18]);
130 F1(B, C, D, E, A, W[19]);
132 F2(A, B, C, D, E, W[20]);
133 F2(E, A, B, C, D, W[21]);
134 F2(D, E, A, B, C, W[22]);
135 F2(C, D, E, A, B, W[23]);
136 F2(B, C, D, E, A, W[24]);
137 F2(A, B, C, D, E, W[25]);
138 F2(E, A, B, C, D, W[26]);
139 F2(D, E, A, B, C, W[27]);
140 F2(C, D, E, A, B, W[28]);
141 F2(B, C, D, E, A, W[29]);
142 F2(A, B, C, D, E, W[30]);
143 F2(E, A, B, C, D, W[31]);
144 F2(D, E, A, B, C, W[32]);
145 F2(C, D, E, A, B, W[33]);
146 F2(B, C, D, E, A, W[34]);
147 F2(A, B, C, D, E, W[35]);
148 F2(E, A, B, C, D, W[36]);
149 F2(D, E, A, B, C, W[37]);
150 F2(C, D, E, A, B, W[38]);
151 F2(B, C, D, E, A, W[39]);
153 F3(A, B, C, D, E, W[40]);
154 F3(E, A, B, C, D, W[41]);
155 F3(D, E, A, B, C, W[42]);
156 F3(C, D, E, A, B, W[43]);
157 F3(B, C, D, E, A, W[44]);
158 F3(A, B, C, D, E, W[45]);
159 F3(E, A, B, C, D, W[46]);
160 F3(D, E, A, B, C, W[47]);
161 F3(C, D, E, A, B, W[48]);
162 F3(B, C, D, E, A, W[49]);
163 F3(A, B, C, D, E, W[50]);
164 F3(E, A, B, C, D, W[51]);
165 F3(D, E, A, B, C, W[52]);
166 F3(C, D, E, A, B, W[53]);
167 F3(B, C, D, E, A, W[54]);
168 F3(A, B, C, D, E, W[55]);
169 F3(E, A, B, C, D, W[56]);
170 F3(D, E, A, B, C, W[57]);
171 F3(C, D, E, A, B, W[58]);
172 F3(B, C, D, E, A, W[59]);
174 F4(A, B, C, D, E, W[60]);
175 F4(E, A, B, C, D, W[61]);
176 F4(D, E, A, B, C, W[62]);
177 F4(C, D, E, A, B, W[63]);
178 F4(B, C, D, E, A, W[64]);
179 F4(A, B, C, D, E, W[65]);
180 F4(E, A, B, C, D, W[66]);
181 F4(D, E, A, B, C, W[67]);
182 F4(C, D, E, A, B, W[68]);
183 F4(B, C, D, E, A, W[69]);
184 F4(A, B, C, D, E, W[70]);
185 F4(E, A, B, C, D, W[71]);
186 F4(D, E, A, B, C, W[72]);
187 F4(C, D, E, A, B, W[73]);
188 F4(B, C, D, E, A, W[74]);
189 F4(A, B, C, D, E, W[75]);
190 F4(E, A, B, C, D, W[76]);
191 F4(D, E, A, B, C, W[77]);
192 F4(C, D, E, A, B, W[78]);
193 F4(B, C, D, E, A, W[79]);
195 A = (digest[0] += A);
196 B = (digest[1] += B);
197 C = (digest[2] += C);
198 D = (digest[3] += D);
199 E = (digest[4] += E);