Initial commit.
This commit is contained in:
commit
c97d09c8de
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
*.o
|
||||
*.user
|
||||
/**/obj
|
||||
/.vs
|
||||
/bin
|
||||
/out
|
121
LICENSE.txt
Normal file
121
LICENSE.txt
Normal file
@ -0,0 +1,121 @@
|
||||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
94
Makefile
Normal file
94
Makefile
Normal file
@ -0,0 +1,94 @@
|
||||
STATIC ?= 0
|
||||
FLTO ?= 0
|
||||
DEBUG ?= 0
|
||||
STRIP ?= 0
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Flags
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
OS_TYPE := $(shell $(CC) -dumpmachine)
|
||||
|
||||
ifneq ($(TARGET),)
|
||||
CFLAGS += -target $(TARGET)
|
||||
endif
|
||||
|
||||
ifneq ($(SYSROOT),)
|
||||
CFLAGS += --sysroot=$(SYSROOT)
|
||||
endif
|
||||
|
||||
ifneq ($(CPU),)
|
||||
CFLAGS += -m$(CPU)
|
||||
endif
|
||||
|
||||
CFLAGS += -std=gnu99 -Wall -pedantic -Wno-deprecated-declarations -Ilibnuhash/include -D_FILE_OFFSET_BITS=64
|
||||
|
||||
ifneq ($(DEBUG),1)
|
||||
CFLAGS += -Ofast -DNDEBUG
|
||||
else
|
||||
CFLAGS += -Og -g
|
||||
endif
|
||||
|
||||
ifeq ($(FLTO),1)
|
||||
CFLAGS += -flto
|
||||
endif
|
||||
|
||||
ifneq ($(MARCH),)
|
||||
CFLAGS += -march=$(MARCH)
|
||||
endif
|
||||
|
||||
ifneq ($(MTUNE),)
|
||||
CFLAGS += -mtune=$(MTUNE)
|
||||
endif
|
||||
|
||||
ifeq ($(STATIC),1)
|
||||
LDFLAGS += -static
|
||||
endif
|
||||
|
||||
ifeq ($(STRIP),1)
|
||||
LDFLAGS += -Wl,-s
|
||||
endif
|
||||
|
||||
ifneq ($(filter %w64-mingw32 %w64-windows-gnu,$(OS_TYPE)),)
|
||||
LDFLAGS += -municode
|
||||
endif
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Files
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
INFILES = $(patsubst %.c,%.o,$(wildcard libnuhash/src/*.c)) $(patsubst %.c,%.o,$(wildcard tool/src/*.c))
|
||||
OUTFILE = bin/nuhash
|
||||
OUTPATH = $(patsubst %/,%,$(dir $(OUTFILE)))
|
||||
|
||||
ifneq ($(filter %mingw32 %windows-gnu %cygwin %cygnus,$(OS_TYPE)),)
|
||||
OUTFILE := $(OUTFILE).exe
|
||||
endif
|
||||
|
||||
ifneq ($(filter %mingw32 %windows-gnu %cygwin %cygnus,$(OS_TYPE)),)
|
||||
INFILES += $(patsubst %.rc,%.o,$(wildcard tool/res/*.rc))
|
||||
endif
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Rules
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all: $(OUTFILE)
|
||||
|
||||
$(OUTFILE): $(INFILES) | $(OUTPATH)
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
$(OUTPATH):
|
||||
mkdir -p $@
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
%.o: %.rc
|
||||
windres -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -vrf $(OUTPATH)
|
||||
find . \! -path '*/.*' -type f -name '*.o' -exec rm -vf {} \;
|
306
README.md
Normal file
306
README.md
Normal file
@ -0,0 +1,306 @@
|
||||
![](etc/images/nuhash_logo.png)
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
**NuHash** is a fast, portable and secure hashing library, released under the CC0 license.
|
||||
|
||||
The "core" library (*libnuhash*) is written in pure **C99**, but a high-level wrapper for **C++** is also provided.
|
||||
|
||||
Supported platforms include Linux, Windows, *BSD, Illumos, Haiku OS, GNU Hurd and MacOS X.
|
||||
|
||||
|
||||
Getting Started
|
||||
===============
|
||||
|
||||
The following example shows how to use the *libnuhash* “stream” API in C99 code:
|
||||
|
||||
```c
|
||||
#include <nuhash.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
/* state variables */
|
||||
nuhash_t context;
|
||||
uint8_t buffer[BUFSIZ], digest[NUHASH_BYTES];
|
||||
char hexstr[NUHASH_CHARS];
|
||||
|
||||
/* initialization */
|
||||
nuhash_init(&context);
|
||||
|
||||
/* input data processing */
|
||||
while(more_data())
|
||||
{
|
||||
const size_t len = read_data(buffer, BUFSIZ);
|
||||
nuhash_update(&context, buffer, len);
|
||||
}
|
||||
|
||||
/* finalization */
|
||||
nuhash_final(&context, digest);
|
||||
|
||||
/* print the result */
|
||||
puts(nuhash_tohex(digest, 0, hexstr));
|
||||
}
|
||||
```
|
||||
|
||||
If all input data is available at once, the *libnuhash* “simple” API can be used instead:
|
||||
|
||||
```c
|
||||
#include <nuhash.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
/* state variables */
|
||||
uint8_t digest[NUHASH_BYTES];
|
||||
char hexstr[NUHASH_CHARS];
|
||||
|
||||
/* compute hash */
|
||||
nuhash_compute(get_data(), length(), digest);
|
||||
|
||||
/* print the result */
|
||||
puts(nuhash_tohex(digest, 0, hexstr));
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Command-line Usage
|
||||
==================
|
||||
|
||||
The **`nuhash`** command-line tool provides an interface similar to [`sha256sum`](https://linux.die.net/man/1/sha256sum) and friends:
|
||||
|
||||
```
|
||||
Usage:
|
||||
nuhash.exe [options] [<file_1> [... <file_n>]]
|
||||
|
||||
Options:
|
||||
-b --binary Output digest as binary, default is hex-string.
|
||||
-h --help Print the help screen and exit.
|
||||
-i --ignore Ignore interrupt signals.
|
||||
-l --line-mode Process the input file(s) as text, line by line.
|
||||
-p --progress Print progress, while computing the hash.
|
||||
-s --stop Stop on all errors, default is to keep going.
|
||||
-t --self-test Run the built-in self-test.
|
||||
-u --uppercase Print digest as uppercase, default is lowercase.
|
||||
-v --version Print version information and exit.
|
||||
```
|
||||
|
||||
### Example output:
|
||||
|
||||
```
|
||||
abe9d2f9f55d62951540397875f1104d0374a7ce3ca9e21cfde6efd638b75765885f186477669b79d78d13b6d1abe0a2 foo
|
||||
06573eaba880f77db3a9e6a085e3a4f8c1bf6f2997d6789bc38439d1f581e0907b21200aff43df37de27d241dc64d19e bar
|
||||
e26b0338b7a3d662397cbc1ff9f81ac8885ee71f861f5897fc3a7b113ea314994f749caf7618a4bfc1ac90727ef64f94 baz
|
||||
d113572666421a1e2cf6e17481f1f94b2b006e8c48504fea03e4b24d04930db4302368dc0e7bf44b104f7118bdd62f2d qux
|
||||
```
|
||||
|
||||
|
||||
Application Programming Interface (API)
|
||||
=======================================
|
||||
|
||||
C99 API
|
||||
-------
|
||||
|
||||
### Constants
|
||||
|
||||
The C99 API defines the following constants:
|
||||
|
||||
* **`NUHASH_WORDS`:** The size of the “raw” hash value (digest), in [`uint64_t`](https://cplusplus.com/reference/cstdint/) words.
|
||||
|
||||
* **`NUHASH_BYTES`:** The size of the “raw” hash value (digest), in bytes.
|
||||
|
||||
* **`NUHASH_CHARS`:** The size of the hash value (digest) encoded as a null-terminated “hex” string, in characters. This is twice the size of a “raw” hash value *plus* an additional slot for the terminating `\0` character.
|
||||
|
||||
### Simple
|
||||
|
||||
The ***simple*** API can be used to compute a hash value in an *“all at once”* fashion.
|
||||
|
||||
Use this API, if *all* input data is available at once. It can compute the hash value with as *single* function call.
|
||||
|
||||
#### `nuhash_compute()`
|
||||
|
||||
Compute the hash value from the given input data and return the resulting hash value (digest).
|
||||
|
||||
* Syntax:
|
||||
```c
|
||||
uint8_t *nuhash_compute(const uint8_t *const src, const size_t len, uint8_t *const out);
|
||||
```
|
||||
|
||||
* Parameters:
|
||||
- **`src`:** Pointer to the source array containing all input data to be processed (sequence of bytes).
|
||||
- **`len`:** The length of the input data, in bytes.
|
||||
- **`out`:** Pointer to the destination array where the hash value is stored, **must** be `NUHASH_BYTES` in size.
|
||||
|
||||
* Return value:
|
||||
- This function returns the given `out` pointer.
|
||||
|
||||
#### `nuhash_compute_with_key()`
|
||||
|
||||
Compute the hash value from the given input data and a user-defined key; returns the hash value (digest).
|
||||
|
||||
* Syntax:
|
||||
```c
|
||||
uint8_t *nuhash_compute_with_key(const uint8_t *const key, const size_t key_len,
|
||||
const uint8_t *const src, const size_t in_len, uint8_t *const out);
|
||||
```
|
||||
|
||||
* Parameters:
|
||||
- **`key`:** Pointer to the source array containing a user-defined key (sequence of bytes).
|
||||
- **`key_len`:** The length of the user-defined key, in bytes.
|
||||
- **`src`:** Pointer to the source array containing all input data to be processed (sequence of bytes).
|
||||
- **`in_len`:** The length of the input data, in bytes.
|
||||
- **`out`:** Pointer to the destination array where the hash value is stored, **must** be `NUHASH_BYTES` in size.
|
||||
|
||||
* Return value:
|
||||
- This function returns the given `out` pointer.
|
||||
|
||||
### Stream API
|
||||
|
||||
The ***stream*** API can be used to compute a hash value in a *“step by step”* fashion.
|
||||
|
||||
Use this API, if **not** all input data is available at once. The input data can be processed in chunks of arbitrary size.
|
||||
|
||||
#### `nuhash_t`
|
||||
|
||||
An object containing the state of an ongoing hash computation.
|
||||
|
||||
The application **shall** treat this type as an *opaque* data structure; it is **not** meant to be accessed directly!
|
||||
|
||||
#### `nuhash_init()`
|
||||
|
||||
Initialize or reset the state for a new hash computation.
|
||||
|
||||
This function is supposed to be called exactly *once* at the beginning of a new hash computation!
|
||||
|
||||
* Syntax:
|
||||
```c
|
||||
void nuhash_init(nuhash_t *const ctx);
|
||||
```
|
||||
|
||||
* Parameters:
|
||||
- **`ctx`:** Pointer to the `nuhash_t` instance to be initialized.
|
||||
|
||||
#### `nuhash_init_with_key()`
|
||||
|
||||
Initialize or reset the state for a new hash computation with a user-defined key.
|
||||
|
||||
This function is supposed to be called exactly *once* at the beginning of a new hash computation!
|
||||
|
||||
* Syntax:
|
||||
```c
|
||||
void nuhash_init_with_key(nuhash_t *const ctx, const uint8_t *const key, const size_t len);
|
||||
```
|
||||
|
||||
* Parameters:
|
||||
- **`ctx`:** Pointer to the `nuhash_t` instance to be initialized.
|
||||
- **`key`:** Pointer to the source array containing the user-defined key (sequence of bytes).
|
||||
- **`len`:** The length of the user-defined key, in bytes.
|
||||
|
||||
#### `nuhash_update()`
|
||||
|
||||
Process the next chunk of input data and update the state.
|
||||
|
||||
This function is supposed to be called *repeatedly* until all the input data has been processed!
|
||||
|
||||
* Syntax:
|
||||
```c
|
||||
void nuhash_update(nuhash_t *const ctx, const uint8_t *const src, const size_t len);
|
||||
```
|
||||
|
||||
* Parameters:
|
||||
- **`ctx`:** Pointer to the `nuhash_t` instance to be updated.
|
||||
- **`src`:** Pointer to the source array containing the next chunk of input data (sequence of bytes).
|
||||
- **`len`:** The length of the input data, in bytes.
|
||||
|
||||
#### `nuhash_final()`
|
||||
|
||||
Finish the hash computation and return the resulting hash value (digest).
|
||||
|
||||
This function is supposed to be called exactly *once* after all the input data has been processed! After calling this function, the `nuhash_t` instance is **invalidated**; it must be [*reset*](#nuhash_init) in order to start a new hash computation.
|
||||
|
||||
* Syntax:
|
||||
```c
|
||||
uint8_t *nuhash_final(nuhash_t *const ctx, uint8_t *const out);
|
||||
```
|
||||
|
||||
* Parameters:
|
||||
- **`ctx`:** Pointer to the `nuhash_t` instance to be updated.
|
||||
- **`out`:** Pointer to the destination array where the hash value is stored, **must** be `NUHASH_BYTES` in size.
|
||||
|
||||
* Return value:
|
||||
- This function returns the given `out` pointer.
|
||||
|
||||
### Utilities
|
||||
|
||||
The C99 API also provides a few additional utility functions that may be helpful.
|
||||
|
||||
#### `nuhash_tohex()`
|
||||
|
||||
Converts a “raw” hash value (digest) into a null-terminated “hex” string.
|
||||
|
||||
* Syntax:
|
||||
```c
|
||||
char *nuhash_tohex(const uint8_t *const hash, const int upper, char *const out);
|
||||
```
|
||||
|
||||
* Parameters:
|
||||
- **`hash`:** Pointer to the source array containing the “raw” hash value, **must** be `NUHASH_BYTES` in size.
|
||||
- **`upper`:** If non-zero, generate upper-case characters; otherwise generate lower-case characters.
|
||||
- **`out`:** Pointer to the destination array where the “hex” string is stored, **must** be `NUHASH_CHARS` in size.
|
||||
|
||||
* Return value:
|
||||
- This function returns the given `out` pointer.
|
||||
|
||||
#### `nuhash_version()`
|
||||
|
||||
Returns the version number and the build date of the current *libnuhash* library.
|
||||
|
||||
* Syntax:
|
||||
```c
|
||||
char *nuhash_version(uint16_t version[3U], char *const build);
|
||||
```
|
||||
|
||||
* Parameters:
|
||||
- **`version`:** Pointer to the destination array where the *major*, *minor* and *patch* version are stored.
|
||||
- **`build`:** Pointer to the destination array where the build date is stored, **must** be 12 characters in size.
|
||||
|
||||
* Return value:
|
||||
- This function returns the given `build` pointer.
|
||||
|
||||
### Thread-safety
|
||||
|
||||
All functions provided by ***libnuhash*** are *thread-safe* and *reentrant*, in the sense that there is **no** implicitly shared “global” state; the functions operate strictly on the given input parameters. Specifically, the functions of the “stream” API maintain **all** state of the hash computation within the given `nuhash_t` instance. This means that these functions are *thread-safe* and *reentrant* as long as each “concurrent” invocation uses its own separate `nuhash_t` instance; **no** synchronization is required in that case. However, *libnuhash* makes **no** attempt to coordinate the access to the *same* `nuhash_t` instance between concurrent threads. If the *same* `nuhash_t` instance needs to be accessed by *multiple* concurrent threads (which generally is **not** advised), then the application is responsible for *serializing* all access to that “shared” instance, e.g. by using a [*mutex*](https://pubs.opengroup.org/onlinepubs/009604499/functions/pthread_mutex_lock.html) lock! Reentrancy can **not** be achieved with a single “shared” `nuhash_t`.
|
||||
|
||||
|
||||
|
||||
Source Code
|
||||
===========
|
||||
|
||||
The source code is available from these [Git](https://git-scm.com/) mirrors:
|
||||
|
||||
* `git clone https://github.com/lordmulder/NuHash.git` ([Browse](https://github.com/lordmulder/NuHash))
|
||||
* `git clone https://bitbucket.org/muldersoft/nuhash.git` ([Browse](https://bitbucket.org/muldersoft/nuhash/))
|
||||
* `git clone https://gitlab.com/lord_mulder/nuhash.git` ([Browse](https://gitlab.com/lord_mulder/nuhash))
|
||||
* `git clone https://repo.or.cz/nuhash.git` ([Browse](https://repo.or.cz/nuhash.git))
|
||||
* `git clone https://punkindrublic.mooo.com:3000/Muldersoft/NuHash.git` ([Browse](https://punkindrublic.mooo.com:3000/Muldersoft/NuHash))
|
||||
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
This work has been released under the **CC0 1.0 Universal** license.
|
||||
|
||||
For details, please refer to:
|
||||
<https://creativecommons.org/publicdomain/zero/1.0/legalcode>
|
||||
|
||||
Acknowledgment
|
||||
--------------
|
||||
|
||||
Licenses for third-party components used by NuHash:
|
||||
|
||||
* [**Hash icons**](https://www.flaticon.com/free-icons/hash)
|
||||
Created by Vectors Market – Flaticon. Free for personal and commercial use with attribution.
|
||||
|
||||
▮
|
33
etc/build/cygwin/mk-release.sh
Executable file
33
etc/build/cygwin/mk-release.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../../.."
|
||||
|
||||
mk_nuhash() {
|
||||
local command="make -B CC=${2} MARCH=${3} MTUNE=${4} STATIC=1 STRIP=1"
|
||||
$BASH -x -c "${command}"
|
||||
mv -vf "${PWD}/bin/nuhash" "${PWD}/out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [[ "$(uname -s)" != "CYGWIN_NT"* ]]; then
|
||||
echo "This script is supposed to run on the Cygwin platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[[ "${1}" == "--no-remove" ]] || rm -vrf "${PWD}/out" && mkdir -vp "${PWD}/out"
|
||||
$BASH -x -c "make clean"
|
||||
|
||||
case "$(uname -m)" in
|
||||
x86_64)
|
||||
mk_nuhash "x86_64" "clang" "x86-64" "znver3"
|
||||
;;
|
||||
i686)
|
||||
mk_nuhash "i686" "gcc" "pentiumpro" "generic"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown host CPU type !!!"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
cp -vf "$(which cygwin1.dll)" "${PWD}/out"
|
||||
|
||||
echo "Build completed successfully."
|
22
etc/build/dragonfly/mk-release.sh
Executable file
22
etc/build/dragonfly/mk-release.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
# pkg install llvm14
|
||||
set -e
|
||||
cd -- "$(dirname -- "${0}")/../../.."
|
||||
|
||||
mk_nuhash() {
|
||||
local command="gmake -B CC=clang14 STATIC=1 STRIP=1 ${2}"
|
||||
$SHELL -x -c "${command}"
|
||||
mv -vf "${PWD}/bin/nuhash" "${PWD}/out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [ "$(uname -sm)" != "DragonFly x86_64" ]; then
|
||||
echo "This script is supposed to run on the DragonFly (x86_64) platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "${PWD}/out" && mkdir -p "${PWD}/out"
|
||||
$SHELL -x -c "gmake clean"
|
||||
|
||||
mk_nuhash "x86_64" "MARCH=x86-64 MTUNE=znver3"
|
||||
|
||||
printf "\033[1;32m\nBuild completed successfully.\033[0m\n\n"
|
35
etc/build/freebsd/mk-release.sh
Executable file
35
etc/build/freebsd/mk-release.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
# pkg install {armv7,aarch64,powerpc,powerpc64,powerpc64le,riscv64}-freebsd-sysroot
|
||||
set -e
|
||||
cd -- "$(dirname -- "${0}")/../../.."
|
||||
|
||||
mk_nuhash1() {
|
||||
local command="gmake -B CPU=${1} STATIC=1 STRIP=1 FLTO=1 ${3}"
|
||||
$SHELL -x -c "${command}"
|
||||
mv -vf "${PWD}/bin/nuhash" "${PWD}/out/nuhash-${2}"
|
||||
}
|
||||
|
||||
mk_nuhash2() {
|
||||
local command="gmake -B TARGET=${1}-unknown-freebsd SYSROOT=/usr/local/freebsd-sysroot/${1} STATIC=1 STRIP=1"
|
||||
$SHELL -x -c "${command}"
|
||||
mv -vf "${PWD}/bin/nuhash" "${PWD}/out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [ "$(uname -sm)" != "FreeBSD amd64" ]; then
|
||||
echo "This script is supposed to run on the FreeBSD (amd64) platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "${PWD}/out" && mkdir -p "${PWD}/out"
|
||||
$SHELL -x -c "gmake clean"
|
||||
|
||||
mk_nuhash1 32 "i686" "MARCH=pentiumpro MTUNE=generic"
|
||||
mk_nuhash1 64 "x86_64" "MARCH=x86-64 MTUNE=znver3"
|
||||
mk_nuhash2 "armv7"
|
||||
mk_nuhash2 "aarch64"
|
||||
mk_nuhash2 "powerpc"
|
||||
mk_nuhash2 "powerpc64"
|
||||
mk_nuhash2 "powerpc64le"
|
||||
mk_nuhash2 "riscv64"
|
||||
|
||||
printf "\033[1;32m\nBuild completed successfully.\033[0m\n\n"
|
21
etc/build/gnuhurd/mk-release.sh
Executable file
21
etc/build/gnuhurd/mk-release.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../../.."
|
||||
|
||||
function mk_nuhash() {
|
||||
local command="make -B CC=gcc STATIC=1 STRIP=1 FLTO=1"
|
||||
$BASH -x -c "${command}${2:+ ${2}}"
|
||||
mv -vf "${PWD}/bin/nuhash" "${PWD}/out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [[ "$(uname -sm)" != "GNU i686-AT386" ]]; then
|
||||
echo "This script is supposed to run on the GNU Hurd (i686) platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "${PWD}/out" && mkdir -p "${PWD}/out"
|
||||
$BASH -x -c "make clean"
|
||||
|
||||
mk_nuhash "i686" "MARCH=pentiumpro MTUNE=generic"
|
||||
|
||||
printf "\033[1;32m\nBuild completed successfully.\033[0m\n\n"
|
32
etc/build/haiku/mk-release.sh
Executable file
32
etc/build/haiku/mk-release.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
# pkgman install llvm12_clang
|
||||
set -e
|
||||
cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../../.."
|
||||
|
||||
mk_nuhash() {
|
||||
local command="make -B CC=${2} MARCH=${3} MTUNE=${4} STATIC=1 STRIP=1"
|
||||
$BASH -x -c "${command}"
|
||||
mv -vf "bin/nuhash" "out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [ "$(uname)" != "Haiku" ]; then
|
||||
echo "This script is supposed to run on the Haiku platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "out" && mkdir -p "out"
|
||||
$BASH -x -c "make clean"
|
||||
|
||||
case "${BE_HOST_CPU}" in
|
||||
x86_64)
|
||||
mk_nuhash "x86_64" "clang-12" "x86-64" "znver3"
|
||||
;;
|
||||
x86)
|
||||
mk_nuhash "i686" "gcc-x86" "pentiumpro" "generic"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown host CPU type !!!"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
echo "Build completed successfully."
|
52
etc/build/linux/mk-libmusl.sh
Executable file
52
etc/build/linux/mk-libmusl.sh
Executable file
@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
# sudo apt install clang crossbuild-essential-{i386,armel,armhf,arm64,mips,mipsel,mips64,mips64el,mips64r6,mips64r6el,s390x,riscv64}
|
||||
set -e
|
||||
cd -- "$(dirname -- "${BASH_SOURCE[0]}")"
|
||||
|
||||
function mk_musl() {
|
||||
for cc in gcc clang; do
|
||||
local outdir="/usr/local/musl/${1}-${cc}"
|
||||
local build="${PWD}/musl-build"
|
||||
rm -rf "${build}" && mkdir -p "${build}"
|
||||
tar -xvf "${PWD}/musl-latest.tar.gz" --strip-components=1 -C "${build}"
|
||||
pushd "${build}"
|
||||
local optdirs="$(find './src' -mindepth 1 -maxdepth 1 -type d -printf '%f,' | sed 's/,$//g')"
|
||||
if [ "${cc}" == "clang" ]; then
|
||||
CC="${cc} --target=${2}" ./configure --enable-optimize="${optdirs}" --disable-shared --enable-wrapper=${cc} --prefix="${outdir}" --host="${2}"
|
||||
else
|
||||
CC="${2}-${cc}" ./configure --enable-optimize="${optdirs}" --disable-shared --enable-wrapper=${cc} --prefix="${outdir}" --host="${2}"
|
||||
fi
|
||||
make
|
||||
sudo rm -rf "${outdir}" && sudo make install
|
||||
popd
|
||||
done
|
||||
}
|
||||
|
||||
if [[ "$(uname -sm)" != "Linux x86_64" ]]; then
|
||||
echo "This script is supposed to run on the Linux (x86_64) platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! which gcc clang > /dev/null; then
|
||||
echo "Please make sure that \"gcc\" and \"clang\" are installed !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -f "${PWD}/musl-latest.tar.gz"
|
||||
curl -vkf -o "${PWD}/musl-latest.tar.gz" "https://musl.libc.org/releases/musl-latest.tar.gz"
|
||||
|
||||
mk_musl x86_64 x86_64-linux-gnu
|
||||
mk_musl i686 i686-linux-gnu
|
||||
mk_musl armel arm-linux-gnueabi
|
||||
mk_musl armhf arm-linux-gnueabihf
|
||||
mk_musl arm64 aarch64-linux-gnu
|
||||
mk_musl mips mips-linux-gnu
|
||||
mk_musl mipsel mipsel-linux-gnu
|
||||
mk_musl mips64 mips64-linux-gnuabi64
|
||||
mk_musl mips64el mips64el-linux-gnuabi64
|
||||
mk_musl mips64r6 mipsisa64r6-linux-gnuabi64
|
||||
mk_musl mips64r6el mipsisa64r6el-linux-gnuabi64
|
||||
mk_musl s390x s390x-linux-gnu
|
||||
mk_musl riscv64 riscv64-linux-gnu
|
||||
|
||||
rm -rvf "${PWD}/musl-build"
|
36
etc/build/linux/mk-release.sh
Executable file
36
etc/build/linux/mk-release.sh
Executable file
@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
# See "etc/utils/linux/mk-libmusl.sh" in order to build musl libc!
|
||||
set -e
|
||||
cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../../.."
|
||||
|
||||
function mk_nuhash() {
|
||||
local command="make -B CC=/usr/local/musl/${1}-${3:-clang}/bin/musl-${3:-clang} STATIC=1 STRIP=1 FLTO=1"
|
||||
$BASH -x -c "${command}${2:+ ${2}}"
|
||||
mv -vf "${PWD}/bin/nuhash" "${PWD}/out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [[ "$(uname -sm)" != "Linux x86_64" ]]; then
|
||||
echo "This script is supposed to run on the Linux (x86_64) platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -vrf "${PWD}/out" && mkdir -vp "${PWD}/out"
|
||||
$BASH -x -c "make clean"
|
||||
|
||||
mk_nuhash "x86_64" "MARCH=x86-64 MTUNE=znver3"
|
||||
mk_nuhash "i686" "MARCH=pentiumpro MTUNE=generic"
|
||||
mk_nuhash "armel"
|
||||
mk_nuhash "armhf"
|
||||
mk_nuhash "arm64"
|
||||
mk_nuhash "mips"
|
||||
mk_nuhash "mipsel"
|
||||
mk_nuhash "mips64" "" "gcc"
|
||||
mk_nuhash "mips64el" "" "gcc"
|
||||
mk_nuhash "mips64r6" "" "gcc"
|
||||
mk_nuhash "mips64r6el" "" "gcc"
|
||||
mk_nuhash "s390x"
|
||||
mk_nuhash "riscv64"
|
||||
|
||||
$BASH -x -c "pandoc --standalone --embed-resources --css \"${PWD}/etc/style/gh-pandoc.min.css\" --metadata title=\"NuHash README\" -o \"${PWD}/out/README.html\" \"${PWD}/README.md\""
|
||||
|
||||
printf "\033[1;32m\nBuild completed successfully.\033[0m\n\n"
|
1
etc/build/macos/hdiutil.txt
Normal file
1
etc/build/macos/hdiutil.txt
Normal file
@ -0,0 +1 @@
|
||||
sudo hdiutil create archive.dmg -ov -volname "NuHash" -fs HFS+ -srcfolder out
|
24
etc/build/macos/mk-release.sh
Executable file
24
etc/build/macos/mk-release.sh
Executable file
@ -0,0 +1,24 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
cd -- "$(dirname -- "${0}")/../../.."
|
||||
|
||||
mk_nuhash() {
|
||||
local command="make -B TARGET=${1}-apple-darwin FLTO=1"
|
||||
$SHELL -x -c "${command}"
|
||||
mv -vf "${PWD}/bin/nuhash" "${PWD}/out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [ "$(uname)" != "Darwin" ]; then
|
||||
echo "This script is supposed to run on the MacOS platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "${PWD}/out" && mkdir -p "${PWD}/out"
|
||||
$SHELL -x -c "make clean"
|
||||
|
||||
mk_nuhash "x86_64"
|
||||
mk_nuhash "aarch64"
|
||||
|
||||
find "${PWD}/out" -type f -name 'nuhash-*' -exec $SHELL -x -c "strip \"{}\"" \;
|
||||
|
||||
printf "\033[1;32m\nBuild completed successfully.\033[0m\n\n"
|
27
etc/build/mingw/mk-clang.cmd
Normal file
27
etc/build/mingw/mk-clang.cmd
Normal file
@ -0,0 +1,27 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
|
||||
if "%MSYS2_DIR%"=="" (
|
||||
set "MSYS2_DIR=C:\msys64"
|
||||
)
|
||||
|
||||
if not exist "%MSYS2_DIR%\msys2_shell.cmd" (
|
||||
echo MSYS2 shell not found. Please check MSYS2_DIR and try again!
|
||||
pause
|
||||
goto:eof
|
||||
)
|
||||
|
||||
if exist "%~dp0..\..\..\out" (
|
||||
rmdir /S /Q "%~dp0..\..\..\out"
|
||||
)
|
||||
|
||||
for %%m in (32,64) do (
|
||||
echo ========================================================================
|
||||
echo Clang%%m
|
||||
echo ========================================================================
|
||||
echo.
|
||||
call "%MSYS2_DIR%\msys2_shell.cmd" -clang%%m -no-start -defterm -where "%~dp0" -c "./mk-release.sh --no-remove"
|
||||
echo.
|
||||
)
|
||||
|
||||
pause
|
27
etc/build/mingw/mk-gcc.cmd
Normal file
27
etc/build/mingw/mk-gcc.cmd
Normal file
@ -0,0 +1,27 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
|
||||
if "%MSYS2_DIR%"=="" (
|
||||
set "MSYS2_DIR=C:\msys64"
|
||||
)
|
||||
|
||||
if not exist "%MSYS2_DIR%\msys2_shell.cmd" (
|
||||
echo MSYS2 shell not found. Please check MSYS2_DIR and try again!
|
||||
pause
|
||||
goto:eof
|
||||
)
|
||||
|
||||
if exist "%~dp0..\..\..\out" (
|
||||
rmdir /S /Q "%~dp0..\..\..\out"
|
||||
)
|
||||
|
||||
for %%m in (32,64) do (
|
||||
echo ========================================================================
|
||||
echo MinGW%%m
|
||||
echo ========================================================================
|
||||
echo.
|
||||
call "%MSYS2_DIR%\msys2_shell.cmd" -mingw%%m -no-start -defterm -where "%~dp0" -c "./mk-release.sh --no-remove"
|
||||
echo.
|
||||
)
|
||||
|
||||
pause
|
37
etc/build/mingw/mk-release.sh
Executable file
37
etc/build/mingw/mk-release.sh
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../../.."
|
||||
|
||||
mk_nuhash() {
|
||||
local command="make -B CC=${2} MARCH=${3} MTUNE=${4} STATIC=1 STRIP=1 FLTO=1"
|
||||
$BASH -x -c "${command}"
|
||||
mv -vf "${PWD}/bin/nuhash" "${PWD}/out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [[ "$(uname -so)" != "MINGW"*" Msys" ]]; then
|
||||
echo "This script is supposed to run on the Mingw-w64 platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[[ "${1}" == "--no-remove" ]] || rm -vrf "${PWD}/out" && mkdir -vp "${PWD}/out"
|
||||
$BASH -x -c "make clean"
|
||||
|
||||
case "$MSYSTEM" in
|
||||
MINGW64)
|
||||
mk_nuhash "x86_64" "gcc" "x86-64" "znver3"
|
||||
;;
|
||||
MINGW32)
|
||||
mk_nuhash "i686" "gcc" "pentiumpro" "generic"
|
||||
;;
|
||||
CLANG64)
|
||||
mk_nuhash "x86_64" "clang" "x86-64" "znver3"
|
||||
;;
|
||||
CLANG32)
|
||||
mk_nuhash "i686" "clang" "pentiumpro" "generic"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown host CPU type !!!"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
echo "Build completed successfully."
|
22
etc/build/netbsd/mk-release.sh
Executable file
22
etc/build/netbsd/mk-release.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/bin/ksh
|
||||
set -e
|
||||
cd -- "$(dirname -- "${0}")/../../.."
|
||||
|
||||
mk_nuhash() {
|
||||
local command="gmake -B CC=clang CPU=${1} MARCH=${3} MTUNE=${4} STATIC=1 STRIP=1"
|
||||
$SHELL -x -c "${command}"
|
||||
mv -vf "bin/nuhash" "out/nuhash-${2}"
|
||||
}
|
||||
|
||||
if [ "$(uname)" != "NetBSD" ]; then
|
||||
echo "This script is supposed to run on the OpenBSD platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "out" && mkdir -p "out"
|
||||
$SHELL -x -c "gmake clean"
|
||||
|
||||
mk_nuhash 32 "i686" "pentiumpro" "generic"
|
||||
mk_nuhash 64 "x86_64" "x86-64" "znver3"
|
||||
|
||||
echo "Build completed successfully."
|
31
etc/build/openbsd/mk-release.sh
Executable file
31
etc/build/openbsd/mk-release.sh
Executable file
@ -0,0 +1,31 @@
|
||||
#!/bin/ksh
|
||||
set -e
|
||||
cd -- "$(dirname -- "${0}")/../../.."
|
||||
|
||||
mk_nuhash() {
|
||||
local command="gmake -B MARCH=${2} MTUNE=${3} STATIC=1 STRIP=1 FLTO=1"
|
||||
$SHELL -x -c "${command}"
|
||||
mv -vf "bin/nuhash" "out/nuhash-${1}"
|
||||
}
|
||||
|
||||
if [ "$(uname)" != "OpenBSD" ]; then
|
||||
echo "This script is supposed to run on the OpenBSD platform !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "out" && mkdir -p "out"
|
||||
$SHELL -x -c "gmake clean"
|
||||
|
||||
case "$(arch -s)" in
|
||||
amd64)
|
||||
mk_nuhash "x86_64" "x86-64" "znver3"
|
||||
;;
|
||||
i386)
|
||||
mk_nuhash "i686" "pentiumpro" "generic"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown host CPU type !!!"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
echo "Build completed successfully."
|
BIN
etc/images/nuhash_logo.png
Normal file
BIN
etc/images/nuhash_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 213 KiB |
BIN
etc/images/table_xor.png
Normal file
BIN
etc/images/table_xor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
1
etc/style/gh-pandoc.min.css
vendored
Normal file
1
etc/style/gh-pandoc.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
109
libnuhash/include/nuhash.h
Normal file
109
libnuhash/include/nuhash.h
Normal file
@ -0,0 +1,109 @@
|
||||
/******************************************************************************/
|
||||
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef _INC_LIBNUHASH_H
|
||||
#define _INC_LIBNUHASH_H
|
||||
|
||||
#ifndef __cplusplus
|
||||
# include <stdlib.h>
|
||||
# include <stdint.h>
|
||||
#else
|
||||
# include <cstdlib>
|
||||
# include <cstdint>
|
||||
#endif
|
||||
|
||||
#define NUHASH_WORDS 6U
|
||||
#define NUHASH_BYTES (sizeof(uint64_t) * NUHASH_WORDS)
|
||||
#define NUHASH_CHARS ((2U * NUHASH_BYTES) + 1U)
|
||||
|
||||
/* Must be defined to build/use DLL */
|
||||
#ifdef LIBNUHASH_DLL
|
||||
# ifdef LIBNUHASH_EXPORTS
|
||||
# define NUHASH_API __declspec(dllexport)
|
||||
# else
|
||||
# define NUHASH_API __declspec(dllimport)
|
||||
# endif
|
||||
#else
|
||||
# define NUHASH_API
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* C99 API */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t hash[NUHASH_WORDS];
|
||||
}
|
||||
nuhash_t;
|
||||
|
||||
/* Stream API */
|
||||
NUHASH_API void nuhash_init(nuhash_t *const ctx);
|
||||
NUHASH_API void nuhash_init_with_key(nuhash_t *const ctx, const uint8_t *const key, const size_t len);
|
||||
NUHASH_API void nuhash_update(nuhash_t *const ctx, const uint8_t *const src, const size_t len);
|
||||
NUHASH_API uint8_t *nuhash_final(nuhash_t *const ctx, uint8_t *const out);
|
||||
|
||||
/* Simple API */
|
||||
NUHASH_API uint8_t *nuhash_compute(const uint8_t *const src, const size_t len, uint8_t *const out);
|
||||
NUHASH_API uint8_t *nuhash_compute_with_key(const uint8_t *const key, const size_t key_len, const uint8_t *const src, const size_t in_len, uint8_t *const out);
|
||||
|
||||
/* Utilities */
|
||||
NUHASH_API char *nuhash_tohex(const uint8_t *const hash, const int upper, char *const out);
|
||||
NUHASH_API char *nuhash_version(uint16_t version[3U], char *const build);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* C++ API */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
#if defined(__cplusplus) && !defined(NUHASH_NO_CPLUSPLUS)
|
||||
|
||||
#include <vector>
|
||||
#include <array>
|
||||
#include <string>
|
||||
|
||||
class NuHash
|
||||
{
|
||||
public:
|
||||
NuHash(void) { reset(); }
|
||||
NuHash(const std::vector<uint8_t> &key) { reset(key); }
|
||||
void update(const uint8_t *const src, const size_t len) { ::nuhash_update(&m_ctx, src, len); }
|
||||
void update(const uint8_t src) { ::nuhash_update(&m_ctx, &src, sizeof(uint8_t)); }
|
||||
void update(const std::vector<uint8_t> &src) { ::nuhash_update(&m_ctx, src.data(), src.size()); }
|
||||
void update(const std::string &src) { ::nuhash_update(&m_ctx, reinterpret_cast<const uint8_t*>(src.c_str()), src.size()); }
|
||||
std::string do_final(const bool uppercase = false);
|
||||
void do_final(std::array <uint8_t, NUHASH_BYTES> &out) { ::nuhash_final(&m_ctx, out.data()); }
|
||||
void reset(void) { ::nuhash_init(&m_ctx); }
|
||||
void reset(const std::vector<uint8_t> &key) { ::nuhash_init_with_key(&m_ctx, key.data(), key.size()); }
|
||||
static std::string version(std::array <uint16_t, 3U> &version);
|
||||
private:
|
||||
nuhash_t m_ctx;
|
||||
NuHash(const NuHash&) { std::abort(); }
|
||||
NuHash &operator=(const NuHash&) { std::abort(); }
|
||||
};
|
||||
|
||||
std::string NuHash::do_final(const bool uppercase)
|
||||
{
|
||||
std::array<uint8_t, NUHASH_BYTES> digest;
|
||||
std::array<char, NUHASH_CHARS> hex;
|
||||
return std::string(::nuhash_tohex(::nuhash_final(&m_ctx, digest.data()), uppercase, hex.data()));
|
||||
}
|
||||
|
||||
std::string NuHash::version(std::array <uint16_t, 3U> &version)
|
||||
{
|
||||
std::array<char, 12U> build;
|
||||
return std::string(::nuhash_version(version.data(), build.data()));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /*_INC_LIBNUHASH_H*/
|
463
libnuhash/libnuhash.vcxproj
Normal file
463
libnuhash/libnuhash.vcxproj
Normal file
@ -0,0 +1,463 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|ARM64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_DLL|ARM64">
|
||||
<Configuration>Release_DLL</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_DLL|Win32">
|
||||
<Configuration>Release_DLL</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_DLL|x64">
|
||||
<Configuration>Release_DLL</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\nuhash.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\nuhash.h" />
|
||||
<ClInclude Include="src\version.h" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{8fa5c597-887d-46bc-a6c9-2183aef7b793}</ProjectGuid>
|
||||
<RootNamespace>libnuhash</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.20348.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>libnuhash-1</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;LIBNUHASH_EXPORTS;WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<MinimumRequiredVersion>5.1</MinimumRequiredVersion>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;LIBNUHASH_EXPORTS;NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<MinimumRequiredVersion>5.2</MinimumRequiredVersion>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;LIBNUHASH_EXPORTS;NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
30
libnuhash/libnuhash.vcxproj.filters
Normal file
30
libnuhash/libnuhash.vcxproj.filters
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Quelldateien">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Headerdateien">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Ressourcendateien">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\nuhash.c">
|
||||
<Filter>Quelldateien</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\nuhash.h">
|
||||
<Filter>Headerdateien</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\version.h">
|
||||
<Filter>Headerdateien</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
554
libnuhash/src/nuhash.c
Normal file
554
libnuhash/src/nuhash.c
Normal file
@ -0,0 +1,554 @@
|
||||
/******************************************************************************/
|
||||
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
#include "nuhash.h"
|
||||
#include "version.h"
|
||||
#include <string.h>
|
||||
|
||||
#define COUNT_OF(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0]))
|
||||
|
||||
#define ROUNDS 5U
|
||||
|
||||
/* Compiler inline support */
|
||||
#if defined(_MSC_VER) && !defined(__INTEL_LLVM_COMPILER)
|
||||
# define INLINE __forceinline
|
||||
#elif defined(__GNUC__) || defined(__clang__) || defined(__INTEL_LLVM_COMPILER)
|
||||
# define INLINE __attribute__((always_inline)) __inline__
|
||||
#else
|
||||
# define INLINE inline
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Version */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static const uint8_t VERSION_MAJOR = NUHASH_VERSION_MAJOR;
|
||||
static const uint8_t VERSION_MINOR = NUHASH_VERSION_MINOR;
|
||||
static const uint8_t VERSION_PATCH = NUHASH_VERSION_PATCH;
|
||||
|
||||
static const char *const BUILD_DATE = __DATE__;
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Const tables */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
/* 48 byte initialization vector containing the first 384 bits of PI */
|
||||
static const uint64_t NUHASH_INI[NUHASH_WORDS] =
|
||||
{
|
||||
UINT64_C(0x243F6A8885A308D3), UINT64_C(0x13198A2E03707344), UINT64_C(0xA4093822299F31D0),
|
||||
UINT64_C(0x082EFA98EC4E6C89), UINT64_C(0x452821E638D01377), UINT64_C(0xBE5466CF34E90C6C)
|
||||
};
|
||||
|
||||
/* 257x48 byte matrix containing pre-computed 384-bit words with HamD(a,b) >= 182 for each pair (a,b) with a != b */
|
||||
static const uint64_t NUHASH_XOR[257U][NUHASH_WORDS] =
|
||||
{
|
||||
{ UINT64_C(0x01DCDF00414B3037), UINT64_C(0xB1B3AF661B8E96F8), UINT64_C(0x944D2873DB393121), UINT64_C(0x73DA9A36662AE755), UINT64_C(0x1F4F318C4ECB56B1), UINT64_C(0xF09743D99C2AA5BC) }, /*00*/
|
||||
{ UINT64_C(0xA81FBBC6CBBFC954), UINT64_C(0x39DE43648959EDDB), UINT64_C(0x1A641A0BDA01822F), UINT64_C(0xB52E607266932658), UINT64_C(0x2C5B1731AC802084), UINT64_C(0xC2EF10671FC79DD4) }, /*01*/
|
||||
{ UINT64_C(0xCF2A8D8E08810046), UINT64_C(0x8B7E9B2089E268F6), UINT64_C(0x930461652C5D2DEC), UINT64_C(0xF096E42223BFC8B9), UINT64_C(0x8DD338964CFE0970), UINT64_C(0x269C342F7CEC60BD) }, /*02*/
|
||||
{ UINT64_C(0xB970A920D2ED0552), UINT64_C(0x010F894A254DA7E1), UINT64_C(0x8D5F205F9D1A40D8), UINT64_C(0x50C33DCCC3FD5F58), UINT64_C(0xB49F31BDE7D82C57), UINT64_C(0x7CDE04F62A959033) }, /*03*/
|
||||
{ UINT64_C(0x49FAB2822B9C84AC), UINT64_C(0x34B8648CD68CBEF1), UINT64_C(0xE5121147BB4126DE), UINT64_C(0xC0B31F54B2FFE00F), UINT64_C(0x2F193DA38E8CC632), UINT64_C(0x058C984B429B8AFC) }, /*04*/
|
||||
{ UINT64_C(0xE07F9DA44D8C9942), UINT64_C(0xBE2AF9B39ACA65F2), UINT64_C(0x5D3D8FB1466DC295), UINT64_C(0xC0051E3EC3F962C7), UINT64_C(0xF8FDC3CCD4CE2BB6), UINT64_C(0x9024C0EFC6199937) }, /*05*/
|
||||
{ UINT64_C(0xA3111377EF01F5EF), UINT64_C(0x31F59B366C02A3FF), UINT64_C(0x61B82949760D16DC), UINT64_C(0xF6B958AF92BD3BDF), UINT64_C(0x7297AAEFEC69C0B2), UINT64_C(0xFE8A50AD9E8684CD) }, /*06*/
|
||||
{ UINT64_C(0x3D3DD0C829EA9AA0), UINT64_C(0x3E77597EEC96C7A3), UINT64_C(0x8FD038231E7F1684), UINT64_C(0x64617B131FB7EDE0), UINT64_C(0x85C99CE4C5405874), UINT64_C(0xA58735D41F19C5E3) }, /*07*/
|
||||
{ UINT64_C(0x8028628ACAF91B9A), UINT64_C(0x194A640538C97064), UINT64_C(0x04A15E018A4F1680), UINT64_C(0xF4BE1B04C2360955), UINT64_C(0xDFB24D4CEF581A20), UINT64_C(0x3C59D0A0FD15879D) }, /*08*/
|
||||
{ UINT64_C(0x88F8E2ECE78AF1BC), UINT64_C(0xB46B6E22297364C2), UINT64_C(0x9339F17F926B99F3), UINT64_C(0x31293489B3B8F07C), UINT64_C(0x3909CE1649C9BCF1), UINT64_C(0x0C46103BFA31BCE9) }, /*09*/
|
||||
{ UINT64_C(0x4D1A0B8CC7EFE2A9), UINT64_C(0xAFD7878CAD55E871), UINT64_C(0xC89CFBC858CF4153), UINT64_C(0xC4739486C74F75D6), UINT64_C(0x0BF7192C130AC9F2), UINT64_C(0x0084F2BC5E81BD9A) }, /*0A*/
|
||||
{ UINT64_C(0x4AFBE975014FCACF), UINT64_C(0x41DEAF8CFACC41E4), UINT64_C(0x3C1EC23B53ED16E9), UINT64_C(0x78B06EB30F1C3248), UINT64_C(0xDD11165D04285C72), UINT64_C(0x6546D9B5609491E4) }, /*0B*/
|
||||
{ UINT64_C(0xFFD1E2E04DC8D260), UINT64_C(0x07B186948A74ECCE), UINT64_C(0xB5120E45121AC531), UINT64_C(0xBD0BC86330810C85), UINT64_C(0xDE93AFDDDB487730), UINT64_C(0x78DEB0DE6EB99196) }, /*0C*/
|
||||
{ UINT64_C(0x79BAA2AC3FDEBA55), UINT64_C(0xB1B7E3E1C92A567E), UINT64_C(0xA53F69AB4A5B0794), UINT64_C(0xF0DA7499954F6DDD), UINT64_C(0x58117C89E1132248), UINT64_C(0xD95DF5F794C51A6E) }, /*0D*/
|
||||
{ UINT64_C(0x89BC8A0C65091C33), UINT64_C(0xB04EEAEE063135C2), UINT64_C(0xF53267E04AB6E689), UINT64_C(0xB4C579B7207E8BF2), UINT64_C(0x3FD31E51343CD2DF), UINT64_C(0x119E523E2F8197FE) }, /*0E*/
|
||||
{ UINT64_C(0x2E10CB1C6060F32D), UINT64_C(0xBC92E732A94E6B63), UINT64_C(0xF3220D831FD04267), UINT64_C(0x502C5F7414BCE87F), UINT64_C(0x89E0651DE91D2457), UINT64_C(0x759E56B04482D915) }, /*0F*/
|
||||
{ UINT64_C(0x43AEE32C6A84E803), UINT64_C(0x0C5007202C0BD7E3), UINT64_C(0xB4F464474205D32A), UINT64_C(0x7D17FC95DE386C06), UINT64_C(0xE8DFBF64567AA545), UINT64_C(0x55BD889D5853046F) }, /*10*/
|
||||
{ UINT64_C(0x687ABE14EAB8DA27), UINT64_C(0x397B3AB50D72C344), UINT64_C(0x505EAA6D1FDE618D), UINT64_C(0x61BE79865DA13F69), UINT64_C(0x17BBAB29B5E90E2D), UINT64_C(0x010C921972FA8B2F) }, /*11*/
|
||||
{ UINT64_C(0x8B7223A4F56FF453), UINT64_C(0x291B7B5CB98B6FE1), UINT64_C(0xFD421625786FBF7D), UINT64_C(0xE33D1020D0E8CDC8), UINT64_C(0xCA530C708B739E87), UINT64_C(0x878AF1F304B8A12F) }, /*12*/
|
||||
{ UINT64_C(0x7ECE1F24E56DD711), UINT64_C(0x2E0869241B2FA6DF), UINT64_C(0x84B834DCC459B2FD), UINT64_C(0xE022EDA6319E7D3B), UINT64_C(0x59839D8CA03C9928), UINT64_C(0x644790F491BBC774) }, /*13*/
|
||||
{ UINT64_C(0xCBDC6F49E6B0DD0D), UINT64_C(0x44BA2F8D00346732), UINT64_C(0x86BCC821586AE61C), UINT64_C(0xC7B7491285CEE55B), UINT64_C(0xED3912FFD97F3851), UINT64_C(0xF4AF0186BEBEBCBF) }, /*14*/
|
||||
{ UINT64_C(0xCA8A48E54ECCE516), UINT64_C(0xBEDF1864B7F8F506), UINT64_C(0xD56A1F60A4B36AA4), UINT64_C(0x49B25AB5FE0DD9D9), UINT64_C(0x21377DBB5E49FCE1), UINT64_C(0x708F64F5D59D99E7) }, /*15*/
|
||||
{ UINT64_C(0xE9F873A569AFE02C), UINT64_C(0xDA66BC05CA997390), UINT64_C(0x8C88174756D35385), UINT64_C(0xEAAAF16CF4FDA730), UINT64_C(0xB39F7A55653A3512), UINT64_C(0xF10AB727BC23E852) }, /*16*/
|
||||
{ UINT64_C(0x93E96FF8C5BBE2AF), UINT64_C(0xA47785420253E97C), UINT64_C(0x704B25D1F77D074C), UINT64_C(0xC0B2093F1470559C), UINT64_C(0x8D5BFDD4E364AACF), UINT64_C(0x550518673F5B1BF7) }, /*17*/
|
||||
{ UINT64_C(0x8DAC832E5BE81ACB), UINT64_C(0x588BFB202B7583D8), UINT64_C(0xA34D8A70DFD1D7E4), UINT64_C(0xD03B0627B687033E), UINT64_C(0xE3D0BE7EDBDC75CF), UINT64_C(0x818EE8C5B09F8BEA) }, /*18*/
|
||||
{ UINT64_C(0x8E3B02E1489D7D31), UINT64_C(0x5336752B64E3B532), UINT64_C(0xE4D4CC795C580A65), UINT64_C(0x6DAB08F313ED767E), UINT64_C(0x8E567E88FDBA36BF), UINT64_C(0x259490F1D8E933D0) }, /*19*/
|
||||
{ UINT64_C(0xEAB437D0D62CAA62), UINT64_C(0xC090AD28B982B003), UINT64_C(0xE255D768D25704EC), UINT64_C(0xA048511AF6256A43), UINT64_C(0xE79F078F4D498B5F), UINT64_C(0xC41735FB75B357FE) }, /*1A*/
|
||||
{ UINT64_C(0x70DA9FC3504FF29D), UINT64_C(0xB9AB1F388673FF25), UINT64_C(0x36922F4CD17357BA), UINT64_C(0xF09C3AB292E7E04A), UINT64_C(0x90CE0BC3D9BA13EC), UINT64_C(0x647C4CA63C918DE3) }, /*1B*/
|
||||
{ UINT64_C(0xD834A38DD1ECD688), UINT64_C(0xA97A0020DE46AB6A), UINT64_C(0x9CDEC7F6E62EA71F), UINT64_C(0x288A5A6FD74DC47E), UINT64_C(0xD44A2E2765CE50F1), UINT64_C(0xBB9B50B5DB9E4F3C) }, /*1C*/
|
||||
{ UINT64_C(0xC66DA90E41DDF2E6), UINT64_C(0x5A3FE86F160C5C09), UINT64_C(0x6F6AF0405108CCBE), UINT64_C(0xF938382EB627FC7F), UINT64_C(0x163DD634617F006C), UINT64_C(0x5184B1FEDC908497) }, /*1D*/
|
||||
{ UINT64_C(0xC95719ED07FCB21C), UINT64_C(0x5112DF043F6EE7EB), UINT64_C(0x50F9FD60012334CE), UINT64_C(0x589FA85104D96579), UINT64_C(0xB7129E44D71905A7), UINT64_C(0x3314766E0733528D) }, /*1E*/
|
||||
{ UINT64_C(0xDC6C8014C5457CB8), UINT64_C(0xD635FDCD286A69B6), UINT64_C(0xD66F232CE27D01BF), UINT64_C(0x56AF4AC0F682EC0F), UINT64_C(0x57DF1D55B64328F5), UINT64_C(0x651ED4C52A87CACA) }, /*1F*/
|
||||
{ UINT64_C(0x26D9D1CC79EEC502), UINT64_C(0x69BF340A34B1EBFE), UINT64_C(0xFAA5AAAC8E397174), UINT64_C(0xD0A8F9BD426BCF6F), UINT64_C(0x5B131F464D6D2452), UINT64_C(0x122DD15660D0D6DA) }, /*20*/
|
||||
{ UINT64_C(0x6E389AEC5F51A22F), UINT64_C(0x7EF68F1C54C127FB), UINT64_C(0x986D4D46E0485C30), UINT64_C(0xF0A47B39E7CF8A31), UINT64_C(0x1D398DFDB7F2A78F), UINT64_C(0x2FC651D1FBB10D2E) }, /*21*/
|
||||
{ UINT64_C(0xA44E4E8D1B49DCB0), UINT64_C(0x07A4822049C2F343), UINT64_C(0xC40AC04A8D6505BA), UINT64_C(0xD9B91D3F0729B16C), UINT64_C(0xAAF39951B50F9015), UINT64_C(0x966EF5D3AD3F9076) }, /*22*/
|
||||
{ UINT64_C(0xEA78CBAC0EB6D009), UINT64_C(0xA0FEA6725A23DEAB), UINT64_C(0xCE729C7444CB94D9), UINT64_C(0x40A994626627AA0D), UINT64_C(0x37F738CDE3D018D5), UINT64_C(0x4C29491C01CDB3C5) }, /*23*/
|
||||
{ UINT64_C(0x7C9792AEA745C87A), UINT64_C(0xD1FF5620C5BD8FD4), UINT64_C(0x9ECA84E3004B56B9), UINT64_C(0x5AFD3923C228B1D6), UINT64_C(0xE5DBF79EB3FD283B), UINT64_C(0x441712E354084B9F) }, /*24*/
|
||||
{ UINT64_C(0xE35D288BD8E249BC), UINT64_C(0x91776C1453A366E5), UINT64_C(0xF5D1E1684E95EFEC), UINT64_C(0x9108E117D7DDF606), UINT64_C(0x81B30F9DA2CE7C8C), UINT64_C(0x6497DBD786818C0D) }, /*25*/
|
||||
{ UINT64_C(0xC2F891FF45044BE0), UINT64_C(0x75A1A76D2B87E2EB), UINT64_C(0x85CE65798AF3C2BF), UINT64_C(0x213F532B4EFD09DC), UINT64_C(0x0DAA1DF5A53A6C88), UINT64_C(0x3028606A50D826B2) }, /*26*/
|
||||
{ UINT64_C(0x609A62616379F33A), UINT64_C(0xA339A3BC53E4516D), UINT64_C(0xD7AD92616A5ADBEC), UINT64_C(0xD043726D86E924AA), UINT64_C(0x8555B564F4C29865), UINT64_C(0x56AA12AB31C1D6B0) }, /*27*/
|
||||
{ UINT64_C(0xCED9ED85C1C17BFF), UINT64_C(0xEB522325ACBAFFC2), UINT64_C(0x04D3D8F4B2D15394), UINT64_C(0xD271504C04756EEA), UINT64_C(0x2DDBA4A91AF827F1), UINT64_C(0x1F67D5C28F8002E4) }, /*28*/
|
||||
{ UINT64_C(0x8B9C08AD432DC08F), UINT64_C(0x5A7543E29796BBC7), UINT64_C(0x34A6DB5B3C1967DE), UINT64_C(0x016E3BC2A2804EE4), UINT64_C(0x5B9BCACCE5172F75), UINT64_C(0x7549598B80ADBDBA) }, /*29*/
|
||||
{ UINT64_C(0x6F3FB117C5CDD155), UINT64_C(0x16C3B0A59CD6EEC5), UINT64_C(0xD9A1A411DE538769), UINT64_C(0x938C54979F4AC37C), UINT64_C(0x3737BCC1D55284DB), UINT64_C(0x6CAD9F8AF9156BB7) }, /*2A*/
|
||||
{ UINT64_C(0xEBBF284F9C75EBDF), UINT64_C(0xB383EBB406753DE8), UINT64_C(0xAA86127AEE7C403C), UINT64_C(0x10BFDD10523DE027), UINT64_C(0x138BF6C4EB4A8A13), UINT64_C(0xB1EFF67DDB78B067) }, /*2B*/
|
||||
{ UINT64_C(0xF6D1138D7AA3DA5E), UINT64_C(0xBAA8098D8FB66371), UINT64_C(0xDAE76D1B8B6CAAF2), UINT64_C(0x400F1034368D1EDC), UINT64_C(0x7C937F5172E8D277), UINT64_C(0x7D05BBF83CADE6EF) }, /*2C*/
|
||||
{ UINT64_C(0x0E9C2EA6CF34B081), UINT64_C(0x9036B30D58F60BA0), UINT64_C(0xDB3A2C5848F08BCA), UINT64_C(0xC87AD1B94250D564), UINT64_C(0x7C892E09EEF96166), UINT64_C(0x26DB85CF571085F3) }, /*2D*/
|
||||
{ UINT64_C(0x251EE3F58718C12A), UINT64_C(0xF9438D81178A2AE4), UINT64_C(0xF0929A889039A8A8), UINT64_C(0xF06B65225EBDCCFD), UINT64_C(0x2E4D14EDF7BF73C6), UINT64_C(0xA9369895BC1DFACF) }, /*2E*/
|
||||
{ UINT64_C(0xCAE302B41D6979CB), UINT64_C(0xBBFA5A58B51EE623), UINT64_C(0x5113B99DC81AB52F), UINT64_C(0x6093795BEC17A056), UINT64_C(0x8F71FB4D2E5E355E), UINT64_C(0x762F92EDBA34A2F2) }, /*2F*/
|
||||
{ UINT64_C(0xD130015265A4D9FF), UINT64_C(0x09BEA253D71F26C8), UINT64_C(0x81B6EAEDC46521E6), UINT64_C(0xFAE268165682B8A9), UINT64_C(0xA89C3EC4774AB623), UINT64_C(0x0D2E45E055219DB2) }, /*30*/
|
||||
{ UINT64_C(0x2B560284C3A692AB), UINT64_C(0x37008AD0B379A7B8), UINT64_C(0xAF11CD2C30F90BFC), UINT64_C(0x7FE87A250F2762ED), UINT64_C(0xC3FBD711647242C3), UINT64_C(0x74ED8264F6B322BD) }, /*31*/
|
||||
{ UINT64_C(0x28195CC8A7AD3943), UINT64_C(0x53CBE808464C4FC4), UINT64_C(0xD58E3D7A765F8726), UINT64_C(0xD83052F60185AA4F), UINT64_C(0xEFCB0D85223BB4E7), UINT64_C(0x5A31305E787FAC28) }, /*32*/
|
||||
{ UINT64_C(0x725D0EE230F19543), UINT64_C(0x9091D2C6BDDF34E0), UINT64_C(0xE3BE49C6C2754601), UINT64_C(0x61BE300BA4AD566B), UINT64_C(0x02D79D7551FA7CC1), UINT64_C(0x6543910F5F1CDA58) }, /*33*/
|
||||
{ UINT64_C(0x4099ADC44481B43F), UINT64_C(0xFE1361922FD9EB81), UINT64_C(0xA989C09E441FCEAC), UINT64_C(0x449B3A13D3CB9019), UINT64_C(0x45A9BE396F201134), UINT64_C(0xDC1AD05A046633FE) }, /*34*/
|
||||
{ UINT64_C(0x1A563A6D522F3E69), UINT64_C(0xBE589E079F475A9E), UINT64_C(0x75A2A9638E4C0038), UINT64_C(0xDA3B6202577A0362), UINT64_C(0x211D3F1E0D727AF6), UINT64_C(0x5E1FFC529AD99233) }, /*35*/
|
||||
{ UINT64_C(0x47B61E86C6D6D01B), UINT64_C(0x437D6F83ADADC318), UINT64_C(0xD5A361028DED738C), UINT64_C(0xA00D4C630425164B), UINT64_C(0x1A69AFA5AF4C9DD2), UINT64_C(0xF99E1C67F951B582) }, /*36*/
|
||||
{ UINT64_C(0xA66A7740B6BDEA79), UINT64_C(0xFEF7FF1496AF80A3), UINT64_C(0x05AFD43EEACD898C), UINT64_C(0xB00C78ED31AD7134), UINT64_C(0x0ED31A1AD7846673), UINT64_C(0x74B96844161499BE) }, /*37*/
|
||||
{ UINT64_C(0x46FA8D6CCBF6D12E), UINT64_C(0x31C2FC147F303956), UINT64_C(0x707F4401DE5F067F), UINT64_C(0x3AE5FEC7E33594E9), UINT64_C(0x28E39F8A63531714), UINT64_C(0xB7B329EA1E9FCAB2) }, /*38*/
|
||||
{ UINT64_C(0xEFD8F755825C7804), UINT64_C(0x1F5A93870BD30CD1), UINT64_C(0xEFBF894671FF8716), UINT64_C(0x28ED617FF22BDA58), UINT64_C(0x411289CCAE5CB62E), UINT64_C(0x95DD42F41801F2F9) }, /*39*/
|
||||
{ UINT64_C(0xA8525B8645FC59E1), UINT64_C(0x75E62DC00A5F7F0C), UINT64_C(0x09C56785210416AC), UINT64_C(0x50EF76E9B30D7626), UINT64_C(0x2B3B2CDC19F5D665), UINT64_C(0xA41297CD11D8F4FF) }, /*3A*/
|
||||
{ UINT64_C(0xEAC99A649EEE5039), UINT64_C(0xA593C92F143C0065), UINT64_C(0xB314735203071206), UINT64_C(0xEA2761A0C764A4EC), UINT64_C(0x02AA7FD46CAC25B3), UINT64_C(0xC68CC182A96D03BF) }, /*3B*/
|
||||
{ UINT64_C(0xB2873F024EC83CA8), UINT64_C(0x97470AB8FD8853EB), UINT64_C(0x18FE15C159B305BD), UINT64_C(0xB0AB08F687EAEAFD), UINT64_C(0x510A3FDE73602E43), UINT64_C(0x03E1B84DCCF0FCF0) }, /*3C*/
|
||||
{ UINT64_C(0xD85BBBDC8033C0D8), UINT64_C(0x9223D9C39CA9F34F), UINT64_C(0x7D3BCB6D5B63C3FD), UINT64_C(0x1C30F974DA0C0FB5), UINT64_C(0x8B24BC9EBEFB5143), UINT64_C(0xC58954925B7B84FC) }, /*3D*/
|
||||
{ UINT64_C(0x6ABD7C2E0844D7A7), UINT64_C(0xCCF2EA456CDF530D), UINT64_C(0xE8938CF52B3921B8), UINT64_C(0xBA023CA2F281657C), UINT64_C(0xEC635DA675D1EDAE), UINT64_C(0xB4AA52F22EE1BE6C) }, /*3E*/
|
||||
{ UINT64_C(0x981C3AC677CB5904), UINT64_C(0x6A92B54C84877B49), UINT64_C(0x745BA6BB40C55815), UINT64_C(0xB7AF550D22A371ED), UINT64_C(0xD5E8BD87C65F5374), UINT64_C(0x67874A37F0F538F5) }, /*3F*/
|
||||
{ UINT64_C(0xC23BBA2A9DECC021), UINT64_C(0x4E610E930B0E3450), UINT64_C(0x1A681AA91477577E), UINT64_C(0x38A3209714EDC376), UINT64_C(0x0FD15563EEEB4AB6), UINT64_C(0x7D57668A01D42178) }, /*40*/
|
||||
{ UINT64_C(0x6AF88CE145A098B5), UINT64_C(0x1AEB858CD88B8B46), UINT64_C(0xE8B733AFB8E2D6E8), UINT64_C(0x313FAA8C10A7EBFA), UINT64_C(0x127D375E77557CEA), UINT64_C(0x96BDA2F70B2F2155) }, /*41*/
|
||||
{ UINT64_C(0xEC8903978FAFB636), UINT64_C(0xC7213C425C079763), UINT64_C(0x760384036AB6D17C), UINT64_C(0xE0C63A26385F1F49), UINT64_C(0x299877D6811A6DF5), UINT64_C(0x876F90FC5304B88D) }, /*42*/
|
||||
{ UINT64_C(0xA6FABBC2D6E0BA16), UINT64_C(0x9B70C9640080E6BC), UINT64_C(0x29B2D5265598B27B), UINT64_C(0x4A9657C726E4397E), UINT64_C(0xA801CCC6766678D5), UINT64_C(0x800EF7CC72619998) }, /*43*/
|
||||
{ UINT64_C(0x235931A8CF5490BF), UINT64_C(0xE798F98E0E8F879F), UINT64_C(0xC6EEE29C38F30CA7), UINT64_C(0x929A79F2D53E0024), UINT64_C(0x88F2E12749587A45), UINT64_C(0x0B85B28F38891965) }, /*44*/
|
||||
{ UINT64_C(0x165E0303E4A4D827), UINT64_C(0x67994F42D1E8436A), UINT64_C(0xE6CC8BCF6E130D1B), UINT64_C(0x50101711709DDEFC), UINT64_C(0x373BDEC40CD05328), UINT64_C(0x40B274A4AA5109F6) }, /*45*/
|
||||
{ UINT64_C(0xA9F88BA008FDF8C8), UINT64_C(0xECC897E3476EE05A), UINT64_C(0xBCE290AB69D57A74), UINT64_C(0xFA44DB1811E3115D), UINT64_C(0x6267AEFD64480C88), UINT64_C(0x2697D04A2D3AECEB) }, /*46*/
|
||||
{ UINT64_C(0xC0782AF2ABCD3313), UINT64_C(0x02BA1290F2F96273), UINT64_C(0x63C82F1A56ADC2B9), UINT64_C(0x10F8E8C03EFE51C4), UINT64_C(0xE3EB348625CCAFFD), UINT64_C(0x93D607969CB8E7AE) }, /*47*/
|
||||
{ UINT64_C(0xCC6E179443E58FBC), UINT64_C(0xD21C93C655A7B8EE), UINT64_C(0x2B9834A31F2B8BA4), UINT64_C(0xC83B69516025ECEE), UINT64_C(0x9176EB7B427AAE94), UINT64_C(0x8CB65B9E30B7A76E) }, /*48*/
|
||||
{ UINT64_C(0xC1A33A0AD6EDD989), UINT64_C(0x18B3C5D95813B5F7), UINT64_C(0xB024BD263B359A8B), UINT64_C(0xC8C17C2216A99B50), UINT64_C(0x71F9A11D58237729), UINT64_C(0x3AA67C7618284290) }, /*49*/
|
||||
{ UINT64_C(0x99B7465E09201C7B), UINT64_C(0x9AF89FA01CA4FA81), UINT64_C(0xFC2EC63E761AD123), UINT64_C(0xE2A9A39585B17D14), UINT64_C(0x08394DE529F94E81), UINT64_C(0x479448E69794FAA4) }, /*4A*/
|
||||
{ UINT64_C(0x23CA3D1C4CBDCABB), UINT64_C(0xE3265436CE1A37E4), UINT64_C(0x1BBF10F69E8A4CC9), UINT64_C(0x05A66708048F5C4D), UINT64_C(0xE259DCDD9C5BFEFE), UINT64_C(0x439E65FAFD936EFD) }, /*4B*/
|
||||
{ UINT64_C(0xA24D73B6978F719C), UINT64_C(0x3F53F343CCB0BB8E), UINT64_C(0xBE3C72769EE07C6A), UINT64_C(0xFACB9E539CF558DD), UINT64_C(0x67B91D4E30DE986A), UINT64_C(0x1DB913D11698913A) }, /*4C*/
|
||||
{ UINT64_C(0x98BD4E140DC3C3C6), UINT64_C(0x142B1592BF3263E8), UINT64_C(0xCDBEAC59ED095B0E), UINT64_C(0x900763F0F625896A), UINT64_C(0xE213550F30324E39), UINT64_C(0x8A13A4417A803195) }, /*4D*/
|
||||
{ UINT64_C(0x2ACD98ED8C626073), UINT64_C(0x1CAAA6B4C4CF3238), UINT64_C(0x04DCB41EB677EB5D), UINT64_C(0xF88B5844A8105B68), UINT64_C(0x981D9E951A061A4D), UINT64_C(0xBC9471894C878EDB) }, /*4E*/
|
||||
{ UINT64_C(0x4959FEAD5D6C2DBD), UINT64_C(0x6ABD59E28C503049), UINT64_C(0x06D2C5494CAF8B34), UINT64_C(0x70E4541304A4293C), UINT64_C(0x520F3416CAF2F503), UINT64_C(0xB23D09D92613DB85) }, /*4F*/
|
||||
{ UINT64_C(0x26B5A815C32D1791), UINT64_C(0x2C99E7555BB033C6), UINT64_C(0x09CE9D6A0002514F), UINT64_C(0xD485282B2B8D7997), UINT64_C(0x9C5B792F4A4A14C6), UINT64_C(0x851D9D02DC0BB4E7) }, /*50*/
|
||||
{ UINT64_C(0x62FEB6CACFB060EC), UINT64_C(0x9D977D69D5C661EA), UINT64_C(0xBF08EFD806D81556), UINT64_C(0x25F1EEA460EA5718), UINT64_C(0xA25346B51F5A9665), UINT64_C(0xD92F9ADC358CA274) }, /*51*/
|
||||
{ UINT64_C(0x27E63DFC63E8FFA6), UINT64_C(0xCDB9CCE2CE99FDA3), UINT64_C(0x979D5B754974830D), UINT64_C(0x3298C8407D6693BE), UINT64_C(0x629D5FADA39B42B7), UINT64_C(0x2654D31271CD84E1) }, /*52*/
|
||||
{ UINT64_C(0xAB1FA4DAF66E583C), UINT64_C(0xEEB6B7A236D24766), UINT64_C(0xA90738CDFDF5C6B3), UINT64_C(0x28CBA9E5648E2D4C), UINT64_C(0xFDE5BF6C0CFE0DA3), UINT64_C(0x9D00B863D7D78485) }, /*53*/
|
||||
{ UINT64_C(0x75FBBF094EEA16AA), UINT64_C(0x48931F027CD729F2), UINT64_C(0x5D360679009B2E7F), UINT64_C(0xDDFCD148BD3DE21A), UINT64_C(0x4DBFF544B094D0E1), UINT64_C(0x9C0E5C6294352C22) }, /*54*/
|
||||
{ UINT64_C(0x283A27FF968853D2), UINT64_C(0xB0960C6CEA0D03F2), UINT64_C(0x172BBA07A473DB38), UINT64_C(0x688C87D296E6F4BB), UINT64_C(0x5CB7E9BC5D68CF0F), UINT64_C(0x57A5D71B0E47BFB4) }, /*55*/
|
||||
{ UINT64_C(0xDE0108AAC1E4FF2F), UINT64_C(0xD346CFABEAC62B99), UINT64_C(0xB72E203F98B5F608), UINT64_C(0x81853D8CA54B29BE), UINT64_C(0xA6AED7C89FAA1680), UINT64_C(0xD2093B155C39D7ED) }, /*56*/
|
||||
{ UINT64_C(0x0BAEAC99D4974B84), UINT64_C(0xC7F258A699C9B4DA), UINT64_C(0x6F622C5E4ACCF5C1), UINT64_C(0x58AB397D9781BEAA), UINT64_C(0xBF811F67E101FFE3), UINT64_C(0xAFBCC2881C3C0EF3) }, /*57*/
|
||||
{ UINT64_C(0x26B211FB518D6C3E), UINT64_C(0x64BADAD51A10784A), UINT64_C(0xE6BE4E06A587186C), UINT64_C(0xD471F5C61343CD5C), UINT64_C(0x8389BB0DD6AAED5D), UINT64_C(0xC88112678914A17D) }, /*58*/
|
||||
{ UINT64_C(0x2B2D0BC3BB88D27D), UINT64_C(0xC5A7D1FAFF517AD2), UINT64_C(0x96F39056A09F82AD), UINT64_C(0xFB38A61A6CED4D4E), UINT64_C(0x9D308E4EA6F9B264), UINT64_C(0x9097CE294AECC6B3) }, /*59*/
|
||||
{ UINT64_C(0x8FCA2B950690B1A2), UINT64_C(0x293EFCBF03D422DF), UINT64_C(0x8C9125B3E76353AB), UINT64_C(0x3D402092A1A70173), UINT64_C(0x9BAB974CAB9BF676), UINT64_C(0x5EA8FCC55D8C586E) }, /*5A*/
|
||||
{ UINT64_C(0x408C92E8C2E1EC8C), UINT64_C(0x4AF4C914B71B4350), UINT64_C(0x5186AEE0CDFB1069), UINT64_C(0x2385EAFAB9657C67), UINT64_C(0xF708E4D3C898CA80), UINT64_C(0x1EC8B9F89884907E) }, /*5B*/
|
||||
{ UINT64_C(0x46E8958B6A2C1878), UINT64_C(0x2172FD410F78A647), UINT64_C(0x9D8E9DD83A299004), UINT64_C(0x390913C3265AD025), UINT64_C(0xD231F1E23077CBF1), UINT64_C(0xE7EE3E574E80D7F3) }, /*5C*/
|
||||
{ UINT64_C(0x5A8567A3D85E40B2), UINT64_C(0x16ECF161133FCF73), UINT64_C(0x52DA5C6FBA3C0DD7), UINT64_C(0x56E57983DEB34BFB), UINT64_C(0x83254FDCB768D153), UINT64_C(0x9A14F95F35C6B82D) }, /*5D*/
|
||||
{ UINT64_C(0x498A29C6E19D4AE6), UINT64_C(0x2EF4AAF46027BA11), UINT64_C(0xBDBA7DAA84F39505), UINT64_C(0x940B2A04F6DC944D), UINT64_C(0x4E7ED35610FC0D53), UINT64_C(0xBADD94C2907E59E1) }, /*5E*/
|
||||
{ UINT64_C(0x14DF0FC43F475F80), UINT64_C(0x17E2AA8D264BF82F), UINT64_C(0x92625BDFE58B934D), UINT64_C(0x8384F415A4ACEA81), UINT64_C(0x8E9C5EAEC5D8642B), UINT64_C(0x4D8EF55F1C826687) }, /*5F*/
|
||||
{ UINT64_C(0x4A2335C4F77128D9), UINT64_C(0x544E1476D29ABA94), UINT64_C(0x654EC86321785044), UINT64_C(0xB04AD9B02F80445A), UINT64_C(0xB0E01B6480C8D020), UINT64_C(0x596E325E88A3CBBF) }, /*60*/
|
||||
{ UINT64_C(0x896955157448D062), UINT64_C(0x0DB08C4C0F236D68), UINT64_C(0x3BA8FC5B3CD1C4A2), UINT64_C(0x04F57C53E144535B), UINT64_C(0xB7D04DCC7BE46840), UINT64_C(0x4BBE993192334646) }, /*61*/
|
||||
{ UINT64_C(0x1D7837E6AB02CE27), UINT64_C(0x3EA35BAED4493EA4), UINT64_C(0xD1CAFDB5DF94FABE), UINT64_C(0x98B580BB62170C4F), UINT64_C(0xC3C57A6CA9421C43), UINT64_C(0x68D65FC2C1201634) }, /*62*/
|
||||
{ UINT64_C(0xFAEABABC48717536), UINT64_C(0x454251E8F62F7315), UINT64_C(0xB318E8A7FDCDC523), UINT64_C(0x7C2E832013C91344), UINT64_C(0x4D9E5DAFD1699052), UINT64_C(0x12262E8C870537A7) }, /*63*/
|
||||
{ UINT64_C(0x8A3E5D0BEF8402A2), UINT64_C(0xA33BC5FAFA019909), UINT64_C(0x63CBE8ACD00762F5), UINT64_C(0xEA26A3F181984178), UINT64_C(0x6EEB78D1BB4AF6BB), UINT64_C(0x7ECF9671300E845F) }, /*64*/
|
||||
{ UINT64_C(0x0811B67CCCF5D0FC), UINT64_C(0x9F8CAB3F3496BD6B), UINT64_C(0x57CB7D24F1355C2D), UINT64_C(0x58218594165BDE80), UINT64_C(0xFAF3368A653A78F8), UINT64_C(0xC04CD80176267762) }, /*65*/
|
||||
{ UINT64_C(0xE6417CE75AAA23B0), UINT64_C(0x34A7BFE3CBA61761), UINT64_C(0x8C13E396F8C9B6ED), UINT64_C(0x5C9066464B09ED63), UINT64_C(0x76CB6A642C5CE283), UINT64_C(0x498E082A3EB449C6) }, /*66*/
|
||||
{ UINT64_C(0x6F2ADEA6357B5AA0), UINT64_C(0x54DA382B15557B69), UINT64_C(0x302BD81946237AAE), UINT64_C(0x8F0CBB82111EFEDC), UINT64_C(0x45DD2DADCE20F2D3), UINT64_C(0x8A77A5E9E8A2D1D8) }, /*67*/
|
||||
{ UINT64_C(0xE1EC332735862A28), UINT64_C(0x92B68B1A7E9C7C44), UINT64_C(0xF45618DC99E963E3), UINT64_C(0x7CAC984502DD1A73), UINT64_C(0xC8650598CD70840D), UINT64_C(0x9A5DA584A26D4EFD) }, /*68*/
|
||||
{ UINT64_C(0x16B19B010740C15C), UINT64_C(0xB4544AC01016439A), UINT64_C(0x221F749C9E2F99A5), UINT64_C(0xA63E8A279A65570F), UINT64_C(0xC7231669ADD072AD), UINT64_C(0xC5BC35BA740BC801) }, /*69*/
|
||||
{ UINT64_C(0x6C44E75A4F378694), UINT64_C(0xD27ACE108A577647), UINT64_C(0x17C487FAFA7E15D6), UINT64_C(0x6A3654D5C8E29EDF), UINT64_C(0x0CE35EEDCC611FFA), UINT64_C(0xD88A8C03C0095093) }, /*6A*/
|
||||
{ UINT64_C(0xCF106948BC4B1F2C), UINT64_C(0x91C0DC9990B99712), UINT64_C(0x193B21E3E109AB32), UINT64_C(0x3340DE0608DD1666), UINT64_C(0x8A5BB677BF602828), UINT64_C(0x402C410B1197B771) }, /*6B*/
|
||||
{ UINT64_C(0xEB080FF49CA5543E), UINT64_C(0xB4B9429542D6CA27), UINT64_C(0x5999D45DC1533205), UINT64_C(0xF7EA9E398A1BEF3E), UINT64_C(0xBE8817775476DEC6), UINT64_C(0x17064D7790C84100) }, /*6C*/
|
||||
{ UINT64_C(0xF3328E9150A7F8D6), UINT64_C(0x52E3E61B04ACFDF8), UINT64_C(0x51D82010F3CEB015), UINT64_C(0x59D673336676D5D8), UINT64_C(0x4CB3BCEF1D91C342), UINT64_C(0x0C589AB58033BE49) }, /*6D*/
|
||||
{ UINT64_C(0x54B8E70EDCE03855), UINT64_C(0x7BB590E99687FD57), UINT64_C(0x6CFF08688D2B1FDD), UINT64_C(0xFD0F6D068BFE994F), UINT64_C(0xEB9BCE302489AE44), UINT64_C(0x66B21F200661E3E4) }, /*6E*/
|
||||
{ UINT64_C(0x2F5E0060189669AD), UINT64_C(0x473AF1D03C00CAE4), UINT64_C(0x0278299268D1F3B4), UINT64_C(0x888714BC3A7EC9D2), UINT64_C(0x9FF9C7F071EBD2D9), UINT64_C(0x875A5DC25DFFDB10) }, /*6F*/
|
||||
{ UINT64_C(0xE2A97A3E468399D8), UINT64_C(0x3BF7EACA32C80DA1), UINT64_C(0x13DCAC8EB6C2231D), UINT64_C(0x227EC90E1102EE97), UINT64_C(0xB2344832F0381434), UINT64_C(0x8613888303B190EB) }, /*70*/
|
||||
{ UINT64_C(0x3A3D3B6CE026BFFE), UINT64_C(0x18D4953B9A68ED59), UINT64_C(0x24BB7B574AB777A0), UINT64_C(0xE0CB7DD64983DCB1), UINT64_C(0xCF768C439869AC97), UINT64_C(0x8062BC7A900E6033) }, /*71*/
|
||||
{ UINT64_C(0x39D4C3B78A7A33C7), UINT64_C(0x43D72EF22AB0B4EB), UINT64_C(0x54AE8184DDA50394), UINT64_C(0x0C2A7DA083C38536), UINT64_C(0x9DBC6F921D4AD822), UINT64_C(0x2CBB61FE182EAA42) }, /*72*/
|
||||
{ UINT64_C(0xD8CE9A806C0BD24D), UINT64_C(0xF69D65A65845727C), UINT64_C(0xC3FF81CC76F2B048), UINT64_C(0x76B1FDC3CA67CE58), UINT64_C(0xCED0970AFBCBE78A), UINT64_C(0x57502941B726F5F3) }, /*73*/
|
||||
{ UINT64_C(0xE006AEC17FCEFCF9), UINT64_C(0x05CAA1629E003591), UINT64_C(0xB7050CC99F585312), UINT64_C(0x669260401E159490), UINT64_C(0x8442D25AA757CC5A), UINT64_C(0x228655CD4038770C) }, /*74*/
|
||||
{ UINT64_C(0x93EE8D67D3F1F3A1), UINT64_C(0xBEA46D48DBF8D7F4), UINT64_C(0x3C91F02B8646453C), UINT64_C(0x6C3D7C1F04188A58), UINT64_C(0xEFA97287F89CEF84), UINT64_C(0xCB40364E108BFF4B) }, /*75*/
|
||||
{ UINT64_C(0xC6DCE3730D4FF825), UINT64_C(0x02AF54F87D972790), UINT64_C(0x7D69D20F6F4F788F), UINT64_C(0x90C255C64C166E8F), UINT64_C(0xA3529FBF4BF9C9A2), UINT64_C(0x3ECEC41136694F6B) }, /*76*/
|
||||
{ UINT64_C(0x3DE10A5EC6CA7B3F), UINT64_C(0x7E196081D085ACAA), UINT64_C(0xDF5F0DE3705D60F7), UINT64_C(0x393E7C83DCC57075), UINT64_C(0xA5F33BC2DCB98F97), UINT64_C(0x0AEB7F050D1204C0) }, /*77*/
|
||||
{ UINT64_C(0x6F3B3B3D11A8BC05), UINT64_C(0xB52269AB2B95B8DC), UINT64_C(0x12EDE24EB1385F13), UINT64_C(0x202BBA6B5836B5E1), UINT64_C(0xEE3636C5925ACC49), UINT64_C(0x42224CF6EEB509BF) }, /*78*/
|
||||
{ UINT64_C(0x5F0CC3BBC4BE9A92), UINT64_C(0x584313FCCC54DD2E), UINT64_C(0xC11FE90F00394036), UINT64_C(0x3371667C72FC9723), UINT64_C(0x9611990B62AC8D9F), UINT64_C(0x4CFCB9EB3C317FAD) }, /*79*/
|
||||
{ UINT64_C(0xCA8E520A894A3FBA), UINT64_C(0xBD9ED1B80098CC40), UINT64_C(0xBDF24507DFF3757C), UINT64_C(0x47AEC572E68D35EC), UINT64_C(0xF3D4523D27B373E4), UINT64_C(0x1AB11E16973A05AB) }, /*7A*/
|
||||
{ UINT64_C(0xFFC293A6C26B817D), UINT64_C(0x2C9E9D134959D828), UINT64_C(0x7FA5216408199BBF), UINT64_C(0xA6F002DE0DCCD861), UINT64_C(0xBE8F9DC57F2CF35D), UINT64_C(0x1352E2DF86A47647) }, /*7B*/
|
||||
{ UINT64_C(0x84B55BE101708E74), UINT64_C(0x3ADEC53721209F3E), UINT64_C(0xB18F9A1E68DFADBD), UINT64_C(0x09A050819774CF2D), UINT64_C(0xE4AB295D380A8762), UINT64_C(0xA3605B0C689C239F) }, /*7C*/
|
||||
{ UINT64_C(0xDDC7031FBFDFFE8F), UINT64_C(0x0B175DE65B832F0A), UINT64_C(0x31162ABC65719685), UINT64_C(0x51215E534BBC36B1), UINT64_C(0x9F2F7D3B5D01AE44), UINT64_C(0xCF43A2426E83B61B) }, /*7D*/
|
||||
{ UINT64_C(0x7E32DB672B16F04A), UINT64_C(0xCE6F45DE0E6AB788), UINT64_C(0x25718548B8E70B41), UINT64_C(0xD7368BCF39A0FAC4), UINT64_C(0x956863EC49880C47), UINT64_C(0x720E335796341674) }, /*7E*/
|
||||
{ UINT64_C(0x06707A8E33D9D6C6), UINT64_C(0xB684BFE26CD576C6), UINT64_C(0x44F47E5ECD5FC46C), UINT64_C(0xAF1B23A856D844B7), UINT64_C(0x98A627916AC5657E), UINT64_C(0x040C3964A1127E19) }, /*7F*/
|
||||
{ UINT64_C(0xA5DAEC3134C0A39B), UINT64_C(0x0CA04160BD5ADB1F), UINT64_C(0xB50EC5A9F29E1ACB), UINT64_C(0xBE2FA1126AF7BFAF), UINT64_C(0xBEFC0AC4C9C5A4B3), UINT64_C(0x994739C71FB1EB29) }, /*80*/
|
||||
{ UINT64_C(0x6FEC2D343E83A763), UINT64_C(0x5BDBA5715757F50C), UINT64_C(0xD6F6282EE46A11B3), UINT64_C(0xA8B501F5922A5524), UINT64_C(0xA782A21006B605CA), UINT64_C(0xA10BD2E896975C81) }, /*81*/
|
||||
{ UINT64_C(0xB8AAE0532226D0ED), UINT64_C(0x891831C0470E84B7), UINT64_C(0x74C824D648E8FF28), UINT64_C(0xB5E4E02EAD3906EB), UINT64_C(0x5ABB086ADA60A713), UINT64_C(0xA80C57666A9E29F1) }, /*82*/
|
||||
{ UINT64_C(0x529E3E52B1E7230A), UINT64_C(0x0C148861C9F08E26), UINT64_C(0x0CFC8A131BAD803D), UINT64_C(0x8C09F324902FAA9F), UINT64_C(0x0231EE4987999848), UINT64_C(0x3B0688492E2B5457) }, /*83*/
|
||||
{ UINT64_C(0xEFA6EAC5036814CD), UINT64_C(0x02773C1F8DAA5DF5), UINT64_C(0x0E4EEDBD0702DE31), UINT64_C(0xBA7FD757D0D740EF), UINT64_C(0xA8805F0C74005F8B), UINT64_C(0x1448467BFF3E1EF8) }, /*84*/
|
||||
{ UINT64_C(0x2A07B766016AC70D), UINT64_C(0x64215C35364219E9), UINT64_C(0xCD6F7EFE35FCF6F1), UINT64_C(0xF05CC06084C29267), UINT64_C(0xAB3BF2F32579A444), UINT64_C(0xAC75F42D9A25B9C9) }, /*85*/
|
||||
{ UINT64_C(0xEF3A14B5EDDB8464), UINT64_C(0x2314E0802D2DD0E9), UINT64_C(0x14DEAEA9F928762A), UINT64_C(0x5763EBB480E15A02), UINT64_C(0x25F7CA14E8CDF5E6), UINT64_C(0x8E594510DC61E6BC) }, /*86*/
|
||||
{ UINT64_C(0xE62C38DCFD21000B), UINT64_C(0x7BB32AE917EE3DA7), UINT64_C(0xE49F15E24CC9B656), UINT64_C(0x56E28259DCA361D8), UINT64_C(0xB43B8008A9285F48), UINT64_C(0x0DC6B4AF7E4AE61B) }, /*87*/
|
||||
{ UINT64_C(0x703C64241142DCAE), UINT64_C(0x732D33342C45063A), UINT64_C(0x37877EA1624567CB), UINT64_C(0x2871D534614DD114), UINT64_C(0xE748092A1D94F5D1), UINT64_C(0x4524056F0C6D1CB7) }, /*88*/
|
||||
{ UINT64_C(0xE325B1823A595DF9), UINT64_C(0x742D0DD5C96F397C), UINT64_C(0x44361C9540A9F451), UINT64_C(0x02382F9BF6331FB9), UINT64_C(0x8ECBAFBBE91A0467), UINT64_C(0x528EBF3811F904A8) }, /*89*/
|
||||
{ UINT64_C(0xFD2BC6534631FB0D), UINT64_C(0x27A5F036FEEB9A6C), UINT64_C(0xD0F876D7911D0775), UINT64_C(0x12EFB3A29C6E0B72), UINT64_C(0xDC4BCA3D5E871DA1), UINT64_C(0x028FB6E6E608F46F) }, /*8A*/
|
||||
{ UINT64_C(0xEF17ECC8930A7B4A), UINT64_C(0x9D97B34672FB273D), UINT64_C(0xC6AE835F35A25D8F), UINT64_C(0x6C27469530C21F5B), UINT64_C(0x2FBC16A26150E795), UINT64_C(0x02AD93AAE0B5C71A) }, /*8B*/
|
||||
{ UINT64_C(0x6D24BE43CF07DD56), UINT64_C(0x63681D62A38D2A2F), UINT64_C(0x9872C9B411724AA0), UINT64_C(0xB882B4857C19690A), UINT64_C(0x87B1BA8D2804C6F4), UINT64_C(0xD7B199CC36F40B49) }, /*8C*/
|
||||
{ UINT64_C(0xEEFB8D8573FD9E0F), UINT64_C(0x933403199B91560A), UINT64_C(0xFF0DB41665D5248C), UINT64_C(0x322EE105EA984196), UINT64_C(0xDB8CE0F83890D89B), UINT64_C(0x3A32F8983C901F80) }, /*8D*/
|
||||
{ UINT64_C(0x082CDAF93F215BAC), UINT64_C(0x67C118A1B9274FAC), UINT64_C(0xAF74501CFB93198A), UINT64_C(0x53525CABA0E812D3), UINT64_C(0xC9AF3A005EFE8A6E), UINT64_C(0xF242DCB60DA7B2FE) }, /*8E*/
|
||||
{ UINT64_C(0xD3887FBFBB7314DF), UINT64_C(0xDDDCCCF0F720C342), UINT64_C(0xB2C4331C33C8C415), UINT64_C(0x1666010767F4785B), UINT64_C(0x8455B7C1FD5DE487), UINT64_C(0xA821C5EA181875F2) }, /*8F*/
|
||||
{ UINT64_C(0x7E289831418562F0), UINT64_C(0x2AD12E3042B185C3), UINT64_C(0x7C20D0D735A6AE96), UINT64_C(0xA68BEF98E22CBD41), UINT64_C(0xA1411D22F8D93243), UINT64_C(0xD813FB404F3D2F38) }, /*90*/
|
||||
{ UINT64_C(0xE13FC0A76F664294), UINT64_C(0x7E21C9D9F7FDDDCB), UINT64_C(0x161E68B366D6B1F8), UINT64_C(0x55BF957EB5743874), UINT64_C(0xB23213EF8364D766), UINT64_C(0x529BB98AF96643D4) }, /*91*/
|
||||
{ UINT64_C(0x036D7ADDAADB5C33), UINT64_C(0x0525835F802D032E), UINT64_C(0x7DF7D0D8D7A2BEF2), UINT64_C(0x84927644B27696B7), UINT64_C(0x215E21E4D1F9B5B9), UINT64_C(0x77743669C40EB7FD) }, /*92*/
|
||||
{ UINT64_C(0xA9B3534BE8897784), UINT64_C(0x5BFD4283541A5090), UINT64_C(0x97AFFCCD121C9778), UINT64_C(0xC146C4C9637989C7), UINT64_C(0x0820E72FCBDA59C7), UINT64_C(0x5526E2F4A0AE4F4F) }, /*93*/
|
||||
{ UINT64_C(0xA4739E20FD72BDC2), UINT64_C(0x6D6EE5A5C1A54CA6), UINT64_C(0x70A97A6FCB884E5C), UINT64_C(0x2B6108339E979C48), UINT64_C(0x93A63730D6BB23A7), UINT64_C(0x5B1DCEAB00045EE5) }, /*94*/
|
||||
{ UINT64_C(0x427C14E4F88C8BDB), UINT64_C(0x1D8630868E039BC2), UINT64_C(0x33DB40A251502D1B), UINT64_C(0xE043C9CCB45D2B3D), UINT64_C(0x292B67B6EE077B2D), UINT64_C(0x1C3A2FBDE24C742A) }, /*95*/
|
||||
{ UINT64_C(0x3DED69F37016D86A), UINT64_C(0x9A947B13AC66D7C3), UINT64_C(0x822D8645DF4CB39C), UINT64_C(0x2BA20F98F19E10DA), UINT64_C(0x6703138D422AC4C4), UINT64_C(0x8D34D6138FA04A1D) }, /*96*/
|
||||
{ UINT64_C(0x28E59C8B257D112C), UINT64_C(0x8747068CC5499FCF), UINT64_C(0xD6C16EB780F9191A), UINT64_C(0xB416151633F7AF08), UINT64_C(0xA230E00D6BA1A1C3), UINT64_C(0xFD066FB9965B83D2) }, /*97*/
|
||||
{ UINT64_C(0x70F4BC1B7F8FFC37), UINT64_C(0x38DC0331E56B0FDC), UINT64_C(0xA9AB7290AD2B0BBD), UINT64_C(0xB307973C3D0783C6), UINT64_C(0xBDC455F6CDCA111F), UINT64_C(0x23F0E08317B8F0DC) }, /*98*/
|
||||
{ UINT64_C(0x0AEEC24E9285C50F), UINT64_C(0x3BCDA47833B61ACE), UINT64_C(0x839986F959EE0723), UINT64_C(0xC959034A8D7F5EB9), UINT64_C(0xD4AD7E05B05C4FB5), UINT64_C(0x6C37A3D39F7A0EC4) }, /*99*/
|
||||
{ UINT64_C(0x0227B7230FBF2D07), UINT64_C(0x28D7D2AD632BED47), UINT64_C(0x07BD8F8B5012EFD0), UINT64_C(0x48A0D43AE0403442), UINT64_C(0x9B8939207F1449A1), UINT64_C(0x351EAD01B9FDF219) }, /*9A*/
|
||||
{ UINT64_C(0xA7119D2E311CEF25), UINT64_C(0x1E532CD0C4ED0479), UINT64_C(0x2272F878D8D30A0B), UINT64_C(0x769C412CED9C4C42), UINT64_C(0x262FFBFA65CBDDF5), UINT64_C(0xDB73D86721EA368E) }, /*9B*/
|
||||
{ UINT64_C(0x4BDBE90B3FBADCB2), UINT64_C(0x1324EC3A8D6FEA57), UINT64_C(0x6D9EFBE530850D00), UINT64_C(0x401A88AFF8A4C8F4), UINT64_C(0x655CB76B8A2E271C), UINT64_C(0x35505B6DBDE16F43) }, /*9C*/
|
||||
{ UINT64_C(0x6E15E57E23F57037), UINT64_C(0x4962737362C1FA26), UINT64_C(0xC962372D1829B80B), UINT64_C(0xA1FE6832EA4D6211), UINT64_C(0x6726E307F96E7763), UINT64_C(0x04C761081677505B) }, /*9D*/
|
||||
{ UINT64_C(0x42E2FF3A8A6FC164), UINT64_C(0xFB85B2BC9D28B268), UINT64_C(0xC559CFF024533A28), UINT64_C(0x2EC83F3911DAB3CE), UINT64_C(0xAE0FC74A9D736A27), UINT64_C(0xDB9CDD048BAB4CCF) }, /*9E*/
|
||||
{ UINT64_C(0xD79C52221D20E765), UINT64_C(0x499EDD73903CE704), UINT64_C(0x9B016D987DF48349), UINT64_C(0xFCFAB44AD12FC5C1), UINT64_C(0x811293F3B800FDF9), UINT64_C(0x511DC619CA53CEBE) }, /*9F*/
|
||||
{ UINT64_C(0xA059EE78B826EDDF), UINT64_C(0x4673AF294D17C85A), UINT64_C(0x5E527D4E4DF282B5), UINT64_C(0xDB5B9A2693F95CE3), UINT64_C(0x6551D304FB54F296), UINT64_C(0xAB3EB70D65912FCC) }, /*A0*/
|
||||
{ UINT64_C(0x7D0C4F67B6C78135), UINT64_C(0x390CAEA7DE304D37), UINT64_C(0x49E19FABC8D494FE), UINT64_C(0x1A9E1B6437A04516), UINT64_C(0x886CC4BDAB6AF35A), UINT64_C(0x0529217344F502FE) }, /*A1*/
|
||||
{ UINT64_C(0x3CEDF34141B52CEE), UINT64_C(0x8133BA924753573F), UINT64_C(0xCB32BE22BC66025A), UINT64_C(0x0C480183DE403CB3), UINT64_C(0xBF5B84B427DFCF31), UINT64_C(0x7251428DB0232156) }, /*A2*/
|
||||
{ UINT64_C(0x86FCE831C58E25CB), UINT64_C(0x5CC43FFE45CBFC75), UINT64_C(0x33877CC042F199BE), UINT64_C(0x1212FA7F0CC22E1C), UINT64_C(0x448EAB4B7D1F9823), UINT64_C(0xA7B1363A9FA7599E) }, /*A3*/
|
||||
{ UINT64_C(0x2D8C2FEDA0E5106D), UINT64_C(0x192E366838BBEB3F), UINT64_C(0x36226AA60ACEA0AF), UINT64_C(0xE7E1285DC1F3926A), UINT64_C(0x900371FA1883D9EC), UINT64_C(0xBAC33B1AF360EB66) }, /*A4*/
|
||||
{ UINT64_C(0xD4A2A11612BDE0E3), UINT64_C(0x82AB0DA614CB4CB8), UINT64_C(0x189A4D50AC01F4C6), UINT64_C(0xE36A5DA1D9F6A647), UINT64_C(0xE43120D6B16B11B6), UINT64_C(0x7D395F4236E75378) }, /*A5*/
|
||||
{ UINT64_C(0xC0C155CD47F3877F), UINT64_C(0x4B03BFE5C334CA71), UINT64_C(0x77710F1F4B844FF7), UINT64_C(0x3443BBAB720E8DC5), UINT64_C(0xF03F8868C5863406), UINT64_C(0x0FD60511C872EB50) }, /*A6*/
|
||||
{ UINT64_C(0x8C253DAAB5286306), UINT64_C(0x9AA438F54A6196AC), UINT64_C(0x181D08C723A22C5E), UINT64_C(0x633C49C88E3910A1), UINT64_C(0xC9F54A67992675B0), UINT64_C(0x1FDD98ACBD38D976) }, /*A7*/
|
||||
{ UINT64_C(0xA10893DA7575A9F7), UINT64_C(0x8F5F4A025AB2A018), UINT64_C(0xD80538F0336BFFC0), UINT64_C(0x0F9751D33889626F), UINT64_C(0x30383EB925BF911A), UINT64_C(0xE6149F68CE19CC60) }, /*A8*/
|
||||
{ UINT64_C(0xB9081DBAC6BE0598), UINT64_C(0x785DD9BC69C71492), UINT64_C(0x8B035A0CA56E172B), UINT64_C(0x8946783500724888), UINT64_C(0xAF1E57C958650569), UINT64_C(0xE1DE4E944FF22261) }, /*A9*/
|
||||
{ UINT64_C(0xEA5EDC4D2718C0D2), UINT64_C(0xCB1C5D4DA15A8AE4), UINT64_C(0xC6272382F8163015), UINT64_C(0x94A934E5057B54CE), UINT64_C(0x658E481A3D68D10D), UINT64_C(0xE8F24929E50A46A0) }, /*AA*/
|
||||
{ UINT64_C(0x7DF146281AF482CD), UINT64_C(0x014B68E726407B06), UINT64_C(0x6CE564938C70DDBC), UINT64_C(0x36DAD2DE72A5DAA2), UINT64_C(0x6D573BF69C0B2980), UINT64_C(0x684DAB14B4AA0329) }, /*AB*/
|
||||
{ UINT64_C(0x9C69DC064E738B5F), UINT64_C(0x83CC16BD5A1C36F5), UINT64_C(0xA99B365E6E141B12), UINT64_C(0x2748FA5AD0FACCE8), UINT64_C(0x26D073A047D99C49), UINT64_C(0xB005B182505B0C0C) }, /*AC*/
|
||||
{ UINT64_C(0x15B6A2A20ED0FD1C), UINT64_C(0x9333AF729BD65A25), UINT64_C(0x22CC333293BD2C1B), UINT64_C(0xD724D949B15E8BE1), UINT64_C(0x69D0DB0512B97117), UINT64_C(0x85ACA8980DD7653C) }, /*AD*/
|
||||
{ UINT64_C(0x230EC629D77BB3F2), UINT64_C(0x43115B991D297CB2), UINT64_C(0xA2F955792C53C76F), UINT64_C(0x48A76728EBE25BA7), UINT64_C(0x7CE662A405384400), UINT64_C(0xDDC06B7E6BF49D66) }, /*AE*/
|
||||
{ UINT64_C(0x20DDB9BD7644410B), UINT64_C(0x056391B1FA2E8C06), UINT64_C(0xCA4EDE51CF167C00), UINT64_C(0x46602B550536F870), UINT64_C(0x5040672597C21FF4), UINT64_C(0x0AF8EC6E8AFB844B) }, /*AF*/
|
||||
{ UINT64_C(0x0023C5749251B883), UINT64_C(0x335A4F86D66B7E00), UINT64_C(0xAE353DED3EFACE8F), UINT64_C(0x3FC80526D67B35DE), UINT64_C(0x0D9078FBDA80BC53), UINT64_C(0x467900DFF3FE4C14) }, /*B0*/
|
||||
{ UINT64_C(0x0F9CB2BE6A448113), UINT64_C(0xE38D541B6A9A5829), UINT64_C(0x673953DAF354FC0E), UINT64_C(0x3C818A277F8569E9), UINT64_C(0x8D16EA77DB122A3B), UINT64_C(0xE40A860318B6EA84) }, /*B1*/
|
||||
{ UINT64_C(0x78CE11F42D7D5E50), UINT64_C(0x84F76DFF199C998D), UINT64_C(0x999B578E3AE935CB), UINT64_C(0xD9FD092C1BE63212), UINT64_C(0x31F33C63ACD316D8), UINT64_C(0x5AA08030B8D65C0C) }, /*B2*/
|
||||
{ UINT64_C(0x0098DBE19CA84FE9), UINT64_C(0xE2426617D1142137), UINT64_C(0x63C3C4166A78E21B), UINT64_C(0x74B145353E03B0E4), UINT64_C(0xF43C0824EAE508C4), UINT64_C(0x58C1E6622528602A) }, /*B3*/
|
||||
{ UINT64_C(0x9E27EBE6D1426A6F), UINT64_C(0x2A6A600A6B5FA342), UINT64_C(0x8FF7E2306BA90370), UINT64_C(0xDF83D91A683EDDDD), UINT64_C(0x29572442F0225388), UINT64_C(0xE9CC0F1B6437320A) }, /*B4*/
|
||||
{ UINT64_C(0x054DF380E896064E), UINT64_C(0xFAB81A4AA3AD88A4), UINT64_C(0xF87426486CCA156F), UINT64_C(0xBB1B3C8237472960), UINT64_C(0x7EC0B87CF73F960A), UINT64_C(0x5C57D7E6470F7808) }, /*B5*/
|
||||
{ UINT64_C(0x5758E103AC614A1A), UINT64_C(0x766AEE86F81358DF), UINT64_C(0x203FBA51DC74396A), UINT64_C(0x78C93DF969C5721F), UINT64_C(0xE69E32E230196597), UINT64_C(0xE287C6CECD8AB95B) }, /*B6*/
|
||||
{ UINT64_C(0x2A06A7C10C0DCC97), UINT64_C(0x99D5298268A6745F), UINT64_C(0xF2D818BB774858B3), UINT64_C(0xD52A820D4F64D886), UINT64_C(0x2F808EF87A263981), UINT64_C(0xBB91206E6347C676) }, /*B7*/
|
||||
{ UINT64_C(0x0847C6D71CE0C746), UINT64_C(0x86FD451B447C1E11), UINT64_C(0xC20623B0E2856FCC), UINT64_C(0x3ADDFA2D0398181E), UINT64_C(0x6736A0A06B336B46), UINT64_C(0xD1C70AEEB2B1257D) }, /*B8*/
|
||||
{ UINT64_C(0x5633260D141A9776), UINT64_C(0xD530805F596CA3DB), UINT64_C(0x8CE33EF69437CE46), UINT64_C(0xF62D54E97E747088), UINT64_C(0xDF5C9318489B45EA), UINT64_C(0xA4AAD29F0BA850CA) }, /*B9*/
|
||||
{ UINT64_C(0xBDBD7B16767F6D9F), UINT64_C(0xF7968427F1B7B6DD), UINT64_C(0x58C76599B35276EE), UINT64_C(0x286F4C7F6CADD791), UINT64_C(0x8188C0401742117B), UINT64_C(0xCEC4F1964266D163) }, /*BA*/
|
||||
{ UINT64_C(0x97E4E8A6B5135B24), UINT64_C(0x8A8BD785E5297977), UINT64_C(0x4545C1A0975BC5BB), UINT64_C(0x13FAE3BD9F59E37D), UINT64_C(0xAFD5627C0E91DE2B), UINT64_C(0xA223AC778474E1A9) }, /*BB*/
|
||||
{ UINT64_C(0xDE1BF1EAF86C6B3B), UINT64_C(0xA246A3ACD50035FE), UINT64_C(0x6F80179DD96A21CD), UINT64_C(0x3F8DB7CB17300D03), UINT64_C(0x497A798B5D94506C), UINT64_C(0xAD52DCC6F61AE841) }, /*BC*/
|
||||
{ UINT64_C(0xF4A4E1D08E1F440B), UINT64_C(0x5E27633CD56422E0), UINT64_C(0x1465C14F1DB41420), UINT64_C(0x9A939043988D37C2), UINT64_C(0xCBE65CFA245DB368), UINT64_C(0x6340AEDE28DDA855) }, /*BD*/
|
||||
{ UINT64_C(0x1F7AB65A3F892454), UINT64_C(0xD70AB4167EBEB5A1), UINT64_C(0x9B2631E824C2028D), UINT64_C(0xD5D97BDEE31519BC), UINT64_C(0xEA2DC77449E4058C), UINT64_C(0xEB204F2D6D2FBAFF) }, /*BE*/
|
||||
{ UINT64_C(0x6537E69171A2665D), UINT64_C(0x3FD2F835435A3F23), UINT64_C(0xADD5DD3E622D6C8A), UINT64_C(0xC522CDD5E5E243F8), UINT64_C(0x5AEC27F3DBFDA8A2), UINT64_C(0x477A65ED570E1445) }, /*BF*/
|
||||
{ UINT64_C(0x3BA7CB01D32E9D63), UINT64_C(0x9E335734E7B5416B), UINT64_C(0x0ED96A84F94539F6), UINT64_C(0x45CEE2E46DF5A70D), UINT64_C(0xDE142EE1E9AFEC1C), UINT64_C(0x78D6121C4FDC72DD) }, /*C0*/
|
||||
{ UINT64_C(0x7BB30AF653390B77), UINT64_C(0x2D394F2B7F8F7BB6), UINT64_C(0x0277A3C213AF3489), UINT64_C(0x7DF6E674DD56D084), UINT64_C(0x5643CD3073C42451), UINT64_C(0xFAB15F8BD1A1DC18) }, /*C1*/
|
||||
{ UINT64_C(0x42B453ABF5150D8B), UINT64_C(0x913F109C1188E18C), UINT64_C(0xC27BB7631FB43BF9), UINT64_C(0xEBDDE685EF108419), UINT64_C(0x76D67C87C56D33EA), UINT64_C(0x95EC73C0AF40F084) }, /*C2*/
|
||||
{ UINT64_C(0xBCE43D59A1F50BFB), UINT64_C(0xBA7027CA04D84600), UINT64_C(0xFB6FDB98A2BE644B), UINT64_C(0xD5DE777E993DED4A), UINT64_C(0xFCA39F1EDF710F3A), UINT64_C(0xA5E5893C858D8841) }, /*C3*/
|
||||
{ UINT64_C(0xC68AC776E6AEACFC), UINT64_C(0x538067C7866106EB), UINT64_C(0xD27B4A352F4EFDE3), UINT64_C(0x847DA2B3BF01E378), UINT64_C(0x3C79E3C136926D58), UINT64_C(0xF957BC8726AA1610) }, /*C4*/
|
||||
{ UINT64_C(0x95492C4203C7C612), UINT64_C(0x0DD60DB1EE8321FC), UINT64_C(0xE1D9EBA902F62B42), UINT64_C(0xEA2DBF7D0E37A4F2), UINT64_C(0xE11FB9098BF5DA48), UINT64_C(0xDBFE213F818EA338) }, /*C5*/
|
||||
{ UINT64_C(0x17CB21316D4756DD), UINT64_C(0xB88952498140146A), UINT64_C(0x648112F580844288), UINT64_C(0x4947ADC3F7D58F35), UINT64_C(0x651CCE28E26A5377), UINT64_C(0x0B3803DAF337F89B) }, /*C6*/
|
||||
{ UINT64_C(0xBEAB16E2DCE6B6E3), UINT64_C(0x8F39ECC8E39172DF), UINT64_C(0x607CC9553FF29C0E), UINT64_C(0x4BFD15154F4F0BA7), UINT64_C(0xEE6230B6BD408CE4), UINT64_C(0x35B654110D164E99) }, /*C7*/
|
||||
{ UINT64_C(0xADDDFF1BD2C11CD4), UINT64_C(0x2A1A262CBA6E1AA0), UINT64_C(0x0BF2291D09475A46), UINT64_C(0x4C93A0ABADF4DE32), UINT64_C(0x73EE8E1327333E63), UINT64_C(0xF3AE2031F5D13B28) }, /*C8*/
|
||||
{ UINT64_C(0x246C7CABB2D9A55C), UINT64_C(0x50E9C7282C1EE0F6), UINT64_C(0x2FBDA09565A0D3D7), UINT64_C(0x196552679C04A4EB), UINT64_C(0x137C66DA29A6DD82), UINT64_C(0x08A76B6B4BDA56BF) }, /*C9*/
|
||||
{ UINT64_C(0x7CA3C59BE3E28610), UINT64_C(0x6ADD75CF1F7AE248), UINT64_C(0x01747450737A6435), UINT64_C(0xA1F2259CB2B4923B), UINT64_C(0xE0C8F55E8ECE7210), UINT64_C(0xD7964398F350B69B) }, /*CA*/
|
||||
{ UINT64_C(0xE045864ED1825101), UINT64_C(0xAC54969193E1A1C5), UINT64_C(0x23D85A934D0794C7), UINT64_C(0xB4FA88CB734A4213), UINT64_C(0x7C5CBFD6BDA3D5F9), UINT64_C(0x66607FE938748825) }, /*CB*/
|
||||
{ UINT64_C(0xBAF36FD2A180D481), UINT64_C(0xEAC440AC1B9598F7), UINT64_C(0x9AA24D80FFB7B06C), UINT64_C(0x79601F517358F163), UINT64_C(0xD1071831418BB63B), UINT64_C(0x819609A6AE7D3A03) }, /*CC*/
|
||||
{ UINT64_C(0x3E9152D8CDBAE551), UINT64_C(0x86AD793F203DD016), UINT64_C(0xBE3AEB778AD4A891), UINT64_C(0x2810254DD76B6618), UINT64_C(0x9B5DCDE36636C327), UINT64_C(0x0A8AAD65868BC58C) }, /*CD*/
|
||||
{ UINT64_C(0x6D0672780D93152A), UINT64_C(0xEEE705247B828091), UINT64_C(0x9EBDB976F137463F), UINT64_C(0xA7DE3E73A2D0C1BF), UINT64_C(0xF871A00BA0046AC7), UINT64_C(0x484C96A803F23486) }, /*CE*/
|
||||
{ UINT64_C(0x0FC7BCDABB06BFFB), UINT64_C(0xF75C3FFB3D6309B3), UINT64_C(0xECA305D103109162), UINT64_C(0x373F503B204FFF61), UINT64_C(0xCE332C9F54963FA2), UINT64_C(0x9A4420A52242CDB4) }, /*CF*/
|
||||
{ UINT64_C(0xC71D481179D198C1), UINT64_C(0x505A2845CEE92569), UINT64_C(0xF339BFF6DD6755B5), UINT64_C(0x8BEAD52B8DE89245), UINT64_C(0x4B686E65920DCA2B), UINT64_C(0x99593FA43EE68A37) }, /*D0*/
|
||||
{ UINT64_C(0xD90A68D717E61501), UINT64_C(0x9BB920AEA19161A6), UINT64_C(0x2F3D6F96D90EB1E4), UINT64_C(0xDF15ECBA10513D7D), UINT64_C(0xE6E5D539B4F01831), UINT64_C(0xC7D17A7528FECE36) }, /*D1*/
|
||||
{ UINT64_C(0xA04FF0BEB4EBFBAF), UINT64_C(0xE5E90A5B3DDAA3CA), UINT64_C(0x8453542209F4A145), UINT64_C(0x80A6FFD72BB5A707), UINT64_C(0x14E0C4705A1ABF6A), UINT64_C(0xD699EC1FC18A677D) }, /*D2*/
|
||||
{ UINT64_C(0x7021A124E3181575), UINT64_C(0xDC7AAE2817AD945F), UINT64_C(0x8BB5521E7F0D565A), UINT64_C(0x6671D3792F0805EE), UINT64_C(0xD3888EA394413A1A), UINT64_C(0xCE4D7E47B55BF9CC) }, /*D3*/
|
||||
{ UINT64_C(0x22F440263CAADE68), UINT64_C(0xE77BB287772EAC7B), UINT64_C(0x29493775962A40E9), UINT64_C(0x1E06A27FA68CB91B), UINT64_C(0xDDEF02932ABDB9C7), UINT64_C(0x79F03B88DC175233) }, /*D4*/
|
||||
{ UINT64_C(0x65F6D517B53E2391), UINT64_C(0x97DB65A2F00B1C39), UINT64_C(0x1D77AE9B85AA4855), UINT64_C(0x19133B9B3E9B0771), UINT64_C(0x6376D9F11A7DB3D4), UINT64_C(0x949AD02F5AE16184) }, /*D5*/
|
||||
{ UINT64_C(0xFE4434CDE09D923B), UINT64_C(0x03B0FCFD713B7052), UINT64_C(0x2D713290D4A67238), UINT64_C(0x2B56946FF629EE96), UINT64_C(0x60A15D01B2B3C428), UINT64_C(0x0B1D5EAF793933A0) }, /*D6*/
|
||||
{ UINT64_C(0xBC40FCFB0E0D494B), UINT64_C(0xA31C4648C7B3D1DE), UINT64_C(0xF1113C219A07EC8D), UINT64_C(0x2378BEB1A5C2BD1C), UINT64_C(0x190CC3478070A194), UINT64_C(0x63DAB6E1CCF56329) }, /*D7*/
|
||||
{ UINT64_C(0x901B6B9E82BABF91), UINT64_C(0x872A234C45D61001), UINT64_C(0x6CA46A95C1CC6D6C), UINT64_C(0x22779315E0F02295), UINT64_C(0x60A59396346BE6AC), UINT64_C(0xFB67A503CB488846) }, /*D8*/
|
||||
{ UINT64_C(0x50D440F74C97660B), UINT64_C(0xE71ECABF64EDFE0C), UINT64_C(0x80201B895718CE22), UINT64_C(0xA05D89804D35D306), UINT64_C(0x8F700402A2B0D086), UINT64_C(0x326FCB334CA4DFC0) }, /*D9*/
|
||||
{ UINT64_C(0xBCFBD02EA005CDD5), UINT64_C(0xF0225A4675553115), UINT64_C(0x08E18B3692A7AF62), UINT64_C(0x05D34A820C8CED0A), UINT64_C(0x51A8D7CEC33E80EA), UINT64_C(0x0AC007503FAE879C) }, /*DA*/
|
||||
{ UINT64_C(0xF43EEFB5C83C521A), UINT64_C(0xE5E9B05FC48841AC), UINT64_C(0x79C52C38BF85B5F9), UINT64_C(0x26CD0818AE3BF7A9), UINT64_C(0x4F385C32CA8F5F74), UINT64_C(0xF17B22107B954752) }, /*DB*/
|
||||
{ UINT64_C(0x1A48FC969198A4B0), UINT64_C(0xD9A78940BB0C4E1C), UINT64_C(0x42781D9BE60E7691), UINT64_C(0x87D1CAF3680F8A30), UINT64_C(0xD09FF193606AAF29), UINT64_C(0x4518DABC60048793) }, /*DC*/
|
||||
{ UINT64_C(0xF05D48134A56A034), UINT64_C(0x89A65EEB91DC69B9), UINT64_C(0x8FC7F43960E63C62), UINT64_C(0xFA1C6B9FF9415E92), UINT64_C(0x7E219D4E56347935), UINT64_C(0x2B6A48D6DE0AEF85) }, /*DD*/
|
||||
{ UINT64_C(0x1A7FF9C54B045FFD), UINT64_C(0x44A0A9562E9468B2), UINT64_C(0xF11425A22D1EBF92), UINT64_C(0x208D33120BD28E0E), UINT64_C(0xF2D74197AF80E162), UINT64_C(0xCEEDCA73DFE66C93) }, /*DE*/
|
||||
{ UINT64_C(0xD57190439D29C9A4), UINT64_C(0x44C007DC2B5EAF9D), UINT64_C(0xEF6DDF48A780CEDC), UINT64_C(0x61B205E4A96024B1), UINT64_C(0x1885B6CE84C3FE5D), UINT64_C(0xB8B56986B6E2CE21) }, /*DF*/
|
||||
{ UINT64_C(0xF36DACFA34237E99), UINT64_C(0xBE45EB5253BCFED0), UINT64_C(0x402C6946B8B21AC0), UINT64_C(0x2460A6FCE7E9CD67), UINT64_C(0xF89A6D5B162629FC), UINT64_C(0xF66CCEA374DB821E) }, /*E0*/
|
||||
{ UINT64_C(0x16E06074DCC31A1D), UINT64_C(0xF172017AC3FA38C3), UINT64_C(0xBBC1CE4BB784ED60), UINT64_C(0xDA89A8BCE82AE671), UINT64_C(0xA6DACFFB8D26C0BB), UINT64_C(0x185181AE9609F6D6) }, /*E1*/
|
||||
{ UINT64_C(0xF110DBDD94D17661), UINT64_C(0xF59FBB4CBA69F393), UINT64_C(0x463B60FB3F3C5E00), UINT64_C(0x1C60B896FE8E78AC), UINT64_C(0x5EB3E26795DE5AB6), UINT64_C(0x997328D4654D6219) }, /*E2*/
|
||||
{ UINT64_C(0x21069118ABE24B61), UINT64_C(0x811CB8C48FCEFC6A), UINT64_C(0x483B032CFB56F902), UINT64_C(0xFB32E848198CC057), UINT64_C(0xA620815462A04F70), UINT64_C(0x900038D1894959E2) }, /*E3*/
|
||||
{ UINT64_C(0x5AD509789BFFECD0), UINT64_C(0xDDCD5E8325F69CA0), UINT64_C(0x154D8F1ACD9B8C82), UINT64_C(0xAC7DF75E94CE3CAF), UINT64_C(0x6D6554D1B38754BE), UINT64_C(0xB5DB64AF738486E7) }, /*E4*/
|
||||
{ UINT64_C(0x35A308A1AC9A43BF), UINT64_C(0x2647805AB3E6E492), UINT64_C(0x4BB74A616F61588F), UINT64_C(0xFA4602EE5BDBF54E), UINT64_C(0x3FDD62470A7174DB), UINT64_C(0x5795433CA808FAAC) }, /*E5*/
|
||||
{ UINT64_C(0x51A094B8774CA605), UINT64_C(0x5F07974C74EEF225), UINT64_C(0x022AFEF7AD81A953), UINT64_C(0x0967C44BBA336FD6), UINT64_C(0x8AA327918AECBA3D), UINT64_C(0xF70B8436573C3F0A) }, /*E6*/
|
||||
{ UINT64_C(0xCF374F83420766C3), UINT64_C(0x71F31901A13EF07C), UINT64_C(0x63AD56C7DEF9DC0F), UINT64_C(0x9E5BB5E859F5A231), UINT64_C(0xD0BF453BB9893E4C), UINT64_C(0xA1E14B66C2719760) }, /*E7*/
|
||||
{ UINT64_C(0xB41861CC73FD3E48), UINT64_C(0x461D79A138B04BE1), UINT64_C(0x4010D37D37FBA817), UINT64_C(0x7D9622AA693225A4), UINT64_C(0x2204454B8126799A), UINT64_C(0x33A5D487DCCD6EB6) }, /*E8*/
|
||||
{ UINT64_C(0xD291D0317A053320), UINT64_C(0xE27678F1E50D1F76), UINT64_C(0x9A3D663A63159FC7), UINT64_C(0xAD7B4D3F67BAB452), UINT64_C(0x269CC05E2B33CE1C), UINT64_C(0x0FB8261CD734BCC3) }, /*E9*/
|
||||
{ UINT64_C(0xF3D0546D3D4A25EE), UINT64_C(0xB42874AD28C9B7F2), UINT64_C(0x73EC788B29962D28), UINT64_C(0x4AE73A48132B8553), UINT64_C(0x756C99D7A0910B66), UINT64_C(0xECA7E2C2712D555C) }, /*EA*/
|
||||
{ UINT64_C(0x559FA5BF24911FDD), UINT64_C(0xA1DDF5DE3770554B), UINT64_C(0xC7C3FD139366B946), UINT64_C(0x6E7ECC0C881D2BA4), UINT64_C(0x14E76D6A27E54B87), UINT64_C(0x7352D5FBC4FAB878) }, /*EB*/
|
||||
{ UINT64_C(0xF19A622BED8DAC0A), UINT64_C(0x35548E5D7EFC5A2E), UINT64_C(0xCAC84974B4F057B2), UINT64_C(0xAB317ED03D0335AE), UINT64_C(0x710FC138F2C51738), UINT64_C(0x9C90CC495A403416) }, /*EC*/
|
||||
{ UINT64_C(0x9FA7DEB936F10461), UINT64_C(0xA1529B0B58462F9D), UINT64_C(0x9F109111C8B9EC65), UINT64_C(0x23A3EB28444E33EA), UINT64_C(0x554084CA75118937), UINT64_C(0x599D58A7C946EAC2) }, /*ED*/
|
||||
{ UINT64_C(0x6EC3AABB7856AC4E), UINT64_C(0x980E6907C1CBCCAF), UINT64_C(0x1F8557ADC700CBF5), UINT64_C(0x7DCB1CE0AF48D9F4), UINT64_C(0x7FB3DADF8199AB8A), UINT64_C(0xE6B36DB8FADBF312) }, /*EE*/
|
||||
{ UINT64_C(0xC00F0D3F7A101660), UINT64_C(0x605B94B12DB6C697), UINT64_C(0x79944F7BA2B65F38), UINT64_C(0x40858ADEDD47E2BC), UINT64_C(0x1E044BDB0E9FB02B), UINT64_C(0x86C79D01A3109539) }, /*EF*/
|
||||
{ UINT64_C(0x9731893D5B98482A), UINT64_C(0xFB8DE267F9790326), UINT64_C(0x8780F407143A505D), UINT64_C(0xA41CAEFCCCD3A8E3), UINT64_C(0xA042F0B3D7B7A7FE), UINT64_C(0x3E3151FEBB19A1AC) }, /*F0*/
|
||||
{ UINT64_C(0xE7EDF679003A6950), UINT64_C(0xBAFC97D4A8C6AB12), UINT64_C(0x13C096B49C79559A), UINT64_C(0xC3052501434B5019), UINT64_C(0x1280FB23E7ADFB09), UINT64_C(0x1959905D31BD2FC0) }, /*F1*/
|
||||
{ UINT64_C(0x575C0C46FCFCC65B), UINT64_C(0xFE625E873F34B419), UINT64_C(0x1696FDCC7F51B8A3), UINT64_C(0xC79C56F30E5AE7C0), UINT64_C(0x14E3461CD27FAD15), UINT64_C(0x1B7BCCB9CB472859) }, /*F2*/
|
||||
{ UINT64_C(0x3806FE58E5CC8F16), UINT64_C(0xF8244ED76734C1BF), UINT64_C(0x4E04940E0F5DDB56), UINT64_C(0x5BD0AFDDC4158B7B), UINT64_C(0xA4C6BA949911C5C9), UINT64_C(0xFF6E2AC155AE9726) }, /*F3*/
|
||||
{ UINT64_C(0x49C7C844B8114144), UINT64_C(0xB450E41BCA35CB00), UINT64_C(0x302450EC67BEF97C), UINT64_C(0xA8662049DB1E0D8B), UINT64_C(0xDA69C022528EB8FA), UINT64_C(0x6ABBF16585C1A2F7) }, /*F4*/
|
||||
{ UINT64_C(0x37BB420DF67F044E), UINT64_C(0xDCC0E9F3E2EF07B3), UINT64_C(0x4D10088618777841), UINT64_C(0x0492E5379305DAAE), UINT64_C(0x3DA4791C37E4128F), UINT64_C(0x80688445CBA4EA17) }, /*F5*/
|
||||
{ UINT64_C(0x51398A7CE4CF8D9D), UINT64_C(0x49A5FCD891A69CA5), UINT64_C(0x3D72A60EC2392DA5), UINT64_C(0x0E8296B879AB5539), UINT64_C(0x6BCB00AF2EDC0BDE), UINT64_C(0xBEB93848E54B3E90) }, /*F6*/
|
||||
{ UINT64_C(0x7AD7C52A18922E19), UINT64_C(0x29292C57C4F5B8F5), UINT64_C(0xF0CF1F98A577C10B), UINT64_C(0x072B9F293BB660CD), UINT64_C(0x09B8604F5575B6FB), UINT64_C(0xDECB396A81B9FCDB) }, /*F7*/
|
||||
{ UINT64_C(0x254AD7ADB4C220DE), UINT64_C(0x6C62E20F95A0070D), UINT64_C(0xADEB89F339309BD8), UINT64_C(0xA2F685CC178B289F), UINT64_C(0x9343905B5DEE95A5), UINT64_C(0xE0C30F34A2977C86) }, /*F8*/
|
||||
{ UINT64_C(0x669CD51AF7CFBFAA), UINT64_C(0xE3E0806F6880271D), UINT64_C(0x6934C259E098BF90), UINT64_C(0x5DFEEAF0FBCA7249), UINT64_C(0x89F74B948B4118B6), UINT64_C(0x53640AEAFB6807C3) }, /*F9*/
|
||||
{ UINT64_C(0xDD3BACDCC04BE120), UINT64_C(0x6D4949BD64198E51), UINT64_C(0x31FDB39666598A74), UINT64_C(0xBBBC6DE9C0C15A81), UINT64_C(0xF27F201C61C06279), UINT64_C(0x2738AFE3E84E5CDD) }, /*FA*/
|
||||
{ UINT64_C(0xCDD71FD35A6411DE), UINT64_C(0x3CC012793E87523F), UINT64_C(0xB0CFF8720FCA36F3), UINT64_C(0x93E85FE07300F012), UINT64_C(0xE894A085263F090B), UINT64_C(0x2DF60A01DAFA90EC) }, /*FB*/
|
||||
{ UINT64_C(0x9DA50DB1EEB4FADD), UINT64_C(0xE524E49C9974799A), UINT64_C(0xDE09FFF26A24CBB9), UINT64_C(0xAF9D71E9F3ACE7CD), UINT64_C(0xEB62B1A62566EC9D), UINT64_C(0x06D02AB1217D3553) }, /*FC*/
|
||||
{ UINT64_C(0xDD31E6391AE03522), UINT64_C(0x93ACD1065B35E915), UINT64_C(0xF4EB56CC03E79218), UINT64_C(0x0717815C850C97F1), UINT64_C(0xBF4F6A8AC0540A6F), UINT64_C(0xFCF8AE5DE9507FF0) }, /*FD*/
|
||||
{ UINT64_C(0xAB45B413DC50B207), UINT64_C(0x40B417369551D8D5), UINT64_C(0xCA32286A108E7210), UINT64_C(0x03225E54D8D093AF), UINT64_C(0x4B6CA5591EA576E9), UINT64_C(0x4E12AB774DC4E062) }, /*FE*/
|
||||
{ UINT64_C(0xD9F4F850DF6CB96C), UINT64_C(0x8ABAD81B1667335D), UINT64_C(0xCB4079CFE79C72E5), UINT64_C(0xE5542F763E316996), UINT64_C(0x303E4B79B9D397C4), UINT64_C(0xE46933038B945111) }, /*FF*/
|
||||
{ UINT64_C(0x75B15CC53B0D2502), UINT64_C(0xDA1BCA6BA0524358), UINT64_C(0x9EDA977556C06B7E), UINT64_C(0x6C57727ECF0A1325), UINT64_C(0xDC613D5A78E5C3F8), UINT64_C(0xCE062D94A3B4945A) } /*ZZ*/
|
||||
};
|
||||
|
||||
/* 144 byte round keys containing the first 1152 bits of sqrt(2) */
|
||||
static const uint64_t NUHASH_RND[ROUNDS][NUHASH_WORDS] =
|
||||
{
|
||||
{ UINT64_C(0x6A09E667F3BCC908), UINT64_C(0xB2FB1366EA957D3E), UINT64_C(0x3ADEC17512775099), UINT64_C(0xDA2F590B0667322A), UINT64_C(0x95F9060875714587), UINT64_C(0x5163FCDFB907B672) }, /*R1*/
|
||||
{ UINT64_C(0x1EE950BC8738F694), UINT64_C(0xF0090E6C7BF44ED1), UINT64_C(0xA4405D0E855E3E9C), UINT64_C(0xA60B38C0237866F7), UINT64_C(0x956379222D108B14), UINT64_C(0x8C1578E45EF89C67) }, /*R2*/
|
||||
{ UINT64_C(0x8DAB5147176FD3B9), UINT64_C(0x9654C68663E7909B), UINT64_C(0xEA5E241F06DCB05D), UINT64_C(0xD549411320819495), UINT64_C(0x0272956DB1FA1DFB), UINT64_C(0xE9A74059D7927C18) }, /*R3*/
|
||||
{ UINT64_C(0x84C9B579AA516CA3), UINT64_C(0x719E6836DF046D8E), UINT64_C(0x0209B803FC646A5E), UINT64_C(0x6654BD3EF7B43D7F), UINT64_C(0xED437C7F9444260F), UINT64_C(0xBD40C483EF550385) }, /*R4*/
|
||||
{ UINT64_C(0x83F97BBD45EFB866), UINT64_C(0x3107145D5FEBE765), UINT64_C(0xA49E94EC7F597105), UINT64_C(0xFBFC2E1FA763EF01), UINT64_C(0xF3599C82F2FE500B), UINT64_C(0x848CF0BD252AE046) }, /*R5*/
|
||||
};
|
||||
|
||||
/* 16x16 8-bit substitution box, borrowed straight from Rijndael */
|
||||
static const uint8_t NUHASH_SBX[256U] =
|
||||
{
|
||||
UINT8_C(0x63), UINT8_C(0x7C), UINT8_C(0x77), UINT8_C(0x7B), UINT8_C(0xF2), UINT8_C(0x6B), UINT8_C(0x6F), UINT8_C(0xC5), UINT8_C(0x30), UINT8_C(0x01), UINT8_C(0x67), UINT8_C(0x2B), UINT8_C(0xFE), UINT8_C(0xD7), UINT8_C(0xAB), UINT8_C(0x76),
|
||||
UINT8_C(0xCA), UINT8_C(0x82), UINT8_C(0xC9), UINT8_C(0x7D), UINT8_C(0xFA), UINT8_C(0x59), UINT8_C(0x47), UINT8_C(0xF0), UINT8_C(0xAD), UINT8_C(0xD4), UINT8_C(0xA2), UINT8_C(0xAF), UINT8_C(0x9C), UINT8_C(0xA4), UINT8_C(0x72), UINT8_C(0xC0),
|
||||
UINT8_C(0xB7), UINT8_C(0xFD), UINT8_C(0x93), UINT8_C(0x26), UINT8_C(0x36), UINT8_C(0x3F), UINT8_C(0xF7), UINT8_C(0xCC), UINT8_C(0x34), UINT8_C(0xA5), UINT8_C(0xE5), UINT8_C(0xF1), UINT8_C(0x71), UINT8_C(0xD8), UINT8_C(0x31), UINT8_C(0x15),
|
||||
UINT8_C(0x04), UINT8_C(0xC7), UINT8_C(0x23), UINT8_C(0xC3), UINT8_C(0x18), UINT8_C(0x96), UINT8_C(0x05), UINT8_C(0x9A), UINT8_C(0x07), UINT8_C(0x12), UINT8_C(0x80), UINT8_C(0xE2), UINT8_C(0xEB), UINT8_C(0x27), UINT8_C(0xB2), UINT8_C(0x75),
|
||||
UINT8_C(0x09), UINT8_C(0x83), UINT8_C(0x2C), UINT8_C(0x1A), UINT8_C(0x1B), UINT8_C(0x6E), UINT8_C(0x5A), UINT8_C(0xA0), UINT8_C(0x52), UINT8_C(0x3B), UINT8_C(0xD6), UINT8_C(0xB3), UINT8_C(0x29), UINT8_C(0xE3), UINT8_C(0x2F), UINT8_C(0x84),
|
||||
UINT8_C(0x53), UINT8_C(0xD1), UINT8_C(0x00), UINT8_C(0xED), UINT8_C(0x20), UINT8_C(0xFC), UINT8_C(0xB1), UINT8_C(0x5B), UINT8_C(0x6A), UINT8_C(0xCB), UINT8_C(0xBE), UINT8_C(0x39), UINT8_C(0x4A), UINT8_C(0x4C), UINT8_C(0x58), UINT8_C(0xCF),
|
||||
UINT8_C(0xD0), UINT8_C(0xEF), UINT8_C(0xAA), UINT8_C(0xFB), UINT8_C(0x43), UINT8_C(0x4D), UINT8_C(0x33), UINT8_C(0x85), UINT8_C(0x45), UINT8_C(0xF9), UINT8_C(0x02), UINT8_C(0x7F), UINT8_C(0x50), UINT8_C(0x3C), UINT8_C(0x9F), UINT8_C(0xA8),
|
||||
UINT8_C(0x51), UINT8_C(0xA3), UINT8_C(0x40), UINT8_C(0x8F), UINT8_C(0x92), UINT8_C(0x9D), UINT8_C(0x38), UINT8_C(0xF5), UINT8_C(0xBC), UINT8_C(0xB6), UINT8_C(0xDA), UINT8_C(0x21), UINT8_C(0x10), UINT8_C(0xFF), UINT8_C(0xF3), UINT8_C(0xD2),
|
||||
UINT8_C(0xCD), UINT8_C(0x0C), UINT8_C(0x13), UINT8_C(0xEC), UINT8_C(0x5F), UINT8_C(0x97), UINT8_C(0x44), UINT8_C(0x17), UINT8_C(0xC4), UINT8_C(0xA7), UINT8_C(0x7E), UINT8_C(0x3D), UINT8_C(0x64), UINT8_C(0x5D), UINT8_C(0x19), UINT8_C(0x73),
|
||||
UINT8_C(0x60), UINT8_C(0x81), UINT8_C(0x4F), UINT8_C(0xDC), UINT8_C(0x22), UINT8_C(0x2A), UINT8_C(0x90), UINT8_C(0x88), UINT8_C(0x46), UINT8_C(0xEE), UINT8_C(0xB8), UINT8_C(0x14), UINT8_C(0xDE), UINT8_C(0x5E), UINT8_C(0x0B), UINT8_C(0xDB),
|
||||
UINT8_C(0xE0), UINT8_C(0x32), UINT8_C(0x3A), UINT8_C(0x0A), UINT8_C(0x49), UINT8_C(0x06), UINT8_C(0x24), UINT8_C(0x5C), UINT8_C(0xC2), UINT8_C(0xD3), UINT8_C(0xAC), UINT8_C(0x62), UINT8_C(0x91), UINT8_C(0x95), UINT8_C(0xE4), UINT8_C(0x79),
|
||||
UINT8_C(0xE7), UINT8_C(0xC8), UINT8_C(0x37), UINT8_C(0x6D), UINT8_C(0x8D), UINT8_C(0xD5), UINT8_C(0x4E), UINT8_C(0xA9), UINT8_C(0x6C), UINT8_C(0x56), UINT8_C(0xF4), UINT8_C(0xEA), UINT8_C(0x65), UINT8_C(0x7A), UINT8_C(0xAE), UINT8_C(0x08),
|
||||
UINT8_C(0xBA), UINT8_C(0x78), UINT8_C(0x25), UINT8_C(0x2E), UINT8_C(0x1C), UINT8_C(0xA6), UINT8_C(0xB4), UINT8_C(0xC6), UINT8_C(0xE8), UINT8_C(0xDD), UINT8_C(0x74), UINT8_C(0x1F), UINT8_C(0x4B), UINT8_C(0xBD), UINT8_C(0x8B), UINT8_C(0x8A),
|
||||
UINT8_C(0x70), UINT8_C(0x3E), UINT8_C(0xB5), UINT8_C(0x66), UINT8_C(0x48), UINT8_C(0x03), UINT8_C(0xF6), UINT8_C(0x0E), UINT8_C(0x61), UINT8_C(0x35), UINT8_C(0x57), UINT8_C(0xB9), UINT8_C(0x86), UINT8_C(0xC1), UINT8_C(0x1D), UINT8_C(0x9E),
|
||||
UINT8_C(0xE1), UINT8_C(0xF8), UINT8_C(0x98), UINT8_C(0x11), UINT8_C(0x69), UINT8_C(0xD9), UINT8_C(0x8E), UINT8_C(0x94), UINT8_C(0x9B), UINT8_C(0x1E), UINT8_C(0x87), UINT8_C(0xE9), UINT8_C(0xCE), UINT8_C(0x55), UINT8_C(0x28), UINT8_C(0xDF),
|
||||
UINT8_C(0x8C), UINT8_C(0xA1), UINT8_C(0x89), UINT8_C(0x0D), UINT8_C(0xBF), UINT8_C(0xE6), UINT8_C(0x42), UINT8_C(0x68), UINT8_C(0x41), UINT8_C(0x99), UINT8_C(0x2D), UINT8_C(0x0F), UINT8_C(0xB0), UINT8_C(0x54), UINT8_C(0xBB), UINT8_C(0x16)
|
||||
};
|
||||
|
||||
/* 256 byte finalization vector, random permutation courtesy of Random.org */
|
||||
static const uint8_t NUHASH_FIN[256U] =
|
||||
{
|
||||
UINT8_C(0xB4), UINT8_C(0x98), UINT8_C(0x0C), UINT8_C(0x84), UINT8_C(0x24), UINT8_C(0xF3), UINT8_C(0x27), UINT8_C(0x8F), UINT8_C(0xA6), UINT8_C(0x5E), UINT8_C(0xF0), UINT8_C(0x65), UINT8_C(0x86), UINT8_C(0xBC), UINT8_C(0x09), UINT8_C(0x92),
|
||||
UINT8_C(0x75), UINT8_C(0x21), UINT8_C(0xB9), UINT8_C(0x95), UINT8_C(0x66), UINT8_C(0x8A), UINT8_C(0x2F), UINT8_C(0x13), UINT8_C(0xB5), UINT8_C(0xB7), UINT8_C(0x6B), UINT8_C(0x33), UINT8_C(0x2A), UINT8_C(0xBF), UINT8_C(0xF7), UINT8_C(0x0F),
|
||||
UINT8_C(0x0A), UINT8_C(0xE7), UINT8_C(0x16), UINT8_C(0x30), UINT8_C(0x77), UINT8_C(0x61), UINT8_C(0x48), UINT8_C(0x90), UINT8_C(0xDF), UINT8_C(0xAF), UINT8_C(0x72), UINT8_C(0x79), UINT8_C(0xF6), UINT8_C(0xA5), UINT8_C(0x58), UINT8_C(0xD1),
|
||||
UINT8_C(0xF2), UINT8_C(0x40), UINT8_C(0x9F), UINT8_C(0x41), UINT8_C(0xE8), UINT8_C(0x03), UINT8_C(0xA1), UINT8_C(0x05), UINT8_C(0xC5), UINT8_C(0x35), UINT8_C(0xC7), UINT8_C(0x97), UINT8_C(0x54), UINT8_C(0x7B), UINT8_C(0xB3), UINT8_C(0xF5),
|
||||
UINT8_C(0xB8), UINT8_C(0xA8), UINT8_C(0xD8), UINT8_C(0x68), UINT8_C(0x51), UINT8_C(0xAD), UINT8_C(0xE3), UINT8_C(0xC2), UINT8_C(0x5D), UINT8_C(0xCF), UINT8_C(0xEA), UINT8_C(0x89), UINT8_C(0x37), UINT8_C(0xF1), UINT8_C(0x55), UINT8_C(0x60),
|
||||
UINT8_C(0xA4), UINT8_C(0x26), UINT8_C(0xAC), UINT8_C(0x32), UINT8_C(0x0E), UINT8_C(0xD2), UINT8_C(0x85), UINT8_C(0x6F), UINT8_C(0xC8), UINT8_C(0xDC), UINT8_C(0x36), UINT8_C(0x6D), UINT8_C(0xA3), UINT8_C(0x22), UINT8_C(0x5A), UINT8_C(0xC9),
|
||||
UINT8_C(0x5C), UINT8_C(0x91), UINT8_C(0x1B), UINT8_C(0x5B), UINT8_C(0xE9), UINT8_C(0x78), UINT8_C(0xD7), UINT8_C(0x44), UINT8_C(0xEB), UINT8_C(0x1A), UINT8_C(0xC0), UINT8_C(0xCA), UINT8_C(0x94), UINT8_C(0x53), UINT8_C(0xC4), UINT8_C(0x11),
|
||||
UINT8_C(0x12), UINT8_C(0xCC), UINT8_C(0xFF), UINT8_C(0x88), UINT8_C(0x0D), UINT8_C(0x4E), UINT8_C(0xB2), UINT8_C(0xB1), UINT8_C(0x4A), UINT8_C(0x3A), UINT8_C(0xE1), UINT8_C(0x2E), UINT8_C(0x0B), UINT8_C(0x4C), UINT8_C(0x5F), UINT8_C(0x06),
|
||||
UINT8_C(0x81), UINT8_C(0x31), UINT8_C(0xD9), UINT8_C(0x3D), UINT8_C(0xFD), UINT8_C(0x43), UINT8_C(0x67), UINT8_C(0x62), UINT8_C(0x00), UINT8_C(0x9C), UINT8_C(0x50), UINT8_C(0xCE), UINT8_C(0x6E), UINT8_C(0x15), UINT8_C(0x82), UINT8_C(0x29),
|
||||
UINT8_C(0x96), UINT8_C(0xDA), UINT8_C(0x87), UINT8_C(0xEF), UINT8_C(0x6C), UINT8_C(0xC1), UINT8_C(0x8B), UINT8_C(0x07), UINT8_C(0x8E), UINT8_C(0x17), UINT8_C(0xEC), UINT8_C(0x9A), UINT8_C(0xBA), UINT8_C(0x46), UINT8_C(0x04), UINT8_C(0x73),
|
||||
UINT8_C(0x39), UINT8_C(0xE4), UINT8_C(0x63), UINT8_C(0xBE), UINT8_C(0x64), UINT8_C(0x47), UINT8_C(0xE6), UINT8_C(0x3F), UINT8_C(0x25), UINT8_C(0x52), UINT8_C(0x59), UINT8_C(0xA7), UINT8_C(0x42), UINT8_C(0x38), UINT8_C(0x99), UINT8_C(0x01),
|
||||
UINT8_C(0xE5), UINT8_C(0x1D), UINT8_C(0x28), UINT8_C(0x7A), UINT8_C(0xB0), UINT8_C(0x7C), UINT8_C(0x9D), UINT8_C(0x56), UINT8_C(0xE2), UINT8_C(0xD6), UINT8_C(0xA0), UINT8_C(0xF4), UINT8_C(0x1E), UINT8_C(0xE0), UINT8_C(0xD3), UINT8_C(0x83),
|
||||
UINT8_C(0x6A), UINT8_C(0xBB), UINT8_C(0x18), UINT8_C(0x20), UINT8_C(0xAE), UINT8_C(0x57), UINT8_C(0xAA), UINT8_C(0x8D), UINT8_C(0x71), UINT8_C(0x1F), UINT8_C(0x34), UINT8_C(0x4D), UINT8_C(0x2D), UINT8_C(0x3C), UINT8_C(0x2B), UINT8_C(0xF8),
|
||||
UINT8_C(0x10), UINT8_C(0x7E), UINT8_C(0xCB), UINT8_C(0xFB), UINT8_C(0x49), UINT8_C(0xA2), UINT8_C(0x45), UINT8_C(0x7F), UINT8_C(0x3E), UINT8_C(0xBD), UINT8_C(0xC3), UINT8_C(0xFC), UINT8_C(0x14), UINT8_C(0x74), UINT8_C(0x23), UINT8_C(0x4F),
|
||||
UINT8_C(0x7D), UINT8_C(0x69), UINT8_C(0x93), UINT8_C(0x19), UINT8_C(0xD0), UINT8_C(0x1C), UINT8_C(0x08), UINT8_C(0xF9), UINT8_C(0xDD), UINT8_C(0xC6), UINT8_C(0x2C), UINT8_C(0x9E), UINT8_C(0xA9), UINT8_C(0x4B), UINT8_C(0xFE), UINT8_C(0xED),
|
||||
UINT8_C(0x76), UINT8_C(0xDB), UINT8_C(0xAB), UINT8_C(0xD4), UINT8_C(0x80), UINT8_C(0xCD), UINT8_C(0xB6), UINT8_C(0x8C), UINT8_C(0xDE), UINT8_C(0x70), UINT8_C(0x9B), UINT8_C(0xD5), UINT8_C(0xFA), UINT8_C(0xEE), UINT8_C(0x02), UINT8_C(0x3B)
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Mix functions */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
/* Based on "Better Bit Mixing" functions, by David Stafford */
|
||||
#define MIX_FUNCTION(U,V,W,X,Y,Z) \
|
||||
static INLINE uint64_t mix_##U(uint64_t key) \
|
||||
{ \
|
||||
key = (key ^ (key >> (V))) * (W); \
|
||||
key = (key ^ (key >> (X))) * (Y); \
|
||||
return key ^ (key >> (Z)); \
|
||||
}
|
||||
|
||||
MIX_FUNCTION(1, 31, UINT64_C(0x7FB5D329728EA185), 27, UINT64_C(0x81DADEF4BC2DD44D), 33) /* Mix01 */
|
||||
MIX_FUNCTION(2, 31, UINT64_C(0x99BCF6822B23CA35), 30, UINT64_C(0x14020A57ACCED8B7), 33) /* Mix03 */
|
||||
MIX_FUNCTION(3, 31, UINT64_C(0x69B0BC90BD9A8C49), 27, UINT64_C(0x3D5E661A2A77868D), 30) /* Mix06 */
|
||||
MIX_FUNCTION(4, 30, UINT64_C(0x16A6AC37883AF045), 26, UINT64_C(0xCC9C31A4274686A5), 32) /* Mix07 */
|
||||
MIX_FUNCTION(5, 30, UINT64_C(0xBF58476D1CE4E5B9), 27, UINT64_C(0x94D049BB133111EB), 31) /* Mix13 */
|
||||
MIX_FUNCTION(6, 30, UINT64_C(0x4BE98134A5976FD3), 29, UINT64_C(0x3BC0993A5AD19A13), 31) /* Mix14 */
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Substitution function */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static INLINE void substitute_bytes(uint8_t *const buffer, const size_t len)
|
||||
{
|
||||
size_t pos;
|
||||
for (pos = 0U; pos < len; ++pos)
|
||||
{
|
||||
buffer[pos] = NUHASH_SBX[buffer[pos]];
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Update function */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static INLINE void update(nuhash_t *const ctx, const size_t index)
|
||||
{
|
||||
size_t rnd;
|
||||
const uint64_t *const row_addr = NUHASH_XOR[index];
|
||||
|
||||
for (rnd = 0U; rnd < ROUNDS; ++rnd)
|
||||
{
|
||||
const uint64_t initial_value = ctx->hash[0U];
|
||||
|
||||
ctx->hash[0U] = mix_1(((ctx->hash[0U] << 32) | (ctx->hash[1U] >> 32)) ^ row_addr[0U] ^ NUHASH_RND[rnd][0U]);
|
||||
ctx->hash[1U] = mix_2(((ctx->hash[1U] << 32) | (ctx->hash[2U] >> 32)) ^ row_addr[1U] ^ NUHASH_RND[rnd][1U]);
|
||||
ctx->hash[2U] = mix_3(((ctx->hash[2U] << 32) | (ctx->hash[3U] >> 32)) ^ row_addr[2U] ^ NUHASH_RND[rnd][2U]);
|
||||
ctx->hash[3U] = mix_4(((ctx->hash[3U] << 32) | (ctx->hash[4U] >> 32)) ^ row_addr[3U] ^ NUHASH_RND[rnd][3U]);
|
||||
ctx->hash[4U] = mix_5(((ctx->hash[4U] << 32) | (ctx->hash[5U] >> 32)) ^ row_addr[4U] ^ NUHASH_RND[rnd][4U]);
|
||||
ctx->hash[5U] = mix_6(((ctx->hash[5U] << 32) | (initial_value >> 32)) ^ row_addr[5U] ^ NUHASH_RND[rnd][5U]);
|
||||
|
||||
substitute_bytes((uint8_t*)ctx->hash, NUHASH_BYTES);
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Bit function */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static INLINE void store_ui64(uint8_t *const out, uint64_t value)
|
||||
{
|
||||
size_t pos;
|
||||
for (pos = sizeof(uint64_t); pos--; value >>= 8)
|
||||
{
|
||||
out[pos] = (uint8_t)(value & 0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
static INLINE void store_words(uint8_t *out, const uint64_t *const src, const size_t count)
|
||||
{
|
||||
size_t pos;
|
||||
for (pos = 0U; pos < count; ++pos, out += sizeof(uint64_t))
|
||||
{
|
||||
store_ui64(out, src[pos]);
|
||||
}
|
||||
}
|
||||
|
||||
static INLINE void copy_words(uint64_t *const out, const uint64_t *const src, const size_t count)
|
||||
{
|
||||
size_t pos;
|
||||
for (pos = 0U; pos < count; ++pos)
|
||||
{
|
||||
out[pos] = src[pos];
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Stream API */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
void nuhash_init(nuhash_t *const ctx)
|
||||
{
|
||||
copy_words(ctx->hash, NUHASH_INI, NUHASH_WORDS);
|
||||
}
|
||||
|
||||
void nuhash_init_with_key(nuhash_t *const ctx, const uint8_t *const key, const size_t len)
|
||||
{
|
||||
size_t pos;
|
||||
nuhash_init(ctx);
|
||||
|
||||
if (len > 0U)
|
||||
{
|
||||
for (pos = 0U; pos < len; ++pos)
|
||||
{
|
||||
update(ctx, key[pos]);
|
||||
}
|
||||
update(ctx, 256U);
|
||||
}
|
||||
}
|
||||
|
||||
void nuhash_update(nuhash_t *const ctx, const uint8_t *const src, const size_t len)
|
||||
{
|
||||
size_t pos;
|
||||
for (pos = 0U; pos < len; ++pos)
|
||||
{
|
||||
update(ctx, src[pos]);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t *nuhash_final(nuhash_t *const ctx, uint8_t *const out)
|
||||
{
|
||||
size_t pos;
|
||||
update(ctx, 256U);
|
||||
|
||||
for (pos = 0U; pos < COUNT_OF(NUHASH_FIN); ++pos)
|
||||
{
|
||||
update(ctx, NUHASH_FIN[pos]);
|
||||
}
|
||||
|
||||
store_words(out, ctx->hash, NUHASH_WORDS);
|
||||
return out;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Simple API */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
uint8_t *nuhash_compute(const uint8_t *const src, const size_t len, uint8_t *const out)
|
||||
{
|
||||
nuhash_t ctx;
|
||||
nuhash_init(&ctx);
|
||||
|
||||
if (len > 0U)
|
||||
{
|
||||
nuhash_update(&ctx, src, len);
|
||||
}
|
||||
|
||||
nuhash_final(&ctx, out);
|
||||
return out;
|
||||
}
|
||||
|
||||
uint8_t *nuhash_compute_with_key(const uint8_t *const key, const size_t key_len, const uint8_t *const src, const size_t in_len, uint8_t *const out)
|
||||
{
|
||||
nuhash_t ctx;
|
||||
nuhash_init_with_key(&ctx, key, key_len);
|
||||
|
||||
if (in_len > 0U)
|
||||
{
|
||||
nuhash_update(&ctx, src, in_len);
|
||||
}
|
||||
|
||||
nuhash_final(&ctx, out);
|
||||
return out;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Utility functions */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static const char* const XDIGIT_LOWER = "0123456789abcdef";
|
||||
static const char* const XDIGIT_UPPER = "0123456789ABCDEF";
|
||||
|
||||
char *nuhash_tohex(const uint8_t *const hash, const int upper, char *const out)
|
||||
{
|
||||
char *ptr = out;
|
||||
const char *const xdigit = upper ? XDIGIT_UPPER : XDIGIT_LOWER;
|
||||
size_t pos;
|
||||
for (pos = 0U; pos < NUHASH_BYTES; ++pos)
|
||||
{
|
||||
*(ptr++) = xdigit[(hash[pos] >> 4) & 0x0F];
|
||||
*(ptr++) = xdigit[(hash[pos] >> 0) & 0x0F];
|
||||
}
|
||||
|
||||
*ptr = (char)0U;
|
||||
return out;
|
||||
}
|
||||
|
||||
char *nuhash_version(uint16_t version[3U], char *const build)
|
||||
{
|
||||
version[0U] = VERSION_MAJOR;
|
||||
version[1U] = VERSION_MINOR;
|
||||
version[2U] = VERSION_PATCH;
|
||||
|
||||
return strcpy(build, BUILD_DATE);
|
||||
}
|
8
libnuhash/src/version.h
Normal file
8
libnuhash/src/version.h
Normal file
@ -0,0 +1,8 @@
|
||||
/******************************************************************************/
|
||||
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
#define NUHASH_VERSION_MAJOR 1
|
||||
#define NUHASH_VERSION_MINOR 0
|
||||
#define NUHASH_VERSION_PATCH 0
|
95
make.cmd
Normal file
95
make.cmd
Normal file
@ -0,0 +1,95 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
|
||||
if "%MSVC_PATH%"=="" (
|
||||
set "MSVC_PATH=C:\Program Files\Microsoft Visual Studio\2022\Community"
|
||||
)
|
||||
|
||||
if exist "%MSVC_PATH%\VC\Auxiliary\Build\vcvarsall.bat" (
|
||||
call "%MSVC_PATH%\VC\Auxiliary\Build\vcvarsall.bat" x86
|
||||
) else (
|
||||
echo vcvarsall.bat not found. Please check your MSVC_PATH variable!
|
||||
goto BuildError
|
||||
)
|
||||
|
||||
if "%PANDODC_PATH%"=="" (
|
||||
set "PANDODC_PATH=C:\Program Files\Pandoc"
|
||||
)
|
||||
|
||||
if not exist "%PANDODC_PATH%\pandoc.exe" (
|
||||
echo pandoc.exe not found. Please check your PANDODC_PATH variable!
|
||||
goto BuildError
|
||||
)
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
REM CLEAN UP
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
if exist "%CD%\bin\" rmdir /S /Q "%CD%\bin"
|
||||
if exist "%CD%\bin\" (
|
||||
echo Failed to clean up intermediate files!
|
||||
goto BuildError
|
||||
)
|
||||
|
||||
if exist "%CD%\obj\" rmdir /S /Q "%CD%\obj"
|
||||
if exist "%CD%\obj\" (
|
||||
echo Failed to clean up intermediate files!
|
||||
goto BuildError
|
||||
)
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
REM BUILD EXECUTABLES
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
MSBuild.exe /property:Platform=x86 /property:Configuration=Release /target:rebuild "%CD%\nuhash.sln"
|
||||
if not "%ERRORLEVEL%"=="0" goto BuildError
|
||||
|
||||
MSBuild.exe /property:Platform=x64 /property:Configuration=Release /target:rebuild "%CD%\nuhash.sln"
|
||||
if not "%ERRORLEVEL%"=="0" goto BuildError
|
||||
|
||||
MSBuild.exe /property:Platform=ARM64 /property:Configuration=Release /target:rebuild "%CD%\nuhash.sln"
|
||||
if not "%ERRORLEVEL%"=="0" goto BuildError
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
REM GENERATE DOCUMENTS
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
if not exist "%CD%\out\" mkdir "%CD%\out"
|
||||
|
||||
"%PANDODC_PATH%\pandoc.exe" --standalone --embed-resources --css etc\style\gh-pandoc.min.css --metadata title="NuHash README" -o "%~dp0\out\README.html" "%~dp0\README.md"
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
REM COPY FILES
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
if exist "%CD%\out\nuhash-x86.exe" del /F "%CD%\out\nuhash-x86.exe"
|
||||
if exist "%CD%\out\nuhash-x64.exe" del /F "%CD%\out\nuhash-x64.exe"
|
||||
if exist "%CD%\out\nuhash-a64.exe" del /F "%CD%\out\nuhash-a64.exe"
|
||||
|
||||
copy /Y /B "%CD%\bin\Win32\Release\nuhash.exe" "%CD%\out\nuhash-x86.exe"
|
||||
copy /Y /B "%CD%\bin\x64\Release\nuhash.exe" "%CD%\out\nuhash-x64.exe"
|
||||
copy /Y /B "%CD%\bin\ARM64\Release\nuhash.exe" "%CD%\out\nuhash-a64.exe"
|
||||
|
||||
attrib +R "%CD%\out\nuhash-x86.exe"
|
||||
attrib +R "%CD%\out\nuhash-x64.exe"
|
||||
attrib +R "%CD%\out\nuhash-a64.exe"
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
REM COMPLETED
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
echo.
|
||||
echo Build completed.
|
||||
echo.
|
||||
pause
|
||||
goto:eof
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
REM BUILD ERROR
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
:BuildError
|
||||
echo.
|
||||
echo Build has failed !!!
|
||||
echo.
|
||||
pause
|
66
nuhash.sln
Normal file
66
nuhash.sln
Normal file
@ -0,0 +1,66 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.6.33815.320
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NuHash", "tool\nuhash.vcxproj", "{867A1634-C6AC-4089-B645-A1BE289D597B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnuhash", "libnuhash\libnuhash.vcxproj", "{8FA5C597-887D-46BC-A6C9-2183AEF7B793}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|ARM64 = Debug|ARM64
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release_DLL|ARM64 = Release_DLL|ARM64
|
||||
Release_DLL|x64 = Release_DLL|x64
|
||||
Release_DLL|x86 = Release_DLL|x86
|
||||
Release|ARM64 = Release|ARM64
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Debug|x64.Build.0 = Debug|x64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Debug|x86.Build.0 = Debug|Win32
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release_DLL|ARM64.ActiveCfg = Release_DLL|ARM64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release_DLL|ARM64.Build.0 = Release_DLL|ARM64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release_DLL|x64.ActiveCfg = Release_DLL|x64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release_DLL|x64.Build.0 = Release_DLL|x64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release_DLL|x86.ActiveCfg = Release_DLL|Win32
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release_DLL|x86.Build.0 = Release_DLL|Win32
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release|x64.ActiveCfg = Release|x64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release|x64.Build.0 = Release|x64
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release|x86.ActiveCfg = Release|Win32
|
||||
{867A1634-C6AC-4089-B645-A1BE289D597B}.Release|x86.Build.0 = Release|Win32
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Debug|x64.Build.0 = Debug|x64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Debug|x86.Build.0 = Debug|Win32
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release_DLL|ARM64.ActiveCfg = Release_DLL|ARM64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release_DLL|ARM64.Build.0 = Release_DLL|ARM64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release_DLL|x64.ActiveCfg = Release_DLL|x64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release_DLL|x64.Build.0 = Release_DLL|x64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release_DLL|x86.ActiveCfg = Release_DLL|Win32
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release_DLL|x86.Build.0 = Release_DLL|Win32
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release|x64.ActiveCfg = Release|x64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release|x64.Build.0 = Release|x64
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release|x86.ActiveCfg = Release|Win32
|
||||
{8FA5C597-887D-46BC-A6C9-2183AEF7B793}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {A92699B5-187B-4A92-95AF-F0392B047DDD}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
4
tool/nuhash.user
Normal file
4
tool/nuhash.user
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup />
|
||||
</Project>
|
473
tool/nuhash.vcxproj
Normal file
473
tool/nuhash.vcxproj
Normal file
@ -0,0 +1,473 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|ARM64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_DLL|ARM64">
|
||||
<Configuration>Release_DLL</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_DLL|Win32">
|
||||
<Configuration>Release_DLL</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release_DLL|x64">
|
||||
<Configuration>Release_DLL</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{867a1634-c6ac-4089-b645-a1be289d597b}</ProjectGuid>
|
||||
<RootNamespace>NuHash</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.20348.0</WindowsTargetPlatformVersion>
|
||||
<ProjectName>NuHash</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>nuhash</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
<AdditionalDependencies>wsetargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<MinimumRequiredVersion>5.1</MinimumRequiredVersion>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
<AdditionalDependencies>wsetargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<MinimumRequiredVersion>5.1</MinimumRequiredVersion>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
<AdditionalDependencies>wsetargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<MinimumRequiredVersion>5.2</MinimumRequiredVersion>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
<AdditionalDependencies>wsetargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<MinimumRequiredVersion>5.2</MinimumRequiredVersion>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
<AdditionalDependencies>wsetargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<CreateHotpatchableImage>false</CreateHotpatchableImage>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
||||
<AdditionalDependencies>wsetargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\main.c" />
|
||||
<ClCompile Include="src\platform.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\libnuhash\libnuhash.vcxproj">
|
||||
<Project>{8fa5c597-887d-46bc-a6c9-2183aef7b793}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="res\version.rc">
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_M_X64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_M_X64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">_M_X64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">_M_ARM64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">_M_ARM64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'">_M_ARM64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_M_IX86;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_M_IX86;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">_M_IX86;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Manifest Include="res\compatibility.manifest" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\platform.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
40
tool/nuhash.vcxproj.filters
Normal file
40
tool/nuhash.vcxproj.filters
Normal file
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Quelldateien">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Headerdateien">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Ressourcendateien">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\main.c">
|
||||
<Filter>Quelldateien</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\platform.c">
|
||||
<Filter>Quelldateien</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="res\version.rc">
|
||||
<Filter>Ressourcendateien</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Manifest Include="res\compatibility.manifest">
|
||||
<Filter>Ressourcendateien</Filter>
|
||||
</Manifest>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\platform.h">
|
||||
<Filter>Headerdateien</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
17
tool/res/compatibility.manifest
Normal file
17
tool/res/compatibility.manifest
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- Windows Vista -->
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
|
||||
<!-- Windows 7 -->
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
|
||||
<!-- Windows 8 -->
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||
<!-- Windows 8.1 -->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||
<!-- Windows 10 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||
</application>
|
||||
</compatibility>
|
||||
</assembly>
|
BIN
tool/res/hash.ico
Normal file
BIN
tool/res/hash.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.3 KiB |
79
tool/res/version.rc
Normal file
79
tool/res/version.rc
Normal file
@ -0,0 +1,79 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
#include "WinResrc.h"
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
#include "../../libnuhash/src/version.h"
|
||||
|
||||
#define MY_VERSION_NUMBER NUHASH_VERSION_MAJOR, NUHASH_VERSION_MINOR, NUHASH_VERSION_PATCH, 0
|
||||
#define ___MY_VERSION_STRING(X) #X
|
||||
#define __MY_VERSION_STRING(X,Y,Z) ___MY_VERSION_STRING(X.Y.Z)
|
||||
#define _MY_VERSION_STRING(X,Y,Z) __MY_VERSION_STRING(X,Y,Z)
|
||||
#define MY_VERSION_STRING _MY_VERSION_STRING(NUHASH_VERSION_MAJOR, NUHASH_VERSION_MINOR, NUHASH_VERSION_PATCH)
|
||||
|
||||
#if defined(_M_X64) || defined(__x86_64__)
|
||||
# define ARCH_NAME "x64"
|
||||
#elif defined(_M_ARM64) || defined(__aarch64__)
|
||||
# define ARCH_NAME "ARM64"
|
||||
#elif defined(_M_IX86) || defined(__i386__)
|
||||
# define ARCH_NAME "x86"
|
||||
#else
|
||||
# error Unsupported CPU architecture!
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Neutral resources
|
||||
//
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
101 ICON "hash.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION MY_VERSION_NUMBER
|
||||
PRODUCTVERSION MY_VERSION_NUMBER
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x3L
|
||||
#else
|
||||
FILEFLAGS 0x2L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "000004b0"
|
||||
BEGIN
|
||||
VALUE "ProductName", "NuHash"
|
||||
VALUE "FileDescription", "NuHash (" ARCH_NAME ")"
|
||||
VALUE "ProductVersion", MY_VERSION_STRING
|
||||
VALUE "FileVersion", MY_VERSION_STRING
|
||||
VALUE "InternalName", "nuhash"
|
||||
VALUE "OriginalFilename", "nuhash.exe"
|
||||
VALUE "LegalCopyright", "Created by LoRd_MuldeR <MuldeR2@GMX.de>"
|
||||
VALUE "CompanyName", "Muldersoft"
|
||||
VALUE "LegalTrademarks", "Muldersoft"
|
||||
VALUE "Comments", "This work has been released under the CC0 1.0 Universal license!"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x0, 1200
|
||||
END
|
||||
END
|
502
tool/src/main.c
Normal file
502
tool/src/main.c
Normal file
@ -0,0 +1,502 @@
|
||||
/******************************************************************************/
|
||||
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
/* libnuhash*/
|
||||
#include <nuhash.h>
|
||||
|
||||
/* Platfrom */
|
||||
#include "platform.h"
|
||||
|
||||
/* wildcard support */
|
||||
#ifdef __MINGW32__
|
||||
const int _dowildcard = 1;
|
||||
#endif
|
||||
|
||||
/* array length */
|
||||
#define COUNT_OF(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0]))
|
||||
|
||||
/* I/O buffer */
|
||||
#define BUFFSIZE 4096U
|
||||
|
||||
/* update interval */
|
||||
#define UPDATE_INTERVAL 997U
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Print digest */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
#define PRINTF_DIGEST(FORMAT, ...) do \
|
||||
{ \
|
||||
if (!binary_mode) \
|
||||
{ \
|
||||
FPRINTF(stdout, FMT_HCHAR TEXT(" ") FORMAT TEXT("\n"), nuhash_tohex(digest, upper_case, hexstr), __VA_ARGS__); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
fwrite(digest, sizeof(uint8_t), NUHASH_BYTES, stdout); \
|
||||
} \
|
||||
fflush(stdout); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Print progress */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
#define SUFFIX(FLAG, STR1, STR2) ((FLAG) ? (STR1 STR2) : (STR1))
|
||||
#define PREFIX(FLAG, STR1, STR2) ((FLAG) ? (STR1 STR2) : (STR2))
|
||||
|
||||
static void print_progress(const uint64_t total, const uint64_t current, const int finished)
|
||||
{
|
||||
if (total > 0U)
|
||||
{
|
||||
FPRINTF(stderr, SUFFIX(finished, TEXT("\r%") TEXT(PRIu64) TEXT("/%") TEXT(PRIu64) TEXT(" bytes hashed... [%.1f%%]"), TEXT("\n")), current, total, 100.0 * (current / (double)total));
|
||||
}
|
||||
else
|
||||
{
|
||||
FPRINTF(stderr, SUFFIX(finished, TEXT("\r%") TEXT(PRIu64) TEXT(" bytes hashed..."), TEXT(" done\n")), current);
|
||||
}
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Self-test */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
size_t iterations;
|
||||
const char* message;
|
||||
}
|
||||
testcase_t;
|
||||
|
||||
static const testcase_t TEST_VECTOR[] =
|
||||
{
|
||||
{ 0x0000001, "" },
|
||||
{ 0x0000001, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
|
||||
{ 0x0000001, "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" },
|
||||
{ 0x00F4240, "a" },
|
||||
{ 0x1000000, "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno" },
|
||||
{ 0x1000000, "g4tB,=[TU%/|8lv_c5Y?F9Sqs1PnV#bNO6DW\\0em~p<ifJhM(2&Qo}`!-*:jrZ{KGX]$zkuLd+)xwC^.\"@AIHR;y'a>3E7" },
|
||||
{ 0x1000000, "\xA4\x2C\x55\xA5\xB0\x5E\xD8\x33\xF3\x18\xFB\xA7\x20\xC7\x34\xD7\x1D\x2D\x46\x8D\xCA\x8A\xE7\xFC\x68\x5B\x54\xDA\xF9\xC3\x76\x62\xA9\x3D\x39\xBF\x17\xB7\xB2\x8C\x10\xA2\x1F\xE3\x74\x6A\x4A\x6C\x7A\x92\xD1\x52\xEA\x88\xBA\x6B\xD6\x64\x96\x9E\xE6\x4C\x47\x42\xC5\x51\xF2\x50\xF4\x7B\x4F\xE9\x87\x6D\x94\x4B\x23\xF0\x45\x1A\x9A\xE4\x91\x0F\x3B\xB4\x71\x82\x99\xC9\x49\xE5\xBE\x28\x93\x98\x2A\xD9\x73\x65\x58\xC0\x83\x48\x8F\x03\x14\x40\x1B\x24\x1E\xA6\x3F\xF7\x67\xAB\x37\x06\xAC\xF6\x66\xB6\xDD\x1C\x0A\x35\x9F\x56\x15\xEC\xF1\x2B\x7C\x57\x5D\x02\xED\xA8\x63\x16\x75\xDC\x9B\x5C\x7D\x0D\x5F\xFD\x05\xA0\x6E\x90\x95\x85\xD2\x13\x61\x08\xA3\x01\xC8\xD3\x84\xAA\x09\xF5\x70\x6F\xDE\xB9\x04\xB5\xDB\x30\xBC\x07\x8E\xFE\x89\x60\x26\x4E\x59\xCB\x36\x86\x11\x72\xE2\xC6\xAF\x3A\x8B\x7F\xFA\x41\x38\xDF\xEE\x2F\x32\xA1\x27\x69\x31\x29\x43\xC4\x9C\x77\x21\x44\xB8\x79\xD0\xAD\x97\xE0\xE1\x0E\x19\x2E\x22\xBD\x80\xE8\xB1\xF8\x4D\x3E\xC2\x7E\x0C\xB3\x81\x12\xCC\xC1\x53\xCF\x78\xCE\x3C\xD5\x5A\xBB\x9D\xEB\xEF\xCD\xFF\x0B\x25\xAE\xD4" },
|
||||
{ 0x1000000, "\xB5\xC8\x9B\xD1\xBA\x66\x29\x19\xD2\x30\xED\x26\x5B\xC4\x91\x4D\x14\xF7\x16\x35\x5A\x69\xFE\x99\xA5\x49\xF1\x94\x2B\xBC\xDC\x4C\xDD\x4F\xCA\x1B\x88\x9C\xA9\xF6\x73\x2F\xFD\x3F\x40\x39\x13\xDA\xB3\x71\xF4\xDE\x7F\x02\x3D\x64\x78\x7A\x17\x0A\x93\xDF\xEB\x9F\x07\x04\x79\x8C\x98\xB8\x28\x80\xAD\x1F\xF2\x96\x6B\xBD\x45\xD9\xFA\x2C\x56\xCE\xF0\x87\x23\x22\xEA\xC5\x27\xD3\x63\xAF\x24\xC7\xB7\x06\xE4\x75\x83\x7B\xBF\x2E\xA4\xEF\xF5\x12\x5D\x60\x95\xA7\x53\x11\x74\xB4\xA0\x9E\xE3\xAE\xBB\x55\x72\x59\xA6\x9D\xD5\x89\x6D\x8F\x4A\x0C\x1D\xCD\x2A\xFB\xEE\xD7\xC3\xF3\x25\x62\x8E\xB0\xB2\xC2\x38\x3C\x6A\x6F\x4E\x3B\x08\xD4\x86\x36\x18\x5C\xE0\x1E\x81\x77\xF8\x68\xDB\x58\x54\xFF\x97\x7E\x61\xC0\x51\xC9\x6C\xE5\x82\xBE\xCF\x32\x43\x01\x3A\x5E\x50\x47\xA1\x34\xCC\x0D\x70\xAC\xC6\x44\x9A\x3E\x10\x0E\xEC\x03\xE2\x6E\xAA\xFC\x7D\x37\x31\x4B\xE6\xB6\xC1\x15\x8B\x05\x85\x8A\x67\xF9\xAB\x8D\xE1\xA2\x48\x1C\xCB\x52\x65\x76\x0F\x1A\x21\xA8\xA3\x42\x41\x90\x92\xD0\x84\x09\x2D\x33\x5F\xD8\x7C\xB1\xB9\x57\xE8\xD6\x0B\x20\xE7\x46\xE9" }
|
||||
};
|
||||
|
||||
static const char *const EXPECTED[] =
|
||||
{
|
||||
"d7964fe1bec2b5ecf21ecc88c86ce4f1e89fb1ef3669d52e34eb049d7fd6c42d4b2bbeeeb70d12c3fcaf43dd2229abc9",
|
||||
"b3f13f534034ae8d645d410e8828673761fe2d697218879f9ea528d976ba2e15a3f7485105e612b9a46cb3988635a70f",
|
||||
"63703476f4ffce4a8c758d0d3b91a857b9a2e3433ee864f931ba328fa7247b1b0ac9c2e0279243b83051aafac6a7e710",
|
||||
"c6808aeb911c8837cee2e6867e589ab28526a8153494cf35a40c4bd6e20312da33cac4a390cd3b51a2eb4226e60b53e1",
|
||||
"bcca6bc8d113dd3fc171d743ac7ad2d3e63163ea7107d3c78517cf5b53ee0b2f4a0fe079e6a74df350c667b7cfe3cf09",
|
||||
"56770e133b9eb4205f11824ad7280f5c31bc04dd333d1844b3589ab8b94ab95dc09b77be9a8128d7f155fa73de617597",
|
||||
"9a8579bb88112b2f3285781a61348d7b04a5632fec12a73a7e0e367a556794a24a32ca7bb14da68eaed83e99c2f8f4c0",
|
||||
"fbf4444b0329f508bfc6cf44920b311a718e5f4c4c1af978e78223ec3579365ff5d15c16bb5a33d69cb36f3d40564757"
|
||||
};
|
||||
|
||||
static int self_test(const int upper_case, const int ignore_int, const int show_progress)
|
||||
{
|
||||
int result;
|
||||
size_t len, index, round, errors = 0U;
|
||||
uint64_t total_size, bytes_done, tm_curr = 0U, tm_next = 0U;
|
||||
uint_fast16_t spinner = 0U;
|
||||
nuhash_t context;
|
||||
uint8_t digest[NUHASH_BYTES];
|
||||
char hex[NUHASH_CHARS];
|
||||
|
||||
for (index = 0U; index < COUNT_OF(TEST_VECTOR); ++index)
|
||||
{
|
||||
len = strlen(TEST_VECTOR[index].message);
|
||||
total_size = (uint64_t)len * (uint64_t)TEST_VECTOR[index].iterations;
|
||||
bytes_done = 0U;
|
||||
|
||||
if (show_progress && index)
|
||||
{
|
||||
print_progress(total_size, bytes_done, 0);
|
||||
tm_next = get_mtime() + UPDATE_INTERVAL;
|
||||
}
|
||||
|
||||
nuhash_init(&context);
|
||||
|
||||
for (round = 0U; round < TEST_VECTOR[index].iterations; ++round)
|
||||
{
|
||||
nuhash_update(&context, (const uint8_t*)TEST_VECTOR[index].message, len);
|
||||
bytes_done += len;
|
||||
if ((!ignore_int) && g_aborted)
|
||||
{
|
||||
FPUTS(PREFIX(show_progress, TEXT("\n"), TEXT("The process has been interrupted!\n")), stderr);
|
||||
return (-1);
|
||||
}
|
||||
if (show_progress && index && (!(++spinner & 0x1F)) && ((tm_curr = get_mtime()) >= tm_next))
|
||||
{
|
||||
print_progress(total_size, bytes_done, 0);
|
||||
tm_next = tm_curr + UPDATE_INTERVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (show_progress && index)
|
||||
{
|
||||
print_progress(total_size, bytes_done, 1);
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
if (!(result = !strcasecmp(nuhash_tohex(nuhash_final(&context, digest), upper_case, hex), EXPECTED[index])))
|
||||
{
|
||||
errors += 1U;
|
||||
}
|
||||
|
||||
FPRINTF(stdout, FMT_HCHAR TEXT(" Test#%u - ") FMT_TCHAR TEXT("\n"), hex, (unsigned)(index + 1U), result ? TEXT("OK") : TEXT("Failed!"));
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
FPUTS(errors ? TEXT("Error: At least one test failed !!!\n") : TEXT("All tests completed successfully.\n"), stderr);
|
||||
return (!errors);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Stress-test */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
#define RUN_STRESS_TEST(TYPE, FORMAT) do \
|
||||
{ \
|
||||
TYPE value = 0; do \
|
||||
{ \
|
||||
nuhash_compute((uint8_t*)&value, sizeof(TYPE), digest); \
|
||||
PRINTF_DIGEST(FORMAT, value); \
|
||||
if ((!ignore_int) && g_aborted) { return (-1); } \
|
||||
} \
|
||||
while (++value); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
static int stress_test(const int upper_case, const int binary_mode, const int ignore_int)
|
||||
{
|
||||
uint8_t digest[NUHASH_BYTES];
|
||||
char hexstr[NUHASH_CHARS];
|
||||
|
||||
RUN_STRESS_TEST(uint8_t , TEXT("%02" ) TEXT(PRIX8 ));
|
||||
RUN_STRESS_TEST(uint16_t, TEXT("%04" ) TEXT(PRIX16));
|
||||
RUN_STRESS_TEST(uint32_t, TEXT("%08" ) TEXT(PRIX32));
|
||||
RUN_STRESS_TEST(uint64_t, TEXT("%016") TEXT(PRIX64));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Process File */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
#define CHECK_INTERRUPTED(SHOW_PROGRESS) do \
|
||||
{ \
|
||||
if ((!ignore_int) && g_aborted) \
|
||||
{ \
|
||||
FPUTS(PREFIX((SHOW_PROGRESS), TEXT("\n"), TEXT("The process has been interrupted!\n")), stderr); \
|
||||
result = (-1); \
|
||||
goto clean_up; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
static int process_file(FILE *const file, const CHAR_T *const name, const int line_mode, const int binary_mode, const int upper_case, const int ignore_int, const int show_progress)
|
||||
{
|
||||
int result = 0;
|
||||
uint64_t input_size = 0U, bytes_done = 0U, tm_curr = 0U, tm_next = 0U;
|
||||
uint_fast16_t spinner = 0U;
|
||||
nuhash_t context;
|
||||
struct STAT_STRUCT file_stat;
|
||||
uint8_t buffer[BUFFSIZE], digest[NUHASH_BYTES];
|
||||
char hexstr[NUHASH_CHARS];
|
||||
|
||||
if(!FSTAT(file, &file_stat))
|
||||
{
|
||||
if (FILE_IS_DIR(file_stat.st_mode))
|
||||
{
|
||||
FPRINTF(stderr, TEXT("Error: Input file \"") FMT_TCHAR TEXT("\" is a directory!\n"), name);
|
||||
goto clean_up;
|
||||
}
|
||||
if (FILE_IS_REG(file_stat.st_mode) && (file_stat.st_size > 0))
|
||||
{
|
||||
input_size = (uint64_t)file_stat.st_size;
|
||||
}
|
||||
}
|
||||
|
||||
if (!line_mode)
|
||||
{
|
||||
if (show_progress)
|
||||
{
|
||||
print_progress(input_size, bytes_done, 0);
|
||||
tm_next = get_mtime() + UPDATE_INTERVAL;
|
||||
}
|
||||
|
||||
nuhash_init(&context);
|
||||
|
||||
while ((!feof(file)) && (!ferror(file)))
|
||||
{
|
||||
const size_t len = fread(buffer, sizeof(uint8_t), BUFFSIZE, file);
|
||||
if (len > 0U)
|
||||
{
|
||||
nuhash_update(&context, buffer, len);
|
||||
bytes_done += len;
|
||||
if (show_progress && (!(++spinner & 0x1F)) && ((tm_curr = get_mtime()) >= tm_next))
|
||||
{
|
||||
print_progress(input_size, bytes_done, 0);
|
||||
tm_next = tm_curr + UPDATE_INTERVAL;
|
||||
}
|
||||
}
|
||||
CHECK_INTERRUPTED(show_progress);
|
||||
}
|
||||
|
||||
if (!ferror(file))
|
||||
{
|
||||
if (show_progress)
|
||||
{
|
||||
print_progress(input_size, bytes_done, 1);
|
||||
}
|
||||
nuhash_final(&context, digest);
|
||||
PRINTF_DIGEST(FMT_TCHAR, name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (fgets((char*)buffer, BUFFSIZE, file))
|
||||
{
|
||||
size_t len = strlen((char*)buffer);
|
||||
while ((len > 0U) && ((((char*)buffer)[len - 1U] == '\n') || (((char*)buffer)[len - 1U] == '\r')))
|
||||
{
|
||||
buffer[--len] = 0x00;
|
||||
}
|
||||
if (len > 0U)
|
||||
{
|
||||
nuhash_compute(buffer, len, digest);
|
||||
PRINTF_DIGEST(FMT_HCHAR, buffer);
|
||||
}
|
||||
CHECK_INTERRUPTED(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (ferror(file))
|
||||
{
|
||||
FPUTS(PREFIX(show_progress && (!line_mode), TEXT("\n"), TEXT("Error: Read operation has failed!\n")), stderr); \
|
||||
goto clean_up;
|
||||
}
|
||||
|
||||
result = 1;
|
||||
|
||||
clean_up:
|
||||
|
||||
if ((file != stdin) && (file != stdout) && (file != stderr))
|
||||
{
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Options */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
#define OPTION_BINARY 0x001
|
||||
#define OPTION_HELP 0x002
|
||||
#define OPTION_IGNORE 0x004
|
||||
#define OPTION_LINE_MODE 0x008
|
||||
#define OPTION_PROGRESS 0x010
|
||||
#define OPTION_SELF_TEST 0x020
|
||||
#define OPTION_STOP 0x040
|
||||
#define OPTION_STRESS 0x080
|
||||
#define OPTION_UPPERCASE 0x100
|
||||
#define OPTION_VERSION 0x200
|
||||
|
||||
static const struct
|
||||
{
|
||||
int option;
|
||||
const CHAR_T short_name, *long_name;
|
||||
}
|
||||
OPTIONS[] =
|
||||
{
|
||||
{ OPTION_BINARY, TEXT('b'), TEXT("binary") },
|
||||
{ OPTION_HELP, TEXT('h'), TEXT("help") },
|
||||
{ OPTION_IGNORE, TEXT('i'), TEXT("ignore") },
|
||||
{ OPTION_LINE_MODE, TEXT('l'), TEXT("line-mode") },
|
||||
{ OPTION_PROGRESS, TEXT('p'), TEXT("progress") },
|
||||
{ OPTION_SELF_TEST, TEXT('t'), TEXT("self-test") },
|
||||
{ OPTION_STOP, TEXT('s'), TEXT("stop") },
|
||||
{ OPTION_STRESS, (CHAR_T)0, TEXT("stress") },
|
||||
{ OPTION_UPPERCASE, TEXT('u'), TEXT("uppercase") },
|
||||
{ OPTION_VERSION, TEXT('v'), TEXT("version") }
|
||||
};
|
||||
|
||||
static int parse_option_short(int *const options, const CHAR_T *arg_str)
|
||||
{
|
||||
while (*arg_str)
|
||||
{
|
||||
const CHAR_T c = TOLOWER(*(arg_str++));
|
||||
size_t pos;
|
||||
for (pos = 0U; pos < COUNT_OF(OPTIONS); ++pos)
|
||||
{
|
||||
if (c == OPTIONS[pos].short_name)
|
||||
{
|
||||
*options |= OPTIONS[pos].option;
|
||||
goto success;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
success:;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int parse_option_long(int* const options, const CHAR_T *const arg_str)
|
||||
{
|
||||
size_t pos;
|
||||
for (pos = 0U; pos < COUNT_OF(OPTIONS); ++pos)
|
||||
{
|
||||
if (!STRCASECMP(arg_str, OPTIONS[pos].long_name))
|
||||
{
|
||||
*options |= OPTIONS[pos].option;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Help screen */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static void print_helpscreen(FILE *const stream, const int full_info)
|
||||
{
|
||||
uint16_t version[3U];
|
||||
char build[12];
|
||||
nuhash_version(version, build);
|
||||
|
||||
FPRINTF(stream, TEXT("nuhash ") OS_NAME TEXT("-") CPU_ARCH TEXT(" v%u.%u.%u [") FMT_HCHAR TEXT("]\n"), version[0U], version[1U], version[2U], build);
|
||||
FPRINTF(stream, TEXT("built on ") FMT_HCHAR TEXT(" at ") FMT_HCHAR TEXT(" with ") COMPILER_FMT TEXT("\n\n"), __DATE__, __TIME__, COMPILER_ARG);
|
||||
|
||||
if (full_info)
|
||||
{
|
||||
FPUTS(TEXT("Usage:\n"), stream);
|
||||
FPUTS(TEXT(" nuhash") EXE_SUFFIX TEXT(" [options] [<file_1> [... <file_n>]]\n\n"), stream);
|
||||
FPUTS(TEXT("Options:\n"), stream);
|
||||
FPUTS(TEXT(" -b --binary Output digest as binary, default is hex-string.\n"), stream);
|
||||
FPUTS(TEXT(" -h --help Print the help screen and exit.\n"), stream);
|
||||
FPUTS(TEXT(" -i --ignore Ignore interrupt signals.\n"), stream);
|
||||
FPUTS(TEXT(" -l --line-mode Process the input file(s) as text, line by line.\n"), stream);
|
||||
FPUTS(TEXT(" -p --progress Print progress, while computing the hash.\n"), stream);
|
||||
FPUTS(TEXT(" -s --stop Stop on all errors, default is to keep going.\n"), stream);
|
||||
FPUTS(TEXT(" -t --self-test Run the built-in self-test.\n"), stream);
|
||||
FPUTS(TEXT(" -u --uppercase Print digest as uppercase, default is lowercase.\n"), stream);
|
||||
FPUTS(TEXT(" -v --version Print version information and exit.\n\n"), stream);
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* MAIN */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
int MAIN(const int argc, const CHAR_T *const argv[])
|
||||
{
|
||||
int exit_code = EXIT_SUCCESS, index = 1, options = 0, nostd = 0, result = 0;
|
||||
|
||||
initialize_process();
|
||||
SETMODE(stderr, FMODE_TXT);
|
||||
|
||||
if ((argc > 1) && (!STRCASECMP(argv[1], TEXT("/?"))))
|
||||
{
|
||||
options |= OPTION_HELP;
|
||||
index = argc;
|
||||
}
|
||||
|
||||
while ((index < argc) && (argv[index][0U] == TEXT('-')) && (argv[index][1U] != TEXT('\0')))
|
||||
{
|
||||
const CHAR_T *const arg_str = argv[index++];
|
||||
if (arg_str[1U] == TEXT('-'))
|
||||
{
|
||||
if (arg_str[2U] == TEXT('\0'))
|
||||
{
|
||||
nostd = 1;
|
||||
break;
|
||||
}
|
||||
else if (parse_option_long(&options, arg_str + 2U))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (parse_option_short(&options, arg_str + 1U))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
FPRINTF(stderr, TEXT("Error: Unknown option \"") FMT_TCHAR TEXT("\" encountered!\n"), arg_str);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (options & (OPTION_HELP | OPTION_VERSION))
|
||||
{
|
||||
print_helpscreen(stderr, options & OPTION_HELP);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
if ((options & OPTION_BINARY) && ISATTY(stdout))
|
||||
{
|
||||
FPUTS(TEXT("Error: Binray output is not supported when writing to terminal!\n"), stderr);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if ((options & (OPTION_SELF_TEST | OPTION_STRESS)) && (index < argc))
|
||||
{
|
||||
FPUTS(TEXT("Warning: Excess command-line argument(s) will be ignored!\n"), stderr);
|
||||
}
|
||||
|
||||
SETMODE(stdin, FMODE_BIN);
|
||||
SETMODE(stdout, (options & OPTION_BINARY) ? FMODE_BIN : FMODE_TXT);
|
||||
|
||||
if (options & OPTION_SELF_TEST)
|
||||
{
|
||||
result = self_test(options & OPTION_UPPERCASE, options & OPTION_IGNORE, options & OPTION_PROGRESS);
|
||||
return (result < 1) ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
if (options & OPTION_STRESS)
|
||||
{
|
||||
result = stress_test(options & OPTION_UPPERCASE, options & OPTION_BINARY, options & OPTION_IGNORE);
|
||||
return (result < 1) ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
if (index < argc)
|
||||
{
|
||||
for (; index < argc; ++index)
|
||||
{
|
||||
FILE *const input = (nostd || STRCASECMP(argv[index], TEXT("-"))) ? FOPEN(argv[index], TEXT("rb")) : stdin;
|
||||
if (input)
|
||||
{
|
||||
result = process_file(input, argv[index], options & OPTION_LINE_MODE, options & OPTION_BINARY, options & OPTION_UPPERCASE, options & OPTION_IGNORE, options & OPTION_PROGRESS);
|
||||
if (result < 1)
|
||||
{
|
||||
exit_code = EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FPRINTF(stderr, TEXT("Error: Failed to open file \"") FMT_TCHAR TEXT("\" for reading!\n"), argv[index]);
|
||||
exit_code = EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if ((result < 0) || ((exit_code != EXIT_SUCCESS) && (options & OPTION_STOP)))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!(options & (OPTION_SELF_TEST | OPTION_STRESS)))
|
||||
{
|
||||
result = process_file(stdin, TEXT("-"), options & OPTION_LINE_MODE, options & OPTION_BINARY, options & OPTION_UPPERCASE, options & OPTION_IGNORE, options & OPTION_PROGRESS);
|
||||
if (result < 1)
|
||||
{
|
||||
exit_code = EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
return exit_code;
|
||||
}
|
74
tool/src/platform.c
Normal file
74
tool/src/platform.c
Normal file
@ -0,0 +1,74 @@
|
||||
/******************************************************************************/
|
||||
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
# define WIN32_LEAN_AND_MEAN 1
|
||||
# include <Windows.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <time.h>
|
||||
# include <signal.h>
|
||||
#endif
|
||||
|
||||
#define UNUSED(X) ((void)(X))
|
||||
#define Q64(X) ((uint64_t)(X).QuadPart)
|
||||
|
||||
volatile int g_aborted = 0;
|
||||
|
||||
#ifdef _WIN32
|
||||
static LARGE_INTEGER s_frequency;
|
||||
#endif
|
||||
|
||||
static void sig_handler(const int signal_no)
|
||||
{
|
||||
UNUSED(signal_no);
|
||||
g_aborted = 1;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
static BOOL WINAPI console_ctrl_handler(const DWORD type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case CTRL_C_EVENT:
|
||||
case CTRL_BREAK_EVENT:
|
||||
case CTRL_CLOSE_EVENT:
|
||||
sig_handler(2);
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void initialize_process(void)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||
QueryPerformanceFrequency(&s_frequency);
|
||||
SetConsoleCtrlHandler(console_ctrl_handler, TRUE);
|
||||
#else
|
||||
struct sigaction action;
|
||||
action.sa_handler = sig_handler;
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_flags = 0;
|
||||
sigaction(SIGINT, &action, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
uint64_t get_mtime(void)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
LARGE_INTEGER counter;
|
||||
QueryPerformanceCounter(&counter);
|
||||
return ((Q64(counter) / Q64(s_frequency)) * UINT64_C(1000)) + (((Q64(counter) % Q64(s_frequency)) * UINT64_C(1000)) / Q64(s_frequency));
|
||||
#else
|
||||
struct timespec time_stamp;
|
||||
clock_gettime(CLOCK_MONOTONIC, &time_stamp);
|
||||
return ((uint64_t)time_stamp.tv_sec * UINT64_C(1000)) + ((uint64_t)time_stamp.tv_nsec / UINT64_C(1000000));
|
||||
#endif
|
||||
}
|
211
tool/src/platform.h
Normal file
211
tool/src/platform.h
Normal file
@ -0,0 +1,211 @@
|
||||
/******************************************************************************/
|
||||
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef _INC_NUHASH_PLATFORM_H
|
||||
#define _INC_NUHASH_PLATFORM_H
|
||||
|
||||
/* CRT */
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* platform-specific */
|
||||
#ifdef _WIN32
|
||||
# include <fcntl.h>
|
||||
# include <io.h>
|
||||
# include <share.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
/* initialization */
|
||||
void initialize_process(void);
|
||||
|
||||
/* monotonic clock */
|
||||
uint64_t get_mtime(void);
|
||||
|
||||
/* abort flag */
|
||||
extern volatile int g_aborted;
|
||||
|
||||
/* integer types */
|
||||
#if !defined(_MSC_VER) || (_MSC_VER >= 1800)
|
||||
# include <inttypes.h>
|
||||
#else
|
||||
# define PRIX8 "hhX"
|
||||
# define PRIX16 "hX"
|
||||
# define PRIX32 "X"
|
||||
# define PRIX64 "llX"
|
||||
#endif
|
||||
|
||||
/* Unicode support*/
|
||||
#ifdef _WIN32
|
||||
# define CHAR_T wchar_t
|
||||
# define __TEXT(X) L##X
|
||||
# define TEXT(X) __TEXT(X)
|
||||
# define MAIN wmain
|
||||
# define FPRINTF fwprintf
|
||||
# define FPUTS fputws
|
||||
# define FOPEN(X,Y) _wfsopen((X),(Y),_SH_SECURE)
|
||||
# define STRCASECMP _wcsicmp
|
||||
# define strcasecmp _stricmp
|
||||
# define TOLOWER(X) towlower((unsigned short)(X))
|
||||
# ifndef __USE_MINGW_ANSI_STDIO
|
||||
# define FMT_TCHAR L"%s"
|
||||
# define FMT_HCHAR L"%S"
|
||||
# else
|
||||
# define FMT_TCHAR L"%ls"
|
||||
# define FMT_HCHAR L"%hs"
|
||||
# endif
|
||||
#else
|
||||
# define CHAR_T char
|
||||
# define TEXT(X) X
|
||||
# define MAIN main
|
||||
# define FPRINTF fprintf
|
||||
# define FPUTS fputs
|
||||
# define FOPEN fopen
|
||||
# define STRCASECMP strcasecmp
|
||||
# define TOLOWER(X) tolower((unsigned char)(X))
|
||||
# define FMT_TCHAR "%s"
|
||||
# define FMT_HCHAR "%s"
|
||||
#endif
|
||||
|
||||
/* CPU arch */
|
||||
#if defined(__x86_64__) || defined(__amd64__) || defined(_M_X64)
|
||||
# define CPU_ARCH TEXT("x64")
|
||||
#elif defined(__i386__) || defined(_X86_) || defined(_M_IX86) || defined(__IA32__)
|
||||
# define CPU_ARCH TEXT("x86")
|
||||
#elif defined(__aarch64__) || defined(_M_ARM64)
|
||||
# define CPU_ARCH TEXT("arm64")
|
||||
#elif defined(__arm__) && defined(__ARM_FP)
|
||||
# define CPU_ARCH TEXT("armhf")
|
||||
#elif defined(__arm__) && defined(__ARMEL__)
|
||||
# define CPU_ARCH TEXT("armel")
|
||||
#elif defined(__arm__) || defined(_M_ARM)
|
||||
# define CPU_ARCH TEXT("arm")
|
||||
#elif defined(__mips__) && defined(_MIPS_ARCH_MIPS64R6) && defined(_MIPSEL)
|
||||
# define CPU_ARCH TEXT("mips64r6el")
|
||||
#elif defined(__mips__) && defined(_MIPS_ARCH_MIPS64R6)
|
||||
# define CPU_ARCH TEXT("mips64r6")
|
||||
#elif defined(__mips__) && defined(_MIPS_ARCH_MIPS32R6) && defined(_MIPSEL)
|
||||
# define CPU_ARCH TEXT("mipsr6el")
|
||||
#elif defined(__mips__) && defined(_MIPS_ARCH_MIPS32R6)
|
||||
# define CPU_ARCH TEXT("mipsr6")
|
||||
#elif defined(__mips__) && (defined(__mips64) || (__mips == 64)) && defined(_MIPSEL)
|
||||
# define CPU_ARCH TEXT("mips64el")
|
||||
#elif defined(__mips__) && (defined(__mips64) || (__mips == 64))
|
||||
# define CPU_ARCH TEXT("mips64")
|
||||
#elif (defined(__mips__) || defined(_mips) || defined(__mips)) && defined(_MIPSEL)
|
||||
# define CPU_ARCH TEXT("mipsel")
|
||||
#elif defined(__mips__) || defined(_mips) || defined(__mips)
|
||||
# define CPU_ARCH TEXT("mips")
|
||||
#elif defined(__powerpc64__) || defined(__PPC64__) || defined(_ARCH_PPC64)
|
||||
# define CPU_ARCH TEXT("ppc64")
|
||||
#elif defined(__powerpc__) || defined(__PPC__) || defined(_ARCH_PPC)
|
||||
# define CPU_ARCH TEXT("ppc")
|
||||
#elif defined(__s390x__) || defined(__zarch__)
|
||||
# define CPU_ARCH TEXT("s390x")
|
||||
#elif defined(__riscv) && (__riscv_xlen == 64)
|
||||
# define CPU_ARCH TEXT("riscv64")
|
||||
#else
|
||||
# error Unsupported CPU architecture encountered!
|
||||
#endif
|
||||
|
||||
/* OS family */
|
||||
#if defined(__linux__)
|
||||
# define OS_NAME TEXT("linux")
|
||||
#elif defined(__gnu_hurd__)
|
||||
# define OS_NAME TEXT("hurd")
|
||||
#elif defined(__FreeBSD__)
|
||||
# define OS_NAME TEXT("freebsd")
|
||||
#elif defined(__OpenBSD__)
|
||||
# define OS_NAME TEXT("openbsd")
|
||||
#elif defined(__NetBSD__)
|
||||
# define OS_NAME TEXT("netbsd")
|
||||
#elif defined(__DragonFly__)
|
||||
# define OS_NAME TEXT("dragonfly")
|
||||
#elif defined(__illumos__)
|
||||
# define OS_NAME TEXT("illumos")
|
||||
#elif defined(__sun) && defined(__svr4__)
|
||||
# define OS_NAME TEXT("solaris")
|
||||
#elif defined(__QNX__)
|
||||
# define OS_NAME TEXT("qnx")
|
||||
#elif defined(__APPLE__) && defined(__MACH__)
|
||||
# define OS_NAME TEXT("darwin")
|
||||
#elif defined(__HAIKU__)
|
||||
# define OS_NAME TEXT("haiku")
|
||||
#elif defined(__CYGWIN__)
|
||||
# define OS_NAME TEXT("cygwin")
|
||||
#elif defined(_WIN32)
|
||||
# define OS_NAME TEXT("windows")
|
||||
#elif defined(__unix__)
|
||||
# define OS_NAME TEXT("unix")
|
||||
#else
|
||||
# error Unsupported operating system encountered!
|
||||
#endif
|
||||
|
||||
/* Compiler */
|
||||
#if defined(__INTEL_LLVM_COMPILER)
|
||||
# define COMPILER_FMT TEXT("Intel C++ Compiler v%u.%u.%u")
|
||||
# define COMPILER_ARG __INTEL_LLVM_COMPILER / 10000U, (__INTEL_LLVM_COMPILER % 10000U) / 100U, __INTEL_LLVM_COMPILER % 100U
|
||||
#elif defined(__clang__)
|
||||
# define COMPILER_FMT TEXT("Clang v%u.%u.%u")
|
||||
# define COMPILER_ARG __clang_major__, __clang_minor__, __clang_patchlevel__
|
||||
#elif defined(__GNUC__)
|
||||
# define COMPILER_FMT TEXT("GCC v%u.%u.%u")
|
||||
# define COMPILER_ARG __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
|
||||
#elif defined(_MSC_VER)
|
||||
# define COMPILER_FMT TEXT("MSVC v%u.%02u.%u")
|
||||
# define COMPILER_ARG _MSC_VER / 100U, _MSC_VER % 100U, _MSC_FULL_VER % 100000U
|
||||
#else
|
||||
# error Unsupported compiler encountered!
|
||||
#endif
|
||||
|
||||
/* fstat() support */
|
||||
#ifdef _WIN32
|
||||
# define FSTAT(X,Y) _fstat64(_fileno(X),(Y))
|
||||
# define STAT_STRUCT _stat64
|
||||
# define FILE_IS_DIR(X) (((X) & _S_IFMT) == _S_IFDIR)
|
||||
# define FILE_IS_REG(X) (((X) & _S_IFMT) == _S_IFREG)
|
||||
#else
|
||||
# define FSTAT(X,Y) fstat(fileno(X),(Y))
|
||||
# define STAT_STRUCT stat
|
||||
# define FILE_IS_DIR(X) S_ISDIR((X))
|
||||
# define FILE_IS_REG(X) S_ISREG((X))
|
||||
#endif
|
||||
|
||||
/* assert file size */
|
||||
#define STATIC_ASSERT(X,Y) typedef char _static_assertion_##X[(Y) ? 1 : (-1)]
|
||||
STATIC_ASSERT(file_size, sizeof(((struct STAT_STRUCT*)NULL)->st_size) >= 8U);
|
||||
|
||||
/* setmode() support */
|
||||
#ifdef _WIN32
|
||||
# define FMODE_BIN _O_BINARY
|
||||
# define FMODE_TXT _O_U8TEXT
|
||||
# define SETMODE(X,Y) _setmode(_fileno((X)), (Y))
|
||||
#else
|
||||
# define FMODE_BIN 0x1
|
||||
# define FMODE_TXT 0x2
|
||||
# define SETMODE(X,Y) ((void)0)
|
||||
#endif
|
||||
|
||||
/* isatty() support */
|
||||
#ifdef _WIN32
|
||||
# define ISATTY(X) _isatty(_fileno((X)))
|
||||
#else
|
||||
# define ISATTY(X) isatty(fileno((X)))
|
||||
#endif
|
||||
|
||||
/* executable name */
|
||||
#ifdef _WIN32
|
||||
# define EXE_SUFFIX TEXT(".exe")
|
||||
#else
|
||||
# define EXE_SUFFIX
|
||||
#endif
|
||||
|
||||
#endif /* _INC_NUHASH_PLATFORM_H */
|
Loading…
Reference in New Issue
Block a user