diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/sha/sha512.c | 135 |
1 files changed, 1 insertions, 134 deletions
diff --git a/src/lib/libcrypto/sha/sha512.c b/src/lib/libcrypto/sha/sha512.c index 4a4194350b..2840fa9446 100644 --- a/src/lib/libcrypto/sha/sha512.c +++ b/src/lib/libcrypto/sha/sha512.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: sha512.c,v 1.34 2023/04/14 10:45:15 jsing Exp $ */ | 1 | /* $OpenBSD: sha512.c,v 1.35 2023/05/12 10:10:55 jsing Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -153,137 +153,6 @@ static const SHA_LONG64 K512[80] = { | |||
153 | #define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) | 153 | #define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) |
154 | #define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) | 154 | #define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) |
155 | 155 | ||
156 | |||
157 | #if defined(__i386) || defined(__i386__) || defined(_M_IX86) | ||
158 | /* | ||
159 | * This code should give better results on 32-bit CPU with less than | ||
160 | * ~24 registers, both size and performance wise... | ||
161 | */ | ||
162 | static void | ||
163 | sha512_block_data_order(SHA512_CTX *ctx, const void *in, size_t num) | ||
164 | { | ||
165 | const SHA_LONG64 *W = in; | ||
166 | SHA_LONG64 A, E, T; | ||
167 | SHA_LONG64 X[9 + 80], *F; | ||
168 | int i; | ||
169 | |||
170 | while (num--) { | ||
171 | |||
172 | F = X + 80; | ||
173 | A = ctx->h[0]; | ||
174 | F[1] = ctx->h[1]; | ||
175 | F[2] = ctx->h[2]; | ||
176 | F[3] = ctx->h[3]; | ||
177 | E = ctx->h[4]; | ||
178 | F[5] = ctx->h[5]; | ||
179 | F[6] = ctx->h[6]; | ||
180 | F[7] = ctx->h[7]; | ||
181 | |||
182 | for (i = 0; i < 16; i++, F--) { | ||
183 | T = PULL64(W[i]); | ||
184 | F[0] = A; | ||
185 | F[4] = E; | ||
186 | F[8] = T; | ||
187 | T += F[7] + Sigma1(E) + Ch(E, F[5], F[6]) + K512[i]; | ||
188 | E = F[3] + T; | ||
189 | A = T + Sigma0(A) + Maj(A, F[1], F[2]); | ||
190 | } | ||
191 | |||
192 | for (; i < 80; i++, F--) { | ||
193 | T = sigma0(F[8 + 16 - 1]); | ||
194 | T += sigma1(F[8 + 16 - 14]); | ||
195 | T += F[8 + 16] + F[8 + 16 - 9]; | ||
196 | |||
197 | F[0] = A; | ||
198 | F[4] = E; | ||
199 | F[8] = T; | ||
200 | T += F[7] + Sigma1(E) + Ch(E, F[5], F[6]) + K512[i]; | ||
201 | E = F[3] + T; | ||
202 | A = T + Sigma0(A) + Maj(A, F[1], F[2]); | ||
203 | } | ||
204 | |||
205 | ctx->h[0] += A; | ||
206 | ctx->h[1] += F[1]; | ||
207 | ctx->h[2] += F[2]; | ||
208 | ctx->h[3] += F[3]; | ||
209 | ctx->h[4] += E; | ||
210 | ctx->h[5] += F[5]; | ||
211 | ctx->h[6] += F[6]; | ||
212 | ctx->h[7] += F[7]; | ||
213 | |||
214 | W += SHA_LBLOCK; | ||
215 | } | ||
216 | } | ||
217 | |||
218 | #elif defined(OPENSSL_SMALL_FOOTPRINT) | ||
219 | |||
220 | static void | ||
221 | sha512_block_data_order(SHA512_CTX *ctx, const void *in, size_t num) | ||
222 | { | ||
223 | const SHA_LONG64 *W = in; | ||
224 | SHA_LONG64 a, b, c, d, e, f, g, h, s0, s1, T1, T2; | ||
225 | SHA_LONG64 X[16]; | ||
226 | int i; | ||
227 | |||
228 | while (num--) { | ||
229 | |||
230 | a = ctx->h[0]; | ||
231 | b = ctx->h[1]; | ||
232 | c = ctx->h[2]; | ||
233 | d = ctx->h[3]; | ||
234 | e = ctx->h[4]; | ||
235 | f = ctx->h[5]; | ||
236 | g = ctx->h[6]; | ||
237 | h = ctx->h[7]; | ||
238 | |||
239 | for (i = 0; i < 16; i++) { | ||
240 | T1 = X[i] = PULL64(W[i]); | ||
241 | T1 += h + Sigma1(e) + Ch(e, f, g) + K512[i]; | ||
242 | T2 = Sigma0(a) + Maj(a, b, c); | ||
243 | h = g; | ||
244 | g = f; | ||
245 | f = e; | ||
246 | e = d + T1; | ||
247 | d = c; | ||
248 | c = b; | ||
249 | b = a; | ||
250 | a = T1 + T2; | ||
251 | } | ||
252 | |||
253 | for (; i < 80; i++) { | ||
254 | s0 = X[(i + 1)&0x0f]; | ||
255 | s0 = sigma0(s0); | ||
256 | s1 = X[(i + 14)&0x0f]; | ||
257 | s1 = sigma1(s1); | ||
258 | |||
259 | T1 = X[i&0xf] += s0 + s1 + X[(i + 9)&0xf]; | ||
260 | T1 += h + Sigma1(e) + Ch(e, f, g) + K512[i]; | ||
261 | T2 = Sigma0(a) + Maj(a, b, c); | ||
262 | h = g; | ||
263 | g = f; | ||
264 | f = e; | ||
265 | e = d + T1; | ||
266 | d = c; | ||
267 | c = b; | ||
268 | b = a; | ||
269 | a = T1 + T2; | ||
270 | } | ||
271 | |||
272 | ctx->h[0] += a; | ||
273 | ctx->h[1] += b; | ||
274 | ctx->h[2] += c; | ||
275 | ctx->h[3] += d; | ||
276 | ctx->h[4] += e; | ||
277 | ctx->h[5] += f; | ||
278 | ctx->h[6] += g; | ||
279 | ctx->h[7] += h; | ||
280 | |||
281 | W += SHA_LBLOCK; | ||
282 | } | ||
283 | } | ||
284 | |||
285 | #else | ||
286 | |||
287 | #define ROUND_00_15(i, a, b, c, d, e, f, g, h) do { \ | 156 | #define ROUND_00_15(i, a, b, c, d, e, f, g, h) do { \ |
288 | T1 += h + Sigma1(e) + Ch(e, f, g) + K512[i]; \ | 157 | T1 += h + Sigma1(e) + Ch(e, f, g) + K512[i]; \ |
289 | h = Sigma0(a) + Maj(a, b, c); \ | 158 | h = Sigma0(a) + Maj(a, b, c); \ |
@@ -379,8 +248,6 @@ sha512_block_data_order(SHA512_CTX *ctx, const void *in, size_t num) | |||
379 | } | 248 | } |
380 | } | 249 | } |
381 | 250 | ||
382 | #endif | ||
383 | |||
384 | #endif /* SHA512_ASM */ | 251 | #endif /* SHA512_ASM */ |
385 | 252 | ||
386 | int | 253 | int |