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,533 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
https://github.com/XKCP/XKCP
|
|
4
|
+
|
|
5
|
+
Kravatte, designed by Guido Bertoni, Joan Daemen, Seth Hoffert, 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
|
+
#if DEBUG
|
|
18
|
+
#include <assert.h>
|
|
19
|
+
#endif
|
|
20
|
+
#include <string.h>
|
|
21
|
+
#include <stdlib.h>
|
|
22
|
+
#include "brg_endian.h"
|
|
23
|
+
#include "Kravatte.h"
|
|
24
|
+
|
|
25
|
+
#ifdef XKCP_has_KeccakP1600times2
|
|
26
|
+
#include "KeccakP-1600-times2-SnP.h"
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
#ifdef XKCP_has_KeccakP1600times4
|
|
30
|
+
#include "KeccakP-1600-times4-SnP.h"
|
|
31
|
+
#endif
|
|
32
|
+
|
|
33
|
+
#ifdef XKCP_has_KeccakP1600times8
|
|
34
|
+
#include "KeccakP-1600-times8-SnP.h"
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
** Uncomment this define if calls to KeccakP1600_Initialize() and
|
|
39
|
+
** KeccakP1600times##Parallellism##_InitializeAll() are mandatory to make it work,
|
|
40
|
+
** mostly not needed.
|
|
41
|
+
**
|
|
42
|
+
#define NEED_INITIALIZE
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
** Uncomment this define for more debugging dumps.
|
|
47
|
+
**
|
|
48
|
+
#define DEBUG_DUMP
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
#define MaxParallellism 8
|
|
52
|
+
#define laneSize 8
|
|
53
|
+
#define widthInLanes (SnP_widthInBytes/laneSize)
|
|
54
|
+
#define SnP_width (SnP_widthInBytes*8)
|
|
55
|
+
|
|
56
|
+
#define MyMin(a, b) (((a) < (b)) ? (a) : (b))
|
|
57
|
+
|
|
58
|
+
#if defined(_MSC_VER)
|
|
59
|
+
#define ROL64(a, offset) _rotl64(a, offset)
|
|
60
|
+
#elif defined(KeccakP1600_useSHLD)
|
|
61
|
+
#define ROL64(x,N) ({ \
|
|
62
|
+
register uint64_t __out; \
|
|
63
|
+
register uint64_t __in = x; \
|
|
64
|
+
__asm__ ("shld %2,%0,%0" : "=r"(__out) : "0"(__in), "i"(N)); \
|
|
65
|
+
__out; \
|
|
66
|
+
})
|
|
67
|
+
#else
|
|
68
|
+
#define ROL64(a, offset) ((((uint64_t)a) << (offset)) | (((uint64_t)a) >> (64-(offset))))
|
|
69
|
+
#endif
|
|
70
|
+
|
|
71
|
+
#if defined(NEED_INITIALIZE)
|
|
72
|
+
#define mInitialize(argState) KeccakP1600_Initialize(argState)
|
|
73
|
+
#define mInitializePl(argStates, Parallellism) KeccakP1600times##Parallellism##_InitializeAll(argStates)
|
|
74
|
+
#else
|
|
75
|
+
#define mInitialize(argState)
|
|
76
|
+
#define mInitializePl(argStates, Parallellism)
|
|
77
|
+
#endif
|
|
78
|
+
|
|
79
|
+
#if defined(DEBUG_DUMP)
|
|
80
|
+
static void DUMP( const unsigned char * pText, const unsigned char * pData, unsigned int size )
|
|
81
|
+
{
|
|
82
|
+
unsigned int i;
|
|
83
|
+
printf("%s (%u bytes):", pText, size);
|
|
84
|
+
for(i=0; i<size; i++)
|
|
85
|
+
printf(" %02x", (int)pData[i]);
|
|
86
|
+
printf("\n");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
static void DUMP64( const unsigned char * pText, const unsigned char * pData, unsigned int size )
|
|
90
|
+
{
|
|
91
|
+
unsigned int i;
|
|
92
|
+
size /=8;
|
|
93
|
+
printf("%s (%u lanes):", pText, size);
|
|
94
|
+
for(i=0; i<size; i++)
|
|
95
|
+
printf(" %016lx", ((uint64_t*)pData)[i]);
|
|
96
|
+
printf("\n");
|
|
97
|
+
}
|
|
98
|
+
#else
|
|
99
|
+
#define DUMP(pText, pData, size )
|
|
100
|
+
#define DUMP64(pText, pData, size )
|
|
101
|
+
#endif
|
|
102
|
+
|
|
103
|
+
#define ParallelCompressLoopFast( Parallellism ) \
|
|
104
|
+
if ( messageByteLen >= Parallellism * SnP_widthInBytes ) { \
|
|
105
|
+
size_t processed = KeccakP1600times##Parallellism##_KravatteCompress((uint64_t*)x, (uint64_t*)k, message, messageByteLen); \
|
|
106
|
+
message += processed; \
|
|
107
|
+
messageByteLen -= processed; \
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
#define ParallelExpandLoopFast( Parallellism ) \
|
|
111
|
+
if ( outputByteLen >= Parallellism * SnP_widthInBytes ) { \
|
|
112
|
+
size_t processed = KeccakP1600times##Parallellism##_KravatteExpand((uint64_t*)kv->yAccu.a, (uint64_t*)kv->kRoll.a, output, outputByteLen); \
|
|
113
|
+
output += processed; \
|
|
114
|
+
outputByteLen -= processed; \
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
#define ParallelCompressLoopPlSnP( Parallellism ) \
|
|
118
|
+
if ( messageByteLen >= Parallellism * SnP_widthInBytes ) { \
|
|
119
|
+
ALIGN(KeccakP1600times##Parallellism##_statesAlignment) unsigned char states[KeccakP1600times##Parallellism##_statesSizeInBytes]; \
|
|
120
|
+
unsigned int i; \
|
|
121
|
+
\
|
|
122
|
+
KeccakP1600times##Parallellism##_StaticInitialize(); \
|
|
123
|
+
mInitializePl(states, Parallellism); \
|
|
124
|
+
do { \
|
|
125
|
+
Kravatte_Rollc( (uint64_t*)k, encbuf, Parallellism ); \
|
|
126
|
+
KeccakP1600times##Parallellism##_OverwriteLanesAll(states, k, Kravatte_RollcOffset/8, 0); \
|
|
127
|
+
i = 0; \
|
|
128
|
+
do { \
|
|
129
|
+
KeccakP1600times##Parallellism##_OverwriteBytes(states, i, encbuf + i * Kravatte_RollcSizeInBytes, Kravatte_RollcOffset, Kravatte_RollcSizeInBytes); \
|
|
130
|
+
} while ( ++i < Parallellism ); \
|
|
131
|
+
KeccakP1600times##Parallellism##_AddLanesAll(states, message, widthInLanes, widthInLanes); \
|
|
132
|
+
DUMP("msg pn", message, Parallellism * SnP_widthInBytes); \
|
|
133
|
+
KeccakP1600times##Parallellism##_PermuteAll_6rounds(states); \
|
|
134
|
+
i = 0; \
|
|
135
|
+
do { \
|
|
136
|
+
KeccakP1600times##Parallellism##_ExtractAndAddBytes(states, i, x, x, 0, SnP_widthInBytes); \
|
|
137
|
+
DUMP("xAc pn", x, SnP_widthInBytes); \
|
|
138
|
+
} while ( ++i < Parallellism ); \
|
|
139
|
+
message += Parallellism * SnP_widthInBytes; \
|
|
140
|
+
messageByteLen -= Parallellism * SnP_widthInBytes; \
|
|
141
|
+
} while ( messageByteLen >= Parallellism * SnP_widthInBytes ); \
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
#define ParallelExpandLoopPlSnP( Parallellism ) \
|
|
145
|
+
if ( outputByteLen >= Parallellism * SnP_widthInBytes ) { \
|
|
146
|
+
ALIGN(KeccakP1600times##Parallellism##_statesAlignment) unsigned char states[KeccakP1600times##Parallellism##_statesSizeInBytes]; \
|
|
147
|
+
unsigned int i; \
|
|
148
|
+
\
|
|
149
|
+
KeccakP1600times##Parallellism##_StaticInitialize(); \
|
|
150
|
+
mInitializePl(states, Parallellism); \
|
|
151
|
+
do { \
|
|
152
|
+
Kravatte_Rolle( (uint64_t*)kv->yAccu.a, encbuf, Parallellism ); \
|
|
153
|
+
KeccakP1600times##Parallellism##_OverwriteLanesAll(states, kv->yAccu.a, Kravatte_RolleOffset/8, 0); \
|
|
154
|
+
i = 0; \
|
|
155
|
+
do { \
|
|
156
|
+
KeccakP1600times##Parallellism##_OverwriteBytes(states, i, encbuf + i * Kravatte_RolleSizeInBytes, Kravatte_RolleOffset, Kravatte_RolleSizeInBytes); \
|
|
157
|
+
} while ( ++i < Parallellism ); \
|
|
158
|
+
KeccakP1600times##Parallellism##_PermuteAll_6rounds(states); \
|
|
159
|
+
i = 0; \
|
|
160
|
+
do { \
|
|
161
|
+
KeccakP1600times##Parallellism##_ExtractAndAddBytes(states, i, kv->kRoll.a, output, 0, SnP_widthInBytes); \
|
|
162
|
+
DUMP("out n", output, SnP_widthInBytes); \
|
|
163
|
+
output += SnP_widthInBytes; \
|
|
164
|
+
} while ( ++i < Parallellism ); \
|
|
165
|
+
outputByteLen -= Parallellism * SnP_widthInBytes; \
|
|
166
|
+
} while ( outputByteLen >= Parallellism * SnP_widthInBytes ); \
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
static void Kravatte_Rollc( uint64_t *x, unsigned char *encbuf, unsigned int parallellism )
|
|
170
|
+
{
|
|
171
|
+
uint64_t x0 = x[20];
|
|
172
|
+
uint64_t x1 = x[21];
|
|
173
|
+
uint64_t x2 = x[22];
|
|
174
|
+
uint64_t x3 = x[23];
|
|
175
|
+
uint64_t x4 = x[24];
|
|
176
|
+
uint64_t t;
|
|
177
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
178
|
+
uint64_t *pEnc = (uint64_t*)encbuf;
|
|
179
|
+
#endif
|
|
180
|
+
|
|
181
|
+
do {
|
|
182
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
183
|
+
*(pEnc++) = x0;
|
|
184
|
+
*(pEnc++) = x1;
|
|
185
|
+
*(pEnc++) = x2;
|
|
186
|
+
*(pEnc++) = x3;
|
|
187
|
+
*(pEnc++) = x4;
|
|
188
|
+
DUMP("Rollc", pEnc - Kravatte_RollcSizeInBytes/8, Kravatte_RollcSizeInBytes);
|
|
189
|
+
#else
|
|
190
|
+
#error todo
|
|
191
|
+
#endif
|
|
192
|
+
|
|
193
|
+
t = x0;
|
|
194
|
+
x0 = x1;
|
|
195
|
+
x1 = x2;
|
|
196
|
+
x2 = x3;
|
|
197
|
+
x3 = x4;
|
|
198
|
+
x4 = ROL64(t, 7) ^ x0 ^ (x0 >> 3);
|
|
199
|
+
} while(--parallellism != 0);
|
|
200
|
+
|
|
201
|
+
x[20] = x0;
|
|
202
|
+
x[21] = x1;
|
|
203
|
+
x[22] = x2;
|
|
204
|
+
x[23] = x3;
|
|
205
|
+
x[24] = x4;
|
|
206
|
+
DUMP("Rollc state", pEnc - Kravatte_RollcSizeInBytes/8, Kravatte_RollcSizeInBytes);
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
static void Kravatte_Rolle( uint64_t *x, unsigned char *encbuf, unsigned int parallellism )
|
|
211
|
+
{
|
|
212
|
+
uint64_t x0 = x[15];
|
|
213
|
+
uint64_t x1 = x[16];
|
|
214
|
+
uint64_t x2 = x[17];
|
|
215
|
+
uint64_t x3 = x[18];
|
|
216
|
+
uint64_t x4 = x[19];
|
|
217
|
+
uint64_t x5 = x[20];
|
|
218
|
+
uint64_t x6 = x[21];
|
|
219
|
+
uint64_t x7 = x[22];
|
|
220
|
+
uint64_t x8 = x[23];
|
|
221
|
+
uint64_t x9 = x[24];
|
|
222
|
+
uint64_t t;
|
|
223
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
224
|
+
uint64_t *pEnc = (uint64_t*)encbuf;
|
|
225
|
+
#endif
|
|
226
|
+
|
|
227
|
+
do {
|
|
228
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
229
|
+
*(pEnc++) = x0;
|
|
230
|
+
*(pEnc++) = x1;
|
|
231
|
+
*(pEnc++) = x2;
|
|
232
|
+
*(pEnc++) = x3;
|
|
233
|
+
*(pEnc++) = x4;
|
|
234
|
+
*(pEnc++) = x5;
|
|
235
|
+
*(pEnc++) = x6;
|
|
236
|
+
*(pEnc++) = x7;
|
|
237
|
+
*(pEnc++) = x8;
|
|
238
|
+
*(pEnc++) = x9;
|
|
239
|
+
DUMP("Rolle", pEnc - Kravatte_RolleSizeInBytes/8, Kravatte_RolleSizeInBytes);
|
|
240
|
+
#else
|
|
241
|
+
#error todo
|
|
242
|
+
#endif
|
|
243
|
+
|
|
244
|
+
t = x0;
|
|
245
|
+
x0 = x1;
|
|
246
|
+
x1 = x2;
|
|
247
|
+
x2 = x3;
|
|
248
|
+
x3 = x4;
|
|
249
|
+
x4 = x5;
|
|
250
|
+
x5 = x6;
|
|
251
|
+
x6 = x7;
|
|
252
|
+
x7 = x8;
|
|
253
|
+
x8 = x9;
|
|
254
|
+
x9 = ROL64(t, 7) ^ ROL64(x0, 18) ^ (x1 & (x0 >> 1));
|
|
255
|
+
} while(--parallellism != 0);
|
|
256
|
+
|
|
257
|
+
x[15] = x0;
|
|
258
|
+
x[16] = x1;
|
|
259
|
+
x[17] = x2;
|
|
260
|
+
x[18] = x3;
|
|
261
|
+
x[19] = x4;
|
|
262
|
+
x[20] = x5;
|
|
263
|
+
x[21] = x6;
|
|
264
|
+
x[22] = x7;
|
|
265
|
+
x[23] = x8;
|
|
266
|
+
x[24] = x9;
|
|
267
|
+
DUMP("Rolle state", pEnc - Kravatte_RolleSizeInBytes/8, Kravatte_RolleSizeInBytes);
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
static const unsigned char * Kra_Compress( unsigned char *k, unsigned char *x, const BitSequence *message, BitLength *messageBitLen, int lastFlag )
|
|
272
|
+
{
|
|
273
|
+
unsigned char encbuf[MaxParallellism*Kravatte_RollcSizeInBytes];
|
|
274
|
+
size_t messageByteLen = *messageBitLen / 8; /* do not include partial last byte */
|
|
275
|
+
|
|
276
|
+
#if defined(KeccakP1600times8_implementation) && !defined(KeccakP1600times8_isFallback)
|
|
277
|
+
#if defined(KeccakF1600times8_FastKravatte_supported)
|
|
278
|
+
ParallelCompressLoopFast( 8 )
|
|
279
|
+
#else
|
|
280
|
+
ParallelCompressLoopPlSnP( 8 )
|
|
281
|
+
#endif
|
|
282
|
+
#endif
|
|
283
|
+
#if defined(KeccakP1600times4_implementation) && !defined(KeccakP1600times4_isFallback)
|
|
284
|
+
#if defined(KeccakF1600times4_FastKravatte_supported)
|
|
285
|
+
ParallelCompressLoopFast( 4 )
|
|
286
|
+
#else
|
|
287
|
+
ParallelCompressLoopPlSnP( 4 )
|
|
288
|
+
#endif
|
|
289
|
+
#endif
|
|
290
|
+
#if defined(KeccakP1600times2_implementation) && !defined(KeccakP1600times2_isFallback)
|
|
291
|
+
#if defined(KeccakF1600times2_FastKravatte_supported)
|
|
292
|
+
ParallelCompressLoopFast( 2 )
|
|
293
|
+
#else
|
|
294
|
+
ParallelCompressLoopPlSnP( 2 )
|
|
295
|
+
#endif
|
|
296
|
+
#endif
|
|
297
|
+
|
|
298
|
+
if (messageByteLen >= SnP_widthInBytes) {
|
|
299
|
+
ALIGN(KeccakP1600_stateAlignment) unsigned char state[KeccakP1600_stateSizeInBytes];
|
|
300
|
+
|
|
301
|
+
KeccakP1600_StaticInitialize();
|
|
302
|
+
mInitialize(state);
|
|
303
|
+
do {
|
|
304
|
+
KeccakP1600_OverwriteBytes(state, k, 0, SnP_widthInBytes);
|
|
305
|
+
Kravatte_Rollc((uint64_t*)k, encbuf, 1);
|
|
306
|
+
KeccakP1600_AddBytes(state, message, 0, SnP_widthInBytes);
|
|
307
|
+
DUMP("msg p1", message, SnP_widthInBytes);
|
|
308
|
+
KeccakP1600_Permute_Nrounds(state, 6);
|
|
309
|
+
KeccakP1600_ExtractAndAddBytes(state, x, x, 0, SnP_widthInBytes);
|
|
310
|
+
DUMP("xAc p1", x, SnP_widthInBytes);
|
|
311
|
+
message += SnP_widthInBytes;
|
|
312
|
+
messageByteLen -= SnP_widthInBytes;
|
|
313
|
+
} while ( messageByteLen >= SnP_widthInBytes );
|
|
314
|
+
}
|
|
315
|
+
*messageBitLen %= SnP_width;
|
|
316
|
+
if ( lastFlag != 0 ) {
|
|
317
|
+
ALIGN(KeccakP1600_stateAlignment) unsigned char state[KeccakP1600_stateSizeInBytes];
|
|
318
|
+
|
|
319
|
+
#if DEBUG
|
|
320
|
+
assert(messageByteLen < SnP_widthInBytes);
|
|
321
|
+
#endif
|
|
322
|
+
KeccakP1600_StaticInitialize();
|
|
323
|
+
mInitialize(state);
|
|
324
|
+
KeccakP1600_OverwriteBytes(state, k, 0, SnP_widthInBytes); /* write k */
|
|
325
|
+
Kravatte_Rollc((uint64_t*)k, encbuf, 1);
|
|
326
|
+
KeccakP1600_AddBytes(state, message, 0, (unsigned int)messageByteLen); /* add message */
|
|
327
|
+
DUMP("msg pL", state, SnP_widthInBytes);
|
|
328
|
+
message += messageByteLen;
|
|
329
|
+
*messageBitLen %= 8;
|
|
330
|
+
if (*messageBitLen != 0) /* padding */
|
|
331
|
+
KeccakP1600_AddByte(state, *message++ | (1 << *messageBitLen), (unsigned int)messageByteLen);
|
|
332
|
+
else
|
|
333
|
+
KeccakP1600_AddByte(state, 1, (unsigned int)messageByteLen);
|
|
334
|
+
KeccakP1600_Permute_Nrounds(state, 6);
|
|
335
|
+
KeccakP1600_ExtractAndAddBytes(state, x, x, 0, SnP_widthInBytes);
|
|
336
|
+
DUMP("xAc pL", x, SnP_widthInBytes);
|
|
337
|
+
Kravatte_Rollc((uint64_t*)k, encbuf, 1);
|
|
338
|
+
*messageBitLen = 0;
|
|
339
|
+
}
|
|
340
|
+
return message;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
int Kravatte_MaskDerivation(Kravatte_Instance *kv, const BitSequence *Key, BitLength KeyBitLen)
|
|
344
|
+
{
|
|
345
|
+
ALIGN(KeccakP1600_stateAlignment) unsigned char state[KeccakP1600_stateSizeInBytes];
|
|
346
|
+
BitSequence lastByte;
|
|
347
|
+
unsigned int numberOfBits;
|
|
348
|
+
|
|
349
|
+
/* Check max K length (b-1) */
|
|
350
|
+
if (KeyBitLen >= SnP_width)
|
|
351
|
+
return 1;
|
|
352
|
+
/* Compute k from K */
|
|
353
|
+
memset(kv->k.a, 0, SnP_widthInBytes);
|
|
354
|
+
memcpy(kv->k.a, Key, KeyBitLen/8);
|
|
355
|
+
numberOfBits = KeyBitLen & 7;
|
|
356
|
+
if ((numberOfBits) != 0) {
|
|
357
|
+
lastByte = (Key[KeyBitLen/8] & ((1 << numberOfBits) - 1)) | (1 << numberOfBits);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
lastByte = 1;
|
|
361
|
+
}
|
|
362
|
+
kv->k.a[KeyBitLen/8] = lastByte;
|
|
363
|
+
KeccakP1600_StaticInitialize();
|
|
364
|
+
mInitialize(state);
|
|
365
|
+
KeccakP1600_OverwriteBytes(state, kv->k.a, 0, SnP_widthInBytes);
|
|
366
|
+
KeccakP1600_Permute_Nrounds(state, 6);
|
|
367
|
+
KeccakP1600_ExtractBytes(state, kv->k.a, 0, SnP_widthInBytes);
|
|
368
|
+
memcpy( kv->kRoll.a, kv->k.a, SnP_widthInBytes );
|
|
369
|
+
memset( kv->xAccu.a, 0, SnP_widthInBytes );
|
|
370
|
+
kv->phase = COMPRESSING;
|
|
371
|
+
kv->queueOffset = 0;
|
|
372
|
+
|
|
373
|
+
return 0;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
int Kra(Kravatte_Instance *kv, const BitSequence *input, BitLength inputBitLen, int flags)
|
|
377
|
+
{
|
|
378
|
+
int finalFlag = flags & KRAVATTE_FLAG_LAST_PART;
|
|
379
|
+
|
|
380
|
+
if ((finalFlag == 0) && ((inputBitLen & 7) != 0))
|
|
381
|
+
return 1;
|
|
382
|
+
if ( (flags & KRAVATTE_FLAG_INIT) != 0 ) {
|
|
383
|
+
memcpy(kv->kRoll.a, kv->k.a, SnP_widthInBytes);
|
|
384
|
+
memset(kv->xAccu.a, 0, SnP_widthInBytes);
|
|
385
|
+
kv->queueOffset = 0;
|
|
386
|
+
}
|
|
387
|
+
if (kv->phase != COMPRESSING) {
|
|
388
|
+
kv->phase = COMPRESSING;
|
|
389
|
+
kv->queueOffset = 0;
|
|
390
|
+
}
|
|
391
|
+
else if ( kv->queueOffset != 0 ) { /* we have already some data queued */
|
|
392
|
+
unsigned int bitlen = (unsigned int)MyMin(inputBitLen, SnP_width - kv->queueOffset);
|
|
393
|
+
unsigned int bytelen = (bitlen + 7) / 8;
|
|
394
|
+
|
|
395
|
+
memcpy(kv->queue.a + kv->queueOffset / 8, input, bytelen);
|
|
396
|
+
input += bytelen;
|
|
397
|
+
inputBitLen -= bitlen;
|
|
398
|
+
kv->queueOffset += bitlen;
|
|
399
|
+
if ( kv->queueOffset == SnP_width ) { /* queue full */
|
|
400
|
+
Kra_Compress(kv->kRoll.a, kv->xAccu.a, kv->queue.a, &kv->queueOffset, 0);
|
|
401
|
+
kv->queueOffset = 0;
|
|
402
|
+
}
|
|
403
|
+
else if ( finalFlag != 0 ) {
|
|
404
|
+
Kra_Compress(kv->kRoll.a, kv->xAccu.a, kv->queue.a, &kv->queueOffset, 1);
|
|
405
|
+
return 0;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
if ( (inputBitLen >= SnP_width) || (finalFlag != 0) ) { /* Compress blocks */
|
|
409
|
+
input = Kra_Compress(kv->kRoll.a, kv->xAccu.a, input, &inputBitLen, finalFlag);
|
|
410
|
+
}
|
|
411
|
+
if ( inputBitLen != 0 ) { /* Queue eventual residual message bytes */
|
|
412
|
+
#if DEBUG
|
|
413
|
+
assert( inputBitLen < SnP_width );
|
|
414
|
+
assert( finalFlag == 0 );
|
|
415
|
+
#endif
|
|
416
|
+
memcpy(kv->queue.a, input, inputBitLen/8);
|
|
417
|
+
kv->queueOffset = inputBitLen;
|
|
418
|
+
}
|
|
419
|
+
return 0;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
int Vatte(Kravatte_Instance *kv, BitSequence *output, BitLength outputBitLen, int flags)
|
|
423
|
+
{
|
|
424
|
+
size_t outputByteLen;
|
|
425
|
+
unsigned char encbuf[MaxParallellism*Kravatte_RolleSizeInBytes];
|
|
426
|
+
int finalFlag = flags & KRAVATTE_FLAG_LAST_PART;
|
|
427
|
+
|
|
428
|
+
if ((finalFlag == 0) && ((outputBitLen & 7) != 0))
|
|
429
|
+
return 1;
|
|
430
|
+
if ( kv->phase == COMPRESSING) {
|
|
431
|
+
if ( kv->queueOffset != 0 )
|
|
432
|
+
return 1;
|
|
433
|
+
if ((flags & KRAVATTE_FLAG_SHORT) != 0) {
|
|
434
|
+
memcpy(kv->yAccu.a, kv->xAccu.a, SnP_widthInBytes);
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
ALIGN(KeccakP1600_stateAlignment) unsigned char state[KeccakP1600_stateSizeInBytes];
|
|
438
|
+
|
|
439
|
+
KeccakP1600_StaticInitialize();
|
|
440
|
+
mInitialize(state);
|
|
441
|
+
KeccakP1600_OverwriteBytes(state, kv->xAccu.a, 0, SnP_widthInBytes);
|
|
442
|
+
KeccakP1600_Permute_Nrounds(state, 6);
|
|
443
|
+
KeccakP1600_ExtractBytes(state, kv->yAccu.a, 0, SnP_widthInBytes);
|
|
444
|
+
}
|
|
445
|
+
kv->phase = EXPANDING;
|
|
446
|
+
DUMP("yAccu", kv->yAccu.a, SnP_widthInBytes);
|
|
447
|
+
DUMP("key ", kv->k.a, SnP_widthInBytes);
|
|
448
|
+
}
|
|
449
|
+
else if (kv->phase != EXPANDING)
|
|
450
|
+
return 1;
|
|
451
|
+
if ( kv->queueOffset != 0 ) { /* we have already some data for output in stock */
|
|
452
|
+
unsigned int bitlen = (unsigned int)MyMin(outputBitLen, SnP_widthInBytes*8 - kv->queueOffset);
|
|
453
|
+
unsigned int bytelen = (bitlen + 7) / 8;
|
|
454
|
+
|
|
455
|
+
memcpy(output, kv->queue.a + kv->queueOffset / 8, bytelen);
|
|
456
|
+
kv->queueOffset += bitlen;
|
|
457
|
+
if (kv->queueOffset == SnP_widthInBytes*8)
|
|
458
|
+
kv->queueOffset = 0;
|
|
459
|
+
output += bytelen;
|
|
460
|
+
outputBitLen -= bitlen;
|
|
461
|
+
if ((finalFlag != 0) && (outputBitLen == 0)) {
|
|
462
|
+
bitlen &= 7;
|
|
463
|
+
if (bitlen != 0) /* cleanup last incomplete byte */
|
|
464
|
+
*(output - 1) &= (1 << bitlen) - 1;
|
|
465
|
+
kv->phase = EXPANDED;
|
|
466
|
+
return 0;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
outputByteLen = (outputBitLen + 7) / 8;
|
|
471
|
+
#if defined(KeccakP1600times8_implementation) && !defined(KeccakP1600times8_isFallback)
|
|
472
|
+
#if defined(KeccakF1600times8_FastKravatte_supported)
|
|
473
|
+
ParallelExpandLoopFast( 8 )
|
|
474
|
+
#else
|
|
475
|
+
ParallelExpandLoopPlSnP( 8 )
|
|
476
|
+
#endif
|
|
477
|
+
#endif
|
|
478
|
+
#if defined(KeccakP1600times4_implementation) && !defined(KeccakP1600times4_isFallback)
|
|
479
|
+
#if defined(KeccakF1600times4_FastKravatte_supported)
|
|
480
|
+
ParallelExpandLoopFast( 4 )
|
|
481
|
+
#else
|
|
482
|
+
ParallelExpandLoopPlSnP( 4 )
|
|
483
|
+
#endif
|
|
484
|
+
#endif
|
|
485
|
+
#if defined(KeccakP1600times2_implementation) && !defined(KeccakP1600times2_isFallback)
|
|
486
|
+
#if defined(KeccakF1600times2_FastKravatte_supported)
|
|
487
|
+
ParallelExpandLoopFast( 2 )
|
|
488
|
+
#else
|
|
489
|
+
ParallelExpandLoopPlSnP( 2 )
|
|
490
|
+
#endif
|
|
491
|
+
#endif
|
|
492
|
+
if ( outputByteLen != 0 ) {
|
|
493
|
+
ALIGN(KeccakP1600_stateAlignment) unsigned char state[KeccakP1600_stateSizeInBytes];
|
|
494
|
+
unsigned int len;
|
|
495
|
+
|
|
496
|
+
KeccakP1600_StaticInitialize();
|
|
497
|
+
mInitialize(state);
|
|
498
|
+
do {
|
|
499
|
+
len = (unsigned int)MyMin(outputByteLen, SnP_widthInBytes);
|
|
500
|
+
KeccakP1600_OverwriteBytes(state, kv->yAccu.a, 0, SnP_widthInBytes);
|
|
501
|
+
Kravatte_Rolle((uint64_t*)kv->yAccu.a, encbuf, 1);
|
|
502
|
+
KeccakP1600_Permute_Nrounds(state, 6);
|
|
503
|
+
KeccakP1600_ExtractAndAddBytes(state, kv->kRoll.a, output, 0, len);
|
|
504
|
+
DUMP("out 1", output, len);
|
|
505
|
+
output += len;
|
|
506
|
+
outputByteLen -= len;
|
|
507
|
+
} while ( outputByteLen != 0 );
|
|
508
|
+
if (!finalFlag && (len != SnP_widthInBytes)) { /* Put rest of expanded data into queue */
|
|
509
|
+
unsigned int offset = len;
|
|
510
|
+
len = SnP_widthInBytes - len;
|
|
511
|
+
KeccakP1600_ExtractAndAddBytes(state, kv->kRoll.a + offset, kv->queue.a + offset, offset, len);
|
|
512
|
+
kv->queueOffset = offset * 8; /* current bit offset in queue buffer */
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
if (finalFlag != 0) {
|
|
516
|
+
outputBitLen &= 7;
|
|
517
|
+
if (outputBitLen != 0) { /* cleanup last incomplete byte */
|
|
518
|
+
*(output - 1) &= (1 << outputBitLen) - 1;
|
|
519
|
+
DUMP("out L", output - 1, 1);
|
|
520
|
+
}
|
|
521
|
+
kv->phase = EXPANDED;
|
|
522
|
+
}
|
|
523
|
+
return 0;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
int Kravatte(Kravatte_Instance *kv, const BitSequence *input, BitLength inputBitLen, BitSequence *output, BitLength outputBitLen, int flags)
|
|
527
|
+
{
|
|
528
|
+
|
|
529
|
+
flags |= KRAVATTE_FLAG_LAST_PART;
|
|
530
|
+
if ( Kra(kv, input, inputBitLen, flags) != 0 )
|
|
531
|
+
return 1;
|
|
532
|
+
return Vatte(kv, output, outputBitLen, flags);
|
|
533
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
https://github.com/XKCP/XKCP
|
|
4
|
+
|
|
5
|
+
Kravatte, designed by Guido Bertoni, Joan Daemen, Seth Hoffert, 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 _Kravatte_h_
|
|
18
|
+
#define _Kravatte_h_
|
|
19
|
+
|
|
20
|
+
#include "config.h"
|
|
21
|
+
#ifdef XKCP_has_KeccakP1600
|
|
22
|
+
|
|
23
|
+
#include <stddef.h>
|
|
24
|
+
#include <stdint.h>
|
|
25
|
+
#include "align.h"
|
|
26
|
+
#include "KeccakP-1600-SnP.h"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
#define SnP_widthInBytes 200
|
|
30
|
+
#define Kravatte_RollcSizeInBytes (5*8)
|
|
31
|
+
#define Kravatte_RollcOffset (SnP_widthInBytes-Kravatte_RollcSizeInBytes)
|
|
32
|
+
#define Kravatte_RolleSizeInBytes (10*8)
|
|
33
|
+
#define Kravatte_RolleOffset (SnP_widthInBytes-Kravatte_RolleSizeInBytes)
|
|
34
|
+
|
|
35
|
+
#define KRAVATTE_FLAG_NONE 0
|
|
36
|
+
#define KRAVATTE_FLAG_INIT 1 /* If set, initialize a new Kra session */
|
|
37
|
+
#define KRAVATTE_FLAG_LAST_PART 2 /* If set, indicates the last part of input/output */
|
|
38
|
+
#define KRAVATTE_FLAG_SHORT 4 /* If set, indicates Short-Kravatte will be performed */
|
|
39
|
+
|
|
40
|
+
#define KRAVATTE_ALIGNMENT KeccakP1600_stateAlignment
|
|
41
|
+
|
|
42
|
+
typedef unsigned char BitSequence;
|
|
43
|
+
typedef size_t BitLength;
|
|
44
|
+
|
|
45
|
+
typedef enum
|
|
46
|
+
{
|
|
47
|
+
NOT_INITIALIZED_YET,
|
|
48
|
+
COMPRESSING,
|
|
49
|
+
EXPANDING,
|
|
50
|
+
EXPANDED,
|
|
51
|
+
} Kravatte_Phases;
|
|
52
|
+
|
|
53
|
+
ALIGN(KRAVATTE_ALIGNMENT) typedef struct
|
|
54
|
+
{
|
|
55
|
+
unsigned char a[SnP_widthInBytes];
|
|
56
|
+
} Kravatte_AlignedArray;
|
|
57
|
+
|
|
58
|
+
typedef struct {
|
|
59
|
+
Kravatte_AlignedArray k;
|
|
60
|
+
Kravatte_AlignedArray kRoll;
|
|
61
|
+
Kravatte_AlignedArray xAccu;
|
|
62
|
+
Kravatte_AlignedArray yAccu;
|
|
63
|
+
Kravatte_AlignedArray queue; /* input/output queue buffer */
|
|
64
|
+
BitLength queueOffset; /* current offset in queue */
|
|
65
|
+
Kravatte_Phases phase;
|
|
66
|
+
} Kravatte_Instance;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Function to initialize a Kravatte instance with given key.
|
|
70
|
+
* @param kvInstance Pointer to the instance to be initialized.
|
|
71
|
+
* @param Key Pointer to the key (K).
|
|
72
|
+
* @param KeyBitLen The length of the key in bits.
|
|
73
|
+
* @return 0 if successful, 1 otherwise.
|
|
74
|
+
*/
|
|
75
|
+
int Kravatte_MaskDerivation(Kravatte_Instance *kvInstance, const BitSequence *Key, BitLength KeyBitLen);
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Function to give input data to be compressed.
|
|
79
|
+
* @param kvInstance Pointer to the instance initialized by Kravatte_MaskDerivation().
|
|
80
|
+
* @param input Pointer to the input message data (M).
|
|
81
|
+
* @param inputBitLen The number of bits provided in the input message data.
|
|
82
|
+
* This must be a multiple of 8 if KRAVATTE_FLAG_LAST_PART flag not set.
|
|
83
|
+
* @param flags Bitwise or combination of KRAVATTE_FLAG_NONE, KRAVATTE_FLAG_INIT, KRAVATTE_FLAG_LAST_PART.
|
|
84
|
+
* @return 0 if successful, 1 otherwise.
|
|
85
|
+
*/
|
|
86
|
+
int Kra(Kravatte_Instance *kvInstance, const BitSequence *input, BitLength inputBitLen, int flags);
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Function to expand output data.
|
|
90
|
+
* @param kvInstance Pointer to the hash instance initialized by Kravatte_MaskDerivation().
|
|
91
|
+
* @param output Pointer to the buffer where to store the output data.
|
|
92
|
+
* @param outputBitLen The number of output bits desired.
|
|
93
|
+
* This must be a multiple of 8 if KRAVATTE_FLAG_LAST_PART flag not set.
|
|
94
|
+
* @param flags Bitwise or combination of KRAVATTE_FLAG_NONE, KRAVATTE_FLAG_SHORT, KRAVATTE_FLAG_LAST_PART.
|
|
95
|
+
* @return 0 if successful, 1 otherwise.
|
|
96
|
+
*/
|
|
97
|
+
int Vatte(Kravatte_Instance *kvInstance, BitSequence *output, BitLength outputBitLen, int flags);
|
|
98
|
+
|
|
99
|
+
/** Function to compress input data and expand output data.
|
|
100
|
+
* @param kvInstance Pointer to the instance initialized by Kravatte_MaskDerivation().
|
|
101
|
+
* @param input Pointer to the input message (M).
|
|
102
|
+
* @param inputBitLen The number of bits provided in the input message data.
|
|
103
|
+
* @param output Pointer to the output buffer.
|
|
104
|
+
* @param outputBitLen The number of output bits desired.
|
|
105
|
+
* @param flags Bitwise or combination of KRAVATTE_FLAG_NONE, KRAVATTE_FLAG_INIT, KRAVATTE_FLAG_SHORT, KRAVATTE_FLAG_LAST_PART.
|
|
106
|
+
* KRAVATTE_FLAG_LAST_PART is internally forced to true for input and output.
|
|
107
|
+
* @return 0 if successful, 1 otherwise.
|
|
108
|
+
*/
|
|
109
|
+
int Kravatte(Kravatte_Instance *kvInstance, const BitSequence *input, BitLength inputBitLen, BitSequence *output, BitLength outputBitLen, int flags);
|
|
110
|
+
|
|
111
|
+
#else
|
|
112
|
+
#error This requires an implementation of Keccak-p[1600]
|
|
113
|
+
#endif
|
|
114
|
+
|
|
115
|
+
#endif
|