sleeping_kangaroo12 0.0.1 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,1264 +0,0 @@
1
- @
2
- @ The eXtended Keccak Code Package (XKCP)
3
- @ https://github.com/XKCP/XKCP
4
- @
5
- @ The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
- @
7
- @ Implementation by Ronny Van Keer, hereby denoted as "the implementer".
8
- @
9
- @ For more information, feedback or questions, please refer to the Keccak Team website:
10
- @ https://keccak.team/
11
- @
12
- @ To the extent possible under law, the implementer has waived all copyright
13
- @ and related or neighboring rights to the source code in this file.
14
- @ http://creativecommons.org/publicdomain/zero/1.0/
15
- @
16
- @ ---
17
- @
18
- @ This file implements Keccak-p[1600] in a SnP-compatible way.
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.
23
- @
24
-
25
- @ WARNING: This implementation assumes a little endian CPU with ARMv7A architecture (e.g., Cortex-A8) and the GCC compiler.
26
-
27
- @ INFO: Tested on a Cortex-A8 (BeagleBone Black)
28
-
29
-
30
- .text
31
-
32
- @ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
33
- .macro toBitInterleaving x0,x1,s0,s1,t,m55,m33,m0F,mFF, over
34
-
35
- and \t,\x0,\m55
36
- orr \t,\t,\t, LSR #1
37
- and \t,\t,\m33
38
- orr \t,\t,\t, LSR #2
39
- and \t,\t,\m0F
40
- orr \t,\t,\t, LSR #4
41
- and \t,\t,\mFF
42
- bfi \t,\t,#8, #8
43
- .if \over != 0
44
- lsr \s0,\t, #8
45
- .else
46
- eor \s0,\s0,\t, LSR #8
47
- .endif
48
-
49
- and \t,\x1,\m55
50
- orr \t,\t,\t, LSR #1
51
- and \t,\t,\m33
52
- orr \t,\t,\t, LSR #2
53
- and \t,\t,\m0F
54
- orr \t,\t,\t, LSR #4
55
- and \t,\t,\mFF
56
- orr \t,\t,\t, LSR #8
57
- eor \s0,\s0,\t, LSL #16
58
-
59
- and \t,\x0,\m55, LSL #1
60
- orr \t,\t,\t, LSL #1
61
- and \t,\t,\m33, LSL #2
62
- orr \t,\t,\t, LSL #2
63
- and \t,\t,\m0F, LSL #4
64
- orr \t,\t,\t, LSL #4
65
- and \t,\t,\mFF, LSL #8
66
- orr \t,\t,\t, LSL #8
67
- .if \over != 0
68
- lsr \s1,\t, #16
69
- .else
70
- eor \s1,\s1,\t, LSR #16
71
- .endif
72
-
73
- and \t,\x1,\m55, LSL #1
74
- orr \t,\t,\t, LSL #1
75
- and \t,\t,\m33, LSL #2
76
- orr \t,\t,\t, LSL #2
77
- and \t,\t,\m0F, LSL #4
78
- orr \t,\t,\t, LSL #4
79
- and \t,\t,\mFF, LSL #8
80
- orr \t,\t,\t, LSL #8
81
- bfc \t, #0, #16
82
- eors \s1,\s1,\t
83
- .endm
84
-
85
- @ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
86
- .macro fromBitInterleaving x0, x1, t, mFF, mF0, m0C, m22
87
-
88
- movs \t, \x0 @ t = x0@
89
- bfi \x0, \x1, #16, #16 @ x0 = (x0 & 0x0000FFFF) | (x1 << 16)@
90
- bfc \x1, #0, #16 @ x1 = (t >> 16) | (x1 & 0xFFFF0000)@
91
- orr \x1, \x1, \t, LSR #16
92
-
93
- eor \t, \x0, \x0, LSR #8 @ t = (x0 ^ (x0 >> 8)) & 0x0000FF00UL@ x0 = x0 ^ t ^ (t << 8)@
94
- and \t, \mFF
95
- eors \x0, \x0, \t
96
- eor \x0, \x0, \t, LSL #8
97
-
98
- eor \t, \x0, \x0, LSR #4 @ t = (x0 ^ (x0 >> 4)) & 0x00F000F0UL@ x0 = x0 ^ t ^ (t << 4)@
99
- and \t, \mF0
100
- eors \x0, \x0, \t
101
- eor \x0, \x0, \t, LSL #4
102
-
103
- eor \t, \x0, \x0, LSR #2 @ t = (x0 ^ (x0 >> 2)) & 0x0C0C0C0CUL@ x0 = x0 ^ t ^ (t << 2)@
104
- and \t, \m0C
105
- eors \x0, \x0, \t
106
- eor \x0, \x0, \t, LSL #2
107
-
108
- eor \t, \x0, \x0, LSR #1 @ t = (x0 ^ (x0 >> 1)) & 0x22222222UL@ x0 = x0 ^ t ^ (t << 1)@
109
- and \t, \m22
110
- eors \x0, \x0, \t
111
- eor \x0, \x0, \t, LSL #1
112
-
113
- eor \t, \x1, \x1, LSR #8 @ t = (x1 ^ (x1 >> 8)) & 0x0000FF00UL@ x1 = x1 ^ t ^ (t << 8)@
114
- and \t, \mFF
115
- eors \x1, \x1, \t
116
- eor \x1, \x1, \t, LSL #8
117
-
118
- eor \t, \x1, \x1, LSR #4 @ t = (x1 ^ (x1 >> 4)) & 0x00F000F0UL@ x1 = x1 ^ t ^ (t << 4)@
119
- and \t, \mF0
120
- eors \x1, \x1, \t
121
- eor \x1, \x1, \t, LSL #4
122
-
123
- eor \t, \x1, \x1, LSR #2 @ t = (x1 ^ (x1 >> 2)) & 0x0C0C0C0CUL@ x1 = x1 ^ t ^ (t << 2)@
124
- and \t, \m0C
125
- eors \x1, \x1, \t
126
- eor \x1, \x1, \t, LSL #2
127
-
128
- eor \t, \x1, \x1, LSR #1 @ t = (x1 ^ (x1 >> 1)) & 0x22222222UL@ x1 = x1 ^ t ^ (t << 1)@
129
- and \t, \m22
130
- eors \x1, \x1, \t
131
- eor \x1, \x1, \t, LSL #1
132
- .endm
133
-
134
- @ --- offsets in state
135
- .equ Aba0 , 0*4
136
- .equ Aba1 , 1*4
137
- .equ Abe0 , 2*4
138
- .equ Abe1 , 3*4
139
- .equ Abi0 , 4*4
140
- .equ Abi1 , 5*4
141
- .equ Abo0 , 6*4
142
- .equ Abo1 , 7*4
143
- .equ Abu0 , 8*4
144
- .equ Abu1 , 9*4
145
- .equ Aga0 , 10*4
146
- .equ Aga1 , 11*4
147
- .equ Age0 , 12*4
148
- .equ Age1 , 13*4
149
- .equ Agi0 , 14*4
150
- .equ Agi1 , 15*4
151
- .equ Ago0 , 16*4
152
- .equ Ago1 , 17*4
153
- .equ Agu0 , 18*4
154
- .equ Agu1 , 19*4
155
- .equ Aka0 , 20*4
156
- .equ Aka1 , 21*4
157
- .equ Ake0 , 22*4
158
- .equ Ake1 , 23*4
159
- .equ Aki0 , 24*4
160
- .equ Aki1 , 25*4
161
- .equ Ako0 , 26*4
162
- .equ Ako1 , 27*4
163
- .equ Aku0 , 28*4
164
- .equ Aku1 , 29*4
165
- .equ Ama0 , 30*4
166
- .equ Ama1 , 31*4
167
- .equ Ame0 , 32*4
168
- .equ Ame1 , 33*4
169
- .equ Ami0 , 34*4
170
- .equ Ami1 , 35*4
171
- .equ Amo0 , 36*4
172
- .equ Amo1 , 37*4
173
- .equ Amu0 , 38*4
174
- .equ Amu1 , 39*4
175
- .equ Asa0 , 40*4
176
- .equ Asa1 , 41*4
177
- .equ Ase0 , 42*4
178
- .equ Ase1 , 43*4
179
- .equ Asi0 , 44*4
180
- .equ Asi1 , 45*4
181
- .equ Aso0 , 46*4
182
- .equ Aso1 , 47*4
183
- .equ Asu0 , 48*4
184
- .equ Asu1 , 49*4
185
-
186
- @ --- offsets on stack
187
- .equ mDa0 , 0*4
188
- .equ mDa1 , 1*4
189
- .equ mDo0 , 2*4
190
- .equ mDo1 , 3*4
191
- .equ mDi0 , 4*4
192
- .equ mRC , 5*4
193
- .equ mSize , 6*4
194
-
195
-
196
- .macro xor5 result,b,g,k,m,s
197
-
198
- ldr \result, [r0, #\b]
199
- ldr r1, [r0, #\g]
200
- eors \result, \result, r1
201
- ldr r1, [r0, #\k]
202
- eors \result, \result, r1
203
- ldr r1, [r0, #\m]
204
- eors \result, \result, r1
205
- ldr r1, [r0, #\s]
206
- eors \result, \result, r1
207
- .endm
208
-
209
- .macro xorrol result, aa, bb
210
-
211
- eor \result, \aa, \bb, ROR #31
212
- .endm
213
-
214
- .macro xandnot resofs, aa, bb, cc
215
-
216
- bic r1, \cc, \bb
217
- eors r1, r1, \aa
218
- str r1, [r0, #\resofs]
219
- .endm
220
-
221
- .macro KeccakThetaRhoPiChiIota aA1, aDax, aA2, aDex, rot2, aA3, aDix, rot3, aA4, aDox, rot4, aA5, aDux, rot5, offset, last
222
- ldr r3, [r0, #\aA1]
223
- ldr r4, [r0, #\aA2]
224
- ldr r5, [r0, #\aA3]
225
- ldr r6, [r0, #\aA4]
226
- ldr r7, [r0, #\aA5]
227
- eors r3, r3, \aDax
228
- eors r5, r5, \aDix
229
- eors r4, r4, \aDex
230
- eors r6, r6, \aDox
231
- eors r7, r7, \aDux
232
- rors r4, #32-\rot2
233
- rors r5, #32-\rot3
234
- rors r6, #32-\rot4
235
- rors r7, #32-\rot5
236
- xandnot \aA2, r4, r5, r6
237
- xandnot \aA3, r5, r6, r7
238
- xandnot \aA4, r6, r7, r3
239
- xandnot \aA5, r7, r3, r4
240
- ldr r1, [sp, #mRC]
241
- bics r5, r5, r4
242
- ldr r4, [r1, #\offset]
243
- eors r3, r3, r5
244
- eors r3, r3, r4
245
- .if \last == 1
246
- ldr r4, [r1, #32]!
247
- str r1, [sp, #mRC]
248
- cmp r4, #0xFF
249
- .endif
250
- str r3, [r0, #\aA1]
251
- .endm
252
-
253
- .macro KeccakThetaRhoPiChi aB1, aA1, aDax, rot1, aB2, aA2, aDex, rot2, aB3, aA3, aDix, rot3, aB4, aA4, aDox, rot4, aB5, aA5, aDux, rot5
254
- ldr \aB1, [r0, #\aA1]
255
- ldr \aB2, [r0, #\aA2]
256
- ldr \aB3, [r0, #\aA3]
257
- ldr \aB4, [r0, #\aA4]
258
- ldr \aB5, [r0, #\aA5]
259
- eors \aB1, \aB1, \aDax
260
- eors \aB3, \aB3, \aDix
261
- eors \aB2, \aB2, \aDex
262
- eors \aB4, \aB4, \aDox
263
- eors \aB5, \aB5, \aDux
264
- rors \aB1, #32-\rot1
265
- .if \rot2 > 0
266
- rors \aB2, #32-\rot2
267
- .endif
268
- rors \aB3, #32-\rot3
269
- rors \aB4, #32-\rot4
270
- rors \aB5, #32-\rot5
271
- xandnot \aA1, r3, r4, r5
272
- xandnot \aA2, r4, r5, r6
273
- xandnot \aA3, r5, r6, r7
274
- xandnot \aA4, r6, r7, r3
275
- xandnot \aA5, r7, r3, r4
276
- .endm
277
-
278
- .macro KeccakRound0
279
-
280
- xor5 r3, Abu0, Agu0, Aku0, Amu0, Asu0
281
- xor5 r7, Abe1, Age1, Ake1, Ame1, Ase1
282
- xorrol r6, r3, r7
283
- str r6, [sp, #mDa0]
284
- xor5 r6, Abu1, Agu1, Aku1, Amu1, Asu1
285
- xor5 lr, Abe0, Age0, Ake0, Ame0, Ase0
286
- eors r8, r6, lr
287
- str r8, [sp, #mDa1]
288
-
289
- xor5 r5, Abi0, Agi0, Aki0, Ami0, Asi0
290
- xorrol r9, r5, r6
291
- str r9, [sp, #mDo0]
292
- xor5 r4, Abi1, Agi1, Aki1, Ami1, Asi1
293
- eors r3, r3, r4
294
- str r3, [sp, #mDo1]
295
-
296
- xor5 r3, Aba0, Aga0, Aka0, Ama0, Asa0
297
- xorrol r10, r3, r4
298
- xor5 r6, Aba1, Aga1, Aka1, Ama1, Asa1
299
- eors r11, r6, r5
300
-
301
- xor5 r4, Abo1, Ago1, Ako1, Amo1, Aso1
302
- xorrol r5, lr, r4
303
- str r5, [sp, #mDi0]
304
- xor5 r5, Abo0, Ago0, Ako0, Amo0, Aso0
305
- eors r2, r7, r5
306
-
307
- xorrol r12, r5, r6
308
- eors lr, r4, r3
309
-
310
- KeccakThetaRhoPiChi r5, Aka1, r8, 2, r6, Ame1, r11, 23, r7, Asi1, r2, 31, r3, Abo0, r9, 14, r4, Agu0, r12, 10
311
- KeccakThetaRhoPiChi r7, Asa1, r8, 9, r3, Abe0, r10, 0, r4, Agi1, r2, 3, r5, Ako0, r9, 12, r6, Amu1, lr, 4
312
- ldr r8, [sp, #mDa0]
313
- KeccakThetaRhoPiChi r4, Aga0, r8, 18, r5, Ake0, r10, 5, r6, Ami1, r2, 8, r7, Aso0, r9, 28, r3, Abu1, lr, 14
314
- KeccakThetaRhoPiChi r6, Ama0, r8, 20, r7, Ase1, r11, 1, r3, Abi1, r2, 31, r4, Ago0, r9, 27, r5, Aku0, r12, 19
315
- ldr r9, [sp, #mDo1]
316
- KeccakThetaRhoPiChiIota Aba0, r8, Age0, r10, 22, Aki1, r2, 22, Amo1, r9, 11, Asu0, r12, 7, 0, 0
317
-
318
- ldr r2, [sp, #mDi0]
319
- KeccakThetaRhoPiChi r5, Aka0, r8, 1, r6, Ame0, r10, 22, r7, Asi0, r2, 30, r3, Abo1, r9, 14, r4, Agu1, lr, 10
320
- KeccakThetaRhoPiChi r7, Asa0, r8, 9, r3, Abe1, r11, 1, r4, Agi0, r2, 3, r5, Ako1, r9, 13, r6, Amu0, r12, 4
321
- ldr r8, [sp, #mDa1]
322
- KeccakThetaRhoPiChi r4, Aga1, r8, 18, r5, Ake1, r11, 5, r6, Ami0, r2, 7, r7, Aso1, r9, 28, r3, Abu0, r12, 13
323
- KeccakThetaRhoPiChi r6, Ama1, r8, 21, r7, Ase0, r10, 1, r3, Abi0, r2, 31, r4, Ago1, r9, 28, r5, Aku1, lr, 20
324
- ldr r9, [sp, #mDo0]
325
- KeccakThetaRhoPiChiIota Aba1, r8, Age1, r11, 22, Aki0, r2, 21, Amo0, r9, 10, Asu1, lr, 7, 4, 0
326
- .endm
327
-
328
- .macro KeccakRound1
329
-
330
- xor5 r3, Asu0, Agu0, Amu0, Abu1, Aku1
331
- xor5 r7, Age1, Ame0, Abe0, Ake1, Ase1
332
- xorrol r6, r3, r7
333
- str r6, [sp, #mDa0]
334
- xor5 r6, Asu1, Agu1, Amu1, Abu0, Aku0
335
- xor5 lr, Age0, Ame1, Abe1, Ake0, Ase0
336
- eors r8, r6, lr
337
- str r8, [sp, #mDa1]
338
-
339
- xor5 r5, Aki1, Asi1, Agi0, Ami1, Abi0
340
- xorrol r9, r5, r6
341
- str r9, [sp, #mDo0]
342
- xor5 r4, Aki0, Asi0, Agi1, Ami0, Abi1
343
- eors r3, r3, r4
344
- str r3, [sp, #mDo1]
345
-
346
- xor5 r3, Aba0, Aka1, Asa0, Aga0, Ama1
347
- xorrol r10, r3, r4
348
- xor5 r6, Aba1, Aka0, Asa1, Aga1, Ama0
349
- eors r11, r6, r5
350
-
351
- xor5 r4, Amo0, Abo1, Ako0, Aso1, Ago0
352
- xorrol r5, lr, r4
353
- str r5, [sp, #mDi0]
354
- xor5 r5, Amo1, Abo0, Ako1, Aso0, Ago1
355
- eors r2, r7, r5
356
-
357
- xorrol r12, r5, r6
358
- eors lr, r4, r3
359
-
360
- KeccakThetaRhoPiChi r5, Asa1, r8, 2, r6, Ake1, r11, 23, r7, Abi1, r2, 31, r3, Amo1, r9, 14, r4, Agu0, r12, 10
361
- KeccakThetaRhoPiChi r7, Ama0, r8, 9, r3, Age0, r10, 0, r4, Asi0, r2, 3, r5, Ako1, r9, 12, r6, Abu0, lr, 4
362
- ldr r8, [sp, #mDa0]
363
- KeccakThetaRhoPiChi r4, Aka1, r8, 18, r5, Abe1, r10, 5, r6, Ami0, r2, 8, r7, Ago1, r9, 28, r3, Asu1, lr, 14
364
- KeccakThetaRhoPiChi r6, Aga0, r8, 20, r7, Ase1, r11, 1, r3, Aki0, r2, 31, r4, Abo0, r9, 27, r5, Amu0, r12, 19
365
- ldr r9, [sp, #mDo1]
366
- KeccakThetaRhoPiChiIota Aba0, r8, Ame1, r10, 22, Agi1, r2, 22, Aso1, r9, 11, Aku1, r12, 7, 8, 0
367
-
368
- ldr r2, [sp, #mDi0]
369
- KeccakThetaRhoPiChi r5, Asa0, r8, 1, r6, Ake0, r10, 22, r7, Abi0, r2, 30, r3, Amo0, r9, 14, r4, Agu1, lr, 10
370
- KeccakThetaRhoPiChi r7, Ama1, r8, 9, r3, Age1, r11, 1, r4, Asi1, r2, 3, r5, Ako0, r9, 13, r6, Abu1, r12, 4
371
- ldr r8, [sp, #mDa1]
372
- KeccakThetaRhoPiChi r4, Aka0, r8, 18, r5, Abe0, r11, 5, r6, Ami1, r2, 7, r7, Ago0, r9, 28, r3, Asu0, r12, 13
373
- KeccakThetaRhoPiChi r6, Aga1, r8, 21, r7, Ase0, r10, 1, r3, Aki1, r2, 31, r4, Abo1, r9, 28, r5, Amu1, lr, 20
374
- ldr r9, [sp, #mDo0]
375
- KeccakThetaRhoPiChiIota Aba1, r8, Ame0, r11, 22, Agi0, r2, 21, Aso0, r9, 10, Aku0, lr, 7, 12, 0
376
- .endm
377
-
378
- .macro KeccakRound2
379
-
380
- xor5 r3, Aku1, Agu0, Abu1, Asu1, Amu1
381
- xor5 r7, Ame0, Ake0, Age0, Abe0, Ase1
382
- xorrol r6, r3, r7
383
- str r6, [sp, #mDa0]
384
- xor5 r6, Aku0, Agu1, Abu0, Asu0, Amu0
385
- xor5 lr, Ame1, Ake1, Age1, Abe1, Ase0
386
- eors r8, r6, lr
387
- str r8, [sp, #mDa1]
388
-
389
- xor5 r5, Agi1, Abi1, Asi1, Ami0, Aki1
390
- xorrol r9, r5, r6
391
- str r9, [sp, #mDo0]
392
- xor5 r4, Agi0, Abi0, Asi0, Ami1, Aki0
393
- eors r3, r3, r4
394
- str r3, [sp, #mDo1]
395
-
396
- xor5 r3, Aba0, Asa1, Ama1, Aka1, Aga1
397
- xorrol r10, r3, r4
398
- xor5 r6, Aba1, Asa0, Ama0, Aka0, Aga0
399
- eors r11, r6, r5
400
-
401
- xor5 r4, Aso0, Amo0, Ako1, Ago0, Abo0
402
- xorrol r5, lr, r4
403
- str r5, [sp, #mDi0]
404
- xor5 r5, Aso1, Amo1, Ako0, Ago1, Abo1
405
- eors r2, r7, r5
406
-
407
- xorrol r12, r5, r6
408
- eors lr, r4, r3
409
-
410
- KeccakThetaRhoPiChi r5, Ama0, r8, 2, r6, Abe0, r11, 23, r7, Aki0, r2, 31, r3, Aso1, r9, 14, r4, Agu0, r12, 10
411
- KeccakThetaRhoPiChi r7, Aga0, r8, 9, r3, Ame1, r10, 0, r4, Abi0, r2, 3, r5, Ako0, r9, 12, r6, Asu0, lr, 4
412
- ldr r8, [sp, #mDa0]
413
- KeccakThetaRhoPiChi r4, Asa1, r8, 18, r5, Age1, r10, 5, r6, Ami1, r2, 8, r7, Abo1, r9, 28, r3, Aku0, lr, 14
414
- KeccakThetaRhoPiChi r6, Aka1, r8, 20, r7, Ase1, r11, 1, r3, Agi0, r2, 31, r4, Amo1, r9, 27, r5, Abu1, r12, 19
415
- ldr r9, [sp, #mDo1]
416
- KeccakThetaRhoPiChiIota Aba0, r8, Ake1, r10, 22, Asi0, r2, 22, Ago0, r9, 11, Amu1, r12, 7, 16, 0
417
-
418
- ldr r2, [sp, #mDi0]
419
- KeccakThetaRhoPiChi r5, Ama1, r8, 1, r6, Abe1, r10, 22, r7, Aki1, r2, 30, r3, Aso0, r9, 14, r4, Agu1, lr, 10
420
- KeccakThetaRhoPiChi r7, Aga1, r8, 9, r3, Ame0, r11, 1, r4, Abi1, r2, 3, r5, Ako1, r9, 13, r6, Asu1, r12, 4
421
- ldr r8, [sp, #mDa1]
422
- KeccakThetaRhoPiChi r4, Asa0, r8, 18, r5, Age0, r11, 5, r6, Ami0, r2, 7, r7, Abo0, r9, 28, r3, Aku1, r12, 13
423
- KeccakThetaRhoPiChi r6, Aka0, r8, 21, r7, Ase0, r10, 1, r3, Agi1, r2, 31, r4, Amo0, r9, 28, r5, Abu0, lr, 20
424
- ldr r9, [sp, #mDo0]
425
- KeccakThetaRhoPiChiIota Aba1, r8, Ake0, r11, 22, Asi1, r2, 21, Ago1, r9, 10, Amu0, lr, 7, 20, 0
426
- .endm
427
-
428
- .macro KeccakRound3
429
-
430
- xor5 r3, Amu1, Agu0, Asu1, Aku0, Abu0
431
- xor5 r7, Ake0, Abe1, Ame1, Age0, Ase1
432
- xorrol r6, r3, r7
433
- str r6, [sp, #mDa0]
434
- xor5 r6, Amu0, Agu1, Asu0, Aku1, Abu1
435
- xor5 lr, Ake1, Abe0, Ame0, Age1, Ase0
436
- eors r8, r6, lr
437
- str r8, [sp, #mDa1]
438
-
439
- xor5 r5, Asi0, Aki0, Abi1, Ami1, Agi1
440
- xorrol r9, r5, r6
441
- str r9, [sp, #mDo0]
442
- xor5 r4, Asi1, Aki1, Abi0, Ami0, Agi0
443
- eors r3, r3, r4
444
- str r3, [sp, #mDo1]
445
-
446
- xor5 r3, Aba0, Ama0, Aga1, Asa1, Aka0
447
- xorrol r10, r3, r4
448
- xor5 r6, Aba1, Ama1, Aga0, Asa0, Aka1
449
- eors r11, r6, r5
450
-
451
- xor5 r4, Ago1, Aso0, Ako0, Abo0, Amo1
452
- xorrol r5, lr, r4
453
- str r5, [sp, #mDi0]
454
- xor5 r5, Ago0, Aso1, Ako1, Abo1, Amo0
455
- eors r2, r7, r5
456
-
457
- xorrol r12, r5, r6
458
- eors lr, r4, r3
459
-
460
- KeccakThetaRhoPiChi r5, Aga0, r8, 2, r6, Age0, r11, 23, r7, Agi0, r2, 31, r3, Ago0, r9, 14, r4, Agu0, r12, 10
461
- KeccakThetaRhoPiChi r7, Aka1, r8, 9, r3, Ake1, r10, 0, r4, Aki1, r2, 3, r5, Ako1, r9, 12, r6, Aku1, lr, 4
462
- ldr r8, [sp, #mDa0]
463
- KeccakThetaRhoPiChi r4, Ama0, r8, 18, r5, Ame0, r10, 5, r6, Ami0, r2, 8, r7, Amo0, r9, 28, r3, Amu0, lr, 14
464
- KeccakThetaRhoPiChi r6, Asa1, r8, 20, r7, Ase1, r11, 1, r3, Asi1, r2, 31, r4, Aso1, r9, 27, r5, Asu1, r12, 19
465
- ldr r9, [sp, #mDo1]
466
- KeccakThetaRhoPiChiIota Aba0, r8, Abe0, r10, 22, Abi0, r2, 22, Abo0, r9, 11, Abu0, r12, 7, 24, 0
467
-
468
- ldr r2, [sp, #mDi0]
469
- KeccakThetaRhoPiChi r5, Aga1, r8, 1, r6, Age1, r10, 22, r7, Agi1, r2, 30, r3, Ago1, r9, 14, r4, Agu1, lr, 10
470
- KeccakThetaRhoPiChi r7, Aka0, r8, 9, r3, Ake0, r11, 1, r4, Aki0, r2, 3, r5, Ako0, r9, 13, r6, Aku0, r12, 4
471
- ldr r8, [sp, #mDa1]
472
- KeccakThetaRhoPiChi r4, Ama1, r8, 18, r5, Ame1, r11, 5, r6, Ami1, r2, 7, r7, Amo1, r9, 28, r3, Amu1, r12, 13
473
- KeccakThetaRhoPiChi r6, Asa0, r8, 21, r7, Ase0, r10, 1, r3, Asi0, r2, 31, r4, Aso0, r9, 28, r5, Asu0, lr, 20
474
- ldr r9, [sp, #mDo0]
475
- KeccakThetaRhoPiChiIota Aba1, r8, Abe1, r11, 22, Abi1, r2, 21, Abo1, r9, 10, Abu1, lr, 7, 28, 1
476
- .endm
477
-
478
- @----------------------------------------------------------------------------
479
- @
480
- @ void KeccakP1600_StaticInitialize( void )
481
- @
482
- .align 8
483
- .global KeccakP1600_StaticInitialize
484
- .type KeccakP1600_StaticInitialize, %function;
485
- KeccakP1600_StaticInitialize:
486
- bx lr
487
-
488
-
489
- @----------------------------------------------------------------------------
490
- @
491
- @ void KeccakP1600_Initialize(void *state)
492
- @
493
- .align 8
494
- .global KeccakP1600_Initialize
495
- .type KeccakP1600_Initialize, %function;
496
- KeccakP1600_Initialize:
497
- push {r4 - r5}
498
- movs r1, #0
499
- movs r2, #0
500
- movs r3, #0
501
- movs r4, #0
502
- movs r5, #0
503
- stmia r0!, { r1 - r5 }
504
- stmia r0!, { r1 - r5 }
505
- stmia r0!, { r1 - r5 }
506
- stmia r0!, { r1 - r5 }
507
- stmia r0!, { r1 - r5 }
508
- stmia r0!, { r1 - r5 }
509
- stmia r0!, { r1 - r5 }
510
- stmia r0!, { r1 - r5 }
511
- stmia r0!, { r1 - r5 }
512
- stmia r0!, { r1 - r5 }
513
- pop {r4 - r5}
514
- bx lr
515
-
516
-
517
- @ ----------------------------------------------------------------------------
518
- @
519
- @ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
520
- @
521
- .align 8
522
- .global KeccakP1600_AddByte
523
- .type KeccakP1600_AddByte, %function;
524
- KeccakP1600_AddByte:
525
- push {r4 - r11}
526
- bic r3, r2, #7 @ r3 = offset & ~7
527
- adds r0, r0, r3 @ state += r3
528
- ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
529
- movw r8, #0x5555
530
- movt r8, #0x5555
531
- movw r9, #0x3333
532
- movt r9, #0x3333
533
- movw r10, #0x0F0F
534
- movt r10, #0x0F0F
535
- movw r11, #0x00FF
536
- movt r11, #0x00FF
537
- movs r4, #0
538
- movs r5, #0
539
- push { r4 - r5 }
540
- add r2, r2, sp
541
- strb r1, [r2]
542
- pop { r4 - r5 }
543
- ldrd r6, r7, [r0]
544
- toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
545
- strd r6, r7, [r0]
546
- pop {r4 - r11}
547
- bx lr
548
-
549
-
550
- @----------------------------------------------------------------------------
551
- @
552
- @ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
553
- @
554
- .align 8
555
- .global KeccakP1600_AddBytes
556
- .type KeccakP1600_AddBytes, %function;
557
- KeccakP1600_AddBytes:
558
- cmp r3, #0 @ .if length != 0
559
- beq KeccakP1600_AddBytes_Exit1
560
- push {r4 - r8, lr} @ then
561
- bic r4, r2, #7 @ offset &= ~7
562
- adds r0, r0, r4 @ add whole lane offset to state pointer
563
- ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
564
- beq KeccakP1600_AddBytes_CheckLanes @ .if offset != 0
565
- movs r4, r3 @ then, do remaining bytes in first lane
566
- rsb r5, r2, #8 @ max size in lane = 8 - offset
567
- cmp r4, r5
568
- ble KeccakP1600_AddBytes_BytesAlign
569
- movs r4, r5
570
- KeccakP1600_AddBytes_BytesAlign:
571
- sub r8, r3, r4 @ size left
572
- movs r3, r4
573
- bl __KeccakP1600_AddBytesInLane
574
- mov r3, r8
575
- KeccakP1600_AddBytes_CheckLanes:
576
- lsrs r2, r3, #3 @ .if length >= 8
577
- beq KeccakP1600_AddBytes_Bytes
578
- mov r8, r3
579
- bl __KeccakP1600_AddLanes
580
- and r3, r8, #7
581
- KeccakP1600_AddBytes_Bytes:
582
- cmp r3, #0
583
- beq KeccakP1600_AddBytes_Exit
584
- movs r2, #0
585
- bl __KeccakP1600_AddBytesInLane
586
- KeccakP1600_AddBytes_Exit:
587
- pop {r4 - r8, pc}
588
- KeccakP1600_AddBytes_Exit1:
589
- bx lr
590
-
591
-
592
- @----------------------------------------------------------------------------
593
- @
594
- @ __KeccakP1600_AddLanes
595
- @
596
- @ Input:
597
- @ r0 state pointer
598
- @ r1 data pointer
599
- @ r2 laneCount
600
- @
601
- @ Output:
602
- @ r0 state pointer next lane
603
- @ r1 data pointer next byte to input
604
- @
605
- @ Changed: r2-r7
606
- @
607
- .align 8
608
- __KeccakP1600_AddLanes:
609
- push {r8 - r11}
610
- movw r8, #0x5555
611
- movt r8, #0x5555
612
- movw r9, #0x3333
613
- movt r9, #0x3333
614
- movw r10, #0x0F0F
615
- movt r10, #0x0F0F
616
- movw r11, #0x00FF
617
- movt r11, #0x00FF
618
- __KeccakP1600_AddLanes_LoopAligned:
619
- ldr r4, [r1], #4
620
- ldr r5, [r1], #4
621
- ldrd r6, r7, [r0]
622
- toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
623
- strd r6, r7, [r0], #8
624
- subs r2, r2, #1
625
- bne __KeccakP1600_AddLanes_LoopAligned
626
- pop {r8 - r11}
627
- bx lr
628
-
629
-
630
- @----------------------------------------------------------------------------
631
- @
632
- @ __KeccakP1600_AddBytesInLane
633
- @
634
- @ Input:
635
- @ r0 state pointer
636
- @ r1 data pointer
637
- @ r2 offset in lane
638
- @ r3 length
639
- @
640
- @ Output:
641
- @ r0 state pointer next lane
642
- @ r1 data pointer next byte to input
643
- @
644
- @ Changed: r2-r7
645
- @
646
- .align 8
647
- __KeccakP1600_AddBytesInLane:
648
- push {r8 - r11}
649
- movw r8, #0x5555
650
- movt r8, #0x5555
651
- movw r9, #0x3333
652
- movt r9, #0x3333
653
- movw r10, #0x0F0F
654
- movt r10, #0x0F0F
655
- movw r11, #0x00FF
656
- movt r11, #0x00FF
657
- movs r4, #0
658
- movs r5, #0
659
- push { r4 - r5 }
660
- add r2, r2, sp
661
- __KeccakP1600_AddBytesInLane_Loop:
662
- ldrb r5, [r1], #1
663
- strb r5, [r2], #1
664
- subs r3, r3, #1
665
- bne __KeccakP1600_AddBytesInLane_Loop
666
- pop { r4 - r5 }
667
- ldrd r6, r7, [r0]
668
- toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
669
- strd r6, r7, [r0], #8
670
- pop {r8 - r11}
671
- bx lr
672
-
673
-
674
- @----------------------------------------------------------------------------
675
- @
676
- @ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
677
- @
678
- .align 8
679
- .global KeccakP1600_OverwriteBytes
680
- .type KeccakP1600_OverwriteBytes, %function;
681
- KeccakP1600_OverwriteBytes:
682
- cmp r3, #0 @ .if length != 0
683
- beq KeccakP1600_OverwriteBytes_Exit1
684
- push {r4 - r8, lr} @ then
685
- bic r4, r2, #7 @ offset &= ~7
686
- adds r0, r0, r4 @ add whole lane offset to state pointer
687
- ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
688
- beq KeccakP1600_OverwriteBytes_CheckLanes @ .if offset != 0
689
- movs r4, r3 @ then, do remaining bytes in first lane
690
- rsb r5, r2, #8 @ max size in lane = 8 - offset
691
- cmp r4, r5
692
- ble KeccakP1600_OverwriteBytes_BytesAlign
693
- movs r4, r5
694
- KeccakP1600_OverwriteBytes_BytesAlign:
695
- sub r8, r3, r4 @ size left
696
- movs r3, r4
697
- bl __KeccakP1600_OverwriteBytesInLane
698
- mov r3, r8
699
- KeccakP1600_OverwriteBytes_CheckLanes:
700
- lsrs r2, r3, #3 @ .if length >= 8
701
- beq KeccakP1600_OverwriteBytes_Bytes
702
- mov r8, r3
703
- bl __KeccakP1600_OverwriteLanes
704
- and r3, r8, #7
705
- KeccakP1600_OverwriteBytes_Bytes:
706
- cmp r3, #0
707
- beq KeccakP1600_OverwriteBytes_Exit
708
- movs r2, #0
709
- bl __KeccakP1600_OverwriteBytesInLane
710
- KeccakP1600_OverwriteBytes_Exit:
711
- pop {r4 - r8, pc}
712
- KeccakP1600_OverwriteBytes_Exit1:
713
- bx lr
714
-
715
-
716
- @----------------------------------------------------------------------------
717
- @
718
- @ __KeccakP1600_OverwriteLanes
719
- @
720
- @ Input:
721
- @ r0 state pointer
722
- @ r1 data pointer
723
- @ r2 laneCount
724
- @
725
- @ Output:
726
- @ r0 state pointer next lane
727
- @ r1 data pointer next byte to input
728
- @
729
- @ Changed: r2-r7
730
- @
731
- .align 8
732
- __KeccakP1600_OverwriteLanes:
733
- push {r8 - r11}
734
- movw r8, #0x5555
735
- movt r8, #0x5555
736
- movw r9, #0x3333
737
- movt r9, #0x3333
738
- movw r10, #0x0F0F
739
- movt r10, #0x0F0F
740
- movw r11, #0x00FF
741
- movt r11, #0x00FF
742
- __KeccakP1600_OverwriteLanes_LoopAligned:
743
- ldr r4, [r1], #4
744
- ldr r5, [r1], #4
745
- toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 1
746
- strd r6, r7, [r0], #8
747
- subs r2, r2, #1
748
- bne __KeccakP1600_OverwriteLanes_LoopAligned
749
- pop {r8 - r11}
750
- bx lr
751
-
752
-
753
- @----------------------------------------------------------------------------
754
- @
755
- @ __KeccakP1600_OverwriteBytesInLane
756
- @
757
- @ Input:
758
- @ r0 state pointer
759
- @ r1 data pointer
760
- @ r2 offset in lane
761
- @ r3 length
762
- @
763
- @ Output:
764
- @ r0 state pointer next lane
765
- @ r1 data pointer next byte to input
766
- @
767
- @ Changed: r2-r7
768
- @
769
- .align 8
770
- __KeccakP1600_OverwriteBytesInLane:
771
- push {r8 - r11}
772
- movw r8, #0x5555
773
- movt r8, #0x5555
774
- movw r9, #0x3333
775
- movt r9, #0x3333
776
- movw r10, #0x0F0F
777
- movt r10, #0x0F0F
778
- movw r11, #0x00FF
779
- movt r11, #0x00FF
780
- movs r4, #0
781
- movs r5, #0
782
- push { r4 - r5 }
783
- lsl r7, r2, #2
784
- add r2, r2, sp
785
- movs r6, #0x0F @r6 mask to wipe nibbles(bit interleaved bytes) in state
786
- lsls r6, r6, r7
787
- movs r7, r6
788
- KeccakP1600_OverwriteBytesInLane_Loop:
789
- orrs r6, r6, r7
790
- lsls r7, r7, #4
791
- ldrb r5, [r1], #1
792
- subs r3, r3, #1
793
- strb r5, [r2], #1
794
- bne KeccakP1600_OverwriteBytesInLane_Loop
795
- pop { r4 - r5 }
796
- toBitInterleaving r4, r5, r2, r3, r7, r8, r9, r10, r11, 1
797
- ldrd r4, r5, [r0]
798
- bics r4, r4, r6
799
- bics r5, r5, r6
800
- orrs r2, r2, r4
801
- orrs r3, r3, r5
802
- strd r2, r3, [r0], #8
803
- pop {r8 - r11}
804
- bx lr
805
-
806
-
807
- @----------------------------------------------------------------------------
808
- @
809
- @ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
810
- @
811
- .align 8
812
- .global KeccakP1600_OverwriteWithZeroes
813
- .type KeccakP1600_OverwriteWithZeroes, %function;
814
- KeccakP1600_OverwriteWithZeroes:
815
- push {r4 - r5}
816
- lsrs r2, r1, #3
817
- beq KeccakP1600_OverwriteWithZeroes_Bytes
818
- movs r4, #0
819
- movs r5, #0
820
- KeccakP1600_OverwriteWithZeroes_LoopLanes:
821
- strd r4, r5, [r0], #8
822
- subs r2, r2, #1
823
- bne KeccakP1600_OverwriteWithZeroes_LoopLanes
824
- KeccakP1600_OverwriteWithZeroes_Bytes:
825
- ands r1, #7
826
- beq KeccakP1600_OverwriteWithZeroes_Exit
827
- movs r3, #0x0F @r2 already zero, r3 = mask to wipe nibbles(bit interleaved bytes) in state
828
- KeccakP1600_OverwriteWithZeroes_LoopBytes:
829
- orrs r2, r2, r3
830
- lsls r3, r3, #4
831
- subs r1, r1, #1
832
- bne KeccakP1600_OverwriteWithZeroes_LoopBytes
833
- ldrd r4, r5, [r0]
834
- bics r4, r4, r2
835
- bics r5, r5, r2
836
- strd r4, r5, [r0], #8
837
- KeccakP1600_OverwriteWithZeroes_Exit:
838
- pop {r4 - r5}
839
- bx lr
840
-
841
-
842
- @----------------------------------------------------------------------------
843
- @
844
- @ void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
845
- @
846
- .align 8
847
- .global KeccakP1600_ExtractBytes
848
- .type KeccakP1600_ExtractBytes, %function;
849
- KeccakP1600_ExtractBytes:
850
- cmp r3, #0 @ .if length != 0
851
- beq KeccakP1600_ExtractBytes_Exit1
852
- push {r4 - r8, lr} @ then
853
- bic r4, r2, #7 @ offset &= ~7
854
- adds r0, r0, r4 @ add whole lane offset to state pointer
855
- ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
856
- beq KeccakP1600_ExtractBytes_CheckLanes @ .if offset != 0
857
- movs r4, r3 @ then, do remaining bytes in first lane
858
- rsb r5, r2, #8 @ max size in lane = 8 - offset
859
- cmp r4, r5
860
- ble KeccakP1600_ExtractBytes_BytesAlign
861
- movs r4, r5
862
- KeccakP1600_ExtractBytes_BytesAlign:
863
- sub r8, r3, r4 @ size left
864
- movs r3, r4
865
- bl __KeccakP1600_ExtractBytesInLane
866
- mov r3, r8
867
- KeccakP1600_ExtractBytes_CheckLanes:
868
- lsrs r2, r3, #3 @ .if length >= 8
869
- beq KeccakP1600_ExtractBytes_Bytes
870
- mov r8, r3
871
- bl __KeccakP1600_ExtractLanes
872
- and r3, r8, #7
873
- KeccakP1600_ExtractBytes_Bytes:
874
- cmp r3, #0
875
- beq KeccakP1600_ExtractBytes_Exit
876
- movs r2, #0
877
- bl __KeccakP1600_ExtractBytesInLane
878
- KeccakP1600_ExtractBytes_Exit:
879
- pop {r4 - r8, pc}
880
- KeccakP1600_ExtractBytes_Exit1:
881
- bx lr
882
-
883
-
884
- @----------------------------------------------------------------------------
885
- @
886
- @ __KeccakP1600_ExtractLanes
887
- @
888
- @ Input:
889
- @ r0 state pointer
890
- @ r1 data pointer
891
- @ r2 laneCount
892
- @
893
- @ Output:
894
- @ r0 state pointer next lane
895
- @ r1 data pointer next byte to input
896
- @
897
- @ Changed: r2-r5
898
- @
899
- .align 8
900
- __KeccakP1600_ExtractLanes:
901
- push {r6 - r9}
902
- movw r6, #0xFF00
903
- movw r7, #0x00F0
904
- movt r7, #0x00F0
905
- movw r8, #0x0C0C
906
- movt r8, #0x0C0C
907
- movw r9, #0x2222
908
- movt r9, #0x2222
909
- __KeccakP1600_ExtractLanes_LoopAligned:
910
- ldrd r4, r5, [r0], #8
911
- fromBitInterleaving r4, r5, r3, r6, r7, r8, r9
912
- str r4, [r1], #4
913
- subs r2, r2, #1
914
- str r5, [r1], #4
915
- bne __KeccakP1600_ExtractLanes_LoopAligned
916
- pop {r6 - r9}
917
- bx lr
918
-
919
-
920
- @----------------------------------------------------------------------------
921
- @
922
- @ __KeccakP1600_ExtractBytesInLane
923
- @
924
- @ Input:
925
- @ r0 state pointer
926
- @ r1 data pointer
927
- @ r2 offset in lane
928
- @ r3 length
929
- @
930
- @ Output:
931
- @ r0 state pointer next lane
932
- @ r1 data pointer next byte to input
933
- @
934
- @ Changed: r2-r5,r12
935
- @
936
- .align 8
937
- __KeccakP1600_ExtractBytesInLane:
938
- push {r6 - r9}
939
- movw r6, #0xFF00
940
- movw r7, #0x00F0
941
- movt r7, #0x00F0
942
- movw r8, #0x0C0C
943
- movt r8, #0x0C0C
944
- movw r9, #0x2222
945
- movt r9, #0x2222
946
- ldrd r4, r5, [r0], #8
947
- fromBitInterleaving r4, r5, r12, r6, r7, r8, r9
948
- push {r4, r5}
949
- add r2, sp, r2
950
- __KeccakP1600_ExtractBytesInLane_Loop:
951
- ldrb r4, [r2], #1
952
- subs r3, r3, #1
953
- strb r4, [r1], #1
954
- bne __KeccakP1600_ExtractBytesInLane_Loop
955
- add sp, #8
956
- pop {r6 - r9}
957
- bx lr
958
-
959
-
960
- @----------------------------------------------------------------------------
961
- @
962
- @ void KeccakP1600_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
963
- @
964
- .align 8
965
- .global KeccakP1600_ExtractAndAddBytes
966
- .type KeccakP1600_ExtractAndAddBytes, %function;
967
- KeccakP1600_ExtractAndAddBytes:
968
- push {r4 - r10, lr}
969
- mov r10, r2
970
- mov r2, r3
971
- ldr r3, [sp, #8*4]
972
- cmp r3, #0
973
- beq KeccakP1600_ExtractAndAddBytes_Exit @ .if length != 0
974
- bic r4, r2, #7 @ then, offset &= ~7
975
- adds r0, r0, r4 @ add whole lane offset to state pointer
976
- ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
977
- beq KeccakP1600_ExtractAndAddBytes_CheckLanes @ .if offset != 0
978
- movs r4, r3 @ then, do remaining bytes in first lane
979
- rsb r5, r2, #8 @ max size in lane = 8 - offset
980
- cmp r4, r5
981
- ble KeccakP1600_ExtractAndAddBytes_BytesAlign
982
- movs r4, r5
983
- KeccakP1600_ExtractAndAddBytes_BytesAlign:
984
- sub r8, r3, r4 @ size left
985
- movs r3, r4
986
- bl __KeccakP1600_ExtractAndAddBytesInLane
987
- mov r3, r8
988
- KeccakP1600_ExtractAndAddBytes_CheckLanes:
989
- lsrs r2, r3, #3 @ .if length >= 8
990
- beq KeccakP1600_ExtractAndAddBytes_Bytes
991
- mov r8, r3
992
- bl __KeccakP1600_ExtractAndAddLanes
993
- and r3, r8, #7
994
- KeccakP1600_ExtractAndAddBytes_Bytes:
995
- cmp r3, #0
996
- beq KeccakP1600_ExtractAndAddBytes_Exit
997
- movs r2, #0
998
- bl __KeccakP1600_ExtractAndAddBytesInLane
999
- KeccakP1600_ExtractAndAddBytes_Exit:
1000
- pop {r4 - r10, pc}
1001
-
1002
-
1003
- @----------------------------------------------------------------------------
1004
- @
1005
- @ __KeccakP1600_ExtractAndAddLanes
1006
- @
1007
- @ Input:
1008
- @ r0 state pointer
1009
- @ r1 in pointer
1010
- @ r2 laneCount
1011
- @ r10 out pointer
1012
- @
1013
- @ Output:
1014
- @ r0 state pointer next lane
1015
- @ r1 in pointer (next 32-bit word)
1016
- @ r10 out pointer (next 32-bit word)
1017
- @
1018
- @ Changed: r2-r5
1019
- @
1020
- .align 8
1021
- __KeccakP1600_ExtractAndAddLanes:
1022
- push {r6 - r9}
1023
- movw r6, #0xFF00
1024
- movw r7, #0x00F0
1025
- movt r7, #0x00F0
1026
- movw r8, #0x0C0C
1027
- movt r8, #0x0C0C
1028
- movw r9, #0x2222
1029
- movt r9, #0x2222
1030
- __KeccakP1600_ExtractAndAddLanes_LoopAligned:
1031
- ldrd r4, r5, [r0], #8
1032
- fromBitInterleaving r4, r5, r3, r6, r7, r8, r9
1033
- ldr r3, [r1], #4
1034
- eors r4, r4, r3
1035
- str r4, [r10], #4
1036
- ldr r3, [r1], #4
1037
- eors r5, r5, r3
1038
- subs r2, r2, #1
1039
- str r5, [r10], #4
1040
- bne __KeccakP1600_ExtractAndAddLanes_LoopAligned
1041
- pop {r6 - r9}
1042
- bx lr
1043
-
1044
-
1045
- @----------------------------------------------------------------------------
1046
- @
1047
- @ __KeccakP1600_ExtractAndAddBytesInLane
1048
- @
1049
- @ Input:
1050
- @ r0 state pointer
1051
- @ r1 in pointer
1052
- @ r2 offset in lane
1053
- @ r3 length
1054
- @ r10 out pointer
1055
- @
1056
- @ Output:
1057
- @ r0 state pointer next lane
1058
- @ r1 in pointer (next byte)
1059
- @ r10 out pointer (next byte)
1060
- @
1061
- @ Changed: r2-r5,r12
1062
- @
1063
- .align 8
1064
- __KeccakP1600_ExtractAndAddBytesInLane:
1065
- push {r6 - r9}
1066
- movw r6, #0xFF00
1067
- movw r7, #0x00F0
1068
- movt r7, #0x00F0
1069
- movw r8, #0x0C0C
1070
- movt r8, #0x0C0C
1071
- movw r9, #0x2222
1072
- movt r9, #0x2222
1073
- ldrd r4, r5, [r0], #8
1074
- fromBitInterleaving r4, r5, r12, r6, r7, r8, r9
1075
- push {r4, r5}
1076
- add r2, sp, r2
1077
- __KeccakP1600_ExtractAndAddBytesInLane_Loop:
1078
- ldrb r4, [r2], #1
1079
- ldrb r5, [r1], #1
1080
- eors r4, r4, r5
1081
- subs r3, r3, #1
1082
- strb r4, [r10], #1
1083
- bne __KeccakP1600_ExtractAndAddBytesInLane_Loop
1084
- add sp, #8
1085
- pop {r6 - r9}
1086
- bx lr
1087
-
1088
-
1089
- .macro SwapPI13 in0,in1,in2,in3,eo0,eo1,eo2,eo3
1090
- ldr r3, [r0, #\in0+0]
1091
- ldr r4, [r0, #\in0+4]
1092
- ldr r2, [r0, #\in1+0]
1093
- ldr r1, [r0, #\in1+4]
1094
- str r2, [r0, #\in0+\eo0*4]
1095
- str r1, [r0, #\in0+(\eo0^1)*4]
1096
- ldr r2, [r0, #\in2+0]
1097
- ldr r1, [r0, #\in2+4]
1098
- str r2, [r0, #\in1+\eo1*4]
1099
- str r1, [r0, #\in1+(\eo1^1)*4]
1100
- ldr r2, [r0, #\in3+0]
1101
- ldr r1, [r0, #\in3+4]
1102
- str r2, [r0, #\in2+\eo2*4]
1103
- str r1, [r0, #\in2+(\eo2^1)*4]
1104
- str r3, [r0, #\in3+\eo3*4]
1105
- str r4, [r0, #\in3+(\eo3^1)*4]
1106
- .endm
1107
-
1108
- .macro SwapPI2 in0,in1,in2,in3
1109
- ldr r3, [r0, #\in0+0]
1110
- ldr r4, [r0, #\in0+4]
1111
- ldr r2, [r0, #\in1+0]
1112
- ldr r1, [r0, #\in1+4]
1113
- str r2, [r0, #\in0+4]
1114
- str r1, [r0, #\in0+0]
1115
- str r3, [r0, #\in1+4]
1116
- str r4, [r0, #\in1+0]
1117
- ldr r3, [r0, #\in2+0]
1118
- ldr r4, [r0, #\in2+4]
1119
- ldr r2, [r0, #\in3+0]
1120
- ldr r1, [r0, #\in3+4]
1121
- str r2, [r0, #\in2+4]
1122
- str r1, [r0, #\in2+0]
1123
- str r3, [r0, #\in3+4]
1124
- str r4, [r0, #\in3+0]
1125
- .endm
1126
-
1127
- .macro SwapEO even,odd
1128
- ldr r3, [r0, #\even]
1129
- ldr r4, [r0, #\odd]
1130
- str r3, [r0, #\odd]
1131
- str r4, [r0, #\even]
1132
- .endm
1133
-
1134
- @ ----------------------------------------------------------------------------
1135
- @
1136
- @ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
1137
- @
1138
- .align 8
1139
- .global KeccakP1600_Permute_Nrounds
1140
- .type KeccakP1600_Permute_Nrounds, %function;
1141
- KeccakP1600_Permute_Nrounds:
1142
- lsls r3, r1, #30
1143
- bne KeccakP1600_Permute_NroundsNotMultiple4
1144
- lsls r2, r1, #3
1145
- adr r1, KeccakP1600_Permute_RoundConstants0Mod4
1146
- subs r1, r1, r2
1147
- b KeccakP1600_Permute
1148
- KeccakP1600_Permute_NroundsNotMultiple4: @ nrounds not multiple of 4
1149
- push { r4 - r12, lr }
1150
- sub sp, #mSize
1151
- lsrs r2, r1, #2
1152
- lsls r2, r2, #3+2
1153
- adr r1, KeccakP1600_Permute_RoundConstants0
1154
- subs r1, r1, r2
1155
- str r1, [sp, #mRC]
1156
- lsls r3, r3, #1
1157
- bcs KeccakP1600_Permute_Nrounds23Mod4
1158
- KeccakP1600_Permute_Nrounds1Mod4:
1159
- SwapPI13 Aga0, Aka0, Asa0, Ama0, 1, 0, 1, 0
1160
- SwapPI13 Abe0, Age0, Ame0, Ake0, 0, 1, 0, 1
1161
- SwapPI13 Abi0, Aki0, Agi0, Asi0, 1, 0, 1, 0
1162
- SwapEO Ami0, Ami1
1163
- SwapPI13 Abo0, Amo0, Aso0, Ago0, 1, 0, 1, 0
1164
- SwapEO Ako0, Ako1
1165
- SwapPI13 Abu0, Asu0, Aku0, Amu0, 0, 1, 0, 1
1166
- b.w KeccakP1600_Permute_Round1Mod4
1167
- KeccakP1600_Permute_Nrounds23Mod4:
1168
- bpl KeccakP1600_Permute_Nrounds2Mod4
1169
- KeccakP1600_Permute_Nrounds3Mod4:
1170
- SwapPI13 Aga0, Ama0, Asa0, Aka0, 0, 1, 0, 1
1171
- SwapPI13 Abe0, Ake0, Ame0, Age0, 1, 0, 1, 0
1172
- SwapPI13 Abi0, Asi0, Agi0, Aki0, 0, 1, 0, 1
1173
- SwapEO Ami0, Ami1
1174
- SwapPI13 Abo0, Ago0, Aso0, Amo0, 0, 1, 0, 1
1175
- SwapEO Ako0, Ako1
1176
- SwapPI13 Abu0, Amu0, Aku0, Asu0, 1, 0, 1, 0
1177
- b.w KeccakP1600_Permute_Round3Mod4
1178
- KeccakP1600_Permute_Nrounds2Mod4:
1179
- SwapPI2 Aga0, Asa0, Aka0, Ama0
1180
- SwapPI2 Abe0, Ame0, Age0, Ake0
1181
- SwapPI2 Abi0, Agi0, Aki0, Asi0
1182
- SwapPI2 Abo0, Aso0, Ago0, Amo0
1183
- SwapPI2 Abu0, Aku0, Amu0, Asu0
1184
- b.w KeccakP1600_Permute_Round2Mod4
1185
-
1186
-
1187
- @ ----------------------------------------------------------------------------
1188
- @
1189
- @ void KeccakP1600_Permute_12rounds( void *state )
1190
- @
1191
- .align 8
1192
- .global KeccakP1600_Permute_12rounds
1193
- .type KeccakP1600_Permute_12rounds, %function;
1194
- KeccakP1600_Permute_12rounds:
1195
- adr r1, KeccakP1600_Permute_RoundConstants12
1196
- b KeccakP1600_Permute
1197
-
1198
-
1199
- @ ----------------------------------------------------------------------------
1200
- @
1201
- @ void KeccakP1600_Permute_24rounds( void *state )
1202
- @
1203
- .align 8
1204
- .global KeccakP1600_Permute_24rounds
1205
- .type KeccakP1600_Permute_24rounds, %function;
1206
- KeccakP1600_Permute_24rounds:
1207
- adr r1, KeccakP1600_Permute_RoundConstants24
1208
- b KeccakP1600_Permute
1209
-
1210
-
1211
- .align 8
1212
- KeccakP1600_Permute_RoundConstants24:
1213
- @ 0 1
1214
- .long 0x00000001, 0x00000000
1215
- .long 0x00000000, 0x00000089
1216
- .long 0x00000000, 0x8000008b
1217
- .long 0x00000000, 0x80008080
1218
- .long 0x00000001, 0x0000008b
1219
- .long 0x00000001, 0x00008000
1220
- .long 0x00000001, 0x80008088
1221
- .long 0x00000001, 0x80000082
1222
- .long 0x00000000, 0x0000000b
1223
- .long 0x00000000, 0x0000000a
1224
- .long 0x00000001, 0x00008082
1225
- .long 0x00000000, 0x00008003
1226
- KeccakP1600_Permute_RoundConstants12:
1227
- .long 0x00000001, 0x0000808b
1228
- .long 0x00000001, 0x8000000b
1229
- .long 0x00000001, 0x8000008a
1230
- .long 0x00000001, 0x80000081
1231
- .long 0x00000000, 0x80000081
1232
- .long 0x00000000, 0x80000008
1233
- .long 0x00000000, 0x00000083
1234
- .long 0x00000000, 0x80008003
1235
- KeccakP1600_Permute_RoundConstants0:
1236
- .long 0x00000001, 0x80008088
1237
- .long 0x00000000, 0x80000088
1238
- .long 0x00000001, 0x00008000
1239
- .long 0x00000000, 0x80008082
1240
- KeccakP1600_Permute_RoundConstants0Mod4:
1241
- .long 0x000000FF @terminator
1242
-
1243
- @----------------------------------------------------------------------------
1244
- @
1245
- @ void KeccakP1600_Permute( void *state, void * rc )
1246
- @
1247
- .align 8
1248
- KeccakP1600_Permute:
1249
- push { r4 - r12, lr }
1250
- sub sp, #mSize
1251
- str r1, [sp, #mRC]
1252
- KeccakP1600_Permute_RoundLoop:
1253
- KeccakRound0
1254
- KeccakP1600_Permute_Round3Mod4:
1255
- KeccakRound1
1256
- KeccakP1600_Permute_Round2Mod4:
1257
- KeccakRound2
1258
- KeccakP1600_Permute_Round1Mod4:
1259
- KeccakRound3
1260
- bne KeccakP1600_Permute_RoundLoop
1261
- add sp, #mSize
1262
- pop { r4 - r12, pc }
1263
-
1264
-