New module 'striconveh'.
[gnulib.git] / lib / gc-gnulib.c
index a91a7c3..f414f43 100644 (file)
@@ -1,5 +1,5 @@
 /* gc-gnulib.c --- Common gnulib internal crypto interface functions
- * Copyright (C) 2002, 2003, 2004, 2005, 2006  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 internal functions. */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 /* Get prototype. */
 #include "gc.h"
@@ -31,7 +29,7 @@
 #include <string.h>
 
 /* For randomize. */
-#ifdef GC_USE_RANDOM
+#ifdef GNULIB_GC_RANDOM
 # include <unistd.h>
 # include <sys/types.h>
 # include <sys/stat.h>
 #endif
 
 /* Hashes. */
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
 # include "md2.h"
 #endif
-#ifdef GC_USE_MD4
+#ifdef GNULIB_GC_MD4
 # include "md4.h"
 #endif
-#ifdef GC_USE_MD5
+#ifdef GNULIB_GC_MD5
 # include "md5.h"
 #endif
-#ifdef GC_USE_SHA1
+#ifdef GNULIB_GC_SHA1
 # include "sha1.h"
 #endif
-#ifdef GC_USE_HMAC_MD5
+#if defined(GNULIB_GC_HMAC_MD5) || defined(GNULIB_GC_HMAC_SHA1)
 # include "hmac.h"
 #endif
 
 /* Ciphers. */
-#ifdef GC_USE_ARCFOUR
+#ifdef GNULIB_GC_ARCFOUR
 # include "arcfour.h"
 #endif
-#ifdef GC_USE_ARCTWO
+#ifdef GNULIB_GC_ARCTWO
 # include "arctwo.h"
 #endif
-#ifdef GC_USE_DES
+#ifdef GNULIB_GC_DES
 # include "des.h"
 #endif
-#ifdef GC_USE_RIJNDAEL
+#ifdef GNULIB_GC_RIJNDAEL
 # include "rijndael-api-fst.h"
 #endif
 
+/* The results of open() in this file are not used with fchdir,
+   therefore save some unnecessary work in fchdir.c.  */
+#undef open
+#undef close
+
 Gc_rc
 gc_init (void)
 {
@@ -82,7 +85,7 @@ gc_done (void)
   return;
 }
 
-#ifdef GC_USE_RANDOM
+#ifdef GNULIB_GC_RANDOM
 
 /* Randomness. */
 
