* gcrypt.h: Add GCRY_CIPGER_DES. Included string.h for size_t.
authorWerner Koch <wk@gnupg.org>
Wed, 14 Aug 2002 19:07:57 +0000 (19:07 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 14 Aug 2002 19:07:57 +0000 (19:07 +0000)
Suggested by Simon Josefsson.

* gcrypt.texi: Typo fixes.

* des.c (do_des_setkey,do_des_encrypt, do_des_decrypt): New.
(_gcry_des_get_info): Support plain old DES.
* cipher.c (setup_cipher_table): Put DES into the table.

NEWS
THANKS
cipher/ChangeLog
cipher/cipher.c
cipher/des.c
doc/ChangeLog
doc/gcrypt.texi
src/ChangeLog
src/gcrypt.h

diff --git a/NEWS b/NEWS
index 4e0a10b..0a3ee64 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+Noteworthy changes in version 1.1.9 
+------------------------------------------------
+
+ * Support for plain old DES.
+
+
 Noteworthy changes in version 1.1.8 (2002-06-25)
 ------------------------------------------------
 
diff --git a/THANKS b/THANKS
index 69aed0d..00fc768 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -93,6 +93,7 @@ Roddy Strachan                   roddy@satlink.com.au
 Roland Rosenfeld          roland@spinnaker.rhein.de
 Ross Golder               rossigee@bigfoot.com
 Serge Munhoven            munhoven@mema.ucl.ac.be
+Simon Josefsson            jas@extundo.com
 SL Baur                   steve@xemacs.org
 Stephan Austermuehle       au@hcsd.de
 Stefan Karrmann           S.Karrmann@gmx.net
index 91ca323..30376ec 100644 (file)
@@ -1,3 +1,9 @@
+2002-08-14  Werner Koch  <wk@gnupg.org>
+
+       * des.c (do_des_setkey,do_des_encrypt, do_des_decrypt): New.
+       (_gcry_des_get_info): Support plain old DES.
+       * cipher.c (setup_cipher_table): Put DES into the table.
+
 2002-07-25  Werner Koch  <wk@gnupg.org>
 
        * rndunix.c (_gcry_rndunix_constructor): Prefixed with _gcry_.
index a5e0506..750fb7e 100644 (file)
@@ -219,6 +219,17 @@ setup_cipher_table(void)
     if( !cipher_table[i].name )
        BUG();
     i++;
+    cipher_table[i].algo = GCRY_CIPHER_DES;
+    cipher_table[i].name = _gcry_des_get_info( cipher_table[i].algo,
+                                        &cipher_table[i].keylen,
+                                        &cipher_table[i].blocksize,
+                                        &cipher_table[i].contextsize,
+                                        &cipher_table[i].setkey,
+                                        &cipher_table[i].encrypt,
+                                        &cipher_table[i].decrypt     );
+    if( !cipher_table[i].name )
+       BUG();
+
     cipher_table[i].algo = CIPHER_ALGO_DUMMY;
     cipher_table[i].name = "DUMMY";
     cipher_table[i].blocksize = 8;
index 1c86107..6a9e620 100644 (file)
@@ -150,10 +150,16 @@ burn_stack (int bytes)
 
 /* Some defines/checks to support standalone modules */
 
-#ifndef CIPHER_ALGO_3DES
-  #define CIPHER_ALGO_3DES 2
-#elif CIPHER_ALGO_3DES != 2
-  #error CIPHER_ALGO_3DES is defined to a wrong value.
+#ifndef GCRY_CIPHER_3DES
+# define CIPHER_ALGO_3DES 2
+#elif GCRY_CIPHER_3DES != 2
+# error CIPHER_ALGO_3DES is defined to a wrong value.
+#endif
+
+#ifndef GCRY_CIPHER_DES
+# define CIPHER_ALGO_DES 302
+#elif GCRY_CIPHER_DES != 302
+# error CIPHER_ALGO_DES is defined to a wrong value.
 #endif
 
 
@@ -988,6 +994,43 @@ do_tripledes_decrypt( struct _tripledes_ctx *ctx, byte *outbuf, byte *inbuf )
 }
 
 
