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.
Files changed (296) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +27 -0
  3. data/README.md +48 -53
  4. data/ext/Rakefile +12 -37
  5. data/ext/binding/sleeping_kangaroo12.c +1 -16
  6. data/ext/{xkcp → k12}/Makefile +0 -0
  7. data/ext/k12/Makefile.build +118 -0
  8. data/ext/k12/README.markdown +86 -0
  9. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-ARMv8Asha3.S +623 -0
  10. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-SnP.h +65 -0
  11. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-opt64.c +227 -0
  12. data/ext/{xkcp/lib/low/KeccakP-1600/compact → k12/lib/Inplace32BI}/KeccakP-1600-SnP.h +4 -9
  13. data/ext/{xkcp/lib/low/KeccakP-1600/plain-32bits-inplace → k12/lib/Inplace32BI}/KeccakP-1600-inplace32BI.c +65 -160
  14. data/ext/k12/lib/KangarooTwelve.c +332 -0
  15. data/ext/{xkcp/lib/high/KangarooTwelve → k12/lib}/KangarooTwelve.h +53 -16
  16. data/ext/{xkcp/lib/low/KeccakP-1600/AVX2 → k12/lib/Optimized64}/KeccakP-1600-AVX2.s +122 -558
  17. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512-plainC.c +241 -0
  18. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512.s +551 -0
  19. data/ext/k12/lib/Optimized64/KeccakP-1600-SnP.h +74 -0
  20. data/ext/{xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros → k12/lib/Optimized64/KeccakP-1600-opt64.c} +447 -169
  21. data/ext/k12/lib/Optimized64/KeccakP-1600-runtimeDispatch.c +406 -0
  22. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX2.c +419 -0
  23. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX512.c +458 -0
  24. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-SSSE3.c +438 -0
  25. data/ext/{xkcp/lib/low/KeccakP-1600/plain-64bits → k12/lib/Plain64}/KeccakP-1600-SnP.h +14 -20
  26. data/ext/{xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h → k12/lib/Plain64/KeccakP-1600-plain64.c} +9 -8
  27. data/ext/{xkcp/lib/common → k12/lib}/align.h +3 -2
  28. data/ext/{xkcp/lib/common → k12/lib}/brg_endian.h +0 -0
  29. data/ext/{xkcp → k12}/support/Build/ExpandProducts.xsl +0 -0
  30. data/ext/{xkcp → k12}/support/Build/ToGlobalMakefile.xsl +0 -0
  31. data/ext/{xkcp → k12}/support/Build/ToOneTarget.xsl +0 -0
  32. data/ext/{xkcp → k12}/support/Build/ToTargetConfigFile.xsl +0 -0
  33. data/ext/{xkcp → k12}/support/Build/ToTargetMakefile.xsl +10 -16
  34. data/ext/{xkcp → k12}/support/Build/ToVCXProj.xsl +0 -0
  35. data/lib/sleeping_kangaroo12/binding.rb +2 -1
  36. data/lib/sleeping_kangaroo12/build/loader.rb +1 -0
  37. data/lib/sleeping_kangaroo12/build/platform.rb +1 -0
  38. data/lib/sleeping_kangaroo12/digest.rb +38 -4
  39. data/lib/sleeping_kangaroo12/version.rb +1 -1
  40. metadata +48 -288
  41. data/ext/config/xkcp.build +0 -17
  42. data/ext/xkcp/LICENSE +0 -1
  43. data/ext/xkcp/Makefile.build +0 -200
  44. data/ext/xkcp/README.markdown +0 -296
  45. data/ext/xkcp/lib/HighLevel.build +0 -143
  46. data/ext/xkcp/lib/LowLevel.build +0 -757
  47. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +0 -301
  48. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +0 -81
  49. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +0 -125
  50. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +0 -48
  51. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +0 -79
  52. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +0 -81
  53. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +0 -73
  54. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +0 -195
  55. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +0 -111
  56. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +0 -76
  57. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +0 -314
  58. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +0 -61
  59. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +0 -67
  60. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +0 -128
  61. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +0 -93
  62. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +0 -599
  63. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +0 -573
  64. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +0 -87
  65. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +0 -88
  66. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +0 -274
  67. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +0 -132
  68. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +0 -217
  69. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +0 -81
  70. data/ext/xkcp/lib/high/Keyak/Motorist.inc +0 -953
  71. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +0 -533
  72. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +0 -115
  73. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +0 -557
  74. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +0 -247
  75. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +0 -66
  76. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +0 -336
  77. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +0 -26
  78. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +0 -55
  79. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +0 -35
  80. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +0 -634
  81. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +0 -147
  82. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +0 -483
  83. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +0 -241
  84. data/ext/xkcp/lib/high/common/Phases.h +0 -25
  85. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +0 -41
  86. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +0 -1666
  87. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +0 -1655
  88. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +0 -1268
  89. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +0 -1264
  90. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +0 -1178
  91. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +0 -1175
  92. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +0 -1338
  93. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +0 -1336
  94. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +0 -1343
  95. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +0 -1339
  96. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +0 -42
  97. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +0 -823
  98. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +0 -831
  99. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +0 -31
  100. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +0 -540
  101. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +0 -42
  102. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +0 -733
  103. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +0 -1121
  104. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +0 -52
  105. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +0 -623
  106. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +0 -47
  107. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +0 -6
  108. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +0 -6
  109. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +0 -6
  110. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +0 -1031
  111. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +0 -53
  112. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +0 -44
  113. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +0 -476
  114. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +0 -6
  115. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +0 -6
  116. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +0 -305
  117. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +0 -420
  118. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +0 -43
  119. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +0 -565
  120. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +0 -7
  121. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +0 -7
  122. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +0 -8
  123. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +0 -6
  124. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +0 -6
  125. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +0 -44
  126. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +0 -23
  127. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +0 -625
  128. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +0 -44
  129. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +0 -440
  130. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +0 -42
  131. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +0 -1196
  132. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +0 -1124
  133. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +0 -1196
  134. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +0 -1392
  135. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +0 -1394
  136. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +0 -42
  137. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +0 -7
  138. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +0 -7
  139. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +0 -7
  140. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +0 -850
  141. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +0 -51
  142. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +0 -957
  143. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +0 -49
  144. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +0 -8
  145. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +0 -8
  146. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +0 -9
  147. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +0 -9
  148. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +0 -45
  149. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +0 -37
  150. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +0 -1321
  151. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +0 -55
  152. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +0 -7
  153. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +0 -7
  154. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +0 -7
  155. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +0 -7
  156. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +0 -7
  157. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +0 -7
  158. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +0 -881
  159. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +0 -51
  160. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +0 -45
  161. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +0 -37
  162. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +0 -45
  163. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +0 -38
  164. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +0 -1615
  165. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +0 -57
  166. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +0 -7
  167. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +0 -7
  168. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +0 -7
  169. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +0 -45
  170. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +0 -37
  171. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +0 -45
  172. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +0 -38
  173. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +0 -45
  174. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +0 -38
  175. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +0 -41
  176. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +0 -442
  177. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +0 -446
  178. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +0 -419
  179. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +0 -427
  180. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +0 -41
  181. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +0 -647
  182. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +0 -39
  183. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +0 -190
  184. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +0 -43
  185. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +0 -412
  186. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +0 -23
  187. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +0 -41
  188. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +0 -454
  189. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +0 -458
  190. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +0 -455
  191. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +0 -458
  192. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +0 -41
  193. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +0 -728
  194. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +0 -43
  195. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +0 -414
  196. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +0 -23
  197. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +0 -42
  198. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +0 -527
  199. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +0 -533
  200. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +0 -528
  201. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +0 -534
  202. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +0 -521
  203. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +0 -527
  204. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +0 -517
  205. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +0 -523
  206. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +0 -550
  207. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +0 -556
  208. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +0 -32
  209. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +0 -432
  210. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +0 -42
  211. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +0 -929
  212. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +0 -40
  213. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +0 -244
  214. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +0 -46
  215. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +0 -184
  216. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +0 -454
  217. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +0 -459
  218. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +0 -83
  219. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +0 -88
  220. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +0 -7
  221. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +0 -7
  222. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +0 -7
  223. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +0 -7
  224. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +0 -44
  225. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +0 -437
  226. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +0 -23
  227. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +0 -57
  228. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +0 -475
  229. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +0 -480
  230. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +0 -590
  231. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +0 -590
  232. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +0 -126
  233. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +0 -68
  234. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +0 -174
  235. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +0 -80
  236. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +0 -68
  237. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +0 -142
  238. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +0 -55
  239. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +0 -1086
  240. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +0 -1092
  241. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +0 -721
  242. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +0 -726
  243. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +0 -723
  244. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +0 -729
  245. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +0 -1164
  246. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +0 -1165
  247. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +0 -562
  248. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +0 -563
  249. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +0 -563
  250. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +0 -565
  251. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +0 -55
  252. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +0 -476
  253. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +0 -485
  254. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +0 -362
  255. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +0 -367
  256. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +0 -43
  257. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +0 -1341
  258. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +0 -581
  259. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +0 -58
  260. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +0 -332
  261. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +0 -329
  262. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +0 -53
  263. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +0 -355
  264. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +0 -79
  265. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +0 -56
  266. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +0 -399
  267. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +0 -127
  268. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +0 -43
  269. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +0 -253
  270. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +0 -1044
  271. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +0 -49
  272. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +0 -45
  273. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +0 -37
  274. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +0 -1587
  275. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +0 -48
  276. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +0 -1202
  277. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +0 -48
  278. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +0 -484
  279. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +0 -44
  280. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +0 -45
  281. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +0 -37
  282. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +0 -939
  283. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +0 -49
  284. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +0 -1216
  285. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +0 -48
  286. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +0 -45
  287. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +0 -37
  288. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +0 -290
  289. data/ext/xkcp/lib/low/common/SnP-Relaned.h +0 -141
  290. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +0 -133
  291. data/ext/xkcp/support/Kernel-PMU/Makefile +0 -8
  292. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +0 -129
  293. data/ext/xkcp/support/Kernel-PMU/load-module +0 -1
  294. data/ext/xkcp/util/KeccakSum/KeccakSum.c +0 -394
  295. data/ext/xkcp/util/KeccakSum/base64.c +0 -86
  296. data/ext/xkcp/util/KeccakSum/base64.h +0 -12
@@ -0,0 +1,623 @@
1
+ # K12 based on the eXtended Keccak Code Package (XKCP)
2
+ # https://github.com/XKCP/XKCP
3
+ #
4
+ # The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
5
+ #
6
+ # Implementation by Gilles Van Assche, hereby denoted as "the implementer".
7
+ # Core subroutine is based on one by Andy Polyakov, available
8
+ # at https://github.com/dot-asm/cryptogams. Used with permission.
9
+ #
10
+ # For more information, feedback or questions, please refer to the Keccak Team website:
11
+ # https://keccak.team/
12
+ #
13
+ # To the extent possible under law, the implementer has waived all copyright
14
+ # and related or neighboring rights to the source code in this file.
15
+ # http://creativecommons.org/publicdomain/zero/1.0/
16
+
17
+ .text
18
+
19
+ .balign 64 // strategic alignment and padding that allows to use
20
+ // address value as loop termination condition...
21
+ .quad 0,0,0,0,0,0,0,0
22
+ .ifdef macOS
23
+ .else
24
+ .type iotas,%object
25
+ .endif
26
+ iotas:
27
+ .quad 0x0000000000000001
28
+ .quad 0x0000000000008082
29
+ .quad 0x800000000000808a
30
+ .quad 0x8000000080008000
31
+ .quad 0x000000000000808b
32
+ .quad 0x0000000080000001
33
+ .quad 0x8000000080008081
34
+ .quad 0x8000000000008009
35
+ .quad 0x000000000000008a
36
+ .quad 0x0000000000000088
37
+ .quad 0x0000000080008009
38
+ .quad 0x000000008000000a
39
+ iotas12:
40
+ .quad 0x000000008000808b
41
+ .quad 0x800000000000008b
42
+ .quad 0x8000000000008089
43
+ .quad 0x8000000000008003
44
+ .quad 0x8000000000008002
45
+ .quad 0x8000000000000080
46
+ .quad 0x000000000000800a
47
+ .quad 0x800000008000000a
48
+ .quad 0x8000000080008081
49
+ .quad 0x8000000000008080
50
+ .quad 0x0000000080000001
51
+ .quad 0x8000000080008008
52
+ .ifdef macOS
53
+ .else
54
+ .size iotas,.-iotas
55
+ .endif
56
+
57
+ .ifdef macOS
58
+ .else
59
+ .type KeccakP1600_ARMv8Asha3_Permute_12rounds_internal,%function
60
+ .endif
61
+ KeccakP1600_ARMv8Asha3_Permute_12rounds_internal:
62
+ .balign 32
63
+ mov x9,#12
64
+ adr x10,iotas12
65
+ b .Loop_ce
66
+ .balign 16
67
+ .Loop_ce:
68
+ ////////////////////////////////////////////////// Theta
69
+ eor3 v25.16b,v20.16b,v15.16b,v10.16b
70
+ eor3 v26.16b,v21.16b,v16.16b,v11.16b
71
+ eor3 v27.16b,v22.16b,v17.16b,v12.16b
72
+ eor3 v28.16b,v23.16b,v18.16b,v13.16b
73
+ eor3 v29.16b,v24.16b,v19.16b,v14.16b
74
+ eor3 v25.16b,v25.16b, v5.16b,v0.16b
75
+ eor3 v26.16b,v26.16b, v6.16b,v1.16b
76
+ eor3 v27.16b,v27.16b, v7.16b,v2.16b
77
+ eor3 v28.16b,v28.16b, v8.16b,v3.16b
78
+ eor3 v29.16b,v29.16b, v9.16b,v4.16b
79
+
80
+ rax1 v30.2d,v25.2d,v27.2d // D[1]
81
+ rax1 v31.2d,v26.2d,v28.2d // D[2]
82
+ rax1 v27.2d,v27.2d,v29.2d // D[3]
83
+ rax1 v28.2d,v28.2d,v25.2d // D[4]
84
+ rax1 v29.2d,v29.2d,v26.2d // D[0]
85
+
86
+ ////////////////////////////////////////////////// Theta+Rho+Pi
87
+ xar v25.2d, v1.2d,v30.2d,#64-1 // C[0]=A[2][0]
88
+
89
+ xar v1.2d,v6.2d,v30.2d,#64-44
90
+ xar v6.2d,v9.2d,v28.2d,#64-20
91
+ xar v9.2d,v22.2d,v31.2d,#64-61
92
+ xar v22.2d,v14.2d,v28.2d,#64-39
93
+ xar v14.2d,v20.2d,v29.2d,#64-18
94
+
95
+ xar v26.2d, v2.2d,v31.2d,#64-62 // C[1]=A[4][0]
96
+
97
+ xar v2.2d,v12.2d,v31.2d,#64-43
98
+ xar v12.2d,v13.2d,v27.2d,#64-25
99
+ xar v13.2d,v19.2d,v28.2d,#64-8
100
+ xar v19.2d,v23.2d,v27.2d,#64-56
101
+ xar v23.2d,v15.2d,v29.2d,#64-41
102
+
103
+ xar v15.2d,v4.2d,v28.2d,#64-27
104
+
105
+ xar v28.2d, v24.2d,v28.2d,#64-14 // D[4]=A[0][4]
106
+ xar v24.2d,v21.2d,v30.2d,#64-2
107
+ xar v8.2d,v8.2d,v27.2d,#64-55 // A[1][3]=A[4][1]
108
+ xar v4.2d,v16.2d,v30.2d,#64-45 // A[0][4]=A[1][3]
109
+ xar v16.2d,v5.2d,v29.2d,#64-36
110
+
111
+ xar v5.2d,v3.2d,v27.2d,#64-28
112
+
113
+ eor v0.16b,v0.16b,v29.16b
114
+
115
+ xar v27.2d, v18.2d,v27.2d,#64-21 // D[3]=A[0][3]
116
+ xar v3.2d,v17.2d,v31.2d,#64-15 // A[0][3]=A[3][3]
117
+ xar v30.2d, v11.2d,v30.2d,#64-10 // D[1]=A[3][2]
118
+ xar v31.2d, v7.2d,v31.2d,#64-6 // D[2]=A[2][1]
119
+ xar v29.2d, v10.2d,v29.2d,#64-3 // D[0]=A[1][2]
120
+
121
+ ////////////////////////////////////////////////// Chi+Iota
122
+ bcax v20.16b,v26.16b, v22.16b,v8.16b // A[1][3]=A[4][1]
123
+ bcax v21.16b,v8.16b,v23.16b,v22.16b // A[1][3]=A[4][1]
124
+ bcax v22.16b,v22.16b,v24.16b,v23.16b
125
+ bcax v23.16b,v23.16b,v26.16b, v24.16b
126
+ bcax v24.16b,v24.16b,v8.16b,v26.16b // A[1][3]=A[4][1]
127
+
128
+ ld1r {v26.2d},[x10],#8
129
+
130
+ bcax v17.16b,v30.16b, v19.16b,v3.16b // A[0][3]=A[3][3]
131
+ bcax v18.16b,v3.16b,v15.16b,v19.16b // A[0][3]=A[3][3]
132
+ bcax v19.16b,v19.16b,v16.16b,v15.16b
133
+ bcax v15.16b,v15.16b,v30.16b, v16.16b
134
+ bcax v16.16b,v16.16b,v3.16b,v30.16b // A[0][3]=A[3][3]
135
+
136
+ bcax v10.16b,v25.16b, v12.16b,v31.16b
137
+ bcax v11.16b,v31.16b, v13.16b,v12.16b
138
+ bcax v12.16b,v12.16b,v14.16b,v13.16b
139
+ bcax v13.16b,v13.16b,v25.16b, v14.16b
140
+ bcax v14.16b,v14.16b,v31.16b, v25.16b
141
+
142
+ bcax v7.16b,v29.16b, v9.16b,v4.16b // A[0][4]=A[1][3]
143
+ bcax v8.16b,v4.16b,v5.16b,v9.16b // A[0][4]=A[1][3]
144
+ bcax v9.16b,v9.16b,v6.16b,v5.16b
145
+ bcax v5.16b,v5.16b,v29.16b, v6.16b
146
+ bcax v6.16b,v6.16b,v4.16b,v29.16b // A[0][4]=A[1][3]
147
+
148
+ bcax v3.16b,v27.16b, v0.16b,v28.16b
149
+ bcax v4.16b,v28.16b, v1.16b,v0.16b
150
+ bcax v0.16b,v0.16b,v2.16b,v1.16b
151
+ bcax v1.16b,v1.16b,v27.16b, v2.16b
152
+ bcax v2.16b,v2.16b,v28.16b, v27.16b
153
+
154
+ eor v0.16b,v0.16b,v26.16b
155
+
156
+ subs x9,x9,#1
157
+ bne .Loop_ce
158
+
159
+ ret
160
+ .ifdef macOS
161
+ .else
162
+ .size KeccakP1600_ARMv8Asha3_Permute_12rounds_internal,.-KeccakP1600_ARMv8Asha3_Permute_12rounds_internal
163
+ .endif
164
+
165
+ .ifdef macOS
166
+ .globl _KeccakP1600_ARMv8Asha3_Permute_12rounds
167
+ _KeccakP1600_ARMv8Asha3_Permute_12rounds:
168
+ .else
169
+ .globl KeccakP1600_ARMv8Asha3_Permute_12rounds
170
+ .type KeccakP1600_ARMv8Asha3_Permute_12rounds,%function
171
+ KeccakP1600_ARMv8Asha3_Permute_12rounds:
172
+ .endif
173
+ .balign 32
174
+ stp x29,x30,[sp,#-80]!
175
+ add x29,sp,#0
176
+ stp d8,d9,[sp,#16] // per ABI requirement
177
+ stp d10,d11,[sp,#32]
178
+ stp d12,d13,[sp,#48]
179
+ stp d14,d15,[sp,#64]
180
+ ldp d0,d1,[x0,#8*0]
181
+ ldp d2,d3,[x0,#8*2]
182
+ ldp d4,d5,[x0,#8*4]
183
+ ldp d6,d7,[x0,#8*6]
184
+ ldp d8,d9,[x0,#8*8]
185
+ ldp d10,d11,[x0,#8*10]
186
+ ldp d12,d13,[x0,#8*12]
187
+ ldp d14,d15,[x0,#8*14]
188
+ ldp d16,d17,[x0,#8*16]
189
+ ldp d18,d19,[x0,#8*18]
190
+ ldp d20,d21,[x0,#8*20]
191
+ ldp d22,d23,[x0,#8*22]
192
+ ldr d24,[x0,#8*24]
193
+ bl KeccakP1600_ARMv8Asha3_Permute_12rounds_internal
194
+ ldr x30,[sp,#8]
195
+ stp d0,d1,[x0,#8*0]
196
+ stp d2,d3,[x0,#8*2]
197
+ stp d4,d5,[x0,#8*4]
198
+ stp d6,d7,[x0,#8*6]
199
+ stp d8,d9,[x0,#8*8]
200
+ stp d10,d11,[x0,#8*10]
201
+ stp d12,d13,[x0,#8*12]
202
+ stp d14,d15,[x0,#8*14]
203
+ stp d16,d17,[x0,#8*16]
204
+ stp d18,d19,[x0,#8*18]
205
+ stp d20,d21,[x0,#8*20]
206
+ stp d22,d23,[x0,#8*22]
207
+ str d24,[x0,#8*24]
208
+
209
+ ldp d8,d9,[sp,#16]
210
+ ldp d10,d11,[sp,#32]
211
+ ldp d12,d13,[sp,#48]
212
+ ldp d14,d15,[sp,#64]
213
+ ldr x29,[sp],#80
214
+ ret
215
+ .ifdef macOS
216
+ .else
217
+ .size KeccakP1600_ARMv8Asha3_Permute_12rounds,.-KeccakP1600_ARMv8Asha3_Permute_12rounds
218
+ .endif
219
+
220
+ // size_t KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb(
221
+ // void *state(x0),
222
+ // unsigned int laneCount(x1) = 21,
223
+ // const unsigned char *data(x2),
224
+ // size_t dataByteLen(x3))
225
+ .ifdef macOS
226
+ .globl _KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb
227
+ _KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb:
228
+ .else
229
+ .globl KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb
230
+ .type KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb,%function
231
+ KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb:
232
+ .endif
233
+ .balign 32
234
+ stp x29,x30,[sp,#-80]!
235
+ add x29,sp,#0
236
+ stp d8,d9,[sp,#16] // per ABI requirement
237
+ stp d10,d11,[sp,#32]
238
+ stp d12,d13,[sp,#48]
239
+ stp d14,d15,[sp,#64]
240
+
241
+ ldp d0,d1,[x0,#8*0]
242
+ ldp d2,d3,[x0,#8*2]
243
+ ldp d4,d5,[x0,#8*4]
244
+ ldp d6,d7,[x0,#8*6]
245
+ ldp d8,d9,[x0,#8*8]
246
+ ldp d10,d11,[x0,#8*10]
247
+ ldp d12,d13,[x0,#8*12]
248
+ ldp d14,d15,[x0,#8*14]
249
+ ldp d16,d17,[x0,#8*16]
250
+ ldp d18,d19,[x0,#8*18]
251
+ ldp d20,d21,[x0,#8*20]
252
+ ldp d22,d23,[x0,#8*22]
253
+ ldr d24,[x0,#8*24]
254
+
255
+ // Prepare the return value
256
+ mov x11, #0
257
+ b .KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb_loop
258
+
259
+ .balign 16
260
+ .KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb_loop:
261
+ subs x3, x3, #8*21
262
+ b.cc .KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb_end
263
+
264
+ // Lanes 0-3
265
+ ld1 {v27.8b-v30.8b}, [x2], #32
266
+ eor v0.16b, v0.16b, v27.16b
267
+ eor v1.16b, v1.16b, v28.16b
268
+ eor v2.16b, v2.16b, v29.16b
269
+ eor v3.16b, v3.16b, v30.16b
270
+
271
+ // Lanes 4-7
272
+ ld1 {v27.8b-v30.8b}, [x2], #32
273
+ eor v4.16b, v4.16b, v27.16b
274
+ eor v5.16b, v5.16b, v28.16b
275
+ eor v6.16b, v6.16b, v29.16b
276
+ eor v7.16b, v7.16b, v30.16b
277
+
278
+ // Lanes 8-11
279
+ ld1 {v27.8b-v30.8b}, [x2], #32
280
+ eor v8.16b, v8.16b, v27.16b
281
+ eor v9.16b, v9.16b, v28.16b
282
+ eor v10.16b, v10.16b, v29.16b
283
+ eor v11.16b, v11.16b, v30.16b
284
+
285
+ // Lanes 12-15
286
+ ld1 {v27.8b-v30.8b}, [x2], #32
287
+ eor v12.16b, v12.16b, v27.16b
288
+ eor v13.16b, v13.16b, v28.16b
289
+ eor v14.16b, v14.16b, v29.16b
290
+ eor v15.16b, v15.16b, v30.16b
291
+
292
+ // Lanes 16-20
293
+ ld1 {v27.8b-v30.8b}, [x2], #32
294
+ eor v16.16b, v16.16b, v27.16b
295
+ eor v17.16b, v17.16b, v28.16b
296
+ eor v18.16b, v18.16b, v29.16b
297
+ eor v19.16b, v19.16b, v30.16b
298
+ ld1 {v27.8b}, [x2], #8
299
+ eor v20.16b, v20.16b, v27.16b
300
+
301
+ bl KeccakP1600_ARMv8Asha3_Permute_12rounds_internal
302
+
303
+ add x11, x11, #8*21
304
+
305
+ b .KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb_loop
306
+ .KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb_end:
307
+
308
+ stp d0,d1,[x0,#8*0]
309
+ stp d2,d3,[x0,#8*2]
310
+ stp d4,d5,[x0,#8*4]
311
+ stp d6,d7,[x0,#8*6]
312
+ stp d8,d9,[x0,#8*8]
313
+ stp d10,d11,[x0,#8*10]
314
+ stp d12,d13,[x0,#8*12]
315
+ stp d14,d15,[x0,#8*14]
316
+ stp d16,d17,[x0,#8*16]
317
+ stp d18,d19,[x0,#8*18]
318
+ stp d20,d21,[x0,#8*20]
319
+ stp d22,d23,[x0,#8*22]
320
+ str d24,[x0,#8*24]
321
+
322
+ mov x0, x11
323
+
324
+ ldr x30,[sp,#8]
325
+ ldp d8,d9,[sp,#16]
326
+ ldp d10,d11,[sp,#32]
327
+ ldp d12,d13,[sp,#48]
328
+ ldp d14,d15,[sp,#64]
329
+ ldr x29,[sp],#80
330
+
331
+ ret
332
+ .ifdef macOS
333
+ .else
334
+ .size KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb,.-KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb
335
+ .endif
336
+
337
+ .ifdef macOS
338
+ .globl _KeccakP1600times2_ARMv8Asha3_Permute_12rounds
339
+ _KeccakP1600times2_ARMv8Asha3_Permute_12rounds:
340
+ .else
341
+ .globl KeccakP1600times2_ARMv8Asha3_Permute_12rounds
342
+ .type KeccakP1600times2_ARMv8Asha3_Permute_12rounds,%function
343
+ KeccakP1600times2_ARMv8Asha3_Permute_12rounds:
344
+ .endif
345
+ .balign 32
346
+ stp x29,x30,[sp,#-80]!
347
+ add x29,sp,#0
348
+ stp d8,d9,[sp,#16] // per ABI requirement
349
+ stp d10,d11,[sp,#32]
350
+ stp d12,d13,[sp,#48]
351
+ stp d14,d15,[sp,#64]
352
+
353
+ ld1 { v0.2d, v1.2d, v2.2d, v3.2d}, [x0], #64
354
+ ld1 { v4.2d, v5.2d, v6.2d, v7.2d}, [x0], #64
355
+ ld1 { v8.2d, v9.2d, v10.2d, v11.2d}, [x0], #64
356
+ ld1 {v12.2d, v13.2d, v14.2d, v15.2d}, [x0], #64
357
+ ld1 {v16.2d, v17.2d, v18.2d, v19.2d}, [x0], #64
358
+ ld1 {v20.2d, v21.2d, v22.2d, v23.2d}, [x0], #64
359
+ ld1 {v24.2d}, [x0]
360
+ sub x0, x0, #64*6
361
+
362
+ bl KeccakP1600_ARMv8Asha3_Permute_12rounds_internal
363
+
364
+ ldr x30,[sp,#8]
365
+ st1 { v0.2d, v1.2d, v2.2d, v3.2d}, [x0], #64
366
+ st1 { v4.2d, v5.2d, v6.2d, v7.2d}, [x0], #64
367
+ st1 { v8.2d, v9.2d, v10.2d, v11.2d}, [x0], #64
368
+ st1 {v12.2d, v13.2d, v14.2d, v15.2d}, [x0], #64
369
+ st1 {v16.2d, v17.2d, v18.2d, v19.2d}, [x0], #64
370
+ st1 {v20.2d, v21.2d, v22.2d, v23.2d}, [x0], #64
371
+ st1 {v24.2d}, [x0]
372
+
373
+ ldp d8,d9,[sp,#16]
374
+ ldp d10,d11,[sp,#32]
375
+ ldp d12,d13,[sp,#48]
376
+ ldp d14,d15,[sp,#64]
377
+ ldr x29,[sp],#80
378
+
379
+ ret
380
+ .ifdef macOS
381
+ .else
382
+ .size KeccakP1600times2_ARMv8Asha3_Permute_12rounds,.-KeccakP1600times2_ARMv8Asha3_Permute_12rounds
383
+ .endif
384
+
385
+ .ifdef macOS
386
+ .globl _KangarooTwelve_ARMv8Asha3_Process2Leaves
387
+ _KangarooTwelve_ARMv8Asha3_Process2Leaves:
388
+ .else
389
+ .globl KangarooTwelve_ARMv8Asha3_Process2Leaves
390
+ .type KangarooTwelve_ARMv8Asha3_Process2Leaves,%function
391
+ KangarooTwelve_ARMv8Asha3_Process2Leaves:
392
+ .endif
393
+ .balign 32
394
+ stp x29,x30,[sp,#-80]!
395
+ add x29,sp,#0
396
+ stp d8,d9,[sp,#16] // per ABI requirement
397
+ stp d10,d11,[sp,#32]
398
+ stp d12,d13,[sp,#48]
399
+ stp d14,d15,[sp,#64]
400
+
401
+ movi v0.2d, #0
402
+ movi v1.2d, #0
403
+ movi v2.2d, #0
404
+ movi v3.2d, #0
405
+ movi v4.2d, #0
406
+ movi v5.2d, #0
407
+ movi v6.2d, #0
408
+ movi v7.2d, #0
409
+ movi v8.2d, #0
410
+ movi v9.2d, #0
411
+ movi v10.2d, #0
412
+ movi v11.2d, #0
413
+ movi v12.2d, #0
414
+ movi v13.2d, #0
415
+ movi v14.2d, #0
416
+ movi v15.2d, #0
417
+ movi v16.2d, #0
418
+ movi v17.2d, #0
419
+ movi v18.2d, #0
420
+ movi v19.2d, #0
421
+ movi v20.2d, #0
422
+ movi v21.2d, #0
423
+ movi v22.2d, #0
424
+ movi v23.2d, #0
425
+ movi v24.2d, #0
426
+
427
+ // x12 is input + chunkSize
428
+ add x12, x0, #8192
429
+
430
+ // Loop over the first 48 blocks
431
+ mov x11, 48
432
+ b .KangarooTwelve_ARMv8Asha3_Process2Leaves_blocks
433
+ .KangarooTwelve_ARMv8Asha3_Process2Leaves_blocks:
434
+
435
+ // Lanes 0-3
436
+ ld1 {v25.1d-v28.1d}, [x0], #32
437
+ ld1 {v25.d}[1], [x12], #8
438
+ ld1 {v26.d}[1], [x12], #8
439
+ ld1 {v27.d}[1], [x12], #8
440
+ ld1 {v28.d}[1], [x12], #8
441
+ #ifdef __AARCH64EB__
442
+ rev64 v25.16b, v25.16b
443
+ rev64 v26.16b, v26.16b
444
+ rev64 v27.16b, v27.16b
445
+ rev64 v28.16b, v28.16b
446
+ #endif
447
+ eor v0.16b, v0.16b, v25.16b
448
+ eor v1.16b, v1.16b, v26.16b
449
+ eor v2.16b, v2.16b, v27.16b
450
+ eor v3.16b, v3.16b, v28.16b
451
+
452
+ // Lanes 4-7
453
+ ld1 {v25.1d-v28.1d}, [x0], #32
454
+ ld1 {v25.d}[1], [x12], #8
455
+ ld1 {v26.d}[1], [x12], #8
456
+ ld1 {v27.d}[1], [x12], #8
457
+ ld1 {v28.d}[1], [x12], #8
458
+ #ifdef __AARCH64EB__
459
+ rev64 v25.16b, v25.16b
460
+ rev64 v26.16b, v26.16b
461
+ rev64 v27.16b, v27.16b
462
+ rev64 v28.16b, v28.16b
463
+ #endif
464
+ eor v4.16b, v4.16b, v25.16b
465
+ eor v5.16b, v5.16b, v26.16b
466
+ eor v6.16b, v6.16b, v27.16b
467
+ eor v7.16b, v7.16b, v28.16b
468
+
469
+ // Lanes 8-11
470
+ ld1 {v25.1d-v28.1d}, [x0], #32
471
+ ld1 {v25.d}[1], [x12], #8
472
+ ld1 {v26.d}[1], [x12], #8
473
+ ld1 {v27.d}[1], [x12], #8
474
+ ld1 {v28.d}[1], [x12], #8
475
+ #ifdef __AARCH64EB__
476
+ rev64 v25.16b, v25.16b
477
+ rev64 v26.16b, v26.16b
478
+ rev64 v27.16b, v27.16b
479
+ rev64 v28.16b, v28.16b
480
+ #endif
481
+ eor v8.16b, v8.16b, v25.16b
482
+ eor v9.16b, v9.16b, v26.16b
483
+ eor v10.16b, v10.16b, v27.16b
484
+ eor v11.16b, v11.16b, v28.16b
485
+
486
+ // Lanes 12-15
487
+ ld1 {v25.1d-v28.1d}, [x0], #32
488
+ ld1 {v25.d}[1], [x12], #8
489
+ ld1 {v26.d}[1], [x12], #8
490
+ ld1 {v27.d}[1], [x12], #8
491
+ ld1 {v28.d}[1], [x12], #8
492
+ #ifdef __AARCH64EB__
493
+ rev64 v25.16b, v25.16b
494
+ rev64 v26.16b, v26.16b
495
+ rev64 v27.16b, v27.16b
496
+ rev64 v28.16b, v28.16b
497
+ #endif
498
+ eor v12.16b, v12.16b, v25.16b
499
+ eor v13.16b, v13.16b, v26.16b
500
+ eor v14.16b, v14.16b, v27.16b
501
+ eor v15.16b, v15.16b, v28.16b
502
+
503
+ // Lanes 16-20
504
+ ld1 {v25.1d-v28.1d}, [x0], #32
505
+ ld1 {v25.d}[1], [x12], #8
506
+ ld1 {v26.d}[1], [x12], #8
507
+ ld1 {v27.d}[1], [x12], #8
508
+ ld1 {v28.d}[1], [x12], #8
509
+ ld1 {v29.d}[0], [x0], #8
510
+ ld1 {v29.d}[1], [x12], #8
511
+ #ifdef __AARCH64EB__
512
+ rev64 v25.16b, v25.16b
513
+ rev64 v26.16b, v26.16b
514
+ rev64 v27.16b, v27.16b
515
+ rev64 v28.16b, v28.16b
516
+ rev64 v29.16b, v29.16b
517
+ #endif
518
+ eor v16.16b, v16.16b, v25.16b
519
+ eor v17.16b, v17.16b, v26.16b
520
+ eor v18.16b, v18.16b, v27.16b
521
+ eor v19.16b, v19.16b, v28.16b
522
+ eor v20.16b, v20.16b, v29.16b
523
+
524
+ bl KeccakP1600_ARMv8Asha3_Permute_12rounds_internal
525
+
526
+ subs x11, x11, #1
527
+ bne .KangarooTwelve_ARMv8Asha3_Process2Leaves_blocks
528
+
529
+ // Lanes 0-3
530
+ ld1 {v25.1d-v28.1d}, [x0], #32
531
+ ld1 {v25.d}[1], [x12], #8
532
+ ld1 {v26.d}[1], [x12], #8
533
+ ld1 {v27.d}[1], [x12], #8
534
+ ld1 {v28.d}[1], [x12], #8
535
+ #ifdef __AARCH64EB__
536
+ rev64 v25.16b, v25.16b
537
+ rev64 v26.16b, v26.16b
538
+ rev64 v27.16b, v27.16b
539
+ rev64 v28.16b, v28.16b
540
+ #endif
541
+ eor v0.16b, v0.16b, v25.16b
542
+ eor v1.16b, v1.16b, v26.16b
543
+ eor v2.16b, v2.16b, v27.16b
544
+ eor v3.16b, v3.16b, v28.16b
545
+
546
+ // Lanes 4-7
547
+ ld1 {v25.1d-v28.1d}, [x0], #32
548
+ ld1 {v25.d}[1], [x12], #8
549
+ ld1 {v26.d}[1], [x12], #8
550
+ ld1 {v27.d}[1], [x12], #8
551
+ ld1 {v28.d}[1], [x12], #8
552
+ #ifdef __AARCH64EB__
553
+ rev64 v25.16b, v25.16b
554
+ rev64 v26.16b, v26.16b
555
+ rev64 v27.16b, v27.16b
556
+ rev64 v28.16b, v28.16b
557
+ #endif
558
+ eor v4.16b, v4.16b, v25.16b
559
+ eor v5.16b, v5.16b, v26.16b
560
+ eor v6.16b, v6.16b, v27.16b
561
+ eor v7.16b, v7.16b, v28.16b
562
+
563
+ // Lanes 8-11
564
+ ld1 {v25.1d-v28.1d}, [x0], #32
565
+ ld1 {v25.d}[1], [x12], #8
566
+ ld1 {v26.d}[1], [x12], #8
567
+ ld1 {v27.d}[1], [x12], #8
568
+ ld1 {v28.d}[1], [x12], #8
569
+ #ifdef __AARCH64EB__
570
+ rev64 v25.16b, v25.16b
571
+ rev64 v26.16b, v26.16b
572
+ rev64 v27.16b, v27.16b
573
+ rev64 v28.16b, v28.16b
574
+ #endif
575
+ eor v8.16b, v8.16b, v25.16b
576
+ eor v9.16b, v9.16b, v26.16b
577
+ eor v10.16b, v10.16b, v27.16b
578
+ eor v11.16b, v11.16b, v28.16b
579
+
580
+ // Lanes 12-15
581
+ ld1 {v25.1d-v28.1d}, [x0], #32
582
+ ld1 {v25.d}[1], [x12], #8
583
+ ld1 {v26.d}[1], [x12], #8
584
+ ld1 {v27.d}[1], [x12], #8
585
+ ld1 {v28.d}[1], [x12], #8
586
+ #ifdef __AARCH64EB__
587
+ rev64 v25.16b, v25.16b
588
+ rev64 v26.16b, v26.16b
589
+ rev64 v27.16b, v27.16b
590
+ rev64 v28.16b, v28.16b
591
+ #endif
592
+ eor v12.16b, v12.16b, v25.16b
593
+ eor v13.16b, v13.16b, v26.16b
594
+ eor v14.16b, v14.16b, v27.16b
595
+ eor v15.16b, v15.16b, v28.16b
596
+
597
+ mov x13, #0x0B
598
+ dup v25.2d, x13
599
+ mov x13, #0x8000000000000000
600
+ dup v26.2d, x13
601
+ eor v16.16b, v16.16b, v25.16b
602
+ eor v20.16b, v20.16b, v26.16b
603
+
604
+ bl KeccakP1600_ARMv8Asha3_Permute_12rounds_internal
605
+
606
+ st1 {v0.1d-v3.1d}, [x1], #32
607
+ st1 {v0.d}[1], [x1], #8
608
+ st1 {v1.d}[1], [x1], #8
609
+ st1 {v2.d}[1], [x1], #8
610
+ st1 {v3.d}[1], [x1], #8
611
+
612
+ ldr x30,[sp,#8]
613
+ ldp d8,d9,[sp,#16]
614
+ ldp d10,d11,[sp,#32]
615
+ ldp d12,d13,[sp,#48]
616
+ ldp d14,d15,[sp,#64]
617
+ ldr x29,[sp],#80
618
+
619
+ ret
620
+ .ifdef macOS
621
+ .else
622
+ .size KangarooTwelve_ARMv8Asha3_Process2Leaves,.-KangarooTwelve_ARMv8Asha3_Process2Leaves
623
+ .endif
@@ -0,0 +1,65 @@
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
+ #ifndef _KeccakP_1600_SnP_h_
22
+ #define _KeccakP_1600_SnP_h_
23
+
24
+ /* Keccak-p[1600] */
25
+
26
+ #define KeccakP1600_stateSizeInBytes 200
27
+ #define KeccakP1600_stateAlignment 8
28
+ #define KeccakP1600_12rounds_FastLoop_supported
29
+
30
+ const char * KeccakP1600_GetImplementation();
31
+ void KeccakP1600_opt64_Initialize(void *state);
32
+ void KeccakP1600_opt64_AddByte(void *state, unsigned char data, unsigned int offset);
33
+ void KeccakP1600_opt64_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
34
+ void KeccakP1600_ARMv8Asha3_Permute_12rounds(void *state);
35
+ void KeccakP1600_opt64_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
36
+ size_t KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen);
37
+
38
+ #define KeccakP1600_Initialize KeccakP1600_opt64_Initialize
39
+ #define KeccakP1600_AddByte KeccakP1600_opt64_AddByte
40
+ #define KeccakP1600_AddBytes KeccakP1600_opt64_AddBytes
41
+ #define KeccakP1600_Permute_12rounds KeccakP1600_ARMv8Asha3_Permute_12rounds
42
+ #define KeccakP1600_ExtractBytes KeccakP1600_opt64_ExtractBytes
43
+ #define KeccakP1600_12rounds_FastLoop_Absorb KeccakP1600_ARMv8Asha3_12rounds_FastLoop_Absorb
44
+
45
+ /* Keccak-p[1600]×2 */
46
+
47
+ int KeccakP1600times2_IsAvailable();
48
+ const char * KeccakP1600times2_GetImplementation();
49
+ void KeccakP1600times2_ARMv8Asha3_Permute_12rounds(void *state);
50
+ void KangarooTwelve_ARMv8Asha3_Process2Leaves(const unsigned char *input, unsigned char *output);
51
+
52
+ #define KeccakP1600times2_Permute_12rounds KeccakP1600times2_ARMv8Asha3_Permute_12rounds
53
+ #define KangarooTwelve_Process2Leaves KangarooTwelve_ARMv8Asha3_Process2Leaves
54
+
55
+ /* Keccak-p[1600]×4 */
56
+
57
+ int KeccakP1600times4_IsAvailable();
58
+ const char * KeccakP1600times4_GetImplementation();
59
+
60
+ /* Keccak-p[1600]×8 */
61
+
62
+ int KeccakP1600times8_IsAvailable();
63
+ const char * KeccakP1600times8_GetImplementation();
64
+
65
+ #endif