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
|
Authors
|
||||||
Assigns GNU Privacy Guard and future changes.
|
=======
|
||||||
werner.koch@guug.de
|
|
||||||
Designed and implemented GnuPG.
|
|
||||||
|
|
||||||
|
Birger Langkjer <birger.langkjer@image.dk> Translations [da]
|
||||||
|
|
||||||
GNUPG Matthew Skala 1998-08-10
|
Daniel Resare <daniel@resare.com> Translations [sv]
|
||||||
Disclaims changes.
|
|
||||||
mskala@ansuz.sooke.bc.ca
|
|
||||||
Wrote cipher/twofish.c.
|
|
||||||
|
|
||||||
GNUPG Natural Resources Canada 1998-08-11
|
David Shaw <dshaw@jabberwocky.com> Assignment
|
||||||
Disclaims changes by Matthew Skala.
|
(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
|
Edmund GRIMLEY EVANS <edmundo@rano.org> Translations [eo]
|
||||||
Assigns changes.
|
|
||||||
mroth@nessie.de
|
|
||||||
Wrote cipher/des.c.
|
|
||||||
Changes and bug fixes all over the place.
|
|
||||||
|
|
||||||
|
Gaël Quéri <gael@lautre.net> Translations [fr]
|
||||||
|
(fixed a lot of typos)
|
||||||
|
|
||||||
GNUPG Niklas Hernaeus 1998-09-18
|
Gregory Steuck <steuck@iname.com> Translations [ru]
|
||||||
Disclaims changes.
|
|
||||||
nh@df.lth.se
|
|
||||||
Weak key patches.
|
|
||||||
|
|
||||||
|
Ivo Timmermans <itimmermans@bigfoot.com> Translations [nl]
|
||||||
|
|
||||||
GNUPG Rémi Guyomarch 1999-05-25
|
Jacobo Tarri'o Barreiro <jtarrio@iname.com> Translations [gl]
|
||||||
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
|
|
||||||
|
|
||||||
|
Janusz Aleksander Urbanowicz <alex@bofh.torun.pl> Translations [po]
|
||||||
|
|
||||||
TRANSLATIONS Marco d'Itri 1997-02-22
|
Magda Procha'zkova' <magda@math.muni.cz> Translations [cs]
|
||||||
Disclaimer. [it]
|
|
||||||
md@linux.it
|
|
||||||
|
|
||||||
|
Michael Roth <mroth@nessie.de> Assignment
|
||||||
|
(wrote cipher/des.c., changes and bug fixes all over the place)
|
||||||
|
|
||||||
TRANSLATIONS Gael Queri 1998-09-08
|
Marco d'Itri <md@linux.it> Translations [it]
|
||||||
Disclaimer. [fr]
|
|
||||||
gqueri@mail.dotcom.fr
|
|
||||||
Fixed a lot of typos.
|
|
||||||
|
|
||||||
|
Matthew Skala <mskala@ansuz.sooke.bc.ca> Disclaimer
|
||||||
|
(wrote cipher/twofish.c)
|
||||||
|
|
||||||
TRANSLATIONS Walter Koch 1998-09-08
|
Niklas Hernaeus <nh@df.lth.se> Disclaimer
|
||||||
Disclaimer. [de]
|
(weak key patches)
|
||||||
koch@hsp.de
|
|
||||||
|
|
||||||
|
Nilgun Belma Buguner <nilgun@technologist.com> Translations [tr]
|
||||||
|
|
||||||
TRANSLATIONS Gregory Steuck 1998-10-20
|
Nils Ellmenreich <nils 'at' infosun.fmi.uni-passau.de> Assignment
|
||||||
Disclaimer. [ru]
|
(configure.in, cipher/rndlinux.c, FAQ)
|
||||||
steuck@iname.com
|
|
||||||
|
|
||||||
|
Paul Eggert <eggert@twinsun.com>
|
||||||
|
(configuration macros for LFS)
|
||||||
|
|
||||||
TRANSLATIONS Urko Lusa
|
Pedro Morais <morais@poli.org> Translations [pt_PT]
|
||||||
Disclaimer. [es_ES]
|
|
||||||
ulusa@euskalnet.net
|
|
||||||
|
|
||||||
|
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
|
Stefan Bellon <sbellon@sbellon.de> Assignment
|
||||||
Disclaimer. [pt_BR]
|
(All patches to support RISC OS)
|
||||||
jungmann@cwb.matrix.com.br
|
|
||||||
|
|
||||||
|
Timo Schulz <twoaday@freakmail.de> Assignment
|
||||||
|
(util/w32reg.c, g10/passphrase.c, g10/hkp.c)
|
||||||
|
|
||||||
TRANSLATIONS Pedro Morais
|
Tedi Heriyanto <tedi_h@gmx.net> Translations [id]
|
||||||
Disclaimer. [pt_PT]
|
|
||||||
morais@poli.org
|
|
||||||
|
|
||||||
|
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
|
Toomas Soome <tsoome@ut.ee> Translations [et]
|
||||||
Disclaimer. [po]
|
|
||||||
alex@bofh.torun.pl
|
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
|
This program uses the zlib compression library written by
|
||||||
Jean-loup Gailly and Mark Adler.
|
Jean-loup Gailly and Mark Adler.
|
||||||
|
|
||||||
Most of the stuff in mpi has been taken from the GMP library by
|
Most of the stuff in mpi has been taken from the GMP library by
|
||||||
Torbjorn Granlund <tege@noisy.tmg.se>.
|
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.
|
Copyright Peter Gutmann, Paul Kendall, and Chris Wedgwood 1996-1999.
|
||||||
|
|
||||||
The files in debian/ are by James Troup who is the Debian maintainer
|
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
|
The RPM specs file scripts/gnupg.spec has been contributed by
|
||||||
several people.
|
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
|
http://www.gnupg.org/buglist.html
|
||||||
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.)
|
|
||||||
|
|
||||||
Format: severity: [ *] to [***], no, first reported, by, version.
|
for a list of know bugs in GnuPG. We don't distribute this list anymore
|
||||||
Bugs which are marked with "FIX: yyyy-mm-dd" are fixed in the CVS
|
with the package because a more current one with notes in which version
|
||||||
and after about half a day in the rsync snapshots.
|
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
|
The licenses for most software are designed to take away your
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
License is intended to guarantee your freedom to share and change free
|
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
|
General Public License applies to most of the Free Software
|
||||||
Foundation's software and to any other program whose authors commit to
|
Foundation's software and to any other program whose authors commit to
|
||||||
using it. (Some other Free Software Foundation software is covered by
|
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.
|
your programs, too.
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
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
|
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
|
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
|
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
|
excuse you from the conditions of this License. If you cannot
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
License and any other pertinent obligations, then as a consequence you
|
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
|
license would not permit royalty-free redistribution of the Program by
|
||||||
all those who receive copies directly or indirectly through you, then
|
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
|
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
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
address new problems or concerns.
|
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
|
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
|
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
|
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
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
programs whose distribution conditions are different, write to the author
|
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
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
make exceptions for this. Our decision will be guided by the two goals
|
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
|
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.
|
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.>
|
<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
|
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
|
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
|
If the program is interactive, make it output a short notice like this
|
||||||
when it starts in an interactive mode:
|
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'.
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
This is free software, and you are welcome to redistribute it
|
This is free software, and you are welcome to redistribute it
|
||||||
under certain conditions; type `show c' for details.
|
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
|
* NEWS: changes since 1.0.7.
|
||||||
mainly the directories mpi/, cipher/ and gcrypt/.
|
|
||||||
|
|
||||||
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.ac: Check for strcasecmp and strncasecmp. Removed
|
||||||
* configure.in: Set the libtool version here, removed the need
|
stricmp and memicmp checks.
|
||||||
for the version file.
|
|
||||||
|
|
||||||
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.
|
2002-05-03 David Shaw <dshaw@jabberwocky.com>
|
||||||
By Nils Ellmenreich.
|
|
||||||
(--with-egd-socket): New.
|
|
||||||
|
|
||||||
* 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.
|
* acinclude.m4 (GNUPG_CHECK_FAQPROG): New.
|
||||||
* configure.in: Test for this.
|
* configure.in: Test for this.
|
||||||
|
|
||||||
* configure.in (DYNLINK_MOD_CFLAGS): Fix by David Champion.
|
* 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.
|
* configure.in (GNUPG_HOMEDIR): New.
|
||||||
* Makefile.am, configure.in: Support for the new directory.
|
|
||||||
|
|
||||||
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
|
* configure.in (mingw32): Changes to allow for mingw32msvc
|
||||||
|
|
||||||
Fri Jul 14 19:38:23 CEST 2000 Werner Koch <wk@>
|
Fri Jul 14 10:17:30 CEST 2000 Werner Koch <wk@openit.de>
|
||||||
|
|
||||||
The big merge between this one and the stable branch 1.0. Still need
|
|
||||||
to merge TNANKS, AUTHORS and such. It probaly does not compile yet.
|
|
||||||
|
|
||||||
* acinclude.m4 (GNUPG_CHECK_MLOCK): Fixed syntax error in C code.
|
* 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.
|
* 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.
|
* 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.
|
* 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.
|
GNUPG_CHECK_RDYNAMIC which should handle gcc with non GNU ld nicer.
|
||||||
Contributed by Dave Dykstra.
|
Contributed by Dave Dykstra.
|
||||||
* configure.in (GNYPG_CHECK_RDYNAMIC): Replaced by the new check.
|
* 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.
|
Sun May 28 13:55:17 CEST 2000 Werner Koch <wk@openit.de>
|
||||||
* configure.in (ALL_LINGUAS): Add Esperanto.
|
|
||||||
* configure.in (ALL_LINGUAS): Add sv and ja.
|
|
||||||
|
|
||||||
* configure.in: Use /usr/local for CFLAGS and LDFLAGS when
|
* acinclude.m4 (GNUPG_SYS_NM_PARSE): Added BSDI support.
|
||||||
target is freebsd. By Rémi.
|
(GNUPG_CHECK_RDYNAMIC): Ditto.
|
||||||
|
|
||||||
* configure.in: Do not set development version when the version has
|
Wed Apr 19 10:57:26 CEST 2000 Werner Koch <wk@openit.de>
|
||||||
a dash in it. Suggested by Dave Dykstra.
|
|
||||||
|
|
||||||
* configure.in: Removed substitution for doc/gph/Makefile.
|
* acconfig.h (HAVE_MLOCK): Added
|
||||||
Do all the gcc warning only in maintainer mode.
|
|
||||||
|
|
||||||
* configure.in (dlopen): Use CHECK_FUNC for a test of dlopen in libc.
|
Wed Mar 22 13:50:24 CET 2000 Werner Koch <wk@openit.de>
|
||||||
Suggested by Alexandre Oliva.
|
|
||||||
(-Wall): Moved the settting of gcc warning options near to the end
|
|
||||||
so that tests don't get confused. Suggested by Paul D. Smith.
|
|
||||||
|
|
||||||
* acinclude.m4 (GNUPG_SYS_NM_PARSE): Added BSDI support.
|
* acinclude.m4 (GNUPG_CHECK_MLOCK): Changed the way to test for
|
||||||
(GNUPG_CHECK_RDYNAMIC): Ditto.
|
librt. Test suggested by Jeff Long.
|
||||||
|
|
||||||
* acinclude.m4 (GNUPG_CHECK_MLOCK): Changed the way to test for
|
Fri Mar 17 17:50:25 CET 2000 Werner Koch <wk@openit.de>
|
||||||
librt. Test suggested by Jeff Long.
|
|
||||||
|
|
||||||
* acinclude.m4 (GNUPG_CHECK_MLOCK): Do librt check only when
|
* acinclude.m4 (GNUPG_CHECK_MLOCK): Do librt check only when
|
||||||
we can't link a test program. This way GNU systems don't need
|
we can't link a test program. This way GNU systems don't need
|
||||||
to link against linrt.
|
to link against linrt.
|
||||||
(GNUPG_CHECK_IPC): Fixed use of TRY_COMPILE macro. From Tim Mooney.
|
(GNUPG_CHECK_IPC): Fixed use of TRY_COMPILE macro. From Tim Mooney.
|
||||||
|
|
||||||
* acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Add support for
|
2000-03-14 12:07:54 Werner Koch (wk@habibti.openit.de)
|
||||||
DJGPP.
|
|
||||||
(GNUPG_CHECK_MLOCK): Check whether mlock sits in librt.
|
|
||||||
|
|
||||||
* 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.
|
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.
|
* VERSION: Set to 1.0.1.
|
||||||
* configure.in: Check and fix the version number of gcrypt/gcrypt.h
|
|
||||||
so that it is always the save as VERSION.
|
|
||||||
|
|
||||||
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.
|
* 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
|
very nice Howto documents - I apoligize for forgetting to mention them
|
||||||
earlier.
|
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.
|
* configure.in: Add "-lcap" when capabilities are requested.
|
||||||
Add the conditional CROSS_COMPILING.
|
Add the conditional CROSS_COMPILING.
|
||||||
* Makefile.am: Don't use checks when 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>
|
Wed Sep 15 16:22:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||||
|
|
||||||
|
|
||||||
* configure.in (ALL_LINGUAS): Add pt_PT.
|
* configure.in (ALL_LINGUAS): Add pt_PT.
|
||||||
|
|
||||||
* configure.in: Some tweaks for cross compiling under MingW32
|
* 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>
|
Tue Sep 7 17:08:10 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||||
|
|
||||||
|
|
||||||
* VERSION: Set to 1.0.0.
|
* VERSION: Set to 1.0.0.
|
||||||
|
|
||||||
Mon Sep 6 19:59:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
Mon Sep 6 19:59:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||||
|
|
||||||
|
|
||||||
* configure.in: Create makefile in doc/gph
|
* configure.in: Create makefile in doc/gph
|
||||||
|
|
||||||
* acinclude.m4 (GNUPG_FUNC_MKDIR_TAKES_ONE_ARG): New
|
* 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>
|
Thu Sep 2 16:40:55 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||||
|
|
||||||
|
|
||||||
* VERSION: Set to 0.9.11.
|
* VERSION: Set to 0.9.11.
|
||||||
|
|
||||||
Tue Aug 31 17:20:44 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
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
|
* configure.in : Fixed zlib stuff
|
||||||
* Makefile.am: Likewise
|
* 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.
|
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
|
none - Do not linkl any module in but rely on
|
||||||
a dynmically loaded modules.
|
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
|
--with-included-zlib Forces usage of the local zlib sources. Default is
|
||||||
to use the (shared) library of the system.
|
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)
|
--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
|
--disable-dynload If you have problems with dynamic loading, this option
|
||||||
disables all dynamic loading stuff.
|
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)
|
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
|
The Random Device
|
||||||
=================
|
=================
|
||||||
Random devices are available in Linux, FreeBSD and OpenBSD.
|
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
|
The ~/.gnupg directory will be created if it does not exist. Your first
|
||||||
action should be to create a key pair: "gpg --gen-key".
|
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
|
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
|
Compiling For Multiple Architectures
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
You can compile the package for more than one kind of computer at the same
|
You can compile the package for more than one kind of computer at
|
||||||
time by placing the object files for each architecture in their own
|
the same time by placing the object files for each architecture in
|
||||||
directory. To do this, you must use a version of `make', such as GNU `make',
|
their own directory. To do this, you must use a version of `make',
|
||||||
that supports the `VPATH' variable. `cd' to the directory where you want the
|
such as GNU `make', that supports the `VPATH' variable. `cd' to the
|
||||||
object files and executables to go and run the `configure' script.
|
directory where you want the object files and executables to go and
|
||||||
`configure' automatically checks for the source code in the directory that
|
run the `configure' script; please use a relative filename name to
|
||||||
`configure' is in and in `..'.
|
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'
|
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
|
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
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
if CROSS_COMPILING
|
if CROSS_COMPILING
|
||||||
@ -6,27 +24,17 @@ else
|
|||||||
checks = checks
|
checks = checks
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COMPILE_AGENT
|
SUBDIRS = intl zlib util mpi cipher tools g10 keyserver po doc ${checks}
|
||||||
agent = agent
|
EXTRA_DIST = PROJECTS BUGS config.h.in
|
||||||
else
|
DISTCLEANFILES = g10defs.h
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
# Add all the files listed in "distfiles" files to the distribution,
|
# 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.
|
# we need for the Prereq: patch file trick.
|
||||||
dist-hook:
|
dist-hook:
|
||||||
@set -e; \
|
@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 ; \
|
dir=`dirname $$file` ; $(mkinstalldirs) $(distdir)/$$dir ; \
|
||||||
for i in distfiles `cat $(top_srcdir)/$$file` ; do \
|
for i in distfiles `cat $(top_srcdir)/$$file` ; do \
|
||||||
ln $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i 2> /dev/null \
|
ln $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i 2> /dev/null \
|
||||||
@ -36,8 +44,11 @@ dist-hook:
|
|||||||
@set -e; \
|
@set -e; \
|
||||||
sed -e 's/@pkg_version@/$(VERSION)/g' \
|
sed -e 's/@pkg_version@/$(VERSION)/g' \
|
||||||
$(top_srcdir)/scripts/gnupg.spec.in \
|
$(top_srcdir)/scripts/gnupg.spec.in \
|
||||||
> $(distdir)/scripts/gnupg.spec ; \
|
> $(distdir)/scripts/gnupg.spec
|
||||||
echo "$(VERSION)" > $(distdir)/VERSION
|
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
|
* New commands: --personal-cipher-preferences,
|
||||||
where you got GnuPG.
|
--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
|
* 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
|
* 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 options --merge-only and --try-all-secrets.
|
||||||
|
|
||||||
* New configuration option --with-egd-socket.
|
* 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
|
* 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
|
* 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
|
* CAST5 and SHA-1 are now the default algorithms to protect the key
|
||||||
and for symmetric-only encryption. This should solve a couple
|
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
|
* Twofish and MDC enhanced encryption is now used. PGP 7 supports
|
||||||
this. Older versions of GnuPG don't support it, so they should be
|
this. Older versions of GnuPG don't support it, so they should be
|
||||||
upgraded to at least 1.0.2
|
upgraded to at least 1.0.2
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 1.1.1
|
Noteworthy changes in version 1.0.2 (2000-07-12)
|
||||||
-----------------------------------
|
----------------------------------------------
|
||||||
|
|
||||||
* Add gpg-agent.
|
|
||||||
|
|
||||||
* Removed option --emulate-checksum-bug
|
|
||||||
|
|
||||||
* Fixed expiration handling of encryption keys.
|
* 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.
|
entirely. This option should not yet be used.
|
||||||
|
|
||||||
* New option --no-auto-key-retrieve to disable retrieving of
|
* 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.
|
* 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
|
* Fixed some minor bugs and the problem with conventional encrypted
|
||||||
packets which did use the gpg v3 partial length headers.
|
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.
|
* Fixed a bug with symmetric-only encryption using the non-default 3DES.
|
||||||
The option --emulate-3des-s2k-bug may be used to decrypt documents
|
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.
|
* New keys are now generated with an additional preference to Blowfish.
|
||||||
|
|
||||||
* Removed the GNU Privacy Handbook from the distribution because it
|
* Removed the GNU Privacy Handbook from the distribution as it will go
|
||||||
is now in the package GPH.
|
into a separate one.
|
||||||
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 1.0.0 (1999-09-07)
|
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
|
* The string "(INSECURE!)" is appended to a new user-id if this
|
||||||
is generated on a system without a good random number generator.
|
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
|
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-solaris5.4
|
||||||
sparc-sun-sunos4.1.2
|
sparc-sun-sunos4.1.2
|
||||||
i386-pc-sysv4.2 (USL Unixware v1.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>
|
PowerPC based machines:
|
||||||
|
CFLAGS="-g -O2 -mcpu=powerpc" ./configure --disable-asm --disable-dynload
|
||||||
runs successfully on HP-UX v11.00 as well. (using gcc)
|
+--enable-static-rnd=egd
|
||||||
|
|
||||||
Johan Wevers <johanw@vulcan.xs4all.nl> is working on a NL translation.
|
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
Ctrl-D does not work correct for messages entered at the tty.
|
||||||
FIX: 1999-06-18 (Better EOF detection on terminals)
|
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
|
* 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?)
|
can do this in trustdb.c:verify_own_keys. (special tool?)
|
||||||
|
Hmmm, we better drop the duplication of the public part and just keep
|
||||||
* rewrite --list-packets or put it into another tool.
|
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.
|
* 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
|
We should add an abstraction layer so that adding support for
|
||||||
different certificate structures will become easier.
|
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
|
GnuPG - The GNU Privacy Guard
|
||||||
-------------------------------
|
-------------------------------
|
||||||
Version 1.1
|
Version 1.0
|
||||||
|
|
||||||
WARNING: This is the current development branch
|
Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
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
|
|
||||||
|
|
||||||
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
|
code. Here is a list of those people. Help me keep it complete and free of
|
||||||
errors.
|
errors.
|
||||||
|
|
||||||
|
Adam Mitchell adam@cafe21.org
|
||||||
|
Albert Chin china@thewrittenword.com
|
||||||
|
Alec Habig habig@budoe2.bu.edu
|
||||||
Allan Clark allanc@sco.com
|
Allan Clark allanc@sco.com
|
||||||
Anand Kumria wildfire@progsoc.uts.edu.au
|
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
|
Ariel T Glenn ariel@columbia.edu
|
||||||
Bodo Moeller Bodo_Moeller@public.uni-hamburg.de
|
Bodo Moeller Bodo_Moeller@public.uni-hamburg.de
|
||||||
|
Brendan O'Dea bod@debian.org
|
||||||
Brenno de Winter brenno@dewinter.com
|
Brenno de Winter brenno@dewinter.com
|
||||||
|
Brian M. Carlson karlsson@hal-pc.org
|
||||||
Brian Moore bem@cmc.net
|
Brian Moore bem@cmc.net
|
||||||
Brian Warner warner@lothar.com
|
Brian Warner warner@lothar.com
|
||||||
Bryan Fullerton bryanf@samurai.com
|
Bryan Fullerton bryanf@samurai.com
|
||||||
Caskey L. Dickson caskey@technocage.com
|
Caskey L. Dickson caskey@technocage.com
|
||||||
Cees van de Griend cees-list@griend.xs4all.nl
|
Cees van de Griend cees-list@griend.xs4all.nl
|
||||||
Charles Levert charles@comm.polymtl.ca
|
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
|
Christian von Roques roques@pond.sub.org
|
||||||
Christopher Oliver oliver@fritz.traverse.net
|
Christopher Oliver oliver@fritz.traverse.net
|
||||||
Christian Recktenwald chris@citecs.de
|
Christian Recktenwald chris@citecs.de
|
||||||
|
Dan Winship danw@helixcode.com
|
||||||
Daniel Eisenbud eisenbud@cs.swarthmore.edu
|
Daniel Eisenbud eisenbud@cs.swarthmore.edu
|
||||||
Daniel Koening dan@mail.isis.de
|
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 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
|
Detlef Lannert lannert@lannert.rz.uni-duesseldorf.de
|
||||||
|
Dimitri dmitri@advantrix.com
|
||||||
Dirk Lattermann dlatt@t-online.de
|
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
|
Ed Boraas ecxjo@esperanto.org
|
||||||
|
Edmund GRIMLEY EVANS edmundo@rano.org
|
||||||
|
Edwin Woudt edwin@woudt.nl
|
||||||
Enzo Michelangeli em@MailAndNews.com
|
Enzo Michelangeli em@MailAndNews.com
|
||||||
Ernst Molitor ernst.molitor@uni-bonn.de
|
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
|
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 Heckenbach heckenb@mi.uni-erlangen.de
|
||||||
Frank Stajano frank.stajano@cl.cam.ac.uk
|
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 Louis glouis@dynamicro.on.ca
|
||||||
Greg Troxel gdt@ir.bbn.com
|
Greg Troxel gdt@ir.bbn.com
|
||||||
Gregory Steuck steuck@iname.com
|
Gregory Steuck steuck@iname.com
|
||||||
Geoff Keating geoffk@ozemail.com.au
|
Geoff Keating geoffk@ozemail.com.au
|
||||||
Harald Denker harry@hal.westfalen.de
|
Harald Denker harry@hal.westfalen.de
|
||||||
|
Holger Baust Holger.Baust@freenet-ag.de
|
||||||
Hendrik Buschkamp buschkamp@rheumanet.org
|
Hendrik Buschkamp buschkamp@rheumanet.org
|
||||||
Holger Schurig holger@d.om.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
|
Hugh Daniel hugh@toad.com
|
||||||
|
Huy Le huyle@ugcs.caltech.edu
|
||||||
Ian McKellar imckellar@harvestroad.com.au
|
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
|
Janusz A. Urbanowicz alex@bofh.torun.pl
|
||||||
James Troup james@nocrew.org
|
James Troup james@nocrew.org
|
||||||
Jean-loup Gailly gzip@prep.ai.mit.edu
|
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
|
Jens Bachem bachem@rrz.uni-koeln.de
|
||||||
|
Jeroen C. van Gelderen jeroen@vangelderen.org
|
||||||
J Horacio MG homega@ciberia.es
|
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
|
Joachim Backes backes@rhrk.uni-kl.de
|
||||||
|
Joe Rhett jrhett@isite.net
|
||||||
John A. Martin jam@jamux.com
|
John A. Martin jam@jamux.com
|
||||||
Johnny Teveßen j.tevessen@gmx.de
|
Johnny Teveßen j.tevessen@gmx.de
|
||||||
Jörg Schilling schilling@fokus.gmd.de
|
Jörg Schilling schilling@fokus.gmd.de
|
||||||
|
Jos Backus Jos.Backus@nl.origin-it.com
|
||||||
Jun Kuriyama kuriyama@sky.rim.or.jp
|
Jun Kuriyama kuriyama@sky.rim.or.jp
|
||||||
|
Kahil D. Jallad kdj4@cs.columbia.edu
|
||||||
Karl Fogel kfogel@guanabana.onshore.com
|
Karl Fogel kfogel@guanabana.onshore.com
|
||||||
Karsten Thygesen karthy@kom.auc.dk
|
Karsten Thygesen karthy@kom.auc.dk
|
||||||
Katsuhiro Kondou kondou@nec.co.jp
|
Katsuhiro Kondou kondou@nec.co.jp
|
||||||
Kazu Yamamoto kazu@iijlab.net
|
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
|
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
|
Marco d'Itri md@linux.it
|
||||||
|
Marcus Brinkmann Marcus.Brinkmann@ruhr-uni-bochum.de
|
||||||
Mark Adler madler@alumni.caltech.edu
|
Mark Adler madler@alumni.caltech.edu
|
||||||
Mark Elbrecht snowball3@bigfoot.com
|
Mark Elbrecht snowball3@bigfoot.com
|
||||||
|
Mark Pettit pettit@yahoo-inc.com
|
||||||
Markus Friedl Markus.Friedl@informatik.uni-erlangen.de
|
Markus Friedl Markus.Friedl@informatik.uni-erlangen.de
|
||||||
Martin Kahlert martin.kahlert@provi.de
|
Martin Kahlert martin.kahlert@provi.de
|
||||||
Martin Hamilton
|
Martin Hamilton
|
||||||
Martin Schulte schulte@thp.uni-koeln.de
|
Martin Schulte schulte@thp.uni-koeln.de
|
||||||
|
Matt Kraai kraai@alumni.carnegiemellon.edu
|
||||||
Matthew Skala mskala@ansuz.sooke.bc.ca
|
Matthew Skala mskala@ansuz.sooke.bc.ca
|
||||||
|
Matthew Wilcox matthew@wil.cx
|
||||||
|
Matthias Urlichs smurf@noris.de
|
||||||
Max Valianskiy maxcom@maxcom.ml.org
|
Max Valianskiy maxcom@maxcom.ml.org
|
||||||
|
Michael Engels michael.engels@uni-duesseldorf.de
|
||||||
Michael Fischer v. Mollard mfvm@gmx.de
|
Michael Fischer v. Mollard mfvm@gmx.de
|
||||||
Michael Roth mroth@nessie.de
|
Michael Roth mroth@nessie.de
|
||||||
Michael Sobolev mss@despair.transas.com
|
Michael Sobolev mss@despair.transas.com
|
||||||
|
Michael Tokarev mjt@tls.msk.ru
|
||||||
Nicolas Graner Nicolas.Graner@cri.u-psud.fr
|
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
|
NIIBE Yutaka gniibe@chroot.org
|
||||||
Niklas Hernaeus
|
Niklas Hernaeus
|
||||||
Nimrod Zimerman zimerman@forfree.at
|
Nimrod Zimerman zimerman@forfree.at
|
||||||
N J Doye nic@niss.ac.uk
|
N J Doye nic@niss.ac.uk
|
||||||
Oliver Haakert haakert@hsp.de
|
Oliver Haakert haakert@hsp.de
|
||||||
Oskari Jääskeläinen f33003a@cc.hut.fi
|
Oskari Jääskeläinen f33003a@cc.hut.fi
|
||||||
|
Pascal Scheffers Pascal@scheffers.net
|
||||||
Paul D. Smith psmith@baynetworks.com
|
Paul D. Smith psmith@baynetworks.com
|
||||||
|
Per Cederqvist ceder@lysator.liu.se
|
||||||
|
Phil Blundell pb@debian.org
|
||||||
Philippe Laliberte arsphl@oeil.qc.ca
|
Philippe Laliberte arsphl@oeil.qc.ca
|
||||||
|
Peter Fales psfales@lucent.com
|
||||||
Peter Gutmann pgut001@cs.auckland.ac.nz
|
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
|
QingLong qinglong@bolizm.ihep.su
|
||||||
Ralph Gillen gillen@theochem.uni-duesseldorf.de
|
Ralph Gillen gillen@theochem.uni-duesseldorf.de
|
||||||
Rat ratinox@peorth.gweep.net
|
Rat ratinox@peorth.gweep.net
|
||||||
@ -83,33 +158,69 @@ Reinhard Wobst R.Wobst@ifw-dresden.de
|
|||||||
Rémi Guyomarch rguyom@mail.dotcom.fr
|
Rémi Guyomarch rguyom@mail.dotcom.fr
|
||||||
Reuben Sumner rasumner@wisdom.weizmann.ac.il
|
Reuben Sumner rasumner@wisdom.weizmann.ac.il
|
||||||
Richard Outerbridge outer@interlog.com
|
Richard Outerbridge outer@interlog.com
|
||||||
|
Robert Joop rj@rainbow.in-berlin.de
|
||||||
Roddy Strachan roddy@satlink.com.au
|
Roddy Strachan roddy@satlink.com.au
|
||||||
|
Roger Sondermann r.so@bigfoot.com
|
||||||
Roland Rosenfeld roland@spinnaker.rhein.de
|
Roland Rosenfeld roland@spinnaker.rhein.de
|
||||||
|
Roman Pavlik rp@tns.cz
|
||||||
Ross Golder rossigee@bigfoot.com
|
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
|
Serge Munhoven munhoven@mema.ucl.ac.be
|
||||||
SL Baur steve@xemacs.org
|
SL Baur steve@xemacs.org
|
||||||
|
Stefan Bellon sbellon@sbellon.de
|
||||||
Stefan Karrmann S.Karrmann@gmx.net
|
Stefan Karrmann S.Karrmann@gmx.net
|
||||||
Stefan Keller dres@cs.tu-berlin.de
|
Stefan Keller dres@cs.tu-berlin.de
|
||||||
Steffen Ullrich ccrlphr@xensei.com
|
Steffen Ullrich ccrlphr@xensei.com
|
||||||
Steffen Zahn zahn@berlin.snafu.de
|
Steffen Zahn zahn@berlin.snafu.de
|
||||||
Steven Bakker steven@icoe.att.com
|
Steven Bakker steven@icoe.att.com
|
||||||
|
Steven Murdoch sjmurdoch@bigfoot.com
|
||||||
Susanne Schultz schultz@hsp.de
|
Susanne Schultz schultz@hsp.de
|
||||||
|
Ted Cabeen secabeen@pobox.com
|
||||||
Thiago Jung Bauermann jungmann@cwb.matrix.com.br
|
Thiago Jung Bauermann jungmann@cwb.matrix.com.br
|
||||||
Thomas Roessler roessler@guug.de
|
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 Spindler dogcow@home.merit.edu
|
||||||
Tom Zerucha tzeruch@ceddec.com
|
Tom Zerucha tzeruch@ceddec.com
|
||||||
Tomas Fasth tomas.fasth@twinspot.net
|
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
|
Thomas Mikkelsen tbm@image.dk
|
||||||
Ulf Möller 3umoelle@informatik.uni-hamburg.de
|
Ulf Möller 3umoelle@informatik.uni-hamburg.de
|
||||||
Urko Lusa ulusa@euskalnet.net
|
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
|
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
|
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
|
nbecker@hns.com
|
||||||
|
|
||||||
Thanks to the German Unix User Group for providing FTP space,
|
Thanks to the German Unix User Group for sponsoring this project,
|
||||||
Martin Hamilton for initially hosting the mailing list, HSP for
|
Martin Hamilton for hosting the first mailing list and OpenIT for
|
||||||
hosting gnupg.org and Linux Laptops Ltd. for a nice toy.
|
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
|
Many thanks to my wife Gerlinde for having so much patience with
|
||||||
me while hacking late in the evening.
|
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
|
--> 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
|
* Do we need a configure test for putenv?
|
||||||
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.
|
|
||||||
|
|
||||||
* 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
|
* getkey does not return revoked/expired keys - therefore it is not
|
||||||
use the prefix mpi here?
|
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
|
* Check the changes to the gpg random gatherer on all W32 platforms.
|
||||||
parameters for the keygen menu. Far easier than to do a dialog for
|
|
||||||
each required parameter.
|
* 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
|
* With option -i prompt before adding a key to the keyring and show some
|
||||||
info what we are about to add.
|
info what we are about to add.
|
||||||
|
|
||||||
* Speed up calculation of key validation.
|
|
||||||
|
|
||||||
* --disable-asm should still assemble _udiv_qrnnd when needed
|
* --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.
|
* Use new-format headers for compressed packets.
|
||||||
|
The advantage is that a garbled zip files can be better detected.
|
||||||
* 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 DEL and ^H for erasing the previous character (util/ttyio.c).
|
* use DEL and ^H for erasing the previous character (util/ttyio.c).
|
||||||
or better readline.
|
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.
|
* 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 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
|
* add checking of armor trailers. Try to detect garbled header lines.
|
||||||
really make sense? And while we are at it: implement a secure deletion
|
|
||||||
stuff?
|
|
||||||
* the pubkey encrypt functions should do some sanity checks.
|
* the pubkey encrypt functions should do some sanity checks.
|
||||||
* dynload: implement the hint stuff.
|
|
||||||
* "gpg filename.tar.gz.asc" should work like --verify (-sab).
|
* "gpg filename.tar.gz.asc" should work like --verify (-sab).
|
||||||
|
|
||||||
* for messages created with "-t", it might make sense to append the
|
* 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
|
verification status of the message to the output (i.e. write something to
|
||||||
the --output file and not only to stderr.
|
the --output file and not only to stderr. However the problem is
|
||||||
* configure option where to find zlib
|
that we consider the message transpatrent and don't have any
|
||||||
* Display more validity information about the user IDs at certain places.
|
indication of the used character set. To implement this feature
|
||||||
We need a more general function to extract such kind of info from the
|
we need to make sure that all output is plain 7 bit ascii but
|
||||||
trustdb.
|
given that we need to print a user name, this does not make sense
|
||||||
* Evaluate whether it make sense to replace the namehashs either by
|
at all. The only way this can be implemented is by assuming that
|
||||||
using the user ID directly or by using pointers into the trustdb.
|
the message is encoded in utf8 and hope tht everyone starts to use
|
||||||
* --gen-prime may trigger a log_bug; should be a log_fatal.
|
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 GNUPG_MSG_PRINT(STRING)
|
||||||
dnl print a message
|
dnl print a message
|
||||||
@ -15,37 +31,15 @@ dnl
|
|||||||
AC_DEFUN(GNUPG_CHECK_TYPEDEF,
|
AC_DEFUN(GNUPG_CHECK_TYPEDEF,
|
||||||
[ AC_MSG_CHECKING(for $1 typedef)
|
[ AC_MSG_CHECKING(for $1 typedef)
|
||||||
AC_CACHE_VAL(gnupg_cv_typedef_$1,
|
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>], [
|
#include <sys/types.h>], [
|
||||||
#undef $1
|
#undef $1
|
||||||
int a = sizeof($1);
|
int a = sizeof($1);
|
||||||
], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
|
], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
|
||||||
AC_MSG_RESULT($gnupg_cv_typedef_$1)
|
AC_MSG_RESULT($gnupg_cv_typedef_$1)
|
||||||
if test "$gnupg_cv_typedef_$1" = yes; then
|
if test "$gnupg_cv_typedef_$1" = yes; then
|
||||||
AC_DEFINE($2)
|
AC_DEFINE($2,1,[Defined if a `]$1[' is typedef'd])
|
||||||
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])
|
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -53,7 +47,7 @@ AC_DEFUN(GNUPG_FIX_HDR_VERSION,
|
|||||||
dnl GNUPG_CHECK_GNUMAKE
|
dnl GNUPG_CHECK_GNUMAKE
|
||||||
dnl
|
dnl
|
||||||
AC_DEFUN(GNUPG_CHECK_GNUMAKE,
|
AC_DEFUN(GNUPG_CHECK_GNUMAKE,
|
||||||
[
|
[
|
||||||
if ${MAKE-make} --version 2>/dev/null | grep '^GNU ' >/dev/null 2>&1; then
|
if ${MAKE-make} --version 2>/dev/null | grep '^GNU ' >/dev/null 2>&1; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
@ -67,6 +61,7 @@ AC_DEFUN(GNUPG_CHECK_GNUMAKE,
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl GNUPG_CHECK_FAQPROG
|
dnl GNUPG_CHECK_FAQPROG
|
||||||
dnl
|
dnl
|
||||||
AC_DEFUN(GNUPG_CHECK_FAQPROG,
|
AC_DEFUN(GNUPG_CHECK_FAQPROG,
|
||||||
@ -82,39 +77,33 @@ AC_DEFUN(GNUPG_CHECK_FAQPROG,
|
|||||||
AC_SUBST(FAQPROG)
|
AC_SUBST(FAQPROG)
|
||||||
AM_CONDITIONAL(WORKING_FAQPROG, test "$working_faqprog" = "yes" )
|
AM_CONDITIONAL(WORKING_FAQPROG, test "$working_faqprog" = "yes" )
|
||||||
|
|
||||||
if test $working_faqprog = no; then
|
dnl if test $working_faqprog = no; then
|
||||||
AC_MSG_WARN([[
|
dnl AC_MSG_WARN([[
|
||||||
***
|
dnl ***
|
||||||
*** It seems that the faqprog.pl program is not installed.
|
dnl *** It seems that the faqprog.pl program is not installed;
|
||||||
*** Unless you do not change the source of the FAQs it is not required.
|
dnl *** however it is only needed if you want to change the FAQ.
|
||||||
*** The working version of this utility should be available at:
|
dnl *** (faqprog.pl should be available at:
|
||||||
*** ftp://ftp.gnupg.org/pub/gcrypt/contrib/faqprog.pl
|
dnl *** ftp://ftp.gnupg.org/pub/gcrypt/contrib/faqprog.pl )
|
||||||
***]])
|
dnl *** No need to worry about this warning.
|
||||||
fi
|
dnl ***]])
|
||||||
])
|
dnl fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl GNUPG_CHECK_DOCBOOK_TO_TEXI
|
||||||
|
|
||||||
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
|
dnl
|
||||||
define(GNUPG_LINK_FILES,
|
AC_DEFUN(GNUPG_CHECK_DOCBOOK_TO_TEXI,
|
||||||
[ if test "x$wk_link_files_src" = "x"; then
|
[
|
||||||
wk_link_files_src="$1"
|
AC_CHECK_PROG(DOCBOOK_TO_TEXI, docbook2texi, yes, no)
|
||||||
wk_link_files_dst="$2"
|
AC_MSG_CHECKING(for sgml to texi tools)
|
||||||
else
|
working_sgmltotexi=no
|
||||||
wk_link_files_src="$wk_link_files_src $1"
|
if test "$ac_cv_prog_DOCBOOK_TO_TEXI" = yes; then
|
||||||
wk_link_files_dst="$wk_link_files_dst $2"
|
if sgml2xml -v /dev/null 2>&1 | grep 'SP version' >/dev/null 2>&1 ; then
|
||||||
|
working_sgmltotexi=yes
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
])
|
AC_MSG_RESULT($working_sgmltotexi)
|
||||||
define(GNUPG_DO_LINK_FILES,
|
AM_CONDITIONAL(HAVE_DOCBOOK_TO_TEXI, test "$working_sgmltotexi" = "yes" )
|
||||||
[ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst )
|
])
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -158,9 +147,11 @@ define(GNUPG_CHECK_ENDIAN,
|
|||||||
])
|
])
|
||||||
AC_MSG_RESULT([$gnupg_cv_c_endian])
|
AC_MSG_RESULT([$gnupg_cv_c_endian])
|
||||||
if test "$gnupg_cv_c_endian" = little; then
|
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
|
else
|
||||||
AC_DEFINE(BIG_ENDIAN_HOST)
|
AC_DEFINE(BIG_ENDIAN_HOST,1,
|
||||||
|
[Defined if the host has big endian byte ordering])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -328,7 +319,8 @@ define(GNUPG_CHECK_IPC,
|
|||||||
gnupg_cv_ipc_rmid_deferred_release="assume-no")
|
gnupg_cv_ipc_rmid_deferred_release="assume-no")
|
||||||
)
|
)
|
||||||
if test "$gnupg_cv_ipc_rmid_deferred_release" = "yes"; then
|
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)
|
AC_MSG_RESULT(yes)
|
||||||
else
|
else
|
||||||
if test "$gnupg_cv_ipc_rmid_deferred_release" = "no"; then
|
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
|
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)
|
AC_MSG_RESULT(yes)
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@ -384,7 +377,7 @@ define(GNUPG_CHECK_MLOCK,
|
|||||||
#endif
|
#endif
|
||||||
], [
|
], [
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* glibc defines this for functions which it implements
|
/* glibc defines this for functions which it implements
|
||||||
* to always fail with ENOSYS. Some functions are actually
|
* to always fail with ENOSYS. Some functions are actually
|
||||||
* named something starting with __ and the normal name
|
* 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=yes,
|
||||||
gnupg_cv_mlock_is_in_sys_mman=no)])
|
gnupg_cv_mlock_is_in_sys_mman=no)])
|
||||||
if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then
|
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
|
fi
|
||||||
fi
|
fi
|
||||||
@ -439,8 +433,10 @@ define(GNUPG_CHECK_MLOCK,
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
if test "$gnupg_cv_have_broken_mlock" = "yes"; then
|
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_MSG_RESULT(yes)
|
||||||
|
AC_CHECK_FUNCS(plock)
|
||||||
else
|
else
|
||||||
if test "$gnupg_cv_have_broken_mlock" = "no"; then
|
if test "$gnupg_cv_have_broken_mlock" = "no"; then
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@ -452,10 +448,8 @@ define(GNUPG_CHECK_MLOCK,
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# GNUPG_PROG_NM - find the path to a BSD-compatible name lister
|
# GNUPG_PROG_NM - find the path to a BSD-compatible name lister
|
||||||
################################################################
|
|
||||||
AC_DEFUN(GNUPG_PROG_NM,
|
AC_DEFUN(GNUPG_PROG_NM,
|
||||||
[AC_MSG_CHECKING([for BSD-compatible nm])
|
[AC_MSG_CHECKING([for BSD-compatible nm])
|
||||||
AC_CACHE_VAL(ac_cv_path_NM,
|
AC_CACHE_VAL(ac_cv_path_NM,
|
||||||
@ -667,7 +661,7 @@ AC_CHECK_TOOL(AS, as, false)
|
|||||||
AC_DEFUN(GNUPG_SYS_SYMBOL_UNDERSCORE,
|
AC_DEFUN(GNUPG_SYS_SYMBOL_UNDERSCORE,
|
||||||
[tmp_do_check="no"
|
[tmp_do_check="no"
|
||||||
case "${target}" in
|
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
|
ac_cv_sys_symbol_underscore=yes
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@ -718,7 +712,7 @@ fi
|
|||||||
AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
|
AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
|
||||||
if test x$ac_cv_sys_symbol_underscore = xyes; then
|
if test x$ac_cv_sys_symbol_underscore = xyes; then
|
||||||
AC_DEFINE(WITH_SYMBOL_UNDERSCORE,1,
|
AC_DEFINE(WITH_SYMBOL_UNDERSCORE,1,
|
||||||
[define if compiled symbols have a leading underscore])
|
[Defined if compiled symbols have a leading underscore])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -741,119 +735,8 @@ AC_CACHE_CHECK([if mkdir takes one argument], gnupg_cv_mkdir_takes_one_arg,
|
|||||||
#endif], [mkdir ("foo", 0);],
|
#endif], [mkdir ("foo", 0);],
|
||||||
gnupg_cv_mkdir_takes_one_arg=no, gnupg_cv_mkdir_takes_one_arg=yes)])
|
gnupg_cv_mkdir_takes_one_arg=no, gnupg_cv_mkdir_takes_one_arg=yes)])
|
||||||
if test $gnupg_cv_mkdir_takes_one_arg = yes ; then
|
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
|
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