base
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
mhash AUTHORS
|
||||
===============================================================================
|
||||
|
||||
The authors of libmhash are
|
||||
|
||||
Nikos Mavroyanopoulos <nmav@hellug.gr>
|
||||
Sascha Schumann <sascha@schumann.cx>
|
||||
|
||||
The library was originaly created by Nikos Mavroyanopoulos sometime
|
||||
in 1998. Many new features and algorithms were added by Sascha Schumann,
|
||||
who maintained it from May 1999 to March 2000.
|
||||
The library is now maintained again by Nikos Mavroyanopoulos.
|
||||
|
||||
@@ -0,0 +1,482 @@
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 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.
|
||||
|
||||
[This is the first released version of the library GPL. It is
|
||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Library General Public License, applies to some
|
||||
specially designated Free Software Foundation software, and to any
|
||||
other libraries whose authors decide to use it. You can use it for
|
||||
your libraries, 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 library, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link a program with the library, you must provide
|
||||
complete object files to the recipients so that they can relink them
|
||||
with the library, after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
Our method of protecting your rights has two steps: (1) copyright
|
||||
the library, and (2) offer you this license which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
Also, for each distributor's protection, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
library. If the library is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original
|
||||
version, 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 companies distributing free
|
||||
software will individually obtain patent licenses, thus in effect
|
||||
transforming the program into proprietary software. To prevent this,
|
||||
we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary
|
||||
GNU General Public License, which was designed for utility programs. This
|
||||
license, the GNU Library General Public License, applies to certain
|
||||
designated libraries. This license is quite different from the ordinary
|
||||
one; be sure to read it in full, and don't assume that anything in it is
|
||||
the same as in the ordinary license.
|
||||
|
||||
The reason we have a separate public license for some libraries is that
|
||||
they blur the distinction we usually make between modifying or adding to a
|
||||
program and simply using it. Linking a program with a library, without
|
||||
changing the library, is in some sense simply using the library, and is
|
||||
analogous to running a utility program or application program. However, in
|
||||
a textual and legal sense, the linked executable is a combined work, a
|
||||
derivative of the original library, and the ordinary General Public License
|
||||
treats it as such.
|
||||
|
||||
Because of this blurred distinction, using the ordinary General
|
||||
Public License for libraries did not effectively promote software
|
||||
sharing, because most developers did not use the libraries. We
|
||||
concluded that weaker conditions might promote sharing better.
|
||||
|
||||
However, unrestricted linking of non-free programs would deprive the
|
||||
users of those programs of all benefit from the free status of the
|
||||
libraries themselves. This Library General Public License is intended to
|
||||
permit developers of non-free programs to use free libraries, while
|
||||
preserving your freedom as a user of such programs to change the free
|
||||
libraries that are incorporated in them. (We have not seen how to achieve
|
||||
this as regards changes in header files, but we have achieved it as regards
|
||||
changes in the actual functions of the Library.) The hope is that this
|
||||
will lead to faster development of free libraries.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, while the latter only
|
||||
works together with the library.
|
||||
|
||||
Note that it is possible for a library to be covered by the ordinary
|
||||
General Public License rather than by this special one.
|
||||
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library which
|
||||
contains a notice placed by the copyright holder or other authorized
|
||||
party saying it may be distributed under the terms of this Library
|
||||
General Public License (also called "this License"). Each licensee is
|
||||
addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, 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 library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete 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 distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
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 Library or any portion
|
||||
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
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 Library, 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 Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you 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.
|
||||
|
||||
If distribution of 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 satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also compile or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
c) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
d) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. 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.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library 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.
|
||||
|
||||
9. 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 Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
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.
|
||||
|
||||
11. 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 Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library 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 Library.
|
||||
|
||||
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.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library 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.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Library 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 Library
|
||||
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 Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
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
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "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
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. 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 LIBRARY 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
|
||||
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. 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 library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This 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.
|
||||
|
||||
This 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 this library; 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.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@@ -0,0 +1,619 @@
|
||||
2007-04-02 12:00 imipak
|
||||
Since the symbol clashes, it has mostly been endian and alignment
|
||||
problems, although some compiler warnings have been squished as well.
|
||||
|
||||
2007-02-20 12:00 imipak
|
||||
Fixed symbol clashes. This will probably be revisited, but any future
|
||||
scheme will transparently use the masking scheme present in this
|
||||
edition.
|
||||
|
||||
2007-02-10 12:00 imipak
|
||||
|
||||
Well, Michael Schwendt did it again. He's provided a set of patches
|
||||
to solve the Haval endian problem, which are included. He also polished
|
||||
off some memory leaks that had been hitherto undetected. All kudos and
|
||||
Slashdot mod points to him for his excellent work. (Now all I have to
|
||||
figure out is how to port this code to the Amiga...)
|
||||
|
||||
2006-01-01 12:00 imipak
|
||||
|
||||
Virtually all files impacted by forcing unsigned types for unsigned
|
||||
data. Isolated C library calls, will probably steal reimplementations
|
||||
of these functions so that mhash will sit better on embedded platforms.
|
||||
|
||||
2002-10-03 13:01 nmav
|
||||
|
||||
* lib/keygen_s2k.c:
|
||||
|
||||
Corrected bug which caused memory leaks. Patch by bob mathews
|
||||
(bobmathews@alumni.calpoly.edu)
|
||||
|
||||
2002-10-03 12:55 nmav
|
||||
|
||||
* src/hmac_test.c:
|
||||
|
||||
Corrected wrong use of sizeof(). Reported by Ellis Pritchard
|
||||
(ellispritchard@users.sf.net)
|
||||
|
||||
2002-09-02 20:59 nmav
|
||||
|
||||
* NEWS, lib/keygen_hex.c, lib/mhash.c:
|
||||
|
||||
corrected the HEX key generator. Refuses hex strings longer than the
|
||||
key
|
||||
|
||||
2002-05-26 17:46 nmav
|
||||
|
||||
* NEWS, acconfig.h (tags: mhash_0_8_16), configure.in (tags:
|
||||
mhash_0_8_16), lib/adler32.c (tags: mhash_0_8_16), lib/crc32.c
|
||||
(tags: mhash_0_8_16), lib/gosthash.c (tags: mhash_0_8_16),
|
||||
lib/haval.c (tags: mhash_0_8_16), lib/md4.c (tags: mhash_0_8_16),
|
||||
lib/md5.c (tags: mhash_0_8_16), lib/mhash.c (tags: mhash_0_8_16),
|
||||
lib/mhash_int.h (tags: mhash_0_8_16), lib/ripemd.c (tags:
|
||||
mhash_0_8_16), lib/sha1.c (tags: mhash_0_8_16), lib/sha256.c (tags:
|
||||
mhash_0_8_16), lib/tiger.c (tags: mhash_0_8_16), lib/tiger_sboxes.c
|
||||
(tags: mhash_0_8_16):
|
||||
|
||||
added configure time options to disable certain algorithms
|
||||
|
||||
2002-05-26 17:08 nmav
|
||||
|
||||
* NEWS, configure.in, lib/adler32.c, lib/crc32.c, lib/haval.c,
|
||||
lib/md4.c, lib/md5.c, lib/mhash.c, lib/mhash_adler32.h (tags:
|
||||
mhash_0_8_16), lib/mhash_crc32.h (tags: mhash_0_8_16),
|
||||
lib/mhash_haval.h (tags: mhash_0_8_16), lib/mhash_md4.h (tags:
|
||||
mhash_0_8_16), lib/mhash_md5.h (tags: mhash_0_8_16),
|
||||
src/hmac_test.c (tags: mhash_0_8_16):
|
||||
|
||||
Cleaned the code up. Less code now in mhash.c.
|
||||
|
||||
2002-05-24 14:25 nmav
|
||||
|
||||
* lib/keygen_s2k.c:
|
||||
|
||||
Corrected s2k-iterated
|
||||
|
||||
2002-05-17 11:26 nmav
|
||||
|
||||
* lib/gosthash.c (tags: mhash_0_8_15):
|
||||
|
||||
cleaned up
|
||||
|
||||
2002-05-17 11:25 nmav
|
||||
|
||||
* lib/mhash_gost.h (tags: mhash_0_8_16, mhash_0_8_15):
|
||||
|
||||
Cleaned up
|
||||
|
||||
2002-05-16 22:45 nmav
|
||||
|
||||
* THANKS (tags: mhash_0_8_16, mhash_0_8_15), lib/crc32.c (tags:
|
||||
mhash_0_8_15), lib/gosthash.c, lib/keygen.c (tags: mhash_0_8_16,
|
||||
mhash_0_8_15), lib/mhash.c, lib/tiger.c (tags: mhash_0_8_15),
|
||||
lib/tiger_sboxes.c (tags: mhash_0_8_15), src/driver.c (tags:
|
||||
mhash_0_8_16, mhash_0_8_15):
|
||||
|
||||
Added const to all fixed tables. Pointed out by Darryl Miles
|
||||
<darryl@netbauds.net>.
|
||||
|
||||
2002-03-11 18:55 nmav
|
||||
|
||||
* Makefile.am (tags: mhash_0_8_16, mhash_0_8_15), NEWS, THANKS,
|
||||
lib/gosthash.c:
|
||||
|
||||
fixed bug in gost. Pointed out by Mike Gorchak
|
||||
|
||||
2002-03-10 10:29 nmav
|
||||
|
||||
* Makefile.am, NEWS, configure.in, mhash.spec, mhash.spec.in:
|
||||
|
||||
added mhash.spec.in
|
||||
|
||||
2002-03-09 19:16 nmav
|
||||
|
||||
* mhash.spec:
|
||||
|
||||
added mhash.spec by Germano Rizzo <mano@pluto.linux.it>
|
||||
|
||||
2002-02-12 11:46 nmav
|
||||
|
||||
* lib/mhash.h:
|
||||
|
||||
corrected keygen_id prototype
|
||||
|
||||
2002-02-10 10:10 nmav
|
||||
|
||||
* NEWS, THANKS, lib/mhash.c:
|
||||
|
||||
corrected some memory leaks. Patch by Gustavo Niemeyer.
|
||||
|
||||
2002-01-26 09:09 nmav
|
||||
|
||||
* NEWS, doc/mhash.pod (tags: mhash_0_8_16, mhash_0_8_15),
|
||||
lib/adler32.c (tags: mhash_0_8_15), lib/crc32.c, lib/gosthash.c,
|
||||
lib/keygen_asis.c (tags: mhash_0_8_16, mhash_0_8_15),
|
||||
lib/keygen_hex.c (tags: mhash_0_8_16, mhash_0_8_15),
|
||||
lib/keygen_mcrypt.c (tags: mhash_0_8_16, mhash_0_8_15),
|
||||
lib/keygen_s2k.c, lib/md4.c (tags: mhash_0_8_15), lib/md5.c (tags:
|
||||
mhash_0_8_15), lib/mhash.c, lib/ripemd.c (tags: mhash_0_8_15),
|
||||
lib/sha1.c (tags: mhash_0_8_15), lib/sha256.c (tags: mhash_0_8_15),
|
||||
lib/tiger.c:
|
||||
|
||||
mhash_deinit() and mhash_hmac_deinit() can now accept null digest
|
||||
parameter.
|
||||
|
||||
2001-11-19 11:52 nmav
|
||||
|
||||
* lib/: haval.c (tags: mhash_0_8_15), keygen_asis.c,
|
||||
keygen_mcrypt.c, mhash.c, mhash_tiger.h (tags: mhash_0_8_16,
|
||||
mhash_0_8_15), ripemd.c, tiger.c, tiger_sboxes.c:
|
||||
|
||||
several cleanups
|
||||
|
||||
2001-11-12 14:14 nmav
|
||||
|
||||
* NEWS, lib/Makefile.am, lib/adler32.c, lib/mhash.c, lib/mhash.h,
|
||||
lib/mhash_adler32.h (tags: mhash_0_8_15), lib/mhash_int.h (tags:
|
||||
mhash_0_8_15) (utags: libmhash_0_8_13):
|
||||
|
||||
added adler32 algorithm
|
||||
|
||||
2001-10-27 09:42 nmav
|
||||
|
||||
* NEWS, configure.in (tags: mhash_0_8_12_1, mhash_0_8_12),
|
||||
lib/Makefile.am (tags: mhash_0_8_12_1, mhash_0_8_12), lib/mhash.c
|
||||
(tags: mhash_0_8_12_1, mhash_0_8_12), lib/mhash.h (tags:
|
||||
mhash_0_8_12_1, mhash_0_8_12), lib/mhash_int.h (tags:
|
||||
mhash_0_8_12_1, mhash_0_8_12), lib/mhash_sha1.h (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12), lib/mhash_sha256.h (tags: mhash_0_8_16,
|
||||
mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12),
|
||||
lib/sha1.c (tags: libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12),
|
||||
lib/sha256.c (tags: libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12),
|
||||
src/hash_test.sh (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12):
|
||||
|
||||
added SHA-256
|
||||
|
||||
2001-10-26 10:47 nmav
|
||||
|
||||
* lib/: keygen.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12), mhash.c:
|
||||
|
||||
corrected bug in get_name()
|
||||
|
||||
2001-10-23 09:14 nmav
|
||||
|
||||
* lib/libmhash.sym, src/mhash_save_restore_test.c (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13) (utags:
|
||||
mhash_0_8_12_1, mhash_0_8_12):
|
||||
|
||||
corrected bugs
|
||||
|
||||
2001-10-19 21:46 nmav
|
||||
|
||||
* NEWS, configure.in (tags: mhash_0_8_11), doc/mhash.pod (tags:
|
||||
mhash_0_8_11), lib/keygen.c (tags: mhash_0_8_11), lib/mhash.c
|
||||
(tags: mhash_0_8_11), lib/mhash.h, src/mhash_save_restore_test.c:
|
||||
|
||||
Added mhash_get_name_static() Corrected mhash_get_name() and
|
||||
mhash_count()
|
||||
|
||||
2001-10-16 18:19 nmav
|
||||
|
||||
* NEWS, THANKS (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11), doc/mhash.pod, lib/libmhash.sym (tags:
|
||||
mhash_0_8_11), lib/mhash.c, lib/mhash.h, src/Makefile.am (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11), src/mhash_save_restore_test.c:
|
||||
|
||||
added capability to save/restore the mhash state. Initial patches
|
||||
and ideas by Blake Stephen <Stephen.Blake@veritect.com>
|
||||
|
||||
2001-09-21 13:49 nmav
|
||||
|
||||
* doc/mhash.pod, lib/haval.c (tags: libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11), lib/keygen.c,
|
||||
lib/libdefs.h (tags: mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11), lib/mhash.c,
|
||||
lib/mhash.h, lib/mhash_int.h (tags: mhash_0_8_11):
|
||||
|
||||
some fixes in included files
|
||||
|
||||
2001-09-09 09:58 nmav
|
||||
|
||||
* NEWS, doc/mhash.pod, lib/keygen.c, lib/mhash.c, lib/mhash.h,
|
||||
lib/mhash_int.h:
|
||||
|
||||
mhash_*_get_name() return a constant string
|
||||
|
||||
2001-07-12 15:34 nmav
|
||||
|
||||
* configure.in, src/driver.c (tags: libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11) (utags: mhash_0_8_10):
|
||||
|
||||
moving to mhash 0.8.10
|
||||
|
||||
2001-07-09 07:24 nmav
|
||||
|
||||
* lib/: libmhash.sym (tags: mhash_0_8_10), mhash.c (tags:
|
||||
mhash_0_8_10), mhash.h:
|
||||
|
||||
added functions to allow non-malloced results
|
||||
|
||||
2001-05-10 07:03 nmav
|
||||
|
||||
* src/hash_test.sh (tags: mhash_0_8_11, mhash_0_8_10):
|
||||
|
||||
tr fixes
|
||||
|
||||
2001-04-25 09:59 nmav
|
||||
|
||||
* src/hash_test.sh:
|
||||
|
||||
all outputs in hash_test are now specified in upper case
|
||||
|
||||
2001-04-06 12:44 nmav
|
||||
|
||||
* src/hash_test.sh:
|
||||
|
||||
corrected some case problems
|
||||
|
||||
2001-02-24 22:41 nmav
|
||||
|
||||
* src/hash_test.sh:
|
||||
|
||||
fixed a case problem
|
||||
|
||||
2001-02-11 19:33 nmav
|
||||
|
||||
* TODO (tags: mhash_0_8_11, mhash_0_8_10):
|
||||
|
||||
updated todo list
|
||||
|
||||
2001-02-10 11:43 nmav
|
||||
|
||||
* doc/mhash.pod:
|
||||
|
||||
updated information for md4
|
||||
|
||||
2001-02-04 12:06 nmav
|
||||
|
||||
* NEWS, README (tags: mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10),
|
||||
doc/mhash.pod, lib/mhash.h:
|
||||
|
||||
updated documentation
|
||||
|
||||
2001-02-04 10:29 nmav
|
||||
|
||||
* doc/: Makefile.am, example.c (utags: mhash_0_8_12_1,
|
||||
mhash_0_8_16, libmhash_0_8_13, mhash_0_8_12, mhash_0_8_15,
|
||||
mhash_0_8_10, mhash_0_8_11):
|
||||
|
||||
added example program
|
||||
|
||||
2001-02-04 10:23 nmav
|
||||
|
||||
* lib/tiger_sboxes.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9):
|
||||
|
||||
removed 64 bit version of tiger tables
|
||||
|
||||
2001-02-01 18:38 nmav
|
||||
|
||||
* NEWS, configure.in (tags: mhash_0_8_9):
|
||||
|
||||
moving to 0.8.9
|
||||
|
||||
2001-02-01 18:30 nmav
|
||||
|
||||
* lib/tiger_sboxes.c:
|
||||
|
||||
removed support for 64 bit
|
||||
|
||||
2001-01-29 09:46 nmav
|
||||
|
||||
* lib/mhash_tiger.h (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9):
|
||||
|
||||
removed 64bit version
|
||||
|
||||
2001-01-28 22:05 nmav
|
||||
|
||||
* doc/skid2-authentication (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9):
|
||||
|
||||
corrected
|
||||
|
||||
2001-01-26 00:44 nmav
|
||||
|
||||
* lib/: md4.c, md5.c (utags: mhash_0_8_12_1, libmhash_0_8_13,
|
||||
mhash_0_8_12, mhash_0_8_9, mhash_0_8_10, mhash_0_8_7,
|
||||
mhash_0_8_11):
|
||||
|
||||
made a function static so it does not cause problems in big endian
|
||||
systems
|
||||
|
||||
2001-01-24 08:20 nmav
|
||||
|
||||
* lib/: md4.c, md5.c, sha1.c (tags: mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
some speedups
|
||||
|
||||
2001-01-24 08:14 nmav
|
||||
|
||||
* doc/: Makefile.am (tags: mhash_0_8_9), mhash.pod (tags:
|
||||
mhash_0_8_9), skid2-authentication (utags: mhash_0_8_7):
|
||||
|
||||
added document that describes skid2 authentication protocol
|
||||
|
||||
2001-01-21 19:31 nmav
|
||||
|
||||
* lib/: tiger.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11), haval.c (utags: mhash_0_8_9,
|
||||
mhash_0_8_10, mhash_0_8_7):
|
||||
|
||||
removed unneeded functions
|
||||
|
||||
2001-01-21 19:30 nmav
|
||||
|
||||
* ChangeLog, NEWS, README (tags: mhash_0_8_9, mhash_0_8_7), TODO
|
||||
(tags: mhash_0_8_9, mhash_0_8_7), buildconf (tags: mhash_0_8_16,
|
||||
mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7),
|
||||
lib/Makefile.am, lib/keygen_hex.c (tags: libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7), lib/md5.c, lib/mhash_md5.h (tags:
|
||||
mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7),
|
||||
lib/mhash_tiger.h, lib/tiger.c, src/hash_test.sh (tags:
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
changes for MD4, TIGER160 and TIGER128
|
||||
|
||||
2001-01-21 19:28 nmav
|
||||
|
||||
* lib/: mhash.h, mhash_int.h (tags: mhash_0_8_10) (utags:
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
added MD4, TIGER160, TIGER128
|
||||
|
||||
2001-01-21 19:27 nmav
|
||||
|
||||
* lib/mhash.c (tags: mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
added MD4, TIGER128 and TIGER160
|
||||
|
||||
2001-01-21 19:27 nmav
|
||||
|
||||
* lib/: md4.c, mhash_md4.h (tags: mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
Added MD4 algorithm
|
||||
|
||||
2001-01-21 17:17 nmav
|
||||
|
||||
* NEWS:
|
||||
|
||||
more news!
|
||||
|
||||
2001-01-21 17:14 nmav
|
||||
|
||||
* src/hash_test.sh:
|
||||
|
||||
corrected tiger vectors
|
||||
|
||||
2001-01-21 17:13 nmav
|
||||
|
||||
* lib/: gosthash.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), mhash.c, mhash_tiger.h, ripemd.c (tags:
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), tiger.c, tiger_sboxes.c:
|
||||
|
||||
corrected tiger implementation and minor fixes
|
||||
|
||||
2001-01-03 22:10 nmav
|
||||
|
||||
* lib/keygen_s2k.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7):
|
||||
|
||||
more fixes
|
||||
|
||||
2001-01-03 21:55 nmav
|
||||
|
||||
* lib/: keygen_mcrypt.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), keygen_s2k.c, mhash.c:
|
||||
|
||||
Corrected bugs reported by: sami Farin <sfarin@ratol.fi> Joe Hohertz
|
||||
<jhohertz@wiretap.net>
|
||||
|
||||
2000-12-15 13:42 nmav
|
||||
|
||||
* lib/crc32.c (tags: libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
removed deprecated comments
|
||||
|
||||
2000-12-15 12:43 nmav
|
||||
|
||||
* lib/crc-32b.c:
|
||||
|
||||
crc32b was moved to crc32.c
|
||||
|
||||
2000-12-15 12:42 nmav
|
||||
|
||||
* NEWS, configure.in, doc/mhash.pod, lib/libmhash.sym (tags:
|
||||
mhash_0_8_9, mhash_0_8_7), lib/mhash.c, lib/mhash.h,
|
||||
lib/mhash_int.h:
|
||||
|
||||
added new functions
|
||||
|
||||
2000-12-15 12:11 nmav
|
||||
|
||||
* lib/: Makefile.am, crc-32b.c, crc32.c, gosthash.c, gosthash.h
|
||||
(tags: libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), mhash.c, mhash_crc32.h
|
||||
(tags: mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
CRC32B and GOST are now thread safe - and use less initialization
|
||||
time.
|
||||
|
||||
2000-10-30 13:13 nmav
|
||||
|
||||
* NEWS, configure.in, doc/mhash.pod, lib/crc32.c, lib/mhash.c,
|
||||
lib/mhash_crc32.h:
|
||||
|
||||
Added mhash_end_m() and mhash_hmac_end_m() functions.
|
||||
|
||||
2000-10-26 13:37 nmav
|
||||
|
||||
* NEWS, configure.in, lib/keygen.c (tags: mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7), lib/mhash.c, lib/mhash_int.h,
|
||||
src/keygen_test.c (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
More win32 changes
|
||||
|
||||
2000-10-24 23:07 nmav
|
||||
|
||||
* lib/: keygen.c, keygen_asis.c (tags: libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
corrected bug in the KEYGEN_ASIS transformation
|
||||
|
||||
2000-10-20 14:32 nmav
|
||||
|
||||
* NEWS, configure.in, lib/Makefile.am, lib/keygen.c, lib/libdefs.h
|
||||
(tags: mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), lib/mhash.c:
|
||||
|
||||
changes for WIN32
|
||||
|
||||
2000-05-10 19:55 nmav
|
||||
|
||||
* TODO:
|
||||
|
||||
updated TODO list
|
||||
|
||||
2000-05-10 05:46 nmav
|
||||
|
||||
* lib/mhash.c:
|
||||
|
||||
Corrected memory leaks in HMAC. Patches by Marios Hadjieleftheriou
|
||||
<marioh@cs.ucr.edu>
|
||||
|
||||
2000-04-14 19:09 nmav
|
||||
|
||||
* lib/mhash.c, lib/mhash.h, lib/mhash_int.h, src/hash_test.sh:
|
||||
|
||||
Added HAVAL224
|
||||
|
||||
2000-04-11 12:11 nmav
|
||||
|
||||
* lib/mhash.c:
|
||||
|
||||
Corrected hmac implementation.
|
||||
|
||||
2000-04-11 11:58 nmav
|
||||
|
||||
* configure.in, doc/Makefile.am, doc/md2-rfc1319.txt,
|
||||
doc/md2.license, doc/mhash.pod, lib/Makefile.am, lib/md2c.c,
|
||||
lib/mhash.c, lib/mhash.h, lib/mhash_int.h, lib/mhash_md2.h,
|
||||
src/hash_test.sh:
|
||||
|
||||
MD2 algorithm was removed.
|
||||
|
||||
2000-04-09 10:18 nmav
|
||||
|
||||
* configure.in, doc/mhash.pod, lib/mhash.h, lib/mhash_int.h,
|
||||
lib/snefru.c:
|
||||
|
||||
snefru was removed.
|
||||
|
||||
2000-04-06 22:19 nmav
|
||||
|
||||
* src/: driver.c (tags: mhash_0_8_9, mhash_0_8_7), hmac_test.c
|
||||
(tags: mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), keygen_test.c:
|
||||
|
||||
Corrected problem in the includes.
|
||||
|
||||
2000-04-04 10:34 nmav
|
||||
|
||||
* .cvsignore, AUTHORS (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), COPYING (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), ChangeLog, INSTALL (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), Makefile.am, NEWS, README,
|
||||
TODO, acconfig.h, acinclude.m4 (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), buildconf,
|
||||
changelog-update.sh (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), mhash.spec (tags:
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), doc/.cvsignore (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), doc/Makefile.am, doc/md2.license, doc/md5-rfc1321.txt
|
||||
(tags: mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), doc/mhash.pod, doc/md2-rfc1319.txt, lib/Makefile.am,
|
||||
lib/bzero.c (tags: mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7), lib/crc-32b.c, lib/crc32.c,
|
||||
lib/gosthash.c, lib/libmhash.sym, lib/haval.c, lib/keygen.c,
|
||||
lib/keygen_asis.c, lib/keygen_hex.c, lib/keygen_mcrypt.c,
|
||||
lib/keygen_s2k.c, lib/md2c.c, lib/md5.c, lib/mhash.c, lib/ripemd.c,
|
||||
lib/sha1.c, lib/snefru.c, lib/swap.c (tags: mhash_0_8_16,
|
||||
mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), lib/tiger.c,
|
||||
lib/libdefs.h, lib/mhash_crc32.h, lib/tiger_sboxes.c,
|
||||
lib/gosthash.h, lib/keygen.h (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), lib/mhash.h,
|
||||
lib/mhash_haval.h (tags: mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7), lib/mhash_md2.h, lib/mhash_md5.h,
|
||||
lib/mhash_sha1.h (tags: mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), lib/mhash_tiger.h, lib/mhash_int.h,
|
||||
lib/mhash_ripemd.h (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), src/Makefile.am (tags:
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), src/driver.c,
|
||||
src/hash_test.sh, src/hmac_test.c, src/keygen_test.c (utags:
|
||||
start):
|
||||
|
||||
project started in sourceforge
|
||||
|
||||
2000-04-04 10:34 nmav
|
||||
|
||||
* .cvsignore, AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am,
|
||||
NEWS, README, TODO, acconfig.h, acinclude.m4, buildconf,
|
||||
changelog-update.sh, mhash.spec, doc/.cvsignore, doc/Makefile.am,
|
||||
doc/md2.license, doc/md5-rfc1321.txt, doc/mhash.pod,
|
||||
doc/md2-rfc1319.txt, lib/Makefile.am, lib/bzero.c, lib/crc-32b.c,
|
||||
lib/crc32.c, lib/gosthash.c, lib/libmhash.sym, lib/haval.c,
|
||||
lib/keygen.c, lib/keygen_asis.c, lib/keygen_hex.c,
|
||||
lib/keygen_mcrypt.c, lib/keygen_s2k.c, lib/md2c.c, lib/md5.c,
|
||||
lib/mhash.c, lib/ripemd.c, lib/sha1.c, lib/snefru.c, lib/swap.c,
|
||||
lib/tiger.c, lib/libdefs.h, lib/mhash_crc32.h, lib/tiger_sboxes.c,
|
||||
lib/gosthash.h, lib/keygen.h, lib/mhash.h, lib/mhash_haval.h,
|
||||
lib/mhash_md2.h, lib/mhash_md5.h, lib/mhash_sha1.h,
|
||||
lib/mhash_tiger.h, lib/mhash_int.h, lib/mhash_ripemd.h,
|
||||
src/Makefile.am, src/driver.c, src/hash_test.sh, src/hmac_test.c,
|
||||
src/keygen_test.c:
|
||||
|
||||
Initial revision
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
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 to create `configure' by a program
|
||||
called `autoconf'. 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 awhile. 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' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `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.
|
||||
@@ -0,0 +1,637 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = .
|
||||
|
||||
pkgdatadir = $(datadir)/mhash
|
||||
pkglibdir = $(libdir)/mhash
|
||||
pkgincludedir = $(includedir)/mhash
|
||||
top_builddir = .
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
target_triplet = x86_64-unknown-linux-gnu
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/mhash.spec.in \
|
||||
$(top_srcdir)/configure \
|
||||
$(top_srcdir)/include/mutils/mhash_config.h.in AUTHORS COPYING \
|
||||
ChangeLog INSTALL NEWS THANKS TODO config.guess config.sub \
|
||||
depcomp install-sh ltmain.sh missing
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES = mhash.spec
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run tar
|
||||
AR = ar
|
||||
AS = as
|
||||
AUTOCONF = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCAS = gcc
|
||||
CCASFLAGS = -g -O2
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS = -g -O2
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=gcc3
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = dlltool
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = /bin/grep -E
|
||||
EXEEXT =
|
||||
F77 =
|
||||
FFLAGS =
|
||||
GREP = /bin/grep
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS =
|
||||
MAINT = #
|
||||
MAINTAINER_MODE_FALSE =
|
||||
MAINTAINER_MODE_TRUE = #
|
||||
MAKEINFO = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run makeinfo
|
||||
OBJDUMP = objdump
|
||||
OBJEXT = o
|
||||
PACKAGE = mhash
|
||||
PACKAGE_BUGREPORT = mhash-devel@sourceforge.net
|
||||
PACKAGE_NAME = MHASH
|
||||
PACKAGE_STRING = MHASH 0.9.9
|
||||
PACKAGE_TARNAME = mhash
|
||||
PACKAGE_VERSION = 0.9.9
|
||||
PATH_SEPARATOR = :
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
VERSION = 0.9.9
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 =
|
||||
am__fastdepCC_FALSE = #
|
||||
am__fastdepCC_TRUE =
|
||||
am__fastdepCXX_FALSE = #
|
||||
am__fastdepCXX_TRUE =
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
htmldir = ${docdir}
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target = x86_64-unknown-linux-gnu
|
||||
target_alias =
|
||||
target_cpu = x86_64
|
||||
target_os = linux-gnu
|
||||
target_vendor = unknown
|
||||
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
SUBDIRS = include lib doc src
|
||||
EXTRA_DIST = mhash.spec.in mhash.spec
|
||||
USE_MHASH_CONFIG = yes
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: # $(am__configure_deps)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
|
||||
include/mutils/mhash_config.h: include/mutils/stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f include/mutils/stamp-h1; \
|
||||
$(MAKE) include/mutils/stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
include/mutils/stamp-h1: $(top_srcdir)/include/mutils/mhash_config.h.in $(top_builddir)/config.status
|
||||
@rm -f include/mutils/stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status include/mutils/mhash_config.h
|
||||
$(top_srcdir)/include/mutils/mhash_config.h.in: # $(am__configure_deps)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f include/mutils/stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f include/mutils/mhash_config.h include/mutils/stamp-h1
|
||||
mhash.spec: $(top_builddir)/config.status $(srcdir)/mhash.spec.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
$(mkdir_p) $(distdir)/. $(distdir)/include/mutils
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-libtool clean-recursive \
|
||||
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
|
||||
dist-shar dist-tarZ dist-zip distcheck distclean \
|
||||
distclean-generic distclean-hdr distclean-libtool \
|
||||
distclean-recursive distclean-tags distcleancheck distdir \
|
||||
distuninstallcheck dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am uninstall-info-am
|
||||
|
||||
|
||||
ChangeLog:
|
||||
cvs2cl --utc --fsf -t -S --prune
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,7 @@
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
SUBDIRS = include lib doc src
|
||||
EXTRA_DIST = mhash.spec.in mhash.spec
|
||||
USE_MHASH_CONFIG = yes
|
||||
|
||||
ChangeLog:
|
||||
cvs2cl --utc --fsf -t -S --prune
|
||||
@@ -0,0 +1,637 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = .
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/mhash.spec.in \
|
||||
$(top_srcdir)/configure \
|
||||
$(top_srcdir)/include/mutils/mhash_config.h.in AUTHORS COPYING \
|
||||
ChangeLog INSTALL NEWS THANKS TODO config.guess config.sub \
|
||||
depcomp install-sh ltmain.sh missing
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES = mhash.spec
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AS = @AS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
SUBDIRS = include lib doc src
|
||||
EXTRA_DIST = mhash.spec.in mhash.spec
|
||||
USE_MHASH_CONFIG = yes
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
|
||||
include/mutils/mhash_config.h: include/mutils/stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f include/mutils/stamp-h1; \
|
||||
$(MAKE) include/mutils/stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
include/mutils/stamp-h1: $(top_srcdir)/include/mutils/mhash_config.h.in $(top_builddir)/config.status
|
||||
@rm -f include/mutils/stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status include/mutils/mhash_config.h
|
||||
$(top_srcdir)/include/mutils/mhash_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f include/mutils/stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f include/mutils/mhash_config.h include/mutils/stamp-h1
|
||||
mhash.spec: $(top_builddir)/config.status $(srcdir)/mhash.spec.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
$(mkdir_p) $(distdir)/. $(distdir)/include/mutils
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-libtool clean-recursive \
|
||||
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
|
||||
dist-shar dist-tarZ dist-zip distcheck distclean \
|
||||
distclean-generic distclean-hdr distclean-libtool \
|
||||
distclean-recursive distclean-tags distcleancheck distdir \
|
||||
distuninstallcheck dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am uninstall-info-am
|
||||
|
||||
|
||||
ChangeLog:
|
||||
cvs2cl --utc --fsf -t -S --prune
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,172 @@
|
||||
mhash ChangeLog ($Date: 2006/06/24 21:46:11 $)
|
||||
===============================================================================
|
||||
|
||||
People
|
||||
|
||||
NM - Nikos Mavroyanopoulos <nmav@hellug.gr>
|
||||
SS - Sascha Schumann <sascha@schumann.cx>
|
||||
|
||||
Version 0.9.9
|
||||
- Added patch for sigbus error on unaligned data, when doing rapid copies.
|
||||
(Thanks to Wayne - mhash@useunix.net - for that.)
|
||||
|
||||
Version 0.9.8.1
|
||||
- Another round of bugfixes
|
||||
|
||||
Version 0.9.8
|
||||
- As before - more patches and cleanups
|
||||
|
||||
Version 0.9.7
|
||||
- More patches, more cleanups. Better handling of endian issues. Should
|
||||
handle platforms that do weird things with booleans better. Eliminated
|
||||
more redundant code. Snefru is now endian-aware. Maybe.
|
||||
|
||||
Known Issues:
|
||||
- Sub-optimal on 64-bit platforms, as a lot of the code assumes 32-bits.
|
||||
- May be some big-endian issues remaining. make check is your friend!
|
||||
|
||||
Version 0.9.6
|
||||
- Bunch of patches and speedups. Credits to be added.
|
||||
|
||||
Version 0.9.2
|
||||
- Added SNEFRU128, SNEFRU256. Reintroduced MD2.
|
||||
(jkmhash@itaparica.org)
|
||||
- Fixes to .spec file and clean-ups of documentation
|
||||
(cpedersen[at]c-note.dk)
|
||||
- Fixed typecasts, memory leaks and compiler warnings
|
||||
(imipak@yahoo.com)
|
||||
|
||||
Version 0.9.1
|
||||
- Added RIPEMD128/256/320, SHA224/384/512, Whirlpool
|
||||
- Really, this time!
|
||||
(jkmhash@itaparica.org)
|
||||
|
||||
Version 0.8.19
|
||||
- Added VC++ project files, contributed by James M. Rogers
|
||||
<james@singlestep.com>
|
||||
|
||||
Version 0.8.18 (released March 6 2003)
|
||||
- Several additions and fixes to built win32 dlls.
|
||||
|
||||
Version 0.8.17 (released October 4 2002)
|
||||
- Corrected the HEX key mode. Refuses to convert hex strings longer
|
||||
than the given key size.
|
||||
- Corrected some memory leaks in keygen_s2k. Patch by Bob Mathews
|
||||
<bobmathews@alumni.calpoly.edu>
|
||||
- Corrected wrong use of sizeof in hmac_test. Reported by Ellis Pritchard
|
||||
<ellispritchard@users.sf.net>
|
||||
|
||||
Version 0.8.16 (released May 29 2002)
|
||||
- Code cleanups and optimizations
|
||||
- Added configure time options to disable certain algorithms
|
||||
|
||||
Version 0.8.15 (released May 24 2002)
|
||||
- Corrected Iterated S2K
|
||||
- Made all static tables constant (pointed out by Darryl Miles <darryl@netbauds.net>)
|
||||
|
||||
Version 0.8.14 (release March 28 2002)
|
||||
- mhash_deinit() and mhash_hmac_deinit() now accept a null digest parameter
|
||||
- Corrected memory leaks (patch by Gustavo Niemeyer <niemeyer@conectiva.com>)
|
||||
- Corrected bug in Gost hash algorithm (pointed out by Mike Gorchak <mike@malva.ua>)
|
||||
|
||||
Version 0.8.13 (released November 18 2001)
|
||||
- Added ADLER32 algorithm (implementation by Manuel Kasper <mk@neon1.net>)
|
||||
|
||||
Version 0.8.12 (released October 29 2001)
|
||||
- Corrected bugs in mhash_get_name() functions
|
||||
- Added SHA-256 from libnettle.
|
||||
|
||||
Version 0.8.11 (released October 21 2001)
|
||||
- added mhash_save_state_mem() and mhash_restore_state_mem() functions,
|
||||
initial patches and idea by Blake Stephen <Stephen.Blake@veritect.com>
|
||||
- Added mhash_get_name_static()
|
||||
- Corrected mhash_get_name() and mhash_count()
|
||||
|
||||
Version 0.8.10 (released on July 12 2001)
|
||||
- New mhash_deinit() and mhash_hmac_deinit() functions based on the
|
||||
proposal, and patches by William Ahern <wahern@25thandClement.com>
|
||||
|
||||
Version 0.8.9 (released on February 04 2001)
|
||||
- TIGER runs on alpha (NM)
|
||||
- Documentation updated
|
||||
|
||||
Version 0.8.8 (released on January 29 2001)
|
||||
- MD4 and MD5 now compile on big endian machines (NM)
|
||||
- TIGER now compiles on big endian machines. (NM)
|
||||
|
||||
Version 0.8.6 (released on January 21 2001)
|
||||
- Corrected Tiger implementation (NM, bug pointed out by Gordon Mohr <gojomo@usa.net>)
|
||||
- Added MD4 (NM)
|
||||
- Added TIGER128 and TIGER160 (NM)
|
||||
|
||||
Version 0.8.5 (released on January 2001)
|
||||
- added checks for malloc failures (NM, some patches by Sami Farin <sfarin@ratol.fi>)
|
||||
- corrected old style checks for mhash failures (NM, reported by Joe Hohertz <jhohertz@wiretap.net>)
|
||||
|
||||
Version 0.8.4 (released on December 15 2000)
|
||||
- added mhash_hmac_end_m() and mhash_end_m() functions which allow to specify the malloc function. (NM)
|
||||
- added mhash_cp() - Copy a context (NM)
|
||||
- added mhash_get_mhash_algo() - Returns the name of the algorithm of the context (NM)
|
||||
- fixes in crc32b and gost (for multithreaded applications) (NM)
|
||||
|
||||
Version 0.8.3 (released on October 25 2000)
|
||||
- Compiles under Win32 using cygwin (with -mno-cygwin) (NM)
|
||||
- Bugfixes in KEYGEN_ASIS (NM)
|
||||
|
||||
Version 0.8.2 (released on May 12 2000)
|
||||
- Corrected Memory leaks in HMAC implementation (NM, contributed by Marios Hadjieleftheriou <marioh@cs.ucr.edu>)
|
||||
- Added HAVAL224 (NM)
|
||||
|
||||
Version 0.8.1 (released on April 11 2000)
|
||||
- Bugfixes in hmac implementation. (NM)
|
||||
- Removed MD2 (which was not free) (NM)
|
||||
|
||||
Version 0.8.0 (released on April 5 2000)
|
||||
- No longer needs posix thread locks to be thread safe (NM)
|
||||
- Supports unlimited number of MHASH threads (NM)
|
||||
- Improved the key generation algorithm API (NM)
|
||||
- Corrected Haval implementation. (NM)
|
||||
Now mhash uses Paulo Barreto's implementation
|
||||
Added HAVAL256, HAVAL192, HAVAL160, HAVAL128 (3 passes haval)
|
||||
- License was changed to GNU Lesser GPL
|
||||
|
||||
Version 0.7.0 (released on Mar 3rd 2000)
|
||||
- cleaned up binary interface (SS)
|
||||
- improved POSIX Threads detection (SS)
|
||||
- added keygen API (NM)
|
||||
- added new improved RIPEMD160 implementation (NM)
|
||||
- removed RIPEMD128 (NM)
|
||||
- added RPM .spec file by work@scripty.com (SS)
|
||||
|
||||
Version 0.6.1 (released on Oct 23th 1999)
|
||||
- fixed Tiger algorithm on 32-bit architectures (NM)
|
||||
|
||||
Version 0.6.0 (released on Oct 11th 1999)
|
||||
- export only symbols of the public interface (SS)
|
||||
- MHASH_API_VERSION has been changed to 19991004 (SS)
|
||||
- API change: All algorithm names have been prefixed with MHASH_
|
||||
to avoid namespace pollution (SS)
|
||||
- added mhash_get_hash_pblock() by NM, reimplemented by SS
|
||||
- improved data structure handling (NM)
|
||||
- use "--silent" libtool option (SS)
|
||||
- added hmac functions (SS, contributed by NM)
|
||||
|
||||
Version 0.5.2 (released on Jul 14th 1999)
|
||||
- fix VPATH build (SS)
|
||||
- upgrade to libtool 1.3.3 (SS)
|
||||
- rework directory layout (simplified) (SS)
|
||||
- change test script to work with Bourne shells (SS)
|
||||
- fix some big endian issues in RIPEMD160, RIPEMD128 and TIGER (SS)
|
||||
|
||||
Version 0.5 (relased on May 22nd 1999)
|
||||
- put under CVS control
|
||||
- change get_block_size to mhash_get_block_size (NM)
|
||||
- add --disable-pthreads option (NM)
|
||||
- add libtool and automake support (SS)
|
||||
- add several algorithms (SS)
|
||||
HAVAL, RIPEMD128, RIPEMD160, TIGER, GOST, CRC32B
|
||||
- add mhash_get_hash_name (SS)
|
||||
- add mhash_count (SS)
|
||||
- documentation revamp (SS)
|
||||
- renew API (SS)
|
||||
- add test vectors (SS)
|
||||
@@ -0,0 +1,42 @@
|
||||
mhash README ($Date: 2001/02/04 12:06:10 $)
|
||||
===============================================================================
|
||||
|
||||
OVERVIEW
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The mhash library provides an easy way to access strong hashes such as MD5,
|
||||
SHA1 and other algorithms.
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
The mhash library provides the following features:
|
||||
|
||||
o Free software (GNU Lesser General Public License)
|
||||
o Reentrancy support
|
||||
o Support for known strong algorithms
|
||||
o Support for less-known algorithms such as GOST
|
||||
o Should work on every ANSI C conforming platform
|
||||
|
||||
Disclaimer
|
||||
----------
|
||||
|
||||
Please read the file COPYING before using mhash.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
For installing mhash under Unix please read the document INSTALL.
|
||||
|
||||
New Versions
|
||||
------------
|
||||
|
||||
Information on how to retrieve new versions of mhash can be found on
|
||||
<URL:http://mhash.sourceforge.net>.
|
||||
|
||||
Credits
|
||||
-------
|
||||
|
||||
Please read the file AUTHORS.
|
||||
@@ -0,0 +1,17 @@
|
||||
Blake Stephen <Stephen.Blake@veritect.com>
|
||||
William Ahern <wahern@25thandClement.com>
|
||||
Gordon Mohr <gojomo@usa.net>
|
||||
Sami Farin <sfarin@ratol.fi>
|
||||
Joe Hohertz <jhohertz@wiretap.net>
|
||||
Marios Hadjieleftheriou <marioh@cs.ucr.edu>
|
||||
Gustavo Niemeyer <niemeyer@conectiva.com>
|
||||
Mike Gorchak <mike@malva.ua>
|
||||
Germano Rizzo <mano@pluto.linux.it>
|
||||
Darryl Miles <darryl@netbauds.net>
|
||||
B. Poettering <jkmhash@itaparica.org>
|
||||
Chris Hansom <cph@csail.mi.edu>
|
||||
Heiko Lehmann <hlehmann@fh-lausitz.de>
|
||||
Michael Schwendt <mschwendt@users.sourceforge.net>
|
||||
Wayne <mhash@useunix.net>
|
||||
|
||||
(And countless others, and to all those who intend to contribute in futute)
|
||||
@@ -0,0 +1,23 @@
|
||||
mhash TODO
|
||||
===============================================================================
|
||||
|
||||
- add PANAMA hash algorithm.
|
||||
- add 64 bit version of Tiger.
|
||||
- add all unbroken hash algorithms from Paulo Barreto's "Hashing
|
||||
Function Lounge". In April 2004 these were: Cellhash, Parallel
|
||||
FFT-Hash, Subhash.
|
||||
http://planeta.terra.com.br/informatica/paulobarreto/hflounge.html
|
||||
|
||||
- add a generic support for hash functions built upon block ciphers
|
||||
(Matyas-Meyer-Oseas, Miyaguchi-Preneel, Davies-Meyer, Abreast
|
||||
Davies-Meyer, Tandem Davies-Mayer, etc).
|
||||
|
||||
- It is possible to build block ciphers from hash functions (search
|
||||
the web for "Luby Rackoff" or MDC). Shouldn't mhash contain appropriate
|
||||
routines?
|
||||
|
||||
- If there are any MAC functions in the world, that are not built upon
|
||||
existing block ciphers or hash functions, they might be added to
|
||||
mhash. What about MAA?
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
AC_DEFUN([AM_SET_LIBTOOL_VARIABLE],[
|
||||
LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
|
||||
])
|
||||
+7298
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
aclocal && \
|
||||
libtoolize -c --force && \
|
||||
autoheader && \
|
||||
automake -a -c
|
||||
autoconf
|
||||
@@ -0,0 +1 @@
|
||||
rcs2log -u "nikos Nikos Mavroyanopoulos nmav@hellug.gr" -u "sascha Sascha Schumann sascha@schumann.cx" > ChangeLog
|
||||
+1500
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1616
File diff suppressed because it is too large
Load Diff
+27418
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,207 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_PREREQ(2.59)
|
||||
AC_INIT(MHASH, 0.9.9, mhash-devel@sourceforge.net)
|
||||
AC_CANONICAL_TARGET
|
||||
AC_CONFIG_SRCDIR([lib/mhash.c])
|
||||
AM_INIT_AUTOMAKE
|
||||
|
||||
AC_DEFINE([MHASH_VERSION], PROGRAM_VERSION, "MHash Version")
|
||||
AC_CONFIG_HEADER([include/mutils/mhash_config.h])
|
||||
|
||||
|
||||
dnl Check system.
|
||||
|
||||
AC_GNU_SOURCE
|
||||
|
||||
AC_AIX
|
||||
|
||||
AC_ISC_POSIX
|
||||
|
||||
AC_MINIX
|
||||
|
||||
dnl Checks for programs.
|
||||
|
||||
AM_PROG_AS
|
||||
AC_PROG_CC
|
||||
AC_PROG_CC_C_O
|
||||
AC_PROG_CXX
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
|
||||
dnl Check Make characteristics
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
dnl Check C characteristics
|
||||
|
||||
AC_LANG(C)
|
||||
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
AC_C_PROTOTYPES
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
dnl Miscellaneous checks
|
||||
|
||||
AC_CONST
|
||||
|
||||
AC_LIBTOOL_WIN32_DLL
|
||||
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
AC_TYPE_SIZE_T
|
||||
|
||||
dnl Checks for headers
|
||||
|
||||
AC_HEADER_STDBOOL
|
||||
AC_HEADER_STDC
|
||||
|
||||
AC_CHECK_HEADERS(sys/endian.h sys/stat.h sys/types.h sys/mman.h)
|
||||
AC_CHECK_HEADERS(assert.h byteswap.h dlfcn.h ctype.h errno.h)
|
||||
AC_CHECK_HEADERS(endian.h fcntl.h inttypes.h limits.h)
|
||||
AC_CHECK_HEADERS(malloc.h unistd.h utime.h values.h)
|
||||
AC_CHECK_HEADERS(signal.h stdint.h stdio.h stdlib.h string.h strings.h)
|
||||
|
||||
dnl Checks for functions
|
||||
|
||||
AC_FUNC_MALLOC
|
||||
AC_FUNC_MEMCMP
|
||||
|
||||
AC_CHECK_FUNCS(bcopy bzero)
|
||||
AC_CHECK_FUNCS(fcntl fsync)
|
||||
AC_CHECK_FUNCS(memset memmove mlock)
|
||||
AC_CHECK_FUNCS(sigaction signal)
|
||||
AC_CHECK_FUNCS(readdir_r readdir)
|
||||
AC_CHECK_FUNCS(strtol)
|
||||
AC_CHECK_FUNCS(lstat stat)
|
||||
AC_CHECK_FUNCS(umask utime)
|
||||
|
||||
dnl Checks type sizes.
|
||||
|
||||
AC_CHECK_SIZEOF(unsigned long long int, 8)
|
||||
AC_CHECK_SIZEOF(unsigned long int, 4)
|
||||
AC_CHECK_SIZEOF(unsigned int, 4)
|
||||
AC_CHECK_SIZEOF(unsigned short int, 2)
|
||||
AC_CHECK_SIZEOF(unsigned char, 1)
|
||||
|
||||
dnl Checks for optional libraries and tools
|
||||
|
||||
AM_WITH_DMALLOC
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
AC_ARG_WITH(CC,
|
||||
[ --with-CC choose compiler],
|
||||
if test "$withval" != "no" && test "$withval" != "yes" ; then
|
||||
CC="$withval"
|
||||
fi
|
||||
)
|
||||
|
||||
AC_ARG_WITH(CFLAGS,
|
||||
[ --with-CFLAGS set C compiler flags],
|
||||
if test "$withval" != "no" && test "$withval" != "yes" ; then
|
||||
CFLAGS="$withval"
|
||||
fi
|
||||
)
|
||||
|
||||
AC_ARG_WITH(CPPFLAGS,
|
||||
[ --with-CPPFLAGS set C preprocessor flags],
|
||||
if test "$withval" != "no" && test "$withval" != "yes" ; then
|
||||
CPPFLAGS="$withval"
|
||||
fi
|
||||
)
|
||||
|
||||
AC_ARG_WITH(LDFLAGS,
|
||||
[ --with-LDFLAGS set linker flags],
|
||||
if test "$withval" != "no" && test "$withval" != "yes" ; then
|
||||
LDFLAGS="$withval"
|
||||
fi
|
||||
)
|
||||
|
||||
if test x$ac_cv_prog_gcc = xyes; then
|
||||
if test x$opt_maintainer_mode = xyes; then
|
||||
CFLAGS=" -ggdb3 -O2 -Wall -Wpointer-arith"
|
||||
fi
|
||||
|
||||
if test x$opt_dmalloc_mode = xyes; then
|
||||
AC_CHECK_LIB( dmalloc, main)
|
||||
AC_DEFINE(USE_DMALLOC, 1, [dmalloc])
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(md5,
|
||||
[ --disable-md5 disable the MD5 algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_MD5, 1, "MD-5 Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(sha1,
|
||||
[ --disable-sha1 disable the SHA1 algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_SHA1, 1, "SHA-1 Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(md4,
|
||||
[ --disable-md4 disable the MD4 algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_MD4, 1, "MD-4 Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(md2,
|
||||
[ --disable-md2 disable the MD2 algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_MD2, 1, "MD-2 Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(tiger,
|
||||
[ --disable-tiger disable the TIGER algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_TIGER, 1, "Tiger Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(haval,
|
||||
[ --disable-haval disable the HAVAL algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_HAVAL, 1, "Haval Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(crc32,
|
||||
[ --disable-crc32 disable the CRC32 algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_CRC32, 1, "CRC32 Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(adler32,
|
||||
[ --disable-adler32 disable the ADLER32 algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_ADLER32, 1, "Adler32 Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(ripemd,
|
||||
[ --disable-ripemd disable the RIPEMD128/160/256/320 algorithms],
|
||||
,
|
||||
AC_DEFINE(ENABLE_RIPEMD, 1, "RIPE-MD - RIPE Substitute for MD"))
|
||||
|
||||
AC_ARG_ENABLE(gost,
|
||||
[ --disable-gost disable the GOST algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_GOST, 1, "GOST Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(sha256-sha224,
|
||||
[ --disable-sha256-sha224 disable the SHA256 and SHA224 algorithms],
|
||||
,
|
||||
AC_DEFINE(ENABLE_SHA256_SHA224, 1, "SHA-224 and SHA-256 - SHA-2 Algorithms"))
|
||||
|
||||
AC_ARG_ENABLE(sha512-sha384,
|
||||
[ --disable-sha512-sha384 disable the SHA512 and SHA384 algorithms],
|
||||
,
|
||||
AC_DEFINE(ENABLE_SHA512_SHA384, 1, "SHA-384 and SHA-512 - SHA-2 Algorithms"))
|
||||
|
||||
AC_ARG_ENABLE(snefru,
|
||||
[ --disable-snefru disable the SNEFRU algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_SNEFRU, 1, "Snefru Algorithm"))
|
||||
|
||||
AC_ARG_ENABLE(whirlpool,
|
||||
[ --disable-whirlpool disable the WHIRLPOOL algorithm],
|
||||
,
|
||||
AC_DEFINE(ENABLE_WHIRLPOOL, 1, "Whirlpool Algorithm"))
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
mhash.spec
|
||||
include/Makefile
|
||||
doc/Makefile
|
||||
src/Makefile
|
||||
lib/Makefile])
|
||||
AC_OUTPUT
|
||||
@@ -0,0 +1,522 @@
|
||||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2004-05-31.23
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
# 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.
|
||||
|
||||
# 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.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by `PROGRAMS ARGS'.
|
||||
object Object file output by `PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputing dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr '
|
||||
' ' ' >> $depfile
|
||||
echo >> $depfile
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> $depfile
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
|
||||
tmpdepfile="$stripped.u"
|
||||
if test "$libtool" = yes; then
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
|
||||
if test -f "$tmpdepfile"; then :
|
||||
else
|
||||
stripped=`echo "$stripped" | sed 's,^.*/,,'`
|
||||
tmpdepfile="$stripped.u"
|
||||
fi
|
||||
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile"; then
|
||||
outname="$stripped.o"
|
||||
# Each line is of the form `foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
icc)
|
||||
# Intel's C compiler understands `-MD -MF file'. However on
|
||||
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||
# ICC 7.0 will fill foo.d with something like
|
||||
# foo.o: sub/foo.c
|
||||
# foo.o: sub/foo.h
|
||||
# which is wrong. We want:
|
||||
# sub/foo.o: sub/foo.c
|
||||
# sub/foo.o: sub/foo.h
|
||||
# sub/foo.c:
|
||||
# sub/foo.h:
|
||||
# ICC 7.1 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using \ :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||
sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in `foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# Dependencies are output in .lo.d with libtool 1.4.
|
||||
# With libtool 1.5 they are output both in $dir.libs/$base.o.d
|
||||
# and in $dir.libs/$base.o.d and $dir$base.o.d. We process the
|
||||
# latter, because the former will be cleaned when $dir.libs is
|
||||
# erased.
|
||||
tmpdepfile1="$dir.libs/$base.lo.d"
|
||||
tmpdepfile2="$dir$base.o.d"
|
||||
tmpdepfile3="$dir.libs/$base.d"
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1="$dir$base.o.d"
|
||||
tmpdepfile2="$dir$base.d"
|
||||
tmpdepfile3="$dir$base.d"
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile1"; then
|
||||
tmpdepfile="$tmpdepfile1"
|
||||
elif test -f "$tmpdepfile2"; then
|
||||
tmpdepfile="$tmpdepfile2"
|
||||
else
|
||||
tmpdepfile="$tmpdepfile3"
|
||||
fi
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for `:'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no
|
||||
for arg in "$@"; do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix="`echo $object | sed 's/^.*\././'`"
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E |
|
||||
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
"$@" || exit $?
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||
echo " " >> "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
@@ -0,0 +1,7 @@
|
||||
index.html
|
||||
pod2html*
|
||||
mhash.0
|
||||
mhash.3
|
||||
mhash.html
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -0,0 +1,7 @@
|
||||
/.cvsignore/1.1.1.1/Tue Apr 4 10:34:20 2000//
|
||||
/Makefile.am/1.4/Sun Feb 4 10:29:19 2001//
|
||||
/example.c/1.2/Thu Jun 13 08:13:16 2002//
|
||||
/md5-rfc1321.txt/1.1.1.1/Tue Apr 4 10:34:20 2000//
|
||||
/mhash.pod/1.19/Tue Jun 18 09:08:30 2002//
|
||||
/skid2-authentication/1.2/Sun Jan 28 22:05:16 2001//
|
||||
D
|
||||
@@ -0,0 +1 @@
|
||||
mhash/doc
|
||||
@@ -0,0 +1 @@
|
||||
:ext:imipak@cvs.sourceforge.net:/cvsroot/mhash
|
||||
@@ -0,0 +1,406 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# doc/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
|
||||
pkgdatadir = $(datadir)/mhash
|
||||
pkglibdir = $(libdir)/mhash
|
||||
pkgincludedir = $(includedir)/mhash
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
target_triplet = x86_64-unknown-linux-gnu
|
||||
subdir = doc
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
man3dir = $(mandir)/man3
|
||||
am__installdirs = "$(DESTDIR)$(man3dir)"
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run tar
|
||||
AR = ar
|
||||
AS = as
|
||||
AUTOCONF = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCAS = gcc
|
||||
CCASFLAGS = -g -O2
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS = -g -O2
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=gcc3
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = dlltool
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = /bin/grep -E
|
||||
EXEEXT =
|
||||
F77 =
|
||||
FFLAGS =
|
||||
GREP = /bin/grep
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS =
|
||||
MAINT = #
|
||||
MAINTAINER_MODE_FALSE =
|
||||
MAINTAINER_MODE_TRUE = #
|
||||
MAKEINFO = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run makeinfo
|
||||
OBJDUMP = objdump
|
||||
OBJEXT = o
|
||||
PACKAGE = mhash
|
||||
PACKAGE_BUGREPORT = mhash-devel@sourceforge.net
|
||||
PACKAGE_NAME = MHASH
|
||||
PACKAGE_STRING = MHASH 0.9.9
|
||||
PACKAGE_TARNAME = mhash
|
||||
PACKAGE_VERSION = 0.9.9
|
||||
PATH_SEPARATOR = :
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
VERSION = 0.9.9
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 =
|
||||
am__fastdepCC_FALSE = #
|
||||
am__fastdepCC_TRUE =
|
||||
am__fastdepCXX_FALSE = #
|
||||
am__fastdepCXX_TRUE =
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
htmldir = ${docdir}
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target = x86_64-unknown-linux-gnu
|
||||
target_alias =
|
||||
target_cpu = x86_64
|
||||
target_os = linux-gnu
|
||||
target_vendor = unknown
|
||||
EXTRA_DIST = mhash.pod md5-rfc1321.txt \
|
||||
mhash.html mhash.0 mhash.3 skid2-authentication example.c
|
||||
|
||||
man_MANS = $(srcdir)/mhash.3
|
||||
PODPARAMS = --section=3 --center="mhash library" --date="2000/03/23" --release="mhash @MHASH_VERSION@"
|
||||
dist_targets = mhash.0 $(srcdir)/mhash.3 mhash.html
|
||||
MAINTAINERCLEANFILES = $(dist_targets)
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: # $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-man3: $(man3_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)"
|
||||
@list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.3*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||
else file=$$i; fi; \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
3*) ;; \
|
||||
*) ext='3' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
|
||||
done
|
||||
uninstall-man3:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.3*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
3*) ;; \
|
||||
*) ext='3' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
|
||||
rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(MANS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(man3dir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-man
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man: install-man3
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-man
|
||||
|
||||
uninstall-man: uninstall-man3
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
dist-hook distclean distclean-generic distclean-libtool \
|
||||
distdir dvi dvi-am html html-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-man3 install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||
ps ps-am uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-man uninstall-man3
|
||||
|
||||
|
||||
dist-hook: mhash-doc
|
||||
|
||||
mhash-doc: $(dist_targets)
|
||||
|
||||
$(srcdir)/mhash.html: $(srcdir)/mhash.pod
|
||||
pod2html --noindex --netscape --title="mhash library" $< | sed 's/MHASH_VERSION/@MHASH_VERSION@/' > $@
|
||||
|
||||
$(srcdir)/mhash.0: $(srcdir)/mhash.3
|
||||
nroff -man $< > $@
|
||||
|
||||
$(srcdir)/mhash.3: $(srcdir)/mhash.pod
|
||||
pod2man $(PODPARAMS) $< | sed 's/MHASH_VERSION/@MHASH_VERSION@/' > $@
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
EXTRA_DIST = mhash.pod md5-rfc1321.txt \
|
||||
mhash.html mhash.0 mhash.3 skid2-authentication example.c
|
||||
|
||||
man_MANS = $(srcdir)/mhash.3
|
||||
|
||||
PODPARAMS=--section=3 --center="mhash library" --date="2000/03/23" --release="mhash @MHASH_VERSION@"
|
||||
|
||||
dist_targets = mhash.0 $(srcdir)/mhash.3 mhash.html
|
||||
|
||||
MAINTAINERCLEANFILES=$(dist_targets)
|
||||
|
||||
dist-hook: mhash-doc
|
||||
|
||||
mhash-doc: $(dist_targets)
|
||||
|
||||
$(srcdir)/mhash.html: $(srcdir)/mhash.pod
|
||||
pod2html --noindex --netscape --title="mhash library" $< | sed 's/MHASH_VERSION/@MHASH_VERSION@/' > $@
|
||||
|
||||
$(srcdir)/mhash.0: $(srcdir)/mhash.3
|
||||
nroff -man $< > $@
|
||||
|
||||
$(srcdir)/mhash.3: $(srcdir)/mhash.pod
|
||||
pod2man $(PODPARAMS) $< | sed 's/MHASH_VERSION/@MHASH_VERSION@/' > $@
|
||||
|
||||
@@ -0,0 +1,406 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = doc
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
man3dir = $(mandir)/man3
|
||||
am__installdirs = "$(DESTDIR)$(man3dir)"
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AS = @AS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
EXTRA_DIST = mhash.pod md5-rfc1321.txt \
|
||||
mhash.html mhash.0 mhash.3 skid2-authentication example.c
|
||||
|
||||
man_MANS = $(srcdir)/mhash.3
|
||||
PODPARAMS = --section=3 --center="mhash library" --date="2000/03/23" --release="mhash @MHASH_VERSION@"
|
||||
dist_targets = mhash.0 $(srcdir)/mhash.3 mhash.html
|
||||
MAINTAINERCLEANFILES = $(dist_targets)
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-man3: $(man3_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)"
|
||||
@list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.3*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||
else file=$$i; fi; \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
3*) ;; \
|
||||
*) ext='3' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
|
||||
done
|
||||
uninstall-man3:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.3*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
3*) ;; \
|
||||
*) ext='3' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
|
||||
rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(MANS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(man3dir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-man
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man: install-man3
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-man
|
||||
|
||||
uninstall-man: uninstall-man3
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
dist-hook distclean distclean-generic distclean-libtool \
|
||||
distdir dvi dvi-am html html-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-man3 install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||
ps ps-am uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-man uninstall-man3
|
||||
|
||||
|
||||
dist-hook: mhash-doc
|
||||
|
||||
mhash-doc: $(dist_targets)
|
||||
|
||||
$(srcdir)/mhash.html: $(srcdir)/mhash.pod
|
||||
pod2html --noindex --netscape --title="mhash library" $< | sed 's/MHASH_VERSION/@MHASH_VERSION@/' > $@
|
||||
|
||||
$(srcdir)/mhash.0: $(srcdir)/mhash.3
|
||||
nroff -man $< > $@
|
||||
|
||||
$(srcdir)/mhash.3: $(srcdir)/mhash.pod
|
||||
pod2man $(PODPARAMS) $< | sed 's/MHASH_VERSION/@MHASH_VERSION@/' > $@
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,31 @@
|
||||
/* Example program that uses mhash to hash stdin using MD5 */
|
||||
|
||||
#include <mhash.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int i;
|
||||
MHASH td;
|
||||
unsigned char buffer;
|
||||
unsigned char hash[16]; /* only for md5 */
|
||||
|
||||
td = mhash_init(MHASH_MD5);
|
||||
|
||||
if (td == MHASH_FAILED) exit(1);
|
||||
|
||||
while (fread(&buffer, 1, 1, stdin) == 1) {
|
||||
mhash(td, &buffer, 1);
|
||||
}
|
||||
|
||||
mhash_deinit(td, hash);
|
||||
|
||||
printf("Hash:");
|
||||
for (i = 0; i < mhash_get_block_size(MHASH_MD5); i++) {
|
||||
printf("%.2x", hash[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
exit(0);
|
||||
}
|
||||
@@ -0,0 +1,538 @@
|
||||
.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
|
||||
.\"
|
||||
.\" Standard preamble:
|
||||
.\" ========================================================================
|
||||
.de Sh \" Subsection heading
|
||||
.br
|
||||
.if t .Sp
|
||||
.ne 5
|
||||
.PP
|
||||
\fB\\$1\fR
|
||||
.PP
|
||||
..
|
||||
.de Sp \" Vertical space (when we can't use .PP)
|
||||
.if t .sp .5v
|
||||
.if n .sp
|
||||
..
|
||||
.de Vb \" Begin verbatim text
|
||||
.ft CW
|
||||
.nf
|
||||
.ne \\$1
|
||||
..
|
||||
.de Ve \" End verbatim text
|
||||
.ft R
|
||||
.fi
|
||||
..
|
||||
.\" Set up some character translations and predefined strings. \*(-- will
|
||||
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
|
||||
.\" double quote, and \*(R" will give a right double quote. | will give a
|
||||
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
|
||||
.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
|
||||
.\" expand to `' in nroff, nothing in troff, for use with C<>.
|
||||
.tr \(*W-|\(bv\*(Tr
|
||||
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
||||
.ie n \{\
|
||||
. ds -- \(*W-
|
||||
. ds PI pi
|
||||
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
||||
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
||||
. ds L" ""
|
||||
. ds R" ""
|
||||
. ds C` ""
|
||||
. ds C' ""
|
||||
'br\}
|
||||
.el\{\
|
||||
. ds -- \|\(em\|
|
||||
. ds PI \(*p
|
||||
. ds L" ``
|
||||
. ds R" ''
|
||||
'br\}
|
||||
.\"
|
||||
.\" If the F register is turned on, we'll generate index entries on stderr for
|
||||
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
|
||||
.\" entries marked with X<> in POD. Of course, you'll have to process the
|
||||
.\" output yourself in some meaningful fashion.
|
||||
.if \nF \{\
|
||||
. de IX
|
||||
. tm Index:\\$1\t\\n%\t"\\$2"
|
||||
..
|
||||
. nr % 0
|
||||
. rr F
|
||||
.\}
|
||||
.\"
|
||||
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||
.\" way too many mistakes in technical documents.
|
||||
.hy 0
|
||||
.if n .na
|
||||
.\"
|
||||
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
|
||||
.\" Fear. Run. Save yourself. No user-serviceable parts.
|
||||
. \" fudge factors for nroff and troff
|
||||
.if n \{\
|
||||
. ds #H 0
|
||||
. ds #V .8m
|
||||
. ds #F .3m
|
||||
. ds #[ \f1
|
||||
. ds #] \fP
|
||||
.\}
|
||||
.if t \{\
|
||||
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
|
||||
. ds #V .6m
|
||||
. ds #F 0
|
||||
. ds #[ \&
|
||||
. ds #] \&
|
||||
.\}
|
||||
. \" simple accents for nroff and troff
|
||||
.if n \{\
|
||||
. ds ' \&
|
||||
. ds ` \&
|
||||
. ds ^ \&
|
||||
. ds , \&
|
||||
. ds ~ ~
|
||||
. ds /
|
||||
.\}
|
||||
.if t \{\
|
||||
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
|
||||
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
|
||||
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
|
||||
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
|
||||
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
|
||||
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
|
||||
.\}
|
||||
. \" troff and (daisy-wheel) nroff accents
|
||||
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
|
||||
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
|
||||
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
|
||||
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
|
||||
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
|
||||
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
|
||||
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
|
||||
.ds ae a\h'-(\w'a'u*4/10)'e
|
||||
.ds Ae A\h'-(\w'A'u*4/10)'E
|
||||
. \" corrections for vroff
|
||||
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
|
||||
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
|
||||
. \" for low resolution devices (crt and lpr)
|
||||
.if \n(.H>23 .if \n(.V>19 \
|
||||
\{\
|
||||
. ds : e
|
||||
. ds 8 ss
|
||||
. ds o a
|
||||
. ds d- d\h'-1'\(ga
|
||||
. ds D- D\h'-1'\(hy
|
||||
. ds th \o'bp'
|
||||
. ds Th \o'LP'
|
||||
. ds ae ae
|
||||
. ds Ae AE
|
||||
.\}
|
||||
.rm #[ #] #H #V #F C
|
||||
.\" ========================================================================
|
||||
.\"
|
||||
.IX Title "mhash 3"
|
||||
.TH mhash 3 "2000/03/23" "mhash 0.9.2" "mhash library"
|
||||
.SH "NAME"
|
||||
\&\fBmhash \- Hash Library\fR
|
||||
.SH "VERSION"
|
||||
.IX Header "VERSION"
|
||||
mhash \s-10.9.2\s0
|
||||
.SH "SYNOPSIS"
|
||||
.IX Header "SYNOPSIS"
|
||||
.Vb 1
|
||||
\& #include "mhash.h"
|
||||
.Ve
|
||||
.PP
|
||||
\&\fB Informative Functions \fR
|
||||
.PP
|
||||
.Vb 5
|
||||
\& size_t mhash_count(void);
|
||||
\& size_t mhash_get_block_size(hashid type);
|
||||
\& char *mhash_get_hash_name(hashid type);
|
||||
\& size_t mhash_get_hash_pblock(hashid type);
|
||||
\& hashid mhash_get_mhash_algo( MHASH);
|
||||
.Ve
|
||||
.PP
|
||||
\&\fB Key Generation Functions \fR
|
||||
.PP
|
||||
.Vb 3
|
||||
\& int mhash_keygen_ext(keygenid algorithm, KEYGEN algorithm_data,
|
||||
\& void* keyword, int keysize,
|
||||
\& unsigned char* password, int passwordlen);
|
||||
.Ve
|
||||
.PP
|
||||
\&\fB Initializing Functions \fR
|
||||
.PP
|
||||
.Vb 3
|
||||
\& MHASH mhash_init(hashid type);
|
||||
\& MHASH mhash_hmac_init(const hashid type, void *key, int keysize, int block);
|
||||
\& MHASH mhash_cp( MHASH);
|
||||
.Ve
|
||||
.PP
|
||||
\&\fB Update Functions \fR
|
||||
.PP
|
||||
.Vb 1
|
||||
\& int mhash(MHASH thread, const void *plaintext, size_t size);
|
||||
.Ve
|
||||
.PP
|
||||
\&\fB Save/Restore Functions \fR
|
||||
.PP
|
||||
.Vb 2
|
||||
\& int mhash_save_state_mem(MHASH thread, void *mem, int* mem_size );
|
||||
\& MHASH mhash_restore_state_mem(void* mem);
|
||||
.Ve
|
||||
.PP
|
||||
\&\fB Finalizing Functions \fR
|
||||
.PP
|
||||
.Vb 3
|
||||
\& void mhash_deinit(MHASH thread, void *result);
|
||||
\& void *mhash_end(MHASH thread);
|
||||
\& void *mhash_end_m(MHASH thread, void* (*hash_malloc)(size_t));
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 3
|
||||
\& void *mhash_hmac_end(MHASH thread);
|
||||
\& void *mhash_hmac_end_m(MHASH thread, void* (*hash_malloc)(size_t));
|
||||
\& int mhash_hmac_deinit(MHASH thread, void *result);
|
||||
.Ve
|
||||
.PP
|
||||
\&\fB Available Hashes \fR
|
||||
.PP
|
||||
\&\fI\s-1CRC32\s0\fR:
|
||||
The crc32 algorithm is used to compute checksums. The two variants used
|
||||
in mhash are: \fB\s-1MHASH_CRC32\s0\fR (like the one used in ethernet) and \fB\s-1MHASH_CRC32B\s0\fR
|
||||
(like the one used in \s-1ZIP\s0 programs).
|
||||
.PP
|
||||
\&\fI\s-1ADLER32\s0\fR:
|
||||
The adler32 algorithm is used to compute checksums. It is faster than
|
||||
\&\s-1CRC32\s0 and it is considered to be as reliable as \s-1CRC32\s0. This algorithm
|
||||
is defined as \fB\s-1MHASH_ADLER32\s0\fR.
|
||||
.PP
|
||||
\&\fI\s-1MD5\s0\fR: The \s-1MD5\s0 algorithm by Ron Rivest and \s-1RSA\s0. In mhash this algorithm is defined
|
||||
as \fB\s-1MHASH_MD5\s0\fR.
|
||||
.PP
|
||||
\&\fI\s-1MD4\s0\fR: The \s-1MD4\s0 algorithm by Ron Rivest and \s-1RSA\s0. This algorithm is
|
||||
considered broken, so don't use it. In mhash this algorithm is defined
|
||||
as \fB\s-1MHASH_MD4\s0\fR.
|
||||
.PP
|
||||
\&\fI\s-1SHA1\s0\fR/\fI\s-1SHA256\s0\fR: The \s-1SHA\s0 algorithm by \s-1US\s0. \s-1NIST/NSA\s0. This algorithm is specified
|
||||
for use in the \s-1NIST\s0's Digital Signature Standard. In mhash these algorithm
|
||||
are defined as \fB\s-1MHASH_SHA1\s0\fR and \fB\s-1MHASH_SHA256\s0\fR.
|
||||
.PP
|
||||
\&\fI\s-1HAVAL\s0\fR:
|
||||
\&\s-1HAVAL\s0 is a one-way hashing algorithm with variable length of output.
|
||||
\&\s-1HAVAL\s0 is a modification of \s-1MD5\s0.
|
||||
Defined in mhash as: \fB\s-1MHASH_HAVAL256\s0, \s-1MHASH_HAVAL192\s0, \s-1MHASH_HAVAL160\s0, \s-1MHASH_HAVAL128\s0\fR.
|
||||
.PP
|
||||
\&\fI\s-1RIPEMD160\s0\fR:
|
||||
\&\s-1RIPEMD\-160\s0 is a 160\-bit cryptographic hash function, designed by Hans Dobbertin, Antoon Bosselaers, and Bart Preneel. It is intended to be used as a secure replacement
|
||||
for the 128\-bit hash functions \s-1MD4\s0, \s-1MD5\s0, and \s-1RIPEMD\s0. \s-1MD4\s0 and \s-1MD5\s0 were developed by Ron Rivest for \s-1RSA\s0 Data Security, while \s-1RIPEMD\s0 was developed in the
|
||||
framework of the \s-1EU\s0 project \s-1RIPE\s0 (\s-1RACE\s0 Integrity Primitives Evaluation, 1988\-1992).
|
||||
In mhash this algorithm is defined as \fB\s-1MHASH_RIPEMD160\s0\fR.
|
||||
.PP
|
||||
\&\fI\s-1TIGER\s0\fR: Tiger is a fast hash function, by Eli Biham and Ross Anderson.
|
||||
Tiger was designed to be very fast on modern computers, and in particular on the state-of-the-art 64\-bit computers,
|
||||
while it is still not slower than other suggested hash functions on 32\-bit machines.
|
||||
In mhash this algorithm is defined as: \fB\s-1MHASH_TIGER\s0, \s-1MHASH_TIGER160\s0, \s-1MHASH_TIGER128\s0\fR.
|
||||
.PP
|
||||
\&\fI\s-1GOST\s0\fR: \s-1GOST\s0 algorithm is a russian standard and it uses the
|
||||
\&\s-1GOST\s0 encryption algorithm to produce a 256 bit hash value. This algorithm
|
||||
is specified for use in the Russian Digital Signature Standard.
|
||||
In mhash this algorithm is defined as \fB\s-1MHASH_GOST\s0\fR.
|
||||
.PP
|
||||
\&\fB Available Key Generation algorithms \fR
|
||||
.PP
|
||||
\&\fI\s-1KEYGEN_MCRYPT\s0\fR: The key generator used in mcrypt.
|
||||
.PP
|
||||
\&\fI\s-1KEYGEN_ASIS\s0\fR: Just returns the password as binary key.
|
||||
.PP
|
||||
\&\fI\s-1KEYGEN_HEX\s0\fR: Just converts a hex key into a binary one.
|
||||
.PP
|
||||
\&\fI\s-1KEYGEN_PKDES\s0\fR: The transformation used in Phil Karn's \s-1DES\s0 encryption program.
|
||||
.PP
|
||||
\&\fI\s-1KEYGEN_S2K_SIMPLE\s0\fR: The OpenPGP (rfc2440) Simple S2K.
|
||||
.PP
|
||||
\&\fI\s-1KEYGEN_S2K_SALTED\s0\fR: The OpenPGP Salted S2K.
|
||||
.PP
|
||||
\&\fI\s-1KEYGEN_S2K_ISALTED\s0\fR: The OpenPGP Iterated Salted S2K.
|
||||
.SH "DESCRIPTION"
|
||||
.IX Header "DESCRIPTION"
|
||||
The \fBmhash\fR library provides an easy to use C interface for several \fIhash
|
||||
algorithms\fR (also known as \*(L"one\-way\*(R" algorithms). These can be used to
|
||||
create checksums, message digests and more. Currently, \s-1MD5\s0, \s-1SHA1\s0, \s-1GOST\s0, \s-1TIGER\s0,
|
||||
\&\s-1RIPE\-MD160\s0, \s-1HAVAL\s0 and several other algorithms are supported.
|
||||
\&\fBmhash\fR support \fI\s-1HMAC\s0 generation\fR
|
||||
(a mechanism for message authentication using cryptographic hash
|
||||
functions, and is described in rfc2104). \s-1HMAC\s0 can be used to create
|
||||
message digests using a secret key, so that these message digests cannot
|
||||
be regenerated (or replaced) by someone else.
|
||||
A key generation mechanism was added to \fBmhash\fR since \fIkey generation\fR
|
||||
algorithms usually involve hash algorithms.
|
||||
.SH "API FUNCTIONS"
|
||||
.IX Header "API FUNCTIONS"
|
||||
We will describe the \s-1API\s0 of \fBmhash\fR in detail now. The order follows
|
||||
the one in the \s-1SYNOPSIS\s0 directly.
|
||||
.IP "size_t \fBmhash_count\fR(void);" 4
|
||||
.IX Item "size_t mhash_count(void);"
|
||||
This returns the \f(CW\*(C`hashid\*(C'\fR of the last available hash. Hashes are numbered from
|
||||
0 to \f(CW\*(C`mhash_count()\*(C'\fR.
|
||||
.IP "size_t \fBmhash_get_block_size\fR(hashid \fItype\fR);" 4
|
||||
.IX Item "size_t mhash_get_block_size(hashid type);"
|
||||
If \fItype\fR exists, this returns the used blocksize of the hash \fItype\fR
|
||||
in bytes. Otherwise, it returns 0.
|
||||
.IP "char *\fBmhash_get_hash_name\fR(hashid \fItype\fR);" 4
|
||||
.IX Item "char *mhash_get_hash_name(hashid type);"
|
||||
If \fItype\fR exists, this returns the name of the hash \fItype\fR. Otherwise, a
|
||||
\&\f(CW\*(C`NULL\*(C'\fR pointer is returned. The string is allocated with \fImalloc\fR\|(3) seperately,
|
||||
so do not forget to \fIfree\fR\|(3) it.
|
||||
.IP "const char *\fBmhash_get_hash_name_static\fR(hashid \fItype\fR);" 4
|
||||
.IX Item "const char *mhash_get_hash_name_static(hashid type);"
|
||||
If \fItype\fR exists, this returns the name of the hash \fItype\fR. Otherwise, a
|
||||
\&\f(CW\*(C`NULL\*(C'\fR pointer is returned.
|
||||
.IP "size_t \fBmhash_get_hash_pblock\fR(hashid \fItype\fR);" 4
|
||||
.IX Item "size_t mhash_get_hash_pblock(hashid type);"
|
||||
It returns the block size that the algorithm operates. This is used
|
||||
in mhash_hmac_init. If the return value is 0 you shouldn't use that
|
||||
algorithm in \s-1HMAC\s0.
|
||||
.IP "hashid \fBmhash_get_mhash_algo\fR(\s-1MHASH\s0 \fIsrc\fR);" 4
|
||||
.IX Item "hashid mhash_get_mhash_algo(MHASH src);"
|
||||
Returns the algorithm used in the state of \fIsrc\fR.
|
||||
.IP "\s-1MHASH\s0 \fBmhash_init\fR(hashid \fItype\fR);" 4
|
||||
.IX Item "MHASH mhash_init(hashid type);"
|
||||
This setups a context to begin hashing using the algorithm \fItype\fR. It returns
|
||||
a descriptor to that context which will result in leaking memory, if you do not
|
||||
call \fImhash_deinit\fR\|(3) later. Returns \f(CW\*(C`MHASH_FAILED\*(C'\fR on failure.
|
||||
.IP "\s-1MHASH\s0 \fBmhash_hmac_init\fR(const hashid \fItype\fR, void *\fIkey\fR, int \fIkeysize\fR, int \fIblock\fR);" 4
|
||||
.IX Item "MHASH mhash_hmac_init(const hashid type, void *key, int keysize, int block);"
|
||||
This setups a context to begin hashing using the algorithm type in \s-1HMAC\s0 mode.
|
||||
\&\fIkey\fR should be a pointer to the
|
||||
key and \fIkeysize\fR its len. The \fIblock\fR is the block size (in bytes) that the algorithm
|
||||
operates. It should be obtained by \fImhash_get_hash_pblock()\fR. If its 0 it defaults to 64.
|
||||
After calling it you should use \fImhash()\fR to update the context.
|
||||
It returns a descriptor to that context which will result in leaking memory,
|
||||
if you do not call \fImhash_hmac_deinit\fR\|(3) later.
|
||||
Returns \f(CW\*(C`MHASH_FAILED\*(C'\fR on failure.
|
||||
.IP "\s-1MHASH\s0 \fBmhash_cp\fR(\s-1MHASH\s0 \fIsrc\fR);" 4
|
||||
.IX Item "MHASH mhash_cp(MHASH src);"
|
||||
This setups a new context using the state of \fIsrc\fR.
|
||||
.IP "int \fBmhash\fR(\s-1MHASH\s0 \fIthread\fR, const void *\fIplaintext\fR, size_t \fIsize\fR);" 4
|
||||
.IX Item "int mhash(MHASH thread, const void *plaintext, size_t size);"
|
||||
This updates the context described by \fIthread\fR with \fIplaintext\fR. \fIsize\fR is
|
||||
the length of \fIplaintext\fR which may be binary data.
|
||||
.IP "int \fBmhash_save_state_mem\fR( \s-1MHASH\s0 \fIthread\fR, void *\fImem\fR, int* \fImem_size\fR);" 4
|
||||
.IX Item "int mhash_save_state_mem( MHASH thread, void *mem, int* mem_size);"
|
||||
Saves the state of a hashing algorithm such that it can be restored at
|
||||
some later point in time using \fBmhash_restore_state_mem\fR(). \fImem_size\fR should
|
||||
contain the size of the given \fImem\fR pointer. If it is not enough to hold
|
||||
the buffer the required value will be copied there.
|
||||
.IP "\s-1MHASH\s0 \fBmhash_restore_state_mem\fR(void* \fImem\fR);" 4
|
||||
.IX Item "MHASH mhash_restore_state_mem(void* mem);"
|
||||
Restores the state of a hashing algorithm that was saved using
|
||||
\&\fBmhash_save_state_mem\fR(). Use like \fBmhash_init\fR().
|
||||
.IP "void *\fBmhash_end\fR(\s-1MHASH\s0 \fIthread\fR);" 4
|
||||
.IX Item "void *mhash_end(MHASH thread);"
|
||||
This frees all resources associated with \fIthread\fR and returns the result of
|
||||
the whole hashing operation (the ``\fIdigest\fR'').
|
||||
.IP "void \fBmhash_deinit\fR(\s-1MHASH\s0 \fIthread\fR, void* digest);" 4
|
||||
.IX Item "void mhash_deinit(MHASH thread, void* digest);"
|
||||
This frees all resources associated with \fIthread\fR and stores the result of
|
||||
the whole hashing operation in memory pointed by \fIdigest\fR. \fIdigest\fR
|
||||
may be null.
|
||||
.IP "void *\fBmhash_hmac_end\fR(\s-1MHASH\s0 \fIthread\fR);" 4
|
||||
.IX Item "void *mhash_hmac_end(MHASH thread);"
|
||||
This frees all resources associated with thread and returns the result of the
|
||||
whole hashing operation (the ``\fImac\fR'').
|
||||
.IP "int \fBmhash_hmac_deinit\fR(\s-1MHASH\s0 \fIthread\fR, void* digest);" 4
|
||||
.IX Item "int mhash_hmac_deinit(MHASH thread, void* digest);"
|
||||
This frees all resources associated with \fIthread\fR and stores the result of
|
||||
the whole hashing operation in memory pointed by digest. Digest may be
|
||||
null. Returns non-zero in case of an error.
|
||||
.IP "void *\fBmhash_end_m\fR(\s-1MHASH\s0 \fIthread\fR, void* (*hash_malloc)(size_t));" 4
|
||||
.IX Item "void *mhash_end_m(MHASH thread, void* (*hash_malloc)(size_t));"
|
||||
This frees all resources associated with \fIthread\fR and returns the result of
|
||||
the whole hashing operation (the ``\fIdigest\fR''). The result will be allocated
|
||||
by using the \fIhash_malloc()\fR function provided.
|
||||
.IP "void *\fBmhash_hmac_end\fR(\s-1MHASH\s0 \fIthread\fR, void* (*hash_malloc)(size_t));" 4
|
||||
.IX Item "void *mhash_hmac_end(MHASH thread, void* (*hash_malloc)(size_t));"
|
||||
This frees all resources associated with thread and returns the result of the
|
||||
whole hashing operation (the ``\fImac\fR''). The result will be allocated
|
||||
by using the \fIhash_malloc()\fR function provided.
|
||||
.SH "KEYGEN API FUNCTIONS"
|
||||
.IX Header "KEYGEN API FUNCTIONS"
|
||||
We will now describe the Key Generation \s-1API\s0 of \fBmhash\fR in detail.
|
||||
.IP "int \fBmhash_keygen_ext\fR(keygenid \fIalgorithm\fR, \s-1KEYGEN\s0 \fIalgorithm_data\fR, void* \fIkeyword\fR, int \fIkeysize\fR, unsigned char* \fIpassword\fR, int \fIpasswordlen\fR);" 4
|
||||
.IX Item "int mhash_keygen_ext(keygenid algorithm, KEYGEN algorithm_data, void* keyword, int keysize, unsigned char* password, int passwordlen);"
|
||||
This function, generates a key from a password. The password is read from
|
||||
\&\fIpassword\fR and it's len should be in \fIpasswordlen\fR.
|
||||
The key generation algorithm is specified in \fIalgorithm\fR, and that algorithm may (internally)
|
||||
use the \s-1KEYGEN\s0 structure. The \s-1KEYGEN\s0 structure consists of:
|
||||
typedef struct keygen {
|
||||
hashid hash_algorithm[2];
|
||||
unsigned int count;
|
||||
void* salt;
|
||||
int salt_size;
|
||||
} \s-1KEYGEN\s0;
|
||||
.Sp
|
||||
The algorithm(s) specified in \fIalgorithm_data.hash_algorithm\fR, should be hash
|
||||
algorithms and may be used by the key generation algorithm. Some key generation algorithms
|
||||
may use more than one hash algorithms (view also \fImhash_keygen_uses_hash_algorithm()\fR).
|
||||
If it is desirable (and supported by the algorithm, eg. \s-1KEYGEN_S2K_SALTED\s0)
|
||||
a salt may be specified in \fIalgorithm_data.salt\fR of size \fIalgorithm_data.salt_size\fR
|
||||
or may be \s-1NULL\s0.
|
||||
.Sp
|
||||
The algorithm may use the \fIalgorithm_data.count\fR internally (eg. \s-1KEYGEN_S2K_ISALTED\s0).
|
||||
The generated keyword is stored in \fIkeyword\fR, which should be (at least) \fIkeysize\fR bytes long.
|
||||
The generated keyword is a binary one. Returns a negative number on failure.
|
||||
.IP "int \fBmhash_keygen_uses_salt\fR( keygenid \fIalgorithm\fR);" 4
|
||||
.IX Item "int mhash_keygen_uses_salt( keygenid algorithm);"
|
||||
This function returns 1 if the specified key generation algorithm needs
|
||||
a salt to be specified.
|
||||
.IP "int \fBmhash_keygen_uses_count\fR( keygenid \fIalgorithm\fR);" 4
|
||||
.IX Item "int mhash_keygen_uses_count( keygenid algorithm);"
|
||||
This function returns 1 if the specified key generation algorithm needs
|
||||
the algorithm_data.count field in \fImhash_keygen_ext()\fR. The count field tells the algorithm
|
||||
to hash repeatedly the password and to stop when \fBcount\fR bytes have
|
||||
been processed.
|
||||
.IP "int \fBmhash_get_keygen_salt_size\fR( keygenid \fIalgorithm\fR);" 4
|
||||
.IX Item "int mhash_get_keygen_salt_size( keygenid algorithm);"
|
||||
This function returns the size of the salt size, that the specific
|
||||
\&\fIalgorithm\fR will use. If it returns 0, then there is no limitation in
|
||||
the size.
|
||||
.IP "int \fBmhash_get_keygen_max_key_size\fR( keygenid \fIalgorithm\fR);" 4
|
||||
.IX Item "int mhash_get_keygen_max_key_size( keygenid algorithm);"
|
||||
This function returns the maximum size of the key, that the key generation
|
||||
algorithm may produce.
|
||||
If it returns 0, then there is no limitation in the size.
|
||||
.IP "int \fBmhash_keygen_uses_hash_algorithm\fR( keygenid \fIalgorithm\fR);" 4
|
||||
.IX Item "int mhash_keygen_uses_hash_algorithm( keygenid algorithm);"
|
||||
This function returns the number of the hash algorithms the key generation
|
||||
algorithm will use. If it is 0 then no hash algorithm is used by the
|
||||
key generation algorithm. This is for the \fIalgorithm_data.hash_algorithm\fR field in
|
||||
\&\fImhash_keygen_ext()\fR. If
|
||||
.IP "size_t \fBmhash_keygen_count\fR(void);" 4
|
||||
.IX Item "size_t mhash_keygen_count(void);"
|
||||
This returns the \f(CW\*(C`keygenid\*(C'\fR of the last available key generation algorithm.
|
||||
Algorithms are numbered from 0 to \f(CW\*(C`mhash_keygen_count()\*(C'\fR.
|
||||
.IP "char *\fBmhash_get_keygen_name\fR(keygenid \fItype\fR);" 4
|
||||
.IX Item "char *mhash_get_keygen_name(keygenid type);"
|
||||
If \fItype\fR exists, this returns the name of the keygen \fItype\fR. Otherwise, a
|
||||
\&\f(CW\*(C`NULL\*(C'\fR pointer is returned. The string is allocated with \fImalloc\fR\|(3) seperately,
|
||||
so do not forget to \fIfree\fR\|(3) it.
|
||||
.IP "const char *\fBmhash_get_keygen_name_static\fR(keygenid \fItype\fR);" 4
|
||||
.IX Item "const char *mhash_get_keygen_name_static(keygenid type);"
|
||||
If \fItype\fR exists, this returns the name of the keygen \fItype\fR. Otherwise, a
|
||||
\&\f(CW\*(C`NULL\*(C'\fR pointer is returned.
|
||||
.SH "EXAMPLE"
|
||||
.IX Header "EXAMPLE"
|
||||
Hashing \s-1STDIN\s0 until \s-1EOF\s0.
|
||||
.PP
|
||||
.Vb 3
|
||||
\& #include <mhash.h>
|
||||
\& #include <stdio.h>
|
||||
\& #include <stdlib.h>
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 6
|
||||
\& int main(void)
|
||||
\& {
|
||||
\& int i;
|
||||
\& MHASH td;
|
||||
\& unsigned char buffer;
|
||||
\& unsigned char hash[16]; /* enough size for MD5 */
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 1
|
||||
\& td = mhash_init(MHASH_MD5);
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 1
|
||||
\& if (td == MHASH_FAILED) exit(1);
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 3
|
||||
\& while (fread(&buffer, 1, 1, stdin) == 1) {
|
||||
\& mhash(td, &buffer, 1);
|
||||
\& }
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 1
|
||||
\& mhash_deinit(td, hash);
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 5
|
||||
\& printf("Hash:");
|
||||
\& for (i = 0; i < mhash_get_block_size(MHASH_MD5); i++) {
|
||||
\& printf("%.2x", hash[i]);
|
||||
\& }
|
||||
\& printf("\en");
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 2
|
||||
\& exit(0);
|
||||
\& }
|
||||
.Ve
|
||||
.SH "EXAMPLE"
|
||||
.IX Header "EXAMPLE"
|
||||
An example program using \s-1HMAC:\s0
|
||||
.PP
|
||||
.Vb 2
|
||||
\& #include <mhash.h>
|
||||
\& #include <stdio.h>
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 2
|
||||
\& int main()
|
||||
\& {
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 7
|
||||
\& char password[] = "Jefe";
|
||||
\& int keylen = 4;
|
||||
\& char data[] = "what do ya want for nothing?";
|
||||
\& int datalen = 28;
|
||||
\& MHASH td;
|
||||
\& unsigned char mac[16];
|
||||
\& int j;
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 2
|
||||
\& td = mhash_hmac_init(MHASH_MD5, password, keylen,
|
||||
\& mhash_get_hash_pblock(MHASH_MD5));
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 2
|
||||
\& mhash(td, data, datalen);
|
||||
\& mhash_hmac_deinit(td, mac);
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 4
|
||||
\& /*
|
||||
\& * The output should be 0x750c783e6ab0b503eaa86e310a5db738
|
||||
\& * according to RFC 2104.
|
||||
\& */
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 5
|
||||
\& printf("0x");
|
||||
\& for (j = 0; j < mhash_get_block_size(MHASH_MD5); j++) {
|
||||
\& printf("%.2x", mac[j]);
|
||||
\& }
|
||||
\& printf("\en");
|
||||
.Ve
|
||||
.PP
|
||||
.Vb 2
|
||||
\& exit(0);
|
||||
\& }
|
||||
.Ve
|
||||
.SH "HISTORY"
|
||||
.IX Header "HISTORY"
|
||||
This library was originally written by \fINikos Mavroyanopoulos\fR
|
||||
<nmav@hellug.gr> who passed the project over to \fISascha Schumann\fR
|
||||
<sascha@schumann.cx> in May 1999. Sascha maintained it until March 2000.
|
||||
The library is now maintained by \fINikos Mavroyanopoulos\fR.
|
||||
.SH "BUGS"
|
||||
.IX Header "BUGS"
|
||||
If you find any, please send a bug report (preferrably together with a patch)
|
||||
to the maintainer with a detailed description on how to reproduce the bug.
|
||||
.SH "AUTHORS"
|
||||
.IX Header "AUTHORS"
|
||||
Sascha Schumann <sascha@schumann.cx>
|
||||
Nikos Mavroyanopoulos <nmav@hellug.gr>
|
||||
@@ -0,0 +1,407 @@
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
B<mhash - Hash Library>
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
mhash MHASH_VERSION
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
#include "mhash.h"
|
||||
|
||||
B< Informative Functions >
|
||||
|
||||
size_t mhash_count(void);
|
||||
size_t mhash_get_block_size(hashid type);
|
||||
char *mhash_get_hash_name(hashid type);
|
||||
size_t mhash_get_hash_pblock(hashid type);
|
||||
hashid mhash_get_mhash_algo( MHASH);
|
||||
|
||||
B< Key Generation Functions >
|
||||
|
||||
int mhash_keygen_ext(keygenid algorithm, KEYGEN algorithm_data,
|
||||
void* keyword, int keysize,
|
||||
unsigned char* password, int passwordlen);
|
||||
|
||||
B< Initializing Functions >
|
||||
|
||||
MHASH mhash_init(hashid type);
|
||||
MHASH mhash_hmac_init(const hashid type, void *key, int keysize, int block);
|
||||
MHASH mhash_cp( MHASH);
|
||||
|
||||
B< Update Functions >
|
||||
|
||||
int mhash(MHASH thread, const void *plaintext, size_t size);
|
||||
|
||||
B< Save/Restore Functions >
|
||||
|
||||
int mhash_save_state_mem(MHASH thread, void *mem, int* mem_size );
|
||||
MHASH mhash_restore_state_mem(void* mem);
|
||||
|
||||
B< Finalizing Functions >
|
||||
|
||||
void mhash_deinit(MHASH thread, void *result);
|
||||
void *mhash_end(MHASH thread);
|
||||
void *mhash_end_m(MHASH thread, void* (*hash_malloc)(size_t));
|
||||
|
||||
void *mhash_hmac_end(MHASH thread);
|
||||
void *mhash_hmac_end_m(MHASH thread, void* (*hash_malloc)(size_t));
|
||||
int mhash_hmac_deinit(MHASH thread, void *result);
|
||||
|
||||
B< Available Hashes >
|
||||
|
||||
I<CRC32>:
|
||||
The crc32 algorithm is used to compute checksums. The two variants used
|
||||
in mhash are: B<MHASH_CRC32> (like the one used in ethernet) and B<MHASH_CRC32B>
|
||||
(like the one used in ZIP programs).
|
||||
|
||||
I<ADLER32>:
|
||||
The adler32 algorithm is used to compute checksums. It is faster than
|
||||
CRC32 and it is considered to be as reliable as CRC32. This algorithm
|
||||
is defined as B<MHASH_ADLER32>.
|
||||
|
||||
I<MD5>: The MD5 algorithm by Ron Rivest and RSA. In mhash this algorithm is defined
|
||||
as B<MHASH_MD5>.
|
||||
|
||||
I<MD4>: The MD4 algorithm by Ron Rivest and RSA. This algorithm is
|
||||
considered broken, so don't use it. In mhash this algorithm is defined
|
||||
as B<MHASH_MD4>.
|
||||
|
||||
I<SHA1>/I<SHA256>: The SHA algorithm by US. NIST/NSA. This algorithm is specified
|
||||
for use in the NIST's Digital Signature Standard. In mhash these algorithm
|
||||
are defined as B<MHASH_SHA1> and B<MHASH_SHA256>.
|
||||
|
||||
I<HAVAL>:
|
||||
HAVAL is a one-way hashing algorithm with variable length of output.
|
||||
HAVAL is a modification of MD5.
|
||||
Defined in mhash as: B<MHASH_HAVAL256, MHASH_HAVAL192, MHASH_HAVAL160, MHASH_HAVAL128>.
|
||||
|
||||
I<RIPEMD160>:
|
||||
RIPEMD-160 is a 160-bit cryptographic hash function, designed by Hans Dobbertin, Antoon Bosselaers, and Bart Preneel. It is intended to be used as a secure replacement
|
||||
for the 128-bit hash functions MD4, MD5, and RIPEMD. MD4 and MD5 were developed by Ron Rivest for RSA Data Security, while RIPEMD was developed in the
|
||||
framework of the EU project RIPE (RACE Integrity Primitives Evaluation, 1988-1992).
|
||||
In mhash this algorithm is defined as B<MHASH_RIPEMD160>.
|
||||
|
||||
I<TIGER>: Tiger is a fast hash function, by Eli Biham and Ross Anderson.
|
||||
Tiger was designed to be very fast on modern computers, and in particular on the state-of-the-art 64-bit computers,
|
||||
while it is still not slower than other suggested hash functions on 32-bit machines.
|
||||
In mhash this algorithm is defined as: B<MHASH_TIGER, MHASH_TIGER160, MHASH_TIGER128>.
|
||||
|
||||
I<GOST>: GOST algorithm is a russian standard and it uses the
|
||||
GOST encryption algorithm to produce a 256 bit hash value. This algorithm
|
||||
is specified for use in the Russian Digital Signature Standard.
|
||||
In mhash this algorithm is defined as B<MHASH_GOST>.
|
||||
|
||||
B< Available Key Generation algorithms >
|
||||
|
||||
I<KEYGEN_MCRYPT>: The key generator used in mcrypt.
|
||||
|
||||
I<KEYGEN_ASIS>: Just returns the password as binary key.
|
||||
|
||||
I<KEYGEN_HEX>: Just converts a hex key into a binary one.
|
||||
|
||||
I<KEYGEN_PKDES>: The transformation used in Phil Karn's DES encryption program.
|
||||
|
||||
I<KEYGEN_S2K_SIMPLE>: The OpenPGP (rfc2440) Simple S2K.
|
||||
|
||||
I<KEYGEN_S2K_SALTED>: The OpenPGP Salted S2K.
|
||||
|
||||
I<KEYGEN_S2K_ISALTED>: The OpenPGP Iterated Salted S2K.
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
The B<mhash> library provides an easy to use C interface for several I<hash
|
||||
algorithms> (also known as "one-way" algorithms). These can be used to
|
||||
create checksums, message digests and more. Currently, MD5, SHA1, GOST, TIGER,
|
||||
RIPE-MD160, HAVAL and several other algorithms are supported.
|
||||
B<mhash> support I<HMAC generation>
|
||||
(a mechanism for message authentication using cryptographic hash
|
||||
functions, and is described in rfc2104). HMAC can be used to create
|
||||
message digests using a secret key, so that these message digests cannot
|
||||
be regenerated (or replaced) by someone else.
|
||||
A key generation mechanism was added to B<mhash> since I<key generation>
|
||||
algorithms usually involve hash algorithms.
|
||||
|
||||
=head1 API FUNCTIONS
|
||||
|
||||
We will describe the API of B<mhash> in detail now. The order follows
|
||||
the one in the SYNOPSIS directly.
|
||||
|
||||
=over 4
|
||||
|
||||
=item size_t B<mhash_count>(void);
|
||||
|
||||
This returns the C<hashid> of the last available hash. Hashes are numbered from
|
||||
0 to C<mhash_count()>.
|
||||
|
||||
=item size_t B<mhash_get_block_size>(hashid I<type>);
|
||||
|
||||
If I<type> exists, this returns the used blocksize of the hash I<type>
|
||||
in bytes. Otherwise, it returns 0.
|
||||
|
||||
=item char *B<mhash_get_hash_name>(hashid I<type>);
|
||||
|
||||
If I<type> exists, this returns the name of the hash I<type>. Otherwise, a
|
||||
C<NULL> pointer is returned. The string is allocated with malloc(3) seperately,
|
||||
so do not forget to free(3) it.
|
||||
|
||||
=item const char *B<mhash_get_hash_name_static>(hashid I<type>);
|
||||
|
||||
If I<type> exists, this returns the name of the hash I<type>. Otherwise, a
|
||||
C<NULL> pointer is returned.
|
||||
|
||||
=item size_t B<mhash_get_hash_pblock>(hashid I<type>);
|
||||
|
||||
It returns the block size that the algorithm operates. This is used
|
||||
in mhash_hmac_init. If the return value is 0 you shouldn't use that
|
||||
algorithm in HMAC.
|
||||
|
||||
=item hashid B<mhash_get_mhash_algo>(MHASH I<src>);
|
||||
|
||||
Returns the algorithm used in the state of I<src>.
|
||||
|
||||
=item MHASH B<mhash_init>(hashid I<type>);
|
||||
|
||||
This setups a context to begin hashing using the algorithm I<type>. It returns
|
||||
a descriptor to that context which will result in leaking memory, if you do not
|
||||
call mhash_deinit(3) later. Returns C<MHASH_FAILED> on failure.
|
||||
|
||||
=item MHASH B<mhash_hmac_init>(const hashid I<type>, void *I<key>, int I<keysize>, int I<block>);
|
||||
|
||||
This setups a context to begin hashing using the algorithm type in HMAC mode.
|
||||
I<key> should be a pointer to the
|
||||
key and I<keysize> its len. The I<block> is the block size (in bytes) that the algorithm
|
||||
operates. It should be obtained by mhash_get_hash_pblock(). If its 0 it defaults to 64.
|
||||
After calling it you should use mhash() to update the context.
|
||||
It returns a descriptor to that context which will result in leaking memory,
|
||||
if you do not call mhash_hmac_deinit(3) later.
|
||||
Returns C<MHASH_FAILED> on failure.
|
||||
|
||||
=item MHASH B<mhash_cp>(MHASH I<src>);
|
||||
|
||||
This setups a new context using the state of I<src>.
|
||||
|
||||
=item int B<mhash>(MHASH I<thread>, const void *I<plaintext>, size_t I<size>);
|
||||
|
||||
This updates the context described by I<thread> with I<plaintext>. I<size> is
|
||||
the length of I<plaintext> which may be binary data.
|
||||
|
||||
=item int B<mhash_save_state_mem>( MHASH I<thread>, void *I<mem>, int* I<mem_size>);
|
||||
|
||||
Saves the state of a hashing algorithm such that it can be restored at
|
||||
some later point in time using B<mhash_restore_state_mem>(). I<mem_size> should
|
||||
contain the size of the given I<mem> pointer. If it is not enough to hold
|
||||
the buffer the required value will be copied there.
|
||||
|
||||
=item MHASH B<mhash_restore_state_mem>(void* I<mem>);
|
||||
|
||||
Restores the state of a hashing algorithm that was saved using
|
||||
B<mhash_save_state_mem>(). Use like B<mhash_init>().
|
||||
|
||||
=item void *B<mhash_end>(MHASH I<thread>);
|
||||
|
||||
This frees all resources associated with I<thread> and returns the result of
|
||||
the whole hashing operation (the ``I<digest>'').
|
||||
|
||||
=item void B<mhash_deinit>(MHASH I<thread>, void* digest);
|
||||
|
||||
This frees all resources associated with I<thread> and stores the result of
|
||||
the whole hashing operation in memory pointed by I<digest>. I<digest>
|
||||
may be null.
|
||||
|
||||
=item void *B<mhash_hmac_end>(MHASH I<thread>);
|
||||
|
||||
This frees all resources associated with thread and returns the result of the
|
||||
whole hashing operation (the ``I<mac>'').
|
||||
|
||||
=item int B<mhash_hmac_deinit>(MHASH I<thread>, void* digest);
|
||||
|
||||
This frees all resources associated with I<thread> and stores the result of
|
||||
the whole hashing operation in memory pointed by digest. Digest may be
|
||||
null. Returns non-zero in case of an error.
|
||||
|
||||
=item void *B<mhash_end_m>(MHASH I<thread>, void* (*hash_malloc)(size_t));
|
||||
|
||||
This frees all resources associated with I<thread> and returns the result of
|
||||
the whole hashing operation (the ``I<digest>''). The result will be allocated
|
||||
by using the hash_malloc() function provided.
|
||||
|
||||
=item void *B<mhash_hmac_end>(MHASH I<thread>, void* (*hash_malloc)(size_t));
|
||||
|
||||
This frees all resources associated with thread and returns the result of the
|
||||
whole hashing operation (the ``I<mac>''). The result will be allocated
|
||||
by using the hash_malloc() function provided.
|
||||
|
||||
=head1 KEYGEN API FUNCTIONS
|
||||
|
||||
We will now describe the Key Generation API of B<mhash> in detail.
|
||||
|
||||
=item int B<mhash_keygen_ext>(keygenid I<algorithm>, KEYGEN I<algorithm_data>, void* I<keyword>, int I<keysize>, unsigned char* I<password>, int I<passwordlen>);
|
||||
|
||||
This function, generates a key from a password. The password is read from
|
||||
I<password> and it's len should be in I<passwordlen>.
|
||||
The key generation algorithm is specified in I<algorithm>, and that algorithm may (internally)
|
||||
use the KEYGEN structure. The KEYGEN structure consists of:
|
||||
typedef struct keygen {
|
||||
hashid hash_algorithm[2];
|
||||
unsigned int count;
|
||||
void* salt;
|
||||
int salt_size;
|
||||
} KEYGEN;
|
||||
|
||||
The algorithm(s) specified in I<algorithm_data.hash_algorithm>, should be hash
|
||||
algorithms and may be used by the key generation algorithm. Some key generation algorithms
|
||||
may use more than one hash algorithms (view also mhash_keygen_uses_hash_algorithm()).
|
||||
If it is desirable (and supported by the algorithm, eg. KEYGEN_S2K_SALTED)
|
||||
a salt may be specified in I<algorithm_data.salt> of size I<algorithm_data.salt_size>
|
||||
or may be NULL.
|
||||
|
||||
The algorithm may use the I<algorithm_data.count> internally (eg. KEYGEN_S2K_ISALTED).
|
||||
The generated keyword is stored in I<keyword>, which should be (at least) I<keysize> bytes long.
|
||||
The generated keyword is a binary one. Returns a negative number on failure.
|
||||
|
||||
=item int B<mhash_keygen_uses_salt>( keygenid I<algorithm>);
|
||||
|
||||
This function returns 1 if the specified key generation algorithm needs
|
||||
a salt to be specified.
|
||||
|
||||
=item int B<mhash_keygen_uses_count>( keygenid I<algorithm>);
|
||||
|
||||
This function returns 1 if the specified key generation algorithm needs
|
||||
the algorithm_data.count field in mhash_keygen_ext(). The count field tells the algorithm
|
||||
to hash repeatedly the password and to stop when B<count> bytes have
|
||||
been processed.
|
||||
|
||||
=item int B<mhash_get_keygen_salt_size>( keygenid I<algorithm>);
|
||||
|
||||
This function returns the size of the salt size, that the specific
|
||||
I<algorithm> will use. If it returns 0, then there is no limitation in
|
||||
the size.
|
||||
|
||||
=item int B<mhash_get_keygen_max_key_size>( keygenid I<algorithm>);
|
||||
|
||||
This function returns the maximum size of the key, that the key generation
|
||||
algorithm may produce.
|
||||
If it returns 0, then there is no limitation in the size.
|
||||
|
||||
=item int B<mhash_keygen_uses_hash_algorithm>( keygenid I<algorithm>);
|
||||
|
||||
This function returns the number of the hash algorithms the key generation
|
||||
algorithm will use. If it is 0 then no hash algorithm is used by the
|
||||
key generation algorithm. This is for the I<algorithm_data.hash_algorithm> field in
|
||||
mhash_keygen_ext(). If
|
||||
|
||||
=item size_t B<mhash_keygen_count>(void);
|
||||
|
||||
This returns the C<keygenid> of the last available key generation algorithm.
|
||||
Algorithms are numbered from 0 to C<mhash_keygen_count()>.
|
||||
|
||||
=item char *B<mhash_get_keygen_name>(keygenid I<type>);
|
||||
|
||||
If I<type> exists, this returns the name of the keygen I<type>. Otherwise, a
|
||||
C<NULL> pointer is returned. The string is allocated with malloc(3) seperately,
|
||||
so do not forget to free(3) it.
|
||||
|
||||
=item const char *B<mhash_get_keygen_name_static>(keygenid I<type>);
|
||||
|
||||
If I<type> exists, this returns the name of the keygen I<type>. Otherwise, a
|
||||
C<NULL> pointer is returned.
|
||||
|
||||
=back
|
||||
|
||||
=head1 EXAMPLE
|
||||
|
||||
Hashing STDIN until EOF.
|
||||
|
||||
#include <mhash.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int i;
|
||||
MHASH td;
|
||||
unsigned char buffer;
|
||||
unsigned char hash[16]; /* enough size for MD5 */
|
||||
|
||||
td = mhash_init(MHASH_MD5);
|
||||
|
||||
if (td == MHASH_FAILED) exit(1);
|
||||
|
||||
while (fread(&buffer, 1, 1, stdin) == 1) {
|
||||
mhash(td, &buffer, 1);
|
||||
}
|
||||
|
||||
mhash_deinit(td, hash);
|
||||
|
||||
printf("Hash:");
|
||||
for (i = 0; i < mhash_get_block_size(MHASH_MD5); i++) {
|
||||
printf("%.2x", hash[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
=head1 EXAMPLE
|
||||
|
||||
An example program using HMAC:
|
||||
|
||||
#include <mhash.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
char password[] = "Jefe";
|
||||
int keylen = 4;
|
||||
char data[] = "what do ya want for nothing?";
|
||||
int datalen = 28;
|
||||
MHASH td;
|
||||
unsigned char mac[16];
|
||||
int j;
|
||||
|
||||
td = mhash_hmac_init(MHASH_MD5, password, keylen,
|
||||
mhash_get_hash_pblock(MHASH_MD5));
|
||||
|
||||
mhash(td, data, datalen);
|
||||
mhash_hmac_deinit(td, mac);
|
||||
|
||||
/*
|
||||
* The output should be 0x750c783e6ab0b503eaa86e310a5db738
|
||||
* according to RFC 2104.
|
||||
*/
|
||||
|
||||
printf("0x");
|
||||
for (j = 0; j < mhash_get_block_size(MHASH_MD5); j++) {
|
||||
printf("%.2x", mac[j]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
This library was originally written by I<Nikos Mavroyanopoulos>
|
||||
<nmav@hellug.gr> who passed the project over to I<Sascha Schumann>
|
||||
<sascha@schumann.cx> in May 1999. Sascha maintained it until March 2000.
|
||||
The library is now maintained by I<Nikos Mavroyanopoulos>.
|
||||
|
||||
=head1 BUGS
|
||||
|
||||
If you find any, please send a bug report (preferrably together with a patch)
|
||||
to the maintainer with a detailed description on how to reproduce the bug.
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Sascha Schumann <sascha@schumann.cx>
|
||||
Nikos Mavroyanopoulos <nmav@hellug.gr>
|
||||
|
||||
=cut
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
Secure User authentication using HMAC and SKID2
|
||||
|
||||
In some cases it may be usefull to provide secure authentication
|
||||
without the need of an encryption layer. We'll now discuss how to
|
||||
implement the protocol SKID2 using the mhash HMAC functions.
|
||||
|
||||
Ok let's now assume we're on the server side and we want to authenticate
|
||||
a client using username-password but without transmitting the password
|
||||
in the clear.
|
||||
|
||||
Step 1. The server sends a random string (over 8 bytes) to the client
|
||||
Let's call it RANDOM1.
|
||||
We send client RANDOM1.
|
||||
|
||||
Step 2. The client reads RANDOM1 and gets
|
||||
the username and password from the user.
|
||||
The client now calculates
|
||||
X = HMAC( password, RANDOM1+RANDOM2).
|
||||
RANDOM2 is a random string generated by the client. Client sends
|
||||
the server X, USERNAME, RANDOM2.
|
||||
|
||||
Step 3. The server now has the values: RANDOM1, RANDOM2, USERNAME, X.
|
||||
a. Checks the users database for USERNAME and retrieves the
|
||||
user's password (PASSWORD).
|
||||
b. Checks if HMAC( PASSWORD, RANDOM1+RANDOM2) == X
|
||||
If it is not the same abort.
|
||||
|
||||
|
||||
Now we have the user authenticated.
|
||||
@@ -0,0 +1,417 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# include/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
|
||||
pkgdatadir = $(datadir)/mhash
|
||||
pkglibdir = $(libdir)/mhash
|
||||
pkgincludedir = $(includedir)/mhash
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
target_triplet = x86_64-unknown-linux-gnu
|
||||
subdir = include
|
||||
DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(includedir)"
|
||||
nobase_includeHEADERS_INSTALL = $(install_sh_DATA)
|
||||
HEADERS = $(nobase_include_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run tar
|
||||
AR = ar
|
||||
AS = as
|
||||
AUTOCONF = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCAS = gcc
|
||||
CCASFLAGS = -g -O2
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS = -g -O2
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=gcc3
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = dlltool
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = /bin/grep -E
|
||||
EXEEXT =
|
||||
F77 =
|
||||
FFLAGS =
|
||||
GREP = /bin/grep
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS =
|
||||
MAINT = #
|
||||
MAINTAINER_MODE_FALSE =
|
||||
MAINTAINER_MODE_TRUE = #
|
||||
MAKEINFO = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run makeinfo
|
||||
OBJDUMP = objdump
|
||||
OBJEXT = o
|
||||
PACKAGE = mhash
|
||||
PACKAGE_BUGREPORT = mhash-devel@sourceforge.net
|
||||
PACKAGE_NAME = MHASH
|
||||
PACKAGE_STRING = MHASH 0.9.9
|
||||
PACKAGE_TARNAME = mhash
|
||||
PACKAGE_VERSION = 0.9.9
|
||||
PATH_SEPARATOR = :
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
VERSION = 0.9.9
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 =
|
||||
am__fastdepCC_FALSE = #
|
||||
am__fastdepCC_TRUE =
|
||||
am__fastdepCXX_FALSE = #
|
||||
am__fastdepCXX_TRUE =
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
htmldir = ${docdir}
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target = x86_64-unknown-linux-gnu
|
||||
target_alias =
|
||||
target_cpu = x86_64
|
||||
target_os = linux-gnu
|
||||
target_vendor = unknown
|
||||
nobase_include_HEADERS = mhash.h mutils/mhash.h mutils/mglobal.h mutils/mtypes.h mutils/mutils.h mutils/mhash_config.h mutils/mincludes.h
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu include/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: # $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-nobase_includeHEADERS: $(nobase_include_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
|
||||
@$(am__vpath_adj_setup) \
|
||||
list='$(nobase_include_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
$(am__vpath_adj) \
|
||||
echo " $(nobase_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
$(nobase_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-nobase_includeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@$(am__vpath_adj_setup) \
|
||||
list='$(nobase_include_HEADERS)'; for p in $$list; do \
|
||||
$(am__vpath_adj) \
|
||||
echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/mutils
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(includedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-nobase_includeHEADERS
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-nobase_includeHEADERS
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libtool ctags dist-hook distclean distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-nobase_includeHEADERS \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-nobase_includeHEADERS
|
||||
|
||||
|
||||
dist-hook:
|
||||
find $(distdir) -name CVS -o -name .cvsignore | xargs rm -rf
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,6 @@
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
nobase_include_HEADERS = mhash.h mutils/mhash.h mutils/mglobal.h mutils/mtypes.h mutils/mutils.h mutils/mhash_config.h mutils/mincludes.h
|
||||
|
||||
dist-hook:
|
||||
find $(distdir) -name CVS -o -name .cvsignore | xargs rm -rf
|
||||
@@ -0,0 +1,417 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = include
|
||||
DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(includedir)"
|
||||
nobase_includeHEADERS_INSTALL = $(install_sh_DATA)
|
||||
HEADERS = $(nobase_include_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AS = @AS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
nobase_include_HEADERS = mhash.h mutils/mhash.h mutils/mglobal.h mutils/mtypes.h mutils/mutils.h mutils/mhash_config.h mutils/mincludes.h
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu include/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-nobase_includeHEADERS: $(nobase_include_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
|
||||
@$(am__vpath_adj_setup) \
|
||||
list='$(nobase_include_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
$(am__vpath_adj) \
|
||||
echo " $(nobase_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
$(nobase_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-nobase_includeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@$(am__vpath_adj_setup) \
|
||||
list='$(nobase_include_HEADERS)'; for p in $$list; do \
|
||||
$(am__vpath_adj) \
|
||||
echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/mutils
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(includedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-nobase_includeHEADERS
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-nobase_includeHEADERS
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libtool ctags dist-hook distclean distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-nobase_includeHEADERS \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-nobase_includeHEADERS
|
||||
|
||||
|
||||
dist-hook:
|
||||
find $(distdir) -name CVS -o -name .cvsignore | xargs rm -rf
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,13 @@
|
||||
#if !defined(__MHASH_H)
|
||||
#define __MHASH_H
|
||||
|
||||
#define MUTILS_USE_MHASH_CONFIG
|
||||
|
||||
#include <mutils/mincludes.h>
|
||||
#include <mutils/mglobal.h>
|
||||
#include <mutils/mtypes.h>
|
||||
#include <mutils/mutils.h>
|
||||
#include <mutils/mhash.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Jonathan Day, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(__MGLOBAL_H)
|
||||
#define __MGLOBAL_H
|
||||
|
||||
#define MHASH_API_NONE 0
|
||||
#define MHASH_API_CLASSIC 1
|
||||
#define MHASH_API_FAMILY 2
|
||||
|
||||
#define MHASH_API_VERSION 20060101
|
||||
#define MHASH_API_TYPE MHASH_API_CLASSIC
|
||||
/* #define MHASH_API_TYPE MHASH_API_FAMILY */
|
||||
#define MHASH_API_FULL
|
||||
|
||||
typedef enum __hashid {
|
||||
#if (MHASH_API_TYPE == MHASH_API_CLASSIC)
|
||||
MHASH_CRC32 = 0,
|
||||
MHASH_MD5 = 1,
|
||||
MHASH_SHA1 = 2,
|
||||
MHASH_HAVAL256 = 3,
|
||||
MHASH_RIPEMD160 = 5,
|
||||
MHASH_TIGER192 = 7,
|
||||
MHASH_GOST = 8,
|
||||
MHASH_CRC32B = 9,
|
||||
MHASH_HAVAL224 = 10,
|
||||
MHASH_HAVAL192 = 11,
|
||||
MHASH_HAVAL160 = 12,
|
||||
MHASH_HAVAL128 = 13,
|
||||
MHASH_TIGER128 = 14,
|
||||
MHASH_TIGER160 = 15,
|
||||
MHASH_MD4 = 16,
|
||||
MHASH_SHA256 = 17,
|
||||
MHASH_ADLER32 = 18,
|
||||
MHASH_SHA224 = 19,
|
||||
MHASH_SHA512 = 20,
|
||||
MHASH_SHA384 = 21,
|
||||
MHASH_WHIRLPOOL = 22,
|
||||
MHASH_RIPEMD128 = 23,
|
||||
MHASH_RIPEMD256 = 24,
|
||||
MHASH_RIPEMD320 = 25,
|
||||
MHASH_SNEFRU128 = 26,
|
||||
MHASH_SNEFRU256 = 27,
|
||||
MHASH_MD2 = 28,
|
||||
MHASH_AR = 64, /* NOT YET IMPLEMENTED */
|
||||
MHASH_BOOGNISH = 65, /* NOT YET IMPLEMENTED */
|
||||
MHASH_CELLHASH = 66, /* NOT YET IMPLEMENTED */
|
||||
MHASH_FFT_HASH_I = 67, /* NOT YET IMPLEMENTED */
|
||||
MHASH_FFT_HASH_II = 68, /* NOT YET IMPLEMENTED */
|
||||
MHASH_NHASH = 69, /* NOT YET IMPLEMENTED */
|
||||
MHASH_PANAMA = 70, /* NOT YET IMPLEMENTED */
|
||||
MHASH_SMASH = 71, /* NOT YET IMPLEMENTED */
|
||||
MHASH_SUBHASH = 72 /* NOT YET IMPLEMENTED */
|
||||
#endif
|
||||
#if (MHASH_API_TYPE == MHASH_API_FAMILY)
|
||||
MHASH_CRC32 = 0x0001,
|
||||
MHASH_CRC32B = 0x0002,
|
||||
MHASH_ADLER32 = 0x0011,
|
||||
MHASH_MD2 = 0x0101,
|
||||
MHASH_MD4 = 0x0111,
|
||||
MHASH_RIPEMD128 = 0x0112,
|
||||
MHASH_RIPEMD160 = 0x0113,
|
||||
MHASH_RIPEMD256 = 0x0114,
|
||||
MHASH_RIPEMD320 = 0x0115,
|
||||
MHASH_MD5 = 0x0121,
|
||||
MHASH_SHA1 = 0x0201,
|
||||
MHASH_SHA224 = 0x0201,
|
||||
MHASH_SHA256 = 0x0202,
|
||||
MHASH_SHA384 = 0x0203,
|
||||
MHASH_SHA512 = 0x0204,
|
||||
MHASH_HAVAL128 = 0x0301,
|
||||
MHASH_HAVAL160 = 0x0302,
|
||||
MHASH_HAVAL192 = 0x0303,
|
||||
MHASH_HAVAL224 = 0x0304,
|
||||
MHASH_HAVAL256 = 0x0305, /* 3 passes */
|
||||
MHASH_TIGER128 = 0x0401,
|
||||
MHASH_TIGER160 = 0x0402,
|
||||
MHASH_TIGER192 = 0x0403,
|
||||
MHASH_GOST = 0x0501,
|
||||
MHASH_WHIRLPOOL = 0x0601,
|
||||
MHASH_SNEFRU128 = 0x0701, /* 8 passes */
|
||||
MHASH_SNEFRU256 = 0x0702, /* 8 passes */
|
||||
MHASH_AR = 0x0801, /* NOT YET IMPLEMENTED */
|
||||
MHASH_BOOGNISH = 0x0901, /* NOT YET IMPLEMENTED */
|
||||
MHASH_CELLHASH = 0x0a01, /* NOT YET IMPLEMENTED */
|
||||
MHASH_FFT_HASH_I = 0x0b01, /* NOT YET IMPLEMENTED */
|
||||
MHASH_FFT_HASH_II = 0x0b02, /* NOT YET IMPLEMENTED */
|
||||
MHASH_NHASH = 0x0c01, /* NOT YET IMPLEMENTED */
|
||||
MHASH_PANAMA = 0x0d01, /* NOT YET IMPLEMENTED */
|
||||
MHASH_SMASH = 0x0e01, /* NOT YET IMPLEMENTED */
|
||||
MHASH_SUBHASH = 0x0f01 /* NOT YET IMPLEMENTED */
|
||||
#endif
|
||||
} hashid;
|
||||
|
||||
/* These aliases are actually quite useful and so will be kept */
|
||||
|
||||
#define MHASH_HAVAL MHASH_HAVAL256
|
||||
#define MHASH_TIGER MHASH_TIGER192
|
||||
|
||||
typedef enum __keygenid {
|
||||
KEYGEN_MCRYPT, /* The key generator used in mcrypt */
|
||||
KEYGEN_ASIS, /* Just returns the password as binary key */
|
||||
KEYGEN_HEX, /* Just converts a hex key into a binary one */
|
||||
KEYGEN_PKDES, /* The transformation used in Phil Karn's DES
|
||||
* encryption program */
|
||||
KEYGEN_S2K_SIMPLE, /* The OpenPGP (rfc2440) Simple S2K */
|
||||
KEYGEN_S2K_SALTED, /* The OpenPGP Salted S2K */
|
||||
KEYGEN_S2K_ISALTED /* The OpenPGP Iterated Salted S2K */
|
||||
} keygenid;
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* Copyright (C) 1998 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
* Copyright (C) 2001 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 2004,2005,2006,2007,2008 MHash Development Group
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(__MUTILS_MHASH_H)
|
||||
#define __MUTILS_MHASH_H
|
||||
|
||||
/* $Id: mhash.h,v 1.2 2006/01/09 07:27:04 imipak Exp $ */
|
||||
|
||||
#if defined(MUTILS_USE_MHASH_CONFIG)
|
||||
#include <mutils/mhash_config.h>
|
||||
#endif
|
||||
|
||||
#include <mutils/mglobal.h>
|
||||
#include <mutils/mutils.h>
|
||||
#include <mutils/mtypes.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* these are for backwards compatibility and will
|
||||
be removed at some time */
|
||||
#ifdef MHASH_BACKWARDS_COMPATIBLE
|
||||
# define hmac_mhash_init mhash_hmac_init
|
||||
# define hmac_mhash_end mhash_hmac_end
|
||||
#endif
|
||||
|
||||
/* typedefs */
|
||||
|
||||
typedef struct mhash_hash_entry mhash_hash_entry;
|
||||
|
||||
#if defined(PROTOTYPES)
|
||||
|
||||
/* information prototypes */
|
||||
|
||||
mutils_word32 mhash_count(void);
|
||||
mutils_word32 mhash_get_block_size(hashid type);
|
||||
mutils_word8 *mhash_get_hash_name(hashid type);
|
||||
void mhash_free(void *ptr);
|
||||
|
||||
__const mutils_word8 *mhash_get_hash_name_static(hashid type);
|
||||
|
||||
/* initializing prototypes */
|
||||
|
||||
MHASH mhash_init(hashid type);
|
||||
|
||||
/* copy prototypes */
|
||||
|
||||
MHASH mhash_cp(MHASH from);
|
||||
|
||||
/* update prototype */
|
||||
|
||||
mutils_boolean mhash(MHASH thread, const void *plaintext, mutils_word32 size);
|
||||
|
||||
/* finalizing prototype */
|
||||
|
||||
void *mhash_end(MHASH thread);
|
||||
void *mhash_end_m(MHASH thread, void *(*hash_malloc) (mutils_word32));
|
||||
void mhash_deinit(MHASH thread, void *result);
|
||||
|
||||
/* informational */
|
||||
|
||||
mutils_word32 mhash_get_hash_pblock(hashid type);
|
||||
hashid mhash_get_mhash_algo(MHASH tmp);
|
||||
|
||||
/* HMAC */
|
||||
|
||||
MHASH mhash_hmac_init(const hashid type, void *key, mutils_word32 keysize, mutils_word32 block);
|
||||
void *mhash_hmac_end_m(MHASH thread, void *(*hash_malloc) (mutils_word32));
|
||||
void *mhash_hmac_end(MHASH thread);
|
||||
mutils_boolean mhash_hmac_deinit(MHASH thread, void *result);
|
||||
|
||||
/* Save state functions */
|
||||
|
||||
mutils_boolean mhash_save_state_mem(MHASH thread, void *mem, mutils_word32 *mem_size);
|
||||
MHASH mhash_restore_state_mem(void *mem);
|
||||
|
||||
/* Key generation functions */
|
||||
|
||||
mutils_error mhash_keygen(keygenid algorithm, hashid opt_algorithm,
|
||||
mutils_word64 count,
|
||||
void *keyword, mutils_word32 keysize,
|
||||
void *salt, mutils_word32 saltsize,
|
||||
mutils_word8 *password, mutils_word32 passwordlen);
|
||||
|
||||
mutils_error mhash_keygen_ext(keygenid algorithm, KEYGEN data,
|
||||
void *keyword, mutils_word32 keysize,
|
||||
mutils_word8 *password, mutils_word32 passwordlen);
|
||||
|
||||
mutils_word8 *mhash_get_keygen_name(keygenid type);
|
||||
|
||||
mutils_word32 mhash_get_keygen_salt_size(keygenid type);
|
||||
mutils_word32 mhash_get_keygen_max_key_size(keygenid type);
|
||||
mutils_word32 mhash_keygen_count(void);
|
||||
|
||||
mutils_boolean mhash_keygen_uses_salt(keygenid type);
|
||||
mutils_boolean mhash_keygen_uses_count(keygenid type);
|
||||
mutils_boolean mhash_keygen_uses_hash_algorithm(keygenid type);
|
||||
|
||||
#else
|
||||
|
||||
/* information prototypes */
|
||||
|
||||
mutils_word32 mhash_count();
|
||||
mutils_word32 mhash_get_block_size();
|
||||
mutils_word8 *mhash_get_hash_name();
|
||||
void mhash_free();
|
||||
|
||||
__const mutils_word8 *mhash_get_hash_name_static();
|
||||
|
||||
/* initializing prototypes */
|
||||
|
||||
MHASH mhash_init();
|
||||
|
||||
/* copy prototypes */
|
||||
|
||||
MHASH mhash_cp();
|
||||
|
||||
/* update prototype */
|
||||
|
||||
mutils_boolean mhash();
|
||||
|
||||
/* finalizing prototype */
|
||||
|
||||
void *mhash_end();
|
||||
void *mhash_end_m();
|
||||
void mhash_deinit();
|
||||
|
||||
/* informational */
|
||||
|
||||
mutils_word32 mhash_get_hash_pblock();
|
||||
hashid mhash_get_mhash_algo();
|
||||
|
||||
/* HMAC */
|
||||
|
||||
MHASH mhash_hmac_init();
|
||||
void *mhash_hmac_end_m();
|
||||
void *mhash_hmac_end();
|
||||
mutils_boolean mhash_hmac_deinit();
|
||||
|
||||
/* Save state functions */
|
||||
|
||||
mutils_boolean mhash_save_state_mem();
|
||||
MHASH mhash_restore_state_mem();
|
||||
|
||||
/* Key generation functions */
|
||||
|
||||
mutils_error mhash_keygen();
|
||||
mutils_error mhash_keygen_ext();
|
||||
|
||||
mutils_word8 *mhash_get_keygen_name();
|
||||
|
||||
mutils_word32 mhash_get_keygen_salt_size();
|
||||
mutils_word32 mhash_get_keygen_max_key_size();
|
||||
mutils_word32 mhash_keygen_count();
|
||||
|
||||
mutils_boolean mhash_keygen_uses_salt();
|
||||
mutils_boolean mhash_keygen_uses_count();
|
||||
mutils_boolean mhash_keygen_uses_hash_algorithm();
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !MHASH_H */
|
||||
@@ -0,0 +1,260 @@
|
||||
/* include/mutils/mhash_config.h. Generated from mhash_config.h.in by configure. */
|
||||
/* include/mutils/mhash_config.h.in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* "Adler32 Algorithm" */
|
||||
#define ENABLE_ADLER32 1
|
||||
|
||||
/* "CRC32 Algorithm" */
|
||||
#define ENABLE_CRC32 1
|
||||
|
||||
/* "GOST Algorithm" */
|
||||
#define ENABLE_GOST 1
|
||||
|
||||
/* "Haval Algorithm" */
|
||||
#define ENABLE_HAVAL 1
|
||||
|
||||
/* "MD-2 Algorithm" */
|
||||
#define ENABLE_MD2 1
|
||||
|
||||
/* "MD-4 Algorithm" */
|
||||
#define ENABLE_MD4 1
|
||||
|
||||
/* "MD-5 Algorithm" */
|
||||
#define ENABLE_MD5 1
|
||||
|
||||
/* "RIPE-MD - RIPE Substitute for MD" */
|
||||
#define ENABLE_RIPEMD 1
|
||||
|
||||
/* "SHA-1 Algorithm" */
|
||||
#define ENABLE_SHA1 1
|
||||
|
||||
/* "SHA-224 and SHA-256 - SHA-2 Algorithms" */
|
||||
#define ENABLE_SHA256_SHA224 1
|
||||
|
||||
/* "SHA-384 and SHA-512 - SHA-2 Algorithms" */
|
||||
#define ENABLE_SHA512_SHA384 1
|
||||
|
||||
/* "Snefru Algorithm" */
|
||||
#define ENABLE_SNEFRU 1
|
||||
|
||||
/* "Tiger Algorithm" */
|
||||
#define ENABLE_TIGER 1
|
||||
|
||||
/* "Whirlpool Algorithm" */
|
||||
#define ENABLE_WHIRLPOOL 1
|
||||
|
||||
/* Define to 1 if you have the <assert.h> header file. */
|
||||
#define HAVE_ASSERT_H 1
|
||||
|
||||
/* Define to 1 if you have the `bcopy' function. */
|
||||
#define HAVE_BCOPY 1
|
||||
|
||||
/* Define to 1 if you have the <byteswap.h> header file. */
|
||||
#define HAVE_BYTESWAP_H 1
|
||||
|
||||
/* Define to 1 if you have the `bzero' function. */
|
||||
#define HAVE_BZERO 1
|
||||
|
||||
/* Define to 1 if you have the <ctype.h> header file. */
|
||||
#define HAVE_CTYPE_H 1
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#define HAVE_DLFCN_H 1
|
||||
|
||||
/* Define to 1 if you have the <endian.h> header file. */
|
||||
#define HAVE_ENDIAN_H 1
|
||||
|
||||
/* Define to 1 if you have the <errno.h> header file. */
|
||||
#define HAVE_ERRNO_H 1
|
||||
|
||||
/* Define to 1 if you have the `fcntl' function. */
|
||||
#define HAVE_FCNTL 1
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
#define HAVE_FCNTL_H 1
|
||||
|
||||
/* Define to 1 if you have the `fsync' function. */
|
||||
#define HAVE_FSYNC 1
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#define HAVE_INTTYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the `dmalloc' library (-ldmalloc). */
|
||||
/* #undef HAVE_LIBDMALLOC */
|
||||
|
||||
/* Define to 1 if you have the <limits.h> header file. */
|
||||
#define HAVE_LIMITS_H 1
|
||||
|
||||
/* Define to 1 if you have the `lstat' function. */
|
||||
#define HAVE_LSTAT 1
|
||||
|
||||
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
|
||||
to 0 otherwise. */
|
||||
#define HAVE_MALLOC 1
|
||||
|
||||
/* Define to 1 if you have the <malloc.h> header file. */
|
||||
#define HAVE_MALLOC_H 1
|
||||
|
||||
/* Define to 1 if you have the `memmove' function. */
|
||||
#define HAVE_MEMMOVE 1
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#define HAVE_MEMORY_H 1
|
||||
|
||||
/* Define to 1 if you have the `memset' function. */
|
||||
#define HAVE_MEMSET 1
|
||||
|
||||
/* Define to 1 if you have the `mlock' function. */
|
||||
#define HAVE_MLOCK 1
|
||||
|
||||
/* Define to 1 if you have the `readdir' function. */
|
||||
#define HAVE_READDIR 1
|
||||
|
||||
/* Define to 1 if you have the `readdir_r' function. */
|
||||
#define HAVE_READDIR_R 1
|
||||
|
||||
/* Define to 1 if you have the `sigaction' function. */
|
||||
#define HAVE_SIGACTION 1
|
||||
|
||||
/* Define to 1 if you have the `signal' function. */
|
||||
#define HAVE_SIGNAL 1
|
||||
|
||||
/* Define to 1 if you have the <signal.h> header file. */
|
||||
#define HAVE_SIGNAL_H 1
|
||||
|
||||
/* Define to 1 if you have the `stat' function. */
|
||||
#define HAVE_STAT 1
|
||||
|
||||
/* Define to 1 if stdbool.h conforms to C99. */
|
||||
#define HAVE_STDBOOL_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#define HAVE_STDINT_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdio.h> header file. */
|
||||
#define HAVE_STDIO_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#define HAVE_STRINGS_H 1
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the `strtol' function. */
|
||||
#define HAVE_STRTOL 1
|
||||
|
||||
/* Define to 1 if you have the <sys/endian.h> header file. */
|
||||
/* #undef HAVE_SYS_ENDIAN_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/mman.h> header file. */
|
||||
#define HAVE_SYS_MMAN_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the `umask' function. */
|
||||
#define HAVE_UMASK 1
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#define HAVE_UNISTD_H 1
|
||||
|
||||
/* Define to 1 if you have the `utime' function. */
|
||||
#define HAVE_UTIME 1
|
||||
|
||||
/* Define to 1 if you have the <utime.h> header file. */
|
||||
#define HAVE_UTIME_H 1
|
||||
|
||||
/* Define to 1 if you have the <values.h> header file. */
|
||||
#define HAVE_VALUES_H 1
|
||||
|
||||
/* Define to 1 if the system has the type `_Bool'. */
|
||||
#define HAVE__BOOL 1
|
||||
|
||||
/* "MHash Version" */
|
||||
#define MHASH_VERSION PROGRAM_VERSION
|
||||
|
||||
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
|
||||
/* #undef NO_MINUS_C_MINUS_O */
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "mhash"
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#define PACKAGE_BUGREPORT "mhash-devel@sourceforge.net"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "MHASH"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "MHASH 0.9.9"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "mhash"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "0.9.9"
|
||||
|
||||
/* Define to 1 if the C compiler supports function prototypes. */
|
||||
#define PROTOTYPES 1
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* dmalloc */
|
||||
/* #undef USE_DMALLOC */
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "0.9.9"
|
||||
|
||||
/* Define if using the dmalloc debugging malloc package */
|
||||
/* #undef WITH_DMALLOC */
|
||||
|
||||
/* Define to 1 if your processor stores words with the most significant byte
|
||||
first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
/* #undef WORDS_BIGENDIAN */
|
||||
|
||||
/* Define to 1 if on AIX 3.
|
||||
System headers sometimes define this.
|
||||
We just want to avoid a redefinition error message. */
|
||||
#ifndef _ALL_SOURCE
|
||||
/* # undef _ALL_SOURCE */
|
||||
#endif
|
||||
|
||||
/* Enable GNU extensions on systems that have them. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if on MINIX. */
|
||||
/* #undef _MINIX */
|
||||
|
||||
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||
this defined. */
|
||||
/* #undef _POSIX_1_SOURCE */
|
||||
|
||||
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||
/* #undef _POSIX_SOURCE */
|
||||
|
||||
/* Define like PROTOTYPES; this can be used by system headers. */
|
||||
#define __PROTOTYPES 1
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
/* #undef const */
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
/* #undef inline */
|
||||
#endif
|
||||
|
||||
/* Define to rpl_malloc if the replacement function should be used. */
|
||||
/* #undef malloc */
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
/* #undef size_t */
|
||||
@@ -0,0 +1,259 @@
|
||||
/* include/mutils/mhash_config.h.in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* "Adler32 Algorithm" */
|
||||
#undef ENABLE_ADLER32
|
||||
|
||||
/* "CRC32 Algorithm" */
|
||||
#undef ENABLE_CRC32
|
||||
|
||||
/* "GOST Algorithm" */
|
||||
#undef ENABLE_GOST
|
||||
|
||||
/* "Haval Algorithm" */
|
||||
#undef ENABLE_HAVAL
|
||||
|
||||
/* "MD-2 Algorithm" */
|
||||
#undef ENABLE_MD2
|
||||
|
||||
/* "MD-4 Algorithm" */
|
||||
#undef ENABLE_MD4
|
||||
|
||||
/* "MD-5 Algorithm" */
|
||||
#undef ENABLE_MD5
|
||||
|
||||
/* "RIPE-MD - RIPE Substitute for MD" */
|
||||
#undef ENABLE_RIPEMD
|
||||
|
||||
/* "SHA-1 Algorithm" */
|
||||
#undef ENABLE_SHA1
|
||||
|
||||
/* "SHA-224 and SHA-256 - SHA-2 Algorithms" */
|
||||
#undef ENABLE_SHA256_SHA224
|
||||
|
||||
/* "SHA-384 and SHA-512 - SHA-2 Algorithms" */
|
||||
#undef ENABLE_SHA512_SHA384
|
||||
|
||||
/* "Snefru Algorithm" */
|
||||
#undef ENABLE_SNEFRU
|
||||
|
||||
/* "Tiger Algorithm" */
|
||||
#undef ENABLE_TIGER
|
||||
|
||||
/* "Whirlpool Algorithm" */
|
||||
#undef ENABLE_WHIRLPOOL
|
||||
|
||||
/* Define to 1 if you have the <assert.h> header file. */
|
||||
#undef HAVE_ASSERT_H
|
||||
|
||||
/* Define to 1 if you have the `bcopy' function. */
|
||||
#undef HAVE_BCOPY
|
||||
|
||||
/* Define to 1 if you have the <byteswap.h> header file. */
|
||||
#undef HAVE_BYTESWAP_H
|
||||
|
||||
/* Define to 1 if you have the `bzero' function. */
|
||||
#undef HAVE_BZERO
|
||||
|
||||
/* Define to 1 if you have the <ctype.h> header file. */
|
||||
#undef HAVE_CTYPE_H
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <endian.h> header file. */
|
||||
#undef HAVE_ENDIAN_H
|
||||
|
||||
/* Define to 1 if you have the <errno.h> header file. */
|
||||
#undef HAVE_ERRNO_H
|
||||
|
||||
/* Define to 1 if you have the `fcntl' function. */
|
||||
#undef HAVE_FCNTL
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
/* Define to 1 if you have the `fsync' function. */
|
||||
#undef HAVE_FSYNC
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the `dmalloc' library (-ldmalloc). */
|
||||
#undef HAVE_LIBDMALLOC
|
||||
|
||||
/* Define to 1 if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* Define to 1 if you have the `lstat' function. */
|
||||
#undef HAVE_LSTAT
|
||||
|
||||
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
|
||||
to 0 otherwise. */
|
||||
#undef HAVE_MALLOC
|
||||
|
||||
/* Define to 1 if you have the <malloc.h> header file. */
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
/* Define to 1 if you have the `memmove' function. */
|
||||
#undef HAVE_MEMMOVE
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the `memset' function. */
|
||||
#undef HAVE_MEMSET
|
||||
|
||||
/* Define to 1 if you have the `mlock' function. */
|
||||
#undef HAVE_MLOCK
|
||||
|
||||
/* Define to 1 if you have the `readdir' function. */
|
||||
#undef HAVE_READDIR
|
||||
|
||||
/* Define to 1 if you have the `readdir_r' function. */
|
||||
#undef HAVE_READDIR_R
|
||||
|
||||
/* Define to 1 if you have the `sigaction' function. */
|
||||
#undef HAVE_SIGACTION
|
||||
|
||||
/* Define to 1 if you have the `signal' function. */
|
||||
#undef HAVE_SIGNAL
|
||||
|
||||
/* Define to 1 if you have the <signal.h> header file. */
|
||||
#undef HAVE_SIGNAL_H
|
||||
|
||||
/* Define to 1 if you have the `stat' function. */
|
||||
#undef HAVE_STAT
|
||||
|
||||
/* Define to 1 if stdbool.h conforms to C99. */
|
||||
#undef HAVE_STDBOOL_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdio.h> header file. */
|
||||
#undef HAVE_STDIO_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the `strtol' function. */
|
||||
#undef HAVE_STRTOL
|
||||
|
||||
/* Define to 1 if you have the <sys/endian.h> header file. */
|
||||
#undef HAVE_SYS_ENDIAN_H
|
||||
|
||||
/* Define to 1 if you have the <sys/mman.h> header file. */
|
||||
#undef HAVE_SYS_MMAN_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the `umask' function. */
|
||||
#undef HAVE_UMASK
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if you have the `utime' function. */
|
||||
#undef HAVE_UTIME
|
||||
|
||||
/* Define to 1 if you have the <utime.h> header file. */
|
||||
#undef HAVE_UTIME_H
|
||||
|
||||
/* Define to 1 if you have the <values.h> header file. */
|
||||
#undef HAVE_VALUES_H
|
||||
|
||||
/* Define to 1 if the system has the type `_Bool'. */
|
||||
#undef HAVE__BOOL
|
||||
|
||||
/* "MHash Version" */
|
||||
#undef MHASH_VERSION
|
||||
|
||||
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
|
||||
#undef NO_MINUS_C_MINUS_O
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if the C compiler supports function prototypes. */
|
||||
#undef PROTOTYPES
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* dmalloc */
|
||||
#undef USE_DMALLOC
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if using the dmalloc debugging malloc package */
|
||||
#undef WITH_DMALLOC
|
||||
|
||||
/* Define to 1 if your processor stores words with the most significant byte
|
||||
first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
#undef WORDS_BIGENDIAN
|
||||
|
||||
/* Define to 1 if on AIX 3.
|
||||
System headers sometimes define this.
|
||||
We just want to avoid a redefinition error message. */
|
||||
#ifndef _ALL_SOURCE
|
||||
# undef _ALL_SOURCE
|
||||
#endif
|
||||
|
||||
/* Enable GNU extensions on systems that have them. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# undef _GNU_SOURCE
|
||||
#endif
|
||||
|
||||
/* Define to 1 if on MINIX. */
|
||||
#undef _MINIX
|
||||
|
||||
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||
this defined. */
|
||||
#undef _POSIX_1_SOURCE
|
||||
|
||||
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||
#undef _POSIX_SOURCE
|
||||
|
||||
/* Define like PROTOTYPES; this can be used by system headers. */
|
||||
#undef __PROTOTYPES
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
/* Define to rpl_malloc if the replacement function should be used. */
|
||||
#undef malloc
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Jonathan Day, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* The function of this header is to make sure that all system-specific headers
|
||||
* files that are required are included. Eventually, system headers will only
|
||||
* be pulled in when local definitions don't exist or are suboptimal.
|
||||
*
|
||||
* For now, we're also defining MAXINT and MININT in here, as there are
|
||||
* reported problems with the way we're trying to find it.
|
||||
*/
|
||||
|
||||
#if !defined(__MINCLUDES_H)
|
||||
#define __MINCLUDES_H
|
||||
|
||||
#if defined(MUTILS_USE_MHASH_CONFIG)
|
||||
#include <mutils/mhash_config.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_LIMITS_H)
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_STDBOOL_H)
|
||||
#include <stdbool.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_CTYPE_H)
|
||||
#include <ctype.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_SYS_TYPES_H)
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_ASSERT_H)
|
||||
#include <assert.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_STRINGS_H)
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_STRING_H)
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_MALLOC_H)
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_STDIO_H)
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_STDLIB_H)
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_UNISTD_H)
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_VALUES_H)
|
||||
#include <values.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_SYS_MMAN_H)
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_ERRNO_H)
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_ERROR_H)
|
||||
#include <error.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_INTTYPES_H)
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_STDINT_H)
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#if !defined(INT_MAX)
|
||||
#define INT_MAX ((int) (~0U>>1))
|
||||
#endif
|
||||
|
||||
#if !defined(MAXINT)
|
||||
#define MAXINT INT_MAX
|
||||
#endif
|
||||
|
||||
#if !defined(INT_MIN)
|
||||
#define INT_MIN (-INT_MAX - 1)
|
||||
#endif
|
||||
|
||||
#if !defined(MININT)
|
||||
#define MININT INT_MIN
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Jonathan Day, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(__MTYPES_H)
|
||||
#define __MTYPES_H
|
||||
|
||||
#include <mutils/mutils.h>
|
||||
|
||||
typedef struct __KEYGEN
|
||||
{
|
||||
hashid hash_algorithm[2];
|
||||
mutils_word32 count;
|
||||
void *salt;
|
||||
mutils_word32 salt_size;
|
||||
} KEYGEN;
|
||||
|
||||
typedef void (*INIT_FUNC)( void*);
|
||||
typedef void (*HASH_FUNC)(void*, const void*, int);
|
||||
typedef void (*FINAL_FUNC)(void*);
|
||||
typedef void (*DEINIT_FUNC)(void*, unsigned char*);
|
||||
|
||||
typedef struct __MHASH_INSTANCE
|
||||
{
|
||||
mutils_word32 hmac_key_size;
|
||||
mutils_word32 hmac_block;
|
||||
mutils_word8 *hmac_key;
|
||||
|
||||
mutils_word8 *state;
|
||||
mutils_word32 state_size;
|
||||
hashid algorithm_given;
|
||||
|
||||
HASH_FUNC hash_func;
|
||||
FINAL_FUNC final_func;
|
||||
DEINIT_FUNC deinit_func;
|
||||
} MHASH_INSTANCE;
|
||||
|
||||
typedef MHASH_INSTANCE *MHASH;
|
||||
|
||||
#define MHASH_FAILED ((MHASH) 0x0)
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,255 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Jonathan Day, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(__MUTILS_H)
|
||||
#define __MUTILS_H
|
||||
|
||||
#include <mutils/mincludes.h>
|
||||
|
||||
#if defined(const)
|
||||
#define __const const
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The vast majority of user code won't care about mutils, so changes to
|
||||
* this helper library API should not result in a change to the MHASH API
|
||||
* version number.
|
||||
*/
|
||||
|
||||
#define MUTILS_API 20060624
|
||||
|
||||
/* FIXME: We're assuming we've a standard integer types header and that it has been included
|
||||
* correctly.
|
||||
*/
|
||||
|
||||
#define MUTILS_STANDARD_TYPES 1
|
||||
|
||||
#if defined(MUTILS_STANDARD_TYPES)
|
||||
|
||||
#define TIGER_64BIT
|
||||
|
||||
#define mutils_word64 uint64_t
|
||||
#define mutils_word32 uint32_t
|
||||
#define mutils_word16 uint16_t
|
||||
#define mutils_word8 uint8_t
|
||||
|
||||
#else /* Ok, we don't have the standard integer type definitions */
|
||||
|
||||
#if SIZEOF_UNSIGNED_LONG_INT == 8
|
||||
typedef unsigned long int mutils_word64;
|
||||
#define TIGER_64BIT
|
||||
#elif SIZEOF_UNSIGNED_LONG_LONG_INT == 8
|
||||
typedef unsigned long long int mutils_word64;
|
||||
#else
|
||||
#error "Cannot find a 64 bit integer in your system, sorry."
|
||||
#endif
|
||||
|
||||
#if SIZEOF_UNSIGNED_LONG_INT == 4
|
||||
typedef unsigned long int mutils_word32;
|
||||
#elif SIZEOF_UNSIGNED_INT == 4
|
||||
typedef unsigned int mutils_word32;
|
||||
#else
|
||||
#error "Cannot find a 32 bit integer in your system, sorry."
|
||||
#endif
|
||||
|
||||
#if SIZEOF_UNSIGNED_INT == 2
|
||||
typedef unsigned int mutils_word16;
|
||||
#elif SIZEOF_UNSIGNED_SHORT_INT == 2
|
||||
typedef unsigned short int mutils_word16;
|
||||
#else
|
||||
#error "Cannot find a 16 bit integer in your system, sorry."
|
||||
#endif
|
||||
|
||||
#if SIZEOF_UNSIGNED_CHAR == 1
|
||||
typedef unsigned char mutils_word8;
|
||||
#else
|
||||
#error "Cannot find an 8 bit char in your system, sorry."
|
||||
#endif
|
||||
|
||||
#endif /* End of standard integer type declarationsd */
|
||||
|
||||
/*
|
||||
* Due to buggy implementations of the boolean headers in some systems,
|
||||
* we have to detect the boolean values seperately from the boolean type.
|
||||
* A big thank you to Heiko Lehmann for spotting the bug. Unfortunately,
|
||||
* this fix may not be enough, as it is only going to work on things the
|
||||
* precompiler knows about.
|
||||
*
|
||||
* Why go to all this trouble over something that should have a standard
|
||||
* value anyway? Because.
|
||||
*/
|
||||
|
||||
#if defined(HAVE__BOOL)
|
||||
#define mutils_boolean _Bool
|
||||
#else
|
||||
typedef char mutils_boolean;
|
||||
#endif
|
||||
|
||||
#if defined(false)
|
||||
#define MUTILS_FALSE (mutils_boolean) false
|
||||
#else
|
||||
#if defined(FALSE)
|
||||
#define MUTILS_FALSE (mutils_boolean) FALSE
|
||||
#else
|
||||
#define MUTILS_FALSE (mutils_boolean) 0
|
||||
#endif /* FALSE */
|
||||
#endif /* false */
|
||||
|
||||
#if defined(true)
|
||||
#define MUTILS_TRUE (mutils_boolean) true
|
||||
#else
|
||||
#if defined(TRUE)
|
||||
#define MUTILS_TRUE (mutils_boolean) TRUE
|
||||
#else
|
||||
#define MUTILS_TRUE (mutils_boolean) -1
|
||||
#endif /* TRUE */
|
||||
#endif /* true */
|
||||
|
||||
/*
|
||||
* Other than OK, the only defined values should be for a category of error.
|
||||
* Even then, the values shouldn't be assumed. Their only function is to
|
||||
* make it easy to programmatically identify the nature of the error and to
|
||||
* ensure a library upgrade won't break existing binaries, should new error
|
||||
* codes be introduced.
|
||||
*/
|
||||
|
||||
typedef enum __mutils_error_codes
|
||||
{
|
||||
MUTILS_OK = 0,
|
||||
MUTILS_SYSTEM_ERROR = 0x100,
|
||||
MUTILS_UNSPECIFIED_ERROR,
|
||||
MUTILS_SYSTEM_RESOURCE_ERROR,
|
||||
MUTILS_PARAMETER_ERROR = 0x200,
|
||||
MUTILS_INVALID_FUNCTION,
|
||||
MUTILS_INVALID_INPUT_BUFFER,
|
||||
MUTILS_INVALID_OUTPUT_BUFFER,
|
||||
MUTILS_INVALID_PASSES,
|
||||
MUTILS_INVALID_FORMAT,
|
||||
MUTILS_INVALID_SIZE,
|
||||
MUTILS_INVALID_RESULT
|
||||
} mutils_error_codes;
|
||||
|
||||
#define mutils_error mutils_word32
|
||||
|
||||
#include <mutils/mglobal.h>
|
||||
|
||||
/*
|
||||
* Some useful, generic endian macros.
|
||||
*/
|
||||
|
||||
#define mutils_swapendian64(x) \
|
||||
((mutils_word64) \
|
||||
(((x) & 0xff00000000000000ull) >> 56) | \
|
||||
(((x) & 0x00ff000000000000ull) >> 40) | \
|
||||
(((x) & 0x0000ff0000000000ull) >> 24) | \
|
||||
(((x) & 0x000000ff00000000ull) >> 8) | \
|
||||
(((x) & 0x00000000ff000000ull) << 8) | \
|
||||
(((x) & 0x0000000000ff0000ull) << 24) | \
|
||||
(((x) & 0x000000000000ff00ull) << 40) | \
|
||||
(((x) & 0x00000000000000ffull) << 56))
|
||||
|
||||
#define mutils_swapendian32(a) \
|
||||
((mutils_word32) \
|
||||
(((a & (mutils_word32) 0x000000ffU) << 24) | \
|
||||
((a & (mutils_word32) 0x0000ff00U) << 8) | \
|
||||
((a & (mutils_word32) 0x00ff0000U) >> 8) | \
|
||||
((a & (mutils_word32) 0xff000000U) >> 24)) \
|
||||
)
|
||||
|
||||
#define mutils_swapendian16(a) \
|
||||
((mutils_word16) \
|
||||
(((a & (mutils_word16) 0x00ffU) << 8) | \
|
||||
((a & (mutils_word16) 0xff00U) >> 8)) \
|
||||
)
|
||||
|
||||
|
||||
|
||||
/* Change the endianness of the data if (and only if) the data type we want
|
||||
* is the opposite from the native endianness. This allows us to have some
|
||||
* reasonably generic macros, provided we always start from the native
|
||||
* ordering.
|
||||
*/
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
|
||||
#define mutils_lend64(n) mutils_swapendian64(n)
|
||||
#define mutils_lend32(n) mutils_swapendian32(n)
|
||||
#define mutils_lend16(n) mutils_swapendian16(n)
|
||||
|
||||
#define mutils_bend64(n) n
|
||||
#define mutils_bend32(n) n
|
||||
#define mutils_bend16(n) n
|
||||
|
||||
#define mutils_lend2sys64(n) mutils_swapendian64(n)
|
||||
#define mutils_lend2sys32(n) mutils_swapendian32(n)
|
||||
#define mutils_lend2sys16(n) mutils_swapendian16(n)
|
||||
|
||||
#define mutils_bend2sys32(n) n
|
||||
#define mutils_bend2sys16(n) n
|
||||
|
||||
#else
|
||||
|
||||
#define mutils_lend64(n) n
|
||||
#define mutils_lend32(n) n
|
||||
#define mutils_lend16(n) n
|
||||
|
||||
#define mutils_bend64(n) mutils_swapendian64(n)
|
||||
#define mutils_bend32(n) mutils_swapendian32(n)
|
||||
#define mutils_bend16(n) mutils_swapendian16(n)
|
||||
|
||||
#define mutils_lend2sys64(n) n
|
||||
#define mutils_lend2sys32(n) n
|
||||
#define mutils_lend2sys16(n) n
|
||||
|
||||
#define mutils_bend2sys64(n) mutils_swapendian64(n)
|
||||
#define mutils_bend2sys32(n) mutils_swapendian32(n)
|
||||
#define mutils_bend2sys16(n) mutils_swapendian16(n)
|
||||
|
||||
#endif
|
||||
|
||||
int mutils_mlock(__const void *addr, __const mutils_word32 len);
|
||||
int mutils_munlock(__const void *addr, __const mutils_word32 len);
|
||||
|
||||
void *mutils_malloc(__const mutils_word32 n);
|
||||
void *mutils_realloc(__const void *ptr, __const mutils_word32 n);
|
||||
void mutils_free(__const void *ptr);
|
||||
void mutils_bzero(void *s, __const mutils_word32 n);
|
||||
|
||||
void mutils_memset(void *dest, __const mutils_word8 c, __const mutils_word32 n);
|
||||
void mutils_memcpy(void *dest, __const void *src, __const mutils_word32 n);
|
||||
void mutils_memmove(void *dest, __const void *src, __const mutils_word32 n);
|
||||
int mutils_memcmp(__const void *s1, __const void *s2, __const mutils_word32 n);
|
||||
|
||||
mutils_word32 mutils_strlen(__const mutils_word8 *str);
|
||||
mutils_word8 *mutils_strdup(__const mutils_word8 *str);
|
||||
mutils_word8 *mutils_strcat(mutils_word8 *dest, __const mutils_word8 *src);
|
||||
mutils_word8 *mutils_strcpy(mutils_word8 *dest, __const mutils_word8 *src);
|
||||
mutils_word8 *mutils_strncpy(mutils_word8 *dest, __const mutils_word8 *src, __const mutils_word32 n);
|
||||
int mutils_strcmp(__const mutils_word8 *src1, __const mutils_word8 *src2);
|
||||
int mutils_strncmp(__const mutils_word8 *src1, __const mutils_word8 *src2, __const mutils_word32 n);
|
||||
long mutils_strtol(__const mutils_word8 *nptr, mutils_word8 **endptr, __const mutils_word8 base);
|
||||
|
||||
mutils_word32 mutils_word32swap(mutils_word32 x);
|
||||
mutils_word32 *mutils_word32nswap(mutils_word32 *x, mutils_word32 n, mutils_boolean destructive);
|
||||
|
||||
mutils_word8 *mutils_asciify(mutils_word8 *in, __const mutils_word32 len);
|
||||
mutils_boolean mutils_thequals(mutils_word8 *text, mutils_word8 *hash, __const mutils_word32 len);
|
||||
|
||||
#endif /* __MUTILS_H */
|
||||
@@ -0,0 +1 @@
|
||||
timestamp for include/mutils/mhash_config.h
|
||||
@@ -0,0 +1,323 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2004-10-22.00
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# 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}"
|
||||
|
||||
chmodcmd="$chmodprog 0755"
|
||||
chowncmd=
|
||||
chgrpcmd=
|
||||
stripcmd=
|
||||
rmcmd="$rmprog -f"
|
||||
mvcmd="$mvprog"
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dstarg=
|
||||
no_target_directory=
|
||||
|
||||
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
-c (ignored)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test -n "$1"; do
|
||||
case $1 in
|
||||
-c) shift
|
||||
continue;;
|
||||
|
||||
-d) dir_arg=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--help) echo "$usage"; exit 0;;
|
||||
|
||||
-m) chmodcmd="$chmodprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-s) stripcmd=$stripprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-t) dstarg=$2
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-T) no_target_directory=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit 0;;
|
||||
|
||||
*) # When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
test -n "$dir_arg$dstarg" && break
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dstarg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dstarg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dstarg=$arg
|
||||
done
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test -z "$1"; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call `install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src ;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
src=
|
||||
|
||||
if test -d "$dst"; then
|
||||
mkdircmd=:
|
||||
chmodcmd=
|
||||
else
|
||||
mkdircmd=$mkdirprog
|
||||
fi
|
||||
else
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dstarg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst=$dstarg
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst ;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dstarg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst/`basename "$src"`
|
||||
fi
|
||||
fi
|
||||
|
||||
# This sed command emulates the dirname command.
|
||||
dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
|
||||
|
||||
# Make sure that the destination directory exists.
|
||||
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if test ! -d "$dstdir"; then
|
||||
defaultIFS='
|
||||
'
|
||||
IFS="${IFS-$defaultIFS}"
|
||||
|
||||
oIFS=$IFS
|
||||
# Some sh's can't handle IFS=/ for some reason.
|
||||
IFS='%'
|
||||
set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||
shift
|
||||
IFS=$oIFS
|
||||
|
||||
pathcomp=
|
||||
|
||||
while test $# -ne 0 ; do
|
||||
pathcomp=$pathcomp$1
|
||||
shift
|
||||
if test ! -d "$pathcomp"; then
|
||||
$mkdirprog "$pathcomp"
|
||||
# mkdir can fail with a `File exist' error in case several
|
||||
# install-sh are creating the directory concurrently. This
|
||||
# is OK.
|
||||
test -d "$pathcomp" || exit
|
||||
fi
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
$doit $mkdircmd "$dst" \
|
||||
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
|
||||
|
||||
else
|
||||
dstfile=`basename "$dst"`
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
$doit $cpprog "$src" "$dsttmp" &&
|
||||
|
||||
# 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 $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| {
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
if test -f "$dstdir/$dstfile"; then
|
||||
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|
||||
|| {
|
||||
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
|
||||
(exit 1); exit
|
||||
}
|
||||
else
|
||||
:
|
||||
fi
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
||||
}
|
||||
}
|
||||
fi || { (exit 1); exit; }
|
||||
done
|
||||
|
||||
# The final little trick to "correctly" pass the exit status to the exit trap.
|
||||
{
|
||||
(exit 0); exit
|
||||
}
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
@@ -0,0 +1,526 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# lib/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
|
||||
pkgdatadir = $(datadir)/mhash
|
||||
pkglibdir = $(libdir)/mhash
|
||||
pkgincludedir = $(includedir)/mhash
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
target_triplet = x86_64-unknown-linux-gnu
|
||||
subdir = lib
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(libdir)"
|
||||
libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
libmhash_la_LIBADD =
|
||||
am__objects_1 = mhash.lo stdfns.lo
|
||||
am__objects_2 = keygen_hex.lo keygen_mcrypt.lo keygen_asis.lo \
|
||||
keygen.lo keygen_s2k.lo
|
||||
am__objects_3 = crc32.lo adler32.lo
|
||||
am__objects_4 = md2.lo md4.lo md5.lo ripemd.lo
|
||||
am__objects_5 = sha1.lo sha256_sha224.lo sha512_sha384.lo
|
||||
am__objects_6 = tiger.lo tiger_sboxes.lo
|
||||
am__objects_7 = haval.lo gosthash.lo whirlpool.lo snefru.lo
|
||||
am_libmhash_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
|
||||
$(am__objects_3) $(am__objects_4) $(am__objects_5) \
|
||||
$(am__objects_6) $(am__objects_7)
|
||||
libmhash_la_OBJECTS = $(am_libmhash_la_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include/mutils
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libmhash_la_SOURCES)
|
||||
DIST_SOURCES = $(libmhash_la_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run tar
|
||||
AR = ar
|
||||
AS = as
|
||||
AUTOCONF = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCAS = gcc
|
||||
CCASFLAGS = -g -O2
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS = -g -O2
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=gcc3
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = dlltool
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = /bin/grep -E
|
||||
EXEEXT =
|
||||
F77 =
|
||||
FFLAGS =
|
||||
GREP = /bin/grep
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS =
|
||||
MAINT = #
|
||||
MAINTAINER_MODE_FALSE =
|
||||
MAINTAINER_MODE_TRUE = #
|
||||
MAKEINFO = ${SHELL} /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/missing --run makeinfo
|
||||
OBJDUMP = objdump
|
||||
OBJEXT = o
|
||||
PACKAGE = mhash
|
||||
PACKAGE_BUGREPORT = mhash-devel@sourceforge.net
|
||||
PACKAGE_NAME = MHASH
|
||||
PACKAGE_STRING = MHASH 0.9.9
|
||||
PACKAGE_TARNAME = mhash
|
||||
PACKAGE_VERSION = 0.9.9
|
||||
PATH_SEPARATOR = :
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
VERSION = 0.9.9
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 =
|
||||
am__fastdepCC_FALSE = #
|
||||
am__fastdepCC_TRUE =
|
||||
am__fastdepCXX_FALSE = #
|
||||
am__fastdepCXX_TRUE =
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
htmldir = ${docdir}
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = /root/work/sdkfreebsd64.bak/libs/mhash-0.9.9.9/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target = x86_64-unknown-linux-gnu
|
||||
target_alias =
|
||||
target_cpu = x86_64
|
||||
target_os = linux-gnu
|
||||
target_vendor = unknown
|
||||
AM_CPPFLAGS = -I../include
|
||||
lib_LTLIBRARIES = libmhash.la
|
||||
FRAMEWORK = mhash.c stdfns.c mhash.h mhash_int.h libdefs.h
|
||||
KEYGEN = keygen_hex.c keygen_mcrypt.c keygen_asis.c keygen.c keygen_s2k.c \
|
||||
keygen.h
|
||||
|
||||
CRC = crc32.c mhash_crc32.h adler32.c mhash_adler32.h
|
||||
MD_SERIES = md2.c mhash_md2.h md4.c mhash_md4.h md5.c mhash_md5.h \
|
||||
ripemd.c mhash_ripemd.h
|
||||
|
||||
SHA_SERIES = sha1.c sha256_sha224.c sha512_sha384.c \
|
||||
mhash_sha1.h mhash_sha256_sha224.h mhash_sha512_sha384.h
|
||||
|
||||
TIGER = tiger.c tiger_sboxes.c mhash_tiger.h
|
||||
MISCELLANEOUS = haval.c mhash_haval.h gosthash.c mhash_gost.h \
|
||||
whirlpool.c mhash_whirlpool.h snefru.c mhash_snefru.h
|
||||
|
||||
libmhash_la_SOURCES = $(FRAMEWORK) $(KEYGEN) $(CRC) $(MD_SERIES) \
|
||||
$(SHA_SERIES) $(TIGER) $(MISCELLANEOUS)
|
||||
|
||||
libmhash_la_LDFLAGS = -version-info 2:1
|
||||
EXTRA_DIST = libmhash.sym
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu lib/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: # $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
p=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
libmhash.la: $(libmhash_la_OBJECTS) $(libmhash_la_DEPENDENCIES)
|
||||
$(LINK) -rpath $(libdir) $(libmhash_la_LDFLAGS) $(libmhash_la_OBJECTS) $(libmhash_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
include ./$(DEPDIR)/adler32.Plo
|
||||
include ./$(DEPDIR)/crc32.Plo
|
||||
include ./$(DEPDIR)/gosthash.Plo
|
||||
include ./$(DEPDIR)/haval.Plo
|
||||
include ./$(DEPDIR)/keygen.Plo
|
||||
include ./$(DEPDIR)/keygen_asis.Plo
|
||||
include ./$(DEPDIR)/keygen_hex.Plo
|
||||
include ./$(DEPDIR)/keygen_mcrypt.Plo
|
||||
include ./$(DEPDIR)/keygen_s2k.Plo
|
||||
include ./$(DEPDIR)/md2.Plo
|
||||
include ./$(DEPDIR)/md4.Plo
|
||||
include ./$(DEPDIR)/md5.Plo
|
||||
include ./$(DEPDIR)/mhash.Plo
|
||||
include ./$(DEPDIR)/ripemd.Plo
|
||||
include ./$(DEPDIR)/sha1.Plo
|
||||
include ./$(DEPDIR)/sha256_sha224.Plo
|
||||
include ./$(DEPDIR)/sha512_sha384.Plo
|
||||
include ./$(DEPDIR)/snefru.Plo
|
||||
include ./$(DEPDIR)/stdfns.Plo
|
||||
include ./$(DEPDIR)/tiger.Plo
|
||||
include ./$(DEPDIR)/tiger_sboxes.Plo
|
||||
include ./$(DEPDIR)/whirlpool.Plo
|
||||
|
||||
.c.o:
|
||||
if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
# source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
# source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
# source='$<' object='$@' libtool=yes \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool ctags dist-hook distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am \
|
||||
install-libLTLIBRARIES install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-libLTLIBRARIES
|
||||
|
||||
|
||||
dist-hook:
|
||||
find $(distdir) -name CVS -o -name .cvsignore | xargs rm -rf
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,33 @@
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
AM_CPPFLAGS = -I../include
|
||||
|
||||
lib_LTLIBRARIES = libmhash.la
|
||||
|
||||
FRAMEWORK = mhash.c stdfns.c mhash.h mhash_int.h libdefs.h
|
||||
|
||||
KEYGEN = keygen_hex.c keygen_mcrypt.c keygen_asis.c keygen.c keygen_s2k.c \
|
||||
keygen.h
|
||||
|
||||
CRC = crc32.c mhash_crc32.h adler32.c mhash_adler32.h
|
||||
|
||||
MD_SERIES = md2.c mhash_md2.h md4.c mhash_md4.h md5.c mhash_md5.h \
|
||||
ripemd.c mhash_ripemd.h
|
||||
|
||||
SHA_SERIES = sha1.c sha256_sha224.c sha512_sha384.c \
|
||||
mhash_sha1.h mhash_sha256_sha224.h mhash_sha512_sha384.h
|
||||
|
||||
TIGER = tiger.c tiger_sboxes.c mhash_tiger.h
|
||||
|
||||
MISCELLANEOUS = haval.c mhash_haval.h gosthash.c mhash_gost.h \
|
||||
whirlpool.c mhash_whirlpool.h snefru.c mhash_snefru.h
|
||||
|
||||
libmhash_la_SOURCES = $(FRAMEWORK) $(KEYGEN) $(CRC) $(MD_SERIES) \
|
||||
$(SHA_SERIES) $(TIGER) $(MISCELLANEOUS)
|
||||
|
||||
libmhash_la_LDFLAGS = -version-info 2:1
|
||||
|
||||
EXTRA_DIST = libmhash.sym
|
||||
|
||||
dist-hook:
|
||||
find $(distdir) -name CVS -o -name .cvsignore | xargs rm -rf
|
||||
@@ -0,0 +1,526 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = lib
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(libdir)"
|
||||
libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
libmhash_la_LIBADD =
|
||||
am__objects_1 = mhash.lo stdfns.lo
|
||||
am__objects_2 = keygen_hex.lo keygen_mcrypt.lo keygen_asis.lo \
|
||||
keygen.lo keygen_s2k.lo
|
||||
am__objects_3 = crc32.lo adler32.lo
|
||||
am__objects_4 = md2.lo md4.lo md5.lo ripemd.lo
|
||||
am__objects_5 = sha1.lo sha256_sha224.lo sha512_sha384.lo
|
||||
am__objects_6 = tiger.lo tiger_sboxes.lo
|
||||
am__objects_7 = haval.lo gosthash.lo whirlpool.lo snefru.lo
|
||||
am_libmhash_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
|
||||
$(am__objects_3) $(am__objects_4) $(am__objects_5) \
|
||||
$(am__objects_6) $(am__objects_7)
|
||||
libmhash_la_OBJECTS = $(am_libmhash_la_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include/mutils
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libmhash_la_SOURCES)
|
||||
DIST_SOURCES = $(libmhash_la_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AS = @AS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
AM_CPPFLAGS = -I../include
|
||||
lib_LTLIBRARIES = libmhash.la
|
||||
FRAMEWORK = mhash.c stdfns.c mhash.h mhash_int.h libdefs.h
|
||||
KEYGEN = keygen_hex.c keygen_mcrypt.c keygen_asis.c keygen.c keygen_s2k.c \
|
||||
keygen.h
|
||||
|
||||
CRC = crc32.c mhash_crc32.h adler32.c mhash_adler32.h
|
||||
MD_SERIES = md2.c mhash_md2.h md4.c mhash_md4.h md5.c mhash_md5.h \
|
||||
ripemd.c mhash_ripemd.h
|
||||
|
||||
SHA_SERIES = sha1.c sha256_sha224.c sha512_sha384.c \
|
||||
mhash_sha1.h mhash_sha256_sha224.h mhash_sha512_sha384.h
|
||||
|
||||
TIGER = tiger.c tiger_sboxes.c mhash_tiger.h
|
||||
MISCELLANEOUS = haval.c mhash_haval.h gosthash.c mhash_gost.h \
|
||||
whirlpool.c mhash_whirlpool.h snefru.c mhash_snefru.h
|
||||
|
||||
libmhash_la_SOURCES = $(FRAMEWORK) $(KEYGEN) $(CRC) $(MD_SERIES) \
|
||||
$(SHA_SERIES) $(TIGER) $(MISCELLANEOUS)
|
||||
|
||||
libmhash_la_LDFLAGS = -version-info 2:1
|
||||
EXTRA_DIST = libmhash.sym
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu lib/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
p=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
libmhash.la: $(libmhash_la_OBJECTS) $(libmhash_la_DEPENDENCIES)
|
||||
$(LINK) -rpath $(libdir) $(libmhash_la_LDFLAGS) $(libmhash_la_OBJECTS) $(libmhash_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adler32.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gosthash.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/haval.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygen.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygen_asis.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygen_hex.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygen_mcrypt.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygen_s2k.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md2.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md4.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mhash.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ripemd.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256_sha224.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512_sha384.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snefru.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdfns.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiger.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiger_sboxes.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/whirlpool.Plo@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool ctags dist-hook distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am \
|
||||
install-libLTLIBRARIES install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-libLTLIBRARIES
|
||||
|
||||
|
||||
dist-hook:
|
||||
find $(distdir) -name CVS -o -name .cvsignore | xargs rm -rf
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#if defined(ENABLE_ADLER32)
|
||||
|
||||
#include "mhash_adler32.h"
|
||||
|
||||
/* This is the implementation of Manuel Kasper <mk@neon1.net>.
|
||||
*/
|
||||
|
||||
void mhash_clear_adler32(mutils_word32 *adler)
|
||||
{
|
||||
*adler = 0x1;
|
||||
}
|
||||
|
||||
void mhash_get_adler32(__const mutils_word32 *adler, void *ret)
|
||||
{
|
||||
mutils_word32 tmp = *adler;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
tmp = mutils_word32swap(tmp);
|
||||
#endif
|
||||
if (ret!=NULL)
|
||||
{
|
||||
mutils_memcpy(ret, &tmp, sizeof(mutils_word32));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic C implementation of Adler32
|
||||
* Peak performance:
|
||||
* VC++: 52 MB/s on AMD K7 600 MHz
|
||||
* gcc: 44 MB/s
|
||||
* Borland 5: 48 MB/s
|
||||
* (all with speed optimizations on)
|
||||
*/
|
||||
|
||||
void mhash_adler32(mutils_word32 * adler, __const void *given_buf, mutils_word32 len)
|
||||
{
|
||||
mutils_word32 s1 = (*adler) & 0x0000FFFF;
|
||||
mutils_word32 s2 = ((*adler) >> 16) & 0x0000FFFF;
|
||||
mutils_word32 n;
|
||||
mutils_word8 *p = (mutils_word8 *) given_buf;
|
||||
|
||||
for (n = 0; n < len; n++, p++)
|
||||
{
|
||||
s1 += *p;
|
||||
if (s1 >= 65521) /* using modulo took about 7 times longer on my CPU! */
|
||||
{
|
||||
s1 -= 65521; /* WARNING: it's meant to be >= 65521, not just > ! */
|
||||
}
|
||||
s2 += s1;
|
||||
if (s2 >= 65521) /* same warning applies here, too */
|
||||
{
|
||||
s2 -= 65521;
|
||||
}
|
||||
}
|
||||
*adler = (s2 << 16) + s1;
|
||||
}
|
||||
|
||||
#endif /* ENABLE_ADLER32 */
|
||||
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
* Copyright (C) 1998 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_CRC32
|
||||
|
||||
#include "mhash_crc32.h"
|
||||
|
||||
/** This polynomial ( 0xEDB88320L) DOES generate the same CRC values as ZMODEM and PKZIP
|
||||
*/
|
||||
static __const mutils_word32 crc32_table_b[256] =
|
||||
{
|
||||
0x0UL, 0x77073096UL, 0xEE0E612CUL, 0x990951BAUL, 0x76DC419UL,
|
||||
0x706AF48FUL, 0xE963A535UL, 0x9E6495A3UL, 0xEDB8832UL, 0x79DCB8A4UL,
|
||||
0xE0D5E91EUL, 0x97D2D988UL, 0x9B64C2BUL, 0x7EB17CBDUL, 0xE7B82D07UL,
|
||||
0x90BF1D91UL, 0x1DB71064UL, 0x6AB020F2UL, 0xF3B97148UL, 0x84BE41DEUL,
|
||||
0x1ADAD47DUL, 0x6DDDE4EBUL, 0xF4D4B551UL, 0x83D385C7UL, 0x136C9856UL,
|
||||
0x646BA8C0UL, 0xFD62F97AUL, 0x8A65C9ECUL, 0x14015C4FUL, 0x63066CD9UL,
|
||||
0xFA0F3D63UL, 0x8D080DF5UL, 0x3B6E20C8UL, 0x4C69105EUL, 0xD56041E4UL,
|
||||
0xA2677172UL, 0x3C03E4D1UL, 0x4B04D447UL, 0xD20D85FDUL, 0xA50AB56BUL,
|
||||
0x35B5A8FAUL, 0x42B2986CUL, 0xDBBBC9D6UL, 0xACBCF940UL, 0x32D86CE3UL,
|
||||
0x45DF5C75UL, 0xDCD60DCFUL, 0xABD13D59UL, 0x26D930ACUL, 0x51DE003AUL,
|
||||
0xC8D75180UL, 0xBFD06116UL, 0x21B4F4B5UL, 0x56B3C423UL, 0xCFBA9599UL,
|
||||
0xB8BDA50FUL, 0x2802B89EUL, 0x5F058808UL, 0xC60CD9B2UL, 0xB10BE924UL,
|
||||
0x2F6F7C87UL, 0x58684C11UL, 0xC1611DABUL, 0xB6662D3DUL, 0x76DC4190UL,
|
||||
0x1DB7106UL, 0x98D220BCUL, 0xEFD5102AUL, 0x71B18589UL, 0x6B6B51FUL,
|
||||
0x9FBFE4A5UL, 0xE8B8D433UL, 0x7807C9A2UL, 0xF00F934UL, 0x9609A88EUL,
|
||||
0xE10E9818UL, 0x7F6A0DBBUL, 0x86D3D2DUL, 0x91646C97UL, 0xE6635C01UL,
|
||||
0x6B6B51F4UL, 0x1C6C6162UL, 0x856530D8UL, 0xF262004EUL, 0x6C0695EDUL,
|
||||
0x1B01A57BUL, 0x8208F4C1UL, 0xF50FC457UL, 0x65B0D9C6UL, 0x12B7E950UL,
|
||||
0x8BBEB8EAUL, 0xFCB9887CUL, 0x62DD1DDFUL, 0x15DA2D49UL, 0x8CD37CF3UL,
|
||||
0xFBD44C65UL, 0x4DB26158UL, 0x3AB551CEUL, 0xA3BC0074UL, 0xD4BB30E2UL,
|
||||
0x4ADFA541UL, 0x3DD895D7UL, 0xA4D1C46DUL, 0xD3D6F4FBUL, 0x4369E96AUL,
|
||||
0x346ED9FCUL, 0xAD678846UL, 0xDA60B8D0UL, 0x44042D73UL, 0x33031DE5UL,
|
||||
0xAA0A4C5FUL, 0xDD0D7CC9UL, 0x5005713CUL, 0x270241AAUL, 0xBE0B1010UL,
|
||||
0xC90C2086UL, 0x5768B525UL, 0x206F85B3UL, 0xB966D409UL, 0xCE61E49FUL,
|
||||
0x5EDEF90EUL, 0x29D9C998UL, 0xB0D09822UL, 0xC7D7A8B4UL, 0x59B33D17UL,
|
||||
0x2EB40D81UL, 0xB7BD5C3BUL, 0xC0BA6CADUL, 0xEDB88320UL, 0x9ABFB3B6UL,
|
||||
0x3B6E20CUL, 0x74B1D29AUL, 0xEAD54739UL, 0x9DD277AFUL, 0x4DB2615UL,
|
||||
0x73DC1683UL, 0xE3630B12UL, 0x94643B84UL, 0xD6D6A3EUL, 0x7A6A5AA8UL,
|
||||
0xE40ECF0BUL, 0x9309FF9DUL, 0xA00AE27UL, 0x7D079EB1UL, 0xF00F9344UL,
|
||||
0x8708A3D2UL, 0x1E01F268UL, 0x6906C2FEUL, 0xF762575DUL, 0x806567CBUL,
|
||||
0x196C3671UL, 0x6E6B06E7UL, 0xFED41B76UL, 0x89D32BE0UL, 0x10DA7A5AUL,
|
||||
0x67DD4ACCUL, 0xF9B9DF6FUL, 0x8EBEEFF9UL, 0x17B7BE43UL, 0x60B08ED5UL,
|
||||
0xD6D6A3E8UL, 0xA1D1937EUL, 0x38D8C2C4UL, 0x4FDFF252UL, 0xD1BB67F1UL,
|
||||
0xA6BC5767UL, 0x3FB506DDUL, 0x48B2364BUL, 0xD80D2BDAUL, 0xAF0A1B4CUL,
|
||||
0x36034AF6UL, 0x41047A60UL, 0xDF60EFC3UL, 0xA867DF55UL, 0x316E8EEFUL,
|
||||
0x4669BE79UL, 0xCB61B38CUL, 0xBC66831AUL, 0x256FD2A0UL, 0x5268E236UL,
|
||||
0xCC0C7795UL, 0xBB0B4703UL, 0x220216B9UL, 0x5505262FUL, 0xC5BA3BBEUL,
|
||||
0xB2BD0B28UL, 0x2BB45A92UL, 0x5CB36A04UL, 0xC2D7FFA7UL, 0xB5D0CF31UL,
|
||||
0x2CD99E8BUL, 0x5BDEAE1DUL, 0x9B64C2B0UL, 0xEC63F226UL, 0x756AA39CUL,
|
||||
0x26D930AUL, 0x9C0906A9UL, 0xEB0E363FUL, 0x72076785UL, 0x5005713UL,
|
||||
0x95BF4A82UL, 0xE2B87A14UL, 0x7BB12BAEUL, 0xCB61B38UL, 0x92D28E9BUL,
|
||||
0xE5D5BE0DUL, 0x7CDCEFB7UL, 0xBDBDF21UL, 0x86D3D2D4UL, 0xF1D4E242UL,
|
||||
0x68DDB3F8UL, 0x1FDA836EUL, 0x81BE16CDUL, 0xF6B9265BUL, 0x6FB077E1UL,
|
||||
0x18B74777UL, 0x88085AE6UL, 0xFF0F6A70UL, 0x66063BCAUL, 0x11010B5CUL,
|
||||
0x8F659EFFUL, 0xF862AE69UL, 0x616BFFD3UL, 0x166CCF45UL, 0xA00AE278UL,
|
||||
0xD70DD2EEUL, 0x4E048354UL, 0x3903B3C2UL, 0xA7672661UL, 0xD06016F7UL,
|
||||
0x4969474DUL, 0x3E6E77DBUL, 0xAED16A4AUL, 0xD9D65ADCUL, 0x40DF0B66UL,
|
||||
0x37D83BF0UL, 0xA9BCAE53UL, 0xDEBB9EC5UL, 0x47B2CF7FUL, 0x30B5FFE9UL,
|
||||
0xBDBDF21CUL, 0xCABAC28AUL, 0x53B39330UL, 0x24B4A3A6UL, 0xBAD03605UL,
|
||||
0xCDD70693UL, 0x54DE5729UL, 0x23D967BFUL, 0xB3667A2EUL, 0xC4614AB8UL,
|
||||
0x5D681B02UL, 0x2A6F2B94UL, 0xB40BBE37UL, 0xC30C8EA1UL, 0x5A05DF1BUL,
|
||||
0x2D02EF8DUL
|
||||
};
|
||||
|
||||
|
||||
/** This polynomial (0x04c11db7) is used at: AUTODIN II, Ethernet, & FDDI
|
||||
*/
|
||||
|
||||
static __const mutils_word32 crc32_table[256] =
|
||||
{
|
||||
|
||||
0x00000000UL, 0x04c11db7UL, 0x09823b6eUL, 0x0d4326d9UL,
|
||||
0x130476dcUL, 0x17c56b6bUL, 0x1a864db2UL, 0x1e475005UL,
|
||||
0x2608edb8UL, 0x22c9f00fUL, 0x2f8ad6d6UL, 0x2b4bcb61UL,
|
||||
0x350c9b64UL, 0x31cd86d3UL, 0x3c8ea00aUL, 0x384fbdbdUL,
|
||||
0x4c11db70UL, 0x48d0c6c7UL, 0x4593e01eUL, 0x4152fda9UL,
|
||||
0x5f15adacUL, 0x5bd4b01bUL, 0x569796c2UL, 0x52568b75UL,
|
||||
0x6a1936c8UL, 0x6ed82b7fUL, 0x639b0da6UL, 0x675a1011UL,
|
||||
0x791d4014UL, 0x7ddc5da3UL, 0x709f7b7aUL, 0x745e66cdUL,
|
||||
0x9823b6e0UL, 0x9ce2ab57UL, 0x91a18d8eUL, 0x95609039UL,
|
||||
0x8b27c03cUL, 0x8fe6dd8bUL, 0x82a5fb52UL, 0x8664e6e5UL,
|
||||
0xbe2b5b58UL, 0xbaea46efUL, 0xb7a96036UL, 0xb3687d81UL,
|
||||
0xad2f2d84UL, 0xa9ee3033UL, 0xa4ad16eaUL, 0xa06c0b5dUL,
|
||||
0xd4326d90UL, 0xd0f37027UL, 0xddb056feUL, 0xd9714b49UL,
|
||||
0xc7361b4cUL, 0xc3f706fbUL, 0xceb42022UL, 0xca753d95UL,
|
||||
0xf23a8028UL, 0xf6fb9d9fUL, 0xfbb8bb46UL, 0xff79a6f1UL,
|
||||
0xe13ef6f4UL, 0xe5ffeb43UL, 0xe8bccd9aUL, 0xec7dd02dUL,
|
||||
0x34867077UL, 0x30476dc0UL, 0x3d044b19UL, 0x39c556aeUL,
|
||||
0x278206abUL, 0x23431b1cUL, 0x2e003dc5UL, 0x2ac12072UL,
|
||||
0x128e9dcfUL, 0x164f8078UL, 0x1b0ca6a1UL, 0x1fcdbb16UL,
|
||||
0x018aeb13UL, 0x054bf6a4UL, 0x0808d07dUL, 0x0cc9cdcaUL,
|
||||
0x7897ab07UL, 0x7c56b6b0UL, 0x71159069UL, 0x75d48ddeUL,
|
||||
0x6b93dddbUL, 0x6f52c06cUL, 0x6211e6b5UL, 0x66d0fb02UL,
|
||||
0x5e9f46bfUL, 0x5a5e5b08UL, 0x571d7dd1UL, 0x53dc6066UL,
|
||||
0x4d9b3063UL, 0x495a2dd4UL, 0x44190b0dUL, 0x40d816baUL,
|
||||
0xaca5c697UL, 0xa864db20UL, 0xa527fdf9UL, 0xa1e6e04eUL,
|
||||
0xbfa1b04bUL, 0xbb60adfcUL, 0xb6238b25UL, 0xb2e29692UL,
|
||||
0x8aad2b2fUL, 0x8e6c3698UL, 0x832f1041UL, 0x87ee0df6UL,
|
||||
0x99a95df3UL, 0x9d684044UL, 0x902b669dUL, 0x94ea7b2aUL,
|
||||
0xe0b41de7UL, 0xe4750050UL, 0xe9362689UL, 0xedf73b3eUL,
|
||||
0xf3b06b3bUL, 0xf771768cUL, 0xfa325055UL, 0xfef34de2UL,
|
||||
0xc6bcf05fUL, 0xc27dede8UL, 0xcf3ecb31UL, 0xcbffd686UL,
|
||||
0xd5b88683UL, 0xd1799b34UL, 0xdc3abdedUL, 0xd8fba05aUL,
|
||||
0x690ce0eeUL, 0x6dcdfd59UL, 0x608edb80UL, 0x644fc637UL,
|
||||
0x7a089632UL, 0x7ec98b85UL, 0x738aad5cUL, 0x774bb0ebUL,
|
||||
0x4f040d56UL, 0x4bc510e1UL, 0x46863638UL, 0x42472b8fUL,
|
||||
0x5c007b8aUL, 0x58c1663dUL, 0x558240e4UL, 0x51435d53UL,
|
||||
0x251d3b9eUL, 0x21dc2629UL, 0x2c9f00f0UL, 0x285e1d47UL,
|
||||
0x36194d42UL, 0x32d850f5UL, 0x3f9b762cUL, 0x3b5a6b9bUL,
|
||||
0x0315d626UL, 0x07d4cb91UL, 0x0a97ed48UL, 0x0e56f0ffUL,
|
||||
0x1011a0faUL, 0x14d0bd4dUL, 0x19939b94UL, 0x1d528623UL,
|
||||
0xf12f560eUL, 0xf5ee4bb9UL, 0xf8ad6d60UL, 0xfc6c70d7UL,
|
||||
0xe22b20d2UL, 0xe6ea3d65UL, 0xeba91bbcUL, 0xef68060bUL,
|
||||
0xd727bbb6UL, 0xd3e6a601UL, 0xdea580d8UL, 0xda649d6fUL,
|
||||
0xc423cd6aUL, 0xc0e2d0ddUL, 0xcda1f604UL, 0xc960ebb3UL,
|
||||
0xbd3e8d7eUL, 0xb9ff90c9UL, 0xb4bcb610UL, 0xb07daba7UL,
|
||||
0xae3afba2UL, 0xaafbe615UL, 0xa7b8c0ccUL, 0xa379dd7bUL,
|
||||
0x9b3660c6UL, 0x9ff77d71UL, 0x92b45ba8UL, 0x9675461fUL,
|
||||
0x8832161aUL, 0x8cf30badUL, 0x81b02d74UL, 0x857130c3UL,
|
||||
0x5d8a9099UL, 0x594b8d2eUL, 0x5408abf7UL, 0x50c9b640UL,
|
||||
0x4e8ee645UL, 0x4a4ffbf2UL, 0x470cdd2bUL, 0x43cdc09cUL,
|
||||
0x7b827d21UL, 0x7f436096UL, 0x7200464fUL, 0x76c15bf8UL,
|
||||
0x68860bfdUL, 0x6c47164aUL, 0x61043093UL, 0x65c52d24UL,
|
||||
0x119b4be9UL, 0x155a565eUL, 0x18197087UL, 0x1cd86d30UL,
|
||||
0x029f3d35UL, 0x065e2082UL, 0x0b1d065bUL, 0x0fdc1becUL,
|
||||
0x3793a651UL, 0x3352bbe6UL, 0x3e119d3fUL, 0x3ad08088UL,
|
||||
0x2497d08dUL, 0x2056cd3aUL, 0x2d15ebe3UL, 0x29d4f654UL,
|
||||
0xc5a92679UL, 0xc1683bceUL, 0xcc2b1d17UL, 0xc8ea00a0UL,
|
||||
0xd6ad50a5UL, 0xd26c4d12UL, 0xdf2f6bcbUL, 0xdbee767cUL,
|
||||
0xe3a1cbc1UL, 0xe760d676UL, 0xea23f0afUL, 0xeee2ed18UL,
|
||||
0xf0a5bd1dUL, 0xf464a0aaUL, 0xf9278673UL, 0xfde69bc4UL,
|
||||
0x89b8fd09UL, 0x8d79e0beUL, 0x803ac667UL, 0x84fbdbd0UL,
|
||||
0x9abc8bd5UL, 0x9e7d9662UL, 0x933eb0bbUL, 0x97ffad0cUL,
|
||||
0xafb010b1UL, 0xab710d06UL, 0xa6322bdfUL, 0xa2f33668UL,
|
||||
0xbcb4666dUL, 0xb8757bdaUL, 0xb5365d03UL, 0xb1f740b4UL
|
||||
};
|
||||
|
||||
|
||||
|
||||
void
|
||||
mhash_clear_crc32(mutils_word32 *crc)
|
||||
{
|
||||
*crc = 0xffffffff;
|
||||
/*
|
||||
* preload shift register, per CRC-32 spec
|
||||
*/
|
||||
}
|
||||
|
||||
void
|
||||
mhash_get_crc32(__const mutils_word32 *crc, void *ret)
|
||||
{
|
||||
mutils_word32 tmp;
|
||||
tmp = ~(*crc);
|
||||
/*
|
||||
* transmit complement, per CRC-32 spec
|
||||
*/
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
tmp = mutils_word32swap(tmp);
|
||||
#endif
|
||||
if (ret != NULL)
|
||||
{
|
||||
mutils_memcpy(ret, &tmp, sizeof(mutils_word32));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
mhash_crc32(mutils_word32 *crc, __const void *given_buf, mutils_word32 len)
|
||||
{
|
||||
__const mutils_word8 *p;
|
||||
|
||||
if ((crc == NULL) || (given_buf == NULL) || (len == 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (p = given_buf; len > 0; ++p, --len)
|
||||
{
|
||||
(*crc) = ((*crc) << 8) ^ crc32_table[((*crc) >> 24) ^ *p];
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
mhash_crc32b(mutils_word32 *crc, __const void *given_buf, mutils_word32 len)
|
||||
{
|
||||
__const mutils_word8 *p;
|
||||
|
||||
if ((crc == NULL) || (given_buf == NULL) || (len == 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (p = given_buf; len > 0; ++p, --len)
|
||||
{
|
||||
(*crc) = (((*crc) >> 8) & 0x00FFFFFF) ^ crc32_table_b[(*crc ^ *p) & 0xff];
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* ENABLE_CRC32 */
|
||||
@@ -0,0 +1,585 @@
|
||||
/*
|
||||
* gosthash.c
|
||||
* 21 Apr 1998 Markku-Juhani Saarinen <mjos@ssh.fi>
|
||||
*
|
||||
* GOST R 34.11-94, Russian Standard Hash Function
|
||||
*
|
||||
* Copyright (c) 1998 SSH Communications Security, Finland
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
/* This implementation is placed in the public domain, according to
|
||||
* the author. --nikos
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_GOST
|
||||
|
||||
#include "mhash_gost.h"
|
||||
/*
|
||||
lookup tables : each of these has two rotated 4-bit S-Boxes
|
||||
*/
|
||||
|
||||
static __const mutils_word32 gost_sbox_1[256] = {
|
||||
|
||||
0x72000UL, 0x75000UL, 0x74800UL, 0x71000UL, 0x76800UL,
|
||||
0x74000UL, 0x70000UL, 0x77000UL, 0x73000UL, 0x75800UL,
|
||||
0x70800UL, 0x76000UL, 0x73800UL, 0x77800UL, 0x72800UL,
|
||||
0x71800UL, 0x5A000UL, 0x5D000UL, 0x5C800UL, 0x59000UL,
|
||||
0x5E800UL, 0x5C000UL, 0x58000UL, 0x5F000UL, 0x5B000UL,
|
||||
0x5D800UL, 0x58800UL, 0x5E000UL, 0x5B800UL, 0x5F800UL,
|
||||
0x5A800UL, 0x59800UL, 0x22000UL, 0x25000UL, 0x24800UL,
|
||||
0x21000UL, 0x26800UL, 0x24000UL, 0x20000UL, 0x27000UL,
|
||||
0x23000UL, 0x25800UL, 0x20800UL, 0x26000UL, 0x23800UL,
|
||||
0x27800UL, 0x22800UL, 0x21800UL, 0x62000UL, 0x65000UL,
|
||||
0x64800UL, 0x61000UL, 0x66800UL, 0x64000UL, 0x60000UL,
|
||||
0x67000UL, 0x63000UL, 0x65800UL, 0x60800UL, 0x66000UL,
|
||||
0x63800UL, 0x67800UL, 0x62800UL, 0x61800UL, 0x32000UL,
|
||||
0x35000UL, 0x34800UL, 0x31000UL, 0x36800UL, 0x34000UL,
|
||||
0x30000UL, 0x37000UL, 0x33000UL, 0x35800UL, 0x30800UL,
|
||||
0x36000UL, 0x33800UL, 0x37800UL, 0x32800UL, 0x31800UL,
|
||||
0x6A000UL, 0x6D000UL, 0x6C800UL, 0x69000UL, 0x6E800UL,
|
||||
0x6C000UL, 0x68000UL, 0x6F000UL, 0x6B000UL, 0x6D800UL,
|
||||
0x68800UL, 0x6E000UL, 0x6B800UL, 0x6F800UL, 0x6A800UL,
|
||||
0x69800UL, 0x7A000UL, 0x7D000UL, 0x7C800UL, 0x79000UL,
|
||||
0x7E800UL, 0x7C000UL, 0x78000UL, 0x7F000UL, 0x7B000UL,
|
||||
0x7D800UL, 0x78800UL, 0x7E000UL, 0x7B800UL, 0x7F800UL,
|
||||
0x7A800UL, 0x79800UL, 0x52000UL, 0x55000UL, 0x54800UL,
|
||||
0x51000UL, 0x56800UL, 0x54000UL, 0x50000UL, 0x57000UL,
|
||||
0x53000UL, 0x55800UL, 0x50800UL, 0x56000UL, 0x53800UL,
|
||||
0x57800UL, 0x52800UL, 0x51800UL, 0x12000UL, 0x15000UL,
|
||||
0x14800UL, 0x11000UL, 0x16800UL, 0x14000UL, 0x10000UL,
|
||||
0x17000UL, 0x13000UL, 0x15800UL, 0x10800UL, 0x16000UL,
|
||||
0x13800UL, 0x17800UL, 0x12800UL, 0x11800UL, 0x1A000UL,
|
||||
0x1D000UL, 0x1C800UL, 0x19000UL, 0x1E800UL, 0x1C000UL,
|
||||
0x18000UL, 0x1F000UL, 0x1B000UL, 0x1D800UL, 0x18800UL,
|
||||
0x1E000UL, 0x1B800UL, 0x1F800UL, 0x1A800UL, 0x19800UL,
|
||||
0x42000UL, 0x45000UL, 0x44800UL, 0x41000UL, 0x46800UL,
|
||||
0x44000UL, 0x40000UL, 0x47000UL, 0x43000UL, 0x45800UL,
|
||||
0x40800UL, 0x46000UL, 0x43800UL, 0x47800UL, 0x42800UL,
|
||||
0x41800UL, 0xA000UL, 0xD000UL, 0xC800UL, 0x9000UL,
|
||||
0xE800UL, 0xC000UL, 0x8000UL, 0xF000UL, 0xB000UL,
|
||||
0xD800UL, 0x8800UL, 0xE000UL, 0xB800UL, 0xF800UL,
|
||||
0xA800UL, 0x9800UL, 0x2000UL, 0x5000UL, 0x4800UL,
|
||||
0x1000UL, 0x6800UL, 0x4000UL, 0x0UL, 0x7000UL,
|
||||
0x3000UL, 0x5800UL, 0x800UL, 0x6000UL, 0x3800UL,
|
||||
0x7800UL, 0x2800UL, 0x1800UL, 0x3A000UL, 0x3D000UL,
|
||||
0x3C800UL, 0x39000UL, 0x3E800UL, 0x3C000UL, 0x38000UL,
|
||||
0x3F000UL, 0x3B000UL, 0x3D800UL, 0x38800UL, 0x3E000UL,
|
||||
0x3B800UL, 0x3F800UL, 0x3A800UL, 0x39800UL, 0x2A000UL,
|
||||
0x2D000UL, 0x2C800UL, 0x29000UL, 0x2E800UL, 0x2C000UL,
|
||||
0x28000UL, 0x2F000UL, 0x2B000UL, 0x2D800UL, 0x28800UL,
|
||||
0x2E000UL, 0x2B800UL, 0x2F800UL, 0x2A800UL, 0x29800UL,
|
||||
0x4A000UL, 0x4D000UL, 0x4C800UL, 0x49000UL, 0x4E800UL,
|
||||
0x4C000UL, 0x48000UL, 0x4F000UL, 0x4B000UL, 0x4D800UL,
|
||||
0x48800UL, 0x4E000UL, 0x4B800UL, 0x4F800UL, 0x4A800UL,
|
||||
0x49800UL,
|
||||
};
|
||||
static __const mutils_word32 gost_sbox_2[256] = {
|
||||
|
||||
0x3A80000UL, 0x3C00000UL, 0x3880000UL, 0x3E80000UL, 0x3D00000UL,
|
||||
0x3980000UL, 0x3A00000UL, 0x3900000UL, 0x3F00000UL, 0x3F80000UL,
|
||||
0x3E00000UL, 0x3B80000UL, 0x3B00000UL, 0x3800000UL, 0x3C80000UL,
|
||||
0x3D80000UL, 0x6A80000UL, 0x6C00000UL, 0x6880000UL, 0x6E80000UL,
|
||||
0x6D00000UL, 0x6980000UL, 0x6A00000UL, 0x6900000UL, 0x6F00000UL,
|
||||
0x6F80000UL, 0x6E00000UL, 0x6B80000UL, 0x6B00000UL, 0x6800000UL,
|
||||
0x6C80000UL, 0x6D80000UL, 0x5280000UL, 0x5400000UL, 0x5080000UL,
|
||||
0x5680000UL, 0x5500000UL, 0x5180000UL, 0x5200000UL, 0x5100000UL,
|
||||
0x5700000UL, 0x5780000UL, 0x5600000UL, 0x5380000UL, 0x5300000UL,
|
||||
0x5000000UL, 0x5480000UL, 0x5580000UL, 0xA80000UL, 0xC00000UL,
|
||||
0x880000UL, 0xE80000UL, 0xD00000UL, 0x980000UL, 0xA00000UL,
|
||||
0x900000UL, 0xF00000UL, 0xF80000UL, 0xE00000UL, 0xB80000UL,
|
||||
0xB00000UL, 0x800000UL, 0xC80000UL, 0xD80000UL, 0x280000UL,
|
||||
0x400000UL, 0x80000UL, 0x680000UL, 0x500000UL, 0x180000UL,
|
||||
0x200000UL, 0x100000UL, 0x700000UL, 0x780000UL, 0x600000UL,
|
||||
0x380000UL, 0x300000UL, 0x0UL, 0x480000UL, 0x580000UL,
|
||||
0x4280000UL, 0x4400000UL, 0x4080000UL, 0x4680000UL, 0x4500000UL,
|
||||
0x4180000UL, 0x4200000UL, 0x4100000UL, 0x4700000UL, 0x4780000UL,
|
||||
0x4600000UL, 0x4380000UL, 0x4300000UL, 0x4000000UL, 0x4480000UL,
|
||||
0x4580000UL, 0x4A80000UL, 0x4C00000UL, 0x4880000UL, 0x4E80000UL,
|
||||
0x4D00000UL, 0x4980000UL, 0x4A00000UL, 0x4900000UL, 0x4F00000UL,
|
||||
0x4F80000UL, 0x4E00000UL, 0x4B80000UL, 0x4B00000UL, 0x4800000UL,
|
||||
0x4C80000UL, 0x4D80000UL, 0x7A80000UL, 0x7C00000UL, 0x7880000UL,
|
||||
0x7E80000UL, 0x7D00000UL, 0x7980000UL, 0x7A00000UL, 0x7900000UL,
|
||||
0x7F00000UL, 0x7F80000UL, 0x7E00000UL, 0x7B80000UL, 0x7B00000UL,
|
||||
0x7800000UL, 0x7C80000UL, 0x7D80000UL, 0x7280000UL, 0x7400000UL,
|
||||
0x7080000UL, 0x7680000UL, 0x7500000UL, 0x7180000UL, 0x7200000UL,
|
||||
0x7100000UL, 0x7700000UL, 0x7780000UL, 0x7600000UL, 0x7380000UL,
|
||||
0x7300000UL, 0x7000000UL, 0x7480000UL, 0x7580000UL, 0x2280000UL,
|
||||
0x2400000UL, 0x2080000UL, 0x2680000UL, 0x2500000UL, 0x2180000UL,
|
||||
0x2200000UL, 0x2100000UL, 0x2700000UL, 0x2780000UL, 0x2600000UL,
|
||||
0x2380000UL, 0x2300000UL, 0x2000000UL, 0x2480000UL, 0x2580000UL,
|
||||
0x3280000UL, 0x3400000UL, 0x3080000UL, 0x3680000UL, 0x3500000UL,
|
||||
0x3180000UL, 0x3200000UL, 0x3100000UL, 0x3700000UL, 0x3780000UL,
|
||||
0x3600000UL, 0x3380000UL, 0x3300000UL, 0x3000000UL, 0x3480000UL,
|
||||
0x3580000UL, 0x6280000UL, 0x6400000UL, 0x6080000UL, 0x6680000UL,
|
||||
0x6500000UL, 0x6180000UL, 0x6200000UL, 0x6100000UL, 0x6700000UL,
|
||||
0x6780000UL, 0x6600000UL, 0x6380000UL, 0x6300000UL, 0x6000000UL,
|
||||
0x6480000UL, 0x6580000UL, 0x5A80000UL, 0x5C00000UL, 0x5880000UL,
|
||||
0x5E80000UL, 0x5D00000UL, 0x5980000UL, 0x5A00000UL, 0x5900000UL,
|
||||
0x5F00000UL, 0x5F80000UL, 0x5E00000UL, 0x5B80000UL, 0x5B00000UL,
|
||||
0x5800000UL, 0x5C80000UL, 0x5D80000UL, 0x1280000UL, 0x1400000UL,
|
||||
0x1080000UL, 0x1680000UL, 0x1500000UL, 0x1180000UL, 0x1200000UL,
|
||||
0x1100000UL, 0x1700000UL, 0x1780000UL, 0x1600000UL, 0x1380000UL,
|
||||
0x1300000UL, 0x1000000UL, 0x1480000UL, 0x1580000UL, 0x2A80000UL,
|
||||
0x2C00000UL, 0x2880000UL, 0x2E80000UL, 0x2D00000UL, 0x2980000UL,
|
||||
0x2A00000UL, 0x2900000UL, 0x2F00000UL, 0x2F80000UL, 0x2E00000UL,
|
||||
0x2B80000UL, 0x2B00000UL, 0x2800000UL, 0x2C80000UL, 0x2D80000UL,
|
||||
0x1A80000UL, 0x1C00000UL, 0x1880000UL, 0x1E80000UL, 0x1D00000UL,
|
||||
0x1980000UL, 0x1A00000UL, 0x1900000UL, 0x1F00000UL, 0x1F80000UL,
|
||||
0x1E00000UL, 0x1B80000UL, 0x1B00000UL, 0x1800000UL, 0x1C80000UL,
|
||||
0x1D80000UL,
|
||||
};
|
||||
static __const mutils_word32 gost_sbox_3[256] = {
|
||||
|
||||
0x30000002UL, 0x60000002UL, 0x38000002UL, 0x8000002UL,
|
||||
0x28000002UL, 0x78000002UL, 0x68000002UL, 0x40000002UL,
|
||||
0x20000002UL, 0x50000002UL, 0x48000002UL, 0x70000002UL,
|
||||
0x2UL, 0x18000002UL, 0x58000002UL, 0x10000002UL,
|
||||
0xB0000005UL, 0xE0000005UL, 0xB8000005UL, 0x88000005UL,
|
||||
0xA8000005UL, 0xF8000005UL, 0xE8000005UL, 0xC0000005UL,
|
||||
0xA0000005UL, 0xD0000005UL, 0xC8000005UL, 0xF0000005UL,
|
||||
0x80000005UL, 0x98000005UL, 0xD8000005UL, 0x90000005UL,
|
||||
0x30000005UL, 0x60000005UL, 0x38000005UL, 0x8000005UL,
|
||||
0x28000005UL, 0x78000005UL, 0x68000005UL, 0x40000005UL,
|
||||
0x20000005UL, 0x50000005UL, 0x48000005UL, 0x70000005UL,
|
||||
0x5UL, 0x18000005UL, 0x58000005UL, 0x10000005UL,
|
||||
0x30000000UL, 0x60000000UL, 0x38000000UL, 0x8000000UL,
|
||||
0x28000000UL, 0x78000000UL, 0x68000000UL, 0x40000000UL,
|
||||
0x20000000UL, 0x50000000UL, 0x48000000UL, 0x70000000UL,
|
||||
0x0UL, 0x18000000UL, 0x58000000UL, 0x10000000UL,
|
||||
0xB0000003UL, 0xE0000003UL, 0xB8000003UL, 0x88000003UL,
|
||||
0xA8000003UL, 0xF8000003UL, 0xE8000003UL, 0xC0000003UL,
|
||||
0xA0000003UL, 0xD0000003UL, 0xC8000003UL, 0xF0000003UL,
|
||||
0x80000003UL, 0x98000003UL, 0xD8000003UL, 0x90000003UL,
|
||||
0x30000001UL, 0x60000001UL, 0x38000001UL, 0x8000001UL,
|
||||
0x28000001UL, 0x78000001UL, 0x68000001UL, 0x40000001UL,
|
||||
0x20000001UL, 0x50000001UL, 0x48000001UL, 0x70000001UL,
|
||||
0x1UL, 0x18000001UL, 0x58000001UL, 0x10000001UL,
|
||||
0xB0000000UL, 0xE0000000UL, 0xB8000000UL, 0x88000000UL,
|
||||
0xA8000000UL, 0xF8000000UL, 0xE8000000UL, 0xC0000000UL,
|
||||
0xA0000000UL, 0xD0000000UL, 0xC8000000UL, 0xF0000000UL,
|
||||
0x80000000UL, 0x98000000UL, 0xD8000000UL, 0x90000000UL,
|
||||
0xB0000006UL, 0xE0000006UL, 0xB8000006UL, 0x88000006UL,
|
||||
0xA8000006UL, 0xF8000006UL, 0xE8000006UL, 0xC0000006UL,
|
||||
0xA0000006UL, 0xD0000006UL, 0xC8000006UL, 0xF0000006UL,
|
||||
0x80000006UL, 0x98000006UL, 0xD8000006UL, 0x90000006UL,
|
||||
0xB0000001UL, 0xE0000001UL, 0xB8000001UL, 0x88000001UL,
|
||||
0xA8000001UL, 0xF8000001UL, 0xE8000001UL, 0xC0000001UL,
|
||||
0xA0000001UL, 0xD0000001UL, 0xC8000001UL, 0xF0000001UL,
|
||||
0x80000001UL, 0x98000001UL, 0xD8000001UL, 0x90000001UL,
|
||||
0x30000003UL, 0x60000003UL, 0x38000003UL, 0x8000003UL,
|
||||
0x28000003UL, 0x78000003UL, 0x68000003UL, 0x40000003UL,
|
||||
0x20000003UL, 0x50000003UL, 0x48000003UL, 0x70000003UL,
|
||||
0x3UL, 0x18000003UL, 0x58000003UL, 0x10000003UL,
|
||||
0x30000004UL, 0x60000004UL, 0x38000004UL, 0x8000004UL,
|
||||
0x28000004UL, 0x78000004UL, 0x68000004UL, 0x40000004UL,
|
||||
0x20000004UL, 0x50000004UL, 0x48000004UL, 0x70000004UL,
|
||||
0x4UL, 0x18000004UL, 0x58000004UL, 0x10000004UL,
|
||||
0xB0000002UL, 0xE0000002UL, 0xB8000002UL, 0x88000002UL,
|
||||
0xA8000002UL, 0xF8000002UL, 0xE8000002UL, 0xC0000002UL,
|
||||
0xA0000002UL, 0xD0000002UL, 0xC8000002UL, 0xF0000002UL,
|
||||
0x80000002UL, 0x98000002UL, 0xD8000002UL, 0x90000002UL,
|
||||
0xB0000004UL, 0xE0000004UL, 0xB8000004UL, 0x88000004UL,
|
||||
0xA8000004UL, 0xF8000004UL, 0xE8000004UL, 0xC0000004UL,
|
||||
0xA0000004UL, 0xD0000004UL, 0xC8000004UL, 0xF0000004UL,
|
||||
0x80000004UL, 0x98000004UL, 0xD8000004UL, 0x90000004UL,
|
||||
0x30000006UL, 0x60000006UL, 0x38000006UL, 0x8000006UL,
|
||||
0x28000006UL, 0x78000006UL, 0x68000006UL, 0x40000006UL,
|
||||
0x20000006UL, 0x50000006UL, 0x48000006UL, 0x70000006UL,
|
||||
0x6UL, 0x18000006UL, 0x58000006UL, 0x10000006UL,
|
||||
0xB0000007UL, 0xE0000007UL, 0xB8000007UL, 0x88000007UL,
|
||||
0xA8000007UL, 0xF8000007UL, 0xE8000007UL, 0xC0000007UL,
|
||||
0xA0000007UL, 0xD0000007UL, 0xC8000007UL, 0xF0000007UL,
|
||||
0x80000007UL, 0x98000007UL, 0xD8000007UL, 0x90000007UL,
|
||||
0x30000007UL, 0x60000007UL, 0x38000007UL, 0x8000007UL,
|
||||
0x28000007UL, 0x78000007UL, 0x68000007UL, 0x40000007UL,
|
||||
0x20000007UL, 0x50000007UL, 0x48000007UL, 0x70000007UL,
|
||||
0x7UL, 0x18000007UL, 0x58000007UL, 0x10000007UL,
|
||||
};
|
||||
static __const mutils_word32 gost_sbox_4[256] = {
|
||||
|
||||
0xE8UL, 0xD8UL, 0xA0UL, 0x88UL, 0x98UL,
|
||||
0xF8UL, 0xA8UL, 0xC8UL, 0x80UL, 0xD0UL,
|
||||
0xF0UL, 0xB8UL, 0xB0UL, 0xC0UL, 0x90UL,
|
||||
0xE0UL, 0x7E8UL, 0x7D8UL, 0x7A0UL, 0x788UL,
|
||||
0x798UL, 0x7F8UL, 0x7A8UL, 0x7C8UL, 0x780UL,
|
||||
0x7D0UL, 0x7F0UL, 0x7B8UL, 0x7B0UL, 0x7C0UL,
|
||||
0x790UL, 0x7E0UL, 0x6E8UL, 0x6D8UL, 0x6A0UL,
|
||||
0x688UL, 0x698UL, 0x6F8UL, 0x6A8UL, 0x6C8UL,
|
||||
0x680UL, 0x6D0UL, 0x6F0UL, 0x6B8UL, 0x6B0UL,
|
||||
0x6C0UL, 0x690UL, 0x6E0UL, 0x68UL, 0x58UL,
|
||||
0x20UL, 0x8UL, 0x18UL, 0x78UL, 0x28UL,
|
||||
0x48UL, 0x0UL, 0x50UL, 0x70UL, 0x38UL,
|
||||
0x30UL, 0x40UL, 0x10UL, 0x60UL, 0x2E8UL,
|
||||
0x2D8UL, 0x2A0UL, 0x288UL, 0x298UL, 0x2F8UL,
|
||||
0x2A8UL, 0x2C8UL, 0x280UL, 0x2D0UL, 0x2F0UL,
|
||||
0x2B8UL, 0x2B0UL, 0x2C0UL, 0x290UL, 0x2E0UL,
|
||||
0x3E8UL, 0x3D8UL, 0x3A0UL, 0x388UL, 0x398UL,
|
||||
0x3F8UL, 0x3A8UL, 0x3C8UL, 0x380UL, 0x3D0UL,
|
||||
0x3F0UL, 0x3B8UL, 0x3B0UL, 0x3C0UL, 0x390UL,
|
||||
0x3E0UL, 0x568UL, 0x558UL, 0x520UL, 0x508UL,
|
||||
0x518UL, 0x578UL, 0x528UL, 0x548UL, 0x500UL,
|
||||
0x550UL, 0x570UL, 0x538UL, 0x530UL, 0x540UL,
|
||||
0x510UL, 0x560UL, 0x268UL, 0x258UL, 0x220UL,
|
||||
0x208UL, 0x218UL, 0x278UL, 0x228UL, 0x248UL,
|
||||
0x200UL, 0x250UL, 0x270UL, 0x238UL, 0x230UL,
|
||||
0x240UL, 0x210UL, 0x260UL, 0x4E8UL, 0x4D8UL,
|
||||
0x4A0UL, 0x488UL, 0x498UL, 0x4F8UL, 0x4A8UL,
|
||||
0x4C8UL, 0x480UL, 0x4D0UL, 0x4F0UL, 0x4B8UL,
|
||||
0x4B0UL, 0x4C0UL, 0x490UL, 0x4E0UL, 0x168UL,
|
||||
0x158UL, 0x120UL, 0x108UL, 0x118UL, 0x178UL,
|
||||
0x128UL, 0x148UL, 0x100UL, 0x150UL, 0x170UL,
|
||||
0x138UL, 0x130UL, 0x140UL, 0x110UL, 0x160UL,
|
||||
0x1E8UL, 0x1D8UL, 0x1A0UL, 0x188UL, 0x198UL,
|
||||
0x1F8UL, 0x1A8UL, 0x1C8UL, 0x180UL, 0x1D0UL,
|
||||
0x1F0UL, 0x1B8UL, 0x1B0UL, 0x1C0UL, 0x190UL,
|
||||
0x1E0UL, 0x768UL, 0x758UL, 0x720UL, 0x708UL,
|
||||
0x718UL, 0x778UL, 0x728UL, 0x748UL, 0x700UL,
|
||||
0x750UL, 0x770UL, 0x738UL, 0x730UL, 0x740UL,
|
||||
0x710UL, 0x760UL, 0x368UL, 0x358UL, 0x320UL,
|
||||
0x308UL, 0x318UL, 0x378UL, 0x328UL, 0x348UL,
|
||||
0x300UL, 0x350UL, 0x370UL, 0x338UL, 0x330UL,
|
||||
0x340UL, 0x310UL, 0x360UL, 0x5E8UL, 0x5D8UL,
|
||||
0x5A0UL, 0x588UL, 0x598UL, 0x5F8UL, 0x5A8UL,
|
||||
0x5C8UL, 0x580UL, 0x5D0UL, 0x5F0UL, 0x5B8UL,
|
||||
0x5B0UL, 0x5C0UL, 0x590UL, 0x5E0UL, 0x468UL,
|
||||
0x458UL, 0x420UL, 0x408UL, 0x418UL, 0x478UL,
|
||||
0x428UL, 0x448UL, 0x400UL, 0x450UL, 0x470UL,
|
||||
0x438UL, 0x430UL, 0x440UL, 0x410UL, 0x460UL,
|
||||
0x668UL, 0x658UL, 0x620UL, 0x608UL, 0x618UL,
|
||||
0x678UL, 0x628UL, 0x648UL, 0x600UL, 0x650UL,
|
||||
0x670UL, 0x638UL, 0x630UL, 0x640UL, 0x610UL,
|
||||
0x660UL,
|
||||
};
|
||||
|
||||
/*
|
||||
* A macro that performs a full encryption round of GOST 28147-89.
|
||||
* Temporary variable t assumed and variables r and l for left and right
|
||||
* blocks
|
||||
*/
|
||||
|
||||
#define GOST_ENCRYPT_ROUND(k1, k2) \
|
||||
t = (k1) + r; \
|
||||
l ^= gost_sbox_1[t & 0xff] ^ gost_sbox_2[(t >> 8) & 0xff] ^ \
|
||||
gost_sbox_3[(t >> 16) & 0xff] ^ gost_sbox_4[t >> 24]; \
|
||||
t = (k2) + l; \
|
||||
r ^= gost_sbox_1[t & 0xff] ^ gost_sbox_2[(t >> 8) & 0xff] ^ \
|
||||
gost_sbox_3[(t >> 16) & 0xff] ^ gost_sbox_4[t >> 24]; \
|
||||
|
||||
/*
|
||||
encrypt a block with the given key
|
||||
*/
|
||||
|
||||
#define GOST_ENCRYPT(key) \
|
||||
GOST_ENCRYPT_ROUND(key[0], key[1]) \
|
||||
GOST_ENCRYPT_ROUND(key[2], key[3]) \
|
||||
GOST_ENCRYPT_ROUND(key[4], key[5]) \
|
||||
GOST_ENCRYPT_ROUND(key[6], key[7]) \
|
||||
GOST_ENCRYPT_ROUND(key[0], key[1]) \
|
||||
GOST_ENCRYPT_ROUND(key[2], key[3]) \
|
||||
GOST_ENCRYPT_ROUND(key[4], key[5]) \
|
||||
GOST_ENCRYPT_ROUND(key[6], key[7]) \
|
||||
GOST_ENCRYPT_ROUND(key[0], key[1]) \
|
||||
GOST_ENCRYPT_ROUND(key[2], key[3]) \
|
||||
GOST_ENCRYPT_ROUND(key[4], key[5]) \
|
||||
GOST_ENCRYPT_ROUND(key[6], key[7]) \
|
||||
GOST_ENCRYPT_ROUND(key[7], key[6]) \
|
||||
GOST_ENCRYPT_ROUND(key[5], key[4]) \
|
||||
GOST_ENCRYPT_ROUND(key[3], key[2]) \
|
||||
GOST_ENCRYPT_ROUND(key[1], key[0]) \
|
||||
t = r; \
|
||||
r = l; \
|
||||
l = t;
|
||||
|
||||
/*
|
||||
* "chi" compression function. the result is stored over h
|
||||
*/
|
||||
|
||||
static void gosthash_compress(mutils_word32 * h, mutils_word32 * m)
|
||||
{
|
||||
mutils_word32 i;
|
||||
mutils_word32 l, r, t, key[8], u[8], v[8], w[8], s[8];
|
||||
|
||||
mutils_memcpy(u, h, sizeof(u));
|
||||
mutils_memcpy(v, m, sizeof(u));
|
||||
|
||||
for (i = 0; i < 8; i += 2) {
|
||||
w[0] = u[0] ^ v[0]; /*
|
||||
w = u xor v
|
||||
*/
|
||||
w[1] = u[1] ^ v[1];
|
||||
w[2] = u[2] ^ v[2];
|
||||
w[3] = u[3] ^ v[3];
|
||||
w[4] = u[4] ^ v[4];
|
||||
w[5] = u[5] ^ v[5];
|
||||
w[6] = u[6] ^ v[6];
|
||||
w[7] = u[7] ^ v[7];
|
||||
|
||||
/*
|
||||
P-Transformation
|
||||
*/
|
||||
|
||||
key[0] = (w[0] & 0x000000ff) | ((w[2] & 0x000000ff) << 8) | ((w[4] & 0x000000ff) << 16) | ((w[6] & 0x000000ff) << 24);
|
||||
key[1] = ((w[0] & 0x0000ff00) >> 8) | (w[2] & 0x0000ff00) | ((w[4] & 0x0000ff00) << 8) | ((w[6] & 0x0000ff00) << 16);
|
||||
key[2] = ((w[0] & 0x00ff0000) >> 16) | ((w[2] & 0x00ff0000) >> 8) | (w[4] & 0x00ff0000)
|
||||
| ((w[6] & 0x00ff0000) << 8);
|
||||
key[3] = ((w[0] & 0xff000000) >> 24) | ((w[2] & 0xff000000) >> 16) | ((w[4] & 0xff000000) >> 8) | (w[6] & 0xff000000);
|
||||
key[4] = (w[1] & 0x000000ff) | ((w[3] & 0x000000ff) << 8) | ((w[5] & 0x000000ff) << 16) | ((w[7] & 0x000000ff) << 24);
|
||||
key[5] = ((w[1] & 0x0000ff00) >> 8) | (w[3] & 0x0000ff00) | ((w[5] & 0x0000ff00) << 8) | ((w[7] & 0x0000ff00) << 16);
|
||||
key[6] = ((w[1] & 0x00ff0000) >> 16) | ((w[3] & 0x00ff0000) >> 8) | (w[5] & 0x00ff0000)
|
||||
| ((w[7] & 0x00ff0000) << 8);
|
||||
key[7] = ((w[1] & 0xff000000) >> 24) | ((w[3] & 0xff000000) >> 16) | ((w[5] & 0xff000000) >> 8) | (w[7] & 0xff000000);
|
||||
|
||||
r = h[i]; /*
|
||||
encriphering transformation
|
||||
*/
|
||||
l = h[i + 1];
|
||||
GOST_ENCRYPT(key);
|
||||
|
||||
s[i] = r;
|
||||
s[i + 1] = l;
|
||||
|
||||
if (i == 6)
|
||||
break;
|
||||
|
||||
l = u[0] ^ u[2]; /*
|
||||
U = A(U)
|
||||
*/
|
||||
r = u[1] ^ u[3];
|
||||
u[0] = u[2];
|
||||
u[1] = u[3];
|
||||
u[2] = u[4];
|
||||
u[3] = u[5];
|
||||
u[4] = u[6];
|
||||
u[5] = u[7];
|
||||
u[6] = l;
|
||||
u[7] = r;
|
||||
|
||||
if (i == 2) { /*
|
||||
Constant C_3
|
||||
*/
|
||||
u[0] ^= 0xff00ff00;
|
||||
u[1] ^= 0xff00ff00;
|
||||
u[2] ^= 0x00ff00ff;
|
||||
u[3] ^= 0x00ff00ff;
|
||||
u[4] ^= 0x00ffff00;
|
||||
u[5] ^= 0xff0000ff;
|
||||
u[6] ^= 0x000000ff;
|
||||
u[7] ^= 0xff00ffff;
|
||||
}
|
||||
|
||||
l = v[0]; /*
|
||||
V = A(A(V))
|
||||
*/
|
||||
r = v[2];
|
||||
v[0] = v[4];
|
||||
v[2] = v[6];
|
||||
v[4] = l ^ r;
|
||||
v[6] = v[0] ^ r;
|
||||
l = v[1];
|
||||
r = v[3];
|
||||
v[1] = v[5];
|
||||
v[3] = v[7];
|
||||
v[5] = l ^ r;
|
||||
v[7] = v[1] ^ r;
|
||||
}
|
||||
|
||||
/*
|
||||
12 rounds of the LFSR (computed from a product matrix) and xor in M
|
||||
*/
|
||||
|
||||
u[0] = m[0] ^ s[6];
|
||||
u[1] = m[1] ^ s[7];
|
||||
u[2] = m[2] ^ (s[0] << 16) ^ (s[0] >> 16) ^ (s[0] & 0xffff) ^ (s[1] & 0xffff) ^ (s[1] >> 16) ^ (s[2] << 16) ^ s[6] ^ (s[6] << 16) ^ (s[7] & 0xffff0000) ^ (s[7] >> 16);
|
||||
u[3] = m[3] ^ (s[0] & 0xffff) ^ (s[0] << 16) ^ (s[1] & 0xffff) ^ (s[1]
|
||||
<< 16)
|
||||
^ (s[1] >> 16) ^ (s[2] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ s[6] ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ (s[7] << 16) ^ (s[7] >> 16);
|
||||
u[4] =
|
||||
m[4] ^ (s[0] & 0xffff0000) ^ (s[0] << 16) ^ (s[0] >> 16) ^
|
||||
(s[1] & 0xffff0000) ^ (s[1] >> 16) ^ (s[2] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ (s[3] >> 16) ^ (s[4] << 16) ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ (s[7] << 16) ^ (s[7] >> 16);
|
||||
u[5] =
|
||||
m[5] ^ (s[0] << 16) ^ (s[0] >> 16) ^ (s[0] & 0xffff0000) ^
|
||||
(s[1] & 0xffff) ^ s[2] ^ (s[2] >> 16) ^ (s[3] << 16) ^ (s[3] >>
|
||||
16) ^ (s[4] << 16) ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff0000) ^ (s[7] << 16) ^ (s[7] >> 16);
|
||||
u[6] = m[6] ^ s[0] ^ (s[1] >> 16) ^ (s[2] << 16) ^ s[3] ^ (s[3] >> 16)
|
||||
^ (s[4] << 16) ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[5] >> 16) ^ s[6] ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] << 16);
|
||||
u[7] =
|
||||
m[7] ^ (s[0] & 0xffff0000) ^ (s[0] << 16) ^ (s[1] & 0xffff) ^
|
||||
(s[1] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ s[4] ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[5] >> 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ (s[7] << 16) ^ (s[7] >> 16);
|
||||
|
||||
/*
|
||||
16 * 1 round of the LFSR and xor in H
|
||||
*/
|
||||
|
||||
v[0] = h[0] ^ (u[1] << 16) ^ (u[0] >> 16);
|
||||
v[1] = h[1] ^ (u[2] << 16) ^ (u[1] >> 16);
|
||||
v[2] = h[2] ^ (u[3] << 16) ^ (u[2] >> 16);
|
||||
v[3] = h[3] ^ (u[4] << 16) ^ (u[3] >> 16);
|
||||
v[4] = h[4] ^ (u[5] << 16) ^ (u[4] >> 16);
|
||||
v[5] = h[5] ^ (u[6] << 16) ^ (u[5] >> 16);
|
||||
v[6] = h[6] ^ (u[7] << 16) ^ (u[6] >> 16);
|
||||
v[7] = h[7] ^ (u[0] & 0xffff0000) ^ (u[0] << 16) ^ (u[7] >> 16) ^ (u[1] & 0xffff0000) ^ (u[1] << 16) ^ (u[6] << 16) ^ (u[7] & 0xffff0000);
|
||||
|
||||
/*
|
||||
61 rounds of LFSR, mixing up h (computed from a product matrix)
|
||||
*/
|
||||
|
||||
h[0] =
|
||||
(v[0] & 0xffff0000) ^ (v[0] << 16) ^ (v[0] >> 16) ^ (v[1] >>
|
||||
16) ^
|
||||
(v[1] & 0xffff0000) ^ (v[2] << 16) ^ (v[3] >> 16) ^ (v[4] << 16) ^ (v[5] >> 16) ^ v[5] ^ (v[6] >> 16) ^ (v[7] << 16) ^ (v[7] >> 16) ^ (v[7] & 0xffff);
|
||||
h[1] =
|
||||
(v[0] << 16) ^ (v[0] >> 16) ^ (v[0] & 0xffff0000) ^ (v[1] &
|
||||
0xffff) ^ v[2] ^ (v[2] >> 16) ^ (v[3] << 16) ^ (v[4] >> 16) ^ (v[5] << 16) ^ (v[6] << 16) ^ v[6] ^ (v[7] & 0xffff0000) ^ (v[7] >> 16);
|
||||
h[2] =
|
||||
(v[0] & 0xffff) ^ (v[0] << 16) ^ (v[1] << 16) ^ (v[1] >> 16) ^
|
||||
(v[1] & 0xffff0000) ^ (v[2] << 16) ^ (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ (v[5] >> 16) ^ v[6] ^ (v[6] >> 16) ^ (v[7] & 0xffff) ^ (v[7] << 16) ^ (v[7] >> 16);
|
||||
h[3] = (v[0] << 16) ^ (v[0] >> 16) ^ (v[0] & 0xffff0000) ^ (v[1] & 0xffff0000)
|
||||
^ (v[1] >> 16) ^ (v[2] << 16) ^ (v[2] >> 16) ^ v[2] ^ (v[3] << 16) ^ (v[4] >> 16) ^ v[4] ^ (v[5] << 16) ^ (v[6] << 16) ^ (v[7] & 0xffff) ^ (v[7] >> 16);
|
||||
h[4] = (v[0] >> 16) ^ (v[1] << 16) ^ v[1] ^ (v[2] >> 16) ^ v[2] ^ (v[3] << 16) ^ (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ (v[5] >> 16) ^ v[5]
|
||||
^ (v[6] << 16) ^ (v[6] >> 16) ^ (v[7] << 16);
|
||||
h[5] = (v[0] << 16) ^ (v[0] & 0xffff0000) ^ (v[1] << 16) ^ (v[1] >> 16) ^ (v[1] & 0xffff0000) ^ (v[2] << 16) ^ v[2] ^ (v[3] >> 16) ^ v[3]
|
||||
^ (v[4] << 16) ^ (v[4] >> 16) ^ v[4] ^ (v[5] << 16) ^ (v[6] << 16) ^ (v[6] >> 16) ^ v[6] ^ (v[7] << 16) ^ (v[7] >> 16) ^ (v[7] & 0xffff0000);
|
||||
h[6] = v[0] ^ v[2] ^ (v[2] >> 16) ^ v[3] ^ (v[3] << 16) ^ v[4] ^ (v[4]
|
||||
>> 16)
|
||||
^ (v[5] << 16) ^ (v[5] >> 16) ^ v[5] ^ (v[6] << 16) ^ (v[6] >> 16) ^ v[6] ^ (v[7] << 16) ^ v[7];
|
||||
h[7] = v[0] ^ (v[0] >> 16) ^ (v[1] << 16) ^ (v[1] >> 16) ^ (v[2] << 16) ^ (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ v[4] ^ (v[5] >> 16) ^ v[5]
|
||||
^ (v[6] << 16) ^ (v[6] >> 16) ^ (v[7] << 16) ^ v[7];
|
||||
}
|
||||
|
||||
/*
|
||||
Clear the state of the given context structure.
|
||||
*/
|
||||
|
||||
void gosthash_reset(GostHashCtx * ctx)
|
||||
{
|
||||
mutils_bzero(ctx->sum, 32);
|
||||
mutils_bzero(ctx->hash, 32);
|
||||
mutils_bzero(ctx->len, 32);
|
||||
mutils_bzero(ctx->partial, 32);
|
||||
ctx->partial_bytes = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Mix in a 32-byte chunk ("stage 3")
|
||||
*/
|
||||
|
||||
static void gosthash_bytes(GostHashCtx * ctx, __const mutils_word8 * buf, mutils_word32 bits)
|
||||
{
|
||||
mutils_word32 i;
|
||||
mutils_word32 j;
|
||||
mutils_word32 a, c, m[8];
|
||||
|
||||
/*
|
||||
convert bytes to a long words and compute the sum
|
||||
*/
|
||||
|
||||
j = 0;
|
||||
c = 0;
|
||||
for (i = 0; i < 8; i++) {
|
||||
a = ((mutils_word32) buf[j]) | (((mutils_word32) buf[j + 1]) << 8) | (((mutils_word32) buf[j + 2]) << 16) | (((mutils_word32) buf[j + 3]) << 24);
|
||||
j += 4;
|
||||
m[i] = a;
|
||||
c = a + c + ctx->sum[i];
|
||||
|
||||
if ((a==0xFFFFFFFFUL) && (ctx->sum[i]==0xFFFFFFFFUL)) {
|
||||
ctx->sum[i] = c;
|
||||
c = 1;
|
||||
} else {
|
||||
ctx->sum[i] = c;
|
||||
c = c < a ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
compress
|
||||
*/
|
||||
|
||||
gosthash_compress(ctx->hash, m);
|
||||
|
||||
/*
|
||||
a 64-bit counter should be sufficient
|
||||
*/
|
||||
|
||||
ctx->len[0] += bits;
|
||||
if (ctx->len[0] < bits)
|
||||
ctx->len[1]++;
|
||||
}
|
||||
|
||||
/*
|
||||
Mix in len bytes of data for the given buffer.
|
||||
*/
|
||||
|
||||
void gosthash_update(GostHashCtx * ctx, __const mutils_word8 * buf, mutils_word32 len)
|
||||
{
|
||||
mutils_word32 i, j;
|
||||
|
||||
i = ctx->partial_bytes;
|
||||
j = 0;
|
||||
while (i < 32 && j < len)
|
||||
ctx->partial[i++] = buf[j++];
|
||||
|
||||
if (i < 32) {
|
||||
ctx->partial_bytes = i;
|
||||
return;
|
||||
}
|
||||
gosthash_bytes(ctx, ctx->partial, 256);
|
||||
|
||||
while ((j + 32) < len) {
|
||||
gosthash_bytes(ctx, &buf[j], 256);
|
||||
j += 32;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
while (j < len)
|
||||
ctx->partial[i++] = buf[j++];
|
||||
ctx->partial_bytes = i;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Compute and save the 32-byte digest.
|
||||
*/
|
||||
|
||||
void gosthash_final(GostHashCtx * ctx, mutils_word8 * digest)
|
||||
{
|
||||
mutils_word32 i;
|
||||
mutils_word32 j;
|
||||
mutils_word32 a;
|
||||
|
||||
/*
|
||||
adjust and mix in the last chunk
|
||||
*/
|
||||
|
||||
if (ctx->partial_bytes > 0) {
|
||||
mutils_bzero(&ctx->partial[ctx->partial_bytes], 32 - ctx->partial_bytes);
|
||||
gosthash_bytes(ctx, ctx->partial, ctx->partial_bytes << 3);
|
||||
}
|
||||
|
||||
/*
|
||||
mix in the length and the sum
|
||||
*/
|
||||
|
||||
gosthash_compress(ctx->hash, ctx->len);
|
||||
gosthash_compress(ctx->hash, ctx->sum);
|
||||
|
||||
/*
|
||||
convert the output to bytes
|
||||
*/
|
||||
|
||||
j = 0;
|
||||
|
||||
if (digest != NULL)
|
||||
for (i = 0; i < 8; i++) {
|
||||
a = ctx->hash[i];
|
||||
digest[j] = (mutils_word8) a;
|
||||
digest[j + 1] = (mutils_word8) (a >> 8);
|
||||
digest[j + 2] = (mutils_word8) (a >> 16);
|
||||
digest[j + 3] = (mutils_word8) (a >> 24);
|
||||
j += 4;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* ENABLE_GOST */
|
||||
@@ -0,0 +1,919 @@
|
||||
/*
|
||||
* The HAVAL hashing function
|
||||
*
|
||||
* Public domain implementation by Paulo S.L.M. Barreto <pbarreto@nw.com.br>
|
||||
*
|
||||
* Version 1.1 (1998.04.19)
|
||||
*
|
||||
* Differences from Version 1.0 (1997.04.03):
|
||||
*
|
||||
* - Added more parentheses to enforce operator precedence in the definitions
|
||||
* of the nonlinear F functions, as some compilers do not automatically
|
||||
* apply the standard precedence rules of the C language (Borland C++ 5.02
|
||||
* being the culprit in mind)
|
||||
*
|
||||
* - Similar changes in HavalUpdate() and in the ROTR macro for
|
||||
* the same reason.
|
||||
*
|
||||
* - Explicitly make casts when reducing precision of an integer value
|
||||
* or from char to byte (= unsigned char) to silence compilation warnings
|
||||
* from Borland C++
|
||||
*
|
||||
* - Explicitly defined LITTLE_ENDIAN for compilation under MSVC++ and
|
||||
* Borland C++.
|
||||
*
|
||||
* - Fixed the sense of the ROTR macro
|
||||
*
|
||||
* - Fixed behaviour on big-endian platforms by doing byte reversal when
|
||||
* unpacking the final digest from the hash context structure to the
|
||||
* digest argument of HavalFinal()
|
||||
*
|
||||
* - Forcefully note that the code as is does not work on VMS
|
||||
*
|
||||
* We are grateful to Mr. Tines <tines@windsong.demon.co.uk> for pointing out
|
||||
* these problems, providing solutions for them, and testing the fixed code.
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
*
|
||||
* Reference: Zheng, Y., Pieprzyk, J., Seberry, J.:
|
||||
* "HAVAL - a one-way hashing algorithm with variable length of output",
|
||||
* Advances in Cryptology (AusCrypt'92), LNCS 718 (1993), 83-104, Springer-Verlag.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <libdefs.h>
|
||||
|
||||
#if defined(ENABLE_HAVAL)
|
||||
|
||||
#include <mhash_haval.h>
|
||||
|
||||
#define HAVAL_VERSION 1
|
||||
|
||||
/* Nonlinear F functions */
|
||||
|
||||
#define F1(X6, X5, X4, X3, X2, X1, X0) \
|
||||
(((X1) & ((X4) ^ (X0))) ^ ((X2) & (X5)) ^ ((X3) & (X6)) ^ (X0))
|
||||
|
||||
#define F2(X6, X5, X4, X3, X2, X1, X0) \
|
||||
(((X2) & (((X1) & (~(X3))) ^ ((X4) & (X5)) ^ (X6) ^ (X0))) ^ \
|
||||
(((X4) & ((X1) ^ (X5))) ^ ((X3) & (X5)) ^ (X0)))
|
||||
|
||||
#define F3(X6, X5, X4, X3, X2, X1, X0) \
|
||||
(((X3) & (((X1) & (X2)) ^ (X6) ^ (X0))) ^ ((X1) & (X4)) ^ \
|
||||
((X2) & (X5)) ^ (X0))
|
||||
|
||||
#define F4(X6, X5, X4, X3, X2, X1, X0) \
|
||||
(((X4) & (((~(X2)) & (X5)) ^ ((X3) | (X6)) ^ (X1) ^ (X0))) ^ \
|
||||
((X3) & (((X1) & (X2)) ^ (X5) ^ (X6))) ^ ((X2) & (X6)) ^ (X0))
|
||||
|
||||
#define F5(X6, X5, X4, X3, X2, X1, X0) \
|
||||
(((X1) & ((X4) ^ ((X0) & (X2) & (X3)))) ^ \
|
||||
(((X2) ^ (X0)) & (X5)) ^ ((X3) & (X6)) ^ (X0))
|
||||
|
||||
|
||||
#define ROTR(v,n) (((v) >> ((mutils_word32)(n))) | ((v) << (32 - (mutils_word32)(n))))
|
||||
|
||||
/*
|
||||
The following macro would generate better code on an Intel platform,
|
||||
however it is never used there, and this code when used in e.g
|
||||
havalTransform3()
|
||||
|
||||
t = ((mutils_word32 *)in)[i];
|
||||
|
||||
blithely casts byte aligned data to a longword aligned type, causing
|
||||
an immediate core dump on a RISC system
|
||||
|
||||
#define BYTE_REVERSE(out, in) \
|
||||
{ \
|
||||
register mutils_word32 t; \
|
||||
register mutils_word8 i; \
|
||||
for (i = 0; i < 32; i++) { \
|
||||
t = ((mutils_word32 *)in)[i]; \
|
||||
t = ROTR (t, 16); \
|
||||
((mutils_word32 *)out)[i] = ((t & 0xFF00FF00UL) >> 8) | ((t & 0x00FF00FFUL) << 8); \
|
||||
} \
|
||||
}
|
||||
|
||||
Therefore, allow for unaligned access and move the bytes by hand.
|
||||
This assumes that out and in do not overlap, which is the case in
|
||||
practice here.
|
||||
*/
|
||||
|
||||
static void havalTransform3 (mutils_word32 E[8], __const mutils_word32 D[32], mutils_word32 T[8])
|
||||
{
|
||||
mutils_word32 *W;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
W = mutils_word32nswap(D, 32, MUTILS_FALSE);
|
||||
#else /* LITTLE ENDIAN */
|
||||
W = (mutils_word32 *) D;
|
||||
#endif /* Byte re-ordering */
|
||||
|
||||
/* PASS 1: */
|
||||
|
||||
T[7] = ROTR (F1 (E[1], E[0], E[3], E[5], E[6], E[2], E[4]), 7) + ROTR (E[7], 11) + W[ 0];
|
||||
T[6] = ROTR (F1 (E[0], T[7], E[2], E[4], E[5], E[1], E[3]), 7) + ROTR (E[6], 11) + W[ 1];
|
||||
T[5] = ROTR (F1 (T[7], T[6], E[1], E[3], E[4], E[0], E[2]), 7) + ROTR (E[5], 11) + W[ 2];
|
||||
T[4] = ROTR (F1 (T[6], T[5], E[0], E[2], E[3], T[7], E[1]), 7) + ROTR (E[4], 11) + W[ 3];
|
||||
T[3] = ROTR (F1 (T[5], T[4], T[7], E[1], E[2], T[6], E[0]), 7) + ROTR (E[3], 11) + W[ 4];
|
||||
T[2] = ROTR (F1 (T[4], T[3], T[6], E[0], E[1], T[5], T[7]), 7) + ROTR (E[2], 11) + W[ 5];
|
||||
T[1] = ROTR (F1 (T[3], T[2], T[5], T[7], E[0], T[4], T[6]), 7) + ROTR (E[1], 11) + W[ 6];
|
||||
T[0] = ROTR (F1 (T[2], T[1], T[4], T[6], T[7], T[3], T[5]), 7) + ROTR (E[0], 11) + W[ 7];
|
||||
|
||||
|
||||
T[7] = ROTR (F1 (T[1], T[0], T[3], T[5], T[6], T[2], T[4]), 7) + ROTR (T[7], 11) + W[ 8];
|
||||
T[6] = ROTR (F1 (T[0], T[7], T[2], T[4], T[5], T[1], T[3]), 7) + ROTR (T[6], 11) + W[ 9];
|
||||
T[5] = ROTR (F1 (T[7], T[6], T[1], T[3], T[4], T[0], T[2]), 7) + ROTR (T[5], 11) + W[10];
|
||||
T[4] = ROTR (F1 (T[6], T[5], T[0], T[2], T[3], T[7], T[1]), 7) + ROTR (T[4], 11) + W[11];
|
||||
T[3] = ROTR (F1 (T[5], T[4], T[7], T[1], T[2], T[6], T[0]), 7) + ROTR (T[3], 11) + W[12];
|
||||
T[2] = ROTR (F1 (T[4], T[3], T[6], T[0], T[1], T[5], T[7]), 7) + ROTR (T[2], 11) + W[13];
|
||||
T[1] = ROTR (F1 (T[3], T[2], T[5], T[7], T[0], T[4], T[6]), 7) + ROTR (T[1], 11) + W[14];
|
||||
T[0] = ROTR (F1 (T[2], T[1], T[4], T[6], T[7], T[3], T[5]), 7) + ROTR (T[0], 11) + W[15];
|
||||
|
||||
T[7] = ROTR (F1 (T[1], T[0], T[3], T[5], T[6], T[2], T[4]), 7) + ROTR (T[7], 11) + W[16];
|
||||
T[6] = ROTR (F1 (T[0], T[7], T[2], T[4], T[5], T[1], T[3]), 7) + ROTR (T[6], 11) + W[17];
|
||||
T[5] = ROTR (F1 (T[7], T[6], T[1], T[3], T[4], T[0], T[2]), 7) + ROTR (T[5], 11) + W[18];
|
||||
T[4] = ROTR (F1 (T[6], T[5], T[0], T[2], T[3], T[7], T[1]), 7) + ROTR (T[4], 11) + W[19];
|
||||
T[3] = ROTR (F1 (T[5], T[4], T[7], T[1], T[2], T[6], T[0]), 7) + ROTR (T[3], 11) + W[20];
|
||||
T[2] = ROTR (F1 (T[4], T[3], T[6], T[0], T[1], T[5], T[7]), 7) + ROTR (T[2], 11) + W[21];
|
||||
T[1] = ROTR (F1 (T[3], T[2], T[5], T[7], T[0], T[4], T[6]), 7) + ROTR (T[1], 11) + W[22];
|
||||
T[0] = ROTR (F1 (T[2], T[1], T[4], T[6], T[7], T[3], T[5]), 7) + ROTR (T[0], 11) + W[23];
|
||||
|
||||
T[7] = ROTR (F1 (T[1], T[0], T[3], T[5], T[6], T[2], T[4]), 7) + ROTR (T[7], 11) + W[24];
|
||||
T[6] = ROTR (F1 (T[0], T[7], T[2], T[4], T[5], T[1], T[3]), 7) + ROTR (T[6], 11) + W[25];
|
||||
T[5] = ROTR (F1 (T[7], T[6], T[1], T[3], T[4], T[0], T[2]), 7) + ROTR (T[5], 11) + W[26];
|
||||
T[4] = ROTR (F1 (T[6], T[5], T[0], T[2], T[3], T[7], T[1]), 7) + ROTR (T[4], 11) + W[27];
|
||||
T[3] = ROTR (F1 (T[5], T[4], T[7], T[1], T[2], T[6], T[0]), 7) + ROTR (T[3], 11) + W[28];
|
||||
T[2] = ROTR (F1 (T[4], T[3], T[6], T[0], T[1], T[5], T[7]), 7) + ROTR (T[2], 11) + W[29];
|
||||
T[1] = ROTR (F1 (T[3], T[2], T[5], T[7], T[0], T[4], T[6]), 7) + ROTR (T[1], 11) + W[30];
|
||||
T[0] = ROTR (F1 (T[2], T[1], T[4], T[6], T[7], T[3], T[5]), 7) + ROTR (T[0], 11) + W[31];
|
||||
|
||||
/* PASS 2: */
|
||||
|
||||
T[7] = ROTR (F2 (T[4], T[2], T[1], T[0], T[5], T[3], T[6]), 7) + ROTR (T[7], 11) + W[ 5] + 0x452821E6UL;
|
||||
T[6] = ROTR (F2 (T[3], T[1], T[0], T[7], T[4], T[2], T[5]), 7) + ROTR (T[6], 11) + W[14] + 0x38D01377UL;
|
||||
T[5] = ROTR (F2 (T[2], T[0], T[7], T[6], T[3], T[1], T[4]), 7) + ROTR (T[5], 11) + W[26] + 0xBE5466CFUL;
|
||||
T[4] = ROTR (F2 (T[1], T[7], T[6], T[5], T[2], T[0], T[3]), 7) + ROTR (T[4], 11) + W[18] + 0x34E90C6CUL;
|
||||
T[3] = ROTR (F2 (T[0], T[6], T[5], T[4], T[1], T[7], T[2]), 7) + ROTR (T[3], 11) + W[11] + 0xC0AC29B7UL;
|
||||
T[2] = ROTR (F2 (T[7], T[5], T[4], T[3], T[0], T[6], T[1]), 7) + ROTR (T[2], 11) + W[28] + 0xC97C50DDUL;
|
||||
T[1] = ROTR (F2 (T[6], T[4], T[3], T[2], T[7], T[5], T[0]), 7) + ROTR (T[1], 11) + W[ 7] + 0x3F84D5B5UL;
|
||||
T[0] = ROTR (F2 (T[5], T[3], T[2], T[1], T[6], T[4], T[7]), 7) + ROTR (T[0], 11) + W[16] + 0xB5470917UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[4], T[2], T[1], T[0], T[5], T[3], T[6]), 7) + ROTR (T[7], 11) + W[ 0] + 0x9216D5D9UL;
|
||||
T[6] = ROTR (F2 (T[3], T[1], T[0], T[7], T[4], T[2], T[5]), 7) + ROTR (T[6], 11) + W[23] + 0x8979FB1BUL;
|
||||
T[5] = ROTR (F2 (T[2], T[0], T[7], T[6], T[3], T[1], T[4]), 7) + ROTR (T[5], 11) + W[20] + 0xD1310BA6UL;
|
||||
T[4] = ROTR (F2 (T[1], T[7], T[6], T[5], T[2], T[0], T[3]), 7) + ROTR (T[4], 11) + W[22] + 0x98DFB5ACUL;
|
||||
T[3] = ROTR (F2 (T[0], T[6], T[5], T[4], T[1], T[7], T[2]), 7) + ROTR (T[3], 11) + W[ 1] + 0x2FFD72DBUL;
|
||||
T[2] = ROTR (F2 (T[7], T[5], T[4], T[3], T[0], T[6], T[1]), 7) + ROTR (T[2], 11) + W[10] + 0xD01ADFB7UL;
|
||||
T[1] = ROTR (F2 (T[6], T[4], T[3], T[2], T[7], T[5], T[0]), 7) + ROTR (T[1], 11) + W[ 4] + 0xB8E1AFEDUL;
|
||||
T[0] = ROTR (F2 (T[5], T[3], T[2], T[1], T[6], T[4], T[7]), 7) + ROTR (T[0], 11) + W[ 8] + 0x6A267E96UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[4], T[2], T[1], T[0], T[5], T[3], T[6]), 7) + ROTR (T[7], 11) + W[30] + 0xBA7C9045UL;
|
||||
T[6] = ROTR (F2 (T[3], T[1], T[0], T[7], T[4], T[2], T[5]), 7) + ROTR (T[6], 11) + W[ 3] + 0xF12C7F99UL;
|
||||
T[5] = ROTR (F2 (T[2], T[0], T[7], T[6], T[3], T[1], T[4]), 7) + ROTR (T[5], 11) + W[21] + 0x24A19947UL;
|
||||
T[4] = ROTR (F2 (T[1], T[7], T[6], T[5], T[2], T[0], T[3]), 7) + ROTR (T[4], 11) + W[ 9] + 0xB3916CF7UL;
|
||||
T[3] = ROTR (F2 (T[0], T[6], T[5], T[4], T[1], T[7], T[2]), 7) + ROTR (T[3], 11) + W[17] + 0x0801F2E2UL;
|
||||
T[2] = ROTR (F2 (T[7], T[5], T[4], T[3], T[0], T[6], T[1]), 7) + ROTR (T[2], 11) + W[24] + 0x858EFC16UL;
|
||||
T[1] = ROTR (F2 (T[6], T[4], T[3], T[2], T[7], T[5], T[0]), 7) + ROTR (T[1], 11) + W[29] + 0x636920D8UL;
|
||||
T[0] = ROTR (F2 (T[5], T[3], T[2], T[1], T[6], T[4], T[7]), 7) + ROTR (T[0], 11) + W[ 6] + 0x71574E69UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[4], T[2], T[1], T[0], T[5], T[3], T[6]), 7) + ROTR (T[7], 11) + W[19] + 0xA458FEA3UL;
|
||||
T[6] = ROTR (F2 (T[3], T[1], T[0], T[7], T[4], T[2], T[5]), 7) + ROTR (T[6], 11) + W[12] + 0xF4933D7EUL;
|
||||
T[5] = ROTR (F2 (T[2], T[0], T[7], T[6], T[3], T[1], T[4]), 7) + ROTR (T[5], 11) + W[15] + 0x0D95748FUL;
|
||||
T[4] = ROTR (F2 (T[1], T[7], T[6], T[5], T[2], T[0], T[3]), 7) + ROTR (T[4], 11) + W[13] + 0x728EB658UL;
|
||||
T[3] = ROTR (F2 (T[0], T[6], T[5], T[4], T[1], T[7], T[2]), 7) + ROTR (T[3], 11) + W[ 2] + 0x718BCD58UL;
|
||||
T[2] = ROTR (F2 (T[7], T[5], T[4], T[3], T[0], T[6], T[1]), 7) + ROTR (T[2], 11) + W[25] + 0x82154AEEUL;
|
||||
T[1] = ROTR (F2 (T[6], T[4], T[3], T[2], T[7], T[5], T[0]), 7) + ROTR (T[1], 11) + W[31] + 0x7B54A41DUL;
|
||||
T[0] = ROTR (F2 (T[5], T[3], T[2], T[1], T[6], T[4], T[7]), 7) + ROTR (T[0], 11) + W[27] + 0xC25A59B5UL;
|
||||
|
||||
/* PASS 3: */
|
||||
|
||||
T[7] = ROTR (F3 (T[6], T[1], T[2], T[3], T[4], T[5], T[0]), 7) + ROTR (T[7], 11) + W[19] + 0x9C30D539UL;
|
||||
T[6] = ROTR (F3 (T[5], T[0], T[1], T[2], T[3], T[4], T[7]), 7) + ROTR (T[6], 11) + W[ 9] + 0x2AF26013UL;
|
||||
T[5] = ROTR (F3 (T[4], T[7], T[0], T[1], T[2], T[3], T[6]), 7) + ROTR (T[5], 11) + W[ 4] + 0xC5D1B023UL;
|
||||
T[4] = ROTR (F3 (T[3], T[6], T[7], T[0], T[1], T[2], T[5]), 7) + ROTR (T[4], 11) + W[20] + 0x286085F0UL;
|
||||
T[3] = ROTR (F3 (T[2], T[5], T[6], T[7], T[0], T[1], T[4]), 7) + ROTR (T[3], 11) + W[28] + 0xCA417918UL;
|
||||
T[2] = ROTR (F3 (T[1], T[4], T[5], T[6], T[7], T[0], T[3]), 7) + ROTR (T[2], 11) + W[17] + 0xB8DB38EFUL;
|
||||
T[1] = ROTR (F3 (T[0], T[3], T[4], T[5], T[6], T[7], T[2]), 7) + ROTR (T[1], 11) + W[ 8] + 0x8E79DCB0UL;
|
||||
T[0] = ROTR (F3 (T[7], T[2], T[3], T[4], T[5], T[6], T[1]), 7) + ROTR (T[0], 11) + W[22] + 0x603A180EUL;
|
||||
|
||||
T[7] = ROTR (F3 (T[6], T[1], T[2], T[3], T[4], T[5], T[0]), 7) + ROTR (T[7], 11) + W[29] + 0x6C9E0E8BUL;
|
||||
T[6] = ROTR (F3 (T[5], T[0], T[1], T[2], T[3], T[4], T[7]), 7) + ROTR (T[6], 11) + W[14] + 0xB01E8A3EUL;
|
||||
T[5] = ROTR (F3 (T[4], T[7], T[0], T[1], T[2], T[3], T[6]), 7) + ROTR (T[5], 11) + W[25] + 0xD71577C1UL;
|
||||
T[4] = ROTR (F3 (T[3], T[6], T[7], T[0], T[1], T[2], T[5]), 7) + ROTR (T[4], 11) + W[12] + 0xBD314B27UL;
|
||||
T[3] = ROTR (F3 (T[2], T[5], T[6], T[7], T[0], T[1], T[4]), 7) + ROTR (T[3], 11) + W[24] + 0x78AF2FDAUL;
|
||||
T[2] = ROTR (F3 (T[1], T[4], T[5], T[6], T[7], T[0], T[3]), 7) + ROTR (T[2], 11) + W[30] + 0x55605C60UL;
|
||||
T[1] = ROTR (F3 (T[0], T[3], T[4], T[5], T[6], T[7], T[2]), 7) + ROTR (T[1], 11) + W[16] + 0xE65525F3UL;
|
||||
T[0] = ROTR (F3 (T[7], T[2], T[3], T[4], T[5], T[6], T[1]), 7) + ROTR (T[0], 11) + W[26] + 0xAA55AB94UL;
|
||||
|
||||
T[7] = ROTR (F3 (T[6], T[1], T[2], T[3], T[4], T[5], T[0]), 7) + ROTR (T[7], 11) + W[31] + 0x57489862UL;
|
||||
T[6] = ROTR (F3 (T[5], T[0], T[1], T[2], T[3], T[4], T[7]), 7) + ROTR (T[6], 11) + W[15] + 0x63E81440UL;
|
||||
T[5] = ROTR (F3 (T[4], T[7], T[0], T[1], T[2], T[3], T[6]), 7) + ROTR (T[5], 11) + W[ 7] + 0x55CA396AUL;
|
||||
T[4] = ROTR (F3 (T[3], T[6], T[7], T[0], T[1], T[2], T[5]), 7) + ROTR (T[4], 11) + W[ 3] + 0x2AAB10B6UL;
|
||||
T[3] = ROTR (F3 (T[2], T[5], T[6], T[7], T[0], T[1], T[4]), 7) + ROTR (T[3], 11) + W[ 1] + 0xB4CC5C34UL;
|
||||
T[2] = ROTR (F3 (T[1], T[4], T[5], T[6], T[7], T[0], T[3]), 7) + ROTR (T[2], 11) + W[ 0] + 0x1141E8CEUL;
|
||||
T[1] = ROTR (F3 (T[0], T[3], T[4], T[5], T[6], T[7], T[2]), 7) + ROTR (T[1], 11) + W[18] + 0xA15486AFUL;
|
||||
T[0] = ROTR (F3 (T[7], T[2], T[3], T[4], T[5], T[6], T[1]), 7) + ROTR (T[0], 11) + W[27] + 0x7C72E993UL;
|
||||
|
||||
E[7] += T[7] = ROTR (F3 (T[6], T[1], T[2], T[3], T[4], T[5], T[0]), 7) + ROTR (T[7], 11) + W[13] + 0xB3EE1411UL;
|
||||
E[6] += T[6] = ROTR (F3 (T[5], T[0], T[1], T[2], T[3], T[4], T[7]), 7) + ROTR (T[6], 11) + W[ 6] + 0x636FBC2AUL;
|
||||
E[5] += T[5] = ROTR (F3 (T[4], T[7], T[0], T[1], T[2], T[3], T[6]), 7) + ROTR (T[5], 11) + W[21] + 0x2BA9C55DUL;
|
||||
E[4] += T[4] = ROTR (F3 (T[3], T[6], T[7], T[0], T[1], T[2], T[5]), 7) + ROTR (T[4], 11) + W[10] + 0x741831F6UL;
|
||||
E[3] += T[3] = ROTR (F3 (T[2], T[5], T[6], T[7], T[0], T[1], T[4]), 7) + ROTR (T[3], 11) + W[23] + 0xCE5C3E16UL;
|
||||
E[2] += T[2] = ROTR (F3 (T[1], T[4], T[5], T[6], T[7], T[0], T[3]), 7) + ROTR (T[2], 11) + W[11] + 0x9B87931EUL;
|
||||
E[1] += T[1] = ROTR (F3 (T[0], T[3], T[4], T[5], T[6], T[7], T[2]), 7) + ROTR (T[1], 11) + W[ 5] + 0xAFD6BA33UL;
|
||||
E[0] += T[0] = ROTR (F3 (T[7], T[2], T[3], T[4], T[5], T[6], T[1]), 7) + ROTR (T[0], 11) + W[ 2] + 0x6C24CF5CUL;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_free(W);
|
||||
#endif
|
||||
} /* havalTransform3 */
|
||||
|
||||
|
||||
static void havalTransform4 (mutils_word32 E[8], __const mutils_word32 D[32], mutils_word32 T[8])
|
||||
{
|
||||
mutils_word32 *W;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
W = mutils_word32nswap(D, 32, MUTILS_FALSE);
|
||||
#else /* LITTLE ENDIAN */
|
||||
W = (mutils_word32 *) D;
|
||||
#endif /* Byte re-ordering */
|
||||
|
||||
/* PASS 1: */
|
||||
|
||||
T[7] = ROTR (F1 (E[2], E[6], E[1], E[4], E[5], E[3], E[0]), 7) + ROTR (E[7], 11) + W[ 0];
|
||||
T[6] = ROTR (F1 (E[1], E[5], E[0], E[3], E[4], E[2], T[7]), 7) + ROTR (E[6], 11) + W[ 1];
|
||||
T[5] = ROTR (F1 (E[0], E[4], T[7], E[2], E[3], E[1], T[6]), 7) + ROTR (E[5], 11) + W[ 2];
|
||||
T[4] = ROTR (F1 (T[7], E[3], T[6], E[1], E[2], E[0], T[5]), 7) + ROTR (E[4], 11) + W[ 3];
|
||||
T[3] = ROTR (F1 (T[6], E[2], T[5], E[0], E[1], T[7], T[4]), 7) + ROTR (E[3], 11) + W[ 4];
|
||||
T[2] = ROTR (F1 (T[5], E[1], T[4], T[7], E[0], T[6], T[3]), 7) + ROTR (E[2], 11) + W[ 5];
|
||||
T[1] = ROTR (F1 (T[4], E[0], T[3], T[6], T[7], T[5], T[2]), 7) + ROTR (E[1], 11) + W[ 6];
|
||||
T[0] = ROTR (F1 (T[3], T[7], T[2], T[5], T[6], T[4], T[1]), 7) + ROTR (E[0], 11) + W[ 7];
|
||||
|
||||
T[7] = ROTR (F1 (T[2], T[6], T[1], T[4], T[5], T[3], T[0]), 7) + ROTR (T[7], 11) + W[ 8];
|
||||
T[6] = ROTR (F1 (T[1], T[5], T[0], T[3], T[4], T[2], T[7]), 7) + ROTR (T[6], 11) + W[ 9];
|
||||
T[5] = ROTR (F1 (T[0], T[4], T[7], T[2], T[3], T[1], T[6]), 7) + ROTR (T[5], 11) + W[10];
|
||||
T[4] = ROTR (F1 (T[7], T[3], T[6], T[1], T[2], T[0], T[5]), 7) + ROTR (T[4], 11) + W[11];
|
||||
T[3] = ROTR (F1 (T[6], T[2], T[5], T[0], T[1], T[7], T[4]), 7) + ROTR (T[3], 11) + W[12];
|
||||
T[2] = ROTR (F1 (T[5], T[1], T[4], T[7], T[0], T[6], T[3]), 7) + ROTR (T[2], 11) + W[13];
|
||||
T[1] = ROTR (F1 (T[4], T[0], T[3], T[6], T[7], T[5], T[2]), 7) + ROTR (T[1], 11) + W[14];
|
||||
T[0] = ROTR (F1 (T[3], T[7], T[2], T[5], T[6], T[4], T[1]), 7) + ROTR (T[0], 11) + W[15];
|
||||
|
||||
T[7] = ROTR (F1 (T[2], T[6], T[1], T[4], T[5], T[3], T[0]), 7) + ROTR (T[7], 11) + W[16];
|
||||
T[6] = ROTR (F1 (T[1], T[5], T[0], T[3], T[4], T[2], T[7]), 7) + ROTR (T[6], 11) + W[17];
|
||||
T[5] = ROTR (F1 (T[0], T[4], T[7], T[2], T[3], T[1], T[6]), 7) + ROTR (T[5], 11) + W[18];
|
||||
T[4] = ROTR (F1 (T[7], T[3], T[6], T[1], T[2], T[0], T[5]), 7) + ROTR (T[4], 11) + W[19];
|
||||
T[3] = ROTR (F1 (T[6], T[2], T[5], T[0], T[1], T[7], T[4]), 7) + ROTR (T[3], 11) + W[20];
|
||||
T[2] = ROTR (F1 (T[5], T[1], T[4], T[7], T[0], T[6], T[3]), 7) + ROTR (T[2], 11) + W[21];
|
||||
T[1] = ROTR (F1 (T[4], T[0], T[3], T[6], T[7], T[5], T[2]), 7) + ROTR (T[1], 11) + W[22];
|
||||
T[0] = ROTR (F1 (T[3], T[7], T[2], T[5], T[6], T[4], T[1]), 7) + ROTR (T[0], 11) + W[23];
|
||||
|
||||
T[7] = ROTR (F1 (T[2], T[6], T[1], T[4], T[5], T[3], T[0]), 7) + ROTR (T[7], 11) + W[24];
|
||||
T[6] = ROTR (F1 (T[1], T[5], T[0], T[3], T[4], T[2], T[7]), 7) + ROTR (T[6], 11) + W[25];
|
||||
T[5] = ROTR (F1 (T[0], T[4], T[7], T[2], T[3], T[1], T[6]), 7) + ROTR (T[5], 11) + W[26];
|
||||
T[4] = ROTR (F1 (T[7], T[3], T[6], T[1], T[2], T[0], T[5]), 7) + ROTR (T[4], 11) + W[27];
|
||||
T[3] = ROTR (F1 (T[6], T[2], T[5], T[0], T[1], T[7], T[4]), 7) + ROTR (T[3], 11) + W[28];
|
||||
T[2] = ROTR (F1 (T[5], T[1], T[4], T[7], T[0], T[6], T[3]), 7) + ROTR (T[2], 11) + W[29];
|
||||
T[1] = ROTR (F1 (T[4], T[0], T[3], T[6], T[7], T[5], T[2]), 7) + ROTR (T[1], 11) + W[30];
|
||||
T[0] = ROTR (F1 (T[3], T[7], T[2], T[5], T[6], T[4], T[1]), 7) + ROTR (T[0], 11) + W[31];
|
||||
|
||||
/* PASS 2: */
|
||||
|
||||
T[7] = ROTR (F2 (T[3], T[5], T[2], T[0], T[1], T[6], T[4]), 7) + ROTR (T[7], 11) + W[ 5] + 0x452821E6UL;
|
||||
T[6] = ROTR (F2 (T[2], T[4], T[1], T[7], T[0], T[5], T[3]), 7) + ROTR (T[6], 11) + W[14] + 0x38D01377UL;
|
||||
T[5] = ROTR (F2 (T[1], T[3], T[0], T[6], T[7], T[4], T[2]), 7) + ROTR (T[5], 11) + W[26] + 0xBE5466CFUL;
|
||||
T[4] = ROTR (F2 (T[0], T[2], T[7], T[5], T[6], T[3], T[1]), 7) + ROTR (T[4], 11) + W[18] + 0x34E90C6CUL;
|
||||
T[3] = ROTR (F2 (T[7], T[1], T[6], T[4], T[5], T[2], T[0]), 7) + ROTR (T[3], 11) + W[11] + 0xC0AC29B7UL;
|
||||
T[2] = ROTR (F2 (T[6], T[0], T[5], T[3], T[4], T[1], T[7]), 7) + ROTR (T[2], 11) + W[28] + 0xC97C50DDUL;
|
||||
T[1] = ROTR (F2 (T[5], T[7], T[4], T[2], T[3], T[0], T[6]), 7) + ROTR (T[1], 11) + W[ 7] + 0x3F84D5B5UL;
|
||||
T[0] = ROTR (F2 (T[4], T[6], T[3], T[1], T[2], T[7], T[5]), 7) + ROTR (T[0], 11) + W[16] + 0xB5470917UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[3], T[5], T[2], T[0], T[1], T[6], T[4]), 7) + ROTR (T[7], 11) + W[ 0] + 0x9216D5D9UL;
|
||||
T[6] = ROTR (F2 (T[2], T[4], T[1], T[7], T[0], T[5], T[3]), 7) + ROTR (T[6], 11) + W[23] + 0x8979FB1BUL;
|
||||
T[5] = ROTR (F2 (T[1], T[3], T[0], T[6], T[7], T[4], T[2]), 7) + ROTR (T[5], 11) + W[20] + 0xD1310BA6UL;
|
||||
T[4] = ROTR (F2 (T[0], T[2], T[7], T[5], T[6], T[3], T[1]), 7) + ROTR (T[4], 11) + W[22] + 0x98DFB5ACUL;
|
||||
T[3] = ROTR (F2 (T[7], T[1], T[6], T[4], T[5], T[2], T[0]), 7) + ROTR (T[3], 11) + W[ 1] + 0x2FFD72DBUL;
|
||||
T[2] = ROTR (F2 (T[6], T[0], T[5], T[3], T[4], T[1], T[7]), 7) + ROTR (T[2], 11) + W[10] + 0xD01ADFB7UL;
|
||||
T[1] = ROTR (F2 (T[5], T[7], T[4], T[2], T[3], T[0], T[6]), 7) + ROTR (T[1], 11) + W[ 4] + 0xB8E1AFEDUL;
|
||||
T[0] = ROTR (F2 (T[4], T[6], T[3], T[1], T[2], T[7], T[5]), 7) + ROTR (T[0], 11) + W[ 8] + 0x6A267E96UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[3], T[5], T[2], T[0], T[1], T[6], T[4]), 7) + ROTR (T[7], 11) + W[30] + 0xBA7C9045UL;
|
||||
T[6] = ROTR (F2 (T[2], T[4], T[1], T[7], T[0], T[5], T[3]), 7) + ROTR (T[6], 11) + W[ 3] + 0xF12C7F99UL;
|
||||
T[5] = ROTR (F2 (T[1], T[3], T[0], T[6], T[7], T[4], T[2]), 7) + ROTR (T[5], 11) + W[21] + 0x24A19947UL;
|
||||
T[4] = ROTR (F2 (T[0], T[2], T[7], T[5], T[6], T[3], T[1]), 7) + ROTR (T[4], 11) + W[ 9] + 0xB3916CF7UL;
|
||||
T[3] = ROTR (F2 (T[7], T[1], T[6], T[4], T[5], T[2], T[0]), 7) + ROTR (T[3], 11) + W[17] + 0x0801F2E2UL;
|
||||
T[2] = ROTR (F2 (T[6], T[0], T[5], T[3], T[4], T[1], T[7]), 7) + ROTR (T[2], 11) + W[24] + 0x858EFC16UL;
|
||||
T[1] = ROTR (F2 (T[5], T[7], T[4], T[2], T[3], T[0], T[6]), 7) + ROTR (T[1], 11) + W[29] + 0x636920D8UL;
|
||||
T[0] = ROTR (F2 (T[4], T[6], T[3], T[1], T[2], T[7], T[5]), 7) + ROTR (T[0], 11) + W[ 6] + 0x71574E69UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[3], T[5], T[2], T[0], T[1], T[6], T[4]), 7) + ROTR (T[7], 11) + W[19] + 0xA458FEA3UL;
|
||||
T[6] = ROTR (F2 (T[2], T[4], T[1], T[7], T[0], T[5], T[3]), 7) + ROTR (T[6], 11) + W[12] + 0xF4933D7EUL;
|
||||
T[5] = ROTR (F2 (T[1], T[3], T[0], T[6], T[7], T[4], T[2]), 7) + ROTR (T[5], 11) + W[15] + 0x0D95748FUL;
|
||||
T[4] = ROTR (F2 (T[0], T[2], T[7], T[5], T[6], T[3], T[1]), 7) + ROTR (T[4], 11) + W[13] + 0x728EB658UL;
|
||||
T[3] = ROTR (F2 (T[7], T[1], T[6], T[4], T[5], T[2], T[0]), 7) + ROTR (T[3], 11) + W[ 2] + 0x718BCD58UL;
|
||||
T[2] = ROTR (F2 (T[6], T[0], T[5], T[3], T[4], T[1], T[7]), 7) + ROTR (T[2], 11) + W[25] + 0x82154AEEUL;
|
||||
T[1] = ROTR (F2 (T[5], T[7], T[4], T[2], T[3], T[0], T[6]), 7) + ROTR (T[1], 11) + W[31] + 0x7B54A41DUL;
|
||||
T[0] = ROTR (F2 (T[4], T[6], T[3], T[1], T[2], T[7], T[5]), 7) + ROTR (T[0], 11) + W[27] + 0xC25A59B5UL;
|
||||
|
||||
/* PASS 3: */
|
||||
|
||||
T[7] = ROTR (F3 (T[1], T[4], T[3], T[6], T[0], T[2], T[5]), 7) + ROTR (T[7], 11) + W[19] + 0x9C30D539UL;
|
||||
T[6] = ROTR (F3 (T[0], T[3], T[2], T[5], T[7], T[1], T[4]), 7) + ROTR (T[6], 11) + W[ 9] + 0x2AF26013UL;
|
||||
T[5] = ROTR (F3 (T[7], T[2], T[1], T[4], T[6], T[0], T[3]), 7) + ROTR (T[5], 11) + W[ 4] + 0xC5D1B023UL;
|
||||
T[4] = ROTR (F3 (T[6], T[1], T[0], T[3], T[5], T[7], T[2]), 7) + ROTR (T[4], 11) + W[20] + 0x286085F0UL;
|
||||
T[3] = ROTR (F3 (T[5], T[0], T[7], T[2], T[4], T[6], T[1]), 7) + ROTR (T[3], 11) + W[28] + 0xCA417918UL;
|
||||
T[2] = ROTR (F3 (T[4], T[7], T[6], T[1], T[3], T[5], T[0]), 7) + ROTR (T[2], 11) + W[17] + 0xB8DB38EFUL;
|
||||
T[1] = ROTR (F3 (T[3], T[6], T[5], T[0], T[2], T[4], T[7]), 7) + ROTR (T[1], 11) + W[ 8] + 0x8E79DCB0UL;
|
||||
T[0] = ROTR (F3 (T[2], T[5], T[4], T[7], T[1], T[3], T[6]), 7) + ROTR (T[0], 11) + W[22] + 0x603A180EUL;
|
||||
|
||||
T[7] = ROTR (F3 (T[1], T[4], T[3], T[6], T[0], T[2], T[5]), 7) + ROTR (T[7], 11) + W[29] + 0x6C9E0E8BUL;
|
||||
T[6] = ROTR (F3 (T[0], T[3], T[2], T[5], T[7], T[1], T[4]), 7) + ROTR (T[6], 11) + W[14] + 0xB01E8A3EUL;
|
||||
T[5] = ROTR (F3 (T[7], T[2], T[1], T[4], T[6], T[0], T[3]), 7) + ROTR (T[5], 11) + W[25] + 0xD71577C1UL;
|
||||
T[4] = ROTR (F3 (T[6], T[1], T[0], T[3], T[5], T[7], T[2]), 7) + ROTR (T[4], 11) + W[12] + 0xBD314B27UL;
|
||||
T[3] = ROTR (F3 (T[5], T[0], T[7], T[2], T[4], T[6], T[1]), 7) + ROTR (T[3], 11) + W[24] + 0x78AF2FDAUL;
|
||||
T[2] = ROTR (F3 (T[4], T[7], T[6], T[1], T[3], T[5], T[0]), 7) + ROTR (T[2], 11) + W[30] + 0x55605C60UL;
|
||||
T[1] = ROTR (F3 (T[3], T[6], T[5], T[0], T[2], T[4], T[7]), 7) + ROTR (T[1], 11) + W[16] + 0xE65525F3UL;
|
||||
T[0] = ROTR (F3 (T[2], T[5], T[4], T[7], T[1], T[3], T[6]), 7) + ROTR (T[0], 11) + W[26] + 0xAA55AB94UL;
|
||||
|
||||
T[7] = ROTR (F3 (T[1], T[4], T[3], T[6], T[0], T[2], T[5]), 7) + ROTR (T[7], 11) + W[31] + 0x57489862UL;
|
||||
T[6] = ROTR (F3 (T[0], T[3], T[2], T[5], T[7], T[1], T[4]), 7) + ROTR (T[6], 11) + W[15] + 0x63E81440UL;
|
||||
T[5] = ROTR (F3 (T[7], T[2], T[1], T[4], T[6], T[0], T[3]), 7) + ROTR (T[5], 11) + W[ 7] + 0x55CA396AUL;
|
||||
T[4] = ROTR (F3 (T[6], T[1], T[0], T[3], T[5], T[7], T[2]), 7) + ROTR (T[4], 11) + W[ 3] + 0x2AAB10B6UL;
|
||||
T[3] = ROTR (F3 (T[5], T[0], T[7], T[2], T[4], T[6], T[1]), 7) + ROTR (T[3], 11) + W[ 1] + 0xB4CC5C34UL;
|
||||
T[2] = ROTR (F3 (T[4], T[7], T[6], T[1], T[3], T[5], T[0]), 7) + ROTR (T[2], 11) + W[ 0] + 0x1141E8CEUL;
|
||||
T[1] = ROTR (F3 (T[3], T[6], T[5], T[0], T[2], T[4], T[7]), 7) + ROTR (T[1], 11) + W[18] + 0xA15486AFUL;
|
||||
T[0] = ROTR (F3 (T[2], T[5], T[4], T[7], T[1], T[3], T[6]), 7) + ROTR (T[0], 11) + W[27] + 0x7C72E993UL;
|
||||
|
||||
T[7] = ROTR (F3 (T[1], T[4], T[3], T[6], T[0], T[2], T[5]), 7) + ROTR (T[7], 11) + W[13] + 0xB3EE1411UL;
|
||||
T[6] = ROTR (F3 (T[0], T[3], T[2], T[5], T[7], T[1], T[4]), 7) + ROTR (T[6], 11) + W[ 6] + 0x636FBC2AUL;
|
||||
T[5] = ROTR (F3 (T[7], T[2], T[1], T[4], T[6], T[0], T[3]), 7) + ROTR (T[5], 11) + W[21] + 0x2BA9C55DUL;
|
||||
T[4] = ROTR (F3 (T[6], T[1], T[0], T[3], T[5], T[7], T[2]), 7) + ROTR (T[4], 11) + W[10] + 0x741831F6UL;
|
||||
T[3] = ROTR (F3 (T[5], T[0], T[7], T[2], T[4], T[6], T[1]), 7) + ROTR (T[3], 11) + W[23] + 0xCE5C3E16UL;
|
||||
T[2] = ROTR (F3 (T[4], T[7], T[6], T[1], T[3], T[5], T[0]), 7) + ROTR (T[2], 11) + W[11] + 0x9B87931EUL;
|
||||
T[1] = ROTR (F3 (T[3], T[6], T[5], T[0], T[2], T[4], T[7]), 7) + ROTR (T[1], 11) + W[ 5] + 0xAFD6BA33UL;
|
||||
T[0] = ROTR (F3 (T[2], T[5], T[4], T[7], T[1], T[3], T[6]), 7) + ROTR (T[0], 11) + W[ 2] + 0x6C24CF5CUL;
|
||||
|
||||
/* PASS 4: */
|
||||
|
||||
T[7] = ROTR (F4 (T[6], T[4], T[0], T[5], T[2], T[1], T[3]), 7) + ROTR (T[7], 11) + W[24] + 0x7A325381UL;
|
||||
T[6] = ROTR (F4 (T[5], T[3], T[7], T[4], T[1], T[0], T[2]), 7) + ROTR (T[6], 11) + W[ 4] + 0x28958677UL;
|
||||
T[5] = ROTR (F4 (T[4], T[2], T[6], T[3], T[0], T[7], T[1]), 7) + ROTR (T[5], 11) + W[ 0] + 0x3B8F4898UL;
|
||||
T[4] = ROTR (F4 (T[3], T[1], T[5], T[2], T[7], T[6], T[0]), 7) + ROTR (T[4], 11) + W[14] + 0x6B4BB9AFUL;
|
||||
T[3] = ROTR (F4 (T[2], T[0], T[4], T[1], T[6], T[5], T[7]), 7) + ROTR (T[3], 11) + W[ 2] + 0xC4BFE81BUL;
|
||||
T[2] = ROTR (F4 (T[1], T[7], T[3], T[0], T[5], T[4], T[6]), 7) + ROTR (T[2], 11) + W[ 7] + 0x66282193UL;
|
||||
T[1] = ROTR (F4 (T[0], T[6], T[2], T[7], T[4], T[3], T[5]), 7) + ROTR (T[1], 11) + W[28] + 0x61D809CCUL;
|
||||
T[0] = ROTR (F4 (T[7], T[5], T[1], T[6], T[3], T[2], T[4]), 7) + ROTR (T[0], 11) + W[23] + 0xFB21A991UL;
|
||||
|
||||
T[7] = ROTR (F4 (T[6], T[4], T[0], T[5], T[2], T[1], T[3]), 7) + ROTR (T[7], 11) + W[26] + 0x487CAC60UL;
|
||||
T[6] = ROTR (F4 (T[5], T[3], T[7], T[4], T[1], T[0], T[2]), 7) + ROTR (T[6], 11) + W[ 6] + 0x5DEC8032UL;
|
||||
T[5] = ROTR (F4 (T[4], T[2], T[6], T[3], T[0], T[7], T[1]), 7) + ROTR (T[5], 11) + W[30] + 0xEF845D5DUL;
|
||||
T[4] = ROTR (F4 (T[3], T[1], T[5], T[2], T[7], T[6], T[0]), 7) + ROTR (T[4], 11) + W[20] + 0xE98575B1UL;
|
||||
T[3] = ROTR (F4 (T[2], T[0], T[4], T[1], T[6], T[5], T[7]), 7) + ROTR (T[3], 11) + W[18] + 0xDC262302UL;
|
||||
T[2] = ROTR (F4 (T[1], T[7], T[3], T[0], T[5], T[4], T[6]), 7) + ROTR (T[2], 11) + W[25] + 0xEB651B88UL;
|
||||
T[1] = ROTR (F4 (T[0], T[6], T[2], T[7], T[4], T[3], T[5]), 7) + ROTR (T[1], 11) + W[19] + 0x23893E81UL;
|
||||
T[0] = ROTR (F4 (T[7], T[5], T[1], T[6], T[3], T[2], T[4]), 7) + ROTR (T[0], 11) + W[ 3] + 0xD396ACC5UL;
|
||||
|
||||
T[7] = ROTR (F4 (T[6], T[4], T[0], T[5], T[2], T[1], T[3]), 7) + ROTR (T[7], 11) + W[22] + 0x0F6D6FF3UL;
|
||||
T[6] = ROTR (F4 (T[5], T[3], T[7], T[4], T[1], T[0], T[2]), 7) + ROTR (T[6], 11) + W[11] + 0x83F44239UL;
|
||||
T[5] = ROTR (F4 (T[4], T[2], T[6], T[3], T[0], T[7], T[1]), 7) + ROTR (T[5], 11) + W[31] + 0x2E0B4482UL;
|
||||
T[4] = ROTR (F4 (T[3], T[1], T[5], T[2], T[7], T[6], T[0]), 7) + ROTR (T[4], 11) + W[21] + 0xA4842004UL;
|
||||
T[3] = ROTR (F4 (T[2], T[0], T[4], T[1], T[6], T[5], T[7]), 7) + ROTR (T[3], 11) + W[ 8] + 0x69C8F04AUL;
|
||||
T[2] = ROTR (F4 (T[1], T[7], T[3], T[0], T[5], T[4], T[6]), 7) + ROTR (T[2], 11) + W[27] + 0x9E1F9B5EUL;
|
||||
T[1] = ROTR (F4 (T[0], T[6], T[2], T[7], T[4], T[3], T[5]), 7) + ROTR (T[1], 11) + W[12] + 0x21C66842UL;
|
||||
T[0] = ROTR (F4 (T[7], T[5], T[1], T[6], T[3], T[2], T[4]), 7) + ROTR (T[0], 11) + W[ 9] + 0xF6E96C9AUL;
|
||||
|
||||
E[7] += T[7] = ROTR (F4 (T[6], T[4], T[0], T[5], T[2], T[1], T[3]), 7) + ROTR (T[7], 11) + W[ 1] + 0x670C9C61UL;
|
||||
E[6] += T[6] = ROTR (F4 (T[5], T[3], T[7], T[4], T[1], T[0], T[2]), 7) + ROTR (T[6], 11) + W[29] + 0xABD388F0UL;
|
||||
E[5] += T[5] = ROTR (F4 (T[4], T[2], T[6], T[3], T[0], T[7], T[1]), 7) + ROTR (T[5], 11) + W[ 5] + 0x6A51A0D2UL;
|
||||
E[4] += T[4] = ROTR (F4 (T[3], T[1], T[5], T[2], T[7], T[6], T[0]), 7) + ROTR (T[4], 11) + W[15] + 0xD8542F68UL;
|
||||
E[3] += T[3] = ROTR (F4 (T[2], T[0], T[4], T[1], T[6], T[5], T[7]), 7) + ROTR (T[3], 11) + W[17] + 0x960FA728UL;
|
||||
E[2] += T[2] = ROTR (F4 (T[1], T[7], T[3], T[0], T[5], T[4], T[6]), 7) + ROTR (T[2], 11) + W[10] + 0xAB5133A3UL;
|
||||
E[1] += T[1] = ROTR (F4 (T[0], T[6], T[2], T[7], T[4], T[3], T[5]), 7) + ROTR (T[1], 11) + W[16] + 0x6EEF0B6CUL;
|
||||
E[0] += T[0] = ROTR (F4 (T[7], T[5], T[1], T[6], T[3], T[2], T[4]), 7) + ROTR (T[0], 11) + W[13] + 0x137A3BE4UL;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_free(W);
|
||||
#endif
|
||||
} /* havalTransform4 */
|
||||
|
||||
|
||||
static void havalTransform5 (mutils_word32 E[8], __const mutils_word32 D[32], mutils_word32 T[8])
|
||||
{
|
||||
mutils_word32 *W;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
W = mutils_word32nswap(D, 32, MUTILS_FALSE);
|
||||
#else /* LITTLE ENDIAN */
|
||||
W = (mutils_word32 *) D;
|
||||
#endif /* Byte re-ordering */
|
||||
|
||||
/* PASS 1: */
|
||||
|
||||
T[7] = ROTR (F1 (E[3], E[4], E[1], E[0], E[5], E[2], E[6]), 7) + ROTR (E[7], 11) + W[ 0];
|
||||
T[6] = ROTR (F1 (E[2], E[3], E[0], T[7], E[4], E[1], E[5]), 7) + ROTR (E[6], 11) + W[ 1];
|
||||
T[5] = ROTR (F1 (E[1], E[2], T[7], T[6], E[3], E[0], E[4]), 7) + ROTR (E[5], 11) + W[ 2];
|
||||
T[4] = ROTR (F1 (E[0], E[1], T[6], T[5], E[2], T[7], E[3]), 7) + ROTR (E[4], 11) + W[ 3];
|
||||
T[3] = ROTR (F1 (T[7], E[0], T[5], T[4], E[1], T[6], E[2]), 7) + ROTR (E[3], 11) + W[ 4];
|
||||
T[2] = ROTR (F1 (T[6], T[7], T[4], T[3], E[0], T[5], E[1]), 7) + ROTR (E[2], 11) + W[ 5];
|
||||
T[1] = ROTR (F1 (T[5], T[6], T[3], T[2], T[7], T[4], E[0]), 7) + ROTR (E[1], 11) + W[ 6];
|
||||
T[0] = ROTR (F1 (T[4], T[5], T[2], T[1], T[6], T[3], T[7]), 7) + ROTR (E[0], 11) + W[ 7];
|
||||
|
||||
T[7] = ROTR (F1 (T[3], T[4], T[1], T[0], T[5], T[2], T[6]), 7) + ROTR (T[7], 11) + W[ 8];
|
||||
T[6] = ROTR (F1 (T[2], T[3], T[0], T[7], T[4], T[1], T[5]), 7) + ROTR (T[6], 11) + W[ 9];
|
||||
T[5] = ROTR (F1 (T[1], T[2], T[7], T[6], T[3], T[0], T[4]), 7) + ROTR (T[5], 11) + W[10];
|
||||
T[4] = ROTR (F1 (T[0], T[1], T[6], T[5], T[2], T[7], T[3]), 7) + ROTR (T[4], 11) + W[11];
|
||||
T[3] = ROTR (F1 (T[7], T[0], T[5], T[4], T[1], T[6], T[2]), 7) + ROTR (T[3], 11) + W[12];
|
||||
T[2] = ROTR (F1 (T[6], T[7], T[4], T[3], T[0], T[5], T[1]), 7) + ROTR (T[2], 11) + W[13];
|
||||
T[1] = ROTR (F1 (T[5], T[6], T[3], T[2], T[7], T[4], T[0]), 7) + ROTR (T[1], 11) + W[14];
|
||||
T[0] = ROTR (F1 (T[4], T[5], T[2], T[1], T[6], T[3], T[7]), 7) + ROTR (T[0], 11) + W[15];
|
||||
|
||||
T[7] = ROTR (F1 (T[3], T[4], T[1], T[0], T[5], T[2], T[6]), 7) + ROTR (T[7], 11) + W[16];
|
||||
T[6] = ROTR (F1 (T[2], T[3], T[0], T[7], T[4], T[1], T[5]), 7) + ROTR (T[6], 11) + W[17];
|
||||
T[5] = ROTR (F1 (T[1], T[2], T[7], T[6], T[3], T[0], T[4]), 7) + ROTR (T[5], 11) + W[18];
|
||||
T[4] = ROTR (F1 (T[0], T[1], T[6], T[5], T[2], T[7], T[3]), 7) + ROTR (T[4], 11) + W[19];
|
||||
T[3] = ROTR (F1 (T[7], T[0], T[5], T[4], T[1], T[6], T[2]), 7) + ROTR (T[3], 11) + W[20];
|
||||
T[2] = ROTR (F1 (T[6], T[7], T[4], T[3], T[0], T[5], T[1]), 7) + ROTR (T[2], 11) + W[21];
|
||||
T[1] = ROTR (F1 (T[5], T[6], T[3], T[2], T[7], T[4], T[0]), 7) + ROTR (T[1], 11) + W[22];
|
||||
T[0] = ROTR (F1 (T[4], T[5], T[2], T[1], T[6], T[3], T[7]), 7) + ROTR (T[0], 11) + W[23];
|
||||
|
||||
T[7] = ROTR (F1 (T[3], T[4], T[1], T[0], T[5], T[2], T[6]), 7) + ROTR (T[7], 11) + W[24];
|
||||
T[6] = ROTR (F1 (T[2], T[3], T[0], T[7], T[4], T[1], T[5]), 7) + ROTR (T[6], 11) + W[25];
|
||||
T[5] = ROTR (F1 (T[1], T[2], T[7], T[6], T[3], T[0], T[4]), 7) + ROTR (T[5], 11) + W[26];
|
||||
T[4] = ROTR (F1 (T[0], T[1], T[6], T[5], T[2], T[7], T[3]), 7) + ROTR (T[4], 11) + W[27];
|
||||
T[3] = ROTR (F1 (T[7], T[0], T[5], T[4], T[1], T[6], T[2]), 7) + ROTR (T[3], 11) + W[28];
|
||||
T[2] = ROTR (F1 (T[6], T[7], T[4], T[3], T[0], T[5], T[1]), 7) + ROTR (T[2], 11) + W[29];
|
||||
T[1] = ROTR (F1 (T[5], T[6], T[3], T[2], T[7], T[4], T[0]), 7) + ROTR (T[1], 11) + W[30];
|
||||
T[0] = ROTR (F1 (T[4], T[5], T[2], T[1], T[6], T[3], T[7]), 7) + ROTR (T[0], 11) + W[31];
|
||||
|
||||
/* PASS 2: */
|
||||
|
||||
T[7] = ROTR (F2 (T[6], T[2], T[1], T[0], T[3], T[4], T[5]), 7) + ROTR (T[7], 11) + W[ 5] + 0x452821E6UL;
|
||||
T[6] = ROTR (F2 (T[5], T[1], T[0], T[7], T[2], T[3], T[4]), 7) + ROTR (T[6], 11) + W[14] + 0x38D01377UL;
|
||||
T[5] = ROTR (F2 (T[4], T[0], T[7], T[6], T[1], T[2], T[3]), 7) + ROTR (T[5], 11) + W[26] + 0xBE5466CFUL;
|
||||
T[4] = ROTR (F2 (T[3], T[7], T[6], T[5], T[0], T[1], T[2]), 7) + ROTR (T[4], 11) + W[18] + 0x34E90C6CUL;
|
||||
T[3] = ROTR (F2 (T[2], T[6], T[5], T[4], T[7], T[0], T[1]), 7) + ROTR (T[3], 11) + W[11] + 0xC0AC29B7UL;
|
||||
T[2] = ROTR (F2 (T[1], T[5], T[4], T[3], T[6], T[7], T[0]), 7) + ROTR (T[2], 11) + W[28] + 0xC97C50DDUL;
|
||||
T[1] = ROTR (F2 (T[0], T[4], T[3], T[2], T[5], T[6], T[7]), 7) + ROTR (T[1], 11) + W[ 7] + 0x3F84D5B5UL;
|
||||
T[0] = ROTR (F2 (T[7], T[3], T[2], T[1], T[4], T[5], T[6]), 7) + ROTR (T[0], 11) + W[16] + 0xB5470917UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[6], T[2], T[1], T[0], T[3], T[4], T[5]), 7) + ROTR (T[7], 11) + W[ 0] + 0x9216D5D9UL;
|
||||
T[6] = ROTR (F2 (T[5], T[1], T[0], T[7], T[2], T[3], T[4]), 7) + ROTR (T[6], 11) + W[23] + 0x8979FB1BUL;
|
||||
T[5] = ROTR (F2 (T[4], T[0], T[7], T[6], T[1], T[2], T[3]), 7) + ROTR (T[5], 11) + W[20] + 0xD1310BA6UL;
|
||||
T[4] = ROTR (F2 (T[3], T[7], T[6], T[5], T[0], T[1], T[2]), 7) + ROTR (T[4], 11) + W[22] + 0x98DFB5ACUL;
|
||||
T[3] = ROTR (F2 (T[2], T[6], T[5], T[4], T[7], T[0], T[1]), 7) + ROTR (T[3], 11) + W[ 1] + 0x2FFD72DBUL;
|
||||
T[2] = ROTR (F2 (T[1], T[5], T[4], T[3], T[6], T[7], T[0]), 7) + ROTR (T[2], 11) + W[10] + 0xD01ADFB7UL;
|
||||
T[1] = ROTR (F2 (T[0], T[4], T[3], T[2], T[5], T[6], T[7]), 7) + ROTR (T[1], 11) + W[ 4] + 0xB8E1AFEDUL;
|
||||
T[0] = ROTR (F2 (T[7], T[3], T[2], T[1], T[4], T[5], T[6]), 7) + ROTR (T[0], 11) + W[ 8] + 0x6A267E96UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[6], T[2], T[1], T[0], T[3], T[4], T[5]), 7) + ROTR (T[7], 11) + W[30] + 0xBA7C9045UL;
|
||||
T[6] = ROTR (F2 (T[5], T[1], T[0], T[7], T[2], T[3], T[4]), 7) + ROTR (T[6], 11) + W[ 3] + 0xF12C7F99UL;
|
||||
T[5] = ROTR (F2 (T[4], T[0], T[7], T[6], T[1], T[2], T[3]), 7) + ROTR (T[5], 11) + W[21] + 0x24A19947UL;
|
||||
T[4] = ROTR (F2 (T[3], T[7], T[6], T[5], T[0], T[1], T[2]), 7) + ROTR (T[4], 11) + W[ 9] + 0xB3916CF7UL;
|
||||
T[3] = ROTR (F2 (T[2], T[6], T[5], T[4], T[7], T[0], T[1]), 7) + ROTR (T[3], 11) + W[17] + 0x0801F2E2UL;
|
||||
T[2] = ROTR (F2 (T[1], T[5], T[4], T[3], T[6], T[7], T[0]), 7) + ROTR (T[2], 11) + W[24] + 0x858EFC16UL;
|
||||
T[1] = ROTR (F2 (T[0], T[4], T[3], T[2], T[5], T[6], T[7]), 7) + ROTR (T[1], 11) + W[29] + 0x636920D8UL;
|
||||
T[0] = ROTR (F2 (T[7], T[3], T[2], T[1], T[4], T[5], T[6]), 7) + ROTR (T[0], 11) + W[ 6] + 0x71574E69UL;
|
||||
|
||||
T[7] = ROTR (F2 (T[6], T[2], T[1], T[0], T[3], T[4], T[5]), 7) + ROTR (T[7], 11) + W[19] + 0xA458FEA3UL;
|
||||
T[6] = ROTR (F2 (T[5], T[1], T[0], T[7], T[2], T[3], T[4]), 7) + ROTR (T[6], 11) + W[12] + 0xF4933D7EUL;
|
||||
T[5] = ROTR (F2 (T[4], T[0], T[7], T[6], T[1], T[2], T[3]), 7) + ROTR (T[5], 11) + W[15] + 0x0D95748FUL;
|
||||
T[4] = ROTR (F2 (T[3], T[7], T[6], T[5], T[0], T[1], T[2]), 7) + ROTR (T[4], 11) + W[13] + 0x728EB658UL;
|
||||
T[3] = ROTR (F2 (T[2], T[6], T[5], T[4], T[7], T[0], T[1]), 7) + ROTR (T[3], 11) + W[ 2] + 0x718BCD58UL;
|
||||
T[2] = ROTR (F2 (T[1], T[5], T[4], T[3], T[6], T[7], T[0]), 7) + ROTR (T[2], 11) + W[25] + 0x82154AEEUL;
|
||||
T[1] = ROTR (F2 (T[0], T[4], T[3], T[2], T[5], T[6], T[7]), 7) + ROTR (T[1], 11) + W[31] + 0x7B54A41DUL;
|
||||
T[0] = ROTR (F2 (T[7], T[3], T[2], T[1], T[4], T[5], T[6]), 7) + ROTR (T[0], 11) + W[27] + 0xC25A59B5UL;
|
||||
|
||||
/* PASS 3: */
|
||||
|
||||
T[7] = ROTR (F3 (T[2], T[6], T[0], T[4], T[3], T[1], T[5]), 7) + ROTR (T[7], 11) + W[19] + 0x9C30D539UL;
|
||||
T[6] = ROTR (F3 (T[1], T[5], T[7], T[3], T[2], T[0], T[4]), 7) + ROTR (T[6], 11) + W[ 9] + 0x2AF26013UL;
|
||||
T[5] = ROTR (F3 (T[0], T[4], T[6], T[2], T[1], T[7], T[3]), 7) + ROTR (T[5], 11) + W[ 4] + 0xC5D1B023UL;
|
||||
T[4] = ROTR (F3 (T[7], T[3], T[5], T[1], T[0], T[6], T[2]), 7) + ROTR (T[4], 11) + W[20] + 0x286085F0UL;
|
||||
T[3] = ROTR (F3 (T[6], T[2], T[4], T[0], T[7], T[5], T[1]), 7) + ROTR (T[3], 11) + W[28] + 0xCA417918UL;
|
||||
T[2] = ROTR (F3 (T[5], T[1], T[3], T[7], T[6], T[4], T[0]), 7) + ROTR (T[2], 11) + W[17] + 0xB8DB38EFUL;
|
||||
T[1] = ROTR (F3 (T[4], T[0], T[2], T[6], T[5], T[3], T[7]), 7) + ROTR (T[1], 11) + W[ 8] + 0x8E79DCB0UL;
|
||||
T[0] = ROTR (F3 (T[3], T[7], T[1], T[5], T[4], T[2], T[6]), 7) + ROTR (T[0], 11) + W[22] + 0x603A180EUL;
|
||||
|
||||
T[7] = ROTR (F3 (T[2], T[6], T[0], T[4], T[3], T[1], T[5]), 7) + ROTR (T[7], 11) + W[29] + 0x6C9E0E8BUL;
|
||||
T[6] = ROTR (F3 (T[1], T[5], T[7], T[3], T[2], T[0], T[4]), 7) + ROTR (T[6], 11) + W[14] + 0xB01E8A3EUL;
|
||||
T[5] = ROTR (F3 (T[0], T[4], T[6], T[2], T[1], T[7], T[3]), 7) + ROTR (T[5], 11) + W[25] + 0xD71577C1UL;
|
||||
T[4] = ROTR (F3 (T[7], T[3], T[5], T[1], T[0], T[6], T[2]), 7) + ROTR (T[4], 11) + W[12] + 0xBD314B27UL;
|
||||
T[3] = ROTR (F3 (T[6], T[2], T[4], T[0], T[7], T[5], T[1]), 7) + ROTR (T[3], 11) + W[24] + 0x78AF2FDAUL;
|
||||
T[2] = ROTR (F3 (T[5], T[1], T[3], T[7], T[6], T[4], T[0]), 7) + ROTR (T[2], 11) + W[30] + 0x55605C60UL;
|
||||
T[1] = ROTR (F3 (T[4], T[0], T[2], T[6], T[5], T[3], T[7]), 7) + ROTR (T[1], 11) + W[16] + 0xE65525F3UL;
|
||||
T[0] = ROTR (F3 (T[3], T[7], T[1], T[5], T[4], T[2], T[6]), 7) + ROTR (T[0], 11) + W[26] + 0xAA55AB94UL;
|
||||
|
||||
T[7] = ROTR (F3 (T[2], T[6], T[0], T[4], T[3], T[1], T[5]), 7) + ROTR (T[7], 11) + W[31] + 0x57489862UL;
|
||||
T[6] = ROTR (F3 (T[1], T[5], T[7], T[3], T[2], T[0], T[4]), 7) + ROTR (T[6], 11) + W[15] + 0x63E81440UL;
|
||||
T[5] = ROTR (F3 (T[0], T[4], T[6], T[2], T[1], T[7], T[3]), 7) + ROTR (T[5], 11) + W[ 7] + 0x55CA396AUL;
|
||||
T[4] = ROTR (F3 (T[7], T[3], T[5], T[1], T[0], T[6], T[2]), 7) + ROTR (T[4], 11) + W[ 3] + 0x2AAB10B6UL;
|
||||
T[3] = ROTR (F3 (T[6], T[2], T[4], T[0], T[7], T[5], T[1]), 7) + ROTR (T[3], 11) + W[ 1] + 0xB4CC5C34UL;
|
||||
T[2] = ROTR (F3 (T[5], T[1], T[3], T[7], T[6], T[4], T[0]), 7) + ROTR (T[2], 11) + W[ 0] + 0x1141E8CEUL;
|
||||
T[1] = ROTR (F3 (T[4], T[0], T[2], T[6], T[5], T[3], T[7]), 7) + ROTR (T[1], 11) + W[18] + 0xA15486AFUL;
|
||||
T[0] = ROTR (F3 (T[3], T[7], T[1], T[5], T[4], T[2], T[6]), 7) + ROTR (T[0], 11) + W[27] + 0x7C72E993UL;
|
||||
|
||||
T[7] = ROTR (F3 (T[2], T[6], T[0], T[4], T[3], T[1], T[5]), 7) + ROTR (T[7], 11) + W[13] + 0xB3EE1411UL;
|
||||
T[6] = ROTR (F3 (T[1], T[5], T[7], T[3], T[2], T[0], T[4]), 7) + ROTR (T[6], 11) + W[ 6] + 0x636FBC2AUL;
|
||||
T[5] = ROTR (F3 (T[0], T[4], T[6], T[2], T[1], T[7], T[3]), 7) + ROTR (T[5], 11) + W[21] + 0x2BA9C55DUL;
|
||||
T[4] = ROTR (F3 (T[7], T[3], T[5], T[1], T[0], T[6], T[2]), 7) + ROTR (T[4], 11) + W[10] + 0x741831F6UL;
|
||||
T[3] = ROTR (F3 (T[6], T[2], T[4], T[0], T[7], T[5], T[1]), 7) + ROTR (T[3], 11) + W[23] + 0xCE5C3E16UL;
|
||||
T[2] = ROTR (F3 (T[5], T[1], T[3], T[7], T[6], T[4], T[0]), 7) + ROTR (T[2], 11) + W[11] + 0x9B87931EUL;
|
||||
T[1] = ROTR (F3 (T[4], T[0], T[2], T[6], T[5], T[3], T[7]), 7) + ROTR (T[1], 11) + W[ 5] + 0xAFD6BA33UL;
|
||||
T[0] = ROTR (F3 (T[3], T[7], T[1], T[5], T[4], T[2], T[6]), 7) + ROTR (T[0], 11) + W[ 2] + 0x6C24CF5CUL;
|
||||
|
||||
/* PASS 4: */
|
||||
|
||||
T[7] = ROTR (F4 (T[1], T[5], T[3], T[2], T[0], T[4], T[6]), 7) + ROTR (T[7], 11) + W[24] + 0x7A325381UL;
|
||||
T[6] = ROTR (F4 (T[0], T[4], T[2], T[1], T[7], T[3], T[5]), 7) + ROTR (T[6], 11) + W[ 4] + 0x28958677UL;
|
||||
T[5] = ROTR (F4 (T[7], T[3], T[1], T[0], T[6], T[2], T[4]), 7) + ROTR (T[5], 11) + W[ 0] + 0x3B8F4898UL;
|
||||
T[4] = ROTR (F4 (T[6], T[2], T[0], T[7], T[5], T[1], T[3]), 7) + ROTR (T[4], 11) + W[14] + 0x6B4BB9AFUL;
|
||||
T[3] = ROTR (F4 (T[5], T[1], T[7], T[6], T[4], T[0], T[2]), 7) + ROTR (T[3], 11) + W[ 2] + 0xC4BFE81BUL;
|
||||
T[2] = ROTR (F4 (T[4], T[0], T[6], T[5], T[3], T[7], T[1]), 7) + ROTR (T[2], 11) + W[ 7] + 0x66282193UL;
|
||||
T[1] = ROTR (F4 (T[3], T[7], T[5], T[4], T[2], T[6], T[0]), 7) + ROTR (T[1], 11) + W[28] + 0x61D809CCUL;
|
||||
T[0] = ROTR (F4 (T[2], T[6], T[4], T[3], T[1], T[5], T[7]), 7) + ROTR (T[0], 11) + W[23] + 0xFB21A991UL;
|
||||
|
||||
T[7] = ROTR (F4 (T[1], T[5], T[3], T[2], T[0], T[4], T[6]), 7) + ROTR (T[7], 11) + W[26] + 0x487CAC60UL;
|
||||
T[6] = ROTR (F4 (T[0], T[4], T[2], T[1], T[7], T[3], T[5]), 7) + ROTR (T[6], 11) + W[ 6] + 0x5DEC8032UL;
|
||||
T[5] = ROTR (F4 (T[7], T[3], T[1], T[0], T[6], T[2], T[4]), 7) + ROTR (T[5], 11) + W[30] + 0xEF845D5DUL;
|
||||
T[4] = ROTR (F4 (T[6], T[2], T[0], T[7], T[5], T[1], T[3]), 7) + ROTR (T[4], 11) + W[20] + 0xE98575B1UL;
|
||||
T[3] = ROTR (F4 (T[5], T[1], T[7], T[6], T[4], T[0], T[2]), 7) + ROTR (T[3], 11) + W[18] + 0xDC262302UL;
|
||||
T[2] = ROTR (F4 (T[4], T[0], T[6], T[5], T[3], T[7], T[1]), 7) + ROTR (T[2], 11) + W[25] + 0xEB651B88UL;
|
||||
T[1] = ROTR (F4 (T[3], T[7], T[5], T[4], T[2], T[6], T[0]), 7) + ROTR (T[1], 11) + W[19] + 0x23893E81UL;
|
||||
T[0] = ROTR (F4 (T[2], T[6], T[4], T[3], T[1], T[5], T[7]), 7) + ROTR (T[0], 11) + W[ 3] + 0xD396ACC5UL;
|
||||
|
||||
T[7] = ROTR (F4 (T[1], T[5], T[3], T[2], T[0], T[4], T[6]), 7) + ROTR (T[7], 11) + W[22] + 0x0F6D6FF3UL;
|
||||
T[6] = ROTR (F4 (T[0], T[4], T[2], T[1], T[7], T[3], T[5]), 7) + ROTR (T[6], 11) + W[11] + 0x83F44239UL;
|
||||
T[5] = ROTR (F4 (T[7], T[3], T[1], T[0], T[6], T[2], T[4]), 7) + ROTR (T[5], 11) + W[31] + 0x2E0B4482UL;
|
||||
T[4] = ROTR (F4 (T[6], T[2], T[0], T[7], T[5], T[1], T[3]), 7) + ROTR (T[4], 11) + W[21] + 0xA4842004UL;
|
||||
T[3] = ROTR (F4 (T[5], T[1], T[7], T[6], T[4], T[0], T[2]), 7) + ROTR (T[3], 11) + W[ 8] + 0x69C8F04AUL;
|
||||
T[2] = ROTR (F4 (T[4], T[0], T[6], T[5], T[3], T[7], T[1]), 7) + ROTR (T[2], 11) + W[27] + 0x9E1F9B5EUL;
|
||||
T[1] = ROTR (F4 (T[3], T[7], T[5], T[4], T[2], T[6], T[0]), 7) + ROTR (T[1], 11) + W[12] + 0x21C66842UL;
|
||||
T[0] = ROTR (F4 (T[2], T[6], T[4], T[3], T[1], T[5], T[7]), 7) + ROTR (T[0], 11) + W[ 9] + 0xF6E96C9AUL;
|
||||
|
||||
T[7] = ROTR (F4 (T[1], T[5], T[3], T[2], T[0], T[4], T[6]), 7) + ROTR (T[7], 11) + W[ 1] + 0x670C9C61UL;
|
||||
T[6] = ROTR (F4 (T[0], T[4], T[2], T[1], T[7], T[3], T[5]), 7) + ROTR (T[6], 11) + W[29] + 0xABD388F0UL;
|
||||
T[5] = ROTR (F4 (T[7], T[3], T[1], T[0], T[6], T[2], T[4]), 7) + ROTR (T[5], 11) + W[ 5] + 0x6A51A0D2UL;
|
||||
T[4] = ROTR (F4 (T[6], T[2], T[0], T[7], T[5], T[1], T[3]), 7) + ROTR (T[4], 11) + W[15] + 0xD8542F68UL;
|
||||
T[3] = ROTR (F4 (T[5], T[1], T[7], T[6], T[4], T[0], T[2]), 7) + ROTR (T[3], 11) + W[17] + 0x960FA728UL;
|
||||
T[2] = ROTR (F4 (T[4], T[0], T[6], T[5], T[3], T[7], T[1]), 7) + ROTR (T[2], 11) + W[10] + 0xAB5133A3UL;
|
||||
T[1] = ROTR (F4 (T[3], T[7], T[5], T[4], T[2], T[6], T[0]), 7) + ROTR (T[1], 11) + W[16] + 0x6EEF0B6CUL;
|
||||
T[0] = ROTR (F4 (T[2], T[6], T[4], T[3], T[1], T[5], T[7]), 7) + ROTR (T[0], 11) + W[13] + 0x137A3BE4UL;
|
||||
|
||||
/* PASS 5: */
|
||||
|
||||
T[7] = ROTR (F5 (T[2], T[5], T[0], T[6], T[4], T[3], T[1]), 7) + ROTR (T[7], 11) + W[27] + 0xBA3BF050UL;
|
||||
T[6] = ROTR (F5 (T[1], T[4], T[7], T[5], T[3], T[2], T[0]), 7) + ROTR (T[6], 11) + W[ 3] + 0x7EFB2A98UL;
|
||||
T[5] = ROTR (F5 (T[0], T[3], T[6], T[4], T[2], T[1], T[7]), 7) + ROTR (T[5], 11) + W[21] + 0xA1F1651DUL;
|
||||
T[4] = ROTR (F5 (T[7], T[2], T[5], T[3], T[1], T[0], T[6]), 7) + ROTR (T[4], 11) + W[26] + 0x39AF0176UL;
|
||||
T[3] = ROTR (F5 (T[6], T[1], T[4], T[2], T[0], T[7], T[5]), 7) + ROTR (T[3], 11) + W[17] + 0x66CA593EUL;
|
||||
T[2] = ROTR (F5 (T[5], T[0], T[3], T[1], T[7], T[6], T[4]), 7) + ROTR (T[2], 11) + W[11] + 0x82430E88UL;
|
||||
T[1] = ROTR (F5 (T[4], T[7], T[2], T[0], T[6], T[5], T[3]), 7) + ROTR (T[1], 11) + W[20] + 0x8CEE8619UL;
|
||||
T[0] = ROTR (F5 (T[3], T[6], T[1], T[7], T[5], T[4], T[2]), 7) + ROTR (T[0], 11) + W[29] + 0x456F9FB4UL;
|
||||
|
||||
T[7] = ROTR (F5 (T[2], T[5], T[0], T[6], T[4], T[3], T[1]), 7) + ROTR (T[7], 11) + W[19] + 0x7D84A5C3UL;
|
||||
T[6] = ROTR (F5 (T[1], T[4], T[7], T[5], T[3], T[2], T[0]), 7) + ROTR (T[6], 11) + W[ 0] + 0x3B8B5EBEUL;
|
||||
T[5] = ROTR (F5 (T[0], T[3], T[6], T[4], T[2], T[1], T[7]), 7) + ROTR (T[5], 11) + W[12] + 0xE06F75D8UL;
|
||||
T[4] = ROTR (F5 (T[7], T[2], T[5], T[3], T[1], T[0], T[6]), 7) + ROTR (T[4], 11) + W[ 7] + 0x85C12073UL;
|
||||
T[3] = ROTR (F5 (T[6], T[1], T[4], T[2], T[0], T[7], T[5]), 7) + ROTR (T[3], 11) + W[13] + 0x401A449FUL;
|
||||
T[2] = ROTR (F5 (T[5], T[0], T[3], T[1], T[7], T[6], T[4]), 7) + ROTR (T[2], 11) + W[ 8] + 0x56C16AA6UL;
|
||||
T[1] = ROTR (F5 (T[4], T[7], T[2], T[0], T[6], T[5], T[3]), 7) + ROTR (T[1], 11) + W[31] + 0x4ED3AA62UL;
|
||||
T[0] = ROTR (F5 (T[3], T[6], T[1], T[7], T[5], T[4], T[2]), 7) + ROTR (T[0], 11) + W[10] + 0x363F7706UL;
|
||||
|
||||
T[7] = ROTR (F5 (T[2], T[5], T[0], T[6], T[4], T[3], T[1]), 7) + ROTR (T[7], 11) + W[ 5] + 0x1BFEDF72UL;
|
||||
T[6] = ROTR (F5 (T[1], T[4], T[7], T[5], T[3], T[2], T[0]), 7) + ROTR (T[6], 11) + W[ 9] + 0x429B023DUL;
|
||||
T[5] = ROTR (F5 (T[0], T[3], T[6], T[4], T[2], T[1], T[7]), 7) + ROTR (T[5], 11) + W[14] + 0x37D0D724UL;
|
||||
T[4] = ROTR (F5 (T[7], T[2], T[5], T[3], T[1], T[0], T[6]), 7) + ROTR (T[4], 11) + W[30] + 0xD00A1248UL;
|
||||
T[3] = ROTR (F5 (T[6], T[1], T[4], T[2], T[0], T[7], T[5]), 7) + ROTR (T[3], 11) + W[18] + 0xDB0FEAD3UL;
|
||||
T[2] = ROTR (F5 (T[5], T[0], T[3], T[1], T[7], T[6], T[4]), 7) + ROTR (T[2], 11) + W[ 6] + 0x49F1C09BUL;
|
||||
T[1] = ROTR (F5 (T[4], T[7], T[2], T[0], T[6], T[5], T[3]), 7) + ROTR (T[1], 11) + W[28] + 0x075372C9UL;
|
||||
T[0] = ROTR (F5 (T[3], T[6], T[1], T[7], T[5], T[4], T[2]), 7) + ROTR (T[0], 11) + W[24] + 0x80991B7BUL;
|
||||
|
||||
E[7] += T[7] = ROTR (F5 (T[2], T[5], T[0], T[6], T[4], T[3], T[1]), 7) + ROTR (T[7], 11) + W[ 2] + 0x25D479D8UL;
|
||||
E[6] += T[6] = ROTR (F5 (T[1], T[4], T[7], T[5], T[3], T[2], T[0]), 7) + ROTR (T[6], 11) + W[23] + 0xF6E8DEF7UL;
|
||||
E[5] += T[5] = ROTR (F5 (T[0], T[3], T[6], T[4], T[2], T[1], T[7]), 7) + ROTR (T[5], 11) + W[16] + 0xE3FE501AUL;
|
||||
E[4] += T[4] = ROTR (F5 (T[7], T[2], T[5], T[3], T[1], T[0], T[6]), 7) + ROTR (T[4], 11) + W[22] + 0xB6794C3BUL;
|
||||
E[3] += T[3] = ROTR (F5 (T[6], T[1], T[4], T[2], T[0], T[7], T[5]), 7) + ROTR (T[3], 11) + W[ 4] + 0x976CE0BDUL;
|
||||
E[2] += T[2] = ROTR (F5 (T[5], T[0], T[3], T[1], T[7], T[6], T[4]), 7) + ROTR (T[2], 11) + W[ 1] + 0x04C006BAUL;
|
||||
E[1] += T[1] = ROTR (F5 (T[4], T[7], T[2], T[0], T[6], T[5], T[3]), 7) + ROTR (T[1], 11) + W[25] + 0xC1A94FB6UL;
|
||||
E[0] += T[0] = ROTR (F5 (T[3], T[6], T[1], T[7], T[5], T[4], T[2]), 7) + ROTR (T[0], 11) + W[15] + 0x409F60C4UL;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_free(W);
|
||||
#endif
|
||||
} /* havalTransform5 */
|
||||
|
||||
mutils_error havalInit256( havalContext *hcp) {
|
||||
return havalInit(hcp, 3, 256);
|
||||
}
|
||||
mutils_error havalInit224( havalContext *hcp) {
|
||||
return havalInit(hcp, 3, 224);
|
||||
}
|
||||
mutils_error havalInit192( havalContext *hcp) {
|
||||
return havalInit(hcp, 3, 192);
|
||||
}
|
||||
mutils_error havalInit160( havalContext *hcp) {
|
||||
return havalInit(hcp, 3, 160);
|
||||
}
|
||||
mutils_error havalInit128( havalContext *hcp) {
|
||||
return havalInit(hcp, 3, 128);
|
||||
}
|
||||
|
||||
mutils_error havalInit (havalContext *hcp, mutils_word32 passes, mutils_word32 hashLength)
|
||||
{
|
||||
if (hcp == NULL)
|
||||
{
|
||||
return(-MUTILS_INVALID_INPUT_BUFFER); /* bad context */
|
||||
}
|
||||
/* check number of passes: */
|
||||
if (passes != 3 && passes != 4 && passes != 5)
|
||||
{
|
||||
return(-MUTILS_INVALID_PASSES); /* invalid number of passes */
|
||||
}
|
||||
/* check hash length: */
|
||||
if (hashLength != 128 &&
|
||||
hashLength != 160 &&
|
||||
hashLength != 192 &&
|
||||
hashLength != 224 &&
|
||||
hashLength != 256)
|
||||
{
|
||||
return(-MUTILS_INVALID_SIZE); /* invalid hash length */
|
||||
}
|
||||
/* properly initialize HAVAL context: */
|
||||
mutils_bzero(hcp, sizeof (havalContext));
|
||||
hcp->passes = (mutils_word16) passes;
|
||||
hcp->hashLength = (mutils_word16) hashLength;
|
||||
hcp->digest[0] = 0x243F6A88UL;
|
||||
hcp->digest[1] = 0x85A308D3UL;
|
||||
hcp->digest[2] = 0x13198A2EUL;
|
||||
hcp->digest[3] = 0x03707344UL;
|
||||
hcp->digest[4] = 0xA4093822UL;
|
||||
hcp->digest[5] = 0x299F31D0UL;
|
||||
hcp->digest[6] = 0x082EFA98UL;
|
||||
hcp->digest[7] = 0xEC4E6C89UL;
|
||||
return(MUTILS_OK); /* OK */
|
||||
} /* havalInit */
|
||||
|
||||
|
||||
mutils_error havalUpdate (havalContext *hcp, __const mutils_word8 *dataBuffer, mutils_word32 dataLength)
|
||||
{
|
||||
if (hcp == NULL)
|
||||
{
|
||||
return(-MUTILS_INVALID_INPUT_BUFFER); /* bad context */
|
||||
}
|
||||
if (dataBuffer == NULL || dataLength == 0)
|
||||
{
|
||||
return(MUTILS_OK); /* nothing to do */
|
||||
}
|
||||
|
||||
/* update bit count: Extra parentheses for Borland C++ --Tines*/
|
||||
if ( ((mutils_word32)dataLength << 3) > (0xFFFFFFFFUL - hcp->bitCount[0]) )
|
||||
{
|
||||
hcp->bitCount[1]++;
|
||||
}
|
||||
hcp->bitCount[0] += (mutils_word32)dataLength << 3;
|
||||
|
||||
/* if the data buffer is not enough to complete */
|
||||
/* the context data block, just append it: */
|
||||
if (hcp->occupied + (mutils_word32)dataLength < 128)
|
||||
{ /* caveat: typecast avoids 16-bit overflow */
|
||||
mutils_memcpy (&hcp->block[hcp->occupied], dataBuffer, dataLength);
|
||||
hcp->occupied += dataLength;
|
||||
return(MUTILS_OK); /* delay processing */
|
||||
}
|
||||
|
||||
/* complete the context data block: */
|
||||
mutils_memcpy (&hcp->block[hcp->occupied], dataBuffer, 128 - hcp->occupied);
|
||||
dataBuffer += 128 - hcp->occupied;
|
||||
dataLength -= 128 - hcp->occupied;
|
||||
|
||||
switch (hcp->passes) {
|
||||
case 3:
|
||||
/* process the completed context data block: */
|
||||
havalTransform3 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
/* process data in chunks of 128 bytes: */
|
||||
while (dataLength >= 128)
|
||||
{
|
||||
havalTransform3 (hcp->digest, (mutils_word32 *) dataBuffer, hcp->temp);
|
||||
dataBuffer += 128;
|
||||
dataLength -= 128;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
/* process the completed context data block: */
|
||||
havalTransform4 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
/* process data in chunks of 128 bytes: */
|
||||
while (dataLength >= 128)
|
||||
{
|
||||
havalTransform4 (hcp->digest, (mutils_word32 *) dataBuffer, hcp->temp);
|
||||
dataBuffer += 128;
|
||||
dataLength -= 128;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
/* process the completed context data block: */
|
||||
havalTransform5 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
/* process data in chunks of 128 bytes: */
|
||||
while (dataLength >= 128)
|
||||
{
|
||||
havalTransform5 (hcp->digest, (mutils_word32 *) dataBuffer, hcp->temp);
|
||||
dataBuffer += 128;
|
||||
dataLength -= 128;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* delay processing of remaining data: */
|
||||
mutils_memcpy (hcp->block, dataBuffer, dataLength);
|
||||
hcp->occupied = dataLength; /* < 128 */
|
||||
|
||||
return(MUTILS_OK); /* OK */
|
||||
} /* havalUpdate */
|
||||
|
||||
mutils_error havalFinal (havalContext *hcp, mutils_word8 *digest)
|
||||
{
|
||||
mutils_word32 w;
|
||||
|
||||
if (hcp == NULL)
|
||||
{
|
||||
return(-MUTILS_INVALID_INPUT_BUFFER); /* bad context */
|
||||
}
|
||||
if (digest == NULL)
|
||||
{
|
||||
return(-MUTILS_INVALID_OUTPUT_BUFFER); /* bad digest buffer */
|
||||
}
|
||||
|
||||
/* assert (hcp->occupied < 128); invariant */
|
||||
|
||||
/* append toggle to the context data block: */
|
||||
hcp->block[hcp->occupied] = 0x01; /* corrected from 0x80 */
|
||||
|
||||
/* pad the message with null bytes to make it 944 (mod 1024) bits long: */
|
||||
if (hcp->occupied++ >= 118)
|
||||
{
|
||||
/* no room for tail data on the current context block */
|
||||
mutils_bzero (&hcp->block[hcp->occupied], 128 - hcp->occupied);
|
||||
/* process the completed context data block: */
|
||||
switch (hcp->passes) {
|
||||
case 3:
|
||||
havalTransform3 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
break;
|
||||
case 4:
|
||||
havalTransform4 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
break;
|
||||
case 5:
|
||||
havalTransform5 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
break;
|
||||
}
|
||||
mutils_bzero (hcp->block, 118);
|
||||
}
|
||||
else
|
||||
{
|
||||
mutils_bzero (&hcp->block[hcp->occupied], 118 - hcp->occupied);
|
||||
}
|
||||
/* append tail data and process last (padded) message block: */
|
||||
hcp->block[118] = (mutils_word8)(
|
||||
((hcp->hashLength & 0x03U) << 6) |
|
||||
((hcp->passes & 0x07U) << 3) |
|
||||
(HAVAL_VERSION & 0x07U));
|
||||
hcp->block[119] = (mutils_word8) (hcp->hashLength >> 2);
|
||||
w = hcp->bitCount[0];
|
||||
hcp->block[120] = (mutils_word8)(w);
|
||||
hcp->block[121] = (mutils_word8)(w >> 8);
|
||||
hcp->block[122] = (mutils_word8)(w >> 16);
|
||||
hcp->block[123] = (mutils_word8)(w >> 24);
|
||||
w = hcp->bitCount[1];
|
||||
hcp->block[124] = (mutils_word8)(w);
|
||||
hcp->block[125] = (mutils_word8)(w >> 8);
|
||||
hcp->block[126] = (mutils_word8)(w >> 16);
|
||||
hcp->block[127] = (mutils_word8)(w >> 24);
|
||||
switch (hcp->passes)
|
||||
{
|
||||
case 3:
|
||||
havalTransform3 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
break;
|
||||
case 4:
|
||||
havalTransform4 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
break;
|
||||
case 5:
|
||||
havalTransform5 (hcp->digest, (mutils_word32 *) (hcp->block), hcp->temp);
|
||||
break;
|
||||
}
|
||||
|
||||
/* fold 256-bit digest to fit the desired hash length (blaargh!): */
|
||||
/* Byte reverse each 32-bit section while outputting if big-endian -- Tines*/
|
||||
switch (hcp->hashLength)
|
||||
{
|
||||
case 128:
|
||||
hcp->digest[3] +=
|
||||
( (hcp->digest[7] & 0xFF000000UL)
|
||||
| (hcp->digest[6] & 0x00FF0000UL)
|
||||
| (hcp->digest[5] & 0x0000FF00UL)
|
||||
| (hcp->digest[4] & 0x000000FFUL)
|
||||
);
|
||||
hcp->digest[2] +=
|
||||
(((hcp->digest[7] & 0x00FF0000UL)
|
||||
| (hcp->digest[6] & 0x0000FF00UL)
|
||||
| (hcp->digest[5] & 0x000000FFUL)
|
||||
) << 8) |
|
||||
( (hcp->digest[4] & 0xFF000000UL) >> 24);
|
||||
hcp->digest[1] +=
|
||||
(((hcp->digest[7] & 0x0000FF00UL)
|
||||
| (hcp->digest[6] & 0x000000FFUL)) << 16) |
|
||||
(((hcp->digest[5] & 0xFF000000UL)
|
||||
| (hcp->digest[4] & 0x00FF0000UL)) >> 16);
|
||||
hcp->digest[0] +=
|
||||
(((hcp->digest[6] & 0xFF000000UL)
|
||||
| (hcp->digest[5] & 0x00FF0000UL)
|
||||
| (hcp->digest[4] & 0x0000FF00UL)
|
||||
) >> 8) |
|
||||
( (hcp->digest[7] & 0x000000FFUL) << 24);
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_word32nswap((mutils_word32 *) (hcp->digest), 128/32, MUTILS_TRUE);
|
||||
#endif
|
||||
mutils_memcpy(digest, hcp->digest, 128/8);
|
||||
break;
|
||||
case 160:
|
||||
hcp->digest[4] +=
|
||||
((hcp->digest[7] & 0xFE000000UL) | (hcp->digest[6] & 0x01F80000UL) | (hcp->digest[5] & 0x0007F000UL)) >> 12;
|
||||
hcp->digest[3] +=
|
||||
((hcp->digest[7] & 0x01F80000UL) | (hcp->digest[6] & 0x0007F000UL) | (hcp->digest[5] & 0x00000FC0UL)) >> 6;
|
||||
hcp->digest[2] +=
|
||||
((hcp->digest[7] & 0x0007F000UL) | (hcp->digest[6] & 0x00000FC0UL) | (hcp->digest[5] & 0x0000003FUL));
|
||||
hcp->digest[1] +=
|
||||
ROTR
|
||||
((hcp->digest[7] & 0x00000FC0UL) | (hcp->digest[6] & 0x0000003FUL) | (hcp->digest[5] & 0xFE000000UL), 25);
|
||||
hcp->digest[0] +=
|
||||
ROTR
|
||||
((hcp->digest[7] & 0x0000003FUL) | (hcp->digest[6] & 0xFE000000UL) | (hcp->digest[5] & 0x01F80000UL), 19);
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_word32nswap((mutils_word32 *) (hcp->digest), 160/32, MUTILS_TRUE);
|
||||
#endif
|
||||
mutils_memcpy (digest, hcp->digest, 160/8);
|
||||
|
||||
break;
|
||||
case 192:
|
||||
hcp->digest[5] +=
|
||||
((hcp->digest[7] & 0xFC000000UL) | (hcp->digest[6] & 0x03E00000UL)) >> 21;
|
||||
hcp->digest[4] +=
|
||||
((hcp->digest[7] & 0x03E00000UL) | (hcp->digest[6] & 0x001F0000UL)) >> 16;
|
||||
hcp->digest[3] +=
|
||||
((hcp->digest[7] & 0x001F0000UL) | (hcp->digest[6] & 0x0000FC00UL)) >> 10;
|
||||
hcp->digest[2] +=
|
||||
((hcp->digest[7] & 0x0000FC00UL) | (hcp->digest[6] & 0x000003E0UL)) >> 5;
|
||||
hcp->digest[1] +=
|
||||
((hcp->digest[7] & 0x000003E0UL) | (hcp->digest[6] & 0x0000001FUL));
|
||||
hcp->digest[0] +=
|
||||
ROTR
|
||||
((hcp->digest[7] & 0x0000001FUL) | (hcp->digest[6] & 0xFC000000UL), 26);
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_word32nswap((mutils_word32 *) (hcp->digest), 192/32, MUTILS_TRUE);
|
||||
#endif
|
||||
mutils_memcpy (digest, hcp->digest, 192/8);
|
||||
|
||||
break;
|
||||
case 224:
|
||||
hcp->digest[6] += (hcp->digest[7] ) & 0x0000000FUL;
|
||||
hcp->digest[5] += (hcp->digest[7] >> 4) & 0x0000001FUL;
|
||||
hcp->digest[4] += (hcp->digest[7] >> 9) & 0x0000000FUL;
|
||||
hcp->digest[3] += (hcp->digest[7] >> 13) & 0x0000001FUL;
|
||||
hcp->digest[2] += (hcp->digest[7] >> 18) & 0x0000000FUL;
|
||||
hcp->digest[1] += (hcp->digest[7] >> 22) & 0x0000001FUL;
|
||||
hcp->digest[0] += (hcp->digest[7] >> 27) & 0x0000001FUL;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_word32nswap((mutils_word32 *) (hcp->digest), 224/32, MUTILS_TRUE);
|
||||
#endif
|
||||
mutils_memcpy (digest, hcp->digest, 224/8);
|
||||
|
||||
break;
|
||||
case 256:
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_word32nswap((mutils_word32 *) (hcp->digest), 256/32, MUTILS_TRUE);
|
||||
#endif
|
||||
mutils_memcpy (digest, hcp->digest, 256/8);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
/* destroy sensitive information: */
|
||||
mutils_bzero (hcp, sizeof (havalContext));
|
||||
return(MUTILS_OK); /* OK */
|
||||
} /* havalFinal */
|
||||
|
||||
|
||||
#endif /* ENABLE_HAVAL */
|
||||
@@ -0,0 +1,223 @@
|
||||
/*
|
||||
* Copyright (C) 1998 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000,2001 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#define KEYGEN_INTERNALS
|
||||
|
||||
#include <libdefs.h>
|
||||
#include <mhash_int.h>
|
||||
#include <keygen.h>
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_boolean mhash_keygen_uses_hash_algorithm(keygenid type)
|
||||
{
|
||||
mutils_boolean ret = MUTILS_FALSE;
|
||||
KEYGEN_ALG_LOOP(ret = p->uses_hash_algorithm);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_boolean mhash_keygen_uses_count(keygenid type)
|
||||
{
|
||||
mutils_boolean ret = MUTILS_FALSE;
|
||||
KEYGEN_ALG_LOOP(ret = p->uses_count);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_boolean mhash_keygen_uses_salt(keygenid type)
|
||||
{
|
||||
mutils_boolean ret = MUTILS_FALSE;
|
||||
KEYGEN_ALG_LOOP(ret = p->uses_salt);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
#ifndef MMAX
|
||||
# define MMAX(x,y) (x>y?x:y)
|
||||
#endif
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word32 mhash_keygen_count(void)
|
||||
{
|
||||
keygenid count = 0;
|
||||
|
||||
KEYGEN_LOOP(count = MMAX(p->id, count) );
|
||||
|
||||
return(count);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word32 mhash_get_keygen_salt_size(keygenid type)
|
||||
{
|
||||
mutils_word32 ret = 0;
|
||||
|
||||
KEYGEN_ALG_LOOP(ret = p->salt_size);
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word32 mhash_get_keygen_max_key_size(keygenid type)
|
||||
{
|
||||
mutils_word32 ret = 0;
|
||||
|
||||
KEYGEN_ALG_LOOP(ret = p->max_key_size);
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word8 *mhash_get_keygen_name(hashid type)
|
||||
{
|
||||
mutils_word8 *ret = NULL;
|
||||
|
||||
/* avoid prefix */
|
||||
|
||||
KEYGEN_ALG_LOOP(ret = p->name);
|
||||
|
||||
if (ret != NULL)
|
||||
ret += sizeof("KEYGEN_") - 1;
|
||||
|
||||
return(mutils_strdup(ret));
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
__const mutils_word8 *mhash_get_keygen_name_static(hashid type)
|
||||
{
|
||||
mutils_word8 *ret = NULL;
|
||||
|
||||
/* avoid prefix */
|
||||
|
||||
KEYGEN_ALG_LOOP(ret = p->name);
|
||||
|
||||
if (ret != NULL)
|
||||
ret += sizeof("KEYGEN_") - 1;
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_error mhash_keygen(keygenid algorithm, hashid opt_algorithm,
|
||||
mutils_word64 count,
|
||||
void *keyword, mutils_word32 keysize,
|
||||
void *salt, mutils_word32 saltsize,
|
||||
mutils_word8 *password, mutils_word32 passwordlen)
|
||||
{
|
||||
mutils_error x;
|
||||
|
||||
switch (algorithm) {
|
||||
|
||||
case KEYGEN_MCRYPT:
|
||||
x=_mhash_gen_key_mcrypt(opt_algorithm,
|
||||
keyword, keysize,
|
||||
salt, saltsize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_ASIS:
|
||||
x=_mhash_gen_key_asis(keyword, keysize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_PKDES:
|
||||
x=_mhash_gen_key_pkdes(keyword, keysize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_HEX:
|
||||
x=_mhash_gen_key_hex(keyword, keysize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_S2K_SIMPLE:
|
||||
x=_mhash_gen_key_s2k_simple(opt_algorithm,
|
||||
keyword, keysize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_S2K_SALTED:
|
||||
x=_mhash_gen_key_s2k_salted(opt_algorithm,
|
||||
keyword, keysize,
|
||||
salt, saltsize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_S2K_ISALTED:
|
||||
x=_mhash_gen_key_s2k_isalted(opt_algorithm, count,
|
||||
keyword, keysize,
|
||||
salt, saltsize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
default:
|
||||
return(-MUTILS_INVALID_FUNCTION);
|
||||
}
|
||||
|
||||
return(x);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_error mhash_keygen_ext(keygenid algorithm, KEYGEN data,
|
||||
void *keyword, mutils_word32 keysize,
|
||||
mutils_word8 *password, mutils_word32 passwordlen)
|
||||
{
|
||||
mutils_error x;
|
||||
hashid opt_algorithm = data.hash_algorithm[0];
|
||||
mutils_word64 count = data.count;
|
||||
void *salt = data.salt;
|
||||
mutils_word32 saltsize = data.salt_size;
|
||||
|
||||
switch (algorithm) {
|
||||
|
||||
case KEYGEN_MCRYPT:
|
||||
x=_mhash_gen_key_mcrypt(opt_algorithm,
|
||||
keyword, keysize,
|
||||
salt, saltsize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_ASIS:
|
||||
x=_mhash_gen_key_asis(keyword, keysize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_PKDES:
|
||||
x=_mhash_gen_key_pkdes(keyword, keysize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_HEX:
|
||||
x=_mhash_gen_key_hex(keyword, keysize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_S2K_SIMPLE:
|
||||
x=_mhash_gen_key_s2k_simple(opt_algorithm,
|
||||
keyword, keysize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_S2K_SALTED:
|
||||
x=_mhash_gen_key_s2k_salted(opt_algorithm,
|
||||
keyword, keysize,
|
||||
salt, saltsize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
case KEYGEN_S2K_ISALTED:
|
||||
x=_mhash_gen_key_s2k_isalted(opt_algorithm, count,
|
||||
keyword, keysize,
|
||||
salt, saltsize,
|
||||
password, passwordlen);
|
||||
break;
|
||||
default:
|
||||
return(-MUTILS_INVALID_FUNCTION);
|
||||
}
|
||||
|
||||
return(x);
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
#if !defined(__KEYGEN_H)
|
||||
#define __KEYGEN_H
|
||||
|
||||
#include <mutils/mhash_config.h>
|
||||
#include <mutils/mglobal.h>
|
||||
|
||||
#if defined(PROTOTYPES)
|
||||
|
||||
mutils_error _mhash_gen_key_asis(void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen);
|
||||
mutils_error _mhash_gen_key_mcrypt(hashid algorithm,
|
||||
void *keyword, mutils_word32 key_size,
|
||||
void *salt, mutils_word32 salt_size,
|
||||
mutils_word8 *password, mutils_word32 plen);
|
||||
mutils_error _mhash_gen_key_hex(void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen);
|
||||
mutils_error _mhash_gen_key_s2k_simple(hashid algorithm,
|
||||
void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen);
|
||||
mutils_error _mhash_gen_key_s2k_salted(hashid algorithm,
|
||||
void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *salt, mutils_word32 salt_size,
|
||||
mutils_word8 *password, mutils_word32 plen);
|
||||
mutils_error _mhash_gen_key_s2k_isalted(hashid algorithm, mutils_word64 count,
|
||||
void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *salt, mutils_word32 salt_size,
|
||||
mutils_word8 *password, mutils_word32 plen);
|
||||
mutils_error _mhash_gen_key_pkdes(void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen);
|
||||
mutils_error _mhash_gen_key_crypt(void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen,
|
||||
void *salt, mutils_word32 salt_size);
|
||||
mutils_error _mhash_gen_key_scrypt(void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen);
|
||||
|
||||
#else
|
||||
|
||||
mutils_error _mhash_gen_key_asis();
|
||||
mutils_error _mhash_gen_key_mcrypt();
|
||||
mutils_error _mhash_gen_key_hex();
|
||||
mutils_error _mhash_gen_key_s2k_simple();
|
||||
mutils_error _mhash_gen_key_s2k_salted();
|
||||
mutils_error _mhash_gen_key_s2k_isalted();
|
||||
mutils_error _mhash_gen_key_pkdes();
|
||||
mutils_error _mhash_gen_key_crypt();
|
||||
mutils_error _mhash_gen_key_scrypt();
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(KEYGEN_INTERNALS)
|
||||
|
||||
#define KEYGEN_ENTRY(name, uses_hash_algorithm, uses_count, uses_salt, salt_size, max_key_size) \
|
||||
{ (mutils_word8 *) #name, name, uses_hash_algorithm, uses_count, uses_salt, salt_size, max_key_size }
|
||||
|
||||
typedef struct __mhash_keygen_entry {
|
||||
mutils_word8 *name;
|
||||
keygenid id;
|
||||
mutils_boolean uses_hash_algorithm;
|
||||
mutils_boolean uses_count;
|
||||
mutils_boolean uses_salt;
|
||||
mutils_word32 salt_size;
|
||||
mutils_word32 max_key_size;
|
||||
} mhash_keygen_entry;
|
||||
|
||||
static __const mhash_keygen_entry keygen_algorithms[] = {
|
||||
KEYGEN_ENTRY(KEYGEN_ASIS, 0, 0, 0, 0, 0),
|
||||
KEYGEN_ENTRY(KEYGEN_PKDES, 0, 0, 0, 0, 0),
|
||||
KEYGEN_ENTRY(KEYGEN_HEX, 0, 0, 0, 0, 0),
|
||||
KEYGEN_ENTRY(KEYGEN_MCRYPT, 1, 0, 1, 0, 0),
|
||||
KEYGEN_ENTRY(KEYGEN_S2K_SIMPLE, 1, 0, 0, 0, 0),
|
||||
KEYGEN_ENTRY(KEYGEN_S2K_SALTED, 1, 0, 1, 8, 0),
|
||||
KEYGEN_ENTRY(KEYGEN_S2K_ISALTED, 1, 1, 1, 8, 0),
|
||||
{0}
|
||||
};
|
||||
|
||||
#define KEYGEN_LOOP(b) \
|
||||
__const mhash_keygen_entry *p; \
|
||||
for (p = keygen_algorithms; p->name != NULL; p++) { b ; }
|
||||
|
||||
#define KEYGEN_ALG_LOOP(a) \
|
||||
KEYGEN_LOOP(if (p->id == type) { a; break; } )
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (C) 1998 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <libdefs.h>
|
||||
|
||||
mutils_error _mhash_gen_key_asis(void *keyword, mutils_word32 key_size, mutils_word8 *password, mutils_word32 plen)
|
||||
{
|
||||
#if defined(MHASH_ROBUST)
|
||||
if ((keyword == NULL) || (key_size == 0) ||
|
||||
(password == NULL) || (plen == 0))
|
||||
return(-MUTILS_INVALID_SIZE);
|
||||
#endif
|
||||
|
||||
if (plen > key_size)
|
||||
plen=key_size;
|
||||
mutils_bzero(keyword, key_size);
|
||||
mutils_memcpy(keyword, password, plen);
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (C) 1998,2002 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef WIN32
|
||||
/* Provided by Stefan Hetzl <shetzl@chello.at>
|
||||
* in order for isxdigit to work on cygwin.
|
||||
*/
|
||||
static char hexdigits[] = { '0', '1', '2', '3', '4',
|
||||
'5', '6', '7', '8', '9',
|
||||
'a', 'b', 'c', 'd', 'e', 'f',
|
||||
'A', 'B', 'C', 'D', 'E', 'F' } ;
|
||||
|
||||
static mutils_boolean ishexdigit (mutils_word8 d)
|
||||
{
|
||||
mutils_word8 i;
|
||||
|
||||
for (i = 0; i < 22 ; i++)
|
||||
if (d == hexdigits[i])
|
||||
return(MUTILS_TRUE);
|
||||
|
||||
return(MUTILS_FALSE);
|
||||
}
|
||||
#else
|
||||
# include <ctype.h>
|
||||
# define ishexdigit isxdigit
|
||||
#endif
|
||||
|
||||
static mutils_boolean check_hex(mutils_word8 *given_chain, mutils_word32 len)
|
||||
{
|
||||
mutils_word8 i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
if (ishexdigit(given_chain[i]) == MUTILS_FALSE)
|
||||
return(MUTILS_FALSE);
|
||||
|
||||
return(MUTILS_TRUE);
|
||||
}
|
||||
|
||||
|
||||
mutils_error _mhash_gen_key_hex(void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen)
|
||||
{
|
||||
mutils_word8 *chain = password;
|
||||
mutils_word8 *pkeyword = keyword;
|
||||
mutils_word8 tmp[3];
|
||||
mutils_word32 i;
|
||||
|
||||
mutils_bzero(keyword, key_size);
|
||||
|
||||
/* The chain should have 2*n characters
|
||||
*/
|
||||
|
||||
if (plen % 2 != 0 || plen > key_size*2)
|
||||
return(-MUTILS_INVALID_SIZE);
|
||||
|
||||
if (check_hex(chain, plen) == MUTILS_FALSE)
|
||||
return(-MUTILS_INVALID_FORMAT);
|
||||
|
||||
mutils_bzero( keyword, key_size);
|
||||
|
||||
for (i = 0; i < plen; i += 2) {
|
||||
mutils_memcpy(tmp, &chain[i], 2);
|
||||
tmp[2] = '\0';
|
||||
pkeyword[i / 2] = mutils_strtol(tmp, (mutils_word8 **) NULL, 16);
|
||||
}
|
||||
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* Copyright (C) 1998 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#define MUTILS_USE_MHASH_CONFIG
|
||||
|
||||
#include <mhash.h>
|
||||
#include <libdefs.h>
|
||||
#include <keygen.h>
|
||||
|
||||
/* Key generation using any hash algorithm */
|
||||
mutils_error _mhash_gen_key_mcrypt(hashid algorithm,
|
||||
void *keyword, mutils_word32 key_size,
|
||||
void *salt, mutils_word32 salt_size,
|
||||
mutils_word8 *password, mutils_word32 plen)
|
||||
{
|
||||
mutils_word8 *key = mutils_malloc(key_size);
|
||||
mutils_word8 *digest = NULL;
|
||||
mutils_word32 size = key_size;
|
||||
MHASH td;
|
||||
mutils_word8 *cp = key, *cp0 = key;
|
||||
mutils_boolean salt_z = MUTILS_TRUE; /* flag to be used when freeing salt[] */
|
||||
mutils_word32 block_size = mhash_get_block_size(algorithm);
|
||||
|
||||
#if defined(MHASH_ROBUST)
|
||||
if (key == NULL)
|
||||
return(-MUTILS_SYSTEM_RESOURCE_ERROR);
|
||||
#endif
|
||||
|
||||
mutils_bzero(key, key_size);
|
||||
|
||||
if (salt == NULL) {
|
||||
salt_z = MUTILS_FALSE;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
td = mhash_init(algorithm);
|
||||
if (td == MHASH_FAILED)
|
||||
return(-MUTILS_INVALID_FUNCTION);
|
||||
|
||||
if (salt_z == MUTILS_TRUE)
|
||||
mhash(td, salt, salt_size);
|
||||
|
||||
mhash(td, password, plen);
|
||||
|
||||
if (cp - cp0 > 0)
|
||||
mhash(td, cp0, cp - cp0);
|
||||
|
||||
digest = mhash_end(td);
|
||||
|
||||
#if defined(MHASH_ROBUST)
|
||||
if (digest == NULL)
|
||||
return(-MUTILS_INVALID_RESULT);
|
||||
#endif
|
||||
|
||||
if (size > block_size) {
|
||||
mutils_memcpy(cp, digest, block_size);
|
||||
mutils_free(digest);
|
||||
size -= block_size;
|
||||
cp += block_size;
|
||||
} else {
|
||||
mutils_memcpy(cp, digest, size);
|
||||
mutils_free(digest);
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutils_memcpy(keyword, key, key_size);
|
||||
mutils_free(key);
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
|
||||
mutils_error _mhash_gen_key_pkdes(void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen)
|
||||
{
|
||||
mutils_word8 *ptr = keyword;
|
||||
mutils_word32 cnt;
|
||||
mutils_word32 i;
|
||||
mutils_word32 c;
|
||||
|
||||
#if defined(MHASH_ROBUST)
|
||||
if (keyword == NULL)
|
||||
return(-MUTILS_SYSTEM_RESOURCE_ERROR);
|
||||
#endif
|
||||
|
||||
if (plen > key_size)
|
||||
return(-MUTILS_INVALID_SIZE);
|
||||
|
||||
mutils_bzero(keyword, key_size);
|
||||
|
||||
mutils_memcpy(keyword, password, plen);
|
||||
|
||||
for (cnt = 0; cnt < key_size; cnt++, ptr++) {
|
||||
c = 0;
|
||||
for (i = 0; i < 7; i++)
|
||||
if (*ptr & (1 << i))
|
||||
c++;
|
||||
if ((c & 1) == 0)
|
||||
*ptr |= 0x80;
|
||||
else
|
||||
*ptr &= ~0x80;
|
||||
}
|
||||
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
@@ -0,0 +1,260 @@
|
||||
/*
|
||||
* Copyright (C) 1998 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
* Copyright (C) 2002 Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "libdefs.h"
|
||||
#include "keygen.h"
|
||||
#include <mhash.h>
|
||||
|
||||
#define MAX_DIGEST_SIZE 40
|
||||
|
||||
/* Key generation using OpenPGP Simple S2K algorithm */
|
||||
mutils_error _mhash_gen_key_s2k_simple(hashid algorithm,
|
||||
void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *password, mutils_word32 plen)
|
||||
{
|
||||
mutils_word8* key;
|
||||
mutils_word8 digest[MAX_DIGEST_SIZE];
|
||||
char null = '\0';
|
||||
mutils_word32 i,j, times, total;
|
||||
MHASH td;
|
||||
mutils_word32 block_size = mhash_get_block_size(algorithm);
|
||||
|
||||
/* This should never happen, so naturally it is bound to. */
|
||||
|
||||
if (block_size == 0)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return(-MUTILS_INVALID_SIZE);
|
||||
}
|
||||
|
||||
times = key_size / block_size;
|
||||
|
||||
if (key_size % block_size != 0)
|
||||
{
|
||||
times++;
|
||||
}
|
||||
|
||||
total = times * block_size;
|
||||
|
||||
key = mutils_malloc(total);
|
||||
|
||||
if (key == NULL)
|
||||
{
|
||||
return(-MUTILS_SYSTEM_RESOURCE_ERROR); /* or what? */
|
||||
}
|
||||
|
||||
mutils_bzero(key, total);
|
||||
|
||||
for (i = 0; i < times; i++) {
|
||||
td = mhash_init(algorithm);
|
||||
if (td == MHASH_FAILED) {
|
||||
mutils_free(key);
|
||||
return(-MUTILS_INVALID_FUNCTION);
|
||||
}
|
||||
|
||||
for (j = 0; j < i; j++)
|
||||
{
|
||||
mhash(td, &null, 1);
|
||||
}
|
||||
mhash(td, password, plen);
|
||||
mhash_deinit(td, digest);
|
||||
|
||||
mutils_memcpy(&key[i * block_size], digest, block_size);
|
||||
}
|
||||
mutils_memcpy(keyword, key, key_size);
|
||||
mutils_bzero(key, key_size);
|
||||
mutils_free(key);
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
|
||||
|
||||
/* Key generation using OpenPGP Salted S2K algorithm */
|
||||
mutils_error _mhash_gen_key_s2k_salted(hashid algorithm,
|
||||
void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *salt, mutils_word32 salt_size,
|
||||
mutils_word8 *password, mutils_word32 plen)
|
||||
{
|
||||
mutils_word8 *key;
|
||||
mutils_word8 digest[MAX_DIGEST_SIZE];
|
||||
char null='\0';
|
||||
mutils_word32 i;
|
||||
mutils_word32 j;
|
||||
mutils_word32 times;
|
||||
MHASH td;
|
||||
mutils_word32 block_size = mhash_get_block_size(algorithm);
|
||||
mutils_word32 total;
|
||||
|
||||
if (salt == NULL)
|
||||
{
|
||||
return(-MUTILS_INVALID_INPUT_BUFFER);
|
||||
}
|
||||
|
||||
if (salt_size < 8)
|
||||
{
|
||||
return(-MUTILS_INVALID_SIZE); /* This algorithm will use EXACTLY
|
||||
* 8 bytes salt.
|
||||
*/
|
||||
}
|
||||
|
||||
times = key_size / block_size;
|
||||
|
||||
if (key_size % block_size != 0)
|
||||
times++;
|
||||
|
||||
total = times * block_size;
|
||||
|
||||
key = mutils_malloc(total);
|
||||
|
||||
#if defined(MHASH_ROBUST)
|
||||
if (key == NULL)
|
||||
return(-MUTILS_SYSTEM_RESOURCE_ERROR); /* or what? */
|
||||
#endif
|
||||
|
||||
for (i = 0; i < times; i++) {
|
||||
td = mhash_init(algorithm);
|
||||
if (td == MHASH_FAILED) {
|
||||
mutils_free(key);
|
||||
return(-MUTILS_INVALID_FUNCTION);
|
||||
}
|
||||
|
||||
for (j = 0; j < i; j++)
|
||||
mhash(td, &null, 1);
|
||||
|
||||
mhash(td, salt, 8);
|
||||
mhash(td, password, plen);
|
||||
mhash_deinit(td, digest);
|
||||
|
||||
mutils_memcpy( &key[i*block_size], digest, block_size);
|
||||
}
|
||||
mutils_memcpy(keyword, key, key_size);
|
||||
mutils_bzero(key, key_size);
|
||||
mutils_free(key);
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
|
||||
#define EXPBIAS 6
|
||||
|
||||
/* Key generation using OpenPGP Iterated and Salted S2K algorithm */
|
||||
mutils_error _mhash_gen_key_s2k_isalted(hashid algorithm, mutils_word64 _count,
|
||||
void *keyword, mutils_word32 key_size,
|
||||
mutils_word8 *salt, mutils_word32 salt_size,
|
||||
mutils_word8 *password, mutils_word32 plen)
|
||||
{
|
||||
mutils_word8 *key;
|
||||
mutils_word8 digest[MAX_DIGEST_SIZE];
|
||||
mutils_word8 null='\0';
|
||||
mutils_word32 i;
|
||||
mutils_word32 j;
|
||||
mutils_word32 z;
|
||||
mutils_word32 times;
|
||||
MHASH td;
|
||||
mutils_word32 block_size = mhash_get_block_size(algorithm);
|
||||
mutils_word8 *saltpass;
|
||||
mutils_word32 saltpass_size;
|
||||
mutils_word32 bcount, rest;
|
||||
mutils_word32 count = _count;
|
||||
mutils_word32 total;
|
||||
|
||||
if (salt == NULL)
|
||||
return(-MUTILS_INVALID_INPUT_BUFFER);
|
||||
|
||||
if (salt_size < 8)
|
||||
return(-MUTILS_INVALID_SIZE); /* This algorithm will use EXACTLY
|
||||
* 8 bytes salt.
|
||||
*/
|
||||
|
||||
if ((saltpass = mutils_malloc(8 + plen)) == NULL)
|
||||
return(-MUTILS_SYSTEM_RESOURCE_ERROR); /* hmm */
|
||||
|
||||
mutils_memcpy( saltpass, salt, 8);
|
||||
mutils_memcpy( &saltpass[8], password, plen);
|
||||
saltpass_size = plen+8;
|
||||
|
||||
times = key_size/block_size;
|
||||
if (key_size % block_size != 0)
|
||||
times++;
|
||||
|
||||
total = times * block_size;
|
||||
|
||||
key = mutils_malloc(total);
|
||||
|
||||
if (key == NULL) {
|
||||
mutils_bzero(saltpass, saltpass_size);
|
||||
mutils_free(saltpass);
|
||||
return(-MUTILS_SYSTEM_RESOURCE_ERROR);
|
||||
}
|
||||
|
||||
mutils_bzero(key, total);
|
||||
|
||||
/* Calculate the iterations
|
||||
*/
|
||||
bcount /*bytes */ =
|
||||
((mutils_word32)16 + (count & 15)) << ((count >> 4) + EXPBIAS);
|
||||
|
||||
count /* iterations */ =
|
||||
(bcount / saltpass_size);
|
||||
|
||||
rest = bcount % saltpass_size;
|
||||
|
||||
if (bcount < saltpass_size)
|
||||
{
|
||||
count++;
|
||||
rest = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < times; i++)
|
||||
{
|
||||
td = mhash_init(algorithm);
|
||||
if (td == MHASH_FAILED)
|
||||
{
|
||||
mutils_bzero( key, key_size);
|
||||
mutils_bzero( saltpass, saltpass_size);
|
||||
mutils_free(key);
|
||||
mutils_free(saltpass);
|
||||
return(-MUTILS_INVALID_FUNCTION);
|
||||
}
|
||||
|
||||
for (j = 0; j < i; j++)
|
||||
mhash(td, &null, 1);
|
||||
|
||||
for (z = 0; z < count; z++)
|
||||
{
|
||||
mhash(td, saltpass, saltpass_size);
|
||||
}
|
||||
|
||||
mhash(td, saltpass, rest);
|
||||
|
||||
mhash_deinit(td, digest);
|
||||
|
||||
mutils_memcpy( &key[i*block_size], digest, block_size);
|
||||
}
|
||||
mutils_memcpy(keyword, key, key_size);
|
||||
|
||||
mutils_bzero(key, key_size);
|
||||
mutils_bzero(saltpass, saltpass_size);
|
||||
|
||||
mutils_free(key);
|
||||
mutils_free(saltpass);
|
||||
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
#if !defined(__LIBDEFS_H)
|
||||
#define LIBDEFS_H
|
||||
|
||||
/*
|
||||
{{{ includes
|
||||
*/
|
||||
|
||||
#define MUTILS_USE_MHASH_CONFIG
|
||||
|
||||
#include <mutils/mincludes.h>
|
||||
#include <mutils/mglobal.h>
|
||||
#include <mutils/mtypes.h>
|
||||
#include <mutils/mutils.h>
|
||||
|
||||
#ifdef WIN32
|
||||
# define WIN32DLL_DEFINE __declspec( dllexport)
|
||||
#else
|
||||
# define WIN32DLL_DEFINE
|
||||
#endif
|
||||
|
||||
#define RAND32 (mutils_word32) ((mutils_word32)rand() << 17 ^ (mutils_word32)rand() << 9 ^ rand())
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,31 @@
|
||||
mhash_keygen
|
||||
mhash_keygen_ext
|
||||
mhash_get_keygen_name
|
||||
mhash_get_keygen_name_static
|
||||
mhash_get_keygen_max_key_size
|
||||
mhash_get_keygen_salt_size
|
||||
mhash_keygen_count
|
||||
mhash_keygen_uses_salt
|
||||
mhash_keygen_uses_count
|
||||
mhash_keygen_uses_hash_algorithm
|
||||
mhash
|
||||
mhash_count
|
||||
mhash_end
|
||||
mhash_end_m
|
||||
mhash_get_block_size
|
||||
mhash_get_hash_name_static
|
||||
mhash_get_hash_name
|
||||
mhash_get_hash_pblock
|
||||
mhash_init
|
||||
mhash_init_int
|
||||
mhash_free
|
||||
mhash_hmac_init
|
||||
mhash_hmac_end
|
||||
mhash_hmac_end_m
|
||||
mhash_bzero
|
||||
mhash_cp
|
||||
mhash_get_mhash_algo
|
||||
mhash_deinit
|
||||
mhash_hmac_deinit
|
||||
mhash_save_state_mem
|
||||
mhash_restore_state_mem
|
||||
@@ -0,0 +1,152 @@
|
||||
/* md2.c
|
||||
*
|
||||
* The MD2 hash function, described in RFC 1319.
|
||||
*
|
||||
* This code was originally written by Möller/Sigfridsson for
|
||||
* libnettle. It was altered by B. Poettering to fit the mhash
|
||||
* interface. The original copyright notice follows.
|
||||
*/
|
||||
|
||||
/* nettle, low-level cryptographics library
|
||||
*
|
||||
* Copyright (C) 2003 Niels Möller, Andreas Sigfridsson
|
||||
*
|
||||
* The nettle library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* The nettle 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 Lesser General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the nettle 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.
|
||||
*/
|
||||
|
||||
/* This code originates from the Python Cryptography Toolkit, version 1.0.1.
|
||||
Further hacked by Andreas Sigfridsson and Niels Möller. Original license:
|
||||
|
||||
===================================================================
|
||||
Distribute and use freely; there are no restrictions on further
|
||||
dissemination and usage except those imposed by the laws of your
|
||||
country of residence. This software is provided "as is" without
|
||||
warranty of fitness for use or suitability for any purpose, express
|
||||
or implied. Use at your own risk or not at all.
|
||||
===================================================================
|
||||
|
||||
Incorporating the code into commercial products is permitted; you do
|
||||
not have to make source available or contribute your changes back
|
||||
(though that would be nice).
|
||||
|
||||
--amk (www.amk.ca) */
|
||||
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_MD2
|
||||
|
||||
#include "mhash_md2.h"
|
||||
|
||||
static __const mutils_word8
|
||||
S[256] = {
|
||||
41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6,
|
||||
19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188,
|
||||
76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24,
|
||||
138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251,
|
||||
245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63,
|
||||
148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50,
|
||||
39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165,
|
||||
181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210,
|
||||
150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157,
|
||||
112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27,
|
||||
96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
|
||||
85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
|
||||
234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65,
|
||||
129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123,
|
||||
8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233,
|
||||
203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228,
|
||||
166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
|
||||
31, 26, 219, 153, 141, 51, 159, 17, 131, 20
|
||||
};
|
||||
|
||||
static void
|
||||
md2_transform(struct md2_ctx *ctx, __const mutils_word8 *data)
|
||||
{
|
||||
mutils_word8 i;
|
||||
mutils_word8 j;
|
||||
mutils_word8 t;
|
||||
|
||||
mutils_memcpy(ctx->X + 16, data, MD2_DATA_SIZE);
|
||||
|
||||
for (i = 0, t = ctx->C[15]; i<MD2_DATA_SIZE; i++)
|
||||
{
|
||||
ctx->X[2 * MD2_DATA_SIZE + i]
|
||||
= ctx->X[i] ^ ctx->X[MD2_DATA_SIZE + i];
|
||||
t = (ctx->C[i] ^= S[data[i]^t]);
|
||||
}
|
||||
for (i = t = 0; i< MD2_DATA_SIZE + 2; t = (t + i) & 0xff, i++)
|
||||
{
|
||||
for (j = 0; j < 3 * MD2_DATA_SIZE; j++)
|
||||
t = (ctx->X[j] ^= S[t]);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
md2_init(struct md2_ctx *ctx)
|
||||
{
|
||||
mutils_bzero(ctx, sizeof(*ctx));
|
||||
}
|
||||
|
||||
void
|
||||
md2_update(struct md2_ctx *ctx,
|
||||
__const mutils_word8 *data,
|
||||
mutils_word32 length)
|
||||
{
|
||||
if (ctx->index != 0)
|
||||
{
|
||||
/* Try to fill partial block */
|
||||
mutils_word32 left = MD2_DATA_SIZE - ctx->index;
|
||||
if (length < left)
|
||||
{
|
||||
mutils_memcpy(ctx->buffer + ctx->index, data, length);
|
||||
ctx->index += length;
|
||||
return; /* Finished */
|
||||
}
|
||||
else
|
||||
{
|
||||
mutils_memcpy(ctx->buffer + ctx->index, data, left);
|
||||
md2_transform(ctx, ctx->buffer);
|
||||
data += left;
|
||||
length -= left;
|
||||
}
|
||||
}
|
||||
while (length >= MD2_DATA_SIZE)
|
||||
{
|
||||
md2_transform(ctx, data);
|
||||
data += MD2_DATA_SIZE;
|
||||
length -= MD2_DATA_SIZE;
|
||||
}
|
||||
if ((ctx->index = length) != 0) /* This assignment is intended */
|
||||
/* Buffer leftovers */
|
||||
mutils_memcpy(ctx->buffer, data, length);
|
||||
}
|
||||
|
||||
void
|
||||
md2_digest(struct md2_ctx *ctx, mutils_word8 *digest)
|
||||
{
|
||||
mutils_word8 left;
|
||||
|
||||
left = MD2_DATA_SIZE - ctx->index;
|
||||
mutils_memset(ctx->buffer + ctx->index, left, left);
|
||||
md2_transform(ctx, ctx->buffer);
|
||||
|
||||
md2_transform(ctx, ctx->C);
|
||||
mutils_memcpy(digest, ctx->X, MD2_DIGEST_SIZE);
|
||||
md2_init(ctx);
|
||||
}
|
||||
|
||||
#endif /* ENABLE_MD2 */
|
||||
@@ -0,0 +1,239 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#include <libdefs.h>
|
||||
|
||||
#ifdef ENABLE_MD4
|
||||
|
||||
/*
|
||||
* The algorithm is due to Ron Rivest. This code is based on code
|
||||
* written by Colin Plumb in 1993.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* This code implements the MD4 message-digest algorithm.
|
||||
*/
|
||||
|
||||
#include "mhash_md4.h"
|
||||
|
||||
#define rotl32(x,n) (((x) << ((mutils_word32)(n))) | ((x) >> (32 - (mutils_word32)(n))))
|
||||
|
||||
/*
|
||||
* Start MD4 accumulation. Set bit count to 0 and buffer to mysterious
|
||||
* initialization __constants.
|
||||
*/
|
||||
void MD4Init(struct MD4Context *ctx)
|
||||
{
|
||||
ctx->buf[0] = 0x67452301;
|
||||
ctx->buf[1] = 0xefcdab89;
|
||||
ctx->buf[2] = 0x98badcfe;
|
||||
ctx->buf[3] = 0x10325476;
|
||||
|
||||
ctx->bits[0] = 0;
|
||||
ctx->bits[1] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update context to reflect the concatenation of another buffer full
|
||||
* of bytes.
|
||||
*/
|
||||
void MD4Update(struct MD4Context *ctx, mutils_word8 __const *buf, mutils_word32 len)
|
||||
{
|
||||
register mutils_word32 t;
|
||||
|
||||
/* Update bitcount */
|
||||
|
||||
t = ctx->bits[0];
|
||||
if ((ctx->bits[0] = t + ((mutils_word32) len << 3)) < t)
|
||||
ctx->bits[1]++; /* Carry from low to high */
|
||||
ctx->bits[1] += len >> 29;
|
||||
|
||||
t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
|
||||
|
||||
/* Handle any leading odd-sized chunks */
|
||||
|
||||
if (t) {
|
||||
mutils_word8 *p = (mutils_word8 *) ctx->in + t;
|
||||
|
||||
t = 64 - t;
|
||||
if (len < t) {
|
||||
mutils_memcpy(p, buf, len);
|
||||
return;
|
||||
}
|
||||
mutils_memcpy(p, buf, t);
|
||||
mutils_word32nswap((mutils_word32 *) ctx->in, 16, MUTILS_TRUE);
|
||||
MD4Transform(ctx->buf, (mutils_word32 *) ctx->in);
|
||||
buf += t;
|
||||
len -= t;
|
||||
}
|
||||
/* Process data in 64-byte chunks */
|
||||
|
||||
while (len >= 64) {
|
||||
mutils_memcpy(ctx->in, buf, 64);
|
||||
mutils_word32nswap((mutils_word32 *) ctx->in, 16, MUTILS_TRUE);
|
||||
MD4Transform(ctx->buf, (mutils_word32 *) ctx->in);
|
||||
buf += 64;
|
||||
len -= 64;
|
||||
}
|
||||
|
||||
/* Handle any remaining bytes of data. */
|
||||
|
||||
mutils_memcpy(ctx->in, buf, len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Final wrapup - pad to 64-byte boundary with the bit pattern
|
||||
* 1 0* (64-bit count of bits processed, MSB-first)
|
||||
*/
|
||||
void MD4Final(struct MD4Context *ctx, mutils_word8 *digest)
|
||||
{
|
||||
mutils_word32 count;
|
||||
mutils_word8 *p;
|
||||
|
||||
/* Compute number of bytes mod 64 */
|
||||
count = (ctx->bits[0] >> 3) & 0x3F;
|
||||
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
p = ctx->in + count;
|
||||
*p++ = 0x80;
|
||||
|
||||
/* Bytes of padding needed to make 64 bytes */
|
||||
count = 64 - 1 - count;
|
||||
|
||||
/* Pad out to 56 mod 64 */
|
||||
if (count < 8) {
|
||||
/* Two lots of padding: Pad the first block to 64 bytes */
|
||||
mutils_bzero(p, count);
|
||||
mutils_word32nswap((mutils_word32 *) ctx->in, 16, MUTILS_TRUE);
|
||||
MD4Transform(ctx->buf, (mutils_word32 *) ctx->in);
|
||||
|
||||
/* Now fill the next block with 56 bytes */
|
||||
mutils_bzero(ctx->in, 56);
|
||||
} else {
|
||||
/* Pad block to 56 bytes */
|
||||
mutils_bzero(p, count - 8);
|
||||
}
|
||||
mutils_word32nswap((mutils_word32 *) ctx->in, 14, MUTILS_TRUE);
|
||||
|
||||
/* Append length in bits and transform */
|
||||
((mutils_word32 *) ctx->in)[14] = ctx->bits[0];
|
||||
((mutils_word32 *) ctx->in)[15] = ctx->bits[1];
|
||||
|
||||
MD4Transform(ctx->buf, (mutils_word32 *) ctx->in);
|
||||
mutils_word32nswap((mutils_word32 *) ctx->buf, 4, MUTILS_TRUE);
|
||||
|
||||
if (digest!=NULL)
|
||||
mutils_memcpy(digest, ctx->buf, 16);
|
||||
mutils_bzero(ctx, sizeof(ctx)); /* In case it's sensitive */
|
||||
}
|
||||
|
||||
/* The three core functions */
|
||||
|
||||
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
|
||||
#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
|
||||
#define H(x, y, z) ((x) ^ (y) ^ (z))
|
||||
|
||||
#define FF(a, b, c, d, x, s) { \
|
||||
(a) += F ((b), (c), (d)) + (x); \
|
||||
(a) = rotl32 ((a), (s)); \
|
||||
}
|
||||
#define GG(a, b, c, d, x, s) { \
|
||||
(a) += G ((b), (c), (d)) + (x) + (mutils_word32)0x5a827999; \
|
||||
(a) = rotl32 ((a), (s)); \
|
||||
}
|
||||
#define HH(a, b, c, d, x, s) { \
|
||||
(a) += H ((b), (c), (d)) + (x) + (mutils_word32)0x6ed9eba1; \
|
||||
(a) = rotl32 ((a), (s)); \
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The core of the MD4 algorithm
|
||||
*/
|
||||
void MD4Transform(mutils_word32 buf[4], __const mutils_word32 in[16])
|
||||
{
|
||||
register mutils_word32 a, b, c, d;
|
||||
|
||||
a = buf[0];
|
||||
b = buf[1];
|
||||
c = buf[2];
|
||||
d = buf[3];
|
||||
|
||||
FF(a, b, c, d, in[0], 3); /* 1 */
|
||||
FF(d, a, b, c, in[1], 7); /* 2 */
|
||||
FF(c, d, a, b, in[2], 11); /* 3 */
|
||||
FF(b, c, d, a, in[3], 19); /* 4 */
|
||||
FF(a, b, c, d, in[4], 3); /* 5 */
|
||||
FF(d, a, b, c, in[5], 7); /* 6 */
|
||||
FF(c, d, a, b, in[6], 11); /* 7 */
|
||||
FF(b, c, d, a, in[7], 19); /* 8 */
|
||||
FF(a, b, c, d, in[8], 3); /* 9 */
|
||||
FF(d, a, b, c, in[9], 7); /* 10 */
|
||||
FF(c, d, a, b, in[10], 11); /* 11 */
|
||||
FF(b, c, d, a, in[11], 19); /* 12 */
|
||||
FF(a, b, c, d, in[12], 3); /* 13 */
|
||||
FF(d, a, b, c, in[13], 7); /* 14 */
|
||||
FF(c, d, a, b, in[14], 11); /* 15 */
|
||||
FF(b, c, d, a, in[15], 19); /* 16 */
|
||||
|
||||
GG(a, b, c, d, in[0], 3); /* 17 */
|
||||
GG(d, a, b, c, in[4], 5); /* 18 */
|
||||
GG(c, d, a, b, in[8], 9); /* 19 */
|
||||
GG(b, c, d, a, in[12], 13); /* 20 */
|
||||
GG(a, b, c, d, in[1], 3); /* 21 */
|
||||
GG(d, a, b, c, in[5], 5); /* 22 */
|
||||
GG(c, d, a, b, in[9], 9); /* 23 */
|
||||
GG(b, c, d, a, in[13], 13); /* 24 */
|
||||
GG(a, b, c, d, in[2], 3); /* 25 */
|
||||
GG(d, a, b, c, in[6], 5); /* 26 */
|
||||
GG(c, d, a, b, in[10], 9); /* 27 */
|
||||
GG(b, c, d, a, in[14], 13); /* 28 */
|
||||
GG(a, b, c, d, in[3], 3); /* 29 */
|
||||
GG(d, a, b, c, in[7], 5); /* 30 */
|
||||
GG(c, d, a, b, in[11], 9); /* 31 */
|
||||
GG(b, c, d, a, in[15], 13); /* 32 */
|
||||
|
||||
HH(a, b, c, d, in[0], 3); /* 33 */
|
||||
HH(d, a, b, c, in[8], 9); /* 34 */
|
||||
HH(c, d, a, b, in[4], 11); /* 35 */
|
||||
HH(b, c, d, a, in[12], 15); /* 36 */
|
||||
HH(a, b, c, d, in[2], 3); /* 37 */
|
||||
HH(d, a, b, c, in[10], 9); /* 38 */
|
||||
HH(c, d, a, b, in[6], 11); /* 39 */
|
||||
HH(b, c, d, a, in[14], 15); /* 40 */
|
||||
HH(a, b, c, d, in[1], 3); /* 41 */
|
||||
HH(d, a, b, c, in[9], 9); /* 42 */
|
||||
HH(c, d, a, b, in[5], 11); /* 43 */
|
||||
HH(b, c, d, a, in[13], 15); /* 44 */
|
||||
HH(a, b, c, d, in[3], 3); /* 45 */
|
||||
HH(d, a, b, c, in[11], 9); /* 46 */
|
||||
HH(c, d, a, b, in[7], 11); /* 47 */
|
||||
HH(b, c, d, a, in[15], 15); /* 48 */
|
||||
|
||||
|
||||
buf[0] += a;
|
||||
buf[1] += b;
|
||||
buf[2] += c;
|
||||
buf[3] += d;
|
||||
}
|
||||
|
||||
#endif /* ENABLE_MD4 */
|
||||
@@ -0,0 +1,240 @@
|
||||
#include <libdefs.h>
|
||||
|
||||
/*
|
||||
* This code implements the MD5 message-digest algorithm.
|
||||
* The algorithm is due to Ron Rivest. This code was
|
||||
* written by Colin Plumb in 1993, no copyright is claimed.
|
||||
* This code is in the public domain; do with it what you wish.
|
||||
*
|
||||
* Equivalent code is available from RSA Data Security, Inc.
|
||||
* This code has been tested against that, and is equivalent,
|
||||
* except that you don't need to include two pages of legalese
|
||||
* with every copy.
|
||||
*
|
||||
* To compute the message digest of a chunk of bytes, declare an
|
||||
* MD5Context structure, pass it to MD5Init, call MD5Update as
|
||||
* needed on buffers full of bytes, and then call MD5Final, which
|
||||
* will fill a supplied 16-byte array with the digest.
|
||||
*/
|
||||
|
||||
#ifdef ENABLE_MD5
|
||||
|
||||
#include "mhash_md5.h"
|
||||
|
||||
/*
|
||||
* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
|
||||
* initialization __constants.
|
||||
*/
|
||||
void MD5Init(struct MD5Context *ctx)
|
||||
{
|
||||
ctx->buf[0] = 0x67452301;
|
||||
ctx->buf[1] = 0xefcdab89;
|
||||
ctx->buf[2] = 0x98badcfe;
|
||||
ctx->buf[3] = 0x10325476;
|
||||
|
||||
ctx->bits[0] = 0;
|
||||
ctx->bits[1] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update context to reflect the concatenation of another buffer full
|
||||
* of bytes.
|
||||
*/
|
||||
void MD5Update(struct MD5Context *ctx, __const mutils_word8 *buf, mutils_word32 len)
|
||||
{
|
||||
register mutils_word32 t;
|
||||
mutils_word8 *p;
|
||||
|
||||
/* Update bitcount */
|
||||
|
||||
t = ctx->bits[0];
|
||||
if ((ctx->bits[0] = t + ((mutils_word32) len << 3)) < t)
|
||||
ctx->bits[1]++; /* Carry from low to high */
|
||||
ctx->bits[1] += len >> 29;
|
||||
|
||||
t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
|
||||
|
||||
/* Handle any leading odd-sized chunks */
|
||||
|
||||
if (t)
|
||||
{
|
||||
p = (mutils_word8 *) ctx->in + t;
|
||||
|
||||
t = 64 - t;
|
||||
if (len < t)
|
||||
{
|
||||
mutils_memcpy(p, buf, len);
|
||||
return;
|
||||
}
|
||||
mutils_memcpy(p, buf, t);
|
||||
mutils_word32nswap((mutils_word32 *) ctx->in, 16, MUTILS_TRUE);
|
||||
MD5Transform(ctx->buf, (mutils_word32 *) ctx->in);
|
||||
buf += t;
|
||||
len -= t;
|
||||
}
|
||||
/* Process data in 64-byte chunks */
|
||||
|
||||
while (len >= 64)
|
||||
{
|
||||
mutils_memcpy(ctx->in, buf, 64);
|
||||
mutils_word32nswap((mutils_word32 *) ctx->in, 16, MUTILS_TRUE);
|
||||
MD5Transform(ctx->buf, (mutils_word32 *) ctx->in);
|
||||
buf += 64;
|
||||
len -= 64;
|
||||
}
|
||||
|
||||
/* Handle any remaining bytes of data. */
|
||||
|
||||
mutils_memcpy(ctx->in, buf, len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Final wrapup - pad to 64-byte boundary with the bit pattern
|
||||
* 1 0* (64-bit count of bits processed, MSB-first)
|
||||
*/
|
||||
void MD5Final(struct MD5Context *ctx, mutils_word8* digest)
|
||||
{
|
||||
mutils_word32 count;
|
||||
mutils_word8 *p;
|
||||
|
||||
/* Compute number of bytes mod 64 */
|
||||
count = (ctx->bits[0] >> 3) & 0x3F;
|
||||
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
p = ctx->in + count;
|
||||
*p++ = 0x80;
|
||||
|
||||
/* Bytes of padding needed to make 64 bytes */
|
||||
count = 64 - 1 - count;
|
||||
|
||||
/* Pad out to 56 mod 64 */
|
||||
if (count < 8)
|
||||
{
|
||||
/* Two lots of padding: Pad the first block to 64 bytes */
|
||||
mutils_bzero(p, count);
|
||||
mutils_word32nswap((mutils_word32 *) ctx->in, 16, MUTILS_TRUE);
|
||||
MD5Transform(ctx->buf, (mutils_word32 *) ctx->in);
|
||||
|
||||
/* Now fill the next block with 56 bytes */
|
||||
mutils_bzero(ctx->in, 56);
|
||||
} else {
|
||||
/* Pad block to 56 bytes */
|
||||
mutils_bzero(p, count - 8);
|
||||
}
|
||||
mutils_word32nswap((mutils_word32 *) ctx->in, 14, MUTILS_TRUE);
|
||||
|
||||
/* Append length in bits and transform */
|
||||
((mutils_word32 *) ctx->in)[14] = ctx->bits[0];
|
||||
((mutils_word32 *) ctx->in)[15] = ctx->bits[1];
|
||||
|
||||
MD5Transform(ctx->buf, (mutils_word32 *) ctx->in);
|
||||
mutils_word32nswap((mutils_word32 *) ctx->buf, 4, MUTILS_TRUE);
|
||||
|
||||
if (digest!=NULL)
|
||||
mutils_memcpy(digest, ctx->buf, 16);
|
||||
|
||||
mutils_bzero(ctx, sizeof(ctx)); /* In case it's sensitive */
|
||||
}
|
||||
|
||||
/* The four core functions - F1 is optimized somewhat */
|
||||
|
||||
/* #define F1(x, y, z) (x & y | ~x & z) */
|
||||
#define F1(x, y, z) (z ^ (x & (y ^ z)))
|
||||
#define F2(x, y, z) F1(z, x, y)
|
||||
#define F3(x, y, z) (x ^ y ^ z)
|
||||
#define F4(x, y, z) (y ^ (x | ~z))
|
||||
|
||||
/* This is the central step in the MD5 algorithm. */
|
||||
#define MD5STEP(f, w, x, y, z, data, s) \
|
||||
( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
|
||||
|
||||
/*
|
||||
* The core of the MD5 algorithm, this alters an existing MD5 hash to
|
||||
* reflect the addition of 16 longwords of new data. MD5Update blocks
|
||||
* the data and converts bytes into longwords for this routine.
|
||||
*/
|
||||
void MD5Transform(mutils_word32 buf[4], mutils_word32 __const in[16])
|
||||
{
|
||||
register mutils_word32 a, b, c, d;
|
||||
|
||||
a = buf[0];
|
||||
b = buf[1];
|
||||
c = buf[2];
|
||||
d = buf[3];
|
||||
|
||||
MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
|
||||
|
||||
MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
|
||||
|
||||
MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
|
||||
|
||||
MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
|
||||
|
||||
buf[0] += a;
|
||||
buf[1] += b;
|
||||
buf[2] += c;
|
||||
buf[3] += d;
|
||||
}
|
||||
|
||||
#endif /* ENABLE_MD5 */
|
||||
@@ -0,0 +1,749 @@
|
||||
/*
|
||||
* Copyright (C) 1998 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
* Copyright (C) 2001 Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
/* $Id: mhash.c,v 1.42 2006/01/10 04:40:48 imipak Exp $ */
|
||||
|
||||
#include <libdefs.h>
|
||||
|
||||
#include <mhash_int.h>
|
||||
|
||||
#include <mhash_crc32.h>
|
||||
#include <mhash_haval.h>
|
||||
#include <mhash_md5.h>
|
||||
#include <mhash_md4.h>
|
||||
#include <mhash_md2.h>
|
||||
#include <mhash_sha1.h>
|
||||
#include <mhash_tiger.h>
|
||||
#include <mhash_ripemd.h>
|
||||
#include <mhash_sha256_sha224.h>
|
||||
#include <mhash_sha512_sha384.h>
|
||||
#include <mhash_adler32.h>
|
||||
#include <mhash_gost.h>
|
||||
#include <mhash_whirlpool.h>
|
||||
#include <mhash_snefru.h>
|
||||
|
||||
/* 19/03/2000 Changes for better thread handling --nikos
|
||||
* Actually it is thread safe.
|
||||
*/
|
||||
|
||||
#define MAX_BLOCK_SIZE 128
|
||||
|
||||
#define MHASH_ENTRY(name, blksize, hash_pblock, state_size, \
|
||||
init_func, hash_func, final_func, deinit_func) \
|
||||
{ (mutils_word8 *) #name, name, blksize, hash_pblock, state_size, \
|
||||
(INIT_FUNC) init_func, (HASH_FUNC) hash_func, \
|
||||
(FINAL_FUNC) final_func, (DEINIT_FUNC) deinit_func }
|
||||
|
||||
struct mhash_hash_entry {
|
||||
mutils_word8 *name;
|
||||
hashid id;
|
||||
mutils_word32 blocksize;
|
||||
mutils_word32 hash_pblock;
|
||||
|
||||
mutils_word32 state_size;
|
||||
INIT_FUNC init_func;
|
||||
HASH_FUNC hash_func;
|
||||
FINAL_FUNC final_func;
|
||||
DEINIT_FUNC deinit_func;
|
||||
};
|
||||
|
||||
static __const mhash_hash_entry algorithms[] = {
|
||||
#if defined(ENABLE_CRC32)
|
||||
MHASH_ENTRY(MHASH_CRC32, 4, 0, sizeof(mutils_word32), mhash_clear_crc32,
|
||||
mhash_crc32, NULL, mhash_get_crc32),
|
||||
MHASH_ENTRY(MHASH_CRC32B, 4, 0, sizeof(mutils_word32), mhash_clear_crc32,
|
||||
mhash_crc32b, NULL, mhash_get_crc32),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_ADLER32)
|
||||
MHASH_ENTRY(MHASH_ADLER32, 4, 0, sizeof(mutils_word32), mhash_clear_adler32,
|
||||
mhash_adler32, NULL, mhash_get_adler32),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_MD5)
|
||||
MHASH_ENTRY(MHASH_MD5, 16, 64, sizeof(MD5_CTX), MD5Init,
|
||||
MD5Update, NULL, MD5Final),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_MD4)
|
||||
MHASH_ENTRY(MHASH_MD4, 16, 64, sizeof(MD4_CTX), MD4Init,
|
||||
MD4Update, NULL, MD4Final),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_MD2)
|
||||
MHASH_ENTRY(MHASH_MD2, 16, 16, sizeof(MD2_CTX), md2_init,
|
||||
md2_update, NULL, md2_digest),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_SHA1)
|
||||
MHASH_ENTRY(MHASH_SHA1, 20, 64, sizeof(SHA_CTX), sha_init,
|
||||
sha_update, sha_final, sha_digest),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_SHA256_SHA224)
|
||||
MHASH_ENTRY(MHASH_SHA256, 32, 64, sizeof( SHA256_SHA224_CTX), sha256_init,
|
||||
sha256_sha224_update, sha256_sha224_final, sha256_digest),
|
||||
MHASH_ENTRY(MHASH_SHA224, 28, 64, sizeof( SHA256_SHA224_CTX), sha224_init,
|
||||
sha256_sha224_update, sha256_sha224_final, sha224_digest),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_SHA512_SHA384)
|
||||
MHASH_ENTRY(MHASH_SHA512, 64, 128, sizeof( SHA512_SHA384_CTX), sha512_init,
|
||||
sha512_sha384_update, sha512_sha384_final, sha512_digest),
|
||||
MHASH_ENTRY(MHASH_SHA384, 48, 128, sizeof( SHA512_SHA384_CTX), sha384_init,
|
||||
sha512_sha384_update, sha512_sha384_final, sha384_digest),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_HAVAL)
|
||||
MHASH_ENTRY(MHASH_HAVAL256, 32, 128, sizeof(havalContext), havalInit256,
|
||||
havalUpdate, NULL, havalFinal),
|
||||
MHASH_ENTRY(MHASH_HAVAL128, 16, 128, sizeof(havalContext), havalInit128,
|
||||
havalUpdate, NULL, havalFinal),
|
||||
MHASH_ENTRY(MHASH_HAVAL160, 20, 128, sizeof(havalContext), havalInit160,
|
||||
havalUpdate, NULL, havalFinal),
|
||||
MHASH_ENTRY(MHASH_HAVAL192, 24, 128, sizeof(havalContext), havalInit192,
|
||||
havalUpdate, NULL, havalFinal),
|
||||
MHASH_ENTRY(MHASH_HAVAL224, 28, 128, sizeof(havalContext), havalInit224,
|
||||
havalUpdate, NULL, havalFinal),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_RIPEMD)
|
||||
MHASH_ENTRY(MHASH_RIPEMD128, 16, 64, sizeof(RIPEMD_CTX), ripemd128_init,
|
||||
ripemd_update, ripemd_final, ripemd_digest),
|
||||
MHASH_ENTRY(MHASH_RIPEMD160, 20, 64, sizeof(RIPEMD_CTX), ripemd160_init,
|
||||
ripemd_update, ripemd_final, ripemd_digest),
|
||||
MHASH_ENTRY(MHASH_RIPEMD256, 32, 64, sizeof(RIPEMD_CTX), ripemd256_init,
|
||||
ripemd_update, ripemd_final, ripemd_digest),
|
||||
MHASH_ENTRY(MHASH_RIPEMD320, 40, 64, sizeof(RIPEMD_CTX), ripemd320_init,
|
||||
ripemd_update, ripemd_final, ripemd_digest),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_TIGER)
|
||||
MHASH_ENTRY(MHASH_TIGER, 24, 64, sizeof(TIGER_CTX), tiger_init,
|
||||
tiger_update, tiger_final, tiger_digest),
|
||||
MHASH_ENTRY(MHASH_TIGER128, 16, 64, sizeof(TIGER_CTX), tiger_init,
|
||||
tiger_update, tiger_final, tiger128_digest),
|
||||
MHASH_ENTRY(MHASH_TIGER160, 20, 64, sizeof(TIGER_CTX), tiger_init,
|
||||
tiger_update, tiger_final, tiger160_digest),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_GOST)
|
||||
MHASH_ENTRY(MHASH_GOST, 32, 0, sizeof(GostHashCtx), gosthash_reset,
|
||||
gosthash_update, NULL, gosthash_final),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_WHIRLPOOL)
|
||||
MHASH_ENTRY(MHASH_WHIRLPOOL, 64, 64, sizeof(WHIRLPOOL_CTX), whirlpool_init,
|
||||
whirlpool_update, whirlpool_final, whirlpool_digest),
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_SNEFRU)
|
||||
MHASH_ENTRY(MHASH_SNEFRU128, 16, 64, sizeof(SNEFRU_CTX), snefru_init,
|
||||
snefru128_update, snefru128_final, snefru128_digest),
|
||||
MHASH_ENTRY(MHASH_SNEFRU256, 32, 64, sizeof(SNEFRU_CTX), snefru_init,
|
||||
snefru256_update, snefru256_final, snefru256_digest),
|
||||
#endif
|
||||
|
||||
{0}
|
||||
};
|
||||
|
||||
#define MHASH_LOOP(b) \
|
||||
__const mhash_hash_entry *p; \
|
||||
for (p = algorithms; p->name != NULL; p++) { b ; }
|
||||
|
||||
#define MHASH_ALG_LOOP(a) \
|
||||
MHASH_LOOP( if (p->id == type) { a; break; } )
|
||||
|
||||
#ifndef MMAX
|
||||
# define MMAX(x,y) (x>y?x:y)
|
||||
#endif
|
||||
|
||||
WIN32DLL_DEFINE mutils_word32 mhash_count(void)
|
||||
{
|
||||
hashid count = 0;
|
||||
|
||||
MHASH_LOOP( count = MMAX( p->id, count) );
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE mutils_word32 mhash_get_block_size(hashid type)
|
||||
{
|
||||
mutils_word32 ret = 0;
|
||||
|
||||
MHASH_ALG_LOOP(ret = p->blocksize);
|
||||
return ret;
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE mutils_word32 _mhash_get_state_size(hashid type)
|
||||
{
|
||||
/* Fixed: Valid state sizes that exceeded maximum
|
||||
positive value for integer would be returned as
|
||||
an error.
|
||||
*/
|
||||
|
||||
mutils_word32 size = 0;
|
||||
|
||||
MHASH_ALG_LOOP(size = p->state_size);
|
||||
return size;
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE INIT_FUNC _mhash_get_init_func(hashid type)
|
||||
{
|
||||
INIT_FUNC func = NULL;
|
||||
|
||||
MHASH_ALG_LOOP(func = p->init_func);
|
||||
return func;
|
||||
}
|
||||
WIN32DLL_DEFINE HASH_FUNC _mhash_get_hash_func(hashid type)
|
||||
{
|
||||
HASH_FUNC func = NULL;
|
||||
|
||||
MHASH_ALG_LOOP(func = p->hash_func);
|
||||
return func;
|
||||
}
|
||||
WIN32DLL_DEFINE FINAL_FUNC _mhash_get_final_func(hashid type)
|
||||
{
|
||||
FINAL_FUNC func = NULL;
|
||||
|
||||
MHASH_ALG_LOOP(func = p->final_func);
|
||||
return func;
|
||||
}
|
||||
WIN32DLL_DEFINE DEINIT_FUNC _mhash_get_deinit_func(hashid type)
|
||||
{
|
||||
DEINIT_FUNC func = NULL;
|
||||
|
||||
MHASH_ALG_LOOP(func = p->deinit_func);
|
||||
return func;
|
||||
}
|
||||
|
||||
|
||||
WIN32DLL_DEFINE hashid mhash_get_mhash_algo( MHASH tmp) {
|
||||
return tmp->algorithm_given;
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE mutils_word8 *mhash_get_hash_name(hashid type)
|
||||
{
|
||||
mutils_word8 *ret = NULL;
|
||||
|
||||
/* avoid prefix */
|
||||
MHASH_ALG_LOOP(ret = p->name);
|
||||
|
||||
if (ret != NULL)
|
||||
{
|
||||
ret += sizeof("MHASH_") - 1;
|
||||
}
|
||||
|
||||
return mutils_strdup(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE __const mutils_word8 *mhash_get_hash_name_static(hashid type)
|
||||
{
|
||||
mutils_word8 *ret = NULL;
|
||||
|
||||
/* avoid prefix */
|
||||
MHASH_ALG_LOOP( ret = p->name);
|
||||
|
||||
if ( ret != NULL)
|
||||
{
|
||||
ret += sizeof("MHASH_") - 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
MHASH mhash_cp(MHASH from) {
|
||||
MHASH ret;
|
||||
|
||||
ret = (MHASH) mutils_malloc(sizeof(MHASH_INSTANCE));
|
||||
|
||||
if (ret == NULL)
|
||||
{
|
||||
return(MHASH_FAILED);
|
||||
}
|
||||
|
||||
mutils_memcpy(ret, from, sizeof(MHASH_INSTANCE));
|
||||
|
||||
/* copy the internal state also */
|
||||
ret->state = (mutils_word8 *) mutils_malloc(ret->state_size);
|
||||
|
||||
if (ret->state == NULL)
|
||||
{
|
||||
mutils_free(ret);
|
||||
return(MHASH_FAILED);
|
||||
}
|
||||
|
||||
mutils_memcpy(ret->state, from->state, ret->state_size);
|
||||
|
||||
/* copy the key in case of hmac*/
|
||||
if (ret->hmac_key_size != 0)
|
||||
{
|
||||
ret->hmac_key = (mutils_word8 *) mutils_malloc(ret->hmac_key_size);
|
||||
|
||||
if (ret == NULL)
|
||||
{
|
||||
mutils_free(ret->state);
|
||||
mutils_free(ret);
|
||||
return(MHASH_FAILED);
|
||||
}
|
||||
|
||||
mutils_memcpy(ret->hmac_key, from->hmac_key, ret->hmac_key_size);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
MHASH mhash_init_int(__const hashid type)
|
||||
{
|
||||
MHASH ret;
|
||||
INIT_FUNC func;
|
||||
|
||||
ret = (MHASH) mutils_malloc(sizeof(MHASH_INSTANCE));
|
||||
if (ret == NULL)
|
||||
{
|
||||
return MHASH_FAILED;
|
||||
}
|
||||
|
||||
mutils_memset(ret, 0, sizeof(MHASH_INSTANCE));
|
||||
|
||||
ret->algorithm_given = type;
|
||||
|
||||
ret->state_size = _mhash_get_state_size(type);
|
||||
if (ret->state_size == 0)
|
||||
{
|
||||
mutils_free(ret);
|
||||
return(MHASH_FAILED);
|
||||
}
|
||||
|
||||
if ( (ret->state = mutils_malloc(ret->state_size)) == NULL)
|
||||
{
|
||||
mutils_free(ret);
|
||||
return(MHASH_FAILED);
|
||||
}
|
||||
|
||||
func = _mhash_get_init_func( type);
|
||||
|
||||
if (func != NULL)
|
||||
{
|
||||
func(ret->state);
|
||||
}
|
||||
else
|
||||
{
|
||||
mutils_free(ret->state);
|
||||
mutils_free(ret);
|
||||
return(MHASH_FAILED);
|
||||
}
|
||||
|
||||
ret->hash_func = _mhash_get_hash_func( type);
|
||||
ret->deinit_func = _mhash_get_deinit_func( type);
|
||||
ret->final_func = _mhash_get_final_func( type);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
/* plaintext should be a multiple of the algorithm's block size */
|
||||
|
||||
mutils_boolean mhash(MHASH td, __const void *plaintext, mutils_word32 size)
|
||||
{
|
||||
|
||||
if (td->hash_func!=NULL)
|
||||
{
|
||||
td->hash_func( td->state, plaintext, size);
|
||||
}
|
||||
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void mhash_deinit(MHASH td, void *result)
|
||||
{
|
||||
|
||||
if (td->final_func != NULL)
|
||||
{
|
||||
td->final_func( td->state);
|
||||
}
|
||||
|
||||
if (td->deinit_func != NULL)
|
||||
{
|
||||
td->deinit_func( td->state, result);
|
||||
}
|
||||
|
||||
if (NULL != td->state)
|
||||
{
|
||||
mutils_free(td->state);
|
||||
}
|
||||
|
||||
mutils_free(td);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void *mhash_end_m(MHASH td, void *(*hash_malloc) (mutils_word32))
|
||||
{
|
||||
void *digest;
|
||||
mutils_word32 size;
|
||||
|
||||
size = mhash_get_block_size( td->algorithm_given);
|
||||
|
||||
digest = mutils_malloc(size);
|
||||
|
||||
if (digest==NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mhash_deinit( td, digest);
|
||||
|
||||
return(digest);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE void *mhash_end(MHASH td)
|
||||
{
|
||||
return(mhash_end_m(td, mutils_malloc));
|
||||
}
|
||||
|
||||
|
||||
WIN32DLL_DEFINE MHASH mhash_init(__const hashid type)
|
||||
{
|
||||
MHASH ret = MHASH_FAILED;
|
||||
|
||||
ret = mhash_init_int(type);
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/* HMAC functions */
|
||||
|
||||
WIN32DLL_DEFINE mutils_word32 mhash_get_hash_pblock(hashid type)
|
||||
{
|
||||
mutils_word32 ret = 0;
|
||||
|
||||
MHASH_ALG_LOOP(ret = p->hash_pblock);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_error mhash_hmac_deinit(MHASH td, void *result)
|
||||
{
|
||||
mutils_word8 *opad;
|
||||
mutils_word8 _opad[MAX_BLOCK_SIZE];
|
||||
MHASH tmptd;
|
||||
mutils_word32 i;
|
||||
mutils_word32 opad_alloc = 0;
|
||||
|
||||
if (td->hmac_block > MAX_BLOCK_SIZE)
|
||||
{
|
||||
opad = mutils_malloc(td->hmac_block);
|
||||
if (opad == NULL)
|
||||
{
|
||||
return(-MUTILS_SYSTEM_RESOURCE_ERROR);
|
||||
}
|
||||
opad_alloc = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
opad = _opad;
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < td->hmac_key_size; i++)
|
||||
{
|
||||
opad[i] = (0x5C) ^ td->hmac_key[i];
|
||||
}
|
||||
|
||||
for (; i < td->hmac_block; i++)
|
||||
{
|
||||
opad[i] = (0x5C);
|
||||
}
|
||||
|
||||
tmptd = mhash_init(td->algorithm_given);
|
||||
mhash(tmptd, opad, td->hmac_block);
|
||||
|
||||
if (td->final_func != NULL)
|
||||
{
|
||||
td->final_func(td->state);
|
||||
}
|
||||
|
||||
if (td->deinit_func != NULL)
|
||||
{
|
||||
td->deinit_func(td->state, result);
|
||||
}
|
||||
|
||||
if (result != NULL)
|
||||
{
|
||||
mhash(tmptd, result,
|
||||
mhash_get_block_size(td->algorithm_given));
|
||||
}
|
||||
|
||||
mutils_free(td->state);
|
||||
|
||||
if (opad_alloc!=0)
|
||||
{
|
||||
mutils_free(opad);
|
||||
}
|
||||
|
||||
mutils_bzero(td->hmac_key, td->hmac_key_size);
|
||||
mutils_free(td->hmac_key);
|
||||
mutils_free(td);
|
||||
|
||||
mhash_deinit(tmptd, result);
|
||||
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void *mhash_hmac_end_m(MHASH td, void *(*hash_malloc) (mutils_word32))
|
||||
{
|
||||
void *digest;
|
||||
|
||||
digest =
|
||||
hash_malloc(mhash_get_block_size
|
||||
(td->algorithm_given));
|
||||
|
||||
if (digest == NULL)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
mhash_hmac_deinit(td, digest);
|
||||
|
||||
return(digest);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE void *mhash_hmac_end(MHASH td)
|
||||
{
|
||||
return mhash_hmac_end_m(td, mutils_malloc);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
MHASH mhash_hmac_init(__const hashid type,
|
||||
void *key, mutils_word32 keysize,
|
||||
mutils_word32 block)
|
||||
{
|
||||
MHASH ret = MHASH_FAILED;
|
||||
MHASH tmptd;
|
||||
mutils_word8 *ipad;
|
||||
mutils_word8 _ipad[MAX_BLOCK_SIZE];
|
||||
mutils_word32 i;
|
||||
mutils_boolean ipad_alloc = MUTILS_FALSE;
|
||||
mutils_boolean res;
|
||||
|
||||
if (block == 0)
|
||||
{
|
||||
block = 64; /* the default for ripemd,md5,sha-1 */
|
||||
}
|
||||
|
||||
ret = mhash_init_int(type);
|
||||
|
||||
if (ret != MHASH_FAILED)
|
||||
{
|
||||
/* Initial hmac calculations */
|
||||
ret->hmac_block = block;
|
||||
|
||||
if ( ret->hmac_block > MAX_BLOCK_SIZE)
|
||||
{
|
||||
ipad = mutils_malloc(ret->hmac_block);
|
||||
if (ipad == NULL)
|
||||
{
|
||||
return MHASH_FAILED;
|
||||
}
|
||||
ipad_alloc = MUTILS_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
ipad = _ipad;
|
||||
}
|
||||
|
||||
if (keysize > ret->hmac_block)
|
||||
{
|
||||
tmptd = mhash_init(type);
|
||||
mhash(tmptd, key, keysize);
|
||||
ret->hmac_key_size = mhash_get_block_size(type);
|
||||
ret->hmac_key = mhash_end(tmptd);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret->hmac_key = mutils_malloc(ret->hmac_block);
|
||||
mutils_bzero(ret->hmac_key, ret->hmac_block);
|
||||
mutils_memcpy(ret->hmac_key, key, keysize);
|
||||
ret->hmac_key_size = ret->hmac_block;
|
||||
}
|
||||
|
||||
/* IPAD */
|
||||
|
||||
for (i = 0; i < ret->hmac_key_size; i++)
|
||||
{
|
||||
ipad[i] = (0x36) ^ ret->hmac_key[i];
|
||||
}
|
||||
|
||||
for (; i < ret->hmac_block; i++)
|
||||
{
|
||||
ipad[i] = (0x36);
|
||||
}
|
||||
|
||||
res = mhash(ret, ipad, ret->hmac_block);
|
||||
|
||||
if (ipad_alloc == MUTILS_TRUE)
|
||||
{
|
||||
mutils_free(ipad);
|
||||
}
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE void mhash_free(void *ptr)
|
||||
{
|
||||
mutils_free(ptr);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Saves the state of a hashing algorithm such that it can be
|
||||
restored at some later point in time using
|
||||
mhash_restore_state().
|
||||
|
||||
mem_size should contain the size of the given _mem pointer.
|
||||
Otherwise the required size will be copied there.
|
||||
|
||||
Original version and idea by Blake Stephen <Stephen.Blake@veritect.com>
|
||||
*/
|
||||
WIN32DLL_DEFINE mutils_error mhash_save_state_mem(MHASH td, void *_mem, mutils_word32 *mem_size )
|
||||
{
|
||||
mutils_word32 tot_size;
|
||||
mutils_word32 pos;
|
||||
mutils_word8 *mem = _mem;
|
||||
|
||||
tot_size = sizeof(td->algorithm_given) + sizeof(td->hmac_key_size)
|
||||
+ sizeof(td->hmac_block) + td->hmac_key_size +
|
||||
+ sizeof(td->state_size) + td->state_size;
|
||||
|
||||
if ( *mem_size < tot_size)
|
||||
{
|
||||
*mem_size = tot_size;
|
||||
return(MUTILS_INVALID_INPUT_BUFFER);
|
||||
}
|
||||
|
||||
if ( mem != NULL)
|
||||
{
|
||||
pos = 0;
|
||||
mutils_memcpy( mem, &td->algorithm_given, sizeof(td->algorithm_given));
|
||||
pos = sizeof( td->algorithm_given);
|
||||
|
||||
mutils_memcpy( &mem[pos], &td->hmac_key_size, sizeof(td->hmac_key_size));
|
||||
pos += sizeof(td->hmac_key_size);
|
||||
|
||||
mutils_memcpy( &mem[pos], &td->hmac_block, sizeof(td->hmac_block));
|
||||
pos += sizeof(td->hmac_block);
|
||||
|
||||
mutils_memcpy( &mem[pos], td->hmac_key, td->hmac_key_size);
|
||||
pos += td->hmac_key_size;
|
||||
|
||||
mutils_memcpy( &mem[pos], &td->state_size, sizeof(td->state_size));
|
||||
pos += sizeof(td->state_size);
|
||||
|
||||
mutils_memcpy( &mem[pos], td->state, td->state_size);
|
||||
pos += td->state_size;
|
||||
|
||||
}
|
||||
return(MUTILS_OK);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Restores the state of a hashing algorithm that was saved
|
||||
using mhash_save_state(). Use like mhash_init.
|
||||
*/
|
||||
WIN32DLL_DEFINE MHASH mhash_restore_state_mem(void* _mem)
|
||||
{
|
||||
mutils_word8 *mem = _mem;
|
||||
hashid algorithm_given;
|
||||
MHASH ret = MHASH_FAILED;
|
||||
mutils_word32 pos;
|
||||
|
||||
if (mem==NULL)
|
||||
{
|
||||
return(ret);
|
||||
}
|
||||
|
||||
mutils_memcpy( &algorithm_given, mem, sizeof(algorithm_given));
|
||||
|
||||
if ((ret = mhash_init(algorithm_given)) == MHASH_FAILED)
|
||||
{
|
||||
return(ret);
|
||||
}
|
||||
|
||||
ret->algorithm_given = algorithm_given;
|
||||
|
||||
pos = sizeof(algorithm_given);
|
||||
|
||||
mutils_memcpy( &ret->hmac_key_size, &mem[pos], sizeof(ret->hmac_key_size));
|
||||
pos += sizeof( ret->hmac_key_size);
|
||||
|
||||
mutils_memcpy( &ret->hmac_block, &mem[pos], sizeof(ret->hmac_block));
|
||||
pos += sizeof(ret->hmac_block);
|
||||
|
||||
if (ret->hmac_key_size != 0)
|
||||
{
|
||||
ret->hmac_key = mutils_malloc(ret->hmac_key_size);
|
||||
if (ret->hmac_key == NULL)
|
||||
{
|
||||
goto freeall;
|
||||
}
|
||||
|
||||
mutils_memcpy( ret->hmac_key, &mem[pos], ret->hmac_key_size);
|
||||
pos += sizeof(ret->hmac_key_size);
|
||||
}
|
||||
|
||||
mutils_memcpy( &ret->state_size, &mem[pos], sizeof(ret->state_size));
|
||||
pos += sizeof( ret->state_size);
|
||||
|
||||
ret->state = mutils_malloc(ret->state_size);
|
||||
if (ret->state==NULL)
|
||||
goto freeall;
|
||||
|
||||
mutils_memcpy( ret->state, &mem[pos], ret->state_size);
|
||||
pos += ret->state_size;
|
||||
|
||||
ret->hash_func = _mhash_get_hash_func( algorithm_given);
|
||||
ret->deinit_func = _mhash_get_deinit_func( algorithm_given);
|
||||
ret->final_func = _mhash_get_final_func( algorithm_given);
|
||||
|
||||
return(ret);
|
||||
|
||||
freeall:
|
||||
/* This uses too much internals
|
||||
*/
|
||||
mutils_free(ret->state);
|
||||
mutils_free(ret->hmac_key);
|
||||
mutils_free(ret);
|
||||
return(MHASH_FAILED);
|
||||
}
|
||||
|
||||
#if defined(WIN32) || defined (__CYGWIN__)
|
||||
WIN32DLL_DEFINE int main (void)
|
||||
{
|
||||
/* empty main function to avoid linker error (see cygwin FAQ) */
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,14 @@
|
||||
#if defined(ENABLE_ADLER32)
|
||||
|
||||
#if !defined(MHASH_ADLER32_H)
|
||||
#define MHASH_ADLER32_H
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
void mhash_clear_adler32(mutils_word32 * adler);
|
||||
void mhash_get_adler32( __const mutils_word32 * adler, void* ret);
|
||||
void mhash_adler32(mutils_word32 * adler, __const void *, mutils_word32 len);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,15 @@
|
||||
#if defined(ENABLE_CRC32)
|
||||
|
||||
#if !defined(__MHASH_CRC32_H)
|
||||
#define __MHASH_CRC32_H
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
void mhash_clear_crc32(mutils_word32 * crc);
|
||||
void mhash_get_crc32( __const mutils_word32 *crc, void *ret);
|
||||
void mhash_crc32(mutils_word32 *crc, __const void *given_buf, mutils_word32 len);
|
||||
void mhash_crc32b(mutils_word32 *crc, __const void *given_buf, mutils_word32 len);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* gosthash.h
|
||||
* 21 Apr 1998 Markku-Juhani Saarinen <mjos@ssh.fi>
|
||||
*
|
||||
* GOST R 34.11-94, Russian Standard Hash Function
|
||||
* header with function prototypes.
|
||||
*
|
||||
* Copyright (c) 1998 SSH Communications Security, Finland
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
#if defined(ENABLE_GOST)
|
||||
|
||||
#if !defined(GOSTHASH_H)
|
||||
#define GOSTHASH_H
|
||||
|
||||
/*
|
||||
State structure
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
typedef struct {
|
||||
mutils_word32 sum[8];
|
||||
mutils_word32 hash[8];
|
||||
mutils_word32 len[8];
|
||||
mutils_word8 partial[32];
|
||||
mutils_word32 partial_bytes;
|
||||
} GostHashCtx;
|
||||
|
||||
/*
|
||||
Compute some lookup-tables that are needed by all other functions.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
void gosthash_init(void);
|
||||
#endif
|
||||
|
||||
/*
|
||||
Clear the state of the given context structure.
|
||||
*/
|
||||
|
||||
void gosthash_reset(GostHashCtx * ctx);
|
||||
|
||||
/*
|
||||
Mix in len bytes of data for the given buffer.
|
||||
*/
|
||||
|
||||
void gosthash_update(GostHashCtx * ctx, __const mutils_word8 * buf, mutils_word32 len);
|
||||
|
||||
/*
|
||||
Compute and save the 32-byte digest.
|
||||
*/
|
||||
|
||||
void gosthash_final(GostHashCtx * ctx, mutils_word8 * digest);
|
||||
|
||||
#endif /*
|
||||
GOSTHASH_H
|
||||
*/
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,46 @@
|
||||
#if defined(ENABLE_HAVAL)
|
||||
|
||||
#if !defined(__MHASH_HAVAL_H)
|
||||
|
||||
#define __MHASH_HAVAL_H
|
||||
|
||||
typedef struct {
|
||||
mutils_word16 passes, hashLength; /* HAVAL parameters */
|
||||
mutils_word32 digest[8]; /* message digest (fingerprint) */
|
||||
mutils_word8 block[128]; /* context data block */
|
||||
mutils_word32 occupied; /* number of occupied bytes in the data block */
|
||||
mutils_word32 bitCount[2]; /* 64-bit message bit count */
|
||||
mutils_word32 temp[8]; /* temporary buffer */
|
||||
} havalContext;
|
||||
|
||||
mutils_error havalInit256( havalContext *hcp);
|
||||
mutils_error havalInit224( havalContext *hcp);
|
||||
mutils_error havalInit192( havalContext *hcp);
|
||||
mutils_error havalInit160( havalContext *hcp);
|
||||
mutils_error havalInit128( havalContext *hcp);
|
||||
|
||||
mutils_error havalInit (havalContext *hcp, mutils_word32 passes, mutils_word32 length);
|
||||
/* Initialize a HAVAL hashing context according to the desired */
|
||||
/* number of passes and hash length. Returns: */
|
||||
/* 0: no error. */
|
||||
/* 1: hcp is NULL. */
|
||||
/* 2: invalid number of passes (must be 3, 4, or 5). */
|
||||
/* 3: invalid hash length (must be 128, 160, 192, 224, or 256). */
|
||||
|
||||
mutils_error havalUpdate (havalContext *hcp, __const mutils_word8 *dataBuffer, mutils_word32 dataLength);
|
||||
/* Updates a HAVAL hashing context with a data block dataBuffer */
|
||||
/* of length dataLength. Returns: */
|
||||
/* 0: no error. */
|
||||
/* 1: hcp is NULL. */
|
||||
|
||||
mutils_error havalFinal (havalContext *hcp, mutils_word8 *digest);
|
||||
/* Finished evaluation of a HAVAL digest, clearing the context. */
|
||||
/* The digest buffer must be large enough to hold the desired */
|
||||
/* hash length. Returns: */
|
||||
/* 0: no error. */
|
||||
/* 1: hcp is NULL. */
|
||||
/* 2: digest is NULL. */
|
||||
|
||||
#endif /* __MHASH_HAVAL_H */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,74 @@
|
||||
#if !defined(__MHASH_INT)
|
||||
#define __MHASH_INT
|
||||
|
||||
#include <mutils/mincludes.h>
|
||||
#include <mutils/mutils.h>
|
||||
|
||||
typedef struct mhash_hash_entry mhash_hash_entry;
|
||||
|
||||
#define MHASH_FAILED ((MHASH) 0x0)
|
||||
|
||||
/* information prototypes */
|
||||
|
||||
mutils_word32 mhash_count(void);
|
||||
mutils_word32 mhash_get_block_size(hashid type);
|
||||
mutils_word8 *mhash_get_hash_name(hashid type);
|
||||
|
||||
/* initializing prototypes */
|
||||
|
||||
MHASH mhash_init(hashid type);
|
||||
MHASH mhash_init_int(hashid type);
|
||||
|
||||
/* update prototype */
|
||||
|
||||
mutils_boolean mhash(MHASH thread, __const void *plaintext, mutils_word32 size);
|
||||
|
||||
/* finalizing prototype */
|
||||
|
||||
void *mhash_end(MHASH thread);
|
||||
|
||||
mutils_word32 mhash_get_hash_pblock(hashid type);
|
||||
|
||||
MHASH hmac_mhash_init(__const hashid type, void *key, mutils_word32 keysize,
|
||||
mutils_word32 block);
|
||||
|
||||
void *hmac_mhash_end(MHASH thread);
|
||||
|
||||
/* Key generation functions */
|
||||
|
||||
#define EMPTY_PROTOTYPES 1
|
||||
|
||||
#if defined(EMPTY_PROTOTYPES)
|
||||
|
||||
mutils_error mhash_keygen();
|
||||
mutils_error mhash_keygen_ext();
|
||||
mutils_word8 *mhash_get_keygen_name();
|
||||
mutils_word32 mhash_get_keygen_salt_size();
|
||||
mutils_word32 mhash_keygen_count();
|
||||
mutils_boolean mhash_keygen_uses_salt();
|
||||
mutils_boolean mhash_keygen_uses_count();
|
||||
mutils_boolean mhash_keygen_uses_hash_algorithm();
|
||||
|
||||
#else
|
||||
|
||||
mutils_error mhash_keygen(keygenid algorithm, hashid opt_algorithm,
|
||||
mutils_word64 count,
|
||||
void *keyword, mutils_word32 keysize,
|
||||
void *salt, mutils_word32 saltsize,
|
||||
mutils_word8 *password, mutils_word32 passwordlen);
|
||||
|
||||
mutils_error mhash_keygen_ext(keygenid algorithm, KEYGEN data,
|
||||
void *keyword, mutils_word32 keysize,
|
||||
mutils_word8 *password, mutils_word32 passwordlen);
|
||||
|
||||
mutils_word8 *mhash_get_keygen_name(hashid type);
|
||||
mutils_word32 mhash_get_keygen_salt_size(keygenid type);
|
||||
mutils_word32 mhash_keygen_count(void);
|
||||
mutils_boolean mhash_keygen_uses_salt(keygenid type);
|
||||
mutils_boolean mhash_keygen_uses_count(keygenid type);
|
||||
mutils_boolean mhash_keygen_uses_hash_algorithm(keygenid type);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/* mhash_md2.h
|
||||
*
|
||||
* The MD2 hash function, described in RFC 1319.
|
||||
*
|
||||
* This code was originally written by Niels Möller for libnettle. It
|
||||
* was altered by B. Poettering to fit the mhash interface. The original
|
||||
* copyright notice follows.
|
||||
*/
|
||||
|
||||
/* Copyright (C) 2003 Niels Möller
|
||||
*
|
||||
* The nettle library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* The nettle 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 Lesser General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the nettle 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.
|
||||
*/
|
||||
|
||||
#if defined(ENABLE_MD2)
|
||||
|
||||
#if !defined(__MHASH_MD2_H_INCLUDED)
|
||||
#define __MHASH_MD2_H_INCLUDED
|
||||
|
||||
#define MD2_DIGEST_SIZE 16
|
||||
#define MD2_DATA_SIZE 16
|
||||
|
||||
typedef struct md2_ctx
|
||||
{
|
||||
mutils_word8 C[MD2_DATA_SIZE];
|
||||
mutils_word8 X[3 * MD2_DATA_SIZE];
|
||||
mutils_word8 buffer[MD2_DATA_SIZE]; /* block buffer */
|
||||
mutils_word32 index; /* pointer into buffer */
|
||||
} MD2_CTX;
|
||||
|
||||
void md2_init(struct md2_ctx *ctx);
|
||||
|
||||
void md2_update(struct md2_ctx *ctx, __const mutils_word8 *data, mutils_word32 length);
|
||||
|
||||
void md2_digest(struct md2_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
|
||||
#endif /* __MHASH_MD2_H_INCLUDED */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,21 @@
|
||||
#if defined(ENABLE_MD4)
|
||||
|
||||
#if !defined(__MHASH_MD4_H)
|
||||
#define __MHASH_MD4_H
|
||||
|
||||
struct MD4Context {
|
||||
mutils_word32 buf[4];
|
||||
mutils_word32 bits[2];
|
||||
mutils_word8 in[64];
|
||||
};
|
||||
|
||||
void MD4Init(struct MD4Context *context);
|
||||
void MD4Update(struct MD4Context *context, mutils_word8 __const *buf, mutils_word32 len);
|
||||
void MD4Final( struct MD4Context *context, mutils_word8 *digest);
|
||||
void MD4Transform(mutils_word32 buf[4], mutils_word32 __const in[16]);
|
||||
|
||||
typedef struct MD4Context MD4_CTX;
|
||||
|
||||
#endif /* !__MHASH_MD4_H */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
#if defined(ENABLE_MD5)
|
||||
|
||||
#if !defined(__MHASH_MD5_H)
|
||||
#define __MHASH_MD5_H
|
||||
|
||||
struct MD5Context {
|
||||
mutils_word32 buf[4];
|
||||
mutils_word32 bits[2];
|
||||
mutils_word8 in[64];
|
||||
};
|
||||
|
||||
void MD5Init(struct MD5Context *context);
|
||||
void MD5Update(struct MD5Context *context, mutils_word8 __const *buf, mutils_word32 len);
|
||||
void MD5Final(struct MD5Context *context, mutils_word8 *digest);
|
||||
void MD5Transform(mutils_word32 buf[4], mutils_word32 __const in[16]);
|
||||
|
||||
/*
|
||||
* This is needed to make RSAREF happy on some MS-DOS compilers.
|
||||
*/
|
||||
typedef struct MD5Context MD5_CTX;
|
||||
|
||||
#endif /* !__MHASH_MD5_H */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,65 @@
|
||||
/* mhash_ripemd.h
|
||||
*
|
||||
* RIPEMD-160 is a 160-bit cryptographic hash function, designed by Hans
|
||||
* Dobbertin, Antoon Bosselaers, and Bart Preneel. It is intended to be
|
||||
* used as a secure replacement for the 128-bit hash functions MD4, MD5,
|
||||
* and RIPEMD
|
||||
* See also: http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html
|
||||
*
|
||||
* RIPEMD-128 is a plug-in substitute for RIPEMD (or MD4 and MD5, for
|
||||
* that matter) with a 128-bit result. 128-bit hash results do not
|
||||
* offer sufficient protection for the next ten years, and
|
||||
* applications using 128-bit hash functions should consider upgrading
|
||||
* to a 160-bit hash function.
|
||||
*
|
||||
* RIPEMD-256 and RIPEMD-320 are optional extensions of, respectively,
|
||||
* RIPEMD-128 and RIPEMD-160, and are intended for applications of
|
||||
* hash functions that require a longer hash result without needing a
|
||||
* larger security level.
|
||||
*/
|
||||
|
||||
/* The following code was written by Nikos Mavroyanopoulos and B.
|
||||
* Poettering for the mhash library.
|
||||
*/
|
||||
|
||||
#if defined(ENABLE_RIPEMD)
|
||||
|
||||
#if !defined(__MHASH_RIPEMD_H)
|
||||
#define __MHASH_RIPEMD_H
|
||||
|
||||
#include <libdefs.h>
|
||||
|
||||
/* The RIPEMD block sizes and message digest sizes, in bytes */
|
||||
|
||||
#define RIPEMD_DATASIZE 64
|
||||
#define RIPEMD_DATALEN 16
|
||||
|
||||
#define RIPEMD128_DIGESTSIZE 16
|
||||
#define RIPEMD160_DIGESTSIZE 20
|
||||
#define RIPEMD256_DIGESTSIZE 32
|
||||
#define RIPEMD320_DIGESTSIZE 40
|
||||
|
||||
#define RIPEMD_STATESIZE 10 /* state size in 32 bit words */
|
||||
|
||||
|
||||
/* The structure for storing RIPEMD info */
|
||||
|
||||
typedef struct ripemd_ctx {
|
||||
mutils_word32 digest[RIPEMD_STATESIZE]; /* chaining varialbles */
|
||||
mutils_word64 bitcount; /* 64-bit bit counter */
|
||||
mutils_word8 block[RIPEMD_DATASIZE]; /* RIPEMD data buffer */
|
||||
mutils_word32 index; /* index into buffer */
|
||||
mutils_word32 digest_len; /* determines the algorithm to use */
|
||||
} RIPEMD_CTX;
|
||||
|
||||
void ripemd128_init(struct ripemd_ctx *ctx);
|
||||
void ripemd160_init(struct ripemd_ctx *ctx);
|
||||
void ripemd256_init(struct ripemd_ctx *ctx);
|
||||
void ripemd320_init(struct ripemd_ctx *ctx);
|
||||
void ripemd_update(struct ripemd_ctx *ctx, mutils_word8 *buffer, mutils_word32 len);
|
||||
void ripemd_final(struct ripemd_ctx *ctx);
|
||||
void ripemd_digest(struct ripemd_ctx *ctx, mutils_word8 *s);
|
||||
|
||||
#endif /* __MHASH_RIPEMD_H */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,59 @@
|
||||
#if defined(ENABLE_SHA1)
|
||||
|
||||
#if !defined(__MHASH_SHA1_H)
|
||||
#define __MHASH_SHA1_H
|
||||
|
||||
#include <libdefs.h>
|
||||
|
||||
#define sha_init mhash_sha_init
|
||||
#define sha_update mhash_sha_update
|
||||
#define sha_final mhash_sha_final
|
||||
#define sha_digest mhash_sha_digest
|
||||
#define sha_copy mhash_sha_copy
|
||||
|
||||
/* The SHA block size and message digest sizes, in bytes */
|
||||
|
||||
#define SHA_DATASIZE 64
|
||||
#define SHA_DATALEN 16
|
||||
#define SHA_DIGESTSIZE 20
|
||||
#define SHA_DIGESTLEN 5
|
||||
/* The structure for storing SHA info */
|
||||
|
||||
typedef struct sha_ctx {
|
||||
mutils_word32 digest[SHA_DIGESTLEN]; /* Message digest */
|
||||
mutils_word32 count_l, count_h; /* 64-bit block count */
|
||||
mutils_word8 block[SHA_DATASIZE]; /* SHA data buffer */
|
||||
mutils_word32 index; /* index into buffer */
|
||||
} SHA_CTX;
|
||||
|
||||
void sha_init(struct sha_ctx *ctx);
|
||||
void sha_update(struct sha_ctx *ctx, mutils_word8 *buffer, mutils_word32 len);
|
||||
void sha_final(struct sha_ctx *ctx);
|
||||
void sha_digest(struct sha_ctx *ctx, mutils_word8 *s);
|
||||
void sha_copy(struct sha_ctx *dest, struct sha_ctx *src);
|
||||
|
||||
#if 1
|
||||
|
||||
#ifndef EXTRACT_UCHAR
|
||||
#define EXTRACT_UCHAR(p) (*(mutils_word8 *)(p))
|
||||
#endif
|
||||
|
||||
#define STRING2INT(s) ((((((EXTRACT_UCHAR(s) << 8) \
|
||||
| EXTRACT_UCHAR(s+1)) << 8) \
|
||||
| EXTRACT_UCHAR(s+2)) << 8) \
|
||||
| EXTRACT_UCHAR(s+3))
|
||||
#else
|
||||
mutils_word32 STRING2INT(mutils_word8 *s)
|
||||
{
|
||||
mutils_word32 r;
|
||||
mutils_word32 i;
|
||||
|
||||
for (i = 0, r = 0; i < 4; i++, s++)
|
||||
r = (r << 8) | *s;
|
||||
return r;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,59 @@
|
||||
/* sha.h
|
||||
*
|
||||
* The sha1 and sha256 hash functions.
|
||||
*/
|
||||
|
||||
/* nettle, low-level cryptographics library
|
||||
*
|
||||
* Copyright (C) 2001 Niels Möller
|
||||
*
|
||||
* The nettle library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* The nettle 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 Lesser General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the nettle 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.
|
||||
*/
|
||||
|
||||
#ifndef NETTLE_SHA_H_INCLUDED
|
||||
#define NETTLE_SHA_H_INCLUDED
|
||||
|
||||
|
||||
/* SHA256 */
|
||||
|
||||
#define SHA256_DIGEST_SIZE 32
|
||||
#define SHA256_DATA_SIZE 64
|
||||
|
||||
/* Digest is kept internally as 8 32-bit words. */
|
||||
#define _SHA256_DIGEST_LENGTH 8
|
||||
|
||||
typedef struct sha256_ctx
|
||||
{
|
||||
mutils_word32 state[_SHA256_DIGEST_LENGTH]; /* State variables */
|
||||
mutils_word32 count_low, count_high; /* 64-bit block count */
|
||||
mutils_word8 block[SHA256_DATA_SIZE]; /* SHA256 data buffer */
|
||||
mutils_word32 index; /* index into buffer */
|
||||
} SHA256_CTX;
|
||||
|
||||
void
|
||||
sha256_init(struct sha256_ctx *ctx);
|
||||
|
||||
void
|
||||
sha256_update(struct sha256_ctx *ctx, __const mutils_word8 *data, mutils_word32 length);
|
||||
|
||||
void
|
||||
sha256_final(struct sha256_ctx *ctx);
|
||||
|
||||
void
|
||||
sha256_digest(__const struct sha256_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
|
||||
#endif /* NETTLE_SHA_H_INCLUDED */
|
||||
@@ -0,0 +1,72 @@
|
||||
/* mhash_sha256_sha224.h
|
||||
*
|
||||
* The sha256 and sha224 hash functions.
|
||||
*/
|
||||
|
||||
/* nettle, low-level cryptographics library
|
||||
*
|
||||
* Copyright (C) 2001 Niels Möller
|
||||
*
|
||||
* The nettle library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* The nettle 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 Lesser General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the nettle 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.
|
||||
*/
|
||||
|
||||
/* The SHA224 support was added by B. Poettering in April 2004. */
|
||||
|
||||
#if defined(ENABLE_SHA256_SHA224)
|
||||
|
||||
#if !defined(__MHASH_SHA256_SHA224_H_INCLUDED)
|
||||
#define __MHASH_SHA256_SHA224_H_INCLUDED
|
||||
|
||||
|
||||
/* SHA256 and SHA224 */
|
||||
|
||||
#define SHA256_DIGEST_SIZE 32
|
||||
#define SHA224_DIGEST_SIZE 28
|
||||
#define SHA256_SHA224_DATA_SIZE 64
|
||||
|
||||
/* State is kept internally as 8 32-bit words. */
|
||||
#define _SHA256_SHA224_DIGEST_LENGTH 8
|
||||
|
||||
typedef struct sha256_sha224_ctx
|
||||
{
|
||||
mutils_word32 state[_SHA256_SHA224_DIGEST_LENGTH]; /* State variables */
|
||||
mutils_word64 bitcount; /* Bit counter */
|
||||
mutils_word8 block[SHA256_SHA224_DATA_SIZE]; /* SHA256/224 data buffer */
|
||||
mutils_word32 index; /* index into buffer */
|
||||
} SHA256_SHA224_CTX;
|
||||
|
||||
void
|
||||
sha256_init(struct sha256_sha224_ctx *ctx);
|
||||
|
||||
void
|
||||
sha224_init(struct sha256_sha224_ctx *ctx);
|
||||
|
||||
void
|
||||
sha256_sha224_update(struct sha256_sha224_ctx *ctx, __const mutils_word8 *data, mutils_word32 length);
|
||||
|
||||
void
|
||||
sha256_sha224_final(struct sha256_sha224_ctx *ctx);
|
||||
|
||||
void
|
||||
sha256_digest(__const struct sha256_sha224_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
void
|
||||
sha224_digest(__const struct sha256_sha224_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
|
||||
#endif /* __MHASH_SHA256_SHA224_H_INCLUDED */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,65 @@
|
||||
/* mhash_sha512_sha384.h
|
||||
*
|
||||
* The sha512 and sha384 hash functions.
|
||||
* Copyright (C) 2004 B. Poettering
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#if defined(ENABLE_SHA512_SHA384)
|
||||
|
||||
#if !defined(__MHASH_SHA512_SHA384_H_INCLUDED)
|
||||
#define __MHASH_SHA512_SHA384_H_INCLUDED
|
||||
|
||||
/* SHA512 and SHA384 */
|
||||
|
||||
#define SHA512_DIGEST_SIZE 64
|
||||
#define SHA384_DIGEST_SIZE 48
|
||||
#define SHA512_SHA384_DATA_SIZE 128
|
||||
|
||||
/* State is kept internally as 8 64-bit words. */
|
||||
#define _SHA512_SHA384_STATE_LENGTH 8
|
||||
|
||||
typedef struct sha512_sha384_ctx
|
||||
{
|
||||
mutils_word64 state[_SHA512_SHA384_STATE_LENGTH]; /* State variables */
|
||||
mutils_word64 bitcount_low, bitcount_high; /* Bit counter */
|
||||
mutils_word8 block[SHA512_SHA384_DATA_SIZE]; /* SHA512/384 data buffer */
|
||||
mutils_word32 index; /* index into buffer */
|
||||
} SHA512_SHA384_CTX;
|
||||
|
||||
void
|
||||
sha512_init(struct sha512_sha384_ctx *ctx);
|
||||
|
||||
void
|
||||
sha384_init(struct sha512_sha384_ctx *ctx);
|
||||
|
||||
void
|
||||
sha512_sha384_update(struct sha512_sha384_ctx *ctx, __const mutils_word8 *data,
|
||||
mutils_word32 length);
|
||||
|
||||
void
|
||||
sha512_sha384_final(struct sha512_sha384_ctx *ctx);
|
||||
|
||||
void
|
||||
sha512_digest(__const struct sha512_sha384_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
void
|
||||
sha384_digest(__const struct sha512_sha384_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
|
||||
#endif /* __MHASH_SHA512_SHA384_H_INCLUDED */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,64 @@
|
||||
/* mhash_snefru.h */
|
||||
|
||||
/* Snefru is a cryptographic hash function invented by Ralph Merkle
|
||||
* which supports 128-bit and 256-bit output. It was named after the
|
||||
* Egyptian Pharaoh Sneferu, continuing the tradition of the Khufu and
|
||||
* Khafre block ciphers.
|
||||
*
|
||||
* Snefru is a public-domain one-way hash function. For more information see
|
||||
* http://www.funet.fi/pub/crypt/mirrors/idea.sec.dsi.unimi.it/rpub.cl.msu.edu/
|
||||
* crypt/docs/merkle-khufu-khafre-snefru.txt.gz
|
||||
*
|
||||
* This code was written by B. Poettering in 2004 for the mhash library. It
|
||||
* is in the public domain.
|
||||
*/
|
||||
|
||||
#if defined(ENABLE_SNEFRU)
|
||||
|
||||
#if !defined(__MHASH_SNEFRU_H_INCLUDED)
|
||||
#define __MHASH_SNEFRU_H_INCLUDED
|
||||
|
||||
#define SNEFRU128_DATA_SIZE 48
|
||||
#define SNEFRU128_DIGEST_SIZE 16
|
||||
#define SNEFRU128_DIGEST_LEN (SNEFRU128_DIGEST_SIZE / 4)
|
||||
|
||||
#define SNEFRU256_DATA_SIZE 32
|
||||
#define SNEFRU256_DIGEST_SIZE 32
|
||||
#define SNEFRU256_DIGEST_LEN (SNEFRU256_DIGEST_SIZE / 4)
|
||||
|
||||
#define SNEFRU_BLOCK_SIZE 64
|
||||
#define SNEFRU_BLOCK_LEN (SNEFRU_BLOCK_SIZE / 4)
|
||||
|
||||
typedef struct snefru_ctx
|
||||
{
|
||||
mutils_word8 buffer[SNEFRU128_DATA_SIZE]; /* buffer of data to hash */
|
||||
mutils_word64 hashlen; /* number of hashed bits */
|
||||
mutils_word32 index; /* index to buffer */
|
||||
mutils_word32 hash[SNEFRU_BLOCK_LEN]; /* the hashing state */
|
||||
} SNEFRU_CTX;
|
||||
|
||||
void
|
||||
snefru_init(struct snefru_ctx *ctx);
|
||||
|
||||
void
|
||||
snefru128_update(struct snefru_ctx *ctx, __const mutils_word8 *data, mutils_word32 length);
|
||||
|
||||
void
|
||||
snefru256_update(struct snefru_ctx *ctx, __const mutils_word8 *data, mutils_word32 length);
|
||||
|
||||
void
|
||||
snefru128_final(struct snefru_ctx *ctx);
|
||||
|
||||
void
|
||||
snefru256_final(struct snefru_ctx *ctx);
|
||||
|
||||
void
|
||||
snefru128_digest(__const struct snefru_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
void
|
||||
snefru256_digest(__const struct snefru_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
|
||||
#endif /* MHASH_SNEFRU_H_INCLUDED */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,66 @@
|
||||
#if defined(ENABLE_TIGER)
|
||||
|
||||
#if !defined(__MHASH_TIGER_H)
|
||||
#define __MHASH_TIGER_H
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#define TIGER_DIGESTSIZE 24
|
||||
#define TIGER160_DIGESTSIZE 20
|
||||
#define TIGER128_DIGESTSIZE 16
|
||||
#define TIGER_DATASIZE 64
|
||||
|
||||
#ifdef TIGER_64BIT
|
||||
|
||||
#define h0init 0x0123456789ABCDEFLL
|
||||
#define h1init 0xFEDCBA9876543210LL
|
||||
#define h2init 0xF096A5B4C3B2E187LL
|
||||
|
||||
#define TIGER_DATALEN 8
|
||||
#define TIGER_DIGESTLEN 3
|
||||
#define TIGER128_DIGESTLEN 2
|
||||
#define TIGER160_DIGESTLEN 2 /* 2.5 actually. */
|
||||
|
||||
typedef struct tiger_ctx {
|
||||
mutils_word64 digest[TIGER_DIGESTLEN]; /* Message digest */
|
||||
mutils_word64 count; /* 64-bit block count */
|
||||
mutils_word8 block[TIGER_DATASIZE]; /* RIPEMD data buffer */
|
||||
mutils_word32 index; /* index into buffer */
|
||||
} TIGER_CTX;
|
||||
|
||||
|
||||
#else
|
||||
|
||||
#define h0init 0x89ABCDEF;
|
||||
#define h1init 0x01234567;
|
||||
#define h2init 0x76543210;
|
||||
#define h3init 0xFEDCBA98;
|
||||
#define h4init 0xC3B2E187;
|
||||
#define h5init 0xF096A5B4;
|
||||
|
||||
#define TIGER_DATALEN 16
|
||||
#define TIGER_DIGESTLEN 6
|
||||
#define TIGER128_DIGESTLEN 4
|
||||
#define TIGER160_DIGESTLEN 5
|
||||
|
||||
typedef struct tiger_ctx {
|
||||
mutils_word32 digest[TIGER_DIGESTLEN]; /* Message digest */
|
||||
mutils_word32 count_l, count_h; /* 64-bit block count */
|
||||
mutils_word8 block[TIGER_DATASIZE]; /* RIPEMD data buffer */
|
||||
mutils_word32 index; /* index into buffer */
|
||||
} TIGER_CTX;
|
||||
|
||||
#endif /* !TIGER_64BIT */
|
||||
|
||||
void tiger_digest(struct tiger_ctx *ctx, mutils_word8 * s);
|
||||
void tiger_digest160(struct tiger_ctx *ctx, mutils_word8 * s);
|
||||
void tiger_digest128(struct tiger_ctx *ctx, mutils_word8 * s);
|
||||
void tiger_final(struct tiger_ctx *ctx);
|
||||
void tiger_update(struct tiger_ctx *ctx, mutils_word8 * buffer, mutils_word32 len);
|
||||
void tiger_init(struct tiger_ctx *ctx);
|
||||
void tiger128_digest(struct tiger_ctx *ctx, mutils_word8 * s);
|
||||
void tiger160_digest(struct tiger_ctx *ctx, mutils_word8 * s);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,46 @@
|
||||
/* mhash_whirlpool.h
|
||||
*
|
||||
* The Whirlpool hashing function. A new 512-bit hashing function
|
||||
* operating on messages less than 2 ** 256 bits in length. The
|
||||
* function structure is designed according to the Wide Trail strategy
|
||||
* and permits a wide variety of implementation trade-offs.
|
||||
*
|
||||
* The following code was written by B. Poettering for the mhash library.
|
||||
* The code is in the public domain. See whirlpool.c for more information.
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined(ENABLE_WHIRLPOOL)
|
||||
|
||||
#if !defined(__MHASH_WHIRLPOOL_H_INCLUDED)
|
||||
#define __MHASH_WHIRLPOOL_H_INCLUDED
|
||||
|
||||
|
||||
#define WHIRLPOOL_DIGEST_SIZE 64
|
||||
#define WHIRLPOOL_DATA_SIZE 64
|
||||
|
||||
|
||||
typedef struct whirlpool_ctx
|
||||
{
|
||||
mutils_word8 buffer[WHIRLPOOL_DATA_SIZE]; /* buffer of data to hash */
|
||||
mutils_word64 hashlen[4]; /* number of hashed bits (256-bit) */
|
||||
mutils_word32 index; /* index to buffer */
|
||||
mutils_word64 hash[WHIRLPOOL_DIGEST_SIZE/8]; /* the hashing state */
|
||||
} WHIRLPOOL_CTX;
|
||||
|
||||
void
|
||||
whirlpool_init(struct whirlpool_ctx *ctx);
|
||||
|
||||
void
|
||||
whirlpool_update(struct whirlpool_ctx *ctx, __const mutils_word8 *data, mutils_word32 length);
|
||||
|
||||
void
|
||||
whirlpool_final(struct whirlpool_ctx *ctx);
|
||||
|
||||
void
|
||||
whirlpool_digest(__const struct whirlpool_ctx *ctx, mutils_word8 *digest);
|
||||
|
||||
|
||||
#endif /* __MHASH_WHIRLPOOL_H_INCLUDED */
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,371 @@
|
||||
/* sha.c - Implementation of the Secure Hash Algorithm
|
||||
*
|
||||
* Copyright (C) 1995, A.M. Kuchling
|
||||
*
|
||||
* Distribute and use freely; there are no restrictions on further
|
||||
* dissemination and usage except those imposed by the laws of your
|
||||
* country of residence.
|
||||
*
|
||||
* Adapted to pike and some cleanup by Niels Möller.
|
||||
*/
|
||||
|
||||
/* $Id: sha1.c,v 1.6 2006/01/08 09:08:29 imipak Exp $ */
|
||||
|
||||
/* SHA: NIST's Secure Hash Algorithm */
|
||||
|
||||
/* Based on SHA code originally posted to sci.crypt by Peter Gutmann
|
||||
in message <30ajo5$oe8@ccu2.auckland.ac.nz>.
|
||||
Modified to test for endianness on creation of SHA objects by AMK.
|
||||
Also, the original specification of SHA was found to have a weakness
|
||||
by NSA/NIST. This code implements the fixed version of SHA.
|
||||
*/
|
||||
|
||||
/* Here's the first paragraph of Peter Gutmann's posting:
|
||||
|
||||
The following is my SHA (FIPS 180) code updated to allow use of the "fixed"
|
||||
SHA, thanks to Jim Gillogly and an anonymous contributor for the information on
|
||||
what's changed in the new version. The fix is a simple change which involves
|
||||
adding a single rotate in the initial expansion function. It is unknown
|
||||
whether this is an optimal solution to the problem which was discovered in the
|
||||
SHA or whether it's simply a bandaid which fixes the problem with a minimum of
|
||||
effort (for example the reengineering of a great many Capstone chips).
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_SHA1
|
||||
|
||||
#include "mhash_sha1.h"
|
||||
|
||||
void sha_copy(struct sha_ctx *dest, struct sha_ctx *src)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
dest->count_l=src->count_l;
|
||||
dest->count_h=src->count_h;
|
||||
for(i=0; i<SHA_DIGESTLEN; i++)
|
||||
{
|
||||
dest->digest[i]=src->digest[i];
|
||||
}
|
||||
for(i=0; i < src->index; i++)
|
||||
{
|
||||
dest->block[i] = src->block[i];
|
||||
}
|
||||
dest->index = src->index;
|
||||
}
|
||||
|
||||
|
||||
/* The SHA f()-functions. The f1 and f3 functions can be optimized to
|
||||
save one boolean operation each - thanks to Rich Schroeppel,
|
||||
rcs@cs.arizona.edu for discovering this */
|
||||
|
||||
#define f1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) /* Rounds 0-19 */
|
||||
#define f2(x,y,z) ( x ^ y ^ z ) /* Rounds 20-39 */
|
||||
#define f3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) /* Rounds 40-59 */
|
||||
#define f4(x,y,z) ( x ^ y ^ z ) /* Rounds 60-79 */
|
||||
|
||||
/* The SHA Mysterious Constants */
|
||||
|
||||
#define K1 0x5A827999L /* Rounds 0-19 */
|
||||
#define K2 0x6ED9EBA1L /* Rounds 20-39 */
|
||||
#define K3 0x8F1BBCDCL /* Rounds 40-59 */
|
||||
#define K4 0xCA62C1D6L /* Rounds 60-79 */
|
||||
|
||||
/* SHA initial values */
|
||||
|
||||
#define h0init 0x67452301L
|
||||
#define h1init 0xEFCDAB89L
|
||||
#define h2init 0x98BADCFEL
|
||||
#define h3init 0x10325476L
|
||||
#define h4init 0xC3D2E1F0L
|
||||
|
||||
/* 32-bit rotate left - kludged with shifts */
|
||||
|
||||
#define ROTL(n,X) ( ( (X) << (n) ) | ( (X) >> ( 32 - (n) ) ) )
|
||||
|
||||
/* The initial expanding function. The hash function is defined over an
|
||||
80-word expanded input array W, where the first 16 are copies of the input
|
||||
data, and the remaining 64 are defined by
|
||||
|
||||
W[ i ] = W[ i - 16 ] ^ W[ i - 14 ] ^ W[ i - 8 ] ^ W[ i - 3 ]
|
||||
|
||||
This implementation generates these values on the fly in a circular
|
||||
buffer - thanks to Colin Plumb, colin@nyx10.cs.du.edu for this
|
||||
optimization.
|
||||
|
||||
The updated SHA changes the expanding function by adding a rotate of 1
|
||||
bit. Thanks to Jim Gillogly, jim@rand.org, and an anonymous contributor
|
||||
for this information */
|
||||
|
||||
#define expand(W,i) ( W[ i & 15 ] = \
|
||||
ROTL( 1, ( W[ i & 15 ] ^ W[ (i - 14) & 15 ] ^ \
|
||||
W[ (i - 8) & 15 ] ^ W[ (i - 3) & 15 ] ) ) )
|
||||
|
||||
|
||||
/* The prototype SHA sub-round. The fundamental sub-round is:
|
||||
|
||||
a' = e + ROTL( 5, a ) + f( b, c, d ) + k + data;
|
||||
b' = a;
|
||||
c' = ROTL( 30, b );
|
||||
d' = c;
|
||||
e' = d;
|
||||
|
||||
but this is implemented by unrolling the loop 5 times and renaming the
|
||||
variables ( e, a, b, c, d ) = ( a', b', c', d', e' ) each iteration.
|
||||
This code is then replicated 20 times for each of the 4 functions, using
|
||||
the next 20 values from the W[] array each time */
|
||||
|
||||
#define subRound(a, b, c, d, e, f, k, data) \
|
||||
( e += ROTL( 5, a ) + f( b, c, d ) + k + data, b = ROTL( 30, b ) )
|
||||
|
||||
/* Initialize the SHA values */
|
||||
|
||||
void sha_init(struct sha_ctx *ctx)
|
||||
{
|
||||
/* Set the h-vars to their initial values */
|
||||
ctx->digest[ 0 ] = h0init;
|
||||
ctx->digest[ 1 ] = h1init;
|
||||
ctx->digest[ 2 ] = h2init;
|
||||
ctx->digest[ 3 ] = h3init;
|
||||
ctx->digest[ 4 ] = h4init;
|
||||
|
||||
/* Initialize bit count */
|
||||
ctx->count_l = ctx->count_h = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
/* Perform the SHA transformation. Note that this code, like MD5, seems to
|
||||
break some optimizing compilers due to the complexity of the expressions
|
||||
and the size of the basic block. It may be necessary to split it into
|
||||
sections, e.g. based on the four subrounds
|
||||
|
||||
Note that this function destroys the data area */
|
||||
|
||||
static void sha_transform(struct sha_ctx *ctx, mutils_word32 *data )
|
||||
{
|
||||
register mutils_word32 A, B, C, D, E; /* Local vars */
|
||||
|
||||
/* Set up first buffer and local data buffer */
|
||||
A = ctx->digest[0];
|
||||
B = ctx->digest[1];
|
||||
C = ctx->digest[2];
|
||||
D = ctx->digest[3];
|
||||
E = ctx->digest[4];
|
||||
|
||||
/* Heavy mangling, in 4 sub-rounds of 20 interations each. */
|
||||
subRound( A, B, C, D, E, f1, K1, data[ 0] );
|
||||
subRound( E, A, B, C, D, f1, K1, data[ 1] );
|
||||
subRound( D, E, A, B, C, f1, K1, data[ 2] );
|
||||
subRound( C, D, E, A, B, f1, K1, data[ 3] );
|
||||
subRound( B, C, D, E, A, f1, K1, data[ 4] );
|
||||
subRound( A, B, C, D, E, f1, K1, data[ 5] );
|
||||
subRound( E, A, B, C, D, f1, K1, data[ 6] );
|
||||
subRound( D, E, A, B, C, f1, K1, data[ 7] );
|
||||
subRound( C, D, E, A, B, f1, K1, data[ 8] );
|
||||
subRound( B, C, D, E, A, f1, K1, data[ 9] );
|
||||
subRound( A, B, C, D, E, f1, K1, data[10] );
|
||||
subRound( E, A, B, C, D, f1, K1, data[11] );
|
||||
subRound( D, E, A, B, C, f1, K1, data[12] );
|
||||
subRound( C, D, E, A, B, f1, K1, data[13] );
|
||||
subRound( B, C, D, E, A, f1, K1, data[14] );
|
||||
subRound( A, B, C, D, E, f1, K1, data[15] );
|
||||
subRound( E, A, B, C, D, f1, K1, expand( data, 16 ) );
|
||||
subRound( D, E, A, B, C, f1, K1, expand( data, 17 ) );
|
||||
subRound( C, D, E, A, B, f1, K1, expand( data, 18 ) );
|
||||
subRound( B, C, D, E, A, f1, K1, expand( data, 19 ) );
|
||||
|
||||
subRound( A, B, C, D, E, f2, K2, expand( data, 20 ) );
|
||||
subRound( E, A, B, C, D, f2, K2, expand( data, 21 ) );
|
||||
subRound( D, E, A, B, C, f2, K2, expand( data, 22 ) );
|
||||
subRound( C, D, E, A, B, f2, K2, expand( data, 23 ) );
|
||||
subRound( B, C, D, E, A, f2, K2, expand( data, 24 ) );
|
||||
subRound( A, B, C, D, E, f2, K2, expand( data, 25 ) );
|
||||
subRound( E, A, B, C, D, f2, K2, expand( data, 26 ) );
|
||||
subRound( D, E, A, B, C, f2, K2, expand( data, 27 ) );
|
||||
subRound( C, D, E, A, B, f2, K2, expand( data, 28 ) );
|
||||
subRound( B, C, D, E, A, f2, K2, expand( data, 29 ) );
|
||||
subRound( A, B, C, D, E, f2, K2, expand( data, 30 ) );
|
||||
subRound( E, A, B, C, D, f2, K2, expand( data, 31 ) );
|
||||
subRound( D, E, A, B, C, f2, K2, expand( data, 32 ) );
|
||||
subRound( C, D, E, A, B, f2, K2, expand( data, 33 ) );
|
||||
subRound( B, C, D, E, A, f2, K2, expand( data, 34 ) );
|
||||
subRound( A, B, C, D, E, f2, K2, expand( data, 35 ) );
|
||||
subRound( E, A, B, C, D, f2, K2, expand( data, 36 ) );
|
||||
subRound( D, E, A, B, C, f2, K2, expand( data, 37 ) );
|
||||
subRound( C, D, E, A, B, f2, K2, expand( data, 38 ) );
|
||||
subRound( B, C, D, E, A, f2, K2, expand( data, 39 ) );
|
||||
|
||||
subRound( A, B, C, D, E, f3, K3, expand( data, 40 ) );
|
||||
subRound( E, A, B, C, D, f3, K3, expand( data, 41 ) );
|
||||
subRound( D, E, A, B, C, f3, K3, expand( data, 42 ) );
|
||||
subRound( C, D, E, A, B, f3, K3, expand( data, 43 ) );
|
||||
subRound( B, C, D, E, A, f3, K3, expand( data, 44 ) );
|
||||
subRound( A, B, C, D, E, f3, K3, expand( data, 45 ) );
|
||||
subRound( E, A, B, C, D, f3, K3, expand( data, 46 ) );
|
||||
subRound( D, E, A, B, C, f3, K3, expand( data, 47 ) );
|
||||
subRound( C, D, E, A, B, f3, K3, expand( data, 48 ) );
|
||||
subRound( B, C, D, E, A, f3, K3, expand( data, 49 ) );
|
||||
subRound( A, B, C, D, E, f3, K3, expand( data, 50 ) );
|
||||
subRound( E, A, B, C, D, f3, K3, expand( data, 51 ) );
|
||||
subRound( D, E, A, B, C, f3, K3, expand( data, 52 ) );
|
||||
subRound( C, D, E, A, B, f3, K3, expand( data, 53 ) );
|
||||
subRound( B, C, D, E, A, f3, K3, expand( data, 54 ) );
|
||||
subRound( A, B, C, D, E, f3, K3, expand( data, 55 ) );
|
||||
subRound( E, A, B, C, D, f3, K3, expand( data, 56 ) );
|
||||
subRound( D, E, A, B, C, f3, K3, expand( data, 57 ) );
|
||||
subRound( C, D, E, A, B, f3, K3, expand( data, 58 ) );
|
||||
subRound( B, C, D, E, A, f3, K3, expand( data, 59 ) );
|
||||
|
||||
subRound( A, B, C, D, E, f4, K4, expand( data, 60 ) );
|
||||
subRound( E, A, B, C, D, f4, K4, expand( data, 61 ) );
|
||||
subRound( D, E, A, B, C, f4, K4, expand( data, 62 ) );
|
||||
subRound( C, D, E, A, B, f4, K4, expand( data, 63 ) );
|
||||
subRound( B, C, D, E, A, f4, K4, expand( data, 64 ) );
|
||||
subRound( A, B, C, D, E, f4, K4, expand( data, 65 ) );
|
||||
subRound( E, A, B, C, D, f4, K4, expand( data, 66 ) );
|
||||
subRound( D, E, A, B, C, f4, K4, expand( data, 67 ) );
|
||||
subRound( C, D, E, A, B, f4, K4, expand( data, 68 ) );
|
||||
subRound( B, C, D, E, A, f4, K4, expand( data, 69 ) );
|
||||
subRound( A, B, C, D, E, f4, K4, expand( data, 70 ) );
|
||||
subRound( E, A, B, C, D, f4, K4, expand( data, 71 ) );
|
||||
subRound( D, E, A, B, C, f4, K4, expand( data, 72 ) );
|
||||
subRound( C, D, E, A, B, f4, K4, expand( data, 73 ) );
|
||||
subRound( B, C, D, E, A, f4, K4, expand( data, 74 ) );
|
||||
subRound( A, B, C, D, E, f4, K4, expand( data, 75 ) );
|
||||
subRound( E, A, B, C, D, f4, K4, expand( data, 76 ) );
|
||||
subRound( D, E, A, B, C, f4, K4, expand( data, 77 ) );
|
||||
subRound( C, D, E, A, B, f4, K4, expand( data, 78 ) );
|
||||
subRound( B, C, D, E, A, f4, K4, expand( data, 79 ) );
|
||||
|
||||
/* Build message digest */
|
||||
ctx->digest[0] += A;
|
||||
ctx->digest[1] += B;
|
||||
ctx->digest[2] += C;
|
||||
ctx->digest[3] += D;
|
||||
ctx->digest[4] += E;
|
||||
}
|
||||
|
||||
|
||||
static void sha_block(struct sha_ctx *ctx, mutils_word8 *block)
|
||||
{
|
||||
mutils_word32 data[SHA_DATALEN];
|
||||
mutils_word32 i;
|
||||
|
||||
/* Update block count */
|
||||
if (!++ctx->count_l)
|
||||
{
|
||||
++ctx->count_h;
|
||||
}
|
||||
|
||||
/* Endian independent conversion */
|
||||
for (i = 0; i<SHA_DATALEN; i++, block += 4)
|
||||
{
|
||||
data[i] = STRING2INT(block);
|
||||
}
|
||||
|
||||
sha_transform(ctx, data);
|
||||
}
|
||||
|
||||
void sha_update(struct sha_ctx *ctx, mutils_word8 *buffer, mutils_word32 len)
|
||||
{
|
||||
if (ctx->index)
|
||||
{ /* Try to fill partial block */
|
||||
mutils_word32 left = SHA_DATASIZE - ctx->index;
|
||||
if (len < left)
|
||||
{
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, len);
|
||||
ctx->index += len;
|
||||
return; /* Finished */
|
||||
}
|
||||
else
|
||||
{
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, left);
|
||||
sha_block(ctx, ctx->block);
|
||||
buffer += left;
|
||||
len -= left;
|
||||
}
|
||||
}
|
||||
while (len >= SHA_DATASIZE)
|
||||
{
|
||||
sha_block(ctx, buffer);
|
||||
buffer += SHA_DATASIZE;
|
||||
len -= SHA_DATASIZE;
|
||||
}
|
||||
if ((ctx->index = len)) /* This assignment is intended */
|
||||
{
|
||||
/* Buffer leftovers */
|
||||
mutils_memcpy(ctx->block, buffer, len);
|
||||
}
|
||||
}
|
||||
|
||||
/* Final wrapup - pad to SHA_DATASIZE-byte boundary with the bit pattern
|
||||
1 0* (64-bit count of bits processed, MSB-first) */
|
||||
|
||||
void sha_final(struct sha_ctx *ctx)
|
||||
{
|
||||
mutils_word32 data[SHA_DATALEN];
|
||||
mutils_word32 i;
|
||||
mutils_word32 words;
|
||||
|
||||
i = ctx->index;
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
ctx->block[i++] = 0x80;
|
||||
|
||||
/* Fill rest of word */
|
||||
for( ; i & 3; i++)
|
||||
{
|
||||
ctx->block[i] = 0;
|
||||
}
|
||||
/* i is now a multiple of the word size 4 */
|
||||
words = i >> 2;
|
||||
for (i = 0; i < words; i++)
|
||||
{
|
||||
data[i] = STRING2INT(ctx->block + 4*i);
|
||||
}
|
||||
|
||||
if (words > (SHA_DATALEN-2))
|
||||
{ /* No room for length in this block. Process it and
|
||||
* pad with another one */
|
||||
for (i = words ; i < SHA_DATALEN; i++)
|
||||
{
|
||||
data[i] = 0;
|
||||
}
|
||||
sha_transform(ctx, data);
|
||||
for (i = 0; i < (SHA_DATALEN-2); i++)
|
||||
{
|
||||
data[i] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = words ; i < SHA_DATALEN - 2; i++)
|
||||
{
|
||||
data[i] = 0;
|
||||
}
|
||||
}
|
||||
/* Theres 512 = 2^9 bits in one block */
|
||||
data[SHA_DATALEN-2] = (ctx->count_h << 9) | (ctx->count_l >> 23);
|
||||
data[SHA_DATALEN-1] = (ctx->count_l << 9) | (ctx->index << 3);
|
||||
sha_transform(ctx, data);
|
||||
}
|
||||
|
||||
void sha_digest(struct sha_ctx *ctx, mutils_word8 *s)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
if (s!=NULL)
|
||||
{
|
||||
for (i = 0; i < SHA_DIGESTLEN; i++)
|
||||
{
|
||||
*s++ = ctx->digest[i] >> 24;
|
||||
*s++ = 0xff & (ctx->digest[i] >> 16);
|
||||
*s++ = 0xff & (ctx->digest[i] >> 8);
|
||||
*s++ = 0xff & ctx->digest[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* ENABLE_SHA1 */
|
||||
@@ -0,0 +1,318 @@
|
||||
/* sha256.h
|
||||
*
|
||||
* The sha256 hash function.
|
||||
*/
|
||||
|
||||
/* nettle, low-level cryptographics library
|
||||
*
|
||||
* Copyright (C) 2001 Niels Möller
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* The nettle 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 Lesser General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the nettle 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.
|
||||
*/
|
||||
|
||||
/* Modelled after the sha1.c code by Peter Gutmann. */
|
||||
|
||||
/* This has been modified in order to fit in mhash.
|
||||
* --nmav.
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_SHA256
|
||||
|
||||
#include "mhash_sha256.h"
|
||||
#include "mhash_sha1.h"
|
||||
|
||||
/* A block, treated as a sequence of 32-bit words. */
|
||||
#define SHA256_DATA_LENGTH 16
|
||||
|
||||
#define ROTR(n,x) ((x)>>(n) | ((x)<<(32-(n))))
|
||||
#define SHR(n,x) ((x)>>(n))
|
||||
|
||||
/* The SHA256 functions. The Choice function is the same as the SHA1
|
||||
function f1, and the majority function is the same as the SHA1 f3
|
||||
function. They can be optimized to save one boolean operation each
|
||||
- thanks to Rich Schroeppel, rcs@cs.arizona.edu for discovering
|
||||
this */
|
||||
|
||||
/* #define Choice(x,y,z) ( ( (x) & (y) ) | ( ~(x) & (z) ) ) */
|
||||
#define Choice(x,y,z) ( (z) ^ ( (x) & ( (y) ^ (z) ) ) )
|
||||
/* #define Majority(x,y,z) ( ((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)) ) */
|
||||
#define Majority(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) )
|
||||
|
||||
#define S0(x) (ROTR(2,(x)) ^ ROTR(13,(x)) ^ ROTR(22,(x)))
|
||||
#define S1(x) (ROTR(6,(x)) ^ ROTR(11,(x)) ^ ROTR(25,(x)))
|
||||
|
||||
#define s0(x) (ROTR(7,(x)) ^ ROTR(18,(x)) ^ SHR(3,(x)))
|
||||
#define s1(x) (ROTR(17,(x)) ^ ROTR(19,(x)) ^ SHR(10,(x)))
|
||||
|
||||
/* Generated by the shadata program. */
|
||||
static __const mutils_word32 K[64] = {
|
||||
0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
|
||||
0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
|
||||
0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
|
||||
0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
|
||||
0xe49b69c1UL, 0xefbe4786UL, 0xfc19dc6UL, 0x240ca1ccUL,
|
||||
0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
|
||||
0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
|
||||
0xc6e00bf3UL, 0xd5a79147UL, 0x6ca6351UL, 0x14292967UL,
|
||||
0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
|
||||
0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
|
||||
0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
|
||||
0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
|
||||
0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
|
||||
0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
|
||||
0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
|
||||
0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL,
|
||||
};
|
||||
|
||||
/* The initial expanding function. The hash function is defined over an
|
||||
64-word expanded input array W, where the first 16 are copies of the input
|
||||
data, and the remaining 64 are defined by
|
||||
|
||||
W[ t ] = s1(W[t-2] + W[t-7] + s0(W[i-15] + W[i-16]
|
||||
|
||||
This implementation generates these values on the fly in a circular
|
||||
buffer - thanks to Colin Plumb, colin@nyx10.cs.du.edu for this
|
||||
optimization.
|
||||
*/
|
||||
|
||||
#define EXPAND(W,i) \
|
||||
( W[(i) & 15 ] += (s1(W[((i)-2) & 15]) + W[((i)-7) & 15] + s0(W[((i)-15) & 15])) )
|
||||
|
||||
/* The prototype SHA sub-round. The fundamental sub-round is:
|
||||
|
||||
T1 = h + S1(e) + Choice(e,f,g) + K[t] + W[t]
|
||||
T2 = S0(a) + Majority(a,b,c)
|
||||
a' = T1+T2
|
||||
b' = a
|
||||
c' = b
|
||||
d' = c
|
||||
e' = d + T1
|
||||
f' = e
|
||||
g' = f
|
||||
h' = g
|
||||
|
||||
but this is implemented by unrolling the loop 8 times and renaming
|
||||
the variables
|
||||
( h, a, b, c, d, e, f, g ) = ( a, b, c, d, e, f, g, h ) each
|
||||
iteration. This code is then replicated 8, using the next 8 values
|
||||
from the W[] array each time */
|
||||
|
||||
/* FIXME: We can probably reorder this to optimize away at least one
|
||||
* of T1 and T2. It's crucial that DATA is only used once, as that
|
||||
* argument will have side effects. */
|
||||
#define ROUND(a,b,c,d,e,f,g,h,k,data) do { \
|
||||
mutils_word32 T1 = h + S1(e) + Choice(e,f,g) + k + data; \
|
||||
mutils_word32 T2 = S0(a) + Majority(a,b,c); \
|
||||
d += T1; \
|
||||
h = T1 + T2; \
|
||||
} while (0)
|
||||
|
||||
/* Initialize the SHA values */
|
||||
|
||||
void sha256_init(struct sha256_ctx *ctx)
|
||||
{
|
||||
/* Initial values, also generated by the shadata program. */
|
||||
static __const mutils_word32 H0[_SHA256_DIGEST_LENGTH] = {
|
||||
0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL,
|
||||
0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL,
|
||||
};
|
||||
|
||||
mutils_memcpy(ctx->state, H0, sizeof(H0));
|
||||
|
||||
/* Initialize bit count */
|
||||
ctx->count_low = ctx->count_high = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
/* Perform the SHA transformation. Note that this code, like MD5, seems to
|
||||
break some optimizing compilers due to the complexity of the expressions
|
||||
and the size of the basic block. It may be necessary to split it into
|
||||
sections, e.g. based on the four subrounds
|
||||
|
||||
Note that this function destroys the data area */
|
||||
|
||||
static void sha256_transform(mutils_word32 *state, mutils_word32 *data)
|
||||
{
|
||||
mutils_word32 A, B, C, D, E, F, G, H; /* Local vars */
|
||||
mutils_word8 i;
|
||||
__const mutils_word32 *k;
|
||||
mutils_word32 *d;
|
||||
|
||||
/* Set up first buffer and local data buffer */
|
||||
A = state[0];
|
||||
B = state[1];
|
||||
C = state[2];
|
||||
D = state[3];
|
||||
E = state[4];
|
||||
F = state[5];
|
||||
G = state[6];
|
||||
H = state[7];
|
||||
|
||||
/* Heavy mangling */
|
||||
/* First 16 subrounds that act on the original data */
|
||||
|
||||
for (i = 0, k = K, d = data; i < 16; i += 8, k += 8, d += 8) {
|
||||
ROUND(A, B, C, D, E, F, G, H, k[0], d[0]);
|
||||
ROUND(H, A, B, C, D, E, F, G, k[1], d[1]);
|
||||
ROUND(G, H, A, B, C, D, E, F, k[2], d[2]);
|
||||
ROUND(F, G, H, A, B, C, D, E, k[3], d[3]);
|
||||
ROUND(E, F, G, H, A, B, C, D, k[4], d[4]);
|
||||
ROUND(D, E, F, G, H, A, B, C, k[5], d[5]);
|
||||
ROUND(C, D, E, F, G, H, A, B, k[6], d[6]);
|
||||
ROUND(B, C, D, E, F, G, H, A, k[7], d[7]);
|
||||
}
|
||||
|
||||
for (; i < 64; i += 16, k += 16) {
|
||||
ROUND(A, B, C, D, E, F, G, H, k[0], EXPAND(data, 0));
|
||||
ROUND(H, A, B, C, D, E, F, G, k[1], EXPAND(data, 1));
|
||||
ROUND(G, H, A, B, C, D, E, F, k[2], EXPAND(data, 2));
|
||||
ROUND(F, G, H, A, B, C, D, E, k[3], EXPAND(data, 3));
|
||||
ROUND(E, F, G, H, A, B, C, D, k[4], EXPAND(data, 4));
|
||||
ROUND(D, E, F, G, H, A, B, C, k[5], EXPAND(data, 5));
|
||||
ROUND(C, D, E, F, G, H, A, B, k[6], EXPAND(data, 6));
|
||||
ROUND(B, C, D, E, F, G, H, A, k[7], EXPAND(data, 7));
|
||||
ROUND(A, B, C, D, E, F, G, H, k[8], EXPAND(data, 8));
|
||||
ROUND(H, A, B, C, D, E, F, G, k[9], EXPAND(data, 9));
|
||||
ROUND(G, H, A, B, C, D, E, F, k[10], EXPAND(data, 10));
|
||||
ROUND(F, G, H, A, B, C, D, E, k[11], EXPAND(data, 11));
|
||||
ROUND(E, F, G, H, A, B, C, D, k[12], EXPAND(data, 12));
|
||||
ROUND(D, E, F, G, H, A, B, C, k[13], EXPAND(data, 13));
|
||||
ROUND(C, D, E, F, G, H, A, B, k[14], EXPAND(data, 14));
|
||||
ROUND(B, C, D, E, F, G, H, A, k[15], EXPAND(data, 15));
|
||||
}
|
||||
|
||||
/* Update state */
|
||||
state[0] += A;
|
||||
state[1] += B;
|
||||
state[2] += C;
|
||||
state[3] += D;
|
||||
state[4] += E;
|
||||
state[5] += F;
|
||||
state[6] += G;
|
||||
state[7] += H;
|
||||
}
|
||||
|
||||
static void sha256_block(struct sha256_ctx *ctx, __const mutils_word8 *block)
|
||||
{
|
||||
mutils_word32 data[SHA256_DATA_LENGTH];
|
||||
mutils_word16 i;
|
||||
|
||||
/* Update block count */
|
||||
if (!++ctx->count_low)
|
||||
++ctx->count_high;
|
||||
|
||||
/* Endian independent conversion */
|
||||
for (i = 0; i < SHA256_DATA_LENGTH; i++, block += 4)
|
||||
data[i] = STRING2INT(block);
|
||||
|
||||
sha256_transform(ctx->state, data);
|
||||
}
|
||||
|
||||
void
|
||||
sha256_update(struct sha256_ctx *ctx, __const mutils_word8 *buffer, mutils_word32 length)
|
||||
{
|
||||
mutils_word32 left;
|
||||
|
||||
if (ctx->index) { /* Try to fill partial block */
|
||||
left = SHA256_DATA_SIZE - ctx->index;
|
||||
if (length < left) {
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, length);
|
||||
ctx->index += length;
|
||||
return; /* Finished */
|
||||
} else {
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, left);
|
||||
sha256_block(ctx, ctx->block);
|
||||
buffer += left;
|
||||
length -= left;
|
||||
}
|
||||
}
|
||||
while (length >= SHA256_DATA_SIZE) {
|
||||
sha256_block(ctx, buffer);
|
||||
buffer += SHA256_DATA_SIZE;
|
||||
length -= SHA256_DATA_SIZE;
|
||||
}
|
||||
/* Buffer leftovers */
|
||||
/* NOTE: The corresponding sha1 code checks for the special case length == 0.
|
||||
* That seems supoptimal, as I suspect it increases the number of branches. */
|
||||
|
||||
mutils_memcpy(ctx->block, buffer, length);
|
||||
ctx->index = length;
|
||||
}
|
||||
|
||||
/* Final wrapup - pad to SHA1_DATA_SIZE-byte boundary with the bit pattern
|
||||
1 0* (64-bit count of bits processed, MSB-first) */
|
||||
|
||||
void sha256_final(struct sha256_ctx *ctx)
|
||||
{
|
||||
mutils_word32 data[SHA256_DATA_LENGTH];
|
||||
mutils_word32 i;
|
||||
mutils_word32 words;
|
||||
|
||||
i = ctx->index;
|
||||
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
|
||||
/* assert(i < SHA256_DATA_SIZE);
|
||||
*/
|
||||
ctx->block[i++] = 0x80;
|
||||
|
||||
/* Fill rest of word */
|
||||
for (; i & 3; i++)
|
||||
ctx->block[i] = 0;
|
||||
|
||||
/* i is now a multiple of the word size 4 */
|
||||
words = i >> 2;
|
||||
for (i = 0; i < words; i++)
|
||||
data[i] = STRING2INT(ctx->block + 4 * i);
|
||||
|
||||
if (words > (SHA256_DATA_LENGTH - 2)) { /* No room for length in this block. Process it and
|
||||
* pad with another one */
|
||||
for (i = words; i < SHA256_DATA_LENGTH; i++)
|
||||
data[i] = 0;
|
||||
sha256_transform(ctx->state, data);
|
||||
for (i = 0; i < (SHA256_DATA_LENGTH - 2); i++)
|
||||
data[i] = 0;
|
||||
} else
|
||||
for (i = words; i < SHA256_DATA_LENGTH - 2; i++)
|
||||
data[i] = 0;
|
||||
|
||||
/* There are 512 = 2^9 bits in one block */
|
||||
data[SHA256_DATA_LENGTH - 2] =
|
||||
(ctx->count_high << 9) | (ctx->count_low >> 23);
|
||||
data[SHA256_DATA_LENGTH - 1] =
|
||||
(ctx->count_low << 9) | (ctx->index << 3);
|
||||
sha256_transform(ctx->state, data);
|
||||
}
|
||||
|
||||
void sha256_digest(__const struct sha256_ctx *ctx, mutils_word8 *s)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
if (s!=NULL)
|
||||
for (i = 0; i < _SHA256_DIGEST_LENGTH; i++) {
|
||||
*s++ = ctx->state[i] >> 24;
|
||||
*s++ = 0xff & (ctx->state[i] >> 16);
|
||||
*s++ = 0xff & (ctx->state[i] >> 8);
|
||||
*s++ = 0xff & ctx->state[i];
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* ENABLE_SHA256 */
|
||||
@@ -0,0 +1,346 @@
|
||||
/* sha256_sha224.c
|
||||
*
|
||||
* The sha256 and sha224 hash functions.
|
||||
*/
|
||||
|
||||
/* nettle, low-level cryptographics library
|
||||
*
|
||||
* Copyright (C) 2001 Niels Möller
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* The nettle 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 Lesser General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the nettle 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.
|
||||
*/
|
||||
|
||||
/* Modelled after the sha1.c code by Peter Gutmann. */
|
||||
|
||||
/* This has been modified in order to fit in mhash.
|
||||
* --nmav.
|
||||
*/
|
||||
|
||||
/* The SHA224 support was added by B. Poettering in April 2004. */
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_SHA256_SHA224
|
||||
|
||||
#include "mhash_sha256_sha224.h"
|
||||
#include "mhash_sha1.h"
|
||||
|
||||
/* A block, treated as a sequence of 32-bit words. */
|
||||
#define SHA256_SHA224_DATA_LENGTH 16
|
||||
|
||||
#define ROTR(n,x) ((x)>>(n) | ((x)<<(32-(n))))
|
||||
#define SHR(n,x) ((x)>>(n))
|
||||
|
||||
/* The SHA256/224 functions. The Choice function is the same as the SHA1
|
||||
function f1, and the majority function is the same as the SHA1 f3
|
||||
function. They can be optimized to save one boolean operation each
|
||||
- thanks to Rich Schroeppel, rcs@cs.arizona.edu for discovering
|
||||
this */
|
||||
|
||||
/* #define Choice(x,y,z) ( ( (x) & (y) ) | ( ~(x) & (z) ) ) */
|
||||
#define Choice(x,y,z) ( (z) ^ ( (x) & ( (y) ^ (z) ) ) )
|
||||
/* #define Majority(x,y,z) ( ((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)) ) */
|
||||
#define Majority(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) )
|
||||
|
||||
#define S0(x) (ROTR(2,(x)) ^ ROTR(13,(x)) ^ ROTR(22,(x)))
|
||||
#define S1(x) (ROTR(6,(x)) ^ ROTR(11,(x)) ^ ROTR(25,(x)))
|
||||
|
||||
#define s0(x) (ROTR(7,(x)) ^ ROTR(18,(x)) ^ SHR(3,(x)))
|
||||
#define s1(x) (ROTR(17,(x)) ^ ROTR(19,(x)) ^ SHR(10,(x)))
|
||||
|
||||
/* Generated by the shadata program. */
|
||||
static __const mutils_word32 K[64] = {
|
||||
0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
|
||||
0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
|
||||
0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
|
||||
0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
|
||||
0xe49b69c1UL, 0xefbe4786UL, 0xfc19dc6UL, 0x240ca1ccUL,
|
||||
0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
|
||||
0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
|
||||
0xc6e00bf3UL, 0xd5a79147UL, 0x6ca6351UL, 0x14292967UL,
|
||||
0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
|
||||
0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
|
||||
0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
|
||||
0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
|
||||
0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
|
||||
0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
|
||||
0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
|
||||
0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL,
|
||||
};
|
||||
|
||||
/* The initial expanding function. The hash function is defined over an
|
||||
64-word expanded input array W, where the first 16 are copies of the input
|
||||
data, and the remaining 48 are defined by
|
||||
|
||||
W[ t ] = s1(W[t-2] + W[t-7] + s0(W[i-15] + W[i-16]
|
||||
|
||||
This implementation generates these values on the fly in a circular
|
||||
buffer - thanks to Colin Plumb, colin@nyx10.cs.du.edu for this
|
||||
optimization.
|
||||
*/
|
||||
|
||||
#define EXPAND(W,i) \
|
||||
( W[(i) & 15 ] += (s1(W[((i)-2) & 15]) + W[((i)-7) & 15] + s0(W[((i)-15) & 15])) )
|
||||
|
||||
/* The prototype SHA sub-round. The fundamental sub-round is:
|
||||
|
||||
T1 = h + S1(e) + Choice(e,f,g) + K[t] + W[t]
|
||||
T2 = S0(a) + Majority(a,b,c)
|
||||
a' = T1 + T2
|
||||
b' = a
|
||||
c' = b
|
||||
d' = c
|
||||
e' = d + T1
|
||||
f' = e
|
||||
g' = f
|
||||
h' = g
|
||||
|
||||
but this is implemented by unrolling the loop 8 times and renaming
|
||||
the variables
|
||||
( h, a, b, c, d, e, f, g ) = ( a, b, c, d, e, f, g, h ) each
|
||||
iteration. This code is then replicated 8, using the next 8 values
|
||||
from the W[] array each time */
|
||||
|
||||
#define ROUND(a,b,c,d,e,f,g,h,k,data) do { \
|
||||
mutils_word32 T1 = h + S1(e) + Choice(e,f,g) + k + data; \
|
||||
d += T1; \
|
||||
h = T1 + S0(a) + Majority(a,b,c); \
|
||||
} while (0)
|
||||
|
||||
/* Initialize the SHA values */
|
||||
|
||||
void sha256_init(struct sha256_sha224_ctx *ctx)
|
||||
{
|
||||
/* Initial values, also generated by the shadata program. */
|
||||
static __const mutils_word32 H0[_SHA256_SHA224_DIGEST_LENGTH] = {
|
||||
0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL,
|
||||
0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL,
|
||||
};
|
||||
|
||||
mutils_memcpy(ctx->state, H0, sizeof(H0));
|
||||
|
||||
/* Initialize bit count */
|
||||
ctx->bitcount = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
void sha224_init(struct sha256_sha224_ctx *ctx)
|
||||
{
|
||||
/* Initial values, copied from fips180-2. */
|
||||
static __const mutils_word32 H0[_SHA256_SHA224_DIGEST_LENGTH] = {
|
||||
0xc1059ed8UL, 0x367cd507UL, 0x3070dd17UL, 0xf70e5939UL,
|
||||
0xffc00b31UL, 0x68581511UL, 0x64f98fa7UL, 0xbefa4fa4U
|
||||
};
|
||||
|
||||
mutils_memcpy(ctx->state, H0, sizeof(H0));
|
||||
|
||||
/* Initialize bit count */
|
||||
ctx->bitcount = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
/* Perform the SHA transformation. Note that this code, like MD5, seems to
|
||||
break some optimizing compilers due to the complexity of the expressions
|
||||
and the size of the basic block. It may be necessary to split it into
|
||||
sections, e.g. based on the four subrounds
|
||||
|
||||
Note that this function destroys the data area */
|
||||
|
||||
static void sha256_sha224_transform(mutils_word32 *state, mutils_word32 *data)
|
||||
{
|
||||
mutils_word32 A, B, C, D, E, F, G, H; /* Local vars */
|
||||
mutils_word8 i;
|
||||
__const mutils_word32 *k;
|
||||
mutils_word32 *d;
|
||||
|
||||
/* Set up first buffer and local data buffer */
|
||||
A = state[0];
|
||||
B = state[1];
|
||||
C = state[2];
|
||||
D = state[3];
|
||||
E = state[4];
|
||||
F = state[5];
|
||||
G = state[6];
|
||||
H = state[7];
|
||||
|
||||
/* Heavy mangling */
|
||||
/* First 16 subrounds that act on the original data */
|
||||
|
||||
for (i = 0, k = K, d = data; i < 16; i += 8, k += 8, d += 8) {
|
||||
ROUND(A, B, C, D, E, F, G, H, k[0], d[0]);
|
||||
ROUND(H, A, B, C, D, E, F, G, k[1], d[1]);
|
||||
ROUND(G, H, A, B, C, D, E, F, k[2], d[2]);
|
||||
ROUND(F, G, H, A, B, C, D, E, k[3], d[3]);
|
||||
ROUND(E, F, G, H, A, B, C, D, k[4], d[4]);
|
||||
ROUND(D, E, F, G, H, A, B, C, k[5], d[5]);
|
||||
ROUND(C, D, E, F, G, H, A, B, k[6], d[6]);
|
||||
ROUND(B, C, D, E, F, G, H, A, k[7], d[7]);
|
||||
}
|
||||
|
||||
for (; i < 64; i += 16, k += 16) {
|
||||
ROUND(A, B, C, D, E, F, G, H, k[0], EXPAND(data, 0));
|
||||
ROUND(H, A, B, C, D, E, F, G, k[1], EXPAND(data, 1));
|
||||
ROUND(G, H, A, B, C, D, E, F, k[2], EXPAND(data, 2));
|
||||
ROUND(F, G, H, A, B, C, D, E, k[3], EXPAND(data, 3));
|
||||
ROUND(E, F, G, H, A, B, C, D, k[4], EXPAND(data, 4));
|
||||
ROUND(D, E, F, G, H, A, B, C, k[5], EXPAND(data, 5));
|
||||
ROUND(C, D, E, F, G, H, A, B, k[6], EXPAND(data, 6));
|
||||
ROUND(B, C, D, E, F, G, H, A, k[7], EXPAND(data, 7));
|
||||
ROUND(A, B, C, D, E, F, G, H, k[8], EXPAND(data, 8));
|
||||
ROUND(H, A, B, C, D, E, F, G, k[9], EXPAND(data, 9));
|
||||
ROUND(G, H, A, B, C, D, E, F, k[10], EXPAND(data, 10));
|
||||
ROUND(F, G, H, A, B, C, D, E, k[11], EXPAND(data, 11));
|
||||
ROUND(E, F, G, H, A, B, C, D, k[12], EXPAND(data, 12));
|
||||
ROUND(D, E, F, G, H, A, B, C, k[13], EXPAND(data, 13));
|
||||
ROUND(C, D, E, F, G, H, A, B, k[14], EXPAND(data, 14));
|
||||
ROUND(B, C, D, E, F, G, H, A, k[15], EXPAND(data, 15));
|
||||
}
|
||||
|
||||
/* Update state */
|
||||
state[0] += A;
|
||||
state[1] += B;
|
||||
state[2] += C;
|
||||
state[3] += D;
|
||||
state[4] += E;
|
||||
state[5] += F;
|
||||
state[6] += G;
|
||||
state[7] += H;
|
||||
}
|
||||
|
||||
static void sha256_sha224_block(struct sha256_sha224_ctx *ctx, __const mutils_word8 *block)
|
||||
{
|
||||
mutils_word32 data[SHA256_SHA224_DATA_LENGTH];
|
||||
mutils_word32 i;
|
||||
|
||||
/* Update block count */
|
||||
ctx->bitcount += 512;
|
||||
|
||||
/* Endian independent conversion */
|
||||
for (i = 0; i < SHA256_SHA224_DATA_LENGTH; i++, block += 4)
|
||||
data[i] = STRING2INT(block);
|
||||
|
||||
sha256_sha224_transform(ctx->state, data);
|
||||
}
|
||||
|
||||
void
|
||||
sha256_sha224_update(struct sha256_sha224_ctx *ctx, __const mutils_word8 *buffer, mutils_word32 length)
|
||||
{
|
||||
mutils_word32 left;
|
||||
|
||||
if (ctx->index) { /* Try to fill partial block */
|
||||
left = SHA256_SHA224_DATA_SIZE - ctx->index;
|
||||
if (length < left) {
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, length);
|
||||
ctx->index += length;
|
||||
return; /* Finished */
|
||||
} else {
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, left);
|
||||
sha256_sha224_block(ctx, ctx->block);
|
||||
buffer += left;
|
||||
length -= left;
|
||||
}
|
||||
}
|
||||
while (length >= SHA256_SHA224_DATA_SIZE) {
|
||||
sha256_sha224_block(ctx, buffer);
|
||||
buffer += SHA256_SHA224_DATA_SIZE;
|
||||
length -= SHA256_SHA224_DATA_SIZE;
|
||||
}
|
||||
/* Buffer leftovers */
|
||||
/* NOTE: The corresponding sha1 code checks for the special case length == 0.
|
||||
* That seems supoptimal, as I suspect it increases the number of branches. */
|
||||
|
||||
mutils_memcpy(ctx->block, buffer, length);
|
||||
ctx->index = length;
|
||||
}
|
||||
|
||||
/* Final wrapup - pad to SHA256_SHA224_DATA_SIZE-byte boundary with the bit pattern
|
||||
1 0* (64-bit count of bits processed, MSB-first) */
|
||||
|
||||
void sha256_sha224_final(struct sha256_sha224_ctx *ctx)
|
||||
{
|
||||
mutils_word32 data[SHA256_SHA224_DATA_LENGTH];
|
||||
mutils_word32 i;
|
||||
mutils_word32 words;
|
||||
|
||||
i = ctx->index;
|
||||
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
|
||||
/* assert(i < SHA256_SHA224_DATA_SIZE);
|
||||
*/
|
||||
ctx->block[i++] = 0x80;
|
||||
|
||||
/* Fill rest of word */
|
||||
for (; i & 3; i++)
|
||||
ctx->block[i] = 0;
|
||||
|
||||
/* i is now a multiple of the word size 4 */
|
||||
words = i >> 2;
|
||||
for (i = 0; i < words; i++)
|
||||
data[i] = STRING2INT(ctx->block + 4 * i);
|
||||
|
||||
if (words > (SHA256_SHA224_DATA_LENGTH - 2)) { /* No room for length in this block.
|
||||
* Process it and pad with another one */
|
||||
for (i = words; i < SHA256_SHA224_DATA_LENGTH; i++)
|
||||
data[i] = 0;
|
||||
sha256_sha224_transform(ctx->state, data);
|
||||
for (i = 0; i < (SHA256_SHA224_DATA_LENGTH - 2); i++)
|
||||
data[i] = 0;
|
||||
} else
|
||||
for (i = words; i < SHA256_SHA224_DATA_LENGTH - 2; i++)
|
||||
data[i] = 0;
|
||||
|
||||
ctx->bitcount += 8 * ctx->index;
|
||||
data[SHA256_SHA224_DATA_LENGTH - 2] =
|
||||
ctx->bitcount >> 32;
|
||||
data[SHA256_SHA224_DATA_LENGTH - 1] =
|
||||
ctx->bitcount & 0xffffffff;
|
||||
sha256_sha224_transform(ctx->state, data);
|
||||
}
|
||||
|
||||
static void sha256_sha224_digest(__const struct sha256_sha224_ctx *ctx,
|
||||
mutils_word8 *s, mutils_word32 len)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
if (s != NULL)
|
||||
{
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
*s++ = ctx->state[i] >> 24;
|
||||
*s++ = 0xff & (ctx->state[i] >> 16);
|
||||
*s++ = 0xff & (ctx->state[i] >> 8);
|
||||
*s++ = 0xff & ctx->state[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sha256_digest(__const struct sha256_sha224_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
sha256_sha224_digest(ctx, s, SHA256_DIGEST_SIZE / 4);
|
||||
}
|
||||
|
||||
void sha224_digest(__const struct sha256_sha224_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
sha256_sha224_digest(ctx, s, SHA224_DIGEST_SIZE / 4);
|
||||
}
|
||||
|
||||
#endif /* ENABLE_SHA256_SHA224 */
|
||||
@@ -0,0 +1,378 @@
|
||||
/* sha512_sha384.c
|
||||
*
|
||||
* The sha512 and sha384 secure hash functions.
|
||||
* Copyright (C) 2004 B. Poettering
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* This code heavily borrows from the sha256/sha1 code written by
|
||||
* Niels Möller and Peter Gutmann (see sha256_sha224.c of the mhash library)
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_SHA512_SHA384
|
||||
|
||||
#include "mhash_sha512_sha384.h"
|
||||
|
||||
/* A block, treated as a sequence of 64-bit words. */
|
||||
#define SHA512_SHA384_DATA_LENGTH 16
|
||||
|
||||
#define ROTR(n,x) ((x)>>(n) | ((x)<<(64-(n))))
|
||||
#define SHR(n,x) ((x)>>(n))
|
||||
|
||||
/* The SHA512/384 functions. The Choice function is the same as the SHA1
|
||||
function f1, and the majority function is the same as the SHA1 f3
|
||||
function. They can be optimized to save one boolean operation each
|
||||
- thanks to Rich Schroeppel, rcs@cs.arizona.edu for discovering
|
||||
this */
|
||||
|
||||
/* #define Choice(x,y,z) ( ( (x) & (y) ) | ( ~(x) & (z) ) ) */
|
||||
#define Choice(x,y,z) ( (z) ^ ( (x) & ( (y) ^ (z) ) ) )
|
||||
/* #define Majority(x,y,z) ( ((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)) ) */
|
||||
#define Majority(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) )
|
||||
|
||||
#define S0(x) (ROTR(28,(x)) ^ ROTR(34,(x)) ^ ROTR(39,(x)))
|
||||
#define S1(x) (ROTR(14,(x)) ^ ROTR(18,(x)) ^ ROTR(41,(x)))
|
||||
|
||||
#define s0(x) (ROTR(1,(x)) ^ ROTR(8,(x)) ^ SHR(7,(x)))
|
||||
#define s1(x) (ROTR(19,(x)) ^ ROTR(61,(x)) ^ SHR(6,(x)))
|
||||
|
||||
/* The sha512/384 round __constants. */
|
||||
static __const mutils_word64 K[80] = {
|
||||
0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL,
|
||||
0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
|
||||
0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL,
|
||||
0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
|
||||
0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL,
|
||||
0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
|
||||
0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL,
|
||||
0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
|
||||
0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL,
|
||||
0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
|
||||
0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL,
|
||||
0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
|
||||
0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL,
|
||||
0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
|
||||
0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL,
|
||||
0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
|
||||
0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL,
|
||||
0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
|
||||
0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL,
|
||||
0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
|
||||
0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL,
|
||||
0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
|
||||
0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL,
|
||||
0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
|
||||
0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL,
|
||||
0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
|
||||
0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
|
||||
};
|
||||
|
||||
/* The initial expanding function. The hash function is defined over an
|
||||
80-word expanded input array W, where the first 16 are copies of the input
|
||||
data, and the remaining 64 are defined by
|
||||
|
||||
W[ t ] = s1(W[t-2] + W[t-7] + s0(W[i-15] + W[i-16]
|
||||
|
||||
This implementation generates these values on the fly in a circular
|
||||
buffer - thanks to Colin Plumb, colin@nyx10.cs.du.edu for this
|
||||
optimization.
|
||||
*/
|
||||
|
||||
#define EXPAND(W,i) \
|
||||
( W[(i) & 15 ] += (s1(W[((i)-2) & 15]) + W[((i)-7) & 15] + s0(W[((i)-15) & 15])) )
|
||||
|
||||
/* The prototype SHA sub-round. The fundamental sub-round is:
|
||||
|
||||
T1 = h + S1(e) + Choice(e,f,g) + K[t] + W[t]
|
||||
T2 = S0(a) + Majority(a,b,c)
|
||||
a' = T1+T2
|
||||
b' = a
|
||||
c' = b
|
||||
d' = c
|
||||
e' = d + T1
|
||||
f' = e
|
||||
g' = f
|
||||
h' = g
|
||||
|
||||
but this is implemented by unrolling the loop 8 times and renaming
|
||||
the variables
|
||||
( h, a, b, c, d, e, f, g ) = ( a, b, c, d, e, f, g, h ) each
|
||||
iteration. This code is then replicated 8, using the next 8 values
|
||||
from the W[] array each time */
|
||||
|
||||
#define ROUND(a,b,c,d,e,f,g,h,k,data) do { \
|
||||
mutils_word64 T1 = h + S1(e) + Choice(e,f,g) + k + data; \
|
||||
d += T1; \
|
||||
h = T1 + S0(a) + Majority(a,b,c); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* Helper macros derived from those in mhash_sha1.h */
|
||||
|
||||
#ifndef EXTRACT_UCHAR
|
||||
#define EXTRACT_UCHAR(p) (*(unsigned char *)(p))
|
||||
#endif
|
||||
|
||||
#define STRING2INT64(s) ((((((((((((((mutils_word64)(EXTRACT_UCHAR(s) << 8) \
|
||||
| EXTRACT_UCHAR(s+1)) << 8) \
|
||||
| EXTRACT_UCHAR(s+2)) << 8) \
|
||||
| EXTRACT_UCHAR(s+3)) << 8) \
|
||||
| EXTRACT_UCHAR(s+4)) << 8) \
|
||||
| EXTRACT_UCHAR(s+5)) << 8) \
|
||||
| EXTRACT_UCHAR(s+6)) << 8) \
|
||||
| EXTRACT_UCHAR(s+7))
|
||||
|
||||
/* Initialize the SHA512/384 values */
|
||||
|
||||
void sha512_init(struct sha512_sha384_ctx *ctx)
|
||||
{
|
||||
/* Initial values */
|
||||
static __const mutils_word64 H0[_SHA512_SHA384_STATE_LENGTH] = {
|
||||
0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL,
|
||||
0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
|
||||
0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL
|
||||
};
|
||||
|
||||
mutils_memcpy(ctx->state, H0, sizeof(H0));
|
||||
|
||||
/* Initialize bit count */
|
||||
ctx->bitcount_low = ctx->bitcount_high = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
void sha384_init(struct sha512_sha384_ctx *ctx)
|
||||
{
|
||||
/* Initial values */
|
||||
static __const mutils_word64 H0[_SHA512_SHA384_STATE_LENGTH] = {
|
||||
0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL, 0x9159015a3070dd17ULL,
|
||||
0x152fecd8f70e5939ULL, 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL,
|
||||
0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL,
|
||||
};
|
||||
|
||||
mutils_memcpy(ctx->state, H0, sizeof(H0));
|
||||
|
||||
/* Initialize bit count */
|
||||
ctx->bitcount_low = ctx->bitcount_high = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
/* Perform the SHA transformation. Note that this code, like MD5, seems to
|
||||
break some optimizing compilers due to the complexity of the expressions
|
||||
and the size of the basic block. It may be necessary to split it into
|
||||
sections, e.g. based on the four subrounds
|
||||
|
||||
Note that this function destroys the data area */
|
||||
|
||||
static void sha512_sha384_transform(mutils_word64 * state, mutils_word64 * data)
|
||||
{
|
||||
mutils_word64 A, B, C, D, E, F, G, H; /* Local vars */
|
||||
mutils_word8 i;
|
||||
__const mutils_word64 *k;
|
||||
mutils_word64 *d;
|
||||
|
||||
/* Set up first buffer and local data buffer */
|
||||
A = state[0];
|
||||
B = state[1];
|
||||
C = state[2];
|
||||
D = state[3];
|
||||
E = state[4];
|
||||
F = state[5];
|
||||
G = state[6];
|
||||
H = state[7];
|
||||
|
||||
/* Heavy mangling */
|
||||
/* First 16 subrounds that act on the original data */
|
||||
|
||||
for (i = 0, k = K, d = data; i < 16; i += 8, k += 8, d += 8) {
|
||||
ROUND(A, B, C, D, E, F, G, H, k[0], d[0]);
|
||||
ROUND(H, A, B, C, D, E, F, G, k[1], d[1]);
|
||||
ROUND(G, H, A, B, C, D, E, F, k[2], d[2]);
|
||||
ROUND(F, G, H, A, B, C, D, E, k[3], d[3]);
|
||||
ROUND(E, F, G, H, A, B, C, D, k[4], d[4]);
|
||||
ROUND(D, E, F, G, H, A, B, C, k[5], d[5]);
|
||||
ROUND(C, D, E, F, G, H, A, B, k[6], d[6]);
|
||||
ROUND(B, C, D, E, F, G, H, A, k[7], d[7]);
|
||||
}
|
||||
|
||||
for (; i < 80; i += 16, k += 16) {
|
||||
ROUND(A, B, C, D, E, F, G, H, k[0], EXPAND(data, 0));
|
||||
ROUND(H, A, B, C, D, E, F, G, k[1], EXPAND(data, 1));
|
||||
ROUND(G, H, A, B, C, D, E, F, k[2], EXPAND(data, 2));
|
||||
ROUND(F, G, H, A, B, C, D, E, k[3], EXPAND(data, 3));
|
||||
ROUND(E, F, G, H, A, B, C, D, k[4], EXPAND(data, 4));
|
||||
ROUND(D, E, F, G, H, A, B, C, k[5], EXPAND(data, 5));
|
||||
ROUND(C, D, E, F, G, H, A, B, k[6], EXPAND(data, 6));
|
||||
ROUND(B, C, D, E, F, G, H, A, k[7], EXPAND(data, 7));
|
||||
ROUND(A, B, C, D, E, F, G, H, k[8], EXPAND(data, 8));
|
||||
ROUND(H, A, B, C, D, E, F, G, k[9], EXPAND(data, 9));
|
||||
ROUND(G, H, A, B, C, D, E, F, k[10], EXPAND(data, 10));
|
||||
ROUND(F, G, H, A, B, C, D, E, k[11], EXPAND(data, 11));
|
||||
ROUND(E, F, G, H, A, B, C, D, k[12], EXPAND(data, 12));
|
||||
ROUND(D, E, F, G, H, A, B, C, k[13], EXPAND(data, 13));
|
||||
ROUND(C, D, E, F, G, H, A, B, k[14], EXPAND(data, 14));
|
||||
ROUND(B, C, D, E, F, G, H, A, k[15], EXPAND(data, 15));
|
||||
}
|
||||
|
||||
/* Update state */
|
||||
state[0] += A;
|
||||
state[1] += B;
|
||||
state[2] += C;
|
||||
state[3] += D;
|
||||
state[4] += E;
|
||||
state[5] += F;
|
||||
state[6] += G;
|
||||
state[7] += H;
|
||||
}
|
||||
|
||||
static void
|
||||
sha512_sha384_block(struct sha512_sha384_ctx *ctx, __const mutils_word8 * block)
|
||||
{
|
||||
mutils_word64 data[SHA512_SHA384_DATA_LENGTH];
|
||||
mutils_word32 i;
|
||||
|
||||
/* Update bit counter */
|
||||
if ((ctx->bitcount_low += 1024) < 1024)
|
||||
{
|
||||
ctx->bitcount_high++;
|
||||
}
|
||||
|
||||
/* Endian independent conversion */
|
||||
for (i = 0; i < SHA512_SHA384_DATA_LENGTH; i++, block += 8)
|
||||
{
|
||||
data[i] = STRING2INT64(block);
|
||||
}
|
||||
|
||||
sha512_sha384_transform(ctx->state, data);
|
||||
}
|
||||
|
||||
void
|
||||
sha512_sha384_update(struct sha512_sha384_ctx *ctx, __const mutils_word8 * buffer,
|
||||
mutils_word32 length)
|
||||
{
|
||||
mutils_word32 left;
|
||||
|
||||
if (ctx->index)
|
||||
{ /* Try to fill partial block */
|
||||
left = SHA512_SHA384_DATA_SIZE - ctx->index;
|
||||
if (length < left)
|
||||
{
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, length);
|
||||
ctx->index += length;
|
||||
return; /* Finished */
|
||||
} else {
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, left);
|
||||
sha512_sha384_block(ctx, ctx->block);
|
||||
buffer += left;
|
||||
length -= left;
|
||||
}
|
||||
}
|
||||
while (length >= SHA512_SHA384_DATA_SIZE)
|
||||
{
|
||||
sha512_sha384_block(ctx, buffer);
|
||||
buffer += SHA512_SHA384_DATA_SIZE;
|
||||
length -= SHA512_SHA384_DATA_SIZE;
|
||||
}
|
||||
/* Buffer leftovers */
|
||||
/* NOTE: The corresponding sha1 code checks for the special case length == 0.
|
||||
* That seems supoptimal, as I suspect it increases the number of branches. */
|
||||
|
||||
mutils_memcpy(ctx->block, buffer, length);
|
||||
ctx->index = length;
|
||||
}
|
||||
|
||||
/* Final wrapup - pad to SHA512_SHA384_DATA_SIZE-byte boundary with the bit pattern
|
||||
1 0* (128-bit count of bits processed, MSB-first) */
|
||||
|
||||
void sha512_sha384_final(struct sha512_sha384_ctx *ctx)
|
||||
{
|
||||
mutils_word64 data[SHA512_SHA384_DATA_LENGTH];
|
||||
mutils_word32 i;
|
||||
mutils_word32 words;
|
||||
|
||||
i = ctx->index;
|
||||
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
|
||||
/* assert(i < SHA512_SHA384_DATA_SIZE);
|
||||
*/
|
||||
ctx->block[i++] = 0x80;
|
||||
|
||||
/* Fill rest of word */
|
||||
for (; i & 7; i++)
|
||||
ctx->block[i] = 0;
|
||||
|
||||
/* i is now a multiple of the word size 8 */
|
||||
words = i >> 3;
|
||||
for (i = 0; i < words; i++)
|
||||
data[i] = STRING2INT64(ctx->block + 8 * i);
|
||||
|
||||
if (words > (SHA512_SHA384_DATA_LENGTH - 2)) { /* No room for
|
||||
length in this block. Process it and pad with another one */
|
||||
for (i = words; i < SHA512_SHA384_DATA_LENGTH; i++)
|
||||
data[i] = 0;
|
||||
sha512_sha384_transform(ctx->state, data);
|
||||
for (i = 0; i < (SHA512_SHA384_DATA_LENGTH - 2); i++)
|
||||
data[i] = 0;
|
||||
} else
|
||||
for (i = words; i < SHA512_SHA384_DATA_LENGTH - 2; i++)
|
||||
data[i] = 0;
|
||||
|
||||
if ((ctx->bitcount_low += 8 * ctx->index) < 8 * ctx->index)
|
||||
ctx->bitcount_high++;
|
||||
data[SHA512_SHA384_DATA_LENGTH - 2] = ctx->bitcount_high;
|
||||
data[SHA512_SHA384_DATA_LENGTH - 1] = ctx->bitcount_low;
|
||||
sha512_sha384_transform(ctx->state, data);
|
||||
}
|
||||
|
||||
static void
|
||||
sha512_sha384_digest(__const struct sha512_sha384_ctx *ctx, mutils_word8 * s, mutils_word32 len)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
if (s != NULL)
|
||||
{
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
*s++ = ctx->state[i] >> 56;
|
||||
*s++ = 0xff & (ctx->state[i] >> 48);
|
||||
*s++ = 0xff & (ctx->state[i] >> 40);
|
||||
*s++ = 0xff & (ctx->state[i] >> 32);
|
||||
*s++ = 0xff & (ctx->state[i] >> 24);
|
||||
*s++ = 0xff & (ctx->state[i] >> 16);
|
||||
*s++ = 0xff & (ctx->state[i] >> 8);
|
||||
*s++ = 0xff & ctx->state[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sha512_digest(__const struct sha512_sha384_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
sha512_sha384_digest(ctx, s, SHA512_DIGEST_SIZE / 8);
|
||||
}
|
||||
|
||||
void sha384_digest(__const struct sha512_sha384_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
sha512_sha384_digest(ctx, s, SHA384_DIGEST_SIZE / 8);
|
||||
}
|
||||
|
||||
#endif /* ENABLE_SHA512_SHA384 */
|
||||
@@ -0,0 +1,878 @@
|
||||
/* snefru.c */
|
||||
|
||||
/* Snefru is a cryptographic hash function invented by Ralph Merkle
|
||||
* which supports 128-bit and 256-bit output. It was named after the
|
||||
* Egyptian Pharaoh Sneferu, continuing the tradition of the Khufu and
|
||||
* Khafre block ciphers.
|
||||
*
|
||||
* Snefru is a public-domain one-way hash function. For more information see
|
||||
* http://www.funet.fi/pub/crypt/mirrors/idea.sec.dsi.unimi.it/rpub.cl.msu.edu/
|
||||
* crypt/docs/merkle-khufu-khafre-snefru.txt.gz
|
||||
*
|
||||
* This code was written by B. Poettering in 2004 for the mhash library. It
|
||||
* is in the public domain.
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#if defined(ENABLE_SNEFRU)
|
||||
|
||||
#include "mhash_snefru.h"
|
||||
|
||||
|
||||
#define R 8 // number of rounds
|
||||
|
||||
static __const mutils_word32 SBOX[R * 256 * 2]= {
|
||||
0x64f9001bl, 0xfeddcdf6l, 0x7c8ff1e2l, 0x11d71514l, 0x8b8c18d3l, 0xdddf881el,
|
||||
0x6eab5056l, 0x88ced8e1l, 0x49148959l, 0x69c56fd5l, 0xb7994f03l, 0x0fbcee3el,
|
||||
0x3c264940l, 0x21557e58l, 0xe14b3fc2l, 0x2e5cf591l, 0xdceff8cel, 0x092a1648l,
|
||||
0xbe812936l, 0xff7b0c6al, 0xd5251037l, 0xafa448f1l, 0x7dafc95al, 0x1ea69c3fl,
|
||||
0xa417abe7l, 0x5890e423l, 0xb0cb70c0l, 0xc85025f7l, 0x244d97e3l, 0x1ff3595fl,
|
||||
0xc4ec6396l, 0x59181e17l, 0xe635b477l, 0x354e7dbfl, 0x796f7753l, 0x66eb52ccl,
|
||||
0x77c3f995l, 0x32e3a927l, 0x80ccaed6l, 0x4e2be89dl, 0x375bbd28l, 0xad1a3d05l,
|
||||
0x2b1b42b3l, 0x16c44c71l, 0x4d54bfa8l, 0xe57ddc7al, 0xec6d8144l, 0x5a71046bl,
|
||||
0xd8229650l, 0x87fc8f24l, 0xcbc60e09l, 0xb6390366l, 0xd9f76092l, 0xd393a70bl,
|
||||
0x1d31a08al, 0x9cd971c9l, 0x5c1ef445l, 0x86fab694l, 0xfdb44165l, 0x8eaafcbel,
|
||||
0x4bcac6ebl, 0xfb7a94e5l, 0x5789d04el, 0xfa13cf35l, 0x236b8da9l, 0x4133f000l,
|
||||
0x6224261cl, 0xf412f23bl, 0xe75e56a4l, 0x30022116l, 0xbaf17f1fl, 0xd09872f9l,
|
||||
0xc1a3699cl, 0xf1e802aal, 0x0dd145dcl, 0x4fdce093l, 0x8d8412f0l, 0x6cd0f376l,
|
||||
0x3de6b73dl, 0x84ba737fl, 0xb43a30f2l, 0x44569f69l, 0x00e4eacal, 0xb58de3b0l,
|
||||
0x959113c8l, 0xd62efee9l, 0x90861f83l, 0xced69874l, 0x2f793ceel, 0xe8571c30l,
|
||||
0x483665d1l, 0xab07b031l, 0x914c844fl, 0x15bf3be8l, 0x2c3f2a9al, 0x9eb95fd4l,
|
||||
0x92e7472dl, 0x2297cc5bl, 0xee5f2782l, 0x5377b562l, 0xdb8ebbcfl, 0xf961deddl,
|
||||
0xc59b5c60l, 0x1bd3910dl, 0x26d206adl, 0xb28514d8l, 0x5ecf6b52l, 0x7fea78bbl,
|
||||
0x504879acl, 0xed34a884l, 0x36e51d3cl, 0x1753741dl, 0x8c47caedl, 0x9d0a40efl,
|
||||
0x3145e221l, 0xda27eb70l, 0xdf730ba3l, 0x183c8789l, 0x739ac0a6l, 0x9a58dfc6l,
|
||||
0x54b134c1l, 0xac3e242el, 0xcc493902l, 0x7b2dda99l, 0x8f15bc01l, 0x29fd38c7l,
|
||||
0x27d5318fl, 0x604aaff5l, 0xf29c6818l, 0xc38aa2ecl, 0x1019d4c3l, 0xa8fb936el,
|
||||
0x20ed7b39l, 0x0b686119l, 0x89a0906fl, 0x1cc7829el, 0x9952ef4bl, 0x850e9e8cl,
|
||||
0xcd063a90l, 0x67002f8el, 0xcfac8cb7l, 0xeaa24b11l, 0x988b4e6cl, 0x46f066dfl,
|
||||
0xca7eec08l, 0xc7bba664l, 0x831d17bdl, 0x63f575e6l, 0x9764350el, 0x47870d42l,
|
||||
0x026ca4a2l, 0x8167d587l, 0x61b6adabl, 0xaa6564d2l, 0x70da237bl, 0x25e1c74al,
|
||||
0xa1c901a0l, 0x0eb0a5dal, 0x7670f741l, 0x51c05aeal, 0x933dfa32l, 0x0759ff1al,
|
||||
0x56010ab8l, 0x5fdecb78l, 0x3f32edf8l, 0xaebedbb9l, 0x39f8326dl, 0xd20858c5l,
|
||||
0x9b638be4l, 0xa572c80al, 0x28e0a19fl, 0x432099fcl, 0x3a37c3cdl, 0xbf95c585l,
|
||||
0xb392c12al, 0x6aa707d7l, 0x52f66a61l, 0x12d483b1l, 0x96435b5el, 0x3e75802bl,
|
||||
0x3ba52b33l, 0xa99f51a5l, 0xbda1e157l, 0x78c2e70cl, 0xfcae7ce0l, 0xd1602267l,
|
||||
0x2affac4dl, 0x4a510947l, 0x0ab2b83al, 0x7a04e579l, 0x340dfd80l, 0xb916e922l,
|
||||
0xe29d5e9bl, 0xf5624af4l, 0x4ca9d9afl, 0x6bbd2cfel, 0xe3b7f620l, 0xc2746e07l,
|
||||
0x5b42b9b6l, 0xa06919bcl, 0xf0f2c40fl, 0x72217ab5l, 0x14c19df3l, 0xf3802dael,
|
||||
0xe094beb4l, 0xa2101affl, 0x0529575dl, 0x55cdb27cl, 0xa33bddb2l, 0x6528b37dl,
|
||||
0x740c05dbl, 0xe96a62c4l, 0x40782846l, 0x6d30d706l, 0xbbf48e2cl, 0xbce2d3del,
|
||||
0x049e37fal, 0x01b5e634l, 0x2d886d8dl, 0x7e5a2e7el, 0xd7412013l, 0x06e90f97l,
|
||||
0xe45d3ebal, 0xb8ad3386l, 0x13051b25l, 0x0c035354l, 0x71c89b75l, 0xc638fbd0l,
|
||||
0x197f11a1l, 0xef0f08fbl, 0xf8448651l, 0x38409563l, 0x452f4443l, 0x5d464d55l,
|
||||
0x03d8764cl, 0xb1b8d638l, 0xa70bba2fl, 0x94b3d210l, 0xeb6692a7l, 0xd409c2d9l,
|
||||
0x68838526l, 0xa6db8a15l, 0x751f6c98l, 0xde769a88l, 0xc9ee4668l, 0x1a82a373l,
|
||||
0x0896aa49l, 0x42233681l, 0xf62c55cbl, 0x9f1c5404l, 0xf74fb15cl, 0xc06e4312l,
|
||||
0x6ffe5d72l, 0x8aa8678bl, 0x337cd129l, 0x8211cefdl, 0x074a1d09l, 0x52a10e5al,
|
||||
0x9275a3f8l, 0x4b82506cl, 0x37df7e1bl, 0x4c78b3c5l, 0xcefab1dal, 0xf472267el,
|
||||
0xb63045f6l, 0xd66a1fc0l, 0x400298e3l, 0x27e60c94l, 0x87d2f1b8l, 0xdf9e56ccl,
|
||||
0x45cd1803l, 0x1d35e098l, 0xcce7c736l, 0x03483bf1l, 0x1f7307d7l, 0xc6e8f948l,
|
||||
0xe613c111l, 0x3955c6ffl, 0x1170ed7cl, 0x8e95da41l, 0x99c31bf4l, 0xa4da8021l,
|
||||
0x7b5f94fbl, 0xdd0da51fl, 0x6562aa77l, 0x556bcb23l, 0xdb1bacc6l, 0x798040b9l,
|
||||
0xbfe5378fl, 0x731d55e6l, 0xdaa5bfeel, 0x389bbc60l, 0x1b33fba4l, 0x9c567204l,
|
||||
0x36c26c68l, 0x77ee9d69l, 0x8aeb3e88l, 0x2d50b5cel, 0x9579e790l, 0x42b13cfcl,
|
||||
0x33fbd32bl, 0xee0503a7l, 0xb5862824l, 0x15e41eadl, 0xc8412ef7l, 0x9d441275l,
|
||||
0x2fcec582l, 0x5ff483b7l, 0x8f3931dfl, 0x2e5d2a7bl, 0x49467bf9l, 0x0653dea9l,
|
||||
0x2684ce35l, 0x7e655e5cl, 0xf12771d8l, 0xbb15cc67l, 0xab097ca1l, 0x983dcf52l,
|
||||
0x10ddf026l, 0x21267f57l, 0x2c58f6b4l, 0x31043265l, 0x0bab8c01l, 0xd5492099l,
|
||||
0xacaae619l, 0x944ce54al, 0xf2d13d39l, 0xadd3fc32l, 0xcda08a40l, 0xe2b0d451l,
|
||||
0x9efe08ael, 0xb9d50fd2l, 0xea5cd7fdl, 0xc9a749ddl, 0x13ea2253l, 0x832debaal,
|
||||
0x24be640fl, 0xe03e926al, 0x29e01cdel, 0x8bf59f18l, 0x0f9d00b6l, 0xe1238b46l,
|
||||
0x1e7d8e34l, 0x93619adbl, 0x76b32f9fl, 0xbd972cecl, 0xe31fa976l, 0xa68fbb10l,
|
||||
0xfb3ba49dl, 0x8587c41dl, 0xa5add1d0l, 0xf3cf84bfl, 0xd4e11150l, 0xd9ffa6bcl,
|
||||
0xc3f6018cl, 0xaef10572l, 0x74a64b2fl, 0xe7dc9559l, 0x2aae35d5l, 0x5b6f587fl,
|
||||
0xa9e353fel, 0xca4fb674l, 0x04ba24a8l, 0xe5c6875fl, 0xdcbc6266l, 0x6bc5c03fl,
|
||||
0x661eef02l, 0xed740babl, 0x058e34e4l, 0xb7e946cfl, 0x88698125l, 0x72ec48edl,
|
||||
0xb11073a3l, 0xa13485ebl, 0xa2a2429cl, 0xfa407547l, 0x50b76713l, 0x5418c37dl,
|
||||
0x96192da5l, 0x170bb04bl, 0x518a021el, 0xb0ac13d1l, 0x0963fa2al, 0x4a6e10e1l,
|
||||
0x58472bdcl, 0xf7f8d962l, 0x979139eal, 0x8d856538l, 0xc0997042l, 0x48324d7al,
|
||||
0x447623cbl, 0x8cbbe364l, 0x6e0c6b0el, 0xd36d63b0l, 0x3f244c84l, 0x3542c971l,
|
||||
0x2b228dc1l, 0xcb0325bbl, 0xf8c0d6e9l, 0xde11066bl, 0xa8649327l, 0xfc31f83el,
|
||||
0x7dd80406l, 0xf916dd61l, 0xd89f79d3l, 0x615144c2l, 0xebb45d31l, 0x28002958l,
|
||||
0x56890a37l, 0xf05b3808l, 0x123ae844l, 0x86839e16l, 0x914b0d83l, 0xc506b43cl,
|
||||
0xcf3cba5el, 0x7c60f5c9l, 0x22deb2a0l, 0x5d9c2715l, 0xc77ba0efl, 0x4f45360bl,
|
||||
0xc1017d8bl, 0xe45adc29l, 0xa759909bl, 0x412cd293l, 0xd7d796b1l, 0x00c8ff30l,
|
||||
0x23a34a80l, 0x4ec15c91l, 0x714e78b5l, 0x47b9e42el, 0x78f3ea4dl, 0x7f078f5bl,
|
||||
0x346c593al, 0xa3a87a1al, 0x9bcbfe12l, 0x3d439963l, 0xb2ef6d8el, 0xb8d46028l,
|
||||
0x6c2fd5cal, 0x62675256l, 0x01f2a2f3l, 0xbc96ae0al, 0x709a8920l, 0xb4146e87l,
|
||||
0x6308b9e2l, 0x64bda7bal, 0xafed6892l, 0x6037f2a2l, 0xf52969e0l, 0x0adb43a6l,
|
||||
0x82811400l, 0x90d0bdf0l, 0x19c9549el, 0x203f6a73l, 0x1accaf4fl, 0x89714e6dl,
|
||||
0x164d4705l, 0x67665f07l, 0xec206170l, 0x0c2182b2l, 0xa02b9c81l, 0x53289722l,
|
||||
0xf6a97686l, 0x140e4179l, 0x9f778849l, 0x9a88e15dl, 0x25cadb54l, 0xd157f36fl,
|
||||
0x32a421c3l, 0xb368e98al, 0x5a92cd0dl, 0x757aa8d4l, 0xc20ac278l, 0x08b551c7l,
|
||||
0x849491e8l, 0x4dc75ad6l, 0x697c33bel, 0xbaf0ca33l, 0x46125b4el, 0x59d677b3l,
|
||||
0x30d9c8f2l, 0xd0af860cl, 0x1c7fd0fal, 0xfe0ff72cl, 0x5c8d6f43l, 0x57fdec3bl,
|
||||
0x6ab6ad97l, 0xd22adf89l, 0x18171785l, 0x02bfe22dl, 0x6db80917l, 0x80b216afl,
|
||||
0xe85e4f9al, 0x7a1c306el, 0x6fc49bf5l, 0x3af7a11cl, 0x81e215e7l, 0x68363fcdl,
|
||||
0x3e9357c8l, 0xef52fd55l, 0x3b8bab4cl, 0x3c8cf495l, 0xbefceebdl, 0xfd25b714l,
|
||||
0xc498d83dl, 0x0d2e1a8dl, 0xe9f966acl, 0x0e387445l, 0x435419e5l, 0x5e7ebec4l,
|
||||
0xaa90b8d9l, 0xff1a3a96l, 0x4a8fe4e3l, 0xf27d99cdl, 0xd04a40cal, 0xcb5ff194l,
|
||||
0x3668275al, 0xff4816bel, 0xa78b394cl, 0x4c6be9dbl, 0x4eec38d2l, 0x4296ec80l,
|
||||
0xcdce96f8l, 0x888c2f38l, 0xe75508f5l, 0x7b916414l, 0x060aa14al, 0xa214f327l,
|
||||
0xbe608dafl, 0x1ebbdec2l, 0x61f98ce9l, 0xe92156fel, 0x4f22d7a3l, 0x3f76a8d9l,
|
||||
0x559a4b33l, 0x38ad2959l, 0xf3f17e9el, 0x85e1ba91l, 0xe5eba6fbl, 0x73dcd48cl,
|
||||
0xf5c3ff78l, 0x481b6058l, 0x8a3297f7l, 0x8f1f3bf4l, 0x93785ab2l, 0x477a4a5bl,
|
||||
0x6334eb5dl, 0x6d251b2el, 0x74a9102dl, 0x07e38ffal, 0x915c9c62l, 0xccc275eal,
|
||||
0x6be273ecl, 0x3ebddd70l, 0xd895796cl, 0xdc54a91bl, 0xc9afdf81l, 0x23633f73l,
|
||||
0x275119b4l, 0xb19f6b67l, 0x50756e22l, 0x2bb152e2l, 0x76ea46a2l, 0xa353e232l,
|
||||
0x2f596ad6l, 0x0b1edb0bl, 0x02d3d9a4l, 0x78b47843l, 0x64893e90l, 0x40f0caadl,
|
||||
0xf68d3ad7l, 0x46fd1707l, 0x1c9c67efl, 0xb5e086del, 0x96ee6ca6l, 0x9aa34774l,
|
||||
0x1ba4f48al, 0x8d01abfdl, 0x183ee1f6l, 0x5ff8aa7al, 0x17e4faael, 0x303983b0l,
|
||||
0x6c08668bl, 0xd4ac4382l, 0xe6c5849fl, 0x92fefb53l, 0xc1cac4cel, 0x43501388l,
|
||||
0x441118cfl, 0xec4fb308l, 0x53a08e86l, 0x9e0fe0c5l, 0xf91c1525l, 0xac45be05l,
|
||||
0xd7987cb5l, 0x49ba1487l, 0x57938940l, 0xd5877648l, 0xa958727fl, 0x58dfe3c3l,
|
||||
0xf436cf77l, 0x399e4d11l, 0xf0a5bfa9l, 0xef61a33bl, 0xa64cac60l, 0x04a8d0bal,
|
||||
0x030dd572l, 0xb83d320fl, 0xcab23045l, 0xe366f2f0l, 0x815d008dl, 0xc897a43al,
|
||||
0x1d352df3l, 0xb9cc571dl, 0x8bf38744l, 0x72209092l, 0xeba124ebl, 0xfb99ce5el,
|
||||
0x3bb94293l, 0x28da549cl, 0xaab8a228l, 0xa4197785l, 0x33c70296l, 0x25f6259bl,
|
||||
0x5c85da21l, 0xdf15bdeel, 0x15b7c7e8l, 0xe2abef75l, 0xfcc19bc1l, 0x417ff868l,
|
||||
0x14884434l, 0x62825179l, 0xc6d5c11cl, 0x0e4705dcl, 0x22700de0l, 0xd3d2af18l,
|
||||
0x9be822a0l, 0x35b669f1l, 0xc42bb55cl, 0x0a801252l, 0x115bf0fcl, 0x3cd7d856l,
|
||||
0xb43f5f9dl, 0xc2306516l, 0xa1231c47l, 0xf149207el, 0x5209a795l, 0x34b3ccd8l,
|
||||
0x67aefe54l, 0x2c83924el, 0x6662cbacl, 0x5eedd161l, 0x84e681aal, 0x5d57d26bl,
|
||||
0xfa465cc4l, 0x7e3ac3a8l, 0xbf7c0cc6l, 0xe18a9aa1l, 0xc32f0a6fl, 0xb22cc00dl,
|
||||
0x3d280369l, 0x994e554fl, 0x68f480d3l, 0xadcff5e6l, 0x3a8eb265l, 0x83269831l,
|
||||
0xbd568a09l, 0x4bc8ae6al, 0x69f56d2bl, 0x0f17eac8l, 0x772eb6c7l, 0x9f41343cl,
|
||||
0xab1d0742l, 0x826a6f50l, 0xfea2097cl, 0x1912c283l, 0xce185899l, 0xe4444839l,
|
||||
0x2d8635d5l, 0x65d0b1ffl, 0x865a7f17l, 0x326d9fb1l, 0x59e52820l, 0x0090ade1l,
|
||||
0x753c7149l, 0x9ddd8b98l, 0xa5a691dal, 0x0d0382bbl, 0x8904c930l, 0x086cb000l,
|
||||
0x6e69d3bdl, 0x24d4e7a7l, 0x05244fd0l, 0x101a5e0cl, 0x6a947dcbl, 0xe840f77bl,
|
||||
0x7d0c5003l, 0x7c370f1fl, 0x805245edl, 0xe05e3d3fl, 0x7906880el, 0xbabfcd35l,
|
||||
0x1a7ec697l, 0x8c052324l, 0x0c6ec8dfl, 0xd129a589l, 0xc7a75b02l, 0x12d81de7l,
|
||||
0xd9be2a66l, 0x1f4263abl, 0xde73fdb6l, 0x2a00680al, 0x56649e36l, 0x3133ed55l,
|
||||
0x90fa0bf2l, 0x2910a02al, 0x949d9d46l, 0xa0d1dcddl, 0xcfc9b7d4l, 0xd2677be5l,
|
||||
0x95cb36b3l, 0x13cd9410l, 0xdbf73313l, 0xb7c6e8c0l, 0xf781414bl, 0x510b016dl,
|
||||
0xb0de1157l, 0xd6b0f62cl, 0xbb074eccl, 0x7f1395b7l, 0xee792cf9l, 0xea6fd63el,
|
||||
0x5bd6938el, 0xaf02fc64l, 0xdab57ab8l, 0x8edb3784l, 0x8716318fl, 0x164d1a01l,
|
||||
0x26f26141l, 0xb372e6b9l, 0xf8fc2b06l, 0x7ac00e04l, 0x3727b89al, 0x97e9bca5l,
|
||||
0x9c2a742fl, 0xbc3b1f7dl, 0x7165b471l, 0x609b4c29l, 0x20925351l, 0x5ae72112l,
|
||||
0x454be5d1l, 0xc0ffb95fl, 0xdd0ef919l, 0x6f2d70c9l, 0x0974c5bfl, 0x98aa6263l,
|
||||
0x01d91e4dl, 0x2184bb6el, 0x70c43c1el, 0x4d435915l, 0xae7b8523l, 0xb6fb06bcl,
|
||||
0x5431ee76l, 0xfdbc5d26l, 0xed77493dl, 0xc5712ee4l, 0xa8380437l, 0x2eef261al,
|
||||
0x5a79392bl, 0xb8af32c2l, 0x41f7720al, 0x833a61ecl, 0x13dfedacl, 0xc4990bc4l,
|
||||
0xdc0f54bcl, 0xfedd5e88l, 0x80da1881l, 0x4dea1afdl, 0xfd402cc6l, 0xae67cc7al,
|
||||
0xc5238525l, 0x8ea01254l, 0xb56b9bd5l, 0x862fbd6dl, 0xac8575d3l, 0x6fba3714l,
|
||||
0xda7ebf46l, 0x59cd5238l, 0x8ac9dbfel, 0x353729fcl, 0xe497d7f2l, 0xc3ab84e0l,
|
||||
0xf05a114bl, 0x7b887a75l, 0xedc603ddl, 0x5e6fe680l, 0x2c84b399l, 0x884eb1dal,
|
||||
0x1cb8c8bfl, 0xaa51098al, 0xc862231cl, 0x8bac2221l, 0x21b387e5l, 0x208a430dl,
|
||||
0x2a3f0f8bl, 0xa5ff9cd2l, 0x6012a2eal, 0x147a9ee7l, 0xf62a501dl, 0xb4b2e51al,
|
||||
0x3ef3484cl, 0xc0253c59l, 0x2b82b536l, 0x0aa9696bl, 0xbe0c109bl, 0xc70b7929l,
|
||||
0xce3e8a19l, 0x2f66950el, 0x459f1c2cl, 0xe68fb93dl, 0xa3c3ff3el, 0x62b45c62l,
|
||||
0x300991cbl, 0x01914c57l, 0x7f7bc06al, 0x182831f5l, 0xe7b74bcal, 0xfa50f6d0l,
|
||||
0x523caa61l, 0xe3a7cf05l, 0xe9e41311l, 0x280a21d1l, 0x6a4297e1l, 0xf24dc67el,
|
||||
0xfc3189e6l, 0xb72bf34fl, 0x4b1e67afl, 0x543402cel, 0x79a59867l, 0x0648e02al,
|
||||
0x00a3ac17l, 0xc6208d35l, 0x6e7f5f76l, 0xa45bb4bel, 0xf168fa63l, 0x3f4125f3l,
|
||||
0xf311406fl, 0x02706565l, 0xbfe58022l, 0x0cfcfdd9l, 0x0735a7f7l, 0x8f049092l,
|
||||
0xd98edc27l, 0xf5c5d55cl, 0xe0f201dbl, 0x0dcafc9al, 0x7727fb79l, 0xaf43abf4l,
|
||||
0x26e938c1l, 0x401b26a6l, 0x900720fal, 0x2752d97bl, 0xcff1d1b3l, 0xa9d9e424l,
|
||||
0x42db99abl, 0x6cf8be5fl, 0xe82cebe3l, 0x3afb733bl, 0x6b734eb6l, 0x1036414al,
|
||||
0x975f667cl, 0x049d6377l, 0xba587c60l, 0xb1d10483l, 0xde1aefccl, 0x1129d055l,
|
||||
0x72051e91l, 0x6946d623l, 0xf9e86ea7l, 0x48768c00l, 0xb0166c93l, 0x9956bbf0l,
|
||||
0x1f1f6d84l, 0xfb15e18el, 0x033b495dl, 0x56e3362el, 0x4f44c53cl, 0x747cba51l,
|
||||
0x89d37872l, 0x5d9c331bl, 0xd2ef9fa8l, 0x254917f8l, 0x1b106f47l, 0x37d75553l,
|
||||
0xb3f053b0l, 0x7dccd8efl, 0xd30eb802l, 0x5889f42dl, 0x610206d7l, 0x1a7d34a1l,
|
||||
0x92d87dd8l, 0xe5f4a315l, 0xd1cf0e71l, 0xb22dfe45l, 0xb901e8ebl, 0x0fc0ce5el,
|
||||
0x2efa60c9l, 0x2de74290l, 0x36d0c906l, 0x381c70e4l, 0x4c6da5b5l, 0x3d81a682l,
|
||||
0x7e381f34l, 0x396c4f52l, 0x95ad5901l, 0x1db50c5al, 0x29982e9el, 0x1557689fl,
|
||||
0x3471ee42l, 0xd7e2f7c0l, 0x8795a1e2l, 0xbc324d8dl, 0xe224c3c8l, 0x12837e39l,
|
||||
0xcdee3d74l, 0x7ad2143fl, 0x0e13d40cl, 0x78bd4a68l, 0xa2eb194dl, 0xdb9451f9l,
|
||||
0x859b71dcl, 0x5c4f5b89l, 0xca14a8a4l, 0xef92f003l, 0x16741d98l, 0x33aa4444l,
|
||||
0x9e967fbbl, 0x092e3020l, 0xd86a35b8l, 0x8cc17b10l, 0xe1bf08ael, 0x55693fc5l,
|
||||
0x7680ad13l, 0x1e6546e8l, 0x23b6e7b9l, 0xee77a4b2l, 0x08ed0533l, 0x44fd2895l,
|
||||
0xb6393b69l, 0x05d6cacfl, 0x9819b209l, 0xecbbb72fl, 0x9a75779cl, 0xeaec0749l,
|
||||
0x94a65aeel, 0xbdf52dc3l, 0xd6a25d04l, 0x82008e4el, 0xa6de160fl, 0x9b036afbl,
|
||||
0x228b3a66l, 0x5fb10a70l, 0xcc338b58l, 0x5378a9dfl, 0xc908bca9l, 0x4959e25bl,
|
||||
0x46909a97l, 0x66ae8f6el, 0xdd0683e9l, 0x65f994b4l, 0x6426cda5l, 0xc24b8840l,
|
||||
0x32539da0l, 0x63175650l, 0xd0c815ffl, 0x50cbc41el, 0xf7c774a3l, 0x31b0c231l,
|
||||
0x8d0d8116l, 0x24bef16cl, 0xd555d256l, 0xdf47ea8cl, 0x6d21eccdl, 0xa887a012l,
|
||||
0x84542aedl, 0xa7b9c1bdl, 0x914c1bb1l, 0xa0d5b67dl, 0x438ce937l, 0x7030f873l,
|
||||
0x71f6b0c7l, 0x574576bal, 0xf8bc4541l, 0x9c61d348l, 0x1960579dl, 0x17c4daadl,
|
||||
0x96a4cb0bl, 0xc193f2f6l, 0x756eafa2l, 0x7c1d2f94l, 0xf4fe2b43l, 0xcb86e33al,
|
||||
0xebd4c728l, 0x9d18ae64l, 0x9fe13e30l, 0x3ce0f5del, 0xaba1f985l, 0xaddc2718l,
|
||||
0x68ce6278l, 0xd45e241fl, 0xa15c82b7l, 0x3b2293d4l, 0x739edd32l, 0x674a6bf1l,
|
||||
0x5b5d587fl, 0x4772deaal, 0x4a63968fl, 0x0be68686l, 0x513d6426l, 0x939a4787l,
|
||||
0xbba89296l, 0x4ec20007l, 0x818d0d08l, 0xff64dfd6l, 0xcb2297cbl, 0xdb48a144l,
|
||||
0xa16cbe4bl, 0xbbea1d6cl, 0x5af6b6b7l, 0x8a8110b6l, 0xf9236ef9l, 0xc98f83e6l,
|
||||
0x0f9c65b8l, 0x252d4a89l, 0xa497f068l, 0xa5d7ed2dl, 0x94c22845l, 0x9da1c8c4l,
|
||||
0xe27c2e2el, 0x6e8ba2b4l, 0xc3dd17fbl, 0x498cd482l, 0x0dfe6a9fl, 0xb0705829l,
|
||||
0x9a1e6dc1l, 0xf829717cl, 0x07bb8e3al, 0xda3c0b02l, 0x1af82fc7l, 0x73b70955l,
|
||||
0x7a04379cl, 0x5ee20a28l, 0x83712ae5l, 0xf4c47c6dl, 0xdf72ba56l, 0xd794858dl,
|
||||
0x8c0cf709l, 0x18f0f390l, 0xb6c69b35l, 0xbf2f01dbl, 0x2fa74dcal, 0xd0cd9127l,
|
||||
0xbde66cecl, 0x3deebd46l, 0x57c88fc3l, 0xcee1406fl, 0x0066385al, 0xf3c3444fl,
|
||||
0x3a79d5d5l, 0x75751eb9l, 0x3e7f8185l, 0x521c2605l, 0xe1aaab6el, 0x38ebb80fl,
|
||||
0xbee7e904l, 0x61cb9647l, 0xea54904el, 0x05ae00e4l, 0x2d7ac65fl, 0x087751a1l,
|
||||
0xdcd82915l, 0x0921ee16l, 0xdd86d33bl, 0xd6bd491al, 0x40fbadf0l, 0x4232cbd2l,
|
||||
0x33808d10l, 0x39098c42l, 0x193f3199l, 0x0bc1e47al, 0x4a82b149l, 0x02b65a8al,
|
||||
0x104cdc8el, 0x24a8f52cl, 0x685c6077l, 0xc79f95c9l, 0x1d11fe50l, 0xc08dafcdl,
|
||||
0x7b1a9a03l, 0x1c1f11d8l, 0x84250e7fl, 0x979db248l, 0xebdc0501l, 0xb9553395l,
|
||||
0xe3c05ea8l, 0xb1e51c4cl, 0x13b0e681l, 0x3b407766l, 0x36db3087l, 0xee17c9fcl,
|
||||
0x6c53ecf2l, 0xadccc58fl, 0xc427660bl, 0xefd5867dl, 0x9b6d54a5l, 0x6ff1aeffl,
|
||||
0x8e787952l, 0x9e2bffe0l, 0x8761d034l, 0xe00bdbadl, 0xae99a8d3l, 0xcc03f6e2l,
|
||||
0xfd0ed807l, 0x0e508ae3l, 0xb74182abl, 0x4349245dl, 0xd120a465l, 0xb246a641l,
|
||||
0xaf3b7ab0l, 0x2a6488bbl, 0x4b3a0d1fl, 0xe7c7e58cl, 0x3faff2ebl, 0x90445ffdl,
|
||||
0xcf38c393l, 0x995d07e7l, 0xf24f1b36l, 0x356f6891l, 0x6d6ebcbel, 0x8da9e262l,
|
||||
0x50fd520el, 0x5bca9e1el, 0x37472cf3l, 0x69075057l, 0x7ec5fdedl, 0x0cab892al,
|
||||
0xfb2412bal, 0x1728debfl, 0xa000a988l, 0xd843ce79l, 0x042e20ddl, 0x4fe8f853l,
|
||||
0x56659c3cl, 0x2739d119l, 0xa78a6120l, 0x80960375l, 0x70420611l, 0x85e09f78l,
|
||||
0xabd17e96l, 0x1b513eafl, 0x1e01eb63l, 0x26ad2133l, 0xa890c094l, 0x7613cf60l,
|
||||
0x817e781bl, 0xa39113d7l, 0xe957fa58l, 0x4131b99el, 0x28b1efdal, 0x66acfba7l,
|
||||
0xff68944al, 0x77a44fd1l, 0x7f331522l, 0x59ffb3fal, 0xa6df935bl, 0xfa12d9dfl,
|
||||
0xc6bf6f3fl, 0x89520cf6l, 0x659edd6al, 0x544da739l, 0x8b052538l, 0x7c30ea21l,
|
||||
0xc2345525l, 0x15927fb2l, 0x144a436bl, 0xba107b8bl, 0x1219ac97l, 0x06730432l,
|
||||
0x31831ab3l, 0xc55a5c24l, 0xaa0fcd3el, 0xe5606be8l, 0x5c88f19bl, 0x4c0841eel,
|
||||
0x1fe37267l, 0x11f9c4f4l, 0x9f1b9dael, 0x864e76d0l, 0xe637c731l, 0xd97d23a6l,
|
||||
0x32f53d5cl, 0xb8161980l, 0x93fa0f84l, 0xcaef0870l, 0x8874487el, 0x98f2cc73l,
|
||||
0x645fb5c6l, 0xcd853659l, 0x2062470dl, 0x16ede8e9l, 0x6b06dab5l, 0x78b43900l,
|
||||
0xfc95b786l, 0x5d8e7de1l, 0x465b5954l, 0xfe7ba014l, 0xf7d23f7bl, 0x92bc8b18l,
|
||||
0x03593592l, 0x55cef4f7l, 0x74b27317l, 0x79de1fc2l, 0xc8a0bfbdl, 0x229398ccl,
|
||||
0x62a602cel, 0xbcb94661l, 0x5336d206l, 0xd2a375fel, 0x6a6ab483l, 0x4702a5a4l,
|
||||
0xa2e9d73dl, 0x23a2e0f1l, 0x9189140al, 0x581d18dcl, 0xb39a922bl, 0x82356212l,
|
||||
0xd5f432a9l, 0xd356c2a3l, 0x5f765b4dl, 0x450afcc8l, 0x4415e137l, 0xe8ecdfbcl,
|
||||
0xed0de3eal, 0x60d42b13l, 0xf13df971l, 0x71fc5da2l, 0xc1455340l, 0xf087742fl,
|
||||
0xf55e5751l, 0x67b3c1f8l, 0xac6b8774l, 0x7dcfaaacl, 0x95983bc0l, 0x489bb0b1l,
|
||||
0x2c184223l, 0x964b6726l, 0x2bd3271cl, 0x72266472l, 0xded64530l, 0x0a2aa343l,
|
||||
0xd4f716a0l, 0xb4dad6d9l, 0x2184345el, 0x512c990cl, 0x29d92d08l, 0x2ebe709al,
|
||||
0x01144c69l, 0x34584b9dl, 0xe4634ed6l, 0xecc963cfl, 0x3c6984aal, 0x4ed056efl,
|
||||
0x9ca56976l, 0x8f3e80d4l, 0xb5bae7c5l, 0x30b5caf5l, 0x63f33a64l, 0xa9e4bbdel,
|
||||
0xf6b82298l, 0x4d673c1dl, 0x4b4f1121l, 0xba183081l, 0xc784f41fl, 0xd17d0bacl,
|
||||
0x083d2267l, 0x37b1361el, 0x3581ad05l, 0xfda2f6bcl, 0x1e892cddl, 0xb56d3c3al,
|
||||
0x32140e46l, 0x138d8aabl, 0xe14773d4l, 0x5b0e71dfl, 0x5d1fe055l, 0x3fb991d3l,
|
||||
0xf1f46c71l, 0xa325988cl, 0x10f66e80l, 0xb1006348l, 0x726a9f60l, 0x3b67f8bal,
|
||||
0x4e114ef4l, 0x05c52115l, 0x4c5ca11cl, 0x99e1efd8l, 0x471b83b3l, 0xcbf7e524l,
|
||||
0x43ad82f5l, 0x690ca93bl, 0xfaa61bb2l, 0x12a832b5l, 0xb734f943l, 0xbd22aea7l,
|
||||
0x88fec626l, 0x5e80c3e7l, 0xbe3eaf5el, 0x44617652l, 0xa5724475l, 0xbb3b9695l,
|
||||
0x7f3fee8fl, 0x964e7debl, 0x518c052dl, 0x2a0bbc2bl, 0xc2175f5cl, 0x9a7b3889l,
|
||||
0xa70d8d0cl, 0xeaccdd29l, 0xcccd6658l, 0x34bb25e6l, 0xb8391090l, 0xf651356fl,
|
||||
0x52987c9el, 0x0c16c1cdl, 0x8e372d3cl, 0x2fc6ebbdl, 0x6e5da3e3l, 0xb0e27239l,
|
||||
0x5f685738l, 0x45411786l, 0x067f65f8l, 0x61778b40l, 0x81ab2e65l, 0x14c8f0f9l,
|
||||
0xa6b7b4cel, 0x4036eaecl, 0xbf62b00al, 0xecfd5e02l, 0x045449a6l, 0xb20afd28l,
|
||||
0x2166d273l, 0x0d13a863l, 0x89508756l, 0xd51a7530l, 0x2d653f7al, 0x3cdbdbc3l,
|
||||
0x80c9df4fl, 0x3d5812d9l, 0x53fbb1f3l, 0xc0f185c0l, 0x7a3c3d7el, 0x68646410l,
|
||||
0x857607a0l, 0x1d12622el, 0x97f33466l, 0xdb4c9917l, 0x6469607cl, 0x566e043dl,
|
||||
0x79ef1edbl, 0x2c05898dl, 0xc9578e25l, 0xcd380101l, 0x46e04377l, 0x7d1cc7a9l,
|
||||
0x6552b837l, 0x20192608l, 0xb97500c5l, 0xed296b44l, 0x368648b4l, 0x62995cd5l,
|
||||
0x82731400l, 0xf9aebd8bl, 0x3844c0c7l, 0x7c2de794l, 0x33a1a770l, 0x8ae528c2l,
|
||||
0x5a2be812l, 0x1f8f4a07l, 0x2b5ed7cal, 0x937eb564l, 0x6fda7e11l, 0xe49b5d6cl,
|
||||
0xb4b3244el, 0x18aa53a4l, 0x3a061334l, 0x4d6067a3l, 0x83ba5868l, 0x9bdf4dfel,
|
||||
0x7449f261l, 0x709f8450l, 0xcad133cbl, 0xde941c3fl, 0xf52ae484l, 0x781d77edl,
|
||||
0x7e4395f0l, 0xae103b59l, 0x922331bbl, 0x42ce50c8l, 0xe6f08153l, 0xe7d941d0l,
|
||||
0x5028ed6bl, 0xb3d2c49bl, 0xad4d9c3el, 0xd201fb6el, 0xa45bd5bel, 0xffcb7f4bl,
|
||||
0x579d7806l, 0xf821bb5bl, 0x59d592adl, 0xd0be0c31l, 0xd4e3b676l, 0x0107165al,
|
||||
0x0fe939d2l, 0x49bcaafdl, 0x55ffcfe5l, 0x2ec1f783l, 0xf39a09a5l, 0x3eb42772l,
|
||||
0x19b55a5dl, 0x024a0679l, 0x8c83b3f7l, 0x8642ba1dl, 0xacacd9eal, 0x87d352c4l,
|
||||
0x60931f45l, 0xa05f97d7l, 0x1cecd42cl, 0xe2fcc87bl, 0xb60f94e2l, 0x67a34b0bl,
|
||||
0xfcdd40c9l, 0x0b150a27l, 0xd3ee9e04l, 0x582e29e9l, 0x4ac22b41l, 0x6ac4e1b8l,
|
||||
0xbccaa51al, 0x237af30el, 0xebc3b709l, 0xc4a59d19l, 0x284bc98al, 0xe9d41a93l,
|
||||
0x6bfa2018l, 0x73b2d651l, 0x11f9a2fal, 0xce09bff1l, 0x41a470aal, 0x25888f22l,
|
||||
0x77e754e8l, 0xf7330d8el, 0x158eab16l, 0xc5d68842l, 0xc685a6f6l, 0xe5b82fdel,
|
||||
0x09ea3a96l, 0x6dde1536l, 0x4fa919dal, 0x26c0be9fl, 0x9eed6f69l, 0xf05555f2l,
|
||||
0xe06fc285l, 0x9cd76d23l, 0xaf452a92l, 0xefc74cb7l, 0x9d6b4732l, 0x8be408eel,
|
||||
0x22401d0dl, 0xee6c459dl, 0x7587cb82l, 0xe8746862l, 0x5cbdde87l, 0x98794278l,
|
||||
0x31afb94dl, 0xc11e0f2fl, 0x30e8fc2al, 0xcf3261efl, 0x1a3023e1l, 0xaa2f86cfl,
|
||||
0xf202e24al, 0x8d08dcffl, 0x764837c6l, 0xa26374ccl, 0x9f7c3e88l, 0x949cc57dl,
|
||||
0xdd26a07fl, 0xc39efab0l, 0xc8f879a1l, 0xdce67bb9l, 0xf4b0a435l, 0x912c9ae0l,
|
||||
0xd85603e4l, 0x953a9bbfl, 0xfb8290d6l, 0x0aebcd5fl, 0x16206a9al, 0x6c787a14l,
|
||||
0xd9a0f16al, 0x29bf4f74l, 0x8f8bce91l, 0x0e5a9354l, 0xab038cb1l, 0x1b8ad11bl,
|
||||
0xe327ff49l, 0x0053da20l, 0x90cf51dcl, 0xda92fe6dl, 0x0390ca47l, 0xa8958097l,
|
||||
0xa9dc5bafl, 0x3931e3c1l, 0x840446b6l, 0x63d069fbl, 0xd7460299l, 0x7124ecd1l,
|
||||
0x0791e613l, 0x485918fcl, 0xd635d04cl, 0xdf96ac33l, 0x66f2d303l, 0x247056ael,
|
||||
0xa1a7b2a8l, 0x27d8cc9cl, 0x17b6e998l, 0x7bf5590fl, 0xfe97f557l, 0x5471d8a2l,
|
||||
0x83a327a1l, 0x9f379f51l, 0x40a7d007l, 0x11307423l, 0x224587c1l, 0xac27d63bl,
|
||||
0x3b7e64eal, 0x2e1cbfa6l, 0x09996000l, 0x03bc0e2cl, 0xd4c4478al, 0x4542e0abl,
|
||||
0xfeda26d4l, 0xc1d10fcbl, 0x8252f596l, 0x4494eb5cl, 0xa362f314l, 0xf5ba81fdl,
|
||||
0x75c3a376l, 0x4ca214cal, 0xe164deddl, 0x5088fa97l, 0x4b0930e0l, 0x2fcfb7e8l,
|
||||
0x33a6f4b2l, 0xc7e94211l, 0x2d66c774l, 0x43be8bael, 0xc663d445l, 0x908eb130l,
|
||||
0xf4e3be15l, 0x63b9d566l, 0x529396b5l, 0x1e1be743l, 0x4d5ff63fl, 0x985e4a83l,
|
||||
0x71ab9df7l, 0xc516c6f5l, 0x85c19ab4l, 0x1f4daee4l, 0xf2973431l, 0xb713dc5el,
|
||||
0x3f2e159al, 0xc824da16l, 0x06bf376al, 0xb2fe23ecl, 0xe39b1c22l, 0xf1eecb5fl,
|
||||
0x08e82d52l, 0x565686c2l, 0xab0aea93l, 0xfd47219fl, 0xebdbabd7l, 0x2404a185l,
|
||||
0x8c7312b9l, 0xa8f2d828l, 0x0c8902dal, 0x65b42b63l, 0xc0bbef62l, 0x4e3e4cefl,
|
||||
0x788f8018l, 0xee1ebab7l, 0x93928f9dl, 0x683d2903l, 0xd3b60689l, 0xafcb0ddcl,
|
||||
0x88a4c47al, 0xf6dd9c3dl, 0x7ea5fca0l, 0x8a6d7244l, 0xbe11f120l, 0x04ff91b8l,
|
||||
0x8d2dc8c0l, 0x27f97fdbl, 0x7f9e1f47l, 0x1734f0c7l, 0x26f3ed8el, 0x0df8f2bfl,
|
||||
0xb0833d9el, 0xe420a4e5l, 0xa423cae6l, 0x95616772l, 0x9ae6c049l, 0x075941f2l,
|
||||
0xd8e12812l, 0x000f6f4fl, 0x3c0d6b05l, 0x6cef921cl, 0xb82bc264l, 0x396cb008l,
|
||||
0x5d608a6fl, 0x6d7782c8l, 0x186550aal, 0x6b6fec09l, 0x28e70b13l, 0x57ce5688l,
|
||||
0xecd3af84l, 0x23335a95l, 0x91f40cd2l, 0x7b6a3b26l, 0xbd32b3b6l, 0x3754a6fbl,
|
||||
0x8ed088f0l, 0xf867e87cl, 0x20851746l, 0x6410f9c6l, 0x35380442l, 0xc2ca10a7l,
|
||||
0x1adea27fl, 0x76bddd79l, 0x92742cf4l, 0x0e98f7eel, 0x164e931dl, 0xb9c835b3l,
|
||||
0x69060a99l, 0xb44c531el, 0xfa7b66fel, 0xc98a5b53l, 0x7d95aae9l, 0x302f467bl,
|
||||
0x74b811del, 0xf3866abdl, 0xb5b3d32dl, 0xfc3157a4l, 0xd251fe19l, 0x0b5d8eacl,
|
||||
0xda71ffd5l, 0x47ea05a3l, 0x05c6a9e1l, 0xca0ee958l, 0x9939034dl, 0x25dc5edfl,
|
||||
0x79083cb1l, 0x86768450l, 0xcf757d6dl, 0x5972b6bcl, 0xa78d59c9l, 0xc4ad8d41l,
|
||||
0x2a362ad3l, 0xd1179991l, 0x601407ffl, 0xdcf50917l, 0x587069d0l, 0xe0821ed6l,
|
||||
0xdbb59427l, 0x73911a4bl, 0x7c904fc3l, 0x844afb92l, 0x6f8c955dl, 0xe8c0c5bbl,
|
||||
0xb67ab987l, 0xa529d96cl, 0xf91f7181l, 0x618b1b06l, 0xe718bb0cl, 0x8bd7615bl,
|
||||
0xd5a93a59l, 0x54aef81bl, 0x772136e3l, 0xce44fd9cl, 0x10cda57el, 0x87d66e0bl,
|
||||
0x3d798967l, 0x1b2c1804l, 0x3edfbd68l, 0x15f6e62bl, 0xef68b854l, 0x3896db35l,
|
||||
0x12b7b5e2l, 0xcb489029l, 0x9e4f98a5l, 0x62eb77a8l, 0x217c24a2l, 0x964152f6l,
|
||||
0x49b2080al, 0x53d23ee7l, 0x48fb6d69l, 0x1903d190l, 0x9449e494l, 0xbf6e7886l,
|
||||
0xfb356cfal, 0x3a261365l, 0x424bc1ebl, 0xa1192570l, 0x019ca782l, 0x9d3f7e0el,
|
||||
0x9c127575l, 0xedf02039l, 0xad57bccel, 0x5c153277l, 0x81a84540l, 0xbcaa7356l,
|
||||
0xccd59b60l, 0xa62a629bl, 0xa25ccd10l, 0x2b5b65cfl, 0x1c535832l, 0x55fd4e3al,
|
||||
0x31d9790dl, 0xf06bc37dl, 0x4afc1d71l, 0xaeed5533l, 0xba461634l, 0xbb694b78l,
|
||||
0x5f3a5c73l, 0x6a3c764al, 0x8fb0cca9l, 0xf725684cl, 0x4fe5382fl, 0x1d0163afl,
|
||||
0x5aa07a8fl, 0xe205a8edl, 0xc30bad38l, 0xff22cf1fl, 0x72432e2el, 0x32c2518bl,
|
||||
0x3487ce4el, 0x7ae0ac02l, 0x709fa098l, 0x0a3b395al, 0x5b4043f8l, 0xa9e48c36l,
|
||||
0x149a8521l, 0xd07dee6bl, 0x46acd2f3l, 0x8958dffcl, 0xb3a1223cl, 0xb11d31c4l,
|
||||
0xcd7f4d3el, 0x0f28e3adl, 0xe5b100bel, 0xaac54824l, 0xe9c9d7bal, 0x9bd47001l,
|
||||
0x80f149b0l, 0x66022f0fl, 0x020c4048l, 0x6efa192al, 0x67073f8dl, 0x13ec7bf9l,
|
||||
0x3655011al, 0xe6afe157l, 0xd9845f6el, 0xdecc4425l, 0x511ae2ccl, 0xdf81b4d8l,
|
||||
0xd7809e55l, 0xd6d883d9l, 0x2cc7978cl, 0x5e787cc5l, 0xdd0033d1l, 0xa050c937l,
|
||||
0x97f75dcdl, 0x299de580l, 0x41e2b261l, 0xea5a54f1l, 0x7e672590l, 0xbea513bbl,
|
||||
0x2c906fe6l, 0x86029c2bl, 0x55dc4f74l, 0x0553398el, 0x63e09647l, 0xcafd0babl,
|
||||
0x264c37dfl, 0x8272210fl, 0x67afa669l, 0x12d98a5fl, 0x8cab23c4l, 0x75c68bd1l,
|
||||
0xc3370470l, 0x33f37f4el, 0x283992ffl, 0xe73a3a67l, 0x1032f283l, 0xf5ad9fc2l,
|
||||
0x963f0c5dl, 0x664fbc45l, 0x202ba41cl, 0xc7c02d80l, 0x54731e84l, 0x8a1085f5l,
|
||||
0x601d80fbl, 0x2f968e55l, 0x35e96812l, 0xe45a8f78l, 0xbd7de662l, 0x3b6e6eadl,
|
||||
0x8097c5efl, 0x070b6781l, 0xb1e508f3l, 0x24e4fae3l, 0xb81a7805l, 0xec0fc918l,
|
||||
0x43c8774bl, 0x9b2512a9l, 0x2b05ad04l, 0x32c2536fl, 0xedf236e0l, 0x8bc4b0cfl,
|
||||
0xbaceb837l, 0x4535b289l, 0x0d0e94c3l, 0xa5a371d0l, 0xad695a58l, 0x39e3437dl,
|
||||
0x9186bffcl, 0x21038c3bl, 0x0aa9dff9l, 0x5d1f06cel, 0x62def8a4l, 0xf740a2b4l,
|
||||
0xa2575868l, 0x682683c1l, 0xdbb30facl, 0x61fe1928l, 0x468a6511l, 0xc61cd5f4l,
|
||||
0xe54d9800l, 0x6b98d7f7l, 0x8418b6a5l, 0x5f09a5d2l, 0x90b4e80bl, 0x49b2c852l,
|
||||
0x69f11c77l, 0x17412b7el, 0x7f6fc0edl, 0x56838dccl, 0x6e9546a2l, 0xd0758619l,
|
||||
0x087b9b9al, 0xd231a01dl, 0xaf46d415l, 0x097060fdl, 0xd920f657l, 0x882d3f9fl,
|
||||
0x3ae7c3c9l, 0xe8a00d9bl, 0x4fe67ebel, 0x2ef80eb2l, 0xc1916b0cl, 0xf4dffea0l,
|
||||
0xb97eb3ebl, 0xfdff84ddl, 0xff8b14f1l, 0xe96b0572l, 0xf64b508cl, 0xae220a6el,
|
||||
0x4423ae5al, 0xc2bece5el, 0xde27567cl, 0xfc935c63l, 0x47075573l, 0xe65b27f0l,
|
||||
0xe121fd22l, 0xf2668753l, 0x2debf5d7l, 0x8347e08dl, 0xac5eda03l, 0x2a7cebe9l,
|
||||
0x3fe8d92el, 0x23542fe4l, 0x1fa7bd50l, 0xcf9b4102l, 0x9d0dba39l, 0x9cb8902al,
|
||||
0xa7249d8bl, 0x0f6d667al, 0x5ebfa9ecl, 0x6a594df2l, 0x79600938l, 0x023b7591l,
|
||||
0xea2c79c8l, 0xc99d07eal, 0x64cb5ee1l, 0x1a9cab3dl, 0x76db9527l, 0xc08e012fl,
|
||||
0x3dfb481al, 0x872f22e7l, 0x2948d15cl, 0xa4782c79l, 0x6f50d232l, 0x78f0728al,
|
||||
0x5a87aab1l, 0xc4e2c19cl, 0xee767387l, 0x1b2a1864l, 0x7b8d10d3l, 0xd1713161l,
|
||||
0x0eeac456l, 0xd8799e06l, 0xb645b548l, 0x4043cb65l, 0xa874fb29l, 0x4b12d030l,
|
||||
0x7d687413l, 0x18ef9a1fl, 0xd7631d4cl, 0x5829c7dal, 0xcdfa30fal, 0xc5084bb0l,
|
||||
0x92cd20e2l, 0xd4c16940l, 0x03283ec0l, 0xa917813fl, 0x9a587d01l, 0x70041f8fl,
|
||||
0xdc6ab1dcl, 0xddaee3d5l, 0x31829742l, 0x198c022dl, 0x1c9eafcbl, 0x5bbc6c49l,
|
||||
0xd3d3293al, 0x16d50007l, 0x04bb8820l, 0x3c5c2a41l, 0x37ee7af8l, 0x8eb04025l,
|
||||
0x9313ecbal, 0xbffc4799l, 0x8955a744l, 0xef85d633l, 0x504499a7l, 0xa6ca6a86l,
|
||||
0xbb3d3297l, 0xb34a8236l, 0x6dccbe4fl, 0x06143394l, 0xce19fc7bl, 0xccc3c6c6l,
|
||||
0xe36254ael, 0x77b7eda1l, 0xa133dd9el, 0xebf9356al, 0x513ccf88l, 0xe2a1b417l,
|
||||
0x972ee5bdl, 0x853824cdl, 0x5752f4eel, 0x6c1142e8l, 0x3ea4f309l, 0xb2b5934al,
|
||||
0xdfd628aal, 0x59acea3el, 0xa01eb92cl, 0x389964bcl, 0xda305dd4l, 0x019a59b7l,
|
||||
0x11d2ca93l, 0xfaa6d3b9l, 0x4e772ecal, 0x72651776l, 0xfb4e5b0el, 0xa38f91a8l,
|
||||
0x1d0663b5l, 0x30f4f192l, 0xb50051b6l, 0xb716ccb3l, 0x4abd1b59l, 0x146c5f26l,
|
||||
0xf134e2del, 0x00f67c6cl, 0xb0e1b795l, 0x98aa4ec7l, 0x0cc73b34l, 0x654276a3l,
|
||||
0x8d1ba871l, 0x740a5216l, 0xe0d01a23l, 0x9ed161d6l, 0x9f36a324l, 0x993ebb7fl,
|
||||
0xfeb9491bl, 0x365ddcdbl, 0x810cffc5l, 0x71ec0382l, 0x2249e7bfl, 0x48817046l,
|
||||
0xf3a24a5bl, 0x4288e4d9l, 0x0bf5c243l, 0x257fe151l, 0x95b64c0dl, 0x4164f066l,
|
||||
0xaaf7db08l, 0x73b1119dl, 0x8f9f7bb8l, 0xd6844596l, 0xf07a34a6l, 0x53943d0al,
|
||||
0xf9dd166dl, 0x7a8957afl, 0xf8ba3ce5l, 0x27c9621el, 0x5cdae910l, 0xc8518998l,
|
||||
0x941538fel, 0x136115d8l, 0xaba8443cl, 0x4d01f931l, 0x34edf760l, 0xb45f266bl,
|
||||
0xd5d4de14l, 0x52d8ac35l, 0x15cfd885l, 0xcbc5cd21l, 0x4cd76d4dl, 0x7c80ef54l,
|
||||
0xbc92ee75l, 0x1e56a1f6l, 0xbaa20b6cl, 0x9ffbad26l, 0xe1f7d738l, 0x794aec8dl,
|
||||
0xc9e9cf3cl, 0x8a9a7846l, 0xc57c4685l, 0xb9a92fedl, 0x29cb141fl, 0x52f9ddb7l,
|
||||
0xf68ba6bcl, 0x19ccc020l, 0x4f584aaal, 0x3bf6a596l, 0x003b7cf7l, 0x54f0ce9al,
|
||||
0xa7ec4303l, 0x46cf0077l, 0x78d33aa1l, 0x215247d9l, 0x74bcdf91l, 0x08381d30l,
|
||||
0xdac43e40l, 0x64872531l, 0x0beffe5fl, 0xb317f457l, 0xaebb12dal, 0xd5d0d67bl,
|
||||
0x7d75c6b4l, 0x42a6d241l, 0x1502d0a9l, 0x3fd97fffl, 0xc6c3ed28l, 0x81868d0al,
|
||||
0x92628bc5l, 0x86679544l, 0xfd1867afl, 0x5ca3ea61l, 0x568d5578l, 0x4a2d71f4l,
|
||||
0x43c9d549l, 0x8d95de2bl, 0x6e5c74a0l, 0x9120ffc7l, 0x0d05d14al, 0xa93049d3l,
|
||||
0xbfa80e17l, 0xf4096810l, 0x043f5ef5l, 0xa673b4f1l, 0x6d780298l, 0xa4847783l,
|
||||
0x5ee726fbl, 0x9934c281l, 0x220a588cl, 0x384e240fl, 0x933d5c69l, 0x39e5ef47l,
|
||||
0x26e8b8f3l, 0x4c1c6212l, 0x8040f75dl, 0x074b7093l, 0x6625a8d7l, 0x36298945l,
|
||||
0x76285088l, 0x651d37c3l, 0x24f5274dl, 0xdbca3dabl, 0x186b7ee1l, 0xd80f8182l,
|
||||
0x14210c89l, 0x943a3075l, 0x4e6e11c4l, 0x4d7e6badl, 0xf05064c8l, 0x025dcd97l,
|
||||
0x4bc10302l, 0x7cede572l, 0x8f90a970l, 0xab88eebal, 0xb5998029l, 0x5124d839l,
|
||||
0xb0eeb6a3l, 0x89ddabdcl, 0xe8074d76l, 0xa1465223l, 0x32518cf2l, 0x9d39d4ebl,
|
||||
0xc0d84524l, 0xe35e6ea8l, 0x7abf3804l, 0x113e2348l, 0x9ae6069dl, 0xb4dfdabbl,
|
||||
0xa8c5313fl, 0x23ea3f79l, 0x530e36a2l, 0xa5fd228bl, 0x95d1d350l, 0x2b14cc09l,
|
||||
0x40042956l, 0x879d05ccl, 0x2064b9cal, 0xacaca40el, 0xb29c846el, 0x9676c9e3l,
|
||||
0x752b7b8al, 0x7be2bcc2l, 0x6bd58f5el, 0xd48f4c32l, 0x606835e4l, 0x9cd7c364l,
|
||||
0x2c269b7al, 0x3a0d079cl, 0x73b683fel, 0x45374f1el, 0x10afa242l, 0x577f8666l,
|
||||
0xddaa10f6l, 0xf34f561cl, 0x3d355d6bl, 0xe47048ael, 0xaa13c492l, 0x050344fdl,
|
||||
0x2aab5151l, 0xf5b26ae5l, 0xed919a59l, 0x5ac67900l, 0xf1cde380l, 0x0c79a11bl,
|
||||
0x351533fcl, 0xcd4d8e36l, 0x1f856005l, 0x690b9fddl, 0xe736dccfl, 0x1d47bf6al,
|
||||
0x7f66c72al, 0x85f21b7fl, 0x983cbdb6l, 0x01ebbebfl, 0x035f3b99l, 0xeb111f34l,
|
||||
0x28cefdc6l, 0x5bfc9ecdl, 0xf22eacb0l, 0x9e41cbb2l, 0xe0f8327cl, 0x82e3e26fl,
|
||||
0xfc43fc86l, 0xd0ba66dfl, 0x489ef2a7l, 0xd9e0c81dl, 0x68690d52l, 0xcc451367l,
|
||||
0xc2232e16l, 0xe95a7335l, 0x0fdae19bl, 0xff5b962cl, 0x97596527l, 0xc46db333l,
|
||||
0x3ed4c562l, 0xc14c9d9el, 0x5d6faa21l, 0x638e940dl, 0xf9316d58l, 0x47b3b0eal,
|
||||
0x30ffcad2l, 0xce1bba7dl, 0x1e6108e6l, 0x2e1ea33dl, 0x507bf05bl, 0xfafef94bl,
|
||||
0xd17de8e2l, 0x5598b214l, 0x1663f813l, 0x17d25a2dl, 0xeefa5ff9l, 0x582f4e37l,
|
||||
0x12128773l, 0xfef17ab8l, 0x06005322l, 0xbb32bbc9l, 0x8c898508l, 0x592c15f0l,
|
||||
0xd38a4054l, 0x4957b7d6l, 0xd2b891dbl, 0x37bd2d3el, 0x34ad20cbl, 0x622288e9l,
|
||||
0x2dc7345al, 0xafb416c0l, 0x1cf459b1l, 0xdc7739fal, 0x0a711a25l, 0x13e18a0cl,
|
||||
0x5f72af4cl, 0x6ac8db11l, 0xbe53c18el, 0x1aa569b9l, 0xef551ea4l, 0xa02a429fl,
|
||||
0xbd16e790l, 0x7eb9171al, 0x77d693d8l, 0x8e06993al, 0x9bde7560l, 0xe5801987l,
|
||||
0xc37a09bel, 0xb8db76acl, 0xe2087294l, 0x6c81616dl, 0xb7f30fe7l, 0xbc9b82bdl,
|
||||
0xfba4e4d4l, 0xc7b1012fl, 0xa20c043bl, 0xde9febd0l, 0x2f9297cel, 0xe610aef8l,
|
||||
0x70b06f19l, 0xc86ae00bl, 0x0e01988fl, 0x41192ae0l, 0x448c1cb5l, 0xadbe92eel,
|
||||
0x7293a007l, 0x1b54b5b3l, 0xd61f63d1l, 0xeae40a74l, 0x61a72b55l, 0xec83a7d5l,
|
||||
0x88942806l, 0x90a07da5l, 0xd7424b95l, 0x67745b4el, 0xa31a1853l, 0xca6021efl,
|
||||
0xdfb56c4fl, 0xcbc2d915l, 0x3c48e918l, 0x8bae3c63l, 0x6f659c71l, 0xf8b754c1l,
|
||||
0x2782f3del, 0xf796f168l, 0x71492c84l, 0x33c0f5a6l, 0x3144f6ecl, 0x25dc412el,
|
||||
0xb16c5743l, 0x83a1fa7el, 0x0997b101l, 0xb627e6e8l, 0xcf33905cl, 0x8456fb65l,
|
||||
0xb29bea74l, 0xc35da605l, 0x305c1ca3l, 0xd2e9f5bcl, 0x6fd5bff4l, 0xff347703l,
|
||||
0xfc45b163l, 0xf498e068l, 0xb71229fcl, 0x81acc3fbl, 0x78538a8bl, 0x984ecf81l,
|
||||
0xa5da47a4l, 0x8f259eefl, 0x6475dc65l, 0x081865b9l, 0x49e14a3cl, 0x19e66079l,
|
||||
0xd382e91bl, 0x5b109794l, 0x3f9f81e1l, 0x4470a388l, 0x41601abel, 0xaaf9f407l,
|
||||
0x8e175ef6l, 0xed842297l, 0x893a4271l, 0x1790839al, 0xd566a99el, 0x6b417deel,
|
||||
0x75c90d23l, 0x715edb31l, 0x723553f7l, 0x9afb50c9l, 0xfbc5f600l, 0xcd3b6a4el,
|
||||
0x97ed0fbal, 0x29689aecl, 0x63135c8el, 0xf0e26c7el, 0x0692ae7fl, 0xdbb208ffl,
|
||||
0x2ede3e9bl, 0x6a65bebdl, 0xd40867e9l, 0xc954afc5l, 0x73b08201l, 0x7ffdf809l,
|
||||
0x1195c24fl, 0x1ca5adcal, 0x74bd6d1fl, 0xb393c455l, 0xcadfd3fal, 0x99f13011l,
|
||||
0x0ebca813l, 0x60e791b8l, 0x6597ac7al, 0x18a7e46bl, 0x09cb49d3l, 0x0b27df6dl,
|
||||
0xcfe52f87l, 0xcef66837l, 0xe6328035l, 0xfa87c592l, 0x37baff93l, 0xd71fcc99l,
|
||||
0xdcab205cl, 0x4d7a5638l, 0x48012510l, 0x62797558l, 0xb6cf1fe5l, 0xbc311834l,
|
||||
0x9c2373acl, 0x14ec6175l, 0xa439cbdfl, 0x54afb0eal, 0xd686960bl, 0xfdd0d47bl,
|
||||
0x7b063902l, 0x8b78bac3l, 0x26c6a4d5l, 0x5c0055b6l, 0x2376102el, 0x0411783el,
|
||||
0x2aa3f1cdl, 0x51fc6ea8l, 0x701ce243l, 0x9b2a0abbl, 0x0ad93733l, 0x6e80d03dl,
|
||||
0xaf6295d1l, 0xf629896fl, 0xa30b0648l, 0x463d8dd4l, 0x963f84cbl, 0x01ff94f8l,
|
||||
0x8d7fefdcl, 0x553611c0l, 0xa97c1719l, 0xb96af759l, 0xe0e3c95el, 0x0528335bl,
|
||||
0x21fe5925l, 0x821a5245l, 0x807238b1l, 0x67f23db5l, 0xea6b4eabl, 0x0da6f985l,
|
||||
0xab1bc85al, 0xef8c90e4l, 0x4526230el, 0x38eb8b1cl, 0x1b91cd91l, 0x9fce5f0cl,
|
||||
0xf72cc72bl, 0xc64f2617l, 0xdaf7857dl, 0x7d373cf1l, 0x28eaedd7l, 0x203887d0l,
|
||||
0xc49a155fl, 0xa251b3b0l, 0xf2d47ae3l, 0x3d9ef267l, 0x4a94ab2fl, 0x7755a222l,
|
||||
0x0205e329l, 0xc28fa7a7l, 0xaec1fe51l, 0x270f164cl, 0x8c6d01bfl, 0x53b5bc98l,
|
||||
0xc09d3febl, 0x834986ccl, 0x4309a12cl, 0x578b2a96l, 0x3bb74b86l, 0x69561b4al,
|
||||
0x037e32f3l, 0xde335b08l, 0xc5156be0l, 0xe7ef09adl, 0x93b834c7l, 0xa7719352l,
|
||||
0x59302821l, 0xe3529d26l, 0xf961da76l, 0xcb142c44l, 0xa0f3b98dl, 0x76502457l,
|
||||
0x945a414bl, 0x078eeb12l, 0xdff8de69l, 0xeb6c8c2dl, 0xbda90c4dl, 0xe9c44d16l,
|
||||
0x168dfd66l, 0xad64763bl, 0xa65fd764l, 0x95a29c06l, 0x32d7713fl, 0x40f0b277l,
|
||||
0x224af08fl, 0x004cb5e8l, 0x92574814l, 0x8877d827l, 0x3e5b2d04l, 0x68c2d5f2l,
|
||||
0x86966273l, 0x1d433adal, 0x8774988al, 0x3c0e0bfel, 0xddad581dl, 0x2fd654edl,
|
||||
0x0f4769fdl, 0xc181ee9dl, 0x5fd88f61l, 0x341dbb3al, 0x528543f9l, 0xd92235cfl,
|
||||
0x1ea82eb4l, 0xb5cd790fl, 0x91d24f1el, 0xa869e6c2l, 0x61f474d2l, 0xcc205addl,
|
||||
0x0c7bfba9l, 0xbf2b0489l, 0xb02d72d8l, 0x2b46ece6l, 0xe4dcd90al, 0xb8a11440l,
|
||||
0xee8a63b7l, 0x854dd1a1l, 0xd1e00583l, 0x42b40e24l, 0x9e8964del, 0xb4b35d78l,
|
||||
0xbec76f6el, 0x24b9c620l, 0xd8d399a6l, 0x5adb2190l, 0x2db12730l, 0x3a5866afl,
|
||||
0x58c8fadbl, 0x5d8844e7l, 0x8a4bf380l, 0x15a01d70l, 0x79f5c028l, 0x66be3b8cl,
|
||||
0xf3e42b53l, 0x56990039l, 0x2c0c3182l, 0x5e16407cl, 0xecc04515l, 0x6c440284l,
|
||||
0x4cb6701al, 0x13bfc142l, 0x9d039f6al, 0x4f6e92c8l, 0xa1407c62l, 0x8483a095l,
|
||||
0xc70ae1c4l, 0xe20213a2l, 0xbacafc41l, 0x4ecc12b3l, 0x4bee3646l, 0x1fe807ael,
|
||||
0x25217f9cl, 0x35dde5f5l, 0x7a7dd6cel, 0xf89cce50l, 0xac07b718l, 0x7e73d2c6l,
|
||||
0xe563e76cl, 0x123ca536l, 0x3948ca56l, 0x9019dd49l, 0x10aa88d9l, 0xc82451e2l,
|
||||
0x473eb6d6l, 0x506fe854l, 0xe8bb03a5l, 0x332f4c32l, 0xfe1e1e72l, 0xb1ae572al,
|
||||
0x7c0d7bc1l, 0xe1c37eb2l, 0xf542aa60l, 0xf1a48ea0l, 0xd067b89fl, 0xbbfa195dl,
|
||||
0x1a049b0dl, 0x315946aal, 0x36d1b447l, 0x6d2ebdf0l, 0x0d188a6dl, 0x12cea0dbl,
|
||||
0x7e63740el, 0x6a444821l, 0x253d234fl, 0x6ffc6597l, 0x94a6bdefl, 0x33ee1b2fl,
|
||||
0x0a6c00c0l, 0x3aa336b1l, 0x5af55d17l, 0x265fb3dcl, 0x0e89cf4dl, 0x0786b008l,
|
||||
0xc80055b8l, 0x6b17c3cel, 0x72b05a74l, 0xd21a8d78l, 0xa6b70840l, 0xfe8eae77l,
|
||||
0xed69565cl, 0x55e1bcf4l, 0x585c2f60l, 0xe06f1a62l, 0xad67c0cdl, 0x7712af88l,
|
||||
0x9cc26acal, 0x1888053dl, 0x37eb853el, 0x9215abd7l, 0xde30adfcl, 0x1f1038e6l,
|
||||
0x70c51c8al, 0x8d586c26l, 0xf72bdd90l, 0x4dc3ce15l, 0x68eaeefal, 0xd0e9c8b9l,
|
||||
0x200f9c44l, 0xddd141bal, 0x024bf1d3l, 0x0f64c9d4l, 0xc421e9e9l, 0x9d11c14cl,
|
||||
0x9a0dd9e4l, 0x5f92ec19l, 0x1b980df0l, 0x1dcc4542l, 0xb8fe8c56l, 0x0c9c9167l,
|
||||
0x4e81eb49l, 0xca368f27l, 0xe3603b37l, 0xea08acccl, 0xac516992l, 0xc34f513bl,
|
||||
0x804d100dl, 0x6edca4c4l, 0xfc912939l, 0x29d219b0l, 0x278aaa3cl, 0x4868da7dl,
|
||||
0x54e890b7l, 0xb46d735al, 0x514589aal, 0xd6c630afl, 0x4980dfe8l, 0xbe3ccc55l,
|
||||
0x59d41202l, 0x650c078bl, 0xaf3a9e7bl, 0x3ed9827al, 0x9e79fc6el, 0xaadbfbael,
|
||||
0xc5f7d803l, 0x3daf7f50l, 0x67b4f465l, 0x73406e11l, 0x39313f8cl, 0x8a6e6686l,
|
||||
0xd8075f1fl, 0xd3cbfed1l, 0x69c7e49cl, 0x930581e0l, 0xe4b1a5a8l, 0xbbc45472l,
|
||||
0x09ddbf58l, 0xc91d687el, 0xbdbffda5l, 0x88c08735l, 0xe9e36bf9l, 0xdb5ea9b6l,
|
||||
0x95559404l, 0x08f432fbl, 0xe24ea281l, 0x64663579l, 0x000b8010l, 0x7914e7d5l,
|
||||
0x32fd0473l, 0xd1a7f0a4l, 0x445ab98el, 0xec72993fl, 0xa29a4d32l, 0xb77306d8l,
|
||||
0xc7c97cf6l, 0x7b6ab645l, 0xf5ef7adfl, 0xfb2e15f7l, 0xe747f757l, 0x5e944354l,
|
||||
0x234a2669l, 0x47e46359l, 0x9b9d11a9l, 0x40762cedl, 0x56f1de98l, 0x11334668l,
|
||||
0x890a9a70l, 0x1a296113l, 0xb3bd4af5l, 0x163b7548l, 0xd51b4f84l, 0xb99b2abcl,
|
||||
0x3cc1dc30l, 0xa9f0b56cl, 0x812272b2l, 0x0b233a5fl, 0xb650dbf2l, 0xf1a0771bl,
|
||||
0x36562b76l, 0xdc037b0fl, 0x104c97ffl, 0xc2ec98d2l, 0x90596f22l, 0x28b6620bl,
|
||||
0xdf42b212l, 0xfdbc4243l, 0xf3fb175el, 0x4a2d8b00l, 0xe8f3869bl, 0x30d69bc3l,
|
||||
0x853714c8l, 0xa7751d2el, 0x31e56deal, 0xd4840b0cl, 0x9685d783l, 0x068c9333l,
|
||||
0x8fba032cl, 0x76d7bb47l, 0x6d0ee22bl, 0xb546794bl, 0xd971b894l, 0x8b09d253l,
|
||||
0xa0ad5761l, 0xee77ba06l, 0x46359f31l, 0x577cc7ecl, 0x52825efdl, 0xa4beed95l,
|
||||
0x9825c52al, 0xeb48029al, 0xbaae59f8l, 0xcf490ee1l, 0xbc990164l, 0x8ca49dfel,
|
||||
0x4f38a6e7l, 0x2ba98389l, 0x8228f538l, 0x199f64acl, 0x01a1cac5l, 0xa8b51641l,
|
||||
0x5ce72d01l, 0x8e5df26bl, 0x60f28e1el, 0xcd5be125l, 0xe5b376bfl, 0x1c8d3116l,
|
||||
0x7132cbb3l, 0xcb7ae320l, 0xc0fa5366l, 0xd7653e34l, 0x971c88c2l, 0xc62c7dd0l,
|
||||
0x34d0a3dal, 0x868f6709l, 0x7ae6fa8fl, 0x22bbd523l, 0x66cd3d5bl, 0x1ef9288dl,
|
||||
0xf9cf58c1l, 0x5b784e80l, 0x7439a191l, 0xae134c36l, 0x9116c463l, 0x2e9e1396l,
|
||||
0xf8611f3al, 0x2d2f3307l, 0x247f37ddl, 0xc1e2ff9dl, 0x43c821e5l, 0x05ed5cabl,
|
||||
0xef74e80al, 0x4cca6028l, 0xf0ac3cbdl, 0x5d874b29l, 0x6c62f6a6l, 0x4b2a2ef3l,
|
||||
0xb1aa2087l, 0x62a5d0a3l, 0x0327221cl, 0xb096b4c6l, 0x417ec693l, 0xaba840d6l,
|
||||
0x789725ebl, 0xf4b9e02dl, 0xe6e00975l, 0xcc04961al, 0x63f624bbl, 0x7fa21ecbl,
|
||||
0x2c01ea7fl, 0xb2415005l, 0x2a8bbeb5l, 0x83b2b14el, 0xa383d1a7l, 0x5352f96al,
|
||||
0x043ecdadl, 0xce1918a1l, 0xfa6be6c9l, 0x50def36fl, 0xf6b80ce2l, 0x4543ef7cl,
|
||||
0x9953d651l, 0xf257955dl, 0x87244914l, 0xda1e0a24l, 0xffda4785l, 0x14d327a2l,
|
||||
0x3b93c29fl, 0x840684b4l, 0x61ab71a0l, 0x9f7b784al, 0x2fd570cfl, 0x15955bdel,
|
||||
0x38f8d471l, 0x3534a718l, 0x133fb71dl, 0x3fd80f52l, 0x4290a8bel, 0x75ff44c7l,
|
||||
0xa554e546l, 0xe1023499l, 0xbf2652e3l, 0x7d20399el, 0xa1df7e82l, 0x177092eel,
|
||||
0x217dd3f1l, 0x7c1ff8d9l, 0x12113f2el, 0xbfbd0785l, 0xf11793fbl, 0xa5bff566l,
|
||||
0x83c7b0e5l, 0x72fb316bl, 0x75526a9al, 0x41e0e612l, 0x7156ba09l, 0x53ce7deel,
|
||||
0x0aa26881l, 0xa43e0d7dl, 0x3da73ca3l, 0x182761edl, 0xbd5077ffl, 0x56db4aa0l,
|
||||
0xe792711cl, 0xf0a4eb1dl, 0x7f878237l, 0xec65c4e8l, 0x08dc8d43l, 0x0f8ce142l,
|
||||
0x8258abdal, 0xf4154e16l, 0x49dec2fdl, 0xcd8d5705l, 0x6c2c3a0fl, 0x5c12bb88l,
|
||||
0xeff3cdb6l, 0x2c89ed8cl, 0x7beba967l, 0x2a142157l, 0xc6d0836fl, 0xb4f97e96l,
|
||||
0x6931e969l, 0x514e6c7cl, 0xa7792600l, 0x0bbbf780l, 0x59671bbdl, 0x0707b676l,
|
||||
0x37482d93l, 0x80af1479l, 0x3805a60dl, 0xe1f4cac1l, 0x580b3074l, 0x30b8d6cel,
|
||||
0x05a304bel, 0xd176626dl, 0xebca97f3l, 0xbb201f11l, 0x6a1afe23l, 0xffaa86e4l,
|
||||
0x62b4da49l, 0x1b6629f5l, 0xf5d9e092l, 0xf37f3dd1l, 0x619bd45bl, 0xa6ec8e4fl,
|
||||
0x29c80939l, 0x0c7c0c34l, 0x9cfe6e48l, 0xe65fd3acl, 0x73613b65l, 0xb3c669f9l,
|
||||
0xbe2e8a9el, 0x286f9678l, 0x5797fd13l, 0x99805d75l, 0xcfb641c5l, 0xa91074bal,
|
||||
0x6343af47l, 0x6403cb46l, 0x8894c8dbl, 0x2663034cl, 0x3c40dc5el, 0x00995231l,
|
||||
0x96789aa2l, 0x2efde4b9l, 0x7dc195e1l, 0x547dadd5l, 0x06a8ea04l, 0xf2347a63l,
|
||||
0x5e0dc6f7l, 0x8462dfc2l, 0x1e6b2c3cl, 0x9bd275b3l, 0x91d419e2l, 0xbcefd17el,
|
||||
0xb9003924l, 0xd07e7320l, 0xdef0495cl, 0xc36ad00el, 0x1785b1abl, 0x92e20bcfl,
|
||||
0xb139f0e9l, 0x675bb9a1l, 0xaecfa4afl, 0x132376cbl, 0xe84589d3l, 0x79a05456l,
|
||||
0xa2f860bcl, 0x1ae4f8b5l, 0x20df4db4l, 0xa1e1428bl, 0x3bf60a1al, 0x27ff7bf1l,
|
||||
0xcb44c0e7l, 0xf7f587c4l, 0x1f3b9b21l, 0x94368f01l, 0x856e23a4l, 0x6f93de3fl,
|
||||
0x773f5bbfl, 0x8b22056el, 0xdf41f654l, 0xb8246ff4l, 0x8d57bff2l, 0xd57167eal,
|
||||
0xc5699f22l, 0x40734ba7l, 0x5d5c2772l, 0x033020a8l, 0xe30a7c4dl, 0xadc40fd6l,
|
||||
0x76353441l, 0x5aa5229bl, 0x81516590l, 0xda49f14el, 0x4fa672a5l, 0x4d9fac5fl,
|
||||
0x154be230l, 0x8a7a5cc0l, 0xce3d2f84l, 0xcca15514l, 0x5221360cl, 0xaf0fb81el,
|
||||
0x5bdd5873l, 0xf6825f8fl, 0x1113d228l, 0x70ad996cl, 0x93320051l, 0x60471c53l,
|
||||
0xe9ba567bl, 0x3a462ae3l, 0x5f55e72dl, 0x1d3c5ad7l, 0xdcfc45ecl, 0x34d812efl,
|
||||
0xfa96ee1bl, 0x369d1ef8l, 0xc9b1a189l, 0x7c1d3555l, 0x50845edcl, 0x4bb31877l,
|
||||
0x8764a060l, 0x8c9a9415l, 0x230e1a3al, 0xb05e9133l, 0x242b9e03l, 0xa3b99db7l,
|
||||
0xc2d7fb0al, 0x3333849dl, 0xd27278d4l, 0xb5d3efa6l, 0x78ac28adl, 0xc7b2c135l,
|
||||
0x0926ecf0l, 0xc1374c91l, 0x74f16d98l, 0x2274084al, 0x3f6d9cfal, 0x7ac0a383l,
|
||||
0xb73aff1fl, 0x3909a23dl, 0x9f1653ael, 0x4e2f3e71l, 0xca5ab22al, 0xe01e3858l,
|
||||
0x90c5a7ebl, 0x3e4a17dfl, 0xaa987fb0l, 0x488bbd62l, 0xb625062bl, 0x2d776bb8l,
|
||||
0x43b5fc08l, 0x1490d532l, 0xd6d12495l, 0x44e89845l, 0x2fe60118l, 0x9d9ef950l,
|
||||
0xac38133el, 0xd3864329l, 0x017b255al, 0xfdc2dd26l, 0x256851e6l, 0x318e7086l,
|
||||
0x2bfa4861l, 0x89eac706l, 0xee5940c6l, 0x68c3bc2fl, 0xe260334bl, 0x98da90bbl,
|
||||
0xf818f270l, 0x4706d897l, 0x212d3799l, 0x4cf7e5d0l, 0xd9c9649fl, 0xa85db5cdl,
|
||||
0x35e90e82l, 0x6b881152l, 0xab1c02c7l, 0x46752b02l, 0x664f598el, 0x45ab2e64l,
|
||||
0xc4cdb4b2l, 0xba42107fl, 0xea2a808al, 0x971bf3del, 0x4a54a836l, 0x4253aeccl,
|
||||
0x1029be68l, 0x6dcc9225l, 0xe4bca56al, 0xc0ae50b1l, 0x7e011d94l, 0xe59c162cl,
|
||||
0xd8e5c340l, 0xd470fa0bl, 0xb2be79ddl, 0xd783889cl, 0x1cede8f6l, 0x8f4c817al,
|
||||
0xddb785c9l, 0x860232d8l, 0x198aaad9l, 0xa0814738l, 0x3219cffcl, 0x169546d2l,
|
||||
0xfc0cb759l, 0x55911510l, 0x04d5cec3l, 0xed08cc3bl, 0x0d6cf427l, 0xc8e38ccal,
|
||||
0x0eeee3fel, 0x9ee7d7c8l, 0xf9f24fa9l, 0xdb04b35dl, 0x9ab0c9e0l, 0x651f4417l,
|
||||
0x028f8b07l, 0x6e28d9aal, 0xfba96319l, 0x8ed66687l, 0xfecbc58dl, 0x954ddb44l,
|
||||
0x7b0bdffel, 0x865d16b1l, 0x49a058c0l, 0x97abaa3fl, 0xcaacc75dl, 0xaba6c17dl,
|
||||
0xf8746f92l, 0x6f48aeedl, 0x8841d4b5l, 0xf36a146al, 0x73c390abl, 0xe6fb558fl,
|
||||
0x87b1019el, 0x26970252l, 0x246377b2l, 0xcbf676ael, 0xf923db06l, 0xf7389116l,
|
||||
0x14c81a90l, 0x83114eb4l, 0x8b137559l, 0x95a86a7al, 0xd5b8da8cl, 0xc4df780el,
|
||||
0x5a9cb3e2l, 0xe44d4062l, 0xe8dc8ef6l, 0x9d180845l, 0x817ad18bl, 0xc286c85bl,
|
||||
0x251f20del, 0xee6d5933l, 0xf6edef81l, 0xd4d16c1el, 0xc94a0c32l, 0x8437fd22l,
|
||||
0x3271ee43l, 0x42572aeel, 0x5f91962al, 0x1c522d98l, 0x59b23f0cl, 0xd86b8804l,
|
||||
0x08c63531l, 0x2c0d7a40l, 0xb97c4729l, 0x04964df9l, 0x13c74a17l, 0x5878362fl,
|
||||
0x4c808cd6l, 0x092cb1e0l, 0x6df02885l, 0xa0c2105el, 0x8aba9e68l, 0x64e03057l,
|
||||
0xe5d61325l, 0x0e43a628l, 0x16dbd62bl, 0x2733d90bl, 0x3ae57283l, 0xc0c1052cl,
|
||||
0x4b6fb620l, 0x37513953l, 0xfc898bb3l, 0x471b179fl, 0xdf6e66b8l, 0xd32142f5l,
|
||||
0x9b30fafcl, 0x4ed92549l, 0x105c6d99l, 0x4acd69ffl, 0x2b1a27d3l, 0x6bfcc067l,
|
||||
0x6301a278l, 0xad36e6f2l, 0xef3ff64el, 0x56b3cadbl, 0x0184bb61l, 0x17beb9fdl,
|
||||
0xfaec6109l, 0xa2e1ffa1l, 0x2fd224f8l, 0x238f5be6l, 0x8f8570cfl, 0xaeb5f25al,
|
||||
0x4f1d3e64l, 0x4377eb24l, 0x1fa45346l, 0xb2056386l, 0x52095e76l, 0xbb7b5adcl,
|
||||
0x3514e472l, 0xdde81e6el, 0x7acea9c4l, 0xac15cc48l, 0x71c97d93l, 0x767f941cl,
|
||||
0x911052a2l, 0xffea09bfl, 0xfe3ddcf0l, 0x15ebf3aal, 0x9235b8bcl, 0x75408615l,
|
||||
0x9a723437l, 0xe1a1bd38l, 0x33541b7el, 0x1bdd6856l, 0xb307e13el, 0x90814bb0l,
|
||||
0x51d7217bl, 0x0bb92219l, 0x689f4500l, 0xc568b01fl, 0x5df3d2d7l, 0x3c0ecd0dl,
|
||||
0x2a0244c8l, 0x852574e8l, 0xe72f23a9l, 0x8e26ed02l, 0x2d92cbddl, 0xdabc0458l,
|
||||
0xcdf5feb6l, 0x9e4e8dccl, 0xf4f1e344l, 0x0d8c436dl, 0x4427603bl, 0xbdd37fdal,
|
||||
0x80505f26l, 0x8c7d2b8el, 0xb73273c5l, 0x397362eal, 0x618a3811l, 0x608bfb88l,
|
||||
0x06f7d714l, 0x212e4677l, 0x28efceadl, 0x076c0371l, 0x36a3a4d9l, 0x5487b455l,
|
||||
0x3429a365l, 0x65d467acl, 0x78ee7eebl, 0x99bf12b7l, 0x4d129896l, 0x772a5601l,
|
||||
0xcce284c7l, 0x2ed85c21l, 0xd099e8a4l, 0xa179158al, 0x6ac0ab1al, 0x299a4807l,
|
||||
0xbe67a58dl, 0xdc19544al, 0xb8949b54l, 0x8d315779l, 0xb6f849c1l, 0x53c5ac34l,
|
||||
0x66de92a5l, 0xf195dd13l, 0x318d3a73l, 0x301ec542l, 0x0cc40da6l, 0xf253ade4l,
|
||||
0x467ee566l, 0xea5585ecl, 0x3baf19bbl, 0x7de9f480l, 0x79006e7cl, 0xa9b7a197l,
|
||||
0xa44bd8f1l, 0xfb2ba739l, 0xec342fd4l, 0xed4fd32dl, 0x3d1789bal, 0x400f5d7fl,
|
||||
0xc798f594l, 0x4506a847l, 0x034c0a95l, 0xe2162c9dl, 0x55a9cfd0l, 0x692d832el,
|
||||
0xcf9db2cal, 0x5e2287e9l, 0xd2610ef3l, 0x1ae7ecc2l, 0x48399ca0l, 0xa7e4269bl,
|
||||
0x6ee3a0afl, 0x7065bfe1l, 0xa6ffe708l, 0x2256804cl, 0x7476e21bl, 0x41b0796cl,
|
||||
0x7c243b05l, 0x000a950fl, 0x1858416bl, 0xf5a53c89l, 0xe9fef823l, 0x3f443275l,
|
||||
0xe0cbf091l, 0x0af27b84l, 0x3ebb0f27l, 0x1de6f7f4l, 0xc31c29f7l, 0xb166de3dl,
|
||||
0x12932ec3l, 0x9c0c0674l, 0x5cda81b9l, 0xd1bd9d12l, 0xaffd7c82l, 0x8962bca7l,
|
||||
0xa342c4a8l, 0x62457151l, 0x82089f03l, 0xeb49c670l, 0x5b5f6530l, 0x7e28bad2l,
|
||||
0x20880ba3l, 0xf0faafcdl, 0xce82b56fl, 0x0275335cl, 0xc18e8afbl, 0xde601d69l,
|
||||
0xba9b820al, 0xc8a2be4fl, 0xd7cac335l, 0xd9a73741l, 0x115e974dl, 0x7f5ac21dl,
|
||||
0x383bf9c6l, 0xbcaeb75fl, 0xfd0350cel, 0xb5d06b87l, 0x9820e03cl, 0x72d5f163l,
|
||||
0xe3644fc9l, 0xa5464c4bl, 0x57048fcbl, 0x9690c9dfl, 0xdbf9eafal, 0xbff4649al,
|
||||
0x053c00e3l, 0xb4b61136l, 0x67593dd1l, 0x503ee960l, 0x9fb4993al, 0x19831810l,
|
||||
0xc670d518l, 0xb05b51d8l, 0x0f3a1ce5l, 0x6caa1f9cl, 0xaacc31bel, 0x949ed050l,
|
||||
0x1ead07e7l, 0xa8479abdl, 0xd6cffcd5l, 0x936993efl, 0x472e91cbl, 0x5444b5b6l,
|
||||
0x62be5861l, 0x1be102c7l, 0x63e4b31el, 0xe81f71b7l, 0x9e2317c9l, 0x39a408ael,
|
||||
0x518024f4l, 0x1731c66fl, 0x68cbc918l, 0x71fb0c9el, 0xd03b7fddl, 0x7d6222ebl,
|
||||
0x9057eda3l, 0x1a34a407l, 0x8cc2253dl, 0xb6f6979dl, 0x835675dcl, 0xf319be9fl,
|
||||
0xbe1cd743l, 0x4d32fee4l, 0x77e7d887l, 0x37e9ebfdl, 0x15f851e8l, 0x23dc3706l,
|
||||
0x19d78385l, 0xbd506933l, 0xa13ad4a6l, 0x913f1a0el, 0xdde560b9l, 0x9a5f0996l,
|
||||
0xa65a0435l, 0x48d34c4dl, 0xe90839a7l, 0x8abba54el, 0x6fd13ce1l, 0xc7eebd3cl,
|
||||
0x0e297602l, 0x58b9bbb4l, 0xef7901e6l, 0x64a28a62l, 0xa509875al, 0xf8834442l,
|
||||
0x2702c709l, 0x07353f31l, 0x3b39f665l, 0xf5b18b49l, 0x4010ae37l, 0x784de00bl,
|
||||
0x7a1121e9l, 0xde918ed3l, 0xc8529dcdl, 0x816a5d05l, 0x02ed8298l, 0x04e3dd84l,
|
||||
0xfd2bc3e2l, 0xaf167089l, 0x96af367el, 0xa4da6232l, 0x18ff7325l, 0x05f9a9f1l,
|
||||
0x4fefb9f9l, 0xcd94eaa5l, 0xbfaa5069l, 0xa0b8c077l, 0x60d86f57l, 0xfe71c813l,
|
||||
0x29ebd2c8l, 0x4ca86538l, 0x6bf1a030l, 0xa237b88al, 0xaa8af41dl, 0xe1f7b6ecl,
|
||||
0xe214d953l, 0x33057879l, 0x49caa736l, 0xfa45cff3l, 0xc063b411l, 0xba7e27d0l,
|
||||
0x31533819l, 0x2a004ac1l, 0x210efc3fl, 0x2646885el, 0x66727dcfl, 0x9d7fbf54l,
|
||||
0xa8dd0ea8l, 0x3447cacel, 0x3f0c14dbl, 0xb8382aacl, 0x4ace3539l, 0x0a518d51l,
|
||||
0x95178981l, 0x35aee2cal, 0x73f0f7e3l, 0x94281140l, 0x59d0e523l, 0xd292cb88l,
|
||||
0x565d1b27l, 0x7ec8fbafl, 0x069af08dl, 0xc127fd24l, 0x0bc77b10l, 0x5f03e7efl,
|
||||
0x453e99bal, 0xeed9ff7fl, 0x87b55215l, 0x7915ab4cl, 0xd389a358l, 0x5e75ce6dl,
|
||||
0x28d655c0l, 0xdad26c73l, 0x2e2510ffl, 0x9fa7eeccl, 0x1d0629c3l, 0xdc9c9c46l,
|
||||
0x2d67ecd7l, 0xe75e94bdl, 0x3d649e2al, 0x6c413a2bl, 0x706f0d7cl, 0xdfb0127bl,
|
||||
0x4e366b55l, 0x2c825650l, 0x24205720l, 0xb5c998f7l, 0x3e95462cl, 0x756e5c72l,
|
||||
0x3259488fl, 0x11e8771al, 0xa7c0a617l, 0x577663e5l, 0x089b6401l, 0x8eab1941l,
|
||||
0xae55ef8cl, 0x3aac5460l, 0xd4e6262fl, 0x5d979a47l, 0xb19823b0l, 0x7f8d6a0cl,
|
||||
0xffa08683l, 0x0170cd0fl, 0x858cd5d8l, 0x53961c90l, 0xc4c61556l, 0x41f2f226l,
|
||||
0xcfcd062dl, 0xf24c03b8l, 0xea81df5bl, 0x7be2fa52l, 0xb361f98bl, 0xc2901316l,
|
||||
0x55ba4bbcl, 0x93b234a9l, 0x0fbc6603l, 0x80a96822l, 0x6d60491fl, 0x22bd00f8l,
|
||||
0xbcad5aadl, 0x52f3f13bl, 0x42fd2b28l, 0xb41dd01cl, 0xc52c93bfl, 0xfc663094l,
|
||||
0x8f58d100l, 0x43fecc08l, 0xc6331e5dl, 0xe6480f66l, 0xca847204l, 0x4bdf1da0l,
|
||||
0x30cc2efbl, 0x13e02deal, 0xfb49ac45l, 0xf9d4434fl, 0xf47c5b9cl, 0x148879c2l,
|
||||
0x039fc234l, 0xa3db9bfcl, 0xd1a1dc5cl, 0x763d7cd4l, 0xed6d2f93l, 0xab13af6el,
|
||||
0x1e8e054al, 0xd68f4f9al, 0xc30484b3l, 0xd7d50afal, 0x6930855fl, 0xcc07db95l,
|
||||
0xce746db1l, 0x744e967dl, 0xf16cf575l, 0x8643e8b5l, 0xf0eae38el, 0xe52de1d1l,
|
||||
0x6587dae0l, 0x0c4b8121l, 0x1c7ac567l, 0xac0db20al, 0x36c3a812l, 0x5b1a4514l,
|
||||
0xa9a3f868l, 0xb9263baal, 0xcb3ce9d2l, 0xe44fb1a4l, 0x9221bc82l, 0xb29390fel,
|
||||
0x6ab41863l, 0x974a3e2el, 0x89f531c5l, 0x255ca13el, 0x8b65d348l, 0xec248f78l,
|
||||
0xd8fc16f0l, 0x50ecdeeel, 0x09010792l, 0x3c7d1fb2l, 0xeba5426bl, 0x847b417al,
|
||||
0x468b40d9l, 0x8dc4e680l, 0x7cc1f391l, 0x2f1eb086l, 0x6e5baa6al, 0xe0b395dal,
|
||||
0xe31b2cf6l, 0xd9690b0dl, 0x729ec464l, 0x38403ddel, 0x610b80a2l, 0x5cf433abl,
|
||||
0xb0785fc4l, 0xd512e4c6l, 0xbbb7d699l, 0x5a86591bl, 0x10cf5376l, 0x12bf9f4bl,
|
||||
0x980fbaa1l, 0x992a4e70l, 0x20fa7ae7l, 0xf7996ebbl, 0xc918a2bel, 0x82de74f2l,
|
||||
0xad54209bl, 0xf66b4d74l, 0x1fc5b771l, 0x169d9229l, 0x887761dfl, 0x00b667d5l,
|
||||
0xdb425e59l, 0xb72f2844l, 0x9b0ac1f5l, 0x9c737e3al, 0x2b85476cl, 0x6722add6l,
|
||||
0x44a63297l, 0x0d688cedl, 0xabc59484l, 0x4107778al, 0x8ad94c6fl, 0xfe83df90l,
|
||||
0x0f64053fl, 0xd1292e9dl, 0xc5744356l, 0x8dd1abb4l, 0x4c4e7667l, 0xfb4a7fc1l,
|
||||
0x74f402cbl, 0x70f06afdl, 0xa82286f2l, 0x918dd076l, 0x7a97c5cel, 0x48f7bde3l,
|
||||
0x6a04d11dl, 0xac243ef7l, 0x33ac10cal, 0x2f7a341el, 0x5f75157al, 0xf4773381l,
|
||||
0x591c870el, 0x78df8cc8l, 0x22f3adb0l, 0x251a5993l, 0x09fbef66l, 0x796942a8l,
|
||||
0x97541d2el, 0x2373daa9l, 0x1bd2f142l, 0xb57e8eb2l, 0xe1a5bfdbl, 0x7d0efa92l,
|
||||
0xb3442c94l, 0xd2cb6447l, 0x386ac97el, 0x66d61805l, 0xbdada15el, 0x11bc1aa7l,
|
||||
0x14e9f6eal, 0xe533a0c0l, 0xf935ee0al, 0x8fee8a04l, 0x810d6d85l, 0x7c68b6d6l,
|
||||
0x4edc9aa2l, 0x956e897dl, 0xed87581al, 0x264be9d7l, 0xff4ddb29l, 0x823857c2l,
|
||||
0xe005a9a0l, 0xf1cc2450l, 0x6f9951e1l, 0xaade2310l, 0xe70c75f5l, 0x83e1a31fl,
|
||||
0x4f7dde8el, 0xf723b563l, 0x368e0928l, 0x86362b71l, 0x21e8982dl, 0xdfb3f92bl,
|
||||
0x44676352l, 0x99efba31l, 0x2eab4e1cl, 0xfc6ca5e7l, 0x0ebe5d4el, 0xa0717d0cl,
|
||||
0xb64f8199l, 0x946b31a1l, 0x5656cbc6l, 0xcffec3efl, 0x622766c9l, 0xfa211e35l,
|
||||
0x52f98b89l, 0x6d01674bl, 0x4978a802l, 0xf651f701l, 0x15b0d43dl, 0xd6ff4683l,
|
||||
0x3463855fl, 0x672ba29cl, 0xbc128312l, 0x4626a70dl, 0xc8927a5al, 0xb8481cf9l,
|
||||
0x1c962262l, 0xa21196bal, 0xbaba5ee9l, 0x5bb162d0l, 0x69943bd1l, 0x0c47e35cl,
|
||||
0x8cc9619al, 0xe284d948l, 0x271bf264l, 0xc27fb398l, 0x4bc70897l, 0x60cf202cl,
|
||||
0x7f42d6aal, 0xa5a13506l, 0x5d3e8860l, 0xcea63d3cl, 0x63bf0a8fl, 0xf02e9efal,
|
||||
0xb17b0674l, 0xb072b1d3l, 0x06e5723bl, 0x3737e436l, 0x24aa49c7l, 0x0ded0d18l,
|
||||
0xdb256b14l, 0x58b27877l, 0xecb49f54l, 0x6c40256al, 0x6ea92ffbl, 0x3906aa4cl,
|
||||
0xc9866fd5l, 0x4549323el, 0xa7b85fabl, 0x1918cc27l, 0x7308d7b5l, 0x1e16c7adl,
|
||||
0x71850b37l, 0x3095fd78l, 0xa63b70e6l, 0xd880e2ael, 0x3e282769l, 0xa39ba6bcl,
|
||||
0x98700fa3l, 0xf34c53e8l, 0x288af426l, 0xb99d930fl, 0xf5b99df1l, 0xe9d0c8cfl,
|
||||
0x5ac8405dl, 0x50e7217bl, 0x511fbbbel, 0x2ca2e639l, 0xc020301bl, 0x356dbc00l,
|
||||
0x8e43ddb9l, 0x4d327b4al, 0xf20ff3edl, 0x1dbb29bdl, 0x43d44779l, 0xa1b68f70l,
|
||||
0x6114455bl, 0xe63d280bl, 0x6bf6ff65l, 0x10fc39e5l, 0x3dae126el, 0xc1d7cf11l,
|
||||
0xcb60b795l, 0x1789d5b3l, 0x9bca36b7l, 0x08306075l, 0x84615608l, 0x8b3a0186l,
|
||||
0xe88fbecdl, 0x7ba47c4dl, 0x2de44dacl, 0x653fe58dl, 0xcca0b968l, 0xd7fa0e72l,
|
||||
0x93901780l, 0x1f2c26ccl, 0xae595b6bl, 0xa9ecea9bl, 0xe3dbf8c4l, 0x319cc130l,
|
||||
0x12981196l, 0x01a3a4del, 0x32c454b6l, 0x755bd817l, 0x3cd871e4l, 0xa48bb8dal,
|
||||
0x02fdec09l, 0xfd2dc2e2l, 0x9e578088l, 0x9a9f916dl, 0x4065fe6cl, 0x1853999el,
|
||||
0xc7793f23l, 0xdc1016bbl, 0x969355ffl, 0x7ef292f6l, 0xcdce4adcl, 0x05e24416l,
|
||||
0x85c16c46l, 0xd441d37fl, 0x57bd6855l, 0x8746f54fl, 0x9ca773dfl, 0x770bae22l,
|
||||
0x54828413l, 0xb75e4b19l, 0x04c35c03l, 0xbf7cca07l, 0x2955c4ddl, 0x721db041l,
|
||||
0xb2394f33l, 0x03f51387l, 0x89b73c9fl, 0x0b1737f3l, 0x07e69024l, 0x9231d245l,
|
||||
0x76193861l, 0x88159c15l, 0xdeb552d9l, 0xd9767e40l, 0x20c6c0c3l, 0x4281977cl,
|
||||
0xf8afe1e0l, 0xd32a0751l, 0x3fc27432l, 0xddf1dcc5l, 0x68581f34l, 0x3bcd5025l,
|
||||
0x0091b2eel, 0x4aeb6944l, 0x1602e743l, 0xea09eb58l, 0xef0a2a8bl, 0x641e03a5l,
|
||||
0xeb50e021l, 0x5c8ccef8l, 0x802ff0b8l, 0xd5e3edfel, 0xc4dd1b49l, 0x5334cd2al,
|
||||
0x13f82d2fl, 0x47450c20l, 0x55dafbd2l, 0xbec0c6f4l, 0xb45d7959l, 0x3ad36e8cl,
|
||||
0x0aa8ac57l, 0x1a3c8d73l, 0xe45aafb1l, 0x9f664838l, 0xc6880053l, 0xd0039bbfl,
|
||||
0xee5f19ebl, 0xca0041d8l, 0xbbea3aafl, 0xda628291l, 0x9d5c95d4l, 0xadd504a6l,
|
||||
0xc39ab482l, 0x5e9e14a4l, 0x2be065f0l, 0x2a13fc3al, 0x9052e8ecl, 0xaf6f5afcl,
|
||||
0x519aa8b5l, 0xbb303da9l, 0xe00e2b10l, 0xdfa6c1dbl, 0x2e6b952el, 0xee10dc23l,
|
||||
0x37936d09l, 0x1fc42e92l, 0x39b25a9fl, 0x13ff89f4l, 0xc8f53feal, 0x18500bc7l,
|
||||
0x95a0379dl, 0x98f751c2l, 0x2289c42fl, 0xa21e4098l, 0x6f391f41l, 0xf27e7e58l,
|
||||
0x0d0df887l, 0x4b79d540l, 0x8e8409aal, 0x71fe46f8l, 0x688a9b29l, 0x3f08b548l,
|
||||
0x84abe03al, 0x5e91b6c1l, 0xfde4c2ael, 0x251d0e72l, 0x92d4fee5l, 0xf9371967l,
|
||||
0x9175108fl, 0xe6e81835l, 0x8c8cb8eel, 0xb55a67b3l, 0xcef138ccl, 0x8b256268l,
|
||||
0x00d815f5l, 0xe8810812l, 0x77826189l, 0xea73267dl, 0x19b90f8dl, 0x45c33bb4l,
|
||||
0x82477056l, 0xe1770075l, 0x09467aa6l, 0xa7c6f54al, 0x79768742l, 0x61b86bcal,
|
||||
0xd6644a44l, 0xe33f0171l, 0xc229fbcdl, 0x41b08febl, 0xd1903e30l, 0x65ec9080l,
|
||||
0x563d6fbdl, 0xf56da488l, 0xebf64cd8l, 0x4934426bl, 0x7c8592fcl, 0x6aca8cf2l,
|
||||
0x1cea111bl, 0x3a57ee7al, 0xace11c0dl, 0x9942d85el, 0xc4613407l, 0xfa8e643bl,
|
||||
0x327fc701l, 0x4ca9be82l, 0x3352526dl, 0x2c047f63l, 0xf3a8f7ddl, 0x1a4a98a8l,
|
||||
0x762ed4d1l, 0x27c75008l, 0xbdf497c0l, 0x7a7b84dfl, 0x315c28abl, 0x801f93e3l,
|
||||
0xf19b0ca1l, 0x8f14e46al, 0xe48ba333l, 0x9605e625l, 0xf03ecb60l, 0x60385f2dl,
|
||||
0x902845bal, 0x7f96d66fl, 0x24bff05cl, 0x2820730bl, 0x947133cbl, 0xd444828al,
|
||||
0xb343f6f1l, 0x0bef4705l, 0x8da574f9l, 0x01e25d6cl, 0x1732793el, 0x4f0f7b27l,
|
||||
0x364b7117l, 0xb2d1da77l, 0xa6c5f1e9l, 0x574ca5b1l, 0x386a3076l, 0xad6894d6l,
|
||||
0x1156d7fal, 0xa48d1d9al, 0x4794c0afl, 0x150c0aa0l, 0x26d348acl, 0x29fdeabel,
|
||||
0xa5dede53l, 0x81671e8el, 0x594ee3bfl, 0xa96c56e6l, 0x3426a726l, 0xc5976579l,
|
||||
0xbc22e5e4l, 0xc1006319l, 0xdaafdd2al, 0xa1a1aa83l, 0x3badd0e7l, 0xc3b14981l,
|
||||
0xd770b155l, 0xccd7c693l, 0x42e944c5l, 0x03e0064fl, 0xca95b4efl, 0x3dee81c3l,
|
||||
0xfbbcd98cl, 0x1e07e15bl, 0x667ce949l, 0xe7d6773fl, 0x21b6124bl, 0x6b2a6ef7l,
|
||||
0xd3278a9cl, 0x9a988304l, 0x75d2ae9bl, 0xfe49e2ffl, 0x9bc24f46l, 0x74cc2cf6l,
|
||||
0xa3139f36l, 0x6c9ef35al, 0x9fc1dffel, 0x9e5facdcl, 0xaadc8bbbl, 0x5abdbc5fl,
|
||||
0x44b3b390l, 0xf754efa7l, 0x5fe3bdb7l, 0x4e59c886l, 0x06a4c984l, 0xa0338878l,
|
||||
0xcd513cd7l, 0x63ebd27el, 0x8aba80adl, 0x50da144el, 0x5d9f4e97l, 0x025b751cl,
|
||||
0x2d580200l, 0xb6c05837l, 0x580aa15dl, 0x54022a6el, 0xb41a5415l, 0x4863fab6l,
|
||||
0xb0b79957l, 0x46d0d159l, 0xdc2b8650l, 0x20a7bb0cl, 0x4a032974l, 0xec8636a2l,
|
||||
0x8548f24cl, 0xf6a2bf16l, 0x1088f4b0l, 0x0c2f3a94l, 0x525dc396l, 0x14065785l,
|
||||
0x2b4dca52l, 0x08aeed39l, 0xabedfc99l, 0xb1dbcf18l, 0x87f85bbcl, 0xae3aff61l,
|
||||
0x433ccd70l, 0x5b23cc64l, 0x7b453213l, 0x5355c545l, 0x9318ec0al, 0x78692d31l,
|
||||
0x0a21693dl, 0xd5666814l, 0x05fb59d9l, 0xc71985b2l, 0x2abb8e0el, 0xcf6e6c91l,
|
||||
0xd9cfe7c6l, 0xefe7132cl, 0x9711ab28l, 0x3ce52732l, 0x12d516d2l, 0x7209a0d0l,
|
||||
0xd278d306l, 0x70fa4b7bl, 0x1d407dd3l, 0xdb0beba4l, 0xbfd97621l, 0xa8be21e1l,
|
||||
0x1b6f1b66l, 0x30650ddal, 0xba7ddbb9l, 0x7df953fbl, 0x9d1c3902l, 0xedf0e8d5l,
|
||||
0xb8741ae0l, 0x0f240565l, 0x62cd438bl, 0xc616a924l, 0xaf7a96a3l, 0x35365538l,
|
||||
0xe583af4dl, 0x73415eb8l, 0x23176a47l, 0xfc9ccee8l, 0x7efc9de2l, 0x695e03cfl,
|
||||
0xf8ce66d4l, 0x88b4781dl, 0x67dd9c03l, 0x3e8f9e73l, 0xc0c95c51l, 0xbe314d22l,
|
||||
0x55aa0795l, 0xcb1bb011l, 0xe980fdc8l, 0x9c62b7cel, 0xde2d239el, 0x042cadf3l,
|
||||
0xffdf04del, 0x5ce6a60fl, 0xd8c831edl, 0xb7b5b9ecl, 0xb9cbf962l, 0xe253b254l,
|
||||
0x0735ba1fl, 0x16ac917fl, 0xdd607c2bl, 0x64a335c4l, 0x40159a7cl, 0x869222f0l,
|
||||
0x6ef21769l, 0x839d20a5l, 0xd03b24c9l, 0xf412601el, 0x6d72a243l, 0x0e018dfdl,
|
||||
0x89f3721al, 0xc94f4134l, 0x2f992f20l, 0x4d87253cl };
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the hashing state.
|
||||
*/
|
||||
void snefru_init(struct snefru_ctx *ctx)
|
||||
{
|
||||
ctx->hashlen = 0;
|
||||
ctx->index = 0;
|
||||
mutils_bzero(ctx->hash, SNEFRU256_DIGEST_SIZE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The core snefru transform.
|
||||
*/
|
||||
static void snefru(mutils_word32 *block, mutils_word32 len)
|
||||
{
|
||||
__const mutils_word32 st[4] = {16, 8, 16, 24};
|
||||
mutils_word32 isave[SNEFRU256_DIGEST_LEN];
|
||||
mutils_word32 *sbox, x;
|
||||
mutils_word32 i, j;
|
||||
__const mutils_word32 *limit;
|
||||
|
||||
mutils_memcpy(isave, block, SNEFRU256_DIGEST_SIZE);
|
||||
|
||||
limit = SBOX + 512 * R;
|
||||
|
||||
for (sbox = (mutils_word32 *) SBOX; sbox < limit; sbox += 512)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for (i = 0; i < SNEFRU_BLOCK_LEN; i++)
|
||||
{
|
||||
x = sbox[(i << 7 & 0x100) + (block[i] & 0xff)];
|
||||
block[(i + SNEFRU_BLOCK_LEN - 1) % SNEFRU_BLOCK_LEN] ^= x;
|
||||
block[(i + 1) % SNEFRU_BLOCK_LEN] ^= x;
|
||||
}
|
||||
for (i = 0; i < SNEFRU_BLOCK_LEN; i++)
|
||||
{
|
||||
block[i] = block[i] >> st[j] | block[i] << (32 - st[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
block[i] = block[SNEFRU_BLOCK_LEN - 1 - i] ^ isave[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void processBuffer(struct snefru_ctx *ctx, int len)
|
||||
{
|
||||
mutils_word32 i;
|
||||
mutils_word8 *buf = ctx->buffer;
|
||||
|
||||
for(i = len; i < SNEFRU_BLOCK_LEN; i++, buf += 4)
|
||||
{
|
||||
ctx->hash[i] = mutils_bend32(*(mutils_word32 *)buf);
|
||||
}
|
||||
snefru(ctx->hash, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the hashing state.
|
||||
*/
|
||||
static void snefru_update(struct snefru_ctx *ctx, __const mutils_word8 *data, mutils_word32 length,
|
||||
mutils_word32 data_size, mutils_word32 digest_len)
|
||||
{
|
||||
if (ctx->index)
|
||||
{ /* Try to fill partial block */
|
||||
mutils_word32 left = data_size - ctx->index;
|
||||
if (length < left)
|
||||
{
|
||||
mutils_memcpy(ctx->buffer + ctx->index, data, length);
|
||||
ctx->index += length;
|
||||
return; /* Finished */
|
||||
}
|
||||
else
|
||||
{
|
||||
mutils_memcpy(ctx->buffer + ctx->index, data, left);
|
||||
processBuffer(ctx, digest_len);
|
||||
ctx->hashlen += 8 * data_size;
|
||||
data += left;
|
||||
length -= left;
|
||||
}
|
||||
}
|
||||
while (length >= data_size)
|
||||
{
|
||||
mutils_memcpy(ctx->buffer, data, data_size);
|
||||
processBuffer(ctx, digest_len);
|
||||
ctx->hashlen += 8 * data_size;
|
||||
data += data_size;
|
||||
length -= data_size;
|
||||
}
|
||||
mutils_memcpy(ctx->buffer, data, length);
|
||||
ctx->index = length;
|
||||
}
|
||||
|
||||
void snefru128_update(struct snefru_ctx *ctx, __const mutils_word8 *data, mutils_word32 length)
|
||||
{
|
||||
snefru_update(ctx, data, length, SNEFRU128_DATA_SIZE, SNEFRU128_DIGEST_LEN);
|
||||
}
|
||||
|
||||
void snefru256_update(struct snefru_ctx *ctx, __const mutils_word8 *data, mutils_word32 length)
|
||||
{
|
||||
snefru_update(ctx, data, length, SNEFRU256_DATA_SIZE, SNEFRU256_DIGEST_LEN);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Finalize the hash value calculation by appending the (padded) length field.
|
||||
*/
|
||||
void snefru128_final(struct snefru_ctx *ctx)
|
||||
{
|
||||
if (ctx->index)
|
||||
{ /* pad the last data block if partially filled */
|
||||
mutils_bzero(ctx->buffer + ctx->index, SNEFRU128_DATA_SIZE - ctx->index);
|
||||
processBuffer(ctx, SNEFRU128_DIGEST_LEN);
|
||||
ctx->hashlen += 8 * ctx->index;
|
||||
}
|
||||
|
||||
mutils_bzero(ctx->hash + SNEFRU128_DIGEST_LEN,
|
||||
SNEFRU_BLOCK_SIZE - SNEFRU128_DIGEST_SIZE - sizeof(ctx->hashlen));
|
||||
ctx->hash[SNEFRU_BLOCK_LEN - 2] = ctx->hashlen >> 32;
|
||||
ctx->hash[SNEFRU_BLOCK_LEN - 1] = ctx->hashlen & 0xffffffff;
|
||||
|
||||
snefru(ctx->hash, SNEFRU128_DIGEST_LEN);
|
||||
}
|
||||
|
||||
void snefru256_final(struct snefru_ctx *ctx)
|
||||
{
|
||||
if (ctx->index)
|
||||
{ /* pad the last data block if partially filled */
|
||||
mutils_bzero(ctx->buffer + ctx->index, SNEFRU256_DATA_SIZE - ctx->index);
|
||||
processBuffer(ctx, SNEFRU256_DIGEST_LEN);
|
||||
ctx->hashlen += 8 * ctx->index;
|
||||
}
|
||||
|
||||
mutils_bzero(ctx->hash + SNEFRU256_DIGEST_LEN,
|
||||
SNEFRU_BLOCK_SIZE - SNEFRU256_DIGEST_SIZE - sizeof(ctx->hashlen));
|
||||
ctx->hash[SNEFRU_BLOCK_LEN - 2] = ctx->hashlen >> 32;
|
||||
ctx->hash[SNEFRU_BLOCK_LEN - 1] = ctx->hashlen & 0xffffffff;
|
||||
|
||||
snefru(ctx->hash, SNEFRU256_DIGEST_LEN);
|
||||
}
|
||||
|
||||
|
||||
static void snefru_digest(__const struct snefru_ctx *ctx, mutils_word8 *digest, mutils_word32 len)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
for (i = 0; i < len; i++, digest += 4)
|
||||
{
|
||||
*(mutils_word32 *)digest = mutils_bend2sys32(ctx->hash[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void snefru128_digest(__const struct snefru_ctx *ctx, mutils_word8 *digest)
|
||||
{
|
||||
snefru_digest(ctx, digest, SNEFRU128_DIGEST_LEN);
|
||||
}
|
||||
|
||||
void snefru256_digest(__const struct snefru_ctx *ctx, mutils_word8 *digest)
|
||||
{
|
||||
snefru_digest(ctx, digest, SNEFRU256_DIGEST_LEN);
|
||||
}
|
||||
|
||||
#endif /* ENABLE_SNEFRU */
|
||||
@@ -0,0 +1,584 @@
|
||||
/*
|
||||
* Copyright (C) 1998 Nikos Mavroyanopoulos
|
||||
* Copyright (C) 1999,2000 Sascha Schumman, Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
$Id: stdfns.c,v 1.2 2006/01/10 03:47:18 imipak Exp $
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
/**
|
||||
* Some of these are wrappers. The idea is to eventually produce an extremely
|
||||
* lightweight set of robust, portable functions that are guaranteed to produce
|
||||
* a "safe" result, even with bogus inputs. We can't trust native C libraries
|
||||
* to validate inputs.
|
||||
*/
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
int mutils_mlock(__const void *addr, __const mutils_word32 len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if ((addr == NULL) || (len == 0))
|
||||
{
|
||||
ret = -1;
|
||||
errno = EINVAL;
|
||||
}
|
||||
|
||||
#if defined(HAVE_MLOCK)
|
||||
ret = mlock(addr, len);
|
||||
#endif
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
int mutils_munlock(__const void *addr, __const mutils_word32 len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if ((addr == NULL) || (len == 0))
|
||||
{
|
||||
ret = -1;
|
||||
errno = EINVAL;
|
||||
}
|
||||
|
||||
#if defined(HAVE_MLOCK)
|
||||
ret = munlock(addr, len);
|
||||
#endif
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTE: In order for memory locking to be useful, we need our own malloc
|
||||
* implementation, as we cannot guarantee that the system-supplied one will
|
||||
* let us know how much memory has been malloc()'ed. For much the same reason,
|
||||
* neither free() nor realloc() can zero safely. This allows the potential
|
||||
* leakage of information.
|
||||
*/
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void *
|
||||
mutils_malloc(__const mutils_word32 n)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
if (n == 0)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
ptr = malloc(n);
|
||||
|
||||
if (ptr != NULL)
|
||||
{
|
||||
mutils_bzero(ptr, n);
|
||||
}
|
||||
|
||||
return(ptr);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void *
|
||||
mutils_realloc(__const void *ptr, __const mutils_word32 n)
|
||||
{
|
||||
void *ptrOut;
|
||||
|
||||
if ((ptr == NULL) && (n > 0))
|
||||
{
|
||||
ptrOut = mutils_malloc(n);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((ptr != NULL) && (n == 0))
|
||||
{
|
||||
mutils_free(ptr);
|
||||
ptrOut = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptrOut = realloc((void *) ptr, n);
|
||||
}
|
||||
}
|
||||
return(ptrOut);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void
|
||||
mutils_free(__const void *ptr)
|
||||
{
|
||||
if (ptr == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
free((void *) ptr);
|
||||
return;
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void
|
||||
mutils_bzero(void *s, __const mutils_word32 n)
|
||||
{
|
||||
mutils_word8 *stmp = (mutils_word8 *) s;
|
||||
mutils_word32 i;
|
||||
|
||||
if ((s == NULL) || (n == 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++, stmp++)
|
||||
{
|
||||
*stmp = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void
|
||||
mutils_memset(void *s, __const mutils_word8 c, __const mutils_word32 n)
|
||||
{
|
||||
#if defined(sparc)
|
||||
/* Sparc needs 8-bit alignment - just use standard memset */
|
||||
memset(s, (int) c, (size_t) n);
|
||||
#else
|
||||
mutils_word8 *stmp;
|
||||
mutils_word32 *ltmp = (mutils_word32 *) s;
|
||||
mutils_word32 lump;
|
||||
mutils_word32 i;
|
||||
mutils_word32 words;
|
||||
mutils_word32 remainder;
|
||||
|
||||
if ((s == NULL) || (n == 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lump = (c << 24) + (c << 16) + (c << 8) + c;
|
||||
|
||||
words = n >> 2;
|
||||
remainder = n - (words << 2);
|
||||
|
||||
for (i = 0; i < words; i++, ltmp++)
|
||||
{
|
||||
*ltmp = lump;
|
||||
}
|
||||
|
||||
stmp = (mutils_word8 *) ltmp;
|
||||
|
||||
for (i = 0; i < remainder; i++, stmp++)
|
||||
{
|
||||
*stmp = c;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
mutils_memcpy8(mutils_word8 *p_dest, __const mutils_word8 *p_src,
|
||||
__const mutils_word32 n)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
*p_dest++ = *p_src++;
|
||||
}
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void
|
||||
mutils_memcpy(void *dest, __const void *src, __const mutils_word32 n)
|
||||
{
|
||||
mutils_word8 *ptr1;
|
||||
mutils_word8 *ptr2;
|
||||
mutils_word32 *bigptr1;
|
||||
mutils_word32 *bigptr2;
|
||||
mutils_word32 i;
|
||||
mutils_word32 words;
|
||||
mutils_word32 remainder;
|
||||
|
||||
if ((dest == NULL) || (src == NULL) || (n == 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ptr1 = (mutils_word8 *)src;
|
||||
ptr2 = dest;
|
||||
|
||||
/* copy byte-by-byte for small and/or unaligned copies */
|
||||
if ((n < 16) || ((mutils_word32)ptr1 & 0x3) || ((mutils_word32)ptr2
|
||||
& 0x3))
|
||||
{
|
||||
mutils_memcpy8(ptr2, ptr1, n);
|
||||
return;
|
||||
}
|
||||
|
||||
words = n >> 2;
|
||||
remainder = n - (words << 2);
|
||||
|
||||
bigptr1 = (mutils_word32 *) dest;
|
||||
bigptr2 = (mutils_word32 *) src;
|
||||
|
||||
for (i = 0; i < words; i ++, bigptr1++, bigptr2++)
|
||||
{
|
||||
*bigptr1 = *bigptr2;
|
||||
}
|
||||
|
||||
ptr1 = (mutils_word8 *) bigptr1;
|
||||
ptr2 = (mutils_word8 *) bigptr2;
|
||||
|
||||
for (i = 0; i < remainder; i++, ptr1++, ptr2++)
|
||||
{
|
||||
*ptr1 = *ptr2;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If the system ordering is big-endian, convert to little-endian format.
|
||||
* In both cases, the data is held in a temporary workspace that will be
|
||||
* overwritten the next time this function is called. This function is
|
||||
* deprecated and should NOT be called in new code. The ordering macros
|
||||
* should be used instead, for all single-word conversions.
|
||||
*/
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word32
|
||||
mutils_word32swap(mutils_word32 x)
|
||||
{
|
||||
static mutils_word32 value;
|
||||
|
||||
value = mutils_lend32(x);
|
||||
return(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Byte swap a series of 32-bit integers. If destructive is set to false, the
|
||||
* output will be placed in a freshly malloc()'ed buffer and the original
|
||||
* data will remain intact.
|
||||
*/
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word32 *
|
||||
mutils_word32nswap(mutils_word32 *x, mutils_word32 n, mutils_boolean destructive)
|
||||
{
|
||||
mutils_word32 loop;
|
||||
mutils_word32 *buffer;
|
||||
mutils_word32 *ptrIn;
|
||||
mutils_word32 *ptrOut;
|
||||
mutils_word32 count = n * 4;
|
||||
|
||||
if (destructive == MUTILS_FALSE)
|
||||
{
|
||||
buffer = mutils_malloc(count);
|
||||
if (buffer == NULL)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer = x;
|
||||
}
|
||||
|
||||
/*
|
||||
* This loop is totally useless for destructive processing of little-endian
|
||||
* data on a little-endian machine.
|
||||
*/
|
||||
|
||||
for (loop = 0, ptrIn = x, ptrOut = buffer; loop < n; loop++, ptrOut++, ptrIn++)
|
||||
{
|
||||
*ptrOut = mutils_lend32(*ptrIn);
|
||||
}
|
||||
|
||||
return(buffer);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
void
|
||||
mutils_memmove(void *dest, __const void *src, const mutils_word32 n)
|
||||
{
|
||||
mutils_word8 *ptr1;
|
||||
mutils_word8 *ptr2;
|
||||
mutils_word32 i;
|
||||
mutils_word32 *bigptr1;
|
||||
mutils_word32 *bigptr2;
|
||||
mutils_word32 words;
|
||||
mutils_word32 remainder;
|
||||
|
||||
if ((dest == NULL) || (src == NULL) || (n == 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bigptr1 = (mutils_word32 *) dest;
|
||||
bigptr2 = (mutils_word32 *) src;
|
||||
|
||||
words = n >> 2;
|
||||
remainder = n - (words << 2);
|
||||
|
||||
for (i = 0; i < words; i++, bigptr1++, bigptr2++)
|
||||
{
|
||||
*bigptr1 = *bigptr2;
|
||||
}
|
||||
|
||||
ptr1 = (mutils_word8 *) bigptr1;
|
||||
ptr2 = (mutils_word8 *) bigptr2;
|
||||
|
||||
for (i = 0; i < remainder; i++, ptr1++, ptr2++)
|
||||
{
|
||||
*ptr1 = *ptr2;
|
||||
}
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
int
|
||||
mutils_memcmp(__const void *s1, const void *s2, const mutils_word32 n)
|
||||
{
|
||||
if (n == 0)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
if (s1 == NULL)
|
||||
{
|
||||
if (s2 == NULL)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
return(-MAXINT);
|
||||
}
|
||||
if (s2 == NULL)
|
||||
{
|
||||
return(MAXINT);
|
||||
}
|
||||
|
||||
return(memcmp(s1, s2, n));
|
||||
}
|
||||
|
||||
/* Ugh. This could do nasty things, if a string isn't correctly terminated,
|
||||
* particularly as memory can be larger than can be stored in a 32-bit word.
|
||||
* If it is possible to produce an incorrect result, or segfault, then it
|
||||
* is not a robust solution.
|
||||
*/
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word32
|
||||
mutils_strlen(__const mutils_word8 *str)
|
||||
{
|
||||
mutils_word32 ret;
|
||||
mutils_word8 *endStr = (mutils_word8 *) str;
|
||||
|
||||
if (str == NULL)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
while (*endStr != 0)
|
||||
{
|
||||
endStr++;
|
||||
}
|
||||
|
||||
ret = endStr - str;
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word8 *
|
||||
mutils_strdup(__const mutils_word8 *str)
|
||||
{
|
||||
mutils_word8 *ret = NULL;
|
||||
mutils_word8 *ptr1;
|
||||
mutils_word8 *ptr2;
|
||||
mutils_word32 len;
|
||||
|
||||
if (str == NULL)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
len = mutils_strlen(str) + 1;
|
||||
|
||||
ret = (mutils_word8 *) mutils_malloc(len);
|
||||
|
||||
if (ret != NULL)
|
||||
{
|
||||
ptr1 = (mutils_word8 *) str;
|
||||
ptr2 = ret;
|
||||
|
||||
for (len = mutils_strlen(str); len > 0; len--, ptr1++, ptr2++)
|
||||
{
|
||||
*ptr2 = *ptr1;
|
||||
}
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word8 *
|
||||
mutils_strcat(mutils_word8 *dest, __const mutils_word8 *src)
|
||||
{
|
||||
mutils_word8 *ptrIn = (mutils_word8 *) src;
|
||||
mutils_word8 *ptrOut = dest + mutils_strlen(dest);
|
||||
|
||||
if (dest == NULL)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
if (src == NULL)
|
||||
{
|
||||
return(dest);
|
||||
}
|
||||
while (*src != 0)
|
||||
{
|
||||
*ptrOut = *ptrIn;
|
||||
ptrOut++;
|
||||
ptrIn++;
|
||||
}
|
||||
*ptrOut = '\0';
|
||||
return((mutils_word8 *) dest);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word8 *
|
||||
mutils_strcpy(mutils_word8 *dest, __const mutils_word8 *src)
|
||||
{
|
||||
if (dest == NULL)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
return((mutils_word8 *) strcpy((char *) dest, (char *) src));
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word8 *
|
||||
mutils_strncpy(mutils_word8 *dest, __const mutils_word8 *src, const mutils_word32 n)
|
||||
{
|
||||
if (dest == NULL)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
if (n == 0)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
return((mutils_word8 *) strncpy((char *) dest, (char *) src, n));
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
int
|
||||
mutils_strcmp(__const mutils_word8 *src1, const mutils_word8 *src2)
|
||||
{
|
||||
if (src1 == NULL)
|
||||
{
|
||||
if (src2 == NULL)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
return(-MAXINT);
|
||||
}
|
||||
if (src2 == NULL)
|
||||
{
|
||||
return(MAXINT);
|
||||
}
|
||||
return(strcmp((char *) src1, (char *) src2));
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
int
|
||||
mutils_strncmp(__const mutils_word8 *src1, const mutils_word8 *src2, const mutils_word32 n)
|
||||
{
|
||||
if (n == 0)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
if (src1 == NULL)
|
||||
{
|
||||
if (src2 == NULL)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
return(-MAXINT);
|
||||
}
|
||||
if (src2 == NULL)
|
||||
{
|
||||
return(MAXINT);
|
||||
}
|
||||
return(strncmp((char *) src1, (char *) src2, n));
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
long
|
||||
mutils_strtol(__const mutils_word8 *nptr, mutils_word8 **endptr, const mutils_word8 base)
|
||||
{
|
||||
return(strtol((char *) nptr, (char **) endptr, (int) base));
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word8
|
||||
mutils_val2char(mutils_word8 x)
|
||||
{
|
||||
mutils_word8 out;
|
||||
|
||||
static mutils_word8 *table = (mutils_word8 *) "0123456789abcdef";
|
||||
|
||||
out = *(table + x);
|
||||
|
||||
return(out);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_word8 *
|
||||
mutils_asciify(mutils_word8 *in, __const mutils_word32 len)
|
||||
{
|
||||
mutils_word8 *ptrIn = in;
|
||||
mutils_word8 *buffer = mutils_malloc((2 * len) + 1);
|
||||
mutils_word8 *ptrOut = buffer;
|
||||
mutils_word32 loop;
|
||||
|
||||
for (loop = 0; loop < len; loop++, ptrIn++)
|
||||
{
|
||||
*ptrOut++ = mutils_val2char((*ptrIn & 0xf0) >> 4);
|
||||
*ptrOut++ = mutils_val2char((*ptrIn & 0x0f));
|
||||
}
|
||||
return(buffer);
|
||||
}
|
||||
|
||||
WIN32DLL_DEFINE
|
||||
mutils_boolean
|
||||
mutils_thequals(mutils_word8 *text, mutils_word8 *hash, __const mutils_word32 len)
|
||||
{
|
||||
mutils_word8 *ptrText = text;
|
||||
mutils_word8 *ptrHash = hash;
|
||||
mutils_word32 loop;
|
||||
|
||||
for (loop = 0; loop < len; loop++, ptrHash++)
|
||||
{
|
||||
if (mutils_val2char((*ptrHash & 0xf0) >> 4) != *ptrText++)
|
||||
{
|
||||
return(MUTILS_FALSE);
|
||||
}
|
||||
if (mutils_val2char((*ptrHash & 0x0f)) != *ptrText++)
|
||||
{
|
||||
return(MUTILS_FALSE);
|
||||
}
|
||||
}
|
||||
return(MUTILS_TRUE);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,709 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Nikos Mavroyanopoulos
|
||||
*
|
||||
* This 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.
|
||||
*
|
||||
* This 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 this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
/* According to Tiger's web page
|
||||
* http://www.cs.technion.ac.il/~biham/Reports/Tiger/
|
||||
*
|
||||
* Tiger has no usage restrictions nor patents. It can be used freely, with the
|
||||
* reference implementation, with other implementations or with a modification
|
||||
* to the reference implementation (as long as it still implements Tiger).
|
||||
*
|
||||
* This implementation is based on the reference implementation.
|
||||
*
|
||||
* --nikos
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_TIGER
|
||||
|
||||
#include "mhash_tiger.h"
|
||||
|
||||
#define PASSES 3
|
||||
|
||||
|
||||
#ifdef TIGER_64BIT
|
||||
|
||||
/* Unconditionally use the optimizations. There is already separate code for
|
||||
* 32-bit processors, and the comments about alpha probably apply to all modern
|
||||
* 64-bit processors. (Ex: the optimized version is faster on Athlon64 too.)
|
||||
*/
|
||||
#define OPTIMIZE_FOR_ALPHA
|
||||
|
||||
extern __const mutils_word64 tiger_table[4*256];
|
||||
|
||||
#define t1 (tiger_table)
|
||||
#define t2 (tiger_table+256)
|
||||
#define t3 (tiger_table+256*2)
|
||||
#define t4 (tiger_table+256*3)
|
||||
|
||||
#define save_abc \
|
||||
aa = a; \
|
||||
bb = b; \
|
||||
cc = c;
|
||||
|
||||
#ifdef OPTIMIZE_FOR_ALPHA
|
||||
/* This is the official definition of round */
|
||||
#define round(a,b,c,x,mul) \
|
||||
c ^= x; \
|
||||
a -= t1[((c)>>(0*8))&0xFF] ^ t2[((c)>>(2*8))&0xFF] ^ \
|
||||
t3[((c)>>(4*8))&0xFF] ^ t4[((c)>>(6*8))&0xFF] ; \
|
||||
b += t4[((c)>>(1*8))&0xFF] ^ t3[((c)>>(3*8))&0xFF] ^ \
|
||||
t2[((c)>>(5*8))&0xFF] ^ t1[((c)>>(7*8))&0xFF] ; \
|
||||
b *= mul;
|
||||
#else
|
||||
/* This code works faster when compiled on 32-bit machines */
|
||||
/* (but works slower on Alpha) */
|
||||
#define round(a,b,c,x,mul) \
|
||||
c ^= x; \
|
||||
a -= t1[(mutils_word8)(c)] ^ \
|
||||
t2[(mutils_word8)(((mutils_word32)(c))>>(2*8))] ^ \
|
||||
t3[(mutils_word8)((c)>>(4*8))] ^ \
|
||||
t4[(mutils_word8)(((mutils_word32)((c)>>(4*8)))>>(2*8))] ; \
|
||||
b += t4[(mutils_word8)(((mutils_word32)(c))>>(1*8))] ^ \
|
||||
t3[(mutils_word8)(((mutils_word32)(c))>>(3*8))] ^ \
|
||||
t2[(mutils_word8)(((mutils_word32)((c)>>(4*8)))>>(1*8))] ^ \
|
||||
t1[(mutils_word8)(((mutils_word32)((c)>>(4*8)))>>(3*8))]; \
|
||||
b *= mul;
|
||||
#endif
|
||||
|
||||
#define pass(a,b,c,mul) \
|
||||
round(a,b,c,x0,mul) \
|
||||
round(b,c,a,x1,mul) \
|
||||
round(c,a,b,x2,mul) \
|
||||
round(a,b,c,x3,mul) \
|
||||
round(b,c,a,x4,mul) \
|
||||
round(c,a,b,x5,mul) \
|
||||
round(a,b,c,x6,mul) \
|
||||
round(b,c,a,x7,mul)
|
||||
|
||||
#define key_schedule \
|
||||
x0 -= x7 ^ 0xA5A5A5A5A5A5A5A5LL; \
|
||||
x1 ^= x0; \
|
||||
x2 += x1; \
|
||||
x3 -= x2 ^ ((~x1)<<19); \
|
||||
x4 ^= x3; \
|
||||
x5 += x4; \
|
||||
x6 -= x5 ^ ((~x4)>>23); \
|
||||
x7 ^= x6; \
|
||||
x0 += x7; \
|
||||
x1 -= x0 ^ ((~x7)<<19); \
|
||||
x2 ^= x1; \
|
||||
x3 += x2; \
|
||||
x4 -= x3 ^ ((~x2)>>23); \
|
||||
x5 ^= x4; \
|
||||
x6 += x5; \
|
||||
x7 -= x6 ^ 0x0123456789ABCDEFLL;
|
||||
|
||||
#define feedforward \
|
||||
a ^= aa; \
|
||||
b -= bb; \
|
||||
c += cc;
|
||||
|
||||
#ifdef OPTIMIZE_FOR_ALPHA
|
||||
/* The loop is unrolled: works better on Alpha */
|
||||
#define compress \
|
||||
save_abc \
|
||||
pass(a,b,c,5) \
|
||||
key_schedule \
|
||||
pass(c,a,b,7) \
|
||||
key_schedule \
|
||||
pass(b,c,a,9) \
|
||||
for(pass_no=3; pass_no<PASSES; pass_no++) { \
|
||||
key_schedule \
|
||||
pass(a,b,c,9) \
|
||||
tmpa=a; a=c; c=b; b=tmpa;} \
|
||||
feedforward
|
||||
#else
|
||||
/* loop: works better on PC and Sun (smaller cache?) */
|
||||
#define compress \
|
||||
save_abc \
|
||||
for(pass_no=0; pass_no<PASSES; pass_no++) { \
|
||||
if(pass_no != 0) {key_schedule} \
|
||||
pass(a,b,c,(pass_no==0?5:pass_no==1?7:9)); \
|
||||
tmpa=a; a=c; c=b; b=tmpa;} \
|
||||
feedforward
|
||||
#endif
|
||||
|
||||
#define tiger_compress_macro(str, state) \
|
||||
{ \
|
||||
register mutils_word64 a, b, c, tmpa; \
|
||||
mutils_word64 aa, bb, cc; \
|
||||
register mutils_word64 x0, x1, x2, x3, x4, x5, x6, x7; \
|
||||
mutils_word8 pass_no; \
|
||||
\
|
||||
a = state[0]; \
|
||||
b = state[1]; \
|
||||
c = state[2]; \
|
||||
\
|
||||
x0=str[0]; x1=str[1]; x2=str[2]; x3=str[3]; \
|
||||
x4=str[4]; x5=str[5]; x6=str[6]; x7=str[7]; \
|
||||
\
|
||||
compress; \
|
||||
\
|
||||
state[0] = a; \
|
||||
state[1] = b; \
|
||||
state[2] = c; \
|
||||
}
|
||||
|
||||
#ifndef OPTIMIZE_FOR_ALPHA
|
||||
/* The compress function is a function. Requires smaller cache? */
|
||||
static void tiger_compress(mutils_word64 *str, mutils_word64 state[3])
|
||||
{
|
||||
tiger_compress_macro(((mutils_word64*)str), ((mutils_word64*)state));
|
||||
}
|
||||
|
||||
#else /* OPTIMIZE_FOR_ALPHA */
|
||||
/* The compress function is inlined: works better on Alpha. */
|
||||
#define tiger_compress(str, state) \
|
||||
tiger_compress_macro(((mutils_word64*)str), ((mutils_word64*)state))
|
||||
#endif /* OPTIMIZE_FOR_ALPHA */
|
||||
|
||||
#ifndef EXTRACT_UCHAR
|
||||
#define EXTRACT_UCHAR(p) (*(mutils_word8 *)(p))
|
||||
#endif
|
||||
|
||||
#define STRING2INT64(s) ((((((((((((((mutils_word64)(EXTRACT_UCHAR(s+7) << 8) \
|
||||
| EXTRACT_UCHAR(s+6)) << 8) \
|
||||
| EXTRACT_UCHAR(s+5)) << 8) \
|
||||
| EXTRACT_UCHAR(s+4)) << 8) \
|
||||
| EXTRACT_UCHAR(s+3)) << 8) \
|
||||
| EXTRACT_UCHAR(s+2)) << 8) \
|
||||
| EXTRACT_UCHAR(s+1)) << 8) \
|
||||
| EXTRACT_UCHAR(s))
|
||||
|
||||
static void tiger_block(struct tiger_ctx *ctx, mutils_word8 * str)
|
||||
{
|
||||
mutils_word64 temp[TIGER_DATALEN];
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
mutils_word32 j;
|
||||
for(j=0; j<TIGER_DATALEN; j++, str+=8)
|
||||
temp[j] = STRING2INT64(str);
|
||||
tiger_compress(temp, ctx->digest);
|
||||
#else
|
||||
mutils_memcpy(temp, str, TIGER_DATASIZE); /* Required to avoid un-aligned access on some arches */
|
||||
tiger_compress(temp, ctx->digest);
|
||||
#endif
|
||||
/* Update block count */
|
||||
ctx->count++;
|
||||
}
|
||||
|
||||
void tiger_init(struct tiger_ctx *ctx)
|
||||
{
|
||||
/* Set the h-vars to their initial values */
|
||||
ctx->digest[0] = h0init;
|
||||
ctx->digest[1] = h1init;
|
||||
ctx->digest[2] = h2init;
|
||||
|
||||
/* Initialize block count */
|
||||
ctx->count = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
void tiger_update(struct tiger_ctx *ctx, mutils_word8 * buffer, mutils_word32 len)
|
||||
{
|
||||
mutils_word32 left;
|
||||
|
||||
if (ctx->index) { /* Try to fill partial block */
|
||||
left = TIGER_DATASIZE - ctx->index;
|
||||
if (len < left)
|
||||
{
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, len);
|
||||
ctx->index += len;
|
||||
return; /* Finished */
|
||||
} else {
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, left);
|
||||
tiger_block(ctx, ctx->block);
|
||||
buffer += left;
|
||||
len -= left;
|
||||
}
|
||||
}
|
||||
while (len >= TIGER_DATASIZE)
|
||||
{
|
||||
tiger_block(ctx, buffer);
|
||||
buffer += TIGER_DATASIZE;
|
||||
len -= TIGER_DATASIZE;
|
||||
}
|
||||
if ((ctx->index = len))
|
||||
/* This assignment is intended */
|
||||
/* Buffer leftovers */
|
||||
mutils_memcpy(ctx->block, buffer, len);
|
||||
}
|
||||
|
||||
void tiger_final(struct tiger_ctx *ctx)
|
||||
{
|
||||
register mutils_word64 i, j;
|
||||
mutils_word8 temp[TIGER_DATASIZE];
|
||||
i = ctx->index;
|
||||
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
for(j=0; j<i; j++)
|
||||
temp[j^7] = ctx->block[j];
|
||||
|
||||
temp[j^7] = 0x01;
|
||||
j++;
|
||||
for(; j&7; j++)
|
||||
temp[j^7] = 0;
|
||||
#else
|
||||
for(j=0; j<i; j++)
|
||||
temp[j] = ctx->block[j];
|
||||
|
||||
temp[j++] = 0x01;
|
||||
for(; j&7; j++)
|
||||
temp[j] = 0;
|
||||
#endif
|
||||
if(j>56)
|
||||
{
|
||||
for(; j<64; j++)
|
||||
temp[j] = 0;
|
||||
tiger_compress(((mutils_word64*)temp), ctx->digest);
|
||||
j=0;
|
||||
}
|
||||
|
||||
for(; j<56; j++)
|
||||
temp[j] = 0;
|
||||
/* Theres 512 = 2^9 bits in one block */
|
||||
((mutils_word64*)(&(temp[56])))[0] = (ctx->count << 9) + (ctx->index << 3);
|
||||
tiger_compress(((mutils_word64*)temp), ctx->digest);
|
||||
}
|
||||
|
||||
void tiger_digest(struct tiger_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
if (s!=NULL)
|
||||
for (i = 0; i < TIGER_DIGESTLEN; i++) { /* 64 bit and LITTLE ENDIAN -that's cool! */
|
||||
s[7] = ctx->digest[i];
|
||||
s[6] = 0xff & (ctx->digest[i] >> 8);
|
||||
s[5] = 0xff & (ctx->digest[i] >> 16);
|
||||
s[4] = 0xff & (ctx->digest[i] >> 24);
|
||||
s[3] = 0xff & (ctx->digest[i] >> 32);
|
||||
s[2] = 0xff & (ctx->digest[i] >> 40);
|
||||
s[1] = 0xff & (ctx->digest[i] >> 48);
|
||||
s[0] = 0xff & (ctx->digest[i] >> 56);
|
||||
s+=8;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void tiger128_digest(struct tiger_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
if (s!=NULL)
|
||||
for (i = 0; i < TIGER128_DIGESTLEN; i++) { /* 64 bit and LITTLE ENDIAN -that's cool! */
|
||||
s[7] = ctx->digest[i];
|
||||
s[6] = 0xff & (ctx->digest[i] >> 8);
|
||||
s[5] = 0xff & (ctx->digest[i] >> 16);
|
||||
s[4] = 0xff & (ctx->digest[i] >> 24);
|
||||
s[3] = 0xff & (ctx->digest[i] >> 32);
|
||||
s[2] = 0xff & (ctx->digest[i] >> 40);
|
||||
s[1] = 0xff & (ctx->digest[i] >> 48);
|
||||
s[0] = 0xff & (ctx->digest[i] >> 56);
|
||||
s+=8;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void tiger160_digest(struct tiger_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
mutils_word32 i;
|
||||
if (s==NULL) return;
|
||||
for (i = 0; i < TIGER160_DIGESTLEN; i++) { /* 64 bit and LITTLE ENDIAN -that's cool! */
|
||||
s[7] = ctx->digest[i];
|
||||
s[6] = 0xff & (ctx->digest[i] >> 8);
|
||||
s[5] = 0xff & (ctx->digest[i] >> 16);
|
||||
s[4] = 0xff & (ctx->digest[i] >> 24);
|
||||
s[3] = 0xff & (ctx->digest[i] >> 32);
|
||||
s[2] = 0xff & (ctx->digest[i] >> 40);
|
||||
s[1] = 0xff & (ctx->digest[i] >> 48);
|
||||
s[0] = 0xff & (ctx->digest[i] >> 56);
|
||||
s+=8;
|
||||
}
|
||||
|
||||
/* last block */
|
||||
s[3] = 0xff & (ctx->digest[i] >> 32);
|
||||
s[2] = 0xff & (ctx->digest[i] >> 40);
|
||||
s[1] = 0xff & (ctx->digest[i] >> 48);
|
||||
s[0] = 0xff & (ctx->digest[i] >> 56);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#else /* !TIGER_64BIT */
|
||||
|
||||
|
||||
|
||||
extern __const mutils_word32 tiger_table[4*256][2];
|
||||
|
||||
#define t1 (tiger_table)
|
||||
#define t2 (tiger_table+256)
|
||||
#define t3 (tiger_table+256*2)
|
||||
#define t4 (tiger_table+256*3)
|
||||
|
||||
#define sub64(s0, s1, p0, p1) \
|
||||
temps0 = (p0); \
|
||||
tcarry = s0 < temps0; \
|
||||
s0 -= temps0; \
|
||||
s1 -= (p1) + tcarry;
|
||||
|
||||
#define add64(s0, s1, p0, p1) \
|
||||
temps0 = (p0); \
|
||||
s0 += temps0; \
|
||||
tcarry = s0 < temps0; \
|
||||
s1 += (p1) + tcarry;
|
||||
|
||||
#define xor64(s0, s1, p0, p1) \
|
||||
s0 ^= (p0); \
|
||||
s1 ^= (p1);
|
||||
|
||||
#define mul5(s0, s1) \
|
||||
tempt0 = s0<<2; \
|
||||
tempt1 = (s1<<2)|(s0>>30); \
|
||||
add64(s0, s1, tempt0, tempt1);
|
||||
|
||||
#define mul7(s0, s1) \
|
||||
tempt0 = s0<<3; \
|
||||
tempt1 = (s1<<3)|(s0>>29); \
|
||||
sub64(tempt0, tempt1, s0, s1); \
|
||||
s0 = tempt0; \
|
||||
s1 = tempt1;
|
||||
|
||||
#define mul9(s0, s1) \
|
||||
tempt0 = s0<<3; \
|
||||
tempt1 = (s1<<3)|(s0>>29); \
|
||||
add64(s0, s1, tempt0, tempt1);
|
||||
|
||||
#define save_abc \
|
||||
aa0 = a0; \
|
||||
aa1 = a1; \
|
||||
bb0 = b0; \
|
||||
bb1 = b1; \
|
||||
cc0 = c0; \
|
||||
cc1 = c1;
|
||||
|
||||
#define round(a0,a1,b0,b1,c0,c1,x0,x1,mul) \
|
||||
xor64(c0, c1, x0, x1); \
|
||||
temp0 = t1[((c0)>>(0*8))&0xFF][0] ; \
|
||||
temp1 = t1[((c0)>>(0*8))&0xFF][1] ; \
|
||||
temp0 ^= t2[((c0)>>(2*8))&0xFF][0] ; \
|
||||
temp1 ^= t2[((c0)>>(2*8))&0xFF][1] ; \
|
||||
temp0 ^= t3[((c1)>>(0*8))&0xFF][0] ; \
|
||||
temp1 ^= t3[((c1)>>(0*8))&0xFF][1] ; \
|
||||
temp0 ^= t4[((c1)>>(2*8))&0xFF][0] ; \
|
||||
temp1 ^= t4[((c1)>>(2*8))&0xFF][1] ; \
|
||||
sub64(a0, a1, temp0, temp1); \
|
||||
temp0 = t4[((c0)>>(1*8))&0xFF][0] ; \
|
||||
temp1 = t4[((c0)>>(1*8))&0xFF][1] ; \
|
||||
temp0 ^= t3[((c0)>>(3*8))&0xFF][0] ; \
|
||||
temp1 ^= t3[((c0)>>(3*8))&0xFF][1] ; \
|
||||
temp0 ^= t2[((c1)>>(1*8))&0xFF][0] ; \
|
||||
temp1 ^= t2[((c1)>>(1*8))&0xFF][1] ; \
|
||||
temp0 ^= t1[((c1)>>(3*8))&0xFF][0] ; \
|
||||
temp1 ^= t1[((c1)>>(3*8))&0xFF][1] ; \
|
||||
add64(b0, b1, temp0, temp1); \
|
||||
if((mul)==5) \
|
||||
{mul5(b0, b1);} \
|
||||
else \
|
||||
if((mul)==7) \
|
||||
{mul7(b0, b1);} \
|
||||
else \
|
||||
{mul9(b0, b1)};
|
||||
|
||||
#define pass(a0,a1,b0,b1,c0,c1,mul) \
|
||||
round(a0,a1,b0,b1,c0,c1,x00,x01,mul); \
|
||||
round(b0,b1,c0,c1,a0,a1,x10,x11,mul); \
|
||||
round(c0,c1,a0,a1,b0,b1,x20,x21,mul); \
|
||||
round(a0,a1,b0,b1,c0,c1,x30,x31,mul); \
|
||||
round(b0,b1,c0,c1,a0,a1,x40,x41,mul); \
|
||||
round(c0,c1,a0,a1,b0,b1,x50,x51,mul); \
|
||||
round(a0,a1,b0,b1,c0,c1,x60,x61,mul); \
|
||||
round(b0,b1,c0,c1,a0,a1,x70,x71,mul);
|
||||
|
||||
#define key_schedule \
|
||||
sub64(x00, x01, x70^0xA5A5A5A5, x71^0xA5A5A5A5); \
|
||||
xor64(x10, x11, x00, x01); \
|
||||
add64(x20, x21, x10, x11); \
|
||||
sub64(x30, x31, x20^((~x10)<<19), ~x21^(((x11)<<19)|((x10)>>13))); \
|
||||
xor64(x40, x41, x30, x31); \
|
||||
add64(x50, x51, x40, x41); \
|
||||
sub64(x60, x61, ~x50^(((x40)>>23)|((x41)<<9)), x51^((~x41)>>23)); \
|
||||
xor64(x70, x71, x60, x61); \
|
||||
add64(x00, x01, x70, x71); \
|
||||
sub64(x10, x11, x00^((~x70)<<19), ~x01^(((x71)<<19)|((x70)>>13))); \
|
||||
xor64(x20, x21, x10, x11); \
|
||||
add64(x30, x31, x20, x21); \
|
||||
sub64(x40, x41, ~x30^(((x20)>>23)|((x21)<<9)), x31^((~x21)>>23)); \
|
||||
xor64(x50, x51, x40, x41); \
|
||||
add64(x60, x61, x50, x51); \
|
||||
sub64(x70, x71, x60^0x89ABCDEF, x61^0x01234567);
|
||||
|
||||
#define feedforward \
|
||||
xor64(a0, a1, aa0, aa1); \
|
||||
sub64(b0, b1, bb0, bb1); \
|
||||
add64(c0, c1, cc0, cc1);
|
||||
|
||||
#ifdef UNROLL_COMPRESS
|
||||
#define compress \
|
||||
save_abc \
|
||||
pass(a0,a1,b0,b1,c0,c1,5); \
|
||||
key_schedule; \
|
||||
pass(c0,c1,a0,a1,b0,b1,7); \
|
||||
key_schedule; \
|
||||
pass(b0,b1,c0,c1,a0,a1,9); \
|
||||
for(pass_no=3; pass_no<PASSES; pass_no++) { \
|
||||
key_schedule \
|
||||
pass(a0,a1,b0,b1,c0,c1,9); \
|
||||
tmpa=a0; a0=c0; c0=b0; b0=tmpa; \
|
||||
tmpa=a1; a1=c1; c1=b1; b1=tmpa;} \
|
||||
feedforward
|
||||
#else
|
||||
#define compress \
|
||||
save_abc \
|
||||
for(pass_no=0; pass_no<PASSES; pass_no++) { \
|
||||
if(pass_no != 0) {key_schedule} \
|
||||
pass(a0,a1,b0,b1,c0,c1,(pass_no==0?5:pass_no==1?7:9)) \
|
||||
tmpa=a0; a0=c0; c0=b0; b0=tmpa; \
|
||||
tmpa=a1; a1=c1; c1=b1; b1=tmpa;} \
|
||||
feedforward
|
||||
#endif
|
||||
|
||||
#define tiger_compress_macro(str, state) \
|
||||
{ \
|
||||
register mutils_word32 a0, a1, b0, b1, c0, c1, tmpa; \
|
||||
mutils_word32 aa0, aa1, bb0, bb1, cc0, cc1; \
|
||||
mutils_word32 x00, x01, x10, x11, x20, x21, x30, x31, \
|
||||
x40, x41, x50, x51, x60, x61, x70, x71; \
|
||||
register mutils_word32 temp0, temp1, tempt0, tempt1, temps0, tcarry; \
|
||||
mutils_word32 i; \
|
||||
int pass_no; \
|
||||
\
|
||||
a0 = state[0]; \
|
||||
a1 = state[1]; \
|
||||
b0 = state[2]; \
|
||||
b1 = state[3]; \
|
||||
c0 = state[4]; \
|
||||
c1 = state[5]; \
|
||||
\
|
||||
x00=str[0*2]; x01=str[0*2+1]; x10=str[1*2]; x11=str[1*2+1]; \
|
||||
x20=str[2*2]; x21=str[2*2+1]; x30=str[3*2]; x31=str[3*2+1]; \
|
||||
x40=str[4*2]; x41=str[4*2+1]; x50=str[5*2]; x51=str[5*2+1]; \
|
||||
x60=str[6*2]; x61=str[6*2+1]; x70=str[7*2]; x71=str[7*2+1]; \
|
||||
\
|
||||
compress; \
|
||||
\
|
||||
state[0] = a0; \
|
||||
state[1] = a1; \
|
||||
state[2] = b0; \
|
||||
state[3] = b1; \
|
||||
state[4] = c0; \
|
||||
state[5] = c1; \
|
||||
}
|
||||
|
||||
#define UNROLL_COMPRESS
|
||||
#ifdef UNROLL_COMPRESS
|
||||
/* The compress function is inlined */
|
||||
#define tiger_compress(str, state) \
|
||||
tiger_compress_macro(((mutils_word32*)str), ((mutils_word32*)state))
|
||||
#else
|
||||
/* The compress function is a function */
|
||||
tiger_compress(__const mutils_word32 *str, mutils_word32 state[6])
|
||||
{
|
||||
tiger_compress_macro(((mutils_word32*)str), ((mutils_word32*)state));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef EXTRACT_UCHAR
|
||||
#define EXTRACT_UCHAR(p) (*(mutils_word8 *)(p))
|
||||
#endif
|
||||
|
||||
#define STRING2INT(s) ((((((EXTRACT_UCHAR(s+3) << 8) \
|
||||
| EXTRACT_UCHAR(s+2)) << 8) \
|
||||
| EXTRACT_UCHAR(s+1)) << 8) \
|
||||
| EXTRACT_UCHAR(s))
|
||||
|
||||
static void tiger_block(struct tiger_ctx *ctx, mutils_word8 * block)
|
||||
{
|
||||
mutils_word32 data[TIGER_DATALEN];
|
||||
mutils_word32 i;
|
||||
|
||||
/* Update block count */
|
||||
if (!++ctx->count_l)
|
||||
++ctx->count_h;
|
||||
|
||||
/* Endian independent conversion */
|
||||
for (i = 0; i < TIGER_DATALEN; i++, block += sizeof(mutils_word32))
|
||||
data[i] = STRING2INT(block);
|
||||
|
||||
tiger_compress(data, ctx->digest);
|
||||
}
|
||||
|
||||
void tiger_init(struct tiger_ctx *ctx)
|
||||
{
|
||||
/* Set the h-vars to their initial values */
|
||||
ctx->digest[0] = h0init;
|
||||
ctx->digest[1] = h1init;
|
||||
ctx->digest[2] = h2init;
|
||||
ctx->digest[3] = h3init;
|
||||
ctx->digest[4] = h4init;
|
||||
ctx->digest[5] = h5init;
|
||||
|
||||
/* Initialize bit count */
|
||||
ctx->count_l = ctx->count_h = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
void tiger_update(struct tiger_ctx *ctx, mutils_word8 * buffer, mutils_word32 len)
|
||||
{
|
||||
if (ctx->index) { /* Try to fill partial block */
|
||||
mutils_word32 left = TIGER_DATASIZE - ctx->index;
|
||||
if (len < left) {
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, len);
|
||||
ctx->index += len;
|
||||
return; /* Finished */
|
||||
} else {
|
||||
mutils_memcpy(ctx->block + ctx->index, buffer, left);
|
||||
tiger_block(ctx, ctx->block);
|
||||
buffer += left;
|
||||
len -= left;
|
||||
}
|
||||
}
|
||||
while (len >= TIGER_DATASIZE)
|
||||
{
|
||||
tiger_block(ctx, buffer);
|
||||
buffer += TIGER_DATASIZE;
|
||||
len -= TIGER_DATASIZE;
|
||||
}
|
||||
if ((ctx->index = len))
|
||||
{
|
||||
/* This assignment is intended */
|
||||
/* Buffer leftovers */
|
||||
mutils_memcpy(ctx->block, buffer, len);
|
||||
}
|
||||
}
|
||||
|
||||
void tiger_final(struct tiger_ctx *ctx)
|
||||
{
|
||||
mutils_word32 data[TIGER_DATALEN];
|
||||
mutils_word32 i;
|
||||
mutils_word32 words;
|
||||
|
||||
i = ctx->index;
|
||||
/* Set the first char of padding to 0x01. This is safe since there is
|
||||
always at least one byte free */
|
||||
ctx->block[i++] = 0x01;
|
||||
|
||||
/* Fill rest of word */
|
||||
for (; i & 3; i++)
|
||||
ctx->block[i] = 0;
|
||||
|
||||
/* i is now a multiple of the word size 4 */
|
||||
words = i >> 2;
|
||||
for (i = 0; i < words; i++)
|
||||
data[i] = STRING2INT(ctx->block + 4 * i);
|
||||
|
||||
if (words > (TIGER_DATALEN - 2)) { /* No room for length in this block. Process it and
|
||||
* pad with another one */
|
||||
for (i = words; i < TIGER_DATALEN; i++)
|
||||
data[i] = 0;
|
||||
tiger_compress( data, ctx->digest);
|
||||
for (i = 0; i < (TIGER_DATALEN - 2); i++)
|
||||
data[i] = 0;
|
||||
} else
|
||||
for (i = words; i < TIGER_DATALEN - 2; i++)
|
||||
data[i] = 0;
|
||||
/* Theres 512 = 2^9 bits in one block */
|
||||
data[TIGER_DATALEN - 1] =
|
||||
(ctx->count_h << 9) | (ctx->count_l >> 23);
|
||||
data[TIGER_DATALEN - 2] = (ctx->count_l << 9) | (ctx->index << 3);
|
||||
tiger_compress( data, ctx->digest);
|
||||
}
|
||||
|
||||
void tiger_digest(struct tiger_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
if (s!=NULL)
|
||||
for (i = 0; i < TIGER_DIGESTLEN; i+=2)
|
||||
{ /* 64 bit and LITTLE ENDIAN -that's cool! */
|
||||
s[7] = ctx->digest[i];
|
||||
s[6] = 0xff & (ctx->digest[i] >> 8);
|
||||
s[5] = 0xff & (ctx->digest[i] >> 16);
|
||||
s[4] = 0xff & ctx->digest[i] >> 24;
|
||||
s[3] = ctx->digest[i+1];
|
||||
s[2] = 0xff & (ctx->digest[i+1] >> 8);
|
||||
s[1] = 0xff & (ctx->digest[i+1] >> 16);
|
||||
s[0] = 0xff & ctx->digest[i+1] >> 24;
|
||||
s+=8;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void tiger128_digest(struct tiger_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
if (s!=NULL)
|
||||
for (i = 0; i < TIGER128_DIGESTLEN; i+=2)
|
||||
{ /* 64 bit and LITTLE ENDIAN -that's cool! */
|
||||
s[7] = ctx->digest[i];
|
||||
s[6] = 0xff & (ctx->digest[i] >> 8);
|
||||
s[5] = 0xff & (ctx->digest[i] >> 16);
|
||||
s[4] = 0xff & ctx->digest[i] >> 24;
|
||||
s[3] = ctx->digest[i+1];
|
||||
s[2] = 0xff & (ctx->digest[i+1] >> 8);
|
||||
s[1] = 0xff & (ctx->digest[i+1] >> 16);
|
||||
s[0] = 0xff & ctx->digest[i+1] >> 24;
|
||||
s+=8;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void tiger160_digest(struct tiger_ctx *ctx, mutils_word8 * s)
|
||||
{
|
||||
mutils_word32 i;
|
||||
|
||||
for (i = 0; i < TIGER160_DIGESTLEN-1; i+=2) { /* 64 bit and LITTLE ENDIAN -that's cool! */
|
||||
s[7] = ctx->digest[i];
|
||||
s[6] = 0xff & (ctx->digest[i] >> 8);
|
||||
s[5] = 0xff & (ctx->digest[i] >> 16);
|
||||
s[4] = 0xff & ctx->digest[i] >> 24;
|
||||
s[3] = ctx->digest[i+1];
|
||||
s[2] = 0xff & (ctx->digest[i+1] >> 8);
|
||||
s[1] = 0xff & (ctx->digest[i+1] >> 16);
|
||||
s[0] = 0xff & ctx->digest[i+1] >> 24;
|
||||
s+=8;
|
||||
}
|
||||
/* last block */
|
||||
s[3] = ctx->digest[i+1];
|
||||
s[2] = 0xff & (ctx->digest[i+1] >> 8);
|
||||
s[1] = 0xff & (ctx->digest[i+1] >> 16);
|
||||
s[0] = 0xff & ctx->digest[i+1] >> 24;
|
||||
}
|
||||
|
||||
#endif /* !TIGER_64BIT */
|
||||
|
||||
#endif /* ENABLE_TIGER */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,988 @@
|
||||
/* whirlpool.c */
|
||||
|
||||
/* The Whirlpool hashing function. A new 512-bit hashing function
|
||||
* operating on messages less than 2 ** 256 bits in length. The
|
||||
* function structure is designed according to the Wide Trail strategy
|
||||
* and permits a wide variety of implementation trade-offs.
|
||||
*
|
||||
* WHIRLPOOL has been selected for the NESSIE portfolio of
|
||||
* cryptographic primitives. The International Organization for
|
||||
* Standardization (ISO) has decided to include the final version of
|
||||
* WHIRLPOOL in the revised ISO/IEC 10118-3:2003(E) standard.
|
||||
*
|
||||
* WHIRLPOOL uses Merkle-Damgård strengthening and the
|
||||
* Miyaguchi-Preneel hashing scheme with a dedicated 512-bit block
|
||||
* cipher called W. The W block cipher is very similar to the AES
|
||||
* algorithm, RIJNDAEL.
|
||||
*
|
||||
* =============================================================================
|
||||
*
|
||||
* References
|
||||
*
|
||||
* The Whirlpool algorithm was developed by
|
||||
* Paulo S. L. M. Barreto (pbarreto@scopus.com.br) and
|
||||
* Vincent Rijmen (vincent.rijmen@cryptomathic.com).
|
||||
*
|
||||
* See
|
||||
* P.S.L.M. Barreto, V. Rijmen,
|
||||
* ``The Whirlpool hashing function,''
|
||||
* NESSIE submission, 2000 (tweaked version, 2001),
|
||||
* <https://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/whirlpool.zip>
|
||||
*
|
||||
* @author Paulo S.L.M. Barreto
|
||||
* @author Vincent Rijmen.
|
||||
*
|
||||
* @version 3.0 (2003.03.12)
|
||||
*
|
||||
* =============================================================================
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
/* This code was derived by B. Poettering from the reference implementation
|
||||
* supplied by Barreto/Rijmen to fit the mhash library interface. Both this and
|
||||
* the origanl code are in the public domain.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "libdefs.h"
|
||||
|
||||
#ifdef ENABLE_WHIRLPOOL
|
||||
|
||||
#include "mhash_whirlpool.h"
|
||||
|
||||
/*
|
||||
* The number of rounds of the internal dedicated block cipher.
|
||||
*/
|
||||
#define R 10
|
||||
|
||||
/*
|
||||
* Though Whirlpool is endianness-neutral, the encryption tables are listed
|
||||
* in BIG-ENDIAN format, which is adopted throughout this implementation
|
||||
* (but little-endian notation would be equally suitable if consistently
|
||||
* employed).
|
||||
*/
|
||||
|
||||
static __const mutils_word64 C0[256] =
|
||||
{
|
||||
0x18186018c07830d8ULL, 0x23238c2305af4626ULL, 0xc6c63fc67ef991b8ULL, 0xe8e887e8136fcdfbULL,
|
||||
0x878726874ca113cbULL, 0xb8b8dab8a9626d11ULL, 0x0101040108050209ULL, 0x4f4f214f426e9e0dULL,
|
||||
0x3636d836adee6c9bULL, 0xa6a6a2a6590451ffULL, 0xd2d26fd2debdb90cULL, 0xf5f5f3f5fb06f70eULL,
|
||||
0x7979f979ef80f296ULL, 0x6f6fa16f5fcede30ULL, 0x91917e91fcef3f6dULL, 0x52525552aa07a4f8ULL,
|
||||
0x60609d6027fdc047ULL, 0xbcbccabc89766535ULL, 0x9b9b569baccd2b37ULL, 0x8e8e028e048c018aULL,
|
||||
0xa3a3b6a371155bd2ULL, 0x0c0c300c603c186cULL, 0x7b7bf17bff8af684ULL, 0x3535d435b5e16a80ULL,
|
||||
0x1d1d741de8693af5ULL, 0xe0e0a7e05347ddb3ULL, 0xd7d77bd7f6acb321ULL, 0xc2c22fc25eed999cULL,
|
||||
0x2e2eb82e6d965c43ULL, 0x4b4b314b627a9629ULL, 0xfefedffea321e15dULL, 0x575741578216aed5ULL,
|
||||
0x15155415a8412abdULL, 0x7777c1779fb6eee8ULL, 0x3737dc37a5eb6e92ULL, 0xe5e5b3e57b56d79eULL,
|
||||
0x9f9f469f8cd92313ULL, 0xf0f0e7f0d317fd23ULL, 0x4a4a354a6a7f9420ULL, 0xdada4fda9e95a944ULL,
|
||||
0x58587d58fa25b0a2ULL, 0xc9c903c906ca8fcfULL, 0x2929a429558d527cULL, 0x0a0a280a5022145aULL,
|
||||
0xb1b1feb1e14f7f50ULL, 0xa0a0baa0691a5dc9ULL, 0x6b6bb16b7fdad614ULL, 0x85852e855cab17d9ULL,
|
||||
0xbdbdcebd8173673cULL, 0x5d5d695dd234ba8fULL, 0x1010401080502090ULL, 0xf4f4f7f4f303f507ULL,
|
||||
0xcbcb0bcb16c08bddULL, 0x3e3ef83eedc67cd3ULL, 0x0505140528110a2dULL, 0x676781671fe6ce78ULL,
|
||||
0xe4e4b7e47353d597ULL, 0x27279c2725bb4e02ULL, 0x4141194132588273ULL, 0x8b8b168b2c9d0ba7ULL,
|
||||
0xa7a7a6a7510153f6ULL, 0x7d7de97dcf94fab2ULL, 0x95956e95dcfb3749ULL, 0xd8d847d88e9fad56ULL,
|
||||
0xfbfbcbfb8b30eb70ULL, 0xeeee9fee2371c1cdULL, 0x7c7ced7cc791f8bbULL, 0x6666856617e3cc71ULL,
|
||||
0xdddd53dda68ea77bULL, 0x17175c17b84b2eafULL, 0x4747014702468e45ULL, 0x9e9e429e84dc211aULL,
|
||||
0xcaca0fca1ec589d4ULL, 0x2d2db42d75995a58ULL, 0xbfbfc6bf9179632eULL, 0x07071c07381b0e3fULL,
|
||||
0xadad8ead012347acULL, 0x5a5a755aea2fb4b0ULL, 0x838336836cb51befULL, 0x3333cc3385ff66b6ULL,
|
||||
0x636391633ff2c65cULL, 0x02020802100a0412ULL, 0xaaaa92aa39384993ULL, 0x7171d971afa8e2deULL,
|
||||
0xc8c807c80ecf8dc6ULL, 0x19196419c87d32d1ULL, 0x494939497270923bULL, 0xd9d943d9869aaf5fULL,
|
||||
0xf2f2eff2c31df931ULL, 0xe3e3abe34b48dba8ULL, 0x5b5b715be22ab6b9ULL, 0x88881a8834920dbcULL,
|
||||
0x9a9a529aa4c8293eULL, 0x262698262dbe4c0bULL, 0x3232c8328dfa64bfULL, 0xb0b0fab0e94a7d59ULL,
|
||||
0xe9e983e91b6acff2ULL, 0x0f0f3c0f78331e77ULL, 0xd5d573d5e6a6b733ULL, 0x80803a8074ba1df4ULL,
|
||||
0xbebec2be997c6127ULL, 0xcdcd13cd26de87ebULL, 0x3434d034bde46889ULL, 0x48483d487a759032ULL,
|
||||
0xffffdbffab24e354ULL, 0x7a7af57af78ff48dULL, 0x90907a90f4ea3d64ULL, 0x5f5f615fc23ebe9dULL,
|
||||
0x202080201da0403dULL, 0x6868bd6867d5d00fULL, 0x1a1a681ad07234caULL, 0xaeae82ae192c41b7ULL,
|
||||
0xb4b4eab4c95e757dULL, 0x54544d549a19a8ceULL, 0x93937693ece53b7fULL, 0x222288220daa442fULL,
|
||||
0x64648d6407e9c863ULL, 0xf1f1e3f1db12ff2aULL, 0x7373d173bfa2e6ccULL, 0x12124812905a2482ULL,
|
||||
0x40401d403a5d807aULL, 0x0808200840281048ULL, 0xc3c32bc356e89b95ULL, 0xecec97ec337bc5dfULL,
|
||||
0xdbdb4bdb9690ab4dULL, 0xa1a1bea1611f5fc0ULL, 0x8d8d0e8d1c830791ULL, 0x3d3df43df5c97ac8ULL,
|
||||
0x97976697ccf1335bULL, 0x0000000000000000ULL, 0xcfcf1bcf36d483f9ULL, 0x2b2bac2b4587566eULL,
|
||||
0x7676c57697b3ece1ULL, 0x8282328264b019e6ULL, 0xd6d67fd6fea9b128ULL, 0x1b1b6c1bd87736c3ULL,
|
||||
0xb5b5eeb5c15b7774ULL, 0xafaf86af112943beULL, 0x6a6ab56a77dfd41dULL, 0x50505d50ba0da0eaULL,
|
||||
0x45450945124c8a57ULL, 0xf3f3ebf3cb18fb38ULL, 0x3030c0309df060adULL, 0xefef9bef2b74c3c4ULL,
|
||||
0x3f3ffc3fe5c37edaULL, 0x55554955921caac7ULL, 0xa2a2b2a2791059dbULL, 0xeaea8fea0365c9e9ULL,
|
||||
0x656589650fecca6aULL, 0xbabad2bab9686903ULL, 0x2f2fbc2f65935e4aULL, 0xc0c027c04ee79d8eULL,
|
||||
0xdede5fdebe81a160ULL, 0x1c1c701ce06c38fcULL, 0xfdfdd3fdbb2ee746ULL, 0x4d4d294d52649a1fULL,
|
||||
0x92927292e4e03976ULL, 0x7575c9758fbceafaULL, 0x06061806301e0c36ULL, 0x8a8a128a249809aeULL,
|
||||
0xb2b2f2b2f940794bULL, 0xe6e6bfe66359d185ULL, 0x0e0e380e70361c7eULL, 0x1f1f7c1ff8633ee7ULL,
|
||||
0x6262956237f7c455ULL, 0xd4d477d4eea3b53aULL, 0xa8a89aa829324d81ULL, 0x96966296c4f43152ULL,
|
||||
0xf9f9c3f99b3aef62ULL, 0xc5c533c566f697a3ULL, 0x2525942535b14a10ULL, 0x59597959f220b2abULL,
|
||||
0x84842a8454ae15d0ULL, 0x7272d572b7a7e4c5ULL, 0x3939e439d5dd72ecULL, 0x4c4c2d4c5a619816ULL,
|
||||
0x5e5e655eca3bbc94ULL, 0x7878fd78e785f09fULL, 0x3838e038ddd870e5ULL, 0x8c8c0a8c14860598ULL,
|
||||
0xd1d163d1c6b2bf17ULL, 0xa5a5aea5410b57e4ULL, 0xe2e2afe2434dd9a1ULL, 0x616199612ff8c24eULL,
|
||||
0xb3b3f6b3f1457b42ULL, 0x2121842115a54234ULL, 0x9c9c4a9c94d62508ULL, 0x1e1e781ef0663ceeULL,
|
||||
0x4343114322528661ULL, 0xc7c73bc776fc93b1ULL, 0xfcfcd7fcb32be54fULL, 0x0404100420140824ULL,
|
||||
0x51515951b208a2e3ULL, 0x99995e99bcc72f25ULL, 0x6d6da96d4fc4da22ULL, 0x0d0d340d68391a65ULL,
|
||||
0xfafacffa8335e979ULL, 0xdfdf5bdfb684a369ULL, 0x7e7ee57ed79bfca9ULL, 0x242490243db44819ULL,
|
||||
0x3b3bec3bc5d776feULL, 0xabab96ab313d4b9aULL, 0xcece1fce3ed181f0ULL, 0x1111441188552299ULL,
|
||||
0x8f8f068f0c890383ULL, 0x4e4e254e4a6b9c04ULL, 0xb7b7e6b7d1517366ULL, 0xebeb8beb0b60cbe0ULL,
|
||||
0x3c3cf03cfdcc78c1ULL, 0x81813e817cbf1ffdULL, 0x94946a94d4fe3540ULL, 0xf7f7fbf7eb0cf31cULL,
|
||||
0xb9b9deb9a1676f18ULL, 0x13134c13985f268bULL, 0x2c2cb02c7d9c5851ULL, 0xd3d36bd3d6b8bb05ULL,
|
||||
0xe7e7bbe76b5cd38cULL, 0x6e6ea56e57cbdc39ULL, 0xc4c437c46ef395aaULL, 0x03030c03180f061bULL,
|
||||
0x565645568a13acdcULL, 0x44440d441a49885eULL, 0x7f7fe17fdf9efea0ULL, 0xa9a99ea921374f88ULL,
|
||||
0x2a2aa82a4d825467ULL, 0xbbbbd6bbb16d6b0aULL, 0xc1c123c146e29f87ULL, 0x53535153a202a6f1ULL,
|
||||
0xdcdc57dcae8ba572ULL, 0x0b0b2c0b58271653ULL, 0x9d9d4e9d9cd32701ULL, 0x6c6cad6c47c1d82bULL,
|
||||
0x3131c43195f562a4ULL, 0x7474cd7487b9e8f3ULL, 0xf6f6fff6e309f115ULL, 0x464605460a438c4cULL,
|
||||
0xacac8aac092645a5ULL, 0x89891e893c970fb5ULL, 0x14145014a04428b4ULL, 0xe1e1a3e15b42dfbaULL,
|
||||
0x16165816b04e2ca6ULL, 0x3a3ae83acdd274f7ULL, 0x6969b9696fd0d206ULL, 0x09092409482d1241ULL,
|
||||
0x7070dd70a7ade0d7ULL, 0xb6b6e2b6d954716fULL, 0xd0d067d0ceb7bd1eULL, 0xeded93ed3b7ec7d6ULL,
|
||||
0xcccc17cc2edb85e2ULL, 0x424215422a578468ULL, 0x98985a98b4c22d2cULL, 0xa4a4aaa4490e55edULL,
|
||||
0x2828a0285d885075ULL, 0x5c5c6d5cda31b886ULL, 0xf8f8c7f8933fed6bULL, 0x8686228644a411c2ULL,
|
||||
};
|
||||
|
||||
static __const mutils_word64 C1[256] =
|
||||
{
|
||||
0xd818186018c07830ULL, 0x2623238c2305af46ULL, 0xb8c6c63fc67ef991ULL, 0xfbe8e887e8136fcdULL,
|
||||
0xcb878726874ca113ULL, 0x11b8b8dab8a9626dULL, 0x0901010401080502ULL, 0x0d4f4f214f426e9eULL,
|
||||
0x9b3636d836adee6cULL, 0xffa6a6a2a6590451ULL, 0x0cd2d26fd2debdb9ULL, 0x0ef5f5f3f5fb06f7ULL,
|
||||
0x967979f979ef80f2ULL, 0x306f6fa16f5fcedeULL, 0x6d91917e91fcef3fULL, 0xf852525552aa07a4ULL,
|
||||
0x4760609d6027fdc0ULL, 0x35bcbccabc897665ULL, 0x379b9b569baccd2bULL, 0x8a8e8e028e048c01ULL,
|
||||
0xd2a3a3b6a371155bULL, 0x6c0c0c300c603c18ULL, 0x847b7bf17bff8af6ULL, 0x803535d435b5e16aULL,
|
||||
0xf51d1d741de8693aULL, 0xb3e0e0a7e05347ddULL, 0x21d7d77bd7f6acb3ULL, 0x9cc2c22fc25eed99ULL,
|
||||
0x432e2eb82e6d965cULL, 0x294b4b314b627a96ULL, 0x5dfefedffea321e1ULL, 0xd5575741578216aeULL,
|
||||
0xbd15155415a8412aULL, 0xe87777c1779fb6eeULL, 0x923737dc37a5eb6eULL, 0x9ee5e5b3e57b56d7ULL,
|
||||
0x139f9f469f8cd923ULL, 0x23f0f0e7f0d317fdULL, 0x204a4a354a6a7f94ULL, 0x44dada4fda9e95a9ULL,
|
||||
0xa258587d58fa25b0ULL, 0xcfc9c903c906ca8fULL, 0x7c2929a429558d52ULL, 0x5a0a0a280a502214ULL,
|
||||
0x50b1b1feb1e14f7fULL, 0xc9a0a0baa0691a5dULL, 0x146b6bb16b7fdad6ULL, 0xd985852e855cab17ULL,
|
||||
0x3cbdbdcebd817367ULL, 0x8f5d5d695dd234baULL, 0x9010104010805020ULL, 0x07f4f4f7f4f303f5ULL,
|
||||
0xddcbcb0bcb16c08bULL, 0xd33e3ef83eedc67cULL, 0x2d0505140528110aULL, 0x78676781671fe6ceULL,
|
||||
0x97e4e4b7e47353d5ULL, 0x0227279c2725bb4eULL, 0x7341411941325882ULL, 0xa78b8b168b2c9d0bULL,
|
||||
0xf6a7a7a6a7510153ULL, 0xb27d7de97dcf94faULL, 0x4995956e95dcfb37ULL, 0x56d8d847d88e9fadULL,
|
||||
0x70fbfbcbfb8b30ebULL, 0xcdeeee9fee2371c1ULL, 0xbb7c7ced7cc791f8ULL, 0x716666856617e3ccULL,
|
||||
0x7bdddd53dda68ea7ULL, 0xaf17175c17b84b2eULL, 0x454747014702468eULL, 0x1a9e9e429e84dc21ULL,
|
||||
0xd4caca0fca1ec589ULL, 0x582d2db42d75995aULL, 0x2ebfbfc6bf917963ULL, 0x3f07071c07381b0eULL,
|
||||
0xacadad8ead012347ULL, 0xb05a5a755aea2fb4ULL, 0xef838336836cb51bULL, 0xb63333cc3385ff66ULL,
|
||||
0x5c636391633ff2c6ULL, 0x1202020802100a04ULL, 0x93aaaa92aa393849ULL, 0xde7171d971afa8e2ULL,
|
||||
0xc6c8c807c80ecf8dULL, 0xd119196419c87d32ULL, 0x3b49493949727092ULL, 0x5fd9d943d9869aafULL,
|
||||
0x31f2f2eff2c31df9ULL, 0xa8e3e3abe34b48dbULL, 0xb95b5b715be22ab6ULL, 0xbc88881a8834920dULL,
|
||||
0x3e9a9a529aa4c829ULL, 0x0b262698262dbe4cULL, 0xbf3232c8328dfa64ULL, 0x59b0b0fab0e94a7dULL,
|
||||
0xf2e9e983e91b6acfULL, 0x770f0f3c0f78331eULL, 0x33d5d573d5e6a6b7ULL, 0xf480803a8074ba1dULL,
|
||||
0x27bebec2be997c61ULL, 0xebcdcd13cd26de87ULL, 0x893434d034bde468ULL, 0x3248483d487a7590ULL,
|
||||
0x54ffffdbffab24e3ULL, 0x8d7a7af57af78ff4ULL, 0x6490907a90f4ea3dULL, 0x9d5f5f615fc23ebeULL,
|
||||
0x3d202080201da040ULL, 0x0f6868bd6867d5d0ULL, 0xca1a1a681ad07234ULL, 0xb7aeae82ae192c41ULL,
|
||||
0x7db4b4eab4c95e75ULL, 0xce54544d549a19a8ULL, 0x7f93937693ece53bULL, 0x2f222288220daa44ULL,
|
||||
0x6364648d6407e9c8ULL, 0x2af1f1e3f1db12ffULL, 0xcc7373d173bfa2e6ULL, 0x8212124812905a24ULL,
|
||||
0x7a40401d403a5d80ULL, 0x4808082008402810ULL, 0x95c3c32bc356e89bULL, 0xdfecec97ec337bc5ULL,
|
||||
0x4ddbdb4bdb9690abULL, 0xc0a1a1bea1611f5fULL, 0x918d8d0e8d1c8307ULL, 0xc83d3df43df5c97aULL,
|
||||
0x5b97976697ccf133ULL, 0x0000000000000000ULL, 0xf9cfcf1bcf36d483ULL, 0x6e2b2bac2b458756ULL,
|
||||
0xe17676c57697b3ecULL, 0xe68282328264b019ULL, 0x28d6d67fd6fea9b1ULL, 0xc31b1b6c1bd87736ULL,
|
||||
0x74b5b5eeb5c15b77ULL, 0xbeafaf86af112943ULL, 0x1d6a6ab56a77dfd4ULL, 0xea50505d50ba0da0ULL,
|
||||
0x5745450945124c8aULL, 0x38f3f3ebf3cb18fbULL, 0xad3030c0309df060ULL, 0xc4efef9bef2b74c3ULL,
|
||||
0xda3f3ffc3fe5c37eULL, 0xc755554955921caaULL, 0xdba2a2b2a2791059ULL, 0xe9eaea8fea0365c9ULL,
|
||||
0x6a656589650feccaULL, 0x03babad2bab96869ULL, 0x4a2f2fbc2f65935eULL, 0x8ec0c027c04ee79dULL,
|
||||
0x60dede5fdebe81a1ULL, 0xfc1c1c701ce06c38ULL, 0x46fdfdd3fdbb2ee7ULL, 0x1f4d4d294d52649aULL,
|
||||
0x7692927292e4e039ULL, 0xfa7575c9758fbceaULL, 0x3606061806301e0cULL, 0xae8a8a128a249809ULL,
|
||||
0x4bb2b2f2b2f94079ULL, 0x85e6e6bfe66359d1ULL, 0x7e0e0e380e70361cULL, 0xe71f1f7c1ff8633eULL,
|
||||
0x556262956237f7c4ULL, 0x3ad4d477d4eea3b5ULL, 0x81a8a89aa829324dULL, 0x5296966296c4f431ULL,
|
||||
0x62f9f9c3f99b3aefULL, 0xa3c5c533c566f697ULL, 0x102525942535b14aULL, 0xab59597959f220b2ULL,
|
||||
0xd084842a8454ae15ULL, 0xc57272d572b7a7e4ULL, 0xec3939e439d5dd72ULL, 0x164c4c2d4c5a6198ULL,
|
||||
0x945e5e655eca3bbcULL, 0x9f7878fd78e785f0ULL, 0xe53838e038ddd870ULL, 0x988c8c0a8c148605ULL,
|
||||
0x17d1d163d1c6b2bfULL, 0xe4a5a5aea5410b57ULL, 0xa1e2e2afe2434dd9ULL, 0x4e616199612ff8c2ULL,
|
||||
0x42b3b3f6b3f1457bULL, 0x342121842115a542ULL, 0x089c9c4a9c94d625ULL, 0xee1e1e781ef0663cULL,
|
||||
0x6143431143225286ULL, 0xb1c7c73bc776fc93ULL, 0x4ffcfcd7fcb32be5ULL, 0x2404041004201408ULL,
|
||||
0xe351515951b208a2ULL, 0x2599995e99bcc72fULL, 0x226d6da96d4fc4daULL, 0x650d0d340d68391aULL,
|
||||
0x79fafacffa8335e9ULL, 0x69dfdf5bdfb684a3ULL, 0xa97e7ee57ed79bfcULL, 0x19242490243db448ULL,
|
||||
0xfe3b3bec3bc5d776ULL, 0x9aabab96ab313d4bULL, 0xf0cece1fce3ed181ULL, 0x9911114411885522ULL,
|
||||
0x838f8f068f0c8903ULL, 0x044e4e254e4a6b9cULL, 0x66b7b7e6b7d15173ULL, 0xe0ebeb8beb0b60cbULL,
|
||||
0xc13c3cf03cfdcc78ULL, 0xfd81813e817cbf1fULL, 0x4094946a94d4fe35ULL, 0x1cf7f7fbf7eb0cf3ULL,
|
||||
0x18b9b9deb9a1676fULL, 0x8b13134c13985f26ULL, 0x512c2cb02c7d9c58ULL, 0x05d3d36bd3d6b8bbULL,
|
||||
0x8ce7e7bbe76b5cd3ULL, 0x396e6ea56e57cbdcULL, 0xaac4c437c46ef395ULL, 0x1b03030c03180f06ULL,
|
||||
0xdc565645568a13acULL, 0x5e44440d441a4988ULL, 0xa07f7fe17fdf9efeULL, 0x88a9a99ea921374fULL,
|
||||
0x672a2aa82a4d8254ULL, 0x0abbbbd6bbb16d6bULL, 0x87c1c123c146e29fULL, 0xf153535153a202a6ULL,
|
||||
0x72dcdc57dcae8ba5ULL, 0x530b0b2c0b582716ULL, 0x019d9d4e9d9cd327ULL, 0x2b6c6cad6c47c1d8ULL,
|
||||
0xa43131c43195f562ULL, 0xf37474cd7487b9e8ULL, 0x15f6f6fff6e309f1ULL, 0x4c464605460a438cULL,
|
||||
0xa5acac8aac092645ULL, 0xb589891e893c970fULL, 0xb414145014a04428ULL, 0xbae1e1a3e15b42dfULL,
|
||||
0xa616165816b04e2cULL, 0xf73a3ae83acdd274ULL, 0x066969b9696fd0d2ULL, 0x4109092409482d12ULL,
|
||||
0xd77070dd70a7ade0ULL, 0x6fb6b6e2b6d95471ULL, 0x1ed0d067d0ceb7bdULL, 0xd6eded93ed3b7ec7ULL,
|
||||
0xe2cccc17cc2edb85ULL, 0x68424215422a5784ULL, 0x2c98985a98b4c22dULL, 0xeda4a4aaa4490e55ULL,
|
||||
0x752828a0285d8850ULL, 0x865c5c6d5cda31b8ULL, 0x6bf8f8c7f8933fedULL, 0xc28686228644a411ULL,
|
||||
};
|
||||
|
||||
static __const mutils_word64 C2[256] =
|
||||
{
|
||||
0x30d818186018c078ULL, 0x462623238c2305afULL, 0x91b8c6c63fc67ef9ULL, 0xcdfbe8e887e8136fULL,
|
||||
0x13cb878726874ca1ULL, 0x6d11b8b8dab8a962ULL, 0x0209010104010805ULL, 0x9e0d4f4f214f426eULL,
|
||||
0x6c9b3636d836adeeULL, 0x51ffa6a6a2a65904ULL, 0xb90cd2d26fd2debdULL, 0xf70ef5f5f3f5fb06ULL,
|
||||
0xf2967979f979ef80ULL, 0xde306f6fa16f5fceULL, 0x3f6d91917e91fcefULL, 0xa4f852525552aa07ULL,
|
||||
0xc04760609d6027fdULL, 0x6535bcbccabc8976ULL, 0x2b379b9b569baccdULL, 0x018a8e8e028e048cULL,
|
||||
0x5bd2a3a3b6a37115ULL, 0x186c0c0c300c603cULL, 0xf6847b7bf17bff8aULL, 0x6a803535d435b5e1ULL,
|
||||
0x3af51d1d741de869ULL, 0xddb3e0e0a7e05347ULL, 0xb321d7d77bd7f6acULL, 0x999cc2c22fc25eedULL,
|
||||
0x5c432e2eb82e6d96ULL, 0x96294b4b314b627aULL, 0xe15dfefedffea321ULL, 0xaed5575741578216ULL,
|
||||
0x2abd15155415a841ULL, 0xeee87777c1779fb6ULL, 0x6e923737dc37a5ebULL, 0xd79ee5e5b3e57b56ULL,
|
||||
0x23139f9f469f8cd9ULL, 0xfd23f0f0e7f0d317ULL, 0x94204a4a354a6a7fULL, 0xa944dada4fda9e95ULL,
|
||||
0xb0a258587d58fa25ULL, 0x8fcfc9c903c906caULL, 0x527c2929a429558dULL, 0x145a0a0a280a5022ULL,
|
||||
0x7f50b1b1feb1e14fULL, 0x5dc9a0a0baa0691aULL, 0xd6146b6bb16b7fdaULL, 0x17d985852e855cabULL,
|
||||
0x673cbdbdcebd8173ULL, 0xba8f5d5d695dd234ULL, 0x2090101040108050ULL, 0xf507f4f4f7f4f303ULL,
|
||||
0x8bddcbcb0bcb16c0ULL, 0x7cd33e3ef83eedc6ULL, 0x0a2d050514052811ULL, 0xce78676781671fe6ULL,
|
||||
0xd597e4e4b7e47353ULL, 0x4e0227279c2725bbULL, 0x8273414119413258ULL, 0x0ba78b8b168b2c9dULL,
|
||||
0x53f6a7a7a6a75101ULL, 0xfab27d7de97dcf94ULL, 0x374995956e95dcfbULL, 0xad56d8d847d88e9fULL,
|
||||
0xeb70fbfbcbfb8b30ULL, 0xc1cdeeee9fee2371ULL, 0xf8bb7c7ced7cc791ULL, 0xcc716666856617e3ULL,
|
||||
0xa77bdddd53dda68eULL, 0x2eaf17175c17b84bULL, 0x8e45474701470246ULL, 0x211a9e9e429e84dcULL,
|
||||
0x89d4caca0fca1ec5ULL, 0x5a582d2db42d7599ULL, 0x632ebfbfc6bf9179ULL, 0x0e3f07071c07381bULL,
|
||||
0x47acadad8ead0123ULL, 0xb4b05a5a755aea2fULL, 0x1bef838336836cb5ULL, 0x66b63333cc3385ffULL,
|
||||
0xc65c636391633ff2ULL, 0x041202020802100aULL, 0x4993aaaa92aa3938ULL, 0xe2de7171d971afa8ULL,
|
||||
0x8dc6c8c807c80ecfULL, 0x32d119196419c87dULL, 0x923b494939497270ULL, 0xaf5fd9d943d9869aULL,
|
||||
0xf931f2f2eff2c31dULL, 0xdba8e3e3abe34b48ULL, 0xb6b95b5b715be22aULL, 0x0dbc88881a883492ULL,
|
||||
0x293e9a9a529aa4c8ULL, 0x4c0b262698262dbeULL, 0x64bf3232c8328dfaULL, 0x7d59b0b0fab0e94aULL,
|
||||
0xcff2e9e983e91b6aULL, 0x1e770f0f3c0f7833ULL, 0xb733d5d573d5e6a6ULL, 0x1df480803a8074baULL,
|
||||
0x6127bebec2be997cULL, 0x87ebcdcd13cd26deULL, 0x68893434d034bde4ULL, 0x903248483d487a75ULL,
|
||||
0xe354ffffdbffab24ULL, 0xf48d7a7af57af78fULL, 0x3d6490907a90f4eaULL, 0xbe9d5f5f615fc23eULL,
|
||||
0x403d202080201da0ULL, 0xd00f6868bd6867d5ULL, 0x34ca1a1a681ad072ULL, 0x41b7aeae82ae192cULL,
|
||||
0x757db4b4eab4c95eULL, 0xa8ce54544d549a19ULL, 0x3b7f93937693ece5ULL, 0x442f222288220daaULL,
|
||||
0xc86364648d6407e9ULL, 0xff2af1f1e3f1db12ULL, 0xe6cc7373d173bfa2ULL, 0x248212124812905aULL,
|
||||
0x807a40401d403a5dULL, 0x1048080820084028ULL, 0x9b95c3c32bc356e8ULL, 0xc5dfecec97ec337bULL,
|
||||
0xab4ddbdb4bdb9690ULL, 0x5fc0a1a1bea1611fULL, 0x07918d8d0e8d1c83ULL, 0x7ac83d3df43df5c9ULL,
|
||||
0x335b97976697ccf1ULL, 0x0000000000000000ULL, 0x83f9cfcf1bcf36d4ULL, 0x566e2b2bac2b4587ULL,
|
||||
0xece17676c57697b3ULL, 0x19e68282328264b0ULL, 0xb128d6d67fd6fea9ULL, 0x36c31b1b6c1bd877ULL,
|
||||
0x7774b5b5eeb5c15bULL, 0x43beafaf86af1129ULL, 0xd41d6a6ab56a77dfULL, 0xa0ea50505d50ba0dULL,
|
||||
0x8a5745450945124cULL, 0xfb38f3f3ebf3cb18ULL, 0x60ad3030c0309df0ULL, 0xc3c4efef9bef2b74ULL,
|
||||
0x7eda3f3ffc3fe5c3ULL, 0xaac755554955921cULL, 0x59dba2a2b2a27910ULL, 0xc9e9eaea8fea0365ULL,
|
||||
0xca6a656589650fecULL, 0x6903babad2bab968ULL, 0x5e4a2f2fbc2f6593ULL, 0x9d8ec0c027c04ee7ULL,
|
||||
0xa160dede5fdebe81ULL, 0x38fc1c1c701ce06cULL, 0xe746fdfdd3fdbb2eULL, 0x9a1f4d4d294d5264ULL,
|
||||
0x397692927292e4e0ULL, 0xeafa7575c9758fbcULL, 0x0c3606061806301eULL, 0x09ae8a8a128a2498ULL,
|
||||
0x794bb2b2f2b2f940ULL, 0xd185e6e6bfe66359ULL, 0x1c7e0e0e380e7036ULL, 0x3ee71f1f7c1ff863ULL,
|
||||
0xc4556262956237f7ULL, 0xb53ad4d477d4eea3ULL, 0x4d81a8a89aa82932ULL, 0x315296966296c4f4ULL,
|
||||
0xef62f9f9c3f99b3aULL, 0x97a3c5c533c566f6ULL, 0x4a102525942535b1ULL, 0xb2ab59597959f220ULL,
|
||||
0x15d084842a8454aeULL, 0xe4c57272d572b7a7ULL, 0x72ec3939e439d5ddULL, 0x98164c4c2d4c5a61ULL,
|
||||
0xbc945e5e655eca3bULL, 0xf09f7878fd78e785ULL, 0x70e53838e038ddd8ULL, 0x05988c8c0a8c1486ULL,
|
||||
0xbf17d1d163d1c6b2ULL, 0x57e4a5a5aea5410bULL, 0xd9a1e2e2afe2434dULL, 0xc24e616199612ff8ULL,
|
||||
0x7b42b3b3f6b3f145ULL, 0x42342121842115a5ULL, 0x25089c9c4a9c94d6ULL, 0x3cee1e1e781ef066ULL,
|
||||
0x8661434311432252ULL, 0x93b1c7c73bc776fcULL, 0xe54ffcfcd7fcb32bULL, 0x0824040410042014ULL,
|
||||
0xa2e351515951b208ULL, 0x2f2599995e99bcc7ULL, 0xda226d6da96d4fc4ULL, 0x1a650d0d340d6839ULL,
|
||||
0xe979fafacffa8335ULL, 0xa369dfdf5bdfb684ULL, 0xfca97e7ee57ed79bULL, 0x4819242490243db4ULL,
|
||||
0x76fe3b3bec3bc5d7ULL, 0x4b9aabab96ab313dULL, 0x81f0cece1fce3ed1ULL, 0x2299111144118855ULL,
|
||||
0x03838f8f068f0c89ULL, 0x9c044e4e254e4a6bULL, 0x7366b7b7e6b7d151ULL, 0xcbe0ebeb8beb0b60ULL,
|
||||
0x78c13c3cf03cfdccULL, 0x1ffd81813e817cbfULL, 0x354094946a94d4feULL, 0xf31cf7f7fbf7eb0cULL,
|
||||
0x6f18b9b9deb9a167ULL, 0x268b13134c13985fULL, 0x58512c2cb02c7d9cULL, 0xbb05d3d36bd3d6b8ULL,
|
||||
0xd38ce7e7bbe76b5cULL, 0xdc396e6ea56e57cbULL, 0x95aac4c437c46ef3ULL, 0x061b03030c03180fULL,
|
||||
0xacdc565645568a13ULL, 0x885e44440d441a49ULL, 0xfea07f7fe17fdf9eULL, 0x4f88a9a99ea92137ULL,
|
||||
0x54672a2aa82a4d82ULL, 0x6b0abbbbd6bbb16dULL, 0x9f87c1c123c146e2ULL, 0xa6f153535153a202ULL,
|
||||
0xa572dcdc57dcae8bULL, 0x16530b0b2c0b5827ULL, 0x27019d9d4e9d9cd3ULL, 0xd82b6c6cad6c47c1ULL,
|
||||
0x62a43131c43195f5ULL, 0xe8f37474cd7487b9ULL, 0xf115f6f6fff6e309ULL, 0x8c4c464605460a43ULL,
|
||||
0x45a5acac8aac0926ULL, 0x0fb589891e893c97ULL, 0x28b414145014a044ULL, 0xdfbae1e1a3e15b42ULL,
|
||||
0x2ca616165816b04eULL, 0x74f73a3ae83acdd2ULL, 0xd2066969b9696fd0ULL, 0x124109092409482dULL,
|
||||
0xe0d77070dd70a7adULL, 0x716fb6b6e2b6d954ULL, 0xbd1ed0d067d0ceb7ULL, 0xc7d6eded93ed3b7eULL,
|
||||
0x85e2cccc17cc2edbULL, 0x8468424215422a57ULL, 0x2d2c98985a98b4c2ULL, 0x55eda4a4aaa4490eULL,
|
||||
0x50752828a0285d88ULL, 0xb8865c5c6d5cda31ULL, 0xed6bf8f8c7f8933fULL, 0x11c28686228644a4ULL,
|
||||
};
|
||||
|
||||
static __const mutils_word64 C3[256] =
|
||||
{
|
||||
0x7830d818186018c0ULL, 0xaf462623238c2305ULL, 0xf991b8c6c63fc67eULL, 0x6fcdfbe8e887e813ULL,
|
||||
0xa113cb878726874cULL, 0x626d11b8b8dab8a9ULL, 0x0502090101040108ULL, 0x6e9e0d4f4f214f42ULL,
|
||||
0xee6c9b3636d836adULL, 0x0451ffa6a6a2a659ULL, 0xbdb90cd2d26fd2deULL, 0x06f70ef5f5f3f5fbULL,
|
||||
0x80f2967979f979efULL, 0xcede306f6fa16f5fULL, 0xef3f6d91917e91fcULL, 0x07a4f852525552aaULL,
|
||||
0xfdc04760609d6027ULL, 0x766535bcbccabc89ULL, 0xcd2b379b9b569bacULL, 0x8c018a8e8e028e04ULL,
|
||||
0x155bd2a3a3b6a371ULL, 0x3c186c0c0c300c60ULL, 0x8af6847b7bf17bffULL, 0xe16a803535d435b5ULL,
|
||||
0x693af51d1d741de8ULL, 0x47ddb3e0e0a7e053ULL, 0xacb321d7d77bd7f6ULL, 0xed999cc2c22fc25eULL,
|
||||
0x965c432e2eb82e6dULL, 0x7a96294b4b314b62ULL, 0x21e15dfefedffea3ULL, 0x16aed55757415782ULL,
|
||||
0x412abd15155415a8ULL, 0xb6eee87777c1779fULL, 0xeb6e923737dc37a5ULL, 0x56d79ee5e5b3e57bULL,
|
||||
0xd923139f9f469f8cULL, 0x17fd23f0f0e7f0d3ULL, 0x7f94204a4a354a6aULL, 0x95a944dada4fda9eULL,
|
||||
0x25b0a258587d58faULL, 0xca8fcfc9c903c906ULL, 0x8d527c2929a42955ULL, 0x22145a0a0a280a50ULL,
|
||||
0x4f7f50b1b1feb1e1ULL, 0x1a5dc9a0a0baa069ULL, 0xdad6146b6bb16b7fULL, 0xab17d985852e855cULL,
|
||||
0x73673cbdbdcebd81ULL, 0x34ba8f5d5d695dd2ULL, 0x5020901010401080ULL, 0x03f507f4f4f7f4f3ULL,
|
||||
0xc08bddcbcb0bcb16ULL, 0xc67cd33e3ef83eedULL, 0x110a2d0505140528ULL, 0xe6ce78676781671fULL,
|
||||
0x53d597e4e4b7e473ULL, 0xbb4e0227279c2725ULL, 0x5882734141194132ULL, 0x9d0ba78b8b168b2cULL,
|
||||
0x0153f6a7a7a6a751ULL, 0x94fab27d7de97dcfULL, 0xfb374995956e95dcULL, 0x9fad56d8d847d88eULL,
|
||||
0x30eb70fbfbcbfb8bULL, 0x71c1cdeeee9fee23ULL, 0x91f8bb7c7ced7cc7ULL, 0xe3cc716666856617ULL,
|
||||
0x8ea77bdddd53dda6ULL, 0x4b2eaf17175c17b8ULL, 0x468e454747014702ULL, 0xdc211a9e9e429e84ULL,
|
||||
0xc589d4caca0fca1eULL, 0x995a582d2db42d75ULL, 0x79632ebfbfc6bf91ULL, 0x1b0e3f07071c0738ULL,
|
||||
0x2347acadad8ead01ULL, 0x2fb4b05a5a755aeaULL, 0xb51bef838336836cULL, 0xff66b63333cc3385ULL,
|
||||
0xf2c65c636391633fULL, 0x0a04120202080210ULL, 0x384993aaaa92aa39ULL, 0xa8e2de7171d971afULL,
|
||||
0xcf8dc6c8c807c80eULL, 0x7d32d119196419c8ULL, 0x70923b4949394972ULL, 0x9aaf5fd9d943d986ULL,
|
||||
0x1df931f2f2eff2c3ULL, 0x48dba8e3e3abe34bULL, 0x2ab6b95b5b715be2ULL, 0x920dbc88881a8834ULL,
|
||||
0xc8293e9a9a529aa4ULL, 0xbe4c0b262698262dULL, 0xfa64bf3232c8328dULL, 0x4a7d59b0b0fab0e9ULL,
|
||||
0x6acff2e9e983e91bULL, 0x331e770f0f3c0f78ULL, 0xa6b733d5d573d5e6ULL, 0xba1df480803a8074ULL,
|
||||
0x7c6127bebec2be99ULL, 0xde87ebcdcd13cd26ULL, 0xe468893434d034bdULL, 0x75903248483d487aULL,
|
||||
0x24e354ffffdbffabULL, 0x8ff48d7a7af57af7ULL, 0xea3d6490907a90f4ULL, 0x3ebe9d5f5f615fc2ULL,
|
||||
0xa0403d202080201dULL, 0xd5d00f6868bd6867ULL, 0x7234ca1a1a681ad0ULL, 0x2c41b7aeae82ae19ULL,
|
||||
0x5e757db4b4eab4c9ULL, 0x19a8ce54544d549aULL, 0xe53b7f93937693ecULL, 0xaa442f222288220dULL,
|
||||
0xe9c86364648d6407ULL, 0x12ff2af1f1e3f1dbULL, 0xa2e6cc7373d173bfULL, 0x5a24821212481290ULL,
|
||||
0x5d807a40401d403aULL, 0x2810480808200840ULL, 0xe89b95c3c32bc356ULL, 0x7bc5dfecec97ec33ULL,
|
||||
0x90ab4ddbdb4bdb96ULL, 0x1f5fc0a1a1bea161ULL, 0x8307918d8d0e8d1cULL, 0xc97ac83d3df43df5ULL,
|
||||
0xf1335b97976697ccULL, 0x0000000000000000ULL, 0xd483f9cfcf1bcf36ULL, 0x87566e2b2bac2b45ULL,
|
||||
0xb3ece17676c57697ULL, 0xb019e68282328264ULL, 0xa9b128d6d67fd6feULL, 0x7736c31b1b6c1bd8ULL,
|
||||
0x5b7774b5b5eeb5c1ULL, 0x2943beafaf86af11ULL, 0xdfd41d6a6ab56a77ULL, 0x0da0ea50505d50baULL,
|
||||
0x4c8a574545094512ULL, 0x18fb38f3f3ebf3cbULL, 0xf060ad3030c0309dULL, 0x74c3c4efef9bef2bULL,
|
||||
0xc37eda3f3ffc3fe5ULL, 0x1caac75555495592ULL, 0x1059dba2a2b2a279ULL, 0x65c9e9eaea8fea03ULL,
|
||||
0xecca6a656589650fULL, 0x686903babad2bab9ULL, 0x935e4a2f2fbc2f65ULL, 0xe79d8ec0c027c04eULL,
|
||||
0x81a160dede5fdebeULL, 0x6c38fc1c1c701ce0ULL, 0x2ee746fdfdd3fdbbULL, 0x649a1f4d4d294d52ULL,
|
||||
0xe0397692927292e4ULL, 0xbceafa7575c9758fULL, 0x1e0c360606180630ULL, 0x9809ae8a8a128a24ULL,
|
||||
0x40794bb2b2f2b2f9ULL, 0x59d185e6e6bfe663ULL, 0x361c7e0e0e380e70ULL, 0x633ee71f1f7c1ff8ULL,
|
||||
0xf7c4556262956237ULL, 0xa3b53ad4d477d4eeULL, 0x324d81a8a89aa829ULL, 0xf4315296966296c4ULL,
|
||||
0x3aef62f9f9c3f99bULL, 0xf697a3c5c533c566ULL, 0xb14a102525942535ULL, 0x20b2ab59597959f2ULL,
|
||||
0xae15d084842a8454ULL, 0xa7e4c57272d572b7ULL, 0xdd72ec3939e439d5ULL, 0x6198164c4c2d4c5aULL,
|
||||
0x3bbc945e5e655ecaULL, 0x85f09f7878fd78e7ULL, 0xd870e53838e038ddULL, 0x8605988c8c0a8c14ULL,
|
||||
0xb2bf17d1d163d1c6ULL, 0x0b57e4a5a5aea541ULL, 0x4dd9a1e2e2afe243ULL, 0xf8c24e616199612fULL,
|
||||
0x457b42b3b3f6b3f1ULL, 0xa542342121842115ULL, 0xd625089c9c4a9c94ULL, 0x663cee1e1e781ef0ULL,
|
||||
0x5286614343114322ULL, 0xfc93b1c7c73bc776ULL, 0x2be54ffcfcd7fcb3ULL, 0x1408240404100420ULL,
|
||||
0x08a2e351515951b2ULL, 0xc72f2599995e99bcULL, 0xc4da226d6da96d4fULL, 0x391a650d0d340d68ULL,
|
||||
0x35e979fafacffa83ULL, 0x84a369dfdf5bdfb6ULL, 0x9bfca97e7ee57ed7ULL, 0xb44819242490243dULL,
|
||||
0xd776fe3b3bec3bc5ULL, 0x3d4b9aabab96ab31ULL, 0xd181f0cece1fce3eULL, 0x5522991111441188ULL,
|
||||
0x8903838f8f068f0cULL, 0x6b9c044e4e254e4aULL, 0x517366b7b7e6b7d1ULL, 0x60cbe0ebeb8beb0bULL,
|
||||
0xcc78c13c3cf03cfdULL, 0xbf1ffd81813e817cULL, 0xfe354094946a94d4ULL, 0x0cf31cf7f7fbf7ebULL,
|
||||
0x676f18b9b9deb9a1ULL, 0x5f268b13134c1398ULL, 0x9c58512c2cb02c7dULL, 0xb8bb05d3d36bd3d6ULL,
|
||||
0x5cd38ce7e7bbe76bULL, 0xcbdc396e6ea56e57ULL, 0xf395aac4c437c46eULL, 0x0f061b03030c0318ULL,
|
||||
0x13acdc565645568aULL, 0x49885e44440d441aULL, 0x9efea07f7fe17fdfULL, 0x374f88a9a99ea921ULL,
|
||||
0x8254672a2aa82a4dULL, 0x6d6b0abbbbd6bbb1ULL, 0xe29f87c1c123c146ULL, 0x02a6f153535153a2ULL,
|
||||
0x8ba572dcdc57dcaeULL, 0x2716530b0b2c0b58ULL, 0xd327019d9d4e9d9cULL, 0xc1d82b6c6cad6c47ULL,
|
||||
0xf562a43131c43195ULL, 0xb9e8f37474cd7487ULL, 0x09f115f6f6fff6e3ULL, 0x438c4c464605460aULL,
|
||||
0x2645a5acac8aac09ULL, 0x970fb589891e893cULL, 0x4428b414145014a0ULL, 0x42dfbae1e1a3e15bULL,
|
||||
0x4e2ca616165816b0ULL, 0xd274f73a3ae83acdULL, 0xd0d2066969b9696fULL, 0x2d12410909240948ULL,
|
||||
0xade0d77070dd70a7ULL, 0x54716fb6b6e2b6d9ULL, 0xb7bd1ed0d067d0ceULL, 0x7ec7d6eded93ed3bULL,
|
||||
0xdb85e2cccc17cc2eULL, 0x578468424215422aULL, 0xc22d2c98985a98b4ULL, 0x0e55eda4a4aaa449ULL,
|
||||
0x8850752828a0285dULL, 0x31b8865c5c6d5cdaULL, 0x3fed6bf8f8c7f893ULL, 0xa411c28686228644ULL,
|
||||
};
|
||||
|
||||
static __const mutils_word64 C4[256] =
|
||||
{
|
||||
0xc07830d818186018ULL, 0x05af462623238c23ULL, 0x7ef991b8c6c63fc6ULL, 0x136fcdfbe8e887e8ULL,
|
||||
0x4ca113cb87872687ULL, 0xa9626d11b8b8dab8ULL, 0x0805020901010401ULL, 0x426e9e0d4f4f214fULL,
|
||||
0xadee6c9b3636d836ULL, 0x590451ffa6a6a2a6ULL, 0xdebdb90cd2d26fd2ULL, 0xfb06f70ef5f5f3f5ULL,
|
||||
0xef80f2967979f979ULL, 0x5fcede306f6fa16fULL, 0xfcef3f6d91917e91ULL, 0xaa07a4f852525552ULL,
|
||||
0x27fdc04760609d60ULL, 0x89766535bcbccabcULL, 0xaccd2b379b9b569bULL, 0x048c018a8e8e028eULL,
|
||||
0x71155bd2a3a3b6a3ULL, 0x603c186c0c0c300cULL, 0xff8af6847b7bf17bULL, 0xb5e16a803535d435ULL,
|
||||
0xe8693af51d1d741dULL, 0x5347ddb3e0e0a7e0ULL, 0xf6acb321d7d77bd7ULL, 0x5eed999cc2c22fc2ULL,
|
||||
0x6d965c432e2eb82eULL, 0x627a96294b4b314bULL, 0xa321e15dfefedffeULL, 0x8216aed557574157ULL,
|
||||
0xa8412abd15155415ULL, 0x9fb6eee87777c177ULL, 0xa5eb6e923737dc37ULL, 0x7b56d79ee5e5b3e5ULL,
|
||||
0x8cd923139f9f469fULL, 0xd317fd23f0f0e7f0ULL, 0x6a7f94204a4a354aULL, 0x9e95a944dada4fdaULL,
|
||||
0xfa25b0a258587d58ULL, 0x06ca8fcfc9c903c9ULL, 0x558d527c2929a429ULL, 0x5022145a0a0a280aULL,
|
||||
0xe14f7f50b1b1feb1ULL, 0x691a5dc9a0a0baa0ULL, 0x7fdad6146b6bb16bULL, 0x5cab17d985852e85ULL,
|
||||
0x8173673cbdbdcebdULL, 0xd234ba8f5d5d695dULL, 0x8050209010104010ULL, 0xf303f507f4f4f7f4ULL,
|
||||
0x16c08bddcbcb0bcbULL, 0xedc67cd33e3ef83eULL, 0x28110a2d05051405ULL, 0x1fe6ce7867678167ULL,
|
||||
0x7353d597e4e4b7e4ULL, 0x25bb4e0227279c27ULL, 0x3258827341411941ULL, 0x2c9d0ba78b8b168bULL,
|
||||
0x510153f6a7a7a6a7ULL, 0xcf94fab27d7de97dULL, 0xdcfb374995956e95ULL, 0x8e9fad56d8d847d8ULL,
|
||||
0x8b30eb70fbfbcbfbULL, 0x2371c1cdeeee9feeULL, 0xc791f8bb7c7ced7cULL, 0x17e3cc7166668566ULL,
|
||||
0xa68ea77bdddd53ddULL, 0xb84b2eaf17175c17ULL, 0x02468e4547470147ULL, 0x84dc211a9e9e429eULL,
|
||||
0x1ec589d4caca0fcaULL, 0x75995a582d2db42dULL, 0x9179632ebfbfc6bfULL, 0x381b0e3f07071c07ULL,
|
||||
0x012347acadad8eadULL, 0xea2fb4b05a5a755aULL, 0x6cb51bef83833683ULL, 0x85ff66b63333cc33ULL,
|
||||
0x3ff2c65c63639163ULL, 0x100a041202020802ULL, 0x39384993aaaa92aaULL, 0xafa8e2de7171d971ULL,
|
||||
0x0ecf8dc6c8c807c8ULL, 0xc87d32d119196419ULL, 0x7270923b49493949ULL, 0x869aaf5fd9d943d9ULL,
|
||||
0xc31df931f2f2eff2ULL, 0x4b48dba8e3e3abe3ULL, 0xe22ab6b95b5b715bULL, 0x34920dbc88881a88ULL,
|
||||
0xa4c8293e9a9a529aULL, 0x2dbe4c0b26269826ULL, 0x8dfa64bf3232c832ULL, 0xe94a7d59b0b0fab0ULL,
|
||||
0x1b6acff2e9e983e9ULL, 0x78331e770f0f3c0fULL, 0xe6a6b733d5d573d5ULL, 0x74ba1df480803a80ULL,
|
||||
0x997c6127bebec2beULL, 0x26de87ebcdcd13cdULL, 0xbde468893434d034ULL, 0x7a75903248483d48ULL,
|
||||
0xab24e354ffffdbffULL, 0xf78ff48d7a7af57aULL, 0xf4ea3d6490907a90ULL, 0xc23ebe9d5f5f615fULL,
|
||||
0x1da0403d20208020ULL, 0x67d5d00f6868bd68ULL, 0xd07234ca1a1a681aULL, 0x192c41b7aeae82aeULL,
|
||||
0xc95e757db4b4eab4ULL, 0x9a19a8ce54544d54ULL, 0xece53b7f93937693ULL, 0x0daa442f22228822ULL,
|
||||
0x07e9c86364648d64ULL, 0xdb12ff2af1f1e3f1ULL, 0xbfa2e6cc7373d173ULL, 0x905a248212124812ULL,
|
||||
0x3a5d807a40401d40ULL, 0x4028104808082008ULL, 0x56e89b95c3c32bc3ULL, 0x337bc5dfecec97ecULL,
|
||||
0x9690ab4ddbdb4bdbULL, 0x611f5fc0a1a1bea1ULL, 0x1c8307918d8d0e8dULL, 0xf5c97ac83d3df43dULL,
|
||||
0xccf1335b97976697ULL, 0x0000000000000000ULL, 0x36d483f9cfcf1bcfULL, 0x4587566e2b2bac2bULL,
|
||||
0x97b3ece17676c576ULL, 0x64b019e682823282ULL, 0xfea9b128d6d67fd6ULL, 0xd87736c31b1b6c1bULL,
|
||||
0xc15b7774b5b5eeb5ULL, 0x112943beafaf86afULL, 0x77dfd41d6a6ab56aULL, 0xba0da0ea50505d50ULL,
|
||||
0x124c8a5745450945ULL, 0xcb18fb38f3f3ebf3ULL, 0x9df060ad3030c030ULL, 0x2b74c3c4efef9befULL,
|
||||
0xe5c37eda3f3ffc3fULL, 0x921caac755554955ULL, 0x791059dba2a2b2a2ULL, 0x0365c9e9eaea8feaULL,
|
||||
0x0fecca6a65658965ULL, 0xb9686903babad2baULL, 0x65935e4a2f2fbc2fULL, 0x4ee79d8ec0c027c0ULL,
|
||||
0xbe81a160dede5fdeULL, 0xe06c38fc1c1c701cULL, 0xbb2ee746fdfdd3fdULL, 0x52649a1f4d4d294dULL,
|
||||
0xe4e0397692927292ULL, 0x8fbceafa7575c975ULL, 0x301e0c3606061806ULL, 0x249809ae8a8a128aULL,
|
||||
0xf940794bb2b2f2b2ULL, 0x6359d185e6e6bfe6ULL, 0x70361c7e0e0e380eULL, 0xf8633ee71f1f7c1fULL,
|
||||
0x37f7c45562629562ULL, 0xeea3b53ad4d477d4ULL, 0x29324d81a8a89aa8ULL, 0xc4f4315296966296ULL,
|
||||
0x9b3aef62f9f9c3f9ULL, 0x66f697a3c5c533c5ULL, 0x35b14a1025259425ULL, 0xf220b2ab59597959ULL,
|
||||
0x54ae15d084842a84ULL, 0xb7a7e4c57272d572ULL, 0xd5dd72ec3939e439ULL, 0x5a6198164c4c2d4cULL,
|
||||
0xca3bbc945e5e655eULL, 0xe785f09f7878fd78ULL, 0xddd870e53838e038ULL, 0x148605988c8c0a8cULL,
|
||||
0xc6b2bf17d1d163d1ULL, 0x410b57e4a5a5aea5ULL, 0x434dd9a1e2e2afe2ULL, 0x2ff8c24e61619961ULL,
|
||||
0xf1457b42b3b3f6b3ULL, 0x15a5423421218421ULL, 0x94d625089c9c4a9cULL, 0xf0663cee1e1e781eULL,
|
||||
0x2252866143431143ULL, 0x76fc93b1c7c73bc7ULL, 0xb32be54ffcfcd7fcULL, 0x2014082404041004ULL,
|
||||
0xb208a2e351515951ULL, 0xbcc72f2599995e99ULL, 0x4fc4da226d6da96dULL, 0x68391a650d0d340dULL,
|
||||
0x8335e979fafacffaULL, 0xb684a369dfdf5bdfULL, 0xd79bfca97e7ee57eULL, 0x3db4481924249024ULL,
|
||||
0xc5d776fe3b3bec3bULL, 0x313d4b9aabab96abULL, 0x3ed181f0cece1fceULL, 0x8855229911114411ULL,
|
||||
0x0c8903838f8f068fULL, 0x4a6b9c044e4e254eULL, 0xd1517366b7b7e6b7ULL, 0x0b60cbe0ebeb8bebULL,
|
||||
0xfdcc78c13c3cf03cULL, 0x7cbf1ffd81813e81ULL, 0xd4fe354094946a94ULL, 0xeb0cf31cf7f7fbf7ULL,
|
||||
0xa1676f18b9b9deb9ULL, 0x985f268b13134c13ULL, 0x7d9c58512c2cb02cULL, 0xd6b8bb05d3d36bd3ULL,
|
||||
0x6b5cd38ce7e7bbe7ULL, 0x57cbdc396e6ea56eULL, 0x6ef395aac4c437c4ULL, 0x180f061b03030c03ULL,
|
||||
0x8a13acdc56564556ULL, 0x1a49885e44440d44ULL, 0xdf9efea07f7fe17fULL, 0x21374f88a9a99ea9ULL,
|
||||
0x4d8254672a2aa82aULL, 0xb16d6b0abbbbd6bbULL, 0x46e29f87c1c123c1ULL, 0xa202a6f153535153ULL,
|
||||
0xae8ba572dcdc57dcULL, 0x582716530b0b2c0bULL, 0x9cd327019d9d4e9dULL, 0x47c1d82b6c6cad6cULL,
|
||||
0x95f562a43131c431ULL, 0x87b9e8f37474cd74ULL, 0xe309f115f6f6fff6ULL, 0x0a438c4c46460546ULL,
|
||||
0x092645a5acac8aacULL, 0x3c970fb589891e89ULL, 0xa04428b414145014ULL, 0x5b42dfbae1e1a3e1ULL,
|
||||
0xb04e2ca616165816ULL, 0xcdd274f73a3ae83aULL, 0x6fd0d2066969b969ULL, 0x482d124109092409ULL,
|
||||
0xa7ade0d77070dd70ULL, 0xd954716fb6b6e2b6ULL, 0xceb7bd1ed0d067d0ULL, 0x3b7ec7d6eded93edULL,
|
||||
0x2edb85e2cccc17ccULL, 0x2a57846842421542ULL, 0xb4c22d2c98985a98ULL, 0x490e55eda4a4aaa4ULL,
|
||||
0x5d8850752828a028ULL, 0xda31b8865c5c6d5cULL, 0x933fed6bf8f8c7f8ULL, 0x44a411c286862286ULL,
|
||||
};
|
||||
|
||||
static __const mutils_word64 C5[256] =
|
||||
{
|
||||
0x18c07830d8181860ULL, 0x2305af462623238cULL, 0xc67ef991b8c6c63fULL, 0xe8136fcdfbe8e887ULL,
|
||||
0x874ca113cb878726ULL, 0xb8a9626d11b8b8daULL, 0x0108050209010104ULL, 0x4f426e9e0d4f4f21ULL,
|
||||
0x36adee6c9b3636d8ULL, 0xa6590451ffa6a6a2ULL, 0xd2debdb90cd2d26fULL, 0xf5fb06f70ef5f5f3ULL,
|
||||
0x79ef80f2967979f9ULL, 0x6f5fcede306f6fa1ULL, 0x91fcef3f6d91917eULL, 0x52aa07a4f8525255ULL,
|
||||
0x6027fdc04760609dULL, 0xbc89766535bcbccaULL, 0x9baccd2b379b9b56ULL, 0x8e048c018a8e8e02ULL,
|
||||
0xa371155bd2a3a3b6ULL, 0x0c603c186c0c0c30ULL, 0x7bff8af6847b7bf1ULL, 0x35b5e16a803535d4ULL,
|
||||
0x1de8693af51d1d74ULL, 0xe05347ddb3e0e0a7ULL, 0xd7f6acb321d7d77bULL, 0xc25eed999cc2c22fULL,
|
||||
0x2e6d965c432e2eb8ULL, 0x4b627a96294b4b31ULL, 0xfea321e15dfefedfULL, 0x578216aed5575741ULL,
|
||||
0x15a8412abd151554ULL, 0x779fb6eee87777c1ULL, 0x37a5eb6e923737dcULL, 0xe57b56d79ee5e5b3ULL,
|
||||
0x9f8cd923139f9f46ULL, 0xf0d317fd23f0f0e7ULL, 0x4a6a7f94204a4a35ULL, 0xda9e95a944dada4fULL,
|
||||
0x58fa25b0a258587dULL, 0xc906ca8fcfc9c903ULL, 0x29558d527c2929a4ULL, 0x0a5022145a0a0a28ULL,
|
||||
0xb1e14f7f50b1b1feULL, 0xa0691a5dc9a0a0baULL, 0x6b7fdad6146b6bb1ULL, 0x855cab17d985852eULL,
|
||||
0xbd8173673cbdbdceULL, 0x5dd234ba8f5d5d69ULL, 0x1080502090101040ULL, 0xf4f303f507f4f4f7ULL,
|
||||
0xcb16c08bddcbcb0bULL, 0x3eedc67cd33e3ef8ULL, 0x0528110a2d050514ULL, 0x671fe6ce78676781ULL,
|
||||
0xe47353d597e4e4b7ULL, 0x2725bb4e0227279cULL, 0x4132588273414119ULL, 0x8b2c9d0ba78b8b16ULL,
|
||||
0xa7510153f6a7a7a6ULL, 0x7dcf94fab27d7de9ULL, 0x95dcfb374995956eULL, 0xd88e9fad56d8d847ULL,
|
||||
0xfb8b30eb70fbfbcbULL, 0xee2371c1cdeeee9fULL, 0x7cc791f8bb7c7cedULL, 0x6617e3cc71666685ULL,
|
||||
0xdda68ea77bdddd53ULL, 0x17b84b2eaf17175cULL, 0x4702468e45474701ULL, 0x9e84dc211a9e9e42ULL,
|
||||
0xca1ec589d4caca0fULL, 0x2d75995a582d2db4ULL, 0xbf9179632ebfbfc6ULL, 0x07381b0e3f07071cULL,
|
||||
0xad012347acadad8eULL, 0x5aea2fb4b05a5a75ULL, 0x836cb51bef838336ULL, 0x3385ff66b63333ccULL,
|
||||
0x633ff2c65c636391ULL, 0x02100a0412020208ULL, 0xaa39384993aaaa92ULL, 0x71afa8e2de7171d9ULL,
|
||||
0xc80ecf8dc6c8c807ULL, 0x19c87d32d1191964ULL, 0x497270923b494939ULL, 0xd9869aaf5fd9d943ULL,
|
||||
0xf2c31df931f2f2efULL, 0xe34b48dba8e3e3abULL, 0x5be22ab6b95b5b71ULL, 0x8834920dbc88881aULL,
|
||||
0x9aa4c8293e9a9a52ULL, 0x262dbe4c0b262698ULL, 0x328dfa64bf3232c8ULL, 0xb0e94a7d59b0b0faULL,
|
||||
0xe91b6acff2e9e983ULL, 0x0f78331e770f0f3cULL, 0xd5e6a6b733d5d573ULL, 0x8074ba1df480803aULL,
|
||||
0xbe997c6127bebec2ULL, 0xcd26de87ebcdcd13ULL, 0x34bde468893434d0ULL, 0x487a75903248483dULL,
|
||||
0xffab24e354ffffdbULL, 0x7af78ff48d7a7af5ULL, 0x90f4ea3d6490907aULL, 0x5fc23ebe9d5f5f61ULL,
|
||||
0x201da0403d202080ULL, 0x6867d5d00f6868bdULL, 0x1ad07234ca1a1a68ULL, 0xae192c41b7aeae82ULL,
|
||||
0xb4c95e757db4b4eaULL, 0x549a19a8ce54544dULL, 0x93ece53b7f939376ULL, 0x220daa442f222288ULL,
|
||||
0x6407e9c86364648dULL, 0xf1db12ff2af1f1e3ULL, 0x73bfa2e6cc7373d1ULL, 0x12905a2482121248ULL,
|
||||
0x403a5d807a40401dULL, 0x0840281048080820ULL, 0xc356e89b95c3c32bULL, 0xec337bc5dfecec97ULL,
|
||||
0xdb9690ab4ddbdb4bULL, 0xa1611f5fc0a1a1beULL, 0x8d1c8307918d8d0eULL, 0x3df5c97ac83d3df4ULL,
|
||||
0x97ccf1335b979766ULL, 0x0000000000000000ULL, 0xcf36d483f9cfcf1bULL, 0x2b4587566e2b2bacULL,
|
||||
0x7697b3ece17676c5ULL, 0x8264b019e6828232ULL, 0xd6fea9b128d6d67fULL, 0x1bd87736c31b1b6cULL,
|
||||
0xb5c15b7774b5b5eeULL, 0xaf112943beafaf86ULL, 0x6a77dfd41d6a6ab5ULL, 0x50ba0da0ea50505dULL,
|
||||
0x45124c8a57454509ULL, 0xf3cb18fb38f3f3ebULL, 0x309df060ad3030c0ULL, 0xef2b74c3c4efef9bULL,
|
||||
0x3fe5c37eda3f3ffcULL, 0x55921caac7555549ULL, 0xa2791059dba2a2b2ULL, 0xea0365c9e9eaea8fULL,
|
||||
0x650fecca6a656589ULL, 0xbab9686903babad2ULL, 0x2f65935e4a2f2fbcULL, 0xc04ee79d8ec0c027ULL,
|
||||
0xdebe81a160dede5fULL, 0x1ce06c38fc1c1c70ULL, 0xfdbb2ee746fdfdd3ULL, 0x4d52649a1f4d4d29ULL,
|
||||
0x92e4e03976929272ULL, 0x758fbceafa7575c9ULL, 0x06301e0c36060618ULL, 0x8a249809ae8a8a12ULL,
|
||||
0xb2f940794bb2b2f2ULL, 0xe66359d185e6e6bfULL, 0x0e70361c7e0e0e38ULL, 0x1ff8633ee71f1f7cULL,
|
||||
0x6237f7c455626295ULL, 0xd4eea3b53ad4d477ULL, 0xa829324d81a8a89aULL, 0x96c4f43152969662ULL,
|
||||
0xf99b3aef62f9f9c3ULL, 0xc566f697a3c5c533ULL, 0x2535b14a10252594ULL, 0x59f220b2ab595979ULL,
|
||||
0x8454ae15d084842aULL, 0x72b7a7e4c57272d5ULL, 0x39d5dd72ec3939e4ULL, 0x4c5a6198164c4c2dULL,
|
||||
0x5eca3bbc945e5e65ULL, 0x78e785f09f7878fdULL, 0x38ddd870e53838e0ULL, 0x8c148605988c8c0aULL,
|
||||
0xd1c6b2bf17d1d163ULL, 0xa5410b57e4a5a5aeULL, 0xe2434dd9a1e2e2afULL, 0x612ff8c24e616199ULL,
|
||||
0xb3f1457b42b3b3f6ULL, 0x2115a54234212184ULL, 0x9c94d625089c9c4aULL, 0x1ef0663cee1e1e78ULL,
|
||||
0x4322528661434311ULL, 0xc776fc93b1c7c73bULL, 0xfcb32be54ffcfcd7ULL, 0x0420140824040410ULL,
|
||||
0x51b208a2e3515159ULL, 0x99bcc72f2599995eULL, 0x6d4fc4da226d6da9ULL, 0x0d68391a650d0d34ULL,
|
||||
0xfa8335e979fafacfULL, 0xdfb684a369dfdf5bULL, 0x7ed79bfca97e7ee5ULL, 0x243db44819242490ULL,
|
||||
0x3bc5d776fe3b3becULL, 0xab313d4b9aabab96ULL, 0xce3ed181f0cece1fULL, 0x1188552299111144ULL,
|
||||
0x8f0c8903838f8f06ULL, 0x4e4a6b9c044e4e25ULL, 0xb7d1517366b7b7e6ULL, 0xeb0b60cbe0ebeb8bULL,
|
||||
0x3cfdcc78c13c3cf0ULL, 0x817cbf1ffd81813eULL, 0x94d4fe354094946aULL, 0xf7eb0cf31cf7f7fbULL,
|
||||
0xb9a1676f18b9b9deULL, 0x13985f268b13134cULL, 0x2c7d9c58512c2cb0ULL, 0xd3d6b8bb05d3d36bULL,
|
||||
0xe76b5cd38ce7e7bbULL, 0x6e57cbdc396e6ea5ULL, 0xc46ef395aac4c437ULL, 0x03180f061b03030cULL,
|
||||
0x568a13acdc565645ULL, 0x441a49885e44440dULL, 0x7fdf9efea07f7fe1ULL, 0xa921374f88a9a99eULL,
|
||||
0x2a4d8254672a2aa8ULL, 0xbbb16d6b0abbbbd6ULL, 0xc146e29f87c1c123ULL, 0x53a202a6f1535351ULL,
|
||||
0xdcae8ba572dcdc57ULL, 0x0b582716530b0b2cULL, 0x9d9cd327019d9d4eULL, 0x6c47c1d82b6c6cadULL,
|
||||
0x3195f562a43131c4ULL, 0x7487b9e8f37474cdULL, 0xf6e309f115f6f6ffULL, 0x460a438c4c464605ULL,
|
||||
0xac092645a5acac8aULL, 0x893c970fb589891eULL, 0x14a04428b4141450ULL, 0xe15b42dfbae1e1a3ULL,
|
||||
0x16b04e2ca6161658ULL, 0x3acdd274f73a3ae8ULL, 0x696fd0d2066969b9ULL, 0x09482d1241090924ULL,
|
||||
0x70a7ade0d77070ddULL, 0xb6d954716fb6b6e2ULL, 0xd0ceb7bd1ed0d067ULL, 0xed3b7ec7d6eded93ULL,
|
||||
0xcc2edb85e2cccc17ULL, 0x422a578468424215ULL, 0x98b4c22d2c98985aULL, 0xa4490e55eda4a4aaULL,
|
||||
0x285d8850752828a0ULL, 0x5cda31b8865c5c6dULL, 0xf8933fed6bf8f8c7ULL, 0x8644a411c2868622ULL,
|
||||
};
|
||||
|
||||
static __const mutils_word64 C6[256] =
|
||||
{
|
||||
0x6018c07830d81818ULL, 0x8c2305af46262323ULL, 0x3fc67ef991b8c6c6ULL, 0x87e8136fcdfbe8e8ULL,
|
||||
0x26874ca113cb8787ULL, 0xdab8a9626d11b8b8ULL, 0x0401080502090101ULL, 0x214f426e9e0d4f4fULL,
|
||||
0xd836adee6c9b3636ULL, 0xa2a6590451ffa6a6ULL, 0x6fd2debdb90cd2d2ULL, 0xf3f5fb06f70ef5f5ULL,
|
||||
0xf979ef80f2967979ULL, 0xa16f5fcede306f6fULL, 0x7e91fcef3f6d9191ULL, 0x5552aa07a4f85252ULL,
|
||||
0x9d6027fdc0476060ULL, 0xcabc89766535bcbcULL, 0x569baccd2b379b9bULL, 0x028e048c018a8e8eULL,
|
||||
0xb6a371155bd2a3a3ULL, 0x300c603c186c0c0cULL, 0xf17bff8af6847b7bULL, 0xd435b5e16a803535ULL,
|
||||
0x741de8693af51d1dULL, 0xa7e05347ddb3e0e0ULL, 0x7bd7f6acb321d7d7ULL, 0x2fc25eed999cc2c2ULL,
|
||||
0xb82e6d965c432e2eULL, 0x314b627a96294b4bULL, 0xdffea321e15dfefeULL, 0x41578216aed55757ULL,
|
||||
0x5415a8412abd1515ULL, 0xc1779fb6eee87777ULL, 0xdc37a5eb6e923737ULL, 0xb3e57b56d79ee5e5ULL,
|
||||
0x469f8cd923139f9fULL, 0xe7f0d317fd23f0f0ULL, 0x354a6a7f94204a4aULL, 0x4fda9e95a944dadaULL,
|
||||
0x7d58fa25b0a25858ULL, 0x03c906ca8fcfc9c9ULL, 0xa429558d527c2929ULL, 0x280a5022145a0a0aULL,
|
||||
0xfeb1e14f7f50b1b1ULL, 0xbaa0691a5dc9a0a0ULL, 0xb16b7fdad6146b6bULL, 0x2e855cab17d98585ULL,
|
||||
0xcebd8173673cbdbdULL, 0x695dd234ba8f5d5dULL, 0x4010805020901010ULL, 0xf7f4f303f507f4f4ULL,
|
||||
0x0bcb16c08bddcbcbULL, 0xf83eedc67cd33e3eULL, 0x140528110a2d0505ULL, 0x81671fe6ce786767ULL,
|
||||
0xb7e47353d597e4e4ULL, 0x9c2725bb4e022727ULL, 0x1941325882734141ULL, 0x168b2c9d0ba78b8bULL,
|
||||
0xa6a7510153f6a7a7ULL, 0xe97dcf94fab27d7dULL, 0x6e95dcfb37499595ULL, 0x47d88e9fad56d8d8ULL,
|
||||
0xcbfb8b30eb70fbfbULL, 0x9fee2371c1cdeeeeULL, 0xed7cc791f8bb7c7cULL, 0x856617e3cc716666ULL,
|
||||
0x53dda68ea77bddddULL, 0x5c17b84b2eaf1717ULL, 0x014702468e454747ULL, 0x429e84dc211a9e9eULL,
|
||||
0x0fca1ec589d4cacaULL, 0xb42d75995a582d2dULL, 0xc6bf9179632ebfbfULL, 0x1c07381b0e3f0707ULL,
|
||||
0x8ead012347acadadULL, 0x755aea2fb4b05a5aULL, 0x36836cb51bef8383ULL, 0xcc3385ff66b63333ULL,
|
||||
0x91633ff2c65c6363ULL, 0x0802100a04120202ULL, 0x92aa39384993aaaaULL, 0xd971afa8e2de7171ULL,
|
||||
0x07c80ecf8dc6c8c8ULL, 0x6419c87d32d11919ULL, 0x39497270923b4949ULL, 0x43d9869aaf5fd9d9ULL,
|
||||
0xeff2c31df931f2f2ULL, 0xabe34b48dba8e3e3ULL, 0x715be22ab6b95b5bULL, 0x1a8834920dbc8888ULL,
|
||||
0x529aa4c8293e9a9aULL, 0x98262dbe4c0b2626ULL, 0xc8328dfa64bf3232ULL, 0xfab0e94a7d59b0b0ULL,
|
||||
0x83e91b6acff2e9e9ULL, 0x3c0f78331e770f0fULL, 0x73d5e6a6b733d5d5ULL, 0x3a8074ba1df48080ULL,
|
||||
0xc2be997c6127bebeULL, 0x13cd26de87ebcdcdULL, 0xd034bde468893434ULL, 0x3d487a7590324848ULL,
|
||||
0xdbffab24e354ffffULL, 0xf57af78ff48d7a7aULL, 0x7a90f4ea3d649090ULL, 0x615fc23ebe9d5f5fULL,
|
||||
0x80201da0403d2020ULL, 0xbd6867d5d00f6868ULL, 0x681ad07234ca1a1aULL, 0x82ae192c41b7aeaeULL,
|
||||
0xeab4c95e757db4b4ULL, 0x4d549a19a8ce5454ULL, 0x7693ece53b7f9393ULL, 0x88220daa442f2222ULL,
|
||||
0x8d6407e9c8636464ULL, 0xe3f1db12ff2af1f1ULL, 0xd173bfa2e6cc7373ULL, 0x4812905a24821212ULL,
|
||||
0x1d403a5d807a4040ULL, 0x2008402810480808ULL, 0x2bc356e89b95c3c3ULL, 0x97ec337bc5dfececULL,
|
||||
0x4bdb9690ab4ddbdbULL, 0xbea1611f5fc0a1a1ULL, 0x0e8d1c8307918d8dULL, 0xf43df5c97ac83d3dULL,
|
||||
0x6697ccf1335b9797ULL, 0x0000000000000000ULL, 0x1bcf36d483f9cfcfULL, 0xac2b4587566e2b2bULL,
|
||||
0xc57697b3ece17676ULL, 0x328264b019e68282ULL, 0x7fd6fea9b128d6d6ULL, 0x6c1bd87736c31b1bULL,
|
||||
0xeeb5c15b7774b5b5ULL, 0x86af112943beafafULL, 0xb56a77dfd41d6a6aULL, 0x5d50ba0da0ea5050ULL,
|
||||
0x0945124c8a574545ULL, 0xebf3cb18fb38f3f3ULL, 0xc0309df060ad3030ULL, 0x9bef2b74c3c4efefULL,
|
||||
0xfc3fe5c37eda3f3fULL, 0x4955921caac75555ULL, 0xb2a2791059dba2a2ULL, 0x8fea0365c9e9eaeaULL,
|
||||
0x89650fecca6a6565ULL, 0xd2bab9686903babaULL, 0xbc2f65935e4a2f2fULL, 0x27c04ee79d8ec0c0ULL,
|
||||
0x5fdebe81a160dedeULL, 0x701ce06c38fc1c1cULL, 0xd3fdbb2ee746fdfdULL, 0x294d52649a1f4d4dULL,
|
||||
0x7292e4e039769292ULL, 0xc9758fbceafa7575ULL, 0x1806301e0c360606ULL, 0x128a249809ae8a8aULL,
|
||||
0xf2b2f940794bb2b2ULL, 0xbfe66359d185e6e6ULL, 0x380e70361c7e0e0eULL, 0x7c1ff8633ee71f1fULL,
|
||||
0x956237f7c4556262ULL, 0x77d4eea3b53ad4d4ULL, 0x9aa829324d81a8a8ULL, 0x6296c4f431529696ULL,
|
||||
0xc3f99b3aef62f9f9ULL, 0x33c566f697a3c5c5ULL, 0x942535b14a102525ULL, 0x7959f220b2ab5959ULL,
|
||||
0x2a8454ae15d08484ULL, 0xd572b7a7e4c57272ULL, 0xe439d5dd72ec3939ULL, 0x2d4c5a6198164c4cULL,
|
||||
0x655eca3bbc945e5eULL, 0xfd78e785f09f7878ULL, 0xe038ddd870e53838ULL, 0x0a8c148605988c8cULL,
|
||||
0x63d1c6b2bf17d1d1ULL, 0xaea5410b57e4a5a5ULL, 0xafe2434dd9a1e2e2ULL, 0x99612ff8c24e6161ULL,
|
||||
0xf6b3f1457b42b3b3ULL, 0x842115a542342121ULL, 0x4a9c94d625089c9cULL, 0x781ef0663cee1e1eULL,
|
||||
0x1143225286614343ULL, 0x3bc776fc93b1c7c7ULL, 0xd7fcb32be54ffcfcULL, 0x1004201408240404ULL,
|
||||
0x5951b208a2e35151ULL, 0x5e99bcc72f259999ULL, 0xa96d4fc4da226d6dULL, 0x340d68391a650d0dULL,
|
||||
0xcffa8335e979fafaULL, 0x5bdfb684a369dfdfULL, 0xe57ed79bfca97e7eULL, 0x90243db448192424ULL,
|
||||
0xec3bc5d776fe3b3bULL, 0x96ab313d4b9aababULL, 0x1fce3ed181f0ceceULL, 0x4411885522991111ULL,
|
||||
0x068f0c8903838f8fULL, 0x254e4a6b9c044e4eULL, 0xe6b7d1517366b7b7ULL, 0x8beb0b60cbe0ebebULL,
|
||||
0xf03cfdcc78c13c3cULL, 0x3e817cbf1ffd8181ULL, 0x6a94d4fe35409494ULL, 0xfbf7eb0cf31cf7f7ULL,
|
||||
0xdeb9a1676f18b9b9ULL, 0x4c13985f268b1313ULL, 0xb02c7d9c58512c2cULL, 0x6bd3d6b8bb05d3d3ULL,
|
||||
0xbbe76b5cd38ce7e7ULL, 0xa56e57cbdc396e6eULL, 0x37c46ef395aac4c4ULL, 0x0c03180f061b0303ULL,
|
||||
0x45568a13acdc5656ULL, 0x0d441a49885e4444ULL, 0xe17fdf9efea07f7fULL, 0x9ea921374f88a9a9ULL,
|
||||
0xa82a4d8254672a2aULL, 0xd6bbb16d6b0abbbbULL, 0x23c146e29f87c1c1ULL, 0x5153a202a6f15353ULL,
|
||||
0x57dcae8ba572dcdcULL, 0x2c0b582716530b0bULL, 0x4e9d9cd327019d9dULL, 0xad6c47c1d82b6c6cULL,
|
||||
0xc43195f562a43131ULL, 0xcd7487b9e8f37474ULL, 0xfff6e309f115f6f6ULL, 0x05460a438c4c4646ULL,
|
||||
0x8aac092645a5acacULL, 0x1e893c970fb58989ULL, 0x5014a04428b41414ULL, 0xa3e15b42dfbae1e1ULL,
|
||||
0x5816b04e2ca61616ULL, 0xe83acdd274f73a3aULL, 0xb9696fd0d2066969ULL, 0x2409482d12410909ULL,
|
||||
0xdd70a7ade0d77070ULL, 0xe2b6d954716fb6b6ULL, 0x67d0ceb7bd1ed0d0ULL, 0x93ed3b7ec7d6ededULL,
|
||||
0x17cc2edb85e2ccccULL, 0x15422a5784684242ULL, 0x5a98b4c22d2c9898ULL, 0xaaa4490e55eda4a4ULL,
|
||||
0xa0285d8850752828ULL, 0x6d5cda31b8865c5cULL, 0xc7f8933fed6bf8f8ULL, 0x228644a411c28686ULL,
|
||||
};
|
||||
|
||||
static __const mutils_word64 C7[256] =
|
||||
{
|
||||
0x186018c07830d818ULL, 0x238c2305af462623ULL, 0xc63fc67ef991b8c6ULL, 0xe887e8136fcdfbe8ULL,
|
||||
0x8726874ca113cb87ULL, 0xb8dab8a9626d11b8ULL, 0x0104010805020901ULL, 0x4f214f426e9e0d4fULL,
|
||||
0x36d836adee6c9b36ULL, 0xa6a2a6590451ffa6ULL, 0xd26fd2debdb90cd2ULL, 0xf5f3f5fb06f70ef5ULL,
|
||||
0x79f979ef80f29679ULL, 0x6fa16f5fcede306fULL, 0x917e91fcef3f6d91ULL, 0x525552aa07a4f852ULL,
|
||||
0x609d6027fdc04760ULL, 0xbccabc89766535bcULL, 0x9b569baccd2b379bULL, 0x8e028e048c018a8eULL,
|
||||
0xa3b6a371155bd2a3ULL, 0x0c300c603c186c0cULL, 0x7bf17bff8af6847bULL, 0x35d435b5e16a8035ULL,
|
||||
0x1d741de8693af51dULL, 0xe0a7e05347ddb3e0ULL, 0xd77bd7f6acb321d7ULL, 0xc22fc25eed999cc2ULL,
|
||||
0x2eb82e6d965c432eULL, 0x4b314b627a96294bULL, 0xfedffea321e15dfeULL, 0x5741578216aed557ULL,
|
||||
0x155415a8412abd15ULL, 0x77c1779fb6eee877ULL, 0x37dc37a5eb6e9237ULL, 0xe5b3e57b56d79ee5ULL,
|
||||
0x9f469f8cd923139fULL, 0xf0e7f0d317fd23f0ULL, 0x4a354a6a7f94204aULL, 0xda4fda9e95a944daULL,
|
||||
0x587d58fa25b0a258ULL, 0xc903c906ca8fcfc9ULL, 0x29a429558d527c29ULL, 0x0a280a5022145a0aULL,
|
||||
0xb1feb1e14f7f50b1ULL, 0xa0baa0691a5dc9a0ULL, 0x6bb16b7fdad6146bULL, 0x852e855cab17d985ULL,
|
||||
0xbdcebd8173673cbdULL, 0x5d695dd234ba8f5dULL, 0x1040108050209010ULL, 0xf4f7f4f303f507f4ULL,
|
||||
0xcb0bcb16c08bddcbULL, 0x3ef83eedc67cd33eULL, 0x05140528110a2d05ULL, 0x6781671fe6ce7867ULL,
|
||||
0xe4b7e47353d597e4ULL, 0x279c2725bb4e0227ULL, 0x4119413258827341ULL, 0x8b168b2c9d0ba78bULL,
|
||||
0xa7a6a7510153f6a7ULL, 0x7de97dcf94fab27dULL, 0x956e95dcfb374995ULL, 0xd847d88e9fad56d8ULL,
|
||||
0xfbcbfb8b30eb70fbULL, 0xee9fee2371c1cdeeULL, 0x7ced7cc791f8bb7cULL, 0x66856617e3cc7166ULL,
|
||||
0xdd53dda68ea77bddULL, 0x175c17b84b2eaf17ULL, 0x47014702468e4547ULL, 0x9e429e84dc211a9eULL,
|
||||
0xca0fca1ec589d4caULL, 0x2db42d75995a582dULL, 0xbfc6bf9179632ebfULL, 0x071c07381b0e3f07ULL,
|
||||
0xad8ead012347acadULL, 0x5a755aea2fb4b05aULL, 0x8336836cb51bef83ULL, 0x33cc3385ff66b633ULL,
|
||||
0x6391633ff2c65c63ULL, 0x020802100a041202ULL, 0xaa92aa39384993aaULL, 0x71d971afa8e2de71ULL,
|
||||
0xc807c80ecf8dc6c8ULL, 0x196419c87d32d119ULL, 0x4939497270923b49ULL, 0xd943d9869aaf5fd9ULL,
|
||||
0xf2eff2c31df931f2ULL, 0xe3abe34b48dba8e3ULL, 0x5b715be22ab6b95bULL, 0x881a8834920dbc88ULL,
|
||||
0x9a529aa4c8293e9aULL, 0x2698262dbe4c0b26ULL, 0x32c8328dfa64bf32ULL, 0xb0fab0e94a7d59b0ULL,
|
||||
0xe983e91b6acff2e9ULL, 0x0f3c0f78331e770fULL, 0xd573d5e6a6b733d5ULL, 0x803a8074ba1df480ULL,
|
||||
0xbec2be997c6127beULL, 0xcd13cd26de87ebcdULL, 0x34d034bde4688934ULL, 0x483d487a75903248ULL,
|
||||
0xffdbffab24e354ffULL, 0x7af57af78ff48d7aULL, 0x907a90f4ea3d6490ULL, 0x5f615fc23ebe9d5fULL,
|
||||
0x2080201da0403d20ULL, 0x68bd6867d5d00f68ULL, 0x1a681ad07234ca1aULL, 0xae82ae192c41b7aeULL,
|
||||
0xb4eab4c95e757db4ULL, 0x544d549a19a8ce54ULL, 0x937693ece53b7f93ULL, 0x2288220daa442f22ULL,
|
||||
0x648d6407e9c86364ULL, 0xf1e3f1db12ff2af1ULL, 0x73d173bfa2e6cc73ULL, 0x124812905a248212ULL,
|
||||
0x401d403a5d807a40ULL, 0x0820084028104808ULL, 0xc32bc356e89b95c3ULL, 0xec97ec337bc5dfecULL,
|
||||
0xdb4bdb9690ab4ddbULL, 0xa1bea1611f5fc0a1ULL, 0x8d0e8d1c8307918dULL, 0x3df43df5c97ac83dULL,
|
||||
0x976697ccf1335b97ULL, 0x0000000000000000ULL, 0xcf1bcf36d483f9cfULL, 0x2bac2b4587566e2bULL,
|
||||
0x76c57697b3ece176ULL, 0x82328264b019e682ULL, 0xd67fd6fea9b128d6ULL, 0x1b6c1bd87736c31bULL,
|
||||
0xb5eeb5c15b7774b5ULL, 0xaf86af112943beafULL, 0x6ab56a77dfd41d6aULL, 0x505d50ba0da0ea50ULL,
|
||||
0x450945124c8a5745ULL, 0xf3ebf3cb18fb38f3ULL, 0x30c0309df060ad30ULL, 0xef9bef2b74c3c4efULL,
|
||||
0x3ffc3fe5c37eda3fULL, 0x554955921caac755ULL, 0xa2b2a2791059dba2ULL, 0xea8fea0365c9e9eaULL,
|
||||
0x6589650fecca6a65ULL, 0xbad2bab9686903baULL, 0x2fbc2f65935e4a2fULL, 0xc027c04ee79d8ec0ULL,
|
||||
0xde5fdebe81a160deULL, 0x1c701ce06c38fc1cULL, 0xfdd3fdbb2ee746fdULL, 0x4d294d52649a1f4dULL,
|
||||
0x927292e4e0397692ULL, 0x75c9758fbceafa75ULL, 0x061806301e0c3606ULL, 0x8a128a249809ae8aULL,
|
||||
0xb2f2b2f940794bb2ULL, 0xe6bfe66359d185e6ULL, 0x0e380e70361c7e0eULL, 0x1f7c1ff8633ee71fULL,
|
||||
0x62956237f7c45562ULL, 0xd477d4eea3b53ad4ULL, 0xa89aa829324d81a8ULL, 0x966296c4f4315296ULL,
|
||||
0xf9c3f99b3aef62f9ULL, 0xc533c566f697a3c5ULL, 0x25942535b14a1025ULL, 0x597959f220b2ab59ULL,
|
||||
0x842a8454ae15d084ULL, 0x72d572b7a7e4c572ULL, 0x39e439d5dd72ec39ULL, 0x4c2d4c5a6198164cULL,
|
||||
0x5e655eca3bbc945eULL, 0x78fd78e785f09f78ULL, 0x38e038ddd870e538ULL, 0x8c0a8c148605988cULL,
|
||||
0xd163d1c6b2bf17d1ULL, 0xa5aea5410b57e4a5ULL, 0xe2afe2434dd9a1e2ULL, 0x6199612ff8c24e61ULL,
|
||||
0xb3f6b3f1457b42b3ULL, 0x21842115a5423421ULL, 0x9c4a9c94d625089cULL, 0x1e781ef0663cee1eULL,
|
||||
0x4311432252866143ULL, 0xc73bc776fc93b1c7ULL, 0xfcd7fcb32be54ffcULL, 0x0410042014082404ULL,
|
||||
0x515951b208a2e351ULL, 0x995e99bcc72f2599ULL, 0x6da96d4fc4da226dULL, 0x0d340d68391a650dULL,
|
||||
0xfacffa8335e979faULL, 0xdf5bdfb684a369dfULL, 0x7ee57ed79bfca97eULL, 0x2490243db4481924ULL,
|
||||
0x3bec3bc5d776fe3bULL, 0xab96ab313d4b9aabULL, 0xce1fce3ed181f0ceULL, 0x1144118855229911ULL,
|
||||
0x8f068f0c8903838fULL, 0x4e254e4a6b9c044eULL, 0xb7e6b7d1517366b7ULL, 0xeb8beb0b60cbe0ebULL,
|
||||
0x3cf03cfdcc78c13cULL, 0x813e817cbf1ffd81ULL, 0x946a94d4fe354094ULL, 0xf7fbf7eb0cf31cf7ULL,
|
||||
0xb9deb9a1676f18b9ULL, 0x134c13985f268b13ULL, 0x2cb02c7d9c58512cULL, 0xd36bd3d6b8bb05d3ULL,
|
||||
0xe7bbe76b5cd38ce7ULL, 0x6ea56e57cbdc396eULL, 0xc437c46ef395aac4ULL, 0x030c03180f061b03ULL,
|
||||
0x5645568a13acdc56ULL, 0x440d441a49885e44ULL, 0x7fe17fdf9efea07fULL, 0xa99ea921374f88a9ULL,
|
||||
0x2aa82a4d8254672aULL, 0xbbd6bbb16d6b0abbULL, 0xc123c146e29f87c1ULL, 0x535153a202a6f153ULL,
|
||||
0xdc57dcae8ba572dcULL, 0x0b2c0b582716530bULL, 0x9d4e9d9cd327019dULL, 0x6cad6c47c1d82b6cULL,
|
||||
0x31c43195f562a431ULL, 0x74cd7487b9e8f374ULL, 0xf6fff6e309f115f6ULL, 0x4605460a438c4c46ULL,
|
||||
0xac8aac092645a5acULL, 0x891e893c970fb589ULL, 0x145014a04428b414ULL, 0xe1a3e15b42dfbae1ULL,
|
||||
0x165816b04e2ca616ULL, 0x3ae83acdd274f73aULL, 0x69b9696fd0d20669ULL, 0x092409482d124109ULL,
|
||||
0x70dd70a7ade0d770ULL, 0xb6e2b6d954716fb6ULL, 0xd067d0ceb7bd1ed0ULL, 0xed93ed3b7ec7d6edULL,
|
||||
0xcc17cc2edb85e2ccULL, 0x4215422a57846842ULL, 0x985a98b4c22d2c98ULL, 0xa4aaa4490e55eda4ULL,
|
||||
0x28a0285d88507528ULL, 0x5c6d5cda31b8865cULL, 0xf8c7f8933fed6bf8ULL, 0x86228644a411c286ULL,
|
||||
};
|
||||
|
||||
static __const mutils_word64 rc[R + 1] =
|
||||
{
|
||||
0x0000000000000000ULL,
|
||||
0x1823c6e887b8014fULL,
|
||||
0x36a6d2f5796f9152ULL,
|
||||
0x60bc9b8ea30c7b35ULL,
|
||||
0x1de0d7c22e4bfe57ULL,
|
||||
0x157737e59ff04adaULL,
|
||||
0x58c9290ab1a06b85ULL,
|
||||
0xbd5d10f4cb3e0567ULL,
|
||||
0xe427418ba77d95d8ULL,
|
||||
0xfbee7c66dd17479eULL,
|
||||
0xca2dbf07ad5a8333ULL,
|
||||
};
|
||||
|
||||
/**
|
||||
* The core Whirlpool transform.
|
||||
*/
|
||||
static void processBuffer(struct whirlpool_ctx * __const ctx)
|
||||
{
|
||||
mutils_word32 i;
|
||||
mutils_word32 r;
|
||||
mutils_word64 K[8]; /* the round key */
|
||||
mutils_word64 block[8]; /* mu(buffer) */
|
||||
mutils_word64 state[8]; /* the cipher state */
|
||||
mutils_word64 L[8];
|
||||
mutils_word8 *buffer = ctx->buffer;
|
||||
|
||||
/*
|
||||
* map the buffer to a block:
|
||||
*/
|
||||
for (i = 0; i < 8; i++, buffer += 8)
|
||||
{
|
||||
block[i] =
|
||||
(((mutils_word64)buffer[0] ) << 56) ^
|
||||
(((mutils_word64)buffer[1] & 0xffL) << 48) ^
|
||||
(((mutils_word64)buffer[2] & 0xffL) << 40) ^
|
||||
(((mutils_word64)buffer[3] & 0xffL) << 32) ^
|
||||
(((mutils_word64)buffer[4] & 0xffL) << 24) ^
|
||||
(((mutils_word64)buffer[5] & 0xffL) << 16) ^
|
||||
(((mutils_word64)buffer[6] & 0xffL) << 8) ^
|
||||
(((mutils_word64)buffer[7] & 0xffL) );
|
||||
}
|
||||
/*
|
||||
* compute and apply K^0 to the cipher state:
|
||||
*/
|
||||
state[0] = block[0] ^ (K[0] = ctx->hash[0]);
|
||||
state[1] = block[1] ^ (K[1] = ctx->hash[1]);
|
||||
state[2] = block[2] ^ (K[2] = ctx->hash[2]);
|
||||
state[3] = block[3] ^ (K[3] = ctx->hash[3]);
|
||||
state[4] = block[4] ^ (K[4] = ctx->hash[4]);
|
||||
state[5] = block[5] ^ (K[5] = ctx->hash[5]);
|
||||
state[6] = block[6] ^ (K[6] = ctx->hash[6]);
|
||||
state[7] = block[7] ^ (K[7] = ctx->hash[7]);
|
||||
/*
|
||||
* iterate over all rounds:
|
||||
*/
|
||||
for (r = 1; r <= R; r++)
|
||||
{
|
||||
/*
|
||||
* compute K^r from K^{r-1}:
|
||||
*/
|
||||
L[0] =
|
||||
C0[(int)(K[0] >> 56) ] ^
|
||||
C1[(int)(K[7] >> 48) & 0xff] ^
|
||||
C2[(int)(K[6] >> 40) & 0xff] ^
|
||||
C3[(int)(K[5] >> 32) & 0xff] ^
|
||||
C4[(int)(K[4] >> 24) & 0xff] ^
|
||||
C5[(int)(K[3] >> 16) & 0xff] ^
|
||||
C6[(int)(K[2] >> 8) & 0xff] ^
|
||||
C7[(int)(K[1] ) & 0xff] ^
|
||||
rc[r];
|
||||
L[1] =
|
||||
C0[(int)(K[1] >> 56) ] ^
|
||||
C1[(int)(K[0] >> 48) & 0xff] ^
|
||||
C2[(int)(K[7] >> 40) & 0xff] ^
|
||||
C3[(int)(K[6] >> 32) & 0xff] ^
|
||||
C4[(int)(K[5] >> 24) & 0xff] ^
|
||||
C5[(int)(K[4] >> 16) & 0xff] ^
|
||||
C6[(int)(K[3] >> 8) & 0xff] ^
|
||||
C7[(int)(K[2] ) & 0xff];
|
||||
L[2] =
|
||||
C0[(int)(K[2] >> 56) ] ^
|
||||
C1[(int)(K[1] >> 48) & 0xff] ^
|
||||
C2[(int)(K[0] >> 40) & 0xff] ^
|
||||
C3[(int)(K[7] >> 32) & 0xff] ^
|
||||
C4[(int)(K[6] >> 24) & 0xff] ^
|
||||
C5[(int)(K[5] >> 16) & 0xff] ^
|
||||
C6[(int)(K[4] >> 8) & 0xff] ^
|
||||
C7[(int)(K[3] ) & 0xff];
|
||||
L[3] =
|
||||
C0[(int)(K[3] >> 56) ] ^
|
||||
C1[(int)(K[2] >> 48) & 0xff] ^
|
||||
C2[(int)(K[1] >> 40) & 0xff] ^
|
||||
C3[(int)(K[0] >> 32) & 0xff] ^
|
||||
C4[(int)(K[7] >> 24) & 0xff] ^
|
||||
C5[(int)(K[6] >> 16) & 0xff] ^
|
||||
C6[(int)(K[5] >> 8) & 0xff] ^
|
||||
C7[(int)(K[4] ) & 0xff];
|
||||
L[4] =
|
||||
C0[(int)(K[4] >> 56) ] ^
|
||||
C1[(int)(K[3] >> 48) & 0xff] ^
|
||||
C2[(int)(K[2] >> 40) & 0xff] ^
|
||||
C3[(int)(K[1] >> 32) & 0xff] ^
|
||||
C4[(int)(K[0] >> 24) & 0xff] ^
|
||||
C5[(int)(K[7] >> 16) & 0xff] ^
|
||||
C6[(int)(K[6] >> 8) & 0xff] ^
|
||||
C7[(int)(K[5] ) & 0xff];
|
||||
L[5] =
|
||||
C0[(int)(K[5] >> 56) ] ^
|
||||
C1[(int)(K[4] >> 48) & 0xff] ^
|
||||
C2[(int)(K[3] >> 40) & 0xff] ^
|
||||
C3[(int)(K[2] >> 32) & 0xff] ^
|
||||
C4[(int)(K[1] >> 24) & 0xff] ^
|
||||
C5[(int)(K[0] >> 16) & 0xff] ^
|
||||
C6[(int)(K[7] >> 8) & 0xff] ^
|
||||
C7[(int)(K[6] ) & 0xff];
|
||||
L[6] =
|
||||
C0[(int)(K[6] >> 56) ] ^
|
||||
C1[(int)(K[5] >> 48) & 0xff] ^
|
||||
C2[(int)(K[4] >> 40) & 0xff] ^
|
||||
C3[(int)(K[3] >> 32) & 0xff] ^
|
||||
C4[(int)(K[2] >> 24) & 0xff] ^
|
||||
C5[(int)(K[1] >> 16) & 0xff] ^
|
||||
C6[(int)(K[0] >> 8) & 0xff] ^
|
||||
C7[(int)(K[7] ) & 0xff];
|
||||
L[7] =
|
||||
C0[(int)(K[7] >> 56) ] ^
|
||||
C1[(int)(K[6] >> 48) & 0xff] ^
|
||||
C2[(int)(K[5] >> 40) & 0xff] ^
|
||||
C3[(int)(K[4] >> 32) & 0xff] ^
|
||||
C4[(int)(K[3] >> 24) & 0xff] ^
|
||||
C5[(int)(K[2] >> 16) & 0xff] ^
|
||||
C6[(int)(K[1] >> 8) & 0xff] ^
|
||||
C7[(int)(K[0] ) & 0xff];
|
||||
K[0] = L[0];
|
||||
K[1] = L[1];
|
||||
K[2] = L[2];
|
||||
K[3] = L[3];
|
||||
K[4] = L[4];
|
||||
K[5] = L[5];
|
||||
K[6] = L[6];
|
||||
K[7] = L[7];
|
||||
/*
|
||||
* apply the r-th round transformation:
|
||||
*/
|
||||
L[0] =
|
||||
C0[(int)(state[0] >> 56) ] ^
|
||||
C1[(int)(state[7] >> 48) & 0xff] ^
|
||||
C2[(int)(state[6] >> 40) & 0xff] ^
|
||||
C3[(int)(state[5] >> 32) & 0xff] ^
|
||||
C4[(int)(state[4] >> 24) & 0xff] ^
|
||||
C5[(int)(state[3] >> 16) & 0xff] ^
|
||||
C6[(int)(state[2] >> 8) & 0xff] ^
|
||||
C7[(int)(state[1] ) & 0xff] ^
|
||||
K[0];
|
||||
L[1] =
|
||||
C0[(int)(state[1] >> 56) ] ^
|
||||
C1[(int)(state[0] >> 48) & 0xff] ^
|
||||
C2[(int)(state[7] >> 40) & 0xff] ^
|
||||
C3[(int)(state[6] >> 32) & 0xff] ^
|
||||
C4[(int)(state[5] >> 24) & 0xff] ^
|
||||
C5[(int)(state[4] >> 16) & 0xff] ^
|
||||
C6[(int)(state[3] >> 8) & 0xff] ^
|
||||
C7[(int)(state[2] ) & 0xff] ^
|
||||
K[1];
|
||||
L[2] =
|
||||
C0[(int)(state[2] >> 56) ] ^
|
||||
C1[(int)(state[1] >> 48) & 0xff] ^
|
||||
C2[(int)(state[0] >> 40) & 0xff] ^
|
||||
C3[(int)(state[7] >> 32) & 0xff] ^
|
||||
C4[(int)(state[6] >> 24) & 0xff] ^
|
||||
C5[(int)(state[5] >> 16) & 0xff] ^
|
||||
C6[(int)(state[4] >> 8) & 0xff] ^
|
||||
C7[(int)(state[3] ) & 0xff] ^
|
||||
K[2];
|
||||
L[3] =
|
||||
C0[(int)(state[3] >> 56) ] ^
|
||||
C1[(int)(state[2] >> 48) & 0xff] ^
|
||||
C2[(int)(state[1] >> 40) & 0xff] ^
|
||||
C3[(int)(state[0] >> 32) & 0xff] ^
|
||||
C4[(int)(state[7] >> 24) & 0xff] ^
|
||||
C5[(int)(state[6] >> 16) & 0xff] ^
|
||||
C6[(int)(state[5] >> 8) & 0xff] ^
|
||||
C7[(int)(state[4] ) & 0xff] ^
|
||||
K[3];
|
||||
L[4] =
|
||||
C0[(int)(state[4] >> 56) ] ^
|
||||
C1[(int)(state[3] >> 48) & 0xff] ^
|
||||
C2[(int)(state[2] >> 40) & 0xff] ^
|
||||
C3[(int)(state[1] >> 32) & 0xff] ^
|
||||
C4[(int)(state[0] >> 24) & 0xff] ^
|
||||
C5[(int)(state[7] >> 16) & 0xff] ^
|
||||
C6[(int)(state[6] >> 8) & 0xff] ^
|
||||
C7[(int)(state[5] ) & 0xff] ^
|
||||
K[4];
|
||||
L[5] =
|
||||
C0[(int)(state[5] >> 56) ] ^
|
||||
C1[(int)(state[4] >> 48) & 0xff] ^
|
||||
C2[(int)(state[3] >> 40) & 0xff] ^
|
||||
C3[(int)(state[2] >> 32) & 0xff] ^
|
||||
C4[(int)(state[1] >> 24) & 0xff] ^
|
||||
C5[(int)(state[0] >> 16) & 0xff] ^
|
||||
C6[(int)(state[7] >> 8) & 0xff] ^
|
||||
C7[(int)(state[6] ) & 0xff] ^
|
||||
K[5];
|
||||
L[6] =
|
||||
C0[(int)(state[6] >> 56) ] ^
|
||||
C1[(int)(state[5] >> 48) & 0xff] ^
|
||||
C2[(int)(state[4] >> 40) & 0xff] ^
|
||||
C3[(int)(state[3] >> 32) & 0xff] ^
|
||||
C4[(int)(state[2] >> 24) & 0xff] ^
|
||||
C5[(int)(state[1] >> 16) & 0xff] ^
|
||||
C6[(int)(state[0] >> 8) & 0xff] ^
|
||||
C7[(int)(state[7] ) & 0xff] ^
|
||||
K[6];
|
||||
L[7] =
|
||||
C0[(int)(state[7] >> 56) ] ^
|
||||
C1[(int)(state[6] >> 48) & 0xff] ^
|
||||
C2[(int)(state[5] >> 40) & 0xff] ^
|
||||
C3[(int)(state[4] >> 32) & 0xff] ^
|
||||
C4[(int)(state[3] >> 24) & 0xff] ^
|
||||
C5[(int)(state[2] >> 16) & 0xff] ^
|
||||
C6[(int)(state[1] >> 8) & 0xff] ^
|
||||
C7[(int)(state[0] ) & 0xff] ^
|
||||
K[7];
|
||||
state[0] = L[0];
|
||||
state[1] = L[1];
|
||||
state[2] = L[2];
|
||||
state[3] = L[3];
|
||||
state[4] = L[4];
|
||||
state[5] = L[5];
|
||||
state[6] = L[6];
|
||||
state[7] = L[7];
|
||||
}
|
||||
/*
|
||||
* apply the Miyaguchi-Preneel compression function:
|
||||
*/
|
||||
ctx->hash[0] ^= state[0] ^ block[0];
|
||||
ctx->hash[1] ^= state[1] ^ block[1];
|
||||
ctx->hash[2] ^= state[2] ^ block[2];
|
||||
ctx->hash[3] ^= state[3] ^ block[3];
|
||||
ctx->hash[4] ^= state[4] ^ block[4];
|
||||
ctx->hash[5] ^= state[5] ^ block[5];
|
||||
ctx->hash[6] ^= state[6] ^ block[6];
|
||||
ctx->hash[7] ^= state[7] ^ block[7];
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the hashing state.
|
||||
*/
|
||||
void whirlpool_init(struct whirlpool_ctx *ctx)
|
||||
{
|
||||
mutils_word32 i;
|
||||
ctx->hashlen[0] = ctx->hashlen[1] =
|
||||
ctx->hashlen[2] = ctx->hashlen[3] = 0;
|
||||
ctx->index = 0;
|
||||
for (i = 0; i < WHIRLPOOL_DIGEST_SIZE/8; i++)
|
||||
ctx->hash[i] = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment the block counter by step
|
||||
*/
|
||||
#define INCCTR(cnt,step) do { \
|
||||
if ((cnt[3] += (step)) < (step)) \
|
||||
if (!(++cnt[2])) \
|
||||
if (!(++cnt[1])) \
|
||||
if (!(++cnt[0])); \
|
||||
} while(0);
|
||||
|
||||
|
||||
void
|
||||
whirlpool_update(struct whirlpool_ctx *ctx, __const mutils_word8 *data, mutils_word32 length)
|
||||
{
|
||||
if (ctx->index) { /* Try to fill partial block */
|
||||
mutils_word32 left = WHIRLPOOL_DATA_SIZE - ctx->index;
|
||||
if (length < left) {
|
||||
mutils_memcpy(ctx->buffer + ctx->index, data, length);
|
||||
ctx->index += length;
|
||||
return; /* Finished */
|
||||
} else {
|
||||
mutils_memcpy(ctx->buffer + ctx->index, data, left);
|
||||
processBuffer(ctx);
|
||||
INCCTR(ctx->hashlen, 512);
|
||||
data += left;
|
||||
length -= left;
|
||||
}
|
||||
}
|
||||
while (length >= WHIRLPOOL_DATA_SIZE) {
|
||||
mutils_memcpy(ctx->buffer, data, WHIRLPOOL_DATA_SIZE);
|
||||
processBuffer(ctx);
|
||||
INCCTR(ctx->hashlen, 512);
|
||||
data += WHIRLPOOL_DATA_SIZE;
|
||||
length -= WHIRLPOOL_DATA_SIZE;
|
||||
}
|
||||
mutils_memcpy(ctx->buffer, data, length);
|
||||
ctx->index = length;
|
||||
}
|
||||
|
||||
/* Final wrapup - pad to WHIRLPOOL_DATA_SIZE-byte boundary with the bit pattern
|
||||
1 0* (256-bit count of bits processed, MSB-first) */
|
||||
void whirlpool_final(struct whirlpool_ctx *ctx)
|
||||
{
|
||||
mutils_word32 i;
|
||||
mutils_word8 * buf;
|
||||
mutils_word64 t;
|
||||
|
||||
i = ctx->index;
|
||||
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
|
||||
/* assert(i < WHIRLPOOL_DATA_SIZE); */
|
||||
ctx->buffer[i++] = 0x80;
|
||||
|
||||
if (i > WHIRLPOOL_DATA_SIZE - 256/8)
|
||||
{
|
||||
mutils_memset(ctx->buffer + i, 0, WHIRLPOOL_DATA_SIZE - i);
|
||||
processBuffer(ctx);
|
||||
i = 0;
|
||||
}
|
||||
|
||||
mutils_memset(ctx->buffer + i, 0, WHIRLPOOL_DATA_SIZE - 256/8 - i);
|
||||
|
||||
/*
|
||||
* Terminate with length field
|
||||
*/
|
||||
INCCTR(ctx->hashlen, 8 * ctx->index);
|
||||
buf = ctx->buffer + (WHIRLPOOL_DATA_SIZE - 256/8);
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
t = ctx->hashlen[i];
|
||||
*buf++ = (t >> 56) & 0xff;
|
||||
*buf++ = (t >> 48) & 0xff;
|
||||
*buf++ = (t >> 40) & 0xff;
|
||||
*buf++ = (t >> 32) & 0xff;
|
||||
*buf++ = (t >> 24) & 0xff;
|
||||
*buf++ = (t >> 16) & 0xff;
|
||||
*buf++ = (t >> 8) & 0xff;
|
||||
*buf++ = t & 0xff;
|
||||
}
|
||||
processBuffer(ctx);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the hash value from the hashing state.
|
||||
*/
|
||||
void whirlpool_digest(__const struct whirlpool_ctx * ctx,
|
||||
mutils_word8 * digest)
|
||||
{
|
||||
mutils_word32 i;
|
||||
/*
|
||||
* return the completed message digest:
|
||||
*/
|
||||
for (i = 0; i < WHIRLPOOL_DIGEST_SIZE/8; i++) {
|
||||
*digest++ = (mutils_word8)(ctx->hash[i] >> 56);
|
||||
*digest++ = (mutils_word8)(ctx->hash[i] >> 48);
|
||||
*digest++ = (mutils_word8)(ctx->hash[i] >> 40);
|
||||
*digest++ = (mutils_word8)(ctx->hash[i] >> 32);
|
||||
*digest++ = (mutils_word8)(ctx->hash[i] >> 24);
|
||||
*digest++ = (mutils_word8)(ctx->hash[i] >> 16);
|
||||
*digest++ = (mutils_word8)(ctx->hash[i] >> 8);
|
||||
*digest++ = (mutils_word8)(ctx->hash[i] );
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* ENABLE_WHIRLPOOL */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
||||
mhash AUTHORS
|
||||
===============================================================================
|
||||
|
||||
The authors of libmhash are
|
||||
|
||||
Nikos Mavroyanopoulos <nmav@hellug.gr>
|
||||
Sascha Schumann <sascha@schumann.cx>
|
||||
|
||||
The library was originaly created by Nikos Mavroyanopoulos sometime
|
||||
in 1998. Many new features and algorithms were added by Sascha Schumann,
|
||||
who maintained it from May 1999 to March 2000.
|
||||
The library is now maintained again by Nikos Mavroyanopoulos.
|
||||
|
||||
@@ -0,0 +1,482 @@
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 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.
|
||||
|
||||
[This is the first released version of the library GPL. It is
|
||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Library General Public License, applies to some
|
||||
specially designated Free Software Foundation software, and to any
|
||||
other libraries whose authors decide to use it. You can use it for
|
||||
your libraries, 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 library, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link a program with the library, you must provide
|
||||
complete object files to the recipients so that they can relink them
|
||||
with the library, after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
Our method of protecting your rights has two steps: (1) copyright
|
||||
the library, and (2) offer you this license which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
Also, for each distributor's protection, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
library. If the library is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original
|
||||
version, 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 companies distributing free
|
||||
software will individually obtain patent licenses, thus in effect
|
||||
transforming the program into proprietary software. To prevent this,
|
||||
we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary
|
||||
GNU General Public License, which was designed for utility programs. This
|
||||
license, the GNU Library General Public License, applies to certain
|
||||
designated libraries. This license is quite different from the ordinary
|
||||
one; be sure to read it in full, and don't assume that anything in it is
|
||||
the same as in the ordinary license.
|
||||
|
||||
The reason we have a separate public license for some libraries is that
|
||||
they blur the distinction we usually make between modifying or adding to a
|
||||
program and simply using it. Linking a program with a library, without
|
||||
changing the library, is in some sense simply using the library, and is
|
||||
analogous to running a utility program or application program. However, in
|
||||
a textual and legal sense, the linked executable is a combined work, a
|
||||
derivative of the original library, and the ordinary General Public License
|
||||
treats it as such.
|
||||
|
||||
Because of this blurred distinction, using the ordinary General
|
||||
Public License for libraries did not effectively promote software
|
||||
sharing, because most developers did not use the libraries. We
|
||||
concluded that weaker conditions might promote sharing better.
|
||||
|
||||
However, unrestricted linking of non-free programs would deprive the
|
||||
users of those programs of all benefit from the free status of the
|
||||
libraries themselves. This Library General Public License is intended to
|
||||
permit developers of non-free programs to use free libraries, while
|
||||
preserving your freedom as a user of such programs to change the free
|
||||
libraries that are incorporated in them. (We have not seen how to achieve
|
||||
this as regards changes in header files, but we have achieved it as regards
|
||||
changes in the actual functions of the Library.) The hope is that this
|
||||
will lead to faster development of free libraries.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, while the latter only
|
||||
works together with the library.
|
||||
|
||||
Note that it is possible for a library to be covered by the ordinary
|
||||
General Public License rather than by this special one.
|
||||
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library which
|
||||
contains a notice placed by the copyright holder or other authorized
|
||||
party saying it may be distributed under the terms of this Library
|
||||
General Public License (also called "this License"). Each licensee is
|
||||
addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, 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 library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete 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 distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
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 Library or any portion
|
||||
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
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 Library, 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 Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you 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.
|
||||
|
||||
If distribution of 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 satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also compile or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
c) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
d) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. 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.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library 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.
|
||||
|
||||
9. 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 Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
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.
|
||||
|
||||
11. 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 Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library 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 Library.
|
||||
|
||||
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.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library 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.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Library 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 Library
|
||||
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 Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
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
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "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
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. 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 LIBRARY 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
|
||||
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. 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 library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This 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.
|
||||
|
||||
This 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 this library; 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.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@@ -0,0 +1,619 @@
|
||||
2007-04-02 12:00 imipak
|
||||
Since the symbol clashes, it has mostly been endian and alignment
|
||||
problems, although some compiler warnings have been squished as well.
|
||||
|
||||
2007-02-20 12:00 imipak
|
||||
Fixed symbol clashes. This will probably be revisited, but any future
|
||||
scheme will transparently use the masking scheme present in this
|
||||
edition.
|
||||
|
||||
2007-02-10 12:00 imipak
|
||||
|
||||
Well, Michael Schwendt did it again. He's provided a set of patches
|
||||
to solve the Haval endian problem, which are included. He also polished
|
||||
off some memory leaks that had been hitherto undetected. All kudos and
|
||||
Slashdot mod points to him for his excellent work. (Now all I have to
|
||||
figure out is how to port this code to the Amiga...)
|
||||
|
||||
2006-01-01 12:00 imipak
|
||||
|
||||
Virtually all files impacted by forcing unsigned types for unsigned
|
||||
data. Isolated C library calls, will probably steal reimplementations
|
||||
of these functions so that mhash will sit better on embedded platforms.
|
||||
|
||||
2002-10-03 13:01 nmav
|
||||
|
||||
* lib/keygen_s2k.c:
|
||||
|
||||
Corrected bug which caused memory leaks. Patch by bob mathews
|
||||
(bobmathews@alumni.calpoly.edu)
|
||||
|
||||
2002-10-03 12:55 nmav
|
||||
|
||||
* src/hmac_test.c:
|
||||
|
||||
Corrected wrong use of sizeof(). Reported by Ellis Pritchard
|
||||
(ellispritchard@users.sf.net)
|
||||
|
||||
2002-09-02 20:59 nmav
|
||||
|
||||
* NEWS, lib/keygen_hex.c, lib/mhash.c:
|
||||
|
||||
corrected the HEX key generator. Refuses hex strings longer than the
|
||||
key
|
||||
|
||||
2002-05-26 17:46 nmav
|
||||
|
||||
* NEWS, acconfig.h (tags: mhash_0_8_16), configure.in (tags:
|
||||
mhash_0_8_16), lib/adler32.c (tags: mhash_0_8_16), lib/crc32.c
|
||||
(tags: mhash_0_8_16), lib/gosthash.c (tags: mhash_0_8_16),
|
||||
lib/haval.c (tags: mhash_0_8_16), lib/md4.c (tags: mhash_0_8_16),
|
||||
lib/md5.c (tags: mhash_0_8_16), lib/mhash.c (tags: mhash_0_8_16),
|
||||
lib/mhash_int.h (tags: mhash_0_8_16), lib/ripemd.c (tags:
|
||||
mhash_0_8_16), lib/sha1.c (tags: mhash_0_8_16), lib/sha256.c (tags:
|
||||
mhash_0_8_16), lib/tiger.c (tags: mhash_0_8_16), lib/tiger_sboxes.c
|
||||
(tags: mhash_0_8_16):
|
||||
|
||||
added configure time options to disable certain algorithms
|
||||
|
||||
2002-05-26 17:08 nmav
|
||||
|
||||
* NEWS, configure.in, lib/adler32.c, lib/crc32.c, lib/haval.c,
|
||||
lib/md4.c, lib/md5.c, lib/mhash.c, lib/mhash_adler32.h (tags:
|
||||
mhash_0_8_16), lib/mhash_crc32.h (tags: mhash_0_8_16),
|
||||
lib/mhash_haval.h (tags: mhash_0_8_16), lib/mhash_md4.h (tags:
|
||||
mhash_0_8_16), lib/mhash_md5.h (tags: mhash_0_8_16),
|
||||
src/hmac_test.c (tags: mhash_0_8_16):
|
||||
|
||||
Cleaned the code up. Less code now in mhash.c.
|
||||
|
||||
2002-05-24 14:25 nmav
|
||||
|
||||
* lib/keygen_s2k.c:
|
||||
|
||||
Corrected s2k-iterated
|
||||
|
||||
2002-05-17 11:26 nmav
|
||||
|
||||
* lib/gosthash.c (tags: mhash_0_8_15):
|
||||
|
||||
cleaned up
|
||||
|
||||
2002-05-17 11:25 nmav
|
||||
|
||||
* lib/mhash_gost.h (tags: mhash_0_8_16, mhash_0_8_15):
|
||||
|
||||
Cleaned up
|
||||
|
||||
2002-05-16 22:45 nmav
|
||||
|
||||
* THANKS (tags: mhash_0_8_16, mhash_0_8_15), lib/crc32.c (tags:
|
||||
mhash_0_8_15), lib/gosthash.c, lib/keygen.c (tags: mhash_0_8_16,
|
||||
mhash_0_8_15), lib/mhash.c, lib/tiger.c (tags: mhash_0_8_15),
|
||||
lib/tiger_sboxes.c (tags: mhash_0_8_15), src/driver.c (tags:
|
||||
mhash_0_8_16, mhash_0_8_15):
|
||||
|
||||
Added const to all fixed tables. Pointed out by Darryl Miles
|
||||
<darryl@netbauds.net>.
|
||||
|
||||
2002-03-11 18:55 nmav
|
||||
|
||||
* Makefile.am (tags: mhash_0_8_16, mhash_0_8_15), NEWS, THANKS,
|
||||
lib/gosthash.c:
|
||||
|
||||
fixed bug in gost. Pointed out by Mike Gorchak
|
||||
|
||||
2002-03-10 10:29 nmav
|
||||
|
||||
* Makefile.am, NEWS, configure.in, mhash.spec, mhash.spec.in:
|
||||
|
||||
added mhash.spec.in
|
||||
|
||||
2002-03-09 19:16 nmav
|
||||
|
||||
* mhash.spec:
|
||||
|
||||
added mhash.spec by Germano Rizzo <mano@pluto.linux.it>
|
||||
|
||||
2002-02-12 11:46 nmav
|
||||
|
||||
* lib/mhash.h:
|
||||
|
||||
corrected keygen_id prototype
|
||||
|
||||
2002-02-10 10:10 nmav
|
||||
|
||||
* NEWS, THANKS, lib/mhash.c:
|
||||
|
||||
corrected some memory leaks. Patch by Gustavo Niemeyer.
|
||||
|
||||
2002-01-26 09:09 nmav
|
||||
|
||||
* NEWS, doc/mhash.pod (tags: mhash_0_8_16, mhash_0_8_15),
|
||||
lib/adler32.c (tags: mhash_0_8_15), lib/crc32.c, lib/gosthash.c,
|
||||
lib/keygen_asis.c (tags: mhash_0_8_16, mhash_0_8_15),
|
||||
lib/keygen_hex.c (tags: mhash_0_8_16, mhash_0_8_15),
|
||||
lib/keygen_mcrypt.c (tags: mhash_0_8_16, mhash_0_8_15),
|
||||
lib/keygen_s2k.c, lib/md4.c (tags: mhash_0_8_15), lib/md5.c (tags:
|
||||
mhash_0_8_15), lib/mhash.c, lib/ripemd.c (tags: mhash_0_8_15),
|
||||
lib/sha1.c (tags: mhash_0_8_15), lib/sha256.c (tags: mhash_0_8_15),
|
||||
lib/tiger.c:
|
||||
|
||||
mhash_deinit() and mhash_hmac_deinit() can now accept null digest
|
||||
parameter.
|
||||
|
||||
2001-11-19 11:52 nmav
|
||||
|
||||
* lib/: haval.c (tags: mhash_0_8_15), keygen_asis.c,
|
||||
keygen_mcrypt.c, mhash.c, mhash_tiger.h (tags: mhash_0_8_16,
|
||||
mhash_0_8_15), ripemd.c, tiger.c, tiger_sboxes.c:
|
||||
|
||||
several cleanups
|
||||
|
||||
2001-11-12 14:14 nmav
|
||||
|
||||
* NEWS, lib/Makefile.am, lib/adler32.c, lib/mhash.c, lib/mhash.h,
|
||||
lib/mhash_adler32.h (tags: mhash_0_8_15), lib/mhash_int.h (tags:
|
||||
mhash_0_8_15) (utags: libmhash_0_8_13):
|
||||
|
||||
added adler32 algorithm
|
||||
|
||||
2001-10-27 09:42 nmav
|
||||
|
||||
* NEWS, configure.in (tags: mhash_0_8_12_1, mhash_0_8_12),
|
||||
lib/Makefile.am (tags: mhash_0_8_12_1, mhash_0_8_12), lib/mhash.c
|
||||
(tags: mhash_0_8_12_1, mhash_0_8_12), lib/mhash.h (tags:
|
||||
mhash_0_8_12_1, mhash_0_8_12), lib/mhash_int.h (tags:
|
||||
mhash_0_8_12_1, mhash_0_8_12), lib/mhash_sha1.h (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12), lib/mhash_sha256.h (tags: mhash_0_8_16,
|
||||
mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12),
|
||||
lib/sha1.c (tags: libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12),
|
||||
lib/sha256.c (tags: libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12),
|
||||
src/hash_test.sh (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12):
|
||||
|
||||
added SHA-256
|
||||
|
||||
2001-10-26 10:47 nmav
|
||||
|
||||
* lib/: keygen.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12), mhash.c:
|
||||
|
||||
corrected bug in get_name()
|
||||
|
||||
2001-10-23 09:14 nmav
|
||||
|
||||
* lib/libmhash.sym, src/mhash_save_restore_test.c (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13) (utags:
|
||||
mhash_0_8_12_1, mhash_0_8_12):
|
||||
|
||||
corrected bugs
|
||||
|
||||
2001-10-19 21:46 nmav
|
||||
|
||||
* NEWS, configure.in (tags: mhash_0_8_11), doc/mhash.pod (tags:
|
||||
mhash_0_8_11), lib/keygen.c (tags: mhash_0_8_11), lib/mhash.c
|
||||
(tags: mhash_0_8_11), lib/mhash.h, src/mhash_save_restore_test.c:
|
||||
|
||||
Added mhash_get_name_static() Corrected mhash_get_name() and
|
||||
mhash_count()
|
||||
|
||||
2001-10-16 18:19 nmav
|
||||
|
||||
* NEWS, THANKS (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11), doc/mhash.pod, lib/libmhash.sym (tags:
|
||||
mhash_0_8_11), lib/mhash.c, lib/mhash.h, src/Makefile.am (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11), src/mhash_save_restore_test.c:
|
||||
|
||||
added capability to save/restore the mhash state. Initial patches
|
||||
and ideas by Blake Stephen <Stephen.Blake@veritect.com>
|
||||
|
||||
2001-09-21 13:49 nmav
|
||||
|
||||
* doc/mhash.pod, lib/haval.c (tags: libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11), lib/keygen.c,
|
||||
lib/libdefs.h (tags: mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11), lib/mhash.c,
|
||||
lib/mhash.h, lib/mhash_int.h (tags: mhash_0_8_11):
|
||||
|
||||
some fixes in included files
|
||||
|
||||
2001-09-09 09:58 nmav
|
||||
|
||||
* NEWS, doc/mhash.pod, lib/keygen.c, lib/mhash.c, lib/mhash.h,
|
||||
lib/mhash_int.h:
|
||||
|
||||
mhash_*_get_name() return a constant string
|
||||
|
||||
2001-07-12 15:34 nmav
|
||||
|
||||
* configure.in, src/driver.c (tags: libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11) (utags: mhash_0_8_10):
|
||||
|
||||
moving to mhash 0.8.10
|
||||
|
||||
2001-07-09 07:24 nmav
|
||||
|
||||
* lib/: libmhash.sym (tags: mhash_0_8_10), mhash.c (tags:
|
||||
mhash_0_8_10), mhash.h:
|
||||
|
||||
added functions to allow non-malloced results
|
||||
|
||||
2001-05-10 07:03 nmav
|
||||
|
||||
* src/hash_test.sh (tags: mhash_0_8_11, mhash_0_8_10):
|
||||
|
||||
tr fixes
|
||||
|
||||
2001-04-25 09:59 nmav
|
||||
|
||||
* src/hash_test.sh:
|
||||
|
||||
all outputs in hash_test are now specified in upper case
|
||||
|
||||
2001-04-06 12:44 nmav
|
||||
|
||||
* src/hash_test.sh:
|
||||
|
||||
corrected some case problems
|
||||
|
||||
2001-02-24 22:41 nmav
|
||||
|
||||
* src/hash_test.sh:
|
||||
|
||||
fixed a case problem
|
||||
|
||||
2001-02-11 19:33 nmav
|
||||
|
||||
* TODO (tags: mhash_0_8_11, mhash_0_8_10):
|
||||
|
||||
updated todo list
|
||||
|
||||
2001-02-10 11:43 nmav
|
||||
|
||||
* doc/mhash.pod:
|
||||
|
||||
updated information for md4
|
||||
|
||||
2001-02-04 12:06 nmav
|
||||
|
||||
* NEWS, README (tags: mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10),
|
||||
doc/mhash.pod, lib/mhash.h:
|
||||
|
||||
updated documentation
|
||||
|
||||
2001-02-04 10:29 nmav
|
||||
|
||||
* doc/: Makefile.am, example.c (utags: mhash_0_8_12_1,
|
||||
mhash_0_8_16, libmhash_0_8_13, mhash_0_8_12, mhash_0_8_15,
|
||||
mhash_0_8_10, mhash_0_8_11):
|
||||
|
||||
added example program
|
||||
|
||||
2001-02-04 10:23 nmav
|
||||
|
||||
* lib/tiger_sboxes.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9):
|
||||
|
||||
removed 64 bit version of tiger tables
|
||||
|
||||
2001-02-01 18:38 nmav
|
||||
|
||||
* NEWS, configure.in (tags: mhash_0_8_9):
|
||||
|
||||
moving to 0.8.9
|
||||
|
||||
2001-02-01 18:30 nmav
|
||||
|
||||
* lib/tiger_sboxes.c:
|
||||
|
||||
removed support for 64 bit
|
||||
|
||||
2001-01-29 09:46 nmav
|
||||
|
||||
* lib/mhash_tiger.h (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9):
|
||||
|
||||
removed 64bit version
|
||||
|
||||
2001-01-28 22:05 nmav
|
||||
|
||||
* doc/skid2-authentication (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9):
|
||||
|
||||
corrected
|
||||
|
||||
2001-01-26 00:44 nmav
|
||||
|
||||
* lib/: md4.c, md5.c (utags: mhash_0_8_12_1, libmhash_0_8_13,
|
||||
mhash_0_8_12, mhash_0_8_9, mhash_0_8_10, mhash_0_8_7,
|
||||
mhash_0_8_11):
|
||||
|
||||
made a function static so it does not cause problems in big endian
|
||||
systems
|
||||
|
||||
2001-01-24 08:20 nmav
|
||||
|
||||
* lib/: md4.c, md5.c, sha1.c (tags: mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
some speedups
|
||||
|
||||
2001-01-24 08:14 nmav
|
||||
|
||||
* doc/: Makefile.am (tags: mhash_0_8_9), mhash.pod (tags:
|
||||
mhash_0_8_9), skid2-authentication (utags: mhash_0_8_7):
|
||||
|
||||
added document that describes skid2 authentication protocol
|
||||
|
||||
2001-01-21 19:31 nmav
|
||||
|
||||
* lib/: tiger.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11), haval.c (utags: mhash_0_8_9,
|
||||
mhash_0_8_10, mhash_0_8_7):
|
||||
|
||||
removed unneeded functions
|
||||
|
||||
2001-01-21 19:30 nmav
|
||||
|
||||
* ChangeLog, NEWS, README (tags: mhash_0_8_9, mhash_0_8_7), TODO
|
||||
(tags: mhash_0_8_9, mhash_0_8_7), buildconf (tags: mhash_0_8_16,
|
||||
mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7),
|
||||
lib/Makefile.am, lib/keygen_hex.c (tags: libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7), lib/md5.c, lib/mhash_md5.h (tags:
|
||||
mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7),
|
||||
lib/mhash_tiger.h, lib/tiger.c, src/hash_test.sh (tags:
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
changes for MD4, TIGER160 and TIGER128
|
||||
|
||||
2001-01-21 19:28 nmav
|
||||
|
||||
* lib/: mhash.h, mhash_int.h (tags: mhash_0_8_10) (utags:
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
added MD4, TIGER160, TIGER128
|
||||
|
||||
2001-01-21 19:27 nmav
|
||||
|
||||
* lib/mhash.c (tags: mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
added MD4, TIGER128 and TIGER160
|
||||
|
||||
2001-01-21 19:27 nmav
|
||||
|
||||
* lib/: md4.c, mhash_md4.h (tags: mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
Added MD4 algorithm
|
||||
|
||||
2001-01-21 17:17 nmav
|
||||
|
||||
* NEWS:
|
||||
|
||||
more news!
|
||||
|
||||
2001-01-21 17:14 nmav
|
||||
|
||||
* src/hash_test.sh:
|
||||
|
||||
corrected tiger vectors
|
||||
|
||||
2001-01-21 17:13 nmav
|
||||
|
||||
* lib/: gosthash.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), mhash.c, mhash_tiger.h, ripemd.c (tags:
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), tiger.c, tiger_sboxes.c:
|
||||
|
||||
corrected tiger implementation and minor fixes
|
||||
|
||||
2001-01-03 22:10 nmav
|
||||
|
||||
* lib/keygen_s2k.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7):
|
||||
|
||||
more fixes
|
||||
|
||||
2001-01-03 21:55 nmav
|
||||
|
||||
* lib/: keygen_mcrypt.c (tags: libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), keygen_s2k.c, mhash.c:
|
||||
|
||||
Corrected bugs reported by: sami Farin <sfarin@ratol.fi> Joe Hohertz
|
||||
<jhohertz@wiretap.net>
|
||||
|
||||
2000-12-15 13:42 nmav
|
||||
|
||||
* lib/crc32.c (tags: libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
removed deprecated comments
|
||||
|
||||
2000-12-15 12:43 nmav
|
||||
|
||||
* lib/crc-32b.c:
|
||||
|
||||
crc32b was moved to crc32.c
|
||||
|
||||
2000-12-15 12:42 nmav
|
||||
|
||||
* NEWS, configure.in, doc/mhash.pod, lib/libmhash.sym (tags:
|
||||
mhash_0_8_9, mhash_0_8_7), lib/mhash.c, lib/mhash.h,
|
||||
lib/mhash_int.h:
|
||||
|
||||
added new functions
|
||||
|
||||
2000-12-15 12:11 nmav
|
||||
|
||||
* lib/: Makefile.am, crc-32b.c, crc32.c, gosthash.c, gosthash.h
|
||||
(tags: libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), mhash.c, mhash_crc32.h
|
||||
(tags: mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
CRC32B and GOST are now thread safe - and use less initialization
|
||||
time.
|
||||
|
||||
2000-10-30 13:13 nmav
|
||||
|
||||
* NEWS, configure.in, doc/mhash.pod, lib/crc32.c, lib/mhash.c,
|
||||
lib/mhash_crc32.h:
|
||||
|
||||
Added mhash_end_m() and mhash_hmac_end_m() functions.
|
||||
|
||||
2000-10-26 13:37 nmav
|
||||
|
||||
* NEWS, configure.in, lib/keygen.c (tags: mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7), lib/mhash.c, lib/mhash_int.h,
|
||||
src/keygen_test.c (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
More win32 changes
|
||||
|
||||
2000-10-24 23:07 nmav
|
||||
|
||||
* lib/: keygen.c, keygen_asis.c (tags: libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7):
|
||||
|
||||
corrected bug in the KEYGEN_ASIS transformation
|
||||
|
||||
2000-10-20 14:32 nmav
|
||||
|
||||
* NEWS, configure.in, lib/Makefile.am, lib/keygen.c, lib/libdefs.h
|
||||
(tags: mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), lib/mhash.c:
|
||||
|
||||
changes for WIN32
|
||||
|
||||
2000-05-10 19:55 nmav
|
||||
|
||||
* TODO:
|
||||
|
||||
updated TODO list
|
||||
|
||||
2000-05-10 05:46 nmav
|
||||
|
||||
* lib/mhash.c:
|
||||
|
||||
Corrected memory leaks in HMAC. Patches by Marios Hadjieleftheriou
|
||||
<marioh@cs.ucr.edu>
|
||||
|
||||
2000-04-14 19:09 nmav
|
||||
|
||||
* lib/mhash.c, lib/mhash.h, lib/mhash_int.h, src/hash_test.sh:
|
||||
|
||||
Added HAVAL224
|
||||
|
||||
2000-04-11 12:11 nmav
|
||||
|
||||
* lib/mhash.c:
|
||||
|
||||
Corrected hmac implementation.
|
||||
|
||||
2000-04-11 11:58 nmav
|
||||
|
||||
* configure.in, doc/Makefile.am, doc/md2-rfc1319.txt,
|
||||
doc/md2.license, doc/mhash.pod, lib/Makefile.am, lib/md2c.c,
|
||||
lib/mhash.c, lib/mhash.h, lib/mhash_int.h, lib/mhash_md2.h,
|
||||
src/hash_test.sh:
|
||||
|
||||
MD2 algorithm was removed.
|
||||
|
||||
2000-04-09 10:18 nmav
|
||||
|
||||
* configure.in, doc/mhash.pod, lib/mhash.h, lib/mhash_int.h,
|
||||
lib/snefru.c:
|
||||
|
||||
snefru was removed.
|
||||
|
||||
2000-04-06 22:19 nmav
|
||||
|
||||
* src/: driver.c (tags: mhash_0_8_9, mhash_0_8_7), hmac_test.c
|
||||
(tags: mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), keygen_test.c:
|
||||
|
||||
Corrected problem in the includes.
|
||||
|
||||
2000-04-04 10:34 nmav
|
||||
|
||||
* .cvsignore, AUTHORS (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), COPYING (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), ChangeLog, INSTALL (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), Makefile.am, NEWS, README,
|
||||
TODO, acconfig.h, acinclude.m4 (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), buildconf,
|
||||
changelog-update.sh (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), mhash.spec (tags:
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), doc/.cvsignore (tags:
|
||||
mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), doc/Makefile.am, doc/md2.license, doc/md5-rfc1321.txt
|
||||
(tags: mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1,
|
||||
mhash_0_8_12, mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), doc/mhash.pod, doc/md2-rfc1319.txt, lib/Makefile.am,
|
||||
lib/bzero.c (tags: mhash_0_8_16, mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7), lib/crc-32b.c, lib/crc32.c,
|
||||
lib/gosthash.c, lib/libmhash.sym, lib/haval.c, lib/keygen.c,
|
||||
lib/keygen_asis.c, lib/keygen_hex.c, lib/keygen_mcrypt.c,
|
||||
lib/keygen_s2k.c, lib/md2c.c, lib/md5.c, lib/mhash.c, lib/ripemd.c,
|
||||
lib/sha1.c, lib/snefru.c, lib/swap.c (tags: mhash_0_8_16,
|
||||
mhash_0_8_15, libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12,
|
||||
mhash_0_8_11, mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), lib/tiger.c,
|
||||
lib/libdefs.h, lib/mhash_crc32.h, lib/tiger_sboxes.c,
|
||||
lib/gosthash.h, lib/keygen.h (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), lib/mhash.h,
|
||||
lib/mhash_haval.h (tags: mhash_0_8_15, libmhash_0_8_13,
|
||||
mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11, mhash_0_8_10,
|
||||
mhash_0_8_9, mhash_0_8_7), lib/mhash_md2.h, lib/mhash_md5.h,
|
||||
lib/mhash_sha1.h (tags: mhash_0_8_11, mhash_0_8_10, mhash_0_8_9,
|
||||
mhash_0_8_7), lib/mhash_tiger.h, lib/mhash_int.h,
|
||||
lib/mhash_ripemd.h (tags: mhash_0_8_16, mhash_0_8_15,
|
||||
libmhash_0_8_13, mhash_0_8_12_1, mhash_0_8_12, mhash_0_8_11,
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), src/Makefile.am (tags:
|
||||
mhash_0_8_10, mhash_0_8_9, mhash_0_8_7), src/driver.c,
|
||||
src/hash_test.sh, src/hmac_test.c, src/keygen_test.c (utags:
|
||||
start):
|
||||
|
||||
project started in sourceforge
|
||||
|
||||
2000-04-04 10:34 nmav
|
||||
|
||||
* .cvsignore, AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am,
|
||||
NEWS, README, TODO, acconfig.h, acinclude.m4, buildconf,
|
||||
changelog-update.sh, mhash.spec, doc/.cvsignore, doc/Makefile.am,
|
||||
doc/md2.license, doc/md5-rfc1321.txt, doc/mhash.pod,
|
||||
doc/md2-rfc1319.txt, lib/Makefile.am, lib/bzero.c, lib/crc-32b.c,
|
||||
lib/crc32.c, lib/gosthash.c, lib/libmhash.sym, lib/haval.c,
|
||||
lib/keygen.c, lib/keygen_asis.c, lib/keygen_hex.c,
|
||||
lib/keygen_mcrypt.c, lib/keygen_s2k.c, lib/md2c.c, lib/md5.c,
|
||||
lib/mhash.c, lib/ripemd.c, lib/sha1.c, lib/snefru.c, lib/swap.c,
|
||||
lib/tiger.c, lib/libdefs.h, lib/mhash_crc32.h, lib/tiger_sboxes.c,
|
||||
lib/gosthash.h, lib/keygen.h, lib/mhash.h, lib/mhash_haval.h,
|
||||
lib/mhash_md2.h, lib/mhash_md5.h, lib/mhash_sha1.h,
|
||||
lib/mhash_tiger.h, lib/mhash_int.h, lib/mhash_ripemd.h,
|
||||
src/Makefile.am, src/driver.c, src/hash_test.sh, src/hmac_test.c,
|
||||
src/keygen_test.c:
|
||||
|
||||
Initial revision
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
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 to create `configure' by a program
|
||||
called `autoconf'. 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 awhile. 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' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `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.
|
||||
@@ -0,0 +1,7 @@
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
SUBDIRS = include lib doc src
|
||||
EXTRA_DIST = mhash.spec.in mhash.spec
|
||||
USE_MHASH_CONFIG = yes
|
||||
|
||||
ChangeLog:
|
||||
cvs2cl --utc --fsf -t -S --prune
|
||||
@@ -0,0 +1,637 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = .
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/mhash.spec.in \
|
||||
$(top_srcdir)/configure \
|
||||
$(top_srcdir)/include/mutils/mhash_config.h.in AUTHORS COPYING \
|
||||
ChangeLog INSTALL NEWS THANKS TODO config.guess config.sub \
|
||||
depcomp install-sh ltmain.sh missing
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/mutils/mhash_config.h
|
||||
CONFIG_CLEAN_FILES = mhash.spec
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AS = @AS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
|
||||
#AUTOMAKE_OPTIONS = foreign
|
||||
SUBDIRS = include lib doc src
|
||||
EXTRA_DIST = mhash.spec.in mhash.spec
|
||||
USE_MHASH_CONFIG = yes
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
|
||||
include/mutils/mhash_config.h: include/mutils/stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f include/mutils/stamp-h1; \
|
||||
$(MAKE) include/mutils/stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
include/mutils/stamp-h1: $(top_srcdir)/include/mutils/mhash_config.h.in $(top_builddir)/config.status
|
||||
@rm -f include/mutils/stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status include/mutils/mhash_config.h
|
||||
$(top_srcdir)/include/mutils/mhash_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f include/mutils/stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f include/mutils/mhash_config.h include/mutils/stamp-h1
|
||||
mhash.spec: $(top_builddir)/config.status $(srcdir)/mhash.spec.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
$(mkdir_p) $(distdir)/. $(distdir)/include/mutils
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-libtool clean-recursive \
|
||||
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
|
||||
dist-shar dist-tarZ dist-zip distcheck distclean \
|
||||
distclean-generic distclean-hdr distclean-libtool \
|
||||
distclean-recursive distclean-tags distcleancheck distdir \
|
||||
distuninstallcheck dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am uninstall-info-am
|
||||
|
||||
|
||||
ChangeLog:
|
||||
cvs2cl --utc --fsf -t -S --prune
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,172 @@
|
||||
mhash ChangeLog ($Date: 2006/06/24 21:46:11 $)
|
||||
===============================================================================
|
||||
|
||||
People
|
||||
|
||||
NM - Nikos Mavroyanopoulos <nmav@hellug.gr>
|
||||
SS - Sascha Schumann <sascha@schumann.cx>
|
||||
|
||||
Version 0.9.9
|
||||
- Added patch for sigbus error on unaligned data, when doing rapid copies.
|
||||
(Thanks to Wayne - mhash@useunix.net - for that.)
|
||||
|
||||
Version 0.9.8.1
|
||||
- Another round of bugfixes
|
||||
|
||||
Version 0.9.8
|
||||
- As before - more patches and cleanups
|
||||
|
||||
Version 0.9.7
|
||||
- More patches, more cleanups. Better handling of endian issues. Should
|
||||
handle platforms that do weird things with booleans better. Eliminated
|
||||
more redundant code. Snefru is now endian-aware. Maybe.
|
||||
|
||||
Known Issues:
|
||||
- Sub-optimal on 64-bit platforms, as a lot of the code assumes 32-bits.
|
||||
- May be some big-endian issues remaining. make check is your friend!
|
||||
|
||||
Version 0.9.6
|
||||
- Bunch of patches and speedups. Credits to be added.
|
||||
|
||||
Version 0.9.2
|
||||
- Added SNEFRU128, SNEFRU256. Reintroduced MD2.
|
||||
(jkmhash@itaparica.org)
|
||||
- Fixes to .spec file and clean-ups of documentation
|
||||
(cpedersen[at]c-note.dk)
|
||||
- Fixed typecasts, memory leaks and compiler warnings
|
||||
(imipak@yahoo.com)
|
||||
|
||||
Version 0.9.1
|
||||
- Added RIPEMD128/256/320, SHA224/384/512, Whirlpool
|
||||
- Really, this time!
|
||||
(jkmhash@itaparica.org)
|
||||
|
||||
Version 0.8.19
|
||||
- Added VC++ project files, contributed by James M. Rogers
|
||||
<james@singlestep.com>
|
||||
|
||||
Version 0.8.18 (released March 6 2003)
|
||||
- Several additions and fixes to built win32 dlls.
|
||||
|
||||
Version 0.8.17 (released October 4 2002)
|
||||
- Corrected the HEX key mode. Refuses to convert hex strings longer
|
||||
than the given key size.
|
||||
- Corrected some memory leaks in keygen_s2k. Patch by Bob Mathews
|
||||
<bobmathews@alumni.calpoly.edu>
|
||||
- Corrected wrong use of sizeof in hmac_test. Reported by Ellis Pritchard
|
||||
<ellispritchard@users.sf.net>
|
||||
|
||||
Version 0.8.16 (released May 29 2002)
|
||||
- Code cleanups and optimizations
|
||||
- Added configure time options to disable certain algorithms
|
||||
|
||||
Version 0.8.15 (released May 24 2002)
|
||||
- Corrected Iterated S2K
|
||||
- Made all static tables constant (pointed out by Darryl Miles <darryl@netbauds.net>)
|
||||
|
||||
Version 0.8.14 (release March 28 2002)
|
||||
- mhash_deinit() and mhash_hmac_deinit() now accept a null digest parameter
|
||||
- Corrected memory leaks (patch by Gustavo Niemeyer <niemeyer@conectiva.com>)
|
||||
- Corrected bug in Gost hash algorithm (pointed out by Mike Gorchak <mike@malva.ua>)
|
||||
|
||||
Version 0.8.13 (released November 18 2001)
|
||||
- Added ADLER32 algorithm (implementation by Manuel Kasper <mk@neon1.net>)
|
||||
|
||||
Version 0.8.12 (released October 29 2001)
|
||||
- Corrected bugs in mhash_get_name() functions
|
||||
- Added SHA-256 from libnettle.
|
||||
|
||||
Version 0.8.11 (released October 21 2001)
|
||||
- added mhash_save_state_mem() and mhash_restore_state_mem() functions,
|
||||
initial patches and idea by Blake Stephen <Stephen.Blake@veritect.com>
|
||||
- Added mhash_get_name_static()
|
||||
- Corrected mhash_get_name() and mhash_count()
|
||||
|
||||
Version 0.8.10 (released on July 12 2001)
|
||||
- New mhash_deinit() and mhash_hmac_deinit() functions based on the
|
||||
proposal, and patches by William Ahern <wahern@25thandClement.com>
|
||||
|
||||
Version 0.8.9 (released on February 04 2001)
|
||||
- TIGER runs on alpha (NM)
|
||||
- Documentation updated
|
||||
|
||||
Version 0.8.8 (released on January 29 2001)
|
||||
- MD4 and MD5 now compile on big endian machines (NM)
|
||||
- TIGER now compiles on big endian machines. (NM)
|
||||
|
||||
Version 0.8.6 (released on January 21 2001)
|
||||
- Corrected Tiger implementation (NM, bug pointed out by Gordon Mohr <gojomo@usa.net>)
|
||||
- Added MD4 (NM)
|
||||
- Added TIGER128 and TIGER160 (NM)
|
||||
|
||||
Version 0.8.5 (released on January 2001)
|
||||
- added checks for malloc failures (NM, some patches by Sami Farin <sfarin@ratol.fi>)
|
||||
- corrected old style checks for mhash failures (NM, reported by Joe Hohertz <jhohertz@wiretap.net>)
|
||||
|
||||
Version 0.8.4 (released on December 15 2000)
|
||||
- added mhash_hmac_end_m() and mhash_end_m() functions which allow to specify the malloc function. (NM)
|
||||
- added mhash_cp() - Copy a context (NM)
|
||||
- added mhash_get_mhash_algo() - Returns the name of the algorithm of the context (NM)
|
||||
- fixes in crc32b and gost (for multithreaded applications) (NM)
|
||||
|
||||
Version 0.8.3 (released on October 25 2000)
|
||||
- Compiles under Win32 using cygwin (with -mno-cygwin) (NM)
|
||||
- Bugfixes in KEYGEN_ASIS (NM)
|
||||
|
||||
Version 0.8.2 (released on May 12 2000)
|
||||
- Corrected Memory leaks in HMAC implementation (NM, contributed by Marios Hadjieleftheriou <marioh@cs.ucr.edu>)
|
||||
- Added HAVAL224 (NM)
|
||||
|
||||
Version 0.8.1 (released on April 11 2000)
|
||||
- Bugfixes in hmac implementation. (NM)
|
||||
- Removed MD2 (which was not free) (NM)
|
||||
|
||||
Version 0.8.0 (released on April 5 2000)
|
||||
- No longer needs posix thread locks to be thread safe (NM)
|
||||
- Supports unlimited number of MHASH threads (NM)
|
||||
- Improved the key generation algorithm API (NM)
|
||||
- Corrected Haval implementation. (NM)
|
||||
Now mhash uses Paulo Barreto's implementation
|
||||
Added HAVAL256, HAVAL192, HAVAL160, HAVAL128 (3 passes haval)
|
||||
- License was changed to GNU Lesser GPL
|
||||
|
||||
Version 0.7.0 (released on Mar 3rd 2000)
|
||||
- cleaned up binary interface (SS)
|
||||
- improved POSIX Threads detection (SS)
|
||||
- added keygen API (NM)
|
||||
- added new improved RIPEMD160 implementation (NM)
|
||||
- removed RIPEMD128 (NM)
|
||||
- added RPM .spec file by work@scripty.com (SS)
|
||||
|
||||
Version 0.6.1 (released on Oct 23th 1999)
|
||||
- fixed Tiger algorithm on 32-bit architectures (NM)
|
||||
|
||||
Version 0.6.0 (released on Oct 11th 1999)
|
||||
- export only symbols of the public interface (SS)
|
||||
- MHASH_API_VERSION has been changed to 19991004 (SS)
|
||||
- API change: All algorithm names have been prefixed with MHASH_
|
||||
to avoid namespace pollution (SS)
|
||||
- added mhash_get_hash_pblock() by NM, reimplemented by SS
|
||||
- improved data structure handling (NM)
|
||||
- use "--silent" libtool option (SS)
|
||||
- added hmac functions (SS, contributed by NM)
|
||||
|
||||
Version 0.5.2 (released on Jul 14th 1999)
|
||||
- fix VPATH build (SS)
|
||||
- upgrade to libtool 1.3.3 (SS)
|
||||
- rework directory layout (simplified) (SS)
|
||||
- change test script to work with Bourne shells (SS)
|
||||
- fix some big endian issues in RIPEMD160, RIPEMD128 and TIGER (SS)
|
||||
|
||||
Version 0.5 (relased on May 22nd 1999)
|
||||
- put under CVS control
|
||||
- change get_block_size to mhash_get_block_size (NM)
|
||||
- add --disable-pthreads option (NM)
|
||||
- add libtool and automake support (SS)
|
||||
- add several algorithms (SS)
|
||||
HAVAL, RIPEMD128, RIPEMD160, TIGER, GOST, CRC32B
|
||||
- add mhash_get_hash_name (SS)
|
||||
- add mhash_count (SS)
|
||||
- documentation revamp (SS)
|
||||
- renew API (SS)
|
||||
- add test vectors (SS)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user