Update head to match stable 1.0
authorDavid Shaw <dshaw@jabberwocky.com>
Sat, 29 Jun 2002 14:15:02 +0000 (14:15 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Sat, 29 Jun 2002 14:15:02 +0000 (14:15 +0000)
144 files changed:
AUTHORS
BUGS
COPYING
ChangeLog
INSTALL
Makefile.am
NEWS
NOTES
OBUGS
PROJECTS
README
THANKS
THOUGHTS
TODO
acconfig.h [deleted file]
acinclude.m4
autogen.sh [new file with mode: 0755]
configure.ac [new file with mode: 0644]
gnupg.txt [new file with mode: 0644]
mpi/ChangeLog [new file with mode: 0644]
mpi/Makefile.am [new file with mode: 0644]
mpi/alpha/README [new file with mode: 0644]
mpi/alpha/distfiles [new file with mode: 0644]
mpi/alpha/mpih-add1.S [new file with mode: 0644]
mpi/alpha/mpih-lshift.S [new file with mode: 0644]
mpi/alpha/mpih-mul1.S [new file with mode: 0644]
mpi/alpha/mpih-mul2.S [new file with mode: 0644]
mpi/alpha/mpih-mul3.S [new file with mode: 0644]
mpi/alpha/mpih-rshift.S [new file with mode: 0644]
mpi/alpha/mpih-sub1.S [new file with mode: 0644]
mpi/alpha/udiv-qrnnd.S [new file with mode: 0644]
mpi/config.links [new file with mode: 0644]
mpi/g10m.c [new file with mode: 0644]
mpi/generic/distfiles [new file with mode: 0644]
mpi/generic/mpi-asm-defs.h [new file with mode: 0644]
mpi/generic/mpih-add1.c [new file with mode: 0644]
mpi/generic/mpih-lshift.c [new file with mode: 0644]
mpi/generic/mpih-mul1.c [new file with mode: 0644]
mpi/generic/mpih-mul2.c [new file with mode: 0644]
mpi/generic/mpih-mul3.c [new file with mode: 0644]
mpi/generic/mpih-rshift.c [new file with mode: 0644]
mpi/generic/mpih-sub1.c [new file with mode: 0644]
mpi/generic/udiv-w-sdiv.c [new file with mode: 0644]
mpi/hppa/README [new file with mode: 0644]
mpi/hppa/distfiles [new file with mode: 0644]
mpi/hppa/mpih-add1.S [new file with mode: 0644]
mpi/hppa/mpih-lshift.S [new file with mode: 0644]
mpi/hppa/mpih-rshift.S [new file with mode: 0644]
mpi/hppa/mpih-sub1.S [new file with mode: 0644]
mpi/hppa/udiv-qrnnd.S [new file with mode: 0644]
mpi/hppa1.1/distfiles [new file with mode: 0644]
mpi/hppa1.1/mpih-mul1.S [new file with mode: 0644]
mpi/hppa1.1/mpih-mul2.S [new file with mode: 0644]
mpi/hppa1.1/mpih-mul3.S [new file with mode: 0644]
mpi/hppa1.1/udiv-qrnnd.S [new file with mode: 0644]
mpi/i386/distfiles [new file with mode: 0644]
mpi/i386/mpih-add1.S [new file with mode: 0644]
mpi/i386/mpih-lshift.S [new file with mode: 0644]
mpi/i386/mpih-mul1.S [new file with mode: 0644]
mpi/i386/mpih-mul2.S [new file with mode: 0644]
mpi/i386/mpih-mul3.S [new file with mode: 0644]
mpi/i386/mpih-rshift.S [new file with mode: 0644]
mpi/i386/mpih-sub1.S [new file with mode: 0644]
mpi/i386/syntax.h [new file with mode: 0644]
mpi/i586/README [new file with mode: 0644]
mpi/i586/distfiles [new file with mode: 0644]
mpi/i586/mpih-add1.S [new file with mode: 0644]
mpi/i586/mpih-lshift.S [new file with mode: 0644]
mpi/i586/mpih-mul1.S [new file with mode: 0644]
mpi/i586/mpih-mul2.S [new file with mode: 0644]
mpi/i586/mpih-mul3.S [new file with mode: 0644]
mpi/i586/mpih-rshift.S [new file with mode: 0644]
mpi/i586/mpih-sub1.S [new file with mode: 0644]
mpi/longlong.h [new file with mode: 0644]
mpi/m68k/distfiles [new file with mode: 0644]
mpi/m68k/mc68020/distfiles [new file with mode: 0644]
mpi/m68k/mc68020/mpih-mul1.S [new file with mode: 0644]
mpi/m68k/mc68020/mpih-mul2.S [new file with mode: 0644]
mpi/m68k/mc68020/mpih-mul3.S [new file with mode: 0644]
mpi/m68k/mpih-add1.S [new file with mode: 0644]
mpi/m68k/mpih-lshift.S [new file with mode: 0644]
mpi/m68k/mpih-rshift.S [new file with mode: 0644]
mpi/m68k/mpih-sub1.S [new file with mode: 0644]
mpi/m68k/syntax.h [new file with mode: 0644]
mpi/mips3/README [new file with mode: 0644]
mpi/mips3/distfiles [new file with mode: 0644]
mpi/mips3/mpi-asm-defs.h [new file with mode: 0644]
mpi/mips3/mpih-add1.S [new file with mode: 0644]
mpi/mips3/mpih-lshift.S [new file with mode: 0644]
mpi/mips3/mpih-mul1.S [new file with mode: 0644]
mpi/mips3/mpih-mul2.S [new file with mode: 0644]
mpi/mips3/mpih-mul3.S [new file with mode: 0644]
mpi/mips3/mpih-rshift.S [new file with mode: 0644]
mpi/mips3/mpih-sub1.S [new file with mode: 0644]
mpi/mpi-add.c [new file with mode: 0644]
mpi/mpi-bit.c [new file with mode: 0644]
mpi/mpi-cmp.c [new file with mode: 0644]
mpi/mpi-div.c [new file with mode: 0644]
mpi/mpi-gcd.c [new file with mode: 0644]
mpi/mpi-inline.c [new file with mode: 0644]
mpi/mpi-inline.h [new file with mode: 0644]
mpi/mpi-internal.h [new file with mode: 0644]
mpi/mpi-inv.c [new file with mode: 0644]
mpi/mpi-mpow.c [new file with mode: 0644]
mpi/mpi-mul.c [new file with mode: 0644]
mpi/mpi-pow.c [new file with mode: 0644]
mpi/mpi-scan.c [new file with mode: 0644]
mpi/mpicoder.c [new file with mode: 0644]
mpi/mpih-cmp.c [new file with mode: 0644]
mpi/mpih-div.c [new file with mode: 0644]
mpi/mpih-mul.c [new file with mode: 0644]
mpi/mpiutil.c [new file with mode: 0644]
mpi/pa7100/distfiles [new file with mode: 0644]
mpi/pa7100/mpih-lshift.S [new file with mode: 0644]
mpi/pa7100/mpih-rshift.S [new file with mode: 0644]
mpi/power/distfiles [new file with mode: 0644]
mpi/power/mpih-add1.S [new file with mode: 0644]
mpi/power/mpih-lshift.S [new file with mode: 0644]
mpi/power/mpih-mul1.S [new file with mode: 0644]
mpi/power/mpih-mul2.S [new file with mode: 0644]
mpi/power/mpih-mul3.S [new file with mode: 0644]
mpi/power/mpih-rshift.S [new file with mode: 0644]
mpi/power/mpih-sub1.S [new file with mode: 0644]
mpi/powerpc32/distfiles [new file with mode: 0644]
mpi/powerpc32/mpih-add1.S [new file with mode: 0644]
mpi/powerpc32/mpih-lshift.S [new file with mode: 0644]
mpi/powerpc32/mpih-mul1.S [new file with mode: 0644]
mpi/powerpc32/mpih-mul2.S [new file with mode: 0644]
mpi/powerpc32/mpih-mul3.S [new file with mode: 0644]
mpi/powerpc32/mpih-rshift.S [new file with mode: 0644]
mpi/powerpc32/mpih-sub1.S [new file with mode: 0644]
mpi/powerpc32/syntax.h [new file with mode: 0644]
mpi/powerpc64/distfiles [new file with mode: 0644]
mpi/sparc32/distfiles [new file with mode: 0644]
mpi/sparc32/mpih-add1.S [new file with mode: 0644]
mpi/sparc32/mpih-lshift.S [new file with mode: 0644]
mpi/sparc32/mpih-rshift.S [new file with mode: 0644]
mpi/sparc32/udiv.S [new file with mode: 0644]
mpi/sparc32v8/distfiles [new file with mode: 0644]
mpi/sparc32v8/mpih-mul1.S [new file with mode: 0644]
mpi/sparc32v8/mpih-mul2.S [new file with mode: 0644]
mpi/sparc32v8/mpih-mul3.S [new file with mode: 0644]
mpi/supersparc/distfiles [new file with mode: 0644]
mpi/supersparc/udiv.S [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
index b24c483..6ebfa2c 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,93 +1,99 @@
-Authors of GNU Privacy Guard (GnuPG)
-====================================
+Program: GnuPG
+Maintainer:  Werner Koch <wk@gnupg.org>
 
-GNUPG  Werner Koch               1998-02-23
-Assigns GNU Privacy Guard and future changes.
-werner.koch@guug.de
-Designed and implemented GnuPG.
+Authors
+=======
 
+Birger Langkjer <birger.langkjer@image.dk> Translations [da]
 
-GNUPG  Matthew Skala              1998-08-10
-Disclaims changes.
-mskala@ansuz.sooke.bc.ca
-Wrote cipher/twofish.c.
+Daniel Resare  <daniel@resare.com> Translations [sv]
 
-GNUPG  Natural Resources Canada    1998-08-11
-Disclaims changes by Matthew Skala.
+David Shaw <dshaw@jabberwocky.com> Assignment
+    (all in keyserver/,
+     a lot of changes in g10/ see the ChangeLog,
+     bug fixes here and there)           
 
+Dokianakis Theofanis <madf@hellug.gr> Translations [el]
 
-GNUPG  Michael Roth    Germany     1998-09-17
-Assigns changes.
-mroth@nessie.de
-Wrote cipher/des.c.
-Changes and bug fixes all over the place.
+Edmund GRIMLEY EVANS <edmundo@rano.org> Translations [eo]
 
+Gaël Quéri  <gael@lautre.net>  Translations [fr]
+    (fixed a lot of typos)
 
-GNUPG  Niklas Hernaeus         1998-09-18
-Disclaims changes.
-nh@df.lth.se
-Weak key patches.
+Gregory Steuck <steuck@iname.com> Translations [ru]
 
+Ivo Timmermans <itimmermans@bigfoot.com> Translations [nl]
 
-GNUPG  Rémi Guyomarch          1999-05-25
-Assigns past and future changes. (g10/compress.c, g10/encr-data.c,
-g10/free-packet.c, g10/mdfilter.c, g10/plaintext.c, util/iobuf.c)
-rguyom@mail.dotcom.fr
+Jacobo Tarri'o Barreiro <jtarrio@iname.com> Translations [gl]
 
+Janusz Aleksander Urbanowicz <alex@bofh.torun.pl> Translations [po]
 
-TRANSLATIONS   Marco d'Itri    1997-02-22
-Disclaimer.  [it]
-md@linux.it
+Magda Procha'zkova'  <magda@math.muni.cz> Translations [cs]
 
+Michael Roth  <mroth@nessie.de>  Assignment
+    (wrote cipher/des.c., changes and bug fixes all over the place)
 
-TRANSLATIONS   Gael Queri      1998-09-08
-Disclaimer.  [fr]
-gqueri@mail.dotcom.fr
-Fixed a lot of typos.
+Marco d'Itri <md@linux.it> Translations [it]
 
+Matthew Skala <mskala@ansuz.sooke.bc.ca>  Disclaimer
+    (wrote cipher/twofish.c)
 
-TRANSLATIONS   Walter Koch     1998-09-08
-Disclaimer.  [de]
-koch@hsp.de
+Niklas Hernaeus <nh@df.lth.se> Disclaimer
+    (weak key patches)
 
+Nilgun Belma Buguner <nilgun@technologist.com> Translations [tr]
 
-TRANSLATIONS   Gregory Steuck  1998-10-20
-Disclaimer.  [ru]
-steuck@iname.com
+Nils Ellmenreich  <nils 'at' infosun.fmi.uni-passau.de> Assignment
+    (configure.in, cipher/rndlinux.c, FAQ)
 
+Paul Eggert <eggert@twinsun.com> 
+    (configuration macros for LFS)
 
-TRANSLATIONS   Urko Lusa
-Disclaimer.  [es_ES]
-ulusa@euskalnet.net
+Pedro Morais <morais@poli.org> Translations [pt_PT]
 
+Rémi Guyomarch <rguyom@mail.dotcom.fr> Assignment
+    (g10/compress.c, g10/encr-data.c,
+     g10/free-packet.c, g10/mdfilter.c, g10/plaintext.c, util/iobuf.c)
 
-TRANSLATIONS   Thiago Jung Bauermann
-Disclaimer.  [pt_BR]
-jungmann@cwb.matrix.com.br
+Stefan Bellon   <sbellon@sbellon.de> Assignment
+   (All patches to support RISC OS)
 
+Timo Schulz     <twoaday@freakmail.de> Assignment
+   (util/w32reg.c, g10/passphrase.c, g10/hkp.c)
 
-TRANSLATIONS   Pedro Morais
-Disclaimer.  [pt_PT]
-morais@poli.org
+Tedi Heriyanto <tedi_h@gmx.net> Translations [id]
 
+Thiago Jung Bauermann <jungmann@cwb.matrix.com.br> Translations [pt_BR]
+Rafael Caetano dos Santos <rcaetano@linux.ime.usp.br> Translations [pt_BR]
 
-TRANSLATIONS   Janusz Aleksander Urbanowicz    1999-01-09
-Disclaimer.  [po]
-alex@bofh.torun.pl
+Toomas Soome <tsoome@ut.ee> Translations [et]
 
+Urko Lusa <ulusa@euskalnet.net> Translations [es_ES]
 
+Walter Koch <koch@u32.de>  Translations [de]
+
+Werner Koch  <wk@gnupg.org>  Assignment
+    (started the whole thing)
+
+Yosiaki IIDA <iida@ring.gr.jp> Translations [ja]
+
+
+
+Other legal information
+=======================
 
-More credits
-============
 This program uses the zlib compression library written by
 Jean-loup Gailly and Mark Adler.
 
 Most of the stuff in mpi has been taken from the GMP library by
 Torbjorn Granlund <tege@noisy.tmg.se>.
 
-The keybox implementation is based on GDBM 1.7.3 by Philip A. Nelson.
+The Rijndael implementation (cipher/rijndael.c) is based on the 
+public domain reference code provided for the AES selection process.
+The Rijndael algorithm is due to Joan Daemen and Vincent Rijmen. 
 
-The file cipher/rndunix.c is based on rndunix.c from cryptlib.
+The files cipher/rndunix.c and cipher/rndw32.c are based on rndunix.c
+and rndwin32.c from cryptlib.
 Copyright Peter Gutmann, Paul Kendall, and Chris Wedgwood 1996-1999.
 
 The files in debian/ are by James Troup who is the Debian maintainer
@@ -96,3 +102,13 @@ for GnuPG.
 The RPM specs file scripts/gnupg.spec has been contributed by
 several people.
 
+ Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
diff --git a/BUGS b/BUGS
index 09429f5..baa6fc1 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -1,63 +1,8 @@
-                  List of some known bugs
-                 -------------------------
+Please see
 
-This following list contains those bugs which we are aware of. Please
-make sure that bugs you report are not listed here.  If you can fix one
-of these bugs/limitations we will certainly be glad to receive a patch.
-(Please note that we need a disclaimer if a patch is longer than about
-10 lines; but it may help anyway to show us where we have to fix it. Do
-an "info standards" to find out why a disclaimer is needed for GNU.)
+    http://www.gnupg.org/buglist.html
 
-Format: severity: [  *] to [***], no, first reported, by, version.
-Bugs which are marked with "FIX: yyyy-mm-dd" are fixed in the CVS
-and after about half a day in the rsync snapshots.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+for a list of know bugs in GnuPG.  We don't distribute this list anymore
+with the package because a more current one with notes in which version
+the bug is fixed can be found online.
 
-[  *] #3
-    --list-packets should continue even w/o a passphrase (or in batch
-    mode).  Maybe we have to move it to a separate program??
-
-[  *] #4  1999-01-13 <ralf.stephan@fitug.de> 0.9.1
-    v3 key 'expiration date' problem:
-       1. generate a key, set expiration date
-       2. <do other things, deleting etc.>
-       3. edit a v3 secret key, try to set expiration date
-       - output: "You can't change...
-       4. save
-       5. key has expiration date from 1. and gpg reports that pubkey
-         and seckey differ.
-    The for loop the exp.date is set before v3 detection?
-    [is this bug still alive? - can someone please check it]
-
-[ **] #6 1999-02-22 <backes@rhrk.uni-kl.de> 0.9.3
-    Bus error on IRIX 6.4: Crash while doing a keygen. I think while creating
-    the prime. Other bus errors are reported when doing a "gpg README"
-    on sparc-solaris2.6.
-    --> Solaris fixed.
-    --> IRIX bug still there but someone should test this again!
-       (<mack@sgi.com> reports that it is still alive in 1.0.0)
-       (seems to be fixed now. wk 2000-01-14)
-
-[  *] #18 1999-05-27 <Steffen.Zahn@icn.siemens.de> 0.9.7
-    rndunix hangs on hp/ux.  The problem is related to my_plcose which is
-    not always called. (I suggest to use EGD instead of rndunix.)
-
-
-[  *] #24 1999-09-05 <marcus@yoyo.cc.monash.edu.au> 0.9.11
-    Does not link libc and libz expect when removing all "-lc -lz" except
-    for the last one.  This happens on some systems when not using the
-    GNU ld.  This need to be fixed in libtool.
-
-[  *] #28 1999-11-29
-    --list-key will only emit an error about unknown UIDs when all UIDs
-    are unknown.
-    [Postponed for 1.2]
-
-[  *] #30 1999-12-16 <pfeifer@dbai.tuwien.ac.at>
-    Using -r with a name does not check for multiple recpients and may
-    lead to unwanted recipients.
-
-[  *] #31 199-12-24 Jeff Allen <jra@corp.webtv.net>
-    VPATH build in a subdirectory of the sources does not work for po files.
-
-Next #31
diff --git a/COPYING b/COPYING
index 2b7b643..d60c31a 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -11,7 +11,7 @@
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
 License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
+software--to make sure the software is free for all its users.  This
 General Public License applies to most of the Free Software
 Foundation's software and to any other program whose authors commit to
 using it.  (Some other Free Software Foundation software is covered by
@@ -19,7 +19,7 @@ the GNU Library General Public License instead.)  You can apply it to
 your programs, too.
 
   When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
+price.  Our General Public Licenses are designed to make sure that you
 have the freedom to distribute copies of free software (and charge for
 this service if you wish), that you receive source code or can get it
 if you want it, that you can change the software or use pieces of it
@@ -201,7 +201,7 @@ otherwise) that contradict the conditions of this License, they do not
 excuse you from the conditions of this License.  If you cannot
 distribute so as to satisfy simultaneously your obligations under this
 License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
+may not distribute the Program at all.  For example, if a patent
 license would not permit royalty-free redistribution of the Program by
 all those who receive copies directly or indirectly through you, then
 the only way you could satisfy both it and this License would be to
@@ -239,7 +239,7 @@ of the General Public License from time to time.  Such new versions will
 be similar in spirit to the present version, but may differ in detail to
 address new problems or concerns.
 
-Each version is given a distinguishing version number. If the Program
+Each version is given a distinguishing version number.  If the Program
 specifies a version number of this License which applies to it and "any
 later version", you have the option of following the terms and conditions
 either of that version or of any later version published by the Free
@@ -249,7 +249,7 @@ Foundation.
 
   10. If you wish to incorporate parts of the Program into other free
 programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
+to ask for permission.  For software which is copyrighted by the Free
 Software Foundation, write to the Free Software Foundation; we sometimes
 make exceptions for this.  Our decision will be guided by the two goals
 of preserving the free status of all derivatives of our free software and
@@ -291,7 +291,7 @@ convey the exclusion of warranty; and each file should have at least
 the "copyright" line and a pointer to where the full notice is found.
 
     <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) 19yy <name of author>
+    Copyright (C) <year>  <name of author>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -313,7 +313,7 @@ Also add information on how to contact you by electronic and paper mail.
 If the program is interactive, make it output a short notice like this
 when it starts in an interactive mode:
 
-    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision version 69, Copyright (C) year  name of author
     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.
index 5172dfd..6eec96b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-2000-12-19  Werner Koch  <wk@gnupg.org>
+2002-06-20  David Shaw  <dshaw@jabberwocky.com>
 
-       Removed the stuff which is now in libgcrypt.  These are
-       mainly the directories mpi/, cipher/ and gcrypt/.
+       * NEWS: changes since 1.0.7.
 
-2000-11-14  Werner Koch  <wk@gnupg.org>
+       * configure.ac: Set new version number (1.1.90), and fix Solaris
+       compiler flags for shared objects.
 
-       Version 1.1.2 released.
+2002-06-11  David Shaw  <dshaw@jabberwocky.com>
 
-2000-11-13  Werner Koch  <wk@gnupg.org>
+       * configure.ac: Move -lsocket and -lnsl checks before LDAP link
+       tests so they work properly on Solaris.  Noted by David Champion.
+       Also, check for the Mozilla LDAP library if the OpenLDAP library
+       check fails.  Put -lsocket and -lnsl in NETLIBS rather than LIBS
+       so not all programs are forced to link to them.
+       
+2002-06-05  David Shaw  <dshaw@jabberwocky.com>
 
-       * acinclude.m4 (GNUPG_FIX_HDR_VERSION): VPATH build fix.
+       * configure.ac: Add a switch for the experimental external HKP
+       keyserver interface.
 
-2000-10-10  Werner Koch  <wk@gnupg.org>
+2002-05-22  Werner Koch  <wk@gnupg.org>
 
-       * Makefile.am (dist-hook): Create the version file.
-       * configure.in: Set the libtool version here, removed the need
-       for the version file.
+       * configure.ac: Check for strcasecmp and strncasecmp.  Removed
+       stricmp and memicmp checks.
 
-Mon Sep 18 16:35:45 CEST 2000  Werner Koch  <wk@openit.de>
+2002-05-08  David Shaw  <dshaw@jabberwocky.com>
 
-        * acinclude.m4 (GNUPG_CHECK_MLOCK):  Removed that silly mkdir().
+       * configure.ac: If LDAP comes up unusable, try #including <lber.h>
+       before giving up.  Old versions of OpenLDAP require that.
 
-        * configure.in:  Changes to allow for Solaris random device.
-        By Nils Ellmenreich.
-        (--with-egd-socket): New.
+2002-05-03  David Shaw  <dshaw@jabberwocky.com>
 
-        * configure.in (GNUPG_HOMEDIR): New.
+       * configure.ac: In g10defs.h, use \ for the directory separator
+       when HAVE_DOSISH_SYSTEM is on.
 
-        * configure.in: Check for fstat64 and fopen64
+       * configure.ac: Add --disable-exec flag to disable all remote
+       program execution.  --disable-exec implies --disable-ldap and
+       --disable-mailto.  Also look in /usr/lib for sendmail.  If
+       sendmail is not found, do not default - just fail.
+
+2002-04-30  David Shaw  <dshaw@jabberwocky.com>
+
+       * configure.ac: Try and link to a sample LDAP program to check if
+       the LDAP we're about to use is really sane.  The most common
+       problem (using a very old OpenLDAP), could be fixed with an extra
+       #include, but this would not be very portable to other LDAP
+       libraries.
+
+2002-04-29  Werner Koch  <wk@gnupg.org>
+
+       Released 1.0.7.
+
+       * README: Fixed some minor things.
+
+2002-04-25  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac: Check for locale.h and setlocale
+
+2002-04-24  David Shaw  <dshaw@jabberwocky.com>
+
+       * Update NEWS with recent changes.
+
+2002-04-19  Werner Koch  <wk@gnupg.org>
+
+       Released 1.0.6e snapshot.
+
+2002-04-12  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac: Add a warning note to the definition of the
+       EXTSEP macros.
+
+2002-04-09  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac (ALL_LINGUAS): Added Czech, Galician and Greek
+       translations.  s/es_ES/es/.
+
+2002-03-06  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac (ALL_LINGUAS): s/pt_PT/pt/
+
+2002-03-04  David Shaw  <dshaw@jabberwocky.com>
+
+       * Add a AC_DEFINE(_GNU_SOURCE).  Since this is always defined in
+       config.h, the various autoconf tests should be tested with it
+       enabled.  This also works around a compiler warning caused by a
+       minor header bug in glibc 2.1 that causes fseeko to be defined
+       when building gpg, but not when tested for in configure.
+
+2002-03-03  Werner Koch  <wk@gnupg.org>
+
+       Release 1.0.6d snapshot.
+
+2002-01-04  David Shaw  <dshaw@jabberwocky.com>
+
+       * NEWS: about symmetric messages and fixed file sizes.
+
+2001-12-22  Werner Koch  <wk@gnupg.org>
+
+        Released 1.0.6c snapshot.
+       
+       * configure.ac (AH_BOTTOM): Moved EXEC_TEMPFILE_ONLY to here.
+
+       * acconfig.h:  Removed, it should no longer be used.
+
+2001-12-21  David Shaw  <dshaw@jabberwocky.com>
+
+       * Add an acconfig.h to define EXEC_TEMPFILE_ONLY on platforms that
+       can't do fork/exec.
+
+2001-12-21  Werner Koch  <wk@gnupg.org>
+
+       * Makefile.am (dist-hook): We should also look in include for
+       distfiles.
+       (EXTRA_DIST): Remove VERSION because it is generated by dist-hook.
+
+2001-12-20  David Shaw  <dshaw@jabberwocky.com>
+
+       * configure.ac: replacement function for mkdtemp()
+
+2001-12-19  David Shaw  <dshaw@jabberwocky.com>
+
+       * configure.ac: Check for stat()
+
+2001-12-19  Werner Koch  <wk@gnupg.org>
+
+       * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Support Cygwin target
+       * configure.ac [CYGWIN32]: Don't build tiger.  By Disastry.
+
+2001-12-18  Werner Koch  <wk@gnupg.org>
+
+       * Makefile.am (SUBDIRS): Add keyserver.
+       (dist-hook): Only look in mpi and scripts for distfiles; this way
+       we don't include those of a stale "make dist" directory.
+
+2001-10-23  Werner Koch  <wk@gnupg.org>
+
+       Released 1.0.6b snapshot.
+
+2001-10-22  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac: Fixed for automake 1.5 
+
+2001-10-17  Werner Koch  <wk@gnupg.org>
+
+       * README: Removed note on local_ID.
+
+2001-09-28  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac: From now on add a string "-cvs" to the version to
+       indicate that this is a pre-release of the given version number.
+
+2001-09-26  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac [MINGW32]: Switched from wsock.dll to ws2_32.dll.
+
+2001-09-09  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac: autoconf changed the name of the maintainer mode
+       flag, so that not all warnings where enabled. Fixed that.
+       Reported by Dirk Meyer.
+
+2001-09-07  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac: Test for strsep().
+
+2001-09-03  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac: Removed GDBM tests.
+
+2001-08-23  Werner Koch  <wk@gnupg.org>
+
+       * configure.in (AC_FUNC_FSEEKO): Add.
+       (AC_CHECK_FUNCS): Remove fseeko. By Paul Eggert <eggert@twinsun.com>.
+
+2001-08-22  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac (gethrtime): Enhanced the test by running a test
+       program. 
+       * INSTALL: Removed the note about Solaris problems because the
+       above test should catch this.
+
+2001-08-20  Werner Koch  <wk@gnupg.org>
+
+       * acinclude.m4: Add check for plock if mlock is broken.
+       * configure.ac: Use regular tests for -lsocket and -lnsl,
+       more thorough test for gethrtime, allow specifying the path to
+       the zlib library if it is not in the default compiler/linker
+       search path, use ${datadir}.  All these test enhancements are by
+       Albert Chin.
+
+       * configure.ac: Set some compiler flags for dec-osf and hpux. By
+       Tim Mooney.
+
+       * configure.ac: Create g10defs.h with EXTSEP_S et al. 
+
+2001-08-03  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac (VERSION,PACKAGE): Fixed quoting. 
+
+2001-07-26  Werner Koch  <wk@gnupg.org>
+
+       * configure.ac: Finally got it running with the new autoconf. Had
+       to define PACKAGE and VERSION and to add -I.. to each Makefile.am.
+
+2001-07-09  Werner Koch  <wk@gnupg.org>
+
+        Migrated to autoconf 2.50.
+       * acinclude.m4: Removed the temporary LFS macros and GNUPG_LINK_FILES.
+       * acconfig.h: Removed
+       * configure.in: Replaced by...
+       * configure.ac: and modified for use with autoconf 2.50, use a
+       literal string for the version number.  Replaced GNUPG_LINK_FILES
+        with AC_CONFIG_LINKS and moved some informational messages to the end.
+       * VERSION: Removed.
+       * Makefile.am (DISTCLEANFILES): gettext is better now; no more
+       need to remove the libintl.h symlink.
+        (dist-hook): Create VERSION file.
+       
+2001-06-08  Werner Koch  <wk@gnupg.org>
+
+       * configure.in (DYNLINK_MOD_CFLAGS): Use -shared with dec-osf.
+       Reported by Chris Adams.  Merged some cases.
+
+2001-05-29  Werner Koch  <wk@gnupg.org>
+
+       Released version 1.0.6.
+
+2001-05-28  Werner Koch  <wk@gnupg.org>
+
+       * configure.in (BUILD_INCLUDED_LIBINTL): Set to no for W32.
+
+2001-04-29  Werner Koch  <wk@gnupg.org>
+
+       Released version 1.0.5.
+
+2001-04-28  Werner Koch  <wk@gnupg.org>
+
+       Updated all copyright notices.
+
+2001-04-27  Werner Koch  <wk@gnupg.org>
+
+       * README: Removed a few outdated paragraphs.
+
+2001-04-17  Werner Koch  <wk@gnupg.org>
+
+       * acinclude.m4 (GNUPG_CHECK_DOCBOOK_TO_TEXI): New.
+       (GNUPG_CHECK_TYPEDEF): Define _GNU_SOURCE because we will use it
+       anyway.
+
+       * configure.in: Use it here.
+       
+       * configure.in (ALL_LINGUAS): Add Estonian translation by Toomas Soome.
+       (use_m_debug): Removed --enable-m-debug because it does not work
+       anymore.
+
+2001-04-06  Werner Koch  <wk@gnupg.org>
+
+       * configure.in (ALL_LINGUAS): Add Turkish translation.  Thanks
+       to Nilgun Belma Buguner.
+
+2001-03-18  Werner Koch  <wk@gnupg.org>
+
+       * configure.in: Hardwire the use of -lsocket for some
+       systems. Thanks to Reinhard Wobst.
+
+2001-03-13  Werner Koch  <wk@gnupg.org>
+
+       * configure.in: Add copyright notice and -lwsock32.
+
+2001-03-12  Werner Koch  <wk@gnupg.org>
+
+       * INSTALL: Add a note to VPATH builds. 
+
+2001-03-08  Werner Koch  <wk@gnupg.org>
+
+       * debian/: Applied update from James.
+
+       Added copyright and license notices to some more files.
+
+2001-01-18  Werner Koch  <wk@gnupg.org>
+
+       * configure.in: Removed tool definitions for MingW32
+
+2000-11-17  Werner Koch  <wk@gnupg.org>
+
+       * acinclude.m4 (GNUPG_CHECK_FAQPROG): Do not prinnt the warning.
+
+2000-11-11  Paul Eggert  <eggert@twinsun.com>
+
+        Actually Paul's patches are dated 2000-20-17; I applied them today
+       and merged some ChangeLog entries (wk@gnupg.org).
+       
+        * configure.in (AC_SYS_LARGEFILE): Add.
+        (try_large_file): Remove.  All uses removed.
+        (AC_CHECK_FUNCS): Remove fopen64 and fstat64.
+
+        * acinclude.m4 (AC_SYS_LARGEFILE_TEST_INCLUDES,
+        AC_SYS_LARGEFILE_MACRO_VALUE, AC_SYS_LARGEFILE): New macros,
+        taken from GNU tar.
+
+        * configure.in (AC_CHECK_FUNCS): Add fseeko.
+
+2000-10-17  Werner Koch  <wk@gnupg.org>
+
+       * configure.in: Disabled fopen64 checks for Solaris and HPUX.
+
+2000-10-13  Werner Koch  <wk@gnupg.org>
+
+       * configure.in: Append mpi/mpi-asm-defs.h to g10defs.h
+
+2000-10-09  Werner Koch  <wk@gnupg.org>
+
+       * acinclude.m4: Changed wording of the faqprog.pl warning.
+
+Wed Oct  4 15:50:18 CEST 2000  Werner Koch  <wk@openit.de>
+
+        * configure.in: Set DYNLINK_MOD_CFLAGS for Irix. It seems that Irix
+        needs the -shared flag.  In 1.1 we are going to use libtool, so this
+        module stuff will get redesigned anyway. Suggested by Jeff Long.
+
+Thu Sep 14 14:20:38 CEST 2000  Werner Koch  <wk@openit.de>
 
         * acinclude.m4 (GNUPG_CHECK_FAQPROG): New.
         * configure.in: Test for this.
 
         * configure.in (DYNLINK_MOD_CFLAGS): Fix by David Champion.
 
-Tue Aug 22 14:31:15 CEST 2000  Werner Koch  <wk@openit.de>
+Wed Sep  6 17:55:47 CEST 2000  Werner Koch  <wk@openit.de>
 
-        Version 1.1.1
+        * configure.in: Check for fstat64 and fopen64
 
-Fri Aug 18 14:27:14 CEST 2000  Werner Koch  <wk@openit.de>
+Wed Sep  6 14:59:09 CEST 2000  Werner Koch  <wk@openit.de>
 
-  * agent/: New.
-  * Makefile.am, configure.in: Support for the new directory.
+        * configure.in (GNUPG_HOMEDIR): New.
 
-Mon Jul 17 16:35:47 CEST 2000  Werner Koch  <wk@>
+Fri Aug 25 16:05:38 CEST 2000  Werner Koch  <wk@openit.de>
 