@@ -176,17 +179,17 @@ gc_set_allocators (gc_malloc_t func_malloc,
 typedef struct _gc_cipher_ctx {
   Gc_cipher alg;
   Gc_cipher_mode mode;
-#ifdef GC_USE_ARCTWO
+#ifdef GNULIB_GC_ARCTWO
   arctwo_context arctwoContext;
   char arctwoIV[ARCTWO_BLOCK_SIZE];
 #endif
-#ifdef GC_USE_ARCFOUR
+#ifdef GNULIB_GC_ARCFOUR
   arcfour_context arcfourContext;
 #endif
-#ifdef GC_USE_DES
+#ifdef GNULIB_GC_DES
   des_ctx desContext;
 #endif
-#ifdef GC_USE_RIJNDAEL
+#ifdef GNULIB_GC_RIJNDAEL
   rijndaelKeyInstance aesEncKey;
   rijndaelKeyInstance aesDecKey;
   rijndaelCipherInstance aesContext;
@@ -209,7 +212,7 @@ gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode,
 
   switch (alg)
     {
-#ifdef GC_USE_ARCTWO
+#ifdef GNULIB_GC_ARCTWO
     case GC_ARCTWO40:
       switch (mode)
        {
@@ -223,7 +226,7 @@ gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode,
       break;
 #endif
 
-#ifdef GC_USE_ARCFOUR
+#ifdef GNULIB_GC_ARCFOUR
     case GC_ARCFOUR128:
     case GC_ARCFOUR40:
       switch (mode)
@@ -237,7 +240,7 @@ gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode,
       break;
 #endif
 
-#ifdef GC_USE_DES
+#ifdef GNULIB_GC_DES
     case GC_DES:
       switch (mode)
        {
@@ -250,7 +253,7 @@ gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode,
       break;
 #endif
 
-#ifdef GC_USE_RIJNDAEL
+#ifdef GNULIB_GC_RIJNDAEL
     case GC_AES128:
     case GC_AES192:
     case GC_AES256:
@@ -285,20 +288,20 @@ gc_cipher_setkey (gc_cipher_handle handle, size_t keylen, const char *key)
 
   switch (ctx->alg)
     {
-#ifdef GC_USE_ARCTWO
+#ifdef GNULIB_GC_ARCTWO
     case GC_ARCTWO40:
       arctwo_setkey (&ctx->arctwoContext, keylen, key);
       break;
 #endif
 
-#ifdef GC_USE_ARCFOUR
+#ifdef GNULIB_GC_ARCFOUR
     case GC_ARCFOUR128:
     case GC_ARCFOUR40:
       arcfour_setkey (&ctx->arcfourContext, key, keylen);
       break;
 #endif
 
-#ifdef GC_USE_DES
+#ifdef GNULIB_GC_DES
     case GC_DES:
       if (keylen != 8)
        return GC_INVALID_CIPHER;
@@ -306,7 +309,7 @@ gc_cipher_setkey (gc_cipher_handle handle, size_t keylen, const char *key)
       break;
 #endif
 
-#ifdef GC_USE_RIJNDAEL
+#ifdef GNULIB_GC_RIJNDAEL
     case GC_AES128:
     case GC_AES192:
     case GC_AES256:
@@ -349,7 +352,7 @@ gc_cipher_setiv (gc_cipher_handle handle, size_t ivlen, const char *iv)
 
   switch (ctx->alg)
     {
-#ifdef GC_USE_ARCTWO
+#ifdef GNULIB_GC_ARCTWO
     case GC_ARCTWO40:
       if (ivlen != ARCTWO_BLOCK_SIZE)
        return GC_INVALID_CIPHER;
@@ -357,7 +360,7 @@ gc_cipher_setiv (gc_cipher_handle handle, size_t ivlen, const char *iv)
       break;
 #endif
 
-#ifdef GC_USE_RIJNDAEL
+#ifdef GNULIB_GC_RIJNDAEL
     case GC_AES128:
     case GC_AES192:
     case GC_AES256:
@@ -403,7 +406,7 @@ gc_cipher_encrypt_inline (gc_cipher_handle handle, size_t len, char *data)
 
   switch (ctx->alg)
     {
-#ifdef GC_USE_ARCTWO
+#ifdef GNULIB_GC_ARCTWO
     case GC_ARCTWO40:
       switch (ctx->mode)
        {
@@ -430,21 +433,21 @@ gc_cipher_encrypt_inline (gc_cipher_handle handle, size_t len, char *data)
       break;
 #endif
 
-#ifdef GC_USE_ARCFOUR
+#ifdef GNULIB_GC_ARCFOUR
     case GC_ARCFOUR128:
     case GC_ARCFOUR40:
       arcfour_stream (&ctx->arcfourContext, data, data, len);
       break;
 #endif
 
-#ifdef GC_USE_DES
+#ifdef GNULIB_GC_DES
     case GC_DES:
       for (; len >= 8; len -= 8, data += 8)
        des_ecb_encrypt (&ctx->desContext, data, data);
       break;
 #endif
 
-#ifdef GC_USE_RIJNDAEL
+#ifdef GNULIB_GC_RIJNDAEL
     case GC_AES128:
     case GC_AES192:
     case GC_AES256:
@@ -473,7 +476,7 @@ gc_cipher_decrypt_inline (gc_cipher_handle handle, size_t len, char *data)
 
   switch (ctx->alg)
     {
-#ifdef GC_USE_ARCTWO
+#ifdef GNULIB_GC_ARCTWO
     case GC_ARCTWO40:
       switch (ctx->mode)
        {
@@ -502,21 +505,21 @@ gc_cipher_decrypt_inline (gc_cipher_handle handle, size_t len, char *data)
       break;
 #endif
 
-#ifdef GC_USE_ARCFOUR
+#ifdef GNULIB_GC_ARCFOUR
     case GC_ARCFOUR128:
     case GC_ARCFOUR40:
       arcfour_stream (&ctx->arcfourContext, data, data, len);
       break;
 #endif
 
-#ifdef GC_USE_DES
+#ifdef GNULIB_GC_DES
     case GC_DES:
       for (; len >= 8; len -= 8, data += 8)
        des_ecb_decrypt (&ctx->desContext, data, data);
       break;
 #endif
 
-#ifdef GC_USE_RIJNDAEL
+#ifdef GNULIB_GC_RIJNDAEL
     case GC_AES128:
     case GC_AES192:
     case GC_AES256:
@@ -557,16 +560,16 @@ typedef struct _gc_hash_ctx {
   Gc_hash alg;
   Gc_hash_mode mode;
   char hash[MAX_DIGEST_SIZE];
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
   struct md2_ctx md2Context;
 #endif
-#ifdef GC_USE_MD4
+#ifdef GNULIB_GC_MD4
   struct md4_ctx md4Context;
 #endif
-#ifdef GC_USE_MD5
+#ifdef GNULIB_GC_MD5
   struct md5_ctx md5Context;
 #endif
-#ifdef GC_USE_SHA1
+#ifdef GNULIB_GC_SHA1
   struct sha1_ctx sha1Context;
 #endif
 } _gc_hash_ctx;
@@ -584,25 +587,25 @@ gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle)
 
   switch (hash)
     {
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
     case GC_MD2:
       md2_init_ctx (&ctx->md2Context);
       break;
 #endif
 
-#ifdef GC_USE_MD4
+#ifdef GNULIB_GC_MD4
     case GC_MD4:
       md4_init_ctx (&ctx->md4Context);
       break;
 #endif
 
-#ifdef GC_USE_MD5
+#ifdef GNULIB_GC_MD5
     case GC_MD5:
       md5_init_ctx (&ctx->md5Context);
       break;
 #endif
 
-#ifdef GC_USE_SHA1
+#ifdef GNULIB_GC_SHA1
     case GC_SHA1:
       sha1_init_ctx (&ctx->sha1Context);
       break;
@@ -687,25 +690,25 @@ gc_hash_write (gc_hash_handle handle, size_t len, const char *data)
 
   switch (ctx->alg)
     {
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
     case GC_MD2:
       md2_process_bytes (data, len, &ctx->md2Context);
       break;
 #endif
 
-#ifdef GC_USE_MD4
+#ifdef GNULIB_GC_MD4
     case GC_MD4:
       md4_process_bytes (data, len, &ctx->md4Context);
       break;
 #endif
 
-#ifdef GC_USE_MD5
+#ifdef GNULIB_GC_MD5
     case GC_MD5:
       md5_process_bytes (data, len, &ctx->md5Context);
       break;
 #endif
 
-#ifdef GC_USE_SHA1
+#ifdef GNULIB_GC_SHA1
     case GC_SHA1:
       sha1_process_bytes (data, len, &ctx->sha1Context);
       break;
@@ -724,28 +727,28 @@ gc_hash_read (gc_hash_handle handle)
 
   switch (ctx->alg)
     {
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
     case GC_MD2:
       md2_finish_ctx (&ctx->md2Context, ctx->hash);
       ret = ctx->hash;
       break;
 #endif
 
-#ifdef GC_USE_MD4
+#ifdef GNULIB_GC_MD4
     case GC_MD4:
       md4_finish_ctx (&ctx->md4Context, ctx->hash);
       ret = ctx->hash;
       break;
 #endif
 
-#ifdef GC_USE_MD5
+#ifdef GNULIB_GC_MD5
     case GC_MD5:
       md5_finish_ctx (&ctx->md5Context, ctx->hash);
       ret = ctx->hash;
       break;
 #endif
 
-#ifdef GC_USE_SHA1
+#ifdef GNULIB_GC_SHA1
     case GC_SHA1:
       sha1_finish_ctx (&ctx->sha1Context, ctx->hash);
       ret = ctx->hash;
@@ -772,25 +775,25 @@ 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);
       break;
 #endif
 
-#ifdef GC_USE_MD4
+#ifdef GNULIB_GC_MD4
     case GC_MD4:
       md4_buffer (in, inlen, resbuf);
       break;
 #endif
 
-#ifdef GC_USE_MD5
+#ifdef GNULIB_GC_MD5
     case GC_MD5:
       md5_buffer (in, inlen, resbuf);
       break;
 #endif
 
-#ifdef GC_USE_SHA1
+#ifdef GNULIB_GC_SHA1
     case GC_SHA1:
       sha1_buffer (in, inlen, resbuf);
       break;
@@ -803,7 +806,7 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
   return GC_OK;
 }
 
-#ifdef GC_USE_MD2
+#ifdef GNULIB_GC_MD2
 Gc_rc
 gc_md2 (const void *in, size_t inlen, void *resbuf)
 {
@@ -812,7 +815,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)
 {
@@ -821,7 +824,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)
 {
@@ -830,7 +833,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)
 {
@@ -839,7 +842,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)
@@ -849,7 +852,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)