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