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,88 @@
|
|
|
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 _Ketjev2_h_
|
|
18
|
+
#define _Ketjev2_h_
|
|
19
|
+
|
|
20
|
+
/* For the documentation, please follow the link: */
|
|
21
|
+
/* #include "Ketje-documentation.h" */
|
|
22
|
+
|
|
23
|
+
#include <string.h>
|
|
24
|
+
#include "align.h"
|
|
25
|
+
#include "config.h"
|
|
26
|
+
|
|
27
|
+
/** The phase is a data element that expresses what Ketje is doing
|
|
28
|
+
* - virgin: the only operation supported is initialization, loading the key and nonce. This will switch
|
|
29
|
+
* the phase to feedingAssociatedData
|
|
30
|
+
* - feedingAssociatedData: Ketje is ready for feeding associated data, has started feeding associated data
|
|
31
|
+
* or has finished feeding associated data. It allows feeding some more associated data in which case the phase does not
|
|
32
|
+
* change. One can also start wrapping plaintext, that sets the phase to wrapping. Finally, one can
|
|
33
|
+
* start unwrapping ciphertext, that sets the phase to unwrapping.
|
|
34
|
+
* - wrapping: Ketje is ready for wrapping some more plaintext or for delivering the tag.
|
|
35
|
+
* Wrapping more plaintext does not modify the phase, asking for the tag sets the phase to feedingAssociatedData.
|
|
36
|
+
* - unwrapping: Ketje is ready for unwrapping some more ciphertext or for delivering the tag.
|
|
37
|
+
* Unwrapping more ciphertext does not modify the phase, asking for the tag sets the phase to feedingAssociatedData.
|
|
38
|
+
*/
|
|
39
|
+
enum Phase {
|
|
40
|
+
Ketje_Phase_Virgin = 0,
|
|
41
|
+
Ketje_Phase_FeedingAssociatedData = 1,
|
|
42
|
+
Ketje_Phase_Wrapping = 2,
|
|
43
|
+
Ketje_Phase_Unwrapping = 4
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
#define XKCP_DeclareKetjeStructure(prefix, size, alignment) \
|
|
47
|
+
ALIGN(alignment) typedef struct prefix##InstanceStruct { \
|
|
48
|
+
unsigned char state[size]; \
|
|
49
|
+
unsigned int phase; \
|
|
50
|
+
unsigned int dataRemainderSize; \
|
|
51
|
+
} prefix##_Instance;
|
|
52
|
+
|
|
53
|
+
#define XKCP_DeclareKetjeFunctions(prefix) \
|
|
54
|
+
int prefix##_Initialize(prefix##_Instance *instance, const unsigned char *key, unsigned int keySizeInBits, const unsigned char *nonce, unsigned int nonceSizeInBits); \
|
|
55
|
+
int prefix##_FeedAssociatedData(prefix##_Instance *instance, const unsigned char *data, unsigned int dataSizeInBytes); \
|
|
56
|
+
int prefix##_WrapPlaintext(prefix##_Instance *instance, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int dataSizeInBytes); \
|
|
57
|
+
int prefix##_UnwrapCiphertext(prefix##_Instance *instance, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int dataSizeInBytes); \
|
|
58
|
+
int prefix##_GetTag(prefix##_Instance *instance, unsigned char *tag, unsigned int tagSizeInBytes);
|
|
59
|
+
|
|
60
|
+
#ifdef XKCP_has_KeccakP200
|
|
61
|
+
#include "KeccakP-200-SnP.h"
|
|
62
|
+
XKCP_DeclareKetjeStructure(KetjeJr, KeccakP200_stateSizeInBytes, KeccakP200_stateAlignment)
|
|
63
|
+
XKCP_DeclareKetjeFunctions(KetjeJr)
|
|
64
|
+
#define XKCP_has_KetjeJr
|
|
65
|
+
#endif
|
|
66
|
+
|
|
67
|
+
#ifdef XKCP_has_KeccakP400
|
|
68
|
+
#include "KeccakP-400-SnP.h"
|
|
69
|
+
XKCP_DeclareKetjeStructure(KetjeSr, KeccakP400_stateSizeInBytes, KeccakP400_stateAlignment)
|
|
70
|
+
XKCP_DeclareKetjeFunctions(KetjeSr)
|
|
71
|
+
#define XKCP_has_KetjeSr
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
#ifdef XKCP_has_KeccakP800
|
|
75
|
+
#include "KeccakP-800-SnP.h"
|
|
76
|
+
XKCP_DeclareKetjeStructure(KetjeMn, KeccakP800_stateSizeInBytes, KeccakP800_stateAlignment)
|
|
77
|
+
XKCP_DeclareKetjeFunctions(KetjeMn)
|
|
78
|
+
#define XKCP_has_KetjeMn
|
|
79
|
+
#endif
|
|
80
|
+
|
|
81
|
+
#ifdef XKCP_has_KeccakP1600
|
|
82
|
+
#include "KeccakP-1600-SnP.h"
|
|
83
|
+
XKCP_DeclareKetjeStructure(KetjeMj, KeccakP1600_stateSizeInBytes, KeccakP1600_stateAlignment)
|
|
84
|
+
XKCP_DeclareKetjeFunctions(KetjeMj)
|
|
85
|
+
#define XKCP_has_KetjeMj
|
|
86
|
+
#endif
|
|
87
|
+
|
|
88
|
+
#endif
|
|
@@ -0,0 +1,274 @@
|
|
|
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_StaticInitialize JOIN(SnP, _StaticInitialize)
|
|
21
|
+
#define SnP_Initialize JOIN(SnP, _Initialize)
|
|
22
|
+
|
|
23
|
+
#define Ketje_Instance JOIN(prefix, _Instance)
|
|
24
|
+
#define Ketje_Initialize JOIN(prefix, _Initialize)
|
|
25
|
+
#define Ketje_FeedAssociatedData JOIN(prefix, _FeedAssociatedData)
|
|
26
|
+
#define Ketje_WrapPlaintext JOIN(prefix, _WrapPlaintext)
|
|
27
|
+
#define Ketje_UnwrapCiphertext JOIN(prefix, _UnwrapCiphertext)
|
|
28
|
+
#define Ketje_GetTag JOIN(prefix, _GetTag)
|
|
29
|
+
|
|
30
|
+
#define Ket_StateAddByte JOIN(prefixKet, _StateAddByte)
|
|
31
|
+
#define Ket_StateExtractByte JOIN(prefixKet, _StateExtractByte)
|
|
32
|
+
#define Ket_StateOverwrite JOIN(prefixKet, _StateOverwrite)
|
|
33
|
+
#define Ket_Step JOIN(prefixKet, _Step)
|
|
34
|
+
#define Ket_FeedAssociatedDataBlocks JOIN(prefixKet, _FeedAssociatedDataBlocks)
|
|
35
|
+
#define Ket_UnwrapBlocks JOIN(prefixKet, _UnwrapBlocks)
|
|
36
|
+
#define Ket_WrapBlocks JOIN(prefixKet, _WrapBlocks)
|
|
37
|
+
|
|
38
|
+
int Ketje_Initialize(Ketje_Instance *instance, const unsigned char *key, unsigned int keySizeInBits, const unsigned char *nonce, unsigned int nonceSizeInBits)
|
|
39
|
+
{
|
|
40
|
+
unsigned char smallData[1];
|
|
41
|
+
unsigned int keyPackSizeInBits;
|
|
42
|
+
|
|
43
|
+
keyPackSizeInBits = 8*((keySizeInBits+16)/8);
|
|
44
|
+
if ( (keyPackSizeInBits + nonceSizeInBits + 2) > SnP_width)
|
|
45
|
+
return 1;
|
|
46
|
+
|
|
47
|
+
instance->phase = Ketje_Phase_FeedingAssociatedData;
|
|
48
|
+
instance->dataRemainderSize = 0;
|
|
49
|
+
|
|
50
|
+
SnP_StaticInitialize();
|
|
51
|
+
SnP_Initialize(instance->state);
|
|
52
|
+
|
|
53
|
+
/* Key pack */
|
|
54
|
+
smallData[0] = keySizeInBits / 8 + 2;
|
|
55
|
+
Ket_StateOverwrite( instance->state, 0, smallData, 1 );
|
|
56
|
+
Ket_StateOverwrite( instance->state, 1, key, keySizeInBits/8 );
|
|
57
|
+
if ((keySizeInBits % 8) == 0)
|
|
58
|
+
smallData[0] = 0x01;
|
|
59
|
+
else {
|
|
60
|
+
unsigned char padding = (unsigned char)1 << (keySizeInBits%8);
|
|
61
|
+
unsigned char mask = padding-1;
|
|
62
|
+
smallData[0] = (key[keySizeInBits/8] & mask) | padding;
|
|
63
|
+
}
|
|
64
|
+
Ket_StateOverwrite( instance->state, 1+keySizeInBits/8, smallData, 1 );
|
|
65
|
+
|
|
66
|
+
/* Nonce */
|
|
67
|
+
Ket_StateOverwrite( instance->state, 1+keySizeInBits/8+1, nonce, nonceSizeInBits / 8 );
|
|
68
|
+
if ((nonceSizeInBits % 8) == 0)
|
|
69
|
+
smallData[0] = 0x01;
|
|
70
|
+
else {
|
|
71
|
+
unsigned char padding = (unsigned char)1 << (nonceSizeInBits%8);
|
|
72
|
+
unsigned char mask = padding-1;
|
|
73
|
+
smallData[0] = (nonce[nonceSizeInBits/8] & mask) | padding;
|
|
74
|
+
}
|
|
75
|
+
Ket_StateOverwrite( instance->state, 1+keySizeInBits/8+1+nonceSizeInBits/8, smallData, 1 );
|
|
76
|
+
|
|
77
|
+
Ket_StateAddByte(instance->state, 0x80, SnP_width / 8 - 1 );
|
|
78
|
+
SnP_PermuteRounds(instance->state, Ket_StartRounds );
|
|
79
|
+
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
int Ketje_FeedAssociatedData(Ketje_Instance *instance, const unsigned char *data, unsigned int dataSizeInBytes)
|
|
84
|
+
{
|
|
85
|
+
unsigned int size;
|
|
86
|
+
|
|
87
|
+
if ((instance->phase & Ketje_Phase_FeedingAssociatedData) == 0)
|
|
88
|
+
return 1;
|
|
89
|
+
|
|
90
|
+
if ( (instance->dataRemainderSize + dataSizeInBytes) > Ketje_BlockSize )
|
|
91
|
+
{
|
|
92
|
+
if (instance->dataRemainderSize != 0)
|
|
93
|
+
{
|
|
94
|
+
dataSizeInBytes -= Ketje_BlockSize - instance->dataRemainderSize;
|
|
95
|
+
while ( instance->dataRemainderSize != Ketje_BlockSize )
|
|
96
|
+
Ket_StateAddByte( instance->state, *(data++), instance->dataRemainderSize++ );
|
|
97
|
+
Ket_Step( instance->state, Ketje_BlockSize, FRAMEBITS00 );
|
|
98
|
+
instance->dataRemainderSize = 0;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if ( dataSizeInBytes > Ketje_BlockSize )
|
|
102
|
+
{
|
|
103
|
+
size = ((dataSizeInBytes + (Ketje_BlockSize - 1)) & ~(Ketje_BlockSize - 1)) - Ketje_BlockSize;
|
|
104
|
+
Ket_FeedAssociatedDataBlocks( instance->state, data, size / Ketje_BlockSize);
|
|
105
|
+
dataSizeInBytes -= size;
|
|
106
|
+
data += size;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
while ( dataSizeInBytes-- != 0 )
|
|
111
|
+
Ket_StateAddByte( instance->state, *(data++), instance->dataRemainderSize++ );
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
int Ketje_WrapPlaintext(Ketje_Instance *instance, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int dataSizeInBytes )
|
|
116
|
+
{
|
|
117
|
+
unsigned int size;
|
|
118
|
+
unsigned char temp;
|
|
119
|
+
|
|
120
|
+
if ( (instance->phase & Ketje_Phase_FeedingAssociatedData) != 0)
|
|
121
|
+
{
|
|
122
|
+
Ket_Step( instance->state, instance->dataRemainderSize, FRAMEBITS01 );
|
|
123
|
+
instance->dataRemainderSize = 0;
|
|
124
|
+
instance->phase = Ketje_Phase_Wrapping;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if ( (instance->phase & Ketje_Phase_Wrapping) == 0)
|
|
128
|
+
return 1;
|
|
129
|
+
|
|
130
|
+
if ( (instance->dataRemainderSize + dataSizeInBytes) > Ketje_BlockSize )
|
|
131
|
+
{
|
|
132
|
+
/* More than a block */
|
|
133
|
+
if (instance->dataRemainderSize != 0)
|
|
134
|
+
{
|
|
135
|
+
/* Process data remainder */
|
|
136
|
+
while ( instance->dataRemainderSize < Ketje_BlockSize )
|
|
137
|
+
{
|
|
138
|
+
temp = *(plaintext++);
|
|
139
|
+
*(ciphertext++) = temp ^ Ket_StateExtractByte( instance->state, instance->dataRemainderSize );
|
|
140
|
+
Ket_StateAddByte( instance->state, temp, instance->dataRemainderSize++ );
|
|
141
|
+
--dataSizeInBytes;
|
|
142
|
+
}
|
|
143
|
+
Ket_Step( instance->state, Ketje_BlockSize, FRAMEBITS11 );
|
|
144
|
+
instance->dataRemainderSize = 0;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* Wrap multiple blocks except last. */
|
|
148
|
+
if ( dataSizeInBytes > Ketje_BlockSize )
|
|
149
|
+
{
|
|
150
|
+
size = ((dataSizeInBytes + (Ketje_BlockSize - 1)) & ~(Ketje_BlockSize - 1)) - Ketje_BlockSize;
|
|
151
|
+
Ket_WrapBlocks( instance->state, plaintext, ciphertext, size / Ketje_BlockSize );
|
|
152
|
+
dataSizeInBytes -= size;
|
|
153
|
+
plaintext += size;
|
|
154
|
+
ciphertext += size;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* Add remaining data */
|
|
159
|
+
while ( dataSizeInBytes-- != 0 )
|
|
160
|
+
{
|
|
161
|
+
temp = *(plaintext++);
|
|
162
|
+
*(ciphertext++) = temp ^ Ket_StateExtractByte( instance->state, instance->dataRemainderSize );
|
|
163
|
+
Ket_StateAddByte( instance->state, temp, instance->dataRemainderSize++ );
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
int Ketje_UnwrapCiphertext(Ketje_Instance *instance, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int dataSizeInBytes)
|
|
170
|
+
{
|
|
171
|
+
unsigned int size;
|
|
172
|
+
unsigned char temp;
|
|
173
|
+
|
|
174
|
+
if ( (instance->phase & Ketje_Phase_FeedingAssociatedData) != 0)
|
|
175
|
+
{
|
|
176
|
+
Ket_Step( instance->state, instance->dataRemainderSize, FRAMEBITS01 );
|
|
177
|
+
instance->dataRemainderSize = 0;
|
|
178
|
+
instance->phase = Ketje_Phase_Unwrapping;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if ( (instance->phase & Ketje_Phase_Unwrapping) == 0)
|
|
182
|
+
return 1;
|
|
183
|
+
|
|
184
|
+
if ( (instance->dataRemainderSize + dataSizeInBytes) > Ketje_BlockSize )
|
|
185
|
+
{
|
|
186
|
+
/* More than a block */
|
|
187
|
+
if (instance->dataRemainderSize != 0)
|
|
188
|
+
{
|
|
189
|
+
/* Process data remainder */
|
|
190
|
+
while ( instance->dataRemainderSize < Ketje_BlockSize )
|
|
191
|
+
{
|
|
192
|
+
temp = *(ciphertext++) ^ Ket_StateExtractByte( instance->state, instance->dataRemainderSize );
|
|
193
|
+
*(plaintext++) = temp;
|
|
194
|
+
Ket_StateAddByte( instance->state, temp, instance->dataRemainderSize++ );
|
|
195
|
+
--dataSizeInBytes;
|
|
196
|
+
}
|
|
197
|
+
Ket_Step( instance->state, Ketje_BlockSize, FRAMEBITS11 );
|
|
198
|
+
instance->dataRemainderSize = 0;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* Unwrap multiple blocks except last. */
|
|
202
|
+
if ( dataSizeInBytes > Ketje_BlockSize )
|
|
203
|
+
{
|
|
204
|
+
size = ((dataSizeInBytes + (Ketje_BlockSize - 1)) & ~(Ketje_BlockSize - 1)) - Ketje_BlockSize;
|
|
205
|
+
Ket_UnwrapBlocks( instance->state, ciphertext, plaintext, size / Ketje_BlockSize );
|
|
206
|
+
dataSizeInBytes -= size;
|
|
207
|
+
plaintext += size;
|
|
208
|
+
ciphertext += size;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* Add remaining data */
|
|
213
|
+
while ( dataSizeInBytes-- != 0 )
|
|
214
|
+
{
|
|
215
|
+
temp = *(ciphertext++) ^ Ket_StateExtractByte( instance->state, instance->dataRemainderSize );
|
|
216
|
+
*(plaintext++) = temp;
|
|
217
|
+
Ket_StateAddByte( instance->state, temp, instance->dataRemainderSize++ );
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return 0;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
int Ketje_GetTag(Ketje_Instance *instance, unsigned char *tag, unsigned int tagSizeInBytes)
|
|
224
|
+
{
|
|
225
|
+
unsigned int tagSizePart;
|
|
226
|
+
unsigned int i;
|
|
227
|
+
|
|
228
|
+
if ((instance->phase & (Ketje_Phase_Wrapping | Ketje_Phase_Unwrapping)) == 0)
|
|
229
|
+
return 1;
|
|
230
|
+
|
|
231
|
+
Ket_StateAddByte(instance->state, FRAMEBITS10, instance->dataRemainderSize);
|
|
232
|
+
Ket_StateAddByte(instance->state, 0x08, Ketje_BlockSize); /* padding */
|
|
233
|
+
SnP_PermuteRounds(instance->state, Ket_StrideRounds );
|
|
234
|
+
instance->dataRemainderSize = 0;
|
|
235
|
+
tagSizePart = Ketje_BlockSize;
|
|
236
|
+
if ( tagSizeInBytes < Ketje_BlockSize )
|
|
237
|
+
tagSizePart = tagSizeInBytes;
|
|
238
|
+
for ( i = 0; i < tagSizePart; ++i )
|
|
239
|
+
*(tag++) = Ket_StateExtractByte( instance->state, i );
|
|
240
|
+
tagSizeInBytes -= tagSizePart;
|
|
241
|
+
|
|
242
|
+
while(tagSizeInBytes > 0)
|
|
243
|
+
{
|
|
244
|
+
Ket_Step( instance->state, 0, FRAMEBITS0 );
|
|
245
|
+
tagSizePart = Ketje_BlockSize;
|
|
246
|
+
if ( tagSizeInBytes < Ketje_BlockSize )
|
|
247
|
+
tagSizePart = tagSizeInBytes;
|
|
248
|
+
for ( i = 0; i < tagSizePart; ++i )
|
|
249
|
+
*(tag++) = Ket_StateExtractByte( instance->state, i );
|
|
250
|
+
tagSizeInBytes -= tagSizePart;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
instance->phase = Ketje_Phase_FeedingAssociatedData;
|
|
254
|
+
|
|
255
|
+
return 0;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
#undef SnP_StaticInitialize
|
|
259
|
+
#undef SnP_Initialize
|
|
260
|
+
|
|
261
|
+
#undef Ketje_Instance
|
|
262
|
+
#undef Ketje_Initialize
|
|
263
|
+
#undef Ketje_FeedAssociatedData
|
|
264
|
+
#undef Ketje_WrapPlaintext
|
|
265
|
+
#undef Ketje_UnwrapCiphertext
|
|
266
|
+
#undef Ketje_GetTag
|
|
267
|
+
|
|
268
|
+
#undef Ket_StateAddByte
|
|
269
|
+
#undef Ket_StateExtractByte
|
|
270
|
+
#undef Ket_StateOverwrite
|
|
271
|
+
#undef Ket_Step
|
|
272
|
+
#undef Ket_FeedAssociatedDataBlocks
|
|
273
|
+
#undef Ket_UnwrapBlocks
|
|
274
|
+
#undef Ket_WrapBlocks
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
https://github.com/XKCP/XKCP
|
|
4
|
+
|
|
5
|
+
Keyak, 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 "Keyakv2.h"
|
|
23
|
+
|
|
24
|
+
#ifdef XKCP_has_KeccakP800
|
|
25
|
+
#include "KeccakP-800-SnP.h"
|
|
26
|
+
|
|
27
|
+
#define prefix KeyakWidth800
|
|
28
|
+
#define SnP KeccakP800
|
|
29
|
+
#define SnP_width 800
|
|
30
|
+
#define PlSnP_parallelism 1
|
|
31
|
+
#define SnP_Permute KeccakP800_Permute_12rounds
|
|
32
|
+
#include "Motorist.inc"
|
|
33
|
+
#undef prefix
|
|
34
|
+
#undef SnP
|
|
35
|
+
#undef SnP_width
|
|
36
|
+
#undef PlSnP_parallelism
|
|
37
|
+
#undef SnP_Permute
|
|
38
|
+
|
|
39
|
+
#define prefix River
|
|
40
|
+
#define prefixMotorist KeyakWidth800
|
|
41
|
+
#include "Keyakv2.inc"
|
|
42
|
+
#undef prefix
|
|
43
|
+
#undef prefixMotorist
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
#ifdef XKCP_has_KeccakP1600
|
|
47
|
+
#include "KeccakP-1600-SnP.h"
|
|
48
|
+
|
|
49
|
+
#define prefix KeyakWidth1600
|
|
50
|
+
#define SnP KeccakP1600
|
|
51
|
+
#define SnP_width 1600
|
|
52
|
+
#define PlSnP_parallelism 1
|
|
53
|
+
#define SnP_Permute KeccakP1600_Permute_12rounds
|
|
54
|
+
#include "Motorist.inc"
|
|
55
|
+
#undef prefix
|
|
56
|
+
#undef SnP
|
|
57
|
+
#undef SnP_width
|
|
58
|
+
#undef PlSnP_parallelism
|
|
59
|
+
#undef SnP_Permute
|
|
60
|
+
|
|
61
|
+
#define prefix Lake
|
|
62
|
+
#define prefixMotorist KeyakWidth1600
|
|
63
|
+
#include "Keyakv2.inc"
|
|
64
|
+
#undef prefix
|
|
65
|
+
#undef prefixMotorist
|
|
66
|
+
#endif
|
|
67
|
+
|
|
68
|
+
#ifdef XKCP_has_KeccakP1600times2
|
|
69
|
+
#include "KeccakP-1600-times2-SnP.h"
|
|
70
|
+
|
|
71
|
+
#define prefix KeyakWidth1600times2
|
|
72
|
+
#define PlSnP KeccakP1600times2
|
|
73
|
+
#define PlSnP_parallelism 2
|
|
74
|
+
#define PlSnP_PermuteAll KeccakP1600times2_PermuteAll_12rounds
|
|
75
|
+
#define SnP_width 1600
|
|
76
|
+
#include "Motorist.inc"
|
|
77
|
+
#undef prefix
|
|
78
|
+
#undef PlSnP
|
|
79
|
+
#undef PlSnP_parallelism
|
|
80
|
+
#undef PlSnP_PermuteAll
|
|
81
|
+
#undef SnP_width
|
|
82
|
+
|
|
83
|
+
#define prefix Sea
|
|
84
|
+
#define prefixMotorist KeyakWidth1600times2
|
|
85
|
+
#include "Keyakv2.inc"
|
|
86
|
+
#undef prefix
|
|
87
|
+
#undef prefixMotorist
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
#ifdef XKCP_has_KeccakP1600times4
|
|
91
|
+
#include "KeccakP-1600-times4-SnP.h"
|
|
92
|
+
|
|
93
|
+
#define prefix KeyakWidth1600times4
|
|
94
|
+
#define PlSnP KeccakP1600times4
|
|
95
|
+
#define PlSnP_parallelism 4
|
|
96
|
+
#define PlSnP_PermuteAll KeccakP1600times4_PermuteAll_12rounds
|
|
97
|
+
#define SnP_width 1600
|
|
98
|
+
#include "Motorist.inc"
|
|
99
|
+
#undef prefix
|
|
100
|
+
#undef PlSnP
|
|
101
|
+
#undef PlSnP_parallelism
|
|
102
|
+
#undef PlSnP_PermuteAll
|
|
103
|
+
#undef SnP_width
|
|
104
|
+
|
|
105
|
+
#define prefix Ocean
|
|
106
|
+
#define prefixMotorist KeyakWidth1600times4
|
|
107
|
+
#include "Keyakv2.inc"
|
|
108
|
+
#undef prefix
|
|
109
|
+
#undef prefixMotorist
|
|
110
|
+
#endif
|
|
111
|
+
|
|
112
|
+
#ifdef XKCP_has_KeccakP1600times8
|
|
113
|
+
#include "KeccakP-1600-times8-SnP.h"
|
|
114
|
+
|
|
115
|
+
#define prefix KeyakWidth1600times8
|
|
116
|
+
#define PlSnP KeccakP1600times8
|
|
117
|
+
#define PlSnP_parallelism 8
|
|
118
|
+
#define PlSnP_PermuteAll KeccakP1600times8_PermuteAll_12rounds
|
|
119
|
+
#define SnP_width 1600
|
|
120
|
+
#include "Motorist.inc"
|
|
121
|
+
#undef prefix
|
|
122
|
+
#undef PlSnP
|
|
123
|
+
#undef PlSnP_parallelism
|
|
124
|
+
#undef PlSnP_PermuteAll
|
|
125
|
+
#undef SnP_width
|
|
126
|
+
|
|
127
|
+
#define prefix Lunar
|
|
128
|
+
#define prefixMotorist KeyakWidth1600times8
|
|
129
|
+
#include "Keyakv2.inc"
|
|
130
|
+
#undef prefix
|
|
131
|
+
#undef prefixMotorist
|
|
132
|
+
#endif
|