* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
[gnulib.git] / lib / gc-libgcrypt.c
index 10841e8..6649660 100644 (file)
@@ -1,5 +1,5 @@
 /* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC.
- * Copyright (C) 2002, 2003, 2004, 2005  Simon Josefsson
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 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
@@ -20,9 +20,7 @@
 
 /* Note: This file is only built if GC uses Libgcrypt. */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 /* Get prototype. */
 #include "gc.h"
@@ -32,7 +30,7 @@
 
 /* Get libgcrypt API. */
 #include <gcrypt.h>
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
 # include "md2.h"
 #endif
 
@@ -65,6 +63,8 @@ gc_done (void)
   return;
 }
 
+#ifdef GNULIB_GC_RANDOM
+
 /* Randomness. */
 
 Gc_rc
@@ -88,6 +88,8 @@ gc_random (char *data, size_t datalen)
   return GC_OK;
 }
 
+#endif
+
 /* Memory allocation. */
 
 void
@@ -228,7 +230,7 @@ typedef struct _gc_hash_ctx {
   Gc_hash alg;
   Gc_hash_mode mode;
   gcry_md_hd_t gch;
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
   char hash[GC_MD2_DIGEST_SIZE];
   struct md2_ctx md2Context;
 #endif
@@ -267,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;
@@ -354,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;
     }
@@ -365,7 +391,7 @@ void
 gc_hash_hmac_setkey (gc_hash_handle handle, size_t len, const char *key)
 {
   _gc_hash_ctx *ctx = handle;
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
   if (ctx->alg != GC_MD2)
 #endif
     gcry_md_setkey (ctx->gch, key, len);
@@ -376,7 +402,7 @@ gc_hash_write (gc_hash_handle handle, size_t len, const char *data)
 {
   _gc_hash_ctx *ctx = handle;
 
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
   if (ctx->alg == GC_MD2)
     md2_process_bytes (data, len, &ctx->md2Context);
   else
@@ -390,7 +416,7 @@ gc_hash_read (gc_hash_handle handle)
   _gc_hash_ctx *ctx = handle;
   const char *digest;
 
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
   if (ctx->alg == GC_MD2)
     {
       md2_finish_ctx (&ctx->md2Context, ctx->hash);
@@ -411,7 +437,7 @@ gc_hash_close (gc_hash_handle handle)
 {
   _gc_hash_ctx *ctx = handle;
 
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
   if (ctx->alg != GC_MD2)
 #endif
     gcry_md_close (ctx->gch);
@@ -426,32 +452,50 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
 
   switch (hash)
     {
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
     case GC_MD2:
       md2_buffer (in, inlen, resbuf);
       return GC_OK;
       break;
 #endif
 
-#ifdef GC_USE_MD4
+#ifdef GNULIB_GC_MD4
     case GC_MD4:
       gcryalg = GCRY_MD_MD4;
       break;
 #endif
 
-#ifdef GC_USE_MD5
+#ifdef GNULIB_GC_MD5
     case GC_MD5:
       gcryalg = GCRY_MD_MD5;
       break;
 #endif
 
-#ifdef GC_USE_SHA1
+#ifdef GNULIB_GC_SHA1
     case GC_SHA1:
       gcryalg = GCRY_MD_SHA1;
       break;
 #endif
 
-#ifdef GC_USE_RMD160
+#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;
       break;
@@ -468,7 +512,7 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
 
 /* One-call interface. */
 
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
 Gc_rc
 gc_md2 (const void *in, size_t inlen, void *resbuf)
 {
@@ -477,7 +521,7 @@ gc_md2 (const void *in, size_t inlen, void *resbuf)
 }
 #endif
 
-#ifdef GC_USE_MD4
+#ifdef GNULIB_GC_MD4
 Gc_rc
 gc_md4 (const void *in, size_t inlen, void *resbuf)
 {
@@ -509,7 +553,7 @@ gc_md4 (const void *in, size_t inlen, void *resbuf)
 }
 #endif
 
-#ifdef GC_USE_MD5
+#ifdef GNULIB_GC_MD5
 Gc_rc
 gc_md5 (const void *in, size_t inlen, void *resbuf)
 {
@@ -541,7 +585,7 @@ gc_md5 (const void *in, size_t inlen, void *resbuf)
 }
 #endif
 
-#ifdef GC_USE_SHA1
+#ifdef GNULIB_GC_SHA1
 Gc_rc
 gc_sha1 (const void *in, size_t inlen, void *resbuf)
 {
@@ -573,7 +617,7 @@ gc_sha1 (const void *in, size_t inlen, void *resbuf)
 }
 #endif
 
-#ifdef GC_USE_HMAC_MD5
+#ifdef GNULIB_GC_HMAC_MD5
 Gc_rc
 gc_hmac_md5 (const void *key, size_t keylen,
             const void *in, size_t inlen, char *resbuf)
@@ -613,7 +657,7 @@ gc_hmac_md5 (const void *key, size_t keylen,
 }
 #endif
 
-#ifdef GC_USE_HMAC_SHA1
+#ifdef GNULIB_GC_HMAC_SHA1
 Gc_rc
 gc_hmac_sha1 (const void *key, size_t keylen,
              const void *in, size_t inlen, char *resbuf)