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,40 @@
|
|
|
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 "32-bit compact implementation"
|
|
25
|
+
#define KeccakP800_stateSizeInBytes 100
|
|
26
|
+
#define KeccakP800_stateAlignment 4
|
|
27
|
+
|
|
28
|
+
#define KeccakP800_StaticInitialize()
|
|
29
|
+
void KeccakP800_Initialize(void *state);
|
|
30
|
+
void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset);
|
|
31
|
+
void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
32
|
+
void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
33
|
+
void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount);
|
|
34
|
+
void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds);
|
|
35
|
+
void KeccakP800_Permute_12rounds(void *state);
|
|
36
|
+
void KeccakP800_Permute_22rounds(void *state);
|
|
37
|
+
void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
|
|
38
|
+
void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
|
|
39
|
+
|
|
40
|
+
#endif
|
|
@@ -0,0 +1,244 @@
|
|
|
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
|
+
#include <stdint.h>
|
|
26
|
+
#include <string.h>
|
|
27
|
+
#include <stdlib.h>
|
|
28
|
+
#include "brg_endian.h"
|
|
29
|
+
#include "KeccakP-800-SnP.h"
|
|
30
|
+
|
|
31
|
+
#if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
|
|
32
|
+
#error Not yet implemented
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
#define USE_MEMSET
|
|
36
|
+
/* #define DIVISION_INSTRUCTION /* comment if no division instruction or more compact when not using division */
|
|
37
|
+
#define UNROLL_CHILOOP /* comment more compact using for loop */
|
|
38
|
+
|
|
39
|
+
typedef uint_fast8_t tSmallUInt;
|
|
40
|
+
typedef uint32_t tKeccakLane;
|
|
41
|
+
|
|
42
|
+
#if defined (__arm__) && !defined(__GNUC__)
|
|
43
|
+
#define ROL32(a, offset) __ror(a, 32-(offset))
|
|
44
|
+
#elif defined(_MSC_VER)
|
|
45
|
+
#define ROL32(a, offset) _rotl(a, offset)
|
|
46
|
+
#else
|
|
47
|
+
#define ROL32(a, offset) ((((uint32_t)a) << offset) ^ (((uint32_t)a) >> (32-offset)))
|
|
48
|
+
#endif
|
|
49
|
+
|
|
50
|
+
#define cKeccakNumberOfRounds 22
|
|
51
|
+
|
|
52
|
+
const uint8_t KeccakP800_RotationConstants[25] =
|
|
53
|
+
{
|
|
54
|
+
1, 3, 6, 10, 15, 21, 28, 4, 13, 23, 2, 14, 27, 9, 24, 8, 25, 11, 30, 18, 7, 29, 20, 12
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const uint8_t KeccakP800_PiLane[25] =
|
|
58
|
+
{
|
|
59
|
+
10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
#if defined(DIVISION_INSTRUCTION)
|
|
63
|
+
#define MOD5(argValue) ((argValue) % 5)
|
|
64
|
+
#else
|
|
65
|
+
const uint8_t KeccakP800_Mod5[10] =
|
|
66
|
+
{
|
|
67
|
+
0, 1, 2, 3, 4, 0, 1, 2, 3, 4
|
|
68
|
+
};
|
|
69
|
+
#define MOD5(argValue) KeccakP800_Mod5[argValue]
|
|
70
|
+
#endif
|
|
71
|
+
|
|
72
|
+
/* ---------------------------------------------------------------- */
|
|
73
|
+
|
|
74
|
+
void KeccakP800_Initialize(void *argState)
|
|
75
|
+
{
|
|
76
|
+
#if defined(USE_MEMSET)
|
|
77
|
+
memset( argState, 0, 25 * sizeof(tKeccakLane) );
|
|
78
|
+
#else
|
|
79
|
+
tSmallUInt i;
|
|
80
|
+
tKeccakLane *state;
|
|
81
|
+
|
|
82
|
+
state = (tKeccakLane*)argState;
|
|
83
|
+
i = 25;
|
|
84
|
+
do
|
|
85
|
+
{
|
|
86
|
+
*(state++) = 0;
|
|
87
|
+
}
|
|
88
|
+
while ( --i != 0 );
|
|
89
|
+
#endif
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* ---------------------------------------------------------------- */
|
|
93
|
+
|
|
94
|
+
void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset)
|
|
95
|
+
{
|
|
96
|
+
((unsigned char *)state)[offset] ^= data;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* ---------------------------------------------------------------- */
|
|
100
|
+
|
|
101
|
+
void KeccakP800_AddBytes(void *argState, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
102
|
+
{
|
|
103
|
+
tSmallUInt i;
|
|
104
|
+
unsigned char * state = (unsigned char*)argState + offset;
|
|
105
|
+
|
|
106
|
+
for(i=0; i<length; i++)
|
|
107
|
+
((unsigned char *)state)[i] ^= data[i];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* ---------------------------------------------------------------- */
|
|
111
|
+
|
|
112
|
+
void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
113
|
+
{
|
|
114
|
+
memcpy((unsigned char*)state+offset, data, length);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* ---------------------------------------------------------------- */
|
|
118
|
+
|
|
119
|
+
void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
120
|
+
{
|
|
121
|
+
memset(state, 0, byteCount);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* ---------------------------------------------------------------- */
|
|
125
|
+
|
|
126
|
+
void KeccakP800_Permute_Nrounds(void *argState, unsigned int nr)
|
|
127
|
+
{
|
|
128
|
+
tSmallUInt x, y;
|
|
129
|
+
tKeccakLane temp;
|
|
130
|
+
tKeccakLane BC[5];
|
|
131
|
+
tKeccakLane *state;
|
|
132
|
+
uint8_t LFSRstate;
|
|
133
|
+
|
|
134
|
+
state = (tKeccakLane*)argState;
|
|
135
|
+
LFSRstate = 0x01;
|
|
136
|
+
for ( y = (tSmallUInt)(cKeccakNumberOfRounds - nr); y != 0; --y )
|
|
137
|
+
{
|
|
138
|
+
for( x = 1; x < 128; x <<= 1 )
|
|
139
|
+
{
|
|
140
|
+
if ((LFSRstate & 0x80) != 0)
|
|
141
|
+
/* Primitive polynomial over GF(2): x^8+x^6+x^5+x^4+1 */
|
|
142
|
+
LFSRstate = (LFSRstate << 1) ^ 0x71;
|
|
143
|
+
else
|
|
144
|
+
LFSRstate <<= 1;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
do
|
|
149
|
+
{
|
|
150
|
+
/* Theta */
|
|
151
|
+
for ( x = 0; x < 5; ++x )
|
|
152
|
+
{
|
|
153
|
+
BC[x] = state[x] ^ state[5 + x] ^ state[10 + x] ^ state[15 + x] ^ state[20 + x];
|
|
154
|
+
}
|
|
155
|
+
for ( x = 0; x < 5; ++x )
|
|
156
|
+
{
|
|
157
|
+
temp = BC[MOD5(x+4)] ^ ROL32(BC[MOD5(x+1)], 1);
|
|
158
|
+
for ( y = 0; y < 25; y += 5 )
|
|
159
|
+
{
|
|
160
|
+
state[y + x] ^= temp;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Rho Pi */
|
|
165
|
+
temp = state[1];
|
|
166
|
+
for ( x = 0; x < 24; ++x )
|
|
167
|
+
{
|
|
168
|
+
BC[0] = state[KeccakP800_PiLane[x]];
|
|
169
|
+
state[KeccakP800_PiLane[x]] = ROL32( temp, KeccakP800_RotationConstants[x] );
|
|
170
|
+
temp = BC[0];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* Chi */
|
|
174
|
+
for ( y = 0; y < 25; y += 5 )
|
|
175
|
+
{
|
|
176
|
+
#if defined(UNROLL_CHILOOP)
|
|
177
|
+
BC[0] = state[y + 0];
|
|
178
|
+
BC[1] = state[y + 1];
|
|
179
|
+
BC[2] = state[y + 2];
|
|
180
|
+
BC[3] = state[y + 3];
|
|
181
|
+
BC[4] = state[y + 4];
|
|
182
|
+
#else
|
|
183
|
+
for ( x = 0; x < 5; ++x )
|
|
184
|
+
{
|
|
185
|
+
BC[x] = state[y + x];
|
|
186
|
+
}
|
|
187
|
+
#endif
|
|
188
|
+
for ( x = 0; x < 5; ++x )
|
|
189
|
+
{
|
|
190
|
+
state[y + x] = BC[x] ^((~BC[MOD5(x+1)]) & BC[MOD5(x+2)]);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* Iota */
|
|
195
|
+
temp = 0;
|
|
196
|
+
for( x = 1; x < 128; x <<= 1 )
|
|
197
|
+
{
|
|
198
|
+
if ( x <= (sizeof(tKeccakLane)*8) )
|
|
199
|
+
temp ^= (tKeccakLane)(LFSRstate & 1) << (x - 1);
|
|
200
|
+
|
|
201
|
+
if ((LFSRstate & 0x80) != 0)
|
|
202
|
+
/* Primitive polynomial over GF(2): x^8+x^6+x^5+x^4+1 */
|
|
203
|
+
LFSRstate = (LFSRstate << 1) ^ 0x71;
|
|
204
|
+
else
|
|
205
|
+
LFSRstate <<= 1;
|
|
206
|
+
}
|
|
207
|
+
state[0] ^= temp;
|
|
208
|
+
}
|
|
209
|
+
while( --nr != 0 );
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* ---------------------------------------------------------------- */
|
|
213
|
+
|
|
214
|
+
void KeccakP800_Permute_12rounds(void *argState)
|
|
215
|
+
{
|
|
216
|
+
KeccakP800_Permute_Nrounds(argState, 12);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ---------------------------------------------------------------- */
|
|
220
|
+
|
|
221
|
+
void KeccakP800_Permute_22rounds(void *argState)
|
|
222
|
+
{
|
|
223
|
+
KeccakP800_Permute_Nrounds(argState, 22);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* ---------------------------------------------------------------- */
|
|
227
|
+
|
|
228
|
+
void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
|
|
229
|
+
{
|
|
230
|
+
memcpy(data, (const uint8_t*)state+offset, length);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* ---------------------------------------------------------------- */
|
|
234
|
+
|
|
235
|
+
void KeccakP800_ExtractAndAddBytes(const void *argState, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
236
|
+
{
|
|
237
|
+
tSmallUInt i;
|
|
238
|
+
const unsigned char * state = (const unsigned char*)argState + offset;
|
|
239
|
+
|
|
240
|
+
for(i=0; i<length; i++)
|
|
241
|
+
output[i] = input[i] ^ state[i];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* ---------------------------------------------------------------- */
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
+
#include "KeccakP-800-opt32-config.h"
|
|
25
|
+
|
|
26
|
+
#define KeccakP800_implementation "generic 32-bit optimized implementation (" KeccakP800_implementation_config ")"
|
|
27
|
+
#define KeccakP800_stateSizeInBytes 100
|
|
28
|
+
#define KeccakP800_stateAlignment 4
|
|
29
|
+
#define KeccakF800_FastLoop_supported
|
|
30
|
+
|
|
31
|
+
#include <stddef.h>
|
|
32
|
+
|
|
33
|
+
#define KeccakP800_StaticInitialize()
|
|
34
|
+
void KeccakP800_Initialize(void *state);
|
|
35
|
+
void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset);
|
|
36
|
+
void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
37
|
+
void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
38
|
+
void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount);
|
|
39
|
+
void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds);
|
|
40
|
+
void KeccakP800_Permute_12rounds(void *state);
|
|
41
|
+
void KeccakP800_Permute_22rounds(void *state);
|
|
42
|
+
void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
|
|
43
|
+
void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
|
|
44
|
+
size_t KeccakF800_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen);
|
|
45
|
+
|
|
46
|
+
#endif
|
|
@@ -0,0 +1,184 @@
|
|
|
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
|
+
#define _b 0
|
|
18
|
+
#define _g 5
|
|
19
|
+
#define _k 10
|
|
20
|
+
#define _m 15
|
|
21
|
+
#define _s 20
|
|
22
|
+
|
|
23
|
+
#define _a 0
|
|
24
|
+
#define _e 1
|
|
25
|
+
#define _i 2
|
|
26
|
+
#define _o 3
|
|
27
|
+
#define _u 4
|
|
28
|
+
|
|
29
|
+
#define Ca Ba
|
|
30
|
+
#define Ce Be
|
|
31
|
+
#define Ci Bi
|
|
32
|
+
#define Co Bo
|
|
33
|
+
#define Cu Bu
|
|
34
|
+
|
|
35
|
+
#define declareBCDE \
|
|
36
|
+
uint32_t Ba, Be, Bi, Bo, Bu; \
|
|
37
|
+
uint32_t Da, De, Di, Do, Du; \
|
|
38
|
+
uint32_t Estate[25]; \
|
|
39
|
+
|
|
40
|
+
#ifdef UseBebigokimisa
|
|
41
|
+
/* --- Code for round (lane complementing pattern 'bebigokimisa') */
|
|
42
|
+
/* --- 32-bit lanes mapped to 32-bit words */
|
|
43
|
+
#define thetaRhoPiChiIota(i, A, E) \
|
|
44
|
+
Ca = A##state[_b+_a]^A##state[_g+_a]^A##state[_k+_a]^A##state[_m+_a]^A##state[_s+_a]; \
|
|
45
|
+
Ce = A##state[_b+_e]^A##state[_g+_e]^A##state[_k+_e]^A##state[_m+_e]^A##state[_s+_e]; \
|
|
46
|
+
Ci = A##state[_b+_i]^A##state[_g+_i]^A##state[_k+_i]^A##state[_m+_i]^A##state[_s+_i]; \
|
|
47
|
+
Co = A##state[_b+_o]^A##state[_g+_o]^A##state[_k+_o]^A##state[_m+_o]^A##state[_s+_o]; \
|
|
48
|
+
Cu = A##state[_b+_u]^A##state[_g+_u]^A##state[_k+_u]^A##state[_m+_u]^A##state[_s+_u]; \
|
|
49
|
+
Da = Cu^ROL32(Ce, 1); \
|
|
50
|
+
De = Ca^ROL32(Ci, 1); \
|
|
51
|
+
Di = Ce^ROL32(Co, 1); \
|
|
52
|
+
Do = Ci^ROL32(Cu, 1); \
|
|
53
|
+
Du = Co^ROL32(Ca, 1); \
|
|
54
|
+
\
|
|
55
|
+
Ba = A##state[_b+_a] ^ Da; \
|
|
56
|
+
Be = ROL32(A##state[_g+_e] ^ De, 12); \
|
|
57
|
+
Bi = ROL32(A##state[_k+_i] ^ Di, 11); \
|
|
58
|
+
Bo = ROL32(A##state[_m+_o] ^ Do, 21); \
|
|
59
|
+
Bu = ROL32(A##state[_s+_u] ^ Du, 14); \
|
|
60
|
+
E##state[_b+_a] = Ba ^( Be | Bi ) ^ KeccakF800RoundConstants[i]; \
|
|
61
|
+
E##state[_b+_e] = Be ^((~Bi)| Bo ); \
|
|
62
|
+
E##state[_b+_i] = Bi ^( Bo & Bu ); \
|
|
63
|
+
E##state[_b+_o] = Bo ^( Bu | Ba ); \
|
|
64
|
+
E##state[_b+_u] = Bu ^( Ba & Be ); \
|
|
65
|
+
\
|
|
66
|
+
Ba = ROL32(A##state[_b+_o] ^ Do, 28); \
|
|
67
|
+
Be = ROL32(A##state[_g+_u] ^ Du, 20); \
|
|
68
|
+
Bi = ROL32(A##state[_k+_a] ^ Da, 3); \
|
|
69
|
+
Bo = ROL32(A##state[_m+_e] ^ De, 13); \
|
|
70
|
+
Bu = ROL32(A##state[_s+_i] ^ Di, 29); \
|
|
71
|
+
E##state[_g+_a] = Ba ^( Be | Bi ); \
|
|
72
|
+
E##state[_g+_e] = Be ^( Bi & Bo ); \
|
|
73
|
+
E##state[_g+_i] = Bi ^( Bo |(~Bu)); \
|
|
74
|
+
E##state[_g+_o] = Bo ^( Bu | Ba ); \
|
|
75
|
+
E##state[_g+_u] = Bu ^( Ba & Be ); \
|
|
76
|
+
\
|
|
77
|
+
Ba = ROL32(A##state[_b+_e] ^ De, 1); \
|
|
78
|
+
Be = ROL32(A##state[_g+_i] ^ Di, 6); \
|
|
79
|
+
Bi = ROL32(A##state[_k+_o] ^ Do, 25); \
|
|
80
|
+
Bo = ROL32(A##state[_m+_u] ^ Du, 8); \
|
|
81
|
+
Bu = ROL32(A##state[_s+_a] ^ Da, 18); \
|
|
82
|
+
E##state[_k+_a] = Ba ^( Be | Bi ); \
|
|
83
|
+
E##state[_k+_e] = Be ^( Bi & Bo ); \
|
|
84
|
+
E##state[_k+_i] = Bi ^((~Bo)& Bu ); \
|
|
85
|
+
E##state[_k+_o] = (~Bo)^( Bu | Ba ); \
|
|
86
|
+
E##state[_k+_u] = Bu ^( Ba & Be ); \
|
|
87
|
+
\
|
|
88
|
+
Ba = ROL32(A##state[_b+_u] ^ Du, 27); \
|
|
89
|
+
Be = ROL32(A##state[_g+_a] ^ Da, 4); \
|
|
90
|
+
Bi = ROL32(A##state[_k+_e] ^ De, 10); \
|
|
91
|
+
Bo = ROL32(A##state[_m+_i] ^ Di, 15); \
|
|
92
|
+
Bu = ROL32(A##state[_s+_o] ^ Do, 24); \
|
|
93
|
+
E##state[_m+_a] = Ba ^( Be & Bi ); \
|
|
94
|
+
E##state[_m+_e] = Be ^( Bi | Bo ); \
|
|
95
|
+
E##state[_m+_i] = Bi ^((~Bo)| Bu ); \
|
|
96
|
+
E##state[_m+_o] = (~Bo)^( Bu & Ba ); \
|
|
97
|
+
E##state[_m+_u] = Bu ^( Ba | Be ); \
|
|
98
|
+
\
|
|
99
|
+
Ba = ROL32(A##state[_b+_i] ^ Di, 30); \
|
|
100
|
+
Be = ROL32(A##state[_g+_o] ^ Do, 23); \
|
|
101
|
+
Bi = ROL32(A##state[_k+_u] ^ Du, 7); \
|
|
102
|
+
Bo = ROL32(A##state[_m+_a] ^ Da, 9); \
|
|
103
|
+
Bu = ROL32(A##state[_s+_e] ^ De, 2); \
|
|
104
|
+
E##state[_s+_a] = Ba ^((~Be)& Bi ); \
|
|
105
|
+
E##state[_s+_e] = (~Be)^( Bi | Bo ); \
|
|
106
|
+
E##state[_s+_i] = Bi ^( Bo & Bu ); \
|
|
107
|
+
E##state[_s+_o] = Bo ^( Bu | Ba ); \
|
|
108
|
+
E##state[_s+_u] = Bu ^( Ba & Be ); \
|
|
109
|
+
\
|
|
110
|
+
|
|
111
|
+
#else /* UseBebigokimisa */
|
|
112
|
+
|
|
113
|
+
/* --- Code for round */
|
|
114
|
+
/* --- 32-bit lanes mapped to 32-bit words */
|
|
115
|
+
#define thetaRhoPiChiIota(i, A, E) \
|
|
116
|
+
Ca = A##state[_b+_a]^A##state[_g+_a]^A##state[_k+_a]^A##state[_m+_a]^A##state[_s+_a]; \
|
|
117
|
+
Ce = A##state[_b+_e]^A##state[_g+_e]^A##state[_k+_e]^A##state[_m+_e]^A##state[_s+_e]; \
|
|
118
|
+
Ci = A##state[_b+_i]^A##state[_g+_i]^A##state[_k+_i]^A##state[_m+_i]^A##state[_s+_i]; \
|
|
119
|
+
Co = A##state[_b+_o]^A##state[_g+_o]^A##state[_k+_o]^A##state[_m+_o]^A##state[_s+_o]; \
|
|
120
|
+
Cu = A##state[_b+_u]^A##state[_g+_u]^A##state[_k+_u]^A##state[_m+_u]^A##state[_s+_u]; \
|
|
121
|
+
Da = Cu^ROL32(Ce, 1); \
|
|
122
|
+
De = Ca^ROL32(Ci, 1); \
|
|
123
|
+
Di = Ce^ROL32(Co, 1); \
|
|
124
|
+
Do = Ci^ROL32(Cu, 1); \
|
|
125
|
+
Du = Co^ROL32(Ca, 1); \
|
|
126
|
+
\
|
|
127
|
+
Ba = A##state[_b+_a] ^ Da; \
|
|
128
|
+
Be = ROL32(A##state[_g+_e] ^ De, 12); \
|
|
129
|
+
Bi = ROL32(A##state[_k+_i] ^ Di, 11); \
|
|
130
|
+
Bo = ROL32(A##state[_m+_o] ^ Do, 21); \
|
|
131
|
+
Bu = ROL32(A##state[_s+_u] ^ Du, 14); \
|
|
132
|
+
E##state[_b+_a] = Ba ^((~Be)& Bi ) ^ KeccakF800RoundConstants[i]; \
|
|
133
|
+
E##state[_b+_e] = Be ^((~Bi)& Bo ); \
|
|
134
|
+
E##state[_b+_i] = Bi ^((~Bo)& Bu ); \
|
|
135
|
+
E##state[_b+_o] = Bo ^((~Bu)& Ba ); \
|
|
136
|
+
E##state[_b+_u] = Bu ^((~Ba)& Be ); \
|
|
137
|
+
\
|
|
138
|
+
Ba = ROL32(A##state[_b+_o] ^ Do, 28); \
|
|
139
|
+
Be = ROL32(A##state[_g+_u] ^ Du, 20); \
|
|
140
|
+
Bi = ROL32(A##state[_k+_a] ^ Da, 3); \
|
|
141
|
+
Bo = ROL32(A##state[_m+_e] ^ De, 13); \
|
|
142
|
+
Bu = ROL32(A##state[_s+_i] ^ Di, 29); \
|
|
143
|
+
E##state[_g+_a] = Ba ^((~Be)& Bi ); \
|
|
144
|
+
E##state[_g+_e] = Be ^((~Bi)& Bo ); \
|
|
145
|
+
E##state[_g+_i] = Bi ^((~Bo)& Bu ); \
|
|
146
|
+
E##state[_g+_o] = Bo ^((~Bu)& Ba ); \
|
|
147
|
+
E##state[_g+_u] = Bu ^((~Ba)& Be ); \
|
|
148
|
+
\
|
|
149
|
+
Ba = ROL32(A##state[_b+_e] ^ De, 1); \
|
|
150
|
+
Be = ROL32(A##state[_g+_i] ^ Di, 6); \
|
|
151
|
+
Bi = ROL32(A##state[_k+_o] ^ Do, 25); \
|
|
152
|
+
Bo = ROL32(A##state[_m+_u] ^ Du, 8); \
|
|
153
|
+
Bu = ROL32(A##state[_s+_a] ^ Da, 18); \
|
|
154
|
+
E##state[_k+_a] = Ba ^((~Be)& Bi ); \
|
|
155
|
+
E##state[_k+_e] = Be ^((~Bi)& Bo ); \
|
|
156
|
+
E##state[_k+_i] = Bi ^((~Bo)& Bu ); \
|
|
157
|
+
E##state[_k+_o] = Bo ^((~Bu)& Ba ); \
|
|
158
|
+
E##state[_k+_u] = Bu ^((~Ba)& Be ); \
|
|
159
|
+
\
|
|
160
|
+
Ba = ROL32(A##state[_b+_u] ^ Du, 27); \
|
|
161
|
+
Be = ROL32(A##state[_g+_a] ^ Da, 4); \
|
|
162
|
+
Bi = ROL32(A##state[_k+_e] ^ De, 10); \
|
|
163
|
+
Bo = ROL32(A##state[_m+_i] ^ Di, 15); \
|
|
164
|
+
Bu = ROL32(A##state[_s+_o] ^ Do, 24); \
|
|
165
|
+
E##state[_m+_a] = Ba ^((~Be)& Bi ); \
|
|
166
|
+
E##state[_m+_e] = Be ^((~Bi)& Bo ); \
|
|
167
|
+
E##state[_m+_i] = Bi ^((~Bo)& Bu ); \
|
|
168
|
+
E##state[_m+_o] = Bo ^((~Bu)& Ba ); \
|
|
169
|
+
E##state[_m+_u] = Bu ^((~Ba)& Be ); \
|
|
170
|
+
\
|
|
171
|
+
Ba = ROL32(A##state[_b+_i] ^ Di, 30); \
|
|
172
|
+
Be = ROL32(A##state[_g+_o] ^ Do, 23); \
|
|
173
|
+
Bi = ROL32(A##state[_k+_u] ^ Du, 7); \
|
|
174
|
+
Bo = ROL32(A##state[_m+_a] ^ Da, 9); \
|
|
175
|
+
Bu = ROL32(A##state[_s+_e] ^ De, 2); \
|
|
176
|
+
E##state[_s+_a] = Ba ^((~Be)& Bi ); \
|
|
177
|
+
E##state[_s+_e] = Be ^((~Bi)& Bo ); \
|
|
178
|
+
E##state[_s+_i] = Bi ^((~Bo)& Bu ); \
|
|
179
|
+
E##state[_s+_o] = Bo ^((~Bu)& Ba ); \
|
|
180
|
+
E##state[_s+_u] = Bu ^((~Ba)& Be ); \
|
|
181
|
+
\
|
|
182
|
+
|
|
183
|
+
#endif /* UseBebigokimisa */
|
|
184
|
+
|