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,1268 @@
|
|
|
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 ARMv7A architecture (e.g., Cortex-A8) and the ARMCC compiler.
|
|
26
|
+
|
|
27
|
+
; INFO: Tested on a Cortex-A8 (BeagleBone Black)
|
|
28
|
+
|
|
29
|
+
PRESERVE8
|
|
30
|
+
AREA |.text|, CODE, READONLY
|
|
31
|
+
|
|
32
|
+
; Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
|
|
33
|
+
MACRO
|
|
34
|
+
toBitInterleaving $x0,$x1,$s0,$s1,$t,$m55,$m33,$m0F,$mFF, $over
|
|
35
|
+
|
|
36
|
+
and $t,$x0,$m55
|
|
37
|
+
orr $t,$t,$t, LSR #1
|
|
38
|
+
and $t,$t,$m33
|
|
39
|
+
orr $t,$t,$t, LSR #2
|
|
40
|
+
and $t,$t,$m0F
|
|
41
|
+
orr $t,$t,$t, LSR #4
|
|
42
|
+
and $t,$t,$mFF
|
|
43
|
+
bfi $t,$t,#8, #8
|
|
44
|
+
if $over != 0
|
|
45
|
+
lsr $s0,$t, #8
|
|
46
|
+
else
|
|
47
|
+
eor $s0,$s0,$t, LSR #8
|
|
48
|
+
endif
|
|
49
|
+
|
|
50
|
+
and $t,$x1,$m55
|
|
51
|
+
orr $t,$t,$t, LSR #1
|
|
52
|
+
and $t,$t,$m33
|
|
53
|
+
orr $t,$t,$t, LSR #2
|
|
54
|
+
and $t,$t,$m0F
|
|
55
|
+
orr $t,$t,$t, LSR #4
|
|
56
|
+
and $t,$t,$mFF
|
|
57
|
+
orr $t,$t,$t, LSR #8
|
|
58
|
+
eor $s0,$s0,$t, LSL #16
|
|
59
|
+
|
|
60
|
+
and $t,$x0,$m55, LSL #1
|
|
61
|
+
orr $t,$t,$t, LSL #1
|
|
62
|
+
and $t,$t,$m33, LSL #2
|
|
63
|
+
orr $t,$t,$t, LSL #2
|
|
64
|
+
and $t,$t,$m0F, LSL #4
|
|
65
|
+
orr $t,$t,$t, LSL #4
|
|
66
|
+
and $t,$t,$mFF, LSL #8
|
|
67
|
+
orr $t,$t,$t, LSL #8
|
|
68
|
+
if $over != 0
|
|
69
|
+
lsr $s1,$t, #16
|
|
70
|
+
else
|
|
71
|
+
eor $s1,$s1,$t, LSR #16
|
|
72
|
+
endif
|
|
73
|
+
|
|
74
|
+
and $t,$x1,$m55, LSL #1
|
|
75
|
+
orr $t,$t,$t, LSL #1
|
|
76
|
+
and $t,$t,$m33, LSL #2
|
|
77
|
+
orr $t,$t,$t, LSL #2
|
|
78
|
+
and $t,$t,$m0F, LSL #4
|
|
79
|
+
orr $t,$t,$t, LSL #4
|
|
80
|
+
and $t,$t,$mFF, LSL #8
|
|
81
|
+
orr $t,$t,$t, LSL #8
|
|
82
|
+
bfc $t, #0, #16
|
|
83
|
+
eors $s1,$s1,$t
|
|
84
|
+
MEND
|
|
85
|
+
|
|
86
|
+
; Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
|
|
87
|
+
MACRO
|
|
88
|
+
fromBitInterleaving $x0, $x1, $t, $mFF, $mF0, $m0C, $m22
|
|
89
|
+
|
|
90
|
+
movs $t, $x0 ; t = x0;
|
|
91
|
+
bfi $x0, $x1, #16, #16 ; x0 = (x0 & 0x0000FFFF) | (x1 << 16);
|
|
92
|
+
bfc $x1, #0, #16 ; x1 = (t >> 16) | (x1 & 0xFFFF0000);
|
|
93
|
+
orr $x1, $x1, $t, LSR #16
|
|
94
|
+
|
|
95
|
+
eor $t, $x0, $x0, LSR #8 ; t = (x0 ^ (x0 >> 8)) & 0x0000FF00UL; x0 = x0 ^ t ^ (t << 8);
|
|
96
|
+
and $t, $mFF
|
|
97
|
+
eors $x0, $x0, $t
|
|
98
|
+
eor $x0, $x0, $t, LSL #8
|
|
99
|
+
|
|
100
|
+
eor $t, $x0, $x0, LSR #4 ; t = (x0 ^ (x0 >> 4)) & 0x00F000F0UL; x0 = x0 ^ t ^ (t << 4);
|
|
101
|
+
and $t, $mF0
|
|
102
|
+
eors $x0, $x0, $t
|
|
103
|
+
eor $x0, $x0, $t, LSL #4
|
|
104
|
+
|
|
105
|
+
eor $t, $x0, $x0, LSR #2 ; t = (x0 ^ (x0 >> 2)) & 0x0C0C0C0CUL; x0 = x0 ^ t ^ (t << 2);
|
|
106
|
+
and $t, $m0C
|
|
107
|
+
eors $x0, $x0, $t
|
|
108
|
+
eor $x0, $x0, $t, LSL #2
|
|
109
|
+
|
|
110
|
+
eor $t, $x0, $x0, LSR #1 ; t = (x0 ^ (x0 >> 1)) & 0x22222222UL; x0 = x0 ^ t ^ (t << 1);
|
|
111
|
+
and $t, $m22
|
|
112
|
+
eors $x0, $x0, $t
|
|
113
|
+
eor $x0, $x0, $t, LSL #1
|
|
114
|
+
|
|
115
|
+
eor $t, $x1, $x1, LSR #8 ; t = (x1 ^ (x1 >> 8)) & 0x0000FF00UL; x1 = x1 ^ t ^ (t << 8);
|
|
116
|
+
and $t, $mFF
|
|
117
|
+
eors $x1, $x1, $t
|
|
118
|
+
eor $x1, $x1, $t, LSL #8
|
|
119
|
+
|
|
120
|
+
eor $t, $x1, $x1, LSR #4 ; t = (x1 ^ (x1 >> 4)) & 0x00F000F0UL; x1 = x1 ^ t ^ (t << 4);
|
|
121
|
+
and $t, $mF0
|
|
122
|
+
eors $x1, $x1, $t
|
|
123
|
+
eor $x1, $x1, $t, LSL #4
|
|
124
|
+
|
|
125
|
+
eor $t, $x1, $x1, LSR #2 ; t = (x1 ^ (x1 >> 2)) & 0x0C0C0C0CUL; x1 = x1 ^ t ^ (t << 2);
|
|
126
|
+
and $t, $m0C
|
|
127
|
+
eors $x1, $x1, $t
|
|
128
|
+
eor $x1, $x1, $t, LSL #2
|
|
129
|
+
|
|
130
|
+
eor $t, $x1, $x1, LSR #1 ; t = (x1 ^ (x1 >> 1)) & 0x22222222UL; x1 = x1 ^ t ^ (t << 1);
|
|
131
|
+
and $t, $m22
|
|
132
|
+
eors $x1, $x1, $t
|
|
133
|
+
eor $x1, $x1, $t, LSL #1
|
|
134
|
+
MEND
|
|
135
|
+
|
|
136
|
+
; --- offsets in state
|
|
137
|
+
Aba0 equ 0*4
|
|
138
|
+
Aba1 equ 1*4
|
|
139
|
+
Abe0 equ 2*4
|
|
140
|
+
Abe1 equ 3*4
|
|
141
|
+
Abi0 equ 4*4
|
|
142
|
+
Abi1 equ 5*4
|
|
143
|
+
Abo0 equ 6*4
|
|
144
|
+
Abo1 equ 7*4
|
|
145
|
+
Abu0 equ 8*4
|
|
146
|
+
Abu1 equ 9*4
|
|
147
|
+
Aga0 equ 10*4
|
|
148
|
+
Aga1 equ 11*4
|
|
149
|
+
Age0 equ 12*4
|
|
150
|
+
Age1 equ 13*4
|
|
151
|
+
Agi0 equ 14*4
|
|
152
|
+
Agi1 equ 15*4
|
|
153
|
+
Ago0 equ 16*4
|
|
154
|
+
Ago1 equ 17*4
|
|
155
|
+
Agu0 equ 18*4
|
|
156
|
+
Agu1 equ 19*4
|
|
157
|
+
Aka0 equ 20*4
|
|
158
|
+
Aka1 equ 21*4
|
|
159
|
+
Ake0 equ 22*4
|
|
160
|
+
Ake1 equ 23*4
|
|
161
|
+
Aki0 equ 24*4
|
|
162
|
+
Aki1 equ 25*4
|
|
163
|
+
Ako0 equ 26*4
|
|
164
|
+
Ako1 equ 27*4
|
|
165
|
+
Aku0 equ 28*4
|
|
166
|
+
Aku1 equ 29*4
|
|
167
|
+
Ama0 equ 30*4
|
|
168
|
+
Ama1 equ 31*4
|
|
169
|
+
Ame0 equ 32*4
|
|
170
|
+
Ame1 equ 33*4
|
|
171
|
+
Ami0 equ 34*4
|
|
172
|
+
Ami1 equ 35*4
|
|
173
|
+
Amo0 equ 36*4
|
|
174
|
+
Amo1 equ 37*4
|
|
175
|
+
Amu0 equ 38*4
|
|
176
|
+
Amu1 equ 39*4
|
|
177
|
+
Asa0 equ 40*4
|
|
178
|
+
Asa1 equ 41*4
|
|
179
|
+
Ase0 equ 42*4
|
|
180
|
+
Ase1 equ 43*4
|
|
181
|
+
Asi0 equ 44*4
|
|
182
|
+
Asi1 equ 45*4
|
|
183
|
+
Aso0 equ 46*4
|
|
184
|
+
Aso1 equ 47*4
|
|
185
|
+
Asu0 equ 48*4
|
|
186
|
+
Asu1 equ 49*4
|
|
187
|
+
|
|
188
|
+
; --- offsets on stack
|
|
189
|
+
mDa0 equ 0*4
|
|
190
|
+
mDa1 equ 1*4
|
|
191
|
+
mDo0 equ 2*4
|
|
192
|
+
mDo1 equ 3*4
|
|
193
|
+
mDi0 equ 4*4
|
|
194
|
+
mRC equ 5*4
|
|
195
|
+
mSize equ 6*4
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
MACRO
|
|
199
|
+
xor5 $result,$b,$g,$k,$m,$s
|
|
200
|
+
|
|
201
|
+
ldr $result, [r0, #$b]
|
|
202
|
+
ldr r1, [r0, #$g]
|
|
203
|
+
eors $result, $result, r1
|
|
204
|
+
ldr r1, [r0, #$k]
|
|
205
|
+
eors $result, $result, r1
|
|
206
|
+
ldr r1, [r0, #$m]
|
|
207
|
+
eors $result, $result, r1
|
|
208
|
+
ldr r1, [r0, #$s]
|
|
209
|
+
eors $result, $result, r1
|
|
210
|
+
MEND
|
|
211
|
+
|
|
212
|
+
MACRO
|
|
213
|
+
xorrol $result, $aa, $bb
|
|
214
|
+
|
|
215
|
+
eor $result, $aa, $bb, ROR #31
|
|
216
|
+
MEND
|
|
217
|
+
|
|
218
|
+
MACRO
|
|
219
|
+
xandnot $resofs, $aa, $bb, $cc
|
|
220
|
+
|
|
221
|
+
bic r1, $cc, $bb
|
|
222
|
+
eors r1, r1, $aa
|
|
223
|
+
str r1, [r0, #$resofs]
|
|
224
|
+
MEND
|
|
225
|
+
|
|
226
|
+
MACRO
|
|
227
|
+
KeccakThetaRhoPiChiIota $aA1, $aDax, $aA2, $aDex, $rot2, $aA3, $aDix, $rot3, $aA4, $aDox, $rot4, $aA5, $aDux, $rot5, $offset, $last
|
|
228
|
+
ldr r3, [r0, #$aA1]
|
|
229
|
+
ldr r4, [r0, #$aA2]
|
|
230
|
+
ldr r5, [r0, #$aA3]
|
|
231
|
+
ldr r6, [r0, #$aA4]
|
|
232
|
+
ldr r7, [r0, #$aA5]
|
|
233
|
+
eors r3, r3, $aDax
|
|
234
|
+
eors r5, r5, $aDix
|
|
235
|
+
eors r4, r4, $aDex
|
|
236
|
+
eors r6, r6, $aDox
|
|
237
|
+
eors r7, r7, $aDux
|
|
238
|
+
rors r4, #32-$rot2
|
|
239
|
+
rors r5, #32-$rot3
|
|
240
|
+
rors r6, #32-$rot4
|
|
241
|
+
rors r7, #32-$rot5
|
|
242
|
+
xandnot $aA2, r4, r5, r6
|
|
243
|
+
xandnot $aA3, r5, r6, r7
|
|
244
|
+
xandnot $aA4, r6, r7, r3
|
|
245
|
+
xandnot $aA5, r7, r3, r4
|
|
246
|
+
ldr r1, [sp, #mRC]
|
|
247
|
+
bics r5, r5, r4
|
|
248
|
+
ldr r4, [r1, #$offset]
|
|
249
|
+
eors r3, r3, r5
|
|
250
|
+
eors r3, r3, r4
|
|
251
|
+
IF $last == 1
|
|
252
|
+
ldr r4, [r1, #32]!
|
|
253
|
+
str r1, [sp, #mRC]
|
|
254
|
+
cmp r4, #0xFF
|
|
255
|
+
ENDIF
|
|
256
|
+
str r3, [r0, #$aA1]
|
|
257
|
+
MEND
|
|
258
|
+
|
|
259
|
+
MACRO
|
|
260
|
+
KeccakThetaRhoPiChi $aB1, $aA1, $aDax, $rot1, $aB2, $aA2, $aDex, $rot2, $aB3, $aA3, $aDix, $rot3, $aB4, $aA4, $aDox, $rot4, $aB5, $aA5, $aDux, $rot5
|
|
261
|
+
ldr $aB1, [r0, #$aA1]
|
|
262
|
+
ldr $aB2, [r0, #$aA2]
|
|
263
|
+
ldr $aB3, [r0, #$aA3]
|
|
264
|
+
ldr $aB4, [r0, #$aA4]
|
|
265
|
+
ldr $aB5, [r0, #$aA5]
|
|
266
|
+
eors $aB1, $aB1, $aDax
|
|
267
|
+
eors $aB3, $aB3, $aDix
|
|
268
|
+
eors $aB2, $aB2, $aDex
|
|
269
|
+
eors $aB4, $aB4, $aDox
|
|
270
|
+
eors $aB5, $aB5, $aDux
|
|
271
|
+
rors $aB1, #32-$rot1
|
|
272
|
+
IF $rot2 > 0
|
|
273
|
+
rors $aB2, #32-$rot2
|
|
274
|
+
ENDIF
|
|
275
|
+
rors $aB3, #32-$rot3
|
|
276
|
+
rors $aB4, #32-$rot4
|
|
277
|
+
rors $aB5, #32-$rot5
|
|
278
|
+
xandnot $aA1, r3, r4, r5
|
|
279
|
+
xandnot $aA2, r4, r5, r6
|
|
280
|
+
xandnot $aA3, r5, r6, r7
|
|
281
|
+
xandnot $aA4, r6, r7, r3
|
|
282
|
+
xandnot $aA5, r7, r3, r4
|
|
283
|
+
MEND
|
|
284
|
+
|
|
285
|
+
MACRO
|
|
286
|
+
KeccakRound0
|
|
287
|
+
|
|
288
|
+
xor5 r3, Abu0, Agu0, Aku0, Amu0, Asu0
|
|
289
|
+
xor5 r7, Abe1, Age1, Ake1, Ame1, Ase1
|
|
290
|
+
xorrol r6, r3, r7
|
|
291
|
+
str r6, [sp, #mDa0]
|
|
292
|
+
xor5 r6, Abu1, Agu1, Aku1, Amu1, Asu1
|
|
293
|
+
xor5 lr, Abe0, Age0, Ake0, Ame0, Ase0
|
|
294
|
+
eors r8, r6, lr
|
|
295
|
+
str r8, [sp, #mDa1]
|
|
296
|
+
|
|
297
|
+
xor5 r5, Abi0, Agi0, Aki0, Ami0, Asi0
|
|
298
|
+
xorrol r9, r5, r6
|
|
299
|
+
str r9, [sp, #mDo0]
|
|
300
|
+
xor5 r4, Abi1, Agi1, Aki1, Ami1, Asi1
|
|
301
|
+
eors r3, r3, r4
|
|
302
|
+
str r3, [sp, #mDo1]
|
|
303
|
+
|
|
304
|
+
xor5 r3, Aba0, Aga0, Aka0, Ama0, Asa0
|
|
305
|
+
xorrol r10, r3, r4
|
|
306
|
+
xor5 r6, Aba1, Aga1, Aka1, Ama1, Asa1
|
|
307
|
+
eors r11, r6, r5
|
|
308
|
+
|
|
309
|
+
xor5 r4, Abo1, Ago1, Ako1, Amo1, Aso1
|
|
310
|
+
xorrol r5, lr, r4
|
|
311
|
+
str r5, [sp, #mDi0]
|
|
312
|
+
xor5 r5, Abo0, Ago0, Ako0, Amo0, Aso0
|
|
313
|
+
eors r2, r7, r5
|
|
314
|
+
|
|
315
|
+
xorrol r12, r5, r6
|
|
316
|
+
eors lr, r4, r3
|
|
317
|
+
|
|
318
|
+
KeccakThetaRhoPiChi r5, Aka1, r8, 2, r6, Ame1, r11, 23, r7, Asi1, r2, 31, r3, Abo0, r9, 14, r4, Agu0, r12, 10
|
|
319
|
+
KeccakThetaRhoPiChi r7, Asa1, r8, 9, r3, Abe0, r10, 0, r4, Agi1, r2, 3, r5, Ako0, r9, 12, r6, Amu1, lr, 4
|
|
320
|
+
ldr r8, [sp, #mDa0]
|
|
321
|
+
KeccakThetaRhoPiChi r4, Aga0, r8, 18, r5, Ake0, r10, 5, r6, Ami1, r2, 8, r7, Aso0, r9, 28, r3, Abu1, lr, 14
|
|
322
|
+
KeccakThetaRhoPiChi r6, Ama0, r8, 20, r7, Ase1, r11, 1, r3, Abi1, r2, 31, r4, Ago0, r9, 27, r5, Aku0, r12, 19
|
|
323
|
+
ldr r9, [sp, #mDo1]
|
|
324
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Age0, r10, 22, Aki1, r2, 22, Amo1, r9, 11, Asu0, r12, 7, 0, 0
|
|
325
|
+
|
|
326
|
+
ldr r2, [sp, #mDi0]
|
|
327
|
+
KeccakThetaRhoPiChi r5, Aka0, r8, 1, r6, Ame0, r10, 22, r7, Asi0, r2, 30, r3, Abo1, r9, 14, r4, Agu1, lr, 10
|
|
328
|
+
KeccakThetaRhoPiChi r7, Asa0, r8, 9, r3, Abe1, r11, 1, r4, Agi0, r2, 3, r5, Ako1, r9, 13, r6, Amu0, r12, 4
|
|
329
|
+
ldr r8, [sp, #mDa1]
|
|
330
|
+
KeccakThetaRhoPiChi r4, Aga1, r8, 18, r5, Ake1, r11, 5, r6, Ami0, r2, 7, r7, Aso1, r9, 28, r3, Abu0, r12, 13
|
|
331
|
+
KeccakThetaRhoPiChi r6, Ama1, r8, 21, r7, Ase0, r10, 1, r3, Abi0, r2, 31, r4, Ago1, r9, 28, r5, Aku1, lr, 20
|
|
332
|
+
ldr r9, [sp, #mDo0]
|
|
333
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Age1, r11, 22, Aki0, r2, 21, Amo0, r9, 10, Asu1, lr, 7, 4, 0
|
|
334
|
+
MEND
|
|
335
|
+
|
|
336
|
+
MACRO
|
|
337
|
+
KeccakRound1
|
|
338
|
+
|
|
339
|
+
xor5 r3, Asu0, Agu0, Amu0, Abu1, Aku1
|
|
340
|
+
xor5 r7, Age1, Ame0, Abe0, Ake1, Ase1
|
|
341
|
+
xorrol r6, r3, r7
|
|
342
|
+
str r6, [sp, #mDa0]
|
|
343
|
+
xor5 r6, Asu1, Agu1, Amu1, Abu0, Aku0
|
|
344
|
+
xor5 lr, Age0, Ame1, Abe1, Ake0, Ase0
|
|
345
|
+
eors r8, r6, lr
|
|
346
|
+
str r8, [sp, #mDa1]
|
|
347
|
+
|
|
348
|
+
xor5 r5, Aki1, Asi1, Agi0, Ami1, Abi0
|
|
349
|
+
xorrol r9, r5, r6
|
|
350
|
+
str r9, [sp, #mDo0]
|
|
351
|
+
xor5 r4, Aki0, Asi0, Agi1, Ami0, Abi1
|
|
352
|
+
eors r3, r3, r4
|
|
353
|
+
str r3, [sp, #mDo1]
|
|
354
|
+
|
|
355
|
+
xor5 r3, Aba0, Aka1, Asa0, Aga0, Ama1
|
|
356
|
+
xorrol r10, r3, r4
|
|
357
|
+
xor5 r6, Aba1, Aka0, Asa1, Aga1, Ama0
|
|
358
|
+
eors r11, r6, r5
|
|
359
|
+
|
|
360
|
+
xor5 r4, Amo0, Abo1, Ako0, Aso1, Ago0
|
|
361
|
+
xorrol r5, lr, r4
|
|
362
|
+
str r5, [sp, #mDi0]
|
|
363
|
+
xor5 r5, Amo1, Abo0, Ako1, Aso0, Ago1
|
|
364
|
+
eors r2, r7, r5
|
|
365
|
+
|
|
366
|
+
xorrol r12, r5, r6
|
|
367
|
+
eors lr, r4, r3
|
|
368
|
+
|
|
369
|
+
KeccakThetaRhoPiChi r5, Asa1, r8, 2, r6, Ake1, r11, 23, r7, Abi1, r2, 31, r3, Amo1, r9, 14, r4, Agu0, r12, 10
|
|
370
|
+
KeccakThetaRhoPiChi r7, Ama0, r8, 9, r3, Age0, r10, 0, r4, Asi0, r2, 3, r5, Ako1, r9, 12, r6, Abu0, lr, 4
|
|
371
|
+
ldr r8, [sp, #mDa0]
|
|
372
|
+
KeccakThetaRhoPiChi r4, Aka1, r8, 18, r5, Abe1, r10, 5, r6, Ami0, r2, 8, r7, Ago1, r9, 28, r3, Asu1, lr, 14
|
|
373
|
+
KeccakThetaRhoPiChi r6, Aga0, r8, 20, r7, Ase1, r11, 1, r3, Aki0, r2, 31, r4, Abo0, r9, 27, r5, Amu0, r12, 19
|
|
374
|
+
ldr r9, [sp, #mDo1]
|
|
375
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Ame1, r10, 22, Agi1, r2, 22, Aso1, r9, 11, Aku1, r12, 7, 8, 0
|
|
376
|
+
|
|
377
|
+
ldr r2, [sp, #mDi0]
|
|
378
|
+
KeccakThetaRhoPiChi r5, Asa0, r8, 1, r6, Ake0, r10, 22, r7, Abi0, r2, 30, r3, Amo0, r9, 14, r4, Agu1, lr, 10
|
|
379
|
+
KeccakThetaRhoPiChi r7, Ama1, r8, 9, r3, Age1, r11, 1, r4, Asi1, r2, 3, r5, Ako0, r9, 13, r6, Abu1, r12, 4
|
|
380
|
+
ldr r8, [sp, #mDa1]
|
|
381
|
+
KeccakThetaRhoPiChi r4, Aka0, r8, 18, r5, Abe0, r11, 5, r6, Ami1, r2, 7, r7, Ago0, r9, 28, r3, Asu0, r12, 13
|
|
382
|
+
KeccakThetaRhoPiChi r6, Aga1, r8, 21, r7, Ase0, r10, 1, r3, Aki1, r2, 31, r4, Abo1, r9, 28, r5, Amu1, lr, 20
|
|
383
|
+
ldr r9, [sp, #mDo0]
|
|
384
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Ame0, r11, 22, Agi0, r2, 21, Aso0, r9, 10, Aku0, lr, 7, 12, 0
|
|
385
|
+
MEND
|
|
386
|
+
|
|
387
|
+
MACRO
|
|
388
|
+
KeccakRound2
|
|
389
|
+
|
|
390
|
+
xor5 r3, Aku1, Agu0, Abu1, Asu1, Amu1
|
|
391
|
+
xor5 r7, Ame0, Ake0, Age0, Abe0, Ase1
|
|
392
|
+
xorrol r6, r3, r7
|
|
393
|
+
str r6, [sp, #mDa0]
|
|
394
|
+
xor5 r6, Aku0, Agu1, Abu0, Asu0, Amu0
|
|
395
|
+
xor5 lr, Ame1, Ake1, Age1, Abe1, Ase0
|
|
396
|
+
eors r8, r6, lr
|
|
397
|
+
str r8, [sp, #mDa1]
|
|
398
|
+
|
|
399
|
+
xor5 r5, Agi1, Abi1, Asi1, Ami0, Aki1
|
|
400
|
+
xorrol r9, r5, r6
|
|
401
|
+
str r9, [sp, #mDo0]
|
|
402
|
+
xor5 r4, Agi0, Abi0, Asi0, Ami1, Aki0
|
|
403
|
+
eors r3, r3, r4
|
|
404
|
+
str r3, [sp, #mDo1]
|
|
405
|
+
|
|
406
|
+
xor5 r3, Aba0, Asa1, Ama1, Aka1, Aga1
|
|
407
|
+
xorrol r10, r3, r4
|
|
408
|
+
xor5 r6, Aba1, Asa0, Ama0, Aka0, Aga0
|
|
409
|
+
eors r11, r6, r5
|
|
410
|
+
|
|
411
|
+
xor5 r4, Aso0, Amo0, Ako1, Ago0, Abo0
|
|
412
|
+
xorrol r5, lr, r4
|
|
413
|
+
str r5, [sp, #mDi0]
|
|
414
|
+
xor5 r5, Aso1, Amo1, Ako0, Ago1, Abo1
|
|
415
|
+
eors r2, r7, r5
|
|
416
|
+
|
|
417
|
+
xorrol r12, r5, r6
|
|
418
|
+
eors lr, r4, r3
|
|
419
|
+
|
|
420
|
+
KeccakThetaRhoPiChi r5, Ama0, r8, 2, r6, Abe0, r11, 23, r7, Aki0, r2, 31, r3, Aso1, r9, 14, r4, Agu0, r12, 10
|
|
421
|
+
KeccakThetaRhoPiChi r7, Aga0, r8, 9, r3, Ame1, r10, 0, r4, Abi0, r2, 3, r5, Ako0, r9, 12, r6, Asu0, lr, 4
|
|
422
|
+
ldr r8, [sp, #mDa0]
|
|
423
|
+
KeccakThetaRhoPiChi r4, Asa1, r8, 18, r5, Age1, r10, 5, r6, Ami1, r2, 8, r7, Abo1, r9, 28, r3, Aku0, lr, 14
|
|
424
|
+
KeccakThetaRhoPiChi r6, Aka1, r8, 20, r7, Ase1, r11, 1, r3, Agi0, r2, 31, r4, Amo1, r9, 27, r5, Abu1, r12, 19
|
|
425
|
+
ldr r9, [sp, #mDo1]
|
|
426
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Ake1, r10, 22, Asi0, r2, 22, Ago0, r9, 11, Amu1, r12, 7, 16, 0
|
|
427
|
+
|
|
428
|
+
ldr r2, [sp, #mDi0]
|
|
429
|
+
KeccakThetaRhoPiChi r5, Ama1, r8, 1, r6, Abe1, r10, 22, r7, Aki1, r2, 30, r3, Aso0, r9, 14, r4, Agu1, lr, 10
|
|
430
|
+
KeccakThetaRhoPiChi r7, Aga1, r8, 9, r3, Ame0, r11, 1, r4, Abi1, r2, 3, r5, Ako1, r9, 13, r6, Asu1, r12, 4
|
|
431
|
+
ldr r8, [sp, #mDa1]
|
|
432
|
+
KeccakThetaRhoPiChi r4, Asa0, r8, 18, r5, Age0, r11, 5, r6, Ami0, r2, 7, r7, Abo0, r9, 28, r3, Aku1, r12, 13
|
|
433
|
+
KeccakThetaRhoPiChi r6, Aka0, r8, 21, r7, Ase0, r10, 1, r3, Agi1, r2, 31, r4, Amo0, r9, 28, r5, Abu0, lr, 20
|
|
434
|
+
ldr r9, [sp, #mDo0]
|
|
435
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Ake0, r11, 22, Asi1, r2, 21, Ago1, r9, 10, Amu0, lr, 7, 20, 0
|
|
436
|
+
MEND
|
|
437
|
+
|
|
438
|
+
MACRO
|
|
439
|
+
KeccakRound3
|
|
440
|
+
|
|
441
|
+
xor5 r3, Amu1, Agu0, Asu1, Aku0, Abu0
|
|
442
|
+
xor5 r7, Ake0, Abe1, Ame1, Age0, Ase1
|
|
443
|
+
xorrol r6, r3, r7
|
|
444
|
+
str r6, [sp, #mDa0]
|
|
445
|
+
xor5 r6, Amu0, Agu1, Asu0, Aku1, Abu1
|
|
446
|
+
xor5 lr, Ake1, Abe0, Ame0, Age1, Ase0
|
|
447
|
+
eors r8, r6, lr
|
|
448
|
+
str r8, [sp, #mDa1]
|
|
449
|
+
|
|
450
|
+
xor5 r5, Asi0, Aki0, Abi1, Ami1, Agi1
|
|
451
|
+
xorrol r9, r5, r6
|
|
452
|
+
str r9, [sp, #mDo0]
|
|
453
|
+
xor5 r4, Asi1, Aki1, Abi0, Ami0, Agi0
|
|
454
|
+
eors r3, r3, r4
|
|
455
|
+
str r3, [sp, #mDo1]
|
|
456
|
+
|
|
457
|
+
xor5 r3, Aba0, Ama0, Aga1, Asa1, Aka0
|
|
458
|
+
xorrol r10, r3, r4
|
|
459
|
+
xor5 r6, Aba1, Ama1, Aga0, Asa0, Aka1
|
|
460
|
+
eors r11, r6, r5
|
|
461
|
+
|
|
462
|
+
xor5 r4, Ago1, Aso0, Ako0, Abo0, Amo1
|
|
463
|
+
xorrol r5, lr, r4
|
|
464
|
+
str r5, [sp, #mDi0]
|
|
465
|
+
xor5 r5, Ago0, Aso1, Ako1, Abo1, Amo0
|
|
466
|
+
eors r2, r7, r5
|
|
467
|
+
|
|
468
|
+
xorrol r12, r5, r6
|
|
469
|
+
eors lr, r4, r3
|
|
470
|
+
|
|
471
|
+
KeccakThetaRhoPiChi r5, Aga0, r8, 2, r6, Age0, r11, 23, r7, Agi0, r2, 31, r3, Ago0, r9, 14, r4, Agu0, r12, 10
|
|
472
|
+
KeccakThetaRhoPiChi r7, Aka1, r8, 9, r3, Ake1, r10, 0, r4, Aki1, r2, 3, r5, Ako1, r9, 12, r6, Aku1, lr, 4
|
|
473
|
+
ldr r8, [sp, #mDa0]
|
|
474
|
+
KeccakThetaRhoPiChi r4, Ama0, r8, 18, r5, Ame0, r10, 5, r6, Ami0, r2, 8, r7, Amo0, r9, 28, r3, Amu0, lr, 14
|
|
475
|
+
KeccakThetaRhoPiChi r6, Asa1, r8, 20, r7, Ase1, r11, 1, r3, Asi1, r2, 31, r4, Aso1, r9, 27, r5, Asu1, r12, 19
|
|
476
|
+
ldr r9, [sp, #mDo1]
|
|
477
|
+
KeccakThetaRhoPiChiIota Aba0, r8, Abe0, r10, 22, Abi0, r2, 22, Abo0, r9, 11, Abu0, r12, 7, 24, 0
|
|
478
|
+
|
|
479
|
+
ldr r2, [sp, #mDi0]
|
|
480
|
+
KeccakThetaRhoPiChi r5, Aga1, r8, 1, r6, Age1, r10, 22, r7, Agi1, r2, 30, r3, Ago1, r9, 14, r4, Agu1, lr, 10
|
|
481
|
+
KeccakThetaRhoPiChi r7, Aka0, r8, 9, r3, Ake0, r11, 1, r4, Aki0, r2, 3, r5, Ako0, r9, 13, r6, Aku0, r12, 4
|
|
482
|
+
ldr r8, [sp, #mDa1]
|
|
483
|
+
KeccakThetaRhoPiChi r4, Ama1, r8, 18, r5, Ame1, r11, 5, r6, Ami1, r2, 7, r7, Amo1, r9, 28, r3, Amu1, r12, 13
|
|
484
|
+
KeccakThetaRhoPiChi r6, Asa0, r8, 21, r7, Ase0, r10, 1, r3, Asi0, r2, 31, r4, Aso0, r9, 28, r5, Asu0, lr, 20
|
|
485
|
+
ldr r9, [sp, #mDo0]
|
|
486
|
+
KeccakThetaRhoPiChiIota Aba1, r8, Abe1, r11, 22, Abi1, r2, 21, Abo1, r9, 10, Abu1, lr, 7, 28, 1
|
|
487
|
+
MEND
|
|
488
|
+
|
|
489
|
+
;----------------------------------------------------------------------------
|
|
490
|
+
;
|
|
491
|
+
; void KeccakP1600_StaticInitialize( void )
|
|
492
|
+
;
|
|
493
|
+
ALIGN
|
|
494
|
+
EXPORT KeccakP1600_StaticInitialize
|
|
495
|
+
KeccakP1600_StaticInitialize PROC
|
|
496
|
+
bx lr
|
|
497
|
+
ENDP
|
|
498
|
+
|
|
499
|
+
;----------------------------------------------------------------------------
|
|
500
|
+
;
|
|
501
|
+
; void KeccakP1600_Initialize(void *state)
|
|
502
|
+
;
|
|
503
|
+
ALIGN
|
|
504
|
+
EXPORT KeccakP1600_Initialize
|
|
505
|
+
KeccakP1600_Initialize PROC
|
|
506
|
+
push {r4 - r5}
|
|
507
|
+
movs r1, #0
|
|
508
|
+
movs r2, #0
|
|
509
|
+
movs r3, #0
|
|
510
|
+
movs r4, #0
|
|
511
|
+
movs r5, #0
|
|
512
|
+
stmia r0!, { r1 - r5 }
|
|
513
|
+
stmia r0!, { r1 - r5 }
|
|
514
|
+
stmia r0!, { r1 - r5 }
|
|
515
|
+
stmia r0!, { r1 - r5 }
|
|
516
|
+
stmia r0!, { r1 - r5 }
|
|
517
|
+
stmia r0!, { r1 - r5 }
|
|
518
|
+
stmia r0!, { r1 - r5 }
|
|
519
|
+
stmia r0!, { r1 - r5 }
|
|
520
|
+
stmia r0!, { r1 - r5 }
|
|
521
|
+
stmia r0!, { r1 - r5 }
|
|
522
|
+
pop {r4 - r5}
|
|
523
|
+
bx lr
|
|
524
|
+
ENDP
|
|
525
|
+
|
|
526
|
+
; ----------------------------------------------------------------------------
|
|
527
|
+
;
|
|
528
|
+
; void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
529
|
+
;
|
|
530
|
+
ALIGN
|
|
531
|
+
EXPORT KeccakP1600_AddByte
|
|
532
|
+
KeccakP1600_AddByte PROC
|
|
533
|
+
push {r4 - r11}
|
|
534
|
+
bic r3, r2, #7 ; r3 = offset & ~7
|
|
535
|
+
adds r0, r0, r3 ; state += r3
|
|
536
|
+
ands r2, r2, #7 ; offset &= 7 (part not lane aligned)
|
|
537
|
+
movw r8, #0x5555
|
|
538
|
+
movt r8, #0x5555
|
|
539
|
+
movw r9, #0x3333
|
|
540
|
+
movt r9, #0x3333
|
|
541
|
+
movw r10, #0x0F0F
|
|
542
|
+
movt r10, #0x0F0F
|
|
543
|
+
movw r11, #0x00FF
|
|
544
|
+
movt r11, #0x00FF
|
|
545
|
+
movs r4, #0
|
|
546
|
+
movs r5, #0
|
|
547
|
+
push { r4 - r5 }
|
|
548
|
+
add r2, r2, sp
|
|
549
|
+
strb r1, [r2]
|
|
550
|
+
pop { r4 - r5 }
|
|
551
|
+
ldrd r6, r7, [r0]
|
|
552
|
+
toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
|
|
553
|
+
strd r6, r7, [r0]
|
|
554
|
+
pop {r4 - r11}
|
|
555
|
+
bx lr
|
|
556
|
+
ENDP
|
|
557
|
+
|
|
558
|
+
;----------------------------------------------------------------------------
|
|
559
|
+
;
|
|
560
|
+
; void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
561
|
+
;
|
|
562
|
+
ALIGN
|
|
563
|
+
EXPORT KeccakP1600_AddBytes
|
|
564
|
+
KeccakP1600_AddBytes PROC
|
|
565
|
+
cmp r3, #0 ; if length != 0
|
|
566
|
+
beq KeccakP1600_AddBytes_Exit1
|
|
567
|
+
push {r4 - r8, lr} ; then
|
|
568
|
+
bic r4, r2, #7 ; offset &= ~7
|
|
569
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
570
|
+
ands r2, r2, #7 ; offset &= 7 (part not lane aligned)
|
|
571
|
+
beq KeccakP1600_AddBytes_CheckLanes ; if offset != 0
|
|
572
|
+
movs r4, r3 ; then, do remaining bytes in first lane
|
|
573
|
+
rsb r5, r2, #8 ; max size in lane = 8 - offset
|
|
574
|
+
cmp r4, r5
|
|
575
|
+
ble KeccakP1600_AddBytes_BytesAlign
|
|
576
|
+
movs r4, r5
|
|
577
|
+
KeccakP1600_AddBytes_BytesAlign
|
|
578
|
+
sub r8, r3, r4 ; size left
|
|
579
|
+
movs r3, r4
|
|
580
|
+
bl __KeccakP1600_AddBytesInLane
|
|
581
|
+
mov r3, r8
|
|
582
|
+
KeccakP1600_AddBytes_CheckLanes
|
|
583
|
+
lsrs r2, r3, #3 ; if length >= 8
|
|
584
|
+
beq KeccakP1600_AddBytes_Bytes
|
|
585
|
+
mov r8, r3
|
|
586
|
+
bl __KeccakP1600_AddLanes
|
|
587
|
+
and r3, r8, #7
|
|
588
|
+
KeccakP1600_AddBytes_Bytes
|
|
589
|
+
cmp r3, #0
|
|
590
|
+
beq KeccakP1600_AddBytes_Exit
|
|
591
|
+
movs r2, #0
|
|
592
|
+
bl __KeccakP1600_AddBytesInLane
|
|
593
|
+
KeccakP1600_AddBytes_Exit
|
|
594
|
+
pop {r4 - r8, pc}
|
|
595
|
+
KeccakP1600_AddBytes_Exit1
|
|
596
|
+
bx lr
|
|
597
|
+
ENDP
|
|
598
|
+
|
|
599
|
+
;----------------------------------------------------------------------------
|
|
600
|
+
;
|
|
601
|
+
; __KeccakP1600_AddLanes
|
|
602
|
+
;
|
|
603
|
+
; Input:
|
|
604
|
+
; r0 state pointer
|
|
605
|
+
; r1 data pointer
|
|
606
|
+
; r2 laneCount
|
|
607
|
+
;
|
|
608
|
+
; Output:
|
|
609
|
+
; r0 state pointer next lane
|
|
610
|
+
; r1 data pointer next byte to input
|
|
611
|
+
;
|
|
612
|
+
; Changed: r2-r7
|
|
613
|
+
;
|
|
614
|
+
ALIGN
|
|
615
|
+
__KeccakP1600_AddLanes PROC
|
|
616
|
+
push {r8 - r11}
|
|
617
|
+
movw r8, #0x5555
|
|
618
|
+
movt r8, #0x5555
|
|
619
|
+
movw r9, #0x3333
|
|
620
|
+
movt r9, #0x3333
|
|
621
|
+
movw r10, #0x0F0F
|
|
622
|
+
movt r10, #0x0F0F
|
|
623
|
+
movw r11, #0x00FF
|
|
624
|
+
movt r11, #0x00FF
|
|
625
|
+
__KeccakP1600_AddLanes_LoopAligned
|
|
626
|
+
ldr r4, [r1], #4
|
|
627
|
+
ldr r5, [r1], #4
|
|
628
|
+
ldrd r6, r7, [r0]
|
|
629
|
+
toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
|
|
630
|
+
strd r6, r7, [r0], #8
|
|
631
|
+
subs r2, r2, #1
|
|
632
|
+
bne __KeccakP1600_AddLanes_LoopAligned
|
|
633
|
+
pop {r8 - r11}
|
|
634
|
+
bx lr
|
|
635
|
+
ENDP
|
|
636
|
+
|
|
637
|
+
;----------------------------------------------------------------------------
|
|
638
|
+
;
|
|
639
|
+
; __KeccakP1600_AddBytesInLane
|
|
640
|
+
;
|
|
641
|
+
; Input:
|
|
642
|
+
; r0 state pointer
|
|
643
|
+
; r1 data pointer
|
|
644
|
+
; r2 offset in lane
|
|
645
|
+
; r3 length
|
|
646
|
+
;
|
|
647
|
+
; Output:
|
|
648
|
+
; r0 state pointer next lane
|
|
649
|
+
; r1 data pointer next byte to input
|
|
650
|
+
;
|
|
651
|
+
; Changed: r2-r7
|
|
652
|
+
;
|
|
653
|
+
ALIGN
|
|
654
|
+
__KeccakP1600_AddBytesInLane PROC
|
|
655
|
+
push {r8 - r11}
|
|
656
|
+
movw r8, #0x5555
|
|
657
|
+
movt r8, #0x5555
|
|
658
|
+
movw r9, #0x3333
|
|
659
|
+
movt r9, #0x3333
|
|
660
|
+
movw r10, #0x0F0F
|
|
661
|
+
movt r10, #0x0F0F
|
|
662
|
+
movw r11, #0x00FF
|
|
663
|
+
movt r11, #0x00FF
|
|
664
|
+
movs r4, #0
|
|
665
|
+
movs r5, #0
|
|
666
|
+
push { r4 - r5 }
|
|
667
|
+
add r2, r2, sp
|
|
668
|
+
__KeccakP1600_AddBytesInLane_Loop
|
|
669
|
+
ldrb r5, [r1], #1
|
|
670
|
+
strb r5, [r2], #1
|
|
671
|
+
subs r3, r3, #1
|
|
672
|
+
bne __KeccakP1600_AddBytesInLane_Loop
|
|
673
|
+
pop { r4 - r5 }
|
|
674
|
+
ldrd r6, r7, [r0]
|
|
675
|
+
toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
|
|
676
|
+
strd r6, r7, [r0], #8
|
|
677
|
+
pop {r8 - r11}
|
|
678
|
+
bx lr
|
|
679
|
+
ENDP
|
|
680
|
+
|
|
681
|
+
;----------------------------------------------------------------------------
|
|
682
|
+
;
|
|
683
|
+
; void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
684
|
+
;
|
|
685
|
+
ALIGN
|
|
686
|
+
EXPORT KeccakP1600_OverwriteBytes
|
|
687
|
+
KeccakP1600_OverwriteBytes PROC
|
|
688
|
+
cmp r3, #0 ; if length != 0
|
|
689
|
+
beq KeccakP1600_OverwriteBytes_Exit1
|
|
690
|
+
push {r4 - r8, lr} ; then
|
|
691
|
+
bic r4, r2, #7 ; offset &= ~7
|
|
692
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
693
|
+
ands r2, r2, #7 ; offset &= 7 (part not lane aligned)
|
|
694
|
+
beq KeccakP1600_OverwriteBytes_CheckLanes ; if offset != 0
|
|
695
|
+
movs r4, r3 ; then, do remaining bytes in first lane
|
|
696
|
+
rsb r5, r2, #8 ; max size in lane = 8 - offset
|
|
697
|
+
cmp r4, r5
|
|
698
|
+
ble KeccakP1600_OverwriteBytes_BytesAlign
|
|
699
|
+
movs r4, r5
|
|
700
|
+
KeccakP1600_OverwriteBytes_BytesAlign
|
|
701
|
+
sub r8, r3, r4 ; size left
|
|
702
|
+
movs r3, r4
|
|
703
|
+
bl __KeccakP1600_OverwriteBytesInLane
|
|
704
|
+
mov r3, r8
|
|
705
|
+
KeccakP1600_OverwriteBytes_CheckLanes
|
|
706
|
+
lsrs r2, r3, #3 ; if length >= 8
|
|
707
|
+
beq KeccakP1600_OverwriteBytes_Bytes
|
|
708
|
+
mov r8, r3
|
|
709
|
+
bl __KeccakP1600_OverwriteLanes
|
|
710
|
+
and r3, r8, #7
|
|
711
|
+
KeccakP1600_OverwriteBytes_Bytes
|
|
712
|
+
cmp r3, #0
|
|
713
|
+
beq KeccakP1600_OverwriteBytes_Exit
|
|
714
|
+
movs r2, #0
|
|
715
|
+
bl __KeccakP1600_OverwriteBytesInLane
|
|
716
|
+
KeccakP1600_OverwriteBytes_Exit
|
|
717
|
+
pop {r4 - r8, pc}
|
|
718
|
+
KeccakP1600_OverwriteBytes_Exit1
|
|
719
|
+
bx lr
|
|
720
|
+
ENDP
|
|
721
|
+
|
|
722
|
+
;----------------------------------------------------------------------------
|
|
723
|
+
;
|
|
724
|
+
; __KeccakP1600_OverwriteLanes
|
|
725
|
+
;
|
|
726
|
+
; Input:
|
|
727
|
+
; r0 state pointer
|
|
728
|
+
; r1 data pointer
|
|
729
|
+
; r2 laneCount
|
|
730
|
+
;
|
|
731
|
+
; Output:
|
|
732
|
+
; r0 state pointer next lane
|
|
733
|
+
; r1 data pointer next byte to input
|
|
734
|
+
;
|
|
735
|
+
; Changed: r2-r7
|
|
736
|
+
;
|
|
737
|
+
ALIGN
|
|
738
|
+
__KeccakP1600_OverwriteLanes PROC
|
|
739
|
+
push {r8 - r11}
|
|
740
|
+
movw r8, #0x5555
|
|
741
|
+
movt r8, #0x5555
|
|
742
|
+
movw r9, #0x3333
|
|
743
|
+
movt r9, #0x3333
|
|
744
|
+
movw r10, #0x0F0F
|
|
745
|
+
movt r10, #0x0F0F
|
|
746
|
+
movw r11, #0x00FF
|
|
747
|
+
movt r11, #0x00FF
|
|
748
|
+
__KeccakP1600_OverwriteLanes_LoopAligned
|
|
749
|
+
ldr r4, [r1], #4
|
|
750
|
+
ldr r5, [r1], #4
|
|
751
|
+
toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 1
|
|
752
|
+
strd r6, r7, [r0], #8
|
|
753
|
+
subs r2, r2, #1
|
|
754
|
+
bne __KeccakP1600_OverwriteLanes_LoopAligned
|
|
755
|
+
pop {r8 - r11}
|
|
756
|
+
bx lr
|
|
757
|
+
ENDP
|
|
758
|
+
|
|
759
|
+
;----------------------------------------------------------------------------
|
|
760
|
+
;
|
|
761
|
+
; __KeccakP1600_OverwriteBytesInLane
|
|
762
|
+
;
|
|
763
|
+
; Input:
|
|
764
|
+
; r0 state pointer
|
|
765
|
+
; r1 data pointer
|
|
766
|
+
; r2 offset in lane
|
|
767
|
+
; r3 length
|
|
768
|
+
;
|
|
769
|
+
; Output:
|
|
770
|
+
; r0 state pointer next lane
|
|
771
|
+
; r1 data pointer next byte to input
|
|
772
|
+
;
|
|
773
|
+
; Changed: r2-r7
|
|
774
|
+
;
|
|
775
|
+
ALIGN
|
|
776
|
+
__KeccakP1600_OverwriteBytesInLane PROC
|
|
777
|
+
push {r8 - r11}
|
|
778
|
+
movw r8, #0x5555
|
|
779
|
+
movt r8, #0x5555
|
|
780
|
+
movw r9, #0x3333
|
|
781
|
+
movt r9, #0x3333
|
|
782
|
+
movw r10, #0x0F0F
|
|
783
|
+
movt r10, #0x0F0F
|
|
784
|
+
movw r11, #0x00FF
|
|
785
|
+
movt r11, #0x00FF
|
|
786
|
+
movs r4, #0
|
|
787
|
+
movs r5, #0
|
|
788
|
+
push { r4 - r5 }
|
|
789
|
+
lsl r7, r2, #2
|
|
790
|
+
add r2, r2, sp
|
|
791
|
+
movs r6, #0x0F ;r6 mask to wipe nibbles(bit interleaved bytes) in state
|
|
792
|
+
lsls r6, r6, r7
|
|
793
|
+
movs r7, r6
|
|
794
|
+
KeccakP1600_OverwriteBytesInLane_Loop
|
|
795
|
+
orrs r6, r6, r7
|
|
796
|
+
lsls r7, r7, #4
|
|
797
|
+
ldrb r5, [r1], #1
|
|
798
|
+
subs r3, r3, #1
|
|
799
|
+
strb r5, [r2], #1
|
|
800
|
+
bne KeccakP1600_OverwriteBytesInLane_Loop
|
|
801
|
+
pop { r4 - r5 }
|
|
802
|
+
toBitInterleaving r4, r5, r2, r3, r7, r8, r9, r10, r11, 1
|
|
803
|
+
ldrd r4, r5, [r0]
|
|
804
|
+
bics r4, r4, r6
|
|
805
|
+
bics r5, r5, r6
|
|
806
|
+
orrs r2, r2, r4
|
|
807
|
+
orrs r3, r3, r5
|
|
808
|
+
strd r2, r3, [r0], #8
|
|
809
|
+
pop {r8 - r11}
|
|
810
|
+
bx lr
|
|
811
|
+
ENDP
|
|
812
|
+
|
|
813
|
+
;----------------------------------------------------------------------------
|
|
814
|
+
;
|
|
815
|
+
; void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
816
|
+
;
|
|
817
|
+
ALIGN
|
|
818
|
+
EXPORT KeccakP1600_OverwriteWithZeroes
|
|
819
|
+
KeccakP1600_OverwriteWithZeroes PROC
|
|
820
|
+
push {r4 - r5}
|
|
821
|
+
lsrs r2, r1, #3
|
|
822
|
+
beq KeccakP1600_OverwriteWithZeroes_Bytes
|
|
823
|
+
movs r4, #0
|
|
824
|
+
movs r5, #0
|
|
825
|
+
KeccakP1600_OverwriteWithZeroes_LoopLanes
|
|
826
|
+
strd r4, r5, [r0], #8
|
|
827
|
+
subs r2, r2, #1
|
|
828
|
+
bne KeccakP1600_OverwriteWithZeroes_LoopLanes
|
|
829
|
+
KeccakP1600_OverwriteWithZeroes_Bytes
|
|
830
|
+
ands r1, #7
|
|
831
|
+
beq KeccakP1600_OverwriteWithZeroes_Exit
|
|
832
|
+
movs r3, #0x0F ;r2 already zero, r3 = mask to wipe nibbles(bit interleaved bytes) in state
|
|
833
|
+
KeccakP1600_OverwriteWithZeroes_LoopBytes
|
|
834
|
+
orrs r2, r2, r3
|
|
835
|
+
lsls r3, r3, #4
|
|
836
|
+
subs r1, r1, #1
|
|
837
|
+
bne KeccakP1600_OverwriteWithZeroes_LoopBytes
|
|
838
|
+
ldrd r4, r5, [r0]
|
|
839
|
+
bics r4, r4, r2
|
|
840
|
+
bics r5, r5, r2
|
|
841
|
+
strd r4, r5, [r0], #8
|
|
842
|
+
KeccakP1600_OverwriteWithZeroes_Exit
|
|
843
|
+
pop {r4 - r5}
|
|
844
|
+
bx lr
|
|
845
|
+
ENDP
|
|
846
|
+
|
|
847
|
+
;----------------------------------------------------------------------------
|
|
848
|
+
;
|
|
849
|
+
; void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
850
|
+
;
|
|
851
|
+
ALIGN
|
|
852
|
+
EXPORT KeccakP1600_ExtractBytes
|
|
853
|
+
KeccakP1600_ExtractBytes PROC
|
|
854
|
+
cmp r3, #0 ; if length != 0
|
|
855
|
+
beq KeccakP1600_ExtractBytes_Exit1
|
|
856
|
+
push {r4 - r8, lr} ; then
|
|
857
|
+
bic r4, r2, #7 ; offset &= ~7
|
|
858
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
859
|
+
ands r2, r2, #7 ; offset &= 7 (part not lane aligned)
|
|
860
|
+
beq KeccakP1600_ExtractBytes_CheckLanes ; if offset != 0
|
|
861
|
+
movs r4, r3 ; then, do remaining bytes in first lane
|
|
862
|
+
rsb r5, r2, #8 ; max size in lane = 8 - offset
|
|
863
|
+
cmp r4, r5
|
|
864
|
+
ble KeccakP1600_ExtractBytes_BytesAlign
|
|
865
|
+
movs r4, r5
|
|
866
|
+
KeccakP1600_ExtractBytes_BytesAlign
|
|
867
|
+
sub r8, r3, r4 ; size left
|
|
868
|
+
movs r3, r4
|
|
869
|
+
bl __KeccakP1600_ExtractBytesInLane
|
|
870
|
+
mov r3, r8
|
|
871
|
+
KeccakP1600_ExtractBytes_CheckLanes
|
|
872
|
+
lsrs r2, r3, #3 ; if length >= 8
|
|
873
|
+
beq KeccakP1600_ExtractBytes_Bytes
|
|
874
|
+
mov r8, r3
|
|
875
|
+
bl __KeccakP1600_ExtractLanes
|
|
876
|
+
and r3, r8, #7
|
|
877
|
+
KeccakP1600_ExtractBytes_Bytes
|
|
878
|
+
cmp r3, #0
|
|
879
|
+
beq KeccakP1600_ExtractBytes_Exit
|
|
880
|
+
movs r2, #0
|
|
881
|
+
bl __KeccakP1600_ExtractBytesInLane
|
|
882
|
+
KeccakP1600_ExtractBytes_Exit
|
|
883
|
+
pop {r4 - r8, pc}
|
|
884
|
+
KeccakP1600_ExtractBytes_Exit1
|
|
885
|
+
bx lr
|
|
886
|
+
ENDP
|
|
887
|
+
|
|
888
|
+
;----------------------------------------------------------------------------
|
|
889
|
+
;
|
|
890
|
+
; __KeccakP1600_ExtractLanes
|
|
891
|
+
;
|
|
892
|
+
; Input:
|
|
893
|
+
; r0 state pointer
|
|
894
|
+
; r1 data pointer
|
|
895
|
+
; r2 laneCount
|
|
896
|
+
;
|
|
897
|
+
; Output:
|
|
898
|
+
; r0 state pointer next lane
|
|
899
|
+
; r1 data pointer next byte to input
|
|
900
|
+
;
|
|
901
|
+
; Changed: r2-r5
|
|
902
|
+
;
|
|
903
|
+
ALIGN
|
|
904
|
+
__KeccakP1600_ExtractLanes PROC
|
|
905
|
+
push {r6 - r9}
|
|
906
|
+
movw r6, #0xFF00
|
|
907
|
+
movw r7, #0x00F0
|
|
908
|
+
movt r7, #0x00F0
|
|
909
|
+
movw r8, #0x0C0C
|
|
910
|
+
movt r8, #0x0C0C
|
|
911
|
+
movw r9, #0x2222
|
|
912
|
+
movt r9, #0x2222
|
|
913
|
+
__KeccakP1600_ExtractLanes_LoopAligned
|
|
914
|
+
ldrd r4, r5, [r0], #8
|
|
915
|
+
fromBitInterleaving r4, r5, r3, r6, r7, r8, r9
|
|
916
|
+
str r4, [r1], #4
|
|
917
|
+
subs r2, r2, #1
|
|
918
|
+
str r5, [r1], #4
|
|
919
|
+
bne __KeccakP1600_ExtractLanes_LoopAligned
|
|
920
|
+
pop {r6 - r9}
|
|
921
|
+
bx lr
|
|
922
|
+
ENDP
|
|
923
|
+
|
|
924
|
+
;----------------------------------------------------------------------------
|
|
925
|
+
;
|
|
926
|
+
; __KeccakP1600_ExtractBytesInLane
|
|
927
|
+
;
|
|
928
|
+
; Input:
|
|
929
|
+
; r0 state pointer
|
|
930
|
+
; r1 data pointer
|
|
931
|
+
; r2 offset in lane
|
|
932
|
+
; r3 length
|
|
933
|
+
;
|
|
934
|
+
; Output:
|
|
935
|
+
; r0 state pointer next lane
|
|
936
|
+
; r1 data pointer next byte to input
|
|
937
|
+
;
|
|
938
|
+
; Changed: r2-r5,r12
|
|
939
|
+
;
|
|
940
|
+
ALIGN
|
|
941
|
+
__KeccakP1600_ExtractBytesInLane PROC
|
|
942
|
+
push {r6 - r9}
|
|
943
|
+
movw r6, #0xFF00
|
|
944
|
+
movw r7, #0x00F0
|
|
945
|
+
movt r7, #0x00F0
|
|
946
|
+
movw r8, #0x0C0C
|
|
947
|
+
movt r8, #0x0C0C
|
|
948
|
+
movw r9, #0x2222
|
|
949
|
+
movt r9, #0x2222
|
|
950
|
+
ldrd r4, r5, [r0], #8
|
|
951
|
+
fromBitInterleaving r4, r5, r12, r6, r7, r8, r9
|
|
952
|
+
push {r4, r5}
|
|
953
|
+
add r2, sp, r2
|
|
954
|
+
__KeccakP1600_ExtractBytesInLane_Loop
|
|
955
|
+
ldrb r4, [r2], #1
|
|
956
|
+
subs r3, r3, #1
|
|
957
|
+
strb r4, [r1], #1
|
|
958
|
+
bne __KeccakP1600_ExtractBytesInLane_Loop
|
|
959
|
+
add sp, #8
|
|
960
|
+
pop {r6 - r9}
|
|
961
|
+
bx lr
|
|
962
|
+
ENDP
|
|
963
|
+
|
|
964
|
+
;----------------------------------------------------------------------------
|
|
965
|
+
;
|
|
966
|
+
; void KeccakP1600_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
967
|
+
;
|
|
968
|
+
ALIGN
|
|
969
|
+
EXPORT KeccakP1600_ExtractAndAddBytes
|
|
970
|
+
KeccakP1600_ExtractAndAddBytes PROC
|
|
971
|
+
push {r4 - r10, lr}
|
|
972
|
+
mov r10, r2
|
|
973
|
+
mov r2, r3
|
|
974
|
+
ldr r3, [sp, #8*4]
|
|
975
|
+
cmp r3, #0
|
|
976
|
+
beq KeccakP1600_ExtractAndAddBytes_Exit ; if length != 0
|
|
977
|
+
bic r4, r2, #7 ; then, offset &= ~7
|
|
978
|
+
adds r0, r0, r4 ; add whole lane offset to state pointer
|
|
979
|
+
ands r2, r2, #7 ; offset &= 7 (part not lane aligned)
|
|
980
|
+
beq KeccakP1600_ExtractAndAddBytes_CheckLanes ; if offset != 0
|
|
981
|
+
movs r4, r3 ; then, do remaining bytes in first lane
|
|
982
|
+
rsb r5, r2, #8 ; max size in lane = 8 - offset
|
|
983
|
+
cmp r4, r5
|
|
984
|
+
ble KeccakP1600_ExtractAndAddBytes_BytesAlign
|
|
985
|
+
movs r4, r5
|
|
986
|
+
KeccakP1600_ExtractAndAddBytes_BytesAlign
|
|
987
|
+
sub r8, r3, r4 ; size left
|
|
988
|
+
movs r3, r4
|
|
989
|
+
bl __KeccakP1600_ExtractAndAddBytesInLane
|
|
990
|
+
mov r3, r8
|
|
991
|
+
KeccakP1600_ExtractAndAddBytes_CheckLanes
|
|
992
|
+
lsrs r2, r3, #3 ; if length >= 8
|
|
993
|
+
beq KeccakP1600_ExtractAndAddBytes_Bytes
|
|
994
|
+
mov r8, r3
|
|
995
|
+
bl __KeccakP1600_ExtractAndAddLanes
|
|
996
|
+
and r3, r8, #7
|
|
997
|
+
KeccakP1600_ExtractAndAddBytes_Bytes
|
|
998
|
+
cmp r3, #0
|
|
999
|
+
beq KeccakP1600_ExtractAndAddBytes_Exit
|
|
1000
|
+
movs r2, #0
|
|
1001
|
+
bl __KeccakP1600_ExtractAndAddBytesInLane
|
|
1002
|
+
KeccakP1600_ExtractAndAddBytes_Exit
|
|
1003
|
+
pop {r4 - r10, pc}
|
|
1004
|
+
ENDP
|
|
1005
|
+
|
|
1006
|
+
;----------------------------------------------------------------------------
|
|
1007
|
+
;
|
|
1008
|
+
; __KeccakP1600_ExtractAndAddLanes
|
|
1009
|
+
;
|
|
1010
|
+
; Input:
|
|
1011
|
+
; r0 state pointer
|
|
1012
|
+
; r1 in pointer
|
|
1013
|
+
; r2 laneCount
|
|
1014
|
+
; r10 out pointer
|
|
1015
|
+
;
|
|
1016
|
+
; Output:
|
|
1017
|
+
; r0 state pointer next lane
|
|
1018
|
+
; r1 in pointer (next 32-bit word)
|
|
1019
|
+
; r10 out pointer (next 32-bit word)
|
|
1020
|
+
;
|
|
1021
|
+
; Changed: r2-r5
|
|
1022
|
+
;
|
|
1023
|
+
ALIGN
|
|
1024
|
+
__KeccakP1600_ExtractAndAddLanes PROC
|
|
1025
|
+
push {r6 - r9}
|
|
1026
|
+
movw r6, #0xFF00
|
|
1027
|
+
movw r7, #0x00F0
|
|
1028
|
+
movt r7, #0x00F0
|
|
1029
|
+
movw r8, #0x0C0C
|
|
1030
|
+
movt r8, #0x0C0C
|
|
1031
|
+
movw r9, #0x2222
|
|
1032
|
+
movt r9, #0x2222
|
|
1033
|
+
__KeccakP1600_ExtractAndAddLanes_LoopAligned
|
|
1034
|
+
ldrd r4, r5, [r0], #8
|
|
1035
|
+
fromBitInterleaving r4, r5, r3, r6, r7, r8, r9
|
|
1036
|
+
ldr r3, [r1], #4
|
|
1037
|
+
eors r4, r4, r3
|
|
1038
|
+
str r4, [r10], #4
|
|
1039
|
+
ldr r3, [r1], #4
|
|
1040
|
+
eors r5, r5, r3
|
|
1041
|
+
subs r2, r2, #1
|
|
1042
|
+
str r5, [r10], #4
|
|
1043
|
+
bne __KeccakP1600_ExtractAndAddLanes_LoopAligned
|
|
1044
|
+
pop {r6 - r9}
|
|
1045
|
+
bx lr
|
|
1046
|
+
ENDP
|
|
1047
|
+
|
|
1048
|
+
;----------------------------------------------------------------------------
|
|
1049
|
+
;
|
|
1050
|
+
; __KeccakP1600_ExtractAndAddBytesInLane
|
|
1051
|
+
;
|
|
1052
|
+
; Input:
|
|
1053
|
+
; r0 state pointer
|
|
1054
|
+
; r1 in pointer
|
|
1055
|
+
; r2 offset in lane
|
|
1056
|
+
; r3 length
|
|
1057
|
+
; r10 out pointer
|
|
1058
|
+
;
|
|
1059
|
+
; Output:
|
|
1060
|
+
; r0 state pointer next lane
|
|
1061
|
+
; r1 in pointer (next byte)
|
|
1062
|
+
; r10 out pointer (next byte)
|
|
1063
|
+
;
|
|
1064
|
+
; Changed: r2-r5,r12
|
|
1065
|
+
;
|
|
1066
|
+
ALIGN
|
|
1067
|
+
__KeccakP1600_ExtractAndAddBytesInLane PROC
|
|
1068
|
+
push {r6 - r9}
|
|
1069
|
+
movw r6, #0xFF00
|
|
1070
|
+
movw r7, #0x00F0
|
|
1071
|
+
movt r7, #0x00F0
|
|
1072
|
+
movw r8, #0x0C0C
|
|
1073
|
+
movt r8, #0x0C0C
|
|
1074
|
+
movw r9, #0x2222
|
|
1075
|
+
movt r9, #0x2222
|
|
1076
|
+
ldrd r4, r5, [r0], #8
|
|
1077
|
+
fromBitInterleaving r4, r5, r12, r6, r7, r8, r9
|
|
1078
|
+
push {r4, r5}
|
|
1079
|
+
add r2, sp, r2
|
|
1080
|
+
__KeccakP1600_ExtractAndAddBytesInLane_Loop
|
|
1081
|
+
ldrb r4, [r2], #1
|
|
1082
|
+
ldrb r5, [r1], #1
|
|
1083
|
+
eors r4, r4, r5
|
|
1084
|
+
subs r3, r3, #1
|
|
1085
|
+
strb r4, [r10], #1
|
|
1086
|
+
bne __KeccakP1600_ExtractAndAddBytesInLane_Loop
|
|
1087
|
+
add sp, #8
|
|
1088
|
+
pop {r6 - r9}
|
|
1089
|
+
bx lr
|
|
1090
|
+
ENDP
|
|
1091
|
+
|
|
1092
|
+
MACRO
|
|
1093
|
+
SwapPI13 $in0,$in1,$in2,$in3,$eo0,$eo1,$eo2,$eo3
|
|
1094
|
+
ldr r3, [r0, #$in0+0]
|
|
1095
|
+
ldr r4, [r0, #$in0+4]
|
|
1096
|
+
ldr r2, [r0, #$in1+0]
|
|
1097
|
+
ldr r1, [r0, #$in1+4]
|
|
1098
|
+
str r2, [r0, #$in0+$eo0*4]
|
|
1099
|
+
str r1, [r0, #$in0+($eo0^1)*4]
|
|
1100
|
+
ldr r2, [r0, #$in2+0]
|
|
1101
|
+
ldr r1, [r0, #$in2+4]
|
|
1102
|
+
str r2, [r0, #$in1+$eo1*4]
|
|
1103
|
+
str r1, [r0, #$in1+($eo1^1)*4]
|
|
1104
|
+
ldr r2, [r0, #$in3+0]
|
|
1105
|
+
ldr r1, [r0, #$in3+4]
|
|
1106
|
+
str r2, [r0, #$in2+$eo2*4]
|
|
1107
|
+
str r1, [r0, #$in2+($eo2^1)*4]
|
|
1108
|
+
str r3, [r0, #$in3+$eo3*4]
|
|
1109
|
+
str r4, [r0, #$in3+($eo3^1)*4]
|
|
1110
|
+
MEND
|
|
1111
|
+
|
|
1112
|
+
MACRO
|
|
1113
|
+
SwapPI2 $in0,$in1,$in2,$in3
|
|
1114
|
+
ldr r3, [r0, #$in0+0]
|
|
1115
|
+
ldr r4, [r0, #$in0+4]
|
|
1116
|
+
ldr r2, [r0, #$in1+0]
|
|
1117
|
+
ldr r1, [r0, #$in1+4]
|
|
1118
|
+
str r2, [r0, #$in0+4]
|
|
1119
|
+
str r1, [r0, #$in0+0]
|
|
1120
|
+
str r3, [r0, #$in1+4]
|
|
1121
|
+
str r4, [r0, #$in1+0]
|
|
1122
|
+
ldr r3, [r0, #$in2+0]
|
|
1123
|
+
ldr r4, [r0, #$in2+4]
|
|
1124
|
+
ldr r2, [r0, #$in3+0]
|
|
1125
|
+
ldr r1, [r0, #$in3+4]
|
|
1126
|
+
str r2, [r0, #$in2+4]
|
|
1127
|
+
str r1, [r0, #$in2+0]
|
|
1128
|
+
str r3, [r0, #$in3+4]
|
|
1129
|
+
str r4, [r0, #$in3+0]
|
|
1130
|
+
MEND
|
|
1131
|
+
|
|
1132
|
+
MACRO
|
|
1133
|
+
SwapEO $even,$odd
|
|
1134
|
+
ldr r3, [r0, #$even]
|
|
1135
|
+
ldr r4, [r0, #$odd]
|
|
1136
|
+
str r3, [r0, #$odd]
|
|
1137
|
+
str r4, [r0, #$even]
|
|
1138
|
+
MEND
|
|
1139
|
+
|
|
1140
|
+
; ----------------------------------------------------------------------------
|
|
1141
|
+
;
|
|
1142
|
+
; void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
1143
|
+
;
|
|
1144
|
+
ALIGN
|
|
1145
|
+
EXPORT KeccakP1600_Permute_Nrounds
|
|
1146
|
+
KeccakP1600_Permute_Nrounds PROC
|
|
1147
|
+
lsls r3, r1, #30
|
|
1148
|
+
bne KeccakP1600_Permute_NroundsNotMultiple4
|
|
1149
|
+
lsls r2, r1, #3
|
|
1150
|
+
adr r1, KeccakP1600_Permute_RoundConstants0Mod4
|
|
1151
|
+
subs r1, r1, r2
|
|
1152
|
+
b KeccakP1600_Permute
|
|
1153
|
+
KeccakP1600_Permute_NroundsNotMultiple4 ; nrounds not multiple of 4
|
|
1154
|
+
push { r4 - r12, lr }
|
|
1155
|
+
sub sp, #mSize
|
|
1156
|
+
lsrs r2, r1, #2
|
|
1157
|
+
lsls r2, r2, #3+2
|
|
1158
|
+
adr r1, KeccakP1600_Permute_RoundConstants0
|
|
1159
|
+
subs r1, r1, r2
|
|
1160
|
+
str r1, [sp, #mRC]
|
|
1161
|
+
lsls r3, r3, #1
|
|
1162
|
+
bcs KeccakP1600_Permute_Nrounds23Mod4
|
|
1163
|
+
KeccakP1600_Permute_Nrounds1Mod4
|
|
1164
|
+
SwapPI13 Aga0, Aka0, Asa0, Ama0, 1, 0, 1, 0
|
|
1165
|
+
SwapPI13 Abe0, Age0, Ame0, Ake0, 0, 1, 0, 1
|
|
1166
|
+
SwapPI13 Abi0, Aki0, Agi0, Asi0, 1, 0, 1, 0
|
|
1167
|
+
SwapEO Ami0, Ami1
|
|
1168
|
+
SwapPI13 Abo0, Amo0, Aso0, Ago0, 1, 0, 1, 0
|
|
1169
|
+
SwapEO Ako0, Ako1
|
|
1170
|
+
SwapPI13 Abu0, Asu0, Aku0, Amu0, 0, 1, 0, 1
|
|
1171
|
+
b.w KeccakP1600_Permute_Round1Mod4
|
|
1172
|
+
KeccakP1600_Permute_Nrounds23Mod4
|
|
1173
|
+
bpl KeccakP1600_Permute_Nrounds2Mod4
|
|
1174
|
+
KeccakP1600_Permute_Nrounds3Mod4
|
|
1175
|
+
SwapPI13 Aga0, Ama0, Asa0, Aka0, 0, 1, 0, 1
|
|
1176
|
+
SwapPI13 Abe0, Ake0, Ame0, Age0, 1, 0, 1, 0
|
|
1177
|
+
SwapPI13 Abi0, Asi0, Agi0, Aki0, 0, 1, 0, 1
|
|
1178
|
+
SwapEO Ami0, Ami1
|
|
1179
|
+
SwapPI13 Abo0, Ago0, Aso0, Amo0, 0, 1, 0, 1
|
|
1180
|
+
SwapEO Ako0, Ako1
|
|
1181
|
+
SwapPI13 Abu0, Amu0, Aku0, Asu0, 1, 0, 1, 0
|
|
1182
|
+
b.w KeccakP1600_Permute_Round3Mod4
|
|
1183
|
+
KeccakP1600_Permute_Nrounds2Mod4
|
|
1184
|
+
SwapPI2 Aga0, Asa0, Aka0, Ama0
|
|
1185
|
+
SwapPI2 Abe0, Ame0, Age0, Ake0
|
|
1186
|
+
SwapPI2 Abi0, Agi0, Aki0, Asi0
|
|
1187
|
+
SwapPI2 Abo0, Aso0, Ago0, Amo0
|
|
1188
|
+
SwapPI2 Abu0, Aku0, Amu0, Asu0
|
|
1189
|
+
b.w KeccakP1600_Permute_Round2Mod4
|
|
1190
|
+
ENDP
|
|
1191
|
+
|
|
1192
|
+
; ----------------------------------------------------------------------------
|
|
1193
|
+
;
|
|
1194
|
+
; void KeccakP1600_Permute_12rounds( void *state )
|
|
1195
|
+
;
|
|
1196
|
+
ALIGN
|
|
1197
|
+
EXPORT KeccakP1600_Permute_12rounds
|
|
1198
|
+
KeccakP1600_Permute_12rounds PROC
|
|
1199
|
+
adr r1, KeccakP1600_Permute_RoundConstants12
|
|
1200
|
+
b KeccakP1600_Permute
|
|
1201
|
+
ENDP
|
|
1202
|
+
|
|
1203
|
+
; ----------------------------------------------------------------------------
|
|
1204
|
+
;
|
|
1205
|
+
; void KeccakP1600_Permute_24rounds( void *state )
|
|
1206
|
+
;
|
|
1207
|
+
ALIGN
|
|
1208
|
+
EXPORT KeccakP1600_Permute_24rounds
|
|
1209
|
+
KeccakP1600_Permute_24rounds PROC
|
|
1210
|
+
adr r1, KeccakP1600_Permute_RoundConstants24
|
|
1211
|
+
b KeccakP1600_Permute
|
|
1212
|
+
ENDP
|
|
1213
|
+
|
|
1214
|
+
ALIGN
|
|
1215
|
+
KeccakP1600_Permute_RoundConstants24
|
|
1216
|
+
; 0 1
|
|
1217
|
+
dcd 0x00000001, 0x00000000
|
|
1218
|
+
dcd 0x00000000, 0x00000089
|
|
1219
|
+
dcd 0x00000000, 0x8000008b
|
|
1220
|
+
dcd 0x00000000, 0x80008080
|
|
1221
|
+
dcd 0x00000001, 0x0000008b
|
|
1222
|
+
dcd 0x00000001, 0x00008000
|
|
1223
|
+
dcd 0x00000001, 0x80008088
|
|
1224
|
+
dcd 0x00000001, 0x80000082
|
|
1225
|
+
dcd 0x00000000, 0x0000000b
|
|
1226
|
+
dcd 0x00000000, 0x0000000a
|
|
1227
|
+
dcd 0x00000001, 0x00008082
|
|
1228
|
+
dcd 0x00000000, 0x00008003
|
|
1229
|
+
KeccakP1600_Permute_RoundConstants12
|
|
1230
|
+
dcd 0x00000001, 0x0000808b
|
|
1231
|
+
dcd 0x00000001, 0x8000000b
|
|
1232
|
+
dcd 0x00000001, 0x8000008a
|
|
1233
|
+
dcd 0x00000001, 0x80000081
|
|
1234
|
+
dcd 0x00000000, 0x80000081
|
|
1235
|
+
dcd 0x00000000, 0x80000008
|
|
1236
|
+
dcd 0x00000000, 0x00000083
|
|
1237
|
+
dcd 0x00000000, 0x80008003
|
|
1238
|
+
KeccakP1600_Permute_RoundConstants0
|
|
1239
|
+
dcd 0x00000001, 0x80008088
|
|
1240
|
+
dcd 0x00000000, 0x80000088
|
|
1241
|
+
dcd 0x00000001, 0x00008000
|
|
1242
|
+
dcd 0x00000000, 0x80008082
|
|
1243
|
+
KeccakP1600_Permute_RoundConstants0Mod4
|
|
1244
|
+
dcd 0x000000FF ;terminator
|
|
1245
|
+
|
|
1246
|
+
;----------------------------------------------------------------------------
|
|
1247
|
+
;
|
|
1248
|
+
; void KeccakP1600_Permute( void *state, void * rc )
|
|
1249
|
+
;
|
|
1250
|
+
ALIGN
|
|
1251
|
+
KeccakP1600_Permute PROC
|
|
1252
|
+
push { r4 - r12, lr }
|
|
1253
|
+
sub sp, #mSize
|
|
1254
|
+
str r1, [sp, #mRC]
|
|
1255
|
+
KeccakP1600_Permute_RoundLoop
|
|
1256
|
+
KeccakRound0
|
|
1257
|
+
KeccakP1600_Permute_Round3Mod4
|
|
1258
|
+
KeccakRound1
|
|
1259
|
+
KeccakP1600_Permute_Round2Mod4
|
|
1260
|
+
KeccakRound2
|
|
1261
|
+
KeccakP1600_Permute_Round1Mod4
|
|
1262
|
+
KeccakRound3
|
|
1263
|
+
bne KeccakP1600_Permute_RoundLoop
|
|
1264
|
+
add sp, #mSize
|
|
1265
|
+
pop { r4 - r12, pc }
|
|
1266
|
+
ENDP
|
|
1267
|
+
|
|
1268
|
+
END
|