. V0-4-0
authorWerner Koch <wk@gnupg.org>
Fri, 18 Sep 1998 15:24:52 +0000 (15:24 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 18 Sep 1998 15:24:52 +0000 (15:24 +0000)
17 files changed:
AUTHORS
ChangeLog
INSTALL
Makefile.am
README
THANKS
acconfig.h
acinclude.m4
cipher/ChangeLog
cipher/Makefile.am
cipher/cipher.c
cipher/des.c
cipher/des.h [new file with mode: 0644]
configure.in
mpi/ChangeLog
mpi/hppa1.1/udiv-qrnnd.S
scripts/distfiles

diff --git a/AUTHORS b/AUTHORS
index 5666889..3c846a3 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -3,16 +3,18 @@ Authors of GNU Privacy Guard (gnupg).
 Werner Koch.  Designed and implemented gnupg.
 
 
-GPG    Matthew Skala               1998-08-10
+GNUPG  Matthew Skala               1998-08-10
 Disclaims changes (Twofish code).
 mskala@ansuz.sooke.bc.ca
 
-GPG    Natural Resources Canada    1998-08-11
+GNUPG  Natural Resources Canada    1998-08-11
 Disclaims changes by Matthew Skala.
 
-GPG    Niklas Hernaeus             ??????????
+GNUPG  Niklas Hernaeus             ??????????
 (Weak key patches)
 
+GNUPG  Michael Roth                ??????????
+(DES code)
 
 TRANSLATIONS   Marco d'Itri        1997-02-22
 Disclaim
index e8d61c5..330ede5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Sep 17 18:49:40 1998  Werner Koch  (wk@(none))
+
+       * Makefile.am (dist-hook): Now creates RPM file.
+       * scripts/gnupg.spec: New template file for RPMs
+
 Thu Jul 30 19:17:07 1998  Werner Koch  (wk@(none))
 
        * acinclude.h (WK_CHECK_IPC): New
diff --git a/INSTALL b/INSTALL
index 7829ec5..863cc4d 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -77,12 +77,22 @@ You can create them with:
 Installation
 ============
 gpg is not installed as suid:root; if you want to do it, do it manually.
+We will use capabilities in the future.
 
 The ~/.gnupg directory will be created if it does not exist.  Your first
 action should be to create a key pair: "gpg --gen-key".
 
 
 
+Creating a RPM package
+======================
+The file scripts/gnupg-x.x.x.spec is used to build a RPM package:
+    1. As root, copy the spec file into /usr/src/redhat/SPECS
+    2. copy the tar file into /usr/src/redhat/SOURCES
+    3. type: rpm -ba SPECS/gnupg-x.x.x.spec
+
+
+
 Basic Installation
 ==================
 
index 258ec70..0699aac 100644 (file)
@@ -13,5 +13,8 @@ dist-hook:
                || cp -p $(srcdir)/$$dir/$$i $(distdir)/$$dir/$$i; \
            done ; \
        done
+       @set -e; \
+       sed -e 's/@pkg_version@/$(VERSION)/g' $(srcdir)/scripts/gnupg.spec \
+           > $(distdir)/scripts/gnupg-$(VERSION).spec
 
 
diff --git a/README b/README
index 80b228a..31cae55 100644 (file)
--- a/README
+++ b/README
@@ -2,12 +2,7 @@
 
                  GNUPG - The GNU Privacy Guard
                 -------------------------------
-                         Version 0.3
-
-    WARNING: IF YOU ARE ALREADY USING GNUPG YOU SHOULD NOW MAKE A BACKUP
-    OF "gpg" BECAUSE YOU NEED IT TO CONVERT YOUR PASSPHRASE AND OTHER
-    THINGS - SEE "NEWS"!
-
+                         Version 0.4
 
     As you can see from the version number, the program may have some
     bugs and some features may not work at all - please report this to
     please subscribe before posting).
 
 -----BEGIN PGP SIGNATURE-----
-Version: GNUPG v0.3.2b (GNU/Linux)
+Version: GNUPG v0.3.5a (GNU/Linux)
 Comment: Get GNUPG from ftp://ftp.guug.de/pub/gcrypt/
 
