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,1164 @@
|
|
|
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 (e.g., Cortex-M0).
|
|
18
|
+
|
|
19
|
+
PRESERVE8
|
|
20
|
+
THUMB
|
|
21
|
+
AREA |.text|, CODE, READONLY
|
|
22
|
+
|
|
23
|
+
; ----------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
; offsets in RAM state
|
|
26
|
+
_oA00 equ 0*4
|
|
27
|
+
_oA01 equ 1*4
|
|
28
|
+
_oA02 equ 2*4
|
|
29
|
+
_oA03 equ 3*4
|
|
30
|
+
_oA10 equ 4*4
|
|
31
|
+
_oA11 equ 5*4
|
|
32
|
+
_oA12 equ 6*4
|
|
33
|
+
_oA13 equ 7*4
|
|
34
|
+
_oA20 equ 8*4
|
|
35
|
+
_oA21 equ 9*4
|
|
36
|
+
_oA22 equ 10*4
|
|
37
|
+
_oA23 equ 11*4
|
|
38
|
+
|
|
39
|
+
; possible locations of state lanes
|
|
40
|
+
locRegL equ 1
|
|
41
|
+
locRegH equ 2
|
|
42
|
+
locMem equ 3
|
|
43
|
+
|
|
44
|
+
; ----------------------------------------------------------------------------
|
|
45
|
+
|
|
46
|
+
_r0 equ 5
|
|
47
|
+
_r1 equ 14
|
|
48
|
+
_r2 equ 1
|
|
49
|
+
|
|
50
|
+
_w1 equ 11
|
|
51
|
+
|
|
52
|
+
_e0 equ 2
|
|
53
|
+
_e1 equ 8
|
|
54
|
+
|
|
55
|
+
; ----------------------------------------------------------------------------
|
|
56
|
+
|
|
57
|
+
MACRO
|
|
58
|
+
mLoadU $r, $p, $o, $t
|
|
59
|
+
ldrb $r, [$p, #$o+0]
|
|
60
|
+
ldrb $t, [$p, #$o+1]
|
|
61
|
+
lsls $t, $t, #8
|
|
62
|
+
orrs $r, $r, $t
|
|
63
|
+
ldrb $t, [$p, #$o+2]
|
|
64
|
+
lsls $t, $t, #16
|
|
65
|
+
orrs $r, $r, $t
|
|
66
|
+
ldrb $t, [$p, #$o+3]
|
|
67
|
+
lsls $t, $t, #24
|
|
68
|
+
orrs $r, $r, $t
|
|
69
|
+
MEND
|
|
70
|
+
|
|
71
|
+
MACRO
|
|
72
|
+
mStoreU $p, $o, $s, $t, $loc
|
|
73
|
+
if $loc == locRegL
|
|
74
|
+
strb $s, [$p, #$o+0]
|
|
75
|
+
lsrs $t, $s, #8
|
|
76
|
+
else
|
|
77
|
+
mov $t, $s
|
|
78
|
+
strb $t, [$p, #$o+0]
|
|
79
|
+
lsrs $t, $t, #8
|
|
80
|
+
endif
|
|
81
|
+
strb $t, [$p, #$o+1]
|
|
82
|
+
lsrs $t, $t, #8
|
|
83
|
+
strb $t, [$p, #$o+2]
|
|
84
|
+
lsrs $t, $t, #8
|
|
85
|
+
strb $t, [$p, #$o+3]
|
|
86
|
+
MEND
|
|
87
|
+
|
|
88
|
+
MACRO
|
|
89
|
+
mXor3 $ro, $a0, $a1, $a2, $loc, $tt
|
|
90
|
+
mov $ro, $a1
|
|
91
|
+
eors $ro, $ro, $a2
|
|
92
|
+
if $loc == locRegL
|
|
93
|
+
eors $ro, $ro, $a0
|
|
94
|
+
else
|
|
95
|
+
if $loc == locRegH
|
|
96
|
+
mov $tt, $a0
|
|
97
|
+
else
|
|
98
|
+
ldr $tt, [sp, #$a0]
|
|
99
|
+
endif
|
|
100
|
+
eors $ro, $ro, $tt
|
|
101
|
+
endif
|
|
102
|
+
MEND
|
|
103
|
+
|
|
104
|
+
MACRO
|
|
105
|
+
mXor $ro, $ri, $tt, $loc
|
|
106
|
+
if $loc == locRegL
|
|
107
|
+
eors $ro, $ro, $ri
|
|
108
|
+
else
|
|
109
|
+
if $loc == locRegH
|
|
110
|
+
mov $tt, $ro
|
|
111
|
+
eors $tt, $tt, $ri
|
|
112
|
+
mov $ro, $tt
|
|
113
|
+
else
|
|
114
|
+
ldr $tt, [sp, #$ro]
|
|
115
|
+
eors $tt, $tt, $ri
|
|
116
|
+
str $tt, [sp, #$ro]
|
|
117
|
+
endif
|
|
118
|
+
endif
|
|
119
|
+
MEND
|
|
120
|
+
|
|
121
|
+
MACRO
|
|
122
|
+
mChi3 $a0,$a1,$a2,$r0,$r1,$a0s,$loc
|
|
123
|
+
mov $r1, $a2
|
|
124
|
+
mov $r0, $a1
|
|
125
|
+
bics $r1, $r1, $r0
|
|
126
|
+
eors $a0, $a0, $r1
|
|
127
|
+
if $loc != locRegL
|
|
128
|
+
if $loc == locRegH
|
|
129
|
+
mov $a0s, $a0
|
|
130
|
+
else
|
|
131
|
+
str $a0, [sp, #$a0s]
|
|
132
|
+
endif
|
|
133
|
+
endif
|
|
134
|
+
|
|
135
|
+
mov $r0, $a0
|
|
136
|
+
bics $r0, $r0, $a2
|
|
137
|
+
mov $r1, $a1
|
|
138
|
+
eors $r1, $r1, $r0
|
|
139
|
+
mov $a1, $r1
|
|
140
|
+
|
|
141
|
+
bics $r1, $r1, $a0
|
|
142
|
+
eors $a2, $a2, $r1
|
|
143
|
+
MEND
|
|
144
|
+
|
|
145
|
+
MACRO
|
|
146
|
+
mRound $offsetRC, $offsetA03
|
|
147
|
+
|
|
148
|
+
; Theta: Column Parity Mixer
|
|
149
|
+
mXor3 r0, $offsetA03, lr, r7, locMem, r2
|
|
150
|
+
mov r1, r0
|
|
151
|
+
movs r2, #32-(_r1-_r0)
|
|
152
|
+
rors r1, r1, r2
|
|
153
|
+
eors r1, r1, r0
|
|
154
|
+
movs r2, #32-_r0
|
|
155
|
+
rors r1, r1, r2
|
|
156
|
+
mXor3 r0, r3, r10, r4, locRegL, r2
|
|
157
|
+
mXor r3, r1, r2, locRegL
|
|
158
|
+
mXor r10, r1, r2, locRegH
|
|
159
|
+
mXor r4, r1, r2, locRegL
|
|
160
|
+
|
|
161
|
+
mov r1, r0
|
|
162
|
+
movs r2, #32-(_r1-_r0)
|
|
163
|
+
rors r1, r1, r2
|
|
164
|
+
eors r1, r1, r0
|
|
165
|
+
movs r2, #32-_r0
|
|
166
|
+
rors r1, r1, r2
|
|
167
|
+
mXor3 r0, r8, r11, r5, locRegH, r2
|
|
168
|
+
mXor r8, r1, r2, locRegH
|
|
169
|
+
mXor r11, r1, r2, locRegH
|
|
170
|
+
mXor r5, r1, r2, locRegL
|
|
171
|
+
|
|
172
|
+
mov r1, r0
|
|
173
|
+
movs r2, #32-(_r1-_r0)
|
|
174
|
+
rors r1, r1, r2
|
|
175
|
+
eors r1, r1, r0
|
|
176
|
+
movs r2, #32-_r0
|
|
177
|
+
rors r1, r1, r2
|
|
178
|
+
mXor3 r0, r9, r12, r6, locRegH, r2
|
|
179
|
+
mXor r9, r1, r2, locRegH
|
|
180
|
+
mXor r12, r1, r2, locRegH
|
|
181
|
+
mXor r6, r1, r2, locRegL
|
|
182
|
+
|
|
183
|
+
mov r1, r0
|
|
184
|
+
movs r2, #32-(_r1-_r0)
|
|
185
|
+
rors r1, r1, r2
|
|
186
|
+
eors r1, r1, r0
|
|
187
|
+
movs r2, #32-_r0
|
|
188
|
+
rors r1, r1, r2
|
|
189
|
+
mXor $offsetA03, r1, r2, locMem
|
|
190
|
+
mXor lr, r1, r2, locRegH
|
|
191
|
+
mXor r7, r1, r2, locRegL
|
|
192
|
+
|
|
193
|
+
; Rho-west: Plane shift
|
|
194
|
+
movs r0, #32-_w1
|
|
195
|
+
rors r4, r4, r0
|
|
196
|
+
rors r5, r5, r0
|
|
197
|
+
rors r6, r6, r0
|
|
198
|
+
rors r7, r7, r0
|
|
199
|
+
mov r0, lr
|
|
200
|
+
mov lr, r12
|
|
201
|
+
mov r12, r11
|
|
202
|
+
mov r11, r10
|
|
203
|
+
mov r10, r0
|
|
204
|
+
|
|
205
|
+
; Iota: round constant
|
|
206
|
+
ldr r0, [sp, #$offsetRC]
|
|
207
|
+
ldmia r0!, {r1}
|
|
208
|
+
str r0, [sp, #$offsetRC]
|
|
209
|
+
eors r3, r3, r1
|
|
210
|
+
|
|
211
|
+
; Chi: non linear step, on colums
|
|
212
|
+
mChi3 r3, r10, r4, r0, r1, r3, locRegL
|
|
213
|
+
mov r2, r8
|
|
214
|
+
mChi3 r2, r11, r5, r0, r1, r8, locRegH
|
|
215
|
+
mov r2, r9
|
|
216
|
+
mChi3 r2, r12, r6, r0, r1, r9, locRegH
|
|
217
|
+
ldr r2, [sp, #$offsetA03]
|
|
218
|
+
mChi3 r2, lr, r7, r0, r1, $offsetA03, locMem
|
|
219
|
+
|
|
220
|
+
; Rho-east: Plane shift
|
|
221
|
+
movs r0, #32-1
|
|
222
|
+
mov r1, r10
|
|
223
|
+
rors r1, r1, r0
|
|
224
|
+
mov r10, r1
|
|
225
|
+
mov r1, r11
|
|
226
|
+
rors r1, r1, r0
|
|
227
|
+
mov r11, r1
|
|
228
|
+
mov r1, r12
|
|
229
|
+
rors r1, r1, r0
|
|
230
|
+
mov r12, r1
|
|
231
|
+
mov r1, lr
|
|
232
|
+
rors r1, r1, r0
|
|
233
|
+
mov lr, r1
|
|
234
|
+
|
|
235
|
+
movs r0, #32-_e1
|
|
236
|
+
rors r4, r4, r0
|
|
237
|
+
rors r5, r5, r0
|
|
238
|
+
rors r6, r6, r0
|
|
239
|
+
rors r7, r7, r0
|
|
240
|
+
|
|
241
|
+
mov r0, r4
|
|
242
|
+
mov r4, r6
|
|
243
|
+
mov r6, r0
|
|
244
|
+
mov r0, r5
|
|
245
|
+
mov r5, r7
|
|
246
|
+
mov r7, r0
|
|
247
|
+
|
|
248
|
+
MEND
|
|
249
|
+
|
|
250
|
+
; ----------------------------------------------------------------------------
|
|
251
|
+
;
|
|
252
|
+
; Xoodoo_Permute_12roundsAsm
|
|
253
|
+
;
|
|
254
|
+
|
|
255
|
+
; offsets on stack
|
|
256
|
+
Xoodoo_Permute_12rounds_offsetA03 equ 0
|
|
257
|
+
Xoodoo_Permute_12rounds_offsetRC equ 4
|
|
258
|
+
Xoodoo_Permute_12rounds_offsetReturn equ 8
|
|
259
|
+
Xoodoo_Permute_12rounds_SAS equ 12
|
|
260
|
+
|
|
261
|
+
align 4
|
|
262
|
+
Xoodoo_Permute_12roundsAsm PROC
|
|
263
|
+
adr r2, Xoodoo_Permute_RoundConstants12
|
|
264
|
+
str r2, [sp, #Xoodoo_Permute_12rounds_offsetRC]
|
|
265
|
+
Xoodoo_Permute_12rounds_Loop
|
|
266
|
+
mRound Xoodoo_Permute_12rounds_offsetRC, Xoodoo_Permute_12rounds_offsetA03
|
|
267
|
+
ldr r0, [sp, #Xoodoo_Permute_12rounds_offsetRC]
|
|
268
|
+
ldr r0, [r0]
|
|
269
|
+
cmp r0, #0
|
|
270
|
+
beq Xoodoo_Permute_12rounds_Done
|
|
271
|
+
b Xoodoo_Permute_12rounds_Loop
|
|
272
|
+
Xoodoo_Permute_12rounds_Done
|
|
273
|
+
ldr r0, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
|
|
274
|
+
bx r0
|
|
275
|
+
align 4
|
|
276
|
+
Xoodoo_Permute_RoundConstants12
|
|
277
|
+
dcd 0x00000058
|
|
278
|
+
dcd 0x00000038
|
|
279
|
+
dcd 0x000003C0
|
|
280
|
+
dcd 0x000000D0
|
|
281
|
+
dcd 0x00000120
|
|
282
|
+
dcd 0x00000014
|
|
283
|
+
dcd 0x00000060
|
|
284
|
+
dcd 0x0000002C
|
|
285
|
+
dcd 0x00000380
|
|
286
|
+
dcd 0x000000F0
|
|
287
|
+
dcd 0x000001A0
|
|
288
|
+
dcd 0x00000012
|
|
289
|
+
dcd 0
|
|
290
|
+
ENDP
|
|
291
|
+
|
|
292
|
+
; ----------------------------------------------------------------------------
|
|
293
|
+
;
|
|
294
|
+
; size_t Xoodyak_AbsorbKeyedFullBlocks(void *state, const uint8_t *X, size_t XLen)
|
|
295
|
+
; {
|
|
296
|
+
; size_t initialLength = XLen;
|
|
297
|
+
;
|
|
298
|
+
; do {
|
|
299
|
+
; SnP_Permute(state ); /* Xoodyak_Up(instance, NULL, 0, 0); */
|
|
300
|
+
; SnP_AddBytes(state, X, 0, Xoodyak_Rkin); /* Xoodyak_Down(instance, X, Xoodyak_Rkin, 0); */
|
|
301
|
+
; SnP_AddByte(state, 0x01, Xoodyak_Rkin);
|
|
302
|
+
; X += Xoodyak_Rkin;
|
|
303
|
+
; XLen -= Xoodyak_Rkin;
|
|
304
|
+
; } while (XLen >= Xoodyak_Rkin);
|
|
305
|
+
; return initialLength - XLen;
|
|
306
|
+
; }
|
|
307
|
+
;
|
|
308
|
+
XoodyakAbsorb_offsetState equ (Xoodoo_Permute_12rounds_SAS+0)
|
|
309
|
+
XoodyakAbsorb_offsetX equ (Xoodoo_Permute_12rounds_SAS+4)
|
|
310
|
+
XoodyakAbsorb_offsetXLen equ (Xoodoo_Permute_12rounds_SAS+8)
|
|
311
|
+
XoodyakAbsorb_offsetInitialLen equ (Xoodoo_Permute_12rounds_SAS+12)
|
|
312
|
+
|
|
313
|
+
XoodyakAbsorb_SAS equ (Xoodoo_Permute_12rounds_SAS+20)
|
|
314
|
+
|
|
315
|
+
align 4
|
|
316
|
+
EXPORT Xoodyak_AbsorbKeyedFullBlocks
|
|
317
|
+
Xoodyak_AbsorbKeyedFullBlocks PROC
|
|
318
|
+
push {r3-r7,lr}
|
|
319
|
+
mov r4, r8
|
|
320
|
+
mov r5, r9
|
|
321
|
+
mov r6, r10
|
|
322
|
+
mov r7, r11
|
|
323
|
+
push {r4-r7}
|
|
324
|
+
|
|
325
|
+
sub sp, #XoodyakAbsorb_SAS
|
|
326
|
+
str r0, [sp, #XoodyakAbsorb_offsetState] ; setup variables on stack
|
|
327
|
+
str r1, [sp, #XoodyakAbsorb_offsetX]
|
|
328
|
+
str r2, [sp, #XoodyakAbsorb_offsetInitialLen]
|
|
329
|
+
subs r2, r2, #44
|
|
330
|
+
str r2, [sp, #XoodyakAbsorb_offsetXLen]
|
|
331
|
+
ldr r5, =Xoodyak_AbsorbKeyedFullBlocks_Ret+1
|
|
332
|
+
str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
|
|
333
|
+
|
|
334
|
+
ldm r0!, {r3,r5,r6,r7} ; state in registers
|
|
335
|
+
mov r8, r5
|
|
336
|
+
mov r9, r6
|
|
337
|
+
str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
338
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
339
|
+
mov r10, r4
|
|
340
|
+
mov r11, r5
|
|
341
|
+
mov r12, r6
|
|
342
|
+
mov lr, r7
|
|
343
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
344
|
+
Xoodyak_AbsorbKeyedFullBlocks_Loop
|
|
345
|
+
ldr r0, =Xoodoo_Permute_12roundsAsm
|
|
346
|
+
bx r0
|
|
347
|
+
align 4
|
|
348
|
+
ltorg
|
|
349
|
+
Xoodyak_AbsorbKeyedFullBlocks_Ret
|
|
350
|
+
ldr r0, [sp, #XoodyakAbsorb_offsetX]
|
|
351
|
+
lsls r1, r0, #30
|
|
352
|
+
bne Xoodyak_AbsorbKeyedFullBlocks_Unaligned
|
|
353
|
+
Xoodyak_AbsorbKeyedFullBlocks_Aligned
|
|
354
|
+
ldmia r0!, {r1}
|
|
355
|
+
eors r3, r3, r1
|
|
356
|
+
ldmia r0!, {r1}
|
|
357
|
+
mov r2, r8
|
|
358
|
+
eors r2, r2, r1
|
|
359
|
+
mov r8, r2
|
|
360
|
+
ldmia r0!, {r1}
|
|
361
|
+
mov r2, r9
|
|
362
|
+
eors r2, r2, r1
|
|
363
|
+
mov r9, r2
|
|
364
|
+
ldmia r0!, {r1}
|
|
365
|
+
ldr r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
366
|
+
eors r2, r2, r1
|
|
367
|
+
str r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
368
|
+
|
|
369
|
+
ldmia r0!, {r1}
|
|
370
|
+
mov r2, r10
|
|
371
|
+
eors r2, r2, r1
|
|
372
|
+
mov r10, r2
|
|
373
|
+
ldmia r0!, {r1}
|
|
374
|
+
mov r2, r11
|
|
375
|
+
eors r2, r2, r1
|
|
376
|
+
mov r11, r2
|
|
377
|
+
ldmia r0!, {r1}
|
|
378
|
+
mov r2, r12
|
|
379
|
+
eors r2, r2, r1
|
|
380
|
+
mov r12, r2
|
|
381
|
+
ldmia r0!, {r1}
|
|
382
|
+
mov r2, lr
|
|
383
|
+
eors r2, r2, r1
|
|
384
|
+
mov lr, r2
|
|
385
|
+
|
|
386
|
+
ldmia r0!, {r1}
|
|
387
|
+
eors r4, r4, r1
|
|
388
|
+
ldmia r0!, {r1}
|
|
389
|
+
eors r5, r5, r1
|
|
390
|
+
ldmia r0!, {r1}
|
|
391
|
+
eors r6, r6, r1
|
|
392
|
+
Xoodyak_AbsorbKeyedFullBlocks_EndLoop
|
|
393
|
+
str r0, [sp, #XoodyakAbsorb_offsetX]
|
|
394
|
+
movs r2, #1
|
|
395
|
+
eors r7, r7, r2
|
|
396
|
+
ldr r1, [sp, #XoodyakAbsorb_offsetXLen]
|
|
397
|
+
subs r1, r1, #44
|
|
398
|
+
str r1, [sp, #XoodyakAbsorb_offsetXLen]
|
|
399
|
+
bcs Xoodyak_AbsorbKeyedFullBlocks_Loop
|
|
400
|
+
ldr r0, [sp, #XoodyakAbsorb_offsetState]
|
|
401
|
+
stm r0!, {r3}
|
|
402
|
+
mov r1, r8
|
|
403
|
+
mov r2, r9
|
|
404
|
+
ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
405
|
+
stm r0!, {r1,r2,r3}
|
|
406
|
+
mov r1, r10
|
|
407
|
+
mov r2, r11
|
|
408
|
+
mov r3, r12
|
|
409
|
+
stm r0!, {r1,r2,r3}
|
|
410
|
+
mov r1, lr
|
|
411
|
+
stm r0!, {r1,r4,r5,r6,r7}
|
|
412
|
+
|
|
413
|
+
ldr r0, [sp, #XoodyakAbsorb_offsetInitialLen]
|
|
414
|
+
ldr r2, [sp, #XoodyakAbsorb_offsetXLen]
|
|
415
|
+
adds r2, r2, #44
|
|
416
|
+
subs r0, r0, r2
|
|
417
|
+
|
|
418
|
+
add sp, #XoodyakAbsorb_SAS
|
|
419
|
+
pop {r4-r7}
|
|
420
|
+
mov r8, r4
|
|
421
|
+
mov r9, r5
|
|
422
|
+
mov r10, r6
|
|
423
|
+
mov r11, r7
|
|
424
|
+
pop {r3-r7,pc}
|
|
425
|
+
Xoodyak_AbsorbKeyedFullBlocks_Unaligned
|
|
426
|
+
mLoadU r1, r0, 0, r2
|
|
427
|
+
eors r3, r3, r1
|
|
428
|
+
|
|
429
|
+
mLoadU r1, r0, 4, r2
|
|
430
|
+
mov r2, r8
|
|
431
|
+
eors r2, r2, r1
|
|
432
|
+
mov r8, r2
|
|
433
|
+
|
|
434
|
+
mLoadU r1, r0, 8, r2
|
|
435
|
+
mov r2, r9
|
|
436
|
+
eors r2, r2, r1
|
|
437
|
+
mov r9, r2
|
|
438
|
+
|
|
439
|
+
mLoadU r1, r0, 12, r2
|
|
440
|
+
ldr r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
441
|
+
eors r2, r2, r1
|
|
442
|
+
str r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
443
|
+
|
|
444
|
+
mLoadU r1, r0, 16, r2
|
|
445
|
+
mov r2, r10
|
|
446
|
+
eors r2, r2, r1
|
|
447
|
+
mov r10, r2
|
|
448
|
+
|
|
449
|
+
mLoadU r1, r0, 20, r2
|
|
450
|
+
mov r2, r11
|
|
451
|
+
eors r2, r2, r1
|
|
452
|
+
mov r11, r2
|
|
453
|
+
|
|
454
|
+
mLoadU r1, r0, 24, r2
|
|
455
|
+
mov r2, r12
|
|
456
|
+
eors r2, r2, r1
|
|
457
|
+
mov r12, r2
|
|
458
|
+
|
|
459
|
+
mLoadU r1, r0, 28, r2
|
|
460
|
+
mov r2, lr
|
|
461
|
+
eors r2, r2, r1
|
|
462
|
+
mov lr, r2
|
|
463
|
+
|
|
464
|
+
adds r0, r0, #32
|
|
465
|
+
mLoadU r1, r0, 0, r2
|
|
466
|
+
eors r4, r4, r1
|
|
467
|
+
mLoadU r1, r0, 4, r2
|
|
468
|
+
eors r5, r5, r1
|
|
469
|
+
mLoadU r1, r0, 8, r2
|
|
470
|
+
eors r6, r6, r1
|
|
471
|
+
adds r0, r0, #12
|
|
472
|
+
b Xoodyak_AbsorbKeyedFullBlocks_EndLoop
|
|
473
|
+
ENDP
|
|
474
|
+
|
|
475
|
+
; ----------------------------------------------------------------------------
|
|
476
|
+
;
|
|
477
|
+
; size_t Xoodyak_AbsorbHashFullBlocks(void *state, const uint8_t *X, size_t XLen)
|
|
478
|
+
; {
|
|
479
|
+
; size_t initialLength = XLen;
|
|
480
|
+
;
|
|
481
|
+
; do {
|
|
482
|
+
; SnP_Permute(state ); /* Xoodyak_Up(instance, NULL, 0, 0); */
|
|
483
|
+
; SnP_AddBytes(state, X, 0, Xoodyak_Rhash); /* Xoodyak_Down(instance, X, Xoodyak_Rhash, 0); */
|
|
484
|
+
; SnP_AddByte(state, 0x01, Xoodyak_Rhash);
|
|
485
|
+
; X += Xoodyak_Rhash;
|
|
486
|
+
; XLen -= Xoodyak_Rhash;
|
|
487
|
+
; } while (XLen >= Xoodyak_Rhash);
|
|
488
|
+
; return initialLength - XLen;
|
|
489
|
+
; }
|
|
490
|
+
;
|
|
491
|
+
align 4
|
|
492
|
+
EXPORT Xoodyak_AbsorbHashFullBlocks
|
|
493
|
+
Xoodyak_AbsorbHashFullBlocks PROC
|
|
494
|
+
push {r3-r7,lr}
|
|
495
|
+
mov r4, r8
|
|
496
|
+
mov r5, r9
|
|
497
|
+
mov r6, r10
|
|
498
|
+
mov r7, r11
|
|
499
|
+
push {r4-r7}
|
|
500
|
+
|
|
501
|
+
sub sp, #XoodyakAbsorb_SAS
|
|
502
|
+
str r0, [sp, #XoodyakAbsorb_offsetState] ; setup variables on stack
|
|
503
|
+
str r1, [sp, #XoodyakAbsorb_offsetX]
|
|
504
|
+
str r2, [sp, #XoodyakAbsorb_offsetInitialLen]
|
|
505
|
+
subs r2, r2, #16
|
|
506
|
+
str r2, [sp, #XoodyakAbsorb_offsetXLen]
|
|
507
|
+
ldr r5, =Xoodyak_AbsorbHashFullBlocks_Ret+1
|
|
508
|
+
str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
|
|
509
|
+
|
|
510
|
+
ldm r0!, {r3,r5,r6,r7} ; state in registers
|
|
511
|
+
mov r8, r5
|
|
512
|
+
mov r9, r6
|
|
513
|
+
str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
514
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
515
|
+
mov r10, r4
|
|
516
|
+
mov r11, r5
|
|
517
|
+
mov r12, r6
|
|
518
|
+
mov lr, r7
|
|
519
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
520
|
+
Xoodyak_AbsorbHashFullBlocks_Loop
|
|
521
|
+
ldr r0, =Xoodoo_Permute_12roundsAsm
|
|
522
|
+
bx r0
|
|
523
|
+
align 4
|
|
524
|
+
ltorg
|
|
525
|
+
Xoodyak_AbsorbHashFullBlocks_Ret
|
|
526
|
+
ldr r0, [sp, #XoodyakAbsorb_offsetX]
|
|
527
|
+
lsls r1, r0, #30
|
|
528
|
+
bne Xoodyak_AbsorbHashFullBlocks_Unaligned
|
|
529
|
+
Xoodyak_AbsorbHashFullBlocks_Aligned
|
|
530
|
+
ldmia r0!, {r1}
|
|
531
|
+
eors r3, r3, r1
|
|
532
|
+
ldmia r0!, {r1}
|
|
533
|
+
mov r2, r8
|
|
534
|
+
eors r2, r2, r1
|
|
535
|
+
mov r8, r2
|
|
536
|
+
ldmia r0!, {r1}
|
|
537
|
+
mov r2, r9
|
|
538
|
+
eors r2, r2, r1
|
|
539
|
+
mov r9, r2
|
|
540
|
+
ldmia r0!, {r1}
|
|
541
|
+
ldr r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
542
|
+
eors r2, r2, r1
|
|
543
|
+
str r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
544
|
+
Xoodyak_AbsorbHashFullBlocks_EndLoop
|
|
545
|
+
str r0, [sp, #XoodyakAbsorb_offsetX]
|
|
546
|
+
movs r2, #1
|
|
547
|
+
mov r1, r10
|
|
548
|
+
eors r1, r1, r2
|
|
549
|
+
mov r10, r1
|
|
550
|
+
ldr r1, [sp, #XoodyakAbsorb_offsetXLen]
|
|
551
|
+
subs r1, r1, #16
|
|
552
|
+
str r1, [sp, #XoodyakAbsorb_offsetXLen]
|
|
553
|
+
bcs Xoodyak_AbsorbHashFullBlocks_Loop
|
|
554
|
+
ldr r0, [sp, #XoodyakAbsorb_offsetState]
|
|
555
|
+
|
|
556
|
+
stm r0!, {r3}
|
|
557
|
+
mov r1, r8
|
|
558
|
+
mov r2, r9
|
|
559
|
+
ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
560
|
+
stm r0!, {r1,r2,r3}
|
|
561
|
+
mov r1, r10
|
|
562
|
+
mov r2, r11
|
|
563
|
+
mov r3, r12
|
|
564
|
+
stm r0!, {r1,r2,r3}
|
|
565
|
+
mov r1, lr
|
|
566
|
+
stm r0!, {r1,r4,r5,r6,r7}
|
|
567
|
+
|
|
568
|
+
ldr r0, [sp, #XoodyakAbsorb_offsetInitialLen]
|
|
569
|
+
ldr r2, [sp, #XoodyakAbsorb_offsetXLen]
|
|
570
|
+
adds r2, r2, #16
|
|
571
|
+
subs r0, r0, r2
|
|
572
|
+
|
|
573
|
+
add sp, #XoodyakAbsorb_SAS
|
|
574
|
+
pop {r4-r7}
|
|
575
|
+
mov r8, r4
|
|
576
|
+
mov r9, r5
|
|
577
|
+
mov r10, r6
|
|
578
|
+
mov r11, r7
|
|
579
|
+
pop {r3-r7,pc}
|
|
580
|
+
Xoodyak_AbsorbHashFullBlocks_Unaligned
|
|
581
|
+
mLoadU r1, r0, 0, r2
|
|
582
|
+
eors r3, r3, r1
|
|
583
|
+
mLoadU r1, r0, 4, r2
|
|
584
|
+
mov r2, r8
|
|
585
|
+
eors r2, r2, r1
|
|
586
|
+
mov r8, r2
|
|
587
|
+
mLoadU r1, r0, 8, r2
|
|
588
|
+
mov r2, r9
|
|
589
|
+
eors r2, r2, r1
|
|
590
|
+
mov r9, r2
|
|
591
|
+
mLoadU r1, r0, 12, r2
|
|
592
|
+
ldr r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
593
|
+
eors r2, r2, r1
|
|
594
|
+
str r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
595
|
+
adds r0, r0, #16
|
|
596
|
+
b Xoodyak_AbsorbHashFullBlocks_EndLoop
|
|
597
|
+
ENDP
|
|
598
|
+
|
|
599
|
+
; ----------------------------------------------------------------------------
|
|
600
|
+
;
|
|
601
|
+
; size_t Xoodyak_SqueezeKeyedFullBlocks(void *state, uint8_t *Y, size_t YLen)
|
|
602
|
+
; {
|
|
603
|
+
; size_t initialLength = YLen;
|
|
604
|
+
;
|
|
605
|
+
; do {
|
|
606
|
+
; SnP_AddByte(state, 0x01, 0); /* Xoodyak_Down(instance, NULL, 0, 0); */
|
|
607
|
+
; SnP_Permute(state ); /* Xoodyak_Up(instance, Y, Xoodyak_Rkout, 0); */
|
|
608
|
+
; SnP_ExtractBytes(state, Y, 0, Xoodyak_Rkout);
|
|
609
|
+
; Y += Xoodyak_Rkout;
|
|
610
|
+
; YLen -= Xoodyak_Rkout;
|
|
611
|
+
; } while (YLen >= Xoodyak_Rkout);
|
|
612
|
+
; return initialLength - YLen;
|
|
613
|
+
; }
|
|
614
|
+
;
|
|
615
|
+
XoodyakSqueeze_offsetState equ (Xoodoo_Permute_12rounds_SAS+0)
|
|
616
|
+
XoodyakSqueeze_offsetY equ (Xoodoo_Permute_12rounds_SAS+4)
|
|
617
|
+
XoodyakSqueeze_offsetYLen equ (Xoodoo_Permute_12rounds_SAS+8)
|
|
618
|
+
XoodyakSqueeze_offsetInitialLen equ (Xoodoo_Permute_12rounds_SAS+12)
|
|
619
|
+
|
|
620
|
+
XoodyakSqueeze_SAS equ (Xoodoo_Permute_12rounds_SAS+20)
|
|
621
|
+
|
|
622
|
+
align 4
|
|
623
|
+
EXPORT Xoodyak_SqueezeKeyedFullBlocks
|
|
624
|
+
Xoodyak_SqueezeKeyedFullBlocks PROC
|
|
625
|
+
push {r3-r7,lr}
|
|
626
|
+
mov r4, r8
|
|
627
|
+
mov r5, r9
|
|
628
|
+
mov r6, r10
|
|
629
|
+
mov r7, r11
|
|
630
|
+
push {r4-r7}
|
|
631
|
+
|
|
632
|
+
sub sp, #XoodyakSqueeze_SAS
|
|
633
|
+
str r0, [sp, #XoodyakSqueeze_offsetState] ; setup variables on stack
|
|
634
|
+
str r1, [sp, #XoodyakSqueeze_offsetY]
|
|
635
|
+
str r2, [sp, #XoodyakSqueeze_offsetInitialLen]
|
|
636
|
+
subs r2, r2, #24
|
|
637
|
+
str r2, [sp, #XoodyakSqueeze_offsetYLen]
|
|
638
|
+
ldr r5, =Xoodyak_SqueezeKeyedFullBlocks_Ret+1
|
|
639
|
+
str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
|
|
640
|
+
|
|
641
|
+
ldm r0!, {r3,r5,r6,r7} ; state in registers
|
|
642
|
+
mov r8, r5
|
|
643
|
+
mov r9, r6
|
|
644
|
+
str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
645
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
646
|
+
mov r10, r4
|
|
647
|
+
mov r11, r5
|
|
648
|
+
mov r12, r6
|
|
649
|
+
mov lr, r7
|
|
650
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
651
|
+
Xoodyak_SqueezeKeyedFullBlocks_Loop
|
|
652
|
+
movs r0, #1
|
|
653
|
+
eors r3, r3, r0
|
|
654
|
+
ldr r0, =Xoodoo_Permute_12roundsAsm
|
|
655
|
+
bx r0
|
|
656
|
+
align 4
|
|
657
|
+
ltorg
|
|
658
|
+
Xoodyak_SqueezeKeyedFullBlocks_Ret
|
|
659
|
+
ldr r0, [sp, #XoodyakSqueeze_offsetY]
|
|
660
|
+
lsls r1, r0, #30
|
|
661
|
+
bne Xoodyak_SqueezeKeyedFullBlocks_Unaligned
|
|
662
|
+
Xoodyak_SqueezeKeyedFullBlocks_Aligned
|
|
663
|
+
stmia r0!, {r3}
|
|
664
|
+
mov r1, r8
|
|
665
|
+
mov r2, r9
|
|
666
|
+
stmia r0!, {r1, r2}
|
|
667
|
+
ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
668
|
+
mov r2, r10
|
|
669
|
+
stmia r0!, {r1, r2}
|
|
670
|
+
mov r1, r11
|
|
671
|
+
stmia r0!, {r1}
|
|
672
|
+
Xoodyak_SqueezeKeyedFullBlocks_EndLoop
|
|
673
|
+
str r0, [sp, #XoodyakSqueeze_offsetY]
|
|
674
|
+
ldr r1, [sp, #XoodyakSqueeze_offsetYLen]
|
|
675
|
+
subs r1, r1, #24
|
|
676
|
+
str r1, [sp, #XoodyakSqueeze_offsetYLen]
|
|
677
|
+
bcs Xoodyak_SqueezeKeyedFullBlocks_Loop
|
|
678
|
+
ldr r0, [sp, #XoodyakSqueeze_offsetState] ; Save state
|
|
679
|
+
stm r0!, {r3}
|
|
680
|
+
mov r1, r8
|
|
681
|
+
mov r2, r9
|
|
682
|
+
ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
683
|
+
stm r0!, {r1,r2,r3}
|
|
684
|
+
mov r1, r10
|
|
685
|
+
mov r2, r11
|
|
686
|
+
mov r3, r12
|
|
687
|
+
stm r0!, {r1,r2,r3}
|
|
688
|
+
mov r1, lr
|
|
689
|
+
stm r0!, {r1,r4,r5,r6,r7}
|
|
690
|
+
ldr r0, [sp, #XoodyakSqueeze_offsetInitialLen] ; Compute processed length
|
|
691
|
+
ldr r2, [sp, #XoodyakSqueeze_offsetYLen]
|
|
692
|
+
adds r2, r2, #24
|
|
693
|
+
subs r0, r0, r2
|
|
694
|
+
add sp, #XoodyakSqueeze_SAS ; Free stack and pop
|
|
695
|
+
pop {r4-r7}
|
|
696
|
+
mov r8, r4
|
|
697
|
+
mov r9, r5
|
|
698
|
+
mov r10, r6
|
|
699
|
+
mov r11, r7
|
|
700
|
+
pop {r3-r7,pc}
|
|
701
|
+
Xoodyak_SqueezeKeyedFullBlocks_Unaligned
|
|
702
|
+
mStoreU r0, 0, r3, r2, locRegL
|
|
703
|
+
mStoreU r0, 4, r8, r2, locRegH
|
|
704
|
+
mStoreU r0, 8, r9, r2, locRegH
|
|
705
|
+
ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
706
|
+
mStoreU r0, 12, r1, r2, locRegL
|
|
707
|
+
mStoreU r0, 16, r10, r2, locRegH
|
|
708
|
+
mStoreU r0, 20, r11, r2, locRegH
|
|
709
|
+
adds r0, r0, #24
|
|
710
|
+
b Xoodyak_SqueezeKeyedFullBlocks_EndLoop
|
|
711
|
+
ENDP
|
|
712
|
+
|
|
713
|
+
; ----------------------------------------------------------------------------
|
|
714
|
+
;
|
|
715
|
+
; size_t Xoodyak_SqueezeHashFullBlocks(void *state, uint8_t *Y, size_t YLen)
|
|
716
|
+
; {
|
|
717
|
+
; size_t initialLength = YLen;
|
|
718
|
+
;
|
|
719
|
+
; do {
|
|
720
|
+
; SnP_AddByte(state, 0x01, 0); /* Xoodyak_Down(instance, NULL, 0, 0); */
|
|
721
|
+
; SnP_Permute(state); /* Xoodyak_Up(instance, Y, Xoodyak_Rhash, 0); */
|
|
722
|
+
; SnP_ExtractBytes(state, Y, 0, Xoodyak_Rhash);
|
|
723
|
+
; Y += Xoodyak_Rhash;
|
|
724
|
+
; YLen -= Xoodyak_Rhash;
|
|
725
|
+
; } while (YLen >= Xoodyak_Rhash);
|
|
726
|
+
; return initialLength - YLen;
|
|
727
|
+
; }
|
|
728
|
+
;
|
|
729
|
+
align 4
|
|
730
|
+
EXPORT Xoodyak_SqueezeHashFullBlocks
|
|
731
|
+
Xoodyak_SqueezeHashFullBlocks PROC
|
|
732
|
+
push {r3-r7,lr}
|
|
733
|
+
mov r4, r8
|
|
734
|
+
mov r5, r9
|
|
735
|
+
mov r6, r10
|
|
736
|
+
mov r7, r11
|
|
737
|
+
push {r4-r7}
|
|
738
|
+
|
|
739
|
+
sub sp, #XoodyakSqueeze_SAS
|
|
740
|
+
str r0, [sp, #XoodyakSqueeze_offsetState] ; setup variables on stack
|
|
741
|
+
str r1, [sp, #XoodyakSqueeze_offsetY]
|
|
742
|
+
str r2, [sp, #XoodyakSqueeze_offsetInitialLen]
|
|
743
|
+
subs r2, r2, #16
|
|
744
|
+
str r2, [sp, #XoodyakSqueeze_offsetYLen]
|
|
745
|
+
ldr r5, =Xoodyak_SqueezeHashFullBlocks_Ret+1
|
|
746
|
+
str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
|
|
747
|
+
|
|
748
|
+
ldm r0!, {r3,r5,r6,r7} ; state in registers
|
|
749
|
+
mov r8, r5
|
|
750
|
+
mov r9, r6
|
|
751
|
+
str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
752
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
753
|
+
mov r10, r4
|
|
754
|
+
mov r11, r5
|
|
755
|
+
mov r12, r6
|
|
756
|
+
mov lr, r7
|
|
757
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
758
|
+
Xoodyak_SqueezeHashFullBlocks_Loop
|
|
759
|
+
movs r0, #1
|
|
760
|
+
eors r3, r3, r0
|
|
761
|
+
ldr r0, =Xoodoo_Permute_12roundsAsm
|
|
762
|
+
bx r0
|
|
763
|
+
align 4
|
|
764
|
+
ltorg
|
|
765
|
+
Xoodyak_SqueezeHashFullBlocks_Ret
|
|
766
|
+
ldr r0, [sp, #XoodyakSqueeze_offsetY]
|
|
767
|
+
lsls r1, r0, #30
|
|
768
|
+
bne Xoodyak_SqueezeHashFullBlocks_Unaligned
|
|
769
|
+
Xoodyak_SqueezeHashFullBlocks_Aligned
|
|
770
|
+
stmia r0!, {r3}
|
|
771
|
+
mov r1, r8
|
|
772
|
+
mov r2, r9
|
|
773
|
+
stmia r0!, {r1, r2}
|
|
774
|
+
ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
775
|
+
stmia r0!, {r1}
|
|
776
|
+
Xoodyak_SqueezeHashFullBlocks_EndLoop
|
|
777
|
+
str r0, [sp, #XoodyakSqueeze_offsetY]
|
|
778
|
+
ldr r1, [sp, #XoodyakSqueeze_offsetYLen]
|
|
779
|
+
subs r1, r1, #16
|
|
780
|
+
str r1, [sp, #XoodyakSqueeze_offsetYLen]
|
|
781
|
+
bcs Xoodyak_SqueezeHashFullBlocks_Loop
|
|
782
|
+
ldr r0, [sp, #XoodyakSqueeze_offsetState] ; Save state
|
|
783
|
+
stm r0!, {r3}
|
|
784
|
+
mov r1, r8
|
|
785
|
+
mov r2, r9
|
|
786
|
+
ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
787
|
+
stm r0!, {r1,r2,r3}
|
|
788
|
+
mov r1, r10
|
|
789
|
+
mov r2, r11
|
|
790
|
+
mov r3, r12
|
|
791
|
+
stm r0!, {r1,r2,r3}
|
|
792
|
+
mov r1, lr
|
|
793
|
+
stm r0!, {r1,r4,r5,r6,r7}
|
|
794
|
+
ldr r0, [sp, #XoodyakSqueeze_offsetInitialLen] ; Compute processed length
|
|
795
|
+
ldr r2, [sp, #XoodyakSqueeze_offsetYLen]
|
|
796
|
+
adds r2, r2, #16
|
|
797
|
+
subs r0, r0, r2
|
|
798
|
+
add sp, #XoodyakSqueeze_SAS ; Free stack and pop
|
|
799
|
+
pop {r4-r7}
|
|
800
|
+
mov r8, r4
|
|
801
|
+
mov r9, r5
|
|
802
|
+
mov r10, r6
|
|
803
|
+
mov r11, r7
|
|
804
|
+
pop {r3-r7,pc}
|
|
805
|
+
Xoodyak_SqueezeHashFullBlocks_Unaligned
|
|
806
|
+
mStoreU r0, 0, r3, r2, locRegL
|
|
807
|
+
mStoreU r0, 4, r8, r2, locRegH
|
|
808
|
+
mStoreU r0, 8, r9, r2, locRegH
|
|
809
|
+
ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
810
|
+
mStoreU r0, 12, r1, r2, locRegL
|
|
811
|
+
adds r0, r0, #16
|
|
812
|
+
b Xoodyak_SqueezeHashFullBlocks_EndLoop
|
|
813
|
+
ENDP
|
|
814
|
+
|
|
815
|
+
; ----------------------------------------------------------------------------
|
|
816
|
+
;
|
|
817
|
+
; size_t Xoodyak_EncryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
|
|
818
|
+
; {
|
|
819
|
+
; size_t initialLength = IOLen;
|
|
820
|
+
;
|
|
821
|
+
; do {
|
|
822
|
+
; SnP_Permute(state);
|
|
823
|
+
; SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout);
|
|
824
|
+
; SnP_OverwriteBytes(state, O, 0, Xoodyak_Rkout);
|
|
825
|
+
; SnP_AddByte(state, 0x01, Xoodyak_Rkout);
|
|
826
|
+
; I += Xoodyak_Rkout;
|
|
827
|
+
; O += Xoodyak_Rkout;
|
|
828
|
+
; IOLen -= Xoodyak_Rkout;
|
|
829
|
+
; } while (IOLen >= Xoodyak_Rkout);
|
|
830
|
+
; return initialLength - IOLen;
|
|
831
|
+
; }
|
|
832
|
+
;
|
|
833
|
+
XoodyakCrypt_offsetState equ (Xoodoo_Permute_12rounds_SAS+0)
|
|
834
|
+
XoodyakCrypt_offsetI equ (Xoodoo_Permute_12rounds_SAS+4)
|
|
835
|
+
XoodyakCrypt_offsetO equ (Xoodoo_Permute_12rounds_SAS+8)
|
|
836
|
+
XoodyakCrypt_offsetIOLen equ (Xoodoo_Permute_12rounds_SAS+12)
|
|
837
|
+
XoodyakCrypt_offsetInitialLen equ (Xoodoo_Permute_12rounds_SAS+16)
|
|
838
|
+
XoodyakCrypt_SAS equ (Xoodoo_Permute_12rounds_SAS+20)
|
|
839
|
+
|
|
840
|
+
align 4
|
|
841
|
+
EXPORT Xoodyak_EncryptFullBlocks
|
|
842
|
+
Xoodyak_EncryptFullBlocks PROC
|
|
843
|
+
push {r3-r7,lr}
|
|
844
|
+
mov r4, r8
|
|
845
|
+
mov r5, r9
|
|
846
|
+
mov r6, r10
|
|
847
|
+
mov r7, r11
|
|
848
|
+
push {r4-r7}
|
|
849
|
+
|
|
850
|
+
sub sp, #XoodyakCrypt_SAS
|
|
851
|
+
str r0, [sp, #XoodyakCrypt_offsetState] ; setup variables on stack
|
|
852
|
+
str r1, [sp, #XoodyakCrypt_offsetI]
|
|
853
|
+
str r2, [sp, #XoodyakCrypt_offsetO]
|
|
854
|
+
str r3, [sp, #XoodyakCrypt_offsetInitialLen]
|
|
855
|
+
subs r3, r3, #24
|
|
856
|
+
str r3, [sp, #XoodyakCrypt_offsetIOLen]
|
|
857
|
+
ldr r5, =Xoodyak_EncryptFullBlocks_Ret+1
|
|
858
|
+
str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
|
|
859
|
+
|
|
860
|
+
ldm r0!, {r3,r5,r6,r7} ; state in registers
|
|
861
|
+
mov r8, r5
|
|
862
|
+
mov r9, r6
|
|
863
|
+
str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
864
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
865
|
+
mov r10, r4
|
|
866
|
+
mov r11, r5
|
|
867
|
+
mov r12, r6
|
|
868
|
+
mov lr, r7
|
|
869
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
870
|
+
Xoodyak_EncryptFullBlocks_Loop
|
|
871
|
+
ldr r0, =Xoodoo_Permute_12roundsAsm
|
|
872
|
+
bx r0
|
|
873
|
+
align 4
|
|
874
|
+
ltorg
|
|
875
|
+
Xoodyak_EncryptFullBlocks_Ret
|
|
876
|
+
push {r4, r5}
|
|
877
|
+
ldr r5, [sp, #XoodyakCrypt_offsetI+8]
|
|
878
|
+
ldr r4, [sp, #XoodyakCrypt_offsetO+8]
|
|
879
|
+
mov r0, r4
|
|
880
|
+
ands r0, r0, r5
|
|
881
|
+
lsls r0, r0, #30
|
|
882
|
+
bne Xoodyak_EncryptFullBlocks_Unaligned
|
|
883
|
+
Xoodyak_EncryptFullBlocks_Aligned
|
|
884
|
+
ldmia r5!, {r0}
|
|
885
|
+
eors r3, r3, r0
|
|
886
|
+
stmia r4!, {r3}
|
|
887
|
+
|
|
888
|
+
ldmia r5!, {r0}
|
|
889
|
+
mov r1, r8
|
|
890
|
+
eors r1, r1, r0
|
|
891
|
+
stmia r4!, {r1}
|
|
892
|
+
mov r8, r1
|
|
893
|
+
|
|
894
|
+
ldmia r5!, {r0}
|
|
895
|
+
mov r1, r9
|
|
896
|
+
eors r1, r1, r0
|
|
897
|
+
stmia r4!, {r1}
|
|
898
|
+
mov r9, r1
|
|
899
|
+
|
|
900
|
+
ldmia r5!, {r0}
|
|
901
|
+
ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
|
|
902
|
+
eors r1, r1, r0
|
|
903
|
+
stmia r4!, {r1}
|
|
904
|
+
str r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
|
|
905
|
+
|
|
906
|
+
ldmia r5!, {r0}
|
|
907
|
+
mov r1, r10
|
|
908
|
+
eors r1, r1, r0
|
|
909
|
+
stmia r4!, {r1}
|
|
910
|
+
mov r10, r1
|
|
911
|
+
|
|
912
|
+
ldmia r5!, {r0}
|
|
913
|
+
mov r1, r11
|
|
914
|
+
eors r1, r1, r0
|
|
915
|
+
stmia r4!, {r1}
|
|
916
|
+
mov r11, r1
|
|
917
|
+
Xoodyak_EncryptFullBlocks_EndLoop
|
|
918
|
+
movs r0, #1
|
|
919
|
+
mov r1, r12
|
|
920
|
+
eors r1, r1, r0
|
|
921
|
+
mov r12, r1
|
|
922
|
+
str r5, [sp, #XoodyakCrypt_offsetI+8]
|
|
923
|
+
str r4, [sp, #XoodyakCrypt_offsetO+8]
|
|
924
|
+
pop {r4, r5}
|
|
925
|
+
ldr r1, [sp, #XoodyakCrypt_offsetIOLen]
|
|
926
|
+
subs r1, r1, #24
|
|
927
|
+
str r1, [sp, #XoodyakCrypt_offsetIOLen]
|
|
928
|
+
bcs Xoodyak_EncryptFullBlocks_Loop
|
|
929
|
+
ldr r0, [sp, #XoodyakCrypt_offsetState] ; Save state
|
|
930
|
+
stm r0!, {r3}
|
|
931
|
+
mov r1, r8
|
|
932
|
+
mov r2, r9
|
|
933
|
+
ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
934
|
+
stm r0!, {r1,r2,r3}
|
|
935
|
+
mov r1, r10
|
|
936
|
+
mov r2, r11
|
|
937
|
+
mov r3, r12
|
|
938
|
+
stm r0!, {r1,r2,r3}
|
|
939
|
+
mov r1, lr
|
|
940
|
+
stm r0!, {r1,r4,r5,r6,r7}
|
|
941
|
+
ldr r0, [sp, #XoodyakCrypt_offsetInitialLen] ; Compute processed length
|
|
942
|
+
ldr r2, [sp, #XoodyakCrypt_offsetIOLen]
|
|
943
|
+
adds r2, r2, #24
|
|
944
|
+
subs r0, r0, r2
|
|
945
|
+
add sp, #XoodyakCrypt_SAS ; Free stack and pop
|
|
946
|
+
pop {r4-r7}
|
|
947
|
+
mov r8, r4
|
|
948
|
+
mov r9, r5
|
|
949
|
+
mov r10, r6
|
|
950
|
+
mov r11, r7
|
|
951
|
+
pop {r3-r7,pc}
|
|
952
|
+
Xoodyak_EncryptFullBlocks_Unaligned
|
|
953
|
+
mLoadU r0, r5, 0, r2
|
|
954
|
+
eors r3, r3, r0
|
|
955
|
+
mStoreU r4, 0, r3, r2, locRegL
|
|
956
|
+
|
|
957
|
+
mLoadU r0, r5, 4, r2
|
|
958
|
+
mov r1, r8
|
|
959
|
+
eors r1, r1, r0
|
|
960
|
+
mStoreU r4, 4, r1, r2, locRegL
|
|
961
|
+
mov r8, r1
|
|
962
|
+
|
|
963
|
+
mLoadU r0, r5, 8, r2
|
|
964
|
+
mov r1, r9
|
|
965
|
+
eors r1, r1, r0
|
|
966
|
+
mStoreU r4, 8, r1, r2, locRegL
|
|
967
|
+
mov r9, r1
|
|
968
|
+
|
|
969
|
+
mLoadU r0, r5, 12, r2
|
|
970
|
+
ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
|
|
971
|
+
eors r1, r1, r0
|
|
972
|
+
mStoreU r4, 12, r1, r2, locRegL
|
|
973
|
+
str r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
|
|
974
|
+
|
|
975
|
+
mLoadU r0, r5, 16, r2
|
|
976
|
+
mov r1, r10
|
|
977
|
+
eors r1, r1, r0
|
|
978
|
+
mStoreU r4, 16, r1, r2, locRegL
|
|
979
|
+
mov r10, r1
|
|
980
|
+
|
|
981
|
+
mLoadU r0, r5, 20, r2
|
|
982
|
+
mov r1, r11
|
|
983
|
+
eors r1, r1, r0
|
|
984
|
+
mStoreU r4, 20, r1, r2, locRegL
|
|
985
|
+
mov r11, r1
|
|
986
|
+
|
|
987
|
+
adds r4, r4, #24
|
|
988
|
+
adds r5, r5, #24
|
|
989
|
+
b Xoodyak_EncryptFullBlocks_EndLoop
|
|
990
|
+
ENDP
|
|
991
|
+
|
|
992
|
+
; ----------------------------------------------------------------------------
|
|
993
|
+
;
|
|
994
|
+
; size_t Xoodyak_DecryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
|
|
995
|
+
; {
|
|
996
|
+
; size_t initialLength = IOLen;
|
|
997
|
+
;
|
|
998
|
+
; do {
|
|
999
|
+
; SnP_Permute(state);
|
|
1000
|
+
; SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout);
|
|
1001
|
+
; SnP_AddBytes(state, O, 0, Xoodyak_Rkout);
|
|
1002
|
+
; SnP_AddByte(state, 0x01, Xoodyak_Rkout);
|
|
1003
|
+
; I += Xoodyak_Rkout;
|
|
1004
|
+
; O += Xoodyak_Rkout;
|
|
1005
|
+
; IOLen -= Xoodyak_Rkout;
|
|
1006
|
+
; } while (IOLen >= Xoodyak_Rkout);
|
|
1007
|
+
; return initialLength - IOLen;
|
|
1008
|
+
; }
|
|
1009
|
+
;
|
|
1010
|
+
align 4
|
|
1011
|
+
EXPORT Xoodyak_DecryptFullBlocks
|
|
1012
|
+
Xoodyak_DecryptFullBlocks PROC
|
|
1013
|
+
push {r3-r7,lr}
|
|
1014
|
+
mov r4, r8
|
|
1015
|
+
mov r5, r9
|
|
1016
|
+
mov r6, r10
|
|
1017
|
+
mov r7, r11
|
|
1018
|
+
push {r4-r7}
|
|
1019
|
+
|
|
1020
|
+
sub sp, #XoodyakCrypt_SAS
|
|
1021
|
+
str r0, [sp, #XoodyakCrypt_offsetState] ; setup variables on stack
|
|
1022
|
+
str r1, [sp, #XoodyakCrypt_offsetI]
|
|
1023
|
+
str r2, [sp, #XoodyakCrypt_offsetO]
|
|
1024
|
+
str r3, [sp, #XoodyakCrypt_offsetInitialLen]
|
|
1025
|
+
subs r3, r3, #24
|
|
1026
|
+
str r3, [sp, #XoodyakCrypt_offsetIOLen]
|
|
1027
|
+
ldr r5, =Xoodyak_DecryptFullBlocks_Ret+1
|
|
1028
|
+
str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
|
|
1029
|
+
|
|
1030
|
+
ldm r0!, {r3,r5,r6,r7} ; state in registers
|
|
1031
|
+
mov r8, r5
|
|
1032
|
+
mov r9, r6
|
|
1033
|
+
str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
1034
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
1035
|
+
mov r10, r4
|
|
1036
|
+
mov r11, r5
|
|
1037
|
+
mov r12, r6
|
|
1038
|
+
mov lr, r7
|
|
1039
|
+
ldm r0!, {r4,r5,r6,r7}
|
|
1040
|
+
Xoodyak_DecryptFullBlocks_Loop
|
|
1041
|
+
ldr r0, =Xoodoo_Permute_12roundsAsm
|
|
1042
|
+
bx r0
|
|
1043
|
+
align 4
|
|
1044
|
+
ltorg
|
|
1045
|
+
Xoodyak_DecryptFullBlocks_Ret
|
|
1046
|
+
push {r4, r5}
|
|
1047
|
+
ldr r5, [sp, #XoodyakCrypt_offsetI+8]
|
|
1048
|
+
ldr r4, [sp, #XoodyakCrypt_offsetO+8]
|
|
1049
|
+
mov r0, r4
|
|
1050
|
+
ands r0, r0, r5
|
|
1051
|
+
lsls r0, r0, #30
|
|
1052
|
+
bne Xoodyak_DecryptFullBlocks_Unaligned
|
|
1053
|
+
Xoodyak_DecryptFullBlocks_Aligned
|
|
1054
|
+
ldmia r5!, {r0}
|
|
1055
|
+
eors r3, r3, r0
|
|
1056
|
+
stmia r4!, {r3}
|
|
1057
|
+
mov r3, r0
|
|
1058
|
+
|
|
1059
|
+
ldmia r5!, {r0}
|
|
1060
|
+
mov r1, r8
|
|
1061
|
+
eors r1, r1, r0
|
|
1062
|
+
stmia r4!, {r1}
|
|
1063
|
+
mov r8, r0
|
|
1064
|
+
|
|
1065
|
+
ldmia r5!, {r0}
|
|
1066
|
+
mov r1, r9
|
|
1067
|
+
eors r1, r1, r0
|
|
1068
|
+
stmia r4!, {r1}
|
|
1069
|
+
mov r9, r0
|
|
1070
|
+
|
|
1071
|
+
ldmia r5!, {r0}
|
|
1072
|
+
ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
|
|
1073
|
+
eors r1, r1, r0
|
|
1074
|
+
stmia r4!, {r1}
|
|
1075
|
+
str r0, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
|
|
1076
|
+
|
|
1077
|
+
ldmia r5!, {r0}
|
|
1078
|
+
mov r1, r10
|
|
1079
|
+
eors r1, r1, r0
|
|
1080
|
+
stmia r4!, {r1}
|
|
1081
|
+
mov r10, r0
|
|
1082
|
+
|
|
1083
|
+
ldmia r5!, {r0}
|
|
1084
|
+
mov r1, r11
|
|
1085
|
+
eors r1, r1, r0
|
|
1086
|
+
stmia r4!, {r1}
|
|
1087
|
+
mov r11, r0
|
|
1088
|
+
Xoodyak_DecryptFullBlocks_EndLoop
|
|
1089
|
+
movs r0, #1
|
|
1090
|
+
mov r1, r12
|
|
1091
|
+
eors r1, r1, r0
|
|
1092
|
+
mov r12, r1
|
|
1093
|
+
str r5, [sp, #XoodyakCrypt_offsetI+8]
|
|
1094
|
+
str r4, [sp, #XoodyakCrypt_offsetO+8]
|
|
1095
|
+
pop {r4, r5}
|
|
1096
|
+
ldr r1, [sp, #XoodyakCrypt_offsetIOLen]
|
|
1097
|
+
subs r1, r1, #24
|
|
1098
|
+
str r1, [sp, #XoodyakCrypt_offsetIOLen]
|
|
1099
|
+
bcs Xoodyak_DecryptFullBlocks_Loop
|
|
1100
|
+
ldr r0, [sp, #XoodyakCrypt_offsetState] ; Save state
|
|
1101
|
+
stm r0!, {r3}
|
|
1102
|
+
mov r1, r8
|
|
1103
|
+
mov r2, r9
|
|
1104
|
+
ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
|
|
1105
|
+
stm r0!, {r1,r2,r3}
|
|
1106
|
+
mov r1, r10
|
|
1107
|
+
mov r2, r11
|
|
1108
|
+
mov r3, r12
|
|
1109
|
+
stm r0!, {r1,r2,r3}
|
|
1110
|
+
mov r1, lr
|
|
1111
|
+
stm r0!, {r1,r4,r5,r6,r7}
|
|
1112
|
+
ldr r0, [sp, #XoodyakCrypt_offsetInitialLen] ; Compute processed length
|
|
1113
|
+
ldr r2, [sp, #XoodyakCrypt_offsetIOLen]
|
|
1114
|
+
adds r2, r2, #24
|
|
1115
|
+
subs r0, r0, r2
|
|
1116
|
+
add sp, #XoodyakCrypt_SAS ; Free stack and pop
|
|
1117
|
+
pop {r4-r7}
|
|
1118
|
+
mov r8, r4
|
|
1119
|
+
mov r9, r5
|
|
1120
|
+
mov r10, r6
|
|
1121
|
+
mov r11, r7
|
|
1122
|
+
pop {r3-r7,pc}
|
|
1123
|
+
Xoodyak_DecryptFullBlocks_Unaligned
|
|
1124
|
+
mLoadU r0, r5, 0, r2
|
|
1125
|
+
eors r3, r3, r0
|
|
1126
|
+
mStoreU r4, 0, r3, r2, locRegL
|
|
1127
|
+
mov r3, r0
|
|
1128
|
+
|
|
1129
|
+
mLoadU r0, r5, 4, r2
|
|
1130
|
+
mov r1, r8
|
|
1131
|
+
eors r1, r1, r0
|
|
1132
|
+
mStoreU r4, 4, r1, r2, locRegL
|
|
1133
|
+
mov r8, r0
|
|
1134
|
+
|
|
1135
|
+
mLoadU r0, r5, 8, r2
|
|
1136
|
+
mov r1, r9
|
|
1137
|
+
eors r1, r1, r0
|
|
1138
|
+
mStoreU r4, 8, r1, r2, locRegL
|
|
1139
|
+
mov r9, r0
|
|
1140
|
+
|
|
1141
|
+
mLoadU r0, r5, 12, r2
|
|
1142
|
+
ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
|
|
1143
|
+
eors r1, r1, r0
|
|
1144
|
+
mStoreU r4, 12, r1, r2, locRegL
|
|
1145
|
+
str r0, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
|
|
1146
|
+
|
|
1147
|
+
mLoadU r0, r5, 16, r2
|
|
1148
|
+
mov r1, r10
|
|
1149
|
+
eors r1, r1, r0
|
|
1150
|
+
mStoreU r4, 16, r1, r2, locRegL
|
|
1151
|
+
mov r10, r0
|
|
1152
|
+
|
|
1153
|
+
mLoadU r0, r5, 20, r2
|
|
1154
|
+
mov r1, r11
|
|
1155
|
+
eors r1, r1, r0
|
|
1156
|
+
mStoreU r4, 20, r1, r2, locRegL
|
|
1157
|
+
mov r11, r0
|
|
1158
|
+
|
|
1159
|
+
adds r4, r4, #24
|
|
1160
|
+
adds r5, r5, #24
|
|
1161
|
+
b Xoodyak_DecryptFullBlocks_EndLoop
|
|
1162
|
+
ENDP
|
|
1163
|
+
|
|
1164
|
+
END
|