-  * configure.in (mingw32): Changes to allow for mingw32msvc
+        * configure.in:  Changes to allow for Solaris random device.
+        By Nils Ellmenreich.
+        (--with-egd-socket): New.
+
+Wed Aug 23 19:52:51 CEST 2000  Werner Koch  <wk@openit.de>
+
+        * acinclude.m4 (GNUPG_CHECK_MLOCK):  Removed that silly mkdir().
 
-Fri Jul 14 19:38:23 CEST 2000  Werner Koch  <wk@>
+Wed Jul 19 11:26:43 CEST 2000  Werner Koch  <wk@openit.de>
 
-  The big merge between this one and the stable branch 1.0.  Still need
-  to merge TNANKS, AUTHORS and such.  It probaly does not compile yet.
+  * configure.in (mingw32): Changes to allow for mingw32msvc
+
+Fri Jul 14 10:17:30 CEST 2000  Werner Koch  <wk@openit.de>
 
   * acinclude.m4 (GNUPG_CHECK_MLOCK): Fixed syntax error in C code.
 
+Wed Jul 12 13:32:06 CEST 2000  Werner Koch  <wk@openit.de>
+
+  Version 1.0.2
+
+Fri Jun  9 10:09:52 CEST 2000  Werner Koch  <wk@openit.de>
+
   * configure.in: Add check for termio.h, wait unctiosn and sigaction.
 
-  * acinclude.m4, configure.in (GNUPG_CHECK_GNUMAKE): New.
+Wed Jun  7 19:19:09 CEST 2000  Werner Koch  <wk@openit.de>
 
   * acinclude.m4 (MKDIR_TAKES_ONE_ARG): Check some headers. By Gaël Quéri.
-
   * configure.in (AM_INIT_AUTOMAKE): Use this now. By Gaël.
 
-  * acinclude.m4 (GNUPG_CHECK_EXPORTDYNAMIC): Replacement for
+Mon Jun  5 12:37:43 CEST 2000  Werner Koch  <wk@openit.de>
+
+  * acnclude.m4 (GNUPG_CHECK_EXPORTDYNAMIC): Replacement for
   GNUPG_CHECK_RDYNAMIC which should handle gcc with non GNU ld nicer.
   Contributed by Dave Dykstra.
   * configure.in (GNYPG_CHECK_RDYNAMIC): Replaced by the new check.
 
-  * configure.in: Add a test for unisgned long long.
+  * configure.in (AC_CHECK_AWK): Moved before the first use of AWK. Suggested
+  by Dave Dykstra.
+
+Tue May 30 16:37:55 CEST 2000  Werner Koch  <wk@openit.de>
+
+  Version 1.0.1-ePit-1
+
+Sun May 28 13:55:17 CEST 2000  Werner Koch  <wk@openit.de>
 
-  * configure.in (DYNLINK_MOD_CFLAGS): Set different for NetBSD.
+       * acinclude.m4 (GNUPG_SYS_NM_PARSE): Added BSDI support.
+       (GNUPG_CHECK_RDYNAMIC): Ditto.
 
-  * configure.in: Add check for clock_gettime
+Wed Apr 19 10:57:26 CEST 2000  Werner Koch  <wk@openit.de>
 
-  * configure.in (ALL_LINGUAS): Add nl.
-  * configure.in (ALL_LINGUAS): Add Esperanto.
-  * configure.in (ALL_LINGUAS): Add sv and ja.
+       * acconfig.h (HAVE_MLOCK): Added
 
-  * configure.in: Use /usr/local for CFLAGS and LDFLAGS when
-  target is freebsd.  By Rémi.
+Wed Mar 22 13:50:24 CET 2000  Werner Koch  <wk@openit.de>
 
-  * configure.in: Do not set development version when the version has
-  a dash in it.  Suggested by Dave Dykstra.
+       * acinclude.m4 (GNUPG_CHECK_MLOCK): Changed the way to test for
+       librt.  Test suggested by Jeff Long.
 
-  * configure.in: Removed substitution for doc/gph/Makefile.
-  Do all the gcc warning only in maintainer mode.
+Fri Mar 17 17:50:25 CET 2000  Werner Koch  <wk@openit.de>
 
-  * configure.in (dlopen): Use CHECK_FUNC for a test of dlopen in libc.
-  Suggested by Alexandre Oliva.
-  (-Wall): Moved the settting of gcc warning options near to the end
-  so that tests don't get confused.  Suggested by Paul D. Smith.
+       * acinclude.m4 (GNUPG_CHECK_MLOCK): Do librt check only when
+       we can't link a test program.  This way GNU systems don't need
+       to link against linrt.
+       (GNUPG_CHECK_IPC): Fixed use of TRY_COMPILE macro.  From Tim Mooney.
 
-  * acinclude.m4 (GNUPG_SYS_NM_PARSE): Added BSDI support.
-  (GNUPG_CHECK_RDYNAMIC): Ditto.
+2000-03-14 12:07:54  Werner Koch  (wk@habibti.openit.de)
 
-  * acinclude.m4 (GNUPG_CHECK_MLOCK): Changed the way to test for
-  librt.  Test suggested by Jeff Long.
+       * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Add support for
+       DJGPP.
+       (GNUPG_CHECK_MLOCK): Check whether mlock sits in librt.
+       * configure.in: Add a test for unisgned long long.
 
-  * acinclude.m4 (GNUPG_CHECK_MLOCK): Do librt check only when
-  we can't link a test program.  This way GNU systems don't need
-  to link against linrt.
-  (GNUPG_CHECK_IPC): Fixed use of TRY_COMPILE macro.  From Tim Mooney.
+Tue Mar  7 18:45:31 CET 2000  Werner Koch  <wk@gnupg.de>
 
-  * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Add support for
-  DJGPP.
-  (GNUPG_CHECK_MLOCK): Check whether mlock sits in librt.
+       * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Add NetBSD. By Thomas Klausner.
+       * configure.in (DYNLINK_MOD_CFLAGS): Set different for NetBSD.
 
-  * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Add NetBSD. By Thomas Klausner.
+Thu Mar  2 15:37:46 CET 2000  Werner Koch  <wk@gnupg.de>
 
-  * acconfig.h (HAVE_MLOCK): Added
+       * configure.in: Add check for clock_gettime
 
-Mon Mar 13 19:22:46 CET 2000  Werner Koch  <wk@openit.de>
+Wed Feb 23 10:07:57 CET 2000  Werner Koch  <wk@gnupg.de>
 
-       * configure.in: Now uses the Docbook M4s from GPH.
+       * configure.in (ALL_LINGUAS): Add nl.
 
-Mon Jan 31 17:46:35 CET 2000  Werner Koch  <wk@>
+Wed Feb 16 16:25:09 CET 2000  Werner Koch  <wk@gnupg.de>
 
-       * Makefile.am: Re-added tools. By Rémi.
+       * configure.in (ALL_LINGUAS): Add Esperanto.
 
-Mon Jan 31 16:37:34 CET 2000  Werner Koch  <wk@gnupg.de>
+Wed Feb 16 14:09:00 CET 2000  Werner Koch  <wk@gnupg.de>
 
-       * configure.in: Create a symlink for types.h in gcrypt/.
+       * configure.in (ALL_LINGUAS): Add sv and ja.
 
-Thu Jan 27 18:00:44 CET 2000  Werner Koch  <wk@gnupg.de>
+       * AUTHORS: Converted to a more compact format.
 
-       * configure.in (g10defs.h): Replaced by gnupg-defs.h
+       * INSTALL: Wrote a note about a Solaris problem.
 
-Mon Jan 24 13:04:28 CET 2000  Werner Koch  <wk@gnupg.de>
+Thu Feb 10 17:39:44 CET 2000  Werner Koch  <wk@gnupg.de>
 
-       * jnlib/ : New.
+       * configure.in: Use /usr/local for CFLAGS and LDFLAGS when
+       target is freebsd.  By Rémi.
 
-       * configure.in: Do set development version when the version has
+Thu Jan 13 19:31:58 CET 2000  Werner Koch  <wk@gnupg.de>
+
+       * configure.in: Do not set development version when the version has
        a dash in it.  Suggested by Dave Dykstra.
 
-Thu Dec  9 17:22:27 CET 1999  Werner Koch  <wk@gnupg.de>
+Thu Dec 16 10:07:58 CET 1999  Werner Koch  <wk@gnupg.de>
+
+       * VERSION: Set to 1.0.1.
+
+       * configure.in: Removed substitution for doc/gph/Makefile.
+       Do all the gcc warning only in maintainer mode.
+
+Thu Dec  9 10:31:05 CET 1999  Werner Koch  <wk@gnupg.de>
+
+       * INSTALL: Add a hint for AIX. By Jos Backus.
 
-       * acinclude.m4 (GNUPG_FIX_HDR_VERSION): New.
-       * configure.in: Check and fix the version number of gcrypt/gcrypt.h
-       so that it is always the save as VERSION.
+Sat Dec  4 12:30:28 CET 1999  Werner Koch  <wk@gnupg.de>
 
-Thu Oct 28 16:17:46 CEST 1999  Werner Koch  <wk@gnupg.de>
+       * configure.in (dlopen): Use CHECK_FUNC for a test of dlopen in libc.
+       Suggested by Alexandre Oliva.
+       (-Wall): Moved the settting of gcc warning options near to the end
+       so that tests don't get confused.  Suggested by Paul D. Smith.
 
-       * Started with development series 1.1 on 1999-10-26
+Mon Nov 22 11:14:53 CET 1999  Werner Koch  <wk@gnupg.de>
 
-Tue Oct 26 14:10:21 CEST 1999  Werner Koch  <wk@gnupg.de>
+       * BUGS: Replaced content with a link to the online list.
 
-       * README-alpha: New
+Fri Nov 12 20:33:19 CET 1999  Werner Koch  <wk@gnupg.de>
+
+       * README: Fixed a type and add a note about the gnupg-i18n ML.
+
+Thu Oct 28 16:08:20 CEST 1999  Werner Koch  <wk@gnupg.de>
+
+       * acinclude.m4, configure.in (GNUPG_CHECK_GNUMAKE): New.
+
+Sat Oct  9 20:34:41 CEST 1999  Werner Koch  <wk@gnupg.de>
+
+       * configure.in: Tweaked handling of random modules and removed
+       dummy support for libgcrypt.
+       * Makefile.am: Removed libgcrypt support.
+       * cgrypt/ : Removed.
+
+       * Makefile.am:  Removed libtool.
+
+Fri Oct  8 20:32:01 CEST 1999  Werner Koch  <wk@gnupg.de>
 
        * configure.in: Fixed quoting in test for development version.
 
@@ -153,17 +488,18 @@ Tue Oct 26 14:10:21 CEST 1999  Werner Koch  <wk@gnupg.de>
        very nice Howto documents - I apoligize for forgetting to mention them
        earlier.
 
-Fri Sep 17 12:56:42 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+Tue Sep 28 20:54:37 CEST 1999  Werner Koch  <wk@gnupg.de>
 
+       * textfilter.c (copy_clearsig_text) [__MINGW32__): Use CR,LF.
+
+Fri Sep 17 12:56:42 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
        * configure.in: Add "-lcap" when capabilities are requested.
        Add the conditional CROSS_COMPILING.
        * Makefile.am: Don't use checks when CROSS_COMPILING.
 
-
 Wed Sep 15 16:22:17 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
-
        * configure.in (ALL_LINGUAS): Add pt_PT.
 
        * configure.in: Some tweaks for cross compiling under MingW32
@@ -171,12 +507,10 @@ Wed Sep 15 16:22:17 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
 Tue Sep  7 17:08:10 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
-
        * VERSION: Set to 1.0.0.
 
 Mon Sep  6 19:59:08 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
-
        * configure.in: Create makefile in doc/gph
 
        * acinclude.m4 (GNUPG_FUNC_MKDIR_TAKES_ONE_ARG): New
@@ -184,7 +518,6 @@ Mon Sep  6 19:59:08 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
 Thu Sep  2 16:40:55 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
 
-
        * VERSION: Set to 0.9.11.
 
 Tue Aug 31 17:20:44 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
@@ -529,3 +862,15 @@ Fri Feb 13 19:43:41 1998  Werner Koch  (wk@isil.d.shuttle.de)
        * configure.in : Fixed zlib stuff
        * Makefile.am: Likewise
 
+
+ Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
diff --git a/INSTALL b/INSTALL
index 55a4c85..69115a7 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,3 +1,14 @@
+Installation instructions for GnuPG
+====================================
+  Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+  This file is free software; as a special exception the author gives
+  unlimited permission to copy and/or distribute it, with or without
+  modifications, as long as this notice is preserved.
+
+  This file is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 Please read the Basic Installation section somewhere below.
 
@@ -18,6 +29,15 @@ Configure options for GNUPG
                      none - Do not linkl any module in but rely on
                             a dynmically loaded modules.
 
+--with-egd-socket=<name>  This is only used when EGD is used as random
+                     gatherer. GnuPG uses by default "~/.gnupg/entropy"
+                     as the socket to connect EGD.  Using this option the
+                     socket name can be changed.  You may use any filename
+                     here with 2 exceptions:  a filename starting with
+                     "~/" uses the socket in the homedirectory of the user
+                     and one starting with a "=" uses a socket in the
+                     GnuPG homedirectory which is bye default "~/.gnupg".
+   
 --with-included-zlib Forces usage of the local zlib sources. Default is
                     to use the (shared) library of the system.
 
@@ -26,7 +46,10 @@ Configure options for GNUPG
 
 --disable-nls      Disable NLS support (See the file ABOUT-NLS)
 
---enable-m-guard    Enable the integrated malloc checking code.
+--enable-m-guard    Enable the integrated malloc checking code. Please
+                    note that this feature does not work on all CPUs
+                    (e.g. SunOS 5.7 on UltraSparc-2) and might give
+                    you a Bus error.
 
 --disable-dynload   If you have problems with dynamic loading, this option
                    disables all dynamic loading stuff.
@@ -70,6 +93,28 @@ This doesn't matter and we know about it (actually it is due to the some
 warning options which we have enabled for gcc)
 
 
+Specific problems on some machines
+==================================
+
+  * IBM RS/6000 running AIX:
+
+       Due to a change in gcc (since version 2.8) the MPI stuff may
+       not build. In this case try to run configure using:
+           CFLAGS="-g -O2 -mcpu=powerpc" ./configure
+
+  * Compaq C V6.2 for alpha:
+
+        You may want to use the option "-msg-disable ptrmismatch1"
+        to get rid of the sign/unsigned char mismatch warnings.
+
+  * SVR4.2 (ESIX V4.2 cc)
+
+        Due to problems with the ESIX as, you probably want to do
+            CFLAGS="-O -K pentium" ./configure --disable-asm
+        Reported by Reinhard Wobst.
+
+
+
 The Random Device
 =================
 Random devices are available in Linux, FreeBSD and OpenBSD.
@@ -112,6 +157,10 @@ 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".
 
+Due to limitations in the automake system, the Info format versions of
+the man pages are not installed.  You have to convert the Texinfo
+files by hand (use makeinfo) and copy them to the appropriate place.
+
 
 
 Creating a RPM package
@@ -201,13 +250,14 @@ Or, on systems that have the `env' program, you can do it like this:
 Compiling For Multiple Architectures
 ====================================
 
-   You can compile the package for more than one kind of computer at the same
-time by placing the object files for each architecture in their own
-directory.  To do this, you must use a version of `make', such as GNU `make',
-that supports the `VPATH' variable.  `cd' to the directory where you want the
-object files and executables to go and run the `configure' script.
-`configure' automatically checks for the source code in the directory that
-`configure' is in and in `..'.
+   You can compile the package for more than one kind of computer at
+the same time by placing the object files for each architecture in
+their own directory.  To do this, you must use a version of `make',
+such as GNU `make', that supports the `VPATH' variable.  `cd' to the
+directory where you want the object files and executables to go and
+run the `configure' script; please use a relative filename name to
+invoke `configure'.  `configure' automatically checks for the source
+code in the directory that `configure' is in and in `..'.
 
    If you have to use a `make' that does not supports the `VPATH'
 variable, you have to compile the package for one architecture at a time
index 4ad462f..427d7b6 100644 (file)
@@ -1,3 +1,21 @@
+# Copyright (C) 1998, 1999, 2000, 2001 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
+
 ## Process this file with automake to produce Makefile.in
 
 if CROSS_COMPILING
@@ -6,27 +24,17 @@ else
 checks = checks
 endif
 
-if COMPILE_AGENT
-agent = agent
-else
-agent = 
-endif
-
-SUBDIRS = intl zlib jnlib util g10 po tools \
-          ${agent} doc ${checks}
-EXTRA_DIST = README-alpha PROJECTS BUGS
-# gettext never gets it right, so we take here care of deleting the
-# symlink.  my_clean_gcrypt is just a kludge until we can include
-# libgcrypt.
-DISTCLEANFILES = gnupg-defs.h intl/libintl.h 
-
+SUBDIRS = intl zlib util mpi cipher tools g10 keyserver po doc ${checks}
+EXTRA_DIST = PROJECTS BUGS config.h.in
+DISTCLEANFILES = g10defs.h 
 
 # Add all the files listed in "distfiles" files to the distribution,
-# apply version number s to some files and create a VERSION file which
+# apply version numbers to some files and create a VERSION file which
 # we need for the Prereq: patch file trick.
 dist-hook:
        @set -e; \
-        for file in `cd $(top_srcdir); find . -type f -name distfiles`; do \
+        for file in `cd $(top_srcdir); \
+                    find scripts mpi include -type f -name distfiles`; do \
            dir=`dirname $$file` ; $(mkinstalldirs) $(distdir)/$$dir ; \
            for i in distfiles `cat $(top_srcdir)/$$file` ; do \
                ln $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i 2> /dev/null \
@@ -36,8 +44,11 @@ dist-hook:
        @set -e; \
        sed -e 's/@pkg_version@/$(VERSION)/g' \
            $(top_srcdir)/scripts/gnupg.spec.in \
-           > $(distdir)/scripts/gnupg.spec ; \
+           > $(distdir)/scripts/gnupg.spec
        echo "$(VERSION)" > $(distdir)/VERSION
 
 
 
+
+
+
diff --git a/NEWS b/NEWS
index 63fa098..51c42b6 100644 (file)
--- a/NEWS
+++ b/NEWS
+Noteworthy changes in version 1.1.90
+------------------------------------------------
 
-    GnuPG now needs libgcrypt - you will find it at the same place
-    where you got GnuPG.
+    * New commands: --personal-cipher-preferences,
+      --personal-digest-preferences, and
+      --personal-compress-preferences allow the user to specify which
+      algorithms are to be preferred.  Note that this does not permit
+      using an algorithm that is not present in the recipient's
+      preferences (which would violate the OpenPGP standard).  This
+      just allows sorting the preferences differently.
 
-Noteworthy changes in version 1.1.2
------------------------------------
+    * New "group" command to refer to several keys with one name.
+
+    * A warning is issued if the user forces the use of an algorithm
+      that is not listed in the recipient's preferences.
+
+    * Full revocation key (aka "designated revoker") support.
+
+    * The preferred hash algorithms on a key are consulted when
+      encrypting a signed message to that key.  Note that this is
+      disabled by default by a SHA1 preference in
+      --personal-digest-preferences.
+
+    * --cert-digest-algo allows the user to specify the hash algorithm
+      to use when signing a key rather than the default SHA1 (or MD5
+      for PGP2 keys).  Do not use this feature unless you fully
+      understand the implications of this.
+
+    * --pgp7 mode automatically sets all necessary options to ensure
+      that the resulting message will be usable by a user of PGP 7.x.
+
+    * New --attribute-fd command for frontends and scripts to get the
+      contents of attribute packets (i.e. photos)
+
+    * In expert mode, the user can now re-sign a v3 key with a v4
+      self-signature.  This does not change the v3 key into a v4 key,
+      but it does allow the user to use preferences, primary ID flags,
+      etc.
+
+    * Significantly improved photo ID support on non-unixlike
+      platforms.
+
+    * The version number has jumped ahead to 1.1.90 to skip over the
+      old version 1.1 and to get ready for the upcoming 1.2.
+
+    * ElGamal sign and encrypt is not anymore allowed in the key
+      generation dialog unless in expert mode.  RSA sign and encrypt
+      has been added with the same restrictions.
+
+    * [W32] Keyserver access does work with Windows NT.
+
+
+Noteworthy changes in version 1.0.7 (2002-04-29)
+------------------------------------------------
+
+    * Secret keys are now stored and exported in a new format which
+      uses SHA-1 for integrity checks.  This format renders the
+      Rosa/Klima attack useless.  Other OpenPGP implementations might
+      not yet support this, so the option --simple-sk-checksum creates
+      the old vulnerable format.
+
+    * The default cipher algorithm for encryption is now CAST5,
+      default hash algorithm is SHA-1.  This will give us better
+      interoperability with other OpenPGP implementations.
+
+    * Symmetric encrypted messages now use a fixed file size if
+      possible.  This is a tradeoff: it breaks PGP 5, but fixes PGP 2,
+      6, and 7.  Note this was only an issue with RFC-1991 style
+      symmetric messages.
+
+    * Photographic user ID support.  This uses an external program to
+      view the images.
+
+    * Enhanced keyserver support via keyserver "plugins".  GnuPG comes
+      with plugins for the NAI LDAP keyserver as well as the HKP email
+      keyserver.  It retains internal support for the HKP HTTP
+      keyserver.
+
+    * Nonrevocable signatures are now supported.  If a user signs a
+      key nonrevocably, this signature cannot be taken back so be
+      careful!
+
+    * Multiple signature classes are usable when signing a key to
+      specify how carefully the key information (fingerprint, photo
+      ID, etc) was checked.
+
+    * --pgp2 mode automatically sets all necessary options to ensure
+      that the resulting message will be usable by a user of PGP 2.x.
+
+    * --pgp6 mode automatically sets all necessary options to ensure
+      that the resulting message will be usable by a user of PGP 6.x.
+
+    * Signatures may now be given an expiration date.  When signing a
+      key with an expiration date, the user is prompted whether they
+      want their signature to expire at the same time.
+
+    * Revocation keys (designated revokers) are now supported if
+      present.  There is currently no way to designate new keys as
+      designated revokers.
+
+    * Permissions on the .gnupg directory and its files are checked
+      for safety.
+
+    * --expert mode enables certain silly things such as signing a
+      revoked user id, expired key, or revoked key.
+
+    * Some fixes to build cleanly under Cygwin32.
+
+    * New tool gpgsplit to split OpenPGP data formats into packets.
+
+    * New option --preserve-permissions.
+
+    * Subkeys created in the future are not used for encryption or
+      signing unless the new option --ignore-valid-from is used.
+
+    * Revoked user-IDs are not listed unless signatures are listed too
+      or we are in verbose mode.
+
+    * There is no default comment string with ascii armors anymore
+      except for revocation certificates and --enarmor mode.
+
+    * The command "primary" in the edit menu can be used to change the
+      primary UID, "setpref" and "updpref" can be used to change the
+      preferences.
+
+    * Fixed the preference handling; since 1.0.5 they were erroneously
+      matched against against the latest user ID and not the given one.
+
+    * RSA key generation.
+
+    * Merged Stefan's patches for RISC OS in.  See comments in
+      scripts/build-riscos. 
+
+    * It is now possible to sign and conventional encrypt a message (-cs).
+
+    * The MDC feature flag is supported and can be set by using
+      the "updpref" edit command.
+
+    * The status messages GOODSIG and BADSIG are now returning the primary
+      UID, encoded using %XX escaping (but with spaces left as spaces,
+      so that it should not break too much)
+
+    * Support for GDBM based keyrings has been removed.
+
+    * The entire keyring management has been revamped.
+
+    * The way signature stati are store has changed so that v3
+      signatures can be supported. To increase the speed of many
+      operations for existing keyrings you can use the new
+      --rebuild-keydb-caches command.
+
+    * The entire key validation process (trustdb) has been revamped.
+      See the man page entries for --update-trustdb, --check-trustdb
+      and --no-auto-check-trustdb.
+
+    * --trusted-keys is again obsolete, --edit can be used to set the
+      ownertrust of any key to ultimately trusted.
 
-  -->  THIS IS A DEVELOPMENT VERSION; see README and README-alpha <--
+    * A subkey is never used to sign keys.
 
-    * Add Rijndael (AES) support.
+    * Read only keyrings are now handled as expected.
 
-    * Removed gdbm support.
+
+Noteworthy changes in version 1.0.6 (2001-05-29)
+------------------------------------------------
+
+    * Security fix for a format string bug in the tty code.
+
+    * Fixed format string bugs in all PO files. 
+
+    * Removed Russian translation due to too many bugs.  The FTP
+      server has an unofficial but better translation in the contrib
+      directory.
+
+    * Fixed expire time calculation and keyserver access.
+
+    * The usual set of minor bug fixes and enhancements.
+
+    * non-writable keyrings are now correctly handled.
+
+
+Noteworthy changes in version 1.0.5 (2001-04-29)
+------------------------------------------------
+
+    * WARNING: The semantics of --verify have changed to address a
+      problem with detached signature detection. --verify now ignores
+      signed material given on stdin unless this is requested by using
+      a "-" as the name for the file with the signed material.  Please
+      check all your detached signature handling applications and make
+      sure that they don't pipe the signed material to stdin without
+      using a filename together with "-" on the the command line.
+
+    * WARNING: Corrected hash calculation for input data larger than
+      512M - it was just wrong, so you might notice bad signature in
+      some very big files.  It may be wise to keep an old copy of
+      GnuPG around.
+
+    * Secret keys are no longer imported unless you use the new option
+      --allow-secret-key-import.  This is a kludge and future versions will
+      handle it in another way.
+
+    * New command "showpref" in the --edit-key menu to show an easier
+      to understand preference listing.
+
+    * There is now the notation of a primary user ID.  For example, it
+      is printed with a signature verification as the first user ID;
+      revoked user IDs are not printed there anymore.  In general the
+      primary user ID is the one with the latest self-signature.
+
+    * New --charset=utf-8 to bypass all internal conversions.
+
+    * Large File Support (LFS) is now working.
+
+    * New options: --ignore-crc-error, --no-sig-create-check, 
+      --no-sig-cache, --fixed_list_mode, --no-expensive-trust-checks,
+      --enable-special-filenames and --use-agent.  See man page.
+
+    * New command --pipemode, which can be used to run gpg as a
+      co-process.  Currently only the verification of detached
+      signatures are working.  See doc/DETAILS.
+
+    * Keyserver support for the W32 version.
+
+    * Rewritten key selection code so that GnuPG can better cope with
+      multiple subkeys, expire dates and so.  The drawback is that it
+      is slower.
+
+    * A whole lot of bug fixes.
+
+    * The verification status of self-signatures are now cached. To
+      increase the speed of key list operations for existing keys you
+      can do the following in your GnuPG homedir (~/.gnupg):
+         cp pubring.gpg pubring.gpg.save && gpg --export-all >x && \
+         rm pubring.gpg && gpg --import x
+      Only v4 keys (i.e not the old RSA keys) benefit from this caching.
+
+    * New translations: Estonian, Turkish.
+
+
+Noteworthy changes in version 1.0.4 (2000-10-17)
+------------------------------------------------
+
+    * Fixed a serious bug which could lead to false signature verification
+      results when more than one signature is fed to gpg.  This is the
+      primary reason for releasing this version.
+
+    * New utility gpgv which is a stripped down version of gpg to
+      be used to verify signatures against a list of trusted keys.
+
+    * Rijndael (AES) is now supported and listed with top preference.
+
+    * --with-colons now works with --print-md[s].
+
+Noteworthy changes in version 1.0.3 (2000-09-18)
+------------------------------------------------
 
     * Fixed problems with piping to/from other MS-Windows software
 
@@ -17,6 +260,10 @@ Noteworthy changes in version 1.1.2
 
     * Revoked user IDs are now marked in the output of --list-key
 
+    * New options --show-session-key and --override-session-key
+      to help the British folks to somewhat minimize the danger
+      of this Orwellian RIP bill.
+
     * New options --merge-only and --try-all-secrets.
 
     * New configuration option --with-egd-socket.
@@ -24,7 +271,7 @@ Noteworthy changes in version 1.1.2
     * The --trusted-key option is back after it left us with 0.9.5
      
     * RSA is supported. Key generation does not yet work but will come
-      soon.
+      soon. 
     
     * CAST5 and SHA-1 are now the default algorithms to protect the key
       and for symmetric-only encryption. This should solve a couple
@@ -34,14 +281,10 @@ Noteworthy changes in version 1.1.2
     * Twofish and MDC enhanced encryption is now used.  PGP 7 supports 
       this.  Older versions of GnuPG don't support it, so they should be
       upgraded to at least 1.0.2
-    
-
-Noteworthy changes in version 1.1.1
------------------------------------
+      
 
-    * Add gpg-agent.
-
-    * Removed option --emulate-checksum-bug
+Noteworthy changes in version 1.0.2 (2000-07-12)
+----------------------------------------------
 
     * Fixed expiration handling of encryption keys.
 
@@ -93,7 +336,12 @@ Noteworthy changes in version 1.1.1
       entirely.  This option should not yet be used.
 
     * New option --no-auto-key-retrieve to disable retrieving of
-      a missing public key from a keyerver, when a keyerver has been set.
+      a missing public key from a keyserver, when a keyserver has been set.
+
+    * Danish translation
+
+Noteworthy changes in version 1.0.1 (1999-12-16)
+-----------------------------------
 
     * New command --verify-files.  New option --fast-list-mode.
 
@@ -102,7 +350,7 @@ Noteworthy changes in version 1.1.1
     * Fixed some minor bugs and the problem with conventional encrypted
       packets which did use the gpg v3 partial length headers.
 
-    * Some more translations.
+    * Add Indonesian and Portugese translations.
 
     * Fixed a bug with symmetric-only encryption using the non-default 3DES.
       The option --emulate-3des-s2k-bug may be used to decrypt documents
@@ -120,16 +368,8 @@ Noteworthy changes in version 1.1.1
 
     * New keys are now generated with an additional preference to Blowfish.
 
-    * Removed the GNU Privacy Handbook from the distribution because it
-      is now in the package GPH.
-
-
-Noteworthy changes in version 1.1.0 (1999-10-26)
------------------------------------
-
-    * Did a couple of changes for this new development series.
-      This release basically works on my machine but may have
-      serious problems.
+    * Removed the GNU Privacy Handbook from the distribution as it will go
+      into a separate one.
 
 
 Noteworthy changes in version 1.0.0 (1999-09-07)
@@ -928,3 +1168,13 @@ Noteworthy changes in version 0.2.3
     * The string "(INSECURE!)" is appended to a new user-id if this
       is generated on a system without a good random number generator.
 
+
+Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+This file is free software; as a special exception the author gives
+unlimited permission to copy and/or distribute it, with or without
+modifications, as long as this notice is preserved.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/NOTES b/NOTES
index 901b51e..346dfa9 100644 (file)
--- a/NOTES
+++ b/NOTES
@@ -1,7 +1,6 @@
+Checking ElGamal signatures is really slow and the reason for the long 
+running time on parts o my keyring.  Because somekeys are also checked at startup, this is even worser.  I should invalidate my self signature with algo 16 or 20.
 
-gcry_md_open() may return NULL in case of an unknown algorithm
-
-Return GCRYERR_NOMEM instead of using m_alloc in most library functions
 
 SCO UnixWare/7.1.0  reported by Allan Clark <allanc@sco.com> for 0.9.8
 
@@ -13,16 +12,35 @@ Some other reported cpu-vendor-os strings:
     sparc-sun-solaris5.4
     sparc-sun-sunos4.1.2
     i386-pc-sysv4.2   (USL Unixware v1.1.2)
+    powerpc-ibm-aix4.3.2.0  John Payne <jcapayne@att.com>
+
+gpg 1.0.1 okay with MP-RAS 3.02.01 Edition 5 using gcc 2.95.2 and EGD
+ By <CSpeicher@eisi.com>
+
+gpg 1.0.1 okay with 4.0.1 BSDI BSD/OS 4.0 i386
+
+
+rndw32 tested on:
 
+  Windows 98 4.10.1998 mit einem AMD-K6-2-450
+        Michael Engels <angel@dalrin.de>)
 
+  Windows 95 4.00.950a
 
+  Windows NT 4.00.1381
 
-Simos Hadjiyiannis <hadjiyia@cs.colostate.edu>
 
-runs successfully on HP-UX v11.00 as well. (using gcc)
 
-Johan Wevers <johanw@vulcan.xs4all.nl> is working on a NL translation.
+  
+tried to compile GnuPG on AIX 4.3 on a power CPU based machine. It
+doesn't work out of the box but i found a way to do so:
 
+ PowerPC based machines:
+ CFLAGS="-g -O2 -mcpu=powerpc" ./configure --disable-asm --disable-dynload
++--enable-static-rnd=egd
 
+ Power1 and Power2 machines:
+ CFLAGS="-g -O2 -mcpu=power" ./configure --disable-asm --disable-dynload
++--enable-static-rnd=egd
 
 
diff --git a/OBUGS b/OBUGS
index b3b3a04..226514e 100644 (file)
--- a/OBUGS
+++ b/OBUGS
     Ctrl-D does not work correct for messages entered at the tty.
     FIX: 1999-06-18  (Better EOF detection on terminals)
 
-[  *] #22 1999-07-22
-    Solaris make has problems with the generated POTFILES - seems to be a
-    gettext bug.  Use GNU make as a workaround.
-    FIX: 1999-12-03 (meanwhile fixed in gettext)
-
-[  *] #23 1999-09-03 <todd.brooks@yale.edu> 0.9.11
-    Only the first signature of a cleartext sig seems to be verified.
-    Can't fix it in 1.0 because the code is semi-frozen.
-    HMMM: Can't reprodude the bug here - it just works.
-
-[ **] #25 1999-10-04  <wk@gnupg.org> 1.0
-    Validity check based on user name is only done when listing a key;
-    the key ID based checking (selecting the user ID with the most
-    validity) is used in all other cases.  The Edit menu does not have
-    a way to disable user ID based validity.
-    FIX: 1999-12-03 (1.0.x only)
-
-[  *] #26 1999-11-11
-    gpg still does not take UTF8 strings to select a UID.
-    FIX: 1999-11-12
-
-[ **] #27 1999-11-12 <oren@hishome.net>
-    Unknown packets (type 17 - photo ID?) mess up the checking
-    of self-signature because they are simply ignored.
-    FIX: 1999-11-12 (1.0.x only)
-
-[ **] #29 1999-12-01 <karney@pppl.gov>
-    Using a --gen-key on a new user account (w/o ~./gnupg) doesn't pay
-    attention to the standard options files, which get's installed
-    afterwards.
-    FIX: 1999-12-02
-
index 85b4576..d6725f7 100644 (file)
--- a/PROJECTS
+++ b/PROJECTS
@@ -15,8 +15,9 @@
 
     * add an option to re-create a public key from a secret key; we
       can do this in trustdb.c:verify_own_keys. (special tool?)
