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,420 @@
|
|
|
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[1600] in a SnP-compatible way.
|
|
19
|
+
Please refer to SnP-documentation.h for more details.
|
|
20
|
+
|
|
21
|
+
This implementation comes with KeccakP-1600-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
|
+
#include <stdint.h>
|
|
26
|
+
#include <string.h>
|
|
27
|
+
#include <stdlib.h>
|
|
28
|
+
#include "brg_endian.h"
|
|
29
|
+
#include "KeccakP-1600-SnP.h"
|
|
30
|
+
#include "SnP-Relaned.h"
|
|
31
|
+
|
|
32
|
+
#define USE_MEMSET
|
|
33
|
+
/* #define DIVISION_INSTRUCTION */ /* comment if no division instruction or more compact when not using division */
|
|
34
|
+
#define UNROLL_CHILOOP /* comment more compact using for loop */
|
|
35
|
+
|
|
36
|
+
typedef uint_fast8_t tSmallUInt;
|
|
37
|
+
typedef uint64_t tKeccakLane;
|
|
38
|
+
|
|
39
|
+
#if defined(_MSC_VER)
|
|
40
|
+
#define ROL64(a, offset) _rotl64(a, offset)
|
|
41
|
+
#elif defined(UseSHLD)
|
|
42
|
+
#define ROL64(x,N) ({ \
|
|
43
|
+
register uint64_t __out; \
|
|
44
|
+
register uint64_t __in = x; \
|
|
45
|
+
__asm__ ("shld %2,%0,%0" : "=r"(__out) : "0"(__in), "i"(N)); \
|
|
46
|
+
__out; \
|
|
47
|
+
})
|
|
48
|
+
#else
|
|
49
|
+
#define ROL64(a, offset) ((((uint64_t)a) << offset) ^ (((uint64_t)a) >> (64-offset)))
|
|
50
|
+
#endif
|
|
51
|
+
|
|
52
|
+
#define cKeccakNumberOfRounds 24
|
|
53
|
+
|
|
54
|
+
const uint8_t KeccakP1600_RotationConstants[25] =
|
|
55
|
+
{
|
|
56
|
+
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const uint8_t KeccakP1600_PiLane[25] =
|
|
60
|
+
{
|
|
61
|
+
10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
#if defined(DIVISION_INSTRUCTION)
|
|
65
|
+
#define MOD5(argValue) ((argValue) % 5)
|
|
66
|
+
#else
|
|
67
|
+
const uint8_t KeccakP1600_Mod5[10] =
|
|
68
|
+
{
|
|
69
|
+
0, 1, 2, 3, 4, 0, 1, 2, 3, 4
|
|
70
|
+
};
|
|
71
|
+
#define MOD5(argValue) KeccakP1600_Mod5[argValue]
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
/* ---------------------------------------------------------------- */
|
|
75
|
+
|
|
76
|
+
static tKeccakLane KeccakF1600_GetNextRoundConstant( uint8_t *LFSR );
|
|
77
|
+
static tKeccakLane KeccakF1600_GetNextRoundConstant( uint8_t *LFSR )
|
|
78
|
+
{
|
|
79
|
+
tSmallUInt i;
|
|
80
|
+
tKeccakLane roundConstant;
|
|
81
|
+
tSmallUInt doXOR;
|
|
82
|
+
tSmallUInt tempLSFR;
|
|
83
|
+
|
|
84
|
+
roundConstant = 0;
|
|
85
|
+
tempLSFR = *LFSR;
|
|
86
|
+
for(i=1; i<128; i <<= 1)
|
|
87
|
+
{
|
|
88
|
+
doXOR = tempLSFR & 1;
|
|
89
|
+
if ((tempLSFR & 0x80) != 0)
|
|
90
|
+
/* Primitive polynomial over GF(2): x^8+x^6+x^5+x^4+1 */
|
|
91
|
+
tempLSFR = (tempLSFR << 1) ^ 0x71;
|
|
92
|
+
else
|
|
93
|
+
tempLSFR <<= 1;
|
|
94
|
+
|
|
95
|
+
if ( doXOR != 0 )
|
|
96
|
+
roundConstant ^= (tKeccakLane)1ULL << (i - 1);
|
|
97
|
+
}
|
|
98
|
+
*LFSR = (uint8_t)tempLSFR;
|
|
99
|
+
return ( roundConstant );
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* ---------------------------------------------------------------- */
|
|
103
|
+
|
|
104
|
+
void KeccakP1600_Initialize(void *argState)
|
|
105
|
+
{
|
|
106
|
+
#if defined(USE_MEMSET)
|
|
107
|
+
memset( argState, 0, 25 * 8 );
|
|
108
|
+
#else
|
|
109
|
+
tSmallUInt i;
|
|
110
|
+
tKeccakLane *state;
|
|
111
|
+
|
|
112
|
+
state = argState;
|
|
113
|
+
i = 25;
|
|
114
|
+
do
|
|
115
|
+
{
|
|
116
|
+
*(state++) = 0;
|
|
117
|
+
}
|
|
118
|
+
while ( --i != 0 );
|
|
119
|
+
#endif
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* ---------------------------------------------------------------- */
|
|
123
|
+
|
|
124
|
+
void KeccakP1600_AddBytesInLane(void *argState, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
125
|
+
{
|
|
126
|
+
unsigned int i;
|
|
127
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
128
|
+
unsigned char * state = (unsigned char*)argState + lanePosition * sizeof(tKeccakLane) + offset;
|
|
129
|
+
for(i=0; i<length; i++)
|
|
130
|
+
((unsigned char *)state)[i] ^= data[i];
|
|
131
|
+
#else
|
|
132
|
+
tKeccakLane lane = 0;
|
|
133
|
+
for(i=0; i<length; i++)
|
|
134
|
+
lane |= ((tKeccakLane)data[i]) << ((i+offset)*8);
|
|
135
|
+
((tKeccakLane*)argState)[lanePosition] ^= lane;
|
|
136
|
+
#endif
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* ---------------------------------------------------------------- */
|
|
140
|
+
|
|
141
|
+
void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int laneCount)
|
|
142
|
+
{
|
|
143
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
144
|
+
tSmallUInt i;
|
|
145
|
+
laneCount *= sizeof(tKeccakLane);
|
|
146
|
+
for( i = 0; i < laneCount; ++i) {
|
|
147
|
+
((unsigned char*)state)[i] ^= data[i];
|
|
148
|
+
}
|
|
149
|
+
#else
|
|
150
|
+
tSmallUInt i;
|
|
151
|
+
const uint8_t *curData = data;
|
|
152
|
+
for(i=0; i<laneCount; i++, curData+=8) {
|
|
153
|
+
tKeccakLane lane = (tKeccakLane)curData[0]
|
|
154
|
+
| ((tKeccakLane)curData[1] << 8)
|
|
155
|
+
| ((tKeccakLane)curData[2] << 16)
|
|
156
|
+
| ((tKeccakLane)curData[3] << 24)
|
|
157
|
+
| ((tKeccakLane)curData[4] << 32)
|
|
158
|
+
| ((tKeccakLane)curData[5] << 40)
|
|
159
|
+
| ((tKeccakLane)curData[6] << 48)
|
|
160
|
+
| ((tKeccakLane)curData[7] << 56);
|
|
161
|
+
((tKeccakLane*)state)[i] ^= lane;
|
|
162
|
+
}
|
|
163
|
+
#endif
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* ---------------------------------------------------------------- */
|
|
167
|
+
|
|
168
|
+
void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
169
|
+
{
|
|
170
|
+
uint64_t lane = byte;
|
|
171
|
+
lane <<= (offset%8)*8;
|
|
172
|
+
((uint64_t*)state)[offset/8] ^= lane;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* ---------------------------------------------------------------- */
|
|
176
|
+
|
|
177
|
+
void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
178
|
+
{
|
|
179
|
+
SnP_AddBytes(state, data, offset, length, KeccakP1600_AddLanes, KeccakP1600_AddBytesInLane, 8);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* ---------------------------------------------------------------- */
|
|
183
|
+
|
|
184
|
+
void KeccakP1600_OverwriteBytesInLane(void *argState, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
185
|
+
{
|
|
186
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
187
|
+
memcpy((unsigned char*)argState+lanePosition*8+offset, data, length);
|
|
188
|
+
#else
|
|
189
|
+
unsigned int i;
|
|
190
|
+
tKeccakLane *state = (tKeccakLane*)argState;
|
|
191
|
+
tKeccakLane lane = state[lanePosition];
|
|
192
|
+
for(i=0; i<length; i++) {
|
|
193
|
+
lane &= ~(((tKeccakLane)0xFF) << ((i+offset)*8));
|
|
194
|
+
lane |= ((tKeccakLane)data[i]) << ((i+offset)*8);
|
|
195
|
+
}
|
|
196
|
+
state[lanePosition] = lane;
|
|
197
|
+
#endif
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* ---------------------------------------------------------------- */
|
|
201
|
+
|
|
202
|
+
void KeccakP1600_OverwriteLanes(void *state, const unsigned char *data, unsigned int laneCount)
|
|
203
|
+
{
|
|
204
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
205
|
+
memcpy((unsigned char*)state, data, laneCount*8);
|
|
206
|
+
#else
|
|
207
|
+
tSmallUInt i;
|
|
208
|
+
const uint8_t *curData = data;
|
|
209
|
+
for(i=0; i<laneCount; i++, curData+=8) {
|
|
210
|
+
tKeccakLane lane = (tKeccakLane)curData[0]
|
|
211
|
+
| ((tKeccakLane)curData[1] << 8)
|
|
212
|
+
| ((tKeccakLane)curData[2] << 16)
|
|
213
|
+
| ((tKeccakLane)curData[3] << 24)
|
|
214
|
+
| ((tKeccakLane)curData[4] << 32)
|
|
215
|
+
| ((tKeccakLane)curData[5] << 40)
|
|
216
|
+
| ((tKeccakLane)curData[6] << 48)
|
|
217
|
+
| ((tKeccakLane)curData[7] << 56);
|
|
218
|
+
((tKeccakLane*)state)[i] = lane;
|
|
219
|
+
}
|
|
220
|
+
#endif
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/* ---------------------------------------------------------------- */
|
|
224
|
+
|
|
225
|
+
void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
226
|
+
{
|
|
227
|
+
SnP_OverwriteBytes(state, data, offset, length, KeccakP1600_OverwriteLanes, KeccakP1600_OverwriteBytesInLane, 8);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* ---------------------------------------------------------------- */
|
|
231
|
+
|
|
232
|
+
void KeccakP1600_OverwriteWithZeroes(void *argState, unsigned int byteCount)
|
|
233
|
+
{
|
|
234
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
235
|
+
memset((unsigned char*)argState, 0, byteCount);
|
|
236
|
+
#else
|
|
237
|
+
tKeccakLane *state = (tKeccakLane*)argState;
|
|
238
|
+
unsigned int i, j;
|
|
239
|
+
for(i=0; i<byteCount/8; i++)
|
|
240
|
+
state[i] = 0;
|
|
241
|
+
for(j=0; j<byteCount%8; j++)
|
|
242
|
+
state[i] &= ~(((tKeccakLane)0xFF) << (j*8));
|
|
243
|
+
#endif
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/* ---------------------------------------------------------------- */
|
|
247
|
+
|
|
248
|
+
static void KeccakP1600_Permute_NroundsLFSR(void *argState, uint8_t rounds, uint8_t LFSRinitialState)
|
|
249
|
+
{
|
|
250
|
+
tSmallUInt x, y, round;
|
|
251
|
+
tKeccakLane temp;
|
|
252
|
+
tKeccakLane BC[5];
|
|
253
|
+
tKeccakLane *state;
|
|
254
|
+
uint8_t LFSRstate;
|
|
255
|
+
|
|
256
|
+
state = (tKeccakLane*)argState;
|
|
257
|
+
LFSRstate = LFSRinitialState;
|
|
258
|
+
round = rounds;
|
|
259
|
+
do
|
|
260
|
+
{
|
|
261
|
+
/* Theta */
|
|
262
|
+
for ( x = 0; x < 5; ++x )
|
|
263
|
+
{
|
|
264
|
+
BC[x] = state[x] ^ state[5 + x] ^ state[10 + x] ^ state[15 + x] ^ state[20 + x];
|
|
265
|
+
}
|
|
266
|
+
for ( x = 0; x < 5; ++x )
|
|
267
|
+
{
|
|
268
|
+
temp = BC[MOD5(x+4)] ^ ROL64(BC[MOD5(x+1)], 1);
|
|
269
|
+
for ( y = 0; y < 25; y += 5 )
|
|
270
|
+
{
|
|
271
|
+
state[y + x] ^= temp;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/* Rho Pi */
|
|
276
|
+
temp = state[1];
|
|
277
|
+
for ( x = 0; x < 24; ++x )
|
|
278
|
+
{
|
|
279
|
+
BC[0] = state[KeccakP1600_PiLane[x]];
|
|
280
|
+
state[KeccakP1600_PiLane[x]] = ROL64( temp, KeccakP1600_RotationConstants[x] );
|
|
281
|
+
temp = BC[0];
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* Chi */
|
|
285
|
+
for ( y = 0; y < 25; y += 5 )
|
|
286
|
+
{
|
|
287
|
+
#if defined(UNROLL_CHILOOP)
|
|
288
|
+
BC[0] = state[y + 0];
|
|
289
|
+
BC[1] = state[y + 1];
|
|
290
|
+
BC[2] = state[y + 2];
|
|
291
|
+
BC[3] = state[y + 3];
|
|
292
|
+
BC[4] = state[y + 4];
|
|
293
|
+
#else
|
|
294
|
+
for ( x = 0; x < 5; ++x )
|
|
295
|
+
{
|
|
296
|
+
BC[x] = state[y + x];
|
|
297
|
+
}
|
|
298
|
+
#endif
|
|
299
|
+
for ( x = 0; x < 5; ++x )
|
|
300
|
+
{
|
|
301
|
+
state[y + x] = BC[x] ^((~BC[MOD5(x+1)]) & BC[MOD5(x+2)]);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* Iota */
|
|
306
|
+
state[0] ^= KeccakF1600_GetNextRoundConstant(&LFSRstate);
|
|
307
|
+
}
|
|
308
|
+
while( --round != 0 );
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* ---------------------------------------------------------------- */
|
|
312
|
+
|
|
313
|
+
void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
314
|
+
{
|
|
315
|
+
uint8_t LFSRstate;
|
|
316
|
+
uint8_t nr;
|
|
317
|
+
|
|
318
|
+
LFSRstate = 0x01;
|
|
319
|
+
for ( nr = 24 - nrounds; nr != 0; --nr )
|
|
320
|
+
KeccakF1600_GetNextRoundConstant(&LFSRstate);
|
|
321
|
+
KeccakP1600_Permute_NroundsLFSR(state, nrounds, LFSRstate);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* ---------------------------------------------------------------- */
|
|
325
|
+
|
|
326
|
+
void KeccakP1600_Permute_12rounds(void *state)
|
|
327
|
+
{
|
|
328
|
+
KeccakP1600_Permute_NroundsLFSR(state, 12, 0xD5);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/* ---------------------------------------------------------------- */
|
|
332
|
+
|
|
333
|
+
void KeccakP1600_Permute_24rounds(void *state)
|
|
334
|
+
{
|
|
335
|
+
KeccakP1600_Permute_NroundsLFSR(state, 24, 0x01);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* ---------------------------------------------------------------- */
|
|
339
|
+
|
|
340
|
+
void KeccakP1600_ExtractBytesInLane(const void *state, unsigned int lanePosition, unsigned char *data, unsigned int offset, unsigned int length)
|
|
341
|
+
{
|
|
342
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
343
|
+
memcpy(data, ((uint8_t*)&((tKeccakLane*)state)[lanePosition])+offset, length);
|
|
344
|
+
#else
|
|
345
|
+
tSmallUInt i;
|
|
346
|
+
tKeccakLane lane = ((tKeccakLane*)state)[lanePosition];
|
|
347
|
+
lane >>= offset*8;
|
|
348
|
+
for(i=0; i<length; i++) {
|
|
349
|
+
data[i] = lane & 0xFF;
|
|
350
|
+
lane >>= 8;
|
|
351
|
+
}
|
|
352
|
+
#endif
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/* ---------------------------------------------------------------- */
|
|
356
|
+
|
|
357
|
+
void KeccakP1600_ExtractLanes(const void *state, unsigned char *data, unsigned int laneCount)
|
|
358
|
+
{
|
|
359
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
360
|
+
memcpy(data, state, laneCount*8);
|
|
361
|
+
#else
|
|
362
|
+
tSmallUInt i, j;
|
|
363
|
+
for(i=0; i<laneCount; i++)
|
|
364
|
+
{
|
|
365
|
+
for(j=0; j<(64/8); j++)
|
|
366
|
+
{
|
|
367
|
+
data[(i*8)+j] = (((const tKeccakLane*)state)[i] >> (8*j)) & 0xFF;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
#endif
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/* ---------------------------------------------------------------- */
|
|
374
|
+
|
|
375
|
+
void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
|
|
376
|
+
{
|
|
377
|
+
SnP_ExtractBytes(state, data, offset, length, KeccakP1600_ExtractLanes, KeccakP1600_ExtractBytesInLane, 8);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/* ---------------------------------------------------------------- */
|
|
381
|
+
|
|
382
|
+
void KeccakP1600_ExtractAndAddBytesInLane(const void *state, unsigned int lanePosition, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
383
|
+
{
|
|
384
|
+
tSmallUInt i;
|
|
385
|
+
tKeccakLane lane = ((tKeccakLane*)state)[lanePosition];
|
|
386
|
+
lane >>= offset*8;
|
|
387
|
+
for(i=0; i<length; i++) {
|
|
388
|
+
output[i] = input[i] ^ (lane & 0xFF);
|
|
389
|
+
lane >>= 8;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/* ---------------------------------------------------------------- */
|
|
394
|
+
|
|
395
|
+
void KeccakP1600_ExtractAndAddLanes(const void *state, const unsigned char *input, unsigned char *output, unsigned int laneCount)
|
|
396
|
+
{
|
|
397
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
398
|
+
tSmallUInt i;
|
|
399
|
+
for(i=0; i<laneCount; i++)
|
|
400
|
+
((tKeccakLane*)output)[i] = ((tKeccakLane*)input)[i] ^ ((const tKeccakLane*)state)[i];
|
|
401
|
+
#else
|
|
402
|
+
tSmallUInt i, j;
|
|
403
|
+
for(i=0; i<laneCount; i++)
|
|
404
|
+
{
|
|
405
|
+
for(j=0; j<(64/8); j++)
|
|
406
|
+
{
|
|
407
|
+
output[(i*8)+j] = input[(i*8)+j] ^ ((((const tKeccakLane*)state)[i] >> (8*j)) & 0xFF);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
#endif
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/* ---------------------------------------------------------------- */
|
|
414
|
+
|
|
415
|
+
void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
416
|
+
{
|
|
417
|
+
SnP_ExtractAndAddBytes(state, input, output, offset, length, KeccakP1600_ExtractAndAddLanes, KeccakP1600_ExtractAndAddBytesInLane, 8);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/* ---------------------------------------------------------------- */
|
|
@@ -0,0 +1,43 @@
|
|
|
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_1600_SnP_h_
|
|
22
|
+
#define _KeccakP_1600_SnP_h_
|
|
23
|
+
|
|
24
|
+
/** For the documentation, see SnP-documentation.h.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
#define KeccakP1600_implementation "in-place 32-bit optimized implementation"
|
|
28
|
+
#define KeccakP1600_stateSizeInBytes 200
|
|
29
|
+
#define KeccakP1600_stateAlignment 8
|
|
30
|
+
|
|
31
|
+
#define KeccakP1600_StaticInitialize()
|
|
32
|
+
void KeccakP1600_Initialize(void *state);
|
|
33
|
+
void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset);
|
|
34
|
+
void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
35
|
+
void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
36
|
+
void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount);
|
|
37
|
+
void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds);
|
|
38
|
+
void KeccakP1600_Permute_12rounds(void *state);
|
|
39
|
+
void KeccakP1600_Permute_24rounds(void *state);
|
|
40
|
+
void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
|
|
41
|
+
void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
|
|
42
|
+
|
|
43
|
+
#endif
|