-iQB1AwUBNcy3yh0Z9MEMmFelAQEUXwMAg8h8GaecR1jWVwCqaWO4oGCyWgaxvi0yfQR1Y1GC
-j6Hpo5Hwa3d2UAYETL3M42/M32uxe0Wh8PMgLTWTfhV9XjwxCNg3BBDm2Zb5Enpr9UEIFOdN
-OCV3J4gED4jXDOtO
-=oPV/
+iQB1AwUBNgJ6bB0Z9MEMmFelAQEBHgL+JhFVCrTAK2G3NVVVQBHXU5eucNx3tQQE3UucvSBA
+YaKfX8dC5QU7wfgv8nFBXMK2mnAcJhJzBT6mZwxpzTZZTh7IS4qu//R9Vgy3A06ZddxKFf2M
+YFelmgdpqTL6ntJC
+=JZ3m
 -----END PGP SIGNATURE-----
diff --git a/THANKS b/THANKS
index c19d23a..67d97c9 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -27,6 +27,8 @@ Mark Adler            madler@alumni.caltech.edu
 Martin Schulte         schulte@thp.uni-koeln.de
 Matthew Skala          mskala@ansuz.sooke.bc.ca
 Max Valianskiy         maxcom@maxcom.ml.org
+Michael Roth           mroth@nessie.de
+Michael Sobolev        mss@despair.transas.com
 Nicolas Graner         Nicolas.Graner@cri.u-psud.fr
 Niklas Hernaeus        nh@sleipner.df.lth.se
 Nimrod Zimerman        zimerman@forfree.at
@@ -37,6 +39,7 @@ QingLong              qinglong@bolizm.ihep.su
 Ralph Gillen           gillen@theochem.uni-duesseldorf.de
 Serge Munhoven         munhoven@mema.ucl.ac.be
 Steffen Ullrich        ccrlphr@xensei.com
+Steffen Zahn           Steffen.Zahn@oen.siemens.de
 Thomas Roessler        roessler@guug.de
 Tom Spindler           dogcow@home.merit.edu
 Tom Zerucha            tzeruch@ceddec.com
index 89e367b..1956d3c 100644 (file)
@@ -64,6 +64,8 @@
 #undef HAVE_U16_TYPEDEF
 #undef HAVE_U32_TYPEDEF
 
+#undef HAVE_BROKEN_MLOCK
+
 /* One of the following macros is defined to select which of
  * the cipher/rand-xxxx.c should be used */
 #undef USE_RAND_DUMMY
