Add gc-sha1 module.
authorSimon Josefsson <simon@josefsson.org>
Wed, 12 Oct 2005 01:42:54 +0000 (01:42 +0000)
committerSimon Josefsson <simon@josefsson.org>
Wed, 12 Oct 2005 01:42:54 +0000 (01:42 +0000)
ChangeLog
lib/ChangeLog
lib/gc-gnulib.c
lib/gc-libgcrypt.c
lib/gc.h
m4/ChangeLog
m4/gc-sha1 [new file with mode: 0644]
modules/gc-sha1 [new file with mode: 0644]

index d85cafa..6c4b51c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2005-10-12  Simon Josefsson  <jas@extundo.com>
 
+       * modules/gc-sha1: New file.
+
+2005-10-12  Simon Josefsson  <jas@extundo.com>
+
        * tests/test-hmac-sha1.c: New file.
 
        * modules/hmac-sha1-tests: New file.
index b67eec2..9b74d15 100644 (file)
@@ -1,5 +1,9 @@
 2005-10-12  Simon Josefsson  <jas@extundo.com>
 
+       * gc.h, gc-gnulib.c, gc-libgcrypt.c: Support SHA-1.
+
+2005-10-12  Simon Josefsson  <jas@extundo.com>
+
        * gc-gnulib.c: Condition MD5 and HMAC-MD5 use on GC_USE_MD5 and
        GC_USE_HMAC_MD5, respectively.
 
index 00bab97..dfe4edc 100644 (file)
@@ -40,6 +40,9 @@
 #ifdef GC_USE_MD5
 # include "md5.h"
 #endif
+#ifdef GC_USE_SHA1
+# include "sha1.h"
+#endif
 #ifdef GC_USE_HMAC_MD5
 # include "hmac.h"
 #endif
@@ -152,6 +155,12 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
       break;
 #endif
 
+#ifdef GC_USE_SHA1
+    case GC_SHA1:
+      sha1_buffer (in, inlen, resbuf);
+      break;
+#endif
+
     default:
       return GC_INVALID_HASH;
     }
@@ -168,6 +177,15 @@ gc_md5 (const void *in, size_t inlen, void *resbuf)
 }
 #endif
 
+#ifdef GC_USE_SHA1
+int
+gc_sha1 (const void *in, size_t inlen, void *resbuf)
+{
+  sha1_buffer (in, inlen, resbuf);
+  return 0;
+}
+#endif
+
 #ifdef GC_USE_HMAC_MD5
 int
 gc_hmac_md5 (const void *key, size_t keylen,
index 0c7e2c3..4f4ae10 100644 (file)
@@ -109,6 +109,12 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
       break;
 #endif
 
+#ifdef GC_USE_SHA1
+    case GC_SHA1:
+      gcryalg = GCRY_MD_SHA1;
+      break;
+#endif
+
     default:
       return GC_INVALID_HASH;
     }
@@ -152,6 +158,38 @@ gc_md5 (const void *in, size_t inlen, void *resbuf)
 }
 #endif
 
+#ifdef GC_USE_SHA1
+int
+gc_sha1 (const void *in, size_t inlen, void *resbuf)
+{
+  size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1);
+  gcry_md_hd_t hd;
+  gpg_error_t err;
+  unsigned char *p;
+
+  assert (outlen == GC_SHA1_DIGEST_SIZE);
+
+  err = gcry_md_open (&hd, GCRY_MD_SHA1, 0);
+  if (err != GPG_ERR_NO_ERROR)
+    return GC_INVALID_HASH;
+
+  gcry_md_write (hd, in, inlen);
+
+  p = gcry_md_read (hd, GCRY_MD_SHA1);
+  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_HMAC_MD5
 int
 gc_hmac_md5 (const void *key, size_t keylen,
index c966a99..c66d31a 100644 (file)
--- a/lib/gc.h
+++ b/lib/gc.h
@@ -41,11 +41,13 @@ typedef enum Gc_rc Gc_rc;
 /* Hash types. */
 enum Gc_hash
   {
-    GC_MD5
+    GC_MD5,
+    GC_SHA1
   };
 typedef enum Gc_hash Gc_hash;
 
 #define GC_MD5_DIGEST_SIZE 16
+#define GC_SHA1_DIGEST_SIZE 20
 
 /* Call before respectively after any other functions. */
 extern int gc_init (void);
@@ -75,9 +77,13 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *out);
 
 /* One-call interface. */
 extern int gc_md5 (const void *in, size_t inlen, void *resbuf);
+extern int gc_sha1 (const void *in, size_t inlen, void *resbuf);
 extern int gc_hmac_md5 (const void *key, size_t keylen,
                        const void *in, size_t inlen,
                        char *resbuf);
+extern int gc_hmac_sha1 (const void *key, size_t keylen,
+                        const void *in, size_t inlen,
+                        char *resbuf);
 
 /*
   TODO:
index 2b5f250..2918785 100644 (file)
@@ -1,5 +1,7 @@
 2005-10-12  Simon Josefsson  <jas@extundo.com>
 
+       * gc-sha1: New file.
+
        * hmac-sha1.m4: New file.
 
 2005-10-12  Simon Josefsson  <jas@extundo.com>
diff --git a/m4/gc-sha1 b/m4/gc-sha1
new file mode 100644 (file)
index 0000000..c305120
--- /dev/null
@@ -0,0 +1,15 @@
+# gc-sha1.m4 serial 1
+dnl Copyright (C) 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_GC_SHA1],
+[
+  AC_REQUIRE([gl_GC])
+  AC_DEFINE(GC_USE_SHA1, 1,
+    [Define to if you want to support SHA-1 through GC.])
+  if test "$ac_cv_libgcrypt" != yes; then
+    gl_SHA1
+  fi
+])
diff --git a/modules/gc-sha1 b/modules/gc-sha1
new file mode 100644 (file)
index 0000000..18ba02e
--- /dev/null
@@ -0,0 +1,26 @@
+Description:
+Generic crypto wrappers for SHA-1 functions.
+
+Files:
+m4/gc-sha1.m4
+lib/sha1.h
+lib/sha1.c
+m4/sha1.m4
+
+Depends-on:
+stdint
+gc
+
+configure.ac:
+gl_GC_SHA1
+
+Makefile.am:
+
+Include:
+"gc.h"
+
+License:
+LGPL
+
+Maintainer:
+Simon Josefsson