Add more selftests.
authorWerner Koch <wk@gnupg.org>
Tue, 9 Sep 2008 18:06:38 +0000 (18:06 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 9 Sep 2008 18:06:38 +0000 (18:06 +0000)
12 files changed:
NEWS
cipher/ChangeLog
cipher/Makefile.am
cipher/des.c
cipher/hmac-tests.c
cipher/sha1.c
cipher/sha256.c
cipher/sha512.c
configure.ac
doc/announce.txt
tests/ChangeLog
tests/basic.c

diff --git a/NEWS b/NEWS
index 5860dfe..1511c10 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+Noteworthy changes in version 1.4.3
+------------------------------------------------
+
+
 Noteworthy changes in version 1.4.2 (2008-09-08)
 ------------------------------------------------
 
index a026bad..b3412f8 100644 (file)
@@ -1,3 +1,13 @@
+2008-09-09  Werner Koch  <wk@g10code.com>
+
+       * hmac-tests.c (selftests_sha1): Add tests.
+       (selftests_sha224, selftests_sha384, selftests_sha512): Make up tests.
+
+       * hash-common.c, hash-common.h: New.
+       * sha1.c (selftests_sha1): Add 3 tests.
+       * sha256.c (selftests_sha256, selftests_sha224): Ditto.
+       * sha512.c (selftests_sha512, selftests_sha384): Ditto.
+
 2008-08-29  Werner Koch  <wk@g10code.com>
 
        * pubkey.c (gcry_pk_get_keygrip): Remove the special case for RSA
index f1c313c..f49c6a7 100644 (file)
@@ -39,6 +39,7 @@ cipher.c pubkey.c ac.c md.c \
 hmac-tests.c \
 bithelp.h  \
 primegen.c  \
+hash-common.c hash-common.h \
 rmd.h
 
 EXTRA_libcipher_la_SOURCES = \
index dcc4a6b..32c085a 100644 (file)
@@ -1087,7 +1087,7 @@ do_des_decrypt( void *context, byte *outbuf, const byte *inbuf )
  */
 
 
-/* Complete selftest for TripleDES with all modes and driver code.  */
+/* Selftest for TripleDES.  */
 static gpg_err_code_t
 selftest_fips (selftest_report_func_t report)
 {
@@ -1099,7 +1099,10 @@ selftest_fips (selftest_report_func_t report)
   if (errtxt)
     goto failed;
 
-  /* FIXME:  need more tests.  */
+  /* The low-level self-tests are quite extensive and thus we can do
+     without high level tests.  This is also justified because we have
+     no custom block code implementation for 3des but always use the
+     standard high level block code.  */
 
   return 0; /* Succeeded. */
 
index 6eb7b00..38b5ea4 100644 (file)
@@ -25,8 +25,8 @@
    digest algorithm modules, but that would blow up the code too much
    and spread the hmac tests over several modules.
 
-    Thus we implement all HMAC tests in this test module and provide a
-    function to run the tests.
+   Thus we implement all HMAC tests in this test module and provide a
+   function to run the tests.
 */
 
 #include <config.h>
@@ -54,6 +54,7 @@ check_one (int algo,
   gcry_md_hd_t hd;
   const unsigned char *digest;
 
+/*   printf ("HMAC algo %d\n", algo); */
   if (_gcry_md_get_algo_dlen (algo) != expectlen)
     return "invalid tests data";
   if (_gcry_md_open (&hd, algo, GCRY_MD_FLAG_HMAC))
@@ -72,6 +73,17 @@ check_one (int algo,
     }
   if (memcmp (digest, expect, expectlen))
     {
+/*       int i; */
+
+/*       fputs ("        {", stdout); */
+/*       for (i=0; i < expectlen-1; i++) */
+/*         { */
+/*           if (i && !(i % 8)) */
+/*             fputs ("\n         ", stdout); */
+/*           printf (" 0x%02x,", digest[i]); */
+/*         } */
+/*       printf (" 0x%02x } },\n", digest[i]); */
+
       _gcry_md_close (hd);
       return "does not match";
     }
@@ -83,30 +95,55 @@ check_one (int algo,
 static gpg_err_code_t
 selftests_sha1 (selftest_report_func_t report)
 {
-  static struct 
-  {
-    const char * const desc;
-    const char * const data;
-    const char * const key;
-    const char expect[20];
-  } tv[] =
-    {
-      { NULL }
-    };
   const char *what;
   const char *errtxt;
-  int tvidx;
-  
-  for (tvidx=0; tv[tvidx].desc; tvidx++)
-    {
-      what = tv[tvidx].desc;
-      errtxt = check_one (GCRY_MD_SHA1,
-                          tv[tvidx].data, strlen (tv[tvidx].data),
-                          tv[tvidx].key, strlen (tv[tvidx].key),
-                          tv[tvidx].expect, DIM (tv[tvidx].expect) );
-      if (errtxt)
-        goto failed;
-    }
+  unsigned char key[128];
+  int i, j;
+
+  what = "FIPS-198a, A.1";
+  for (i=0; i < 64; i++)
+    key[i] = i;
+  errtxt = check_one (GCRY_MD_SHA1,
+                      "Sample #1", 9,
+                      key, 64,
+                      "\x4f\x4c\xa3\xd5\xd6\x8b\xa7\xcc\x0a\x12"
+                      "\x08\xc9\xc6\x1e\x9c\x5d\xa0\x40\x3c\x0a", 20);
+  if (errtxt)
+    goto failed;
+
+  what = "FIPS-198a, A.2";
+  for (i=0, j=0x30; i < 20; i++)
+    key[i] = j++;
+  errtxt = check_one (GCRY_MD_SHA1,
+                      "Sample #2", 9,
+                      key, 20,
+                      "\x09\x22\xd3\x40\x5f\xaa\x3d\x19\x4f\x82"
+                      "\xa4\x58\x30\x73\x7d\x5c\xc6\xc7\x5d\x24", 20);
+  if (errtxt)
+    goto failed;
+
+  what = "FIPS-198a, A.3";
+  for (i=0, j=0x50; i < 100; i++)
+    key[i] = j++;
+  errtxt = check_one (GCRY_MD_SHA1,
+                      "Sample #3", 9,
+                      key, 100,
+                      "\xbc\xf4\x1e\xab\x8b\xb2\xd8\x02\xf3\xd0"
+                      "\x5c\xaf\x7c\xb0\x92\xec\xf8\xd1\xa3\xaa", 20 );
+  if (errtxt)
+    goto failed;
+
+  what = "FIPS-198a, A.4";
+  for (i=0, j=0x70; i < 49; i++)
+    key[i] = j++;
+  errtxt = check_one (GCRY_MD_SHA1,
+                      "Sample #4", 9,
+                      key, 49,
+                      "\x9e\xa8\x86\xef\xe2\x68\xdb\xec\xce\x42"
+                      "\x0c\x75\x24\xdf\x32\xe0\x75\x1a\x2a\x26", 20 );
+  if (errtxt)
+    goto failed;
+
 
   return 0; /* Succeeded. */
 
@@ -129,6 +166,81 @@ selftests_sha224 (selftest_report_func_t report)
     const char expect[28];
   } tv[] =
     {
+      { "data-28 key-4",
+        "what do ya want for nothing?", 
+        "Jefe",
+        { 0xa3, 0x0e, 0x01, 0x09, 0x8b, 0xc6, 0xdb, 0xbf,
+          0x45, 0x69, 0x0f, 0x3a, 0x7e, 0x9e, 0x6d, 0x0f,
+          0x8b, 0xbe, 0xa2, 0xa3, 0x9e, 0x61, 0x48, 0x00,
+          0x8f, 0xd0, 0x5e, 0x44 } },
+
+      { "data-9 key-20",
+        "Hi There",
+       "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
+        "\x0b\x0b\x0b\x0b",
+        { 0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19,
+          0x68, 0x32, 0x10, 0x7c, 0xd4, 0x9d, 0xf3, 0x3f,
+          0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f,
+          0x53, 0x68, 0x4b, 0x22 } },
+
+      { "data-50 key-20",
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa",
+        { 0x7f, 0xb3, 0xcb, 0x35, 0x88, 0xc6, 0xc1, 0xf6,
+          0xff, 0xa9, 0x69, 0x4d, 0x7d, 0x6a, 0xd2, 0x64,
+          0x93, 0x65, 0xb0, 0xc1, 0xf6, 0x5d, 0x69, 0xd1,
+          0xec, 0x83, 0x33, 0xea } },
+
+      { "data-50 key-26",
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd",
+       "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
+        "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
+        { 0x6c, 0x11, 0x50, 0x68, 0x74, 0x01, 0x3c, 0xac,
+          0x6a, 0x2a, 0xbc, 0x1b, 0xb3, 0x82, 0x62, 0x7c,
+          0xec, 0x6a, 0x90, 0xd8, 0x6e, 0xfc, 0x01, 0x2d,
+          0xe7, 0xaf, 0xec, 0x5a } },
+
+      { "data-54 key-131",
+        "Test Using Larger Than Block-Size Key - Hash Key First",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa",
+        { 0x95, 0xe9, 0xa0, 0xdb, 0x96, 0x20, 0x95, 0xad,
+          0xae, 0xbe, 0x9b, 0x2d, 0x6f, 0x0d, 0xbc, 0xe2,
+          0xd4, 0x99, 0xf1, 0x12, 0xf2, 0xd2, 0xb7, 0x27,
+          0x3f, 0xa6, 0x87, 0x0e } },
+
+      { "data-152 key-131",
+        "This is a test using a larger than block-size key and a larger "
+        "than block-size data. The key needs to be hashed before being "
+        "used by the HMAC algorithm.",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa",
+        { 0x3a, 0x85, 0x41, 0x66, 0xac, 0x5d, 0x9f, 0x02,
+          0x3f, 0x54, 0xd5, 0x17, 0xd0, 0xb3, 0x9d, 0xbd,
+          0x94, 0x67, 0x70, 0xdb, 0x9c, 0x2b, 0x95, 0xc9,
+          0xf6, 0xf5, 0x65, 0xd1 } },
+
       { NULL }
     };
   const char *what;
@@ -305,6 +417,93 @@ selftests_sha384 (selftest_report_func_t report)
     const char expect[48];
   } tv[] =
     {
+      { "data-28 key-4",
+        "what do ya want for nothing?", 
+        "Jefe",
+        { 0xaf, 0x45, 0xd2, 0xe3, 0x76, 0x48, 0x40, 0x31,
+          0x61, 0x7f, 0x78, 0xd2, 0xb5, 0x8a, 0x6b, 0x1b,
+          0x9c, 0x7e, 0xf4, 0x64, 0xf5, 0xa0, 0x1b, 0x47,
+          0xe4, 0x2e, 0xc3, 0x73, 0x63, 0x22, 0x44, 0x5e,
+          0x8e, 0x22, 0x40, 0xca, 0x5e, 0x69, 0xe2, 0xc7,
+          0x8b, 0x32, 0x39, 0xec, 0xfa, 0xb2, 0x16, 0x49 } },
+
+      { "data-9 key-20",
+        "Hi There",
+       "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
+        "\x0b\x0b\x0b\x0b",
+        { 0xaf, 0xd0, 0x39, 0x44, 0xd8, 0x48, 0x95, 0x62,
+          0x6b, 0x08, 0x25, 0xf4, 0xab, 0x46, 0x90, 0x7f,
+          0x15, 0xf9, 0xda, 0xdb, 0xe4, 0x10, 0x1e, 0xc6,
+          0x82, 0xaa, 0x03, 0x4c, 0x7c, 0xeb, 0xc5, 0x9c,
+          0xfa, 0xea, 0x9e, 0xa9, 0x07, 0x6e, 0xde, 0x7f,
+          0x4a, 0xf1, 0x52, 0xe8, 0xb2, 0xfa, 0x9c, 0xb6 } },
+
+      { "data-50 key-20",
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa",
+        { 0x88, 0x06, 0x26, 0x08, 0xd3, 0xe6, 0xad, 0x8a,
+          0x0a, 0xa2, 0xac, 0xe0, 0x14, 0xc8, 0xa8, 0x6f,
+          0x0a, 0xa6, 0x35, 0xd9, 0x47, 0xac, 0x9f, 0xeb,
+          0xe8, 0x3e, 0xf4, 0xe5, 0x59, 0x66, 0x14, 0x4b,
+          0x2a, 0x5a, 0xb3, 0x9d, 0xc1, 0x38, 0x14, 0xb9,
+          0x4e, 0x3a, 0xb6, 0xe1, 0x01, 0xa3, 0x4f, 0x27 } },
+
+      { "data-50 key-26",
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd",
+       "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
+        "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
+        { 0x3e, 0x8a, 0x69, 0xb7, 0x78, 0x3c, 0x25, 0x85,
+          0x19, 0x33, 0xab, 0x62, 0x90, 0xaf, 0x6c, 0xa7,
+          0x7a, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9c,
+          0xc5, 0x57, 0x7c, 0x6e, 0x1f, 0x57, 0x3b, 0x4e,
+          0x68, 0x01, 0xdd, 0x23, 0xc4, 0xa7, 0xd6, 0x79,
+          0xcc, 0xf8, 0xa3, 0x86, 0xc6, 0x74, 0xcf, 0xfb } },
+
+      { "data-54 key-131",
+        "Test Using Larger Than Block-Size Key - Hash Key First",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa",
+        { 0x4e, 0xce, 0x08, 0x44, 0x85, 0x81, 0x3e, 0x90,
+          0x88, 0xd2, 0xc6, 0x3a, 0x04, 0x1b, 0xc5, 0xb4,
+          0x4f, 0x9e, 0xf1, 0x01, 0x2a, 0x2b, 0x58, 0x8f,
+          0x3c, 0xd1, 0x1f, 0x05, 0x03, 0x3a, 0xc4, 0xc6,
+          0x0c, 0x2e, 0xf6, 0xab, 0x40, 0x30, 0xfe, 0x82,
+          0x96, 0x24, 0x8d, 0xf1, 0x63, 0xf4, 0x49, 0x52 } },
+
+      { "data-152 key-131",
+        "This is a test using a larger than block-size key and a larger "
+        "than block-size data. The key needs to be hashed before being "
+        "used by the HMAC algorithm.",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa",
+        { 0x66, 0x17, 0x17, 0x8e, 0x94, 0x1f, 0x02, 0x0d,
+          0x35, 0x1e, 0x2f, 0x25, 0x4e, 0x8f, 0xd3, 0x2c,
+          0x60, 0x24, 0x20, 0xfe, 0xb0, 0xb8, 0xfb, 0x9a,
+          0xdc, 0xce, 0xbb, 0x82, 0x46, 0x1e, 0x99, 0xc5,
+          0xa6, 0x78, 0xcc, 0x31, 0xe7, 0x99, 0x17, 0x6d,
+          0x38, 0x60, 0xe6, 0x11, 0x0c, 0x46, 0x52, 0x3e } },
+
       { NULL }
     };
   const char *what;
@@ -342,6 +541,105 @@ selftests_sha512 (selftest_report_func_t report)
     const char expect[64];
   } tv[] =
     {
+      { "data-28 key-4",
+        "what do ya want for nothing?", 
+        "Jefe",
+        { 0x16, 0x4b, 0x7a, 0x7b, 0xfc, 0xf8, 0x19, 0xe2,
+          0xe3, 0x95, 0xfb, 0xe7, 0x3b, 0x56, 0xe0, 0xa3,
+          0x87, 0xbd, 0x64, 0x22, 0x2e, 0x83, 0x1f, 0xd6,
+          0x10, 0x27, 0x0c, 0xd7, 0xea, 0x25, 0x05, 0x54,
+          0x97, 0x58, 0xbf, 0x75, 0xc0, 0x5a, 0x99, 0x4a,
+          0x6d, 0x03, 0x4f, 0x65, 0xf8, 0xf0, 0xe6, 0xfd,
+          0xca, 0xea, 0xb1, 0xa3, 0x4d, 0x4a, 0x6b, 0x4b,
+          0x63, 0x6e, 0x07, 0x0a, 0x38, 0xbc, 0xe7, 0x37 } },
+
+      { "data-9 key-20",
+        "Hi There",
+       "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
+        "\x0b\x0b\x0b\x0b",
+        { 0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d,
+          0x4f, 0xf0, 0xb4, 0x24, 0x1a, 0x1d, 0x6c, 0xb0,
+          0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78,
+          0x7a, 0xd0, 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde,
+          0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7, 0x02,
+          0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4,
+          0xbe, 0x9d, 0x91, 0x4e, 0xeb, 0x61, 0xf1, 0x70,
+          0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54 } },
+
+      { "data-50 key-20",
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
+        "\xdd\xdd",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa",
+        { 0xfa, 0x73, 0xb0, 0x08, 0x9d, 0x56, 0xa2, 0x84,
+          0xef, 0xb0, 0xf0, 0x75, 0x6c, 0x89, 0x0b, 0xe9,
+          0xb1, 0xb5, 0xdb, 0xdd, 0x8e, 0xe8, 0x1a, 0x36,
+          0x55, 0xf8, 0x3e, 0x33, 0xb2, 0x27, 0x9d, 0x39,
+          0xbf, 0x3e, 0x84, 0x82, 0x79, 0xa7, 0x22, 0xc8,
+          0x06, 0xb4, 0x85, 0xa4, 0x7e, 0x67, 0xc8, 0x07,
+          0xb9, 0x46, 0xa3, 0x37, 0xbe, 0xe8, 0x94, 0x26,
+          0x74, 0x27, 0x88, 0x59, 0xe1, 0x32, 0x92, 0xfb } },
+
+      { "data-50 key-26",
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
+        "\xcd\xcd",
+       "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
+        "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
+        { 0xb0, 0xba, 0x46, 0x56, 0x37, 0x45, 0x8c, 0x69,
+          0x90, 0xe5, 0xa8, 0xc5, 0xf6, 0x1d, 0x4a, 0xf7,
+          0xe5, 0x76, 0xd9, 0x7f, 0xf9, 0x4b, 0x87, 0x2d,
+          0xe7, 0x6f, 0x80, 0x50, 0x36, 0x1e, 0xe3, 0xdb,
+          0xa9, 0x1c, 0xa5, 0xc1, 0x1a, 0xa2, 0x5e, 0xb4,
+          0xd6, 0x79, 0x27, 0x5c, 0xc5, 0x78, 0x80, 0x63,
+          0xa5, 0xf1, 0x97, 0x41, 0x12, 0x0c, 0x4f, 0x2d,
+          0xe2, 0xad, 0xeb, 0xeb, 0x10, 0xa2, 0x98, 0xdd } },
+
+      { "data-54 key-131",
+        "Test Using Larger Than Block-Size Key - Hash Key First",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa",
+        { 0x80, 0xb2, 0x42, 0x63, 0xc7, 0xc1, 0xa3, 0xeb,
+          0xb7, 0x14, 0x93, 0xc1, 0xdd, 0x7b, 0xe8, 0xb4,
+          0x9b, 0x46, 0xd1, 0xf4, 0x1b, 0x4a, 0xee, 0xc1,
+          0x12, 0x1b, 0x01, 0x37, 0x83, 0xf8, 0xf3, 0x52,
+          0x6b, 0x56, 0xd0, 0x37, 0xe0, 0x5f, 0x25, 0x98,
+          0xbd, 0x0f, 0xd2, 0x21, 0x5d, 0x6a, 0x1e, 0x52,
+          0x95, 0xe6, 0x4f, 0x73, 0xf6, 0x3f, 0x0a, 0xec,
+          0x8b, 0x91, 0x5a, 0x98, 0x5d, 0x78, 0x65, 0x98 } },
+
+      { "data-152 key-131",
+        "This is a test using a larger than block-size key and a larger "
+        "than block-size data. The key needs to be hashed before being "
+        "used by the HMAC algorithm.",
+       "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+        "\xaa\xaa\xaa",
+        { 0xe3, 0x7b, 0x6a, 0x77, 0x5d, 0xc8, 0x7d, 0xba,
+          0xa4, 0xdf, 0xa9, 0xf9, 0x6e, 0x5e, 0x3f, 0xfd,
+          0xde, 0xbd, 0x71, 0xf8, 0x86, 0x72, 0x89, 0x86,
+          0x5d, 0xf5, 0xa3, 0x2d, 0x20, 0xcd, 0xc9, 0x44,
+          0xb6, 0x02, 0x2c, 0xac, 0x3c, 0x49, 0x82, 0xb1,
+          0x0d, 0x5e, 0xeb, 0x55, 0xc3, 0xe4, 0xde, 0x15,
+          0x13, 0x46, 0x76, 0xfb, 0x6d, 0xe0, 0x44, 0x60,
+          0x65, 0xc9, 0x74, 0x40, 0xfa, 0x8c, 0x6a, 0x58 } },
+
       { NULL }
     };
   const char *what;
index caf1c9a..be3bd94 100644 (file)
@@ -40,6 +40,7 @@
 #include "memory.h"
 #include "bithelp.h"
 #include "cipher.h"
+#include "hash-common.h"
 
 
 /* A macro to test whether P is properly aligned for an u32 type.
@@ -385,12 +386,32 @@ selftests_sha1 (selftest_report_func_t report)
   const char *what;
   const char *errtxt;
   
-  what = "low-level";
-  errtxt = NULL; /*selftest ();*/
+  what = "short string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA1, 0, 
+     "abc", 3,
+     "\xA9\x99\x3E\x36\x47\x06\x81\x6A\xBA\x3E"
+     "\x25\x71\x78\x50\xC2\x6C\x9C\xD0\xD8\x9D", 20);
   if (errtxt)
     goto failed;
 
-  /* FIXME:  need more tests.  */
+  what = "long string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA1, 0, 
+     "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56,
+     "\x84\x98\x3E\x44\x1C\x3B\xD2\x6E\xBA\xAE"
+     "\x4A\xA1\xF9\x51\x29\xE5\xE5\x46\x70\xF1", 20);
+  if (errtxt)
+    goto failed;
+
+  what = "one million \"a\"";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA1, 1,
+     NULL, 0,
+     "\x34\xAA\x97\x3C\xD4\xC4\xDA\xA4\xF6\x1E"
+     "\xEB\x2B\xDB\xAD\x27\x31\x65\x34\x01\x6F", 20);
+  if (errtxt)
+    goto failed;
 
   return 0; /* Succeeded. */
 