+
+
+static int
+do_des_setkey ( struct _des_ctx *ctx, byte *key, unsigned keylen )
+{
+    if( selftest_failed )
+       return GCRYERR_SELFTEST;
+    if( keylen != 8 )
+       return GCRYERR_INV_KEYLEN;
+
+    des_setkey (ctx, key);
+
+    if( is_weak_key( key ) ) {
+        burn_stack (64);
+       return GCRYERR_WEAK_KEY;
+    }
+    burn_stack (64);
+
+    return 0;
+}
+
+
+static void
+do_des_encrypt( struct _des_ctx *ctx, byte *outbuf, byte *inbuf )
+{
+    des_ecb_encrypt ( ctx, inbuf, outbuf );
+    burn_stack (32);
+}
+
+static void
+do_des_decrypt( struct _des_ctx *ctx, byte *outbuf, byte *inbuf )
+{
+    des_ecb_decrypt ( ctx, inbuf, outbuf );
+    burn_stack (32);
+}
+
+
 /****************
  * Return some information about the algorithm.  We need algo here to
  * distinguish different flavors of the algorithm.
@@ -1015,7 +1058,7 @@ _gcry_des_get_info( int algo, size_t *keylen,
     }
 
 
-    if( algo == CIPHER_ALGO_3DES ) {
+    if( algo == GCRY_CIPHER_3DES ) {
        *keylen = 192;
        *blocksize = 8;
        *contextsize = sizeof(struct _tripledes_ctx);
@@ -1027,6 +1070,18 @@ _gcry_des_get_info( int algo, size_t *keylen,
                                                        = do_tripledes_decrypt;
        return "3DES";
     }
+    else if( algo == GCRY_CIPHER_DES ) {
+       *keylen = 64;
+       *blocksize = 8;
+       *contextsize = sizeof(struct _des_ctx);
+       *(int  (**)(struct _des_ctx*, byte*, unsigned))r_setkey
+                                                       = do_des_setkey;
+       *(void (**)(struct _des_ctx*, byte*, byte*))r_encrypt
+                                                       = do_des_encrypt;
+       *(void (**)(struct _des_ctx*, byte*, byte*))r_decrypt
+                                                       = do_des_decrypt;
+       return "DES";
+    }
     return NULL;
 }
 
index 335b91b..672083e 100644 (file)
@@ -1,3 +1,7 @@
+2002-08-14  Werner Koch  <wk@gnupg.org>
+
+       * gcrypt.texi: Typo fixes.
+
 2002-05-14  Werner Koch  <wk@gnupg.org>
 
        * lgpl.texi: New.
index 974792f..091e21e 100644 (file)
@@ -151,7 +151,7 @@ subject to the terms of the GNU General Public License
 list of these parts.
 
 @item It encapsulates the low level cryptography
-`Libgcrypt' a high level interface to cryptographic buiilding blocks
+`Libgcrypt' a high level interface to cryptographic building blocks
 using an extendable and flexible API.
 
 @end table
@@ -225,7 +225,7 @@ are created.
 @node Building the source
 @section Building the source
 
-If you want to compile a source file including the `gcry.h' header
+If you want to compile a source file including the `gcrypt.h' header
 file, you must make sure that the compiler can find it in the
 directory hierarchy.  This is accomplished by adding the path to the
 directory in which the header file is located to the compilers include
index 1018d2a..269047b 100644 (file)
@@ -1,3 +1,8 @@
+2002-08-14  Werner Koch  <wk@gnupg.org>
+
+       * gcrypt.h: Add GCRY_CIPGER_DES.  Included string.h for size_t.
+       Suggested by Simon Josefsson.
+
 2002-07-25  Werner Koch  <wk@gnupg.org>
 
        * cipher.h: Added prototypes for progress functions.
index 66a4335..9d8b9cc 100644 (file)
@@ -22,6 +22,7 @@
 #define _GCRYPT_H
 
 #include <stdarg.h>
+#include <string.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -479,7 +480,8 @@ enum gcry_cipher_algos
     GCRY_CIPHER_AES256      = 9,
     GCRY_CIPHER_TWOFISH     = 10,
     /* other cipher numbers are above 300 for OpenPGP reasons. */
-    GCRY_CIPHER_ARCFOUR     = 301
+    GCRY_CIPHER_ARCFOUR     = 301,
+    GCRY_CIPHER_DES         = 302
   };
 
 /* The Rijndael algorithm is basically AES, so provide some macros. */