-
-    * rewrite --list-packets or put it into another tool.
+      Hmmm, we better drop the duplication of the public part and just keep
+      the secrets in the "secring" - this has the additional that we can
+      put those secrets on a hardware token.
 
     * write a tool to extract selected keys from a file.
 
       We should add an abstraction layer so that adding support for
       different certificate structures will become easier.
 
+    * "Michael T. Babcock" <mbabcock@fibrespeed.net> suggested to write
+      an event log so that other software can display a key history or
+      alike with GnuPG results.  This should be connected to the keyrings.
+
+
+
+ Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/README b/README
index c5c91a4..de3093e 100644 (file)
--- a/README
+++ b/README
+
                    GnuPG - The GNU Privacy Guard
                   -------------------------------
-                           Version 1.1
+                           Version 1.0
+
+    Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+    This file is free software; as a special exception the author gives
+    unlimited permission to copy and/or distribute it, with or without
+    modifications, as long as this notice is preserved.
+
+    This file is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+    Intro
+    -----
+
+    GnuPG is GNU's tool for secure communication and data storage.
+    It can be used to encrypt data and to create digital signatures.
+    It includes an advanced key management facility and is compliant
+    with the proposed OpenPGP Internet standard as described in RFC2440.
+
+    GnuPG works best on GNU/Linux or *BSD systems.  Most other Unices
+    are also supported but are not as well tested as the Free Unices.
+    See http://www.gnupg.org/gnupg.html#supsys for a list of systems
+    which are known to work.
+
+    See the file COPYING for copyright and warranty information.
+
+    Because GnuPG does not use use any patented algorithm it cannot be
+    compatible with PGP2 versions.  PGP 2.x uses IDEA (which is patented
+    worldwide).
+
+    The default algorithms are DSA and ElGamal.  ElGamal for signing
+    is still available, but because of the larger size of such
+    signatures it is deprecated (Please note that the GnuPG
+    implementation of ElGamal signatures is *not* insecure).  Symmetric
+    algorithms are: AES, 3DES, Blowfish, CAST5 and Twofish 
+    Digest algorithms available are MD5, RIPEMD160 and SHA1.
+
+
+    Installation
+    ------------
+
+    Please read the file INSTALL!
+
+    Here is a quick summary:
+
+    1) Check that you have unmodified sources. The below on how to do this.
+       Don't skip it - this is an important step!
+
+    2) Unpack the TAR.  With GNU tar you can do it this way:
+       "tar xzvf gnupg-x.y.z.tar.gz"
+
+    3) "cd gnupg-x.y.z"
+
+    4) "./configure"
+
+    5) "make"
+
+    6) "make install"
+
+    7) You end up with a "gpg" binary in /usr/local/bin.
+       Note: Because some old programs rely on the existence of a
+       binary named "gpgm" (which was build by some Beta versions
+       of GnuPG); you may want to install a symbolic link to it:
+       "cd /usr/local/bin; ln -s gpg gpgm"
+
+    8) To avoid swapping out of sensitive data, you can install "gpg" as
+       suid root.  If you don't do so, you may want to add the option
+       "no-secmem-warning" to ~/.gnupg/options
+
+
+    How to Verify the Source
+    ------------------------
+
+    In order to check that the version of GnuPG which you are going to
+    install is an original and unmodified one, you can do it in one of
+    the following ways:
+
+    a) If you already have a trusted Version of GnuPG installed, you
+       can simply check the supplied signature:
+
+       $ gpg --verify gnupg-x.y.z.tar.gz.asc
+
+       This checks that the detached signature gnupg-x.y.z.tar.gz.asc
+       is indeed a a signature of gnupg-x.y.z.tar.gz.  The key used to
+       create this signature is:
+
+       "pub  1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig) <dd9jn@gnu.org>"
+
+       If you do not have this key, you can get it from the source in
+       the file doc/samplekeys.asc (use "gpg --import  doc/samplekeys.asc"
+       to add it to the keyring) or from any keyserver.  You have to
+       make sure that this is really the key and not a faked one. You
+       can do this by comparing the output of:
+
+               $ gpg --fingerprint 0x57548DCD
+
+       with the elsewhere published fingerprint
+
+       Please note, that you have to use an old version of GnuPG to
+       do all this stuff.  *Never* use the version which you are going
+       to check!
+
+
+    b) If you don't have any of the above programs, you have to verify
+       the MD5 checksum:
+
+       $ md5sum gnupg-x.y.z.tar.gz
+
+       This should yield an output _similar_ to this:
+
+       fd9351b26b3189c1d577f0970f9dcadc  gnupg-x.y.z.tar.gz
+
+       Now check that this checksum is _exactly_ the same as the one
+       published via the announcement list and probably via Usenet.
+
+
+
+    Documentation
+    -------------
+
+    The manual will be distributed separate under the name "gph".
+    An online version of the latest manual draft is available at the
+    GnuPG web pages:
+
+       http://www.gnupg.org/gph/
+
+    A list of frequently asked questions is available in GnuPG's
+    distibution in the file doc/FAQ and online as:
+
+       http://www.gnupg.org/faq.html
+
+    A couple of HOWTO documents are available online; for a listing see:
+
+       http://www.gnupg.org/docs.html#howtos
+
+    A man page with a description of all commands and options gets installed
+    along with the program. 
+
+
+    Introduction
+    ------------
+
+    Here is a brief overview on how to use GnuPG - it is strongly suggested
+    that you read the manual and other information about the use of
+    cryptography.  GnuPG is only a tool, secure usage requires that
+    YOU KNOW WHAT YOU ARE DOING.
+
+    If you already have a DSA key from PGP 5 (they call them DH/ElGamal)
+    you can simply copy the pgp keyrings over the GnuPG keyrings after
+    running gpg once to create the correct directory.
+
+    The normal way to create a key is
+
+       gpg --gen-key
+
+    This asks some questions and then starts key generation. To create
+    good random numbers for the key parameters, GnuPG needs to gather
+    enough noise (entropy) from your system.  If you see no progress
+    during key generation you should start some other activities such
+    as mouse moves or hitting on the CTRL and SHIFT keys.
+
+    Generate a key ONLY on a machine where you have direct physical
+    access - don't do it over the network or on a machine used also
+    by others - especially if you have no access to the root account.
+
+    When you are asked for a passphrase use a good one which you can
+    easy remember.  Don't make the passphrase too long because you have
+    to type it for every decryption or signing; but, - AND THIS IS VERY
+    IMPORTANT - use a good one that is not easily to guess because the
+    security of the whole system relies on your secret key and the
+    passphrase that protects it when someone gains access to your secret
+    keyring.  A good way to select a passphrase is to figure out a short
+    nonsense sentence which makes some sense for you and modify it by
+    inserting extra spaces, non-letters and changing the case of some
+    characters - this is really easy to remember especially if you
+    associate some pictures with it.
+
+    Next, you should create a revocation certificate in case someone
+    gets knowledge of your secret key or you forgot your passphrase
+
+       gpg --gen-revoke your_user_id
+
+    Run this command and store the revocation certificate away.  The output
+    is always ASCII armored, so that you can print it and (hopefully
+    never) re-create it if your electronic media fails.
+
+    Now you can use your key to create digital signatures
+
+       gpg -s file
+
+    This creates a file "file.gpg" which is compressed and has a
+    signature attached.
+
+       gpg -sa file
+
+    Same as above, but creates a file "file.asc" which is ASCII armored
+    and and ready for sending by mail. It is better to use your
+    mailers features to create signatures (The mailer uses GnuPG to do
+    this) because the mailer has the ability to MIME encode such
+    signatures - but this is not a security issue.
+
+       gpg -s -o out file
+
+    Creates a signature of "file", but writes the output to the file
+    "out".
+
+    Everyone who knows your public key (you can and should publish
+    your key by putting it on a key server, a web page or in your .plan
+    file) is now able to check whether you really signed this text
+
+       gpg --verify file
+
+    GnuPG now checks whether the signature is valid and prints an
+    appropriate message.  If the signature is good, you know at least
+    that the person (or machine) has access to the secret key which
+    corresponds to the published public key.
+
+    If you run gpg without an option it will verify the signature and
+    create a new file that is identical to the original.  gpg can also
+    run as a filter, so that you can pipe data to verify trough it
+
+       cat signed-file | gpg | wc -l
+
+    which will check the signature of signed-file and then display the
+    number of lines in the original file.
+
+    To send a message encrypted to someone you can use
+
+       gpg -e -r heine file
+
+    This encrypts "file" with the public key of the user "heine" and
+    writes it to "file.gpg"
+
+       echo "hello" | gpg -ea -r heine | mail heine
+
+    Ditto, but encrypts "hello\n" and mails it as ASCII armored message
+    to the user with the mail address heine.
+
+       gpg -se -r heine file
+
+    This encrypts "file" with the public key of "heine" and writes it
+    to "file.gpg" after signing it with your user id.
+
+       gpg -se -r heine -u Suttner file
+
+    Ditto, but sign the file with your alternative user id "Suttner"
+
+
+    GnuPG has some options to help you publish public keys.  This is
+    called "exporting" a key, thus
+
+       gpg --export >all-my-keys
+
+    exports all the keys in the keyring and writes them (in a binary
+    format) to "all-my-keys".  You may then mail "all-my-keys" as an
+    MIME attachment to someone else or put it on an FTP server. To
+    export only some user IDs, you give them as arguments on the command
+    line.
+
+    To mail a public key or put it on a web page you have to create
+    the key in ASCII armored format
+
+       gpg --export --armor | mail panther@tiger.int
+
+    This will send all your public keys to your friend panther.
+
+    If you have received a key from someone else you can put it
+    into your public keyring.  This is called "importing"
+
+       gpg --import [filenames]
+
+    New keys are appended to your keyring and already existing
+    keys are updated. Note that GnuPG does not import keys that
+    are not self-signed.
+
+    Because anyone can claim that a public key belongs to her
+    we must have some way to check that a public key really belongs
+    to the owner.  This can be achieved by comparing the key during
+    a phone call.  Sure, it is not very easy to compare a binary file
+    by reading the complete hex dump of the file - GnuPG (and nearly
+    every other program used for management of cryptographic keys)
+    provides other solutions.
+
+       gpg --fingerprint <username>
+
+    prints the so called "fingerprint" of the given username which
+    is a sequence of hex bytes (which you may have noticed in mail
+    sigs or on business cards) that uniquely identifies the public
+    key - different keys will always have different fingerprints.
+    It is easy to compare fingerprints by phone and I suggest
+    that you print your fingerprint on the back of your business
+    card.  To see the fingerprints of the secondary keys, you can
+    give the command twice; but this is normally not needed.
+
+    If you don't know the owner of the public key you are in trouble.
+    Suppose however that friend of yours knows someone who knows someone
+    who has met the owner of the public key at some computer conference.
+    Suppose that all the people between you and the public key holder
+    may now act as introducers to you. Introducers signing keys thereby
+    certify that they know the owner of the keys they sign.  If you then
+    trust all the introducers to have correctly signed other keys, you
+    can be be sure that the other key really belongs to the one who
+    claims to own it..
+
+    There are 2 steps to validate a key:
+       1. First check that there is a complete chain
+          of signed keys from the public key you want to use
+          and your key and verify each signature.
+       2. Make sure that you have full trust in the certificates
+          of all the introduces between the public key holder and
+          you.
+    Step 2 is the more complicated part because there is no easy way
+    for a computer to decide who is trustworthy and who is not.  GnuPG
+    leaves this decision to you and will ask you for a trust value
+    (here also referenced as the owner-trust of a key) for every key
+    needed to check the chain of certificates. You may choose from:
+      a) "I don't know" - then it is not possible to use any
+        of the chains of certificates, in which this key is used
+        as an introducer, to validate the target key.  Use this if
+        you don't know the introducer.
+      b) "I do not trust" - Use this if you know that the introducer
+        does not do a good job in certifying other keys.  The effect
+        is the same as with a) but for a) you may later want to
+        change the value because you got new information about this
+        introducer.
+      c) "I trust marginally" - Use this if you assume that the
+        introducer knows what he is doing.  Together with some
+        other marginally trusted keys, GnuPG validates the target
+        key then as good.
+      d) "I fully trust" - Use this if you really know that this
+        introducer does a good job when certifying other keys.
+        If all the introducer are of this trust value, GnuPG
+        normally needs only one chain of signatures to validate
+        a target key okay. (But this may be adjusted with the help
+        of some options).
+    This information is confidential because it gives your personal
+    opinion on the trustworthiness of someone else.  Therefore this data
+    is not stored in the keyring but in the "trustdb"
+    (~/.gnupg/trustdb.gpg).  Do not assign a high trust value just
+    because the introducer is a friend of yours - decide how well she
+    understands the implications of key signatures and you may want to
+    tell her more about public key cryptography so you can later change
+    the trust value you assigned.
+
+    Okay, here is how GnuPG helps you with key management.  Most stuff
+    is done with the --edit-key command
+
+       gpg --edit-key <keyid or username>
+
+    GnuPG displays some information about the key and then prompts
+    for a command (enter "help" to see a list of commands and see
+    the man page for a more detailed explanation).  To sign a key
+    you select the user ID you want to sign by entering the number
+    that is displayed in the leftmost column (or do nothing if the
+    key has only one user ID) and then enter the command "sign" and
+    follow all the prompts.  When you are ready, give the command
+    "save" (or use "quit" to cancel your actions).
+
+    If you want to sign the key with another of your user IDs, you
+    must give an "-u" option on the command line together with the
+    "--edit-key".
+
+    Normally you want to sign only one user ID because GnuPG
+    uses only one and this keeps the public key certificate
+    small.  Because such key signatures are very important you
+    should make sure that the signatories of your key sign a user ID
+    which is very likely to stay for a long time - choose one with an
+    email address you have full control of or do not enter an email
+    address at all.  In future GnuPG will have a way to tell which
+    user ID is the one with an email address you prefer - because
+    you have no signatures on this email address it is easy to change
+    this address.  Remember, your signatories sign your public key (the
+    primary one) together with one of your user IDs - so it is not possible
+    to change the user ID later without voiding all the signatures.
+
+    Tip: If you hear about a key signing party on a computer conference
+    join it because this is a very convenient way to get your key
+    certified (But remember that signatures have nothing to to with the
+    trust you assign to a key).
+
+
+    8 Ways to Specify a User ID
+    --------------------------
+    There are several ways to specify a user ID, here are some examples.
+
+    * Only by the short keyid (prepend a zero if it begins with A..F):
+
+       "234567C4"
+       "0F34E556E"
+       "01347A56A"
+       "0xAB123456
+
+    * By a complete keyid:
+
+       "234AABBCC34567C4"
+       "0F323456784E56EAB"
+       "01AB3FED1347A5612"
+       "0x234AABBCC34567C4"
+
+    * By a fingerprint:
+
+       "1234343434343434C434343434343434"
+       "123434343434343C3434343434343734349A3434"
+       "0E12343434343434343434EAB3484343434343434"
+
+      The first one is MD5 the others are ripemd160 or sha1.
+
+    * By an exact string:
+
+       "=Heinrich Heine <heinrichh@uni-duesseldorf.de>"
+
+    * By an email address:
+
+       "<heinrichh@uni-duesseldorf.de>"
+
+    * By word match
+
+       "+Heinrich Heine duesseldorf"
+
+      All words must match exactly (not case sensitive) and appear in
+      any order in the user ID.  Words are any sequences of letters,
+      digits, the underscore and characters with bit 7 set.
+
+    * Or by the usual substring:
+
+       "Heine"
+       "*Heine"
+
+      The '*' indicates substring search explicitly.
+
+
+    Batch mode
+    ----------
+    If you use the option "--batch", GnuPG runs in non-interactive mode and
+    never prompts for input data.  This does not even allow entering the
+    passphrase.  Until we have a better solution (something like ssh-agent),
+    you can use the option "--passphrase-fd n", which works like PGP's
+    PGPPASSFD.
+
+    Batch mode also causes GnuPG to terminate as soon as a BAD signature is
+    detected.
+
+
+    Exit status
+    -----------
+    GnuPG returns with an exit status of 1 if in batch mode and a bad signature
+    has been detected or 2 or higher for all other errors.  You should parse
+    stderr or, better, the output of the fd specified with --status-fd to get
+    detailed information about the errors.
+
+
+    How to Get More Information
+    ---------------------------
+
+    The primary WWW page is "http://www.gnupg.org"
+    The primary FTP site is "ftp://ftp.gnupg.org/gcrypt/"
+
+    See http://www.gnupg.org/mirrors.html for a list of mirrors
+    and use them if possible.  You may also find GnuPG mirrored on
+    some of the regular GNU mirrors.
+
+    We have some mailing lists dedicated to GnuPG:
+
+       gnupg-announce@gnupg.org    For important announcements like
+                                   new versions and such stuff.
+                                   This is a moderated list and has
+                                   very low traffic.
+
+       gnupg-users@gnupg.org       For general user discussion and
+                                   help.
+
+       gnupg-devel@gnupg.org       GnuPG developers main forum.
+
+    You subscribe to one of the list by sending mail with a subject
+    of "subscribe" to x-request@gnupg.org, where x is the name of the
+    mailing list (gnupg-announce, gnupg-users, etc.).  An archive of
+    the mailing lists is available at http://lists.gnupg.org .
 
-       WARNING:  This is the current development branch
-                 of GnuPG.  THIS SHOULD NOT BE USED IN
-                 A PRODUCTION ENVIRONMENT.  It will
-                 change quite often and may have serious
-                 problems.  Use the GnuPG from the stable
-                 Branch 1.0.x  for real work.  The next
-                 stable release will be 1.2
+    The gnupg.org domain is hosted in Germany to avoid possible legal
+    problems (technical advices may count as a violation of ITAR).
 
-If you are looking for the CVS from the stable tree, use 
+    Please direct bug reports to <gnupg-bugs@gnu.org> or post
+    them direct to the mailing list <gnupg-devel@gnupg.org>.
 
-cvs -z3 -d :pserver:anoncvs@cvs.gnupg.org:/cvs/gnupg co -r STABLE-BRANCH-1-0 gnupg
+    Please direct questions about GnuPG to the users mailing list or
+    one of the pgp newsgroups; please do not direct questions to one
+    of the authors directly as we are busy working on improvements
+    and bug fixes.  Both mailing lists are watched by the authors
+    and we try to answer questions when time allows us to do so.
 
+    Commercial grade support for GnuPG is available; please see
+    the GNU service directory or search other resources.
 
diff --git a/THANKS b/THANKS
index df7ccef..4aa1104 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -3,79 +3,154 @@ reporting problems, suggesting various improvements or submitting actual
 code.  Here is a list of those people. Help me keep it complete and free of
 errors.
 
+Adam Mitchell             adam@cafe21.org
+Albert Chin                china@thewrittenword.com
+Alec Habig                habig@budoe2.bu.edu
 Allan Clark               allanc@sco.com
 Anand Kumria              wildfire@progsoc.uts.edu.au
+Andreas Haumer             andreas@xss.co.at
+Anthony Mulcahy           anthony@kcn.ne.jp
 Ariel T Glenn             ariel@columbia.edu
 Bodo Moeller              Bodo_Moeller@public.uni-hamburg.de
+Brendan O'Dea              bod@debian.org
 Brenno de Winter          brenno@dewinter.com
+Brian M. Carlson           karlsson@hal-pc.org
 Brian Moore               bem@cmc.net
 Brian Warner              warner@lothar.com
 Bryan Fullerton           bryanf@samurai.com
 Caskey L. Dickson         caskey@technocage.com
 Cees van de Griend        cees-list@griend.xs4all.nl
 Charles Levert            charles@comm.polymtl.ca
+Chip Salzenberg           chip@valinux.com
+Chris Adams                cmadams@hiwaay.net
+Christian Kurz            shorty@debian.org
 Christian von Roques      roques@pond.sub.org
 Christopher Oliver        oliver@fritz.traverse.net
 Christian Recktenwald     chris@citecs.de
+Dan Winship                danw@helixcode.com
 Daniel Eisenbud           eisenbud@cs.swarthmore.edu
 Daniel Koening            dan@mail.isis.de
+Daniel Resare             daniel@resare.com
+Dave Dykstra              dwd@bell-labs.com
+David C Niemi              niemi@tuxers.net
+David Champion             dgc@uchicago.edu
 David Ellement            ellement@sdd.hp.com
+David Hallinan            hallinan@rtd.com
+David Hollenberg           dhollen@ISI.EDU
+David Mathog               MATHOG@seqaxp.bio.caltech.edu
+David R. Bergstein         dbergstein@home.com
+David Shaw                 dshaw@jabberwocky.com
 Detlef Lannert            lannert@lannert.rz.uni-duesseldorf.de
+Dimitri                   dmitri@advantrix.com
 Dirk Lattermann           dlatt@t-online.de
+Dirk Meyer                 dirk.meyer@dinoex.sub.org
+Disastry                   Disastry@saiknes.lv
+Douglas Calvert            dfc@anize.org
 Ed Boraas                 ecxjo@esperanto.org
+Edmund GRIMLEY EVANS      edmundo@rano.org
+Edwin Woudt                edwin@woudt.nl
 Enzo Michelangeli         em@MailAndNews.com
 Ernst Molitor             ernst.molitor@uni-bonn.de
-Fabio Coatti              cova@felix.unife.it
+Fabio Coatti              cova@ferrara.linux.it
 Felix von Leitner         leitner@amdiv.de
+fish stiqz                 fish@analog.org
+Florian Weimer             Florian.Weimer@rus.uni-stuttgart.de
+Francesco Potorti          pot@gnu.org
+Frank Donahoe             fdonahoe@wilkes1.wilkes.edu
 Frank Heckenbach          heckenb@mi.uni-erlangen.de
 Frank Stajano             frank.stajano@cl.cam.ac.uk
-Gaël Quéri                gqueri@mail.dotcom.fr
+Frank Tobin               ftobin@uiuc.edu
+Gabriel Rosenkoetter      gr@eclipsed.net
+Gaël Quéri                gael@lautre.net
+Gene Carter                gcarter@lanier.com
+Georg Schwarz              georg.schwarz@iname.com
+Giampaolo Tomassoni        g.tomassoni@libero.it
+Gilbert Fernandes          gilbert_fernandes@hotmail.com
 Greg Louis                glouis@dynamicro.on.ca
 Greg Troxel               gdt@ir.bbn.com
 Gregory Steuck            steuck@iname.com
 Geoff Keating             geoffk@ozemail.com.au
 Harald Denker             harry@hal.westfalen.de
+Holger Baust               Holger.Baust@freenet-ag.de
 Hendrik Buschkamp         buschkamp@rheumanet.org
 Holger Schurig            holger@d.om.org
+Holger Smolinski          smolinsk@de.ibm.com
+Holger Trapp              Holger.Trapp@informatik.tu-chemnitz.de
 Hugh Daniel               hugh@toad.com
+Huy Le                    huyle@ugcs.caltech.edu
 Ian McKellar              imckellar@harvestroad.com.au
+Ivo Timmermans            itimmermans@bigfoot.com
+Jan Krueger               max@physics.otago.ac.nz
+Jan Niehusmann             jan@gondor.com  
 Janusz A. Urbanowicz      alex@bofh.torun.pl
 James Troup               james@nocrew.org
 Jean-loup Gailly          gzip@prep.ai.mit.edu
+Jeff Long                 long@kestrel.cc.ukans.edu
+Jeffery Von Ronne          jronne@ics.uci.edu
 Jens Bachem               bachem@rrz.uni-koeln.de
+Jeroen C. van Gelderen     jeroen@vangelderen.org
 J Horacio MG              homega@ciberia.es
+J. Michael Ashley          jashley@acm.org
+Jim Bauer                  jfbauer@home.com
+Jim Small                  cavenewt@my-deja.com
 Joachim Backes            backes@rhrk.uni-kl.de
+Joe Rhett                  jrhett@isite.net
 John A. Martin            jam@jamux.com
 Johnny Teveßen            j.tevessen@gmx.de
 Jörg Schilling            schilling@fokus.gmd.de
+Jos Backus                Jos.Backus@nl.origin-it.com
 Jun Kuriyama              kuriyama@sky.rim.or.jp
+Kahil D. Jallad            kdj4@cs.columbia.edu
 Karl Fogel                kfogel@guanabana.onshore.com
 Karsten Thygesen          karthy@kom.auc.dk
 Katsuhiro Kondou          kondou@nec.co.jp
 Kazu Yamamoto             kazu@iijlab.net
+Keith Clayton              keith@claytons.org
+Kevin Ryde                 user42@zip.com.au
+Klaus Singvogel            ks@caldera.de
+Kurt Garloff               garloff@suse.de
 Lars Kellogg-Stedman      lars@bu.edu
+L. Sassaman               rabbi@quickie.net
+M Taylor                   mctaylor@privacy.nb.ca                 
+Marcel Waldvogel           mwa@arl.wustl.edu
 Marco d'Itri               md@linux.it
+Marcus Brinkmann           Marcus.Brinkmann@ruhr-uni-bochum.de 
 Mark Adler                madler@alumni.caltech.edu
 Mark Elbrecht             snowball3@bigfoot.com
+Mark Pettit                pettit@yahoo-inc.com
 Markus Friedl             Markus.Friedl@informatik.uni-erlangen.de
 Martin Kahlert            martin.kahlert@provi.de
 Martin Hamilton
 Martin Schulte            schulte@thp.uni-koeln.de
+Matt Kraai                 kraai@alumni.carnegiemellon.edu
 Matthew Skala             mskala@ansuz.sooke.bc.ca
+Matthew Wilcox             matthew@wil.cx
+Matthias Urlichs          smurf@noris.de
 Max Valianskiy            maxcom@maxcom.ml.org
+Michael Engels             michael.engels@uni-duesseldorf.de
 Michael Fischer v. Mollard mfvm@gmx.de
 Michael Roth              mroth@nessie.de
 Michael Sobolev           mss@despair.transas.com
+Michael Tokarev           mjt@tls.msk.ru
 Nicolas Graner            Nicolas.Graner@cri.u-psud.fr
+Mike McEwan               mike@lotusland.demon.co.uk
+Neal H Walfield            neal@cs.uml.edu
 NIIBE Yutaka              gniibe@chroot.org
 Niklas Hernaeus
 Nimrod Zimerman           zimerman@forfree.at
 N J Doye                  nic@niss.ac.uk
 Oliver Haakert            haakert@hsp.de
 Oskari Jääskeläinen       f33003a@cc.hut.fi
+Pascal Scheffers           Pascal@scheffers.net
 Paul D. Smith             psmith@baynetworks.com
+Per Cederqvist             ceder@lysator.liu.se
+Phil Blundell              pb@debian.org
 Philippe Laliberte        arsphl@oeil.qc.ca
+Peter Fales                psfales@lucent.com
 Peter Gutmann             pgut001@cs.auckland.ac.nz
+Peter Marschall           Peter.Marschall@gedos.de
+Peter Valchev              pvalchev@openbsd.org
+Piotr Krukowiecki          piotr@pingu.ii.uj.edu.pl
 QingLong                  qinglong@bolizm.ihep.su
 Ralph Gillen              gillen@theochem.uni-duesseldorf.de
 Rat                       ratinox@peorth.gweep.net
@@ -83,33 +158,69 @@ Reinhard Wobst                R.Wobst@ifw-dresden.de
 Rémi Guyomarch            rguyom@mail.dotcom.fr
 Reuben Sumner             rasumner@wisdom.weizmann.ac.il
 Richard Outerbridge       outer@interlog.com
+Robert Joop                rj@rainbow.in-berlin.de
 Roddy Strachan            roddy@satlink.com.au
+Roger Sondermann           r.so@bigfoot.com
 Roland Rosenfeld          roland@spinnaker.rhein.de
+Roman Pavlik               rp@tns.cz
 Ross Golder               rossigee@bigfoot.com
+Sam Roberts               sam@cogent.ca
+Sami Tolvanen              sami@tolvanen.com
+Sean MacLennan            seanm@netwinder.org
+Sebastian Klemke           packet@convergence.de
 Serge Munhoven            munhoven@mema.ucl.ac.be
 SL Baur                   steve@xemacs.org
+Stefan Bellon              sbellon@sbellon.de
 Stefan Karrmann           S.Karrmann@gmx.net
 Stefan Keller             dres@cs.tu-berlin.de
 Steffen Ullrich           ccrlphr@xensei.com
 Steffen Zahn              zahn@berlin.snafu.de
 Steven Bakker             steven@icoe.att.com
+Steven Murdoch             sjmurdoch@bigfoot.com
 Susanne Schultz           schultz@hsp.de
+Ted Cabeen                secabeen@pobox.com
 Thiago Jung Bauermann     jungmann@cwb.matrix.com.br
 Thomas Roessler           roessler@guug.de
+Tim Mooney                mooney@dogbert.cc.ndsu.nodak.edu
+Timo Schulz                towaday@freakmail.de
 Tom Spindler              dogcow@home.merit.edu
 Tom Zerucha               tzeruch@ceddec.com
 Tomas Fasth               tomas.fasth@twinspot.net
+Tommi Komulainen           Tommi.Komulainen@iki.fi
+Thomas Klausner           wiz@danbala.ifoer.tuwien.ac.at
+Tomasz Kozlowski           tomek@rentec.com
 Thomas Mikkelsen          tbm@image.dk
 Ulf Möller                3umoelle@informatik.uni-hamburg.de
 Urko Lusa                 ulusa@euskalnet.net
+Vincent P. Broman          broman@spawar.navy.mil
+W Lewis                    wiml@hhhh.org
+Walter Hofmann            Walter.Hofmann@physik.stud.uni-erlangen.de
 Walter Koch               koch@hsp.de
-Werner Koch               werner.koch@guug.de
+Wayne Chapeskie           waynec@spinnaker.com
+Werner Koch               wk@gnupg.org
 Wim Vandeputte            bunbun@reptile.rug.ac.be
+Winona Brown               win@huh.org
+Yosiaki IIDA              iida@ring.gr.jp
+Yoshihiro Kajiki          kajiki@ylug.org
+                           disastry@saiknes.lv
                           nbecker@hns.com
 
-Thanks to the German Unix User Group for providing FTP space,
-Martin Hamilton for initially hosting the mailing list, HSP for
-hosting gnupg.org and Linux Laptops Ltd. for a nice toy.
+Thanks to the German Unix User Group for sponsoring this project,
+Martin Hamilton for hosting the first mailing list and OpenIT for
+cheap hosting conditions.
+
+The development of this software has partly been funded by the German
+Ministry for Economics and Technology under grant VIB3-68553.168-001/1999.
 
 Many thanks to my wife Gerlinde for having so much patience with
 me while hacking late in the evening.
+
+ Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
index aa33e0e..25707c4 100644 (file)
--- a/THOUGHTS
+++ b/THOUGHTS
@@ -264,3 +264,12 @@ Suggested things which I will not do:
     --> Use a script and --status-fd
 
 
+ Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/TODO b/TODO
index 30e27e7..eca5200 100644 (file)
--- a/TODO
+++ b/TODO
+  * Reword the "Not enough entropy" messages.
 
-  * Look at FEATURES packet to decide wether to use MDC.  We should
-    rethink the whole preference implementation and drop that ugly hamehash
-    stuff.  Is it possible to that in getkey?  We have to see whether we
-    realy lookit up by user name or whethre there is a double lookup,
-    first by userid and then later by keyid - which is bad.
+  * Do we need a configure test for putenv?
 
-  * options.skel wird mit umask von root installiert.
+  * Check for consistent spelling of user ID, key ID etc.
+    Replace "user id not found" in getkey.c by "no valid user ID found".
+  * Add remarks to the man page about OpenPGP OPTIONAL algorithms and
+    issue warnings when such an algorithm is used (disabled by expert modus?)
 
-  * See how we can handle the symlinks in ./gcrypt
+  * Return status information even when an imported key is already
+    stored.  This is useful for GPGME's detailed info function.
 
-  * Add SIGSEGV handler to overcome zlib problems with truncated data.
+  * Describe some pitfalls when using EGD.  Check that ~/.gnupg/entropy
+    really is the default.  What about needed permission?  
 
-  * Use --output for keylistings too.
+  * Using an expired key for signing should give an error message
+    "expired key" and not "unusable key'.  Furthermore the error should
+    also be thrown when the default key has expired.  Reported by
+    Eric.VanBuggenhaut@AdValvas.be.
 
-  * Never allocate packet memory with a m-alloc, but use a specific function.
+  * pause scrolling help in --edit-key and elsewhere.
 
-  * Should we change names like mpi_write in g10/ so that we don't
-    use the prefix mpi here?
+  * getkey does not return revoked/expired keys - therefore it is not
+    possible to override it.
 
-  * Implement the AXP syscall to enable bus traps for GLIB 2
+  * Selection using +wordlist does not work.
+    What about adding a feature -word to the +wordlist search mode.
 
-  * parse a paramter file to do automatic key generation and to set
-    parameters for the keygen menu.  Far easier than to do a dialog for
-    each required parameter.
+  * Check the changes to the gpg random gatherer on all W32 platforms.
 
-  * With option -i prompt before adding a key to the keyring and show some
-    info what we are about to add.
+  * Put a note into readme.w32 that there is a man page and a options
+    file;  write the registry stuff in regedit format.
 
-  * Speed up calculation of key validation.
+  * Show more info does not work from edit->trust
 
-  * --disable-asm should still assemble _udiv_qrnnd when needed
+  * set default charset from nl_langinfo.
+
+  * Check that no secret temporary results are stored in the result parameter
+    of the mpi functions.  We have already done this for mpi-mul.c 
+
+  * We need another special packet at the end of a clearsign message to mark
+    it's end and allow for multiple signature for one message.  And
+    add a real grammar to the code in mainproc.c
+
+  * Option to warn when a non MDC message is decrypted?
+
+  * If there is no secure memory, allocate more memory for the secure
+    memory block or do it in all cases.
 