index b0a5629..bb62e23 100644 (file)
@@ -44,6 +44,7 @@
 #include "memory.h"
 #include "bithelp.h"
 #include "cipher.h"
+#include "hash-common.h"
 
 typedef struct {
   u32  h0,h1,h2,h3,h4,h5,h6,h7;
@@ -325,12 +326,32 @@ selftests_sha224 (selftest_report_func_t report)
   const char *what;
   const char *errtxt;
   
-  what = "low-level";
-  errtxt = NULL; /*selftest ();*/
+  what = "short string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA224, 0, 
+     "abc", 3,
+     "\x23\x09\x7d\x22\x34\x05\xd8\x22\x86\x42\xa4\x77\xbd\xa2\x55\xb3"
+     "\x2a\xad\xbc\xe4\xbd\xa0\xb3\xf7\xe3\x6c\x9d\xa7", 28);
   if (errtxt)
     goto failed;
 
-  /* FIXME:  need more tests.  */
+  what = "long string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA224, 0, 
+     "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56,
+     "\x75\x38\x8b\x16\x51\x27\x76\xcc\x5d\xba\x5d\xa1\xfd\x89\x01\x50"
+     "\xb0\xc6\x45\x5c\xb4\xf5\x8b\x19\x52\x52\x25\x25", 28);
+  if (errtxt)
+    goto failed;
+
+  what = "one million \"a\"";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA224, 1,
+     NULL, 0,
+     "\x20\x79\x46\x55\x98\x0c\x91\xd8\xbb\xb4\xc1\xea\x97\x61\x8a\x4b"
+     "\xf0\x3f\x42\x58\x19\x48\xb2\xee\x4e\xe7\xad\x67", 28);
+  if (errtxt)
+    goto failed;
 
   return 0; /* Succeeded. */
 
