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,454 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The eXtended Keccak Code Package (XKCP)
|
|
3
|
+
https://github.com/XKCP/XKCP
|
|
4
|
+
|
|
5
|
+
The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
|
|
6
|
+
|
|
7
|
+
Implementation by Ronny Van Keer, hereby denoted as "the implementer".
|
|
8
|
+
|
|
9
|
+
For more information, feedback or questions, please refer to the Keccak Team website:
|
|
10
|
+
https://keccak.team/
|
|
11
|
+
|
|
12
|
+
To the extent possible under law, the implementer has waived all copyright
|
|
13
|
+
and related or neighboring rights to the source code in this file.
|
|
14
|
+
http://creativecommons.org/publicdomain/zero/1.0/
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
This file implements Keccak-p[800] in a SnP-compatible way.
|
|
19
|
+
Please refer to SnP-documentation.h for more details.
|
|
20
|
+
|
|
21
|
+
This implementation comes with KeccakP-800-SnP.h in the same folder.
|
|
22
|
+
Please refer to LowLevel.build for the exact list of other files it must be combined with.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
#include <stdint.h>
|
|
26
|
+
#include <string.h>
|
|
27
|
+
#include <stdlib.h>
|
|
28
|
+
#include "brg_endian.h"
|
|
29
|
+
#include "KeccakP-800-opt32-config.h"
|
|
30
|
+
#include "KeccakP-800-SnP.h"
|
|
31
|
+
|
|
32
|
+
/* Change READ32/WRITE macros if your target does not support unaligned 32-bit accesses. */
|
|
33
|
+
#if defined (__arm__) && !defined(__GNUC__)
|
|
34
|
+
#define ROL32(a, offset) __ror(a, 32-(offset))
|
|
35
|
+
#define READ32_UNALIGNED(argAddress) (*((const __packed uint32_t*)(argAddress)))
|
|
36
|
+
#define WRITE32_UNALIGNED(argAddress, argData) (*((__packed uint32_t*)(argAddress)) = (argData))
|
|
37
|
+
#elif defined(_MSC_VER)
|
|
38
|
+
#define ROL32(a, offset) _rotl(a, offset)
|
|
39
|
+
#define READ32_UNALIGNED(argAddress) (*((const uint32_t*)(argAddress)))
|
|
40
|
+
#define WRITE32_UNALIGNED(argAddress, argData) (*((uint32_t*)(argAddress)) = (argData))
|
|
41
|
+
#else
|
|
42
|
+
#define ROL32(a, offset) ((((uint32_t)a) << offset) ^ (((uint32_t)a) >> (32-offset)))
|
|
43
|
+
#define READ32_UNALIGNED(argAddress) (*((const uint32_t*)(argAddress)))
|
|
44
|
+
#define WRITE32_UNALIGNED(argAddress, argData) (*((uint32_t*)(argAddress)) = (argData))
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#if defined(KeccakP800_useLaneComplementing)
|
|
48
|
+
#define UseBebigokimisa
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
#if defined(KeccakP800_useFlavorBis)
|
|
52
|
+
#include "KeccakP-800-opt32-bis.macros"
|
|
53
|
+
#include "KeccakP-800-unrolling-bis.macros"
|
|
54
|
+
#else
|
|
55
|
+
#include "KeccakP-800-opt32.macros"
|
|
56
|
+
#include "KeccakP-800-unrolling.macros"
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
#ifdef KeccakP800_useLaneComplementing
|
|
60
|
+
|
|
61
|
+
const uint32_t KeccakP800LaneComplement[25] = {
|
|
62
|
+
0,
|
|
63
|
+
0xFFFFFFFF,
|
|
64
|
+
0xFFFFFFFF,
|
|
65
|
+
0,
|
|
66
|
+
0,
|
|
67
|
+
0,
|
|
68
|
+
0,
|
|
69
|
+
0,
|
|
70
|
+
0xFFFFFFFF,
|
|
71
|
+
0,
|
|
72
|
+
0,
|
|
73
|
+
0,
|
|
74
|
+
0xFFFFFFFF,
|
|
75
|
+
0,
|
|
76
|
+
0,
|
|
77
|
+
0,
|
|
78
|
+
0,
|
|
79
|
+
0xFFFFFFFF,
|
|
80
|
+
0,
|
|
81
|
+
0,
|
|
82
|
+
0xFFFFFFFF,
|
|
83
|
+
0,
|
|
84
|
+
0,
|
|
85
|
+
0,
|
|
86
|
+
0};
|
|
87
|
+
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
const uint32_t KeccakF800RoundConstants[24] = {
|
|
91
|
+
0x00000001ULL,
|
|
92
|
+
0x00008082ULL,
|
|
93
|
+
0x0000808aULL,
|
|
94
|
+
0x80008000ULL,
|
|
95
|
+
0x0000808bULL,
|
|
96
|
+
0x80000001ULL,
|
|
97
|
+
0x80008081ULL,
|
|
98
|
+
0x00008009ULL,
|
|
99
|
+
0x0000008aULL,
|
|
100
|
+
0x00000088ULL,
|
|
101
|
+
0x80008009ULL,
|
|
102
|
+
0x8000000aULL,
|
|
103
|
+
0x8000808bULL,
|
|
104
|
+
0x0000008bULL,
|
|
105
|
+
0x00008089ULL,
|
|
106
|
+
0x00008003ULL,
|
|
107
|
+
0x00008002ULL,
|
|
108
|
+
0x00000080ULL,
|
|
109
|
+
0x0000800aULL,
|
|
110
|
+
0x8000000aULL,
|
|
111
|
+
0x80008081ULL,
|
|
112
|
+
0x00008080ULL};
|
|
113
|
+
|
|
114
|
+
/* ---------------------------------------------------------------- */
|
|
115
|
+
|
|
116
|
+
void KeccakP800_Initialize(void *state)
|
|
117
|
+
{
|
|
118
|
+
memset(state, 0, 100);
|
|
119
|
+
#ifdef KeccakP800_useLaneComplementing
|
|
120
|
+
((uint32_t*)state)[ 1] = ~(uint32_t)0;
|
|
121
|
+
((uint32_t*)state)[ 2] = ~(uint32_t)0;
|
|
122
|
+
((uint32_t*)state)[ 8] = ~(uint32_t)0;
|
|
123
|
+
((uint32_t*)state)[12] = ~(uint32_t)0;
|
|
124
|
+
((uint32_t*)state)[17] = ~(uint32_t)0;
|
|
125
|
+
((uint32_t*)state)[20] = ~(uint32_t)0;
|
|
126
|
+
#endif
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* ---------------------------------------------------------------- */
|
|
130
|
+
|
|
131
|
+
void KeccakP800_AddByte(void *argState, unsigned char data, unsigned int offset)
|
|
132
|
+
{
|
|
133
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
134
|
+
unsigned int lanePosition = offset/4;
|
|
135
|
+
unsigned int offsetInLane = offset%4;
|
|
136
|
+
uint32_t lane = (uint32_t)data << (8*offsetInLane);
|
|
137
|
+
((uint32_t*)argState)[lanePosition] ^= lane;
|
|
138
|
+
#else
|
|
139
|
+
#error "Not yet implemented"
|
|
140
|
+
#endif
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* ---------------------------------------------------------------- */
|
|
144
|
+
|
|
145
|
+
void KeccakP800_AddBytes(void *argState, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
146
|
+
{
|
|
147
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
148
|
+
unsigned int sizeLeft = length;
|
|
149
|
+
unsigned int lanePosition = offset/4;
|
|
150
|
+
unsigned int offsetInLane = offset%4;
|
|
151
|
+
const unsigned char *curData = data;
|
|
152
|
+
uint32_t *state = (uint32_t*)argState;
|
|
153
|
+
|
|
154
|
+
state += lanePosition;
|
|
155
|
+
if ((sizeLeft > 0) && (offsetInLane != 0)) {
|
|
156
|
+
unsigned int bytesInLane = 4 - offsetInLane;
|
|
157
|
+
uint32_t lane = 0;
|
|
158
|
+
if (bytesInLane > sizeLeft)
|
|
159
|
+
bytesInLane = sizeLeft;
|
|
160
|
+
memcpy((unsigned char*)&lane + offsetInLane, curData, bytesInLane);
|
|
161
|
+
*state++ ^= lane;
|
|
162
|
+
sizeLeft -= bytesInLane;
|
|
163
|
+
curData += bytesInLane;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
while(sizeLeft >= 4) {
|
|
167
|
+
*state++ ^= READ32_UNALIGNED( curData );
|
|
168
|
+
sizeLeft -= 4;
|
|
169
|
+
curData += 4;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (sizeLeft > 0) {
|
|
173
|
+
uint32_t lane = 0;
|
|
174
|
+
memcpy(&lane, curData, sizeLeft);
|
|
175
|
+
*state ^= lane;
|
|
176
|
+
}
|
|
177
|
+
#else
|
|
178
|
+
#error "Not yet implemented"
|
|
179
|
+
#endif
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* ---------------------------------------------------------------- */
|
|
183
|
+
|
|
184
|
+
void KeccakP800_OverwriteBytes(void *argState, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
185
|
+
{
|
|
186
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
187
|
+
#ifdef KeccakP800_useLaneComplementing
|
|
188
|
+
unsigned int sizeLeft = length;
|
|
189
|
+
unsigned int lanePosition = offset/4;
|
|
190
|
+
unsigned int offsetInLane = offset%4;
|
|
191
|
+
const unsigned char *curData = data;
|
|
192
|
+
uint32_t *state = (uint32_t*)argState;
|
|
193
|
+
|
|
194
|
+
if ((sizeLeft > 0) && (offsetInLane != 0)) {
|
|
195
|
+
unsigned int bytesInLane = 4 - offsetInLane;
|
|
196
|
+
unsigned char laneComplement = (unsigned char)KeccakP800LaneComplement[lanePosition];
|
|
197
|
+
if (bytesInLane > sizeLeft)
|
|
198
|
+
bytesInLane = sizeLeft;
|
|
199
|
+
sizeLeft -= bytesInLane;
|
|
200
|
+
do {
|
|
201
|
+
*(((unsigned char *)&state[lanePosition] + offsetInLane)) = *curData++ ^ laneComplement;
|
|
202
|
+
++offsetInLane;
|
|
203
|
+
}
|
|
204
|
+
while ( --bytesInLane != 0);
|
|
205
|
+
lanePosition++;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
while(sizeLeft >= 4) {
|
|
209
|
+
state[lanePosition] = READ32_UNALIGNED( curData ) ^ KeccakP800LaneComplement[lanePosition];
|
|
210
|
+
sizeLeft -= 4;
|
|
211
|
+
lanePosition++;
|
|
212
|
+
curData += 4;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (sizeLeft > 0) {
|
|
216
|
+
unsigned char laneComplement = (unsigned char)KeccakP800LaneComplement[lanePosition];
|
|
217
|
+
unsigned int i;
|
|
218
|
+
for ( i = 0; i < sizeLeft; ++i ) {
|
|
219
|
+
*((unsigned char *)&state[lanePosition] + i) = *curData++ ^ laneComplement;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
#else
|
|
223
|
+
memcpy((unsigned char*)argState+offset, data, length);
|
|
224
|
+
#endif
|
|
225
|
+
#else
|
|
226
|
+
#error "Not yet implemented"
|
|
227
|
+
#endif
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* ---------------------------------------------------------------- */
|
|
231
|
+
|
|
232
|
+
void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
233
|
+
{
|
|
234
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
235
|
+
#ifdef KeccakP800_useLaneComplementing
|
|
236
|
+
memcpy((unsigned char*)state, (unsigned char*)KeccakP800LaneComplement, byteCount);
|
|
237
|
+
#else
|
|
238
|
+
memset(state, 0, byteCount);
|
|
239
|
+
#endif
|
|
240
|
+
#else
|
|
241
|
+
#error "Not yet implemented"
|
|
242
|
+
#endif
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* ---------------------------------------------------------------- */
|
|
246
|
+
|
|
247
|
+
void KeccakP800_Permute_Nrounds(void *state, unsigned int nr)
|
|
248
|
+
{
|
|
249
|
+
declareBCDE
|
|
250
|
+
unsigned int i;
|
|
251
|
+
uint32_t *Astate = (uint32_t*)state;
|
|
252
|
+
|
|
253
|
+
roundsN(A,E,nr)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/* ---------------------------------------------------------------- */
|
|
257
|
+
|
|
258
|
+
void KeccakP800_Permute_12rounds(void *state)
|
|
259
|
+
{
|
|
260
|
+
declareBCDE
|
|
261
|
+
#ifndef KeccakP800_fullUnrolling
|
|
262
|
+
unsigned int i;
|
|
263
|
+
#endif
|
|
264
|
+
uint32_t *Astate = (uint32_t*)state;
|
|
265
|
+
|
|
266
|
+
rounds12
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* ---------------------------------------------------------------- */
|
|
270
|
+
|
|
271
|
+
void KeccakP800_Permute_22rounds(void *state)
|
|
272
|
+
{
|
|
273
|
+
declareBCDE
|
|
274
|
+
#ifndef KeccakP800_fullUnrolling
|
|
275
|
+
unsigned int i;
|
|
276
|
+
#endif
|
|
277
|
+
uint32_t *Astate = (uint32_t*)state;
|
|
278
|
+
|
|
279
|
+
rounds22
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* ---------------------------------------------------------------- */
|
|
283
|
+
|
|
284
|
+
void KeccakP800_ExtractBytes(const void *argState, unsigned char *data, unsigned int offset, unsigned int length)
|
|
285
|
+
{
|
|
286
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
287
|
+
#ifdef KeccakP800_useLaneComplementing
|
|
288
|
+
unsigned int sizeLeft = length;
|
|
289
|
+
unsigned int lanePosition = offset/4;
|
|
290
|
+
unsigned int offsetInLane = offset%4;
|
|
291
|
+
unsigned char *curData = data;
|
|
292
|
+
const uint32_t *state = (const uint32_t*)argState;
|
|
293
|
+
const uint32_t *pLaneComplement;
|
|
294
|
+
|
|
295
|
+
state += lanePosition;
|
|
296
|
+
pLaneComplement = KeccakP800LaneComplement + lanePosition;
|
|
297
|
+
if ((sizeLeft > 0) && (offsetInLane != 0)) {
|
|
298
|
+
unsigned int bytesInLane = 4 - offsetInLane;
|
|
299
|
+
uint32_t lane = (*state++ ^ *pLaneComplement++) >> (offsetInLane * 8);
|
|
300
|
+
if (bytesInLane > sizeLeft)
|
|
301
|
+
bytesInLane = sizeLeft;
|
|
302
|
+
sizeLeft -= bytesInLane;
|
|
303
|
+
do {
|
|
304
|
+
*curData++ = (unsigned char)lane;
|
|
305
|
+
lane >>= 8;
|
|
306
|
+
}
|
|
307
|
+
while ( --bytesInLane != 0);
|
|
308
|
+
lanePosition++;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
while(sizeLeft >= 4) {
|
|
312
|
+
WRITE32_UNALIGNED( curData, *state++ ^ *pLaneComplement++ );
|
|
313
|
+
sizeLeft -= 4;
|
|
314
|
+
curData += 4;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if (sizeLeft > 0) {
|
|
318
|
+
uint32_t lane = *state ^ *pLaneComplement;
|
|
319
|
+
unsigned int i;
|
|
320
|
+
for ( i = 0; i < sizeLeft; ++i ) {
|
|
321
|
+
*curData++ = (unsigned char)lane;
|
|
322
|
+
lane >>= 8;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
#else
|
|
326
|
+
memcpy(data, (unsigned char*)argState+offset, length);
|
|
327
|
+
#endif
|
|
328
|
+
#else
|
|
329
|
+
#error "Not yet implemented"
|
|
330
|
+
#endif
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/* ---------------------------------------------------------------- */
|
|
334
|
+
|
|
335
|
+
void KeccakP800_ExtractAndAddBytes(const void *argState, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
|
|
336
|
+
{
|
|
337
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
338
|
+
#ifdef KeccakP800_useLaneComplementing
|
|
339
|
+
unsigned int sizeLeft = length;
|
|
340
|
+
unsigned int lanePosition = offset/4;
|
|
341
|
+
unsigned int offsetInLane = offset%4;
|
|
342
|
+
const unsigned char *curInput = input;
|
|
343
|
+
unsigned char *curOutput = output;
|
|
344
|
+
const uint32_t *state = (const uint32_t*)argState;
|
|
345
|
+
const uint32_t *pLaneComplement;
|
|
346
|
+
|
|
347
|
+
state += lanePosition;
|
|
348
|
+
pLaneComplement = KeccakP800LaneComplement + lanePosition;
|
|
349
|
+
if ((sizeLeft > 0) && (offsetInLane != 0)) {
|
|
350
|
+
unsigned int bytesInLane = 4 - offsetInLane;
|
|
351
|
+
uint32_t lane = (*state++ ^ *pLaneComplement++) >> (offsetInLane * 8);
|
|
352
|
+
if (bytesInLane > sizeLeft)
|
|
353
|
+
bytesInLane = sizeLeft;
|
|
354
|
+
sizeLeft -= bytesInLane;
|
|
355
|
+
do {
|
|
356
|
+
*curOutput++ = (*curInput++) ^ (unsigned char)lane;
|
|
357
|
+
lane >>= 8;
|
|
358
|
+
}
|
|
359
|
+
while ( --bytesInLane != 0);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
while(sizeLeft >= 4) {
|
|
363
|
+
WRITE32_UNALIGNED( curOutput, READ32_UNALIGNED( curInput ) ^ *state++ ^ *pLaneComplement++ );
|
|
364
|
+
sizeLeft -= 4;
|
|
365
|
+
curInput += 4;
|
|
366
|
+
curOutput += 4;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (sizeLeft > 0) {
|
|
370
|
+
uint32_t lane = *state ^ *pLaneComplement;
|
|
371
|
+
do {
|
|
372
|
+
*curOutput++ = (*curInput++) ^ (unsigned char)lane;
|
|
373
|
+
lane >>= 8;
|
|
374
|
+
}
|
|
375
|
+
while ( --sizeLeft != 0 );
|
|
376
|
+
}
|
|
377
|
+
#else
|
|
378
|
+
unsigned int sizeLeft = length;
|
|
379
|
+
unsigned int lanePosition = offset/4;
|
|
380
|
+
unsigned int offsetInLane = offset%4;
|
|
381
|
+
const unsigned char *curInput = input;
|
|
382
|
+
unsigned char *curOutput = output;
|
|
383
|
+
const uint32_t *state = (const uint32_t*)argState;
|
|
384
|
+
|
|
385
|
+
state += lanePosition;
|
|
386
|
+
if ((sizeLeft > 0) && (offsetInLane != 0)) {
|
|
387
|
+
unsigned int bytesInLane = 4 - offsetInLane;
|
|
388
|
+
uint32_t lane = *state++ >> (offsetInLane * 8);
|
|
389
|
+
if (bytesInLane > sizeLeft)
|
|
390
|
+
bytesInLane = sizeLeft;
|
|
391
|
+
sizeLeft -= bytesInLane;
|
|
392
|
+
do {
|
|
393
|
+
*curOutput++ = (*curInput++) ^ (unsigned char)lane;
|
|
394
|
+
lane >>= 8;
|
|
395
|
+
}
|
|
396
|
+
while ( --bytesInLane != 0);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
while(sizeLeft >= 4) {
|
|
400
|
+
WRITE32_UNALIGNED( curOutput, READ32_UNALIGNED( curInput ) ^ *state++ );
|
|
401
|
+
sizeLeft -= 4;
|
|
402
|
+
curInput += 4;
|
|
403
|
+
curOutput += 4;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
if (sizeLeft > 0) {
|
|
407
|
+
uint32_t lane = *state;
|
|
408
|
+
do {
|
|
409
|
+
*curOutput++ = (*curInput++) ^ (unsigned char)lane;
|
|
410
|
+
lane >>= 8;
|
|
411
|
+
}
|
|
412
|
+
while ( --sizeLeft != 0 );
|
|
413
|
+
}
|
|
414
|
+
#endif
|
|
415
|
+
#else
|
|
416
|
+
#error "Not yet implemented"
|
|
417
|
+
#endif
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/* ---------------------------------------------------------------- */
|
|
421
|
+
|
|
422
|
+
size_t KeccakF800_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen)
|
|
423
|
+
{
|
|
424
|
+
size_t originalDataByteLen = dataByteLen;
|
|
425
|
+
unsigned int laneCountInBytes = laneCount*4;
|
|
426
|
+
|
|
427
|
+
while(dataByteLen >= laneCountInBytes) {
|
|
428
|
+
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
429
|
+
uint32_t * pState = (uint32_t*)state;
|
|
430
|
+
unsigned int lc;
|
|
431
|
+
|
|
432
|
+
for ( lc = laneCount; lc >= 4; lc -= 4 ) {
|
|
433
|
+
*pState++ ^= READ32_UNALIGNED( data );
|
|
434
|
+
data += 4;
|
|
435
|
+
*pState++ ^= READ32_UNALIGNED( data );
|
|
436
|
+
data += 4;
|
|
437
|
+
*pState++ ^= READ32_UNALIGNED( data );
|
|
438
|
+
data += 4;
|
|
439
|
+
*pState++ ^= READ32_UNALIGNED( data );
|
|
440
|
+
data += 4;
|
|
441
|
+
}
|
|
442
|
+
while ( lc-- != 0 ) {
|
|
443
|
+
*pState++ ^= READ32_UNALIGNED( data );
|
|
444
|
+
data += 4;
|
|
445
|
+
}
|
|
446
|
+
#else
|
|
447
|
+
KeccakP800_AddBytes(state, data, 0, laneCountInBytes);
|
|
448
|
+
data += laneCountInBytes;
|
|
449
|
+
#endif
|
|
450
|
+
KeccakP800_Permute_22rounds( state );
|
|
451
|
+
dataByteLen -= laneCountInBytes;
|
|
452
|
+
}
|
|
453
|
+
return originalDataByteLen - dataByteLen;
|
|
454
|
+
}
|