sleeping_kangaroo12 0.0.1 → 0.0.5
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 +4 -4
- data/LICENSE.md +27 -0
- data/README.md +48 -53
- data/ext/Rakefile +12 -37
- data/ext/binding/sleeping_kangaroo12.c +1 -16
- data/ext/{xkcp → k12}/Makefile +0 -0
- data/ext/k12/Makefile.build +118 -0
- data/ext/k12/README.markdown +86 -0
- data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-ARMv8Asha3.S +623 -0
- data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-SnP.h +65 -0
- data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-opt64.c +227 -0
- data/ext/{xkcp/lib/low/KeccakP-1600/compact → k12/lib/Inplace32BI}/KeccakP-1600-SnP.h +4 -9
- data/ext/{xkcp/lib/low/KeccakP-1600/plain-32bits-inplace → k12/lib/Inplace32BI}/KeccakP-1600-inplace32BI.c +65 -160
- data/ext/k12/lib/KangarooTwelve.c +332 -0
- data/ext/{xkcp/lib/high/KangarooTwelve → k12/lib}/KangarooTwelve.h +53 -16
- data/ext/{xkcp/lib/low/KeccakP-1600/AVX2 → k12/lib/Optimized64}/KeccakP-1600-AVX2.s +122 -558
- data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512-plainC.c +241 -0
- data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512.s +551 -0
- data/ext/k12/lib/Optimized64/KeccakP-1600-SnP.h +74 -0
- data/ext/{xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros → k12/lib/Optimized64/KeccakP-1600-opt64.c} +447 -169
- data/ext/k12/lib/Optimized64/KeccakP-1600-runtimeDispatch.c +406 -0
- data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX2.c +419 -0
- data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX512.c +458 -0
- data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-SSSE3.c +438 -0
- data/ext/{xkcp/lib/low/KeccakP-1600/plain-64bits → k12/lib/Plain64}/KeccakP-1600-SnP.h +14 -20
- data/ext/{xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h → k12/lib/Plain64/KeccakP-1600-plain64.c} +9 -8
- data/ext/{xkcp/lib/common → k12/lib}/align.h +3 -2
- data/ext/{xkcp/lib/common → k12/lib}/brg_endian.h +0 -0
- data/ext/{xkcp → k12}/support/Build/ExpandProducts.xsl +0 -0
- data/ext/{xkcp → k12}/support/Build/ToGlobalMakefile.xsl +0 -0
- data/ext/{xkcp → k12}/support/Build/ToOneTarget.xsl +0 -0
- data/ext/{xkcp → k12}/support/Build/ToTargetConfigFile.xsl +0 -0
- data/ext/{xkcp → k12}/support/Build/ToTargetMakefile.xsl +10 -16
- data/ext/{xkcp → k12}/support/Build/ToVCXProj.xsl +0 -0
- data/lib/sleeping_kangaroo12/binding.rb +2 -1
- data/lib/sleeping_kangaroo12/build/loader.rb +1 -0
- data/lib/sleeping_kangaroo12/build/platform.rb +1 -0
- data/lib/sleeping_kangaroo12/digest.rb +38 -4
- data/lib/sleeping_kangaroo12/version.rb +1 -1
- metadata +48 -288
- data/ext/config/xkcp.build +0 -17
- data/ext/xkcp/LICENSE +0 -1
- data/ext/xkcp/Makefile.build +0 -200
- data/ext/xkcp/README.markdown +0 -296
- data/ext/xkcp/lib/HighLevel.build +0 -143
- data/ext/xkcp/lib/LowLevel.build +0 -757
- data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +0 -301
- data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +0 -81
- data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +0 -125
- data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +0 -48
- data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +0 -79
- data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +0 -81
- data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +0 -73
- data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +0 -195
- data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +0 -111
- data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +0 -76
- data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +0 -314
- data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +0 -61
- data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +0 -67
- data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +0 -128
- data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +0 -93
- data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +0 -599
- data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +0 -573
- data/ext/xkcp/lib/high/Ketje/Ketjev2.c +0 -87
- data/ext/xkcp/lib/high/Ketje/Ketjev2.h +0 -88
- data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +0 -274
- data/ext/xkcp/lib/high/Keyak/Keyakv2.c +0 -132
- data/ext/xkcp/lib/high/Keyak/Keyakv2.h +0 -217
- data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +0 -81
- data/ext/xkcp/lib/high/Keyak/Motorist.inc +0 -953
- data/ext/xkcp/lib/high/Kravatte/Kravatte.c +0 -533
- data/ext/xkcp/lib/high/Kravatte/Kravatte.h +0 -115
- data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +0 -557
- data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +0 -247
- data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +0 -66
- data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +0 -336
- data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +0 -26
- data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +0 -55
- data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +0 -35
- data/ext/xkcp/lib/high/Xoofff/Xoofff.c +0 -634
- data/ext/xkcp/lib/high/Xoofff/Xoofff.h +0 -147
- data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +0 -483
- data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +0 -241
- data/ext/xkcp/lib/high/common/Phases.h +0 -25
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +0 -41
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +0 -1666
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +0 -1655
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +0 -1268
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +0 -1264
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +0 -1178
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +0 -1175
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +0 -1338
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +0 -1336
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +0 -1343
- data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +0 -1339
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +0 -42
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +0 -823
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +0 -831
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +0 -31
- data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +0 -540
- data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +0 -42
- data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +0 -733
- data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +0 -1121
- data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +0 -52
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +0 -623
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +0 -47
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +0 -6
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +0 -6
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +0 -6
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +0 -1031
- data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +0 -53
- data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +0 -44
- data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +0 -476
- data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +0 -6
- data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +0 -6
- data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +0 -305
- data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +0 -420
- data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +0 -43
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +0 -565
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +0 -8
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +0 -6
- data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +0 -6
- data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +0 -44
- data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +0 -23
- data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +0 -625
- data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +0 -44
- data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +0 -440
- data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +0 -42
- data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +0 -1196
- data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +0 -1124
- data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +0 -1196
- data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +0 -1392
- data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +0 -1394
- data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +0 -42
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +0 -850
- data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +0 -51
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +0 -957
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +0 -49
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +0 -8
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +0 -8
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +0 -9
- data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +0 -9
- data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +0 -45
- data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +0 -37
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +0 -1321
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +0 -55
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +0 -881
- data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +0 -51
- data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +0 -45
- data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +0 -37
- data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +0 -45
- data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +0 -38
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +0 -1615
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +0 -57
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +0 -45
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +0 -37
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +0 -45
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +0 -38
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +0 -45
- data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +0 -38
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +0 -41
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +0 -442
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +0 -446
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +0 -419
- data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +0 -427
- data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +0 -41
- data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +0 -647
- data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +0 -39
- data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +0 -190
- data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +0 -43
- data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +0 -412
- data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +0 -23
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +0 -41
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +0 -454
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +0 -458
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +0 -455
- data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +0 -458
- data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +0 -41
- data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +0 -728
- data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +0 -43
- data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +0 -414
- data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +0 -23
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +0 -42
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +0 -527
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +0 -533
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +0 -528
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +0 -534
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +0 -521
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +0 -527
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +0 -517
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +0 -523
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +0 -550
- data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +0 -556
- data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +0 -32
- data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +0 -432
- data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +0 -42
- data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +0 -929
- data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +0 -40
- data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +0 -244
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +0 -46
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +0 -184
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +0 -454
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +0 -459
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +0 -83
- data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +0 -88
- data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +0 -7
- data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +0 -44
- data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +0 -437
- data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +0 -23
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +0 -57
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +0 -475
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +0 -480
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +0 -590
- data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +0 -590
- data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +0 -126
- data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +0 -68
- data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +0 -174
- data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +0 -80
- data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +0 -68
- data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +0 -142
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +0 -55
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +0 -1086
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +0 -1092
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +0 -721
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +0 -726
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +0 -723
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +0 -729
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +0 -1164
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +0 -1165
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +0 -562
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +0 -563
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +0 -563
- data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +0 -565
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +0 -55
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +0 -476
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +0 -485
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +0 -362
- data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +0 -367
- data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +0 -43
- data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +0 -1341
- data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +0 -581
- data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +0 -58
- data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +0 -332
- data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +0 -329
- data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +0 -53
- data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +0 -355
- data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +0 -79
- data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +0 -56
- data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +0 -399
- data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +0 -127
- data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +0 -43
- data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +0 -253
- data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +0 -1044
- data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +0 -49
- data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +0 -45
- data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +0 -37
- data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +0 -1587
- data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +0 -48
- data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +0 -1202
- data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +0 -48
- data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +0 -484
- data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +0 -44
- data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +0 -45
- data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +0 -37
- data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +0 -939
- data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +0 -49
- data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +0 -1216
- data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +0 -48
- data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +0 -45
- data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +0 -37
- data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +0 -290
- data/ext/xkcp/lib/low/common/SnP-Relaned.h +0 -141
- data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +0 -133
- data/ext/xkcp/support/Kernel-PMU/Makefile +0 -8
- data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +0 -129
- data/ext/xkcp/support/Kernel-PMU/load-module +0 -1
- data/ext/xkcp/util/KeccakSum/KeccakSum.c +0 -394
- data/ext/xkcp/util/KeccakSum/base64.c +0 -86
- data/ext/xkcp/util/KeccakSum/base64.h +0 -12
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/*
|
|
2
|
+
K12 based on 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 Gilles Van Assche and Ronny Van Keer, hereby denoted as "the implementer".
|
|
8
|
+
|
|
9
|
+
For more information, feedback or questions, please refer to the Keccak Team website:
|
|
10
|
+
https://keccak.team/
|
|
11
|
+
|
|
12
|
+
To the extent possible under law, the implementer has waived all copyright
|
|
13
|
+
and related or neighboring rights to the source code in this file.
|
|
14
|
+
http://creativecommons.org/publicdomain/zero/1.0/
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Please refer to the XKCP for more details.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include <stdint.h>
|
|
22
|
+
#include <stdlib.h>
|
|
23
|
+
#include <string.h>
|
|
24
|
+
#include <KeccakP-1600-SnP.h>
|
|
25
|
+
|
|
26
|
+
const char * KeccakP1600_GetImplementation()
|
|
27
|
+
{
|
|
28
|
+
return "ARMv8-A+SHA3 optimized implementation";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* ---------------------------------------------------------------- */
|
|
32
|
+
|
|
33
|
+
void KeccakP1600_opt64_Initialize(void *state)
|
|
34
|
+
{
|
|
35
|
+
memset(state, 0, 200);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* ---------------------------------------------------------------- */
|
|
39
|
+
|
|
40
|
+
void KeccakP1600_opt64_AddBytesInLane(void *state, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
41
|
+
{
|
|
42
|
+
uint64_t lane;
|
|
43
|
+
|
|
44
|
+
if (length == 0)
|
|
45
|
+
return;
|
|
46
|
+
if (length == 1)
|
|
47
|
+
lane = data[0];
|
|
48
|
+
else {
|
|
49
|
+
lane = 0;
|
|
50
|
+
memcpy(&lane, data, length);
|
|
51
|
+
}
|
|
52
|
+
lane <<= offset*8;
|
|
53
|
+
((uint64_t*)state)[lanePosition] ^= lane;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* ---------------------------------------------------------------- */
|
|
57
|
+
|
|
58
|
+
static void KeccakP1600_opt64_AddLanes(void *state, const unsigned char *data, unsigned int laneCount)
|
|
59
|
+
{
|
|
60
|
+
unsigned int i = 0;
|
|
61
|
+
|
|
62
|
+
for( ; (i+8)<=laneCount; i+=8) {
|
|
63
|
+
((uint64_t*)state)[i+0] ^= ((uint64_t*)data)[i+0];
|
|
64
|
+
((uint64_t*)state)[i+1] ^= ((uint64_t*)data)[i+1];
|
|
65
|
+
((uint64_t*)state)[i+2] ^= ((uint64_t*)data)[i+2];
|
|
66
|
+
((uint64_t*)state)[i+3] ^= ((uint64_t*)data)[i+3];
|
|
67
|
+
((uint64_t*)state)[i+4] ^= ((uint64_t*)data)[i+4];
|
|
68
|
+
((uint64_t*)state)[i+5] ^= ((uint64_t*)data)[i+5];
|
|
69
|
+
((uint64_t*)state)[i+6] ^= ((uint64_t*)data)[i+6];
|
|
70
|
+
((uint64_t*)state)[i+7] ^= ((uint64_t*)data)[i+7];
|
|
71
|
+
}
|
|
72
|
+
for( ; (i+4)<=laneCount; i+=4) {
|
|
73
|
+
((uint64_t*)state)[i+0] ^= ((uint64_t*)data)[i+0];
|
|
74
|
+
((uint64_t*)state)[i+1] ^= ((uint64_t*)data)[i+1];
|
|
75
|
+
((uint64_t*)state)[i+2] ^= ((uint64_t*)data)[i+2];
|
|
76
|
+
((uint64_t*)state)[i+3] ^= ((uint64_t*)data)[i+3];
|
|
77
|
+
}
|
|
78
|
+
for( ; (i+2)<=laneCount; i+=2) {
|
|
79
|
+
((uint64_t*)state)[i+0] ^= ((uint64_t*)data)[i+0];
|
|
80
|
+
((uint64_t*)state)[i+1] ^= ((uint64_t*)data)[i+1];
|
|
81
|
+
}
|
|
82
|
+
if (i<laneCount) {
|
|
83
|
+
((uint64_t*)state)[i+0] ^= ((uint64_t*)data)[i+0];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* ---------------------------------------------------------------- */
|
|
88
|
+
|
|
89
|
+
void KeccakP1600_opt64_AddByte(void *state, unsigned char byte, unsigned int offset)
|
|
90
|
+
{
|
|
91
|
+
((unsigned char*)(state))[offset] ^= byte;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* ---------------------------------------------------------------- */
|
|
95
|
+
|
|
96
|
+
#define SnP_AddBytes(state, data, offset, length, SnP_AddLanes, SnP_AddBytesInLane, SnP_laneLengthInBytes) \
|
|
97
|
+
{ \
|
|
98
|
+
if ((offset) == 0) { \
|
|
99
|
+
SnP_AddLanes(state, data, (length)/SnP_laneLengthInBytes); \
|
|
100
|
+
SnP_AddBytesInLane(state, \
|
|
101
|
+
(length)/SnP_laneLengthInBytes, \
|
|
102
|
+
(data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
|
|
103
|
+
0, \
|
|
104
|
+
(length)%SnP_laneLengthInBytes); \
|
|
105
|
+
} \
|
|
106
|
+
else { \
|
|
107
|
+
unsigned int _sizeLeft = (length); \
|
|
108
|
+
unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \
|
|
109
|
+
unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \
|
|
110
|
+
const unsigned char *_curData = (data); \
|
|
111
|
+
while(_sizeLeft > 0) { \
|
|
112
|
+
unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \
|
|
113
|
+
if (_bytesInLane > _sizeLeft) \
|
|
114
|
+
_bytesInLane = _sizeLeft; \
|
|
115
|
+
SnP_AddBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \
|
|
116
|
+
_sizeLeft -= _bytesInLane; \
|
|
117
|
+
_lanePosition++; \
|
|
118
|
+
_offsetInLane = 0; \
|
|
119
|
+
_curData += _bytesInLane; \
|
|
120
|
+
} \
|
|
121
|
+
} \
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
void KeccakP1600_opt64_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
125
|
+
{
|
|
126
|
+
SnP_AddBytes(state, data, offset, length, KeccakP1600_opt64_AddLanes, KeccakP1600_opt64_AddBytesInLane, 8);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* ---------------------------------------------------------------- */
|
|
130
|
+
|
|
131
|
+
void KeccakP1600_opt64_ExtractBytesInLane(const void *state, unsigned int lanePosition, unsigned char *data, unsigned int offset, unsigned int length)
|
|
132
|
+
{
|
|
133
|
+
uint64_t lane = ((uint64_t*)state)[lanePosition];
|
|
134
|
+
{
|
|
135
|
+
uint64_t lane1[1];
|
|
136
|
+
lane1[0] = lane;
|
|
137
|
+
memcpy(data, (uint8_t*)lane1+offset, length);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* ---------------------------------------------------------------- */
|
|
142
|
+
|
|
143
|
+
void KeccakP1600_opt64_ExtractLanes(const void *state, unsigned char *data, unsigned int laneCount)
|
|
144
|
+
{
|
|
145
|
+
memcpy(data, state, laneCount*8);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* ---------------------------------------------------------------- */
|
|
149
|
+
|
|
150
|
+
#define SnP_ExtractBytes(state, data, offset, length, SnP_ExtractLanes, SnP_ExtractBytesInLane, SnP_laneLengthInBytes) \
|
|
151
|
+
{ \
|
|
152
|
+
if ((offset) == 0) { \
|
|
153
|
+
SnP_ExtractLanes(state, data, (length)/SnP_laneLengthInBytes); \
|
|
154
|
+
SnP_ExtractBytesInLane(state, \
|
|
155
|
+
(length)/SnP_laneLengthInBytes, \
|
|
156
|
+
(data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
|
|
157
|
+
0, \
|
|
158
|
+
(length)%SnP_laneLengthInBytes); \
|
|
159
|
+
} \
|
|
160
|
+
else { \
|
|
161
|
+
unsigned int _sizeLeft = (length); \
|
|
162
|
+
unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \
|
|
163
|
+
unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \
|
|
164
|
+
unsigned char *_curData = (data); \
|
|
165
|
+
while(_sizeLeft > 0) { \
|
|
166
|
+
unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \
|
|
167
|
+
if (_bytesInLane > _sizeLeft) \
|
|
168
|
+
_bytesInLane = _sizeLeft; \
|
|
169
|
+
SnP_ExtractBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \
|
|
170
|
+
_sizeLeft -= _bytesInLane; \
|
|
171
|
+
_lanePosition++; \
|
|
172
|
+
_offsetInLane = 0; \
|
|
173
|
+
_curData += _bytesInLane; \
|
|
174
|
+
} \
|
|
175
|
+
} \
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
void KeccakP1600_opt64_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
|
|
179
|
+
{
|
|
180
|
+
SnP_ExtractBytes(state, data, offset, length, KeccakP1600_opt64_ExtractLanes, KeccakP1600_opt64_ExtractBytesInLane, 8);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* ---------------------------------------------------------------- */
|
|
184
|
+
|
|
185
|
+
/* Keccak-p[1600]×2 */
|
|
186
|
+
|
|
187
|
+
int KeccakP1600times2_IsAvailable()
|
|
188
|
+
{
|
|
189
|
+
return 1;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const char * KeccakP1600times2_GetImplementation()
|
|
193
|
+
{
|
|
194
|
+
return "ARMv8-A+SHA3 optimized implementation";
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* Keccak-p[1600]×4 */
|
|
198
|
+
|
|
199
|
+
int KeccakP1600times4_IsAvailable()
|
|
200
|
+
{
|
|
201
|
+
return 0;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const char * KeccakP1600times4_GetImplementation()
|
|
205
|
+
{
|
|
206
|
+
return "";
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
void KangarooTwelve_Process4Leaves(const unsigned char *input, unsigned char *output)
|
|
210
|
+
{
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* Keccak-p[1600]×8 */
|
|
214
|
+
|
|
215
|
+
int KeccakP1600times8_IsAvailable()
|
|
216
|
+
{
|
|
217
|
+
return 0;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const char * KeccakP1600times8_GetImplementation()
|
|
221
|
+
{
|
|
222
|
+
return "";
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
void KangarooTwelve_Process8Leaves(const unsigned char *input, unsigned char *output)
|
|
226
|
+
{
|
|
227
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
|
|
2
|
+
K12 based on the eXtended Keccak Code Package (XKCP)
|
|
3
3
|
https://github.com/XKCP/XKCP
|
|
4
4
|
|
|
5
5
|
The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
|
|
@@ -15,26 +15,21 @@ http://creativecommons.org/publicdomain/zero/1.0/
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
-
Please refer to
|
|
18
|
+
Please refer to the XKCP for more details.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
#ifndef _KeccakP_1600_SnP_h_
|
|
22
22
|
#define _KeccakP_1600_SnP_h_
|
|
23
23
|
|
|
24
|
-
#define KeccakP1600_implementation "64-bit compact implementation"
|
|
25
24
|
#define KeccakP1600_stateSizeInBytes 200
|
|
26
25
|
#define KeccakP1600_stateAlignment 8
|
|
26
|
+
#define KeccakP1600_disableParallelism
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
const char * KeccakP1600_GetImplementation();
|
|
29
29
|
void KeccakP1600_Initialize(void *state);
|
|
30
30
|
void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset);
|
|
31
31
|
void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
32
|
-
void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
|
|
33
|
-
void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount);
|
|
34
|
-
void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds);
|
|
35
32
|
void KeccakP1600_Permute_12rounds(void *state);
|
|
36
|
-
void KeccakP1600_Permute_24rounds(void *state);
|
|
37
33
|
void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
|
|
38
|
-
void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
|
|
39
34
|
|
|
40
35
|
#endif
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
|
|
2
|
+
K12 based on the eXtended Keccak Code Package (XKCP)
|
|
3
3
|
https://github.com/XKCP/XKCP
|
|
4
4
|
|
|
5
5
|
The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
|
|
@@ -15,18 +15,19 @@ http://creativecommons.org/publicdomain/zero/1.0/
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
Please refer to SnP-documentation.h for more details.
|
|
20
|
-
|
|
21
|
-
This implementation comes with KeccakP-1600-SnP.h in the same folder.
|
|
22
|
-
Please refer to LowLevel.build for the exact list of other files it must be combined with.
|
|
18
|
+
Please refer to the XKCP for more details.
|
|
23
19
|
*/
|
|
24
20
|
|
|
25
21
|
#include <stdint.h>
|
|
26
22
|
#include <string.h>
|
|
27
23
|
#include "brg_endian.h"
|
|
28
24
|
#include "KeccakP-1600-SnP.h"
|
|
29
|
-
|
|
25
|
+
|
|
26
|
+
const char * KeccakP1600_GetImplementation()
|
|
27
|
+
{
|
|
28
|
+
return "in-place 32-bit implementation";
|
|
29
|
+
}
|
|
30
|
+
|
|
30
31
|
|
|
31
32
|
#define ROL32(a, offset) ((((uint32_t)a) << (offset)) ^ (((uint32_t)a) >> (32-(offset))))
|
|
32
33
|
|
|
@@ -167,7 +168,7 @@ void KeccakP1600_AddBytesInLane(void *state, unsigned int lanePosition, const un
|
|
|
167
168
|
|
|
168
169
|
/* ---------------------------------------------------------------- */
|
|
169
170
|
|
|
170
|
-
void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int laneCount)
|
|
171
|
+
static void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int laneCount)
|
|
171
172
|
{
|
|
172
173
|
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
173
174
|
const uint32_t * pI = (const uint32_t *)data;
|
|
@@ -207,79 +208,37 @@ void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int l
|
|
|
207
208
|
|
|
208
209
|
/* ---------------------------------------------------------------- */
|
|
209
210
|
|
|
210
|
-
|
|
211
|
-
{
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
memcpy(&low, pI++, 4);
|
|
237
|
-
memcpy(&high, pI++, 4);
|
|
238
|
-
toBitInterleavingAndSet(low, high, *(pS++), *(pS++), t, x0, x1);
|
|
239
|
-
#else
|
|
240
|
-
toBitInterleavingAndSet(*(pI++), *(pI++), *(pS++), *(pS++), t, x0, x1)
|
|
241
|
-
#endif
|
|
242
|
-
}
|
|
243
|
-
#else
|
|
244
|
-
unsigned int lanePosition;
|
|
245
|
-
for(lanePosition=0; lanePosition<laneCount; lanePosition++) {
|
|
246
|
-
uint8_t laneAsBytes[8];
|
|
247
|
-
memcpy(laneAsBytes, data+lanePosition*8, 8);
|
|
248
|
-
uint32_t low = laneAsBytes[0]
|
|
249
|
-
| ((uint32_t)(laneAsBytes[1]) << 8)
|
|
250
|
-
| ((uint32_t)(laneAsBytes[2]) << 16)
|
|
251
|
-
| ((uint32_t)(laneAsBytes[3]) << 24);
|
|
252
|
-
uint32_t high = laneAsBytes[4]
|
|
253
|
-
| ((uint32_t)(laneAsBytes[5]) << 8)
|
|
254
|
-
| ((uint32_t)(laneAsBytes[6]) << 16)
|
|
255
|
-
| ((uint32_t)(laneAsBytes[7]) << 24);
|
|
256
|
-
uint32_t even, odd, temp, temp0, temp1;
|
|
257
|
-
uint32_t *stateAsHalfLanes = (uint32_t*)state;
|
|
258
|
-
toBitInterleavingAndSet(low, high, stateAsHalfLanes[lanePosition*2+0], stateAsHalfLanes[lanePosition*2+1], temp, temp0, temp1);
|
|
211
|
+
#define SnP_AddBytes(state, data, offset, length, SnP_AddLanes, SnP_AddBytesInLane, SnP_laneLengthInBytes) \
|
|
212
|
+
{ \
|
|
213
|
+
if ((offset) == 0) { \
|
|
214
|
+
SnP_AddLanes(state, data, (length)/SnP_laneLengthInBytes); \
|
|
215
|
+
SnP_AddBytesInLane(state, \
|
|
216
|
+
(length)/SnP_laneLengthInBytes, \
|
|
217
|
+
(data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
|
|
218
|
+
0, \
|
|
219
|
+
(length)%SnP_laneLengthInBytes); \
|
|
220
|
+
} \
|
|
221
|
+
else { \
|
|
222
|
+
unsigned int _sizeLeft = (length); \
|
|
223
|
+
unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \
|
|
224
|
+
unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \
|
|
225
|
+
const unsigned char *_curData = (data); \
|
|
226
|
+
while(_sizeLeft > 0) { \
|
|
227
|
+
unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \
|
|
228
|
+
if (_bytesInLane > _sizeLeft) \
|
|
229
|
+
_bytesInLane = _sizeLeft; \
|
|
230
|
+
SnP_AddBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \
|
|
231
|
+
_sizeLeft -= _bytesInLane; \
|
|
232
|
+
_lanePosition++; \
|
|
233
|
+
_offsetInLane = 0; \
|
|
234
|
+
_curData += _bytesInLane; \
|
|
235
|
+
} \
|
|
236
|
+
} \
|
|
259
237
|
}
|
|
260
|
-
#endif
|
|
261
|
-
}
|
|
262
238
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
266
|
-
{
|
|
267
|
-
SnP_OverwriteBytes(state, data, offset, length, KeccakP1600_OverwriteLanes, KeccakP1600_OverwriteBytesInLane, 8);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/* ---------------------------------------------------------------- */
|
|
271
|
-
|
|
272
|
-
void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
|
|
239
|
+
void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
|
|
273
240
|
{
|
|
274
|
-
|
|
275
|
-
unsigned int i;
|
|
276
|
-
|
|
277
|
-
for(i=0; i<byteCount/8; i++) {
|
|
278
|
-
stateAsHalfLanes[i*2+0] = 0;
|
|
279
|
-
stateAsHalfLanes[i*2+1] = 0;
|
|
280
|
-
}
|
|
281
|
-
if (byteCount%8 != 0)
|
|
282
|
-
KeccakP1600_SetBytesInLaneToZero(state, byteCount/8, 0, byteCount%8);
|
|
241
|
+
SnP_AddBytes(state, data, offset, length, KeccakP1600_AddLanes, KeccakP1600_AddBytesInLane, 8);
|
|
283
242
|
}
|
|
284
243
|
|
|
285
244
|
/* ---------------------------------------------------------------- */
|
|
@@ -349,84 +308,37 @@ void KeccakP1600_ExtractLanes(const void *state, unsigned char *data, unsigned i
|
|
|
349
308
|
|
|
350
309
|
/* ---------------------------------------------------------------- */
|
|
351
310
|
|
|
352
|
-
|
|
353
|
-
{
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
laneAsBytes[7] = (high >> 24) & 0xFF;
|
|
379
|
-
#endif
|
|
380
|
-
for(i=0; i<length; i++)
|
|
381
|
-
output[i] = input[i] ^ laneAsBytes[offset+i];
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
/* ---------------------------------------------------------------- */
|
|
385
|
-
|
|
386
|
-
void KeccakP1600_ExtractAndAddLanes(const void *state, const unsigned char *input, unsigned char *output, unsigned int laneCount)
|
|
387
|
-
{
|
|
388
|
-
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
|
389
|
-
const uint32_t * pI = (const uint32_t *)input;
|
|
390
|
-
uint32_t * pO = (uint32_t *)output;
|
|
391
|
-
const uint32_t * pS = (const uint32_t *)state;
|
|
392
|
-
uint32_t t, x0, x1;
|
|
393
|
-
int i;
|
|
394
|
-
for (i = laneCount-1; i >= 0; --i) {
|
|
395
|
-
#ifdef NO_MISALIGNED_ACCESSES
|
|
396
|
-
uint32_t low;
|
|
397
|
-
uint32_t high;
|
|
398
|
-
fromBitInterleaving(*(pS++), *(pS++), low, high, t, x0, x1);
|
|
399
|
-
*(pO++) = *(pI++) ^ low;
|
|
400
|
-
*(pO++) = *(pI++) ^ high;
|
|
401
|
-
#else
|
|
402
|
-
fromBitInterleavingAndXOR(*(pS++), *(pS++), *(pI++), *(pI++), *(pO++), *(pO++), t, x0, x1)
|
|
403
|
-
#endif
|
|
311
|
+
#define SnP_ExtractBytes(state, data, offset, length, SnP_ExtractLanes, SnP_ExtractBytesInLane, SnP_laneLengthInBytes) \
|
|
312
|
+
{ \
|
|
313
|
+
if ((offset) == 0) { \
|
|
314
|
+
SnP_ExtractLanes(state, data, (length)/SnP_laneLengthInBytes); \
|
|
315
|
+
SnP_ExtractBytesInLane(state, \
|
|
316
|
+
(length)/SnP_laneLengthInBytes, \
|
|
317
|
+
(data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
|
|
318
|
+
0, \
|
|
319
|
+
(length)%SnP_laneLengthInBytes); \
|
|
320
|
+
} \
|
|
321
|
+
else { \
|
|
322
|
+
unsigned int _sizeLeft = (length); \
|
|
323
|
+
unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \
|
|
324
|
+
unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \
|
|
325
|
+
unsigned char *_curData = (data); \
|
|
326
|
+
while(_sizeLeft > 0) { \
|
|
327
|
+
unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \
|
|
328
|
+
if (_bytesInLane > _sizeLeft) \
|
|
329
|
+
_bytesInLane = _sizeLeft; \
|
|
330
|
+
SnP_ExtractBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \
|
|
331
|
+
_sizeLeft -= _bytesInLane; \
|
|
332
|
+
_lanePosition++; \
|
|
333
|
+
_offsetInLane = 0; \
|
|
334
|
+
_curData += _bytesInLane; \
|
|
335
|
+
} \
|
|
336
|
+
} \
|
|
404
337
|
}
|
|
405
|
-
#else
|
|
406
|
-
unsigned int lanePosition;
|
|
407
|
-
for(lanePosition=0; lanePosition<laneCount; lanePosition++) {
|
|
408
|
-
uint32_t *stateAsHalfLanes = (uint32_t*)state;
|
|
409
|
-
uint32_t low, high, temp, temp0, temp1;
|
|
410
|
-
fromBitInterleaving(stateAsHalfLanes[lanePosition*2], stateAsHalfLanes[lanePosition*2+1], low, high, temp, temp0, temp1);
|
|
411
|
-
uint8_t laneAsBytes[8];
|
|
412
|
-
laneAsBytes[0] = low & 0xFF;
|
|
413
|
-
laneAsBytes[1] = (low >> 8) & 0xFF;
|
|
414
|
-
laneAsBytes[2] = (low >> 16) & 0xFF;
|
|
415
|
-
laneAsBytes[3] = (low >> 24) & 0xFF;
|
|
416
|
-
laneAsBytes[4] = high & 0xFF;
|
|
417
|
-
laneAsBytes[5] = (high >> 8) & 0xFF;
|
|
418
|
-
laneAsBytes[6] = (high >> 16) & 0xFF;
|
|
419
|
-
laneAsBytes[7] = (high >> 24) & 0xFF;
|
|
420
|
-
((uint32_t*)(output+lanePosition*8))[0] = ((uint32_t*)(input+lanePosition*8))[0] ^ (*(const uint32_t*)(laneAsBytes+0));
|
|
421
|
-
((uint32_t*)(output+lanePosition*8))[1] = ((uint32_t*)(input+lanePosition*8))[0] ^ (*(const uint32_t*)(laneAsBytes+4));
|
|
422
|
-
}
|
|
423
|
-
#endif
|
|
424
|
-
}
|
|
425
|
-
/* ---------------------------------------------------------------- */
|
|
426
338
|
|
|
427
|
-
void
|
|
339
|
+
void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
|
|
428
340
|
{
|
|
429
|
-
|
|
341
|
+
SnP_ExtractBytes(state, data, offset, length, KeccakP1600_ExtractLanes, KeccakP1600_ExtractBytesInLane, 8);
|
|
430
342
|
}
|
|
431
343
|
|
|
432
344
|
/* ---------------------------------------------------------------- */
|
|
@@ -1154,10 +1066,3 @@ void KeccakP1600_Permute_12rounds(void *state)
|
|
|
1154
1066
|
{
|
|
1155
1067
|
KeccakP1600_Permute_Nrounds(state, 12);
|
|
1156
1068
|
}
|
|
1157
|
-
|
|
1158
|
-
/* ---------------------------------------------------------------- */
|
|
1159
|
-
|
|
1160
|
-
void KeccakP1600_Permute_24rounds(void *state)
|
|
1161
|
-
{
|
|
1162
|
-
KeccakP1600_Permute_Nrounds(state, 24);
|
|
1163
|
-
}
|