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,527 @@
|
|
|
1
|
+
;
|
|
2
|
+
; The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
; https://github.com/XKCP/XKCP
|
|
4
|
+
;
|
|
5
|
+
; The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
|
|
6
|
+
;
|
|
7
|
+
; Implementation by Ronny Van Keer, hereby denoted as "the implementer".
|
|
8
|
+
;
|
|
9
|
+
; For more information, feedback or questions, please refer to the Keccak Team website:
|
|
10
|
+
; https://keccak.team/
|
|
11
|
+
;
|
|
12
|
+
; To the extent possible under law, the implementer has waived all copyright
|
|
13
|
+
; and related or neighboring rights to the source code in this file.
|
|
14
|
+
; http://creativecommons.org/publicdomain/zero/1.0/
|
|
15
|
+
;
|
|
16
|
+
; ---
|
|
17
|
+
;
|
|
18
|
+
; This file implements Keccak-p[800] in a SnP-compatible way.
|
|
19
|
+
; Please refer to SnP-documentation.h for more details.
|
|
20
|
+
;
|
|
21
|
+
; This implementation comes with KeccakP-800-SnP.h in the same folder.
|
|
22
|
+
; Please refer to LowLevel.build for the exact list of other files it must be combined with.
|
|
23
|
+
;
|
|
24
|
+
|
|
25
|
+
; WARNING: This implementation assumes a little endian CPU with ARMv6M architecture (e.g., Cortex-M0) and the ARMCC compiler.
|
|
26
|
+
|
|
27
|
+
PRESERVE8
|
|
28
|
+
THUMB
|
|
29
|
+
AREA |.text|, CODE, READONLY
|
|
30
|
+
|
|
31
|
+
; ----------------------------------------------------------------------------
|
|
32
|
+
|
|
33
|
+
_ba equ 0*4
|
|
34
|
+
_be equ 1*4
|
|
35
|
+
_bi equ 2*4
|
|
36
|
+
_bo equ 3*4
|
|
37
|
+
_bu equ 4*4
|
|
38
|
+
_ga equ 5*4
|
|
39
|
+
_ge equ 6*4
|
|
40
|
+
_gi equ 7*4
|
|
41
|
+
_go equ 8*4
|
|
42
|
+
_gu equ 9*4
|
|
43
|
+
_ka equ 10*4
|
|
44
|
+
_ke equ 11*4
|
|
45
|
+
_ki equ 12*4
|
|
46
|
+
_ko equ 13*4
|
|
47
|
+
_ku equ 14*4
|
|
48
|
+
_ma equ 15*4
|
|
49
|
+
_me equ 16*4
|
|
50
|
+
_mi equ 17*4
|
|
51
|
+
_mo equ 18*4
|
|
52
|
+
_mu equ 19*4
|
|
53
|
+
_sa equ 20*4
|
|
54
|
+
_se equ 21*4
|
|
55
|
+
_si equ 22*4
|
|
56
|
+
_so equ 23*4
|
|
57
|
+
_su equ 24*4
|
|
58
|
+
|
|
59
|
+
MACRO
|
|
60
|
+
xor5 $result,$ptr,$b,$g,$k,$m,$s
|
|
61
|
+
ldr $result, [$ptr, #$b]
|
|
62
|
+
ldr r6, [$ptr, #$g]
|
|
63
|
+
eors $result, $result, r6
|
|
64
|
+
ldr r6, [$ptr, #$k]
|
|
65
|
+
eors $result, $result, r6
|
|
66
|
+
ldr r6, [$ptr, #$m]
|
|
67
|
+
eors $result, $result, r6
|
|
68
|
+
ldr r6, [$ptr, #$s]
|
|
69
|
+
eors $result, $result, r6
|
|
70
|
+
MEND
|
|
71
|
+
|
|
72
|
+
MACRO ; Theta effect
|
|
73
|
+
te $d, $a, $b
|
|
74
|
+
rors $b, $b, r4
|
|
75
|
+
eors $b, $b, $a
|
|
76
|
+
mov $d, $b
|
|
77
|
+
MEND
|
|
78
|
+
|
|
79
|
+
MACRO ; Theta Rho Pi
|
|
80
|
+
trp $rBx, $sIn, $oIn, $rD, $rot
|
|
81
|
+
ldr $rBx, [$sIn, #$oIn]
|
|
82
|
+
mov r6, $rD
|
|
83
|
+
eors $rBx, $rBx, r6
|
|
84
|
+
if $rot != 0
|
|
85
|
+
movs r6, #32-$rot
|
|
86
|
+
rors $rBx, $rBx, r6
|
|
87
|
+
endif
|
|
88
|
+
MEND
|
|
89
|
+
|
|
90
|
+
MACRO ; Chi Iota
|
|
91
|
+
ci $sOut, $oOut, $ax0, $ax1, $ax2, $iota, $useax2
|
|
92
|
+
if $useax2 != 0
|
|
93
|
+
bics $ax2, $ax2, $ax1
|
|
94
|
+
eors $ax2, $ax2, $ax0
|
|
95
|
+
if $iota != 0
|
|
96
|
+
mov r6, r8
|
|
97
|
+
ldm r6!, { $ax1 }
|
|
98
|
+
mov r8, r6
|
|
99
|
+
eors $ax2, $ax2, $ax1
|
|
100
|
+
endif
|
|
101
|
+
str $ax2, [$sOut, #$oOut]
|
|
102
|
+
else
|
|
103
|
+
movs r6, $ax2
|
|
104
|
+
bics r6, r6, $ax1
|
|
105
|
+
eors r6, r6, $ax0
|
|
106
|
+
str r6, [$sOut, #$oOut]
|
|
107
|
+
endif
|
|
108
|
+
MEND
|
|
109
|
+
|
|
110
|
+
MACRO
|
|
111
|
+
KeccakRound $sOut, $sIn
|
|
112
|
+
|
|
113
|
+
; Prepare Theta effect
|
|
114
|
+
movs r4, #31
|
|
115
|
+
xor5 r1, $sIn, _be, _ge, _ke, _me, _se
|
|
116
|
+
xor5 r2, $sIn, _bu, _gu, _ku, _mu, _su
|
|
117
|
+
mov r6, r1
|
|
118
|
+
te r9, r2, r6
|
|
119
|
+
xor5 r3, $sIn, _bi, _gi, _ki, _mi, _si
|
|
120
|
+
te r12, r3, r2
|
|
121
|
+
xor5 r2, $sIn, _ba, _ga, _ka, _ma, _sa
|
|
122
|
+
te r10, r2, r3
|
|
123
|
+
xor5 r3, $sIn, _bo, _go, _ko, _mo, _so
|
|
124
|
+
te lr, r3, r2
|
|
125
|
+
te r11, r1, r3
|
|
126
|
+
|
|
127
|
+
; ThetaRhoPi ChiIota
|
|
128
|
+
trp r1, $sIn, _bo, r12, 28
|
|
129
|
+
trp r2, $sIn, _gu, lr, 20
|
|
130
|
+
trp r3, $sIn, _ka, r9, 3
|
|
131
|
+
trp r4, $sIn, _me, r10, 13
|
|
132
|
+
trp r5, $sIn, _si, r11, 29
|
|
133
|
+
ci $sOut, _gu, r5, r1, r2, 0, 0
|
|
134
|
+
ci $sOut, _go, r4, r5, r1, 0, 0
|
|
135
|
+
ci $sOut, _gi, r3, r4, r5, 0, 1
|
|
136
|
+
ci $sOut, _ge, r2, r3, r4, 0, 1
|
|
137
|
+
ci $sOut, _ga, r1, r2, r3, 0, 1
|
|
138
|
+
|
|
139
|
+
trp r1, $sIn, _be, r10, 1
|
|
140
|
+
trp r2, $sIn, _gi, r11, 6
|
|
141
|
+
trp r3, $sIn, _ko, r12, 25
|
|
142
|
+
trp r4, $sIn, _mu, lr, 8
|
|
143
|
+
trp r5, $sIn, _sa, r9, 18
|
|
144
|
+
ci $sOut, _ku, r5, r1, r2, 0, 0
|
|
145
|
+
ci $sOut, _ko, r4, r5, r1, 0, 0
|
|
146
|
+
ci $sOut, _ki, r3, r4, r5, 0, 1
|
|
147
|
+
ci $sOut, _ke, r2, r3, r4, 0, 1
|
|
148
|
+
ci $sOut, _ka, r1, r2, r3, 0, 1
|
|
149
|
+
|
|
150
|
+
trp r1, $sIn, _bu, lr, 27
|
|
151
|
+
trp r2, $sIn, _ga, r9, 4
|
|
152
|
+
trp r3, $sIn, _ke, r10, 10
|
|
153
|
+
trp r4, $sIn, _mi, r11, 15
|
|
154
|
+
trp r5, $sIn, _so, r12, 24
|
|
155
|
+
ci $sOut, _mu, r5, r1, r2, 0, 0
|
|
156
|
+
ci $sOut, _mo, r4, r5, r1, 0, 0
|
|
157
|
+
ci $sOut, _mi, r3, r4, r5, 0, 1
|
|
158
|
+
ci $sOut, _me, r2, r3, r4, 0, 1
|
|
159
|
+
ci $sOut, _ma, r1, r2, r3, 0, 1
|
|
160
|
+
|
|
161
|
+
trp r1, $sIn, _bi, r11, 30
|
|
162
|
+
trp r2, $sIn, _go, r12, 23
|
|
163
|
+
trp r3, $sIn, _ku, lr, 7
|
|
164
|
+
trp r4, $sIn, _ma, r9, 9
|
|
165
|
+
trp r5, $sIn, _se, r10, 2
|
|
166
|
+
ci $sOut, _su, r5, r1, r2, 0, 0
|
|
167
|
+
ci $sOut, _so, r4, r5, r1, 0, 0
|
|
168
|
+
ci $sOut, _si, r3, r4, r5, 0, 1
|
|
169
|
+
ci $sOut, _se, r2, r3, r4, 0, 1
|
|
170
|
+
ci $sOut, _sa, r1, r2, r3, 0, 1
|
|
171
|
+
|
|
172
|
+
trp r1, $sIn, _ba, r9, 0
|
|
173
|
+
trp r2, $sIn, _ge, r10, 12
|
|
174
|
+
trp r3, $sIn, _ki, r11, 11
|
|
175
|
+
trp r4, $sIn, _mo, r12, 21
|
|
176
|
+
trp r5, $sIn, _su, lr, 14
|
|
177
|
+
ci $sOut, _bu, r5, r1, r2, 0, 0
|
|
178
|
+
ci $sOut, _bo, r4, r5, r1, 0, 0
|
|
179
|
+
ci $sOut, _bi, r3, r4, r5, 0, 1
|
|
180
|
+
ci $sOut, _be, r2, r3, r4, 0, 1
|
|
181
|
+
ci $sOut, _ba, r1, r2, r3, 1, 1
|
|
182
|
+
MEND
|
|
183
|
+
|
|
184
|
+
; ----------------------------------------------------------------------------
|
|
185
|
+
;
|
|
186
|
+
; void KeccakP800_StaticInitialize( void )
|
|
187
|
+
;
|
|
188
|
+
ALIGN
|
|
189
|
+
EXPORT KeccakP800_StaticInitialize
|
|
190
|
+
KeccakP800_StaticInitialize PROC
|
|
191
|
+
bx lr
|
|
192
|
+
ENDP
|
|
193
|
+
|
|
194
|
+
; ----------------------------------------------------------------------------
|
|
195
|
+
;
|
|
196
|
+
; void KeccakP800_Initialize(void *state)
|
|
197
|
+
;
|
|
198
|
+
ALIGN
|
|
199
|
+
EXPORT KeccakP800_Initialize
|
|
200
|
+
KeccakP800_Initialize PROC
|
|
201
|
+
push {r4 - r5}
|
|
202
|
+
movs r1, #0
|
|
203
|
+
movs r2, #0
|
|
204
|
+
movs r3, #0
|
|
205
|
+
movs r4, #0
|
|
206
|
+
movs r5, #0
|
|
207
|
+
stmia r0!, { r1 - r5 }
|
|
208
|
+
stmia r0!, { r1 - r5 }
|
|
209
|
+
stmia r0!, { r1 - r5 }
|
|
210
|
+
stmia r0!, { r1 - r5 }
|
|
211
|
+
stmia r0!, { r1 - r5 }
|
|
212
|
+
pop {r4 - r5}
|
|
213
|
+
bx lr
|
|
214
|
+
ENDP
|
|
215
|
+
|
|
216
|
+
; ----------------------------------------------------------------------------
|
|
217
|
+
;
|
|
218
|
+
; void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
219
|
+
;
|
|
220
|
+
ALIGN
|
|
221
|
+
EXPORT KeccakP800_AddByte
|
|
222
|
+
KeccakP800_AddByte PROC
|
|
223
|
+
adds r0, r0, r2 ; state += offset
|
|
224
|
+
ldrb r2, [r0]
|
|
225
|
+
eors r2, r2, r1
|
|
226
|
+
strb r2, [r0]
|
|
227
|
+
bx lr
|
|
228
|
+
ENDP
|
|
229
|
+
|
|
230
|
+
; ----------------------------------------------------------------------------
|
|
231
|
+
;
|
|
232
|
+
; void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
233
|
+
;
|
|
234
|
+
ALIGN
|
|
235
|
+
EXPORT KeccakP800_AddBytes
|
|
236
|
+
KeccakP800_AddBytes PROC
|
|
237
|
+
push {r4,lr}
|
|
238
|
+
adds r0, r0, r2 ; state += offset
|
|
239
|
+
subs r3, r3, #4 ; if length >= 4
|
|
240
|
+
bcc KeccakP800_AddBytes_Bytes
|
|
241
|
+
movs r2, r0 ; and data pointer and offset both 32-bit aligned
|
|
242
|
+
orrs r2, r2, r1
|
|
243
|
+
lsls r2, #30
|
|
244
|
+
bne KeccakP800_AddBytes_Bytes
|
|
245
|
+
KeccakP800_AddBytes_LanesLoop ; then, perform on words
|
|
246
|
+
ldr r2, [r0]
|
|
247
|
+
ldmia r1!, {r4}
|
|
248
|
+
eors r2, r2, r4
|
|
249
|
+
stmia r0!, {r2}
|
|
250
|
+
subs r3, r3, #4
|
|
251
|
+
bcs KeccakP800_AddBytes_LanesLoop
|
|
252
|
+
KeccakP800_AddBytes_Bytes
|
|
253
|
+
adds r3, r3, #4
|
|
254
|
+
beq KeccakP800_AddBytes_Exit
|
|
255
|
+
subs r3, r3, #1
|
|
256
|
+
KeccakP800_AddBytes_BytesLoop
|
|
257
|
+
ldrb r2, [r0, r3]
|
|
258
|
+
ldrb r4, [r1, r3]
|
|
259
|
+
eors r2, r2, r4
|
|
260
|
+
strb r2, [r0, r3]
|
|
261
|
+
subs r3, r3, #1
|
|
262
|
+
bcs KeccakP800_AddBytes_BytesLoop
|
|
263
|
+
KeccakP800_AddBytes_Exit
|
|
264
|
+
pop {r4,pc}
|
|
265
|
+
ENDP
|
|
266
|
+
|
|
267
|
+
; ----------------------------------------------------------------------------
|
|
268
|
+
;
|
|
269
|
+
; void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
270
|
+
;
|
|
271
|
+
ALIGN
|
|
272
|
+
EXPORT KeccakP800_OverwriteBytes
|
|
273
|
+
KeccakP800_OverwriteBytes PROC
|
|
274
|
+
adds r0, r0, r2 ; state += offset
|
|
275
|
+
subs r3, r3, #4 ; if length >= 4
|
|
276
|
+
bcc KeccakP800_OverwriteBytes_Bytes
|
|
277
|
+
movs r2, r0 ; and data pointer and offset both 32-bit aligned
|
|
278
|
+
orrs r2, r2, r1
|
|
279
|
+
lsls r2, #30
|
|
280
|
+
bne KeccakP800_OverwriteBytes_Bytes
|
|
281
|
+
KeccakP800_OverwriteBytes_LanesLoop ; then, perform on words
|
|
282
|
+
ldmia r1!, {r2}
|
|
283
|
+
stmia r0!, {r2}
|
|
284
|
+
subs r3, r3, #4
|
|
285
|
+
bcs KeccakP800_OverwriteBytes_LanesLoop
|
|
286
|
+
KeccakP800_OverwriteBytes_Bytes
|
|
287
|
+
adds r3, r3, #4
|
|
288
|
+
beq KeccakP800_OverwriteBytes_Exit
|
|
289
|
+
subs r3, r3, #1
|
|
290
|
+
KeccakP800_OverwriteBytes_BytesLoop
|
|
291
|
+
ldrb r2, [r1, r3]
|
|
292
|
+
strb r2, [r0, r3]
|
|
293
|
+
subs r3, r3, #1
|
|
294
|
+
bcs KeccakP800_OverwriteBytes_BytesLoop
|
|
295
|
+
KeccakP800_OverwriteBytes_Exit
|
|
296
|
+
bx lr
|
|
297
|
+
ENDP
|
|
298
|
+
|
|
299
|
+
; ----------------------------------------------------------------------------
|
|
300
|
+
;
|
|
301
|
+
; void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
302
|
+
;
|
|
303
|
+
ALIGN
|
|
304
|
+
EXPORT KeccakP800_OverwriteWithZeroes
|
|
305
|
+
KeccakP800_OverwriteWithZeroes PROC
|
|
306
|
+
movs r3, #0
|
|
307
|
+
lsrs r2, r1, #2
|
|
308
|
+
beq KeccakP800_OverwriteWithZeroes_Bytes
|
|
309
|
+
KeccakP800_OverwriteWithZeroes_LoopLanes
|
|
310
|
+
stm r0!, { r3 }
|
|
311
|
+
subs r2, r2, #1
|
|
312
|
+
bne KeccakP800_OverwriteWithZeroes_LoopLanes
|
|
313
|
+
KeccakP800_OverwriteWithZeroes_Bytes
|
|
314
|
+
lsls r1, r1, #32-2
|
|
315
|
+
beq KeccakP800_OverwriteWithZeroes_Exit
|
|
316
|
+
lsrs r1, r1, #32-2
|
|
317
|
+
KeccakP800_OverwriteWithZeroes_LoopBytes
|
|
318
|
+
subs r1, r1, #1
|
|
319
|
+
strb r3, [r0, r1]
|
|
320
|
+
bne KeccakP800_OverwriteWithZeroes_LoopBytes
|
|
321
|
+
KeccakP800_OverwriteWithZeroes_Exit
|
|
322
|
+
bx lr
|
|
323
|
+
ENDP
|
|
324
|
+
|
|
325
|
+
; ----------------------------------------------------------------------------
|
|
326
|
+
;
|
|
327
|
+
; void KeccakP800_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
328
|
+
;
|
|
329
|
+
ALIGN
|
|
330
|
+
EXPORT KeccakP800_ExtractBytes
|
|
331
|
+
KeccakP800_ExtractBytes PROC
|
|
332
|
+
adds r0, r0, r2 ; state += offset
|
|
333
|
+
subs r3, r3, #4 ; if length >= 4
|
|
334
|
+
bcc KeccakP800_ExtractBytes_Bytes
|
|
335
|
+
movs r2, r0 ; and data pointer and offset both 32-bit aligned
|
|
336
|
+
orrs r2, r2, r1
|
|
337
|
+
lsls r2, #30
|
|
338
|
+
bne KeccakP800_ExtractBytes_Bytes
|
|
339
|
+
KeccakP800_ExtractBytes_LanesLoop ; then, perform on words
|
|
340
|
+
ldmia r0!, {r2}
|
|
341
|
+
stmia r1!, {r2}
|
|
342
|
+
subs r3, r3, #4
|
|
343
|
+
bcs KeccakP800_ExtractBytes_LanesLoop
|
|
344
|
+
KeccakP800_ExtractBytes_Bytes
|
|
345
|
+
adds r3, r3, #4
|
|
346
|
+
beq KeccakP800_ExtractBytes_Exit
|
|
347
|
+
subs r3, r3, #1
|
|
348
|
+
KeccakP800_ExtractBytes_BytesLoop
|
|
349
|
+
ldrb r2, [r0, r3]
|
|
350
|
+
strb r2, [r1, r3]
|
|
351
|
+
subs r3, r3, #1
|
|
352
|
+
bcs KeccakP800_ExtractBytes_BytesLoop
|
|
353
|
+
KeccakP800_ExtractBytes_Exit
|
|
354
|
+
bx lr
|
|
355
|
+
ENDP
|
|
356
|
+
|
|
357
|
+
; ----------------------------------------------------------------------------
|
|
358
|
+
;
|
|
359
|
+
; void KeccakP800_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
360
|
+
;
|
|
361
|
+
ALIGN
|
|
362
|
+
EXPORT KeccakP800_ExtractAndAddBytes
|
|
363
|
+
KeccakP800_ExtractAndAddBytes PROC
|
|
364
|
+
push {r4,r5}
|
|
365
|
+
adds r0, r0, r3 ; state += offset (offset register no longer needed, reuse for length)
|
|
366
|
+
ldr r3, [sp, #8] ; get length argument from stack
|
|
367
|
+
subs r3, r3, #4 ; if length >= 4
|
|
368
|
+
bcc KeccakP800_ExtractAndAddBytes_Bytes
|
|
369
|
+
movs r5, r0 ; and input/output/state pointer all 32-bit aligned
|
|
370
|
+
orrs r5, r5, r1
|
|
371
|
+
orrs r5, r5, r2
|
|
372
|
+
lsls r5, #30
|
|
373
|
+
bne KeccakP800_ExtractAndAddBytes_Bytes
|
|
374
|
+
KeccakP800_ExtractAndAddBytes_LanesLoop ; then, perform on words
|
|
375
|
+
ldmia r0!, {r5}
|
|
376
|
+
ldmia r1!, {r4}
|
|
377
|
+
eors r5, r5, r4
|
|
378
|
+
stmia r2!, {r5}
|
|
379
|
+
subs r3, r3, #4
|
|
380
|
+
bcs KeccakP800_ExtractAndAddBytes_LanesLoop
|
|
381
|
+
KeccakP800_ExtractAndAddBytes_Bytes
|
|
382
|
+
adds r3, r3, #4
|
|
383
|
+
beq KeccakP800_ExtractAndAddBytes_Exit
|
|
384
|
+
subs r3, r3, #1
|
|
385
|
+
KeccakP800_ExtractAndAddBytes_BytesLoop
|
|
386
|
+
ldrb r5, [r0, r3]
|
|
387
|
+
ldrb r4, [r1, r3]
|
|
388
|
+
eors r5, r5, r4
|
|
389
|
+
strb r5, [r2, r3]
|
|
390
|
+
subs r3, r3, #1
|
|
391
|
+
bcs KeccakP800_ExtractAndAddBytes_BytesLoop
|
|
392
|
+
KeccakP800_ExtractAndAddBytes_Exit
|
|
393
|
+
pop {r4,r5}
|
|
394
|
+
bx lr
|
|
395
|
+
ENDP
|
|
396
|
+
|
|
397
|
+
; ----------------------------------------------------------------------------
|
|
398
|
+
;
|
|
399
|
+
; void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
400
|
+
;
|
|
401
|
+
ALIGN
|
|
402
|
+
EXPORT KeccakP800_Permute_Nrounds
|
|
403
|
+
KeccakP800_Permute_Nrounds PROC
|
|
404
|
+
lsls r2, r1, #2
|
|
405
|
+
lsls r1, r1, #31
|
|
406
|
+
bne KeccakP800_Permute_NroundsOdd
|
|
407
|
+
adr r1, KeccakP800_Permute_RoundConstants0
|
|
408
|
+
subs r1, r1, r2
|
|
409
|
+
b KeccakP800_Permute
|
|
410
|
+
KeccakP800_Permute_NroundsOdd
|
|
411
|
+
adr r1, KeccakP800_Permute_RoundConstants0
|
|
412
|
+
subs r1, r1, r2
|
|
413
|
+
push { r4 - r6, lr }
|
|
414
|
+
mov r2, r8
|
|
415
|
+
mov r3, r9
|
|
416
|
+
mov r4, r10
|
|
417
|
+
mov r5, r11
|
|
418
|
+
mov r6, r12
|
|
419
|
+
push { r2 - r7 }
|
|
420
|
+
sub sp, sp, #25*4+4
|
|
421
|
+
mov r8, r1
|
|
422
|
+
; copy state to stack and use stack state as input
|
|
423
|
+
mov r7, r0
|
|
424
|
+
mov r0, sp
|
|
425
|
+
ldmia r7!, {r1-r5}
|
|
426
|
+
stmia r0!, {r1-r5}
|
|
427
|
+
ldmia r7!, {r1-r5}
|
|
428
|
+
stmia r0!, {r1-r5}
|
|
429
|
+
ldmia r7!, {r1-r5}
|
|
430
|
+
stmia r0!, {r1-r5}
|
|
431
|
+
ldmia r7!, {r1-r5}
|
|
432
|
+
stmia r0!, {r1-r5}
|
|
433
|
+
ldmia r7!, {r1-r5}
|
|
434
|
+
stmia r0!, {r1-r5}
|
|
435
|
+
subs r0, r0, #100
|
|
436
|
+
subs r7, r7, #100
|
|
437
|
+
b KeccakP800_Permute_RoundLoop
|
|
438
|
+
ENDP
|
|
439
|
+
|
|
440
|
+
; ----------------------------------------------------------------------------
|
|
441
|
+
;
|
|
442
|
+
; void KeccakP800_Permute_12rounds( void *state )
|
|
443
|
+
;
|
|
444
|
+
ALIGN
|
|
445
|
+
EXPORT KeccakP800_Permute_12rounds
|
|
446
|
+
KeccakP800_Permute_12rounds PROC
|
|
447
|
+
adr r1, KeccakP800_Permute_RoundConstants12
|
|
448
|
+
b KeccakP800_Permute
|
|
449
|
+
ENDP
|
|
450
|
+
|
|
451
|
+
; ----------------------------------------------------------------------------
|
|
452
|
+
;
|
|
453
|
+
; void KeccakP800_Permute_22rounds( void *state )
|
|
454
|
+
;
|
|
455
|
+
ALIGN
|
|
456
|
+
EXPORT KeccakP800_Permute_22rounds
|
|
457
|
+
KeccakP800_Permute_22rounds PROC
|
|
458
|
+
adr r1, KeccakP800_Permute_RoundConstants22
|
|
459
|
+
b KeccakP800_Permute
|
|
460
|
+
ENDP
|
|
461
|
+
|
|
462
|
+
ALIGN
|
|
463
|
+
KeccakP800_Permute_RoundConstants22
|
|
464
|
+
dcd 0x00000001
|
|
465
|
+
dcd 0x00008082
|
|
466
|
+
dcd 0x0000808a
|
|
467
|
+
dcd 0x80008000
|
|
468
|
+
dcd 0x0000808b
|
|
469
|
+
dcd 0x80000001
|
|
470
|
+
dcd 0x80008081
|
|
471
|
+
dcd 0x00008009
|
|
472
|
+
dcd 0x0000008a
|
|
473
|
+
dcd 0x00000088
|
|
474
|
+
KeccakP800_Permute_RoundConstants12
|
|
475
|
+
dcd 0x80008009
|
|
476
|
+
dcd 0x8000000a
|
|
477
|
+
dcd 0x8000808b
|
|
478
|
+
dcd 0x0000008b
|
|
479
|
+
dcd 0x00008089
|
|
480
|
+
dcd 0x00008003
|
|
481
|
+
dcd 0x00008002
|
|
482
|
+
dcd 0x00000080
|
|
483
|
+
dcd 0x0000800a
|
|
484
|
+
dcd 0x8000000a
|
|
485
|
+
dcd 0x80008081
|
|
486
|
+
dcd 0x00008080
|
|
487
|
+
KeccakP800_Permute_RoundConstants0
|
|
488
|
+
dcd 0xFF ; terminator
|
|
489
|
+
|
|
490
|
+
; ----------------------------------------------------------------------------
|
|
491
|
+
;
|
|
492
|
+
; void KeccakP800_Permute( void *state, void *rc )
|
|
493
|
+
;
|
|
494
|
+
ALIGN
|
|
495
|
+
KeccakP800_Permute PROC
|
|
496
|
+
push { r4 - r6, lr }
|
|
497
|
+
mov r2, r8
|
|
498
|
+
mov r3, r9
|
|
499
|
+
mov r4, r10
|
|
500
|
+
mov r5, r11
|
|
501
|
+
mov r6, r12
|
|
502
|
+
push { r2 - r7 }
|
|
503
|
+
sub sp, sp, #25*4+4
|
|
504
|
+
mov r8, r1
|
|
505
|
+
mov r7, sp
|
|
506
|
+
KeccakP800_Permute_RoundLoop
|
|
507
|
+
KeccakRound r7, r0
|
|
508
|
+
ldr r6, [r6]
|
|
509
|
+
cmp r6, #0xFF
|
|
510
|
+
beq KeccakP800_Permute_Done
|
|
511
|
+
mov r6, r7
|
|
512
|
+
mov r7, r0
|
|
513
|
+
mov r0, r6
|
|
514
|
+
b KeccakP800_Permute_RoundLoop
|
|
515
|
+
KeccakP800_Permute_Done
|
|
516
|
+
mov r0, r7
|
|
517
|
+
add sp,sp,#25*4+4
|
|
518
|
+
pop { r2 - r7 }
|
|
519
|
+
mov r8, r2
|
|
520
|
+
mov r9, r3
|
|
521
|
+
mov r10, r4
|
|
522
|
+
mov r11, r5
|
|
523
|
+
mov r12, r6
|
|
524
|
+
pop { r4 - r6, pc }
|
|
525
|
+
ENDP
|
|
526
|
+
|
|
527
|
+
END
|