1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00

Optimize long-word additions in SHA implementation

This commit is contained in:
Ulrich Drepper
2011-07-02 12:30:03 -04:00
parent 99231d9abe
commit fcfc776bc6
5 changed files with 61 additions and 14 deletions

View File

@ -1,6 +1,6 @@
/* Functions to compute SHA512 message digest of files or memory blocks.
according to the definition of SHA512 in FIPS 180-2.
Copyright (C) 2007 Free Software Foundation, Inc.
Copyright (C) 2007, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -121,9 +121,13 @@ sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx)
/* First increment the byte count. FIPS 180-2 specifies the possible
length of the file up to 2^128 bits. Here we only compute the
number of bytes. Do a double word increment. */
#ifdef USE_TOTAL128
ctx->total128 += len;
#else
ctx->total[0] += len;
if (ctx->total[0] < len)
++ctx->total[1];
#endif
/* Process all bytes in the buffer with 128 bytes in each round of
the loop. */
@ -237,9 +241,13 @@ __sha512_finish_ctx (ctx, resbuf)
size_t pad;
/* Now count remaining bytes. */
#ifdef USE_TOTAL128
ctx->total128 += bytes;
#else
ctx->total[0] += bytes;
if (ctx->total[0] < bytes)
++ctx->total[1];
#endif
pad = bytes >= 112 ? 128 + 112 - bytes : 112 - bytes;
memcpy (&ctx->buffer[bytes], fillbuf, pad);