sha3-ruby 0.0.1
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.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +7 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakCompact.vcproj +207 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakCompact8.vcproj +207 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakInplace.vcproj +203 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakInplace32BI.vcproj +201 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakOptimized32.vcproj +267 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakOptimized64.vcproj +267 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakReference.vcproj +243 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakReference32BI.vcproj +243 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakReferenceAndOptimized.sln +62 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakSimple.vcproj +203 -0
- data/ext/sha3/KeccakReferenceAndOptimized/KeccakSimple32BI.vcproj +201 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/AVR8-rotate64.h +27 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/AVR8-rotate64.s +285 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-avr8-settings.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-avr8-test.c +142 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-avr8-util.h +15 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-avr8-util.s +119 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-avr8.c +184 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-avr8.h +25 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-compact-settings.h +3 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-compact-test.c +317 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-compact.c +341 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-compact.h +50 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-compact8-settings.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-compact8-test.c +192 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-compact8.c +375 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-compact8.h +47 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-crypto_hash-inplace-armgcc-ARMv7A-NEON.s +406 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-inplace-minimal-test.c +231 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-inplace-settings.h +3 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-inplace-test.c +221 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-inplace.c +445 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-inplace32BI-armgcc-ARMv6M.s +844 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-inplace32BI-armgcc-ARMv7A.s +687 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-inplace32BI-armgcc-ARMv7M.s +687 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-inplace32BI.c +849 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-simple-settings.h +3 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-simple-test.c +221 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-simple.c +403 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccak-simple32BI.c +673 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakDuplex.c +68 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakDuplex.h +59 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-32-rvk.macros +555 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-32-s1.macros +1187 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-32-s2.macros +1187 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-32.macros +26 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-64.macros +728 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-arm.c +123 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-armcc.s +653 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-armgcc.s +686 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-avr8.c +163 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-avr8asm-compact.s +647 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-avr8asm-fast.s +934 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-inplace-armgcc-ARMv7A-NEON.s +446 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-int-set.h +6 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-interface.h +46 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-opt32-settings.h +4 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-opt32.c +524 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-opt64-settings.h +7 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-opt64.c +504 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-reference.c +300 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-reference.h +20 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-reference.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-reference32BI.c +371 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-simd128.macros +651 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-simd64.macros +517 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-unrolling.macros +124 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-x86-64-asm.c +62 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-x86-64-gas.s +766 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-x86-64-shld-gas.s +766 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakF-1600-xop.macros +573 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakNISTInterface.c +81 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakNISTInterface.h +70 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakNISTInterface.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakSponge.c +266 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakSponge.h +76 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/KeccakSponge.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccakc1024-crypto_hash-inplace-armgcc-ARMv7A-NEON.s +296 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/Keccakc512-crypto_hash-inplace-armgcc-ARMv7A-NEON.s +429 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/brg_endian.h +142 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/crypto_hash.h +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/displayIntermediateValues.c +117 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/displayIntermediateValues.h +29 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/displayIntermediateValues.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/genKAT.c +692 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/mainARM.c +88 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/mainOptimized.c +23 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/mainReference.c +381 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/timing.c +436 -0
- data/ext/sha3/KeccakReferenceAndOptimized/Sources/timing.h +13 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/DoublePermutation-config.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/DoublePermutation.c +572 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/DoublePermutation.h +38 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/KeccakF-1600-unrolling.macros +124 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/Keccakc256TreeD2.c +81 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/Keccakc256TreeD2.h +18 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/Keccakc512TreeD2.c +81 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/Keccakc512TreeD2.h +18 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/crypto_hash.h +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/mainOptimized.c +112 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/timing-Double.c +225 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/Sources/timing-Double.h +20 -0
- data/ext/sha3/KeccakReferenceAndOptimized/TreeHashing/makefile +68 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/KeccakCompact +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/KeccakOptimized32 +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/KeccakOptimized64 +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/KeccakReference +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/KeccakReference32BI +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/KeccakSimple +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/KeccakSimple32BI +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/compact/Keccak-compact-test.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/compact/Keccak-compact.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized32/KeccakDuplex.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized32/KeccakF-1600-opt32.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized32/KeccakNISTInterface.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized32/KeccakSponge.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized32/genKAT.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized32/mainOptimized.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized32/timing.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized64/KeccakDuplex.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized64/KeccakF-1600-opt64.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized64/KeccakNISTInterface.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized64/KeccakSponge.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized64/genKAT.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized64/mainOptimized.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/optimized64/timing.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference/KeccakDuplex.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference/KeccakF-1600-reference.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference/KeccakNISTInterface.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference/KeccakSponge.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference/displayIntermediateValues.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference/genKAT.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference/mainReference.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference32bi/KeccakDuplex.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference32bi/KeccakF-1600-reference32BI.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference32bi/KeccakNISTInterface.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference32bi/KeccakSponge.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference32bi/displayIntermediateValues.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference32bi/genKAT.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/reference32bi/mainReference.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/simple/Keccak-simple-test.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/simple/Keccak-simple.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/simple32BI/Keccak-simple-test.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/bin/simple32BI/Keccak-simple32BI.o +0 -0
- data/ext/sha3/KeccakReferenceAndOptimized/compile64.bat +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/checksum-keccak +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/checksum-keccakc1024 +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/checksum-keccakc256 +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/checksum-keccakc256treed2 +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/checksum-keccakc448 +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/checksum-keccakc512 +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/checksum-keccakc512treed2 +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/checksum-keccakc768 +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/hash-keccak.c +11 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/hash-keccakc1024.c +11 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/hash-keccakc256.c +11 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/hash-keccakc448.c +11 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/hash-keccakc512.c +11 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/hash-keccakc768.c +11 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/int-set-keccak.h +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/int-set-keccakc1024.h +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/int-set-keccakc256.h +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/int-set-keccakc448.h +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/int-set-keccakc512.h +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/int-set-keccakc768.h +1 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/populate.py +506 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/simple-keccak.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/simple-keccakc1024.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/simple-keccakc256.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/simple-keccakc448.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/simple-keccakc512.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/eBASH/simple-keccakc768.h +2 -0
- data/ext/sha3/KeccakReferenceAndOptimized/makefile +327 -0
- data/ext/sha3/Makefile +240 -0
- data/ext/sha3/depend +28 -0
- data/ext/sha3/extconf.rb +21 -0
- data/ext/sha3/sha3.c +95 -0
- data/lib/sha3-ruby.rb +27 -0
- data/lib/sha3-ruby/version.rb +5 -0
- data/sha3-ruby.gemspec +21 -0
- metadata +233 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The Keccak sponge function, designed by Guido Bertoni, Joan Daemen,
|
|
3
|
+
Michaël Peeters and Gilles Van Assche. For more information, feedback or
|
|
4
|
+
questions, please refer to our website: http://keccak.noekeon.org/
|
|
5
|
+
|
|
6
|
+
Implementation by the designers,
|
|
7
|
+
hereby denoted as "the implementer".
|
|
8
|
+
|
|
9
|
+
To the extent possible under law, the implementer has waived all copyright
|
|
10
|
+
and related or neighboring rights to the source code in this file.
|
|
11
|
+
http://creativecommons.org/publicdomain/zero/1.0/
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
#include <stdio.h>
|
|
15
|
+
|
|
16
|
+
/************** Timing routine (for performance measurements) ***********/
|
|
17
|
+
/* By Doug Whiting */
|
|
18
|
+
/* unfortunately, this is generally assembly code and not very portable */
|
|
19
|
+
#if defined(_M_IX86) || defined(__i386) || defined(_i386) || defined(__i386__) || defined(i386) || \
|
|
20
|
+
defined(_X86_) || defined(__x86_64__) || defined(_M_X64) || defined(__x86_64)
|
|
21
|
+
#define _Is_X86_ 1
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
#if defined(_Is_X86_) && (!defined(__STRICT_ANSI__)) && (defined(__GNUC__) || !defined(__STDC__)) && \
|
|
25
|
+
(defined(__BORLANDC__) || defined(_MSC_VER) || defined(__MINGW_H) || defined(__GNUC__))
|
|
26
|
+
#define HI_RES_CLK_OK 1 /* it's ok to use RDTSC opcode */
|
|
27
|
+
|
|
28
|
+
#if defined(_MSC_VER) // && defined(_M_X64)
|
|
29
|
+
#include <intrin.h>
|
|
30
|
+
#pragma intrinsic(__rdtsc) /* use MSVC rdtsc call where defined */
|
|
31
|
+
#endif
|
|
32
|
+
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
typedef unsigned int uint_32t;
|
|
36
|
+
|
|
37
|
+
uint_32t HiResTime(void) /* return the current value of time stamp counter */
|
|
38
|
+
{
|
|
39
|
+
#if defined(HI_RES_CLK_OK)
|
|
40
|
+
uint_32t x[2];
|
|
41
|
+
#if defined(__BORLANDC__)
|
|
42
|
+
#define COMPILER_ID "BCC"
|
|
43
|
+
__emit__(0x0F,0x31); /* RDTSC instruction */
|
|
44
|
+
_asm { mov x[0],eax };
|
|
45
|
+
#elif defined(_MSC_VER)
|
|
46
|
+
#define COMPILER_ID "MSC"
|
|
47
|
+
#if defined(_MSC_VER) // && defined(_M_X64)
|
|
48
|
+
x[0] = (uint_32t) __rdtsc();
|
|
49
|
+
#else
|
|
50
|
+
_asm { _emit 0fh }; _asm { _emit 031h };
|
|
51
|
+
_asm { mov x[0],eax };
|
|
52
|
+
#endif
|
|
53
|
+
#elif defined(__MINGW_H) || defined(__GNUC__)
|
|
54
|
+
#define COMPILER_ID "GCC"
|
|
55
|
+
asm volatile("rdtsc" : "=a"(x[0]), "=d"(x[1]));
|
|
56
|
+
#else
|
|
57
|
+
#error "HI_RES_CLK_OK -- but no assembler code for this platform (?)"
|
|
58
|
+
#endif
|
|
59
|
+
return x[0];
|
|
60
|
+
#else
|
|
61
|
+
/* avoid annoying MSVC 9.0 compiler warning #4720 in ANSI mode! */
|
|
62
|
+
#if (!defined(_MSC_VER)) || (!defined(__STDC__)) || (_MSC_VER < 1300)
|
|
63
|
+
FatalError("No support for RDTSC on this CPU platform\n");
|
|
64
|
+
#endif
|
|
65
|
+
return 0;
|
|
66
|
+
#endif /* defined(HI_RES_CLK_OK) */
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
#define TIMER_SAMPLE_CNT (10)
|
|
70
|
+
|
|
71
|
+
uint_32t calibrate()
|
|
72
|
+
{
|
|
73
|
+
uint_32t dtMin = 0xFFFFFFFF; /* big number to start */
|
|
74
|
+
uint_32t t0,t1,i;
|
|
75
|
+
|
|
76
|
+
for (i=0;i < TIMER_SAMPLE_CNT;i++) /* calibrate the overhead for measuring time */
|
|
77
|
+
{
|
|
78
|
+
t0 = HiResTime();
|
|
79
|
+
t1 = HiResTime();
|
|
80
|
+
if (dtMin > t1-t0) /* keep only the minimum time */
|
|
81
|
+
dtMin = t1-t0;
|
|
82
|
+
}
|
|
83
|
+
return dtMin;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
#include "DoublePermutation.h"
|
|
87
|
+
|
|
88
|
+
uint_32t measureDoubleKeccakAbsorb1344bits(uint_32t dtMin)
|
|
89
|
+
{
|
|
90
|
+
uint_32t tMin = 0xFFFFFFFF; /* big number to start */
|
|
91
|
+
uint_32t t0,t1,i;
|
|
92
|
+
ALIGN unsigned char state[KeccakPermutationSizeInBytes*2];
|
|
93
|
+
ALIGN unsigned char input[168*2];
|
|
94
|
+
|
|
95
|
+
for (i=0;i < TIMER_SAMPLE_CNT;i++) /* calibrate the overhead for measuring time */
|
|
96
|
+
{
|
|
97
|
+
t0 = HiResTime();
|
|
98
|
+
KeccakDoublePermutationOnWordsAfterXoring2x1344bits((V128*)state, (V128*)input);
|
|
99
|
+
t1 = HiResTime();
|
|
100
|
+
if (tMin > t1-t0 - dtMin) /* keep only the minimum time */
|
|
101
|
+
tMin = t1-t0 - dtMin;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* now tMin = # clocks required for running RoutineToBeTimed() */
|
|
105
|
+
|
|
106
|
+
return tMin;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
uint_32t measureDoubleKeccakAbsorb1088bits(uint_32t dtMin)
|
|
110
|
+
{
|
|
111
|
+
uint_32t tMin = 0xFFFFFFFF; /* big number to start */
|
|
112
|
+
uint_32t t0,t1,i;
|
|
113
|
+
ALIGN unsigned char state[KeccakPermutationSizeInBytes*2];
|
|
114
|
+
ALIGN unsigned char input[136*2];
|
|
115
|
+
|
|
116
|
+
for (i=0;i < TIMER_SAMPLE_CNT;i++) /* calibrate the overhead for measuring time */
|
|
117
|
+
{
|
|
118
|
+
t0 = HiResTime();
|
|
119
|
+
KeccakDoublePermutationOnWordsAfterXoring2x1088bits((V128*)state, (V128*)input);
|
|
120
|
+
t1 = HiResTime();
|
|
121
|
+
if (tMin > t1-t0 - dtMin) /* keep only the minimum time */
|
|
122
|
+
tMin = t1-t0 - dtMin;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* now tMin = # clocks required for running RoutineToBeTimed() */
|
|
126
|
+
|
|
127
|
+
return tMin;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
uint_32t measureDoubleKeccakAbsorb1024bits(uint_32t dtMin)
|
|
131
|
+
{
|
|
132
|
+
uint_32t tMin = 0xFFFFFFFF; /* big number to start */
|
|
133
|
+
uint_32t t0,t1,i;
|
|
134
|
+
ALIGN unsigned char state[KeccakPermutationSizeInBytes*2];
|
|
135
|
+
ALIGN unsigned char input[128*2];
|
|
136
|
+
|
|
137
|
+
for (i=0;i < TIMER_SAMPLE_CNT;i++) /* calibrate the overhead for measuring time */
|
|
138
|
+
{
|
|
139
|
+
t0 = HiResTime();
|
|
140
|
+
KeccakDoublePermutationOnWordsAfterXoring2x1024bits((V128*)state, (V128*)input);
|
|
141
|
+
t1 = HiResTime();
|
|
142
|
+
if (tMin > t1-t0 - dtMin) /* keep only the minimum time */
|
|
143
|
+
tMin = t1-t0 - dtMin;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* now tMin = # clocks required for running RoutineToBeTimed() */
|
|
147
|
+
|
|
148
|
+
return tMin;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
uint_32t measureDoubleKeccakAbsorb512bits(uint_32t dtMin)
|
|
152
|
+
{
|
|
153
|
+
uint_32t tMin = 0xFFFFFFFF; /* big number to start */
|
|
154
|
+
uint_32t t0,t1,i;
|
|
155
|
+
ALIGN unsigned char state[KeccakPermutationSizeInBytes*2];
|
|
156
|
+
ALIGN unsigned char input[64*2];
|
|
157
|
+
|
|
158
|
+
for (i=0;i < TIMER_SAMPLE_CNT;i++) /* calibrate the overhead for measuring time */
|
|
159
|
+
{
|
|
160
|
+
t0 = HiResTime();
|
|
161
|
+
KeccakDoublePermutationOnWordsAfterXoring2x512bits((V128*)state, (V128*)input);
|
|
162
|
+
t1 = HiResTime();
|
|
163
|
+
if (tMin > t1-t0 - dtMin) /* keep only the minimum time */
|
|
164
|
+
tMin = t1-t0 - dtMin;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* now tMin = # clocks required for running RoutineToBeTimed() */
|
|
168
|
+
|
|
169
|
+
return tMin;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
uint_32t measureDoubleKeccakPermutation(uint_32t dtMin)
|
|
173
|
+
{
|
|
174
|
+
uint_32t tMin = 0xFFFFFFFF; /* big number to start */
|
|
175
|
+
uint_32t t0,t1,i;
|
|
176
|
+
ALIGN unsigned char state[KeccakPermutationSizeInBytes*2];
|
|
177
|
+
|
|
178
|
+
for (i=0;i < TIMER_SAMPLE_CNT;i++) /* calibrate the overhead for measuring time */
|
|
179
|
+
{
|
|
180
|
+
t0 = HiResTime();
|
|
181
|
+
KeccakDoublePermutationOnWords((V128*)state);
|
|
182
|
+
t1 = HiResTime();
|
|
183
|
+
if (tMin > t1-t0 - dtMin) /* keep only the minimum time */
|
|
184
|
+
tMin = t1-t0 - dtMin;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* now tMin = # clocks required for running RoutineToBeTimed() */
|
|
188
|
+
|
|
189
|
+
return tMin;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
void doTiming()
|
|
195
|
+
{
|
|
196
|
+
uint_32t calibration;
|
|
197
|
+
uint_32t measurementDoubleKeccakPermutation;
|
|
198
|
+
uint_32t measurementDoubleKeccakAbsorb1344bits;
|
|
199
|
+
uint_32t measurementDoubleKeccakAbsorb1088bits;
|
|
200
|
+
uint_32t measurementDoubleKeccakAbsorb1024bits;
|
|
201
|
+
|
|
202
|
+
calibration = calibrate();
|
|
203
|
+
|
|
204
|
+
measurementDoubleKeccakPermutation = measureDoubleKeccakPermutation(calibration);
|
|
205
|
+
printf("Cycles for DoubleKeccakPermutation(state): %d\n", measurementDoubleKeccakPermutation);
|
|
206
|
+
printf("Cycles per byte for rate 1024: %f\n", measurementDoubleKeccakPermutation/128.0/2.0);
|
|
207
|
+
printf("Cycles per byte for rate 1088: %f\n", measurementDoubleKeccakPermutation/136.0/2.0);
|
|
208
|
+
printf("Cycles per byte for rate 1344: %f\n", measurementDoubleKeccakPermutation/168.0/2.0);
|
|
209
|
+
printf("\n");
|
|
210
|
+
|
|
211
|
+
measurementDoubleKeccakAbsorb1344bits = measureDoubleKeccakAbsorb1344bits(calibration);
|
|
212
|
+
printf("Cycles for DoubleKeccakAbsorb1344bits(state, input): %d\n", measurementDoubleKeccakAbsorb1344bits);
|
|
213
|
+
printf("Cycles per byte for rate 1344: %f\n", measurementDoubleKeccakAbsorb1344bits/168.0/2.0);
|
|
214
|
+
printf("\n");
|
|
215
|
+
|
|
216
|
+
measurementDoubleKeccakAbsorb1088bits = measureDoubleKeccakAbsorb1088bits(calibration);
|
|
217
|
+
printf("Cycles for DoubleKeccakAbsorb1088bits(state, input): %d\n", measurementDoubleKeccakAbsorb1088bits);
|
|
218
|
+
printf("Cycles per byte for rate 1088: %f\n", measurementDoubleKeccakAbsorb1088bits/136.0/2.0);
|
|
219
|
+
printf("\n");
|
|
220
|
+
|
|
221
|
+
measurementDoubleKeccakAbsorb1024bits = measureDoubleKeccakAbsorb1024bits(calibration);
|
|
222
|
+
printf("Cycles for DoubleKeccakAbsorb1024bits(state, input): %d\n", measurementDoubleKeccakAbsorb1024bits);
|
|
223
|
+
printf("Cycles per byte for rate 1024: %f\n", measurementDoubleKeccakAbsorb1024bits/128.0/2.0);
|
|
224
|
+
printf("\n");
|
|
225
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The Keccak sponge function, designed by Guido Bertoni, Joan Daemen,
|
|
3
|
+
Michaël Peeters and Gilles Van Assche. For more information, feedback or
|
|
4
|
+
questions, please refer to our website: http://keccak.noekeon.org/
|
|
5
|
+
|
|
6
|
+
Implementation by the designers,
|
|
7
|
+
hereby denoted as "the implementer".
|
|
8
|
+
|
|
9
|
+
To the extent possible under law, the implementer has waived all copyright
|
|
10
|
+
and related or neighboring rights to the source code in this file.
|
|
11
|
+
http://creativecommons.org/publicdomain/zero/1.0/
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
#ifndef _timing_h_
|
|
15
|
+
#define _timing_h_
|
|
16
|
+
|
|
17
|
+
void doTiming();
|
|
18
|
+
|
|
19
|
+
#endif
|
|
20
|
+
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
all: Keccakc256TreeD2 Keccakc512TreeD2
|
|
2
|
+
|
|
3
|
+
SOURCES_D2 = \
|
|
4
|
+
Sources/mainOptimized.c \
|
|
5
|
+
Sources/timing-Double.c \
|
|
6
|
+
Sources/DoublePermutation.c
|
|
7
|
+
|
|
8
|
+
HEADERS_D2 = \
|
|
9
|
+
Sources/timing-Double.h \
|
|
10
|
+
Sources/KeccakF-1600-unrolling.macros \
|
|
11
|
+
Sources/DoublePermutation.h
|
|
12
|
+
|
|
13
|
+
SOURCES_c256D2 = $(SOURCES_D2) \
|
|
14
|
+
Sources/Keccakc256TreeD2.c
|
|
15
|
+
|
|
16
|
+
SOURCES_c512D2 = $(SOURCES_D2) \
|
|
17
|
+
Sources/Keccakc512TreeD2.c
|
|
18
|
+
|
|
19
|
+
HEADERS_c256D2 = $(HEADERS_D2) \
|
|
20
|
+
Sources/Keccakc256TreeD2.h
|
|
21
|
+
|
|
22
|
+
HEADERS_c512D2 = $(HEADERS_D2) \
|
|
23
|
+
Sources/Keccakc512TreeD2.h
|
|
24
|
+
|
|
25
|
+
BINDIR_c256D2 = bin/c256D2
|
|
26
|
+
|
|
27
|
+
$(BINDIR_c256D2):
|
|
28
|
+
mkdir -p $(BINDIR_c256D2)
|
|
29
|
+
|
|
30
|
+
OBJECTS_c256D2 = $(addprefix $(BINDIR_c256D2)/, $(notdir $(patsubst %.c,%.o,$(SOURCES_c256D2))))
|
|
31
|
+
|
|
32
|
+
CFLAGS_c256D2 = -Dc256 -DD2 -fomit-frame-pointer -O3 -g0 -march=native -mtune=native
|
|
33
|
+
|
|
34
|
+
BINDIR_c512D2 = bin/c512D2
|
|
35
|
+
|
|
36
|
+
$(BINDIR_c512D2):
|
|
37
|
+
mkdir -p $(BINDIR_c512D2)
|
|
38
|
+
|
|
39
|
+
OBJECTS_c512D2 = $(addprefix $(BINDIR_c512D2)/, $(notdir $(patsubst %.c,%.o,$(SOURCES_c512D2))))
|
|
40
|
+
|
|
41
|
+
CFLAGS_c512D2 = -Dc512 -DD2 -fomit-frame-pointer -O3 -g0 -march=native -mtune=native
|
|
42
|
+
|
|
43
|
+
VPATH = Sources
|
|
44
|
+
|
|
45
|
+
INCLUDES = -ISources
|
|
46
|
+
|
|
47
|
+
$(BINDIR_c256D2)/%.o:%.c $(HEADERS_c256D2)
|
|
48
|
+
$(CC) $(INCLUDES) $(CFLAGS_c256D2) -c $< -o $@
|
|
49
|
+
|
|
50
|
+
$(BINDIR_c512D2)/%.o:%.c $(HEADERS_c512D2)
|
|
51
|
+
$(CC) $(INCLUDES) $(CFLAGS_c512D2) -c $< -o $@
|
|
52
|
+
|
|
53
|
+
.PHONY: Keccakc256TreeD2 Keccakc512TreeD2
|
|
54
|
+
|
|
55
|
+
Keccakc256TreeD2: bin/Keccakc256TreeD2
|
|
56
|
+
|
|
57
|
+
bin/Keccakc256TreeD2: $(BINDIR_c256D2) $(OBJECTS_c256D2) $(HEADERS_c256D2)
|
|
58
|
+
$(CC) $(CFLAGS_c256D2) -o $@ $(OBJECTS_c256D2)
|
|
59
|
+
|
|
60
|
+
Keccakc512TreeD2: bin/Keccakc512TreeD2
|
|
61
|
+
|
|
62
|
+
bin/Keccakc512TreeD2: $(BINDIR_c512D2) $(OBJECTS_c512D2) $(HEADERS_c512D2)
|
|
63
|
+
$(CC) $(CFLAGS_c512D2) -o $@ $(OBJECTS_c512D2)
|
|
64
|
+
|
|
65
|
+
.PHONY: clean
|
|
66
|
+
|
|
67
|
+
clean:
|
|
68
|
+
rm -rf bin/
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
cl.exe Sources\mainOptimized.c Sources\genKAT.c Sources\KeccakDuplex.c Sources\KeccakF-1600-opt64.c Sources\KeccakNISTInterface.c Sources\KeccakSponge.c Sources\timing.c /O2 /Ot /favor:INTEL64
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b81e02441c494c66e2a45cd1cd6ce40721eae5126523b1c4586cab9be9e0ccf23c3eac48edcce8ce7c587762817e213a44c6d85bf14b259fda5107cb96b298f175765f5684a86933d775d13ea2665940082740ad94d5cd006878e44ff0801c35e65e5a80b5ebb9ff6b4c44177667d2a3c68c73e7777eeba14738bb1d9ba673d4
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
9b820a6ad49da5a2359566919b6d987d58eca84888c2123363ee57a932326449c8ca6bb9c3fb9f3be8364bf6ef3c2522140d92d636df0f580beeb381bc46491c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
58f992ee3a30041c7b5987ce169be4e18a8096bbb00c8794f377dff6bfedc76f4b11bc516d906b34062bf253a25e295d1f70addd94469bdf56268c19210639949c4821d83b78679168f582d31d7e942ebb297139f04595f1381942d03453779f477083075c6679819786e920069803af1359dfb78a1723638dcbea18ac80d3f1e1cd22b2e60accb25cc78f67e203372fb8fb2d3929cb95812622db2822ae8db951b675480a93273a
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
fe523291a13a5d4a395b11b922f5f0b99ec186097a9cbc2bfbef7b0aa03551adaaf1cd4651c7a675b9d3f9fd4e844572c716e50fed42feaede27b744b08950e5010700589513523a87a283c6c124032f77e1f18abfca2a046ae3c5aca543f9491037bab12ab1d58ab3d735680c543bb55d5759a949ca71b407ff27a2ce79de7853429b5264aa351397175fbe1e9ec784414ae4af270b88b8b011a54cea61ad3308cec8ef5ad96cc7
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
f96de427ccfc25f1ec48311b7bbbf00d8c5dbd25be1e91c1bd170562
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ef4c3a6ae3c066643e3132da983f4e6ae4e15d222225d06c9fd5a2c4c794501c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
689ae4bd325cb0744ebc4a18ae565608fe6d3cf716196ab951afed2fe4fadbc1e204c73a869ebecf7ba9482401a2be0815ea7d728fec4a06961e35dcdbab4332fd6a0efcded7103e906cf3faa4b0a15bb6aa6172dccd01a566ddcda2f54ed78826400429fa20673002edbe0d5ee1e2d1741915e695b93778e6914d1d1065a1a1817af7d599bfd73d
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1dcf9ddf8ca2d0df093c215224bff74fe6e41e1fbda16a5aa076f4efdfa27aa43aca5001b79a69083449d39b22c593e5
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#include "crypto_hash.h"
|
|
2
|
+
#include "KeccakSponge.h"
|
|
3
|
+
|
|
4
|
+
int crypto_hash(unsigned char *out, const unsigned char *in, unsigned long long inlen)
|
|
5
|
+
{
|
|
6
|
+
spongeState state;
|
|
7
|
+
InitSponge(&state, 1024, 576);
|
|
8
|
+
Absorb(&state, in, inlen*8);
|
|
9
|
+
Squeeze(&state, out, crypto_hash_BYTES*8);
|
|
10
|
+
return 0;
|
|
11
|
+
}
|