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,44 @@
|
|
|
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 reference implementation"
|
|
25
|
+
#define KeccakP800_stateSizeInBytes 100
|
|
26
|
+
#define KeccakP800_stateAlignment 4
|
|
27
|
+
|
|
28
|
+
#ifdef KeccakReference
|
|
29
|
+
void KeccakP800_StaticInitialize( void );
|
|
30
|
+
#else
|
|
31
|
+
#define KeccakP800_StaticInitialize()
|
|
32
|
+
#endif
|
|
33
|
+
void KeccakP800_Initialize(void *state);
|
|
34
|
+
void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset);
|
|
35
|
+
void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
36
|
+
void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
37
|
+
void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount);
|
|
38
|
+
void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds);
|
|
39
|
+
void KeccakP800_Permute_12rounds(void *state);
|
|
40
|
+
void KeccakP800_Permute_22rounds(void *state);
|
|
41
|
+
void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
|
|
42
|
+
void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
|
|
43
|
+
|
|
44
|
+
#endif
|
|
@@ -0,0 +1,437 @@
|
|
|
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
|
+
#if DEBUG
|
|
26
|
+
#include <assert.h>
|
|
27
|
+
#endif
|
|
28
|
+
#include <stdint.h>
|
|
29
|
+
#include <stdio.h>
|
|
30
|
+
#include <stdlib.h>
|
|
31
|
+
#include <string.h>
|
|
32
|
+
#include "brg_endian.h"
|
|
33
|
+
#ifdef KeccakReference
|
|
34
|
+
#include "displayIntermediateValues.h"
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
typedef uint32_t tKeccakLane;
|
|
38
|
+
|
|
39
|
+
#define maxNrRounds 22
|
|
40
|
+
#define nrLanes 25
|
|
41
|
+
#define index(x, y) (((x)%5)+5*((y)%5))
|
|
42
|
+
|
|
43
|
+
#ifdef KeccakReference
|
|
44
|
+
|
|
45
|
+
static tKeccakLane KeccakRoundConstants[maxNrRounds];
|
|
46
|
+
static unsigned int KeccakRhoOffsets[nrLanes];
|
|
47
|
+
|
|
48
|
+
/* ---------------------------------------------------------------- */
|
|
49
|
+
|
|
50
|
+
void KeccakP800_InitializeRoundConstants(void);
|
|
51
|
+
void KeccakP800_InitializeRhoOffsets(void);
|
|
52
|
+
static int LFSR86540(uint8_t *LFSR);
|
|
53
|
+
|
|
54
|
+
void KeccakP800_StaticInitialize(void)
|
|
55
|
+
{
|
|
56
|
+
if (sizeof(tKeccakLane) != 4) {
|
|
57
|
+
printf("tKeccakLane should be 32-bit wide\n");
|
|
58
|
+
abort();
|
|
59
|
+
}
|
|
60
|
+
KeccakP800_InitializeRoundConstants();
|
|
61
|
+
KeccakP800_InitializeRhoOffsets();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
void KeccakP800_InitializeRoundConstants(void)
|
|
65
|
+
{
|
|
66
|
+
uint8_t LFSRstate = 0x01;
|
|
67
|
+
unsigned int i, j, bitPosition;
|
|
68
|
+
|
|
69
|
+
for(i=0; i<maxNrRounds; i++) {
|
|
70
|
+
KeccakRoundConstants[i] = 0;
|
|
71
|
+
for(j=0; j<7; j++) {
|
|
72
|
+
bitPosition = (1<<j)-1; /* 2^j-1 */
|
|
73
|
+
if (LFSR86540(&LFSRstate) && (bitPosition < (sizeof(tKeccakLane)*8)))
|
|
74
|
+
KeccakRoundConstants[i] ^= (tKeccakLane)(1<<bitPosition);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void KeccakP800_InitializeRhoOffsets(void)
|
|
80
|
+
{
|
|
81
|
+
unsigned int x, y, t, newX, newY;
|
|
82
|
+
|
|
83
|
+
KeccakRhoOffsets[index(0, 0)] = 0;
|
|
84
|
+
x = 1;
|
|
85
|
+
y = 0;
|
|
86
|
+
for(t=0; t<24; t++) {
|
|
87
|
+
KeccakRhoOffsets[index(x, y)] = ((t+1)*(t+2)/2) % (sizeof(tKeccakLane) * 8);
|
|
88
|
+
newX = (0*x+1*y) % 5;
|
|
89
|
+
newY = (2*x+3*y) % 5;
|
|
90
|
+
x = newX;
|
|
91
|
+
y = newY;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
static int LFSR86540(uint8_t *LFSR)
|
|
96
|
+
{
|
|
97
|
+
int result = ((*LFSR) & 0x01) != 0;
|
|
98
|
+
if (((*LFSR) & 0x80) != 0)
|
|
99
|
+
/* Primitive polynomial over GF(2): x^8+x^6+x^5+x^4+1 */
|
|
100
|
+
(*LFSR) = ((*LFSR) << 1) ^ 0x71;
|
|
101
|
+
else
|
|
102
|
+
(*LFSR) <<= 1;
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
#else
|
|
107
|
+
|
|
108
|
+
static const tKeccakLane KeccakRoundConstants[maxNrRounds] =
|
|
109
|
+
{
|
|
110
|
+
0x00000001,
|
|
111
|
+
0x00008082,
|
|
112
|
+
0x0000808a,
|
|
113
|
+
0x80008000,
|
|
114
|
+
0x0000808b,
|
|
115
|
+
0x80000001,
|
|
116
|
+
0x80008081,
|
|
117
|
+
0x00008009,
|
|
118
|
+
0x0000008a,
|
|
119
|
+
0x00000088,
|
|
120
|
+
0x80008009,
|
|
121
|
+
0x8000000a,
|
|
122
|
+
0x8000808b,
|
|
123
|
+
0x0000008b,
|
|
124
|
+
0x00008089,
|
|
125
|
+
0x00008003,
|
|
126
|
+
0x00008002,
|
|
127
|
+
0x00000080,
|
|
128
|
+
0x0000800a,
|
|
129
|
+
0x8000000a,
|
|
130
|
+
0x80008081,
|
|
131
|
+
0x00008080,
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
static const unsigned int KeccakRhoOffsets[nrLanes] =
|
|
135
|
+
{
|
|
136
|
+
0, 1, 30, 28, 27, 4, 12, 6, 23, 20, 3, 10, 11, 25, 7, 9, 13, 15, 21, 8, 18, 2, 29, 24, 14
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
#endif
|
|
140
|
+
|
|
141
|
+
/* ---------------------------------------------------------------- */
|
|
142
|
+
|
|
143
|
+
void KeccakP800_Initialize(void *state)
|
|
144
|
+
{
|
|
145
|
+
memset(state, 0, 800/8);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* ---------------------------------------------------------------- */
|
|
149
|
+
|
|
150
|
+
void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
151
|
+
{
|
|
152
|
+
#if DEBUG
|
|
153
|
+
assert(offset < 100);
|
|
154
|
+
#endif
|
|
155
|
+
((unsigned char *)state)[offset] ^= byte;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* ---------------------------------------------------------------- */
|
|
159
|
+
|
|
160
|
+
void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
161
|
+
{
|
|
162
|
+
unsigned int i;
|
|
163
|
+
|
|
164
|
+
#if DEBUG
|
|
165
|
+
assert(offset < 100);
|
|
166
|
+
assert(offset+length <= 100);
|
|
167
|
+
#endif
|
|
168
|
+
for(i=0; i<length; i++)
|
|
169
|
+
((unsigned char *)state)[offset+i] ^= data[i];
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* ---------------------------------------------------------------- */
|
|
173
|
+
|
|
174
|
+
void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
175
|
+
{
|
|
176
|
+
#if DEBUG
|
|
177
|
+
assert(offset < 100);
|
|
178
|
+
assert(offset+length <= 100);
|
|
179
|
+
#endif
|
|
180
|
+
memcpy((unsigned char*)state+offset, data, length);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* ---------------------------------------------------------------- */
|
|
184
|
+
|
|
185
|
+
void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
186
|
+
{
|
|
187
|
+
#if DEBUG
|
|
188
|
+
assert(byteCount <= 100);
|
|
189
|
+
#endif
|
|
190
|
+
memset(state, 0, byteCount);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/* ---------------------------------------------------------------- */
|
|
194
|
+
|
|
195
|
+
static void fromBytesToWords(tKeccakLane *stateAsWords, const unsigned char *state);
|
|
196
|
+
static void fromWordsToBytes(unsigned char *state, const tKeccakLane *stateAsWords);
|
|
197
|
+
void KeccakP800OnWords(tKeccakLane *state, unsigned int nrRounds);
|
|
198
|
+
void KeccakP800Round(tKeccakLane *state, unsigned int indexRound);
|
|
199
|
+
static void theta(tKeccakLane *A);
|
|
200
|
+
static void rho(tKeccakLane *A);
|
|
201
|
+
static void pi(tKeccakLane *A);
|
|
202
|
+
static void chi(tKeccakLane *A);
|
|
203
|
+
static void iota(tKeccakLane *A, unsigned int indexRound);
|
|
204
|
+
|
|
205
|
+
void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds)
|
|
206
|
+
{
|
|
207
|
+
#if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
|
|
208
|
+
tKeccakLane stateAsWords[800/32];
|
|
209
|
+
#endif
|
|
210
|
+
|
|
211
|
+
#ifdef KeccakReference
|
|
212
|
+
displayStateAsBytes(1, "Input of permutation", (const unsigned char *)state, 800);
|
|
213
|
+
#endif
|
|
214
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
215
|
+
KeccakP800OnWords((tKeccakLane*)state, nrounds);
|
|
216
|
+
#else
|
|
217
|
+
fromBytesToWords(stateAsWords, (const unsigned char *)state);
|
|
218
|
+
KeccakP800OnWords(stateAsWords, nrounds);
|
|
219
|
+
fromWordsToBytes((unsigned char *)state, stateAsWords);
|
|
220
|
+
#endif
|
|
221
|
+
#ifdef KeccakReference
|
|
222
|
+
displayStateAsBytes(1, "State after permutation", (const unsigned char *)state, 800);
|
|
223
|
+
#endif
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
void KeccakP800_Permute_12rounds(void *state)
|
|
227
|
+
{
|
|
228
|
+
#if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
|
|
229
|
+
tKeccakLane stateAsWords[800/32];
|
|
230
|
+
#endif
|
|
231
|
+
|
|
232
|
+
#ifdef KeccakReference
|
|
233
|
+
displayStateAsBytes(1, "Input of permutation", (const unsigned char *)state, 800);
|
|
234
|
+
#endif
|
|
235
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
236
|
+
KeccakP800OnWords((tKeccakLane*)state, 12);
|
|
237
|
+
#else
|
|
238
|
+
fromBytesToWords(stateAsWords, (const unsigned char *)state);
|
|
239
|
+
KeccakP800OnWords(stateAsWords, 12);
|
|
240
|
+
fromWordsToBytes((unsigned char *)state, stateAsWords);
|
|
241
|
+
#endif
|
|
242
|
+
#ifdef KeccakReference
|
|
243
|
+
displayStateAsBytes(1, "State after permutation", (const unsigned char *)state, 800);
|
|
244
|
+
#endif
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
void KeccakP800_Permute_22rounds(void *state)
|
|
248
|
+
{
|
|
249
|
+
#if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
|
|
250
|
+
tKeccakLane stateAsWords[800/32];
|
|
251
|
+
#endif
|
|
252
|
+
|
|
253
|
+
#ifdef KeccakReference
|
|
254
|
+
displayStateAsBytes(1, "Input of permutation", (const unsigned char *)state, 800);
|
|
255
|
+
#endif
|
|
256
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
257
|
+
KeccakP800OnWords((tKeccakLane*)state, 22);
|
|
258
|
+
#else
|
|
259
|
+
fromBytesToWords(stateAsWords, (const unsigned char *)state);
|
|
260
|
+
KeccakP800OnWords(stateAsWords, 22);
|
|
261
|
+
fromWordsToBytes((unsigned char *)state, stateAsWords);
|
|
262
|
+
#endif
|
|
263
|
+
#ifdef KeccakReference
|
|
264
|
+
displayStateAsBytes(1, "State after permutation", (const unsigned char *)state, 800);
|
|
265
|
+
#endif
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
static void fromBytesToWords(tKeccakLane *stateAsWords, const unsigned char *state)
|
|
269
|
+
{
|
|
270
|
+
unsigned int i, j;
|
|
271
|
+
|
|
272
|
+
for(i=0; i<nrLanes; i++) {
|
|
273
|
+
stateAsWords[i] = 0;
|
|
274
|
+
for(j=0; j<sizeof(tKeccakLane); j++)
|
|
275
|
+
stateAsWords[i] |= (tKeccakLane)(state[i*sizeof(tKeccakLane)+j]) << (8*j);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
static void fromWordsToBytes(unsigned char *state, const tKeccakLane *stateAsWords)
|
|
280
|
+
{
|
|
281
|
+
unsigned int i, j;
|
|
282
|
+
|
|
283
|
+
for(i=0; i<nrLanes; i++)
|
|
284
|
+
for(j=0; j<sizeof(tKeccakLane); j++)
|
|
285
|
+
state[i*sizeof(tKeccakLane)+j] = (stateAsWords[i] >> (8*j)) & 0xFF;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
void KeccakP800OnWords(tKeccakLane *state, unsigned int nrRounds)
|
|
289
|
+
{
|
|
290
|
+
unsigned int i;
|
|
291
|
+
|
|
292
|
+
#ifdef KeccakReference
|
|
293
|
+
displayStateAsLanes(3, "Same, with lanes as 32-bit words", state, 800);
|
|
294
|
+
#endif
|
|
295
|
+
|
|
296
|
+
for(i=(maxNrRounds-nrRounds); i<maxNrRounds; i++)
|
|
297
|
+
KeccakP800Round(state, i);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
void KeccakP800Round(tKeccakLane *state, unsigned int indexRound)
|
|
301
|
+
{
|
|
302
|
+
#ifdef KeccakReference
|
|
303
|
+
displayRoundNumber(3, indexRound);
|
|
304
|
+
#endif
|
|
305
|
+
|
|
306
|
+
theta(state);
|
|
307
|
+
#ifdef KeccakReference
|
|
308
|
+
displayStateAsLanes(3, "After theta", state, 800);
|
|
309
|
+
#endif
|
|
310
|
+
|
|
311
|
+
rho(state);
|
|
312
|
+
#ifdef KeccakReference
|
|
313
|
+
displayStateAsLanes(3, "After rho", state, 800);
|
|
314
|
+
#endif
|
|
315
|
+
|
|
316
|
+
pi(state);
|
|
317
|
+
#ifdef KeccakReference
|
|
318
|
+
displayStateAsLanes(3, "After pi", state, 800);
|
|
319
|
+
#endif
|
|
320
|
+
|
|
321
|
+
chi(state);
|
|
322
|
+
#ifdef KeccakReference
|
|
323
|
+
displayStateAsLanes(3, "After chi", state, 800);
|
|
324
|
+
#endif
|
|
325
|
+
|
|
326
|
+
iota(state, indexRound);
|
|
327
|
+
#ifdef KeccakReference
|
|
328
|
+
displayStateAsLanes(3, "After iota", state, 800);
|
|
329
|
+
#endif
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
#define ROL32(a, offset) ((offset != 0) ? ((((tKeccakLane)a) << offset) ^ (((tKeccakLane)a) >> (sizeof(tKeccakLane)*8-offset))) : a)
|
|
333
|
+
|
|
334
|
+
static void theta(tKeccakLane *A)
|
|
335
|
+
{
|
|
336
|
+
unsigned int x, y;
|
|
337
|
+
tKeccakLane C[5], D[5];
|
|
338
|
+
|
|
339
|
+
for(x=0; x<5; x++) {
|
|
340
|
+
C[x] = 0;
|
|
341
|
+
for(y=0; y<5; y++)
|
|
342
|
+
C[x] ^= A[index(x, y)];
|
|
343
|
+
}
|
|
344
|
+
for(x=0; x<5; x++)
|
|
345
|
+
D[x] = ROL32(C[(x+1)%5], 1) ^ C[(x+4)%5];
|
|
346
|
+
for(x=0; x<5; x++)
|
|
347
|
+
for(y=0; y<5; y++)
|
|
348
|
+
A[index(x, y)] ^= D[x];
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
static void rho(tKeccakLane *A)
|
|
352
|
+
{
|
|
353
|
+
unsigned int x, y;
|
|
354
|
+
|
|
355
|
+
for(x=0; x<5; x++) for(y=0; y<5; y++)
|
|
356
|
+
A[index(x, y)] = ROL32(A[index(x, y)], KeccakRhoOffsets[index(x, y)]);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
static void pi(tKeccakLane *A)
|
|
360
|
+
{
|
|
361
|
+
unsigned int x, y;
|
|
362
|
+
tKeccakLane tempA[25];
|
|
363
|
+
|
|
364
|
+
for(x=0; x<5; x++) for(y=0; y<5; y++)
|
|
365
|
+
tempA[index(x, y)] = A[index(x, y)];
|
|
366
|
+
for(x=0; x<5; x++) for(y=0; y<5; y++)
|
|
367
|
+
A[index(0*x+1*y, 2*x+3*y)] = tempA[index(x, y)];
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
static void chi(tKeccakLane *A)
|
|
371
|
+
{
|
|
372
|
+
unsigned int x, y;
|
|
373
|
+
tKeccakLane C[5];
|
|
374
|
+
|
|
375
|
+
for(y=0; y<5; y++) {
|
|
376
|
+
for(x=0; x<5; x++)
|
|
377
|
+
C[x] = A[index(x, y)] ^ ((~A[index(x+1, y)]) & A[index(x+2, y)]);
|
|
378
|
+
for(x=0; x<5; x++)
|
|
379
|
+
A[index(x, y)] = C[x];
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
static void iota(tKeccakLane *A, unsigned int indexRound)
|
|
384
|
+
{
|
|
385
|
+
A[index(0, 0)] ^= KeccakRoundConstants[indexRound];
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/* ---------------------------------------------------------------- */
|
|
389
|
+
|
|
390
|
+
void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
|
|
391
|
+
{
|
|
392
|
+
#if DEBUG
|
|
393
|
+
assert(offset < 100);
|
|
394
|
+
assert(offset+length <= 100);
|
|
395
|
+
#endif
|
|
396
|
+
memcpy(data, (unsigned char*)state+offset, length);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/* ---------------------------------------------------------------- */
|
|
400
|
+
|
|
401
|
+
void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
402
|
+
{
|
|
403
|
+
unsigned int i;
|
|
404
|
+
|
|
405
|
+
#if DEBUG
|
|
406
|
+
assert(offset < 100);
|
|
407
|
+
assert(offset+length <= 100);
|
|
408
|
+
#endif
|
|
409
|
+
for(i=0; i<length; i++)
|
|
410
|
+
output[i] = input[i] ^ ((unsigned char *)state)[offset+i];
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/* ---------------------------------------------------------------- */
|
|
414
|
+
|
|
415
|
+
void KeccakP800_DisplayRoundConstants(FILE *f)
|
|
416
|
+
{
|
|
417
|
+
unsigned int i;
|
|
418
|
+
|
|
419
|
+
for(i=0; i<maxNrRounds; i++) {
|
|
420
|
+
fprintf(f, "RC[%02i][0][0] = ", i);
|
|
421
|
+
fprintf(f, "%08X", (unsigned int)(KeccakRoundConstants[i]));
|
|
422
|
+
fprintf(f, "\n");
|
|
423
|
+
}
|
|
424
|
+
fprintf(f, "\n");
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
void KeccakP800_DisplayRhoOffsets(FILE *f)
|
|
428
|
+
{
|
|
429
|
+
unsigned int x, y;
|
|
430
|
+
|
|
431
|
+
for(y=0; y<5; y++) for(x=0; x<5; x++) {
|
|
432
|
+
fprintf(f, "RhoOffset[%i][%i] = ", x, y);
|
|
433
|
+
fprintf(f, "%2i", KeccakRhoOffsets[index(x, y)]);
|
|
434
|
+
fprintf(f, "\n");
|
|
435
|
+
}
|
|
436
|
+
fprintf(f, "\n");
|
|
437
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
#ifndef _KeccakP_800_reference_h_
|
|
18
|
+
#define _KeccakP_800_reference_h_
|
|
19
|
+
|
|
20
|
+
void KeccakP800_DisplayRoundConstants(FILE *f);
|
|
21
|
+
void KeccakP800_DisplayRhoOffsets(FILE *f);
|
|
22
|
+
|
|
23
|
+
#endif
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
https://github.com/XKCP/XKCP
|
|
4
|
+
|
|
5
|
+
Ketje, designed by Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer.
|
|
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
|
+
#ifndef _Ket_h_
|
|
18
|
+
#define _Ket_h_
|
|
19
|
+
|
|
20
|
+
#include "config.h"
|
|
21
|
+
|
|
22
|
+
/* Ketje frame bits */
|
|
23
|
+
#define FRAMEBITSEMPTY 0x01
|
|
24
|
+
#define FRAMEBITS0 0x02
|
|
25
|
+
#define FRAMEBITS00 0x04
|
|
26
|
+
#define FRAMEBITS10 0x05
|
|
27
|
+
#define FRAMEBITS01 0x06
|
|
28
|
+
#define FRAMEBITS11 0x07
|
|
29
|
+
|
|
30
|
+
/* Ketje rounds */
|
|
31
|
+
#define Ket_StartRounds 12
|
|
32
|
+
#define Ket_StepRounds 1
|
|
33
|
+
#define Ket_StrideRounds 6
|
|
34
|
+
|
|
35
|
+
#define Ketje_LaneSize (SnP_width/8/25)
|
|
36
|
+
#define Ketje_BlockSize (((SnP_width <= 400)?2:4)*Ketje_LaneSize)
|
|
37
|
+
|
|
38
|
+
#define XKCP_DeclareKetFunctions(prefix) \
|
|
39
|
+
void prefix##_StateAddByte( void *state, unsigned char value, unsigned int offset ); \
|
|
40
|
+
unsigned char prefix##_StateExtractByte( void *state, unsigned int offset ); \
|
|
41
|
+
void prefix##_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length ); \
|
|
42
|
+
void prefix##_Step( void *state, unsigned int size, unsigned char frameAndPaddingBits ); \
|
|
43
|
+
void prefix##_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks ); \
|
|
44
|
+
void prefix##_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks ); \
|
|
45
|
+
void prefix##_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks ); \
|
|
46
|
+
|
|
47
|
+
#ifdef XKCP_has_KeccakP200
|
|
48
|
+
#include "KeccakP-200-SnP.h"
|
|
49
|
+
XKCP_DeclareKetFunctions(KetJr)
|
|
50
|
+
#endif
|
|
51
|
+
|
|
52
|
+
#ifdef XKCP_has_KeccakP400
|
|
53
|
+
#include "KeccakP-400-SnP.h"
|
|
54
|
+
XKCP_DeclareKetFunctions(KetSr)
|
|
55
|
+
#endif
|
|
56
|
+
|
|
57
|
+
#endif
|