diff options
Diffstat (limited to 'gl/sha1.c')
-rw-r--r-- | gl/sha1.c | 20 |
1 files changed, 9 insertions, 11 deletions
@@ -1,8 +1,7 @@ | |||
1 | /* sha1.c - Functions to compute SHA1 message digest of files or | 1 | /* sha1.c - Functions to compute SHA1 message digest of files or |
2 | memory blocks according to the NIST specification FIPS-180-1. | 2 | memory blocks according to the NIST specification FIPS-180-1. |
3 | 3 | ||
4 | Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2008, 2009, 2010 Free | 4 | Copyright (C) 2000-2001, 2003-2006, 2008-2013 Free Software Foundation, Inc. |
5 | Software Foundation, Inc. | ||
6 | 5 | ||
7 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
8 | under the terms of the GNU General Public License as published by the | 7 | under the terms of the GNU General Public License as published by the |
@@ -15,8 +14,7 @@ | |||
15 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
16 | 15 | ||
17 | You should have received a copy of the GNU General Public License | 16 | You should have received a copy of the GNU General Public License |
18 | along with this program; if not, write to the Free Software Foundation, | 17 | along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
19 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
20 | 18 | ||
21 | /* Written by Scott G. Miller | 19 | /* Written by Scott G. Miller |
22 | Credits: | 20 | Credits: |
@@ -27,7 +25,8 @@ | |||
27 | 25 | ||
28 | #include "sha1.h" | 26 | #include "sha1.h" |
29 | 27 | ||
30 | #include <stddef.h> | 28 | #include <stdalign.h> |
29 | #include <stdint.h> | ||
31 | #include <stdlib.h> | 30 | #include <stdlib.h> |
32 | #include <string.h> | 31 | #include <string.h> |
33 | 32 | ||
@@ -71,7 +70,7 @@ sha1_init_ctx (struct sha1_ctx *ctx) | |||
71 | /* Copy the 4 byte value from v into the memory location pointed to by *cp, | 70 | /* Copy the 4 byte value from v into the memory location pointed to by *cp, |
72 | If your architecture allows unaligned access this is equivalent to | 71 | If your architecture allows unaligned access this is equivalent to |
73 | * (uint32_t *) cp = v */ | 72 | * (uint32_t *) cp = v */ |
74 | static inline void | 73 | static void |
75 | set_uint32 (char *cp, uint32_t v) | 74 | set_uint32 (char *cp, uint32_t v) |
76 | { | 75 | { |
77 | memcpy (cp, &v, sizeof v); | 76 | memcpy (cp, &v, sizeof v); |
@@ -242,8 +241,7 @@ sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx) | |||
242 | if (len >= 64) | 241 | if (len >= 64) |
243 | { | 242 | { |
244 | #if !_STRING_ARCH_unaligned | 243 | #if !_STRING_ARCH_unaligned |
245 | # define alignof(type) offsetof (struct { char c; type x; }, x) | 244 | # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) |
246 | # define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) | ||
247 | if (UNALIGNED_P (buffer)) | 245 | if (UNALIGNED_P (buffer)) |
248 | while (len > 64) | 246 | while (len > 64) |
249 | { | 247 | { |
@@ -307,13 +305,13 @@ sha1_process_block (const void *buffer, size_t len, struct sha1_ctx *ctx) | |||
307 | uint32_t c = ctx->C; | 305 | uint32_t c = ctx->C; |
308 | uint32_t d = ctx->D; | 306 | uint32_t d = ctx->D; |
309 | uint32_t e = ctx->E; | 307 | uint32_t e = ctx->E; |
308 | uint32_t lolen = len; | ||
310 | 309 | ||
311 | /* First increment the byte count. RFC 1321 specifies the possible | 310 | /* First increment the byte count. RFC 1321 specifies the possible |
312 | length of the file up to 2^64 bits. Here we only compute the | 311 | length of the file up to 2^64 bits. Here we only compute the |
313 | number of bytes. Do a double word increment. */ | 312 | number of bytes. Do a double word increment. */ |
314 | ctx->total[0] += len; | 313 | ctx->total[0] += lolen; |
315 | if (ctx->total[0] < len) | 314 | ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen); |
316 | ++ctx->total[1]; | ||
317 | 315 | ||
318 | #define rol(x, n) (((x) << (n)) | ((uint32_t) (x) >> (32 - (n)))) | 316 | #define rol(x, n) (((x) << (n)) | ((uint32_t) (x) >> (32 - (n)))) |
319 | 317 | ||