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,517 @@
|
|
|
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 ARMv7M architecture (e.g., Cortex-M3) 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
|
+
_pRC equ 25*4
|
|
59
|
+
_SAS equ 26*4
|
|
60
|
+
|
|
61
|
+
; ----------------------------------------------------------------------------
|
|
62
|
+
|
|
63
|
+
MACRO
|
|
64
|
+
xor5 $result,$ptr,$rb,$g,$k,$m,$s
|
|
65
|
+
ldr $result, [$ptr, #$g]
|
|
66
|
+
eors $result, $result, $rb
|
|
67
|
+
ldr $rb, [$ptr, #$k]
|
|
68
|
+
eors $result, $result, $rb
|
|
69
|
+
ldr $rb, [$ptr, #$m]
|
|
70
|
+
eors $result, $result, $rb
|
|
71
|
+
ldr $rb, [$ptr, #$s]
|
|
72
|
+
eors $result, $result, $rb
|
|
73
|
+
MEND
|
|
74
|
+
|
|
75
|
+
MACRO ;Theta effect
|
|
76
|
+
mTe $b, $yy, $rr
|
|
77
|
+
eors $b, $b, $yy
|
|
78
|
+
if $rr != 0
|
|
79
|
+
ror $b, $b, #32-$rr
|
|
80
|
+
endif
|
|
81
|
+
MEND
|
|
82
|
+
|
|
83
|
+
MACRO ;Chi Iota (1 lane)
|
|
84
|
+
mCI $resptr, $resofs, $ax0, $ax1, $ax2, $temp, $iota
|
|
85
|
+
bics $temp, $ax2, $ax1
|
|
86
|
+
ldr $ax2, [sp, #_pRC]
|
|
87
|
+
if $iota == 0
|
|
88
|
+
eors $temp, $temp, $ax0
|
|
89
|
+
ldr $ax1, [$ax2], #8
|
|
90
|
+
str $ax2, [sp, #_pRC]
|
|
91
|
+
else
|
|
92
|
+
ldr $ax1, [$ax2, #-4]
|
|
93
|
+
eors $temp, $temp, $ax0
|
|
94
|
+
endif
|
|
95
|
+
eors $temp, $temp, $ax1
|
|
96
|
+
str $temp, [$resptr, #$resofs]
|
|
97
|
+
if $iota == 1
|
|
98
|
+
orr $ax1, $ax1, $ax1, LSL #16
|
|
99
|
+
endif
|
|
100
|
+
MEND
|
|
101
|
+
|
|
102
|
+
MACRO ;Chi (1 lane)
|
|
103
|
+
mC $resptr, $resofs, $ax0, $ax1, $ax2, $temp, $pTxor, $pTreg, $save
|
|
104
|
+
bics $temp, $ax2, $ax1
|
|
105
|
+
eors $temp, $temp, $ax0
|
|
106
|
+
if $save != 0
|
|
107
|
+
str $temp, [$resptr, #$resofs]
|
|
108
|
+
endif
|
|
109
|
+
if $pTxor != 0
|
|
110
|
+
eors $pTreg, $pTreg, $temp
|
|
111
|
+
endif
|
|
112
|
+
MEND
|
|
113
|
+
|
|
114
|
+
MACRO
|
|
115
|
+
mKR $stateOut,$stateIn,$iota
|
|
116
|
+
|
|
117
|
+
; prepare Theta
|
|
118
|
+
xor5 r1, $stateIn, r9, _ga, _ka, _ma, _sa
|
|
119
|
+
xor5 r2, $stateIn, r10, _ge, _ke, _me, _se
|
|
120
|
+
eor r9, r8, r2, ROR #31
|
|
121
|
+
eor r10, r1, r6, ROR #31
|
|
122
|
+
eor r11, r2, r7, ROR #31
|
|
123
|
+
eor r12, r6, r8, ROR #31
|
|
124
|
+
eor lr, r7, r1, ROR #31
|
|
125
|
+
|
|
126
|
+
; Theta Rho Pi Chi Iota
|
|
127
|
+
eors r1, r3, r11
|
|
128
|
+
rors r1, r1, #32-30
|
|
129
|
+
ldr r2, [$stateIn, #_go]
|
|
130
|
+
ldr r3, [$stateIn, #_ku]
|
|
131
|
+
ldr r4, [$stateIn, #_ma]
|
|
132
|
+
ldr r5, [$stateIn, #_se]
|
|
133
|
+
mTe r2, r12, 23
|
|
134
|
+
mTe r3, lr, 7
|
|
135
|
+
mTe r4, r9, 9
|
|
136
|
+
mTe r5, r10, 2
|
|
137
|
+
mC $stateOut, _su, r5, r1, r2, r8, 0, 0, 1
|
|
138
|
+
mC $stateOut, _so, r4, r5, r1, r7, 0, 0, 1
|
|
139
|
+
mC $stateOut, _si, r3, r4, r5, r6, 0, 0, 1
|
|
140
|
+
mC $stateOut, _se, r2, r3, r4, r4, 0, 0, 1
|
|
141
|
+
mC $stateOut, _sa, r1, r2, r3, r3, 0, 0, 1
|
|
142
|
+
|
|
143
|
+
ldr r1, [$stateIn, #_bu]
|
|
144
|
+
ldr r2, [$stateIn, #_ga]
|
|
145
|
+
ldr r4, [$stateIn, #_mi]
|
|
146
|
+
ldr r5, [$stateIn, #_so]
|
|
147
|
+
mTe r1, lr, 27
|
|
148
|
+
mTe r2, r9, 4
|
|
149
|
+
mTe r4, r11, 15
|
|
150
|
+
mTe r5, r12, 24
|
|
151
|
+
mC $stateOut, _mu, r5, r1, r2, r3, 1, r8, 1
|
|
152
|
+
mC $stateOut, _mo, r4, r5, r1, r3, 1, r7, 1
|
|
153
|
+
ldr r3, [$stateIn, #_ke]
|
|
154
|
+
mTe r3, r10, 10
|
|
155
|
+
mC $stateOut, _mi, r3, r4, r5, r5, 1, r6, 1
|
|
156
|
+
mC $stateOut, _me, r2, r3, r4, r4, 0, 0, 1
|
|
157
|
+
mC $stateOut, _ma, r1, r2, r3, r3, 0, 0, 1
|
|
158
|
+
|
|
159
|
+
ldr r1, [$stateIn, #_be]
|
|
160
|
+
ldr r2, [$stateIn, #_gi]
|
|
161
|
+
ldr r4, [$stateIn, #_mu]
|
|
162
|
+
ldr r5, [$stateIn, #_sa]
|
|
163
|
+
mTe r1, r10, 1
|
|
164
|
+
mTe r2, r11, 6
|
|
165
|
+
mTe r4, lr, 8
|
|
166
|
+
mTe r5, r9, 18
|
|
167
|
+
mC $stateOut, _ku, r5, r1, r2, r3, 1, r8, 1
|
|
168
|
+
mC $stateOut, _ko, r4, r5, r1, r3, 1, r7, 1
|
|
169
|
+
ldr r3, [$stateIn, #_ko]
|
|
170
|
+
mTe r3, r12, 25
|
|
171
|
+
mC $stateOut, _ki, r3, r4, r5, r5, 1, r6, 1
|
|
172
|
+
mC $stateOut, _ke, r2, r3, r4, r4, 0, 0, 1
|
|
173
|
+
mC $stateOut, _ka, r1, r2, r3, r3, 0, 0, 1
|
|
174
|
+
|
|
175
|
+
ldr r1, [$stateIn, #_bo]
|
|
176
|
+
ldr r2, [$stateIn, #_gu]
|
|
177
|
+
ldr r4, [$stateIn, #_me]
|
|
178
|
+
ldr r5, [$stateIn, #_si]
|
|
179
|
+
mTe r1, r12, 28
|
|
180
|
+
mTe r2, lr, 20
|
|
181
|
+
mTe r4, r10, 13
|
|
182
|
+
mTe r5, r11, 29
|
|
183
|
+
mC $stateOut, _gu, r5, r1, r2, r3, 1, r8, 1
|
|
184
|
+
mC $stateOut, _go, r4, r5, r1, r3, 1, r7, 1
|
|
185
|
+
ldr r3, [$stateIn, #_ka]
|
|
186
|
+
mTe r3, r9, 3
|
|
187
|
+
mC $stateOut, _gi, r3, r4, r5, r5, 1, r6, 1
|
|
188
|
+
mC $stateOut, _ge, r2, r3, r4, r4, 0, 0, 1
|
|
189
|
+
mC $stateOut, _ga, r1, r2, r3, r3, 0, 0, 1
|
|
190
|
+
|
|
191
|
+
ldr r1, [$stateIn, #_ba]
|
|
192
|
+
ldr r2, [$stateIn, #_ge]
|
|
193
|
+
ldr r3, [$stateIn, #_ki]
|
|
194
|
+
ldr r4, [$stateIn, #_mo]
|
|
195
|
+
ldr r5, [$stateIn, #_su]
|
|
196
|
+
mTe r1, r9, 0
|
|
197
|
+
mTe r2, r10, 12
|
|
198
|
+
mTe r3, r11, 11
|
|
199
|
+
mTe r4, r12, 21
|
|
200
|
+
mTe r5, lr, 14
|
|
201
|
+
mC $stateOut, _bu, r5, r1, r2, lr, 1, r8, 1
|
|
202
|
+
mC $stateOut, _bo, r4, r5, r1, r12, 1, r7, 1
|
|
203
|
+
mC $stateOut, _bi, r3, r4, r5, r11, 1, r6, 0
|
|
204
|
+
mC $stateOut, _be, r2, r3, r4, r10, 0, 0, 1
|
|
205
|
+
mCI $stateOut, _ba, r1, r2, r3, r9, $iota
|
|
206
|
+
mov r3, r11
|
|
207
|
+
MEND
|
|
208
|
+
|
|
209
|
+
; ----------------------------------------------------------------------------
|
|
210
|
+
;
|
|
211
|
+
; void KeccakP800_StaticInitialize( void )
|
|
212
|
+
;
|
|
213
|
+
ALIGN
|
|
214
|
+
EXPORT KeccakP800_StaticInitialize
|
|
215
|
+
KeccakP800_StaticInitialize PROC
|
|
216
|
+
bx lr
|
|
217
|
+
ENDP
|
|
218
|
+
|
|
219
|
+
; ----------------------------------------------------------------------------
|
|
220
|
+
;
|
|
221
|
+
; void KeccakP800_Initialize(void *state)
|
|
222
|
+
;
|
|
223
|
+
ALIGN
|
|
224
|
+
EXPORT KeccakP800_Initialize
|
|
225
|
+
KeccakP800_Initialize PROC
|
|
226
|
+
push {r4 - r5}
|
|
227
|
+
movs r1, #0
|
|
228
|
+
movs r2, #0
|
|
229
|
+
movs r3, #0
|
|
230
|
+
movs r4, #0
|
|
231
|
+
movs r5, #0
|
|
232
|
+
stmia r0!, { r1 - r5 }
|
|
233
|
+
stmia r0!, { r1 - r5 }
|
|
234
|
+
stmia r0!, { r1 - r5 }
|
|
235
|
+
stmia r0!, { r1 - r5 }
|
|
236
|
+
stmia r0!, { r1 - r5 }
|
|
237
|
+
pop {r4 - r5}
|
|
238
|
+
bx lr
|
|
239
|
+
ENDP
|
|
240
|
+
|
|
241
|
+
; ----------------------------------------------------------------------------
|
|
242
|
+
;
|
|
243
|
+
; void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
244
|
+
;
|
|
245
|
+
ALIGN
|
|
246
|
+
EXPORT KeccakP800_AddByte
|
|
247
|
+
KeccakP800_AddByte PROC
|
|
248
|
+
ldrb r3, [r0, r2]
|
|
249
|
+
eors r3, r3, r1
|
|
250
|
+
strb r3, [r0, r2]
|
|
251
|
+
bx lr
|
|
252
|
+
ENDP
|
|
253
|
+
|
|
254
|
+
; ----------------------------------------------------------------------------
|
|
255
|
+
;
|
|
256
|
+
; void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
257
|
+
;
|
|
258
|
+
ALIGN
|
|
259
|
+
EXPORT KeccakP800_AddBytes
|
|
260
|
+
KeccakP800_AddBytes PROC
|
|
261
|
+
push {r4,lr}
|
|
262
|
+
adds r0, r0, r2 ; state += offset
|
|
263
|
+
subs r3, r3, #4 ; if length >= 4
|
|
264
|
+
bcc KeccakP800_AddBytes_Bytes
|
|
265
|
+
KeccakP800_AddBytes_LanesLoop ; then, perform on words
|
|
266
|
+
ldr r2, [r0]
|
|
267
|
+
ldr r4, [r1], #4
|
|
268
|
+
eors r2, r2, r4
|
|
269
|
+
str r2, [r0], #4
|
|
270
|
+
subs r3, r3, #4
|
|
271
|
+
bcs KeccakP800_AddBytes_LanesLoop
|
|
272
|
+
KeccakP800_AddBytes_Bytes
|
|
273
|
+
adds r3, r3, #3
|
|
274
|
+
bcc KeccakP800_AddBytes_Exit
|
|
275
|
+
KeccakP800_AddBytes_BytesLoop
|
|
276
|
+
ldrb r2, [r0]
|
|
277
|
+
ldrb r4, [r1], #1
|
|
278
|
+
eors r2, r2, r4
|
|
279
|
+
strb r2, [r0], #1
|
|
280
|
+
subs r3, r3, #1
|
|
281
|
+
bcs KeccakP800_AddBytes_BytesLoop
|
|
282
|
+
KeccakP800_AddBytes_Exit
|
|
283
|
+
pop {r4,pc}
|
|
284
|
+
ENDP
|
|
285
|
+
|
|
286
|
+
; ----------------------------------------------------------------------------
|
|
287
|
+
;
|
|
288
|
+
; void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
289
|
+
;
|
|
290
|
+
ALIGN
|
|
291
|
+
EXPORT KeccakP800_OverwriteBytes
|
|
292
|
+
KeccakP800_OverwriteBytes PROC
|
|
293
|
+
adds r0, r0, r2 ; state += offset
|
|
294
|
+
subs r3, r3, #4 ; if length >= 4
|
|
295
|
+
bcc KeccakP800_OverwriteBytes_Bytes
|
|
296
|
+
KeccakP800_OverwriteBytes_LanesLoop ; then, perform on words
|
|
297
|
+
ldr r2, [r1], #4
|
|
298
|
+
str r2, [r0], #4
|
|
299
|
+
subs r3, r3, #4
|
|
300
|
+
bcs KeccakP800_OverwriteBytes_LanesLoop
|
|
301
|
+
KeccakP800_OverwriteBytes_Bytes
|
|
302
|
+
adds r3, r3, #3
|
|
303
|
+
bcc KeccakP800_OverwriteBytes_Exit
|
|
304
|
+
KeccakP800_OverwriteBytes_BytesLoop
|
|
305
|
+
ldrb r2, [r1], #1
|
|
306
|
+
strb r2, [r0], #1
|
|
307
|
+
subs r3, r3, #1
|
|
308
|
+
bcs KeccakP800_OverwriteBytes_BytesLoop
|
|
309
|
+
KeccakP800_OverwriteBytes_Exit
|
|
310
|
+
bx lr
|
|
311
|
+
ENDP
|
|
312
|
+
|
|
313
|
+
; ----------------------------------------------------------------------------
|
|
314
|
+
;
|
|
315
|
+
; void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
316
|
+
;
|
|
317
|
+
ALIGN
|
|
318
|
+
EXPORT KeccakP800_OverwriteWithZeroes
|
|
319
|
+
KeccakP800_OverwriteWithZeroes PROC
|
|
320
|
+
movs r3, #0
|
|
321
|
+
lsrs r2, r1, #2
|
|
322
|
+
beq KeccakP800_OverwriteWithZeroes_Bytes
|
|
323
|
+
KeccakP800_OverwriteWithZeroes_LoopLanes
|
|
324
|
+
str r3, [r0], #4
|
|
325
|
+
subs r2, r2, #1
|
|
326
|
+
bne KeccakP800_OverwriteWithZeroes_LoopLanes
|
|
327
|
+
KeccakP800_OverwriteWithZeroes_Bytes
|
|
328
|
+
ands r1, #3
|
|
329
|
+
beq KeccakP800_OverwriteWithZeroes_Exit
|
|
330
|
+
KeccakP800_OverwriteWithZeroes_LoopBytes
|
|
331
|
+
strb r3, [r0], #1
|
|
332
|
+
subs r1, r1, #1
|
|
333
|
+
bne KeccakP800_OverwriteWithZeroes_LoopBytes
|
|
334
|
+
KeccakP800_OverwriteWithZeroes_Exit
|
|
335
|
+
bx lr
|
|
336
|
+
ENDP
|
|
337
|
+
|
|
338
|
+
; ----------------------------------------------------------------------------
|
|
339
|
+
;
|
|
340
|
+
; void KeccakP800_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
341
|
+
;
|
|
342
|
+
ALIGN
|
|
343
|
+
EXPORT KeccakP800_ExtractBytes
|
|
344
|
+
KeccakP800_ExtractBytes PROC
|
|
345
|
+
adds r0, r0, r2 ; state += offset
|
|
346
|
+
subs r3, r3, #4 ; if length >= 4
|
|
347
|
+
bcc KeccakP800_ExtractBytes_Bytes
|
|
348
|
+
KeccakP800_ExtractBytes_LanesLoop ; then, handle words
|
|
349
|
+
ldr r2, [r0], #4
|
|
350
|
+
str r2, [r1], #4
|
|
351
|
+
subs r3, r3, #4
|
|
352
|
+
bcs KeccakP800_ExtractBytes_LanesLoop
|
|
353
|
+
KeccakP800_ExtractBytes_Bytes
|
|
354
|
+
adds r3, r3, #3
|
|
355
|
+
bcc KeccakP800_ExtractBytes_Exit
|
|
356
|
+
KeccakP800_ExtractBytes_BytesLoop
|
|
357
|
+
ldrb r2, [r0], #1
|
|
358
|
+
strb r2, [r1], #1
|
|
359
|
+
subs r3, r3, #1
|
|
360
|
+
bcs KeccakP800_ExtractBytes_BytesLoop
|
|
361
|
+
KeccakP800_ExtractBytes_Exit
|
|
362
|
+
bx lr
|
|
363
|
+
ENDP
|
|
364
|
+
|
|
365
|
+
; ----------------------------------------------------------------------------
|
|
366
|
+
;
|
|
367
|
+
; void KeccakP800_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
368
|
+
;
|
|
369
|
+
ALIGN
|
|
370
|
+
EXPORT KeccakP800_ExtractAndAddBytes
|
|
371
|
+
KeccakP800_ExtractAndAddBytes PROC
|
|
372
|
+
push {r4,r5}
|
|
373
|
+
adds r0, r0, r3 ; state += offset (offset register no longer needed, reuse for length)
|
|
374
|
+
ldr r3, [sp, #8] ; get length argument from stack
|
|
375
|
+
subs r3, r3, #4 ; if length >= 4
|
|
376
|
+
bcc KeccakP800_ExtractAndAddBytes_Bytes
|
|
377
|
+
KeccakP800_ExtractAndAddBytes_LanesLoop ; then, handle words
|
|
378
|
+
ldr r5, [r0], #4
|
|
379
|
+
ldr r4, [r1], #4
|
|
380
|
+
eors r5, r5, r4
|
|
381
|
+
str r5, [r2], #4
|
|
382
|
+
subs r3, r3, #4
|
|
383
|
+
bcs KeccakP800_ExtractAndAddBytes_LanesLoop
|
|
384
|
+
KeccakP800_ExtractAndAddBytes_Bytes
|
|
385
|
+
adds r3, r3, #3
|
|
386
|
+
bcc KeccakP800_ExtractAndAddBytes_Exit
|
|
387
|
+
KeccakP800_ExtractAndAddBytes_BytesLoop
|
|
388
|
+
ldrb r5, [r0], #1
|
|
389
|
+
ldrb r4, [r1], #1
|
|
390
|
+
eors r5, r5, r4
|
|
391
|
+
strb r5, [r2], #1
|
|
392
|
+
subs r3, r3, #1
|
|
393
|
+
bcs KeccakP800_ExtractAndAddBytes_BytesLoop
|
|
394
|
+
KeccakP800_ExtractAndAddBytes_Exit
|
|
395
|
+
pop {r4,r5}
|
|
396
|
+
bx lr
|
|
397
|
+
ENDP
|
|
398
|
+
|
|
399
|
+
; ----------------------------------------------------------------------------
|
|
400
|
+
;
|
|
401
|
+
; void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
402
|
+
;
|
|
403
|
+
ALIGN
|
|
404
|
+
EXPORT KeccakP800_Permute_Nrounds
|
|
405
|
+
KeccakP800_Permute_Nrounds PROC
|
|
406
|
+
mov r2, r1
|
|
407
|
+
adr r1, KeccakP800_Permute_RoundConstants0
|
|
408
|
+
sub r1, r1, r2, LSL #2
|
|
409
|
+
tst r2, #1
|
|
410
|
+
beq KeccakP800_Permute
|
|
411
|
+
push {r4-r12,lr} ; odd number of rounds
|
|
412
|
+
sub sp, sp, #_SAS
|
|
413
|
+
add r1, r1, #4 ; set RC pointer on next word, see in iota code
|
|
414
|
+
str r1, [sp, #_pRC]
|
|
415
|
+
mov r4, sp
|
|
416
|
+
ldm r0!, {r9,r10,r11,r12,lr} ; copy state to stack and prepare theta
|
|
417
|
+
stm r4!, {r9,r10,r11,r12,lr}
|
|
418
|
+
mov r3, r11
|
|
419
|
+
ldm r0!, {r1,r2,r6,r7,r8}
|
|
420
|
+
stm r4!, {r1,r2,r6,r7,r8}
|
|
421
|
+
eor r6, r6, r11
|
|
422
|
+
eor r7, r7, r12
|
|
423
|
+
eor r8, r8, lr
|
|
424
|
+
ldm r0!, {r1,r2,r11,r12,lr}
|
|
425
|
+
stm r4!, {r1,r2,r11,r12,lr}
|
|
426
|
+
eor r6, r6, r11
|
|
427
|
+
eor r7, r7, r12
|
|
428
|
+
eor r8, r8, lr
|
|
429
|
+
ldm r0!, {r1,r2,r11,r12,lr}
|
|
430
|
+
stm r4!, {r1,r2,r11,r12,lr}
|
|
431
|
+
eor r6, r6, r11
|
|
432
|
+
eor r7, r7, r12
|
|
433
|
+
eor r8, r8, lr
|
|
434
|
+
ldm r0!, {r1,r2,r11,r12,lr}
|
|
435
|
+
stm r4!, {r1,r2,r11,r12,lr}
|
|
436
|
+
eor r6, r6, r11
|
|
437
|
+
eor r7, r7, r12
|
|
438
|
+
eor r8, r8, lr
|
|
439
|
+
sub r0, r0, #100
|
|
440
|
+
b KeccakP800_Permute_OddRoundEntry
|
|
441
|
+
ENDP
|
|
442
|
+
|
|
443
|
+
; ----------------------------------------------------------------------------
|
|
444
|
+
;
|
|
445
|
+
; void KeccakP800_Permute_12rounds( void *state )
|
|
446
|
+
;
|
|
447
|
+
ALIGN
|
|
448
|
+
EXPORT KeccakP800_Permute_12rounds
|
|
449
|
+
KeccakP800_Permute_12rounds PROC
|
|
450
|
+
adr r1, KeccakP800_Permute_RoundConstants12
|
|
451
|
+
b KeccakP800_Permute
|
|
452
|
+
ENDP
|
|
453
|
+
|
|
454
|
+
; ----------------------------------------------------------------------------
|
|
455
|
+
;
|
|
456
|
+
; void KeccakP800_Permute_22rounds( void *state )
|
|
457
|
+
;
|
|
458
|
+
ALIGN
|
|
459
|
+
EXPORT KeccakP800_Permute_22rounds
|
|
460
|
+
KeccakP800_Permute_22rounds PROC
|
|
461
|
+
adr r1, KeccakP800_Permute_RoundConstants22
|
|
462
|
+
b KeccakP800_Permute
|
|
463
|
+
ENDP
|
|
464
|
+
|
|
465
|
+
ALIGN
|
|
466
|
+
KeccakP800_Permute_RoundConstants22
|
|
467
|
+
dcd 0x00000001
|
|
468
|
+
dcd 0x00008082
|
|
469
|
+
dcd 0x0000808a
|
|
470
|
+
dcd 0x80008000
|
|
471
|
+
dcd 0x0000808b
|
|
472
|
+
dcd 0x80000001
|
|
473
|
+
dcd 0x80008081
|
|
474
|
+
dcd 0x00008009
|
|
475
|
+
dcd 0x0000008a
|
|
476
|
+
dcd 0x00000088
|
|
477
|
+
KeccakP800_Permute_RoundConstants12
|
|
478
|
+
dcd 0x80008009
|
|
479
|
+
dcd 0x8000000a
|
|
480
|
+
dcd 0x8000808b
|
|
481
|
+
dcd 0x0000008b
|
|
482
|
+
dcd 0x00008089
|
|
483
|
+
dcd 0x00008003
|
|
484
|
+
dcd 0x00008002
|
|
485
|
+
dcd 0x00000080
|
|
486
|
+
dcd 0x0000800a
|
|
487
|
+
dcd 0x8000000a
|
|
488
|
+
dcd 0x80008081
|
|
489
|
+
dcd 0x00008080
|
|
490
|
+
KeccakP800_Permute_RoundConstants0
|
|
491
|
+
|
|
492
|
+
; ----------------------------------------------------------------------------
|
|
493
|
+
;
|
|
494
|
+
; void KeccakP800_Permute( void *state, void *rc )
|
|
495
|
+
;
|
|
496
|
+
ALIGN
|
|
497
|
+
KeccakP800_Permute PROC
|
|
498
|
+
push {r4-r12,lr}
|
|
499
|
+
sub sp, sp, #_SAS
|
|
500
|
+
str r1, [sp, #_pRC]
|
|
501
|
+
ldm r0, {r9,r10,r11,r12,lr}
|
|
502
|
+
mov r3, r11
|
|
503
|
+
xor5 r8, r0, lr, _gu, _ku, _mu, _su
|
|
504
|
+
xor5 r7, r0, r12, _go, _ko, _mo, _so
|
|
505
|
+
xor5 r6, r0, r11, _gi, _ki, _mi, _si
|
|
506
|
+
KeccakP800_Permute_RoundLoop
|
|
507
|
+
mKR sp, r0, 0
|
|
508
|
+
KeccakP800_Permute_OddRoundEntry
|
|
509
|
+
mKR r0, sp, 1
|
|
510
|
+
cmp r2, #0x80808080
|
|
511
|
+
bne KeccakP800_Permute_RoundLoop
|
|
512
|
+
str r11, [r0, #_bi]
|
|
513
|
+
add sp, sp, #_SAS
|
|
514
|
+
pop {r4-r12,pc}
|
|
515
|
+
ENDP
|
|
516
|
+
|
|
517
|
+
END
|