@@ -346,12 +367,32 @@ selftests_sha256 (selftest_report_func_t report)
   const char *what;
   const char *errtxt;
   
-  what = "low-level";
-  errtxt = NULL; /*selftest ();*/
+  what = "short string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA256, 0, 
+     "abc", 3,
+     "\xba\x78\x16\xbf\x8f\x01\xcf\xea\x41\x41\x40\xde\x5d\xae\x22\x23"
+     "\xb0\x03\x61\xa3\x96\x17\x7a\x9c\xb4\x10\xff\x61\xf2\x00\x15\xad", 32);
   if (errtxt)
     goto failed;
 
-  /* FIXME:  need more tests.  */
+  what = "long string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA256, 0, 
+     "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56,
+     "\x24\x8d\x6a\x61\xd2\x06\x38\xb8\xe5\xc0\x26\x93\x0c\x3e\x60\x39"
+     "\xa3\x3c\xe4\x59\x64\xff\x21\x67\xf6\xec\xed\xd4\x19\xdb\x06\xc1", 32);
+  if (errtxt)
+    goto failed;
+
+  what = "one million \"a\"";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA256, 1,
+     NULL, 0,
+     "\xcd\xc7\x6e\x5c\x99\x14\xfb\x92\x81\xa1\xc7\xe2\x84\xd7\x3e\x67"
+     "\xf1\x80\x9a\x48\xa4\x97\x20\x0e\x04\x6d\x39\xcc\xc7\x11\x2c\xd0", 32);
+  if (errtxt)
+    goto failed;
 
   return 0; /* Succeeded. */
 
