Mark Wielaard 864167
diff --git a/lib/ChangeLog b/lib/ChangeLog
Mark Wielaard 864167
index 1b8b42b..cf77688 100644
Mark Wielaard 864167
--- a/lib/ChangeLog
Mark Wielaard 864167
+++ b/lib/ChangeLog
Mark Wielaard 864167
@@ -1,3 +1,13 @@
Mark Wielaard 864167
+2011-07-09  Roland McGrath  <roland@hack.frob.com>
Mark Wielaard 864167
+
Mark Wielaard 864167
+	* sha1.c (be64_copy): New function.
Mark Wielaard 864167
+	(sha1_finish_ctx): Use it.
Mark Wielaard 864167
+	* md5.c (le64_copy): New function.
Mark Wielaard 864167
+	(md5_finish_ctx): Use it.
Mark Wielaard 864167
+	* system.h (LE32, BE32): New macros, using <endian.h> and <byteswap.h>.
Mark Wielaard 864167
+	* md5.c (SWAP): Use LE32.
Mark Wielaard 864167
+	* sha1.c (SWAP): Use BE32.
Mark Wielaard 864167
+
Mark Wielaard 864167
 2010-06-16  Roland McGrath  <roland@redhat.com>
Mark Wielaard 864167
 
Mark Wielaard 864167
 	* dynamicsizehash.h (HASHTYPE): New macro.
Mark Wielaard 864167
diff --git a/lib/md5.c b/lib/md5.c
Mark Wielaard 864167
index 0770561..1f2d5d3 100644
Mark Wielaard 864167
--- a/lib/md5.c
Mark Wielaard 864167
+++ b/lib/md5.c
Mark Wielaard 864167
@@ -1,6 +1,6 @@
Mark Wielaard 864167
 /* Functions to compute MD5 message digest of files or memory blocks.
Mark Wielaard 864167
    according to the definition of MD5 in RFC 1321 from April 1992.
Mark Wielaard 864167
-   Copyright (C) 1995,1996,1997,1999,2000,2001,2005 Red Hat, Inc.
Mark Wielaard 864167
+   Copyright (C) 1995-2011 Red Hat, Inc.
Mark Wielaard 864167
    This file is part of Red Hat elfutils.
Mark Wielaard 864167
    Written by Ulrich Drepper <drepper@redhat.com>, 1995.
Mark Wielaard 864167
 
Mark Wielaard 864167
@@ -29,20 +29,14 @@
Mark Wielaard 864167
 # include <config.h>
Mark Wielaard 864167
 #endif
Mark Wielaard 864167
 
Mark Wielaard 864167
-#include <endian.h>
Mark Wielaard 864167
 #include <stdlib.h>
Mark Wielaard 864167
 #include <string.h>
Mark Wielaard 864167
 #include <sys/types.h>
Mark Wielaard 864167
 
Mark Wielaard 864167
 #include "md5.h"
Mark Wielaard 864167
+#include "system.h"
Mark Wielaard 864167
 
Mark Wielaard 864167
-#if __BYTE_ORDER == __BIG_ENDIAN
Mark Wielaard 864167
-# define SWAP(n)							\
Mark Wielaard 864167
-    (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
Mark Wielaard 864167
-#else
Mark Wielaard 864167
-# define SWAP(n) (n)
Mark Wielaard 864167
-#endif
Mark Wielaard 864167
-
Mark Wielaard 864167
+#define SWAP(n) LE32 (n)
Mark Wielaard 864167
 
Mark Wielaard 864167
 /* This array contains the bytes used to pad the buffer to the next
Mark Wielaard 864167
    64-byte boundary.  (RFC 1321, 3.1: Step 1)  */
Mark Wielaard 864167
@@ -82,6 +76,16 @@ md5_read_ctx (ctx, resbuf)
Mark Wielaard 864167
   return resbuf;
Mark Wielaard 864167
 }
Mark Wielaard 864167
 
Mark Wielaard 864167
+static void
Mark Wielaard 864167
+le64_copy (char *dest, uint64_t x)
Mark Wielaard 864167
+{
Mark Wielaard 864167
+  for (size_t i = 0; i < 8; ++i)
Mark Wielaard 864167
+    {
Mark Wielaard 864167
+      dest[i] = (uint8_t) x;
Mark Wielaard 864167
+      x >>= 8;
Mark Wielaard 864167
+    }
Mark Wielaard 864167
+}
Mark Wielaard 864167
+
Mark Wielaard 864167
 /* Process the remaining bytes in the internal buffer and the usual
Mark Wielaard 864167
    prolog according to the standard and write the result to RESBUF.
Mark Wielaard 864167
 
Mark Wielaard 864167
@@ -105,9 +109,10 @@ md5_finish_ctx (ctx, resbuf)
Mark Wielaard 864167
   memcpy (&ctx->buffer[bytes], fillbuf, pad);
Mark Wielaard 864167
 
Mark Wielaard 864167
   /* Put the 64-bit file length in *bits* at the end of the buffer.  */
Mark Wielaard 864167
-  *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
Mark Wielaard 864167
-  *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
Mark Wielaard 864167
-							(ctx->total[0] >> 29));
Mark Wielaard 864167
+  const uint64_t bit_length = ((ctx->total[0] << 3)
Mark Wielaard 864167
+			       + ((uint64_t) ((ctx->total[1] << 3) |
Mark Wielaard 864167
+					      (ctx->total[0] >> 29)) << 32));
Mark Wielaard 864167
+  le64_copy (&ctx->buffer[bytes + pad], bit_length);
Mark Wielaard 864167
 