-  * Skip RO keyrings when importing a key.
+  * add some minor things vor VMS.
 
-  * Use the newest encryption key if only the main key has been given.
+  * Use DSA keys with the test suite (partly done)
 
-  * replace the keyserver stuff either by a call to a specialized
-    utility and SOCKSify this utility.
+  * Fix the bug in the mips assembler code
 
-  * Check the beginning of file to detect already compressed files (gzip,
-    bzip2, xdelta and some picture formats)
+  * Add a way to show the fingerprint of an key signator's keys
 
-  * Delay the read of the passphrase-fd afte a NEED_PASSPHRASE.  But this
-    may break some scripts.
+  * Add an is_valid flag to each user ID.
 
-  * as soon as we have moved to KBX, we can check signatures at all places
-  because there is no perfomance drawback as we can store the result of
-  a verification in the KBX.  This enable us to better print information on
-  revoked user IDs and signatures. Well, caching of non-self-signatures
-  will still be complicated.
+  * Replace the printing of the user name by [self-signature] when
+    appropriate so that a key listing does not get clobbered.
+
+  * Concatenated encryption messages don't work corectly - only the
+    first one is processed.
+
+  * Add option to put the list of recipients (from the encryption
+    layer) into the signatures notation data.
+
+  * With option -i prompt before adding a key to the keyring and show some
+    info what we are about to add.
+
+  * --disable-asm should still assemble _udiv_qrnnd when needed
 
+  * Get new assembler stuff from gmp 3.1
 
-Nice to have
-------------
-  * Official test vectors for 3DES-EDE3
+  * Use new-format headers for compressed packets.
+    The advantage is that a garbled zip files can be better detected.
   * use DEL and ^H for erasing the previous character (util/ttyio.c).
     or better readline.
-  * Print a warning if the directory mode is wrong.
-  * Do a real fix for bug #7 or document that it is a PGP 5 error.
+
   * preferences of hash algorithms are not yet used.
-  * Replace the SIGUSR1 stuff by semaphores to avoid loss of a signal.
-    or use POSIX.4 realtime signals.  Overhaul the interface and the
-    test program.  Use it with the test suite?
+
   * add test cases for invalid data (scrambled armor or other random data)
-  * add checking of armor trailers
-  * Burn the buffers used by fopen(), or use read(2). Does this
-    really make sense? And while we are at it:  implement a secure deletion
-    stuff?
+
+  * add checking of armor trailers.  Try to detect garbled header lines.
+
   * the pubkey encrypt functions should do some sanity checks.
-  * dynload: implement the hint stuff.
+
   * "gpg filename.tar.gz.asc" should work like --verify (-sab).