index 6fe4337..b6c1f65 100644 (file)
@@ -155,6 +155,50 @@ define(WK_CHECK_IPC,
 
 
 ######################################################################
+# Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock
+# is not called from uid 0 (not tested whether uid 0 works)
+######################################################################
+dnl WK_CHECK_MLOCK
+dnl
+define(WK_CHECK_MLOCK,
+  [ AC_CHECK_FUNCS(mlock)
+    if test "$ac_cv_func_mlock" = "yes"; then
+       AC_MSG_CHECKING(whether mlock is broken)
+         AC_TRY_RUN([
+               #include <unistd.h>
+               #include <errno.h>
+               #include <sys/mman.h>
+               #include <sys/types.h>
+               #include <fcntl.h>
+
+               int main()
+               {
+                   char *pool;
+                   int err;
+                   long int pgsize = getpagesize();
+
+                   pool = malloc( 4096 + pgsize );
+                   if( !pool )
+                       return 2;
+                   pool += (pgsize - ((long int)pool % pgsize));
+
+                   err = mlock( pool, 4096 );
+                   if( !err || errno == EPERM )
+                       return 0; /* okay */
+
+                   return 1;  /* hmmm */
+               }
+
+           ],
+           AC_MSG_RESULT(no),
+           AC_DEFINE(HAVE_BROKEN_MLOCK)
+           AC_MSG_RESULT(yes),
+           AC_MSG_RESULT(assuming no))
+    fi
+  ])
+
+
+######################################################################
 # progtest.m4 from gettext 0.35
 ######################################################################
 # Search path for a program which passes the given test.
index da0c03e..cbcea5f 100644 (file)
@@ -1,3 +1,7 @@
+Thu Sep 17 19:00:06 1998  Werner Koch  (wk@(none))
+
+       * des.c : New file from Michael Roth <mroth@nessie.de>
+
 Mon Sep 14 11:10:55 1998  Werner Koch  (wk@(none))
 
        * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys.
index 5f0784c..09edd4d 100644 (file)
@@ -17,6 +17,8 @@ libcipher_a_SOURCES = cipher.c        \
                 md.c           \
                 dynload.c      \
                 dynload.h      \
+                des.c          \
+                des.h          \
                 blowfish.c     \
                 blowfish.h     \
                 cast5.c        \
index 2326d1d..95c4b70 100644 (file)
@@ -29,6 +29,7 @@
 #include "util.h"
 #include "errors.h"
 #include "cipher.h"
+#include "des.h"
 #include "blowfish.h"
 #include "cast5.h"
 #include "dynload.h"
@@ -106,6 +107,17 @@ setup_cipher_table()
     if( !cipher_table[i].name )
        BUG();
     i++;
+    cipher_table[i].algo = CIPHER_ALGO_3DES;
+    cipher_table[i].name = 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();
+    i++;
     cipher_table[i].algo = CIPHER_ALGO_BLOWFISH160;
     cipher_table[i].name = blowfish_get_info( cipher_table[i].algo,
                                         &cipher_table[i].keylen,
index 460194b..f10716a 100644 (file)
  */
 
 
+#include <config.h>
+#include <string.h>           /* memcpy, memcmp */
+#include <assert.h>
+#include "types.h"             /* for byte and u32 typedefs */
+#include "util.h"              /* for log_fatal() */
+#include "des.h"
 
 
+/* Some defines/checks to support standalone modules */
 
-#include <string.h>            /* memcpy, memcmp */
+#ifndef CIPHER_ALGO_3DES
+  #define CIPHER_ALGO_3DES 2
+#elif CIPHER_ALGO_3DES != 2
+  #error CIPHER_ALGO_3DES is defined to a wrong value.
+#endif
 
-typedef unsigned long u32;
-typedef unsigned char byte;
+#ifndef G10ERR_WEAK_KEY
+  #define G10ERR_WEAK_KEY 43
+#elif G10ERR_WEAK_KEY != 43
+  #error G10ERR_WEAK_KEY is defined to a wrong value.
+#endif
 
+#ifndef G10ERR_WRONG_KEYLEN
+  #define G10ERR_WRONG_KEYLEN 44
+#elif G10ERR_WRONG_KEYLEN != 44
+  #error G10ERR_WRONG_KEYLEN is defined to a wrong value.
+#endif
+
+
+
+/* Macros used by the info function. */
+#define FNCCAST_SETKEY(f)  ((int(*)(void*, byte*, unsigned))(f))
+#define FNCCAST_CRYPT(f)   ((void(*)(void*, byte*, byte*))(f))
 
 
 /*
@@ -127,6 +152,7 @@ typedef unsigned char byte;
  */
 typedef struct _des_ctx
   {
+    int mode;
     u32 encrypt_subkeys[32];
     u32 decrypt_subkeys[32];
   }
@@ -137,6 +163,7 @@ des_ctx[1];
  */
 typedef struct _tripledes_ctx
   {
+    int mode;
     u32 encrypt_subkeys[96];
     u32 decrypt_subkeys[96];
   }
@@ -499,7 +526,8 @@ des_setkey (struct _des_ctx *ctx, const byte * key)
 
 
 /*
- * Electronic Codebook Mode DES encryption/decryption of data according to 'mode'.
+ * Electronic Codebook Mode DES encryption/decryption of data according
+ * to 'mode'.
  */
 static int
 des_ecb_crypt (struct _des_ctx *ctx, const byte * from, byte * to, int mode)
@@ -638,6 +666,16 @@ tripledes_ecb_crypt (struct _tripledes_ctx *ctx, const byte * from, byte * to, i
 }
 
 
+/*
+ * Check whether the 8 byte key is weak.
+ */
+
+static int
+is_weak_key ( byte *key )
+{
+    return 0; /* FIXME */
+}
+
 
 /*
  * Performs a selftest of this DES/Triple-DES implementation.
@@ -652,8 +690,7 @@ selftest (void)
    * need this.
    */
   if (sizeof (u32) != 4)
-    return "Wrong word size for DES configured.";
-
+       return "Wrong word size for DES configured.";
 
   /*
    * DES Maintenance Test
@@ -714,3 +751,69 @@ selftest (void)
 
   return 0;
 }
+
+
+static int
+do_tripledes_setkey ( struct _tripledes_ctx *ctx, byte *key, unsigned keylen )
+{
+    if( keylen != 24 )
+       return G10ERR_WRONG_KEYLEN;
+
+    if( is_weak_key( key ) || is_weak_key( key+8 ) || is_weak_key( key+16 ) )
+       return G10ERR_WEAK_KEY;
+
+    tripledes_set3keys ( ctx, key, key+8, key+16);
+
+    return 0;
+}
+
+
+static void
+do_tripledes_encrypt( struct _tripledes_ctx *ctx, byte *outbuf, byte *inbuf )
+{
+    tripledes_ecb_encrypt ( ctx, inbuf, outbuf );
+}
+
+static void
+do_tripledes_decrypt( struct _tripledes_ctx *ctx, byte *outbuf, byte *inbuf )
+{
+    tripledes_ecb_decrypt ( ctx, inbuf, outbuf );
+}
+
+
+/****************
+ * Return some information about the algorithm.  We need algo here to
+ * distinguish different flavors of the algorithm.
+ * Returns: A pointer to string describing the algorithm or NULL if
+ *         the ALGO is invalid.
+ */
+const char *
+des_get_info( int algo, size_t *keylen,
+                  size_t *blocksize, size_t *contextsize,
+                  int  (**r_setkey)( void *c, byte *key, unsigned keylen ),
+                  void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
+                  void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
+                )
+{
+    static int did_selftest = 0;
+
+    if( !did_selftest ) {
+       const char *s = selftest();
+       if( s )
+           log_fatal("selftest failed: %s", s );
+       did_selftest = 1;
+    }
+
+
+    if( algo == CIPHER_ALGO_3DES ) {
+       *keylen = 192;
+       *blocksize = 8;
+       *contextsize = sizeof(struct _tripledes_ctx);
+       *r_setkey = FNCCAST_SETKEY(do_tripledes_setkey);
+       *r_encrypt= FNCCAST_CRYPT(do_tripledes_encrypt);
+       *r_decrypt= FNCCAST_CRYPT(do_tripledes_decrypt);
+       return "3DES";
+    }
+    return NULL;
+}
+
diff --git a/cipher/des.h b/cipher/des.h
new file mode 100644 (file)
index 0000000..f3b95ba
--- /dev/null
@@ -0,0 +1,34 @@
+/* des.h
+ *     Copyright (C) 1998 Free Software Foundation, Inc.
+ *
+ * This file is part of GNUPG.
+ *
+ * GNUPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GNUPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+#ifndef G10_DES_H
+#define G10_DES_H
+
+#include "types.h"
+
+
+const char *
+des_get_info( int algo, size_t *keylen,
+                  size_t *blocksize, size_t *contextsize,
+                  int  (**setkey)( void *c, byte *key, unsigned keylen ),
+                  void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
+                  void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
+                );
+
+#endif /*G10_DES_H*/
index 49bcf43..bbb3eb9 100644 (file)
@@ -180,10 +180,12 @@ fi
 
 dnl Checks for library functions.
 AC_FUNC_VPRINTF
-AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mlock mmap)
+AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mmap)
 AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit)
 AC_CHECK_FUNCS(atexit raise getpagesize strftime)
 
