]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
nettle: plumb RIPEMD160
authorDaiki Ueno <ueno@gnu.org>
Fri, 22 Mar 2024 01:48:02 +0000 (10:48 +0900)
committerDaiki Ueno <ueno@gnu.org>
Sat, 23 Mar 2024 01:51:07 +0000 (10:51 +0900)
RIPEMD160 is still used by GnuTLS to calculate fingerprint for an
OpenPGP key when displaying it:

- https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=g10/keyid.c;h=7e4c50b59de8c25756c5ce890deecab233f19b53;hb=refs/heads/master#l800
- https://gitlab.gnome.org/GNOME/gcr/-/blob/f3c95db45099dff288986aa367007da1e855a3d0/gcr/gcr-openpgp.c#L268

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

index ba2db6d945147b624fcd709166128f7f75d4baba..f08101c164546bb978597c3c7804dda31cb51c3f 100644 (file)
@@ -2088,6 +2088,14 @@ const struct hash_vectors_st md5_vectors[] = {
        },
 };
 
+const struct hash_vectors_st rmd160_vectors[] = {
+       {
+               STR(plaintext, plaintext_size, "abcdefghijklmnopqrstuvwxyz"),
+               STR(output, output_size,
+                   "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb\xdc\xeb\x5b\x9d\x28\x65\xb3\x70\x8d\xbc"),
+       },
+};
+
 const struct hash_vectors_st sha1_vectors[] = {
        {
                STR(plaintext, plaintext_size, "what do ya want for nothing?"),
@@ -2862,6 +2870,8 @@ int gnutls_digest_self_test(unsigned flags, gnutls_digest_algorithm_t digest)
        case GNUTLS_DIG_UNKNOWN:
                NON_FIPS_CASE(GNUTLS_DIG_MD5, test_digest, md5_vectors);
                FALLTHROUGH;
+               NON_FIPS_CASE(GNUTLS_DIG_RMD160, test_digest, rmd160_vectors);
+               FALLTHROUGH;
                CASE(GNUTLS_DIG_SHA1, test_digest, sha1_vectors);
                FALLTHROUGH;
                CASE(GNUTLS_DIG_SHA224, test_digest, sha224_vectors);
index 8d8639e8b3f61fc8840b3ad6178b2233c750587a..61ebd0e710f747d0fec3e68f69effc346c9112e2 100644 (file)
@@ -28,6 +28,7 @@
 #include "errors.h"
 #include <nettle/md5.h>
 #include <nettle/md2.h>
+#include <nettle/ripemd160.h>
 #include <nettle/sha.h>
 #include <nettle/sha3.h>
 #include <nettle/hmac.h>
@@ -82,6 +83,7 @@ struct nettle_hash_ctx {
                struct sha3_512_ctx sha3_512;
                struct sha1_ctx sha1;
                struct md2_ctx md2;
+               struct ripemd160_ctx ripemd160;
                struct md5_sha1_ctx md5_sha1;
 #if ENABLE_GOST
                struct gosthash94cp_ctx gosthash94cp;
@@ -738,6 +740,14 @@ static int _ctx_init(gnutls_digest_algorithm_t algo,
                ctx->ctx_ptr = &ctx->ctx.md2;
                ctx->length = MD2_DIGEST_SIZE;
                break;
+
+       case GNUTLS_DIG_RMD160:
+               ripemd160_init(&ctx->ctx.ripemd160);
+               ctx->update = (update_func)ripemd160_update;
+               ctx->digest = (digest_func)ripemd160_digest;
+               ctx->ctx_ptr = &ctx->ctx.ripemd160;
+               ctx->length = RIPEMD160_DIGEST_SIZE;
+               break;
 #if ENABLE_GOST
        case GNUTLS_DIG_GOSTR_94:
                gosthash94cp_init(&ctx->ctx.gosthash94cp);