index e1ba517..d4a03f5 100644 (file)
@@ -51,6 +51,7 @@
 #include "g10lib.h"
 #include "bithelp.h"
 #include "cipher.h"
+#include "hash-common.h"
 
 typedef struct
 {
@@ -372,12 +373,36 @@ selftests_sha384 (selftest_report_func_t report)
   const char *what;
   const char *errtxt;
   
-  what = "low-level";
-  errtxt = NULL; /*selftest ();*/
+  what = "short string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA384, 0, 
+     "abc", 3,
+     "\xcb\x00\x75\x3f\x45\xa3\x5e\x8b\xb5\xa0\x3d\x69\x9a\xc6\x50\x07"
+     "\x27\x2c\x32\xab\x0e\xde\xd1\x63\x1a\x8b\x60\x5a\x43\xff\x5b\xed"
+     "\x80\x86\x07\x2b\xa1\xe7\xcc\x23\x58\xba\xec\xa1\x34\xc8\x25\xa7", 48);
   if (errtxt)
     goto failed;
 
-  /* FIXME:  need more tests.  */
+  what = "long string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA384, 0, 
+     "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
+     "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", 112, 
+     "\x09\x33\x0C\x33\xF7\x11\x47\xE8\x3D\x19\x2F\xC7\x82\xCD\x1B\x47"
+     "\x53\x11\x1B\x17\x3B\x3B\x05\xD2\x2F\xA0\x80\x86\xE3\xB0\xF7\x12"
+     "\xFC\xC7\xC7\x1A\x55\x7E\x2D\xB9\x66\xC3\xE9\xFA\x91\x74\x60\x39", 48);
+  if (errtxt)
+    goto failed;
+
+  what = "one million \"a\"";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA384, 1,
+     NULL, 0,
+     "\x9D\x0E\x18\x09\x71\x64\x74\xCB\x08\x6E\x83\x4E\x31\x0A\x4A\x1C"
+     "\xED\x14\x9E\x9C\x00\xF2\x48\x52\x79\x72\xCE\xC5\x70\x4C\x2A\x5B"
+     "\x07\xB8\xB3\xDC\x38\xEC\xC4\xEB\xAE\x97\xDD\xD8\x7F\x3D\x89\x85", 48);
+ if (errtxt)
+    goto failed;
 
   return 0; /* Succeeded. */
 
