sleeping_kangaroo12 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.
- checksums.yaml +7 -0
- data/README.md +127 -0
- data/ext/Rakefile +73 -0
- data/ext/binding/sleeping_kangaroo12.c +39 -0
- data/ext/config/xkcp.build +17 -0
- data/ext/xkcp/LICENSE +1 -0
- data/ext/xkcp/Makefile +15 -0
- data/ext/xkcp/Makefile.build +200 -0
- data/ext/xkcp/README.markdown +296 -0
- data/ext/xkcp/lib/HighLevel.build +143 -0
- data/ext/xkcp/lib/LowLevel.build +757 -0
- data/ext/xkcp/lib/common/align.h +33 -0
- data/ext/xkcp/lib/common/brg_endian.h +143 -0
- data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +301 -0
- data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.h +97 -0
- data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +81 -0
- data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +125 -0
- data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +48 -0
- data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +79 -0
- data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +81 -0
- data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +73 -0
- data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +195 -0
- data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +111 -0
- data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +76 -0
- data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +314 -0
- data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +61 -0
- data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +67 -0
- data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +128 -0
- data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +93 -0
- data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +599 -0
- data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +573 -0
- data/ext/xkcp/lib/high/Ketje/Ketjev2.c +87 -0
- data/ext/xkcp/lib/high/Ketje/Ketjev2.h +88 -0
- data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +274 -0
- data/ext/xkcp/lib/high/Keyak/Keyakv2.c +132 -0
- data/ext/xkcp/lib/high/Keyak/Keyakv2.h +217 -0
- data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +81 -0
- data/ext/xkcp/lib/high/Keyak/Motorist.inc +953 -0
- data/ext/xkcp/lib/high/Kravatte/Kravatte.c +533 -0
- data/ext/xkcp/lib/high/Kravatte/Kravatte.h +115 -0
- data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +557 -0
- data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +247 -0
- data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +66 -0
- data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +336 -0
- data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +26 -0
- data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +55 -0
- data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +35 -0
- data/ext/xkcp/lib/high/Xoofff/Xoofff.c +634 -0
- data/ext/xkcp/lib/high/Xoofff/Xoofff.h +147 -0
- data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +483 -0
- data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +241 -0
- data/ext/xkcp/lib/high/common/Phases.h +25 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +41 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +1666 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +1655 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +1268 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +1264 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +1178 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +1175 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +1338 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +1336 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +1343 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +1339 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +42 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +823 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +831 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +31 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +540 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +42 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +733 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +1121 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-AVX2.s +1100 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +52 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +623 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +47 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +6 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +6 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +6 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +1031 -0
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +53 -0
- data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +44 -0
- data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +476 -0
- data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +6 -0
- data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +6 -0
- data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros +748 -0
- data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +305 -0
- data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-SnP.h +40 -0
- data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +420 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +43 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-inplace32BI.c +1163 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-SnP.h +54 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +565 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +8 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +6 -0
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +6 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +44 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +23 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +625 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +44 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +440 -0
- data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h +23 -0
- data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +42 -0
- data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +1196 -0
- data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +1124 -0
- data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +1196 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +1392 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +1394 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +42 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +850 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +51 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +957 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +49 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +8 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +8 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +9 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +9 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +45 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +37 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +1321 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +55 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +881 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +51 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +45 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +37 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +45 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +38 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +1615 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +57 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +45 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +37 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +45 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +38 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +45 -0
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +38 -0
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +41 -0
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +442 -0
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +446 -0
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +419 -0
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +427 -0
- data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +41 -0
- data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +647 -0
- data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +39 -0
- data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +190 -0
- data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +43 -0
- data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +412 -0
- data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +23 -0
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +41 -0
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +454 -0
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +458 -0
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +455 -0
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +458 -0
- data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +41 -0
- data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +728 -0
- data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +43 -0
- data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +414 -0
- data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +23 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +42 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +527 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +533 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +528 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +534 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +521 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +527 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +517 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +523 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +550 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +556 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +32 -0
- data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +432 -0
- data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +42 -0
- data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +929 -0
- data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +40 -0
- data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +244 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +46 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +184 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +454 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +459 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +83 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +88 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +7 -0
- data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +44 -0
- data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +437 -0
- data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +23 -0
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +57 -0
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +475 -0
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +480 -0
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +590 -0
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +590 -0
- data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +126 -0
- data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +68 -0
- data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +174 -0
- data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +80 -0
- data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +68 -0
- data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +142 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +55 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +1086 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +1092 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +721 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +726 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +723 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +729 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +1164 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +1165 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +562 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +563 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +563 -0
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +565 -0
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +55 -0
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +476 -0
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +485 -0
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +362 -0
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +367 -0
- data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +43 -0
- data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +1341 -0
- data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +581 -0
- data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +58 -0
- data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +332 -0
- data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +329 -0
- data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +53 -0
- data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +355 -0
- data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +79 -0
- data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +56 -0
- data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +399 -0
- data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +127 -0
- data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +43 -0
- data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +253 -0
- data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +1044 -0
- data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +49 -0
- data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +45 -0
- data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +37 -0
- data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +1587 -0
- data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +48 -0
- data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +1202 -0
- data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +48 -0
- data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +484 -0
- data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +44 -0
- data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +45 -0
- data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +37 -0
- data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +939 -0
- data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +49 -0
- data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +1216 -0
- data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +48 -0
- data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +45 -0
- data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +37 -0
- data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +290 -0
- data/ext/xkcp/lib/low/common/SnP-Relaned.h +141 -0
- data/ext/xkcp/support/Build/ExpandProducts.xsl +79 -0
- data/ext/xkcp/support/Build/ToGlobalMakefile.xsl +206 -0
- data/ext/xkcp/support/Build/ToOneTarget.xsl +89 -0
- data/ext/xkcp/support/Build/ToTargetConfigFile.xsl +37 -0
- data/ext/xkcp/support/Build/ToTargetMakefile.xsl +298 -0
- data/ext/xkcp/support/Build/ToVCXProj.xsl +198 -0
- data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +133 -0
- data/ext/xkcp/support/Kernel-PMU/Makefile +8 -0
- data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +129 -0
- data/ext/xkcp/support/Kernel-PMU/load-module +1 -0
- data/ext/xkcp/util/KeccakSum/KeccakSum.c +394 -0
- data/ext/xkcp/util/KeccakSum/base64.c +86 -0
- data/ext/xkcp/util/KeccakSum/base64.h +12 -0
- data/lib/sleeping_kangaroo12/binding.rb +15 -0
- data/lib/sleeping_kangaroo12/build/loader.rb +40 -0
- data/lib/sleeping_kangaroo12/build/platform.rb +37 -0
- data/lib/sleeping_kangaroo12/build.rb +4 -0
- data/lib/sleeping_kangaroo12/digest.rb +103 -0
- data/lib/sleeping_kangaroo12/version.rb +5 -0
- data/lib/sleeping_kangaroo12.rb +7 -0
- metadata +372 -0
|
@@ -0,0 +1,1655 @@
|
|
|
1
|
+
@
|
|
2
|
+
@ The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
@ https://github.com/XKCP/XKCP
|
|
4
|
+
@
|
|
5
|
+
@ The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
|
|
6
|
+
@
|
|
7
|
+
@ Implementation by Ronny Van Keer, hereby denoted as "the implementer".
|
|
8
|
+
@
|
|
9
|
+
@ For more information, feedback or questions, please refer to the Keccak Team website:
|
|
10
|
+
@ https://keccak.team/
|
|
11
|
+
@
|
|
12
|
+
@ To the extent possible under law, the implementer has waived all copyright
|
|
13
|
+
@ and related or neighboring rights to the source code in this file.
|
|
14
|
+
@ http://creativecommons.org/publicdomain/zero/1.0/
|
|
15
|
+
@
|
|
16
|
+
@ ---
|
|
17
|
+
@
|
|
18
|
+
@ This file implements Keccak-p[1600] in a SnP-compatible way.
|
|
19
|
+
@ Please refer to SnP-documentation.h for more details.
|
|
20
|
+
@
|
|
21
|
+
@ This implementation comes with KeccakP-1600-SnP.h in the same folder.
|
|
22
|
+
@ Please refer to LowLevel.build for the exact list of other files it must be combined with.
|
|
23
|
+
@
|
|
24
|
+
|
|
25
|
+
@ WARNING: This implementation assumes a little endian CPU with ARMv6M architecture (e.g., Cortex-M0) and the GCC compiler.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
.thumb
|
|
29
|
+
.syntax unified
|
|
30
|
+
.text
|
|
31
|
+
|
|
32
|
+
@ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
|
|
33
|
+
.macro toBitInterleaving in0,in1,out0,out1,t,tt,pMask
|
|
34
|
+
|
|
35
|
+
mov \out0, \in0
|
|
36
|
+
ldr \t, [\pMask, #0]
|
|
37
|
+
ands \out0, \out0, \t
|
|
38
|
+
lsrs \t, \out0, #1
|
|
39
|
+
orrs \out0, \out0, \t
|
|
40
|
+
ldr \t, [\pMask, #4]
|
|
41
|
+
ands \out0, \out0, \t
|
|
42
|
+
lsrs \t, \out0, #2
|
|
43
|
+
orrs \out0, \out0, \t
|
|
44
|
+
ldr \t, [\pMask, #8]
|
|
45
|
+
ands \out0, \out0, \t
|
|
46
|
+
lsrs \t, \out0, #4
|
|
47
|
+
orrs \out0, \out0, \t
|
|
48
|
+
ldr \t, [\pMask, #12]
|
|
49
|
+
ands \out0, \out0, \t
|
|
50
|
+
lsrs \t, \out0, #8
|
|
51
|
+
orrs \out0, \out0, \t
|
|
52
|
+
|
|
53
|
+
mov \out1, \in1
|
|
54
|
+
ldr \t, [\pMask, #0]
|
|
55
|
+
ands \out1, \out1, \t
|
|
56
|
+
lsrs \t, \out1, #1
|
|
57
|
+
orrs \out1, \out1, \t
|
|
58
|
+
ldr \t, [\pMask, #4]
|
|
59
|
+
ands \out1, \out1, \t
|
|
60
|
+
lsrs \t, \out1, #2
|
|
61
|
+
orrs \out1, \out1, \t
|
|
62
|
+
ldr \t, [\pMask, #8]
|
|
63
|
+
ands \out1, \out1, \t
|
|
64
|
+
lsrs \t, \out1, #4
|
|
65
|
+
orrs \out1, \out1, \t
|
|
66
|
+
ldr \t, [\pMask, #12]
|
|
67
|
+
ands \out1, \out1, \t
|
|
68
|
+
lsrs \t, \out1, #8
|
|
69
|
+
orrs \out1, \out1, \t
|
|
70
|
+
|
|
71
|
+
lsls \out0, \out0, #16
|
|
72
|
+
lsrs \out0, \out0, #16
|
|
73
|
+
lsls \out1, \out1, #16
|
|
74
|
+
orrs \out0, \out0, \out1
|
|
75
|
+
|
|
76
|
+
mov \out1, \in0
|
|
77
|
+
ldr \t, [\pMask, #16]
|
|
78
|
+
ands \out1, \out1, \t
|
|
79
|
+
lsls \t, \out1, #1
|
|
80
|
+
orrs \out1, \out1, \t
|
|
81
|
+
ldr \t, [\pMask, #20]
|
|
82
|
+
ands \out1, \out1, \t
|
|
83
|
+
lsls \t, \out1, #2
|
|
84
|
+
orrs \out1, \out1, \t
|
|
85
|
+
ldr \t, [\pMask, #24]
|
|
86
|
+
ands \out1, \out1, \t
|
|
87
|
+
lsls \t, \out1, #4
|
|
88
|
+
orrs \out1, \out1, \t
|
|
89
|
+
ldr \t, [\pMask, #28]
|
|
90
|
+
ands \out1, \out1, \t
|
|
91
|
+
lsls \t, \out1, #8
|
|
92
|
+
orrs \out1, \out1, \t
|
|
93
|
+
|
|
94
|
+
mov \tt, \in1
|
|
95
|
+
ldr \t, [\pMask, #16]
|
|
96
|
+
ands \tt, \tt, \t
|
|
97
|
+
lsls \t, \tt, #1
|
|
98
|
+
orrs \tt, \tt, \t
|
|
99
|
+
ldr \t, [\pMask, #20]
|
|
100
|
+
ands \tt, \tt, \t
|
|
101
|
+
lsls \t, \tt, #2
|
|
102
|
+
orrs \tt, \tt, \t
|
|
103
|
+
ldr \t, [\pMask, #24]
|
|
104
|
+
ands \tt, \tt, \t
|
|
105
|
+
lsls \t, \tt, #4
|
|
106
|
+
orrs \tt, \tt, \t
|
|
107
|
+
ldr \t, [\pMask, #28]
|
|
108
|
+
ands \tt, \tt, \t
|
|
109
|
+
lsls \t, \tt, #8
|
|
110
|
+
orrs \tt, \tt, \t
|
|
111
|
+
|
|
112
|
+
lsrs \out1,\out1, #16
|
|
113
|
+
lsrs \tt, \tt, #16
|
|
114
|
+
lsls \tt, \tt, #16
|
|
115
|
+
orrs \out1,\out1,\tt
|
|
116
|
+
.endm
|
|
117
|
+
|
|
118
|
+
@ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
|
|
119
|
+
.macro fromBitInterleavingStep x, t, tt, pMask, maskofs, shift
|
|
120
|
+
|
|
121
|
+
@ t = (x ^ (x >> shift)) & mask@ x = x ^ t ^ (t << shift)@
|
|
122
|
+
lsrs \t, \x, #\shift
|
|
123
|
+
eors \t, \t, \x
|
|
124
|
+
ldr \tt, [\pMask, #\maskofs]
|
|
125
|
+
ands \t, \t, \tt
|
|
126
|
+
eors \x, \x, \t
|
|
127
|
+
lsls \t, \t, #\shift
|
|
128
|
+
eors \x, \x, \t
|
|
129
|
+
.endm
|
|
130
|
+
|
|
131
|
+
.macro fromBitInterleaving x0, x1, t, tt, pMask
|
|
132
|
+
movs \t, \x0 @ t = x0
|
|
133
|
+
lsls \x0, \x0, #16 @ x0 = (x0 & 0x0000FFFF) | (x1 << 16)@
|
|
134
|
+
lsrs \x0, \x0, #16
|
|
135
|
+
lsls \tt, \x1, #16
|
|
136
|
+
orrs \x0, \x0, \tt
|
|
137
|
+
lsrs \x1, \x1, #16 @ x1 = (t >> 16) | (x1 & 0xFFFF0000)@
|
|
138
|
+
lsls \x1, \x1, #16
|
|
139
|
+
lsrs \t, \t, #16
|
|
140
|
+
orrs \x1, \x1, \t
|
|
141
|
+
fromBitInterleavingStep \x0, \t, \tt, \pMask, 0, 8
|
|
142
|
+
fromBitInterleavingStep \x0, \t, \tt, \pMask, 4, 4
|
|
143
|
+
fromBitInterleavingStep \x0, \t, \tt, \pMask, 8, 2
|
|
144
|
+
fromBitInterleavingStep \x0, \t, \tt, \pMask, 12, 1
|
|
145
|
+
fromBitInterleavingStep \x1, \t, \tt, \pMask, 0, 8
|
|
146
|
+
fromBitInterleavingStep \x1, \t, \tt, \pMask, 4, 4
|
|
147
|
+
fromBitInterleavingStep \x1, \t, \tt, \pMask, 8, 2
|
|
148
|
+
fromBitInterleavingStep \x1, \t, \tt, \pMask, 12, 1
|
|
149
|
+
.endm
|
|
150
|
+
|
|
151
|
+
@ --- offsets in state
|
|
152
|
+
.equ Aba0 , 0*4
|
|
153
|
+
.equ Aba1 , 1*4
|
|
154
|
+
.equ Abe0 , 2*4
|
|
155
|
+
.equ Abe1 , 3*4
|
|
156
|
+
.equ Abi0 , 4*4
|
|
157
|
+
.equ Abi1 , 5*4
|
|
158
|
+
.equ Abo0 , 6*4
|
|
159
|
+
.equ Abo1 , 7*4
|
|
160
|
+
.equ Abu0 , 8*4
|
|
161
|
+
.equ Abu1 , 9*4
|
|
162
|
+
.equ Aga0 , 10*4
|
|
163
|
+
.equ Aga1 , 11*4
|
|
164
|
+
.equ Age0 , 12*4
|
|
165
|
+
.equ Age1 , 13*4
|
|
166
|
+
.equ Agi0 , 14*4
|
|
167
|
+
.equ Agi1 , 15*4
|
|
168
|
+
.equ Ago0 , 16*4
|
|
169
|
+
.equ Ago1 , 17*4
|
|
170
|
+
.equ Agu0 , 18*4
|
|
171
|
+
.equ Agu1 , 19*4
|
|
172
|
+
.equ Aka0 , 20*4
|
|
173
|
+
.equ Aka1 , 21*4
|
|
174
|
+
.equ Ake0 , 22*4
|
|
175
|
+
.equ Ake1 , 23*4
|
|
176
|
+
.equ Aki0 , 24*4
|
|
177
|
+
.equ Aki1 , 25*4
|
|
178
|
+
.equ Ako0 , 26*4
|
|
179
|
+
.equ Ako1 , 27*4
|
|
180
|
+
.equ Aku0 , 28*4
|
|
181
|
+
.equ Aku1 , 29*4
|
|
182
|
+
.equ Ama0 , 30*4
|
|
183
|
+
.equ Ama1 , 31*4
|
|
184
|
+
.equ Ame0 , 32*4
|
|
185
|
+
.equ Ame1 , 33*4
|
|
186
|
+
.equ Ami0 , 34*4
|
|
187
|
+
.equ Ami1 , 35*4
|
|
188
|
+
.equ Amo0 , 36*4
|
|
189
|
+
.equ Amo1 , 37*4
|
|
190
|
+
.equ Amu0 , 38*4
|
|
191
|
+
.equ Amu1 , 39*4
|
|
192
|
+
.equ Asa0 , 40*4
|
|
193
|
+
.equ Asa1 , 41*4
|
|
194
|
+
.equ Ase0 , 42*4
|
|
195
|
+
.equ Ase1 , 43*4
|
|
196
|
+
.equ Asi0 , 44*4
|
|
197
|
+
.equ Asi1 , 45*4
|
|
198
|
+
.equ Aso0 , 46*4
|
|
199
|
+
.equ Aso1 , 47*4
|
|
200
|
+
.equ Asu0 , 48*4
|
|
201
|
+
.equ Asu1 , 49*4
|
|
202
|
+
|
|
203
|
+
@ --- offsets on stack
|
|
204
|
+
.equ mDa0 , 0*4
|
|
205
|
+
.equ mDa1 , 1*4
|
|
206
|
+
.equ mDo0 , 2*4
|
|
207
|
+
.equ mDo1 , 3*4
|
|
208
|
+
.equ mDi0 , 4*4
|
|
209
|
+
.equ mRC , 5*4
|
|
210
|
+
.equ mSize , 6*4
|
|
211
|
+
|
|
212
|
+
@ --- macros
|
|
213
|
+
|
|
214
|
+
.macro load result,prev,curr,last
|
|
215
|
+
|
|
216
|
+
.if \prev >= (32*4) && \curr < (32*4)
|
|
217
|
+
subs r0, #32*4
|
|
218
|
+
.elseif \prev < (32*4) && \curr >= (32*4)
|
|
219
|
+
adds r0, #32*4
|
|
220
|
+
.endif
|
|
221
|
+
.if \curr >= (32*4)
|
|
222
|
+
ldr \result, [r0, #\curr-32*4]
|
|
223
|
+
.if \last == 1
|
|
224
|
+
subs r0, #32*4
|
|
225
|
+
.endif
|
|
226
|
+
.else
|
|
227
|
+
ldr \result, [r0, #\curr]
|
|
228
|
+
.endif
|
|
229
|
+
.endm
|
|
230
|
+
|
|
231
|
+
.macro store result,prev,curr,last
|
|
232
|
+
|
|
233
|
+
.if \prev >= (32*4) && \curr < (32*4)
|
|
234
|
+
subs r0, #32*4
|
|
235
|
+
.elseif \prev < (32*4) && \curr >= (32*4)
|
|
236
|
+
adds r0, #32*4
|
|
237
|
+
.endif
|
|
238
|
+
.if \curr >= (32*4)
|
|
239
|
+
str \result, [r0, #\curr-32*4]
|
|
240
|
+
.if \last == 1
|
|
241
|
+
subs r0, #32*4
|
|
242
|
+
.endif
|
|
243
|
+
.else
|
|
244
|
+
str \result, [r0, #\curr]
|
|
245
|
+
.endif
|
|
246
|
+
.endm
|
|
247
|
+
|
|
248
|
+
.macro xor5 result,b,g,k,m,s, prev, last
|
|
249
|
+
|
|
250
|
+
load \result, 0, \b, 0
|
|
251
|
+
load r1, \b, \g, 0
|
|
252
|
+
eors \result, \result, r1
|
|
253
|
+
load r1, \g, \k, 0
|
|
254
|
+
eors \result, \result, r1
|
|
255
|
+
load r1, \k, \m, 0
|
|
256
|
+
eors \result, \result, r1
|
|
257
|
+
load r1, \m, \s, 1
|
|
258
|
+
eors \result, \result, r1
|
|
259
|
+
.endm
|
|
260
|
+
|
|
261
|
+
.macro xorrol result, aa, bb
|
|
262
|
+
movs \result, \bb
|
|
263
|
+
rors \result, r2
|
|
264
|
+
eors \result, \result, \aa
|
|
265
|
+
.endm
|
|
266
|
+
|
|
267
|
+
.macro xorrolR2 aa, bb
|
|
268
|
+
rors \bb, r2
|
|
269
|
+
eors \bb, \bb, \aa
|
|
270
|
+
.endm
|
|
271
|
+
|
|
272
|
+
.macro xorh result, aa, bb
|
|
273
|
+
mov r1, \bb
|
|
274
|
+
eors r1, r1, \aa
|
|
275
|
+
mov \result, r1
|
|
276
|
+
.endm
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
.macro xandnot resofs, aa, bb, cc, prev, last
|
|
280
|
+
movs r1, \cc
|
|
281
|
+
bics r1, r1, \bb
|
|
282
|
+
eors r1, r1, \aa
|
|
283
|
+
store r1, \prev, \resofs, \last
|
|
284
|
+
.endm
|
|
285
|
+
|
|
286
|
+
.macro xandnotR4 resofs, aa, bb, cc, prev, last
|
|
287
|
+
bics \cc, \cc, \bb
|
|
288
|
+
eors \cc, \cc, \aa
|
|
289
|
+
store \cc, \prev, \resofs, \last
|
|
290
|
+
.endm
|
|
291
|
+
|
|
292
|
+
.macro KeccakThetaRhoPiChiIota aA1, aDax, aA2, aDex, rot2, aA3, aDix, rot3, aA4, aDox, rot4, aA5, aDux, rot5, offset, last
|
|
293
|
+
load r3, 0, \aA1, 0
|
|
294
|
+
load r4, \aA1, \aA2, 0
|
|
295
|
+
load r5, \aA2, \aA3, 0
|
|
296
|
+
load r6, \aA3, \aA4, 0
|
|
297
|
+
load r7, \aA4, \aA5, 0
|
|
298
|
+
|
|
299
|
+
mov r1, \aDax
|
|
300
|
+
eors r3, r3, r1
|
|
301
|
+
eors r5, r5, \aDix
|
|
302
|
+
mov r1, \aDex
|
|
303
|
+
eors r4, r4, r1
|
|
304
|
+
mov r1, \aDox
|
|
305
|
+
eors r6, r6, r1
|
|
306
|
+
mov r1, \aDux
|
|
307
|
+
eors r7, r7, r1
|
|
308
|
+
movs r1, #32-\rot2
|
|
309
|
+
rors r4, r1
|
|
310
|
+
movs r1, #32-\rot3
|
|
311
|
+
rors r5, r1
|
|
312
|
+
movs r1, #32-\rot4
|
|
313
|
+
rors r6, r1
|
|
314
|
+
movs r1, #32-\rot5
|
|
315
|
+
rors r7, r1
|
|
316
|
+
xandnot \aA2, r4, r5, r6, \aA5, 0
|
|
317
|
+
xandnot \aA3, r5, r6, r7, \aA2, 0
|
|
318
|
+
xandnot \aA4, r6, r7, r3, \aA3, 0
|
|
319
|
+
xandnot \aA5, r7, r3, r4, \aA4, 1
|
|
320
|
+
ldr r1, [sp, #mRC]
|
|
321
|
+
bics r5, r5, r4
|
|
322
|
+
ldr r4, [r1, #\offset]
|
|
323
|
+
eors r3, r3, r5
|
|
324
|
+
eors r3, r3, r4
|
|
325
|
+
.if \last == 1
|
|
326
|
+
adds r1, #32
|
|
327
|
+
ldr r2, [r1]
|
|
328
|
+
str r1, [sp, #mRC]
|
|
329
|
+
cmp r2, #0xFF
|
|
330
|
+
.endif
|
|
331
|
+
str r3, [r0, #\aA1]
|
|
332
|
+
.endm
|
|
333
|
+
|
|
334
|
+
.macro KeccakThetaRhoPiChi aB1, aA1, aDax, rot1, aB2, aA2, aDex, rot2, aB3, aA3, aDix, rot3, aB4, aA4, aDox, rot4, aB5, aA5, aDux, rot5
|
|
335
|
+
load \aB1, 0, \aA1, 0
|
|
336
|
+
load \aB2, \aA1, \aA2, 0
|
|
337
|
+
load \aB3, \aA2, \aA3, 0
|
|
338
|
+
load \aB4, \aA3, \aA4, 0
|
|
339
|
+
load \aB5, \aA4, \aA5, 0
|
|
340
|
+
|
|
341
|
+
mov r1, \aDax
|
|
342
|
+
eors \aB1, \aB1, r1
|
|
343
|
+
eors \aB3, \aB3, \aDix
|
|
344
|
+
mov r1, \aDex
|
|
345
|
+
eors \aB2, \aB2, r1
|
|
346
|
+
mov r1, \aDox
|
|
347
|
+
eors \aB4, \aB4, r1
|
|
348
|
+
mov r1, \aDux
|
|
349
|
+
eors \aB5, \aB5, r1
|
|
350
|
+
movs r1, #32-\rot1
|
|
351
|
+
rors \aB1, r1
|
|
352
|
+
.if \rot2 > 0
|
|
353
|
+
movs r1, #32-\rot2
|
|
354
|
+
rors \aB2, r1
|
|
355
|
+
.endif
|
|
356
|
+
movs r1, #32-\rot3
|
|
357
|
+
rors \aB3, r1
|
|
358
|
+
movs r1, #32-\rot4
|
|
359
|
+
rors \aB4, r1
|
|
360
|
+
movs r1, #32-\rot5
|
|
361
|
+
rors \aB5, r1
|
|
362
|
+
xandnot \aA1, r3, r4, r5, \aA5, 0
|
|
363
|
+
xandnot \aA2, r4, r5, r6, \aA1, 0
|
|
364
|
+
xandnotR4 \aA5, r7, r3, r4, \aA2, 0
|
|
365
|
+
xandnotR4 \aA4, r6, r7, r3, \aA5, 0
|
|
366
|
+
xandnotR4 \aA3, r5, r6, r7, \aA4, 1
|
|
367
|
+
.endm
|
|
368
|
+
|
|
369
|
+
.macro KeccakRound0
|
|
370
|
+
movs r2, #31
|
|
371
|
+
xor5 r3, Abu0, Agu0, Aku0, Amu0, Asu0, 0, 0
|
|
372
|
+
xor5 r7, Abe1, Age1, Ake1, Ame1, Ase1, Asu0, 0
|
|
373
|
+
xorrol r6, r3, r7
|
|
374
|
+
str r6, [sp, #mDa0]
|
|
375
|
+
xor5 r6, Abu1, Agu1, Aku1, Amu1, Asu1, Ase1, 0
|
|
376
|
+
xor5 r5, Abe0, Age0, Ake0, Ame0, Ase0, Asu1, 0
|
|
377
|
+
xorh r8, r6, r5
|
|
378
|
+
mov lr, r5
|
|
379
|
+
str r1, [sp, #mDa1]
|
|
380
|
+
|
|
381
|
+
xor5 r5, Abi0, Agi0, Aki0, Ami0, Asi0, Ase0, 0
|
|
382
|
+
xorrolR2 r5, r6
|
|
383
|
+
str r6, [sp, #mDo0]
|
|
384
|
+
xor5 r4, Abi1, Agi1, Aki1, Ami1, Asi1, Asi0, 0
|
|
385
|
+
eors r3, r3, r4
|
|
386
|
+
str r3, [sp, #mDo1]
|
|
387
|
+
|
|
388
|
+
xor5 r3, Aba0, Aga0, Aka0, Ama0, Asa0, Asi1, 0
|
|
389
|
+
xorrolR2 r3, r4
|
|
390
|
+
mov r10, r4
|
|
391
|
+
xor5 r6, Aba1, Aga1, Aka1, Ama1, Asa1, Asa0, 0
|
|
392
|
+
xorh r11, r6, r5
|
|
393
|
+
|
|
394
|
+
xor5 r4, Abo1, Ago1, Ako1, Amo1, Aso1, Asa1, 0
|
|
395
|
+
mov r1, lr
|
|
396
|
+
xorrol r5, r1, r4
|
|
397
|
+
str r5, [sp, #mDi0]
|
|
398
|
+
xor5 r5, Abo0, Ago0, Ako0, Amo0, Aso0, Aso1, 1
|
|
399
|
+
eors r7, r7, r5
|
|
400
|
+
|
|
401
|
+
xorrolR2 r5, r6
|
|
402
|
+
mov r12, r6
|
|
403
|
+
eors r4, r4, r3
|
|
404
|
+
mov lr, r4
|
|
405
|
+
movs r2, r7
|
|
406
|
+
|
|
407
|
+
ldr r1, [sp, #mDo0]
|
|
408
|
+
mov r9, r1
|
|
409
|
+
KeccakThetaRhoPiChi r5, Aka1, r8, 2, r6, Ame1, r11, 23, r7, Asi1, r2, 31, r3, Abo0, r9, 14, r4, Agu0, r12, 10
|
|
410
|
+
KeccakThetaRhoPiChi r7, Asa1, r8, 9, r3, Abe0, r10, 0, r4, Agi1, r2, 3, r5, Ako0, r9, 12, r6, Amu1, lr, 4
|
|
411
|
+
ldr r1, [sp, #mDa0]
|
|
412
|
+
mov r8, r1
|
|
413
|
+
KeccakThetaRhoPiChi r4, Aga0, r8, 18, r5, Ake0, r10, 5, r6, Ami1, r2, 8, r7, Aso0, r9, 28, r3, Abu1, lr, 14
|
|
414
|
+
KeccakThetaRhoPiChi r6, Ama0, r8, 20, r7, Ase1, r11, 1, r3, Abi1, r2, 31, r4, Ago0, r9, 27, r5, Aku0, r12, 19
|
|
415
|
+
ldr r1, [sp, #mDo1]
|
|
416
|
+
mov r9, r1
|
|
417
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Age0, r10, 22, Aki1, r2, 22, Amo1, r9, 11, Asu0, r12, 7, 0, 0
|
|
418
|
+
|
|
419
|
+
ldr r2, [sp, #mDi0]
|
|
420
|
+
KeccakThetaRhoPiChi r5, Aka0, r8, 1, r6, Ame0, r10, 22, r7, Asi0, r2, 30, r3, Abo1, r9, 14, r4, Agu1, lr, 10
|
|
421
|
+
KeccakThetaRhoPiChi r7, Asa0, r8, 9, r3, Abe1, r11, 1, r4, Agi0, r2, 3, r5, Ako1, r9, 13, r6, Amu0, r12, 4
|
|
422
|
+
ldr r1, [sp, #mDa1]
|
|
423
|
+
mov r8, r1
|
|
424
|
+
KeccakThetaRhoPiChi r4, Aga1, r8, 18, r5, Ake1, r11, 5, r6, Ami0, r2, 7, r7, Aso1, r9, 28, r3, Abu0, r12, 13
|
|
425
|
+
KeccakThetaRhoPiChi r6, Ama1, r8, 21, r7, Ase0, r10, 1, r3, Abi0, r2, 31, r4, Ago1, r9, 28, r5, Aku1, lr, 20
|
|
426
|
+
ldr r1, [sp, #mDo0]
|
|
427
|
+
mov r9, r1
|
|
428
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Age1, r11, 22, Aki0, r2, 21, Amo0, r9, 10, Asu1, lr, 7, 4, 0
|
|
429
|
+
.endm
|
|
430
|
+
|
|
431
|
+
.macro KeccakRound1
|
|
432
|
+
|
|
433
|
+
movs r2, #31
|
|
434
|
+
xor5 r3, Asu0, Agu0, Amu0, Abu1, Aku1, 0, 0
|
|
435
|
+
xor5 r7, Age1, Ame0, Abe0, Ake1, Ase1, Aku1, 0
|
|
436
|
+
xorrol r6, r3, r7
|
|
437
|
+
str r6, [sp, #mDa0]
|
|
438
|
+
xor5 r6, Asu1, Agu1, Amu1, Abu0, Aku0, Ase1, 0
|
|
439
|
+
xor5 r5, Age0, Ame1, Abe1, Ake0, Ase0, Aku0, 0
|
|
440
|
+
xorh r8, r6, r5
|
|
441
|
+
mov lr, r5
|
|
442
|
+
str r1, [sp, #mDa1]
|
|
443
|
+
|
|
444
|
+
xor5 r5, Aki1, Asi1, Agi0, Ami1, Abi0, Ase0, 0
|
|
445
|
+
xorrolR2 r5, r6
|
|
446
|
+
str r6, [sp, #mDo0]
|
|
447
|
+
xor5 r4, Aki0, Asi0, Agi1, Ami0, Abi1, Abi0, 0
|
|
448
|
+
eors r3, r3, r4
|
|
449
|
+
str r3, [sp, #mDo1]
|
|
450
|
+
|
|
451
|
+
xor5 r3, Aba0, Aka1, Asa0, Aga0, Ama1, Abi1, 0
|
|
452
|
+
xorrolR2 r3, r4
|
|
453
|
+
mov r10, r4
|
|
454
|
+
xor5 r6, Aba1, Aka0, Asa1, Aga1, Ama0, Ama1, 0
|
|
455
|
+
xorh r11, r6, r5
|
|
456
|
+
|
|
457
|
+
xor5 r4, Amo0, Abo1, Ako0, Aso1, Ago0, Ama0, 0
|
|
458
|
+
mov r1, lr
|
|
459
|
+
xorrol r5, r1, r4
|
|
460
|
+
str r5, [sp, #mDi0]
|
|
461
|
+
xor5 r5, Amo1, Abo0, Ako1, Aso0, Ago1, Ago0, 1
|
|
462
|
+
eors r7, r7, r5
|
|
463
|
+
|
|
464
|
+
xorrolR2 r5, r6
|
|
465
|
+
mov r12, r6
|
|
466
|
+
eors r4, r4, r3
|
|
467
|
+
mov lr, r4
|
|
468
|
+
movs r2, r7
|
|
469
|
+
|
|
470
|
+
ldr r1, [sp, #mDo0]
|
|
471
|
+
mov r9, r1
|
|
472
|
+
KeccakThetaRhoPiChi r5, Asa1, r8, 2, r6, Ake1, r11, 23, r7, Abi1, r2, 31, r3, Amo1, r9, 14, r4, Agu0, r12, 10
|
|
473
|
+
KeccakThetaRhoPiChi r7, Ama0, r8, 9, r3, Age0, r10, 0, r4, Asi0, r2, 3, r5, Ako1, r9, 12, r6, Abu0, lr, 4
|
|
474
|
+
ldr r1, [sp, #mDa0]
|
|
475
|
+
mov r8, r1
|
|
476
|
+
KeccakThetaRhoPiChi r4, Aka1, r8, 18, r5, Abe1, r10, 5, r6, Ami0, r2, 8, r7, Ago1, r9, 28, r3, Asu1, lr, 14
|
|
477
|
+
KeccakThetaRhoPiChi r6, Aga0, r8, 20, r7, Ase1, r11, 1, r3, Aki0, r2, 31, r4, Abo0, r9, 27, r5, Amu0, r12, 19
|
|
478
|
+
ldr r1, [sp, #mDo1]
|
|
479
|
+
mov r9, r1
|
|
480
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Ame1, r10, 22, Agi1, r2, 22, Aso1, r9, 11, Aku1, r12, 7, 8, 0
|
|
481
|
+
|
|
482
|
+
ldr r2, [sp, #mDi0]
|
|
483
|
+
KeccakThetaRhoPiChi r5, Asa0, r8, 1, r6, Ake0, r10, 22, r7, Abi0, r2, 30, r3, Amo0, r9, 14, r4, Agu1, lr, 10
|
|
484
|
+
KeccakThetaRhoPiChi r7, Ama1, r8, 9, r3, Age1, r11, 1, r4, Asi1, r2, 3, r5, Ako0, r9, 13, r6, Abu1, r12, 4
|
|
485
|
+
ldr r1, [sp, #mDa1]
|
|
486
|
+
mov r8, r1
|
|
487
|
+
KeccakThetaRhoPiChi r4, Aka0, r8, 18, r5, Abe0, r11, 5, r6, Ami1, r2, 7, r7, Ago0, r9, 28, r3, Asu0, r12, 13
|
|
488
|
+
KeccakThetaRhoPiChi r6, Aga1, r8, 21, r7, Ase0, r10, 1, r3, Aki1, r2, 31, r4, Abo1, r9, 28, r5, Amu1, lr, 20
|
|
489
|
+
ldr r1, [sp, #mDo0]
|
|
490
|
+
mov r9, r1
|
|
491
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Ame0, r11, 22, Agi0, r2, 21, Aso0, r9, 10, Aku0, lr, 7, 12, 0
|
|
492
|
+
.endm
|
|
493
|
+
|
|
494
|
+
.macro KeccakRound2
|
|
495
|
+
|
|
496
|
+
movs r2, #31
|
|
497
|
+
xor5 r3, Aku1, Agu0, Abu1, Asu1, Amu1, 0, 0
|
|
498
|
+
xor5 r7, Ame0, Ake0, Age0, Abe0, Ase1, Amu1, 0
|
|
499
|
+
xorrol r6, r3, r7
|
|
500
|
+
str r6, [sp, #mDa0]
|
|
501
|
+
xor5 r6, Aku0, Agu1, Abu0, Asu0, Amu0, Ase1, 0
|
|
502
|
+
xor5 r5, Ame1, Ake1, Age1, Abe1, Ase0, Amu0, 0
|
|
503
|
+
xorh r8, r6, r5
|
|
504
|
+
mov lr, r5
|
|
505
|
+
str r1, [sp, #mDa1]
|
|
506
|
+
|
|
507
|
+
xor5 r5, Agi1, Abi1, Asi1, Ami0, Aki1, Ase0, 0
|
|
508
|
+
xorrolR2 r5, r6
|
|
509
|
+
str r6, [sp, #mDo0]
|
|
510
|
+
xor5 r4, Agi0, Abi0, Asi0, Ami1, Aki0, Aki1, 0
|
|
511
|
+
eors r3, r3, r4
|
|
512
|
+
str r3, [sp, #mDo1]
|
|
513
|
+
|
|
514
|
+
xor5 r3, Aba0, Asa1, Ama1, Aka1, Aga1, Aki0, 0
|
|
515
|
+
xorrolR2 r3, r4
|
|
516
|
+
mov r10, r4
|
|
517
|
+
xor5 r6, Aba1, Asa0, Ama0, Aka0, Aga0, Aga1, 0
|
|
518
|
+
xorh r11, r6, r5
|
|
519
|
+
|
|
520
|
+
xor5 r4, Aso0, Amo0, Ako1, Ago0, Abo0, Aga0, 0
|
|
521
|
+
mov r1, lr
|
|
522
|
+
xorrol r5, r1, r4
|
|
523
|
+
str r5, [sp, #mDi0]
|
|
524
|
+
xor5 r5, Aso1, Amo1, Ako0, Ago1, Abo1, Abo0, 1
|
|
525
|
+
eors r7, r7, r5
|
|
526
|
+
|
|
527
|
+
xorrolR2 r5, r6
|
|
528
|
+
mov r12, r6
|
|
529
|
+
eors r4, r4, r3
|
|
530
|
+
mov lr, r4
|
|
531
|
+
movs r2, r7
|
|
532
|
+
|
|
533
|
+
ldr r1, [sp, #mDo0]
|
|
534
|
+
mov r9, r1
|
|
535
|
+
KeccakThetaRhoPiChi r5, Ama0, r8, 2, r6, Abe0, r11, 23, r7, Aki0, r2, 31, r3, Aso1, r9, 14, r4, Agu0, r12, 10
|
|
536
|
+
KeccakThetaRhoPiChi r7, Aga0, r8, 9, r3, Ame1, r10, 0, r4, Abi0, r2, 3, r5, Ako0, r9, 12, r6, Asu0, lr, 4
|
|
537
|
+
ldr r1, [sp, #mDa0]
|
|
538
|
+
mov r8, r1
|
|
539
|
+
KeccakThetaRhoPiChi r4, Asa1, r8, 18, r5, Age1, r10, 5, r6, Ami1, r2, 8, r7, Abo1, r9, 28, r3, Aku0, lr, 14
|
|
540
|
+
KeccakThetaRhoPiChi r6, Aka1, r8, 20, r7, Ase1, r11, 1, r3, Agi0, r2, 31, r4, Amo1, r9, 27, r5, Abu1, r12, 19
|
|
541
|
+
ldr r1, [sp, #mDo1]
|
|
542
|
+
mov r9, r1
|
|
543
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Ake1, r10, 22, Asi0, r2, 22, Ago0, r9, 11, Amu1, r12, 7, 16, 0
|
|
544
|
+
|
|
545
|
+
ldr r2, [sp, #mDi0]
|
|
546
|
+
KeccakThetaRhoPiChi r5, Ama1, r8, 1, r6, Abe1, r10, 22, r7, Aki1, r2, 30, r3, Aso0, r9, 14, r4, Agu1, lr, 10
|
|
547
|
+
KeccakThetaRhoPiChi r7, Aga1, r8, 9, r3, Ame0, r11, 1, r4, Abi1, r2, 3, r5, Ako1, r9, 13, r6, Asu1, r12, 4
|
|
548
|
+
ldr r1, [sp, #mDa1]
|
|
549
|
+
mov r8, r1
|
|
550
|
+
KeccakThetaRhoPiChi r4, Asa0, r8, 18, r5, Age0, r11, 5, r6, Ami0, r2, 7, r7, Abo0, r9, 28, r3, Aku1, r12, 13
|
|
551
|
+
KeccakThetaRhoPiChi r6, Aka0, r8, 21, r7, Ase0, r10, 1, r3, Agi1, r2, 31, r4, Amo0, r9, 28, r5, Abu0, lr, 20
|
|
552
|
+
ldr r1, [sp, #mDo0]
|
|
553
|
+
mov r9, r1
|
|
554
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Ake0, r11, 22, Asi1, r2, 21, Ago1, r9, 10, Amu0, lr, 7, 20, 0
|
|
555
|
+
.endm
|
|
556
|
+
|
|
557
|
+
.macro KeccakRound3
|
|
558
|
+
|
|
559
|
+
movs r2, #31
|
|
560
|
+
xor5 r3, Amu1, Agu0, Asu1, Aku0, Abu0, 0, 0
|
|
561
|
+
xor5 r7, Ake0, Abe1, Ame1, Age0, Ase1, Abu0, 0
|
|
562
|
+
xorrol r6, r3, r7
|
|
563
|
+
str r6, [sp, #mDa0]
|
|
564
|
+
xor5 r6, Amu0, Agu1, Asu0, Aku1, Abu1, Ase1, 0
|
|
565
|
+
xor5 r5, Ake1, Abe0, Ame0, Age1, Ase0, Abu1, 0
|
|
566
|
+
xorh r8, r6, r5
|
|
567
|
+
mov lr, r5
|
|
568
|
+
str r1, [sp, #mDa1]
|
|
569
|
+
|
|
570
|
+
xor5 r5, Asi0, Aki0, Abi1, Ami1, Agi1, Ase0, 0
|
|
571
|
+
xorrolR2 r5, r6
|
|
572
|
+
str r6, [sp, #mDo0]
|
|
573
|
+
xor5 r4, Asi1, Aki1, Abi0, Ami0, Agi0, Agi1, 0
|
|
574
|
+
eors r3, r3, r4
|
|
575
|
+
str r3, [sp, #mDo1]
|
|
576
|
+
|
|
577
|
+
xor5 r3, Aba0, Ama0, Aga1, Asa1, Aka0, Agi0, 0
|
|
578
|
+
xorrolR2 r3, r4
|
|
579
|
+
mov r10, r4
|
|
580
|
+
xor5 r6, Aba1, Ama1, Aga0, Asa0, Aka1, Aka0, 0
|
|
581
|
+
xorh r11, r6, r5
|
|
582
|
+
|
|
583
|
+
xor5 r4, Ago1, Aso0, Ako0, Abo0, Amo1, Aka1, 0
|
|
584
|
+
mov r1, lr
|
|
585
|
+
xorrol r5, r1, r4
|
|
586
|
+
str r5, [sp, #mDi0]
|
|
587
|
+
xor5 r5, Ago0, Aso1, Ako1, Abo1, Amo0, Amo1, 1
|
|
588
|
+
eors r7, r7, r5
|
|
589
|
+
|
|
590
|
+
xorrolR2 r5, r6
|
|
591
|
+
mov r12, r6
|
|
592
|
+
eors r4, r4, r3
|
|
593
|
+
mov lr, r4
|
|
594
|
+
movs r2, r7
|
|
595
|
+
|
|
596
|
+
ldr r1, [sp, #mDo0]
|
|
597
|
+
mov r9, r1
|
|
598
|
+
KeccakThetaRhoPiChi r5, Aga0, r8, 2, r6, Age0, r11, 23, r7, Agi0, r2, 31, r3, Ago0, r9, 14, r4, Agu0, r12, 10
|
|
599
|
+
KeccakThetaRhoPiChi r7, Aka1, r8, 9, r3, Ake1, r10, 0, r4, Aki1, r2, 3, r5, Ako1, r9, 12, r6, Aku1, lr, 4
|
|
600
|
+
ldr r1, [sp, #mDa0]
|
|
601
|
+
mov r8, r1
|
|
602
|
+
KeccakThetaRhoPiChi r4, Ama0, r8, 18, r5, Ame0, r10, 5, r6, Ami0, r2, 8, r7, Amo0, r9, 28, r3, Amu0, lr, 14
|
|
603
|
+
KeccakThetaRhoPiChi r6, Asa1, r8, 20, r7, Ase1, r11, 1, r3, Asi1, r2, 31, r4, Aso1, r9, 27, r5, Asu1, r12, 19
|
|
604
|
+
ldr r1, [sp, #mDo1]
|
|
605
|
+
mov r9, r1
|
|
606
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Abe0, r10, 22, Abi0, r2, 22, Abo0, r9, 11, Abu0, r12, 7, 24, 0
|
|
607
|
+
|
|
608
|
+
ldr r2, [sp, #mDi0]
|
|
609
|
+
KeccakThetaRhoPiChi r5, Aga1, r8, 1, r6, Age1, r10, 22, r7, Agi1, r2, 30, r3, Ago1, r9, 14, r4, Agu1, lr, 10
|
|
610
|
+
KeccakThetaRhoPiChi r7, Aka0, r8, 9, r3, Ake0, r11, 1, r4, Aki0, r2, 3, r5, Ako0, r9, 13, r6, Aku0, r12, 4
|
|
611
|
+
ldr r1, [sp, #mDa1]
|
|
612
|
+
mov r8, r1
|
|
613
|
+
KeccakThetaRhoPiChi r4, Ama1, r8, 18, r5, Ame1, r11, 5, r6, Ami1, r2, 7, r7, Amo1, r9, 28, r3, Amu1, r12, 13
|
|
614
|
+
KeccakThetaRhoPiChi r6, Asa0, r8, 21, r7, Ase0, r10, 1, r3, Asi0, r2, 31, r4, Aso0, r9, 28, r5, Asu0, lr, 20
|
|
615
|
+
ldr r1, [sp, #mDo0]
|
|
616
|
+
mov r9, r1
|
|
617
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Abe1, r11, 22, Abi1, r2, 21, Abo1, r9, 10, Abu1, lr, 7, 28, 1
|
|
618
|
+
.endm
|
|
619
|
+
|
|
620
|
+
@----------------------------------------------------------------------------
|
|
621
|
+
@
|
|
622
|
+
@ void KeccakP1600_StaticInitialize( void )
|
|
623
|
+
@
|
|
624
|
+
.align 8
|
|
625
|
+
.global KeccakP1600_StaticInitialize
|
|
626
|
+
.type KeccakP1600_StaticInitialize, %function;
|
|
627
|
+
KeccakP1600_StaticInitialize:
|
|
628
|
+
bx lr
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
@----------------------------------------------------------------------------
|
|
632
|
+
@
|
|
633
|
+
@ void KeccakP1600_Initialize(void *state)
|
|
634
|
+
@
|
|
635
|
+
.align 8
|
|
636
|
+
.global KeccakP1600_Initialize
|
|
637
|
+
.type KeccakP1600_Initialize, %function;
|
|
638
|
+
KeccakP1600_Initialize:
|
|
639
|
+
push {r4 - r5}
|
|
640
|
+
movs r1, #0
|
|
641
|
+
movs r2, #0
|
|
642
|
+
movs r3, #0
|
|
643
|
+
movs r4, #0
|
|
644
|
+
movs r5, #0
|
|
645
|
+
stmia r0!, { r1 - r5 }
|
|
646
|
+
stmia r0!, { r1 - r5 }
|
|
647
|
+
stmia r0!, { r1 - r5 }
|
|
648
|
+
stmia r0!, { r1 - r5 }
|
|
649
|
+
stmia r0!, { r1 - r5 }
|
|
650
|
+
stmia r0!, { r1 - r5 }
|
|
651
|
+
stmia r0!, { r1 - r5 }
|
|
652
|
+
stmia r0!, { r1 - r5 }
|
|
653
|
+
stmia r0!, { r1 - r5 }
|
|
654
|
+
stmia r0!, { r1 - r5 }
|
|
655
|
+
pop {r4 - r5}
|
|
656
|
+
bx lr
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
@ ----------------------------------------------------------------------------
|
|
660
|
+
@
|
|
661
|
+
@ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
662
|
+
@
|
|
663
|
+
.align 8
|
|
664
|
+
.global KeccakP1600_AddByte
|
|
665
|
+
.type KeccakP1600_AddByte, %function;
|
|
666
|
+
KeccakP1600_AddByte:
|
|
667
|
+
push {r4 - r7}
|
|
668
|
+
mov r4, r8
|
|
669
|
+
mov r5, r9
|
|
670
|
+
push {r4 - r5}
|
|
671
|
+
lsrs r4, r2, #3 @ offset &= ~7
|
|
672
|
+
lsls r4, r4, #3
|
|
673
|
+
adds r0, r0, r4 @ add whole lane offset to state pointer
|
|
674
|
+
lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
|
|
675
|
+
lsrs r2, r2, #29
|
|
676
|
+
adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
677
|
+
movs r4, #0
|
|
678
|
+
movs r5, #0
|
|
679
|
+
push { r4 - r5 }
|
|
680
|
+
add r2, r2, sp
|
|
681
|
+
strb r1, [r2]
|
|
682
|
+
pop { r4 - r5 }
|
|
683
|
+
mov r8, r4
|
|
684
|
+
mov r9, r5
|
|
685
|
+
toBitInterleaving r8, r9, r4, r5, r6, r2, r7
|
|
686
|
+
ldr r6, [r0]
|
|
687
|
+
eors r4, r4, r6
|
|
688
|
+
ldr r6, [r0, #4]
|
|
689
|
+
eors r5, r5, r6
|
|
690
|
+
stmia r0!, { r4, r5 }
|
|
691
|
+
pop {r4 - r5}
|
|
692
|
+
mov r8, r4
|
|
693
|
+
mov r9, r5
|
|
694
|
+
pop {r4 - r7}
|
|
695
|
+
bx lr
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
@----------------------------------------------------------------------------
|
|
699
|
+
@
|
|
700
|
+
@ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
701
|
+
@
|
|
702
|
+
.align 8
|
|
703
|
+
.global KeccakP1600_AddBytes
|
|
704
|
+
.type KeccakP1600_AddBytes, %function;
|
|
705
|
+
KeccakP1600_AddBytes:
|
|
706
|
+
cmp r3, #0 @ .if length != 0
|
|
707
|
+
beq KeccakP1600_AddBytes_Exit1
|
|
708
|
+
push {r4 - r6, lr} @ then
|
|
709
|
+
mov r4, r8
|
|
710
|
+
mov r5, r9
|
|
711
|
+
mov r6, r10
|
|
712
|
+
push {r4 - r7}
|
|
713
|
+
lsrs r4, r2, #3 @ offset &= ~7
|
|
714
|
+
lsls r4, r4, #3
|
|
715
|
+
adds r0, r0, r4 @ add whole lane offset to state pointer
|
|
716
|
+
lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
|
|
717
|
+
lsrs r2, r2, #29
|
|
718
|
+
beq KeccakP1600_AddBytes_CheckLanes @ .if offset != 0
|
|
719
|
+
movs r4, r3 @ then, do remaining bytes in first lane
|
|
720
|
+
movs r5, #8
|
|
721
|
+
subs r5, r2 @ max size in lane = 8 - offset
|
|
722
|
+
cmp r4, r5
|
|
723
|
+
ble KeccakP1600_AddBytes_BytesAlign
|
|
724
|
+
movs r4, r5
|
|
725
|
+
KeccakP1600_AddBytes_BytesAlign:
|
|
726
|
+
subs r3, r3, r4 @ size left
|
|
727
|
+
mov r10, r3
|
|
728
|
+
movs r3, r4
|
|
729
|
+
adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
730
|
+
bl __KeccakP1600_AddBytesInLane
|
|
731
|
+
mov r3, r10
|
|
732
|
+
KeccakP1600_AddBytes_CheckLanes:
|
|
733
|
+
lsrs r2, r3, #3 @ .if length >= 8
|
|
734
|
+
beq KeccakP1600_AddBytes_Bytes
|
|
735
|
+
mov r10, r3
|
|
736
|
+
adr r3, KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
737
|
+
bl __KeccakP1600_AddLanes
|
|
738
|
+
mov r3, r10
|
|
739
|
+
lsls r3, r3, #29
|
|
740
|
+
lsrs r3, r3, #29
|
|
741
|
+
KeccakP1600_AddBytes_Bytes:
|
|
742
|
+
cmp r3, #0
|
|
743
|
+
beq KeccakP1600_AddBytes_Exit
|
|
744
|
+
movs r2, #0
|
|
745
|
+
adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
746
|
+
bl __KeccakP1600_AddBytesInLane
|
|
747
|
+
KeccakP1600_AddBytes_Exit:
|
|
748
|
+
pop {r4 - r7}
|
|
749
|
+
mov r8, r4
|
|
750
|
+
mov r9, r5
|
|
751
|
+
mov r10, r6
|
|
752
|
+
pop {r4 - r6, pc}
|
|
753
|
+
KeccakP1600_AddBytes_Exit1:
|
|
754
|
+
bx lr
|
|
755
|
+
nop
|
|
756
|
+
KeccakP1600_AddBytes_ToBitInterleavingConstants:
|
|
757
|
+
.long 0x55555555
|
|
758
|
+
.long 0x33333333
|
|
759
|
+
.long 0x0F0F0F0F
|
|
760
|
+
.long 0x00FF00FF
|
|
761
|
+
.long 0xAAAAAAAA
|
|
762
|
+
.long 0xCCCCCCCC
|
|
763
|
+
.long 0xF0F0F0F0
|
|
764
|
+
.long 0xFF00FF00
|
|
765
|
+
|
|
766
|
+
|
|
767
|
+
@----------------------------------------------------------------------------
|
|
768
|
+
@
|
|
769
|
+
@ __KeccakP1600_AddLanes
|
|
770
|
+
@
|
|
771
|
+
@ Input:
|
|
772
|
+
@ r0 state pointer
|
|
773
|
+
@ r1 data pointer
|
|
774
|
+
@ r2 laneCount
|
|
775
|
+
@ r3 to bit interleaving constants pointer
|
|
776
|
+
@
|
|
777
|
+
@ Output:
|
|
778
|
+
@ r0 state pointer next lane
|
|
779
|
+
@ r1 data pointer next byte to input
|
|
780
|
+
@
|
|
781
|
+
@ Changed: r2-r9
|
|
782
|
+
@
|
|
783
|
+
.align 8
|
|
784
|
+
__KeccakP1600_AddLanes:
|
|
785
|
+
lsls r4, r1, #30
|
|
786
|
+
bne __KeccakP1600_AddLanes_LoopUnaligned
|
|
787
|
+
__KeccakP1600_AddLanes_LoopAligned:
|
|
788
|
+
ldmia r1!, {r6,r7}
|
|
789
|
+
mov r8, r6
|
|
790
|
+
mov r9, r7
|
|
791
|
+
toBitInterleaving r8, r9, r6, r7, r5, r4, r3
|
|
792
|
+
ldr r5, [r0]
|
|
793
|
+
eors r6, r6, r5
|
|
794
|
+
ldr r5, [r0, #4]
|
|
795
|
+
eors r7, r7, r5
|
|
796
|
+
stmia r0!, {r6,r7}
|
|
797
|
+
subs r2, r2, #1
|
|
798
|
+
bne __KeccakP1600_AddLanes_LoopAligned
|
|
799
|
+
bx lr
|
|
800
|
+
__KeccakP1600_AddLanes_LoopUnaligned:
|
|
801
|
+
ldrb r6, [r1, #0]
|
|
802
|
+
ldrb r4, [r1, #1]
|
|
803
|
+
lsls r4, r4, #8
|
|
804
|
+
orrs r6, r6, r4
|
|
805
|
+
ldrb r4, [r1, #2]
|
|
806
|
+
lsls r4, r4, #16
|
|
807
|
+
orrs r6, r6, r4
|
|
808
|
+
ldrb r4, [r1, #3]
|
|
809
|
+
lsls r4, r4, #24
|
|
810
|
+
orrs r6, r6, r4
|
|
811
|
+
ldrb r7, [r1, #4]
|
|
812
|
+
ldrb r4, [r1, #5]
|
|
813
|
+
lsls r4, r4, #8
|
|
814
|
+
orrs r7, r7, r4
|
|
815
|
+
ldrb r4, [r1, #6]
|
|
816
|
+
lsls r4, r4, #16
|
|
817
|
+
orrs r7, r7, r4
|
|
818
|
+
ldrb r4, [r1, #7]
|
|
819
|
+
lsls r4, r4, #24
|
|
820
|
+
orrs r7, r7, r4
|
|
821
|
+
adds r1, r1, #8
|
|
822
|
+
mov r8, r6
|
|
823
|
+
mov r9, r7
|
|
824
|
+
toBitInterleaving r8, r9, r6, r7, r5, r4, r3
|
|
825
|
+
ldr r5, [r0]
|
|
826
|
+
eors r6, r6, r5
|
|
827
|
+
ldr r5, [r0, #4]
|
|
828
|
+
eors r7, r7, r5
|
|
829
|
+
stmia r0!, {r6, r7}
|
|
830
|
+
subs r2, r2, #1
|
|
831
|
+
bne __KeccakP1600_AddLanes_LoopUnaligned
|
|
832
|
+
bx lr
|
|
833
|
+
|
|
834
|
+
|
|
835
|
+
@----------------------------------------------------------------------------
|
|
836
|
+
@
|
|
837
|
+
@ __KeccakP1600_AddBytesInLane
|
|
838
|
+
@
|
|
839
|
+
@ Input:
|
|
840
|
+
@ r0 state pointer
|
|
841
|
+
@ r1 data pointer
|
|
842
|
+
@ r2 offset in lane
|
|
843
|
+
@ r3 length
|
|
844
|
+
@ r7 to bit interleaving constants pointer
|
|
845
|
+
@
|
|
846
|
+
@ Output:
|
|
847
|
+
@ r0 state pointer next lane
|
|
848
|
+
@ r1 data pointer next byte to input
|
|
849
|
+
@
|
|
850
|
+
@ Changed: r2-r9
|
|
851
|
+
@
|
|
852
|
+
.align 8
|
|
853
|
+
__KeccakP1600_AddBytesInLane:
|
|
854
|
+
movs r4, #0
|
|
855
|
+
movs r5, #0
|
|
856
|
+
push { r4 - r5 }
|
|
857
|
+
add r2, r2, sp
|
|
858
|
+
__KeccakP1600_AddBytesInLane_Loop:
|
|
859
|
+
ldrb r5, [r1]
|
|
860
|
+
strb r5, [r2]
|
|
861
|
+
adds r1, r1, #1
|
|
862
|
+
adds r2, r2, #1
|
|
863
|
+
subs r3, r3, #1
|
|
864
|
+
bne __KeccakP1600_AddBytesInLane_Loop
|
|
865
|
+
pop { r4 - r5 }
|
|
866
|
+
mov r8, r4
|
|
867
|
+
mov r9, r5
|
|
868
|
+
toBitInterleaving r8, r9, r4, r5, r6, r2, r7
|
|
869
|
+
ldr r6, [r0]
|
|
870
|
+
eors r4, r4, r6
|
|
871
|
+
ldr r6, [r0, #4]
|
|
872
|
+
eors r5, r5, r6
|
|
873
|
+
stmia r0!, { r4, r5 }
|
|
874
|
+
bx lr
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
@----------------------------------------------------------------------------
|
|
878
|
+
@
|
|
879
|
+
@ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
880
|
+
@
|
|
881
|
+
.align 8
|
|
882
|
+
.global KeccakP1600_OverwriteBytes
|
|
883
|
+
.type KeccakP1600_OverwriteBytes, %function;
|
|
884
|
+
KeccakP1600_OverwriteBytes:
|
|
885
|
+
cmp r3, #0 @ .if length != 0
|
|
886
|
+
beq KeccakP1600_OverwriteBytes_Exit1
|
|
887
|
+
push {r4 - r6, lr} @ then
|
|
888
|
+
mov r4, r8
|
|
889
|
+
mov r5, r9
|
|
890
|
+
mov r6, r10
|
|
891
|
+
push {r4 - r7}
|
|
892
|
+
lsrs r4, r2, #3 @ offset &= ~7
|
|
893
|
+
lsls r4, r4, #3
|
|
894
|
+
adds r0, r0, r4 @ add whole lane offset to state pointer
|
|
895
|
+
lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
|
|
896
|
+
lsrs r2, r2, #29
|
|
897
|
+
beq KeccakP1600_OverwriteBytes_CheckLanes @ .if offset != 0
|
|
898
|
+
movs r4, r3 @ then, do remaining bytes in first lane
|
|
899
|
+
movs r5, #8
|
|
900
|
+
subs r5, r2 @ max size in lane = 8 - offset
|
|
901
|
+
cmp r4, r5
|
|
902
|
+
ble KeccakP1600_OverwriteBytes_BytesAlign
|
|
903
|
+
movs r4, r5
|
|
904
|
+
KeccakP1600_OverwriteBytes_BytesAlign:
|
|
905
|
+
subs r3, r3, r4 @ size left
|
|
906
|
+
mov r10, r3
|
|
907
|
+
movs r3, r4
|
|
908
|
+
adr r7, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
|
|
909
|
+
bl __KeccakP1600_OverwriteBytesInLane
|
|
910
|
+
mov r3, r10
|
|
911
|
+
KeccakP1600_OverwriteBytes_CheckLanes:
|
|
912
|
+
lsrs r2, r3, #3 @ .if length >= 8
|
|
913
|
+
beq KeccakP1600_OverwriteBytes_Bytes
|
|
914
|
+
mov r10, r3
|
|
915
|
+
adr r3, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
|
|
916
|
+
bl __KeccakP1600_OverwriteLanes
|
|
917
|
+
mov r3, r10
|
|
918
|
+
lsls r3, r3, #29
|
|
919
|
+
lsrs r3, r3, #29
|
|
920
|
+
KeccakP1600_OverwriteBytes_Bytes:
|
|
921
|
+
cmp r3, #0
|
|
922
|
+
beq KeccakP1600_OverwriteBytes_Exit
|
|
923
|
+
movs r2, #0
|
|
924
|
+
adr r7, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
|
|
925
|
+
bl __KeccakP1600_OverwriteBytesInLane
|
|
926
|
+
KeccakP1600_OverwriteBytes_Exit:
|
|
927
|
+
pop {r4 - r7}
|
|
928
|
+
mov r8, r4
|
|
929
|
+
mov r9, r5
|
|
930
|
+
mov r10, r6
|
|
931
|
+
pop {r4 - r6, pc}
|
|
932
|
+
KeccakP1600_OverwriteBytes_Exit1:
|
|
933
|
+
bx lr
|
|
934
|
+
nop
|
|
935
|
+
KeccakP1600_OverwriteBytes_ToBitInterleavingConstants:
|
|
936
|
+
.long 0x55555555
|
|
937
|
+
.long 0x33333333
|
|
938
|
+
.long 0x0F0F0F0F
|
|
939
|
+
.long 0x00FF00FF
|
|
940
|
+
.long 0xAAAAAAAA
|
|
941
|
+
.long 0xCCCCCCCC
|
|
942
|
+
.long 0xF0F0F0F0
|
|
943
|
+
.long 0xFF00FF00
|
|
944
|
+
|
|
945
|
+
|
|
946
|
+
@----------------------------------------------------------------------------
|
|
947
|
+
@
|
|
948
|
+
@ __KeccakP1600_OverwriteLanes
|
|
949
|
+
@
|
|
950
|
+
@ Input:
|
|
951
|
+
@ r0 state pointer
|
|
952
|
+
@ r1 data pointer
|
|
953
|
+
@ r2 laneCount
|
|
954
|
+
@ r3 to bit interleaving constants pointer
|
|
955
|
+
@
|
|
956
|
+
@ Output:
|
|
957
|
+
@ r0 state pointer next lane
|
|
958
|
+
@ r1 data pointer next byte to input
|
|
959
|
+
@
|
|
960
|
+
@ Changed: r2-r9
|
|
961
|
+
@
|
|
962
|
+
.align 8
|
|
963
|
+
__KeccakP1600_OverwriteLanes:
|
|
964
|
+
lsls r4, r1, #30
|
|
965
|
+
bne __KeccakP1600_OverwriteLanes_LoopUnaligned
|
|
966
|
+
__KeccakP1600_OverwriteLanes_LoopAligned:
|
|
967
|
+
ldmia r1!, {r6,r7}
|
|
968
|
+
mov r8, r6
|
|
969
|
+
mov r9, r7
|
|
970
|
+
toBitInterleaving r8, r9, r6, r7, r5, r4, r3
|
|
971
|
+
stmia r0!, {r6,r7}
|
|
972
|
+
subs r2, r2, #1
|
|
973
|
+
bne __KeccakP1600_OverwriteLanes_LoopAligned
|
|
974
|
+
bx lr
|
|
975
|
+
__KeccakP1600_OverwriteLanes_LoopUnaligned:
|
|
976
|
+
ldrb r6, [r1, #0]
|
|
977
|
+
ldrb r4, [r1, #1]
|
|
978
|
+
lsls r4, r4, #8
|
|
979
|
+
orrs r6, r6, r4
|
|
980
|
+
ldrb r4, [r1, #2]
|
|
981
|
+
lsls r4, r4, #16
|
|
982
|
+
orrs r6, r6, r4
|
|
983
|
+
ldrb r4, [r1, #3]
|
|
984
|
+
lsls r4, r4, #24
|
|
985
|
+
orrs r6, r6, r4
|
|
986
|
+
ldrb r7, [r1, #4]
|
|
987
|
+
ldrb r4, [r1, #5]
|
|
988
|
+
lsls r4, r4, #8
|
|
989
|
+
orrs r7, r7, r4
|
|
990
|
+
ldrb r4, [r1, #6]
|
|
991
|
+
lsls r4, r4, #16
|
|
992
|
+
orrs r7, r7, r4
|
|
993
|
+
ldrb r4, [r1, #7]
|
|
994
|
+
lsls r4, r4, #24
|
|
995
|
+
orrs r7, r7, r4
|
|
996
|
+
adds r1, r1, #8
|
|
997
|
+
mov r8, r6
|
|
998
|
+
mov r9, r7
|
|
999
|
+
toBitInterleaving r8, r9, r6, r7, r5, r4, r3
|
|
1000
|
+
stmia r0!, {r6, r7}
|
|
1001
|
+
subs r2, r2, #1
|
|
1002
|
+
bne __KeccakP1600_OverwriteLanes_LoopUnaligned
|
|
1003
|
+
bx lr
|
|
1004
|
+
|
|
1005
|
+
|
|
1006
|
+
@----------------------------------------------------------------------------
|
|
1007
|
+
@
|
|
1008
|
+
@ __KeccakP1600_OverwriteBytesInLane
|
|
1009
|
+
@
|
|
1010
|
+
@ Input:
|
|
1011
|
+
@ r0 state pointer
|
|
1012
|
+
@ r1 data pointer
|
|
1013
|
+
@ r2 offset in lane
|
|
1014
|
+
@ r3 length
|
|
1015
|
+
@ r7 to bit interleaving constants pointer
|
|
1016
|
+
@
|
|
1017
|
+
@ Output:
|
|
1018
|
+
@ r0 state pointer next lane
|
|
1019
|
+
@ r1 data pointer next byte to input
|
|
1020
|
+
@
|
|
1021
|
+
@ Changed: r2-r9
|
|
1022
|
+
@
|
|
1023
|
+
.align 8
|
|
1024
|
+
__KeccakP1600_OverwriteBytesInLane:
|
|
1025
|
+
movs r4, #0
|
|
1026
|
+
movs r5, #0
|
|
1027
|
+
push { r4 - r5 }
|
|
1028
|
+
lsls r6, r2, #2
|
|
1029
|
+
add r2, r2, sp
|
|
1030
|
+
movs r4, #0x0F @r4 mask to wipe nibbles(bit interleaved bytes) in state
|
|
1031
|
+
lsls r4, r4, r6
|
|
1032
|
+
movs r6, r4
|
|
1033
|
+
__KeccakP1600_OverwriteBytesInLane_Loop:
|
|
1034
|
+
orrs r6, r6, r4
|
|
1035
|
+
lsls r4, r4, #4
|
|
1036
|
+
ldrb r5, [r1]
|
|
1037
|
+
strb r5, [r2]
|
|
1038
|
+
adds r1, r1, #1
|
|
1039
|
+
adds r2, r2, #1
|
|
1040
|
+
subs r3, r3, #1
|
|
1041
|
+
bne __KeccakP1600_OverwriteBytesInLane_Loop
|
|
1042
|
+
pop { r4 - r5 }
|
|
1043
|
+
mov r8, r4
|
|
1044
|
+
mov r9, r5
|
|
1045
|
+
toBitInterleaving r8, r9, r4, r5, r3, r2, r7
|
|
1046
|
+
ldr r3, [r0]
|
|
1047
|
+
bics r3, r3, r6
|
|
1048
|
+
eors r4, r4, r3
|
|
1049
|
+
ldr r3, [r0, #4]
|
|
1050
|
+
bics r3, r3, r6
|
|
1051
|
+
eors r5, r5, r3
|
|
1052
|
+
stmia r0!, { r4, r5 }
|
|
1053
|
+
bx lr
|
|
1054
|
+
|
|
1055
|
+
|
|
1056
|
+
@----------------------------------------------------------------------------
|
|
1057
|
+
@
|
|
1058
|
+
@ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
1059
|
+
@
|
|
1060
|
+
.align 8
|
|
1061
|
+
.global KeccakP1600_OverwriteWithZeroes
|
|
1062
|
+
.type KeccakP1600_OverwriteWithZeroes, %function;
|
|
1063
|
+
KeccakP1600_OverwriteWithZeroes:
|
|
1064
|
+
push {r4 - r5}
|
|
1065
|
+
lsrs r2, r1, #3
|
|
1066
|
+
beq KeccakP1600_OverwriteWithZeroes_Bytes
|
|
1067
|
+
movs r4, #0
|
|
1068
|
+
movs r5, #0
|
|
1069
|
+
KeccakP1600_OverwriteWithZeroes_LoopLanes:
|
|
1070
|
+
stm r0!, { r4, r5 }
|
|
1071
|
+
subs r2, r2, #1
|
|
1072
|
+
bne KeccakP1600_OverwriteWithZeroes_LoopLanes
|
|
1073
|
+
KeccakP1600_OverwriteWithZeroes_Bytes:
|
|
1074
|
+
lsls r1, r1, #32-3
|
|
1075
|
+
beq KeccakP1600_OverwriteWithZeroes_Exit
|
|
1076
|
+
lsrs r1, r1, #32-3
|
|
1077
|
+
movs r3, #0x0F @r2 already zero, r3 = mask to wipe nibbles(bit interleaved bytes) in state
|
|
1078
|
+
KeccakP1600_OverwriteWithZeroes_LoopBytes:
|
|
1079
|
+
orrs r2, r2, r3
|
|
1080
|
+
lsls r3, r3, #4
|
|
1081
|
+
subs r1, r1, #1
|
|
1082
|
+
bne KeccakP1600_OverwriteWithZeroes_LoopBytes
|
|
1083
|
+
ldr r4, [r0]
|
|
1084
|
+
ldr r5, [r0, #4]
|
|
1085
|
+
bics r4, r4, r2
|
|
1086
|
+
bics r5, r5, r2
|
|
1087
|
+
stm r0!, { r4, r5 }
|
|
1088
|
+
KeccakP1600_OverwriteWithZeroes_Exit:
|
|
1089
|
+
pop {r4 - r5}
|
|
1090
|
+
bx lr
|
|
1091
|
+
|
|
1092
|
+
|
|
1093
|
+
@----------------------------------------------------------------------------
|
|
1094
|
+
@
|
|
1095
|
+
@ void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
1096
|
+
@
|
|
1097
|
+
.align 8
|
|
1098
|
+
.global KeccakP1600_ExtractBytes
|
|
1099
|
+
.type KeccakP1600_ExtractBytes, %function;
|
|
1100
|
+
KeccakP1600_ExtractBytes:
|
|
1101
|
+
cmp r3, #0 @ .if length != 0
|
|
1102
|
+
beq KeccakP1600_ExtractBytes_Exit1
|
|
1103
|
+
push {r4 - r6, lr} @ then
|
|
1104
|
+
mov r4, r8
|
|
1105
|
+
push {r4, r7}
|
|
1106
|
+
lsrs r4, r2, #3 @ offset &= ~7
|
|
1107
|
+
lsls r4, r4, #3
|
|
1108
|
+
adds r0, r0, r4 @ add whole lane offset to state pointer
|
|
1109
|
+
lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
|
|
1110
|
+
lsrs r2, r2, #29
|
|
1111
|
+
beq KeccakP1600_ExtractBytes_CheckLanes @ .if offset != 0
|
|
1112
|
+
movs r4, r3 @ then, do remaining bytes in first lane
|
|
1113
|
+
movs r5, #8
|
|
1114
|
+
subs r5, r2 @ max size in lane = 8 - offset
|
|
1115
|
+
cmp r4, r5
|
|
1116
|
+
ble KeccakP1600_ExtractBytes_BytesAlign
|
|
1117
|
+
movs r4, r5
|
|
1118
|
+
KeccakP1600_ExtractBytes_BytesAlign:
|
|
1119
|
+
subs r3, r3, r4 @ size left
|
|
1120
|
+
mov r8, r3
|
|
1121
|
+
movs r3, r4
|
|
1122
|
+
adr r7, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
|
|
1123
|
+
bl __KeccakP1600_ExtractBytesInLane
|
|
1124
|
+
mov r3, r8
|
|
1125
|
+
KeccakP1600_ExtractBytes_CheckLanes:
|
|
1126
|
+
lsrs r2, r3, #3 @ .if length >= 8
|
|
1127
|
+
beq KeccakP1600_ExtractBytes_Bytes
|
|
1128
|
+
mov r8, r3
|
|
1129
|
+
adr r3, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
|
|
1130
|
+
bl __KeccakP1600_ExtractLanes
|
|
1131
|
+
mov r3, r8
|
|
1132
|
+
lsls r3, r3, #29
|
|
1133
|
+
lsrs r3, r3, #29
|
|
1134
|
+
KeccakP1600_ExtractBytes_Bytes:
|
|
1135
|
+
cmp r3, #0
|
|
1136
|
+
beq KeccakP1600_ExtractBytes_Exit
|
|
1137
|
+
movs r2, #0
|
|
1138
|
+
adr r7, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
|
|
1139
|
+
bl __KeccakP1600_ExtractBytesInLane
|
|
1140
|
+
KeccakP1600_ExtractBytes_Exit:
|
|
1141
|
+
pop {r4,r7}
|
|
1142
|
+
mov r8, r4
|
|
1143
|
+
pop {r4 - r6, pc}
|
|
1144
|
+
KeccakP1600_ExtractBytes_Exit1:
|
|
1145
|
+
bx lr
|
|
1146
|
+
nop
|
|
1147
|
+
KeccakP1600_ExtractBytes_FromBitInterleavingConstants:
|
|
1148
|
+
.long 0x0000FF00
|
|
1149
|
+
.long 0x00F000F0
|
|
1150
|
+
.long 0x0C0C0C0C
|
|
1151
|
+
.long 0x22222222
|
|
1152
|
+
|
|
1153
|
+
|
|
1154
|
+
@----------------------------------------------------------------------------
|
|
1155
|
+
@
|
|
1156
|
+
@ __KeccakP1600_ExtractLanes
|
|
1157
|
+
@
|
|
1158
|
+
@ Input:
|
|
1159
|
+
@ r0 state pointer
|
|
1160
|
+
@ r1 data pointer
|
|
1161
|
+
@ r2 laneCount
|
|
1162
|
+
@ r3 from bit interleaving constants pointer
|
|
1163
|
+
@
|
|
1164
|
+
@ Output:
|
|
1165
|
+
@ r0 state pointer next lane
|
|
1166
|
+
@ r1 data pointer next byte to output
|
|
1167
|
+
@
|
|
1168
|
+
@ Changed: r2-r7
|
|
1169
|
+
@
|
|
1170
|
+
.align 8
|
|
1171
|
+
__KeccakP1600_ExtractLanes:
|
|
1172
|
+
lsls r4, r1, #30
|
|
1173
|
+
bne __KeccakP1600_ExtractLanes_LoopUnaligned
|
|
1174
|
+
__KeccakP1600_ExtractLanes_LoopAligned:
|
|
1175
|
+
ldmia r0!, {r6,r7}
|
|
1176
|
+
fromBitInterleaving r6, r7, r5, r4, r3
|
|
1177
|
+
stmia r1!, {r6,r7}
|
|
1178
|
+
subs r2, r2, #1
|
|
1179
|
+
bne __KeccakP1600_ExtractLanes_LoopAligned
|
|
1180
|
+
bx lr
|
|
1181
|
+
__KeccakP1600_ExtractLanes_LoopUnaligned:
|
|
1182
|
+
ldmia r0!, {r6,r7}
|
|
1183
|
+
fromBitInterleaving r6, r7, r5, r4, r3
|
|
1184
|
+
strb r6, [r1, #0]
|
|
1185
|
+
lsrs r6, r6, #8
|
|
1186
|
+
strb r6, [r1, #1]
|
|
1187
|
+
lsrs r6, r6, #8
|
|
1188
|
+
strb r6, [r1, #2]
|
|
1189
|
+
lsrs r6, r6, #8
|
|
1190
|
+
strb r6, [r1, #3]
|
|
1191
|
+
strb r7, [r1, #4]
|
|
1192
|
+
lsrs r7, r7, #8
|
|
1193
|
+
strb r7, [r1, #5]
|
|
1194
|
+
lsrs r7, r7, #8
|
|
1195
|
+
strb r7, [r1, #6]
|
|
1196
|
+
lsrs r7, r7, #8
|
|
1197
|
+
strb r7, [r1, #7]
|
|
1198
|
+
adds r1, r1, #8
|
|
1199
|
+
subs r2, r2, #1
|
|
1200
|
+
bne __KeccakP1600_ExtractLanes_LoopUnaligned
|
|
1201
|
+
bx lr
|
|
1202
|
+
|
|
1203
|
+
|
|
1204
|
+
@----------------------------------------------------------------------------
|
|
1205
|
+
@
|
|
1206
|
+
@ __KeccakP1600_ExtractBytesInLane
|
|
1207
|
+
@
|
|
1208
|
+
@ Input:
|
|
1209
|
+
@ r0 state pointer
|
|
1210
|
+
@ r1 data pointer
|
|
1211
|
+
@ r2 offset in lane
|
|
1212
|
+
@ r3 length
|
|
1213
|
+
@ r7 from bit interleaving constants pointer
|
|
1214
|
+
@
|
|
1215
|
+
@ Output:
|
|
1216
|
+
@ r0 state pointer next lane
|
|
1217
|
+
@ r1 data pointer next byte to output
|
|
1218
|
+
@
|
|
1219
|
+
@ Changed: r2-r7
|
|
1220
|
+
@
|
|
1221
|
+
.align 8
|
|
1222
|
+
__KeccakP1600_ExtractBytesInLane:
|
|
1223
|
+
ldmia r0!, {r4,r5}
|
|
1224
|
+
push {r0, r3}
|
|
1225
|
+
fromBitInterleaving r4, r5, r0, r3, r7
|
|
1226
|
+
pop {r0, r3}
|
|
1227
|
+
push {r4, r5}
|
|
1228
|
+
mov r4, sp
|
|
1229
|
+
adds r4, r4, r2
|
|
1230
|
+
__KeccakP1600_ExtractBytesInLane_Loop:
|
|
1231
|
+
ldrb r2, [r4]
|
|
1232
|
+
adds r4, r4, #1
|
|
1233
|
+
strb r2, [r1]
|
|
1234
|
+
adds r1, r1, #1
|
|
1235
|
+
subs r3, r3, #1
|
|
1236
|
+
bne __KeccakP1600_ExtractBytesInLane_Loop
|
|
1237
|
+
add sp, #8
|
|
1238
|
+
bx lr
|
|
1239
|
+
|
|
1240
|
+
|
|
1241
|
+
@----------------------------------------------------------------------------
|
|
1242
|
+
@
|
|
1243
|
+
@ void KeccakP1600_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
1244
|
+
@
|
|
1245
|
+
.align 8
|
|
1246
|
+
.global KeccakP1600_ExtractAndAddBytes
|
|
1247
|
+
.type KeccakP1600_ExtractAndAddBytes, %function;
|
|
1248
|
+
KeccakP1600_ExtractAndAddBytes:
|
|
1249
|
+
push {r3 - r7, lr}
|
|
1250
|
+
mov r4, r8
|
|
1251
|
+
mov r5, r9
|
|
1252
|
+
push {r4 - r5}
|
|
1253
|
+
mov r9, r2
|
|
1254
|
+
mov r2, r3
|
|
1255
|
+
ldr r3, [sp, #8*4]
|
|
1256
|
+
cmp r3, #0 @ .if length != 0
|
|
1257
|
+
beq KeccakP1600_ExtractAndAddBytes_Exit
|
|
1258
|
+
lsrs r4, r2, #3 @ offset &= ~7
|
|
1259
|
+
lsls r4, r4, #3
|
|
1260
|
+
adds r0, r0, r4 @ add whole lane offset to state pointer
|
|
1261
|
+
lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
|
|
1262
|
+
lsrs r2, r2, #29
|
|
1263
|
+
beq KeccakP1600_ExtractAndAddBytes_CheckLanes @ .if offset != 0
|
|
1264
|
+
movs r4, r3 @ then, do remaining bytes in first lane
|
|
1265
|
+
movs r5, #8
|
|
1266
|
+
subs r5, r2 @ max size in lane = 8 - offset
|
|
1267
|
+
cmp r4, r5
|
|
1268
|
+
ble KeccakP1600_ExtractAndAddBytes_BytesAlign
|
|
1269
|
+
movs r4, r5
|
|
1270
|
+
KeccakP1600_ExtractAndAddBytes_BytesAlign:
|
|
1271
|
+
subs r3, r3, r4 @ size left
|
|
1272
|
+
mov r8, r3
|
|
1273
|
+
movs r3, r4
|
|
1274
|
+
adr r7, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
|
|
1275
|
+
bl __KeccakP1600_ExtractAndAddBytesInLane
|
|
1276
|
+
mov r3, r8
|
|
1277
|
+
KeccakP1600_ExtractAndAddBytes_CheckLanes:
|
|
1278
|
+
lsrs r2, r3, #3 @ .if length >= 8
|
|
1279
|
+
beq KeccakP1600_ExtractAndAddBytes_Bytes
|
|
1280
|
+
mov r8, r3
|
|
1281
|
+
adr r3, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
|
|
1282
|
+
bl __KeccakP1600_ExtractAndAddLanes
|
|
1283
|
+
mov r3, r8
|
|
1284
|
+
lsls r3, r3, #29
|
|
1285
|
+
lsrs r3, r3, #29
|
|
1286
|
+
KeccakP1600_ExtractAndAddBytes_Bytes:
|
|
1287
|
+
cmp r3, #0
|
|
1288
|
+
beq KeccakP1600_ExtractAndAddBytes_Exit
|
|
1289
|
+
movs r2, #0
|
|
1290
|
+
adr r7, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
|
|
1291
|
+
bl __KeccakP1600_ExtractAndAddBytesInLane
|
|
1292
|
+
KeccakP1600_ExtractAndAddBytes_Exit:
|
|
1293
|
+
pop {r4 - r5}
|
|
1294
|
+
mov r8, r4
|
|
1295
|
+
mov r9, r5
|
|
1296
|
+
pop {r3 - r7, pc}
|
|
1297
|
+
.align 8
|
|
1298
|
+
KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants:
|
|
1299
|
+
.long 0x0000FF00
|
|
1300
|
+
.long 0x00F000F0
|
|
1301
|
+
.long 0x0C0C0C0C
|
|
1302
|
+
.long 0x22222222
|
|
1303
|
+
|
|
1304
|
+
|
|
1305
|
+
@----------------------------------------------------------------------------
|
|
1306
|
+
@
|
|
1307
|
+
@ __KeccakP1600_ExtractAndAddLanes
|
|
1308
|
+
@
|
|
1309
|
+
@ Input:
|
|
1310
|
+
@ r0 state pointer
|
|
1311
|
+
@ r1 in pointer
|
|
1312
|
+
@ r2 laneCount
|
|
1313
|
+
@ r3 from bit interleaving constants pointer
|
|
1314
|
+
@ r9 out pointer
|
|
1315
|
+
@
|
|
1316
|
+
@ Output:
|
|
1317
|
+
@ r0 state pointer next lane
|
|
1318
|
+
@ r1 in pointer (next lane)
|
|
1319
|
+
@ r9 out pointer (next lane)
|
|
1320
|
+
@
|
|
1321
|
+
@ Changed: r2-r7
|
|
1322
|
+
@
|
|
1323
|
+
.align 8
|
|
1324
|
+
__KeccakP1600_ExtractAndAddLanes:
|
|
1325
|
+
lsls r4, r1, #30
|
|
1326
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
|
|
1327
|
+
mov r4, r9
|
|
1328
|
+
lsls r4, r4, #30
|
|
1329
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
|
|
1330
|
+
__KeccakP1600_ExtractAndAddLanes_LoopAligned:
|
|
1331
|
+
ldmia r0!, {r6,r7}
|
|
1332
|
+
fromBitInterleaving r6, r7, r5, r4, r3
|
|
1333
|
+
mov r4, r9
|
|
1334
|
+
ldm r1!, {r5}
|
|
1335
|
+
eors r6, r6, r5
|
|
1336
|
+
ldm r1!, {r5}
|
|
1337
|
+
eors r7, r7, r5
|
|
1338
|
+
stmia r4!, {r6,r7}
|
|
1339
|
+
mov r9, r4
|
|
1340
|
+
subs r2, r2, #1
|
|
1341
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopAligned
|
|
1342
|
+
bx lr
|
|
1343
|
+
__KeccakP1600_ExtractAndAddLanes_LoopUnaligned:
|
|
1344
|
+
ldmia r0!, {r6,r7}
|
|
1345
|
+
fromBitInterleaving r6, r7, r5, r4, r3
|
|
1346
|
+
mov r4, r9
|
|
1347
|
+
ldrb r5, [r1, #0]
|
|
1348
|
+
eors r5, r5, r6
|
|
1349
|
+
strb r5, [r4, #0]
|
|
1350
|
+
lsrs r6, r6, #8
|
|
1351
|
+
ldrb r5, [r1, #1]
|
|
1352
|
+
eors r5, r5, r6
|
|
1353
|
+
strb r5, [r4, #1]
|
|
1354
|
+
lsrs r6, r6, #8
|
|
1355
|
+
ldrb r5, [r1, #2]
|
|
1356
|
+
eors r5, r5, r6
|
|
1357
|
+
strb r5, [r4, #2]
|
|
1358
|
+
lsrs r6, r6, #8
|
|
1359
|
+
ldrb r5, [r1, #3]
|
|
1360
|
+
eors r5, r5, r6
|
|
1361
|
+
strb r5, [r4, #3]
|
|
1362
|
+
ldrb r5, [r1, #4]
|
|
1363
|
+
eors r5, r5, r7
|
|
1364
|
+
strb r5, [r4, #4]
|
|
1365
|
+
lsrs r7, r7, #8
|
|
1366
|
+
ldrb r5, [r1, #5]
|
|
1367
|
+
eors r5, r5, r7
|
|
1368
|
+
strb r5, [r4, #5]
|
|
1369
|
+
lsrs r7, r7, #8
|
|
1370
|
+
ldrb r5, [r1, #6]
|
|
1371
|
+
eors r5, r5, r7
|
|
1372
|
+
strb r5, [r4, #6]
|
|
1373
|
+
lsrs r7, r7, #8
|
|
1374
|
+
ldrb r5, [r1, #7]
|
|
1375
|
+
eors r5, r5, r7
|
|
1376
|
+
strb r5, [r4, #7]
|
|
1377
|
+
adds r1, r1, #8
|
|
1378
|
+
adds r4, r4, #8
|
|
1379
|
+
mov r9, r4
|
|
1380
|
+
subs r2, r2, #1
|
|
1381
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
|
|
1382
|
+
bx lr
|
|
1383
|
+
|
|
1384
|
+
|
|
1385
|
+
@----------------------------------------------------------------------------
|
|
1386
|
+
@
|
|
1387
|
+
@ __KeccakP1600_ExtractAndAddBytesInLane
|
|
1388
|
+
@
|
|
1389
|
+
@ Input:
|
|
1390
|
+
@ r0 state pointer
|
|
1391
|
+
@ r1 data pointer
|
|
1392
|
+
@ r2 offset in lane
|
|
1393
|
+
@ r3 length
|
|
1394
|
+
@ r7 from bit interleaving constants pointer
|
|
1395
|
+
@ r9 out pointer
|
|
1396
|
+
@
|
|
1397
|
+
@ Output:
|
|
1398
|
+
@ r0 state pointer next lane
|
|
1399
|
+
@ r1 in pointer (next byte)
|
|
1400
|
+
@ r9 out pointer (next byte)
|
|
1401
|
+
@
|
|
1402
|
+
@ Changed: r2-r7
|
|
1403
|
+
@
|
|
1404
|
+
.align 8
|
|
1405
|
+
__KeccakP1600_ExtractAndAddBytesInLane:
|
|
1406
|
+
ldmia r0!, {r4,r5}
|
|
1407
|
+
push {r0, r3}
|
|
1408
|
+
fromBitInterleaving r4, r5, r0, r3, r7
|
|
1409
|
+
pop {r0, r3}
|
|
1410
|
+
push {r4, r5}
|
|
1411
|
+
mov r4, sp
|
|
1412
|
+
adds r4, r4, r2
|
|
1413
|
+
mov r6, r9
|
|
1414
|
+
__KeccakP1600_ExtractAndAddBytesInLane_Loop:
|
|
1415
|
+
ldrb r2, [r4]
|
|
1416
|
+
adds r4, r4, #1
|
|
1417
|
+
ldrb r5, [r1]
|
|
1418
|
+
eors r2, r2, r5
|
|
1419
|
+
strb r2, [r6]
|
|
1420
|
+
adds r1, r1, #1
|
|
1421
|
+
adds r6, r6, #1
|
|
1422
|
+
subs r3, r3, #1
|
|
1423
|
+
bne __KeccakP1600_ExtractAndAddBytesInLane_Loop
|
|
1424
|
+
add sp, #8
|
|
1425
|
+
mov r9, r6
|
|
1426
|
+
bx lr
|
|
1427
|
+
|
|
1428
|
+
|
|
1429
|
+
|
|
1430
|
+
.macro ldrf result,offset
|
|
1431
|
+
.if \offset >= 128
|
|
1432
|
+
ldr \result, [r5, #\offset-128]
|
|
1433
|
+
.else
|
|
1434
|
+
ldr \result, [r0, #\offset]
|
|
1435
|
+
.endif
|
|
1436
|
+
.endm
|
|
1437
|
+
|
|
1438
|
+
.macro strf result,offset
|
|
1439
|
+
.if \offset >= 128
|
|
1440
|
+
str \result, [r5, #\offset-128]
|
|
1441
|
+
.else
|
|
1442
|
+
str \result, [r0, #\offset]
|
|
1443
|
+
.endif
|
|
1444
|
+
.endm
|
|
1445
|
+
|
|
1446
|
+
.macro SwapPI13 in0,in1,in2,in3,eo0,eo1,eo2,eo3
|
|
1447
|
+
ldrf r3, \in0+0
|
|
1448
|
+
ldrf r4, \in0+4
|
|
1449
|
+
ldrf r2, \in1+0
|
|
1450
|
+
ldrf r1, \in1+4
|
|
1451
|
+
strf r2, \in0+\eo0*4
|
|
1452
|
+
strf r1, \in0+(\eo0^1)*4
|
|
1453
|
+
ldrf r2, \in2+0
|
|
1454
|
+
ldrf r1, \in2+4
|
|
1455
|
+
strf r2, \in1+\eo1*4
|
|
1456
|
+
strf r1, \in1+(\eo1^1)*4
|
|
1457
|
+
ldrf r2, \in3+0
|
|
1458
|
+
ldrf r1, \in3+4
|
|
1459
|
+
strf r2, \in2+\eo2*4
|
|
1460
|
+
strf r1, \in2+(\eo2^1)*4
|
|
1461
|
+
strf r3, \in3+\eo3*4
|
|
1462
|
+
strf r4, \in3+(\eo3^1)*4
|
|
1463
|
+
.endm
|
|
1464
|
+
|
|
1465
|
+
.macro SwapPI2 in0,in1,in2,in3
|
|
1466
|
+
ldrf r3, \in0+0
|
|
1467
|
+
ldrf r4, \in0+4
|
|
1468
|
+
ldrf r2, \in1+0
|
|
1469
|
+
ldrf r1, \in1+4
|
|
1470
|
+
strf r2, \in0+4
|
|
1471
|
+
strf r1, \in0+0
|
|
1472
|
+
strf r3, \in1+4
|
|
1473
|
+
strf r4, \in1+0
|
|
1474
|
+
ldrf r3, \in2+0
|
|
1475
|
+
ldrf r4, \in2+4
|
|
1476
|
+
ldrf r2, \in3+0
|
|
1477
|
+
ldrf r1, \in3+4
|
|
1478
|
+
strf r2, \in2+4
|
|
1479
|
+
strf r1, \in2+0
|
|
1480
|
+
strf r3, \in3+4
|
|
1481
|
+
strf r4, \in3+0
|
|
1482
|
+
.endm
|
|
1483
|
+
|
|
1484
|
+
.macro SwapEO even,odd
|
|
1485
|
+
ldrf r3, \even
|
|
1486
|
+
ldrf r4, \odd
|
|
1487
|
+
strf r3, \odd
|
|
1488
|
+
strf r4, \even
|
|
1489
|
+
.endm
|
|
1490
|
+
|
|
1491
|
+
@ ----------------------------------------------------------------------------
|
|
1492
|
+
@
|
|
1493
|
+
@ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
1494
|
+
@
|
|
1495
|
+
.align 8
|
|
1496
|
+
.global KeccakP1600_Permute_Nrounds
|
|
1497
|
+
.type KeccakP1600_Permute_Nrounds, %function;
|
|
1498
|
+
KeccakP1600_Permute_Nrounds:
|
|
1499
|
+
lsls r2, r1, #30
|
|
1500
|
+
bne KeccakP1600_Permute_NroundsNotMultiple4
|
|
1501
|
+
lsls r2, r1, #3
|
|
1502
|
+
adr r1, KeccakP1600_Permute_RoundConstants0Mod4
|
|
1503
|
+
subs r1, r1, r2
|
|
1504
|
+
b KeccakP1600_Permute
|
|
1505
|
+
KeccakP1600_Permute_NroundsNotMultiple4: @ nrounds not multiple of 4
|
|
1506
|
+
push { r4 - r6, lr }
|
|
1507
|
+
mov r2, r8
|
|
1508
|
+
mov r3, r9
|
|
1509
|
+
mov r4, r10
|
|
1510
|
+
mov r5, r11
|
|
1511
|
+
mov r6, r12
|
|
1512
|
+
push { r2 - r7 }
|
|
1513
|
+
sub sp, #mSize
|
|
1514
|
+
mov r3, r1
|
|
1515
|
+
lsrs r2, r1, #2
|
|
1516
|
+
lsls r2, r2, #3+2
|
|
1517
|
+
adr r1, KeccakP1600_Permute_RoundConstants0
|
|
1518
|
+
subs r1, r1, r2
|
|
1519
|
+
str r1, [sp, #mRC]
|
|
1520
|
+
mov r5, r0
|
|
1521
|
+
adds r5, r5, #128
|
|
1522
|
+
lsls r3, r3, #31
|
|
1523
|
+
bcs KeccakP1600_Permute_Nrounds23Mod4
|
|
1524
|
+
KeccakP1600_Permute_Nrounds1Mod4:
|
|
1525
|
+
SwapPI13 Aga0, Aka0, Asa0, Ama0, 1, 0, 1, 0
|
|
1526
|
+
SwapPI13 Abe0, Age0, Ame0, Ake0, 0, 1, 0, 1
|
|
1527
|
+
SwapPI13 Abi0, Aki0, Agi0, Asi0, 1, 0, 1, 0
|
|
1528
|
+
SwapEO Ami0, Ami1
|
|
1529
|
+
SwapPI13 Abo0, Amo0, Aso0, Ago0, 1, 0, 1, 0
|
|
1530
|
+
SwapEO Ako0, Ako1
|
|
1531
|
+
SwapPI13 Abu0, Asu0, Aku0, Amu0, 0, 1, 0, 1
|
|
1532
|
+
ldr r1, =KeccakP1600_Permute_Round1Mod4+1
|
|
1533
|
+
bx r1
|
|
1534
|
+
.align 8
|
|
1535
|
+
.ltorg
|
|
1536
|
+
KeccakP1600_Permute_Nrounds23Mod4:
|
|
1537
|
+
bpl KeccakP1600_Permute_Nrounds2Mod4
|
|
1538
|
+
KeccakP1600_Permute_Nrounds3Mod4:
|
|
1539
|
+
SwapPI13 Aga0, Ama0, Asa0, Aka0, 0, 1, 0, 1
|
|
1540
|
+
SwapPI13 Abe0, Ake0, Ame0, Age0, 1, 0, 1, 0
|
|
1541
|
+
SwapPI13 Abi0, Asi0, Agi0, Aki0, 0, 1, 0, 1
|
|
1542
|
+
SwapEO Ami0, Ami1
|
|
1543
|
+
SwapPI13 Abo0, Ago0, Aso0, Amo0, 0, 1, 0, 1
|
|
1544
|
+
SwapEO Ako0, Ako1
|
|
1545
|
+
SwapPI13 Abu0, Amu0, Aku0, Asu0, 1, 0, 1, 0
|
|
1546
|
+
ldr r1, =KeccakP1600_Permute_Round3Mod4+1
|
|
1547
|
+
bx r1
|
|
1548
|
+
.align 8
|
|
1549
|
+
.ltorg
|
|
1550
|
+
KeccakP1600_Permute_Nrounds2Mod4:
|
|
1551
|
+
SwapPI2 Aga0, Asa0, Aka0, Ama0
|
|
1552
|
+
SwapPI2 Abe0, Ame0, Age0, Ake0
|
|
1553
|
+
SwapPI2 Abi0, Agi0, Aki0, Asi0
|
|
1554
|
+
SwapPI2 Abo0, Aso0, Ago0, Amo0
|
|
1555
|
+
SwapPI2 Abu0, Aku0, Amu0, Asu0
|
|
1556
|
+
ldr r1, =KeccakP1600_Permute_Round2Mod4+1
|
|
1557
|
+
bx r1
|
|
1558
|
+
.align 8
|
|
1559
|
+
.ltorg
|
|
1560
|
+
|
|
1561
|
+
|
|
1562
|
+
@ ----------------------------------------------------------------------------
|
|
1563
|
+
@
|
|
1564
|
+
@ void KeccakP1600_Permute_12rounds( void *state )
|
|
1565
|
+
@
|
|
1566
|
+
.align 8
|
|
1567
|
+
.global KeccakP1600_Permute_12rounds
|
|
1568
|
+
.type KeccakP1600_Permute_12rounds, %function;
|
|
1569
|
+
KeccakP1600_Permute_12rounds:
|
|
1570
|
+
adr r1, KeccakP1600_Permute_RoundConstants12
|
|
1571
|
+
b KeccakP1600_Permute
|
|
1572
|
+
|
|
1573
|
+
|
|
1574
|
+
@ ----------------------------------------------------------------------------
|
|
1575
|
+
@
|
|
1576
|
+
@ void KeccakP1600_Permute_24rounds( void *state )
|
|
1577
|
+
@
|
|
1578
|
+
.align 8
|
|
1579
|
+
.global KeccakP1600_Permute_24rounds
|
|
1580
|
+
.type KeccakP1600_Permute_24rounds, %function;
|
|
1581
|
+
KeccakP1600_Permute_24rounds:
|
|
1582
|
+
adr r1, KeccakP1600_Permute_RoundConstants24
|
|
1583
|
+
b KeccakP1600_Permute
|
|
1584
|
+
|
|
1585
|
+
|
|
1586
|
+
.align 8
|
|
1587
|
+
KeccakP1600_Permute_RoundConstants24:
|
|
1588
|
+
@ 0 1
|
|
1589
|
+
.long 0x00000001, 0x00000000
|
|
1590
|
+
.long 0x00000000, 0x00000089
|
|
1591
|
+
.long 0x00000000, 0x8000008b
|
|
1592
|
+
.long 0x00000000, 0x80008080
|
|
1593
|
+
.long 0x00000001, 0x0000008b
|
|
1594
|
+
.long 0x00000001, 0x00008000
|
|
1595
|
+
.long 0x00000001, 0x80008088
|
|
1596
|
+
.long 0x00000001, 0x80000082
|
|
1597
|
+
.long 0x00000000, 0x0000000b
|
|
1598
|
+
.long 0x00000000, 0x0000000a
|
|
1599
|
+
.long 0x00000001, 0x00008082
|
|
1600
|
+
.long 0x00000000, 0x00008003
|
|
1601
|
+
KeccakP1600_Permute_RoundConstants12:
|
|
1602
|
+
.long 0x00000001, 0x0000808b
|
|
1603
|
+
.long 0x00000001, 0x8000000b
|
|
1604
|
+
.long 0x00000001, 0x8000008a
|
|
1605
|
+
.long 0x00000001, 0x80000081
|
|
1606
|
+
.long 0x00000000, 0x80000081
|
|
1607
|
+
.long 0x00000000, 0x80000008
|
|
1608
|
+
.long 0x00000000, 0x00000083
|
|
1609
|
+
.long 0x00000000, 0x80008003
|
|
1610
|
+
KeccakP1600_Permute_RoundConstants0:
|
|
1611
|
+
.long 0x00000001, 0x80008088
|
|
1612
|
+
.long 0x00000000, 0x80000088
|
|
1613
|
+
.long 0x00000001, 0x00008000
|
|
1614
|
+
.long 0x00000000, 0x80008082
|
|
1615
|
+
KeccakP1600_Permute_RoundConstants0Mod4:
|
|
1616
|
+
.long 0x000000FF @terminator
|
|
1617
|
+
|
|
1618
|
+
@----------------------------------------------------------------------------
|
|
1619
|
+
@
|
|
1620
|
+
@ void KeccakP1600_Permute( void *state, void * rc )
|
|
1621
|
+
@
|
|
1622
|
+
.align 8
|
|
1623
|
+
KeccakP1600_Permute:
|
|
1624
|
+
push { r4 - r6, lr }
|
|
1625
|
+
mov r2, r8
|
|
1626
|
+
mov r3, r9
|
|
1627
|
+
mov r4, r10
|
|
1628
|
+
mov r5, r11
|
|
1629
|
+
mov r6, r12
|
|
1630
|
+
push { r2 - r7 }
|
|
1631
|
+
sub sp, #mSize
|
|
1632
|
+
str r1, [sp, #mRC]
|
|
1633
|
+
KeccakP1600_Permute_RoundLoop:
|
|
1634
|
+
KeccakRound0
|
|
1635
|
+
KeccakP1600_Permute_Round3Mod4:
|
|
1636
|
+
KeccakRound1
|
|
1637
|
+
KeccakP1600_Permute_Round2Mod4:
|
|
1638
|
+
KeccakRound2
|
|
1639
|
+
KeccakP1600_Permute_Round1Mod4:
|
|
1640
|
+
KeccakRound3
|
|
1641
|
+
beq KeccakP1600_Permute_Done
|
|
1642
|
+
ldr r1, =KeccakP1600_Permute_RoundLoop+1
|
|
1643
|
+
bx r1
|
|
1644
|
+
.ltorg
|
|
1645
|
+
KeccakP1600_Permute_Done:
|
|
1646
|
+
add sp, #mSize
|
|
1647
|
+
pop { r1 - r5, r7 }
|
|
1648
|
+
mov r8, r1
|
|
1649
|
+
mov r9, r2
|
|
1650
|
+
mov r10, r3
|
|
1651
|
+
mov r11, r4
|
|
1652
|
+
mov r12, r5
|
|
1653
|
+
pop { r4 - r6, pc }
|
|
1654
|
+
|
|
1655
|
+
|