+WK_CHECK_MLOCK
+
 WK_CHECK_IPC
 if test "$ac_cv_header_sys_shm_h" = "yes"; then
   AC_DEFINE(USE_SHM_COPROCESSING)
index aa9406f..696fba4 100644 (file)
@@ -1,3 +1,7 @@
+Thu Sep 17 18:08:50 1998  Werner Koch  (wk@(none))
+
+       * hppa1.1/udiv-qrnnd.S: Fix from Steffen Zahn for HPUX 10.20
+
 Thu Aug  6 16:39:28 1998  Werner Koch,mobil,,, (wk@tobold)
 
        * mpi-bit.c (mpi_set_bytes): Removed.
index 2b0e8cf..b48eee4 100644 (file)
@@ -50,8 +50,8 @@ __udiv_qrnnd
 
        stws            %r25,-16(0,%r30)        ; n_hi
        stws            %r24,-12(0,%r30)        ; n_lo
-       ldil            L'L$0000,%r19
-       ldo             R'L$0000(%r19),%r19
+       ldil            L'L$0000,%r19           ; '
+       ldo             R'L$0000(%r19),%r19     ; '
        fldds           -16(0,%r30),%fr5
        stws            %r23,-12(0,%r30)
        comib,<=        0,%r25,L$1
index c6a8d74..d2b9901 100644 (file)
@@ -4,3 +4,4 @@ install-sh
 mkinstalldirs
 mkdiff
 missing
+gnupg.spec