@@ -393,12 +418,39 @@ selftests_sha512 (selftest_report_func_t report)
   const char *what;
   const char *errtxt;
   
-  what = "low-level";
-  errtxt = NULL; /*selftest ();*/
+  what = "short string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA512, 0, 
+     "abc", 3,
+     "\xDD\xAF\x35\xA1\x93\x61\x7A\xBA\xCC\x41\x73\x49\xAE\x20\x41\x31"
+     "\x12\xE6\xFA\x4E\x89\xA9\x7E\xA2\x0A\x9E\xEE\xE6\x4B\x55\xD3\x9A"
+     "\x21\x92\x99\x2A\x27\x4F\xC1\xA8\x36\xBA\x3C\x23\xA3\xFE\xEB\xBD"
+     "\x45\x4D\x44\x23\x64\x3C\xE8\x0E\x2A\x9A\xC9\x4F\xA5\x4C\xA4\x9F", 64);
   if (errtxt)
     goto failed;
 
-  /* FIXME:  need more tests.  */
+  what = "long string";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA512, 0, 
+     "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
+     "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", 112, 
+     "\x8E\x95\x9B\x75\xDA\xE3\x13\xDA\x8C\xF4\xF7\x28\x14\xFC\x14\x3F"
+     "\x8F\x77\x79\xC6\xEB\x9F\x7F\xA1\x72\x99\xAE\xAD\xB6\x88\x90\x18"
+     "\x50\x1D\x28\x9E\x49\x00\xF7\xE4\x33\x1B\x99\xDE\xC4\xB5\x43\x3A"
+     "\xC7\xD3\x29\xEE\xB6\xDD\x26\x54\x5E\x96\xE5\x5B\x87\x4B\xE9\x09", 64);
+  if (errtxt)
+    goto failed;
+
+  what = "one million \"a\"";
+  errtxt = _gcry_hash_selftest_check_one
+    (GCRY_MD_SHA512, 1,
+     NULL, 0,
+     "\xE7\x18\x48\x3D\x0C\xE7\x69\x64\x4E\x2E\x42\xC7\xBC\x15\xB4\x63"
+     "\x8E\x1F\x98\xB1\x3B\x20\x44\x28\x56\x32\xA8\x03\xAF\xA9\x73\xEB"
+     "\xDE\x0F\xF2\x44\x87\x7E\xA6\x0A\x4C\xB0\x43\x2C\xE5\x77\xC3\x1B"
+     "\xEB\x00\x9C\x5C\x2C\x49\xAA\x2E\x4E\xAD\xB2\x17\xAD\x8C\xC0\x9B", 64);
+  if (errtxt)
+    goto failed;
 
   return 0; /* Succeeded. */
 