Mark Wielaard 864167
   /* Process last bytes.  */
Mark Wielaard 864167
   md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
Mark Wielaard 864167
diff --git a/lib/sha1.c b/lib/sha1.c
Mark Wielaard 864167
index 0459cd6..53ddb78 100644
Mark Wielaard 864167
--- a/lib/sha1.c
Mark Wielaard 864167
+++ b/lib/sha1.c
Mark Wielaard 864167
@@ -1,6 +1,6 @@
Mark Wielaard 864167
 /* Functions to compute SHA1 message digest of files or memory blocks.
Mark Wielaard 864167
    according to the definition of SHA1 in FIPS 180-1 from April 1997.
Mark Wielaard 864167
-   Copyright (C) 2008 Red Hat, Inc.
Mark Wielaard 864167
+   Copyright (C) 2008-2011 Red Hat, Inc.
Mark Wielaard 864167
    This file is part of Red Hat elfutils.
Mark Wielaard 864167
    Written by Ulrich Drepper <drepper@redhat.com>, 2008.
Mark Wielaard 864167
 
Mark Wielaard 864167
@@ -29,20 +29,14 @@
Mark Wielaard 864167
 # include <config.h>
Mark Wielaard 864167
 #endif
Mark Wielaard 864167
 
Mark Wielaard 864167
-#include <endian.h>
Mark Wielaard 864167
 #include <stdlib.h>
Mark Wielaard 864167
 #include <string.h>
Mark Wielaard 864167
 #include <sys/types.h>
Mark Wielaard 864167
 
Mark Wielaard 864167
 #include "sha1.h"
Mark Wielaard 864167
+#include "system.h"
Mark Wielaard 864167
 
Mark Wielaard 864167
-#if __BYTE_ORDER == __LITTLE_ENDIAN
Mark Wielaard 864167
-# include <byteswap.h>
Mark Wielaard 864167
-# define SWAP(n) bswap_32 (n)
Mark Wielaard 864167
-#else
Mark Wielaard 864167
-# define SWAP(n) (n)
Mark Wielaard 864167
-#endif
Mark Wielaard 864167
-
Mark Wielaard 864167
+#define SWAP(n) BE32 (n)
Mark Wielaard 864167
 
Mark Wielaard 864167
 /* This array contains the bytes used to pad the buffer to the next
Mark Wielaard 864167
    64-byte boundary.  */
Mark Wielaard 864167
@@ -83,6 +77,13 @@ sha1_read_ctx (ctx, resbuf)
Mark Wielaard 864167
   return resbuf;
Mark Wielaard 864167
 }
Mark Wielaard 864167
 
Mark Wielaard 864167
+static void
Mark Wielaard 864167
+be64_copy (char *dest, uint64_t x)
Mark Wielaard 864167
+{
Mark Wielaard 864167
+  for (size_t i = 8; i-- > 0; x >>= 8)
Mark Wielaard 864167
+    dest[i] = (uint8_t) x;
Mark Wielaard 864167
+}
Mark Wielaard 864167
+
Mark Wielaard 864167
 /* Process the remaining bytes in the internal buffer and the usual
Mark Wielaard 864167
    prolog according to the standard and write the result to RESBUF.
Mark Wielaard 864167
 
Mark Wielaard 864167
@@ -106,9 +107,10 @@ sha1_finish_ctx (ctx, resbuf)
Mark Wielaard 864167
   memcpy (&ctx->buffer[bytes], fillbuf, pad);
Mark Wielaard 864167
 
Mark Wielaard 864167
   /* Put the 64-bit file length in *bits* at the end of the buffer.  */
