From 60b8eb31271458fe34ceb37ac37470c82f85c1cc Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Sat, 21 Jul 2007 08:55:49 +0000 Subject: [PATCH] * sha1.h: Change to use version 3 of the GNU General Public License and tidy up formatting. * sha1.c: Likewise. --- ld/ChangeLog | 6 ++ ld/sha1.c | 213 ++++++++++++++++++++++++++++++----------------------------- ld/sha1.h | 18 ++--- 3 files changed, 125 insertions(+), 112 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index be99d2b..3a2463e 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2007-07-21 Nick Clifton + + * sha1.h: Change to use version 3 of the GNU General Public + License and tidy up formatting. + * sha1.c: Likewise. + 2007-07-19 Roland McGrath * genscripts.sh (source_em, fragment): New sh functions. diff --git a/ld/sha1.c b/ld/sha1.c index 035f898..d1569ed 100644 --- a/ld/sha1.c +++ b/ld/sha1.c @@ -1,12 +1,13 @@ /* sha1.c - Functions to compute SHA1 message digest of files or memory blocks according to the NIST specification FIPS-180-1. - Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006 Free Software - Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. + + This file is part of the GNU Binutils. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any + Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -20,13 +21,10 @@ /* Written by Scott G. Miller Credits: - Robert Klep -- Expansion function fix -*/ + Robert Klep -- Expansion function fix */ #include - #include "sha1.h" - #include #include @@ -54,6 +52,7 @@ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Take a pointer to a 160 bit block of data (five 32 bit ints) and initialize it to the start constants of the SHA1 algorithm. This must be called before using hash in the call to sha1_hash. */ + void sha1_init_ctx (struct sha1_ctx *ctx) { @@ -72,6 +71,7 @@ sha1_init_ctx (struct sha1_ctx *ctx) IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32-bit value. */ + void * sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf) { @@ -89,6 +89,7 @@ sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf) IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32-bit value. */ + void * sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf) { @@ -116,6 +117,7 @@ sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf) /* Compute SHA1 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ + int sha1_stream (FILE *stream, void *resblock) { @@ -163,8 +165,7 @@ sha1_stream (FILE *stream, void *resblock) } /* Process buffer with BLOCKSIZE bytes. Note that - BLOCKSIZE % 64 == 0 - */ + BLOCKSIZE % 64 == 0. */ sha1_process_block (buffer, BLOCKSIZE, &ctx); } @@ -183,6 +184,7 @@ sha1_stream (FILE *stream, void *resblock) result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ + void * sha1_buffer (const char *buffer, size_t len, void *resblock) { @@ -230,7 +232,7 @@ sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx) if (len >= 64) { #if !_STRING_ARCH_unaligned -# define alignof(type) offsetof (struct { char c; type x; }, x) +# define alignof(type) offsetof (struct { char c; type x; }, x) # define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) @@ -267,16 +269,16 @@ sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx) /* --- Code below is the primary difference between md5.c and sha1.c --- */ -/* SHA1 round constants */ +/* SHA1 round constants. */ #define K1 0x5a827999 #define K2 0x6ed9eba1 #define K3 0x8f1bbcdc #define K4 0xca62c1d6 /* Round functions. Note that F2 is the same as F4. */ -#define F1(B,C,D) ( D ^ ( B & ( C ^ D ) ) ) +#define F1(B,C,D) (D ^ (B & (C ^ D))) #define F2(B,C,D) (B ^ C ^ D) -#define F3(B,C,D) ( ( B & C ) | ( D & ( B | C ) ) ) +#define F3(B,C,D) ((B & C) | (D & (B | C))) #define F4(B,C,D) (B ^ C ^ D) /* Process LEN bytes of BUFFER, accumulating context into CTX. @@ -305,107 +307,112 @@ sha1_process_block (const void *buffer, size_t len, struct sha1_ctx *ctx) #define rol(x, n) (((x) << (n)) | ((uint32_t) (x) >> (32 - (n)))) -#define M(I) ( tm = x[I&0x0f] ^ x[(I-14)&0x0f] \ - ^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \ - , (x[I&0x0f] = rol(tm, 1)) ) - -#define R(A,B,C,D,E,F,K,M) do { E += rol( A, 5 ) \ - + F( B, C, D ) \ - + K \ - + M; \ - B = rol( B, 30 ); \ - } while(0) +#define M(I) (tm = x[I & 0x0f] ^ x[(I - 14) & 0x0f] \ + ^ x[(I - 8) & 0x0f] ^ x[(I - 3) & 0x0f] \ + , (x[I & 0x0f] = rol (tm, 1))) + +#define R(A,B,C,D,E,F,K,M) \ + do \ + { \ + E += rol (A, 5) \ + + F (B, C, D) \ + + K \ + + M; \ + B = rol (B, 30); \ + } \ + while (0) while (words < endp) { uint32_t tm; int t; + for (t = 0; t < 16; t++) { x[t] = SWAP (*words); words++; } - R( a, b, c, d, e, F1, K1, x[ 0] ); - R( e, a, b, c, d, F1, K1, x[ 1] ); - R( d, e, a, b, c, F1, K1, x[ 2] ); - R( c, d, e, a, b, F1, K1, x[ 3] ); - R( b, c, d, e, a, F1, K1, x[ 4] ); - R( a, b, c, d, e, F1, K1, x[ 5] ); - R( e, a, b, c, d, F1, K1, x[ 6] ); - R( d, e, a, b, c, F1, K1, x[ 7] ); - R( c, d, e, a, b, F1, K1, x[ 8] ); - R( b, c, d, e, a, F1, K1, x[ 9] ); - R( a, b, c, d, e, F1, K1, x[10] ); - R( e, a, b, c, d, F1, K1, x[11] ); - R( d, e, a, b, c, F1, K1, x[12] ); - R( c, d, e, a, b, F1, K1, x[13] ); - R( b, c, d, e, a, F1, K1, x[14] ); - R( a, b, c, d, e, F1, K1, x[15] ); - R( e, a, b, c, d, F1, K1, M(16) ); - R( d, e, a, b, c, F1, K1, M(17) ); - R( c, d, e, a, b, F1, K1, M(18) ); - R( b, c, d, e, a, F1, K1, M(19) ); - R( a, b, c, d, e, F2, K2, M(20) ); - R( e, a, b, c, d, F2, K2, M(21) ); - R( d, e, a, b, c, F2, K2, M(22) ); - R( c, d, e, a, b, F2, K2, M(23) ); - R( b, c, d, e, a, F2, K2, M(24) ); - R( a, b, c, d, e, F2, K2, M(25) ); - R( e, a, b, c, d, F2, K2, M(26) ); - R( d, e, a, b, c, F2, K2, M(27) ); - R( c, d, e, a, b, F2, K2, M(28) ); - R( b, c, d, e, a, F2, K2, M(29) ); - R( a, b, c, d, e, F2, K2, M(30) ); - R( e, a, b, c, d, F2, K2, M(31) ); - R( d, e, a, b, c, F2, K2, M(32) ); - R( c, d, e, a, b, F2, K2, M(33) ); - R( b, c, d, e, a, F2, K2, M(34) ); - R( a, b, c, d, e, F2, K2, M(35) ); - R( e, a, b, c, d, F2, K2, M(36) ); - R( d, e, a, b, c, F2, K2, M(37) ); - R( c, d, e, a, b, F2, K2, M(38) ); - R( b, c, d, e, a, F2, K2, M(39) ); - R( a, b, c, d, e, F3, K3, M(40) ); - R( e, a, b, c, d, F3, K3, M(41) ); - R( d, e, a, b, c, F3, K3, M(42) ); - R( c, d, e, a, b, F3, K3, M(43) ); - R( b, c, d, e, a, F3, K3, M(44) ); - R( a, b, c, d, e, F3, K3, M(45) ); - R( e, a, b, c, d, F3, K3, M(46) ); - R( d, e, a, b, c, F3, K3, M(47) ); - R( c, d, e, a, b, F3, K3, M(48) ); - R( b, c, d, e, a, F3, K3, M(49) ); - R( a, b, c, d, e, F3, K3, M(50) ); - R( e, a, b, c, d, F3, K3, M(51) ); - R( d, e, a, b, c, F3, K3, M(52) ); - R( c, d, e, a, b, F3, K3, M(53) ); - R( b, c, d, e, a, F3, K3, M(54) ); - R( a, b, c, d, e, F3, K3, M(55) ); - R( e, a, b, c, d, F3, K3, M(56) ); - R( d, e, a, b, c, F3, K3, M(57) ); - R( c, d, e, a, b, F3, K3, M(58) ); - R( b, c, d, e, a, F3, K3, M(59) ); - R( a, b, c, d, e, F4, K4, M(60) ); - R( e, a, b, c, d, F4, K4, M(61) ); - R( d, e, a, b, c, F4, K4, M(62) ); - R( c, d, e, a, b, F4, K4, M(63) ); - R( b, c, d, e, a, F4, K4, M(64) ); - R( a, b, c, d, e, F4, K4, M(65) ); - R( e, a, b, c, d, F4, K4, M(66) ); - R( d, e, a, b, c, F4, K4, M(67) ); - R( c, d, e, a, b, F4, K4, M(68) ); - R( b, c, d, e, a, F4, K4, M(69) ); - R( a, b, c, d, e, F4, K4, M(70) ); - R( e, a, b, c, d, F4, K4, M(71) ); - R( d, e, a, b, c, F4, K4, M(72) ); - R( c, d, e, a, b, F4, K4, M(73) ); - R( b, c, d, e, a, F4, K4, M(74) ); - R( a, b, c, d, e, F4, K4, M(75) ); - R( e, a, b, c, d, F4, K4, M(76) ); - R( d, e, a, b, c, F4, K4, M(77) ); - R( c, d, e, a, b, F4, K4, M(78) ); - R( b, c, d, e, a, F4, K4, M(79) ); + R (a, b, c, d, e, F1, K1, x[ 0]); + R (e, a, b, c, d, F1, K1, x[ 1]); + R (d, e, a, b, c, F1, K1, x[ 2]); + R (c, d, e, a, b, F1, K1, x[ 3]); + R (b, c, d, e, a, F1, K1, x[ 4]); + R (a, b, c, d, e, F1, K1, x[ 5]); + R (e, a, b, c, d, F1, K1, x[ 6]); + R (d, e, a, b, c, F1, K1, x[ 7]); + R (c, d, e, a, b, F1, K1, x[ 8]); + R (b, c, d, e, a, F1, K1, x[ 9]); + R (a, b, c, d, e, F1, K1, x[10]); + R (e, a, b, c, d, F1, K1, x[11]); + R (d, e, a, b, c, F1, K1, x[12]); + R (c, d, e, a, b, F1, K1, x[13]); + R (b, c, d, e, a, F1, K1, x[14]); + R (a, b, c, d, e, F1, K1, x[15]); + R (e, a, b, c, d, F1, K1, M(16)); + R (d, e, a, b, c, F1, K1, M(17)); + R (c, d, e, a, b, F1, K1, M(18)); + R (b, c, d, e, a, F1, K1, M(19)); + R (a, b, c, d, e, F2, K2, M(20)); + R (e, a, b, c, d, F2, K2, M(21)); + R (d, e, a, b, c, F2, K2, M(22)); + R (c, d, e, a, b, F2, K2, M(23)); + R (b, c, d, e, a, F2, K2, M(24)); + R (a, b, c, d, e, F2, K2, M(25)); + R (e, a, b, c, d, F2, K2, M(26)); + R (d, e, a, b, c, F2, K2, M(27)); + R (c, d, e, a, b, F2, K2, M(28)); + R (b, c, d, e, a, F2, K2, M(29)); + R (a, b, c, d, e, F2, K2, M(30)); + R (e, a, b, c, d, F2, K2, M(31)); + R (d, e, a, b, c, F2, K2, M(32)); + R (c, d, e, a, b, F2, K2, M(33)); + R (b, c, d, e, a, F2, K2, M(34)); + R (a, b, c, d, e, F2, K2, M(35)); + R (e, a, b, c, d, F2, K2, M(36)); + R (d, e, a, b, c, F2, K2, M(37)); + R (c, d, e, a, b, F2, K2, M(38)); + R (b, c, d, e, a, F2, K2, M(39)); + R (a, b, c, d, e, F3, K3, M(40)); + R (e, a, b, c, d, F3, K3, M(41)); + R (d, e, a, b, c, F3, K3, M(42)); + R (c, d, e, a, b, F3, K3, M(43)); + R (b, c, d, e, a, F3, K3, M(44)); + R (a, b, c, d, e, F3, K3, M(45)); + R (e, a, b, c, d, F3, K3, M(46)); + R (d, e, a, b, c, F3, K3, M(47)); + R (c, d, e, a, b, F3, K3, M(48)); + R (b, c, d, e, a, F3, K3, M(49)); + R (a, b, c, d, e, F3, K3, M(50)); + R (e, a, b, c, d, F3, K3, M(51)); + R (d, e, a, b, c, F3, K3, M(52)); + R (c, d, e, a, b, F3, K3, M(53)); + R (b, c, d, e, a, F3, K3, M(54)); + R (a, b, c, d, e, F3, K3, M(55)); + R (e, a, b, c, d, F3, K3, M(56)); + R (d, e, a, b, c, F3, K3, M(57)); + R (c, d, e, a, b, F3, K3, M(58)); + R (b, c, d, e, a, F3, K3, M(59)); + R (a, b, c, d, e, F4, K4, M(60)); + R (e, a, b, c, d, F4, K4, M(61)); + R (d, e, a, b, c, F4, K4, M(62)); + R (c, d, e, a, b, F4, K4, M(63)); + R (b, c, d, e, a, F4, K4, M(64)); + R (a, b, c, d, e, F4, K4, M(65)); + R (e, a, b, c, d, F4, K4, M(66)); + R (d, e, a, b, c, F4, K4, M(67)); + R (c, d, e, a, b, F4, K4, M(68)); + R (b, c, d, e, a, F4, K4, M(69)); + R (a, b, c, d, e, F4, K4, M(70)); + R (e, a, b, c, d, F4, K4, M(71)); + R (d, e, a, b, c, F4, K4, M(72)); + R (c, d, e, a, b, F4, K4, M(73)); + R (b, c, d, e, a, F4, K4, M(74)); + R (a, b, c, d, e, F4, K4, M(75)); + R (e, a, b, c, d, F4, K4, M(76)); + R (d, e, a, b, c, F4, K4, M(77)); + R (c, d, e, a, b, F4, K4, M(78)); + R (b, c, d, e, a, F4, K4, M(79)); a = ctx->A += a; b = ctx->B += b; diff --git a/ld/sha1.h b/ld/sha1.h index 9545f0b..43b6dde 100644 --- a/ld/sha1.h +++ b/ld/sha1.h @@ -1,10 +1,12 @@ /* Declarations of functions and data types used for SHA1 sum library functions. - Copyright (C) 2000, 2001, 2003, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. + + This file is part of the GNU Binutils. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any + Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -17,10 +19,10 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef SHA1_H -# define SHA1_H 1 +#define SHA1_H 1 -# include -# include +#include +#include /* Structure to save state of computation between the single steps. */ struct sha1_ctx @@ -43,7 +45,7 @@ extern void sha1_init_ctx (struct sha1_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. - It is necessary that LEN is a multiple of 64!!! */ + It is necessary that LEN is a multiple of 64! */ extern void sha1_process_block (const void *buffer, size_t len, struct sha1_ctx *ctx); @@ -63,7 +65,6 @@ extern void sha1_process_bytes (const void *buffer, size_t len, aligned for a 32 bits value. */ extern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf); - /* Put result from CTX in first 20 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. @@ -72,7 +73,6 @@ extern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf); aligned for a 32 bits value. */ extern void *sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf); - /* Compute SHA1 message digest for bytes read from STREAM. The resulting message digest number will be written into the 20 bytes beginning at RESBLOCK. */ @@ -84,4 +84,4 @@ extern int sha1_stream (FILE *stream, void *resblock); digest. */ extern void *sha1_buffer (const char *buffer, size_t len, void *resblock); -#endif +#endif /* SHA1_H */ -- 2.7.4