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,1086 @@
|
|
|
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 ARMv6m architecture (Cortex-M0, ...).
|
|
18
|
+
|
|
19
|
+
PRESERVE8
|
|
20
|
+
THUMB
|
|
21
|
+
AREA |.text|, CODE, READONLY
|
|
22
|
+
|
|
23
|
+
; ----------------------------------------------------------------------------
|
|
24
|
+
;
|
|
25
|
+
; void Xoodoo_Initialize(void *state)
|
|
26
|
+
;
|
|
27
|
+
align 4
|
|
28
|
+
EXPORT Xoodoo_Initialize
|
|
29
|
+
Xoodoo_Initialize PROC
|
|
30
|
+
movs r1, #0
|
|
31
|
+
movs r2, #0
|
|
32
|
+
movs r3, #0
|
|
33
|
+
stmia r0!, { r1 - r3 }
|
|
34
|
+
stmia r0!, { r1 - r3 }
|
|
35
|
+
stmia r0!, { r1 - r3 }
|
|
36
|
+
stmia r0!, { r1 - r3 }
|
|
37
|
+
bx lr
|
|
38
|
+
align 4
|
|
39
|
+
ENDP
|
|
40
|
+
|
|
41
|
+
; ----------------------------------------------------------------------------
|
|
42
|
+
;
|
|
43
|
+
; void Xoodoo_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
44
|
+
;
|
|
45
|
+
EXPORT Xoodoo_AddBytes
|
|
46
|
+
Xoodoo_AddBytes PROC
|
|
47
|
+
push {r4,lr}
|
|
48
|
+
adds r0, r0, r2 ; state += offset
|
|
49
|
+
subs r3, r3, #4 ; if length >= 4
|
|
50
|
+
bcc Xoodoo_AddBytes_Bytes
|
|
51
|
+
movs r2, r0 ; and data pointer and offset both 32-bit aligned
|
|
52
|
+
orrs r2, r2, r1
|
|
53
|
+
lsls r2, #30
|
|
54
|
+
bne Xoodoo_AddBytes_Bytes
|
|
55
|
+
Xoodoo_AddBytes_LanesLoop ; then, perform on words
|
|
56
|
+
ldr r2, [r0]
|
|
57
|
+
ldmia r1!, {r4}
|
|
58
|
+
eors r2, r2, r4
|
|
59
|
+
stmia r0!, {r2}
|
|
60
|
+
subs r3, r3, #4
|
|
61
|
+
bcs Xoodoo_AddBytes_LanesLoop
|
|
62
|
+
Xoodoo_AddBytes_Bytes
|
|
63
|
+
adds r3, r3, #4
|
|
64
|
+
beq Xoodoo_AddBytes_Exit
|
|
65
|
+
subs r3, r3, #1
|
|
66
|
+
Xoodoo_AddBytes_BytesLoop
|
|
67
|
+
ldrb r2, [r0, r3]
|
|
68
|
+
ldrb r4, [r1, r3]
|
|
69
|
+
eors r2, r2, r4
|
|
70
|
+
strb r2, [r0, r3]
|
|
71
|
+
subs r3, r3, #1
|
|
72
|
+
bcs Xoodoo_AddBytes_BytesLoop
|
|
73
|
+
Xoodoo_AddBytes_Exit
|
|
74
|
+
pop {r4,pc}
|
|
75
|
+
align 4
|
|
76
|
+
ENDP
|
|
77
|
+
|
|
78
|
+
; ----------------------------------------------------------------------------
|
|
79
|
+
;
|
|
80
|
+
; void Xoodoo_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
81
|
+
;
|
|
82
|
+
EXPORT Xoodoo_OverwriteBytes
|
|
83
|
+
Xoodoo_OverwriteBytes PROC
|
|
84
|
+
adds r0, r0, r2 ; state += offset
|
|
85
|
+
subs r3, r3, #4 ; if length >= 4
|
|
86
|
+
bcc Xoodoo_OverwriteBytes_Bytes
|
|
87
|
+
movs r2, r0 ; and data pointer and offset both 32-bit aligned
|
|
88
|
+
orrs r2, r2, r1
|
|
89
|
+
lsls r2, #30
|
|
90
|
+
bne Xoodoo_OverwriteBytes_Bytes
|
|
91
|
+
Xoodoo_OverwriteBytes_LanesLoop ; then, perform on words
|
|
92
|
+
ldmia r1!, {r2}
|
|
93
|
+
stmia r0!, {r2}
|
|
94
|
+
subs r3, r3, #4
|
|
95
|
+
bcs Xoodoo_OverwriteBytes_LanesLoop
|
|
96
|
+
Xoodoo_OverwriteBytes_Bytes
|
|
97
|
+
adds r3, r3, #4
|
|
98
|
+
beq Xoodoo_OverwriteBytes_Exit
|
|
99
|
+
subs r3, r3, #1
|
|
100
|
+
Xoodoo_OverwriteBytes_BytesLoop
|
|
101
|
+
ldrb r2, [r1, r3]
|
|
102
|
+
strb r2, [r0, r3]
|
|
103
|
+
subs r3, r3, #1
|
|
104
|
+
bcs Xoodoo_OverwriteBytes_BytesLoop
|
|
105
|
+
Xoodoo_OverwriteBytes_Exit
|
|
106
|
+
bx lr
|
|
107
|
+
align 4
|
|
108
|
+
ENDP
|
|
109
|
+
|
|
110
|
+
; ----------------------------------------------------------------------------
|
|
111
|
+
;
|
|
112
|
+
; void Xoodoo_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
113
|
+
;
|
|
114
|
+
EXPORT Xoodoo_OverwriteWithZeroes
|
|
115
|
+
Xoodoo_OverwriteWithZeroes PROC
|
|
116
|
+
movs r3, #0
|
|
117
|
+
lsrs r2, r1, #2
|
|
118
|
+
beq Xoodoo_OverwriteWithZeroes_Bytes
|
|
119
|
+
Xoodoo_OverwriteWithZeroes_LoopLanes
|
|
120
|
+
stm r0!, { r3 }
|
|
121
|
+
subs r2, r2, #1
|
|
122
|
+
bne Xoodoo_OverwriteWithZeroes_LoopLanes
|
|
123
|
+
Xoodoo_OverwriteWithZeroes_Bytes
|
|
124
|
+
lsls r1, r1, #32-2
|
|
125
|
+
beq Xoodoo_OverwriteWithZeroes_Exit
|
|
126
|
+
lsrs r1, r1, #32-2
|
|
127
|
+
Xoodoo_OverwriteWithZeroes_LoopBytes
|
|
128
|
+
subs r1, r1, #1
|
|
129
|
+
strb r3, [r0, r1]
|
|
130
|
+
bne Xoodoo_OverwriteWithZeroes_LoopBytes
|
|
131
|
+
Xoodoo_OverwriteWithZeroes_Exit
|
|
132
|
+
bx lr
|
|
133
|
+
align 4
|
|
134
|
+
ENDP
|
|
135
|
+
|
|
136
|
+
; ----------------------------------------------------------------------------
|
|
137
|
+
;
|
|
138
|
+
; void Xoodoo_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
139
|
+
;
|
|
140
|
+
EXPORT Xoodoo_ExtractBytes
|
|
141
|
+
Xoodoo_ExtractBytes PROC
|
|
142
|
+
adds r0, r0, r2 ; state += offset
|
|
143
|
+
subs r3, r3, #4 ; if length >= 4
|
|
144
|
+
bcc Xoodoo_ExtractBytes_Bytes
|
|
145
|
+
movs r2, r0 ; and data pointer and offset both 32-bit aligned
|
|
146
|
+
orrs r2, r2, r1
|
|
147
|
+
lsls r2, #30
|
|
148
|
+
bne Xoodoo_ExtractBytes_Bytes
|
|
149
|
+
Xoodoo_ExtractBytes_LanesLoop ; then, perform on words
|
|
150
|
+
ldmia r0!, {r2}
|
|
151
|
+
stmia r1!, {r2}
|
|
152
|
+
subs r3, r3, #4
|
|
153
|
+
bcs Xoodoo_ExtractBytes_LanesLoop
|
|
154
|
+
Xoodoo_ExtractBytes_Bytes
|
|
155
|
+
adds r3, r3, #4
|
|
156
|
+
beq Xoodoo_ExtractBytes_Exit
|
|
157
|
+
subs r3, r3, #1
|
|
158
|
+
Xoodoo_ExtractBytes_BytesLoop
|
|
159
|
+
ldrb r2, [r0, r3]
|
|
160
|
+
strb r2, [r1, r3]
|
|
161
|
+
subs r3, r3, #1
|
|
162
|
+
bcs Xoodoo_ExtractBytes_BytesLoop
|
|
163
|
+
Xoodoo_ExtractBytes_Exit
|
|
164
|
+
bx lr
|
|
165
|
+
align 4
|
|
166
|
+
ENDP
|
|
167
|
+
|
|
168
|
+
; ----------------------------------------------------------------------------
|
|
169
|
+
;
|
|
170
|
+
; void Xoodoo_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
171
|
+
;
|
|
172
|
+
EXPORT Xoodoo_ExtractAndAddBytes
|
|
173
|
+
Xoodoo_ExtractAndAddBytes PROC
|
|
174
|
+
push {r4,r5}
|
|
175
|
+
adds r0, r0, r3 ; state += offset (offset register no longer needed, reuse for length)
|
|
176
|
+
ldr r3, [sp, #8] ; get length argument from stack
|
|
177
|
+
subs r3, r3, #4 ; if length >= 4
|
|
178
|
+
bcc Xoodoo_ExtractAndAddBytes_Bytes
|
|
179
|
+
movs r5, r0 ; and input/output/state pointer all 32-bit aligned
|
|
180
|
+
orrs r5, r5, r1
|
|
181
|
+
orrs r5, r5, r2
|
|
182
|
+
lsls r5, #30
|
|
183
|
+
bne Xoodoo_ExtractAndAddBytes_Bytes
|
|
184
|
+
Xoodoo_ExtractAndAddBytes_LanesLoop ; then, perform on words
|
|
185
|
+
ldmia r0!, {r5}
|
|
186
|
+
ldmia r1!, {r4}
|
|
187
|
+
eors r5, r5, r4
|
|
188
|
+
stmia r2!, {r5}
|
|
189
|
+
subs r3, r3, #4
|
|
190
|
+
bcs Xoodoo_ExtractAndAddBytes_LanesLoop
|
|
191
|
+
Xoodoo_ExtractAndAddBytes_Bytes
|
|
192
|
+
adds r3, r3, #4
|
|
193
|
+
beq Xoodoo_ExtractAndAddBytes_Exit
|
|
194
|
+
subs r3, r3, #1
|
|
195
|
+
Xoodoo_ExtractAndAddBytes_BytesLoop
|
|
196
|
+
ldrb r5, [r0, r3]
|
|
197
|
+
ldrb r4, [r1, r3]
|
|
198
|
+
eors r5, r5, r4
|
|
199
|
+
strb r5, [r2, r3]
|
|
200
|
+
subs r3, r3, #1
|
|
201
|
+
bcs Xoodoo_ExtractAndAddBytes_BytesLoop
|
|
202
|
+
Xoodoo_ExtractAndAddBytes_Exit
|
|
203
|
+
pop {r4,r5}
|
|
204
|
+
bx lr
|
|
205
|
+
align 4
|
|
206
|
+
ENDP
|
|
207
|
+
|
|
208
|
+
; ----------------------------------------------------------------------------
|
|
209
|
+
|
|
210
|
+
; offsets in RAM state
|
|
211
|
+
_oA00 equ 0*4
|
|
212
|
+
_oA01 equ 1*4
|
|
213
|
+
_oA02 equ 2*4
|
|
214
|
+
_oA03 equ 3*4
|
|
215
|
+
_oA10 equ 4*4
|
|
216
|
+
_oA11 equ 5*4
|
|
217
|
+
_oA12 equ 6*4
|
|
218
|
+
_oA13 equ 7*4
|
|
219
|
+
_oA20 equ 8*4
|
|
220
|
+
_oA21 equ 9*4
|
|
221
|
+
_oA22 equ 10*4
|
|
222
|
+
_oA23 equ 11*4
|
|
223
|
+
|
|
224
|
+
; possible locations of state lanes
|
|
225
|
+
locRegL equ 1
|
|
226
|
+
locRegH equ 2
|
|
227
|
+
locMem equ 3
|
|
228
|
+
|
|
229
|
+
; ----------------------------------------------------------------------------
|
|
230
|
+
|
|
231
|
+
_r0 equ 5
|
|
232
|
+
_r1 equ 14
|
|
233
|
+
_r2 equ 1
|
|
234
|
+
|
|
235
|
+
_w1 equ 11
|
|
236
|
+
|
|
237
|
+
_e0 equ 2
|
|
238
|
+
_e1 equ 8
|
|
239
|
+
|
|
240
|
+
; ----------------------------------------------------------------------------
|
|
241
|
+
|
|
242
|
+
MACRO
|
|
243
|
+
mXor3 $ro, $a0, $a1, $a2, $loc, $tt
|
|
244
|
+
mov $ro, $a1
|
|
245
|
+
eors $ro, $ro, $a2
|
|
246
|
+
if $loc == locRegL
|
|
247
|
+
eors $ro, $ro, $a0
|
|
248
|
+
else
|
|
249
|
+
if $loc == locRegH
|
|
250
|
+
mov $tt, $a0
|
|
251
|
+
else
|
|
252
|
+
ldr $tt, [sp, #$a0]
|
|
253
|
+
endif
|
|
254
|
+
eors $ro, $ro, $tt
|
|
255
|
+
endif
|
|
256
|
+
MEND
|
|
257
|
+
|
|
258
|
+
MACRO
|
|
259
|
+
mXor $ro, $ri, $tt, $loc
|
|
260
|
+
if $loc == locRegL
|
|
261
|
+
eors $ro, $ro, $ri
|
|
262
|
+
else
|
|
263
|
+
if $loc == locRegH
|
|
264
|
+
mov $tt, $ro
|
|
265
|
+
eors $tt, $tt, $ri
|
|
266
|
+
mov $ro, $tt
|
|
267
|
+
else
|
|
268
|
+
ldr $tt, [sp, #$ro]
|
|
269
|
+
eors $tt, $tt, $ri
|
|
270
|
+
str $tt, [sp, #$ro]
|
|
271
|
+
endif
|
|
272
|
+
endif
|
|
273
|
+
MEND
|
|
274
|
+
|
|
275
|
+
MACRO
|
|
276
|
+
mChi3 $a0,$a1,$a2,$r0,$r1,$a0s,$loc
|
|
277
|
+
mov $r1, $a2
|
|
278
|
+
mov $r0, $a1
|
|
279
|
+
bics $r1, $r1, $r0
|
|
280
|
+
eors $a0, $a0, $r1
|
|
281
|
+
if $loc != locRegL
|
|
282
|
+
if $loc == locRegH
|
|
283
|
+
mov $a0s, $a0
|
|
284
|
+
else
|
|
285
|
+
str $a0, [sp, #$a0s]
|
|
286
|
+
endif
|
|
287
|
+
endif
|
|
288
|
+
|
|
289
|
+
mov $r0, $a0
|
|
290
|
+
bics $r0, $r0, $a2
|
|
291
|
+
mov $r1, $a1
|
|
292
|
+
eors $r1, $r1, $r0
|
|
293
|
+
mov $a1, $r1
|
|
294
|
+
|
|
295
|
+
bics $r1, $r1, $a0
|
|
296
|
+
eors $a2, $a2, $r1
|
|
297
|
+
MEND
|
|
298
|
+
|
|
299
|
+
MACRO
|
|
300
|
+
mRound $offsetRC, $offsetA03
|
|
301
|
+
|
|
302
|
+
; Theta: Column Parity Mixer
|
|
303
|
+
mXor3 r0, $offsetA03, lr, r7, locMem, r2
|
|
304
|
+
mov r1, r0
|
|
305
|
+
movs r2, #32-(_r1-_r0)
|
|
306
|
+
rors r1, r1, r2
|
|
307
|
+
eors r1, r1, r0
|
|
308
|
+
movs r2, #32-_r0
|
|
309
|
+
rors r1, r1, r2
|
|
310
|
+
mXor3 r0, r3, r10, r4, locRegL, r2
|
|
311
|
+
mXor r3, r1, r2, locRegL
|
|
312
|
+
mXor r10, r1, r2, locRegH
|
|
313
|
+
mXor r4, r1, r2, locRegL
|
|
314
|
+
|
|
315
|
+
mov r1, r0
|
|
316
|
+
movs r2, #32-(_r1-_r0)
|
|
317
|
+
rors r1, r1, r2
|
|
318
|
+
eors r1, r1, r0
|
|
319
|
+
movs r2, #32-_r0
|
|
320
|
+
rors r1, r1, r2
|
|
321
|
+
mXor3 r0, r8, r11, r5, locRegH, r2
|
|
322
|
+
mXor r8, r1, r2, locRegH
|
|
323
|
+
mXor r11, r1, r2, locRegH
|
|
324
|
+
mXor r5, r1, r2, locRegL
|
|
325
|
+
|
|
326
|
+
mov r1, r0
|
|
327
|
+
movs r2, #32-(_r1-_r0)
|
|
328
|
+
rors r1, r1, r2
|
|
329
|
+
eors r1, r1, r0
|
|
330
|
+
movs r2, #32-_r0
|
|
331
|
+
rors r1, r1, r2
|
|
332
|
+
mXor3 r0, r9, r12, r6, locRegH, r2
|
|
333
|
+
mXor r9, r1, r2, locRegH
|
|
334
|
+
mXor r12, r1, r2, locRegH
|
|
335
|
+
mXor r6, r1, r2, locRegL
|
|
336
|
+
|
|
337
|
+
mov r1, r0
|
|
338
|
+
movs r2, #32-(_r1-_r0)
|
|
339
|
+
rors r1, r1, r2
|
|
340
|
+
eors r1, r1, r0
|
|
341
|
+
movs r2, #32-_r0
|
|
342
|
+
rors r1, r1, r2
|
|
343
|
+
mXor $offsetA03, r1, r2, locMem
|
|
344
|
+
mXor lr, r1, r2, locRegH
|
|
345
|
+
mXor r7, r1, r2, locRegL
|
|
346
|
+
|
|
347
|
+
; Rho-west: Plane shift
|
|
348
|
+
movs r0, #32-_w1
|
|
349
|
+
rors r4, r4, r0
|
|
350
|
+
rors r5, r5, r0
|
|
351
|
+
rors r6, r6, r0
|
|
352
|
+
rors r7, r7, r0
|
|
353
|
+
mov r0, lr
|
|
354
|
+
mov lr, r12
|
|
355
|
+
mov r12, r11
|
|
356
|
+
mov r11, r10
|
|
357
|
+
mov r10, r0
|
|
358
|
+
|
|
359
|
+
; Iota: round constant
|
|
360
|
+
ldr r0, [sp, #$offsetRC]
|
|
361
|
+
ldmia r0!, {r1}
|
|
362
|
+
str r0, [sp, #$offsetRC]
|
|
363
|
+
eors r3, r3, r1
|
|
364
|
+
|
|
365
|
+
; Chi: non linear step, on colums
|
|
366
|
+
mChi3 r3, r10, r4, r0, r1, r3, locRegL
|
|
367
|
+
mov r2, r8
|
|
368
|
+
mChi3 r2, r11, r5, r0, r1, r8, locRegH
|
|
369
|
+
mov r2, r9
|
|
370
|
+
mChi3 r2, r12, r6, r0, r1, r9, locRegH
|
|
371
|
+
ldr r2, [sp, #$offsetA03]
|
|
372
|
+
mChi3 r2, lr, r7, r0, r1, $offsetA03, locMem
|
|
373
|
+
|
|
374
|
+
; Rho-east: Plane shift
|
|
375
|
+
movs r0, #32-1
|
|
376
|
+
mov r1, r10
|
|
377
|
+
rors r1, r1, r0
|
|
378
|
+
mov r10, r1
|
|
379
|
+
mov r1, r11
|
|
380
|
+
rors r1, r1, r0
|
|
381
|
+
mov r11, r1
|
|
382
|
+
mov r1, r12
|
|
383
|
+
rors r1, r1, r0
|
|
384
|
+
mov r12, r1
|
|
385
|
+
mov r1, lr
|
|
386
|
+
rors r1, r1, r0
|
|
387
|
+
mov lr, r1
|
|
388
|
+
|
|
389
|
+
movs r0, #32-_e1
|
|
390
|
+
rors r4, r4, r0
|
|
391
|
+
rors r5, r5, r0
|
|
392
|
+
rors r6, r6, r0
|
|
393
|
+
rors r7, r7, r0
|
|
394
|
+
|
|
395
|
+
mov r0, r4
|
|
396
|
+
mov r4, r6
|
|
397
|
+
mov r6, r0
|
|
398
|
+
mov r0, r5
|
|
399
|
+
mov r5, r7
|
|
400
|
+
mov r7, r0
|
|
401
|
+
|
|
402
|
+
MEND
|
|
403
|
+
|
|
404
|
+
; ----------------------------------------------------------------------------
|
|
405
|
+
;
|
|
406
|
+
; void Xoodoo_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
407
|
+
;
|
|
408
|
+
|
|
409
|
+
; offsets on stack
|
|
410
|
+
Xoodoo_Permute_Nrounds_offsetA03 equ 0
|
|
411
|
+
Xoodoo_Permute_Nrounds_offsetRC equ 4
|
|
412
|
+
Xoodoo_Permute_Nrounds_SAS equ 8
|
|
413
|
+
Xoodoo_Permute_Nrounds_offsetState equ Xoodoo_Permute_Nrounds_SAS
|
|
414
|
+
|
|
415
|
+
EXPORT Xoodoo_Permute_Nrounds
|
|
416
|
+
Xoodoo_Permute_Nrounds PROC
|
|
417
|
+
push {r4-r6,lr}
|
|
418
|
+
mov r2, r8
|
|
419
|
+
mov r3, r9
|
|
420
|
+
mov r4, r10
|
|
421
|
+
mov r5, r11
|
|
422
|
+
push {r0,r2-r5,r7}
|
|
423
|
+
|
|
424
|
+
sub sp, #Xoodoo_Permute_Nrounds_SAS
|
|
425
|
+
adr r2, Xoodoo_Permute_RoundConstants12
|
|
426
|
+
lsls r1, r1, #2
|
|
427
|
+
subs r2, r2, r1
|
|
428
|
+
str r2, [sp, #Xoodoo_Permute_Nrounds_offsetRC]
|
|
429
|
+
|
|
430
|
+
ldm r0!, {r3,r5,r6,r7}
|
|
431
|
+
mov r8, r5
|
|
432
|
+
mov r9, r6
|
|
433
|
+
str r7, [sp, #Xoodoo_Permute_Nrounds_offsetA03]
|
|
434
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
435
|
+
mov r10, r4
|
|
436
|
+
mov r11, r5
|
|
437
|
+
mov r12, r6
|
|
438
|
+
mov lr, r7
|
|
439
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
440
|
+
Xoodoo_Permute_Nrouds_Loop
|
|
441
|
+
mRound Xoodoo_Permute_Nrounds_offsetRC, Xoodoo_Permute_Nrounds_offsetA03
|
|
442
|
+
ldr r0, [sp, #Xoodoo_Permute_Nrounds_offsetRC]
|
|
443
|
+
ldr r0, [r0]
|
|
444
|
+
cmp r0, #0
|
|
445
|
+
beq Xoodoo_Permute_Nrouds_Done
|
|
446
|
+
b Xoodoo_Permute_Nrouds_Loop
|
|
447
|
+
Xoodoo_Permute_Nrouds_Done
|
|
448
|
+
ldr r0, [sp, #Xoodoo_Permute_Nrounds_offsetState]
|
|
449
|
+
|
|
450
|
+
stm r0!, {r3}
|
|
451
|
+
mov r1, r8
|
|
452
|
+
mov r2, r9
|
|
453
|
+
ldr r3, [sp, #Xoodoo_Permute_Nrounds_offsetA03]
|
|
454
|
+
stm r0!, {r1,r2,r3}
|
|
455
|
+
|
|
456
|
+
mov r1, r10
|
|
457
|
+
mov r2, r11
|
|
458
|
+
mov r3, r12
|
|
459
|
+
stm r0!, {r1,r2,r3}
|
|
460
|
+
|
|
461
|
+
mov r1, lr
|
|
462
|
+
stm r0!, {r1,r4,r5,r6,r7}
|
|
463
|
+
|
|
464
|
+
add sp, #Xoodoo_Permute_Nrounds_SAS
|
|
465
|
+
pop {r0-r4,r7}
|
|
466
|
+
mov r8, r1
|
|
467
|
+
mov r9, r2
|
|
468
|
+
mov r10, r3
|
|
469
|
+
mov r11, r4
|
|
470
|
+
pop {r4-r6,pc}
|
|
471
|
+
align 4
|
|
472
|
+
ENDP
|
|
473
|
+
|
|
474
|
+
Xoodoo_Permute_RoundConstants
|
|
475
|
+
dcd 0x00000058
|
|
476
|
+
dcd 0x00000038
|
|
477
|
+
dcd 0x000003C0
|
|
478
|
+
dcd 0x000000D0
|
|
479
|
+
dcd 0x00000120
|
|
480
|
+
dcd 0x00000014
|
|
481
|
+
dcd 0x00000060
|
|
482
|
+
dcd 0x0000002C
|
|
483
|
+
dcd 0x00000380
|
|
484
|
+
dcd 0x000000F0
|
|
485
|
+
dcd 0x000001A0
|
|
486
|
+
dcd 0x00000012
|
|
487
|
+
Xoodoo_Permute_RoundConstants12
|
|
488
|
+
dcd 0
|
|
489
|
+
align 4
|
|
490
|
+
|
|
491
|
+
; ----------------------------------------------------------------------------
|
|
492
|
+
;
|
|
493
|
+
; void Xoodoo_Permute_6rounds( void *state )
|
|
494
|
+
;
|
|
495
|
+
EXPORT Xoodoo_Permute_6rounds
|
|
496
|
+
Xoodoo_Permute_6rounds PROC
|
|
497
|
+
movs r1, #6
|
|
498
|
+
b Xoodoo_Permute_Nrounds
|
|
499
|
+
align 4
|
|
500
|
+
ENDP
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
; ----------------------------------------------------------------------------
|
|
504
|
+
;
|
|
505
|
+
; void Xoodoo_Permute_12rounds( void *state )
|
|
506
|
+
;
|
|
507
|
+
EXPORT Xoodoo_Permute_12rounds
|
|
508
|
+
Xoodoo_Permute_12rounds PROC
|
|
509
|
+
movs r1, #12
|
|
510
|
+
b Xoodoo_Permute_Nrounds
|
|
511
|
+
align 4
|
|
512
|
+
ENDP
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
Xoofff_BlockSize equ 3*4*4
|
|
516
|
+
|
|
517
|
+
; ----------------------------------------------------------------------------
|
|
518
|
+
;
|
|
519
|
+
; void Xoofff_AddIs(BitSequence *output, const BitSequence *input, BitLength bitLen)
|
|
520
|
+
EXPORT Xoofff_AddIs
|
|
521
|
+
Xoofff_AddIs PROC
|
|
522
|
+
push {r4-r6,lr}
|
|
523
|
+
movs r3, r0 ; check input and output pointer both 32-bit aligned
|
|
524
|
+
orrs r3, r3, r1
|
|
525
|
+
lsls r3, r3, #30
|
|
526
|
+
bne Xoofff_AddIs_Bytes
|
|
527
|
+
subs r2, r2, #16*8
|
|
528
|
+
bcc Xoofff_AddIs_LessThan16
|
|
529
|
+
Xoofff_AddIs_16Loop
|
|
530
|
+
ldr r3, [r0, #0]
|
|
531
|
+
ldr r4, [r0, #4]
|
|
532
|
+
ldmia r1!, {r5,r6}
|
|
533
|
+
eors r3, r3, r5
|
|
534
|
+
eors r4, r4, r6
|
|
535
|
+
stmia r0!, {r3,r4}
|
|
536
|
+
ldr r3, [r0, #0]
|
|
537
|
+
ldr r4, [r0, #4]
|
|
538
|
+
ldmia r1!, {r5,r6}
|
|
539
|
+
eors r3, r3, r5
|
|
540
|
+
eors r4, r4, r6
|
|
541
|
+
stmia r0!, {r3,r4}
|
|
542
|
+
subs r2, r2, #16*8
|
|
543
|
+
bcs Xoofff_AddIs_16Loop
|
|
544
|
+
Xoofff_AddIs_LessThan16
|
|
545
|
+
adds r2, r2, #16*8
|
|
546
|
+
beq Xoofff_AddIs_Return
|
|
547
|
+
subs r2, r2, #4*8
|
|
548
|
+
bcc Xoofff_AddIs_LessThan4
|
|
549
|
+
Xoofff_AddIs_4Loop
|
|
550
|
+
ldr r3, [r0]
|
|
551
|
+
ldmia r1!, {r4}
|
|
552
|
+
eors r3, r3, r4
|
|
553
|
+
stmia r0!, {r3}
|
|
554
|
+
subs r2, r2, #4*8
|
|
555
|
+
bcs Xoofff_AddIs_4Loop
|
|
556
|
+
Xoofff_AddIs_LessThan4
|
|
557
|
+
adds r2, r2, #4*8
|
|
558
|
+
beq Xoofff_AddIs_Return
|
|
559
|
+
Xoofff_AddIs_Bytes
|
|
560
|
+
subs r2, r2, #8
|
|
561
|
+
bcc Xoofff_AddIs_LessThan1
|
|
562
|
+
Xoofff_AddIs_1Loop
|
|
563
|
+
ldrb r3, [r0]
|
|
564
|
+
ldrb r4, [r1]
|
|
565
|
+
adds r1, r1, #1
|
|
566
|
+
eors r3, r3, r4
|
|
567
|
+
strb r3, [r0]
|
|
568
|
+
adds r0, r0, #1
|
|
569
|
+
subs r2, r2, #8
|
|
570
|
+
bcs Xoofff_AddIs_1Loop
|
|
571
|
+
Xoofff_AddIs_LessThan1
|
|
572
|
+
adds r2, r2, #8
|
|
573
|
+
beq Xoofff_AddIs_Return
|
|
574
|
+
ldrb r3, [r0]
|
|
575
|
+
ldrb r4, [r1]
|
|
576
|
+
movs r1, #1
|
|
577
|
+
eors r3, r3, r4
|
|
578
|
+
lsls r1, r1, r2
|
|
579
|
+
subs r1, r1, #1
|
|
580
|
+
ands r3, r3, r1
|
|
581
|
+
strb r3, [r0]
|
|
582
|
+
Xoofff_AddIs_Return
|
|
583
|
+
pop {r4-r6,pc}
|
|
584
|
+
align 4
|
|
585
|
+
ENDP
|
|
586
|
+
|
|
587
|
+
MACRO
|
|
588
|
+
mLdu $rv, $ri, $tt
|
|
589
|
+
ldrb $rv, [$ri, #3]
|
|
590
|
+
lsls $rv, $rv, #8
|
|
591
|
+
ldrb $tt, [$ri, #2]
|
|
592
|
+
orrs $rv, $rv, $tt
|
|
593
|
+
lsls $rv, $rv, #8
|
|
594
|
+
ldrb $tt, [$ri, #1]
|
|
595
|
+
orrs $rv, $rv, $tt
|
|
596
|
+
lsls $rv, $rv, #8
|
|
597
|
+
ldrb $tt, [$ri, #0]
|
|
598
|
+
orrs $rv, $rv, $tt
|
|
599
|
+
adds $ri, $ri, #4
|
|
600
|
+
MEND
|
|
601
|
+
|
|
602
|
+
; ----------------------------------------------------------------------------
|
|
603
|
+
;
|
|
604
|
+
; size_t Xoofff_CompressFastLoop(unsigned char *kRoll, unsigned char *xAccu, const unsigned char *input, size_t length)
|
|
605
|
+
;
|
|
606
|
+
|
|
607
|
+
; offsets on stack
|
|
608
|
+
Xoofff_CompressFastLoop_offsetA03 equ 0
|
|
609
|
+
Xoofff_CompressFastLoop_offsetRC equ 4
|
|
610
|
+
Xoofff_CompressFastLoop_SAS equ 8
|
|
611
|
+
Xoofff_CompressFastLoop_kRoll equ Xoofff_CompressFastLoop_SAS+0
|
|
612
|
+
Xoofff_CompressFastLoop_input equ Xoofff_CompressFastLoop_SAS+4
|
|
613
|
+
Xoofff_CompressFastLoop_xAccu equ Xoofff_CompressFastLoop_SAS+8+16
|
|
614
|
+
Xoofff_CompressFastLoop_iInput equ Xoofff_CompressFastLoop_SAS+12+16
|
|
615
|
+
Xoofff_CompressFastLoop_length equ Xoofff_CompressFastLoop_SAS+16+16
|
|
616
|
+
|
|
617
|
+
EXPORT Xoofff_CompressFastLoop
|
|
618
|
+
Xoofff_CompressFastLoop PROC
|
|
619
|
+
subs r3, #Xoofff_BlockSize ; length must be greater than block size
|
|
620
|
+
push {r1-r7,lr}
|
|
621
|
+
mov r4, r8
|
|
622
|
+
mov r5, r9
|
|
623
|
+
mov r6, r10
|
|
624
|
+
mov r7, r11
|
|
625
|
+
push {r0,r2,r4-r7}
|
|
626
|
+
sub sp, #Xoofff_CompressFastLoop_SAS
|
|
627
|
+
ldm r0!, {r3,r5,r6,r7} ; get initial kRoll
|
|
628
|
+
mov r8, r5
|
|
629
|
+
mov r9, r6
|
|
630
|
+
str r7, [sp, #Xoofff_CompressFastLoop_offsetA03]
|
|
631
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
632
|
+
mov r10, r4
|
|
633
|
+
mov r11, r5
|
|
634
|
+
mov r12, r6
|
|
635
|
+
mov lr, r7
|
|
636
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
637
|
+
Xoofff_CompressFastLoop_Loop
|
|
638
|
+
adr r1, Xoofff_CompressFastLoop_RoundConstants6
|
|
639
|
+
str r1, [sp, #Xoofff_CompressFastLoop_offsetRC]
|
|
640
|
+
|
|
641
|
+
ldr r0, [sp, #Xoofff_CompressFastLoop_input] ; add input
|
|
642
|
+
lsls r1, r0, #30
|
|
643
|
+
bne Xoofff_CompressFastLoop_Unaligned
|
|
644
|
+
|
|
645
|
+
Xoofff_CompressFastLoop_Aligned
|
|
646
|
+
ldmia r0!, {r1}
|
|
647
|
+
eors r3, r3, r1
|
|
648
|
+
ldmia r0!, {r1}
|
|
649
|
+
mov r2, r8
|
|
650
|
+
eors r2, r2, r1
|
|
651
|
+
mov r8, r2
|
|
652
|
+
ldmia r0!, {r1}
|
|
653
|
+
mov r2, r9
|
|
654
|
+
eors r2, r2, r1
|
|
655
|
+
mov r9, r2
|
|
656
|
+
ldmia r0!, {r1}
|
|
657
|
+
ldr r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
|
|
658
|
+
eors r2, r2, r1
|
|
659
|
+
str r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
|
|
660
|
+
|
|
661
|
+
ldmia r0!, {r1}
|
|
662
|
+
mov r2, r10
|
|
663
|
+
eors r2, r2, r1
|
|
664
|
+
mov r10, r2
|
|
665
|
+
ldmia r0!, {r1}
|
|
666
|
+
mov r2, r11
|
|
667
|
+
eors r2, r2, r1
|
|
668
|
+
mov r11, r2
|
|
669
|
+
ldmia r0!, {r1}
|
|
670
|
+
mov r2, r12
|
|
671
|
+
eors r2, r2, r1
|
|
672
|
+
mov r12, r2
|
|
673
|
+
ldmia r0!, {r1}
|
|
674
|
+
mov r2, lr
|
|
675
|
+
eors r2, r2, r1
|
|
676
|
+
mov lr, r2
|
|
677
|
+
|
|
678
|
+
ldmia r0!, {r1,r2}
|
|
679
|
+
eors r4, r4, r1
|
|
680
|
+
eors r5, r5, r2
|
|
681
|
+
ldmia r0!, {r1,r2}
|
|
682
|
+
eors r6, r6, r1
|
|
683
|
+
eors r7, r7, r2
|
|
684
|
+
|
|
685
|
+
b Xoofff_CompressFastLoop_Permute
|
|
686
|
+
align 4
|
|
687
|
+
Xoofff_CompressFastLoop_RoundConstants6
|
|
688
|
+
dcd 0x00000060
|
|
689
|
+
dcd 0x0000002C
|
|
690
|
+
dcd 0x00000380
|
|
691
|
+
dcd 0x000000F0
|
|
692
|
+
dcd 0x000001A0
|
|
693
|
+
dcd 0x00000012
|
|
694
|
+
dcd 0
|
|
695
|
+
|
|
696
|
+
Xoofff_CompressFastLoop_Unaligned
|
|
697
|
+
mLdu r1, r0, r2
|
|
698
|
+
eors r3, r3, r1
|
|
699
|
+
mLdu r1, r0, r2
|
|
700
|
+
mov r2, r8
|
|
701
|
+
eors r2, r2, r1
|
|
702
|
+
mov r8, r2
|
|
703
|
+
mLdu r1, r0, r2
|
|
704
|
+
mov r2, r9
|
|
705
|
+
eors r2, r2, r1
|
|
706
|
+
mov r9, r2
|
|
707
|
+
mLdu r1, r0, r2
|
|
708
|
+
ldr r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
|
|
709
|
+
eors r2, r2, r1
|
|
710
|
+
str r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
|
|
711
|
+
|
|
712
|
+
mLdu r1, r0, r2
|
|
713
|
+
mov r2, r10
|
|
714
|
+
eors r2, r2, r1
|
|
715
|
+
mov r10, r2
|
|
716
|
+
mLdu r1, r0, r2
|
|
717
|
+
mov r2, r11
|
|
718
|
+
eors r2, r2, r1
|
|
719
|
+
mov r11, r2
|
|
720
|
+
mLdu r1, r0, r2
|
|
721
|
+
mov r2, r12
|
|
722
|
+
eors r2, r2, r1
|
|
723
|
+
mov r12, r2
|
|
724
|
+
mLdu r1, r0, r2
|
|
725
|
+
mov r2, lr
|
|
726
|
+
eors r2, r2, r1
|
|
727
|
+
mov lr, r2
|
|
728
|
+
|
|
729
|
+
mLdu r1, r0, r2
|
|
730
|
+
eors r4, r4, r1
|
|
731
|
+
mLdu r1, r0, r2
|
|
732
|
+
eors r5, r5, r1
|
|
733
|
+
mLdu r1, r0, r2
|
|
734
|
+
eors r6, r6, r1
|
|
735
|
+
mLdu r1, r0, r2
|
|
736
|
+
eors r7, r7, r1
|
|
737
|
+
|
|
738
|
+
Xoofff_CompressFastLoop_Permute
|
|
739
|
+
str r0, [sp, #Xoofff_CompressFastLoop_input]
|
|
740
|
+
Xoofff_CompressFastLoop_PermuteLoop
|
|
741
|
+
mRound Xoofff_CompressFastLoop_offsetRC, Xoofff_CompressFastLoop_offsetA03
|
|
742
|
+
ldr r0, [sp, #Xoofff_CompressFastLoop_offsetRC]
|
|
743
|
+
ldr r0, [r0]
|
|
744
|
+
cmp r0, #0
|
|
745
|
+
beq Xoofff_CompressFastLoop_PermuteDone
|
|
746
|
+
b Xoofff_CompressFastLoop_PermuteLoop
|
|
747
|
+
Xoofff_CompressFastLoop_PermuteDone
|
|
748
|
+
|
|
749
|
+
; Extract and add into xAccu
|
|
750
|
+
ldr r0, [sp, #Xoofff_CompressFastLoop_xAccu]
|
|
751
|
+
|
|
752
|
+
ldr r1, [r0]
|
|
753
|
+
eors r1, r1, r3
|
|
754
|
+
stmia r0!, {r1}
|
|
755
|
+
|
|
756
|
+
ldr r1, [r0]
|
|
757
|
+
mov r2, r8
|
|
758
|
+
eors r1, r1, r2
|
|
759
|
+
stmia r0!, {r1}
|
|
760
|
+
|
|
761
|
+
ldr r1, [r0]
|
|
762
|
+
mov r2, r9
|
|
763
|
+
eors r1, r1, r2
|
|
764
|
+
stmia r0!, {r1}
|
|
765
|
+
|
|
766
|
+
ldr r1, [r0]
|
|
767
|
+
ldr r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
|
|
768
|
+
eors r1, r1, r2
|
|
769
|
+
stmia r0!, {r1}
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
ldr r1, [r0]
|
|
773
|
+
mov r2, r10
|
|
774
|
+
eors r1, r1, r2
|
|
775
|
+
stmia r0!, {r1}
|
|
776
|
+
ldr r1, [r0]
|
|
777
|
+
mov r2, r11
|
|
778
|
+
eors r1, r1, r2
|
|
779
|
+
stmia r0!, {r1}
|
|
780
|
+
ldr r1, [r0]
|
|
781
|
+
mov r2, r12
|
|
782
|
+
eors r1, r1, r2
|
|
783
|
+
stmia r0!, {r1}
|
|
784
|
+
ldr r1, [r0]
|
|
785
|
+
mov r2, lr
|
|
786
|
+
eors r1, r1, r2
|
|
787
|
+
stmia r0!, {r1}
|
|
788
|
+
|
|
789
|
+
ldr r1, [r0, #0]
|
|
790
|
+
ldr r2, [r0, #4]
|
|
791
|
+
ldr r3, [r0, #8]
|
|
792
|
+
eors r1, r1, r4
|
|
793
|
+
ldr r4, [r0, #12]
|
|
794
|
+
eors r2, r2, r5
|
|
795
|
+
eors r3, r3, r6
|
|
796
|
+
eors r4, r4, r7
|
|
797
|
+
stm r0!, {r1,r2,r3,r4}
|
|
798
|
+
|
|
799
|
+
;roll kRoll-c
|
|
800
|
+
ldr r0, [sp, #Xoofff_CompressFastLoop_kRoll]
|
|
801
|
+
ldmia r0!, {r7}
|
|
802
|
+
ldmia r0!, {r4-r6}
|
|
803
|
+
ldmia r0!, {r3}
|
|
804
|
+
ldmia r0!, {r1,r2}
|
|
805
|
+
mov r8, r1
|
|
806
|
+
mov r9, r2
|
|
807
|
+
ldmia r0!, {r1,r2}
|
|
808
|
+
str r1, [sp, #Xoofff_CompressFastLoop_offsetA03]
|
|
809
|
+
mov r10, r2
|
|
810
|
+
ldmia r0!, {r1,r2}
|
|
811
|
+
mov r11, r1
|
|
812
|
+
mov r12, r2
|
|
813
|
+
ldmia r0!, {r1}
|
|
814
|
+
mov lr, r1
|
|
815
|
+
|
|
816
|
+
lsls r1, r7, #13
|
|
817
|
+
eors r7, r7, r1
|
|
818
|
+
mov r1, r3
|
|
819
|
+
movs r2, #32-3
|
|
820
|
+
rors r1, r1, r2
|
|
821
|
+
eors r7, r7, r1
|
|
822
|
+
|
|
823
|
+
subs r0, r0, #Xoofff_BlockSize
|
|
824
|
+
stmia r0!, {r3}
|
|
825
|
+
mov r1, r8
|
|
826
|
+
mov r2, r9
|
|
827
|
+
stmia r0!, {r1,r2}
|
|
828
|
+
ldr r1, [sp, #Xoofff_CompressFastLoop_offsetA03]
|
|
829
|
+
mov r2, r10
|
|
830
|
+
stmia r0!, {r1,r2}
|
|
831
|
+
mov r1, r11
|
|
832
|
+
mov r2, r12
|
|
833
|
+
stmia r0!, {r1,r2}
|
|
834
|
+
mov r1, lr
|
|
835
|
+
stmia r0!, {r1,r4-r7}
|
|
836
|
+
|
|
837
|
+
; loop management
|
|
838
|
+
ldr r0, [sp, #Xoofff_CompressFastLoop_length]
|
|
839
|
+
subs r0, #Xoofff_BlockSize
|
|
840
|
+
str r0, [sp, #Xoofff_CompressFastLoop_length]
|
|
841
|
+
bcc Xoofff_CompressFastLoop_Done
|
|
842
|
+
b Xoofff_CompressFastLoop_Loop
|
|
843
|
+
Xoofff_CompressFastLoop_Done
|
|
844
|
+
; return number of bytes processed
|
|
845
|
+
ldr r0, [sp, #Xoofff_CompressFastLoop_input]
|
|
846
|
+
ldr r1, [sp, #Xoofff_CompressFastLoop_iInput]
|
|
847
|
+
subs r0, r0, r1
|
|
848
|
+
add sp, #Xoofff_CompressFastLoop_SAS+8
|
|
849
|
+
pop {r4-r7}
|
|
850
|
+
mov r8, r4
|
|
851
|
+
mov r9, r5
|
|
852
|
+
mov r10, r6
|
|
853
|
+
mov r11, r7
|
|
854
|
+
pop {r1-r7,pc}
|
|
855
|
+
align 4
|
|
856
|
+
ENDP
|
|
857
|
+
|
|
858
|
+
MACRO
|
|
859
|
+
mStu $rv, $ro
|
|
860
|
+
strb $rv, [$ro, #0]
|
|
861
|
+
lsrs $rv, $rv, #8
|
|
862
|
+
strb $rv, [$ro, #1]
|
|
863
|
+
lsrs $rv, $rv, #8
|
|
864
|
+
strb $rv, [$ro, #2]
|
|
865
|
+
lsrs $rv, $rv, #8
|
|
866
|
+
strb $rv, [$ro, #3]
|
|
867
|
+
adds $ro, $ro, #4
|
|
868
|
+
MEND
|
|
869
|
+
|
|
870
|
+
; ----------------------------------------------------------------------------
|
|
871
|
+
;
|
|
872
|
+
; size_t Xoofff_ExpandFastLoop(unsigned char *yAccu, const unsigned char *kRoll, unsigned char *output, size_t length)
|
|
873
|
+
;
|
|
874
|
+
|
|
875
|
+
; offsets on stack
|
|
876
|
+
Xoofff_ExpandFastLoop_offsetA03 equ 0
|
|
877
|
+
Xoofff_ExpandFastLoop_offsetRC equ 4
|
|
878
|
+
Xoofff_ExpandFastLoop_SAS equ 8
|
|
879
|
+
Xoofff_ExpandFastLoop_yAccu equ Xoofff_ExpandFastLoop_SAS+0
|
|
880
|
+
Xoofff_ExpandFastLoop_output equ Xoofff_ExpandFastLoop_SAS+4
|
|
881
|
+
Xoofff_ExpandFastLoop_kRoll equ Xoofff_ExpandFastLoop_SAS+8+16
|
|
882
|
+
Xoofff_ExpandFastLoop_iOutput equ Xoofff_ExpandFastLoop_SAS+12+16
|
|
883
|
+
Xoofff_ExpandFastLoop_length equ Xoofff_ExpandFastLoop_SAS+16+16
|
|
884
|
+
|
|
885
|
+
EXPORT Xoofff_ExpandFastLoop
|
|
886
|
+
Xoofff_ExpandFastLoop PROC
|
|
887
|
+
subs r3, #Xoofff_BlockSize ; length must be greater than block size
|
|
888
|
+
push {r1-r7,lr}
|
|
889
|
+
mov r4, r8
|
|
890
|
+
mov r5, r9
|
|
891
|
+
mov r6, r10
|
|
892
|
+
mov r7, r11
|
|
893
|
+
push {r0,r2,r4-r7}
|
|
894
|
+
sub sp, #Xoofff_ExpandFastLoop_SAS
|
|
895
|
+
|
|
896
|
+
ldm r0!, {r3,r5,r6,r7} ; get initial yAccu
|
|
897
|
+
mov r8, r5
|
|
898
|
+
mov r9, r6
|
|
899
|
+
str r7, [sp, #Xoofff_ExpandFastLoop_offsetA03]
|
|
900
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
901
|
+
mov r10, r4
|
|
902
|
+
mov r11, r5
|
|
903
|
+
mov r12, r6
|
|
904
|
+
mov lr, r7
|
|
905
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
906
|
+
Xoofff_ExpandFastLoop_Loop
|
|
907
|
+
adr r1, Xoofff_ExpandFastLoop_RoundConstants6
|
|
908
|
+
str r1, [sp, #Xoofff_ExpandFastLoop_offsetRC]
|
|
909
|
+
Xoofff_ExpandFastLoop_PermuteLoop
|
|
910
|
+
mRound Xoofff_ExpandFastLoop_offsetRC, Xoofff_ExpandFastLoop_offsetA03
|
|
911
|
+
ldr r0, [sp, #Xoofff_ExpandFastLoop_offsetRC]
|
|
912
|
+
ldr r0, [r0]
|
|
913
|
+
cmp r0, #0
|
|
914
|
+
beq Xoofff_ExpandFastLoop_PermuteDone
|
|
915
|
+
b Xoofff_ExpandFastLoop_PermuteLoop
|
|
916
|
+
Xoofff_ExpandFastLoop_RoundConstants6
|
|
917
|
+
dcd 0x00000060
|
|
918
|
+
dcd 0x0000002C
|
|
919
|
+
dcd 0x00000380
|
|
920
|
+
dcd 0x000000F0
|
|
921
|
+
dcd 0x000001A0
|
|
922
|
+
dcd 0x00000012
|
|
923
|
+
dcd 0
|
|
924
|
+
Xoofff_ExpandFastLoop_PermuteDone
|
|
925
|
+
; Add k and extract
|
|
926
|
+
ldr r0, [sp, #Xoofff_ExpandFastLoop_kRoll]
|
|
927
|
+
ldr r1, [sp, #Xoofff_ExpandFastLoop_output] ; add input
|
|
928
|
+
lsls r2, r1, #30
|
|
929
|
+
bne Xoofff_ExpandFastLoop_Unaligned
|
|
930
|
+
Xoofff_ExpandFastLoop_Aligned
|
|
931
|
+
ldmia r0!, {r2}
|
|
932
|
+
eors r2, r2, r3
|
|
933
|
+
stmia r1!, {r2}
|
|
934
|
+
ldmia r0!, {r2}
|
|
935
|
+
mov r3, r8
|
|
936
|
+
eors r2, r2, r3
|
|
937
|
+
stmia r1!, {r2}
|
|
938
|
+
ldmia r0!, {r2}
|
|
939
|
+
mov r3, r9
|
|
940
|
+
eors r2, r2, r3
|
|
941
|
+
stmia r1!, {r2}
|
|
942
|
+
ldmia r0!, {r2}
|
|
943
|
+
ldr r3, [sp, #Xoofff_ExpandFastLoop_offsetA03]
|
|
944
|
+
eors r2, r2, r3
|
|
945
|
+
stmia r1!, {r2}
|
|
946
|
+
|
|
947
|
+
ldmia r0!, {r2}
|
|
948
|
+
mov r3, r10
|
|
949
|
+
eors r2, r2, r3
|
|
950
|
+
stmia r1!, {r2}
|
|
951
|
+
ldmia r0!, {r2}
|
|
952
|
+
mov r3, r11
|
|
953
|
+
eors r2, r2, r3
|
|
954
|
+
stmia r1!, {r2}
|
|
955
|
+
ldmia r0!, {r2}
|
|
956
|
+
mov r3, r12
|
|
957
|
+
eors r2, r2, r3
|
|
958
|
+
stmia r1!, {r2}
|
|
959
|
+
ldmia r0!, {r2}
|
|
960
|
+
mov r3, lr
|
|
961
|
+
eors r2, r2, r3
|
|
962
|
+
stmia r1!, {r2}
|
|
963
|
+
|
|
964
|
+
ldmia r0!, {r2,r3}
|
|
965
|
+
eors r2, r2, r4
|
|
966
|
+
eors r3, r3, r5
|
|
967
|
+
stmia r1!, {r2,r3}
|
|
968
|
+
ldmia r0!, {r2,r3}
|
|
969
|
+
eors r2, r2, r6
|
|
970
|
+
eors r3, r3, r7
|
|
971
|
+
stmia r1!, {r2,r3}
|
|
972
|
+
b Xoofff_ExpandFastLoop_ExtractDone
|
|
973
|
+
|
|
974
|
+
Xoofff_ExpandFastLoop_Unaligned
|
|
975
|
+
ldmia r0!, {r2}
|
|
976
|
+
eors r2, r2, r3
|
|
977
|
+
mStu r2, r1
|
|
978
|
+
ldmia r0!, {r2}
|
|
979
|
+
mov r3, r8
|
|
980
|
+
eors r2, r2, r3
|
|
981
|
+
mStu r2, r1
|
|
982
|
+
ldmia r0!, {r2}
|
|
983
|
+
mov r3, r9
|
|
984
|
+
eors r2, r2, r3
|
|
985
|
+
mStu r2, r1
|
|
986
|
+
ldmia r0!, {r2}
|
|
987
|
+
ldr r3, [sp, #Xoofff_ExpandFastLoop_offsetA03]
|
|
988
|
+
eors r2, r2, r3
|
|
989
|
+
mStu r2, r1
|
|
990
|
+
|
|
991
|
+
ldmia r0!, {r2}
|
|
992
|
+
mov r3, r10
|
|
993
|
+
eors r2, r2, r3
|
|
994
|
+
mStu r2, r1
|
|
995
|
+
ldmia r0!, {r2}
|
|
996
|
+
mov r3, r11
|
|
997
|
+
eors r2, r2, r3
|
|
998
|
+
mStu r2, r1
|
|
999
|
+
ldmia r0!, {r2}
|
|
1000
|
+
mov r3, r12
|
|
1001
|
+
eors r2, r2, r3
|
|
1002
|
+
mStu r2, r1
|
|
1003
|
+
ldmia r0!, {r2}
|
|
1004
|
+
mov r3, lr
|
|
1005
|
+
eors r2, r2, r3
|
|
1006
|
+
mStu r2, r1
|
|
1007
|
+
|
|
1008
|
+
ldmia r0!, {r2,r3}
|
|
1009
|
+
eors r2, r2, r4
|
|
1010
|
+
mStu r2, r1
|
|
1011
|
+
eors r3, r3, r5
|
|
1012
|
+
mStu r3, r1
|
|
1013
|
+
ldmia r0!, {r2,r3}
|
|
1014
|
+
eors r2, r2, r6
|
|
1015
|
+
mStu r2, r1
|
|
1016
|
+
eors r3, r3, r7
|
|
1017
|
+
mStu r3, r1
|
|
1018
|
+
|
|
1019
|
+
Xoofff_ExpandFastLoop_ExtractDone
|
|
1020
|
+
str r1, [sp, #Xoofff_ExpandFastLoop_output]
|
|
1021
|
+
|
|
1022
|
+
; roll-e yAccu
|
|
1023
|
+
ldr r0, [sp, #Xoofff_ExpandFastLoop_yAccu]
|
|
1024
|
+
ldmia r0!, {r7}
|
|
1025
|
+
ldmia r0!, {r4-r6}
|
|
1026
|
+
ldmia r0!, {r3}
|
|
1027
|
+
ldmia r0!, {r1,r2}
|
|
1028
|
+
mov r8, r1
|
|
1029
|
+
mov r9, r2
|
|
1030
|
+
ldmia r0!, {r1,r2}
|
|
1031
|
+
str r1, [sp, #Xoofff_ExpandFastLoop_offsetA03]
|
|
1032
|
+
mov r10, r2
|
|
1033
|
+
ldmia r0!, {r1,r2}
|
|
1034
|
+
mov r11, r1
|
|
1035
|
+
mov r12, r2
|
|
1036
|
+
ldmia r0!, {r1}
|
|
1037
|
+
mov lr, r1
|
|
1038
|
+
|
|
1039
|
+
mov r1, r10
|
|
1040
|
+
ands r1, r1, r3
|
|
1041
|
+
movs r2, #32-5
|
|
1042
|
+
rors r7, r7, r2
|
|
1043
|
+
eors r7, r7, r1
|
|
1044
|
+
movs r2, #32-13
|
|
1045
|
+
mov r1, r3
|
|
1046
|
+
rors r1, r1, r2
|
|
1047
|
+
eors r7, r7, r1
|
|
1048
|
+
movs r1, #7
|
|
1049
|
+
eors r7, r7, r1
|
|
1050
|
+
|
|
1051
|
+
subs r0, r0, #Xoofff_BlockSize
|
|
1052
|
+
stmia r0!, {r3}
|
|
1053
|
+
mov r1, r8
|
|
1054
|
+
mov r2, r9
|
|
1055
|
+
stmia r0!, {r1,r2}
|
|
1056
|
+
ldr r1, [sp, #Xoofff_ExpandFastLoop_offsetA03]
|
|
1057
|
+
mov r2, r10
|
|
1058
|
+
stmia r0!, {r1,r2}
|
|
1059
|
+
mov r1, r11
|
|
1060
|
+
mov r2, r12
|
|
1061
|
+
stmia r0!, {r1,r2}
|
|
1062
|
+
mov r1, lr
|
|
1063
|
+
stmia r0!, {r1,r4-r7}
|
|
1064
|
+
|
|
1065
|
+
; loop management
|
|
1066
|
+
ldr r0, [sp, #Xoofff_ExpandFastLoop_length]
|
|
1067
|
+
subs r0, #Xoofff_BlockSize
|
|
1068
|
+
str r0, [sp, #Xoofff_ExpandFastLoop_length]
|
|
1069
|
+
bcc Xoofff_ExpandFastLoop_Done
|
|
1070
|
+
b Xoofff_ExpandFastLoop_Loop
|
|
1071
|
+
Xoofff_ExpandFastLoop_Done
|
|
1072
|
+
; return number of bytes processed
|
|
1073
|
+
ldr r0, [sp, #Xoofff_ExpandFastLoop_output]
|
|
1074
|
+
ldr r1, [sp, #Xoofff_ExpandFastLoop_iOutput]
|
|
1075
|
+
subs r0, r0, r1
|
|
1076
|
+
add sp, #Xoofff_ExpandFastLoop_SAS+8
|
|
1077
|
+
pop {r4-r7}
|
|
1078
|
+
mov r8, r4
|
|
1079
|
+
mov r9, r5
|
|
1080
|
+
mov r10, r6
|
|
1081
|
+
mov r11, r7
|
|
1082
|
+
pop {r1-r7,pc}
|
|
1083
|
+
align 4
|
|
1084
|
+
ENDP
|
|
1085
|
+
|
|
1086
|
+
END
|