+
   * for messages created with "-t", it might make sense to append the
     verification status of the message to the output (i.e. write something to
-    the --output file and not only to stderr.
-  * configure option where to find zlib
-  * Display more validity information about the user IDs at certain places.
-    We need a more general function to extract such kind of info from the
-    trustdb.
-  * Evaluate whether it make sense to replace the namehashs either by
-    using the user ID directly or by using pointers into the trustdb.
-  * --gen-prime may trigger a log_bug; should be a log_fatal.
+    the --output file and not only to stderr.  However the problem is
+    that we consider the message transpatrent and don't have any
+    indication of the used character set.  To implement this feature
+    we need to make sure that all output is plain 7 bit ascii but
+    given that we need to print a user name, this does not make sense
+    at all.  The only way this can be implemented is by assuming that
+    the message is encoded in utf8 and hope tht everyone starts to use
+    utf8 instead of latin-1 or whatever RSN.  Hmmm, I myself should
+    start with this.
+
+  * keyflags don't distinguish between {certify,signature}-only.
+
+  * Instead of issuing a "signature packet without keyid" gpg should
+    try to get the keyID from a corresponding one-pass signature
+    packet (See bug report 817).  This is not easy to do as we don't
+    store the one-pass packets.
+
+  * cat foo | gpg --sign | gpg --list-packets
+    Does not list the signature packet.
+
+  * Replace wording "It is NOT certain that the key belongs to its owner..."
+    with "It is NOT certain that the key belongs to the person named in the
+    user ID..." (or similar but clearer message).
+
+
+Things we won't do
+------------------
+
+  * New option --file-remove path-to-wipe-program ? 
 
diff --git a/acconfig.h b/acconfig.h
deleted file mode 100644 (file)
index 3c1d32e..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/* acconfig.h - used by autoheader to make config.h.in
- *     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 GNUPG_CONFIG_H
-#define GNUPG_CONFIG_H
-
-/* need this, because some autoconf tests rely on this (e.g. stpcpy)
- * and it should be used for new programs
- */
-#define _GNU_SOURCE  1
-
-@TOP@
-
-#undef M_DEBUG
-#undef M_GUARD
-#undef VERSION
-#undef PACKAGE
-#undef PRINTABLE_OS_NAME
-#undef IS_DEVELOPMENT_VERSION
-
-/* Define if your locale.h file contains LC_MESSAGES.  */
-#undef HAVE_LC_MESSAGES
-
-/* Define to 1 if NLS is requested.  */
-#undef ENABLE_NLS
-
-/* Define as 1 if you have catgets and don't want to use GNU gettext.  */
-#undef HAVE_CATGETS
-
-/* Define as 1 if you have gettext and don't want to use GNU gettext.  */
-#undef HAVE_GETTEXT
-
-/* libintl.h is available; this is obsolete because if we don't have
- * this header we use a symlink to the one in intl/ */
-#undef HAVE_LIBINTL_H
-
-
-#undef HAVE_STPCPY
-
-#undef HAVE_MLOCK
-
-
-#undef BIG_ENDIAN_HOST
-#undef LITTLE_ENDIAN_HOST
-
-#undef HAVE_BYTE_TYPEDEF
-#undef HAVE_USHORT_TYPEDEF
-#undef HAVE_ULONG_TYPEDEF
-#undef HAVE_U16_TYPEDEF
-#undef HAVE_U32_TYPEDEF
-
-#undef HAVE_BROKEN_MLOCK
-
-/* defined if we have a /dev/random and /dev/urandom */
-#undef HAVE_DEV_RANDOM
-/* and the real names of the random devices */
-#undef NAME_OF_DEV_RANDOM
-#undef NAME_OF_DEV_URANDOM
-/* Linux has an ioctl */
-#undef HAVE_DEV_RANDOM_IOCTL
-/* see cipher/rndegd.c */
-#undef EGD_SOCKET_NAME
-
-
-#undef USE_DYNAMIC_LINKING
-#undef HAVE_DL_DLOPEN
-#undef HAVE_DL_SHL_LOAD
-#undef HAVE_DLD_DLD_LINK
-
-#undef USE_SHM_COPROCESSING
-
-#undef IPC_HAVE_SHM_LOCK
-#undef IPC_RMID_DEFERRED_RELEASE
-
-/* set this to limit filenames to the 8.3 format */
-#undef USE_ONLY_8DOT3
-/* defined if we must run on a stupid file system */
-#undef HAVE_DRIVE_LETTERS
-/* defined if we run on some of the PCDOS like systems (DOS, Windoze. OS/2)
- * with special properties like no file modes */
-#undef HAVE_DOSISH_SYSTEM
-/* because the Unix gettext has to much overhead on MingW32 systems
- * and these systems lack Posix functions, we use a simplified version
- * of gettext */
-#undef USE_SIMPLE_GETTEXT
-/* At some point in the system we need to know that we use the Windows
- * random module. */
-#undef USE_STATIC_RNDW32
-
-#undef USE_CAPABILITIES
-
-/* Some systems have mkdir that takes a single argument. */
-#undef MKDIR_TAKES_ONE_ARG
-
-
-@BOTTOM@
-
-#include "gnupg-defs.h"
-
-#endif /*GNUPG_CONFIG_H*/
index 9dce248..4a2c916 100644 (file)
@@ -1,5 +1,21 @@
-dnl macros to configure g10
-
+dnl macros to configure gnupg
+dnl Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+dnl
+dnl This file is part of GnuPG.
+dnl
+dnl GnuPG is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl 
+dnl GnuPG is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl 
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 
 dnl GNUPG_MSG_PRINT(STRING)
 dnl print a message
@@ -15,37 +31,15 @@ dnl
 AC_DEFUN(GNUPG_CHECK_TYPEDEF,
   [ AC_MSG_CHECKING(for $1 typedef)
     AC_CACHE_VAL(gnupg_cv_typedef_$1,
-    [AC_TRY_COMPILE([#include <stdlib.h>
+    [AC_TRY_COMPILE([#define _GNU_SOURCE 1
+    #include <stdlib.h>
     #include <sys/types.h>], [
     #undef $1
     int a = sizeof($1);
     ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
     AC_MSG_RESULT($gnupg_cv_typedef_$1)
     if test "$gnupg_cv_typedef_$1" = yes; then
-        AC_DEFINE($2)
-    fi
-  ])
-
-
-dnl GNUPG_FIX_HDR_VERSION(FILE, NAME)
-dnl Make the version number in gcrypt/gcrypt.h the same as the one here.
-dnl (this is easier than to have a .in file just for one substitution)
-dnl
-AC_DEFUN(GNUPG_FIX_HDR_VERSION,
-  [ sed "s/^#define $2 \".*/#define $2 \"$VERSION\"/" $srcdir/$1 > $srcdir/$1.tmp
-    if cmp -s $srcdir/$1 $srcdir/$1.tmp 2>/dev/null; then
-        rm -f $srcdir/$1.tmp
-    else
-        rm -f $srcdir/$1
-        if mv $srcdir/$1.tmp $srcdir/$1 ; then
-            :
-        else
-            AC_MSG_ERROR([[
-*** Failed to fix the version string macro $2 in $1.
-*** The old file has been saved as $1.tmp
-                         ]])
-        fi
-        AC_MSG_WARN([fixed the $2 macro in $1])
+        AC_DEFINE($2,1,[Defined if a `]$1[' is typedef'd])
     fi
   ])
 
@@ -53,7 +47,7 @@ AC_DEFUN(GNUPG_FIX_HDR_VERSION,
 dnl GNUPG_CHECK_GNUMAKE
 dnl
 AC_DEFUN(GNUPG_CHECK_GNUMAKE,
-  [
+  [ 
     if ${MAKE-make} --version 2>/dev/null | grep '^GNU ' >/dev/null 2>&1; then
         :
     else
@@ -67,6 +61,7 @@ AC_DEFUN(GNUPG_CHECK_GNUMAKE,
     fi
   ])
 
+
 dnl GNUPG_CHECK_FAQPROG
 dnl
 AC_DEFUN(GNUPG_CHECK_FAQPROG,
@@ -82,39 +77,33 @@ AC_DEFUN(GNUPG_CHECK_FAQPROG,
     AC_SUBST(FAQPROG)
     AM_CONDITIONAL(WORKING_FAQPROG, test "$working_faqprog" = "yes" )
 
-    if test $working_faqprog = no; then
-       AC_MSG_WARN([[
-***
-*** It seems that the faqprog.pl program is not installed.
-*** Unless you do not change the source of the FAQs it is not required.
-*** The working version of this utility should be available at:
-***   ftp://ftp.gnupg.org/pub/gcrypt/contrib/faqprog.pl
-***]])
-    fi
-  ])       
-
-
-
-dnl GNUPG_LINK_FILES( SRC, DEST )
-dnl same as AC_LINK_FILES, but collect the files to link in
-dnl some special variables and do the link
-dnl when GNUPG_DO_LINK_FILES is called
-dnl This is a workaround for AC_LINK_FILES, because it does not work
-dnl correct when using a caching scheme
+dnl     if test $working_faqprog = no; then
+dnl         AC_MSG_WARN([[
+dnl ***
+dnl *** It seems that the faqprog.pl program is not installed;
+dnl *** however it is only needed if you want to change the FAQ.
+dnl ***  (faqprog.pl should be available at:
+dnl ***    ftp://ftp.gnupg.org/pub/gcrypt/contrib/faqprog.pl )
+dnl *** No need to worry about this warning.
+dnl ***]])
+dnl     fi
+   ])       
+
+dnl GNUPG_CHECK_DOCBOOK_TO_TEXI
 dnl
-define(GNUPG_LINK_FILES,
-  [ if test "x$wk_link_files_src" = "x"; then
-        wk_link_files_src="$1"
-        wk_link_files_dst="$2"
-    else
-        wk_link_files_src="$wk_link_files_src $1"
-        wk_link_files_dst="$wk_link_files_dst $2"
+AC_DEFUN(GNUPG_CHECK_DOCBOOK_TO_TEXI,
+  [
+    AC_CHECK_PROG(DOCBOOK_TO_TEXI, docbook2texi, yes, no)
+    AC_MSG_CHECKING(for sgml to texi tools)
+    working_sgmltotexi=no
+    if test "$ac_cv_prog_DOCBOOK_TO_TEXI" = yes; then
+      if sgml2xml -v /dev/null 2>&1 | grep 'SP version' >/dev/null 2>&1 ; then
+            working_sgmltotexi=yes
+      fi
     fi
-  ])
-define(GNUPG_DO_LINK_FILES,
-  [ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst )
-  ])
-
+    AC_MSG_RESULT($working_sgmltotexi)
+    AM_CONDITIONAL(HAVE_DOCBOOK_TO_TEXI, test "$working_sgmltotexi" = "yes" )
+   ])       
 
 
 
@@ -158,9 +147,11 @@ define(GNUPG_CHECK_ENDIAN,
       ])
     AC_MSG_RESULT([$gnupg_cv_c_endian])
     if test "$gnupg_cv_c_endian" = little; then
-      AC_DEFINE(LITTLE_ENDIAN_HOST)
+      AC_DEFINE(LITTLE_ENDIAN_HOST,1,
+                [Defined if the host has little endian byte ordering])
     else
-      AC_DEFINE(BIG_ENDIAN_HOST)
+      AC_DEFINE(BIG_ENDIAN_HOST,1,
+                [Defined if the host has big endian byte ordering])
     fi
   ])
 
@@ -328,7 +319,8 @@ define(GNUPG_CHECK_IPC,
          gnupg_cv_ipc_rmid_deferred_release="assume-no")
        )
        if test "$gnupg_cv_ipc_rmid_deferred_release" = "yes"; then
-           AC_DEFINE(IPC_RMID_DEFERRED_RELEASE)
+           AC_DEFINE(IPC_RMID_DEFERRED_RELEASE,1,
+                     [Defined if we can do a deferred shm release])
            AC_MSG_RESULT(yes)
        else
           if test "$gnupg_cv_ipc_rmid_deferred_release" = "no"; then
@@ -351,7 +343,8 @@ define(GNUPG_CHECK_IPC,
           )
        )
        if test "$gnupg_cv_ipc_have_shm_lock" = "yes"; then
-         AC_DEFINE(IPC_HAVE_SHM_LOCK)
+         AC_DEFINE(IPC_HAVE_SHM_LOCK,1,
+                   [Defined if a SysV shared memory supports the LOCK flag])
          AC_MSG_RESULT(yes)
        else
          AC_MSG_RESULT(no)
@@ -384,7 +377,7 @@ define(GNUPG_CHECK_MLOCK,
                     #endif
                 ], [
                     int i;
-                    
+
                     /* glibc defines this for functions which it implements
                      * to always fail with ENOSYS.  Some functions are actually
                      * named something starting with __ and the normal name
@@ -399,7 +392,8 @@ define(GNUPG_CHECK_MLOCK,
                 gnupg_cv_mlock_is_in_sys_mman=yes,
                 gnupg_cv_mlock_is_in_sys_mman=no)])
             if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then
-                AC_DEFINE(HAVE_MLOCK)
+                AC_DEFINE(HAVE_MLOCK,1,
+                          [Defined if the system supports an mlock() call])
             fi
         fi
     fi
@@ -439,8 +433,10 @@ define(GNUPG_CHECK_MLOCK,
            )
          )
          if test "$gnupg_cv_have_broken_mlock" = "yes"; then
-             AC_DEFINE(HAVE_BROKEN_MLOCK)
+             AC_DEFINE(HAVE_BROKEN_MLOCK,1,
+                       [Defined if the mlock() call does not work])
              AC_MSG_RESULT(yes)
+             AC_CHECK_FUNCS(plock)
          else
             if test "$gnupg_cv_have_broken_mlock" = "no"; then
                 AC_MSG_RESULT(no)
@@ -452,10 +448,8 @@ define(GNUPG_CHECK_MLOCK,
   ])
 
 
-
 ################################################################
 # GNUPG_PROG_NM - find the path to a BSD-compatible name lister
-################################################################
 AC_DEFUN(GNUPG_PROG_NM,
 [AC_MSG_CHECKING([for BSD-compatible nm])
 AC_CACHE_VAL(ac_cv_path_NM,
@@ -667,7 +661,7 @@ AC_CHECK_TOOL(AS, as, false)
 AC_DEFUN(GNUPG_SYS_SYMBOL_UNDERSCORE,
 [tmp_do_check="no"
 case "${target}" in
-    i386-emx-os2 | i[3456]86-pc-os2*emx | i386-pc-msdosdjgpp)
+    i386-emx-os2 | i[3456]86-pc-os2*emx | i386-pc-msdosdjgpp | *-*-cygwin)
         ac_cv_sys_symbol_underscore=yes
         ;;
     *)
@@ -718,7 +712,7 @@ fi
 AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
 if test x$ac_cv_sys_symbol_underscore = xyes; then
   AC_DEFINE(WITH_SYMBOL_UNDERSCORE,1,
-  [define if compiled symbols have a leading underscore])
+            [Defined if compiled symbols have a leading underscore])
 fi
 ])
 
@@ -741,119 +735,8 @@ AC_CACHE_CHECK([if mkdir takes one argument], gnupg_cv_mkdir_takes_one_arg,
 #endif], [mkdir ("foo", 0);],
         gnupg_cv_mkdir_takes_one_arg=no, gnupg_cv_mkdir_takes_one_arg=yes)])
 if test $gnupg_cv_mkdir_takes_one_arg = yes ; then
-  AC_DEFINE(MKDIR_TAKES_ONE_ARG)
+  AC_DEFINE(MKDIR_TAKES_ONE_ARG,1,
+            [Defined if mkdir() does not take permission flags])
 fi
 ])
 
-dnl GPH_PROG_DOCBOOK()
-dnl Check whether we have the needed Docbook environment
-dnl and issue a warning if this is not the case.
-dnl
-dnl This test defines these variables for substitution:
-dnl    DB2HTML - command used to convert Docbook to HTML
-dnl    DB2TEX  - command used to convert Docbook to TeX
-dnl    DB2MAN  - command used to convert Docbook to man pages
-dnl    JADE    - command to invoke jade
-dnl    JADETEX - command to invoke jadetex
-dnl    DSL_FOR_HTML - the stylesheet used to for the Docbook->HTML conversion
-dnl The following make conditionals are defined
-dnl    HAVE_DB2MAN  - defined when db2man is available
-dnl    HAVE_DB2TEX  - defined when db2tex is available
-dnl    HAVE_DB2HTML - defined when db2html is available
-dnl    HAVE_DOCBOOK - defined when the entire Docbook environment is present
-dnl    HAVE_JADE    - defined when jade is installed
-dnl    HAVE_JADETEX - defined when jadetex is installed
-dnl
-dnl (wk 2000-02-17)
-dnl
-AC_DEFUN(GPH_PROG_DOCBOOK,
-  [  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
-     all=yes
-     AC_PATH_PROG(DB2MAN, docbook-to-man, no)
-     test "$DB2MAN" = no && all=no
-     AM_CONDITIONAL(HAVE_DB2MAN, test "$DB2MAN" != no )
-
-     AC_PATH_PROG(JADE, jade, no)
-     test "$JADE" = no && all=no
-     AM_CONDITIONAL(HAVE_JADE, test "$JADE" != no )
-
-     AC_PATH_PROG(JADETEX, jadetex, no)
-     test "$JADETEX" = no && all=no
-     AM_CONDITIONAL(HAVE_JADETEX, test "$JADETEX" != no )
-
-     stylesheet_dirs='
-/usr/local/lib/dsssl/stylesheets/docbook
-/usr/local/share/dsssl/stylesheets/docbook
-/usr/local/lib/sgml/stylesheet/dsssl/docbook/nwalsh
-/usr/local/share/sgml/stylesheet/dsssl/docbook/nwalsh
-/usr/lib/dsssl/stylesheets/docbook
-/usr/share/dsssl/stylesheets/docbook
-/usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh
-/usr/share/sgml/stylesheet/dsssl/docbook/nwalsh
-'
-
-    AC_MSG_CHECKING(for TeX stylesheet)
-    dsl=none
-    for d in ${stylesheet_dirs}; do
-        file=${d}/print/docbook.dsl
-        if test -f $file; then
-            dsl=$file
-            break
-        fi
-    done
-    AC_MSG_RESULT([$dsl])
-    okay=no
-    if test $dsl = none ; then
-       DB2TEX="$missing_dir/missing db2tex"
-       all=no
-    else
-       DB2TEX="$JADE -t tex -i tex -d $dsl"
-       okay=yes
-    fi
-    AC_SUBST(DB2TEX)
-    AM_CONDITIONAL(HAVE_DB2TEX, test $okay = yes )
-
-    if ( $ac_aux_dir/db2html.in --version) < /dev/null > /dev/null 2>&1; then
-        :
-    else
-        AC_ERROR([needed $ac_aux_dir/db2html.in not found])
-    fi
-
-    AC_MSG_CHECKING(for HTML stylesheet)
-    DSL_FOR_HTML="none"
-    for d in ${stylesheet_dirs}; do
-        file=${d}/html/docbook.dsl
-        if test -f $file; then
-            DSL_FOR_HTML=$file
-            break
-        fi
-    done
-    AC_MSG_RESULT([$DSL_FOR_HTML])
-    okay=no
-    if test $DSL_FOR_HTML = none ; then
-       DB2HTML="$missing_dir/missing db2html"
-       all=no
-    else
-       DB2HTML="`cd $ac_aux_dir && pwd`/db2html --copyfiles"
-       okay=yes
-    fi
-    AC_SUBST(DB2HTML)
-    AC_SUBST(DSL_FOR_HTML)
-    AM_CONDITIONAL(HAVE_DB2HTML, test $okay = yes )
-
-    AM_CONDITIONAL(HAVE_DOCBOOK, test "$all" != yes )
-    if test $all = no ; then
-        AC_MSG_WARN([[
-***
-*** It seems that the Docbook environment is not installed as required.
-*** We will try to build everything,  but if you either touch some files
-*** or use a bogus make tool, you may run into problems.
-*** Docbook is normally only needed to build the documentation.
-***]])
-    fi
-  ])
-
-
-
-
-dnl *-*wedit:notab*-*  Please keep this as the last line.
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..41ae4e2
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+autogen_sh="`dirname $0`/scripts/autogen.sh"
+exec $autogen_sh $*
+
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..e3f2e33
--- /dev/null
@@ -0,0 +1,994 @@
+dnl Configure.ac script for GnuPG
+dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+dnl
+dnl This file is part of GnuPG.
+dnl
+dnl GnuPG is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl 
+dnl GnuPG is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl 
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+dnl
+dnl (Process this file with autoconf to produce a configure script.)
+dnlAC_REVISION($Revision$)dnl
+
+AC_PREREQ(2.52)
+AC_INIT(gnupg, 1.1.90, bug-gnupg@gnu.org)
+ALL_LINGUAS="cs da de eo el es et fr gl id it ja nl pl pt_BR pt sv tr"
+static_modules="sha1 md5 rmd160"
+static_random_module=""
+
+PACKAGE=$PACKAGE_NAME
+VERSION=$PACKAGE_VERSION
+
+AC_CONFIG_AUX_DIR(scripts)
+AC_CONFIG_SRCDIR(g10/g10.c)
+AC_CANONICAL_TARGET()
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+AM_CONFIG_HEADER(config.h)
+
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
+AC_DEFINE(_GNU_SOURCE,1,[Some tests rely on this (stpcpy) and it should be used for new programs anyway])
+
+AC_PROG_AWK
+
+MODULES_IN_CIPHER=`$AWK '/^EXTRA_PROGRAMS/ { for(i=3;i<=NF;i++) print $i}' \
+                                              $srcdir/cipher/Makefile.am`
+
+dnl
+dnl  Check for random module options
+dnl
+dnl  Fixme: get the list of available modules from MODULES_IN_CIPHER
+dnl         and check against this list
+
+AC_MSG_CHECKING([which static random module to use])
+AC_ARG_ENABLE(static-rnd,
+    [  --enable-static-rnd=[egd|unix|linux|none]  ],
+[use_static_rnd=$enableval], [use_static_rnd=default] )
+
+if test "$use_static_rnd" = no; then
+    use_static_rnd=default
+fi
+
+case "$use_static_rnd" in
+    egd | linux | unix | none | default )
+      AC_MSG_RESULT($use_static_rnd)
+      ;;
+    * )
+      AC_MSG_RESULT(invalid argument)
+      AC_MSG_ERROR(there is no random module rnd$use_static_rnd)
+      ;;
+esac
+
+AC_ARG_WITH(egd-socket,
+    [  --with-egd-socket=NAME  Use NAME for the EGD socket)],
+            egd_socket_name="$withval", egd_socket_name="" )
+AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name",
+                   [Define if you don't want the default EGD socket name.
+                    For details see cipher/rndegd.c])
+
+
+dnl
+dnl See whether the user wants to disable checking for /dev/random
+
+AC_MSG_CHECKING([whether use of /dev/random is requested])
+AC_ARG_ENABLE(dev-random,
+[  --disable-dev-random    disable the use of dev random],
+    try_dev_random=$enableval, try_dev_random=yes)
+AC_MSG_RESULT($try_dev_random)
+
+
+dnl
+dnl  Check other options
+dnl
+
+AC_MSG_CHECKING([whether use of extensions is requested])
+AC_ARG_ENABLE(dynload,
+[  --disable-dynload       disable use of extensions],
+    try_dynload=$enableval, try_dynload=yes)
+AC_MSG_RESULT($try_dynload)
+
+AC_MSG_CHECKING([whether assembler modules are requested])
+AC_ARG_ENABLE(asm,
+[  --disable-asm           do not use assembler modules],
+     try_asm_modules=$enableval, try_asm_modules=yes)
+AC_MSG_RESULT($try_asm_modules)
+
+AC_MSG_CHECKING([whether memory guard is requested])
+AC_ARG_ENABLE(m-guard,
+    [  --enable-m-guard        enable memory guard facility],
+    use_m_guard=$enableval, use_m_guard=no)
+AC_MSG_RESULT($use_m_guard)
+if test "$use_m_guard" = yes ; then
+    AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature])
+fi
+
+AC_MSG_CHECKING([whether to enable external program execution])
+AC_ARG_ENABLE(exec,
+    [  --disable-exec          disable external program execution],
+    use_exec=$enableval, use_exec=yes)
+AC_MSG_RESULT($use_exec)
+if test "$use_exec" = no ; then
+    AC_DEFINE(NO_EXEC,1,[Define to disable external program execution])
+fi
+
+if test "$use_exec" = yes ; then
+  AC_MSG_CHECKING([whether LDAP keyserver support is requested])
+  AC_ARG_ENABLE(ldap,
+  [  --disable-ldap          disable LDAP keyserver interface],
+      try_ldap=$enableval, try_ldap=yes)
+  AC_MSG_RESULT($try_ldap)
+
+  AC_MSG_CHECKING([whether experimental external hkp keyserver support is requested])
+  AC_ARG_ENABLE(external-hkp,
+  [  --enable-external-hkp   enable experimental external HKP keyserver interface],
+      try_hkp=$enableval, try_hkp=no)
+  AC_MSG_RESULT($try_hkp)
+
+  if test "$try_hkp" = yes ; then
+    GPGKEYS_HKP="gpgkeys_hkp"
+    AC_DEFINE(USE_EXTERNAL_HKP,1,[define to use the experimental external HKP keyserver interface])
+  fi
+
+  AC_MSG_CHECKING([whether email keyserver support is requested])
+  AC_ARG_ENABLE(mailto,
+  [  --disable-mailto        disable email keyserver interface],
+      try_mailto=$enableval, try_mailto=yes)
+  AC_MSG_RESULT($try_mailto)
+fi
+
+AC_MSG_CHECKING([whether included zlib is requested])
+AC_ARG_WITH(included-zlib,
+    [  --with-included-zlib    use the zlib code included here],
+[g10_force_zlib=yes], [g10_force_zlib=no] )
+AC_MSG_RESULT($g10_force_zlib)
+
+
+dnl
+dnl Check whether we want to use Linux capabilities
+dnl
+AC_MSG_CHECKING([whether use of capabilities is requested])
+AC_ARG_WITH(capabilities,
+    [  --with-capabilities     use linux capabilities [default=no]],
+[use_capabilities="$withval"],[use_capabilities=no])
+AC_MSG_RESULT($use_capabilities)
+
+
+AH_BOTTOM([
+#if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID))
+#define EXEC_TEMPFILE_ONLY
+#endif
+
+#include "g10defs.h"
+])
+
+
+AM_MAINTAINER_MODE
+
+dnl Checks for programs.
+
+dnl
+dnl Setup some stuff depending on host/target.
+dnl
+case "${target}" in
+    *-*-mingw32*)
+        disallowed_modules="rndunix rndlinux rndegd"
+        ;;
+    *-*-cygwin*)
+        disallowed_modules="rndunix rndlinux rndegd tiger"
+        ;;
+    *)
+        disallowed_modules="rndw32"
+       ;;
+esac
+
+AC_PROG_MAKE_SET
+AM_SANITY_CHECK
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_PROG_CC
+AC_PROG_CPP
+AC_PATH_PROG(PERL,"perl")
+AC_ISC_POSIX
+AC_SYS_LARGEFILE
+AC_PROG_INSTALL
+AC_PROG_AWK
+AC_CHECK_PROG(DOCBOOK_TO_MAN, docbook-to-man, yes, no)
+AM_CONDITIONAL(HAVE_DOCBOOK_TO_MAN, test "$ac_cv_prog_DOCBOOK_TO_MAN" = yes)
+GNUPG_CHECK_FAQPROG
+GNUPG_CHECK_DOCBOOK_TO_TEXI
+
+MPI_OPT_FLAGS=""
+
+
+try_gettext=yes
+case "${target}" in
+    *-*-mingw32*|*-*-cygwin*)
+        # special stuff for Windoze NT
+        ac_cv_have_dev_random=no
+        AC_DEFINE(USE_ONLY_8DOT3,1,
+                  [set this to limit filenames to the 8.3 format])
+        AC_DEFINE(HAVE_DRIVE_LETTERS,1,
+                  [defined if we must run on a stupid file system])
+        AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
+                  [defined if we run on some of the PCDOS like systems 
+                   (DOS, Windoze. OS/2) with special properties like
+                    no file modes])
+        AC_DEFINE(USE_SIMPLE_GETTEXT,1,
+                  [because the Unix gettext has too much overhead on
+                   MingW32 systems and these systems lack Posix functions,
+                   we use a simplified version of gettext])
+        try_gettext="no"
+        ;;
+    i?86-emx-os2 | i?86-*-os2*emx )
+        # OS/2 with the EMX environment
+        ac_cv_have_dev_random=no
+        AC_DEFINE(HAVE_DRIVE_LETTERS)
+        AC_DEFINE(HAVE_DOSISH_SYSTEM)
+        try_gettext="no"
+        ;;
+
+    i?86-*-msdosdjgpp*)
+        # DOS with the DJGPP environment
+        ac_cv_have_dev_random=no
+        AC_DEFINE(HAVE_DRIVE_LETTERS)
+        AC_DEFINE(HAVE_DOSISH_SYSTEM)
+        try_gettext="no"
+        ;;
+
+    *-*-freebsd*)
+       # FreeBSD
+       CPPFLAGS="$CPPFLAGS -I/usr/local/include"
+       LDFLAGS="$LDFLAGS -L/usr/local/lib"
+       ;;
+
+    *-*-hpux*)
+        if test -z "$GCC" ; then
+            CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
+        fi
+        ;;
+    *-dec-osf4*)
+        if test -z "$GCC" ; then
+            # Suppress all warnings
+            # to get rid of the unsigned/signed char mismatch warnings.
+            CFLAGS="$CFLAGS -w"
+        fi
+        ;;
+    *-dec-osf5*)
+        if test -z "$GCC" ; then
+            # Use the newer compiler `-msg_disable ptrmismatch' to
+            # get rid of the unsigned/signed char mismatch warnings.
+            # Using this may hide other pointer mismatch warnings, but
+           # it at least lets other warning classes through
+            CFLAGS="$CFLAGS -msg_disable ptrmismatch"
+        fi
+        ;;
+    m68k-atari-mint)
+        ;;
+    *)
+       ;;
+esac
+
+AC_SUBST(MPI_OPT_FLAGS)
+GNUPG_SYS_SYMBOL_UNDERSCORE
+GNUPG_CHECK_PIC
+GNUPG_CHECK_EXPORTDYNAMIC
+if test "$NO_PIC" = yes; then
+    try_dynload=no
+fi
+
+dnl Must check for network library requirements before doing link tests
+dnl for ldap, for example. If ldap libs are static (or dynamic and without
+dnl ELF runtime link paths), then link will fail and LDAP support won't
+dnl be detected.
+
+AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
+       [NETLIBS="-lnsl $NETLIBS"]))
+AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
+       [NETLIBS="-lsocket $NETLIBS"]))
+
+# Try and link a LDAP test program to weed out unusable LDAP
+# libraries.  -lldap -llber -lresolv is for OpenLDAP.  -lldapssl41 is
+# for Mozilla LDAP.
+
+if test "$try_ldap" = yes ; then
+  for LDAPLIBS in "-lldap -llber -lresolv" "-lldapssl41"; do
+    _ldap_save_libs=$LIBS
+    LIBS="$LDAPLIBS $NETLIBS $LIBS"
+
+    AC_MSG_CHECKING([whether LDAP via \"$LDAPLIBS\" is present and sane])
+    AC_TRY_LINK([#include <ldap.h>],[ldap_open("foobar",1234);],
+                [gnupg_cv_func_ldap_init=yes],[gnupg_cv_func_ldap_init=no])
+    AC_MSG_RESULT([$gnupg_cv_func_ldap_init])
+
+    if test $gnupg_cv_func_ldap_init = no; then
+      AC_MSG_CHECKING([whether I can make LDAP be sane with lber.h])
+      AC_TRY_LINK([#include <lber.h>
+#include <ldap.h>],[ldap_open("foobar",1234);],
+         [gnupg_cv_func_ldaplber_init=yes],[gnupg_cv_func_ldaplber_init=no])
+      AC_MSG_RESULT([$gnupg_cv_func_ldaplber_init])
+    fi
+
+    if test "$gnupg_cv_func_ldaplber_init" = yes ; then
+       AC_DEFINE(NEED_LBER_H,1,[Define if the LDAP library requires including lber.h before ldap.h])
+    fi
+
+    if test "$gnupg_cv_func_ldap_init" = yes || \
+       test "$gnupg_cv_func_ldaplber_init" = yes ; then
+       GPGKEYS_LDAP="gpgkeys_ldap"
+    fi
+
+    LIBS=$_ldap_save_libs
+
+    if test "$GPGKEYS_LDAP" != "" ; then break; fi
+  done
+fi
+
+AC_SUBST(GPGKEYS_LDAP)
+AC_SUBST(LDAPLIBS)
+
+if test "$try_mailto" = yes ; then
+  AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
+
+  if test "$ac_cv_path_SENDMAIL" ; then
+    GPGKEYS_MAILTO="gpgkeys_mailto"
+    fi
+  fi
+AC_SUBST(GPGKEYS_MAILTO)
+
+AC_SUBST(GPGKEYS_HKP)
+
+case "${target}" in
+    *-*-mingw32*)
+        PRINTABLE_OS_NAME="MingW32"
+        ;;
+    *-*-cygwin*)
+        PRINTABLE_OS_NAME="Cygwin32"
+        ;;
+    i?86-emx-os2 | i?86-*-os2*emx )
+        PRINTABLE_OS_NAME="OS/2"
+        ;;
+    i?86-*-msdosdjgpp*)
+        PRINTABLE_OS_NAME="MSDOS/DJGPP"
+        try_dynload=no
+        ;;
+    *-linux*)
+        PRINTABLE_OS_NAME="GNU/Linux"
+        ;;
+dnl let that after linux to avoid gnu-linux problems
+    *-gnu*)
+        PRINTABLE_OS_NAME="GNU/Hurd"
+        ;;
+    *)
+        PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
+        ;;
+esac
+AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
+                   [A human readable text with the name of the OS])
+
+
+#
+# 1. Set flags to be used for the extension modules
+# 2. Set names of random devices
+#
+NAME_OF_DEV_RANDOM="/dev/random"
+NAME_OF_DEV_URANDOM="/dev/urandom"
+case "${target}" in
+    *-openbsd* | *-netbsd*)
+        NAME_OF_DEV_RANDOM="/dev/srandom"
+        NAME_OF_DEV_URANDOM="/dev/urandom"
+        DYNLINK_MOD_CFLAGS="-shared -rdynamic $CFLAGS_PIC -Wl,-Bshareable -Wl,-x"
+        ;;
+
+     hpux*)
+       # if using the vendor (ANSI) compiler, arrange to have `-b' passed
+       # to the linker.  If using gcc, it supports `-shared' to do the same.
+        if test -n "$GCC" ; then
+           DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
+        else
+           DYNLINK_MOD_CFLAGS='-Wl,-b'
+        fi
+        ;;
+
+    *-irix6.5*)
+        # Irix 6.5 (and probably a lot earlier, but I only still have
+       # access to 6.5.x) doesn't require any additional flags, as `-KPIC'
+       # is the default.  Also, `-shared' works with the vendor compiler
+       DYNLINK_MOD_CFLAGS="-shared"
+        ;;
+
+    alpha*-dec-osf*)
+       # osf (i.e. OSF/1, Digital UNIX, or Tru64 UNIX, pick any one...)
+       # on alpha doesn't require any PIC flags, everything is PIC.
+       # This may not be the case for osf ports to other machines, so
+       # hence the more specific match for target.
+       #
+       # Also, `-shared' works with the vendor compiler or gcc.
+       # -expect_unresolved turns off warnings about unresolved symbols.
+       DYNLINK_MOD_CFLAGS='-shared -Wl,-expect_unresolved,\*'
+         ;;
+
+    *-solaris*)
+       # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
+       if test -n "$GCC" ; then
+          DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
+       else
+          DYNLINK_MOD_CFLAGS="-G $CFLAGS_PIC"
+       fi
+       ;;
+
+    *-irix* | *-dec-osf* )
+       DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"
+       ;;
+
+    *)
+        # -shared is a gcc-ism.  Find pic flags from GNUPG_CHECK_PIC.
+        if test -n "$GCC" ; then
+           DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC"                            
+        else
+           DYNLINK_MOD_CFLAGS="$CFLAGS_PIC"
+        fi
+        ;;
+esac
+AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM",
+                   [defined to the name of the strong random device])
+AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
+                   [defined to the name of the weaker random device])
+AC_SUBST(MPI_OPT_FLAGS)
+
+
+dnl Checks for libraries.
+
+if test "$try_gettext" = yes; then
+AM_GNU_GETTEXT
+else
+USE_NLS=no
+USE_INCLUDED_LIBINTL=no
+BUILD_INCLUDED_LIBINTL=no
+AC_SUBST(USE_NLS)
+AC_SUBST(USE_INCLUDED_LIBINTL)
+AC_SUBST(BUILD_INCLUDED_LIBINTL)
+fi
+
+
+if test "$try_dynload" = yes ; then
+  AC_CHECK_LIB(dl,dlopen)
+  if test "$ac_cv_lib_dl_dlopen" = "yes"; then
+    AC_DEFINE(USE_DYNAMIC_LINKING,1,
+              [define to enable the use of extensions])
+    AC_DEFINE(HAVE_DL_DLOPEN,1,
+              [Defined when the dlopen function family is available])
+    DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
+    use_gnupg_extensions=yes
+  else
+    AC_CHECK_FUNCS(dlopen)
+    if test "$ac_cv_func_dlopen" = "yes"; then
+      AC_DEFINE(USE_DYNAMIC_LINKING)
+      AC_DEFINE(HAVE_DL_DLOPEN)
+      DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
+      use_gnupg_extensions=yes
+    else
+      AC_CHECK_LIB(dld,shl_load)
+      if test "$ac_cv_lib_dld_shl_load" = "yes"; then
+        AC_DEFINE(USE_DYNAMIC_LINKING)
+        AC_DEFINE(HAVE_DL_SHL_LOAD,1,
+                  [Defined if the shl_load function family is available])
+        DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
+        use_gnupg_extensions=yes
+dnl -----------------
+dnl  DLD is not ready for use. So I better disable this test
+dnl
+dnl    AC_CHECK_LIB(dld,dld_link)
+dnl    if test "$ac_cv_lib_dld_dld_link" = "yes"; then
+dnl      AC_DEFINE(USE_DYNAMIC_LINKING)
+dnl      AC_DEFINE(HAVE_DLD_DLD_LINK)
+dnl      DYNLINK_LDFLAGS="$CFLAGS_EXPORTDYNAMIC"
+dnl      use_gnupg_extensions=yes
+dnl ---------------
+      fi
+    fi
+  fi
+else
+  AC_MSG_CHECKING(for dynamic loading)
+  DYNLINK_LDFLAGS=
+  DYNLINK_MOD_CFLAGS=
+  use_gnupg_extensions=no
+  AC_MSG_RESULT(has been disabled)
+fi
+
+AM_CONDITIONAL(ENABLE_GNUPG_EXTENSIONS, test "$use_gnupg_extensions" = yes )
+AC_SUBST(DYNLINK_LDFLAGS)
+AC_SUBST(DYNLINK_MOD_CFLAGS)
+
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(unistd.h langinfo.h termio.h locale.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_SIZE_T
+AC_TYPE_SIGNAL
+AC_DECL_SYS_SIGLIST
+
+GNUPG_CHECK_ENDIAN
+
+
+GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
+GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
+GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
+GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
+GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
+
+AC_CHECK_SIZEOF(unsigned short, 2)
+AC_CHECK_SIZEOF(unsigned int, 4)
+AC_CHECK_SIZEOF(unsigned long, 4)
+AC_CHECK_SIZEOF(unsigned long long, 0)
+
+if test "$ac_cv_sizeof_unsigned_short" = "0" \
+   || test "$ac_cv_sizeof_unsigned_int" = "0" \
+   || test "$ac_cv_sizeof_unsigned_long" = "0"; then
+    AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
+fi
+
+dnl Checks for library functions.
+AC_FUNC_FSEEKO
+AC_FUNC_VPRINTF
+AC_FUNC_FORK
+AC_CHECK_FUNCS(strerror stpcpy strsep strlwr tcgetattr strtoul mmap)
+AC_CHECK_FUNCS(strcasecmp strncasecmp)
+AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
+AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale)
+AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat)
+AC_REPLACE_FUNCS(mkdtemp)
+
+#
+# check for gethrtime and run a testprogram to see whether
+# it is broken.  It has been reported that some Solaris and HP UX systems 
+# raise an SIGILL
+#
+AC_CACHE_CHECK([for gethrtime], 
+               [gnupg_cv_func_gethrtime],
+               [AC_TRY_LINK([#include <sys/times.h>],[
+                   hrtime_t tv;
+                   tv = gethrtime();
+                 ],
+                 [gnupg_cv_func_gethrtime=yes],
+                 [gnupg_cv_func_gethrtime=no])
+               ])
+if test $gnupg_cv_func_gethrtime = yes; then
+     AC_DEFINE([HAVE_GETHRTIME], 1,
+               [Define if you have the `gethrtime(2)' function.])
+     AC_CACHE_CHECK([whether gethrtime is broken], 
+               [gnupg_cv_func_broken_gethrtime],
+               [AC_TRY_RUN([
+                   #include <sys/times.h>
+                   int main () {
+                   hrtime_t tv;
+                   tv = gethrtime(); 
+                 }
+                 ],
+                 [gnupg_cv_func_broken_gethrtime=no],
+                 [gnupg_cv_func_broken_gethrtime=yes],
+                 [gnupg_cv_func_broken_gethrtime=assume-no])
+                ])
+    if test $gnupg_cv_func_broken_gethrtime = yes; then
+      AC_DEFINE([HAVE_BROKEN_GETHRTIME], 1,
+      [Define if `gethrtime(2)' does not work correctly i.e. issues a SIGILL.])
+    fi
+fi
+     
+
+GNUPG_CHECK_MLOCK
+GNUPG_FUNC_MKDIR_TAKES_ONE_ARG
+
+dnl
+dnl Check whether we can use Linux capabilities as requested
+dnl
+if test "$use_capabilities" = "yes" ; then
+use_capabilities=no
+AC_CHECK_HEADERS(sys/capability.h)
+if test "$ac_cv_header_sys_capability_h" = "yes" ; then
+  AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1)
+  if test "$ac_cv_lib_cap_cap_init" = "yes"; then
+     AC_DEFINE(USE_CAPABILITIES,1,
+               [define if capabilities should be used])
+     LIBS="$LIBS -lcap"
+     use_capabilities=yes
+  fi
+fi
+if test "$use_capabilities" = "no" ; then
+    AC_MSG_WARN([[
+***
+*** The use of capabilities on this system is not possible.
+*** You need a recent Linux kernel and some patches:
+***   fcaps-2.2.9-990610.patch      (kernel patch for 2.2.9)
+***   fcap-module-990613.tar.gz     (kernel module)
+***   libcap-1.92.tar.gz            (user mode library and utilities)
+*** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
+*** set (filesystems menu). Be warned: This code is *really* ALPHA.
+***]])
+fi
+fi
+
+
+GNUPG_CHECK_IPC
+if test "$ac_cv_header_sys_shm_h" = "yes"; then
+  AC_DEFINE(USE_SHM_COPROCESSING,1,
+            [define if the shared memory interface should be made available])
+fi
+
+dnl
+dnl check whether we have a random device
+dnl
+if test "$try_dev_random" = yes ; then
+    AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
+    [if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
+      ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
+    if test "$ac_cv_have_dev_random" = yes; then
+        AC_DEFINE(HAVE_DEV_RANDOM,1,
+                 [defined if the system supports a random device] )
+    fi
+else
+    AC_MSG_CHECKING(for random device)
+    ac_cv_have_dev_random=no
+    AC_MSG_RESULT(has been disabled)
+fi
+
+dnl
+dnl and whether this device supports ioctl
+dnl (Note, that we should do a real test here)
+dnl
+if test "$ac_cv_have_dev_random" = yes ; then
+    AC_CHECK_HEADERS(linux/random.h)
+    AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl,
+      [ if test "$ac_cv_header_linux_random_h" = yes ; then
+          ac_cv_have_dev_random_ioctl=yes;
+        else
+          ac_cv_have_dev_random_ioctl=no;
+        fi
+      ])
+    if test "$ac_cv_have_dev_random_ioctl" = yes; then
+        AC_DEFINE(HAVE_DEV_RANDOM_IOCTL,1,
+                  [defined if the random device supports some IOCTLs])
+    fi
+fi
+
+
+dnl
+dnl Figure out the default linkage mode for random modules
+dnl
+print_egd_notice=no
+if test "$use_static_rnd" = default; then
+  if test "$ac_cv_have_dev_random" = yes; then
+      static_random_module="rndlinux"
+  else
+      case "${target}" in
+          *-*-mingw32*|*-*-cygwin*)
+              static_random_module="rndw32"
+              AC_DEFINE(USE_STATIC_RNDW32,1,
+                       [At some point in the code we need to know that
+                        we use the Windows random module.])
+              ;;
+          i?86-emx-os2|i?86-*-os2*emx)
+              static_random_module="rndos2"
+              ;;
+          m68k-atari-mint)
+              static_random_module="rndatari"
+              ;;
+          i?86-*-msdosdjgpp*)
+              :
+              ;;
+          *)
+              static_random_module="rndunix"
+              print_egd_notice=yes
+             ;;
+      esac
+  fi
+else
+  if test "$use_static_rnd" = none; then
+    :
+  else
+    static_random_module="rnd$use_static_rnd"
+    if test "$use_static_rnd" = "unix"; then
+        print_egd_notice=yes
+    fi
+  fi
+fi
+
+
+if test "$print_egd_notice" = "yes"; then
+    AC_MSG_WARN([[
+***
+*** The performance of the UNIX random gatherer module is not very good
+*** and it does not keep the entropy pool over multiple invocations of
+*** GnuPG.  The suggested way to overcome this problem is to use the
+***
+***               Entropy Gathering Daemon (EGD)
+***
+*** which provides a entropy source for the whole system.  It is written
+*** in Perl and available at the GnuPG FTP servers.  For more information
+*** consult the GnuPG webpages:
+***
+***           http://www.gnupg.org/download.html#egd
+***
+*** You may want to run ./configure with --enable-static-rnd=none to be
+*** able to load the EGD client code dynamically; this way you can choose
+*** between RNDUNIX and RNDEGD without recompilation.
+***]])
+fi
+
+dnl
+dnl Parse the modules list and build the list
+dnl of static and dymically linked modules
+dnl
+dnl (We always need a static rmd160)
+static_modules="$static_modules rmd160 $static_random_module"
+STATIC_CIPHER_NAMES=""
+STATIC_CIPHER_OBJS=""
+DYNAMIC_CIPHER_MODS=""
+show_dynlink=""
+for name in $MODULES_IN_CIPHER; do
+    x="yes"
+    for i in $disallowed_modules; do
+        if test "$name" = "$i" ; then x="no" ; fi
+    done;
+    if test $x = yes; then
+        x="no"
+        for i in $static_modules; do
+            if test "$name" = "$i" ; then
+                x="yes"
+            fi
+        done;
+        if test $x = yes; then
+            STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
+            STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.o"
+        else
+            DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
+            show_dynlink="$show_dynlink $name"
+        fi
+    fi
+done
+AC_SUBST(STATIC_CIPHER_OBJS)
+AC_SUBST(STATIC_CIPHER_NAMES)
+AC_SUBST(DYNAMIC_CIPHER_MODS)
+
+dnl
+dnl And build the constructor file
+dnl
+
+test -d cipher || mkdir cipher
+cat <<G10EOF >cipher/construct.c
+/* automatically generated by configure - do not edit */
+
+G10EOF
+show_statlink=""
+for name in $STATIC_CIPHER_NAMES; do
+    echo "void ${name}_constructor(void);" >>cipher/construct.c
+    show_statlink="$show_statlink $name"
+done
+
+cat <<G10EOF >>cipher/construct.c
+
+void
+cipher_modules_constructor(void)
+{
+    static int done = 0;
+    if( done )
+        return;
+    done = 1;
+
+G10EOF
+for name in $STATIC_CIPHER_NAMES; do
+    echo "   ${name}_constructor();" >>cipher/construct.c
+done
+echo '}' >>cipher/construct.c
+
+
+
+
+dnl
+dnl Figure how to link the cipher modules
+dnl
+AC_SUBST(STATIC_CIPHER_OBJS)
+AC_SUBST(DYNAMIC_CIPHER_MODS)
+
+
+dnl setup assembler stuff
+AC_MSG_CHECKING(for mpi assembler functions)
+if test -f $srcdir/mpi/config.links ; then
+    . $srcdir/mpi/config.links
+    AC_CONFIG_LINKS("$mpi_ln_list")
+    ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
+    ac_cv_mpi_sflags="$mpi_sflags"
+    ac_cv_mpi_config_done="yes"
+    AC_MSG_RESULT(done)
+else
+    AC_MSG_RESULT(failed)
+    AC_MSG_ERROR([mpi/config.links missing!])
+fi
+MPI_EXTRA_ASM_OBJS=""
+show_extraasm=""
+if test "$ac_cv_mpi_extra_asm_modules" != ""; then
+for i in $ac_cv_mpi_extra_asm_modules; do
+    show_extraasm="$show_extraasm $i"
+    MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
+done
+fi
+AC_SUBST(MPI_EXTRA_ASM_OBJS)
+MPI_SFLAGS="$ac_cv_mpi_sflags"
+AC_SUBST(MPI_SFLAGS)
+
+dnl Do we have zlib? Must do it here because Solaris failed
+dnl when compiling a conftest (due to the "-lz" from LIBS).
+use_local_zlib=yes
+if test "$g10_force_zlib" = "yes"; then
+  :
+else
+  _cppflags="${CPPFLAGS}"
+  _ldflags="${LDFLAGS}"
+
+  AC_ARG_WITH(zlib,
+  [  --with-zlib=DIR         use libz in DIR],[
+    if test -d "$withval"; then
+      CPPFLAGS="${CPPFLAGS} -I$withval/include"
+      LDFLAGS="${LDFLAGS} -L$withval/lib"
+    fi
+  ])
+
+  AC_CHECK_HEADER(zlib.h,
+      AC_CHECK_LIB(z, deflateInit2_,
+       use_local_zlib=no
+       LIBS="$LIBS -lz",
+       CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
+       CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
+fi
+if test "$use_local_zlib" = yes ; then
+    AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
+    AC_CONFIG_LINKS(zlib.h:zlib/zlib.h zconf.h:zlib/zconf.h )
+    ZLIBS="../zlib/libzlib.a"
+else
+    AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
+    ZLIBS=
+fi
+AC_SUBST(ZLIBS)
+
+
+# Allow users to append something to the version string without
+# flagging it as development version.  The user version parts is
+# considered everything after a dash.
+changequote(,)dnl
+tmp_pat='[a-zA-Z]'
+changequote([,])dnl
+if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then
+    AC_DEFINE(IS_DEVELOPMENT_VERSION,1,
+              [Defined if this is not a regular release])
+fi
+
+AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes)
+
+GNUPG_CHECK_GNUMAKE
+
+# add some extra libs here so that previous tests don't fail for
+# mysterious reasons - the final link step shoudl bail out. 
+case "${target}" in
+    *-*-mingw32*)
+        LIBS="$LIBS -lws2_32"
+        ;;
+    *)
+       ;;
+esac
+
+
+if test "$GCC" = yes; then
+    if test "$USE_MAINTAINER_MODE" = "yes"; then
+        CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
+    else
+        CFLAGS="$CFLAGS -Wall"
+    fi
+fi
+
+AC_SUBST(NETLIBS)
+
+# Note the \\\\ for backslashes.  Autoconf eats one layer, leaving \\
+
+AC_CONFIG_COMMANDS(g10defs.h,[[
+cat >g10defs.tmp <<G10EOF
+/* Generated automatically by configure */
+#ifdef HAVE_DRIVE_LETTERS
+  #define G10_LOCALEDIR "c:/lib/gnupg/locale"
+  #define GNUPG_LIBDIR  "c:/lib/gnupg"
+  #define GNUPG_DATADIR "c:/lib/gnupg"
+  #define GNUPG_HOMEDIR "c:/gnupg"
+#else
+  #define G10_LOCALEDIR "${datadir}/locale"
+  #define GNUPG_LIBDIR  "${libdir}/gnupg"
+  #define GNUPG_DATADIR "${datadir}/gnupg"
+  #ifdef __VMS
+    #define GNUPG_HOMEDIR "/SYS\$LOGIN/gnupg" 
+  #else
+    #define GNUPG_HOMEDIR "~/.gnupg" 
+  #endif
+#endif
+/* those are here to be redefined by handcrafted g10defs.h.
+   Please note that the string version must not contain more
+   than one character because the using code assumes strlen()==1 */
+#ifdef HAVE_DOSISH_SYSTEM
+#define DIRSEP_C '\\\\'
+#define EXTSEP_C '.'
+#define DIRSEP_S "\\\\"
+#define EXTSEP_S "."
+#else
+#define DIRSEP_C '/'
+#define EXTSEP_C '.'
+#define DIRSEP_S "/"
+#define EXTSEP_S "."
+#endif
+G10EOF
+cat mpi/mpi-asm-defs.h >>g10defs.tmp 
+if cmp -s g10defs.h g10defs.tmp 2>/dev/null; then
+    echo "g10defs.h is unchanged"
+    rm -f g10defs.tmp
+else
+    rm -f g10defs.h
+    mv g10defs.tmp g10defs.h
+    echo "g10defs.h created"
+fi
+]],[[
+prefix=$prefix
+exec_prefix=$exec_prefix
+libdir=$libdir
+datadir=$datadir
+DATADIRNAME=$DATADIRNAME
+]])
+
+
+AC_CONFIG_FILES([
+Makefile
+intl/Makefile
+po/Makefile.in
+util/Makefile
+mpi/Makefile
+cipher/Makefile
+g10/Makefile
+keyserver/Makefile
+keyserver/gpgkeys_mailto
+keyserver/gpgkeys_test
+doc/Makefile
+tools/Makefile
+zlib/Makefile
+checks/Makefile
+])
+AC_OUTPUT
+
+# Give some feedback
+echo
+echo   "                Configured for: $PRINTABLE_OS_NAME ($target)"
+if test -n "$show_dynlink"; then
+  echo "    Dynamically linked modules:$show_dynlink"
+fi
+if test -n "$show_statlink"; then
+  echo "     Statically linked modules:$show_statlink"
+fi
+if test -n "$show_extraasm"; then
+  echo "  Extra cpu specific functions:$show_extraasm"
+fi
+echo
+
diff --git a/gnupg.txt b/gnupg.txt
new file mode 100644 (file)
index 0000000..4bb5603
--- /dev/null
+++ b/gnupg.txt
@@ -0,0 +1,98 @@
+%%comments:
+Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the file COPYING.
+
+%%name: GnuPG
+
+%%short-description: Complete implementation of the OpenPGP Internet standard.
+%%full-description: A complete and free replacement for PGP. The
+program does not use any patented algorithms, and can be used as a
+filter program. Can handle all OpenPGP messages and messages generated
+by PGP 5.0 and newer unless they use the IDEA algorithm.
+
+Supports ElGamal (signature and encrytion), DSA, AES, 3DES, Blowfish,
+Twofish, CAST5, MD5, SHA-1, RIPE-MD-160 and TIGER, and has language
+support for sixteen different languages.
+
+It is believed to be fully OpenPGP (as defined in RFC2440) conform,
+and has integrated support for HKP keyservers. There are a lot of
+useful extra features like anonymous message recipients.
+
+%%category: security, administration, email
+
+%%license: GPL
+
+%%maintainer: Werner Koch <wk@gnupg.org>
+
+%%interface: Command line
+
+%%updated: 1 Jun 2001
+
+%%keywords: PGP, security, decryption, encryption, digital signatures 
+
+%%programs: 
+
+%%GNU: yes
+
+%%web-page: http://www.gnupg.org/
+
+%%support: Paid extension/consulting from http://www.g10code.com
+
+%%doc: English user manual available from:
+http://www.gnupg.org/gph/index.html; Spanish user manual available from:
+http://www.gnupg.org/gph/index.html; English HOWTO available from
+http://www.dewinter.com/gnupg_howto/english/; French HOWTO available
+from http://www.gnupg.org/howtos/fr/; German HOWTO available from
+http://www.gnupg.org/howtos/de/; Spanish HOWTO available from
+http://www.dewinter.com/gnupg_howto/spanish.
+%%developers: Matthew Skala, Michael Roth, Niklas Hernaeus, Remi
+Guyomarch, Werner Koch <wk@gnupg.org>.
+
+%%contributors: J. Michael Ashley
+
+%%sponsors: German Federal Ministry of Economics and Technology
+
+%%source: ftp://ftp.gnupg.org/gcrypt/gnupg
+
+%%debian: http://www.debian.org/Packages/stable/non-us/gnupg.html
+
+%%redhat: http://www.megaloman.com/~hany/RPM/gnupg.html
+
+%%repository: See http://www.gnupg.org/cvs-access.html
+
+%%related: shred
+
+%%source-language: C
+
+%%supported-languages:
+
+%%use-requirements:
+
+%%build-prerequisites:
+
+%%weak-prerequisites:
+
+%%source-prerequisites:
+
+%%version: 1.0.6 stable released on 29 May 2001
+
+%%announce-list: announce@gnupg.org
+
+%%announce-news:
+
+%%help-list: gnupg-users@gnupg.org
+
+%%help-news: 
+
+%%dev-list: gnupg-devel@gnupg.org
+
+%%dev-news:
+
+%%bug-list: bug-gnupg@gnupg.org
diff --git a/mpi/ChangeLog b/mpi/ChangeLog
new file mode 100644 (file)
index 0000000..cfe5400
--- /dev/null
@@ -0,0 +1,325 @@
+2002-05-10  Stefan Bellon  <sbellon@sbellon.de>
+
+       * mpiutil.c (mpi_alloc_like/mpi_debug_alloc_like): Added code
+       for M_DEBUG.
+
+2002-04-18  Werner Koch  <wk@gnupg.org>
+
+       * i386/syntax.h (ALIGN): Removed parens from definition
+       * i386/mpih-add1.S, i386/mpih-sub1.S, i386/mpih-rshift.S,
+       i386/mpih-lshift.S: Minor syntax changes suggested by Mark Pettit
+       after comparing the files with those for GMP 4.
+       
+2001-11-08  Werner Koch  <wk@gnupg.org>
+
+       * config.links (mpi_sflags): Add extra rule for sparc64-sun-solaris2.
+
+2001-08-20  Werner Koch  <wk@gnupg.org>
+
+       * longlong.h [__riscos__]: Need a special pragma here.
+
+2001-08-09  Werner Koch  <wk@gnupg.org>
+
+       * config.links: Added configuraton for powerpc-openbsd.  By Peter
+       Valchev
+
+2001-07-09  Werner Koch  <wk@gnupg.org>
+
+       * config.links: Changed the way the list of files to be
+       symlinked is returned.
+
+2001-05-27  Werner Koch  <wk@gnupg.org>
+
+       * hppa/, hppa1.1/, pa7100/ : Use .label command instead of labels
+       because there syntax changed.  By Matthew Wilcox.
+
+2001-05-06  Werner Koch  <wk@gnupg.org>
+
+       * longlong.h: Fixes for ARM by Phil Blundell.
+
+2001-04-17  Werner Koch  <wk@gnupg.org>
+
+       Updated copyright notices.
+
+2001-03-24  Werner Koch  <wk@gnupg.org>
+
+       * mpi-mul.c (mpi_mul): Make sure that secret temporary results are
+       not stored in w.  Suggested by Florian Weimer.
+
+2001-03-18  Werner Koch  <wk@gnupg.org>
+
+       * config.links: Use i386 code for i386.  According to tests by
+       Kevin Ryde the i586 code runs slow on i386 CPUs.  Ditto for i786.
+
+2000-10-24  Werner Koch  <wk@gnupg.org>
+
+       * mips3/: Changed a few comments to C-style. By Jeff Long.
+
+2000-10-13  Werner Koch  <wk@gnupg.org>
+
+       * mpi.h: Removed the inclusion of mpi-asm-defs.h because this
+       makes some trouble when doing a VPATH build.  configure now
+       takes care of it.
+       
+2000-10-12  Werner Koch  <wk@gnupg.org>
+
+       * generic/mpi-asm-defs.h: New.
+       * mips3/mpi-asm-defs.h: New.
+       * config.links: Create a link to one of the above files.
+
+Wed Jul 19 11:26:43 CEST 2000  Werner Koch  <wk@>
+
+        * config.links: Support for powerpc--netbsd by Gabriel Rosenkoetter.
+
+Wed Mar 22 13:50:24 CET 2000  Werner Koch  <wk@openit.de>
+
+       * config.links: Add support for FreeBSD 5 and made the case stmt
+       looking nicer.  From Jun Kuriyama.
+
+Fri Mar 17 17:50:25 CET 2000  Werner Koch  <wk@openit.de>
+
+       * config.links (sparc64-unknown-linux-gnu): use udic module.
+       From Adam Mitchell.
+
+2000-03-14 12:03:56  Werner Koch  (wk@habibti.openit.de)
+
+       * Makefile.am: Do not use .s and .S files but a temp names, so that
+       OSes with caseinsensitive filenames do work.  From Frank Donahoe.
+
+Tue Mar  7 18:45:31 CET 2000  Werner Koch  <wk@gnupg.de>
+
+       * mpih-mul.c (mpihelp_mul_karatsuba_case): It seems that the
+       untested part works fine.  Removed the debugging message.
+
+       * longlong.h (umul_ppmm): Fixes for ARM-4. By Sean MacLennan.
+
+       * config.links: Add support for NetBSD.
+
+Thu Jan 13 19:31:58 CET 2000  Werner Koch  <wk@gnupg.de>
+
+       * mpi-internal.h (karatsuba_ctx): New.
+       * mpih-mul.c (mpihelp_release_karatsuba_ctx): New.
+       (mpihelp_mul_karatsuba_case): New.
+       (mpihelp_mul): Splitted to make use of the new functions.
+       * mpi-pow.c (mpi_powm): Make use of the new splitted function
+       to avoid multiple allocation of temporary memory during the
+       karatsuba operations.
+
+       * mpi_mpow.c: Removed the unused Barrett code.
+
+Sun Dec 19 15:22:26 CET 1999  Werner Koch  <wk@gnupg.de>
+
+       * power/ : Converted more comments to C comments because some AS
+       complain about ' in comments.
+
+Thu Dec 16 10:07:58 CET 1999  Werner Koch  <wk@gnupg.de>
+
+       * Makefile.am: c/SFLAGS/ASFLAGS/. This has only been used by the
+       powerpc and actually never passed the -Wa,foo to the cc.
+
+Thu Dec  9 10:31:05 CET 1999  Werner Koch  <wk@gnupg.de>
+
+       * power/: Add all files from GMP for this CPU.
+
+       * config.links:  Support for BSDI 4.x. By Wayne Chapeskie.
+       (sparc8): Made the search path the same as sparc9
+
+       * mpih-div.c (mpihelp_divrem): The MPN_COPY_DECR copied one
+       elemnat too many.  This is gmp2.0.2p9.txt patch.
+
+Sat Oct  9 20:34:41 CEST 1999  Werner Koch  <wk@gnupg.de>
+
+       * Makefile.am:  Removed libtool.
+
+Mon Aug 30 20:38:33 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * config.links: Add case label for DJGPP
+
+Wed Jul 14 19:42:08 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+
+       * Makefile.am: Use .s files as temporaries, disabled other .S rules.
+
+Wed Jul  7 13:08:40 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+
+       * mpicoder.c (g10_log_mpidump): New.
+
+       * Makefile.am: Support for libtool.
+
+Fri Jul  2 11:45:54 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+
+       * mpi-bit.c (mpi_lshift_limbs,mpi_rshift_limbs): New.
+       * mpi-mpow.c (barrett_mulm): New but diabled.
+
+Tue Jun  1 16:01:46 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * config.links (i[56]86*-*-freebsdelf*): New.
+
+Sun May 23 14:20:22 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * config.links (sysdep.h): Not any more conditionally created.
+
+Tue May  4 15:47:53 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * mpiutil.c (mpi_alloc_like): New.
+
+Mon Apr 26 17:48:15 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * mpih-add.c, mpih-sub.c: Removed
+       * mpi-inline.c: New.
+       * mpi-inline.h: Make it usable by mpi-inline.c.
+
+Sun Apr 18 10:11:28 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * mpih-mul.c (mpihelp_mul_n): Fixed use of memory region.
+       (mpihelp_mul): Ditto.
+
+Wed Apr  7 20:51:39 CEST 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * Makefile.am: Explicit rules to invoke cpp on *.S
+
+Mon Mar  8 20:47:17 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * config.links: Take advantage of the with_symbol_underscore macro.
+       Add support for freebsd 4.
+
+Wed Feb 24 11:07:27 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * mips3/mpih-sub1.S: Removed left over junk in last line. (Should I
+       blame me or my editor?).
+
+Sat Feb 13 12:04:43 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * Makefile.am: Removed the +=. Add MPI_OPT_FLAGS.
+
+Sat Jan  9 16:02:23 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * mpi-cmp.c (mpi_cmp_ui): Normalized the arg.
+
+Thu Jan  7 18:00:58 CET 1999  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * mpi-bit.c (mpi_normalize): New.
+       (mpi_get_nbits): Normalize the MPI.
+       * mpi-bit.c (mpi_cmp): Normalize the MPI before the compare.
+
+
+Tue Dec  8 13:15:16 CET 1998  Werner Koch  <wk@isil.d.shuttle.de>
+
+       * config.links: Moved the case for powerpc*linux
+       * powerpcp32/*.S: Removed some underscores.
+
+Thu Nov 26 07:27:52 1998  Werner Koch  <werner.koch@guug.de>
+
+       * config.links: Support for ppc with ELF
+       * powerpc32/syntax.h: New.
+       * powerpc32/*.S: Applied ELF patches (glibc patches)
+
+Tue Nov 10 19:31:37 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * power*/ : Started with stuff for PPC
+       * config.links: Some stuff for PPC.
+       * generic/udiv-w-sdiv.c: New but disabled.
+
+Tue Oct 27 12:37:46 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * config.links (freebsd): Fixes for FreeBSD 3.0
+
+Wed Oct 14 09:59:30 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * config.links (freebsd): ELF patches from Jun Kuriyama.
+
+Thu Oct  8 13:28:17 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * mpi-mpow.c (mpi_mulpowm): Fixed mem leak (m_free/mpi_free).
+
+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.
+
+Wed Aug  5 15:11:12 1998  Werner Koch  (wk@(none))
+
+       * mpicoder.c (mpi_read_from_buffer): New.
+
+       * mpiutil.c (mpi_set_opaque): New.
+       (mpi_get_opaque): New.
+       (mpi_copy): Changed to support opauqe flag
+       (mpi_free): Ditto.
+
+Sat Jul  4 10:11:11 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * mpiutil.c (mpi_clear): Reset flags.
+       (mpi_set): Ditto.
+       (mpi_alloc_secure): Set flag to 1 and not ored the 1 in, tsss..
+
+Fri Jun 26 11:19:06 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * mpiutil.c (mpi_alloc): set nbits to 0.
+       (mpi_alloc_secure): Ditto.
+       (mpi_clear): Ditto.
+
+Thu Jun 25 11:50:01 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * mips3/*.S: New
+
+Mon May 18 13:47:06 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * config.links: split mpih-shift into mpih-[lr]shift and
+       changed all implementations.
+       * mpi/alpha: add some new assembler stuff.
+
+Wed May 13 11:04:29 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * config.links: Add support for MIPS
+
+Thu Apr  9 11:31:36 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * mpicoder.c (mpi_get_secure_buffer): New.
+
+Wed Apr  8 09:44:33 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * config.links: Applied small fix from Ulf Möller.
+
+Mon Apr  6 12:38:52 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * mpicoder.c (mpi_get_buffer): Removed returned leading zeroes
+       and changed all callers.
+
+Tue Mar 10 13:40:34 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * mpi-bit.c (mpi_clear_highbit): New.
+
+Mon Mar  2 19:29:00 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * Makefile.am (DISTCLEANFILES): New
+
+Thu Feb 26 06:48:54 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * config.links (X86_BROKEN_ALIGN): Added for some systems.
+
+Mon Feb 23 12:21:40 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * mpi/m68k/mpih-shift.S (Lspecial): Changed duplicate symbol.
+
+Mon Feb 16 13:00:27 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * config.links : Add detection of m68k cpus
+
+
+
+ Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
diff --git a/mpi/Makefile.am b/mpi/Makefile.am
new file mode 100644 (file)
index 0000000..56cf47a
--- /dev/null
@@ -0,0 +1,79 @@
+# Copyright (C) 1998, 1999, 2000, 2001 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
+
+## Process this file with automake to produce Makefile.in
+
+
+INCLUDES = -I.. -I$(top_srcdir)/include
+CFLAGS = @CFLAGS@ @MPI_OPT_FLAGS@
+ASFLAGS = @MPI_SFLAGS@
+
+EXTRA_DIST = config.links
+DISTCLEANFILES = mpi-asm-defs.h \
+                 mpih-add1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S  \
+                mpih-lshift.S mpih-rshift.S mpih-sub1.S asm-syntax.h sysdep.h
+# Note: we only use .S files so we should delete all left over .s
+CLEANFILES = _*.s
+
+noinst_LIBRARIES = libmpi.a
+
+# libmpi_a_LDFLAGS =
+libmpi_a_SOURCES = longlong.h    \
+             mpi-add.c      \
+             mpi-bit.c      \
+             mpi-cmp.c      \
+             mpi-div.c      \
+             mpi-gcd.c      \
+             mpi-internal.h \
+             mpi-inline.h   \
+             mpi-inline.c   \
+             mpi-inv.c      \
+             mpi-mul.c      \
+             mpi-pow.c      \
+             mpi-mpow.c     \
+             mpi-scan.c     \
+             mpicoder.c     \
+             mpih-cmp.c     \
+             mpih-div.c     \
+             mpih-mul.c     \
+             mpiutil.c      \
+             g10m.c
+
+# Note this objects are actually links, the sourcefiles are
+# distributed by special code in dist-hook
+common_asm_objects = mpih-mul1.o    \
+                    mpih-mul2.o    \
+                    mpih-mul3.o    \
+                    mpih-add1.o    \
+                    mpih-sub1.o    \
+                    mpih-lshift.o  \
+                    mpih-rshift.o
+
+libmpi_a_DEPENDENCIES = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@
+libmpi_a_LIBADD = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@
+
+# cancel the default rules used by libtool which do not really
+# work and add one to cpp .S files
+.S.o:
+        $(CPP) $(INCLUDES) $(DEFS) $< | grep -v '^#' > _$*.s
+        $(COMPILE) -c _$*.s
+        mv -f _$*.o $*.o
+
+.S.lo:
+
+
diff --git a/mpi/alpha/README b/mpi/alpha/README
new file mode 100644 (file)
index 0000000..55c0a29
--- /dev/null
@@ -0,0 +1,53 @@
+This directory contains mpn functions optimized for DEC Alpha processors.
+
+RELEVANT OPTIMIZATION ISSUES
+
+EV4
+
+1. This chip has very limited store bandwidth.  The on-chip L1 cache is
+write-through, and a cache line is transfered from the store buffer to the
+off-chip L2 in as much 15 cycles on most systems.  This delay hurts
+mpn_add_n, mpn_sub_n, mpn_lshift, and mpn_rshift.
+
+2. Pairing is possible between memory instructions and integer arithmetic
+instructions.
+
+3. mulq and umulh is documented to have a latency of 23 cycles, but 2 of
+these cycles are pipelined.  Thus, multiply instructions can be issued at a
+rate of one each 21nd cycle.
+
+EV5
+
+1. The memory bandwidth of this chip seems excellent, both for loads and
+stores.  Even when the working set is larger than the on-chip L1 and L2
+caches, the perfromance remain almost unaffected.
+
+2. mulq has a measured latency of 13 cycles and an issue rate of 1 each 8th
+cycle.  umulh has a measured latency of 15 cycles and an issue rate of 1
+each 10th cycle.  But the exact timing is somewhat confusing.
+
+3. mpn_add_n.  With 4-fold unrolling, we need 37 instructions, whereof 12
+   are memory operations.  This will take at least
+       ceil(37/2) [dual issue] + 1 [taken branch] = 20 cycles
+   We have 12 memory cycles, plus 4 after-store conflict cycles, or 16 data
+   cache cycles, which should be completely hidden in the 20 issue cycles.
+   The computation is inherently serial, with these dependencies:
+     addq
+     /   \
+   addq  cmpult
+     |     |
+   cmpult  |
+       \  /
+        or
+   I.e., there is a 4 cycle path for each limb, making 16 cycles the absolute
+   minimum.  We could replace the `or' with a cmoveq/cmovne, which would save
+   a cycle on EV5, but that might waste a cycle on EV4.  Also, cmov takes 2
+   cycles.
+     addq
+     /   \
+   addq  cmpult
+     |      \
+   cmpult -> cmovne
+
+STATUS
+
diff --git a/mpi/alpha/distfiles b/mpi/alpha/distfiles
new file mode 100644 (file)
index 0000000..f2ab9fc
--- /dev/null
@@ -0,0 +1,11 @@
+README
+mpih-add1.S
+mpih-sub1.S
+mpih-mul1.S
+mpih-mul2.S
+mpih-mul3.S
+mpih-lshift.S
+mpih-rshift.S
+
+udiv-qrnnd.S
+
diff --git a/mpi/alpha/mpih-add1.S b/mpi/alpha/mpih-add1.S
new file mode 100644 (file)
index 0000000..a2ee8eb
--- /dev/null
@@ -0,0 +1,124 @@
+/* alpha  add_n -- Add two limb vectors of the same length > 0 and store
+ *                sum in a third limb vector.
+ * Copyright (C) 1995, 1998, 2001 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
+ */
+
+
+
+/*******************
+ *  mpi_limb_t
+ *  mpihelp_add_n( mpi_ptr_t res_ptr,  ($16)
+ *                mpi_ptr_t s1_ptr,    ($17)
+ *                mpi_ptr_t s2_ptr,    ($18)
+ *                mpi_size_t size)     ($19)
+ */
+
+
+       .set    noreorder
+       .set    noat
+.text
+       .align  3
+       .globl  mpihelp_add_n
+       .ent    mpihelp_add_n
+mpihelp_add_n:
+       .frame  $30,0,$26,0
+
+       ldq     $3,0($17)
+       ldq     $4,0($18)
+
+       subq    $19,1,$19
+       and     $19,4-1,$2      # number of limbs in first loop
+       bis     $31,$31,$0
+       beq     $2,.L0          # if multiple of 4 limbs, skip first loop
+
+       subq    $19,$2,$19
+
+.Loop0: subq   $2,1,$2
+       ldq     $5,8($17)
+       addq    $4,$0,$4
+       ldq     $6,8($18)
+       cmpult  $4,$0,$1
+       addq    $3,$4,$4
+       cmpult  $4,$3,$0
+       stq     $4,0($16)
+       or      $0,$1,$0
+
+       addq    $17,8,$17
+       addq    $18,8,$18
+       bis     $5,$5,$3
+       bis     $6,$6,$4
+       addq    $16,8,$16
+       bne     $2,.Loop0
+
+.L0:   beq     $19,.Lend
+
+       .align  3
+.Loop: subq    $19,4,$19
+
+       ldq     $5,8($17)
+       addq    $4,$0,$4
+       ldq     $6,8($18)
+       cmpult  $4,$0,$1
+       addq    $3,$4,$4
+       cmpult  $4,$3,$0
+       stq     $4,0($16)
+       or      $0,$1,$0
+
+       ldq     $3,16($17)
+       addq    $6,$0,$6
+       ldq     $4,16($18)
+       cmpult  $6,$0,$1
+       addq    $5,$6,$6
+       cmpult  $6,$5,$0
+       stq     $6,8($16)
+       or      $0,$1,$0
+
+       ldq     $5,24($17)
+       addq    $4,$0,$4
+       ldq     $6,24($18)
+       cmpult  $4,$0,$1
+       addq    $3,$4,$4
+       cmpult  $4,$3,$0
+       stq     $4,16($16)
+       or      $0,$1,$0
+
+       ldq     $3,32($17)
+       addq    $6,$0,$6
+       ldq     $4,32($18)
+       cmpult  $6,$0,$1
+       addq    $5,$6,$6
+       cmpult  $6,$5,$0
+       stq     $6,24($16)
+       or      $0,$1,$0
+
+       addq    $17,32,$17
+       addq    $18,32,$18
+       addq    $16,32,$16
+       bne     $19,.Loop
+
+.Lend: addq    $4,$0,$4
+       cmpult  $4,$0,$1
+       addq    $3,$4,$4
+       cmpult  $4,$3,$0
+       stq     $4,0($16)
+       or      $0,$1,$0
+       ret     $31,($26),1
+
+       .end    mpihelp_add_n
+
diff --git a/mpi/alpha/mpih-lshift.S b/mpi/alpha/mpih-lshift.S
new file mode 100644 (file)
index 0000000..4ce4879
--- /dev/null
@@ -0,0 +1,123 @@
+/* alpha - left shift
+ *
+ *      Copyright (C) 1994, 1995, 1998, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_lshift( mpi_ptr_t wp,       (r16)
+ *                mpi_ptr_t up,        (r17)
+ *                mpi_size_t usize,    (r18)
+ *                unsigned cnt)        (r19)
+ *
+ * This code runs at 4.8 cycles/limb on the 21064.  With infinite unrolling,
+ * it would take 4 cycles/limb.  It should be possible to get down to 3
+ * cycles/limb since both ldq and stq can be paired with the other used
+ * instructions.  But there are many restrictions in the 21064 pipeline that
+ * makes it hard, if not impossible, to get down to 3 cycles/limb:
+ *
+ * 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay.
+ * 2. Only aligned instruction pairs can be paired.
+ * 3. The store buffer or silo might not be able to deal with the bandwidth.
+ */
+
+       .set    noreorder
+       .set    noat
+.text
+       .align  3
+       .globl  mpihelp_lshift
+       .ent    mpihelp_lshift
+mpihelp_lshift:
+       .frame  $30,0,$26,0
+
+       s8addq  $18,$17,$17     # make r17 point at end of s1
+       ldq     $4,-8($17)      # load first limb
+       subq    $17,8,$17
+       subq    $31,$19,$7
+       s8addq  $18,$16,$16     # make r16 point at end of RES
+       subq    $18,1,$18
+       and     $18,4-1,$20     # number of limbs in first loop
+       srl     $4,$7,$0        # compute function result
+
+       beq     $20,.L0
+       subq    $18,$20,$18
+
+       .align  3
+.Loop0:
+       ldq     $3,-8($17)
+       subq    $16,8,$16
+       subq    $17,8,$17
+       subq    $20,1,$20
+       sll     $4,$19,$5
+       srl     $3,$7,$6
+       bis     $3,$3,$4
+       bis     $5,$6,$8
+       stq     $8,0($16)
+       bne     $20,.Loop0
+
+.L0:   beq     $18,.Lend
+
+       .align  3
+.Loop: ldq     $3,-8($17)
+       subq    $16,32,$16
+       subq    $18,4,$18
+       sll     $4,$19,$5
+       srl     $3,$7,$6
+
+       ldq     $4,-16($17)
+       sll     $3,$19,$1
+       bis     $5,$6,$8
+       stq     $8,24($16)
+       srl     $4,$7,$2
+
+       ldq     $3,-24($17)
+       sll     $4,$19,$5
+       bis     $1,$2,$8
+       stq     $8,16($16)
+       srl     $3,$7,$6
+
+       ldq     $4,-32($17)
+       sll     $3,$19,$1
+       bis     $5,$6,$8
+       stq     $8,8($16)
+       srl     $4,$7,$2
+
+       subq    $17,32,$17
+       bis     $1,$2,$8
+       stq     $8,0($16)
+
+       bgt     $18,.Loop
+
+.Lend: sll     $4,$19,$8
+       stq     $8,-8($16)
+       ret     $31,($26),1
+       .end    mpihelp_lshift
+
+
diff --git a/mpi/alpha/mpih-mul1.S b/mpi/alpha/mpih-mul1.S
new file mode 100644 (file)
index 0000000..e62ccbd
--- /dev/null
@@ -0,0 +1,90 @@
+/* Alpha 21064 mpih-mul1.S -- Multiply a limb vector with a limb and store
+ *                           the result in a second limb vector.
+ *
+ *      Copyright (C) 1992, 1994, 1995, 1998, 
+                      2001 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
+ */
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_mul_1( mpi_ptr_t res_ptr,   (r16)
+ *               mpi_ptr_t s1_ptr,     (r17)
+ *               mpi_size_t s1_size,   (r18)
+ *               mpi_limb_t s2_limb)   (r19)
+ *
+ * This code runs at 42 cycles/limb on the EV4 and 18 cycles/limb on the EV5.
+ *
+ * To improve performance for long multiplications, we would use
+ * 'fetch' for S1 and 'fetch_m' for RES.  It's not obvious how to use
+ * these instructions without slowing down the general code: 1. We can
+ * only have two prefetches in operation at any time in the Alpha
+ * architecture.  2. There will seldom be any special alignment
+ * between RES_PTR and S1_PTR. Maybe we can simply divide the current
+ * loop into an inner and outer loop, having the inner loop handle
+ * exactly one prefetch block?
+ */
+
+       .set    noreorder
+       .set    noat
+.text
+       .align  3
+       .globl  mpihelp_mul_1
+       .ent    mpihelp_mul_1 2
+mpihelp_mul_1:
+       .frame  $30,0,$26
+
+       ldq     $2,0($17)       # $2 = s1_limb
+       subq    $18,1,$18       # size--
+       mulq    $2,$19,$3       # $3 = prod_low
+       bic     $31,$31,$4      # clear cy_limb
+       umulh   $2,$19,$0       # $0 = prod_high
+       beq     $18,Lend1       # jump if size was == 1
+       ldq     $2,8($17)       # $2 = s1_limb
+       subq    $18,1,$18       # size--
+       stq     $3,0($16)
+       beq     $18,Lend2       # jump if size was == 2
+
+       .align  3
+Loop:  mulq    $2,$19,$3       # $3 = prod_low
+       addq    $4,$0,$0        # cy_limb = cy_limb + 'cy'
+       subq    $18,1,$18       # size--
+       umulh   $2,$19,$4       # $4 = cy_limb
+       ldq     $2,16($17)      # $2 = s1_limb
+       addq    $17,8,$17       # s1_ptr++
+       addq    $3,$0,$3        # $3 = cy_limb + prod_low
+       stq     $3,8($16)
+       cmpult  $3,$0,$0        # $0 = carry from (cy_limb + prod_low)
+       addq    $16,8,$16       # res_ptr++
+       bne     $18,Loop
+
+Lend2: mulq    $2,$19,$3       # $3 = prod_low
+       addq    $4,$0,$0        # cy_limb = cy_limb + 'cy'
+       umulh   $2,$19,$4       # $4 = cy_limb
+       addq    $3,$0,$3        # $3 = cy_limb + prod_low
+       cmpult  $3,$0,$0        # $0 = carry from (cy_limb + prod_low)
+       stq     $3,8($16)
+       addq    $4,$0,$0        # cy_limb = prod_high + cy
+       ret     $31,($26),1
+Lend1: stq     $3,0($16)
+       ret     $31,($26),1
+
+       .end    mpihelp_mul_1
+
+
diff --git a/mpi/alpha/mpih-mul2.S b/mpi/alpha/mpih-mul2.S
new file mode 100644 (file)
index 0000000..595af99
--- /dev/null
@@ -0,0 +1,97 @@
+/* Alpha 21064 addmul_1 -- Multiply a limb vector with a limb and add
+ *                        the result to a second limb vector.
+ *
+ *      Copyright (C) 1992, 1994, 1995, 1998,
+ *                    2001 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
+ */
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_addmul_1( mpi_ptr_t res_ptr,      (r16)
+ *                  mpi_ptr_t s1_ptr,       (r17)
+ *                  mpi_size_t s1_size,     (r18)
+ *                  mpi_limb_t s2_limb)     (r19)
+ *
+ * This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5.
+ */
+
+
+       .set    noreorder
+       .set    noat
+.text
+       .align  3
+       .globl  mpihelp_addmul_1
+       .ent    mpihelp_addmul_1 2
+mpihelp_addmul_1:
+       .frame  $30,0,$26
+
+       ldq     $2,0($17)       # $2 = s1_limb
+       addq    $17,8,$17       # s1_ptr++
+       subq    $18,1,$18       # size--
+       mulq    $2,$19,$3       # $3 = prod_low
+       ldq     $5,0($16)       # $5 = *res_ptr
+       umulh   $2,$19,$0       # $0 = prod_high
+       beq     $18,.Lend1      # jump if size was == 1
+       ldq     $2,0($17)       # $2 = s1_limb
+       addq    $17,8,$17       # s1_ptr++
+       subq    $18,1,$18       # size--
+       addq    $5,$3,$3
+       cmpult  $3,$5,$4
+       stq     $3,0($16)
+       addq    $16,8,$16       # res_ptr++
+       beq     $18,.Lend2      # jump if size was == 2
+
+       .align  3
+.Loop: mulq    $2,$19,$3       # $3 = prod_low
+       ldq     $5,0($16)       # $5 = *res_ptr
+       addq    $4,$0,$0        # cy_limb = cy_limb + 'cy'
+       subq    $18,1,$18       # size--
+       umulh   $2,$19,$4       # $4 = cy_limb
+       ldq     $2,0($17)       # $2 = s1_limb
+       addq    $17,8,$17       # s1_ptr++
+       addq    $3,$0,$3        # $3 = cy_limb + prod_low
+       cmpult  $3,$0,$0        # $0 = carry from (cy_limb + prod_low)
+       addq    $5,$3,$3
+       cmpult  $3,$5,$5
+       stq     $3,0($16)
+       addq    $16,8,$16       # res_ptr++
+       addq    $5,$0,$0        # combine carries
+       bne     $18,.Loop
+
+.Lend2: mulq   $2,$19,$3       # $3 = prod_low
+       ldq     $5,0($16)       # $5 = *res_ptr
+       addq    $4,$0,$0        # cy_limb = cy_limb + 'cy'
+       umulh   $2,$19,$4       # $4 = cy_limb
+       addq    $3,$0,$3        # $3 = cy_limb + prod_low
+       cmpult  $3,$0,$0        # $0 = carry from (cy_limb + prod_low)
+       addq    $5,$3,$3
+       cmpult  $3,$5,$5
+       stq     $3,0($16)
+       addq    $5,$0,$0        # combine carries
+       addq    $4,$0,$0        # cy_limb = prod_high + cy
+       ret     $31,($26),1
+.Lend1: addq   $5,$3,$3
+       cmpult  $3,$5,$5
+       stq     $3,0($16)
+       addq    $0,$5,$0
+       ret     $31,($26),1
+
+       .end    mpihelp_addmul_1
+
diff --git a/mpi/alpha/mpih-mul3.S b/mpi/alpha/mpih-mul3.S
new file mode 100644 (file)
index 0000000..fa3df92
--- /dev/null
@@ -0,0 +1,95 @@
+/* Alpha 21064 submul_1 -- Multiply a limb vector with a limb and
+ *                         subtract the result from a second limb vector.
+ *      Copyright (C) 1992, 1994, 1995, 1998, 
+ *                    2001 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
+ */
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_submul_1( mpi_ptr_t res_ptr,      (r16   )
+ *                  mpi_ptr_t s1_ptr,       (r17   )
+ *                  mpi_size_t s1_size,     (r18   )
+ *                  mpi_limb_t s2_limb)     (r19   )
+ *
+ * This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5.
+ */
+
+       .set    noreorder
+       .set    noat
+.text
+       .align  3
+       .globl  mpihelp_submul_1
+       .ent    mpihelp_submul_1 2
+mpihelp_submul_1:
+       .frame  $30,0,$26
+
+       ldq     $2,0($17)       # $2 = s1_limb
+       addq    $17,8,$17       # s1_ptr++
+       subq    $18,1,$18       # size--
+       mulq    $2,$19,$3       # $3 = prod_low
+       ldq     $5,0($16)       # $5 = *res_ptr
+       umulh   $2,$19,$0       # $0 = prod_high
+       beq     $18,.Lend1      # jump if size was == 1
+       ldq     $2,0($17)       # $2 = s1_limb
+       addq    $17,8,$17       # s1_ptr++
+       subq    $18,1,$18       # size--
+       subq    $5,$3,$3
+       cmpult  $5,$3,$4
+       stq     $3,0($16)
+       addq    $16,8,$16       # res_ptr++
+       beq     $18,.Lend2      # jump if size was == 2
+
+       .align  3
+.Loop: mulq    $2,$19,$3       # $3 = prod_low
+       ldq     $5,0($16)       # $5 = *res_ptr
+       addq    $4,$0,$0        # cy_limb = cy_limb + 'cy'
+       subq    $18,1,$18       # size--
+       umulh   $2,$19,$4       # $4 = cy_limb
+       ldq     $2,0($17)       # $2 = s1_limb
+       addq    $17,8,$17       # s1_ptr++
+       addq    $3,$0,$3        # $3 = cy_limb + prod_low
+       cmpult  $3,$0,$0        # $0 = carry from (cy_limb + prod_low)
+       subq    $5,$3,$3
+       cmpult  $5,$3,$5
+       stq     $3,0($16)
+       addq    $16,8,$16       # res_ptr++
+       addq    $5,$0,$0        # combine carries
+       bne     $18,.Loop
+
+.Lend2: mulq   $2,$19,$3       # $3 = prod_low
+       ldq     $5,0($16)       # $5 = *res_ptr
+       addq    $4,$0,$0        # cy_limb = cy_limb + 'cy'
+       umulh   $2,$19,$4       # $4 = cy_limb
+       addq    $3,$0,$3        # $3 = cy_limb + prod_low
+       cmpult  $3,$0,$0        # $0 = carry from (cy_limb + prod_low)
+       subq    $5,$3,$3
+       cmpult  $5,$3,$5
+       stq     $3,0($16)
+       addq    $5,$0,$0        # combine carries
+       addq    $4,$0,$0        # cy_limb = prod_high + cy
+       ret     $31,($26),1
+.Lend1: subq   $5,$3,$3
+       cmpult  $5,$3,$5
+       stq     $3,0($16)
+       addq    $0,$5,$0
+       ret     $31,($26),1
+
+       .end    mpihelp_submul_1
+
diff --git a/mpi/alpha/mpih-rshift.S b/mpi/alpha/mpih-rshift.S
new file mode 100644 (file)
index 0000000..e15542d
--- /dev/null
@@ -0,0 +1,120 @@
+/* alpha    rshift
+ *      Copyright (C) 1994, 1995, 1998, 1999,
+ *                    2000, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_rshift( mpi_ptr_t wp,       (r16)
+ *                mpi_ptr_t up,        (r17)
+ *                mpi_size_t usize,    (r18)
+ *                unsigned cnt)        (r19)
+ *
+ * This code runs at 4.8 cycles/limb on the 21064.  With infinite unrolling,
+ * it would take 4 cycles/limb.  It should be possible to get down to 3
+ * cycles/limb since both ldq and stq can be paired with the other used
+ * instructions.  But there are many restrictions in the 21064 pipeline that
+ * makes it hard, if not impossible, to get down to 3 cycles/limb:
+ *
+ * 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay.
+ * 2. Only aligned instruction pairs can be paired.
+ * 3. The store buffer or silo might not be able to deal with the bandwidth.
+ */
+
+       .set    noreorder
+       .set    noat
+.text
+       .align  3
+       .globl  mpihelp_rshift
+       .ent    mpihelp_rshift
+mpihelp_rshift:
+       .frame  $30,0,$26,0
+
+       ldq     $4,0($17)       # load first limb
+       addq    $17,8,$17
+       subq    $31,$19,$7
+       subq    $18,1,$18
+       and     $18,4-1,$20     # number of limbs in first loop
+       sll     $4,$7,$0        # compute function result
+
+       beq     $20,.R0
+       subq    $18,$20,$18
+
+       .align  3
+.Roop0:
+       ldq     $3,0($17)
+       addq    $16,8,$16
+       addq    $17,8,$17
+       subq    $20,1,$20
+       srl     $4,$19,$5
+       sll     $3,$7,$6
+       bis     $3,$3,$4
+       bis     $5,$6,$8
+       stq     $8,-8($16)
+       bne     $20,.Roop0
+
+.R0:   beq     $18,.Rend
+
+       .align  3
+.Roop: ldq     $3,0($17)
+       addq    $16,32,$16
+       subq    $18,4,$18
+       srl     $4,$19,$5
+       sll     $3,$7,$6
+
+       ldq     $4,8($17)
+       srl     $3,$19,$1
+       bis     $5,$6,$8
+       stq     $8,-32($16)
+       sll     $4,$7,$2
+
+       ldq     $3,16($17)
+       srl     $4,$19,$5
+       bis     $1,$2,$8
+       stq     $8,-24($16)
+       sll     $3,$7,$6
+
+       ldq     $4,24($17)
+       srl     $3,$19,$1
+       bis     $5,$6,$8
+       stq     $8,-16($16)
+       sll     $4,$7,$2
+
+       addq    $17,32,$17
+       bis     $1,$2,$8
+       stq     $8,-8($16)
+
+       bgt     $18,.Roop
+
+.Rend: srl     $4,$19,$8
+       stq     $8,0($16)
+       ret     $31,($26),1
+       .end    mpihelp_rshift
+
diff --git a/mpi/alpha/mpih-sub1.S b/mpi/alpha/mpih-sub1.S
new file mode 100644 (file)
index 0000000..a32b470
--- /dev/null
@@ -0,0 +1,124 @@
+/* Alpha  sub_n -- Subtract two limb vectors of the same length > 0 and
+ *               store difference in a third limb vector.
+ *      Copyright (C) 1995, 1998, 
+ *                    2001 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
+ */
+
+
+/*******************
+ *  mpi_limb_t
+ *  mpihelp_sub_n( mpi_ptr_t res_ptr,  (r16)
+ *                mpi_ptr_t s1_ptr,    (r17)
+ *                mpi_ptr_t s2_ptr,    (r18)
+ *                mpi_size_t size)     (r19)
+ */
+
+       .set    noreorder
+       .set    noat
+.text
+       .align  3
+       .globl  mpihelp_sub_n
+       .ent    mpihelp_sub_n
+mpihelp_sub_n:
+       .frame  $30,0,$26,0
+
+       ldq     $3,0($17)
+       ldq     $4,0($18)
+
+       subq    $19,1,$19
+       and     $19,4-1,$2      # number of limbs in first loop
+       bis     $31,$31,$0
+       beq     $2,.L0          # if multiple of 4 limbs, skip first loop
+
+       subq    $19,$2,$19
+
+.Loop0: subq   $2,1,$2
+       ldq     $5,8($17)
+       addq    $4,$0,$4
+       ldq     $6,8($18)
+       cmpult  $4,$0,$1
+       subq    $3,$4,$4
+       cmpult  $3,$4,$0
+       stq     $4,0($16)
+       or      $0,$1,$0
+
+       addq    $17,8,$17
+       addq    $18,8,$18
+       bis     $5,$5,$3
+       bis     $6,$6,$4
+       addq    $16,8,$16
+       bne     $2,.Loop0
+
+.L0:   beq     $19,.Lend
+
+       .align  3
+.Loop: subq    $19,4,$19
+
+       ldq     $5,8($17)
+       addq    $4,$0,$4
+       ldq     $6,8($18)
+       cmpult  $4,$0,$1
+       subq    $3,$4,$4
+       cmpult  $3,$4,$0
+       stq     $4,0($16)
+       or      $0,$1,$0
+
+       ldq     $3,16($17)
+       addq    $6,$0,$6
+       ldq     $4,16($18)
+       cmpult  $6,$0,$1
+       subq    $5,$6,$6
+       cmpult  $5,$6,$0
+       stq     $6,8($16)
+       or      $0,$1,$0
+
+       ldq     $5,24($17)
+       addq    $4,$0,$4
+       ldq     $6,24($18)
+       cmpult  $4,$0,$1
+       subq    $3,$4,$4
+       cmpult  $3,$4,$0
+       stq     $4,16($16)
+       or      $0,$1,$0
+
+       ldq     $3,32($17)
+       addq    $6,$0,$6
+       ldq     $4,32($18)
+       cmpult  $6,$0,$1
+       subq    $5,$6,$6
+       cmpult  $5,$6,$0
+       stq     $6,24($16)
+       or      $0,$1,$0
+
+       addq    $17,32,$17
+       addq    $18,32,$18
+       addq    $16,32,$16
+       bne     $19,.Loop
+
+.Lend: addq    $4,$0,$4
+       cmpult  $4,$0,$1
+       subq    $3,$4,$4
+       cmpult  $3,$4,$0
+       stq     $4,0($16)
+       or      $0,$1,$0
+       ret     $31,($26),1
+
+       .end    mpihelp_sub_n
+
+
diff --git a/mpi/alpha/udiv-qrnnd.S b/mpi/alpha/udiv-qrnnd.S
new file mode 100644 (file)
index 0000000..0079c3c
--- /dev/null
@@ -0,0 +1,161 @@
+/* Alpha 21064 __udiv_qrnnd
+ *
+ *      Copyright (C) 1992, 1994, 1995, 1998,
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+
+       .set noreorder
+       .set noat
+.text
+       .align  3
+       .globl  __udiv_qrnnd
+       .ent    __udiv_qrnnd
+__udiv_qrnnd:
+       .frame $30,0,$26,0
+       .prologue 0
+#define cnt    $2
+#define tmp    $3
+#define rem_ptr $16
+#define n1     $17
+#define n0     $18
+#define d      $19
+#define qb     $20
+
+       ldiq    cnt,16
+       blt     d,.Largedivisor
+
+.Loop1: cmplt  n0,0,tmp
+       addq    n1,n1,n1
+       bis     n1,tmp,n1
+       addq    n0,n0,n0
+       cmpule  d,n1,qb
+       subq    n1,d,tmp
+       cmovne  qb,tmp,n1
+       bis     n0,qb,n0
+       cmplt   n0,0,tmp
+       addq    n1,n1,n1
+       bis     n1,tmp,n1
+       addq    n0,n0,n0
+       cmpule  d,n1,qb
+       subq    n1,d,tmp
+       cmovne  qb,tmp,n1
+       bis     n0,qb,n0
+       cmplt   n0,0,tmp
+       addq    n1,n1,n1
+       bis     n1,tmp,n1
+       addq    n0,n0,n0
+       cmpule  d,n1,qb
+       subq    n1,d,tmp
+       cmovne  qb,tmp,n1
+       bis     n0,qb,n0
+       cmplt   n0,0,tmp
+       addq    n1,n1,n1
+       bis     n1,tmp,n1
+       addq    n0,n0,n0
+       cmpule  d,n1,qb
+       subq    n1,d,tmp
+       cmovne  qb,tmp,n1
+       bis     n0,qb,n0
+       subq    cnt,1,cnt
+       bgt     cnt,.Loop1
+       stq     n1,0(rem_ptr)
+       bis     $31,n0,$0
+       ret     $31,($26),1
+
+.Largedivisor:
+       and     n0,1,$4
+
+       srl     n0,1,n0
+       sll     n1,63,tmp
+       or      tmp,n0,n0
+       srl     n1,1,n1
+
+       and     d,1,$6
+       srl     d,1,$5
+       addq    $5,$6,$5
+
+.Loop2: cmplt  n0,0,tmp
+       addq    n1,n1,n1
+       bis     n1,tmp,n1
+       addq    n0,n0,n0
+       cmpule  $5,n1,qb
+       subq    n1,$5,tmp
+       cmovne  qb,tmp,n1
+       bis     n0,qb,n0
+       cmplt   n0,0,tmp
+       addq    n1,n1,n1
+       bis     n1,tmp,n1
+       addq    n0,n0,n0
+       cmpule  $5,n1,qb
+       subq    n1,$5,tmp
+       cmovne  qb,tmp,n1
+       bis     n0,qb,n0
+       cmplt   n0,0,tmp
+       addq    n1,n1,n1
+       bis     n1,tmp,n1
+       addq    n0,n0,n0
+       cmpule  $5,n1,qb
+       subq    n1,$5,tmp
+       cmovne  qb,tmp,n1
+       bis     n0,qb,n0
+       cmplt   n0,0,tmp
+       addq    n1,n1,n1
+       bis     n1,tmp,n1
+       addq    n0,n0,n0
+       cmpule  $5,n1,qb
+       subq    n1,$5,tmp
+       cmovne  qb,tmp,n1
+       bis     n0,qb,n0
+       subq    cnt,1,cnt
+       bgt     cnt,.Loop2
+
+       addq    n1,n1,n1
+       addq    $4,n1,n1
+       bne     $6,.LOdd
+       stq     n1,0(rem_ptr)
+       bis     $31,n0,$0
+       ret     $31,($26),1
+
+.LOdd:
+       /* q' in n0. r' in n1 */
+       addq    n1,n0,n1
+       cmpult  n1,n0,tmp       # tmp := carry from addq
+       beq     tmp,.LLp6
+       addq    n0,1,n0
+       subq    n1,d,n1
+.LLp6: cmpult  n1,d,tmp
+       bne     tmp,.LLp7
+       addq    n0,1,n0
+       subq    n1,d,n1
+.LLp7:
+       stq     n1,0(rem_ptr)
+       bis     $31,n0,$0
+       ret     $31,($26),1
+
+       .end    __udiv_qrnnd
diff --git a/mpi/config.links b/mpi/config.links
new file mode 100644 (file)
index 0000000..cb89513
--- /dev/null
@@ -0,0 +1,310 @@
+# config.links - helper for ../configure
+# Copyright (C) 1998, 1999, 2000, 2001 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
+
+# sourced by ../configure to get the list of files to link
+# this should set $mpi_ln_list.
+# Note: this is called from the above directory.
+
+
+mpi_extra_modules=
+mpi_sflags=
+
+test -d ./mpi || mkdir ./mpi
+
+echo '/* created by config.links - do not edit */' >./mpi/asm-syntax.h
+
+if test "$try_asm_modules" = "yes" ; then
+case "${target}" in
+    i[3467]86*-*-freebsd*-elf  | \
+    i[3467]86*-*-freebsd[3-9]* | \
+    i[3467]86*-*-freebsdelf*   | \
+    i[3467]86*-*-netbsd* )
+       echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h     >>./mpi/asm-syntax.h
+       path="i386"
+       ;;
+    i586*-*-freebsd*-elf  | \
+    i586*-*-freebsd[3-9]* | \
+    i586*-*-freebsdelf*   | \
+    i586*-*-netbsd*         | \
+    pentium-*-netbsd*       | \
+    pentiumpro-*-netbsd*)
+       echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h     >>./mpi/asm-syntax.h
+       path="i586 i386"
+       ;;
+    i[34]86*-*-bsdi4*)
+       echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h   >>./mpi/asm-syntax.h
+       path="i386"
+       ;;
+    i[3467]86*-*-linuxaout*  | \
+    i[3467]86*-*-linuxoldld* | \
+    i[3467]86*-*-*bsd*)
+       echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h
+       echo '#define X86_BROKEN_ALIGN' >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h      >>./mpi/asm-syntax.h
+       path="i386"
+       ;;
+    i586*-*-linuxaout*  | \
+    i586*-*-linuxoldld* | \
+    i586*-*-*bsd*)
+       echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h
+       echo '#define X86_BROKEN_ALIGN' >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h      >>./mpi/asm-syntax.h
+       path="i586 i386"
+       ;;
+    i[3467]86*-msdosdjgpp*)
+       echo '#define BSD_SYNTAX'        >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h   >>./mpi/asm-syntax.h
+       path="i386"
+       ;;
+    i586*-msdosdjgpp*)
+       echo '#define BSD_SYNTAX'        >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h   >>./mpi/asm-syntax.h
+       path="i586 i386"
+       ;;
+    i[3467]86*-*-*)
+       echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h      >>./mpi/asm-syntax.h
+       path="i386"
+       ;;
+    i586*-*-*  | \
+    pentium-*-*   | \
+    pentiumpro-*-*)
+       echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/i386/syntax.h      >>./mpi/asm-syntax.h
+       path="i586 i386"
+       ;;
+    alpha*-*-*)
+       echo '/* configured for alpha */' >>./mpi/asm-syntax.h
+       path="alpha"
+       mpi_extra_modules="udiv-qrnnd"
+       ;;
+    hppa7000*-*-*)
+       echo '/* configured for HPPA (pa7000) */' >>./mpi/asm-syntax.h
+       path="hppa1.1 hppa"
+       mpi_extra_modules="udiv-qrnnd"
+       ;;
+    hppa1.0*-*-*)
+       echo '/* configured for HPPA 1.0 */' >>./mpi/asm-syntax.h
+       path="hppa"
+       mpi_extra_modules="udiv-qrnnd"
+       ;;
+    hppa*-*-*) # assume pa7100
+       echo '/* configured for HPPA (pa7100) */' >>./mpi/asm-syntax.h
+       path="pa7100 hppa1.1 hppa"
+       mpi_extra_modules="udiv-qrnnd"
+       ;;
+    sparc64-*-linux-gnu)
+       # An extra rule because we have an report for this one only.
+       # Should be compared against the next GMP version
+       echo '/* configured for sparc64-*-linux-gnu */' >>./mpi/asm-syntax.h
+       path="sparc32v8 sparc32"
+       mpi_extra_modules="udiv"
+       ;;
+    sparc64-sun-solaris2*)
+       # Got a report that udiv is missing, so we try this one
+       echo '/* configured for sparc64-sun-solaris2 */' >>./mpi/asm-syntax.h
+       path="sparc32v8 sparc32"
+       mpi_extra_modules="udiv"
+        ;;
+    sparc9*-*-*     | \
+    sparc64*-*-*    | \
+    ultrasparc*-*-* )
+       echo '/* configured for sparc9 or higher */' >>./mpi/asm-syntax.h
+       path="sparc32v8 sparc32"
+       ;;
+    sparc8*-*-*     | \
+    microsparc*-*-*)
+       echo '/* configured for sparc8 */' >>./mpi/asm-syntax.h
+       path="sparc32v8 sparc32"
+       ;;
+    supersparc*-*-*)
+       echo '/* configured for supersparc */' >>./mpi/asm-syntax.h
+       path="supersparc sparc32v8 sparc32"
+       mpi_extra_modules="udiv"
+       ;;
+    sparc*-*-*)
+       echo '/* configured for sparc */' >>./mpi/asm-syntax.h
+       path="sparc32"
+       mpi_extra_modules="udiv"
+       ;;
+    mips[34]*-*-* | \
+    mips*-*-irix6*)
+       echo '/* configured for MIPS3 */' >>./mpi/asm-syntax.h
+       path="mips3"
+       ;;
+    mips*-*-*)
+       echo '/* configured for MIPS2 */' >>./mpi/asm-syntax.h
+       path="mips2"
+       ;;
+
+    # Motorola 68k configurations.  Let m68k mean 68020-68040.
+    # mc68000 or mc68060 configurations need to be specified explicitly
+    m680[234]0*-*-linuxaout* | \
+    m68k*-*-linuxaout*)
+       echo '#define MIT_SYNTAX'           >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/m68k/syntax.h      >>./mpi/asm-syntax.h
+       path="m68k/mc68020 m68k"
+       ;;
+    m68060*-*-linuxaout*)
+       echo '#define MIT_SYNTAX'           >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/m68k/syntax.h      >>./mpi/asm-syntax.h
+       path="m68k"
+       ;;
+    m680[234]0*-*-linux* | \
+    m68k*-*-linux*)
+       echo '#define ELF_SYNTAX'           >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/m68k/syntax.h      >>./mpi/asm-syntax.h
+       ;;
+    m68060*-*-linux*)
+       echo '#define ELF_SYNTAX'           >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/m68k/syntax.h      >>./mpi/asm-syntax.h
+       path="m68k"
+       ;;
+    m68k-atari-mint)
+       echo '#define MIT_SYNTAX'           >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/m68k/syntax.h      >>./mpi/asm-syntax.h
+       path="m68k/mc68020 m68k"
+       ;;
+    m68000*-*-* | \
+    m68060*-*-*)
+       echo '#define MIT_SYNTAX'           >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/m68k/syntax.h      >>./mpi/asm-syntax.h
+       path="m68k/mc68000"
+       ;;
+    m680[234]0*-*-* | \
+    m68k*-*-*)
+       echo '#define MIT_SYNTAX'           >>./mpi/asm-syntax.h
+       cat  $srcdir/mpi/m68k/syntax.h      >>./mpi/asm-syntax.h
+       path="m68k/mc68020 m68k"
+       ;;
+
+    powerpc*-*-linux*)
+       echo '/* configured for powerpc/ELF */' >>./mpi/asm-syntax.h
+       echo '#define ELF_SYNTAX'               >>./mpi/asm-syntax.h
+       cat   $srcdir/mpi/powerpc32/syntax.h    >>./mpi/asm-syntax.h
+       path="powerpc32"
+       ;;
+
+    powerpc*-*-netbsd* | powerpc*-*-openbsd*)
+       echo '/* configured {Open,Net}BSD on powerpc */' >>./mpi/asm-syntax.h
+       echo '#define ELF_SYNTAX'                 >>./mpi/asm-syntax.h
+       cat   $srcdir/mpi/powerpc32/syntax.h     >>./mpi/asm-syntax.h
+       mpi_sflags="-Wa,-mppc"
+       path="powerpc32"
+       ;;
+
+    rs6000-*-aix[456789]*    | \
+    rs6000-*-aix3.2.[456789])
+       mpi_sflags="-Wa,-mpwr"
+       path="power"
+       mpi_extra_modules="udiv-w-sdiv"
+       ;;
+    rs6000-*-* | \
+    power-*-*  | \
+    power2-*-*)
+       mpi_sflags="-Wa,-mppc"
+       path="power"
+       mpi_extra_modules="udiv-w-sdiv"
+       ;;
+    powerpc-ibm-aix4.2.* )
+       # I am not sure about this one but a machine identified by
+       # powerpc-ibm-aix4.2.1.0 cannot use the powerpc32 code.
+       mpi_sflags="-Wa,-mpwr"
+       path="power"
+       mpi_extra_modules="udiv-w-sdiv"
+       ;;
+    ppc601-*-*)
+       mpi_sflags="-Wa,-mppc"
+       path="power powerpc32"
+       ;;
+    ppc60[234]*-*-* | \
+    powerpc*-*-*)
+       mpi_sflags="-Wa,-mppc"
+       path="powerpc32"
+       ;;
+    ppc620-*-*     | \
+    powerpc64*-*-*)
+       mpi_sflags="-Wa,-mppc"
+       path="powerpc64"
+       ;;
+
+    *)
+       echo '/* No assembler modules configured */' >>./mpi/asm-syntax.h
+       path=""
+       ;;
+esac
+else
+    echo '/* Assembler modules disabled on request */' >>./mpi/asm-syntax.h
+    path=""
+fi
+
+
+# Make sysdep.h
+echo '/* created by config.links - do not edit */' >./mpi/sysdep.h
+if test x$ac_cv_sys_symbol_underscore = xyes; then
+    cat <<EOF >>./mpi/sysdep.h
+#if __STDC__
+#define C_SYMBOL_NAME(name) _##name
+#else
+#define C_SYMBOL_NAME(name) _/**/name
+#endif
+EOF
+else
+    cat <<EOF >>./mpi/sysdep.h
+#define C_SYMBOL_NAME(name) name
+EOF
+fi
+
+
+# fixme: grep these modules from Makefile.in
+mpi_ln_modules="${mpi_extra_modules} mpih-add1 mpih-mul1 mpih-mul2 mpih-mul3 \
+                mpih-lshift mpih-rshift mpih-sub1"
+
+mpi_ln_objects=
+mpi_ln_list=
+
+# try to get file to link from the assembler subdirectory and
+# if this fails get it from the generic subdirectory.
+path="$path generic"
+for fn in $mpi_ln_modules ; do
+    mpi_ln_objects="$mpi_ln_objects $fn.o"
+    for dir in $path ; do
+       rm -f $srcdir/mpi/$fn.[Sc]
+       if test -f $srcdir/mpi/$dir/$fn.S ; then
+            mpi_ln_list="$mpi_ln_list mpi/$fn.S:mpi/$dir/$fn.S"
+           break;
+       elif test -f $srcdir/mpi/$dir/$fn.c ; then
+            mpi_ln_list="$mpi_ln_list mpi/$fn.c:mpi/$dir/$fn.c"
+           break;
+       fi
+    done
+done
+
+# Same thing for the file which defines the limb size
+path="$path generic"
+for dir in $path ; do
+    rm -f $srcdir/mpi/mpi-asm-defs.h
+    if test -f $srcdir/mpi/$dir/mpi-asm-defs.h ; then
+        mpi_ln_list="$mpi_ln_list mpi/mpi-asm-defs.h:mpi/$dir/mpi-asm-defs.h"
+        break;
+    fi
+done
diff --git a/mpi/g10m.c b/mpi/g10m.c
new file mode 100644 (file)
index 0000000..ea6696d
--- /dev/null
@@ -0,0 +1,95 @@
+/* g10m.c  -  Wrapper for MPI
+ * 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
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi.h"
+#include "util.h"
+
+/* FIXME: The modules should use functions from libgcrypt */
+
+const char *g10m_revision_string(int dummy) { return "$Revision$"; }
+
+MPI
+g10m_new( unsigned nbits )
+{
+    return mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB );
+}
+
+MPI
+g10m_new_secure( unsigned nbits )
+{
+    return mpi_alloc_secure( (nbits+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB );
+}
+
+void
+g10m_release( MPI a )
+{
+    mpi_free(a);
+}
+
+void
+g10m_resize( MPI a, unsigned nbits )
+{
+    mpi_resize( a, (nbits+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB );
+}
+
+MPI  g10m_copy( MPI a )           { return mpi_copy( a );   }
+void g10m_swap( MPI a, MPI b)     { mpi_swap( a, b );       }
+void g10m_set( MPI w, MPI u)      { mpi_set( w, u );        }
+void g10m_set_ui( MPI w, ulong u ) { mpi_set_ui( w, u ); }
+
+int  g10m_cmp( MPI u, MPI v )      { return mpi_cmp( u, v ); }
+int  g10m_cmp_ui( MPI u, ulong v )  { return mpi_cmp_ui( u, v ); }
+
+void g10m_add(MPI w, MPI u, MPI v)       { mpi_add( w, u, v ); }
+void g10m_add_ui(MPI w, MPI u, ulong v )  { mpi_add_ui( w, u, v ); }
+void g10m_sub( MPI w, MPI u, MPI v)      { mpi_sub( w, u, v ); }
+void g10m_sub_ui(MPI w, MPI u, ulong v )  { mpi_sub_ui( w, u, v ); }
+
+void g10m_mul( MPI w, MPI u, MPI v)         { mpi_mul( w, u, v ); }
+void g10m_mulm( MPI w, MPI u, MPI v, MPI m)  { mpi_mulm( w, u, v, m ); }
+void g10m_mul_2exp( MPI w, MPI u, ulong cnt) { mpi_mul_2exp( w, u, cnt ); }
+void g10m_mul_ui(MPI w, MPI u, ulong v )     { mpi_mul_ui( w, u, v ); }
+
+void g10m_fdiv_q( MPI q, MPI d, MPI r )      { mpi_fdiv_q( q, d, r ); }
+
+void g10m_powm( MPI r, MPI b, MPI e, MPI m)  { mpi_powm( r, b, e, m ); }
+
+int  g10m_gcd( MPI g, MPI a, MPI b )   { return mpi_gcd( g, a, b ); }
+int  g10m_invm( MPI x, MPI u, MPI v )  { mpi_invm( x, u, v ); return 0; }
+
+unsigned g10m_get_nbits( MPI a )   { return mpi_get_nbits( a ); }
+
+unsigned
+g10m_get_size( MPI a )
+{
+    return mpi_get_nlimbs( a ) * BITS_PER_MPI_LIMB;
+}
+
+
+void
+g10m_set_buffer( MPI a, const char *buffer, unsigned nbytes, int sign )
+{
+    mpi_set_buffer( a, buffer, nbytes, sign );
+}
+
+
diff --git a/mpi/generic/distfiles b/mpi/generic/distfiles
new file mode 100644 (file)
index 0000000..649e829
--- /dev/null
@@ -0,0 +1,10 @@
+mpih-add1.c
+mpih-mul1.c
+mpih-mul2.c
+mpih-mul3.c
+mpih-lshift.c
+mpih-rshift.c
+mpih-sub1.c
+udiv-w-sdiv.c
+mpi-asm-defs.h
+
diff --git a/mpi/generic/mpi-asm-defs.h b/mpi/generic/mpi-asm-defs.h
new file mode 100644 (file)
index 0000000..13424e2
--- /dev/null
@@ -0,0 +1,10 @@
+/* This file defines some basic constants for the MPI machinery.  We
+ * need to define the types on a per-CPU basis, so it is done with
+ * this file here.  */
+#define BYTES_PER_MPI_LIMB  (SIZEOF_UNSIGNED_LONG)
+
+
+
+
+
+
diff --git a/mpi/generic/mpih-add1.c b/mpi/generic/mpih-add1.c
new file mode 100644 (file)
index 0000000..d9c3cbb
--- /dev/null
@@ -0,0 +1,65 @@
+/* mpihelp-add_1.c  -  MPI helper functions
+ * Copyright (C) 1994, 1996, 1997, 1998, 
+ *               2000 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi-internal.h"
+#include "longlong.h"
+
+mpi_limb_t
+mpihelp_add_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
+              mpi_ptr_t s2_ptr, mpi_size_t size)
+{
+    mpi_limb_t x, y, cy;
+    mpi_size_t j;
+
+    /* The loop counter and index J goes from -SIZE to -1.  This way
+       the loop becomes faster.  */
+    j = -size;
+
+    /* Offset the base pointers to compensate for the negative indices. */
+    s1_ptr -= j;
+    s2_ptr -= j;
+    res_ptr -= j;
+
+    cy = 0;
+    do {
+       y = s2_ptr[j];
+       x = s1_ptr[j];
+       y += cy;                  /* add previous carry to one addend */
+       cy = y < cy;              /* get out carry from that addition */
+       y += x;                   /* add other addend */
+       cy += y < x;              /* get out carry from that add, combine */
+       res_ptr[j] = y;
+    } while( ++j );
+
+    return cy;
+}
+
diff --git a/mpi/generic/mpih-lshift.c b/mpi/generic/mpih-lshift.c
new file mode 100644 (file)
index 0000000..fba8c05
--- /dev/null
@@ -0,0 +1,69 @@
+/* mpihelp-lshift.c  - MPI helper functions
+ * Copyright (C) 1994, 1996, 1998, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi-internal.h"
+
+/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left
+ * and store the USIZE least significant digits of the result at WP.
+ * Return the bits shifted out from the most significant digit.
+ *
+ * Argument constraints:
+ * 1. 0 < CNT < BITS_PER_MP_LIMB
+ * 2. If the result is to be written over the input, WP must be >= UP.
+ */
+
+mpi_limb_t
+mpihelp_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
+                                           unsigned int cnt)
+{
+    mpi_limb_t high_limb, low_limb;
+    unsigned sh_1, sh_2;
+    mpi_size_t i;
+    mpi_limb_t retval;
+
+    sh_1 = cnt;
+    wp += 1;
+    sh_2 = BITS_PER_MPI_LIMB - sh_1;
+    i = usize - 1;
+    low_limb = up[i];
+    retval = low_limb >> sh_2;
+    high_limb = low_limb;
+    while( --i >= 0 ) {
+       low_limb = up[i];
+       wp[i] = (high_limb << sh_1) | (low_limb >> sh_2);
+       high_limb = low_limb;
+    }
+    wp[i] = high_limb << sh_1;
+
+    return retval;
+}
+
+
diff --git a/mpi/generic/mpih-mul1.c b/mpi/generic/mpih-mul1.c
new file mode 100644 (file)
index 0000000..83a81ad
--- /dev/null
@@ -0,0 +1,61 @@
+/* mpihelp-mul_1.c  -  MPI helper functions
+ * Copyright (C) 1994, 1996, 1997, 1998, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi-internal.h"
+#include "longlong.h"
+
+mpi_limb_t
+mpihelp_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
+                                                   mpi_limb_t s2_limb)
+{
+    mpi_limb_t cy_limb;
+    mpi_size_t j;
+    mpi_limb_t prod_high, prod_low;
+
+    /* The loop counter and index J goes from -S1_SIZE to -1.  This way
+     * the loop becomes faster.  */
+    j = -s1_size;
+
+    /* Offset the base pointers to compensate for the negative indices.  */
+    s1_ptr -= j;
+    res_ptr -= j;
+
+    cy_limb = 0;
+    do {
+       umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb );
+       prod_low += cy_limb;
+       cy_limb = (prod_low < cy_limb?1:0) + prod_high;
+       res_ptr[j] = prod_low;
+    } while( ++j );
+
+    return cy_limb;
+}
+
diff --git a/mpi/generic/mpih-mul2.c b/mpi/generic/mpih-mul2.c
new file mode 100644 (file)
index 0000000..ff8f998
--- /dev/null
@@ -0,0 +1,66 @@
+/* mpihelp-mul_2.c  -  MPI helper functions
+ * Copyright (C) 1994, 1996, 1997, 1998, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi-internal.h"
+#include "longlong.h"
+
+
+mpi_limb_t
+mpihelp_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
+                 mpi_size_t s1_size, mpi_limb_t s2_limb)
+{
+    mpi_limb_t cy_limb;
+    mpi_size_t j;
+    mpi_limb_t prod_high, prod_low;
+    mpi_limb_t x;
+
+    /* The loop counter and index J goes from -SIZE to -1.  This way
+     * the loop becomes faster.  */
+    j = -s1_size;
+    res_ptr -= j;
+    s1_ptr -= j;
+
+    cy_limb = 0;
+    do {
+       umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb );
+
+       prod_low += cy_limb;
+       cy_limb = (prod_low < cy_limb?1:0) + prod_high;
+
+       x = res_ptr[j];
+       prod_low = x + prod_low;
+       cy_limb += prod_low < x?1:0;
+       res_ptr[j] = prod_low;
+    } while ( ++j );
+    return cy_limb;
+}
+
+
diff --git a/mpi/generic/mpih-mul3.c b/mpi/generic/mpih-mul3.c
new file mode 100644 (file)
index 0000000..80eedcc
--- /dev/null
@@ -0,0 +1,67 @@
+/* mpihelp-mul_3.c  -  MPI helper functions
+ * Copyright (C) 1994, 1996, 1997, 1998, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi-internal.h"
+#include "longlong.h"
+
+
+mpi_limb_t
+mpihelp_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
+                 mpi_size_t s1_size, mpi_limb_t s2_limb)
+{
+    mpi_limb_t cy_limb;
+    mpi_size_t j;
+    mpi_limb_t prod_high, prod_low;
+    mpi_limb_t x;
+
+    /* The loop counter and index J goes from -SIZE to -1.  This way
+     * the loop becomes faster.  */
+    j = -s1_size;
+    res_ptr -= j;
+    s1_ptr -= j;
+
+    cy_limb = 0;
+    do {
+       umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb);
+
+       prod_low += cy_limb;
+       cy_limb = (prod_low < cy_limb?1:0) + prod_high;
+
+       x = res_ptr[j];
+       prod_low = x - prod_low;
+       cy_limb += prod_low > x?1:0;
+       res_ptr[j] = prod_low;
+    } while( ++j );
+
+    return cy_limb;
+}
+
+
diff --git a/mpi/generic/mpih-rshift.c b/mpi/generic/mpih-rshift.c
new file mode 100644 (file)
index 0000000..be73adf
--- /dev/null
@@ -0,0 +1,68 @@
+/* mpih-rshift.c  -  MPI helper functions
+ * Copyright (C) 1994, 1996, 1998, 1999,
+ *               2000, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi-internal.h"
+
+
+/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right
+ * and store the USIZE least significant limbs of the result at WP.
+ * The bits shifted out to the right are returned.
+ *
+ * Argument constraints:
+ * 1. 0 < CNT < BITS_PER_MP_LIMB
+ * 2. If the result is to be written over the input, WP must be <= UP.
+ */
+
+mpi_limb_t
+mpihelp_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt)
+{
+    mpi_limb_t high_limb, low_limb;
+    unsigned sh_1, sh_2;
+    mpi_size_t i;
+    mpi_limb_t retval;
+
+    sh_1 = cnt;
+    wp -= 1;
+    sh_2 = BITS_PER_MPI_LIMB - sh_1;
+    high_limb = up[0];
+    retval = high_limb << sh_2;
+    low_limb = high_limb;
+    for( i=1; i < usize; i++) {
+       high_limb = up[i];
+       wp[i] = (low_limb >> sh_1) | (high_limb << sh_2);
+       low_limb = high_limb;
+    }
+    wp[i] = low_limb >> sh_1;
+
+    return retval;
+}
+
diff --git a/mpi/generic/mpih-sub1.c b/mpi/generic/mpih-sub1.c
new file mode 100644 (file)
index 0000000..c618fee
--- /dev/null
@@ -0,0 +1,65 @@
+/* mpihelp-add_2.c  -  MPI helper functions
+ * Copyright (C) 1994, 1996, 1997, 1998, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi-internal.h"
+#include "longlong.h"
+
+mpi_limb_t
+mpihelp_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
+                                 mpi_ptr_t s2_ptr, mpi_size_t size)
+{
+    mpi_limb_t x, y, cy;
+    mpi_size_t j;
+
+    /* The loop counter and index J goes from -SIZE to -1.  This way
+       the loop becomes faster.  */
+    j = -size;
+
+    /* Offset the base pointers to compensate for the negative indices.  */
+    s1_ptr -= j;
+    s2_ptr -= j;
+    res_ptr -= j;
+
+    cy = 0;
+    do {
+       y = s2_ptr[j];
+       x = s1_ptr[j];
+       y += cy;                  /* add previous carry to subtrahend */
+       cy = y < cy;              /* get out carry from that addition */
+       y = x - y;                /* main subtract */
+       cy += y > x;              /* get out carry from the subtract, combine */
+       res_ptr[j] = y;
+    } while( ++j );
+
+    return cy;
+}
+
+
diff --git a/mpi/generic/udiv-w-sdiv.c b/mpi/generic/udiv-w-sdiv.c
new file mode 100644 (file)
index 0000000..dd02850
--- /dev/null
@@ -0,0 +1,133 @@
+/* mpihelp_udiv_w_sdiv -- implement udiv_qrnnd on machines with only signed
+ *                       division.
+ * Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
+ * Contributed by Peter L. Montgomery.
+ *
+ * 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
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi-internal.h"
+#include "longlong.h"
+
+
+#if 0  /* not yet ported to MPI */
+
+mpi_limb_t
+mpihelp_udiv_w_sdiv( mpi_limp_t *rp,
+                    mpi_limp_t *a1,
+                    mpi_limp_t *a0,
+                    mpi_limp_t *d   )
+{
+  mp_limb_t q, r;
+  mp_limb_t c0, c1, b1;
+
+  if ((mpi_limb_signed_t) d >= 0)
+    {
+      if (a1 < d - a1 - (a0 >> (BITS_PER_MP_LIMB - 1)))
+       {
+         /* dividend, divisor, and quotient are nonnegative */
+         sdiv_qrnnd (q, r, a1, a0, d);
+       }
+      else
+       {
+         /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */
+         sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (BITS_PER_MP_LIMB - 1));
+         /* Divide (c1*2^32 + c0) by d */
+         sdiv_qrnnd (q, r, c1, c0, d);
+         /* Add 2^31 to quotient */
+         q += (mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1);
+       }
+    }
+  else
+    {
+      b1 = d >> 1;                     /* d/2, between 2^30 and 2^31 - 1 */
+      c1 = a1 >> 1;                    /* A/2 */
+      c0 = (a1 << (BITS_PER_MP_LIMB - 1)) + (a0 >> 1);
+
+      if (a1 < b1)                     /* A < 2^32*b1, so A/2 < 2^31*b1 */
+       {
+         sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */
+
+         r = 2*r + (a0 & 1);           /* Remainder from A/(2*b1) */
+         if ((d & 1) != 0)
+           {
+             if (r >= q)
+               r = r - q;
+             else if (q - r <= d)
+               {
+                 r = r - q + d;
+                 q--;
+               }
+             else
+               {
+                 r = r - q + 2*d;
+                 q -= 2;
+               }
+           }
+       }
+      else if (c1 < b1)                /* So 2^31 <= (A/2)/b1 < 2^32 */
+       {
+         c1 = (b1 - 1) - c1;
+         c0 = ~c0;                     /* logical NOT */
+
+         sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */
+
+         q = ~q;                       /* (A/2)/b1 */
+         r = (b1 - 1) - r;
+
+         r = 2*r + (a0 & 1);           /* A/(2*b1) */
+
+         if ((d & 1) != 0)
+           {
+             if (r >= q)
+               r = r - q;
+             else if (q - r <= d)
+               {
+                 r = r - q + d;
+                 q--;
+               }
+             else
+               {
+                 r = r - q + 2*d;
+                 q -= 2;
+               }
+           }
+       }
+      else                             /* Implies c1 = b1 */
+       {                               /* Hence a1 = d - 1 = 2*b1 - 1 */
+         if (a0 >= -d)
+           {
+             q = -1;
+             r = a0 + d;
+           }
+         else
+           {
+             q = -2;
+             r = a0 + 2*d;
+           }
+       }
+    }
+
+  *rp = r;
+  return q;
+}
+
+#endif
+
diff --git a/mpi/hppa/README b/mpi/hppa/README
new file mode 100644 (file)
index 0000000..5a2d5fd
--- /dev/null
@@ -0,0 +1,84 @@
+This directory contains mpn functions for various HP PA-RISC chips.  Code
+that runs faster on the PA7100 and later implementations, is in the pa7100
+directory.
+
+RELEVANT OPTIMIZATION ISSUES
+
+  Load and Store timing
+
+On the PA7000 no memory instructions can issue the two cycles after a store.
+For the PA7100, this is reduced to one cycle.
+
+The PA7100 has a lookup-free cache, so it helps to schedule loads and the
+dependent instruction really far from each other.
+
+STATUS
+
+1. mpn_mul_1 could be improved to 6.5 cycles/limb on the PA7100, using the
+   instructions bwlow (but some sw pipelining is needed to avoid the
+   xmpyu-fstds delay):
+
+       fldds   s1_ptr
+
+       xmpyu
+       fstds   N(%r30)
+       xmpyu
+       fstds   N(%r30)
+
+       ldws    N(%r30)
+       ldws    N(%r30)
+       ldws    N(%r30)
+       ldws    N(%r30)
+
+       addc
+       stws    res_ptr
+       addc
+       stws    res_ptr
+
+       addib   Loop
+
+2. mpn_addmul_1 could be improved from the current 10 to 7.5 cycles/limb
+   (asymptotically) on the PA7100, using the instructions below.  With proper
+   sw pipelining and the unrolling level below, the speed becomes 8
+   cycles/limb.
+
+       fldds   s1_ptr
+       fldds   s1_ptr
+
+       xmpyu
+       fstds   N(%r30)
+       xmpyu
+       fstds   N(%r30)
+       xmpyu
+       fstds   N(%r30)
+       xmpyu
+       fstds   N(%r30)
+
+       ldws    N(%r30)
+       ldws    N(%r30)
+       ldws    N(%r30)
+       ldws    N(%r30)
+       ldws    N(%r30)
+       ldws    N(%r30)
+       ldws    N(%r30)
+       ldws    N(%r30)
+       addc
+       addc
+       addc
+       addc
+       addc    %r0,%r0,cy-limb
+
+       ldws    res_ptr
+       ldws    res_ptr
+       ldws    res_ptr
+       ldws    res_ptr
+       add
+       stws    res_ptr
+       addc
+       stws    res_ptr
+       addc
+       stws    res_ptr
+       addc
+       stws    res_ptr
+
+       addib
diff --git a/mpi/hppa/distfiles b/mpi/hppa/distfiles
new file mode 100644 (file)
index 0000000..7f24205
--- /dev/null
@@ -0,0 +1,7 @@
+README
+udiv-qrnnd.S
+mpih-add1.S
+mpih-sub1.S
+mpih-lshift.S
+mpih-rshift.S
+
diff --git a/mpi/hppa/mpih-add1.S b/mpi/hppa/mpih-add1.S
new file mode 100644 (file)
index 0000000..7a2a2c2
--- /dev/null
@@ -0,0 +1,72 @@
+/* hppa add_n -- Add two limb vectors of the same length > 0 and store
+ *              sum in a third limb vector.
+ *
+ *      Copyright (C) 1992, 1994, 1998,
+ *                    2001 Fee 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+
+/*******************
+ *  mpi_limb_t
+ *  mpihelp_add_n( mpi_ptr_t res_ptr,  (gr26)
+ *                mpi_ptr_t s1_ptr,    (gr25)
+ *                mpi_ptr_t s2_ptr,    (gr24)
+ *                mpi_size_t size)     (gr23)
+ *
+ * One might want to unroll this as for other processors, but it turns
+ * out that the data cache contention after a store makes such
+ * unrolling useless.  We can't come under 5 cycles/limb anyway.
+ */
+
+       .code
+       .export         mpihelp_add_n
+       .label          mpihelp_add_n
+       .proc
+       .callinfo       frame=0,no_calls
+       .entry
+
+       ldws,ma         4(0,%r25),%r20
+       ldws,ma         4(0,%r24),%r19
+
+       addib,=         -1,%r23,L$end   ; check for (SIZE == 1)
+        add            %r20,%r19,%r28  ; add first limbs ignoring cy
+
+       .label L$loop
+       ldws,ma         4(0,%r25),%r20
+       ldws,ma         4(0,%r24),%r19
+       stws,ma         %r28,4(0,%r26)
+       addib,<>        -1,%r23,L$loop
+        addc           %r20,%r19,%r28
+
+       .label L$end
+       stws            %r28,0(0,%r26)
+       bv              0(%r2)
+        addc           %r0,%r0,%r28
+
+       .exit
+       .procend
diff --git a/mpi/hppa/mpih-lshift.S b/mpi/hppa/mpih-lshift.S
new file mode 100644 (file)
index 0000000..6a8b2c4
--- /dev/null
@@ -0,0 +1,77 @@
+/* hppa   lshift
+ *
+ *      Copyright (C) 1992, 1994, 1998
+ *                    2001 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
+ */
+
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_lshift( mpi_ptr_t wp,       (gr26)
+ *                mpi_ptr_t up,        (gr25)
+ *                mpi_size_t usize,    (gr24)
+ *                unsigned cnt)        (gr23)
+ */
+
+       .code
+       .export         mpihelp_lshift
+       .label          mpihelp_lshift
+       .proc
+       .callinfo       frame=64,no_calls
+       .entry
+
+       sh2add          %r24,%r25,%r25
+       sh2add          %r24,%r26,%r26
+       ldws,mb         -4(0,%r25),%r22
+       subi            32,%r23,%r1
+       mtsar           %r1
+       addib,=         -1,%r24,L$0004
+       vshd            %r0,%r22,%r28           ; compute carry out limb
+       ldws,mb         -4(0,%r25),%r29
+       addib,=         -1,%r24,L$0002
+       vshd            %r22,%r29,%r20
+
+       .label  L$loop
+       ldws,mb         -4(0,%r25),%r22
+       stws,mb         %r20,-4(0,%r26)
+       addib,=         -1,%r24,L$0003
+       vshd            %r29,%r22,%r20
+       ldws,mb         -4(0,%r25),%r29
+       stws,mb         %r20,-4(0,%r26)
+       addib,<>        -1,%r24,L$loop
+       vshd            %r22,%r29,%r20
+
+       .label  L$0002
+       stws,mb         %r20,-4(0,%r26)
+       vshd            %r29,%r0,%r20
+       bv              0(%r2)
+       stw             %r20,-4(0,%r26)
+       .label  L$0003
+       stws,mb         %r20,-4(0,%r26)
+       .label  L$0004
+       vshd            %r22,%r0,%r20
+       bv              0(%r2)
+       stw             %r20,-4(0,%r26)
+
+       .exit
+       .procend
+
+
+
diff --git a/mpi/hppa/mpih-rshift.S b/mpi/hppa/mpih-rshift.S
new file mode 100644 (file)
index 0000000..b1e6a67
--- /dev/null
@@ -0,0 +1,73 @@
+/* hppa   rshift
+ *
+ *      Copyright (C) 1992, 1994, 1998,
+ *                    2001 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
+ */
+
+
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_rshift( mpi_ptr_t wp,       (gr26)
+ *                mpi_ptr_t up,       (gr25)
+ *                mpi_size_t usize,   (gr24)
+ *                unsigned cnt)       (gr23)
+ */
+
+       .code
+       .export         mpihelp_rshift
+       .label          mpihelp_rshift
+       .proc
+       .callinfo       frame=64,no_calls
+       .entry
+
+       ldws,ma         4(0,%r25),%r22
+       mtsar           %r23
+       addib,=         -1,%r24,L$r004
+       vshd            %r22,%r0,%r28           ; compute carry out limb
+       ldws,ma         4(0,%r25),%r29
+       addib,=         -1,%r24,L$r002
+       vshd            %r29,%r22,%r20
+
+       .label  L$roop
+       ldws,ma         4(0,%r25),%r22
+       stws,ma         %r20,4(0,%r26)
+       addib,=         -1,%r24,L$r003
+       vshd            %r22,%r29,%r20
+       ldws,ma         4(0,%r25),%r29
+       stws,ma         %r20,4(0,%r26)
+       addib,<>        -1,%r24,L$roop
+       vshd            %r29,%r22,%r20
+
+       .label  L$r002
+       stws,ma         %r20,4(0,%r26)
+       vshd            %r0,%r29,%r20
+       bv              0(%r2)
+       stw             %r20,0(0,%r26)
+       .label  L$r003
+       stws,ma         %r20,4(0,%r26)
+       .label  L$r004
+       vshd            %r0,%r22,%r20
+       bv              0(%r2)
+       stw             %r20,0(0,%r26)
+
+       .exit
+       .procend
+
diff --git a/mpi/hppa/mpih-sub1.S b/mpi/hppa/mpih-sub1.S
new file mode 100644 (file)
index 0000000..870009e
--- /dev/null
@@ -0,0 +1,80 @@
+/* hppa   sub_n -- Sub two limb vectors of the same length > 0 and store
+ *                sum in a third limb vector.
+ *
+ *      Copyright (C) 1992, 1994, 1998, 
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+#include "sysdep.h"
+#include "asm-syntax.h"
+
+
+/*******************
+ *  mpi_limb_t
+ *  mpihelp_sub_n( mpi_ptr_t res_ptr,  (gr26)
+ *                mpi_ptr_t s1_ptr,    (gr25)
+ *                mpi_ptr_t s2_ptr,    (gr24)
+ *                mpi_size_t size)     (gr23)
+ *
+ * One might want to unroll this as for other processors, but it turns
+ * out that the data cache contention after a store makes such
+ * unrolling useless.  We can't come under 5 cycles/limb anyway.
+ */
+
+
+       .code
+       .export         mpihelp_sub_n
+       .label          mpihelp_sub_n
+       .proc
+       .callinfo       frame=0,no_calls
+       .entry
+
+       ldws,ma         4(0,%r25),%r20
+       ldws,ma         4(0,%r24),%r19
+
+       addib,=         -1,%r23,L$end   ; check for (SIZE == 1)
+        sub            %r20,%r19,%r28  ; subtract first limbs ignoring cy
+
+       .label  L$loop
+       ldws,ma         4(0,%r25),%r20
+       ldws,ma         4(0,%r24),%r19
+       stws,ma         %r28,4(0,%r26)
+       addib,<>        -1,%r23,L$loop
+        subb           %r20,%r19,%r28
+
+       .label  L$end
+       stws            %r28,0(0,%r26)
+       addc            %r0,%r0,%r28
+       bv              0(%r2)
+        subi           1,%r28,%r28
+
+       .exit
+       .procend
+
+
+
diff --git a/mpi/hppa/udiv-qrnnd.S b/mpi/hppa/udiv-qrnnd.S
new file mode 100644 (file)
index 0000000..c8a5241
--- /dev/null
@@ -0,0 +1,298 @@
+/* HP-PA  __udiv_qrnnd division support, used from longlong.h.
+ *       This version runs fast on pre-PA7000 CPUs.
+ *
+ *      Copyright (C) 1993, 1994, 1998, 2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+
+/* INPUT PARAMETERS
+ *   rem_ptr      gr26
+ *   n1           gr25
+ *   n0           gr24
+ *   d            gr23
+ *
+ *   The code size is a bit excessive. We could merge the last two ds;addc
+ *   sequences by simply moving the "bb,< Odd" instruction down.  The only
+ *   trouble is the FFFFFFFF code that would need some hacking.
+ */
+
+       .code
+       .export         __udiv_qrnnd
+       .label          __udiv_qrnnd
+       .proc
+       .callinfo       frame=0,no_calls
+       .entry
+
+       comb,<          %r23,0,L$largedivisor
+        sub            %r0,%r23,%r1            ; clear cy as side-effect
+       ds              %r0,%r1,%r0
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r23,%r25
+       addc            %r24,%r24,%r28
+       ds              %r25,%r23,%r25
+       comclr,>=       %r25,%r0,%r0
+       addl            %r25,%r23,%r25
+       stws            %r25,0(0,%r26)
+       bv              0(%r2)
+        addc           %r28,%r28,%r28
+
+       .label  L$largedivisor
+       extru           %r24,31,1,%r19          ; r19 = n0 & 1
+       bb,<            %r23,31,L$odd
+        extru          %r23,30,31,%r22         ; r22 = d >> 1
+       shd             %r25,%r24,1,%r24        ; r24 = new n0
+       extru           %r25,30,31,%r25         ; r25 = new n1
+       sub             %r0,%r22,%r21
+       ds              %r0,%r21,%r0
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       comclr,>=       %r25,%r0,%r0
+       addl            %r25,%r22,%r25
+       sh1addl         %r25,%r19,%r25
+       stws            %r25,0(0,%r26)
+       bv              0(%r2)
+        addc           %r24,%r24,%r28
+
+       .label  L$odd
+       addib,sv,n      1,%r22,L$FF..           ; r22 = (d / 2 + 1)
+       shd             %r25,%r24,1,%r24        ; r24 = new n0
+       extru           %r25,30,31,%r25         ; r25 = new n1
+       sub             %r0,%r22,%r21
+       ds              %r0,%r21,%r0
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r24
+       ds              %r25,%r22,%r25
+       addc            %r24,%r24,%r28
+       comclr,>=       %r25,%r0,%r0
+       addl            %r25,%r22,%r25
+       sh1addl         %r25,%r19,%r25
+; We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
+       add,nuv         %r28,%r25,%r25
+       addl            %r25,%r1,%r25
+       addc            %r0,%r28,%r28
+       sub,<<          %r25,%r23,%r0
+       addl            %r25,%r1,%r25
+       stws            %r25,0(0,%r26)
+       bv              0(%r2)
+        addc           %r0,%r28,%r28
+
+; This is just a special case of the code above.
+; We come here when d == 0xFFFFFFFF
+       .label  L$FF..
+       add,uv          %r25,%r24,%r24
+       sub,<<          %r24,%r23,%r0
+       ldo             1(%r24),%r24
+       stws            %r24,0(0,%r26)
+       bv              0(%r2)
+        addc           %r0,%r25,%r28
+
+       .exit
+       .procend
diff --git a/mpi/hppa1.1/distfiles b/mpi/hppa1.1/distfiles
new file mode 100644 (file)
index 0000000..d68227a
--- /dev/null
@@ -0,0 +1,5 @@
+udiv-qrnnd.S
+mpih-mul1.S
+mpih-mul2.S
+mpih-mul3.S
+
diff --git a/mpi/hppa1.1/mpih-mul1.S b/mpi/hppa1.1/mpih-mul1.S
new file mode 100644 (file)
index 0000000..ac9bace
--- /dev/null
@@ -0,0 +1,115 @@
+/* hppa1.1  mul_1 -- Multiply a limb vector with a limb and store
+ *                  the result in a second limb vector.
+ *
+ *      Copyright (C) 1992, 1993, 1994, 1998, 
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_mul_1( mpi_ptr_t res_ptr,   (r26)
+ *               mpi_ptr_t s1_ptr,     (r25)
+ *               mpi_size_t s1_size,   (r24)
+ *               mpi_limb_t s2_limb)   (r23)
+ *
+ *
+ *
+ * This runs at 9 cycles/limb on a PA7000.  With the used instructions, it can
+ * not become faster due to data cache contention after a store.  On the
+ * PA7100 it runs at 7 cycles/limb, and that can not be improved either, since
+ * only the xmpyu does not need the integer pipeline, so the only dual-issue
+ * we will get are addc+xmpyu. Unrolling would not help either CPU.
+ *
+ * We could use fldds to read two limbs at a time from the S1 array, and that
+ * could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and
+ * PA7100, respectively.  We don't do that since it does not seem worth the
+ * (alignment) troubles...
+ *
+ * At least the PA7100 is rumored to be able to deal with cache-misses
+ * without stalling instruction issue. If this is true, and the cache is
+ * actually also lockup-free, we should use a deeper software pipeline, and
+ * load from S1 very early!  (The loads and stores to -12(sp) will surely be
+ * in the cache.)
+ */
+
+       .code
+       .export         mpihelp_mul_1
+       .label          mpihelp_mul_1
+       .proc
+       .callinfo       frame=64,no_calls
+       .entry
+
+       ldo             64(%r30),%r30
+       fldws,ma        4(%r25),%fr5
+       stw             %r23,-16(%r30)          ; move s2_limb ...
+       addib,=         -1,%r24,L$just_one_limb
+        fldws          -16(%r30),%fr4          ; ... into fr4
+       add             %r0,%r0,%r0             ; clear carry
+       xmpyu           %fr4,%fr5,%fr6
+       fldws,ma        4(%r25),%fr7
+       fstds           %fr6,-16(%r30)
+       xmpyu           %fr4,%fr7,%fr8
+       ldw             -12(%r30),%r19          ; least significant limb in product
+       ldw             -16(%r30),%r28
+
+       fstds           %fr8,-16(%r30)
+       addib,=         -1,%r24,L$end
+        ldw            -12(%r30),%r1
+
+; Main loop
+       .label  L$loop
+       fldws,ma        4(%r25),%fr5
+       stws,ma         %r19,4(%r26)
+       addc            %r28,%r1,%r19
+       xmpyu           %fr4,%fr5,%fr6
+       ldw             -16(%r30),%r28
+       fstds           %fr6,-16(%r30)
+       addib,<>        -1,%r24,L$loop
+        ldw            -12(%r30),%r1
+
+       .label  L$end
+       stws,ma         %r19,4(%r26)
+       addc            %r28,%r1,%r19
+       ldw             -16(%r30),%r28
+       stws,ma         %r19,4(%r26)
+       addc            %r0,%r28,%r28
+       bv              0(%r2)
+        ldo            -64(%r30),%r30
+
+       .label  L$just_one_limb
+       xmpyu           %fr4,%fr5,%fr6
+       fstds           %fr6,-16(%r30)
+       ldw             -16(%r30),%r28
+       ldo             -64(%r30),%r30
+       bv              0(%r2)
+        fstws          %fr6R,0(%r26)
+
+       .exit
+       .procend
+
+
diff --git a/mpi/hppa1.1/mpih-mul2.S b/mpi/hppa1.1/mpih-mul2.S
new file mode 100644 (file)
index 0000000..c73397e
--- /dev/null
@@ -0,0 +1,117 @@
+/* hppa1.1   addmul_1 -- Multiply a limb vector with a limb and add
+ *                      the result to a second limb vector.
+ *
+ *      Copyright (C) 1992, 1993, 1994, 1998,
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_addmul_1( mpi_ptr_t res_ptr,      (r26)
+ *                  mpi_ptr_t s1_ptr,       (r25)
+ *                  mpi_size_t s1_size,     (r24)
+ *                  mpi_limb_t s2_limb)     (r23)
+ *
+ * This runs at 11 cycles/limb on a PA7000.  With the used instructions, it
+ * can not become faster due to data cache contention after a store.  On the
+ * PA7100 it runs at 10 cycles/limb, and that can not be improved either,
+ * since only the xmpyu does not need the integer pipeline, so the only
+ * dual-issue we will get are addc+xmpyu.  Unrolling could gain a cycle/limb
+ * on the PA7100.
+ *
+ * There are some ideas described in mul1.S that applies to this code too.
+ */
+
+       .code
+       .export         mpihelp_addmul_1
+       .label          mpihelp_addmul_1
+       .proc
+       .callinfo       frame=64,no_calls
+       .entry
+
+       ldo             64(%r30),%r30
+       fldws,ma        4(%r25),%fr5
+       stw             %r23,-16(%r30)          ; move s2_limb ...
+       addib,=         -1,%r24,L$just_one_limb
+        fldws          -16(%r30),%fr4          ; ... into fr4
+       add             %r0,%r0,%r0             ; clear carry
+       xmpyu           %fr4,%fr5,%fr6
+       fldws,ma        4(%r25),%fr7
+       fstds           %fr6,-16(%r30)
+       xmpyu           %fr4,%fr7,%fr8
+       ldw             -12(%r30),%r19          ; least significant limb in product
+       ldw             -16(%r30),%r28
+
+       fstds           %fr8,-16(%r30)
+       addib,=         -1,%r24,L$end
+        ldw            -12(%r30),%r1
+
+; Main loop
+       .label  L$loop
+       ldws            0(%r26),%r29
+       fldws,ma        4(%r25),%fr5
+       add             %r29,%r19,%r19
+       stws,ma         %r19,4(%r26)
+       addc            %r28,%r1,%r19
+       xmpyu           %fr4,%fr5,%fr6
+       ldw             -16(%r30),%r28
+       fstds           %fr6,-16(%r30)
+       addc            %r0,%r28,%r28
+       addib,<>        -1,%r24,L$loop
+        ldw            -12(%r30),%r1
+
+       .label  L$end
+       ldw             0(%r26),%r29
+       add             %r29,%r19,%r19
+       stws,ma         %r19,4(%r26)
+       addc            %r28,%r1,%r19
+       ldw             -16(%r30),%r28
+       ldws            0(%r26),%r29
+       addc            %r0,%r28,%r28
+       add             %r29,%r19,%r19
+       stws,ma         %r19,4(%r26)
+       addc            %r0,%r28,%r28
+       bv              0(%r2)
+        ldo            -64(%r30),%r30
+
+       .label L$just_one_limb
+       xmpyu           %fr4,%fr5,%fr6
+       ldw             0(%r26),%r29
+       fstds           %fr6,-16(%r30)
+       ldw             -12(%r30),%r1
+       ldw             -16(%r30),%r28
+       add             %r29,%r1,%r19
+       stw             %r19,0(%r26)
+       addc            %r0,%r28,%r28
+       bv              0(%r2)
+        ldo            -64(%r30),%r30
+
+       .exit
+       .procend
+
+
diff --git a/mpi/hppa1.1/mpih-mul3.S b/mpi/hppa1.1/mpih-mul3.S
new file mode 100644 (file)
index 0000000..f9ccb1b
--- /dev/null
@@ -0,0 +1,127 @@
+/* hppa1.1   submul_1 -- Multiply a limb vector with a limb and add
+ *                      the result to a second limb vector.
+ *
+ *      Copyright (C) 1992, 1993, 1994, 1998, 
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_submul_1( mpi_ptr_t res_ptr,      (r26)
+ *                  mpi_ptr_t s1_ptr,       (r25)
+ *                  mpi_size_t s1_size,     (r24)
+ *                  mpi_limb_t s2_limb)     (r23)
+ *
+ *
+ * This runs at 12 cycles/limb on a PA7000.  With the used instructions, it
+ * can not become faster due to data cache contention after a store.  On the
+ * PA7100 it runs at 11 cycles/limb, and that can not be improved either,
+ * since only the xmpyu does not need the integer pipeline, so the only
+ * dual-issue we will get are addc+xmpyu.  Unrolling could gain a cycle/limb
+ * on the PA7100.
+ *
+ * There are some ideas described in mul1.S that applies to this code too.
+ *
+ * It seems possible to make this run as fast as addmul_1, if we use
+ *      sub,>>= %r29,%r19,%r22
+ *      addi    1,%r28,%r28
+ * but that requires reworking the hairy software pipeline...
+ */
+
+
+       .code
+       .export         mpihelp_submul_1
+       .label          mpihelp_submul_1
+       .proc
+       .callinfo       frame=64,no_calls
+       .entry
+
+       ldo             64(%r30),%r30
+       fldws,ma        4(%r25),%fr5
+       stw             %r23,-16(%r30)          ; move s2_limb ...
+       addib,=         -1,%r24,L$just_one_limb
+        fldws          -16(%r30),%fr4          ; ... into fr4
+       add             %r0,%r0,%r0             ; clear carry
+       xmpyu           %fr4,%fr5,%fr6
+       fldws,ma        4(%r25),%fr7
+       fstds           %fr6,-16(%r30)
+       xmpyu           %fr4,%fr7,%fr8
+       ldw             -12(%r30),%r19          ; least significant limb in product
+       ldw             -16(%r30),%r28
+
+       fstds           %fr8,-16(%r30)
+       addib,=         -1,%r24,L$end
+        ldw            -12(%r30),%r1
+
+; Main loop
+       .label  L$loop
+       ldws            0(%r26),%r29
+       fldws,ma        4(%r25),%fr5
+       sub             %r29,%r19,%r22
+       add             %r22,%r19,%r0
+       stws,ma         %r22,4(%r26)
+       addc            %r28,%r1,%r19
+       xmpyu           %fr4,%fr5,%fr6
+       ldw             -16(%r30),%r28
+       fstds           %fr6,-16(%r30)
+       addc            %r0,%r28,%r28
+       addib,<>        -1,%r24,L$loop
+        ldw            -12(%r30),%r1
+
+       .label  L$end
+       ldw             0(%r26),%r29
+       sub             %r29,%r19,%r22
+       add             %r22,%r19,%r0
+       stws,ma         %r22,4(%r26)
+       addc            %r28,%r1,%r19
+       ldw             -16(%r30),%r28
+       ldws            0(%r26),%r29
+       addc            %r0,%r28,%r28
+       sub             %r29,%r19,%r22
+       add             %r22,%r19,%r0
+       stws,ma         %r22,4(%r26)
+       addc            %r0,%r28,%r28
+       bv              0(%r2)
+        ldo            -64(%r30),%r30
+
+       .label  L$just_one_limb
+       xmpyu           %fr4,%fr5,%fr6
+       ldw             0(%r26),%r29
+       fstds           %fr6,-16(%r30)
+       ldw             -12(%r30),%r1
+       ldw             -16(%r30),%r28
+       sub             %r29,%r1,%r22
+       add             %r22,%r1,%r0
+       stw             %r22,0(%r26)
+       addc            %r0,%r28,%r28
+       bv              0(%r2)
+        ldo            -64(%r30),%r30
+
+       .exit
+       .procend
+
diff --git a/mpi/hppa1.1/udiv-qrnnd.S b/mpi/hppa1.1/udiv-qrnnd.S
new file mode 100644 (file)
index 0000000..a1643d7
--- /dev/null
@@ -0,0 +1,90 @@
+/* HP-PA  __udiv_qrnnd division support, used from longlong.h.
+ *       This version runs fast on PA 7000 and later.
+ *
+ *      Copyright (C) 1993, 1994, 1998, 
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+
+/* INPUT PARAMETERS
+ *   rem_ptr      gr26
+ *   n1           gr25
+ *   n0           gr24
+ *   d            gr23
+ */
+
+       .code
+       .label L$0000
+       .word           0x43f00000
+       .word           0x0
+       .export         __udiv_qrnnd
+       .label          __udiv_qrnnd
+       .proc
+       .callinfo       frame=64,no_calls
+       .entry
+       ldo             64(%r30),%r30
+
+       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     ; '
+       fldds           -16(0,%r30),%fr5
+       stws            %r23,-12(0,%r30)
+       comib,<=        0,%r25,L$1
+       fcnvxf,dbl,dbl  %fr5,%fr5
+       fldds           0(0,%r19),%fr4
+       fadd,dbl        %fr4,%fr5,%fr5
+       .label  L$1
+       fcpy,sgl        %fr0,%fr6L
+       fldws           -12(0,%r30),%fr6R
+       fcnvxf,dbl,dbl  %fr6,%fr4
+
+       fdiv,dbl        %fr5,%fr4,%fr5
+
+       fcnvfx,dbl,dbl  %fr5,%fr4
+       fstws           %fr4R,-16(%r30)
+       xmpyu           %fr4R,%fr6R,%fr6
+       ldws            -16(%r30),%r28
+       fstds           %fr6,-16(0,%r30)
+       ldws            -12(0,%r30),%r21
+       ldws            -16(0,%r30),%r20
+       sub             %r24,%r21,%r22
+       subb            %r25,%r20,%r19
+       comib,=         0,%r19,L$2
+       ldo             -64(%r30),%r30
+
+       add             %r22,%r23,%r22
+       ldo             -1(%r28),%r28
+       .label  L$2
+       bv              0(%r2)
+       stws            %r22,0(0,%r26)
+
+       .exit
+       .procend
+
+
diff --git a/mpi/i386/distfiles b/mpi/i386/distfiles
new file mode 100644 (file)
index 0000000..88d2a30
--- /dev/null
@@ -0,0 +1,9 @@
+mpih-add1.S
+mpih-mul1.S
+mpih-mul2.S
+mpih-mul3.S
+mpih-lshift.S
+mpih-rshift.S
+mpih-sub1.S
+syntax.h
+
diff --git a/mpi/i386/mpih-add1.S b/mpi/i386/mpih-add1.S
new file mode 100644 (file)
index 0000000..da7e7f8
--- /dev/null
@@ -0,0 +1,118 @@
+/* i80386 add_n -- Add two limb vectors of the same length > 0 and store
+ *                sum in a third limb vector.
+ *
+ *      Copyright (C) 1992, 1994, 1995, 1998, 
+ *                    2001, 2002 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+#include "sysdep.h"
+#include "asm-syntax.h"
+
+
+/*******************
+ *  mpi_limb_t
+ *  mpihelp_add_n( mpi_ptr_t res_ptr,  (sp + 4)
+ *                mpi_ptr_t s1_ptr,    (sp + 8)
+ *                mpi_ptr_t s2_ptr,    (sp + 12)
+ *                mpi_size_t size)     (sp + 16)
+ */
+
+.text
+       ALIGN (3)
+       .globl C_SYMBOL_NAME(mpihelp_add_n)
+C_SYMBOL_NAME(mpihelp_add_n:)
+       pushl %edi
+       pushl %esi
+
+       movl 12(%esp),%edi              /* res_ptr */
+       movl 16(%esp),%esi              /* s1_ptr */
+       movl 20(%esp),%edx              /* s2_ptr */
+       movl 24(%esp),%ecx              /* size */
+
+       movl    %ecx,%eax
+       shrl    $3,%ecx                 /* compute count for unrolled loop */
+       negl    %eax
+       andl    $7,%eax                 /* get index where to start loop */
+       jz      Loop                    /* necessary special case for 0 */
+       incl    %ecx                    /* adjust loop count */
+       shll    $2,%eax                 /* adjustment for pointers... */
+       subl    %eax,%edi               /* ... since they are offset ... */
+       subl    %eax,%esi               /* ... by a constant when we ... */
+       subl    %eax,%edx               /* ... enter the loop */
+       shrl    $2,%eax                 /* restore previous value */
+#ifdef PIC
+/* Calculate start address in loop for PIC.  Due to limitations in some
+   assemblers, Loop-L0-3 cannot be put into the leal */
+       call    L0
+L0:    leal    (%eax,%eax,8),%eax
+       addl    (%esp),%eax
+       addl    $(Loop-L0-3),%eax
+       addl    $4,%esp
+#else
+/* Calculate start address in loop for non-PIC.  */
+       leal    Loop-3(%eax,%eax,8),%eax
+#endif
+       jmp     *%eax                   /* jump into loop */
+       ALIGN (3)
+Loop:  movl    (%esi),%eax
+       adcl    (%edx),%eax
+       movl    %eax,(%edi)
+       movl    4(%esi),%eax
+       adcl    4(%edx),%eax
+       movl    %eax,4(%edi)
+       movl    8(%esi),%eax
+       adcl    8(%edx),%eax
+       movl    %eax,8(%edi)
+       movl    12(%esi),%eax
+       adcl    12(%edx),%eax
+       movl    %eax,12(%edi)
+       movl    16(%esi),%eax
+       adcl    16(%edx),%eax
+       movl    %eax,16(%edi)
+       movl    20(%esi),%eax
+       adcl    20(%edx),%eax
+       movl    %eax,20(%edi)
+       movl    24(%esi),%eax
+       adcl    24(%edx),%eax
+       movl    %eax,24(%edi)
+       movl    28(%esi),%eax
+       adcl    28(%edx),%eax
+       movl    %eax,28(%edi)
+       leal    32(%edi),%edi
+       leal    32(%esi),%esi
+       leal    32(%edx),%edx
+       decl    %ecx
+       jnz     Loop
+
+       sbbl    %eax,%eax
+       negl    %eax
+
+       popl %esi
+       popl %edi
+       ret
+
diff --git a/mpi/i386/mpih-lshift.S b/mpi/i386/mpih-lshift.S
new file mode 100644 (file)
index 0000000..a7dad2c
--- /dev/null
@@ -0,0 +1,96 @@
+/* i80386   lshift
+ *      Copyright (C) 1992, 1994, 1998,
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+#include "sysdep.h"
+#include "asm-syntax.h"
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_lshift( mpi_ptr_t wp,       (sp + 4)
+ *                mpi_ptr_t up,        (sp + 8)
+ *                mpi_size_t usize,    (sp + 12)
+ *                unsigned cnt)        (sp + 16)
+ */
+
+.text
+       ALIGN (3)
+       .globl C_SYMBOL_NAME(mpihelp_lshift)
+C_SYMBOL_NAME(mpihelp_lshift:)
+       pushl   %edi
+       pushl   %esi
+       pushl   %ebx
+
+       movl    16(%esp),%edi           /* res_ptr */
+       movl    20(%esp),%esi           /* s_ptr */
+       movl    24(%esp),%edx           /* size */
+       movl    28(%esp),%ecx           /* cnt */
+
+       subl    $4,%esi                 /* adjust s_ptr */
+
+       movl    (%esi,%edx,4),%ebx      /* read most significant limb */
+       xorl    %eax,%eax
+       shldl   %ebx,%eax               /* compute carry limb */
+       decl    %edx
+       jz      Lend
+       pushl   %eax                    /* push carry limb onto stack */
+       testb   $1,%dl
+       jnz     L1                      /* enter loop in the middle */
+       movl    %ebx,%eax
+
+       ALIGN (3)
+Loop:  movl    (%esi,%edx,4),%ebx      /* load next lower limb */
+       shldl   %ebx,%eax               /* compute result limb */
+       movl    %eax,(%edi,%edx,4)      /* store it */
+       decl    %edx
+L1:    movl    (%esi,%edx,4),%eax
+       shldl   %eax,%ebx
+       movl    %ebx,(%edi,%edx,4)
+       decl    %edx
+       jnz     Loop
+
+       shll    %cl,%eax                /* compute least significant limb */
+       movl    %eax,(%edi)             /* store it */
+
+       popl    %eax                    /* pop carry limb */
+
+       popl    %ebx
+       popl    %esi
+       popl    %edi
+       ret
+
+Lend:  shll    %cl,%ebx                /* compute least significant limb */
+       movl    %ebx,(%edi)             /* store it */
+
+       popl    %ebx
+       popl    %esi
+       popl    %edi
+       ret
+
diff --git a/mpi/i386/mpih-mul1.S b/mpi/i386/mpih-mul1.S
new file mode 100644 (file)
index 0000000..cf87046
--- /dev/null
@@ -0,0 +1,86 @@
+/* i80386 mul_1 -- Multiply a limb vector with a limb and store
+ *                      the result in a second limb vector.
+ *      Copyright (C) 1992, 1994, 1998, 
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+#include "sysdep.h"
+#include "asm-syntax.h"
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_mul_1( mpi_ptr_t res_ptr,   (sp + 4)
+ *               mpi_ptr_t s1_ptr,     (sp + 8)
+ *               mpi_size_t s1_size,   (sp + 12)
+ *               mpi_limb_t s2_limb)   (sp + 16)
+ */
+
+#define res_ptr edi
+#define s1_ptr esi
+#define size   ecx
+#define s2_limb ebp
+
+       TEXT
+       ALIGN (3)
+       GLOBL   C_SYMBOL_NAME(mpihelp_mul_1)
+C_SYMBOL_NAME(mpihelp_mul_1:)
+
+       INSN1(push,l    ,R(edi))
+       INSN1(push,l    ,R(esi))
+       INSN1(push,l    ,R(ebx))
+       INSN1(push,l    ,R(ebp))
+
+       INSN2(mov,l     ,R(res_ptr),MEM_DISP(esp,20))
+       INSN2(mov,l     ,R(s1_ptr),MEM_DISP(esp,24))
+       INSN2(mov,l     ,R(size),MEM_DISP(esp,28))
+       INSN2(mov,l     ,R(s2_limb),MEM_DISP(esp,32))
+
+       INSN2(lea,l     ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
+       INSN2(lea,l     ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
+       INSN1(neg,l     ,R(size))
+       INSN2(xor,l     ,R(ebx),R(ebx))
+       ALIGN (3)
+Loop:
+       INSN2(mov,l     ,R(eax),MEM_INDEX(s1_ptr,size,4))
+       INSN1(mul,l     ,R(s2_limb))
+       INSN2(add,l     ,R(eax),R(ebx))
+       INSN2(mov,l     ,MEM_INDEX(res_ptr,size,4),R(eax))
+       INSN2(adc,l     ,R(edx),$0)
+       INSN2(mov,l     ,R(ebx),R(edx))
+
+       INSN1(inc,l     ,R(size))
+       INSN1(jnz,      ,Loop)
+       INSN2(mov,l     ,R(eax),R(ebx))
+
+       INSN1(pop,l     ,R(ebp))
+       INSN1(pop,l     ,R(ebx))
+       INSN1(pop,l     ,R(esi))
+       INSN1(pop,l     ,R(edi))
+       ret
+
diff --git a/mpi/i386/mpih-mul2.S b/mpi/i386/mpih-mul2.S
new file mode 100644 (file)
index 0000000..f134af7
--- /dev/null
@@ -0,0 +1,88 @@
+/* i80386 addmul_1 -- Multiply a limb vector with a limb and add
+ *                   the result to a second limb vector.
+ *
+ *      Copyright (C) 1992, 1994, 1998,
+ *                    2001 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
+ *
+ * Note: This code is heavily based on the GNU MP Library.
+ *      Actually it's the same code with only minor changes in the
+ *      way the data is stored; this is to support the abstraction
+ *      of an optional secure memory allocation which may be used
+ *      to avoid revealing of sensitive data due to paging etc.
+ *      The GNU MP Library itself is published under the LGPL;
+ *      however I decided to publish this code under the plain GPL.
+ */
+
+
+#include "sysdep.h"
+#include "asm-syntax.h"
+
+
+/*******************
+ * mpi_limb_t
+ * mpihelp_addmul_1( mpi_ptr_t res_ptr,      (sp + 4)
+ *                  mpi_ptr_t s1_ptr,       (sp + 8)
+ *                  mpi_size_t s1_size,     (sp + 12)
+ *                  mpi_limb_t s2_limb)     (sp + 16)
+ */
+
+#define res_ptr edi
+#define s1_ptr esi
+#define size   ecx
+#define s2_limb ebp
+
+       TEXT
+       ALIGN (3)
+       GLOBL   C_SYMBOL_NAME(mpihelp_addmul_1)
+C_SYMBOL_NAME(mpihelp_addmul_1:)
+
+       INSN1(push,l    ,R(edi))
+       INSN1(push,l    ,R(esi))
+       INSN1(push,l    ,R(ebx))
+       INSN1(push,l    ,R(ebp))
+
+       INSN2(mov,l     ,R(res_ptr),MEM_DISP(esp,20))
+       INSN2(mov,l     ,R(s1_ptr),MEM_DISP(esp,24))
+       INSN2(mov,l     ,R(size),MEM_DISP(esp,28))
+       INSN2(mov,l     ,R(s2_limb),MEM_DISP(esp,32))
+
+       INSN2(lea,l     ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
+       INSN2(lea,l     ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
+       INSN1(neg,l     ,R(size))
+       INSN2(xor,l     ,R(ebx),R(ebx))
+       ALIGN (3)
+Loop: