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,556 @@
|
|
|
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 GCC compiler.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
.thumb
|
|
29
|
+
.syntax unified
|
|
30
|
+
.text
|
|
31
|
+
|
|
32
|
+
@ ----------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
.equ _ba , 0*4
|
|
35
|
+
.equ _be , 1*4
|
|
36
|
+
.equ _bi , 2*4
|
|
37
|
+
.equ _bo , 3*4
|
|
38
|
+
.equ _bu , 4*4
|
|
39
|
+
.equ _ga , 5*4
|
|
40
|
+
.equ _ge , 6*4
|
|
41
|
+
.equ _gi , 7*4
|
|
42
|
+
.equ _go , 8*4
|
|
43
|
+
.equ _gu , 9*4
|
|
44
|
+
.equ _ka , 10*4
|
|
45
|
+
.equ _ke , 11*4
|
|
46
|
+
.equ _ki , 12*4
|
|
47
|
+
.equ _ko , 13*4
|
|
48
|
+
.equ _ku , 14*4
|
|
49
|
+
.equ _ma , 15*4
|
|
50
|
+
.equ _me , 16*4
|
|
51
|
+
.equ _mi , 17*4
|
|
52
|
+
.equ _mo , 18*4
|
|
53
|
+
.equ _mu , 19*4
|
|
54
|
+
.equ _sa , 20*4
|
|
55
|
+
.equ _se , 21*4
|
|
56
|
+
.equ _si , 22*4
|
|
57
|
+
.equ _so , 23*4
|
|
58
|
+
.equ _su , 24*4
|
|
59
|
+
.equ _RFU , 25*4
|
|
60
|
+
.equ _SAS , 26*4
|
|
61
|
+
|
|
62
|
+
@ ----------------------------------------------------------------------------
|
|
63
|
+
|
|
64
|
+
.macro 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
|
+
.endm
|
|
74
|
+
|
|
75
|
+
.macro mTe b, yy, rr
|
|
76
|
+
eors \b, \b, \yy
|
|
77
|
+
.if \rr != 0
|
|
78
|
+
ror \b, \b, #32-\rr
|
|
79
|
+
.endif
|
|
80
|
+
.endm
|
|
81
|
+
|
|
82
|
+
.macro mCI resptr, resofs, ax0, ax1, ax2, temp, iota
|
|
83
|
+
bics \temp, \ax2, \ax1
|
|
84
|
+
eors \temp, \temp, \ax0
|
|
85
|
+
.if \iota < 0x100
|
|
86
|
+
eors \temp, \temp, #\iota
|
|
87
|
+
.else
|
|
88
|
+
mov \ax1, #\iota & 0xFFFF
|
|
89
|
+
.if \iota >= 0x10000
|
|
90
|
+
movt \ax1, #\iota >> 16
|
|
91
|
+
.endif
|
|
92
|
+
eors \temp, \temp, \ax1
|
|
93
|
+
.endif
|
|
94
|
+
str \temp, [\resptr, #\resofs]
|
|
95
|
+
.endm
|
|
96
|
+
|
|
97
|
+
.macro mC resptr, resofs, ax0, ax1, ax2, temp, pTxor, pTreg, save
|
|
98
|
+
bics \temp, \ax2, \ax1
|
|
99
|
+
eors \temp, \temp, \ax0
|
|
100
|
+
.if \save != 0
|
|
101
|
+
str \temp, [\resptr, #\resofs]
|
|
102
|
+
.endif
|
|
103
|
+
.if \pTxor != 0
|
|
104
|
+
eors \pTreg, \pTreg, \temp
|
|
105
|
+
.endif
|
|
106
|
+
.endm
|
|
107
|
+
|
|
108
|
+
.macro mKR stateOut,stateIn,iota
|
|
109
|
+
|
|
110
|
+
@ prepare Theta
|
|
111
|
+
xor5 r1, \stateIn, r9, _ga, _ka, _ma, _sa
|
|
112
|
+
xor5 r2, \stateIn, r10, _ge, _ke, _me, _se
|
|
113
|
+
eor r9, r8, r2, ROR #31
|
|
114
|
+
eor r10, r1, r6, ROR #31
|
|
115
|
+
eor r11, r2, r7, ROR #31
|
|
116
|
+
eor r12, r6, r8, ROR #31
|
|
117
|
+
eor lr, r7, r1, ROR #31
|
|
118
|
+
|
|
119
|
+
@ Theta Rho Pi Chi Iota
|
|
120
|
+
eors r1, r3, r11
|
|
121
|
+
rors r1, r1, #32-30
|
|
122
|
+
ldr r2, [\stateIn, #_go]
|
|
123
|
+
ldr r3, [\stateIn, #_ku]
|
|
124
|
+
ldr r4, [\stateIn, #_ma]
|
|
125
|
+
ldr r5, [\stateIn, #_se]
|
|
126
|
+
mTe r2, r12, 23
|
|
127
|
+
mTe r3, lr, 7
|
|
128
|
+
mTe r4, r9, 9
|
|
129
|
+
mTe r5, r10, 2
|
|
130
|
+
mC \stateOut, _su, r5, r1, r2, r8, 0, 0, 1
|
|
131
|
+
mC \stateOut, _so, r4, r5, r1, r7, 0, 0, 1
|
|
132
|
+
mC \stateOut, _si, r3, r4, r5, r6, 0, 0, 1
|
|
133
|
+
mC \stateOut, _se, r2, r3, r4, r4, 0, 0, 1
|
|
134
|
+
mC \stateOut, _sa, r1, r2, r3, r3, 0, 0, 1
|
|
135
|
+
|
|
136
|
+
ldr r1, [\stateIn, #_bu]
|
|
137
|
+
ldr r2, [\stateIn, #_ga]
|
|
138
|
+
ldr r4, [\stateIn, #_mi]
|
|
139
|
+
ldr r5, [\stateIn, #_so]
|
|
140
|
+
mTe r1, lr, 27
|
|
141
|
+
mTe r2, r9, 4
|
|
142
|
+
mTe r4, r11, 15
|
|
143
|
+
mTe r5, r12, 24
|
|
144
|
+
mC \stateOut, _mu, r5, r1, r2, r3, 1, r8, 1
|
|
145
|
+
mC \stateOut, _mo, r4, r5, r1, r3, 1, r7, 1
|
|
146
|
+
ldr r3, [\stateIn, #_ke]
|
|
147
|
+
mTe r3, r10, 10
|
|
148
|
+
mC \stateOut, _mi, r3, r4, r5, r5, 1, r6, 1
|
|
149
|
+
mC \stateOut, _me, r2, r3, r4, r4, 0, 0, 1
|
|
150
|
+
mC \stateOut, _ma, r1, r2, r3, r3, 0, 0, 1
|
|
151
|
+
|
|
152
|
+
ldr r1, [\stateIn, #_be]
|
|
153
|
+
ldr r2, [\stateIn, #_gi]
|
|
154
|
+
ldr r4, [\stateIn, #_mu]
|
|
155
|
+
ldr r5, [\stateIn, #_sa]
|
|
156
|
+
mTe r1, r10, 1
|
|
157
|
+
mTe r2, r11, 6
|
|
158
|
+
mTe r4, lr, 8
|
|
159
|
+
mTe r5, r9, 18
|
|
160
|
+
mC \stateOut, _ku, r5, r1, r2, r3, 1, r8, 1
|
|
161
|
+
mC \stateOut, _ko, r4, r5, r1, r3, 1, r7, 1
|
|
162
|
+
ldr r3, [\stateIn, #_ko]
|
|
163
|
+
mTe r3, r12, 25
|
|
164
|
+
mC \stateOut, _ki, r3, r4, r5, r5, 1, r6, 1
|
|
165
|
+
mC \stateOut, _ke, r2, r3, r4, r4, 0, 0, 1
|
|
166
|
+
mC \stateOut, _ka, r1, r2, r3, r3, 0, 0, 1
|
|
167
|
+
|
|
168
|
+
ldr r1, [\stateIn, #_bo]
|
|
169
|
+
ldr r2, [\stateIn, #_gu]
|
|
170
|
+
ldr r4, [\stateIn, #_me]
|
|
171
|
+
ldr r5, [\stateIn, #_si]
|
|
172
|
+
mTe r1, r12, 28
|
|
173
|
+
mTe r2, lr, 20
|
|
174
|
+
mTe r4, r10, 13
|
|
175
|
+
mTe r5, r11, 29
|
|
176
|
+
mC \stateOut, _gu, r5, r1, r2, r3, 1, r8, 1
|
|
177
|
+
mC \stateOut, _go, r4, r5, r1, r3, 1, r7, 1
|
|
178
|
+
ldr r3, [\stateIn, #_ka]
|
|
179
|
+
mTe r3, r9, 3
|
|
180
|
+
mC \stateOut, _gi, r3, r4, r5, r5, 1, r6, 1
|
|
181
|
+
mC \stateOut, _ge, r2, r3, r4, r4, 0, 0, 1
|
|
182
|
+
mC \stateOut, _ga, r1, r2, r3, r3, 0, 0, 1
|
|
183
|
+
|
|
184
|
+
ldr r1, [\stateIn, #_ba]
|
|
185
|
+
ldr r2, [\stateIn, #_ge]
|
|
186
|
+
ldr r3, [\stateIn, #_ki]
|
|
187
|
+
ldr r4, [\stateIn, #_mo]
|
|
188
|
+
ldr r5, [\stateIn, #_su]
|
|
189
|
+
mTe r1, r9, 0
|
|
190
|
+
mTe r2, r10, 12
|
|
191
|
+
mTe r3, r11, 11
|
|
192
|
+
mTe r4, r12, 21
|
|
193
|
+
mTe r5, lr, 14
|
|
194
|
+
mC \stateOut, _bu, r5, r1, r2, lr, 1, r8, 1
|
|
195
|
+
mC \stateOut, _bo, r4, r5, r1, r12, 1, r7, 1
|
|
196
|
+
mC \stateOut, _bi, r3, r4, r5, r11, 1, r6, 0
|
|
197
|
+
mC \stateOut, _be, r2, r3, r4, r10, 0, 0, 1
|
|
198
|
+
mCI \stateOut, _ba, r1, r2, r3, r9, \iota
|
|
199
|
+
mov r3, r11
|
|
200
|
+
.endm
|
|
201
|
+
|
|
202
|
+
@ ----------------------------------------------------------------------------
|
|
203
|
+
@
|
|
204
|
+
@ void KeccakP800_StaticInitialize( void )
|
|
205
|
+
@
|
|
206
|
+
.align 8
|
|
207
|
+
.global KeccakP800_StaticInitialize
|
|
208
|
+
.type KeccakP800_StaticInitialize, %function;
|
|
209
|
+
KeccakP800_StaticInitialize:
|
|
210
|
+
bx lr
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
@ ----------------------------------------------------------------------------
|
|
214
|
+
@
|
|
215
|
+
@ void KeccakP800_Initialize(void *state)
|
|
216
|
+
@
|
|
217
|
+
.align 8
|
|
218
|
+
.global KeccakP800_Initialize
|
|
219
|
+
.type KeccakP800_Initialize, %function;
|
|
220
|
+
KeccakP800_Initialize:
|
|
221
|
+
push {r4 - r5}
|
|
222
|
+
movs r1, #0
|
|
223
|
+
movs r2, #0
|
|
224
|
+
movs r3, #0
|
|
225
|
+
movs r4, #0
|
|
226
|
+
movs r5, #0
|
|
227
|
+
stmia r0!, { r1 - r5 }
|
|
228
|
+
stmia r0!, { r1 - r5 }
|
|
229
|
+
stmia r0!, { r1 - r5 }
|
|
230
|
+
stmia r0!, { r1 - r5 }
|
|
231
|
+
stmia r0!, { r1 - r5 }
|
|
232
|
+
pop {r4 - r5}
|
|
233
|
+
bx lr
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
@ ----------------------------------------------------------------------------
|
|
237
|
+
@
|
|
238
|
+
@ void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
239
|
+
@
|
|
240
|
+
.align 8
|
|
241
|
+
.global KeccakP800_AddByte
|
|
242
|
+
.type KeccakP800_AddByte, %function;
|
|
243
|
+
KeccakP800_AddByte:
|
|
244
|
+
ldrb r3, [r0, r2]
|
|
245
|
+
eors r3, r3, r1
|
|
246
|
+
strb r3, [r0, r2]
|
|
247
|
+
bx lr
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
@ ----------------------------------------------------------------------------
|
|
251
|
+
@
|
|
252
|
+
@ void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
253
|
+
@
|
|
254
|
+
.align 8
|
|
255
|
+
.global KeccakP800_AddBytes
|
|
256
|
+
.type KeccakP800_AddBytes, %function;
|
|
257
|
+
KeccakP800_AddBytes:
|
|
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
|
+
|
|
282
|
+
|
|
283
|
+
@ ----------------------------------------------------------------------------
|
|
284
|
+
@
|
|
285
|
+
@ void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
286
|
+
@
|
|
287
|
+
.align 8
|
|
288
|
+
.global KeccakP800_OverwriteBytes
|
|
289
|
+
.type KeccakP800_OverwriteBytes, %function;
|
|
290
|
+
KeccakP800_OverwriteBytes:
|
|
291
|
+
adds r0, r0, r2 @ state += offset
|
|
292
|
+
subs r3, r3, #4 @ .if length >= 4
|
|
293
|
+
bcc KeccakP800_OverwriteBytes_Bytes
|
|
294
|
+
KeccakP800_OverwriteBytes_LanesLoop: @ then, perform on words
|
|
295
|
+
ldr r2, [r1], #4
|
|
296
|
+
str r2, [r0], #4
|
|
297
|
+
subs r3, r3, #4
|
|
298
|
+
bcs KeccakP800_OverwriteBytes_LanesLoop
|
|
299
|
+
KeccakP800_OverwriteBytes_Bytes:
|
|
300
|
+
adds r3, r3, #3
|
|
301
|
+
bcc KeccakP800_OverwriteBytes_Exit
|
|
302
|
+
KeccakP800_OverwriteBytes_BytesLoop:
|
|
303
|
+
ldrb r2, [r1], #1
|
|
304
|
+
strb r2, [r0], #1
|
|
305
|
+
subs r3, r3, #1
|
|
306
|
+
bcs KeccakP800_OverwriteBytes_BytesLoop
|
|
307
|
+
KeccakP800_OverwriteBytes_Exit:
|
|
308
|
+
bx lr
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
@ ----------------------------------------------------------------------------
|
|
312
|
+
@
|
|
313
|
+
@ void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
314
|
+
@
|
|
315
|
+
.align 8
|
|
316
|
+
.global KeccakP800_OverwriteWithZeroes
|
|
317
|
+
.type KeccakP800_OverwriteWithZeroes, %function;
|
|
318
|
+
KeccakP800_OverwriteWithZeroes:
|
|
319
|
+
movs r3, #0
|
|
320
|
+
lsrs r2, r1, #2
|
|
321
|
+
beq KeccakP800_OverwriteWithZeroes_Bytes
|
|
322
|
+
KeccakP800_OverwriteWithZeroes_LoopLanes:
|
|
323
|
+
str r3, [r0], #4
|
|
324
|
+
subs r2, r2, #1
|
|
325
|
+
bne KeccakP800_OverwriteWithZeroes_LoopLanes
|
|
326
|
+
KeccakP800_OverwriteWithZeroes_Bytes:
|
|
327
|
+
ands r1, #3
|
|
328
|
+
beq KeccakP800_OverwriteWithZeroes_Exit
|
|
329
|
+
KeccakP800_OverwriteWithZeroes_LoopBytes:
|
|
330
|
+
strb r3, [r0], #1
|
|
331
|
+
subs r1, r1, #1
|
|
332
|
+
bne KeccakP800_OverwriteWithZeroes_LoopBytes
|
|
333
|
+
KeccakP800_OverwriteWithZeroes_Exit:
|
|
334
|
+
bx lr
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
@ ----------------------------------------------------------------------------
|
|
338
|
+
@
|
|
339
|
+
@ void KeccakP800_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
340
|
+
@
|
|
341
|
+
.align 8
|
|
342
|
+
.global KeccakP800_ExtractBytes
|
|
343
|
+
.type KeccakP800_ExtractBytes, %function;
|
|
344
|
+
KeccakP800_ExtractBytes:
|
|
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
|
+
|
|
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 8
|
|
370
|
+
.global KeccakP800_ExtractAndAddBytes
|
|
371
|
+
.type KeccakP800_ExtractAndAddBytes, %function;
|
|
372
|
+
KeccakP800_ExtractAndAddBytes:
|
|
373
|
+
push {r4,r5}
|
|
374
|
+
adds r0, r0, r3 @ state += offset (offset register no longer needed, reuse for length)
|
|
375
|
+
ldr r3, [sp, #8] @ get length argument from stack
|
|
376
|
+
subs r3, r3, #4 @ .if length >= 4
|
|
377
|
+
bcc KeccakP800_ExtractAndAddBytes_Bytes
|
|
378
|
+
KeccakP800_ExtractAndAddBytes_LanesLoop: @ then, handle words
|
|
379
|
+
ldr r5, [r0], #4
|
|
380
|
+
ldr r4, [r1], #4
|
|
381
|
+
eors r5, r5, r4
|
|
382
|
+
str r5, [r2], #4
|
|
383
|
+
subs r3, r3, #4
|
|
384
|
+
bcs KeccakP800_ExtractAndAddBytes_LanesLoop
|
|
385
|
+
KeccakP800_ExtractAndAddBytes_Bytes:
|
|
386
|
+
adds r3, r3, #3
|
|
387
|
+
bcc KeccakP800_ExtractAndAddBytes_Exit
|
|
388
|
+
KeccakP800_ExtractAndAddBytes_BytesLoop:
|
|
389
|
+
ldrb r5, [r0], #1
|
|
390
|
+
ldrb r4, [r1], #1
|
|
391
|
+
eors r5, r5, r4
|
|
392
|
+
strb r5, [r2], #1
|
|
393
|
+
subs r3, r3, #1
|
|
394
|
+
bcs KeccakP800_ExtractAndAddBytes_BytesLoop
|
|
395
|
+
KeccakP800_ExtractAndAddBytes_Exit:
|
|
396
|
+
pop {r4,r5}
|
|
397
|
+
bx lr
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
@ ----------------------------------------------------------------------------
|
|
401
|
+
@
|
|
402
|
+
@ void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
403
|
+
@
|
|
404
|
+
.align 8
|
|
405
|
+
.global KeccakP800_Permute_Nrounds
|
|
406
|
+
.type KeccakP800_Permute_Nrounds, %function;
|
|
407
|
+
KeccakP800_Permute_Nrounds:
|
|
408
|
+
push {r4-r12,lr}
|
|
409
|
+
sub sp, sp, #_SAS
|
|
410
|
+
adr r2, KeccakP800_Permute_RoundPointers-4 @ get round function pointer from table
|
|
411
|
+
ldr r2, [r2, r1, LSL #2]
|
|
412
|
+
orr r2, r2, #1 @ set the thumb bit, not needed for Keil, gcc?
|
|
413
|
+
ldm r0, {r9,r10,r11,r12,lr}
|
|
414
|
+
tst r1, #1
|
|
415
|
+
beq KeccakP800_Permute_Nrounds_PrepareTheta
|
|
416
|
+
add r0, r0, #5*4 @ odd number of rounds
|
|
417
|
+
mov r1, sp @ copy state to stack
|
|
418
|
+
stm r1!, {r9,r10,r11,r12,lr}
|
|
419
|
+
ldm r0!, {r3,r4,r5,r7,r8}
|
|
420
|
+
stm r1!, {r3,r4,r5,r7,r8}
|
|
421
|
+
ldm r0!, {r3,r4,r5,r7,r8}
|
|
422
|
+
stm r1!, {r3,r4,r5,r7,r8}
|
|
423
|
+
ldm r0!, {r3,r4,r5,r7,r8}
|
|
424
|
+
stm r1!, {r3,r4,r5,r7,r8}
|
|
425
|
+
ldm r0!, {r3,r4,r5,r7,r8}
|
|
426
|
+
stm r1!, {r3,r4,r5,r7,r8}
|
|
427
|
+
sub r0, r0, #25*4
|
|
428
|
+
KeccakP800_Permute_Nrounds_PrepareTheta:
|
|
429
|
+
mov r3, r11
|
|
430
|
+
xor5 r8, r0, lr, _gu, _ku, _mu, _su
|
|
431
|
+
xor5 r7, r0, r12, _go, _ko, _mo, _so
|
|
432
|
+
xor5 r6, r0, r11, _gi, _ki, _mi, _si
|
|
433
|
+
bx r2
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
.align 8
|
|
437
|
+
KeccakP800_Permute_RoundPointers:
|
|
438
|
+
.long KeccakP800_Permute_1
|
|
439
|
+
.long KeccakP800_Permute_2
|
|
440
|
+
.long KeccakP800_Permute_3
|
|
441
|
+
.long KeccakP800_Permute_4
|
|
442
|
+
.long KeccakP800_Permute_5
|
|
443
|
+
.long KeccakP800_Permute_6
|
|
444
|
+
.long KeccakP800_Permute_7
|
|
445
|
+
.long KeccakP800_Permute_8
|
|
446
|
+
.long KeccakP800_Permute_9
|
|
447
|
+
.long KeccakP800_Permute_10
|
|
448
|
+
.long KeccakP800_Permute_11
|
|
449
|
+
.long KeccakP800_Permute_12
|
|
450
|
+
.long KeccakP800_Permute_13
|
|
451
|
+
.long KeccakP800_Permute_14
|
|
452
|
+
.long KeccakP800_Permute_15
|
|
453
|
+
.long KeccakP800_Permute_16
|
|
454
|
+
.long KeccakP800_Permute_17
|
|
455
|
+
.long KeccakP800_Permute_18
|
|
456
|
+
.long KeccakP800_Permute_19
|
|
457
|
+
.long KeccakP800_Permute_20
|
|
458
|
+
.long KeccakP800_Permute_21
|
|
459
|
+
.long KeccakP800_Permute_22
|
|
460
|
+
|
|
461
|
+
@ ----------------------------------------------------------------------------
|
|
462
|
+
@
|
|
463
|
+
@ void KeccakP800_Permute_12rounds( void *state )
|
|
464
|
+
@
|
|
465
|
+
.align 8
|
|
466
|
+
.global KeccakP800_Permute_12rounds
|
|
467
|
+
.type KeccakP800_Permute_12rounds, %function;
|
|
468
|
+
KeccakP800_Permute_12rounds:
|
|
469
|
+
push {r4-r12,lr}
|
|
470
|
+
sub sp, sp, #_SAS
|
|
471
|
+
ldm r0, {r9,r10,r11,r12,lr}
|
|
472
|
+
mov r3, r11
|
|
473
|
+
xor5 r8, r0, lr, _gu, _ku, _mu, _su
|
|
474
|
+
xor5 r7, r0, r12, _go, _ko, _mo, _so
|
|
475
|
+
xor5 r6, r0, r11, _gi, _ki, _mi, _si
|
|
476
|
+
mKR sp, r0, 0x80008009
|
|
477
|
+
mKR r0, sp, 0x8000000a
|
|
478
|
+
mKR sp, r0, 0x8000808b
|
|
479
|
+
mKR r0, sp, 0x0000008b
|
|
480
|
+
mKR sp, r0, 0x00008089
|
|
481
|
+
mKR r0, sp, 0x00008003
|
|
482
|
+
mKR sp, r0, 0x00008002
|
|
483
|
+
mKR r0, sp, 0x00000080
|
|
484
|
+
mKR sp, r0, 0x0000800a
|
|
485
|
+
mKR r0, sp, 0x8000000a
|
|
486
|
+
mKR sp, r0, 0x80008081
|
|
487
|
+
mKR r0, sp, 0x00008080
|
|
488
|
+
str r11, [r0, #_bi]
|
|
489
|
+
add sp,sp,#_SAS
|
|
490
|
+
pop {r4-r12,pc}
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
@ ----------------------------------------------------------------------------
|
|
494
|
+
@
|
|
495
|
+
@ void KeccakP800_Permute_22rounds( void *state )
|
|
496
|
+
@
|
|
497
|
+
.align 8
|
|
498
|
+
.global KeccakP800_Permute_22rounds
|
|
499
|
+
.type KeccakP800_Permute_22rounds, %function;
|
|
500
|
+
KeccakP800_Permute_22rounds:
|
|
501
|
+
push {r4-r12,lr}
|
|
502
|
+
sub sp, sp, #_SAS
|
|
503
|
+
ldm r0, {r9,r10,r11,r12,lr}
|
|
504
|
+
mov r3, r11
|
|
505
|
+
xor5 r8, r0, lr, _gu, _ku, _mu, _su
|
|
506
|
+
xor5 r7, r0, r12, _go, _ko, _mo, _so
|
|
507
|
+
xor5 r6, r0, r11, _gi, _ki, _mi, _si
|
|
508
|
+
KeccakP800_Permute_22:
|
|
509
|
+
mKR sp, r0, 0x00000001
|
|
510
|
+
KeccakP800_Permute_21:
|
|
511
|
+
mKR r0, sp, 0x00008082
|
|
512
|
+
KeccakP800_Permute_20:
|
|
513
|
+
mKR sp, r0, 0x0000808a
|
|
514
|
+
KeccakP800_Permute_19:
|
|
515
|
+
mKR r0, sp, 0x80008000
|
|
516
|
+
KeccakP800_Permute_18:
|
|
517
|
+
mKR sp, r0, 0x0000808b
|
|
518
|
+
KeccakP800_Permute_17:
|
|
519
|
+
mKR r0, sp, 0x80000001
|
|
520
|
+
KeccakP800_Permute_16:
|
|
521
|
+
mKR sp, r0, 0x80008081
|
|
522
|
+
KeccakP800_Permute_15:
|
|
523
|
+
mKR r0, sp, 0x00008009
|
|
524
|
+
KeccakP800_Permute_14:
|
|
525
|
+
mKR sp, r0, 0x0000008a
|
|
526
|
+
KeccakP800_Permute_13:
|
|
527
|
+
mKR r0, sp, 0x00000088
|
|
528
|
+
KeccakP800_Permute_12:
|
|
529
|
+
mKR sp, r0, 0x80008009
|
|
530
|
+
KeccakP800_Permute_11:
|
|
531
|
+
mKR r0, sp, 0x8000000a
|
|
532
|
+
KeccakP800_Permute_10:
|
|
533
|
+
mKR sp, r0, 0x8000808b
|
|
534
|
+
KeccakP800_Permute_9:
|
|
535
|
+
mKR r0, sp, 0x0000008b
|
|
536
|
+
KeccakP800_Permute_8:
|
|
537
|
+
mKR sp, r0, 0x00008089
|
|
538
|
+
KeccakP800_Permute_7:
|
|
539
|
+
mKR r0, sp, 0x00008003
|
|
540
|
+
KeccakP800_Permute_6:
|
|
541
|
+
mKR sp, r0, 0x00008002
|
|
542
|
+
KeccakP800_Permute_5:
|
|
543
|
+
mKR r0, sp, 0x00000080
|
|
544
|
+
KeccakP800_Permute_4:
|
|
545
|
+
mKR sp, r0, 0x0000800a
|
|
546
|
+
KeccakP800_Permute_3:
|
|
547
|
+
mKR r0, sp, 0x8000000a
|
|
548
|
+
KeccakP800_Permute_2:
|
|
549
|
+
mKR sp, r0, 0x80008081
|
|
550
|
+
KeccakP800_Permute_1:
|
|
551
|
+
mKR r0, sp, 0x00008080
|
|
552
|
+
str r11, [r0, #_bi]
|
|
553
|
+
add sp, sp, #_SAS
|
|
554
|
+
pop {r4-r12,pc}
|
|
555
|
+
|
|
556
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
https://github.com/XKCP/XKCP
|
|
4
|
+
|
|
5
|
+
Implementation by Andre Moraes
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Please refer to SnP-documentation.h for more details.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
#ifndef _KeccakP_800_SnP_h_
|
|
13
|
+
#define _KeccakP_800_SnP_h_
|
|
14
|
+
|
|
15
|
+
#define KeccakP800_implementation "64-bit optimized ARMv8a assembler implementation"
|
|
16
|
+
#define KeccakP800_stateSizeInBytes 100
|
|
17
|
+
#define KeccakP800_stateAlignment 8
|
|
18
|
+
|
|
19
|
+
#define KeccakP800_StaticInitialize()
|
|
20
|
+
void KeccakP800_Initialize(void *state);
|
|
21
|
+
void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset);
|
|
22
|
+
void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
23
|
+
void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
24
|
+
void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount);
|
|
25
|
+
void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds);
|
|
26
|
+
void KeccakP800_Permute_12rounds(void *state);
|
|
27
|
+
void KeccakP800_Permute_22rounds(void *state);
|
|
28
|
+
void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
|
|
29
|
+
void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
|
|
30
|
+
|
|
31
|
+
#endif
|
|
32
|
+
|