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,687 @@
|
|
|
1
|
+
@ The Keccak sponge function, designed by Guido Bertoni, Joan Daemen,
|
|
2
|
+
@ Michaël Peeters and Gilles Van Assche. For more information, feedback or
|
|
3
|
+
@ questions, please refer to our website: http://keccak.noekeon.org/
|
|
4
|
+
@
|
|
5
|
+
@ Implementation by Ronny Van Keer, hereby denoted as "the implementer".
|
|
6
|
+
@
|
|
7
|
+
@ To the extent possible under law, the implementer has waived all copyright
|
|
8
|
+
@ and related or neighboring rights to the source code in this file.
|
|
9
|
+
@ http://creativecommons.org/publicdomain/zero/1.0/
|
|
10
|
+
|
|
11
|
+
@ This file was created from a .asm file
|
|
12
|
+
@ using the ads2gas.pl script.
|
|
13
|
+
.equ DO1STROUNDING, 0
|
|
14
|
+
|
|
15
|
+
@ PRESERVE8
|
|
16
|
+
.text
|
|
17
|
+
|
|
18
|
+
@// --- defines
|
|
19
|
+
.equ cKeccakLaneSizeInBytes, 8
|
|
20
|
+
.equ cKeccakR_SizeInBytes, 576/8 @576/8 1024/8 1088/8 // populate.py, please set cKeccakR_SizeInBytes
|
|
21
|
+
.equ crypto_hash_BYTES , cKeccakR_SizeInBytes @// populate.py, please set crypto_hash_BYTES
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@// --- offsets in state
|
|
25
|
+
.equ Aba0, 0*4
|
|
26
|
+
.equ Aba1, 1*4
|
|
27
|
+
.equ Abe0, 2*4
|
|
28
|
+
.equ Abe1, 3*4
|
|
29
|
+
.equ Abi0, 4*4
|
|
30
|
+
.equ Abi1, 5*4
|
|
31
|
+
.equ Abo0, 6*4
|
|
32
|
+
.equ Abo1, 7*4
|
|
33
|
+
.equ Abu0, 8*4
|
|
34
|
+
.equ Abu1, 9*4
|
|
35
|
+
.equ Aga0, 10*4
|
|
36
|
+
.equ Aga1, 11*4
|
|
37
|
+
.equ Age0, 12*4
|
|
38
|
+
.equ Age1, 13*4
|
|
39
|
+
.equ Agi0, 14*4
|
|
40
|
+
.equ Agi1, 15*4
|
|
41
|
+
.equ Ago0, 16*4
|
|
42
|
+
.equ Ago1, 17*4
|
|
43
|
+
.equ Agu0, 18*4
|
|
44
|
+
.equ Agu1, 19*4
|
|
45
|
+
.equ Aka0, 20*4
|
|
46
|
+
.equ Aka1, 21*4
|
|
47
|
+
.equ Ake0, 22*4
|
|
48
|
+
.equ Ake1, 23*4
|
|
49
|
+
.equ Aki0, 24*4
|
|
50
|
+
.equ Aki1, 25*4
|
|
51
|
+
.equ Ako0, 26*4
|
|
52
|
+
.equ Ako1, 27*4
|
|
53
|
+
.equ Aku0, 28*4
|
|
54
|
+
.equ Aku1, 29*4
|
|
55
|
+
.equ Ama0, 30*4
|
|
56
|
+
.equ Ama1, 31*4
|
|
57
|
+
.equ Ame0, 32*4
|
|
58
|
+
.equ Ame1, 33*4
|
|
59
|
+
.equ Ami0, 34*4
|
|
60
|
+
.equ Ami1, 35*4
|
|
61
|
+
.equ Amo0, 36*4
|
|
62
|
+
.equ Amo1, 37*4
|
|
63
|
+
.equ Amu0, 38*4
|
|
64
|
+
.equ Amu1, 39*4
|
|
65
|
+
.equ Asa0, 40*4
|
|
66
|
+
.equ Asa1, 41*4
|
|
67
|
+
.equ Ase0, 42*4
|
|
68
|
+
.equ Ase1, 43*4
|
|
69
|
+
.equ Asi0, 44*4
|
|
70
|
+
.equ Asi1, 45*4
|
|
71
|
+
.equ Aso0, 46*4
|
|
72
|
+
.equ Aso1, 47*4
|
|
73
|
+
.equ Asu0, 48*4
|
|
74
|
+
.equ Asu1, 49*4
|
|
75
|
+
|
|
76
|
+
@// --- offsets on stack
|
|
77
|
+
.equ mDa0, 50*4
|
|
78
|
+
.equ mDa1, 51*4
|
|
79
|
+
.equ mDo0, 52*4
|
|
80
|
+
.equ mDo1, 53*4
|
|
81
|
+
.equ mDi0, 54*4
|
|
82
|
+
.equ mRC , 55*4
|
|
83
|
+
.equ mRet, 56*4
|
|
84
|
+
.equ mIn , 57*4
|
|
85
|
+
.equ mOut, 58*4
|
|
86
|
+
.equ mLen, 59*4
|
|
87
|
+
|
|
88
|
+
@// --- macros
|
|
89
|
+
|
|
90
|
+
@// Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
|
|
91
|
+
.macro interleaveLane x0,x1,s0,s1,t,m55,m33,m0F,mFF,tt
|
|
92
|
+
|
|
93
|
+
and \t,\x0,\m55
|
|
94
|
+
and \tt,\x1,\m55
|
|
95
|
+
orr \t,\t,\t, LSR #1
|
|
96
|
+
orr \tt,\tt,\tt, LSR #1
|
|
97
|
+
and \t,\t,\m33
|
|
98
|
+
and \tt,\tt,\m33
|
|
99
|
+
orr \t,\t,\t, LSR #2
|
|
100
|
+
orr \tt,\tt,\tt, LSR #2
|
|
101
|
+
and \t,\t,\m0F
|
|
102
|
+
and \tt,\tt,\m0F
|
|
103
|
+
orr \t,\t,\t, LSR #4
|
|
104
|
+
orr \tt,\tt,\tt, LSR #4
|
|
105
|
+
and \t,\t,\mFF
|
|
106
|
+
and \tt,\tt,\mFF
|
|
107
|
+
bfi \t,\t,#8, #8
|
|
108
|
+
orr \tt,\tt,\tt, LSR #8
|
|
109
|
+
eor \s0,\s0,\t, LSR #8
|
|
110
|
+
|
|
111
|
+
and \t,\x0,\m55, LSL #1
|
|
112
|
+
eor \s0,\s0,\tt, LSL #16
|
|
113
|
+
and \tt,\x1,\m55, LSL #1
|
|
114
|
+
orr \t,\t,\t, LSL #1
|
|
115
|
+
orr \tt,\tt,\tt, LSL #1
|
|
116
|
+
and \t,\t,\m33, LSL #2
|
|
117
|
+
and \tt,\tt,\m33, LSL #2
|
|
118
|
+
orr \t,\t,\t, LSL #2
|
|
119
|
+
orr \tt,\tt,\tt, LSL #2
|
|
120
|
+
and \t,\t,\m0F, LSL #4
|
|
121
|
+
and \tt,\tt,\m0F, LSL #4
|
|
122
|
+
orr \t,\t,\t, LSL #4
|
|
123
|
+
orr \tt,\tt,\tt, LSL #4
|
|
124
|
+
and \t,\t,\mFF, LSL #8
|
|
125
|
+
and \tt,\tt,\mFF, LSL #8
|
|
126
|
+
orr \t,\t,\t, LSL #8
|
|
127
|
+
orr \tt,\tt,\tt, LSL #8
|
|
128
|
+
eor \s1,\s1,\t, LSR #16
|
|
129
|
+
bfc \tt, #0, #16
|
|
130
|
+
eors \s1,\s1,\tt
|
|
131
|
+
.endm
|
|
132
|
+
|
|
133
|
+
@// Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
|
|
134
|
+
.macro uninterleaveLane x0, x1, t, mFF, mF0, m0C, m22, tt
|
|
135
|
+
|
|
136
|
+
mov \t, \x0
|
|
137
|
+
bfi \x0, \x1, #16, #16
|
|
138
|
+
bfc \x1, #0, #16
|
|
139
|
+
orr \x1, \x1, \t, LSR #16
|
|
140
|
+
|
|
141
|
+
eor \t, \x0, \x0, LSR #8
|
|
142
|
+
eor \tt, \x1, \x1, LSR #8
|
|
143
|
+
and \t, \mFF
|
|
144
|
+
and \tt, \mFF
|
|
145
|
+
eor \x0, \x0, \t
|
|
146
|
+
eor \x1, \x1, \tt
|
|
147
|
+
eor \x0, \x0, \t, LSL #8
|
|
148
|
+
eor \x1, \x1, \tt, LSL #8
|
|
149
|
+
|
|
150
|
+
eor \t, \x0, \x0, LSR #4
|
|
151
|
+
eor \tt, \x1, \x1, LSR #4
|
|
152
|
+
and \t, \mF0
|
|
153
|
+
and \tt, \mF0
|
|
154
|
+
eor \x0, \x0, \t
|
|
155
|
+
eor \x1, \x1, \tt
|
|
156
|
+
eor \x0, \x0, \t, LSL #4
|
|
157
|
+
eor \x1, \x1, \tt, LSL #4
|
|
158
|
+
|
|
159
|
+
eor \t, \x0, \x0, LSR #2
|
|
160
|
+
eor \tt, \x1, \x1, LSR #2
|
|
161
|
+
and \t, \m0C
|
|
162
|
+
and \tt, \m0C
|
|
163
|
+
eor \x0, \x0, \t
|
|
164
|
+
eor \x1, \x1, \tt
|
|
165
|
+
eor \x0, \x0, \t, LSL #2
|
|
166
|
+
eor \x1, \x1, \tt, LSL #2
|
|
167
|
+
|
|
168
|
+
eor \t, \x0, \x0, LSR #1
|
|
169
|
+
eor \tt, \x1, \x1, LSR #1
|
|
170
|
+
and \t, \m22
|
|
171
|
+
and \tt, \m22
|
|
172
|
+
eor \x0, \x0, \t
|
|
173
|
+
eor \x1, \x1, \tt
|
|
174
|
+
eor \x0, \x0, \t, LSL #1
|
|
175
|
+
eor \x1, \x1, \tt, LSL #1
|
|
176
|
+
.endm
|
|
177
|
+
|
|
178
|
+
.macro xor55 result1,b1,g1,k1,m1,s1,result2,b2,g2,k2,m2,s2
|
|
179
|
+
|
|
180
|
+
ldr \result1, [sp, #\b1]
|
|
181
|
+
ldr \result2, [sp, #\b2]
|
|
182
|
+
ldr r1, [sp, #\g1]
|
|
183
|
+
ldr r2, [sp, #\g2]
|
|
184
|
+
eor \result1, \result1, r1
|
|
185
|
+
ldr r1, [sp, #\k1]
|
|
186
|
+
eor \result2, \result2, r2
|
|
187
|
+
ldr r2, [sp, #\k2]
|
|
188
|
+
eor \result1, \result1, r1
|
|
189
|
+
ldr r1, [sp, #\m1]
|
|
190
|
+
eor \result2, \result2, r2
|
|
191
|
+
ldr r2, [sp, #\m2]
|
|
192
|
+
eor \result1, \result1, r1
|
|
193
|
+
ldr r1, [sp, #\s1]
|
|
194
|
+
eor \result2, \result2, r2
|
|
195
|
+
ldr r2, [sp, #\s2]
|
|
196
|
+
eor \result1, \result1, r1
|
|
197
|
+
eor \result2, \result2, r2
|
|
198
|
+
.endm
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
.macro KeccakThetaRhoPiChiIota aA1, aDax, aA2, aDex, rot2, aA3, aDix, rot3, aA4, aDox, rot4, aA5, aDux, rot5, offset, last
|
|
202
|
+
ldr r3, [sp, #\aA1]
|
|
203
|
+
ldr r4, [sp, #\aA2]
|
|
204
|
+
eor r3, r3, \aDax
|
|
205
|
+
ldr r5, [sp, #\aA3]
|
|
206
|
+
eor r4, r4, \aDex
|
|
207
|
+
ldr r6, [sp, #\aA4]
|
|
208
|
+
eor r5, r5, \aDix
|
|
209
|
+
ldr r7, [sp, #\aA5]
|
|
210
|
+
ror r4, #32-\rot2
|
|
211
|
+
eor r6, r6, \aDox
|
|
212
|
+
ror r5, #32-\rot3
|
|
213
|
+
eor r7, r7, \aDux
|
|
214
|
+
ror r6, #32-\rot4
|
|
215
|
+
ror r7, #32-\rot5
|
|
216
|
+
|
|
217
|
+
bic r1, r6, r5
|
|
218
|
+
bic r2, r7, r6
|
|
219
|
+
eor r1, r1, r4
|
|
220
|
+
eor r2, r2, r5
|
|
221
|
+
str r1, [sp, #\aA2]
|
|
222
|
+
|
|
223
|
+
bic r1, r3, r7
|
|
224
|
+
str r2, [sp, #\aA3]
|
|
225
|
+
bic r2, r4, r3
|
|
226
|
+
eor r1, r1, r6
|
|
227
|
+
eor r2, r2, r7
|
|
228
|
+
str r1, [sp, #\aA4]
|
|
229
|
+
ldr r1, [sp, #mRC]
|
|
230
|
+
bic r5, r5, r4
|
|
231
|
+
ldr r4, [r1, #\offset]
|
|
232
|
+
eor r3, r3, r5
|
|
233
|
+
str r2, [sp, #\aA5]
|
|
234
|
+
.if \last == 1
|
|
235
|
+
ldr r2, [r1, #32]!
|
|
236
|
+
.endif
|
|
237
|
+
eor r3, r3, r4
|
|
238
|
+
.if \last == 1
|
|
239
|
+
str r1, [sp, #mRC]
|
|
240
|
+
cmp r2, #0xFFFFFFFF
|
|
241
|
+
.endif
|
|
242
|
+
str r3, [sp, #\aA1]
|
|
243
|
+
.endm
|
|
244
|
+
|
|
245
|
+
.macro KeccakThetaRhoPiChi aB1, aA1, aDax, rot1, aB2, aA2, aDex, rot2, aB3, aA3, aDix, rot3, aB4, aA4, aDox, rot4, aB5, aA5, aDux, rot5
|
|
246
|
+
ldr \aB1, [sp, #\aA1]
|
|
247
|
+
ldr \aB2, [sp, #\aA2]
|
|
248
|
+
eor \aB1, \aB1, \aDax
|
|
249
|
+
ldr \aB3, [sp, #\aA3]
|
|
250
|
+
eor \aB2, \aB2, \aDex
|
|
251
|
+
ldr \aB4, [sp, #\aA4]
|
|
252
|
+
ror \aB1, #32-\rot1
|
|
253
|
+
eor \aB3, \aB3, \aDix
|
|
254
|
+
.if \rot2 > 0
|
|
255
|
+
ror \aB2, #32-\rot2
|
|
256
|
+
.endif
|
|
257
|
+
ldr \aB5, [sp, #\aA5]
|
|
258
|
+
ror \aB3, #32-\rot3
|
|
259
|
+
eor \aB4, \aB4, \aDox
|
|
260
|
+
eor \aB5, \aB5, \aDux
|
|
261
|
+
ror \aB4, #32-\rot4
|
|
262
|
+
ror \aB5, #32-\rot5
|
|
263
|
+
|
|
264
|
+
bic r1, r7, r6
|
|
265
|
+
bic r2, r3, r7
|
|
266
|
+
eor r1, r1, r5
|
|
267
|
+
eor r2, r2, r6
|
|
268
|
+
bic r6, r6, r5
|
|
269
|
+
bic r5, r5, r4
|
|
270
|
+
str r1, [sp, #\aA3]
|
|
271
|
+
eor r6, r6, r4
|
|
272
|
+
str r2, [sp, #\aA4]
|
|
273
|
+
bic r4, r4, r3
|
|
274
|
+
str r6, [sp, #\aA2]
|
|
275
|
+
eor r5, r5, r3
|
|
276
|
+
eor r4, r4, r7
|
|
277
|
+
str r5, [sp, #\aA1]
|
|
278
|
+
str r4, [sp, #\aA5]
|
|
279
|
+
|
|
280
|
+
.endm
|
|
281
|
+
|
|
282
|
+
.macro KeccakRound0
|
|
283
|
+
|
|
284
|
+
xor55 r3, Abu0, Agu0, Aku0, Amu0, Asu0, r7, Abe1, Age1, Ake1, Ame1, Ase1
|
|
285
|
+
xor55 r6, Abu1, Agu1, Aku1, Amu1, Asu1, r12, Abe0, Age0, Ake0, Ame0, Ase0
|
|
286
|
+
eor r1, r3, r7, ROR #31
|
|
287
|
+
eor r8, r6, r12
|
|
288
|
+
str r1, [sp, #mDa0]
|
|
289
|
+
|
|
290
|
+
xor55 r5, Abi0, Agi0, Aki0, Ami0, Asi0, r4, Abi1, Agi1, Aki1, Ami1, Asi1
|
|
291
|
+
str r8, [sp, #mDa1]
|
|
292
|
+
eor r0, r5, r6, ROR #31
|
|
293
|
+
eor r11, r4, r3
|
|
294
|
+
str r0, [sp, #mDo0]
|
|
295
|
+
|
|
296
|
+
xor55 r3, Aba0, Aga0, Aka0, Ama0, Asa0, r6, Aba1, Aga1, Aka1, Ama1, Asa1
|
|
297
|
+
str r11, [sp, #mDo1]
|
|
298
|
+
eor r10, r3, r4, ROR #31
|
|
299
|
+
eor r11, r6, r5
|
|
300
|
+
|
|
301
|
+
xor55 r4, Abo1, Ago1, Ako1, Amo1, Aso1, r5, Abo0, Ago0, Ako0, Amo0, Aso0
|
|
302
|
+
eor r12, r12, r4, ROR #31
|
|
303
|
+
eor r9, r7, r5
|
|
304
|
+
str r12, [sp, #mDi0]
|
|
305
|
+
|
|
306
|
+
eor r12, r5, r6, ROR #31
|
|
307
|
+
eor lr, r4, r3
|
|
308
|
+
|
|
309
|
+
KeccakThetaRhoPiChi r5, Aka1, r8, 2, r6, Ame1, r11, 23, r7, Asi1, r9, 31, r3, Abo0, r0, 14, r4, Agu0, r12, 10
|
|
310
|
+
KeccakThetaRhoPiChi r7, Asa1, r8, 9, r3, Abe0, r10, 0, r4, Agi1, r9, 3, r5, Ako0, r0, 12, r6, Amu1, lr, 4
|
|
311
|
+
ldr r8, [sp, #mDa0]
|
|
312
|
+
KeccakThetaRhoPiChi r4, Aga0, r8, 18, r5, Ake0, r10, 5, r6, Ami1, r9, 8, r7, Aso0, r0, 28, r3, Abu1, lr, 14
|
|
313
|
+
KeccakThetaRhoPiChi r6, Ama0, r8, 20, r7, Ase1, r11, 1, r3, Abi1, r9, 31, r4, Ago0, r0, 27, r5, Aku0, r12, 19
|
|
314
|
+
ldr r0, [sp, #mDo1]
|
|
315
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Age0, r10, 22, Aki1, r9, 22, Amo1, r0, 11, Asu0, r12, 7, 0, 0
|
|
316
|
+
|
|
317
|
+
ldr r9, [sp, #mDi0]
|
|
318
|
+
KeccakThetaRhoPiChi r5, Aka0, r8, 1, r6, Ame0, r10, 22, r7, Asi0, r9, 30, r3, Abo1, r0, 14, r4, Agu1, lr, 10
|
|
319
|
+
KeccakThetaRhoPiChi r7, Asa0, r8, 9, r3, Abe1, r11, 1, r4, Agi0, r9, 3, r5, Ako1, r0, 13, r6, Amu0, r12, 4
|
|
320
|
+
ldr r8, [sp, #mDa1]
|
|
321
|
+
KeccakThetaRhoPiChi r4, Aga1, r8, 18, r5, Ake1, r11, 5, r6, Ami0, r9, 7, r7, Aso1, r0, 28, r3, Abu0, r12, 13
|
|
322
|
+
KeccakThetaRhoPiChi r6, Ama1, r8, 21, r7, Ase0, r10, 1, r3, Abi0, r9, 31, r4, Ago1, r0, 28, r5, Aku1, lr, 20
|
|
323
|
+
ldr r0, [sp, #mDo0]
|
|
324
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Age1, r11, 22, Aki0, r9, 21, Amo0, r0, 10, Asu1, lr, 7, 4, 0
|
|
325
|
+
.endm
|
|
326
|
+
|
|
327
|
+
.macro KeccakRound1
|
|
328
|
+
|
|
329
|
+
xor55 r3, Asu0, Agu0, Amu0, Abu1, Aku1, r7, Age1, Ame0, Abe0, Ake1, Ase1
|
|
330
|
+
xor55 r6, Asu1, Agu1, Amu1, Abu0, Aku0, r12, Age0, Ame1, Abe1, Ake0, Ase0
|
|
331
|
+
eor r1, r3, r7, ROR #31
|
|
332
|
+
eor r8, r6, r12
|
|
333
|
+
str r1, [sp, #mDa0]
|
|
334
|
+
|
|
335
|
+
xor55 r5, Aki1, Asi1, Agi0, Ami1, Abi0, r4, Aki0, Asi0, Agi1, Ami0, Abi1
|
|
336
|
+
str r8, [sp, #mDa1]
|
|
337
|
+
eor r0, r5, r6, ROR #31
|
|
338
|
+
eor r11, r4, r3
|
|
339
|
+
str r0, [sp, #mDo0]
|
|
340
|
+
|
|
341
|
+
xor55 r3, Aba0, Aka1, Asa0, Aga0, Ama1, r6, Aba1, Aka0, Asa1, Aga1, Ama0
|
|
342
|
+
str r11, [sp, #mDo1]
|
|
343
|
+
eor r10, r3, r4, ROR #31
|
|
344
|
+
eor r11, r6, r5
|
|
345
|
+
|
|
346
|
+
xor55 r4, Amo0, Abo1, Ako0, Aso1, Ago0, r5, Amo1, Abo0, Ako1, Aso0, Ago1
|
|
347
|
+
eor r12, r12, r4, ROR #31
|
|
348
|
+
eor r9, r7, r5
|
|
349
|
+
str r12, [sp, #mDi0]
|
|
350
|
+
|
|
351
|
+
eor r12, r5, r6, ROR #31
|
|
352
|
+
eor lr, r4, r3
|
|
353
|
+
|
|
354
|
+
KeccakThetaRhoPiChi r5, Asa1, r8, 2, r6, Ake1, r11, 23, r7, Abi1, r9, 31, r3, Amo1, r0, 14, r4, Agu0, r12, 10
|
|
355
|
+
KeccakThetaRhoPiChi r7, Ama0, r8, 9, r3, Age0, r10, 0, r4, Asi0, r9, 3, r5, Ako1, r0, 12, r6, Abu0, lr, 4
|
|
356
|
+
ldr r8, [sp, #mDa0]
|
|
357
|
+
KeccakThetaRhoPiChi r4, Aka1, r8, 18, r5, Abe1, r10, 5, r6, Ami0, r9, 8, r7, Ago1, r0, 28, r3, Asu1, lr, 14
|
|
358
|
+
KeccakThetaRhoPiChi r6, Aga0, r8, 20, r7, Ase1, r11, 1, r3, Aki0, r9, 31, r4, Abo0, r0, 27, r5, Amu0, r12, 19
|
|
359
|
+
ldr r0, [sp, #mDo1]
|
|
360
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Ame1, r10, 22, Agi1, r9, 22, Aso1, r0, 11, Aku1, r12, 7, 8, 0
|
|
361
|
+
|
|
362
|
+
ldr r9, [sp, #mDi0]
|
|
363
|
+
KeccakThetaRhoPiChi r5, Asa0, r8, 1, r6, Ake0, r10, 22, r7, Abi0, r9, 30, r3, Amo0, r0, 14, r4, Agu1, lr, 10
|
|
364
|
+
KeccakThetaRhoPiChi r7, Ama1, r8, 9, r3, Age1, r11, 1, r4, Asi1, r9, 3, r5, Ako0, r0, 13, r6, Abu1, r12, 4
|
|
365
|
+
ldr r8, [sp, #mDa1]
|
|
366
|
+
KeccakThetaRhoPiChi r4, Aka0, r8, 18, r5, Abe0, r11, 5, r6, Ami1, r9, 7, r7, Ago0, r0, 28, r3, Asu0, r12, 13
|
|
367
|
+
KeccakThetaRhoPiChi r6, Aga1, r8, 21, r7, Ase0, r10, 1, r3, Aki1, r9, 31, r4, Abo1, r0, 28, r5, Amu1, lr, 20
|
|
368
|
+
ldr r0, [sp, #mDo0]
|
|
369
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Ame0, r11, 22, Agi0, r9, 21, Aso0, r0, 10, Aku0, lr, 7, 12, 0
|
|
370
|
+
.endm
|
|
371
|
+
|
|
372
|
+
.macro KeccakRound2
|
|
373
|
+
|
|
374
|
+
xor55 r3, Aku1, Agu0, Abu1, Asu1, Amu1, r7, Ame0, Ake0, Age0, Abe0, Ase1
|
|
375
|
+
xor55 r6, Aku0, Agu1, Abu0, Asu0, Amu0, r12, Ame1, Ake1, Age1, Abe1, Ase0
|
|
376
|
+
eor r1, r3, r7, ROR #31
|
|
377
|
+
eor r8, r6, r12
|
|
378
|
+
str r1, [sp, #mDa0]
|
|
379
|
+
|
|
380
|
+
xor55 r5, Agi1, Abi1, Asi1, Ami0, Aki1, r4, Agi0, Abi0, Asi0, Ami1, Aki0
|
|
381
|
+
str r8, [sp, #mDa1]
|
|
382
|
+
eor r0, r5, r6, ROR #31
|
|
383
|
+
eor r11, r4, r3
|
|
384
|
+
str r0, [sp, #mDo0]
|
|
385
|
+
|
|
386
|
+
xor55 r3, Aba0, Asa1, Ama1, Aka1, Aga1, r6, Aba1, Asa0, Ama0, Aka0, Aga0
|
|
387
|
+
str r11, [sp, #mDo1]
|
|
388
|
+
eor r10, r3, r4, ROR #31
|
|
389
|
+
eor r11, r6, r5
|
|
390
|
+
|
|
391
|
+
xor55 r4, Aso0, Amo0, Ako1, Ago0, Abo0, r5, Aso1, Amo1, Ako0, Ago1, Abo1
|
|
392
|
+
eor r12, r12, r4, ROR #31
|
|
393
|
+
eor r9, r7, r5
|
|
394
|
+
str r12, [sp, #mDi0]
|
|
395
|
+
|
|
396
|
+
eor r12, r5, r6, ROR #31
|
|
397
|
+
eor lr, r4, r3
|
|
398
|
+
|
|
399
|
+
KeccakThetaRhoPiChi r5, Ama0, r8, 2, r6, Abe0, r11, 23, r7, Aki0, r9, 31, r3, Aso1, r0, 14, r4, Agu0, r12, 10
|
|
400
|
+
KeccakThetaRhoPiChi r7, Aga0, r8, 9, r3, Ame1, r10, 0, r4, Abi0, r9, 3, r5, Ako0, r0, 12, r6, Asu0, lr, 4
|
|
401
|
+
ldr r8, [sp, #mDa0]
|
|
402
|
+
KeccakThetaRhoPiChi r4, Asa1, r8, 18, r5, Age1, r10, 5, r6, Ami1, r9, 8, r7, Abo1, r0, 28, r3, Aku0, lr, 14
|
|
403
|
+
KeccakThetaRhoPiChi r6, Aka1, r8, 20, r7, Ase1, r11, 1, r3, Agi0, r9, 31, r4, Amo1, r0, 27, r5, Abu1, r12, 19
|
|
404
|
+
ldr r0, [sp, #mDo1]
|
|
405
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Ake1, r10, 22, Asi0, r9, 22, Ago0, r0, 11, Amu1, r12, 7, 16, 0
|
|
406
|
+
|
|
407
|
+
ldr r9, [sp, #mDi0]
|
|
408
|
+
KeccakThetaRhoPiChi r5, Ama1, r8, 1, r6, Abe1, r10, 22, r7, Aki1, r9, 30, r3, Aso0, r0, 14, r4, Agu1, lr, 10
|
|
409
|
+
KeccakThetaRhoPiChi r7, Aga1, r8, 9, r3, Ame0, r11, 1, r4, Abi1, r9, 3, r5, Ako1, r0, 13, r6, Asu1, r12, 4
|
|
410
|
+
ldr r8, [sp, #mDa1]
|
|
411
|
+
KeccakThetaRhoPiChi r4, Asa0, r8, 18, r5, Age0, r11, 5, r6, Ami0, r9, 7, r7, Abo0, r0, 28, r3, Aku1, r12, 13
|
|
412
|
+
KeccakThetaRhoPiChi r6, Aka0, r8, 21, r7, Ase0, r10, 1, r3, Agi1, r9, 31, r4, Amo0, r0, 28, r5, Abu0, lr, 20
|
|
413
|
+
ldr r0, [sp, #mDo0]
|
|
414
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Ake0, r11, 22, Asi1, r9, 21, Ago1, r0, 10, Amu0, lr, 7, 20, 0
|
|
415
|
+
.endm
|
|
416
|
+
|
|
417
|
+
.macro KeccakRound3
|
|
418
|
+
|
|
419
|
+
xor55 r3, Amu1, Agu0, Asu1, Aku0, Abu0, r7, Ake0, Abe1, Ame1, Age0, Ase1
|
|
420
|
+
xor55 r6, Amu0, Agu1, Asu0, Aku1, Abu1, r12, Ake1, Abe0, Ame0, Age1, Ase0
|
|
421
|
+
eor r1, r3, r7, ROR #31
|
|
422
|
+
eor r8, r6, r12
|
|
423
|
+
str r1, [sp, #mDa0]
|
|
424
|
+
|
|
425
|
+
xor55 r5, Asi0, Aki0, Abi1, Ami1, Agi1, r4, Asi1, Aki1, Abi0, Ami0, Agi0
|
|
426
|
+
str r8, [sp, #mDa1]
|
|
427
|
+
eor r0, r5, r6, ROR #31
|
|
428
|
+
eor r11, r4, r3
|
|
429
|
+
str r0, [sp, #mDo0]
|
|
430
|
+
|
|
431
|
+
xor55 r3, Aba0, Ama0, Aga1, Asa1, Aka0, r6, Aba1, Ama1, Aga0, Asa0, Aka1
|
|
432
|
+
str r11, [sp, #mDo1]
|
|
433
|
+
eor r10, r3, r4, ROR #31
|
|
434
|
+
eor r11, r6, r5
|
|
435
|
+
|
|
436
|
+
xor55 r4, Ago1, Aso0, Ako0, Abo0, Amo1, r5, Ago0, Aso1, Ako1, Abo1, Amo0
|
|
437
|
+
eor r12, r12, r4, ROR #31
|
|
438
|
+
eor r9, r7, r5
|
|
439
|
+
str r12, [sp, #mDi0]
|
|
440
|
+
|
|
441
|
+
eor r12, r5, r6, ROR #31
|
|
442
|
+
eor lr, r4, r3
|
|
443
|
+
|
|
444
|
+
KeccakThetaRhoPiChi r5, Aga0, r8, 2, r6, Age0, r11, 23, r7, Agi0, r9, 31, r3, Ago0, r0, 14, r4, Agu0, r12, 10
|
|
445
|
+
KeccakThetaRhoPiChi r7, Aka1, r8, 9, r3, Ake1, r10, 0, r4, Aki1, r9, 3, r5, Ako1, r0, 12, r6, Aku1, lr, 4
|
|
446
|
+
ldr r8, [sp, #mDa0]
|
|
447
|
+
KeccakThetaRhoPiChi r4, Ama0, r8, 18, r5, Ame0, r10, 5, r6, Ami0, r9, 8, r7, Amo0, r0, 28, r3, Amu0, lr, 14
|
|
448
|
+
KeccakThetaRhoPiChi r6, Asa1, r8, 20, r7, Ase1, r11, 1, r3, Asi1, r9, 31, r4, Aso1, r0, 27, r5, Asu1, r12, 19
|
|
449
|
+
ldr r0, [sp, #mDo1]
|
|
450
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Abe0, r10, 22, Abi0, r9, 22, Abo0, r0, 11, Abu0, r12, 7, 24, 0
|
|
451
|
+
|
|
452
|
+
ldr r9, [sp, #mDi0]
|
|
453
|
+
KeccakThetaRhoPiChi r5, Aga1, r8, 1, r6, Age1, r10, 22, r7, Agi1, r9, 30, r3, Ago1, r0, 14, r4, Agu1, lr, 10
|
|
454
|
+
KeccakThetaRhoPiChi r7, Aka0, r8, 9, r3, Ake0, r11, 1, r4, Aki0, r9, 3, r5, Ako0, r0, 13, r6, Aku0, r12, 4
|
|
455
|
+
ldr r8, [sp, #mDa1]
|
|
456
|
+
KeccakThetaRhoPiChi r4, Ama1, r8, 18, r5, Ame1, r11, 5, r6, Ami1, r9, 7, r7, Amo1, r0, 28, r3, Amu1, r12, 13
|
|
457
|
+
KeccakThetaRhoPiChi r6, Asa0, r8, 21, r7, Ase0, r10, 1, r3, Asi0, r9, 31, r4, Aso0, r0, 28, r5, Asu0, lr, 20
|
|
458
|
+
ldr r0, [sp, #mDo0]
|
|
459
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Abe1, r11, 22, Abi1, r9, 21, Abo1, r0, 10, Abu1, lr, 7, 28, 1
|
|
460
|
+
.endm
|
|
461
|
+
|
|
462
|
+
@// --- code and constants
|
|
463
|
+
|
|
464
|
+
@//int crypto_hash( unsigned char *out, const unsigned char *in, unsigned long long inlen )
|
|
465
|
+
.global crypto_hash @// populate.py, please update crypto_hash
|
|
466
|
+
crypto_hash: @// populate.py, please update crypto_hash
|
|
467
|
+
|
|
468
|
+
push {r4-r12,lr}
|
|
469
|
+
sub sp, sp, #10*4
|
|
470
|
+
|
|
471
|
+
@//allocate and clear state
|
|
472
|
+
mov r3, #0
|
|
473
|
+
mov r4, #0
|
|
474
|
+
mov r5, #0
|
|
475
|
+
mov r6, #0
|
|
476
|
+
mov r7, #0
|
|
477
|
+
push {r3-r7}
|
|
478
|
+
push {r3-r7}
|
|
479
|
+
push {r3-r7}
|
|
480
|
+
push {r3-r7}
|
|
481
|
+
push {r3-r7}
|
|
482
|
+
push {r3-r7}
|
|
483
|
+
push {r3-r7}
|
|
484
|
+
push {r3-r7}
|
|
485
|
+
push {r3-r7}
|
|
486
|
+
push {r3-r7}
|
|
487
|
+
|
|
488
|
+
str r0, [sp, #mOut] @// save out pointer
|
|
489
|
+
|
|
490
|
+
@// Complete rate loop
|
|
491
|
+
subs r4, r2, #cKeccakR_SizeInBytes
|
|
492
|
+
adr r3, KeccakF1600RoundConstantsWithTerminator
|
|
493
|
+
str r1, [sp, #mIn] @// save in pointer
|
|
494
|
+
adr r0, crypto_hash_LoopRet
|
|
495
|
+
str r3, [sp, #mRC] @// save Round Constants pointer
|
|
496
|
+
str r0, [sp, #mRet] @// save return address
|
|
497
|
+
bcc crypto_hash_LoopEnd
|
|
498
|
+
|
|
499
|
+
str r4, [sp, #mLen] @// save inlen (ignore upper 32-bit word, since CPU address space is only 32-bit wide)
|
|
500
|
+
mov r4, #cKeccakR_SizeInBytes/cKeccakLaneSizeInBytes
|
|
501
|
+
b KeccakF_FullRate
|
|
502
|
+
crypto_hash_LoopRet:
|
|
503
|
+
ldr r2, [sp, #mLen]
|
|
504
|
+
adr r0, KeccakF1600RoundConstantsWithTerminator
|
|
505
|
+
subs r4, r2, #cKeccakR_SizeInBytes
|
|
506
|
+
str r0, [sp, #mRC] @// save Round Constants pointer
|
|
507
|
+
str r4, [sp, #mLen]
|
|
508
|
+
mov r4, #cKeccakR_SizeInBytes/cKeccakLaneSizeInBytes
|
|
509
|
+
bcs KeccakF_FullRate
|
|
510
|
+
crypto_hash_LoopEnd:
|
|
511
|
+
|
|
512
|
+
@// Last incomplete lane and padding
|
|
513
|
+
mov r4, r2, LSR #3 @// r4 nbrFullLanes = len >> 3@
|
|
514
|
+
and r6, r2, #7 @// r6 len &= 7@ length last incomplete lane
|
|
515
|
+
|
|
516
|
+
mov r0, #1 @// XOR first padding bit into state: state[nbrFullLanes << 1] ^= 1 << (len * 4)@
|
|
517
|
+
mov r1, r6, LSL #2
|
|
518
|
+
lsl r0, r0, r1
|
|
519
|
+
ldr r1, [sp, r4, LSL #3]
|
|
520
|
+
eor r1, r1, r0
|
|
521
|
+
str r1, [sp, r4, LSL #3]
|
|
522
|
+
|
|
523
|
+
@// XOR last incomplete lane if needed
|
|
524
|
+
adr r1, crypto_hash_leftBranchTab
|
|
525
|
+
ldr r3, [sp, #mIn] @// get in pointer
|
|
526
|
+
add r3, r3, r4, LSL #3 @// p = in + nbrFullLanes << 3@
|
|
527
|
+
ldr pc, [r1, r6, LSL #2]
|
|
528
|
+
crypto_hash_leftBranchTab:
|
|
529
|
+
.long crypto_hash_IncompleteDone @//0 left
|
|
530
|
+
.long crypto_hash_1left
|
|
531
|
+
.long crypto_hash_2left
|
|
532
|
+
.long crypto_hash_3left
|
|
533
|
+
.long crypto_hash_4left
|
|
534
|
+
.long crypto_hash_5left
|
|
535
|
+
.long crypto_hash_6left
|
|
536
|
+
.long crypto_hash_7left
|
|
537
|
+
|
|
538
|
+
crypto_hash_1left:
|
|
539
|
+
ldrb r0, [r3]
|
|
540
|
+
mov r1, #0 @// x1 = 0
|
|
541
|
+
b crypto_hash_Interleave
|
|
542
|
+
crypto_hash_2left:
|
|
543
|
+
ldrh r0, [r3]
|
|
544
|
+
mov r1, #0 @// x1 = 0
|
|
545
|
+
b crypto_hash_Interleave
|
|
546
|
+
crypto_hash_3left:
|
|
547
|
+
ldrh r0, [r3]
|
|
548
|
+
ldrb r1, [r3, #2]
|
|
549
|
+
orr r0, r0, r1, LSL #16
|
|
550
|
+
mov r1, #0 @// x1 = 0
|
|
551
|
+
b crypto_hash_Interleave
|
|
552
|
+
crypto_hash_4left:
|
|
553
|
+
ldr r0, [r3]
|
|
554
|
+
mov r1, #0 @// x1 = 0
|
|
555
|
+
b crypto_hash_Interleave
|
|
556
|
+
crypto_hash_5left:
|
|
557
|
+
ldr r0, [r3]
|
|
558
|
+
ldrb r1, [r3, #4]
|
|
559
|
+
b crypto_hash_Interleave
|
|
560
|
+
crypto_hash_6left:
|
|
561
|
+
ldr r0, [r3]
|
|
562
|
+
ldrh r1, [r3, #4]
|
|
563
|
+
b crypto_hash_Interleave
|
|
564
|
+
crypto_hash_7left:
|
|
565
|
+
ldrh r1, [r3, #4]
|
|
566
|
+
ldrb r0, [r3, #6]
|
|
567
|
+
orr r1, r1, r0, LSL #16
|
|
568
|
+
ldr r0, [r3]
|
|
569
|
+
|
|
570
|
+
crypto_hash_Interleave:
|
|
571
|
+
add r8, sp, r4, LSL #3
|
|
572
|
+
movw r9, #0x5555
|
|
573
|
+
movw r10, #0x3333
|
|
574
|
+
movw r11, #0x0F0F
|
|
575
|
+
movw r12, #0x00FF
|
|
576
|
+
ldrd r2, r3, [r8]
|
|
577
|
+
movt r9, #0x5555
|
|
578
|
+
movt r10, #0x3333
|
|
579
|
+
movt r11, #0x0F0F
|
|
580
|
+
movt r12, #0x00FF
|
|
581
|
+
interleaveLane r0, r1, r2, r3, r6, r9, r10, r11, r12, lr
|
|
582
|
+
strd r2, r3, [r8]
|
|
583
|
+
crypto_hash_IncompleteDone:
|
|
584
|
+
ldr r0, [sp, #cKeccakR_SizeInBytes-4] @// XOR second padding bit into state
|
|
585
|
+
eor r0, #0x80000000
|
|
586
|
+
str r0, [sp, #cKeccakR_SizeInBytes-4]
|
|
587
|
+
|
|
588
|
+
adr r0, crypto_hash_SqueezeRet
|
|
589
|
+
str r0, [sp, #mRet] @// save return address
|
|
590
|
+
b KeccakF
|
|
591
|
+
crypto_hash_SqueezeRet:
|
|
592
|
+
|
|
593
|
+
ldr r7, [sp, #mOut] @// save return address
|
|
594
|
+
mov r4, #crypto_hash_BYTES/cKeccakLaneSizeInBytes @len = crypto_hash_BYTES / cKeccakLaneSizeInBytes@
|
|
595
|
+
mov r3, sp
|
|
596
|
+
movw r9, #0xFF00
|
|
597
|
+
movw r10, #0x00F0
|
|
598
|
+
movw r11, #0x0C0C
|
|
599
|
+
movw r12, #0x2222
|
|
600
|
+
movt r10, #0x00F0
|
|
601
|
+
movt r11, #0x0C0C
|
|
602
|
+
movt r12, #0x2222
|
|
603
|
+
crypto_hash_OutputLoop:
|
|
604
|
+
ldrd r0, r1, [r3], #8
|
|
605
|
+
uninterleaveLane r0, r1, r2, r9, r10, r11, r12, lr
|
|
606
|
+
str r0, [r7], #4
|
|
607
|
+
subs r4, r4, #1
|
|
608
|
+
str r1, [r7], #4
|
|
609
|
+
bne crypto_hash_OutputLoop
|
|
610
|
+
|
|
611
|
+
add sp, sp, #5*5*2*4+10*4
|
|
612
|
+
mov r0, #0
|
|
613
|
+
pop {r4-r12,pc}
|
|
614
|
+
|
|
615
|
+
.align 8
|
|
616
|
+
.ltorg
|
|
617
|
+
KeccakF1600RoundConstantsWithTerminator:
|
|
618
|
+
@// 0 1
|
|
619
|
+
.long 0x00000001, 0x00000000
|
|
620
|
+
.long 0x00000000, 0x00000089
|
|
621
|
+
.long 0x00000000, 0x8000008b
|
|
622
|
+
.long 0x00000000, 0x80008080
|
|
623
|
+
|
|
624
|
+
.long 0x00000001, 0x0000008b
|
|
625
|
+
.long 0x00000001, 0x00008000
|
|
626
|
+
.long 0x00000001, 0x80008088
|
|
627
|
+
.long 0x00000001, 0x80000082
|
|
628
|
+
|
|
629
|
+
.long 0x00000000, 0x0000000b
|
|
630
|
+
.long 0x00000000, 0x0000000a
|
|
631
|
+
.long 0x00000001, 0x00008082
|
|
632
|
+
.long 0x00000000, 0x00008003
|
|
633
|
+
|
|
634
|
+
.long 0x00000001, 0x0000808b
|
|
635
|
+
.long 0x00000001, 0x8000000b
|
|
636
|
+
.long 0x00000001, 0x8000008a
|
|
637
|
+
.long 0x00000001, 0x80000081
|
|
638
|
+
|
|
639
|
+
.long 0x00000000, 0x80000081
|
|
640
|
+
.long 0x00000000, 0x80000008
|
|
641
|
+
.long 0x00000000, 0x00000083
|
|
642
|
+
.long 0x00000000, 0x80008003
|
|
643
|
+
|
|
644
|
+
.long 0x00000001, 0x80008088
|
|
645
|
+
.long 0x00000000, 0x80000088
|
|
646
|
+
.long 0x00000001, 0x00008000
|
|
647
|
+
.long 0x00000000, 0x80008082
|
|
648
|
+
|
|
649
|
+
.long 0xFFFFFFFF @//terminator
|
|
650
|
+
|
|
651
|
+
.align 8
|
|
652
|
+
|
|
653
|
+
KeccakF:
|
|
654
|
+
cmp r4, #0
|
|
655
|
+
beq roundLoop
|
|
656
|
+
KeccakF_FullRate:
|
|
657
|
+
mov r8, sp
|
|
658
|
+
ldr r1, [sp, #mIn]
|
|
659
|
+
movw r9, #0x5555
|
|
660
|
+
movw r10, #0x3333
|
|
661
|
+
movw r11, #0x0F0F
|
|
662
|
+
movw r12, #0x00FF
|
|
663
|
+
movt r9, #0x5555
|
|
664
|
+
movt r10, #0x3333
|
|
665
|
+
movt r11, #0x0F0F
|
|
666
|
+
movt r12, #0x00FF
|
|
667
|
+
interleaveLoop:
|
|
668
|
+
ldr r2, [r1], #4
|
|
669
|
+
ldr r5, [r1], #4
|
|
670
|
+
ldrd r6, r7, [r8]
|
|
671
|
+
interleaveLane r2, r5, r6, r7, r3, r9, r10, r11, r12, lr
|
|
672
|
+
subs r4, r4, #1
|
|
673
|
+
strd r6,r7,[r8], #8
|
|
674
|
+
bne interleaveLoop
|
|
675
|
+
str r1, [sp, #mIn]
|
|
676
|
+
|
|
677
|
+
roundLoop:
|
|
678
|
+
KeccakRound0
|
|
679
|
+
KeccakRound1
|
|
680
|
+
KeccakRound2
|
|
681
|
+
KeccakRound3
|
|
682
|
+
bne roundLoop
|
|
683
|
+
ldr pc, [sp, #mRet]
|
|
684
|
+
|
|
685
|
+
@
|
|
686
|
+
.align 8
|
|
687
|
+
|