index d301eae..a4dd27c 100644 (file)
@@ -26,8 +26,8 @@ min_automake_version="1.10"
 # Remember to change the version number immediately *after* a release.
 # Set my_issvn to "yes" for non-released code.  Remember to run an
 # "svn up" and "autogen.sh" right before creating a distribution.
-m4_define([my_version], [1.4.2])
-m4_define([my_issvn], [no])
+m4_define([my_version], [1.4.3])
+m4_define([my_issvn], [yes])
 
 m4_define([svn_revision], m4_esyscmd([printf "%d" $(svn info 2>/dev/null \
           | sed -n '/^Revision:/ s/[^0-9]//gp'|head -1)]))
index c068784..398278d 100644 (file)
@@ -5,46 +5,66 @@ Cc: gcrypt-devel@gnupg.org
 Hello! 
 
 The GNU project is pleased to announce the availability of Libgcrypt
-version 1.4.1.  This is a maintenance release to fix a few problems.
+version 1.4.2.
 
 Libgcrypt is a general purpose library of cryptographic building
 blocks.  It is originally based on code used by GnuPG.  It does not
 provide any implementation of OpenPGP or other protocols.  Thorough
 understanding of applied cryptography is required to use Libgcrypt.
 
-Noteworthy changes in version 1.4.1 (2008-04-25)
-------------------------------------------------
+Noteworthy changes in version 1.4.2:
 
