lib/gc.h, lib/gc-libgcrypt.c: Support SHA-256/384/512.
authorSimon Josefsson <simon@josefsson.org>
Mon, 5 Feb 2007 11:17:30 +0000 (11:17 +0000)
committerSimon Josefsson <simon@josefsson.org>
Mon, 5 Feb 2007 11:17:30 +0000 (11:17 +0000)
ChangeLog
lib/gc-libgcrypt.c
lib/gc.h

index 25c94ae..6969438 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-02-05  Simon Josefsson  <simon@josefsson.org>
+
+       * lib/gc.h, lib/gc-libgcrypt.c: Support SHA-256/384/512.
+
 2007-02-04  Paul Eggert  <eggert@cs.ucla.edu>
 
        * lib/getsubopt.c [!_LIBC]: Include config.h and getsubopt.h.
index 4a58349..6649660 100644 (file)
@@ -269,6 +269,18 @@ gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle)
       gcryalg = GCRY_MD_SHA1;
       break;
 
+    case GC_SHA256:
+      gcryalg = GCRY_MD_SHA256;
+      break;
+
+    case GC_SHA384:
+      gcryalg = GCRY_MD_SHA384;
+      break;
+
+    case GC_SHA512:
+      gcryalg = GCRY_MD_SHA512;
+      break;
+
     case GC_RMD160:
       gcryalg = GCRY_MD_RMD160;
       break;
@@ -356,6 +368,18 @@ gc_hash_digest_length (Gc_hash hash)
       len = GC_SHA1_DIGEST_SIZE;
       break;
 
+    case GC_SHA256:
+      len = GC_SHA256_DIGEST_SIZE;
+      break;
+
+    case GC_SHA384:
+      len = GC_SHA384_DIGEST_SIZE;
+      break;
+
+    case GC_SHA512:
+      len = GC_SHA512_DIGEST_SIZE;
+      break;
+
     default:
       return 0;
     }
@@ -453,6 +477,24 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
       break;
 #endif
 
+#ifdef GNULIB_GC_SHA256
+    case GC_SHA256:
+      gcryalg = GCRY_MD_SHA256;
+      break;
+#endif
+
+#ifdef GNULIB_GC_SHA384
+    case GC_SHA384:
+      gcryalg = GCRY_MD_SHA384;
+      break;
+#endif
+
+#ifdef GNULIB_GC_SHA512
+    case GC_SHA512:
+      gcryalg = GCRY_MD_SHA512;
+      break;
+#endif
+
 #ifdef GNULIB_GC_RMD160
     case GC_RMD160:
       gcryalg = GCRY_MD_RMD160;
index 84e4e63..d06b07e 100644 (file)
--- a/lib/gc.h
+++ b/lib/gc.h
@@ -1,5 +1,5 @@
 /* gc.h --- Header file for implementation agnostic crypto wrapper API.
- * Copyright (C) 2002, 2003, 2004, 2005  Simon Josefsson
+ * Copyright (C) 2002, 2003, 2004, 2005, 2007  Simon Josefsson
  *
  * This file is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published
@@ -45,7 +45,10 @@ enum Gc_hash
   GC_MD5,
   GC_SHA1,
   GC_MD2,
-  GC_RMD160
+  GC_RMD160,
+  GC_SHA256,
+  GC_SHA384,
+  GC_SHA512
 };
 typedef enum Gc_hash Gc_hash;
 
@@ -62,6 +65,9 @@ typedef void *gc_hash_handle;
 #define GC_MD5_DIGEST_SIZE 16
 #define GC_RMD160_DIGEST_SIZE 20
 #define GC_SHA1_DIGEST_SIZE 20
+#define GC_SHA256_DIGEST_SIZE 32
+#define GC_SHA384_DIGEST_SIZE 48
+#define GC_SHA512_DIGEST_SIZE 64
 
 /* Cipher types. */
 enum Gc_cipher