Mark Wielaard 864167
-  *(sha1_uint32 *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) |
Mark Wielaard 864167
-						     (ctx->total[0] >> 29));
Mark Wielaard 864167
-  *(sha1_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP (ctx->total[0] << 3);
Mark Wielaard 864167
+  const uint64_t bit_length = ((ctx->total[0] << 3)
Mark Wielaard 864167
+			       + ((uint64_t) ((ctx->total[1] << 3) |
Mark Wielaard 864167
+					      (ctx->total[0] >> 29)) << 32));
Mark Wielaard 864167
+  be64_copy (&ctx->buffer[bytes + pad], bit_length);
Mark Wielaard 864167
 
Mark Wielaard 864167
   /* Process last bytes.  */
Mark Wielaard 864167
   sha1_process_block (ctx->buffer, bytes + pad + 8, ctx);
Mark Wielaard 864167
diff --git a/lib/system.h b/lib/system.h
Mark Wielaard 864167
index 10b4734..2695426 100644
Mark Wielaard 864167
--- a/lib/system.h
Mark Wielaard 864167
+++ b/lib/system.h
Mark Wielaard 864167
@@ -1,5 +1,5 @@
Mark Wielaard 864167
 /* Declarations for common convenience functions.
Mark Wielaard 864167
-   Copyright (C) 2006, 2009 Red Hat, Inc.
Mark Wielaard 864167
+   Copyright (C) 2006-2011 Red Hat, Inc.
Mark Wielaard 864167
    This file is part of Red Hat elfutils.
Mark Wielaard 864167
 
Mark Wielaard 864167
    Red Hat elfutils is free software; you can redistribute it and/or modify
Mark Wielaard 864167
@@ -51,6 +51,18 @@
Mark Wielaard 864167
 
Mark Wielaard 864167
 #include <stddef.h>
Mark Wielaard 864167
 #include <stdint.h>
Mark Wielaard 864167
+#include <endian.h>
Mark Wielaard 864167
+#include <byteswap.h>
Mark Wielaard 864167
+
Mark Wielaard 864167
+#if __BYTE_ORDER == __LITTLE_ENDIAN
Mark Wielaard 864167
+# define LE32(n)	(n)
Mark Wielaard 864167
+# define BE32(n)	bswap_32 (n)
Mark Wielaard 864167
+#elif __BYTE_ORDER == __BIG_ENDIAN
Mark Wielaard 864167
+# define BE32(n)	(n)
Mark Wielaard 864167
+# define LE32(n)	bswap_32 (n)
Mark Wielaard 864167
+#else
Mark Wielaard 864167
+# error "Unknown byte order"
Mark Wielaard 864167
+#endif
Mark Wielaard 864167
 
Mark Wielaard 864167
 extern void *xmalloc (size_t) __attribute__ ((__malloc__));
Mark Wielaard 864167
 extern void *xcalloc (size_t, size_t) __attribute__ ((__malloc__));
Mark Wielaard 864167
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
Mark Wielaard 864167
index 0cbeb85..720b767 100644
Mark Wielaard 864167
--- a/libdwfl/ChangeLog
Mark Wielaard 864167
+++ b/libdwfl/ChangeLog
Mark Wielaard 864167
@@ -1,3 +1,7 @@
Mark Wielaard 864167
+2011-07-09  Roland McGrath  <roland@hack.frob.com>
Mark Wielaard 864167
+
Mark Wielaard 864167
+	* image-header.c (LE32): Macro removed (now in lib/system.h).
Mark Wielaard 864167
+
Mark Wielaard 864167
 2011-02-11  Roland McGrath  <roland@redhat.com>
Mark Wielaard 864167
 
Mark Wielaard 864167
 	* linux-kernel-modules.c (try_kernel_name): Try .gz, .bz2, .xz
Mark Wielaard 864167
diff --git a/libdwfl/image-header.c b/libdwfl/image-header.c
Mark Wielaard 864167
index 6341fc8..c36d10c 100644
Mark Wielaard 864167
--- a/libdwfl/image-header.c
Mark Wielaard 864167
+++ b/libdwfl/image-header.c
Mark Wielaard 864167
@@ -1,5 +1,5 @@
Mark Wielaard 864167
 /* Linux kernel image support for libdwfl.
Mark Wielaard 864167
-   Copyright (C) 2009 Red Hat, Inc.
Mark Wielaard 864167
+   Copyright (C) 2009-2011 Red Hat, Inc.
Mark Wielaard 864167
    This file is part of Red Hat elfutils.
Mark Wielaard 864167
 
Mark Wielaard 864167
    Red Hat elfutils is free software; you can redistribute it and/or modify
Mark Wielaard 864167
@@ -55,10 +55,8 @@
Mark Wielaard 864167
 
Mark Wielaard 864167
 #if BYTE_ORDER == LITTLE_ENDIAN
Mark Wielaard 864167
 # define LE16(x)	(x)
Mark Wielaard 864167
-# define LE32(x)	(x)
Mark Wielaard 864167
 #else
Mark Wielaard 864167
 # define LE16(x)	bswap_16 (x)
Mark Wielaard 864167
-# define LE32(x)	bswap_32 (x)
Mark Wielaard 864167
 #endif
Mark Wielaard 864167
 
Mark Wielaard 864167
 /* See Documentation/x86/boot.txt in Linux kernel sources
Mark Wielaard 864167
diff --git a/tests/ChangeLog b/tests/ChangeLog
Mark Wielaard 864167
index bc78843..61027de 100644
Mark Wielaard 864167
--- a/tests/ChangeLog
Mark Wielaard 864167
+++ b/tests/ChangeLog
Mark Wielaard 864167
@@ -1,3 +1,13 @@
Mark Wielaard 864167
+2011-07-09  Roland McGrath  <roland@hack.frob.com>
Mark Wielaard 864167
+
Mark Wielaard 864167
+	* sha1-tst.c: File removed.
Mark Wielaard 864167
+	* Makefile.am (noinst_PROGRAMS, TESTS): Remove it.
Mark Wielaard 864167
+	(sha1_tst_LDADD): Variable removed.
Mark Wielaard 864167
+
Mark Wielaard 864167
+	* md5-sha1-test.c: New file.
Mark Wielaard 864167
+	* Makefile.am [!STANDALONE] (noinst_PROGRAMS, TESTS): Add it.
Mark Wielaard 864167
+	(md5_sha1_test_LDADD): New variable.
Mark Wielaard 864167
+
Mark Wielaard 864167
 2011-02-02  Josh Stone  <jistone@redhat.com>
Mark Wielaard 864167
 
Mark Wielaard 864167
 	* run-prelink-addr-test.sh: Add testfile55, 32 and 64-bit.
Mark Wielaard 864167
diff --git a/tests/Makefile.am b/tests/Makefile.am
Mark Wielaard 864167
index b317553..e05cd92 100644
Mark Wielaard 864167
--- a/tests/Makefile.am
Mark Wielaard 864167
+++ b/tests/Makefile.am
Mark Wielaard 864167
@@ -57,7 +57,7 @@ noinst_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \
Mark Wielaard 864167
 		  dwfl-bug-addr-overflow arls dwfl-bug-fd-leak \
Mark Wielaard 864167
 		  dwfl-addr-sect dwfl-bug-report early-offscn \
Mark Wielaard 864167
 		  dwfl-bug-getmodules dwarf-getmacros addrcfi \
Mark Wielaard 864167
-		  test-flag-nobits
Mark Wielaard 864167
+		  test-flag-nobits md5-sha1-test
Mark Wielaard 864167
 asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \
Mark Wielaard 864167
 	    asm-tst6 asm-tst7 asm-tst8 asm-tst9
Mark Wielaard 864167
 
Mark Wielaard 864167
@@ -87,8 +87,8 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \
Mark Wielaard 864167
 # run-show-ciefde.sh
Mark Wielaard 864167
 
Mark Wielaard 864167
 if !STANDALONE
Mark Wielaard 864167
-noinst_PROGRAMS += msg_tst sha1-tst
Mark Wielaard 864167
-TESTS += msg_tst sha1-tst
Mark Wielaard 864167
+noinst_PROGRAMS += msg_tst md5-sha1-test
Mark Wielaard 864167
+TESTS += msg_tst md5-sha1-test
Mark Wielaard 864167
 endif
Mark Wielaard 864167
 
Mark Wielaard 864167
 if HAVE_LIBASM
Mark Wielaard 864167
@@ -244,10 +244,10 @@ dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
 dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
 dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
 dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
-sha1_tst_LDADD = $(libeu) $(libmudflap)
Mark Wielaard 864167
 dwarf_getmacros_LDADD = $(libdw) $(libmudflap)
Mark Wielaard 864167
 addrcfi_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
 test_flag_nobits_LDADD = $(libelf) $(libmudflap)
Mark Wielaard 864167
+md5_sha1_test_LDADD = $(libeu)
Mark Wielaard 864167
 
Mark Wielaard 864167
 if GCOV
Mark Wielaard 864167
 check: check-am coverage
Mark Wielaard 864167
diff --git a/tests/md5-sha1-test.c b/tests/md5-sha1-test.c
Mark Wielaard 864167
new file mode 100644
Mark Wielaard 864167
index 0000000..af2e80a
Mark Wielaard 864167
--- /dev/null
Mark Wielaard 864167
+++ b/tests/md5-sha1-test.c
Mark Wielaard 864167
@@ -0,0 +1,109 @@
Mark Wielaard 864167
+/* Copyright (C) 2011 Red Hat, Inc.
Mark Wielaard 864167
+   This file is part of Red Hat elfutils.
Mark Wielaard 864167
+
Mark Wielaard 864167
+   Red Hat elfutils is free software; you can redistribute it and/or modify
Mark Wielaard 864167
+   it under the terms of the GNU General Public License as published by the
Mark Wielaard 864167
+   Free Software Foundation; version 2 of the License.
Mark Wielaard 864167
+
Mark Wielaard 864167
+   Red Hat elfutils is distributed in the hope that it will be useful, but
Mark Wielaard 864167
+   WITHOUT ANY WARRANTY; without even the implied warranty of
Mark Wielaard 864167
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Mark Wielaard 864167
+   General Public License for more details.
Mark Wielaard 864167
+
Mark Wielaard 864167
+   You should have received a copy of the GNU General Public License along
Mark Wielaard 864167
+   with Red Hat elfutils; if not, write to the Free Software Foundation,
Mark Wielaard 864167
+   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
Mark Wielaard 864167
+
Mark Wielaard 864167
+   Red Hat elfutils is an included package of the Open Invention Network.
Mark Wielaard 864167
+   An included package of the Open Invention Network is a package for which
Mark Wielaard 864167
+   Open Invention Network licensees cross-license their patents.  No patent
Mark Wielaard 864167
+   license is granted, either expressly or impliedly, by designation as an
Mark Wielaard 864167
+   included package.  Should you wish to participate in the Open Invention
Mark Wielaard 864167
+   Network licensing program, please visit www.openinventionnetwork.com
Mark Wielaard 864167
+   <http://www.openinventionnetwork.com>.  */
Mark Wielaard 864167
+
Mark Wielaard 864167
+#ifdef HAVE_CONFIG_H
Mark Wielaard 864167
+# include <config.h>
Mark Wielaard 864167
+#endif
Mark Wielaard 864167
+
Mark Wielaard 864167
+#include <string.h>
Mark Wielaard 864167
+#include <error.h>
Mark Wielaard 864167
+
Mark Wielaard 864167
+#include "md5.h"
Mark Wielaard 864167
+#include "sha1.h"
Mark Wielaard 864167
+
Mark Wielaard 864167
+static const struct expected
Mark Wielaard 864167
+{
Mark Wielaard 864167
+  const char *sample;
Mark Wielaard 864167
+  const char *md5_expected;
Mark Wielaard 864167
+  const char *sha1_expected;
Mark Wielaard 864167
+} tests[] =
Mark Wielaard 864167
+  {
Mark Wielaard 864167
+    {
Mark Wielaard 864167
+      "abc",
Mark Wielaard 864167
+      "\x90\x01\x50\x98\x3c\xd2\x4f\xb0\xd6\x96\x3f\x7d\x28\xe1\x7f\x72",
Mark Wielaard 864167
+      "\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e"
Mark Wielaard 864167
+      "\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d"
Mark Wielaard 864167
+    },
Mark Wielaard 864167
+    {
Mark Wielaard 864167
+      "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
Mark Wielaard 864167
+      "\x82\x15\xef\x07\x96\xa2\x0b\xca\xaa\xe1\x16\xd3\x87\x6c\x66\x4a",
Mark Wielaard 864167
+      "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae"
Mark Wielaard 864167
+      "\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1"
Mark Wielaard 864167
+    },
Mark Wielaard 864167
+    {
Mark Wielaard 864167
+      "\0a",
Mark Wielaard 864167
+      "\x77\x07\xd6\xae\x4e\x02\x7c\x70\xee\xa2\xa9\x35\xc2\x29\x6f\x21",
Mark Wielaard 864167
+      "\x34\xaa\x97\x3c\xd4\xc4\xda\xa4\xf6\x1e"
Mark Wielaard 864167
+      "\xeb\x2b\xdb\xad\x27\x31\x65\x34\x01\x6f",
Mark Wielaard 864167
+    },
Mark Wielaard 864167
+    {
Mark Wielaard 864167
+      "When in the Course of human events it becomes necessary",
Mark Wielaard 864167
+      "\x62\x6b\x5e\x22\xcd\x3d\x02\xea\x07\xde\xd4\x50\x62\x3d\xb9\x96",
Mark Wielaard 864167
+      "\x66\xc3\xc6\x8d\x62\x91\xc5\x1e\x63\x0c"
Mark Wielaard 864167
+      "\x85\xc8\x6c\xc4\x4b\x3a\x79\x3e\x07\x28",
Mark Wielaard 864167
+    },
Mark Wielaard 864167
+  };
Mark Wielaard 864167
+#define NTESTS (sizeof tests / sizeof tests[0])
Mark Wielaard 864167
+
Mark Wielaard 864167
+#define md5_size	16
Mark Wielaard 864167
+#define sha1_size	20
Mark Wielaard 864167
+
Mark Wielaard 864167
+static const char md5_expected[] =
Mark Wielaard 864167
+  {
Mark Wielaard 864167
+  };
Mark Wielaard 864167
+
Mark Wielaard 864167
+static const char sha1_expected[] =
Mark Wielaard 864167
+  {
Mark Wielaard 864167
+  };
Mark Wielaard 864167
+
Mark Wielaard 864167
+#define TEST_HASH(ALGO, I)						      \
Mark Wielaard 864167
+  {									      \
Mark Wielaard 864167
+    struct ALGO##_ctx ctx;						      \
Mark Wielaard 864167
+    uint32_t result_buffer[(ALGO##_size + 3) / 4];			      \
Mark Wielaard 864167
+    ALGO##_init_ctx (&ctx;;						      \
Mark Wielaard 864167
+    if (tests[I].sample[0] == '\0')					      \
Mark Wielaard 864167
+      {									      \
Mark Wielaard 864167
+	char input_buffer[1000];					      \
Mark Wielaard 864167
+	memset (input_buffer, tests[I].sample[1], sizeof input_buffer);	      \
Mark Wielaard 864167
+	for (int rept = 0; rept < 1000; ++rept)				      \
Mark Wielaard 864167
+	  ALGO##_process_bytes (input_buffer, sizeof input_buffer, &ctx;;     \
Mark Wielaard 864167
+      }									      \
Mark Wielaard 864167
+    else								      \
Mark Wielaard 864167
+      ALGO##_process_bytes (tests[I].sample, strlen (tests[I].sample), &ctx;; \
Mark Wielaard 864167
+    char *result = ALGO##_finish_ctx (&ctx, result_buffer);		      \
Mark Wielaard 864167
+    if (result != (void *) result_buffer				      \
Mark Wielaard 864167
+	|| memcmp (result, tests[I].ALGO##_expected, ALGO##_size) != 0)	      \
Mark Wielaard 864167
+      error (0, 0, #ALGO " test %zu failed", 1 + I);			      \
Mark Wielaard 864167
+  }
Mark Wielaard 864167
+
Mark Wielaard 864167
+int
Mark Wielaard 864167
+main (void)
Mark Wielaard 864167
+{
Mark Wielaard 864167
+  for (size_t i = 0; i < NTESTS; ++i)
Mark Wielaard 864167
+    {
Mark Wielaard 864167
+      TEST_HASH (md5, i);
Mark Wielaard 864167
+      TEST_HASH (sha1, i);
Mark Wielaard 864167
+    }
Mark Wielaard 864167
+  return error_message_count;
Mark Wielaard 864167
+}
Mark Wielaard 864167
diff --git a/tests/sha1-tst.c b/tests/sha1-tst.c
Mark Wielaard 864167
deleted file mode 100644
Mark Wielaard 864167
index 9ff8141..0000000
Mark Wielaard 864167
--- a/tests/sha1-tst.c
Mark Wielaard 864167
+++ /dev/null
Mark Wielaard 864167
@@ -1,79 +0,0 @@
Mark Wielaard 864167
-/* Copyright (C) 2008 Red Hat, Inc.
Mark Wielaard 864167
-   This file is part of Red Hat elfutils.
Mark Wielaard 864167
-   Written by Ulrich Drepper <drepper@redhat.com>, 2008.
Mark Wielaard 864167
-
Mark Wielaard 864167
-   Red Hat elfutils is free software; you can redistribute it and/or modify
Mark Wielaard 864167
-   it under the terms of the GNU General Public License as published by the
Mark Wielaard 864167
-   Free Software Foundation; version 2 of the License.
Mark Wielaard 864167
-
Mark Wielaard 864167
-   Red Hat elfutils is distributed in the hope that it will be useful, but
Mark Wielaard 864167
-   WITHOUT ANY WARRANTY; without even the implied warranty of
Mark Wielaard 864167
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Mark Wielaard 864167
-   General Public License for more details.
Mark Wielaard 864167
-
Mark Wielaard 864167
-   You should have received a copy of the GNU General Public License along
Mark Wielaard 864167
-   with Red Hat elfutils; if not, write to the Free Software Foundation,
Mark Wielaard 864167
-   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
Mark Wielaard 864167
-
Mark Wielaard 864167
-   Red Hat elfutils is an included package of the Open Invention Network.
Mark Wielaard 864167
-   An included package of the Open Invention Network is a package for which
Mark Wielaard 864167
-   Open Invention Network licensees cross-license their patents.  No patent
Mark Wielaard 864167
-   license is granted, either expressly or impliedly, by designation as an
Mark Wielaard 864167
-   included package.  Should you wish to participate in the Open Invention
Mark Wielaard 864167
-   Network licensing program, please visit www.openinventionnetwork.com
Mark Wielaard 864167
-   <http://www.openinventionnetwork.com>.  */
Mark Wielaard 864167
-
Mark Wielaard 864167
-#include <stdio.h>
Mark Wielaard 864167
-#include <string.h>
Mark Wielaard 864167
-
Mark Wielaard 864167
-#include <sha1.h>
Mark Wielaard 864167
-
Mark Wielaard 864167
-
Mark Wielaard 864167
-int
Mark Wielaard 864167
-main (void)
Mark Wielaard 864167
-{
Mark Wielaard 864167
-  char buf[1000];
Mark Wielaard 864167
-  int result = 0;
Mark Wielaard 864167
-
Mark Wielaard 864167
-  struct sha1_ctx ctx;
Mark Wielaard 864167
-  sha1_init_ctx (&ctx;;
Mark Wielaard 864167
-  sha1_process_bytes ("abc", 3, &ctx;;
Mark Wielaard 864167
-  sha1_finish_ctx (&ctx, buf);
Mark Wielaard 864167
-  static const char expected1[SHA1_DIGEST_SIZE] =
Mark Wielaard 864167
-    "\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e"
Mark Wielaard 864167
-    "\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d";
Mark Wielaard 864167
-  if (memcmp (buf, expected1, SHA1_DIGEST_SIZE) != 0)
Mark Wielaard 864167
-    {
Mark Wielaard 864167
-      puts ("test 1 failed");
Mark Wielaard 864167
-      result = 1;
Mark Wielaard 864167
-    }
Mark Wielaard 864167
-
Mark Wielaard 864167
-  sha1_init_ctx (&ctx;;
Mark Wielaard 864167
-  sha1_process_bytes ("\
Mark Wielaard 864167
-abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56, &ctx;;
Mark Wielaard 864167
-  sha1_finish_ctx (&ctx, buf);
Mark Wielaard 864167
-  static const char expected2[SHA1_DIGEST_SIZE] =
Mark Wielaard 864167
-    "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae"
Mark Wielaard 864167
-    "\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1";
Mark Wielaard 864167
-  if (memcmp (buf, expected2, SHA1_DIGEST_SIZE) != 0)
Mark Wielaard 864167
-    {
Mark Wielaard 864167
-      puts ("test 2 failed");
Mark Wielaard 864167
-      result = 1;
Mark Wielaard 864167
-    }
Mark Wielaard 864167
-
Mark Wielaard 864167
-  sha1_init_ctx (&ctx;;
Mark Wielaard 864167
-  memset (buf, 'a', sizeof (buf));
Mark Wielaard 864167
-  for (int i = 0; i < 1000; ++i)
Mark Wielaard 864167
-    sha1_process_bytes (buf, sizeof (buf), &ctx;;
Mark Wielaard 864167
-  sha1_finish_ctx (&ctx, buf);
Mark Wielaard 864167
-  static const char expected3[SHA1_DIGEST_SIZE] =
Mark Wielaard 864167
-    "\x34\xaa\x97\x3c\xd4\xc4\xda\xa4\xf6\x1e"
Mark Wielaard 864167
-    "\xeb\x2b\xdb\xad\x27\x31\x65\x34\x01\x6f";
Mark Wielaard 864167
-  if (memcmp (buf, expected3, SHA1_DIGEST_SIZE) != 0)
Mark Wielaard 864167
-    {
Mark Wielaard 864167
-      puts ("test 3 failed");
Mark Wielaard 864167
-      result = 1;
Mark Wielaard 864167
-    }
Mark Wielaard 864167
-
Mark Wielaard 864167
-  return result;
Mark Wielaard 864167
-}
Mark Wielaard 864167
--- elfutils-0.152/tests/Makefile.in	2011-02-15 15:30:26.000000000 +0100
Mark Wielaard 864167
+++ /home/mark/src/elfutils/tests/Makefile.in	2012-01-20 21:23:50.626395712 +0100
Mark Wielaard 864167
@@ -59,7 +59,8 @@
Mark Wielaard 864167
 	dwfl-addr-sect$(EXEEXT) dwfl-bug-report$(EXEEXT) \
Mark Wielaard 864167
 	early-offscn$(EXEEXT) dwfl-bug-getmodules$(EXEEXT) \
Mark Wielaard 864167
 	dwarf-getmacros$(EXEEXT) addrcfi$(EXEEXT) \
Mark Wielaard 864167
-	test-flag-nobits$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_3)
Mark Wielaard 864167
+	test-flag-nobits$(EXEEXT) md5-sha1-test$(EXEEXT) \
Mark Wielaard 864167
+	$(am__EXEEXT_1) $(am__EXEEXT_3)
Mark Wielaard 864167
 TESTS = run-arextract.sh run-arsymtest.sh newfile$(EXEEXT) \
Mark Wielaard 864167
 	test-nlist$(EXEEXT) update1$(EXEEXT) update2$(EXEEXT) \
Mark Wielaard 864167
 	update3$(EXEEXT) update4$(EXEEXT) run-show-die-info.sh \
Mark Wielaard 864167
@@ -83,8 +84,8 @@
Mark Wielaard 864167
 	run-dwarf-getmacros.sh run-test-flag-nobits.sh \
Mark Wielaard 864167
 	run-prelink-addr-test.sh $(am__EXEEXT_1) $(am__EXEEXT_3)
Mark Wielaard 864167
 # run-show-ciefde.sh
Mark Wielaard 864167
-@STANDALONE_FALSE@am__append_5 = msg_tst sha1-tst
Mark Wielaard 864167
-@STANDALONE_FALSE@am__append_6 = msg_tst sha1-tst
Mark Wielaard 864167
+@STANDALONE_FALSE@am__append_5 = msg_tst md5-sha1-test
Mark Wielaard 864167
+@STANDALONE_FALSE@am__append_6 = msg_tst md5-sha1-test
Mark Wielaard 864167
 @HAVE_LIBASM_TRUE@am__append_7 = $(asm_TESTS)
Mark Wielaard 864167
 @HAVE_LIBASM_TRUE@am__append_8 = $(asm_TESTS)
Mark Wielaard 864167
 subdir = tests
Mark Wielaard 864167
@@ -98,7 +99,8 @@
Mark Wielaard 864167
 CONFIG_HEADER = $(top_builddir)/config.h
Mark Wielaard 864167
 CONFIG_CLEAN_FILES =
Mark Wielaard 864167
 CONFIG_CLEAN_VPATH_FILES =
Mark Wielaard 864167
-@STANDALONE_FALSE@am__EXEEXT_1 = msg_tst$(EXEEXT) sha1-tst$(EXEEXT)
Mark Wielaard 864167
+@STANDALONE_FALSE@am__EXEEXT_1 = msg_tst$(EXEEXT) \
Mark Wielaard 864167
+@STANDALONE_FALSE@	md5-sha1-test$(EXEEXT)
Mark Wielaard 864167
 am__EXEEXT_2 = asm-tst1$(EXEEXT) asm-tst2$(EXEEXT) asm-tst3$(EXEEXT) \
Mark Wielaard 864167
 	asm-tst4$(EXEEXT) asm-tst5$(EXEEXT) asm-tst6$(EXEEXT) \
Mark Wielaard 864167
 	asm-tst7$(EXEEXT) asm-tst8$(EXEEXT) asm-tst9$(EXEEXT)
Mark Wielaard 864167
@@ -252,6 +254,9 @@
Mark Wielaard 864167
 line2addr_SOURCES = line2addr.c
Mark Wielaard 864167
 line2addr_OBJECTS = line2addr.$(OBJEXT)
Mark Wielaard 864167
 line2addr_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1)
Mark Wielaard 864167
+md5_sha1_test_SOURCES = md5-sha1-test.c
Mark Wielaard 864167
+md5_sha1_test_OBJECTS = md5-sha1-test.$(OBJEXT)
Mark Wielaard 864167
+md5_sha1_test_DEPENDENCIES = $(libeu)
Mark Wielaard 864167
 msg_tst_SOURCES = msg_tst.c
Mark Wielaard 864167
 msg_tst_OBJECTS = msg_tst.$(OBJEXT)
Mark Wielaard 864167
 msg_tst_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
Mark Wielaard 864167
@@ -273,9 +278,6 @@
Mark Wielaard 864167
 sectiondump_SOURCES = sectiondump.c
Mark Wielaard 864167
 sectiondump_OBJECTS = sectiondump.$(OBJEXT)
Mark Wielaard 864167
 sectiondump_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
Mark Wielaard 864167
-sha1_tst_SOURCES = sha1-tst.c
Mark Wielaard 864167
-sha1_tst_OBJECTS = sha1-tst.$(OBJEXT)
Mark Wielaard 864167
-sha1_tst_DEPENDENCIES = $(libeu) $(am__DEPENDENCIES_1)
Mark Wielaard 864167
 show_abbrev_SOURCES = show-abbrev.c
Mark Wielaard 864167
 show_abbrev_OBJECTS = show-abbrev.$(OBJEXT)
Mark Wielaard 864167
 show_abbrev_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) \
Mark Wielaard 864167
@@ -323,11 +325,11 @@
Mark Wielaard 864167
 	dwfl-bug-fd-leak.c dwfl-bug-getmodules.c dwfl-bug-report.c \
Mark Wielaard 864167
 	dwflmodtest.c early-offscn.c ecp.c find-prologues.c \
Mark Wielaard 864167
 	funcretval.c funcscopes.c get-aranges.c get-files.c \
Mark Wielaard 864167
-	get-lines.c get-pubnames.c hash.c line2addr.c msg_tst.c \
Mark Wielaard 864167
-	newfile.c newscn.c rdwrmmap.c saridx.c scnnames.c \
Mark Wielaard 864167
-	sectiondump.c sha1-tst.c show-abbrev.c show-die-info.c \
Mark Wielaard 864167
-	showptable.c test-flag-nobits.c test-nlist.c update1.c \
Mark Wielaard 864167
-	update2.c update3.c update4.c
Mark Wielaard 864167
+	get-lines.c get-pubnames.c hash.c line2addr.c md5-sha1-test.c \
Mark Wielaard 864167
+	msg_tst.c newfile.c newscn.c rdwrmmap.c saridx.c scnnames.c \
Mark Wielaard 864167
+	sectiondump.c show-abbrev.c show-die-info.c showptable.c \
Mark Wielaard 864167
+	test-flag-nobits.c test-nlist.c update1.c update2.c update3.c \
Mark Wielaard 864167
+	update4.c
Mark Wielaard 864167
 DIST_SOURCES = addrcfi.c addrscopes.c allfcts.c allregs.c arextract.c \
Mark Wielaard 864167
 	arls.c arsymtest.c asm-tst1.c asm-tst2.c asm-tst3.c asm-tst4.c \
Mark Wielaard 864167
 	asm-tst5.c asm-tst6.c asm-tst7.c asm-tst8.c asm-tst9.c \
Mark Wielaard 864167
@@ -335,11 +337,11 @@
Mark Wielaard 864167
 	dwfl-bug-fd-leak.c dwfl-bug-getmodules.c dwfl-bug-report.c \
Mark Wielaard 864167
 	dwflmodtest.c early-offscn.c ecp.c find-prologues.c \
Mark Wielaard 864167
 	funcretval.c funcscopes.c get-aranges.c get-files.c \
Mark Wielaard 864167
-	get-lines.c get-pubnames.c hash.c line2addr.c msg_tst.c \
Mark Wielaard 864167
-	newfile.c newscn.c rdwrmmap.c saridx.c scnnames.c \
Mark Wielaard 864167
-	sectiondump.c sha1-tst.c show-abbrev.c show-die-info.c \
Mark Wielaard 864167
-	showptable.c test-flag-nobits.c test-nlist.c update1.c \
Mark Wielaard 864167
-	update2.c update3.c update4.c
Mark Wielaard 864167
+	get-lines.c get-pubnames.c hash.c line2addr.c md5-sha1-test.c \
Mark Wielaard 864167
+	msg_tst.c newfile.c newscn.c rdwrmmap.c saridx.c scnnames.c \
Mark Wielaard 864167
+	sectiondump.c show-abbrev.c show-die-info.c showptable.c \
Mark Wielaard 864167
+	test-flag-nobits.c test-nlist.c update1.c update2.c update3.c \
Mark Wielaard 864167
+	update4.c
Mark Wielaard 864167
 ETAGS = etags
Mark Wielaard 864167
 CTAGS = ctags
Mark Wielaard 864167
 am__tty_colors = \
Mark Wielaard 864167
@@ -611,10 +613,10 @@
Mark Wielaard 864167
 dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
 dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
 dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
-sha1_tst_LDADD = $(libeu) $(libmudflap)
Mark Wielaard 864167
 dwarf_getmacros_LDADD = $(libdw) $(libmudflap)
Mark Wielaard 864167
 addrcfi_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl
Mark Wielaard 864167
 test_flag_nobits_LDADD = $(libelf) $(libmudflap)
Mark Wielaard 864167
+md5_sha1_test_LDADD = $(libeu)
Mark Wielaard 864167
 all: all-am
Mark Wielaard 864167
 
Mark Wielaard 864167
 .SUFFIXES:
Mark Wielaard 864167
@@ -754,6 +756,9 @@
Mark Wielaard 864167
 line2addr$(EXEEXT): $(line2addr_OBJECTS) $(line2addr_DEPENDENCIES) 
Mark Wielaard 864167
 	@rm -f line2addr$(EXEEXT)
Mark Wielaard 864167
 	$(LINK) $(line2addr_OBJECTS) $(line2addr_LDADD) $(LIBS)
Mark Wielaard 864167
+md5-sha1-test$(EXEEXT): $(md5_sha1_test_OBJECTS) $(md5_sha1_test_DEPENDENCIES) 
Mark Wielaard 864167
+	@rm -f md5-sha1-test$(EXEEXT)
Mark Wielaard 864167
+	$(LINK) $(md5_sha1_test_OBJECTS) $(md5_sha1_test_LDADD) $(LIBS)
Mark Wielaard 864167
 msg_tst$(EXEEXT): $(msg_tst_OBJECTS) $(msg_tst_DEPENDENCIES) 
Mark Wielaard 864167
 	@rm -f msg_tst$(EXEEXT)
Mark Wielaard 864167
 	$(LINK) $(msg_tst_OBJECTS) $(msg_tst_LDADD) $(LIBS)
Mark Wielaard 864167
@@ -775,9 +780,6 @@
Mark Wielaard 864167
 sectiondump$(EXEEXT): $(sectiondump_OBJECTS) $(sectiondump_DEPENDENCIES) 
Mark Wielaard 864167
 	@rm -f sectiondump$(EXEEXT)
Mark Wielaard 864167
 	$(LINK) $(sectiondump_OBJECTS) $(sectiondump_LDADD) $(LIBS)
Mark Wielaard 864167
-sha1-tst$(EXEEXT): $(sha1_tst_OBJECTS) $(sha1_tst_DEPENDENCIES) 
Mark Wielaard 864167
-	@rm -f sha1-tst$(EXEEXT)
Mark Wielaard 864167
-	$(LINK) $(sha1_tst_OBJECTS) $(sha1_tst_LDADD) $(LIBS)
Mark Wielaard 864167
 show-abbrev$(EXEEXT): $(show_abbrev_OBJECTS) $(show_abbrev_DEPENDENCIES) 
Mark Wielaard 864167
 	@rm -f show-abbrev$(EXEEXT)
Mark Wielaard 864167
 	$(LINK) $(show_abbrev_OBJECTS) $(show_abbrev_LDADD) $(LIBS)
Mark Wielaard 864167
@@ -846,6 +848,7 @@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-pubnames.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/line2addr.Po@am__quote@
Mark Wielaard 864167
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5-sha1-test.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msg_tst.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newfile.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newscn.Po@am__quote@
Mark Wielaard 864167
@@ -853,7 +856,6 @@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saridx.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scnnames.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sectiondump.Po@am__quote@
Mark Wielaard 864167
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-tst.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show-abbrev.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show-die-info.Po@am__quote@
Mark Wielaard 864167
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showptable.Po@am__quote@