- * Fixed a bug introduced by 1.3.1 which led to the comsumption of far
-   too much entropy for the intial seeding.
+ * The long missing gcry_mpi_lshift function has been added.
 
- * Improved AES performance for CFB and CBC modes.
+ * RSA key generation now supports a "transient-key" flag.
 
- * Removed build problems for the Padlock support.
+ * The keygrip computation for ECDSA has been implemented thus ECDSA
+   is now fully supported.
+
+ * A few macros have been replaced by functions for better type
+   checking.
+
+ * The thread initialization structure now carries version
+   information.
+
+ * The manual describes more clearly how to initialize Libgcrypt.
+
+ * The library may now be switched into a FIPS mode.
+
+ * Interface changes relative to the 1.3.0 release:
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ GCRYCTL_OPERATIONAL_P   NEW.
+ GCRYCTL_FIPS_MODE_P     NEW.
+ GCRYCTL_FORCE_FIPS_MODE NEW.
+ gcry_cipher_setkey      NEW: Replaces macro.
+ gcry_cipher_setiv       NEW: Replaces macro.
+ gcry_cipher_setctr      NEW: Replaces macro.
+ gcry_mpi_lshift         NEW.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 Source code is hosted at the GnuPG FTP server and its mirrors as
 listed at http://www.gnupg.org/download/mirrors.html .  On the primary
 server the source file and its digital signatures is:
 
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.1.tar.bz2 (946k)
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.1.tar.bz2.sig
+ ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.2.tar.bz2 (1049k)
+ ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.2.tar.bz2.sig
 
 This file is bzip2 compressed.  A gzip compressed version is also
 available:
 
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.1.tar.gz (1179k)
+ ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.1.tar.gz (1301k)
  ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.1.tar.gz.sig
 
