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,68 @@
|
|
|
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 <string.h>
|
|
21
|
+
#include "config.h"
|
|
22
|
+
|
|
23
|
+
/* Ketje frame bits */
|
|
24
|
+
#define FRAMEBITSEMPTY 0x01
|
|
25
|
+
#define FRAMEBITS0 0x02
|
|
26
|
+
#define FRAMEBITS00 0x04
|
|
27
|
+
#define FRAMEBITS10 0x05
|
|
28
|
+
#define FRAMEBITS01 0x06
|
|
29
|
+
#define FRAMEBITS11 0x07
|
|
30
|
+
|
|
31
|
+
/* Ketje rounds */
|
|
32
|
+
#define Ket_StartRounds 12
|
|
33
|
+
#define Ket_StepRounds 1
|
|
34
|
+
#define Ket_StrideRounds 6
|
|
35
|
+
|
|
36
|
+
#define Ketje_LaneSize (SnP_width/8/25)
|
|
37
|
+
#define Ketje_BlockSize (((SnP_width <= 400)?2:4)*Ketje_LaneSize)
|
|
38
|
+
|
|
39
|
+
#define XKCP_DeclareKetFunctions(prefix) \
|
|
40
|
+
void prefix##_StateAddByte( void *state, unsigned char value, unsigned int offset ); \
|
|
41
|
+
unsigned char prefix##_StateExtractByte( void *state, unsigned int offset ); \
|
|
42
|
+
void prefix##_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length ); \
|
|
43
|
+
void prefix##_Step( void *state, unsigned int size, unsigned char frameAndPaddingBits ); \
|
|
44
|
+
void prefix##_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks ); \
|
|
45
|
+
void prefix##_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks ); \
|
|
46
|
+
void prefix##_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks ); \
|
|
47
|
+
|
|
48
|
+
#ifdef XKCP_has_KeccakP200
|
|
49
|
+
#include "KeccakP-200-SnP.h"
|
|
50
|
+
XKCP_DeclareKetFunctions(KetJr)
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
#ifdef XKCP_has_KeccakP400
|
|
54
|
+
#include "KeccakP-400-SnP.h"
|
|
55
|
+
XKCP_DeclareKetFunctions(KetSr)
|
|
56
|
+
#endif
|
|
57
|
+
|
|
58
|
+
#ifdef XKCP_has_KeccakP800
|
|
59
|
+
#include "KeccakP-800-SnP.h"
|
|
60
|
+
XKCP_DeclareKetFunctions(KetMn)
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
#ifdef XKCP_has_KeccakP1600
|
|
64
|
+
#include "KeccakP-1600-SnP.h"
|
|
65
|
+
XKCP_DeclareKetFunctions(KetMj)
|
|
66
|
+
#endif
|
|
67
|
+
|
|
68
|
+
#endif
|
|
@@ -0,0 +1,174 @@
|
|
|
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
|
+
#define JOIN0(a, b) a ## b
|
|
18
|
+
#define JOIN(a, b) JOIN0(a, b)
|
|
19
|
+
|
|
20
|
+
#define Ket_StateTwistIndexes JOIN(prefix, _StateTwistIndexes)
|
|
21
|
+
#define Ket_StateAddByte JOIN(prefix, _StateAddByte)
|
|
22
|
+
#define Ket_StateExtractByte JOIN(prefix, _StateExtractByte)
|
|
23
|
+
#define Ket_StateOverwrite JOIN(prefix, _StateOverwrite)
|
|
24
|
+
#define Ket_Step JOIN(prefix, _Step)
|
|
25
|
+
#define Ket_FeedAssociatedDataBlocks JOIN(prefix, _FeedAssociatedDataBlocks)
|
|
26
|
+
#define Ket_UnwrapBlocks JOIN(prefix, _UnwrapBlocks)
|
|
27
|
+
#define Ket_WrapBlocks JOIN(prefix, _WrapBlocks)
|
|
28
|
+
|
|
29
|
+
#define Ket_StateTwistIndexBlock0 0
|
|
30
|
+
#define Ket_StateTwistIndexBlock1 6
|
|
31
|
+
#if (SnP_width <= 400 )
|
|
32
|
+
#define Ket_StateTwistIndexBlockSize 12
|
|
33
|
+
#else
|
|
34
|
+
#define Ket_StateTwistIndexBlock2 12
|
|
35
|
+
#define Ket_StateTwistIndexBlock3 18
|
|
36
|
+
#define Ket_StateTwistIndexBlockSize 24
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
const unsigned char Ket_StateTwistIndexes[] = {
|
|
40
|
+
0, 6, 12, 18, 24,
|
|
41
|
+
3, 9, 10, 16, 22,
|
|
42
|
+
1, 7, 13, 19, 20,
|
|
43
|
+
4, 5, 11, 17, 23,
|
|
44
|
+
2, 8, 14, 15, 21
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/* Permutation state management functions */
|
|
48
|
+
|
|
49
|
+
void Ket_StateAddByte( void *state, unsigned char value, unsigned int offset )
|
|
50
|
+
{
|
|
51
|
+
((unsigned char *)state)[Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize] ^= value;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
unsigned char Ket_StateExtractByte( void *state, unsigned int offset )
|
|
55
|
+
{
|
|
56
|
+
return ((unsigned char *)state)[Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
void Ket_StateOverwrite( void *stateArg, unsigned int offset, const unsigned char *data, unsigned int length )
|
|
60
|
+
{
|
|
61
|
+
unsigned char *state = (unsigned char*)stateArg;
|
|
62
|
+
|
|
63
|
+
while ( length-- != 0 )
|
|
64
|
+
{
|
|
65
|
+
state[Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize] = *(data++);
|
|
66
|
+
offset++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Ketje low level functions */
|
|
71
|
+
|
|
72
|
+
void Ket_Step( void *state, unsigned int size, unsigned char framing )
|
|
73
|
+
{
|
|
74
|
+
|
|
75
|
+
((unsigned char*)state)[Ket_StateTwistIndexes[size / Ketje_LaneSize] * Ketje_LaneSize + size % Ketje_LaneSize] ^= framing;
|
|
76
|
+
((tKeccakLane*)state)[Ket_StateTwistIndexBlockSize] ^= 0x08;
|
|
77
|
+
SnP_PermuteRounds(state, Ket_StepRounds);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
void Ket_FeedAssociatedDataBlocks( void *stateArg, const unsigned char *data, unsigned int nBlocks )
|
|
81
|
+
{
|
|
82
|
+
tKeccakLane *state = (tKeccakLane*)stateArg;
|
|
83
|
+
|
|
84
|
+
do
|
|
85
|
+
{
|
|
86
|
+
state[Ket_StateTwistIndexBlock0] ^= ReadUnalignedLane( data + 0 * sizeof(tKeccakLane) );
|
|
87
|
+
state[Ket_StateTwistIndexBlock1] ^= ReadUnalignedLane( data + 1 * sizeof(tKeccakLane) );
|
|
88
|
+
#if (SnP_width >= 800 )
|
|
89
|
+
state[Ket_StateTwistIndexBlock2] ^= ReadUnalignedLane( data + 2 * sizeof(tKeccakLane) );
|
|
90
|
+
state[Ket_StateTwistIndexBlock3] ^= ReadUnalignedLane( data + 3 * sizeof(tKeccakLane) );
|
|
91
|
+
#endif
|
|
92
|
+
data += Ketje_BlockSize;
|
|
93
|
+
state[Ket_StateTwistIndexBlockSize] ^= 0x08 | FRAMEBITS00;
|
|
94
|
+
SnP_PermuteRounds(state, Ket_StepRounds);
|
|
95
|
+
}
|
|
96
|
+
while ( --nBlocks != 0 );
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
void Ket_UnwrapBlocks( void *stateArg, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks )
|
|
100
|
+
{
|
|
101
|
+
tKeccakLane *state = (tKeccakLane*)stateArg;
|
|
102
|
+
tKeccakLane t;
|
|
103
|
+
|
|
104
|
+
do
|
|
105
|
+
{
|
|
106
|
+
t = ReadUnalignedLane( ciphertext + 0 * sizeof(tKeccakLane) );
|
|
107
|
+
WriteUnalignedLane( plaintext + 0 * sizeof(tKeccakLane), state[Ket_StateTwistIndexBlock0] ^ t );
|
|
108
|
+
state[Ket_StateTwistIndexBlock0] = t;
|
|
109
|
+
t = ReadUnalignedLane( ciphertext + 1 * sizeof(tKeccakLane) );
|
|
110
|
+
WriteUnalignedLane( plaintext + 1 * sizeof(tKeccakLane), state[Ket_StateTwistIndexBlock1] ^ t );
|
|
111
|
+
state[Ket_StateTwistIndexBlock1] = t;
|
|
112
|
+
|
|
113
|
+
#if (SnP_width >= 800 )
|
|
114
|
+
t = ReadUnalignedLane( ciphertext + 2 * sizeof(tKeccakLane) );
|
|
115
|
+
WriteUnalignedLane( plaintext + 2 * sizeof(tKeccakLane), state[Ket_StateTwistIndexBlock2] ^ t );
|
|
116
|
+
state[Ket_StateTwistIndexBlock2] = t;
|
|
117
|
+
t = ReadUnalignedLane( ciphertext + 3 * sizeof(tKeccakLane) );
|
|
118
|
+
WriteUnalignedLane( plaintext + 3 * sizeof(tKeccakLane), state[Ket_StateTwistIndexBlock3] ^ t );
|
|
119
|
+
state[Ket_StateTwistIndexBlock3] = t;
|
|
120
|
+
#endif
|
|
121
|
+
|
|
122
|
+
ciphertext += Ketje_BlockSize;
|
|
123
|
+
plaintext += Ketje_BlockSize;
|
|
124
|
+
state[Ket_StateTwistIndexBlockSize] ^= 0x08 | FRAMEBITS11;
|
|
125
|
+
SnP_PermuteRounds(state, Ket_StepRounds);
|
|
126
|
+
}
|
|
127
|
+
while ( --nBlocks != 0 );
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
void Ket_WrapBlocks( void *stateArg, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks )
|
|
131
|
+
{
|
|
132
|
+
tKeccakLane *state = (tKeccakLane*)stateArg;
|
|
133
|
+
tKeccakLane t;
|
|
134
|
+
|
|
135
|
+
do
|
|
136
|
+
{
|
|
137
|
+
t = state[Ket_StateTwistIndexBlock0] ^ ReadUnalignedLane( plaintext + 0 * sizeof(tKeccakLane) );
|
|
138
|
+
state[Ket_StateTwistIndexBlock0] = t;
|
|
139
|
+
WriteUnalignedLane( ciphertext + 0 * sizeof(tKeccakLane), t );
|
|
140
|
+
t = state[Ket_StateTwistIndexBlock1] ^ ReadUnalignedLane( plaintext + 1 * sizeof(tKeccakLane) );
|
|
141
|
+
state[Ket_StateTwistIndexBlock1] = t;
|
|
142
|
+
WriteUnalignedLane( ciphertext + 1 * sizeof(tKeccakLane), t );
|
|
143
|
+
|
|
144
|
+
#if (SnP_width >= 800 )
|
|
145
|
+
t = state[Ket_StateTwistIndexBlock2] ^ ReadUnalignedLane( plaintext + 2 * sizeof(tKeccakLane) );
|
|
146
|
+
state[Ket_StateTwistIndexBlock2] = t;
|
|
147
|
+
WriteUnalignedLane( ciphertext + 2 * sizeof(tKeccakLane), t );
|
|
148
|
+
t = state[Ket_StateTwistIndexBlock3] ^ ReadUnalignedLane( plaintext + 3 * sizeof(tKeccakLane) );
|
|
149
|
+
state[Ket_StateTwistIndexBlock3] = t;
|
|
150
|
+
WriteUnalignedLane( ciphertext + 3 * sizeof(tKeccakLane), t );
|
|
151
|
+
#endif
|
|
152
|
+
|
|
153
|
+
ciphertext += Ketje_BlockSize;
|
|
154
|
+
plaintext += Ketje_BlockSize;
|
|
155
|
+
state[Ket_StateTwistIndexBlockSize] ^= 0x08 | FRAMEBITS11;
|
|
156
|
+
SnP_PermuteRounds(state, Ket_StepRounds);
|
|
157
|
+
}
|
|
158
|
+
while ( --nBlocks != 0 );
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
#undef Ket_StateTwistIndexes
|
|
162
|
+
#undef Ket_StateAddByte
|
|
163
|
+
#undef Ket_StateExtractByte
|
|
164
|
+
#undef Ket_StateOverwrite
|
|
165
|
+
#undef Ket_Step
|
|
166
|
+
#undef Ket_FeedAssociatedDataBlocks
|
|
167
|
+
#undef Ket_UnwrapBlocks
|
|
168
|
+
#undef Ket_WrapBlocks
|
|
169
|
+
|
|
170
|
+
#undef Ket_StateTwistIndexBlock0
|
|
171
|
+
#undef Ket_StateTwistIndexBlock1
|
|
172
|
+
#undef Ket_StateTwistIndexBlock2
|
|
173
|
+
#undef Ket_StateTwistIndexBlock3
|
|
174
|
+
#undef Ket_StateTwistIndexBlockSize
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
#ifdef KeccakReference
|
|
18
|
+
#include "displayIntermediateValues.h"
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
#include "config.h"
|
|
22
|
+
#include "Ket.h"
|
|
23
|
+
|
|
24
|
+
#define Ket_Minimum( a, b ) (((a) < (b)) ? (a) : (b))
|
|
25
|
+
|
|
26
|
+
#ifdef XKCP_has_KeccakP200
|
|
27
|
+
#include "KeccakP-200-SnP.h"
|
|
28
|
+
|
|
29
|
+
#define prefix KetJr
|
|
30
|
+
#define SnP KeccakP200
|
|
31
|
+
#define SnP_width 200
|
|
32
|
+
#define SnP_PermuteRounds KeccakP200_Permute_Nrounds
|
|
33
|
+
#include "Ket.inc"
|
|
34
|
+
#undef prefix
|
|
35
|
+
#undef SnP
|
|
36
|
+
#undef SnP_width
|
|
37
|
+
#undef SnP_PermuteRounds
|
|
38
|
+
#endif
|
|
39
|
+
|
|
40
|
+
#ifdef XKCP_has_KeccakP400
|
|
41
|
+
#include "KeccakP-400-SnP.h"
|
|
42
|
+
|
|
43
|
+
#define prefix KetSr
|
|
44
|
+
#define SnP KeccakP400
|
|
45
|
+
#define SnP_width 400
|
|
46
|
+
#define SnP_PermuteRounds KeccakP400_Permute_Nrounds
|
|
47
|
+
#include "Ket.inc"
|
|
48
|
+
#undef prefix
|
|
49
|
+
#undef SnP
|
|
50
|
+
#undef SnP_width
|
|
51
|
+
#undef SnP_PermuteRounds
|
|
52
|
+
#endif
|
|
53
|
+
|
|
54
|
+
#ifdef XKCP_has_KeccakP800
|
|
55
|
+
#include "KeccakP-800-SnP.h"
|
|
56
|
+
|
|
57
|
+
#define prefix KetMn
|
|
58
|
+
#define SnP KeccakP800
|
|
59
|
+
#define SnP_width 800
|
|
60
|
+
#define SnP_PermuteRounds KeccakP800_Permute_Nrounds
|
|
61
|
+
#include "Ket.inc"
|
|
62
|
+
#undef prefix
|
|
63
|
+
#undef SnP
|
|
64
|
+
#undef SnP_width
|
|
65
|
+
#undef SnP_PermuteRounds
|
|
66
|
+
#endif
|
|
67
|
+
|
|
68
|
+
#ifdef XKCP_has_KeccakP1600
|
|
69
|
+
#include "KeccakP-1600-SnP.h"
|
|
70
|
+
|
|
71
|
+
#define prefix KetMj
|
|
72
|
+
#define SnP KeccakP1600
|
|
73
|
+
#define SnP_width 1600
|
|
74
|
+
#define SnP_PermuteRounds KeccakP1600_Permute_Nrounds
|
|
75
|
+
#include "Ket.inc"
|
|
76
|
+
#undef prefix
|
|
77
|
+
#undef SnP
|
|
78
|
+
#undef SnP_width
|
|
79
|
+
#undef SnP_PermuteRounds
|
|
80
|
+
#endif
|
|
@@ -0,0 +1,68 @@
|
|
|
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 <string.h>
|
|
21
|
+
#include "config.h"
|
|
22
|
+
|
|
23
|
+
/* Ketje frame bits */
|
|
24
|
+
#define FRAMEBITSEMPTY 0x01
|
|
25
|
+
#define FRAMEBITS0 0x02
|
|
26
|
+
#define FRAMEBITS00 0x04
|
|
27
|
+
#define FRAMEBITS10 0x05
|
|
28
|
+
#define FRAMEBITS01 0x06
|
|
29
|
+
#define FRAMEBITS11 0x07
|
|
30
|
+
|
|
31
|
+
/* Ketje rounds */
|
|
32
|
+
#define Ket_StartRounds 12
|
|
33
|
+
#define Ket_StepRounds 1
|
|
34
|
+
#define Ket_StrideRounds 6
|
|
35
|
+
|
|
36
|
+
#define Ketje_LaneSize (SnP_width/8/25)
|
|
37
|
+
#define Ketje_BlockSize (((SnP_width <= 400)?2:4)*Ketje_LaneSize)
|
|
38
|
+
|
|
39
|
+
#define XKCP_DeclareKetFunctions(prefix) \
|
|
40
|
+
void prefix##_StateAddByte( void *state, unsigned char value, unsigned int offset ); \
|
|
41
|
+
unsigned char prefix##_StateExtractByte( void *state, unsigned int offset ); \
|
|
42
|
+
void prefix##_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length ); \
|
|
43
|
+
void prefix##_Step( void *state, unsigned int size, unsigned char frameAndPaddingBits ); \
|
|
44
|
+
void prefix##_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks ); \
|
|
45
|
+
void prefix##_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks ); \
|
|
46
|
+
void prefix##_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks ); \
|
|
47
|
+
|
|
48
|
+
#ifdef XKCP_has_KeccakP200
|
|
49
|
+
#include "KeccakP-200-SnP.h"
|
|
50
|
+
XKCP_DeclareKetFunctions(KetJr)
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
#ifdef XKCP_has_KeccakP400
|
|
54
|
+
#include "KeccakP-400-SnP.h"
|
|
55
|
+
XKCP_DeclareKetFunctions(KetSr)
|
|
56
|
+
#endif
|
|
57
|
+
|
|
58
|
+
#ifdef XKCP_has_KeccakP800
|
|
59
|
+
#include "KeccakP-800-SnP.h"
|
|
60
|
+
XKCP_DeclareKetFunctions(KetMn)
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
#ifdef XKCP_has_KeccakP1600
|
|
64
|
+
#include "KeccakP-1600-SnP.h"
|
|
65
|
+
XKCP_DeclareKetFunctions(KetMj)
|
|
66
|
+
#endif
|
|
67
|
+
|
|
68
|
+
#endif
|
|
@@ -0,0 +1,142 @@
|
|
|
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
|
+
#define JOIN0(a, b) a ## b
|
|
18
|
+
#define JOIN(a, b) JOIN0(a, b)
|
|
19
|
+
|
|
20
|
+
#define SnP_AddBytes JOIN(SnP, _AddBytes)
|
|
21
|
+
#define SnP_AddByte JOIN(SnP, _AddByte)
|
|
22
|
+
#define SnP_OverwriteBytes JOIN(SnP, _OverwriteBytes)
|
|
23
|
+
#define SnP_ExtractBytes JOIN(SnP, _ExtractBytes)
|
|
24
|
+
#define SnP_ExtractAndAddBytes JOIN(SnP, _ExtractAndAddBytes)
|
|
25
|
+
|
|
26
|
+
#define Ket_StateTwistIndexes JOIN(prefix, _StateTwistIndexes)
|
|
27
|
+
#define Ket_StateAddByte JOIN(prefix, _StateAddByte)
|
|
28
|
+
#define Ket_StateExtractByte JOIN(prefix, _StateExtractByte)
|
|
29
|
+
#define Ket_StateOverwrite JOIN(prefix, _StateOverwrite)
|
|
30
|
+
#define Ket_Step JOIN(prefix, _Step)
|
|
31
|
+
#define Ket_FeedAssociatedDataBlocks JOIN(prefix, _FeedAssociatedDataBlocks)
|
|
32
|
+
#define Ket_UnwrapBlocks JOIN(prefix, _UnwrapBlocks)
|
|
33
|
+
#define Ket_WrapBlocks JOIN(prefix, _WrapBlocks)
|
|
34
|
+
|
|
35
|
+
const unsigned char Ket_StateTwistIndexes[] = {
|
|
36
|
+
0, 6, 12, 18, 24,
|
|
37
|
+
3, 9, 10, 16, 22,
|
|
38
|
+
1, 7, 13, 19, 20,
|
|
39
|
+
4, 5, 11, 17, 23,
|
|
40
|
+
2, 8, 14, 15, 21
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
/* Permutation state management functions */
|
|
45
|
+
|
|
46
|
+
void Ket_StateAddByte( void *state, unsigned char value, unsigned int offset )
|
|
47
|
+
{
|
|
48
|
+
SnP_AddByte(state, value, Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
unsigned char Ket_StateExtractByte( void *state, unsigned int offset )
|
|
52
|
+
{
|
|
53
|
+
unsigned char data[1];
|
|
54
|
+
|
|
55
|
+
SnP_ExtractBytes(state, data, Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize, 1);
|
|
56
|
+
return data[0];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
void Ket_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length )
|
|
60
|
+
{
|
|
61
|
+
while ( length-- != 0 )
|
|
62
|
+
{
|
|
63
|
+
SnP_OverwriteBytes(state, data, Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize, 1);
|
|
64
|
+
++data;
|
|
65
|
+
++offset;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Ketje low level functions */
|
|
70
|
+
|
|
71
|
+
void Ket_Step( void *state, unsigned int size, unsigned char frameAndPaddingBits)
|
|
72
|
+
{
|
|
73
|
+
|
|
74
|
+
SnP_AddByte(state, frameAndPaddingBits, Ket_StateTwistIndexes[size / Ketje_LaneSize] * Ketje_LaneSize + size % Ketje_LaneSize);
|
|
75
|
+
SnP_AddByte(state, 0x08, Ket_StateTwistIndexes[Ketje_BlockSize / Ketje_LaneSize] * Ketje_LaneSize);
|
|
76
|
+
SnP_PermuteRounds(state, Ket_StepRounds);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void Ket_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks )
|
|
80
|
+
{
|
|
81
|
+
unsigned int laneIndex;
|
|
82
|
+
|
|
83
|
+
do
|
|
84
|
+
{
|
|
85
|
+
for ( laneIndex = 0; laneIndex < (Ketje_BlockSize / Ketje_LaneSize); ++laneIndex )
|
|
86
|
+
{
|
|
87
|
+
SnP_AddBytes( state, data, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize );
|
|
88
|
+
data += Ketje_LaneSize;
|
|
89
|
+
}
|
|
90
|
+
Ket_Step( state, Ketje_BlockSize, FRAMEBITS00 );
|
|
91
|
+
}
|
|
92
|
+
while ( --nBlocks != 0 );
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
void Ket_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks )
|
|
96
|
+
{
|
|
97
|
+
unsigned int laneIndex;
|
|
98
|
+
|
|
99
|
+
while ( nBlocks-- != 0 )
|
|
100
|
+
{
|
|
101
|
+
for ( laneIndex = 0; laneIndex < (Ketje_BlockSize / Ketje_LaneSize); ++laneIndex )
|
|
102
|
+
{
|
|
103
|
+
SnP_ExtractAndAddBytes( state, ciphertext, plaintext, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize );
|
|
104
|
+
SnP_AddBytes(state, plaintext, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize);
|
|
105
|
+
plaintext += Ketje_LaneSize;
|
|
106
|
+
ciphertext += Ketje_LaneSize;
|
|
107
|
+
}
|
|
108
|
+
SnP_AddByte(state, 0x08 | FRAMEBITS11, Ket_StateTwistIndexes[Ketje_BlockSize / Ketje_LaneSize] * Ketje_LaneSize);
|
|
109
|
+
SnP_PermuteRounds(state, Ket_StepRounds);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
void Ket_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks )
|
|
114
|
+
{
|
|
115
|
+
unsigned int laneIndex;
|
|
116
|
+
|
|
117
|
+
while ( nBlocks-- != 0 )
|
|
118
|
+
{
|
|
119
|
+
for ( laneIndex = 0; laneIndex < (Ketje_BlockSize / Ketje_LaneSize); ++laneIndex )
|
|
120
|
+
{
|
|
121
|
+
SnP_AddBytes(state, plaintext, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize);
|
|
122
|
+
SnP_ExtractBytes( state, ciphertext, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize );
|
|
123
|
+
plaintext += Ketje_LaneSize;
|
|
124
|
+
ciphertext += Ketje_LaneSize;
|
|
125
|
+
}
|
|
126
|
+
SnP_AddByte(state, 0x08 | FRAMEBITS11, Ket_StateTwistIndexes[Ketje_BlockSize / Ketje_LaneSize] * Ketje_LaneSize);
|
|
127
|
+
SnP_PermuteRounds(state, Ket_StepRounds);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#undef SnP_AddBytes
|
|
132
|
+
#undef SnP_AddByte
|
|
133
|
+
#undef SnP_OverwriteBytes
|
|
134
|
+
#undef SnP_ExtractBytes
|
|
135
|
+
#undef SnP_ExtractAndAddBytes
|
|
136
|
+
|
|
137
|
+
#undef Ket_StateExtractByte
|
|
138
|
+
#undef Ket_StateOverwrite
|
|
139
|
+
#undef Ket_Step
|
|
140
|
+
#undef Ket_FeedAssociatedDataBlocks
|
|
141
|
+
#undef Ket_UnwrapBlocks
|
|
142
|
+
#undef Ket_WrapBlocks
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
https://github.com/XKCP/XKCP
|
|
4
|
+
|
|
5
|
+
The Xoodoo permutation, designed by Joan Daemen, Seth Hoffert, 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 _Xoodoo_SnP_h_
|
|
18
|
+
#define _Xoodoo_SnP_h_
|
|
19
|
+
|
|
20
|
+
#include <stddef.h>
|
|
21
|
+
#include <stdint.h>
|
|
22
|
+
|
|
23
|
+
/** For the documentation, see SnP-documentation.h.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
#define Xoodoo_implementation "32-bit optimized ARM assembler implementation"
|
|
27
|
+
#define Xoodoo_stateSizeInBytes (3*4*4)
|
|
28
|
+
#define Xoodoo_stateAlignment 4
|
|
29
|
+
|
|
30
|
+
#define Xoodoo_StaticInitialize()
|
|
31
|
+
void Xoodoo_Initialize(void *state);
|
|
32
|
+
#define Xoodoo_AddByte(argS, argData, argOffset) ((uint8_t*)argS)[argOffset] ^= (argData)
|
|
33
|
+
void Xoodoo_AddBytes(void *state, const uint8_t *data, unsigned int offset, unsigned int length);
|
|
34
|
+
void Xoodoo_OverwriteBytes(void *state, const uint8_t *data, unsigned int offset, unsigned int length);
|
|
35
|
+
void Xoodoo_OverwriteWithZeroes(void *state, unsigned int byteCount);
|
|
36
|
+
//void Xoodoo_Permute_Nrounds(void *state, unsigned int nrounds);
|
|
37
|
+
void Xoodoo_Permute_6rounds(void *state);
|
|
38
|
+
void Xoodoo_Permute_12rounds(void *state);
|
|
39
|
+
void Xoodoo_ExtractBytes(const void *state, uint8_t *data, unsigned int offset, unsigned int length);
|
|
40
|
+
void Xoodoo_ExtractAndAddBytes(const void *state, const uint8_t *input, uint8_t *output, unsigned int offset, unsigned int length);
|
|
41
|
+
|
|
42
|
+
#define Xoodoo_FastXoofff_supported
|
|
43
|
+
void Xoofff_AddIs(uint8_t *output, const uint8_t *input, size_t bitLen);
|
|
44
|
+
size_t Xoofff_CompressFastLoop(uint8_t *kRoll, uint8_t *xAccu, const uint8_t *input, size_t length);
|
|
45
|
+
size_t Xoofff_ExpandFastLoop(uint8_t *yAccu, const uint8_t *kRoll, uint8_t *output, size_t length);
|
|
46
|
+
|
|
47
|
+
#define CyclistFullBlocks_supported
|
|
48
|
+
size_t Xoodyak_AbsorbKeyedFullBlocks(void *state, const uint8_t *X, size_t XLen);
|
|
49
|
+
size_t Xoodyak_AbsorbHashFullBlocks(void *state, const uint8_t *X, size_t XLen);
|
|
50
|
+
size_t Xoodyak_SqueezeHashFullBlocks(void *state, uint8_t *Y, size_t YLen);
|
|
51
|
+
size_t Xoodyak_SqueezeKeyedFullBlocks(void *state, uint8_t *Y, size_t YLen);
|
|
52
|
+
size_t Xoodyak_EncryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen);
|
|
53
|
+
size_t Xoodyak_DecryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen);
|
|
54
|
+
|
|
55
|
+
#endif
|