mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-18 14:40:06 +00:00
Fix BZ#14090 - md5/sha512 with large sizes
This commit is contained in:
parent
be75d75807
commit
02dcb6c5a2
@ -1,3 +1,11 @@
|
|||||||
|
2012-08-15 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
|
||||||
|
[BZ #14090]
|
||||||
|
* crypt/md5.c (md5_process_block): Don't assume the buffer
|
||||||
|
length is less than 2**32.
|
||||||
|
* crypt/sha512.c (sha512_process_block): Don't assume the buffer
|
||||||
|
length is less than 2**64.
|
||||||
|
|
||||||
2012-08-15 Roland McGrath <roland@hack.frob.com>
|
2012-08-15 Roland McGrath <roland@hack.frob.com>
|
||||||
|
|
||||||
* string/str-two-way.h: Include <sys/param.h>.
|
* string/str-two-way.h: Include <sys/param.h>.
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
/* Functions to compute MD5 message digest of files or memory blocks.
|
/* Functions to compute MD5 message digest of files or memory blocks.
|
||||||
according to the definition of MD5 in RFC 1321 from April 1992.
|
according to the definition of MD5 in RFC 1321 from April 1992.
|
||||||
Copyright (C) 1995,1996,1997,1999,2000,2001,2005,2011
|
Copyright (C) 1995-2012 Free Software Foundation, Inc.
|
||||||
Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -312,13 +311,13 @@ md5_process_block (buffer, len, ctx)
|
|||||||
md5_uint32 B = ctx->B;
|
md5_uint32 B = ctx->B;
|
||||||
md5_uint32 C = ctx->C;
|
md5_uint32 C = ctx->C;
|
||||||
md5_uint32 D = ctx->D;
|
md5_uint32 D = ctx->D;
|
||||||
|
md5_uint32 lolen = len;
|
||||||
|
|
||||||
/* First increment the byte count. RFC 1321 specifies the possible
|
/* First increment the byte count. RFC 1321 specifies the possible
|
||||||
length of the file up to 2^64 bits. Here we only compute the
|
length of the file up to 2^64 bits. Here we only compute the
|
||||||
number of bytes. Do a double word increment. */
|
number of bytes. Do a double word increment. */
|
||||||
ctx->total[0] += len;
|
ctx->total[0] += lolen;
|
||||||
if (ctx->total[0] < len)
|
ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen);
|
||||||
++ctx->total[1];
|
|
||||||
|
|
||||||
/* Process all bytes in the buffer with 64 bytes in each round of
|
/* Process all bytes in the buffer with 64 bytes in each round of
|
||||||
the loop. */
|
the loop. */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* Functions to compute SHA512 message digest of files or memory blocks.
|
/* Functions to compute SHA512 message digest of files or memory blocks.
|
||||||
according to the definition of SHA512 in FIPS 180-2.
|
according to the definition of SHA512 in FIPS 180-2.
|
||||||
Copyright (C) 2007, 2011 Free Software Foundation, Inc.
|
Copyright (C) 2007-2012 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -123,9 +123,10 @@ sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx)
|
|||||||
#ifdef USE_TOTAL128
|
#ifdef USE_TOTAL128
|
||||||
ctx->total128 += len;
|
ctx->total128 += len;
|
||||||
#else
|
#else
|
||||||
ctx->total[TOTAL128_low] += len;
|
uint64_t lolen = len;
|
||||||
if (ctx->total[TOTAL128_low] < len)
|
ctx->total[TOTAL128_low] += lolen;
|
||||||
++ctx->total[TOTAL128_high];
|
ctx->total[TOTAL128_high] += ((len >> 63 >> 1)
|
||||||
|
+ (ctx->total[TOTAL128_low] < lolen));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Process all bytes in the buffer with 128 bytes in each round of
|
/* Process all bytes in the buffer with 128 bytes in each round of
|
||||||
|
Loading…
Reference in New Issue
Block a user