bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: des: compilation error on MacOS X


From: Simon Josefsson
Subject: Re: des: compilation error on MacOS X
Date: Mon, 12 Mar 2007 12:42:04 +0100
User-agent: Gnus/5.110006 (No Gnus v0.6) Emacs/22.0.94 (gnu/linux)

Bruno Haible <address@hidden> writes:

> Hi Simon,
>
> On MacOS X 10.3.9 the 'gc-gnulib' (or 'gc-des') module fails to build:
>
> depbase=`echo gc-gnulib.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
> gcc -std=gnu99 -DHAVE_CONFIG_H -DEXEEXT=\"\" -DEXEEXT=\"\" -DNO_XMALLOC 
> -DEXEEXT=\"\" -I. -I..  -I../intl -Wall  -g -O2 -MT gc-gnulib.o -MD -MP -MF 
> $depbase.Tpo -c -o gc-gnulib.o gc-gnulib.c &&\
> mv -f $depbase.Tpo $depbase.Po
> In file included from gc-gnulib.c:65:
> des.h:62: error: conflicting types for `des_setkey'
> /usr/include/unistd.h:196: error: previous declaration of `des_setkey'
> make[3]: *** [gc-gnulib.o] Error 1
>
> The declaration in /usr/include/unistd.h looks like this:
>
> int      des_setkey(const char *key);
>
> which is clearly different from the one in gnulib's des.h:
>
> extern void
> des_setkey (des_ctx *ctx, const char * key);

Gnulib's goal here isn't trying to be compatible with whatever
standard specified the MacOS X 'des_setkey'.  I suspect their
functions use global variables for the context, which isn't something
we should promote.

I changed the namespace to gl_des as below.

/Simon

Index: lib/des.c
===================================================================
RCS file: /sources/gnulib/gnulib/lib/des.c,v
retrieving revision 1.3
diff -u -p -r1.3 des.c
--- lib/des.c   29 Oct 2006 21:52:55 -0000      1.3
+++ lib/des.c   12 Mar 2007 11:37:57 -0000
@@ -1,5 +1,5 @@
 /* des.c --- DES and Triple-DES encryption/decryption Algorithm
- * Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006
+ * Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
  *    Free Software Foundation, Inc.
  *
  * This file is free software; you can redistribute it and/or modify
@@ -54,7 +54,7 @@
  *     unsigned char plaintext[8];
  *     unsigned char ciphertext[8];
  *     unsigned char recoverd[8];
- *     des_ctx context;
+ *     gl_des_ctx context;
  *
  *     // Fill 'key' and 'plaintext' with some data
  *     ....
@@ -77,20 +77,20 @@
  *     unsigned char plaintext[8];
  *     unsigned char ciphertext[8];
  *     unsigned char recoverd[8];
- *     tripledes_ctx context;
+ *     gl_3des_ctx context;
  *
  *     // If you would like to use two 64bit keys, fill 'key1' and'key2'
  *     // then setup the encryption context:
- *     tripledes_set2keys(&context, key1, key2);
+ *     gl_3des_set2keys(&context, key1, key2);
  *
  *     // To use three 64bit keys with Triple-DES use:
- *     tripledes_set3keys(&context, key1, key2, key3);
+ *     gl_3des_set3keys(&context, key1, key2, key3);
  *
  *     // Encrypting plaintext with Triple-DES
- *     tripledes_ecb_encrypt(&context, plaintext, ciphertext);
+ *     gl_3des_ecb_encrypt(&context, plaintext, ciphertext);
  *
  *     // Decrypting ciphertext to recover the plaintext with Triple-DES
- *     tripledes_ecb_decrypt(&context, ciphertext, recoverd);
+ *     gl_3des_ecb_decrypt(&context, ciphertext, recoverd);
  */
 
 
@@ -324,7 +324,7 @@ static const unsigned char weak_keys_chk
 };
 
 bool
-des_is_weak_key (const char * key)
+gl_des_is_weak_key (const char * key)
 {
   char work[8];
   int i, left, right, middle, cmp_result;
@@ -424,14 +424,6 @@ des_is_weak_key (const char * key)
     data[6] = (right >> 8) &0xff; data[7] = right &0xff;
 
 /*
- * Handy macros for encryption and decryption of data
- */
-#define des_ecb_encrypt(ctx, from, to)       des_ecb_crypt(ctx, from, to, 0)
-#define des_ecb_decrypt(ctx, from, to)       des_ecb_crypt(ctx, from, to, 1)
-#define tripledes_ecb_encrypt(ctx, from, to) tripledes_ecb_crypt(ctx,from,to,0)
-#define tripledes_ecb_decrypt(ctx, from, to) tripledes_ecb_crypt(ctx,from,to,1)
-
-/*
  * des_key_schedule():   Calculate 16 subkeys pairs (even/odd) for
  *                       16 encryption rounds.
  *                       To calculate subkeys for decryption the caller
@@ -530,7 +522,7 @@ des_key_schedule (const char * _rawkey, 
 }
 
 void
-des_setkey (des_ctx *ctx, const char * key)
+gl_des_setkey (gl_des_ctx *ctx, const char * key)
 {
   int i;
 
@@ -544,7 +536,7 @@ des_setkey (des_ctx *ctx, const char * k
 }
 
 bool
-des_makekey (des_ctx *ctx, const char * key, size_t keylen)
+gl_des_makekey (gl_des_ctx *ctx, const char * key, size_t keylen)
 {
   if (keylen != 8)
     return false;
@@ -555,7 +547,7 @@ des_makekey (des_ctx *ctx, const char * 
 }
 
 void
-des_ecb_crypt (des_ctx *ctx, const char * _from, char * _to, int mode)
+gl_des_ecb_crypt (gl_des_ctx *ctx, const char * _from, char * _to, int mode)
 {
   const unsigned char *from = (const unsigned char *) _from;
   unsigned char *to = (unsigned char *) _to;
@@ -579,7 +571,7 @@ des_ecb_crypt (des_ctx *ctx, const char 
 }
 
 void
-tripledes_set2keys (tripledes_ctx *ctx, const char * key1, const char * key2)
+gl_3des_set2keys (gl_3des_ctx *ctx, const char * key1, const char * key2)
 {
   int i;
 
@@ -603,7 +595,7 @@ tripledes_set2keys (tripledes_ctx *ctx, 
 }
 
 void
-tripledes_set3keys (tripledes_ctx *ctx, const char * key1,
+gl_3des_set3keys (gl_3des_ctx *ctx, const char * key1,
                    const char * key2, const char * key3)
 {
   int i;
@@ -626,9 +618,9 @@ tripledes_set3keys (tripledes_ctx *ctx, 
 }
 
 void
-tripledes_ecb_crypt (tripledes_ctx *ctx,
-                    const char * _from,
-                    char * _to, int mode)
+gl_3des_ecb_crypt (gl_3des_ctx *ctx,
+                  const char * _from,
+                  char * _to, int mode)
 {
   const unsigned char *from = (const unsigned char *) _from;
   unsigned char *to = (unsigned char *) _to;
@@ -668,12 +660,12 @@ tripledes_ecb_crypt (tripledes_ctx *ctx,
 }
 
 bool
-tripledes_makekey (tripledes_ctx *ctx, const char * key, size_t keylen)
+gl_3des_makekey (gl_3des_ctx *ctx, const char * key, size_t keylen)
 {
   if (keylen != 24)
     return false;
 
-  tripledes_set3keys (ctx, key, key + 8, key + 16);
+  gl_3des_set3keys (ctx, key, key + 8, key + 16);
 
   return !(des_is_weak_key (key)
           || des_is_weak_key (key + 8)
Index: lib/des.h
===================================================================
RCS file: /sources/gnulib/gnulib/lib/des.h,v
retrieving revision 1.1
diff -u -p -r1.1 des.h
--- lib/des.h   21 Oct 2005 12:28:18 -0000      1.1
+++ lib/des.h   12 Mar 2007 11:37:57 -0000
@@ -1,5 +1,5 @@
 /* des.h --- DES cipher implementation.
- * Copyright (C) 2005 Free Software Foundation, Inc.
+ * Copyright (C) 2005, 2007 Free Software Foundation, Inc.
  *
  * This file is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published
@@ -34,7 +34,7 @@ typedef struct
 {
   uint32_t encrypt_subkeys[32];
   uint32_t decrypt_subkeys[32];
-} des_ctx;
+} gl_des_ctx;
 
 /*
  * Encryption/Decryption context of Triple-DES
@@ -43,12 +43,12 @@ typedef struct
 {
   uint32_t encrypt_subkeys[96];
   uint32_t decrypt_subkeys[96];
-} tripledes_ctx;
+} gl_3des_ctx;
 
 /* Check whether the 8 byte key is weak.  Does not check the parity
  * bits of the key but simple ignore them. */
 extern bool
-des_is_weak_key (const char * key);
+gl_des_is_weak_key (const char * key);
 
 /*
  * DES
@@ -59,21 +59,21 @@ des_is_weak_key (const char * key);
  * Does not check parity bits, but simply ignore them.  Does not check
  * for weak keys. */
 extern void
-des_setkey (des_ctx *ctx, const char * key);
+gl_des_setkey (gl_des_ctx *ctx, const char * key);
 
 /* Fill a DES context CTX with subkeys calculated from 64bit KEY, with
  * weak key checking.  Does not check parity bits, but simply ignore
  * them. */
 extern bool
-des_makekey (des_ctx *ctx, const char * key, size_t keylen);
+gl_des_makekey (gl_des_ctx *ctx, const char * key, size_t keylen);
 
 /* Electronic Codebook Mode DES encryption/decryption of data
  * according to 'mode'. */
 extern void
-des_ecb_crypt (des_ctx *ctx, const char * from,  char * to, int mode);
+gl_des_ecb_crypt (gl_des_ctx *ctx, const char * from,  char * to, int mode);
 
-#define des_ecb_encrypt(ctx, from, to)       des_ecb_crypt(ctx, from, to, 0)
-#define des_ecb_decrypt(ctx, from, to)       des_ecb_crypt(ctx, from, to, 1)
+#define gl_des_ecb_encrypt(ctx, from, to)  gl_des_ecb_crypt(ctx, from, to, 0)
+#define gl_des_ecb_decrypt(ctx, from, to)  gl_des_ecb_crypt(ctx, from, to, 1)
 
 /* Triple-DES
  * ----------
@@ -83,7 +83,9 @@ des_ecb_crypt (des_ctx *ctx, const char 
  * 64bit keys in KEY1 and KEY2.  Does not check the parity bits of the
  * keys, but simply ignore them.  Does not check for weak keys. */
 extern void
-tripledes_set2keys (tripledes_ctx *ctx, const char * key1, const char * key2);
+gl_3des_set2keys (gl_3des_ctx *ctx,
+                 const char * key1,
+                 const char * key2);
 
 /*
  * Fill a Triple-DES context CTX with subkeys calculated from three
@@ -91,24 +93,29 @@ tripledes_set2keys (tripledes_ctx *ctx, 
  * of the keys, but simply ignore them.  Does not check for weak
  * keys. */
 extern void
-tripledes_set3keys (tripledes_ctx *ctx, const char * key1,
-                   const char * key2, const char * key3);
+gl_3des_set3keys (gl_3des_ctx *ctx,
+                 const char * key1,
+                 const char * key2,
+                 const char * key3);
 
 /* Fill a Triple-DES context CTX with subkeys calculated from three
  * concatenated 64bit keys in KEY, with weak key checking.  Does not
  * check the parity bits of the keys, but simply ignore them. */
 extern bool
-tripledes_makekey (tripledes_ctx *ctx, const char * key, size_t keylen);
+gl_3des_makekey (gl_3des_ctx *ctx,
+                const char * key,
+                size_t keylen);
 
 /* Electronic Codebook Mode Triple-DES encryption/decryption of data
  * according to 'mode'.  Sometimes this mode is named 'EDE' mode
  * (Encryption-Decryption-Encryption). */
 extern void
-tripledes_ecb_crypt (tripledes_ctx *ctx,
-                    const char * from,
-                    char * to, int mode);
+gl_3des_ecb_crypt (gl_3des_ctx *ctx,
+                  const char * from,
+                  char * to,
+                  int mode);
 
-#define tripledes_ecb_encrypt(ctx, from, to) tripledes_ecb_crypt(ctx,from,to,0)
-#define tripledes_ecb_decrypt(ctx, from, to) tripledes_ecb_crypt(ctx,from,to,1)
+#define gl_3des_ecb_encrypt(ctx, from, to) gl_3des_ecb_crypt(ctx,from,to,0)
+#define gl_3des_ecb_decrypt(ctx, from, to) gl_3des_ecb_crypt(ctx,from,to,1)
 
 #endif /* DES_H */
Index: lib/gc-gnulib.c
===================================================================
RCS file: /sources/gnulib/gnulib/lib/gc-gnulib.c,v
retrieving revision 1.22
diff -u -p -r1.22 gc-gnulib.c
--- lib/gc-gnulib.c     14 Jan 2007 11:32:10 -0000      1.22
+++ lib/gc-gnulib.c     12 Mar 2007 11:37:57 -0000
@@ -187,7 +187,7 @@ typedef struct _gc_cipher_ctx {
   arcfour_context arcfourContext;
 #endif
 #ifdef GNULIB_GC_DES
-  des_ctx desContext;
+  gl_des_ctx desContext;
 #endif
 #ifdef GNULIB_GC_RIJNDAEL
   rijndaelKeyInstance aesEncKey;
@@ -305,7 +305,7 @@ gc_cipher_setkey (gc_cipher_handle handl
     case GC_DES:
       if (keylen != 8)
        return GC_INVALID_CIPHER;
-      des_setkey (&ctx->desContext, key);
+      gl_des_setkey (&ctx->desContext, key);
       break;
 #endif
 
@@ -443,7 +443,7 @@ gc_cipher_encrypt_inline (gc_cipher_hand
 #ifdef GNULIB_GC_DES
     case GC_DES:
       for (; len >= 8; len -= 8, data += 8)
-       des_ecb_encrypt (&ctx->desContext, data, data);
+       gl_des_ecb_encrypt (&ctx->desContext, data, data);
       break;
 #endif
 
@@ -515,7 +515,7 @@ gc_cipher_decrypt_inline (gc_cipher_hand
 #ifdef GNULIB_GC_DES
     case GC_DES:
       for (; len >= 8; len -= 8, data += 8)
-       des_ecb_decrypt (&ctx->desContext, data, data);
+       gl_des_ecb_decrypt (&ctx->desContext, data, data);
       break;
 #endif
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]