]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
wrap_nettle_hash_exists: add missing hash algorithms
authorDaiki Ueno <ueno@gnu.org>
Fri, 17 Sep 2021 09:03:25 +0000 (11:03 +0200)
committerDaiki Ueno <ueno@gnu.org>
Mon, 20 Sep 2021 12:41:02 +0000 (14:41 +0200)
This adds SHAKE-128, SHAKE-256, and RIPEMD-160 to the supported
algorithms by nettle.  While SHAKEs are not a hash algorithm but an
XOF, it would be consistent to report they are implemented.

The simple test is expanded to exercise the code
path (gnutls_digest_get_id → wrap_nettle_hash_exists).

Signed-off-by: Daiki Ueno <ueno@gnu.org>
lib/nettle/mac.c
tests/simple.c

index 1b20a0cf82de5e008132512a9c7c22008f9b9318..f9d4d7a8df1289a10e7dc849969f1ba249879f90 100644 (file)
@@ -608,17 +608,20 @@ static int wrap_nettle_hash_exists(gnutls_digest_algorithm_t algo)
        case GNUTLS_DIG_SHA256:
        case GNUTLS_DIG_SHA384:
        case GNUTLS_DIG_SHA512:
-               return 1;
+
+#ifdef NETTLE_SHA3_FIPS202
        case GNUTLS_DIG_SHA3_224:
        case GNUTLS_DIG_SHA3_256:
        case GNUTLS_DIG_SHA3_384:
        case GNUTLS_DIG_SHA3_512:
-#ifdef NETTLE_SHA3_FIPS202
-               return 1;
-#else
-               return 0;
 #endif
+
+       case GNUTLS_DIG_SHAKE_128:
+       case GNUTLS_DIG_SHAKE_256:
+
        case GNUTLS_DIG_MD2:
+       case GNUTLS_DIG_RMD160:
+
 #if ENABLE_GOST
        case GNUTLS_DIG_GOSTR_94:
        case GNUTLS_DIG_STREEBOG_256:
index ef37e3689e428f168066f3915d1992bde7c91ae6..5e20c61182d727db9fcbbb267c7df286e5f27baf 100644 (file)
@@ -88,7 +88,7 @@ void doit(void)
                        if (gnutls_pk_get_id
                            (gnutls_pk_algorithm_get_name(algs[i]))
                            != algs[i])
-                               fail("gnutls_pk id's doesn't match\n");
+                               fail("gnutls_pk id doesn't match\n");
                }
 
                pk = gnutls_pk_get_id("foo");
@@ -109,6 +109,8 @@ void doit(void)
                        fail("gnutls_sign_list return NULL\n");
 
                for (i = 0; algs[i]; i++) {
+                       gnutls_digest_algorithm_t hash;
+
                        if (debug)
                                printf("sign_list[%d] = %d = %s = %d\n",
                                        (int) i, algs[i],
@@ -120,7 +122,17 @@ void doit(void)
                        if (gnutls_sign_get_id
                            (gnutls_sign_algorithm_get_name(algs[i])) !=
                            algs[i])
-                               fail("gnutls_sign id's doesn't match\n");
+                               fail("gnutls_sign id for %s doesn't match\n",
+                                    gnutls_sign_algorithm_get_name(algs[i]));
+
+                       hash = gnutls_sign_get_hash_algorithm(algs[i]);
+                       if (hash != GNUTLS_DIG_UNKNOWN) {
+                               const char *name = gnutls_digest_get_name(hash);
+                               if (gnutls_digest_get_id(name) != hash)
+                                       fail("gnutls_digest id for %s doesn't match %s\n",
+                                            gnutls_sign_algorithm_get_name(algs[i]),
+                                            name);
+                       }
                }
 
                pk = gnutls_sign_get_id("foo");