summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRepo Admin <nobody@gnupg.org>1999-02-20 20:45:42 +0000
committerRepo Admin <nobody@gnupg.org>1999-02-20 20:45:42 +0000
commitd099631f43ba9a2df011907f88289b3e72da52f4 (patch)
tree19916a9fc40a4f360868a8327bbdf53b705b02e6
parent1a43c29a5606bb4d3d24ced7314104d92adcd771 (diff)
downloadlibgcrypt-ePit-1-0.tar.gz
This commit was manufactured by cvs2svn to create branch 'ePit-1-0'.ePit-1-0
-rw-r--r--AUTHORS88
-rw-r--r--COPYING340
-rw-r--r--ChangeLog205
-rw-r--r--INSTALL297
-rw-r--r--Makefile.am62
-rw-r--r--README447
-rw-r--r--THANKS96
-rw-r--r--acconfig.h98
-rw-r--r--acinclude.m4346
-rw-r--r--cipher/ChangeLog364
-rw-r--r--cipher/Makefile.am103
-rw-r--r--cipher/blowfish.c598
-rw-r--r--cipher/blowfish.h34
-rw-r--r--cipher/cast5.c621
-rw-r--r--cipher/cast5.h33
-rw-r--r--cipher/cipher.c573
-rw-r--r--cipher/des.c915
-rw-r--r--cipher/des.h34
-rw-r--r--cipher/dsa.c428
-rw-r--r--cipher/dsa.h32
-rw-r--r--cipher/dynload.c559
-rw-r--r--cipher/dynload.h68
-rw-r--r--cipher/elgamal.c551
-rw-r--r--cipher/elgamal.h35
-rw-r--r--cipher/gost.c76
-rw-r--r--cipher/gost.h46
-rw-r--r--cipher/md.c514
-rw-r--r--cipher/md5.c424
-rw-r--r--cipher/primegen.c557
-rw-r--r--cipher/pubkey.c548
-rw-r--r--cipher/rand-internal.h30
-rw-r--r--cipher/random.c428
-rw-r--r--cipher/random.h33
-rw-r--r--cipher/rmd.h35
-rw-r--r--cipher/rmd160.c645
-rw-r--r--cipher/rmd160test.c63
-rw-r--r--cipher/rndlinux.c213
-rw-r--r--cipher/rndunix.c820
-rw-r--r--cipher/sha1.c421
-rw-r--r--cipher/smallprime.c114
-rw-r--r--cipher/tiger.c991
-rw-r--r--cipher/twofish.c918
-rw-r--r--configure.in460
-rw-r--r--doc/Makefile.am42
-rw-r--r--mpi/ChangeLog121
-rw-r--r--mpi/Makefile.am53
-rw-r--r--mpi/alpha/README53
-rw-r--r--mpi/alpha/distfiles11
-rw-r--r--mpi/alpha/mpih-add1.S126
-rw-r--r--mpi/alpha/mpih-lshift.S122
-rw-r--r--mpi/alpha/mpih-mul1.S89
-rw-r--r--mpi/alpha/mpih-mul2.S96
-rw-r--r--mpi/alpha/mpih-mul3.S94
-rw-r--r--mpi/alpha/mpih-rshift.S120
-rw-r--r--mpi/alpha/mpih-sub1.S123
-rw-r--r--mpi/alpha/udiv-qrnnd.S161
-rw-r--r--mpi/config.links227
-rw-r--r--mpi/generic/distfiles9
-rw-r--r--mpi/generic/mpih-add1.c65
-rw-r--r--mpi/generic/mpih-lshift.c69
-rw-r--r--mpi/generic/mpih-mul1.c62
-rw-r--r--mpi/generic/mpih-mul2.c67
-rw-r--r--mpi/generic/mpih-mul3.c68
-rw-r--r--mpi/generic/mpih-rshift.c67
-rw-r--r--mpi/generic/mpih-sub1.c66
-rw-r--r--mpi/generic/udiv-w-sdiv.c135
-rw-r--r--mpi/hppa/README84
-rw-r--r--mpi/hppa/distfiles7
-rw-r--r--mpi/hppa/mpih-add1.S70
-rw-r--r--mpi/hppa/mpih-lshift.S72
-rw-r--r--mpi/hppa/mpih-rshift.S68
-rw-r--r--mpi/hppa/mpih-sub1.S77
-rw-r--r--mpi/hppa/udiv-qrnnd.S297
-rw-r--r--mpi/hppa1.1/distfiles5
-rw-r--r--mpi/hppa1.1/mpih-mul1.S112
-rw-r--r--mpi/hppa1.1/mpih-mul2.S114
-rw-r--r--mpi/hppa1.1/mpih-mul3.S124
-rw-r--r--mpi/hppa1.1/udiv-qrnnd.S88
-rw-r--r--mpi/i386/distfiles9
-rw-r--r--mpi/i386/mpih-add1.S118
-rw-r--r--mpi/i386/mpih-lshift.S96
-rw-r--r--mpi/i386/mpih-mul1.S86
-rw-r--r--mpi/i386/mpih-mul2.S87
-rw-r--r--mpi/i386/mpih-mul3.S87
-rw-r--r--mpi/i386/mpih-rshift.S98
-rw-r--r--mpi/i386/mpih-sub1.S118
-rw-r--r--mpi/i386/syntax.h62
-rw-r--r--mpi/i586/README26
-rw-r--r--mpi/i586/distfiles9
-rw-r--r--mpi/i586/mpih-add1.S134
-rw-r--r--mpi/i586/mpih-lshift.S230
-rw-r--r--mpi/i586/mpih-mul1.S89
-rw-r--r--mpi/i586/mpih-mul2.S94
-rw-r--r--mpi/i586/mpih-mul3.S94
-rw-r--r--mpi/i586/mpih-rshift.S229
-rw-r--r--mpi/i586/mpih-sub1.S143
-rw-r--r--mpi/longlong.h1483
-rw-r--r--mpi/m68k/distfiles8
-rw-r--r--mpi/m68k/mc68020/distfiles3
-rw-r--r--mpi/m68k/mc68020/mpih-mul1.S97
-rw-r--r--mpi/m68k/mc68020/mpih-mul2.S87
-rw-r--r--mpi/m68k/mc68020/mpih-mul3.S89
-rw-r--r--mpi/m68k/mpih-add1.S85
-rw-r--r--mpi/m68k/mpih-lshift.S158
-rw-r--r--mpi/m68k/mpih-rshift.S156
-rw-r--r--mpi/m68k/mpih-sub1.S85
-rw-r--r--mpi/m68k/syntax.h177
-rw-r--r--mpi/mips3/README23
-rw-r--r--mpi/mips3/distfiles9
-rw-r--r--mpi/mips3/mpih-add1.S122
-rw-r--r--mpi/mips3/mpih-lshift.S95
-rw-r--r--mpi/mips3/mpih-mul1.S87
-rw-r--r--mpi/mips3/mpih-mul2.S99
-rw-r--r--mpi/mips3/mpih-mul3.S99
-rw-r--r--mpi/mips3/mpih-rshift.S93
-rw-r--r--mpi/mips3/mpih-sub1.S123
-rw-r--r--mpi/mpi-add.c247
-rw-r--r--mpi/mpi-bit.c214
-rw-r--r--mpi/mpi-cmp.c74
-rw-r--r--mpi/mpi-div.c322
-rw-r--r--mpi/mpi-gcd.c54
-rw-r--r--mpi/mpi-inline.h126
-rw-r--r--mpi/mpi-internal.h237
-rw-r--r--mpi/mpi-inv.c270
-rw-r--r--mpi/mpi-mpow.c119
-rw-r--r--mpi/mpi-mul.c198
-rw-r--r--mpi/mpi-pow.c281
-rw-r--r--mpi/mpi-scan.c132
-rw-r--r--mpi/mpicoder.c436
-rw-r--r--mpi/mpih-add.c88
-rw-r--r--mpi/mpih-cmp.c62
-rw-r--r--mpi/mpih-div.c537
-rw-r--r--mpi/mpih-mul.c470
-rw-r--r--mpi/mpih-sub.c81
-rw-r--r--mpi/mpiutil.c374
-rw-r--r--mpi/pa7100/distfiles3
-rw-r--r--mpi/pa7100/mpih-lshift.S89
-rw-r--r--mpi/pa7100/mpih-rshift.S85
-rw-r--r--mpi/power/distfiles0
-rw-r--r--mpi/powerpc32/distfiles9
-rw-r--r--mpi/powerpc32/mpih-add1.S136
-rw-r--r--mpi/powerpc32/mpih-lshift.S198
-rw-r--r--mpi/powerpc32/mpih-mul1.S119
-rw-r--r--mpi/powerpc32/mpih-mul2.S127
-rw-r--r--mpi/powerpc32/mpih-mul3.S130
-rw-r--r--mpi/powerpc32/mpih-rshift.S131
-rw-r--r--mpi/powerpc32/mpih-sub1.S132
-rw-r--r--mpi/powerpc32/syntax.h75
-rw-r--r--mpi/powerpc64/distfiles0
-rw-r--r--mpi/sparc32/distfiles6
-rw-r--r--mpi/sparc32/mpih-add1.S238
-rw-r--r--mpi/sparc32/mpih-lshift.S96
-rw-r--r--mpi/sparc32/mpih-rshift.S92
-rw-r--r--mpi/sparc32/udiv.S188
-rw-r--r--mpi/sparc32v8/distfiles5
-rw-r--r--mpi/sparc32v8/mpih-mul1.S101
-rw-r--r--mpi/sparc32v8/mpih-mul2.S124
-rw-r--r--mpi/sparc32v8/mpih-mul3.S60
-rw-r--r--mpi/supersparc/distfiles3
-rw-r--r--mpi/supersparc/udiv.S110
-rw-r--r--scripts/ChangeLog50
-rwxr-xr-xscripts/autogen.sh67
-rwxr-xr-xscripts/config.guess754
-rwxr-xr-xscripts/config.sub1194
-rw-r--r--scripts/distfiles9
-rwxr-xr-xscripts/install-sh250
-rwxr-xr-xscripts/missing134
-rwxr-xr-xscripts/mkinstalldirs40
-rw-r--r--src/ChangeLog5
-rw-r--r--src/Makefile.am19
-rw-r--r--src/g10lib.h208
-rw-r--r--src/gcrypt.h295
-rw-r--r--src/global.c78
-rw-r--r--src/mdapi.c31
-rw-r--r--src/misc.c50
-rw-r--r--src/mpiapi.c65
-rw-r--r--src/pkapi.c31
-rw-r--r--src/symapi.c144
-rw-r--r--stamp-h.in1
179 files changed, 0 insertions, 32418 deletions
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644
index d69b1757..00000000
--- a/AUTHORS
+++ /dev/null
@@ -1,88 +0,0 @@
-Authors of GNU Privacy Guard (GnuPG)
-====================================
-
-GNUPG Werner Koch 1998-02-23
-Assigns GNU Privacy Guard and future changes.
-werner.koch@guug.de
-Designed and implemented GnuPG.
-
-
-GNUPG Matthew Skala 1998-08-10
-Disclaims changes.
-mskala@ansuz.sooke.bc.ca
-Wrote cipher/twofish.c.
-
-GNUPG Natural Resources Canada 1998-08-11
-Disclaims changes by Matthew Skala.
-
-
-GNUPG Michael Roth Germany 1998-09-17
-Assigns changes.
-mroth@nessie.de
-Wrote cipher/des.c.
-Changes and bug fixes all over the place.
-
-
-GNUPG Niklas Hernaeus 1998-09-18
-Disclaims changes.
-nh@df.lth.se
-Weak key patches.
-
-
-TRANSLATIONS Marco d'Itri 1997-02-22
-Disclaimer. [it]
-md@linux.it
-
-
-TRANSLATIONS Gael Queri 1998-09-08
-Disclaimer. [fr]
-gqueri@mail.dotcom.fr
-Fixed a lot of typos.
-
-
-TRANSLATIONS Walter Koch 1998-09-08
-Disclaimer. [de]
-walterk@dip.de
-
-
-TRANSLATIONS Gregory Steuck 1998-10-20
-Disclaimer. [ru?]
-steuck@iname.com
-
-
-TRANSLATIONS Urko Lusa ??????????
-es_ES.po
-
-
-TRANSLATIONS Thiago Jung Bauermann ????????????????
-pt_BR.po
-
-
-TRANSLATIONS Janusz A. Urbanowicz ???????????
-pl.po
-
-
-
-Other notes:
-============
-This program uses the zlib compression library written by
-Jean-loup Gailly and Mark Adler.
-
-Most of the stuff in mpi has been taken from the GMP library by
-Torbjorn Granlund <tege@noisy.tmg.se>.
-
-The keybox implementation is based on GDBM 1.7.3 by Philip A. Nelson.
-
-The file cipher/rndunix.c is based on Peter Gutmann's rndunix.c from
-cryptlib. - He promised to add the GPL as an alternative license to
-this and some other files. We don't have a disclaimer yet, but due
-to the fact that this is only needed for non-free systems we can
-easily remove this from the distribution and put it as an extra module
-on the FTP server.
-
-The files in debian/ are by James Troup who is the Debian maintainer
-for GnuPG.
-
-The RPM specs file scripts/gnupg.spec has been contributed by
-several people.
-
diff --git a/COPYING b/COPYING
deleted file mode 100644
index 2b7b643f..00000000
--- a/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- 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
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index ea1ea448..00000000
--- a/ChangeLog
+++ /dev/null
@@ -1,205 +0,0 @@
-Fri Feb 19 18:01:54 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * VERSION: Released 0.9.3
-
-Fri Feb 19 15:49:15 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * acinclude.m4: Removed gettext macros.
-
-Tue Feb 16 14:10:02 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * configure.in (socket): Check for -lsocket and -lnsl.
- (osf4): Disable all warnings for DEC's cc.
- (-Wall): Add more warning options for gcc
-
-Sat Feb 13 12:04:43 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * configure.in: Changed detection of compiler flags.
- * intl/ : Removed directory
-
-Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Fix for freebsd 2.2
-
- * configure.in: a lot of changes to allow selection of modules.
- Add support for OS/2.
-
- * acinclude.m4: add some more caching
-
- * README: Spelling and grammar corrections (John A. Martin)
- * INSTALL: Ditto.
-
-Wed Jan 20 21:40:21 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * configure.in: --enable-m-guard is now default
-
-Wed Jan 13 12:49:36 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * INSTALL: Applied new information how to build rpms by Fabio Coatti
- * Makefile.in (gnupg.spec): Changed the names.
-
-Tue Jan 12 11:17:18 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.links (m68k-atari-mint): New
-
-Tue Jan 12 09:17:19 CET 1999 Gaël Quéri <gqueri@mail.dotcom.fr>
-
- * all: Fixed typos all over the place
-
-Sat Jan 9 16:02:23 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * configure.in: Add a way to statically link rndunix
-
-Sun Jan 3 15:28:44 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): New.
- * configure.in (DYNLOAD_CFLAGS): Use result from CHECK_RDYNAMIC
-
-Wed Dec 23 13:18:14 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * README: Replaced the command overview with a short intro.
-
-Sat Dec 12 18:40:32 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * configure.in: Add check for dlopen in libc (Greg Troxel)
- and a new define
- * acconfig.h (DLSYM_NEEDS_UNDERSCORE): New.
-
-Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * acinclude.m (GNUPG_CHECK_PIC): New
- * configure.in, acinclude.m4: Renamed all WK_ to GNUPG_
-
-Tue Dec 8 15:09:29 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * VERSION: Set to 0.4.5
-
-Wed Nov 25 12:38:29 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (USE_RNDLINUX): New.
-
-Fri Nov 20 19:34:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * VERSION: Released 0.4.4
-
- * configure.in (try_asm_modules): For option --disable-asm
-
-Tue Nov 10 19:32:40 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (MPI_SFLAGS): New.
-
-Tue Nov 10 13:44:53 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * ABOUT-NLS: New
- * configure.in (AC_REVISION): New.
-
-Sun Nov 8 18:20:35 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * VERSION: Set to 0.4.3
-
-Sun Oct 25 19:49:37 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am (g10defs.h): New macro GNUPG_DATADIR.
-
-Wed Oct 21 17:24:24 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in: Removed gettext kludge
- * acinclude.m4: Add patched AM_WITH_NKS macro
-
-Tue Oct 20 19:03:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in: Kludge to make AM_GNU_GETTEXT work,
- changed some macors to more modern versions. Also
- changeg the all makefiles to remove duplicate ../intl.
- * acinclude.m4: Removed the gettext stuff, as this
- already comes with automake now.
-
-Wed Oct 14 12:11:34 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (NAME_OF_DEV_RANDOM): New.
- (DYNLINK_MOD_CFLAGS): New.
-
-Thu Oct 8 10:55:15 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am (g10defs.h): creates include file
- * acconfig.h: now includes g10defs.h
- * configure.in: Removed G10_LOCALEDIR and GNUPG_LIB
-
-Thu Sep 17 18:49:40 1998 Werner Koch (wk@(none))
-
- * Makefile.am (dist-hook): Now creates RPM file.
- * scripts/gnupg.spec: New template file for RPMs
-
-Thu Jul 30 19:17:07 1998 Werner Koch (wk@(none))
-
- * acinclude.h (WK_CHECK_IPC): New
- * configure.in : Add checks for SysV IPC
-
-Thu Jun 25 11:18:49 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (--disable-dynload): New.
-
-Wed Jun 10 07:48:59 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * configure.in (GNUPG_LIBDIR): New.
-
-Mon May 25 19:10:59 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-unix.c (fast_random_poll): fixed syntax bug.
-
-Mon May 11 10:21:31 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (PRINTABLE_OS_NAME): Linux is now GNU/Linux
-
-Tue Apr 14 19:08:05 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * [all files]: Applied Matthew Skala's typo and grammar fixes.
-
-Wed Mar 4 10:32:40 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (getrusage,gettimeofday): New tests.
-
-Fri Feb 27 13:14:17 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (--disable-m-guard): New.
-
-Thu Feb 26 17:09:27 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in, acinclude.m4, intl/, po/: New macros taken
- from GNOME, switched to automake 1.2f
-
-Thu Feb 26 09:05:46 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (doc/Makefile): New
-
-Thu Feb 26 07:40:47 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in: Changed gettext stuff
-
-Wed Feb 25 11:44:10 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * checks/*test : restructured the directory.
-
-Tue Feb 24 15:59:12 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in: Changed the name of the package to GNUPG and
- chnaged several other names too.
-
-Wed Feb 18 17:36:45 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am (checks): New.
-
-Sat Feb 14 15:37:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (mpi_config_done): Removed asm links caching.
-
-Sat Feb 14 14:02:20 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in (PRINTABLE_OS_NAME): New.
- * acconfig.h: Likewise.
-
-Fri Feb 13 19:43:41 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * configure.in : Fixed zlib stuff
- * Makefile.am: Likewise
-
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index c6bd647c..00000000
--- a/INSTALL
+++ /dev/null
@@ -1,297 +0,0 @@
-
-Please read the Basic Installation section somewhere below.
-
-Configure options for GNUPG
-===========================
-
---with-included-zlib Forces usage of the local zlib sources. Default is
- to use the (shared) library of the system.
-
---with-included-gettext Forces usage of the local gettext sources instead of
- the one provided by your system.
-
---disable-nls Disable NLS support (See ABOUT-NLS)
-
---enable-m-debug Compile with the integrated malloc debugging stuff.
- This makes the program slower but it checks every
- free operation and can be used to create statistics
- of memory usage. If this option is used the program
- option "--debug 32" displays every call to a malloc
- function (this makes the program *really* slow), the
- option "--debug 128" displays a memory statistic after
- the program run.
-
---enable-m-guard Enable the integrated malloc checking code.
-
---disable-dynload If you have problems with dynamic loading, this option
- disables all dynamic loading stuff.
-
---disable-asm Do not use assembler modules.
-
-
-
-Problems
-========
-
-If you get unresolved externals "gettext" you should run configure again
-with the option "--with-included-gettext"; this is version 0.10.35 which
-is available at alpha.gnu.org.
-
-If you have other compile problems, try the configure options
-"--with-included-zlib" or "--disable-nls" (See ABOUT-NLS)
-or --disable-dynload.
-
-I can't check all assembler files, so if you have problems assembling them
-(or the program crashes) use --disable-asm with ./configure.
-The configure scripts may consider several subdirectories to get all
-available assembler files; be sure to delete the correct ones. The
-assembler replacements are in C and in mpi/generic; never delete udiv-qrnnd.S
-in any CPU directory, because there may be no C substitute.
-Don't forget to delete "config.cache" and run "./config.status --recheck".
-
-
-The Random Device
-=================
-Random devices are available in Linux, FreeBSD and OpenBSD.
-The random device files may not exist on your system, please check whether
-they do and create them if needed.
-
-The Linux files should look like this:
- cr--r--r-- 1 root sys 1, 8 May 28 1997 /dev/random
- cr--r--r-- 1 root sys 1, 9 Feb 16 08:23 /dev/urandom
-You can create them with:
- mknod /dev/random c 1 8
- mknod /dev/urandom c 1 9
-
-The FreeBSD files [from the 970202 snapshot]:
- crw-r--r-- 1 root wheel 2, 3 Feb 25 16:54 /dev/random
- crw-r--r-- 1 root wheel 2, 4 Feb 25 16:54 /dev/urandom
-You can create them with:
- mknod /dev/random c 2 3
- mknod /dev/urandom c 2 4
-
-Unices without a random devices must use another entropy collector. One
-entropy collector called rndunix and available as an extension module. You
-should put this in your ~/.gnupg/options file:
-===8<====================
-load-extension rndunix
-===>8====================
-This collector works by running a lot of commands that yield more or
-less unpredictable output and feds this as entropy into the random
-generator - It should work reliably but you should check whether
-it produces good output for your version of Unix. There are some debug
-options to help you (see cipher/rndunix.c).
-
-
-
-Installation
-============
-gpg is not installed as suid:root; if you want to do that, do it manually.
-We will use capabilities in the future.
-
-The ~/.gnupg directory will be created if it does not exist. Your first
-action should be to create a key pair: "gpg --gen-key".
-
-
-
-Creating a RPM package
-======================
-The file scripts/gnupg.spec is used to build a RPM package (both
-binary and src):
- 1. copy the spec file into /usr/src/redhat/SPECS
- 2. copy the tar file into /usr/src/redhat/SOURCES
- 3. type: rpm -ba SPECS/gnupg.spec
-
-Or use the -t (--tarbuild) option of rpm:
- 1. rpm -ta gnupg-x.x.x.tar.gz
-
-The binary rpm file can now be found in /usr/src/redhat/RPMS, source
-rpm in /usr/src/redhat/SRPMS
-
-Please note that to install gnupg binary rpm you must be root, as
-gnupg needs to be suid root, at least on Linux machines
-
-
-Basic Installation
-==================
-
- These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
- The file `configure.in' is used by the program `autoconf' to create
-`configure'. You only need `configure.in' if you want to change it or
-regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes a while. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
- Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. You can give `configure'
-initial values for variables by setting them in the environment. Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
- CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or, on systems that have the `env' program, you can do it like this:
- env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
- You can compile the package for more than one kind of computer at the same
-time by placing the object files for each architecture in their own
-directory. To do this, you must use a version of `make', such as GNU `make',
-that supports the `VPATH' variable. `cd' to the directory where you want the
-object files and executables to go and run the `configure' script.
-`configure' automatically checks for the source code in the directory that
-`configure' is in and in `..'.
-
- 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
-in the source code directory. After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
- There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on. Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
- CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
- If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
- `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
- Use and save the results of the tests in FILE instead of
- `./config.cache'. Set FILE to `/dev/null' to disable caching, for
- debugging `configure'.
-
-`--help'
- Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`--version'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
-
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644
index d5bbd0a6..00000000
--- a/Makefile.am
+++ /dev/null
@@ -1,62 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = intl zlib util mpi cipher tools g10 po doc checks
-EXTRA_DIST = VERSION PROJECTS
-
-all-am: g10defs.h
-all-recursive-am: g10defs.h
-
-
-g10defs.h : config.h
- @( set -e; \
- echo "/* Generated automatically by Makefile */" ; \
- echo "#ifdef HAVE_DRIVE_LETTERS"; \
- echo "#define G10_LOCALEDIR \"c:/lib/gnupg/locale\""; \
- echo "#define GNUPG_LIBDIR \"c:/lib/gnupg\""; \
- echo "#define GNUPG_DATADIR \"c:/lib/gnupg\""; \
- echo "#else";\
- echo "#define G10_LOCALEDIR \"$(prefix)/$(DATADIRNAME)/locale\""; \
- echo "#define GNUPG_LIBDIR \"$(libdir)/gnupg\""; \
- echo "#define GNUPG_DATADIR \"$(datadir)/gnupg\""; \
- echo "#endif";\
- ) >g10defs.h
-
-
-dist-hook:
- @set -e; \
- for file in `cd $(top_srcdir); find . -type f -name distfiles`; do \
- dir=`dirname $$file` ; $(mkinstalldirs) $(distdir)/$$dir ; \
- for i in distfiles `cat $(top_srcdir)/$$file` ; do \
- ln $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i 2> /dev/null \
- || cp -p $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i; \
- done ; \
- done
- @set -e; \
- sed -e 's/@pkg_version@/$(VERSION)/g' \
- $(top_srcdir)/scripts/gnupg.spec.in \
- > $(distdir)/scripts/gnupg.spec
-
-
-# maintainer only
-cvs-get:
- rsync -Cavuzb --exclude scratch --exclude .deps \
- koch@ftp.guug.de:work/gnupg .
-
-cvs-put:
- rsync -Cavuzb --exclude .deps --exclude scratch \
- . koch@ftp.guug.de:work/gnupg
-
-cvs-sync: cvs-get cvs-put
-
-
-tobold-get:
- rsync -Cavuzb --exclude scratch --exclude .deps \
- tobold:gnupg/ .
-
-tobold-put:
- rsync -Cavuzb --exclude scratch --exclude .deps \
- . tobold:gnupg/
-
-
-.PHONY: cvs-get cvs-put cvs-sync
-
diff --git a/README b/README
deleted file mode 100644
index 845c15be..00000000
--- a/README
+++ /dev/null
@@ -1,447 +0,0 @@
------BEGIN PGP SIGNED MESSAGE-----
-
- GnuPG - The GNU Privacy Guard
- -------------------------------
- Version 0.9
-
- GnuPG is now in Beta test and you should report all bugs to the
- mailing list (see below). The 0.9.x versions are released mainly
- to fix all remaining serious bugs. As soon as version 1.0 is out,
- development will continue with a 1.1 series and bug fixes for the
- 1.0 version as needed.
-
- GnuPG works best on GNU/Linux or *BSD. Other Unices are
- also supported but are not as well tested as the Free Unices.
- Please verify the tar file with the PGP2 or GnuPG/PGP5
- signatures provided. My PGP2 key is well known and published in
- the "Global Trust Register for 1998", ISBN 0-9532397-0-5.
-
- I have included my pubring as "g10/pubring.asc", which contains
- the key used to make GnuPG signatures:
- "pub 1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig) <dd9jn@gnu.org>"
- "Key fingerprint = 6BD9 050F D8FC 941B 4341 2DCC 68B7 AB89 5754 8DCD"
-
- My new DSA key is:
- "pub 1024D/621CC013 1998-07-07 Werner Koch <werner.koch@guug.de>"
- "Key fingerprint = ECAF 7590 EB34 43B5 C7CF 3ACB 6C7E E1B8 621C C013"
-
- You may want add my new DSA key to your GnuPG pubring and use it in
- the future to verify new releases. Because you verified this README
- file and _checked_that_it_is_really_my PGP2 key 0C9857A5, you can be
- sure that the above fingerprints are correct.
-
- Please subscribe to g10@net.lut.ac.uk by sending a mail with
- the word "subscribe" in the body to "g10-request@net.lut.ac.uk".
- This mailing list is closed (only subscribers are allowed to post)
- to avoid misuse by folks who don't know the Netiquette and trash
- your mailspool with commercial junk.
-
- See the file COPYING for copyright and warranty information.
-
- GnuPG is in compliance with RFC2440 (OpenPGP), see doc/OpenPGP for
- details.
-
- Because GnuPG does not use use any patented algorithm it cannot be
- compatible with PGP2 versions. PGP 2.x uses only IDEA (which is
- patented worldwide) and RSA (which is patented in the United States
- until Sep 20, 2000).
-
- The default algorithms are now 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: 3DES, Blowfish, and CAST5 (Twofish will come soon).
- Digest algorithms available are MD5, RIPEMD160, SHA1, and TIGER/192.
-
-
- Installation
- ------------
-
- Please read the file INSTALL!
-
- Here is a quick summary:
-
- 1) "./configure"
-
- 2) "make"
-
- 3) "make install"
-
- 4) You end up with the binaries "gpg" and "gpgm" in /usr/local/bin.
-
- 5) Optional, but suggested, install the binary "gpg" as suid root.
-
-
-
- Introduction
- ------------
-
- This is a brief overview how to use GnuPG - it is strongly suggested
- that you read the manual^H^H^H more information about the use of
- cryptography. GnuPG is only a tool, secure results require 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.
-
- 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 excatly (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.
-
- * By the Local ID (from the trust DB):
-
- "#34"
-
- This may be used by a MUA to specify an exact key after selecting
- a key from GnuPG (by using a special option or an extra utility)
-
- * 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 PGPs
- 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.
-
-
- Esoteric commands
- -----------------
-
- gpg --list-packets datafile
-
- Use this to list the contents of a data file. If the file is encrypted
- you are asked for the passphrase, so that GnuPG is able to look at the
- inner structure of a encrypted packet. This command should list all
- kinds of rfc2440 messages.
-
- gpgm --list-trustdb
-
- List the contents of the trust DB in a human readable format
-
- gpgm --list-trustdb <usernames>
-
- List the tree of certificates for the given usernames
-
- gpgm --list-trust-path username
-
- List the possible trust paths for the given username. The length
- of such a trust path is limited by the option --max-cert-depth
- which defaults to 5.
-
- For more options/commands see the man page or use "gpg --help".
-
-
- Other Notes
- -----------
-
- The primary FTP site is "ftp://ftp.gnupg.org/pub/gcrypt/"
- The primary WWW page is "http://www.gnupg.org"
-
- See http://www.gnupg.org/mirrors.html for a list of FTP mirrors
- and use them if possible.
-
- Please direct bug reports to <gnupg-bugs@gnu.org> or, better,
- post them to the mailing list <g10@net.lut.ac.uk> (this is a
- closed list - subscribe before posting, see above (~line 33)).
- Please direct questions about GnuPG to the mailing list or
- one of the pgp newsgroups and give me more time to improve
- GnuPG. Commercial support for GnuPG will be available soon.
-
- Have fun and remember: Echelon is looking at you kid.
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v0.9.2 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-iQB1AwUBNr2fPh0Z9MEMmFelAQHqNAL/e7pApR0CGUJ/zuIsjaVhNGPEgKAglcEd
-YuVdB+RCN0wq7ZfI0AHU2FdVISRACmSN3xituTTgeiOUsczM40EZ4l1XNfyRF768
-fglui6XxEeYHFY7mSQMgzzFWDG0Squx0
-=enRo
------END PGP SIGNATURE-----
diff --git a/THANKS b/THANKS
deleted file mode 100644
index 52df027d..00000000
--- a/THANKS
+++ /dev/null
@@ -1,96 +0,0 @@
-GnuPG was originally written by Werner Koch. Other people contributed by
-reporting problems, suggesting various improvements or submitting actual
-code. Here is a list of those people. Help me keep it complete and free of
-errors.
-
-Anand Kumria wildfire@progsoc.uts.edu.au
-Ariel T Glenn ariel@columbia.edu
-Bryan Fullerton bryanf@samurai.com
-Brian Moore bem@cmc.net
-Brian Warner warner@lothar.com
-Caskey L. Dickson caskey@technocage.com
-Cees van de Griend cees-list@griend.xs4all.nl
-Charles Levert charles@comm.polymtl.ca
-Christian von Roques roques@pond.sub.org
-Christopher Oliver oliver@fritz.traverse.net
-Christian Recktenwald chris@citecs.de
-Daniel Eisenbud eisenbud@cs.swarthmore.edu
-David Ellement ellement@sdd.hp.com
-Detlef Lannert lannert@lannert.rz.uni-duesseldorf.de
-Dirk Lattermann dlatt@t-online.de
-Ed Boraas ecxjo@esperanto.org
-Ernst Molitor ernst.molitor@uni-bonn.de
-Fabio Coatti cova@felix.unife.it
-Felix von Leitner leitner@amdiv.de
-Frank Heckenbach heckenb@mi.uni-erlangen.de
-Gaël Quéri gqueri@mail.dotcom.fr
-Greg Louis glouis@dynamicro.on.ca
-Greg Troxel gdt@ir.bbn.com
-Gregory Steuck steuck@iname.com
-Geoff Keating geoffk@ozemail.com.au
-Harald Denker harry@hal.westfalen.de
-Hendrik Buschkamp buschkamp@rheumanet.org
-Holger Schurig holger@d.om.org
-Hugh Daniel hugh@toad.com
-Ian McKellar imckellar@harvestroad.com.au
-Janusz A. Urbanowicz alex@bofh.torun.pl
-James Troup james@nocrew.org
-Jean-loup Gailly gzip@prep.ai.mit.edu
-Jens Bachem bachem@rrz.uni-koeln.de
-John A. Martin jam@jamux.com
-Johnny Teveßen j.tevessen@gmx.de
-Jörg Schilling schilling@fokus.gmd.de
-Jun Kuriyama kuriyama@sky.rim.or.jp
-Karl Fogel kfogel@guanabana.onshore.com
-Karsten Thygesen karthy@kom.auc.dk
-Kazu Yamamoto kazu@iijlab.net
-Lars Kellogg-Stedman lars@bu.edu
-Marco d'Itri md@linux.it
-Mark Adler madler@alumni.caltech.edu
-Markus Friedl Markus.Friedl@informatik.uni-erlangen.de
-Martin Kahlert martin.kahlert@provi.de
-Martin Schulte schulte@thp.uni-koeln.de
-Matthew Skala mskala@ansuz.sooke.bc.ca
-Max Valianskiy maxcom@maxcom.ml.org
-Michael Roth mroth@nessie.de
-Michael Sobolev mss@despair.transas.com
-Nicolas Graner Nicolas.Graner@cri.u-psud.fr
-Niklas Hernaeus [Please don't spam him]
-Nimrod Zimerman zimerman@forfree.at
-N J Doye nic@niss.ac.uk
-Oskari Jääskeläinen f33003a@cc.hut.fi
-Paul D. Smith psmith@baynetworks.com
-Peter Gutmann pgut001@cs.auckland.ac.nz
-QingLong qinglong@bolizm.ihep.su
-Ralph Gillen gillen@theochem.uni-duesseldorf.de
-Reinhard Wobst R.Wobst@ifw-dresden.de
-Reuben Sumner rasumner@wisdom.weizmann.ac.il
-Roddy Strachan roddy@satlink.com.au
-Roland Rosenfeld roland@spinnaker.rhein.de
-Ross Golder rossigee@bigfoot.com
-Serge Munhoven munhoven@mema.ucl.ac.be
-SL Baur steve@xemacs.org
-Stefan Karrmann S.Karrmann@gmx.net
-Steffen Ullrich ccrlphr@xensei.com
-Steffen Zahn zahn@berlin.snafu.de
-Steven Bakker steven@icoe.att.com
-Susanne Schultz schultz@hsp.de
-Thiago Jung Bauermann jungmann@usa.net
-Thomas Roessler roessler@guug.de
-Tom Spindler dogcow@home.merit.edu
-Tom Zerucha tzeruch@ceddec.com
-Tomas Fasth tomas.fasth@twinspot.net
-Thomas Mikkelsen tbm@image.dk
-Ulf Möller 3umoelle@informatik.uni-hamburg.de
-Urko Lusa ulusa@lacueva.ddns.org
-Walter Koch walterk@dip.de
-Werner Koch werner.koch@guug.de
-Wim Vandeputte bunbun@reptile.rug.ac.be
- nbecker@hns.com
-
-Thanks to the German Unix User Group for providing FTP space,
-Martin Hamilton for hosting the mailing list and hsp for
-hosting gnupg.org.
-
-Many thanks to my wife Gerlinde for having so much patience with
-me while hacking late in the evening.
diff --git a/acconfig.h b/acconfig.h
deleted file mode 100644
index fe2ac2fc..00000000
--- a/acconfig.h
+++ /dev/null
@@ -1,98 +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 G10_CONFIG_H
-#define G10_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 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
-
-#undef USE_DYNAMIC_LINKING
-#undef HAVE_DL_DLOPEN
-#undef HAVE_DLD_DLD_LINK
-#undef DLSYM_NEEDS_UNDERSCORE
-
-#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
-
-
-
-@BOTTOM@
-
-#include "g10defs.h"
-
-#endif /*G10_CONFIG_H*/
diff --git a/acinclude.m4 b/acinclude.m4
deleted file mode 100644
index 2349da62..00000000
--- a/acinclude.m4
+++ /dev/null
@@ -1,346 +0,0 @@
-dnl macros to configure g10
-
-
-dnl GNUPG_MSG_PRINT(STRING)
-dnl print a message
-dnl
-define(GNUPG_MSG_PRINT,
- [ echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG
- ])
-
-
-dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME)
-dnl Check whether a typedef exists and create a #define $2 if it exists
-dnl
-AC_DEFUN(GNUPG_CHECK_TYPEDEF,
- [ AC_MSG_CHECKING(for $1 typedef)
- AC_CACHE_VAL(gnupg_cv_typedef_$1,
- [AC_TRY_COMPILE([#include <stdlib.h>
- #include <sys/types.h>], [
- #undef $1
- int a = sizeof($1);
- ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
- AC_MSG_RESULT($gnupg_cv_typedef_$1)
- if test "$gnupg_cv_typedef_$1" = yes; then
- AC_DEFINE($2)
- fi
- ])
-
-
-
-dnl GNUPG_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
-define(GNUPG_LINK_FILES,
- [ if test "x$wk_link_files_src" = "x"; then
- wk_link_files_src="$1"
- wk_link_files_dst="$2"
- else
- wk_link_files_src="$wk_link_files_src $1"
- wk_link_files_dst="$wk_link_files_dst $2"
- fi
- ])
-define(GNUPG_DO_LINK_FILES,
- [ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst )
- ])
-
-
-dnl GNUPG_CHECK_ENDIAN
-dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
-dnl
-define(GNUPG_CHECK_ENDIAN,
- [ if test "$cross_compiling" = yes; then
- AC_MSG_WARN(cross compiling; assuming little endianess)
- fi
- AC_MSG_CHECKING(endianess)
- AC_CACHE_VAL(gnupg_cv_c_endian,
- [ gnupg_cv_c_endian=unknown
- # See if sys/param.h defines the BYTE_ORDER macro.
- AC_TRY_COMPILE([#include <sys/types.h>
- #include <sys/param.h>], [
- #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
- bogus endian macros
- #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
- AC_TRY_COMPILE([#include <sys/types.h>
- #include <sys/param.h>], [
- #if BYTE_ORDER != BIG_ENDIAN
- not big endian
- #endif], gnupg_cv_c_endian=big, gnupg_cv_c_endian=little)])
- if test "$gnupg_cv_c_endian" = unknown; then
- AC_TRY_RUN([main () {
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long l;
- char c[sizeof (long)];
- } u;
- u.l = 1;
- exit (u.c[sizeof (long) - 1] == 1);
- }],
- gnupg_cv_c_endian=little,
- gnupg_cv_c_endian=big,
- gnupg_cv_c_endian=little
- )
- fi
- ])
- AC_MSG_RESULT([$gnupg_cv_c_endian])
- if test "$gnupg_cv_c_endian" = little; then
- AC_DEFINE(LITTLE_ENDIAN_HOST)
- else
- AC_DEFINE(BIG_ENDIAN_HOST)
- fi
- ])
-
-dnl GNUPG_CHECK_CACHE
-dnl
-define(GNUPG_CHECK_CACHE,
- [ AC_MSG_CHECKING(cached information)
- gnupg_hostcheck="$target"
- AC_CACHE_VAL(gnupg_cv_hostcheck, [ gnupg_cv_hostcheck="$gnupg_hostcheck" ])
- if test "$gnupg_cv_hostcheck" != "$gnupg_hostcheck"; then
- AC_MSG_RESULT(changed)
- AC_MSG_WARN(config.cache exists!)
- AC_MSG_ERROR(you must do 'make distclean' first to compile for
- different target or different parameters.)
- else
- AC_MSG_RESULT(ok)
- fi
- ])
-
-
-######################################################################
-# Check for -fPIC etc (taken from libtool)
-# This sets CFLAGS_PIC to the required flags
-# NO_PIC to yes if it is not possible to
-# generate PIC
-######################################################################
-dnl GNUPG_CHECK_PIC
-dnl
-define(GNUPG_CHECK_PIC,
- [ AC_MSG_CHECKING(for option to create PIC)
- CFLAGS_PIC=
- NO_PIC=no
- if test "$cross_compiling" = yes; then
- AC_MSG_RESULT(assume none)
- else
- if test "$GCC" = yes; then
- CFLAGS_PIC="-fPIC"
- else
- case "$host_os" in
- aix3* | aix4*)
- # All rs/6000 code is PIC
- # but is there any non-rs/6000 AIX platform?
- ;;
-
- hpux9* | hpux10*)
- CFLAGS_PIC="+Z"
- ;;
-
- irix5* | irix6*)
- # PIC (with -KPIC) is the default.
- ;;
-
- osf3* | osf4*)
- # FIXME - pic_flag is probably required for
- # hppa*-osf* and i860-osf*
- ;;
-
- sco3.2v5*)
- CFLAGS_PIC='-Kpic'
- ;;
-
- solaris2* | solaris7* )
- CFLAGS_PIC='-KPIC'
- ;;
-
- sunos4*)
- CFLAGS_PIC='-PIC'
- ;;
-
- *)
- NO_PIC=yes
- ;;
- esac
- fi
-
- case "$host_cpu" in
- rs6000 | powerpc | powerpcle)
- # Yippee! All RS/6000 and PowerPC code is position-independent.
- CFLAGS_PIC=""
- ;;
- esac
-
- if test "$NO_PIC" = yes; then
- AC_MSG_RESULT(not possible)
- else
- if test -z "$CFLAGS_PIC"; then
- AC_MSG_RESULT(none)
- else
- AC_MSG_RESULT($CFLAGS_PIC)
- fi
- fi
- fi
- ])
-
-
-######################################################################
-# Check for rdynamic flag
-# This sets CFLAGS_RDYNAMIC to the required flags
-######################################################################
-dnl GNUPG_CHECK_RDYNAMIC
-dnl
-define(GNUPG_CHECK_RDYNAMIC,
- [ AC_MSG_CHECKING(how to specify -rdynamic)
- CFLAGS_RDYNAMIC=
- if test "$cross_compiling" = yes; then
- AC_MSG_RESULT(assume none)
- else
- case "$host_os" in
- solaris* )
- CFLAGS_RDYNAMIC="-Wl,-dy"
- ;;
-
- freebsd2* | osf4* )
- CFLAGS_RDYNAMIC=""
- ;;
- * )
- CFLAGS_RDYNAMIC="-Wl,-export-dynamic"
- ;;
- esac
- AC_MSG_RESULT($CFLAGS_RDYNAMIC)
- fi
- ])
-
-
-#####################################################################
-# Check for SysV IPC (from GIMP)
-# And see whether we have a SHM_LOCK (FreeBSD does not have it).
-#####################################################################
-dnl GNUPG_CHECK_IPC
-dnl
-define(GNUPG_CHECK_IPC,
- [ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h)
- if test "$ac_cv_header_sys_shm_h" = "yes"; then
- AC_MSG_CHECKING(whether IPC_RMID allowes subsequent attaches)
- AC_CACHE_VAL(gnupg_cv_ipc_rmid_deferred_release,
- AC_TRY_RUN([
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- int main()
- {
- int id;
- char *shmaddr;
- id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777);
- if (id == -1)
- exit (2);
- shmaddr = shmat (id, 0, 0);
- shmctl (id, IPC_RMID, 0);
- if ((char*) shmat (id, 0, 0) == (char*) -1)
- {
- shmdt (shmaddr);
- exit (1);
- }
- shmdt (shmaddr);
- shmdt (shmaddr);
- exit (0);
- }
- ],
- gnupg_cv_ipc_rmid_deferred_release="yes",
- gnupg_cv_ipc_rmid_deferred_release="no",
- gnupg_cv_ipc_rmid_deferred_release="assume-no")
- )
- if test "$gnupg_cv_ipc_rmid_deferred_release" = "yes"; then
- AC_DEFINE(IPC_RMID_DEFERRED_RELEASE)
- AC_MSG_RESULT(yes)
- else
- if test "$gnupg_cv_ipc_rmid_deferred_release" = "no"; then
- AC_MSG_RESULT(no)
- else
- AC_MSG_RESULT([assuming no])
- fi
- fi
-
- AC_MSG_CHECKING(whether SHM_LOCK is available)
- AC_CACHE_VAL(gnupg_cv_ipc_have_shm_lock,
- AC_TRY_COMPILE([#include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>],[
- int foo( int shm_id ) { shmctl(shm_id, SHM_LOCK, 0); }
- ],
- gnupg_cv_ipc_have_shm_lock="yes",
- gnupg_cv_ipc_have_shm_lock="no"
- )
- )
- if test "$gnupg_cv_ipc_have_shm_lock" = "yes"; then
- AC_DEFINE(IPC_HAVE_SHM_LOCK)
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
- fi
- ])
-
-
-######################################################################
-# Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock
-# is not called from uid 0 (not tested whether uid 0 works)
-######################################################################
-dnl GNUPG_CHECK_MLOCK
-dnl
-define(GNUPG_CHECK_MLOCK,
- [ AC_CHECK_FUNCS(mlock)
- if test "$ac_cv_func_mlock" = "yes"; then
- AC_MSG_CHECKING(whether mlock is broken)
- AC_CACHE_VAL(gnupg_cv_have_broken_mlock,
- AC_TRY_RUN([
- #include <stdlib.h>
- #include <unistd.h>
- #include <errno.h>
- #include <sys/mman.h>
- #include <sys/types.h>
- #include <fcntl.h>
-
- int main()
- {
- char *pool;
- int err;
- long int pgsize = getpagesize();
-
- pool = malloc( 4096 + pgsize );
- if( !pool )
- return 2;
- pool += (pgsize - ((long int)pool % pgsize));
-
- err = mlock( pool, 4096 );
- if( !err || errno == EPERM )
- return 0; /* okay */
-
- return 1; /* hmmm */
- }
-
- ],
- gnupg_cv_have_broken_mlock="no",
- gnupg_cv_have_broken_mlock="yes",
- gnupg_cv_have_broken_mlock="assume-no"
- )
- )
- if test "$gnupg_cv_have_broken_mlock" = "yes"; then
- AC_DEFINE(HAVE_BROKEN_MLOCK)
- AC_MSG_RESULT(yes)
- else
- if test "$gnupg_cv_have_broken_mlock" = "no"; then
- AC_MSG_RESULT(no)
- else
- AC_MSG_RESULT(assuming no)
- fi
- fi
- fi
- ])
-
-
-dnl *-*wedit:notab*-* Please keep this as the last line.
diff --git a/cipher/ChangeLog b/cipher/ChangeLog
deleted file mode 100644
index 1858f6a5..00000000
--- a/cipher/ChangeLog
+++ /dev/null
@@ -1,364 +0,0 @@
-Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Modules are now figured out by configure
- * construct.c: New. Generated by configure. Changed all modules
- to work with that.
- * sha1.h: Removed.
- * md5.h: Removed.
-
- * twofish.c: Changed interface to allow Twofish/256
-
- * rndunix.c (start_gatherer): Die on SIGPIPE.
-
-Wed Jan 20 18:59:49 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndunix.c (gather_random): Fix to avoid infinite loop.
-
-Sun Jan 17 11:04:33 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * des.c (is_weak_key): Replace system memcmp due to bugs
- in SunOS's memcmp.
- (des_get_info): Return error on failed selftest.
- * twofish.c (twofish_setkey): Return error on failed selftest or
- invalid keylength.
- * cast5.c (cast_setkey): Ditto.
- * blowfish.c (bf_setkey): Return error on failed selftest.
-
-Tue Jan 12 11:17:18 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * random.c (random_is_faked): New.
-
- * tiger.c: Only compile if we have the u64 type
-
-
-Sat Jan 9 16:02:23 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndunix.c (gather_random): check for setuid.
-
- * Makefile.am: Add a way to staically link random modules
-
-Thu Jan 7 18:00:58 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * md.c (md_stop_debug): Do a flush first.
- (md_open): size of buffer now depends on the secure parameter
-
-Sun Jan 3 15:28:44 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndunix.c (start_gatherer): Fixed stupid ==/= bug
-
-1998-12-31 Geoff Keating <geoffk@ozemail.com.au>
-
- * des.c (is_weak_key): Rewrite loop end condition.
-
-Tue Dec 29 14:41:47 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * random.c: add unistd.h for getpid().
- (RAND_MAX): Fallback value for Sun.
-
-Wed Dec 23 17:12:24 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * md.c (md_copy): Reset debug.
-
-Mon Dec 14 21:18:49 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * random.c (read_random_source): Changed the interface to the
- random gathering function.
- (gather_faked): Use new interface.
- * dynload.c (dynload_getfnc_fast_random_poll): Ditto.
- (dynload_getfnc_gather_random): Ditto.
- * rndlinux.c (gather_random): Ditto.
- * rndunix.c (gather_random): Ditto.
-
-Sat Dec 12 18:40:32 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * dynload.c (SYMBOL_VERSION): New to cope with system which needs
- underscores.
-
- * rndunix.c: Rewrote large parts
-
-Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * dynload.c (load_extension): increased needed verbosity level.
-
- * random.c (fast_random_poll): Fallback to a default fast random
- poll function.
- (read_random_source): Always use the faked entroy gatherer if no
- gather module is available.
- * rndlinux.c (fast_poll): Removed.
- * rndunix.c (fast_poll): Removed.
-
-
-Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-*.c: Removed.
- * rndlinux.c : New.
- * rndunix.c : New.
- * random.c : Restructured the interface to the gather modules.
- (intialize): Call constructor functions
- (read_radnom_source): Moved to here.
- * dynload.c (dynload_getfnc_gather_random): New.
- (dynload_getfnc_fast_random_poll): New.
- (register_internal_cipher_extension): New.
- (register_cipher_extension): Support of internal modules.
-
-Sun Nov 8 17:44:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-unix.c (read_random_source): Removed the assert.
-
-Mon Oct 19 18:34:30 1998 me,,, (wk@tobold)
-
- * pubkey.c: Hack to allow us to give some info about RSA keys back.
-
-Thu Oct 15 11:47:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dynload.c: Support for DLD
-
-Wed Oct 14 12:13:07 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-unix.c: Now uses names from configure for /dev/random.
-
-1998-10-10 SL Baur <steve@altair.xemacs.org>
-
- * Makefile.am: fix sed -O substitutions to catch -O6, etc.
-
-Tue Oct 6 10:06:32 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-)
- * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto.
-
-Mon Sep 28 13:23:09 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_digest): New.
- (md_reset): New.
-
-Wed Sep 23 12:27:02 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned.
-
-Mon Sep 21 06:22:53 1998 Werner Koch (wk@(none))
-
- * des.c: Some patches from Michael.
-
-Thu Sep 17 19:00:06 1998 Werner Koch (wk@(none))
-
- * des.c : New file from Michael Roth <mroth@nessie.de>
-
-Mon Sep 14 11:10:55 1998 Werner Koch (wk@(none))
-
- * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys.
-
-Mon Sep 14 09:19:25 1998 Werner Koch (wk@(none))
-
- * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined.
-
-Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none))
-
- * Makefile.am: Fixes to allow a different build directory
-
-Thu Aug 6 17:25:38 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * random.c (get_random_byte): Removed and changed all callers
- to use get_random_bits()
-
-Mon Jul 27 10:30:22 1998 Werner Koch (wk@(none))
-
- * cipher.c : Support for other blocksizes
- (cipher_get_blocksize): New.
- * twofish.c: New.
- * Makefile.am: Add twofish module.
-
-Mon Jul 13 21:30:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (read_pool): Simple alloc if secure_alloc is not set.
- (get_random_bits): Ditto.
-
-Thu Jul 9 13:01:14 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dynload.c (load_extension): Function now nbails out if
- the program is run setuid.
-
-Wed Jul 8 18:58:23 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rmd160.c (rmd160_hash_buffer): New.
-
-Thu Jul 2 10:50:30 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c (cipher_open): algos >=100 use standard CFB
-
-Thu Jun 25 11:18:25 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am: Support for extensions
-
-Thu Jun 18 12:09:38 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (mix_pool): simpler handling for level 0
-
-Mon Jun 15 14:40:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * tiger.c: Removed from dist, will reappear as dynload module
-
-Sat Jun 13 14:16:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * pubkey.c: Major changes to allow extensions. Changed the inteface
- of all public key ciphers and added the ability to load extensions
- on demand.
-
- * misc.c: Removed.
-
-Wed Jun 10 07:52:08 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * dynload.c: New.
- * cipher.c: Major changes to allow extensions.
-
-Mon Jun 8 22:43:00 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c: Major internal chnages to support extensions.
- * blowfish.c (blowfish_get_info): New and made all internal
- functions static, changed heder.
- * cast5.c (cast5_get_info): Likewise.
-
-Mon Jun 8 12:27:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * tiger.c (transform): Fix for big endian
-
- * cipher.c (do_cfb_decrypt): Big endian fix.
-
-Fri May 22 07:30:39 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_get_oid): Add a new one for TIGER.
-
-Thu May 21 13:24:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c: Add support for a dummy cipher
-
-Thu May 14 15:40:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rmd160.c (transform): fixed sigbus - I should better
- add Christian von Roques's new implemenation of rmd160_write.
-
-Fri May 8 18:07:44 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New
- * random.c: Moved system specific functions to rand-****.c
-
-Fri May 8 14:01:17 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (fast_random_poll): add call to gethrtime.
-
-Tue May 5 21:28:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * elgamal.c (elg_generate): choosing x was not correct, could
- yield 6 bytes which are not from the random pool, tsss, tsss..
-
-Tue May 5 14:09:06 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * primegen.c (generate_elg_prime): Add arg mode, changed all
- callers and implemented mode 1.
-
-Mon Apr 27 14:41:58 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c (cipher_get_keylen): New.
-
-Sun Apr 26 14:44:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * tiger.c, tiger.h: New.
-
-Wed Apr 8 14:57:11 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * misc.c (check_pubkey_algo2): New.
-
-Tue Apr 7 18:46:49 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c: New
- * misc.c (check_cipher_algo): Moved to cipher.c
- * cast5.c: Moved many functions to cipher.c
- * blowfish.c: Likewise.
-
-Sat Apr 4 19:52:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cast5.c: Implemented and tested.
-
-Wed Apr 1 16:38:27 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * elgamal.c (elg_generate): Faster generation of x in some cases.
-
-Thu Mar 19 13:54:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * blowfish.c (blowfish_decode_cfb): changed XOR operation
- (blowfish_encode_cfb): Ditto.
-
-Thu Mar 12 14:04:05 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * sha1.c (transform): Rewrote
-
- * blowfish.c (encrypt): Unrolled for rounds == 16
- (decrypt): Ditto.
-
-Tue Mar 10 16:32:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rmd160.c (transform): Unrolled the loop.
-
-Tue Mar 10 13:05:14 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (read_pool): Add pool_balance stuff.
- (get_random_bits): New.
-
- * elgamal.c (elg_generate): Now uses get_random_bits to generate x.
-
-
-Tue Mar 10 11:33:51 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_digest_length): New.
-
-Tue Mar 10 11:27:41 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dsa.c (dsa_verify): Works.
-
-Mon Mar 9 12:59:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dsa.c, dsa.h: Removed some unused code.
-
-Wed Mar 4 10:39:22 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_open): Add call to fast_random_poll.
- blowfish.c (blowfish_setkey): Ditto.
-
-Tue Mar 3 13:32:54 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rmd160.c (rmd160_mixblock): New.
- * random.c: Restructured to start with a new RNG implementation.
- * random.h: New.
-
-Mon Mar 2 19:21:46 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * gost.c, gost.h: Removed because they did only conatin trash.
-
-Sun Mar 1 16:42:29 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (fill_buffer): removed error message if n == -1.
-
-Fri Feb 27 16:39:34 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_enable): No init if called twice.
-
-Thu Feb 26 07:57:02 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * primegen.c (generate_elg_prime): Changed the progress printing.
- (gen_prime): Ditto.
-
-Tue Feb 24 12:28:42 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md5.c, md.5 : Replaced by a modified version of md5.c from
- GNU textutils 1.22.
-
-Wed Feb 18 14:08:30 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c, md.h : New debugging support
-
-Mon Feb 16 10:08:47 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * misc.c (cipher_algo_to_string): New
- (pubkey_algo_to_string): New.
- (digest_algo_to_string): New.
-
-
diff --git a/cipher/Makefile.am b/cipher/Makefile.am
deleted file mode 100644
index b21dc18f..00000000
--- a/cipher/Makefile.am
+++ /dev/null
@@ -1,103 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-
-INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl
-
-noinst_LIBRARIES = libcipher.a
-
-# The configure script greps the module names from the following lines.
-# You must also add all these names to EXTRA_PROGRAMS some lines below
-# and EXTRA_foo_SOURCES entries.
-# Hmmm is there a more easy way to do this? (EXTRA_PROGRAMS
-# might also list programs which are not modules)
-# MODULES: rndunix rndlinux
-# MODULES: sha1 rmd160 md5 tiger
-# MODULES: twofish
-EXTRA_PROGRAMS = rndunix rndlinux \
- sha1 rmd160 md5 tiger \
- twofish
-
-EXTRA_rndlinux_SOURCES = rndlinux.c
-EXTRA_rndunix_SOURCES = rndunix.c
-EXTRA_md5_SOURCES = md5.c
-EXTRA_rmd160_SOURCES = rmd160.c
-EXTRA_sha1_SOURCES = sha1.c
-EXTRA_tiger_SOURCES = tiger.c
-EXTRA_twofish_SOURCES = twofish.c
-
-
-if ENABLE_GNUPG_EXTENSIONS
-pkglib_PROGRAMS = @DYNAMIC_CIPHER_MODS@
-else
-pkglib_PROGRAMS =
-endif
-
-
-DYNLINK_MOD_CFLAGS = -DIS_MODULE @DYNLINK_MOD_CFLAGS@
-
-libcipher_a_SOURCES = cipher.c \
- pubkey.c \
- md.c \
- dynload.c \
- dynload.h \
- des.c \
- des.h \
- blowfish.c \
- blowfish.h \
- cast5.c \
- cast5.h \
- elgamal.c \
- elgamal.h \
- primegen.c \
- random.h \
- random.c \
- rand-internal.h \
- rmd.h \
- dsa.h \
- dsa.c \
- g10c.c \
- smallprime.c \
- construct.c
-
-# configure creates the constructor file
-BUILT_SOURCES = construct.c
-
-
-libcipher_a_DEPENDENCIES = @STATIC_CIPHER_OBJS@
-libcipher_a_LIBADD = @STATIC_CIPHER_OBJS@
-
-
-# If I remember it correct, automake 1.4 has a feature to set
-# fooFLAGS depending on the program. So we should check it out.
-
-tiger: $(srcdir)/tiger.c
- `echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o tiger $(srcdir)/tiger.c | \
- sed -e 's/-O[2-9]*/-O1/g' `
-
-tiger.o: $(srcdir)/tiger.c
- `echo $(COMPILE) $(srcdir)/tiger.c | sed -e 's/-O[2-9]*/-O1/g' `
-
-twofish: $(srcdir)/twofish.c
- `echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o twofish $(srcdir)/twofish.c | \
- sed -e 's/-O[0-9]*/ /g' `
-
-twofish.o: $(srcdir)/twofish.c
- `echo $(COMPILE) $(srcdir)/twofish.c | sed -e 's/-O[0-9]*/ /g' `
-
-
-rndunix: $(srcdir)/rndunix.c
- $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o rndunix $(srcdir)/rndunix.c
-
-rndlinux: $(srcdir)/rndlinux.c
- $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o rndlinux $(srcdir)/rndlinux.c
-
-
-
-install-exec-hook:
- @list='$(pkglib_PROGRAMS)'; for p in $$list; do \
- if test -f $(pkglibdir)/$$p; then \
- echo "chmod 644 $(pkglibdir)/$$p"; \
- chmod 644 $(pkglibdir)/$$p; \
- fi; \
- done
-
diff --git a/cipher/blowfish.c b/cipher/blowfish.c
deleted file mode 100644
index 8bfce67c..00000000
--- a/cipher/blowfish.c
+++ /dev/null
@@ -1,598 +0,0 @@
-/* blowfish.c - Blowfish encryption
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * For a description of the algorithm, see:
- * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996.
- * ISBN 0-471-11709-9. Pages 336 ff.
- *
- * 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
- */
-
-/* Test values:
- * key "abcdefghijklmnopqrstuvwxyz";
- * plain "BLOWFISH"
- * cipher 32 4E D0 FE F4 13 A2 03
- *
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "types.h"
-#include "errors.h"
-#include "blowfish.h"
-#include "dynload.h"
-
-
-
-#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
-#define CIPHER_ALGO_BLOWFISH160 42 /* blowfish 160 bit key (not in OpenPGP)*/
-
-#define FNCCAST_SETKEY(f) (int(*)(void*, byte*, unsigned))(f)
-#define FNCCAST_CRYPT(f) (void(*)(void*, byte*, byte*))(f)
-
-#define BLOWFISH_BLOCKSIZE 8
-#define BLOWFISH_ROUNDS 16
-
-typedef struct {
- u32 s0[256];
- u32 s1[256];
- u32 s2[256];
- u32 s3[256];
- u32 p[BLOWFISH_ROUNDS+2];
-} BLOWFISH_context;
-
-static int bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen );
-static void encrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf );
-static void decrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf );
-
-
-/* precomputed S boxes */
-static const u32 ks0[256] = {
- 0xD1310BA6,0x98DFB5AC,0x2FFD72DB,0xD01ADFB7,0xB8E1AFED,0x6A267E96,
- 0xBA7C9045,0xF12C7F99,0x24A19947,0xB3916CF7,0x0801F2E2,0x858EFC16,
- 0x636920D8,0x71574E69,0xA458FEA3,0xF4933D7E,0x0D95748F,0x728EB658,
- 0x718BCD58,0x82154AEE,0x7B54A41D,0xC25A59B5,0x9C30D539,0x2AF26013,
- 0xC5D1B023,0x286085F0,0xCA417918,0xB8DB38EF,0x8E79DCB0,0x603A180E,
- 0x6C9E0E8B,0xB01E8A3E,0xD71577C1,0xBD314B27,0x78AF2FDA,0x55605C60,
- 0xE65525F3,0xAA55AB94,0x57489862,0x63E81440,0x55CA396A,0x2AAB10B6,
- 0xB4CC5C34,0x1141E8CE,0xA15486AF,0x7C72E993,0xB3EE1411,0x636FBC2A,
- 0x2BA9C55D,0x741831F6,0xCE5C3E16,0x9B87931E,0xAFD6BA33,0x6C24CF5C,
- 0x7A325381,0x28958677,0x3B8F4898,0x6B4BB9AF,0xC4BFE81B,0x66282193,
- 0x61D809CC,0xFB21A991,0x487CAC60,0x5DEC8032,0xEF845D5D,0xE98575B1,
- 0xDC262302,0xEB651B88,0x23893E81,0xD396ACC5,0x0F6D6FF3,0x83F44239,
- 0x2E0B4482,0xA4842004,0x69C8F04A,0x9E1F9B5E,0x21C66842,0xF6E96C9A,
- 0x670C9C61,0xABD388F0,0x6A51A0D2,0xD8542F68,0x960FA728,0xAB5133A3,
- 0x6EEF0B6C,0x137A3BE4,0xBA3BF050,0x7EFB2A98,0xA1F1651D,0x39AF0176,
- 0x66CA593E,0x82430E88,0x8CEE8619,0x456F9FB4,0x7D84A5C3,0x3B8B5EBE,
- 0xE06F75D8,0x85C12073,0x401A449F,0x56C16AA6,0x4ED3AA62,0x363F7706,
- 0x1BFEDF72,0x429B023D,0x37D0D724,0xD00A1248,0xDB0FEAD3,0x49F1C09B,
- 0x075372C9,0x80991B7B,0x25D479D8,0xF6E8DEF7,0xE3FE501A,0xB6794C3B,
- 0x976CE0BD,0x04C006BA,0xC1A94FB6,0x409F60C4,0x5E5C9EC2,0x196A2463,
- 0x68FB6FAF,0x3E6C53B5,0x1339B2EB,0x3B52EC6F,0x6DFC511F,0x9B30952C,
- 0xCC814544,0xAF5EBD09,0xBEE3D004,0xDE334AFD,0x660F2807,0x192E4BB3,
- 0xC0CBA857,0x45C8740F,0xD20B5F39,0xB9D3FBDB,0x5579C0BD,0x1A60320A,
- 0xD6A100C6,0x402C7279,0x679F25FE,0xFB1FA3CC,0x8EA5E9F8,0xDB3222F8,
- 0x3C7516DF,0xFD616B15,0x2F501EC8,0xAD0552AB,0x323DB5FA,0xFD238760,
- 0x53317B48,0x3E00DF82,0x9E5C57BB,0xCA6F8CA0,0x1A87562E,0xDF1769DB,
- 0xD542A8F6,0x287EFFC3,0xAC6732C6,0x8C4F5573,0x695B27B0,0xBBCA58C8,
- 0xE1FFA35D,0xB8F011A0,0x10FA3D98,0xFD2183B8,0x4AFCB56C,0x2DD1D35B,
- 0x9A53E479,0xB6F84565,0xD28E49BC,0x4BFB9790,0xE1DDF2DA,0xA4CB7E33,
- 0x62FB1341,0xCEE4C6E8,0xEF20CADA,0x36774C01,0xD07E9EFE,0x2BF11FB4,
- 0x95DBDA4D,0xAE909198,0xEAAD8E71,0x6B93D5A0,0xD08ED1D0,0xAFC725E0,
- 0x8E3C5B2F,0x8E7594B7,0x8FF6E2FB,0xF2122B64,0x8888B812,0x900DF01C,
- 0x4FAD5EA0,0x688FC31C,0xD1CFF191,0xB3A8C1AD,0x2F2F2218,0xBE0E1777,
- 0xEA752DFE,0x8B021FA1,0xE5A0CC0F,0xB56F74E8,0x18ACF3D6,0xCE89E299,
- 0xB4A84FE0,0xFD13E0B7,0x7CC43B81,0xD2ADA8D9,0x165FA266,0x80957705,
- 0x93CC7314,0x211A1477,0xE6AD2065,0x77B5FA86,0xC75442F5,0xFB9D35CF,
- 0xEBCDAF0C,0x7B3E89A0,0xD6411BD3,0xAE1E7E49,0x00250E2D,0x2071B35E,
- 0x226800BB,0x57B8E0AF,0x2464369B,0xF009B91E,0x5563911D,0x59DFA6AA,
- 0x78C14389,0xD95A537F,0x207D5BA2,0x02E5B9C5,0x83260376,0x6295CFA9,
- 0x11C81968,0x4E734A41,0xB3472DCA,0x7B14A94A,0x1B510052,0x9A532915,
- 0xD60F573F,0xBC9BC6E4,0x2B60A476,0x81E67400,0x08BA6FB5,0x571BE91F,
- 0xF296EC6B,0x2A0DD915,0xB6636521,0xE7B9F9B6,0xFF34052E,0xC5855664,
- 0x53B02D5D,0xA99F8FA1,0x08BA4799,0x6E85076A };
-
-static const u32 ks1[256] = {
- 0x4B7A70E9,0xB5B32944,0xDB75092E,0xC4192623,0xAD6EA6B0,0x49A7DF7D,
- 0x9CEE60B8,0x8FEDB266,0xECAA8C71,0x699A17FF,0x5664526C,0xC2B19EE1,
- 0x193602A5,0x75094C29,0xA0591340,0xE4183A3E,0x3F54989A,0x5B429D65,
- 0x6B8FE4D6,0x99F73FD6,0xA1D29C07,0xEFE830F5,0x4D2D38E6,0xF0255DC1,
- 0x4CDD2086,0x8470EB26,0x6382E9C6,0x021ECC5E,0x09686B3F,0x3EBAEFC9,
- 0x3C971814,0x6B6A70A1,0x687F3584,0x52A0E286,0xB79C5305,0xAA500737,
- 0x3E07841C,0x7FDEAE5C,0x8E7D44EC,0x5716F2B8,0xB03ADA37,0xF0500C0D,
- 0xF01C1F04,0x0200B3FF,0xAE0CF51A,0x3CB574B2,0x25837A58,0xDC0921BD,
- 0xD19113F9,0x7CA92FF6,0x94324773,0x22F54701,0x3AE5E581,0x37C2DADC,
- 0xC8B57634,0x9AF3DDA7,0xA9446146,0x0FD0030E,0xECC8C73E,0xA4751E41,
- 0xE238CD99,0x3BEA0E2F,0x3280BBA1,0x183EB331,0x4E548B38,0x4F6DB908,
- 0x6F420D03,0xF60A04BF,0x2CB81290,0x24977C79,0x5679B072,0xBCAF89AF,
- 0xDE9A771F,0xD9930810,0xB38BAE12,0xDCCF3F2E,0x5512721F,0x2E6B7124,
- 0x501ADDE6,0x9F84CD87,0x7A584718,0x7408DA17,0xBC9F9ABC,0xE94B7D8C,
- 0xEC7AEC3A,0xDB851DFA,0x63094366,0xC464C3D2,0xEF1C1847,0x3215D908,
- 0xDD433B37,0x24C2BA16,0x12A14D43,0x2A65C451,0x50940002,0x133AE4DD,
- 0x71DFF89E,0x10314E55,0x81AC77D6,0x5F11199B,0x043556F1,0xD7A3C76B,
- 0x3C11183B,0x5924A509,0xF28FE6ED,0x97F1FBFA,0x9EBABF2C,0x1E153C6E,
- 0x86E34570,0xEAE96FB1,0x860E5E0A,0x5A3E2AB3,0x771FE71C,0x4E3D06FA,
- 0x2965DCB9,0x99E71D0F,0x803E89D6,0x5266C825,0x2E4CC978,0x9C10B36A,
- 0xC6150EBA,0x94E2EA78,0xA5FC3C53,0x1E0A2DF4,0xF2F74EA7,0x361D2B3D,
- 0x1939260F,0x19C27960,0x5223A708,0xF71312B6,0xEBADFE6E,0xEAC31F66,
- 0xE3BC4595,0xA67BC883,0xB17F37D1,0x018CFF28,0xC332DDEF,0xBE6C5AA5,
- 0x65582185,0x68AB9802,0xEECEA50F,0xDB2F953B,0x2AEF7DAD,0x5B6E2F84,
- 0x1521B628,0x29076170,0xECDD4775,0x619F1510,0x13CCA830,0xEB61BD96,
- 0x0334FE1E,0xAA0363CF,0xB5735C90,0x4C70A239,0xD59E9E0B,0xCBAADE14,
- 0xEECC86BC,0x60622CA7,0x9CAB5CAB,0xB2F3846E,0x648B1EAF,0x19BDF0CA,
- 0xA02369B9,0x655ABB50,0x40685A32,0x3C2AB4B3,0x319EE9D5,0xC021B8F7,
- 0x9B540B19,0x875FA099,0x95F7997E,0x623D7DA8,0xF837889A,0x97E32D77,
- 0x11ED935F,0x16681281,0x0E358829,0xC7E61FD6,0x96DEDFA1,0x7858BA99,
- 0x57F584A5,0x1B227263,0x9B83C3FF,0x1AC24696,0xCDB30AEB,0x532E3054,
- 0x8FD948E4,0x6DBC3128,0x58EBF2EF,0x34C6FFEA,0xFE28ED61,0xEE7C3C73,
- 0x5D4A14D9,0xE864B7E3,0x42105D14,0x203E13E0,0x45EEE2B6,0xA3AAABEA,
- 0xDB6C4F15,0xFACB4FD0,0xC742F442,0xEF6ABBB5,0x654F3B1D,0x41CD2105,
- 0xD81E799E,0x86854DC7,0xE44B476A,0x3D816250,0xCF62A1F2,0x5B8D2646,
- 0xFC8883A0,0xC1C7B6A3,0x7F1524C3,0x69CB7492,0x47848A0B,0x5692B285,
- 0x095BBF00,0xAD19489D,0x1462B174,0x23820E00,0x58428D2A,0x0C55F5EA,
- 0x1DADF43E,0x233F7061,0x3372F092,0x8D937E41,0xD65FECF1,0x6C223BDB,
- 0x7CDE3759,0xCBEE7460,0x4085F2A7,0xCE77326E,0xA6078084,0x19F8509E,
- 0xE8EFD855,0x61D99735,0xA969A7AA,0xC50C06C2,0x5A04ABFC,0x800BCADC,
- 0x9E447A2E,0xC3453484,0xFDD56705,0x0E1E9EC9,0xDB73DBD3,0x105588CD,
- 0x675FDA79,0xE3674340,0xC5C43465,0x713E38D8,0x3D28F89E,0xF16DFF20,
- 0x153E21E7,0x8FB03D4A,0xE6E39F2B,0xDB83ADF7 };
-
-static const u32 ks2[256] = {
- 0xE93D5A68,0x948140F7,0xF64C261C,0x94692934,0x411520F7,0x7602D4F7,
- 0xBCF46B2E,0xD4A20068,0xD4082471,0x3320F46A,0x43B7D4B7,0x500061AF,
- 0x1E39F62E,0x97244546,0x14214F74,0xBF8B8840,0x4D95FC1D,0x96B591AF,
- 0x70F4DDD3,0x66A02F45,0xBFBC09EC,0x03BD9785,0x7FAC6DD0,0x31CB8504,
- 0x96EB27B3,0x55FD3941,0xDA2547E6,0xABCA0A9A,0x28507825,0x530429F4,
- 0x0A2C86DA,0xE9B66DFB,0x68DC1462,0xD7486900,0x680EC0A4,0x27A18DEE,
- 0x4F3FFEA2,0xE887AD8C,0xB58CE006,0x7AF4D6B6,0xAACE1E7C,0xD3375FEC,
- 0xCE78A399,0x406B2A42,0x20FE9E35,0xD9F385B9,0xEE39D7AB,0x3B124E8B,
- 0x1DC9FAF7,0x4B6D1856,0x26A36631,0xEAE397B2,0x3A6EFA74,0xDD5B4332,
- 0x6841E7F7,0xCA7820FB,0xFB0AF54E,0xD8FEB397,0x454056AC,0xBA489527,
- 0x55533A3A,0x20838D87,0xFE6BA9B7,0xD096954B,0x55A867BC,0xA1159A58,
- 0xCCA92963,0x99E1DB33,0xA62A4A56,0x3F3125F9,0x5EF47E1C,0x9029317C,
- 0xFDF8E802,0x04272F70,0x80BB155C,0x05282CE3,0x95C11548,0xE4C66D22,
- 0x48C1133F,0xC70F86DC,0x07F9C9EE,0x41041F0F,0x404779A4,0x5D886E17,
- 0x325F51EB,0xD59BC0D1,0xF2BCC18F,0x41113564,0x257B7834,0x602A9C60,
- 0xDFF8E8A3,0x1F636C1B,0x0E12B4C2,0x02E1329E,0xAF664FD1,0xCAD18115,
- 0x6B2395E0,0x333E92E1,0x3B240B62,0xEEBEB922,0x85B2A20E,0xE6BA0D99,
- 0xDE720C8C,0x2DA2F728,0xD0127845,0x95B794FD,0x647D0862,0xE7CCF5F0,
- 0x5449A36F,0x877D48FA,0xC39DFD27,0xF33E8D1E,0x0A476341,0x992EFF74,
- 0x3A6F6EAB,0xF4F8FD37,0xA812DC60,0xA1EBDDF8,0x991BE14C,0xDB6E6B0D,
- 0xC67B5510,0x6D672C37,0x2765D43B,0xDCD0E804,0xF1290DC7,0xCC00FFA3,
- 0xB5390F92,0x690FED0B,0x667B9FFB,0xCEDB7D9C,0xA091CF0B,0xD9155EA3,
- 0xBB132F88,0x515BAD24,0x7B9479BF,0x763BD6EB,0x37392EB3,0xCC115979,
- 0x8026E297,0xF42E312D,0x6842ADA7,0xC66A2B3B,0x12754CCC,0x782EF11C,
- 0x6A124237,0xB79251E7,0x06A1BBE6,0x4BFB6350,0x1A6B1018,0x11CAEDFA,
- 0x3D25BDD8,0xE2E1C3C9,0x44421659,0x0A121386,0xD90CEC6E,0xD5ABEA2A,
- 0x64AF674E,0xDA86A85F,0xBEBFE988,0x64E4C3FE,0x9DBC8057,0xF0F7C086,
- 0x60787BF8,0x6003604D,0xD1FD8346,0xF6381FB0,0x7745AE04,0xD736FCCC,
- 0x83426B33,0xF01EAB71,0xB0804187,0x3C005E5F,0x77A057BE,0xBDE8AE24,
- 0x55464299,0xBF582E61,0x4E58F48F,0xF2DDFDA2,0xF474EF38,0x8789BDC2,
- 0x5366F9C3,0xC8B38E74,0xB475F255,0x46FCD9B9,0x7AEB2661,0x8B1DDF84,
- 0x846A0E79,0x915F95E2,0x466E598E,0x20B45770,0x8CD55591,0xC902DE4C,
- 0xB90BACE1,0xBB8205D0,0x11A86248,0x7574A99E,0xB77F19B6,0xE0A9DC09,
- 0x662D09A1,0xC4324633,0xE85A1F02,0x09F0BE8C,0x4A99A025,0x1D6EFE10,
- 0x1AB93D1D,0x0BA5A4DF,0xA186F20F,0x2868F169,0xDCB7DA83,0x573906FE,
- 0xA1E2CE9B,0x4FCD7F52,0x50115E01,0xA70683FA,0xA002B5C4,0x0DE6D027,
- 0x9AF88C27,0x773F8641,0xC3604C06,0x61A806B5,0xF0177A28,0xC0F586E0,
- 0x006058AA,0x30DC7D62,0x11E69ED7,0x2338EA63,0x53C2DD94,0xC2C21634,
- 0xBBCBEE56,0x90BCB6DE,0xEBFC7DA1,0xCE591D76,0x6F05E409,0x4B7C0188,
- 0x39720A3D,0x7C927C24,0x86E3725F,0x724D9DB9,0x1AC15BB4,0xD39EB8FC,
- 0xED545578,0x08FCA5B5,0xD83D7CD3,0x4DAD0FC4,0x1E50EF5E,0xB161E6F8,
- 0xA28514D9,0x6C51133C,0x6FD5C7E7,0x56E14EC4,0x362ABFCE,0xDDC6C837,
- 0xD79A3234,0x92638212,0x670EFA8E,0x406000E0 };
-
-static const u32 ks3[256] = {
- 0x3A39CE37,0xD3FAF5CF,0xABC27737,0x5AC52D1B,0x5CB0679E,0x4FA33742,
- 0xD3822740,0x99BC9BBE,0xD5118E9D,0xBF0F7315,0xD62D1C7E,0xC700C47B,
- 0xB78C1B6B,0x21A19045,0xB26EB1BE,0x6A366EB4,0x5748AB2F,0xBC946E79,
- 0xC6A376D2,0x6549C2C8,0x530FF8EE,0x468DDE7D,0xD5730A1D,0x4CD04DC6,
- 0x2939BBDB,0xA9BA4650,0xAC9526E8,0xBE5EE304,0xA1FAD5F0,0x6A2D519A,
- 0x63EF8CE2,0x9A86EE22,0xC089C2B8,0x43242EF6,0xA51E03AA,0x9CF2D0A4,
- 0x83C061BA,0x9BE96A4D,0x8FE51550,0xBA645BD6,0x2826A2F9,0xA73A3AE1,
- 0x4BA99586,0xEF5562E9,0xC72FEFD3,0xF752F7DA,0x3F046F69,0x77FA0A59,
- 0x80E4A915,0x87B08601,0x9B09E6AD,0x3B3EE593,0xE990FD5A,0x9E34D797,
- 0x2CF0B7D9,0x022B8B51,0x96D5AC3A,0x017DA67D,0xD1CF3ED6,0x7C7D2D28,
- 0x1F9F25CF,0xADF2B89B,0x5AD6B472,0x5A88F54C,0xE029AC71,0xE019A5E6,
- 0x47B0ACFD,0xED93FA9B,0xE8D3C48D,0x283B57CC,0xF8D56629,0x79132E28,
- 0x785F0191,0xED756055,0xF7960E44,0xE3D35E8C,0x15056DD4,0x88F46DBA,
- 0x03A16125,0x0564F0BD,0xC3EB9E15,0x3C9057A2,0x97271AEC,0xA93A072A,
- 0x1B3F6D9B,0x1E6321F5,0xF59C66FB,0x26DCF319,0x7533D928,0xB155FDF5,
- 0x03563482,0x8ABA3CBB,0x28517711,0xC20AD9F8,0xABCC5167,0xCCAD925F,
- 0x4DE81751,0x3830DC8E,0x379D5862,0x9320F991,0xEA7A90C2,0xFB3E7BCE,
- 0x5121CE64,0x774FBE32,0xA8B6E37E,0xC3293D46,0x48DE5369,0x6413E680,
- 0xA2AE0810,0xDD6DB224,0x69852DFD,0x09072166,0xB39A460A,0x6445C0DD,
- 0x586CDECF,0x1C20C8AE,0x5BBEF7DD,0x1B588D40,0xCCD2017F,0x6BB4E3BB,
- 0xDDA26A7E,0x3A59FF45,0x3E350A44,0xBCB4CDD5,0x72EACEA8,0xFA6484BB,
- 0x8D6612AE,0xBF3C6F47,0xD29BE463,0x542F5D9E,0xAEC2771B,0xF64E6370,
- 0x740E0D8D,0xE75B1357,0xF8721671,0xAF537D5D,0x4040CB08,0x4EB4E2CC,
- 0x34D2466A,0x0115AF84,0xE1B00428,0x95983A1D,0x06B89FB4,0xCE6EA048,
- 0x6F3F3B82,0x3520AB82,0x011A1D4B,0x277227F8,0x611560B1,0xE7933FDC,
- 0xBB3A792B,0x344525BD,0xA08839E1,0x51CE794B,0x2F32C9B7,0xA01FBAC9,
- 0xE01CC87E,0xBCC7D1F6,0xCF0111C3,0xA1E8AAC7,0x1A908749,0xD44FBD9A,
- 0xD0DADECB,0xD50ADA38,0x0339C32A,0xC6913667,0x8DF9317C,0xE0B12B4F,
- 0xF79E59B7,0x43F5BB3A,0xF2D519FF,0x27D9459C,0xBF97222C,0x15E6FC2A,
- 0x0F91FC71,0x9B941525,0xFAE59361,0xCEB69CEB,0xC2A86459,0x12BAA8D1,
- 0xB6C1075E,0xE3056A0C,0x10D25065,0xCB03A442,0xE0EC6E0E,0x1698DB3B,
- 0x4C98A0BE,0x3278E964,0x9F1F9532,0xE0D392DF,0xD3A0342B,0x8971F21E,
- 0x1B0A7441,0x4BA3348C,0xC5BE7120,0xC37632D8,0xDF359F8D,0x9B992F2E,
- 0xE60B6F47,0x0FE3F11D,0xE54CDA54,0x1EDAD891,0xCE6279CF,0xCD3E7E6F,
- 0x1618B166,0xFD2C1D05,0x848FD2C5,0xF6FB2299,0xF523F357,0xA6327623,
- 0x93A83531,0x56CCCD02,0xACF08162,0x5A75EBB5,0x6E163697,0x88D273CC,
- 0xDE966292,0x81B949D0,0x4C50901B,0x71C65614,0xE6C6C7BD,0x327A140A,
- 0x45E1D006,0xC3F27B9A,0xC9AA53FD,0x62A80F00,0xBB25BFE2,0x35BDD2F6,
- 0x71126905,0xB2040222,0xB6CBCF7C,0xCD769C2B,0x53113EC0,0x1640E3D3,
- 0x38ABBD60,0x2547ADF0,0xBA38209C,0xF746CE76,0x77AFA1C5,0x20756060,
- 0x85CBFE4E,0x8AE88DD8,0x7AAAF9B0,0x4CF9AA7E,0x1948C25C,0x02FB8A8C,
- 0x01C36AE4,0xD6EBE1F9,0x90D4F869,0xA65CDEA0,0x3F09252D,0xC208E69F,
- 0xB74E6132,0xCE77E25B,0x578FDFE3,0x3AC372E6 };
-
-static const u32 ps[BLOWFISH_ROUNDS+2] = {
- 0x243F6A88,0x85A308D3,0x13198A2E,0x03707344,0xA4093822,0x299F31D0,
- 0x082EFA98,0xEC4E6C89,0x452821E6,0x38D01377,0xBE5466CF,0x34E90C6C,
- 0xC0AC29B7,0xC97C50DD,0x3F84D5B5,0xB5470917,0x9216D5D9,0x8979FB1B };
-
-
-
-#if BLOWFISH_ROUNDS != 16
-static inline u32
-function_F( BLOWFISH_context *bc, u32 x )
-{
- u16 a, b, c, d;
-
- #ifdef BIG_ENDIAN_HOST
- a = ((byte*)&x)[0];
- b = ((byte*)&x)[1];
- c = ((byte*)&x)[2];
- d = ((byte*)&x)[3];
- #else
- a = ((byte*)&x)[3];
- b = ((byte*)&x)[2];
- c = ((byte*)&x)[1];
- d = ((byte*)&x)[0];
- #endif
-
- return ((bc->s0[a] + bc->s1[b]) ^ bc->s2[c] ) + bc->s3[d];
-}
-#endif
-
-#ifdef BIG_ENDIAN_HOST
- #define F(x) ((( s0[((byte*)&x)[0]] + s1[((byte*)&x)[1]]) \
- ^ s2[((byte*)&x)[2]]) + s3[((byte*)&x)[3]] )
-#else
- #define F(x) ((( s0[((byte*)&x)[3]] + s1[((byte*)&x)[2]]) \
- ^ s2[((byte*)&x)[1]]) + s3[((byte*)&x)[0]] )
-#endif
-#define R(l,r,i) do { l ^= p[i]; r ^= F(l); } while(0)
-
-
-static void
-encrypt( BLOWFISH_context *bc, u32 *ret_xl, u32 *ret_xr )
-{
- #if BLOWFISH_ROUNDS == 16
- u32 xl, xr, *s0, *s1, *s2, *s3, *p;
-
- xl = *ret_xl;
- xr = *ret_xr;
- p = bc->p;
- s0 = bc->s0;
- s1 = bc->s1;
- s2 = bc->s2;
- s3 = bc->s3;
-
- R( xl, xr, 0);
- R( xr, xl, 1);
- R( xl, xr, 2);
- R( xr, xl, 3);
- R( xl, xr, 4);
- R( xr, xl, 5);
- R( xl, xr, 6);
- R( xr, xl, 7);
- R( xl, xr, 8);
- R( xr, xl, 9);
- R( xl, xr, 10);
- R( xr, xl, 11);
- R( xl, xr, 12);
- R( xr, xl, 13);
- R( xl, xr, 14);
- R( xr, xl, 15);
-
- xl ^= p[BLOWFISH_ROUNDS];
- xr ^= p[BLOWFISH_ROUNDS+1];
-
- *ret_xl = xr;
- *ret_xr = xl;
-
- #else
- u32 xl, xr, temp, *p;
- int i;
-
- xl = *ret_xl;
- xr = *ret_xr;
- p = bc->p;
-
- for(i=0; i < BLOWFISH_ROUNDS; i++ ) {
- xl ^= p[i];
- xr ^= function_F(bc, xl);
- temp = xl;
- xl = xr;
- xr = temp;
- }
- temp = xl;
- xl = xr;
- xr = temp;
-
- xr ^= p[BLOWFISH_ROUNDS];
- xl ^= p[BLOWFISH_ROUNDS+1];
-
- *ret_xl = xl;
- *ret_xr = xr;
- #endif
-}
-
-
-static void
-decrypt( BLOWFISH_context *bc, u32 *ret_xl, u32 *ret_xr )
-{
- #if BLOWFISH_ROUNDS == 16
- u32 xl, xr, *s0, *s1, *s2, *s3, *p;
-
- xl = *ret_xl;
- xr = *ret_xr;
- p = bc->p;
- s0 = bc->s0;
- s1 = bc->s1;
- s2 = bc->s2;
- s3 = bc->s3;
-
- R( xl, xr, 17);
- R( xr, xl, 16);
- R( xl, xr, 15);
- R( xr, xl, 14);
- R( xl, xr, 13);
- R( xr, xl, 12);
- R( xl, xr, 11);
- R( xr, xl, 10);
- R( xl, xr, 9);
- R( xr, xl, 8);
- R( xl, xr, 7);
- R( xr, xl, 6);
- R( xl, xr, 5);
- R( xr, xl, 4);
- R( xl, xr, 3);
- R( xr, xl, 2);
-
- xl ^= p[1];
- xr ^= p[0];
-
- *ret_xl = xr;
- *ret_xr = xl;
-
- #else
- u32 xl, xr, temp, *p;
- int i;
-
- xl = *ret_xl;
- xr = *ret_xr;
- p = bc->p;
-
- for(i=BLOWFISH_ROUNDS+1; i > 1; i-- ) {
- xl ^= p[i];
- xr ^= function_F(bc, xl);
- temp = xl;
- xl = xr;
- xr = temp;
- }
-
- temp = xl;
- xl = xr;
- xr = temp;
-
- xr ^= p[1];
- xl ^= p[0];
-
- *ret_xl = xl;
- *ret_xr = xr;
- #endif
-}
-
-#undef F
-#undef R
-
-static void
-encrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf )
-{
- u32 d1, d2;
-
- d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
- d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
- encrypt( bc, &d1, &d2 );
- outbuf[0] = (d1 >> 24) & 0xff;
- outbuf[1] = (d1 >> 16) & 0xff;
- outbuf[2] = (d1 >> 8) & 0xff;
- outbuf[3] = d1 & 0xff;
- outbuf[4] = (d2 >> 24) & 0xff;
- outbuf[5] = (d2 >> 16) & 0xff;
- outbuf[6] = (d2 >> 8) & 0xff;
- outbuf[7] = d2 & 0xff;
-}
-
-
-static void
-decrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf )
-{
- u32 d1, d2;
-
- d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
- d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
- decrypt( bc, &d1, &d2 );
- outbuf[0] = (d1 >> 24) & 0xff;
- outbuf[1] = (d1 >> 16) & 0xff;
- outbuf[2] = (d1 >> 8) & 0xff;
- outbuf[3] = d1 & 0xff;
- outbuf[4] = (d2 >> 24) & 0xff;
- outbuf[5] = (d2 >> 16) & 0xff;
- outbuf[6] = (d2 >> 8) & 0xff;
- outbuf[7] = d2 & 0xff;
-}
-
-
-static const char*
-selftest(void)
-{
- BLOWFISH_context c;
- byte plain[] = "BLOWFISH";
- byte buffer[8];
- byte plain3[] = { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
- byte key3[] = { 0x41, 0x79, 0x6E, 0xA0, 0x52, 0x61, 0x6E, 0xE4 };
- byte cipher3[] = { 0xE1, 0x13, 0xF4, 0x10, 0x2C, 0xFC, 0xCE, 0x43 };
-
- bf_setkey( &c, "abcdefghijklmnopqrstuvwxyz", 26 );
- encrypt_block( &c, buffer, plain );
- if( memcmp( buffer, "\x32\x4E\xD0\xFE\xF4\x13\xA2\x03", 8 ) )
- return "Blowfish selftest failed (1).";
- decrypt_block( &c, buffer, buffer );
- if( memcmp( buffer, plain, 8 ) )
- return "Blowfish selftest failed (2).";
-
- bf_setkey( &c, key3, 8 );
- encrypt_block( &c, buffer, plain3 );
- if( memcmp( buffer, cipher3, 8 ) )
- return "Blowfish selftest failed (3).";
- decrypt_block( &c, buffer, buffer );
- if( memcmp( buffer, plain3, 8 ) )
- return "Blowfish selftest failed (4).";
- return NULL;
-}
-
-
-
-static int
-bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen )
-{
- int i, j;
- u32 data, datal, datar;
- static int initialized;
- static const char *selftest_failed;
-
- if( !initialized ) {
- initialized = 1;
- selftest_failed = selftest();
- if( selftest_failed )
- fprintf(stderr,"%s\n", selftest_failed );
- }
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- for(i=0; i < BLOWFISH_ROUNDS+2; i++ )
- c->p[i] = ps[i];
- for(i=0; i < 256; i++ ) {
- c->s0[i] = ks0[i];
- c->s1[i] = ks1[i];
- c->s2[i] = ks2[i];
- c->s3[i] = ks3[i];
- }
-
- for(i=j=0; i < BLOWFISH_ROUNDS+2; i++ ) {
- #ifdef BIG_ENDIAN_HOST
- ((byte*)&data)[0] = key[j];
- ((byte*)&data)[1] = key[(j+1)%keylen];
- ((byte*)&data)[2] = key[(j+2)%keylen];
- ((byte*)&data)[3] = key[(j+3)%keylen];
- #else
- ((byte*)&data)[3] = key[j];
- ((byte*)&data)[2] = key[(j+1)%keylen];
- ((byte*)&data)[1] = key[(j+2)%keylen];
- ((byte*)&data)[0] = key[(j+3)%keylen];
- #endif
- c->p[i] ^= data;
- j = (j+4) % keylen;
- }
-
- datal = datar = 0;
- for(i=0; i < BLOWFISH_ROUNDS+2; i += 2 ) {
- encrypt( c, &datal, &datar );
- c->p[i] = datal;
- c->p[i+1] = datar;
- }
- for(i=0; i < 256; i += 2 ) {
- encrypt( c, &datal, &datar );
- c->s0[i] = datal;
- c->s0[i+1] = datar;
- }
- for(i=0; i < 256; i += 2 ) {
- encrypt( c, &datal, &datar );
- c->s1[i] = datal;
- c->s1[i+1] = datar;
- }
- for(i=0; i < 256; i += 2 ) {
- encrypt( c, &datal, &datar );
- c->s2[i] = datal;
- c->s2[i+1] = datar;
- }
- for(i=0; i < 256; i += 2 ) {
- encrypt( c, &datal, &datar );
- c->s3[i] = datal;
- c->s3[i+1] = datar;
- }
-
-
- /* Check for weak key. A weak key is a key in which a value in */
- /* the P-array (here c) occurs more than once per table. */
- for(i=0; i < 255; i++ ) {
- for( j=i+1; j < 256; j++) {
- if( (c->s0[i] == c->s0[j]) || (c->s1[i] == c->s1[j]) ||
- (c->s2[i] == c->s2[j]) || (c->s3[i] == c->s3[j]) )
- return G10ERR_WEAK_KEY;
- }
- }
-
- return 0;
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-blowfish_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey)( void *c, byte *key, unsigned keylen ),
- void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
- void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
- )
-{
- *keylen = algo == CIPHER_ALGO_BLOWFISH ? 128 : 160;
- *blocksize = BLOWFISH_BLOCKSIZE;
- *contextsize = sizeof(BLOWFISH_context);
- *r_setkey = FNCCAST_SETKEY(bf_setkey);
- *r_encrypt= FNCCAST_CRYPT(encrypt_block);
- *r_decrypt= FNCCAST_CRYPT(decrypt_block);
-
- if( algo == CIPHER_ALGO_BLOWFISH )
- return "BLOWFISH";
- if( algo == CIPHER_ALGO_BLOWFISH160 )
- return "BLOWFISH160";
- return NULL;
-}
-
diff --git a/cipher/blowfish.h b/cipher/blowfish.h
deleted file mode 100644
index 827baa14..00000000
--- a/cipher/blowfish.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* blowfish.h
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_BLOWFISH_H
-#define G10_BLOWFISH_H
-
-#include "types.h"
-
-
-const char *
-blowfish_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-#endif /*G10_BLOWFISH_H*/
diff --git a/cipher/cast5.c b/cipher/cast5.c
deleted file mode 100644
index 0e602bd2..00000000
--- a/cipher/cast5.c
+++ /dev/null
@@ -1,621 +0,0 @@
-/* cast5.c - CAST5 cipher (RFC2144)
- * 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
- */
-
-/* Test vectors:
- *
- * 128-bit key = 01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A
- * plaintext = 01 23 45 67 89 AB CD EF
- * ciphertext = 23 8B 4F E5 84 7E 44 B2
- *
- * 80-bit key = 01 23 45 67 12 34 56 78 23 45
- * = 01 23 45 67 12 34 56 78 23 45 00 00 00 00 00 00
- * plaintext = 01 23 45 67 89 AB CD EF
- * ciphertext = EB 6A 71 1A 2C 02 27 1B
- *
- * 40-bit key = 01 23 45 67 12
- * = 01 23 45 67 12 00 00 00 00 00 00 00 00 00 00 00
- * plaintext = 01 23 45 67 89 AB CD EF
- * ciphertext = 7A C8 16 D1 6E 9B 30 2E
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "types.h"
-#include "errors.h"
-#include "cast5.h"
-
-
-#define CIPHER_ALGO_CAST5 3
-
-#define FNCCAST_SETKEY(f) (int(*)(void*, byte*, unsigned))(f)
-#define FNCCAST_CRYPT(f) (void(*)(void*, byte*, byte*))(f)
-
-#define CAST5_BLOCKSIZE 8
-
-typedef struct {
- u32 Km[16];
- byte Kr[16];
-} CAST5_context;
-
-static int cast_setkey( CAST5_context *c, byte *key, unsigned keylen );
-static void encrypt_block( CAST5_context *bc, byte *outbuf, byte *inbuf );
-static void decrypt_block( CAST5_context *bc, byte *outbuf, byte *inbuf );
-
-
-
-
-static const u32 s1[256] = {
-0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,
-0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,
-0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,
-0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,
-0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,
-0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,
-0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,
-0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,
-0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,
-0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,
-0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,
-0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,
-0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,
-0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,
-0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,
-0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,
-0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,
-0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,
-0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,
-0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,
-0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,
-0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,
-0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,
-0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,
-0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,
-0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,
-0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,
-0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,
-0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,
-0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,
-0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,
-0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf
-};
-static const u32 s2[256] = {
-0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,
-0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,
-0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,
-0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,
-0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,
-0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,
-0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,
-0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,
-0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,
-0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,
-0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,
-0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,
-0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,
-0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,
-0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,
-0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,
-0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,
-0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,
-0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,
-0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,
-0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,
-0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,
-0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,
-0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,
-0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,
-0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,
-0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,
-0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,
-0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,
-0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,
-0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,
-0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1
-};
-static const u32 s3[256] = {
-0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,
-0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,
-0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,
-0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,
-0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,
-0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,
-0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,
-0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,
-0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,
-0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,
-0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,
-0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,
-0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,
-0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,
-0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,
-0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,
-0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,
-0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,
-0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,
-0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,
-0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,
-0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,
-0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,
-0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,
-0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,
-0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,
-0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,
-0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,
-0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,
-0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,
-0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,
-0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783
-};
-static const u32 s4[256] = {
-0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,
-0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,
-0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,
-0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,
-0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,
-0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,
-0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,
-0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,
-0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,
-0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,
-0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,
-0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,
-0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,
-0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,
-0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,
-0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,
-0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,
-0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,
-0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,
-0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,
-0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,
-0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,
-0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,
-0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,
-0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,
-0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,
-0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,
-0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,
-0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,
-0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,
-0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,
-0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2
-};
-static const u32 s5[256] = {
-0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,
-0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,
-0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,
-0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,
-0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,
-0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,
-0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,
-0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,
-0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,
-0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,
-0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,
-0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,
-0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,
-0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,
-0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,
-0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,
-0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,
-0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,
-0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,
-0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,
-0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,
-0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,
-0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,
-0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,
-0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,
-0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,
-0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,
-0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,
-0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,
-0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,
-0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,
-0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4
-};
-static const u32 s6[256] = {
-0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,
-0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,
-0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,
-0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,
-0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,
-0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,
-0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,
-0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,
-0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,
-0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,
-0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,
-0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,
-0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,
-0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,
-0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,
-0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,
-0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,
-0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,
-0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,
-0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,
-0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,
-0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,
-0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,
-0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,
-0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,
-0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,
-0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,
-0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,
-0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,
-0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,
-0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,
-0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f
-};
-static const u32 s7[256] = {
-0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,
-0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,
-0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,
-0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,
-0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,
-0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,
-0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,
-0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,
-0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,
-0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,
-0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,
-0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,
-0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,
-0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,
-0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,
-0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,
-0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,
-0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,
-0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,
-0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,
-0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,
-0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,
-0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,
-0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,
-0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,
-0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,
-0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,
-0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,
-0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,
-0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,
-0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,
-0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3
-};
-static const u32 s8[256] = {
-0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,
-0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,
-0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,
-0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,
-0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,
-0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,
-0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,
-0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,
-0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,
-0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,
-0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,
-0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,
-0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,
-0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,
-0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,
-0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,
-0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,
-0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,
-0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,
-0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,
-0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,
-0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,
-0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,
-0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,
-0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,
-0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,
-0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,
-0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,
-0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,
-0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,
-0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,
-0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e
-};
-
-
-#if defined(__GNUC__) && defined(__i386__)
-static inline u32
-rol(int n, u32 x)
-{
- __asm__("roll %%cl,%0"
- :"=r" (x)
- :"0" (x),"c" (n));
- return x;
-}
-#else
- #define rol(n,x) ( ((x) << (n)) | ((x) >> (32-(n))) )
-#endif
-
-#define F1(D,m,r) ( (I = ((m) + (D))), (I=rol((r),I)), \
- (((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff]) )
-#define F2(D,m,r) ( (I = ((m) ^ (D))), (I=rol((r),I)), \
- (((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff]) )
-#define F3(D,m,r) ( (I = ((m) - (D))), (I=rol((r),I)), \
- (((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff]) )
-
-static void
-encrypt_block( CAST5_context *c, byte *outbuf, byte *inbuf )
-{
- u32 l, r, t;
- u32 I; /* used by the Fx macros */
- u32 *Km;
- byte *Kr;
-
- Km = c->Km;
- Kr = c->Kr;
-
- /* (L0,R0) <-- (m1...m64). (Split the plaintext into left and
- * right 32-bit halves L0 = m1...m32 and R0 = m33...m64.)
- */
- l = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
- r = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
-
- /* (16 rounds) for i from 1 to 16, compute Li and Ri as follows:
- * Li = Ri-1;
- * Ri = Li-1 ^ f(Ri-1,Kmi,Kri), where f is defined in Section 2.2
- * Rounds 1, 4, 7, 10, 13, and 16 use f function Type 1.
- * Rounds 2, 5, 8, 11, and 14 use f function Type 2.
- * Rounds 3, 6, 9, 12, and 15 use f function Type 3.
- */
-
- t = l; l = r; r = t ^ F1(r, Km[ 0], Kr[ 0]);
- t = l; l = r; r = t ^ F2(r, Km[ 1], Kr[ 1]);
- t = l; l = r; r = t ^ F3(r, Km[ 2], Kr[ 2]);
- t = l; l = r; r = t ^ F1(r, Km[ 3], Kr[ 3]);
- t = l; l = r; r = t ^ F2(r, Km[ 4], Kr[ 4]);
- t = l; l = r; r = t ^ F3(r, Km[ 5], Kr[ 5]);
- t = l; l = r; r = t ^ F1(r, Km[ 6], Kr[ 6]);
- t = l; l = r; r = t ^ F2(r, Km[ 7], Kr[ 7]);
- t = l; l = r; r = t ^ F3(r, Km[ 8], Kr[ 8]);
- t = l; l = r; r = t ^ F1(r, Km[ 9], Kr[ 9]);
- t = l; l = r; r = t ^ F2(r, Km[10], Kr[10]);
- t = l; l = r; r = t ^ F3(r, Km[11], Kr[11]);
- t = l; l = r; r = t ^ F1(r, Km[12], Kr[12]);
- t = l; l = r; r = t ^ F2(r, Km[13], Kr[13]);
- t = l; l = r; r = t ^ F3(r, Km[14], Kr[14]);
- t = l; l = r; r = t ^ F1(r, Km[15], Kr[15]);
-
- /* c1...c64 <-- (R16,L16). (Exchange final blocks L16, R16 and
- * concatenate to form the ciphertext.) */
- outbuf[0] = (r >> 24) & 0xff;
- outbuf[1] = (r >> 16) & 0xff;
- outbuf[2] = (r >> 8) & 0xff;
- outbuf[3] = r & 0xff;
- outbuf[4] = (l >> 24) & 0xff;
- outbuf[5] = (l >> 16) & 0xff;
- outbuf[6] = (l >> 8) & 0xff;
- outbuf[7] = l & 0xff;
-}
-
-static void
-decrypt_block( CAST5_context *c, byte *outbuf, byte *inbuf )
-{
- u32 l, r, t;
- u32 I;
- u32 *Km;
- byte *Kr;
-
- Km = c->Km;
- Kr = c->Kr;
-
- l = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
- r = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
-
- t = l; l = r; r = t ^ F1(r, Km[15], Kr[15]);
- t = l; l = r; r = t ^ F3(r, Km[14], Kr[14]);
- t = l; l = r; r = t ^ F2(r, Km[13], Kr[13]);
- t = l; l = r; r = t ^ F1(r, Km[12], Kr[12]);
- t = l; l = r; r = t ^ F3(r, Km[11], Kr[11]);
- t = l; l = r; r = t ^ F2(r, Km[10], Kr[10]);
- t = l; l = r; r = t ^ F1(r, Km[ 9], Kr[ 9]);
- t = l; l = r; r = t ^ F3(r, Km[ 8], Kr[ 8]);
- t = l; l = r; r = t ^ F2(r, Km[ 7], Kr[ 7]);
- t = l; l = r; r = t ^ F1(r, Km[ 6], Kr[ 6]);
- t = l; l = r; r = t ^ F3(r, Km[ 5], Kr[ 5]);
- t = l; l = r; r = t ^ F2(r, Km[ 4], Kr[ 4]);
- t = l; l = r; r = t ^ F1(r, Km[ 3], Kr[ 3]);
- t = l; l = r; r = t ^ F3(r, Km[ 2], Kr[ 2]);
- t = l; l = r; r = t ^ F2(r, Km[ 1], Kr[ 1]);
- t = l; l = r; r = t ^ F1(r, Km[ 0], Kr[ 0]);
-
- outbuf[0] = (r >> 24) & 0xff;
- outbuf[1] = (r >> 16) & 0xff;
- outbuf[2] = (r >> 8) & 0xff;
- outbuf[3] = r & 0xff;
- outbuf[4] = (l >> 24) & 0xff;
- outbuf[5] = (l >> 16) & 0xff;
- outbuf[6] = (l >> 8) & 0xff;
- outbuf[7] = l & 0xff;
-}
-
-
-
-static const char*
-selftest(void)
-{
- CAST5_context c;
- byte key[16] = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
- 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A };
- byte plain[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
- byte cipher[8]= { 0x23, 0x8B, 0x4F, 0xE5, 0x84, 0x7E, 0x44, 0xB2 };
- byte buffer[8];
-
- cast_setkey( &c, key, 16 );
- encrypt_block( &c, buffer, plain );
- if( memcmp( buffer, cipher, 8 ) )
- return "1";
- decrypt_block( &c, buffer, buffer );
- if( memcmp( buffer, plain, 8 ) )
- return "2";
-
- #if 0 /* full maintenance test */
- {
- int i;
- byte a0[16] = { 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
- 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A };
- byte b0[16] = { 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
- 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A };
- byte a1[16] = { 0xEE,0xA9,0xD0,0xA2,0x49,0xFD,0x3B,0xA6,
- 0xB3,0x43,0x6F,0xB8,0x9D,0x6D,0xCA,0x92 };
- byte b1[16] = { 0xB2,0xC9,0x5E,0xB0,0x0C,0x31,0xAD,0x71,
- 0x80,0xAC,0x05,0xB8,0xE8,0x3D,0x69,0x6E };
-
- for(i=0; i < 1000000; i++ ) {
- cast_setkey( &c, b0, 16 );
- encrypt_block( &c, a0, a0 );
- encrypt_block( &c, a0+8, a0+8 );
- cast_setkey( &c, a0, 16 );
- encrypt_block( &c, b0, b0 );
- encrypt_block( &c, b0+8, b0+8 );
- }
- if( memcmp( a0, a1, 16 ) || memcmp( b0, b1, 16 ) )
- return "3";
-
- }
- #endif
- return NULL;
-}
-
-
-static void
-key_schedule( u32 *x, u32 *z, u32 *k )
-{
-
- #define xi(i) ((x[(i)/4] >> (8*(3-((i)%4)))) & 0xff)
- #define zi(i) ((z[(i)/4] >> (8*(3-((i)%4)))) & 0xff)
-
- z[0] = x[0] ^ s5[xi(13)]^s6[xi(15)]^s7[xi(12)]^s8[xi(14)]^s7[xi( 8)];
- z[1] = x[2] ^ s5[zi( 0)]^s6[zi( 2)]^s7[zi( 1)]^s8[zi( 3)]^s8[xi(10)];
- z[2] = x[3] ^ s5[zi( 7)]^s6[zi( 6)]^s7[zi( 5)]^s8[zi( 4)]^s5[xi( 9)];
- z[3] = x[1] ^ s5[zi(10)]^s6[zi( 9)]^s7[zi(11)]^s8[zi( 8)]^s6[xi(11)];
- k[0] = s5[zi( 8)]^s6[zi( 9)]^s7[zi( 7)]^s8[zi( 6)]^s5[zi( 2)];
- k[1] = s5[zi(10)]^s6[zi(11)]^s7[zi( 5)]^s8[zi( 4)]^s6[zi( 6)];
- k[2] = s5[zi(12)]^s6[zi(13)]^s7[zi( 3)]^s8[zi( 2)]^s7[zi( 9)];
- k[3] = s5[zi(14)]^s6[zi(15)]^s7[zi( 1)]^s8[zi( 0)]^s8[zi(12)];
-
- x[0] = z[2] ^ s5[zi( 5)]^s6[zi( 7)]^s7[zi( 4)]^s8[zi( 6)]^s7[zi( 0)];
- x[1] = z[0] ^ s5[xi( 0)]^s6[xi( 2)]^s7[xi( 1)]^s8[xi( 3)]^s8[zi( 2)];
- x[2] = z[1] ^ s5[xi( 7)]^s6[xi( 6)]^s7[xi( 5)]^s8[xi( 4)]^s5[zi( 1)];
- x[3] = z[3] ^ s5[xi(10)]^s6[xi( 9)]^s7[xi(11)]^s8[xi( 8)]^s6[zi( 3)];
- k[4] = s5[xi( 3)]^s6[xi( 2)]^s7[xi(12)]^s8[xi(13)]^s5[xi( 8)];
- k[5] = s5[xi( 1)]^s6[xi( 0)]^s7[xi(14)]^s8[xi(15)]^s6[xi(13)];
- k[6] = s5[xi( 7)]^s6[xi( 6)]^s7[xi( 8)]^s8[xi( 9)]^s7[xi( 3)];
- k[7] = s5[xi( 5)]^s6[xi( 4)]^s7[xi(10)]^s8[xi(11)]^s8[xi( 7)];
-
- z[0] = x[0] ^ s5[xi(13)]^s6[xi(15)]^s7[xi(12)]^s8[xi(14)]^s7[xi( 8)];
- z[1] = x[2] ^ s5[zi( 0)]^s6[zi( 2)]^s7[zi( 1)]^s8[zi( 3)]^s8[xi(10)];
- z[2] = x[3] ^ s5[zi( 7)]^s6[zi( 6)]^s7[zi( 5)]^s8[zi( 4)]^s5[xi( 9)];
- z[3] = x[1] ^ s5[zi(10)]^s6[zi( 9)]^s7[zi(11)]^s8[zi( 8)]^s6[xi(11)];
- k[8] = s5[zi( 3)]^s6[zi( 2)]^s7[zi(12)]^s8[zi(13)]^s5[zi( 9)];
- k[9] = s5[zi( 1)]^s6[zi( 0)]^s7[zi(14)]^s8[zi(15)]^s6[zi(12)];
- k[10]= s5[zi( 7)]^s6[zi( 6)]^s7[zi( 8)]^s8[zi( 9)]^s7[zi( 2)];
- k[11]= s5[zi( 5)]^s6[zi( 4)]^s7[zi(10)]^s8[zi(11)]^s8[zi( 6)];
-
- x[0] = z[2] ^ s5[zi( 5)]^s6[zi( 7)]^s7[zi( 4)]^s8[zi( 6)]^s7[zi( 0)];
- x[1] = z[0] ^ s5[xi( 0)]^s6[xi( 2)]^s7[xi( 1)]^s8[xi( 3)]^s8[zi( 2)];
- x[2] = z[1] ^ s5[xi( 7)]^s6[xi( 6)]^s7[xi( 5)]^s8[xi( 4)]^s5[zi( 1)];
- x[3] = z[3] ^ s5[xi(10)]^s6[xi( 9)]^s7[xi(11)]^s8[xi( 8)]^s6[zi( 3)];
- k[12]= s5[xi( 8)]^s6[xi( 9)]^s7[xi( 7)]^s8[xi( 6)]^s5[xi( 3)];
- k[13]= s5[xi(10)]^s6[xi(11)]^s7[xi( 5)]^s8[xi( 4)]^s6[xi( 7)];
- k[14]= s5[xi(12)]^s6[xi(13)]^s7[xi( 3)]^s8[xi( 2)]^s7[xi( 8)];
- k[15]= s5[xi(14)]^s6[xi(15)]^s7[xi( 1)]^s8[xi( 0)]^s8[xi(13)];
-
- #undef xi
- #undef zi
-}
-
-
-static int
-cast_setkey( CAST5_context *c, byte *key, unsigned keylen )
-{
- static int initialized;
- static const char* selftest_failed;
- int i;
- u32 x[4];
- u32 z[4];
- u32 k[16];
-
- if( !initialized ) {
- initialized = 1;
- selftest_failed = selftest();
- if( selftest_failed )
- fprintf(stderr,"CAST5 selftest failed (%s).\n", selftest_failed );
- }
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- if( keylen != 16 )
- return G10ERR_WRONG_KEYLEN;
-
- x[0] = key[0] << 24 | key[1] << 16 | key[2] << 8 | key[3];
- x[1] = key[4] << 24 | key[5] << 16 | key[6] << 8 | key[7];
- x[2] = key[8] << 24 | key[9] << 16 | key[10] << 8 | key[11];
- x[3] = key[12] << 24 | key[13] << 16 | key[14] << 8 | key[15];
-
- key_schedule( x, z, k );
- for(i=0; i < 16; i++ )
- c->Km[i] = k[i];
- key_schedule( x, z, k );
- for(i=0; i < 16; i++ )
- c->Kr[i] = k[i] & 0x1f;
-
- memset(&x,0, sizeof x);
- memset(&z,0, sizeof z);
- memset(&k,0, sizeof k);
-
- #undef xi
- #undef zi
- return 0;
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-cast5_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey)( void *c, byte *key, unsigned keylen ),
- void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
- void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
- )
-{
- *keylen = 128;
- *blocksize = CAST5_BLOCKSIZE;
- *contextsize = sizeof(CAST5_context);
- *r_setkey = FNCCAST_SETKEY(cast_setkey);
- *r_encrypt= FNCCAST_CRYPT(encrypt_block);
- *r_decrypt= FNCCAST_CRYPT(decrypt_block);
-
- if( algo == CIPHER_ALGO_CAST5 )
- return "CAST5";
- return NULL;
-}
-
diff --git a/cipher/cast5.h b/cipher/cast5.h
deleted file mode 100644
index 798eaa23..00000000
--- a/cipher/cast5.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* cast5.h
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_CAST5_H
-#define G10_CAST5_H
-
-#include "types.h"
-
-const char *
-cast5_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-#endif /*G10_CAST5_H*/
diff --git a/cipher/cipher.c b/cipher/cipher.c
deleted file mode 100644
index 601165b7..00000000
--- a/cipher/cipher.c
+++ /dev/null
@@ -1,573 +0,0 @@
-/* cipher.c - cipher dispatcher
- * 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 <string.h>
-#include <errno.h>
-#include <assert.h>
-#include "util.h"
-#include "errors.h"
-#include "cipher.h"
-#include "des.h"
-#include "blowfish.h"
-#include "cast5.h"
-#include "dynload.h"
-
-
-#define MAX_BLOCKSIZE 16
-#define TABLE_SIZE 10
-
-struct cipher_table_s {
- const char *name;
- int algo;
- size_t blocksize;
- size_t keylen;
- size_t contextsize; /* allocate this amount of context */
- int (*setkey)( void *c, byte *key, unsigned keylen );
- void (*encrypt)( void *c, byte *outbuf, byte *inbuf );
- void (*decrypt)( void *c, byte *outbuf, byte *inbuf );
-};
-
-static struct cipher_table_s cipher_table[TABLE_SIZE];
-
-
-struct cipher_handle_s {
- int algo;
- int mode;
- size_t blocksize;
- byte iv[MAX_BLOCKSIZE]; /* (this should be ulong aligned) */
- byte lastiv[MAX_BLOCKSIZE];
- int unused; /* in IV */
- int (*setkey)( void *c, byte *key, unsigned keylen );
- void (*encrypt)( void *c, byte *outbuf, byte *inbuf );
- void (*decrypt)( void *c, byte *outbuf, byte *inbuf );
- byte context[1];
-};
-
-
-static int
-dummy_setkey( void *c, byte *key, unsigned keylen ) { return 0; }
-static void
-dummy_encrypt_block( void *c, byte *outbuf, byte *inbuf ) { BUG(); }
-static void
-dummy_decrypt_block( void *c, byte *outbuf, byte *inbuf ) { BUG(); }
-
-
-
-/****************
- * Put the static entries into the table.
- */
-static void
-setup_cipher_table(void)
-{
-
- int i;
-
- i = 0;
- cipher_table[i].algo = CIPHER_ALGO_BLOWFISH;
- cipher_table[i].name = blowfish_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_CAST5;
- cipher_table[i].name = cast5_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_3DES;
- cipher_table[i].name = des_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_BLOWFISH160;
- cipher_table[i].name = blowfish_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_DUMMY;
- cipher_table[i].name = "DUMMY";
- cipher_table[i].blocksize = 8;
- cipher_table[i].keylen = 128;
- cipher_table[i].contextsize = 0;
- cipher_table[i].setkey = dummy_setkey;
- cipher_table[i].encrypt = dummy_encrypt_block;
- cipher_table[i].decrypt = dummy_decrypt_block;
- i++;
-
- for( ; i < TABLE_SIZE; i++ )
- cipher_table[i].name = NULL;
-}
-
-
-/****************
- * Try to load all modules and return true if new modules are available
- */
-static int
-load_cipher_modules(void)
-{
- static int done = 0;
- static int initialized = 0;
- void *context = NULL;
- struct cipher_table_s *ct;
- int ct_idx;
- int i;
- const char *name;
- int any = 0;
-
- if( !initialized ) {
- cipher_modules_constructor();
- setup_cipher_table(); /* load static modules on the first call */
- initialized = 1;
- return 1;
- }
-
- if( done )
- return 0;
- done = 1;
-
- for(ct_idx=0, ct = cipher_table; ct_idx < TABLE_SIZE; ct_idx++,ct++ ) {
- if( !ct->name )
- break;
- }
- if( ct_idx >= TABLE_SIZE-1 )
- BUG(); /* table already full */
- /* now load all extensions */
- while( (name = enum_gnupgext_ciphers( &context, &ct->algo,
- &ct->keylen, &ct->blocksize, &ct->contextsize,
- &ct->setkey, &ct->encrypt, &ct->decrypt)) ) {
- if( ct->blocksize != 8 && ct->blocksize != 16 ) {
- log_info("skipping cipher %d: unsupported blocksize\n", ct->algo);
- continue;
- }
- for(i=0; cipher_table[i].name; i++ )
- if( cipher_table[i].algo == ct->algo )
- break;
- if( cipher_table[i].name ) {
- log_info("skipping cipher %d: already loaded\n", ct->algo );
- continue;
- }
- /* put it into the table */
- if( g10_opt_verbose > 1 )
- log_info("loaded cipher %d (%s)\n", ct->algo, name);
- ct->name = name;
- ct_idx++;
- ct++;
- any = 1;
- /* check whether there are more available table slots */
- if( ct_idx >= TABLE_SIZE-1 ) {
- log_info("cipher table full; ignoring other extensions\n");
- break;
- }
- }
- enum_gnupgext_ciphers( &context, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL );
- return any;
-}
-
-
-
-
-
-
-
-/****************
- * Map a string to the cipher algo
- */
-int
-string_to_cipher_algo( const char *string )
-{
- int i;
- const char *s;
-
- do {
- for(i=0; (s=cipher_table[i].name); i++ )
- if( !stricmp( s, string ) )
- return cipher_table[i].algo;
- } while( load_cipher_modules() );
- return 0;
-}
-
-/****************
- * Map a cipher algo to a string
- */
-const char *
-cipher_algo_to_string( int algo )
-{
- int i;
-
- do {
- for(i=0; cipher_table[i].name; i++ )
- if( cipher_table[i].algo == algo )
- return cipher_table[i].name;
- } while( load_cipher_modules() );
- return NULL;
-}
-
-/****************
- * Return 0 if the cipher algo is available
- */
-int
-check_cipher_algo( int algo )
-{
- int i;
-
- do {
- for(i=0; cipher_table[i].name; i++ )
- if( cipher_table[i].algo == algo )
- return 0; /* okay */
- } while( load_cipher_modules() );
- return G10ERR_CIPHER_ALGO;
-}
-
-
-unsigned
-cipher_get_keylen( int algo )
-{
- int i;
- unsigned len = 0;
-
- do {
- for(i=0; cipher_table[i].name; i++ ) {
- if( cipher_table[i].algo == algo ) {
- len = cipher_table[i].keylen;
- if( !len )
- log_bug("cipher %d w/o key length\n", algo );
- return len;
- }
- }
- } while( load_cipher_modules() );
- log_bug("cipher %d not found\n", algo );
- return 0;
-}
-
-unsigned
-cipher_get_blocksize( int algo )
-{
- int i;
- unsigned len = 0;
-
- do {
- for(i=0; cipher_table[i].name; i++ ) {
- if( cipher_table[i].algo == algo ) {
- len = cipher_table[i].blocksize;
- if( !len )
- log_bug("cipher %d w/o blocksize\n", algo );
- return len;
- }
- }
- } while( load_cipher_modules() );
- log_bug("cipher %d not found\n", algo );
- return 0;
-}
-
-
-/****************
- * Open a cipher handle for use with algorithm ALGO, in mode MODE
- * and put it into secure memory if SECURE is true.
- */
-CIPHER_HANDLE
-cipher_open( int algo, int mode, int secure )
-{
- CIPHER_HANDLE hd;
- int i;
-
- fast_random_poll();
- do {
- for(i=0; cipher_table[i].name; i++ )
- if( cipher_table[i].algo == algo )
- break;
- } while( !cipher_table[i].name && load_cipher_modules() );
- if( !cipher_table[i].name ) {
- log_fatal("cipher_open: algorithm %d not available\n", algo );
- return NULL;
- }
-
- /* ? perform selftest here and mark this with a flag in cipher_table ? */
-
- hd = secure ? m_alloc_secure_clear( sizeof *hd
- + cipher_table[i].contextsize )
- : m_alloc_clear( sizeof *hd + cipher_table[i].contextsize );
- hd->algo = algo;
- hd->blocksize = cipher_table[i].blocksize;
- hd->setkey = cipher_table[i].setkey;
- hd->encrypt = cipher_table[i].encrypt;
- hd->decrypt = cipher_table[i].decrypt;
- if( algo == CIPHER_ALGO_DUMMY )
- hd->mode = CIPHER_MODE_DUMMY;
- else if( mode == CIPHER_MODE_AUTO_CFB ) {
- if( algo == CIPHER_ALGO_BLOWFISH160 || algo >= 100 )
- hd->mode = CIPHER_MODE_CFB;
- else
- hd->mode = CIPHER_MODE_PHILS_CFB;
- }
- else
- hd->mode = mode;
-
- return hd;
-}
-
-
-void
-cipher_close( CIPHER_HANDLE c )
-{
- m_free(c);
-}
-
-
-int
-cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen )
-{
- return (*c->setkey)( &c->context, key, keylen );
-}
-
-
-
-void
-cipher_setiv( CIPHER_HANDLE c, const byte *iv )
-{
- if( iv )
- memcpy( c->iv, iv, c->blocksize );
- else
- memset( c->iv, 0, c->blocksize );
- c->unused = 0;
-}
-
-
-
-static void
-do_ecb_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
- unsigned n;
-
- for(n=0; n < nblocks; n++ ) {
- (*c->encrypt)( &c->context, outbuf, inbuf );
- inbuf += c->blocksize;
- outbuf += c->blocksize;
- }
-}
-
-static void
-do_ecb_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
- unsigned n;
-
- for(n=0; n < nblocks; n++ ) {
- (*c->decrypt)( &c->context, outbuf, inbuf );
- inbuf += c->blocksize;
- outbuf += c->blocksize;
- }
-}
-
-
-static void
-do_cfb_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes )
-{
- byte *ivp;
- size_t blocksize = c->blocksize;
-
- if( nbytes <= c->unused ) {
- /* short enough to be encoded by the remaining XOR mask */
- /* XOR the input with the IV and store input into IV */
- for(ivp=c->iv+c->blocksize - c->unused; nbytes; nbytes--, c->unused-- )
- *outbuf++ = (*ivp++ ^= *inbuf++);
- return;
- }
-
- if( c->unused ) {
- /* XOR the input with the IV and store input into IV */
- nbytes -= c->unused;
- for(ivp=c->iv+blocksize - c->unused; c->unused; c->unused-- )
- *outbuf++ = (*ivp++ ^= *inbuf++);
- }
-
- /* now we can process complete blocks */
- while( nbytes >= blocksize ) {
- int i;
- /* encrypt the IV (and save the current one) */
- memcpy( c->lastiv, c->iv, blocksize );
- (*c->encrypt)( &c->context, c->iv, c->iv );
- /* XOR the input with the IV and store input into IV */
- for(ivp=c->iv,i=0; i < blocksize; i++ )
- *outbuf++ = (*ivp++ ^= *inbuf++);
- nbytes -= blocksize;
- }
- if( nbytes ) { /* process the remaining bytes */
- /* encrypt the IV (and save the current one) */
- memcpy( c->lastiv, c->iv, blocksize );
- (*c->encrypt)( &c->context, c->iv, c->iv );
- c->unused = blocksize;
- /* and apply the xor */
- c->unused -= nbytes;
- for(ivp=c->iv; nbytes; nbytes-- )
- *outbuf++ = (*ivp++ ^= *inbuf++);
- }
-}
-
-static void
-do_cfb_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes )
-{
- byte *ivp;
- ulong temp;
- size_t blocksize = c->blocksize;
-
- if( nbytes <= c->unused ) {
- /* short enough to be encoded by the remaining XOR mask */
- /* XOR the input with the IV and store input into IV */
- for(ivp=c->iv+blocksize - c->unused; nbytes; nbytes--,c->unused--){
- temp = *inbuf++;
- *outbuf++ = *ivp ^ temp;
- *ivp++ = temp;
- }
- return;
- }
-
- if( c->unused ) {
- /* XOR the input with the IV and store input into IV */
- nbytes -= c->unused;
- for(ivp=c->iv+blocksize - c->unused; c->unused; c->unused-- ) {
- temp = *inbuf++;
- *outbuf++ = *ivp ^ temp;
- *ivp++ = temp;
- }
- }
-
- /* now we can process complete blocks */
- while( nbytes >= blocksize ) {
- int i;
- /* encrypt the IV (and save the current one) */
- memcpy( c->lastiv, c->iv, blocksize );
- (*c->encrypt)( &c->context, c->iv, c->iv );
- /* XOR the input with the IV and store input into IV */
- for(ivp=c->iv,i=0; i < blocksize; i++ ) {
- temp = *inbuf++;
- *outbuf++ = *ivp ^ temp;
- *ivp++ = temp;
- }
- nbytes -= blocksize;
- }
- if( nbytes ) { /* process the remaining bytes */
- /* encrypt the IV (and save the current one) */
- memcpy( c->lastiv, c->iv, blocksize );
- (*c->encrypt)( &c->context, c->iv, c->iv );
- c->unused = blocksize;
- /* and apply the xor */
- c->unused -= nbytes;
- for(ivp=c->iv; nbytes; nbytes-- ) {
- temp = *inbuf++;
- *outbuf++ = *ivp ^ temp;
- *ivp++ = temp;
- }
- }
-}
-
-
-/****************
- * Encrypt INBUF to OUTBUF with the mode selected at open.
- * inbuf and outbuf may overlap or be the same.
- * Depending on the mode some some contraints apply to NBYTES.
- */
-void
-cipher_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes )
-{
- switch( c->mode ) {
- case CIPHER_MODE_ECB:
- assert(!(nbytes%8));
- do_ecb_encrypt(c, outbuf, inbuf, nbytes/8 );
- break;
- case CIPHER_MODE_CFB:
- case CIPHER_MODE_PHILS_CFB:
- do_cfb_encrypt(c, outbuf, inbuf, nbytes );
- break;
- case CIPHER_MODE_DUMMY:
- if( inbuf != outbuf )
- memmove( outbuf, inbuf, nbytes );
- break;
- default: log_fatal("cipher_encrypt: invalid mode %d\n", c->mode );
- }
-}
-
-
-/****************
- * Decrypt INBUF to OUTBUF with the mode selected at open.
- * inbuf and outbuf may overlap or be the same.
- * Depending on the mode some some contraints apply to NBYTES.
- */
-void
-cipher_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes )
-{
- switch( c->mode ) {
- case CIPHER_MODE_ECB:
- assert(!(nbytes%8));
- do_ecb_decrypt(c, outbuf, inbuf, nbytes/8 );
- break;
- case CIPHER_MODE_CFB:
- case CIPHER_MODE_PHILS_CFB:
- do_cfb_decrypt(c, outbuf, inbuf, nbytes );
- break;
- case CIPHER_MODE_DUMMY:
- if( inbuf != outbuf )
- memmove( outbuf, inbuf, nbytes );
- break;
- default: log_fatal("cipher_decrypt: invalid mode %d\n", c->mode );
- }
-}
-
-
-
-/****************
- * Used for PGP's somewhat strange CFB mode. Only works if
- * the handle is in PHILS_CFB mode
- */
-void
-cipher_sync( CIPHER_HANDLE c )
-{
- if( c->mode == CIPHER_MODE_PHILS_CFB && c->unused ) {
- memmove(c->iv + c->unused, c->iv, c->blocksize - c->unused );
- memcpy(c->iv, c->lastiv + c->blocksize - c->unused, c->unused);
- c->unused = 0;
- }
-}
-
diff --git a/cipher/des.c b/cipher/des.c
deleted file mode 100644
index 088f5e14..00000000
--- a/cipher/des.c
+++ /dev/null
@@ -1,915 +0,0 @@
-/* des.c - DES and Triple-DES encryption/decryption Algorithm
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * Please see below for more legal information!
- *
- * According to the definition of DES in FIPS PUB 46-2 from December 1993.
- * For a description of triple encryption, see:
- * Bruce Schneier: Applied Cryptography. Second Edition.
- * John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff.
- *
- * 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
- */
-
-
-/*
- * Written by Michael Roth <mroth@nessie.de>, September 1998
- */
-
-
-/*
- * U S A G E
- * ===========
- *
- * For DES or Triple-DES encryption/decryption you must initialize a proper
- * encryption context with a key.
- *
- * A DES key is 64bit wide but only 56bits of the key are used. The remaining
- * bits are parity bits and they will _not_ checked in this implementation, but
- * simply ignored.
- *
- * For Tripple-DES you could use either two 64bit keys or three 64bit keys.
- * The parity bits will _not_ checked, too.
- *
- * After initializing a context with a key you could use this context to
- * encrypt or decrypt data in 64bit blocks in Electronic Codebook Mode.
- *
- * (In the examples below the slashes at the beginning and ending of comments
- * are omited.)
- *
- * DES Example
- * -----------
- * unsigned char key[8];
- * unsigned char plaintext[8];
- * unsigned char ciphertext[8];
- * unsigned char recoverd[8];
- * des_ctx context;
- *
- * * Fill 'key' and 'plaintext' with some data *
- * ....
- *
- * * Set up the DES encryption context *
- * des_setkey(context, key);
- *
- * * Encrypt the plaintext *
- * des_ecb_encrypt(context, plaintext, ciphertext);
- *
- * * To recover the orginal plaintext from ciphertext use: *
- * des_ecb_decrypt(context, ciphertext, recoverd);
- *
- *
- * Triple-DES Example
- * ------------------
- * unsigned char key1[8];
- * unsigned char key2[8];
- * unsigned char key3[8];
- * unsigned char plaintext[8];
- * unsigned char ciphertext[8];
- * unsigned char recoverd[8];
- * tripledes_ctx context;
- *
- * * If you would like to use two 64bit keys, fill 'key1' and'key2'
- * then setup the encryption context: *
- * tripledes_set2keys(context, key1, key2);
- *
- * * To use three 64bit keys with Triple-DES use: *
- * tripledes_set3keys(context, key1, key2, key3);
- *
- * * Encrypting plaintext with Triple-DES *
- * tripledes_ecb_encrypt(context, plaintext, ciphertext);
- *
- * * Decrypting ciphertext to recover the plaintext with Triple-DES *
- * tripledes_ecb_decrypt(context, ciphertext, recoverd);
- *
- *
- * Selftest
- * --------
- * char *error_msg;
- *
- * * To perform a selftest of this DES/Triple-DES implementation use the
- * function selftest(). It will return an error string if their are
- * some problems with this library. *
- *
- * if ( (error_msg = selftest()) )
- * {
- * fprintf(stderr, "An error in the DES/Tripple-DES implementation occured: %s\n", error_msg);
- * abort();
- * }
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h> /* memcpy, memcmp */
-#include "types.h" /* for byte and u32 typedefs */
-#include "errors.h"
-#include "des.h"
-
-#if defined(__GNUC__) && defined(__GNU_LIBRARY__)
-#define working_memcmp memcmp
-#else
-/*
- * According to the SunOS man page, memcmp returns indeterminate sign
- * depending on whether characters are signed or not.
- */
-int
-working_memcmp( const char *a, const char *b, size_t n )
-{
- for( ; n; n--, a++, b++ )
- if( *a != *b )
- return (int)(*(byte*)a) - (int)(*(byte*)b);
- return 0;
-}
-#endif
-
-
-
-/* Some defines/checks to support standalone modules */
-
-#ifndef CIPHER_ALGO_3DES
- #define CIPHER_ALGO_3DES 2
-#elif CIPHER_ALGO_3DES != 2
- #error CIPHER_ALGO_3DES is defined to a wrong value.
-#endif
-
-
-/* Macros used by the info function. */
-#define FNCCAST_SETKEY(f) ((int(*)(void*, byte*, unsigned))(f))
-#define FNCCAST_CRYPT(f) ((void(*)(void*, byte*, byte*))(f))
-
-
-/*
- * Encryption/Decryption context of DES
- */
-typedef struct _des_ctx
- {
- u32 encrypt_subkeys[32];
- u32 decrypt_subkeys[32];
- }
-des_ctx[1];
-
-/*
- * Encryption/Decryption context of Triple-DES
- */
-typedef struct _tripledes_ctx
- {
- u32 encrypt_subkeys[96];
- u32 decrypt_subkeys[96];
- }
-tripledes_ctx[1];
-
-static const char *selftest_failed;
-
-static void des_key_schedule (const byte *, u32 *);
-static int des_setkey (struct _des_ctx *, const byte *);
-static int des_ecb_crypt (struct _des_ctx *, const byte *, byte *, int);
-static int tripledes_set2keys (struct _tripledes_ctx *, const byte *, const byte *);
-static int tripledes_set3keys (struct _tripledes_ctx *, const byte *, const byte *, const byte *);
-static int tripledes_ecb_crypt (struct _tripledes_ctx *, const byte *, byte *, int);
-static int is_weak_key ( const byte *key );
-static const char *selftest (void);
-
-
-
-
-
-
-/*
- * The s-box values are permuted according to the 'primitive function P'
- */
-static u32 sbox1[64] =
-{
- 0x00808200, 0x00000000, 0x00008000, 0x00808202, 0x00808002, 0x00008202, 0x00000002, 0x00008000,
- 0x00000200, 0x00808200, 0x00808202, 0x00000200, 0x00800202, 0x00808002, 0x00800000, 0x00000002,
- 0x00000202, 0x00800200, 0x00800200, 0x00008200, 0x00008200, 0x00808000, 0x00808000, 0x00800202,
- 0x00008002, 0x00800002, 0x00800002, 0x00008002, 0x00000000, 0x00000202, 0x00008202, 0x00800000,
- 0x00008000, 0x00808202, 0x00000002, 0x00808000, 0x00808200, 0x00800000, 0x00800000, 0x00000200,
- 0x00808002, 0x00008000, 0x00008200, 0x00800002, 0x00000200, 0x00000002, 0x00800202, 0x00008202,
- 0x00808202, 0x00008002, 0x00808000, 0x00800202, 0x00800002, 0x00000202, 0x00008202, 0x00808200,
- 0x00000202, 0x00800200, 0x00800200, 0x00000000, 0x00008002, 0x00008200, 0x00000000, 0x00808002
-};
-
-static u32 sbox2[64] =
-{
- 0x40084010, 0x40004000, 0x00004000, 0x00084010, 0x00080000, 0x00000010, 0x40080010, 0x40004010,
- 0x40000010, 0x40084010, 0x40084000, 0x40000000, 0x40004000, 0x00080000, 0x00000010, 0x40080010,
- 0x00084000, 0x00080010, 0x40004010, 0x00000000, 0x40000000, 0x00004000, 0x00084010, 0x40080000,
- 0x00080010, 0x40000010, 0x00000000, 0x00084000, 0x00004010, 0x40084000, 0x40080000, 0x00004010,
- 0x00000000, 0x00084010, 0x40080010, 0x00080000, 0x40004010, 0x40080000, 0x40084000, 0x00004000,
- 0x40080000, 0x40004000, 0x00000010, 0x40084010, 0x00084010, 0x00000010, 0x00004000, 0x40000000,
- 0x00004010, 0x40084000, 0x00080000, 0x40000010, 0x00080010, 0x40004010, 0x40000010, 0x00080010,
- 0x00084000, 0x00000000, 0x40004000, 0x00004010, 0x40000000, 0x40080010, 0x40084010, 0x00084000
-};
-
-static u32 sbox3[64] =
-{
- 0x00000104, 0x04010100, 0x00000000, 0x04010004, 0x04000100, 0x00000000, 0x00010104, 0x04000100,
- 0x00010004, 0x04000004, 0x04000004, 0x00010000, 0x04010104, 0x00010004, 0x04010000, 0x00000104,
- 0x04000000, 0x00000004, 0x04010100, 0x00000100, 0x00010100, 0x04010000, 0x04010004, 0x00010104,
- 0x04000104, 0x00010100, 0x00010000, 0x04000104, 0x00000004, 0x04010104, 0x00000100, 0x04000000,
- 0x04010100, 0x04000000, 0x00010004, 0x00000104, 0x00010000, 0x04010100, 0x04000100, 0x00000000,
- 0x00000100, 0x00010004, 0x04010104, 0x04000100, 0x04000004, 0x00000100, 0x00000000, 0x04010004,
- 0x04000104, 0x00010000, 0x04000000, 0x04010104, 0x00000004, 0x00010104, 0x00010100, 0x04000004,
- 0x04010000, 0x04000104, 0x00000104, 0x04010000, 0x00010104, 0x00000004, 0x04010004, 0x00010100
-};
-
-static u32 sbox4[64] =
-{
- 0x80401000, 0x80001040, 0x80001040, 0x00000040, 0x00401040, 0x80400040, 0x80400000, 0x80001000,
- 0x00000000, 0x00401000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00400040, 0x80400000,
- 0x80000000, 0x00001000, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x80001000, 0x00001040,
- 0x80400040, 0x80000000, 0x00001040, 0x00400040, 0x00001000, 0x00401040, 0x80401040, 0x80000040,
- 0x00400040, 0x80400000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00000000, 0x00401000,
- 0x00001040, 0x00400040, 0x80400040, 0x80000000, 0x80401000, 0x80001040, 0x80001040, 0x00000040,
- 0x80401040, 0x80000040, 0x80000000, 0x00001000, 0x80400000, 0x80001000, 0x00401040, 0x80400040,
- 0x80001000, 0x00001040, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x00001000, 0x00401040
-};
-
-static u32 sbox5[64] =
-{
- 0x00000080, 0x01040080, 0x01040000, 0x21000080, 0x00040000, 0x00000080, 0x20000000, 0x01040000,
- 0x20040080, 0x00040000, 0x01000080, 0x20040080, 0x21000080, 0x21040000, 0x00040080, 0x20000000,
- 0x01000000, 0x20040000, 0x20040000, 0x00000000, 0x20000080, 0x21040080, 0x21040080, 0x01000080,
- 0x21040000, 0x20000080, 0x00000000, 0x21000000, 0x01040080, 0x01000000, 0x21000000, 0x00040080,
- 0x00040000, 0x21000080, 0x00000080, 0x01000000, 0x20000000, 0x01040000, 0x21000080, 0x20040080,
- 0x01000080, 0x20000000, 0x21040000, 0x01040080, 0x20040080, 0x00000080, 0x01000000, 0x21040000,
- 0x21040080, 0x00040080, 0x21000000, 0x21040080, 0x01040000, 0x00000000, 0x20040000, 0x21000000,
- 0x00040080, 0x01000080, 0x20000080, 0x00040000, 0x00000000, 0x20040000, 0x01040080, 0x20000080
-};
-
-static u32 sbox6[64] =
-{
- 0x10000008, 0x10200000, 0x00002000, 0x10202008, 0x10200000, 0x00000008, 0x10202008, 0x00200000,
- 0x10002000, 0x00202008, 0x00200000, 0x10000008, 0x00200008, 0x10002000, 0x10000000, 0x00002008,
- 0x00000000, 0x00200008, 0x10002008, 0x00002000, 0x00202000, 0x10002008, 0x00000008, 0x10200008,
- 0x10200008, 0x00000000, 0x00202008, 0x10202000, 0x00002008, 0x00202000, 0x10202000, 0x10000000,
- 0x10002000, 0x00000008, 0x10200008, 0x00202000, 0x10202008, 0x00200000, 0x00002008, 0x10000008,
- 0x00200000, 0x10002000, 0x10000000, 0x00002008, 0x10000008, 0x10202008, 0x00202000, 0x10200000,
- 0x00202008, 0x10202000, 0x00000000, 0x10200008, 0x00000008, 0x00002000, 0x10200000, 0x00202008,
- 0x00002000, 0x00200008, 0x10002008, 0x00000000, 0x10202000, 0x10000000, 0x00200008, 0x10002008
-};
-
-static u32 sbox7[64] =
-{
- 0x00100000, 0x02100001, 0x02000401, 0x00000000, 0x00000400, 0x02000401, 0x00100401, 0x02100400,
- 0x02100401, 0x00100000, 0x00000000, 0x02000001, 0x00000001, 0x02000000, 0x02100001, 0x00000401,
- 0x02000400, 0x00100401, 0x00100001, 0x02000400, 0x02000001, 0x02100000, 0x02100400, 0x00100001,
- 0x02100000, 0x00000400, 0x00000401, 0x02100401, 0x00100400, 0x00000001, 0x02000000, 0x00100400,
- 0x02000000, 0x00100400, 0x00100000, 0x02000401, 0x02000401, 0x02100001, 0x02100001, 0x00000001,
- 0x00100001, 0x02000000, 0x02000400, 0x00100000, 0x02100400, 0x00000401, 0x00100401, 0x02100400,
- 0x00000401, 0x02000001, 0x02100401, 0x02100000, 0x00100400, 0x00000000, 0x00000001, 0x02100401,
- 0x00000000, 0x00100401, 0x02100000, 0x00000400, 0x02000001, 0x02000400, 0x00000400, 0x00100001
-};
-
-static u32 sbox8[64] =
-{
- 0x08000820, 0x00000800, 0x00020000, 0x08020820, 0x08000000, 0x08000820, 0x00000020, 0x08000000,
- 0x00020020, 0x08020000, 0x08020820, 0x00020800, 0x08020800, 0x00020820, 0x00000800, 0x00000020,
- 0x08020000, 0x08000020, 0x08000800, 0x00000820, 0x00020800, 0x00020020, 0x08020020, 0x08020800,
- 0x00000820, 0x00000000, 0x00000000, 0x08020020, 0x08000020, 0x08000800, 0x00020820, 0x00020000,
- 0x00020820, 0x00020000, 0x08020800, 0x00000800, 0x00000020, 0x08020020, 0x00000800, 0x00020820,
- 0x08000800, 0x00000020, 0x08000020, 0x08020000, 0x08020020, 0x08000000, 0x00020000, 0x08000820,
- 0x00000000, 0x08020820, 0x00020020, 0x08000020, 0x08020000, 0x08000800, 0x08000820, 0x00000000,
- 0x08020820, 0x00020800, 0x00020800, 0x00000820, 0x00000820, 0x00020020, 0x08000000, 0x08020800
-};
-
-
-
-/*
- * These two tables are part of the 'permuted choice 1' function.
- * In this implementation several speed improvements are done.
- */
-u32 leftkey_swap[16] =
-{
- 0x00000000, 0x00000001, 0x00000100, 0x00000101,
- 0x00010000, 0x00010001, 0x00010100, 0x00010101,
- 0x01000000, 0x01000001, 0x01000100, 0x01000101,
- 0x01010000, 0x01010001, 0x01010100, 0x01010101
-};
-
-u32 rightkey_swap[16] =
-{
- 0x00000000, 0x01000000, 0x00010000, 0x01010000,
- 0x00000100, 0x01000100, 0x00010100, 0x01010100,
- 0x00000001, 0x01000001, 0x00010001, 0x01010001,
- 0x00000101, 0x01000101, 0x00010101, 0x01010101,
-};
-
-
-
-/*
- * Numbers of left shifts per round for encryption subkey schedule
- * To calculate the decryption key scheduling we just reverse the
- * ordering of the subkeys so we can omit the table for decryption
- * subkey schedule.
- */
-static byte encrypt_rotate_tab[16] =
-{
- 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
-};
-
-
-
-/*
- * Table with weak DES keys sorted in ascending order.
- * In DES their are 64 known keys wich are weak. They are weak
- * because they produce only one, two or four different
- * subkeys in the subkey scheduling process.
- * The keys in this table have all their parity bits cleared.
- */
-static byte weak_keys[64][8] =
-{
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e },
- { 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0 }, { 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe },
- { 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e }, { 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00 },
- { 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe }, { 0x00, 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0 },
- { 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0 }, { 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe },
- { 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00 }, { 0x00, 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e },
- { 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe }, { 0x00, 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0 },
- { 0x00, 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e }, { 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00 },
- { 0x0e, 0x0e, 0x0e, 0x0e, 0xf0, 0xf0, 0xf0, 0xf0 }, { 0x1e, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x0e },
- { 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e, 0x00 }, { 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0, 0xfe },
- { 0x1e, 0x00, 0xfe, 0xe0, 0x0e, 0x00, 0xfe, 0xf0 }, { 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00 },
- { 0x1e, 0x1e, 0x1e, 0x1e, 0x0e, 0x0e, 0x0e, 0x0e }, { 0x1e, 0x1e, 0xe0, 0xe0, 0x0e, 0x0e, 0xf0, 0xf0 },
- { 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe, 0xfe }, { 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00, 0xfe },
- { 0x1e, 0xe0, 0x1e, 0xe0, 0x0e, 0xf0, 0x0e, 0xf0 }, { 0x1e, 0xe0, 0xe0, 0x1e, 0x0e, 0xf0, 0xf0, 0x0e },
- { 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe, 0x00 }, { 0x1e, 0xfe, 0x00, 0xe0, 0x0e, 0xfe, 0x00, 0xf0 },
- { 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe }, { 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0, 0x00 },
- { 0x1e, 0xfe, 0xfe, 0x1e, 0x0e, 0xfe, 0xfe, 0x0e }, { 0xe0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0xf0 },
- { 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e, 0xfe }, { 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00 },
- { 0xe0, 0x00, 0xfe, 0x1e, 0xf0, 0x00, 0xfe, 0x0e }, { 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00, 0xfe },
- { 0xe0, 0x1e, 0x1e, 0xe0, 0xf0, 0x0e, 0x0e, 0xf0 }, { 0xe0, 0x1e, 0xe0, 0x1e, 0xf0, 0x0e, 0xf0, 0x0e },
- { 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe, 0x00 }, { 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00 },
- { 0xe0, 0xe0, 0x1e, 0x1e, 0xf0, 0xf0, 0x0e, 0x0e }, { 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe, 0xfe },
- { 0xe0, 0xfe, 0x00, 0x1e, 0xf0, 0xfe, 0x00, 0x0e }, { 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e, 0x00 },
- { 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0, 0xfe }, { 0xe0, 0xfe, 0xfe, 0xe0, 0xf0, 0xfe, 0xfe, 0xf0 },
- { 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe }, { 0xfe, 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0 },
- { 0xfe, 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e }, { 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00 },
- { 0xfe, 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0 }, { 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe },
- { 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00 }, { 0xfe, 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e },
- { 0xfe, 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e }, { 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00 },
- { 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe }, { 0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0 },
- { 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00 }, { 0xfe, 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e },
- { 0xfe, 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0 }, { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe }
-};
-
-
-
-
-
-
-/*
- * Macro to swap bits across two words
- */
-#define DO_PERMUTATION(a, temp, b, offset, mask) \
- temp = ((a>>offset) ^ b) & mask; \
- b ^= temp; \
- a ^= temp<<offset;
-
-
-/*
- * This performs the 'initial permutation' for the data to be encrypted or decrypted
- */
-#define INITIAL_PERMUTATION(left, temp, right) \
- DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) \
- DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \
- DO_PERMUTATION(right, temp, left, 2, 0x33333333) \
- DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \
- DO_PERMUTATION(left, temp, right, 1, 0x55555555)
-
-
-/*
- * The 'inverse initial permutation'
- */
-#define FINAL_PERMUTATION(left, temp, right) \
- DO_PERMUTATION(left, temp, right, 1, 0x55555555) \
- DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \
- DO_PERMUTATION(right, temp, left, 2, 0x33333333) \
- DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \
- DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f)
-
-
-/*
- * A full DES round including 'expansion function', 'sbox substitution'
- * and 'primitive function P' but without swapping the left and right word.
- */
-#define DES_ROUND(from, to, work, subkey) \
- work = ((from<<1) | (from>>31)) ^ *subkey++; \
- to ^= sbox8[ work & 0x3f ]; \
- to ^= sbox6[ (work>>8) & 0x3f ]; \
- to ^= sbox4[ (work>>16) & 0x3f ]; \
- to ^= sbox2[ (work>>24) & 0x3f ]; \
- work = ((from>>3) | (from<<29)) ^ *subkey++; \
- to ^= sbox7[ work & 0x3f ]; \
- to ^= sbox5[ (work>>8) & 0x3f ]; \
- to ^= sbox3[ (work>>16) & 0x3f ]; \
- to ^= sbox1[ (work>>24) & 0x3f ];
-
-
-/*
- * Macros to convert 8 bytes from/to 32bit words
- */
-#define READ_64BIT_DATA(data, left, right) \
- left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \
- right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7];
-
-#define WRITE_64BIT_DATA(data, left, right) \
- data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \
- data[2] = (left >> 8) &0xff; data[3] = left &0xff; \
- data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \
- data[6] = (right >> 8) &0xff; data[7] = right &0xff;
-
-
-/*
- * Handy macros for encryption and decryption of data
- */
-#define des_ecb_encrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 0)
-#define des_ecb_decrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 1)
-#define tripledes_ecb_encrypt(ctx, from, to) tripledes_ecb_crypt(ctx, from, to, 0)
-#define tripledes_ecb_decrypt(ctx, from, to) tripledes_ecb_crypt(ctx, from, to, 1)
-
-
-
-
-
-
-/*
- * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for
- * 16 encryption rounds.
- * To calculate subkeys for decryption the caller
- * have to reorder the generated subkeys.
- *
- * rawkey: 8 Bytes of key data
- * subkey: Array of at least 32 u32s. Will be filled
- * with calculated subkeys.
- *
- */
-static void
-des_key_schedule (const byte * rawkey, u32 * subkey)
-{
- u32 left, right, work;
- int round;
-
- READ_64BIT_DATA (rawkey, left, right)
-
- DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f)
- DO_PERMUTATION (right, work, left, 0, 0x10101010)
-
- left = (leftkey_swap[(left >> 0) & 0xf] << 3) | (leftkey_swap[(left >> 8) & 0xf] << 2)
- | (leftkey_swap[(left >> 16) & 0xf] << 1) | (leftkey_swap[(left >> 24) & 0xf])
- | (leftkey_swap[(left >> 5) & 0xf] << 7) | (leftkey_swap[(left >> 13) & 0xf] << 6)
- | (leftkey_swap[(left >> 21) & 0xf] << 5) | (leftkey_swap[(left >> 29) & 0xf] << 4);
-
- left &= 0x0fffffff;
-
- right = (rightkey_swap[(right >> 1) & 0xf] << 3) | (rightkey_swap[(right >> 9) & 0xf] << 2)
- | (rightkey_swap[(right >> 17) & 0xf] << 1) | (rightkey_swap[(right >> 25) & 0xf])
- | (rightkey_swap[(right >> 4) & 0xf] << 7) | (rightkey_swap[(right >> 12) & 0xf] << 6)
- | (rightkey_swap[(right >> 20) & 0xf] << 5) | (rightkey_swap[(right >> 28) & 0xf] << 4);
-
- right &= 0x0fffffff;
-
- for (round = 0; round < 16; ++round)
- {
- left = ((left << encrypt_rotate_tab[round]) | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
- right = ((right << encrypt_rotate_tab[round]) | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
-
- *subkey++ = ((left << 4) & 0x24000000)
- | ((left << 28) & 0x10000000)
- | ((left << 14) & 0x08000000)
- | ((left << 18) & 0x02080000)
- | ((left << 6) & 0x01000000)
- | ((left << 9) & 0x00200000)
- | ((left >> 1) & 0x00100000)
- | ((left << 10) & 0x00040000)
- | ((left << 2) & 0x00020000)
- | ((left >> 10) & 0x00010000)
- | ((right >> 13) & 0x00002000)
- | ((right >> 4) & 0x00001000)
- | ((right << 6) & 0x00000800)
- | ((right >> 1) & 0x00000400)
- | ((right >> 14) & 0x00000200)
- | (right & 0x00000100)
- | ((right >> 5) & 0x00000020)
- | ((right >> 10) & 0x00000010)
- | ((right >> 3) & 0x00000008)
- | ((right >> 18) & 0x00000004)
- | ((right >> 26) & 0x00000002)
- | ((right >> 24) & 0x00000001);
-
- *subkey++ = ((left << 15) & 0x20000000)
- | ((left << 17) & 0x10000000)
- | ((left << 10) & 0x08000000)
- | ((left << 22) & 0x04000000)
- | ((left >> 2) & 0x02000000)
- | ((left << 1) & 0x01000000)
- | ((left << 16) & 0x00200000)
- | ((left << 11) & 0x00100000)
- | ((left << 3) & 0x00080000)
- | ((left >> 6) & 0x00040000)
- | ((left << 15) & 0x00020000)
- | ((left >> 4) & 0x00010000)
- | ((right >> 2) & 0x00002000)
- | ((right << 8) & 0x00001000)
- | ((right >> 14) & 0x00000808)
- | ((right >> 9) & 0x00000400)
- | ((right) & 0x00000200)
- | ((right << 7) & 0x00000100)
- | ((right >> 7) & 0x00000020)
- | ((right >> 3) & 0x00000011)
- | ((right << 2) & 0x00000004)
- | ((right >> 21) & 0x00000002);
- }
-}
-
-
-
-/*
- * Fill a DES context with subkeys calculated from a 64bit key.
- * Does not check parity bits, but simply ignore them.
- * Does not check for weak keys.
- */
-static int
-des_setkey (struct _des_ctx *ctx, const byte * key)
-{
- int i;
-
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- des_key_schedule (key, ctx->encrypt_subkeys);
-
- for(i=0; i<32; i+=2)
- {
- ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i];
- ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i];
- }
-
- return 0;
-}
-
-
-
-/*
- * Electronic Codebook Mode DES encryption/decryption of data according
- * to 'mode'.
- */
-static int
-des_ecb_crypt (struct _des_ctx *ctx, const byte * from, byte * to, int mode)
-{
- u32 left, right, work;
- u32 *keys;
-
- keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys;
-
- READ_64BIT_DATA (from, left, right)
- INITIAL_PERMUTATION (left, work, right)
-
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-
- FINAL_PERMUTATION (right, work, left)
- WRITE_64BIT_DATA (to, right, left)
-
- return 0;
-}
-
-
-
-/*
- * Fill a Triple-DES context with subkeys calculated from two 64bit keys.
- * Does not check the parity bits of the keys, but simply ignore them.
- * Does not check for weak keys.
- */
-static int
-tripledes_set2keys (struct _tripledes_ctx *ctx,
- const byte * key1,
- const byte * key2)
-{
- int i;
-
- des_key_schedule (key1, ctx->encrypt_subkeys);
- des_key_schedule (key2, &(ctx->decrypt_subkeys[32]));
-
- for(i=0; i<32; i+=2)
- {
- ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i];
- ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i];
-
- ctx->encrypt_subkeys[i+32] = ctx->decrypt_subkeys[62-i];
- ctx->encrypt_subkeys[i+33] = ctx->decrypt_subkeys[63-i];
-
- ctx->encrypt_subkeys[i+64] = ctx->encrypt_subkeys[i];
- ctx->encrypt_subkeys[i+65] = ctx->encrypt_subkeys[i+1];
-
- ctx->decrypt_subkeys[i+64] = ctx->decrypt_subkeys[i];
- ctx->decrypt_subkeys[i+65] = ctx->decrypt_subkeys[i+1];
- }
-
- return 0;
-}
-
-
-
-/*
- * Fill a Triple-DES context with subkeys calculated from three 64bit keys.
- * Does not check the parity bits of the keys, but simply ignore them.
- * Does not check for weak keys.
- */
-static int
-tripledes_set3keys (struct _tripledes_ctx *ctx,
- const byte * key1,
- const byte * key2,
- const byte * key3)
-{
- int i;
-
- des_key_schedule (key1, ctx->encrypt_subkeys);
- des_key_schedule (key2, &(ctx->decrypt_subkeys[32]));
- des_key_schedule (key3, &(ctx->encrypt_subkeys[64]));
-
- for(i=0; i<32; i+=2)
- {
- ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[94-i];
- ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[95-i];
-
- ctx->encrypt_subkeys[i+32] = ctx->decrypt_subkeys[62-i];
- ctx->encrypt_subkeys[i+33] = ctx->decrypt_subkeys[63-i];
-
- ctx->decrypt_subkeys[i+64] = ctx->encrypt_subkeys[30-i];
- ctx->decrypt_subkeys[i+65] = ctx->encrypt_subkeys[31-i];
- }
-
- return 0;
-}
-
-
-
-/*
- * Electronic Codebook Mode Triple-DES encryption/decryption of data according to 'mode'.
- * Sometimes this mode is named 'EDE' mode (Encryption-Decryption-Encryption).
- */
-static int
-tripledes_ecb_crypt (struct _tripledes_ctx *ctx, const byte * from, byte * to, int mode)
-{
- u32 left, right, work;
- u32 *keys;
-
- keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys;
-
- READ_64BIT_DATA (from, left, right)
- INITIAL_PERMUTATION (left, work, right)
-
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
-
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-
- FINAL_PERMUTATION (right, work, left)
- WRITE_64BIT_DATA (to, right, left)
-
- return 0;
-}
-
-
-
-
-
-/*
- * Check whether the 8 byte key is weak.
- * Dose not check the parity bits of the key but simple ignore them.
- */
-static int
-is_weak_key ( const byte *key )
-{
- byte work[8];
- int i, left, right, middle, cmp_result;
-
- /* clear parity bits */
- for(i=0; i<8; ++i)
- work[i] = key[i] & 0xfe;
-
- /* binary search in the weak key table */
- left = 0;
- right = 63;
- while(left <= right)
- {
- middle = (left + right) / 2;
-
- if ( !(cmp_result=working_memcmp(work, weak_keys[middle], 8)) )
- return -1;
-
- if ( cmp_result > 0 )
- left = middle + 1;
- else
- right = middle - 1;
- }
-
- return 0;
-}
-
-
-
-/*
- * Performs a selftest of this DES/Triple-DES implementation.
- * Returns an string with the error text on failure.
- * Returns NULL if all is ok.
- */
-static const char *
-selftest (void)
-{
- /*
- * Check if 'u32' is really 32 bits wide. This DES / 3DES implementation
- * need this.
- */
- if (sizeof (u32) != 4)
- return "Wrong word size for DES configured.";
-
- /*
- * DES Maintenance Test
- */
- {
- int i;
- byte key[8] =
- {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55};
- byte input[8] =
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- byte result[8] =
- {0x24, 0x6e, 0x9d, 0xb9, 0xc5, 0x50, 0x38, 0x1a};
- byte temp1[8], temp2[8], temp3[8];
- des_ctx des;
-
- for (i = 0; i < 64; ++i)
- {
- des_setkey (des, key);
- des_ecb_encrypt (des, input, temp1);
- des_ecb_encrypt (des, temp1, temp2);
- des_setkey (des, temp2);
- des_ecb_decrypt (des, temp1, temp3);
- memcpy (key, temp3, 8);
- memcpy (input, temp1, 8);
- }
- if (memcmp (temp3, result, 8))
- return "DES maintenance test failed.";
- }
-
-
- /*
- * Triple-DES test (Do somebody known on official test?)
- *
- * FIXME: This test doesn't use tripledes_set3keys() !
- */
- {
- int i;
- byte input[8] =
- {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10};
- byte key1[8] =
- {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0};
- byte key2[8] =
- {0x11, 0x22, 0x33, 0x44, 0xff, 0xaa, 0xcc, 0xdd};
- byte result[8] =
- {0x7b, 0x38, 0x3b, 0x23, 0xa2, 0x7d, 0x26, 0xd3};
-
- tripledes_ctx des3;
-
- for (i = 0; i < 16; ++i)
- {
- tripledes_set2keys (des3, key1, key2);
- tripledes_ecb_encrypt (des3, input, key1);
- tripledes_ecb_decrypt (des3, input, key2);
- tripledes_set3keys (des3, key1, input, key2);
- tripledes_ecb_encrypt (des3, input, input);
- }
- if (memcmp (input, result, 8))
- return "TRIPLE-DES test failed.";
- }
-
-
- /*
- * Check the weak key detection. We simply assume the table with
- * weak keys is ok and check every key in the table if it is
- * detected... (This test is a little bit stupid)
- */
- {
- int i;
-
- for (i = 0; i < 64; ++i)
- if (!is_weak_key(weak_keys[i]))
- return "DES weak key detection failed";
- }
-
- return 0;
-}
-
-
-static int
-do_tripledes_setkey ( struct _tripledes_ctx *ctx, byte *key, unsigned keylen )
-{
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
- if( keylen != 24 )
- return G10ERR_WRONG_KEYLEN;
-
- tripledes_set3keys ( ctx, key, key+8, key+16);
-
- if( is_weak_key( key ) || is_weak_key( key+8 ) || is_weak_key( key+16 ) )
- return G10ERR_WEAK_KEY;
-
- return 0;
-}
-
-
-static void
-do_tripledes_encrypt( struct _tripledes_ctx *ctx, byte *outbuf, byte *inbuf )
-{
- tripledes_ecb_encrypt ( ctx, inbuf, outbuf );
-}
-
-static void
-do_tripledes_decrypt( struct _tripledes_ctx *ctx, byte *outbuf, byte *inbuf )
-{
- tripledes_ecb_decrypt ( ctx, inbuf, outbuf );
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-des_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey)( void *c, byte *key, unsigned keylen ),
- void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
- void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
- )
-{
- static int did_selftest = 0;
-
- if( !did_selftest ) {
- const char *s = selftest();
- did_selftest = 1;
- if( s ) {
- fprintf(stderr,"%s\n", s );
- selftest_failed = s;
- return NULL;
- }
- }
-
-
- if( algo == CIPHER_ALGO_3DES ) {
- *keylen = 192;
- *blocksize = 8;
- *contextsize = sizeof(struct _tripledes_ctx);
- *r_setkey = FNCCAST_SETKEY(do_tripledes_setkey);
- *r_encrypt= FNCCAST_CRYPT(do_tripledes_encrypt);
- *r_decrypt= FNCCAST_CRYPT(do_tripledes_decrypt);
- return "3DES";
- }
- return NULL;
-}
-
diff --git a/cipher/des.h b/cipher/des.h
deleted file mode 100644
index f6856068..00000000
--- a/cipher/des.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* des.h
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_DES_H
-#define G10_DES_H
-
-#include "types.h"
-
-
-const char *
-des_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-#endif /*G10_DES_H*/
diff --git a/cipher/dsa.c b/cipher/dsa.c
deleted file mode 100644
index c8fcd66e..00000000
--- a/cipher/dsa.c
+++ /dev/null
@@ -1,428 +0,0 @@
-/* dsa.c - DSA signature scheme
- * 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 <string.h>
-#include <assert.h>
-#include "util.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "dsa.h"
-
-typedef struct {
- MPI p; /* prime */
- MPI q; /* group order */
- MPI g; /* group generator */
- MPI y; /* g^x mod p */
-} DSA_public_key;
-
-
-typedef struct {
- MPI p; /* prime */
- MPI q; /* group order */
- MPI g; /* group generator */
- MPI y; /* g^x mod p */
- MPI x; /* secret exponent */
-} DSA_secret_key;
-
-
-static MPI gen_k( MPI q );
-static void test_keys( DSA_secret_key *sk, unsigned qbits );
-static int check_secret_key( DSA_secret_key *sk );
-static void generate( DSA_secret_key *sk, unsigned nbits, MPI **ret_factors );
-static void sign(MPI r, MPI s, MPI input, DSA_secret_key *skey);
-static int verify(MPI r, MPI s, MPI input, DSA_public_key *pkey);
-
-/****************
- * Generate a random secret exponent k less than q
- */
-static MPI
-gen_k( MPI q )
-{
- MPI k = mpi_alloc_secure( mpi_get_nlimbs(q) );
- unsigned nbits = mpi_get_nbits(q);
-
- if( DBG_CIPHER )
- log_debug("choosing a random k ");
- for(;;) {
- if( DBG_CIPHER )
- fputc('.', stderr);
- { char *p = get_random_bits( nbits, 1, 1 );
- mpi_set_buffer( k, p, (nbits+7)/8, 0 );
- m_free(p);
- /* make sure that the number is of the exact lenght */
- if( mpi_test_bit( k, nbits-1 ) )
- mpi_set_highbit( k, nbits-1 );
- else {
- mpi_set_highbit( k, nbits-1 );
- mpi_clear_bit( k, nbits-1 );
- }
- }
- if( !(mpi_cmp( k, q ) < 0) ) /* check: k < q */
- continue; /* no */
- if( !(mpi_cmp_ui( k, 0 ) > 0) ) /* check: k > 0 */
- continue; /* no */
- break; /* okay */
- }
- if( DBG_CIPHER )
- fputc('\n', stderr);
-
- return k;
-}
-
-
-static void
-test_keys( DSA_secret_key *sk, unsigned qbits )
-{
- DSA_public_key pk;
- MPI test = mpi_alloc( qbits / BITS_PER_MPI_LIMB );
- MPI out1_a = mpi_alloc( qbits / BITS_PER_MPI_LIMB );
- MPI out1_b = mpi_alloc( qbits / BITS_PER_MPI_LIMB );
-
- pk.p = sk->p;
- pk.q = sk->q;
- pk.g = sk->g;
- pk.y = sk->y;
- /*mpi_set_bytes( test, qbits, get_random_byte, 0 );*/
- { char *p = get_random_bits( qbits, 0, 0 );
- mpi_set_buffer( test, p, (qbits+7)/8, 0 );
- m_free(p);
- }
-
- sign( out1_a, out1_b, test, sk );
- if( !verify( out1_a, out1_b, test, &pk ) )
- log_fatal("DSA:: sign, verify failed\n");
-
- mpi_free( test );
- mpi_free( out1_a );
- mpi_free( out1_b );
-}
-
-
-
-/****************
- * Generate a DSA key pair with a key of size NBITS
- * Returns: 2 structures filled with all needed values
- * and an array with the n-1 factors of (p-1)
- */
-static void
-generate( DSA_secret_key *sk, unsigned nbits, MPI **ret_factors )
-{
- MPI p; /* the prime */
- MPI q; /* the 160 bit prime factor */
- MPI g; /* the generator */
- MPI y; /* g^x mod p */
- MPI x; /* the secret exponent */
- MPI h, e; /* helper */
- unsigned qbits;
- byte *rndbuf;
-
- assert( nbits >= 512 && nbits <= 1024 );
-
- qbits = 160;
- p = generate_elg_prime( 1, nbits, qbits, NULL, ret_factors );
- /* get q out of factors */
- q = mpi_copy((*ret_factors)[0]);
- if( mpi_get_nbits(q) != qbits )
- BUG();
-
- /* find a generator g (h and e are helpers)*/
- /* e = (p-1)/q */
- e = mpi_alloc( mpi_get_nlimbs(p) );
- mpi_sub_ui( e, p, 1 );
- mpi_fdiv_q( e, e, q );
- g = mpi_alloc( mpi_get_nlimbs(p) );
- h = mpi_alloc_set_ui( 1 ); /* we start with 2 */
- do {
- mpi_add_ui( h, h, 1 );
- /* g = h^e mod p */
- mpi_powm( g, h, e, p );
- } while( !mpi_cmp_ui( g, 1 ) ); /* continue until g != 1 */
-
- /* select a random number which has these properties:
- * 0 < x < q-1
- * This must be a very good random number because this
- * is the secret part. */
- if( DBG_CIPHER )
- log_debug("choosing a random x ");
- assert( qbits >= 160 );
- x = mpi_alloc_secure( mpi_get_nlimbs(q) );
- mpi_sub_ui( h, q, 1 ); /* put q-1 into h */
- rndbuf = NULL;
- do {
- if( DBG_CIPHER )
- fputc('.', stderr);
- if( !rndbuf )
- rndbuf = get_random_bits( qbits, 2, 1 );
- else { /* change only some of the higher bits (= 2 bytes)*/
- char *r = get_random_bits( 16, 2, 1 );
- memcpy(rndbuf, r, 16/8 );
- m_free(r);
- }
- mpi_set_buffer( x, rndbuf, (qbits+7)/8, 0 );
- mpi_clear_highbit( x, qbits+1 );
- } while( !( mpi_cmp_ui( x, 0 )>0 && mpi_cmp( x, h )<0 ) );
- m_free(rndbuf);
- mpi_free( e );
- mpi_free( h );
-
- /* y = g^x mod p */
- y = mpi_alloc( mpi_get_nlimbs(p) );
- mpi_powm( y, g, x, p );
-
- if( DBG_CIPHER ) {
- fputc('\n', stderr);
- log_mpidump("dsa p= ", p );
- log_mpidump("dsa q= ", q );
- log_mpidump("dsa g= ", g );
- log_mpidump("dsa y= ", y );
- log_mpidump("dsa x= ", x );
- }
-
- /* copy the stuff to the key structures */
- sk->p = p;
- sk->q = q;
- sk->g = g;
- sk->y = y;
- sk->x = x;
-
- /* now we can test our keys (this should never fail!) */
- test_keys( sk, qbits );
-}
-
-
-
-/****************
- * Test whether the secret key is valid.
- * Returns: if this is a valid key.
- */
-static int
-check_secret_key( DSA_secret_key *sk )
-{
- int rc;
- MPI y = mpi_alloc( mpi_get_nlimbs(sk->y) );
-
- mpi_powm( y, sk->g, sk->x, sk->p );
- rc = !mpi_cmp( y, sk->y );
- mpi_free( y );
- return rc;
-}
-
-
-
-/****************
- * Make a DSA signature from HASH and put it into r and s.
- */
-
-static void
-sign(MPI r, MPI s, MPI hash, DSA_secret_key *skey )
-{
- MPI k;
- MPI kinv;
- MPI tmp;
-
- /* select a random k with 0 < k < q */
- k = gen_k( skey->q );
-
- /* r = (a^k mod p) mod q */
- mpi_powm( r, skey->g, k, skey->p );
- mpi_fdiv_r( r, r, skey->q );
-
- /* kinv = k^(-1) mod q */
- kinv = mpi_alloc( mpi_get_nlimbs(k) );
- mpi_invm(kinv, k, skey->q );
-
- /* s = (kinv * ( hash + x * r)) mod q */
- tmp = mpi_alloc( mpi_get_nlimbs(skey->p) );
- mpi_mul( tmp, skey->x, r );
- mpi_add( tmp, tmp, hash );
- mpi_mulm( s , kinv, tmp, skey->q );
-
- mpi_free(k);
- mpi_free(kinv);
- mpi_free(tmp);
-}
-
-
-/****************
- * Returns true if the signature composed from R and S is valid.
- */
-static int
-verify(MPI r, MPI s, MPI hash, DSA_public_key *pkey )
-{
- int rc;
- MPI w, u1, u2, v;
- MPI base[3];
- MPI exp[3];
-
- if( !(mpi_cmp_ui( r, 0 ) > 0 && mpi_cmp( r, pkey->q ) < 0) )
- return 0; /* assertion 0 < r < q failed */
- if( !(mpi_cmp_ui( s, 0 ) > 0 && mpi_cmp( s, pkey->q ) < 0) )
- return 0; /* assertion 0 < s < q failed */
-
- w = mpi_alloc( mpi_get_nlimbs(pkey->q) );
- u1 = mpi_alloc( mpi_get_nlimbs(pkey->q) );
- u2 = mpi_alloc( mpi_get_nlimbs(pkey->q) );
- v = mpi_alloc( mpi_get_nlimbs(pkey->p) );
-
- /* w = s^(-1) mod q */
- mpi_invm( w, s, pkey->q );
-
- /* u1 = (hash * w) mod q */
- mpi_mulm( u1, hash, w, pkey->q );
-
- /* u2 = r * w mod q */
- mpi_mulm( u2, r, w, pkey->q );
-
-
- /* v = g^u1 * y^u2 mod p mod q */
- base[0] = pkey->g; exp[0] = u1;
- base[1] = pkey->y; exp[1] = u2;
- base[2] = NULL; exp[2] = NULL;
- mpi_mulpowm( v, base, exp, pkey->p );
- mpi_fdiv_r( v, v, pkey->q );
-
- rc = !mpi_cmp( v, r );
-
- mpi_free(w);
- mpi_free(u1);
- mpi_free(u2);
- mpi_free(v);
- return rc;
-}
-
-
-/*********************************************
- ************** interface ******************
- *********************************************/
-
-int
-dsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{
- DSA_secret_key sk;
-
- if( algo != PUBKEY_ALGO_DSA )
- return G10ERR_PUBKEY_ALGO;
-
- generate( &sk, nbits, retfactors );
- skey[0] = sk.p;
- skey[1] = sk.q;
- skey[2] = sk.g;
- skey[3] = sk.y;
- skey[4] = sk.x;
- return 0;
-}
-
-
-int
-dsa_check_secret_key( int algo, MPI *skey )
-{
- DSA_secret_key sk;
-
- if( algo != PUBKEY_ALGO_DSA )
- return G10ERR_PUBKEY_ALGO;
-
- sk.p = skey[0];
- sk.q = skey[1];
- sk.g = skey[2];
- sk.y = skey[3];
- sk.x = skey[4];
- if( !check_secret_key( &sk ) )
- return G10ERR_BAD_SECKEY;
-
- return 0;
-}
-
-
-
-int
-dsa_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{
- DSA_secret_key sk;
-
- if( algo != PUBKEY_ALGO_DSA )
- return G10ERR_PUBKEY_ALGO;
-
- sk.p = skey[0];
- sk.q = skey[1];
- sk.g = skey[2];
- sk.y = skey[3];
- sk.x = skey[4];
- resarr[0] = mpi_alloc( mpi_get_nlimbs( sk.p ) );
- resarr[1] = mpi_alloc( mpi_get_nlimbs( sk.p ) );
- sign( resarr[0], resarr[1], data, &sk );
- return 0;
-}
-
-int
-dsa_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev )
-{
- DSA_public_key pk;
-
- if( algo != PUBKEY_ALGO_DSA )
- return G10ERR_PUBKEY_ALGO;
-
- pk.p = pkey[0];
- pk.q = pkey[1];
- pk.g = pkey[2];
- pk.y = pkey[3];
- if( !verify( data[0], data[1], hash, &pk ) )
- return G10ERR_BAD_SIGN;
- return 0;
-}
-
-
-
-unsigned
-dsa_get_nbits( int algo, MPI *pkey )
-{
- if( algo != PUBKEY_ALGO_DSA )
- return 0;
- return mpi_get_nbits( pkey[0] );
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- * Usage: Bit 0 set : allows signing
- * 1 set : allows encryption
- */
-const char *
-dsa_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig,
- int *use )
-{
- *npkey = 4;
- *nskey = 5;
- *nenc = 0;
- *nsig = 2;
-
- switch( algo ) {
- case PUBKEY_ALGO_DSA: *use = PUBKEY_USAGE_SIG; return "DSA";
- default: *use = 0; return NULL;
- }
-}
-
-
diff --git a/cipher/dsa.h b/cipher/dsa.h
deleted file mode 100644
index 1456d65b..00000000
--- a/cipher/dsa.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* dsa.h - DSA signature scheme
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_DSA_H
-#define G10_DSA_H
-
-int dsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors );
-int dsa_check_secret_key( int algo, MPI *skey );
-int dsa_sign( int algo, MPI *resarr, MPI data, MPI *skey );
-int dsa_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev );
-unsigned dsa_get_nbits( int algo, MPI *pkey );
-const char *dsa_get_info( int algo, int *npkey, int *nskey,
- int *nenc, int *nsig, int *use );
-
-#endif /*G10_DSA_H*/
diff --git a/cipher/dynload.c b/cipher/dynload.c
deleted file mode 100644
index 75dcb396..00000000
--- a/cipher/dynload.c
+++ /dev/null
@@ -1,559 +0,0 @@
-/* dynload.c - load cipher extensions
- * 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 <string.h>
-#include <unistd.h>
-#ifdef HAVE_DL_DLOPEN
- #include <dlfcn.h>
-#elif defined(HAVE_DLD_DLD_LINK)
- #include <dld.h>
-#endif
-#include "util.h"
-#include "cipher.h"
-#include "dynload.h"
-
-#ifdef DLSYM_NEEDS_UNDERSCORE
- #define SYMBOL_VERSION "_gnupgext_version"
- #define SYMBOL_ENUM "_gnupgext_enum_func"
-#else
- #define SYMBOL_VERSION "gnupgext_version"
- #define SYMBOL_ENUM "gnupgext_enum_func"
-#endif
-
-
-#ifndef RTLD_NOW
- #define RTLD_NOW 1
-#endif
-
-typedef struct ext_list {
- struct ext_list *next;
- int internal;
- #ifdef HAVE_DL_DLOPEN
- void *handle; /* handle from dlopen() */
- #else
- int handle; /* if the function has been loaded, this is true */
- #endif
- int failed; /* already tried but failed */
- void * (*enumfunc)(int, int*, int*, int*);
- char *hintstr; /* pointer into name */
- char name[1];
-} *EXTLIST;
-
-static EXTLIST extensions;
-
-typedef struct {
- EXTLIST r;
- int seq1;
- int seq2;
- void *sym;
- int reqalgo;
-} ENUMCONTEXT;
-
-
-#ifdef HAVE_DLD_DLD_LINK
-static char *mainpgm_path;
-static int did_dld_init;
-static int dld_available;
-#endif
-
-
-/****************
- * Register an extension module. The last registered module will
- * be loaded first. A name may have a list of classes
- * appended; e.g:
- * mymodule.so(1:17,3:20,3:109)
- * means that this module provides digest algorithm 17 and public key
- * algorithms 20 and 109. This is only a hint but if it is there the
- * loader may decide to only load a module which claims to have a
- * requested algorithm.
- *
- * mainpgm is the path to the program which wants to load a module
- * it is only used in some environments.
- */
-void
-register_cipher_extension( const char *mainpgm, const char *fname )
-{
- EXTLIST r, el, intex;
- char *p, *pe;
-
- #ifdef HAVE_DLD_DLD_LINK
- if( !mainpgm_path && mainpgm && *mainpgm )
- mainpgm_path = m_strdup(mainpgm);
- #endif
- if( *fname != '/' ) { /* do tilde expansion etc */
- char *tmp;
-
- if( strchr(fname, '/') )
- tmp = make_filename(fname, NULL);
- else
- tmp = make_filename(GNUPG_LIBDIR, fname, NULL);
- el = m_alloc_clear( sizeof *el + strlen(tmp) );
- strcpy(el->name, tmp );
- m_free(tmp);
- }
- else {
- el = m_alloc_clear( sizeof *el + strlen(fname) );
- strcpy(el->name, fname );
- }
- /* check whether we have a class hint */
- if( (p=strchr(el->name,'(')) && (pe=strchr(p+1,')')) && !pe[1] ) {
- *p = *pe = 0;
- el->hintstr = p+1;
- }
- else
- el->hintstr = NULL;
-
- /* check that it is not already registered */
- intex = NULL;
- for(r = extensions; r; r = r->next ) {
- if( !compare_filenames(r->name, el->name) ) {
- log_info("extension `%s' already registered\n", el->name );
- m_free(el);
- return;
- }
- else if( r->internal )
- intex = r;
- }
- /* and register */
- /* we put them after the internal extension modules */
- /* this is so that the external modules do not get loaded */
- /* as soon as the internal modules are requested */
- if( intex ) {
- el->next = intex->next;
- intex->next = el;
- }
- else {
- el->next = extensions;
- extensions = el;
- }
-}
-
-void
-register_internal_cipher_extension(
- const char *module_id,
- void * (*enumfunc)(int, int*, int*, int*)
- )
-{
- EXTLIST r, el;
-
- el = m_alloc_clear( sizeof *el + strlen(module_id) );
- strcpy(el->name, module_id );
- el->internal = 1;
-
- /* check that it is not already registered */
- for(r = extensions; r; r = r->next ) {
- if( !compare_filenames(r->name, el->name) ) {
- log_info("extension `%s' already registered\n", el->name );
- m_free(el);
- return;
- }
- }
- /* and register */
- el->enumfunc = enumfunc;
- el->handle = (void*)1;
- el->next = extensions;
- extensions = el;
-}
-
-
-static int
-load_extension( EXTLIST el )
-{
- #ifdef USE_DYNAMIC_LINKING
- char **name;
- #ifdef HAVE_DL_DLOPEN
- const char *err;
- int seq = 0;
- int class, vers;
- void *sym;
- #else
- unsigned long addr;
- int rc;
- #endif
-
- /* make sure we are not setuid */
- if( getuid() != geteuid() )
- log_bug("trying to load an extension while still setuid\n");
-
- /* now that we are not setuid anymore, we can safely load modules */
- #ifdef HAVE_DL_DLOPEN
- el->handle = dlopen(el->name, RTLD_NOW);
- if( !el->handle ) {
- log_error("%s: error loading extension: %s\n", el->name, dlerror() );
- goto failure;
- }
- name = (char**)dlsym(el->handle, SYMBOL_VERSION);
- if( (err=dlerror()) ) {
- log_error("%s: not a gnupg extension: %s\n", el->name, err );
- goto failure;
- }
- #else /* have dld */
- if( !did_dld_init ) {
- did_dld_init = 1;
- if( !mainpgm_path )
- log_error("DLD is not correctly initialized\n");
- else {
- rc = dld_init( dld_find_executable(mainpgm_path) );
- if( rc )
- log_error("DLD init failed: %s\n", dld_strerror(rc) );
- else
- dld_available = 1;
- }
- }
- if( !dld_available ) {
- log_error("%s: DLD not available\n", el->name );
- goto failure;
- }
-
- rc = dld_link( el->name );
- if( rc ) {
- log_error("%s: error loading extension: %s\n",
- el->name, dld_strerror(rc) );
- goto failure;
- }
- addr = dld_get_symbol(SYMBOL_VERSION);
- if( !addr ) {
- log_error("%s: not a gnupg extension: %s\n",
- el->name, dld_strerror(dld_errno) );
- goto failure;
- }
- name = (char**)addr;
- #endif
-
- if( g10_opt_verbose > 1 )
- log_info("%s: %s%s%s%s\n", el->name, *name,
- el->hintstr? " (":"",
- el->hintstr? el->hintstr:"",
- el->hintstr? ")":"");
-
- #ifdef HAVE_DL_DLOPEN
- sym = dlsym(el->handle, SYMBOL_ENUM);
- if( (err=dlerror()) ) {
- log_error("%s: invalid gnupg extension: %s\n", el->name, err );
- goto failure;
- }
- el->enumfunc = (void *(*)(int,int*,int*,int*))sym;
- #else /* dld */
- addr = dld_get_func(SYMBOL_ENUM);
- if( !addr ) {
- log_error("%s: invalid gnupg extension: %s\n",
- el->name, dld_strerror(dld_errno) );
- goto failure;
- }
- rc = dld_function_executable_p(SYMBOL_ENUM);
- if( rc ) {
- log_error("%s: extension function is not executable: %s\n",
- el->name, dld_strerror(rc) );
- goto failure;
- }
- el->enumfunc = (void *(*)(int,int*,int*,int*))addr;
- el->handle = 1; /* mark as usable */
- #endif
-
- #ifdef HAVE_DL_DLOPEN
- if( g10_opt_verbose > 2 ) {
- /* list the contents of the module */
- while( (sym = (*el->enumfunc)(0, &seq, &class, &vers)) ) {
- if( vers != 1 ) {
- log_info("%s: ignoring func with version %d\n",el->name,vers);
- continue;
- }
- switch( class ) {
- case 11:
- case 21:
- case 31:
- log_info("%s: provides %s algorithm %d\n", el->name,
- class == 11? "md" :
- class == 21? "cipher" : "pubkey",
- *(int*)sym);
- break;
- default:
- /*log_debug("%s: skipping class %d\n", el->name, class);*/
- break;
- }
- }
- }
- #endif
- return 0;
-
- failure:
- #ifdef HAVE_DL_DLOPEN
- if( el->handle ) {
- dlclose(el->handle);
- el->handle = NULL;
- }
- #endif
- el->failed = 1;
- #endif /*USE_DYNAMIC_LINKING*/
- return -1;
-}
-
-
-
-int
-enum_gnupgext_digests( void **enum_context,
- int *algo,
- const char *(**r_get_info)( int, size_t*,byte**, int*, int*,
- void (**)(void*),
- void (**)(void*,byte*,size_t),
- void (**)(void*),byte *(**)(void*)) )
-{
- EXTLIST r;
- ENUMCONTEXT *ctx;
-
- if( !*enum_context ) { /* init context */
- ctx = m_alloc_clear( sizeof( *ctx ) );
- ctx->r = extensions;
- ctx->reqalgo = *algo;
- *enum_context = ctx;
- }
- else if( !algo ) { /* release the context */
- m_free(*enum_context);
- *enum_context = NULL;
- return 0;
- }
- else
- ctx = *enum_context;
-
- /* fixme: have a look at the hint string */
- for( r = ctx->r; r; r = r->next ) {
- int class, vers;
-
- if( r->failed )
- continue;
- if( !r->handle && load_extension(r) )
- continue;
- /* get a digest info function */
- if( ctx->sym )
- goto inner_loop;
- while( (ctx->sym = (*r->enumfunc)(10, &ctx->seq1, &class, &vers)) ) {
- void *sym;
- /* must check class because enumfunc may be wrong coded */
- if( vers != 1 || class != 10 )
- continue;
- inner_loop:
- *r_get_info = ctx->sym;
- while( (sym = (*r->enumfunc)(11, &ctx->seq2, &class, &vers)) ) {
- if( vers != 1 || class != 11 )
- continue;
- *algo = *(int*)sym;
- ctx->r = r;
- return 1;
- }
- ctx->seq2 = 0;
- }
- ctx->seq1 = 0;
- }
- ctx->r = r;
- return 0;
-}
-
-const char *
-enum_gnupgext_ciphers( void **enum_context, int *algo,
- size_t *keylen, size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- )
-{
- EXTLIST r;
- ENUMCONTEXT *ctx;
- const char * (*finfo)(int, size_t*, size_t*, size_t*,
- int (**)( void *, byte *, unsigned),
- void (**)( void *, byte *, byte *),
- void (**)( void *, byte *, byte *));
-
- if( !*enum_context ) { /* init context */
- ctx = m_alloc_clear( sizeof( *ctx ) );
- ctx->r = extensions;
- *enum_context = ctx;
- }
- else if( !algo ) { /* release the context */
- m_free(*enum_context);
- *enum_context = NULL;
- return NULL;
- }
- else
- ctx = *enum_context;
-
- for( r = ctx->r; r; r = r->next ) {
- int class, vers;
-
- if( r->failed )
- continue;
- if( !r->handle && load_extension(r) )
- continue;
- /* get a cipher info function */
- if( ctx->sym )
- goto inner_loop;
- while( (ctx->sym = (*r->enumfunc)(20, &ctx->seq1, &class, &vers)) ) {
- void *sym;
- /* must check class because enumfunc may be wrong coded */
- if( vers != 1 || class != 20 )
- continue;
- inner_loop:
- finfo = ctx->sym;
- while( (sym = (*r->enumfunc)(21, &ctx->seq2, &class, &vers)) ) {
- const char *algname;
- if( vers != 1 || class != 21 )
- continue;
- *algo = *(int*)sym;
- algname = (*finfo)( *algo, keylen, blocksize, contextsize,
- setkeyf, encryptf, decryptf );
- if( algname ) {
- ctx->r = r;
- return algname;
- }
- }
- ctx->seq2 = 0;
- }
- ctx->seq1 = 0;
- }
- ctx->r = r;
- return NULL;
-}
-
-const char *
-enum_gnupgext_pubkeys( void **enum_context, int *algo,
- int *npkey, int *nskey, int *nenc, int *nsig, int *use,
- int (**generate)( int algo, unsigned nbits, MPI *skey, MPI **retfactors ),
- int (**check_secret_key)( int algo, MPI *skey ),
- int (**encryptf)( int algo, MPI *resarr, MPI data, MPI *pkey ),
- int (**decryptf)( int algo, MPI *result, MPI *data, MPI *skey ),
- int (**sign)( int algo, MPI *resarr, MPI data, MPI *skey ),
- int (**verify)( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev ),
- unsigned (**get_nbits)( int algo, MPI *pkey ) )
-{
- EXTLIST r;
- ENUMCONTEXT *ctx;
- const char * (*finfo)( int, int *, int *, int *, int *, int *,
- int (**)( int, unsigned, MPI *, MPI **),
- int (**)( int, MPI * ),
- int (**)( int, MPI *, MPI , MPI * ),
- int (**)( int, MPI *, MPI *, MPI * ),
- int (**)( int, MPI *, MPI , MPI * ),
- int (**)( int, MPI , MPI *, MPI *,
- int (*)(void*,MPI), void *),
- unsigned (**)( int , MPI * ) );
-
- if( !*enum_context ) { /* init context */
- ctx = m_alloc_clear( sizeof( *ctx ) );
- ctx->r = extensions;
- *enum_context = ctx;
- }
- else if( !algo ) { /* release the context */
- m_free(*enum_context);
- *enum_context = NULL;
- return NULL;
- }
- else
- ctx = *enum_context;
-
- for( r = ctx->r; r; r = r->next ) {
- int class, vers;
-
- if( r->failed )
- continue;
- if( !r->handle && load_extension(r) )
- continue;
- /* get a pubkey info function */
- if( ctx->sym )
- goto inner_loop;
- while( (ctx->sym = (*r->enumfunc)(30, &ctx->seq1, &class, &vers)) ) {
- void *sym;
- if( vers != 1 || class != 30 )
- continue;
- inner_loop:
- finfo = ctx->sym;
- while( (sym = (*r->enumfunc)(31, &ctx->seq2, &class, &vers)) ) {
- const char *algname;
- if( vers != 1 || class != 31 )
- continue;
- *algo = *(int*)sym;
- algname = (*finfo)( *algo, npkey, nskey, nenc, nsig, use,
- generate, check_secret_key, encryptf,
- decryptf, sign, verify, get_nbits );
- if( algname ) {
- ctx->r = r;
- return algname;
- }
- }
- ctx->seq2 = 0;
- }
- ctx->seq1 = 0;
- }
- ctx->r = r;
- return NULL;
-}
-
-
-int (*
-dynload_getfnc_gather_random())(void (*)(const void*, size_t, int), int,
- size_t, int)
-{
- EXTLIST r;
- void *sym;
-
- for( r = extensions; r; r = r->next ) {
- int seq, class, vers;
-
- if( r->failed )
- continue;
- if( !r->handle && load_extension(r) )
- continue;
- seq = 0;
- while( (sym = (*r->enumfunc)(40, &seq, &class, &vers)) ) {
- if( vers != 1 || class != 40 )
- continue;
- return (int (*)(void (*)(const void*, size_t, int), int,
- size_t, int))sym;
- }
- }
- return NULL;
-}
-
-
-void (*
-dynload_getfnc_fast_random_poll())( void (*)(const void*, size_t, int), int)
-{
- EXTLIST r;
- void *sym;
-
- for( r = extensions; r; r = r->next ) {
- int seq, class, vers;
-
- if( r->failed )
- continue;
- if( !r->handle && load_extension(r) )
- continue;
- seq = 0;
- while( (sym = (*r->enumfunc)(41, &seq, &class, &vers)) ) {
- if( vers != 1 || class != 41 )
- continue;
- return (void (*)( void (*)(const void*, size_t, int), int))sym;
- }
- }
- return NULL;
-}
-
diff --git a/cipher/dynload.h b/cipher/dynload.h
deleted file mode 100644
index af894071..00000000
--- a/cipher/dynload.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* dynload.5
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_CIPHER_DYNLOAD_H
-#define G10_CIPHER_DYNLOAD_H
-
-#include "mpi.h"
-
-
-void register_internal_cipher_extension( const char *module_id,
- void * (*enumfunc)(int, int*, int*, int*) );
-
-int
-enum_gnupgext_digests( void **enum_context,
- int *algo,
- const char *(**r_get_info)( int, size_t*,byte**, int*, int*,
- void (**)(void*),
- void (**)(void*,byte*,size_t),
- void (**)(void*),byte *(**)(void*)) );
-
-const char *
-enum_gnupgext_ciphers( void **enum_context, int *algo,
- size_t *keylen, size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-
-const char *
-enum_gnupgext_pubkeys( void **enum_context, int *algo,
- int *npkey, int *nskey, int *nenc, int *nsig, int *use,
- int (**generate)( int algo, unsigned nbits, MPI *skey, MPI **retfactors ),
- int (**check_secret_key)( int algo, MPI *skey ),
- int (**encryptf)( int algo, MPI *resarr, MPI data, MPI *pkey ),
- int (**decryptf)( int algo, MPI *result, MPI *data, MPI *skey ),
- int (**sign)( int algo, MPI *resarr, MPI data, MPI *skey ),
- int (**verify)( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev ),
- unsigned (**get_nbits)( int algo, MPI *pkey ) );
-
-
-int (*dynload_getfnc_gather_random(void))( void (*)(const void*, size_t, int),
- int, size_t, int);
-void (*dynload_getfnc_fast_random_poll(void)
- )( void (*)(const void*, size_t, int), int );
-
-
-/** This function is in construct.c **/
-void cipher_modules_constructor(void);
-
-#endif /*G10_CIPHER_DYNLOAD_H*/
diff --git a/cipher/elgamal.c b/cipher/elgamal.c
deleted file mode 100644
index 90d5aca1..00000000
--- a/cipher/elgamal.c
+++ /dev/null
@@ -1,551 +0,0 @@
-/* elgamal.c - ElGamal Public Key encryption
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * For a description of the algorithm, see:
- * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996.
- * ISBN 0-471-11709-9. Pages 476 ff.
- *
- * 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 <string.h>
-#include "util.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "elgamal.h"
-
-typedef struct {
- MPI p; /* prime */
- MPI g; /* group generator */
- MPI y; /* g^x mod p */
-} ELG_public_key;
-
-
-typedef struct {
- MPI p; /* prime */
- MPI g; /* group generator */
- MPI y; /* g^x mod p */
- MPI x; /* secret exponent */
-} ELG_secret_key;
-
-
-static void test_keys( ELG_secret_key *sk, unsigned nbits );
-static MPI gen_k( MPI p );
-static void generate( ELG_secret_key *sk, unsigned nbits, MPI **factors );
-static int check_secret_key( ELG_secret_key *sk );
-static void encrypt(MPI a, MPI b, MPI input, ELG_public_key *pkey );
-static void decrypt(MPI output, MPI a, MPI b, ELG_secret_key *skey );
-static void sign(MPI a, MPI b, MPI input, ELG_secret_key *skey);
-static int verify(MPI a, MPI b, MPI input, ELG_public_key *pkey);
-
-
-static void
-test_keys( ELG_secret_key *sk, unsigned nbits )
-{
- ELG_public_key pk;
- MPI test = mpi_alloc( 0 );
- MPI out1_a = mpi_alloc( nbits / BITS_PER_MPI_LIMB );
- MPI out1_b = mpi_alloc( nbits / BITS_PER_MPI_LIMB );
- MPI out2 = mpi_alloc( nbits / BITS_PER_MPI_LIMB );
-
- pk.p = sk->p;
- pk.g = sk->g;
- pk.y = sk->y;
-
- /*mpi_set_bytes( test, nbits, get_random_byte, 0 );*/
- { char *p = get_random_bits( nbits, 0, 0 );
- mpi_set_buffer( test, p, (nbits+7)/8, 0 );
- m_free(p);
- }
-
- encrypt( out1_a, out1_b, test, &pk );
- decrypt( out2, out1_a, out1_b, sk );
- if( mpi_cmp( test, out2 ) )
- log_fatal("ElGamal operation: encrypt, decrypt failed\n");
-
- sign( out1_a, out1_b, test, sk );
- if( !verify( out1_a, out1_b, test, &pk ) )
- log_fatal("ElGamal operation: sign, verify failed\n");
-
- mpi_free( test );
- mpi_free( out1_a );
- mpi_free( out1_b );
- mpi_free( out2 );
-}
-
-
-/****************
- * generate a random secret exponent k from prime p, so
- * that k is relatively prime to p-1
- */
-static MPI
-gen_k( MPI p )
-{
- MPI k = mpi_alloc_secure( 0 );
- MPI temp = mpi_alloc( mpi_get_nlimbs(p) );
- MPI p_1 = mpi_copy(p);
- unsigned nbits = mpi_get_nbits(p);
-
- if( DBG_CIPHER )
- log_debug("choosing a random k ");
- mpi_sub_ui( p_1, p, 1);
- for(;;) {
- if( DBG_CIPHER )
- fputc('.', stderr);
- { char *pp = get_random_bits( nbits, 1, 1 );
- mpi_set_buffer( k, pp, (nbits+7)/8, 0 );
- m_free(pp);
- /* make sure that the number is of the exact lenght */
- if( mpi_test_bit( k, nbits-1 ) )
- mpi_set_highbit( k, nbits-1 );
- else {
- mpi_set_highbit( k, nbits-1 );
- mpi_clear_bit( k, nbits-1 );
- }
- }
- if( !(mpi_cmp( k, p_1 ) < 0) ) /* check: k < (p-1) */
- continue; /* no */
- if( !(mpi_cmp_ui( k, 0 ) > 0) ) /* check: k > 0 */
- continue; /* no */
- if( mpi_gcd( temp, k, p_1 ) )
- break; /* okay, k is relatively prime to (p-1) */
- }
- if( DBG_CIPHER )
- fputc('\n', stderr);
- mpi_free(p_1);
- mpi_free(temp);
-
- return k;
-}
-
-/****************
- * Generate a key pair with a key of size NBITS
- * Returns: 2 structures filles with all needed values
- * and an array with n-1 factors of (p-1)
- */
-static void
-generate( ELG_secret_key *sk, unsigned nbits, MPI **ret_factors )
-{
- MPI p; /* the prime */
- MPI p_min1;
- MPI g;
- MPI x; /* the secret exponent */
- MPI y;
- MPI temp;
- unsigned qbits;
- byte *rndbuf;
-
- p_min1 = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- temp = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- if( nbits < 512 )
- qbits = 120;
- else if( nbits <= 1024 )
- qbits = 160;
- else if( nbits <= 2048 )
- qbits = 200;
- else
- qbits = 240;
- g = mpi_alloc(1);
- p = generate_elg_prime( 0, nbits, qbits, g, ret_factors );
- mpi_sub_ui(p_min1, p, 1);
-
-
- /* select a random number which has these properties:
- * 0 < x < p-1
- * This must be a very good random number because this is the
- * secret part. The prime is public and may be shared anyway,
- * so a random generator level of 1 is used for the prime.
- */
- x = mpi_alloc_secure( nbits/BITS_PER_MPI_LIMB );
- if( DBG_CIPHER )
- log_debug("choosing a random x ");
- rndbuf = NULL;
- do {
- if( DBG_CIPHER )
- fputc('.', stderr);
- if( rndbuf ) { /* change only some of the higher bits */
- if( nbits < 16 ) {/* should never happen ... */
- m_free(rndbuf);
- rndbuf = get_random_bits( nbits, 2, 1 );
- }
- else {
- char *r = get_random_bits( 16, 2, 1 );
- memcpy(rndbuf, r, 16/8 );
- m_free(r);
- }
- }
- else
- rndbuf = get_random_bits( nbits, 2, 1 );
- mpi_set_buffer( x, rndbuf, (nbits+7)/8, 0 );
- mpi_clear_highbit( x, nbits+1 );
- } while( !( mpi_cmp_ui( x, 0 )>0 && mpi_cmp( x, p_min1 )<0 ) );
- m_free(rndbuf);
-
- y = mpi_alloc(nbits/BITS_PER_MPI_LIMB);
- mpi_powm( y, g, x, p );
-
- if( DBG_CIPHER ) {
- fputc('\n', stderr);
- log_mpidump("elg p= ", p );
- log_mpidump("elg g= ", g );
- log_mpidump("elg y= ", y );
- log_mpidump("elg x= ", x );
- }
-
- /* copy the stuff to the key structures */
- sk->p = p;
- sk->g = g;
- sk->y = y;
- sk->x = x;
-
- /* now we can test our keys (this should never fail!) */
- test_keys( sk, nbits - 64 );
-
- mpi_free( p_min1 );
- mpi_free( temp );
-}
-
-
-/****************
- * Test whether the secret key is valid.
- * Returns: if this is a valid key.
- */
-static int
-check_secret_key( ELG_secret_key *sk )
-{
- int rc;
- MPI y = mpi_alloc( mpi_get_nlimbs(sk->y) );
-
- mpi_powm( y, sk->g, sk->x, sk->p );
- rc = !mpi_cmp( y, sk->y );
- mpi_free( y );
- return rc;
-}
-
-
-static void
-encrypt(MPI a, MPI b, MPI input, ELG_public_key *pkey )
-{
- MPI k;
-
- k = gen_k( pkey->p );
- mpi_powm( a, pkey->g, k, pkey->p );
- /* b = (y^k * input) mod p
- * = ((y^k mod p) * (input mod p)) mod p
- * and because input is < p (FIXME: check this!)
- * = ((y^k mod p) * input) mod p
- */
- mpi_powm( b, pkey->y, k, pkey->p );
- mpi_mulm( b, b, input, pkey->p );
- #if 0
- if( DBG_CIPHER ) {
- log_mpidump("elg encrypted y= ", pkey->y);
- log_mpidump("elg encrypted p= ", pkey->p);
- log_mpidump("elg encrypted k= ", k);
- log_mpidump("elg encrypted M= ", input);
- log_mpidump("elg encrypted a= ", a);
- log_mpidump("elg encrypted b= ", b);
- }
- #endif
- mpi_free(k);
-}
-
-
-
-
-static void
-decrypt(MPI output, MPI a, MPI b, ELG_secret_key *skey )
-{
- MPI t1 = mpi_alloc_secure( mpi_get_nlimbs( skey->p ) );
-
- /* output = b/(a^x) mod p */
-
- mpi_powm( t1, a, skey->x, skey->p );
- mpi_invm( t1, t1, skey->p );
- mpi_mulm( output, b, t1, skey->p );
- #if 0
- if( DBG_CIPHER ) {
- log_mpidump("elg decrypted x= ", skey->x);
- log_mpidump("elg decrypted p= ", skey->p);
- log_mpidump("elg decrypted a= ", a);
- log_mpidump("elg decrypted b= ", b);
- log_mpidump("elg decrypted M= ", output);
- }
- #endif
- mpi_free(t1);
-}
-
-
-/****************
- * Make an Elgamal signature out of INPUT
- */
-
-static void
-sign(MPI a, MPI b, MPI input, ELG_secret_key *skey )
-{
- MPI k;
- MPI t = mpi_alloc( mpi_get_nlimbs(a) );
- MPI inv = mpi_alloc( mpi_get_nlimbs(a) );
- MPI p_1 = mpi_copy(skey->p);
-
- /*
- * b = (t * inv) mod (p-1)
- * b = (t * inv(k,(p-1),(p-1)) mod (p-1)
- * b = (((M-x*a) mod (p-1)) * inv(k,(p-1),(p-1))) mod (p-1)
- *
- */
- mpi_sub_ui(p_1, p_1, 1);
- k = gen_k( skey->p );
- mpi_powm( a, skey->g, k, skey->p );
- mpi_mul(t, skey->x, a );
- mpi_subm(t, input, t, p_1 );
- while( mpi_is_neg(t) )
- mpi_add(t, t, p_1);
- mpi_invm(inv, k, p_1 );
- mpi_mulm(b, t, inv, p_1 );
-
- #if 0
- if( DBG_CIPHER ) {
- log_mpidump("elg sign p= ", skey->p);
- log_mpidump("elg sign g= ", skey->g);
- log_mpidump("elg sign y= ", skey->y);
- log_mpidump("elg sign x= ", skey->x);
- log_mpidump("elg sign k= ", k);
- log_mpidump("elg sign M= ", input);
- log_mpidump("elg sign a= ", a);
- log_mpidump("elg sign b= ", b);
- }
- #endif
- mpi_free(k);
- mpi_free(t);
- mpi_free(inv);
- mpi_free(p_1);
-}
-
-
-/****************
- * Returns true if the signature composed of A and B is valid.
- */
-static int
-verify(MPI a, MPI b, MPI input, ELG_public_key *pkey )
-{
- int rc;
- MPI t1;
- MPI t2;
- MPI base[4];
- MPI exp[4];
-
- if( !(mpi_cmp_ui( a, 0 ) > 0 && mpi_cmp( a, pkey->p ) < 0) )
- return 0; /* assertion 0 < a < p failed */
-
- t1 = mpi_alloc( mpi_get_nlimbs(a) );
- t2 = mpi_alloc( mpi_get_nlimbs(a) );
-
- #if 0
- /* t1 = (y^a mod p) * (a^b mod p) mod p */
- mpi_powm( t1, pkey->y, a, pkey->p );
- mpi_powm( t2, a, b, pkey->p );
- mpi_mulm( t1, t1, t2, pkey->p );
-
- /* t2 = g ^ input mod p */
- mpi_powm( t2, pkey->g, input, pkey->p );
-
- rc = !mpi_cmp( t1, t2 );
- #elif 0
- /* t1 = (y^a mod p) * (a^b mod p) mod p */
- base[0] = pkey->y; exp[0] = a;
- base[1] = a; exp[1] = b;
- base[2] = NULL; exp[2] = NULL;
- mpi_mulpowm( t1, base, exp, pkey->p );
-
- /* t2 = g ^ input mod p */
- mpi_powm( t2, pkey->g, input, pkey->p );
-
- rc = !mpi_cmp( t1, t2 );
- #else
- /* t1 = g ^ - input * y ^ a * a ^ b mod p */
- mpi_invm(t2, pkey->g, pkey->p );
- base[0] = t2 ; exp[0] = input;
- base[1] = pkey->y; exp[1] = a;
- base[2] = a; exp[2] = b;
- base[3] = NULL; exp[3] = NULL;
- mpi_mulpowm( t1, base, exp, pkey->p );
- rc = !mpi_cmp_ui( t1, 1 );
-
- #endif
-
- mpi_free(t1);
- mpi_free(t2);
- return rc;
-}
-
-/*********************************************
- ************** interface ******************
- *********************************************/
-
-int
-elg_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{
- ELG_secret_key sk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- generate( &sk, nbits, retfactors );
- skey[0] = sk.p;
- skey[1] = sk.g;
- skey[2] = sk.y;
- skey[3] = sk.x;
- return 0;
-}
-
-
-int
-elg_check_secret_key( int algo, MPI *skey )
-{
- ELG_secret_key sk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- sk.p = skey[0];
- sk.g = skey[1];
- sk.y = skey[2];
- sk.x = skey[3];
- if( !check_secret_key( &sk ) )
- return G10ERR_BAD_SECKEY;
-
- return 0;
-}
-
-
-
-int
-elg_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey )
-{
- ELG_public_key pk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- pk.p = pkey[0];
- pk.g = pkey[1];
- pk.y = pkey[2];
- resarr[0] = mpi_alloc( mpi_get_nlimbs( pk.p ) );
- resarr[1] = mpi_alloc( mpi_get_nlimbs( pk.p ) );
- encrypt( resarr[0], resarr[1], data, &pk );
- return 0;
-}
-
-int
-elg_decrypt( int algo, MPI *result, MPI *data, MPI *skey )
-{
- ELG_secret_key sk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- sk.p = skey[0];
- sk.g = skey[1];
- sk.y = skey[2];
- sk.x = skey[3];
- *result = mpi_alloc_secure( mpi_get_nlimbs( sk.p ) );
- decrypt( *result, data[0], data[1], &sk );
- return 0;
-}
-
-int
-elg_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{
- ELG_secret_key sk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- sk.p = skey[0];
- sk.g = skey[1];
- sk.y = skey[2];
- sk.x = skey[3];
- resarr[0] = mpi_alloc( mpi_get_nlimbs( sk.p ) );
- resarr[1] = mpi_alloc( mpi_get_nlimbs( sk.p ) );
- sign( resarr[0], resarr[1], data, &sk );
- return 0;
-}
-
-int
-elg_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev )
-{
- ELG_public_key pk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- pk.p = pkey[0];
- pk.g = pkey[1];
- pk.y = pkey[2];
- if( !verify( data[0], data[1], hash, &pk ) )
- return G10ERR_BAD_SIGN;
- return 0;
-}
-
-
-
-unsigned
-elg_get_nbits( int algo, MPI *pkey )
-{
- if( !is_ELGAMAL(algo) )
- return 0;
- return mpi_get_nbits( pkey[0] );
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- * Usage: Bit 0 set : allows signing
- * 1 set : allows encryption
- * NOTE: This function allows signing also for ELG-E, which is not
- * okay but a bad hack to allow to work with old gpg keys. The real check
- * is done in the gnupg ocde depending on the packet version.
- */
-const char *
-elg_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig,
- int *use )
-{
- *npkey = 3;
- *nskey = 4;
- *nenc = 2;
- *nsig = 2;
-
- switch( algo ) {
- case PUBKEY_ALGO_ELGAMAL:
- *use = PUBKEY_USAGE_SIG|PUBKEY_USAGE_ENC;
- return "ELG";
- case PUBKEY_ALGO_ELGAMAL_E:
- *use = PUBKEY_USAGE_SIG|PUBKEY_USAGE_ENC;
- return "ELG-E";
- default: *use = 0; return NULL;
- }
-}
-
-
diff --git a/cipher/elgamal.h b/cipher/elgamal.h
deleted file mode 100644
index f104c2a5..00000000
--- a/cipher/elgamal.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* elgamal.h
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_ELGAMAL_H
-#define G10_ELGAMAL_H
-
-int elg_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors );
-int elg_check_secret_key( int algo, MPI *skey );
-int elg_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey );
-int elg_decrypt( int algo, MPI *result, MPI *data, MPI *skey );
-int elg_sign( int algo, MPI *resarr, MPI data, MPI *skey );
-int elg_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev );
-unsigned elg_get_nbits( int algo, MPI *pkey );
-const char *elg_get_info( int algo, int *npkey, int *nskey,
- int *nenc, int *nsig, int *use );
-
-
-#endif /*G10_ELGAMAL_H*/
diff --git a/cipher/gost.c b/cipher/gost.c
deleted file mode 100644
index 4a527722..00000000
--- a/cipher/gost.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* gost.c - GOST encryption
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * The description of GOST (and the used S-boxes) are taken from:
- * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996.
- * ISBN 0-471-11709-9. .
- *
- * 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 <string.h>
-#include "util.h"
-#include "types.h"
-#include "gost.h"
-
-#error don't use this
-
-
-void
-gost_setkey( GOST_context *c, byte *key )
-{
-}
-
-void
-gost_setiv( GOST_context *c, byte *iv )
-{
-}
-
-
-void
-gost_encode( GOST_context *c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
-}
-
-
-void
-gost_decode( GOST_context *c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
-}
-
-
-static void
-cfbshift( byte *iv, byte *buf, unsigned count)
-{
-}
-
-
-
-void
-gost_encode_cfb( GOST_context *c, byte *outbuf, byte *inbuf, unsigned nbytes)
-{
-}
-
-
-void
-gost_decode_cfb( GOST_context *c, byte *outbuf, byte *inbuf, unsigned nbytes)
-{
-}
-
diff --git a/cipher/gost.h b/cipher/gost.h
deleted file mode 100644
index d8e7ebfc..00000000
--- a/cipher/gost.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* gost.h
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_GOST_H
-#define G10_GOST_H
-
-#include "types.h"
-
-#define GOST_KEYSIZE 16
-#define GOST_BLOCKSIZE 8
-#define GOST_ROUNDS 8
-#define GOST_KEYLEN (6*GOST_ROUNDS+4)
-
-typedef struct {
- u16 ek[GOST_KEYLEN];
- u16 dk[GOST_KEYLEN];
- byte iv[GOST_BLOCKSIZE];
-} GOST_context;
-
-void gost_setkey( GOST_context *c, byte *key );
-void gost_setiv( GOST_context *c, byte *iv );
-void gost_encode( GOST_context *c, byte *out, byte *in, unsigned nblocks );
-void gost_decode( GOST_context *c, byte *out, byte *in, unsigned nblocks );
-void gost_encode_cfb( GOST_context *c, byte *outbuf,
- byte *inbuf, unsigned nbytes);
-void gost_decode_cfb( GOST_context *c, byte *outbuf,
- byte *inbuf, unsigned nbytes);
-
-
-#endif /*G10_GOST_H*/
diff --git a/cipher/md.c b/cipher/md.c
deleted file mode 100644
index 95167ff4..00000000
--- a/cipher/md.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/* md.c - message digest dispatcher
- * 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 <string.h>
-#include <errno.h>
-#include <assert.h>
-#include "util.h"
-#include "cipher.h"
-#include "errors.h"
-#include "dynload.h"
-#include "rmd.h"
-
-
-/****************
- * This structure is used for the list of available algorithms
- * and for the list of algorithms in MD_HANDLE.
- */
-struct md_digest_list_s {
- struct md_digest_list_s *next;
- const char *name;
- int algo;
- byte *asnoid;
- int asnlen;
- int mdlen;
- void (*init)( void *c );
- void (*write)( void *c, byte *buf, size_t nbytes );
- void (*final)( void *c );
- byte *(*read)( void *c );
- size_t contextsize; /* allocate this amount of context */
- char context[1];
-};
-
-static struct md_digest_list_s *digest_list;
-
-
-static struct md_digest_list_s *
-new_list_item( int algo,
- const char *(*get_info)( int, size_t*,byte**, int*, int*,
- void (**)(void*),
- void (**)(void*,byte*,size_t),
- void (**)(void*),byte *(**)(void*)) )
-{
- struct md_digest_list_s *r;
-
- r = m_alloc_clear( sizeof *r );
- r->algo = algo,
- r->name = (*get_info)( algo, &r->contextsize,
- &r->asnoid, &r->asnlen, &r->mdlen,
- &r->init, &r->write, &r->final, &r->read );
- if( !r->name ) {
- m_free(r);
- r = NULL;
- }
- return r;
-}
-
-
-
-/****************
- * Try to load the modules with the requeste algorithm
- * and return true if new modules are available
- * If req_alog is -1 try to load all digest algorithms.
- */
-static int
-load_digest_module( int req_algo )
-{
- static int initialized = 0;
- static u32 checked_algos[256/32];
- static int checked_all = 0;
- struct md_digest_list_s *r;
- void *context = NULL;
- int algo;
- int any = 0;
- const char *(*get_info)( int, size_t*,byte**, int*, int*,
- void (**)(void*),
- void (**)(void*,byte*,size_t),
- void (**)(void*),byte *(**)(void*));
-
- if( !initialized ) {
- cipher_modules_constructor();
- initialized = 1;
- }
- algo = req_algo;
- if( algo > 255 || !algo )
- return 0; /* algorithm number too high (does not fit into out bitmap)*/
- if( checked_all )
- return 0; /* already called with -1 */
- if( algo < 0 )
- checked_all = 1;
- else if( (checked_algos[algo/32] & (1 << (algo%32))) )
- return 0; /* already checked and not found */
- else
- checked_algos[algo/32] |= (1 << (algo%32));
-
- while( enum_gnupgext_digests( &context, &algo, &get_info ) ) {
- if( req_algo != -1 && algo != req_algo )
- continue;
- for(r=digest_list; r; r = r->next )
- if( r->algo == algo )
- break;
- if( r ) {
- log_info("skipping digest %d: already loaded\n", algo );
- continue;
- }
- r = new_list_item( algo, get_info );
- if( ! r ) {
- log_info("skipping digest %d: no name\n", algo );
- continue;
- }
- /* put it into the list */
- if( g10_opt_verbose > 1 )
- log_info("loaded digest %d\n", algo);
- r->next = digest_list;
- digest_list = r;
- any = 1;
- if( req_algo != -1 )
- break;
- }
- enum_gnupgext_digests( &context, NULL, NULL );
- return any;
-}
-
-
-
-/****************
- * Map a string to the digest algo
- */
-int
-string_to_digest_algo( const char *string )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next )
- if( !stricmp( r->name, string ) )
- return r->algo;
- } while( !r && load_digest_module(-1) );
- return 0;
-}
-
-
-/****************
- * Map a digest algo to a string
- */
-const char *
-digest_algo_to_string( int algo )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next )
- if( r->algo == algo )
- return r->name;
- } while( !r && load_digest_module( algo ) );
- return NULL;
-}
-
-
-int
-check_digest_algo( int algo )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next )
- if( r->algo == algo )
- return 0;
- } while( !r && load_digest_module(algo) );
- return G10ERR_DIGEST_ALGO;
-}
-
-
-
-/****************
- * Open a message digest handle for use with algorithm ALGO.
- * More algorithms may be added by md_enable(). The initial algorithm
- * may be 0.
- */
-MD_HANDLE
-md_open( int algo, int secure )
-{
- MD_HANDLE hd;
- int bufsize;
-
- if( secure ) {
- bufsize = 512 - sizeof( *hd );
- hd = m_alloc_secure_clear( sizeof *hd + bufsize );
- }
- else {
- bufsize = 1024 - sizeof( *hd );
- hd = m_alloc_clear( sizeof *hd + bufsize );
- }
-
- hd->bufsize = bufsize+1; /* hd has already one byte allocated */
- hd->secure = secure;
- if( algo )
- md_enable( hd, algo );
- fast_random_poll();
- return hd;
-}
-
-void
-md_enable( MD_HANDLE h, int algo )
-{
- struct md_digest_list_s *r, *ac;
-
- for( ac=h->list; ac; ac = ac->next )
- if( ac->algo == algo )
- return ; /* already enabled */
- /* find the algorithm */
- do {
- for(r = digest_list; r; r = r->next )
- if( r->algo == algo )
- break;
- } while( !r && load_digest_module( algo ) );
- if( !r ) {
- log_error("md_enable: algorithm %d not available\n", algo );
- return;
- }
- /* and allocate a new list entry */
- ac = h->secure? m_alloc_secure( sizeof *ac + r->contextsize )
- : m_alloc( sizeof *ac + r->contextsize );
- *ac = *r;
- ac->next = h->list;
- h->list = ac;
- /* and init this instance */
- (*ac->init)( &ac->context );
-}
-
-
-MD_HANDLE
-md_copy( MD_HANDLE a )
-{
- MD_HANDLE b;
- struct md_digest_list_s *ar, *br;
-
- if( a->bufcount )
- md_write( a, NULL, 0 );
- b = a->secure ? m_alloc_secure( sizeof *b + a->bufsize - 1 )
- : m_alloc( sizeof *b + a->bufsize - 1 );
- memcpy( b, a, sizeof *a + a->bufsize - 1 );
- b->list = NULL;
- b->debug = NULL;
- /* and now copy the complete list of algorithms */
- /* I know that the copied list is reversed, but that doesn't matter */
- for( ar=a->list; ar; ar = ar->next ) {
- br = a->secure ? m_alloc_secure( sizeof *br + ar->contextsize )
- : m_alloc( sizeof *br + ar->contextsize );
- memcpy( br, ar, sizeof(*br) + ar->contextsize );
- br->next = b->list;
- b->list = br;
- }
-
- if( a->debug )
- md_start_debug( b, "unknown" );
- return b;
-}
-
-
-/****************
- * Reset all contexts and discard any buffered stuff. This may be used
- * instead of a md_close(); md_open().
- */
-void
-md_reset( MD_HANDLE a )
-{
- struct md_digest_list_s *r;
-
- a->bufcount = 0;
- for( r=a->list; r; r = r->next ) {
- memset( r->context, 0, r->contextsize );
- (*r->init)( &r->context );
- }
-}
-
-
-void
-md_close(MD_HANDLE a)
-{
- struct md_digest_list_s *r, *r2;
-
- if( !a )
- return;
- if( a->debug )
- md_stop_debug(a);
- for(r=a->list; r; r = r2 ) {
- r2 = r->next;
- m_free(r);
- }
- m_free(a);
-}
-
-
-void
-md_write( MD_HANDLE a, byte *inbuf, size_t inlen)
-{
- struct md_digest_list_s *r;
-
- if( a->debug ) {
- if( a->bufcount && fwrite(a->buffer, a->bufcount, 1, a->debug ) != 1 )
- BUG();
- if( inlen && fwrite(inbuf, inlen, 1, a->debug ) != 1 )
- BUG();
- }
- for(r=a->list; r; r = r->next ) {
- (*r->write)( &r->context, a->buffer, a->bufcount );
- (*r->write)( &r->context, inbuf, inlen );
- }
- a->bufcount = 0;
-}
-
-
-
-void
-md_final(MD_HANDLE a)
-{
- struct md_digest_list_s *r;
-
- if( a->bufcount )
- md_write( a, NULL, 0 );
-
- for(r=a->list; r; r = r->next ) {
- (*r->final)( &r->context );
- }
-}
-
-
-/****************
- * if ALGO is null get the digest for the used algo (which should be only one)
- */
-byte *
-md_read( MD_HANDLE a, int algo )
-{
- struct md_digest_list_s *r;
-
- if( !algo ) { /* return the first algorithm */
- if( (r=a->list) ) {
- if( r->next )
- log_debug("more than algorithm in md_read(0)\n");
- return (*r->read)( &r->context );
- }
- }
- else {
- for(r=a->list; r; r = r->next )
- if( r->algo == algo )
- return (*r->read)( &r->context );
- }
- BUG();
- return NULL;
-}
-
-
-/****************
- * This function combines md_final and md_read but keeps the context
- * intact. This function can be used to calculate intermediate
- * digests. The digest is copied into buffer and the digestlength is
- * returned. If buffer is NULL only the needed size for buffer is returned.
- * buflen gives the max size of buffer. If the buffer is too shourt to
- * hold the complete digest, the buffer is filled with as many bytes are
- * possible and this value is returned.
- */
-int
-md_digest( MD_HANDLE a, int algo, byte *buffer, int buflen )
-{
- struct md_digest_list_s *r = NULL;
- char *context;
- char *digest;
-
- if( a->bufcount )
- md_write( a, NULL, 0 );
-
- if( !algo ) { /* return digest for the first algorithm */
- if( (r=a->list) && r->next )
- log_debug("more than algorithm in md_digest(0)\n");
- }
- else {
- for(r=a->list; r; r = r->next )
- if( r->algo == algo )
- break;
- }
- if( !r )
- BUG();
-
- if( !buffer )
- return r->mdlen;
-
- /* I don't want to change the interface, so I simply work on a copy
- * the context (extra overhead - should be fixed)*/
- context = a->secure ? m_alloc_secure( r->contextsize )
- : m_alloc( r->contextsize );
- memcpy( context, r->context, r->contextsize );
- (*r->final)( context );
- digest = (*r->read)( context );
-
- if( buflen > r->mdlen )
- buflen = r->mdlen;
- memcpy( buffer, digest, buflen );
-
- m_free(context);
- return buflen;
-}
-
-
-int
-md_get_algo( MD_HANDLE a )
-{
- struct md_digest_list_s *r;
-
- if( (r=a->list) ) {
- if( r->next )
- log_error("WARNING: more than algorithm in md_get_algo()\n");
- return r->algo;
- }
- return 0;
-}
-
-/****************
- * Return the length of the digest
- */
-int
-md_digest_length( int algo )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next ) {
- if( r->algo == algo )
- return r->mdlen;
- }
- } while( !r && load_digest_module( algo ) );
- log_error("WARNING: no length for md algo %d\n", algo);
- return 0;
-}
-
-
-/* fixme: add a mode to enumerate the OIDs
- * to make g10/sig-check.c more portable */
-const byte *
-md_asn_oid( int algo, size_t *asnlen, size_t *mdlen )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next ) {
- if( r->algo == algo ) {
- if( asnlen )
- *asnlen = r->asnlen;
- if( mdlen )
- *mdlen = r->mdlen;
- return r->asnoid;
- }
- }
- } while( !r && load_digest_module( algo ) );
- log_bug("no asn for md algo %d\n", algo);
- return NULL;
-}
-
-
-void
-md_start_debug( MD_HANDLE md, const char *suffix )
-{
- static int idx=0;
- char buf[25];
-
- if( md->debug ) {
- log_debug("Oops: md debug already started\n");
- return;
- }
- idx++;
- sprintf(buf, "dbgmd-%05d.%.10s", idx, suffix );
- md->debug = fopen(buf, "w");
- if( !md->debug )
- log_debug("md debug: can't open %s\n", buf );
-}
-
-void
-md_stop_debug( MD_HANDLE md )
-{
- if( md->debug ) {
- if( md->bufcount )
- md_write( md, NULL, 0 );
- fclose(md->debug);
- md->debug = NULL;
- }
- #ifdef HAVE_U64_TYPEDEF
- { /* a kludge to pull in the __muldi3 for Solaris */
- volatile u32 a = (u32)(ulong)md;
- volatile u64 b = 42;
- volatile u64 c;
- c = a * b;
- }
- #endif
-}
-
diff --git a/cipher/md5.c b/cipher/md5.c
deleted file mode 100644
index 6a53deda..00000000
--- a/cipher/md5.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/* md5.c - MD5 Message-Digest Algorithm
- * Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc.
- *
- * according to the definition of MD5 in RFC 1321 from April 1992.
- * NOTE: This is *not* the same file as the one from glibc.
- *
- * 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 the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * This program 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.
- */
-/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */
-/* modified for GnuPG by <werner.koch@guug.de> */
-
-/* Test values:
- * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E
- * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61
- * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72
- * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "dynload.h"
-
-
-typedef struct {
- u32 A,B,C,D; /* chaining variables */
- u32 total[2];
- u32 buflen;
- char buffer[128];
-} MD5_CONTEXT;
-
-
-
-#ifdef BIG_ENDIAN_HOST
- #define SWAP(n) \
- (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
-#else
- #define SWAP(n) (n)
-#endif
-
-/* This array contains the bytes used to pad the buffer to the next
- 64-byte boundary. (RFC 1321, 3.1: Step 1) */
-static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
-
-static void
-md5_init( MD5_CONTEXT *ctx )
-{
- ctx->A = 0x67452301;
- ctx->B = 0xefcdab89;
- ctx->C = 0x98badcfe;
- ctx->D = 0x10325476;
-
- ctx->total[0] = ctx->total[1] = 0;
- ctx->buflen = 0;
-}
-
-
-
-
-/* These are the four functions used in the four steps of the MD5 algorithm
- and defined in the RFC 1321. The first function is a little bit optimized
- (as found in Colin Plumbs public domain implementation). */
-/* #define FF(b, c, d) ((b & c) | (~b & d)) */
-#define FF(b, c, d) (d ^ (b & (c ^ d)))
-#define FG(b, c, d) FF (d, b, c)
-#define FH(b, c, d) (b ^ c ^ d)
-#define FI(b, c, d) (c ^ (b | ~d))
-
-
-/****************
- * transform n*64 bytes
- */
-static void
-transform( MD5_CONTEXT *ctx, const void *buffer, size_t len )
-{
- u32 correct_words[16];
- const u32 *words = buffer;
- size_t nwords = len / sizeof(u32);
- const u32 *endp = words + nwords;
- u32 A = ctx->A;
- u32 B = ctx->B;
- u32 C = ctx->C;
- u32 D = ctx->D;
-
- /* First increment the byte count. RFC 1321 specifies the possible
- length of the file up to 2^64 bits. Here we only compute the
- number of bytes. Do a double word increment. */
- ctx->total[0] += len;
- if( ctx->total[0] < len )
- ++ctx->total[1];
-
-
- /* Process all bytes in the buffer with 64 bytes in each round of
- the loop. */
- while(words < endp) {
- u32 *cwp = correct_words;
- u32 A_save = A;
- u32 B_save = B;
- u32 C_save = C;
- u32 D_save = D;
-
- /* First round: using the given function, the context and a constant
- the next context is computed. Because the algorithm's processing
- unit is a 32-bit word, and it is determined to work on words in
- little endian byte order, we perhaps have to change the byte order
- before the computation. To reduce the work for the next steps
- we store the swapped words in the array CORRECT_WORDS. */
-
-#define OP(a, b, c, d, s, T) \
- do \
- { \
- a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \
- ++words; \
- CYCLIC (a, s); \
- a += b; \
- } \
- while (0)
-
- /* It is unfortunate that C does not provide an operator for
- cyclic rotation. Hope the C compiler is smart enough. */
-#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s)))
-
- /* Before we start, one word about the strange constants.
- They are defined in RFC 1321 as
-
- T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
- */
-
- /* Round 1. */
- OP (A, B, C, D, 7, 0xd76aa478);
- OP (D, A, B, C, 12, 0xe8c7b756);
- OP (C, D, A, B, 17, 0x242070db);
- OP (B, C, D, A, 22, 0xc1bdceee);
- OP (A, B, C, D, 7, 0xf57c0faf);
- OP (D, A, B, C, 12, 0x4787c62a);
- OP (C, D, A, B, 17, 0xa8304613);
- OP (B, C, D, A, 22, 0xfd469501);
- OP (A, B, C, D, 7, 0x698098d8);
- OP (D, A, B, C, 12, 0x8b44f7af);
- OP (C, D, A, B, 17, 0xffff5bb1);
- OP (B, C, D, A, 22, 0x895cd7be);
- OP (A, B, C, D, 7, 0x6b901122);
- OP (D, A, B, C, 12, 0xfd987193);
- OP (C, D, A, B, 17, 0xa679438e);
- OP (B, C, D, A, 22, 0x49b40821);
-
- /* For the second to fourth round we have the possibly swapped words
- in CORRECT_WORDS. Redefine the macro to take an additional first
- argument specifying the function to use. */
-#undef OP
-#define OP(f, a, b, c, d, k, s, T) \
- do \
- { \
- a += f (b, c, d) + correct_words[k] + T; \
- CYCLIC (a, s); \
- a += b; \
- } \
- while (0)
-
- /* Round 2. */
- OP (FG, A, B, C, D, 1, 5, 0xf61e2562);
- OP (FG, D, A, B, C, 6, 9, 0xc040b340);
- OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
- OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
- OP (FG, A, B, C, D, 5, 5, 0xd62f105d);
- OP (FG, D, A, B, C, 10, 9, 0x02441453);
- OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
- OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
- OP (FG, A, B, C, D, 9, 5, 0x21e1cde6);
- OP (FG, D, A, B, C, 14, 9, 0xc33707d6);
- OP (FG, C, D, A, B, 3, 14, 0xf4d50d87);
- OP (FG, B, C, D, A, 8, 20, 0x455a14ed);
- OP (FG, A, B, C, D, 13, 5, 0xa9e3e905);
- OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8);
- OP (FG, C, D, A, B, 7, 14, 0x676f02d9);
- OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
-
- /* Round 3. */
- OP (FH, A, B, C, D, 5, 4, 0xfffa3942);
- OP (FH, D, A, B, C, 8, 11, 0x8771f681);
- OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
- OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
- OP (FH, A, B, C, D, 1, 4, 0xa4beea44);
- OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9);
- OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60);
- OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
- OP (FH, A, B, C, D, 13, 4, 0x289b7ec6);
- OP (FH, D, A, B, C, 0, 11, 0xeaa127fa);
- OP (FH, C, D, A, B, 3, 16, 0xd4ef3085);
- OP (FH, B, C, D, A, 6, 23, 0x04881d05);
- OP (FH, A, B, C, D, 9, 4, 0xd9d4d039);
- OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
- OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
- OP (FH, B, C, D, A, 2, 23, 0xc4ac5665);
-
- /* Round 4. */
- OP (FI, A, B, C, D, 0, 6, 0xf4292244);
- OP (FI, D, A, B, C, 7, 10, 0x432aff97);
- OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
- OP (FI, B, C, D, A, 5, 21, 0xfc93a039);
- OP (FI, A, B, C, D, 12, 6, 0x655b59c3);
- OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92);
- OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
- OP (FI, B, C, D, A, 1, 21, 0x85845dd1);
- OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f);
- OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
- OP (FI, C, D, A, B, 6, 15, 0xa3014314);
- OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
- OP (FI, A, B, C, D, 4, 6, 0xf7537e82);
- OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
- OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
- OP (FI, B, C, D, A, 9, 21, 0xeb86d391);
- /* Add the starting values of the context. */
- A += A_save;
- B += B_save;
- C += C_save;
- D += D_save;
- }
-
- /* Put checksum in context given as argument. */
- ctx->A = A;
- ctx->B = B;
- ctx->C = C;
- ctx->D = D;
-}
-
-
-
-/* The routine updates the message-digest context to
- * account for the presence of each of the characters inBuf[0..inLen-1]
- * in the message whose digest is being computed.
- */
-static void
-md5_write( MD5_CONTEXT *ctx, const void *buffer, size_t len)
-{
- /* When we already have some bits in our internal buffer concatenate
- both inputs first. */
- if (ctx->buflen != 0)
- {
- size_t left_over = ctx->buflen;
- size_t add = 128 - left_over > len ? len : 128 - left_over;
-
- memcpy (&ctx->buffer[left_over], buffer, add);
- ctx->buflen += add;
-
- if (left_over + add > 64)
- {
- transform(ctx, ctx->buffer, (left_over + add) & ~63);
- /* The regions in the following copy operation cannot overlap. */
- memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
- (left_over + add) & 63);
- ctx->buflen = (left_over + add) & 63;
- }
-
- buffer = (const char *) buffer + add;
- len -= add;
- }
-
- /* Process available complete blocks. */
- if (len > 64)
- {
- transform( ctx, buffer, len & ~63);
- buffer = (const char *) buffer + (len & ~63);
- len &= 63;
- }
-
- /* Move remaining bytes in internal buffer. */
- if (len > 0)
- {
- memcpy (ctx->buffer, buffer, len);
- ctx->buflen = len;
- }
-}
-
-
-
-/* The routine final terminates the message-digest computation and
- * ends with the desired message digest in mdContext->digest[0...15].
- * The handle is prepared for a new MD5 cycle.
- * Returns 16 bytes representing the digest.
- */
-
-static void
-md5_final( MD5_CONTEXT *ctx )
-{
- /* Take yet unprocessed bytes into account. */
- u32 bytes = ctx->buflen;
- size_t pad;
-
- /* Now count remaining bytes. */
- ctx->total[0] += bytes;
- if( ctx->total[0] < bytes )
- ++ctx->total[1];
-
- pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
- memcpy (&ctx->buffer[bytes], fillbuf, pad);
-
- /* Put the 64-bit file length in *bits* at the end of the buffer. */
- *(u32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
- *(u32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
- (ctx->total[0] >> 29));
-
- /* Process last bytes. */
- transform( ctx, ctx->buffer, bytes + pad + 8);
-
- /* Store the result in buffer */
- ((u32 *)ctx->buffer)[0] = SWAP (ctx->A);
- ((u32 *)ctx->buffer)[1] = SWAP (ctx->B);
- ((u32 *)ctx->buffer)[2] = SWAP (ctx->C);
- ((u32 *)ctx->buffer)[3] = SWAP (ctx->D);
-}
-
-static byte *
-md5_read( MD5_CONTEXT *hd )
-{
- return hd->buffer;
-}
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-static const char *
-md5_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- )
-{
- static byte asn[18] = /* Object ID is 1.2.840.113549.2.5 */
- { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86,0x48,
- 0x86, 0xf7, 0x0d, 0x02, 0x05, 0x05, 0x00, 0x04, 0x10 };
-
- if( algo != 1 )
- return NULL;
-
- *contextsize = sizeof(MD5_CONTEXT);
- *r_asnoid = asn;
- *r_asnlen = DIM(asn);
- *r_mdlen = 16;
- *r_init = (void (*)(void *))md5_init;
- *r_write = (void (*)(void *, byte*, size_t))md5_write;
- *r_final = (void (*)(void *))md5_final;
- *r_read = (byte *(*)(void *))md5_read;
-
- return "MD5";
-}
-
-
-#ifndef IS_MODULE
-static
-#endif
-const char * const gnupgext_version = "MD5 ($Revision$)";
-
-static struct {
- int class;
- int version;
- int value;
- void (*func)(void);
-} func_table[] = {
- { 10, 1, 0, (void(*)(void))md5_get_info },
- { 11, 1, 1 },
-};
-
-
-#ifndef IS_MODULE
-static
-#endif
-void *
-gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
-{
- void *ret;
- int i = *sequence;
-
- do {
- if( i >= DIM(func_table) || i < 0 )
- return NULL;
- *class = func_table[i].class;
- *vers = func_table[i].version;
- switch( *class ) {
- case 11: case 21: case 31: ret = &func_table[i].value; break;
- default: ret = func_table[i].func; break;
- }
- i++;
- } while( what && what != *class );
-
- *sequence = i;
- return ret;
-}
-
-
-
-
-#ifndef IS_MODULE
-void
-md5_constructor(void)
-{
- register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
-}
-#endif
-
-
-
-/* end of file */
diff --git a/cipher/primegen.c b/cipher/primegen.c
deleted file mode 100644
index e9484218..00000000
--- a/cipher/primegen.c
+++ /dev/null
@@ -1,557 +0,0 @@
-/* primegen.c - prime number generator
- * 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 <string.h>
-#include <assert.h>
-#include "util.h"
-#include "mpi.h"
-#include "cipher.h"
-
-static int no_of_small_prime_numbers;
-static MPI gen_prime( unsigned nbits, int mode, int randomlevel );
-static int check_prime( MPI prime );
-static int is_prime( MPI n, int steps, int *count );
-static void m_out_of_n( char *array, int m, int n );
-
-
-/****************
- * Generate a prime number (stored in secure memory)
- */
-MPI
-generate_secret_prime( unsigned nbits )
-{
- MPI prime;
-
- prime = gen_prime( nbits, 1, 2 );
- fputc('\n', stderr);
- return prime;
-}
-
-MPI
-generate_public_prime( unsigned nbits )
-{
- MPI prime;
-
- prime = gen_prime( nbits, 0, 2 );
- fputc('\n', stderr);
- return prime;
-}
-
-
-/****************
- * We do not need to use the strongest RNG because we gain no extra
- * security from it - The prime number is public and we could also
- * offer the factors for those who are willing to check that it is
- * indeed a strong prime.
- *
- * mode 0: Standard
- * 1: Make sure that at least one factor is of size qbits.
- */
-MPI
-generate_elg_prime( int mode, unsigned pbits, unsigned qbits,
- MPI g, MPI **ret_factors )
-{
- int n; /* number of factors */
- int m; /* number of primes in pool */
- unsigned fbits; /* length of prime factors */
- MPI *factors; /* current factors */
- MPI *pool; /* pool of primes */
- MPI q; /* first prime factor (variable)*/
- MPI prime; /* prime test value */
- MPI q_factor; /* used for mode 1 */
- byte *perms = NULL;
- int i, j;
- int count1, count2;
- unsigned nprime;
- unsigned req_qbits = qbits; /* the requested q bits size */
-
- /* find number of needed prime factors */
- for(n=1; (pbits - qbits - 1) / n >= qbits; n++ )
- ;
- n--;
- if( !n || (mode==1 && n < 2) )
- log_fatal("can't gen prime with pbits=%u qbits=%u\n", pbits, qbits );
- if( mode == 1 ) {
- n--;
- fbits = (pbits - 2*req_qbits -1) / n;
- qbits = pbits - req_qbits - n*fbits;
- }
- else {
- fbits = (pbits - req_qbits -1) / n;
- qbits = pbits - n*fbits;
- }
- if( DBG_CIPHER )
- log_debug("gen prime: pbits=%u qbits=%u fbits=%u/%u n=%d\n",
- pbits, req_qbits, qbits, fbits, n );
- prime = mpi_alloc( (pbits + BITS_PER_MPI_LIMB - 1) / BITS_PER_MPI_LIMB );
- q = gen_prime( qbits, 0, 1 );
- q_factor = mode==1? gen_prime( req_qbits, 0, 1 ) : NULL;
-
- /* allocate an array to hold the factors + 2 for later usage */
- factors = m_alloc_clear( (n+2) * sizeof *factors );
-
- /* make a pool of 3n+5 primes (this is an arbitrary value) */
- m = n*3+5;
- if( mode == 1 )
- m += 5; /* need some more for DSA */
- if( m < 25 )
- m = 25;
- pool = m_alloc_clear( m * sizeof *pool );
-
- /* permutate over the pool of primes */
- count1=count2=0;
- do {
- next_try:
- if( !perms ) {
- /* allocate new primes */
- for(i=0; i < m; i++ ) {
- mpi_free(pool[i]);
- pool[i] = NULL;
- }
- /* init m_out_of_n() */
- perms = m_alloc_clear( m );
- for(i=0; i < n; i++ ) {
- perms[i] = 1;
- pool[i] = gen_prime( fbits, 0, 1 );
- factors[i] = pool[i];
- }
- }
- else {
- m_out_of_n( perms, n, m );
- for(i=j=0; i < m && j < n ; i++ )
- if( perms[i] ) {
- if( !pool[i] )
- pool[i] = gen_prime( fbits, 0, 1 );
- factors[j++] = pool[i];
- }
- if( i == n ) {
- m_free(perms); perms = NULL;
- fputc('!', stderr);
- goto next_try; /* allocate new primes */
- }
- }
-
- mpi_set( prime, q );
- mpi_mul_ui( prime, prime, 2 );
- if( mode == 1 )
- mpi_mul( prime, prime, q_factor );
- for(i=0; i < n; i++ )
- mpi_mul( prime, prime, factors[i] );
- mpi_add_ui( prime, prime, 1 );
- nprime = mpi_get_nbits(prime);
- if( nprime < pbits ) {
- if( ++count1 > 20 ) {
- count1 = 0;
- qbits++;
- fputc('>', stderr);
- q = gen_prime( qbits, 0, 1 );
- goto next_try;
- }
- }
- else
- count1 = 0;
- if( nprime > pbits ) {
- if( ++count2 > 20 ) {
- count2 = 0;
- qbits--;
- fputc('<', stderr);
- q = gen_prime( qbits, 0, 1 );
- goto next_try;
- }
- }
- else
- count2 = 0;
- } while( !(nprime == pbits && check_prime( prime )) );
-
- if( DBG_CIPHER ) {
- putc('\n', stderr);
- log_mpidump( "prime : ", prime );
- log_mpidump( "factor q: ", q );
- if( mode == 1 )
- log_mpidump( "factor q0: ", q_factor );
- for(i=0; i < n; i++ )
- log_mpidump( "factor pi: ", factors[i] );
- log_debug("bit sizes: prime=%u, q=%u", mpi_get_nbits(prime), mpi_get_nbits(q) );
- if( mode == 1 )
- fprintf(stderr, ", q0=%u", mpi_get_nbits(q_factor) );
- for(i=0; i < n; i++ )
- fprintf(stderr, ", p%d=%u", i, mpi_get_nbits(factors[i]) );
- putc('\n', stderr);
- }
-
- if( ret_factors ) { /* caller wants the factors */
- *ret_factors = m_alloc_clear( (n+2) * sizeof **ret_factors);
- if( mode == 1 ) {
- i = 0;
- (*ret_factors)[i++] = mpi_copy( q_factor );
- for(; i <= n; i++ )
- (*ret_factors)[i] = mpi_copy( factors[i] );
- }
- else {
- for(; i < n; i++ )
- (*ret_factors)[i] = mpi_copy( factors[i] );
- }
- }
-
- if( g ) { /* create a generator (start with 3)*/
- MPI tmp = mpi_alloc( mpi_get_nlimbs(prime) );
- MPI b = mpi_alloc( mpi_get_nlimbs(prime) );
- MPI pmin1 = mpi_alloc( mpi_get_nlimbs(prime) );
-
- if( mode == 1 )
- BUG(); /* not yet implemented */
- factors[n] = q;
- factors[n+1] = mpi_alloc_set_ui(2);
- mpi_sub_ui( pmin1, prime, 1 );
- mpi_set_ui(g,2);
- do {
- mpi_add_ui(g, g, 1);
- if( DBG_CIPHER ) {
- log_debug("checking g: ");
- mpi_print( stderr, g, 1 );
- }
- else
- fputc('^', stderr);
- for(i=0; i < n+2; i++ ) {
- /*fputc('~', stderr);*/
- mpi_fdiv_q(tmp, pmin1, factors[i] );
- /* (no mpi_pow(), but it is okay to use this with mod prime) */
- mpi_powm(b, g, tmp, prime );
- if( !mpi_cmp_ui(b, 1) )
- break;
- }
- if( DBG_CIPHER )
- fputc('\n', stderr);
- } while( i < n+2 );
- mpi_free(factors[n+1]);
- mpi_free(tmp);
- mpi_free(b);
- mpi_free(pmin1);
- }
- if( !DBG_CIPHER )
- putc('\n', stderr);
-
- m_free( factors ); /* (factors are shallow copies) */
- for(i=0; i < m; i++ )
- mpi_free( pool[i] );
- m_free( pool );
- m_free(perms);
- return prime;
-}
-
-
-
-static MPI
-gen_prime( unsigned nbits, int secret, int randomlevel )
-{
- unsigned nlimbs;
- MPI prime, val_2, val_3, result;
- int i;
- unsigned x, step;
- unsigned count1, count2;
- int *mods;
-
- if( 0 && DBG_CIPHER )
- log_debug("generate a prime of %u bits ", nbits );
-
- if( !no_of_small_prime_numbers ) {
- for(i=0; small_prime_numbers[i]; i++ )
- no_of_small_prime_numbers++;
- }
- mods = m_alloc( no_of_small_prime_numbers * sizeof *mods );
- /* make nbits fit into MPI implementation */
- nlimbs = (nbits + BITS_PER_MPI_LIMB - 1) / BITS_PER_MPI_LIMB;
- val_2 = mpi_alloc( nlimbs );
- mpi_set_ui(val_2, 2);
- val_3 = mpi_alloc( nlimbs );
- mpi_set_ui(val_3, 3);
- result = mpi_alloc( nlimbs );
- prime = secret? mpi_alloc_secure( nlimbs ): mpi_alloc( nlimbs );
- count1 = count2 = 0;
- /* enter (endless) loop */
- for(;;) {
- int dotcount=0;
-
- /* generate a random number */
- /*mpi_set_bytes( prime, nbits, get_random_byte, randomlevel );*/
- { char *p = get_random_bits( nbits, randomlevel, secret );
- mpi_set_buffer( prime, p, (nbits+7)/8, 0 );
- m_free(p);
- }
-
- /* set high order bit to 1, set low order bit to 1 */
- mpi_set_highbit( prime, nbits-1 );
- mpi_set_bit( prime, 0 );
-
- /* calculate all remainders */
- for(i=0; (x = small_prime_numbers[i]); i++ )
- mods[i] = mpi_fdiv_r_ui(NULL, prime, x);
-
- for(step=0; step < 20000; step += 2 ) {
- /* check against all the small primes we have in mods */
- count1++;
- for(i=0; (x = small_prime_numbers[i]); i++ ) {
- while( mods[i] + step >= x )
- mods[i] -= x;
- if( !(mods[i] + step) )
- break;
- }
- if( x )
- continue; /* found a multiple of a already known prime */
-
- mpi_add_ui( prime, prime, step );
-
- #if 0
- /* do a Fermat test */
- count2++;
- mpi_powm( result, val_2, prime, prime );
- if( mpi_cmp_ui(result, 2) )
- continue; /* stepping (fermat test failed) */
- fputc('+', stderr);
- #endif
-
- /* perform stronger tests */
- if( is_prime(prime, 5, &count2 ) ) {
- if( !mpi_test_bit( prime, nbits-1 ) ) {
- if( 0 && DBG_CIPHER ) {
- fputc('\n', stderr);
- log_debug("overflow in prime generation\n");
- break; /* step loop, cont with a new prime */
- }
- }
-
- if( 0 && DBG_CIPHER ) {
- log_debug("performed %u simple and %u stronger tests\n",
- count1, count2 );
- log_mpidump("found prime: ", prime );
- }
-
- mpi_free(val_2);
- mpi_free(val_3);
- mpi_free(result);
- m_free(mods);
- return prime;
- }
- if( ++dotcount == 10 ) {
- fputc('.', stderr);
- dotcount = 0;
- }
- }
- fputc(':', stderr); /* restart with a new random value */
- }
-}
-
-/****************
- * Returns: true if this may be a prime
- */
-static int
-check_prime( MPI prime )
-{
- int i;
- unsigned x;
- int count=0;
-
- /* check against small primes */
- for(i=0; (x = small_prime_numbers[i]); i++ ) {
- if( mpi_divisible_ui( prime, x ) )
- return 0;
- }
-
- #if 0
- result = mpi_alloc( mpi_get_nlimbs(prime) );
- val_2 = mpi_alloc_set_ui( 2 );
- mpi_powm( result, val_2, prime, prime );
- if( mpi_cmp_ui(result, 2) ) {
- mpi_free(result);
- mpi_free(val_2);
- return 0;
- }
- mpi_free(result);
- mpi_free(val_2);
- fputc('+', stderr);
- #endif
-
- /* perform stronger tests */
- if( is_prime(prime, 5, &count ) )
- return 1; /* is probably a prime */
- fputc('.', stderr);
- return 0;
-}
-
-
-/****************
- * Return true if n is probably a prime
- */
-static int
-is_prime( MPI n, int steps, int *count )
-{
- MPI x = mpi_alloc( mpi_get_nlimbs( n ) );
- MPI y = mpi_alloc( mpi_get_nlimbs( n ) );
- MPI z = mpi_alloc( mpi_get_nlimbs( n ) );
- MPI nminus1 = mpi_alloc( mpi_get_nlimbs( n ) );
- MPI a2 = mpi_alloc_set_ui( 2 );
- MPI q;
- unsigned i, j, k;
- int rc = 0;
- unsigned nbits = mpi_get_nbits( n );
-
- mpi_sub_ui( nminus1, n, 1 );
-
- /* find q and k, so that n = 1 + 2^k * q */
- q = mpi_copy( nminus1 );
- k = mpi_trailing_zeros( q );
- mpi_tdiv_q_2exp(q, q, k);
-
- for(i=0 ; i < steps; i++ ) {
- ++*count;
- if( !i ) {
- mpi_set_ui( x, 2 );
- }
- else {
- /*mpi_set_bytes( x, nbits-1, get_random_byte, 0 );*/
- { char *p = get_random_bits( nbits, 0, 0 );
- mpi_set_buffer( x, p, (nbits+7)/8, 0 );
- m_free(p);
- }
- /* make sure that the number is smaller than the prime
- * and keep the randomness of the high bit */
- if( mpi_test_bit( x, nbits-2 ) ) {
- mpi_set_highbit( x, nbits-2 ); /* clear all higher bits */
- }
- else {
- mpi_set_highbit( x, nbits-2 );
- mpi_clear_bit( x, nbits-2 );
- }
- assert( mpi_cmp( x, nminus1 ) < 0 && mpi_cmp_ui( x, 1 ) > 0 );
- }
- mpi_powm( y, x, q, n);
- if( mpi_cmp_ui(y, 1) && mpi_cmp( y, nminus1 ) ) {
- for( j=1; j < k && mpi_cmp( y, nminus1 ); j++ ) {
- mpi_powm(y, y, a2, n);
- if( !mpi_cmp_ui( y, 1 ) )
- goto leave; /* not a prime */
- }
- if( mpi_cmp( y, nminus1 ) )
- goto leave; /* not a prime */
- }
- fputc('+', stderr);
- }
- rc = 1; /* may be a prime */
-
- leave:
- mpi_free( x );
- mpi_free( y );
- mpi_free( z );
- mpi_free( nminus1 );
- mpi_free( q );
-
- return rc;
-}
-
-
-static void
-m_out_of_n( char *array, int m, int n )
-{
- int i=0, i1=0, j=0, jp=0, j1=0, k1=0, k2=0;
-
- if( !m || m >= n )
- return;
-
- if( m == 1 ) { /* special case */
- for(i=0; i < n; i++ )
- if( array[i] ) {
- array[i++] = 0;
- if( i >= n )
- i = 0;
- array[i] = 1;
- return;
- }
- BUG();
- }
-
- for(j=1; j < n; j++ ) {
- if( array[n-1] == array[n-j-1] )
- continue;
- j1 = j;
- break;
- }
-
- if( m & 1 ) { /* m is odd */
- if( array[n-1] ) {
- if( j1 & 1 ) {
- k1 = n - j1;
- k2 = k1+2;
- if( k2 > n )
- k2 = n;
- goto leave;
- }
- goto scan;
- }
- k2 = n - j1 - 1;
- if( k2 == 0 ) {
- k1 = i;
- k2 = n - j1;
- }
- else if( array[k2] && array[k2-1] )
- k1 = n;
- else
- k1 = k2 + 1;
- }
- else { /* m is even */
- if( !array[n-1] ) {
- k1 = n - j1;
- k2 = k1 + 1;
- goto leave;
- }
-
- if( !(j1 & 1) ) {
- k1 = n - j1;
- k2 = k1+2;
- if( k2 > n )
- k2 = n;
- goto leave;
- }
- scan:
- jp = n - j1 - 1;
- for(i=1; i <= jp; i++ ) {
- i1 = jp + 2 - i;
- if( array[i1-1] ) {
- if( array[i1-2] ) {
- k1 = i1 - 1;
- k2 = n - j1;
- }
- else {
- k1 = i1 - 1;
- k2 = n + 1 - j1;
- }
- goto leave;
- }
- }
- k1 = 1;
- k2 = n + 1 - m;
- }
- leave:
- array[k1-1] = !array[k1-1];
- array[k2-1] = !array[k2-1];
-}
-
diff --git a/cipher/pubkey.c b/cipher/pubkey.c
deleted file mode 100644
index dbdd8ae2..00000000
--- a/cipher/pubkey.c
+++ /dev/null
@@ -1,548 +0,0 @@
-/* pubkey.c - pubkey dispatcher
- * 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 <string.h>
-#include <errno.h>
-#include <assert.h>
-#include "util.h"
-#include "errors.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "elgamal.h"
-#include "dsa.h"
-#include "dynload.h"
-
-
-#define TABLE_SIZE 10
-
-struct pubkey_table_s {
- const char *name;
- int algo;
- int npkey;
- int nskey;
- int nenc;
- int nsig;
- int use;
- int (*generate)( int algo, unsigned nbits, MPI *skey, MPI **retfactors );
- int (*check_secret_key)( int algo, MPI *skey );
- int (*encrypt)( int algo, MPI *resarr, MPI data, MPI *pkey );
- int (*decrypt)( int algo, MPI *result, MPI *data, MPI *skey );
- int (*sign)( int algo, MPI *resarr, MPI data, MPI *skey );
- int (*verify)( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev );
- unsigned (*get_nbits)( int algo, MPI *pkey );
-};
-
-static struct pubkey_table_s pubkey_table[TABLE_SIZE];
-
-
-
-static int
-dummy_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{ log_bug("no generate() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_check_secret_key( int algo, MPI *skey )
-{ log_bug("no check_secret_key() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey )
-{ log_bug("no encrypt() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_decrypt( int algo, MPI *result, MPI *data, MPI *skey )
-{ log_bug("no decrypt() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{ log_bug("no sign() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev )
-{ log_bug("no verify() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static unsigned
-dummy_get_nbits( int algo, MPI *pkey )
-{ log_bug("no get_nbits() for %d\n", algo ); return 0; }
-
-
-/****************
- * Put the static entries into the table.
- */
-static void
-setup_pubkey_table(void)
-{
- int i;
-
- i = 0;
- pubkey_table[i].algo = PUBKEY_ALGO_ELGAMAL;
- pubkey_table[i].name = elg_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = elg_generate;
- pubkey_table[i].check_secret_key = elg_check_secret_key;
- pubkey_table[i].encrypt = elg_encrypt;
- pubkey_table[i].decrypt = elg_decrypt;
- pubkey_table[i].sign = elg_sign;
- pubkey_table[i].verify = elg_verify;
- pubkey_table[i].get_nbits = elg_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
- pubkey_table[i].algo = PUBKEY_ALGO_ELGAMAL_E;
- pubkey_table[i].name = elg_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = elg_generate;
- pubkey_table[i].check_secret_key = elg_check_secret_key;
- pubkey_table[i].encrypt = elg_encrypt;
- pubkey_table[i].decrypt = elg_decrypt;
- pubkey_table[i].sign = elg_sign;
- pubkey_table[i].verify = elg_verify;
- pubkey_table[i].get_nbits = elg_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
- pubkey_table[i].algo = PUBKEY_ALGO_DSA;
- pubkey_table[i].name = dsa_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = dsa_generate;
- pubkey_table[i].check_secret_key = dsa_check_secret_key;
- pubkey_table[i].encrypt = dummy_encrypt;
- pubkey_table[i].decrypt = dummy_decrypt;
- pubkey_table[i].sign = dsa_sign;
- pubkey_table[i].verify = dsa_verify;
- pubkey_table[i].get_nbits = dsa_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
-
- for( ; i < TABLE_SIZE; i++ )
- pubkey_table[i].name = NULL;
-}
-
-
-/****************
- * Try to load all modules and return true if new modules are available
- */
-static int
-load_pubkey_modules(void)
-{
- static int initialized = 0;
- static int done = 0;
- void *context = NULL;
- struct pubkey_table_s *ct;
- int ct_idx;
- int i;
- const char *name;
- int any = 0;
-
-
- if( !initialized ) {
- cipher_modules_constructor();
- setup_pubkey_table();
- initialized = 1;
- return 1;
- }
- if( done )
- return 0;
- done = 1;
- for(ct_idx=0, ct = pubkey_table; ct_idx < TABLE_SIZE; ct_idx++,ct++ ) {
- if( !ct->name )
- break;
- }
- if( ct_idx >= TABLE_SIZE-1 )
- BUG(); /* table already full */
- /* now load all extensions */
- while( (name = enum_gnupgext_pubkeys( &context, &ct->algo,
- &ct->npkey, &ct->nskey, &ct->nenc,
- &ct->nsig, &ct->use,
- &ct->generate,
- &ct->check_secret_key,
- &ct->encrypt,
- &ct->decrypt,
- &ct->sign,
- &ct->verify,
- &ct->get_nbits )) ) {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == ct->algo )
- break;
- if( pubkey_table[i].name ) {
- log_info("skipping pubkey %d: already loaded\n", ct->algo );
- continue;
- }
-
- if( !ct->generate ) ct->generate = dummy_generate;
- if( !ct->check_secret_key ) ct->check_secret_key =
- dummy_check_secret_key;
- if( !ct->encrypt ) ct->encrypt = dummy_encrypt;
- if( !ct->decrypt ) ct->decrypt = dummy_decrypt;
- if( !ct->sign ) ct->sign = dummy_sign;
- if( !ct->verify ) ct->verify = dummy_verify;
- if( !ct->get_nbits ) ct->get_nbits= dummy_get_nbits;
- /* put it into the table */
- if( g10_opt_verbose > 1 )
- log_info("loaded pubkey %d (%s)\n", ct->algo, name);
- ct->name = name;
- ct_idx++;
- ct++;
- any = 1;
- /* check whether there are more available table slots */
- if( ct_idx >= TABLE_SIZE-1 ) {
- log_info("pubkey table full; ignoring other extensions\n");
- break;
- }
- }
- enum_gnupgext_pubkeys( &context, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL );
- return any;
-}
-
-
-/****************
- * Map a string to the pubkey algo
- */
-int
-string_to_pubkey_algo( const char *string )
-{
- int i;
- const char *s;
-
- do {
- for(i=0; (s=pubkey_table[i].name); i++ )
- if( !stricmp( s, string ) )
- return pubkey_table[i].algo;
- } while( load_pubkey_modules() );
- return 0;
-}
-
-
-/****************
- * Map a pubkey algo to a string
- */
-const char *
-pubkey_algo_to_string( int algo )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].name;
- } while( load_pubkey_modules() );
- return NULL;
-}
-
-
-
-int
-check_pubkey_algo( int algo )
-{
- return check_pubkey_algo2( algo, 0 );
-}
-
-/****************
- * a use of 0 means: don't care
- */
-int
-check_pubkey_algo2( int algo, unsigned use )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- if( (use & PUBKEY_USAGE_SIG)
- && !(pubkey_table[i].use & PUBKEY_USAGE_SIG) )
- return G10ERR_WR_PUBKEY_ALGO;
- if( (use & PUBKEY_USAGE_ENC)
- && !(pubkey_table[i].use & PUBKEY_USAGE_ENC) )
- return G10ERR_WR_PUBKEY_ALGO;
- return 0; /* okay */
- }
- } while( load_pubkey_modules() );
- return G10ERR_PUBKEY_ALGO;
-}
-
-
-
-
-/****************
- * Return the number of public key material numbers
- */
-int
-pubkey_get_npkey( int algo )
-{
- int i;
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].npkey;
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* special hack, so that we are able to */
- return 2; /* see the RSA keyids */
- return 0;
-}
-
-/****************
- * Return the number of secret key material numbers
- */
-int
-pubkey_get_nskey( int algo )
-{
- int i;
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].nskey;
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* special hack, so that we are able to */
- return 6; /* see the RSA keyids */
- return 0;
-}
-
-/****************
- * Return the number of signature material numbers
- */
-int
-pubkey_get_nsig( int algo )
-{
- int i;
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].nsig;
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* special hack, so that we are able to */
- return 1; /* see the RSA keyids */
- return 0;
-}
-
-/****************
- * Return the number of encryption material numbers
- */
-int
-pubkey_get_nenc( int algo )
-{
- int i;
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].nenc;
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* special hack, so that we are able to */
- return 1; /* see the RSA keyids */
- return 0;
-}
-
-/****************
- * Get the number of nbits from the public key
- */
-unsigned
-pubkey_nbits( int algo, MPI *pkey )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return (*pubkey_table[i].get_nbits)( algo, pkey );
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* we always wanna see the length of a key :-) */
- return mpi_get_nbits( pkey[0] );
- return 0;
-}
-
-
-int
-pubkey_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return (*pubkey_table[i].generate)( algo, nbits,
- skey, retfactors );
- } while( load_pubkey_modules() );
- return G10ERR_PUBKEY_ALGO;
-}
-
-
-int
-pubkey_check_secret_key( int algo, MPI *skey )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return (*pubkey_table[i].check_secret_key)( algo, skey );
- } while( load_pubkey_modules() );
- return G10ERR_PUBKEY_ALGO;
-}
-
-
-/****************
- * This is the interface to the public key encryption.
- * Encrypt DATA with PKEY and put it into RESARR which
- * should be an array of MPIs of size PUBKEY_MAX_NENC (or less if the
- * algorithm allows this - check with pubkey_get_nenc() )
- */
-int
-pubkey_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey )
-{
- int i, rc;
-
- /* FIXME: check that data fits into the key (in xxx_encrypt)*/
-
- if( DBG_CIPHER ) {
- log_debug("pubkey_encrypt: algo=%d\n", algo );
- for(i=0; i < pubkey_get_npkey(algo); i++ )
- log_mpidump(" pkey:", pkey[i] );
- log_mpidump(" data:", data );
- }
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- rc = (*pubkey_table[i].encrypt)( algo, resarr, data, pkey );
- goto ready;
- }
- } while( load_pubkey_modules() );
- rc = G10ERR_PUBKEY_ALGO;
- ready:
- if( !rc && DBG_CIPHER ) {
- for(i=0; i < pubkey_get_nenc(algo); i++ )
- log_mpidump(" encr:", resarr[i] );
- }
- return rc;
-}
-
-
-
-/****************
- * This is the interface to the public key decryption.
- * ALGO gives the algorithm to use and this implicitly determines
- * the size of the arrays.
- * result is a pointer to a mpi variable which will receive a
- * newly allocated mpi or NULL in case of an error.
- */
-int
-pubkey_decrypt( int algo, MPI *result, MPI *data, MPI *skey )
-{
- int i, rc;
-
- *result = NULL; /* so the caller can always do an mpi_free */
- if( DBG_CIPHER ) {
- log_debug("pubkey_decrypt: algo=%d\n", algo );
- for(i=0; i < pubkey_get_nskey(algo); i++ )
- log_mpidump(" skey:", skey[i] );
- for(i=0; i < pubkey_get_nenc(algo); i++ )
- log_mpidump(" data:", data[i] );
- }
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- rc = (*pubkey_table[i].decrypt)( algo, result, data, skey );
- goto ready;
- }
- } while( load_pubkey_modules() );
- rc = G10ERR_PUBKEY_ALGO;
- ready:
- if( !rc && DBG_CIPHER ) {
- log_mpidump(" plain:", *result );
- }
- return rc;
-}
-
-
-/****************
- * This is the interface to the public key signing.
- * Sign data with skey and put the result into resarr which
- * should be an array of MPIs of size PUBKEY_MAX_NSIG (or less if the
- * algorithm allows this - check with pubkey_get_nsig() )
- */
-int
-pubkey_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{
- int i, rc;
-
- if( DBG_CIPHER ) {
- log_debug("pubkey_sign: algo=%d\n", algo );
- for(i=0; i < pubkey_get_nskey(algo); i++ )
- log_mpidump(" skey:", skey[i] );
- log_mpidump(" data:", data );
- }
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- rc = (*pubkey_table[i].sign)( algo, resarr, data, skey );
- goto ready;
- }
- } while( load_pubkey_modules() );
- rc = G10ERR_PUBKEY_ALGO;
- ready:
- if( !rc && DBG_CIPHER ) {
- for(i=0; i < pubkey_get_nsig(algo); i++ )
- log_mpidump(" sig:", resarr[i] );
- }
- return rc;
-}
-
-/****************
- * Verify a public key signature.
- * Return 0 if the signature is good
- */
-int
-pubkey_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev )
-{
- int i, rc;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- rc = (*pubkey_table[i].verify)( algo, hash, data, pkey,
- cmp, opaquev );
- goto ready;
- }
- } while( load_pubkey_modules() );
- rc = G10ERR_PUBKEY_ALGO;
- ready:
- return rc;
-}
-
diff --git a/cipher/rand-internal.h b/cipher/rand-internal.h
deleted file mode 100644
index 290f034f..00000000
--- a/cipher/rand-internal.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* rand-internal.h - header to glue the random functions
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_RAND_INTERNAL_H
-#define G10_RAND_INTERNAL_H
-
-void rndlinux_constructor(void);
-void rndunix_constructor(void);
-void rndw32_constructor(void);
-void rndos2_constructor(void);
-void rndatari_constructor(void);
-void rndmvs_constructor(void);
-
-#endif /*G10_RAND_INTERNAL_H*/
diff --git a/cipher/random.c b/cipher/random.c
deleted file mode 100644
index eedfcfa6..00000000
--- a/cipher/random.c
+++ /dev/null
@@ -1,428 +0,0 @@
-/* random.c - random number generator
- * 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
- */
-
-
-/****************
- * This random number generator is modelled after the one described
- * in Peter Gutmann's Paper: "Software Generation of Practically
- * Strong Random Numbers".
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#ifdef HAVE_GETHRTIME
- #include <sys/times.h>
-#endif
-#ifdef HAVE_GETTIMEOFDAY
- #include <sys/times.h>
-#endif
-#ifdef HAVE_GETRUSAGE
- #include <sys/resource.h>
-#endif
-#include "util.h"
-#include "rmd.h"
-#include "ttyio.h"
-#include "i18n.h"
-#include "random.h"
-#include "rand-internal.h"
-#include "dynload.h"
-
-
-#ifndef RAND_MAX /* for SunOS */
- #define RAND_MAX 32767
-#endif
-
-
-#if SIZEOF_UNSIGNED_LONG == 8
- #define ADD_VALUE 0xa5a5a5a5a5a5a5a5
-#elif SIZEOF_UNSIGNED_LONG == 4
- #define ADD_VALUE 0xa5a5a5a5
-#else
- #error weird size for an unsigned long
-#endif
-
-#define BLOCKLEN 64 /* hash this amount of bytes */
-#define DIGESTLEN 20 /* into a digest of this length (rmd160) */
-/* poolblocks is the number of digests which make up the pool
- * and poolsize must be a multiple of the digest length
- * to make the AND operations faster, the size should also be
- * a multiple of ulong
- */
-#define POOLBLOCKS 30
-#define POOLSIZE (POOLBLOCKS*DIGESTLEN)
-#if (POOLSIZE % SIZEOF_UNSIGNED_LONG)
- #error Please make sure that poolsize is a multiple of ulong
-#endif
-#define POOLWORDS (POOLSIZE / SIZEOF_UNSIGNED_LONG)
-
-
-static int is_initialized;
-#define MASK_LEVEL(a) do {if( a > 2 ) a = 2; else if( a < 0 ) a = 0; } while(0)
-static char *rndpool; /* allocated size is POOLSIZE+BLOCKLEN */
-static char *keypool; /* allocated size is POOLSIZE+BLOCKLEN */
-static size_t pool_readpos;
-static size_t pool_writepos;
-static int pool_filled;
-static int pool_balance;
-static int just_mixed;
-
-static int secure_alloc;
-static int quick_test;
-static int faked_rng;
-
-
-static void read_pool( byte *buffer, size_t length, int level );
-static void add_randomness( const void *buffer, size_t length, int source );
-static void random_poll(void);
-static void read_random_source( int requester, size_t length, int level);
-static int gather_faked( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level );
-
-
-static void
-initialize(void)
-{
- /* The data buffer is allocated somewhat larger, so that
- * we can use this extra space (which is allocated in secure memory)
- * as a temporary hash buffer */
- rndpool = secure_alloc ? m_alloc_secure_clear(POOLSIZE+BLOCKLEN)
- : m_alloc_clear(POOLSIZE+BLOCKLEN);
- keypool = secure_alloc ? m_alloc_secure_clear(POOLSIZE+BLOCKLEN)
- : m_alloc_clear(POOLSIZE+BLOCKLEN);
- is_initialized = 1;
- cipher_modules_constructor();
-}
-
-void
-secure_random_alloc()
-{
- secure_alloc = 1;
-}
-
-
-int
-quick_random_gen( int onoff )
-{
- int last;
-
- read_random_source(0,0,0); /* init */
- last = quick_test;
- if( onoff != -1 )
- quick_test = onoff;
- return faked_rng? 1 : last;
-}
-
-
-/****************
- * Fill the buffer with LENGTH bytes of cryptographically strong
- * random bytes. level 0 is not very strong, 1 is strong enough
- * for most usage, 2 is good for key generation stuff but may be very slow.
- */
-void
-randomize_buffer( byte *buffer, size_t length, int level )
-{
- char *p = get_random_bits( length*8, level, m_is_secure(buffer) );
- memcpy( buffer, p, length );
- m_free(p);
-}
-
-
-int
-random_is_faked()
-{
- if( !is_initialized )
- initialize();
- return faked_rng || quick_test;
-}
-
-/****************
- * Return a pointer to a randomized buffer of level 0 and LENGTH bits
- * caller must free the buffer.
- * Note: The returned value is rounded up to bytes.
- */
-byte *
-get_random_bits( size_t nbits, int level, int secure )
-{
- byte *buf;
- size_t nbytes = (nbits+7)/8;
-
- if( quick_test && level > 1 )
- level = 1;
- MASK_LEVEL(level);
- buf = secure && secure_alloc ? m_alloc_secure( nbytes ) : m_alloc( nbytes );
- read_pool( buf, nbytes, level );
- return buf;
-}
-
-
-/****************
- * Mix the pool
- */
-static void
-mix_pool(byte *pool)
-{
- char *hashbuf = pool + POOLSIZE;
- char *p, *pend;
- int i, n;
- RMD160_CONTEXT md;
-
- rmd160_init( &md );
- #if DIGESTLEN != 20
- #error must have a digest length of 20 for ripe-md-160
- #endif
- /* loop over the pool */
- pend = pool + POOLSIZE;
- memcpy(hashbuf, pend - DIGESTLEN, DIGESTLEN );
- memcpy(hashbuf+DIGESTLEN, pool, BLOCKLEN-DIGESTLEN);
- rmd160_mixblock( &md, hashbuf);
- memcpy(pool, hashbuf, 20 );
-
- p = pool;
- for( n=1; n < POOLBLOCKS; n++ ) {
- memcpy(hashbuf, p, DIGESTLEN );
-
- p += DIGESTLEN;
- if( p+DIGESTLEN+BLOCKLEN < pend )
- memcpy(hashbuf+DIGESTLEN, p+DIGESTLEN, BLOCKLEN-DIGESTLEN);
- else {
- char *pp = p+DIGESTLEN;
- for(i=DIGESTLEN; i < BLOCKLEN; i++ ) {
- if( pp >= pend )
- pp = pool;
- hashbuf[i] = *pp++;
- }
- }
-
- rmd160_mixblock( &md, hashbuf);
- memcpy(p, hashbuf, 20 );
- }
-}
-
-
-static void
-read_pool( byte *buffer, size_t length, int level )
-{
- int i;
- ulong *sp, *dp;
-
- if( length >= POOLSIZE )
- BUG(); /* not allowed */
-
- /* for level 2 make sure that there is enough random in the pool */
- if( level == 2 && pool_balance < length ) {
- size_t needed;
-
- if( pool_balance < 0 )
- pool_balance = 0;
- needed = length - pool_balance;
- if( needed > POOLSIZE )
- BUG();
- read_random_source( 3, needed, 2 );
- pool_balance += needed;
- }
-
- /* make sure the pool is filled */
- while( !pool_filled )
- random_poll();
-
- /* do always a fast random poll */
- fast_random_poll();
-
- if( !level ) { /* no need for cryptographic strong random */
- /* create a new pool */
- for(i=0,dp=(ulong*)keypool, sp=(ulong*)rndpool;
- i < POOLWORDS; i++, dp++, sp++ )
- *dp = *sp + ADD_VALUE;
- /* must mix both pools */
- mix_pool(rndpool);
- mix_pool(keypool);
- memcpy( buffer, keypool, length );
- }
- else {
- /* mix the pool (if add_randomness() didn't it) */
- if( !just_mixed )
- mix_pool(rndpool);
- /* create a new pool */
- for(i=0,dp=(ulong*)keypool, sp=(ulong*)rndpool;
- i < POOLWORDS; i++, dp++, sp++ )
- *dp = *sp + ADD_VALUE;
- /* and mix both pools */
- mix_pool(rndpool);
- mix_pool(keypool);
- /* read the required data
- * we use a readpoiter to read from a different postion each
- * time */
- while( length-- ) {
- *buffer++ = keypool[pool_readpos++];
- if( pool_readpos >= POOLSIZE )
- pool_readpos = 0;
- pool_balance--;
- }
- if( pool_balance < 0 )
- pool_balance = 0;
- /* and clear the keypool */
- memset( keypool, 0, POOLSIZE );
- }
-}
-
-
-/****************
- * Add LENGTH bytes of randomness from buffer to the pool.
- * source may be used to specify the randomness source.
- */
-static void
-add_randomness( const void *buffer, size_t length, int source )
-{
- if( !is_initialized )
- initialize();
- while( length-- ) {
- rndpool[pool_writepos++] = *((byte*)buffer)++;
- if( pool_writepos >= POOLSIZE ) {
- if( source > 1 )
- pool_filled = 1;
- pool_writepos = 0;
- mix_pool(rndpool);
- just_mixed = !length;
- }
- }
-}
-
-
-
-static void
-random_poll()
-{
- read_random_source( 2, POOLSIZE/5, 1 );
-}
-
-
-void
-fast_random_poll()
-{
- static void (*fnc)( void (*)(const void*, size_t, int), int) = NULL;
- static int initialized = 0;
-
- if( !initialized ) {
- if( !is_initialized )
- initialize();
- initialized = 1;
- fnc = dynload_getfnc_fast_random_poll();
- }
- if( fnc ) {
- (*fnc)( add_randomness, 1 );
- return;
- }
-
- /* fall back to the generic function */
- #if HAVE_GETHRTIME
- { hrtime_t tv;
- tv = gethrtime();
- add_randomness( &tv, sizeof(tv), 1 );
- }
- #elif HAVE_GETTIMEOFDAY
- { struct timeval tv;
- if( gettimeofday( &tv, NULL ) )
- BUG();
- add_randomness( &tv.tv_sec, sizeof(tv.tv_sec), 1 );
- add_randomness( &tv.tv_usec, sizeof(tv.tv_usec), 1 );
- }
- #else /* use times */
- { struct tms buf;
- times( &buf );
- add_randomness( &buf, sizeof buf, 1 );
- }
- #endif
- #ifdef HAVE_GETRUSAGE
- { struct rusage buf;
- if( getrusage( RUSAGE_SELF, &buf ) )
- BUG();
- add_randomness( &buf, sizeof buf, 1 );
- memset( &buf, 0, sizeof buf );
- }
- #endif
-}
-
-
-
-static void
-read_random_source( int requester, size_t length, int level )
-{
- static int (*fnc)(void (*)(const void*, size_t, int), int,
- size_t, int) = NULL;
- if( !fnc ) {
- if( !is_initialized )
- initialize();
- fnc = dynload_getfnc_gather_random();
- if( !fnc ) {
- faked_rng = 1;
- fnc = gather_faked;
- }
- if( !requester && !length && !level )
- return; /* init only */
- }
- if( (*fnc)( add_randomness, requester, length, level ) < 0 )
- log_fatal("No way to gather entropy for the RNG\n");
-}
-
-
-static int
-gather_faked( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level )
-{
- static int initialized=0;
- size_t n;
- char *buffer, *p;
-
- if( !initialized ) {
- log_info(_("WARNING: using insecure random number generator!!\n"));
- tty_printf(_("The random number generator is only a kludge to let\n"
- "it run - it is in no way a strong RNG!\n\n"
- "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n\n"));
- initialized=1;
- #ifdef HAVE_RAND
- srand(make_timestamp()*getpid());
- #else
- srandom(make_timestamp()*getpid());
- #endif
- }
-
- p = buffer = m_alloc( length );
- n = length;
- #ifdef HAVE_RAND
- while( n-- )
- *p++ = ((unsigned)(1 + (int) (256.0*rand()/(RAND_MAX+1.0)))-1);
- #else
- while( n-- )
- *p++ = ((unsigned)(1 + (int) (256.0*random()/(RAND_MAX+1.0)))-1);
- #endif
- add_randomness( buffer, length, requester );
- m_free(buffer);
- return 0; /* okay */
-}
-
diff --git a/cipher/random.h b/cipher/random.h
deleted file mode 100644
index 4b1d56d5..00000000
--- a/cipher/random.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* random.h - random functions
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_RANDOM_H
-#define G10_RANDOM_H
-
-#include "types.h"
-
-/*-- random.c --*/
-void secure_random_alloc(void);
-int quick_random_gen( int onoff );
-int random_is_faked(void);
-void randomize_buffer( byte *buffer, size_t length, int level );
-byte *get_random_bits( size_t nbits, int level, int secure );
-void fast_random_poll( void );
-
-#endif /*G10_RANDOM_H*/
diff --git a/cipher/rmd.h b/cipher/rmd.h
deleted file mode 100644
index cd5c453a..00000000
--- a/cipher/rmd.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* rmd.h - RIPE-MD hash functions
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_RMD_H
-#define G10_RMD_H
-
-
-/* we need this here because random.c must have direct access */
-typedef struct {
- u32 h0,h1,h2,h3,h4;
- u32 nblocks;
- byte buf[64];
- int count;
-} RMD160_CONTEXT;
-
-void rmd160_init( RMD160_CONTEXT *hd );
-void rmd160_mixblock( RMD160_CONTEXT *hd, char *buffer );
-
-#endif /*G10_RMD_H*/
diff --git a/cipher/rmd160.c b/cipher/rmd160.c
deleted file mode 100644
index 70904a14..00000000
--- a/cipher/rmd160.c
+++ /dev/null
@@ -1,645 +0,0 @@
-/* rmd160.c - RIPE-MD160
- * 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 <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "rmd.h"
-#include "cipher.h" /* only used for the rmd160_hash_buffer() prototype */
-#include "dynload.h"
-
-/*********************************
- * RIPEMD-160 is not patented, see (as of 25.10.97)
- * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html
- * Note that the code uses Little Endian byteorder, which is good for
- * 386 etc, but we must add some conversion when used on a big endian box.
- *
- *
- * Pseudo-code for RIPEMD-160
- *
- * RIPEMD-160 is an iterative hash function that operates on 32-bit words.
- * The round function takes as input a 5-word chaining variable and a 16-word
- * message block and maps this to a new chaining variable. All operations are
- * defined on 32-bit words. Padding is identical to that of MD4.
- *
- *
- * RIPEMD-160: definitions
- *
- *
- * nonlinear functions at bit level: exor, mux, -, mux, -
- *
- * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15)
- * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31)
- * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47)
- * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63)
- * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79)
- *
- *
- * added constants (hexadecimal)
- *
- * K(j) = 0x00000000 (0 <= j <= 15)
- * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2))
- * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3))
- * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5))
- * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7))
- * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2))
- * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3))
- * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5))
- * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7))
- * K'(j) = 0x00000000 (64 <= j <= 79)
- *
- *
- * selection of message word
- *
- * r(j) = j (0 <= j <= 15)
- * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
- * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
- * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
- * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
- * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
- * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
- * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
- * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
- * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
- *
- *
- * amount for rotate left (rol)
- *
- * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
- * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
- * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
- * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
- * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
- * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
- * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
- * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
- * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
- * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
- *
- *
- * initial value (hexadecimal)
- *
- * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476;
- * h4 = 0xC3D2E1F0;
- *
- *
- * RIPEMD-160: pseudo-code
- *
- * It is assumed that the message after padding consists of t 16-word blocks
- * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15.
- * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left
- * shift (rotate) over s positions.
- *
- *
- * for i := 0 to t-1 {
- * A := h0; B := h1; C := h2; D = h3; E = h4;
- * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4;
- * for j := 0 to 79 {
- * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E;
- * A := E; E := D; D := rol_10(C); C := B; B := T;
- * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)]
- [+] K'(j)) [+] E';
- * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T;
- * }
- * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A';
- * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T;
- * }
- */
-
-/* Some examples:
- * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31
- * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
- * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
- * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36
- * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc
- * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b
- * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189
- * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb
- * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528
- */
-
-
-void
-rmd160_init( RMD160_CONTEXT *hd )
-{
- hd->h0 = 0x67452301;
- hd->h1 = 0xEFCDAB89;
- hd->h2 = 0x98BADCFE;
- hd->h3 = 0x10325476;
- hd->h4 = 0xC3D2E1F0;
- hd->nblocks = 0;
- hd->count = 0;
-}
-
-
-#if defined(__GNUC__) && defined(__i386__)
-static inline u32
-rol(int n, u32 x)
-{
- __asm__("roll %%cl,%0"
- :"=r" (x)
- :"0" (x),"c" (n));
- return x;
-}
-#else
- #define rol(n,x) ( ((x) << (n)) | ((x) >> (32-(n))) )
-#endif
-
-
-/****************
- * Transform the message X which consists of 16 32-bit-words
- */
-static void
-transform( RMD160_CONTEXT *hd, byte *data )
-{
-
-
- u32 a,b,c,d,e,aa,bb,cc,dd,ee,t;
- #ifdef BIG_ENDIAN_HOST
- u32 x[16];
- { int i;
- byte *p2, *p1;
- for(i=0, p1=data, p2=(byte*)x; i < 16; i++, p2 += 4 ) {
- p2[3] = *p1++;
- p2[2] = *p1++;
- p2[1] = *p1++;
- p2[0] = *p1++;
- }
- }
- #else
- #if 0
- u32 *x =(u32*)data;
- #else
- /* this version is better because it is always aligned;
- * The performance penalty on a 586-100 is about 6% which
- * is acceptable - because the data is more local it might
- * also be possible that this is faster on some machines.
- * This function (when compiled with -02 on gcc 2.7.2)
- * executes on a 586-100 (39.73 bogomips) at about 1900kb/sec;
- * [measured with a 4MB data and "gpgm --print-md rmd160"] */
- u32 x[16];
- memcpy( x, data, 64 );
- #endif
- #endif
-
-
-#define K0 0x00000000
-#define K1 0x5A827999
-#define K2 0x6ED9EBA1
-#define K3 0x8F1BBCDC
-#define K4 0xA953FD4E
-#define KK0 0x50A28BE6
-#define KK1 0x5C4DD124
-#define KK2 0x6D703EF3
-#define KK3 0x7A6D76E9
-#define KK4 0x00000000
-#define F0(x,y,z) ( (x) ^ (y) ^ (z) )
-#define F1(x,y,z) ( ((x) & (y)) | (~(x) & (z)) )
-#define F2(x,y,z) ( ((x) | ~(y)) ^ (z) )
-#define F3(x,y,z) ( ((x) & (z)) | ((y) & ~(z)) )
-#define F4(x,y,z) ( (x) ^ ((y) | ~(z)) )
-#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \
- a = rol(s,t) + e; \
- c = rol(10,c); \
- } while(0)
-
- /* left lane */
- a = hd->h0;
- b = hd->h1;
- c = hd->h2;
- d = hd->h3;
- e = hd->h4;
- R( a, b, c, d, e, F0, K0, 0, 11 );
- R( e, a, b, c, d, F0, K0, 1, 14 );
- R( d, e, a, b, c, F0, K0, 2, 15 );
- R( c, d, e, a, b, F0, K0, 3, 12 );
- R( b, c, d, e, a, F0, K0, 4, 5 );
- R( a, b, c, d, e, F0, K0, 5, 8 );
- R( e, a, b, c, d, F0, K0, 6, 7 );
- R( d, e, a, b, c, F0, K0, 7, 9 );
- R( c, d, e, a, b, F0, K0, 8, 11 );
- R( b, c, d, e, a, F0, K0, 9, 13 );
- R( a, b, c, d, e, F0, K0, 10, 14 );
- R( e, a, b, c, d, F0, K0, 11, 15 );
- R( d, e, a, b, c, F0, K0, 12, 6 );
- R( c, d, e, a, b, F0, K0, 13, 7 );
- R( b, c, d, e, a, F0, K0, 14, 9 );
- R( a, b, c, d, e, F0, K0, 15, 8 );
- R( e, a, b, c, d, F1, K1, 7, 7 );
- R( d, e, a, b, c, F1, K1, 4, 6 );
- R( c, d, e, a, b, F1, K1, 13, 8 );
- R( b, c, d, e, a, F1, K1, 1, 13 );
- R( a, b, c, d, e, F1, K1, 10, 11 );
- R( e, a, b, c, d, F1, K1, 6, 9 );
- R( d, e, a, b, c, F1, K1, 15, 7 );
- R( c, d, e, a, b, F1, K1, 3, 15 );
- R( b, c, d, e, a, F1, K1, 12, 7 );
- R( a, b, c, d, e, F1, K1, 0, 12 );
- R( e, a, b, c, d, F1, K1, 9, 15 );
- R( d, e, a, b, c, F1, K1, 5, 9 );
- R( c, d, e, a, b, F1, K1, 2, 11 );
- R( b, c, d, e, a, F1, K1, 14, 7 );
- R( a, b, c, d, e, F1, K1, 11, 13 );
- R( e, a, b, c, d, F1, K1, 8, 12 );
- R( d, e, a, b, c, F2, K2, 3, 11 );
- R( c, d, e, a, b, F2, K2, 10, 13 );
- R( b, c, d, e, a, F2, K2, 14, 6 );
- R( a, b, c, d, e, F2, K2, 4, 7 );
- R( e, a, b, c, d, F2, K2, 9, 14 );
- R( d, e, a, b, c, F2, K2, 15, 9 );
- R( c, d, e, a, b, F2, K2, 8, 13 );
- R( b, c, d, e, a, F2, K2, 1, 15 );
- R( a, b, c, d, e, F2, K2, 2, 14 );
- R( e, a, b, c, d, F2, K2, 7, 8 );
- R( d, e, a, b, c, F2, K2, 0, 13 );
- R( c, d, e, a, b, F2, K2, 6, 6 );
- R( b, c, d, e, a, F2, K2, 13, 5 );
- R( a, b, c, d, e, F2, K2, 11, 12 );
- R( e, a, b, c, d, F2, K2, 5, 7 );
- R( d, e, a, b, c, F2, K2, 12, 5 );
- R( c, d, e, a, b, F3, K3, 1, 11 );
- R( b, c, d, e, a, F3, K3, 9, 12 );
- R( a, b, c, d, e, F3, K3, 11, 14 );
- R( e, a, b, c, d, F3, K3, 10, 15 );
- R( d, e, a, b, c, F3, K3, 0, 14 );
- R( c, d, e, a, b, F3, K3, 8, 15 );
- R( b, c, d, e, a, F3, K3, 12, 9 );
- R( a, b, c, d, e, F3, K3, 4, 8 );
- R( e, a, b, c, d, F3, K3, 13, 9 );
- R( d, e, a, b, c, F3, K3, 3, 14 );
- R( c, d, e, a, b, F3, K3, 7, 5 );
- R( b, c, d, e, a, F3, K3, 15, 6 );
- R( a, b, c, d, e, F3, K3, 14, 8 );
- R( e, a, b, c, d, F3, K3, 5, 6 );
- R( d, e, a, b, c, F3, K3, 6, 5 );
- R( c, d, e, a, b, F3, K3, 2, 12 );
- R( b, c, d, e, a, F4, K4, 4, 9 );
- R( a, b, c, d, e, F4, K4, 0, 15 );
- R( e, a, b, c, d, F4, K4, 5, 5 );
- R( d, e, a, b, c, F4, K4, 9, 11 );
- R( c, d, e, a, b, F4, K4, 7, 6 );
- R( b, c, d, e, a, F4, K4, 12, 8 );
- R( a, b, c, d, e, F4, K4, 2, 13 );
- R( e, a, b, c, d, F4, K4, 10, 12 );
- R( d, e, a, b, c, F4, K4, 14, 5 );
- R( c, d, e, a, b, F4, K4, 1, 12 );
- R( b, c, d, e, a, F4, K4, 3, 13 );
- R( a, b, c, d, e, F4, K4, 8, 14 );
- R( e, a, b, c, d, F4, K4, 11, 11 );
- R( d, e, a, b, c, F4, K4, 6, 8 );
- R( c, d, e, a, b, F4, K4, 15, 5 );
- R( b, c, d, e, a, F4, K4, 13, 6 );
-
- aa = a; bb = b; cc = c; dd = d; ee = e;
-
- /* right lane */
- a = hd->h0;
- b = hd->h1;
- c = hd->h2;
- d = hd->h3;
- e = hd->h4;
- R( a, b, c, d, e, F4, KK0, 5, 8);
- R( e, a, b, c, d, F4, KK0, 14, 9);
- R( d, e, a, b, c, F4, KK0, 7, 9);
- R( c, d, e, a, b, F4, KK0, 0, 11);
- R( b, c, d, e, a, F4, KK0, 9, 13);
- R( a, b, c, d, e, F4, KK0, 2, 15);
- R( e, a, b, c, d, F4, KK0, 11, 15);
- R( d, e, a, b, c, F4, KK0, 4, 5);
- R( c, d, e, a, b, F4, KK0, 13, 7);
- R( b, c, d, e, a, F4, KK0, 6, 7);
- R( a, b, c, d, e, F4, KK0, 15, 8);
- R( e, a, b, c, d, F4, KK0, 8, 11);
- R( d, e, a, b, c, F4, KK0, 1, 14);
- R( c, d, e, a, b, F4, KK0, 10, 14);
- R( b, c, d, e, a, F4, KK0, 3, 12);
- R( a, b, c, d, e, F4, KK0, 12, 6);
- R( e, a, b, c, d, F3, KK1, 6, 9);
- R( d, e, a, b, c, F3, KK1, 11, 13);
- R( c, d, e, a, b, F3, KK1, 3, 15);
- R( b, c, d, e, a, F3, KK1, 7, 7);
- R( a, b, c, d, e, F3, KK1, 0, 12);
- R( e, a, b, c, d, F3, KK1, 13, 8);
- R( d, e, a, b, c, F3, KK1, 5, 9);
- R( c, d, e, a, b, F3, KK1, 10, 11);
- R( b, c, d, e, a, F3, KK1, 14, 7);
- R( a, b, c, d, e, F3, KK1, 15, 7);
- R( e, a, b, c, d, F3, KK1, 8, 12);
- R( d, e, a, b, c, F3, KK1, 12, 7);
- R( c, d, e, a, b, F3, KK1, 4, 6);
- R( b, c, d, e, a, F3, KK1, 9, 15);
- R( a, b, c, d, e, F3, KK1, 1, 13);
- R( e, a, b, c, d, F3, KK1, 2, 11);
- R( d, e, a, b, c, F2, KK2, 15, 9);
- R( c, d, e, a, b, F2, KK2, 5, 7);
- R( b, c, d, e, a, F2, KK2, 1, 15);
- R( a, b, c, d, e, F2, KK2, 3, 11);
- R( e, a, b, c, d, F2, KK2, 7, 8);
- R( d, e, a, b, c, F2, KK2, 14, 6);
- R( c, d, e, a, b, F2, KK2, 6, 6);
- R( b, c, d, e, a, F2, KK2, 9, 14);
- R( a, b, c, d, e, F2, KK2, 11, 12);
- R( e, a, b, c, d, F2, KK2, 8, 13);
- R( d, e, a, b, c, F2, KK2, 12, 5);
- R( c, d, e, a, b, F2, KK2, 2, 14);
- R( b, c, d, e, a, F2, KK2, 10, 13);
- R( a, b, c, d, e, F2, KK2, 0, 13);
- R( e, a, b, c, d, F2, KK2, 4, 7);
- R( d, e, a, b, c, F2, KK2, 13, 5);
- R( c, d, e, a, b, F1, KK3, 8, 15);
- R( b, c, d, e, a, F1, KK3, 6, 5);
- R( a, b, c, d, e, F1, KK3, 4, 8);
- R( e, a, b, c, d, F1, KK3, 1, 11);
- R( d, e, a, b, c, F1, KK3, 3, 14);
- R( c, d, e, a, b, F1, KK3, 11, 14);
- R( b, c, d, e, a, F1, KK3, 15, 6);
- R( a, b, c, d, e, F1, KK3, 0, 14);
- R( e, a, b, c, d, F1, KK3, 5, 6);
- R( d, e, a, b, c, F1, KK3, 12, 9);
- R( c, d, e, a, b, F1, KK3, 2, 12);
- R( b, c, d, e, a, F1, KK3, 13, 9);
- R( a, b, c, d, e, F1, KK3, 9, 12);
- R( e, a, b, c, d, F1, KK3, 7, 5);
- R( d, e, a, b, c, F1, KK3, 10, 15);
- R( c, d, e, a, b, F1, KK3, 14, 8);
- R( b, c, d, e, a, F0, KK4, 12, 8);
- R( a, b, c, d, e, F0, KK4, 15, 5);
- R( e, a, b, c, d, F0, KK4, 10, 12);
- R( d, e, a, b, c, F0, KK4, 4, 9);
- R( c, d, e, a, b, F0, KK4, 1, 12);
- R( b, c, d, e, a, F0, KK4, 5, 5);
- R( a, b, c, d, e, F0, KK4, 8, 14);
- R( e, a, b, c, d, F0, KK4, 7, 6);
- R( d, e, a, b, c, F0, KK4, 6, 8);
- R( c, d, e, a, b, F0, KK4, 2, 13);
- R( b, c, d, e, a, F0, KK4, 13, 6);
- R( a, b, c, d, e, F0, KK4, 14, 5);
- R( e, a, b, c, d, F0, KK4, 0, 15);
- R( d, e, a, b, c, F0, KK4, 3, 13);
- R( c, d, e, a, b, F0, KK4, 9, 11);
- R( b, c, d, e, a, F0, KK4, 11, 11);
-
-
- t = hd->h1 + d + cc;
- hd->h1 = hd->h2 + e + dd;
- hd->h2 = hd->h3 + a + ee;
- hd->h3 = hd->h4 + b + aa;
- hd->h4 = hd->h0 + c + bb;
- hd->h0 = t;
-}
-
-
-/* Update the message digest with the contents
- * of INBUF with length INLEN.
- */
-static void
-rmd160_write( RMD160_CONTEXT *hd, byte *inbuf, size_t inlen)
-{
- if( hd->count == 64 ) { /* flush the buffer */
- transform( hd, hd->buf );
- hd->count = 0;
- hd->nblocks++;
- }
- if( !inbuf )
- return;
- if( hd->count ) {
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
- rmd160_write( hd, NULL, 0 );
- if( !inlen )
- return;
- }
-
- while( inlen >= 64 ) {
- transform( hd, inbuf );
- hd->count = 0;
- hd->nblocks++;
- inlen -= 64;
- inbuf += 64;
- }
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
-}
-
-/****************
- * Apply the rmd160 transform function on the buffer which must have
- * a length 64 bytes. Do not use this function together with the
- * other functions, use rmd160_init to initialize internal variables.
- * Returns: 16 bytes in buffer with the mixed contentes of buffer.
- */
-void
-rmd160_mixblock( RMD160_CONTEXT *hd, char *buffer )
-{
- char *p = buffer;
- transform( hd, buffer );
- #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0)
- X(0);
- X(1);
- X(2);
- X(3);
- X(4);
- #undef X
-}
-
-
-/* The routine terminates the computation
- */
-
-static void
-rmd160_final( RMD160_CONTEXT *hd )
-{
- u32 t, msb, lsb;
- byte *p;
-
- rmd160_write(hd, NULL, 0); /* flush */;
-
- msb = 0;
- t = hd->nblocks;
- if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
- msb++;
- msb += t >> 26;
- t = lsb;
- if( (lsb = t + hd->count) < t ) /* add the count */
- msb++;
- t = lsb;
- if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
- msb++;
- msb += t >> 29;
-
- if( hd->count < 56 ) { /* enough room */
- hd->buf[hd->count++] = 0x80; /* pad */
- while( hd->count < 56 )
- hd->buf[hd->count++] = 0; /* pad */
- }
- else { /* need one extra block */
- hd->buf[hd->count++] = 0x80; /* pad character */
- while( hd->count < 64 )
- hd->buf[hd->count++] = 0;
- rmd160_write(hd, NULL, 0); /* flush */;
- memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
- }
- /* append the 64 bit count */
- hd->buf[56] = lsb ;
- hd->buf[57] = lsb >> 8;
- hd->buf[58] = lsb >> 16;
- hd->buf[59] = lsb >> 24;
- hd->buf[60] = msb ;
- hd->buf[61] = msb >> 8;
- hd->buf[62] = msb >> 16;
- hd->buf[63] = msb >> 24;
- transform( hd, hd->buf );
-
- p = hd->buf;
- #ifdef BIG_ENDIAN_HOST
- #define X(a) do { *p++ = hd->h##a ; *p++ = hd->h##a >> 8; \
- *p++ = hd->h##a >> 16; *p++ = hd->h##a >> 24; } while(0)
- #else /* little endian */
- #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0)
- #endif
- X(0);
- X(1);
- X(2);
- X(3);
- X(4);
- #undef X
-}
-
-static byte *
-rmd160_read( RMD160_CONTEXT *hd )
-{
- return hd->buf;
-}
-
-
-
-/****************
- * Shortcut functions which puts the hash value of the supplied buffer
- * into outbuf which must have a size of 20 bytes.
- */
-void
-rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length )
-{
- RMD160_CONTEXT hd;
-
- rmd160_init( &hd );
- rmd160_write( &hd, (byte*)buffer, length );
- rmd160_final( &hd );
- memcpy( outbuf, hd.buf, 20 );
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-static const char *
-rmd160_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- )
-{
- static byte asn[15] = /* Object ID is 1.3.36.3.2.1 */
- { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x24, 0x03,
- 0x02, 0x01, 0x05, 0x00, 0x04, 0x14 };
-
- if( algo != 3 )
- return NULL;
-
- *contextsize = sizeof(RMD160_CONTEXT);
- *r_asnoid = asn;
- *r_asnlen = DIM(asn);
- *r_mdlen = 20;
- *r_init = (void (*)(void *))rmd160_init;
- *r_write = (void (*)(void *, byte*, size_t))rmd160_write;
- *r_final = (void (*)(void *))rmd160_final;
- *r_read = (byte *(*)(void *))rmd160_read;
-
- return "RIPEMD160";
-}
-
-
-#ifndef IS_MODULE
-static
-#endif
-const char * const gnupgext_version = "RMD160 ($Revision$)";
-
-static struct {
- int class;
- int version;
- int value;
- void (*func)(void);
-} func_table[] = {
- { 10, 1, 0, (void(*)(void))rmd160_get_info },
- { 11, 1, 3 },
-};
-
-
-#ifndef IS_MODULE
-static
-#endif
-void *
-gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
-{
- void *ret;
- int i = *sequence;
-
- do {
- if( i >= DIM(func_table) || i < 0 ) {
- return NULL;
- }
- *class = func_table[i].class;
- *vers = func_table[i].version;
- switch( *class ) {
- case 11:
- case 21:
- case 31:
- ret = &func_table[i].value;
- break;
- default:
- ret = func_table[i].func;
- break;
- }
- i++;
- } while( what && what != *class );
-
- *sequence = i;
- return ret;
-}
-
-
-
-
-#ifndef IS_MODULE
-void
-rmd160_constructor(void)
-{
- register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
-}
-#endif
-
diff --git a/cipher/rmd160test.c b/cipher/rmd160test.c
deleted file mode 100644
index f0acd2ad..00000000
--- a/cipher/rmd160test.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* rmd160test.c - ripe md 160 test program
- * 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 <string.h>
-
-#include "util.h"
-#include "rmd.h"
-
-static void
-usage(void)
-{
- fprintf(stderr, "usage: rmd160test\n");
- exit(1);
-}
-
-
-int
-main(int argc, char **argv)
-{
- RMDHANDLE rmdhd;
- int i, n;
- byte buf[100], *p;
-
- if( argc > 1 )
- usage();
-
- rmdhd = rmd160_open(0);
- #if 1
- while( (n = fread( buf, 1, 100, stdin )) > 0 )
- rmd160_write(rmdhd, buf, n);
- #else
- for(i=0; i < 1000000; i++ )
- rmd160_putchar(rmdhd, 'a');
- #endif
- p = rmd160_final(rmdhd);
- for(i=0; i < 20; i++, p++ )
- printf("%02x", *p );
- putchar('\n');
-
- rmd160_close(rmdhd);
- return 0;
-}
-
diff --git a/cipher/rndlinux.c b/cipher/rndlinux.c
deleted file mode 100644
index a1a1c294..00000000
--- a/cipher/rndlinux.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* rndlinux.c - raw random number for OSes with /dev/random
- * 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 <assert.h>
-#include <errno.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef HAVE_GETTIMEOFDAY
- #include <sys/times.h>
-#endif
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include "types.h"
-#include "util.h"
-#include "ttyio.h"
-#include "dynload.h"
-
-#ifdef IS_MODULE
- #define _(a) (a)
-#else
- #include "i18n.h"
-#endif
-
-static int open_device( const char *name, int minor );
-static int gather_random( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level );
-
-#ifdef IS_MODULE
-static void tty_printf(const char *fmt, ... )
-{
- g10_log_info("tty_printf not available (%s)\n", fmt );
-}
-#endif
-
-
-
-/****************
- * Used to open the Linux and xBSD /dev/random devices
- */
-static int
-open_device( const char *name, int minor )
-{
- int fd;
- struct stat sb;
-
- fd = open( name, O_RDONLY );
- if( fd == -1 )
- g10_log_fatal("can't open %s: %s\n", name, strerror(errno) );
- if( fstat( fd, &sb ) )
- g10_log_fatal("stat() off %s failed: %s\n", name, strerror(errno) );
- #if defined(__sparc__) && defined(__linux__)
- #warning something is wrong with UltraPenguin /dev/random
- #else
- if( !S_ISCHR(sb.st_mode) )
- g10_log_fatal("invalid random device!\n" );
- #endif
- return fd;
-}
-
-
-static int
-gather_random( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level )
-{
- static int fd_urandom = -1;
- static int fd_random = -1;
- int fd;
- int n;
- int warn=0;
- byte buffer[768];
-
- if( level >= 2 ) {
- if( fd_random == -1 )
- fd_random = open_device( NAME_OF_DEV_RANDOM, 8 );
- fd = fd_random;
- }
- else {
- if( fd_urandom == -1 )
- fd_urandom = open_device( NAME_OF_DEV_URANDOM, 9 );
- fd = fd_urandom;
- }
-
- while( length ) {
- fd_set rfds;
- struct timeval tv;
- int rc;
-
- FD_ZERO(&rfds);
- FD_SET(fd, &rfds);
- tv.tv_sec = 3;
- tv.tv_usec = 0;
- if( !(rc=select(fd+1, &rfds, NULL, NULL, &tv)) ) {
- if( !warn )
- tty_printf( _(
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"), length );
- warn = 1;
- continue;
- }
- else if( rc == -1 ) {
- tty_printf("select() error: %s\n", strerror(errno));
- continue;
- }
-
- do {
- int nbytes = length < sizeof(buffer)? length : sizeof(buffer);
- n = read(fd, buffer, nbytes );
- if( n >= 0 && n > nbytes ) {
- g10_log_error("bogus read from random device (n=%d)\n", n );
- n = nbytes;
- }
- } while( n == -1 && errno == EINTR );
- if( n == -1 )
- g10_log_fatal("read error on random device: %s\n", strerror(errno));
- (*add)( buffer, n, requester );
- length -= n;
- }
- memset(buffer, 0, sizeof(buffer) );
-
- return 0; /* success */
-}
-
-
-
-#ifndef IS_MODULE
-static
-#endif
-const char * const gnupgext_version = "RNDLINUX ($Revision$)";
-
-static struct {
- int class;
- int version;
- void *func;
-} func_table[] = {
- { 40, 1, gather_random },
-};
-
-
-
-/****************
- * Enumerate the names of the functions together with informations about
- * this function. Set sequence to an integer with a initial value of 0 and
- * do not change it.
- * If what is 0 all kind of functions are returned.
- * Return values: class := class of function:
- * 10 = message digest algorithm info function
- * 11 = integer with available md algorithms
- * 20 = cipher algorithm info function
- * 21 = integer with available cipher algorithms
- * 30 = public key algorithm info function
- * 31 = integer with available pubkey algorithms
- * 40 = get gather_random function
- * 41 = get fast_random_poll function
- * version = interface version of the function/pointer
- * (currently this is 1 for all functions)
- */
-
-#ifndef IS_MODULE
-static
-#endif
-void *
-gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
-{
- void *ret;
- int i = *sequence;
-
- do {
- if ( i >= DIM(func_table) || i < 0 ) {
- return NULL;
- }
- *class = func_table[i].class;
- *vers = func_table[i].version;
- ret = func_table[i].func;
- i++;
- } while ( what && what != *class );
-
- *sequence = i;
- return ret;
-}
-
-#ifndef IS_MODULE
-void
-rndlinux_constructor(void)
-{
- register_internal_cipher_extension( gnupgext_version,
- gnupgext_enum_func );
-}
-#endif
-
diff --git a/cipher/rndunix.c b/cipher/rndunix.c
deleted file mode 100644
index 71f75dfc..00000000
--- a/cipher/rndunix.c
+++ /dev/null
@@ -1,820 +0,0 @@
-/****************************************************************************
- * *
- * BeOS Randomness-Gathering Code *
- * Copyright Peter Gutmann, Paul Kendall, and Chris Wedgwood 1996-1998 *
- * Copyright (C) 1998, 1999 Werner Koch
- * *
- ****************************************************************************/
-
-/* General includes */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-/* OS-specific includes */
-
-#ifdef __osf__
- /* Somewhere in the morass of system-specific cruft which OSF/1 pulls in
- * via the following includes are various endianness defines, so we
- * undefine the cryptlib ones, which aren't really needed for this module
- * anyway */
-#undef BIG_ENDIAN
-#undef LITTLE_ENDIAN
-#endif /* __osf__ */
-
-#include <unistd.h>
-#include <fcntl.h>
-#include <pwd.h>
-#ifndef __QNX__
-#include <sys/errno.h>
-#include <sys/ipc.h>
-#endif /* __QNX__ */
-#include <sys/time.h> /* SCO and SunOS need this before resource.h */
-#ifndef __QNX__
-#include <sys/resource.h>
-#endif /* __QNX__ */
-#ifdef _AIX
-#include <sys/select.h>
-#endif /* _AIX */
-#ifndef __QNX__
-#include <sys/shm.h>
-#include <sys/signal.h>
-#endif /* __QNX__ */
-#include <sys/stat.h>
-#include <sys/types.h> /* Verschiedene komische Typen */
-#if defined( __hpux ) && ( OS_VERSION == 9 )
-#include <vfork.h>
-#endif /* __hpux 9.x, after that it's in unistd.h */
-#include <sys/wait.h>
-/* #include <kitchensink.h> */
-#include <errno.h>
-
-#include "types.h" /* for byte and u32 typedefs */
-#ifndef IS_MODULE
-#include "dynload.h"
-#endif
-#include "util.h"
-
-#ifndef EAGAIN
- #define EAGAIN EWOULDBLOCK
-#endif
-
-#define GATHER_BUFSIZE 49152 /* Usually about 25K are filled */
-
-/* The structure containing information on random-data sources. Each
- * record contains the source and a relative estimate of its usefulness
- * (weighting) which is used to scale the number of kB of output from the
- * source (total = data_bytes / usefulness). Usually the weighting is in the
- * range 1-3 (or 0 for especially useless sources), resulting in a usefulness
- * rating of 1...3 for each kB of source output (or 0 for the useless
- * sources).
- *
- * If the source is constantly changing (certain types of network statistics
- * have this characteristic) but the amount of output is small, the weighting
- * is given as a negative value to indicate that the output should be treated
- * as if a minimum of 1K of output had been obtained. If the source produces
- * a lot of output then the scale factor is fractional, resulting in a
- * usefulness rating of < 1 for each kB of source output.
- *
- * In order to provide enough randomness to satisfy the requirements for a
- * slow poll, we need to accumulate at least 20 points of usefulness (a
- * typical system should get about 30 points).
- *
- * Some potential options are missed out because of special considerations.
- * pstat -i and pstat -f can produce amazing amounts of output (the record
- * is 600K on an Oracle server) which floods the buffer and doesn't yield
- * anything useful (apart from perhaps increasing the entropy of the vmstat
- * output a bit), so we don't bother with this. pstat in general produces
- * quite a bit of output, but it doesn't change much over time, so it gets
- * very low weightings. netstat -s produces constantly-changing output but
- * also produces quite a bit of it, so it only gets a weighting of 2 rather
- * than 3. The same holds for netstat -in, which gets 1 rather than 2.
- *
- * Some binaries are stored in different locations on different systems so
- * alternative paths are given for them. The code sorts out which one to
- * run by itself, once it finds an exectable somewhere it moves on to the
- * next source. The sources are arranged roughly in their order of
- * usefulness, occasionally sources which provide a tiny amount of
- * relatively useless data are placed ahead of ones which provide a large
- * amount of possibly useful data because another 100 bytes can't hurt, and
- * it means the buffer won't be swamped by one or two high-output sources.
- * All the high-output sources are clustered towards the end of the list
- * for this reason. Some binaries are checked for in a certain order, for
- * example under Slowaris /usr/ucb/ps understands aux as an arg, but the
- * others don't. Some systems have conditional defines enabling alternatives
- * to commands which don't understand the usual options but will provide
- * enough output (in the form of error messages) to look like they're the
- * real thing, causing alternative options to be skipped (we can't check the
- * return either because some commands return peculiar, non-zero status even
- * when they're working correctly).
- *
- * In order to maximise use of the buffer, the code performs a form of run-
- * length compression on its input where a repeated sequence of bytes is
- * replaced by the occurrence count mod 256. Some commands output an awful
- * lot of whitespace, this measure greatly increases the amount of data we
- * can fit in the buffer.
- *
- * When we scale the weighting using the SC() macro, some preprocessors may
- * give a division by zero warning for the most obvious expression
- * 'weight ? 1024 / weight : 0' (and gcc 2.7.2.2 dies with a division by zero
- * trap), so we define a value SC_0 which evaluates to zero when fed to
- * '1024 / SC_0' */
-
-#define SC( weight ) ( 1024 / weight ) /* Scale factor */
-#define SC_0 16384 /* SC( SC_0 ) evalutes to 0 */
-
-static struct RI {
- const char *path; /* Path to check for existence of source */
- const char *arg; /* Args for source */
- const int usefulness; /* Usefulness of source */
- FILE *pipe; /* Pipe to source as FILE * */
- int pipeFD; /* Pipe to source as FD */
- pid_t pid; /* pid of child for waitpid() */
- int length; /* Quantity of output produced */
- const int hasAlternative; /* Whether source has alt.location */
-} dataSources[] = {
-
- { "/bin/vmstat", "-s", SC(-3), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", "-s", SC(-3), NULL, 0, 0, 0, 0},
- { "/bin/vmstat", "-c", SC(-3), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", "-c", SC(-3), NULL, 0, 0, 0, 0},
- { "/usr/bin/pfstat", NULL, SC(-2), NULL, 0, 0, 0, 0},
- { "/bin/vmstat", "-i", SC(-2), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", "-i", SC(-2), NULL, 0, 0, 0, 0},
- { "/usr/ucb/netstat", "-s", SC(2), NULL, 0, 0, 0, 1 },
- { "/usr/bin/netstat", "-s", SC(2), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/netstat", "-s", SC(2), NULL, 0, 0, 0, 1},
- { "/usr/etc/netstat", "-s", SC(2), NULL, 0, 0, 0, 0},
- { "/usr/bin/nfsstat", NULL, SC(2), NULL, 0, 0, 0, 0},
- { "/usr/ucb/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/bin/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/etc/netstat", "-m", SC(-1), NULL, 0, 0, 0, 0 },
- { "/bin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/ucb/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/bin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1},
- { "/usr/etc/netstat", "-in", SC(-1), NULL, 0, 0, 0, 0},
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.7.1.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* UDP in */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.7.4.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* UDP out */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.4.3.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* IP ? */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.10.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.11.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.13.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */
- { "/usr/bin/mpstat", NULL, SC(1), NULL, 0, 0, 0, 0 },
- { "/usr/bin/w", NULL, SC(1), NULL, 0, 0, 0, 1 },
- { "/usr/bsd/w", NULL, SC(1), NULL, 0, 0, 0, 0 },
- { "/usr/bin/df", NULL, SC(1), NULL, 0, 0, 0, 1 },
- { "/bin/df", NULL, SC(1), NULL, 0, 0, 0, 0 },
- { "/usr/sbin/portstat", NULL, SC(1), NULL, 0, 0, 0, 0 },
- { "/usr/bin/iostat", NULL, SC(SC_0), NULL, 0, 0, 0, 0 },
- { "/usr/bin/uptime", NULL, SC(SC_0), NULL, 0, 0, 0, 1 },
- { "/usr/bsd/uptime", NULL, SC(SC_0), NULL, 0, 0, 0, 0 },
- { "/bin/vmstat", "-f", SC(SC_0), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", "-f", SC(SC_0), NULL, 0, 0, 0, 0 },
- { "/bin/vmstat", NULL, SC(SC_0), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", NULL, SC(SC_0), NULL, 0, 0, 0, 0 },
- { "/usr/ucb/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/usr/bin/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/usr/etc/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 0 },
-#if defined( __sgi ) || defined( __hpux )
- { "/bin/ps", "-el", SC(0.3), NULL, 0, 0, 0, 1 },
-#endif /* __sgi || __hpux */
- { "/usr/ucb/ps", "aux", SC(0.3), NULL, 0, 0, 0, 1 },
- { "/usr/bin/ps", "aux", SC(0.3), NULL, 0, 0, 0, 1 },
- { "/bin/ps", "aux", SC(0.3), NULL, 0, 0, 0, 0 },
- { "/usr/bin/ipcs", "-a", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/bin/ipcs", "-a", SC(0.5), NULL, 0, 0, 0, 0 },
- /* Unreliable source, depends on system usage */
- { "/etc/pstat", "-p", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-p", SC(0.5), NULL, 0, 0, 0, 0 },
- { "/etc/pstat", "-S", SC(0.2), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-S", SC(0.2), NULL, 0, 0, 0, 0 },
- { "/etc/pstat", "-v", SC(0.2), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-v", SC(0.2), NULL, 0, 0, 0, 0 },
- { "/etc/pstat", "-x", SC(0.2), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-x", SC(0.2), NULL, 0, 0, 0, 0 },
- { "/etc/pstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-t", SC(0.1), NULL, 0, 0, 0, 0 },
- /* pstat is your friend */
- { "/usr/bin/last", "-n 50", SC(0.3), NULL, 0, 0, 0, 1 },
-#ifdef __sgi
- { "/usr/bsd/last", "-50", SC(0.3), NULL, 0, 0, 0, 0 },
-#endif /* __sgi */
-#ifdef __hpux
- { "/etc/last", "-50", SC(0.3), NULL, 0, 0, 0, 0 },
-#endif /* __hpux */
- { "/usr/bsd/last", "-n 50", SC(0.3), NULL, 0, 0, 0, 0 },
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.5.1.0",
- SC(0.1), NULL, 0, 0, 0, 0 }, /* ICMP ? */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.5.3.0",
- SC(0.1), NULL, 0, 0, 0, 0 }, /* ICMP ? */
- { "/etc/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/etc/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/bin/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/arp", "-a", SC(0.1), NULL, 0, 0, 0, 0 },
- { "/usr/sbin/ripquery", "-nw 1 127.0.0.1",
- SC(0.1), NULL, 0, 0, 0, 0 },
- { "/bin/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/bin/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/ucb/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 0 },
- { "/usr/bin/tcpdump", "-c 5 -efvvx", SC(1), NULL, 0, 0, 0, 0 },
- /* This is very environment-dependant. If network traffic is low, it'll
- * probably time out before delivering 5 packets, which is OK because
- * it'll probably be fixed stuff like ARP anyway */
- { "/usr/sbin/advfsstat", "-b usr_domain",
- SC(SC_0), NULL, 0, 0, 0, 0},
- { "/usr/sbin/advfsstat", "-l 2 usr_domain",
- SC(0.5), NULL, 0, 0, 0, 0},
- { "/usr/sbin/advfsstat", "-p usr_domain",
- SC(SC_0), NULL, 0, 0, 0, 0},
- /* This is a complex and screwball program. Some systems have things
- * like rX_dmn, x = integer, for RAID systems, but the statistics are
- * pretty dodgy */
-#if 0
- /* The following aren't enabled since they're somewhat slow and not very
- * unpredictable, however they give an indication of the sort of sources
- * you can use (for example the finger might be more useful on a
- * firewalled internal network) */
- { "/usr/bin/finger", "@ml.media.mit.edu", SC(0.9), NULL, 0, 0, 0, 0 },
- { "/usr/local/bin/wget", "-O - http://lavarand.sgi.com/block.html",
- SC(0.9), NULL, 0, 0, 0, 0 },
- { "/bin/cat", "/usr/spool/mqueue/syslog", SC(0.9), NULL, 0, 0, 0, 0 },
-#endif /* 0 */
- { NULL, NULL, 0, NULL, 0, 0, 0, 0 }
-};
-
-static byte *gather_buffer; /* buffer for gathering random noise */
-static int gather_buffer_size; /* size of the memory buffer */
-static uid_t gatherer_uid;
-
-/* The message structure used to communicate with the parent */
-typedef struct {
- int usefulness; /* usefulness of data */
- int ndata; /* valid bytes in data */
- char data[500]; /* gathered data */
-} GATHER_MSG;
-
-/* Under SunOS popen() doesn't record the pid of the child process. When
- * pclose() is called, instead of calling waitpid() for the correct child, it
- * calls wait() repeatedly until the right child is reaped. The problem is
- * that this reaps any other children that happen to have died at that
- * moment, and when their pclose() comes along, the process hangs forever.
- * The fix is to use a wrapper for popen()/pclose() which saves the pid in
- * the dataSources structure (code adapted from GNU-libc's popen() call).
- *
- * Aut viam inveniam aut faciam */
-
-static FILE *
-my_popen(struct RI *entry)
-{
-
- int pipedes[2];
- FILE *stream;
-
- /* Create the pipe */
- if (pipe(pipedes) < 0)
- return (NULL);
-
- /* Fork off the child ("vfork() is like an OS orgasm. All OS's want to
- * do it, but most just end up faking it" - Chris Wedgwood). If your OS
- * supports it, you should try to use vfork() here because it's somewhat
- * more efficient */
-#if defined( sun ) || defined( __ultrix__ ) || defined( __osf__ ) || \
- defined(__hpux)
- entry->pid = vfork();
-#else /* */
- entry->pid = fork();
-#endif /* Unixen which have vfork() */
- if (entry->pid == (pid_t) - 1) {
- /* The fork failed */
- close(pipedes[0]);
- close(pipedes[1]);
- return (NULL);
- }
-
- if (entry->pid == (pid_t) 0) {
- struct passwd *passwd;
-
- /* We are the child. Make the read side of the pipe be stdout */
- if (dup2(pipedes[STDOUT_FILENO], STDOUT_FILENO) < 0)
- exit(127);
-
- /* Now that everything is set up, give up our permissions to make
- * sure we don't read anything sensitive. If the getpwnam() fails,
- * we default to -1, which is usually nobody */
- if (gatherer_uid == (uid_t)-1 && \
- (passwd = getpwnam("nobody")) != NULL)
- gatherer_uid = passwd->pw_uid;
-
- setuid(gatherer_uid);
-
- /* Close the pipe descriptors */
- close(pipedes[STDIN_FILENO]);
- close(pipedes[STDOUT_FILENO]);
-
- /* Try and exec the program */
- execl(entry->path, entry->path, entry->arg, NULL);
-
- /* Die if the exec failed */
- exit(127);
- }
-
- /* We are the parent. Close the irrelevant side of the pipe and open
- * the relevant side as a new stream. Mark our side of the pipe to
- * close on exec, so new children won't see it */
- close(pipedes[STDOUT_FILENO]);
-
- fcntl(pipedes[STDIN_FILENO], F_SETFD, FD_CLOEXEC);
-
- stream = fdopen(pipedes[STDIN_FILENO], "r");
-
- if (stream == NULL) {
- int savedErrno = errno;
-
- /* The stream couldn't be opened or the child structure couldn't be
- * allocated. Kill the child and close the other side of the pipe */
- kill(entry->pid, SIGKILL);
- if (stream == NULL)
- close(pipedes[STDOUT_FILENO]);
- else
- fclose(stream);
-
- waitpid(entry->pid, NULL, 0);
-
- entry->pid = 0;
- errno = savedErrno;
- return (NULL);
- }
-
- return (stream);
-}
-
-static int
-my_pclose(struct RI *entry)
-{
- int status = 0;
-
- if (fclose(entry->pipe))
- return (-1);
-
- /* We ignore the return value from the process because some programs
- * return funny values which would result in the input being discarded
- * even if they executed successfully. This isn't a problem because the
- * result data size threshold will filter out any programs which exit
- * with a usage message without producing useful output */
- if (waitpid(entry->pid, NULL, 0) != entry->pid)
- status = -1;
-
- entry->pipe = NULL;
- entry->pid = 0;
- return (status);
-}
-
-
-/* Unix slow poll (without special support for Linux)
- *
- * If a few of the randomness sources create a large amount of output then
- * the slowPoll() stops once the buffer has been filled (but before all the
- * randomness sources have been sucked dry) so that the 'usefulness' factor
- * remains below the threshold. For this reason the gatherer buffer has to
- * be fairly sizeable on moderately loaded systems. This is something of a
- * bug since the usefulness should be influenced by the amount of output as
- * well as the source type */
-
-
-static int
-slow_poll(FILE *dbgfp, int dbgall, size_t *nbytes )
-{
- int moreSources;
- struct timeval tv;
- fd_set fds;
- #if defined( __hpux )
- size_t maxFD = 0;
- #else
- int maxFD = 0;
- #endif /* OS-specific brokenness */
- int bufPos, i, usefulness = 0;
-
-
- /* Fire up each randomness source */
- FD_ZERO(&fds);
- for (i = 0; dataSources[i].path != NULL; i++) {
- /* Since popen() is a fairly heavy function, we check to see whether
- * the executable exists before we try to run it */
- if (access(dataSources[i].path, X_OK)) {
- if( dbgfp && dbgall )
- fprintf(dbgfp, "%s not present%s\n", dataSources[i].path,
- dataSources[i].hasAlternative ?
- ", has alternatives" : "");
- dataSources[i].pipe = NULL;
- }
- else
- dataSources[i].pipe = my_popen(&dataSources[i]);
-
- if (dataSources[i].pipe != NULL) {
- dataSources[i].pipeFD = fileno(dataSources[i].pipe);
- if (dataSources[i].pipeFD > maxFD)
- maxFD = dataSources[i].pipeFD;
- #ifdef O_NONBLOCK /* Ohhh what a hack (used for Atari) */
- fcntl(dataSources[i].pipeFD, F_SETFL, O_NONBLOCK);
- #else
- #warning O_NONBLOCK is missing
- #endif
- FD_SET(dataSources[i].pipeFD, &fds);
- dataSources[i].length = 0;
-
- /* If there are alternatives for this command, don't try and
- * execute them */
- while (dataSources[i].hasAlternative) {
- if( dbgfp && dbgall )
- fprintf(dbgfp, "Skipping %s\n", dataSources[i + 1].path);
- i++;
- }
- }
- }
-
-
- /* Suck all the data we can get from each of the sources */
- bufPos = 0;
- moreSources = 1;
- while (moreSources && bufPos <= gather_buffer_size) {
- /* Wait for data to become available from any of the sources, with a
- * timeout of 10 seconds. This adds even more randomness since data
- * becomes available in a nondeterministic fashion. Kudos to HP's QA
- * department for managing to ship a select() which breaks its own
- * prototype */
- tv.tv_sec = 10;
- tv.tv_usec = 0;
-
- #if defined( __hpux ) && ( OS_VERSION == 9 )
- if (select(maxFD + 1, (int *)&fds, NULL, NULL, &tv) == -1)
- #else /* */
- if (select(maxFD + 1, &fds, NULL, NULL, &tv) == -1)
- #endif /* __hpux */
- break;
-
- /* One of the sources has data available, read it into the buffer */
- for (i = 0; dataSources[i].path != NULL; i++) {
- if( dataSources[i].pipe && FD_ISSET(dataSources[i].pipeFD, &fds)) {
- size_t noBytes;
-
- if ((noBytes = fread(gather_buffer + bufPos, 1,
- gather_buffer_size - bufPos,
- dataSources[i].pipe)) == 0) {
- if (my_pclose(&dataSources[i]) == 0) {
- int total = 0;
-
- /* Try and estimate how much entropy we're getting
- * from a data source */
- if (dataSources[i].usefulness)
- if (dataSources[i].usefulness < 0)
- total = (dataSources[i].length + 999)
- / -dataSources[i].usefulness;
- else
- total = dataSources[i].length
- / dataSources[i].usefulness;
- if( dbgfp )
- fprintf(dbgfp,
- "%s %s contributed %d bytes, "
- "usefulness = %d\n", dataSources[i].path,
- (dataSources[i].arg != NULL) ?
- dataSources[i].arg : "",
- dataSources[i].length, total);
- if( dataSources[i].length )
- usefulness += total;
- }
- dataSources[i].pipe = NULL;
- }
- else {
- int currPos = bufPos;
- int endPos = bufPos + noBytes;
-
- /* Run-length compress the input byte sequence */
- while (currPos < endPos) {
- int ch = gather_buffer[currPos];
-
- /* If it's a single byte, just copy it over */
- if (ch != gather_buffer[currPos + 1]) {
- gather_buffer[bufPos++] = ch;
- currPos++;
- }
- else {
- int count = 0;
-
- /* It's a run of repeated bytes, replace them
- * with the byte count mod 256 */
- while ((ch == gather_buffer[currPos])
- && currPos < endPos) {
- count++;
- currPos++;
- }
- gather_buffer[bufPos++] = count;
- noBytes -= count - 1;
- }
- }
-
- /* Remember the number of (compressed) bytes of input we
- * obtained */
- dataSources[i].length += noBytes;
- }
- }
- }
-
- /* Check if there is more input available on any of the sources */
- moreSources = 0;
- FD_ZERO(&fds);
- for (i = 0; dataSources[i].path != NULL; i++) {
- if (dataSources[i].pipe != NULL) {
- FD_SET(dataSources[i].pipeFD, &fds);
- moreSources = 1;
- }
- }
- }
-
- if( dbgfp ) {
- fprintf(dbgfp, "Got %d bytes, usefulness = %d\n", bufPos, usefulness);
- fflush(dbgfp);
- }
- *nbytes = bufPos;
- return usefulness;
-}
-
-/****************
- * Start the gatherer process which writes messages of
- * type GATHERER_MSG to pipedes
- */
-static void
-start_gatherer( int pipefd )
-{
- FILE *dbgfp = NULL;
- int dbgall;
-
- {
- const char *s = getenv("GNUPG_RNDUNIX_DBG");
- if( s ) {
- dbgfp = (*s=='-' && !s[1])? stdout : fopen(s, "a");
- if( !dbgfp )
- g10_log_info("can't open debug file `%s': %s\n",
- s, strerror(errno) );
- else
- fprintf(dbgfp,"\nSTART RNDUNIX DEBUG pid=%d\n", (int)getpid());
- }
- dbgall = !!getenv("GNUPG_RNDUNIX_DBGALL");
- }
- /* close all files but the ones we need */
- { int nmax, n1, n2, i;
- if( (nmax=sysconf( _SC_OPEN_MAX )) < 0 ) {
- #ifdef _POSIX_OPEN_MAX
- nmax = _POSIX_OPEN_MAX;
- #else
- nmax = 20; /* assume a reasonable value */
- #endif
- }
- n1 = fileno( stderr );
- n2 = dbgfp? fileno( dbgfp ) : -1;
- for(i=0; i < nmax; i++ ) {
- if( i != n1 && i != n2 && i != pipefd )
- close(i);
- }
- errno = 0;
- }
-
-
-
- /* Set up the buffer */
- gather_buffer_size = GATHER_BUFSIZE;
- gather_buffer = malloc( gather_buffer_size );
- if( !gather_buffer ) {
- g10_log_error("out of core while allocating the gatherer buffer\n");
- exit(2);
- }
-
- /* Reset the SIGC(H)LD handler to the system default. This is necessary
- * because if the program which cryptlib is a part of installs its own
- * SIGC(H)LD handler, it will end up reaping the cryptlib children before
- * cryptlib can. As a result, my_pclose() will call waitpid() on a
- * process which has already been reaped by the installed handler and
- * return an error, so the read data won't be added to the randomness
- * pool. There are two types of SIGC(H)LD naming, the SysV SIGCLD and
- * the BSD/Posix SIGCHLD, so we need to handle either possibility */
- #ifdef SIGCLD
- signal(SIGCLD, SIG_DFL);
- #else
- signal(SIGCHLD, SIG_DFL);
- #endif
-
- fclose(stderr); /* Arrghh!! It's Stuart code!! */
-
- for(;;) {
- GATHER_MSG msg;
- size_t nbytes;
- const char *p;
-
- msg.usefulness = slow_poll( dbgfp, dbgall, &nbytes );
- p = gather_buffer;
- while( nbytes ) {
- msg.ndata = nbytes > sizeof(msg.data)? sizeof(msg.data) : nbytes;
- memcpy( msg.data, p, msg.ndata );
- nbytes -= msg.ndata;
- p += msg.ndata;
-
- while( write( pipefd, &msg, sizeof(msg) ) != sizeof(msg) ) {
- if( errno == EINTR )
- continue;
- if( errno == EAGAIN ) {
- struct timeval tv;
- tv.tv_sec = 0;
- tv.tv_usec = 50000;
- select(0, NULL, NULL, NULL, &tv);
- continue;
- }
- if( errno == EPIPE ) /* parent has exited, so give up */
- exit(0);
-
- /* we can't do very much here because stderr is closed */
- if( dbgfp )
- fprintf(dbgfp, "gatherer can't write to pipe: %s\n",
- strerror(errno) );
- /* we start a new poll to give the system some time */
- nbytes = 0;
- break;
- }
- }
- }
- /* we are killed when the parent dies */
-}
-
-
-static int
-read_a_msg( int fd, GATHER_MSG *msg )
-{
- char *buffer = (char*)msg;
- size_t length = sizeof( *msg );
- int n;
-
- do {
- do {
- n = read(fd, buffer, length );
- } while( n == -1 && errno == EINTR );
- if( n == -1 )
- return -1;
- buffer += n;
- length -= n;
- } while( length );
- return 0;
-}
-
-
-static int
-gather_random( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level )
-{
- static pid_t gatherer_pid = 0;
- static int pipedes[2];
- GATHER_MSG msg;
- size_t n;
-
- if( !gatherer_pid ) {
- /* make sure we are not setuid */
- if( getuid() != geteuid() )
- BUG();
- /* time to start the gatherer process */
- if( pipe( pipedes ) ) {
- g10_log_error("pipe() failed: %s\n", strerror(errno));
- return -1;
- }
- gatherer_pid = fork();
- if( gatherer_pid == -1 ) {
- g10_log_error("can't for gatherer process: %s\n", strerror(errno));
- return -1;
- }
- if( !gatherer_pid ) {
- start_gatherer( pipedes[1] );
- /* oops, can't happen */
- return -1;
- }
- }
-
- /* now read from the gatherer */
- while( length ) {
- int goodness;
- ulong subtract;
-
- if( read_a_msg( pipedes[0], &msg ) ) {
- g10_log_error("reading from gatherer pipe failed: %s\n",
- strerror(errno));
- return -1;
- }
-
-
- if( level > 1 ) {
- if( msg.usefulness > 30 )
- goodness = 100;
- else if ( msg.usefulness )
- goodness = msg.usefulness * 100 / 30;
- else
- goodness = 0;
- }
- else if( level ) {
- if( msg.usefulness > 15 )
- goodness = 100;
- else if ( msg.usefulness )
- goodness = msg.usefulness * 100 / 15;
- else
- goodness = 0;
- }
- else
- goodness = 100; /* goodness of level 0 is always 100 % */
-
- n = msg.ndata;
- if( n > length )
- n = length;
- (*add)( msg.data, n, requester );
-
- /* this is the trick how e cope with the goodness */
- subtract = (ulong)n * goodness / 100;
- /* subtract at least 1 byte to avoid infinite loops */
- length -= subtract ? subtract : 1;
- }
-
- return 0;
-}
-
-
-
-#ifndef IS_MODULE
-static
-#endif
-const char * const gnupgext_version = "RNDUNIX ($Revision$)";
-
-
-static struct {
- int class;
- int version;
- void *func;
-} func_table[] = {
- { 40, 1, gather_random },
-};
-
-/****************
- * Enumerate the names of the functions together with informations about
- * this function. Set sequence to an integer with a initial value of 0 and
- * do not change it.
- * If what is 0 all kind of functions are returned.
- * Return values: class := class of function:
- * 10 = message digest algorithm info function
- * 11 = integer with available md algorithms
- * 20 = cipher algorithm info function
- * 21 = integer with available cipher algorithms
- * 30 = public key algorithm info function
- * 31 = integer with available pubkey algorithms
- * 40 = get read_random_source() function
- * 41 = get fast_random_poll function
- * version = interface version of the function/pointer
- * (currently this is 1 for all functions)
- */
-
-#ifndef IS_MODULE
-static
-#endif
-void *
-gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
-{
- void *ret;
- int i = *sequence;
-
- do {
- if ( i >= DIM(func_table) || i < 0 ) {
- return NULL;
- }
- *class = func_table[i].class;
- *vers = func_table[i].version;
- ret = func_table[i].func;
- i++;
- } while ( what && what != *class );
-
- *sequence = i;
- return ret;
-}
-
-#ifndef IS_MODULE
-void
-rndunix_constructor(void)
-{
- register_internal_cipher_extension( gnupgext_version,
- gnupgext_enum_func );
-}
-#endif
-
-
diff --git a/cipher/sha1.c b/cipher/sha1.c
deleted file mode 100644
index 04bdbac9..00000000
--- a/cipher/sha1.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/* sha1.c - SHA1 hash function
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * Please see below for more legal information!
- *
- * 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
- */
-
-
-/* Test vectors:
- *
- * "abc"
- * A999 3E36 4706 816A BA3E 2571 7850 C26C 9CD0 D89D
- *
- * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
- * 8498 3E44 1C3B D26E BAAE 4AA1 F951 29E5 E546 70F1
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "dynload.h"
-
-
-typedef struct {
- u32 h0,h1,h2,h3,h4;
- u32 nblocks;
- byte buf[64];
- int count;
-} SHA1_CONTEXT;
-
-
-#if defined(__GNUC__) && defined(__i386__)
-static inline u32
-rol(int n, u32 x)
-{
- __asm__("roll %%cl,%0"
- :"=r" (x)
- :"0" (x),"c" (n));
- return x;
-}
-#else
- #define rol(n,x) ( ((x) << (n)) | ((x) >> (32-(n))) )
-#endif
-
-
-
-
-void
-sha1_init( SHA1_CONTEXT *hd )
-{
- hd->h0 = 0x67452301;
- hd->h1 = 0xefcdab89;
- hd->h2 = 0x98badcfe;
- hd->h3 = 0x10325476;
- hd->h4 = 0xc3d2e1f0;
- hd->nblocks = 0;
- hd->count = 0;
-}
-
-
-/****************
- * Transform the message X which consists of 16 32-bit-words
- */
-static void
-transform( SHA1_CONTEXT *hd, byte *data )
-{
- u32 a,b,c,d,e,tm;
- u32 x[16];
-
- /* get values from the chaining vars */
- a = hd->h0;
- b = hd->h1;
- c = hd->h2;
- d = hd->h3;
- e = hd->h4;
-
- #ifdef BIG_ENDIAN_HOST
- memcpy( x, data, 64 );
- #else
- { int i;
- byte *p2;
- for(i=0, p2=(byte*)x; i < 16; i++, p2 += 4 ) {
- p2[3] = *data++;
- p2[2] = *data++;
- p2[1] = *data++;
- p2[0] = *data++;
- }
- }
- #endif
-
-
-#define K1 0x5A827999L
-#define K2 0x6ED9EBA1L
-#define K3 0x8F1BBCDCL
-#define K4 0xCA62C1D6L
-#define F1(x,y,z) ( z ^ ( x & ( y ^ z ) ) )
-#define F2(x,y,z) ( x ^ y ^ z )
-#define F3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) )
-#define F4(x,y,z) ( x ^ y ^ z )
-
-
-#define M(i) ( tm = x[i&0x0f] ^ x[(i-14)&0x0f] \
- ^ x[(i-8)&0x0f] ^ x[(i-3)&0x0f] \
- , (x[i&0x0f] = (tm << 1) | (tm >> 31)) )
-
-#define R(a,b,c,d,e,f,k,m) do { e += rol( 5, a ) \
- + f( b, c, d ) \
- + k \
- + m; \
- b = rol( 30, b ); \
- } while(0)
- R( a, b, c, d, e, F1, K1, x[ 0] );
- R( e, a, b, c, d, F1, K1, x[ 1] );
- R( d, e, a, b, c, F1, K1, x[ 2] );
- R( c, d, e, a, b, F1, K1, x[ 3] );
- R( b, c, d, e, a, F1, K1, x[ 4] );
- R( a, b, c, d, e, F1, K1, x[ 5] );
- R( e, a, b, c, d, F1, K1, x[ 6] );
- R( d, e, a, b, c, F1, K1, x[ 7] );
- R( c, d, e, a, b, F1, K1, x[ 8] );
- R( b, c, d, e, a, F1, K1, x[ 9] );
- R( a, b, c, d, e, F1, K1, x[10] );
- R( e, a, b, c, d, F1, K1, x[11] );
- R( d, e, a, b, c, F1, K1, x[12] );
- R( c, d, e, a, b, F1, K1, x[13] );
- R( b, c, d, e, a, F1, K1, x[14] );
- R( a, b, c, d, e, F1, K1, x[15] );
- R( e, a, b, c, d, F1, K1, M(16) );
- R( d, e, a, b, c, F1, K1, M(17) );
- R( c, d, e, a, b, F1, K1, M(18) );
- R( b, c, d, e, a, F1, K1, M(19) );
- R( a, b, c, d, e, F2, K2, M(20) );
- R( e, a, b, c, d, F2, K2, M(21) );
- R( d, e, a, b, c, F2, K2, M(22) );
- R( c, d, e, a, b, F2, K2, M(23) );
- R( b, c, d, e, a, F2, K2, M(24) );
- R( a, b, c, d, e, F2, K2, M(25) );
- R( e, a, b, c, d, F2, K2, M(26) );
- R( d, e, a, b, c, F2, K2, M(27) );
- R( c, d, e, a, b, F2, K2, M(28) );
- R( b, c, d, e, a, F2, K2, M(29) );
- R( a, b, c, d, e, F2, K2, M(30) );
- R( e, a, b, c, d, F2, K2, M(31) );
- R( d, e, a, b, c, F2, K2, M(32) );
- R( c, d, e, a, b, F2, K2, M(33) );
- R( b, c, d, e, a, F2, K2, M(34) );
- R( a, b, c, d, e, F2, K2, M(35) );
- R( e, a, b, c, d, F2, K2, M(36) );
- R( d, e, a, b, c, F2, K2, M(37) );
- R( c, d, e, a, b, F2, K2, M(38) );
- R( b, c, d, e, a, F2, K2, M(39) );
- R( a, b, c, d, e, F3, K3, M(40) );
- R( e, a, b, c, d, F3, K3, M(41) );
- R( d, e, a, b, c, F3, K3, M(42) );
- R( c, d, e, a, b, F3, K3, M(43) );
- R( b, c, d, e, a, F3, K3, M(44) );
- R( a, b, c, d, e, F3, K3, M(45) );
- R( e, a, b, c, d, F3, K3, M(46) );
- R( d, e, a, b, c, F3, K3, M(47) );
- R( c, d, e, a, b, F3, K3, M(48) );
- R( b, c, d, e, a, F3, K3, M(49) );
- R( a, b, c, d, e, F3, K3, M(50) );
- R( e, a, b, c, d, F3, K3, M(51) );
- R( d, e, a, b, c, F3, K3, M(52) );
- R( c, d, e, a, b, F3, K3, M(53) );
- R( b, c, d, e, a, F3, K3, M(54) );
- R( a, b, c, d, e, F3, K3, M(55) );
- R( e, a, b, c, d, F3, K3, M(56) );
- R( d, e, a, b, c, F3, K3, M(57) );
- R( c, d, e, a, b, F3, K3, M(58) );
- R( b, c, d, e, a, F3, K3, M(59) );
- R( a, b, c, d, e, F4, K4, M(60) );
- R( e, a, b, c, d, F4, K4, M(61) );
- R( d, e, a, b, c, F4, K4, M(62) );
- R( c, d, e, a, b, F4, K4, M(63) );
- R( b, c, d, e, a, F4, K4, M(64) );
- R( a, b, c, d, e, F4, K4, M(65) );
- R( e, a, b, c, d, F4, K4, M(66) );
- R( d, e, a, b, c, F4, K4, M(67) );
- R( c, d, e, a, b, F4, K4, M(68) );
- R( b, c, d, e, a, F4, K4, M(69) );
- R( a, b, c, d, e, F4, K4, M(70) );
- R( e, a, b, c, d, F4, K4, M(71) );
- R( d, e, a, b, c, F4, K4, M(72) );
- R( c, d, e, a, b, F4, K4, M(73) );
- R( b, c, d, e, a, F4, K4, M(74) );
- R( a, b, c, d, e, F4, K4, M(75) );
- R( e, a, b, c, d, F4, K4, M(76) );
- R( d, e, a, b, c, F4, K4, M(77) );
- R( c, d, e, a, b, F4, K4, M(78) );
- R( b, c, d, e, a, F4, K4, M(79) );
-
- /* update chainig vars */
- hd->h0 += a;
- hd->h1 += b;
- hd->h2 += c;
- hd->h3 += d;
- hd->h4 += e;
-}
-
-
-/* Update the message digest with the contents
- * of INBUF with length INLEN.
- */
-static void
-sha1_write( SHA1_CONTEXT *hd, byte *inbuf, size_t inlen)
-{
- if( hd->count == 64 ) { /* flush the buffer */
- transform( hd, hd->buf );
- hd->count = 0;
- hd->nblocks++;
- }
- if( !inbuf )
- return;
- if( hd->count ) {
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
- sha1_write( hd, NULL, 0 );
- if( !inlen )
- return;
- }
-
- while( inlen >= 64 ) {
- transform( hd, inbuf );
- hd->count = 0;
- hd->nblocks++;
- inlen -= 64;
- inbuf += 64;
- }
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
-}
-
-
-/* The routine final terminates the computation and
- * returns the digest.
- * The handle is prepared for a new cycle, but adding bytes to the
- * handle will the destroy the returned buffer.
- * Returns: 20 bytes representing the digest.
- */
-
-static void
-sha1_final(SHA1_CONTEXT *hd)
-{
- u32 t, msb, lsb;
- byte *p;
-
- sha1_write(hd, NULL, 0); /* flush */;
-
- msb = 0;
- t = hd->nblocks;
- if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
- msb++;
- msb += t >> 26;
- t = lsb;
- if( (lsb = t + hd->count) < t ) /* add the count */
- msb++;
- t = lsb;
- if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
- msb++;
- msb += t >> 29;
-
- if( hd->count < 56 ) { /* enough room */
- hd->buf[hd->count++] = 0x80; /* pad */
- while( hd->count < 56 )
- hd->buf[hd->count++] = 0; /* pad */
- }
- else { /* need one extra block */
- hd->buf[hd->count++] = 0x80; /* pad character */
- while( hd->count < 64 )
- hd->buf[hd->count++] = 0;
- sha1_write(hd, NULL, 0); /* flush */;
- memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
- }
- /* append the 64 bit count */
- hd->buf[56] = msb >> 24;
- hd->buf[57] = msb >> 16;
- hd->buf[58] = msb >> 8;
- hd->buf[59] = msb ;
- hd->buf[60] = lsb >> 24;
- hd->buf[61] = lsb >> 16;
- hd->buf[62] = lsb >> 8;
- hd->buf[63] = lsb ;
- transform( hd, hd->buf );
-
- p = hd->buf;
- #ifdef BIG_ENDIAN_HOST
- #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0)
- #else /* little endian */
- #define X(a) do { *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \
- *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0)
- #endif
- X(0);
- X(1);
- X(2);
- X(3);
- X(4);
- #undef X
-
-}
-
-static byte *
-sha1_read( SHA1_CONTEXT *hd )
-{
- return hd->buf;
-}
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-static const char *
-sha1_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- )
-{
- static byte asn[15] = /* Object ID is 1.3.14.3.2.26 */
- { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03,
- 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14 };
- if( algo != 2 )
- return NULL;
-
- *contextsize = sizeof(SHA1_CONTEXT);
- *r_asnoid = asn;
- *r_asnlen = DIM(asn);
- *r_mdlen = 20;
- *r_init = (void (*)(void *))sha1_init;
- *r_write = (void (*)(void *, byte*, size_t))sha1_write;
- *r_final = (void (*)(void *))sha1_final;
- *r_read = (byte *(*)(void *))sha1_read;
-
- return "SHA1";
-}
-
-
-
-#ifndef IS_MODULE
-static
-#endif
-const char * const gnupgext_version = "SHA1 ($Revision$)";
-
-static struct {
- int class;
- int version;
- int value;
- void (*func)(void);
-} func_table[] = {
- { 10, 1, 0, (void(*)(void))sha1_get_info },
- { 11, 1, 2 },
-};
-
-
-#ifndef IS_MODULE
-static
-#endif
-void *
-gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
-{
- void *ret;
- int i = *sequence;
-
- do {
- if( i >= DIM(func_table) || i < 0 ) {
- return NULL;
- }
- *class = func_table[i].class;
- *vers = func_table[i].version;
- switch( *class ) {
- case 11:
- case 21:
- case 31:
- ret = &func_table[i].value;
- break;
- default:
- ret = func_table[i].func;
- break;
- }
- i++;
- } while( what && what != *class );
-
- *sequence = i;
- return ret;
-}
-
-
-
-
-#ifndef IS_MODULE
-void
-sha1_constructor(void)
-{
- register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
-}
-#endif
-
diff --git a/cipher/smallprime.c b/cipher/smallprime.c
deleted file mode 100644
index 8187aa76..00000000
--- a/cipher/smallprime.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* smallprime.c - List of small primes
- * 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 "util.h"
-#include "types.h"
-
-/* Note: 2 is not included because it can be tested more easily
- * by looking at bit 0. The last entry in this list is marked by a zero
- */
-ushort
-small_prime_numbers[] = {
- 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43,
- 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101,
- 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
- 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
- 211, 223, 227, 229, 233, 239, 241, 251, 257, 263,
- 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
- 331, 337, 347, 349, 353, 359, 367, 373, 379, 383,
- 389, 397, 401, 409, 419, 421, 431, 433, 439, 443,
- 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
- 509, 521, 523, 541, 547, 557, 563, 569, 571, 577,
- 587, 593, 599, 601, 607, 613, 617, 619, 631, 641,
- 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
- 709, 719, 727, 733, 739, 743, 751, 757, 761, 769,
- 773, 787, 797, 809, 811, 821, 823, 827, 829, 839,
- 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
- 919, 929, 937, 941, 947, 953, 967, 971, 977, 983,
- 991, 997, 1009, 1013, 1019, 1021, 1031, 1033,
- 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091,
- 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151,
- 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213,
- 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277,
- 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307,
- 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399,
- 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451,
- 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493,
- 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559,
- 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609,
- 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667,
- 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733,
- 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789,
- 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871,
- 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931,
- 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997,
- 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053,
- 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111,
- 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161,
- 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243,
- 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297,
- 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357,
- 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411,
- 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473,
- 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551,
- 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633,
- 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687,
- 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729,
- 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791,
- 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851,
- 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917,
- 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999,
- 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061,
- 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137,
- 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209,
- 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271,
- 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331,
- 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391,
- 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467,
- 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533,
- 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583,
- 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643,
- 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709,
- 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779,
- 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851,
- 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917,
- 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989,
- 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049,
- 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111,
- 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177,
- 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243,
- 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297,
- 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391,
- 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457,
- 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519,
- 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597,
- 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657,
- 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729,
- 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799,
- 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889,
- 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951,
- 4957, 4967, 4969, 4973, 4987, 4993, 4999,
- 0
-};
-
-
diff --git a/cipher/tiger.c b/cipher/tiger.c
deleted file mode 100644
index 0765f0bb..00000000
--- a/cipher/tiger.c
+++ /dev/null
@@ -1,991 +0,0 @@
-/* tiger.c - The TIGER hash function
- * 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 <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-
-
-#ifdef HAVE_U64_TYPEDEF
-
-/* we really need it here, but as this is only experiment we
- * can live without Tiger */
-
-typedef struct {
- u64 a, b, c;
- byte buf[64];
- int count;
- u32 nblocks;
-} TIGER_CONTEXT;
-
-
-/*********************************
- * Okay, okay, this is not the fastest code - improvements are welcome.
- *
- */
-
-/* Some test vectors:
- * "" 24F0130C63AC9332 16166E76B1BB925F F373DE2D49584E7A
- * "abc" F258C1E88414AB2A 527AB541FFC5B8BF 935F7B951C132951
- * "Tiger" 9F00F599072300DD 276ABB38C8EB6DEC 37790C116F9D2BDF
- * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-"
- * 87FB2A9083851CF7 470D2CF810E6DF9E B586445034A5A386
- * "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789"
- * 467DB80863EBCE48 8DF1CD1261655DE9 57896565975F9197
- * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham"
- * 0C410A042968868A 1671DA5A3FD29A72 5EC1E457D3CDB303
- * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proc"
- * "eedings of Fast Software Encryption 3, Cambridge."
- * EBF591D5AFA655CE 7F22894FF87F54AC 89C811B6B0DA3193
- * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proc"
- * "eedings of Fast Software Encryption 3, Cambridge, 1996."
- * 3D9AEB03D1BD1A63 57B2774DFD6D5B24 DD68151D503974FC
- * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEF"
- * "GHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-"
- * 00B83EB4E53440C5 76AC6AAEE0A74858 25FD15E70A59FFE4
- */
-
-
-static u64 sbox1[256] = {
- 0x02aab17cf7e90c5eLL /* 0 */, 0xac424b03e243a8ecLL /* 1 */,
- 0x72cd5be30dd5fcd3LL /* 2 */, 0x6d019b93f6f97f3aLL /* 3 */,
- 0xcd9978ffd21f9193LL /* 4 */, 0x7573a1c9708029e2LL /* 5 */,
- 0xb164326b922a83c3LL /* 6 */, 0x46883eee04915870LL /* 7 */,
- 0xeaace3057103ece6LL /* 8 */, 0xc54169b808a3535cLL /* 9 */,
- 0x4ce754918ddec47cLL /* 10 */, 0x0aa2f4dfdc0df40cLL /* 11 */,
- 0x10b76f18a74dbefaLL /* 12 */, 0xc6ccb6235ad1ab6aLL /* 13 */,
- 0x13726121572fe2ffLL /* 14 */, 0x1a488c6f199d921eLL /* 15 */,
- 0x4bc9f9f4da0007caLL /* 16 */, 0x26f5e6f6e85241c7LL /* 17 */,
- 0x859079dbea5947b6LL /* 18 */, 0x4f1885c5c99e8c92LL /* 19 */,
- 0xd78e761ea96f864bLL /* 20 */, 0x8e36428c52b5c17dLL /* 21 */,
- 0x69cf6827373063c1LL /* 22 */, 0xb607c93d9bb4c56eLL /* 23 */,
- 0x7d820e760e76b5eaLL /* 24 */, 0x645c9cc6f07fdc42LL /* 25 */,
- 0xbf38a078243342e0LL /* 26 */, 0x5f6b343c9d2e7d04LL /* 27 */,
- 0xf2c28aeb600b0ec6LL /* 28 */, 0x6c0ed85f7254bcacLL /* 29 */,
- 0x71592281a4db4fe5LL /* 30 */, 0x1967fa69ce0fed9fLL /* 31 */,
- 0xfd5293f8b96545dbLL /* 32 */, 0xc879e9d7f2a7600bLL /* 33 */,
- 0x860248920193194eLL /* 34 */, 0xa4f9533b2d9cc0b3LL /* 35 */,
- 0x9053836c15957613LL /* 36 */, 0xdb6dcf8afc357bf1LL /* 37 */,
- 0x18beea7a7a370f57LL /* 38 */, 0x037117ca50b99066LL /* 39 */,
- 0x6ab30a9774424a35LL /* 40 */, 0xf4e92f02e325249bLL /* 41 */,
- 0x7739db07061ccae1LL /* 42 */, 0xd8f3b49ceca42a05LL /* 43 */,
- 0xbd56be3f51382f73LL /* 44 */, 0x45faed5843b0bb28LL /* 45 */,
- 0x1c813d5c11bf1f83LL /* 46 */, 0x8af0e4b6d75fa169LL /* 47 */,
- 0x33ee18a487ad9999LL /* 48 */, 0x3c26e8eab1c94410LL /* 49 */,
- 0xb510102bc0a822f9LL /* 50 */, 0x141eef310ce6123bLL /* 51 */,
- 0xfc65b90059ddb154LL /* 52 */, 0xe0158640c5e0e607LL /* 53 */,
- 0x884e079826c3a3cfLL /* 54 */, 0x930d0d9523c535fdLL /* 55 */,
- 0x35638d754e9a2b00LL /* 56 */, 0x4085fccf40469dd5LL /* 57 */,
- 0xc4b17ad28be23a4cLL /* 58 */, 0xcab2f0fc6a3e6a2eLL /* 59 */,
- 0x2860971a6b943fcdLL /* 60 */, 0x3dde6ee212e30446LL /* 61 */,
- 0x6222f32ae01765aeLL /* 62 */, 0x5d550bb5478308feLL /* 63 */,
- 0xa9efa98da0eda22aLL /* 64 */, 0xc351a71686c40da7LL /* 65 */,
- 0x1105586d9c867c84LL /* 66 */, 0xdcffee85fda22853LL /* 67 */,
- 0xccfbd0262c5eef76LL /* 68 */, 0xbaf294cb8990d201LL /* 69 */,
- 0xe69464f52afad975LL /* 70 */, 0x94b013afdf133e14LL /* 71 */,
- 0x06a7d1a32823c958LL /* 72 */, 0x6f95fe5130f61119LL /* 73 */,
- 0xd92ab34e462c06c0LL /* 74 */, 0xed7bde33887c71d2LL /* 75 */,
- 0x79746d6e6518393eLL /* 76 */, 0x5ba419385d713329LL /* 77 */,
- 0x7c1ba6b948a97564LL /* 78 */, 0x31987c197bfdac67LL /* 79 */,
- 0xde6c23c44b053d02LL /* 80 */, 0x581c49fed002d64dLL /* 81 */,
- 0xdd474d6338261571LL /* 82 */, 0xaa4546c3e473d062LL /* 83 */,
- 0x928fce349455f860LL /* 84 */, 0x48161bbacaab94d9LL /* 85 */,
- 0x63912430770e6f68LL /* 86 */, 0x6ec8a5e602c6641cLL /* 87 */,
- 0x87282515337ddd2bLL /* 88 */, 0x2cda6b42034b701bLL /* 89 */,
- 0xb03d37c181cb096dLL /* 90 */, 0xe108438266c71c6fLL /* 91 */,
- 0x2b3180c7eb51b255LL /* 92 */, 0xdf92b82f96c08bbcLL /* 93 */,
- 0x5c68c8c0a632f3baLL /* 94 */, 0x5504cc861c3d0556LL /* 95 */,
- 0xabbfa4e55fb26b8fLL /* 96 */, 0x41848b0ab3baceb4LL /* 97 */,
- 0xb334a273aa445d32LL /* 98 */, 0xbca696f0a85ad881LL /* 99 */,
- 0x24f6ec65b528d56cLL /* 100 */, 0x0ce1512e90f4524aLL /* 101 */,
- 0x4e9dd79d5506d35aLL /* 102 */, 0x258905fac6ce9779LL /* 103 */,
- 0x2019295b3e109b33LL /* 104 */, 0xf8a9478b73a054ccLL /* 105 */,
- 0x2924f2f934417eb0LL /* 106 */, 0x3993357d536d1bc4LL /* 107 */,
- 0x38a81ac21db6ff8bLL /* 108 */, 0x47c4fbf17d6016bfLL /* 109 */,
- 0x1e0faadd7667e3f5LL /* 110 */, 0x7abcff62938beb96LL /* 111 */,
- 0xa78dad948fc179c9LL /* 112 */, 0x8f1f98b72911e50dLL /* 113 */,
- 0x61e48eae27121a91LL /* 114 */, 0x4d62f7ad31859808LL /* 115 */,
- 0xeceba345ef5ceaebLL /* 116 */, 0xf5ceb25ebc9684ceLL /* 117 */,
- 0xf633e20cb7f76221LL /* 118 */, 0xa32cdf06ab8293e4LL /* 119 */,
- 0x985a202ca5ee2ca4LL /* 120 */, 0xcf0b8447cc8a8fb1LL /* 121 */,
- 0x9f765244979859a3LL /* 122 */, 0xa8d516b1a1240017LL /* 123 */,
- 0x0bd7ba3ebb5dc726LL /* 124 */, 0xe54bca55b86adb39LL /* 125 */,
- 0x1d7a3afd6c478063LL /* 126 */, 0x519ec608e7669eddLL /* 127 */,
- 0x0e5715a2d149aa23LL /* 128 */, 0x177d4571848ff194LL /* 129 */,
- 0xeeb55f3241014c22LL /* 130 */, 0x0f5e5ca13a6e2ec2LL /* 131 */,
- 0x8029927b75f5c361LL /* 132 */, 0xad139fabc3d6e436LL /* 133 */,
- 0x0d5df1a94ccf402fLL /* 134 */, 0x3e8bd948bea5dfc8LL /* 135 */,
- 0xa5a0d357bd3ff77eLL /* 136 */, 0xa2d12e251f74f645LL /* 137 */,
- 0x66fd9e525e81a082LL /* 138 */, 0x2e0c90ce7f687a49LL /* 139 */,
- 0xc2e8bcbeba973bc5LL /* 140 */, 0x000001bce509745fLL /* 141 */,
- 0x423777bbe6dab3d6LL /* 142 */, 0xd1661c7eaef06eb5LL /* 143 */,
- 0xa1781f354daacfd8LL /* 144 */, 0x2d11284a2b16affcLL /* 145 */,
- 0xf1fc4f67fa891d1fLL /* 146 */, 0x73ecc25dcb920adaLL /* 147 */,
- 0xae610c22c2a12651LL /* 148 */, 0x96e0a810d356b78aLL /* 149 */,
- 0x5a9a381f2fe7870fLL /* 150 */, 0xd5ad62ede94e5530LL /* 151 */,
- 0xd225e5e8368d1427LL /* 152 */, 0x65977b70c7af4631LL /* 153 */,
- 0x99f889b2de39d74fLL /* 154 */, 0x233f30bf54e1d143LL /* 155 */,
- 0x9a9675d3d9a63c97LL /* 156 */, 0x5470554ff334f9a8LL /* 157 */,
- 0x166acb744a4f5688LL /* 158 */, 0x70c74caab2e4aeadLL /* 159 */,
- 0xf0d091646f294d12LL /* 160 */, 0x57b82a89684031d1LL /* 161 */,
- 0xefd95a5a61be0b6bLL /* 162 */, 0x2fbd12e969f2f29aLL /* 163 */,
- 0x9bd37013feff9fe8LL /* 164 */, 0x3f9b0404d6085a06LL /* 165 */,
- 0x4940c1f3166cfe15LL /* 166 */, 0x09542c4dcdf3defbLL /* 167 */,
- 0xb4c5218385cd5ce3LL /* 168 */, 0xc935b7dc4462a641LL /* 169 */,
- 0x3417f8a68ed3b63fLL /* 170 */, 0xb80959295b215b40LL /* 171 */,
- 0xf99cdaef3b8c8572LL /* 172 */, 0x018c0614f8fcb95dLL /* 173 */,
- 0x1b14accd1a3acdf3LL /* 174 */, 0x84d471f200bb732dLL /* 175 */,
- 0xc1a3110e95e8da16LL /* 176 */, 0x430a7220bf1a82b8LL /* 177 */,
- 0xb77e090d39df210eLL /* 178 */, 0x5ef4bd9f3cd05e9dLL /* 179 */,
- 0x9d4ff6da7e57a444LL /* 180 */, 0xda1d60e183d4a5f8LL /* 181 */,
- 0xb287c38417998e47LL /* 182 */, 0xfe3edc121bb31886LL /* 183 */,
- 0xc7fe3ccc980ccbefLL /* 184 */, 0xe46fb590189bfd03LL /* 185 */,
- 0x3732fd469a4c57dcLL /* 186 */, 0x7ef700a07cf1ad65LL /* 187 */,
- 0x59c64468a31d8859LL /* 188 */, 0x762fb0b4d45b61f6LL /* 189 */,
- 0x155baed099047718LL /* 190 */, 0x68755e4c3d50baa6LL /* 191 */,
- 0xe9214e7f22d8b4dfLL /* 192 */, 0x2addbf532eac95f4LL /* 193 */,
- 0x32ae3909b4bd0109LL /* 194 */, 0x834df537b08e3450LL /* 195 */,
- 0xfa209da84220728dLL /* 196 */, 0x9e691d9b9efe23f7LL /* 197 */,
- 0x0446d288c4ae8d7fLL /* 198 */, 0x7b4cc524e169785bLL /* 199 */,
- 0x21d87f0135ca1385LL /* 200 */, 0xcebb400f137b8aa5LL /* 201 */,
- 0x272e2b66580796beLL /* 202 */, 0x3612264125c2b0deLL /* 203 */,
- 0x057702bdad1efbb2LL /* 204 */, 0xd4babb8eacf84be9LL /* 205 */,
- 0x91583139641bc67bLL /* 206 */, 0x8bdc2de08036e024LL /* 207 */,
- 0x603c8156f49f68edLL /* 208 */, 0xf7d236f7dbef5111LL /* 209 */,
- 0x9727c4598ad21e80LL /* 210 */, 0xa08a0896670a5fd7LL /* 211 */,
- 0xcb4a8f4309eba9cbLL /* 212 */, 0x81af564b0f7036a1LL /* 213 */,
- 0xc0b99aa778199abdLL /* 214 */, 0x959f1ec83fc8e952LL /* 215 */,
- 0x8c505077794a81b9LL /* 216 */, 0x3acaaf8f056338f0LL /* 217 */,
- 0x07b43f50627a6778LL /* 218 */, 0x4a44ab49f5eccc77LL /* 219 */,
- 0x3bc3d6e4b679ee98LL /* 220 */, 0x9cc0d4d1cf14108cLL /* 221 */,
- 0x4406c00b206bc8a0LL /* 222 */, 0x82a18854c8d72d89LL /* 223 */,
- 0x67e366b35c3c432cLL /* 224 */, 0xb923dd61102b37f2LL /* 225 */,
- 0x56ab2779d884271dLL /* 226 */, 0xbe83e1b0ff1525afLL /* 227 */,
- 0xfb7c65d4217e49a9LL /* 228 */, 0x6bdbe0e76d48e7d4LL /* 229 */,
- 0x08df828745d9179eLL /* 230 */, 0x22ea6a9add53bd34LL /* 231 */,
- 0xe36e141c5622200aLL /* 232 */, 0x7f805d1b8cb750eeLL /* 233 */,
- 0xafe5c7a59f58e837LL /* 234 */, 0xe27f996a4fb1c23cLL /* 235 */,
- 0xd3867dfb0775f0d0LL /* 236 */, 0xd0e673de6e88891aLL /* 237 */,
- 0x123aeb9eafb86c25LL /* 238 */, 0x30f1d5d5c145b895LL /* 239 */,
- 0xbb434a2dee7269e7LL /* 240 */, 0x78cb67ecf931fa38LL /* 241 */,
- 0xf33b0372323bbf9cLL /* 242 */, 0x52d66336fb279c74LL /* 243 */,
- 0x505f33ac0afb4eaaLL /* 244 */, 0xe8a5cd99a2cce187LL /* 245 */,
- 0x534974801e2d30bbLL /* 246 */, 0x8d2d5711d5876d90LL /* 247 */,
- 0x1f1a412891bc038eLL /* 248 */, 0xd6e2e71d82e56648LL /* 249 */,
- 0x74036c3a497732b7LL /* 250 */, 0x89b67ed96361f5abLL /* 251 */,
- 0xffed95d8f1ea02a2LL /* 252 */, 0xe72b3bd61464d43dLL /* 253 */,
- 0xa6300f170bdc4820LL /* 254 */, 0xebc18760ed78a77aLL /* 255 */
-};
-static u64 sbox2[256] = {
- 0xe6a6be5a05a12138LL /* 256 */, 0xb5a122a5b4f87c98LL /* 257 */,
- 0x563c6089140b6990LL /* 258 */, 0x4c46cb2e391f5dd5LL /* 259 */,
- 0xd932addbc9b79434LL /* 260 */, 0x08ea70e42015aff5LL /* 261 */,
- 0xd765a6673e478cf1LL /* 262 */, 0xc4fb757eab278d99LL /* 263 */,
- 0xdf11c6862d6e0692LL /* 264 */, 0xddeb84f10d7f3b16LL /* 265 */,
- 0x6f2ef604a665ea04LL /* 266 */, 0x4a8e0f0ff0e0dfb3LL /* 267 */,
- 0xa5edeef83dbcba51LL /* 268 */, 0xfc4f0a2a0ea4371eLL /* 269 */,
- 0xe83e1da85cb38429LL /* 270 */, 0xdc8ff882ba1b1ce2LL /* 271 */,
- 0xcd45505e8353e80dLL /* 272 */, 0x18d19a00d4db0717LL /* 273 */,
- 0x34a0cfeda5f38101LL /* 274 */, 0x0be77e518887caf2LL /* 275 */,
- 0x1e341438b3c45136LL /* 276 */, 0xe05797f49089ccf9LL /* 277 */,
- 0xffd23f9df2591d14LL /* 278 */, 0x543dda228595c5cdLL /* 279 */,
- 0x661f81fd99052a33LL /* 280 */, 0x8736e641db0f7b76LL /* 281 */,
- 0x15227725418e5307LL /* 282 */, 0xe25f7f46162eb2faLL /* 283 */,
- 0x48a8b2126c13d9feLL /* 284 */, 0xafdc541792e76eeaLL /* 285 */,
- 0x03d912bfc6d1898fLL /* 286 */, 0x31b1aafa1b83f51bLL /* 287 */,
- 0xf1ac2796e42ab7d9LL /* 288 */, 0x40a3a7d7fcd2ebacLL /* 289 */,
- 0x1056136d0afbbcc5LL /* 290 */, 0x7889e1dd9a6d0c85LL /* 291 */,
- 0xd33525782a7974aaLL /* 292 */, 0xa7e25d09078ac09bLL /* 293 */,
- 0xbd4138b3eac6edd0LL /* 294 */, 0x920abfbe71eb9e70LL /* 295 */,
- 0xa2a5d0f54fc2625cLL /* 296 */, 0xc054e36b0b1290a3LL /* 297 */,
- 0xf6dd59ff62fe932bLL /* 298 */, 0x3537354511a8ac7dLL /* 299 */,
- 0xca845e9172fadcd4LL /* 300 */, 0x84f82b60329d20dcLL /* 301 */,
- 0x79c62ce1cd672f18LL /* 302 */, 0x8b09a2add124642cLL /* 303 */,
- 0xd0c1e96a19d9e726LL /* 304 */, 0x5a786a9b4ba9500cLL /* 305 */,
- 0x0e020336634c43f3LL /* 306 */, 0xc17b474aeb66d822LL /* 307 */,
- 0x6a731ae3ec9baac2LL /* 308 */, 0x8226667ae0840258LL /* 309 */,
- 0x67d4567691caeca5LL /* 310 */, 0x1d94155c4875adb5LL /* 311 */,
- 0x6d00fd985b813fdfLL /* 312 */, 0x51286efcb774cd06LL /* 313 */,
- 0x5e8834471fa744afLL /* 314 */, 0xf72ca0aee761ae2eLL /* 315 */,
- 0xbe40e4cdaee8e09aLL /* 316 */, 0xe9970bbb5118f665LL /* 317 */,
- 0x726e4beb33df1964LL /* 318 */, 0x703b000729199762LL /* 319 */,
- 0x4631d816f5ef30a7LL /* 320 */, 0xb880b5b51504a6beLL /* 321 */,
- 0x641793c37ed84b6cLL /* 322 */, 0x7b21ed77f6e97d96LL /* 323 */,
- 0x776306312ef96b73LL /* 324 */, 0xae528948e86ff3f4LL /* 325 */,
- 0x53dbd7f286a3f8f8LL /* 326 */, 0x16cadce74cfc1063LL /* 327 */,
- 0x005c19bdfa52c6ddLL /* 328 */, 0x68868f5d64d46ad3LL /* 329 */,
- 0x3a9d512ccf1e186aLL /* 330 */, 0x367e62c2385660aeLL /* 331 */,
- 0xe359e7ea77dcb1d7LL /* 332 */, 0x526c0773749abe6eLL /* 333 */,
- 0x735ae5f9d09f734bLL /* 334 */, 0x493fc7cc8a558ba8LL /* 335 */,
- 0xb0b9c1533041ab45LL /* 336 */, 0x321958ba470a59bdLL /* 337 */,
- 0x852db00b5f46c393LL /* 338 */, 0x91209b2bd336b0e5LL /* 339 */,
- 0x6e604f7d659ef19fLL /* 340 */, 0xb99a8ae2782ccb24LL /* 341 */,
- 0xccf52ab6c814c4c7LL /* 342 */, 0x4727d9afbe11727bLL /* 343 */,
- 0x7e950d0c0121b34dLL /* 344 */, 0x756f435670ad471fLL /* 345 */,
- 0xf5add442615a6849LL /* 346 */, 0x4e87e09980b9957aLL /* 347 */,
- 0x2acfa1df50aee355LL /* 348 */, 0xd898263afd2fd556LL /* 349 */,
- 0xc8f4924dd80c8fd6LL /* 350 */, 0xcf99ca3d754a173aLL /* 351 */,
- 0xfe477bacaf91bf3cLL /* 352 */, 0xed5371f6d690c12dLL /* 353 */,
- 0x831a5c285e687094LL /* 354 */, 0xc5d3c90a3708a0a4LL /* 355 */,
- 0x0f7f903717d06580LL /* 356 */, 0x19f9bb13b8fdf27fLL /* 357 */,
- 0xb1bd6f1b4d502843LL /* 358 */, 0x1c761ba38fff4012LL /* 359 */,
- 0x0d1530c4e2e21f3bLL /* 360 */, 0x8943ce69a7372c8aLL /* 361 */,
- 0xe5184e11feb5ce66LL /* 362 */, 0x618bdb80bd736621LL /* 363 */,
- 0x7d29bad68b574d0bLL /* 364 */, 0x81bb613e25e6fe5bLL /* 365 */,
- 0x071c9c10bc07913fLL /* 366 */, 0xc7beeb7909ac2d97LL /* 367 */,
- 0xc3e58d353bc5d757LL /* 368 */, 0xeb017892f38f61e8LL /* 369 */,
- 0xd4effb9c9b1cc21aLL /* 370 */, 0x99727d26f494f7abLL /* 371 */,
- 0xa3e063a2956b3e03LL /* 372 */, 0x9d4a8b9a4aa09c30LL /* 373 */,
- 0x3f6ab7d500090fb4LL /* 374 */, 0x9cc0f2a057268ac0LL /* 375 */,
- 0x3dee9d2dedbf42d1LL /* 376 */, 0x330f49c87960a972LL /* 377 */,
- 0xc6b2720287421b41LL /* 378 */, 0x0ac59ec07c00369cLL /* 379 */,
- 0xef4eac49cb353425LL /* 380 */, 0xf450244eef0129d8LL /* 381 */,
- 0x8acc46e5caf4deb6LL /* 382 */, 0x2ffeab63989263f7LL /* 383 */,
- 0x8f7cb9fe5d7a4578LL /* 384 */, 0x5bd8f7644e634635LL /* 385 */,
- 0x427a7315bf2dc900LL /* 386 */, 0x17d0c4aa2125261cLL /* 387 */,
- 0x3992486c93518e50LL /* 388 */, 0xb4cbfee0a2d7d4c3LL /* 389 */,
- 0x7c75d6202c5ddd8dLL /* 390 */, 0xdbc295d8e35b6c61LL /* 391 */,
- 0x60b369d302032b19LL /* 392 */, 0xce42685fdce44132LL /* 393 */,
- 0x06f3ddb9ddf65610LL /* 394 */, 0x8ea4d21db5e148f0LL /* 395 */,
- 0x20b0fce62fcd496fLL /* 396 */, 0x2c1b912358b0ee31LL /* 397 */,
- 0xb28317b818f5a308LL /* 398 */, 0xa89c1e189ca6d2cfLL /* 399 */,
- 0x0c6b18576aaadbc8LL /* 400 */, 0xb65deaa91299fae3LL /* 401 */,
- 0xfb2b794b7f1027e7LL /* 402 */, 0x04e4317f443b5bebLL /* 403 */,
- 0x4b852d325939d0a6LL /* 404 */, 0xd5ae6beefb207ffcLL /* 405 */,
- 0x309682b281c7d374LL /* 406 */, 0xbae309a194c3b475LL /* 407 */,
- 0x8cc3f97b13b49f05LL /* 408 */, 0x98a9422ff8293967LL /* 409 */,
- 0x244b16b01076ff7cLL /* 410 */, 0xf8bf571c663d67eeLL /* 411 */,
- 0x1f0d6758eee30da1LL /* 412 */, 0xc9b611d97adeb9b7LL /* 413 */,
- 0xb7afd5887b6c57a2LL /* 414 */, 0x6290ae846b984fe1LL /* 415 */,
- 0x94df4cdeacc1a5fdLL /* 416 */, 0x058a5bd1c5483affLL /* 417 */,
- 0x63166cc142ba3c37LL /* 418 */, 0x8db8526eb2f76f40LL /* 419 */,
- 0xe10880036f0d6d4eLL /* 420 */, 0x9e0523c9971d311dLL /* 421 */,
- 0x45ec2824cc7cd691LL /* 422 */, 0x575b8359e62382c9LL /* 423 */,
- 0xfa9e400dc4889995LL /* 424 */, 0xd1823ecb45721568LL /* 425 */,
- 0xdafd983b8206082fLL /* 426 */, 0xaa7d29082386a8cbLL /* 427 */,
- 0x269fcd4403b87588LL /* 428 */, 0x1b91f5f728bdd1e0LL /* 429 */,
- 0xe4669f39040201f6LL /* 430 */, 0x7a1d7c218cf04adeLL /* 431 */,
- 0x65623c29d79ce5ceLL /* 432 */, 0x2368449096c00bb1LL /* 433 */,
- 0xab9bf1879da503baLL /* 434 */, 0xbc23ecb1a458058eLL /* 435 */,
- 0x9a58df01bb401eccLL /* 436 */, 0xa070e868a85f143dLL /* 437 */,
- 0x4ff188307df2239eLL /* 438 */, 0x14d565b41a641183LL /* 439 */,
- 0xee13337452701602LL /* 440 */, 0x950e3dcf3f285e09LL /* 441 */,
- 0x59930254b9c80953LL /* 442 */, 0x3bf299408930da6dLL /* 443 */,
- 0xa955943f53691387LL /* 444 */, 0xa15edecaa9cb8784LL /* 445 */,
- 0x29142127352be9a0LL /* 446 */, 0x76f0371fff4e7afbLL /* 447 */,
- 0x0239f450274f2228LL /* 448 */, 0xbb073af01d5e868bLL /* 449 */,
- 0xbfc80571c10e96c1LL /* 450 */, 0xd267088568222e23LL /* 451 */,
- 0x9671a3d48e80b5b0LL /* 452 */, 0x55b5d38ae193bb81LL /* 453 */,
- 0x693ae2d0a18b04b8LL /* 454 */, 0x5c48b4ecadd5335fLL /* 455 */,
- 0xfd743b194916a1caLL /* 456 */, 0x2577018134be98c4LL /* 457 */,
- 0xe77987e83c54a4adLL /* 458 */, 0x28e11014da33e1b9LL /* 459 */,
- 0x270cc59e226aa213LL /* 460 */, 0x71495f756d1a5f60LL /* 461 */,
- 0x9be853fb60afef77LL /* 462 */, 0xadc786a7f7443dbfLL /* 463 */,
- 0x0904456173b29a82LL /* 464 */, 0x58bc7a66c232bd5eLL /* 465 */,
- 0xf306558c673ac8b2LL /* 466 */, 0x41f639c6b6c9772aLL /* 467 */,
- 0x216defe99fda35daLL /* 468 */, 0x11640cc71c7be615LL /* 469 */,
- 0x93c43694565c5527LL /* 470 */, 0xea038e6246777839LL /* 471 */,
- 0xf9abf3ce5a3e2469LL /* 472 */, 0x741e768d0fd312d2LL /* 473 */,
- 0x0144b883ced652c6LL /* 474 */, 0xc20b5a5ba33f8552LL /* 475 */,
- 0x1ae69633c3435a9dLL /* 476 */, 0x97a28ca4088cfdecLL /* 477 */,
- 0x8824a43c1e96f420LL /* 478 */, 0x37612fa66eeea746LL /* 479 */,
- 0x6b4cb165f9cf0e5aLL /* 480 */, 0x43aa1c06a0abfb4aLL /* 481 */,
- 0x7f4dc26ff162796bLL /* 482 */, 0x6cbacc8e54ed9b0fLL /* 483 */,
- 0xa6b7ffefd2bb253eLL /* 484 */, 0x2e25bc95b0a29d4fLL /* 485 */,
- 0x86d6a58bdef1388cLL /* 486 */, 0xded74ac576b6f054LL /* 487 */,
- 0x8030bdbc2b45805dLL /* 488 */, 0x3c81af70e94d9289LL /* 489 */,
- 0x3eff6dda9e3100dbLL /* 490 */, 0xb38dc39fdfcc8847LL /* 491 */,
- 0x123885528d17b87eLL /* 492 */, 0xf2da0ed240b1b642LL /* 493 */,
- 0x44cefadcd54bf9a9LL /* 494 */, 0x1312200e433c7ee6LL /* 495 */,
- 0x9ffcc84f3a78c748LL /* 496 */, 0xf0cd1f72248576bbLL /* 497 */,
- 0xec6974053638cfe4LL /* 498 */, 0x2ba7b67c0cec4e4cLL /* 499 */,
- 0xac2f4df3e5ce32edLL /* 500 */, 0xcb33d14326ea4c11LL /* 501 */,
- 0xa4e9044cc77e58bcLL /* 502 */, 0x5f513293d934fcefLL /* 503 */,
- 0x5dc9645506e55444LL /* 504 */, 0x50de418f317de40aLL /* 505 */,
- 0x388cb31a69dde259LL /* 506 */, 0x2db4a83455820a86LL /* 507 */,
- 0x9010a91e84711ae9LL /* 508 */, 0x4df7f0b7b1498371LL /* 509 */,
- 0xd62a2eabc0977179LL /* 510 */, 0x22fac097aa8d5c0eLL /* 511 */
-};
-static u64 sbox3[256] = {
- 0xf49fcc2ff1daf39bLL /* 512 */, 0x487fd5c66ff29281LL /* 513 */,
- 0xe8a30667fcdca83fLL /* 514 */, 0x2c9b4be3d2fcce63LL /* 515 */,
- 0xda3ff74b93fbbbc2LL /* 516 */, 0x2fa165d2fe70ba66LL /* 517 */,
- 0xa103e279970e93d4LL /* 518 */, 0xbecdec77b0e45e71LL /* 519 */,
- 0xcfb41e723985e497LL /* 520 */, 0xb70aaa025ef75017LL /* 521 */,
- 0xd42309f03840b8e0LL /* 522 */, 0x8efc1ad035898579LL /* 523 */,
- 0x96c6920be2b2abc5LL /* 524 */, 0x66af4163375a9172LL /* 525 */,
- 0x2174abdcca7127fbLL /* 526 */, 0xb33ccea64a72ff41LL /* 527 */,
- 0xf04a4933083066a5LL /* 528 */, 0x8d970acdd7289af5LL /* 529 */,
- 0x8f96e8e031c8c25eLL /* 530 */, 0xf3fec02276875d47LL /* 531 */,
- 0xec7bf310056190ddLL /* 532 */, 0xf5adb0aebb0f1491LL /* 533 */,
- 0x9b50f8850fd58892LL /* 534 */, 0x4975488358b74de8LL /* 535 */,
- 0xa3354ff691531c61LL /* 536 */, 0x0702bbe481d2c6eeLL /* 537 */,
- 0x89fb24057deded98LL /* 538 */, 0xac3075138596e902LL /* 539 */,
- 0x1d2d3580172772edLL /* 540 */, 0xeb738fc28e6bc30dLL /* 541 */,
- 0x5854ef8f63044326LL /* 542 */, 0x9e5c52325add3bbeLL /* 543 */,
- 0x90aa53cf325c4623LL /* 544 */, 0xc1d24d51349dd067LL /* 545 */,
- 0x2051cfeea69ea624LL /* 546 */, 0x13220f0a862e7e4fLL /* 547 */,
- 0xce39399404e04864LL /* 548 */, 0xd9c42ca47086fcb7LL /* 549 */,
- 0x685ad2238a03e7ccLL /* 550 */, 0x066484b2ab2ff1dbLL /* 551 */,
- 0xfe9d5d70efbf79ecLL /* 552 */, 0x5b13b9dd9c481854LL /* 553 */,
- 0x15f0d475ed1509adLL /* 554 */, 0x0bebcd060ec79851LL /* 555 */,
- 0xd58c6791183ab7f8LL /* 556 */, 0xd1187c5052f3eee4LL /* 557 */,
- 0xc95d1192e54e82ffLL /* 558 */, 0x86eea14cb9ac6ca2LL /* 559 */,
- 0x3485beb153677d5dLL /* 560 */, 0xdd191d781f8c492aLL /* 561 */,
- 0xf60866baa784ebf9LL /* 562 */, 0x518f643ba2d08c74LL /* 563 */,
- 0x8852e956e1087c22LL /* 564 */, 0xa768cb8dc410ae8dLL /* 565 */,
- 0x38047726bfec8e1aLL /* 566 */, 0xa67738b4cd3b45aaLL /* 567 */,
- 0xad16691cec0dde19LL /* 568 */, 0xc6d4319380462e07LL /* 569 */,
- 0xc5a5876d0ba61938LL /* 570 */, 0x16b9fa1fa58fd840LL /* 571 */,
- 0x188ab1173ca74f18LL /* 572 */, 0xabda2f98c99c021fLL /* 573 */,
- 0x3e0580ab134ae816LL /* 574 */, 0x5f3b05b773645abbLL /* 575 */,
- 0x2501a2be5575f2f6LL /* 576 */, 0x1b2f74004e7e8ba9LL /* 577 */,
- 0x1cd7580371e8d953LL /* 578 */, 0x7f6ed89562764e30LL /* 579 */,
- 0xb15926ff596f003dLL /* 580 */, 0x9f65293da8c5d6b9LL /* 581 */,
- 0x6ecef04dd690f84cLL /* 582 */, 0x4782275fff33af88LL /* 583 */,
- 0xe41433083f820801LL /* 584 */, 0xfd0dfe409a1af9b5LL /* 585 */,
- 0x4325a3342cdb396bLL /* 586 */, 0x8ae77e62b301b252LL /* 587 */,
- 0xc36f9e9f6655615aLL /* 588 */, 0x85455a2d92d32c09LL /* 589 */,
- 0xf2c7dea949477485LL /* 590 */, 0x63cfb4c133a39ebaLL /* 591 */,
- 0x83b040cc6ebc5462LL /* 592 */, 0x3b9454c8fdb326b0LL /* 593 */,
- 0x56f56a9e87ffd78cLL /* 594 */, 0x2dc2940d99f42bc6LL /* 595 */,
- 0x98f7df096b096e2dLL /* 596 */, 0x19a6e01e3ad852bfLL /* 597 */,
- 0x42a99ccbdbd4b40bLL /* 598 */, 0xa59998af45e9c559LL /* 599 */,
- 0x366295e807d93186LL /* 600 */, 0x6b48181bfaa1f773LL /* 601 */,
- 0x1fec57e2157a0a1dLL /* 602 */, 0x4667446af6201ad5LL /* 603 */,
- 0xe615ebcacfb0f075LL /* 604 */, 0xb8f31f4f68290778LL /* 605 */,
- 0x22713ed6ce22d11eLL /* 606 */, 0x3057c1a72ec3c93bLL /* 607 */,
- 0xcb46acc37c3f1f2fLL /* 608 */, 0xdbb893fd02aaf50eLL /* 609 */,
- 0x331fd92e600b9fcfLL /* 610 */, 0xa498f96148ea3ad6LL /* 611 */,
- 0xa8d8426e8b6a83eaLL /* 612 */, 0xa089b274b7735cdcLL /* 613 */,
- 0x87f6b3731e524a11LL /* 614 */, 0x118808e5cbc96749LL /* 615 */,
- 0x9906e4c7b19bd394LL /* 616 */, 0xafed7f7e9b24a20cLL /* 617 */,
- 0x6509eadeeb3644a7LL /* 618 */, 0x6c1ef1d3e8ef0edeLL /* 619 */,
- 0xb9c97d43e9798fb4LL /* 620 */, 0xa2f2d784740c28a3LL /* 621 */,
- 0x7b8496476197566fLL /* 622 */, 0x7a5be3e6b65f069dLL /* 623 */,
- 0xf96330ed78be6f10LL /* 624 */, 0xeee60de77a076a15LL /* 625 */,
- 0x2b4bee4aa08b9bd0LL /* 626 */, 0x6a56a63ec7b8894eLL /* 627 */,
- 0x02121359ba34fef4LL /* 628 */, 0x4cbf99f8283703fcLL /* 629 */,
- 0x398071350caf30c8LL /* 630 */, 0xd0a77a89f017687aLL /* 631 */,
- 0xf1c1a9eb9e423569LL /* 632 */, 0x8c7976282dee8199LL /* 633 */,
- 0x5d1737a5dd1f7abdLL /* 634 */, 0x4f53433c09a9fa80LL /* 635 */,
- 0xfa8b0c53df7ca1d9LL /* 636 */, 0x3fd9dcbc886ccb77LL /* 637 */,
- 0xc040917ca91b4720LL /* 638 */, 0x7dd00142f9d1dcdfLL /* 639 */,
- 0x8476fc1d4f387b58LL /* 640 */, 0x23f8e7c5f3316503LL /* 641 */,
- 0x032a2244e7e37339LL /* 642 */, 0x5c87a5d750f5a74bLL /* 643 */,
- 0x082b4cc43698992eLL /* 644 */, 0xdf917becb858f63cLL /* 645 */,
- 0x3270b8fc5bf86ddaLL /* 646 */, 0x10ae72bb29b5dd76LL /* 647 */,
- 0x576ac94e7700362bLL /* 648 */, 0x1ad112dac61efb8fLL /* 649 */,
- 0x691bc30ec5faa427LL /* 650 */, 0xff246311cc327143LL /* 651 */,
- 0x3142368e30e53206LL /* 652 */, 0x71380e31e02ca396LL /* 653 */,
- 0x958d5c960aad76f1LL /* 654 */, 0xf8d6f430c16da536LL /* 655 */,
- 0xc8ffd13f1be7e1d2LL /* 656 */, 0x7578ae66004ddbe1LL /* 657 */,
- 0x05833f01067be646LL /* 658 */, 0xbb34b5ad3bfe586dLL /* 659 */,
- 0x095f34c9a12b97f0LL /* 660 */, 0x247ab64525d60ca8LL /* 661 */,
- 0xdcdbc6f3017477d1LL /* 662 */, 0x4a2e14d4decad24dLL /* 663 */,
- 0xbdb5e6d9be0a1eebLL /* 664 */, 0x2a7e70f7794301abLL /* 665 */,
- 0xdef42d8a270540fdLL /* 666 */, 0x01078ec0a34c22c1LL /* 667 */,
- 0xe5de511af4c16387LL /* 668 */, 0x7ebb3a52bd9a330aLL /* 669 */,
- 0x77697857aa7d6435LL /* 670 */, 0x004e831603ae4c32LL /* 671 */,
- 0xe7a21020ad78e312LL /* 672 */, 0x9d41a70c6ab420f2LL /* 673 */,
- 0x28e06c18ea1141e6LL /* 674 */, 0xd2b28cbd984f6b28LL /* 675 */,
- 0x26b75f6c446e9d83LL /* 676 */, 0xba47568c4d418d7fLL /* 677 */,
- 0xd80badbfe6183d8eLL /* 678 */, 0x0e206d7f5f166044LL /* 679 */,
- 0xe258a43911cbca3eLL /* 680 */, 0x723a1746b21dc0bcLL /* 681 */,
- 0xc7caa854f5d7cdd3LL /* 682 */, 0x7cac32883d261d9cLL /* 683 */,
- 0x7690c26423ba942cLL /* 684 */, 0x17e55524478042b8LL /* 685 */,
- 0xe0be477656a2389fLL /* 686 */, 0x4d289b5e67ab2da0LL /* 687 */,
- 0x44862b9c8fbbfd31LL /* 688 */, 0xb47cc8049d141365LL /* 689 */,
- 0x822c1b362b91c793LL /* 690 */, 0x4eb14655fb13dfd8LL /* 691 */,
- 0x1ecbba0714e2a97bLL /* 692 */, 0x6143459d5cde5f14LL /* 693 */,
- 0x53a8fbf1d5f0ac89LL /* 694 */, 0x97ea04d81c5e5b00LL /* 695 */,
- 0x622181a8d4fdb3f3LL /* 696 */, 0xe9bcd341572a1208LL /* 697 */,
- 0x1411258643cce58aLL /* 698 */, 0x9144c5fea4c6e0a4LL /* 699 */,
- 0x0d33d06565cf620fLL /* 700 */, 0x54a48d489f219ca1LL /* 701 */,
- 0xc43e5eac6d63c821LL /* 702 */, 0xa9728b3a72770dafLL /* 703 */,
- 0xd7934e7b20df87efLL /* 704 */, 0xe35503b61a3e86e5LL /* 705 */,
- 0xcae321fbc819d504LL /* 706 */, 0x129a50b3ac60bfa6LL /* 707 */,
- 0xcd5e68ea7e9fb6c3LL /* 708 */, 0xb01c90199483b1c7LL /* 709 */,
- 0x3de93cd5c295376cLL /* 710 */, 0xaed52edf2ab9ad13LL /* 711 */,
- 0x2e60f512c0a07884LL /* 712 */, 0xbc3d86a3e36210c9LL /* 713 */,
- 0x35269d9b163951ceLL /* 714 */, 0x0c7d6e2ad0cdb5faLL /* 715 */,
- 0x59e86297d87f5733LL /* 716 */, 0x298ef221898db0e7LL /* 717 */,
- 0x55000029d1a5aa7eLL /* 718 */, 0x8bc08ae1b5061b45LL /* 719 */,
- 0xc2c31c2b6c92703aLL /* 720 */, 0x94cc596baf25ef42LL /* 721 */,
- 0x0a1d73db22540456LL /* 722 */, 0x04b6a0f9d9c4179aLL /* 723 */,
- 0xeffdafa2ae3d3c60LL /* 724 */, 0xf7c8075bb49496c4LL /* 725 */,
- 0x9cc5c7141d1cd4e3LL /* 726 */, 0x78bd1638218e5534LL /* 727 */,
- 0xb2f11568f850246aLL /* 728 */, 0xedfabcfa9502bc29LL /* 729 */,
- 0x796ce5f2da23051bLL /* 730 */, 0xaae128b0dc93537cLL /* 731 */,
- 0x3a493da0ee4b29aeLL /* 732 */, 0xb5df6b2c416895d7LL /* 733 */,
- 0xfcabbd25122d7f37LL /* 734 */, 0x70810b58105dc4b1LL /* 735 */,
- 0xe10fdd37f7882a90LL /* 736 */, 0x524dcab5518a3f5cLL /* 737 */,
- 0x3c9e85878451255bLL /* 738 */, 0x4029828119bd34e2LL /* 739 */,
- 0x74a05b6f5d3ceccbLL /* 740 */, 0xb610021542e13ecaLL /* 741 */,
- 0x0ff979d12f59e2acLL /* 742 */, 0x6037da27e4f9cc50LL /* 743 */,
- 0x5e92975a0df1847dLL /* 744 */, 0xd66de190d3e623feLL /* 745 */,
- 0x5032d6b87b568048LL /* 746 */, 0x9a36b7ce8235216eLL /* 747 */,
- 0x80272a7a24f64b4aLL /* 748 */, 0x93efed8b8c6916f7LL /* 749 */,
- 0x37ddbff44cce1555LL /* 750 */, 0x4b95db5d4b99bd25LL /* 751 */,
- 0x92d3fda169812fc0LL /* 752 */, 0xfb1a4a9a90660bb6LL /* 753 */,
- 0x730c196946a4b9b2LL /* 754 */, 0x81e289aa7f49da68LL /* 755 */,
- 0x64669a0f83b1a05fLL /* 756 */, 0x27b3ff7d9644f48bLL /* 757 */,
- 0xcc6b615c8db675b3LL /* 758 */, 0x674f20b9bcebbe95LL /* 759 */,
- 0x6f31238275655982LL /* 760 */, 0x5ae488713e45cf05LL /* 761 */,
- 0xbf619f9954c21157LL /* 762 */, 0xeabac46040a8eae9LL /* 763 */,
- 0x454c6fe9f2c0c1cdLL /* 764 */, 0x419cf6496412691cLL /* 765 */,
- 0xd3dc3bef265b0f70LL /* 766 */, 0x6d0e60f5c3578a9eLL /* 767 */
-};
-static u64 sbox4[256] = {
- 0x5b0e608526323c55LL /* 768 */, 0x1a46c1a9fa1b59f5LL /* 769 */,
- 0xa9e245a17c4c8ffaLL /* 770 */, 0x65ca5159db2955d7LL /* 771 */,
- 0x05db0a76ce35afc2LL /* 772 */, 0x81eac77ea9113d45LL /* 773 */,
- 0x528ef88ab6ac0a0dLL /* 774 */, 0xa09ea253597be3ffLL /* 775 */,
- 0x430ddfb3ac48cd56LL /* 776 */, 0xc4b3a67af45ce46fLL /* 777 */,
- 0x4ececfd8fbe2d05eLL /* 778 */, 0x3ef56f10b39935f0LL /* 779 */,
- 0x0b22d6829cd619c6LL /* 780 */, 0x17fd460a74df2069LL /* 781 */,
- 0x6cf8cc8e8510ed40LL /* 782 */, 0xd6c824bf3a6ecaa7LL /* 783 */,
- 0x61243d581a817049LL /* 784 */, 0x048bacb6bbc163a2LL /* 785 */,
- 0xd9a38ac27d44cc32LL /* 786 */, 0x7fddff5baaf410abLL /* 787 */,
- 0xad6d495aa804824bLL /* 788 */, 0xe1a6a74f2d8c9f94LL /* 789 */,
- 0xd4f7851235dee8e3LL /* 790 */, 0xfd4b7f886540d893LL /* 791 */,
- 0x247c20042aa4bfdaLL /* 792 */, 0x096ea1c517d1327cLL /* 793 */,
- 0xd56966b4361a6685LL /* 794 */, 0x277da5c31221057dLL /* 795 */,
- 0x94d59893a43acff7LL /* 796 */, 0x64f0c51ccdc02281LL /* 797 */,
- 0x3d33bcc4ff6189dbLL /* 798 */, 0xe005cb184ce66af1LL /* 799 */,
- 0xff5ccd1d1db99beaLL /* 800 */, 0xb0b854a7fe42980fLL /* 801 */,
- 0x7bd46a6a718d4b9fLL /* 802 */, 0xd10fa8cc22a5fd8cLL /* 803 */,
- 0xd31484952be4bd31LL /* 804 */, 0xc7fa975fcb243847LL /* 805 */,
- 0x4886ed1e5846c407LL /* 806 */, 0x28cddb791eb70b04LL /* 807 */,
- 0xc2b00be2f573417fLL /* 808 */, 0x5c9590452180f877LL /* 809 */,
- 0x7a6bddfff370eb00LL /* 810 */, 0xce509e38d6d9d6a4LL /* 811 */,
- 0xebeb0f00647fa702LL /* 812 */, 0x1dcc06cf76606f06LL /* 813 */,
- 0xe4d9f28ba286ff0aLL /* 814 */, 0xd85a305dc918c262LL /* 815 */,
- 0x475b1d8732225f54LL /* 816 */, 0x2d4fb51668ccb5feLL /* 817 */,
- 0xa679b9d9d72bba20LL /* 818 */, 0x53841c0d912d43a5LL /* 819 */,
- 0x3b7eaa48bf12a4e8LL /* 820 */, 0x781e0e47f22f1ddfLL /* 821 */,
- 0xeff20ce60ab50973LL /* 822 */, 0x20d261d19dffb742LL /* 823 */,
- 0x16a12b03062a2e39LL /* 824 */, 0x1960eb2239650495LL /* 825 */,
- 0x251c16fed50eb8b8LL /* 826 */, 0x9ac0c330f826016eLL /* 827 */,
- 0xed152665953e7671LL /* 828 */, 0x02d63194a6369570LL /* 829 */,
- 0x5074f08394b1c987LL /* 830 */, 0x70ba598c90b25ce1LL /* 831 */,
- 0x794a15810b9742f6LL /* 832 */, 0x0d5925e9fcaf8c6cLL /* 833 */,
- 0x3067716cd868744eLL /* 834 */, 0x910ab077e8d7731bLL /* 835 */,
- 0x6a61bbdb5ac42f61LL /* 836 */, 0x93513efbf0851567LL /* 837 */,
- 0xf494724b9e83e9d5LL /* 838 */, 0xe887e1985c09648dLL /* 839 */,
- 0x34b1d3c675370cfdLL /* 840 */, 0xdc35e433bc0d255dLL /* 841 */,
- 0xd0aab84234131be0LL /* 842 */, 0x08042a50b48b7eafLL /* 843 */,
- 0x9997c4ee44a3ab35LL /* 844 */, 0x829a7b49201799d0LL /* 845 */,
- 0x263b8307b7c54441LL /* 846 */, 0x752f95f4fd6a6ca6LL /* 847 */,
- 0x927217402c08c6e5LL /* 848 */, 0x2a8ab754a795d9eeLL /* 849 */,
- 0xa442f7552f72943dLL /* 850 */, 0x2c31334e19781208LL /* 851 */,
- 0x4fa98d7ceaee6291LL /* 852 */, 0x55c3862f665db309LL /* 853 */,
- 0xbd0610175d53b1f3LL /* 854 */, 0x46fe6cb840413f27LL /* 855 */,
- 0x3fe03792df0cfa59LL /* 856 */, 0xcfe700372eb85e8fLL /* 857 */,
- 0xa7be29e7adbce118LL /* 858 */, 0xe544ee5cde8431ddLL /* 859 */,
- 0x8a781b1b41f1873eLL /* 860 */, 0xa5c94c78a0d2f0e7LL /* 861 */,
- 0x39412e2877b60728LL /* 862 */, 0xa1265ef3afc9a62cLL /* 863 */,
- 0xbcc2770c6a2506c5LL /* 864 */, 0x3ab66dd5dce1ce12LL /* 865 */,
- 0xe65499d04a675b37LL /* 866 */, 0x7d8f523481bfd216LL /* 867 */,
- 0x0f6f64fcec15f389LL /* 868 */, 0x74efbe618b5b13c8LL /* 869 */,
- 0xacdc82b714273e1dLL /* 870 */, 0xdd40bfe003199d17LL /* 871 */,
- 0x37e99257e7e061f8LL /* 872 */, 0xfa52626904775aaaLL /* 873 */,
- 0x8bbbf63a463d56f9LL /* 874 */, 0xf0013f1543a26e64LL /* 875 */,
- 0xa8307e9f879ec898LL /* 876 */, 0xcc4c27a4150177ccLL /* 877 */,
- 0x1b432f2cca1d3348LL /* 878 */, 0xde1d1f8f9f6fa013LL /* 879 */,
- 0x606602a047a7ddd6LL /* 880 */, 0xd237ab64cc1cb2c7LL /* 881 */,
- 0x9b938e7225fcd1d3LL /* 882 */, 0xec4e03708e0ff476LL /* 883 */,
- 0xfeb2fbda3d03c12dLL /* 884 */, 0xae0bced2ee43889aLL /* 885 */,
- 0x22cb8923ebfb4f43LL /* 886 */, 0x69360d013cf7396dLL /* 887 */,
- 0x855e3602d2d4e022LL /* 888 */, 0x073805bad01f784cLL /* 889 */,
- 0x33e17a133852f546LL /* 890 */, 0xdf4874058ac7b638LL /* 891 */,
- 0xba92b29c678aa14aLL /* 892 */, 0x0ce89fc76cfaadcdLL /* 893 */,
- 0x5f9d4e0908339e34LL /* 894 */, 0xf1afe9291f5923b9LL /* 895 */,
- 0x6e3480f60f4a265fLL /* 896 */, 0xeebf3a2ab29b841cLL /* 897 */,
- 0xe21938a88f91b4adLL /* 898 */, 0x57dfeff845c6d3c3LL /* 899 */,
- 0x2f006b0bf62caaf2LL /* 900 */, 0x62f479ef6f75ee78LL /* 901 */,
- 0x11a55ad41c8916a9LL /* 902 */, 0xf229d29084fed453LL /* 903 */,
- 0x42f1c27b16b000e6LL /* 904 */, 0x2b1f76749823c074LL /* 905 */,
- 0x4b76eca3c2745360LL /* 906 */, 0x8c98f463b91691bdLL /* 907 */,
- 0x14bcc93cf1ade66aLL /* 908 */, 0x8885213e6d458397LL /* 909 */,
- 0x8e177df0274d4711LL /* 910 */, 0xb49b73b5503f2951LL /* 911 */,
- 0x10168168c3f96b6bLL /* 912 */, 0x0e3d963b63cab0aeLL /* 913 */,
- 0x8dfc4b5655a1db14LL /* 914 */, 0xf789f1356e14de5cLL /* 915 */,
- 0x683e68af4e51dac1LL /* 916 */, 0xc9a84f9d8d4b0fd9LL /* 917 */,
- 0x3691e03f52a0f9d1LL /* 918 */, 0x5ed86e46e1878e80LL /* 919 */,
- 0x3c711a0e99d07150LL /* 920 */, 0x5a0865b20c4e9310LL /* 921 */,
- 0x56fbfc1fe4f0682eLL /* 922 */, 0xea8d5de3105edf9bLL /* 923 */,
- 0x71abfdb12379187aLL /* 924 */, 0x2eb99de1bee77b9cLL /* 925 */,
- 0x21ecc0ea33cf4523LL /* 926 */, 0x59a4d7521805c7a1LL /* 927 */,
- 0x3896f5eb56ae7c72LL /* 928 */, 0xaa638f3db18f75dcLL /* 929 */,
- 0x9f39358dabe9808eLL /* 930 */, 0xb7defa91c00b72acLL /* 931 */,
- 0x6b5541fd62492d92LL /* 932 */, 0x6dc6dee8f92e4d5bLL /* 933 */,
- 0x353f57abc4beea7eLL /* 934 */, 0x735769d6da5690ceLL /* 935 */,
- 0x0a234aa642391484LL /* 936 */, 0xf6f9508028f80d9dLL /* 937 */,
- 0xb8e319a27ab3f215LL /* 938 */, 0x31ad9c1151341a4dLL /* 939 */,
- 0x773c22a57bef5805LL /* 940 */, 0x45c7561a07968633LL /* 941 */,
- 0xf913da9e249dbe36LL /* 942 */, 0xda652d9b78a64c68LL /* 943 */,
- 0x4c27a97f3bc334efLL /* 944 */, 0x76621220e66b17f4LL /* 945 */,
- 0x967743899acd7d0bLL /* 946 */, 0xf3ee5bcae0ed6782LL /* 947 */,
- 0x409f753600c879fcLL /* 948 */, 0x06d09a39b5926db6LL /* 949 */,
- 0x6f83aeb0317ac588LL /* 950 */, 0x01e6ca4a86381f21LL /* 951 */,
- 0x66ff3462d19f3025LL /* 952 */, 0x72207c24ddfd3bfbLL /* 953 */,
- 0x4af6b6d3e2ece2ebLL /* 954 */, 0x9c994dbec7ea08deLL /* 955 */,
- 0x49ace597b09a8bc4LL /* 956 */, 0xb38c4766cf0797baLL /* 957 */,
- 0x131b9373c57c2a75LL /* 958 */, 0xb1822cce61931e58LL /* 959 */,
- 0x9d7555b909ba1c0cLL /* 960 */, 0x127fafdd937d11d2LL /* 961 */,
- 0x29da3badc66d92e4LL /* 962 */, 0xa2c1d57154c2ecbcLL /* 963 */,
- 0x58c5134d82f6fe24LL /* 964 */, 0x1c3ae3515b62274fLL /* 965 */,
- 0xe907c82e01cb8126LL /* 966 */, 0xf8ed091913e37fcbLL /* 967 */,
- 0x3249d8f9c80046c9LL /* 968 */, 0x80cf9bede388fb63LL /* 969 */,
- 0x1881539a116cf19eLL /* 970 */, 0x5103f3f76bd52457LL /* 971 */,
- 0x15b7e6f5ae47f7a8LL /* 972 */, 0xdbd7c6ded47e9ccfLL /* 973 */,
- 0x44e55c410228bb1aLL /* 974 */, 0xb647d4255edb4e99LL /* 975 */,
- 0x5d11882bb8aafc30LL /* 976 */, 0xf5098bbb29d3212aLL /* 977 */,
- 0x8fb5ea14e90296b3LL /* 978 */, 0x677b942157dd025aLL /* 979 */,
- 0xfb58e7c0a390acb5LL /* 980 */, 0x89d3674c83bd4a01LL /* 981 */,
- 0x9e2da4df4bf3b93bLL /* 982 */, 0xfcc41e328cab4829LL /* 983 */,
- 0x03f38c96ba582c52LL /* 984 */, 0xcad1bdbd7fd85db2LL /* 985 */,
- 0xbbb442c16082ae83LL /* 986 */, 0xb95fe86ba5da9ab0LL /* 987 */,
- 0xb22e04673771a93fLL /* 988 */, 0x845358c9493152d8LL /* 989 */,
- 0xbe2a488697b4541eLL /* 990 */, 0x95a2dc2dd38e6966LL /* 991 */,
- 0xc02c11ac923c852bLL /* 992 */, 0x2388b1990df2a87bLL /* 993 */,
- 0x7c8008fa1b4f37beLL /* 994 */, 0x1f70d0c84d54e503LL /* 995 */,
- 0x5490adec7ece57d4LL /* 996 */, 0x002b3c27d9063a3aLL /* 997 */,
- 0x7eaea3848030a2bfLL /* 998 */, 0xc602326ded2003c0LL /* 999 */,
- 0x83a7287d69a94086LL /* 1000 */, 0xc57a5fcb30f57a8aLL /* 1001 */,
- 0xb56844e479ebe779LL /* 1002 */, 0xa373b40f05dcbce9LL /* 1003 */,
- 0xd71a786e88570ee2LL /* 1004 */, 0x879cbacdbde8f6a0LL /* 1005 */,
- 0x976ad1bcc164a32fLL /* 1006 */, 0xab21e25e9666d78bLL /* 1007 */,
- 0x901063aae5e5c33cLL /* 1008 */, 0x9818b34448698d90LL /* 1009 */,
- 0xe36487ae3e1e8abbLL /* 1010 */, 0xafbdf931893bdcb4LL /* 1011 */,
- 0x6345a0dc5fbbd519LL /* 1012 */, 0x8628fe269b9465caLL /* 1013 */,
- 0x1e5d01603f9c51ecLL /* 1014 */, 0x4de44006a15049b7LL /* 1015 */,
- 0xbf6c70e5f776cbb1LL /* 1016 */, 0x411218f2ef552bedLL /* 1017 */,
- 0xcb0c0708705a36a3LL /* 1018 */, 0xe74d14754f986044LL /* 1019 */,
- 0xcd56d9430ea8280eLL /* 1020 */, 0xc12591d7535f5065LL /* 1021 */,
- 0xc83223f1720aef96LL /* 1022 */, 0xc3a0396f7363a51fLL /* 1023 */
-};
-
-
-static void
-print_abc( const char *text, u64 a, u64 b, u64 c )
-{
-/*printf("%s: %08X%08X %08X%08X %08X%08X\n",
- text,
- (u32)(a>>32),
- (u32)(a),
- (u32)(b>>32),
- (u32)(b),
- (u32)(c>>32),
- (u32)(c) );*/
-}
-
-static void
-print_data( const char *text, u64 a, u64 b, u64 c,
- u64 d, u64 e, u64 f,
- u64 g, u64 h )
-{
-/*printf("%s: %08X%08X %08X%08X %08X%08X %08X%08X\n"
- "%s %08X%08X %08X%08X %08X%08X %08X%08X\n",
- text,
- (u32)(a>>32),
- (u32)(a),
- (u32)(b>>32),
- (u32)(b),
- (u32)(c>>32),
- (u32)(c),
- (u32)(d>>32),
- (u32)(d),
- text,
- (u32)(e>>32),
- (u32)(e),
- (u32)(f>>32),
- (u32)(f),
- (u32)(g>>32),
- (u32)(g),
- (u32)(h>>32),
- (u32)(h) );*/
-}
-
-
-static void
-tiger_init( TIGER_CONTEXT *hd )
-{
- hd->a = 0x0123456789abcdefLL;
- hd->b = 0xfedcba9876543210LL;
- hd->c = 0xf096a5b4c3b2e187LL;
- hd->nblocks = 0;
- hd->count = 0;
-}
-
-static void
-round( u64 *ra, u64 *rb, u64 *rc, u64 x, int mul )
-{
- u64 a = *ra;
- u64 b = *rb;
- u64 c = *rc;
-
- c ^= x;
- a -= sbox1[ c & 0xff ] ^ sbox2[ (c >> 16) & 0xff ]
- ^ sbox3[ (c >> 32) & 0xff ] ^ sbox4[ (c >> 48) & 0xff ];
- b += sbox4[ (c >> 8) & 0xff ] ^ sbox3[ (c >> 24) & 0xff ]
- ^ sbox2[ (c >> 40) & 0xff ] ^ sbox1[ (c >> 56) & 0xff ];
- b *= mul;
-
- *ra = a;
- *rb = b;
- *rc = c;
-}
-
-
-static void
-pass( u64 *ra, u64 *rb, u64 *rc, u64 *x, int mul )
-{
- u64 a = *ra;
- u64 b = *rb;
- u64 c = *rc;
-
- round( &a, &b, &c, x[0], mul );
- round( &b, &c, &a, x[1], mul );
- round( &c, &a, &b, x[2], mul );
- round( &a, &b, &c, x[3], mul );
- round( &b, &c, &a, x[4], mul );
- round( &c, &a, &b, x[5], mul );
- round( &a, &b, &c, x[6], mul );
- round( &b, &c, &a, x[7], mul );
-
- *ra = a;
- *rb = b;
- *rc = c;
-}
-
-
-static void
-key_schedule( u64 *x )
-{
- x[0] -= x[7] ^ 0xa5a5a5a5a5a5a5a5LL;
- x[1] ^= x[0];
- x[2] += x[1];
- x[3] -= x[2] ^ ((~x[1]) << 19 );
- x[4] ^= x[3];
- x[5] += x[4];
- x[6] -= x[5] ^ ((~x[4]) >> 23 );
- x[7] ^= x[6];
- x[0] += x[7];
- x[1] -= x[0] ^ ((~x[7]) << 19 );
- x[2] ^= x[1];
- x[3] += x[2];
- x[4] -= x[3] ^ ((~x[2]) >> 23 );
- x[5] ^= x[4];
- x[6] += x[5];
- x[7] -= x[6] ^ 0x0123456789abcdefLL;
-}
-
-
-/****************
- * Transform the message DATA which consists of 512 bytes (8 words)
- */
-static void
-transform( TIGER_CONTEXT *hd, byte *data )
-{
- u64 a,b,c,aa,bb,cc;
- u64 x[8];
- #ifdef BIG_ENDIAN_HOST
- #define MKWORD(d,n) \
- ( ((u64)(d)[8*(n)+7]) << 56 | ((u64)(d)[8*(n)+6]) << 48 \
- | ((u64)(d)[8*(n)+5]) << 40 | ((u64)(d)[8*(n)+4]) << 32 \
- | ((u64)(d)[8*(n)+3]) << 24 | ((u64)(d)[8*(n)+2]) << 16 \
- | ((u64)(d)[8*(n)+1]) << 8 | ((u64)(d)[8*(n) ]) )
- x[0] = MKWORD(data, 0);
- x[1] = MKWORD(data, 1);
- x[2] = MKWORD(data, 2);
- x[3] = MKWORD(data, 3);
- x[4] = MKWORD(data, 4);
- x[5] = MKWORD(data, 5);
- x[6] = MKWORD(data, 6);
- x[7] = MKWORD(data, 7);
- #undef MKWORD
- #else
- memcpy( &x[0], data, 64 );
- #endif
-
- /* save */
- a = aa = hd->a;
- b = bb = hd->b;
- c = cc = hd->c;
-
- print_data(" key0", x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7] );
- print_abc(" init", a, b, c );
- pass( &a, &b, &c, x, 5);
- print_abc("pass1", a, b, c );
- key_schedule( x );
- pass( &c, &a, &b, x, 7);
- print_abc("pass2", a, b, c );
- key_schedule( x );
- pass( &b, &c, &a, x, 9);
- print_abc("pass3", a, b, c );
-
-
- /* feedforward */
- a ^= aa;
- b -= bb;
- c += cc;
- /* store */
- hd->a = a;
- hd->b = b;
- hd->c = c;
-}
-
-
-
-/* Update the message digest with the contents
- * of INBUF with length INLEN.
- */
-static void
-tiger_write( TIGER_CONTEXT *hd, byte *inbuf, size_t inlen)
-{
- if( hd->count == 64 ) { /* flush the buffer */
- transform( hd, hd->buf );
- hd->count = 0;
- hd->nblocks++;
- }
- if( !inbuf )
- return;
- if( hd->count ) {
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
- tiger_write( hd, NULL, 0 );
- if( !inlen )
- return;
- }
-
- while( inlen >= 64 ) {
- transform( hd, inbuf );
- hd->count = 0;
- hd->nblocks++;
- inlen -= 64;
- inbuf += 64;
- }
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
-}
-
-
-
-/* The routine terminates the computation
- */
-
-static void
-tiger_final( TIGER_CONTEXT *hd )
-{
- u32 t, msb, lsb;
- byte *p;
-
- tiger_write(hd, NULL, 0); /* flush */;
-
- msb = 0;
- t = hd->nblocks;
- if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
- msb++;
- msb += t >> 26;
- t = lsb;
- if( (lsb = t + hd->count) < t ) /* add the count */
- msb++;
- t = lsb;
- if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
- msb++;
- msb += t >> 29;
-
- if( hd->count < 56 ) { /* enough room */
- hd->buf[hd->count++] = 0x01; /* pad */
- while( hd->count < 56 )
- hd->buf[hd->count++] = 0; /* pad */
- }
- else { /* need one extra block */
- hd->buf[hd->count++] = 0x01; /* pad character */
- while( hd->count < 64 )
- hd->buf[hd->count++] = 0;
- tiger_write(hd, NULL, 0); /* flush */;
- memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
- }
- /* append the 64 bit count */
- hd->buf[56] = lsb ;
- hd->buf[57] = lsb >> 8;
- hd->buf[58] = lsb >> 16;
- hd->buf[59] = lsb >> 24;
- hd->buf[60] = msb ;
- hd->buf[61] = msb >> 8;
- hd->buf[62] = msb >> 16;
- hd->buf[63] = msb >> 24;
- transform( hd, hd->buf );
-
- p = hd->buf;
- #ifdef BIG_ENDIAN_HOST
- #define X(a) do { *(u64*)p = hd->##a ; p += 8; } while(0)
- #else /* little endian */
- #define X(a) do { *p++ = hd->##a >> 56; *p++ = hd->##a >> 48; \
- *p++ = hd->##a >> 40; *p++ = hd->##a >> 32; \
- *p++ = hd->##a >> 24; *p++ = hd->##a >> 16; \
- *p++ = hd->##a >> 8; *p++ = hd->##a; } while(0)
- #endif
- X(a);
- X(b);
- X(c);
- #undef X
-}
-
-static byte *
-tiger_read( TIGER_CONTEXT *hd )
-{
- return hd->buf;
-}
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-static const char *
-tiger_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- )
-{
- /* 40: SEQUENCE {
- * 12: SEQUENCE {
- * 8: OCTET STRING :54 49 47 45 52 31 39 32
- * 0: NULL
- * : }
- * 24: OCTET STRING
- * : }
- *
- * By replacing the 5th byte (0x04) with 0x16 we would have;
- * 8: IA5String 'TIGER192'
- */
- static byte asn[18] =
- { 0x30, 0x28, 0x30, 0x0c, 0x04, 0x08, 0x54, 0x49, 0x47,
- 0x45, 0x52, 0x31, 0x39, 0x32, 0x05, 0x00, 0x04, 0x18 };
-
- if( algo != 6 )
- return NULL;
-
- *contextsize = sizeof(TIGER_CONTEXT);
- *r_asnoid = asn;
- *r_asnlen = DIM(asn);
- *r_mdlen = 24;
- *r_init = (void (*)(void *))tiger_init;
- *r_write = (void (*)(void *, byte*, size_t))tiger_write;
- *r_final = (void (*)(void *))tiger_final;
- *r_read = (byte *(*)(void *))tiger_read;
-
- return "TIGER";
-}
-
-
-
-#ifndef IS_MODULE
-static
-#endif
-const char * const gnupgext_version = "TIGER ($Revision$)";
-
-static struct {
- int class;
- int version;
- int value;
- void (*func)(void);
-} func_table[] = {
- { 10, 1, 0, (void(*)(void))tiger_get_info },
- { 11, 1, 6 },
-};
-
-
-
-/****************
- * Enumerate the names of the functions together with informations about
- * this function. Set sequence to an integer with a initial value of 0 and
- * do not change it.
- * If what is 0 all kind of functions are returned.
- * Return values: class := class of function:
- * 10 = message digest algorithm info function
- * 11 = integer with available md algorithms
- * 20 = cipher algorithm info function
- * 21 = integer with available cipher algorithms
- * 30 = public key algorithm info function
- * 31 = integer with available pubkey algorithms
- * version = interface version of the function/pointer
- * (currently this is 1 for all functions)
- */
-#ifndef IS_MODULE
-static
-#endif
-void *
-gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
-{
- void *ret;
- int i = *sequence;
-
- do {
- if( i >= DIM(func_table) || i < 0 ) {
- /*fprintf(stderr, "failed\n");*/
- return NULL;
- }
- *class = func_table[i].class;
- *vers = func_table[i].version;
- switch( *class ) {
- case 11:
- case 21:
- case 31:
- ret = &func_table[i].value;
- break;
- default:
- ret = func_table[i].func;
- break;
- }
- i++;
- } while( what && what != *class );
-
- *sequence = i;
- /*fprintf(stderr, "success\n");*/
- return ret;
-}
-
-
-
-#ifndef IS_MODULE
-void
-tiger_constructor(void)
-{
- register_internal_cipher_extension( gnupgext_version,
- gnupgext_enum_func );
-}
-#endif
-
-
-#endif /* HAVE_U64_TYPEDEF */
-
diff --git a/cipher/twofish.c b/cipher/twofish.c
deleted file mode 100644
index d1e171ba..00000000
--- a/cipher/twofish.c
+++ /dev/null
@@ -1,918 +0,0 @@
-/* Twofish for GPG
- * By Matthew Skala <mskala@ansuz.sooke.bc.ca>, July 26, 1998
- *
- * This code is a "clean room" implementation, written from the paper
- * _Twofish: A 128-Bit Block Cipher_ by Bruce Schneier, John Kelsey,
- * Doug Whiting, David Wagner, Chris Hall, and Niels Ferguson, available
- * through http://www.counterpane.com/twofish.html
- *
- * For background information on multiplication in finite fields, used for
- * the matrix operations in the key schedule, see the book _Contemporary
- * Abstract Algebra_ by Joseph A. Gallian, especially chapter 22 in the
- * Third Edition.
- *
- * Only the 128-bit block size is supported at present. This code is intended
- * for GNU C on a 32-bit system, but it should work almost anywhere. Loops
- * are unrolled, precomputation tables are used, etc., for maximum speed at
- * some cost in memory consumption. */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h> /* for memcmp() */
-
-#include "types.h" /* for byte and u32 typedefs */
-#include "util.h"
-#include "errors.h"
-#include "dynload.h"
-
-
-/* Prototype for the self-test function. */
-static const char *selftest(void);
-
-/* Macros used by the info function. */
-#define FNCCAST_SETKEY(f) ((int(*)(void*, byte*, unsigned))(f))
-#define FNCCAST_CRYPT(f) ((void(*)(void*, byte*, byte*))(f))
-
-/* Structure for an expanded Twofish key. s contains the key-dependent
- * S-boxes composed with the MDS matrix; w contains the eight "whitening"
- * subkeys, K[0] through K[7]. k holds the remaining, "round" subkeys. Note
- * that k[i] corresponds to what the Twofish paper calls K[i+8]. */
-typedef struct {
- u32 s[4][256], w[8], k[32];
-} TWOFISH_context;
-
-/* These two tables are the q0 and q1 permutations, exactly as described in
- * the Twofish paper. */
-
-static const byte q0[256] = {
- 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, 0x9A, 0x92, 0x80, 0x78,
- 0xE4, 0xDD, 0xD1, 0x38, 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C,
- 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, 0xF2, 0xD0, 0x8B, 0x30,
- 0x84, 0x54, 0xDF, 0x23, 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82,
- 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, 0xA6, 0xEB, 0xA5, 0xBE,
- 0x16, 0x0C, 0xE3, 0x61, 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B,
- 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, 0xE1, 0xE6, 0xBD, 0x45,
- 0xE2, 0xF4, 0xB6, 0x66, 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7,
- 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, 0xEA, 0x77, 0x39, 0xAF,
- 0x33, 0xC9, 0x62, 0x71, 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8,
- 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, 0xA1, 0x1D, 0xAA, 0xED,
- 0x06, 0x70, 0xB2, 0xD2, 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90,
- 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, 0x9E, 0x9C, 0x52, 0x1B,
- 0x5F, 0x93, 0x0A, 0xEF, 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B,
- 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, 0x2A, 0xCE, 0xCB, 0x2F,
- 0xFC, 0x97, 0x05, 0x7A, 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A,
- 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, 0xB8, 0xDA, 0xB0, 0x17,
- 0x55, 0x1F, 0x8A, 0x7D, 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72,
- 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, 0x6E, 0x50, 0xDE, 0x68,
- 0x65, 0xBC, 0xDB, 0xF8, 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4,
- 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, 0x6F, 0x9D, 0x36, 0x42,
- 0x4A, 0x5E, 0xC1, 0xE0
-};
-
-static const byte q1[256] = {
- 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, 0x4A, 0xD3, 0xE6, 0x6B,
- 0x45, 0x7D, 0xE8, 0x4B, 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1,
- 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, 0x5E, 0xBA, 0xAE, 0x5B,
- 0x8A, 0x00, 0xBC, 0x9D, 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5,
- 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, 0xB2, 0x73, 0x4C, 0x54,
- 0x92, 0x74, 0x36, 0x51, 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96,
- 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, 0x13, 0x95, 0x9C, 0xC7,
- 0x24, 0x46, 0x3B, 0x70, 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8,
- 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, 0x03, 0x6F, 0x08, 0xBF,
- 0x40, 0xE7, 0x2B, 0xE2, 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9,
- 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, 0x66, 0x94, 0xA1, 0x1D,
- 0x3D, 0xF0, 0xDE, 0xB3, 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E,
- 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, 0x81, 0x88, 0xEE, 0x21,
- 0xC4, 0x1A, 0xEB, 0xD9, 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01,
- 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, 0x4F, 0xF2, 0x65, 0x8E,
- 0x78, 0x5C, 0x58, 0x19, 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64,
- 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, 0xCE, 0xE9, 0x68, 0x44,
- 0xE0, 0x4D, 0x43, 0x69, 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E,
- 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, 0x22, 0xC9, 0xC0, 0x9B,
- 0x89, 0xD4, 0xED, 0xAB, 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9,
- 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, 0x16, 0x25, 0x86, 0x56,
- 0x55, 0x09, 0xBE, 0x91
-};
-
-/* These MDS tables are actually tables of MDS composed with q0 and q1,
- * because it is only ever used that way and we can save some time by
- * precomputing. Of course the main saving comes from precomputing the
- * GF(2^8) multiplication involved in the MDS matrix multiply; by looking
- * things up in these tables we reduce the matrix multiply to four lookups
- * and three XORs. Semi-formally, the definition of these tables is:
- * mds[0][i] = MDS (q1[i] 0 0 0)^T mds[1][i] = MDS (0 q0[i] 0 0)^T
- * mds[2][i] = MDS (0 0 q1[i] 0)^T mds[3][i] = MDS (0 0 0 q0[i])^T
- * where ^T means "transpose", the matrix multiply is performed in GF(2^8)
- * represented as GF(2)[x]/v(x) where v(x)=x^8+x^6+x^5+x^3+1 as described
- * by Schneier et al, and I'm casually glossing over the byte/word
- * conversion issues. */
-
-static const u32 mds[4][256] = {
- {0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B,
- 0xE2E22BFB, 0x9E9EFAC8, 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B,
- 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B, 0x3C3C57D6, 0x93938A32,
- 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1,
- 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA,
- 0xB0B0B306, 0x7575DE3F, 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B,
- 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D, 0xAEAE2C6D, 0x7F7FABC1,
- 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5,
- 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490,
- 0x3131272C, 0x808065A3, 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154,
- 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51, 0x2A2A3638, 0xC4C49CB0,
- 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796,
- 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228,
- 0x6767C027, 0xE9E9AF8C, 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7,
- 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70, 0x29294CCA, 0xF0F035E3,
- 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8,
- 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477,
- 0xC8C81DC3, 0x9999FFCC, 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF,
- 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2, 0xB5B53D79, 0x09090F0C,
- 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9,
- 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA,
- 0xEDEDD07A, 0x4343FC17, 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D,
- 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3, 0x5656E70B, 0xE3E3DA72,
- 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E,
- 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76,
- 0x8181942A, 0x91910149, 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321,
- 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9, 0x7878AEC5, 0xC5C56D39,
- 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01,
- 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D,
- 0x55559DF9, 0x7E7E5A48, 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E,
- 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519, 0x0606F48D, 0x404086E5,
- 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64,
- 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7,
- 0x2D2D333C, 0x3030D6A5, 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544,
- 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969, 0xD9D97929, 0x8686912E,
- 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E,
- 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A,
- 0xC1C112CF, 0x8585EBDC, 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B,
- 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB, 0xABABA212, 0x6F6F3EA2,
- 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9,
- 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504,
- 0x04047FF6, 0x272746C2, 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756,
- 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91},
-
- {0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252,
- 0xA3658080, 0x76DFE4E4, 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A,
- 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A, 0x0D54E6E6, 0xC6432020,
- 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141,
- 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444,
- 0x94B1FBFB, 0x485A7E7E, 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424,
- 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060, 0x1945FDFD, 0x5BA33A3A,
- 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757,
- 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383,
- 0x9B53AAAA, 0x7C635D5D, 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A,
- 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7, 0xC0F09090, 0x8CAFE9E9,
- 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656,
- 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1,
- 0xB499C3C3, 0xF1975B5B, 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898,
- 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8, 0xCCFF9999, 0x95EA1414,
- 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3,
- 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1,
- 0xBF7E9595, 0xBA207D7D, 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989,
- 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB, 0x81FB0F0F, 0x793DB5B5,
- 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282,
- 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E,
- 0x86135050, 0xE730F7F7, 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E,
- 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B, 0x410B9F9F, 0x7B8B0202,
- 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC,
- 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565,
- 0xB1C72B2B, 0xAB6F8E8E, 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A,
- 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9, 0x91EF1313, 0x85FE0808,
- 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272,
- 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A,
- 0x6929A9A9, 0x647D4F4F, 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969,
- 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED, 0xAC87D1D1, 0x7F8E0505,
- 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5,
- 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D,
- 0x4C5F7979, 0x02B6B7B7, 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343,
- 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2, 0x57AC3333, 0xC718CFCF,
- 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3,
- 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F,
- 0x99E51D1D, 0x34392323, 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646,
- 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA, 0xC8FA9E9E, 0xA882D6D6,
- 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF,
- 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A,
- 0x0FE25151, 0x00000000, 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7,
- 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8},
-
- {0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B,
- 0xE2FBE22B, 0x9EC89EFA, 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F,
- 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7, 0x3CD63C57, 0x9332938A,
- 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783,
- 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70,
- 0xB006B0B3, 0x753F75DE, 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3,
- 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0, 0xAE6DAE2C, 0x7FC17FAB,
- 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA,
- 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4,
- 0x312C3127, 0x80A38065, 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41,
- 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F, 0x2A382A36, 0xC4B0C49C,
- 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07,
- 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622,
- 0x672767C0, 0xE98CE9AF, 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18,
- 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C, 0x29CA294C, 0xF0E3F035,
- 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96,
- 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84,
- 0xC8C3C81D, 0x99CC99FF, 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E,
- 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E, 0xB579B53D, 0x090C090F,
- 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD,
- 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558,
- 0xED7AEDD0, 0x431743FC, 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40,
- 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71, 0x560B56E7, 0xE372E3DA,
- 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85,
- 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF,
- 0x812A8194, 0x91499101, 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773,
- 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5, 0x78C578AE, 0xC539C56D,
- 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B,
- 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C,
- 0x55F9559D, 0x7E487E5A, 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19,
- 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45, 0x068D06F4, 0x40E54086,
- 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D,
- 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74,
- 0x2D3C2D33, 0x30A530D6, 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755,
- 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929, 0xD929D979, 0x862E8691,
- 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D,
- 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4,
- 0xC1CFC112, 0x85DC85EB, 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53,
- 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F, 0xAB12ABA2, 0x6FA26F3E,
- 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9,
- 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705,
- 0x04F6047F, 0x27C22746, 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7,
- 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF},
-
- {0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98,
- 0x6580A365, 0xDFE476DF, 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866,
- 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836, 0x54E60D54, 0x4320C643,
- 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77,
- 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9,
- 0xB1FB94B1, 0x5A7E485A, 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C,
- 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5, 0x45FD1945, 0xA33A5BA3,
- 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216,
- 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F,
- 0x53AA9B53, 0x635D7C63, 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25,
- 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123, 0xF090C0F0, 0xAFE98CAF,
- 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7,
- 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4,
- 0x99C3B499, 0x975BF197, 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E,
- 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB, 0xFF99CCFF, 0xEA1495EA,
- 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C,
- 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12,
- 0x7E95BF7E, 0x207DBA20, 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A,
- 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137, 0xFB0F81FB, 0x3DB5793D,
- 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE,
- 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A,
- 0x13508613, 0x30F7E730, 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C,
- 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252, 0x0B9F410B, 0x8B027B8B,
- 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4,
- 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B,
- 0xC72BB1C7, 0x6F8EAB6F, 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3,
- 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A, 0xEF1391EF, 0xFE0885FE,
- 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB,
- 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85,
- 0x29A96929, 0x7D4F647D, 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA,
- 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0, 0x87D1AC87, 0x8E057F8E,
- 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8,
- 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33,
- 0x5F794C5F, 0xB6B702B6, 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC,
- 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38, 0xAC3357AC, 0x18CFC718,
- 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA,
- 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8,
- 0xE51D99E5, 0x39233439, 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872,
- 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6, 0xFA9EC8FA, 0x82D6A882,
- 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D,
- 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10,
- 0xE2510FE2, 0x00000000, 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6,
- 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8}
-};
-
-/* The exp_to_poly and poly_to_exp tables are used to perform efficient
- * operations in GF(2^8) represented as GF(2)[x]/w(x) where
- * w(x)=x^8+x^6+x^3+x^2+1. We care about doing that because it's part of the
- * definition of the RS matrix in the key schedule. Elements of that field
- * are polynomials of degree not greater than 7 and all coefficients 0 or 1,
- * which can be represented naturally by bytes (just substitute x=2). In that
- * form, GF(2^8) addition is the same as bitwise XOR, but GF(2^8)
- * multiplication is inefficient without hardware support. To multiply
- * faster, I make use of the fact x is a generator for the nonzero elements,
- * so that every element p of GF(2)[x]/w(x) is either 0 or equal to (x)^n for
- * some n in 0..254. Note that that caret is exponentiation in GF(2^8),
- * *not* polynomial notation. So if I want to compute pq where p and q are
- * in GF(2^8), I can just say:
- * 1. if p=0 or q=0 then pq=0
- * 2. otherwise, find m and n such that p=x^m and q=x^n
- * 3. pq=(x^m)(x^n)=x^(m+n), so add m and n and find pq
- * The translations in steps 2 and 3 are looked up in the tables
- * poly_to_exp (for step 2) and exp_to_poly (for step 3). To see this
- * in action, look at the CALC_S macro. As additional wrinkles, note that
- * one of my operands is always a constant, so the poly_to_exp lookup on it
- * is done in advance; I included the original values in the comments so
- * readers can have some chance of recognizing that this *is* the RS matrix
- * from the Twofish paper. I've only included the table entries I actually
- * need; I never do a lookup on a variable input of zero and the biggest
- * exponents I'll ever see are 254 (variable) and 237 (constant), so they'll
- * never sum to more than 491. I'm repeating part of the exp_to_poly table
- * so that I don't have to do mod-255 reduction in the exponent arithmetic.
- * Since I know my constant operands are never zero, I only have to worry
- * about zero values in the variable operand, and I do it with a simple
- * conditional branch. I know conditionals are expensive, but I couldn't
- * see a non-horrible way of avoiding them, and I did manage to group the
- * statements so that each if covers four group multiplications. */
-
-static const byte poly_to_exp[255] = {
- 0x00, 0x01, 0x17, 0x02, 0x2E, 0x18, 0x53, 0x03, 0x6A, 0x2F, 0x93, 0x19,
- 0x34, 0x54, 0x45, 0x04, 0x5C, 0x6B, 0xB6, 0x30, 0xA6, 0x94, 0x4B, 0x1A,
- 0x8C, 0x35, 0x81, 0x55, 0xAA, 0x46, 0x0D, 0x05, 0x24, 0x5D, 0x87, 0x6C,
- 0x9B, 0xB7, 0xC1, 0x31, 0x2B, 0xA7, 0xA3, 0x95, 0x98, 0x4C, 0xCA, 0x1B,
- 0xE6, 0x8D, 0x73, 0x36, 0xCD, 0x82, 0x12, 0x56, 0x62, 0xAB, 0xF0, 0x47,
- 0x4F, 0x0E, 0xBD, 0x06, 0xD4, 0x25, 0xD2, 0x5E, 0x27, 0x88, 0x66, 0x6D,
- 0xD6, 0x9C, 0x79, 0xB8, 0x08, 0xC2, 0xDF, 0x32, 0x68, 0x2C, 0xFD, 0xA8,
- 0x8A, 0xA4, 0x5A, 0x96, 0x29, 0x99, 0x22, 0x4D, 0x60, 0xCB, 0xE4, 0x1C,
- 0x7B, 0xE7, 0x3B, 0x8E, 0x9E, 0x74, 0xF4, 0x37, 0xD8, 0xCE, 0xF9, 0x83,
- 0x6F, 0x13, 0xB2, 0x57, 0xE1, 0x63, 0xDC, 0xAC, 0xC4, 0xF1, 0xAF, 0x48,
- 0x0A, 0x50, 0x42, 0x0F, 0xBA, 0xBE, 0xC7, 0x07, 0xDE, 0xD5, 0x78, 0x26,
- 0x65, 0xD3, 0xD1, 0x5F, 0xE3, 0x28, 0x21, 0x89, 0x59, 0x67, 0xFC, 0x6E,
- 0xB1, 0xD7, 0xF8, 0x9D, 0xF3, 0x7A, 0x3A, 0xB9, 0xC6, 0x09, 0x41, 0xC3,
- 0xAE, 0xE0, 0xDB, 0x33, 0x44, 0x69, 0x92, 0x2D, 0x52, 0xFE, 0x16, 0xA9,
- 0x0C, 0x8B, 0x80, 0xA5, 0x4A, 0x5B, 0xB5, 0x97, 0xC9, 0x2A, 0xA2, 0x9A,
- 0xC0, 0x23, 0x86, 0x4E, 0xBC, 0x61, 0xEF, 0xCC, 0x11, 0xE5, 0x72, 0x1D,
- 0x3D, 0x7C, 0xEB, 0xE8, 0xE9, 0x3C, 0xEA, 0x8F, 0x7D, 0x9F, 0xEC, 0x75,
- 0x1E, 0xF5, 0x3E, 0x38, 0xF6, 0xD9, 0x3F, 0xCF, 0x76, 0xFA, 0x1F, 0x84,
- 0xA0, 0x70, 0xED, 0x14, 0x90, 0xB3, 0x7E, 0x58, 0xFB, 0xE2, 0x20, 0x64,
- 0xD0, 0xDD, 0x77, 0xAD, 0xDA, 0xC5, 0x40, 0xF2, 0x39, 0xB0, 0xF7, 0x49,
- 0xB4, 0x0B, 0x7F, 0x51, 0x15, 0x43, 0x91, 0x10, 0x71, 0xBB, 0xEE, 0xBF,
- 0x85, 0xC8, 0xA1
-};
-
-static const byte exp_to_poly[492] = {
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, 0x9A, 0x79, 0xF2,
- 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, 0xF5, 0xA7, 0x03,
- 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, 0x8B, 0x5B, 0xB6,
- 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, 0xA4, 0x05, 0x0A,
- 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, 0xED, 0x97, 0x63,
- 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, 0x0F, 0x1E, 0x3C,
- 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, 0xF4, 0xA5, 0x07,
- 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, 0x22, 0x44, 0x88,
- 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, 0xA2, 0x09, 0x12,
- 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, 0xCC, 0xD5, 0xE7,
- 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, 0x1B, 0x36, 0x6C,
- 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, 0x32, 0x64, 0xC8,
- 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, 0x5A, 0xB4, 0x25,
- 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, 0xAC, 0x15, 0x2A,
- 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, 0x91, 0x6F, 0xDE,
- 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, 0x3F, 0x7E, 0xFC,
- 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, 0xB1, 0x2F, 0x5E,
- 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, 0x82, 0x49, 0x92,
- 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, 0x71, 0xE2, 0x89,
- 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB, 0xDB, 0xFB, 0xBB,
- 0x3B, 0x76, 0xEC, 0x95, 0x67, 0xCE, 0xD1, 0xEF, 0x93, 0x6B, 0xD6, 0xE1,
- 0x8F, 0x53, 0xA6, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D,
- 0x9A, 0x79, 0xF2, 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC,
- 0xF5, 0xA7, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3,
- 0x8B, 0x5B, 0xB6, 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52,
- 0xA4, 0x05, 0x0A, 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0,
- 0xED, 0x97, 0x63, 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1,
- 0x0F, 0x1E, 0x3C, 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A,
- 0xF4, 0xA5, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11,
- 0x22, 0x44, 0x88, 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51,
- 0xA2, 0x09, 0x12, 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66,
- 0xCC, 0xD5, 0xE7, 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB,
- 0x1B, 0x36, 0x6C, 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19,
- 0x32, 0x64, 0xC8, 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D,
- 0x5A, 0xB4, 0x25, 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56,
- 0xAC, 0x15, 0x2A, 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE,
- 0x91, 0x6F, 0xDE, 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9,
- 0x3F, 0x7E, 0xFC, 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE,
- 0xB1, 0x2F, 0x5E, 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41,
- 0x82, 0x49, 0x92, 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E,
- 0x71, 0xE2, 0x89, 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB
-};
-
-/* Macro to perform one column of the RS matrix multiplication. The
- * parameters a, b, c, and d are the four bytes of output; i is the index
- * of the key bytes, and w, x, y, and z, are the column of constants from
- * the RS matrix, preprocessed through the poly_to_exp table. */
-
-#define CALC_S(a, b, c, d, i, w, x, y, z) \
- if (key[i]) { \
- tmp = poly_to_exp[key[i] - 1]; \
- (a) ^= exp_to_poly[tmp + (w)]; \
- (b) ^= exp_to_poly[tmp + (x)]; \
- (c) ^= exp_to_poly[tmp + (y)]; \
- (d) ^= exp_to_poly[tmp + (z)]; \
- }
-
-/* Macros to calculate the key-dependent S-boxes using the S vector from
- * CALC_S. CALC_SB_2 computes a single entry in all four S-boxes, where i
- * is the index of the entry to compute, and a and b are the index numbers
- * preprocessed through the q0 and q1 tables respectively. CALC_SB is
- * simply a convenience to make the code shorter; it calls CALC_SB_2 four
- * times with consecutive indices from i to i+3, using the remaining
- * parameters two by two. */
-
-#define CALC_SB_2(i, a, b) \
- ctx->s[0][i] = mds[0][q0[(a) ^ sa] ^ se]; \
- ctx->s[1][i] = mds[1][q0[(b) ^ sb] ^ sf]; \
- ctx->s[2][i] = mds[2][q1[(a) ^ sc] ^ sg]; \
- ctx->s[3][i] = mds[3][q1[(b) ^ sd] ^ sh]
-
-#define CALC_SB(i, a, b, c, d, e, f, g, h) \
- CALC_SB_2 (i, a, b); CALC_SB_2 ((i)+1, c, d); \
- CALC_SB_2 ((i)+2, e, f); CALC_SB_2 ((i)+3, g, h)
-
-/* Macros to calculate the whitening and round subkeys. CALC_K_2 computes the
- * h() function for a given index (either 2i or 2i+1). a and b are the index
- * preprocessed through q0 and q1 respectively; j is the index of the first
- * key byte to use. CALC_K computes a pair of subkeys by calling CALC_K_2
- * twice, doing the Psuedo-Hadamard Transform, and doing the necessary
- * rotations. Its parameters are: a, the array to write the results into,
- * j, the index of the first output entry, k and l, the preprocessed indices
- * for index 2i, and m and n, the preprocessed indices for index 2i+1. */
-
-#define CALC_K_2(a, b, j) \
- mds[0][q0[a ^ key[(j) + 8]] ^ key[j]] \
- ^ mds[1][q0[b ^ key[(j) + 9]] ^ key[(j) + 1]] \
- ^ mds[2][q1[a ^ key[(j) + 10]] ^ key[(j) + 2]] \
- ^ mds[3][q1[b ^ key[(j) + 11]] ^ key[(j) + 3]]
-
-#define CALC_K(a, j, k, l, m, n) \
- x = CALC_K_2 (k, l, 0); \
- y = CALC_K_2 (m, n, 4); \
- y = (y << 8) + (y >> 24); \
- x += y; y += x; ctx->a[j] = x; \
- ctx->a[(j) + 1] = (y << 9) + ( y >> 23)
-
-/* Perform the key setup. Note that this works *only* with 128-bit keys,
- * despite the API that makes it look like it might support other sizes. */
-
-static int
-twofish_setkey (TWOFISH_context *ctx, const byte *key, const unsigned keylen)
-{
- /* Temporaries for CALC_K. */
- u32 x, y;
-
- /* The S vector used to key the S-boxes, split up into individual
- * bytes. */
- byte sa = 0, sb = 0, sc = 0, sd = 0, se = 0, sf = 0, sg = 0, sh = 0;
-
- /* Temporary for CALC_S. */
- byte tmp;
-
- /* Flags for self-test. */
- static int initialized = 0;
- static const char *selftest_failed=0;
-
- /* Check key length. */
- if( keylen != 16 ) /* enhance this code for 256 bit keys */
- return G10ERR_WRONG_KEYLEN;
-
- /* Do self-test if necessary. */
- if (!initialized) {
- initialized = 1;
- selftest_failed = selftest ();
- if( selftest_failed )
- fprintf(stderr, "%s\n", selftest_failed );
- }
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- /* Compute the S vector. The magic numbers are the entries of the RS
- * matrix, preprocessed through poly_to_exp. The numbers in the comments
- * are the original (polynomial form) matrix entries. */
- CALC_S (sa, sb, sc, sd, 0, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */
- CALC_S (sa, sb, sc, sd, 1, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */
- CALC_S (sa, sb, sc, sd, 2, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */
- CALC_S (sa, sb, sc, sd, 3, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */
- CALC_S (sa, sb, sc, sd, 4, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */
- CALC_S (sa, sb, sc, sd, 5, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */
- CALC_S (sa, sb, sc, sd, 6, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */
- CALC_S (sa, sb, sc, sd, 7, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */
- CALC_S (se, sf, sg, sh, 8, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */
- CALC_S (se, sf, sg, sh, 9, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */
- CALC_S (se, sf, sg, sh, 10, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */
- CALC_S (se, sf, sg, sh, 11, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */
- CALC_S (se, sf, sg, sh, 12, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */
- CALC_S (se, sf, sg, sh, 13, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */
- CALC_S (se, sf, sg, sh, 14, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */
- CALC_S (se, sf, sg, sh, 15, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */
-
- /* Compute the S-boxes. The constants are indices of
- * S-box entries, preprocessed through q0 and q1. */
- CALC_SB (0, 0xA9, 0x75, 0x67, 0xF3, 0xB3, 0xC6, 0xE8, 0xF4);
- CALC_SB (4, 0x04, 0xDB, 0xFD, 0x7B, 0xA3, 0xFB, 0x76, 0xC8);
- CALC_SB (8, 0x9A, 0x4A, 0x92, 0xD3, 0x80, 0xE6, 0x78, 0x6B);
- CALC_SB (12, 0xE4, 0x45, 0xDD, 0x7D, 0xD1, 0xE8, 0x38, 0x4B);
- CALC_SB (16, 0x0D, 0xD6, 0xC6, 0x32, 0x35, 0xD8, 0x98, 0xFD);
- CALC_SB (20, 0x18, 0x37, 0xF7, 0x71, 0xEC, 0xF1, 0x6C, 0xE1);
- CALC_SB (24, 0x43, 0x30, 0x75, 0x0F, 0x37, 0xF8, 0x26, 0x1B);
- CALC_SB (28, 0xFA, 0x87, 0x13, 0xFA, 0x94, 0x06, 0x48, 0x3F);
- CALC_SB (32, 0xF2, 0x5E, 0xD0, 0xBA, 0x8B, 0xAE, 0x30, 0x5B);
- CALC_SB (36, 0x84, 0x8A, 0x54, 0x00, 0xDF, 0xBC, 0x23, 0x9D);
- CALC_SB (40, 0x19, 0x6D, 0x5B, 0xC1, 0x3D, 0xB1, 0x59, 0x0E);
- CALC_SB (44, 0xF3, 0x80, 0xAE, 0x5D, 0xA2, 0xD2, 0x82, 0xD5);
- CALC_SB (48, 0x63, 0xA0, 0x01, 0x84, 0x83, 0x07, 0x2E, 0x14);
- CALC_SB (52, 0xD9, 0xB5, 0x51, 0x90, 0x9B, 0x2C, 0x7C, 0xA3);
- CALC_SB (56, 0xA6, 0xB2, 0xEB, 0x73, 0xA5, 0x4C, 0xBE, 0x54);
- CALC_SB (60, 0x16, 0x92, 0x0C, 0x74, 0xE3, 0x36, 0x61, 0x51);
- CALC_SB (64, 0xC0, 0x38, 0x8C, 0xB0, 0x3A, 0xBD, 0xF5, 0x5A);
- CALC_SB (68, 0x73, 0xFC, 0x2C, 0x60, 0x25, 0x62, 0x0B, 0x96);
- CALC_SB (72, 0xBB, 0x6C, 0x4E, 0x42, 0x89, 0xF7, 0x6B, 0x10);
- CALC_SB (76, 0x53, 0x7C, 0x6A, 0x28, 0xB4, 0x27, 0xF1, 0x8C);
- CALC_SB (80, 0xE1, 0x13, 0xE6, 0x95, 0xBD, 0x9C, 0x45, 0xC7);
- CALC_SB (84, 0xE2, 0x24, 0xF4, 0x46, 0xB6, 0x3B, 0x66, 0x70);
- CALC_SB (88, 0xCC, 0xCA, 0x95, 0xE3, 0x03, 0x85, 0x56, 0xCB);
- CALC_SB (92, 0xD4, 0x11, 0x1C, 0xD0, 0x1E, 0x93, 0xD7, 0xB8);
- CALC_SB (96, 0xFB, 0xA6, 0xC3, 0x83, 0x8E, 0x20, 0xB5, 0xFF);
- CALC_SB (100, 0xE9, 0x9F, 0xCF, 0x77, 0xBF, 0xC3, 0xBA, 0xCC);
- CALC_SB (104, 0xEA, 0x03, 0x77, 0x6F, 0x39, 0x08, 0xAF, 0xBF);
- CALC_SB (108, 0x33, 0x40, 0xC9, 0xE7, 0x62, 0x2B, 0x71, 0xE2);
- CALC_SB (112, 0x81, 0x79, 0x79, 0x0C, 0x09, 0xAA, 0xAD, 0x82);
- CALC_SB (116, 0x24, 0x41, 0xCD, 0x3A, 0xF9, 0xEA, 0xD8, 0xB9);
- CALC_SB (120, 0xE5, 0xE4, 0xC5, 0x9A, 0xB9, 0xA4, 0x4D, 0x97);
- CALC_SB (124, 0x44, 0x7E, 0x08, 0xDA, 0x86, 0x7A, 0xE7, 0x17);
- CALC_SB (128, 0xA1, 0x66, 0x1D, 0x94, 0xAA, 0xA1, 0xED, 0x1D);
- CALC_SB (132, 0x06, 0x3D, 0x70, 0xF0, 0xB2, 0xDE, 0xD2, 0xB3);
- CALC_SB (136, 0x41, 0x0B, 0x7B, 0x72, 0xA0, 0xA7, 0x11, 0x1C);
- CALC_SB (140, 0x31, 0xEF, 0xC2, 0xD1, 0x27, 0x53, 0x90, 0x3E);
- CALC_SB (144, 0x20, 0x8F, 0xF6, 0x33, 0x60, 0x26, 0xFF, 0x5F);
- CALC_SB (148, 0x96, 0xEC, 0x5C, 0x76, 0xB1, 0x2A, 0xAB, 0x49);
- CALC_SB (152, 0x9E, 0x81, 0x9C, 0x88, 0x52, 0xEE, 0x1B, 0x21);
- CALC_SB (156, 0x5F, 0xC4, 0x93, 0x1A, 0x0A, 0xEB, 0xEF, 0xD9);
- CALC_SB (160, 0x91, 0xC5, 0x85, 0x39, 0x49, 0x99, 0xEE, 0xCD);
- CALC_SB (164, 0x2D, 0xAD, 0x4F, 0x31, 0x8F, 0x8B, 0x3B, 0x01);
- CALC_SB (168, 0x47, 0x18, 0x87, 0x23, 0x6D, 0xDD, 0x46, 0x1F);
- CALC_SB (172, 0xD6, 0x4E, 0x3E, 0x2D, 0x69, 0xF9, 0x64, 0x48);
- CALC_SB (176, 0x2A, 0x4F, 0xCE, 0xF2, 0xCB, 0x65, 0x2F, 0x8E);
- CALC_SB (180, 0xFC, 0x78, 0x97, 0x5C, 0x05, 0x58, 0x7A, 0x19);
- CALC_SB (184, 0xAC, 0x8D, 0x7F, 0xE5, 0xD5, 0x98, 0x1A, 0x57);
- CALC_SB (188, 0x4B, 0x67, 0x0E, 0x7F, 0xA7, 0x05, 0x5A, 0x64);
- CALC_SB (192, 0x28, 0xAF, 0x14, 0x63, 0x3F, 0xB6, 0x29, 0xFE);
- CALC_SB (196, 0x88, 0xF5, 0x3C, 0xB7, 0x4C, 0x3C, 0x02, 0xA5);
- CALC_SB (200, 0xB8, 0xCE, 0xDA, 0xE9, 0xB0, 0x68, 0x17, 0x44);
- CALC_SB (204, 0x55, 0xE0, 0x1F, 0x4D, 0x8A, 0x43, 0x7D, 0x69);
- CALC_SB (208, 0x57, 0x29, 0xC7, 0x2E, 0x8D, 0xAC, 0x74, 0x15);
- CALC_SB (212, 0xB7, 0x59, 0xC4, 0xA8, 0x9F, 0x0A, 0x72, 0x9E);
- CALC_SB (216, 0x7E, 0x6E, 0x15, 0x47, 0x22, 0xDF, 0x12, 0x34);
- CALC_SB (220, 0x58, 0x35, 0x07, 0x6A, 0x99, 0xCF, 0x34, 0xDC);
- CALC_SB (224, 0x6E, 0x22, 0x50, 0xC9, 0xDE, 0xC0, 0x68, 0x9B);
- CALC_SB (228, 0x65, 0x89, 0xBC, 0xD4, 0xDB, 0xED, 0xF8, 0xAB);
- CALC_SB (232, 0xC8, 0x12, 0xA8, 0xA2, 0x2B, 0x0D, 0x40, 0x52);
- CALC_SB (236, 0xDC, 0xBB, 0xFE, 0x02, 0x32, 0x2F, 0xA4, 0xA9);
- CALC_SB (240, 0xCA, 0xD7, 0x10, 0x61, 0x21, 0x1E, 0xF0, 0xB4);
- CALC_SB (244, 0xD3, 0x50, 0x5D, 0x04, 0x0F, 0xF6, 0x00, 0xC2);
- CALC_SB (248, 0x6F, 0x16, 0x9D, 0x25, 0x36, 0x86, 0x42, 0x56);
- CALC_SB (252, 0x4A, 0x55, 0x5E, 0x09, 0xC1, 0xBE, 0xE0, 0x91);
-
- /* Calculate whitening and round subkeys. The constants are
- * indices of subkeys, preprocessed through q0 and q1. */
- CALC_K (w, 0, 0xA9, 0x75, 0x67, 0xF3);
- CALC_K (w, 2, 0xB3, 0xC6, 0xE8, 0xF4);
- CALC_K (w, 4, 0x04, 0xDB, 0xFD, 0x7B);
- CALC_K (w, 6, 0xA3, 0xFB, 0x76, 0xC8);
- CALC_K (k, 0, 0x9A, 0x4A, 0x92, 0xD3);
- CALC_K (k, 2, 0x80, 0xE6, 0x78, 0x6B);
- CALC_K (k, 4, 0xE4, 0x45, 0xDD, 0x7D);
- CALC_K (k, 6, 0xD1, 0xE8, 0x38, 0x4B);
- CALC_K (k, 8, 0x0D, 0xD6, 0xC6, 0x32);
- CALC_K (k, 10, 0x35, 0xD8, 0x98, 0xFD);
- CALC_K (k, 12, 0x18, 0x37, 0xF7, 0x71);
- CALC_K (k, 14, 0xEC, 0xF1, 0x6C, 0xE1);
- CALC_K (k, 16, 0x43, 0x30, 0x75, 0x0F);
- CALC_K (k, 18, 0x37, 0xF8, 0x26, 0x1B);
- CALC_K (k, 20, 0xFA, 0x87, 0x13, 0xFA);
- CALC_K (k, 22, 0x94, 0x06, 0x48, 0x3F);
- CALC_K (k, 24, 0xF2, 0x5E, 0xD0, 0xBA);
- CALC_K (k, 26, 0x8B, 0xAE, 0x30, 0x5B);
- CALC_K (k, 28, 0x84, 0x8A, 0x54, 0x00);
- CALC_K (k, 30, 0xDF, 0xBC, 0x23, 0x9D);
-
- return 0;
-}
-
-/* Macros to compute the g() function in the encryption and decryption
- * rounds. G1 is the straight g() function; G2 includes the 8-bit
- * rotation for the high 32-bit word. */
-
-#define G1(a) \
- (ctx->s[0][(a) & 0xFF]) ^ (ctx->s[1][((a) >> 8) & 0xFF]) \
- ^ (ctx->s[2][((a) >> 16) & 0xFF]) ^ (ctx->s[3][(a) >> 24])
-
-#define G2(b) \
- (ctx->s[1][(b) & 0xFF]) ^ (ctx->s[2][((b) >> 8) & 0xFF]) \
- ^ (ctx->s[3][((b) >> 16) & 0xFF]) ^ (ctx->s[0][(b) >> 24])
-
-/* Encryption and decryption Feistel rounds. Each one calls the two g()
- * macros, does the PHT, and performs the XOR and the appropriate bit
- * rotations. The parameters are the round number (used to select subkeys),
- * and the four 32-bit chunks of the text. */
-
-#define ENCROUND(n, a, b, c, d) \
- x = G1 (a); y = G2 (b); \
- x += y; y += x + ctx->k[2 * (n) + 1]; \
- (c) ^= x + ctx->k[2 * (n)]; \
- (c) = ((c) >> 1) + ((c) << 31); \
- (d) = (((d) << 1)+((d) >> 31)) ^ y
-
-#define DECROUND(n, a, b, c, d) \
- x = G1 (a); y = G2 (b); \
- x += y; y += x; \
- (d) ^= y + ctx->k[2 * (n) + 1]; \
- (d) = ((d) >> 1) + ((d) << 31); \
- (c) = (((c) << 1)+((c) >> 31)); \
- (c) ^= (x + ctx->k[2 * (n)])
-
-/* Encryption and decryption cycles; each one is simply two Feistel rounds
- * with the 32-bit chunks re-ordered to simulate the "swap" */
-
-#define ENCCYCLE(n) \
- ENCROUND (2 * (n), a, b, c, d); \
- ENCROUND (2 * (n) + 1, c, d, a, b)
-
-#define DECCYCLE(n) \
- DECROUND (2 * (n) + 1, c, d, a, b); \
- DECROUND (2 * (n), a, b, c, d)
-
-/* Macros to convert the input and output bytes into 32-bit words,
- * and simultaneously perform the whitening step. INPACK packs word
- * number n into the variable named by x, using whitening subkey number m.
- * OUTUNPACK unpacks word number n from the variable named by x, using
- * whitening subkey number m. */
-
-#define INPACK(n, x, m) \
- x = in[4 * (n)] ^ (in[4 * (n) + 1] << 8) \
- ^ (in[4 * (n) + 2] << 16) ^ (in[4 * (n) + 3] << 24) ^ ctx->w[m]
-
-#define OUTUNPACK(n, x, m) \
- x ^= ctx->w[m]; \
- out[4 * (n)] = x; out[4 * (n) + 1] = x >> 8; \
- out[4 * (n) + 2] = x >> 16; out[4 * (n) + 3] = x >> 24
-
-/* Encrypt one block. in and out may be the same. */
-
-static void
-twofish_encrypt (const TWOFISH_context *ctx, byte *out, const byte *in)
-{
- /* The four 32-bit chunks of the text. */
- u32 a, b, c, d;
-
- /* Temporaries used by the round function. */
- u32 x, y;
-
- /* Input whitening and packing. */
- INPACK (0, a, 0);
- INPACK (1, b, 1);
- INPACK (2, c, 2);
- INPACK (3, d, 3);
-
- /* Encryption Feistel cycles. */
- ENCCYCLE (0);
- ENCCYCLE (1);
- ENCCYCLE (2);
- ENCCYCLE (3);
- ENCCYCLE (4);
- ENCCYCLE (5);
- ENCCYCLE (6);
- ENCCYCLE (7);
-
- /* Output whitening and unpacking. */
- OUTUNPACK (0, c, 4);
- OUTUNPACK (1, d, 5);
- OUTUNPACK (2, a, 6);
- OUTUNPACK (3, b, 7);
-}
-
-/* Decrypt one block. in and out may be the same. */
-
-static void
-twofish_decrypt (const TWOFISH_context *ctx, byte *out, const byte *in)
-{
- /* The four 32-bit chunks of the text. */
- u32 a, b, c, d;
-
- /* Temporaries used by the round function. */
- u32 x, y;
-
- /* Input whitening and packing. */
- INPACK (0, c, 4);
- INPACK (1, d, 5);
- INPACK (2, a, 6);
- INPACK (3, b, 7);
-
- /* Encryption Feistel cycles. */
- DECCYCLE (7);
- DECCYCLE (6);
- DECCYCLE (5);
- DECCYCLE (4);
- DECCYCLE (3);
- DECCYCLE (2);
- DECCYCLE (1);
- DECCYCLE (0);
-
- /* Output whitening and unpacking. */
- OUTUNPACK (0, a, 0);
- OUTUNPACK (1, b, 1);
- OUTUNPACK (2, c, 2);
- OUTUNPACK (3, d, 3);
-}
-
-/* Test a single encryption and decryption, as a sanity check. */
-
-static const char*
-selftest (void)
-{
- TWOFISH_context ctx; /* Expanded key. */
- byte scratch[16]; /* Encryption/decryption result buffer. */
-
- /* Test vector for single encryption/decryption. Note that I am using
- * the vector from the Twofish paper's "known answer test", I=3, instead
- * of the all-0 vector from the "intermediate value test", because an
- * all-0 key would trigger all the special cases in the RS matrix multiply,
- * leaving the actual math untested. */
- static const byte plaintext[16] = {
- 0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E,
- 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19
- };
- static const byte key[16] = {
- 0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32,
- 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A
- };
- static const byte ciphertext[16] = {
- 0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85,
- 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3
- };
-
- twofish_setkey (&ctx, key, sizeof(key));
- twofish_encrypt (&ctx, scratch, plaintext);
- if (memcmp (scratch, ciphertext, sizeof (ciphertext)))
- return "Twofish test encryption failed.";
- twofish_decrypt (&ctx, scratch, scratch);
- if (memcmp (scratch, plaintext, sizeof (plaintext)))
- return "Twofish test decryption failed.";
- return NULL;
-}
-
-/* More complete test program. This does a thousand encryptions and
- * decryptions with each of five hundred keys using a feedback scheme similar
- * to a Feistel cipher, so as to be sure of testing all the table entries
- * pretty thoroughly. We keep changing the keys so as to get a more
- * meaningful performance number, since the key setup is non-trivial for
- * Twofish. */
-
-#ifdef TEST
-
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-int
-main()
-{
- TWOFISH_context ctx; /* Expanded key. */
- int i, j; /* Loop counters. */
- const char *encrypt_msg; /* Message to print regarding encryption test;
- * the printf is done outside the loop to avoid
- * stuffing up the timing. */
- clock_t timer; /* For computing elapsed time. */
-
- /* Test buffer. */
- byte buffer[2][16] = {
- {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
- 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF},
- {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78,
- 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0}
- };
-
- /* Expected outputs for the million-operation test */
- static const byte test_encrypt[2][16] = {
- {0xD6, 0xD9, 0x74, 0x06, 0x93, 0x9C, 0x9A, 0x5E,
- 0xAA, 0x34, 0x18, 0x5B, 0xD3, 0x92, 0x5B, 0xC5},
- {0x9C, 0xCD, 0x01, 0x30, 0xF9, 0x96, 0x00, 0x60,
- 0x49, 0x91, 0x73, 0x28, 0x9D, 0x8E, 0x8F, 0xC4}
- };
- static const byte test_decrypt[2][16] = {
- {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
- 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF},
- {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78,
- 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0}
- };
-
- /* Start the timer ticking. */
- timer = clock ();
-
- /* Encryption test. */
- for (i = 0; i < 250; i++) {
- twofish_setkey (&ctx, buffer[0], sizeof (buffer[0]));
- for (j = 0; j < 1000; j++)
- twofish_encrypt (&ctx, buffer[1], buffer[1]);
- twofish_setkey (&ctx, buffer[1], sizeof (buffer[1]));
- for (j = 0; j < 1000; j++)
- twofish_encrypt (&ctx, buffer[0], buffer[0]);
- }
- encrypt_msg = memcmp (buffer, test_encrypt, sizeof (test_encrypt)) ?
- "encryption failure!\n" : "encryption OK!\n";
-
- /* Decryption test. */
- for (i = 0; i < 250; i++) {
- twofish_setkey (&ctx, buffer[1], sizeof (buffer[1]));
- for (j = 0; j < 1000; j++)
- twofish_decrypt (&ctx, buffer[0], buffer[0]);
- twofish_setkey (&ctx, buffer[0], sizeof (buffer[0]));
- for (j = 0; j < 1000; j++)
- twofish_decrypt (&ctx, buffer[1], buffer[1]);
- }
-
- /* Stop the timer, and print results. */
- timer = clock () - timer;
- printf (encrypt_msg);
- printf (memcmp (buffer, test_decrypt, sizeof (test_decrypt)) ?
- "decryption failure!\n" : "decryption OK!\n");
- printf ("elapsed time: %.1f s.\n", (float) timer / CLOCKS_PER_SEC);
-
- return 0;
-}
-
-#endif /* TEST */
-
-static const char *
-twofish_get_info (int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey) (void *c, byte *key, unsigned keylen),
- void (**r_encrypt) (void *c, byte *outbuf, byte *inbuf),
- void (**r_decrypt) (void *c, byte *outbuf, byte *inbuf)
- )
-{
- *keylen = algo==10? 256 : 128;
- *blocksize = 16;
- *contextsize = sizeof (TWOFISH_context);
- *r_setkey = FNCCAST_SETKEY (twofish_setkey);
- *r_encrypt= FNCCAST_CRYPT (twofish_encrypt);
- *r_decrypt= FNCCAST_CRYPT (twofish_decrypt);
-
- if( algo == 10 )
- return "TWOFISH";
- if (algo == 102) /* This algorithm number is assigned for
- * experiments, so we can use it */
- return "TWOFISH128";
- return NULL;
-}
-
-
-const char * const gnupgext_version = "TWOFISH ($Revision$)";
-
-static struct {
- int class;
- int version;
- int value;
- void (*func)(void);
-} func_table[] = {
- { 20, 1, 0, (void(*)(void))twofish_get_info },
- { 21, 1, 10 },
- { 21, 1, 102 },
-};
-
-
-
-/****************
- * Enumerate the names of the functions together with informations about
- * this function. Set sequence to an integer with a initial value of 0 and
- * do not change it.
- * If what is 0 all kind of functions are returned.
- * Return values: class := class of function:
- * 10 = message digest algorithm info function
- * 11 = integer with available md algorithms
- * 20 = cipher algorithm info function
- * 21 = integer with available cipher algorithms
- * 30 = public key algorithm info function
- * 31 = integer with available pubkey algorithms
- * version = interface version of the function/pointer
- * (currently this is 1 for all functions)
- */
-void *
-gnupgext_enum_func ( int what, int *sequence, int *class, int *vers )
-{
- void *ret;
- int i = *sequence;
-
- do {
- if ( i >= DIM(func_table) || i < 0 ) {
- return NULL;
- }
- *class = func_table[i].class;
- *vers = func_table[i].version;
- switch( *class ) {
- case 11:
- case 21:
- case 31:
- ret = &func_table[i].value;
- break;
- default:
- ret = func_table[i].func;
- break;
- }
- i++;
- } while ( what && what != *class );
-
- *sequence = i;
- return ret;
-}
-
diff --git a/configure.in b/configure.in
deleted file mode 100644
index 35aaa624..00000000
--- a/configure.in
+++ /dev/null
@@ -1,460 +0,0 @@
-dnl
-dnl Configure template for GNUPG
-dnl
-dnl (Process this file with autoconf to produce a configure script.)
-AC_REVISION($Revision$)dnl
-
-dnl Must reset CDPATH so that bash's cd does not print to stdout
-CDPATH=
-
-AC_INIT(g10/g10.c)
-AC_CONFIG_AUX_DIR(scripts)
-AM_CONFIG_HEADER(config.h)
-
-
-VERSION=`cat $srcdir/VERSION`
-PACKAGE=gnupg
-ALL_LINGUAS="de es_ES fr it pl pt_BR ru"
-static_modules="sha1 md5 rmd160"
-AC_SUBST(VERSION)
-AC_SUBST(PACKAGE)
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
-
-MODULES_IN_CIPHER=`awk '/# MODULES: / { for(i=3;i<=NF;i++) print $i}' \
- $srcdir/cipher/Makefile.am`
-
-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)
-
-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 debugging is requested])
-AC_ARG_ENABLE(m-debug,
-[ --enable-m-debug enable debugging of memory allocation],
-use_m_debug=$enableval, use_m_debug=no)
-AC_MSG_RESULT($use_m_debug)
-if test "$use_m_debug" = yes; then
- AC_DEFINE(M_DEBUG)
- use_m_guard=yes
-else
- 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)
-fi
-if test "$use_m_guard" = yes ; then
- AC_DEFINE(M_GUARD)
-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 Checks for programs.
-
-AC_CANONICAL_SYSTEM
-AC_ARG_PROGRAM
-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)
-dnl AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
-AC_PROG_CC
-AC_PROG_CPP
-AC_ISC_POSIX
-AC_PROG_RANLIB
-AC_PROG_INSTALL
-dnl AC_CYGWIN32
-dnl AM_PROG_LIBTOOL
-
-MPI_OPT_FLAGS=""
-if test "$GCC" = yes; then
- CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
-fi
-
-
-try_gettext=yes
-try_gdbm=yes
-case "${target}" in
- i386--mingw32)
- # special stuff for Windoze NT
- cross_compiling=yes
- CC="i386--mingw32-gcc"
- CPP="i386--mingw32-gcc -E"
- RANLIB="i386--mingw32-ranlib"
- ac_cv_have_dev_random=no
- AC_DEFINE(USE_ONLY_8DOT3)
- AC_DEFINE(HAVE_DRIVE_LETTERS)
- AC_DEFINE(HAVE_DOSISH_SYSTEM)
- try_gettext="no"
- try_gdbm="no"
- ;;
- i386-emx-os2)
- # 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"
- try_gdbm="no"
- ;;
- *-*-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
- ;;
- m68k-atari-mint)
- ;;
- *)
- ;;
-esac
-
-AC_SUBST(MPI_OPT_FLAGS)
-
-GNUPG_CHECK_PIC
-GNUPG_CHECK_RDYNAMIC
-if test "$NO_PIC" = yes; then
- try_dynload=no
-fi
-
-
-case "${target}" in
- i386--mingw32)
- PRINTABLE_OS_NAME="MingW32"
- ;;
- i386-emx-os2)
- PRINTABLE_OS_NAME="OS/2"
- ;;
- *-linux*)
- PRINTABLE_OS_NAME="GNU/Linux"
- ;;
- *)
- PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
- ;;
-esac
-AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME")
-
-dnl Fixme: Are these the best flags for OpenBSD????
-case "${target}" in
- *-openbsd*)
- NAME_OF_DEV_RANDOM="/dev/srandom"
- NAME_OF_DEV_URANDOM="/dev/urandom"
- DYNLINK_MOD_CFLAGS="-shared -rdynamic -fpic -Wl,-Bshareable -Wl,-x"
- ;;
- *)
- NAME_OF_DEV_RANDOM="/dev/random"
- NAME_OF_DEV_URANDOM="/dev/urandom"
- DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC -lc"
- ;;
-esac
-AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM")
-AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM")
-AC_SUBST(MPI_OPT_FLAGS)
-
-
-dnl Checks for libraries.
-
-if test "$try_gettext" = yes; then
-AM_GNU_GETTEXT
-fi
-
-if test "$try_gdbm" = yes; then
-AC_CHECK_LIB(gdbm,gdbm_firstkey)
-fi
-
-dnl Solaris needs -lsocket and -lnsl
-AC_CHECK_LIB(socket, socket)
-AC_CHECK_LIB(nsl, gethostbyname)
-
-
-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)
- AC_DEFINE(HAVE_DL_DLOPEN)
- DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
- use_gnupg_extensions=yes
- else
- AC_CHECK_LIB(c,dlopen)
- if test "$ac_cv_lib_c_dlopen" = "yes"; then
- AC_DEFINE(USE_DYNAMIC_LINKING)
- AC_DEFINE(HAVE_DL_DLOPEN)
- DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
- dnl fixme: this is probably false but it should
- dnl work for freebsd
- AC_DEFINE(DLSYM_NEEDS_UNDERSCORE)
- use_gnupg_extensions=yes
- else
- AC_CHECK_LIB(dld,dld_link)
- if test "$ac_cv_lib_dld_dld_link" = "yes"; then
- AC_DEFINE(USE_DYNAMIC_LINKING)
- AC_DEFINE(HAVE_DLD_DLD_LINK)
- DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC"
- use_gnupg_extensions=yes
- 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)
-
-
-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)
-
-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_VPRINTF
-AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mmap)
-AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit)
-AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime)
-
-GNUPG_CHECK_MLOCK
-
-GNUPG_CHECK_IPC
-if test "$ac_cv_header_sys_shm_h" = "yes"; then
- AC_DEFINE(USE_SHM_COPROCESSING)
-fi
-
-dnl check whether we have a random device
-if test "$try_dev_random" = yes ; then
-AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
-[if test -c "$NAME_OF_DEV_RANDOM" && test -c "$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)
-fi
-else
- AC_MSG_CHECKING(for random device)
- ac_cv_have_dev_random=no
- AC_MSG_RESULT(has been disabled)
-fi
-
-
-dnl
-dnl Figure out the default linkage mode for cipher modules
-dnl
-dnl (We always need a static rmd160)
-static_modules="$static_modules rmd160"
-if test "$ac_cv_have_dev_random" = yes; then
- static_modules="$static_modules rndlinux"
-else
- case "${target}" in
- i386--mingw32)
- static_modules="$static_modules rndw32"
- ;;
- i386-emx-os2)
- static_modules="$static_modules rndos2"
- ;;
- m68k-atari-mint)
- static_modules="$static_modules rndatari"
- ;;
- *)
- static_modules="$static_modules rndunix"
- ;;
- esac
-fi
-
-dnl
-dnl Parse the modules list and build the list
-dnl of static and dymically linked modules
-dnl
-STATIC_CIPHER_NAMES=""
-STATIC_CIPHER_OBJS=""
-DYNAMIC_CIPHER_MODS=""
-GNUPG_MSG_PRINT([dynamically linked cipher modules:])
-for name in $MODULES_IN_CIPHER; do
- 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"
- GNUPG_MSG_PRINT([$name])
- fi
-done
-AC_MSG_RESULT()
-AC_SUBST(STATIC_CIPHER_OBJS)
-AC_SUBST(STATIC_CIPHER_NAMES)
-AC_SUBST(DYNAMIC_CIPHER_MODS)
-
-dnl
-dnl And build the constructor file
-dnl
-cat <<EOF >cipher/construct.c
-/* automatically generated by configure - do not edit */
-
-EOF
-GNUPG_MSG_PRINT([statically linked cipher modules:])
-for name in $STATIC_CIPHER_NAMES; do
- echo "void ${name}_constructor(void);" >>cipher/construct.c
- GNUPG_MSG_PRINT([$name])
-done
-AC_MSG_RESULT()
-cat <<EOF >>cipher/construct.c
-
-void
-cipher_modules_constructor(void)
-{
- static int done = 0;
- if( done )
- return;
- done = 1;
-
-EOF
-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
-dnl (form now these are only dynamic)
-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
- GNUPG_LINK_FILES($mpi_ln_src, $mpi_ln_dst)
- 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=""
-if test "$ac_cv_mpi_extra_asm_modules" != ""; then
-GNUPG_MSG_PRINT([mpi extra asm functions:])
-for i in $ac_cv_mpi_extra_asm_modules; do
- GNUPG_MSG_PRINT([$i])
- MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
-done
-AC_MSG_RESULT()
-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).
-if test "$g10_force_zlib" = "yes"; then
- ZLIBS="../zlib/libzlib.a"
- AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
- GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
- GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
-else
-AC_CHECK_HEADERS(zlib.h)
-if test "$ac_cv_header_zlib_h" = yes ; then
- LIBS="$LIBS -lz"
- ZLIBS=
- AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false)
-else
- ZLIBS="../zlib/libzlib.a"
- AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
- GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
- GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
-fi
-fi
-AC_SUBST(ZLIBS)
-
-if echo "$VERSION" | grep '[a-zA-Z]' >/dev/null ; then
- AC_DEFINE(IS_DEVELOPMENT_VERSION)
-fi
-
-GNUPG_DO_LINK_FILES
-
-
-AC_OUTPUT([
-Makefile
-intl/Makefile
-po/Makefile.in
-util/Makefile
-mpi/Makefile
-cipher/Makefile
-g10/Makefile
-doc/Makefile
-tools/Makefile
-zlib/Makefile
-checks/Makefile
-])
-
-dnl *-*wedit:notab*-* Please keep this as the last line.
diff --git a/doc/Makefile.am b/doc/Makefile.am
deleted file mode 100644
index 8be224b0..00000000
--- a/doc/Makefile.am
+++ /dev/null
@@ -1,42 +0,0 @@
-## Process this file with automake to create Makefile.in
-
-EXTRA_DIST = DETAILS gpg.1pod gpg.1 FAQ HACKING OpenPGP
-
-man_MANS = gpg.1
-
-
-
-install-data-hook:
- if test -f $(man1dir)/gpgm.1; then rm $(man1dir)/gpgm.1; fi
- ln -s $(man1dir)/gpg.1 $(man1dir)/gpgm.1 \
- || ln $(man1dir)/gpg.1 $(man1dir)/gpgm.1
-
-
-
-%: %pod
- pod2man $< --section=`echo $@ | sed 's/^.*(?)$$/$$&/'`\
- --release="`date -r $< '+%d %b %Y'`"\
- --center="GNU Tools" --date=' '\
- >$@,$$$$ && mv -f $@,$$$$ $@\
- || rm -f $@,$$$$
-
-
-
-%.txt : %.sgml
- sgml2txt -c latin $*
-
-%.html : %.sgml
- sgml2html -l deutsch -c latin $*
-
-%.dvi : %.sgml
- -rm $*.sgml.tmp
- mv $*.sgml $*.sgml.tmp
- sed -e '/<!entity/ s/"IGNORE">/"INCLUDE">/' $*.sgml.tmp >$*.sgml
- sgml2latex -b -l deutsch -c latin $* ; mv $*.sgml.tmp $*.sgml
-
-%.ps : %.sgml
- -rm $*.sgml.tmp
- mv $*.sgml $*.sgml.tmp
- sed -e '/<!entity/ s/"IGNORE">/"INCLUDE">/' $*.sgml.tmp >$*.sgml
- sgml2latex -b -l deutsch -c latin -o ps $* ; mv $*.sgml.tmp $*.sgml
-
diff --git a/mpi/ChangeLog b/mpi/ChangeLog
deleted file mode 100644
index 24d1defc..00000000
--- a/mpi/ChangeLog
+++ /dev/null
@@ -1,121 +0,0 @@
-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
-
-
diff --git a/mpi/Makefile.am b/mpi/Makefile.am
deleted file mode 100644
index 6fb7adda..00000000
--- a/mpi/Makefile.am
+++ /dev/null
@@ -1,53 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-INCLUDES = -I$(top_srcdir)/include
-CFLAGS = @CFLAGS@ @MPI_OPT_FLAGS@
-SFLAGS = @MPI_SFLAGS@
-
-SUFFIXES = .S .s
-
-EXTRA_DIST = config.links
-DISTCLEANFILES = 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
-
-
-noinst_LIBRARIES = libmpi.a
-# noinst_HEADERS =
-
-
-
-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-inv.c \
- mpi-mul.c \
- mpi-pow.c \
- mpi-mpow.c \
- mpi-scan.c \
- mpicoder.c \
- mpih-cmp.c \
- mpih-add.c \
- mpih-sub.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@
-
diff --git a/mpi/alpha/README b/mpi/alpha/README
deleted file mode 100644
index 55c0a291..00000000
--- a/mpi/alpha/README
+++ /dev/null
@@ -1,53 +0,0 @@
-This directory contains mpn functions optimized for DEC Alpha processors.
-
-RELEVANT OPTIMIZATION ISSUES
-
-EV4
-
-1. This chip has very limited store bandwidth. The on-chip L1 cache is
-write-through, and a cache line is transfered from the store buffer to the
-off-chip L2 in as much 15 cycles on most systems. This delay hurts
-mpn_add_n, mpn_sub_n, mpn_lshift, and mpn_rshift.
-
-2. Pairing is possible between memory instructions and integer arithmetic
-instructions.
-
-3. mulq and umulh is documented to have a latency of 23 cycles, but 2 of
-these cycles are pipelined. Thus, multiply instructions can be issued at a
-rate of one each 21nd cycle.
-
-EV5
-
-1. The memory bandwidth of this chip seems excellent, both for loads and
-stores. Even when the working set is larger than the on-chip L1 and L2
-caches, the perfromance remain almost unaffected.
-
-2. mulq has a measured latency of 13 cycles and an issue rate of 1 each 8th
-cycle. umulh has a measured latency of 15 cycles and an issue rate of 1
-each 10th cycle. But the exact timing is somewhat confusing.
-
-3. mpn_add_n. With 4-fold unrolling, we need 37 instructions, whereof 12
- are memory operations. This will take at least
- ceil(37/2) [dual issue] + 1 [taken branch] = 20 cycles
- We have 12 memory cycles, plus 4 after-store conflict cycles, or 16 data
- cache cycles, which should be completely hidden in the 20 issue cycles.
- The computation is inherently serial, with these dependencies:
- addq
- / \
- addq cmpult
- | |
- cmpult |
- \ /
- or
- I.e., there is a 4 cycle path for each limb, making 16 cycles the absolute
- minimum. We could replace the `or' with a cmoveq/cmovne, which would save
- a cycle on EV5, but that might waste a cycle on EV4. Also, cmov takes 2
- cycles.
- addq
- / \
- addq cmpult
- | \
- cmpult -> cmovne
-
-STATUS
-
diff --git a/mpi/alpha/distfiles b/mpi/alpha/distfiles
deleted file mode 100644
index f2ab9fc3..00000000
--- a/mpi/alpha/distfiles
+++ /dev/null
@@ -1,11 +0,0 @@
-README
-mpih-add1.S
-mpih-sub1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-
-udiv-qrnnd.S
-
diff --git a/mpi/alpha/mpih-add1.S b/mpi/alpha/mpih-add1.S
deleted file mode 100644
index dc3bcfbb..00000000
--- a/mpi/alpha/mpih-add1.S
+++ /dev/null
@@ -1,126 +0,0 @@
-/* alpha add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1995 Free Software Foundation, Inc.
- * 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
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, ($16)
- * mpi_ptr_t s1_ptr, ($17)
- * mpi_ptr_t s2_ptr, ($18)
- * mpi_size_t size) ($19)
- */
-
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_add_n
- .ent mpihelp_add_n
-mpihelp_add_n:
- .frame $30,0,$26,0
-
- ldq $3,0($17)
- ldq $4,0($18)
-
- subq $19,1,$19
- and $19,4-1,$2 # number of limbs in first loop
- bis $31,$31,$0
- beq $2,.L0 # if multiple of 4 limbs, skip first loop
-
- subq $19,$2,$19
-
-.Loop0: subq $2,1,$2
- ldq $5,8($17)
- addq $4,$0,$4
- ldq $6,8($18)
- cmpult $4,$0,$1
- addq $3,$4,$4
- cmpult $4,$3,$0
- stq $4,0($16)
- or $0,$1,$0
-
- addq $17,8,$17
- addq $18,8,$18
- bis $5,$5,$3
- bis $6,$6,$4
- addq $16,8,$16
- bne $2,.Loop0
-
-.L0: beq $19,.Lend
-
- .align 3
-.Loop: subq $19,4,$19
-
- ldq $5,8($17)
- addq $4,$0,$4
- ldq $6,8($18)
- cmpult $4,$0,$1
- addq $3,$4,$4
- cmpult $4,$3,$0
- stq $4,0($16)
- or $0,$1,$0
-
- ldq $3,16($17)
- addq $6,$0,$6
- ldq $4,16($18)
- cmpult $6,$0,$1
- addq $5,$6,$6
- cmpult $6,$5,$0
- stq $6,8($16)
- or $0,$1,$0
-
- ldq $5,24($17)
- addq $4,$0,$4
- ldq $6,24($18)
- cmpult $4,$0,$1
- addq $3,$4,$4
- cmpult $4,$3,$0
- stq $4,16($16)
- or $0,$1,$0
-
- ldq $3,32($17)
- addq $6,$0,$6
- ldq $4,32($18)
- cmpult $6,$0,$1
- addq $5,$6,$6
- cmpult $6,$5,$0
- stq $6,24($16)
- or $0,$1,$0
-
- addq $17,32,$17
- addq $18,32,$18
- addq $16,32,$16
- bne $19,.Loop
-
-.Lend: addq $4,$0,$4
- cmpult $4,$0,$1
- addq $3,$4,$4
- cmpult $4,$3,$0
- stq $4,0($16)
- or $0,$1,$0
- ret $31,($26),1
-
- .end mpihelp_add_n
-
diff --git a/mpi/alpha/mpih-lshift.S b/mpi/alpha/mpih-lshift.S
deleted file mode 100644
index 9688588f..00000000
--- a/mpi/alpha/mpih-lshift.S
+++ /dev/null
@@ -1,122 +0,0 @@
-/* alpha lshift
- * Copyright (C) 1994, 1995 Free Software Foundation, Inc.
- * 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
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (r16)
- * mpi_ptr_t up, (r17)
- * mpi_size_t usize, (r18)
- * unsigned cnt) (r19)
- *
- * This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling,
- * it would take 4 cycles/limb. It should be possible to get down to 3
- * cycles/limb since both ldq and stq can be paired with the other used
- * instructions. But there are many restrictions in the 21064 pipeline that
- * makes it hard, if not impossible, to get down to 3 cycles/limb:
- *
- * 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay.
- * 2. Only aligned instruction pairs can be paired.
- * 3. The store buffer or silo might not be able to deal with the bandwidth.
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_lshift
- .ent mpihelp_lshift
-mpihelp_lshift:
- .frame $30,0,$26,0
-
- s8addq $18,$17,$17 # make r17 point at end of s1
- ldq $4,-8($17) # load first limb
- subq $17,8,$17
- subq $31,$19,$7
- s8addq $18,$16,$16 # make r16 point at end of RES
- subq $18,1,$18
- and $18,4-1,$20 # number of limbs in first loop
- srl $4,$7,$0 # compute function result
-
- beq $20,.L0
- subq $18,$20,$18
-
- .align 3
-.Loop0:
- ldq $3,-8($17)
- subq $16,8,$16
- subq $17,8,$17
- subq $20,1,$20
- sll $4,$19,$5
- srl $3,$7,$6
- bis $3,$3,$4
- bis $5,$6,$8
- stq $8,0($16)
- bne $20,.Loop0
-
-.L0: beq $18,.Lend
-
- .align 3
-.Loop: ldq $3,-8($17)
- subq $16,32,$16
- subq $18,4,$18
- sll $4,$19,$5
- srl $3,$7,$6
-
- ldq $4,-16($17)
- sll $3,$19,$1
- bis $5,$6,$8
- stq $8,24($16)
- srl $4,$7,$2
-
- ldq $3,-24($17)
- sll $4,$19,$5
- bis $1,$2,$8
- stq $8,16($16)
- srl $3,$7,$6
-
- ldq $4,-32($17)
- sll $3,$19,$1
- bis $5,$6,$8
- stq $8,8($16)
- srl $4,$7,$2
-
- subq $17,32,$17
- bis $1,$2,$8
- stq $8,0($16)
-
- bgt $18,.Loop
-
-.Lend: sll $4,$19,$8
- stq $8,-8($16)
- ret $31,($26),1
- .end mpihelp_lshift
-
-
diff --git a/mpi/alpha/mpih-mul1.S b/mpi/alpha/mpih-mul1.S
deleted file mode 100644
index 5b24d98d..00000000
--- a/mpi/alpha/mpih-mul1.S
+++ /dev/null
@@ -1,89 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (r16)
- * mpi_ptr_t s1_ptr, (r17)
- * mpi_size_t s1_size, (r18)
- * mpi_limb_t s2_limb) (r19)
- *
- * This code runs at 42 cycles/limb on the EV4 and 18 cycles/limb on the EV5.
- *
- * To improve performance for long multiplications, we would use
- * 'fetch' for S1 and 'fetch_m' for RES. It's not obvious how to use
- * these instructions without slowing down the general code: 1. We can
- * only have two prefetches in operation at any time in the Alpha
- * architecture. 2. There will seldom be any special alignment
- * between RES_PTR and S1_PTR. Maybe we can simply divide the current
- * loop into an inner and outer loop, having the inner loop handle
- * exactly one prefetch block?
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_mul_1
- .ent mpihelp_mul_1 2
-mpihelp_mul_1:
- .frame $30,0,$26
-
- ldq $2,0($17) # $2 = s1_limb
- subq $18,1,$18 # size--
- mulq $2,$19,$3 # $3 = prod_low
- bic $31,$31,$4 # clear cy_limb
- umulh $2,$19,$0 # $0 = prod_high
- beq $18,Lend1 # jump if size was == 1
- ldq $2,8($17) # $2 = s1_limb
- subq $18,1,$18 # size--
- stq $3,0($16)
- beq $18,Lend2 # jump if size was == 2
-
- .align 3
-Loop: mulq $2,$19,$3 # $3 = prod_low
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- subq $18,1,$18 # size--
- umulh $2,$19,$4 # $4 = cy_limb
- ldq $2,16($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- stq $3,8($16)
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- addq $16,8,$16 # res_ptr++
- bne $18,Loop
-
-Lend2: mulq $2,$19,$3 # $3 = prod_low
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- umulh $2,$19,$4 # $4 = cy_limb
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- stq $3,8($16)
- addq $4,$0,$0 # cy_limb = prod_high + cy
- ret $31,($26),1
-Lend1: stq $3,0($16)
- ret $31,($26),1
-
- .end mpihelp_mul_1
-
-
diff --git a/mpi/alpha/mpih-mul2.S b/mpi/alpha/mpih-mul2.S
deleted file mode 100644
index 0c8d361c..00000000
--- a/mpi/alpha/mpih-mul2.S
+++ /dev/null
@@ -1,96 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r16)
- * mpi_ptr_t s1_ptr, (r17)
- * mpi_size_t s1_size, (r18)
- * mpi_limb_t s2_limb) (r19)
- *
- * This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5.
- */
-
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_addmul_1
- .ent mpihelp_addmul_1 2
-mpihelp_addmul_1:
- .frame $30,0,$26
-
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- subq $18,1,$18 # size--
- mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- umulh $2,$19,$0 # $0 = prod_high
- beq $18,.Lend1 # jump if size was == 1
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- subq $18,1,$18 # size--
- addq $5,$3,$3
- cmpult $3,$5,$4
- stq $3,0($16)
- addq $16,8,$16 # res_ptr++
- beq $18,.Lend2 # jump if size was == 2
-
- .align 3
-.Loop: mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- subq $18,1,$18 # size--
- umulh $2,$19,$4 # $4 = cy_limb
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- addq $5,$3,$3
- cmpult $3,$5,$5
- stq $3,0($16)
- addq $16,8,$16 # res_ptr++
- addq $5,$0,$0 # combine carries
- bne $18,.Loop
-
-.Lend2: mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- umulh $2,$19,$4 # $4 = cy_limb
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- addq $5,$3,$3
- cmpult $3,$5,$5
- stq $3,0($16)
- addq $5,$0,$0 # combine carries
- addq $4,$0,$0 # cy_limb = prod_high + cy
- ret $31,($26),1
-.Lend1: addq $5,$3,$3
- cmpult $3,$5,$5
- stq $3,0($16)
- addq $0,$5,$0
- ret $31,($26),1
-
- .end mpihelp_addmul_1
-
diff --git a/mpi/alpha/mpih-mul3.S b/mpi/alpha/mpih-mul3.S
deleted file mode 100644
index bdf16b57..00000000
--- a/mpi/alpha/mpih-mul3.S
+++ /dev/null
@@ -1,94 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (r16 )
- * mpi_ptr_t s1_ptr, (r17 )
- * mpi_size_t s1_size, (r18 )
- * mpi_limb_t s2_limb) (r19 )
- *
- * This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5.
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_submul_1
- .ent mpihelp_submul_1 2
-mpihelp_submul_1:
- .frame $30,0,$26
-
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- subq $18,1,$18 # size--
- mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- umulh $2,$19,$0 # $0 = prod_high
- beq $18,.Lend1 # jump if size was == 1
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- subq $18,1,$18 # size--
- subq $5,$3,$3
- cmpult $5,$3,$4
- stq $3,0($16)
- addq $16,8,$16 # res_ptr++
- beq $18,.Lend2 # jump if size was == 2
-
- .align 3
-.Loop: mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- subq $18,1,$18 # size--
- umulh $2,$19,$4 # $4 = cy_limb
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- subq $5,$3,$3
- cmpult $5,$3,$5
- stq $3,0($16)
- addq $16,8,$16 # res_ptr++
- addq $5,$0,$0 # combine carries
- bne $18,.Loop
-
-.Lend2: mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- umulh $2,$19,$4 # $4 = cy_limb
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- subq $5,$3,$3
- cmpult $5,$3,$5
- stq $3,0($16)
- addq $5,$0,$0 # combine carries
- addq $4,$0,$0 # cy_limb = prod_high + cy
- ret $31,($26),1
-.Lend1: subq $5,$3,$3
- cmpult $5,$3,$5
- stq $3,0($16)
- addq $0,$5,$0
- ret $31,($26),1
-
- .end mpihelp_submul_1
-
diff --git a/mpi/alpha/mpih-rshift.S b/mpi/alpha/mpih-rshift.S
deleted file mode 100644
index e93315ae..00000000
--- a/mpi/alpha/mpih-rshift.S
+++ /dev/null
@@ -1,120 +0,0 @@
-/* alpha rshift
- * Copyright (C) 1994, 1995 Free Software Foundation, Inc.
- * 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
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (r16)
- * mpi_ptr_t up, (r17)
- * mpi_size_t usize, (r18)
- * unsigned cnt) (r19)
- *
- * This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling,
- * it would take 4 cycles/limb. It should be possible to get down to 3
- * cycles/limb since both ldq and stq can be paired with the other used
- * instructions. But there are many restrictions in the 21064 pipeline that
- * makes it hard, if not impossible, to get down to 3 cycles/limb:
- *
- * 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay.
- * 2. Only aligned instruction pairs can be paired.
- * 3. The store buffer or silo might not be able to deal with the bandwidth.
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_rshift
- .ent mpihelp_rshift
-mpihelp_rshift:
- .frame $30,0,$26,0
-
- ldq $4,0($17) # load first limb
- addq $17,8,$17
- subq $31,$19,$7
- subq $18,1,$18
- and $18,4-1,$20 # number of limbs in first loop
- sll $4,$7,$0 # compute function result
-
- beq $20,.R0
- subq $18,$20,$18
-
- .align 3
-.Roop0:
- ldq $3,0($17)
- addq $16,8,$16
- addq $17,8,$17
- subq $20,1,$20
- srl $4,$19,$5
- sll $3,$7,$6
- bis $3,$3,$4
- bis $5,$6,$8
- stq $8,-8($16)
- bne $20,.Roop0
-
-.R0: beq $18,.Rend
-
- .align 3
-.Roop: ldq $3,0($17)
- addq $16,32,$16
- subq $18,4,$18
- srl $4,$19,$5
- sll $3,$7,$6
-
- ldq $4,8($17)
- srl $3,$19,$1
- bis $5,$6,$8
- stq $8,-32($16)
- sll $4,$7,$2
-
- ldq $3,16($17)
- srl $4,$19,$5
- bis $1,$2,$8
- stq $8,-24($16)
- sll $3,$7,$6
-
- ldq $4,24($17)
- srl $3,$19,$1
- bis $5,$6,$8
- stq $8,-16($16)
- sll $4,$7,$2
-
- addq $17,32,$17
- bis $1,$2,$8
- stq $8,-8($16)
-
- bgt $18,.Roop
-
-.Rend: srl $4,$19,$8
- stq $8,0($16)
- ret $31,($26),1
- .end mpihelp_rshift
-
diff --git a/mpi/alpha/mpih-sub1.S b/mpi/alpha/mpih-sub1.S
deleted file mode 100644
index bf614309..00000000
--- a/mpi/alpha/mpih-sub1.S
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Alpha sub_n -- Subtract two limb vectors of the same length > 0 and
- * store difference in a third limb vector.
- * Copyright (C) 1995, 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (r16)
- * mpi_ptr_t s1_ptr, (r17)
- * mpi_ptr_t s2_ptr, (r18)
- * mpi_size_t size) (r19)
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_sub_n
- .ent mpihelp_sub_n
-mpihelp_sub_n:
- .frame $30,0,$26,0
-
- ldq $3,0($17)
- ldq $4,0($18)
-
- subq $19,1,$19
- and $19,4-1,$2 # number of limbs in first loop
- bis $31,$31,$0
- beq $2,.L0 # if multiple of 4 limbs, skip first loop
-
- subq $19,$2,$19
-
-.Loop0: subq $2,1,$2
- ldq $5,8($17)
- addq $4,$0,$4
- ldq $6,8($18)
- cmpult $4,$0,$1
- subq $3,$4,$4
- cmpult $3,$4,$0
- stq $4,0($16)
- or $0,$1,$0
-
- addq $17,8,$17
- addq $18,8,$18
- bis $5,$5,$3
- bis $6,$6,$4
- addq $16,8,$16
- bne $2,.Loop0
-
-.L0: beq $19,.Lend
-
- .align 3
-.Loop: subq $19,4,$19
-
- ldq $5,8($17)
- addq $4,$0,$4
- ldq $6,8($18)
- cmpult $4,$0,$1
- subq $3,$4,$4
- cmpult $3,$4,$0
- stq $4,0($16)
- or $0,$1,$0
-
- ldq $3,16($17)
- addq $6,$0,$6
- ldq $4,16($18)
- cmpult $6,$0,$1
- subq $5,$6,$6
- cmpult $5,$6,$0
- stq $6,8($16)
- or $0,$1,$0
-
- ldq $5,24($17)
- addq $4,$0,$4
- ldq $6,24($18)
- cmpult $4,$0,$1
- subq $3,$4,$4
- cmpult $3,$4,$0
- stq $4,16($16)
- or $0,$1,$0
-
- ldq $3,32($17)
- addq $6,$0,$6
- ldq $4,32($18)
- cmpult $6,$0,$1
- subq $5,$6,$6
- cmpult $5,$6,$0
- stq $6,24($16)
- or $0,$1,$0
-
- addq $17,32,$17
- addq $18,32,$18
- addq $16,32,$16
- bne $19,.Loop
-
-.Lend: addq $4,$0,$4
- cmpult $4,$0,$1
- subq $3,$4,$4
- cmpult $3,$4,$0
- stq $4,0($16)
- or $0,$1,$0
- ret $31,($26),1
-
- .end mpihelp_sub_n
-
-
diff --git a/mpi/alpha/udiv-qrnnd.S b/mpi/alpha/udiv-qrnnd.S
deleted file mode 100644
index 487991cd..00000000
--- a/mpi/alpha/udiv-qrnnd.S
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Alpha 21064 __udiv_qrnnd
- *
- * Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
- * Copyright (c) 1997 by Werner Koch (dd9jn)
- *
- * This file is part of G10.
- *
- * G10 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.
- *
- * G10 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl __udiv_qrnnd
- .ent __udiv_qrnnd
-__udiv_qrnnd:
- .frame $30,0,$26,0
- .prologue 0
-#define cnt $2
-#define tmp $3
-#define rem_ptr $16
-#define n1 $17
-#define n0 $18
-#define d $19
-#define qb $20
-
- ldiq cnt,16
- blt d,.Largedivisor
-
-.Loop1: cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule d,n1,qb
- subq n1,d,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule d,n1,qb
- subq n1,d,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule d,n1,qb
- subq n1,d,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule d,n1,qb
- subq n1,d,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- subq cnt,1,cnt
- bgt cnt,.Loop1
- stq n1,0(rem_ptr)
- bis $31,n0,$0
- ret $31,($26),1
-
-.Largedivisor:
- and n0,1,$4
-
- srl n0,1,n0
- sll n1,63,tmp
- or tmp,n0,n0
- srl n1,1,n1
-
- and d,1,$6
- srl d,1,$5
- addq $5,$6,$5
-
-.Loop2: cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule $5,n1,qb
- subq n1,$5,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule $5,n1,qb
- subq n1,$5,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule $5,n1,qb
- subq n1,$5,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule $5,n1,qb
- subq n1,$5,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- subq cnt,1,cnt
- bgt cnt,.Loop2
-
- addq n1,n1,n1
- addq $4,n1,n1
- bne $6,.LOdd
- stq n1,0(rem_ptr)
- bis $31,n0,$0
- ret $31,($26),1
-
-.LOdd:
- /* q' in n0. r' in n1 */
- addq n1,n0,n1
- cmpult n1,n0,tmp # tmp := carry from addq
- beq tmp,.LLp6
- addq n0,1,n0
- subq n1,d,n1
-.LLp6: cmpult n1,d,tmp
- bne tmp,.LLp7
- addq n0,1,n0
- subq n1,d,n1
-.LLp7:
- stq n1,0(rem_ptr)
- bis $31,n0,$0
- ret $31,($26),1
-
- .end __udiv_qrnnd
diff --git a/mpi/config.links b/mpi/config.links
deleted file mode 100644
index 63255a12..00000000
--- a/mpi/config.links
+++ /dev/null
@@ -1,227 +0,0 @@
-# sourced my ../configure to get the list of files to link
-# this should set $mpi_ln_src and mpi_ln_dst.
-# 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[34]86*-*-freebsd*-elf | i[34]86*-*-freebsd3*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i386"
- ;;
- i[56]86*-*-freebsd*-elf | i[56]86*-*-freebsd3*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i586 i386"
- ;;
- i[34]86*-*-linuxaout* | i[34]86*-*-linuxoldld* | i[34]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"
- ;;
- i[56]86*-*-linuxaout* | i[56]86*-*-linuxoldld* | i[56]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="i586 i386"
- ;;
- i[34]86*-*-*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i386"
- ;;
- i[56]86*-*-* | 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"
- ;;
- 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"
- ;;
- 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"
- ;;
- 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"
- ;;
- 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
-
-
-case "${target}" in
- *-*-linuxaout* | *-*-linuxoldld* | *-*-linux-gnuoldld*)
- needs_underscore="y"
- ;;
- *-*-linux* | *-sysv* | *-solaris* | *-gnu* | *-freebsd*-elf)
- needs_underscore="n"
- ;;
- *)
- needs_underscore="y"
- ;;
-esac
-
-
-# Make sysdep.h
-echo '/* created by config.links - do not edit */' >./mpi/sysdep.h
-if test "$needs_underscore" = "y" ; 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_src=
-mpi_ln_dst=
-
-# 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_src="$mpi_ln_src mpi/$dir/$fn.S"
- mpi_ln_dst="$mpi_ln_dst mpi/$fn.S"
- break;
- elif test -f $srcdir/mpi/$dir/$fn.c ; then
- mpi_ln_src="$mpi_ln_src mpi/$dir/$fn.c"
- mpi_ln_dst="$mpi_ln_dst mpi/$fn.c"
- break;
- fi
- done
-done
-
diff --git a/mpi/generic/distfiles b/mpi/generic/distfiles
deleted file mode 100644
index 0bf4600f..00000000
--- a/mpi/generic/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-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
-
diff --git a/mpi/generic/mpih-add1.c b/mpi/generic/mpih-add1.c
deleted file mode 100644
index e66c6686..00000000
--- a/mpi/generic/mpih-add1.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* mpihelp-add_1.c - MPI helper functions
- * Copyright (c) 1997 by Werner Koch (dd9jn)
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- *
- * This file is part of G10.
- *
- * G10 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.
- *
- * G10 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-mpi_limb_t
-mpihelp_add_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_ptr_t s2_ptr, mpi_size_t size)
-{
- mpi_limb_t x, y, cy;
- mpi_size_t j;
-
- /* The loop counter and index J goes from -SIZE to -1. This way
- the loop becomes faster. */
- j = -size;
-
- /* Offset the base pointers to compensate for the negative indices. */
- s1_ptr -= j;
- s2_ptr -= j;
- res_ptr -= j;
-
- cy = 0;
- do {
- y = s2_ptr[j];
- x = s1_ptr[j];
- y += cy; /* add previous carry to one addend */
- cy = y < cy; /* get out carry from that addition */
- y += x; /* add other addend */
- cy += y < x; /* get out carry from that add, combine */
- res_ptr[j] = y;
- } while( ++j );
-
- return cy;
-}
-
diff --git a/mpi/generic/mpih-lshift.c b/mpi/generic/mpih-lshift.c
deleted file mode 100644
index 698cd38d..00000000
--- a/mpi/generic/mpih-lshift.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* mpihelp-lshift.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1998 Free Software Foundation, Inc.
- *
- * This file is part of G10.
- *
- * G10 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.
- *
- * G10 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-
-/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left
- * and store the USIZE least significant digits of the result at WP.
- * Return the bits shifted out from the most significant digit.
- *
- * Argument constraints:
- * 1. 0 < CNT < BITS_PER_MP_LIMB
- * 2. If the result is to be written over the input, WP must be >= UP.
- */
-
-mpi_limb_t
-mpihelp_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
- unsigned int cnt)
-{
- mpi_limb_t high_limb, low_limb;
- unsigned sh_1, sh_2;
- mpi_size_t i;
- mpi_limb_t retval;
-
- sh_1 = cnt;
- wp += 1;
- sh_2 = BITS_PER_MPI_LIMB - sh_1;
- i = usize - 1;
- low_limb = up[i];
- retval = low_limb >> sh_2;
- high_limb = low_limb;
- while( --i >= 0 ) {
- low_limb = up[i];
- wp[i] = (high_limb << sh_1) | (low_limb >> sh_2);
- high_limb = low_limb;
- }
- wp[i] = high_limb << sh_1;
-
- return retval;
-}
-
-
diff --git a/mpi/generic/mpih-mul1.c b/mpi/generic/mpih-mul1.c
deleted file mode 100644
index e84eccce..00000000
--- a/mpi/generic/mpih-mul1.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* mpihelp-mul_1.c - MPI helper functions
- * Copyright (c) 1997 by Werner Koch (dd9jn)
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- *
- * This file is part of G10.
- *
- * G10 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.
- *
- * G10 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-mpi_limb_t
-mpihelp_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_limb_t s2_limb)
-{
- mpi_limb_t cy_limb;
- mpi_size_t j;
- mpi_limb_t prod_high, prod_low;
-
- /* The loop counter and index J goes from -S1_SIZE to -1. This way
- * the loop becomes faster. */
- j = -s1_size;
-
- /* Offset the base pointers to compensate for the negative indices. */
- s1_ptr -= j;
- res_ptr -= j;
-
- cy_limb = 0;
- do {
- umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb );
- prod_low += cy_limb;
- cy_limb = (prod_low < cy_limb?1:0) + prod_high;
- res_ptr[j] = prod_low;
- } while( ++j );
-
- return cy_limb;
-}
-
diff --git a/mpi/generic/mpih-mul2.c b/mpi/generic/mpih-mul2.c
deleted file mode 100644
index d77ec802..00000000
--- a/mpi/generic/mpih-mul2.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* mpihelp-mul_2.c - MPI helper functions
- * Copyright (c) 1997 by Werner Koch (dd9jn)
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- *
- * This file is part of G10.
- *
- * G10 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.
- *
- * G10 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-
-mpi_limb_t
-mpihelp_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb)
-{
- mpi_limb_t cy_limb;
- mpi_size_t j;
- mpi_limb_t prod_high, prod_low;
- mpi_limb_t x;
-
- /* The loop counter and index J goes from -SIZE to -1. This way
- * the loop becomes faster. */
- j = -s1_size;
- res_ptr -= j;
- s1_ptr -= j;
-
- cy_limb = 0;
- do {
- umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb );
-
- prod_low += cy_limb;
- cy_limb = (prod_low < cy_limb?1:0) + prod_high;
-
- x = res_ptr[j];
- prod_low = x + prod_low;
- cy_limb += prod_low < x?1:0;
- res_ptr[j] = prod_low;
- } while ( ++j );
- return cy_limb;
-}
-
-
diff --git a/mpi/generic/mpih-mul3.c b/mpi/generic/mpih-mul3.c
deleted file mode 100644
index c7c4e189..00000000
--- a/mpi/generic/mpih-mul3.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* mpihelp-mul_3.c - MPI helper functions
- * Copyright (c) 1997 by Werner Koch (dd9jn)
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- *
- * This file is part of G10.
- *
- * G10 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.
- *
- * G10 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-
-mpi_limb_t
-mpihelp_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb)
-{
- mpi_limb_t cy_limb;
- mpi_size_t j;
- mpi_limb_t prod_high, prod_low;
- mpi_limb_t x;
-
- /* The loop counter and index J goes from -SIZE to -1. This way
- * the loop becomes faster. */
- j = -s1_size;
- res_ptr -= j;
- s1_ptr -= j;
-
- cy_limb = 0;
- do {
- umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb);
-
- prod_low += cy_limb;
- cy_limb = (prod_low < cy_limb?1:0) + prod_high;
-
- x = res_ptr[j];
- prod_low = x - prod_low;
- cy_limb += prod_low > x?1:0;
- res_ptr[j] = prod_low;
- } while( ++j );
-
- return cy_limb;
-}
-
-
diff --git a/mpi/generic/mpih-rshift.c b/mpi/generic/mpih-rshift.c
deleted file mode 100644
index d8ca35f1..00000000
--- a/mpi/generic/mpih-rshift.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* mpih-rshift.c - MPI helper functions
- * Copyright (C) 1994, 1996, 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
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-
-
-/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right
- * and store the USIZE least significant limbs of the result at WP.
- * The bits shifted out to the right are returned.
- *
- * Argument constraints:
- * 1. 0 < CNT < BITS_PER_MP_LIMB
- * 2. If the result is to be written over the input, WP must be <= UP.
- */
-
-mpi_limb_t
-mpihelp_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt)
-{
- mpi_limb_t high_limb, low_limb;
- unsigned sh_1, sh_2;
- mpi_size_t i;
- mpi_limb_t retval;
-
- sh_1 = cnt;
- wp -= 1;
- sh_2 = BITS_PER_MPI_LIMB - sh_1;
- high_limb = up[0];
- retval = high_limb << sh_2;
- low_limb = high_limb;
- for( i=1; i < usize; i++) {
- high_limb = up[i];
- wp[i] = (low_limb >> sh_1) | (high_limb << sh_2);
- low_limb = high_limb;
- }
- wp[i] = low_limb >> sh_1;
-
- return retval;
-}
-
diff --git a/mpi/generic/mpih-sub1.c b/mpi/generic/mpih-sub1.c
deleted file mode 100644
index 2c38ff06..00000000
--- a/mpi/generic/mpih-sub1.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* mpihelp-add_2.c - MPI helper functions
- * Copyright (c) 1997 by Werner Koch (dd9jn)
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- *
- * This file is part of G10.
- *
- * G10 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.
- *
- * G10 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-mpi_limb_t
-mpihelp_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_ptr_t s2_ptr, mpi_size_t size)
-{
- mpi_limb_t x, y, cy;
- mpi_size_t j;
-
- /* The loop counter and index J goes from -SIZE to -1. This way
- the loop becomes faster. */
- j = -size;
-
- /* Offset the base pointers to compensate for the negative indices. */
- s1_ptr -= j;
- s2_ptr -= j;
- res_ptr -= j;
-
- cy = 0;
- do {
- y = s2_ptr[j];
- x = s1_ptr[j];
- y += cy; /* add previous carry to subtrahend */
- cy = y < cy; /* get out carry from that addition */
- y = x - y; /* main subtract */
- cy += y > x; /* get out carry from the subtract, combine */
- res_ptr[j] = y;
- } while( ++j );
-
- return cy;
-}
-
-
diff --git a/mpi/generic/udiv-w-sdiv.c b/mpi/generic/udiv-w-sdiv.c
deleted file mode 100644
index 7ffec099..00000000
--- a/mpi/generic/udiv-w-sdiv.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* mpihelp_udiv_w_sdiv -- implement udiv_qrnnd on machines with only signed
- * division.
- *
- * Contributed by Peter L. Montgomery.
- *
- * Copyright (C) 1992, 1994, 1996, 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-internal.h"
-#include "longlong.h"
-
-
-#if 0 /* not yet ported to MPI */
-
-mpi_limb_t
-mpihelp_udiv_w_sdiv( mpi_limp_t *rp,
- mpi_limp_t *a1,
- mpi_limp_t *a0,
- mpi_limp_t *d )
-{
- mp_limb_t q, r;
- mp_limb_t c0, c1, b1;
-
- if ((mpi_limb_signed_t) d >= 0)
- {
- if (a1 < d - a1 - (a0 >> (BITS_PER_MP_LIMB - 1)))
- {
- /* dividend, divisor, and quotient are nonnegative */
- sdiv_qrnnd (q, r, a1, a0, d);
- }
- else
- {
- /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */
- sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (BITS_PER_MP_LIMB - 1));
- /* Divide (c1*2^32 + c0) by d */
- sdiv_qrnnd (q, r, c1, c0, d);
- /* Add 2^31 to quotient */
- q += (mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1);
- }
- }
- else
- {
- b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */
- c1 = a1 >> 1; /* A/2 */
- c0 = (a1 << (BITS_PER_MP_LIMB - 1)) + (a0 >> 1);
-
- if (a1 < b1) /* A < 2^32*b1, so A/2 < 2^31*b1 */
- {
- sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */
-
- r = 2*r + (a0 & 1); /* Remainder from A/(2*b1) */
- if ((d & 1) != 0)
- {
- if (r >= q)
- r = r - q;
- else if (q - r <= d)
- {
- r = r - q + d;
- q--;
- }
- else
- {
- r = r - q + 2*d;
- q -= 2;
- }
- }
- }
- else if (c1 < b1) /* So 2^31 <= (A/2)/b1 < 2^32 */
- {
- c1 = (b1 - 1) - c1;
- c0 = ~c0; /* logical NOT */
-
- sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */
-
- q = ~q; /* (A/2)/b1 */
- r = (b1 - 1) - r;
-
- r = 2*r + (a0 & 1); /* A/(2*b1) */
-
- if ((d & 1) != 0)
- {
- if (r >= q)
- r = r - q;
- else if (q - r <= d)
- {
- r = r - q + d;
- q--;
- }
- else
- {
- r = r - q + 2*d;
- q -= 2;
- }
- }
- }
- else /* Implies c1 = b1 */
- { /* Hence a1 = d - 1 = 2*b1 - 1 */
- if (a0 >= -d)
- {
- q = -1;
- r = a0 + d;
- }
- else
- {
- q = -2;
- r = a0 + 2*d;
- }
- }
- }
-
- *rp = r;
- return q;
-}
-
-#endif
-
diff --git a/mpi/hppa/README b/mpi/hppa/README
deleted file mode 100644
index 5a2d5fd9..00000000
--- a/mpi/hppa/README
+++ /dev/null
@@ -1,84 +0,0 @@
-This directory contains mpn functions for various HP PA-RISC chips. Code
-that runs faster on the PA7100 and later implementations, is in the pa7100
-directory.
-
-RELEVANT OPTIMIZATION ISSUES
-
- Load and Store timing
-
-On the PA7000 no memory instructions can issue the two cycles after a store.
-For the PA7100, this is reduced to one cycle.
-
-The PA7100 has a lookup-free cache, so it helps to schedule loads and the
-dependent instruction really far from each other.
-
-STATUS
-
-1. mpn_mul_1 could be improved to 6.5 cycles/limb on the PA7100, using the
- instructions bwlow (but some sw pipelining is needed to avoid the
- xmpyu-fstds delay):
-
- fldds s1_ptr
-
- xmpyu
- fstds N(%r30)
- xmpyu
- fstds N(%r30)
-
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
-
- addc
- stws res_ptr
- addc
- stws res_ptr
-
- addib Loop
-
-2. mpn_addmul_1 could be improved from the current 10 to 7.5 cycles/limb
- (asymptotically) on the PA7100, using the instructions below. With proper
- sw pipelining and the unrolling level below, the speed becomes 8
- cycles/limb.
-
- fldds s1_ptr
- fldds s1_ptr
-
- xmpyu
- fstds N(%r30)
- xmpyu
- fstds N(%r30)
- xmpyu
- fstds N(%r30)
- xmpyu
- fstds N(%r30)
-
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- addc
- addc
- addc
- addc
- addc %r0,%r0,cy-limb
-
- ldws res_ptr
- ldws res_ptr
- ldws res_ptr
- ldws res_ptr
- add
- stws res_ptr
- addc
- stws res_ptr
- addc
- stws res_ptr
- addc
- stws res_ptr
-
- addib
diff --git a/mpi/hppa/distfiles b/mpi/hppa/distfiles
deleted file mode 100644
index 7f24205d..00000000
--- a/mpi/hppa/distfiles
+++ /dev/null
@@ -1,7 +0,0 @@
-README
-udiv-qrnnd.S
-mpih-add1.S
-mpih-sub1.S
-mpih-lshift.S
-mpih-rshift.S
-
diff --git a/mpi/hppa/mpih-add1.S b/mpi/hppa/mpih-add1.S
deleted file mode 100644
index e01c2eed..00000000
--- a/mpi/hppa/mpih-add1.S
+++ /dev/null
@@ -1,70 +0,0 @@
-/* hppa add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994 Free Software Foundation, Inc.
- * 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
- *
- * 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
-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
-
-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
-
-L$end stws %r28,0(0,%r26)
- bv 0(%r2)
- addc %r0,%r0,%r28
-
- .exit
- .procend
diff --git a/mpi/hppa/mpih-lshift.S b/mpi/hppa/mpih-lshift.S
deleted file mode 100644
index ada09f59..00000000
--- a/mpi/hppa/mpih-lshift.S
+++ /dev/null
@@ -1,72 +0,0 @@
-/* hppa lshift
-*
- * Copyright (C) 1992, 1994, 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
- */
-
-
-
-/*******************
- * 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
-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
-
-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
-
-L$0002 stws,mb %r20,-4(0,%r26)
- vshd %r29,%r0,%r20
- bv 0(%r2)
- stw %r20,-4(0,%r26)
-L$0003 stws,mb %r20,-4(0,%r26)
-L$0004 vshd %r22,%r0,%r20
- bv 0(%r2)
- stw %r20,-4(0,%r26)
-
- .exit
- .procend
-
-
-
diff --git a/mpi/hppa/mpih-rshift.S b/mpi/hppa/mpih-rshift.S
deleted file mode 100644
index 0299d2e2..00000000
--- a/mpi/hppa/mpih-rshift.S
+++ /dev/null
@@ -1,68 +0,0 @@
-/* hppa rshift
-*
- * Copyright (C) 1992, 1994, 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
- */
-
-
-
-
-/*******************
- * 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
-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
-
-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
-
-L$r002 stws,ma %r20,4(0,%r26)
- vshd %r0,%r29,%r20
- bv 0(%r2)
- stw %r20,0(0,%r26)
-L$r003 stws,ma %r20,4(0,%r26)
-L$r004 vshd %r0,%r22,%r20
- bv 0(%r2)
- stw %r20,0(0,%r26)
-
- .exit
- .procend
-
diff --git a/mpi/hppa/mpih-sub1.S b/mpi/hppa/mpih-sub1.S
deleted file mode 100644
index 8672e314..00000000
--- a/mpi/hppa/mpih-sub1.S
+++ /dev/null
@@ -1,77 +0,0 @@
-/* hppa sub_n -- Sub two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- * Copyright (C) 1992, 1994 Free Software Foundation, Inc.
- * 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
- *
- * 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
-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
-
-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
-
-L$end stws %r28,0(0,%r26)
- addc %r0,%r0,%r28
- bv 0(%r2)
- subi 1,%r28,%r28
-
- .exit
- .procend
-
-
-
diff --git a/mpi/hppa/udiv-qrnnd.S b/mpi/hppa/udiv-qrnnd.S
deleted file mode 100644
index 84923834..00000000
--- a/mpi/hppa/udiv-qrnnd.S
+++ /dev/null
@@ -1,297 +0,0 @@
-/* HP-PA __udiv_qrnnd division support, used from longlong.h.
- * This version runs fast on pre-PA7000 CPUs.
- *
- * Copyright (C) 1993, 1994 Free Software Foundation, Inc.
- * Copyright (c) 1997 by Werner Koch (dd9jn)
- *
- * This file is part of G10.
- *
- * G10 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.
- *
- * G10 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
-__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
-
-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
-
-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
-L$FF.. add,uv %r25,%r24,%r24
- sub,<< %r24,%r23,%r0
- ldo 1(%r24),%r24
- stws %r24,0(0,%r26)
- bv 0(%r2)
- addc %r0,%r25,%r28
-
- .exit
- .procend
diff --git a/mpi/hppa1.1/distfiles b/mpi/hppa1.1/distfiles
deleted file mode 100644
index d68227ac..00000000
--- a/mpi/hppa1.1/distfiles
+++ /dev/null
@@ -1,5 +0,0 @@
-udiv-qrnnd.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-
diff --git a/mpi/hppa1.1/mpih-mul1.S b/mpi/hppa1.1/mpih-mul1.S
deleted file mode 100644
index 1f737747..00000000
--- a/mpi/hppa1.1/mpih-mul1.S
+++ /dev/null
@@ -1,112 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- * 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
- *
- * 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
-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
-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
-
-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
-
-L$just_one_limb
- xmpyu %fr4,%fr5,%fr6
- fstds %fr6,-16(%r30)
- ldw -16(%r30),%r28
- ldo -64(%r30),%r30
- bv 0(%r2)
- fstws %fr6R,0(%r26)
-
- .exit
- .procend
-
-
diff --git a/mpi/hppa1.1/mpih-mul2.S b/mpi/hppa1.1/mpih-mul2.S
deleted file mode 100644
index 89c02595..00000000
--- a/mpi/hppa1.1/mpih-mul2.S
+++ /dev/null
@@ -1,114 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- * 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
- *
- * 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
-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
-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
-
-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
-
-L$just_one_limb
- xmpyu %fr4,%fr5,%fr6
- ldw 0(%r26),%r29
- fstds %fr6,-16(%r30)
- ldw -12(%r30),%r1
- ldw -16(%r30),%r28
- add %r29,%r1,%r19
- stw %r19,0(%r26)
- addc %r0,%r28,%r28
- bv 0(%r2)
- ldo -64(%r30),%r30
-
- .exit
- .procend
-
-
diff --git a/mpi/hppa1.1/mpih-mul3.S b/mpi/hppa1.1/mpih-mul3.S
deleted file mode 100644
index 80868a3e..00000000
--- a/mpi/hppa1.1/mpih-mul3.S
+++ /dev/null
@@ -1,124 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- * 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
- *
- * 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
-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
-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
-
-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
-
-L$just_one_limb
- xmpyu %fr4,%fr5,%fr6
- ldw 0(%r26),%r29
- fstds %fr6,-16(%r30)
- ldw -12(%r30),%r1
- ldw -16(%r30),%r28
- sub %r29,%r1,%r22
- add %r22,%r1,%r0
- stw %r22,0(%r26)
- addc %r0,%r28,%r28
- bv 0(%r2)
- ldo -64(%r30),%r30
-
- .exit
- .procend
-
diff --git a/mpi/hppa1.1/udiv-qrnnd.S b/mpi/hppa1.1/udiv-qrnnd.S
deleted file mode 100644
index b48eee49..00000000
--- a/mpi/hppa1.1/udiv-qrnnd.S
+++ /dev/null
@@ -1,88 +0,0 @@
-/* HP-PA __udiv_qrnnd division support, used from longlong.h.
- * This version runs fast on PA 7000 and later.
- *
- * Copyright (C) 1993, 1994 Free Software Foundation, Inc.
- * 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
- *
- * 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
-L$0000 .word 0x43f00000
- .word 0x0
- .export __udiv_qrnnd
-__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
-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
-L$2 bv 0(%r2)
- stws %r22,0(0,%r26)
-
- .exit
- .procend
-
-
diff --git a/mpi/i386/distfiles b/mpi/i386/distfiles
deleted file mode 100644
index 88d2a30c..00000000
--- a/mpi/i386/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-mpih-add1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-mpih-sub1.S
-syntax.h
-
diff --git a/mpi/i386/mpih-add1.S b/mpi/i386/mpih-add1.S
deleted file mode 100644
index b7517cf0..00000000
--- a/mpi/i386/mpih-add1.S
+++ /dev/null
@@ -1,118 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- * 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
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 12)
- * mpi_size_t size) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_add_n)
-C_SYMBOL_NAME(mpihelp_add_n:)
- pushl %edi
- pushl %esi
-
- movl 12(%esp),%edi /* res_ptr */
- movl 16(%esp),%esi /* s1_ptr */
- movl 20(%esp),%edx /* s2_ptr */
- movl 24(%esp),%ecx /* size */
-
- movl %ecx,%eax
- shrl $3,%ecx /* compute count for unrolled loop */
- negl %eax
- andl $7,%eax /* get index where to start loop */
- jz Loop /* necessary special case for 0 */
- incl %ecx /* adjust loop count */
- shll $2,%eax /* adjustment for pointers... */
- subl %eax,%edi /* ... since they are offset ... */
- subl %eax,%esi /* ... by a constant when we ... */
- subl %eax,%edx /* ... enter the loop */
- shrl $2,%eax /* restore previous value */
-#ifdef PIC
-/* Calculate start address in loop for PIC. Due to limitations in some
- assemblers, Loop-L0-3 cannot be put into the leal */
- call L0
-L0: leal (%eax,%eax,8),%eax
- addl (%esp),%eax
- addl $(Loop-L0-3),%eax
- addl $4,%esp
-#else
-/* Calculate start address in loop for non-PIC. */
- leal (Loop - 3)(%eax,%eax,8),%eax
-#endif
- jmp *%eax /* jump into loop */
- ALIGN (3)
-Loop: movl (%esi),%eax
- adcl (%edx),%eax
- movl %eax,(%edi)
- movl 4(%esi),%eax
- adcl 4(%edx),%eax
- movl %eax,4(%edi)
- movl 8(%esi),%eax
- adcl 8(%edx),%eax
- movl %eax,8(%edi)
- movl 12(%esi),%eax
- adcl 12(%edx),%eax
- movl %eax,12(%edi)
- movl 16(%esi),%eax
- adcl 16(%edx),%eax
- movl %eax,16(%edi)
- movl 20(%esi),%eax
- adcl 20(%edx),%eax
- movl %eax,20(%edi)
- movl 24(%esi),%eax
- adcl 24(%edx),%eax
- movl %eax,24(%edi)
- movl 28(%esi),%eax
- adcl 28(%edx),%eax
- movl %eax,28(%edi)
- leal 32(%edi),%edi
- leal 32(%esi),%esi
- leal 32(%edx),%edx
- decl %ecx
- jnz Loop
-
- sbbl %eax,%eax
- negl %eax
-
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386/mpih-lshift.S b/mpi/i386/mpih-lshift.S
deleted file mode 100644
index a84f6b1f..00000000
--- a/mpi/i386/mpih-lshift.S
+++ /dev/null
@@ -1,96 +0,0 @@
-/* i80386 lshift
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 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 %cl,%ebx,%eax /* compute carry limb */
- decl %edx
- jz Lend
- pushl %eax /* push carry limb onto stack */
- testb $1,%edx
- jnz L1 /* enter loop in the middle */
- movl %ebx,%eax
-
- ALIGN (3)
-Loop: movl (%esi,%edx,4),%ebx /* load next lower limb */
- shldl %cl,%ebx,%eax /* compute result limb */
- movl %eax,(%edi,%edx,4) /* store it */
- decl %edx
-L1: movl (%esi,%edx,4),%eax
- shldl %cl,%eax,%ebx
- movl %ebx,(%edi,%edx,4)
- decl %edx
- jnz Loop
-
- shll %cl,%eax /* compute least significant limb */
- movl %eax,(%edi) /* store it */
-
- popl %eax /* pop carry limb */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-Lend: shll %cl,%ebx /* compute least significant limb */
- movl %ebx,(%edi) /* store it */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386/mpih-mul1.S b/mpi/i386/mpih-mul1.S
deleted file mode 100644
index 10679643..00000000
--- a/mpi/i386/mpih-mul1.S
+++ /dev/null
@@ -1,86 +0,0 @@
-/* i80386 mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_mul_1)
-C_SYMBOL_NAME(mpihelp_mul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-Loop:
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
- INSN1(mul,l ,R(s2_limb))
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(eax))
- INSN2(adc,l ,R(edx),$0)
- INSN2(mov,l ,R(ebx),R(edx))
-
- INSN1(inc,l ,R(size))
- INSN1(jnz, ,Loop)
- INSN2(mov,l ,R(eax),R(ebx))
-
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i386/mpih-mul2.S b/mpi/i386/mpih-mul2.S
deleted file mode 100644
index 8b124bda..00000000
--- a/mpi/i386/mpih-mul2.S
+++ /dev/null
@@ -1,87 +0,0 @@
-/* i80386 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 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
-
diff --git a/mpi/i386/mpih-mul3.S b/mpi/i386/mpih-mul3.S
deleted file mode 100644
index 5f365561..00000000
--- a/mpi/i386/mpih-mul3.S
+++ /dev/null
@@ -1,87 +0,0 @@
-/* i80386 submul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 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
-
diff --git a/mpi/i386/mpih-rshift.S b/mpi/i386/mpih-rshift.S
deleted file mode 100644
index 3dd9caf7..00000000
--- a/mpi/i386/mpih-rshift.S
+++ /dev/null
@@ -1,98 +0,0 @@
-/* i80386 rshift
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 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 %cl,%ebx,%eax /* compute carry limb */
- incl %edx
- jz Lend2
- pushl %eax /* push carry limb onto stack */
- testb $1,%edx
- jnz L2 /* enter loop in the middle */
- movl %ebx,%eax
-
- ALIGN (3)
-Loop2: movl (%esi,%edx,4),%ebx /* load next higher limb */
- shrdl %cl,%ebx,%eax /* compute result limb */
- movl %eax,(%edi,%edx,4) /* store it */
- incl %edx
-L2: movl (%esi,%edx,4),%eax
- shrdl %cl,%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
-
diff --git a/mpi/i386/mpih-sub1.S b/mpi/i386/mpih-sub1.S
deleted file mode 100644
index fe1cdeee..00000000
--- a/mpi/i386/mpih-sub1.S
+++ /dev/null
@@ -1,118 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- * 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
- *
- * 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
-
diff --git a/mpi/i386/syntax.h b/mpi/i386/syntax.h
deleted file mode 100644
index 33bd2947..00000000
--- a/mpi/i386/syntax.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* asm.h -- Definitions for x86 syntax variations.
-
-Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-MA 02111-1307, USA. */
-
-
-#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
diff --git a/mpi/i586/README b/mpi/i586/README
deleted file mode 100644
index d73b0826..00000000
--- a/mpi/i586/README
+++ /dev/null
@@ -1,26 +0,0 @@
-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...
diff --git a/mpi/i586/distfiles b/mpi/i586/distfiles
deleted file mode 100644
index 8f821fbf..00000000
--- a/mpi/i586/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-mpih-add1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-mpih-sub1.S
-README
-
diff --git a/mpi/i586/mpih-add1.S b/mpi/i586/mpih-add1.S
deleted file mode 100644
index a52c1646..00000000
--- a/mpi/i586/mpih-add1.S
+++ /dev/null
@@ -1,134 +0,0 @@
-/* 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 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
-
-
diff --git a/mpi/i586/mpih-lshift.S b/mpi/i586/mpih-lshift.S
deleted file mode 100644
index 9e0cb029..00000000
--- a/mpi/i586/mpih-lshift.S
+++ /dev/null
@@ -1,230 +0,0 @@
-/* i80586 lshift
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 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
-
-
diff --git a/mpi/i586/mpih-mul1.S b/mpi/i586/mpih-mul1.S
deleted file mode 100644
index b338b1a8..00000000
--- a/mpi/i586/mpih-mul1.S
+++ /dev/null
@@ -1,89 +0,0 @@
-/* i80586 mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- * Copyright (C) 1992, 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 "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
-
diff --git a/mpi/i586/mpih-mul2.S b/mpi/i586/mpih-mul2.S
deleted file mode 100644
index df22a428..00000000
--- a/mpi/i586/mpih-mul2.S
+++ /dev/null
@@ -1,94 +0,0 @@
-/* i80586 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 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
-
diff --git a/mpi/i586/mpih-mul3.S b/mpi/i586/mpih-mul3.S
deleted file mode 100644
index 014e33cb..00000000
--- a/mpi/i586/mpih-mul3.S
+++ /dev/null
@@ -1,94 +0,0 @@
-/* i80586 submul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 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
-
diff --git a/mpi/i586/mpih-rshift.S b/mpi/i586/mpih-rshift.S
deleted file mode 100644
index aec26e64..00000000
--- a/mpi/i586/mpih-rshift.S
+++ /dev/null
@@ -1,229 +0,0 @@
-/* i80586 rshift
- * Copyright (C) 1998 Free Software Foundation, Inc.
- * Copyright (C) 1992, 1994 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
-
diff --git a/mpi/i586/mpih-sub1.S b/mpi/i586/mpih-sub1.S
deleted file mode 100644
index 2ed704e8..00000000
--- a/mpi/i586/mpih-sub1.S
+++ /dev/null
@@ -1,143 +0,0 @@
-/* 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 Free Software Foundation, Inc.
- * 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
- *
- * 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
-
diff --git a/mpi/longlong.h b/mpi/longlong.h
deleted file mode 100644
index c9243557..00000000
--- a/mpi/longlong.h
+++ /dev/null
@@ -1,1483 +0,0 @@
-/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
- Note: I added some stuff for use with g10
-
-Copyright (C) 1991, 1992, 1993, 1994, 1996 Free Software Foundation, Inc.
-
-This file is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-This file 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with this file; see the file COPYING.LIB. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-MA 02111-1307, USA. */
-
-/* You have to define the following before including this file:
-
- UWtype -- An unsigned type, default type for operations (typically a "word")
- UHWtype -- An unsigned type, at least half the size of UWtype.
- UDWtype -- An unsigned type, at least twice as large a UWtype
- W_TYPE_SIZE -- size in bits of UWtype
-
- SItype, USItype -- Signed and unsigned 32 bit types.
- DItype, UDItype -- Signed and unsigned 64 bit types.
-
- On a 32 bit machine UWtype should typically be USItype;
- on a 64 bit machine, UWtype should typically be UDItype.
-*/
-
-#define __BITS4 (W_TYPE_SIZE / 4)
-#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
-#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
-#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
-
-/* This is used to make sure no undesirable sharing between different libraries
- that use this file takes place. */
-#ifndef __MPN
-#define __MPN(x) __##x
-#endif
-
-/* Define auxiliary asm macros.
-
- 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two
- UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype
- word product in HIGH_PROD and LOW_PROD.
-
- 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a
- UDWtype product. This is just a variant of umul_ppmm.
-
- 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
- denominator) divides a UDWtype, composed by the UWtype integers
- HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
- in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less
- than DENOMINATOR for correct operation. If, in addition, the most
- significant bit of DENOMINATOR must be 1, then the pre-processor symbol
- UDIV_NEEDS_NORMALIZATION is defined to 1.
-
- 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
- denominator). Like udiv_qrnnd but the numbers are signed. The quotient
- is rounded towards 0.
-
- 5) count_leading_zeros(count, x) counts the number of zero-bits from the
- msb to the first non-zero bit in the UWtype X. This is the number of
- steps X needs to be shifted left to set the msb. Undefined for X == 0,
- unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value.
-
- 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts
- from the least significant end.
-
- 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
- high_addend_2, low_addend_2) adds two UWtype integers, composed by
- HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2
- respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow
- (i.e. carry out) is not stored anywhere, and is lost.
-
- 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend,
- high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers,
- composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and
- LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE
- and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
- and is lost.
-
- If any of these macros are left undefined for a particular CPU,
- C macros are used. */
-
-/* The CPUs come in alphabetical order below.
-
- Please add support for more CPUs here, or improve the current support
- for the CPUs below! */
-
-#if defined (__GNUC__) && !defined (NO_ASM)
-
-/* We sometimes need to clobber "cc" with gcc2, but that would not be
- understood by gcc1. Use cpp to avoid major code duplication. */
-#if __GNUC__ < 2
-#define __CLOBBER_CC
-#define __AND_CLOBBER_CC
-#else /* __GNUC__ >= 2 */
-#define __CLOBBER_CC : "cc"
-#define __AND_CLOBBER_CC , "cc"
-#endif /* __GNUC__ < 2 */
-
-
-/***************************************
- ************** A29K *****************
- ***************************************/
-#if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %1,%4,%5
- addc %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %1,%4,%5
- subc %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("multiplu %0,%1,%2" \
- : "=r" ((USItype)(xl)) \
- : "r" (__m0), \
- "r" (__m1)); \
- __asm__ ("multmu %0,%1,%2" \
- : "=r" ((USItype)(xh)) \
- : "r" (__m0), \
- "r" (__m1)); \
- } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("dividu %0,%3,%4" \
- : "=r" ((USItype)(q)), \
- "=q" ((USItype)(r)) \
- : "1" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "r" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x)))
-#define COUNT_LEADING_ZEROS_0 32
-#endif /* __a29k__ */
-
-
-#if defined (__alpha) && W_TYPE_SIZE == 64
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- UDItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("umulh %r1,%2,%0" \
- : "=r" ((UDItype) ph) \
- : "%rJ" (__m0), \
- "rI" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define UMUL_TIME 46
-#ifndef LONGLONG_STANDALONE
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { UDItype __r; \
- (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
- (r) = __r; \
- } while (0)
-extern UDItype __udiv_qrnnd ();
-#define UDIV_TIME 220
-#endif /* LONGLONG_STANDALONE */
-#endif /* __alpha */
-
-/***************************************
- ************** ARM ******************
- ***************************************/
-#if defined (__arm__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("adds %1, %4, %5
- adc %0, %2, %3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subs %1, %4, %5
- sbc %0, %2, %3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, a, b) \
- __asm__ ("%@ Inlined umul_ppmm
- mov %|r0, %2, lsr #16
- mov %|r2, %3, lsr #16
- bic %|r1, %2, %|r0, lsl #16
- bic %|r2, %3, %|r2, lsl #16
- mul %1, %|r1, %|r2
- mul %|r2, %|r0, %|r2
- mul %|r1, %0, %|r1
- mul %0, %|r0, %0
- adds %|r1, %|r2, %|r1
- addcs %0, %0, #65536
- adds %1, %1, %|r1, lsl #16
- adc %0, %0, %|r1, lsr #16" \
- : "=&r" ((USItype)(xh)), \
- "=r" ((USItype)(xl)) \
- : "r" ((USItype)(a)), \
- "r" ((USItype)(b)) \
- : "r0", "r1", "r2")
-#define UMUL_TIME 20
-#define UDIV_TIME 100
-#endif /* __arm__ */
-
-/***************************************
- ************** CLIPPER **************
- ***************************************/
-#if defined (__clipper__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("mulwux %2,%0" \
- : "=r" (__xx.__ll) \
- : "%0" ((USItype)(u)), \
- "r" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define smul_ppmm(w1, w0, u, v) \
- ({union {DItype __ll; \
- struct {SItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("mulwx %2,%0" \
- : "=r" (__xx.__ll) \
- : "%0" ((SItype)(u)), \
- "r" ((SItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("mulwux %2,%0" \
- : "=r" (__w) \
- : "%0" ((USItype)(u)), \
- "r" ((USItype)(v))); \
- __w; })
-#endif /* __clipper__ */
-
-
-/***************************************
- ************** GMICRO ***************
- ***************************************/
-#if defined (__gmicro__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add.w %5,%1
- addx %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub.w %5,%1
- subx %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
- __asm__ ("mulx %3,%0,%1" \
- : "=g" ((USItype)(ph)), \
- "=r" ((USItype)(pl)) \
- : "%0" ((USItype)(m0)), \
- "g" ((USItype)(m1)))
-#define udiv_qrnnd(q, r, nh, nl, d) \
- __asm__ ("divx %4,%0,%1" \
- : "=g" ((USItype)(q)), \
- "=r" ((USItype)(r)) \
- : "1" ((USItype)(nh)), \
- "0" ((USItype)(nl)), \
- "g" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("bsch/1 %1,%0" \
- : "=g" (count) \
- : "g" ((USItype)(x)), \
- "0" ((USItype)0))
-#endif
-
-
-/***************************************
- ************** HPPA *****************
- ***************************************/
-#if defined (__hppa) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %4,%5,%1
- addc %2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rM" ((USItype)(ah)), \
- "rM" ((USItype)(bh)), \
- "%rM" ((USItype)(al)), \
- "rM" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %4,%5,%1
- subb %2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rM" ((USItype)(ah)), \
- "rM" ((USItype)(bh)), \
- "rM" ((USItype)(al)), \
- "rM" ((USItype)(bl)))
-#if defined (_PA_RISC1_1)
-#define umul_ppmm(wh, wl, u, v) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ ("xmpyu %1,%2,%0" \
- : "=*f" (__xx.__ll) \
- : "*f" ((USItype)(u)), \
- "*f" ((USItype)(v))); \
- (wh) = __xx.__i.__h; \
- (wl) = __xx.__i.__l; \
- } while (0)
-#define UMUL_TIME 8
-#define UDIV_TIME 60
-#else
-#define UMUL_TIME 40
-#define UDIV_TIME 80
-#endif
-#ifndef LONGLONG_STANDALONE
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { USItype __r; \
- (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
- (r) = __r; \
- } while (0)
-extern USItype __udiv_qrnnd ();
-#endif /* LONGLONG_STANDALONE */
-#define count_leading_zeros(count, x) \
- do { \
- USItype __tmp; \
- __asm__ ( \
- "ldi 1,%0
- extru,= %1,15,16,%%r0 ; Bits 31..16 zero?
- extru,tr %1,15,16,%1 ; No. Shift down, skip add.
- ldo 16(%0),%0 ; Yes. Perform add.
- extru,= %1,23,8,%%r0 ; Bits 15..8 zero?
- extru,tr %1,23,8,%1 ; No. Shift down, skip add.
- ldo 8(%0),%0 ; Yes. Perform add.
- extru,= %1,27,4,%%r0 ; Bits 7..4 zero?
- extru,tr %1,27,4,%1 ; No. Shift down, skip add.
- ldo 4(%0),%0 ; Yes. Perform add.
- extru,= %1,29,2,%%r0 ; Bits 3..2 zero?
- extru,tr %1,29,2,%1 ; No. Shift down, skip add.
- ldo 2(%0),%0 ; Yes. Perform add.
- extru %1,30,1,%1 ; Extract bit 1.
- sub %0,%1,%0 ; Subtract it.
- " : "=r" (count), "=r" (__tmp) : "1" (x)); \
- } while (0)
-#endif /* hppa */
-
-
-/***************************************
- ************** I370 *****************
- ***************************************/
-#if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mr %0,%3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (__m0), \
- "r" (__m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define smul_ppmm(xh, xl, m0, m1) \
- do { \
- union {DItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ ("mr %0,%3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (m0), \
- "r" (m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- do { \
- union {DItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __xx.__i.__h = n1; __xx.__i.__l = n0; \
- __asm__ ("dr %0,%2" \
- : "=r" (__xx.__ll) \
- : "0" (__xx.__ll), "r" (d)); \
- (q) = __xx.__i.__l; (r) = __xx.__i.__h; \
- } while (0)
-#endif
-
-
-/***************************************
- ************** I386 *****************
- ***************************************/
-#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addl %5,%1
- adcl %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subl %5,%1
- sbbl %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mull %3" \
- : "=a" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "%0" ((USItype)(u)), \
- "rm" ((USItype)(v)))
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divl %4" \
- : "=a" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "rm" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("bsrl %1,%0" \
- : "=r" (__cbtmp) : "rm" ((USItype)(x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#define count_trailing_zeros(count, x) \
- __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x)))
-#ifndef UMUL_TIME
-#define UMUL_TIME 40
-#endif
-#ifndef UDIV_TIME
-#define UDIV_TIME 40
-#endif
-#endif /* 80x86 */
-
-
-/***************************************
- ************** I860 *****************
- ***************************************/
-#if defined (__i860__) && W_TYPE_SIZE == 32
-#define rshift_rhlc(r,h,l,c) \
- __asm__ ("shr %3,r0,r0\;shrd %1,%2,%0" \
- "=r" (r) : "r" (h), "r" (l), "rn" (c))
-#endif /* i860 */
-
-/***************************************
- ************** I960 *****************
- ***************************************/
-#if defined (__i960__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("cmpo 1,0\;addc %5,%4,%1\;addc %3,%2,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%dI" ((USItype)(ah)), \
- "dI" ((USItype)(bh)), \
- "%dI" ((USItype)(al)), \
- "dI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("cmpo 0,0\;subc %5,%4,%1\;subc %3,%2,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "dI" ((USItype)(ah)), \
- "dI" ((USItype)(bh)), \
- "dI" ((USItype)(al)), \
- "dI" ((USItype)(bl)))
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("emul %2,%1,%0" \
- : "=d" (__xx.__ll) \
- : "%dI" ((USItype)(u)), \
- "dI" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("emul %2,%1,%0" \
- : "=d" (__w) \
- : "%dI" ((USItype)(u)), \
- "dI" ((USItype)(v))); \
- __w; })
-#define udiv_qrnnd(q, r, nh, nl, d) \
- do { \
- union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __nn; \
- __nn.__i.__h = (nh); __nn.__i.__l = (nl); \
- __asm__ ("ediv %d,%n,%0" \
- : "=d" (__rq.__ll) \
- : "dI" (__nn.__ll), \
- "dI" ((USItype)(d))); \
- (r) = __rq.__i.__l; (q) = __rq.__i.__h; \
- } while (0)
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("scanbit %1,%0" \
- : "=r" (__cbtmp) \
- : "r" ((USItype)(x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#define COUNT_LEADING_ZEROS_0 (-32) /* sic */
-#if defined (__i960mx) /* what is the proper symbol to test??? */
-#define rshift_rhlc(r,h,l,c) \
- do { \
- union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __nn; \
- __nn.__i.__h = (h); __nn.__i.__l = (l); \
- __asm__ ("shre %2,%1,%0" \
- : "=d" (r) : "dI" (__nn.__ll), "dI" (c)); \
- }
-#endif /* i960mx */
-#endif /* i960 */
-
-
-/***************************************
- ************** 68000 ****************
- ***************************************/
-#if (defined (__mc68000__) || defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add%.l %5,%1
- addx%.l %3,%0" \
- : "=d" ((USItype)(sh)), \
- "=&d" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "d" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub%.l %5,%1
- subx%.l %3,%0" \
- : "=d" ((USItype)(sh)), \
- "=&d" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "d" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mulu%.l %3,%1:%0" \
- : "=d" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "%0" ((USItype)(u)), \
- "dmi" ((USItype)(v)))
-#define UMUL_TIME 45
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divu%.l %4,%1:%0" \
- : "=d" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "dmi" ((USItype)(d)))
-#define UDIV_TIME 90
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divs%.l %4,%1:%0" \
- : "=d" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "dmi" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("bfffo %1{%b2:%b2},%0" \
- : "=d" ((USItype)(count)) \
- : "od" ((USItype)(x)), "n" (0))
-#define COUNT_LEADING_ZEROS_0 32
-#else /* not mc68020 */
-#define umul_ppmm(xh, xl, a, b) \
- do { USItype __umul_tmp1, __umul_tmp2; \
- __asm__ ("| Inlined umul_ppmm
- move%.l %5,%3
- move%.l %2,%0
- move%.w %3,%1
- swap %3
- swap %0
- mulu %2,%1
- mulu %3,%0
- mulu %2,%3
- swap %2
- mulu %5,%2
- add%.l %3,%2
- jcc 1f
- add%.l %#0x10000,%0
-1: move%.l %2,%3
- clr%.w %2
- swap %2
- swap %3
- clr%.w %3
- add%.l %3,%1
- addx%.l %2,%0
- | End inlined umul_ppmm" \
- : "=&d" ((USItype)(xh)), "=&d" ((USItype)(xl)), \
- "=d" (__umul_tmp1), "=&d" (__umul_tmp2) \
- : "%2" ((USItype)(a)), "d" ((USItype)(b))); \
- } while (0)
-#define UMUL_TIME 100
-#define UDIV_TIME 400
-#endif /* not mc68020 */
-#endif /* mc68000 */
-
-
-/***************************************
- ************** 88000 ****************
- ***************************************/
-#if defined (__m88000__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addu.co %1,%r4,%r5
- addu.ci %0,%r2,%r3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rJ" ((USItype)(ah)), \
- "rJ" ((USItype)(bh)), \
- "%rJ" ((USItype)(al)), \
- "rJ" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subu.co %1,%r4,%r5
- subu.ci %0,%r2,%r3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rJ" ((USItype)(ah)), \
- "rJ" ((USItype)(bh)), \
- "rJ" ((USItype)(al)), \
- "rJ" ((USItype)(bl)))
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("ff1 %0,%1" \
- : "=r" (__cbtmp) \
- : "r" ((USItype)(x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#define COUNT_LEADING_ZEROS_0 63 /* sic */
-#if defined (__m88110__)
-#define umul_ppmm(wh, wl, u, v) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __x; \
- __asm__ ("mulu.d %0,%1,%2" : "=r" (__x.__ll) : "r" (u), "r" (v)); \
- (wh) = __x.__i.__h; \
- (wl) = __x.__i.__l; \
- } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
- ({union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __x, __q; \
- __x.__i.__h = (n1); __x.__i.__l = (n0); \
- __asm__ ("divu.d %0,%1,%2" \
- : "=r" (__q.__ll) : "r" (__x.__ll), "r" (d)); \
- (r) = (n0) - __q.__l * (d); (q) = __q.__l; })
-#define UMUL_TIME 5
-#define UDIV_TIME 25
-#else
-#define UMUL_TIME 17
-#define UDIV_TIME 150
-#endif /* __m88110__ */
-#endif /* __m88000__ */
-
-
-/***************************************
- ************** MIPS *****************
- ***************************************/
-#if defined (__mips__) && W_TYPE_SIZE == 32
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("multu %2,%3" \
- : "=l" ((USItype)(w0)), \
- "=h" ((USItype)(w1)) \
- : "d" ((USItype)(u)), \
- "d" ((USItype)(v)))
-#else
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("multu %2,%3
- mflo %0
- mfhi %1" \
- : "=d" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "d" ((USItype)(u)), \
- "d" ((USItype)(v)))
-#endif
-#define UMUL_TIME 10
-#define UDIV_TIME 100
-#endif /* __mips__ */
-
-/***************************************
- ************** MIPS/64 **************
- ***************************************/
-#if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("dmultu %2,%3" \
- : "=l" ((UDItype)(w0)), \
- "=h" ((UDItype)(w1)) \
- : "d" ((UDItype)(u)), \
- "d" ((UDItype)(v)))
-#else
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("dmultu %2,%3
- mflo %0
- mfhi %1" \
- : "=d" ((UDItype)(w0)), \
- "=d" ((UDItype)(w1)) \
- : "d" ((UDItype)(u)), \
- "d" ((UDItype)(v)))
-#endif
-#define UMUL_TIME 20
-#define UDIV_TIME 140
-#endif /* __mips__ */
-
-
-/***************************************
- ************** 32000 ****************
- ***************************************/
-#if defined (__ns32000__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("meid %2,%0" \
- : "=g" (__xx.__ll) \
- : "%0" ((USItype)(u)), \
- "g" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("meid %2,%0" \
- : "=g" (__w) \
- : "%0" ((USItype)(u)), \
- "g" ((USItype)(v))); \
- __w; })
-#define udiv_qrnnd(q, r, n1, n0, d) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __xx.__i.__h = (n1); __xx.__i.__l = (n0); \
- __asm__ ("deid %2,%0" \
- : "=g" (__xx.__ll) \
- : "0" (__xx.__ll), \
- "g" ((USItype)(d))); \
- (r) = __xx.__i.__l; (q) = __xx.__i.__h; })
-#define count_trailing_zeros(count,x) \
- do {
- __asm__ ("ffsd %2,%0" \
- : "=r" ((USItype) (count)) \
- : "0" ((USItype) 0), \
- "r" ((USItype) (x))); \
- } while (0)
-#endif /* __ns32000__ */
-
-
-/***************************************
- ************** PPC ******************
- ***************************************/
-#if (defined (_ARCH_PPC) || defined (_IBMR2)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
- __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- else \
- __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- } while (0)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (ah) && (ah) == 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else \
- __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- } while (0)
-#define count_leading_zeros(count, x) \
- __asm__ ("{cntlz|cntlzw} %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x)))
-#define COUNT_LEADING_ZEROS_0 32
-#if defined (_ARCH_PPC)
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhwu %0,%1,%2" \
- : "=r" ((USItype) ph) \
- : "%r" (__m0), \
- "r" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define UMUL_TIME 15
-#define smul_ppmm(ph, pl, m0, m1) \
- do { \
- SItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhw %0,%1,%2" \
- : "=r" ((SItype) ph) \
- : "%r" (__m0), \
- "r" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define SMUL_TIME 14
-#define UDIV_TIME 120
-#else
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mul %0,%2,%3" \
- : "=r" ((USItype)(xh)), \
- "=q" ((USItype)(xl)) \
- : "r" (__m0), \
- "r" (__m1)); \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define UMUL_TIME 8
-#define smul_ppmm(xh, xl, m0, m1) \
- __asm__ ("mul %0,%2,%3" \
- : "=r" ((SItype)(xh)), \
- "=q" ((SItype)(xl)) \
- : "r" (m0), \
- "r" (m1))
-#define SMUL_TIME 4
-#define sdiv_qrnnd(q, r, nh, nl, d) \
- __asm__ ("div %0,%2,%4" \
- : "=r" ((SItype)(q)), "=q" ((SItype)(r)) \
- : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d)))
-#define UDIV_TIME 100
-#endif
-#endif /* Power architecture variants. */
-
-
-/***************************************
- ************** PYR ******************
- ***************************************/
-#if defined (__pyr__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addw %5,%1
- addwc %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subw %5,%1
- subwb %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-/* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ ("movw %1,%R0
- uemul %2,%0" \
- : "=&r" (__xx.__ll) \
- : "g" ((USItype) (u)), \
- "g" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#endif /* __pyr__ */
-
-
-/***************************************
- ************** RT/ROMP **************
- ***************************************/
-#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("a %1,%5
- ae %0,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "r" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("s %1,%5
- se %0,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "r" ((USItype)(bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ( \
- "s r2,r2
- mts r10,%2
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- cas %0,r2,r0
- mfs r10,%1" \
- : "=r" ((USItype)(ph)), \
- "=r" ((USItype)(pl)) \
- : "%r" (__m0), \
- "r" (__m1) \
- : "r2"); \
- (ph) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define UMUL_TIME 20
-#define UDIV_TIME 200
-#define count_leading_zeros(count, x) \
- do { \
- if ((x) >= 0x10000) \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x) >> 16)); \
- else \
- { \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x))); \
- (count) += 16; \
- } \
- } while (0)
-#endif /* RT/ROMP */
-
-
-/***************************************
- ************** SH2 ******************
- ***************************************/
-#if defined (__sh2__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ( \
- "dmulu.l %2,%3
- sts macl,%1
- sts mach,%0" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)) \
- : "macl", "mach")
-#define UMUL_TIME 5
-#endif
-
-/***************************************
- ************** SPARC ****************
- ***************************************/
-#if defined (__sparc__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addcc %r4,%5,%1
- addx %r2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rJ" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%rJ" ((USItype)(al)), \
- "rI" ((USItype)(bl)) \
- __CLOBBER_CC)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subcc %r4,%5,%1
- subx %r2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rJ" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "rJ" ((USItype)(al)), \
- "rI" ((USItype)(bl)) \
- __CLOBBER_CC)
-#if defined (__sparc_v8__)
-/* Don't match immediate range because, 1) it is not often useful,
- 2) the 'I' flag thinks of the range as a 13 bit signed interval,
- while we want to match a 13 bit interval, sign extended to 32 bits,
- but INTERPRETED AS UNSIGNED. */
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("umul %2,%3,%1;rd %%y,%0" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)))
-#define UMUL_TIME 5
-#ifndef SUPERSPARC /* SuperSPARC's udiv only handles 53 bit dividends */
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { \
- USItype __q; \
- __asm__ ("mov %1,%%y;nop;nop;nop;udiv %2,%3,%0" \
- : "=r" ((USItype)(__q)) \
- : "r" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "r" ((USItype)(d))); \
- (r) = (n0) - __q * (d); \
- (q) = __q; \
- } while (0)
-#define UDIV_TIME 25
-#endif /* SUPERSPARC */
-#else /* ! __sparc_v8__ */
-#if defined (__sparclite__)
-/* This has hardware multiply but not divide. It also has two additional
- instructions scan (ffs from high bit) and divscc. */
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("umul %2,%3,%1;rd %%y,%0" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)))
-#define UMUL_TIME 5
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("! Inlined udiv_qrnnd
- wr %%g0,%2,%%y ! Not a delayed write for sparclite
- tst %%g0
- divscc %3,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%0
- rd %%y,%1
- bl,a 1f
- add %1,%4,%1
-1: ! End of inline udiv_qrnnd" \
- : "=r" ((USItype)(q)), \
- "=r" ((USItype)(r)) \
- : "r" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "rI" ((USItype)(d)) \
- : "%g1" __AND_CLOBBER_CC)
-#define UDIV_TIME 37
-#define count_leading_zeros(count, x) \
- __asm__ ("scan %1,0,%0" \
- : "=r" ((USItype)(x)) \
- : "r" ((USItype)(count)))
-/* Early sparclites return 63 for an argument of 0, but they warn that future
- implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0
- undefined. */
-#endif /* __sparclite__ */
-#endif /* __sparc_v8__ */
-/* Default to sparc v7 versions of umul_ppmm and udiv_qrnnd. */
-#ifndef umul_ppmm
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("! Inlined umul_ppmm
- wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr
- sra %3,31,%%g2 ! Don't move this insn
- and %2,%%g2,%%g2 ! Don't move this insn
- andcc %%g0,0,%%g1 ! Don't move this insn
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,0,%%g1
- add %%g1,%%g2,%0
- rd %%y,%1" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "%rI" ((USItype)(u)), \
- "r" ((USItype)(v)) \
- : "%g1", "%g2" __AND_CLOBBER_CC)
-#define UMUL_TIME 39 /* 39 instructions */
-#endif
-#ifndef udiv_qrnnd
-#ifndef LONGLONG_STANDALONE
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { USItype __r; \
- (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
- (r) = __r; \
- } while (0)
-extern USItype __udiv_qrnnd ();
-#define UDIV_TIME 140
-#endif /* LONGLONG_STANDALONE */
-#endif /* udiv_qrnnd */
-#endif /* __sparc__ */
-
-
-/***************************************
- ************** VAX ******************
- ***************************************/
-#if defined (__vax__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addl2 %5,%1
- adwc %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subl2 %5,%1
- sbwc %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("emul %1,%2,$0,%0" \
- : "=g" (__xx.__ll) \
- : "g" (__m0), \
- "g" (__m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- do { \
- union {DItype __ll; \
- struct {SItype __l, __h;} __i; \
- } __xx; \
- __xx.__i.__h = n1; __xx.__i.__l = n0; \
- __asm__ ("ediv %3,%2,%0,%1" \
- : "=g" (q), "=g" (r) \
- : "g" (__xx.__ll), "g" (d)); \
- } while (0)
-#endif /* __vax__ */
-
-
-/***************************************
- ************** Z8000 ****************
- ***************************************/
-#if defined (__z8000__) && W_TYPE_SIZE == 16
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \
- : "=r" ((unsigned int)(sh)), \
- "=&r" ((unsigned int)(sl)) \
- : "%0" ((unsigned int)(ah)), \
- "r" ((unsigned int)(bh)), \
- "%1" ((unsigned int)(al)), \
- "rQR" ((unsigned int)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \
- : "=r" ((unsigned int)(sh)), \
- "=&r" ((unsigned int)(sl)) \
- : "0" ((unsigned int)(ah)), \
- "r" ((unsigned int)(bh)), \
- "1" ((unsigned int)(al)), \
- "rQR" ((unsigned int)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union {long int __ll; \
- struct {unsigned int __h, __l;} __i; \
- } __xx; \
- unsigned int __m0 = (m0), __m1 = (m1); \
- __asm__ ("mult %S0,%H3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (__m0), \
- "rQR" (__m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- (xh) += ((((signed int) __m0 >> 15) & __m1) \
- + (((signed int) __m1 >> 15) & __m0)); \
- } while (0)
-#endif /* __z8000__ */
-
-#endif /* __GNUC__ */
-
-
-/***************************************
- *********** Generic Versions ********
- ***************************************/
-#if !defined (umul_ppmm) && defined (__umulsidi3)
-#define umul_ppmm(ph, pl, m0, m1) \
- { \
- UDWtype __ll = __umulsidi3 (m0, m1); \
- ph = (UWtype) (__ll >> W_TYPE_SIZE); \
- pl = (UWtype) __ll; \
- }
-#endif
-
-#if !defined (__umulsidi3)
-#define __umulsidi3(u, v) \
- ({UWtype __hi, __lo; \
- umul_ppmm (__hi, __lo, u, v); \
- ((UDWtype) __hi << W_TYPE_SIZE) | __lo; })
-#endif
-
-/* If this machine has no inline assembler, use C macros. */
-
-#if !defined (add_ssaaaa)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- UWtype __x; \
- __x = (al) + (bl); \
- (sh) = (ah) + (bh) + (__x < (al)); \
- (sl) = __x; \
- } while (0)
-#endif
-
-#if !defined (sub_ddmmss)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- UWtype __x; \
- __x = (al) - (bl); \
- (sh) = (ah) - (bh) - (__x > (al)); \
- (sl) = __x; \
- } while (0)
-#endif
-
-#if !defined (umul_ppmm)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- UWtype __x0, __x1, __x2, __x3; \
- UHWtype __ul, __vl, __uh, __vh; \
- UWtype __u = (u), __v = (v); \
- \
- __ul = __ll_lowpart (__u); \
- __uh = __ll_highpart (__u); \
- __vl = __ll_lowpart (__v); \
- __vh = __ll_highpart (__v); \
- \
- __x0 = (UWtype) __ul * __vl; \
- __x1 = (UWtype) __ul * __vh; \
- __x2 = (UWtype) __uh * __vl; \
- __x3 = (UWtype) __uh * __vh; \
- \
- __x1 += __ll_highpart (__x0);/* this can't give carry */ \
- __x1 += __x2; /* but this indeed can */ \
- if (__x1 < __x2) /* did we get it? */ \
- __x3 += __ll_B; /* yes, add it in the proper pos. */ \
- \
- (w1) = __x3 + __ll_highpart (__x1); \
- (w0) = (__ll_lowpart (__x1) << W_TYPE_SIZE/2) + __ll_lowpart (__x0);\
- } while (0)
-#endif
-
-#if !defined (umul_ppmm)
-#define smul_ppmm(w1, w0, u, v) \
- do { \
- UWtype __w1; \
- UWtype __m0 = (u), __m1 = (v); \
- umul_ppmm (__w1, w0, __m0, __m1); \
- (w1) = __w1 - (-(__m0 >> (W_TYPE_SIZE - 1)) & __m1) \
- - (-(__m1 >> (W_TYPE_SIZE - 1)) & __m0); \
- } while (0)
-#endif
-
-/* Define this unconditionally, so it can be used for debugging. */
-#define __udiv_qrnnd_c(q, r, n1, n0, d) \
- do { \
- UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \
- __d1 = __ll_highpart (d); \
- __d0 = __ll_lowpart (d); \
- \
- __r1 = (n1) % __d1; \
- __q1 = (n1) / __d1; \
- __m = (UWtype) __q1 * __d0; \
- __r1 = __r1 * __ll_B | __ll_highpart (n0); \
- if (__r1 < __m) \
- { \
- __q1--, __r1 += (d); \
- if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
- if (__r1 < __m) \
- __q1--, __r1 += (d); \
- } \
- __r1 -= __m; \
- \
- __r0 = __r1 % __d1; \
- __q0 = __r1 / __d1; \
- __m = (UWtype) __q0 * __d0; \
- __r0 = __r0 * __ll_B | __ll_lowpart (n0); \
- if (__r0 < __m) \
- { \
- __q0--, __r0 += (d); \
- if (__r0 >= (d)) \
- if (__r0 < __m) \
- __q0--, __r0 += (d); \
- } \
- __r0 -= __m; \
- \
- (q) = (UWtype) __q1 * __ll_B | __q0; \
- (r) = __r0; \
- } while (0)
-
-/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
- __udiv_w_sdiv (defined in libgcc or elsewhere). */
-#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
-#define udiv_qrnnd(q, r, nh, nl, d) \
- do { \
- UWtype __r; \
- (q) = __MPN(udiv_w_sdiv) (&__r, nh, nl, d); \
- (r) = __r; \
- } while (0)
-#endif
-
-/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */
-#if !defined (udiv_qrnnd)
-#define UDIV_NEEDS_NORMALIZATION 1
-#define udiv_qrnnd __udiv_qrnnd_c
-#endif
-
-#if !defined (count_leading_zeros)
-extern
-#ifdef __STDC__
-const
-#endif
-unsigned char __clz_tab[];
-#define MPI_INTERNAL_NEED_CLZ_TAB 1
-#define count_leading_zeros(count, x) \
- do { \
- UWtype __xr = (x); \
- UWtype __a; \
- \
- if (W_TYPE_SIZE <= 32) \
- { \
- __a = __xr < ((UWtype) 1 << 2*__BITS4) \
- ? (__xr < ((UWtype) 1 << __BITS4) ? 0 : __BITS4) \
- : (__xr < ((UWtype) 1 << 3*__BITS4) ? 2*__BITS4 : 3*__BITS4);\
- } \
- else \
- { \
- for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \
- if (((__xr >> __a) & 0xff) != 0) \
- break; \
- } \
- \
- (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
- } while (0)
-/* This version gives a well-defined value for zero. */
-#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
-#endif
-
-#if !defined (count_trailing_zeros)
-/* Define count_trailing_zeros using count_leading_zeros. The latter might be
- defined in asm, but if it is not, the C version above is good enough. */
-#define count_trailing_zeros(count, x) \
- do { \
- UWtype __ctz_x = (x); \
- UWtype __ctz_c; \
- count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \
- (count) = W_TYPE_SIZE - 1 - __ctz_c; \
- } while (0)
-#endif
-
-#ifndef UDIV_NEEDS_NORMALIZATION
-#define UDIV_NEEDS_NORMALIZATION 0
-#endif
diff --git a/mpi/m68k/distfiles b/mpi/m68k/distfiles
deleted file mode 100644
index 4c0967b8..00000000
--- a/mpi/m68k/distfiles
+++ /dev/null
@@ -1,8 +0,0 @@
-syntax.h
-mpih-lshift.S
-mpih-rshift.S
-mpih-add1.S
-mpih-sub1.S
-
-
-
diff --git a/mpi/m68k/mc68020/distfiles b/mpi/m68k/mc68020/distfiles
deleted file mode 100644
index fc7df9fa..00000000
--- a/mpi/m68k/mc68020/distfiles
+++ /dev/null
@@ -1,3 +0,0 @@
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
diff --git a/mpi/m68k/mc68020/mpih-mul1.S b/mpi/m68k/mc68020/mpih-mul1.S
deleted file mode 100644
index 16a52a22..00000000
--- a/mpi/m68k/mc68020/mpih-mul1.S
+++ /dev/null
@@ -1,97 +0,0 @@
-/* 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 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. 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_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)
-
-
diff --git a/mpi/m68k/mc68020/mpih-mul2.S b/mpi/m68k/mc68020/mpih-mul2.S
deleted file mode 100644
index 8cbbc548..00000000
--- a/mpi/m68k/mc68020/mpih-mul2.S
+++ /dev/null
@@ -1,87 +0,0 @@
-/* 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 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. 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_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)
-
diff --git a/mpi/m68k/mc68020/mpih-mul3.S b/mpi/m68k/mc68020/mpih-mul3.S
deleted file mode 100644
index 8e28ce45..00000000
--- a/mpi/m68k/mc68020/mpih-mul3.S
+++ /dev/null
@@ -1,89 +0,0 @@
-/* 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 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. 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_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)
-
-
diff --git a/mpi/m68k/mpih-add1.S b/mpi/m68k/mpih-add1.S
deleted file mode 100644
index b3812c78..00000000
--- a/mpi/m68k/mpih-add1.S
+++ /dev/null
@@ -1,85 +0,0 @@
-/* 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 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. 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 + 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)
-
-
diff --git a/mpi/m68k/mpih-lshift.S b/mpi/m68k/mpih-lshift.S
deleted file mode 100644
index af305c84..00000000
--- a/mpi/m68k/mpih-lshift.S
+++ /dev/null
@@ -1,158 +0,0 @@
-/* mc68020 lshift -- Shift left a low-level natural-number integer.
-
-Copyright (C) 1996, 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 Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. 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_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)
-
-
-
-
-
diff --git a/mpi/m68k/mpih-rshift.S b/mpi/m68k/mpih-rshift.S
deleted file mode 100644
index 5670888c..00000000
--- a/mpi/m68k/mpih-rshift.S
+++ /dev/null
@@ -1,156 +0,0 @@
-/* mc68020 rshift -- Shift right a low-level natural-number integer.
-
-Copyright (C) 1996, 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 Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. 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_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)
-
-
-
-
diff --git a/mpi/m68k/mpih-sub1.S b/mpi/m68k/mpih-sub1.S
deleted file mode 100644
index 8d8ef0b4..00000000
--- a/mpi/m68k/mpih-sub1.S
+++ /dev/null
@@ -1,85 +0,0 @@
-/* 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 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. 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_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)
-
-
diff --git a/mpi/m68k/syntax.h b/mpi/m68k/syntax.h
deleted file mode 100644
index 9d6f3522..00000000
--- a/mpi/m68k/syntax.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* asm.h -- Definitions for 68k syntax variations.
-
-Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library 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 Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-MA 02111-1307, USA. */
-
-#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
diff --git a/mpi/mips3/README b/mpi/mips3/README
deleted file mode 100644
index e94b2c74..00000000
--- a/mpi/mips3/README
+++ /dev/null
@@ -1,23 +0,0 @@
-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...
diff --git a/mpi/mips3/distfiles b/mpi/mips3/distfiles
deleted file mode 100644
index b88f4f86..00000000
--- a/mpi/mips3/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-README
-mpih-add1.S
-mpih-sub1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-
diff --git a/mpi/mips3/mpih-add1.S b/mpi/mips3/mpih-add1.S
deleted file mode 100644
index 7ac5f38b..00000000
--- a/mpi/mips3/mpih-add1.S
+++ /dev/null
@@ -1,122 +0,0 @@
-/* mips3 add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- * Copyright (C) 1995, 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
- */
-
-
-/*******************
- * 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
-
diff --git a/mpi/mips3/mpih-lshift.S b/mpi/mips3/mpih-lshift.S
deleted file mode 100644
index 37e9a5e1..00000000
--- a/mpi/mips3/mpih-lshift.S
+++ /dev/null
@@ -1,95 +0,0 @@
-/* mips3 lshift
- * Copyright (C) 1995, 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
- */
-
-/*******************
- * 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
diff --git a/mpi/mips3/mpih-mul1.S b/mpi/mips3/mpih-mul1.S
deleted file mode 100644
index fd349ee9..00000000
--- a/mpi/mips3/mpih-mul1.S
+++ /dev/null
@@ -1,87 +0,0 @@
-/* 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 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
-
diff --git a/mpi/mips3/mpih-mul2.S b/mpi/mips3/mpih-mul2.S
deleted file mode 100644
index 1474b4f0..00000000
--- a/mpi/mips3/mpih-mul2.S
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 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 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
-
diff --git a/mpi/mips3/mpih-mul3.S b/mpi/mips3/mpih-mul3.S
deleted file mode 100644
index 4616732f..00000000
--- a/mpi/mips3/mpih-mul3.S
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 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 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
-
diff --git a/mpi/mips3/mpih-rshift.S b/mpi/mips3/mpih-rshift.S
deleted file mode 100644
index 7bc08450..00000000
--- a/mpi/mips3/mpih-rshift.S
+++ /dev/null
@@ -1,93 +0,0 @@
-/* mips3 rshift
- * Copyright (C) 1995, 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
- */
-
-/*******************
- * 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
-
diff --git a/mpi/mips3/mpih-sub1.S b/mpi/mips3/mpih-sub1.S
deleted file mode 100644
index f4ad4c99..00000000
--- a/mpi/mips3/mpih-sub1.S
+++ /dev/null
@@ -1,123 +0,0 @@
-/* mips3 sub_n -- Subtract two limb vectors of the same length > 0 and
- * store difference in a third limb vector.
- * Copyright (C) 1995, 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
- */
-
-
-/*******************
- * 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
- n
diff --git a/mpi/mpi-add.c b/mpi/mpi-add.c
deleted file mode 100644
index 3dd22eb0..00000000
--- a/mpi/mpi-add.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/* mpi-add.c - MPI functions
- * Copyright (C) 1998 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 );
-}
-
diff --git a/mpi/mpi-bit.c b/mpi/mpi-bit.c
deleted file mode 100644
index 00aa5d08..00000000
--- a/mpi/mpi-bit.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* 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;
-}
-
diff --git a/mpi/mpi-cmp.c b/mpi/mpi-cmp.c
deleted file mode 100644
index 2a6cdbf1..00000000
--- a/mpi/mpi-cmp.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* 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;
-}
-
-
diff --git a/mpi/mpi-div.c b/mpi/mpi-div.c
deleted file mode 100644
index 6e50456d..00000000
--- a/mpi/mpi-div.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/* mpi-div.c - MPI functions
- * Copyright (C) 1998 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"
-#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 );
-}
-
diff --git a/mpi/mpi-gcd.c b/mpi/mpi-gcd.c
deleted file mode 100644
index 226faf15..00000000
--- a/mpi/mpi-gcd.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* mpi-gcd.c - MPI functions
- * 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-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);
-}
-
-
-
diff --git a/mpi/mpi-inline.h b/mpi/mpi-inline.h
deleted file mode 100644
index 5dc6fc0a..00000000
--- a/mpi/mpi-inline.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* mpi-inline.h - Internal to the Multi Precision Integers
- * Copyright (C) 1998 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.
- */
-
-#ifndef G10_MPI_INLINE_H
-#define G10_MPI_INLINE_H
-
-
-extern __inline__ mpi_limb_t
-mpihelp_add_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb)
-{
- mpi_limb_t x;
-
- x = *s1_ptr++;
- s2_limb += x;
- *res_ptr++ = s2_limb;
- if( s2_limb < x ) { /* sum is less than the left operand: handle carry */
- while( --s1_size ) {
- x = *s1_ptr++ + 1; /* add carry */
- *res_ptr++ = x; /* and store */
- if( x ) /* not 0 (no overflow): we can stop */
- goto leave;
- }
- return 1; /* return carry (size of s1 to small) */
- }
-
- leave:
- if( res_ptr != s1_ptr ) { /* not the same variable */
- mpi_size_t i; /* copy the rest */
- for( i=0; i < s1_size-1; i++ )
- res_ptr[i] = s1_ptr[i];
- }
- return 0; /* no carry */
-}
-
-
-
-extern __inline__ mpi_limb_t
-mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size)
-{
- mpi_limb_t cy = 0;
-
- if( s2_size )
- cy = mpihelp_add_n( res_ptr, s1_ptr, s2_ptr, s2_size );
-
- if( s1_size - s2_size )
- cy = mpihelp_add_1( res_ptr + s2_size, s1_ptr + s2_size,
- s1_size - s2_size, cy);
- return cy;
-}
-
-
-extern __inline__ mpi_limb_t
-mpihelp_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb )
-{
- mpi_limb_t x;
-
- x = *s1_ptr++;
- s2_limb = x - s2_limb;
- *res_ptr++ = s2_limb;
- if( s2_limb > x ) {
- while( --s1_size ) {
- x = *s1_ptr++;
- *res_ptr++ = x - 1;
- if( x )
- goto leave;
- }
- return 1;
- }
-
- leave:
- if( res_ptr != s1_ptr ) {
- mpi_size_t i;
- for( i=0; i < s1_size-1; i++ )
- res_ptr[i] = s1_ptr[i];
- }
- return 0;
-}
-
-
-
-extern __inline__ mpi_limb_t
-mpihelp_sub( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size)
-{
- mpi_limb_t cy = 0;
-
- if( s2_size )
- cy = mpihelp_sub_n(res_ptr, s1_ptr, s2_ptr, s2_size);
-
- if( s1_size - s2_size )
- cy = mpihelp_sub_1(res_ptr + s2_size, s1_ptr + s2_size,
- s1_size - s2_size, cy);
- return cy;
-}
-
-
-#endif /*G10_MPI_INLINE_H*/
diff --git a/mpi/mpi-internal.h b/mpi/mpi-internal.h
deleted file mode 100644
index f73efb76..00000000
--- a/mpi/mpi-internal.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/* mpi-internal.h - Internal to the Multi Precision Integers
- * Copyright (C) 1998 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.
- */
-
-#ifndef G10_MPI_INTERNAL_H
-#define G10_MPI_INTERNAL_H
-
-#include "mpi.h"
-
-/* If KARATSUBA_THRESHOLD is not already defined, define it to a
- * value which is good on most machines. */
-
-/* tested 4, 16, 32 and 64, where 16 gave the best performance when
- * checking a 768 and a 1024 bit ElGamal signature.
- * (wk 22.12.97) */
-#ifndef KARATSUBA_THRESHOLD
- #define KARATSUBA_THRESHOLD 16
-#endif
-
-/* The code can't handle KARATSUBA_THRESHOLD smaller than 2. */
-#if KARATSUBA_THRESHOLD < 2
- #undef KARATSUBA_THRESHOLD
- #define KARATSUBA_THRESHOLD 2
-#endif
-
-
-typedef mpi_limb_t *mpi_ptr_t; /* pointer to a limb */
-typedef int mpi_size_t; /* (must be a signed type) */
-
-#define ABS(x) (x >= 0 ? x : -x)
-#define MIN(l,o) ((l) < (o) ? (l) : (o))
-#define MAX(h,i) ((h) > (i) ? (h) : (i))
-#define RESIZE_IF_NEEDED(a,b) \
- do { \
- if( (a)->alloced < (b) ) \
- mpi_resize((a), (b)); \
- } while(0)
-
-/* Copy N limbs from S to D. */
-#define MPN_COPY( d, s, n) \
- do { \
- mpi_size_t _i; \
- for( _i = 0; _i < (n); _i++ ) \
- (d)[_i] = (s)[_i]; \
- } while(0)
-
-#define MPN_COPY_INCR( d, s, n) \
- do { \
- mpi_size_t _i; \
- for( _i = 0; _i < (n); _i++ ) \
- (d)[_i] = (d)[_i]; \
- } while (0)
-
-#define MPN_COPY_DECR( d, s, n ) \
- do { \
- mpi_size_t _i; \
- for( _i = (n)-1; _i >= 0; _i--) \
- (d)[_i] = (s)[_i]; \
- } while(0)
-
-/* Zero N limbs at D */
-#define MPN_ZERO(d, n) \
- do { \
- int _i; \
- for( _i = 0; _i < (n); _i++ ) \
- (d)[_i] = 0; \
- } while (0)
-
-#define MPN_NORMALIZE(d, n) \
- do { \
- while( (n) > 0 ) { \
- if( (d)[(n)-1] ) \
- break; \
- (n)--; \
- } \
- } while(0)
-
-#define MPN_NORMALIZE_NOT_ZERO(d, n) \
- do { \
- for(;;) { \
- if( (d)[(n)-1] ) \
- break; \
- (n)--; \
- } \
- } while(0)
-
-#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
- do { \
- if( (size) < KARATSUBA_THRESHOLD ) \
- mul_n_basecase (prodp, up, vp, size); \
- else \
- mul_n (prodp, up, vp, size, tspace); \
- } while (0);
-
-
-/* Divide the two-limb number in (NH,,NL) by D, with DI being the largest
- * limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB).
- * If this would yield overflow, DI should be the largest possible number
- * (i.e., only ones). For correct operation, the most significant bit of D
- * has to be set. Put the quotient in Q and the remainder in R.
- */
-#define UDIV_QRNND_PREINV(q, r, nh, nl, d, di) \
- do { \
- mpi_limb_t _q, _ql, _r; \
- mpi_limb_t _xh, _xl; \
- umul_ppmm (_q, _ql, (nh), (di)); \
- _q += (nh); /* DI is 2**BITS_PER_MPI_LIMB too small */ \
- umul_ppmm (_xh, _xl, _q, (d)); \
- sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); \
- if( _xh ) { \
- sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \
- _q++; \
- if( _xh) { \
- sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \
- _q++; \
- } \
- } \
- if( _r >= (d) ) { \
- _r -= (d); \
- _q++; \
- } \
- (r) = _r; \
- (q) = _q; \
- } while (0)
-
-
-/*-- mpiutil.c --*/
-#ifdef M_DEBUG
- #define mpi_alloc_limb_space(n,f) mpi_debug_alloc_limb_space((n),(f), M_DBGINFO( __LINE__ ) )
- #define mpi_free_limb_space(n) mpi_debug_free_limb_space((n), M_DBGINFO( __LINE__ ) )
- mpi_ptr_t mpi_debug_alloc_limb_space( unsigned nlimbs, int sec, const char *info );
- void mpi_debug_free_limb_space( mpi_ptr_t a, const char *info );
-#else
- mpi_ptr_t mpi_alloc_limb_space( unsigned nlimbs, int sec );
- void mpi_free_limb_space( mpi_ptr_t a );
-#endif
-void mpi_assign_limb_space( MPI a, mpi_ptr_t ap, unsigned nlimbs );
-
-/*-- mpihelp-add.c --*/
-mpi_limb_t mpihelp_add_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb );
-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 mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size);
-
-/*-- mpihelp-sub.c --*/
-mpi_limb_t mpihelp_sub_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb );
-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 mpihelp_sub(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size);
-
-/*-- mpihelp-cmp.c --*/
-int mpihelp_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size );
-
-/*-- mpihelp-mul.c --*/
-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 mpihelp_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb);
-void mpihelp_mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp,
- mpi_size_t size);
-mpi_limb_t mpihelp_mul( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize,
- mpi_ptr_t vp, mpi_size_t vsize);
-void mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size );
-void mpih_sqr_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size,
- mpi_ptr_t tspace);
-
-/*-- mpihelp-mul_1.c (or xxx/cpu/ *.S) --*/
-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);
-
-/*-- mpihelp-div.c --*/
-mpi_limb_t mpihelp_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size,
- mpi_limb_t divisor_limb);
-mpi_limb_t mpihelp_divrem( mpi_ptr_t qp, mpi_size_t qextra_limbs,
- mpi_ptr_t np, mpi_size_t nsize,
- mpi_ptr_t dp, mpi_size_t dsize);
-mpi_limb_t mpihelp_divmod_1( mpi_ptr_t quot_ptr,
- mpi_ptr_t dividend_ptr, mpi_size_t dividend_size,
- mpi_limb_t divisor_limb);
-
-/*-- mpihelp-shift.c --*/
-mpi_limb_t mpihelp_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
- unsigned cnt);
-mpi_limb_t mpihelp_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
- unsigned cnt);
-
-
-/* Define stuff for longlong.h. */
-#define W_TYPE_SIZE BITS_PER_MPI_LIMB
- typedef mpi_limb_t UWtype;
- typedef unsigned int UHWtype;
-#if defined (__GNUC__)
- typedef unsigned int UQItype __attribute__ ((mode (QI)));
- typedef int SItype __attribute__ ((mode (SI)));
- typedef unsigned int USItype __attribute__ ((mode (SI)));
- typedef int DItype __attribute__ ((mode (DI)));
- typedef unsigned int UDItype __attribute__ ((mode (DI)));
-#else
- typedef unsigned char UQItype;
- typedef long SItype;
- typedef unsigned long USItype;
-#endif
-
-#ifdef __GNUC__
- #include "mpi-inline.h"
-#endif
-
-#endif /*G10_MPI_INTERNAL_H*/
diff --git a/mpi/mpi-inv.c b/mpi/mpi-inv.c
deleted file mode 100644
index 66757123..00000000
--- a/mpi/mpi-inv.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* mpi-inv.c - MPI functions
- * 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-internal.h"
-
-
-/****************
- * Calculate the multiplicative inverse X of A mod N
- * That is: Find the solution x for
- * 1 = (a*x) mod n
- */
-void
-mpi_invm( MPI x, MPI a, MPI n )
-{
- #if 0
- MPI u, v, u1, u2, u3, v1, v2, v3, q, t1, t2, t3;
- MPI ta, tb, tc;
-
- u = mpi_copy(a);
- v = mpi_copy(n);
- u1 = mpi_alloc_set_ui(1);
- u2 = mpi_alloc_set_ui(0);
- u3 = mpi_copy(u);
- v1 = mpi_alloc_set_ui(0);
- v2 = mpi_alloc_set_ui(1);
- v3 = mpi_copy(v);
- q = mpi_alloc( mpi_get_nlimbs(u)+1 );
- t1 = mpi_alloc( mpi_get_nlimbs(u)+1 );
- t2 = mpi_alloc( mpi_get_nlimbs(u)+1 );
- t3 = mpi_alloc( mpi_get_nlimbs(u)+1 );
- while( mpi_cmp_ui( v3, 0 ) ) {
- mpi_fdiv_q( q, u3, v3 );
- mpi_mul(t1, v1, q); mpi_mul(t2, v2, q); mpi_mul(t3, v3, q);
- mpi_sub(t1, u1, t1); mpi_sub(t2, u2, t2); mpi_sub(t3, u3, t3);
- mpi_set(u1, v1); mpi_set(u2, v2); mpi_set(u3, v3);
- mpi_set(v1, t1); mpi_set(v2, t2); mpi_set(v3, t3);
- }
- /* log_debug("result:\n");
- log_mpidump("q =", q );
- log_mpidump("u1=", u1);
- log_mpidump("u2=", u2);
- log_mpidump("u3=", u3);
- log_mpidump("v1=", v1);
- log_mpidump("v2=", v2); */
- mpi_set(x, u1);
-
- mpi_free(u1);
- mpi_free(u2);
- mpi_free(u3);
- mpi_free(v1);
- mpi_free(v2);
- mpi_free(v3);
- mpi_free(q);
- mpi_free(t1);
- mpi_free(t2);
- mpi_free(t3);
- mpi_free(u);
- mpi_free(v);
- #elif 0
- /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X)
- * modified according to Michael Penk's solution for Exercice 35 */
-
- /* FIXME: we can simplify this in most cases (see Knuth) */
- MPI u, v, u1, u2, u3, v1, v2, v3, t1, t2, t3;
- unsigned k;
- int sign;
-
- u = mpi_copy(a);
- v = mpi_copy(n);
- for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) {
- mpi_rshift(u, u, 1);
- mpi_rshift(v, v, 1);
- }
-
-
- u1 = mpi_alloc_set_ui(1);
- u2 = mpi_alloc_set_ui(0);
- u3 = mpi_copy(u);
- v1 = mpi_copy(v); /* !-- used as const 1 */
- v2 = mpi_alloc( mpi_get_nlimbs(u) ); mpi_sub( v2, u1, u );
- v3 = mpi_copy(v);
- if( mpi_test_bit(u, 0) ) { /* u is odd */
- t1 = mpi_alloc_set_ui(0);
- t2 = mpi_alloc_set_ui(1); t2->sign = 1;
- t3 = mpi_copy(v); t3->sign = !t3->sign;
- goto Y4;
- }
- else {
- t1 = mpi_alloc_set_ui(1);
- t2 = mpi_alloc_set_ui(0);
- t3 = mpi_copy(u);
- }
- do {
- do {
- if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */
- mpi_add(t1, t1, v);
- mpi_sub(t2, t2, u);
- }
- mpi_rshift(t1, t1, 1);
- mpi_rshift(t2, t2, 1);
- mpi_rshift(t3, t3, 1);
- Y4:
- ;
- } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */
-
- if( !t3->sign ) {
- mpi_set(u1, t1);
- mpi_set(u2, t2);
- mpi_set(u3, t3);
- }
- else {
- mpi_sub(v1, v, t1);
- sign = u->sign; u->sign = !u->sign;
- mpi_sub(v2, u, t2);
- u->sign = sign;
- sign = t3->sign; t3->sign = !t3->sign;
- mpi_set(v3, t3);
- t3->sign = sign;
- }
- mpi_sub(t1, u1, v1);
- mpi_sub(t2, u2, v2);
- mpi_sub(t3, u3, v3);
- if( t1->sign ) {
- mpi_add(t1, t1, v);
- mpi_sub(t2, t2, u);
- }
- } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */
- /* mpi_lshift( u3, k ); */
- mpi_set(x, u1);
-
- mpi_free(u1);
- mpi_free(u2);
- mpi_free(u3);
- mpi_free(v1);
- mpi_free(v2);
- mpi_free(v3);
- mpi_free(t1);
- mpi_free(t2);
- mpi_free(t3);
- #else
- /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X)
- * modified according to Michael Penk's solution for Exercice 35
- * with further enhancement */
- MPI u, v, u1, u2=NULL, u3, v1, v2=NULL, v3, t1, t2=NULL, t3;
- unsigned k;
- int sign;
- int odd ;
-
- u = mpi_copy(a);
- v = mpi_copy(n);
-
- for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) {
- mpi_rshift(u, u, 1);
- mpi_rshift(v, v, 1);
- }
- odd = mpi_test_bit(v,0);
-
- u1 = mpi_alloc_set_ui(1);
- if( !odd )
- u2 = mpi_alloc_set_ui(0);
- u3 = mpi_copy(u);
- v1 = mpi_copy(v);
- if( !odd ) {
- v2 = mpi_alloc( mpi_get_nlimbs(u) );
- mpi_sub( v2, u1, u ); /* U is used as const 1 */
- }
- v3 = mpi_copy(v);
- if( mpi_test_bit(u, 0) ) { /* u is odd */
- t1 = mpi_alloc_set_ui(0);
- if( !odd ) {
- t2 = mpi_alloc_set_ui(1); t2->sign = 1;
- }
- t3 = mpi_copy(v); t3->sign = !t3->sign;
- goto Y4;
- }
- else {
- t1 = mpi_alloc_set_ui(1);
- if( !odd )
- t2 = mpi_alloc_set_ui(0);
- t3 = mpi_copy(u);
- }
- do {
- do {
- if( !odd ) {
- if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */
- mpi_add(t1, t1, v);
- mpi_sub(t2, t2, u);
- }
- mpi_rshift(t1, t1, 1);
- mpi_rshift(t2, t2, 1);
- mpi_rshift(t3, t3, 1);
- }
- else {
- if( mpi_test_bit(t1, 0) )
- mpi_add(t1, t1, v);
- mpi_rshift(t1, t1, 1);
- mpi_rshift(t3, t3, 1);
- }
- Y4:
- ;
- } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */
-
- if( !t3->sign ) {
- mpi_set(u1, t1);
- if( !odd )
- mpi_set(u2, t2);
- mpi_set(u3, t3);
- }
- else {
- mpi_sub(v1, v, t1);
- sign = u->sign; u->sign = !u->sign;
- if( !odd )
- mpi_sub(v2, u, t2);
- u->sign = sign;
- sign = t3->sign; t3->sign = !t3->sign;
- mpi_set(v3, t3);
- t3->sign = sign;
- }
- mpi_sub(t1, u1, v1);
- if( !odd )
- mpi_sub(t2, u2, v2);
- mpi_sub(t3, u3, v3);
- if( t1->sign ) {
- mpi_add(t1, t1, v);
- if( !odd )
- mpi_sub(t2, t2, u);
- }
- } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */
- /* mpi_lshift( u3, k ); */
- mpi_set(x, u1);
-
- mpi_free(u1);
- mpi_free(v1);
- mpi_free(t1);
- if( !odd ) {
- mpi_free(u2);
- mpi_free(v2);
- mpi_free(t2);
- }
- mpi_free(u3);
- mpi_free(v3);
- mpi_free(t3);
-
- mpi_free(u);
- mpi_free(v);
- #endif
-}
-
-
-
diff --git a/mpi/mpi-mpow.c b/mpi/mpi-mpow.c
deleted file mode 100644
index 689a7600..00000000
--- a/mpi/mpi-mpow.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* mpi-mpow.c - MPI functions
- * 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-internal.h"
-#include "longlong.h"
-#include <assert.h>
-
-static int
-build_index( MPI *exparray, int k, int i, int t )
-{
- int j, bitno;
- int index = 0;
-
- bitno = t-i;
- for(j=k-1; j >= 0; j-- ) {
- index <<= 1;
- if( mpi_test_bit( exparray[j], bitno ) )
- index |= 1;
- }
- /*log_debug("t=%d i=%d index=%d\n", t, i, index );*/
- return index;
-}
-
-/****************
- * RES = (BASE[0] ^ EXP[0]) * (BASE[1] ^ EXP[1]) * ... * mod M
- */
-void
-mpi_mulpowm( MPI res, MPI *basearray, MPI *exparray, MPI m)
-{
- int k; /* number of elements */
- int t; /* bit size of largest exponent */
- int i, j, idx;
- MPI *G; /* table with precomputed values of size 2^k */
- MPI tmp;
-
- for(k=0; basearray[k]; k++ )
- ;
- assert(k);
- for(t=0, i=0; (tmp=exparray[i]); i++ ) {
- /*log_mpidump("exp: ", tmp );*/
- j = mpi_get_nbits(tmp);
- if( j > t )
- t = j;
- }
- /*log_mpidump("mod: ", m );*/
- assert(i==k);
- assert(t);
- assert( k < 10 );
-
- G = m_alloc_clear( (1<<k) * sizeof *G );
- #if 0
- /* do the precomputation */
- G[0] = mpi_alloc_set_ui( 1 );
- for(i=1; i < (1<<k); i++ ) {
- for(j=0; j < k; j++ ) {
- if( (i & (1<<j) ) ) {
- if( !G[i] )
- G[i] = mpi_copy( basearray[j] );
- else
- mpi_mulm( G[i], G[i], basearray[j], m );
- }
- }
- if( !G[i] )
- G[i] = mpi_alloc(0);
- }
- #endif
- /* and calculate */
- tmp = mpi_alloc( mpi_get_nlimbs(m)+1 );
- mpi_set_ui( res, 1 );
- for(i = 1; i <= t; i++ ) {
- mpi_mulm(tmp, res, res, m );
- idx = build_index( exparray, k, i, t );
- assert( idx >= 0 && idx < (1<<k) );
- if( !G[idx] ) {
- if( !idx )
- G[0] = mpi_alloc_set_ui( 1 );
- else {
- for(j=0; j < k; j++ ) {
- if( (idx & (1<<j) ) ) {
- if( !G[idx] )
- G[idx] = mpi_copy( basearray[j] );
- else
- mpi_mulm( G[idx], G[idx], basearray[j], m );
- }
- }
- if( !G[idx] )
- G[idx] = mpi_alloc(0);
- }
- }
- mpi_mulm(res, tmp, G[idx], m );
- }
-
- /* cleanup */
- mpi_free(tmp);
- for(i=0; i < (1<<k); i++ )
- mpi_free(G[i]);
- m_free(G);
-}
-
diff --git a/mpi/mpi-mul.c b/mpi/mpi-mul.c
deleted file mode 100644
index df8eb258..00000000
--- a/mpi/mpi-mul.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* mpi-mul.c - MPI functions
- * Copyright (C) 1998 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"
-
-
-void
-mpi_mul_ui( MPI prod, MPI mult, unsigned long small_mult )
-{
- mpi_size_t size, prod_size;
- mpi_ptr_t prod_ptr;
- mpi_limb_t cy;
- int sign;
-
- size = mult->nlimbs;
- sign = mult->sign;
-
- if( !size || !small_mult ) {
- prod->nlimbs = 0;
- prod->sign = 0;
- return;
- }
-
- prod_size = size + 1;
- if( prod->alloced < prod_size )
- mpi_resize( prod, prod_size );
- prod_ptr = prod->d;
-
- cy = mpihelp_mul_1( prod_ptr, mult->d, size, (mpi_limb_t)small_mult );
- if( cy )
- prod_ptr[size++] = cy;
- prod->nlimbs = size;
- prod->sign = sign;
-}
-
-
-void
-mpi_mul_2exp( MPI w, MPI u, unsigned long cnt)
-{
- mpi_size_t usize, wsize, limb_cnt;
- mpi_ptr_t wp;
- mpi_limb_t wlimb;
- int usign, wsign;
-
- usize = u->nlimbs;
- usign = u->sign;
-
- if( !usize ) {
- w->nlimbs = 0;
- w->sign = 0;
- return;
- }
-
- limb_cnt = cnt / BITS_PER_MPI_LIMB;
- wsize = usize + limb_cnt + 1;
- if( w->alloced < wsize )
- mpi_resize(w, wsize );
- wp = w->d;
- wsize = usize + limb_cnt;
- wsign = usign;
-
- cnt %= BITS_PER_MPI_LIMB;
- if( cnt ) {
- wlimb = mpihelp_lshift( wp + limb_cnt, u->d, usize, cnt );
- if( wlimb ) {
- wp[wsize] = wlimb;
- wsize++;
- }
- }
- else {
- MPN_COPY_DECR( wp + limb_cnt, u->d, usize );
- }
-
- /* Zero all whole limbs at low end. Do it here and not before calling
- * mpn_lshift, not to lose for U == W. */
- MPN_ZERO( wp, limb_cnt );
-
- w->nlimbs = wsize;
- w->sign = wsign;
-}
-
-
-
-void
-mpi_mul( MPI w, MPI u, MPI v)
-{
- mpi_size_t usize, vsize, wsize;
- mpi_ptr_t up, vp, wp;
- mpi_limb_t cy;
- int usign, vsign, usecure, vsecure, sign_product;
- int assign_wp=0;
- mpi_ptr_t tmp_limb=NULL;
-
- if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */
- usize = v->nlimbs;
- usign = v->sign;
- usecure = mpi_is_secure(v);
- up = v->d;
- vsize = u->nlimbs;
- vsign = u->sign;
- vsecure = mpi_is_secure(u);
- vp = u->d;
- }
- else {
- usize = u->nlimbs;
- usign = u->sign;
- usecure = mpi_is_secure(u);
- up = u->d;
- vsize = v->nlimbs;
- vsign = v->sign;
- vsecure = mpi_is_secure(v);
- vp = v->d;
- }
- sign_product = usign ^ vsign;
- wp = w->d;
-
- /* Ensure W has space enough to store the result. */
- wsize = usize + vsize;
- if( w->alloced < wsize ) {
- if( wp == up || wp == vp ) {
- wp = mpi_alloc_limb_space( wsize, mpi_is_secure(w) );
- assign_wp = 1;
- }
- else {
- mpi_resize(w, wsize );
- wp = w->d;
- }
- }
- else { /* Make U and V not overlap with W. */
- if( wp == up ) {
- /* W and U are identical. Allocate temporary space for U. */
- up = tmp_limb = mpi_alloc_limb_space( usize, usecure );
- /* Is V identical too? Keep it identical with U. */
- if( wp == vp )
- vp = up;
- /* Copy to the temporary space. */
- MPN_COPY( up, wp, usize );
- }
- else if( wp == vp ) {
- /* W and V are identical. Allocate temporary space for V. */
- vp = tmp_limb = mpi_alloc_limb_space( vsize, vsecure );
- /* Copy to the temporary space. */
- MPN_COPY( vp, wp, vsize );
- }
- }
-
- if( !vsize )
- wsize = 0;
- else {
- cy = mpihelp_mul( wp, up, usize, vp, vsize );
- wsize -= cy? 0:1;
- }
-
- if( assign_wp )
- mpi_assign_limb_space( w, wp, wsize );
- w->nlimbs = wsize;
- w->sign = sign_product;
- if( tmp_limb )
- mpi_free_limb_space( tmp_limb );
-}
-
-
-void
-mpi_mulm( MPI w, MPI u, MPI v, MPI m)
-{
- mpi_mul(w, u, v);
- mpi_fdiv_r( w, w, m );
-}
-
diff --git a/mpi/mpi-pow.c b/mpi/mpi-pow.c
deleted file mode 100644
index 96a1218d..00000000
--- a/mpi/mpi-pow.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/* mpi-pow.c - MPI functions
- * Copyright (C) 1998 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"
-#include "longlong.h"
-#include <assert.h>
-
-
-/****************
- * RES = BASE ^ EXP mod MOD
- */
-void
-mpi_powm( MPI res, MPI base, MPI exp, MPI mod)
-{
- mpi_ptr_t rp, ep, mp, bp;
- mpi_size_t esize, msize, bsize, rsize;
- int esign, msign, bsign, rsign;
- int esec, msec, bsec, rsec;
- mpi_size_t size;
- int mod_shift_cnt;
- int negative_result;
- mpi_ptr_t mp_marker=NULL, bp_marker=NULL, ep_marker=NULL;
- mpi_ptr_t xp_marker=NULL;
- int assign_rp=0;
- mpi_ptr_t tspace = NULL;
- mpi_size_t tsize=0; /* to avoid compiler warning, fixme: check */
-
- esize = exp->nlimbs;
- msize = mod->nlimbs;
- size = 2 * msize;
- esign = exp->sign;
- msign = mod->sign;
-
- esec = mpi_is_secure(exp);
- msec = mpi_is_secure(mod);
- bsec = mpi_is_secure(base);
- rsec = mpi_is_secure(res);
-
- rp = res->d;
- ep = exp->d;
-
- if( !msize )
- msize = 1 / msize; /* provoke a signal */
-
- if( !esize ) {
- /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0
- * depending on if MOD equals 1. */
- rp[0] = 1;
- res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1;
- res->sign = 0;
- goto leave;
- }
-
- /* Normalize MOD (i.e. make its most significant bit set) as required by
- * mpn_divrem. This will make the intermediate values in the calculation
- * slightly larger, but the correct result is obtained after a final
- * reduction using the original MOD value. */
- mp = mp_marker = mpi_alloc_limb_space(msize, msec);
- count_leading_zeros( mod_shift_cnt, mod->d[msize-1] );
- if( mod_shift_cnt )
- mpihelp_lshift( mp, mod->d, msize, mod_shift_cnt );
- else
- MPN_COPY( mp, mod->d, msize );
-
- bsize = base->nlimbs;
- bsign = base->sign;
- if( bsize > msize ) { /* The base is larger than the module. Reduce it. */
- /* Allocate (BSIZE + 1) with space for remainder and quotient.
- * (The quotient is (bsize - msize + 1) limbs.) */
- bp = bp_marker = mpi_alloc_limb_space( bsize + 1, bsec );
- MPN_COPY( bp, base->d, bsize );
- /* We don't care about the quotient, store it above the remainder,
- * at BP + MSIZE. */
- mpihelp_divrem( bp + msize, 0, bp, bsize, mp, msize );
- bsize = msize;
- /* Canonicalize the base, since we are going to multiply with it
- * quite a few times. */
- MPN_NORMALIZE( bp, bsize );
- }
- else
- bp = base->d;
-
- if( !bsize ) {
- res->nlimbs = 0;
- res->sign = 0;
- goto leave;
- }
-
- if( res->alloced < size ) {
- /* We have to allocate more space for RES. If any of the input
- * parameters are identical to RES, defer deallocation of the old
- * space. */
- if( rp == ep || rp == mp || rp == bp ) {
- rp = mpi_alloc_limb_space( size, rsec );
- assign_rp = 1;
- }
- else {
- mpi_resize( res, size );
- rp = res->d;
- }
- }
- else { /* Make BASE, EXP and MOD not overlap with RES. */
- if( rp == bp ) {
- /* RES and BASE are identical. Allocate temp. space for BASE. */
- assert( !bp_marker );
- bp = bp_marker = mpi_alloc_limb_space( bsize, bsec );
- MPN_COPY(bp, rp, bsize);
- }
- if( rp == ep ) {
- /* RES and EXP are identical. Allocate temp. space for EXP. */
- ep = ep_marker = mpi_alloc_limb_space( esize, esec );
- MPN_COPY(ep, rp, esize);
- }
- if( rp == mp ) {
- /* RES and MOD are identical. Allocate temporary space for MOD.*/
- assert( !mp_marker );
- mp = mp_marker = mpi_alloc_limb_space( msize, msec );
- MPN_COPY(mp, rp, msize);
- }
- }
-
- MPN_COPY( rp, bp, bsize );
- rsize = bsize;
- rsign = bsign;
-
- {
- mpi_size_t i;
- mpi_ptr_t xp = xp_marker = mpi_alloc_limb_space( 2 * (msize + 1), msec );
- int c;
- mpi_limb_t e;
- mpi_limb_t carry_limb;
-
- negative_result = (ep[0] & 1) && base->sign;
-
- i = esize - 1;
- e = ep[i];
- count_leading_zeros (c, e);
- e = (e << c) << 1; /* shift the exp bits to the left, lose msb */
- c = BITS_PER_MPI_LIMB - 1 - c;
-
- /* Main loop.
- *
- * Make the result be pointed to alternately by XP and RP. This
- * helps us avoid block copying, which would otherwise be necessary
- * with the overlap restrictions of mpihelp_divmod. With 50% probability
- * the result after this loop will be in the area originally pointed
- * by RP (==RES->d), and with 50% probability in the area originally
- * pointed to by XP.
- */
- for(;;) {
- while( c ) {
- mpi_ptr_t tp;
- mpi_size_t xsize;
-
- /*mpihelp_mul_n(xp, rp, rp, rsize);*/
- if( rsize < KARATSUBA_THRESHOLD )
- mpih_sqr_n_basecase( xp, rp, rsize );
- else {
- if( !tspace ) {
- tsize = 2 * rsize;
- tspace = mpi_alloc_limb_space( tsize, 0 );
- }
- else if( tsize < (2*rsize) ) {
- mpi_free_limb_space( tspace );
- tsize = 2 * rsize;
- tspace = mpi_alloc_limb_space( tsize, 0 );
-
- }
- mpih_sqr_n( xp, rp, rsize, tspace );
- }
-
- xsize = 2 * rsize;
- if( xsize > msize ) {
- mpihelp_divrem(xp + msize, 0, xp, xsize, mp, msize);
- xsize = msize;
- }
-
- tp = rp; rp = xp; xp = tp;
- rsize = xsize;
-
- if( (mpi_limb_signed_t)e < 0 ) {
- mpihelp_mul( xp, rp, rsize, bp, bsize );
- xsize = rsize + bsize;
- if( xsize > msize ) {
- mpihelp_divrem(xp + msize, 0, xp, xsize, mp, msize);
- xsize = msize;
- }
-
- tp = rp; rp = xp; xp = tp;
- rsize = xsize;
- }
- e <<= 1;
- c--;
- }
-
- i--;
- if( i < 0 )
- break;
- e = ep[i];
- c = BITS_PER_MPI_LIMB;
- }
-
- /* We shifted MOD, the modulo reduction argument, left MOD_SHIFT_CNT
- * steps. Adjust the result by reducing it with the original MOD.
- *
- * Also make sure the result is put in RES->d (where it already
- * might be, see above).
- */
- if( mod_shift_cnt ) {
- carry_limb = mpihelp_lshift( res->d, rp, rsize, mod_shift_cnt);
- rp = res->d;
- if( carry_limb ) {
- rp[rsize] = carry_limb;
- rsize++;
- }
- }
- else {
- MPN_COPY( res->d, rp, rsize);
- rp = res->d;
- }
-
- if( rsize >= msize ) {
- mpihelp_divrem(rp + msize, 0, rp, rsize, mp, msize);
- rsize = msize;
- }
-
- /* Remove any leading zero words from the result. */
- if( mod_shift_cnt )
- mpihelp_rshift( rp, rp, rsize, mod_shift_cnt);
- MPN_NORMALIZE (rp, rsize);
- }
-
- if( negative_result && rsize ) {
- if( mod_shift_cnt )
- mpihelp_rshift( mp, mp, msize, mod_shift_cnt);
- mpihelp_sub( rp, mp, msize, rp, rsize);
- rsize = msize;
- rsign = msign;
- MPN_NORMALIZE(rp, rsize);
- }
- res->nlimbs = rsize;
- res->sign = rsign;
-
- leave:
- if( assign_rp ) mpi_assign_limb_space( res, rp, size );
- if( mp_marker ) mpi_free_limb_space( mp_marker );
- if( bp_marker ) mpi_free_limb_space( bp_marker );
- if( ep_marker ) mpi_free_limb_space( ep_marker );
- if( xp_marker ) mpi_free_limb_space( xp_marker );
- if( tspace ) mpi_free_limb_space( tspace );
-}
-
diff --git a/mpi/mpi-scan.c b/mpi/mpi-scan.c
deleted file mode 100644
index ea5673f4..00000000
--- a/mpi/mpi-scan.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* mpi-scan.c - MPI functions
- * 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-internal.h"
-#include "longlong.h"
-
-/****************
- * Scan through an mpi and return byte for byte. a -1 is returned to indicate
- * the end of the mpi. Scanning is done from the lsb to the msb, returned
- * values are in the range of 0 .. 255.
- *
- * FIXME: This code is VERY ugly!
- */
-int
-mpi_getbyte( MPI a, unsigned idx )
-{
- int i, j;
- unsigned n;
- mpi_ptr_t ap;
- mpi_limb_t limb;
-
- ap = a->d;
- for(n=0,i=0; i < a->nlimbs; i++ ) {
- limb = ap[i];
- for( j=0; j < BYTES_PER_MPI_LIMB; j++, n++ )
- if( n == idx )
- return (limb >> j*8) & 0xff;
- }
- return -1;
-}
-
-
-/****************
- * Put a value at position IDX into A. idx counts from lsb to msb
- */
-void
-mpi_putbyte( MPI a, unsigned idx, int xc )
-{
- int i, j;
- unsigned n;
- mpi_ptr_t ap;
- mpi_limb_t limb, c;
-
- c = xc & 0xff;
- ap = a->d;
- for(n=0,i=0; i < a->alloced; i++ ) {
- limb = ap[i];
- for( j=0; j < BYTES_PER_MPI_LIMB; j++, n++ )
- if( n == idx ) {
- #if BYTES_PER_MPI_LIMB == 4
- if( j == 0 )
- limb = (limb & 0xffffff00) | c;
- else if( j == 1 )
- limb = (limb & 0xffff00ff) | (c<<8);
- else if( j == 2 )
- limb = (limb & 0xff00ffff) | (c<<16);
- else
- limb = (limb & 0x00ffffff) | (c<<24);
- #elif BYTES_PER_MPI_LIMB == 8
- if( j == 0 )
- limb = (limb & 0xffffffffffffff00) | c;
- else if( j == 1 )
- limb = (limb & 0xffffffffffff00ff) | (c<<8);
- else if( j == 2 )
- limb = (limb & 0xffffffffff00ffff) | (c<<16);
- else if( j == 3 )
- limb = (limb & 0xffffffff00ffffff) | (c<<24);
- else if( j == 4 )
- limb = (limb & 0xffffff00ffffffff) | (c<<32);
- else if( j == 5 )
- limb = (limb & 0xffff00ffffffffff) | (c<<40);
- else if( j == 6 )
- limb = (limb & 0xff00ffffffffffff) | (c<<48);
- else
- limb = (limb & 0x00ffffffffffffff) | (c<<56);
- #else
- #error please enhance this function, its ugly - i know.
- #endif
- if( a->nlimbs <= i )
- a->nlimbs = i+1;
- ap[i] = limb;
- return;
- }
- }
- abort(); /* index out of range */
-}
-
-
-/****************
- * Count the number of zerobits at the low end of A
- */
-unsigned
-mpi_trailing_zeros( MPI a )
-{
- unsigned n, count = 0;
-
- for(n=0; n < a->nlimbs; n++ ) {
- if( a->d[n] ) {
- unsigned nn;
- mpi_limb_t alimb = a->d[n];
-
- count_trailing_zeros( nn, alimb );
- count += nn;
- break;
- }
- count += BITS_PER_MPI_LIMB;
- }
- return count;
-
-}
-
-
diff --git a/mpi/mpicoder.c b/mpi/mpicoder.c
deleted file mode 100644
index 2ef4c141..00000000
--- a/mpi/mpicoder.c
+++ /dev/null
@@ -1,436 +0,0 @@
-/* mpicoder.c - Coder for the external representation of MPIs
- * 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 <string.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "mpi.h"
-#include "mpi-internal.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "util.h"
-
-#ifdef M_DEBUG
- #undef mpi_read
-#endif
-
-#define MAX_EXTERN_MPI_BITS 16384
-
-/****************
- * write an mpi to out.
- */
-int
-mpi_write( IOBUF out, MPI a )
-{
- int rc;
- unsigned nbits = mpi_get_nbits(a);
- byte *p, *buf;
- unsigned n;
-
- if( nbits > MAX_EXTERN_MPI_BITS )
- log_bug("mpi_encode: mpi too large (%u bits)\n", nbits);
-
- iobuf_put(out, (nbits >>8) );
- iobuf_put(out, (nbits) );
-
- p = buf = mpi_get_buffer( a, &n, NULL );
- rc = iobuf_write( out, p, n );
- m_free(buf);
- return rc;
-}
-
-
-/****************
- * Read an external representation of an mpi and return the MPI
- * The external format is a 16 bit unsigned value stored in network byte order,
- * giving the number of bits for the following integer. The integer is stored
- * with MSB first (left padded with zeroes to align on a byte boundary).
- */
-MPI
-#ifdef M_DEBUG
-mpi_debug_read(IOBUF inp, unsigned *ret_nread, int secure, const char *info)
-#else
-mpi_read(IOBUF inp, unsigned *ret_nread, int secure)
-#endif
-{
- int c, i, j;
- unsigned nbits, nbytes, nlimbs, nread=0;
- mpi_limb_t a;
- MPI val = MPI_NULL;
-
- if( (c = iobuf_get(inp)) == -1 )
- goto leave;
- nbits = c << 8;
- if( (c = iobuf_get(inp)) == -1 )
- goto leave;
- nbits |= c;
- if( nbits > MAX_EXTERN_MPI_BITS ) {
- log_error("mpi too large (%u bits)\n", nbits);
- goto leave;
- }
- nread = 2;
-
- nbytes = (nbits+7) / 8;
- nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB;
- #ifdef M_DEBUG
- val = secure? mpi_debug_alloc_secure( nlimbs, info )
- : mpi_debug_alloc( nlimbs, info );
- #else
- val = secure? mpi_alloc_secure( nlimbs )
- : mpi_alloc( nlimbs );
- #endif
- i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB;
- i %= BYTES_PER_MPI_LIMB;
- val->nbits = nbits;
- j= val->nlimbs = nlimbs;
- val->sign = 0;
- for( ; j > 0; j-- ) {
- a = 0;
- for(; i < BYTES_PER_MPI_LIMB; i++ ) {
- a <<= 8;
- a |= iobuf_get(inp) & 0xff; nread++;
- }
- i = 0;
- val->d[j-1] = a;
- }
-
- leave:
- if( nread > *ret_nread )
- log_bug("mpi crosses packet border");
- else
- *ret_nread = nread;
- return val;
-}
-
-
-MPI
-mpi_read_from_buffer(byte *buffer, unsigned *ret_nread, int secure)
-{
- int i, j;
- unsigned nbits, nbytes, nlimbs, nread=0;
- mpi_limb_t a;
- MPI val = MPI_NULL;
-
- if( *ret_nread < 2 )
- goto leave;
- nbits = buffer[0] << 8 | buffer[1];
- if( nbits > MAX_EXTERN_MPI_BITS ) {
- log_error("mpi too large (%u bits)\n", nbits);
- goto leave;
- }
- buffer += 2;
- nread = 2;
-
- nbytes = (nbits+7) / 8;
- nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB;
- val = secure? mpi_alloc_secure( nlimbs )
- : mpi_alloc( nlimbs );
- i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB;
- i %= BYTES_PER_MPI_LIMB;
- val->nbits = nbits;
- j= val->nlimbs = nlimbs;
- val->sign = 0;
- for( ; j > 0; j-- ) {
- a = 0;
- for(; i < BYTES_PER_MPI_LIMB; i++ ) {
- if( ++nread > *ret_nread )
- log_bug("mpi larger than buffer");
- a <<= 8;
- a |= *buffer++;
- }
- i = 0;
- val->d[j-1] = a;
- }
-
- leave:
- *ret_nread = nread;
- return val;
-}
-
-
-/****************
- * Make an mpi from a character string.
- */
-int
-mpi_fromstr(MPI val, const char *str)
-{
- int hexmode=0, sign=0, prepend_zero=0, i, j, c, c1, c2;
- unsigned nbits, nbytes, nlimbs;
- mpi_limb_t a;
-
- if( *str == '-' ) {
- sign = 1;
- str++;
- }
- if( *str == '0' && str[1] == 'x' )
- hexmode = 1;
- else
- return 1; /* other bases are not yet supported */
- str += 2;
-
- nbits = strlen(str)*4;
- if( nbits % 8 )
- prepend_zero = 1;
- nbytes = (nbits+7) / 8;
- nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB;
- if( val->alloced < nlimbs )
- mpi_resize(val, nlimbs );
- i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB;
- i %= BYTES_PER_MPI_LIMB;
- j= val->nlimbs = nlimbs;
- val->sign = sign;
- for( ; j > 0; j-- ) {
- a = 0;
- for(; i < BYTES_PER_MPI_LIMB; i++ ) {
- if( prepend_zero ) {
- c1 = '0';
- prepend_zero = 0;
- }
- else
- c1 = *str++;
- assert(c1);
- c2 = *str++;
- assert(c2);
- if( c1 >= '0' && c1 <= '9' )
- c = c1 - '0';
- else if( c1 >= 'a' && c1 <= 'f' )
- c = c1 - 'a' + 10;
- else if( c1 >= 'A' && c1 <= 'F' )
- c = c1 - 'A' + 10;
- else {
- mpi_clear(val);
- return 1;
- }
- c <<= 4;
- if( c2 >= '0' && c2 <= '9' )
- c |= c2 - '0';
- else if( c2 >= 'a' && c2 <= 'f' )
- c |= c2 - 'a' + 10;
- else if( c2 >= 'A' && c2 <= 'F' )
- c |= c2 - 'A' + 10;
- else {
- mpi_clear(val);
- return 1;
- }
- a <<= 8;
- a |= c;
- }
- i = 0;
- val->d[j-1] = a;
- }
-
- return 0;
-}
-
-
-/****************
- * print an MPI to the given stream and return the number of characters
- * printed.
- */
-int
-mpi_print( FILE *fp, MPI a, int mode )
-{
- int i, n=0;
-
- if( a == MPI_NULL )
- return fprintf(fp, "[MPI_NULL]");
- if( !mode ) {
- unsigned n1, n2;
- n1 = mpi_get_nbits(a);
- n2 = mpi_get_nbit_info(a);
- if( n2 && n2 != n1 )
- n += fprintf(fp, "[%u bits (%u)]", n1, n2 );
- else
- n += fprintf(fp, "[%u bits]", n1);
- }
- else {
- if( a->sign )
- putc('-', fp);
- #if BYTES_PER_MPI_LIMB == 2
- #define X "4"
- #elif BYTES_PER_MPI_LIMB == 4
- #define X "8"
- #elif BYTES_PER_MPI_LIMB == 8
- #define X "16"
- #else
- #error please define the format here
- #endif
- for(i=a->nlimbs; i > 0 ; i-- ) {
- n += fprintf(fp, i!=a->nlimbs? "%0" X "lX":"%lX", (ulong)a->d[i-1]);
- #undef X
- }
- if( !a->nlimbs )
- putc('0', fp );
- }
- return n;
-}
-
-
-/****************
- * Special function to get the low 8 bytes from an mpi.
- * This can be used as a keyid; KEYID is an 2 element array.
- * Return the low 4 bytes.
- */
-u32
-mpi_get_keyid( MPI a, u32 *keyid )
-{
-#if BYTES_PER_MPI_LIMB == 4
- if( keyid ) {
- keyid[0] = a->nlimbs >= 2? a->d[1] : 0;
- keyid[1] = a->nlimbs >= 1? a->d[0] : 0;
- }
- return a->nlimbs >= 1? a->d[0] : 0;
-#elif BYTES_PER_MPI_LIMB == 8
- if( keyid ) {
- keyid[0] = a->nlimbs? (u32)(a->d[0] >> 32) : 0;
- keyid[1] = a->nlimbs? (u32)(a->d[0] & 0xffffffff) : 0;
- }
- return a->nlimbs? (u32)(a->d[0] & 0xffffffff) : 0;
-#else
- #error Make this function work with other LIMB sizes
-#endif
-}
-
-
-/****************
- * Return an m_alloced buffer with the MPI (msb first).
- * NBYTES receives the length of this buffer. Caller must free the
- * return string (This function does return a 0 byte buffer with NBYTES
- * set to zero if the value of A is zero. If sign is not NULL, it will
- * be set to the sign of the A.
- */
-static byte *
-do_get_buffer( MPI a, unsigned *nbytes, int *sign, int force_secure )
-{
- byte *p, *buffer;
- mpi_limb_t alimb;
- int i;
-
- if( sign )
- *sign = a->sign;
- *nbytes = a->nlimbs * BYTES_PER_MPI_LIMB;
- p = buffer = force_secure || mpi_is_secure(a) ? m_alloc_secure( *nbytes)
- : m_alloc( *nbytes );
-
- for(i=a->nlimbs-1; i >= 0; i-- ) {
- alimb = a->d[i];
- #if BYTES_PER_MPI_LIMB == 4
- *p++ = alimb >> 24;
- *p++ = alimb >> 16;
- *p++ = alimb >> 8;
- *p++ = alimb ;
- #elif BYTES_PER_MPI_LIMB == 8
- *p++ = alimb >> 56;
- *p++ = alimb >> 48;
- *p++ = alimb >> 40;
- *p++ = alimb >> 32;
- *p++ = alimb >> 24;
- *p++ = alimb >> 16;
- *p++ = alimb >> 8;
- *p++ = alimb ;
- #else
- #error please implement for this limb size.
- #endif
- }
-
- /* this is sub-optimal but we need to do the shift oepration because
- * the caller has to free the returned buffer */
- for(p=buffer; !*p && *nbytes; p++, --*nbytes )
- ;
- if( p != buffer )
- memmove(buffer,p, *nbytes);
- return buffer;
-}
-
-
-byte *
-mpi_get_buffer( MPI a, unsigned *nbytes, int *sign )
-{
- return do_get_buffer( a, nbytes, sign, 0 );
-}
-
-byte *
-mpi_get_secure_buffer( MPI a, unsigned *nbytes, int *sign )
-{
- return do_get_buffer( a, nbytes, sign, 1 );
-}
-
-/****************
- * Use BUFFER to update MPI.
- */
-void
-mpi_set_buffer( MPI a, const byte *buffer, unsigned nbytes, int sign )
-{
- const byte *p;
- mpi_limb_t alimb;
- int nlimbs;
- int i;
-
- nlimbs = (nbytes + BYTES_PER_MPI_LIMB - 1) / BYTES_PER_MPI_LIMB;
- RESIZE_IF_NEEDED(a, nlimbs);
- a->sign = sign;
-
- for(i=0, p = buffer+nbytes-1; p >= buffer+BYTES_PER_MPI_LIMB; ) {
- #if BYTES_PER_MPI_LIMB == 4
- alimb = *p-- ;
- alimb |= *p-- << 8 ;
- alimb |= *p-- << 16 ;
- alimb |= *p-- << 24 ;
- #elif BYTES_PER_MPI_LIMB == 8
- alimb = (mpi_limb_t)*p-- ;
- alimb |= (mpi_limb_t)*p-- << 8 ;
- alimb |= (mpi_limb_t)*p-- << 16 ;
- alimb |= (mpi_limb_t)*p-- << 24 ;
- alimb |= (mpi_limb_t)*p-- << 32 ;
- alimb |= (mpi_limb_t)*p-- << 40 ;
- alimb |= (mpi_limb_t)*p-- << 48 ;
- alimb |= (mpi_limb_t)*p-- << 56 ;
- #else
- #error please implement for this limb size.
- #endif
- a->d[i++] = alimb;
- }
- if( p >= buffer ) {
- #if BYTES_PER_MPI_LIMB == 4
- alimb = *p-- ;
- if( p >= buffer ) alimb |= *p-- << 8 ;
- if( p >= buffer ) alimb |= *p-- << 16 ;
- if( p >= buffer ) alimb |= *p-- << 24 ;
- #elif BYTES_PER_MPI_LIMB == 8
- alimb = (mpi_limb_t)*p-- ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 8 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 16 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 24 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 32 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 40 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 48 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 56 ;
- #else
- #error please implement for this limb size.
- #endif
- a->d[i++] = alimb;
- }
- a->nlimbs = i;
- assert( i == nlimbs );
-}
-
diff --git a/mpi/mpih-add.c b/mpi/mpih-add.c
deleted file mode 100644
index d6b0c3eb..00000000
--- a/mpi/mpih-add.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* mpihelp-add.c - MPI helper functions
- * Copyright (C) 1998 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 to S1_PTR with size S1_SIZE the limb S2_LIMB and
- * store the result in RES_PTR. Return the carry
- * S1_SIZE must be > 0.
- */
-#ifndef __GNUC__
-/*_EXTERN_INLINE */
-mpi_limb_t
-mpihelp_add_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb)
-{
- mpi_limb_t x;
-
- x = *s1_ptr++;
- s2_limb += x;
- *res_ptr++ = s2_limb;
- if( s2_limb < x ) { /* sum is less than the left operand: handle carry */
- while( --s1_size ) {
- x = *s1_ptr++ + 1; /* add carry */
- *res_ptr++ = x; /* and store */
- if( x ) /* not 0 (no overflow): we can stop */
- goto leave;
- }
- return 1; /* return carry (size of s1 to small) */
- }
-
- leave:
- if( res_ptr != s1_ptr ) { /* not the same variable */
- mpi_size_t i; /* copy the rest */
- for( i=0; i < s1_size-1; i++ )
- res_ptr[i] = s1_ptr[i];
- }
- return 0; /* no carry */
-}
-
-
-
-/*_EXTERN_INLINE*/
-mpi_limb_t
-mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size)
-{
- mpi_limb_t cy = 0;
-
- if( s2_size )
- cy = mpihelp_add_n( res_ptr, s1_ptr, s2_ptr, s2_size );
-
- if( s1_size - s2_size )
- cy = mpihelp_add_1( res_ptr + s2_size, s1_ptr + s2_size,
- s1_size - s2_size, cy);
- return cy;
-}
-#endif
diff --git a/mpi/mpih-cmp.c b/mpi/mpih-cmp.c
deleted file mode 100644
index 9c9cb4a6..00000000
--- a/mpi/mpih-cmp.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* mpihelp-sub.c - MPI helper functions
- * Copyright (C) 1998 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"
-
-/****************
- * Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE.
- * There are no restrictions on the relative sizes of
- * the two arguments.
- * Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2.
- */
-int
-mpihelp_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size )
-{
- mpi_size_t i;
- mpi_limb_t op1_word, op2_word;
-
- for( i = size - 1; i >= 0 ; i--) {
- op1_word = op1_ptr[i];
- op2_word = op2_ptr[i];
- if( op1_word != op2_word )
- goto diff;
- }
- return 0;
-
- diff:
- /* This can *not* be simplified to
- * op2_word - op2_word
- * since that expression might give signed overflow. */
- return (op1_word > op2_word) ? 1 : -1;
-}
-
diff --git a/mpi/mpih-div.c b/mpi/mpih-div.c
deleted file mode 100644
index 0d711cb5..00000000
--- a/mpi/mpih-div.c
+++ /dev/null
@@ -1,537 +0,0 @@
-/* mpihelp-div.c - MPI helper functions
- * Copyright (C) 1998 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"
-#include "longlong.h"
-
-#ifndef UMUL_TIME
- #define UMUL_TIME 1
-#endif
-#ifndef UDIV_TIME
- #define UDIV_TIME UMUL_TIME
-#endif
-
-/* FIXME: We should be using invert_limb (or invert_normalized_limb)
- * here (not udiv_qrnnd).
- */
-
-mpi_limb_t
-mpihelp_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size,
- mpi_limb_t divisor_limb)
-{
- mpi_size_t i;
- mpi_limb_t n1, n0, r;
- int dummy;
-
- /* Botch: Should this be handled at all? Rely on callers? */
- if( !dividend_size )
- return 0;
-
- /* If multiplication is much faster than division, and the
- * dividend is large, pre-invert the divisor, and use
- * only multiplications in the inner loop.
- *
- * This test should be read:
- * Does it ever help to use udiv_qrnnd_preinv?
- * && Does what we save compensate for the inversion overhead?
- */
- if( UDIV_TIME > (2 * UMUL_TIME + 6)
- && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME ) {
- int normalization_steps;
-
- count_leading_zeros( normalization_steps, divisor_limb );
- if( normalization_steps ) {
- mpi_limb_t divisor_limb_inverted;
-
- divisor_limb <<= normalization_steps;
-
- /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
- * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
- * most significant bit (with weight 2**N) implicit.
- *
- * Special case for DIVISOR_LIMB == 100...000.
- */
- if( !(divisor_limb << 1) )
- divisor_limb_inverted = ~(mpi_limb_t)0;
- else
- udiv_qrnnd(divisor_limb_inverted, dummy,
- -divisor_limb, 0, divisor_limb);
-
- n1 = dividend_ptr[dividend_size - 1];
- r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps);
-
- /* Possible optimization:
- * if (r == 0
- * && divisor_limb > ((n1 << normalization_steps)
- * | (dividend_ptr[dividend_size - 2] >> ...)))
- * ...one division less...
- */
- for( i = dividend_size - 2; i >= 0; i--) {
- n0 = dividend_ptr[i];
- UDIV_QRNND_PREINV(dummy, r, r,
- ((n1 << normalization_steps)
- | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))),
- divisor_limb, divisor_limb_inverted);
- n1 = n0;
- }
- UDIV_QRNND_PREINV(dummy, r, r,
- n1 << normalization_steps,
- divisor_limb, divisor_limb_inverted);
- return r >> normalization_steps;
- }
- else {
- mpi_limb_t divisor_limb_inverted;
-
- /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
- * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
- * most significant bit (with weight 2**N) implicit.
- *
- * Special case for DIVISOR_LIMB == 100...000.
- */
- if( !(divisor_limb << 1) )
- divisor_limb_inverted = ~(mpi_limb_t)0;
- else
- udiv_qrnnd(divisor_limb_inverted, dummy,
- -divisor_limb, 0, divisor_limb);
-
- i = dividend_size - 1;
- r = dividend_ptr[i];
-
- if( r >= divisor_limb )
- r = 0;
- else
- i--;
-
- for( ; i >= 0; i--) {
- n0 = dividend_ptr[i];
- UDIV_QRNND_PREINV(dummy, r, r,
- n0, divisor_limb, divisor_limb_inverted);
- }
- return r;
- }
- }
- else {
- if( UDIV_NEEDS_NORMALIZATION ) {
- int normalization_steps;
-
- count_leading_zeros(normalization_steps, divisor_limb);
- if( normalization_steps ) {
- divisor_limb <<= normalization_steps;
-
- n1 = dividend_ptr[dividend_size - 1];
- r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps);
-
- /* Possible optimization:
- * if (r == 0
- * && divisor_limb > ((n1 << normalization_steps)
- * | (dividend_ptr[dividend_size - 2] >> ...)))
- * ...one division less...
- */
- for(i = dividend_size - 2; i >= 0; i--) {
- n0 = dividend_ptr[i];
- udiv_qrnnd (dummy, r, r,
- ((n1 << normalization_steps)
- | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))),
- divisor_limb);
- n1 = n0;
- }
- udiv_qrnnd (dummy, r, r,
- n1 << normalization_steps,
- divisor_limb);
- return r >> normalization_steps;
- }
- }
- /* No normalization needed, either because udiv_qrnnd doesn't require
- * it, or because DIVISOR_LIMB is already normalized. */
- i = dividend_size - 1;
- r = dividend_ptr[i];
-
- if(r >= divisor_limb)
- r = 0;
- else
- i--;
-
- for(; i >= 0; i--) {
- n0 = dividend_ptr[i];
- udiv_qrnnd (dummy, r, r, n0, divisor_limb);
- }
- return r;
- }
-}
-
-/* Divide num (NP/NSIZE) by den (DP/DSIZE) and write
- * the NSIZE-DSIZE least significant quotient limbs at QP
- * and the DSIZE long remainder at NP. If QEXTRA_LIMBS is
- * non-zero, generate that many fraction bits and append them after the
- * other quotient limbs.
- * Return the most significant limb of the quotient, this is always 0 or 1.
- *
- * Preconditions:
- * 0. NSIZE >= DSIZE.
- * 1. The most significant bit of the divisor must be set.
- * 2. QP must either not overlap with the input operands at all, or
- * QP + DSIZE >= NP must hold true. (This means that it's
- * possible to put the quotient in the high part of NUM, right after the
- * remainder in NUM.
- * 3. NSIZE >= DSIZE, even if QEXTRA_LIMBS is non-zero.
- */
-
-mpi_limb_t
-mpihelp_divrem( mpi_ptr_t qp, mpi_size_t qextra_limbs,
- mpi_ptr_t np, mpi_size_t nsize,
- mpi_ptr_t dp, mpi_size_t dsize)
-{
- mpi_limb_t most_significant_q_limb = 0;
-
- switch(dsize) {
- case 0:
- /* We are asked to divide by zero, so go ahead and do it! (To make
- the compiler not remove this statement, return the value.) */
- return 1 / dsize;
-
- case 1:
- {
- mpi_size_t i;
- mpi_limb_t n1;
- mpi_limb_t d;
-
- d = dp[0];
- n1 = np[nsize - 1];
-
- if( n1 >= d ) {
- n1 -= d;
- most_significant_q_limb = 1;
- }
-
- qp += qextra_limbs;
- for( i = nsize - 2; i >= 0; i--)
- udiv_qrnnd( qp[i], n1, n1, np[i], d );
- qp -= qextra_limbs;
-
- for( i = qextra_limbs - 1; i >= 0; i-- )
- udiv_qrnnd (qp[i], n1, n1, 0, d);
-
- np[0] = n1;
- }
- break;
-
- case 2:
- {
- mpi_size_t i;
- mpi_limb_t n1, n0, n2;
- mpi_limb_t d1, d0;
-
- np += nsize - 2;
- d1 = dp[1];
- d0 = dp[0];
- n1 = np[1];
- n0 = np[0];
-
- if( n1 >= d1 && (n1 > d1 || n0 >= d0) ) {
- sub_ddmmss (n1, n0, n1, n0, d1, d0);
- most_significant_q_limb = 1;
- }
-
- for( i = qextra_limbs + nsize - 2 - 1; i >= 0; i-- ) {
- mpi_limb_t q;
- mpi_limb_t r;
-
- if( i >= qextra_limbs )
- np--;
- else
- np[0] = 0;
-
- if( n1 == d1 ) {
- /* Q should be either 111..111 or 111..110. Need special
- * treatment of this rare case as normal division would
- * give overflow. */
- q = ~(mpi_limb_t)0;
-
- r = n0 + d1;
- if( r < d1 ) { /* Carry in the addition? */
- add_ssaaaa( n1, n0, r - d0, np[0], 0, d0 );
- qp[i] = q;
- continue;
- }
- n1 = d0 - (d0 != 0?1:0);
- n0 = -d0;
- }
- else {
- udiv_qrnnd (q, r, n1, n0, d1);
- umul_ppmm (n1, n0, d0, q);
- }
-
- n2 = np[0];
- q_test:
- if( n1 > r || (n1 == r && n0 > n2) ) {
- /* The estimated Q was too large. */
- q--;
- sub_ddmmss (n1, n0, n1, n0, 0, d0);
- r += d1;
- if( r >= d1 ) /* If not carry, test Q again. */
- goto q_test;
- }
-
- qp[i] = q;
- sub_ddmmss (n1, n0, r, n2, n1, n0);
- }
- np[1] = n1;
- np[0] = n0;
- }
- break;
-
- default:
- {
- mpi_size_t i;
- mpi_limb_t dX, d1, n0;
-
- np += nsize - dsize;
- dX = dp[dsize - 1];
- d1 = dp[dsize - 2];
- n0 = np[dsize - 1];
-
- if( n0 >= dX ) {
- if(n0 > dX || mpihelp_cmp(np, dp, dsize - 1) >= 0 ) {
- mpihelp_sub_n(np, np, dp, dsize);
- n0 = np[dsize - 1];
- most_significant_q_limb = 1;
- }
- }
-
- for( i = qextra_limbs + nsize - dsize - 1; i >= 0; i--) {
- mpi_limb_t q;
- mpi_limb_t n1, n2;
- mpi_limb_t cy_limb;
-
- if( i >= qextra_limbs ) {
- np--;
- n2 = np[dsize];
- }
- else {
- n2 = np[dsize - 1];
- MPN_COPY_DECR (np + 1, np, dsize);
- np[0] = 0;
- }
-
- if( n0 == dX ) {
- /* This might over-estimate q, but it's probably not worth
- * the extra code here to find out. */
- q = ~(mpi_limb_t)0;
- }
- else {
- mpi_limb_t r;
-
- udiv_qrnnd(q, r, n0, np[dsize - 1], dX);
- umul_ppmm(n1, n0, d1, q);
-
- while( n1 > r || (n1 == r && n0 > np[dsize - 2])) {
- q--;
- r += dX;
- if( r < dX ) /* I.e. "carry in previous addition?" */
- break;
- n1 -= n0 < d1;
- n0 -= d1;
- }
- }
-
- /* Possible optimization: We already have (q * n0) and (1 * n1)
- * after the calculation of q. Taking advantage of that, we
- * could make this loop make two iterations less. */
- cy_limb = mpihelp_submul_1(np, dp, dsize, q);
-
- if( n2 != cy_limb ) {
- mpihelp_add_n(np, np, dp, dsize);
- q--;
- }
-
- qp[i] = q;
- n0 = np[dsize - 1];
- }
- }
- }
-
- return most_significant_q_limb;
-}
-
-
-/****************
- * Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB.
- * Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR.
- * Return the single-limb remainder.
- * There are no constraints on the value of the divisor.
- *
- * QUOT_PTR and DIVIDEND_PTR might point to the same limb.
- */
-
-mpi_limb_t
-mpihelp_divmod_1( mpi_ptr_t quot_ptr,
- mpi_ptr_t dividend_ptr, mpi_size_t dividend_size,
- mpi_limb_t divisor_limb)
-{
- mpi_size_t i;
- mpi_limb_t n1, n0, r;
- int dummy;
-
- if( !dividend_size )
- return 0;
-
- /* If multiplication is much faster than division, and the
- * dividend is large, pre-invert the divisor, and use
- * only multiplications in the inner loop.
- *
- * This test should be read:
- * Does it ever help to use udiv_qrnnd_preinv?
- * && Does what we save compensate for the inversion overhead?
- */
- if( UDIV_TIME > (2 * UMUL_TIME + 6)
- && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME ) {
- int normalization_steps;
-
- count_leading_zeros( normalization_steps, divisor_limb );
- if( normalization_steps ) {
- mpi_limb_t divisor_limb_inverted;
-
- divisor_limb <<= normalization_steps;
-
- /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
- * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
- * most significant bit (with weight 2**N) implicit.
- */
- /* Special case for DIVISOR_LIMB == 100...000. */
- if( !(divisor_limb << 1) )
- divisor_limb_inverted = ~(mpi_limb_t)0;
- else
- udiv_qrnnd(divisor_limb_inverted, dummy,
- -divisor_limb, 0, divisor_limb);
-
- n1 = dividend_ptr[dividend_size - 1];
- r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps);
-
- /* Possible optimization:
- * if (r == 0
- * && divisor_limb > ((n1 << normalization_steps)
- * | (dividend_ptr[dividend_size - 2] >> ...)))
- * ...one division less...
- */
- for( i = dividend_size - 2; i >= 0; i--) {
- n0 = dividend_ptr[i];
- UDIV_QRNND_PREINV( quot_ptr[i + 1], r, r,
- ((n1 << normalization_steps)
- | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))),
- divisor_limb, divisor_limb_inverted);
- n1 = n0;
- }
- UDIV_QRNND_PREINV( quot_ptr[0], r, r,
- n1 << normalization_steps,
- divisor_limb, divisor_limb_inverted);
- return r >> normalization_steps;
- }
- else {
- mpi_limb_t divisor_limb_inverted;
-
- /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
- * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
- * most significant bit (with weight 2**N) implicit.
- */
- /* Special case for DIVISOR_LIMB == 100...000. */
- if( !(divisor_limb << 1) )
- divisor_limb_inverted = ~(mpi_limb_t) 0;
- else
- udiv_qrnnd(divisor_limb_inverted, dummy,
- -divisor_limb, 0, divisor_limb);
-
- i = dividend_size - 1;
- r = dividend_ptr[i];
-
- if( r >= divisor_limb )
- r = 0;
- else
- quot_ptr[i--] = 0;
-
- for( ; i >= 0; i-- ) {
- n0 = dividend_ptr[i];
- UDIV_QRNND_PREINV( quot_ptr[i], r, r,
- n0, divisor_limb, divisor_limb_inverted);
- }
- return r;
- }
- }
- else {
- if(UDIV_NEEDS_NORMALIZATION) {
- int normalization_steps;
-
- count_leading_zeros (normalization_steps, divisor_limb);
- if( normalization_steps ) {
- divisor_limb <<= normalization_steps;
-
- n1 = dividend_ptr[dividend_size - 1];
- r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps);
-
- /* Possible optimization:
- * if (r == 0
- * && divisor_limb > ((n1 << normalization_steps)
- * | (dividend_ptr[dividend_size - 2] >> ...)))
- * ...one division less...
- */
- for( i = dividend_size - 2; i >= 0; i--) {
- n0 = dividend_ptr[i];
- udiv_qrnnd (quot_ptr[i + 1], r, r,
- ((n1 << normalization_steps)
- | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))),
- divisor_limb);
- n1 = n0;
- }
- udiv_qrnnd (quot_ptr[0], r, r,
- n1 << normalization_steps,
- divisor_limb);
- return r >> normalization_steps;
- }
- }
- /* No normalization needed, either because udiv_qrnnd doesn't require
- * it, or because DIVISOR_LIMB is already normalized. */
- i = dividend_size - 1;
- r = dividend_ptr[i];
-
- if(r >= divisor_limb)
- r = 0;
- else
- quot_ptr[i--] = 0;
-
- for(; i >= 0; i--) {
- n0 = dividend_ptr[i];
- udiv_qrnnd( quot_ptr[i], r, r, n0, divisor_limb );
- }
- return r;
- }
-}
-
-
diff --git a/mpi/mpih-mul.c b/mpi/mpih-mul.c
deleted file mode 100644
index b457a0b5..00000000
--- a/mpi/mpih-mul.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/* mpihelp-mul.c - MPI helper functions
- * Copyright (C) 1998 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"
-#include "longlong.h"
-
-
-
-#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
- do { \
- if( (size) < KARATSUBA_THRESHOLD ) \
- mul_n_basecase (prodp, up, vp, size); \
- else \
- mul_n (prodp, up, vp, size, tspace); \
- } while (0);
-
-#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \
- do { \
- if ((size) < KARATSUBA_THRESHOLD) \
- mpih_sqr_n_basecase (prodp, up, size); \
- else \
- mpih_sqr_n (prodp, up, size, tspace); \
- } while (0);
-
-
-
-
-/* Multiply the natural numbers u (pointed to by UP) and v (pointed to by VP),
- * both with SIZE limbs, and store the result at PRODP. 2 * SIZE limbs are
- * always stored. Return the most significant limb.
- *
- * Argument constraints:
- * 1. PRODP != UP and PRODP != VP, i.e. the destination
- * must be distinct from the multiplier and the multiplicand.
- *
- *
- * Handle simple cases with traditional multiplication.
- *
- * This is the most critical code of multiplication. All multiplies rely
- * on this, both small and huge. Small ones arrive here immediately. Huge
- * ones arrive here as this is the base case for Karatsuba's recursive
- * algorithm below.
- */
-
-static mpi_limb_t
-mul_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up,
- mpi_ptr_t vp, mpi_size_t size)
-{
- mpi_size_t i;
- mpi_limb_t cy;
- mpi_limb_t v_limb;
-
- /* Multiply by the first limb in V separately, as the result can be
- * stored (not added) to PROD. We also avoid a loop for zeroing. */
- v_limb = vp[0];
- if( v_limb <= 1 ) {
- if( v_limb == 1 )
- MPN_COPY( prodp, up, size );
- else
- MPN_ZERO( prodp, size );
- cy = 0;
- }
- else
- cy = mpihelp_mul_1( prodp, up, size, v_limb );
-
- prodp[size] = cy;
- prodp++;
-
- /* For each iteration in the outer loop, multiply one limb from
- * U with one limb from V, and add it to PROD. */
- for( i = 1; i < size; i++ ) {
- v_limb = vp[i];
- if( v_limb <= 1 ) {
- cy = 0;
- if( v_limb == 1 )
- cy = mpihelp_add_n(prodp, prodp, up, size);
- }
- else
- cy = mpihelp_addmul_1(prodp, up, size, v_limb);
-
- prodp[size] = cy;
- prodp++;
- }
-
- return cy;
-}
-
-
-static void
-mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp,
- mpi_size_t size, mpi_ptr_t tspace )
-{
- if( size & 1 ) {
- /* The size is odd, and the code below doesn't handle that.
- * Multiply the least significant (size - 1) limbs with a recursive
- * call, and handle the most significant limb of S1 and S2
- * separately.
- * A slightly faster way to do this would be to make the Karatsuba
- * code below behave as if the size were even, and let it check for
- * odd size in the end. I.e., in essence move this code to the end.
- * Doing so would save us a recursive call, and potentially make the
- * stack grow a lot less.
- */
- mpi_size_t esize = size - 1; /* even size */
- mpi_limb_t cy_limb;
-
- MPN_MUL_N_RECURSE( prodp, up, vp, esize, tspace );
- cy_limb = mpihelp_addmul_1( prodp + esize, up, esize, vp[esize] );
- prodp[esize + esize] = cy_limb;
- cy_limb = mpihelp_addmul_1( prodp + esize, vp, size, up[esize] );
- prodp[esize + size] = cy_limb;
- }
- else {
- /* Anatolij Alekseevich Karatsuba's divide-and-conquer algorithm.
- *
- * Split U in two pieces, U1 and U0, such that
- * U = U0 + U1*(B**n),
- * and V in V1 and V0, such that
- * V = V0 + V1*(B**n).
- *
- * UV is then computed recursively using the identity
- *
- * 2n n n n
- * UV = (B + B )U V + B (U -U )(V -V ) + (B + 1)U V
- * 1 1 1 0 0 1 0 0
- *
- * Where B = 2**BITS_PER_MP_LIMB.
- */
- mpi_size_t hsize = size >> 1;
- mpi_limb_t cy;
- int negflg;
-
- /* Product H. ________________ ________________
- * |_____U1 x V1____||____U0 x V0_____|
- * Put result in upper part of PROD and pass low part of TSPACE
- * as new TSPACE.
- */
- MPN_MUL_N_RECURSE(prodp + size, up + hsize, vp + hsize, hsize, tspace);
-
- /* Product M. ________________
- * |_(U1-U0)(V0-V1)_|
- */
- if( mpihelp_cmp(up + hsize, up, hsize) >= 0 ) {
- mpihelp_sub_n(prodp, up + hsize, up, hsize);
- negflg = 0;
- }
- else {
- mpihelp_sub_n(prodp, up, up + hsize, hsize);
- negflg = 1;
- }
- if( mpihelp_cmp(vp + hsize, vp, hsize) >= 0 ) {
- mpihelp_sub_n(prodp + hsize, vp + hsize, vp, hsize);
- negflg ^= 1;
- }
- else {
- mpihelp_sub_n(prodp + hsize, vp, vp + hsize, hsize);
- /* No change of NEGFLG. */
- }
- /* Read temporary operands from low part of PROD.
- * Put result in low part of TSPACE using upper part of TSPACE
- * as new TSPACE.
- */
- MPN_MUL_N_RECURSE(tspace, prodp, prodp + hsize, hsize, tspace + size);
-
- /* Add/copy product H. */
- MPN_COPY (prodp + hsize, prodp + size, hsize);
- cy = mpihelp_add_n( prodp + size, prodp + size,
- prodp + size + hsize, hsize);
-
- /* Add product M (if NEGFLG M is a negative number) */
- if(negflg)
- cy -= mpihelp_sub_n(prodp + hsize, prodp + hsize, tspace, size);
- else
- cy += mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size);
-
- /* Product L. ________________ ________________
- * |________________||____U0 x V0_____|
- * Read temporary operands from low part of PROD.
- * Put result in low part of TSPACE using upper part of TSPACE
- * as new TSPACE.
- */
- MPN_MUL_N_RECURSE(tspace, up, vp, hsize, tspace + size);
-
- /* Add/copy Product L (twice) */
-
- cy += mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size);
- if( cy )
- mpihelp_add_1(prodp + hsize + size, prodp + hsize + size, hsize, cy);
-
- MPN_COPY(prodp, tspace, hsize);
- cy = mpihelp_add_n(prodp + hsize, prodp + hsize, tspace + hsize, hsize);
- if( cy )
- mpihelp_add_1(prodp + size, prodp + size, size, 1);
- }
-}
-
-
-void
-mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size )
-{
- mpi_size_t i;
- mpi_limb_t cy_limb;
- mpi_limb_t v_limb;
-
- /* Multiply by the first limb in V separately, as the result can be
- * stored (not added) to PROD. We also avoid a loop for zeroing. */
- v_limb = up[0];
- if( v_limb <= 1 ) {
- if( v_limb == 1 )
- MPN_COPY( prodp, up, size );
- else
- MPN_ZERO(prodp, size);
- cy_limb = 0;
- }
- else
- cy_limb = mpihelp_mul_1( prodp, up, size, v_limb );
-
- prodp[size] = cy_limb;
- prodp++;
-
- /* For each iteration in the outer loop, multiply one limb from
- * U with one limb from V, and add it to PROD. */
- for( i=1; i < size; i++) {
- v_limb = up[i];
- if( v_limb <= 1 ) {
- cy_limb = 0;
- if( v_limb == 1 )
- cy_limb = mpihelp_add_n(prodp, prodp, up, size);
- }
- else
- cy_limb = mpihelp_addmul_1(prodp, up, size, v_limb);
-
- prodp[size] = cy_limb;
- prodp++;
- }
-}
-
-
-void
-mpih_sqr_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size, mpi_ptr_t tspace)
-{
- if( size & 1 ) {
- /* The size is odd, and the code below doesn't handle that.
- * Multiply the least significant (size - 1) limbs with a recursive
- * call, and handle the most significant limb of S1 and S2
- * separately.
- * A slightly faster way to do this would be to make the Karatsuba
- * code below behave as if the size were even, and let it check for
- * odd size in the end. I.e., in essence move this code to the end.
- * Doing so would save us a recursive call, and potentially make the
- * stack grow a lot less.
- */
- mpi_size_t esize = size - 1; /* even size */
- mpi_limb_t cy_limb;
-
- MPN_SQR_N_RECURSE( prodp, up, esize, tspace );
- cy_limb = mpihelp_addmul_1( prodp + esize, up, esize, up[esize] );
- prodp[esize + esize] = cy_limb;
- cy_limb = mpihelp_addmul_1( prodp + esize, up, size, up[esize] );
-
- prodp[esize + size] = cy_limb;
- }
- else {
- mpi_size_t hsize = size >> 1;
- mpi_limb_t cy;
-
- /* Product H. ________________ ________________
- * |_____U1 x U1____||____U0 x U0_____|
- * Put result in upper part of PROD and pass low part of TSPACE
- * as new TSPACE.
- */
- MPN_SQR_N_RECURSE(prodp + size, up + hsize, hsize, tspace);
-
- /* Product M. ________________
- * |_(U1-U0)(U0-U1)_|
- */
- if( mpihelp_cmp( up + hsize, up, hsize) >= 0 )
- mpihelp_sub_n( prodp, up + hsize, up, hsize);
- else
- mpihelp_sub_n (prodp, up, up + hsize, hsize);
-
- /* Read temporary operands from low part of PROD.
- * Put result in low part of TSPACE using upper part of TSPACE
- * as new TSPACE. */
- MPN_SQR_N_RECURSE(tspace, prodp, hsize, tspace + size);
-
- /* Add/copy product H */
- MPN_COPY(prodp + hsize, prodp + size, hsize);
- cy = mpihelp_add_n(prodp + size, prodp + size,
- prodp + size + hsize, hsize);
-
- /* Add product M (if NEGFLG M is a negative number). */
- cy -= mpihelp_sub_n (prodp + hsize, prodp + hsize, tspace, size);
-
- /* Product L. ________________ ________________
- * |________________||____U0 x U0_____|
- * Read temporary operands from low part of PROD.
- * Put result in low part of TSPACE using upper part of TSPACE
- * as new TSPACE. */
- MPN_SQR_N_RECURSE (tspace, up, hsize, tspace + size);
-
- /* Add/copy Product L (twice). */
- cy += mpihelp_add_n (prodp + hsize, prodp + hsize, tspace, size);
- if( cy )
- mpihelp_add_1(prodp + hsize + size, prodp + hsize + size,
- hsize, cy);
-
- MPN_COPY(prodp, tspace, hsize);
- cy = mpihelp_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize);
- if( cy )
- mpihelp_add_1 (prodp + size, prodp + size, size, 1);
- }
-}
-
-
-/* This should be made into an inline function in gmp.h. */
-void
-mpihelp_mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size)
-{
- /* FIXME: mpi_alloc_limb_space, secure arg is wrong! */
-
- if( up == vp ) {
- if( size < KARATSUBA_THRESHOLD )
- mpih_sqr_n_basecase( prodp, up, size );
- else {
- mpi_ptr_t tspace;
- tspace = mpi_alloc_limb_space( 2 * size, 0 );
- mpih_sqr_n( prodp, up, size, tspace );
- mpi_free_limb_space( tspace );
- }
- }
- else {
- if( size < KARATSUBA_THRESHOLD )
- mul_n_basecase( prodp, up, vp, size );
- else {
- mpi_ptr_t tspace;
- tspace = mpi_alloc_limb_space( 2 * size, 0 );
- mul_n (prodp, up, vp, size, tspace);
- mpi_free_limb_space( tspace );
- }
- }
-}
-
-
-/* Multiply the natural numbers u (pointed to by UP, with USIZE limbs)
- * and v (pointed to by VP, with VSIZE limbs), and store the result at
- * PRODP. USIZE + VSIZE limbs are always stored, but if the input
- * operands are normalized. Return the most significant limb of the
- * result.
- *
- * NOTE: The space pointed to by PRODP is overwritten before finished
- * with U and V, so overlap is an error.
- *
- * Argument constraints:
- * 1. USIZE >= VSIZE.
- * 2. PRODP != UP and PRODP != VP, i.e. the destination
- * must be distinct from the multiplier and the multiplicand.
- */
-
-mpi_limb_t
-mpihelp_mul( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize,
- mpi_ptr_t vp, mpi_size_t vsize)
-{
- mpi_ptr_t prod_endp = prodp + usize + vsize - 1;
- mpi_limb_t cy;
- mpi_ptr_t tspace;
-
- if( vsize < KARATSUBA_THRESHOLD ) {
- mpi_size_t i;
- mpi_limb_t v_limb;
-
- if( !vsize )
- return 0;
-
- /* Multiply by the first limb in V separately, as the result can be
- * stored (not added) to PROD. We also avoid a loop for zeroing. */
- v_limb = vp[0];
- if( v_limb <= 1 ) {
- if( v_limb == 1 )
- MPN_COPY( prodp, up, usize );
- else
- MPN_ZERO( prodp, usize );
- cy = 0;
- }
- else
- cy = mpihelp_mul_1( prodp, up, usize, v_limb );
-
- prodp[usize] = cy;
- prodp++;
-
- /* For each iteration in the outer loop, multiply one limb from
- * U with one limb from V, and add it to PROD. */
- for( i = 1; i < vsize; i++ ) {
- v_limb = vp[i];
- if( v_limb <= 1 ) {
- cy = 0;
- if( v_limb == 1 )
- cy = mpihelp_add_n(prodp, prodp, up, usize);
- }
- else
- cy = mpihelp_addmul_1(prodp, up, usize, v_limb);
-
- prodp[usize] = cy;
- prodp++;
- }
-
- return cy;
- }
-
- /* FIXME: mpi_alloc_limb_space, secure arg is wrong! */
- tspace = mpi_alloc_limb_space( 2 * vsize, 0 );
- MPN_MUL_N_RECURSE( prodp, up, vp, vsize, tspace );
-
- prodp += vsize;
- up += vsize;
- usize -= vsize;
- if( usize >= vsize ) {
- /* FIXME: mpi_alloc_limb_space, secure arg is wrong! */
- mpi_ptr_t tp = mpi_alloc_limb_space( 2 * vsize, 0 );
- do {
- MPN_MUL_N_RECURSE( tp, up, vp, vsize, tspace );
- cy = mpihelp_add_n( prodp, prodp, tp, vsize );
- mpihelp_add_1( prodp + vsize, tp + vsize, vsize, cy );
- prodp += vsize;
- up += vsize;
- usize -= vsize;
- } while( usize >= vsize );
- mpi_free_limb_space( tp );
- }
-
- if( usize ) {
- mpihelp_mul( tspace, vp, vsize, up, usize );
- cy = mpihelp_add_n( prodp, prodp, tspace, vsize);
- mpihelp_add_1( prodp + vsize, tspace + vsize, usize, cy );
- }
-
- mpi_free_limb_space( tspace );
- return *prod_endp;
-}
-
-
diff --git a/mpi/mpih-sub.c b/mpi/mpih-sub.c
deleted file mode 100644
index 7bfcddea..00000000
--- a/mpi/mpih-sub.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* mpihelp-sub.c - MPI helper functions
- * Copyright (C) 1998 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"
-
-#ifndef __GNUC__
-mpi_limb_t
-mpihelp_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb )
-{
- mpi_limb_t x;
-
- x = *s1_ptr++;
- s2_limb = x - s2_limb;
- *res_ptr++ = s2_limb;
- if( s2_limb > x ) {
- while( --s1_size ) {
- x = *s1_ptr++;
- *res_ptr++ = x - 1;
- if( x )
- goto leave;
- }
- return 1;
- }
-
- leave:
- if( res_ptr != s1_ptr ) {
- mpi_size_t i;
- for( i=0; i < s1_size-1; i++ )
- res_ptr[i] = s1_ptr[i];
- }
- return 0;
-}
-
-
-mpi_limb_t
-mpihelp_sub( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size)
-{
- mpi_limb_t cy = 0;
-
- if( s2_size )
- cy = mpihelp_sub_n(res_ptr, s1_ptr, s2_ptr, s2_size);
-
- if( s1_size - s2_size )
- cy = mpihelp_sub_1(res_ptr + s2_size, s1_ptr + s2_size,
- s1_size - s2_size, cy);
- return cy;
-}
-#endif
-
diff --git a/mpi/mpiutil.c b/mpi/mpiutil.c
deleted file mode 100644
index d90cd4d3..00000000
--- a/mpi/mpiutil.c
+++ /dev/null
@@ -1,374 +0,0 @@
-/* mpiutil.ac - Utility functions 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 <string.h>
-#include <assert.h>
-
-#include "mpi.h"
-#include "mpi-internal.h"
-#include "memory.h"
-#include "util.h"
-
-
-#ifdef M_DEBUG
- #undef mpi_alloc
- #undef mpi_alloc_secure
- #undef mpi_free
-#endif
-
-/****************
- * fixme: It was a bad idea to use the number of limbs to allocate
- * because on a alpha the limbs are large but we normally need
- * integers of n bits - So we should chnage this to bits (or bytes).
- *
- * But mpi_alloc is used in a lot of places :-)
- */
-MPI
-#ifdef M_DEBUG
-mpi_debug_alloc( unsigned nlimbs, const char *info )
-#else
-mpi_alloc( unsigned nlimbs )
-#endif
-{
- MPI a;
-
- if( DBG_MEMORY )
- log_debug("mpi_alloc(%u)\n", nlimbs*BITS_PER_MPI_LIMB );
- #ifdef M_DEBUG
- a = m_debug_alloc( sizeof *a, info );
- a->d = nlimbs? mpi_debug_alloc_limb_space( nlimbs, 0, info ) : NULL;
- #else
- a = m_alloc( sizeof *a );
- a->d = nlimbs? mpi_alloc_limb_space( nlimbs, 0 ) : NULL;
- #endif
- a->alloced = nlimbs;
- a->nlimbs = 0;
- a->sign = 0;
- a->flags = 0;
- a->nbits = 0;
- return a;
-}
-
-void
-mpi_m_check( MPI a )
-{
- m_check(a);
- m_check(a->d);
-}
-
-MPI
-#ifdef M_DEBUG
-mpi_debug_alloc_secure( unsigned nlimbs, const char *info )
-#else
-mpi_alloc_secure( unsigned nlimbs )
-#endif
-{
- MPI a;
-
- if( DBG_MEMORY )
- log_debug("mpi_alloc_secure(%u)\n", nlimbs*BITS_PER_MPI_LIMB );
- #ifdef M_DEBUG
- a = m_debug_alloc( sizeof *a, info );
- a->d = nlimbs? mpi_debug_alloc_limb_space( nlimbs, 1, info ) : NULL;
- #else
- a = m_alloc( sizeof *a );
- a->d = nlimbs? mpi_alloc_limb_space( nlimbs, 1 ) : NULL;
- #endif
- a->alloced = nlimbs;
- a->flags = 1;
- a->nlimbs = 0;
- a->sign = 0;
- a->nbits = 0;
- return a;
-}
-
-
-mpi_ptr_t
-#ifdef M_DEBUG
-mpi_debug_alloc_limb_space( unsigned nlimbs, int secure, const char *info )
-#else
-mpi_alloc_limb_space( unsigned nlimbs, int secure )
-#endif
-{
- size_t len = nlimbs * sizeof(mpi_limb_t);
-
- if( DBG_MEMORY )
- log_debug("mpi_alloc_limb_space(%u)\n", (unsigned)len*8 );
- #ifdef M_DEBUG
- return secure? m_debug_alloc_secure(len, info):m_debug_alloc( len, info );
- #else
- return secure? m_alloc_secure( len ):m_alloc( len );
- #endif
-}
-
-void
-#ifdef M_DEBUG
-mpi_debug_free_limb_space( mpi_ptr_t a, const char *info )
-#else
-mpi_free_limb_space( mpi_ptr_t a )
-#endif
-{
- if( !a )
- return;
- if( DBG_MEMORY )
- log_debug("mpi_free_limb_space of size %lu\n", (ulong)m_size(a)*8 );
- m_free(a);
-}
-
-
-void
-mpi_assign_limb_space( MPI a, mpi_ptr_t ap, unsigned nlimbs )
-{
- mpi_free_limb_space(a->d);
- a->d = ap;
- a->alloced = nlimbs;
-}
-
-
-
-/****************
- * Resize the array of A to NLIMBS. the additional space is cleared
- * (set to 0) [done by m_realloc()]
- */
-void
-#ifdef M_DEBUG
-mpi_debug_resize( MPI a, unsigned nlimbs, const char *info )
-#else
-mpi_resize( MPI a, unsigned nlimbs )
-#endif
-{
- if( nlimbs <= a->alloced )
- return; /* no need to do it */
- /* FIXME: add realloc_secure based on a->secure */
- #ifdef M_DEBUG
- if( a->d )
- a->d = m_debug_realloc(a->d, nlimbs * sizeof(mpi_limb_t), info );
- else
- a->d = m_debug_alloc_clear( nlimbs * sizeof(mpi_limb_t), info );
- #else
- if( a->d )
- a->d = m_realloc(a->d, nlimbs * sizeof(mpi_limb_t) );
- else
- a->d = m_alloc_clear( nlimbs * sizeof(mpi_limb_t) );
- #endif
- a->alloced = nlimbs;
-}
-
-void
-mpi_clear( MPI a )
-{
- a->nlimbs = 0;
- a->nbits = 0;
- a->flags = 0;
-}
-
-
-void
-#ifdef M_DEBUG
-mpi_debug_free( MPI a, const char *info )
-#else
-mpi_free( MPI a )
-#endif
-{
- if( !a )
- return;
- if( DBG_MEMORY )
- log_debug("mpi_free\n" );
- if( a->flags & 4 )
- m_free( a->d );
- else {
- #ifdef M_DEBUG
- mpi_debug_free_limb_space(a->d, info);
- #else
- mpi_free_limb_space(a->d);
- #endif
- }
- if( a->flags & ~7 )
- log_bug("invalid flag value in mpi\n");
- m_free(a);
-}
-
-
-void
-mpi_set_secure( MPI a )
-{
- mpi_ptr_t ap, bp;
-
- if( (a->flags & 1) )
- return;
- a->flags |= 1;
- ap = a->d;
- if( !a->nlimbs ) {
- assert(!ap);
- return;
- }
- #ifdef M_DEBUG
- bp = mpi_debug_alloc_limb_space( a->nlimbs, 1, "set_secure" );
- #else
- bp = mpi_alloc_limb_space( a->nlimbs, 1 );
- #endif
- MPN_COPY( bp, ap, a->nlimbs );
- a->d = bp;
- #ifdef M_DEBUG
- mpi_debug_free_limb_space(ap, "set_secure");
- #else
- mpi_free_limb_space(ap);
- #endif
-}
-
-
-MPI
-mpi_set_opaque( MPI a, void *p, int len )
-{
- if( !a ) {
- #ifdef M_DEBUG
- a = mpi_debug_alloc(0,"alloc_opaque");
- #else
- a = mpi_alloc(0);
- #endif
- }
-
- if( a->flags & 4 )
- m_free( a->d );
- else {
- #ifdef M_DEBUG
- mpi_debug_free_limb_space(a->d, "alloc_opaque");
- #else
- mpi_free_limb_space(a->d);
- #endif
- }
-
- a->d = p;
- a->alloced = 0;
- a->nlimbs = 0;
- a->nbits = len;
- a->flags = 4;
- return a;
-}
-
-
-void *
-mpi_get_opaque( MPI a, int *len )
-{
- if( !(a->flags & 4) )
- log_bug("mpi_get_opaque on normal mpi\n");
- if( len )
- *len = a->nbits;
- return a->d;
-}
-
-
-/****************
- * Note: This copy function should not interpret the MPI
- * but copy it transparently.
- */
-MPI
-#ifdef M_DEBUG
-mpi_debug_copy( MPI a, const char *info )
-#else
-mpi_copy( MPI a )
-#endif
-{
- int i;
- MPI b;
-
- if( a && (a->flags & 4) ) {
- void *p = m_is_secure(a->d)? m_alloc_secure( a->nbits )
- : m_alloc( a->nbits );
- memcpy( p, a->d, a->nbits );
- b = mpi_set_opaque( NULL, p, a->nbits );
- }
- else if( a ) {
- #ifdef M_DEBUG
- b = mpi_is_secure(a)? mpi_debug_alloc_secure( a->nlimbs, info )
- : mpi_debug_alloc( a->nlimbs, info );
- #else
- b = mpi_is_secure(a)? mpi_alloc_secure( a->nlimbs )
- : mpi_alloc( a->nlimbs );
- #endif
- b->nlimbs = a->nlimbs;
- b->sign = a->sign;
- b->flags = a->flags;
- b->nbits = a->nbits;
- for(i=0; i < b->nlimbs; i++ )
- b->d[i] = a->d[i];
- }
- else
- b = NULL;
- return b;
-}
-
-
-void
-mpi_set( MPI w, MPI u)
-{
- mpi_ptr_t wp, up;
- mpi_size_t usize = u->nlimbs;
- int usign = u->sign;
-
- RESIZE_IF_NEEDED(w, usize);
- wp = w->d;
- up = u->d;
- MPN_COPY( wp, up, usize );
- w->nlimbs = usize;
- w->nbits = u->nbits;
- w->flags = u->flags;
- w->sign = usign;
-}
-
-
-void
-mpi_set_ui( MPI w, unsigned long u)
-{
- RESIZE_IF_NEEDED(w, 1);
- w->d[0] = u;
- w->nlimbs = u? 1:0;
- w->sign = 0;
- w->nbits = 0;
- w->flags = 0;
-}
-
-
-MPI
-mpi_alloc_set_ui( unsigned long u)
-{
- #ifdef M_DEBUG
- MPI w = mpi_debug_alloc(1,"alloc_set_ui");
- #else
- MPI w = mpi_alloc(1);
- #endif
- w->d[0] = u;
- w->nlimbs = u? 1:0;
- w->sign = 0;
- return w;
-}
-
-
-void
-mpi_swap( MPI a, MPI b)
-{
- struct gcry_mpi tmp;
-
- tmp = *a; *a = *b; *b = tmp;
-}
-
diff --git a/mpi/pa7100/distfiles b/mpi/pa7100/distfiles
deleted file mode 100644
index fece9431..00000000
--- a/mpi/pa7100/distfiles
+++ /dev/null
@@ -1,3 +0,0 @@
-mpih-lshift.S
-mpih-rshift.S
-
diff --git a/mpi/pa7100/mpih-lshift.S b/mpi/pa7100/mpih-lshift.S
deleted file mode 100644
index e17e1b70..00000000
--- a/mpi/pa7100/mpih-lshift.S
+++ /dev/null
@@ -1,89 +0,0 @@
-/* hppa lshift
- * optimized for the PA7100, where is runs at 3.25 cycles/limb
- * Copyright (C) 1992, 1994 Free Software Foundation, Inc.
- * 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
- */
-
-
-
-/*******************
- * 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
-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,<= -5,%r24,L$rest
- vshd %r22,%r29,%r20
-
-L$loop ldws,mb -4(0,%r25),%r22
- stws,mb %r20,-4(0,%r26)
- vshd %r29,%r22,%r20
- ldws,mb -4(0,%r25),%r29
- stws,mb %r20,-4(0,%r26)
- vshd %r22,%r29,%r20
- ldws,mb -4(0,%r25),%r22
- stws,mb %r20,-4(0,%r26)
- vshd %r29,%r22,%r20
- ldws,mb -4(0,%r25),%r29
- stws,mb %r20,-4(0,%r26)
- addib,> -4,%r24,L$loop
- vshd %r22,%r29,%r20
-
-L$rest addib,= 4,%r24,L$end1
- nop
-L$eloop ldws,mb -4(0,%r25),%r22
- stws,mb %r20,-4(0,%r26)
- addib,<= -1,%r24,L$end2
- vshd %r29,%r22,%r20
- ldws,mb -4(0,%r25),%r29
- stws,mb %r20,-4(0,%r26)
- addib,> -1,%r24,L$eloop
- vshd %r22,%r29,%r20
-
-L$end1 stws,mb %r20,-4(0,%r26)
- vshd %r29,%r0,%r20
- bv 0(%r2)
- stw %r20,-4(0,%r26)
-L$end2 stws,mb %r20,-4(0,%r26)
-L$0004 vshd %r22,%r0,%r20
- bv 0(%r2)
- stw %r20,-4(0,%r26)
-
- .exit
- .procend
-
-
-
diff --git a/mpi/pa7100/mpih-rshift.S b/mpi/pa7100/mpih-rshift.S
deleted file mode 100644
index b409de04..00000000
--- a/mpi/pa7100/mpih-rshift.S
+++ /dev/null
@@ -1,85 +0,0 @@
-/* hppa rshift
- * optimized for the PA7100, where is runs at 3.25 cycles/limb
- * Copyright (C) 1992, 1994 Free Software Foundation, Inc.
- * 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
- */
-
-
-
-/*******************
- * 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
-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,<= -5,%r24,L$rrest
- vshd %r29,%r22,%r20
-
-L$roop ldws,ma 4(0,%r25),%r22
- stws,ma %r20,4(0,%r26)
- vshd %r22,%r29,%r20
- ldws,ma 4(0,%r25),%r29
- stws,ma %r20,4(0,%r26)
- vshd %r29,%r22,%r20
- ldws,ma 4(0,%r25),%r22
- stws,ma %r20,4(0,%r26)
- vshd %r22,%r29,%r20
- ldws,ma 4(0,%r25),%r29
- stws,ma %r20,4(0,%r26)
- addib,> -4,%r24,L$roop
- vshd %r29,%r22,%r20
-
-L$rrest addib,= 4,%r24,L$rend1
- nop
-L$eroop ldws,ma 4(0,%r25),%r22
- stws,ma %r20,4(0,%r26)
- addib,<= -1,%r24,L$rend2
- vshd %r22,%r29,%r20
- ldws,ma 4(0,%r25),%r29
- stws,ma %r20,4(0,%r26)
- addib,> -1,%r24,L$eroop
- vshd %r29,%r22,%r20
-
-L$rend1 stws,ma %r20,4(0,%r26)
- vshd %r0,%r29,%r20
- bv 0(%r2)
- stw %r20,0(0,%r26)
-L$rend2 stws,ma %r20,4(0,%r26)
-L$r004 vshd %r0,%r22,%r20
- bv 0(%r2)
- stw %r20,0(0,%r26)
-
- .exit
- .procend
-
-
diff --git a/mpi/power/distfiles b/mpi/power/distfiles
deleted file mode 100644
index e69de29b..00000000
--- a/mpi/power/distfiles
+++ /dev/null
diff --git a/mpi/powerpc32/distfiles b/mpi/powerpc32/distfiles
deleted file mode 100644
index af10d795..00000000
--- a/mpi/powerpc32/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-mpih-add1.S
-mpih-sub1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-syntax.h
-
diff --git a/mpi/powerpc32/mpih-add1.S b/mpi/powerpc32/mpih-add1.S
deleted file mode 100644
index a26de52a..00000000
--- a/mpi/powerpc32/mpih-add1.S
+++ /dev/null
@@ -1,136 +0,0 @@
-/* PowerPC-32 add_n -- Add two limb vectors of equal, non-zero length.
- *
- * Copyright (C) 1992, 1994, 1995, 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 "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_ptr_t s2_ptr, (r5)
- * mpi_size_t size) (r6)
- */
-
- .toc
- .extern mpihelp_add_n[DS]
- .extern .mpihelp_add_n
-.csect [PR]
- .align 2
- .globl mpihelp_add_n
- .globl .mpihelp_add_n
- .csect mpihelp_add_n[DS]
-mpihelp_add_n:
- .long .mpihelp_add_n, TOC[tc0], 0
- .csect [PR]
-.mpihelp_add_n:
- mtctr 6 # copy size into CTR
- lwz 8,0(4) # load least significant s1 limb
- lwz 0,0(5) # load least significant s2 limb
- addi 3,3,-4 # offset res_ptr, it is updated before used
- addc 7,0,8 # add least significant limbs, set cy
- bdz Lend # If done, skip loop
-Loop: lwzu 8,4(4) # load s1 limb and update s1_ptr
- lwzu 0,4(5) # load s2 limb and update s2_ptr
- stwu 7,4(3) # store previous limb in load latency slot
- adde 7,0,8 # add new limbs with cy, set cy
- bdnz Loop # decrement CTR and loop back
-Lend: stw 7,4(3) # store ultimate result limb
- li 3,0 # load cy into ...
- addze 3,3 # ... return value register
- blr
-
-#else
-/* Add two limb vectors of equal, non-zero length for PowerPC.
- Copyright (C) 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. 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"
-
-
-/* mp_limb_t mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr,
- mp_size_t size)
- Calculate s1+s2 and put result in res_ptr; return carry, 0 or 1. */
-
-/* Note on optimisation: This code is optimal for the 601. Almost every other
- possible 2-unrolled inner loop will not be. Also, watch out for the
- alignment... */
-
-EALIGN(mpihelp_add_n,3,0)
-/* Set up for loop below. */
- mtcrf 0x01,%r6
- srwi. %r7,%r6,1
- li %r10,0
- mtctr %r7
- bt 31,2f
-
-/* Clear the carry. */
- addic %r0,%r0,0
-/* Adjust pointers for loop. */
- addi %r3,%r3,-4
- addi %r4,%r4,-4
- addi %r5,%r5,-4
- b 0f
-
-2: lwz %r7,0(%r5)
- lwz %r6,0(%r4)
- addc %r6,%r6,%r7
- stw %r6,0(%r3)
- beq 1f
-
-/* The loop. */
-
-/* Align start of loop to an odd word boundary to guarantee that the
- last two words can be fetched in one access (for 601). */
-0: lwz %r9,4(%r4)
- lwz %r8,4(%r5)
- lwzu %r6,8(%r4)
- lwzu %r7,8(%r5)
- adde %r8,%r9,%r8
- stw %r8,4(%r3)
- adde %r6,%r6,%r7
- stwu %r6,8(%r3)
- bdnz 0b
-/* Return the carry. */
-1: addze %r3,%r10
- blr
-END(mpihelp_add_n)
-#endif
-
diff --git a/mpi/powerpc32/mpih-lshift.S b/mpi/powerpc32/mpih-lshift.S
deleted file mode 100644
index 683f799b..00000000
--- a/mpi/powerpc32/mpih-lshift.S
+++ /dev/null
@@ -1,198 +0,0 @@
-/* PowerPC-32 lshift
- *
- * Copyright (C) 1995, 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 "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (r3)
- * mpi_ptr_t up, (r4)
- * mpi_size_t usize, (r5)
- * unsigned cnt) (r6)
- */
-
- .toc
-.csect .text[PR]
- .align 2
- .globl mpihelp_lshift
- .globl .mpihelp_lshift
- .csect mpihelp_lshift[DS]
-mpihelp_lshift:
- .long .mpihelp_lshift, TOC[tc0], 0
- .csect .text[PR]
-.mpihelp_lshift:
- mtctr 5 # copy size into CTR
- slwi 0,5,2
- add 7,3,0 # make r7 point at end of res
- add 4,4,0 # make r4 point at end of s1
- subfic 8,6,32
- lwzu 11,-4(4) # load first s1 limb
- srw 3,11,8 # compute function return value
- bdz Lend1
-
-Loop: lwzu 10,-4(4)
- slw 9,11,6
- srw 12,10,8
- or 9,9,12
- stwu 9,-4(7)
- bdz Lend2
- lwzu 11,-4(4)
- slw 9,10,6
- srw 12,11,8
- or 9,9,12
- stwu 9,-4(7)
- bdnz Loop
-
-Lend1: slw 0,11,6
- stw 0,-4(7)
- blr
-
-Lend2: slw 0,10,6
- stw 0,-4(7)
- blr
-
-#else
-/* Shift a limb left, low level routine.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* mp_limb_t mpn_lshift (mp_ptr wp, mp_srcptr up, mp_size_t usize,
- unsigned int cnt) */
-
-EALIGN(mpihelp_lshift,3,0)
- mtctr %r5 # copy size into CTR
- cmplwi %cr0,%r5,16 # is size < 16
- slwi %r0,%r5,2
- add %r7,%r3,%r0 # make r7 point at end of res
- add %r4,%r4,%r0 # make r4 point at end of s1
- lwzu %r11,-4(%r4) # load first s1 limb
- subfic %r8,%r6,32
- srw %r3,%r11,%r8 # compute function return value
- bge %cr0,L(big) # branch if size >= 16
-
- bdz L(end1)
-
-0: lwzu %r10,-4(%r4)
- slw %r9,%r11,%r6
- srw %r12,%r10,%r8
- or %r9,%r9,%r12
- stwu %r9,-4(%r7)
- bdz L(end2)
- lwzu %r11,-4(%r4)
- slw %r9,%r10,%r6
- srw %r12,%r11,%r8
- or %r9,%r9,%r12
- stwu %r9,-4(%r7)
- bdnz 0b
-
-L(end1):slw %r0,%r11,%r6
- stw %r0,-4(%r7)
- blr
-
-
-/* Guaranteed not to succeed. */
-L(boom): tweq %r0,%r0
-
-/* We imitate a case statement, by using (yuk!) fixed-length code chunks,
- of size 4*12 bytes. We have to do this (or something) to make this PIC. */
-L(big): mflr %r9
- bltl- %cr0,L(boom) # Never taken, only used to set LR.
- slwi %r10,%r6,4
- mflr %r12
- add %r10,%r12,%r10
- slwi %r8,%r6,5
- add %r10,%r8,%r10
- mtctr %r10
- addi %r5,%r5,-1
- mtlr %r9
- bctr
-
-L(end2):slw %r0,%r10,%r6
- stw %r0,-4(%r7)
- blr
-
-#define DO_LSHIFT(n) \
- mtctr %r5; \
-0: lwzu %r10,-4(%r4); \
- slwi %r9,%r11,n; \
- inslwi %r9,%r10,n,32-n; \
- stwu %r9,-4(%r7); \
- bdz- L(end2); \
- lwzu %r11,-4(%r4); \
- slwi %r9,%r10,n; \
- inslwi %r9,%r11,n,32-n; \
- stwu %r9,-4(%r7); \
- bdnz 0b; \
- b L(end1)
-
- DO_LSHIFT(1)
- DO_LSHIFT(2)
- DO_LSHIFT(3)
- DO_LSHIFT(4)
- DO_LSHIFT(5)
- DO_LSHIFT(6)
- DO_LSHIFT(7)
- DO_LSHIFT(8)
- DO_LSHIFT(9)
- DO_LSHIFT(10)
- DO_LSHIFT(11)
- DO_LSHIFT(12)
- DO_LSHIFT(13)
- DO_LSHIFT(14)
- DO_LSHIFT(15)
- DO_LSHIFT(16)
- DO_LSHIFT(17)
- DO_LSHIFT(18)
- DO_LSHIFT(19)
- DO_LSHIFT(20)
- DO_LSHIFT(21)
- DO_LSHIFT(22)
- DO_LSHIFT(23)
- DO_LSHIFT(24)
- DO_LSHIFT(25)
- DO_LSHIFT(26)
- DO_LSHIFT(27)
- DO_LSHIFT(28)
- DO_LSHIFT(29)
- DO_LSHIFT(30)
- DO_LSHIFT(31)
-
-END(mpihelp_lshift)
-#endif
diff --git a/mpi/powerpc32/mpih-mul1.S b/mpi/powerpc32/mpih-mul1.S
deleted file mode 100644
index 24193adb..00000000
--- a/mpi/powerpc32/mpih-mul1.S
+++ /dev/null
@@ -1,119 +0,0 @@
-/* PowerPC-32 mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- *
- * Copyright (C) 1993, 1994, 1995, 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 "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_size_t s1_size, (r5)
- * mpi_limb_t s2_limb) (r6)
- *
- * This is a fairly straightforward implementation. The timing of the PC601
- * is hard to understand, so I will wait to optimize this until I have some
- * hardware to play with.
- *
- * The code trivially generalizes to 64 bit limbs for the PC620.
- */
-
- .toc
- .csect .mpihelp_mul_1[PR]
- .align 2
- .globl mpihelp_mul_1
- .globl .mpihelp_mul_1
- .csect mpihelp_mul_1[DS]
-mpihelp_mul_1:
- .long .mpihelp_mul_1[PR], TOC[tc0], 0
- .csect .mpihelp_mul_1[PR]
-.mpihelp_mul_1:
- mtctr 5
-
- lwz 0,0(4)
- mullw 7,0,6
- mulhwu 10,0,6
- addi 3,3,-4 # adjust res_ptr
- addic 5,5,0 # clear cy with dummy insn
- bdz Lend
-
-Loop: lwzu 0,4(4)
- stwu 7,4(3)
- mullw 8,0,6
- adde 7,8,10
- mulhwu 10,0,6
- bdnz Loop
-
-Lend: stw 7,4(3)
- addze 3,10
- blr
-
-#else
-/* Multiply a limb vector by a limb, for PowerPC.
- Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-/* mp_limb_t mpn_mul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
- mp_size_t s1_size, mp_limb_t s2_limb)
- Calculate s1*s2 and put result in res_ptr; return carry. */
-
-ENTRY(mpihelp_mul_1)
- mtctr %r5
-
- lwz %r0,0(%r4)
- mullw %r7,%r0,%r6
- mulhwu %r10,%r0,%r6
- addi %r3,%r3,-4 # adjust res_ptr
- addic %r5,%r5,0 # clear cy with dummy insn
- bdz 1f
-
-0: lwzu %r0,4(%r4)
- stwu %r7,4(%r3)
- mullw %r8,%r0,%r6
- adde %r7,%r8,%r10
- mulhwu %r10,%r0,%r6
- bdnz 0b
-
-1: stw %r7,4(%r3)
- addze %r3,%r10
- blr
-END(mpihelp_mul_1)
-#endif
diff --git a/mpi/powerpc32/mpih-mul2.S b/mpi/powerpc32/mpih-mul2.S
deleted file mode 100644
index 185fed90..00000000
--- a/mpi/powerpc32/mpih-mul2.S
+++ /dev/null
@@ -1,127 +0,0 @@
-/* PowerPC-32 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1995, 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 "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_size_t s1_size, (r5)
- * mpi_limb_t s2_limb) (r6)
- *
- * This is a fairly straightforward implementation. The timing of the PC601
- * is hard to understand, so I will wait to optimize this until I have some
- * hardware to play with.
- *
- * The code trivially generalizes to 64 bit limbs for the PC620.
- */
-
-
- .toc
- .csect .mpihelp_addmul_1[PR]
- .align 2
- .globl mpihelp_addmul_1
- .globl .mpihelp_addmul_1
- .csect mpihelp_addmul_1[DS]
-mpihelp_addmul_1:
- .long .mpihelp_addmul_1[PR], TOC[tc0], 0
- .csect .mpihelp_addmul_1[PR]
-.mpihelp_addmul_1:
- mtctr 5
-
- lwz 0,0(4)
- mullw 7,0,6
- mulhwu 10,0,6
- lwz 9,0(3)
- addc 8,7,9
- addi 3,3,-4
- bdz Lend
-
-Loop: lwzu 0,4(4)
- stwu 8,4(3)
- mullw 8,0,6
- adde 7,8,10
- mulhwu 10,0,6
- lwz 9,4(3)
- addze 10,10
- addc 8,7,9
- bdnz Loop
-
-Lend: stw 8,4(3)
- addze 3,10
- blr
-
-#else
-/* Multiply a limb vector by a single limb, for PowerPC.
- Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-/* mp_limb_t mpn_addmul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
- mp_size_t s1_size, mp_limb_t s2_limb)
- Calculate res+s1*s2 and put result back in res; return carry. */
-ENTRY(mpihelp_addmul_1)
- mtctr %r5
-
- lwz %r0,0(%r4)
- mullw %r7,%r0,%r6
- mulhwu %r10,%r0,%r6
- lwz %r9,0(%r3)
- addc %r8,%r7,%r9
- addi %r3,%r3,-4 /* adjust res_ptr */
- bdz 1f
-
-0: lwzu %r0,4(%r4)
- stwu %r8,4(%r3)
- mullw %r8,%r0,%r6
- adde %r7,%r8,%r10
- mulhwu %r10,%r0,%r6
- lwz %r9,4(%r3)
- addze %r10,%r10
- addc %r8,%r7,%r9
- bdnz 0b
-
-1: stw %r8,4(%r3)
- addze %r3,%r10
- blr
-END(mpihelp_addmul_1)
-#endif
diff --git a/mpi/powerpc32/mpih-mul3.S b/mpi/powerpc32/mpih-mul3.S
deleted file mode 100644
index e6b7cf5c..00000000
--- a/mpi/powerpc32/mpih-mul3.S
+++ /dev/null
@@ -1,130 +0,0 @@
-/* PowerPC-32 submul_1 -- Multiply a limb vector with a limb and subtract
- * the result from a second limb vector.
- *
- * Copyright (C) 1995, 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 "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_size_t s1_size, (r5)
- * mpi_limb_t s2_limb) (r6)
- *
- * This is a fairly straightforward implementation. The timing of the PC601
- * is hard to understand, so I will wait to optimize this until I have some
- * hardware to play with.
- *
- * The code trivially generalizes to 64 bit limbs for the PC620.
- */
-
- .toc
- .csect .mpihelp_submul_1[PR]
- .align 2
- .globl mpihelp_submul_1
- .globl .mpihelp_submul_1
- .csect mpihelp_submul_1[DS]
-mpihelp_submul_1:
- .long .mpihelp_submul_1[PR], TOC[tc0], 0
- .csect .mpihelp_submul_1[PR]
-.mpihelp_submul_1:
- mtctr 5
-
- lwz 0,0(4)
- mullw 7,0,6
- mulhwu 10,0,6
- lwz 9,0(3)
- subfc 8,7,9
- addc 7,7,8 # invert cy (r7 is junk)
- addi 3,3,-4
- bdz Lend
-
-Loop: lwzu 0,4(4)
- stwu 8,4(3)
- mullw 8,0,6
- adde 7,8,10
- mulhwu 10,0,6
- lwz 9,4(3)
- addze 10,10
- subfc 8,7,9
- addc 7,7,8 # invert cy (r7 is junk)
- bdnz Loop
-
-Lend: stw 8,4(3)
- addze 3,10
- blr
-
-#else
-/* Multiply a limb vector by a single limb, for PowerPC.
- Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* mp_limb_t mpn_submul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
- mp_size_t s1_size, mp_limb_t s2_limb)
- Calculate res-s1*s2 and put result back in res; return carry. */
-
-ENTRY(mpihelp_submul_1)
- mtctr %r5
-
- lwz %r0,0(%r4)
- mullw %r7,%r0,%r6
- mulhwu %r10,%r0,%r6
- lwz %r9,0(%r3)
- subf %r8,%r7,%r9
- addc %r7,%r7,%r8 # invert cy (r7 is junk)
- addi %r3,%r3,-4 # adjust res_ptr
- bdz 1f
-
-0: lwzu %r0,4(%r4)
- stwu %r8,4(%r3)
- mullw %r8,%r0,%r6
- adde %r7,%r8,%r10
- mulhwu %r10,%r0,%r6
- lwz %r9,4(%r3)
- addze %r10,%r10
- subf %r8,%r7,%r9
- addc %r7,%r7,%r8 # invert cy (r7 is junk)
- bdnz 0b
-
-1: stw %r8,4(%r3)
- addze %r3,%r10
- blr
-END(mpihelp_submul_1)
-#endif
diff --git a/mpi/powerpc32/mpih-rshift.S b/mpi/powerpc32/mpih-rshift.S
deleted file mode 100644
index 78732b9e..00000000
--- a/mpi/powerpc32/mpih-rshift.S
+++ /dev/null
@@ -1,131 +0,0 @@
-/* PowerPC-32 rshift
- *
- * Copyright (C) 1995, 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 "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (r3)
- * mpi_ptr_t up, (r4)
- * mpi_size_t usize, (r5)
- * unsigned cnt) (r6)
- */
-
- .toc
-.csect .text[PR]
- .align 2
- .globl mpihelp_rshift
- .globl .mpihelp_rshift
- .csect mpihelp_rshift[DS]
-mpihelp_rshift:
- .long .mpihelp_rshift, TOC[tc0], 0
- .csect .text[PR]
-.mpihelp_rshift:
- mtctr 5 # copy size into CTR
- addi 7,3,-4 # move adjusted res_ptr to free return reg
- subfic 8,6,32
- lwz 11,0(4) # load first s1 limb
- slw 3,11,8 # compute function return value
- bdz Lend1
-
-Loop: lwzu 10,4(4)
- srw 9,11,6
- slw 12,10,8
- or 9,9,12
- stwu 9,4(7)
- bdz Lend2
- lwzu 11,4(4)
- srw 9,10,6
- slw 12,11,8
- or 9,9,12
- stwu 9,4(7)
- bdnz Loop
-
-Lend1: srw 0,11,6
- stw 0,4(7)
- blr
-
-Lend2: srw 0,10,6
- stw 0,4(7)
- blr
-
-#else
-/* Shift a limb right, low level routine.
- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-/* INPUT PARAMETERS
- res_ptr r3
- s1_ptr r4
- size r5
- cnt r6 */
-
-ENTRY(mpihelp_rshift)
- mtctr 5 # copy size into CTR
- addi 7,3,-4 # move adjusted res_ptr to free return reg
- subfic 8,6,32
- lwz 11,0(4) # load first s1 limb
- slw 3,11,8 # compute function return value
- bdz 1f
-
-0: lwzu 10,4(4)
- srw 9,11,6
- slw 12,10,8
- or 9,9,12
- stwu 9,4(7)
- bdz 2f
- lwzu 11,4(4)
- srw 9,10,6
- slw 12,11,8
- or 9,9,12
- stwu 9,4(7)
- bdnz 0b
-
-1: srw 0,11,6
- stw 0,4(7)
- blr
-
-2: srw 0,10,6
- stw 0,4(7)
- blr
-END(mpihelp_rshift)
-#endif
diff --git a/mpi/powerpc32/mpih-sub1.S b/mpi/powerpc32/mpih-sub1.S
deleted file mode 100644
index cb87cc70..00000000
--- a/mpi/powerpc32/mpih-sub1.S
+++ /dev/null
@@ -1,132 +0,0 @@
-/* PowerPC-32 sub_n -- Subtract two limb vectors of the same length > 0
- * and store difference in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 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 "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_ptr_t s2_ptr, (r5)
- * mpi_size_t size) (r6)
- */
-
- .toc
- .extern mpihelp_sub_n[DS]
- .extern .mpihelp_sub_n
-.csect [PR]
- .align 2
- .globl mpihelp_sub_n
- .globl .mpihelp_sub_n
- .csect mpihelp_sub_n[DS]
-mpihelp_sub_n:
- .long .mpihelp_sub_n, TOC[tc0], 0
- .csect [PR]
-.mpihelp_sub_n:
- mtctr 6 # copy size into CTR
- lwz 8,0(4) # load least significant s1 limb
- lwz 0,0(5) # load least significant s2 limb
- addi 3,3,-4 # offset res_ptr, it is updated before used
- subfc 7,0,8 # add least significant limbs, set cy
- bdz Lend # If done, skip loop
-Loop: lwzu 8,4(4) # load s1 limb and update s1_ptr
- lwzu 0,4(5) # load s2 limb and update s2_ptr
- stwu 7,4(3) # store previous limb in load latency slot
- subfe 7,0,8 # add new limbs with cy, set cy
- bdnz Loop # decrement CTR and loop back
-Lend: stw 7,4(3) # store ultimate result limb
- subfe 3,0,0 # load !cy into ...
- subfic 3,3,0 # ... return value register
- blr
-
-#else
-/* Subtract two limb vectors of equal, non-zero length for PowerPC.
- Copyright (C) 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* mp_limb_t mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr,
- mp_size_t size)
- Calculate s1-s2 and put result in res_ptr; return borrow, 0 or 1. */
-
-/* Note on optimisation: This code is optimal for the 601. Almost every other
- possible 2-unrolled inner loop will not be. Also, watch out for the
- alignment... */
-
-EALIGN(mpihelp_sub_n,3,1)
-/* Set up for loop below. */
- mtcrf 0x01,%r6
- srwi. %r7,%r6,1
- mtctr %r7
- bt 31,2f
-
-/* Set the carry (clear the borrow). */
- subfc %r0,%r0,%r0
-/* Adjust pointers for loop. */
- addi %r3,%r3,-4
- addi %r4,%r4,-4
- addi %r5,%r5,-4
- b 0f
-
-2: lwz %r7,0(%r5)
- lwz %r6,0(%r4)
- subfc %r6,%r7,%r6
- stw %r6,0(%r3)
- beq 1f
-
-/* Align start of loop to an odd word boundary to guarantee that the
- last two words can be fetched in one access (for 601). This turns
- out to be important. */
-0:
- lwz %r9,4(%r4)
- lwz %r8,4(%r5)
- lwzu %r6,8(%r4)
- lwzu %r7,8(%r5)
- subfe %r8,%r8,%r9
- stw %r8,4(%r3)
- subfe %r6,%r7,%r6
- stwu %r6,8(%r3)
- bdnz 0b
-/* Return the borrow. */
-1: subfe %r3,%r3,%r3
- neg %r3,%r3
- blr
-END(mpihelp_sub_n)
-#endif
diff --git a/mpi/powerpc32/syntax.h b/mpi/powerpc32/syntax.h
deleted file mode 100644
index 19f79727..00000000
--- a/mpi/powerpc32/syntax.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* gmp2-2.0.2-ppc/mpn/powerpc-linux/syntax.h Tue Oct 6 19:27:01 1998 */
-/* From glibc's sysdeps/unix/sysv/linux/powerpc/sysdep.h */
-
-/* Copyright (C) 1992, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-#define USE_PPC_PATCHES 1
-
-/* This seems to always be the case on PPC. */
-#define ALIGNARG(log2) log2
-/* For ELF we need the `.type' directive to make shared libs work right. */
-#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg;
-#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
-#define ASM_GLOBAL_DIRECTIVE .globl
-
-#ifdef __STDC__
-# define C_LABEL(name) C_SYMBOL_NAME(name)##:
-#else
-# define C_LABEL(name) C_SYMBOL_NAME(name)/**/:
-#endif
-
-#ifdef __STDC__
-# define L(body) .L##body
-#else
-# define L(body) .L/**/body
-#endif
-
-/* No profiling of gmp's assembly for now... */
-#define CALL_MCOUNT /* no profiling */
-
-#define ENTRY(name) \
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
- ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
- .align ALIGNARG(2); \
- C_LABEL(name) \
- CALL_MCOUNT
-
-#define EALIGN_W_0 /* No words to insert. */
-#define EALIGN_W_1 nop
-#define EALIGN_W_2 nop;nop
-#define EALIGN_W_3 nop;nop;nop
-#define EALIGN_W_4 EALIGN_W_3;nop
-#define EALIGN_W_5 EALIGN_W_4;nop
-#define EALIGN_W_6 EALIGN_W_5;nop
-#define EALIGN_W_7 EALIGN_W_6;nop
-
-/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes
- past a 2^align boundary. */
-#define EALIGN(name, alignt, words) \
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
- ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
- .align ALIGNARG(alignt); \
- EALIGN_W_##words; \
- C_LABEL(name)
-
-#undef END
-#define END(name) \
- ASM_SIZE_DIRECTIVE(name)
-
diff --git a/mpi/powerpc64/distfiles b/mpi/powerpc64/distfiles
deleted file mode 100644
index e69de29b..00000000
--- a/mpi/powerpc64/distfiles
+++ /dev/null
diff --git a/mpi/sparc32/distfiles b/mpi/sparc32/distfiles
deleted file mode 100644
index 95ff4288..00000000
--- a/mpi/sparc32/distfiles
+++ /dev/null
@@ -1,6 +0,0 @@
-
-mpih-lshift.S
-mpih-rshift.S
-mpih-add1.S
-udiv.S
-
diff --git a/mpi/sparc32/mpih-add1.S b/mpi/sparc32/mpih-add1.S
deleted file mode 100644
index b90d9d60..00000000
--- a/mpi/sparc32/mpih-add1.S
+++ /dev/null
@@ -1,238 +0,0 @@
-/* SPARC _add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1995, 1996, 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
- */
-
-
-
-/*******************
- * 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)
- */
-
-! INPUT PARAMETERS
-#define res_ptr %o0
-#define s1_ptr %o1
-#define s2_ptr %o2
-#define size %o3
-
-#include "sysdep.h"
-
- .text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_add_n)
-C_SYMBOL_NAME(mpihelp_add_n):
- xor s2_ptr,res_ptr,%g1
- andcc %g1,4,%g0
- bne L1 ! branch if alignment differs
- nop
-! ** V1a **
-L0: andcc res_ptr,4,%g0 ! res_ptr unaligned? Side effect: cy=0
- be L_v1 ! if no, branch
- nop
-/* Add least significant limb separately to align res_ptr and s2_ptr */
- ld [s1_ptr],%g4
- add s1_ptr,4,s1_ptr
- ld [s2_ptr],%g2
- add s2_ptr,4,s2_ptr
- add size,-1,size
- addcc %g4,%g2,%o4
- st %o4,[res_ptr]
- add res_ptr,4,res_ptr
-L_v1: addx %g0,%g0,%o4 ! save cy in register
- cmp size,2 ! if size < 2 ...
- bl Lend2 ! ... branch to tail code
- subcc %g0,%o4,%g0 ! restore cy
-
- ld [s1_ptr+0],%g4
- addcc size,-10,size
- ld [s1_ptr+4],%g1
- ldd [s2_ptr+0],%g2
- blt Lfin1
- subcc %g0,%o4,%g0 ! restore cy
-/* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop1: addxcc %g4,%g2,%o4
- ld [s1_ptr+8],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+12],%g1
- ldd [s2_ptr+8],%g2
- std %o4,[res_ptr+0]
- addxcc %g4,%g2,%o4
- ld [s1_ptr+16],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+20],%g1
- ldd [s2_ptr+16],%g2
- std %o4,[res_ptr+8]
- addxcc %g4,%g2,%o4
- ld [s1_ptr+24],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+28],%g1
- ldd [s2_ptr+24],%g2
- std %o4,[res_ptr+16]
- addxcc %g4,%g2,%o4
- ld [s1_ptr+32],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+36],%g1
- ldd [s2_ptr+32],%g2
- std %o4,[res_ptr+24]
- addx %g0,%g0,%o4 ! save cy in register
- addcc size,-8,size
- add s1_ptr,32,s1_ptr
- add s2_ptr,32,s2_ptr
- add res_ptr,32,res_ptr
- bge Loop1
- subcc %g0,%o4,%g0 ! restore cy
-
-Lfin1: addcc size,8-2,size
- blt Lend1
- subcc %g0,%o4,%g0 ! restore cy
-/* Add blocks of 2 limbs until less than 2 limbs remain */
-Loope1: addxcc %g4,%g2,%o4
- ld [s1_ptr+8],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+12],%g1
- ldd [s2_ptr+8],%g2
- std %o4,[res_ptr+0]
- addx %g0,%g0,%o4 ! save cy in register
- addcc size,-2,size
- add s1_ptr,8,s1_ptr
- add s2_ptr,8,s2_ptr
- add res_ptr,8,res_ptr
- bge Loope1
- subcc %g0,%o4,%g0 ! restore cy
-Lend1: addxcc %g4,%g2,%o4
- addxcc %g1,%g3,%o5
- std %o4,[res_ptr+0]
- addx %g0,%g0,%o4 ! save cy in register
-
- andcc size,1,%g0
- be Lret1
- subcc %g0,%o4,%g0 ! restore cy
-/* Add last limb */
- ld [s1_ptr+8],%g4
- ld [s2_ptr+8],%g2
- addxcc %g4,%g2,%o4
- st %o4,[res_ptr+8]
-
-Lret1: retl
- addx %g0,%g0,%o0 ! return carry-out from most sign. limb
-
-L1: xor s1_ptr,res_ptr,%g1
- andcc %g1,4,%g0
- bne L2
- nop
-! ** V1b **
- mov s2_ptr,%g1
- mov s1_ptr,s2_ptr
- b L0
- mov %g1,s1_ptr
-
-! ** V2 **
-/* If we come here, the alignment of s1_ptr and res_ptr as well as the
- alignment of s2_ptr and res_ptr differ. Since there are only two ways
- things can be aligned (that we care about) we now know that the alignment
- of s1_ptr and s2_ptr are the same. */
-
-L2: cmp size,1
- be Ljone
- nop
- andcc s1_ptr,4,%g0 ! s1_ptr unaligned? Side effect: cy=0
- be L_v2 ! if no, branch
- nop
-/* Add least significant limb separately to align s1_ptr and s2_ptr */
- ld [s1_ptr],%g4
- add s1_ptr,4,s1_ptr
- ld [s2_ptr],%g2
- add s2_ptr,4,s2_ptr
- add size,-1,size
- addcc %g4,%g2,%o4
- st %o4,[res_ptr]
- add res_ptr,4,res_ptr
-
-L_v2: addx %g0,%g0,%o4 ! save cy in register
- addcc size,-8,size
- blt Lfin2
- subcc %g0,%o4,%g0 ! restore cy
-/* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop2: ldd [s1_ptr+0],%g2
- ldd [s2_ptr+0],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+0]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+4]
- ldd [s1_ptr+8],%g2
- ldd [s2_ptr+8],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+8]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+12]
- ldd [s1_ptr+16],%g2
- ldd [s2_ptr+16],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+16]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+20]
- ldd [s1_ptr+24],%g2
- ldd [s2_ptr+24],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+24]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+28]
- addx %g0,%g0,%o4 ! save cy in register
- addcc size,-8,size
- add s1_ptr,32,s1_ptr
- add s2_ptr,32,s2_ptr
- add res_ptr,32,res_ptr
- bge Loop2
- subcc %g0,%o4,%g0 ! restore cy
-
-Lfin2: addcc size,8-2,size
- blt Lend2
- subcc %g0,%o4,%g0 ! restore cy
-Loope2: ldd [s1_ptr+0],%g2
- ldd [s2_ptr+0],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+0]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+4]
- addx %g0,%g0,%o4 ! save cy in register
- addcc size,-2,size
- add s1_ptr,8,s1_ptr
- add s2_ptr,8,s2_ptr
- add res_ptr,8,res_ptr
- bge Loope2
- subcc %g0,%o4,%g0 ! restore cy
-Lend2: andcc size,1,%g0
- be Lret2
- subcc %g0,%o4,%g0 ! restore cy
-/* Add last limb */
-Ljone: ld [s1_ptr],%g4
- ld [s2_ptr],%g2
- addxcc %g4,%g2,%o4
- st %o4,[res_ptr]
-
-Lret2: retl
- addx %g0,%g0,%o0 ! return carry-out from most sign. limb
-
-
-
diff --git a/mpi/sparc32/mpih-lshift.S b/mpi/sparc32/mpih-lshift.S
deleted file mode 100644
index 5348a157..00000000
--- a/mpi/sparc32/mpih-lshift.S
+++ /dev/null
@@ -1,96 +0,0 @@
-/* sparc lshift
- *
- * Copyright (C) 1995, 1996, 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
- */
-
-
-! INPUT PARAMETERS
-! res_ptr %o0
-! src_ptr %o1
-! size %o2
-! cnt %o3
-
-#include "sysdep.h"
-
- .text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_lshift)
-C_SYMBOL_NAME(mpihelp_lshift):
- sll %o2,2,%g1
- add %o1,%g1,%o1 ! make %o1 point at end of src
- ld [%o1-4],%g2 ! load first limb
- sub %g0,%o3,%o5 ! negate shift count
- add %o0,%g1,%o0 ! make %o0 point at end of res
- add %o2,-1,%o2
- andcc %o2,4-1,%g4 ! number of limbs in first loop
- srl %g2,%o5,%g1 ! compute function result
- be L0 ! if multiple of 4 limbs, skip first loop
- st %g1,[%sp+80]
-
- sub %o2,%g4,%o2 ! adjust count for main loop
-
-Loop0: ld [%o1-8],%g3
- add %o0,-4,%o0
- add %o1,-4,%o1
- addcc %g4,-1,%g4
- sll %g2,%o3,%o4
- srl %g3,%o5,%g1
- mov %g3,%g2
- or %o4,%g1,%o4
- bne Loop0
- st %o4,[%o0+0]
-
-L0: tst %o2
- be Lend
- nop
-
-Loop: ld [%o1-8],%g3
- add %o0,-16,%o0
- addcc %o2,-4,%o2
- sll %g2,%o3,%o4
- srl %g3,%o5,%g1
-
- ld [%o1-12],%g2
- sll %g3,%o3,%g4
- or %o4,%g1,%o4
- st %o4,[%o0+12]
- srl %g2,%o5,%g1
-
- ld [%o1-16],%g3
- sll %g2,%o3,%o4
- or %g4,%g1,%g4
- st %g4,[%o0+8]
- srl %g3,%o5,%g1
-
- ld [%o1-20],%g2
- sll %g3,%o3,%g4
- or %o4,%g1,%o4
- st %o4,[%o0+4]
- srl %g2,%o5,%g1
-
- add %o1,-16,%o1
- or %g4,%g1,%g4
- bne Loop
- st %g4,[%o0+0]
-
-Lend: sll %g2,%o3,%g2
- st %g2,[%o0-4]
- retl
- ld [%sp+80],%o0
-
diff --git a/mpi/sparc32/mpih-rshift.S b/mpi/sparc32/mpih-rshift.S
deleted file mode 100644
index e74675d1..00000000
--- a/mpi/sparc32/mpih-rshift.S
+++ /dev/null
@@ -1,92 +0,0 @@
-/* sparc rshift
- *
- * Copyright (C) 1995, 1996, 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
- */
-
-! INPUT PARAMETERS
-! res_ptr %o0
-! src_ptr %o1
-! size %o2
-! cnt %o3
-
-#include "sysdep.h"
-
- .text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_rshift)
-C_SYMBOL_NAME(mpihelp_rshift):
- ld [%o1],%g2 ! load first limb
- sub %g0,%o3,%o5 ! negate shift count
- add %o2,-1,%o2
- andcc %o2,4-1,%g4 ! number of limbs in first loop
- sll %g2,%o5,%g1 ! compute function result
- be L0 ! if multiple of 4 limbs, skip first loop
- st %g1,[%sp+80]
-
- sub %o2,%g4,%o2 ! adjust count for main loop
-
-Loop0: ld [%o1+4],%g3
- add %o0,4,%o0
- add %o1,4,%o1
- addcc %g4,-1,%g4
- srl %g2,%o3,%o4
- sll %g3,%o5,%g1
- mov %g3,%g2
- or %o4,%g1,%o4
- bne Loop0
- st %o4,[%o0-4]
-
-L0: tst %o2
- be Lend
- nop
-
-Loop: ld [%o1+4],%g3
- add %o0,16,%o0
- addcc %o2,-4,%o2
- srl %g2,%o3,%o4
- sll %g3,%o5,%g1
-
- ld [%o1+8],%g2
- srl %g3,%o3,%g4
- or %o4,%g1,%o4
- st %o4,[%o0-16]
- sll %g2,%o5,%g1
-
- ld [%o1+12],%g3
- srl %g2,%o3,%o4
- or %g4,%g1,%g4
- st %g4,[%o0-12]
- sll %g3,%o5,%g1
-
- ld [%o1+16],%g2
- srl %g3,%o3,%g4
- or %o4,%g1,%o4
- st %o4,[%o0-8]
- sll %g2,%o5,%g1
-
- add %o1,16,%o1
- or %g4,%g1,%g4
- bne Loop
- st %g4,[%o0-4]
-
-Lend: srl %g2,%o3,%g2
- st %g2,[%o0-0]
- retl
- ld [%sp+80],%o0
-
diff --git a/mpi/sparc32/udiv.S b/mpi/sparc32/udiv.S
deleted file mode 100644
index 3e2376cf..00000000
--- a/mpi/sparc32/udiv.S
+++ /dev/null
@@ -1,188 +0,0 @@
-! SPARC v7 __udiv_qrnnd division support, used from longlong.h.
-! This is for v7 CPUs without a floating-point unit.
-
-! Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc.
-
-! This file is part of the GNU MP Library.
-
-! The GNU MP Library is free software; you can redistribute it and/or modify
-! it under the terms of the GNU Library General Public License as published by
-! the Free Software Foundation; either version 2 of the License, or (at your
-! option) any later version.
-
-! The GNU MP Library 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 Library General Public
-! License for more details.
-
-! You should have received a copy of the GNU Library General Public License
-! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-! MA 02111-1307, USA.
-
-
-! INPUT PARAMETERS
-! rem_ptr o0
-! n1 o1
-! n0 o2
-! d o3
-
-#include "sysdep.h"
-
- .text
- .align 4
- .global C_SYMBOL_NAME(__udiv_qrnnd)
-C_SYMBOL_NAME(__udiv_qrnnd):
- tst %o3
- bneg Largedivisor
- mov 8,%g1
-
- b Lp1
- addxcc %o2,%o2,%o2
-
-Lplop: bcc Ln1
- addxcc %o2,%o2,%o2
-Lp1: addx %o1,%o1,%o1
- subcc %o1,%o3,%o4
- bcc Ln2
- addxcc %o2,%o2,%o2
-Lp2: addx %o1,%o1,%o1
- subcc %o1,%o3,%o4
- bcc Ln3
- addxcc %o2,%o2,%o2
-Lp3: addx %o1,%o1,%o1
- subcc %o1,%o3,%o4
- bcc Ln4
- addxcc %o2,%o2,%o2
-Lp4: addx %o1,%o1,%o1
- addcc %g1,-1,%g1
- bne Lplop
- subcc %o1,%o3,%o4
- bcc Ln5
- addxcc %o2,%o2,%o2
-Lp5: st %o1,[%o0]
- retl
- xnor %g0,%o2,%o0
-
-Lnlop: bcc Lp1
- addxcc %o2,%o2,%o2
-Ln1: addx %o4,%o4,%o4
- subcc %o4,%o3,%o1
- bcc Lp2
- addxcc %o2,%o2,%o2
-Ln2: addx %o4,%o4,%o4
- subcc %o4,%o3,%o1
- bcc Lp3
- addxcc %o2,%o2,%o2
-Ln3: addx %o4,%o4,%o4
- subcc %o4,%o3,%o1
- bcc Lp4
- addxcc %o2,%o2,%o2
-Ln4: addx %o4,%o4,%o4
- addcc %g1,-1,%g1
- bne Lnlop
- subcc %o4,%o3,%o1
- bcc Lp5
- addxcc %o2,%o2,%o2
-Ln5: st %o4,[%o0]
- retl
- xnor %g0,%o2,%o0
-
-Largedivisor:
- and %o2,1,%o5 ! %o5 = n0 & 1
-
- srl %o2,1,%o2
- sll %o1,31,%g2
- or %g2,%o2,%o2 ! %o2 = lo(n1n0 >> 1)
- srl %o1,1,%o1 ! %o1 = hi(n1n0 >> 1)
-
- and %o3,1,%g2
- srl %o3,1,%g3 ! %g3 = floor(d / 2)
- add %g3,%g2,%g3 ! %g3 = ceil(d / 2)
-
- b LLp1
- addxcc %o2,%o2,%o2
-
-LLplop: bcc LLn1
- addxcc %o2,%o2,%o2
-LLp1: addx %o1,%o1,%o1
- subcc %o1,%g3,%o4
- bcc LLn2
- addxcc %o2,%o2,%o2
-LLp2: addx %o1,%o1,%o1
- subcc %o1,%g3,%o4
- bcc LLn3
- addxcc %o2,%o2,%o2
-LLp3: addx %o1,%o1,%o1
- subcc %o1,%g3,%o4
- bcc LLn4
- addxcc %o2,%o2,%o2
-LLp4: addx %o1,%o1,%o1
- addcc %g1,-1,%g1
- bne LLplop
- subcc %o1,%g3,%o4
- bcc LLn5
- addxcc %o2,%o2,%o2
-LLp5: add %o1,%o1,%o1 ! << 1
- tst %g2
- bne Oddp
- add %o5,%o1,%o1
- st %o1,[%o0]
- retl
- xnor %g0,%o2,%o0
-
-LLnlop: bcc LLp1
- addxcc %o2,%o2,%o2
-LLn1: addx %o4,%o4,%o4
- subcc %o4,%g3,%o1
- bcc LLp2
- addxcc %o2,%o2,%o2
-LLn2: addx %o4,%o4,%o4
- subcc %o4,%g3,%o1
- bcc LLp3
- addxcc %o2,%o2,%o2
-LLn3: addx %o4,%o4,%o4
- subcc %o4,%g3,%o1
- bcc LLp4
- addxcc %o2,%o2,%o2
-LLn4: addx %o4,%o4,%o4
- addcc %g1,-1,%g1
- bne LLnlop
- subcc %o4,%g3,%o1
- bcc LLp5
- addxcc %o2,%o2,%o2
-LLn5: add %o4,%o4,%o4 ! << 1
- tst %g2
- bne Oddn
- add %o5,%o4,%o4
- st %o4,[%o0]
- retl
- xnor %g0,%o2,%o0
-
-Oddp: xnor %g0,%o2,%o2
- ! q' in %o2. r' in %o1
- addcc %o1,%o2,%o1
- bcc LLp6
- addx %o2,0,%o2
- sub %o1,%o3,%o1
-LLp6: subcc %o1,%o3,%g0
- bcs LLp7
- subx %o2,-1,%o2
- sub %o1,%o3,%o1
-LLp7: st %o1,[%o0]
- retl
- mov %o2,%o0
-
-Oddn: xnor %g0,%o2,%o2
- ! q' in %o2. r' in %o4
- addcc %o4,%o2,%o4
- bcc LLn6
- addx %o2,0,%o2
- sub %o4,%o3,%o4
-LLn6: subcc %o4,%o3,%g0
- bcs LLn7
- subx %o2,-1,%o2
- sub %o4,%o3,%o4
-LLn7: st %o4,[%o0]
- retl
- mov %o2,%o0
diff --git a/mpi/sparc32v8/distfiles b/mpi/sparc32v8/distfiles
deleted file mode 100644
index 5789f35b..00000000
--- a/mpi/sparc32v8/distfiles
+++ /dev/null
@@ -1,5 +0,0 @@
-
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-
diff --git a/mpi/sparc32v8/mpih-mul1.S b/mpi/sparc32v8/mpih-mul1.S
deleted file mode 100644
index 8bc1db57..00000000
--- a/mpi/sparc32v8/mpih-mul1.S
+++ /dev/null
@@ -1,101 +0,0 @@
-! SPARC v8 __mpn_mul_1 -- Multiply a limb vector with a single limb and
-! store the product in a second limb vector.
-
-! Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
-
-! This file is part of the GNU MP Library.
-
-! The GNU MP Library is free software; you can redistribute it and/or modify
-! it under the terms of the GNU Library General Public License as published by
-! the Free Software Foundation; either version 2 of the License, or (at your
-! option) any later version.
-
-! The GNU MP Library 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 Library General Public
-! License for more details.
-
-! You should have received a copy of the GNU Library General Public License
-! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-! MA 02111-1307, USA.
-
-
-! INPUT PARAMETERS
-! res_ptr o0
-! s1_ptr o1
-! size o2
-! s2_limb o3
-
-#include "sysdep.h"
-
-.text
- .align 8
- .global C_SYMBOL_NAME(mpihelp_mul_1)
-C_SYMBOL_NAME(mpihelp_mul_1):
- sll %o2,4,%g1
- and %g1,(4-1)<<4,%g1
-#if PIC
- mov %o7,%g4 ! Save return address register
- call 1f
- add %o7,LL-1f,%g3
-1: mov %g4,%o7 ! Restore return address register
-#else
- sethi %hi(LL),%g3
- or %g3,%lo(LL),%g3
-#endif
- jmp %g3+%g1
- ld [%o1+0],%o4 ! 1
-LL:
-LL00: add %o0,-4,%o0
- add %o1,-4,%o1
- b Loop00 /* 4, 8, 12, ... */
- orcc %g0,%g0,%g2
-LL01: b Loop01 /* 1, 5, 9, ... */
- orcc %g0,%g0,%g2
- nop
- nop
-LL10: add %o0,-12,%o0 /* 2, 6, 10, ... */
- add %o1,4,%o1
- b Loop10
- orcc %g0,%g0,%g2
- nop
-LL11: add %o0,-8,%o0 /* 3, 7, 11, ... */
- add %o1,-8,%o1
- b Loop11
- orcc %g0,%g0,%g2
-
-Loop: addcc %g3,%g2,%g3 ! 1
- ld [%o1+4],%o4 ! 2
- st %g3,[%o0+0] ! 1
- rd %y,%g2 ! 1
-Loop00: umul %o4,%o3,%g3 ! 2
- addxcc %g3,%g2,%g3 ! 2
- ld [%o1+8],%o4 ! 3
- st %g3,[%o0+4] ! 2
- rd %y,%g2 ! 2
-Loop11: umul %o4,%o3,%g3 ! 3
- addxcc %g3,%g2,%g3 ! 3
- ld [%o1+12],%o4 ! 4
- add %o1,16,%o1
- st %g3,[%o0+8] ! 3
- rd %y,%g2 ! 3
-Loop10: umul %o4,%o3,%g3 ! 4
- addxcc %g3,%g2,%g3 ! 4
- ld [%o1+0],%o4 ! 1
- st %g3,[%o0+12] ! 4
- add %o0,16,%o0
- rd %y,%g2 ! 4
- addx %g0,%g2,%g2
-Loop01: addcc %o2,-4,%o2
- bg Loop
- umul %o4,%o3,%g3 ! 1
-
- addcc %g3,%g2,%g3 ! 4
- st %g3,[%o0+0] ! 4
- rd %y,%g2 ! 4
-
- retl
- addx %g0,%g2,%o0
-
-
diff --git a/mpi/sparc32v8/mpih-mul2.S b/mpi/sparc32v8/mpih-mul2.S
deleted file mode 100644
index 9055f89e..00000000
--- a/mpi/sparc32v8/mpih-mul2.S
+++ /dev/null
@@ -1,124 +0,0 @@
-! SPARC v8 __mpn_addmul_1 -- Multiply a limb vector with a limb and
-! add the result to a second limb vector.
-
-! Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
-
-! This file is part of the GNU MP Library.
-
-! The GNU MP Library is free software; you can redistribute it and/or modify
-! it under the terms of the GNU Library General Public License as published by
-! the Free Software Foundation; either version 2 of the License, or (at your
-! option) any later version.
-
-! The GNU MP Library 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 Library General Public
-! License for more details.
-
-! You should have received a copy of the GNU Library General Public License
-! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-! MA 02111-1307, USA.
-
-
-! INPUT PARAMETERS
-! res_ptr o0
-! s1_ptr o1
-! size o2
-! s2_limb o3
-
-#include "sysdep.h"
-
-.text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_addmul_1)
-C_SYMBOL_NAME(mpihelp_addmul_1):
- orcc %g0,%g0,%g2
- ld [%o1+0],%o4 ! 1
-
- sll %o2,4,%g1
- and %g1,(4-1)<<4,%g1
-#if PIC
- mov %o7,%g4 ! Save return address register
- call 1f
- add %o7,LL-1f,%g3
-1: mov %g4,%o7 ! Restore return address register
-#else
- sethi %hi(LL),%g3
- or %g3,%lo(LL),%g3
-#endif
- jmp %g3+%g1
- nop
-LL:
-LL00: add %o0,-4,%o0
- b Loop00 /* 4, 8, 12, ... */
- add %o1,-4,%o1
- nop
-LL01: b Loop01 /* 1, 5, 9, ... */
- nop
- nop
- nop
-LL10: add %o0,-12,%o0 /* 2, 6, 10, ... */
- b Loop10
- add %o1,4,%o1
- nop
-LL11: add %o0,-8,%o0 /* 3, 7, 11, ... */
- b Loop11
- add %o1,-8,%o1
- nop
-
-1: addcc %g3,%g2,%g3 ! 1
- ld [%o1+4],%o4 ! 2
- rd %y,%g2 ! 1
- addx %g0,%g2,%g2
- ld [%o0+0],%g1 ! 2
- addcc %g1,%g3,%g3
- st %g3,[%o0+0] ! 1
-Loop00: umul %o4,%o3,%g3 ! 2
- ld [%o0+4],%g1 ! 2
- addxcc %g3,%g2,%g3 ! 2
- ld [%o1+8],%o4 ! 3
- rd %y,%g2 ! 2
- addx %g0,%g2,%g2
- nop
- addcc %g1,%g3,%g3
- st %g3,[%o0+4] ! 2
-Loop11: umul %o4,%o3,%g3 ! 3
- addxcc %g3,%g2,%g3 ! 3
- ld [%o1+12],%o4 ! 4
- rd %y,%g2 ! 3
- add %o1,16,%o1
- addx %g0,%g2,%g2
- ld [%o0+8],%g1 ! 2
- addcc %g1,%g3,%g3
- st %g3,[%o0+8] ! 3
-Loop10: umul %o4,%o3,%g3 ! 4
- addxcc %g3,%g2,%g3 ! 4
- ld [%o1+0],%o4 ! 1
- rd %y,%g2 ! 4
- addx %g0,%g2,%g2
- ld [%o0+12],%g1 ! 2
- addcc %g1,%g3,%g3
- st %g3,[%o0+12] ! 4
- add %o0,16,%o0
- addx %g0,%g2,%g2
-Loop01: addcc %o2,-4,%o2
- bg 1b
- umul %o4,%o3,%g3 ! 1
-
- addcc %g3,%g2,%g3 ! 4
- rd %y,%g2 ! 4
- addx %g0,%g2,%g2
- ld [%o0+0],%g1 ! 2
- addcc %g1,%g3,%g3
- st %g3,[%o0+0] ! 4
- addx %g0,%g2,%o0
-
- retl
- nop
-
-
-! umul, ld, addxcc, rd, st
-
-! umul, ld, addxcc, rd, ld, addcc, st, addx
-
diff --git a/mpi/sparc32v8/mpih-mul3.S b/mpi/sparc32v8/mpih-mul3.S
deleted file mode 100644
index efd83de4..00000000
--- a/mpi/sparc32v8/mpih-mul3.S
+++ /dev/null
@@ -1,60 +0,0 @@
-! SPARC v8 __mpn_submul_1 -- Multiply a limb vector with a limb and
-! subtract the result from a second limb vector.
-
-! Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
-
-! This file is part of the GNU MP Library.
-
-! The GNU MP Library is free software; you can redistribute it and/or modify
-! it under the terms of the GNU Library General Public License as published by
-! the Free Software Foundation; either version 2 of the License, or (at your
-! option) any later version.
-
-! The GNU MP Library 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 Library General Public
-! License for more details.
-
-! You should have received a copy of the GNU Library General Public License
-! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-! MA 02111-1307, USA.
-
-
-! INPUT PARAMETERS
-! res_ptr o0
-! s1_ptr o1
-! size o2
-! s2_limb o3
-
-#include "sysdep.h"
-
-.text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_submul_1)
-C_SYMBOL_NAME(mpihelp_submul_1):
- sub %g0,%o2,%o2 ! negate ...
- sll %o2,2,%o2 ! ... and scale size
- sub %o1,%o2,%o1 ! o1 is offset s1_ptr
- sub %o0,%o2,%g1 ! g1 is offset res_ptr
-
- mov 0,%o0 ! clear cy_limb
-
-Loop: ld [%o1+%o2],%o4
- ld [%g1+%o2],%g2
- umul %o4,%o3,%o5
- rd %y,%g3
- addcc %o5,%o0,%o5
- addx %g3,0,%o0
- subcc %g2,%o5,%g2
- addx %o0,0,%o0
- st %g2,[%g1+%o2]
-
- addcc %o2,4,%o2
- bne Loop
- nop
-
- retl
- nop
-
-
diff --git a/mpi/supersparc/distfiles b/mpi/supersparc/distfiles
deleted file mode 100644
index 5506c419..00000000
--- a/mpi/supersparc/distfiles
+++ /dev/null
@@ -1,3 +0,0 @@
-
-udiv.S
-
diff --git a/mpi/supersparc/udiv.S b/mpi/supersparc/udiv.S
deleted file mode 100644
index 07d904c7..00000000
--- a/mpi/supersparc/udiv.S
+++ /dev/null
@@ -1,110 +0,0 @@
-! SuperSPARC __udiv_qrnnd division support, used from longlong.h.
-! This is for SuperSPARC only, to compensate for its semi-functional
-! udiv instruction.
-
-! Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc.
-
-! This file is part of the GNU MP Library.
-
-! The GNU MP Library is free software; you can redistribute it and/or modify
-! it under the terms of the GNU Library General Public License as published by
-! the Free Software Foundation; either version 2 of the License, or (at your
-! option) any later version.
-
-! The GNU MP Library 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 Library General Public
-! License for more details.
-
-! You should have received a copy of the GNU Library General Public License
-! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-! MA 02111-1307, USA.
-
-
-! INPUT PARAMETERS
-! rem_ptr i0
-! n1 i1
-! n0 i2
-! d i3
-
-#include "sysdep.h"
-#undef ret /* Kludge for glibc */
-
- .text
- .align 8
-LC0: .double 0r4294967296
-LC1: .double 0r2147483648
-
- .align 4
- .global C_SYMBOL_NAME(__udiv_qrnnd)
-C_SYMBOL_NAME(__udiv_qrnnd):
- !#PROLOGUE# 0
- save %sp,-104,%sp
- !#PROLOGUE# 1
- st %i1,[%fp-8]
- ld [%fp-8],%f10
- sethi %hi(LC0),%o7
- fitod %f10,%f4
- ldd [%o7+%lo(LC0)],%f8
- cmp %i1,0
- bge L248
- mov %i0,%i5
- faddd %f4,%f8,%f4
-L248:
- st %i2,[%fp-8]
- ld [%fp-8],%f10
- fmuld %f4,%f8,%f6
- cmp %i2,0
- bge L249
- fitod %f10,%f2
- faddd %f2,%f8,%f2
-L249:
- st %i3,[%fp-8]
- faddd %f6,%f2,%f2
- ld [%fp-8],%f10
- cmp %i3,0
- bge L250
- fitod %f10,%f4
- faddd %f4,%f8,%f4
-L250:
- fdivd %f2,%f4,%f2
- sethi %hi(LC1),%o7
- ldd [%o7+%lo(LC1)],%f4
- fcmped %f2,%f4
- nop
- fbge,a L251
- fsubd %f2,%f4,%f2
- fdtoi %f2,%f2
- st %f2,[%fp-8]
- b L252
- ld [%fp-8],%i4
-L251:
- fdtoi %f2,%f2
- st %f2,[%fp-8]
- ld [%fp-8],%i4
- sethi %hi(-2147483648),%g2
- xor %i4,%g2,%i4
-L252:
- umul %i3,%i4,%g3
- rd %y,%i0
- subcc %i2,%g3,%o7
- subxcc %i1,%i0,%g0
- be L253
- cmp %o7,%i3
-
- add %i4,-1,%i0
- add %o7,%i3,%o7
- st %o7,[%i5]
- ret
- restore
-L253:
- blu L246
- mov %i4,%i0
- add %i4,1,%i0
- sub %o7,%i3,%o7
-L246:
- st %o7,[%i5]
- ret
- restore
-
diff --git a/scripts/ChangeLog b/scripts/ChangeLog
deleted file mode 100644
index c14ea729..00000000
--- a/scripts/ChangeLog
+++ /dev/null
@@ -1,50 +0,0 @@
-Sat Feb 13 12:04:43 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * autogen.sh: Now uses gettextize
-
-Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.sub, config.guess: Support i386-emx-os2
-
-Sun Jan 17 11:04:33 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * autogen.sh: Now checks for installed gettext
-
-Sat Jan 16 09:27:30 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.guess (m68k-atari-mint): New.
- * config.sub: Add support for atarist-MiNT
-
-Wed Jan 13 12:49:36 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * gnupg.spec.in: New
- * gnupg.spec: Removed
-
-Wed Dec 23 13:18:14 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * gnupg.spec: Updated version by Fabio Coatti
-
-Thu Dec 17 18:31:15 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * gnupg.spec: New version by Reuben Sumner and did some more
- changes.
-
-Fri Nov 27 12:39:29 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * commit: New
-
-
-Fri Nov 20 12:01:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mkdiff: signs the patch file
-
-Sat Oct 17 16:10:16 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * autogen.sh: New.
-
-Wed Oct 14 09:55:25 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.guess (FreeBSD): Changes from Jun Kuriyama to support ELF
- * config.sub: (freebsd): Add to maybe_os
-
diff --git a/scripts/autogen.sh b/scripts/autogen.sh
deleted file mode 100755
index 6d59f46c..00000000
--- a/scripts/autogen.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-
-PGM=GnuPG
-DIE=no
-
-if (autoconf --version) < /dev/null > /dev/null 2>&1 ; then
- :
-else
- echo
- echo "**Error**: You must have "\`autoconf\'" installed to compile $PGM."
- echo ' (version 2.13 or newer is required)'
- DIE="yes"
-fi
-
-if (automake --version) < /dev/null > /dev/null 2>&1 ; then
- if (aclocal --version) < /dev/null > /dev/null 2>&1; then
- if (aclocal --version | awk 'NR==1 { if( $4 >= 1.4 ) exit 1; exit 0; }');
- then
- echo "**Error**: "\`aclocal\'" is too old."
- echo ' (version 1.4 or newer is required)'
- DIE="yes"
- fi
- else
- echo
- echo "**Error**: Missing "\`aclocal\'". The version of "\`automake\'
- echo " installed doesn't appear recent enough."
- DIE="yes"
- fi
-
-else
- echo
- echo "**Error**: You must have "\`automake\'" installed to compile $PGM."
- echo ' (version 1.3 or newer is required)'
- DIE="yes"
-fi
-
-
-if (gettext --version </dev/null 2>/dev/null | awk 'NR==1 { split($4,A,"\."); \
- X=10000*A[1]+100*A[2]+A[3]; echo X; if( X >= 1035 ) exit 1; exit 0}')
- then
- echo "**Error**: You must have "\`gettext\'" installed to compile $PGM."
- echo ' (version 0.10.35 or newer is required; get'
- echo ' ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz)'
- DIE="yes"
-fi
-
-
-if test "$DIE" = "yes"; then
- exit 1
-fi
-
-echo "Running gettextize... Ignore non-fatal messages."
-echo "no" | gettextize --force
-
-
-echo "Running aclocal..."
-aclocal
-echo "Running autoheader..."
-autoheader
-echo "Running automake --gnu ..."
-automake --gnu;
-echo "Running autoconf..."
-autoconf
-
-echo "You can now run \"./configure\" and then \"make\"."
-
diff --git a/scripts/config.guess b/scripts/config.guess
deleted file mode 100755
index 3aa18a54..00000000
--- a/scripts/config.guess
+++ /dev/null
@@ -1,754 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 93, 94, 95, 96, 97, 1999 Free Software Foundation, Inc.
-#
-# This file 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.
-#
-# This program 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Written by Per Bothner <bothner@cygnus.com>.
-# The master version of this file is at the FSF in /home/gd/gnu/lib.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit system type (host/target name).
-#
-# Only a few systems have been added to this list; please add others
-# (but try to keep the structure clean).
-#
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 8/24/94.)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- alpha:OSF1:*:*)
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-cbm-sysv4
- exit 0;;
- amiga:NetBSD:*:*)
- echo m68k-cbm-netbsd${UNAME_RELEASE}
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc64:OpenBSD:*:*)
- echo mips64el-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hkmips:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- SR2?01:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- atari*:NetBSD:*:*)
- echo m68k-atari-netbsd${UNAME_RELEASE}
- exit 0 ;;
- atari*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- atari*:MiNT:*:*)
- echo m68k-atari-mint
- exit 0 ;;
- sun3*:NetBSD:*:*)
- echo m68k-sun-netbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:NetBSD:*:*)
- echo m68k-apple-netbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- sed 's/^ //' << EOF >dummy.c
- int main (argc, argv) int argc; char **argv; {
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- ${CC-cc} dummy.c -o dummy \
- && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
- -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i?86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- sed 's/^ //' << EOF >dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:4)
- if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=4.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[3478]??:HP-UX:*:*)
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
- 9000/8?? ) HP_ARCH=hppa1.0 ;;
- esac
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- sed 's/^ //' << EOF >dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i?86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*X-MP:*:*:*)
- echo xmp-cray-unicos
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE}
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE}
- exit 0 ;;
- CRAY-2:*:*:*)
- echo cray2-cray-unicos
- exit 0 ;;
- F300:UNIX_System_V:*:*)
- FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- F301:UNIX_System_V:*:*)
- echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
- exit 0 ;;
- hp3[0-9][05]:NetBSD:*:*)
- echo m68k-hp-netbsd${UNAME_RELEASE}
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- i?86:BSD/386:*:* | *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- rel_number=`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//' 2>/dev/null`
- if test "$rel_number" = "3.0"; then
- ld_help_string=`ld --help 2>&1`
- if echo "$ld_help_string"|grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
- echo ${UNAME_MACHINE}-unknown-freebsd${rel_number}-elf
- else
- echo ${UNAME_MACHINE}-unknown-freebsd${rel_number}-aout
- fi
- else
- echo ${UNAME_MACHINE}-unknown-freebsd${rel_number}
- fi
- exit 0 ;;
- *:NetBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- i*:CYGWIN*:*)
- echo i386-pc-cygwin32
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin32
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,-.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- *:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us.
- ld_help_string=`ld --help 2>&1`
- if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
- echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
- echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
- echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
- echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
- echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
- echo "powerpc-unknown-linux-gnu" ; exit 0
- elif test "${UNAME_MACHINE}" = "alpha" ; then
- echo alpha-unknown-linux-gnu ; exit 0
- elif test "${UNAME_MACHINE}" = "sparc" ; then
- echo sparc-unknown-linux-gnu ; exit 0
- elif test "${UNAME_MACHINE}" = "mips" ; then
- cat >dummy.c <<EOF
-main(argc, argv)
-int argc;
-char *argv[];
-{
-#ifdef __MIPSEB__
- printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
- printf ("%sel-unknown-linux-gnu\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- else
- # Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
- # useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
- test ! -d /usr/lib/ldscripts/. \
- && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
- # Determine whether the default compiler is a.out or elf
- cat >dummy.c <<EOF
-main(argc, argv)
-int argc;
-char *argv[];
-{
-#ifdef __ELF__
- printf ("%s-pc-linux-gnu\n", argv[1]);
-#else
- printf ("%s-pc-linux-gnuaout\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- fi ;;
-# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
-# are messed up and put the nodename in both sysname and nodename.
- i?86:DYNIX/ptx:4*:*)
- echo i386-sequent-sysv4
- exit 0 ;;
- i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- i?86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- i?86:LynxOS:2.*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-cat >dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-#if !defined (ultrix)
- printf ("vax-dec-bsd\n"); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
-#endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-#ifdef __EMX__
- printf ("i386-emx-os2"); exit(0);
-#endif
-
- exit (1);
-}
-EOF
-
-${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
-rm -f dummy.c dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-#echo '(Unable to guess system type)' 1>&2
-
-exit 1
diff --git a/scripts/config.sub b/scripts/config.sub
deleted file mode 100755
index 4d3675db..00000000
--- a/scripts/config.sub
+++ /dev/null
@@ -1,1194 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-# Copyright (C) 1991, 92, 93, 94, 95, 96, 1999 Free Software Foundation, Inc.
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file 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.
-#
-# This program 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.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-if [ x$1 = x ]
-then
- echo Configuration name missing. 1>&2
- echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
- echo "or $0 ALIAS" 1>&2
- echo where ALIAS is a recognized configuration type. 1>&2
- exit 1
-fi
-
-# First pass through any local machine types.
-case $1 in
- *local*)
- echo $1
- exit 0
- ;;
- *)
- ;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- linux-gnu*|freebsd*-*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond ) # CYGNUS LOCAL
- os=
- basic_machine=$1
- ;;
- -scout) # CYGNUS LOCAL
- ;;
- -wrs) # CYGNUS LOCAL
- os=vxworks
- basic_machine=$1
- ;;
- -hiuxmpp)
- os=-hiuxmpp
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arm \
- | arme[lb] | pyramid | mn10300 \
- | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
- | alpha | we32k | ns16k | clipper | i370 | sh \
- | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
- | pdp11 | mips64el | mips64orion | mips64orionel \
- | sparc | sparclet | sparclite | sparc64)
- basic_machine=$basic_machine-unknown
- ;;
- m88110 | m680[01234]0 | m683?2 | m68360 | z8k | v70 | h8500 | w65) # CYGNUS LOCAL
- basic_machine=$basic_machine-unknown
- ;;
- mips64vr4300 | mips64vr4300el) # CYGNUS LOCAL jsmith/vr4300
- basic_machine=$basic_machine-unknown
- ;;
- mips64vr4100 | mips64vr4100el) # CYGNUS LOCAL jsmith/vr4100
- basic_machine=$basic_machine-unknown
- ;;
- mips64vr5000 | mips64vr5000el) # CYGNUS LOCAL ian/vr5000
- basic_machine=$basic_machine-unknown
- ;;
- mips16) # CYGNUS LOCAL krk/mips16
- basic_machine=$basic_machine-unknown
- ;;
-# CYGNUS LOCAL law
- mn10200)
- basic_machine=$basic_machine-unknown
- ;;
-# END CYGNUS LOCAL
- d10v) # CYGNUS LOCAL meissner/d10v
- basic_machine=$basic_machine-unknown
- ;;
- mn10200) # CYGNUS LOCAL
- basic_machine=$basic_machine-unknown
- ;;
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i[3456]86)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- vax-* | tahoe-* | i[3456]86-* | i860-* | m32r-* | m68k-* | m68000-* \
- | m88k-* | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
- | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
- | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
- | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
- | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
- ;;
- m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | h8500-* | d10v-*) # CYGNUS LOCAL
- ;;
- mips64vr4300-* | mips64vr4300el-*) # CYGNUS LOCAL jsmith/vr4300
- ;;
- mips64vr4100-* | mips64vr4100el-*) # CYGNUS LOCAL jsmith/vr4100
- ;;
- mips16-*) # CYGNUS LOCAL krk/mips16
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd) # CYGNUS LOCAL
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif) # CYGNUS LOCAL
- basic_machine=a29k-amd
- os=-udi
- ;;
- adobe68k) # CYGNUS LOCAL
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-cbm
- ;;
- amigados)
- basic_machine=m68k-cbm
- os=-amigados
- ;;
- amigaunix | amix)
- basic_machine=m68k-cbm
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd) # CYGNUS LOCAL
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- atarist)
- basic_machine=m68k-atari
- ;;
- emx)
- basic_machine=i386-emx
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- cray2)
- basic_machine=cray2-cray
- os=-unicos
- ;;
- [ctj]90-cray)
- basic_machine=c90-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE) # CYGNUS LOCAL
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- hiuxmpp)
- basic_machine=hppa1.1-hitachi
- os=-hiuxmpp
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray) # CYGNUS LOCAL
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms) # CYGNUS LOCAL
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- w89k-*) # CYGNUS LOCAL
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- op50n-*) # CYGNUS LOCAL
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- op60c-*) # CYGNUS LOCAL
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- hppro) # CYGNUS LOCAL
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf) # CYGNUS LOCAL
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- os=-mvs
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i[3456]86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i[3456]86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i[3456]86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i[3456]86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach) # CYGNUS LOCAL
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta) # CYGNUS LOCAL
- basic_machine=i386-unknown
- os=-vsta
- ;;
- i386-go32 | go32) # CYGNUS LOCAL
- basic_machine=i386-unknown
- os=-go32
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- mipsel*-linux*)
- basic_machine=mipsel-unknown
- os=-linux
- ;;
- mips*-linux*)
- basic_machine=mips-unknown
- os=-linux
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor) # CYGNUS LOCAL
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- msdos) # CYGNUS LOCAL
- basic_machine=i386-unknown
- os=-msdos
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown # CYGNUS LOCAL
- os=-netbsd
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70) # CYGNUS LOCAL
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960) # CYGNUS LOCAL
- basic_machine=i960-intel
- os=-mon960
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- OSE68000 | ose68000) # CYGNUS LOCAL
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k) # CYGNUS LOCAL
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5)
- basic_machine=i586-intel
- ;;
- pentiumpro | p6)
- basic_machine=i686-intel
- ;;
- pentium-* | p5-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- k5)
- # We don't have specific support for AMD's K5 yet, so just call it a Pentium
- basic_machine=i586-amd
- ;;
- nexen)
- # We don't have specific support for Nexgen yet, so just call it a Pentium
- basic_machine=i586-nexgen
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=rs6000-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- rom68k) # CYGNUS LOCAL
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- sa29200) # CYGNUS LOCAL
- basic_machine=a29k-amd
- os=-udi
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sparclite-wrs) # CYGNUS LOCAL
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000) # CYGNUS LOCAL
- basic_machine=m68k-tandem
- ;;
- stratus) # CYGNUS LOCAL
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810) # CYGNUS LOCAL
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*) # CYGNUS LOCAL
- basic_machine=w65-wdc
- os=-none
- ;;
- xmp)
- basic_machine=xmp-cray
- os=-unicos
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- z8k-*-coff) # CYGNUS LOCAL
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k) # CYGNUS LOCAL
- basic_machine=hppa1.1-winbond
- ;;
- op50n) # CYGNUS LOCAL
- basic_machine=hppa1.1-oki
- ;;
- op60c) # CYGNUS LOCAL
- basic_machine=hppa1.1-oki
- ;;
- mips)
- if [ x$os = x-linux ]; then
- basic_machine=mips-unknown
- else
- basic_machine=mips-mips
- fi
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sparc)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw) # CYGNUS LOCAL
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw) # CYGNUS LOCAL
- basic_machine=powerpc-apple
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -unixware* | svr4*)
- os=-sysv4
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -linux-gnu* | -uxpv* | -mingw32* )
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- # CYGNUS LOCAL
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mon960* | -lnews* )
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- # END CYGNUS LOCAL
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -386bsd) # CYGNUS LOCAL
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*) # CYGNUS LOCAL
- os=-ose
- ;;
- -es1800*) # CYGNUS LOCAL
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -mint)
- os=-mint
- ;;
- -os2)
- os=-os2
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- echo "os=($os)"
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-semi)
- os=-aout
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco) # CYGNUS LOCAL
- os=-aout
- ;;
- mips*-cisco) # CYGNUS LOCAL
- os=-elf
- ;;
- mips*-*) # CYGNUS LOCAL
- os=-elf
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be) # CYGNUS LOCAL
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-wec) # CYGNUS LOCAL
- os=-proelf
- ;;
- *-winbond) # CYGNUS LOCAL
- os=-proelf
- ;;
- *-oki) # CYGNUS LOCAL
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigados
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f301-fujitsu)
- os=-uxpv
- ;;
- *-rom68k) # CYGNUS LOCAL
- os=-coff
- ;;
- *-*bug) # CYGNUS LOCAL
- os=-coff
- ;;
- *-apple) # CYGNUS LOCAL
- os=-macos
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*) # CYGNUS LOCAL
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxsim* | -vxworks*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*) # CYGNUS LOCAL
- vendor=hitachi
- ;;
- -mpw* | -macos*) # CYGNUS LOCAL
- vendor=apple
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
diff --git a/scripts/distfiles b/scripts/distfiles
deleted file mode 100644
index 46b32421..00000000
--- a/scripts/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-config.guess
-config.sub
-install-sh
-mkinstalldirs
-mkdiff
-missing
-gnupg.spec.in
-autogen.sh
-ChangeLog
diff --git a/scripts/install-sh b/scripts/install-sh
deleted file mode 100755
index e8436696..00000000
--- a/scripts/install-sh
+++ /dev/null
@@ -1,250 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
diff --git a/scripts/missing b/scripts/missing
deleted file mode 100755
index a6abd069..00000000
--- a/scripts/missing
+++ /dev/null
@@ -1,134 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# 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
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program 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.
-
-if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
-fi
-
-case "$1" in
-
- -h|--h|--he|--hel|--help)
- echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
- -h, --help display this help and exit
- -v, --version output version information and exit
-
-Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
- automake touch all \`Makefile.in' files
- bison touch file \`y.tab.c'
- makeinfo touch the output file
- yacc touch file \`y.tab.c'"
- ;;
-
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "missing - GNU libit 0.0"
- ;;
-
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
-
- aclocal)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`acinclude.m4' or \`configure.in'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
- any GNU archive site."
- touch aclocal.m4
- ;;
-
- autoconf)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`configure.in'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
- archive site."
- touch configure
- ;;
-
- autoheader)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`acconfig.h' or \`configure.in'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
- from any GNU archive site."
- touch config.h.in
- ;;
-
- automake)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
- You might want to install the \`Automake' and \`Perl' packages.
- Grab them from any GNU archive site."
- find . -type f -name Makefile.am -print \
- | sed 's/^\(.*\).am$/touch \1.in/' \
- | sh
- ;;
-
- bison|yacc)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified a \`.y' file. You may need the \`Bison' package
- in order for those modifications to take effect. You can get
- \`Bison' from any GNU archive site."
- touch y.tab.c
- ;;
-
- makeinfo)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified a \`.texi' or \`.texinfo' file, or any other file
- indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
- if test -z "$file"; then
- file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
- fi
- touch $file
- ;;
-
- *)
- echo 1>&2 "\
-WARNING: \`$1' is needed, and you do not seem to have it handy on your
- system. You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
- it often tells you about the needed prerequirements for installing
- this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/scripts/mkinstalldirs b/scripts/mkinstalldirs
deleted file mode 100755
index d0fd194f..00000000
--- a/scripts/mkinstalldirs
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain
-
-# $Id$
-
-errstatus=0
-
-for file
-do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/src/ChangeLog b/src/ChangeLog
deleted file mode 100644
index ee0f83d2..00000000
--- a/src/ChangeLog
+++ /dev/null
@@ -1,5 +0,0 @@
-Tue Dec 8 13:15:16 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * gcrypt.h: New
- * mpiapi.c: New
-
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index d8f8beca..00000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl
-
-lib_LTLIBRARIES = libgcrypt.la
-
-libgcrypt_la_LDFLAGS = -version-info 0:0:0
-libgcrypt_la_SOURCES = gcrypt.h \
- g10lib.h \
- misc.c \
- global.c \
- mpiapi.c \
- symapi.c \
- mdapi.c \
- pkapi.c
-
-
-
-
diff --git a/src/g10lib.h b/src/g10lib.h
deleted file mode 100644
index 031dc950..00000000
--- a/src/g10lib.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/* g10lib.h - internal defintions for libgcrypt
- * 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 G10LIB_H
-#define G10LIB_H 1
-
-#ifdef _GCRYPT_H
- #error gcrypt.h already included
-#endif
-
-#include "gcrypt.h"
-
-#ifdef G10_I18N_H
- #error i18n should not be included here
-#endif
-
-#define _(a) g10_gettext(a)
-#define N_(a) (a)
-
-/*-- global.c --*/
-int set_lasterr( int ec );
-
-/*-- misc.c --*/
-const char *g10_gettext( const char *key );
-int fatal_invalid_arg(const char *text);
-
-#if 0
-/* This used to be the old include/g10lib.h */
-
-#include "mpi.h"
-
-int g10c_debug_mode;
-int g10_opt_verbose;
-
-/********************************
- ******* math functions *******
- ********************************/
-MPI g10m_new( unsigned nbits );
-MPI g10m_new_secure( unsigned nbits );
-void g10m_release( MPI a );
-void g10m_resize( MPI a, unsigned nbits );
-MPI g10m_copy( MPI a );
-void g10m_swap( MPI a, MPI b);
-void g10m_set( MPI w, MPI u);
-void g10m_set_ui( MPI w, unsigned long u);
-void g10m_set_bytes( MPI a, unsigned nbits, unsigned char (*fnc)(int), int opaque );
-int g10m_cmp( MPI u, MPI v );
-int g10m_cmp_ui( MPI u, unsigned long v );
-
-
-void g10m_add(MPI w, MPI u, MPI v);
-void g10m_add_ui(MPI w, MPI u, unsigned long v );
-void g10m_sub( MPI w, MPI u, MPI v);
-void g10m_sub_ui(MPI w, MPI u, unsigned long v );
-
-void g10m_mul_ui(MPI w, MPI u, unsigned long v );
-void g10m_mul_2exp( MPI w, MPI u, unsigned long cnt);
-void g10m_mul( MPI w, MPI u, MPI v);
-void g10m_mulm( MPI w, MPI u, MPI v, MPI m);
-
-void g10m_fdiv_q( MPI quot, MPI dividend, MPI divisor );
-
-void g10m_powm( MPI res, MPI base, MPI exp, MPI mod);
-
-int g10m_gcd( MPI g, MPI a, MPI b );
-int g10m_invm( MPI x, MPI u, MPI v );
-
-unsigned g10m_get_nbits( MPI a );
-unsigned g10m_get_size( MPI a );
-
-void g10m_set_buffer( MPI a, const char *buffer, unsigned nbytes, int sign );
-
-
-/********************************************
- ******* symmetric cipher functions *******
- ********************************************/
-
-
-
-/*********************************************
- ******* asymmetric cipher functions *******
- *********************************************/
-
-
-
-
-/*********************************************
- ******* cryptograhic hash functions *******
- *********************************************/
-
-
-/*****************************************
- ******* miscellaneous functions *******
- *****************************************/
-
-const char *g10m_revision_string(int mode);
-const char *g10c_revision_string(int mode);
-const char *g10u_revision_string(int mode);
-
-MPI g10c_generate_secret_prime( unsigned nbits );
-char *g10c_get_random_bits( unsigned nbits, int level, int secure );
-
-
-void *g10_malloc( size_t n );
-void *g10_calloc( size_t n );
-void *g10_malloc_secure( size_t n );
-void *g10_calloc_secure( size_t n );
-void *g10_realloc( void *a, size_t n );
-void g10_free( void *p );
-char *g10_strdup( const char * a);
-
-void g10_log_bug( const char *fmt, ... );
-void g10_log_bug0( const char *, int );
-void g10_log_fatal( const char *fmt, ... );
-void g10_log_error( const char *fmt, ... );
-void g10_log_info( const char *fmt, ... );
-void g10_log_debug( const char *fmt, ... );
-void g10_log_hexdump( const char *text, char *buf, size_t len );
-void g10_log_mpidump( const char *text, MPI a );
-
-
-/***************************
- ******* constants *******
- **************************/
-#define CIPHER_ALGO_NONE 0
-#define CIPHER_ALGO_IDEA 1
-#define CIPHER_ALGO_3DES 2
-#define CIPHER_ALGO_CAST5 3
-#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
-#define CIPHER_ALGO_SAFER_SK128 5
-#define CIPHER_ALGO_DES_SK 6
-#define CIPHER_ALGO_BLOWFISH160 42 /* blowfish 160 bit key (not in OpenPGP)*/
-#define CIPHER_ALGO_DUMMY 110 /* no encryption at all */
-
-#define PUBKEY_ALGO_RSA 1
-#define PUBKEY_ALGO_RSA_E 2 /* RSA encrypt only */
-#define PUBKEY_ALGO_RSA_S 3 /* RSA sign only */
-#define PUBKEY_ALGO_ELGAMAL_E 16 /* encrypt only ElGamal (but not vor v3)*/
-#define PUBKEY_ALGO_DSA 17
-#define PUBKEY_ALGO_ELGAMAL 20 /* sign and encrypt elgamal */
-
-#define DIGEST_ALGO_MD5 1
-#define DIGEST_ALGO_SHA1 2
-#define DIGEST_ALGO_RMD160 3
-#define DIGEST_ALGO_TIGER 6
-
-#define is_RSA(a) ((a)==PUBKEY_ALGO_RSA || (a)==PUBKEY_ALGO_RSA_E \
- || (a)==PUBKEY_ALGO_RSA_S )
-#define is_ELGAMAL(a) ((a)==PUBKEY_ALGO_ELGAMAL || (a)==PUBKEY_ALGO_ELGAMAL_E)
-
-#define G10ERR_GENERAL 1
-#define G10ERR_PUBKEY_ALGO 4
-#define G10ERR_DIGEST_ALGO 5
-#define G10ERR_BAD_PUBKEY 6
-#define G10ERR_BAD_SECKEY 7
-#define G10ERR_BAD_SIGN 8
-#define G10ERR_CIPHER_ALGO 12
-#define G10ERR_WRONG_SECKEY 18
-#define G10ERR_UNSUPPORTED 19
-#define G10ERR_NI_PUBKEY 27
-#define G10ERR_NI_CIPHER 28
-#define G10ERR_BAD_MPI 30
-#define G10ERR_WR_PUBKEY_ALGO 41
-
-
-/***********************************
- ******* some handy macros *******
- ***********************************/
-
-#ifndef BUG
- #define BUG() g10_log_bug0( __FILE__ , __LINE__ )
-#endif
-
-#ifndef STR
- #define STR(v) #v
- #define STR2(v) STR(v)
-#endif
-
-#ifndef DIM
- #define DIM(v) (sizeof(v)/sizeof((v)[0]))
- #define DIMof(type,member) DIM(((type *)0)->member)
-#endif
-
-
-#define DBG_CIPHER g10c_debug_mode
-#define OPT_VERBOSE g10_opt_verbose
-
-#endif /* if 0 */
-
-
-#endif /* G10LIB_H */
diff --git a/src/gcrypt.h b/src/gcrypt.h
deleted file mode 100644
index 37947027..00000000
--- a/src/gcrypt.h
+++ /dev/null
@@ -1,295 +0,0 @@
-/* gcrypt.h - GNU digital encryption library interface
- * 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 _GCRYPT_H
-#define _GCRYPT_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#ifndef HAVE_BYTE_TYPEDEF
- #undef byte /* maybe there is a macro with this name */
- typedef unsigned char byte;
- #define HAVE_BYTE_TYPEDEF
-#endif
-
-/*******************************************
- * *
- * error handling etc. *
- * *
- *******************************************/
-
-enum {
- GCRYERR_SUCCESS = 0, /* "no error" */
- GCRYERR_GENERAL = 1, /* catch all the other errors code */
- GCRYERR_INV_OP = 2, /* invalid operation code or ctl command */
- GCRYERR_NOMEM = 3, /* out of core */
- GCRYERR_INV_ALGO = 4, /* invalid algorithm */
- GCRYERR_INV_ARG = 5, /* invalid argument */
- GCRYERR_INTERNAL = 6, /* internal error */
- GCRYERR_TOO_SHORT = 7, /* provided buffer too short */
- GCRYERR_EOF = 8, /* (-1) is remapped to this value */
-};
-
-
-int gcry_errno(void);
-const char *gcry_strerror( int ec );
-
-enum gcry_ctl_cmds {
- GCRYCTL_SET_KEY = 1,
- GCRYCTL_SET_IV = 2,
- GCRYCTL_CFB_SYNC = 3,
-};
-
-int gcry_control( enum gcry_ctl_cmds, ... );
-
-
-/*******************************************
- * *
- * multi precision integer functions *
- * *
- *******************************************/
-
-enum gcry_mpi_opcode {
- GCRYMPI_NOOP = 0,
- GCRYMPI_NEW = 1, /* use gcry_mpi_new() */
- GCRYMPI_SNEW = 2, /* use gcry_mpi_new() */
- GCRYMPI_RELEASE = 3,
- GCRYMPI_RESIZE = 4,
- GCRYMPI_COPY = 5, /* use gcry_mpi_new() */
- GCRYMPI_SWAP = 6,
- GCRYMPI_SET = 7,
- GCRYMPI_SET_UI = 8,
- GCRYMPI_CMP = 9,
- GCRYMPI_CMP_UI = 10
-};
-
-struct gcry_mpi;
-
-int gcry_mpi_api( enum gcry_mpi_opcode opcode, int n_args, ... );
-struct gcry_mpi *gcry_mpi_new( enum gcry_mpi_opcode opcode,
- unsigned int size,
- struct gcry_mpi *val
- );
-
-#ifndef GCRYPT_NO_MPI_MACROS
-#define mpi_new( nbits ) gcry_mpi_new( GCRYMPI_NEW, (nbits), NULL )
-#define mpi_secure_new( nbits ) gcry_mpi_new( GCRYMPI_SNEW, (nbits), NULL )
-#define mpi_release( a ) do { gcry_mpi_api( GCRYMPI_RELEASE, 1, (a) ); \
- (a) = NULL; } while(0)
-#define mpi_resize( a, n ) gcry_mpi_api( GCRYMPI_RESIZE, 2, (a), (n) )
-#define mpi_copy( a ) gcry_mpi_new( GCRYMPI_COPY, 0, (a) )
-#define mpi_swap( a, b ) gcyr_mpi_api( GCRYMPI_SWAP, 2, (a), (b) )
-/* void mpi_set( MPI w, MPI u ); */
-#define mpi_set( w, u) gcry_mpi_api( GCRYMPI_SET, 2, (w), (u) )
-/* void mpi_set_ui( MPI w, unsigned long u ); */
-#define mpi_set_ui( w, u) gcry_mpi_api( GCRYMPI_SET_UI, 2, (w), (u) )
-/* int mpi_cmp( MPI u, MPI v ); */
-#define mpi_cmp( u, v ) gcry_mpi_api( GCRYMPI_CMP, 2, (u), (v) )
-/* int mpi_cmp_ui( MPI u, unsigned long v ); */
-#define mpi_cmp_ui( u, v ) gcry_mpi_api( GCRYMPI_CMP_UI, 2, (u), (v) )
-
-#if 0
-void g10m_add(MPI w, MPI u, MPI v);
-void g10m_add_ui(MPI w, MPI u, unsigned long v );
-void g10m_sub( MPI w, MPI u, MPI v);
-void g10m_sub_ui(MPI w, MPI u, unsigned long v );
-
-void g10m_mul_ui(MPI w, MPI u, unsigned long v );
-void g10m_mul_2exp( MPI w, MPI u, unsigned long cnt);
-void g10m_mul( MPI w, MPI u, MPI v);
-void g10m_mulm( MPI w, MPI u, MPI v, MPI m);
-
-void g10m_fdiv_q( MPI quot, MPI dividend, MPI divisor );
-
-void g10m_powm( MPI res, MPI base, MPI exp, MPI mod);
-
-int g10m_gcd( MPI g, MPI a, MPI b );
-int g10m_invm( MPI x, MPI u, MPI v );
-
-unsigned g10m_get_nbits( MPI a );
-unsigned g10m_get_size( MPI a );
-
-void g10m_set_buffer( MPI a, const char *buffer, unsigned nbytes, int sign );
-#endif
-
-#endif /* GCRYPT_NO_MPI_MACROS */
-
-/********************************************
- ******* symmetric cipher functions *******
- ********************************************/
-
-struct gcry_cipher_context;
-typedef struct gcry_cipher_context *GCRY_CIPHER_HD;
-
-enum gcry_cipher_algos {
- GCRY_CIPHER_NONE = 0,
- GCRY_CIPHER_IDEA = 1,
- GCRY_CIPHER_3DES = 2,
- GCRY_CIPHER_CAST5 = 3,
- GCRY_CIPHER_BLOWFISH = 4,
- GCRY_CIPHER_SAFER_SK128 = 5,
- GCRY_CIPHER_DES_SK = 6
-};
-
-enum gcry_cipher_modes {
- GCRY_CIPHER_MODE_NONE = 0,
- GCRY_CIPHER_MODE_ECB = 1,
- GCRY_CIPHER_MODE_CFB = 2,
-};
-
-enum gcry_cipher_flags {
- GCRY_CIPHER_SECURE = 1, /* allocate in secure memory */
- GCRY_CIPHER_ENABLE_SYNC = 2, /* enable CFB sync mode */
-};
-
-
-#if 0 /* not yet done */
-int gcry_string_to_cipher_algo( const char *string );
-const char * gcry_cipher_algo_to_string( int algo );
-int gcry_check_cipher_algo( int algo );
-unsigned gcry_cipher_get_keylen( int algo );
-unsigned gcry_cipher_get_blocksize( int algo );
-#endif
-
-GCRY_CIPHER_HD gcry_cipher_open( int algo, int mode, unsigned flags );
-void gcry_cipher_close( GCRY_CIPHER_HD h );
-int gcry_cipher_ctl( GCRY_CIPHER_HD h, int cmd, byte *buffer, size_t buflen);
-
-int gcry_cipher_encrypt( GCRY_CIPHER_HD h, byte *out, size_t outsize,
- byte *in, size_t inlen );
-int gcry_cipher_decrypt( GCRY_CIPHER_HD h, byte *out, size_t outsize,
- byte *in, size_t inlen );
-
-
-/* some handy macros */
-#define gcry_cipher_setkey(h,k,l) gcry_cipher_ctl( (h), GCRYCTL_SET_KEY, \
- (k), (l) )
-#define gcry_cipher_setiv(h,k,l) gcry_cipher_ctl( (h), GCRYCTL_SET_IV, \
- (k), (l) )
-#define gcry_cipher_sync(h) gcry_cipher_ctl( (h), GCRYCTL_CFB_SYNC, \
- NULL, 0 )
-
-
-/*********************************************
- ******* asymmetric cipher functions *******
- *********************************************/
-
-
-
-
-/*********************************************
- ******* cryptograhic hash functions *******
- *********************************************/
-
-
-/*****************************************
- ******* miscellaneous functions *******
- *****************************************/
-
-#if 0
-const char *g10m_revision_string(int mode);
-const char *g10c_revision_string(int mode);
-const char *g10u_revision_string(int mode);
-
-MPI g10c_generate_secret_prime( unsigned nbits );
-char *g10c_get_random_bits( unsigned nbits, int level, int secure );
-
-
-void *g10_malloc( size_t n );
-void *g10_calloc( size_t n );
-void *g10_malloc_secure( size_t n );
-void *g10_calloc_secure( size_t n );
-void *g10_realloc( void *a, size_t n );
-void g10_free( void *p );
-char *g10_strdup( const char * a);
-
-void g10_log_bug( const char *fmt, ... );
-void g10_log_bug0( const char *, int );
-void g10_log_fatal( const char *fmt, ... );
-void g10_log_error( const char *fmt, ... );
-void g10_log_info( const char *fmt, ... );
-void g10_log_debug( const char *fmt, ... );
-void g10_log_hexdump( const char *text, char *buf, size_t len );
-void g10_log_mpidump( const char *text, MPI a );
-#endif
-
-/***************************
- ******* constants *******
- **************************/
-#if 0
-#define CIPHER_ALGO_NONE 0
-#define CIPHER_ALGO_IDEA 1
-#define CIPHER_ALGO_3DES 2
-#define CIPHER_ALGO_CAST5 3
-#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
-#define CIPHER_ALGO_SAFER_SK128 5
-#define CIPHER_ALGO_DES_SK 6
-#define CIPHER_ALGO_BLOWFISH160 42 /* blowfish 160 bit key (not in OpenPGP)*/
-#define CIPHER_ALGO_DUMMY 110 /* no encryption at all */
-
-#define PUBKEY_ALGO_RSA 1
-#define PUBKEY_ALGO_RSA_E 2 /* RSA encrypt only */
-#define PUBKEY_ALGO_RSA_S 3 /* RSA sign only */
-#define PUBKEY_ALGO_ELGAMAL_E 16 /* encrypt only ElGamal (but not vor v3)*/
-#define PUBKEY_ALGO_DSA 17
-#define PUBKEY_ALGO_ELGAMAL 20 /* sign and encrypt elgamal */
-
-#define DIGEST_ALGO_MD5 1
-#define DIGEST_ALGO_SHA1 2
-#define DIGEST_ALGO_RMD160 3
-#define DIGEST_ALGO_TIGER 6
-
-#define is_RSA(a) ((a)==PUBKEY_ALGO_RSA || (a)==PUBKEY_ALGO_RSA_E \
- || (a)==PUBKEY_ALGO_RSA_S )
-#define is_ELGAMAL(a) ((a)==PUBKEY_ALGO_ELGAMAL || (a)==PUBKEY_ALGO_ELGAMAL_E)
-
-#define G10ERR_GENERAL 1
-#define G10ERR_PUBKEY_ALGO 4
-#define G10ERR_DIGEST_ALGO 5
-#define G10ERR_BAD_PUBKEY 6
-#define G10ERR_BAD_SECKEY 7
-#define G10ERR_BAD_SIGN 8
-#define G10ERR_CIPHER_ALGO 12
-#define G10ERR_WRONG_SECKEY 18
-#define G10ERR_UNSUPPORTED 19
-#define G10ERR_NI_PUBKEY 27
-#define G10ERR_NI_CIPHER 28
-#define G10ERR_BAD_MPI 30
-#define G10ERR_WR_PUBKEY_ALGO 41
-#endif
-
-/***********************************************
- * *
- * Some very handy macros *
- * *
- ***********************************************/
-#ifndef GCRYPT_NO_MPI_MACROS
-
-typedef struct gcry_mpi *MPI;
-
-
-#endif /* GCRYPT_NO_MPI_MACROS */
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _GCRYPT_H */
diff --git a/src/global.c b/src/global.c
deleted file mode 100644
index 7c5e21b8..00000000
--- a/src/global.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* global.c - global control functions
- * 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 <string.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "g10lib.h"
-
-static int last_ec; /* fixme: make thread safe */
-
-
-int
-gcry_control( enum gcry_ctl_cmds cmd, ... )
-{
- #if 0
- switch( cmd ) {
- case GCRYCTL_NO_MEM_IS_FATAL:
- break;
- case GCRYCTL_SET_FATAL_FNC:
- break;
- }
- #endif
- return GCRYERR_INV_OP;
-}
-
-int
-gcry_errno()
-{
- return last_ec;
-}
-
-const char*
-gcry_strerror( int ec )
-{
- const char *s;
- static char buf[20];
-
- if( ec == -1 )
- ec = gcry_errno();
- switch( ec ) {
- default:
- sprintf( buf, "ec=%d", ec );
- s = buf;
- }
- return s;
-}
-
-
-int
-set_lasterr( int ec )
-{
- if( ec )
- last_ec = ec == -1 ? GCRYERR_EOF : ec;
- return ec;
-}
-
-
diff --git a/src/mdapi.c b/src/mdapi.c
deleted file mode 100644
index 8c1a6342..00000000
--- a/src/mdapi.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* mdapi.c - message digest function interface
- * 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 <string.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "g10lib.h"
-
-
-
diff --git a/src/misc.c b/src/misc.c
deleted file mode 100644
index e1e135cc..00000000
--- a/src/misc.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* misc.c - symmetric cipher function interface
- * 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 <string.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "g10lib.h"
-
-
-const char *
-g10_gettext( const char *key )
-{
- /* switch the domain to gnupg and restore later */
- return key;
-}
-
-
-
-/****************
- * This function is here as a default fatal error
- * handler. The caller might want to use his own.
- */
-int
-fatal_invalid_arg(const char *text)
-{
- /*log_error("Fatal error: %s\n", text );*/
- return GCRYERR_INV_ARG;
-}
-
diff --git a/src/mpiapi.c b/src/mpiapi.c
deleted file mode 100644
index 041d34c8..00000000
--- a/src/mpiapi.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* mpiapi.a - MPI function interface
- * 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 <string.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#define GCRYPT_NO_MPI_MACROS 1
-#include "g10lib.h"
-#include "mpi.h"
-
-
-
-int
-gcry_mpi_api( enum gcry_mpi_opcode opcode, int n_args, ... )
-{
- switch( opcode ) {
- case GCRYMPI_NOOP:
- return 0;
-
- default:
- return GCRYERR_INV_OP;
- }
-}
-
-
-struct gcry_mpi *
-gcry_mpi_new( enum gcry_mpi_opcode opcode,
- unsigned int nbits, struct gcry_mpi *val)
-{
- switch( opcode ) {
- case GCRYMPI_NEW:
- return mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB );
-
- case GCRYMPI_SNEW:
- return mpi_alloc_secure( (nbits+BITS_PER_MPI_LIMB-1)
- / BITS_PER_MPI_LIMB );
- case GCRYMPI_COPY:
- return mpi_copy( val );
-
- default:
- return NULL;
- }
-}
-
diff --git a/src/pkapi.c b/src/pkapi.c
deleted file mode 100644
index e3d900a6..00000000
--- a/src/pkapi.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* pkapi.c - public key function interface
- * 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 <string.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "g10lib.h"
-
-
-
diff --git a/src/symapi.c b/src/symapi.c
deleted file mode 100644
index ffe967a5..00000000
--- a/src/symapi.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* symapi.c - symmetric cipher function interface
- * 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
- */
-
-/* fixme: merge this function with ../cipher/cipher.c */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#include "g10lib.h"
-#define G10_MPI_H /* fake mpi.h header */
-#include "cipher.h"
-
-
-#define CONTEXT_MAGIC 0x12569afe
-
-struct gcry_cipher_context {
- u32 magic;
- int mode;
- unsigned flags;
- CIPHER_HANDLE hd;
-};
-
-
-GCRY_CIPHER_HD
-gcry_cipher_open( int algo, int mode, unsigned flags )
-{
- GCRY_CIPHER_HD h;
-
- /* check whether the algo is available */
- if( check_cipher_algo( algo ) ) {
- set_lasterr( GCRYERR_INV_ALGO );
- return NULL;
- }
- /* check flags */
- if( (flags & ~(GCRY_CIPHER_SECURE|GCRY_CIPHER_ENABLE_SYNC)) ) {
- set_lasterr( GCRYERR_INV_ARG );
- return NULL;
- }
-
- /* map mode to internal mode */
- switch( mode ) {
- case GCRY_CIPHER_MODE_NONE: mode = CIPHER_MODE_DUMMY; break;
- case GCRY_CIPHER_MODE_ECB: mode = CIPHER_MODE_ECB; break;
- case GCRY_CIPHER_MODE_CFB:
- mode = (flags & GCRY_CIPHER_ENABLE_SYNC) ? CIPHER_MODE_PHILS_CFB
- : CIPHER_MODE_CFB;
- break;
- default:
- set_lasterr( GCRYERR_INV_ALGO );
- return NULL;
- }
-
- /* allocate the handle */
- h = m_lib_alloc_clear( sizeof *h );
- if( !h ) {
- set_lasterr( GCRYERR_NOMEM );
- return NULL;
- }
- h->magic = CONTEXT_MAGIC;
- h->mode = mode;
- h->hd = cipher_open( algo, mode, (flags & GCRY_CIPHER_SECURE) );
- if( !h ) {
- m_lib_free( h );
- set_lasterr( GCRYERR_INTERNAL );
- return NULL;
- }
-
- return h;
-}
-
-
-void
-gcry_cipher_close( GCRY_CIPHER_HD h )
-{
- if( !h )
- return;
- if( h->magic != CONTEXT_MAGIC ) {
- fatal_invalid_arg("gcry_cipher_close: already closed/invalid handle");
- return;
- }
- cipher_close( h->hd );
- h->magic = 0;
- m_lib_free(h);
-}
-
-int gcry_cipher_ctl( GCRY_CIPHER_HD h, int cmd, byte *buffer, size_t buflen)
-{
- switch( cmd ) {
- case GCRYCTL_SET_KEY:
- cipher_setkey( h->hd, buffer, buflen );
- break;
- case GCRYCTL_SET_IV:
- cipher_setiv( h->hd, buffer );
- break;
- case GCRYCTL_CFB_SYNC:
- cipher_sync( h->hd );
- default:
- return set_lasterr( GCRYERR_INV_OP );
- }
- return 0;
-}
-
-
-int
-gcry_cipher_encrypt( GCRY_CIPHER_HD h, byte *out, size_t outsize,
- byte *in, size_t inlen )
-{
- if( outsize < inlen )
- return set_lasterr( GCRYERR_TOO_SHORT );
- cipher_encrypt( h->hd, out, in, inlen );
- return 0;
-}
-
-int
-gcry_cipher_decrypt( GCRY_CIPHER_HD h, byte *out, size_t outsize,
- byte *in, size_t inlen )
-{
- if( outsize < inlen )
- return set_lasterr( GCRYERR_TOO_SHORT );
- cipher_decrypt( h->hd, out, in, inlen );
- return 0;
-}
-
diff --git a/stamp-h.in b/stamp-h.in
deleted file mode 100644
index 9788f702..00000000
--- a/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp