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,475 @@
|
|
|
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
|
+
; WARNING: These functions work only on little endian CPU with ARMv7m architecture (Cortex-M3, ...).
|
|
18
|
+
|
|
19
|
+
PRESERVE8
|
|
20
|
+
THUMB
|
|
21
|
+
AREA |.text|, CODE, READONLY
|
|
22
|
+
|
|
23
|
+
_ba equ 0
|
|
24
|
+
_be equ 1
|
|
25
|
+
_bi equ 2
|
|
26
|
+
_bo equ 3
|
|
27
|
+
_bu equ 4
|
|
28
|
+
_ga equ 5
|
|
29
|
+
_ge equ 6
|
|
30
|
+
_gi equ 7
|
|
31
|
+
_go equ 8
|
|
32
|
+
_gu equ 9
|
|
33
|
+
_ka equ 10
|
|
34
|
+
_ke equ 11
|
|
35
|
+
_ki equ 12
|
|
36
|
+
_ko equ 13
|
|
37
|
+
_ku equ 14
|
|
38
|
+
_ma equ 15
|
|
39
|
+
_me equ 16
|
|
40
|
+
_mi equ 17
|
|
41
|
+
_mo equ 18
|
|
42
|
+
_mu equ 19
|
|
43
|
+
_sa equ 20
|
|
44
|
+
_se equ 21
|
|
45
|
+
_si equ 22
|
|
46
|
+
_so equ 23
|
|
47
|
+
_su equ 24
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
_a equ 0
|
|
51
|
+
_e equ 8
|
|
52
|
+
_i equ 16
|
|
53
|
+
_o equ 24
|
|
54
|
+
|
|
55
|
+
_B equ 0
|
|
56
|
+
_G equ 8
|
|
57
|
+
_K equ 16
|
|
58
|
+
_M equ 24
|
|
59
|
+
|
|
60
|
+
MACRO
|
|
61
|
+
RhoPi $rot, $rOut, $oOut, $rIn, $oIn
|
|
62
|
+
|
|
63
|
+
if $rot != 0
|
|
64
|
+
if $oIn ==0
|
|
65
|
+
ubfx r2, $rIn, #8-$rot, #$rot
|
|
66
|
+
bfi r2, $rIn, #$rot, #8-$rot
|
|
67
|
+
bfi $rOut, r2, #$oOut, #8
|
|
68
|
+
else
|
|
69
|
+
uxtb r1, $rIn, ROR #$oIn
|
|
70
|
+
ubfx r2, r1, #8-$rot, #$rot
|
|
71
|
+
bfi r2, r1, #$rot, #8-$rot
|
|
72
|
+
bfi $rOut, r2, #$oOut, #8
|
|
73
|
+
endif
|
|
74
|
+
else
|
|
75
|
+
if $oIn !=0
|
|
76
|
+
lsr r1, $rIn, #$oIn
|
|
77
|
+
bfi $rOut, r1, #$oOut, #8
|
|
78
|
+
else
|
|
79
|
+
bfi $rOut, $rOut, #$oOut, #8
|
|
80
|
+
endif
|
|
81
|
+
endif
|
|
82
|
+
MEND
|
|
83
|
+
|
|
84
|
+
MACRO
|
|
85
|
+
Chi $rXaeio, $rXu, $offU
|
|
86
|
+
|
|
87
|
+
if $offU == 0
|
|
88
|
+
lsls r2, $rXu, #24
|
|
89
|
+
else
|
|
90
|
+
if $offU == 24
|
|
91
|
+
and r2, $rXu, #0xFF000000
|
|
92
|
+
else
|
|
93
|
+
ubfx r2, $rXu, #$offU, #8 ;r2 = Beiou
|
|
94
|
+
lsls r2, r2, #24
|
|
95
|
+
endif
|
|
96
|
+
endif
|
|
97
|
+
orr r2, r2, $rXaeio, LSR #8
|
|
98
|
+
lsl r1, $rXaeio, #24 ;r1 = Bioua
|
|
99
|
+
orr r1, r1, r2, LSR #8
|
|
100
|
+
bics r1, r1, r2 ;r1 = Bioua & ~ Beiou
|
|
101
|
+
bic r2, r2, $rXaeio ;r2 = Be & ~Ba
|
|
102
|
+
eor $rXaeio, $rXaeio, r1 ;Baeio ^= r1
|
|
103
|
+
if $offU !=0
|
|
104
|
+
eor r2, r2, $rXu, LSR #$offU ;r2 ^= Bu
|
|
105
|
+
else
|
|
106
|
+
eors r2, r2, $rXu ;r2 ^= Bu
|
|
107
|
+
endif
|
|
108
|
+
bfi $rXu, r2, #$offU, #8
|
|
109
|
+
MEND
|
|
110
|
+
|
|
111
|
+
;----------------------------------------------------------------------------
|
|
112
|
+
;
|
|
113
|
+
; void KetJr_StateAddByte( void *state, unsigned char value, unsigned int offset )
|
|
114
|
+
;
|
|
115
|
+
ALIGN
|
|
116
|
+
EXPORT KetJr_StateAddByte
|
|
117
|
+
KetJr_StateAddByte PROC
|
|
118
|
+
adr r3, Ket_StateTwistIndexes
|
|
119
|
+
ldrb r3, [r3, r2]
|
|
120
|
+
ldrb r2, [r0, r3]
|
|
121
|
+
eors r1, r1, r2
|
|
122
|
+
strb r1, [r0, r3]
|
|
123
|
+
bx lr
|
|
124
|
+
ENDP
|
|
125
|
+
|
|
126
|
+
;----------------------------------------------------------------------------
|
|
127
|
+
;
|
|
128
|
+
; unsigned char KetJr_StateExtractByte( void *state, unsigned int offset )
|
|
129
|
+
;
|
|
130
|
+
ALIGN
|
|
131
|
+
EXPORT KetJr_StateExtractByte
|
|
132
|
+
KetJr_StateExtractByte PROC
|
|
133
|
+
adr r3, Ket_StateTwistIndexes
|
|
134
|
+
ldrb r3, [r3, r1]
|
|
135
|
+
ldrb r0, [r0, r3]
|
|
136
|
+
bx lr
|
|
137
|
+
ENDP
|
|
138
|
+
|
|
139
|
+
;----------------------------------------------------------------------------
|
|
140
|
+
;
|
|
141
|
+
; void KetJr_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length )
|
|
142
|
+
;
|
|
143
|
+
ALIGN
|
|
144
|
+
EXPORT KetJr_StateOverwrite
|
|
145
|
+
KetJr_StateOverwrite PROC
|
|
146
|
+
cmp r3, #0
|
|
147
|
+
beq KetJr_StateOverwrite_Exit
|
|
148
|
+
push {r4-r5}
|
|
149
|
+
adr r4, Ket_StateTwistIndexes
|
|
150
|
+
adds r1, r1, r4
|
|
151
|
+
KetJr_StateOverwrite_Loop
|
|
152
|
+
ldrb r5, [r1], #1
|
|
153
|
+
ldrb r4, [r2], #1
|
|
154
|
+
subs r3, r3, #1
|
|
155
|
+
strb r4, [r0, r5]
|
|
156
|
+
bne KetJr_StateOverwrite_Loop
|
|
157
|
+
pop {r4-r5}
|
|
158
|
+
KetJr_StateOverwrite_Exit
|
|
159
|
+
bx lr
|
|
160
|
+
ENDP
|
|
161
|
+
|
|
162
|
+
;----------------------------------------------------------------------------
|
|
163
|
+
;
|
|
164
|
+
; void KetJr_Step( void *state, unsigned int size, unsigned char framing )
|
|
165
|
+
;
|
|
166
|
+
ALIGN
|
|
167
|
+
EXPORT KetJr_Step
|
|
168
|
+
KetJr_Step PROC
|
|
169
|
+
push {r4-r12,lr}
|
|
170
|
+
|
|
171
|
+
; add framing into state in RAM
|
|
172
|
+
adr r3, Ket_StateTwistIndexes
|
|
173
|
+
ldrb r3, [r3, r1]
|
|
174
|
+
ldrb r4, [r0, r3]
|
|
175
|
+
eors r4, r4, r2
|
|
176
|
+
strb r4, [r0, r3]
|
|
177
|
+
|
|
178
|
+
; Load state into registers
|
|
179
|
+
ldr r8, [r0, #_ba] ; B-aeio
|
|
180
|
+
ldr r9, [r0, #_ga] ; G-aeio
|
|
181
|
+
ldr r10, [r0, #_ka] ; K-aeio
|
|
182
|
+
ldr r11, [r0, #_ma] ; M-aeio
|
|
183
|
+
ldr r12, [r0, #_sa] ; S-aeio
|
|
184
|
+
|
|
185
|
+
ldrb r6, [r0, #_bu] ; BGKM-u
|
|
186
|
+
ldrb r3, [r0, #_gu]
|
|
187
|
+
orr r6, r6, r3, LSL #8
|
|
188
|
+
ldrb r3, [r0, #_ku]
|
|
189
|
+
orr r6, r6, r3, LSL #16
|
|
190
|
+
ldrb r3, [r0, #_mu]
|
|
191
|
+
orr r6, r6, r3, LSL #24
|
|
192
|
+
|
|
193
|
+
ldrb r7, [r0, #_su] ; S-u
|
|
194
|
+
|
|
195
|
+
eor r10, r10, #0x00080000 ; add padding
|
|
196
|
+
bl KeccakP200_1_StatePermuteAsm
|
|
197
|
+
|
|
198
|
+
; Save registers into RAM state
|
|
199
|
+
str r8, [r0, #_ba] ; B-aeio
|
|
200
|
+
str r9, [r0, #_ga] ; G-aeio
|
|
201
|
+
str r10, [r0, #_ka] ; K-aeio
|
|
202
|
+
str r11, [r0, #_ma] ; M-aeio
|
|
203
|
+
str r12, [r0, #_sa] ; S-aeio
|
|
204
|
+
|
|
205
|
+
strb r6, [r0, #_bu] ; BGKM-u
|
|
206
|
+
lsrs r6, #8
|
|
207
|
+
strb r6, [r0, #_gu]
|
|
208
|
+
lsrs r6, #8
|
|
209
|
+
strb r6, [r0, #_ku]
|
|
210
|
+
lsrs r6, #8
|
|
211
|
+
strb r6, [r0, #_mu]
|
|
212
|
+
strb r7, [r0, #_su] ; S-u
|
|
213
|
+
|
|
214
|
+
pop {r4-r12,pc}
|
|
215
|
+
ENDP
|
|
216
|
+
|
|
217
|
+
ALIGN
|
|
218
|
+
Ket_StateTwistIndexes
|
|
219
|
+
dcb 0, 6, 12, 18, 24
|
|
220
|
+
dcb 3, 9, 10, 16, 22
|
|
221
|
+
dcb 1, 7, 13, 19, 20
|
|
222
|
+
dcb 4, 5, 11, 17, 23
|
|
223
|
+
dcb 2, 8, 14, 15, 21
|
|
224
|
+
|
|
225
|
+
;----------------------------------------------------------------------------
|
|
226
|
+
;
|
|
227
|
+
; void KetJr_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks )
|
|
228
|
+
;
|
|
229
|
+
ALIGN
|
|
230
|
+
EXPORT KetJr_FeedAssociatedDataBlocks
|
|
231
|
+
KetJr_FeedAssociatedDataBlocks PROC
|
|
232
|
+
push {r4-r12,lr}
|
|
233
|
+
|
|
234
|
+
; Load state into registers
|
|
235
|
+
ldr r8, [r0, #_ba] ; B-aeio
|
|
236
|
+
ldr r9, [r0, #_ga] ; G-aeio
|
|
237
|
+
ldr r10, [r0, #_ka] ; K-aeio
|
|
238
|
+
ldr r11, [r0, #_ma] ; M-aeio
|
|
239
|
+
ldr r12, [r0, #_sa] ; S-aeio
|
|
240
|
+
ldrb r6, [r0, #_bu] ; BGKM-u
|
|
241
|
+
ldrb r3, [r0, #_gu]
|
|
242
|
+
orr r6, r6, r3, LSL #8
|
|
243
|
+
ldrb r3, [r0, #_ku]
|
|
244
|
+
orr r6, r6, r3, LSL #16
|
|
245
|
+
ldrb r3, [r0, #_mu]
|
|
246
|
+
orr r6, r6, r3, LSL #24
|
|
247
|
+
ldrb r7, [r0, #_su] ; S-u
|
|
248
|
+
KetJr_FeedAssociatedDataBlocks_Loop
|
|
249
|
+
ldrb r3, [r1], #1 ; byte 1
|
|
250
|
+
eor r8, r8, r3
|
|
251
|
+
ldrb r3, [r1], #1 ; byte 2
|
|
252
|
+
eor r9, r9, r3, LSL #8
|
|
253
|
+
eor r10, r10, #0x000C0000 ; padding + FRAMEBITS00
|
|
254
|
+
push {r1-r2}
|
|
255
|
+
bl KeccakP200_1_StatePermuteAsm
|
|
256
|
+
pop {r1-r2}
|
|
257
|
+
subs r2, r2, #1
|
|
258
|
+
bne KetJr_FeedAssociatedDataBlocks_Loop
|
|
259
|
+
|
|
260
|
+
; Save registers into RAM state
|
|
261
|
+
str r8, [r0, #_ba] ; B-aeio
|
|
262
|
+
str r9, [r0, #_ga] ; G-aeio
|
|
263
|
+
str r10, [r0, #_ka] ; K-aeio
|
|
264
|
+
str r11, [r0, #_ma] ; M-aeio
|
|
265
|
+
str r12, [r0, #_sa] ; S-aeio
|
|
266
|
+
strb r6, [r0, #_bu] ; BGKM-u
|
|
267
|
+
lsrs r6, #8
|
|
268
|
+
strb r6, [r0, #_gu]
|
|
269
|
+
lsrs r6, #8
|
|
270
|
+
strb r6, [r0, #_ku]
|
|
271
|
+
lsrs r6, #8
|
|
272
|
+
strb r6, [r0, #_mu]
|
|
273
|
+
strb r7, [r0, #_su] ; S-u
|
|
274
|
+
|
|
275
|
+
pop {r4-r12,pc}
|
|
276
|
+
ENDP
|
|
277
|
+
|
|
278
|
+
;----------------------------------------------------------------------------
|
|
279
|
+
;
|
|
280
|
+
; void KetJr_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks )
|
|
281
|
+
;
|
|
282
|
+
ALIGN
|
|
283
|
+
EXPORT KetJr_UnwrapBlocks
|
|
284
|
+
KetJr_UnwrapBlocks PROC
|
|
285
|
+
push {r4-r12,lr}
|
|
286
|
+
|
|
287
|
+
; Load state into registers
|
|
288
|
+
ldr r8, [r0, #_ba] ; B-aeio
|
|
289
|
+
ldr r9, [r0, #_ga] ; G-aeio
|
|
290
|
+
ldr r10, [r0, #_ka] ; K-aeio
|
|
291
|
+
ldr r11, [r0, #_ma] ; M-aeio
|
|
292
|
+
ldr r12, [r0, #_sa] ; S-aeio
|
|
293
|
+
ldrb r6, [r0, #_bu] ; BGKM-u
|
|
294
|
+
ldrb r4, [r0, #_gu]
|
|
295
|
+
orr r6, r6, r4, LSL #8
|
|
296
|
+
ldrb r4, [r0, #_ku]
|
|
297
|
+
orr r6, r6, r4, LSL #16
|
|
298
|
+
ldrb r4, [r0, #_mu]
|
|
299
|
+
orr r6, r6, r4, LSL #24
|
|
300
|
+
ldrb r7, [r0, #_su] ; S-u
|
|
301
|
+
KetJr_UnwrapBlocks_Loop
|
|
302
|
+
ldrb r5, [r1], #1 ; ciphertext byte 1
|
|
303
|
+
eor r4, r5, r8
|
|
304
|
+
strb r4, [r2], #1 ; plaintext
|
|
305
|
+
bfi r8, r5, #0, #8 ; state = ciphertext
|
|
306
|
+
ldrb r5, [r1], #1 ; ciphertext byte 2
|
|
307
|
+
eor r4, r5, r9, LSR #8
|
|
308
|
+
strb r4, [r2], #1 ; plaintext
|
|
309
|
+
bfi r9, r5, #8, #8 ; state = ciphertext
|
|
310
|
+
eor r10, r10, #0x000F0000 ; padding + FRAMEBITS11
|
|
311
|
+
push {r1-r4}
|
|
312
|
+
bl KeccakP200_1_StatePermuteAsm
|
|
313
|
+
pop {r1-r4}
|
|
314
|
+
subs r3, r3, #1
|
|
315
|
+
bne KetJr_UnwrapBlocks_Loop
|
|
316
|
+
|
|
317
|
+
; Save registers into RAM state
|
|
318
|
+
str r8, [r0, #_ba] ; B-aeio
|
|
319
|
+
str r9, [r0, #_ga] ; G-aeio
|
|
320
|
+
str r10, [r0, #_ka] ; K-aeio
|
|
321
|
+
str r11, [r0, #_ma] ; M-aeio
|
|
322
|
+
str r12, [r0, #_sa] ; S-aeio
|
|
323
|
+
|
|
324
|
+
strb r6, [r0, #_bu] ; BGKM-u
|
|
325
|
+
lsrs r6, #8
|
|
326
|
+
strb r6, [r0, #_gu]
|
|
327
|
+
lsrs r6, #8
|
|
328
|
+
strb r6, [r0, #_ku]
|
|
329
|
+
lsrs r6, #8
|
|
330
|
+
strb r6, [r0, #_mu]
|
|
331
|
+
strb r7, [r0, #_su] ; S-u
|
|
332
|
+
|
|
333
|
+
pop {r4-r12,pc}
|
|
334
|
+
ENDP
|
|
335
|
+
|
|
336
|
+
;----------------------------------------------------------------------------
|
|
337
|
+
;
|
|
338
|
+
; void KetJr_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks )
|
|
339
|
+
;
|
|
340
|
+
ALIGN
|
|
341
|
+
EXPORT KetJr_WrapBlocks
|
|
342
|
+
KetJr_WrapBlocks PROC
|
|
343
|
+
push {r4-r12,lr}
|
|
344
|
+
|
|
345
|
+
; Load state into registers
|
|
346
|
+
ldr r8, [r0, #_ba] ; B-aeio
|
|
347
|
+
ldr r9, [r0, #_ga] ; G-aeio
|
|
348
|
+
ldr r10, [r0, #_ka] ; K-aeio
|
|
349
|
+
ldr r11, [r0, #_ma] ; M-aeio
|
|
350
|
+
ldr r12, [r0, #_sa] ; S-aeio
|
|
351
|
+
ldrb r6, [r0, #_bu] ; BGKM-u
|
|
352
|
+
ldrb r4, [r0, #_gu]
|
|
353
|
+
orr r6, r6, r4, LSL #8
|
|
354
|
+
ldrb r4, [r0, #_ku]
|
|
355
|
+
orr r6, r6, r4, LSL #16
|
|
356
|
+
ldrb r4, [r0, #_mu]
|
|
357
|
+
orr r6, r6, r4, LSL #24
|
|
358
|
+
ldrb r7, [r0, #_su] ; S-u
|
|
359
|
+
KetJr_WrapBlocks_Loop
|
|
360
|
+
ldrb r4, [r1], #1 ; plaintext byte 1
|
|
361
|
+
eor r4, r4, r8
|
|
362
|
+
strb r4, [r2], #1 ; ciphertext
|
|
363
|
+
bfi r8, r4, #0, #8 ; state = ciphertext
|
|
364
|
+
ldrb r4, [r1], #1 ; plaintext byte 2
|
|
365
|
+
eor r4, r4, r9, LSR #8
|
|
366
|
+
strb r4, [r2], #1 ; ciphertext
|
|
367
|
+
bfi r9, r4, #8, #8 ; state = ciphertext
|
|
368
|
+
eor r10, r10, #0x000F0000 ; padding + FRAMEBITS11
|
|
369
|
+
push {r1-r4}
|
|
370
|
+
bl KeccakP200_1_StatePermuteAsm
|
|
371
|
+
pop {r1-r4}
|
|
372
|
+
subs r3, r3, #1
|
|
373
|
+
bne KetJr_WrapBlocks_Loop
|
|
374
|
+
|
|
375
|
+
; Save registers into RAM state
|
|
376
|
+
str r8, [r0, #_ba] ; B-aeio
|
|
377
|
+
str r9, [r0, #_ga] ; G-aeio
|
|
378
|
+
str r10, [r0, #_ka] ; K-aeio
|
|
379
|
+
str r11, [r0, #_ma] ; M-aeio
|
|
380
|
+
str r12, [r0, #_sa] ; S-aeio
|
|
381
|
+
strb r6, [r0, #_bu] ; BGKM-u
|
|
382
|
+
lsrs r6, #8
|
|
383
|
+
strb r6, [r0, #_gu]
|
|
384
|
+
lsrs r6, #8
|
|
385
|
+
strb r6, [r0, #_ku]
|
|
386
|
+
lsrs r6, #8
|
|
387
|
+
strb r6, [r0, #_mu]
|
|
388
|
+
strb r7, [r0, #_su] ; S-u
|
|
389
|
+
|
|
390
|
+
pop {r4-r12,pc}
|
|
391
|
+
ENDP
|
|
392
|
+
|
|
393
|
+
;----------------------------------------------------------------------------
|
|
394
|
+
;
|
|
395
|
+
; Keccak-P[200, 1] usable from asm only
|
|
396
|
+
;
|
|
397
|
+
KeccakP200_1_StatePermuteAsm PROC
|
|
398
|
+
|
|
399
|
+
; Prepare Theta
|
|
400
|
+
eors r4, r8, r9
|
|
401
|
+
eors r4, r4, r10
|
|
402
|
+
eors r4, r4, r11
|
|
403
|
+
eors r4, r4, r12
|
|
404
|
+
eor r1, r6, r6, LSL #16
|
|
405
|
+
eor r1, r1, r1, LSL #8
|
|
406
|
+
eor r5, r7, r1, LSR #24
|
|
407
|
+
bic r1, r4, #0x80808080 ; r1 = rol(Caeio)
|
|
408
|
+
lsl r1, r1, #1
|
|
409
|
+
and r2, r4, #0x80808080
|
|
410
|
+
orr r1, r1, r2, LSR #7
|
|
411
|
+
|
|
412
|
+
; Apply Theta u
|
|
413
|
+
eors r2, r1, r4, LSR #24 ; rt2(=Du) = Co ^ rol(Ca)
|
|
414
|
+
uxtb r2, r2
|
|
415
|
+
eor r7, r7, r2
|
|
416
|
+
orr r2, r2, r2, LSL #8
|
|
417
|
+
orr r2, r2, r2, LSL #16
|
|
418
|
+
eor r6, r6, r2
|
|
419
|
+
lsl r2, r5, #1 ; r2 = rol(Cu)
|
|
420
|
+
orrs r2, r2, r5, LSR #7
|
|
421
|
+
lsr r1, r1, #8
|
|
422
|
+
orr r1, r1, r2, LSL #24 ; r1 = rol(Ceiou)
|
|
423
|
+
orr r2, r5, r4, LSL #8 ; r2 = Cuaei
|
|
424
|
+
eors r2, r2, r1 ; r2 ^= r1
|
|
425
|
+
|
|
426
|
+
; Apply Theta aeio
|
|
427
|
+
eor r8, r8, r2
|
|
428
|
+
eor r9, r9, r2
|
|
429
|
+
eor r10, r10, r2
|
|
430
|
+
eor r11, r11, r2
|
|
431
|
+
eor r12, r12, r2
|
|
432
|
+
|
|
433
|
+
; Rho Pi
|
|
434
|
+
lsr r3, r8, #_e ; save _be
|
|
435
|
+
RhoPi 4, r8, _e, r9, _e ; _be, _ge 1 < 6
|
|
436
|
+
RhoPi 4, r9, _e, r6, _G ; _ge, _gu 6 < 9
|
|
437
|
+
RhoPi 5, r6, _G, r12, _i ; _gu, _si 9 < 22
|
|
438
|
+
RhoPi 7, r12, _i, r6, _K ; _si, _ku 22 < 14
|
|
439
|
+
RhoPi 2, r6, _K, r12, _a ; _ku, _sa 14 < 20
|
|
440
|
+
RhoPi 6, r12, _a, r8, _i ; _sa, _bi 20 < 2
|
|
441
|
+
RhoPi 3, r8, _i, r10, _i ; _bi, _ki 2 < 12
|
|
442
|
+
RhoPi 1, r10, _i, r10, _o ; _ki, _ko 12 < 13
|
|
443
|
+
RhoPi 0, r10, _o, r6, _M ; _ko, _mu 13 < 19
|
|
444
|
+
RhoPi 0, r6, _M, r12, _o ; _mu, _so 19 < 23
|
|
445
|
+
RhoPi 1, r12, _o, r11, _a ; _so, _ma 23 < 15
|
|
446
|
+
RhoPi 3, r11, _a, r6, _B ; _ma, _bu 15 < 4
|
|
447
|
+
RhoPi 6, r6, _B, r7, 0 ; _bu, _su 4 < 24
|
|
448
|
+
RhoPi 2, r7, 0, r12, _e ; _su, _se 24 < 21
|
|
449
|
+
RhoPi 7, r12, _e, r9, _o ; _se, _go 21 < 8
|
|
450
|
+
RhoPi 5, r9, _o, r11, _e ; _go, _me 8 < 16
|
|
451
|
+
RhoPi 4, r11, _e, r9, _a ; _me, _ga 16 < 5
|
|
452
|
+
RhoPi 4, r9, _a, r8, _o ; _ga, _bo 5 < 3
|
|
453
|
+
RhoPi 5, r8, _o, r11, _o ; _bo, _mo 3 < 18
|
|
454
|
+
RhoPi 7, r11, _o, r11, _i ; _mo, _mi 18 < 17
|
|
455
|
+
RhoPi 2, r11, _i, r10, _e ; _mi, _ke 17 < 11
|
|
456
|
+
RhoPi 6, r10, _e, r9, _i ; _ke, _gi 11 < 7
|
|
457
|
+
RhoPi 3, r9, _i, r10, _a ; _gi, _ka 7 < 10
|
|
458
|
+
RhoPi 1, r10, _a, r3, 0 ; _ka, _be 10 < 1
|
|
459
|
+
|
|
460
|
+
; Chi
|
|
461
|
+
Chi r8, r6, _B
|
|
462
|
+
Chi r9, r6, _G
|
|
463
|
+
Chi r10, r6, _K
|
|
464
|
+
Chi r11, r6, _M
|
|
465
|
+
Chi r12, r7, 0
|
|
466
|
+
|
|
467
|
+
; Iota
|
|
468
|
+
eor r8, r8, #0x80
|
|
469
|
+
|
|
470
|
+
; Done
|
|
471
|
+
bx lr
|
|
472
|
+
ENDP
|
|
473
|
+
|
|
474
|
+
END
|
|
475
|
+
|