@leocuvee/wrkzcoin-multi-hashing 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.travis.yml +5 -0
- package/LICENSE +674 -0
- package/README.md +87 -0
- package/appveyor.yml +12 -0
- package/argon2/.gitattributes +10 -0
- package/argon2/.travis.yml +25 -0
- package/argon2/Argon2.sln +160 -0
- package/argon2/CHANGELOG.md +32 -0
- package/argon2/CMakeLists.txt +87 -0
- package/argon2/LICENSE +314 -0
- package/argon2/Makefile +196 -0
- package/argon2/README.md +297 -0
- package/argon2/appveyor.yml +40 -0
- package/argon2/argon2-specs.pdf +0 -0
- package/argon2/export.sh +7 -0
- package/argon2/include/argon2.h +427 -0
- package/argon2/latex/CMakeLists.txt +34 -0
- package/argon2/latex/IEEEtran.cls +6347 -0
- package/argon2/latex/Makefile +18 -0
- package/argon2/latex/argon2-specs.tex +920 -0
- package/argon2/latex/pics/argon2-par.pdf +0 -0
- package/argon2/latex/pics/compression.pdf +0 -0
- package/argon2/latex/pics/generic.pdf +0 -0
- package/argon2/latex/pics/power-distribution.jpg +0 -0
- package/argon2/latex/tradeoff.bib +822 -0
- package/argon2/libargon2.pc +16 -0
- package/argon2/man/CMakeLists.txt +8 -0
- package/argon2/man/argon2.1 +57 -0
- package/argon2/meson.build +16 -0
- package/argon2/meson_options.txt +1 -0
- package/argon2/src/CMakeLists.txt +147 -0
- package/argon2/src/argon2.c +452 -0
- package/argon2/src/argon2.pc.in +11 -0
- package/argon2/src/blake2/blake2-impl.h +156 -0
- package/argon2/src/blake2/blake2.h +89 -0
- package/argon2/src/blake2/blake2b.c +390 -0
- package/argon2/src/blake2/blamka-round-opt.h +471 -0
- package/argon2/src/blake2/blamka-round-ref.h +56 -0
- package/argon2/src/core.c +634 -0
- package/argon2/src/core.h +228 -0
- package/argon2/src/encoding.c +467 -0
- package/argon2/src/encoding.h +57 -0
- package/argon2/src/genkat.h +51 -0
- package/argon2/src/meson.build +68 -0
- package/argon2/src/opt.c +283 -0
- package/argon2/src/optimization/CMakeLists.txt +10 -0
- package/argon2/src/ref.c +194 -0
- package/argon2/src/thread.c +57 -0
- package/argon2/src/thread.h +67 -0
- package/argon2/tests/CMakeLists.txt +43 -0
- package/argon2/tests/bench.c +111 -0
- package/argon2/tests/genkat.c +207 -0
- package/argon2/tests/kats/argon2d +12304 -0
- package/argon2/tests/kats/argon2d.shasum +1 -0
- package/argon2/tests/kats/argon2d_v16 +12304 -0
- package/argon2/tests/kats/argon2d_v16.shasum +1 -0
- package/argon2/tests/kats/argon2i +12304 -0
- package/argon2/tests/kats/argon2i.shasum +1 -0
- package/argon2/tests/kats/argon2i_v16 +12304 -0
- package/argon2/tests/kats/argon2i_v16.shasum +1 -0
- package/argon2/tests/kats/argon2id +12304 -0
- package/argon2/tests/kats/argon2id.shasum +1 -0
- package/argon2/tests/kats/argon2id_v16 +12304 -0
- package/argon2/tests/kats/argon2id_v16.shasum +1 -0
- package/argon2/tests/kats/check-sums.ps1 +48 -0
- package/argon2/tests/kats/check-sums.sh +16 -0
- package/argon2/tests/kats/test.ps1 +132 -0
- package/argon2/tests/kats/test.sh +117 -0
- package/argon2/tests/meson.build +34 -0
- package/argon2/tests/test.c +289 -0
- package/argon2/tool/CMakeLists.txt +7 -0
- package/argon2/tool/main.c +339 -0
- package/argon2/tool/meson.build +8 -0
- package/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj +226 -0
- package/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters +69 -0
- package/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj +226 -0
- package/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters +69 -0
- package/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj +225 -0
- package/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters +66 -0
- package/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj +239 -0
- package/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters +72 -0
- package/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj +227 -0
- package/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters +69 -0
- package/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj +226 -0
- package/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters +69 -0
- package/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj +226 -0
- package/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters +69 -0
- package/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj +225 -0
- package/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters +66 -0
- package/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj +227 -0
- package/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters +72 -0
- package/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj +226 -0
- package/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters +69 -0
- package/bcrypt.c +566 -0
- package/bcrypt.h +14 -0
- package/binding.gyp +93 -0
- package/blake.c +17 -0
- package/blake.h +16 -0
- package/boolberry.cc +11 -0
- package/boolberry.h +6 -0
- package/build/Makefile +354 -0
- package/build/Release/.deps/Release/multihashing.node.d +1 -0
- package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/argon2.o.d +8 -0
- package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/blake2/blake2b.o.d +8 -0
- package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/core.o.d +10 -0
- package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/encoding.o.d +8 -0
- package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/ref.o.d +14 -0
- package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/thread.o.d +5 -0
- package/build/Release/.deps/Release/obj.target/multihashing/bcrypt.o.d +4 -0
- package/build/Release/.deps/Release/obj.target/multihashing/blake.o.d +7 -0
- package/build/Release/.deps/Release/obj.target/multihashing/boolberry.o.d +12 -0
- package/build/Release/.deps/Release/obj.target/multihashing/c11.o.d +20 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/aesb.o.d +3 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_blake256.o.d +5 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_groestl.o.d +10 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_jh.o.d +9 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_keccak.o.d +7 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_skein.o.d +10 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/hash.o.d +7 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/oaes_lib.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/crypto/wild_keccak.o.d +8 -0
- package/build/Release/.deps/Release/obj.target/multihashing/cryptonight.o.d +18 -0
- package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_dark.o.d +18 -0
- package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_dark_lite.o.d +18 -0
- package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_fast.o.d +18 -0
- package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_lite.o.d +18 -0
- package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_soft_shell.o.d +18 -0
- package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_turtle.o.d +18 -0
- package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_turtle_lite.o.d +18 -0
- package/build/Release/.deps/Release/obj.target/multihashing/fresh.o.d +10 -0
- package/build/Release/.deps/Release/obj.target/multihashing/fugue.o.d +7 -0
- package/build/Release/.deps/Release/obj.target/multihashing/groestl.o.d +8 -0
- package/build/Release/.deps/Release/obj.target/multihashing/hefty1.o.d +12 -0
- package/build/Release/.deps/Release/obj.target/multihashing/keccak.o.d +8 -0
- package/build/Release/.deps/Release/obj.target/multihashing/multihashing.o.d +155 -0
- package/build/Release/.deps/Release/obj.target/multihashing/nist5.o.d +12 -0
- package/build/Release/.deps/Release/obj.target/multihashing/quark.o.d +14 -0
- package/build/Release/.deps/Release/obj.target/multihashing/qubit.o.d +12 -0
- package/build/Release/.deps/Release/obj.target/multihashing/scryptjane.o.d +30 -0
- package/build/Release/.deps/Release/obj.target/multihashing/scryptn.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha1.o.d +24 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/aes_helper.o.d +5 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/hamsi.o.d +7 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_blake.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_bmw.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_cubehash.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_echo.o.d +7 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_fugue.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_groestl.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_hefty1.o.d +5 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_jh.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_keccak.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_luffa.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_shabal.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_shavite.o.d +7 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_simd.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_skein.o.d +6 -0
- package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_whirlpool.o.d +8 -0
- package/build/Release/.deps/Release/obj.target/multihashing/shavite3.o.d +7 -0
- package/build/Release/.deps/Release/obj.target/multihashing/skein.o.d +8 -0
- package/build/Release/.deps/Release/obj.target/multihashing/x11.o.d +20 -0
- package/build/Release/.deps/Release/obj.target/multihashing/x13.o.d +23 -0
- package/build/Release/.deps/Release/obj.target/multihashing/x15.o.d +26 -0
- package/build/Release/.deps/Release/obj.target/multihashing.node.d +1 -0
- package/build/Release/multihashing.node +0 -0
- package/build/binding.Makefile +6 -0
- package/build/multihashing.target.mk +255 -0
- package/c11.c +85 -0
- package/c11.h +17 -0
- package/crypto/aesb.c +177 -0
- package/crypto/c_blake256.c +326 -0
- package/crypto/c_blake256.h +43 -0
- package/crypto/c_groestl.c +360 -0
- package/crypto/c_groestl.h +56 -0
- package/crypto/c_jh.c +367 -0
- package/crypto/c_jh.h +20 -0
- package/crypto/c_keccak.c +112 -0
- package/crypto/c_keccak.h +26 -0
- package/crypto/c_skein.c +2036 -0
- package/crypto/c_skein.h +45 -0
- package/crypto/crypto.h +186 -0
- package/crypto/cryptonote_core/account.cpp +50 -0
- package/crypto/cryptonote_core/account.h +61 -0
- package/crypto/cryptonote_core/cryptonote_basic_impl.cpp +186 -0
- package/crypto/cryptonote_core/cryptonote_basic_impl.h +65 -0
- package/crypto/cryptonote_core/cryptonote_format_utils.cpp +766 -0
- package/crypto/cryptonote_core/cryptonote_format_utils.h +30 -0
- package/crypto/cryptonote_protocol/cryptonote_protocol_defs.h +152 -0
- package/crypto/groestl_tables.h +38 -0
- package/crypto/hash-ops.h +57 -0
- package/crypto/hash.c +24 -0
- package/crypto/hash.h +22 -0
- package/crypto/int-util.h +230 -0
- package/crypto/oaes_config.h +50 -0
- package/crypto/oaes_lib.c +1468 -0
- package/crypto/oaes_lib.h +215 -0
- package/crypto/skein_port.h +190 -0
- package/crypto/variant2_int_sqrt.h +168 -0
- package/crypto/wild_keccak.cpp +119 -0
- package/crypto/wild_keccak.h +168 -0
- package/cryptonight.c +300 -0
- package/cryptonight.h +17 -0
- package/cryptonight_dark.c +300 -0
- package/cryptonight_dark.h +17 -0
- package/cryptonight_dark_lite.c +300 -0
- package/cryptonight_dark_lite.h +17 -0
- package/cryptonight_fast.c +300 -0
- package/cryptonight_fast.h +17 -0
- package/cryptonight_lite.c +300 -0
- package/cryptonight_lite.h +17 -0
- package/cryptonight_soft_shell.c +298 -0
- package/cryptonight_soft_shell.h +17 -0
- package/cryptonight_turtle.c +300 -0
- package/cryptonight_turtle.h +17 -0
- package/cryptonight_turtle_lite.c +300 -0
- package/cryptonight_turtle_lite.h +17 -0
- package/fresh.c +42 -0
- package/fresh.h +16 -0
- package/fugue.c +12 -0
- package/fugue.h +16 -0
- package/groestl.c +40 -0
- package/groestl.h +17 -0
- package/hefty1.c +63 -0
- package/hefty1.h +16 -0
- package/index.js +1 -0
- package/keccak.c +14 -0
- package/keccak.h +16 -0
- package/leocuvee-wrkzcoin-multi-hashing-0.0.20.tgz +0 -0
- package/multihashing.cc +699 -0
- package/nist5.c +46 -0
- package/nist5.h +16 -0
- package/package.json +56 -0
- package/quark.c +210 -0
- package/quark.h +16 -0
- package/qubit.c +45 -0
- package/qubit.h +16 -0
- package/scryptjane/scrypt-jane-chacha.h +132 -0
- package/scryptjane/scrypt-jane-hash.h +48 -0
- package/scryptjane/scrypt-jane-hash_keccak.h +168 -0
- package/scryptjane/scrypt-jane-hash_sha256.h +135 -0
- package/scryptjane/scrypt-jane-mix_chacha-avx.h +340 -0
- package/scryptjane/scrypt-jane-mix_chacha-sse2.h +371 -0
- package/scryptjane/scrypt-jane-mix_chacha-ssse3.h +348 -0
- package/scryptjane/scrypt-jane-mix_chacha.h +69 -0
- package/scryptjane/scrypt-jane-mix_salsa-avx.h +381 -0
- package/scryptjane/scrypt-jane-mix_salsa-sse2.h +443 -0
- package/scryptjane/scrypt-jane-mix_salsa.h +70 -0
- package/scryptjane/scrypt-jane-pbkdf2.h +112 -0
- package/scryptjane/scrypt-jane-portable-x86.h +364 -0
- package/scryptjane/scrypt-jane-portable.h +281 -0
- package/scryptjane/scrypt-jane-romix-basic.h +67 -0
- package/scryptjane/scrypt-jane-romix-template.h +118 -0
- package/scryptjane/scrypt-jane-romix.h +27 -0
- package/scryptjane/scrypt-jane-salsa.h +106 -0
- package/scryptjane/scrypt-jane-test-vectors.h +261 -0
- package/scryptjane.c +223 -0
- package/scryptjane.h +36 -0
- package/scryptn.c +258 -0
- package/scryptn.h +16 -0
- package/sha1.c +65 -0
- package/sha1.h +16 -0
- package/sha256.h +440 -0
- package/sha3/aes_helper.c +392 -0
- package/sha3/hamsi.c +867 -0
- package/sha3/hamsi_helper.c +39648 -0
- package/sha3/md_helper.c +347 -0
- package/sha3/sph_blake.c +1114 -0
- package/sha3/sph_blake.h +327 -0
- package/sha3/sph_bmw.c +965 -0
- package/sha3/sph_bmw.h +328 -0
- package/sha3/sph_cubehash.c +723 -0
- package/sha3/sph_cubehash.h +292 -0
- package/sha3/sph_echo.c +1031 -0
- package/sha3/sph_echo.h +320 -0
- package/sha3/sph_fugue.c +1208 -0
- package/sha3/sph_fugue.h +81 -0
- package/sha3/sph_groestl.c +3119 -0
- package/sha3/sph_groestl.h +329 -0
- package/sha3/sph_hamsi.h +321 -0
- package/sha3/sph_hefty1.c +378 -0
- package/sha3/sph_hefty1.h +66 -0
- package/sha3/sph_jh.c +1116 -0
- package/sha3/sph_jh.h +298 -0
- package/sha3/sph_keccak.c +1824 -0
- package/sha3/sph_keccak.h +293 -0
- package/sha3/sph_luffa.c +1426 -0
- package/sha3/sph_luffa.h +296 -0
- package/sha3/sph_shabal.c +806 -0
- package/sha3/sph_shabal.h +344 -0
- package/sha3/sph_shavite.c +1764 -0
- package/sha3/sph_shavite.h +314 -0
- package/sha3/sph_simd.c +1799 -0
- package/sha3/sph_simd.h +309 -0
- package/sha3/sph_skein.c +1254 -0
- package/sha3/sph_skein.h +298 -0
- package/sha3/sph_types.h +1976 -0
- package/sha3/sph_whirlpool.c +3480 -0
- package/sha3/sph_whirlpool.h +209 -0
- package/shavite3.c +24 -0
- package/shavite3.h +16 -0
- package/skein.c +26 -0
- package/skein.h +16 -0
- package/stdint.h +259 -0
- package/tests/argon2-tests.js +16 -0
- package/tests/benchmark.js +36 -0
- package/tests/cryptonight-tests.js +189 -0
- package/tests/cryptonight_monero.js +53 -0
- package/tests/test.js +16 -0
- package/x11.c +85 -0
- package/x11.h +16 -0
- package/x13.c +97 -0
- package/x13.h +5 -0
- package/x15.c +106 -0
- package/x15.h +16 -0
package/sha3/sph_skein.c
ADDED
|
@@ -0,0 +1,1254 @@
|
|
|
1
|
+
/* $Id: skein.c 254 2011-06-07 19:38:58Z tp $ */
|
|
2
|
+
/*
|
|
3
|
+
* Skein implementation.
|
|
4
|
+
*
|
|
5
|
+
* ==========================(LICENSE BEGIN)============================
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2007-2010 Projet RNRT SAPHIR
|
|
8
|
+
*
|
|
9
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
10
|
+
* a copy of this software and associated documentation files (the
|
|
11
|
+
* "Software"), to deal in the Software without restriction, including
|
|
12
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
13
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
14
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
15
|
+
* the following conditions:
|
|
16
|
+
*
|
|
17
|
+
* The above copyright notice and this permission notice shall be
|
|
18
|
+
* included in all copies or substantial portions of the Software.
|
|
19
|
+
*
|
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
21
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
22
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
23
|
+
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
24
|
+
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
25
|
+
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
26
|
+
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
27
|
+
*
|
|
28
|
+
* ===========================(LICENSE END)=============================
|
|
29
|
+
*
|
|
30
|
+
* @author Thomas Pornin <thomas.pornin@cryptolog.com>
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
#include <stddef.h>
|
|
34
|
+
#include <string.h>
|
|
35
|
+
|
|
36
|
+
#include "sph_skein.h"
|
|
37
|
+
|
|
38
|
+
#ifdef __cplusplus
|
|
39
|
+
extern "C"{
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
#if SPH_SMALL_FOOTPRINT && !defined SPH_SMALL_FOOTPRINT_SKEIN
|
|
44
|
+
#define SPH_SMALL_FOOTPRINT_SKEIN 1
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#ifdef _MSC_VER
|
|
48
|
+
#pragma warning (disable: 4146)
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
#if SPH_64
|
|
52
|
+
|
|
53
|
+
#if 0
|
|
54
|
+
/* obsolete */
|
|
55
|
+
/*
|
|
56
|
+
* M5_ ## s ## _ ## i evaluates to s+i mod 5 (0 <= s <= 18, 0 <= i <= 3).
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
#define M5_0_0 0
|
|
60
|
+
#define M5_0_1 1
|
|
61
|
+
#define M5_0_2 2
|
|
62
|
+
#define M5_0_3 3
|
|
63
|
+
|
|
64
|
+
#define M5_1_0 1
|
|
65
|
+
#define M5_1_1 2
|
|
66
|
+
#define M5_1_2 3
|
|
67
|
+
#define M5_1_3 4
|
|
68
|
+
|
|
69
|
+
#define M5_2_0 2
|
|
70
|
+
#define M5_2_1 3
|
|
71
|
+
#define M5_2_2 4
|
|
72
|
+
#define M5_2_3 0
|
|
73
|
+
|
|
74
|
+
#define M5_3_0 3
|
|
75
|
+
#define M5_3_1 4
|
|
76
|
+
#define M5_3_2 0
|
|
77
|
+
#define M5_3_3 1
|
|
78
|
+
|
|
79
|
+
#define M5_4_0 4
|
|
80
|
+
#define M5_4_1 0
|
|
81
|
+
#define M5_4_2 1
|
|
82
|
+
#define M5_4_3 2
|
|
83
|
+
|
|
84
|
+
#define M5_5_0 0
|
|
85
|
+
#define M5_5_1 1
|
|
86
|
+
#define M5_5_2 2
|
|
87
|
+
#define M5_5_3 3
|
|
88
|
+
|
|
89
|
+
#define M5_6_0 1
|
|
90
|
+
#define M5_6_1 2
|
|
91
|
+
#define M5_6_2 3
|
|
92
|
+
#define M5_6_3 4
|
|
93
|
+
|
|
94
|
+
#define M5_7_0 2
|
|
95
|
+
#define M5_7_1 3
|
|
96
|
+
#define M5_7_2 4
|
|
97
|
+
#define M5_7_3 0
|
|
98
|
+
|
|
99
|
+
#define M5_8_0 3
|
|
100
|
+
#define M5_8_1 4
|
|
101
|
+
#define M5_8_2 0
|
|
102
|
+
#define M5_8_3 1
|
|
103
|
+
|
|
104
|
+
#define M5_9_0 4
|
|
105
|
+
#define M5_9_1 0
|
|
106
|
+
#define M5_9_2 1
|
|
107
|
+
#define M5_9_3 2
|
|
108
|
+
|
|
109
|
+
#define M5_10_0 0
|
|
110
|
+
#define M5_10_1 1
|
|
111
|
+
#define M5_10_2 2
|
|
112
|
+
#define M5_10_3 3
|
|
113
|
+
|
|
114
|
+
#define M5_11_0 1
|
|
115
|
+
#define M5_11_1 2
|
|
116
|
+
#define M5_11_2 3
|
|
117
|
+
#define M5_11_3 4
|
|
118
|
+
|
|
119
|
+
#define M5_12_0 2
|
|
120
|
+
#define M5_12_1 3
|
|
121
|
+
#define M5_12_2 4
|
|
122
|
+
#define M5_12_3 0
|
|
123
|
+
|
|
124
|
+
#define M5_13_0 3
|
|
125
|
+
#define M5_13_1 4
|
|
126
|
+
#define M5_13_2 0
|
|
127
|
+
#define M5_13_3 1
|
|
128
|
+
|
|
129
|
+
#define M5_14_0 4
|
|
130
|
+
#define M5_14_1 0
|
|
131
|
+
#define M5_14_2 1
|
|
132
|
+
#define M5_14_3 2
|
|
133
|
+
|
|
134
|
+
#define M5_15_0 0
|
|
135
|
+
#define M5_15_1 1
|
|
136
|
+
#define M5_15_2 2
|
|
137
|
+
#define M5_15_3 3
|
|
138
|
+
|
|
139
|
+
#define M5_16_0 1
|
|
140
|
+
#define M5_16_1 2
|
|
141
|
+
#define M5_16_2 3
|
|
142
|
+
#define M5_16_3 4
|
|
143
|
+
|
|
144
|
+
#define M5_17_0 2
|
|
145
|
+
#define M5_17_1 3
|
|
146
|
+
#define M5_17_2 4
|
|
147
|
+
#define M5_17_3 0
|
|
148
|
+
|
|
149
|
+
#define M5_18_0 3
|
|
150
|
+
#define M5_18_1 4
|
|
151
|
+
#define M5_18_2 0
|
|
152
|
+
#define M5_18_3 1
|
|
153
|
+
#endif
|
|
154
|
+
|
|
155
|
+
/*
|
|
156
|
+
* M9_ ## s ## _ ## i evaluates to s+i mod 9 (0 <= s <= 18, 0 <= i <= 7).
|
|
157
|
+
*/
|
|
158
|
+
|
|
159
|
+
#define M9_0_0 0
|
|
160
|
+
#define M9_0_1 1
|
|
161
|
+
#define M9_0_2 2
|
|
162
|
+
#define M9_0_3 3
|
|
163
|
+
#define M9_0_4 4
|
|
164
|
+
#define M9_0_5 5
|
|
165
|
+
#define M9_0_6 6
|
|
166
|
+
#define M9_0_7 7
|
|
167
|
+
|
|
168
|
+
#define M9_1_0 1
|
|
169
|
+
#define M9_1_1 2
|
|
170
|
+
#define M9_1_2 3
|
|
171
|
+
#define M9_1_3 4
|
|
172
|
+
#define M9_1_4 5
|
|
173
|
+
#define M9_1_5 6
|
|
174
|
+
#define M9_1_6 7
|
|
175
|
+
#define M9_1_7 8
|
|
176
|
+
|
|
177
|
+
#define M9_2_0 2
|
|
178
|
+
#define M9_2_1 3
|
|
179
|
+
#define M9_2_2 4
|
|
180
|
+
#define M9_2_3 5
|
|
181
|
+
#define M9_2_4 6
|
|
182
|
+
#define M9_2_5 7
|
|
183
|
+
#define M9_2_6 8
|
|
184
|
+
#define M9_2_7 0
|
|
185
|
+
|
|
186
|
+
#define M9_3_0 3
|
|
187
|
+
#define M9_3_1 4
|
|
188
|
+
#define M9_3_2 5
|
|
189
|
+
#define M9_3_3 6
|
|
190
|
+
#define M9_3_4 7
|
|
191
|
+
#define M9_3_5 8
|
|
192
|
+
#define M9_3_6 0
|
|
193
|
+
#define M9_3_7 1
|
|
194
|
+
|
|
195
|
+
#define M9_4_0 4
|
|
196
|
+
#define M9_4_1 5
|
|
197
|
+
#define M9_4_2 6
|
|
198
|
+
#define M9_4_3 7
|
|
199
|
+
#define M9_4_4 8
|
|
200
|
+
#define M9_4_5 0
|
|
201
|
+
#define M9_4_6 1
|
|
202
|
+
#define M9_4_7 2
|
|
203
|
+
|
|
204
|
+
#define M9_5_0 5
|
|
205
|
+
#define M9_5_1 6
|
|
206
|
+
#define M9_5_2 7
|
|
207
|
+
#define M9_5_3 8
|
|
208
|
+
#define M9_5_4 0
|
|
209
|
+
#define M9_5_5 1
|
|
210
|
+
#define M9_5_6 2
|
|
211
|
+
#define M9_5_7 3
|
|
212
|
+
|
|
213
|
+
#define M9_6_0 6
|
|
214
|
+
#define M9_6_1 7
|
|
215
|
+
#define M9_6_2 8
|
|
216
|
+
#define M9_6_3 0
|
|
217
|
+
#define M9_6_4 1
|
|
218
|
+
#define M9_6_5 2
|
|
219
|
+
#define M9_6_6 3
|
|
220
|
+
#define M9_6_7 4
|
|
221
|
+
|
|
222
|
+
#define M9_7_0 7
|
|
223
|
+
#define M9_7_1 8
|
|
224
|
+
#define M9_7_2 0
|
|
225
|
+
#define M9_7_3 1
|
|
226
|
+
#define M9_7_4 2
|
|
227
|
+
#define M9_7_5 3
|
|
228
|
+
#define M9_7_6 4
|
|
229
|
+
#define M9_7_7 5
|
|
230
|
+
|
|
231
|
+
#define M9_8_0 8
|
|
232
|
+
#define M9_8_1 0
|
|
233
|
+
#define M9_8_2 1
|
|
234
|
+
#define M9_8_3 2
|
|
235
|
+
#define M9_8_4 3
|
|
236
|
+
#define M9_8_5 4
|
|
237
|
+
#define M9_8_6 5
|
|
238
|
+
#define M9_8_7 6
|
|
239
|
+
|
|
240
|
+
#define M9_9_0 0
|
|
241
|
+
#define M9_9_1 1
|
|
242
|
+
#define M9_9_2 2
|
|
243
|
+
#define M9_9_3 3
|
|
244
|
+
#define M9_9_4 4
|
|
245
|
+
#define M9_9_5 5
|
|
246
|
+
#define M9_9_6 6
|
|
247
|
+
#define M9_9_7 7
|
|
248
|
+
|
|
249
|
+
#define M9_10_0 1
|
|
250
|
+
#define M9_10_1 2
|
|
251
|
+
#define M9_10_2 3
|
|
252
|
+
#define M9_10_3 4
|
|
253
|
+
#define M9_10_4 5
|
|
254
|
+
#define M9_10_5 6
|
|
255
|
+
#define M9_10_6 7
|
|
256
|
+
#define M9_10_7 8
|
|
257
|
+
|
|
258
|
+
#define M9_11_0 2
|
|
259
|
+
#define M9_11_1 3
|
|
260
|
+
#define M9_11_2 4
|
|
261
|
+
#define M9_11_3 5
|
|
262
|
+
#define M9_11_4 6
|
|
263
|
+
#define M9_11_5 7
|
|
264
|
+
#define M9_11_6 8
|
|
265
|
+
#define M9_11_7 0
|
|
266
|
+
|
|
267
|
+
#define M9_12_0 3
|
|
268
|
+
#define M9_12_1 4
|
|
269
|
+
#define M9_12_2 5
|
|
270
|
+
#define M9_12_3 6
|
|
271
|
+
#define M9_12_4 7
|
|
272
|
+
#define M9_12_5 8
|
|
273
|
+
#define M9_12_6 0
|
|
274
|
+
#define M9_12_7 1
|
|
275
|
+
|
|
276
|
+
#define M9_13_0 4
|
|
277
|
+
#define M9_13_1 5
|
|
278
|
+
#define M9_13_2 6
|
|
279
|
+
#define M9_13_3 7
|
|
280
|
+
#define M9_13_4 8
|
|
281
|
+
#define M9_13_5 0
|
|
282
|
+
#define M9_13_6 1
|
|
283
|
+
#define M9_13_7 2
|
|
284
|
+
|
|
285
|
+
#define M9_14_0 5
|
|
286
|
+
#define M9_14_1 6
|
|
287
|
+
#define M9_14_2 7
|
|
288
|
+
#define M9_14_3 8
|
|
289
|
+
#define M9_14_4 0
|
|
290
|
+
#define M9_14_5 1
|
|
291
|
+
#define M9_14_6 2
|
|
292
|
+
#define M9_14_7 3
|
|
293
|
+
|
|
294
|
+
#define M9_15_0 6
|
|
295
|
+
#define M9_15_1 7
|
|
296
|
+
#define M9_15_2 8
|
|
297
|
+
#define M9_15_3 0
|
|
298
|
+
#define M9_15_4 1
|
|
299
|
+
#define M9_15_5 2
|
|
300
|
+
#define M9_15_6 3
|
|
301
|
+
#define M9_15_7 4
|
|
302
|
+
|
|
303
|
+
#define M9_16_0 7
|
|
304
|
+
#define M9_16_1 8
|
|
305
|
+
#define M9_16_2 0
|
|
306
|
+
#define M9_16_3 1
|
|
307
|
+
#define M9_16_4 2
|
|
308
|
+
#define M9_16_5 3
|
|
309
|
+
#define M9_16_6 4
|
|
310
|
+
#define M9_16_7 5
|
|
311
|
+
|
|
312
|
+
#define M9_17_0 8
|
|
313
|
+
#define M9_17_1 0
|
|
314
|
+
#define M9_17_2 1
|
|
315
|
+
#define M9_17_3 2
|
|
316
|
+
#define M9_17_4 3
|
|
317
|
+
#define M9_17_5 4
|
|
318
|
+
#define M9_17_6 5
|
|
319
|
+
#define M9_17_7 6
|
|
320
|
+
|
|
321
|
+
#define M9_18_0 0
|
|
322
|
+
#define M9_18_1 1
|
|
323
|
+
#define M9_18_2 2
|
|
324
|
+
#define M9_18_3 3
|
|
325
|
+
#define M9_18_4 4
|
|
326
|
+
#define M9_18_5 5
|
|
327
|
+
#define M9_18_6 6
|
|
328
|
+
#define M9_18_7 7
|
|
329
|
+
|
|
330
|
+
/*
|
|
331
|
+
* M3_ ## s ## _ ## i evaluates to s+i mod 3 (0 <= s <= 18, 0 <= i <= 1).
|
|
332
|
+
*/
|
|
333
|
+
|
|
334
|
+
#define M3_0_0 0
|
|
335
|
+
#define M3_0_1 1
|
|
336
|
+
#define M3_1_0 1
|
|
337
|
+
#define M3_1_1 2
|
|
338
|
+
#define M3_2_0 2
|
|
339
|
+
#define M3_2_1 0
|
|
340
|
+
#define M3_3_0 0
|
|
341
|
+
#define M3_3_1 1
|
|
342
|
+
#define M3_4_0 1
|
|
343
|
+
#define M3_4_1 2
|
|
344
|
+
#define M3_5_0 2
|
|
345
|
+
#define M3_5_1 0
|
|
346
|
+
#define M3_6_0 0
|
|
347
|
+
#define M3_6_1 1
|
|
348
|
+
#define M3_7_0 1
|
|
349
|
+
#define M3_7_1 2
|
|
350
|
+
#define M3_8_0 2
|
|
351
|
+
#define M3_8_1 0
|
|
352
|
+
#define M3_9_0 0
|
|
353
|
+
#define M3_9_1 1
|
|
354
|
+
#define M3_10_0 1
|
|
355
|
+
#define M3_10_1 2
|
|
356
|
+
#define M3_11_0 2
|
|
357
|
+
#define M3_11_1 0
|
|
358
|
+
#define M3_12_0 0
|
|
359
|
+
#define M3_12_1 1
|
|
360
|
+
#define M3_13_0 1
|
|
361
|
+
#define M3_13_1 2
|
|
362
|
+
#define M3_14_0 2
|
|
363
|
+
#define M3_14_1 0
|
|
364
|
+
#define M3_15_0 0
|
|
365
|
+
#define M3_15_1 1
|
|
366
|
+
#define M3_16_0 1
|
|
367
|
+
#define M3_16_1 2
|
|
368
|
+
#define M3_17_0 2
|
|
369
|
+
#define M3_17_1 0
|
|
370
|
+
#define M3_18_0 0
|
|
371
|
+
#define M3_18_1 1
|
|
372
|
+
|
|
373
|
+
#define XCAT(x, y) XCAT_(x, y)
|
|
374
|
+
#define XCAT_(x, y) x ## y
|
|
375
|
+
|
|
376
|
+
#if 0
|
|
377
|
+
/* obsolete */
|
|
378
|
+
#define SKSI(k, s, i) XCAT(k, XCAT(XCAT(XCAT(M5_, s), _), i))
|
|
379
|
+
#define SKST(t, s, v) XCAT(t, XCAT(XCAT(XCAT(M3_, s), _), v))
|
|
380
|
+
#endif
|
|
381
|
+
|
|
382
|
+
#define SKBI(k, s, i) XCAT(k, XCAT(XCAT(XCAT(M9_, s), _), i))
|
|
383
|
+
#define SKBT(t, s, v) XCAT(t, XCAT(XCAT(XCAT(M3_, s), _), v))
|
|
384
|
+
|
|
385
|
+
#if 0
|
|
386
|
+
/* obsolete */
|
|
387
|
+
#define TFSMALL_KINIT(k0, k1, k2, k3, k4, t0, t1, t2) do { \
|
|
388
|
+
k4 = (k0 ^ k1) ^ (k2 ^ k3) ^ SPH_C64(0x1BD11BDAA9FC1A22); \
|
|
389
|
+
t2 = t0 ^ t1; \
|
|
390
|
+
} while (0)
|
|
391
|
+
#endif
|
|
392
|
+
|
|
393
|
+
#define TFBIG_KINIT(k0, k1, k2, k3, k4, k5, k6, k7, k8, t0, t1, t2) do { \
|
|
394
|
+
k8 = ((k0 ^ k1) ^ (k2 ^ k3)) ^ ((k4 ^ k5) ^ (k6 ^ k7)) \
|
|
395
|
+
^ SPH_C64(0x1BD11BDAA9FC1A22); \
|
|
396
|
+
t2 = t0 ^ t1; \
|
|
397
|
+
} while (0)
|
|
398
|
+
|
|
399
|
+
#if 0
|
|
400
|
+
/* obsolete */
|
|
401
|
+
#define TFSMALL_ADDKEY(w0, w1, w2, w3, k, t, s) do { \
|
|
402
|
+
w0 = SPH_T64(w0 + SKSI(k, s, 0)); \
|
|
403
|
+
w1 = SPH_T64(w1 + SKSI(k, s, 1) + SKST(t, s, 0)); \
|
|
404
|
+
w2 = SPH_T64(w2 + SKSI(k, s, 2) + SKST(t, s, 1)); \
|
|
405
|
+
w3 = SPH_T64(w3 + SKSI(k, s, 3) + (sph_u64)s); \
|
|
406
|
+
} while (0)
|
|
407
|
+
#endif
|
|
408
|
+
|
|
409
|
+
#if SPH_SMALL_FOOTPRINT_SKEIN
|
|
410
|
+
|
|
411
|
+
#define TFBIG_ADDKEY(s, tt0, tt1) do { \
|
|
412
|
+
p0 = SPH_T64(p0 + h[s + 0]); \
|
|
413
|
+
p1 = SPH_T64(p1 + h[s + 1]); \
|
|
414
|
+
p2 = SPH_T64(p2 + h[s + 2]); \
|
|
415
|
+
p3 = SPH_T64(p3 + h[s + 3]); \
|
|
416
|
+
p4 = SPH_T64(p4 + h[s + 4]); \
|
|
417
|
+
p5 = SPH_T64(p5 + h[s + 5] + tt0); \
|
|
418
|
+
p6 = SPH_T64(p6 + h[s + 6] + tt1); \
|
|
419
|
+
p7 = SPH_T64(p7 + h[s + 7] + (sph_u64)s); \
|
|
420
|
+
} while (0)
|
|
421
|
+
|
|
422
|
+
#else
|
|
423
|
+
|
|
424
|
+
#define TFBIG_ADDKEY(w0, w1, w2, w3, w4, w5, w6, w7, k, t, s) do { \
|
|
425
|
+
w0 = SPH_T64(w0 + SKBI(k, s, 0)); \
|
|
426
|
+
w1 = SPH_T64(w1 + SKBI(k, s, 1)); \
|
|
427
|
+
w2 = SPH_T64(w2 + SKBI(k, s, 2)); \
|
|
428
|
+
w3 = SPH_T64(w3 + SKBI(k, s, 3)); \
|
|
429
|
+
w4 = SPH_T64(w4 + SKBI(k, s, 4)); \
|
|
430
|
+
w5 = SPH_T64(w5 + SKBI(k, s, 5) + SKBT(t, s, 0)); \
|
|
431
|
+
w6 = SPH_T64(w6 + SKBI(k, s, 6) + SKBT(t, s, 1)); \
|
|
432
|
+
w7 = SPH_T64(w7 + SKBI(k, s, 7) + (sph_u64)s); \
|
|
433
|
+
} while (0)
|
|
434
|
+
|
|
435
|
+
#endif
|
|
436
|
+
|
|
437
|
+
#if 0
|
|
438
|
+
/* obsolete */
|
|
439
|
+
#define TFSMALL_MIX(x0, x1, rc) do { \
|
|
440
|
+
x0 = SPH_T64(x0 + x1); \
|
|
441
|
+
x1 = SPH_ROTL64(x1, rc) ^ x0; \
|
|
442
|
+
} while (0)
|
|
443
|
+
#endif
|
|
444
|
+
|
|
445
|
+
#define TFBIG_MIX(x0, x1, rc) do { \
|
|
446
|
+
x0 = SPH_T64(x0 + x1); \
|
|
447
|
+
x1 = SPH_ROTL64(x1, rc) ^ x0; \
|
|
448
|
+
} while (0)
|
|
449
|
+
|
|
450
|
+
#if 0
|
|
451
|
+
/* obsolete */
|
|
452
|
+
#define TFSMALL_MIX4(w0, w1, w2, w3, rc0, rc1) do { \
|
|
453
|
+
TFSMALL_MIX(w0, w1, rc0); \
|
|
454
|
+
TFSMALL_MIX(w2, w3, rc1); \
|
|
455
|
+
} while (0)
|
|
456
|
+
#endif
|
|
457
|
+
|
|
458
|
+
#define TFBIG_MIX8(w0, w1, w2, w3, w4, w5, w6, w7, rc0, rc1, rc2, rc3) do { \
|
|
459
|
+
TFBIG_MIX(w0, w1, rc0); \
|
|
460
|
+
TFBIG_MIX(w2, w3, rc1); \
|
|
461
|
+
TFBIG_MIX(w4, w5, rc2); \
|
|
462
|
+
TFBIG_MIX(w6, w7, rc3); \
|
|
463
|
+
} while (0)
|
|
464
|
+
|
|
465
|
+
#if 0
|
|
466
|
+
/* obsolete */
|
|
467
|
+
#define TFSMALL_4e(s) do { \
|
|
468
|
+
TFSMALL_ADDKEY(p0, p1, p2, p3, h, t, s); \
|
|
469
|
+
TFSMALL_MIX4(p0, p1, p2, p3, 14, 16); \
|
|
470
|
+
TFSMALL_MIX4(p0, p3, p2, p1, 52, 57); \
|
|
471
|
+
TFSMALL_MIX4(p0, p1, p2, p3, 23, 40); \
|
|
472
|
+
TFSMALL_MIX4(p0, p3, p2, p1, 5, 37); \
|
|
473
|
+
} while (0)
|
|
474
|
+
|
|
475
|
+
#define TFSMALL_4o(s) do { \
|
|
476
|
+
TFSMALL_ADDKEY(p0, p1, p2, p3, h, t, s); \
|
|
477
|
+
TFSMALL_MIX4(p0, p1, p2, p3, 25, 33); \
|
|
478
|
+
TFSMALL_MIX4(p0, p3, p2, p1, 46, 12); \
|
|
479
|
+
TFSMALL_MIX4(p0, p1, p2, p3, 58, 22); \
|
|
480
|
+
TFSMALL_MIX4(p0, p3, p2, p1, 32, 32); \
|
|
481
|
+
} while (0)
|
|
482
|
+
#endif
|
|
483
|
+
|
|
484
|
+
#if SPH_SMALL_FOOTPRINT_SKEIN
|
|
485
|
+
|
|
486
|
+
#define TFBIG_4e(s) do { \
|
|
487
|
+
TFBIG_ADDKEY(s, t0, t1); \
|
|
488
|
+
TFBIG_MIX8(p0, p1, p2, p3, p4, p5, p6, p7, 46, 36, 19, 37); \
|
|
489
|
+
TFBIG_MIX8(p2, p1, p4, p7, p6, p5, p0, p3, 33, 27, 14, 42); \
|
|
490
|
+
TFBIG_MIX8(p4, p1, p6, p3, p0, p5, p2, p7, 17, 49, 36, 39); \
|
|
491
|
+
TFBIG_MIX8(p6, p1, p0, p7, p2, p5, p4, p3, 44, 9, 54, 56); \
|
|
492
|
+
} while (0)
|
|
493
|
+
|
|
494
|
+
#define TFBIG_4o(s) do { \
|
|
495
|
+
TFBIG_ADDKEY(s, t1, t2); \
|
|
496
|
+
TFBIG_MIX8(p0, p1, p2, p3, p4, p5, p6, p7, 39, 30, 34, 24); \
|
|
497
|
+
TFBIG_MIX8(p2, p1, p4, p7, p6, p5, p0, p3, 13, 50, 10, 17); \
|
|
498
|
+
TFBIG_MIX8(p4, p1, p6, p3, p0, p5, p2, p7, 25, 29, 39, 43); \
|
|
499
|
+
TFBIG_MIX8(p6, p1, p0, p7, p2, p5, p4, p3, 8, 35, 56, 22); \
|
|
500
|
+
} while (0)
|
|
501
|
+
|
|
502
|
+
#else
|
|
503
|
+
|
|
504
|
+
#define TFBIG_4e(s) do { \
|
|
505
|
+
TFBIG_ADDKEY(p0, p1, p2, p3, p4, p5, p6, p7, h, t, s); \
|
|
506
|
+
TFBIG_MIX8(p0, p1, p2, p3, p4, p5, p6, p7, 46, 36, 19, 37); \
|
|
507
|
+
TFBIG_MIX8(p2, p1, p4, p7, p6, p5, p0, p3, 33, 27, 14, 42); \
|
|
508
|
+
TFBIG_MIX8(p4, p1, p6, p3, p0, p5, p2, p7, 17, 49, 36, 39); \
|
|
509
|
+
TFBIG_MIX8(p6, p1, p0, p7, p2, p5, p4, p3, 44, 9, 54, 56); \
|
|
510
|
+
} while (0)
|
|
511
|
+
|
|
512
|
+
#define TFBIG_4o(s) do { \
|
|
513
|
+
TFBIG_ADDKEY(p0, p1, p2, p3, p4, p5, p6, p7, h, t, s); \
|
|
514
|
+
TFBIG_MIX8(p0, p1, p2, p3, p4, p5, p6, p7, 39, 30, 34, 24); \
|
|
515
|
+
TFBIG_MIX8(p2, p1, p4, p7, p6, p5, p0, p3, 13, 50, 10, 17); \
|
|
516
|
+
TFBIG_MIX8(p4, p1, p6, p3, p0, p5, p2, p7, 25, 29, 39, 43); \
|
|
517
|
+
TFBIG_MIX8(p6, p1, p0, p7, p2, p5, p4, p3, 8, 35, 56, 22); \
|
|
518
|
+
} while (0)
|
|
519
|
+
|
|
520
|
+
#endif
|
|
521
|
+
|
|
522
|
+
#if 0
|
|
523
|
+
/* obsolete */
|
|
524
|
+
#define UBI_SMALL(etype, extra) do { \
|
|
525
|
+
sph_u64 h4, t0, t1, t2; \
|
|
526
|
+
sph_u64 m0 = sph_dec64le(buf + 0); \
|
|
527
|
+
sph_u64 m1 = sph_dec64le(buf + 8); \
|
|
528
|
+
sph_u64 m2 = sph_dec64le(buf + 16); \
|
|
529
|
+
sph_u64 m3 = sph_dec64le(buf + 24); \
|
|
530
|
+
sph_u64 p0 = m0; \
|
|
531
|
+
sph_u64 p1 = m1; \
|
|
532
|
+
sph_u64 p2 = m2; \
|
|
533
|
+
sph_u64 p3 = m3; \
|
|
534
|
+
t0 = SPH_T64(bcount << 5) + (sph_u64)(extra); \
|
|
535
|
+
t1 = (bcount >> 59) + ((sph_u64)(etype) << 55); \
|
|
536
|
+
TFSMALL_KINIT(h0, h1, h2, h3, h4, t0, t1, t2); \
|
|
537
|
+
TFSMALL_4e(0); \
|
|
538
|
+
TFSMALL_4o(1); \
|
|
539
|
+
TFSMALL_4e(2); \
|
|
540
|
+
TFSMALL_4o(3); \
|
|
541
|
+
TFSMALL_4e(4); \
|
|
542
|
+
TFSMALL_4o(5); \
|
|
543
|
+
TFSMALL_4e(6); \
|
|
544
|
+
TFSMALL_4o(7); \
|
|
545
|
+
TFSMALL_4e(8); \
|
|
546
|
+
TFSMALL_4o(9); \
|
|
547
|
+
TFSMALL_4e(10); \
|
|
548
|
+
TFSMALL_4o(11); \
|
|
549
|
+
TFSMALL_4e(12); \
|
|
550
|
+
TFSMALL_4o(13); \
|
|
551
|
+
TFSMALL_4e(14); \
|
|
552
|
+
TFSMALL_4o(15); \
|
|
553
|
+
TFSMALL_4e(16); \
|
|
554
|
+
TFSMALL_4o(17); \
|
|
555
|
+
TFSMALL_ADDKEY(p0, p1, p2, p3, h, t, 18); \
|
|
556
|
+
h0 = m0 ^ p0; \
|
|
557
|
+
h1 = m1 ^ p1; \
|
|
558
|
+
h2 = m2 ^ p2; \
|
|
559
|
+
h3 = m3 ^ p3; \
|
|
560
|
+
} while (0)
|
|
561
|
+
#endif
|
|
562
|
+
|
|
563
|
+
#if SPH_SMALL_FOOTPRINT_SKEIN
|
|
564
|
+
|
|
565
|
+
#define UBI_BIG(etype, extra) do { \
|
|
566
|
+
sph_u64 t0, t1, t2; \
|
|
567
|
+
unsigned u; \
|
|
568
|
+
sph_u64 m0 = sph_dec64le_aligned(buf + 0); \
|
|
569
|
+
sph_u64 m1 = sph_dec64le_aligned(buf + 8); \
|
|
570
|
+
sph_u64 m2 = sph_dec64le_aligned(buf + 16); \
|
|
571
|
+
sph_u64 m3 = sph_dec64le_aligned(buf + 24); \
|
|
572
|
+
sph_u64 m4 = sph_dec64le_aligned(buf + 32); \
|
|
573
|
+
sph_u64 m5 = sph_dec64le_aligned(buf + 40); \
|
|
574
|
+
sph_u64 m6 = sph_dec64le_aligned(buf + 48); \
|
|
575
|
+
sph_u64 m7 = sph_dec64le_aligned(buf + 56); \
|
|
576
|
+
sph_u64 p0 = m0; \
|
|
577
|
+
sph_u64 p1 = m1; \
|
|
578
|
+
sph_u64 p2 = m2; \
|
|
579
|
+
sph_u64 p3 = m3; \
|
|
580
|
+
sph_u64 p4 = m4; \
|
|
581
|
+
sph_u64 p5 = m5; \
|
|
582
|
+
sph_u64 p6 = m6; \
|
|
583
|
+
sph_u64 p7 = m7; \
|
|
584
|
+
t0 = SPH_T64(bcount << 6) + (sph_u64)(extra); \
|
|
585
|
+
t1 = (bcount >> 58) + ((sph_u64)(etype) << 55); \
|
|
586
|
+
TFBIG_KINIT(h[0], h[1], h[2], h[3], h[4], h[5], \
|
|
587
|
+
h[6], h[7], h[8], t0, t1, t2); \
|
|
588
|
+
for (u = 0; u <= 15; u += 3) { \
|
|
589
|
+
h[u + 9] = h[u + 0]; \
|
|
590
|
+
h[u + 10] = h[u + 1]; \
|
|
591
|
+
h[u + 11] = h[u + 2]; \
|
|
592
|
+
} \
|
|
593
|
+
for (u = 0; u < 9; u ++) { \
|
|
594
|
+
sph_u64 s = u << 1; \
|
|
595
|
+
sph_u64 tmp; \
|
|
596
|
+
TFBIG_4e(s); \
|
|
597
|
+
TFBIG_4o(s + 1); \
|
|
598
|
+
tmp = t2; \
|
|
599
|
+
t2 = t1; \
|
|
600
|
+
t1 = t0; \
|
|
601
|
+
t0 = tmp; \
|
|
602
|
+
} \
|
|
603
|
+
TFBIG_ADDKEY(18, t0, t1); \
|
|
604
|
+
h[0] = m0 ^ p0; \
|
|
605
|
+
h[1] = m1 ^ p1; \
|
|
606
|
+
h[2] = m2 ^ p2; \
|
|
607
|
+
h[3] = m3 ^ p3; \
|
|
608
|
+
h[4] = m4 ^ p4; \
|
|
609
|
+
h[5] = m5 ^ p5; \
|
|
610
|
+
h[6] = m6 ^ p6; \
|
|
611
|
+
h[7] = m7 ^ p7; \
|
|
612
|
+
} while (0)
|
|
613
|
+
|
|
614
|
+
#else
|
|
615
|
+
|
|
616
|
+
#define UBI_BIG(etype, extra) do { \
|
|
617
|
+
sph_u64 h8, t0, t1, t2; \
|
|
618
|
+
sph_u64 m0 = sph_dec64le_aligned(buf + 0); \
|
|
619
|
+
sph_u64 m1 = sph_dec64le_aligned(buf + 8); \
|
|
620
|
+
sph_u64 m2 = sph_dec64le_aligned(buf + 16); \
|
|
621
|
+
sph_u64 m3 = sph_dec64le_aligned(buf + 24); \
|
|
622
|
+
sph_u64 m4 = sph_dec64le_aligned(buf + 32); \
|
|
623
|
+
sph_u64 m5 = sph_dec64le_aligned(buf + 40); \
|
|
624
|
+
sph_u64 m6 = sph_dec64le_aligned(buf + 48); \
|
|
625
|
+
sph_u64 m7 = sph_dec64le_aligned(buf + 56); \
|
|
626
|
+
sph_u64 p0 = m0; \
|
|
627
|
+
sph_u64 p1 = m1; \
|
|
628
|
+
sph_u64 p2 = m2; \
|
|
629
|
+
sph_u64 p3 = m3; \
|
|
630
|
+
sph_u64 p4 = m4; \
|
|
631
|
+
sph_u64 p5 = m5; \
|
|
632
|
+
sph_u64 p6 = m6; \
|
|
633
|
+
sph_u64 p7 = m7; \
|
|
634
|
+
t0 = SPH_T64(bcount << 6) + (sph_u64)(extra); \
|
|
635
|
+
t1 = (bcount >> 58) + ((sph_u64)(etype) << 55); \
|
|
636
|
+
TFBIG_KINIT(h0, h1, h2, h3, h4, h5, h6, h7, h8, t0, t1, t2); \
|
|
637
|
+
TFBIG_4e(0); \
|
|
638
|
+
TFBIG_4o(1); \
|
|
639
|
+
TFBIG_4e(2); \
|
|
640
|
+
TFBIG_4o(3); \
|
|
641
|
+
TFBIG_4e(4); \
|
|
642
|
+
TFBIG_4o(5); \
|
|
643
|
+
TFBIG_4e(6); \
|
|
644
|
+
TFBIG_4o(7); \
|
|
645
|
+
TFBIG_4e(8); \
|
|
646
|
+
TFBIG_4o(9); \
|
|
647
|
+
TFBIG_4e(10); \
|
|
648
|
+
TFBIG_4o(11); \
|
|
649
|
+
TFBIG_4e(12); \
|
|
650
|
+
TFBIG_4o(13); \
|
|
651
|
+
TFBIG_4e(14); \
|
|
652
|
+
TFBIG_4o(15); \
|
|
653
|
+
TFBIG_4e(16); \
|
|
654
|
+
TFBIG_4o(17); \
|
|
655
|
+
TFBIG_ADDKEY(p0, p1, p2, p3, p4, p5, p6, p7, h, t, 18); \
|
|
656
|
+
h0 = m0 ^ p0; \
|
|
657
|
+
h1 = m1 ^ p1; \
|
|
658
|
+
h2 = m2 ^ p2; \
|
|
659
|
+
h3 = m3 ^ p3; \
|
|
660
|
+
h4 = m4 ^ p4; \
|
|
661
|
+
h5 = m5 ^ p5; \
|
|
662
|
+
h6 = m6 ^ p6; \
|
|
663
|
+
h7 = m7 ^ p7; \
|
|
664
|
+
} while (0)
|
|
665
|
+
|
|
666
|
+
#endif
|
|
667
|
+
|
|
668
|
+
#if 0
|
|
669
|
+
/* obsolete */
|
|
670
|
+
#define DECL_STATE_SMALL \
|
|
671
|
+
sph_u64 h0, h1, h2, h3; \
|
|
672
|
+
sph_u64 bcount;
|
|
673
|
+
|
|
674
|
+
#define READ_STATE_SMALL(sc) do { \
|
|
675
|
+
h0 = (sc)->h0; \
|
|
676
|
+
h1 = (sc)->h1; \
|
|
677
|
+
h2 = (sc)->h2; \
|
|
678
|
+
h3 = (sc)->h3; \
|
|
679
|
+
bcount = sc->bcount; \
|
|
680
|
+
} while (0)
|
|
681
|
+
|
|
682
|
+
#define WRITE_STATE_SMALL(sc) do { \
|
|
683
|
+
(sc)->h0 = h0; \
|
|
684
|
+
(sc)->h1 = h1; \
|
|
685
|
+
(sc)->h2 = h2; \
|
|
686
|
+
(sc)->h3 = h3; \
|
|
687
|
+
sc->bcount = bcount; \
|
|
688
|
+
} while (0)
|
|
689
|
+
#endif
|
|
690
|
+
|
|
691
|
+
#if SPH_SMALL_FOOTPRINT_SKEIN
|
|
692
|
+
|
|
693
|
+
#define DECL_STATE_BIG \
|
|
694
|
+
sph_u64 h[27]; \
|
|
695
|
+
sph_u64 bcount;
|
|
696
|
+
|
|
697
|
+
#define READ_STATE_BIG(sc) do { \
|
|
698
|
+
h[0] = (sc)->h0; \
|
|
699
|
+
h[1] = (sc)->h1; \
|
|
700
|
+
h[2] = (sc)->h2; \
|
|
701
|
+
h[3] = (sc)->h3; \
|
|
702
|
+
h[4] = (sc)->h4; \
|
|
703
|
+
h[5] = (sc)->h5; \
|
|
704
|
+
h[6] = (sc)->h6; \
|
|
705
|
+
h[7] = (sc)->h7; \
|
|
706
|
+
bcount = sc->bcount; \
|
|
707
|
+
} while (0)
|
|
708
|
+
|
|
709
|
+
#define WRITE_STATE_BIG(sc) do { \
|
|
710
|
+
(sc)->h0 = h[0]; \
|
|
711
|
+
(sc)->h1 = h[1]; \
|
|
712
|
+
(sc)->h2 = h[2]; \
|
|
713
|
+
(sc)->h3 = h[3]; \
|
|
714
|
+
(sc)->h4 = h[4]; \
|
|
715
|
+
(sc)->h5 = h[5]; \
|
|
716
|
+
(sc)->h6 = h[6]; \
|
|
717
|
+
(sc)->h7 = h[7]; \
|
|
718
|
+
sc->bcount = bcount; \
|
|
719
|
+
} while (0)
|
|
720
|
+
|
|
721
|
+
#else
|
|
722
|
+
|
|
723
|
+
#define DECL_STATE_BIG \
|
|
724
|
+
sph_u64 h0, h1, h2, h3, h4, h5, h6, h7; \
|
|
725
|
+
sph_u64 bcount;
|
|
726
|
+
|
|
727
|
+
#define READ_STATE_BIG(sc) do { \
|
|
728
|
+
h0 = (sc)->h0; \
|
|
729
|
+
h1 = (sc)->h1; \
|
|
730
|
+
h2 = (sc)->h2; \
|
|
731
|
+
h3 = (sc)->h3; \
|
|
732
|
+
h4 = (sc)->h4; \
|
|
733
|
+
h5 = (sc)->h5; \
|
|
734
|
+
h6 = (sc)->h6; \
|
|
735
|
+
h7 = (sc)->h7; \
|
|
736
|
+
bcount = sc->bcount; \
|
|
737
|
+
} while (0)
|
|
738
|
+
|
|
739
|
+
#define WRITE_STATE_BIG(sc) do { \
|
|
740
|
+
(sc)->h0 = h0; \
|
|
741
|
+
(sc)->h1 = h1; \
|
|
742
|
+
(sc)->h2 = h2; \
|
|
743
|
+
(sc)->h3 = h3; \
|
|
744
|
+
(sc)->h4 = h4; \
|
|
745
|
+
(sc)->h5 = h5; \
|
|
746
|
+
(sc)->h6 = h6; \
|
|
747
|
+
(sc)->h7 = h7; \
|
|
748
|
+
sc->bcount = bcount; \
|
|
749
|
+
} while (0)
|
|
750
|
+
|
|
751
|
+
#endif
|
|
752
|
+
|
|
753
|
+
#if 0
|
|
754
|
+
/* obsolete */
|
|
755
|
+
static void
|
|
756
|
+
skein_small_init(sph_skein_small_context *sc, const sph_u64 *iv)
|
|
757
|
+
{
|
|
758
|
+
sc->h0 = iv[0];
|
|
759
|
+
sc->h1 = iv[1];
|
|
760
|
+
sc->h2 = iv[2];
|
|
761
|
+
sc->h3 = iv[3];
|
|
762
|
+
sc->bcount = 0;
|
|
763
|
+
sc->ptr = 0;
|
|
764
|
+
}
|
|
765
|
+
#endif
|
|
766
|
+
|
|
767
|
+
static void
|
|
768
|
+
skein_big_init(sph_skein_big_context *sc, const sph_u64 *iv)
|
|
769
|
+
{
|
|
770
|
+
sc->h0 = iv[0];
|
|
771
|
+
sc->h1 = iv[1];
|
|
772
|
+
sc->h2 = iv[2];
|
|
773
|
+
sc->h3 = iv[3];
|
|
774
|
+
sc->h4 = iv[4];
|
|
775
|
+
sc->h5 = iv[5];
|
|
776
|
+
sc->h6 = iv[6];
|
|
777
|
+
sc->h7 = iv[7];
|
|
778
|
+
sc->bcount = 0;
|
|
779
|
+
sc->ptr = 0;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
#if 0
|
|
783
|
+
/* obsolete */
|
|
784
|
+
static void
|
|
785
|
+
skein_small_core(sph_skein_small_context *sc, const void *data, size_t len)
|
|
786
|
+
{
|
|
787
|
+
unsigned char *buf;
|
|
788
|
+
size_t ptr, clen;
|
|
789
|
+
unsigned first;
|
|
790
|
+
DECL_STATE_SMALL
|
|
791
|
+
|
|
792
|
+
buf = sc->buf;
|
|
793
|
+
ptr = sc->ptr;
|
|
794
|
+
clen = (sizeof sc->buf) - ptr;
|
|
795
|
+
if (len <= clen) {
|
|
796
|
+
memcpy(buf + ptr, data, len);
|
|
797
|
+
sc->ptr = ptr + len;
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
if (clen != 0) {
|
|
801
|
+
memcpy(buf + ptr, data, clen);
|
|
802
|
+
data = (const unsigned char *)data + clen;
|
|
803
|
+
len -= clen;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
#if SPH_SMALL_FOOTPRINT_SKEIN
|
|
807
|
+
|
|
808
|
+
READ_STATE_SMALL(sc);
|
|
809
|
+
first = (bcount == 0) << 7;
|
|
810
|
+
for (;;) {
|
|
811
|
+
bcount ++;
|
|
812
|
+
UBI_SMALL(96 + first, 0);
|
|
813
|
+
if (len <= sizeof sc->buf)
|
|
814
|
+
break;
|
|
815
|
+
first = 0;
|
|
816
|
+
memcpy(buf, data, sizeof sc->buf);
|
|
817
|
+
data = (const unsigned char *)data + sizeof sc->buf;
|
|
818
|
+
len -= sizeof sc->buf;
|
|
819
|
+
}
|
|
820
|
+
WRITE_STATE_SMALL(sc);
|
|
821
|
+
sc->ptr = len;
|
|
822
|
+
memcpy(buf, data, len);
|
|
823
|
+
|
|
824
|
+
#else
|
|
825
|
+
|
|
826
|
+
/*
|
|
827
|
+
* Unrolling the loop yields a slight performance boost, while
|
|
828
|
+
* keeping the code size aorund 24 kB on 32-bit x86.
|
|
829
|
+
*/
|
|
830
|
+
READ_STATE_SMALL(sc);
|
|
831
|
+
first = (bcount == 0) << 7;
|
|
832
|
+
for (;;) {
|
|
833
|
+
bcount ++;
|
|
834
|
+
UBI_SMALL(96 + first, 0);
|
|
835
|
+
if (len <= sizeof sc->buf)
|
|
836
|
+
break;
|
|
837
|
+
buf = (unsigned char *)data;
|
|
838
|
+
bcount ++;
|
|
839
|
+
UBI_SMALL(96, 0);
|
|
840
|
+
if (len <= 2 * sizeof sc->buf) {
|
|
841
|
+
data = buf + sizeof sc->buf;
|
|
842
|
+
len -= sizeof sc->buf;
|
|
843
|
+
break;
|
|
844
|
+
}
|
|
845
|
+
buf += sizeof sc->buf;
|
|
846
|
+
data = buf + sizeof sc->buf;
|
|
847
|
+
first = 0;
|
|
848
|
+
len -= 2 * sizeof sc->buf;
|
|
849
|
+
}
|
|
850
|
+
WRITE_STATE_SMALL(sc);
|
|
851
|
+
sc->ptr = len;
|
|
852
|
+
memcpy(sc->buf, data, len);
|
|
853
|
+
|
|
854
|
+
#endif
|
|
855
|
+
}
|
|
856
|
+
#endif
|
|
857
|
+
|
|
858
|
+
static void
|
|
859
|
+
skein_big_core(sph_skein_big_context *sc, const void *data, size_t len)
|
|
860
|
+
{
|
|
861
|
+
/*
|
|
862
|
+
* The Skein "final bit" in the tweak is troublesome here,
|
|
863
|
+
* because if the input has a length which is a multiple of the
|
|
864
|
+
* block size (512 bits) then that bit must be set for the
|
|
865
|
+
* final block, which is full of message bits (padding in
|
|
866
|
+
* Skein can be reduced to no extra bit at all). However, this
|
|
867
|
+
* function cannot know whether it processes the last chunks of
|
|
868
|
+
* the message or not. Hence we may keep a full block of buffered
|
|
869
|
+
* data (64 bytes).
|
|
870
|
+
*/
|
|
871
|
+
unsigned char *buf;
|
|
872
|
+
size_t ptr;
|
|
873
|
+
unsigned first;
|
|
874
|
+
DECL_STATE_BIG
|
|
875
|
+
|
|
876
|
+
buf = sc->buf;
|
|
877
|
+
ptr = sc->ptr;
|
|
878
|
+
if (len <= (sizeof sc->buf) - ptr) {
|
|
879
|
+
memcpy(buf + ptr, data, len);
|
|
880
|
+
ptr += len;
|
|
881
|
+
sc->ptr = ptr;
|
|
882
|
+
return;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
READ_STATE_BIG(sc);
|
|
886
|
+
first = (bcount == 0) << 7;
|
|
887
|
+
do {
|
|
888
|
+
size_t clen;
|
|
889
|
+
|
|
890
|
+
if (ptr == sizeof sc->buf) {
|
|
891
|
+
bcount ++;
|
|
892
|
+
UBI_BIG(96 + first, 0);
|
|
893
|
+
first = 0;
|
|
894
|
+
ptr = 0;
|
|
895
|
+
}
|
|
896
|
+
clen = (sizeof sc->buf) - ptr;
|
|
897
|
+
if (clen > len)
|
|
898
|
+
clen = len;
|
|
899
|
+
memcpy(buf + ptr, data, clen);
|
|
900
|
+
ptr += clen;
|
|
901
|
+
data = (const unsigned char *)data + clen;
|
|
902
|
+
len -= clen;
|
|
903
|
+
} while (len > 0);
|
|
904
|
+
WRITE_STATE_BIG(sc);
|
|
905
|
+
sc->ptr = ptr;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
#if 0
|
|
909
|
+
/* obsolete */
|
|
910
|
+
static void
|
|
911
|
+
skein_small_close(sph_skein_small_context *sc, unsigned ub, unsigned n,
|
|
912
|
+
void *dst, size_t out_len)
|
|
913
|
+
{
|
|
914
|
+
unsigned char *buf;
|
|
915
|
+
size_t ptr;
|
|
916
|
+
unsigned et;
|
|
917
|
+
int i;
|
|
918
|
+
DECL_STATE_SMALL
|
|
919
|
+
|
|
920
|
+
if (n != 0) {
|
|
921
|
+
unsigned z;
|
|
922
|
+
unsigned char x;
|
|
923
|
+
|
|
924
|
+
z = 0x80 >> n;
|
|
925
|
+
x = ((ub & -z) | z) & 0xFF;
|
|
926
|
+
skein_small_core(sc, &x, 1);
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
buf = sc->buf;
|
|
930
|
+
ptr = sc->ptr;
|
|
931
|
+
READ_STATE_SMALL(sc);
|
|
932
|
+
memset(buf + ptr, 0, (sizeof sc->buf) - ptr);
|
|
933
|
+
et = 352 + ((bcount == 0) << 7) + (n != 0);
|
|
934
|
+
for (i = 0; i < 2; i ++) {
|
|
935
|
+
UBI_SMALL(et, ptr);
|
|
936
|
+
if (i == 0) {
|
|
937
|
+
memset(buf, 0, sizeof sc->buf);
|
|
938
|
+
bcount = 0;
|
|
939
|
+
et = 510;
|
|
940
|
+
ptr = 8;
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
sph_enc64le_aligned(buf + 0, h0);
|
|
945
|
+
sph_enc64le_aligned(buf + 8, h1);
|
|
946
|
+
sph_enc64le_aligned(buf + 16, h2);
|
|
947
|
+
sph_enc64le_aligned(buf + 24, h3);
|
|
948
|
+
memcpy(dst, buf, out_len);
|
|
949
|
+
}
|
|
950
|
+
#endif
|
|
951
|
+
|
|
952
|
+
static void
|
|
953
|
+
skein_big_close(sph_skein_big_context *sc, unsigned ub, unsigned n,
|
|
954
|
+
void *dst, size_t out_len)
|
|
955
|
+
{
|
|
956
|
+
unsigned char *buf;
|
|
957
|
+
size_t ptr;
|
|
958
|
+
unsigned et;
|
|
959
|
+
int i;
|
|
960
|
+
#if SPH_SMALL_FOOTPRINT_SKEIN
|
|
961
|
+
size_t u;
|
|
962
|
+
#endif
|
|
963
|
+
DECL_STATE_BIG
|
|
964
|
+
|
|
965
|
+
/*
|
|
966
|
+
* Add bit padding if necessary.
|
|
967
|
+
*/
|
|
968
|
+
if (n != 0) {
|
|
969
|
+
unsigned z;
|
|
970
|
+
unsigned char x;
|
|
971
|
+
|
|
972
|
+
z = 0x80 >> n;
|
|
973
|
+
x = ((ub & -z) | z) & 0xFF;
|
|
974
|
+
skein_big_core(sc, &x, 1);
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
buf = sc->buf;
|
|
978
|
+
ptr = sc->ptr;
|
|
979
|
+
|
|
980
|
+
/*
|
|
981
|
+
* At that point, if ptr == 0, then the message was empty;
|
|
982
|
+
* otherwise, there is between 1 and 64 bytes (inclusive) which
|
|
983
|
+
* are yet to be processed. Either way, we complete the buffer
|
|
984
|
+
* to a full block with zeros (the Skein specification mandates
|
|
985
|
+
* that an empty message is padded so that there is at least
|
|
986
|
+
* one block to process).
|
|
987
|
+
*
|
|
988
|
+
* Once this block has been processed, we do it again, with
|
|
989
|
+
* a block full of zeros, for the output (that block contains
|
|
990
|
+
* the encoding of "0", over 8 bytes, then padded with zeros).
|
|
991
|
+
*/
|
|
992
|
+
READ_STATE_BIG(sc);
|
|
993
|
+
memset(buf + ptr, 0, (sizeof sc->buf) - ptr);
|
|
994
|
+
et = 352 + ((bcount == 0) << 7) + (n != 0);
|
|
995
|
+
for (i = 0; i < 2; i ++) {
|
|
996
|
+
UBI_BIG(et, ptr);
|
|
997
|
+
if (i == 0) {
|
|
998
|
+
memset(buf, 0, sizeof sc->buf);
|
|
999
|
+
bcount = 0;
|
|
1000
|
+
et = 510;
|
|
1001
|
+
ptr = 8;
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
#if SPH_SMALL_FOOTPRINT_SKEIN
|
|
1006
|
+
|
|
1007
|
+
/*
|
|
1008
|
+
* We use a temporary buffer because we must support the case
|
|
1009
|
+
* where output size is not a multiple of 64 (namely, a 224-bit
|
|
1010
|
+
* output).
|
|
1011
|
+
*/
|
|
1012
|
+
for (u = 0; u < out_len; u += 8)
|
|
1013
|
+
sph_enc64le_aligned(buf + u, h[u >> 3]);
|
|
1014
|
+
memcpy(dst, buf, out_len);
|
|
1015
|
+
|
|
1016
|
+
#else
|
|
1017
|
+
|
|
1018
|
+
sph_enc64le_aligned(buf + 0, h0);
|
|
1019
|
+
sph_enc64le_aligned(buf + 8, h1);
|
|
1020
|
+
sph_enc64le_aligned(buf + 16, h2);
|
|
1021
|
+
sph_enc64le_aligned(buf + 24, h3);
|
|
1022
|
+
sph_enc64le_aligned(buf + 32, h4);
|
|
1023
|
+
sph_enc64le_aligned(buf + 40, h5);
|
|
1024
|
+
sph_enc64le_aligned(buf + 48, h6);
|
|
1025
|
+
sph_enc64le_aligned(buf + 56, h7);
|
|
1026
|
+
memcpy(dst, buf, out_len);
|
|
1027
|
+
|
|
1028
|
+
#endif
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
#if 0
|
|
1032
|
+
/* obsolete */
|
|
1033
|
+
static const sph_u64 IV224[] = {
|
|
1034
|
+
SPH_C64(0xC6098A8C9AE5EA0B), SPH_C64(0x876D568608C5191C),
|
|
1035
|
+
SPH_C64(0x99CB88D7D7F53884), SPH_C64(0x384BDDB1AEDDB5DE)
|
|
1036
|
+
};
|
|
1037
|
+
|
|
1038
|
+
static const sph_u64 IV256[] = {
|
|
1039
|
+
SPH_C64(0xFC9DA860D048B449), SPH_C64(0x2FCA66479FA7D833),
|
|
1040
|
+
SPH_C64(0xB33BC3896656840F), SPH_C64(0x6A54E920FDE8DA69)
|
|
1041
|
+
};
|
|
1042
|
+
#endif
|
|
1043
|
+
|
|
1044
|
+
static const sph_u64 IV224[] = {
|
|
1045
|
+
SPH_C64(0xCCD0616248677224), SPH_C64(0xCBA65CF3A92339EF),
|
|
1046
|
+
SPH_C64(0x8CCD69D652FF4B64), SPH_C64(0x398AED7B3AB890B4),
|
|
1047
|
+
SPH_C64(0x0F59D1B1457D2BD0), SPH_C64(0x6776FE6575D4EB3D),
|
|
1048
|
+
SPH_C64(0x99FBC70E997413E9), SPH_C64(0x9E2CFCCFE1C41EF7)
|
|
1049
|
+
};
|
|
1050
|
+
|
|
1051
|
+
static const sph_u64 IV256[] = {
|
|
1052
|
+
SPH_C64(0xCCD044A12FDB3E13), SPH_C64(0xE83590301A79A9EB),
|
|
1053
|
+
SPH_C64(0x55AEA0614F816E6F), SPH_C64(0x2A2767A4AE9B94DB),
|
|
1054
|
+
SPH_C64(0xEC06025E74DD7683), SPH_C64(0xE7A436CDC4746251),
|
|
1055
|
+
SPH_C64(0xC36FBAF9393AD185), SPH_C64(0x3EEDBA1833EDFC13)
|
|
1056
|
+
};
|
|
1057
|
+
|
|
1058
|
+
static const sph_u64 IV384[] = {
|
|
1059
|
+
SPH_C64(0xA3F6C6BF3A75EF5F), SPH_C64(0xB0FEF9CCFD84FAA4),
|
|
1060
|
+
SPH_C64(0x9D77DD663D770CFE), SPH_C64(0xD798CBF3B468FDDA),
|
|
1061
|
+
SPH_C64(0x1BC4A6668A0E4465), SPH_C64(0x7ED7D434E5807407),
|
|
1062
|
+
SPH_C64(0x548FC1ACD4EC44D6), SPH_C64(0x266E17546AA18FF8)
|
|
1063
|
+
};
|
|
1064
|
+
|
|
1065
|
+
static const sph_u64 IV512[] = {
|
|
1066
|
+
SPH_C64(0x4903ADFF749C51CE), SPH_C64(0x0D95DE399746DF03),
|
|
1067
|
+
SPH_C64(0x8FD1934127C79BCE), SPH_C64(0x9A255629FF352CB1),
|
|
1068
|
+
SPH_C64(0x5DB62599DF6CA7B0), SPH_C64(0xEABE394CA9D5C3F4),
|
|
1069
|
+
SPH_C64(0x991112C71A75B523), SPH_C64(0xAE18A40B660FCC33)
|
|
1070
|
+
};
|
|
1071
|
+
|
|
1072
|
+
#if 0
|
|
1073
|
+
/* obsolete */
|
|
1074
|
+
/* see sph_skein.h */
|
|
1075
|
+
void
|
|
1076
|
+
sph_skein224_init(void *cc)
|
|
1077
|
+
{
|
|
1078
|
+
skein_small_init(cc, IV224);
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
/* see sph_skein.h */
|
|
1082
|
+
void
|
|
1083
|
+
sph_skein224(void *cc, const void *data, size_t len)
|
|
1084
|
+
{
|
|
1085
|
+
skein_small_core(cc, data, len);
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
/* see sph_skein.h */
|
|
1089
|
+
void
|
|
1090
|
+
sph_skein224_close(void *cc, void *dst)
|
|
1091
|
+
{
|
|
1092
|
+
sph_skein224_addbits_and_close(cc, 0, 0, dst);
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
/* see sph_skein.h */
|
|
1096
|
+
void
|
|
1097
|
+
sph_skein224_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
|
|
1098
|
+
{
|
|
1099
|
+
skein_small_close(cc, ub, n, dst, 28);
|
|
1100
|
+
sph_skein224_init(cc);
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
/* see sph_skein.h */
|
|
1104
|
+
void
|
|
1105
|
+
sph_skein256_init(void *cc)
|
|
1106
|
+
{
|
|
1107
|
+
skein_small_init(cc, IV256);
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
/* see sph_skein.h */
|
|
1111
|
+
void
|
|
1112
|
+
sph_skein256(void *cc, const void *data, size_t len)
|
|
1113
|
+
{
|
|
1114
|
+
skein_small_core(cc, data, len);
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
/* see sph_skein.h */
|
|
1118
|
+
void
|
|
1119
|
+
sph_skein256_close(void *cc, void *dst)
|
|
1120
|
+
{
|
|
1121
|
+
sph_skein256_addbits_and_close(cc, 0, 0, dst);
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
/* see sph_skein.h */
|
|
1125
|
+
void
|
|
1126
|
+
sph_skein256_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
|
|
1127
|
+
{
|
|
1128
|
+
skein_small_close(cc, ub, n, dst, 32);
|
|
1129
|
+
sph_skein256_init(cc);
|
|
1130
|
+
}
|
|
1131
|
+
#endif
|
|
1132
|
+
|
|
1133
|
+
/* see sph_skein.h */
|
|
1134
|
+
void
|
|
1135
|
+
sph_skein224_init(void *cc)
|
|
1136
|
+
{
|
|
1137
|
+
skein_big_init(cc, IV224);
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
/* see sph_skein.h */
|
|
1141
|
+
void
|
|
1142
|
+
sph_skein224(void *cc, const void *data, size_t len)
|
|
1143
|
+
{
|
|
1144
|
+
skein_big_core(cc, data, len);
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
/* see sph_skein.h */
|
|
1148
|
+
void
|
|
1149
|
+
sph_skein224_close(void *cc, void *dst)
|
|
1150
|
+
{
|
|
1151
|
+
sph_skein224_addbits_and_close(cc, 0, 0, dst);
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
/* see sph_skein.h */
|
|
1155
|
+
void
|
|
1156
|
+
sph_skein224_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
|
|
1157
|
+
{
|
|
1158
|
+
skein_big_close(cc, ub, n, dst, 28);
|
|
1159
|
+
sph_skein224_init(cc);
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
/* see sph_skein.h */
|
|
1163
|
+
void
|
|
1164
|
+
sph_skein256_init(void *cc)
|
|
1165
|
+
{
|
|
1166
|
+
skein_big_init(cc, IV256);
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
/* see sph_skein.h */
|
|
1170
|
+
void
|
|
1171
|
+
sph_skein256(void *cc, const void *data, size_t len)
|
|
1172
|
+
{
|
|
1173
|
+
skein_big_core(cc, data, len);
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
/* see sph_skein.h */
|
|
1177
|
+
void
|
|
1178
|
+
sph_skein256_close(void *cc, void *dst)
|
|
1179
|
+
{
|
|
1180
|
+
sph_skein256_addbits_and_close(cc, 0, 0, dst);
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
/* see sph_skein.h */
|
|
1184
|
+
void
|
|
1185
|
+
sph_skein256_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
|
|
1186
|
+
{
|
|
1187
|
+
skein_big_close(cc, ub, n, dst, 32);
|
|
1188
|
+
sph_skein256_init(cc);
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
/* see sph_skein.h */
|
|
1192
|
+
void
|
|
1193
|
+
sph_skein384_init(void *cc)
|
|
1194
|
+
{
|
|
1195
|
+
skein_big_init(cc, IV384);
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
/* see sph_skein.h */
|
|
1199
|
+
void
|
|
1200
|
+
sph_skein384(void *cc, const void *data, size_t len)
|
|
1201
|
+
{
|
|
1202
|
+
skein_big_core(cc, data, len);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
/* see sph_skein.h */
|
|
1206
|
+
void
|
|
1207
|
+
sph_skein384_close(void *cc, void *dst)
|
|
1208
|
+
{
|
|
1209
|
+
sph_skein384_addbits_and_close(cc, 0, 0, dst);
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
/* see sph_skein.h */
|
|
1213
|
+
void
|
|
1214
|
+
sph_skein384_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
|
|
1215
|
+
{
|
|
1216
|
+
skein_big_close(cc, ub, n, dst, 48);
|
|
1217
|
+
sph_skein384_init(cc);
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
/* see sph_skein.h */
|
|
1221
|
+
void
|
|
1222
|
+
sph_skein512_init(void *cc)
|
|
1223
|
+
{
|
|
1224
|
+
skein_big_init(cc, IV512);
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
/* see sph_skein.h */
|
|
1228
|
+
void
|
|
1229
|
+
sph_skein512(void *cc, const void *data, size_t len)
|
|
1230
|
+
{
|
|
1231
|
+
skein_big_core(cc, data, len);
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
/* see sph_skein.h */
|
|
1235
|
+
void
|
|
1236
|
+
sph_skein512_close(void *cc, void *dst)
|
|
1237
|
+
{
|
|
1238
|
+
sph_skein512_addbits_and_close(cc, 0, 0, dst);
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
/* see sph_skein.h */
|
|
1242
|
+
void
|
|
1243
|
+
sph_skein512_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
|
|
1244
|
+
{
|
|
1245
|
+
skein_big_close(cc, ub, n, dst, 64);
|
|
1246
|
+
sph_skein512_init(cc);
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
#endif
|
|
1250
|
+
|
|
1251
|
+
|
|
1252
|
+
#ifdef __cplusplus
|
|
1253
|
+
}
|
|
1254
|
+
#endif
|