-Alternativley you may upgrade version 1.4.0 using this patch file:
+Alternativley you may upgrade version 1.4.1 using this patch file:
 
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.0-1.4.1.diff.bz2 (49k)
+ ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.1-1.4.2.diff.bz2 (171k)
 
 The SHA-1 checksums are:
 
-367fe7fecd2ed4ab743849279dbc2f7e148f9956  libgcrypt-1.4.1.tar.bz2
-36f1c6632fa06a6d3c92f83c3cdca8c7731a4220  libgcrypt-1.4.1.tar.gz
-458fa5939df46da383df64b27ed8f8f580931618  libgcrypt-1.4.0-1.4.1.diff.bz2
+f4eda0d4a63905aef3bcdf24bb3dad787ef4b918  libgcrypt-1.4.2.tar.gz
+e9c65688e3191c4cad2910bda2f6c69fc05997a2  libgcrypt-1.4.2.tar.bz2
+e0e5e4192f144ae0fc093d08aff50b725f46c0f9  libgcrypt-1.4.1-1.4.2.diff.bz2
 
 
 For help on developing with Libgcrypt you should read the included
@@ -64,6 +84,7 @@ always looking for interesting development projects.
 Many thanks to all who contributed to Libgcrypt development, be it bug
 fixes, code, documentation, testing or helping users.
 
+
 Happy hacking,
 
   Werner
@@ -73,6 +94,6 @@ Happy hacking,
 
 [1] See http://www.gnupg.org/documentation/mailing-lists.html .
 [2] Note that copyright assignments to the FSF are required.
-[3] For example http://www.fsfeurope.org/help/donate.en.html .
+[3] For example see http://donate.fsf.org .
 [4] See the service directory at http://www.gnupg.org/service.html .
 
index 7d91d09..bf3b6b2 100644 (file)
@@ -1,3 +1,7 @@
+2008-09-09  Werner Koch  <wk@g10code.com>
+
+       * basic.c (main): New option --selftest.
+
 2008-08-29  Werner Koch  <wk@g10code.com>
 
        * keygrip.c: Update to also check ECDSA.
index 7904b8f..97ac2d9 100644 (file)
@@ -2045,6 +2045,7 @@ main (int argc, char **argv)
   int last_argc = -1;
   int debug = 0;
   int use_fips = 0;
+  int selftest_only = 0;
 
   if (argc)
     { argc--; argv++; }
@@ -2072,6 +2073,12 @@ main (int argc, char **argv)
           use_fips = 1;
           argc--; argv++;
         }
+      else if (!strcmp (*argv, "--selftest"))
+        {
+          selftest_only = 1;
+          verbose += 2;
+          argc--; argv++;
+        }
     }          
 
   gcry_control (GCRYCTL_SET_VERBOSITY, (int)verbose);
@@ -2095,17 +2102,20 @@ main (int argc, char **argv)
   if ( gcry_control (GCRYCTL_FIPS_MODE_P, 0) )
     in_fips_mode = 1;
 
-  check_ciphers ();
-  check_aes128_cbc_cts_cipher ();
-  check_cbc_mac_cipher ();
-  check_ctr_cipher ();
-  check_cfb_cipher ();
-  check_ofb_cipher ();
-  check_digests ();
-  check_hmac ();
-  check_pubkey ();
-
-  if (in_fips_mode)
+  if (!selftest_only)
+    {
+      check_ciphers ();
+      check_aes128_cbc_cts_cipher ();
+      check_cbc_mac_cipher ();
+      check_ctr_cipher ();
+      check_cfb_cipher ();
+      check_ofb_cipher ();
+      check_digests ();
+      check_hmac ();
+      check_pubkey ();
+    }
+
+  if (in_fips_mode && !selftest_only)
     {
       /* If we are in fips mode do some more tests. */
       gcry_md_hd_t md;
@@ -2152,7 +2162,7 @@ main (int argc, char **argv)
   else
     {
       /* If in standard mode, run selftests.  */
-      gcry_control (GCRYCTL_FORCE_FIPS_MODE, 0);
+      gcry_control (GCRYCTL_SELFTEST, 0);
     }
 
   if (verbose)