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,729 @@
|
|
|
1
|
+
@
|
|
2
|
+
@ The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
@ https://github.com/XKCP/XKCP
|
|
4
|
+
@
|
|
5
|
+
@ The Xoodoo permutation, designed by Joan Daemen, Seth Hoffert, Gilles Van Assche and Ronny Van Keer.
|
|
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
|
+
@ WARNING: These functions work only on little endian CPU with@ ARMv7m architecture (Cortex-M3, ...).
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
.thumb
|
|
21
|
+
.syntax unified
|
|
22
|
+
.text
|
|
23
|
+
|
|
24
|
+
@ ----------------------------------------------------------------------------
|
|
25
|
+
@
|
|
26
|
+
@ void Xoodoo_Initialize(void *state)
|
|
27
|
+
@
|
|
28
|
+
.align 4
|
|
29
|
+
.global Xoodoo_Initialize
|
|
30
|
+
.type Xoodoo_Initialize, %function;
|
|
31
|
+
Xoodoo_Initialize:
|
|
32
|
+
movs r1, #0
|
|
33
|
+
movs r2, #0
|
|
34
|
+
movs r3, #0
|
|
35
|
+
movs r12, #0
|
|
36
|
+
stmia r0!, { r1 - r3, r12 }
|
|
37
|
+
stmia r0!, { r1 - r3, r12 }
|
|
38
|
+
stmia r0!, { r1 - r3, r12 }
|
|
39
|
+
bx lr
|
|
40
|
+
.align 4
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@ ----------------------------------------------------------------------------
|
|
44
|
+
@
|
|
45
|
+
@ void Xoodoo_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
46
|
+
@
|
|
47
|
+
.global Xoodoo_AddBytes
|
|
48
|
+
.type Xoodoo_AddBytes, %function;
|
|
49
|
+
Xoodoo_AddBytes:
|
|
50
|
+
push {r4,lr}
|
|
51
|
+
adds r0, r0, r2 @ state += offset
|
|
52
|
+
subs r3, r3, #4 @ .if length >= 4
|
|
53
|
+
bcc Xoodoo_AddBytes_Bytes
|
|
54
|
+
Xoodoo_AddBytes_LanesLoop: @ then, perform on lanes
|
|
55
|
+
ldr r2, [r0]
|
|
56
|
+
ldr r4, [r1], #4
|
|
57
|
+
eors r2, r2, r4
|
|
58
|
+
str r2, [r0], #4
|
|
59
|
+
subs r3, r3, #4
|
|
60
|
+
bcs Xoodoo_AddBytes_LanesLoop
|
|
61
|
+
Xoodoo_AddBytes_Bytes:
|
|
62
|
+
adds r3, r3, #3
|
|
63
|
+
bcc Xoodoo_AddBytes_Exit
|
|
64
|
+
Xoodoo_AddBytes_BytesLoop:
|
|
65
|
+
ldrb r2, [r0]
|
|
66
|
+
ldrb r4, [r1], #1
|
|
67
|
+
eors r2, r2, r4
|
|
68
|
+
strb r2, [r0], #1
|
|
69
|
+
subs r3, r3, #1
|
|
70
|
+
bcs Xoodoo_AddBytes_BytesLoop
|
|
71
|
+
Xoodoo_AddBytes_Exit:
|
|
72
|
+
pop {r4,pc}
|
|
73
|
+
.align 4
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@ ----------------------------------------------------------------------------
|
|
77
|
+
@
|
|
78
|
+
@ void Xoodoo_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
79
|
+
@
|
|
80
|
+
.global Xoodoo_OverwriteBytes
|
|
81
|
+
.type Xoodoo_OverwriteBytes, %function;
|
|
82
|
+
Xoodoo_OverwriteBytes:
|
|
83
|
+
adds r0, r0, r2 @ state += offset
|
|
84
|
+
subs r3, r3, #4 @ .if length >= 4
|
|
85
|
+
bcc Xoodoo_OverwriteBytes_Bytes
|
|
86
|
+
Xoodoo_OverwriteBytes_LanesLoop: @ then, perform on words
|
|
87
|
+
ldr r2, [r1], #4
|
|
88
|
+
str r2, [r0], #4
|
|
89
|
+
subs r3, r3, #4
|
|
90
|
+
bcs Xoodoo_OverwriteBytes_LanesLoop
|
|
91
|
+
Xoodoo_OverwriteBytes_Bytes:
|
|
92
|
+
adds r3, r3, #3
|
|
93
|
+
bcc Xoodoo_OverwriteBytes_Exit
|
|
94
|
+
Xoodoo_OverwriteBytes_BytesLoop:
|
|
95
|
+
ldrb r2, [r1], #1
|
|
96
|
+
strb r2, [r0], #1
|
|
97
|
+
subs r3, r3, #1
|
|
98
|
+
bcs Xoodoo_OverwriteBytes_BytesLoop
|
|
99
|
+
Xoodoo_OverwriteBytes_Exit:
|
|
100
|
+
bx lr
|
|
101
|
+
.align 4
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@ ----------------------------------------------------------------------------
|
|
105
|
+
@
|
|
106
|
+
@ void Xoodoo_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
107
|
+
@
|
|
108
|
+
.global Xoodoo_OverwriteWithZeroes
|
|
109
|
+
.type Xoodoo_OverwriteWithZeroes, %function;
|
|
110
|
+
Xoodoo_OverwriteWithZeroes:
|
|
111
|
+
movs r3, #0
|
|
112
|
+
lsrs r2, r1, #2
|
|
113
|
+
beq Xoodoo_OverwriteWithZeroes_Bytes
|
|
114
|
+
Xoodoo_OverwriteWithZeroes_LoopLanes:
|
|
115
|
+
str r3, [r0], #4
|
|
116
|
+
subs r2, r2, #1
|
|
117
|
+
bne Xoodoo_OverwriteWithZeroes_LoopLanes
|
|
118
|
+
Xoodoo_OverwriteWithZeroes_Bytes:
|
|
119
|
+
ands r1, #3
|
|
120
|
+
beq Xoodoo_OverwriteWithZeroes_Exit
|
|
121
|
+
Xoodoo_OverwriteWithZeroes_LoopBytes:
|
|
122
|
+
strb r3, [r0], #1
|
|
123
|
+
subs r1, r1, #1
|
|
124
|
+
bne Xoodoo_OverwriteWithZeroes_LoopBytes
|
|
125
|
+
Xoodoo_OverwriteWithZeroes_Exit:
|
|
126
|
+
bx lr
|
|
127
|
+
.align 4
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@ ----------------------------------------------------------------------------
|
|
131
|
+
@
|
|
132
|
+
@ void Xoodoo_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
133
|
+
@
|
|
134
|
+
.global Xoodoo_ExtractBytes
|
|
135
|
+
.type Xoodoo_ExtractBytes, %function;
|
|
136
|
+
Xoodoo_ExtractBytes:
|
|
137
|
+
adds r0, r0, r2 @ state += offset
|
|
138
|
+
subs r3, r3, #4 @ .if length >= 4
|
|
139
|
+
bcc Xoodoo_ExtractBytes_Bytes
|
|
140
|
+
Xoodoo_ExtractBytes_LanesLoop: @ then, handle words
|
|
141
|
+
ldr r2, [r0], #4
|
|
142
|
+
str r2, [r1], #4
|
|
143
|
+
subs r3, r3, #4
|
|
144
|
+
bcs Xoodoo_ExtractBytes_LanesLoop
|
|
145
|
+
Xoodoo_ExtractBytes_Bytes:
|
|
146
|
+
adds r3, r3, #3
|
|
147
|
+
bcc Xoodoo_ExtractBytes_Exit
|
|
148
|
+
Xoodoo_ExtractBytes_BytesLoop:
|
|
149
|
+
ldrb r2, [r0], #1
|
|
150
|
+
strb r2, [r1], #1
|
|
151
|
+
subs r3, r3, #1
|
|
152
|
+
bcs Xoodoo_ExtractBytes_BytesLoop
|
|
153
|
+
Xoodoo_ExtractBytes_Exit:
|
|
154
|
+
bx lr
|
|
155
|
+
.align 4
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
@ ----------------------------------------------------------------------------
|
|
159
|
+
@
|
|
160
|
+
@ void Xoodoo_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
161
|
+
@
|
|
162
|
+
.global Xoodoo_ExtractAndAddBytes
|
|
163
|
+
.type Xoodoo_ExtractAndAddBytes, %function;
|
|
164
|
+
Xoodoo_ExtractAndAddBytes:
|
|
165
|
+
push {r4,r5}
|
|
166
|
+
adds r0, r0, r3 @ state += offset (offset register no longer needed, reuse for length)
|
|
167
|
+
ldr r3, [sp, #8] @ get length argument from stack
|
|
168
|
+
subs r3, r3, #4 @ .if length >= 4
|
|
169
|
+
bcc Xoodoo_ExtractAndAddBytes_Bytes
|
|
170
|
+
Xoodoo_ExtractAndAddBytes_LanesLoop: @ then, handle words
|
|
171
|
+
ldr r5, [r0], #4
|
|
172
|
+
ldr r4, [r1], #4
|
|
173
|
+
eors r5, r5, r4
|
|
174
|
+
str r5, [r2], #4
|
|
175
|
+
subs r3, r3, #4
|
|
176
|
+
bcs Xoodoo_ExtractAndAddBytes_LanesLoop
|
|
177
|
+
Xoodoo_ExtractAndAddBytes_Bytes:
|
|
178
|
+
adds r3, r3, #3
|
|
179
|
+
bcc Xoodoo_ExtractAndAddBytes_Exit
|
|
180
|
+
Xoodoo_ExtractAndAddBytes_BytesLoop:
|
|
181
|
+
ldrb r5, [r0], #1
|
|
182
|
+
ldrb r4, [r1], #1
|
|
183
|
+
eors r5, r5, r4
|
|
184
|
+
strb r5, [r2], #1
|
|
185
|
+
subs r3, r3, #1
|
|
186
|
+
bcs Xoodoo_ExtractAndAddBytes_BytesLoop
|
|
187
|
+
Xoodoo_ExtractAndAddBytes_Exit:
|
|
188
|
+
pop {r4,r5}
|
|
189
|
+
bx lr
|
|
190
|
+
.align 4
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@ ----------------------------------------------------------------------------
|
|
194
|
+
|
|
195
|
+
.equ _r0 , 5
|
|
196
|
+
.equ _r1 , 14
|
|
197
|
+
.equ _t3 , 1
|
|
198
|
+
|
|
199
|
+
.equ _w1 , 11
|
|
200
|
+
|
|
201
|
+
.equ _e0 , 2
|
|
202
|
+
.equ _e1 , 8
|
|
203
|
+
|
|
204
|
+
.equ _rc12 , 0x00000058
|
|
205
|
+
.equ _rc11 , 0x00000038
|
|
206
|
+
.equ _rc10 , 0x000003C0
|
|
207
|
+
.equ _rc9 , 0x000000D0
|
|
208
|
+
.equ _rc8 , 0x00000120
|
|
209
|
+
.equ _rc7 , 0x00000014
|
|
210
|
+
.equ _rc6 , 0x00000060
|
|
211
|
+
.equ _rc5 , 0x0000002C
|
|
212
|
+
.equ _rc4 , 0x00000380
|
|
213
|
+
.equ _rc3 , 0x000000F0
|
|
214
|
+
.equ _rc2 , 0x000001A0
|
|
215
|
+
.equ _rc1 , 0x00000012
|
|
216
|
+
|
|
217
|
+
.equ _rc6x1, 0x00000003
|
|
218
|
+
.equ _rc5x2, 0x0b000000
|
|
219
|
+
.equ _rc4x3, 0x07000000
|
|
220
|
+
.equ _rc3x4, 0x000f0000
|
|
221
|
+
.equ _rc2x5, 0x0000d000
|
|
222
|
+
.equ _rc1x6, 0x00000048
|
|
223
|
+
|
|
224
|
+
.equ _rc12x1, 0xc0000002
|
|
225
|
+
.equ _rc11x2, 0x0e000000
|
|
226
|
+
.equ _rc10x3, 0x07800000
|
|
227
|
+
.equ _rc9x4 , 0x000d0000
|
|
228
|
+
.equ _rc8x5 , 0x00009000
|
|
229
|
+
.equ _rc7x6 , 0x00000050
|
|
230
|
+
.equ _rc6x7 , 0x0000000c
|
|
231
|
+
.equ _rc5x8 , 0x2c000000
|
|
232
|
+
.equ _rc4x9 , 0x1c000000
|
|
233
|
+
.equ _rc3x10, 0x003c0000
|
|
234
|
+
.equ _rc2x11, 0x00034000
|
|
235
|
+
.equ _rc1x12, 0x00000120
|
|
236
|
+
|
|
237
|
+
@ ----------------------------------------------------------------------------
|
|
238
|
+
|
|
239
|
+
.macro mXor3 ro, a0, a1, a2, rho_e1, rho_e2
|
|
240
|
+
.if ((\rho_e1)%32) == 0
|
|
241
|
+
eors \ro, \a0, \a1
|
|
242
|
+
.else
|
|
243
|
+
eor \ro, \a0, \a1, ROR #(32-(\rho_e1))%32
|
|
244
|
+
.endif
|
|
245
|
+
.if ((\rho_e2)%32) == 0
|
|
246
|
+
eors \ro, \ro, \a2
|
|
247
|
+
.else
|
|
248
|
+
eor \ro, \ro, \a2, ROR #(32-(\rho_e2))%32
|
|
249
|
+
.endif
|
|
250
|
+
.endm
|
|
251
|
+
|
|
252
|
+
.macro mRliXor ro, ri, rot
|
|
253
|
+
.if ((\rot)%32) == 0
|
|
254
|
+
eors \ro, \ro, \ri
|
|
255
|
+
.else
|
|
256
|
+
eor \ro, \ro, \ri, ROR #(32-(\rot))%32
|
|
257
|
+
.endif
|
|
258
|
+
.endm
|
|
259
|
+
|
|
260
|
+
.macro mRloXor ro, ri, rot
|
|
261
|
+
.if ((\rot)%32) == 0
|
|
262
|
+
eors \ro, \ro, \ri
|
|
263
|
+
.else
|
|
264
|
+
eor \ro, \ri, \ro, ROR #(32-(\rot))%32
|
|
265
|
+
.endif
|
|
266
|
+
.endm
|
|
267
|
+
|
|
268
|
+
.macro mChi3 a0,a1,a2,r0,r1
|
|
269
|
+
bic \r0, \a2, \a1, ROR #_w1
|
|
270
|
+
eors \a0, \a0, \r0, ROR #32-_w1
|
|
271
|
+
bic \r1, \a0, \a2, ROR #32-_w1
|
|
272
|
+
eors \a1, \a1, \r1
|
|
273
|
+
bic \r1, \a1, \a0
|
|
274
|
+
eors \a2, \a2, \r1, ROR #_w1
|
|
275
|
+
.endm
|
|
276
|
+
|
|
277
|
+
.macro mRound r6i, r7i, r8i, r9i, r6w, r7w, r8w, r9w, r10i, r11i, r12i, lri, rho_e1, rho_we2, rc
|
|
278
|
+
|
|
279
|
+
@ Theta: Column Parity Mixer (with late Rho-west, Rho-east bit rotations)
|
|
280
|
+
mXor3 r0, r5, \r9i, \lri, \rho_e1, \rho_we2
|
|
281
|
+
mXor3 r1, r2, \r6i, \r10i, \rho_e1, \rho_we2
|
|
282
|
+
mRliXor r0, r0, _r1-_r0
|
|
283
|
+
mRloXor r2, r0, 32-_r0
|
|
284
|
+
mRloXor \r6i, r0, \rho_e1-_r0
|
|
285
|
+
mRloXor \r10i, r0, \rho_we2-_r0
|
|
286
|
+
|
|
287
|
+
mXor3 r0, r3, \r7i, \r11i, \rho_e1, \rho_we2
|
|
288
|
+
mRliXor r1, r1, _r1-_r0
|
|
289
|
+
mRloXor r3, r1, 32-_r0
|
|
290
|
+
mRloXor \r7i, r1, \rho_e1-_r0
|
|
291
|
+
mRloXor \r11i, r1, \rho_we2-_r0
|
|
292
|
+
|
|
293
|
+
mXor3 r1, r4, \r8i, \r12i, \rho_e1, \rho_we2
|
|
294
|
+
mRliXor r0, r0, _r1-_r0
|
|
295
|
+
mRloXor r4, r0, 32-_r0
|
|
296
|
+
mRloXor \r8i, r0, \rho_e1-_r0
|
|
297
|
+
mRloXor \r12i, r0, \rho_we2-_r0
|
|
298
|
+
|
|
299
|
+
mRliXor r1, r1, _r1-_r0
|
|
300
|
+
mRloXor r5, r1, 32-_r0
|
|
301
|
+
mRloXor \r9i, r1, \rho_e1-_r0
|
|
302
|
+
mRloXor \lri, r1, \rho_we2-_r0
|
|
303
|
+
@ After Theta the whole state is rotated -r0
|
|
304
|
+
@ from here we must use a1.w instead of a1.i
|
|
305
|
+
|
|
306
|
+
@ Iota: round constant
|
|
307
|
+
.if \rc == 0xc0000002
|
|
308
|
+
eor r2, r2, #0x00000002
|
|
309
|
+
eor r2, r2, #0xc0000000
|
|
310
|
+
.else
|
|
311
|
+
eor r2, r2, #\rc
|
|
312
|
+
.endif
|
|
313
|
+
|
|
314
|
+
@ Chi: non linear step, on colums
|
|
315
|
+
mChi3 r2, \r6w, \r10i, r0, r1
|
|
316
|
+
mChi3 r3, \r7w, \r11i, r0, r1
|
|
317
|
+
mChi3 r4, \r8w, \r12i, r0, r1
|
|
318
|
+
mChi3 r5, \r9w, \lri, r0, r1
|
|
319
|
+
.endm
|
|
320
|
+
|
|
321
|
+
@ ----------------------------------------------------------------------------
|
|
322
|
+
@
|
|
323
|
+
@ void Xoodoo_Permute_6rounds( void *state )
|
|
324
|
+
@
|
|
325
|
+
.global Xoodoo_Permute_6rounds
|
|
326
|
+
.type Xoodoo_Permute_6rounds, %function;
|
|
327
|
+
Xoodoo_Permute_6rounds:
|
|
328
|
+
push {r0,r4-r11,lr}
|
|
329
|
+
ldmia r0!, {r2-r5}
|
|
330
|
+
ldmia r0!, {r8-r9}
|
|
331
|
+
ldmia r0!, {r6-r7}
|
|
332
|
+
ldmia r0, {r10-r12,lr}
|
|
333
|
+
mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 32, 32, _rc6x1
|
|
334
|
+
mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc5x2
|
|
335
|
+
mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc4x3
|
|
336
|
+
mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc3x4
|
|
337
|
+
mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc2x5
|
|
338
|
+
mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc1x6
|
|
339
|
+
pop {r0,r1}
|
|
340
|
+
ror r2, r2, #32-(6*_r0)%32
|
|
341
|
+
ror r3, r3, #32-(6*_r0)%32
|
|
342
|
+
ror r4, r4, #32-(6*_r0)%32
|
|
343
|
+
ror r5, r5, #32-(6*_r0)%32
|
|
344
|
+
ror r6, r6, #32-(6*_r0+1)%32
|
|
345
|
+
ror r7, r7, #32-(6*_r0+1)%32
|
|
346
|
+
ror r8, r8, #32-(6*_r0+1)%32
|
|
347
|
+
ror r9, r9, #32-(6*_r0+1)%32
|
|
348
|
+
ror r10, r10, #32-(6*_r0+_e1+_w1)%32
|
|
349
|
+
ror r11, r11, #32-(6*_r0+_e1+_w1)%32
|
|
350
|
+
ror r12, r12, #32-(6*_r0+_e1+_w1)%32
|
|
351
|
+
ror lr, lr, #32-(6*_r0+_e1+_w1)%32
|
|
352
|
+
stmia r0, {r2-r12,lr}
|
|
353
|
+
mov r4, r1
|
|
354
|
+
pop {r5-r11,pc}
|
|
355
|
+
.align 4
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
@ ----------------------------------------------------------------------------
|
|
359
|
+
@
|
|
360
|
+
@ void Xoodoo_Permute_12rounds( void *state )
|
|
361
|
+
@
|
|
362
|
+
.global Xoodoo_Permute_12rounds
|
|
363
|
+
.type Xoodoo_Permute_12rounds, %function;
|
|
364
|
+
Xoodoo_Permute_12rounds:
|
|
365
|
+
push {r0,r4-r11,lr}
|
|
366
|
+
ldmia r0, {r2-r12,lr}
|
|
367
|
+
mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 32, 32, _rc12x1
|
|
368
|
+
mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc11x2
|
|
369
|
+
mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc10x3
|
|
370
|
+
mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc9x4
|
|
371
|
+
mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc8x5
|
|
372
|
+
mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc7x6
|
|
373
|
+
mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc6x7
|
|
374
|
+
mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc5x8
|
|
375
|
+
mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc4x9
|
|
376
|
+
mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc3x10
|
|
377
|
+
mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc2x11
|
|
378
|
+
mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc1x12
|
|
379
|
+
ror r2, r2, #32-(12*_r0)%32
|
|
380
|
+
ror r3, r3, #32-(12*_r0)%32
|
|
381
|
+
ror r4, r4, #32-(12*_r0)%32
|
|
382
|
+
ror r5, r5, #32-(12*_r0)%32
|
|
383
|
+
ror r6, r6, #32-(12*_r0+1)%32
|
|
384
|
+
ror r7, r7, #32-(12*_r0+1)%32
|
|
385
|
+
ror r8, r8, #32-(12*_r0+1)%32
|
|
386
|
+
ror r9, r9, #32-(12*_r0+1)%32
|
|
387
|
+
ror r10, r10, #32-(12*_r0+_e1+_w1)%32
|
|
388
|
+
ror r11, r11, #32-(12*_r0+_e1+_w1)%32
|
|
389
|
+
ror r12, r12, #32-(12*_r0+_e1+_w1)%32
|
|
390
|
+
ror lr, lr, #32-(12*_r0+_e1+_w1)%32
|
|
391
|
+
pop {r0,r1}
|
|
392
|
+
stmia r0, {r2-r12,lr}
|
|
393
|
+
mov r4, r1
|
|
394
|
+
pop {r5-r11,pc}
|
|
395
|
+
.align 4
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
.equ Xoofff_BlockSize , 3*4*4
|
|
399
|
+
|
|
400
|
+
@ ----------------------------------------------------------------------------
|
|
401
|
+
@
|
|
402
|
+
@ void Xoofff_AddIs(BitSequence *output, const BitSequence *input, BitLength bitLen)
|
|
403
|
+
.global Xoofff_AddIs
|
|
404
|
+
.type Xoofff_AddIs, %function;
|
|
405
|
+
Xoofff_AddIs:
|
|
406
|
+
push {r4-r10,lr}
|
|
407
|
+
|
|
408
|
+
subs r2, r2, #Xoofff_BlockSize*8
|
|
409
|
+
bcc Xoofff_AddIs_LessThanBlock
|
|
410
|
+
Xoofff_AddIs_BlockLoop:
|
|
411
|
+
ldr r3, [r0, #0]
|
|
412
|
+
ldr r4, [r0, #4]
|
|
413
|
+
ldr r5, [r0, #8]
|
|
414
|
+
ldr r6, [r0, #12]
|
|
415
|
+
ldr r7, [r1], #4
|
|
416
|
+
ldr r8, [r1], #4
|
|
417
|
+
ldr r9, [r1], #4
|
|
418
|
+
ldr r10, [r1], #4
|
|
419
|
+
eor r3, r3, r7
|
|
420
|
+
eor r4, r4, r8
|
|
421
|
+
eor r5, r5, r9
|
|
422
|
+
eor r6, r6, r10
|
|
423
|
+
str r3, [r0], #4
|
|
424
|
+
str r4, [r0], #4
|
|
425
|
+
str r5, [r0], #4
|
|
426
|
+
str r6, [r0], #4
|
|
427
|
+
|
|
428
|
+
ldr r3, [r0, #0]
|
|
429
|
+
ldr r4, [r0, #4]
|
|
430
|
+
ldr r5, [r0, #8]
|
|
431
|
+
ldr r6, [r0, #12]
|
|
432
|
+
ldr r7, [r1], #4
|
|
433
|
+
ldr r8, [r1], #4
|
|
434
|
+
ldr r9, [r1], #4
|
|
435
|
+
ldr r10, [r1], #4
|
|
436
|
+
eor r3, r3, r7
|
|
437
|
+
eor r4, r4, r8
|
|
438
|
+
eor r5, r5, r9
|
|
439
|
+
eor r6, r6, r10
|
|
440
|
+
str r3, [r0], #4
|
|
441
|
+
str r4, [r0], #4
|
|
442
|
+
str r5, [r0], #4
|
|
443
|
+
str r6, [r0], #4
|
|
444
|
+
|
|
445
|
+
ldr r3, [r0, #0]
|
|
446
|
+
ldr r4, [r0, #4]
|
|
447
|
+
ldr r5, [r0, #8]
|
|
448
|
+
ldr r6, [r0, #12]
|
|
449
|
+
ldr r7, [r1], #4
|
|
450
|
+
ldr r8, [r1], #4
|
|
451
|
+
ldr r9, [r1], #4
|
|
452
|
+
ldr r10, [r1], #4
|
|
453
|
+
eor r3, r3, r7
|
|
454
|
+
eor r4, r4, r8
|
|
455
|
+
eor r5, r5, r9
|
|
456
|
+
eor r6, r6, r10
|
|
457
|
+
str r3, [r0], #4
|
|
458
|
+
str r4, [r0], #4
|
|
459
|
+
str r5, [r0], #4
|
|
460
|
+
str r6, [r0], #4
|
|
461
|
+
|
|
462
|
+
subs r2, r2, #Xoofff_BlockSize*8
|
|
463
|
+
bcs Xoofff_AddIs_BlockLoop
|
|
464
|
+
Xoofff_AddIs_LessThanBlock:
|
|
465
|
+
adds r2, r2, #Xoofff_BlockSize*8
|
|
466
|
+
beq Xoofff_AddIs_Return
|
|
467
|
+
subs r2, r2, #16*8
|
|
468
|
+
bcc Xoofff_AddIs_LessThan16
|
|
469
|
+
Xoofff_AddIs_16Loop:
|
|
470
|
+
ldr r3, [r0, #0]
|
|
471
|
+
ldr r4, [r0, #4]
|
|
472
|
+
ldr r5, [r0, #8]
|
|
473
|
+
ldr r6, [r0, #12]
|
|
474
|
+
ldr r7, [r1], #4
|
|
475
|
+
ldr r8, [r1], #4
|
|
476
|
+
ldr r9, [r1], #4
|
|
477
|
+
ldr r10, [r1], #4
|
|
478
|
+
eor r3, r3, r7
|
|
479
|
+
eor r4, r4, r8
|
|
480
|
+
eor r5, r5, r9
|
|
481
|
+
eor r6, r6, r10
|
|
482
|
+
str r3, [r0], #4
|
|
483
|
+
str r4, [r0], #4
|
|
484
|
+
str r5, [r0], #4
|
|
485
|
+
str r6, [r0], #4
|
|
486
|
+
subs r2, r2, #16*8
|
|
487
|
+
bcs Xoofff_AddIs_16Loop
|
|
488
|
+
Xoofff_AddIs_LessThan16:
|
|
489
|
+
adds r2, r2, #16*8
|
|
490
|
+
beq Xoofff_AddIs_Return
|
|
491
|
+
subs r2, r2, #4*8
|
|
492
|
+
bcc Xoofff_AddIs_LessThan4
|
|
493
|
+
Xoofff_AddIs_4Loop:
|
|
494
|
+
ldr r3, [r0]
|
|
495
|
+
ldr r7, [r1], #4
|
|
496
|
+
eors r3, r3, r7
|
|
497
|
+
str r3, [r0], #4
|
|
498
|
+
subs r2, r2, #4*8
|
|
499
|
+
bcs Xoofff_AddIs_4Loop
|
|
500
|
+
Xoofff_AddIs_LessThan4:
|
|
501
|
+
adds r2, r2, #4*8
|
|
502
|
+
beq Xoofff_AddIs_Return
|
|
503
|
+
subs r2, r2, #8
|
|
504
|
+
bcc Xoofff_AddIs_LessThan1
|
|
505
|
+
Xoofff_AddIs_1Loop:
|
|
506
|
+
ldrb r3, [r0]
|
|
507
|
+
ldrb r7, [r1], #1
|
|
508
|
+
eors r3, r3, r7
|
|
509
|
+
strb r3, [r0], #1
|
|
510
|
+
subs r2, r2, #8
|
|
511
|
+
bcs Xoofff_AddIs_1Loop
|
|
512
|
+
Xoofff_AddIs_LessThan1:
|
|
513
|
+
adds r2, r2, #8
|
|
514
|
+
beq Xoofff_AddIs_Return
|
|
515
|
+
ldrb r3, [r0]
|
|
516
|
+
ldrb r7, [r1]
|
|
517
|
+
movs r1, #1
|
|
518
|
+
eors r3, r3, r7
|
|
519
|
+
lsls r1, r1, r2
|
|
520
|
+
subs r1, r1, #1
|
|
521
|
+
ands r3, r3, r1
|
|
522
|
+
strb r3, [r0]
|
|
523
|
+
Xoofff_AddIs_Return:
|
|
524
|
+
pop {r4-r10,pc}
|
|
525
|
+
.align 4
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
@ ----------------------------------------------------------------------------
|
|
529
|
+
@
|
|
530
|
+
@ size_t Xoofff_CompressFastLoop(unsigned char *kRoll, unsigned char *xAccu, const unsigned char *input, size_t length)
|
|
531
|
+
@
|
|
532
|
+
.equ Xoofff_Compress_kRoll , 0
|
|
533
|
+
.equ Xoofff_Compress_input , 4
|
|
534
|
+
.equ Xoofff_Compress_xAccu , 8
|
|
535
|
+
.equ Xoofff_Compress_iInput , 12
|
|
536
|
+
.equ Xoofff_Compress_length , 16
|
|
537
|
+
|
|
538
|
+
.global Xoofff_CompressFastLoop
|
|
539
|
+
.type Xoofff_CompressFastLoop, %function;
|
|
540
|
+
Xoofff_CompressFastLoop:
|
|
541
|
+
subs r3, #Xoofff_BlockSize @ length must be greater than block size
|
|
542
|
+
push {r1-r12,lr}
|
|
543
|
+
push {r0,r2}
|
|
544
|
+
ldmia r0, {r2-r12,lr} @ get initial kRoll
|
|
545
|
+
Xoofff_CompressFastLoop_Loop:
|
|
546
|
+
ldr r0, [sp, #Xoofff_Compress_input] @ add input
|
|
547
|
+
ldr r1, [r0], #4
|
|
548
|
+
eors r2, r2, r1
|
|
549
|
+
ldr r1, [r0], #4
|
|
550
|
+
eors r3, r3, r1
|
|
551
|
+
ldr r1, [r0], #4
|
|
552
|
+
eors r4, r4, r1
|
|
553
|
+
ldr r1, [r0], #4
|
|
554
|
+
eors r5, r5, r1
|
|
555
|
+
|
|
556
|
+
ldr r1, [r0], #4
|
|
557
|
+
eors r6, r6, r1
|
|
558
|
+
ldr r1, [r0], #4
|
|
559
|
+
eors r7, r7, r1
|
|
560
|
+
ldr r1, [r0], #4
|
|
561
|
+
eors r8, r8, r1
|
|
562
|
+
ldr r1, [r0], #4
|
|
563
|
+
eors r9, r9, r1
|
|
564
|
+
|
|
565
|
+
ldr r1, [r0], #4
|
|
566
|
+
eors r10, r10, r1
|
|
567
|
+
ldr r1, [r0], #4
|
|
568
|
+
eors r11, r11, r1
|
|
569
|
+
ldr r1, [r0], #4
|
|
570
|
+
eors r12, r12, r1
|
|
571
|
+
ldr r1, [r0], #4
|
|
572
|
+
eors lr, lr, r1
|
|
573
|
+
str r0, [sp, #Xoofff_Compress_input]
|
|
574
|
+
|
|
575
|
+
@ permutation
|
|
576
|
+
mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 32, 32, _rc6x1
|
|
577
|
+
mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc5x2
|
|
578
|
+
mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc4x3
|
|
579
|
+
mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc3x4
|
|
580
|
+
mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc2x5
|
|
581
|
+
mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc1x6
|
|
582
|
+
|
|
583
|
+
@ Extract and add into xAccu
|
|
584
|
+
ldr r0, [sp, #Xoofff_Compress_xAccu]
|
|
585
|
+
ldr r1, [r0]
|
|
586
|
+
mRloXor r2, r1, (6*_r0)%32
|
|
587
|
+
ldr r1, [r0, #4]
|
|
588
|
+
|
|
589
|
+
str r2, [r0], #4
|
|
590
|
+
mRloXor r3, r1, (6*_r0)%32
|
|
591
|
+
ldr r1, [r0, #4]
|
|
592
|
+
|
|
593
|
+
str r3, [r0], #4
|
|
594
|
+
mRloXor r4, r1, (6*_r0)%32
|
|
595
|
+
ldr r1, [r0, #4]
|
|
596
|
+
|
|
597
|
+
str r4, [r0], #4
|
|
598
|
+
mRloXor r5, r1, (6*_r0)%32
|
|
599
|
+
str r5, [r0], #4
|
|
600
|
+
|
|
601
|
+
ldm r0, {r2-r5} @ note that r6-r8 and r7-r9 are swapped
|
|
602
|
+
mRliXor r2, r8, (6*_r0+1)%32
|
|
603
|
+
mRliXor r3, r9, (6*_r0+1)%32
|
|
604
|
+
mRliXor r4, r6, (6*_r0+1)%32
|
|
605
|
+
mRliXor r5, r7, (6*_r0+1)%32
|
|
606
|
+
stm r0!, {r2-r5}
|
|
607
|
+
|
|
608
|
+
ldm r0, {r2-r5}
|
|
609
|
+
mRliXor r2, r10, (6*_r0+_e1+_w1)%32
|
|
610
|
+
mRliXor r3, r11, (6*_r0+_e1+_w1)%32
|
|
611
|
+
mRliXor r4, r12, (6*_r0+_e1+_w1)%32
|
|
612
|
+
mRliXor r5, lr, (6*_r0+_e1+_w1)%32
|
|
613
|
+
stm r0!, {r2-r5}
|
|
614
|
+
|
|
615
|
+
@roll kRoll
|
|
616
|
+
ldr r0, [sp, #Xoofff_Compress_kRoll]
|
|
617
|
+
ldr lr, [r0], #4
|
|
618
|
+
ldmia r0!, {r10-r12}
|
|
619
|
+
ldmia r0!, {r2-r9}
|
|
620
|
+
eors lr, lr, lr, LSL #13
|
|
621
|
+
eors lr, lr, r2, ROR #32-3
|
|
622
|
+
sub r0, #Xoofff_BlockSize
|
|
623
|
+
stmia r0, {r2-r12,lr}
|
|
624
|
+
@ loop management
|
|
625
|
+
ldr r0, [sp, #Xoofff_Compress_length]
|
|
626
|
+
subs r0, #Xoofff_BlockSize
|
|
627
|
+
str r0, [sp, #Xoofff_Compress_length]
|
|
628
|
+
bcs Xoofff_CompressFastLoop_Loop
|
|
629
|
+
@ return number of bytes processed
|
|
630
|
+
ldr r0, [sp, #Xoofff_Compress_input]
|
|
631
|
+
ldr r1, [sp, #Xoofff_Compress_iInput]
|
|
632
|
+
sub r0, r0, r1
|
|
633
|
+
pop {r1,r2}
|
|
634
|
+
pop {r1-r12,pc}
|
|
635
|
+
.align 4
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
@ ----------------------------------------------------------------------------
|
|
639
|
+
@
|
|
640
|
+
@ size_t Xoofff_ExpandFastLoop(unsigned char *yAccu, const unsigned char *kRoll, unsigned char *output, size_t length)
|
|
641
|
+
@
|
|
642
|
+
.equ Xoofff_Expand_yAccu , 0
|
|
643
|
+
.equ Xoofff_Expand_output , 4
|
|
644
|
+
.equ Xoofff_Expand_kRoll , 8
|
|
645
|
+
.equ Xoofff_Expand_iOutput , 12
|
|
646
|
+
.equ Xoofff_Expand_length , 16
|
|
647
|
+
|
|
648
|
+
.global Xoofff_ExpandFastLoop
|
|
649
|
+
.type Xoofff_ExpandFastLoop, %function;
|
|
650
|
+
Xoofff_ExpandFastLoop:
|
|
651
|
+
subs r3, #Xoofff_BlockSize @ length must be greater than block size
|
|
652
|
+
push {r1-r12,lr}
|
|
653
|
+
push {r0,r2}
|
|
654
|
+
ldmia r0, {r2-r12,lr} @ get initial yAccu
|
|
655
|
+
Xoofff_ExpandFastLoop_Loop:
|
|
656
|
+
@ permutation
|
|
657
|
+
mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 32, 32, _rc6x1
|
|
658
|
+
mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc5x2
|
|
659
|
+
mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc4x3
|
|
660
|
+
mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc3x4
|
|
661
|
+
mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc2x5
|
|
662
|
+
mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc1x6
|
|
663
|
+
|
|
664
|
+
@ Add k and extract
|
|
665
|
+
ldr r0, [sp, #Xoofff_Expand_kRoll]
|
|
666
|
+
ldr r1, [r0], #4
|
|
667
|
+
mRloXor r2, r1, (6*_r0)%32
|
|
668
|
+
|
|
669
|
+
ldr r1, [sp, #Xoofff_Expand_output]
|
|
670
|
+
str r2, [r1], #4
|
|
671
|
+
|
|
672
|
+
ldr r2, [r0], #4
|
|
673
|
+
mRloXor r3, r2, (6*_r0)%32
|
|
674
|
+
ldr r2, [r0], #4
|
|
675
|
+
|
|
676
|
+
str r3, [r1], #4
|
|
677
|
+
mRloXor r4, r2, (6*_r0)%32
|
|
678
|
+
ldr r2, [r0], #4
|
|
679
|
+
|
|
680
|
+
str r4, [r1], #4
|
|
681
|
+
mRloXor r5, r2, (6*_r0)%32
|
|
682
|
+
str r5, [r1], #4
|
|
683
|
+
|
|
684
|
+
ldm r0!, {r2-r5} @ Note that r6-r8 and r7-r9 are swapped
|
|
685
|
+
mRliXor r2, r8, (6*_r0+1)%32
|
|
686
|
+
str r2, [r1], #4
|
|
687
|
+
mRliXor r3, r9, (6*_r0+1)%32
|
|
688
|
+
str r3, [r1], #4
|
|
689
|
+
mRliXor r4, r6, (6*_r0+1)%32
|
|
690
|
+
str r4, [r1], #4
|
|
691
|
+
mRliXor r5, r7, (6*_r0+1)%32
|
|
692
|
+
str r5, [r1], #4
|
|
693
|
+
|
|
694
|
+
ldm r0!, {r2-r5}
|
|
695
|
+
mRliXor r2, r10, (6*_r0+_e1+_w1)%32
|
|
696
|
+
str r2, [r1], #4
|
|
697
|
+
mRliXor r3, r11, (6*_r0+_e1+_w1)%32
|
|
698
|
+
str r3, [r1], #4
|
|
699
|
+
mRliXor r4, r12, (6*_r0+_e1+_w1)%32
|
|
700
|
+
str r4, [r1], #4
|
|
701
|
+
mRliXor r5, lr, (6*_r0+_e1+_w1)%32
|
|
702
|
+
str r5, [r1], #4
|
|
703
|
+
|
|
704
|
+
@ roll-e yAccu
|
|
705
|
+
ldr r0, [sp, #Xoofff_Expand_yAccu]
|
|
706
|
+
str r1, [sp, #Xoofff_Expand_output]
|
|
707
|
+
ldr lr, [r0], #4
|
|
708
|
+
ldmia r0!, {r10-r12}
|
|
709
|
+
ldmia r0!, {r2-r9}
|
|
710
|
+
and r1, r6, r2
|
|
711
|
+
eor lr, r1, lr, ROR #32-5
|
|
712
|
+
eor lr, lr, r2, ROR #32-13
|
|
713
|
+
eor lr, lr, #7
|
|
714
|
+
sub r0, #Xoofff_BlockSize
|
|
715
|
+
stmia r0, {r2-r12,lr}
|
|
716
|
+
@ loop management
|
|
717
|
+
ldr r0, [sp, #Xoofff_Expand_length]
|
|
718
|
+
subs r0, #Xoofff_BlockSize
|
|
719
|
+
str r0, [sp, #Xoofff_Expand_length]
|
|
720
|
+
bcs Xoofff_ExpandFastLoop_Loop
|
|
721
|
+
@ return number of bytes processed
|
|
722
|
+
ldr r0, [sp, #Xoofff_Expand_output]
|
|
723
|
+
ldr r1, [sp, #Xoofff_Expand_iOutput]
|
|
724
|
+
sub r0, r0, r1
|
|
725
|
+
pop {r1,r2}
|
|
726
|
+
pop {r1-r12,pc}
|
|
727
|
+
.align 4
|
|
728
|
+
|
|
729
|
+
|