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,432 @@
|
|
|
1
|
+
// The eXtended Keccak Code Package (XKCP)
|
|
2
|
+
// https://github.com/XKCP/XKCP
|
|
3
|
+
//
|
|
4
|
+
// Implementation by Andre Moraes
|
|
5
|
+
//
|
|
6
|
+
// This file implements Keccak-p[800] in a SnP-compatible way.
|
|
7
|
+
// Please refer to SnP-documentation.h for more details.
|
|
8
|
+
//
|
|
9
|
+
// This implementation comes with KeccakP-800-SnP.h in the same folder.
|
|
10
|
+
// Please refer to LowLevel.build for the exact list of other files it must be combined with.
|
|
11
|
+
|
|
12
|
+
// INFO: Tested on Cortex-A53(odroid-c2), using gcc.
|
|
13
|
+
// WARNING: These functions work only on little endian CPU with ARMv8A architecture
|
|
14
|
+
// WARNING: Don't use V8-V15 or X19-X28 since we aren't saving them
|
|
15
|
+
|
|
16
|
+
// Register-Lane Lookup
|
|
17
|
+
|
|
18
|
+
// v22 = A[0] || A[1] || A[2] || A[3]
|
|
19
|
+
// v23 = A[4]
|
|
20
|
+
|
|
21
|
+
// v24 = A[5] || A[6] || A[7] || A[8]
|
|
22
|
+
// v25 = A[9]
|
|
23
|
+
|
|
24
|
+
// v26 = A[10] || A[11] || A[12] || A[13]
|
|
25
|
+
// v27 = A[14]
|
|
26
|
+
|
|
27
|
+
// v28 = A[15] || A[16] || A[17] || A[18]
|
|
28
|
+
// v29 = A[19]
|
|
29
|
+
|
|
30
|
+
// v30 = A[20] || A[21] || A[22] || A[23]
|
|
31
|
+
// v31 = A[24]
|
|
32
|
+
|
|
33
|
+
.macro LoadState
|
|
34
|
+
ld1 { v22.d }[0], [x0], #8
|
|
35
|
+
ld1 { v22.d }[1], [x0], #8
|
|
36
|
+
ld1 { v23.s }[0], [x0], #4
|
|
37
|
+
ld1 { v24.d }[0], [x0], #8
|
|
38
|
+
ld1 { v24.d }[1], [x0], #8
|
|
39
|
+
ld1 { v25.s }[0], [x0], #4
|
|
40
|
+
ld1 { v26.d }[0], [x0], #8
|
|
41
|
+
ld1 { v26.d }[1], [x0], #8
|
|
42
|
+
ld1 { v27.s }[0], [x0], #4
|
|
43
|
+
ld1 { v28.d }[0], [x0], #8
|
|
44
|
+
ld1 { v28.d }[1], [x0], #8
|
|
45
|
+
ld1 { v29.s }[0], [x0], #4
|
|
46
|
+
ld1 { v30.d }[0], [x0], #8
|
|
47
|
+
ld1 { v30.d }[1], [x0], #8
|
|
48
|
+
ld1 { v31.s }[0], [x0], #4
|
|
49
|
+
sub x0, x0, #100
|
|
50
|
+
movi v20.4s, #0
|
|
51
|
+
.endm
|
|
52
|
+
|
|
53
|
+
.macro StoreState
|
|
54
|
+
st1 { v22.d }[0], [x0], #8
|
|
55
|
+
st1 { v22.d }[1], [x0], #8
|
|
56
|
+
st1 { v23.s }[0], [x0], #4
|
|
57
|
+
st1 { v24.d }[0], [x0], #8
|
|
58
|
+
st1 { v24.d }[1], [x0], #8
|
|
59
|
+
st1 { v25.s }[0], [x0], #4
|
|
60
|
+
st1 { v26.d }[0], [x0], #8
|
|
61
|
+
st1 { v26.d }[1], [x0], #8
|
|
62
|
+
st1 { v27.s }[0], [x0], #4
|
|
63
|
+
st1 { v28.d }[0], [x0], #8
|
|
64
|
+
st1 { v28.d }[1], [x0], #8
|
|
65
|
+
st1 { v29.s }[0], [x0], #4
|
|
66
|
+
st1 { v30.d }[0], [x0], #8
|
|
67
|
+
st1 { v30.d }[1], [x0], #8
|
|
68
|
+
st1 { v31.s }[0], [x0], #4
|
|
69
|
+
.endm
|
|
70
|
+
|
|
71
|
+
// NEON has no BIT-wise vector rotate operation
|
|
72
|
+
.macro ROTL32 dst, src, rot
|
|
73
|
+
shl \dst\().4s, \src\().4s, #\rot
|
|
74
|
+
sri \dst\().4s, \src\().4s, #32-\rot
|
|
75
|
+
.endm
|
|
76
|
+
|
|
77
|
+
.macro RhoPi dst, src, sav, rot
|
|
78
|
+
ror \src, \src, #32-\rot
|
|
79
|
+
mov \sav, \dst
|
|
80
|
+
mov \dst, \src
|
|
81
|
+
.endm
|
|
82
|
+
|
|
83
|
+
.macro Chi src1, src2
|
|
84
|
+
mov v0.2d[0], \src1\().2d[1]
|
|
85
|
+
mov v0.s[2], \src2\().s[0]
|
|
86
|
+
mov v0.s[3], \src1\().s[0]
|
|
87
|
+
ext v1.16b, \src1\().16b, \src2\().16b, #4
|
|
88
|
+
mov v2.s[0], \src1\().s[1]
|
|
89
|
+
mov v3.s[0], \src1\().s[0]
|
|
90
|
+
bic v4.16b, v0.16b, v1.16b
|
|
91
|
+
bic v5.16b, v2.16b, v3.16b
|
|
92
|
+
eor \src1\().16b, \src1\().16b, v4.16b
|
|
93
|
+
eor \src2\().16b, \src2\().16b, v5.16b
|
|
94
|
+
.endm
|
|
95
|
+
|
|
96
|
+
.macro KeccakRound
|
|
97
|
+
// Theta - Build new lanes
|
|
98
|
+
eor v0.16b, v22.16b, v24.16b
|
|
99
|
+
eor v0.16b, v0.16b, v26.16b
|
|
100
|
+
eor v0.16b, v0.16b, v28.16b
|
|
101
|
+
eor v0.16b, v0.16b, v30.16b // v0 = B[0] || B[1] || B[2] || B[3]
|
|
102
|
+
|
|
103
|
+
eor v1.16b, v23.16b, v25.16b
|
|
104
|
+
eor v1.16b, v1.16b, v27.16b
|
|
105
|
+
eor v1.16b, v1.16b, v29.16b
|
|
106
|
+
eor v1.16b, v1.16b, v31.16b // v1 = B[4]
|
|
107
|
+
|
|
108
|
+
ROTL32 v2, v0, 1 // v2 = ROT32(B[0]) || ROT32(B[1]) || ROT32(B[2]) || ROT32(B[3])
|
|
109
|
+
ROTL32 v3, v1, 1 // v3 = ROT32(B[4])
|
|
110
|
+
|
|
111
|
+
ext v4.16b, v2.16b, v3.16b, #8 // v4 = ROT32(B[2]) || ROT32(B[3]) || ROT32(B[4]) || ????
|
|
112
|
+
mov v4.s[3], v2.s[0] // v4 = ROT32(B[2]) || ROT32(B[3]) || ROT32(B[4]) || ROT32(B[0])
|
|
113
|
+
|
|
114
|
+
eor v5.16b, v0.16b, v4.16b // v5 = ->A[1] || ->A[2] || ->A[3] || ->A[4]
|
|
115
|
+
|
|
116
|
+
mov v6.s[0], v2.s[1]
|
|
117
|
+
eor v6.16b, v6.16b, v1.16b // v6 = ->A[0]
|
|
118
|
+
|
|
119
|
+
mov v6.s[1], v5.s[0]
|
|
120
|
+
mov v6.s[2], v5.s[1]
|
|
121
|
+
mov v6.s[3], v5.s[2] // v6 = ->A[0] || ->A[1] || ->A[2] || ->A[3]
|
|
122
|
+
|
|
123
|
+
mov v7.s[0], v5.s[3] // v7 = ->A[4]
|
|
124
|
+
|
|
125
|
+
// Apply Theta
|
|
126
|
+
eor v22.16b, v22.16b, v6.16b
|
|
127
|
+
eor v24.16b, v24.16b, v6.16b
|
|
128
|
+
eor v26.16b, v26.16b, v6.16b
|
|
129
|
+
eor v28.16b, v28.16b, v6.16b
|
|
130
|
+
eor v30.16b, v30.16b, v6.16b
|
|
131
|
+
|
|
132
|
+
eor v23.16b, v23.16b, v7.16b
|
|
133
|
+
eor v25.16b, v25.16b, v7.16b
|
|
134
|
+
eor v27.16b, v27.16b, v7.16b
|
|
135
|
+
eor v29.16b, v29.16b, v7.16b
|
|
136
|
+
eor v31.16b, v31.16b, v7.16b
|
|
137
|
+
|
|
138
|
+
// Rho Pi
|
|
139
|
+
mov w11, v22.s[1] // w11 = A[1]
|
|
140
|
+
|
|
141
|
+
RhoPi v26.s[0], w11, w10, 1 // A[10] = ROTL64(A[1], 1)
|
|
142
|
+
RhoPi v24.s[2], w10, w11, 3 // A[7] = ROTL64(A[10], 3)
|
|
143
|
+
RhoPi v26.s[1], w11, w10, 6 // A[11] = ROTL64(A[7], 6)
|
|
144
|
+
RhoPi v28.s[2], w10, w11, 10 // A[17] = ROTL64(A[11], 10)
|
|
145
|
+
RhoPi v28.s[3], w11, w10, 15 // A[18] = ROTL64(A[17], 15)
|
|
146
|
+
RhoPi v22.s[3], w10, w11, 21 // A[3] = ROTL64(A[18], 21)
|
|
147
|
+
RhoPi v24.s[0], w11, w10, 28 // A[5] = ROTL64(A[3], 28)
|
|
148
|
+
RhoPi v28.s[1], w10, w11, 4 // A[16] = ROTL64(A[5], 4)
|
|
149
|
+
RhoPi v24.s[3], w11, w10, 13 // A[8] = ROTL64(A[16], 13)
|
|
150
|
+
RhoPi v30.s[1], w10, w11, 23 // A[21] = ROTL64(A[8], 23)
|
|
151
|
+
RhoPi v31.s[0], w11, w10, 2 // A[24] = ROTL64(A[21], 2)
|
|
152
|
+
RhoPi v23.s[0], w10, w11, 14 // A[4] = ROTL64(A[24], 14)
|
|
153
|
+
RhoPi v28.s[0], w11, w10, 27 // A[15] = ROTL64(A[4], 27)
|
|
154
|
+
RhoPi v30.s[3], w10, w11, 9 // A[23] = ROTL64(A[15], 9)
|
|
155
|
+
RhoPi v29.s[0], w11, w10, 24 // A[19] = ROTL64(A[23], 24)
|
|
156
|
+
RhoPi v26.s[3], w10, w11, 8 // A[13] = ROTL64(A[19], 8)
|
|
157
|
+
RhoPi v26.s[2], w11, w10, 25 // A[12] = ROTL64(A[13], 25)
|
|
158
|
+
RhoPi v22.s[2], w10, w11, 11 // A[2] = ROTL64(A[12], 11)
|
|
159
|
+
RhoPi v30.s[0], w11, w10, 30 // A[20] = ROTL64(A[2], 30)
|
|
160
|
+
RhoPi v27.s[0], w10, w11, 18 // A[14] = ROTL64(A[20], 18)
|
|
161
|
+
RhoPi v30.s[2], w11, w10, 7 // A[22] = ROTL64(A[14], 7)
|
|
162
|
+
RhoPi v25.s[0], w10, w11, 29 // A[9] = ROTL64(A[22], 29)
|
|
163
|
+
RhoPi v24.s[1], w11, w10, 20 // A[6] = ROTL64(A[9], 20)
|
|
164
|
+
|
|
165
|
+
ror w10, w10, #20
|
|
166
|
+
mov v22.s[1], w10 // A[1] = ROTL64(A[6], 12)
|
|
167
|
+
|
|
168
|
+
// Chi
|
|
169
|
+
Chi v22, v23
|
|
170
|
+
Chi v24, v25
|
|
171
|
+
Chi v26, v27
|
|
172
|
+
Chi v28, v29
|
|
173
|
+
Chi v30, v31
|
|
174
|
+
|
|
175
|
+
// Iota
|
|
176
|
+
ld1 { v20.s }[0], [x1], #4
|
|
177
|
+
eor v22.16b, v22.16b, v20.16b
|
|
178
|
+
|
|
179
|
+
.endm
|
|
180
|
+
|
|
181
|
+
.align 8
|
|
182
|
+
KeccakP800_Permute_RoundConstants22:
|
|
183
|
+
.word 0x00000001
|
|
184
|
+
.word 0x00008082
|
|
185
|
+
.word 0x0000808a
|
|
186
|
+
.word 0x80008000
|
|
187
|
+
.word 0x0000808b
|
|
188
|
+
.word 0x80000001
|
|
189
|
+
.word 0x80008081
|
|
190
|
+
.word 0x00008009
|
|
191
|
+
.word 0x0000008a
|
|
192
|
+
.word 0x00000088
|
|
193
|
+
KeccakP800_Permute_RoundConstants12:
|
|
194
|
+
.word 0x80008009
|
|
195
|
+
.word 0x8000000a
|
|
196
|
+
.word 0x8000808b
|
|
197
|
+
.word 0x0000008b
|
|
198
|
+
.word 0x00008089
|
|
199
|
+
.word 0x00008003
|
|
200
|
+
.word 0x00008002
|
|
201
|
+
.word 0x00000080
|
|
202
|
+
.word 0x0000800a
|
|
203
|
+
.word 0x8000000a
|
|
204
|
+
.word 0x80008081
|
|
205
|
+
.word 0x00008080
|
|
206
|
+
KeccakP800_Permute_RoundConstants0:
|
|
207
|
+
|
|
208
|
+
//----------------------------------------------------------------------------
|
|
209
|
+
//
|
|
210
|
+
// void KeccakP800_Initialize(void *state)
|
|
211
|
+
//
|
|
212
|
+
.align 8
|
|
213
|
+
.global KeccakP800_Initialize
|
|
214
|
+
KeccakP800_Initialize:
|
|
215
|
+
movi v0.2d, #0
|
|
216
|
+
movi v1.2d, #0
|
|
217
|
+
st2 { v0.2d, v1.2d }, [x0], #32
|
|
218
|
+
st2 { v0.2d, v1.2d }, [x0], #32
|
|
219
|
+
st2 { v0.2d, v1.2d }, [x0], #32
|
|
220
|
+
st1 { v0.s }[0], [x0]
|
|
221
|
+
ret
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
// ----------------------------------------------------------------------------
|
|
225
|
+
//
|
|
226
|
+
// void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
227
|
+
//
|
|
228
|
+
.align 8
|
|
229
|
+
.global KeccakP800_AddByte
|
|
230
|
+
KeccakP800_AddByte:
|
|
231
|
+
ldrb w3, [x0, x2]
|
|
232
|
+
eor w3, w3, w1
|
|
233
|
+
strb w3, [x0, x2]
|
|
234
|
+
ret
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
// ----------------------------------------------------------------------------
|
|
238
|
+
//
|
|
239
|
+
// void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
240
|
+
//
|
|
241
|
+
.align 8
|
|
242
|
+
.global KeccakP800_AddBytes
|
|
243
|
+
KeccakP800_AddBytes:
|
|
244
|
+
add x0, x0, x2
|
|
245
|
+
subs w4, w3, #1
|
|
246
|
+
b.cc KeccakP800_AddBytes_Exit // length 0, move along
|
|
247
|
+
KeccakP800_AddBytes_LanesLoop: // Go 2 lanes=8 bytes at a time
|
|
248
|
+
subs w3, w3, #8
|
|
249
|
+
b.cc KeccakP800_AddBytes_Bytes
|
|
250
|
+
ld1 { v0.d }[0], [x0]
|
|
251
|
+
ld1 { v4.d }[0], [x1], #8
|
|
252
|
+
eor v0.8b, v0.8b, v4.8b
|
|
253
|
+
st1 { v0.d }[0], [x0], #8
|
|
254
|
+
b KeccakP800_AddBytes_LanesLoop
|
|
255
|
+
KeccakP800_AddBytes_Bytes:
|
|
256
|
+
add w3, w3, #8
|
|
257
|
+
KeccakP800_AddBytes_BytesLoop: // Same thing but go 1 byte at a time
|
|
258
|
+
subs w3, w3, #1
|
|
259
|
+
b.cc KeccakP800_AddBytes_Exit
|
|
260
|
+
ldrb w4, [x0]
|
|
261
|
+
ldrb w5, [x1], #1
|
|
262
|
+
eor w4, w4, w5
|
|
263
|
+
strb w4, [x0], #1
|
|
264
|
+
b KeccakP800_AddBytes_BytesLoop
|
|
265
|
+
KeccakP800_AddBytes_Exit:
|
|
266
|
+
ret
|
|
267
|
+
|
|
268
|
+
// ----------------------------------------------------------------------------
|
|
269
|
+
//
|
|
270
|
+
// void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
271
|
+
//
|
|
272
|
+
.align 8
|
|
273
|
+
.global KeccakP800_OverwriteBytes
|
|
274
|
+
KeccakP800_OverwriteBytes:
|
|
275
|
+
add x0, x0, x2
|
|
276
|
+
subs w4, w3, #1
|
|
277
|
+
b.cc KeccakP800_OverwriteBytes_Exit
|
|
278
|
+
KeccakP800_OverwriteBytes_LanesLoop:
|
|
279
|
+
subs w3, w3, #8
|
|
280
|
+
b.cc KeccakP800_OverwriteBytes_Bytes
|
|
281
|
+
ld1 { v0.d }[0], [x1], #8
|
|
282
|
+
st1 { v0.d }[0], [x0], #8
|
|
283
|
+
b KeccakP800_OverwriteBytes_LanesLoop
|
|
284
|
+
KeccakP800_OverwriteBytes_Bytes:
|
|
285
|
+
add w3, w3, #8
|
|
286
|
+
KeccakP800_OverwriteBytes_BytesLoop:
|
|
287
|
+
subs w3, w3, #1
|
|
288
|
+
b.cc KeccakP800_OverwriteBytes_Exit
|
|
289
|
+
ldrb w4, [x1], #1
|
|
290
|
+
strb w4, [x0], #1
|
|
291
|
+
b KeccakP800_OverwriteBytes_BytesLoop
|
|
292
|
+
KeccakP800_OverwriteBytes_Exit:
|
|
293
|
+
ret
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
//----------------------------------------------------------------------------
|
|
297
|
+
//
|
|
298
|
+
// void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
299
|
+
//
|
|
300
|
+
.align 8
|
|
301
|
+
.global KeccakP800_OverwriteWithZeroes
|
|
302
|
+
KeccakP800_OverwriteWithZeroes:
|
|
303
|
+
subs w2, w1, #1
|
|
304
|
+
b.cc KeccakP800_OverwriteWithZeroes_Exit
|
|
305
|
+
movi v0.2d, #0
|
|
306
|
+
mov w2, #0
|
|
307
|
+
KeccakP800_OverwriteWithZeroes_LanesLoop:
|
|
308
|
+
subs w1, w1, #8
|
|
309
|
+
b.cc KeccakP800_OverwriteWithZeroes_Bytes
|
|
310
|
+
st1 { v0.d }[0], [x0], #8
|
|
311
|
+
b KeccakP800_OverwriteWithZeroes_LanesLoop
|
|
312
|
+
KeccakP800_OverwriteWithZeroes_Bytes:
|
|
313
|
+
add w1, w1, #8
|
|
314
|
+
KeccakP800_OverwriteWithZeroes_LoopBytes:
|
|
315
|
+
subs w1, w1, #1
|
|
316
|
+
b.cc KeccakP800_OverwriteWithZeroes_Exit
|
|
317
|
+
strb w2, [x0], #1
|
|
318
|
+
b KeccakP800_OverwriteWithZeroes_LoopBytes
|
|
319
|
+
KeccakP800_OverwriteWithZeroes_Exit:
|
|
320
|
+
ret
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
// ----------------------------------------------------------------------------
|
|
324
|
+
//
|
|
325
|
+
// void KeccakP800_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
326
|
+
//
|
|
327
|
+
.align 8
|
|
328
|
+
.global KeccakP800_ExtractBytes
|
|
329
|
+
KeccakP800_ExtractBytes:
|
|
330
|
+
add x0, x0, x2
|
|
331
|
+
subs w4, w3, #1
|
|
332
|
+
b.cc KeccakP800_ExtractBytes_Exit
|
|
333
|
+
KeccakP800_ExtractBytes_LanesLoop:
|
|
334
|
+
subs w3, w3, #8
|
|
335
|
+
b.cc KeccakP800_ExtractBytes_Bytes
|
|
336
|
+
ld1 { v0.d }[0], [x0], #8
|
|
337
|
+
st1 { v0.d }[0], [x1], #8
|
|
338
|
+
b KeccakP800_ExtractBytes_LanesLoop
|
|
339
|
+
KeccakP800_ExtractBytes_Bytes:
|
|
340
|
+
add w3, w3, #8
|
|
341
|
+
KeccakP800_ExtractBytes_BytesLoop:
|
|
342
|
+
subs w3, w3, #1
|
|
343
|
+
b.cc KeccakP800_ExtractBytes_Exit
|
|
344
|
+
ldrb w4, [x0], #1
|
|
345
|
+
strb w4, [x1], #1
|
|
346
|
+
b KeccakP800_ExtractBytes_BytesLoop
|
|
347
|
+
KeccakP800_ExtractBytes_Exit:
|
|
348
|
+
ret
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
// ----------------------------------------------------------------------------
|
|
352
|
+
//
|
|
353
|
+
// void KeccakP800_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
354
|
+
//
|
|
355
|
+
.align 8
|
|
356
|
+
.global KeccakP800_ExtractAndAddBytes
|
|
357
|
+
KeccakP800_ExtractAndAddBytes:
|
|
358
|
+
add x0, x0, x3
|
|
359
|
+
subs w5, w4, #1
|
|
360
|
+
b.cc KeccakP800_ExtractAndAddBytes_Exit
|
|
361
|
+
KeccakP800_ExtractAndAddBytes_LanesLoop:
|
|
362
|
+
subs w4, w4, #8
|
|
363
|
+
b.cc KeccakP800_ExtractAndAddBytes_Bytes
|
|
364
|
+
ld1 { v0.d }[0], [x0], #8
|
|
365
|
+
ld1 { v4.d }[0], [x1], #8
|
|
366
|
+
eor v0.8b, v0.8b, v4.8b
|
|
367
|
+
st1 { v0.d }[0], [x2], #8
|
|
368
|
+
b KeccakP800_ExtractAndAddBytes_LanesLoop
|
|
369
|
+
KeccakP800_ExtractAndAddBytes_Bytes:
|
|
370
|
+
add w4, w4, #8
|
|
371
|
+
KeccakP800_ExtractAndAddBytes_BytesLoop:
|
|
372
|
+
subs w4, w4, #1
|
|
373
|
+
b.cc KeccakP800_ExtractAndAddBytes_Exit
|
|
374
|
+
ldrb w5, [x0], #1
|
|
375
|
+
ldrb w6, [x1], #1
|
|
376
|
+
eor w5, w5, w6
|
|
377
|
+
strb w5, [x2], #1
|
|
378
|
+
b KeccakP800_ExtractAndAddBytes_BytesLoop
|
|
379
|
+
KeccakP800_ExtractAndAddBytes_Exit:
|
|
380
|
+
ret
|
|
381
|
+
|
|
382
|
+
// ----------------------------------------------------------------------------
|
|
383
|
+
//
|
|
384
|
+
// void KeccakP800_Permute_Nrounds( void *state, unsigned int nrounds )
|
|
385
|
+
//
|
|
386
|
+
.align 8
|
|
387
|
+
.global KeccakP800_Permute_Nrounds
|
|
388
|
+
KeccakP800_Permute_Nrounds:
|
|
389
|
+
mov x2, x1
|
|
390
|
+
adr x1, KeccakP800_Permute_RoundConstants0
|
|
391
|
+
lsl x3, x2, #2
|
|
392
|
+
sub x1, x1, x3
|
|
393
|
+
b KeccakP800_Permute
|
|
394
|
+
|
|
395
|
+
// ----------------------------------------------------------------------------
|
|
396
|
+
//
|
|
397
|
+
// void KeccakP800_Permute_12rounds( void *state )
|
|
398
|
+
//
|
|
399
|
+
.align 8
|
|
400
|
+
.global KeccakP800_Permute_12rounds
|
|
401
|
+
KeccakP800_Permute_12rounds:
|
|
402
|
+
adr x1, KeccakP800_Permute_RoundConstants12
|
|
403
|
+
mov x2, #12
|
|
404
|
+
b KeccakP800_Permute
|
|
405
|
+
|
|
406
|
+
// ----------------------------------------------------------------------------
|
|
407
|
+
//
|
|
408
|
+
// void KeccakP800_Permute_22rounds( void *state )
|
|
409
|
+
//
|
|
410
|
+
.align 8
|
|
411
|
+
.global KeccakP800_Permute_22rounds
|
|
412
|
+
KeccakP800_Permute_22rounds:
|
|
413
|
+
adr x1, KeccakP800_Permute_RoundConstants22
|
|
414
|
+
mov x2, #22
|
|
415
|
+
b KeccakP800_Permute
|
|
416
|
+
|
|
417
|
+
//----------------------------------------------------------------------------
|
|
418
|
+
//
|
|
419
|
+
// void KeccakP800_Permute( void *state, uint32_t *rc, unsigned int nrounds )
|
|
420
|
+
//
|
|
421
|
+
.align 8
|
|
422
|
+
.global KeccakP800_Permute
|
|
423
|
+
KeccakP800_Permute:
|
|
424
|
+
LoadState
|
|
425
|
+
KeccakP800_Permute_RoundLoop:
|
|
426
|
+
KeccakRound
|
|
427
|
+
subs w2, w2, #1
|
|
428
|
+
bne KeccakP800_Permute_RoundLoop
|
|
429
|
+
KeccakP800_Permute_Exit:
|
|
430
|
+
StoreState
|
|
431
|
+
ret
|
|
432
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
Please refer to SnP-documentation.h for more details.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#ifndef _KeccakP_800_SnP_h_
|
|
22
|
+
#define _KeccakP_800_SnP_h_
|
|
23
|
+
|
|
24
|
+
#define KeccakP800_implementation "8-bit optimized AVR assembler implementation"
|
|
25
|
+
#define KeccakP800_stateSizeInBytes 100
|
|
26
|
+
#define KeccakP800_stateAlignment 8
|
|
27
|
+
|
|
28
|
+
void KeccakP800_StaticInitialize( void );
|
|
29
|
+
/* #define KeccakP800_StaticInitialize() */
|
|
30
|
+
void KeccakP800_Initialize(void *state);
|
|
31
|
+
void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset);
|
|
32
|
+
/* #define KeccakP800_AddByte(argS, argData, argOffset) ((unsigned char*)argS)[argOffset] ^= (argData) */
|
|
33
|
+
void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
34
|
+
void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
35
|
+
void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount);
|
|
36
|
+
void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds);
|
|
37
|
+
void KeccakP800_Permute_12rounds(void *state);
|
|
38
|
+
void KeccakP800_Permute_22rounds(void *state);
|
|
39
|
+
void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
|
|
40
|
+
void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
|
|
41
|
+
|
|
42
|
+
#endif
|