summaryrefslogtreecommitdiff
path: root/lib/gc-libgcrypt.c
diff options
context:
space:
mode:
authorSimon Josefsson <simon@josefsson.org>2005-10-18 23:35:50 +0000
committerSimon Josefsson <simon@josefsson.org>2005-10-18 23:35:50 +0000
commiteecf6279cfd2b8aa43b7eb1752034b497fd67877 (patch)
tree90a835c9fdde51750b80eaaf789afb526b5814de /lib/gc-libgcrypt.c
parent82c1692fcf6a698beaf2eaa6f5a4cbc3f378a3b9 (diff)
downloadgnulib-eecf6279cfd2b8aa43b7eb1752034b497fd67877.tar.gz
Add gc-md4 and gc-md4-tests modules.
Diffstat (limited to 'lib/gc-libgcrypt.c')
-rw-r--r--lib/gc-libgcrypt.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/gc-libgcrypt.c b/lib/gc-libgcrypt.c
index 18dba4cb78..180fee9ca5 100644
--- a/lib/gc-libgcrypt.c
+++ b/lib/gc-libgcrypt.c
@@ -222,6 +222,10 @@ gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle)
switch (hash)
{
+ case GC_MD4:
+ gcryalg = GCRY_MD_MD4;
+ break;
+
case GC_MD5:
gcryalg = GCRY_MD_MD5;
break;
@@ -278,6 +282,10 @@ gc_hash_digest_length (Gc_hash hash)
switch (hash)
{
+ case GC_MD4:
+ gcryalg = GCRY_MD_MD4;
+ break;
+
case GC_MD5:
gcryalg = GCRY_MD_MD5;
break;
@@ -333,6 +341,12 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
switch (hash)
{
+#ifdef GC_USE_MD4
+ case GC_MD4:
+ gcryalg = GCRY_MD_MD4;
+ break;
+#endif
+
#ifdef GC_USE_MD5
case GC_MD5:
gcryalg = GCRY_MD_MD5;
@@ -362,6 +376,38 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
/* One-call interface. */
+#ifdef GC_USE_MD4
+Gc_rc
+gc_md4 (const void *in, size_t inlen, void *resbuf)
+{
+ size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_MD4);
+ gcry_md_hd_t hd;
+ gpg_error_t err;
+ unsigned char *p;
+
+ assert (outlen == GC_MD4_DIGEST_SIZE);
+
+ err = gcry_md_open (&hd, GCRY_MD_MD4, 0);
+ if (err != GPG_ERR_NO_ERROR)
+ return GC_INVALID_HASH;
+
+ gcry_md_write (hd, in, inlen);
+
+ p = gcry_md_read (hd, GCRY_MD_MD4);
+ if (p == NULL)
+ {
+ gcry_md_close (hd);
+ return GC_INVALID_HASH;
+ }
+
+ memcpy (resbuf, p, outlen);
+
+ gcry_md_close (hd);
+
+ return GC_OK;
+}
+#endif
+
#ifdef GC_USE_MD5
Gc_rc
gc_md5 (const void *in, size_t inlen, void *resbuf)