Sufficiently recent versions of nettle have support for RIPEMD160 and
there are various keys in the wild that use this algorithm, so add an
autoconf check for the nettle support and use it if it's available.
AX_CHECK_NETTLE_ALGO([MD2],[md2_digest])
AX_CHECK_NETTLE_ALGO([MD4],[md4_digest])
AX_CHECK_NETTLE_ALGO([MD5],[md5_digest])
AX_CHECK_NETTLE_ALGO([MD2],[md2_digest])
AX_CHECK_NETTLE_ALGO([MD4],[md4_digest])
AX_CHECK_NETTLE_ALGO([MD5],[md5_digest])
+ AX_CHECK_NETTLE_ALGO([RIPEMD160],[ripemd160_digest])
AX_CHECK_NETTLE_ALGO([SHA1],[sha1_digest])
AX_CHECK_NETTLE_ALGO([SHA224],[sha224_digest])
AX_CHECK_NETTLE_ALGO([SHA256],[sha256_digest])
AX_CHECK_NETTLE_ALGO([SHA1],[sha1_digest])
AX_CHECK_NETTLE_ALGO([SHA224],[sha224_digest])
AX_CHECK_NETTLE_ALGO([SHA256],[sha256_digest])
#ifdef HAVE_NETTLE
#include <nettle/md5.h>
#ifdef HAVE_NETTLE
#include <nettle/md5.h>
+#include <nettle/ripemd160.h>
#include <nettle/sha.h>
#else
#include "md5.h"
#include <nettle/sha.h>
#else
#include "md5.h"
size_t siglen, unhashedlen;
struct sha1_ctx sha1_context;
struct md5_ctx md5_context;
size_t siglen, unhashedlen;
struct sha1_ctx sha1_context;
struct md5_ctx md5_context;
+#ifdef NETTLE_WITH_RIPEMD160
+ struct ripemd160_ctx ripemd160_context;
+#endif
#ifdef NETTLE_WITH_SHA224
struct sha224_ctx sha224_context;
#endif
#ifdef NETTLE_WITH_SHA224
struct sha224_ctx sha224_context;
#endif
}
sha1_digest(&sha1_context, 20, hash);
break;
}
sha1_digest(&sha1_context, 20, hash);
break;
+ case OPENPGP_HASH_RIPEMD160:
+#ifdef NETTLE_WITH_RIPEMD160
+ ripemd160_init(&ripemd160_context);
+ for (i = 0; i < chunks; i++) {
+ ripemd160_update(&ripemd160_context, hashlen[i],
+ hashdata[i]);
+ }
+ ripemd160_digest(&ripemd160_context, RIPEMD160_DIGEST_SIZE,
+ hash);
+#else
+ logthing(LOGTHING_INFO, "RIPEMD160 support not available.");
+ return -1;
+#endif
case OPENPGP_HASH_SHA224:
#ifdef NETTLE_WITH_SHA224
sha224_init(&sha224_context);
case OPENPGP_HASH_SHA224:
#ifdef NETTLE_WITH_SHA224
sha224_init(&sha224_context);