mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
Update head to match stable 1.0
This commit is contained in:
parent
df58e024e7
commit
0ed6228293
124
AUTHORS
124
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]
|
||||
|
||||
|
||||
|
||||
More credits
|
||||
============
|
||||
Other legal information
|
||||
=======================
|
||||
|
||||
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.
|
||||
|
||||
|
65
BUGS
65
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
|
||||
|
14
COPYING
14
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.
|
||||
|
515
ChangeLog
515
ChangeLog
@ -1,151 +1,486 @@
|
||||
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: 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().
|
||||
|
||||
Wed Jul 19 11:26:43 CEST 2000 Werner Koch <wk@openit.de>
|
||||
|
||||
* configure.in (mingw32): Changes to allow for mingw32msvc
|
||||
|
||||
Fri Jul 14 19:38:23 CEST 2000 Werner Koch <wk@>
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
* configure.in (DYNLINK_MOD_CFLAGS): Set different for NetBSD.
|
||||
Tue May 30 16:37:55 CEST 2000 Werner Koch <wk@openit.de>
|
||||
|
||||
* configure.in: Add check for clock_gettime
|
||||
Version 1.0.1-ePit-1
|
||||
|
||||
* configure.in (ALL_LINGUAS): Add nl.
|
||||
* configure.in (ALL_LINGUAS): Add Esperanto.
|
||||
* configure.in (ALL_LINGUAS): Add sv and ja.
|
||||
Sun May 28 13:55:17 CEST 2000 Werner Koch <wk@openit.de>
|
||||
|
||||
* configure.in: Use /usr/local for CFLAGS and LDFLAGS when
|
||||
target is freebsd. By Rémi.
|
||||
* acinclude.m4 (GNUPG_SYS_NM_PARSE): Added BSDI support.
|
||||
(GNUPG_CHECK_RDYNAMIC): Ditto.
|
||||
|
||||
* configure.in: Do not set development version when the version has
|
||||
a dash in it. Suggested by Dave Dykstra.
|
||||
Wed Apr 19 10:57:26 CEST 2000 Werner Koch <wk@openit.de>
|
||||
|
||||
* configure.in: Removed substitution for doc/gph/Makefile.
|
||||
Do all the gcc warning only in maintainer mode.
|
||||
* acconfig.h (HAVE_MLOCK): Added
|
||||
|
||||
* 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.
|
||||
Wed Mar 22 13:50:24 CET 2000 Werner Koch <wk@openit.de>
|
||||
|
||||
* acinclude.m4 (GNUPG_SYS_NM_PARSE): Added BSDI support.
|
||||
(GNUPG_CHECK_RDYNAMIC): Ditto.
|
||||
* acinclude.m4 (GNUPG_CHECK_MLOCK): Changed the way to test for
|
||||
librt. Test suggested by Jeff Long.
|
||||
|
||||
* acinclude.m4 (GNUPG_CHECK_MLOCK): Changed the way to test for
|
||||
librt. Test suggested by Jeff Long.
|
||||
Fri Mar 17 17:50:25 CET 2000 Werner Koch <wk@openit.de>
|
||||
|
||||
* 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_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_SYMBOL_UNDERSCORE): Add support for
|
||||
DJGPP.
|
||||
(GNUPG_CHECK_MLOCK): Check whether mlock sits in librt.
|
||||
2000-03-14 12:07:54 Werner Koch (wk@habibti.openit.de)
|
||||
|
||||
* acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Add NetBSD. By Thomas Klausner.
|
||||
* 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.
|
||||
|
||||
* acconfig.h (HAVE_MLOCK): Added
|
||||
Tue Mar 7 18:45:31 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
|
||||
Mon Mar 13 19:22:46 CET 2000 Werner Koch <wk@openit.de>
|
||||
* acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Add NetBSD. By Thomas Klausner.
|
||||
* configure.in (DYNLINK_MOD_CFLAGS): Set different for NetBSD.
|
||||
|
||||
* configure.in: Now uses the Docbook M4s from GPH.
|
||||
Thu Mar 2 15:37:46 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
|
||||
Mon Jan 31 17:46:35 CET 2000 Werner Koch <wk@>
|
||||
* configure.in: Add check for clock_gettime
|
||||
|
||||
* Makefile.am: Re-added tools. By Rémi.
|
||||
Wed Feb 23 10:07:57 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
|
||||
Mon Jan 31 16:37:34 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
* configure.in (ALL_LINGUAS): Add nl.
|
||||
|
||||
* configure.in: Create a symlink for types.h in gcrypt/.
|
||||
Wed Feb 16 16:25:09 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
|
||||
Thu Jan 27 18:00:44 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
* configure.in (ALL_LINGUAS): Add Esperanto.
|
||||
|
||||
* configure.in (g10defs.h): Replaced by gnupg-defs.h
|
||||
Wed Feb 16 14:09:00 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
|
||||
Mon Jan 24 13:04:28 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
* configure.in (ALL_LINGUAS): Add sv and ja.
|
||||
|
||||
* jnlib/ : New.
|
||||
* AUTHORS: Converted to a more compact format.
|
||||
|
||||
* configure.in: Do set development version when the version has
|
||||
* INSTALL: Wrote a note about a Solaris problem.
|
||||
|
||||
Thu Feb 10 17:39:44 CET 2000 Werner Koch <wk@gnupg.de>
|
||||
|
||||
* configure.in: Use /usr/local for CFLAGS and LDFLAGS when
|
||||
target is freebsd. By Rémi.
|
||||
|
||||
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>
|
||||
|
||||
* 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.
|
||||
* VERSION: Set to 1.0.1.
|
||||
|
||||
Thu Oct 28 16:17:46 CEST 1999 Werner Koch <wk@gnupg.de>
|
||||
* configure.in: Removed substitution for doc/gph/Makefile.
|
||||
Do all the gcc warning only in maintainer mode.
|
||||
|
||||
* Started with development series 1.1 on 1999-10-26
|
||||
Thu Dec 9 10:31:05 CET 1999 Werner Koch <wk@gnupg.de>
|
||||
|
||||
Tue Oct 26 14:10:21 CEST 1999 Werner Koch <wk@gnupg.de>
|
||||
* INSTALL: Add a hint for AIX. By Jos Backus.
|
||||
|
||||
* README-alpha: New
|
||||
Sat Dec 4 12:30:28 CET 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.
|
||||
|
||||
Mon Nov 22 11:14:53 CET 1999 Werner Koch <wk@gnupg.de>
|
||||
|
||||
* BUGS: Replaced content with a link to the online list.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
|
66
INSTALL
66
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
|
||||
|
45
Makefile.am
45
Makefile.am
@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
304
NEWS
304
NEWS
@ -1,15 +1,258 @@
|
||||
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.
|
||||
|
||||
--> THIS IS A DEVELOPMENT VERSION; see README and README-alpha <--
|
||||
* A warning is issued if the user forces the use of an algorithm
|
||||
that is not listed in the recipient's preferences.
|
||||
|
||||
* Add Rijndael (AES) support.
|
||||
* Full revocation key (aka "designated revoker") support.
|
||||
|
||||
* Removed gdbm 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.
|
||||
|
||||
* A subkey is never used to sign keys.
|
||||
|
||||
* Read only keyrings are now handled as expected.
|
||||
|
||||
|
||||
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.
|
||||
|
36
NOTES
36
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
|
||||
|
||||
|
||||
|
||||
|
||||
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:
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
32
OBUGS
32
OBUGS
@ -100,35 +100,3 @@
|
||||
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
|
||||
|
||||
|
20
PROJECTS
20
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.
|
||||
|
||||
@ -28,3 +29,18 @@
|
||||
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.
|
||||
|
500
README
500
README
@ -1,17 +1,497 @@
|
||||
|
||||
GnuPG - The GNU Privacy Guard
|
||||
-------------------------------
|
||||
Version 1.1
|
||||
Version 1.0
|
||||
|
||||
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
|
||||
Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
If you are looking for the CVS from the stable tree, use
|
||||
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.
|
||||
|
||||
cvs -z3 -d :pserver:anoncvs@cvs.gnupg.org:/cvs/gnupg co -r STABLE-BRANCH-1-0 gnupg
|
||||
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 .
|
||||
|
||||
The gnupg.org domain is hosted in Germany to avoid possible legal
|
||||
problems (technical advices may count as a violation of ITAR).
|
||||
|
||||
Please direct bug reports to <gnupg-bugs@gnu.org> or post
|
||||
them direct to the mailing list <gnupg-devel@gnupg.org>.
|
||||
|
||||
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.
|
||||
|
||||
|
123
THANKS
123
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.
|
||||
|
9
THOUGHTS
9
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.
|
||||
|
157
TODO
157
TODO
@ -1,83 +1,124 @@
|
||||
* 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.
|
||||
|
||||
* Put a note into readme.w32 that there is a man page and a options
|
||||
file; write the registry stuff in regedit format.
|
||||
|
||||
* Show more info does not work from edit->trust
|
||||
|
||||
* 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.
|
||||
|
||||
* add some minor things vor VMS.
|
||||
|
||||
* Use DSA keys with the test suite (partly done)
|
||||
|
||||
* Fix the bug in the mips assembler code
|
||||
|
||||
* Add a way to show the fingerprint of an key signator's keys
|
||||
|
||||
* Add an is_valid flag to each user ID.
|
||||
|
||||
* 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.
|
||||
|
||||
* Speed up calculation of key validation.
|
||||
|
||||
* --disable-asm should still assemble _udiv_qrnnd when needed
|
||||
|
||||
* Skip RO keyrings when importing a key.
|
||||
* Get new assembler stuff from gmp 3.1
|
||||
|
||||
* Use the newest encryption key if only the main key has been given.
|
||||
|
||||
* replace the keyserver stuff either by a call to a specialized
|
||||
utility and SOCKSify this utility.
|
||||
|
||||
* Check the beginning of file to detect already compressed files (gzip,
|
||||
bzip2, xdelta and some picture formats)
|
||||
|
||||
* Delay the read of the passphrase-fd afte a NEED_PASSPHRASE. But this
|
||||
may break some scripts.
|
||||
|
||||
* 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.
|
||||
|
||||
|
||||
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 ?
|
||||
|
||||
|
116
acconfig.h
116
acconfig.h
@ -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*/
|
247
acinclude.m4
247
acinclude.m4
@ -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 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_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 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.
|
||||
|
5
autogen.sh
Executable file
5
autogen.sh
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
autogen_sh="`dirname $0`/scripts/autogen.sh"
|
||||
exec $autogen_sh $*
|
||||
|
994
configure.ac
Normal file
994
configure.ac
Normal file
@ -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
|
||||
|
98
gnupg.txt
Normal file
98
gnupg.txt
Normal file
@ -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
|
325
mpi/ChangeLog
Normal file
325
mpi/ChangeLog
Normal file
@ -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.
|
||||
|
||||
|
79
mpi/Makefile.am
Normal file
79
mpi/Makefile.am
Normal file
@ -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:
|
||||
|
||||
|
53
mpi/alpha/README
Normal file
53
mpi/alpha/README
Normal file
@ -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
|
||||
|
11
mpi/alpha/distfiles
Normal file
11
mpi/alpha/distfiles
Normal file
@ -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
|
||||
|
124
mpi/alpha/mpih-add1.S
Normal file
124
mpi/alpha/mpih-add1.S
Normal file
@ -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
|
||||
|
123
mpi/alpha/mpih-lshift.S
Normal file
123
mpi/alpha/mpih-lshift.S
Normal file
@ -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
|
||||
|
||||
|
90
mpi/alpha/mpih-mul1.S
Normal file
90
mpi/alpha/mpih-mul1.S
Normal file
@ -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
|
||||
|
||||
|
97
mpi/alpha/mpih-mul2.S
Normal file
97
mpi/alpha/mpih-mul2.S
Normal file
@ -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
|
||||
|
95
mpi/alpha/mpih-mul3.S
Normal file
95
mpi/alpha/mpih-mul3.S
Normal file
@ -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
|
||||
|
120
mpi/alpha/mpih-rshift.S
Normal file
120
mpi/alpha/mpih-rshift.S
Normal file
@ -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
|
||||
|
124
mpi/alpha/mpih-sub1.S
Normal file
124
mpi/alpha/mpih-sub1.S
Normal file
@ -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
|
||||
|
||||
|
161
mpi/alpha/udiv-qrnnd.S
Normal file
161
mpi/alpha/udiv-qrnnd.S
Normal file
@ -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
|
310
mpi/config.links
Normal file
310
mpi/config.links
Normal file
@ -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
|
95
mpi/g10m.c
Normal file
95
mpi/g10m.c
Normal file
@ -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 );
|
||||
}
|
||||
|
||||
|
10
mpi/generic/distfiles
Normal file
10
mpi/generic/distfiles
Normal file
@ -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
|
||||
|
10
mpi/generic/mpi-asm-defs.h
Normal file
10
mpi/generic/mpi-asm-defs.h
Normal file
@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
65
mpi/generic/mpih-add1.c
Normal file
65
mpi/generic/mpih-add1.c
Normal file
@ -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;
|
||||
}
|
||||
|
69
mpi/generic/mpih-lshift.c
Normal file
69
mpi/generic/mpih-lshift.c
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
61
mpi/generic/mpih-mul1.c
Normal file
61
mpi/generic/mpih-mul1.c
Normal file
@ -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;
|
||||
}
|
||||
|
66
mpi/generic/mpih-mul2.c
Normal file
66
mpi/generic/mpih-mul2.c
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
67
mpi/generic/mpih-mul3.c
Normal file
67
mpi/generic/mpih-mul3.c
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
68
mpi/generic/mpih-rshift.c
Normal file
68
mpi/generic/mpih-rshift.c
Normal file
@ -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;
|
||||
}
|
||||
|
65
mpi/generic/mpih-sub1.c
Normal file
65
mpi/generic/mpih-sub1.c
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
133
mpi/generic/udiv-w-sdiv.c
Normal file
133
mpi/generic/udiv-w-sdiv.c
Normal file
@ -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
|
||||
|
84
mpi/hppa/README
Normal file
84
mpi/hppa/README
Normal file
@ -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
|
7
mpi/hppa/distfiles
Normal file
7
mpi/hppa/distfiles
Normal file
@ -0,0 +1,7 @@
|
||||
README
|
||||
udiv-qrnnd.S
|
||||
mpih-add1.S
|
||||
mpih-sub1.S
|
||||
mpih-lshift.S
|
||||
mpih-rshift.S
|
||||
|
72
mpi/hppa/mpih-add1.S
Normal file
72
mpi/hppa/mpih-add1.S
Normal file
@ -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
|
77
mpi/hppa/mpih-lshift.S
Normal file
77
mpi/hppa/mpih-lshift.S
Normal file
@ -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
|
||||
|
||||
|
||||
|
73
mpi/hppa/mpih-rshift.S
Normal file
73
mpi/hppa/mpih-rshift.S
Normal file
@ -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
|
||||
|
80
mpi/hppa/mpih-sub1.S
Normal file
80
mpi/hppa/mpih-sub1.S
Normal file
@ -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
|
||||
|
||||
|
||||
|
298
mpi/hppa/udiv-qrnnd.S
Normal file
298
mpi/hppa/udiv-qrnnd.S
Normal file
@ -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
|
5
mpi/hppa1.1/distfiles
Normal file
5
mpi/hppa1.1/distfiles
Normal file
@ -0,0 +1,5 @@
|
||||
udiv-qrnnd.S
|
||||
mpih-mul1.S
|
||||
mpih-mul2.S
|
||||
mpih-mul3.S
|
||||
|
115
mpi/hppa1.1/mpih-mul1.S
Normal file
115
mpi/hppa1.1/mpih-mul1.S
Normal file
@ -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
|
||||
|
||||
|
117
mpi/hppa1.1/mpih-mul2.S
Normal file
117
mpi/hppa1.1/mpih-mul2.S
Normal file
@ -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
|
||||
|
||||
|
127
mpi/hppa1.1/mpih-mul3.S
Normal file
127
mpi/hppa1.1/mpih-mul3.S
Normal file
@ -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
|
||||
|
90
mpi/hppa1.1/udiv-qrnnd.S
Normal file
90
mpi/hppa1.1/udiv-qrnnd.S
Normal file
@ -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
|
||||
|
||||
|
9
mpi/i386/distfiles
Normal file
9
mpi/i386/distfiles
Normal file
@ -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
|
||||
|
118
mpi/i386/mpih-add1.S
Normal file
118
mpi/i386/mpih-add1.S
Normal file
@ -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
|
||||
|
96
mpi/i386/mpih-lshift.S
Normal file
96
mpi/i386/mpih-lshift.S
Normal file
@ -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
|
||||
|
86
mpi/i386/mpih-mul1.S
Normal file
86
mpi/i386/mpih-mul1.S
Normal file
@ -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
|
||||
|
88
mpi/i386/mpih-mul2.S
Normal file
88
mpi/i386/mpih-mul2.S
Normal file
@ -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:
|
||||
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(adc,l ,R(edx),$0)
|
||||
INSN2(add,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
|
||||
|
88
mpi/i386/mpih-mul3.S
Normal file
88
mpi/i386/mpih-mul3.S
Normal file
@ -0,0 +1,88 @@
|
||||
/* i80386 submul_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_submul_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_submul_1)
|
||||
C_SYMBOL_NAME(mpihelp_submul_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(adc,l ,R(edx),$0)
|
||||
INSN2(sub,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
|
||||
|
99
mpi/i386/mpih-rshift.S
Normal file
99
mpi/i386/mpih-rshift.S
Normal file
@ -0,0 +1,99 @@
|
||||
/* i80386 rshift
|
||||
*
|
||||
* Copyright (C) 1992, 1994, 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_rshift( 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_rshift)
|
||||
C_SYMBOL_NAME(mpihelp_rshift:)
|
||||
pushl %edi
|
||||
pushl %esi
|
||||
pushl %ebx
|
||||
|
||||
movl 16(%esp),%edi /* wp */
|
||||
movl 20(%esp),%esi /* up */
|
||||
movl 24(%esp),%edx /* usize */
|
||||
movl 28(%esp),%ecx /* cnt */
|
||||
|
||||
leal -4(%edi,%edx,4),%edi
|
||||
leal (%esi,%edx,4),%esi
|
||||
negl %edx
|
||||
|
||||
movl (%esi,%edx,4),%ebx /* read least significant limb */
|
||||
xorl %eax,%eax
|
||||
shrdl %ebx,%eax /* compute carry limb */
|
||||
incl %edx
|
||||
jz Lend2
|
||||
pushl %eax /* push carry limb onto stack */
|
||||
testb $1,%dl
|
||||
jnz L2 /* enter loop in the middle */
|
||||
movl %ebx,%eax
|
||||
|
||||
ALIGN (3)
|
||||
Loop2: movl (%esi,%edx,4),%ebx /* load next higher limb */
|
||||
shrdl %ebx,%eax /* compute result limb */
|
||||
movl %eax,(%edi,%edx,4) /* store it */
|
||||
incl %edx
|
||||
L2: movl (%esi,%edx,4),%eax
|
||||
shrdl %eax,%ebx
|
||||
movl %ebx,(%edi,%edx,4)
|
||||
incl %edx
|
||||
jnz Loop2
|
||||
|
||||
shrl %cl,%eax /* compute most significant limb */
|
||||
movl %eax,(%edi) /* store it */
|
||||
|
||||
popl %eax /* pop carry limb */
|
||||
|
||||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
||||
Lend2: shrl %cl,%ebx /* compute most significant limb */
|
||||
movl %ebx,(%edi) /* store it */
|
||||
|
||||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
119
mpi/i386/mpih-sub1.S
Normal file
119
mpi/i386/mpih-sub1.S
Normal file
@ -0,0 +1,119 @@
|
||||
/* i80386 sub_n -- Sub 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_sub_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_sub_n)
|
||||
C_SYMBOL_NAME(mpihelp_sub_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
|
||||
sbbl (%edx),%eax
|
||||
movl %eax,(%edi)
|
||||
movl 4(%esi),%eax
|
||||
sbbl 4(%edx),%eax
|
||||
movl %eax,4(%edi)
|
||||
movl 8(%esi),%eax
|
||||
sbbl 8(%edx),%eax
|
||||
movl %eax,8(%edi)
|
||||
movl 12(%esi),%eax
|
||||
sbbl 12(%edx),%eax
|
||||
movl %eax,12(%edi)
|
||||
movl 16(%esi),%eax
|
||||
sbbl 16(%edx),%eax
|
||||
movl %eax,16(%edi)
|
||||
movl 20(%esi),%eax
|
||||
sbbl 20(%edx),%eax
|
||||
movl %eax,20(%edi)
|
||||
movl 24(%esi),%eax
|
||||
sbbl 24(%edx),%eax
|
||||
movl %eax,24(%edi)
|
||||
movl 28(%esi),%eax
|
||||
sbbl 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
|
||||
|
68
mpi/i386/syntax.h
Normal file
68
mpi/i386/syntax.h
Normal file
@ -0,0 +1,68 @@
|
||||
/* syntax.h -- Definitions for x86 syntax variations.
|
||||
*
|
||||
* Copyright (C) 1992, 1994, 1995, 1998,
|
||||
* 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#undef ALIGN
|
||||
|
||||
#if defined (BSD_SYNTAX) || defined (ELF_SYNTAX)
|
||||
#define R(r) %r
|
||||
#define MEM(base)(base)
|
||||
#define MEM_DISP(base,displacement)displacement(R(base))
|
||||
#define MEM_INDEX(base,index,size)(R(base),R(index),size)
|
||||
#ifdef __STDC__
|
||||
#define INSN1(mnemonic,size_suffix,dst)mnemonic##size_suffix dst
|
||||
#define INSN2(mnemonic,size_suffix,dst,src)mnemonic##size_suffix src,dst
|
||||
#else
|
||||
#define INSN1(mnemonic,size_suffix,dst)mnemonic/**/size_suffix dst
|
||||
#define INSN2(mnemonic,size_suffix,dst,src)mnemonic/**/size_suffix src,dst
|
||||
#endif
|
||||
#define TEXT .text
|
||||
#if defined (BSD_SYNTAX)
|
||||
#define ALIGN(log) .align log
|
||||
#endif
|
||||
#if defined (ELF_SYNTAX)
|
||||
#define ALIGN(log) .align 1<<log
|
||||
#endif
|
||||
#define GLOBL .globl
|
||||
#endif
|
||||
|
||||
#ifdef INTEL_SYNTAX
|
||||
#define R(r) r
|
||||
#define MEM(base)[base]
|
||||
#define MEM_DISP(base,displacement)[base+(displacement)]
|
||||
#define MEM_INDEX(base,index,size)[base+index*size]
|
||||
#define INSN1(mnemonic,size_suffix,dst)mnemonic dst
|
||||
#define INSN2(mnemonic,size_suffix,dst,src)mnemonic dst,src
|
||||
#define TEXT .text
|
||||
#define ALIGN(log) .align log
|
||||
#define GLOBL .globl
|
||||
#endif
|
||||
|
||||
#ifdef X86_BROKEN_ALIGN
|
||||
#undef ALIGN
|
||||
#define ALIGN(log) .align log,0x90
|
||||
#endif
|
26
mpi/i586/README
Normal file
26
mpi/i586/README
Normal file
@ -0,0 +1,26 @@
|
||||
This directory contains mpn functions optimized for Intel Pentium
|
||||
processors.
|
||||
|
||||
RELEVANT OPTIMIZATION ISSUES
|
||||
|
||||
1. Pentium doesn't allocate cache lines on writes, unlike most other modern
|
||||
processors. Since the functions in the mpn class do array writes, we have to
|
||||
handle allocating the destination cache lines by reading a word from it in the
|
||||
loops, to achieve the best performance.
|
||||
|
||||
2. Pairing of memory operations requires that the two issued operations refer
|
||||
to different cache banks. The simplest way to insure this is to read/write
|
||||
two words from the same object. If we make operations on different objects,
|
||||
they might or might not be to the same cache bank.
|
||||
|
||||
STATUS
|
||||
|
||||
1. mpn_lshift and mpn_rshift run at about 6 cycles/limb, but the Pentium
|
||||
documentation indicates that they should take only 43/8 = 5.375 cycles/limb,
|
||||
or 5 cycles/limb asymptotically.
|
||||
|
||||
2. mpn_add_n and mpn_sub_n run at asymptotically 2 cycles/limb. Due to loop
|
||||
overhead and other delays (cache refill?), they run at or near 2.5 cycles/limb.
|
||||
|
||||
3. mpn_mul_1, mpn_addmul_1, mpn_submul_1 all run 1 cycle faster than they
|
||||
should...
|
9
mpi/i586/distfiles
Normal file
9
mpi/i586/distfiles
Normal file
@ -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
|
||||
README
|
||||
|
135
mpi/i586/mpih-add1.S
Normal file
135
mpi/i586/mpih-add1.S
Normal file
@ -0,0 +1,135 @@
|
||||
/* i80586 add_n -- Add two limb vectors of the same length > 0 and store
|
||||
* sum in a third limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 1994, 1995, 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
|
||||
*/
|
||||
|
||||
|
||||
#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
|
||||
pushl %ebx
|
||||
pushl %ebp
|
||||
|
||||
movl 20(%esp),%edi /* res_ptr */
|
||||
movl 24(%esp),%esi /* s1_ptr */
|
||||
movl 28(%esp),%ebp /* s2_ptr */
|
||||
movl 32(%esp),%ecx /* size */
|
||||
|
||||
movl (%ebp),%ebx
|
||||
|
||||
decl %ecx
|
||||
movl %ecx,%edx
|
||||
shrl $3,%ecx
|
||||
andl $7,%edx
|
||||
testl %ecx,%ecx /* zero carry flag */
|
||||
jz Lend
|
||||
pushl %edx
|
||||
|
||||
ALIGN (3)
|
||||
Loop: movl 28(%edi),%eax /* fetch destination cache line */
|
||||
leal 32(%edi),%edi
|
||||
|
||||
L1: movl (%esi),%eax
|
||||
movl 4(%esi),%edx
|
||||
adcl %ebx,%eax
|
||||
movl 4(%ebp),%ebx
|
||||
adcl %ebx,%edx
|
||||
movl 8(%ebp),%ebx
|
||||
movl %eax,-32(%edi)
|
||||
movl %edx,-28(%edi)
|
||||
|
||||
L2: movl 8(%esi),%eax
|
||||
movl 12(%esi),%edx
|
||||
adcl %ebx,%eax
|
||||
movl 12(%ebp),%ebx
|
||||
adcl %ebx,%edx
|
||||
movl 16(%ebp),%ebx
|
||||
movl %eax,-24(%edi)
|
||||
movl %edx,-20(%edi)
|
||||
|
||||
L3: movl 16(%esi),%eax
|
||||
movl 20(%esi),%edx
|
||||
adcl %ebx,%eax
|
||||
movl 20(%ebp),%ebx
|
||||
adcl %ebx,%edx
|
||||
movl 24(%ebp),%ebx
|
||||
movl %eax,-16(%edi)
|
||||
movl %edx,-12(%edi)
|
||||
|
||||
L4: movl 24(%esi),%eax
|
||||
movl 28(%esi),%edx
|
||||
adcl %ebx,%eax
|
||||
movl 28(%ebp),%ebx
|
||||
adcl %ebx,%edx
|
||||
movl 32(%ebp),%ebx
|
||||
movl %eax,-8(%edi)
|
||||
movl %edx,-4(%edi)
|
||||
|
||||
leal 32(%esi),%esi
|
||||
leal 32(%ebp),%ebp
|
||||
decl %ecx
|
||||
jnz Loop
|
||||
|
||||
popl %edx
|
||||
Lend:
|
||||
decl %edx /* test %edx w/o clobbering carry */
|
||||
js Lend2
|
||||
incl %edx
|
||||
Loop2:
|
||||
leal 4(%edi),%edi
|
||||
movl (%esi),%eax
|
||||
adcl %ebx,%eax
|
||||
movl 4(%ebp),%ebx
|
||||
movl %eax,-4(%edi)
|
||||
leal 4(%esi),%esi
|
||||
leal 4(%ebp),%ebp
|
||||
decl %edx
|
||||
jnz Loop2
|
||||
Lend2:
|
||||
movl (%esi),%eax
|
||||
adcl %ebx,%eax
|
||||
movl %eax,(%edi)
|
||||
|
||||
sbbl %eax,%eax
|
||||
negl %eax
|
||||
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
||||
|
231
mpi/i586/mpih-lshift.S
Normal file
231
mpi/i586/mpih-lshift.S
Normal file
@ -0,0 +1,231 @@
|
||||
/* i80586 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
|
||||
pushl %ebp
|
||||
|
||||
movl 20(%esp),%edi /* res_ptr */
|
||||
movl 24(%esp),%esi /* s_ptr */
|
||||
movl 28(%esp),%ebp /* size */
|
||||
movl 32(%esp),%ecx /* cnt */
|
||||
|
||||
/* We can use faster code for shift-by-1 under certain conditions. */
|
||||
cmp $1,%ecx
|
||||
jne Lnormal
|
||||
leal 4(%esi),%eax
|
||||
cmpl %edi,%eax
|
||||
jnc Lspecial /* jump if s_ptr + 1 >= res_ptr */
|
||||
leal (%esi,%ebp,4),%eax
|
||||
cmpl %eax,%edi
|
||||
jnc Lspecial /* jump if res_ptr >= s_ptr + size */
|
||||
|
||||
Lnormal:
|
||||
leal -4(%edi,%ebp,4),%edi
|
||||
leal -4(%esi,%ebp,4),%esi
|
||||
|
||||
movl (%esi),%edx
|
||||
subl $4,%esi
|
||||
xorl %eax,%eax
|
||||
shldl %cl,%edx,%eax /* compute carry limb */
|
||||
pushl %eax /* push carry limb onto stack */
|
||||
|
||||
decl %ebp
|
||||
pushl %ebp
|
||||
shrl $3,%ebp
|
||||
jz Lend
|
||||
|
||||
movl (%edi),%eax /* fetch destination cache line */
|
||||
|
||||
ALIGN (2)
|
||||
Loop: movl -28(%edi),%eax /* fetch destination cache line */
|
||||
movl %edx,%ebx
|
||||
|
||||
movl (%esi),%eax
|
||||
movl -4(%esi),%edx
|
||||
shldl %cl,%eax,%ebx
|
||||
shldl %cl,%edx,%eax
|
||||
movl %ebx,(%edi)
|
||||
movl %eax,-4(%edi)
|
||||
|
||||
movl -8(%esi),%ebx
|
||||
movl -12(%esi),%eax
|
||||
shldl %cl,%ebx,%edx
|
||||
shldl %cl,%eax,%ebx
|
||||
movl %edx,-8(%edi)
|
||||
movl %ebx,-12(%edi)
|
||||
|
||||
movl -16(%esi),%edx
|
||||
movl -20(%esi),%ebx
|
||||
shldl %cl,%edx,%eax
|
||||
shldl %cl,%ebx,%edx
|
||||
movl %eax,-16(%edi)
|
||||
movl %edx,-20(%edi)
|
||||
|
||||
movl -24(%esi),%eax
|
||||
movl -28(%esi),%edx
|
||||
shldl %cl,%eax,%ebx
|
||||
shldl %cl,%edx,%eax
|
||||
movl %ebx,-24(%edi)
|
||||
movl %eax,-28(%edi)
|
||||
|
||||
subl $32,%esi
|
||||
subl $32,%edi
|
||||
decl %ebp
|
||||
jnz Loop
|
||||
|
||||
Lend: popl %ebp
|
||||
andl $7,%ebp
|
||||
jz Lend2
|
||||
Loop2: movl (%esi),%eax
|
||||
shldl %cl,%eax,%edx
|
||||
movl %edx,(%edi)
|
||||
movl %eax,%edx
|
||||
subl $4,%esi
|
||||
subl $4,%edi
|
||||
decl %ebp
|
||||
jnz Loop2
|
||||
|
||||
Lend2: shll %cl,%edx /* compute least significant limb */
|
||||
movl %edx,(%edi) /* store it */
|
||||
|
||||
popl %eax /* pop carry limb */
|
||||
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
||||
/* We loop from least significant end of the arrays, which is only
|
||||
permissable if the source and destination don't overlap, since the
|
||||
function is documented to work for overlapping source and destination.
|
||||
*/
|
||||
|
||||
Lspecial:
|
||||
movl (%esi),%edx
|
||||
addl $4,%esi
|
||||
|
||||
decl %ebp
|
||||
pushl %ebp
|
||||
shrl $3,%ebp
|
||||
|
||||
addl %edx,%edx
|
||||
incl %ebp
|
||||
decl %ebp
|
||||
jz LLend
|
||||
|
||||
movl (%edi),%eax /* fetch destination cache line */
|
||||
|
||||
ALIGN (2)
|
||||
LLoop: movl 28(%edi),%eax /* fetch destination cache line */
|
||||
movl %edx,%ebx
|
||||
|
||||
movl (%esi),%eax
|
||||
movl 4(%esi),%edx
|
||||
adcl %eax,%eax
|
||||
movl %ebx,(%edi)
|
||||
adcl %edx,%edx
|
||||
movl %eax,4(%edi)
|
||||
|
||||
movl 8(%esi),%ebx
|
||||
movl 12(%esi),%eax
|
||||
adcl %ebx,%ebx
|
||||
movl %edx,8(%edi)
|
||||
adcl %eax,%eax
|
||||
movl %ebx,12(%edi)
|
||||
|
||||
movl 16(%esi),%edx
|
||||
movl 20(%esi),%ebx
|
||||
adcl %edx,%edx
|
||||
movl %eax,16(%edi)
|
||||
adcl %ebx,%ebx
|
||||
movl %edx,20(%edi)
|
||||
|
||||
movl 24(%esi),%eax
|
||||
movl 28(%esi),%edx
|
||||
adcl %eax,%eax
|
||||
movl %ebx,24(%edi)
|
||||
adcl %edx,%edx
|
||||
movl %eax,28(%edi)
|
||||
|
||||
leal 32(%esi),%esi /* use leal not to clobber carry */
|
||||
leal 32(%edi),%edi
|
||||
decl %ebp
|
||||
jnz LLoop
|
||||
|
||||
LLend: popl %ebp
|
||||
sbbl %eax,%eax /* save carry in %eax */
|
||||
andl $7,%ebp
|
||||
jz LLend2
|
||||
addl %eax,%eax /* restore carry from eax */
|
||||
LLoop2: movl %edx,%ebx
|
||||
movl (%esi),%edx
|
||||
adcl %edx,%edx
|
||||
movl %ebx,(%edi)
|
||||
|
||||
leal 4(%esi),%esi /* use leal not to clobber carry */
|
||||
leal 4(%edi),%edi
|
||||
decl %ebp
|
||||
jnz LLoop2
|
||||
|
||||
jmp LL1
|
||||
LLend2: addl %eax,%eax /* restore carry from eax */
|
||||
LL1: movl %edx,(%edi) /* store last limb */
|
||||
|
||||
sbbl %eax,%eax
|
||||
negl %eax
|
||||
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
||||
|
91
mpi/i586/mpih-mul1.S
Normal file
91
mpi/i586/mpih-mul1.S
Normal file
@ -0,0 +1,91 @@
|
||||
/* i80586 mul_1 -- Multiply a limb vector with a limb and store
|
||||
* the result in a second limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 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 "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(adc,l ,R(ebx),$0)
|
||||
INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
|
||||
|
||||
INSN1(mul,l ,R(s2_limb))
|
||||
|
||||
INSN2(add,l ,R(ebx),R(eax))
|
||||
|
||||
INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx))
|
||||
INSN1(inc,l ,R(size))
|
||||
|
||||
INSN2(mov,l ,R(ebx),R(edx))
|
||||
INSN1(jnz, ,Loop)
|
||||
|
||||
INSN2(adc,l ,R(ebx),$0)
|
||||
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
|
||||
|
95
mpi/i586/mpih-mul2.S
Normal file
95
mpi/i586/mpih-mul2.S
Normal file
@ -0,0 +1,95 @@
|
||||
/* i80586 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: INSN2(adc,l ,R(ebx),$0)
|
||||
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 ,R(ebx),MEM_INDEX(res_ptr,size,4))
|
||||
|
||||
INSN2(adc,l ,R(edx),$0)
|
||||
INSN2(add,l ,R(ebx),R(eax))
|
||||
|
||||
INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx))
|
||||
INSN1(inc,l ,R(size))
|
||||
|
||||
INSN2(mov,l ,R(ebx),R(edx))
|
||||
INSN1(jnz, ,Loop)
|
||||
|
||||
INSN2(adc,l ,R(ebx),$0)
|
||||
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
|
||||
|
95
mpi/i586/mpih-mul3.S
Normal file
95
mpi/i586/mpih-mul3.S
Normal file
@ -0,0 +1,95 @@
|
||||
/* i80586 submul_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_submul_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_submul_1)
|
||||
C_SYMBOL_NAME(mpihelp_submul_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(adc,l ,R(ebx),$0)
|
||||
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 ,R(ebx),MEM_INDEX(res_ptr,size,4))
|
||||
|
||||
INSN2(adc,l ,R(edx),$0)
|
||||
INSN2(sub,l ,R(ebx),R(eax))
|
||||
|
||||
INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx))
|
||||
INSN1(inc,l ,R(size))
|
||||
|
||||
INSN2(mov,l ,R(ebx),R(edx))
|
||||
INSN1(jnz, ,Loop)
|
||||
|
||||
INSN2(adc,l ,R(ebx),$0)
|
||||
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
|
||||
|
230
mpi/i586/mpih-rshift.S
Normal file
230
mpi/i586/mpih-rshift.S
Normal file
@ -0,0 +1,230 @@
|
||||
/* i80586 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
|
||||
*
|
||||
* 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_rshift( 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_rshift)
|
||||
C_SYMBOL_NAME(mpihelp_rshift:)
|
||||
pushl %edi
|
||||
pushl %esi
|
||||
pushl %ebx
|
||||
pushl %ebp
|
||||
|
||||
movl 20(%esp),%edi /* res_ptr */
|
||||
movl 24(%esp),%esi /* s_ptr */
|
||||
movl 28(%esp),%ebp /* size */
|
||||
movl 32(%esp),%ecx /* cnt */
|
||||
|
||||
/* We can use faster code for shift-by-1 under certain conditions. */
|
||||
cmp $1,%ecx
|
||||
jne Rnormal
|
||||
leal 4(%edi),%eax
|
||||
cmpl %esi,%eax
|
||||
jnc Rspecial /* jump if res_ptr + 1 >= s_ptr */
|
||||
leal (%edi,%ebp,4),%eax
|
||||
cmpl %eax,%esi
|
||||
jnc Rspecial /* jump if s_ptr >= res_ptr + size */
|
||||
|
||||
Rnormal:
|
||||
movl (%esi),%edx
|
||||
addl $4,%esi
|
||||
xorl %eax,%eax
|
||||
shrdl %cl,%edx,%eax /* compute carry limb */
|
||||
pushl %eax /* push carry limb onto stack */
|
||||
|
||||
decl %ebp
|
||||
pushl %ebp
|
||||
shrl $3,%ebp
|
||||
jz Rend
|
||||
|
||||
movl (%edi),%eax /* fetch destination cache line */
|
||||
|
||||
ALIGN (2)
|
||||
Roop: movl 28(%edi),%eax /* fetch destination cache line */
|
||||
movl %edx,%ebx
|
||||
|
||||
movl (%esi),%eax
|
||||
movl 4(%esi),%edx
|
||||
shrdl %cl,%eax,%ebx
|
||||
shrdl %cl,%edx,%eax
|
||||
movl %ebx,(%edi)
|
||||
movl %eax,4(%edi)
|
||||
|
||||
movl 8(%esi),%ebx
|
||||
movl 12(%esi),%eax
|
||||
shrdl %cl,%ebx,%edx
|
||||
shrdl %cl,%eax,%ebx
|
||||
movl %edx,8(%edi)
|
||||
movl %ebx,12(%edi)
|
||||
|
||||
movl 16(%esi),%edx
|
||||
movl 20(%esi),%ebx
|
||||
shrdl %cl,%edx,%eax
|
||||
shrdl %cl,%ebx,%edx
|
||||
movl %eax,16(%edi)
|
||||
movl %edx,20(%edi)
|
||||
|
||||
movl 24(%esi),%eax
|
||||
movl 28(%esi),%edx
|
||||
shrdl %cl,%eax,%ebx
|
||||
shrdl %cl,%edx,%eax
|
||||
movl %ebx,24(%edi)
|
||||
movl %eax,28(%edi)
|
||||
|
||||
addl $32,%esi
|
||||
addl $32,%edi
|
||||
decl %ebp
|
||||
jnz Roop
|
||||
|
||||
Rend: popl %ebp
|
||||
andl $7,%ebp
|
||||
jz Rend2
|
||||
Roop2: movl (%esi),%eax
|
||||
shrdl %cl,%eax,%edx /* compute result limb */
|
||||
movl %edx,(%edi)
|
||||
movl %eax,%edx
|
||||
addl $4,%esi
|
||||
addl $4,%edi
|
||||
decl %ebp
|
||||
jnz Roop2
|
||||
|
||||
Rend2: shrl %cl,%edx /* compute most significant limb */
|
||||
movl %edx,(%edi) /* store it */
|
||||
|
||||
popl %eax /* pop carry limb */
|
||||
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
||||
/* We loop from least significant end of the arrays, which is only
|
||||
permissable if the source and destination don't overlap, since the
|
||||
function is documented to work for overlapping source and destination.
|
||||
*/
|
||||
|
||||
Rspecial:
|
||||
leal -4(%edi,%ebp,4),%edi
|
||||
leal -4(%esi,%ebp,4),%esi
|
||||
|
||||
movl (%esi),%edx
|
||||
subl $4,%esi
|
||||
|
||||
decl %ebp
|
||||
pushl %ebp
|
||||
shrl $3,%ebp
|
||||
|
||||
shrl $1,%edx
|
||||
incl %ebp
|
||||
decl %ebp
|
||||
jz RLend
|
||||
|
||||
movl (%edi),%eax /* fetch destination cache line */
|
||||
|
||||
ALIGN (2)
|
||||
RLoop: movl -28(%edi),%eax /* fetch destination cache line */
|
||||
movl %edx,%ebx
|
||||
|
||||
movl (%esi),%eax
|
||||
movl -4(%esi),%edx
|
||||
rcrl $1,%eax
|
||||
movl %ebx,(%edi)
|
||||
rcrl $1,%edx
|
||||
movl %eax,-4(%edi)
|
||||
|
||||
movl -8(%esi),%ebx
|
||||
movl -12(%esi),%eax
|
||||
rcrl $1,%ebx
|
||||
movl %edx,-8(%edi)
|
||||
rcrl $1,%eax
|
||||
movl %ebx,-12(%edi)
|
||||
|
||||
movl -16(%esi),%edx
|
||||
movl -20(%esi),%ebx
|
||||
rcrl $1,%edx
|
||||
movl %eax,-16(%edi)
|
||||
rcrl $1,%ebx
|
||||
movl %edx,-20(%edi)
|
||||
|
||||
movl -24(%esi),%eax
|
||||
movl -28(%esi),%edx
|
||||
rcrl $1,%eax
|
||||
movl %ebx,-24(%edi)
|
||||
rcrl $1,%edx
|
||||
movl %eax,-28(%edi)
|
||||
|
||||
leal -32(%esi),%esi /* use leal not to clobber carry */
|
||||
leal -32(%edi),%edi
|
||||
decl %ebp
|
||||
jnz RLoop
|
||||
|
||||
RLend: popl %ebp
|
||||
sbbl %eax,%eax /* save carry in %eax */
|
||||
andl $7,%ebp
|
||||
jz RLend2
|
||||
addl %eax,%eax /* restore carry from eax */
|
||||
RLoop2: movl %edx,%ebx
|
||||
movl (%esi),%edx
|
||||
rcrl $1,%edx
|
||||
movl %ebx,(%edi)
|
||||
|
||||
leal -4(%esi),%esi /* use leal not to clobber carry */
|
||||
leal -4(%edi),%edi
|
||||
decl %ebp
|
||||
jnz RLoop2
|
||||
|
||||
jmp RL1
|
||||
RLend2: addl %eax,%eax /* restore carry from eax */
|
||||
RL1: movl %edx,(%edi) /* store last limb */
|
||||
|
||||
movl $0,%eax
|
||||
rcrl $1,%eax
|
||||
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
144
mpi/i586/mpih-sub1.S
Normal file
144
mpi/i586/mpih-sub1.S
Normal file
@ -0,0 +1,144 @@
|
||||
/* i80586 sub_n -- Sub two limb vectors of the same length > 0 and store
|
||||
* sum in a third 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
|
||||
*
|
||||
* 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, (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_sub_n)
|
||||
C_SYMBOL_NAME(mpihelp_sub_n:)
|
||||
|
||||
pushl %edi
|
||||
pushl %esi
|
||||
pushl %ebx
|
||||
pushl %ebp
|
||||
|
||||
movl 20(%esp),%edi /* res_ptr */
|
||||
movl 24(%esp),%esi /* s1_ptr */
|
||||
movl 28(%esp),%ebp /* s2_ptr */
|
||||
movl 32(%esp),%ecx /* size */
|
||||
|
||||
movl (%ebp),%ebx
|
||||
|
||||
decl %ecx
|
||||
movl %ecx,%edx
|
||||
shrl $3,%ecx
|
||||
andl $7,%edx
|
||||
testl %ecx,%ecx /* zero carry flag */
|
||||
jz Lend
|
||||
pushl %edx
|
||||
|
||||
ALIGN (3)
|
||||
Loop: movl 28(%edi),%eax /* fetch destination cache line */
|
||||
leal 32(%edi),%edi
|
||||
|
||||
L1: movl (%esi),%eax
|
||||
movl 4(%esi),%edx
|
||||
sbbl %ebx,%eax
|
||||
movl 4(%ebp),%ebx
|
||||
sbbl %ebx,%edx
|
||||
movl 8(%ebp),%ebx
|
||||
movl %eax,-32(%edi)
|
||||
movl %edx,-28(%edi)
|
||||
|
||||
L2: movl 8(%esi),%eax
|
||||
movl 12(%esi),%edx
|
||||
sbbl %ebx,%eax
|
||||
movl 12(%ebp),%ebx
|
||||
sbbl %ebx,%edx
|
||||
movl 16(%ebp),%ebx
|
||||
movl %eax,-24(%edi)
|
||||
movl %edx,-20(%edi)
|
||||
|
||||
L3: movl 16(%esi),%eax
|
||||
movl 20(%esi),%edx
|
||||
sbbl %ebx,%eax
|
||||
movl 20(%ebp),%ebx
|
||||
sbbl %ebx,%edx
|
||||
movl 24(%ebp),%ebx
|
||||
movl %eax,-16(%edi)
|
||||
movl %edx,-12(%edi)
|
||||
|
||||
L4: movl 24(%esi),%eax
|
||||
movl 28(%esi),%edx
|
||||
sbbl %ebx,%eax
|
||||
movl 28(%ebp),%ebx
|
||||
sbbl %ebx,%edx
|
||||
movl 32(%ebp),%ebx
|
||||
movl %eax,-8(%edi)
|
||||
movl %edx,-4(%edi)
|
||||
|
||||
leal 32(%esi),%esi
|
||||
leal 32(%ebp),%ebp
|
||||
decl %ecx
|
||||
jnz Loop
|
||||
|
||||
popl %edx
|
||||
Lend:
|
||||
decl %edx /* test %edx w/o clobbering carry */
|
||||
js Lend2
|
||||
incl %edx
|
||||
Loop2:
|
||||
leal 4(%edi),%edi
|
||||
movl (%esi),%eax
|
||||
sbbl %ebx,%eax
|
||||
movl 4(%ebp),%ebx
|
||||
movl %eax,-4(%edi)
|
||||
leal 4(%esi),%esi
|
||||
leal 4(%ebp),%ebp
|
||||
decl %edx
|
||||
jnz Loop2
|
||||
Lend2:
|
||||
movl (%esi),%eax
|
||||
sbbl %ebx,%eax
|
||||
movl %eax,(%edi)
|
||||
|
||||
sbbl %eax,%eax
|
||||
negl %eax
|
||||
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
1499
mpi/longlong.h
Normal file
1499
mpi/longlong.h
Normal file
File diff suppressed because it is too large
Load Diff
8
mpi/m68k/distfiles
Normal file
8
mpi/m68k/distfiles
Normal file
@ -0,0 +1,8 @@
|
||||
syntax.h
|
||||
mpih-lshift.S
|
||||
mpih-rshift.S
|
||||
mpih-add1.S
|
||||
mpih-sub1.S
|
||||
|
||||
|
||||
|
3
mpi/m68k/mc68020/distfiles
Normal file
3
mpi/m68k/mc68020/distfiles
Normal file
@ -0,0 +1,3 @@
|
||||
mpih-mul1.S
|
||||
mpih-mul2.S
|
||||
mpih-mul3.S
|
106
mpi/m68k/mc68020/mpih-mul1.S
Normal file
106
mpi/m68k/mc68020/mpih-mul1.S
Normal file
@ -0,0 +1,106 @@
|
||||
/* mc68020 __mpn_mul_1 -- Multiply a limb vector with a limb and store
|
||||
* the result in a second limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 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 "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)
|
||||
*/
|
||||
|
||||
|
||||
TEXT
|
||||
ALIGN
|
||||
GLOBL C_SYMBOL_NAME(mpihelp_mul_1)
|
||||
|
||||
C_SYMBOL_NAME(mpihelp_mul_1:)
|
||||
PROLOG(mpihelp_mul_1)
|
||||
|
||||
#define res_ptr a0
|
||||
#define s1_ptr a1
|
||||
#define s1_size d2
|
||||
#define s2_limb d4
|
||||
|
||||
/* Save used registers on the stack. */
|
||||
moveml R(d2)-R(d4),MEM_PREDEC(sp)
|
||||
#if 0
|
||||
movel R(d2),MEM_PREDEC(sp)
|
||||
movel R(d3),MEM_PREDEC(sp)
|
||||
movel R(d4),MEM_PREDEC(sp)
|
||||
#endif
|
||||
|
||||
/* Copy the arguments to registers. Better use movem? */
|
||||
movel MEM_DISP(sp,16),R(res_ptr)
|
||||
movel MEM_DISP(sp,20),R(s1_ptr)
|
||||
movel MEM_DISP(sp,24),R(s1_size)
|
||||
movel MEM_DISP(sp,28),R(s2_limb)
|
||||
|
||||
eorw #1,R(s1_size)
|
||||
clrl R(d1)
|
||||
lsrl #1,R(s1_size)
|
||||
bcc L(L1)
|
||||
subql #1,R(s1_size)
|
||||
subl R(d0),R(d0) /* (d0,cy) <= (0,0) */
|
||||
|
||||
L(Loop:)
|
||||
movel MEM_POSTINC(s1_ptr),R(d3)
|
||||
mulul R(s2_limb),R(d1):R(d3)
|
||||
addxl R(d0),R(d3)
|
||||
movel R(d3),MEM_POSTINC(res_ptr)
|
||||
L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
|
||||
mulul R(s2_limb),R(d0):R(d3)
|
||||
addxl R(d1),R(d3)
|
||||
movel R(d3),MEM_POSTINC(res_ptr)
|
||||
|
||||
dbf R(s1_size),L(Loop)
|
||||
clrl R(d3)
|
||||
addxl R(d3),R(d0)
|
||||
subl #0x10000,R(s1_size)
|
||||
bcc L(Loop)
|
||||
|
||||
/* Restore used registers from stack frame. */
|
||||
moveml MEM_POSTINC(sp),R(d2)-R(d4)
|
||||
#if 0
|
||||
movel MEM_POSTINC(sp),R(d4)
|
||||
movel MEM_POSTINC(sp),R(d3)
|
||||
movel MEM_POSTINC(sp),R(d2)
|
||||
#endif
|
||||
rts
|
||||
EPILOG(mpihelp_mul_1)
|
||||
|
||||
|
96
mpi/m68k/mc68020/mpih-mul2.S
Normal file
96
mpi/m68k/mc68020/mpih-mul2.S
Normal file
@ -0,0 +1,96 @@
|
||||
/* mc68020 __mpn_addmul_1 -- Multiply a limb vector with a limb and add
|
||||
* the result to a second limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 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 "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)
|
||||
*/
|
||||
|
||||
|
||||
TEXT
|
||||
ALIGN
|
||||
GLOBL C_SYMBOL_NAME(mpihelp_addmul_1)
|
||||
|
||||
C_SYMBOL_NAME(mpihelp_addmul_1:)
|
||||
PROLOG(mpihelp_addmul_1)
|
||||
|
||||
#define res_ptr a0
|
||||
#define s1_ptr a1
|
||||
#define s1_size d2
|
||||
#define s2_limb d4
|
||||
|
||||
/* Save used registers on the stack. */
|
||||
moveml R(d2)-R(d5),MEM_PREDEC(sp)
|
||||
|
||||
/* Copy the arguments to registers. Better use movem? */
|
||||
movel MEM_DISP(sp,20),R(res_ptr)
|
||||
movel MEM_DISP(sp,24),R(s1_ptr)
|
||||
movel MEM_DISP(sp,28),R(s1_size)
|
||||
movel MEM_DISP(sp,32),R(s2_limb)
|
||||
|
||||
eorw #1,R(s1_size)
|
||||
clrl R(d1)
|
||||
clrl R(d5)
|
||||
lsrl #1,R(s1_size)
|
||||
bcc L(L1)
|
||||
subql #1,R(s1_size)
|
||||
subl R(d0),R(d0) /* (d0,cy) <= (0,0) */
|
||||
|
||||
L(Loop:)
|
||||
movel MEM_POSTINC(s1_ptr),R(d3)
|
||||
mulul R(s2_limb),R(d1):R(d3)
|
||||
addxl R(d0),R(d3)
|
||||
addxl R(d5),R(d1)
|
||||
addl R(d3),MEM_POSTINC(res_ptr)
|
||||
L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
|
||||
mulul R(s2_limb),R(d0):R(d3)
|
||||
addxl R(d1),R(d3)
|
||||
addxl R(d5),R(d0)
|
||||
addl R(d3),MEM_POSTINC(res_ptr)
|
||||
|
||||
dbf R(s1_size),L(Loop)
|
||||
addxl R(d5),R(d0)
|
||||
subl #0x10000,R(s1_size)
|
||||
bcc L(Loop)
|
||||
|
||||
/* Restore used registers from stack frame. */
|
||||
moveml MEM_POSTINC(sp),R(d2)-R(d5)
|
||||
|
||||
rts
|
||||
EPILOG(mpihelp_addmul_1)
|
||||
|
99
mpi/m68k/mc68020/mpih-mul3.S
Normal file
99
mpi/m68k/mc68020/mpih-mul3.S
Normal file
@ -0,0 +1,99 @@
|
||||
/* mc68020 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract
|
||||
* the result from a second limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 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 "sysdep.h"
|
||||
#include "asm-syntax.h"
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_submul_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)
|
||||
*/
|
||||
|
||||
|
||||
TEXT
|
||||
ALIGN
|
||||
GLOBL C_SYMBOL_NAME(mpihelp_submul_1)
|
||||
|
||||
C_SYMBOL_NAME(mpihelp_submul_1:)
|
||||
PROLOG(mpihelp_submul_1)
|
||||
|
||||
#define res_ptr a0
|
||||
#define s1_ptr a1
|
||||
#define s1_size d2
|
||||
#define s2_limb d4
|
||||
|
||||
/* Save used registers on the stack. */
|
||||
moveml R(d2)-R(d5),MEM_PREDEC(sp)
|
||||
|
||||
/* Copy the arguments to registers. Better use movem? */
|
||||
movel MEM_DISP(sp,20),R(res_ptr)
|
||||
movel MEM_DISP(sp,24),R(s1_ptr)
|
||||
movel MEM_DISP(sp,28),R(s1_size)
|
||||
movel MEM_DISP(sp,32),R(s2_limb)
|
||||
|
||||
eorw #1,R(s1_size)
|
||||
clrl R(d1)
|
||||
clrl R(d5)
|
||||
lsrl #1,R(s1_size)
|
||||
bcc L(L1)
|
||||
subql #1,R(s1_size)
|
||||
subl R(d0),R(d0) /* (d0,cy) <= (0,0) */
|
||||
|
||||
L(Loop:)
|
||||
movel MEM_POSTINC(s1_ptr),R(d3)
|
||||
mulul R(s2_limb),R(d1):R(d3)
|
||||
addxl R(d0),R(d3)
|
||||
addxl R(d5),R(d1)
|
||||
subl R(d3),MEM_POSTINC(res_ptr)
|
||||
L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
|
||||
mulul R(s2_limb),R(d0):R(d3)
|
||||
addxl R(d1),R(d3)
|
||||
addxl R(d5),R(d0)
|
||||
subl R(d3),MEM_POSTINC(res_ptr)
|
||||
|
||||
dbf R(s1_size),L(Loop)
|
||||
addxl R(d5),R(d0)
|
||||
subl #0x10000,R(s1_size)
|
||||
bcc L(Loop)
|
||||
|
||||
/* Restore used registers from stack frame. */
|
||||
moveml MEM_POSTINC(sp),R(d2)-R(d5)
|
||||
|
||||
rts
|
||||
EPILOG(mpihelp_submul_1)
|
||||
|
||||
|
94
mpi/m68k/mpih-add1.S
Normal file
94
mpi/m68k/mpih-add1.S
Normal file
@ -0,0 +1,94 @@
|
||||
/* mc68020 __mpn_add_n -- Add two limb vectors of the same length > 0 and store
|
||||
* sum in a third limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 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 "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 + 16)
|
||||
* mpi_size_t size) (sp + 12)
|
||||
*/
|
||||
|
||||
|
||||
TEXT
|
||||
ALIGN
|
||||
GLOBL C_SYMBOL_NAME(mpihelp_add_n)
|
||||
|
||||
C_SYMBOL_NAME(mpihelp_add_n:)
|
||||
PROLOG(mpihelp_add_n)
|
||||
/* Save used registers on the stack. */
|
||||
movel R(d2),MEM_PREDEC(sp)
|
||||
movel R(a2),MEM_PREDEC(sp)
|
||||
|
||||
/* Copy the arguments to registers. Better use movem? */
|
||||
movel MEM_DISP(sp,12),R(a2)
|
||||
movel MEM_DISP(sp,16),R(a0)
|
||||
movel MEM_DISP(sp,20),R(a1)
|
||||
movel MEM_DISP(sp,24),R(d2)
|
||||
|
||||
eorw #1,R(d2)
|
||||
lsrl #1,R(d2)
|
||||
bcc L(L1)
|
||||
subql #1,R(d2) /* clears cy as side effect */
|
||||
|
||||
L(Loop:)
|
||||
movel MEM_POSTINC(a0),R(d0)
|
||||
movel MEM_POSTINC(a1),R(d1)
|
||||
addxl R(d1),R(d0)
|
||||
movel R(d0),MEM_POSTINC(a2)
|
||||
L(L1:) movel MEM_POSTINC(a0),R(d0)
|
||||
movel MEM_POSTINC(a1),R(d1)
|
||||
addxl R(d1),R(d0)
|
||||
movel R(d0),MEM_POSTINC(a2)
|
||||
|
||||
dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */
|
||||
subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */
|
||||
subl #0x10000,R(d2)
|
||||
bcs L(L2)
|
||||
addl R(d0),R(d0) /* restore cy */
|
||||
bra L(Loop)
|
||||
|
||||
L(L2:)
|
||||
negl R(d0)
|
||||
|
||||
/* Restore used registers from stack frame. */
|
||||
movel MEM_POSTINC(sp),R(a2)
|
||||
movel MEM_POSTINC(sp),R(d2)
|
||||
|
||||
rts
|
||||
EPILOG(mpihelp_add_n)
|
||||
|
||||
|
166
mpi/m68k/mpih-lshift.S
Normal file
166
mpi/m68k/mpih-lshift.S
Normal file
@ -0,0 +1,166 @@
|
||||
/* mc68020 lshift -- Shift left a low-level natural-number integer.
|
||||
*
|
||||
* Copyright (C) 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 "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)
|
||||
*/
|
||||
|
||||
#define res_ptr a1
|
||||
#define s_ptr a0
|
||||
#define s_size d6
|
||||
#define cnt d4
|
||||
|
||||
TEXT
|
||||
ALIGN
|
||||
GLOBL C_SYMBOL_NAME(mpihelp_lshift)
|
||||
|
||||
C_SYMBOL_NAME(mpihelp_lshift:)
|
||||
PROLOG(mpihelp_lshift)
|
||||
|
||||
/* Save used registers on the stack. */
|
||||
moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
|
||||
|
||||
/* Copy the arguments to registers. */
|
||||
movel MEM_DISP(sp,28),R(res_ptr)
|
||||
movel MEM_DISP(sp,32),R(s_ptr)
|
||||
movel MEM_DISP(sp,36),R(s_size)
|
||||
movel MEM_DISP(sp,40),R(cnt)
|
||||
|
||||
moveql #1,R(d5)
|
||||
cmpl R(d5),R(cnt)
|
||||
bne L(Lnormal)
|
||||
cmpl R(s_ptr),R(res_ptr)
|
||||
bls L(Lspecial) /* jump if s_ptr >= res_ptr */
|
||||
#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
|
||||
lea MEM_INDX1(s_ptr,s_size,l,4),R(a2)
|
||||
#else /* not mc68020 */
|
||||
movel R(s_size),R(d0)
|
||||
asll #2,R(d0)
|
||||
lea MEM_INDX(s_ptr,d0,l),R(a2)
|
||||
#endif
|
||||
cmpl R(res_ptr),R(a2)
|
||||
bls L(Lspecial) /* jump if res_ptr >= s_ptr + s_size */
|
||||
|
||||
L(Lnormal:)
|
||||
moveql #32,R(d5)
|
||||
subl R(cnt),R(d5)
|
||||
|
||||
#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
|
||||
lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
|
||||
lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
|
||||
#else /* not mc68000 */
|
||||
movel R(s_size),R(d0)
|
||||
asll #2,R(d0)
|
||||
addl R(s_size),R(s_ptr)
|
||||
addl R(s_size),R(res_ptr)
|
||||
#endif
|
||||
movel MEM_PREDEC(s_ptr),R(d2)
|
||||
movel R(d2),R(d0)
|
||||
lsrl R(d5),R(d0) /* compute carry limb */
|
||||
|
||||
lsll R(cnt),R(d2)
|
||||
movel R(d2),R(d1)
|
||||
subql #1,R(s_size)
|
||||
beq L(Lend)
|
||||
lsrl #1,R(s_size)
|
||||
bcs L(L1)
|
||||
subql #1,R(s_size)
|
||||
|
||||
L(Loop:)
|
||||
movel MEM_PREDEC(s_ptr),R(d2)
|
||||
movel R(d2),R(d3)
|
||||
lsrl R(d5),R(d3)
|
||||
orl R(d3),R(d1)
|
||||
movel R(d1),MEM_PREDEC(res_ptr)
|
||||
lsll R(cnt),R(d2)
|
||||
L(L1:)
|
||||
movel MEM_PREDEC(s_ptr),R(d1)
|
||||
movel R(d1),R(d3)
|
||||
lsrl R(d5),R(d3)
|
||||
orl R(d3),R(d2)
|
||||
movel R(d2),MEM_PREDEC(res_ptr)
|
||||
lsll R(cnt),R(d1)
|
||||
|
||||
dbf R(s_size),L(Loop)
|
||||
subl #0x10000,R(s_size)
|
||||
bcc L(Loop)
|
||||
|
||||
L(Lend:)
|
||||
movel R(d1),MEM_PREDEC(res_ptr) /* store least significant limb */
|
||||
|
||||
/* Restore used registers from stack frame. */
|
||||
moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
|
||||
rts
|
||||
|
||||
/* We loop from least significant end of the arrays, which is only
|
||||
permissable if the source and destination don't overlap, since the
|
||||
function is documented to work for overlapping source and destination. */
|
||||
|
||||
L(Lspecial:)
|
||||
clrl R(d0) /* initialize carry */
|
||||
eorw #1,R(s_size)
|
||||
lsrl #1,R(s_size)
|
||||
bcc L(LL1)
|
||||
subql #1,R(s_size)
|
||||
|
||||
L(LLoop:)
|
||||
movel MEM_POSTINC(s_ptr),R(d2)
|
||||
addxl R(d2),R(d2)
|
||||
movel R(d2),MEM_POSTINC(res_ptr)
|
||||
L(LL1:)
|
||||
movel MEM_POSTINC(s_ptr),R(d2)
|
||||
addxl R(d2),R(d2)
|
||||
movel R(d2),MEM_POSTINC(res_ptr)
|
||||
|
||||
dbf R(s_size),L(LLoop)
|
||||
addxl R(d0),R(d0) /* save cy in lsb */
|
||||
subl #0x10000,R(s_size)
|
||||
bcs L(LLend)
|
||||
lsrl #1,R(d0) /* restore cy */
|
||||
bra L(LLoop)
|
||||
|
||||
L(LLend:)
|
||||
/* Restore used registers from stack frame. */
|
||||
moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
|
||||
rts
|
||||
EPILOG(mpihelp_lshift)
|
||||
|
||||
|
||||
|
||||
|
||||
|
164
mpi/m68k/mpih-rshift.S
Normal file
164
mpi/m68k/mpih-rshift.S
Normal file
@ -0,0 +1,164 @@
|
||||
/* mc68020 rshift -- Shift right a low-level natural-number integer.
|
||||
*
|
||||
* Copyright (C) 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 "sysdep.h"
|
||||
#include "asm-syntax.h"
|
||||
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_rshift( mpi_ptr_t wp, (sp + 4)
|
||||
* mpi_ptr_t up, (sp + 8)
|
||||
* mpi_size_t usize, (sp + 12)
|
||||
* unsigned cnt) (sp + 16)
|
||||
*/
|
||||
|
||||
#define res_ptr a1
|
||||
#define s_ptr a0
|
||||
#define s_size d6
|
||||
#define cnt d4
|
||||
|
||||
TEXT
|
||||
ALIGN
|
||||
GLOBL C_SYMBOL_NAME(mpihelp_rshift)
|
||||
|
||||
C_SYMBOL_NAME(mpihelp_rshift:)
|
||||
PROLOG(mpihelp_rshift)
|
||||
/* Save used registers on the stack. */
|
||||
moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
|
||||
|
||||
/* Copy the arguments to registers. */
|
||||
movel MEM_DISP(sp,28),R(res_ptr)
|
||||
movel MEM_DISP(sp,32),R(s_ptr)
|
||||
movel MEM_DISP(sp,36),R(s_size)
|
||||
movel MEM_DISP(sp,40),R(cnt)
|
||||
|
||||
moveql #1,R(d5)
|
||||
cmpl R(d5),R(cnt)
|
||||
bne L(Rnormal)
|
||||
cmpl R(res_ptr),R(s_ptr)
|
||||
bls L(Rspecial) /* jump if res_ptr >= s_ptr */
|
||||
#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
|
||||
lea MEM_INDX1(res_ptr,s_size,l,4),R(a2)
|
||||
#else /* not mc68020 */
|
||||
movel R(s_size),R(d0)
|
||||
asll #2,R(d0)
|
||||
lea MEM_INDX(res_ptr,d0,l),R(a2)
|
||||
#endif
|
||||
cmpl R(s_ptr),R(a2)
|
||||
bls L(Rspecial) /* jump if s_ptr >= res_ptr + s_size */
|
||||
|
||||
L(Rnormal:)
|
||||
moveql #32,R(d5)
|
||||
subl R(cnt),R(d5)
|
||||
movel MEM_POSTINC(s_ptr),R(d2)
|
||||
movel R(d2),R(d0)
|
||||
lsll R(d5),R(d0) /* compute carry limb */
|
||||
|
||||
lsrl R(cnt),R(d2)
|
||||
movel R(d2),R(d1)
|
||||
subql #1,R(s_size)
|
||||
beq L(Rend)
|
||||
lsrl #1,R(s_size)
|
||||
bcs L(R1)
|
||||
subql #1,R(s_size)
|
||||
|
||||
L(Roop:)
|
||||
movel MEM_POSTINC(s_ptr),R(d2)
|
||||
movel R(d2),R(d3)
|
||||
lsll R(d5),R(d3)
|
||||
orl R(d3),R(d1)
|
||||
movel R(d1),MEM_POSTINC(res_ptr)
|
||||
lsrl R(cnt),R(d2)
|
||||
L(R1:)
|
||||
movel MEM_POSTINC(s_ptr),R(d1)
|
||||
movel R(d1),R(d3)
|
||||
lsll R(d5),R(d3)
|
||||
orl R(d3),R(d2)
|
||||
movel R(d2),MEM_POSTINC(res_ptr)
|
||||
lsrl R(cnt),R(d1)
|
||||
|
||||
dbf R(s_size),L(Roop)
|
||||
subl #0x10000,R(s_size)
|
||||
bcc L(Roop)
|
||||
|
||||
L(Rend:)
|
||||
movel R(d1),MEM(res_ptr) /* store most significant limb */
|
||||
|
||||
/* Restore used registers from stack frame. */
|
||||
moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
|
||||
rts
|
||||
|
||||
/* We loop from most significant end of the arrays, which is only
|
||||
permissable if the source and destination don't overlap, since the
|
||||
function is documented to work for overlapping source and destination. */
|
||||
|
||||
L(Rspecial:)
|
||||
#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
|
||||
lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
|
||||
lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
|
||||
#else /* not mc68000 */
|
||||
movel R(s_size),R(d0)
|
||||
asll #2,R(d0)
|
||||
addl R(s_size),R(s_ptr)
|
||||
addl R(s_size),R(res_ptr)
|
||||
#endif
|
||||
|
||||
clrl R(d0) /* initialize carry */
|
||||
eorw #1,R(s_size)
|
||||
lsrl #1,R(s_size)
|
||||
bcc L(LR1)
|
||||
subql #1,R(s_size)
|
||||
|
||||
L(LRoop:)
|
||||
movel MEM_PREDEC(s_ptr),R(d2)
|
||||
roxrl #1,R(d2)
|
||||
movel R(d2),MEM_PREDEC(res_ptr)
|
||||
L(LR1:)
|
||||
movel MEM_PREDEC(s_ptr),R(d2)
|
||||
roxrl #1,R(d2)
|
||||
movel R(d2),MEM_PREDEC(res_ptr)
|
||||
|
||||
dbf R(s_size),L(LRoop)
|
||||
roxrl #1,R(d0) /* save cy in msb */
|
||||
subl #0x10000,R(s_size)
|
||||
bcs L(LRend)
|
||||
addl R(d0),R(d0) /* restore cy */
|
||||
bra L(LRoop)
|
||||
|
||||
L(LRend:)
|
||||
/* Restore used registers from stack frame. */
|
||||
moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
|
||||
rts
|
||||
EPILOG(mpihelp_rshift)
|
||||
|
||||
|
||||
|
||||
|
93
mpi/m68k/mpih-sub1.S
Normal file
93
mpi/m68k/mpih-sub1.S
Normal file
@ -0,0 +1,93 @@
|
||||
/* mc68020 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
|
||||
* store difference in a third limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 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 "sysdep.h"
|
||||
#include "asm-syntax.h"
|
||||
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_sub_n( mpi_ptr_t res_ptr, (sp + 4)
|
||||
* mpi_ptr_t s1_ptr, (sp + 8)
|
||||
* mpi_ptr_t s2_ptr, (sp + 16)
|
||||
* mpi_size_t size) (sp + 12)
|
||||
*/
|
||||
|
||||
|
||||
TEXT
|
||||
ALIGN
|
||||
GLOBL C_SYMBOL_NAME(mpihelp_sub_n)
|
||||
|
||||
C_SYMBOL_NAME(mpihelp_sub_n:)
|
||||
PROLOG(mpihelp_sub_n)
|
||||
/* Save used registers on the stack. */
|
||||
movel R(d2),MEM_PREDEC(sp)
|
||||
movel R(a2),MEM_PREDEC(sp)
|
||||
|
||||
/* Copy the arguments to registers. Better use movem? */
|
||||
movel MEM_DISP(sp,12),R(a2)
|
||||
movel MEM_DISP(sp,16),R(a0)
|
||||
movel MEM_DISP(sp,20),R(a1)
|
||||
movel MEM_DISP(sp,24),R(d2)
|
||||
|
||||
eorw #1,R(d2)
|
||||
lsrl #1,R(d2)
|
||||
bcc L(L1)
|
||||
subql #1,R(d2) /* clears cy as side effect */
|
||||
|
||||
L(Loop:)
|
||||
movel MEM_POSTINC(a0),R(d0)
|
||||
movel MEM_POSTINC(a1),R(d1)
|
||||
subxl R(d1),R(d0)
|
||||
movel R(d0),MEM_POSTINC(a2)
|
||||
L(L1:) movel MEM_POSTINC(a0),R(d0)
|
||||
movel MEM_POSTINC(a1),R(d1)
|
||||
subxl R(d1),R(d0)
|
||||
movel R(d0),MEM_POSTINC(a2)
|
||||
|
||||
dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */
|
||||
subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */
|
||||
subl #0x10000,R(d2)
|
||||
bcs L(L2)
|
||||
addl R(d0),R(d0) /* restore cy */
|
||||
bra L(Loop)
|
||||
|
||||
L(L2:)
|
||||
negl R(d0)
|
||||
|
||||
/* Restore used registers from stack frame. */
|
||||
movel MEM_POSTINC(sp),R(a2)
|
||||
movel MEM_POSTINC(sp),R(d2)
|
||||
|
||||
rts
|
||||
EPILOG(mpihelp_sub_n)
|
||||
|
||||
|
187
mpi/m68k/syntax.h
Normal file
187
mpi/m68k/syntax.h
Normal file
@ -0,0 +1,187 @@
|
||||
/* asm.h -- Definitions for 68k syntax variations.
|
||||
*
|
||||
* Copyright (C) 1992, 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.
|
||||
*/
|
||||
|
||||
|
||||
#undef ALIGN
|
||||
|
||||
#ifdef MIT_SYNTAX
|
||||
#define PROLOG(name)
|
||||
#define EPILOG(name)
|
||||
#define R(r)r
|
||||
#define MEM(base)base@
|
||||
#define MEM_DISP(base,displacement)base@(displacement)
|
||||
#define MEM_INDX(base,idx,size_suffix)base@(idx:size_suffix)
|
||||
#define MEM_INDX1(base,idx,size_suffix,scale)base@(idx:size_suffix:scale)
|
||||
#define MEM_PREDEC(memory_base)memory_base@-
|
||||
#define MEM_POSTINC(memory_base)memory_base@+
|
||||
#define L(label) label
|
||||
#define TEXT .text
|
||||
#define ALIGN .even
|
||||
#define GLOBL .globl
|
||||
#define moveql moveq
|
||||
/* Use variable sized opcodes. */
|
||||
#define bcc jcc
|
||||
#define bcs jcs
|
||||
#define bls jls
|
||||
#define beq jeq
|
||||
#define bne jne
|
||||
#define bra jra
|
||||
#endif
|
||||
|
||||
#ifdef SONY_SYNTAX
|
||||
#define PROLOG(name)
|
||||
#define EPILOG(name)
|
||||
#define R(r)r
|
||||
#define MEM(base)(base)
|
||||
#define MEM_DISP(base,displacement)(displacement,base)
|
||||
#define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix)
|
||||
#define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale)
|
||||
#define MEM_PREDEC(memory_base)-(memory_base)
|
||||
#define MEM_POSTINC(memory_base)(memory_base)+
|
||||
#define L(label) label
|
||||
#define TEXT .text
|
||||
#define ALIGN .even
|
||||
#define GLOBL .globl
|
||||
#endif
|
||||
|
||||
#ifdef MOTOROLA_SYNTAX
|
||||
#define PROLOG(name)
|
||||
#define EPILOG(name)
|
||||
#define R(r)r
|
||||
#define MEM(base)(base)
|
||||
#define MEM_DISP(base,displacement)(displacement,base)
|
||||
#define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix)
|
||||
#define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale)
|
||||
#define MEM_PREDEC(memory_base)-(memory_base)
|
||||
#define MEM_POSTINC(memory_base)(memory_base)+
|
||||
#define L(label) label
|
||||
#define TEXT
|
||||
#define ALIGN
|
||||
#define GLOBL XDEF
|
||||
#define lea LEA
|
||||
#define movel MOVE.L
|
||||
#define moveml MOVEM.L
|
||||
#define moveql MOVEQ.L
|
||||
#define cmpl CMP.L
|
||||
#define orl OR.L
|
||||
#define clrl CLR.L
|
||||
#define eorw EOR.W
|
||||
#define lsrl LSR.L
|
||||
#define lsll LSL.L
|
||||
#define roxrl ROXR.L
|
||||
#define roxll ROXL.L
|
||||
#define addl ADD.L
|
||||
#define addxl ADDX.L
|
||||
#define addql ADDQ.L
|
||||
#define subl SUB.L
|
||||
#define subxl SUBX.L
|
||||
#define subql SUBQ.L
|
||||
#define negl NEG.L
|
||||
#define mulul MULU.L
|
||||
#define bcc BCC
|
||||
#define bcs BCS
|
||||
#define bls BLS
|
||||
#define beq BEQ
|
||||
#define bne BNE
|
||||
#define bra BRA
|
||||
#define dbf DBF
|
||||
#define rts RTS
|
||||
#define d0 D0
|
||||
#define d1 D1
|
||||
#define d2 D2
|
||||
#define d3 D3
|
||||
#define d4 D4
|
||||
#define d5 D5
|
||||
#define d6 D6
|
||||
#define d7 D7
|
||||
#define a0 A0
|
||||
#define a1 A1
|
||||
#define a2 A2
|
||||
#define a3 A3
|
||||
#define a4 A4
|
||||
#define a5 A5
|
||||
#define a6 A6
|
||||
#define a7 A7
|
||||
#define sp SP
|
||||
#endif
|
||||
|
||||
#ifdef ELF_SYNTAX
|
||||
#define PROLOG(name) .type name,@function
|
||||
#define EPILOG(name) .size name,.-name
|
||||
#define MEM(base)(R(base))
|
||||
#define MEM_DISP(base,displacement)(displacement,R(base))
|
||||
#define MEM_PREDEC(memory_base)-(R(memory_base))
|
||||
#define MEM_POSTINC(memory_base)(R(memory_base))+
|
||||
#ifdef __STDC__
|
||||
#define R_(r)%##r
|
||||
#define R(r)R_(r)
|
||||
#define MEM_INDX_(base,idx,size_suffix)(R(base),R(idx##.##size_suffix))
|
||||
#define MEM_INDX(base,idx,size_suffix)MEM_INDX_(base,idx,size_suffix)
|
||||
#define MEM_INDX1_(base,idx,size_suffix,scale)(R(base),R(idx##.##size_suffix*scale))
|
||||
#define MEM_INDX1(base,idx,size_suffix,scale)MEM_INDX1_(base,idx,size_suffix,scale)
|
||||
#define L(label) .##label
|
||||
#else
|
||||
#define R(r)%/**/r
|
||||
#define MEM_INDX(base,idx,size_suffix)(R(base),R(idx).size_suffix)
|
||||
#define MEM_INDX1(base,idx,size_suffix,scale)(R(base),R(idx).size_suffix*scale)
|
||||
#define L(label) ./**/label
|
||||
#endif
|
||||
#define TEXT .text
|
||||
#define ALIGN .align 2
|
||||
#define GLOBL .globl
|
||||
#define bcc jbcc
|
||||
#define bcs jbcs
|
||||
#define bls jbls
|
||||
#define beq jbeq
|
||||
#define bne jbne
|
||||
#define bra jbra
|
||||
#endif
|
||||
|
||||
#if defined (SONY_SYNTAX) || defined (ELF_SYNTAX)
|
||||
#define movel move.l
|
||||
#define moveml movem.l
|
||||
#define moveql moveq.l
|
||||
#define cmpl cmp.l
|
||||
#define orl or.l
|
||||
#define clrl clr.l
|
||||
#define eorw eor.w
|
||||
#define lsrl lsr.l
|
||||
#define lsll lsl.l
|
||||
#define roxrl roxr.l
|
||||
#define roxll roxl.l
|
||||
#define addl add.l
|
||||
#define addxl addx.l
|
||||
#define addql addq.l
|
||||
#define subl sub.l
|
||||
#define subxl subx.l
|
||||
#define subql subq.l
|
||||
#define negl neg.l
|
||||
#define mulul mulu.l
|
||||
#endif
|
23
mpi/mips3/README
Normal file
23
mpi/mips3/README
Normal file
@ -0,0 +1,23 @@
|
||||
This directory contains mpn functions optimized for MIPS3. Example of
|
||||
processors that implement MIPS3 are R4000, R4400, R4600, R4700, and R8000.
|
||||
|
||||
RELEVANT OPTIMIZATION ISSUES
|
||||
|
||||
1. On the R4000 and R4400, branches, both the plain and the "likely" ones,
|
||||
take 3 cycles to execute. (The fastest possible loop will take 4 cycles,
|
||||
because of the delay insn.)
|
||||
|
||||
On the R4600, branches takes a single cycle
|
||||
|
||||
On the R8000, branches often take no noticable cycles, as they are
|
||||
executed in a separate function unit..
|
||||
|
||||
2. The R4000 and R4400 have a load latency of 4 cycles.
|
||||
|
||||
3. On the R4000 and R4400, multiplies take a data-dependent number of
|
||||
cycles, contrary to the SGI documentation. There seem to be 3 or 4
|
||||
possible latencies.
|
||||
|
||||
STATUS
|
||||
|
||||
Good...
|
10
mpi/mips3/distfiles
Normal file
10
mpi/mips3/distfiles
Normal file
@ -0,0 +1,10 @@
|
||||
README
|
||||
mpih-add1.S
|
||||
mpih-sub1.S
|
||||
mpih-mul1.S
|
||||
mpih-mul2.S
|
||||
mpih-mul3.S
|
||||
mpih-lshift.S
|
||||
mpih-rshift.S
|
||||
mpi-asm-defs.h
|
||||
|
10
mpi/mips3/mpi-asm-defs.h
Normal file
10
mpi/mips3/mpi-asm-defs.h
Normal file
@ -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 8
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
124
mpi/mips3/mpih-add1.S
Normal file
124
mpi/mips3/mpih-add1.S
Normal file
@ -0,0 +1,124 @@
|
||||
/* mips3 add_n -- Add two limb vectors of the same length > 0 and store
|
||||
* sum in a third limb vector.
|
||||
*
|
||||
* Copyright (C) 1995, 1998, 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
|
||||
*/
|
||||
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_add_n( mpi_ptr_t res_ptr, ($4)
|
||||
* mpi_ptr_t s1_ptr, ($5)
|
||||
* mpi_ptr_t s2_ptr, ($6)
|
||||
* mpi_size_t size) ($7)
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl mpihelp_add_n
|
||||
.ent mpihelp_add_n
|
||||
mpihelp_add_n:
|
||||
.set noreorder
|
||||
.set nomacro
|
||||
|
||||
ld $10,0($5)
|
||||
ld $11,0($6)
|
||||
|
||||
daddiu $7,$7,-1
|
||||
and $9,$7,4-1 # number of limbs in first loop
|
||||
beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
|
||||
move $2,$0
|
||||
|
||||
dsubu $7,$7,$9
|
||||
|
||||
.Loop0: daddiu $9,$9,-1
|
||||
ld $12,8($5)
|
||||
daddu $11,$11,$2
|
||||
ld $13,8($6)
|
||||
sltu $8,$11,$2
|
||||
daddu $11,$10,$11
|
||||
sltu $2,$11,$10
|
||||
sd $11,0($4)
|
||||
or $2,$2,$8
|
||||
|
||||
daddiu $5,$5,8
|
||||
daddiu $6,$6,8
|
||||
move $10,$12
|
||||
move $11,$13
|
||||
bne $9,$0,.Loop0
|
||||
daddiu $4,$4,8
|
||||
|
||||
.L0: beq $7,$0,.Lend
|
||||
nop
|
||||
|
||||
.Loop: daddiu $7,$7,-4
|
||||
|
||||
ld $12,8($5)
|
||||
daddu $11,$11,$2
|
||||
ld $13,8($6)
|
||||
sltu $8,$11,$2
|
||||
daddu $11,$10,$11
|
||||
sltu $2,$11,$10
|
||||
sd $11,0($4)
|
||||
or $2,$2,$8
|
||||
|
||||
ld $10,16($5)
|
||||
daddu $13,$13,$2
|
||||
ld $11,16($6)
|
||||
sltu $8,$13,$2
|
||||
daddu $13,$12,$13
|
||||
sltu $2,$13,$12
|
||||
sd $13,8($4)
|
||||
or $2,$2,$8
|
||||
|
||||
ld $12,24($5)
|
||||
daddu $11,$11,$2
|
||||
ld $13,24($6)
|
||||
sltu $8,$11,$2
|
||||
daddu $11,$10,$11
|
||||
sltu $2,$11,$10
|
||||
sd $11,16($4)
|
||||
or $2,$2,$8
|
||||
|
||||
ld $10,32($5)
|
||||
daddu $13,$13,$2
|
||||
ld $11,32($6)
|
||||
sltu $8,$13,$2
|
||||
daddu $13,$12,$13
|
||||
sltu $2,$13,$12
|
||||
sd $13,24($4)
|
||||
or $2,$2,$8
|
||||
|
||||
daddiu $5,$5,32
|
||||
daddiu $6,$6,32
|
||||
|
||||
bne $7,$0,.Loop
|
||||
daddiu $4,$4,32
|
||||
|
||||
.Lend: daddu $11,$11,$2
|
||||
sltu $8,$11,$2
|
||||
daddu $11,$10,$11
|
||||
sltu $2,$11,$10
|
||||
sd $11,0($4)
|
||||
j $31
|
||||
or $2,$2,$8
|
||||
|
||||
.end mpihelp_add_n
|
||||
|
97
mpi/mips3/mpih-lshift.S
Normal file
97
mpi/mips3/mpih-lshift.S
Normal file
@ -0,0 +1,97 @@
|
||||
/* mips3 lshift
|
||||
*
|
||||
* Copyright (C) 1995, 1998, 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
|
||||
*/
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_lshift( mpi_ptr_t wp, ($4)
|
||||
* mpi_ptr_t up, ($5)
|
||||
* mpi_size_t usize, ($6)
|
||||
* unsigned cnt) ($7)
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl mpihelp_lshift
|
||||
.ent mpihelp_lshift
|
||||
mpihelp_lshift:
|
||||
.set noreorder
|
||||
.set nomacro
|
||||
|
||||
dsll $2,$6,3
|
||||
daddu $5,$5,$2 # make r5 point at end of src
|
||||
ld $10,-8($5) # load first limb
|
||||
dsubu $13,$0,$7
|
||||
daddu $4,$4,$2 # make r4 point at end of res
|
||||
daddiu $6,$6,-1
|
||||
and $9,$6,4-1 # number of limbs in first loop
|
||||
beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
|
||||
dsrl $2,$10,$13 # compute function result
|
||||
|
||||
dsubu $6,$6,$9
|
||||
|
||||
.Loop0: ld $3,-16($5)
|
||||
daddiu $4,$4,-8
|
||||
daddiu $5,$5,-8
|
||||
daddiu $9,$9,-1
|
||||
dsll $11,$10,$7
|
||||
dsrl $12,$3,$13
|
||||
move $10,$3
|
||||
or $8,$11,$12
|
||||
bne $9,$0,.Loop0
|
||||
sd $8,0($4)
|
||||
|
||||
.L0: beq $6,$0,.Lend
|
||||
nop
|
||||
|
||||
.Loop: ld $3,-16($5)
|
||||
daddiu $4,$4,-32
|
||||
daddiu $6,$6,-4
|
||||
dsll $11,$10,$7
|
||||
dsrl $12,$3,$13
|
||||
|
||||
ld $10,-24($5)
|
||||
dsll $14,$3,$7
|
||||
or $8,$11,$12
|
||||
sd $8,24($4)
|
||||
dsrl $9,$10,$13
|
||||
|
||||
ld $3,-32($5)
|
||||
dsll $11,$10,$7
|
||||
or $8,$14,$9
|
||||
sd $8,16($4)
|
||||
dsrl $12,$3,$13
|
||||
|
||||
ld $10,-40($5)
|
||||
dsll $14,$3,$7
|
||||
or $8,$11,$12
|
||||
sd $8,8($4)
|
||||
dsrl $9,$10,$13
|
||||
|
||||
daddiu $5,$5,-32
|
||||
or $8,$14,$9
|
||||
bgtz $6,.Loop
|
||||
sd $8,0($4)
|
||||
|
||||
.Lend: dsll $8,$10,$7
|
||||
j $31
|
||||
sd $8,-8($4)
|
||||
.end mpihelp_lshift
|
89
mpi/mips3/mpih-mul1.S
Normal file
89
mpi/mips3/mpih-mul1.S
Normal file
@ -0,0 +1,89 @@
|
||||
/* mips3 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, 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
|
||||
*/
|
||||
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_mul_1( mpi_ptr_t res_ptr, (r4)
|
||||
* mpi_ptr_t s1_ptr, (r5)
|
||||
* mpi_size_t s1_size, (r6)
|
||||
* mpi_limb_t s2_limb) (r7)
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 4
|
||||
.globl mpihelp_mul_1
|
||||
.ent mpihelp_mul_1
|
||||
mpihelp_mul_1:
|
||||
.set noreorder
|
||||
.set nomacro
|
||||
|
||||
/* # warm up phase 0 */
|
||||
ld $8,0($5)
|
||||
|
||||
/* # warm up phase 1 */
|
||||
daddiu $5,$5,8
|
||||
dmultu $8,$7
|
||||
|
||||
daddiu $6,$6,-1
|
||||
beq $6,$0,$LC0
|
||||
move $2,$0 # zero cy2
|
||||
|
||||
daddiu $6,$6,-1
|
||||
beq $6,$0,$LC1
|
||||
ld $8,0($5) # load new s1 limb as early as possible
|
||||
|
||||
Loop: mflo $10
|
||||
mfhi $9
|
||||
daddiu $5,$5,8
|
||||
daddu $10,$10,$2 # add old carry limb to low product limb
|
||||
dmultu $8,$7
|
||||
ld $8,0($5) # load new s1 limb as early as possible
|
||||
daddiu $6,$6,-1 # decrement loop counter
|
||||
sltu $2,$10,$2 # carry from previous addition -> $2
|
||||
sd $10,0($4)
|
||||
daddiu $4,$4,8
|
||||
bne $6,$0,Loop
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
/* # cool down phase 1 */
|
||||
$LC1: mflo $10
|
||||
mfhi $9
|
||||
daddu $10,$10,$2
|
||||
sltu $2,$10,$2
|
||||
dmultu $8,$7
|
||||
sd $10,0($4)
|
||||
daddiu $4,$4,8
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
/* # cool down phase 0 */
|
||||
$LC0: mflo $10
|
||||
mfhi $9
|
||||
daddu $10,$10,$2
|
||||
sltu $2,$10,$2
|
||||
sd $10,0($4)
|
||||
j $31
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
.end mpihelp_mul_1
|
||||
|
101
mpi/mips3/mpih-mul2.S
Normal file
101
mpi/mips3/mpih-mul2.S
Normal file
@ -0,0 +1,101 @@
|
||||
/* MIPS3 addmul_1 -- Multiply a limb vector with a single limb and
|
||||
* add the product to a second limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 1994, 1995, 1998, 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
|
||||
*/
|
||||
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_addmul_1( mpi_ptr_t res_ptr, (r4)
|
||||
* mpi_ptr_t s1_ptr, (r5)
|
||||
* mpi_size_t s1_size, (r6)
|
||||
* mpi_limb_t s2_limb) (r7)
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 4
|
||||
.globl mpihelp_addmul_1
|
||||
.ent mpihelp_addmul_1
|
||||
mpihelp_addmul_1:
|
||||
.set noreorder
|
||||
.set nomacro
|
||||
|
||||
/* # warm up phase 0 */
|
||||
ld $8,0($5)
|
||||
|
||||
/* # warm up phase 1 */
|
||||
daddiu $5,$5,8
|
||||
dmultu $8,$7
|
||||
|
||||
daddiu $6,$6,-1
|
||||
beq $6,$0,$LC0
|
||||
move $2,$0 # zero cy2
|
||||
|
||||
daddiu $6,$6,-1
|
||||
beq $6,$0,$LC1
|
||||
ld $8,0($5) # load new s1 limb as early as possible
|
||||
|
||||
Loop: ld $10,0($4)
|
||||
mflo $3
|
||||
mfhi $9
|
||||
daddiu $5,$5,8
|
||||
daddu $3,$3,$2 # add old carry limb to low product limb
|
||||
dmultu $8,$7
|
||||
ld $8,0($5) # load new s1 limb as early as possible
|
||||
daddiu $6,$6,-1 # decrement loop counter
|
||||
sltu $2,$3,$2 # carry from previous addition -> $2
|
||||
daddu $3,$10,$3
|
||||
sltu $10,$3,$10
|
||||
daddu $2,$2,$10
|
||||
sd $3,0($4)
|
||||
daddiu $4,$4,8
|
||||
bne $6,$0,Loop
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
/* # cool down phase 1 */
|
||||
$LC1: ld $10,0($4)
|
||||
mflo $3
|
||||
mfhi $9
|
||||
daddu $3,$3,$2
|
||||
sltu $2,$3,$2
|
||||
dmultu $8,$7
|
||||
daddu $3,$10,$3
|
||||
sltu $10,$3,$10
|
||||
daddu $2,$2,$10
|
||||
sd $3,0($4)
|
||||
daddiu $4,$4,8
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
/* # cool down phase 0 */
|
||||
$LC0: ld $10,0($4)
|
||||
mflo $3
|
||||
mfhi $9
|
||||
daddu $3,$3,$2
|
||||
sltu $2,$3,$2
|
||||
daddu $3,$10,$3
|
||||
sltu $10,$3,$10
|
||||
daddu $2,$2,$10
|
||||
sd $3,0($4)
|
||||
j $31
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
.end mpihelp_addmul_1
|
||||
|
101
mpi/mips3/mpih-mul3.S
Normal file
101
mpi/mips3/mpih-mul3.S
Normal file
@ -0,0 +1,101 @@
|
||||
/* MIPS3 submul_1 -- Multiply a limb vector with a single limb and
|
||||
* subtract the product from a second limb vector.
|
||||
*
|
||||
* Copyright (C) 1992, 1994, 1995, 1998, 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
|
||||
*/
|
||||
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_submul_1( mpi_ptr_t res_ptr, (r4)
|
||||
* mpi_ptr_t s1_ptr, (r5)
|
||||
* mpi_size_t s1_size, (r6)
|
||||
* mpi_limb_t s2_limb) (r7)
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 4
|
||||
.globl mpihelp_submul_1
|
||||
.ent mpihelp_submul_1
|
||||
mpihelp_submul_1:
|
||||
.set noreorder
|
||||
.set nomacro
|
||||
|
||||
/* # warm up phase 0 */
|
||||
ld $8,0($5)
|
||||
|
||||
/* # warm up phase 1 */
|
||||
daddiu $5,$5,8
|
||||
dmultu $8,$7
|
||||
|
||||
daddiu $6,$6,-1
|
||||
beq $6,$0,$LC0
|
||||
move $2,$0 # zero cy2
|
||||
|
||||
daddiu $6,$6,-1
|
||||
beq $6,$0,$LC1
|
||||
ld $8,0($5) # load new s1 limb as early as possible
|
||||
|
||||
Loop: ld $10,0($4)
|
||||
mflo $3
|
||||
mfhi $9
|
||||
daddiu $5,$5,8
|
||||
daddu $3,$3,$2 # add old carry limb to low product limb
|
||||
dmultu $8,$7
|
||||
ld $8,0($5) # load new s1 limb as early as possible
|
||||
daddiu $6,$6,-1 # decrement loop counter
|
||||
sltu $2,$3,$2 # carry from previous addition -> $2
|
||||
dsubu $3,$10,$3
|
||||
sgtu $10,$3,$10
|
||||
daddu $2,$2,$10
|
||||
sd $3,0($4)
|
||||
daddiu $4,$4,8
|
||||
bne $6,$0,Loop
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
/* # cool down phase 1 */
|
||||
$LC1: ld $10,0($4)
|
||||
mflo $3
|
||||
mfhi $9
|
||||
daddu $3,$3,$2
|
||||
sltu $2,$3,$2
|
||||
dmultu $8,$7
|
||||
dsubu $3,$10,$3
|
||||
sgtu $10,$3,$10
|
||||
daddu $2,$2,$10
|
||||
sd $3,0($4)
|
||||
daddiu $4,$4,8
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
/* # cool down phase 0 */
|
||||
$LC0: ld $10,0($4)
|
||||
mflo $3
|
||||
mfhi $9
|
||||
daddu $3,$3,$2
|
||||
sltu $2,$3,$2
|
||||
dsubu $3,$10,$3
|
||||
sgtu $10,$3,$10
|
||||
daddu $2,$2,$10
|
||||
sd $3,0($4)
|
||||
j $31
|
||||
daddu $2,$9,$2 # add high product limb and carry from addition
|
||||
|
||||
.end mpihelp_submul_1
|
||||
|
95
mpi/mips3/mpih-rshift.S
Normal file
95
mpi/mips3/mpih-rshift.S
Normal file
@ -0,0 +1,95 @@
|
||||
/* mips3 rshift
|
||||
*
|
||||
* Copyright (C) 1995, 1998, 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
|
||||
*/
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_rshift( mpi_ptr_t wp, ($4)
|
||||
* mpi_ptr_t up, ($5)
|
||||
* mpi_size_t usize, ($6)
|
||||
* unsigned cnt) ($7)
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl mpihelp_rshift
|
||||
.ent mpihelp_rshift
|
||||
mpihelp_rshift:
|
||||
.set noreorder
|
||||
.set nomacro
|
||||
|
||||
ld $10,0($5) # load first limb
|
||||
dsubu $13,$0,$7
|
||||
daddiu $6,$6,-1
|
||||
and $9,$6,4-1 # number of limbs in first loop
|
||||
beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
|
||||
dsll $2,$10,$13 # compute function result
|
||||
|
||||
dsubu $6,$6,$9
|
||||
|
||||
.Loop0: ld $3,8($5)
|
||||
daddiu $4,$4,8
|
||||
daddiu $5,$5,8
|
||||
daddiu $9,$9,-1
|
||||
dsrl $11,$10,$7
|
||||
dsll $12,$3,$13
|
||||
move $10,$3
|
||||
or $8,$11,$12
|
||||
bne $9,$0,.Loop0
|
||||
sd $8,-8($4)
|
||||
|
||||
.L0: beq $6,$0,.Lend
|
||||
nop
|
||||
|
||||
.Loop: ld $3,8($5)
|
||||
daddiu $4,$4,32
|
||||
daddiu $6,$6,-4
|
||||
dsrl $11,$10,$7
|
||||
dsll $12,$3,$13
|
||||
|
||||
ld $10,16($5)
|
||||
dsrl $14,$3,$7
|
||||
or $8,$11,$12
|
||||
sd $8,-32($4)
|
||||
dsll $9,$10,$13
|
||||
|
||||
ld $3,24($5)
|
||||
dsrl $11,$10,$7
|
||||
or $8,$14,$9
|
||||
sd $8,-24($4)
|
||||
dsll $12,$3,$13
|
||||
|
||||
ld $10,32($5)
|
||||
dsrl $14,$3,$7
|
||||
or $8,$11,$12
|
||||
sd $8,-16($4)
|
||||
dsll $9,$10,$13
|
||||
|
||||
daddiu $5,$5,32
|
||||
or $8,$14,$9
|
||||
bgtz $6,.Loop
|
||||
sd $8,-8($4)
|
||||
|
||||
.Lend: dsrl $8,$10,$7
|
||||
j $31
|
||||
sd $8,0($4)
|
||||
.end mpihelp_rshift
|
||||
|
125
mpi/mips3/mpih-sub1.S
Normal file
125
mpi/mips3/mpih-sub1.S
Normal file
@ -0,0 +1,125 @@
|
||||
/* mips3 sub_n -- Subtract two limb vectors of the same length > 0 and
|
||||
* store difference in a third limb vector.
|
||||
*
|
||||
* Copyright (C) 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
|
||||
*/
|
||||
|
||||
|
||||
/*******************
|
||||
* mpi_limb_t
|
||||
* mpihelp_sub_n( mpi_ptr_t res_ptr, (r4)
|
||||
* mpi_ptr_t s1_ptr, (r5)
|
||||
* mpi_ptr_t s2_ptr, (r6)
|
||||
* mpi_size_t size) (r7)
|
||||
*/
|
||||
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl mpihelp_sub_n
|
||||
.ent mpihelp_sub_n
|
||||
mpihelp_sub_n:
|
||||
.set noreorder
|
||||
.set nomacro
|
||||
|
||||
ld $10,0($5)
|
||||
ld $11,0($6)
|
||||
|
||||
daddiu $7,$7,-1
|
||||
and $9,$7,4-1 # number of limbs in first loop
|
||||
beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
|
||||
move $2,$0
|
||||
|
||||
dsubu $7,$7,$9
|
||||
|
||||
.Loop0: daddiu $9,$9,-1
|
||||
ld $12,8($5)
|
||||
daddu $11,$11,$2
|
||||
ld $13,8($6)
|
||||
sltu $8,$11,$2
|
||||
dsubu $11,$10,$11
|
||||
sltu $2,$10,$11
|
||||
sd $11,0($4)
|
||||
or $2,$2,$8
|
||||
|
||||
daddiu $5,$5,8
|
||||
daddiu $6,$6,8
|
||||
move $10,$12
|
||||
move $11,$13
|
||||
bne $9,$0,.Loop0
|
||||
daddiu $4,$4,8
|
||||
|
||||
.L0: beq $7,$0,.Lend
|
||||
nop
|
||||
|
||||
.Loop: daddiu $7,$7,-4
|
||||
|
||||
ld $12,8($5)
|
||||
daddu $11,$11,$2
|
||||
ld $13,8($6)
|
||||
sltu $8,$11,$2
|
||||
dsubu $11,$10,$11
|
||||
sltu $2,$10,$11
|
||||
sd $11,0($4)
|
||||
or $2,$2,$8
|
||||
|
||||
ld $10,16($5)
|
||||
daddu $13,$13,$2
|
||||
ld $11,16($6)
|
||||
sltu $8,$13,$2
|
||||
dsubu $13,$12,$13
|
||||
sltu $2,$12,$13
|
||||
sd $13,8($4)
|
||||
or $2,$2,$8
|
||||
|
||||
ld $12,24($5)
|
||||
daddu $11,$11,$2
|
||||
ld $13,24($6)
|
||||
sltu $8,$11,$2
|
||||
dsubu $11,$10,$11
|
||||
sltu $2,$10,$11
|
||||
sd $11,16($4)
|
||||
or $2,$2,$8
|
||||
|
||||
ld $10,32($5)
|
||||
daddu $13,$13,$2
|
||||
ld $11,32($6)
|
||||
sltu $8,$13,$2
|
||||
dsubu $13,$12,$13
|
||||
sltu $2,$12,$13
|
||||
sd $13,24($4)
|
||||
or $2,$2,$8
|
||||
|
||||
daddiu $5,$5,32
|
||||
daddiu $6,$6,32
|
||||
|
||||
bne $7,$0,.Loop
|
||||
daddiu $4,$4,32
|
||||
|
||||
.Lend: daddu $11,$11,$2
|
||||
sltu $8,$11,$2
|
||||
dsubu $11,$10,$11
|
||||
sltu $2,$10,$11
|
||||
sd $11,0($4)
|
||||
j $31
|
||||
or $2,$2,$8
|
||||
|
||||
.end mpihelp_sub_n
|
||||
|
247
mpi/mpi-add.c
Normal file
247
mpi/mpi-add.c
Normal file
@ -0,0 +1,247 @@
|
||||
/* mpi-add.c - MPI functions
|
||||
* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
* Copyright (C) 1994, 1996 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"
|
||||
|
||||
|
||||
/****************
|
||||
* Add the unsigned integer V to the mpi-integer U and store the
|
||||
* result in W. U and V may be the same.
|
||||
*/
|
||||
void
|
||||
mpi_add_ui(MPI w, MPI u, unsigned long v )
|
||||
{
|
||||
mpi_ptr_t wp, up;
|
||||
mpi_size_t usize, wsize;
|
||||
int usign, wsign;
|
||||
|
||||
usize = u->nlimbs;
|
||||
usign = u->sign;
|
||||
wsign = 0;
|
||||
|
||||
/* If not space for W (and possible carry), increase space. */
|
||||
wsize = usize + 1;
|
||||
if( w->alloced < wsize )
|
||||
mpi_resize(w, wsize);
|
||||
|
||||
/* These must be after realloc (U may be the same as W). */
|
||||
up = u->d;
|
||||
wp = w->d;
|
||||
|
||||
if( !usize ) { /* simple */
|
||||
wp[0] = v;
|
||||
wsize = v? 1:0;
|
||||
}
|
||||
else if( !usign ) { /* mpi is not negative */
|
||||
mpi_limb_t cy;
|
||||
cy = mpihelp_add_1(wp, up, usize, v);
|
||||
wp[usize] = cy;
|
||||
wsize = usize + cy;
|
||||
}
|
||||
else { /* The signs are different. Need exact comparison to determine
|
||||
* which operand to subtract from which. */
|
||||
if( usize == 1 && up[0] < v ) {
|
||||
wp[0] = v - up[0];
|
||||
wsize = 1;
|
||||
}
|
||||
else {
|
||||
mpihelp_sub_1(wp, up, usize, v);
|
||||
/* Size can decrease with at most one limb. */
|
||||
wsize = usize - (wp[usize-1]==0);
|
||||
wsign = 1;
|
||||
}
|
||||
}
|
||||
|
||||
w->nlimbs = wsize;
|
||||
w->sign = wsign;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mpi_add(MPI w, MPI u, MPI v)
|
||||
{
|
||||
mpi_ptr_t wp, up, vp;
|
||||
mpi_size_t usize, vsize, wsize;
|
||||
int usign, vsign, wsign;
|
||||
|
||||
if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */
|
||||
usize = v->nlimbs;
|
||||
usign = v->sign;
|
||||
vsize = u->nlimbs;
|
||||
vsign = u->sign;
|
||||
wsize = usize + 1;
|
||||
RESIZE_IF_NEEDED(w, wsize);
|
||||
/* These must be after realloc (u or v may be the same as w). */
|
||||
up = v->d;
|
||||
vp = u->d;
|
||||
}
|
||||
else {
|
||||
usize = u->nlimbs;
|
||||
usign = u->sign;
|
||||
vsize = v->nlimbs;
|
||||
vsign = v->sign;
|
||||
wsize = usize + 1;
|
||||
RESIZE_IF_NEEDED(w, wsize);
|
||||
/* These must be after realloc (u or v may be the same as w). */
|
||||
up = u->d;
|
||||
vp = v->d;
|
||||
}
|
||||
wp = w->d;
|
||||
wsign = 0;
|
||||
|
||||
if( !vsize ) { /* simple */
|
||||
MPN_COPY(wp, up, usize );
|
||||
wsize = usize;
|
||||
wsign = usign;
|
||||
}
|
||||
else if( usign != vsign ) { /* different sign */
|
||||
/* This test is right since USIZE >= VSIZE */
|
||||
if( usize != vsize ) {
|
||||
mpihelp_sub(wp, up, usize, vp, vsize);
|
||||
wsize = usize;
|
||||
MPN_NORMALIZE(wp, wsize);
|
||||
wsign = usign;
|
||||
}
|
||||
else if( mpihelp_cmp(up, vp, usize) < 0 ) {
|
||||
mpihelp_sub_n(wp, vp, up, usize);
|
||||
wsize = usize;
|
||||
MPN_NORMALIZE(wp, wsize);
|
||||
if( !usign )
|
||||
wsign = 1;
|
||||
}
|
||||
else {
|
||||
mpihelp_sub_n(wp, up, vp, usize);
|
||||
wsize = usize;
|
||||
MPN_NORMALIZE(wp, wsize);
|
||||
if( usign )
|
||||
wsign = 1;
|
||||
}
|
||||
}
|
||||
else { /* U and V have same sign. Add them. */
|
||||
mpi_limb_t cy = mpihelp_add(wp, up, usize, vp, vsize);
|
||||
wp[usize] = cy;
|
||||
wsize = usize + cy;
|
||||
if( usign )
|
||||
wsign = 1;
|
||||
}
|
||||
|
||||
w->nlimbs = wsize;
|
||||
w->sign = wsign;
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Subtract the unsigned integer V from the mpi-integer U and store the
|
||||
* result in W.
|
||||
*/
|
||||
void
|
||||
mpi_sub_ui(MPI w, MPI u, unsigned long v )
|
||||
{
|
||||
mpi_ptr_t wp, up;
|
||||
mpi_size_t usize, wsize;
|
||||
int usign, wsign;
|
||||
|
||||
usize = u->nlimbs;
|
||||
usign = u->sign;
|
||||
wsign = 0;
|
||||
|
||||
/* If not space for W (and possible carry), increase space. */
|
||||
wsize = usize + 1;
|
||||
if( w->alloced < wsize )
|
||||
mpi_resize(w, wsize);
|
||||
|
||||
/* These must be after realloc (U may be the same as W). */
|
||||
up = u->d;
|
||||
wp = w->d;
|
||||
|
||||
if( !usize ) { /* simple */
|
||||
wp[0] = v;
|
||||
wsize = v? 1:0;
|
||||
wsign = 1;
|
||||
}
|
||||
else if( usign ) { /* mpi and v are negative */
|
||||
mpi_limb_t cy;
|
||||
cy = mpihelp_add_1(wp, up, usize, v);
|
||||
wp[usize] = cy;
|
||||
wsize = usize + cy;
|
||||
}
|
||||
else { /* The signs are different. Need exact comparison to determine
|
||||
* which operand to subtract from which. */
|
||||
if( usize == 1 && up[0] < v ) {
|
||||
wp[0] = v - up[0];
|
||||
wsize = 1;
|
||||
wsign = 1;
|
||||
}
|
||||
else {
|
||||
mpihelp_sub_1(wp, up, usize, v);
|
||||
/* Size can decrease with at most one limb. */
|
||||
wsize = usize - (wp[usize-1]==0);
|
||||
}
|
||||
}
|
||||
|
||||
w->nlimbs = wsize;
|
||||
w->sign = wsign;
|
||||
}
|
||||
|
||||
void
|
||||
mpi_sub(MPI w, MPI u, MPI v)
|
||||
{
|
||||
if( w == v ) {
|
||||
MPI vv = mpi_copy(v);
|
||||
vv->sign = !vv->sign;
|
||||
mpi_add( w, u, vv );
|
||||
mpi_free(vv);
|
||||
}
|
||||
else {
|
||||
/* fixme: this is not thread-save (we temp. modify v) */
|
||||
v->sign = !v->sign;
|
||||
mpi_add( w, u, v );
|
||||
v->sign = !v->sign;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mpi_addm( MPI w, MPI u, MPI v, MPI m)
|
||||
{
|
||||
mpi_add(w, u, v);
|
||||
mpi_fdiv_r( w, w, m );
|
||||
}
|
||||
|
||||
void
|
||||
mpi_subm( MPI w, MPI u, MPI v, MPI m)
|
||||
{
|
||||
mpi_sub(w, u, v);
|
||||
mpi_fdiv_r( w, w, m );
|
||||
}
|
||||
|
262
mpi/mpi-bit.c
Normal file
262
mpi/mpi-bit.c
Normal file
@ -0,0 +1,262 @@
|
||||
/* mpi-bit.c - MPI bit level fucntions
|
||||
* Copyright (C) 1998, 1999 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 <assert.h>
|
||||
#include "mpi-internal.h"
|
||||
#include "longlong.h"
|
||||
|
||||
|
||||
#ifdef MPI_INTERNAL_NEED_CLZ_TAB
|
||||
#ifdef __STDC__
|
||||
const
|
||||
#endif
|
||||
unsigned char
|
||||
__clz_tab[] =
|
||||
{
|
||||
0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
|
||||
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
||||
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
||||
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
|
||||
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
|
||||
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
|
||||
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#define A_LIMB_1 ((mpi_limb_t)1)
|
||||
|
||||
|
||||
/****************
|
||||
* Sometimes we have MSL (most significant limbs) which are 0;
|
||||
* this is for some reasons not good, so this function removes them.
|
||||
*/
|
||||
void
|
||||
mpi_normalize( MPI a )
|
||||
{
|
||||
if( mpi_is_protected(a) )
|
||||
return;
|
||||
|
||||
for( ; a->nlimbs && !a->d[a->nlimbs-1]; a->nlimbs-- )
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************
|
||||
* Return the number of bits in A.
|
||||
*/
|
||||
unsigned
|
||||
mpi_get_nbits( MPI a )
|
||||
{
|
||||
unsigned n;
|
||||
|
||||
if( mpi_is_protected(a) ) {
|
||||
n = mpi_get_nbit_info(a);
|
||||
if( !n )
|
||||
n = a->nlimbs * BITS_PER_MPI_LIMB;
|
||||
return n;
|
||||
}
|
||||
|
||||
mpi_normalize( a );
|
||||
if( a->nlimbs ) {
|
||||
mpi_limb_t alimb = a->d[a->nlimbs-1];
|
||||
if( alimb )
|
||||
count_leading_zeros( n, alimb );
|
||||
else
|
||||
n = BITS_PER_MPI_LIMB;
|
||||
n = BITS_PER_MPI_LIMB - n + (a->nlimbs-1) * BITS_PER_MPI_LIMB;
|
||||
}
|
||||
else
|
||||
n = 0;
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Test whether bit N is set.
|
||||
*/
|
||||
int
|
||||
mpi_test_bit( MPI a, unsigned n )
|
||||
{
|
||||
unsigned limbno, bitno;
|
||||
mpi_limb_t limb;
|
||||
|
||||
limbno = n / BITS_PER_MPI_LIMB;
|
||||
bitno = n % BITS_PER_MPI_LIMB;
|
||||
|
||||
if( limbno >= a->nlimbs )
|
||||
return 0; /* too far left: this is a 0 */
|
||||
limb = a->d[limbno];
|
||||
return (limb & (A_LIMB_1 << bitno))? 1: 0;
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Set bit N of A.
|
||||
*/
|
||||
void
|
||||
mpi_set_bit( MPI a, unsigned n )
|
||||
{
|
||||
unsigned limbno, bitno;
|
||||
|
||||
limbno = n / BITS_PER_MPI_LIMB;
|
||||
bitno = n % BITS_PER_MPI_LIMB;
|
||||
|
||||
if( limbno >= a->nlimbs ) { /* resize */
|
||||
if( a->alloced >= limbno )
|
||||
mpi_resize(a, limbno+1 );
|
||||
a->nlimbs = limbno+1;
|
||||
}
|
||||
a->d[limbno] |= (A_LIMB_1<<bitno);
|
||||
}
|
||||
|
||||
/****************
|
||||
* Set bit N of A. and clear all bits above
|
||||
*/
|
||||
void
|
||||
mpi_set_highbit( MPI a, unsigned n )
|
||||
{
|
||||
unsigned limbno, bitno;
|
||||
|
||||
limbno = n / BITS_PER_MPI_LIMB;
|
||||
bitno = n % BITS_PER_MPI_LIMB;
|
||||
|
||||
if( limbno >= a->nlimbs ) { /* resize */
|
||||
if( a->alloced >= limbno )
|
||||
mpi_resize(a, limbno+1 );
|
||||
a->nlimbs = limbno+1;
|
||||
}
|
||||
a->d[limbno] |= (A_LIMB_1<<bitno);
|
||||
for( bitno++; bitno < BITS_PER_MPI_LIMB; bitno++ )
|
||||
a->d[limbno] &= ~(A_LIMB_1 << bitno);
|
||||
a->nlimbs = limbno+1;
|
||||
}
|
||||
|
||||
/****************
|
||||
* clear bit N of A and all bits above
|
||||
*/
|
||||
void
|
||||
mpi_clear_highbit( MPI a, unsigned n )
|
||||
{
|
||||
unsigned limbno, bitno;
|
||||
|
||||
limbno = n / BITS_PER_MPI_LIMB;
|
||||
bitno = n % BITS_PER_MPI_LIMB;
|
||||
|
||||
if( limbno >= a->nlimbs )
|
||||
return; /* not allocated, so need to clear bits :-) */
|
||||
|
||||
for( ; bitno < BITS_PER_MPI_LIMB; bitno++ )
|
||||
a->d[limbno] &= ~(A_LIMB_1 << bitno);
|
||||
a->nlimbs = limbno+1;
|
||||
}
|
||||
|
||||
/****************
|
||||
* Clear bit N of A.
|
||||
*/
|
||||
void
|
||||
mpi_clear_bit( MPI a, unsigned n )
|
||||
{
|
||||
unsigned limbno, bitno;
|
||||
|
||||
limbno = n / BITS_PER_MPI_LIMB;
|
||||
bitno = n % BITS_PER_MPI_LIMB;
|
||||
|
||||
if( limbno >= a->nlimbs )
|
||||
return; /* don't need to clear this bit, it's to far to left */
|
||||
a->d[limbno] &= ~(A_LIMB_1 << bitno);
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Shift A by N bits to the right
|
||||
* FIXME: should use alloc_limb if X and A are same.
|
||||
*/
|
||||
void
|
||||
mpi_rshift( MPI x, MPI a, unsigned n )
|
||||
{
|
||||
mpi_ptr_t xp;
|
||||
mpi_size_t xsize;
|
||||
|
||||
xsize = a->nlimbs;
|
||||
x->sign = a->sign;
|
||||
RESIZE_IF_NEEDED(x, xsize);
|
||||
xp = x->d;
|
||||
|
||||
if( xsize ) {
|
||||
mpihelp_rshift( xp, a->d, xsize, n);
|
||||
MPN_NORMALIZE( xp, xsize);
|
||||
}
|
||||
x->nlimbs = xsize;
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Shift A by COUNT limbs to the left
|
||||
* This is used only within the MPI library
|
||||
*/
|
||||
void
|
||||
mpi_lshift_limbs( MPI a, unsigned int count )
|
||||
{
|
||||
mpi_ptr_t ap = a->d;
|
||||
int n = a->nlimbs;
|
||||
int i;
|
||||
|
||||
if( !count || !n )
|
||||
return;
|
||||
|
||||
RESIZE_IF_NEEDED( a, n+count );
|
||||
|
||||
for( i = n-1; i >= 0; i-- )
|
||||
ap[i+count] = ap[i];
|
||||
for(i=0; i < count; i++ )
|
||||
ap[i] = 0;
|
||||
a->nlimbs += count;
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Shift A by COUNT limbs to the right
|
||||
* This is used only within the MPI library
|
||||
*/
|
||||
void
|
||||
mpi_rshift_limbs( MPI a, unsigned int count )
|
||||
{
|
||||
mpi_ptr_t ap = a->d;
|
||||
mpi_size_t n = a->nlimbs;
|
||||
unsigned int i;
|
||||
|
||||
if( count >= n ) {
|
||||
a->nlimbs = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
for( i = 0; i < n - count; i++ )
|
||||
ap[i] = ap[i+count];
|
||||
ap[i] = 0;
|
||||
a->nlimbs -= count;
|
||||
}
|
||||
|
||||
|
74
mpi/mpi-cmp.c
Normal file
74
mpi/mpi-cmp.c
Normal file
@ -0,0 +1,74 @@
|
||||
/* mpi-cmp.c - MPI functions
|
||||
* Copyright (C) 1998, 1999 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-internal.h"
|
||||
|
||||
int
|
||||
mpi_cmp_ui( MPI u, unsigned long v )
|
||||
{
|
||||
mpi_limb_t limb = v;
|
||||
|
||||
mpi_normalize( u );
|
||||
if( !u->nlimbs && !limb )
|
||||
return 0;
|
||||
if( u->sign )
|
||||
return -1;
|
||||
if( u->nlimbs > 1 )
|
||||
return 1;
|
||||
|
||||
if( u->d[0] == limb )
|
||||
return 0;
|
||||
else if( u->d[0] > limb )
|
||||
return 1;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
mpi_cmp( MPI u, MPI v )
|
||||
{
|
||||
mpi_size_t usize, vsize;
|
||||
int cmp;
|
||||
|
||||
mpi_normalize( u );
|
||||
mpi_normalize( v );
|
||||
usize = u->nlimbs;
|
||||
vsize = v->nlimbs;
|
||||
if( !u->sign && v->sign )
|
||||
return 1;
|
||||
if( u->sign && !v->sign )
|
||||
return -1;
|
||||
if( usize != vsize && !u->sign && !v->sign )
|
||||
return usize - vsize;
|
||||
if( usize != vsize && u->sign && v->sign )
|
||||
return vsize + usize;
|
||||
if( !usize )
|
||||
return 0;
|
||||
if( !(cmp=mpihelp_cmp( u->d, v->d, usize )) )
|
||||
return 0;
|
||||
if( (cmp < 0?1:0) == (u->sign?1:0))
|
||||
return 1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
322
mpi/mpi-div.c
Normal file
322
mpi/mpi-div.c
Normal file
@ -0,0 +1,322 @@
|
||||
/* mpi-div.c - MPI functions
|
||||
* Copyright (C) 1994, 1996 Free Software Foundation, Inc.
|
||||
* 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
|
||||
*
|
||||
* 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"
|
||||
|
||||
|
||||
|
||||
void
|
||||
mpi_fdiv_r( MPI rem, MPI dividend, MPI divisor )
|
||||
{
|
||||
int divisor_sign = divisor->sign;
|
||||
MPI temp_divisor = NULL;
|
||||
|
||||
/* We need the original value of the divisor after the remainder has been
|
||||
* preliminary calculated. We have to copy it to temporary space if it's
|
||||
* the same variable as REM. */
|
||||
if( rem == divisor ) {
|
||||
temp_divisor = mpi_copy( divisor );
|
||||
divisor = temp_divisor;
|
||||
}
|
||||
|
||||
mpi_tdiv_r( rem, dividend, divisor );
|
||||
|
||||
if( ((divisor_sign?1:0) ^ (dividend->sign?1:0)) && rem->nlimbs )
|
||||
mpi_add( rem, rem, divisor);
|
||||
|
||||
if( temp_divisor )
|
||||
mpi_free(temp_divisor);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************
|
||||
* Division rounding the quotient towards -infinity.
|
||||
* The remainder gets the same sign as the denominator.
|
||||
* rem is optional
|
||||
*/
|
||||
|
||||
ulong
|
||||
mpi_fdiv_r_ui( MPI rem, MPI dividend, ulong divisor )
|
||||
{
|
||||
mpi_limb_t rlimb;
|
||||
|
||||
rlimb = mpihelp_mod_1( dividend->d, dividend->nlimbs, divisor );
|
||||
if( rlimb && dividend->sign )
|
||||
rlimb = divisor - rlimb;
|
||||
|
||||
if( rem ) {
|
||||
rem->d[0] = rlimb;
|
||||
rem->nlimbs = rlimb? 1:0;
|
||||
}
|
||||
return rlimb;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mpi_fdiv_q( MPI quot, MPI dividend, MPI divisor )
|
||||
{
|
||||
MPI tmp = mpi_alloc( mpi_get_nlimbs(quot) );
|
||||
mpi_fdiv_qr( quot, tmp, dividend, divisor);
|
||||
mpi_free(tmp);
|
||||
}
|
||||
|
||||
void
|
||||
mpi_fdiv_qr( MPI quot, MPI rem, MPI dividend, MPI divisor )
|
||||
{
|
||||
int divisor_sign = divisor->sign;
|
||||
MPI temp_divisor = NULL;
|
||||
|
||||
if( quot == divisor || rem == divisor ) {
|
||||
temp_divisor = mpi_copy( divisor );
|
||||
divisor = temp_divisor;
|
||||
}
|
||||
|
||||
mpi_tdiv_qr( quot, rem, dividend, divisor );
|
||||
|
||||
if( (divisor_sign ^ dividend->sign) && rem->nlimbs ) {
|
||||
mpi_sub_ui( quot, quot, 1 );
|
||||
mpi_add( rem, rem, divisor);
|
||||
}
|
||||
|
||||
if( temp_divisor )
|
||||
mpi_free(temp_divisor);
|
||||
}
|
||||
|
||||
|
||||
/* If den == quot, den needs temporary storage.
|
||||
* If den == rem, den needs temporary storage.
|
||||
* If num == quot, num needs temporary storage.
|
||||
* If den has temporary storage, it can be normalized while being copied,
|
||||
* i.e no extra storage should be allocated.
|
||||
*/
|
||||
|
||||
void
|
||||
mpi_tdiv_r( MPI rem, MPI num, MPI den)
|
||||
{
|
||||
mpi_tdiv_qr(NULL, rem, num, den );
|
||||
}
|
||||
|
||||
void
|
||||
mpi_tdiv_qr( MPI quot, MPI rem, MPI num, MPI den)
|
||||
{
|
||||
mpi_ptr_t np, dp;
|
||||
mpi_ptr_t qp, rp;
|
||||
mpi_size_t nsize = num->nlimbs;
|
||||
mpi_size_t dsize = den->nlimbs;
|
||||
mpi_size_t qsize, rsize;
|
||||
mpi_size_t sign_remainder = num->sign;
|
||||
mpi_size_t sign_quotient = num->sign ^ den->sign;
|
||||
unsigned normalization_steps;
|
||||
mpi_limb_t q_limb;
|
||||
mpi_ptr_t marker[5];
|
||||
int markidx=0;
|
||||
|
||||
/* Ensure space is enough for quotient and remainder.
|
||||
* We need space for an extra limb in the remainder, because it's
|
||||
* up-shifted (normalized) below. */
|
||||
rsize = nsize + 1;
|
||||
mpi_resize( rem, rsize);
|
||||
|
||||
qsize = rsize - dsize; /* qsize cannot be bigger than this. */
|
||||
if( qsize <= 0 ) {
|
||||
if( num != rem ) {
|
||||
rem->nlimbs = num->nlimbs;
|
||||
rem->sign = num->sign;
|
||||
MPN_COPY(rem->d, num->d, nsize);
|
||||
}
|
||||
if( quot ) {
|
||||
/* This needs to follow the assignment to rem, in case the
|
||||
* numerator and quotient are the same. */
|
||||
quot->nlimbs = 0;
|
||||
quot->sign = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if( quot )
|
||||
mpi_resize( quot, qsize);
|
||||
|
||||
/* Read pointers here, when reallocation is finished. */
|
||||
np = num->d;
|
||||
dp = den->d;
|
||||
rp = rem->d;
|
||||
|
||||
/* Optimize division by a single-limb divisor. */
|
||||
if( dsize == 1 ) {
|
||||
mpi_limb_t rlimb;
|
||||
if( quot ) {
|
||||
qp = quot->d;
|
||||
rlimb = mpihelp_divmod_1( qp, np, nsize, dp[0] );
|
||||
qsize -= qp[qsize - 1] == 0;
|
||||
quot->nlimbs = qsize;
|
||||
quot->sign = sign_quotient;
|
||||
}
|
||||
else
|
||||
rlimb = mpihelp_mod_1( np, nsize, dp[0] );
|
||||
rp[0] = rlimb;
|
||||
rsize = rlimb != 0?1:0;
|
||||
rem->nlimbs = rsize;
|
||||
rem->sign = sign_remainder;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if( quot ) {
|
||||
qp = quot->d;
|
||||
/* Make sure QP and NP point to different objects. Otherwise the
|
||||
* numerator would be gradually overwritten by the quotient limbs. */
|
||||
if(qp == np) { /* Copy NP object to temporary space. */
|
||||
np = marker[markidx++] = mpi_alloc_limb_space(nsize,
|
||||
mpi_is_secure(quot));
|
||||
MPN_COPY(np, qp, nsize);
|
||||
}
|
||||
}
|
||||
else /* Put quotient at top of remainder. */
|
||||
qp = rp + dsize;
|
||||
|
||||
count_leading_zeros( normalization_steps, dp[dsize - 1] );
|
||||
|
||||
/* Normalize the denominator, i.e. make its most significant bit set by
|
||||
* shifting it NORMALIZATION_STEPS bits to the left. Also shift the
|
||||
* numerator the same number of steps (to keep the quotient the same!).
|
||||
*/
|
||||
if( normalization_steps ) {
|
||||
mpi_ptr_t tp;
|
||||
mpi_limb_t nlimb;
|
||||
|
||||
/* Shift up the denominator setting the most significant bit of
|
||||
* the most significant word. Use temporary storage not to clobber
|
||||
* the original contents of the denominator. */
|
||||
tp = marker[markidx++] = mpi_alloc_limb_space(dsize,mpi_is_secure(den));
|
||||
mpihelp_lshift( tp, dp, dsize, normalization_steps );
|
||||
dp = tp;
|
||||
|
||||
/* Shift up the numerator, possibly introducing a new most
|
||||
* significant word. Move the shifted numerator in the remainder
|
||||
* meanwhile. */
|
||||
nlimb = mpihelp_lshift(rp, np, nsize, normalization_steps);
|
||||
if( nlimb ) {
|
||||
rp[nsize] = nlimb;
|
||||
rsize = nsize + 1;
|
||||
}
|
||||
else
|
||||
rsize = nsize;
|
||||
}
|
||||
else {
|
||||
/* The denominator is already normalized, as required. Copy it to
|
||||
* temporary space if it overlaps with the quotient or remainder. */
|
||||
if( dp == rp || (quot && (dp == qp))) {
|
||||
mpi_ptr_t tp;
|
||||
|
||||
tp = marker[markidx++] = mpi_alloc_limb_space(dsize, mpi_is_secure(den));
|
||||
MPN_COPY( tp, dp, dsize );
|
||||
dp = tp;
|
||||
}
|
||||
|
||||
/* Move the numerator to the remainder. */
|
||||
if( rp != np )
|
||||
MPN_COPY(rp, np, nsize);
|
||||
|
||||
rsize = nsize;
|
||||
}
|
||||
|
||||
q_limb = mpihelp_divrem( qp, 0, rp, rsize, dp, dsize );
|
||||
|
||||
if( quot ) {
|
||||
qsize = rsize - dsize;
|
||||
if(q_limb) {
|
||||
qp[qsize] = q_limb;
|
||||
qsize += 1;
|
||||
}
|
||||
|
||||
quot->nlimbs = qsize;
|
||||
quot->sign = sign_quotient;
|
||||
}
|
||||
|
||||
rsize = dsize;
|
||||
MPN_NORMALIZE (rp, rsize);
|
||||
|
||||
if( normalization_steps && rsize ) {
|
||||
mpihelp_rshift(rp, rp, rsize, normalization_steps);
|
||||
rsize -= rp[rsize - 1] == 0?1:0;
|
||||
}
|
||||
|
||||
rem->nlimbs = rsize;
|
||||
rem->sign = sign_remainder;
|
||||
while( markidx )
|
||||
mpi_free_limb_space(marker[--markidx]);
|
||||
}
|
||||
|
||||
void
|
||||
mpi_tdiv_q_2exp( MPI w, MPI u, unsigned count )
|
||||
{
|
||||
mpi_size_t usize, wsize;
|
||||
mpi_size_t limb_cnt;
|
||||
|
||||
usize = u->nlimbs;
|
||||
limb_cnt = count / BITS_PER_MPI_LIMB;
|
||||
wsize = usize - limb_cnt;
|
||||
if( limb_cnt >= usize )
|
||||
w->nlimbs = 0;
|
||||
else {
|
||||
mpi_ptr_t wp;
|
||||
mpi_ptr_t up;
|
||||
|
||||
RESIZE_IF_NEEDED( w, wsize );
|
||||
wp = w->d;
|
||||
up = u->d;
|
||||
|
||||
count %= BITS_PER_MPI_LIMB;
|
||||
if( count ) {
|
||||
mpihelp_rshift( wp, up + limb_cnt, wsize, count );
|
||||
wsize -= !wp[wsize - 1];
|
||||
}
|
||||
else {
|
||||
MPN_COPY_INCR( wp, up + limb_cnt, wsize);
|
||||
}
|
||||
|
||||
w->nlimbs = wsize;
|
||||
}
|
||||
}
|
||||
|
||||
/****************
|
||||
* Check whether dividend is divisible by divisor
|
||||
* (note: divisor must fit into a limb)
|
||||
*/
|
||||
int
|
||||
mpi_divisible_ui(MPI dividend, ulong divisor )
|
||||
{
|
||||
return !mpihelp_mod_1( dividend->d, dividend->nlimbs, divisor );
|
||||
}
|
||||
|
54
mpi/mpi-gcd.c
Normal file
54
mpi/mpi-gcd.c
Normal file
@ -0,0 +1,54 @@
|
||||
/* mpi-gcd.c - MPI functions
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "mpi-internal.h"
|
||||
|
||||
/****************
|
||||
* Find the greatest common divisor G of A and B.
|
||||
* Return: true if this 1, false in all other cases
|
||||
*/
|
||||
int
|
||||
mpi_gcd( MPI g, MPI xa, MPI xb )
|
||||
{
|
||||
MPI a, b;
|
||||
|
||||
a = mpi_copy(xa);
|
||||
b = mpi_copy(xb);
|
||||
|
||||
/* TAOCP Vol II, 4.5.2, Algorithm A */
|
||||
a->sign = 0;
|
||||
b->sign = 0;
|
||||
while( mpi_cmp_ui( b, 0 ) ) {
|
||||
mpi_fdiv_r( g, a, b ); /* g used as temorary variable */
|
||||
mpi_set(a,b);
|
||||
mpi_set(b,g);
|
||||
}
|
||||
mpi_set(g, a);
|
||||
|
||||
mpi_free(a);
|
||||
mpi_free(b);
|
||||
return !mpi_cmp_ui( g, 1);
|
||||
}
|
||||
|
||||
|
||||
|
36
mpi/mpi-inline.c
Normal file
36
mpi/mpi-inline.c
Normal file
@ -0,0 +1,36 @@
|
||||
/* mpi-inline.c
|
||||
* Copyright (C) 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
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/* put the inline functions as real functions into the lib */
|
||||
#define G10_MPI_INLINE_DECL
|
||||
|
||||
#include "mpi-internal.h"
|
||||
|
||||
/* always include the header becuase it is only
|
||||
* included by mpi-internal if __GCC__ is defined but we
|
||||
* need it here in all cases and the above definition of
|
||||
* of the macro allows us to do so
|
||||
*/
|
||||
#include "mpi-inline.h"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user