Allow building with configure option --enable-hmac-binary-check.
authorWerner Koch <wk@gnupg.org>
Wed, 6 Apr 2016 18:16:19 +0000 (20:16 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 6 Apr 2016 18:17:51 +0000 (20:17 +0200)
* src/Makefile.am (mpicalc_LDADD): Add DL_LIBS.
* src/fips.c (check_binary_integrity): Allow use of hmac256 output.
* src/hmac256.c (main): Add option --stdkey
--

Note that when using that configure option "make check" won't work in
one go.  Instead use

  make
  cd src/.libs
  ../hmac256  --stdkey '' libgcrypt.so.20 >.libgcrypt.so.20.hmac
  cd ../..
  make check

Reported-by: Burt Silverman
Signed-off-by: Werner Koch <wk@gnupg.org>
src/Makefile.am
src/fips.c
src/hmac256.c

index aee2828..3cc4a55 100644 (file)
@@ -131,7 +131,7 @@ dumpsexp_LDADD = $(arch_gpg_error_libs)
 
 mpicalc_SOURCES = mpicalc.c
 mpicalc_CFLAGS = $(GPG_ERROR_CFLAGS)
-mpicalc_LDADD = libgcrypt.la $(GPG_ERROR_LIBS)
+mpicalc_LDADD = libgcrypt.la $(DL_LIBS) $(GPG_ERROR_LIBS)
 
 hmac256_SOURCES = hmac256.c
 hmac256_CFLAGS = -DSTANDALONE $(arch_gpg_error_cflags)
index 3311ba2..af3fe2c 100644 (file)
@@ -637,11 +637,15 @@ check_binary_integrity (void)
                   int n;
 
                   /* The HMAC files consists of lowercase hex digits
-                     only with an optional trailing linefeed.  Fail if
-                     there is any garbage.  */
+                     with an optional trailing linefeed or optional
+                     with two trailing spaces.  The latter format
+                     allows the use of the usual sha1sum format.  Fail
+                     if there is any garbage.  */
                   err = gpg_error (GPG_ERR_SELFTEST_FAILED);
                   n = fread (buffer, 1, sizeof buffer, fp);
-                  if (n == 64 || (n == 65 && buffer[64] == '\n'))
+                  if (n == 64
+                      || (n == 65 && buffer[64] == '\n')
+                      || (n == 66 && buffer[64] == ' ' && buffer[65] == ' '))
                     {
                       buffer[64] = 0;
                       for (n=0, s= buffer;
index 6b62ed3..ca1eb75 100644 (file)
@@ -646,6 +646,7 @@ main (int argc, char **argv)
   size_t n, dlen, idx;
   int use_stdin = 0;
   int use_binary = 0;
+  int use_stdkey = 0;
 
   assert (sizeof (u32) == 4);
 #ifdef __WIN32
@@ -689,11 +690,16 @@ main (int argc, char **argv)
           argc--; argv++;
           use_binary = 1;
         }
+      else if (!strcmp (*argv, "--stdkey"))
+        {
+          argc--; argv++;
+          use_stdkey = 1;
+        }
     }
 
   if (argc < 1)
     {
-      fprintf (stderr, "usage: %s [--binary] key [filename]\n", pgm);
+      fprintf (stderr, "usage: %s [--binary] [--stdkey] key [filename]\n", pgm);
       exit (1);
     }
 
@@ -702,7 +708,7 @@ main (int argc, char **argv)
     setmode (fileno (stdout), O_BINARY);
 #endif
 
-  key = *argv;
+  key = use_stdkey? "What am I, a doctor or a moonshuttle conductor?" : *argv;
   argc--, argv++;
   keylen = strlen (key);
   use_stdin = !argc;