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,1338 @@
|
|
|
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 ARMCC compiler.
|
|
26
|
+
|
|
27
|
+
PRESERVE8
|
|
28
|
+
THUMB
|
|
29
|
+
AREA |.text|, CODE, READONLY
|
|
30
|
+
|
|
31
|
+
; Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
|
|
32
|
+
MACRO
|
|
33
|
+
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
|
+
MEND
|
|
117
|
+
|
|
118
|
+
; Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
|
|
119
|
+
MACRO
|
|
120
|
+
fromBitInterleavingStep $x, $t, $tt, $pMask, $maskofs, $shift
|
|
121
|
+
|
|
122
|
+
; t = (x ^ (x >> shift)) & mask; x = x ^ t ^ (t << shift);
|
|
123
|
+
lsrs $t, $x, #$shift
|
|
124
|
+
eors $t, $t, $x
|
|
125
|
+
ldr $tt, [$pMask, #$maskofs]
|
|
126
|
+
ands $t, $t, $tt
|
|
127
|
+
eors $x, $x, $t
|
|
128
|
+
lsls $t, $t, #$shift
|
|
129
|
+
eors $x, $x, $t
|
|
130
|
+
MEND
|
|
131
|
+
|
|
132
|
+
MACRO
|
|
133
|
+
fromBitInterleaving $x0, $x1, $t, $tt, $pMask
|
|
134
|
+
movs $t, $x0 ; t = x0
|
|
135
|
+
lsls $x0, $x0, #16 ; x0 = (x0 & 0x0000FFFF) | (x1 << 16);
|
|
136
|
+
lsrs $x0, $x0, #16
|
|
137
|
+
lsls $tt, $x1, #16
|
|
138
|
+
orrs $x0, $x0, $tt
|
|
139
|
+
lsrs $x1, $x1, #16 ; x1 = (t >> 16) | (x1 & 0xFFFF0000);
|
|
140
|
+
lsls $x1, $x1, #16
|
|
141
|
+
lsrs $t, $t, #16
|
|
142
|
+
orrs $x1, $x1, $t
|
|
143
|
+
fromBitInterleavingStep $x0, $t, $tt, $pMask, 0, 8
|
|
144
|
+
fromBitInterleavingStep $x0, $t, $tt, $pMask, 4, 4
|
|
145
|
+
fromBitInterleavingStep $x0, $t, $tt, $pMask, 8, 2
|
|
146
|
+
fromBitInterleavingStep $x0, $t, $tt, $pMask, 12, 1
|
|
147
|
+
fromBitInterleavingStep $x1, $t, $tt, $pMask, 0, 8
|
|
148
|
+
fromBitInterleavingStep $x1, $t, $tt, $pMask, 4, 4
|
|
149
|
+
fromBitInterleavingStep $x1, $t, $tt, $pMask, 8, 2
|
|
150
|
+
fromBitInterleavingStep $x1, $t, $tt, $pMask, 12, 1
|
|
151
|
+
MEND
|
|
152
|
+
|
|
153
|
+
; --- offsets in state
|
|
154
|
+
_ba0 equ 0*4
|
|
155
|
+
_ba1 equ 1*4
|
|
156
|
+
_be0 equ 2*4
|
|
157
|
+
_be1 equ 3*4
|
|
158
|
+
_bi0 equ 4*4
|
|
159
|
+
_bi1 equ 5*4
|
|
160
|
+
_bo0 equ 6*4
|
|
161
|
+
_bo1 equ 7*4
|
|
162
|
+
_bu0 equ 8*4
|
|
163
|
+
_bu1 equ 9*4
|
|
164
|
+
_ga0 equ 10*4
|
|
165
|
+
_ga1 equ 11*4
|
|
166
|
+
_ge0 equ 12*4
|
|
167
|
+
_ge1 equ 13*4
|
|
168
|
+
_gi0 equ 14*4
|
|
169
|
+
_gi1 equ 15*4
|
|
170
|
+
_go0 equ 16*4
|
|
171
|
+
_go1 equ 17*4
|
|
172
|
+
_gu0 equ 18*4
|
|
173
|
+
_gu1 equ 19*4
|
|
174
|
+
_ka0 equ 20*4
|
|
175
|
+
_ka1 equ 21*4
|
|
176
|
+
_ke0 equ 22*4
|
|
177
|
+
_ke1 equ 23*4
|
|
178
|
+
_ki0 equ 24*4
|
|
179
|
+
_ki1 equ 25*4
|
|
180
|
+
_ko0 equ 26*4
|
|
181
|
+
_ko1 equ 27*4
|
|
182
|
+
_ku0 equ 28*4
|
|
183
|
+
_ku1 equ 29*4
|
|
184
|
+
_ma0 equ 30*4
|
|
185
|
+
_ma1 equ 31*4
|
|
186
|
+
_me0 equ 32*4
|
|
187
|
+
_me1 equ 33*4
|
|
188
|
+
_mi0 equ 34*4
|
|
189
|
+
_mi1 equ 35*4
|
|
190
|
+
_mo0 equ 36*4
|
|
191
|
+
_mo1 equ 37*4
|
|
192
|
+
_mu0 equ 38*4
|
|
193
|
+
_mu1 equ 39*4
|
|
194
|
+
_sa0 equ 40*4
|
|
195
|
+
_sa1 equ 41*4
|
|
196
|
+
_se0 equ 42*4
|
|
197
|
+
_se1 equ 43*4
|
|
198
|
+
_si0 equ 44*4
|
|
199
|
+
_si1 equ 45*4
|
|
200
|
+
_so0 equ 46*4
|
|
201
|
+
_so1 equ 47*4
|
|
202
|
+
_su0 equ 48*4
|
|
203
|
+
_su1 equ 49*4
|
|
204
|
+
|
|
205
|
+
; --- offsets on stack
|
|
206
|
+
mEs equ 0 ; Secondary state
|
|
207
|
+
mD equ 25*2*4
|
|
208
|
+
mDo0 equ mD+0*4
|
|
209
|
+
mDo1 equ mD+1*4
|
|
210
|
+
mDu0 equ mD+2*4
|
|
211
|
+
mDu1 equ mD+3*4
|
|
212
|
+
mRC equ mD+4*4
|
|
213
|
+
mRfu equ mD+5*4
|
|
214
|
+
mSize equ mD+6*4
|
|
215
|
+
|
|
216
|
+
; --- macros
|
|
217
|
+
|
|
218
|
+
MACRO
|
|
219
|
+
xor5 $result,$b,$g,$k,$m,$s
|
|
220
|
+
ldr $result, [r0, #$b]
|
|
221
|
+
ldr r6, [r0, #$g]
|
|
222
|
+
eors $result, $result, r6
|
|
223
|
+
ldr r6, [r0, #$k]
|
|
224
|
+
eors $result, $result, r6
|
|
225
|
+
ldr r6, [r5, #$m-_ma0]
|
|
226
|
+
eors $result, $result, r6
|
|
227
|
+
ldr r6, [r5, #$s-_ma0]
|
|
228
|
+
eors $result, $result, r6
|
|
229
|
+
MEND
|
|
230
|
+
|
|
231
|
+
MACRO
|
|
232
|
+
te0m $oD, $rCp0, $rCn1
|
|
233
|
+
rors $rCn1, $rCn1, r4
|
|
234
|
+
eors $rCn1, $rCn1, $rCp0
|
|
235
|
+
str $rCn1, [sp, #$oD]
|
|
236
|
+
MEND
|
|
237
|
+
|
|
238
|
+
MACRO
|
|
239
|
+
te1m $oD, $rCp1, $rCn0
|
|
240
|
+
eors $rCn0, $rCn0, $rCp1
|
|
241
|
+
str $rCn0, [sp, #$oD]
|
|
242
|
+
MEND
|
|
243
|
+
|
|
244
|
+
MACRO
|
|
245
|
+
te0r $rD, $rCp0, $rCn1
|
|
246
|
+
rors $rCn1, $rCn1, r4
|
|
247
|
+
eors $rCn1, $rCn1, $rCp0
|
|
248
|
+
mov $rD, $rCn1
|
|
249
|
+
MEND
|
|
250
|
+
|
|
251
|
+
MACRO
|
|
252
|
+
te1r $rD, $rCp1, $rCn0
|
|
253
|
+
eors $rCn0, $rCn0, $rCp1
|
|
254
|
+
mov $rD, $rCn0
|
|
255
|
+
MEND
|
|
256
|
+
|
|
257
|
+
MACRO ; Theta Rho Pi (1 half-lane)
|
|
258
|
+
trp1 $b, $ofS, $orD, $fD, $rot
|
|
259
|
+
ldr $b, [r0, #$ofS]
|
|
260
|
+
if $fD != 0
|
|
261
|
+
mov r6, $orD
|
|
262
|
+
else
|
|
263
|
+
ldr r6, [sp, #$orD]
|
|
264
|
+
endif
|
|
265
|
+
eors $b, $b, r6
|
|
266
|
+
if $rot != 0
|
|
267
|
+
movs r6, #32-$rot
|
|
268
|
+
rors $b, $b, r6
|
|
269
|
+
endif
|
|
270
|
+
MEND
|
|
271
|
+
|
|
272
|
+
MACRO ; Theta Rho Pi (5 even half-lanes)
|
|
273
|
+
trp5e $oS0, $orD0, $fD0, $oR0, $oS1, $orD1, $fD1, $oR1, $oS2, $orD2, $fD2, $oR2, $oS3, $orD3, $fD3, $oR3, $oS4, $orD4, $fD4, $oR4
|
|
274
|
+
trp1 r1, $oS0, $orD0, $fD0, $oR0
|
|
275
|
+
trp1 r2, $oS1, $orD1, $fD1, $oR1
|
|
276
|
+
trp1 r3, $oS2, $orD2, $fD2, $oR2
|
|
277
|
+
adds r0, r0, #_ma0
|
|
278
|
+
trp1 r4, $oS3-_ma0, $orD3, $fD3, $oR3
|
|
279
|
+
trp1 r5, $oS4-_ma0, $orD4, $fD4, $oR4
|
|
280
|
+
MEND
|
|
281
|
+
|
|
282
|
+
MACRO ; Theta Rho Pi (5 odd half-lanes)
|
|
283
|
+
trp5o $oS0, $orD0, $fD0, $oR0, $oS1, $orD1, $fD1, $oR1, $oS2, $orD2, $fD2, $oR2, $oS3, $orD3, $fD3, $oR3, $oS4, $orD4, $fD4, $oR4
|
|
284
|
+
trp1 r4, $oS3-_ma0, $orD3, $fD3, $oR3
|
|
285
|
+
trp1 r5, $oS4-_ma0, $orD4, $fD4, $oR4
|
|
286
|
+
subs r0, r0, #_ma0
|
|
287
|
+
trp1 r1, $oS0, $orD0, $fD0, $oR0
|
|
288
|
+
trp1 r2, $oS1, $orD1, $fD1, $oR1
|
|
289
|
+
trp1 r3, $oS2, $orD2, $fD2, $oR2
|
|
290
|
+
MEND
|
|
291
|
+
|
|
292
|
+
MACRO ; Chi Iota (1 half-lane)
|
|
293
|
+
chio1 $oOut, $ax0, $ax1, $ax2, $iota, $useax2
|
|
294
|
+
if $useax2 != 0
|
|
295
|
+
bics $ax2, $ax2, $ax1 ; A[x+2] = A[x+2] & ~A[x+1]
|
|
296
|
+
eors $ax2, $ax2, $ax0 ; A[x+2] = A[x+2] ^ A[x]
|
|
297
|
+
if $iota != 0xFF
|
|
298
|
+
ldr r1, [sp, #mRC]
|
|
299
|
+
ldr r4, [r1, #$iota]
|
|
300
|
+
eors $ax2, $ax2, r4
|
|
301
|
+
endif
|
|
302
|
+
str $ax2, [r7, #$oOut]
|
|
303
|
+
else
|
|
304
|
+
mov r6, $ax2 ; T1 = A[x+2]
|
|
305
|
+
bics r6, r6, $ax1 ; T1 = T1 & ~A[x+1]
|
|
306
|
+
eors r6, r6, $ax0 ; T1 = T1 ^ A[x]
|
|
307
|
+
str r6, [r7, #$oOut]
|
|
308
|
+
endif
|
|
309
|
+
MEND
|
|
310
|
+
|
|
311
|
+
MACRO ; Chi Iota (5 half-lanes)
|
|
312
|
+
chio5 $oOut, $iota
|
|
313
|
+
chio1 $oOut+8*4, r5, r1, r2, 0xFF, 0
|
|
314
|
+
chio1 $oOut+6*4, r4, r5, r1, 0xFF, 0
|
|
315
|
+
chio1 $oOut+4*4, r3, r4, r5, 0xFF, 1
|
|
316
|
+
chio1 $oOut+2*4, r2, r3, r4, 0xFF, 1
|
|
317
|
+
chio1 $oOut+0*4, r1, r2, r3, $iota, 1
|
|
318
|
+
MEND
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
;----------------------------------------------------------------------------
|
|
322
|
+
;
|
|
323
|
+
; void KeccakP1600_StaticInitialize( void )
|
|
324
|
+
;
|
|
325
|
+
ALIGN
|
|
326
|
+
EXPORT KeccakP1600_StaticInitialize
|
|
327
|
+
KeccakP1600_StaticInitialize PROC
|
|
328
|
+
bx lr
|
|
329
|
+
ENDP
|
|
330
|
+
|
|
331
|
+
;----------------------------------------------------------------------------
|
|
332
|
+
;
|
|
333
|
+
; void KeccakP1600_Initialize(void *state)
|
|
334
|
+
;
|
|
335
|
+
ALIGN
|
|
336
|
+
EXPORT KeccakP1600_Initialize
|
|
337
|
+
KeccakP1600_Initialize PROC
|
|
338
|
+
push {r4 - r5}
|
|
339
|
+
movs r1, #0
|
|
340
|
+
movs r2, #0
|
|
341
|
+
movs r3, #0
|
|
342
|
+
movs r4, #0
|
|
343
|
+
movs r5, #0
|
|
344
|
+
stmia r0!, { r1 - r5 }
|
|
345
|
+
stmia r0!, { r1 - r5 }
|
|
346
|
+
stmia r0!, { r1 - r5 }
|
|
347
|
+
stmia r0!, { r1 - r5 }
|
|
348
|
+
stmia r0!, { r1 - r5 }
|
|
349
|
+
stmia r0!, { r1 - r5 }
|
|
350
|
+
stmia r0!, { r1 - r5 }
|
|
351
|
+
stmia r0!, { r1 - r5 }
|
|
352
|
+
stmia r0!, { r1 - r5 }
|
|
353
|
+
stmia r0!, { r1 - r5 }
|
|
354
|
+
pop {r4 - r5}
|
|
355
|
+
bx lr
|
|
356
|
+
ENDP
|
|
357
|
+
|
|
358
|
+
; ----------------------------------------------------------------------------
|
|
359
|
+
;
|
|
360
|
+
; void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
361
|
+
;
|
|
362
|
+
ALIGN
|
|
363
|
+
EXPORT KeccakP1600_AddByte
|
|
364
|
+
KeccakP1600_AddByte PROC
|
|
365
|
+
push {r4 - r7}
|
|
366
|
+
mov r4, r8
|
|
367
|
+
mov r5, r9
|
|
368
|
+
push {r4 - r5}
|
|
369
|
+
lsrs r4, r2, #3 ; offset &= ~7
|
|
370
|
+
lsls r4, r4, #3
|
|
371
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
372
|
+
lsls r2, r2, #29 ; offset &= 7 (part not lane aligned)
|
|
373
|
+
lsrs r2, r2, #29
|
|
374
|
+
adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
375
|
+
movs r4, #0
|
|
376
|
+
movs r5, #0
|
|
377
|
+
push { r4 - r5 }
|
|
378
|
+
add r2, r2, sp
|
|
379
|
+
strb r1, [r2]
|
|
380
|
+
pop { r4 - r5 }
|
|
381
|
+
mov r8, r4
|
|
382
|
+
mov r9, r5
|
|
383
|
+
toBitInterleaving r8, r9, r4, r5, r6, r2, r7
|
|
384
|
+
ldr r6, [r0]
|
|
385
|
+
eors r4, r4, r6
|
|
386
|
+
ldr r6, [r0, #4]
|
|
387
|
+
eors r5, r5, r6
|
|
388
|
+
stmia r0!, { r4, r5 }
|
|
389
|
+
pop {r4 - r5}
|
|
390
|
+
mov r8, r4
|
|
391
|
+
mov r9, r5
|
|
392
|
+
pop {r4 - r7}
|
|
393
|
+
bx lr
|
|
394
|
+
ENDP
|
|
395
|
+
|
|
396
|
+
;----------------------------------------------------------------------------
|
|
397
|
+
;
|
|
398
|
+
; void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
399
|
+
;
|
|
400
|
+
ALIGN
|
|
401
|
+
EXPORT KeccakP1600_AddBytes
|
|
402
|
+
KeccakP1600_AddBytes PROC
|
|
403
|
+
cmp r3, #0 ; if length != 0
|
|
404
|
+
beq KeccakP1600_AddBytes_Exit1
|
|
405
|
+
push {r4 - r6, lr} ; then
|
|
406
|
+
mov r4, r8
|
|
407
|
+
mov r5, r9
|
|
408
|
+
mov r6, r10
|
|
409
|
+
push {r4 - r7}
|
|
410
|
+
lsrs r4, r2, #3 ; offset &= ~7
|
|
411
|
+
lsls r4, r4, #3
|
|
412
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
413
|
+
lsls r2, r2, #29 ; offset &= 7 (part not lane aligned)
|
|
414
|
+
lsrs r2, r2, #29
|
|
415
|
+
beq KeccakP1600_AddBytes_CheckLanes ; if offset != 0
|
|
416
|
+
movs r4, r3 ; then, do remaining bytes in first lane
|
|
417
|
+
movs r5, #8
|
|
418
|
+
subs r5, r2 ; max size in lane = 8 - offset
|
|
419
|
+
cmp r4, r5
|
|
420
|
+
ble KeccakP1600_AddBytes_BytesAlign
|
|
421
|
+
movs r4, r5
|
|
422
|
+
KeccakP1600_AddBytes_BytesAlign
|
|
423
|
+
subs r3, r3, r4 ; size left
|
|
424
|
+
mov r10, r3
|
|
425
|
+
movs r3, r4
|
|
426
|
+
adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
427
|
+
bl __KeccakP1600_AddBytesInLane
|
|
428
|
+
mov r3, r10
|
|
429
|
+
KeccakP1600_AddBytes_CheckLanes
|
|
430
|
+
lsrs r2, r3, #3 ; if length >= 8
|
|
431
|
+
beq KeccakP1600_AddBytes_Bytes
|
|
432
|
+
mov r10, r3
|
|
433
|
+
adr r3, KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
434
|
+
bl __KeccakP1600_AddLanes
|
|
435
|
+
mov r3, r10
|
|
436
|
+
lsls r3, r3, #29
|
|
437
|
+
lsrs r3, r3, #29
|
|
438
|
+
KeccakP1600_AddBytes_Bytes
|
|
439
|
+
cmp r3, #0
|
|
440
|
+
beq KeccakP1600_AddBytes_Exit
|
|
441
|
+
movs r2, #0
|
|
442
|
+
adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
443
|
+
bl __KeccakP1600_AddBytesInLane
|
|
444
|
+
KeccakP1600_AddBytes_Exit
|
|
445
|
+
pop {r4 - r7}
|
|
446
|
+
mov r8, r4
|
|
447
|
+
mov r9, r5
|
|
448
|
+
mov r10, r6
|
|
449
|
+
pop {r4 - r6, pc}
|
|
450
|
+
KeccakP1600_AddBytes_Exit1
|
|
451
|
+
bx lr
|
|
452
|
+
nop
|
|
453
|
+
KeccakP1600_AddBytes_ToBitInterleavingConstants
|
|
454
|
+
dcd 0x55555555
|
|
455
|
+
dcd 0x33333333
|
|
456
|
+
dcd 0x0F0F0F0F
|
|
457
|
+
dcd 0x00FF00FF
|
|
458
|
+
dcd 0xAAAAAAAA
|
|
459
|
+
dcd 0xCCCCCCCC
|
|
460
|
+
dcd 0xF0F0F0F0
|
|
461
|
+
dcd 0xFF00FF00
|
|
462
|
+
ENDP
|
|
463
|
+
|
|
464
|
+
;----------------------------------------------------------------------------
|
|
465
|
+
;
|
|
466
|
+
; __KeccakP1600_AddLanes
|
|
467
|
+
;
|
|
468
|
+
; Input:
|
|
469
|
+
; r0 state pointer
|
|
470
|
+
; r1 data pointer
|
|
471
|
+
; r2 laneCount
|
|
472
|
+
; r3 to bit interleaving constants pointer
|
|
473
|
+
;
|
|
474
|
+
; Output:
|
|
475
|
+
; r0 state pointer next lane
|
|
476
|
+
; r1 data pointer next byte to input
|
|
477
|
+
;
|
|
478
|
+
; Changed: r2-r9
|
|
479
|
+
;
|
|
480
|
+
ALIGN
|
|
481
|
+
__KeccakP1600_AddLanes PROC
|
|
482
|
+
lsls r4, r1, #30
|
|
483
|
+
bne __KeccakP1600_AddLanes_LoopUnaligned
|
|
484
|
+
__KeccakP1600_AddLanes_LoopAligned
|
|
485
|
+
ldmia r1!, {r6,r7}
|
|
486
|
+
mov r8, r6
|
|
487
|
+
mov r9, r7
|
|
488
|
+
toBitInterleaving r8, r9, r6, r7, r5, r4, r3
|
|
489
|
+
ldr r5, [r0]
|
|
490
|
+
eors r6, r6, r5
|
|
491
|
+
ldr r5, [r0, #4]
|
|
492
|
+
eors r7, r7, r5
|
|
493
|
+
stmia r0!, {r6,r7}
|
|
494
|
+
subs r2, r2, #1
|
|
495
|
+
bne __KeccakP1600_AddLanes_LoopAligned
|
|
496
|
+
bx lr
|
|
497
|
+
__KeccakP1600_AddLanes_LoopUnaligned
|
|
498
|
+
ldrb r6, [r1, #0]
|
|
499
|
+
ldrb r4, [r1, #1]
|
|
500
|
+
lsls r4, r4, #8
|
|
501
|
+
orrs r6, r6, r4
|
|
502
|
+
ldrb r4, [r1, #2]
|
|
503
|
+
lsls r4, r4, #16
|
|
504
|
+
orrs r6, r6, r4
|
|
505
|
+
ldrb r4, [r1, #3]
|
|
506
|
+
lsls r4, r4, #24
|
|
507
|
+
orrs r6, r6, r4
|
|
508
|
+
ldrb r7, [r1, #4]
|
|
509
|
+
ldrb r4, [r1, #5]
|
|
510
|
+
lsls r4, r4, #8
|
|
511
|
+
orrs r7, r7, r4
|
|
512
|
+
ldrb r4, [r1, #6]
|
|
513
|
+
lsls r4, r4, #16
|
|
514
|
+
orrs r7, r7, r4
|
|
515
|
+
ldrb r4, [r1, #7]
|
|
516
|
+
lsls r4, r4, #24
|
|
517
|
+
orrs r7, r7, r4
|
|
518
|
+
adds r1, r1, #8
|
|
519
|
+
mov r8, r6
|
|
520
|
+
mov r9, r7
|
|
521
|
+
toBitInterleaving r8, r9, r6, r7, r5, r4, r3
|
|
522
|
+
ldr r5, [r0]
|
|
523
|
+
eors r6, r6, r5
|
|
524
|
+
ldr r5, [r0, #4]
|
|
525
|
+
eors r7, r7, r5
|
|
526
|
+
stmia r0!, {r6, r7}
|
|
527
|
+
subs r2, r2, #1
|
|
528
|
+
bne __KeccakP1600_AddLanes_LoopUnaligned
|
|
529
|
+
bx lr
|
|
530
|
+
ENDP
|
|
531
|
+
|
|
532
|
+
;----------------------------------------------------------------------------
|
|
533
|
+
;
|
|
534
|
+
; __KeccakP1600_AddBytesInLane
|
|
535
|
+
;
|
|
536
|
+
; Input:
|
|
537
|
+
; r0 state pointer
|
|
538
|
+
; r1 data pointer
|
|
539
|
+
; r2 offset in lane
|
|
540
|
+
; r3 length
|
|
541
|
+
; r7 to bit interleaving constants pointer
|
|
542
|
+
;
|
|
543
|
+
; Output:
|
|
544
|
+
; r0 state pointer next lane
|
|
545
|
+
; r1 data pointer next byte to input
|
|
546
|
+
;
|
|
547
|
+
; Changed: r2-r9
|
|
548
|
+
;
|
|
549
|
+
ALIGN
|
|
550
|
+
__KeccakP1600_AddBytesInLane PROC
|
|
551
|
+
movs r4, #0
|
|
552
|
+
movs r5, #0
|
|
553
|
+
push { r4 - r5 }
|
|
554
|
+
add r2, r2, sp
|
|
555
|
+
__KeccakP1600_AddBytesInLane_Loop
|
|
556
|
+
ldrb r5, [r1]
|
|
557
|
+
strb r5, [r2]
|
|
558
|
+
adds r1, r1, #1
|
|
559
|
+
adds r2, r2, #1
|
|
560
|
+
subs r3, r3, #1
|
|
561
|
+
bne __KeccakP1600_AddBytesInLane_Loop
|
|
562
|
+
pop { r4 - r5 }
|
|
563
|
+
mov r8, r4
|
|
564
|
+
mov r9, r5
|
|
565
|
+
toBitInterleaving r8, r9, r4, r5, r6, r2, r7
|
|
566
|
+
ldr r6, [r0]
|
|
567
|
+
eors r4, r4, r6
|
|
568
|
+
ldr r6, [r0, #4]
|
|
569
|
+
eors r5, r5, r6
|
|
570
|
+
stmia r0!, { r4, r5 }
|
|
571
|
+
bx lr
|
|
572
|
+
ENDP
|
|
573
|
+
|
|
574
|
+
;----------------------------------------------------------------------------
|
|
575
|
+
;
|
|
576
|
+
; void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
577
|
+
;
|
|
578
|
+
ALIGN
|
|
579
|
+
EXPORT KeccakP1600_OverwriteBytes
|
|
580
|
+
KeccakP1600_OverwriteBytes PROC
|
|
581
|
+
cmp r3, #0 ; if length != 0
|
|
582
|
+
beq KeccakP1600_OverwriteBytes_Exit1
|
|
583
|
+
push {r4 - r6, lr} ; then
|
|
584
|
+
mov r4, r8
|
|
585
|
+
mov r5, r9
|
|
586
|
+
mov r6, r10
|
|
587
|
+
push {r4 - r7}
|
|
588
|
+
lsrs r4, r2, #3 ; offset &= ~7
|
|
589
|
+
lsls r4, r4, #3
|
|
590
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
591
|
+
lsls r2, r2, #29 ; offset &= 7 (part not lane aligned)
|
|
592
|
+
lsrs r2, r2, #29
|
|
593
|
+
beq KeccakP1600_OverwriteBytes_CheckLanes ; if offset != 0
|
|
594
|
+
movs r4, r3 ; then, do remaining bytes in first lane
|
|
595
|
+
movs r5, #8
|
|
596
|
+
subs r5, r2 ; max size in lane = 8 - offset
|
|
597
|
+
cmp r4, r5
|
|
598
|
+
ble KeccakP1600_OverwriteBytes_BytesAlign
|
|
599
|
+
movs r4, r5
|
|
600
|
+
KeccakP1600_OverwriteBytes_BytesAlign
|
|
601
|
+
subs r3, r3, r4 ; size left
|
|
602
|
+
mov r10, r3
|
|
603
|
+
movs r3, r4
|
|
604
|
+
adr r7, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
|
|
605
|
+
bl __KeccakP1600_OverwriteBytesInLane
|
|
606
|
+
mov r3, r10
|
|
607
|
+
KeccakP1600_OverwriteBytes_CheckLanes
|
|
608
|
+
lsrs r2, r3, #3 ; if length >= 8
|
|
609
|
+
beq KeccakP1600_OverwriteBytes_Bytes
|
|
610
|
+
mov r10, r3
|
|
611
|
+
adr r3, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
|
|
612
|
+
bl __KeccakP1600_OverwriteLanes
|
|
613
|
+
mov r3, r10
|
|
614
|
+
lsls r3, r3, #29
|
|
615
|
+
lsrs r3, r3, #29
|
|
616
|
+
KeccakP1600_OverwriteBytes_Bytes
|
|
617
|
+
cmp r3, #0
|
|
618
|
+
beq KeccakP1600_OverwriteBytes_Exit
|
|
619
|
+
movs r2, #0
|
|
620
|
+
adr r7, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
|
|
621
|
+
bl __KeccakP1600_OverwriteBytesInLane
|
|
622
|
+
KeccakP1600_OverwriteBytes_Exit
|
|
623
|
+
pop {r4 - r7}
|
|
624
|
+
mov r8, r4
|
|
625
|
+
mov r9, r5
|
|
626
|
+
mov r10, r6
|
|
627
|
+
pop {r4 - r6, pc}
|
|
628
|
+
KeccakP1600_OverwriteBytes_Exit1
|
|
629
|
+
bx lr
|
|
630
|
+
nop
|
|
631
|
+
KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
|
|
632
|
+
dcd 0x55555555
|
|
633
|
+
dcd 0x33333333
|
|
634
|
+
dcd 0x0F0F0F0F
|
|
635
|
+
dcd 0x00FF00FF
|
|
636
|
+
dcd 0xAAAAAAAA
|
|
637
|
+
dcd 0xCCCCCCCC
|
|
638
|
+
dcd 0xF0F0F0F0
|
|
639
|
+
dcd 0xFF00FF00
|
|
640
|
+
ENDP
|
|
641
|
+
|
|
642
|
+
;----------------------------------------------------------------------------
|
|
643
|
+
;
|
|
644
|
+
; __KeccakP1600_OverwriteLanes
|
|
645
|
+
;
|
|
646
|
+
; Input:
|
|
647
|
+
; r0 state pointer
|
|
648
|
+
; r1 data pointer
|
|
649
|
+
; r2 laneCount
|
|
650
|
+
; r3 to bit interleaving constants pointer
|
|
651
|
+
;
|
|
652
|
+
; Output:
|
|
653
|
+
; r0 state pointer next lane
|
|
654
|
+
; r1 data pointer next byte to input
|
|
655
|
+
;
|
|
656
|
+
; Changed: r2-r9
|
|
657
|
+
;
|
|
658
|
+
ALIGN
|
|
659
|
+
__KeccakP1600_OverwriteLanes PROC
|
|
660
|
+
lsls r4, r1, #30
|
|
661
|
+
bne __KeccakP1600_OverwriteLanes_LoopUnaligned
|
|
662
|
+
__KeccakP1600_OverwriteLanes_LoopAligned
|
|
663
|
+
ldmia r1!, {r6,r7}
|
|
664
|
+
mov r8, r6
|
|
665
|
+
mov r9, r7
|
|
666
|
+
toBitInterleaving r8, r9, r6, r7, r5, r4, r3
|
|
667
|
+
stmia r0!, {r6,r7}
|
|
668
|
+
subs r2, r2, #1
|
|
669
|
+
bne __KeccakP1600_OverwriteLanes_LoopAligned
|
|
670
|
+
bx lr
|
|
671
|
+
__KeccakP1600_OverwriteLanes_LoopUnaligned
|
|
672
|
+
ldrb r6, [r1, #0]
|
|
673
|
+
ldrb r4, [r1, #1]
|
|
674
|
+
lsls r4, r4, #8
|
|
675
|
+
orrs r6, r6, r4
|
|
676
|
+
ldrb r4, [r1, #2]
|
|
677
|
+
lsls r4, r4, #16
|
|
678
|
+
orrs r6, r6, r4
|
|
679
|
+
ldrb r4, [r1, #3]
|
|
680
|
+
lsls r4, r4, #24
|
|
681
|
+
orrs r6, r6, r4
|
|
682
|
+
ldrb r7, [r1, #4]
|
|
683
|
+
ldrb r4, [r1, #5]
|
|
684
|
+
lsls r4, r4, #8
|
|
685
|
+
orrs r7, r7, r4
|
|
686
|
+
ldrb r4, [r1, #6]
|
|
687
|
+
lsls r4, r4, #16
|
|
688
|
+
orrs r7, r7, r4
|
|
689
|
+
ldrb r4, [r1, #7]
|
|
690
|
+
lsls r4, r4, #24
|
|
691
|
+
orrs r7, r7, r4
|
|
692
|
+
adds r1, r1, #8
|
|
693
|
+
mov r8, r6
|
|
694
|
+
mov r9, r7
|
|
695
|
+
toBitInterleaving r8, r9, r6, r7, r5, r4, r3
|
|
696
|
+
stmia r0!, {r6, r7}
|
|
697
|
+
subs r2, r2, #1
|
|
698
|
+
bne __KeccakP1600_OverwriteLanes_LoopUnaligned
|
|
699
|
+
bx lr
|
|
700
|
+
ENDP
|
|
701
|
+
|
|
702
|
+
;----------------------------------------------------------------------------
|
|
703
|
+
;
|
|
704
|
+
; __KeccakP1600_OverwriteBytesInLane
|
|
705
|
+
;
|
|
706
|
+
; Input:
|
|
707
|
+
; r0 state pointer
|
|
708
|
+
; r1 data pointer
|
|
709
|
+
; r2 offset in lane
|
|
710
|
+
; r3 length
|
|
711
|
+
; r7 to bit interleaving constants pointer
|
|
712
|
+
;
|
|
713
|
+
; Output:
|
|
714
|
+
; r0 state pointer next lane
|
|
715
|
+
; r1 data pointer next byte to input
|
|
716
|
+
;
|
|
717
|
+
; Changed: r2-r9
|
|
718
|
+
;
|
|
719
|
+
ALIGN
|
|
720
|
+
__KeccakP1600_OverwriteBytesInLane PROC
|
|
721
|
+
movs r4, #0
|
|
722
|
+
movs r5, #0
|
|
723
|
+
push { r4 - r5 }
|
|
724
|
+
lsls r6, r2, #2
|
|
725
|
+
add r2, r2, sp
|
|
726
|
+
movs r4, #0x0F ;r4 mask to wipe nibbles(bit interleaved bytes) in state
|
|
727
|
+
lsls r4, r4, r6
|
|
728
|
+
movs r6, r4
|
|
729
|
+
__KeccakP1600_OverwriteBytesInLane_Loop
|
|
730
|
+
orrs r6, r6, r4
|
|
731
|
+
lsls r4, r4, #4
|
|
732
|
+
ldrb r5, [r1]
|
|
733
|
+
strb r5, [r2]
|
|
734
|
+
adds r1, r1, #1
|
|
735
|
+
adds r2, r2, #1
|
|
736
|
+
subs r3, r3, #1
|
|
737
|
+
bne __KeccakP1600_OverwriteBytesInLane_Loop
|
|
738
|
+
pop { r4 - r5 }
|
|
739
|
+
mov r8, r4
|
|
740
|
+
mov r9, r5
|
|
741
|
+
toBitInterleaving r8, r9, r4, r5, r3, r2, r7
|
|
742
|
+
ldr r3, [r0]
|
|
743
|
+
bics r3, r3, r6
|
|
744
|
+
eors r4, r4, r3
|
|
745
|
+
ldr r3, [r0, #4]
|
|
746
|
+
bics r3, r3, r6
|
|
747
|
+
eors r5, r5, r3
|
|
748
|
+
stmia r0!, { r4, r5 }
|
|
749
|
+
bx lr
|
|
750
|
+
ENDP
|
|
751
|
+
|
|
752
|
+
;----------------------------------------------------------------------------
|
|
753
|
+
;
|
|
754
|
+
; void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
755
|
+
;
|
|
756
|
+
ALIGN
|
|
757
|
+
EXPORT KeccakP1600_OverwriteWithZeroes
|
|
758
|
+
KeccakP1600_OverwriteWithZeroes PROC
|
|
759
|
+
push {r4 - r5}
|
|
760
|
+
lsrs r2, r1, #3
|
|
761
|
+
beq KeccakP1600_OverwriteWithZeroes_Bytes
|
|
762
|
+
movs r4, #0
|
|
763
|
+
movs r5, #0
|
|
764
|
+
KeccakP1600_OverwriteWithZeroes_LoopLanes
|
|
765
|
+
stm r0!, { r4, r5 }
|
|
766
|
+
subs r2, r2, #1
|
|
767
|
+
bne KeccakP1600_OverwriteWithZeroes_LoopLanes
|
|
768
|
+
KeccakP1600_OverwriteWithZeroes_Bytes
|
|
769
|
+
lsls r1, r1, #32-3
|
|
770
|
+
beq KeccakP1600_OverwriteWithZeroes_Exit
|
|
771
|
+
lsrs r1, r1, #32-3
|
|
772
|
+
movs r3, #0x0F ;r2 already zero, r3 = mask to wipe nibbles(bit interleaved bytes) in state
|
|
773
|
+
KeccakP1600_OverwriteWithZeroes_LoopBytes
|
|
774
|
+
orrs r2, r2, r3
|
|
775
|
+
lsls r3, r3, #4
|
|
776
|
+
subs r1, r1, #1
|
|
777
|
+
bne KeccakP1600_OverwriteWithZeroes_LoopBytes
|
|
778
|
+
ldr r4, [r0]
|
|
779
|
+
ldr r5, [r0, #4]
|
|
780
|
+
bics r4, r4, r2
|
|
781
|
+
bics r5, r5, r2
|
|
782
|
+
stm r0!, { r4, r5 }
|
|
783
|
+
KeccakP1600_OverwriteWithZeroes_Exit
|
|
784
|
+
pop {r4 - r5}
|
|
785
|
+
bx lr
|
|
786
|
+
ENDP
|
|
787
|
+
|
|
788
|
+
;----------------------------------------------------------------------------
|
|
789
|
+
;
|
|
790
|
+
; void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
791
|
+
;
|
|
792
|
+
ALIGN
|
|
793
|
+
EXPORT KeccakP1600_ExtractBytes
|
|
794
|
+
KeccakP1600_ExtractBytes PROC
|
|
795
|
+
cmp r3, #0 ; if length != 0
|
|
796
|
+
beq KeccakP1600_ExtractBytes_Exit1
|
|
797
|
+
push {r4 - r6, lr} ; then
|
|
798
|
+
mov r4, r8
|
|
799
|
+
push {r4, r7}
|
|
800
|
+
lsrs r4, r2, #3 ; offset &= ~7
|
|
801
|
+
lsls r4, r4, #3
|
|
802
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
803
|
+
lsls r2, r2, #29 ; offset &= 7 (part not lane aligned)
|
|
804
|
+
lsrs r2, r2, #29
|
|
805
|
+
beq KeccakP1600_ExtractBytes_CheckLanes ; if offset != 0
|
|
806
|
+
movs r4, r3 ; then, do remaining bytes in first lane
|
|
807
|
+
movs r5, #8
|
|
808
|
+
subs r5, r2 ; max size in lane = 8 - offset
|
|
809
|
+
cmp r4, r5
|
|
810
|
+
ble KeccakP1600_ExtractBytes_BytesAlign
|
|
811
|
+
movs r4, r5
|
|
812
|
+
KeccakP1600_ExtractBytes_BytesAlign
|
|
813
|
+
subs r3, r3, r4 ; size left
|
|
814
|
+
mov r8, r3
|
|
815
|
+
movs r3, r4
|
|
816
|
+
adr r7, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
|
|
817
|
+
bl __KeccakP1600_ExtractBytesInLane
|
|
818
|
+
mov r3, r8
|
|
819
|
+
KeccakP1600_ExtractBytes_CheckLanes
|
|
820
|
+
lsrs r2, r3, #3 ; if length >= 8
|
|
821
|
+
beq KeccakP1600_ExtractBytes_Bytes
|
|
822
|
+
mov r8, r3
|
|
823
|
+
adr r3, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
|
|
824
|
+
bl __KeccakP1600_ExtractLanes
|
|
825
|
+
mov r3, r8
|
|
826
|
+
lsls r3, r3, #29
|
|
827
|
+
lsrs r3, r3, #29
|
|
828
|
+
KeccakP1600_ExtractBytes_Bytes
|
|
829
|
+
cmp r3, #0
|
|
830
|
+
beq KeccakP1600_ExtractBytes_Exit
|
|
831
|
+
movs r2, #0
|
|
832
|
+
adr r7, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
|
|
833
|
+
bl __KeccakP1600_ExtractBytesInLane
|
|
834
|
+
KeccakP1600_ExtractBytes_Exit
|
|
835
|
+
pop {r4,r7}
|
|
836
|
+
mov r8, r4
|
|
837
|
+
pop {r4 - r6, pc}
|
|
838
|
+
KeccakP1600_ExtractBytes_Exit1
|
|
839
|
+
bx lr
|
|
840
|
+
nop
|
|
841
|
+
KeccakP1600_ExtractBytes_FromBitInterleavingConstants
|
|
842
|
+
dcd 0x0000FF00
|
|
843
|
+
dcd 0x00F000F0
|
|
844
|
+
dcd 0x0C0C0C0C
|
|
845
|
+
dcd 0x22222222
|
|
846
|
+
ENDP
|
|
847
|
+
|
|
848
|
+
;----------------------------------------------------------------------------
|
|
849
|
+
;
|
|
850
|
+
; __KeccakP1600_ExtractLanes
|
|
851
|
+
;
|
|
852
|
+
; Input:
|
|
853
|
+
; r0 state pointer
|
|
854
|
+
; r1 data pointer
|
|
855
|
+
; r2 laneCount
|
|
856
|
+
; r3 from bit interleaving constants pointer
|
|
857
|
+
;
|
|
858
|
+
; Output:
|
|
859
|
+
; r0 state pointer next lane
|
|
860
|
+
; r1 data pointer next byte to output
|
|
861
|
+
;
|
|
862
|
+
; Changed: r2-r7
|
|
863
|
+
;
|
|
864
|
+
ALIGN
|
|
865
|
+
__KeccakP1600_ExtractLanes PROC
|
|
866
|
+
lsls r4, r1, #30
|
|
867
|
+
bne __KeccakP1600_ExtractLanes_LoopUnaligned
|
|
868
|
+
__KeccakP1600_ExtractLanes_LoopAligned
|
|
869
|
+
ldmia r0!, {r6,r7}
|
|
870
|
+
fromBitInterleaving r6, r7, r5, r4, r3
|
|
871
|
+
stmia r1!, {r6,r7}
|
|
872
|
+
subs r2, r2, #1
|
|
873
|
+
bne __KeccakP1600_ExtractLanes_LoopAligned
|
|
874
|
+
bx lr
|
|
875
|
+
__KeccakP1600_ExtractLanes_LoopUnaligned
|
|
876
|
+
ldmia r0!, {r6,r7}
|
|
877
|
+
fromBitInterleaving r6, r7, r5, r4, r3
|
|
878
|
+
strb r6, [r1, #0]
|
|
879
|
+
lsrs r6, r6, #8
|
|
880
|
+
strb r6, [r1, #1]
|
|
881
|
+
lsrs r6, r6, #8
|
|
882
|
+
strb r6, [r1, #2]
|
|
883
|
+
lsrs r6, r6, #8
|
|
884
|
+
strb r6, [r1, #3]
|
|
885
|
+
strb r7, [r1, #4]
|
|
886
|
+
lsrs r7, r7, #8
|
|
887
|
+
strb r7, [r1, #5]
|
|
888
|
+
lsrs r7, r7, #8
|
|
889
|
+
strb r7, [r1, #6]
|
|
890
|
+
lsrs r7, r7, #8
|
|
891
|
+
strb r7, [r1, #7]
|
|
892
|
+
adds r1, r1, #8
|
|
893
|
+
subs r2, r2, #1
|
|
894
|
+
bne __KeccakP1600_ExtractLanes_LoopUnaligned
|
|
895
|
+
bx lr
|
|
896
|
+
ENDP
|
|
897
|
+
|
|
898
|
+
;----------------------------------------------------------------------------
|
|
899
|
+
;
|
|
900
|
+
; __KeccakP1600_ExtractBytesInLane
|
|
901
|
+
;
|
|
902
|
+
; Input:
|
|
903
|
+
; r0 state pointer
|
|
904
|
+
; r1 data pointer
|
|
905
|
+
; r2 offset in lane
|
|
906
|
+
; r3 length
|
|
907
|
+
; r7 from bit interleaving constants pointer
|
|
908
|
+
;
|
|
909
|
+
; Output:
|
|
910
|
+
; r0 state pointer next lane
|
|
911
|
+
; r1 data pointer next byte to output
|
|
912
|
+
;
|
|
913
|
+
; Changed: r2-r7
|
|
914
|
+
;
|
|
915
|
+
ALIGN
|
|
916
|
+
__KeccakP1600_ExtractBytesInLane PROC
|
|
917
|
+
ldmia r0!, {r4,r5}
|
|
918
|
+
push {r0, r3}
|
|
919
|
+
fromBitInterleaving r4, r5, r0, r3, r7
|
|
920
|
+
pop {r0, r3}
|
|
921
|
+
push {r4, r5}
|
|
922
|
+
mov r4, sp
|
|
923
|
+
adds r4, r4, r2
|
|
924
|
+
__KeccakP1600_ExtractBytesInLane_Loop
|
|
925
|
+
ldrb r2, [r4]
|
|
926
|
+
adds r4, r4, #1
|
|
927
|
+
strb r2, [r1]
|
|
928
|
+
adds r1, r1, #1
|
|
929
|
+
subs r3, r3, #1
|
|
930
|
+
bne __KeccakP1600_ExtractBytesInLane_Loop
|
|
931
|
+
add sp, #8
|
|
932
|
+
bx lr
|
|
933
|
+
ENDP
|
|
934
|
+
|
|
935
|
+
;----------------------------------------------------------------------------
|
|
936
|
+
;
|
|
937
|
+
; void KeccakP1600_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
938
|
+
;
|
|
939
|
+
ALIGN
|
|
940
|
+
EXPORT KeccakP1600_ExtractAndAddBytes
|
|
941
|
+
KeccakP1600_ExtractAndAddBytes PROC
|
|
942
|
+
push {r3 - r7, lr}
|
|
943
|
+
mov r4, r8
|
|
944
|
+
mov r5, r9
|
|
945
|
+
push {r4 - r5}
|
|
946
|
+
mov r9, r2
|
|
947
|
+
mov r2, r3
|
|
948
|
+
ldr r3, [sp, #8*4]
|
|
949
|
+
cmp r3, #0 ; if length != 0
|
|
950
|
+
beq KeccakP1600_ExtractAndAddBytes_Exit
|
|
951
|
+
lsrs r4, r2, #3 ; offset &= ~7
|
|
952
|
+
lsls r4, r4, #3
|
|
953
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
954
|
+
lsls r2, r2, #29 ; offset &= 7 (part not lane aligned)
|
|
955
|
+
lsrs r2, r2, #29
|
|
956
|
+
beq KeccakP1600_ExtractAndAddBytes_CheckLanes ; if offset != 0
|
|
957
|
+
movs r4, r3 ; then, do remaining bytes in first lane
|
|
958
|
+
movs r5, #8
|
|
959
|
+
subs r5, r2 ; max size in lane = 8 - offset
|
|
960
|
+
cmp r4, r5
|
|
961
|
+
ble KeccakP1600_ExtractAndAddBytes_BytesAlign
|
|
962
|
+
movs r4, r5
|
|
963
|
+
KeccakP1600_ExtractAndAddBytes_BytesAlign
|
|
964
|
+
subs r3, r3, r4 ; size left
|
|
965
|
+
mov r8, r3
|
|
966
|
+
movs r3, r4
|
|
967
|
+
adr r7, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
|
|
968
|
+
bl __KeccakP1600_ExtractAndAddBytesInLane
|
|
969
|
+
mov r3, r8
|
|
970
|
+
KeccakP1600_ExtractAndAddBytes_CheckLanes
|
|
971
|
+
lsrs r2, r3, #3 ; if length >= 8
|
|
972
|
+
beq KeccakP1600_ExtractAndAddBytes_Bytes
|
|
973
|
+
mov r8, r3
|
|
974
|
+
adr r3, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
|
|
975
|
+
bl __KeccakP1600_ExtractAndAddLanes
|
|
976
|
+
mov r3, r8
|
|
977
|
+
lsls r3, r3, #29
|
|
978
|
+
lsrs r3, r3, #29
|
|
979
|
+
KeccakP1600_ExtractAndAddBytes_Bytes
|
|
980
|
+
cmp r3, #0
|
|
981
|
+
beq KeccakP1600_ExtractAndAddBytes_Exit
|
|
982
|
+
movs r2, #0
|
|
983
|
+
adr r7, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
|
|
984
|
+
bl __KeccakP1600_ExtractAndAddBytesInLane
|
|
985
|
+
KeccakP1600_ExtractAndAddBytes_Exit
|
|
986
|
+
pop {r4 - r5}
|
|
987
|
+
mov r8, r4
|
|
988
|
+
mov r9, r5
|
|
989
|
+
pop {r3 - r7, pc}
|
|
990
|
+
ALIGN
|
|
991
|
+
KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
|
|
992
|
+
dcd 0x0000FF00
|
|
993
|
+
dcd 0x00F000F0
|
|
994
|
+
dcd 0x0C0C0C0C
|
|
995
|
+
dcd 0x22222222
|
|
996
|
+
ENDP
|
|
997
|
+
|
|
998
|
+
;----------------------------------------------------------------------------
|
|
999
|
+
;
|
|
1000
|
+
; __KeccakP1600_ExtractAndAddLanes
|
|
1001
|
+
;
|
|
1002
|
+
; Input:
|
|
1003
|
+
; r0 state pointer
|
|
1004
|
+
; r1 in pointer
|
|
1005
|
+
; r2 laneCount
|
|
1006
|
+
; r3 from bit interleaving constants pointer
|
|
1007
|
+
; r9 out pointer
|
|
1008
|
+
;
|
|
1009
|
+
; Output:
|
|
1010
|
+
; r0 state pointer next lane
|
|
1011
|
+
; r1 in pointer (next lane)
|
|
1012
|
+
; r9 out pointer (next lane)
|
|
1013
|
+
;
|
|
1014
|
+
; Changed: r2-r7
|
|
1015
|
+
;
|
|
1016
|
+
ALIGN
|
|
1017
|
+
__KeccakP1600_ExtractAndAddLanes PROC
|
|
1018
|
+
lsls r4, r1, #30
|
|
1019
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
|
|
1020
|
+
mov r4, r9
|
|
1021
|
+
lsls r4, r4, #30
|
|
1022
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
|
|
1023
|
+
__KeccakP1600_ExtractAndAddLanes_LoopAligned
|
|
1024
|
+
ldmia r0!, {r6,r7}
|
|
1025
|
+
fromBitInterleaving r6, r7, r5, r4, r3
|
|
1026
|
+
mov r4, r9
|
|
1027
|
+
ldm r1!, {r5}
|
|
1028
|
+
eors r6, r6, r5
|
|
1029
|
+
ldm r1!, {r5}
|
|
1030
|
+
eors r7, r7, r5
|
|
1031
|
+
stmia r4!, {r6,r7}
|
|
1032
|
+
mov r9, r4
|
|
1033
|
+
subs r2, r2, #1
|
|
1034
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopAligned
|
|
1035
|
+
bx lr
|
|
1036
|
+
__KeccakP1600_ExtractAndAddLanes_LoopUnaligned
|
|
1037
|
+
ldmia r0!, {r6,r7}
|
|
1038
|
+
fromBitInterleaving r6, r7, r5, r4, r3
|
|
1039
|
+
mov r4, r9
|
|
1040
|
+
ldrb r5, [r1, #0]
|
|
1041
|
+
eors r5, r5, r6
|
|
1042
|
+
strb r5, [r4, #0]
|
|
1043
|
+
lsrs r6, r6, #8
|
|
1044
|
+
ldrb r5, [r1, #1]
|
|
1045
|
+
eors r5, r5, r6
|
|
1046
|
+
strb r5, [r4, #1]
|
|
1047
|
+
lsrs r6, r6, #8
|
|
1048
|
+
ldrb r5, [r1, #2]
|
|
1049
|
+
eors r5, r5, r6
|
|
1050
|
+
strb r5, [r4, #2]
|
|
1051
|
+
lsrs r6, r6, #8
|
|
1052
|
+
ldrb r5, [r1, #3]
|
|
1053
|
+
eors r5, r5, r6
|
|
1054
|
+
strb r5, [r4, #3]
|
|
1055
|
+
ldrb r5, [r1, #4]
|
|
1056
|
+
eors r5, r5, r7
|
|
1057
|
+
strb r5, [r4, #4]
|
|
1058
|
+
lsrs r7, r7, #8
|
|
1059
|
+
ldrb r5, [r1, #5]
|
|
1060
|
+
eors r5, r5, r7
|
|
1061
|
+
strb r5, [r4, #5]
|
|
1062
|
+
lsrs r7, r7, #8
|
|
1063
|
+
ldrb r5, [r1, #6]
|
|
1064
|
+
eors r5, r5, r7
|
|
1065
|
+
strb r5, [r4, #6]
|
|
1066
|
+
lsrs r7, r7, #8
|
|
1067
|
+
ldrb r5, [r1, #7]
|
|
1068
|
+
eors r5, r5, r7
|
|
1069
|
+
strb r5, [r4, #7]
|
|
1070
|
+
adds r1, r1, #8
|
|
1071
|
+
adds r4, r4, #8
|
|
1072
|
+
mov r9, r4
|
|
1073
|
+
subs r2, r2, #1
|
|
1074
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
|
|
1075
|
+
bx lr
|
|
1076
|
+
ENDP
|
|
1077
|
+
|
|
1078
|
+
;----------------------------------------------------------------------------
|
|
1079
|
+
;
|
|
1080
|
+
; __KeccakP1600_ExtractAndAddBytesInLane
|
|
1081
|
+
;
|
|
1082
|
+
; Input:
|
|
1083
|
+
; r0 state pointer
|
|
1084
|
+
; r1 data pointer
|
|
1085
|
+
; r2 offset in lane
|
|
1086
|
+
; r3 length
|
|
1087
|
+
; r7 from bit interleaving constants pointer
|
|
1088
|
+
; r9 out pointer
|
|
1089
|
+
;
|
|
1090
|
+
; Output:
|
|
1091
|
+
; r0 state pointer next lane
|
|
1092
|
+
; r1 in pointer (next byte)
|
|
1093
|
+
; r9 out pointer (next byte)
|
|
1094
|
+
;
|
|
1095
|
+
; Changed: r2-r7
|
|
1096
|
+
;
|
|
1097
|
+
ALIGN
|
|
1098
|
+
__KeccakP1600_ExtractAndAddBytesInLane PROC
|
|
1099
|
+
ldmia r0!, {r4,r5}
|
|
1100
|
+
push {r0, r3}
|
|
1101
|
+
fromBitInterleaving r4, r5, r0, r3, r7
|
|
1102
|
+
pop {r0, r3}
|
|
1103
|
+
push {r4, r5}
|
|
1104
|
+
mov r4, sp
|
|
1105
|
+
adds r4, r4, r2
|
|
1106
|
+
mov r6, r9
|
|
1107
|
+
__KeccakP1600_ExtractAndAddBytesInLane_Loop
|
|
1108
|
+
ldrb r2, [r4]
|
|
1109
|
+
adds r4, r4, #1
|
|
1110
|
+
ldrb r5, [r1]
|
|
1111
|
+
eors r2, r2, r5
|
|
1112
|
+
strb r2, [r6]
|
|
1113
|
+
adds r1, r1, #1
|
|
1114
|
+
adds r6, r6, #1
|
|
1115
|
+
subs r3, r3, #1
|
|
1116
|
+
bne __KeccakP1600_ExtractAndAddBytesInLane_Loop
|
|
1117
|
+
add sp, #8
|
|
1118
|
+
mov r9, r6
|
|
1119
|
+
bx lr
|
|
1120
|
+
ENDP
|
|
1121
|
+
|
|
1122
|
+
; ----------------------------------------------------------------------------
|
|
1123
|
+
;
|
|
1124
|
+
; void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
1125
|
+
;
|
|
1126
|
+
ALIGN
|
|
1127
|
+
EXPORT KeccakP1600_Permute_Nrounds
|
|
1128
|
+
KeccakP1600_Permute_Nrounds PROC
|
|
1129
|
+
movs r2, r1
|
|
1130
|
+
lsls r3, r2, #3
|
|
1131
|
+
adr r1, KeccakP1600_Permute_RoundConstants0
|
|
1132
|
+
subs r1, r1, r3
|
|
1133
|
+
lsls r2, r2, #31
|
|
1134
|
+
bne KeccakP1600_Permute_NroundsOdd
|
|
1135
|
+
b KeccakP1600_Permute
|
|
1136
|
+
KeccakP1600_Permute_NroundsOdd
|
|
1137
|
+
push { r4 - r6, lr } ; odd number of rounds, copy primary to secondary state
|
|
1138
|
+
mov r2, r8
|
|
1139
|
+
mov r3, r9
|
|
1140
|
+
mov r4, r10
|
|
1141
|
+
mov r5, r11
|
|
1142
|
+
mov r6, r12
|
|
1143
|
+
push { r2 - r7 }
|
|
1144
|
+
sub sp, #mSize
|
|
1145
|
+
str r1, [sp, #mRC]
|
|
1146
|
+
add r7, sp, #mEs
|
|
1147
|
+
|
|
1148
|
+
ldm r0!, {r1-r5}
|
|
1149
|
+
stm r7!, {r1-r5}
|
|
1150
|
+
ldm r0!, {r1-r5}
|
|
1151
|
+
stm r7!, {r1-r5}
|
|
1152
|
+
|
|
1153
|
+
ldm r0!, {r1-r5}
|
|
1154
|
+
stm r7!, {r1-r5}
|
|
1155
|
+
ldm r0!, {r1-r5}
|
|
1156
|
+
stm r7!, {r1-r5}
|
|
1157
|
+
|
|
1158
|
+
ldm r0!, {r1-r5}
|
|
1159
|
+
stm r7!, {r1-r5}
|
|
1160
|
+
ldm r0!, {r1-r5}
|
|
1161
|
+
stm r7!, {r1-r5}
|
|
1162
|
+
|
|
1163
|
+
ldm r0!, {r1-r5}
|
|
1164
|
+
stm r7!, {r1-r5}
|
|
1165
|
+
ldm r0!, {r1-r5}
|
|
1166
|
+
stm r7!, {r1-r5}
|
|
1167
|
+
|
|
1168
|
+
ldm r0!, {r1-r5}
|
|
1169
|
+
stm r7!, {r1-r5}
|
|
1170
|
+
ldm r0!, {r1-r5}
|
|
1171
|
+
stm r7!, {r1-r5}
|
|
1172
|
+
mov r7, r0
|
|
1173
|
+
subs r7, r7, #25*2*4
|
|
1174
|
+
add r0, sp, #mEs
|
|
1175
|
+
b KeccakP1600_Permute_RoundLoop1
|
|
1176
|
+
ENDP
|
|
1177
|
+
|
|
1178
|
+
; ----------------------------------------------------------------------------
|
|
1179
|
+
;
|
|
1180
|
+
; void KeccakP1600_Permute_12rounds( void *state )
|
|
1181
|
+
;
|
|
1182
|
+
ALIGN
|
|
1183
|
+
EXPORT KeccakP1600_Permute_12rounds
|
|
1184
|
+
KeccakP1600_Permute_12rounds PROC
|
|
1185
|
+
adr r1, KeccakP1600_Permute_RoundConstants12
|
|
1186
|
+
b KeccakP1600_Permute
|
|
1187
|
+
ENDP
|
|
1188
|
+
|
|
1189
|
+
; ----------------------------------------------------------------------------
|
|
1190
|
+
;
|
|
1191
|
+
; void KeccakP1600_Permute_24rounds( void *state )
|
|
1192
|
+
;
|
|
1193
|
+
ALIGN
|
|
1194
|
+
EXPORT KeccakP1600_Permute_24rounds
|
|
1195
|
+
KeccakP1600_Permute_24rounds PROC
|
|
1196
|
+
adr r1, KeccakP1600_Permute_RoundConstants24
|
|
1197
|
+
b KeccakP1600_Permute
|
|
1198
|
+
ENDP
|
|
1199
|
+
|
|
1200
|
+
ALIGN
|
|
1201
|
+
KeccakP1600_Permute_RoundConstants24
|
|
1202
|
+
; 0 1
|
|
1203
|
+
dcd 0x00000001, 0x00000000
|
|
1204
|
+
dcd 0x00000000, 0x00000089
|
|
1205
|
+
dcd 0x00000000, 0x8000008b
|
|
1206
|
+
dcd 0x00000000, 0x80008080
|
|
1207
|
+
|
|
1208
|
+
dcd 0x00000001, 0x0000008b
|
|
1209
|
+
dcd 0x00000001, 0x00008000
|
|
1210
|
+
dcd 0x00000001, 0x80008088
|
|
1211
|
+
dcd 0x00000001, 0x80000082
|
|
1212
|
+
|
|
1213
|
+
dcd 0x00000000, 0x0000000b
|
|
1214
|
+
dcd 0x00000000, 0x0000000a
|
|
1215
|
+
dcd 0x00000001, 0x00008082
|
|
1216
|
+
dcd 0x00000000, 0x00008003
|
|
1217
|
+
|
|
1218
|
+
KeccakP1600_Permute_RoundConstants12
|
|
1219
|
+
dcd 0x00000001, 0x0000808b
|
|
1220
|
+
dcd 0x00000001, 0x8000000b
|
|
1221
|
+
dcd 0x00000001, 0x8000008a
|
|
1222
|
+
dcd 0x00000001, 0x80000081
|
|
1223
|
+
|
|
1224
|
+
dcd 0x00000000, 0x80000081
|
|
1225
|
+
dcd 0x00000000, 0x80000008
|
|
1226
|
+
dcd 0x00000000, 0x00000083
|
|
1227
|
+
dcd 0x00000000, 0x80008003
|
|
1228
|
+
|
|
1229
|
+
dcd 0x00000001, 0x80008088
|
|
1230
|
+
dcd 0x00000000, 0x80000088
|
|
1231
|
+
dcd 0x00000001, 0x00008000
|
|
1232
|
+
dcd 0x00000000, 0x80008082
|
|
1233
|
+
|
|
1234
|
+
KeccakP1600_Permute_RoundConstants0
|
|
1235
|
+
dcd 0x000000FF ;terminator
|
|
1236
|
+
|
|
1237
|
+
;----------------------------------------------------------------------------
|
|
1238
|
+
;
|
|
1239
|
+
; void KeccakP1600_Permute( void *state, void * rc )
|
|
1240
|
+
;
|
|
1241
|
+
ALIGN
|
|
1242
|
+
KeccakP1600_Permute PROC
|
|
1243
|
+
push { r4 - r6, lr }
|
|
1244
|
+
mov r2, r8
|
|
1245
|
+
mov r3, r9
|
|
1246
|
+
mov r4, r10
|
|
1247
|
+
mov r5, r11
|
|
1248
|
+
mov r6, r12
|
|
1249
|
+
push { r2 - r7 }
|
|
1250
|
+
sub sp, #mSize
|
|
1251
|
+
add r7, sp, #mEs
|
|
1252
|
+
KeccakP1600_Permute_RoundLoop
|
|
1253
|
+
str r1, [sp, #mRC]
|
|
1254
|
+
KeccakP1600_Permute_RoundLoop1
|
|
1255
|
+
|
|
1256
|
+
; prepare Theta
|
|
1257
|
+
movs r4, #31
|
|
1258
|
+
movs r5, #_ma0
|
|
1259
|
+
adds r5, r5, r0
|
|
1260
|
+
|
|
1261
|
+
xor5 r1, _be1, _ge1, _ke1, _me1, _se1
|
|
1262
|
+
xor5 r2, _bu0, _gu0, _ku0, _mu0, _su0
|
|
1263
|
+
mov r6, r1
|
|
1264
|
+
te0r r8, r2, r6
|
|
1265
|
+
|
|
1266
|
+
xor5 r3, _bi1, _gi1, _ki1, _mi1, _si1
|
|
1267
|
+
te1m mDo1, r3, r2
|
|
1268
|
+
|
|
1269
|
+
xor5 r2, _ba0, _ga0, _ka0, _ma0, _sa0
|
|
1270
|
+
te0r r10, r2, r3
|
|
1271
|
+
|
|
1272
|
+
xor5 r3, _bo1, _go1, _ko1, _mo1, _so1
|
|
1273
|
+
te1m mDu1, r3, r2
|
|
1274
|
+
|
|
1275
|
+
xor5 r2, _be0, _ge0, _ke0, _me0, _se0
|
|
1276
|
+
te0r r12, r2, r3
|
|
1277
|
+
|
|
1278
|
+
xor5 r3, _bu1, _gu1, _ku1, _mu1, _su1
|
|
1279
|
+
te1r r9, r3, r2
|
|
1280
|
+
|
|
1281
|
+
xor5 r2, _bi0, _gi0, _ki0, _mi0, _si0
|
|
1282
|
+
te0m mDo0, r2, r3
|
|
1283
|
+
|
|
1284
|
+
xor5 r3, _ba1, _ga1, _ka1, _ma1, _sa1
|
|
1285
|
+
te1r r11, r3, r2
|
|
1286
|
+
|
|
1287
|
+
xor5 r2, _bo0, _go0, _ko0, _mo0, _so0
|
|
1288
|
+
te0m mDu0, r2, r3
|
|
1289
|
+
te1r lr, r1, r2
|
|
1290
|
+
|
|
1291
|
+
adds r7, r7, #_ma0
|
|
1292
|
+
trp5e _bi0, r12, 1, 31, _go1, mDo1, 0, 28, _ku1, mDu1, 0, 20, _ma1, r9, 1, 21, _se0, r10, 1, 1
|
|
1293
|
+
chio5 _sa0-_ma0, 0xFF
|
|
1294
|
+
trp5o _bi1, lr, 1, 31, _go0, mDo0, 0, 27, _ku0, mDu0, 0, 19, _ma0, r8, 1, 20, _se1, r11, 1, 1
|
|
1295
|
+
chio5 _sa1-_ma0, 0xFF
|
|
1296
|
+
|
|
1297
|
+
trp5e _bu1, mDu1, 0, 14, _ga0, r8, 1, 18, _ke0, r10, 1, 5, _mi1, lr, 1, 8, _so0, mDo0, 0, 28
|
|
1298
|
+
chio5 _ma0-_ma0, 0xFF
|
|
1299
|
+
trp5o _bu0, mDu0, 0, 13, _ga1, r9, 1, 18, _ke1, r11, 1, 5, _mi0, r12, 1, 7, _so1, mDo1, 0, 28
|
|
1300
|
+
chio5 _ma1-_ma0, 0xFF
|
|
1301
|
+
subs r7, r7, #_ma0
|
|
1302
|
+
|
|
1303
|
+
trp5e _be1, r11, 1, 1, _gi0, r12, 1, 3, _ko1, mDo1, 0, 13, _mu0, mDu0, 0, 4, _sa0, r8, 1, 9
|
|
1304
|
+
chio5 _ka0, 0xFF
|
|
1305
|
+
trp5o _be0, r10, 1, 0, _gi1, lr, 1, 3, _ko0, mDo0, 0, 12, _mu1, mDu1, 0, 4, _sa1, r9, 1, 9
|
|
1306
|
+
chio5 _ka1, 0xFF
|
|
1307
|
+
|
|
1308
|
+
trp5e _bo0, mDo0, 0, 14, _gu0, mDu0, 0, 10, _ka1, r9, 1, 2, _me1, r11, 1, 23, _si1, lr, 1, 31
|
|
1309
|
+
chio5 _ga0, 0xFF
|
|
1310
|
+
trp5o _bo1, mDo1, 0, 14, _gu1, mDu1, 0, 10, _ka0, r8, 1, 1, _me0, r10, 1, 22, _si0, r12, 1, 30
|
|
1311
|
+
chio5 _ga1, 0xFF
|
|
1312
|
+
|
|
1313
|
+
trp5e _ba0, r8, 1, 0, _ge0, r10, 1, 22, _ki1, lr, 1, 22, _mo1, mDo1, 0, 11, _su0, mDu0, 0, 7
|
|
1314
|
+
chio5 _ba0, 0
|
|
1315
|
+
trp5o _ba1, r9, 1, 0, _ge1, r11, 1, 22, _ki0, r12, 1, 21, _mo0, mDo0, 0, 10, _su1, mDu1, 0, 7
|
|
1316
|
+
chio5 _ba1, 4
|
|
1317
|
+
|
|
1318
|
+
adds r1, r1, #8 ; Update pointer RC
|
|
1319
|
+
ldr r6, [r1] ; Check terminator
|
|
1320
|
+
cmp r6, #0xFF
|
|
1321
|
+
beq KeccakP1600_Permute_Done
|
|
1322
|
+
mov r6, r0 ; Swap in/out state
|
|
1323
|
+
mov r0, r7
|
|
1324
|
+
mov r7, r6
|
|
1325
|
+
b KeccakP1600_Permute_RoundLoop
|
|
1326
|
+
KeccakP1600_Permute_Done
|
|
1327
|
+
mov r0, r7 ; restore initial state pointer (FastLoop functions may use it)
|
|
1328
|
+
add sp, #mSize
|
|
1329
|
+
pop { r1 - r5, r7 }
|
|
1330
|
+
mov r8, r1
|
|
1331
|
+
mov r9, r2
|
|
1332
|
+
mov r10, r3
|
|
1333
|
+
mov r11, r4
|
|
1334
|
+
mov r12, r5
|
|
1335
|
+
pop { r4 - r6, pc }
|
|
1336
|
+
ENDP
|
|
1337
|
+
|
|
1338
|
+
END
|