sleeping_kangaroo12 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -67
  3. data/ext/Rakefile +12 -37
  4. data/ext/binding/sleeping_kangaroo12.c +1 -16
  5. data/ext/{xkcp → k12}/Makefile +0 -0
  6. data/ext/k12/Makefile.build +118 -0
  7. data/ext/k12/README.markdown +86 -0
  8. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-ARMv8Asha3.S +623 -0
  9. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-SnP.h +65 -0
  10. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-opt64.c +227 -0
  11. data/ext/{xkcp/lib/low/KeccakP-1600/compact → k12/lib/Inplace32BI}/KeccakP-1600-SnP.h +4 -9
  12. data/ext/{xkcp/lib/low/KeccakP-1600/plain-32bits-inplace → k12/lib/Inplace32BI}/KeccakP-1600-inplace32BI.c +65 -160
  13. data/ext/k12/lib/KangarooTwelve.c +332 -0
  14. data/ext/{xkcp/lib/high/KangarooTwelve → k12/lib}/KangarooTwelve.h +53 -16
  15. data/ext/{xkcp/lib/low/KeccakP-1600/AVX2 → k12/lib/Optimized64}/KeccakP-1600-AVX2.s +122 -558
  16. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512-plainC.c +241 -0
  17. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512.s +551 -0
  18. data/ext/k12/lib/Optimized64/KeccakP-1600-SnP.h +74 -0
  19. data/ext/{xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros → k12/lib/Optimized64/KeccakP-1600-opt64.c} +447 -169
  20. data/ext/k12/lib/Optimized64/KeccakP-1600-runtimeDispatch.c +406 -0
  21. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX2.c +419 -0
  22. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX512.c +458 -0
  23. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-SSSE3.c +438 -0
  24. data/ext/{xkcp/lib/low/KeccakP-1600/plain-64bits → k12/lib/Plain64}/KeccakP-1600-SnP.h +14 -20
  25. data/ext/{xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h → k12/lib/Plain64/KeccakP-1600-plain64.c} +9 -8
  26. data/ext/{xkcp/lib/common → k12/lib}/align.h +3 -2
  27. data/ext/{xkcp/lib/common → k12/lib}/brg_endian.h +0 -0
  28. data/ext/{xkcp → k12}/support/Build/ExpandProducts.xsl +0 -0
  29. data/ext/{xkcp → k12}/support/Build/ToGlobalMakefile.xsl +0 -0
  30. data/ext/{xkcp → k12}/support/Build/ToOneTarget.xsl +0 -0
  31. data/ext/{xkcp → k12}/support/Build/ToTargetConfigFile.xsl +0 -0
  32. data/ext/{xkcp → k12}/support/Build/ToTargetMakefile.xsl +10 -16
  33. data/ext/{xkcp → k12}/support/Build/ToVCXProj.xsl +0 -0
  34. data/lib/sleeping_kangaroo12/version.rb +1 -1
  35. metadata +33 -276
  36. data/ext/config/xkcp.build +0 -17
  37. data/ext/xkcp/LICENSE +0 -1
  38. data/ext/xkcp/Makefile.build +0 -200
  39. data/ext/xkcp/README.markdown +0 -296
  40. data/ext/xkcp/lib/HighLevel.build +0 -143
  41. data/ext/xkcp/lib/LowLevel.build +0 -757
  42. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +0 -301
  43. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +0 -81
  44. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +0 -125
  45. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +0 -48
  46. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +0 -79
  47. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +0 -81
  48. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +0 -73
  49. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +0 -195
  50. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +0 -111
  51. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +0 -76
  52. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +0 -314
  53. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +0 -61
  54. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +0 -67
  55. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +0 -128
  56. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +0 -93
  57. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +0 -599
  58. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +0 -573
  59. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +0 -87
  60. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +0 -88
  61. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +0 -274
  62. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +0 -132
  63. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +0 -217
  64. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +0 -81
  65. data/ext/xkcp/lib/high/Keyak/Motorist.inc +0 -953
  66. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +0 -533
  67. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +0 -115
  68. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +0 -557
  69. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +0 -247
  70. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +0 -66
  71. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +0 -336
  72. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +0 -26
  73. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +0 -55
  74. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +0 -35
  75. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +0 -634
  76. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +0 -147
  77. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +0 -483
  78. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +0 -241
  79. data/ext/xkcp/lib/high/common/Phases.h +0 -25
  80. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +0 -41
  81. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +0 -1666
  82. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +0 -1655
  83. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +0 -1268
  84. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +0 -1264
  85. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +0 -1178
  86. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +0 -1175
  87. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +0 -1338
  88. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +0 -1336
  89. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +0 -1343
  90. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +0 -1339
  91. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +0 -42
  92. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +0 -823
  93. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +0 -831
  94. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +0 -31
  95. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +0 -540
  96. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +0 -42
  97. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +0 -733
  98. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +0 -1121
  99. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +0 -52
  100. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +0 -623
  101. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +0 -47
  102. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +0 -6
  103. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +0 -6
  104. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +0 -6
  105. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +0 -1031
  106. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +0 -53
  107. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +0 -44
  108. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +0 -476
  109. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +0 -6
  110. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +0 -6
  111. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +0 -305
  112. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +0 -420
  113. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +0 -43
  114. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +0 -565
  115. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +0 -7
  116. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +0 -7
  117. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +0 -8
  118. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +0 -6
  119. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +0 -6
  120. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +0 -44
  121. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +0 -23
  122. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +0 -625
  123. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +0 -44
  124. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +0 -440
  125. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +0 -42
  126. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +0 -1196
  127. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +0 -1124
  128. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +0 -1196
  129. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +0 -1392
  130. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +0 -1394
  131. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +0 -42
  132. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +0 -7
  133. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +0 -7
  134. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +0 -7
  135. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +0 -850
  136. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +0 -51
  137. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +0 -957
  138. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +0 -49
  139. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +0 -8
  140. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +0 -8
  141. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +0 -9
  142. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +0 -9
  143. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +0 -45
  144. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +0 -37
  145. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +0 -1321
  146. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +0 -55
  147. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +0 -7
  148. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +0 -7
  149. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +0 -7
  150. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +0 -7
  151. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +0 -7
  152. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +0 -7
  153. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +0 -881
  154. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +0 -51
  155. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +0 -45
  156. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +0 -37
  157. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +0 -45
  158. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +0 -38
  159. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +0 -1615
  160. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +0 -57
  161. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +0 -7
  162. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +0 -7
  163. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +0 -7
  164. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +0 -45
  165. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +0 -37
  166. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +0 -45
  167. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +0 -38
  168. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +0 -45
  169. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +0 -38
  170. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +0 -41
  171. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +0 -442
  172. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +0 -446
  173. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +0 -419
  174. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +0 -427
  175. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +0 -41
  176. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +0 -647
  177. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +0 -39
  178. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +0 -190
  179. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +0 -43
  180. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +0 -412
  181. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +0 -23
  182. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +0 -41
  183. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +0 -454
  184. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +0 -458
  185. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +0 -455
  186. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +0 -458
  187. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +0 -41
  188. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +0 -728
  189. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +0 -43
  190. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +0 -414
  191. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +0 -23
  192. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +0 -42
  193. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +0 -527
  194. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +0 -533
  195. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +0 -528
  196. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +0 -534
  197. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +0 -521
  198. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +0 -527
  199. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +0 -517
  200. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +0 -523
  201. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +0 -550
  202. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +0 -556
  203. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +0 -32
  204. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +0 -432
  205. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +0 -42
  206. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +0 -929
  207. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +0 -40
  208. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +0 -244
  209. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +0 -46
  210. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +0 -184
  211. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +0 -454
  212. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +0 -459
  213. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +0 -83
  214. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +0 -88
  215. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +0 -7
  216. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +0 -7
  217. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +0 -7
  218. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +0 -7
  219. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +0 -44
  220. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +0 -437
  221. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +0 -23
  222. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +0 -57
  223. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +0 -475
  224. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +0 -480
  225. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +0 -590
  226. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +0 -590
  227. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +0 -126
  228. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +0 -68
  229. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +0 -174
  230. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +0 -80
  231. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +0 -68
  232. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +0 -142
  233. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +0 -55
  234. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +0 -1086
  235. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +0 -1092
  236. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +0 -721
  237. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +0 -726
  238. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +0 -723
  239. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +0 -729
  240. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +0 -1164
  241. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +0 -1165
  242. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +0 -562
  243. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +0 -563
  244. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +0 -563
  245. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +0 -565
  246. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +0 -55
  247. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +0 -476
  248. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +0 -485
  249. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +0 -362
  250. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +0 -367
  251. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +0 -43
  252. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +0 -1341
  253. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +0 -581
  254. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +0 -58
  255. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +0 -332
  256. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +0 -329
  257. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +0 -53
  258. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +0 -355
  259. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +0 -79
  260. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +0 -56
  261. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +0 -399
  262. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +0 -127
  263. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +0 -43
  264. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +0 -253
  265. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +0 -1044
  266. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +0 -49
  267. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +0 -45
  268. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +0 -37
  269. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +0 -1587
  270. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +0 -48
  271. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +0 -1202
  272. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +0 -48
  273. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +0 -484
  274. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +0 -44
  275. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +0 -45
  276. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +0 -37
  277. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +0 -939
  278. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +0 -49
  279. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +0 -1216
  280. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +0 -48
  281. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +0 -45
  282. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +0 -37
  283. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +0 -290
  284. data/ext/xkcp/lib/low/common/SnP-Relaned.h +0 -141
  285. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +0 -133
  286. data/ext/xkcp/support/Kernel-PMU/Makefile +0 -8
  287. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +0 -129
  288. data/ext/xkcp/support/Kernel-PMU/load-module +0 -1
  289. data/ext/xkcp/util/KeccakSum/KeccakSum.c +0 -394
  290. data/ext/xkcp/util/KeccakSum/base64.c +0 -86
  291. data/ext/xkcp/util/KeccakSum/base64.h +0 -12
@@ -1,1655 +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 ARMv6M architecture (e.g., Cortex-M0) and the GCC compiler.
26
-
27
-
28
- .thumb
29
- .syntax unified
30
- .text
31
-
32
- @ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
33
- .macro toBitInterleaving in0,in1,out0,out1,t,tt,pMask
34
-
35
- mov \out0, \in0
36
- ldr \t, [\pMask, #0]
37
- ands \out0, \out0, \t
38
- lsrs \t, \out0, #1
39
- orrs \out0, \out0, \t
40
- ldr \t, [\pMask, #4]
41
- ands \out0, \out0, \t
42
- lsrs \t, \out0, #2
43
- orrs \out0, \out0, \t
44
- ldr \t, [\pMask, #8]
45
- ands \out0, \out0, \t
46
- lsrs \t, \out0, #4
47
- orrs \out0, \out0, \t
48
- ldr \t, [\pMask, #12]
49
- ands \out0, \out0, \t
50
- lsrs \t, \out0, #8
51
- orrs \out0, \out0, \t
52
-
53
- mov \out1, \in1
54
- ldr \t, [\pMask, #0]
55
- ands \out1, \out1, \t
56
- lsrs \t, \out1, #1
57
- orrs \out1, \out1, \t
58
- ldr \t, [\pMask, #4]
59
- ands \out1, \out1, \t
60
- lsrs \t, \out1, #2
61
- orrs \out1, \out1, \t
62
- ldr \t, [\pMask, #8]
63
- ands \out1, \out1, \t
64
- lsrs \t, \out1, #4
65
- orrs \out1, \out1, \t
66
- ldr \t, [\pMask, #12]
67
- ands \out1, \out1, \t
68
- lsrs \t, \out1, #8
69
- orrs \out1, \out1, \t
70
-
71
- lsls \out0, \out0, #16
72
- lsrs \out0, \out0, #16
73
- lsls \out1, \out1, #16
74
- orrs \out0, \out0, \out1
75
-
76
- mov \out1, \in0
77
- ldr \t, [\pMask, #16]
78
- ands \out1, \out1, \t
79
- lsls \t, \out1, #1
80
- orrs \out1, \out1, \t
81
- ldr \t, [\pMask, #20]
82
- ands \out1, \out1, \t
83
- lsls \t, \out1, #2
84
- orrs \out1, \out1, \t
85
- ldr \t, [\pMask, #24]
86
- ands \out1, \out1, \t
87
- lsls \t, \out1, #4
88
- orrs \out1, \out1, \t
89
- ldr \t, [\pMask, #28]
90
- ands \out1, \out1, \t
91
- lsls \t, \out1, #8
92
- orrs \out1, \out1, \t
93
-
94
- mov \tt, \in1
95
- ldr \t, [\pMask, #16]
96
- ands \tt, \tt, \t
97
- lsls \t, \tt, #1
98
- orrs \tt, \tt, \t
99
- ldr \t, [\pMask, #20]
100
- ands \tt, \tt, \t
101
- lsls \t, \tt, #2
102
- orrs \tt, \tt, \t
103
- ldr \t, [\pMask, #24]
104
- ands \tt, \tt, \t
105
- lsls \t, \tt, #4
106
- orrs \tt, \tt, \t
107
- ldr \t, [\pMask, #28]
108
- ands \tt, \tt, \t
109
- lsls \t, \tt, #8
110
- orrs \tt, \tt, \t
111
-
112
- lsrs \out1,\out1, #16
113
- lsrs \tt, \tt, #16
114
- lsls \tt, \tt, #16
115
- orrs \out1,\out1,\tt
116
- .endm
117
-
118
- @ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
119
- .macro fromBitInterleavingStep x, t, tt, pMask, maskofs, shift
120
-
121
- @ t = (x ^ (x >> shift)) & mask@ x = x ^ t ^ (t << shift)@
122
- lsrs \t, \x, #\shift
123
- eors \t, \t, \x
124
- ldr \tt, [\pMask, #\maskofs]
125
- ands \t, \t, \tt
126
- eors \x, \x, \t
127
- lsls \t, \t, #\shift
128
- eors \x, \x, \t
129
- .endm
130
-
131
- .macro fromBitInterleaving x0, x1, t, tt, pMask
132
- movs \t, \x0 @ t = x0
133
- lsls \x0, \x0, #16 @ x0 = (x0 & 0x0000FFFF) | (x1 << 16)@
134
- lsrs \x0, \x0, #16
135
- lsls \tt, \x1, #16
136
- orrs \x0, \x0, \tt
137
- lsrs \x1, \x1, #16 @ x1 = (t >> 16) | (x1 & 0xFFFF0000)@
138
- lsls \x1, \x1, #16
139
- lsrs \t, \t, #16
140
- orrs \x1, \x1, \t
141
- fromBitInterleavingStep \x0, \t, \tt, \pMask, 0, 8
142
- fromBitInterleavingStep \x0, \t, \tt, \pMask, 4, 4
143
- fromBitInterleavingStep \x0, \t, \tt, \pMask, 8, 2
144
- fromBitInterleavingStep \x0, \t, \tt, \pMask, 12, 1
145
- fromBitInterleavingStep \x1, \t, \tt, \pMask, 0, 8
146
- fromBitInterleavingStep \x1, \t, \tt, \pMask, 4, 4
147
- fromBitInterleavingStep \x1, \t, \tt, \pMask, 8, 2
148
- fromBitInterleavingStep \x1, \t, \tt, \pMask, 12, 1
149
- .endm
150
-
151
- @ --- offsets in state
152
- .equ Aba0 , 0*4
153
- .equ Aba1 , 1*4
154
- .equ Abe0 , 2*4
155
- .equ Abe1 , 3*4
156
- .equ Abi0 , 4*4
157
- .equ Abi1 , 5*4
158
- .equ Abo0 , 6*4
159
- .equ Abo1 , 7*4
160
- .equ Abu0 , 8*4
161
- .equ Abu1 , 9*4
162
- .equ Aga0 , 10*4
163
- .equ Aga1 , 11*4
164
- .equ Age0 , 12*4
165
- .equ Age1 , 13*4
166
- .equ Agi0 , 14*4
167
- .equ Agi1 , 15*4
168
- .equ Ago0 , 16*4
169
- .equ Ago1 , 17*4
170
- .equ Agu0 , 18*4
171
- .equ Agu1 , 19*4
172
- .equ Aka0 , 20*4
173
- .equ Aka1 , 21*4
174
- .equ Ake0 , 22*4
175
- .equ Ake1 , 23*4
176
- .equ Aki0 , 24*4
177
- .equ Aki1 , 25*4
178
- .equ Ako0 , 26*4
179
- .equ Ako1 , 27*4
180
- .equ Aku0 , 28*4
181
- .equ Aku1 , 29*4
182
- .equ Ama0 , 30*4
183
- .equ Ama1 , 31*4
184
- .equ Ame0 , 32*4
185
- .equ Ame1 , 33*4
186
- .equ Ami0 , 34*4
187
- .equ Ami1 , 35*4
188
- .equ Amo0 , 36*4
189
- .equ Amo1 , 37*4
190
- .equ Amu0 , 38*4
191
- .equ Amu1 , 39*4
192
- .equ Asa0 , 40*4
193
- .equ Asa1 , 41*4
194
- .equ Ase0 , 42*4
195
- .equ Ase1 , 43*4
196
- .equ Asi0 , 44*4
197
- .equ Asi1 , 45*4
198
- .equ Aso0 , 46*4
199
- .equ Aso1 , 47*4
200
- .equ Asu0 , 48*4
201
- .equ Asu1 , 49*4
202
-
203
- @ --- offsets on stack
204
- .equ mDa0 , 0*4
205
- .equ mDa1 , 1*4
206
- .equ mDo0 , 2*4
207
- .equ mDo1 , 3*4
208
- .equ mDi0 , 4*4
209
- .equ mRC , 5*4
210
- .equ mSize , 6*4
211
-
212
- @ --- macros
213
-
214
- .macro load result,prev,curr,last
215
-
216
- .if \prev >= (32*4) && \curr < (32*4)
217
- subs r0, #32*4
218
- .elseif \prev < (32*4) && \curr >= (32*4)
219
- adds r0, #32*4
220
- .endif
221
- .if \curr >= (32*4)
222
- ldr \result, [r0, #\curr-32*4]
223
- .if \last == 1
224
- subs r0, #32*4
225
- .endif
226
- .else
227
- ldr \result, [r0, #\curr]
228
- .endif
229
- .endm
230
-
231
- .macro store result,prev,curr,last
232
-
233
- .if \prev >= (32*4) && \curr < (32*4)
234
- subs r0, #32*4
235
- .elseif \prev < (32*4) && \curr >= (32*4)
236
- adds r0, #32*4
237
- .endif
238
- .if \curr >= (32*4)
239
- str \result, [r0, #\curr-32*4]
240
- .if \last == 1
241
- subs r0, #32*4
242
- .endif
243
- .else
244
- str \result, [r0, #\curr]
245
- .endif
246
- .endm
247
-
248
- .macro xor5 result,b,g,k,m,s, prev, last
249
-
250
- load \result, 0, \b, 0
251
- load r1, \b, \g, 0
252
- eors \result, \result, r1
253
- load r1, \g, \k, 0
254
- eors \result, \result, r1
255
- load r1, \k, \m, 0
256
- eors \result, \result, r1
257
- load r1, \m, \s, 1
258
- eors \result, \result, r1
259
- .endm
260
-
261
- .macro xorrol result, aa, bb
262
- movs \result, \bb
263
- rors \result, r2
264
- eors \result, \result, \aa
265
- .endm
266
-
267
- .macro xorrolR2 aa, bb
268
- rors \bb, r2
269
- eors \bb, \bb, \aa
270
- .endm
271
-
272
- .macro xorh result, aa, bb
273
- mov r1, \bb
274
- eors r1, r1, \aa
275
- mov \result, r1
276
- .endm
277
-
278
-
279
- .macro xandnot resofs, aa, bb, cc, prev, last
280
- movs r1, \cc
281
- bics r1, r1, \bb
282
- eors r1, r1, \aa
283
- store r1, \prev, \resofs, \last
284
- .endm
285
-
286
- .macro xandnotR4 resofs, aa, bb, cc, prev, last
287
- bics \cc, \cc, \bb
288
- eors \cc, \cc, \aa
289
- store \cc, \prev, \resofs, \last
290
- .endm
291
-
292
- .macro KeccakThetaRhoPiChiIota aA1, aDax, aA2, aDex, rot2, aA3, aDix, rot3, aA4, aDox, rot4, aA5, aDux, rot5, offset, last
293
- load r3, 0, \aA1, 0
294
- load r4, \aA1, \aA2, 0
295
- load r5, \aA2, \aA3, 0
296
- load r6, \aA3, \aA4, 0
297
- load r7, \aA4, \aA5, 0
298
-
299
- mov r1, \aDax
300
- eors r3, r3, r1
301
- eors r5, r5, \aDix
302
- mov r1, \aDex
303
- eors r4, r4, r1
304
- mov r1, \aDox
305
- eors r6, r6, r1
306
- mov r1, \aDux
307
- eors r7, r7, r1
308
- movs r1, #32-\rot2
309
- rors r4, r1
310
- movs r1, #32-\rot3
311
- rors r5, r1
312
- movs r1, #32-\rot4
313
- rors r6, r1
314
- movs r1, #32-\rot5
315
- rors r7, r1
316
- xandnot \aA2, r4, r5, r6, \aA5, 0
317
- xandnot \aA3, r5, r6, r7, \aA2, 0
318
- xandnot \aA4, r6, r7, r3, \aA3, 0
319
- xandnot \aA5, r7, r3, r4, \aA4, 1
320
- ldr r1, [sp, #mRC]
321
- bics r5, r5, r4
322
- ldr r4, [r1, #\offset]
323
- eors r3, r3, r5
324
- eors r3, r3, r4
325
- .if \last == 1
326
- adds r1, #32
327
- ldr r2, [r1]
328
- str r1, [sp, #mRC]
329
- cmp r2, #0xFF
330
- .endif
331
- str r3, [r0, #\aA1]
332
- .endm
333
-
334
- .macro KeccakThetaRhoPiChi aB1, aA1, aDax, rot1, aB2, aA2, aDex, rot2, aB3, aA3, aDix, rot3, aB4, aA4, aDox, rot4, aB5, aA5, aDux, rot5
335
- load \aB1, 0, \aA1, 0
336
- load \aB2, \aA1, \aA2, 0
337
- load \aB3, \aA2, \aA3, 0
338
- load \aB4, \aA3, \aA4, 0
339
- load \aB5, \aA4, \aA5, 0
340
-
341
- mov r1, \aDax
342
- eors \aB1, \aB1, r1
343
- eors \aB3, \aB3, \aDix
344
- mov r1, \aDex
345
- eors \aB2, \aB2, r1
346
- mov r1, \aDox
347
- eors \aB4, \aB4, r1
348
- mov r1, \aDux
349
- eors \aB5, \aB5, r1
350
- movs r1, #32-\rot1
351
- rors \aB1, r1
352
- .if \rot2 > 0
353
- movs r1, #32-\rot2
354
- rors \aB2, r1
355
- .endif
356
- movs r1, #32-\rot3
357
- rors \aB3, r1
358
- movs r1, #32-\rot4
359
- rors \aB4, r1
360
- movs r1, #32-\rot5
361
- rors \aB5, r1
362
- xandnot \aA1, r3, r4, r5, \aA5, 0
363
- xandnot \aA2, r4, r5, r6, \aA1, 0
364
- xandnotR4 \aA5, r7, r3, r4, \aA2, 0
365
- xandnotR4 \aA4, r6, r7, r3, \aA5, 0
366
- xandnotR4 \aA3, r5, r6, r7, \aA4, 1
367
- .endm
368
-
369
- .macro KeccakRound0
370
- movs r2, #31
371
- xor5 r3, Abu0, Agu0, Aku0, Amu0, Asu0, 0, 0
372
- xor5 r7, Abe1, Age1, Ake1, Ame1, Ase1, Asu0, 0
373
- xorrol r6, r3, r7
374
- str r6, [sp, #mDa0]
375
- xor5 r6, Abu1, Agu1, Aku1, Amu1, Asu1, Ase1, 0
376
- xor5 r5, Abe0, Age0, Ake0, Ame0, Ase0, Asu1, 0
377
- xorh r8, r6, r5
378
- mov lr, r5
379
- str r1, [sp, #mDa1]
380
-
381
- xor5 r5, Abi0, Agi0, Aki0, Ami0, Asi0, Ase0, 0
382
- xorrolR2 r5, r6
383
- str r6, [sp, #mDo0]
384
- xor5 r4, Abi1, Agi1, Aki1, Ami1, Asi1, Asi0, 0
385
- eors r3, r3, r4
386
- str r3, [sp, #mDo1]
387
-
388
- xor5 r3, Aba0, Aga0, Aka0, Ama0, Asa0, Asi1, 0
389
- xorrolR2 r3, r4
390
- mov r10, r4
391
- xor5 r6, Aba1, Aga1, Aka1, Ama1, Asa1, Asa0, 0
392
- xorh r11, r6, r5
393
-
394
- xor5 r4, Abo1, Ago1, Ako1, Amo1, Aso1, Asa1, 0
395
- mov r1, lr
396
- xorrol r5, r1, r4
397
- str r5, [sp, #mDi0]
398
- xor5 r5, Abo0, Ago0, Ako0, Amo0, Aso0, Aso1, 1
399
- eors r7, r7, r5
400
-
401
- xorrolR2 r5, r6
402
- mov r12, r6
403
- eors r4, r4, r3
404
- mov lr, r4
405
- movs r2, r7
406
-
407
- ldr r1, [sp, #mDo0]
408
- mov r9, r1
409
- KeccakThetaRhoPiChi r5, Aka1, r8, 2, r6, Ame1, r11, 23, r7, Asi1, r2, 31, r3, Abo0, r9, 14, r4, Agu0, r12, 10
410
- KeccakThetaRhoPiChi r7, Asa1, r8, 9, r3, Abe0, r10, 0, r4, Agi1, r2, 3, r5, Ako0, r9, 12, r6, Amu1, lr, 4
411
- ldr r1, [sp, #mDa0]
412
- mov r8, r1
413
- KeccakThetaRhoPiChi r4, Aga0, r8, 18, r5, Ake0, r10, 5, r6, Ami1, r2, 8, r7, Aso0, r9, 28, r3, Abu1, lr, 14
414
- KeccakThetaRhoPiChi r6, Ama0, r8, 20, r7, Ase1, r11, 1, r3, Abi1, r2, 31, r4, Ago0, r9, 27, r5, Aku0, r12, 19
415
- ldr r1, [sp, #mDo1]
416
- mov r9, r1
417
- KeccakThetaRhoPiChiIota Aba0, r8, Age0, r10, 22, Aki1, r2, 22, Amo1, r9, 11, Asu0, r12, 7, 0, 0
418
-
419
- ldr r2, [sp, #mDi0]
420
- KeccakThetaRhoPiChi r5, Aka0, r8, 1, r6, Ame0, r10, 22, r7, Asi0, r2, 30, r3, Abo1, r9, 14, r4, Agu1, lr, 10
421
- KeccakThetaRhoPiChi r7, Asa0, r8, 9, r3, Abe1, r11, 1, r4, Agi0, r2, 3, r5, Ako1, r9, 13, r6, Amu0, r12, 4
422
- ldr r1, [sp, #mDa1]
423
- mov r8, r1
424
- KeccakThetaRhoPiChi r4, Aga1, r8, 18, r5, Ake1, r11, 5, r6, Ami0, r2, 7, r7, Aso1, r9, 28, r3, Abu0, r12, 13
425
- KeccakThetaRhoPiChi r6, Ama1, r8, 21, r7, Ase0, r10, 1, r3, Abi0, r2, 31, r4, Ago1, r9, 28, r5, Aku1, lr, 20
426
- ldr r1, [sp, #mDo0]
427
- mov r9, r1
428
- KeccakThetaRhoPiChiIota Aba1, r8, Age1, r11, 22, Aki0, r2, 21, Amo0, r9, 10, Asu1, lr, 7, 4, 0
429
- .endm
430
-
431
- .macro KeccakRound1
432
-
433
- movs r2, #31
434
- xor5 r3, Asu0, Agu0, Amu0, Abu1, Aku1, 0, 0
435
- xor5 r7, Age1, Ame0, Abe0, Ake1, Ase1, Aku1, 0
436
- xorrol r6, r3, r7
437
- str r6, [sp, #mDa0]
438
- xor5 r6, Asu1, Agu1, Amu1, Abu0, Aku0, Ase1, 0
439
- xor5 r5, Age0, Ame1, Abe1, Ake0, Ase0, Aku0, 0
440
- xorh r8, r6, r5
441
- mov lr, r5
442
- str r1, [sp, #mDa1]
443
-
444
- xor5 r5, Aki1, Asi1, Agi0, Ami1, Abi0, Ase0, 0
445
- xorrolR2 r5, r6
446
- str r6, [sp, #mDo0]
447
- xor5 r4, Aki0, Asi0, Agi1, Ami0, Abi1, Abi0, 0
448
- eors r3, r3, r4
449
- str r3, [sp, #mDo1]
450
-
451
- xor5 r3, Aba0, Aka1, Asa0, Aga0, Ama1, Abi1, 0
452
- xorrolR2 r3, r4
453
- mov r10, r4
454
- xor5 r6, Aba1, Aka0, Asa1, Aga1, Ama0, Ama1, 0
455
- xorh r11, r6, r5
456
-
457
- xor5 r4, Amo0, Abo1, Ako0, Aso1, Ago0, Ama0, 0
458
- mov r1, lr
459
- xorrol r5, r1, r4
460
- str r5, [sp, #mDi0]
461
- xor5 r5, Amo1, Abo0, Ako1, Aso0, Ago1, Ago0, 1
462
- eors r7, r7, r5
463
-
464
- xorrolR2 r5, r6
465
- mov r12, r6
466
- eors r4, r4, r3
467
- mov lr, r4
468
- movs r2, r7
469
-
470
- ldr r1, [sp, #mDo0]
471
- mov r9, r1
472
- KeccakThetaRhoPiChi r5, Asa1, r8, 2, r6, Ake1, r11, 23, r7, Abi1, r2, 31, r3, Amo1, r9, 14, r4, Agu0, r12, 10
473
- KeccakThetaRhoPiChi r7, Ama0, r8, 9, r3, Age0, r10, 0, r4, Asi0, r2, 3, r5, Ako1, r9, 12, r6, Abu0, lr, 4
474
- ldr r1, [sp, #mDa0]
475
- mov r8, r1
476
- KeccakThetaRhoPiChi r4, Aka1, r8, 18, r5, Abe1, r10, 5, r6, Ami0, r2, 8, r7, Ago1, r9, 28, r3, Asu1, lr, 14
477
- KeccakThetaRhoPiChi r6, Aga0, r8, 20, r7, Ase1, r11, 1, r3, Aki0, r2, 31, r4, Abo0, r9, 27, r5, Amu0, r12, 19
478
- ldr r1, [sp, #mDo1]
479
- mov r9, r1
480
- KeccakThetaRhoPiChiIota Aba0, r8, Ame1, r10, 22, Agi1, r2, 22, Aso1, r9, 11, Aku1, r12, 7, 8, 0
481
-
482
- ldr r2, [sp, #mDi0]
483
- KeccakThetaRhoPiChi r5, Asa0, r8, 1, r6, Ake0, r10, 22, r7, Abi0, r2, 30, r3, Amo0, r9, 14, r4, Agu1, lr, 10
484
- KeccakThetaRhoPiChi r7, Ama1, r8, 9, r3, Age1, r11, 1, r4, Asi1, r2, 3, r5, Ako0, r9, 13, r6, Abu1, r12, 4
485
- ldr r1, [sp, #mDa1]
486
- mov r8, r1
487
- KeccakThetaRhoPiChi r4, Aka0, r8, 18, r5, Abe0, r11, 5, r6, Ami1, r2, 7, r7, Ago0, r9, 28, r3, Asu0, r12, 13
488
- KeccakThetaRhoPiChi r6, Aga1, r8, 21, r7, Ase0, r10, 1, r3, Aki1, r2, 31, r4, Abo1, r9, 28, r5, Amu1, lr, 20
489
- ldr r1, [sp, #mDo0]
490
- mov r9, r1
491
- KeccakThetaRhoPiChiIota Aba1, r8, Ame0, r11, 22, Agi0, r2, 21, Aso0, r9, 10, Aku0, lr, 7, 12, 0
492
- .endm
493
-
494
- .macro KeccakRound2
495
-
496
- movs r2, #31
497
- xor5 r3, Aku1, Agu0, Abu1, Asu1, Amu1, 0, 0
498
- xor5 r7, Ame0, Ake0, Age0, Abe0, Ase1, Amu1, 0
499
- xorrol r6, r3, r7
500
- str r6, [sp, #mDa0]
501
- xor5 r6, Aku0, Agu1, Abu0, Asu0, Amu0, Ase1, 0
502
- xor5 r5, Ame1, Ake1, Age1, Abe1, Ase0, Amu0, 0
503
- xorh r8, r6, r5
504
- mov lr, r5
505
- str r1, [sp, #mDa1]
506
-
507
- xor5 r5, Agi1, Abi1, Asi1, Ami0, Aki1, Ase0, 0
508
- xorrolR2 r5, r6
509
- str r6, [sp, #mDo0]
510
- xor5 r4, Agi0, Abi0, Asi0, Ami1, Aki0, Aki1, 0
511
- eors r3, r3, r4
512
- str r3, [sp, #mDo1]
513
-
514
- xor5 r3, Aba0, Asa1, Ama1, Aka1, Aga1, Aki0, 0
515
- xorrolR2 r3, r4
516
- mov r10, r4
517
- xor5 r6, Aba1, Asa0, Ama0, Aka0, Aga0, Aga1, 0
518
- xorh r11, r6, r5
519
-
520
- xor5 r4, Aso0, Amo0, Ako1, Ago0, Abo0, Aga0, 0
521
- mov r1, lr
522
- xorrol r5, r1, r4
523
- str r5, [sp, #mDi0]
524
- xor5 r5, Aso1, Amo1, Ako0, Ago1, Abo1, Abo0, 1
525
- eors r7, r7, r5
526
-
527
- xorrolR2 r5, r6
528
- mov r12, r6
529
- eors r4, r4, r3
530
- mov lr, r4
531
- movs r2, r7
532
-
533
- ldr r1, [sp, #mDo0]
534
- mov r9, r1
535
- KeccakThetaRhoPiChi r5, Ama0, r8, 2, r6, Abe0, r11, 23, r7, Aki0, r2, 31, r3, Aso1, r9, 14, r4, Agu0, r12, 10
536
- KeccakThetaRhoPiChi r7, Aga0, r8, 9, r3, Ame1, r10, 0, r4, Abi0, r2, 3, r5, Ako0, r9, 12, r6, Asu0, lr, 4
537
- ldr r1, [sp, #mDa0]
538
- mov r8, r1
539
- KeccakThetaRhoPiChi r4, Asa1, r8, 18, r5, Age1, r10, 5, r6, Ami1, r2, 8, r7, Abo1, r9, 28, r3, Aku0, lr, 14
540
- KeccakThetaRhoPiChi r6, Aka1, r8, 20, r7, Ase1, r11, 1, r3, Agi0, r2, 31, r4, Amo1, r9, 27, r5, Abu1, r12, 19
541
- ldr r1, [sp, #mDo1]
542
- mov r9, r1
543
- KeccakThetaRhoPiChiIota Aba0, r8, Ake1, r10, 22, Asi0, r2, 22, Ago0, r9, 11, Amu1, r12, 7, 16, 0
544
-
545
- ldr r2, [sp, #mDi0]
546
- KeccakThetaRhoPiChi r5, Ama1, r8, 1, r6, Abe1, r10, 22, r7, Aki1, r2, 30, r3, Aso0, r9, 14, r4, Agu1, lr, 10
547
- KeccakThetaRhoPiChi r7, Aga1, r8, 9, r3, Ame0, r11, 1, r4, Abi1, r2, 3, r5, Ako1, r9, 13, r6, Asu1, r12, 4
548
- ldr r1, [sp, #mDa1]
549
- mov r8, r1
550
- KeccakThetaRhoPiChi r4, Asa0, r8, 18, r5, Age0, r11, 5, r6, Ami0, r2, 7, r7, Abo0, r9, 28, r3, Aku1, r12, 13
551
- KeccakThetaRhoPiChi r6, Aka0, r8, 21, r7, Ase0, r10, 1, r3, Agi1, r2, 31, r4, Amo0, r9, 28, r5, Abu0, lr, 20
552
- ldr r1, [sp, #mDo0]
553
- mov r9, r1
554
- KeccakThetaRhoPiChiIota Aba1, r8, Ake0, r11, 22, Asi1, r2, 21, Ago1, r9, 10, Amu0, lr, 7, 20, 0
555
- .endm
556
-
557
- .macro KeccakRound3
558
-
559
- movs r2, #31
560
- xor5 r3, Amu1, Agu0, Asu1, Aku0, Abu0, 0, 0
561
- xor5 r7, Ake0, Abe1, Ame1, Age0, Ase1, Abu0, 0
562
- xorrol r6, r3, r7
563
- str r6, [sp, #mDa0]
564
- xor5 r6, Amu0, Agu1, Asu0, Aku1, Abu1, Ase1, 0
565
- xor5 r5, Ake1, Abe0, Ame0, Age1, Ase0, Abu1, 0
566
- xorh r8, r6, r5
567
- mov lr, r5
568
- str r1, [sp, #mDa1]
569
-
570
- xor5 r5, Asi0, Aki0, Abi1, Ami1, Agi1, Ase0, 0
571
- xorrolR2 r5, r6
572
- str r6, [sp, #mDo0]
573
- xor5 r4, Asi1, Aki1, Abi0, Ami0, Agi0, Agi1, 0
574
- eors r3, r3, r4
575
- str r3, [sp, #mDo1]
576
-
577
- xor5 r3, Aba0, Ama0, Aga1, Asa1, Aka0, Agi0, 0
578
- xorrolR2 r3, r4
579
- mov r10, r4
580
- xor5 r6, Aba1, Ama1, Aga0, Asa0, Aka1, Aka0, 0
581
- xorh r11, r6, r5
582
-
583
- xor5 r4, Ago1, Aso0, Ako0, Abo0, Amo1, Aka1, 0
584
- mov r1, lr
585
- xorrol r5, r1, r4
586
- str r5, [sp, #mDi0]
587
- xor5 r5, Ago0, Aso1, Ako1, Abo1, Amo0, Amo1, 1
588
- eors r7, r7, r5
589
-
590
- xorrolR2 r5, r6
591
- mov r12, r6
592
- eors r4, r4, r3
593
- mov lr, r4
594
- movs r2, r7
595
-
596
- ldr r1, [sp, #mDo0]
597
- mov r9, r1
598
- KeccakThetaRhoPiChi r5, Aga0, r8, 2, r6, Age0, r11, 23, r7, Agi0, r2, 31, r3, Ago0, r9, 14, r4, Agu0, r12, 10
599
- KeccakThetaRhoPiChi r7, Aka1, r8, 9, r3, Ake1, r10, 0, r4, Aki1, r2, 3, r5, Ako1, r9, 12, r6, Aku1, lr, 4
600
- ldr r1, [sp, #mDa0]
601
- mov r8, r1
602
- KeccakThetaRhoPiChi r4, Ama0, r8, 18, r5, Ame0, r10, 5, r6, Ami0, r2, 8, r7, Amo0, r9, 28, r3, Amu0, lr, 14
603
- KeccakThetaRhoPiChi r6, Asa1, r8, 20, r7, Ase1, r11, 1, r3, Asi1, r2, 31, r4, Aso1, r9, 27, r5, Asu1, r12, 19
604
- ldr r1, [sp, #mDo1]
605
- mov r9, r1
606
- KeccakThetaRhoPiChiIota Aba0, r8, Abe0, r10, 22, Abi0, r2, 22, Abo0, r9, 11, Abu0, r12, 7, 24, 0
607
-
608
- ldr r2, [sp, #mDi0]
609
- KeccakThetaRhoPiChi r5, Aga1, r8, 1, r6, Age1, r10, 22, r7, Agi1, r2, 30, r3, Ago1, r9, 14, r4, Agu1, lr, 10
610
- KeccakThetaRhoPiChi r7, Aka0, r8, 9, r3, Ake0, r11, 1, r4, Aki0, r2, 3, r5, Ako0, r9, 13, r6, Aku0, r12, 4
611
- ldr r1, [sp, #mDa1]
612
- mov r8, r1
613
- KeccakThetaRhoPiChi r4, Ama1, r8, 18, r5, Ame1, r11, 5, r6, Ami1, r2, 7, r7, Amo1, r9, 28, r3, Amu1, r12, 13
614
- KeccakThetaRhoPiChi r6, Asa0, r8, 21, r7, Ase0, r10, 1, r3, Asi0, r2, 31, r4, Aso0, r9, 28, r5, Asu0, lr, 20
615
- ldr r1, [sp, #mDo0]
616
- mov r9, r1
617
- KeccakThetaRhoPiChiIota Aba1, r8, Abe1, r11, 22, Abi1, r2, 21, Abo1, r9, 10, Abu1, lr, 7, 28, 1
618
- .endm
619
-
620
- @----------------------------------------------------------------------------
621
- @
622
- @ void KeccakP1600_StaticInitialize( void )
623
- @
624
- .align 8
625
- .global KeccakP1600_StaticInitialize
626
- .type KeccakP1600_StaticInitialize, %function;
627
- KeccakP1600_StaticInitialize:
628
- bx lr
629
-
630
-
631
- @----------------------------------------------------------------------------
632
- @
633
- @ void KeccakP1600_Initialize(void *state)
634
- @
635
- .align 8
636
- .global KeccakP1600_Initialize
637
- .type KeccakP1600_Initialize, %function;
638
- KeccakP1600_Initialize:
639
- push {r4 - r5}
640
- movs r1, #0
641
- movs r2, #0
642
- movs r3, #0
643
- movs r4, #0
644
- movs r5, #0
645
- stmia r0!, { r1 - r5 }
646
- stmia r0!, { r1 - r5 }
647
- stmia r0!, { r1 - r5 }
648
- stmia r0!, { r1 - r5 }
649
- stmia r0!, { r1 - r5 }
650
- stmia r0!, { r1 - r5 }
651
- stmia r0!, { r1 - r5 }
652
- stmia r0!, { r1 - r5 }
653
- stmia r0!, { r1 - r5 }
654
- stmia r0!, { r1 - r5 }
655
- pop {r4 - r5}
656
- bx lr
657
-
658
-
659
- @ ----------------------------------------------------------------------------
660
- @
661
- @ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
662
- @
663
- .align 8
664
- .global KeccakP1600_AddByte
665
- .type KeccakP1600_AddByte, %function;
666
- KeccakP1600_AddByte:
667
- push {r4 - r7}
668
- mov r4, r8
669
- mov r5, r9
670
- push {r4 - r5}
671
- lsrs r4, r2, #3 @ offset &= ~7
672
- lsls r4, r4, #3
673
- adds r0, r0, r4 @ add whole lane offset to state pointer
674
- lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
675
- lsrs r2, r2, #29
676
- adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
677
- movs r4, #0
678
- movs r5, #0
679
- push { r4 - r5 }
680
- add r2, r2, sp
681
- strb r1, [r2]
682
- pop { r4 - r5 }
683
- mov r8, r4
684
- mov r9, r5
685
- toBitInterleaving r8, r9, r4, r5, r6, r2, r7
686
- ldr r6, [r0]
687
- eors r4, r4, r6
688
- ldr r6, [r0, #4]
689
- eors r5, r5, r6
690
- stmia r0!, { r4, r5 }
691
- pop {r4 - r5}
692
- mov r8, r4
693
- mov r9, r5
694
- pop {r4 - r7}
695
- bx lr
696
-
697
-
698
- @----------------------------------------------------------------------------
699
- @
700
- @ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
701
- @
702
- .align 8
703
- .global KeccakP1600_AddBytes
704
- .type KeccakP1600_AddBytes, %function;
705
- KeccakP1600_AddBytes:
706
- cmp r3, #0 @ .if length != 0
707
- beq KeccakP1600_AddBytes_Exit1
708
- push {r4 - r6, lr} @ then
709
- mov r4, r8
710
- mov r5, r9
711
- mov r6, r10
712
- push {r4 - r7}
713
- lsrs r4, r2, #3 @ offset &= ~7
714
- lsls r4, r4, #3
715
- adds r0, r0, r4 @ add whole lane offset to state pointer
716
- lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
717
- lsrs r2, r2, #29
718
- beq KeccakP1600_AddBytes_CheckLanes @ .if offset != 0
719
- movs r4, r3 @ then, do remaining bytes in first lane
720
- movs r5, #8
721
- subs r5, r2 @ max size in lane = 8 - offset
722
- cmp r4, r5
723
- ble KeccakP1600_AddBytes_BytesAlign
724
- movs r4, r5
725
- KeccakP1600_AddBytes_BytesAlign:
726
- subs r3, r3, r4 @ size left
727
- mov r10, r3
728
- movs r3, r4
729
- adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
730
- bl __KeccakP1600_AddBytesInLane
731
- mov r3, r10
732
- KeccakP1600_AddBytes_CheckLanes:
733
- lsrs r2, r3, #3 @ .if length >= 8
734
- beq KeccakP1600_AddBytes_Bytes
735
- mov r10, r3
736
- adr r3, KeccakP1600_AddBytes_ToBitInterleavingConstants
737
- bl __KeccakP1600_AddLanes
738
- mov r3, r10
739
- lsls r3, r3, #29
740
- lsrs r3, r3, #29
741
- KeccakP1600_AddBytes_Bytes:
742
- cmp r3, #0
743
- beq KeccakP1600_AddBytes_Exit
744
- movs r2, #0
745
- adr r7, KeccakP1600_AddBytes_ToBitInterleavingConstants
746
- bl __KeccakP1600_AddBytesInLane
747
- KeccakP1600_AddBytes_Exit:
748
- pop {r4 - r7}
749
- mov r8, r4
750
- mov r9, r5
751
- mov r10, r6
752
- pop {r4 - r6, pc}
753
- KeccakP1600_AddBytes_Exit1:
754
- bx lr
755
- nop
756
- KeccakP1600_AddBytes_ToBitInterleavingConstants:
757
- .long 0x55555555
758
- .long 0x33333333
759
- .long 0x0F0F0F0F
760
- .long 0x00FF00FF
761
- .long 0xAAAAAAAA
762
- .long 0xCCCCCCCC
763
- .long 0xF0F0F0F0
764
- .long 0xFF00FF00
765
-
766
-
767
- @----------------------------------------------------------------------------
768
- @
769
- @ __KeccakP1600_AddLanes
770
- @
771
- @ Input:
772
- @ r0 state pointer
773
- @ r1 data pointer
774
- @ r2 laneCount
775
- @ r3 to bit interleaving constants pointer
776
- @
777
- @ Output:
778
- @ r0 state pointer next lane
779
- @ r1 data pointer next byte to input
780
- @
781
- @ Changed: r2-r9
782
- @
783
- .align 8
784
- __KeccakP1600_AddLanes:
785
- lsls r4, r1, #30
786
- bne __KeccakP1600_AddLanes_LoopUnaligned
787
- __KeccakP1600_AddLanes_LoopAligned:
788
- ldmia r1!, {r6,r7}
789
- mov r8, r6
790
- mov r9, r7
791
- toBitInterleaving r8, r9, r6, r7, r5, r4, r3
792
- ldr r5, [r0]
793
- eors r6, r6, r5
794
- ldr r5, [r0, #4]
795
- eors r7, r7, r5
796
- stmia r0!, {r6,r7}
797
- subs r2, r2, #1
798
- bne __KeccakP1600_AddLanes_LoopAligned
799
- bx lr
800
- __KeccakP1600_AddLanes_LoopUnaligned:
801
- ldrb r6, [r1, #0]
802
- ldrb r4, [r1, #1]
803
- lsls r4, r4, #8
804
- orrs r6, r6, r4
805
- ldrb r4, [r1, #2]
806
- lsls r4, r4, #16
807
- orrs r6, r6, r4
808
- ldrb r4, [r1, #3]
809
- lsls r4, r4, #24
810
- orrs r6, r6, r4
811
- ldrb r7, [r1, #4]
812
- ldrb r4, [r1, #5]
813
- lsls r4, r4, #8
814
- orrs r7, r7, r4
815
- ldrb r4, [r1, #6]
816
- lsls r4, r4, #16
817
- orrs r7, r7, r4
818
- ldrb r4, [r1, #7]
819
- lsls r4, r4, #24
820
- orrs r7, r7, r4
821
- adds r1, r1, #8
822
- mov r8, r6
823
- mov r9, r7
824
- toBitInterleaving r8, r9, r6, r7, r5, r4, r3
825
- ldr r5, [r0]
826
- eors r6, r6, r5
827
- ldr r5, [r0, #4]
828
- eors r7, r7, r5
829
- stmia r0!, {r6, r7}
830
- subs r2, r2, #1
831
- bne __KeccakP1600_AddLanes_LoopUnaligned
832
- bx lr
833
-
834
-
835
- @----------------------------------------------------------------------------
836
- @
837
- @ __KeccakP1600_AddBytesInLane
838
- @
839
- @ Input:
840
- @ r0 state pointer
841
- @ r1 data pointer
842
- @ r2 offset in lane
843
- @ r3 length
844
- @ r7 to bit interleaving constants pointer
845
- @
846
- @ Output:
847
- @ r0 state pointer next lane
848
- @ r1 data pointer next byte to input
849
- @
850
- @ Changed: r2-r9
851
- @
852
- .align 8
853
- __KeccakP1600_AddBytesInLane:
854
- movs r4, #0
855
- movs r5, #0
856
- push { r4 - r5 }
857
- add r2, r2, sp
858
- __KeccakP1600_AddBytesInLane_Loop:
859
- ldrb r5, [r1]
860
- strb r5, [r2]
861
- adds r1, r1, #1
862
- adds r2, r2, #1
863
- subs r3, r3, #1
864
- bne __KeccakP1600_AddBytesInLane_Loop
865
- pop { r4 - r5 }
866
- mov r8, r4
867
- mov r9, r5
868
- toBitInterleaving r8, r9, r4, r5, r6, r2, r7
869
- ldr r6, [r0]
870
- eors r4, r4, r6
871
- ldr r6, [r0, #4]
872
- eors r5, r5, r6
873
- stmia r0!, { r4, r5 }
874
- bx lr
875
-
876
-
877
- @----------------------------------------------------------------------------
878
- @
879
- @ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
880
- @
881
- .align 8
882
- .global KeccakP1600_OverwriteBytes
883
- .type KeccakP1600_OverwriteBytes, %function;
884
- KeccakP1600_OverwriteBytes:
885
- cmp r3, #0 @ .if length != 0
886
- beq KeccakP1600_OverwriteBytes_Exit1
887
- push {r4 - r6, lr} @ then
888
- mov r4, r8
889
- mov r5, r9
890
- mov r6, r10
891
- push {r4 - r7}
892
- lsrs r4, r2, #3 @ offset &= ~7
893
- lsls r4, r4, #3
894
- adds r0, r0, r4 @ add whole lane offset to state pointer
895
- lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
896
- lsrs r2, r2, #29
897
- beq KeccakP1600_OverwriteBytes_CheckLanes @ .if offset != 0
898
- movs r4, r3 @ then, do remaining bytes in first lane
899
- movs r5, #8
900
- subs r5, r2 @ max size in lane = 8 - offset
901
- cmp r4, r5
902
- ble KeccakP1600_OverwriteBytes_BytesAlign
903
- movs r4, r5
904
- KeccakP1600_OverwriteBytes_BytesAlign:
905
- subs r3, r3, r4 @ size left
906
- mov r10, r3
907
- movs r3, r4
908
- adr r7, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
909
- bl __KeccakP1600_OverwriteBytesInLane
910
- mov r3, r10
911
- KeccakP1600_OverwriteBytes_CheckLanes:
912
- lsrs r2, r3, #3 @ .if length >= 8
913
- beq KeccakP1600_OverwriteBytes_Bytes
914
- mov r10, r3
915
- adr r3, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
916
- bl __KeccakP1600_OverwriteLanes
917
- mov r3, r10
918
- lsls r3, r3, #29
919
- lsrs r3, r3, #29
920
- KeccakP1600_OverwriteBytes_Bytes:
921
- cmp r3, #0
922
- beq KeccakP1600_OverwriteBytes_Exit
923
- movs r2, #0
924
- adr r7, KeccakP1600_OverwriteBytes_ToBitInterleavingConstants
925
- bl __KeccakP1600_OverwriteBytesInLane
926
- KeccakP1600_OverwriteBytes_Exit:
927
- pop {r4 - r7}
928
- mov r8, r4
929
- mov r9, r5
930
- mov r10, r6
931
- pop {r4 - r6, pc}
932
- KeccakP1600_OverwriteBytes_Exit1:
933
- bx lr
934
- nop
935
- KeccakP1600_OverwriteBytes_ToBitInterleavingConstants:
936
- .long 0x55555555
937
- .long 0x33333333
938
- .long 0x0F0F0F0F
939
- .long 0x00FF00FF
940
- .long 0xAAAAAAAA
941
- .long 0xCCCCCCCC
942
- .long 0xF0F0F0F0
943
- .long 0xFF00FF00
944
-
945
-
946
- @----------------------------------------------------------------------------
947
- @
948
- @ __KeccakP1600_OverwriteLanes
949
- @
950
- @ Input:
951
- @ r0 state pointer
952
- @ r1 data pointer
953
- @ r2 laneCount
954
- @ r3 to bit interleaving constants pointer
955
- @
956
- @ Output:
957
- @ r0 state pointer next lane
958
- @ r1 data pointer next byte to input
959
- @
960
- @ Changed: r2-r9
961
- @
962
- .align 8
963
- __KeccakP1600_OverwriteLanes:
964
- lsls r4, r1, #30
965
- bne __KeccakP1600_OverwriteLanes_LoopUnaligned
966
- __KeccakP1600_OverwriteLanes_LoopAligned:
967
- ldmia r1!, {r6,r7}
968
- mov r8, r6
969
- mov r9, r7
970
- toBitInterleaving r8, r9, r6, r7, r5, r4, r3
971
- stmia r0!, {r6,r7}
972
- subs r2, r2, #1
973
- bne __KeccakP1600_OverwriteLanes_LoopAligned
974
- bx lr
975
- __KeccakP1600_OverwriteLanes_LoopUnaligned:
976
- ldrb r6, [r1, #0]
977
- ldrb r4, [r1, #1]
978
- lsls r4, r4, #8
979
- orrs r6, r6, r4
980
- ldrb r4, [r1, #2]
981
- lsls r4, r4, #16
982
- orrs r6, r6, r4
983
- ldrb r4, [r1, #3]
984
- lsls r4, r4, #24
985
- orrs r6, r6, r4
986
- ldrb r7, [r1, #4]
987
- ldrb r4, [r1, #5]
988
- lsls r4, r4, #8
989
- orrs r7, r7, r4
990
- ldrb r4, [r1, #6]
991
- lsls r4, r4, #16
992
- orrs r7, r7, r4
993
- ldrb r4, [r1, #7]
994
- lsls r4, r4, #24
995
- orrs r7, r7, r4
996
- adds r1, r1, #8
997
- mov r8, r6
998
- mov r9, r7
999
- toBitInterleaving r8, r9, r6, r7, r5, r4, r3
1000
- stmia r0!, {r6, r7}
1001
- subs r2, r2, #1
1002
- bne __KeccakP1600_OverwriteLanes_LoopUnaligned
1003
- bx lr
1004
-
1005
-
1006
- @----------------------------------------------------------------------------
1007
- @
1008
- @ __KeccakP1600_OverwriteBytesInLane
1009
- @
1010
- @ Input:
1011
- @ r0 state pointer
1012
- @ r1 data pointer
1013
- @ r2 offset in lane
1014
- @ r3 length
1015
- @ r7 to bit interleaving constants pointer
1016
- @
1017
- @ Output:
1018
- @ r0 state pointer next lane
1019
- @ r1 data pointer next byte to input
1020
- @
1021
- @ Changed: r2-r9
1022
- @
1023
- .align 8
1024
- __KeccakP1600_OverwriteBytesInLane:
1025
- movs r4, #0
1026
- movs r5, #0
1027
- push { r4 - r5 }
1028
- lsls r6, r2, #2
1029
- add r2, r2, sp
1030
- movs r4, #0x0F @r4 mask to wipe nibbles(bit interleaved bytes) in state
1031
- lsls r4, r4, r6
1032
- movs r6, r4
1033
- __KeccakP1600_OverwriteBytesInLane_Loop:
1034
- orrs r6, r6, r4
1035
- lsls r4, r4, #4
1036
- ldrb r5, [r1]
1037
- strb r5, [r2]
1038
- adds r1, r1, #1
1039
- adds r2, r2, #1
1040
- subs r3, r3, #1
1041
- bne __KeccakP1600_OverwriteBytesInLane_Loop
1042
- pop { r4 - r5 }
1043
- mov r8, r4
1044
- mov r9, r5
1045
- toBitInterleaving r8, r9, r4, r5, r3, r2, r7
1046
- ldr r3, [r0]
1047
- bics r3, r3, r6
1048
- eors r4, r4, r3
1049
- ldr r3, [r0, #4]
1050
- bics r3, r3, r6
1051
- eors r5, r5, r3
1052
- stmia r0!, { r4, r5 }
1053
- bx lr
1054
-
1055
-
1056
- @----------------------------------------------------------------------------
1057
- @
1058
- @ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
1059
- @
1060
- .align 8
1061
- .global KeccakP1600_OverwriteWithZeroes
1062
- .type KeccakP1600_OverwriteWithZeroes, %function;
1063
- KeccakP1600_OverwriteWithZeroes:
1064
- push {r4 - r5}
1065
- lsrs r2, r1, #3
1066
- beq KeccakP1600_OverwriteWithZeroes_Bytes
1067
- movs r4, #0
1068
- movs r5, #0
1069
- KeccakP1600_OverwriteWithZeroes_LoopLanes:
1070
- stm r0!, { r4, r5 }
1071
- subs r2, r2, #1
1072
- bne KeccakP1600_OverwriteWithZeroes_LoopLanes
1073
- KeccakP1600_OverwriteWithZeroes_Bytes:
1074
- lsls r1, r1, #32-3
1075
- beq KeccakP1600_OverwriteWithZeroes_Exit
1076
- lsrs r1, r1, #32-3
1077
- movs r3, #0x0F @r2 already zero, r3 = mask to wipe nibbles(bit interleaved bytes) in state
1078
- KeccakP1600_OverwriteWithZeroes_LoopBytes:
1079
- orrs r2, r2, r3
1080
- lsls r3, r3, #4
1081
- subs r1, r1, #1
1082
- bne KeccakP1600_OverwriteWithZeroes_LoopBytes
1083
- ldr r4, [r0]
1084
- ldr r5, [r0, #4]
1085
- bics r4, r4, r2
1086
- bics r5, r5, r2
1087
- stm r0!, { r4, r5 }
1088
- KeccakP1600_OverwriteWithZeroes_Exit:
1089
- pop {r4 - r5}
1090
- bx lr
1091
-
1092
-
1093
- @----------------------------------------------------------------------------
1094
- @
1095
- @ void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
1096
- @
1097
- .align 8
1098
- .global KeccakP1600_ExtractBytes
1099
- .type KeccakP1600_ExtractBytes, %function;
1100
- KeccakP1600_ExtractBytes:
1101
- cmp r3, #0 @ .if length != 0
1102
- beq KeccakP1600_ExtractBytes_Exit1
1103
- push {r4 - r6, lr} @ then
1104
- mov r4, r8
1105
- push {r4, r7}
1106
- lsrs r4, r2, #3 @ offset &= ~7
1107
- lsls r4, r4, #3
1108
- adds r0, r0, r4 @ add whole lane offset to state pointer
1109
- lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
1110
- lsrs r2, r2, #29
1111
- beq KeccakP1600_ExtractBytes_CheckLanes @ .if offset != 0
1112
- movs r4, r3 @ then, do remaining bytes in first lane
1113
- movs r5, #8
1114
- subs r5, r2 @ max size in lane = 8 - offset
1115
- cmp r4, r5
1116
- ble KeccakP1600_ExtractBytes_BytesAlign
1117
- movs r4, r5
1118
- KeccakP1600_ExtractBytes_BytesAlign:
1119
- subs r3, r3, r4 @ size left
1120
- mov r8, r3
1121
- movs r3, r4
1122
- adr r7, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
1123
- bl __KeccakP1600_ExtractBytesInLane
1124
- mov r3, r8
1125
- KeccakP1600_ExtractBytes_CheckLanes:
1126
- lsrs r2, r3, #3 @ .if length >= 8
1127
- beq KeccakP1600_ExtractBytes_Bytes
1128
- mov r8, r3
1129
- adr r3, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
1130
- bl __KeccakP1600_ExtractLanes
1131
- mov r3, r8
1132
- lsls r3, r3, #29
1133
- lsrs r3, r3, #29
1134
- KeccakP1600_ExtractBytes_Bytes:
1135
- cmp r3, #0
1136
- beq KeccakP1600_ExtractBytes_Exit
1137
- movs r2, #0
1138
- adr r7, KeccakP1600_ExtractBytes_FromBitInterleavingConstants
1139
- bl __KeccakP1600_ExtractBytesInLane
1140
- KeccakP1600_ExtractBytes_Exit:
1141
- pop {r4,r7}
1142
- mov r8, r4
1143
- pop {r4 - r6, pc}
1144
- KeccakP1600_ExtractBytes_Exit1:
1145
- bx lr
1146
- nop
1147
- KeccakP1600_ExtractBytes_FromBitInterleavingConstants:
1148
- .long 0x0000FF00
1149
- .long 0x00F000F0
1150
- .long 0x0C0C0C0C
1151
- .long 0x22222222
1152
-
1153
-
1154
- @----------------------------------------------------------------------------
1155
- @
1156
- @ __KeccakP1600_ExtractLanes
1157
- @
1158
- @ Input:
1159
- @ r0 state pointer
1160
- @ r1 data pointer
1161
- @ r2 laneCount
1162
- @ r3 from bit interleaving constants pointer
1163
- @
1164
- @ Output:
1165
- @ r0 state pointer next lane
1166
- @ r1 data pointer next byte to output
1167
- @
1168
- @ Changed: r2-r7
1169
- @
1170
- .align 8
1171
- __KeccakP1600_ExtractLanes:
1172
- lsls r4, r1, #30
1173
- bne __KeccakP1600_ExtractLanes_LoopUnaligned
1174
- __KeccakP1600_ExtractLanes_LoopAligned:
1175
- ldmia r0!, {r6,r7}
1176
- fromBitInterleaving r6, r7, r5, r4, r3
1177
- stmia r1!, {r6,r7}
1178
- subs r2, r2, #1
1179
- bne __KeccakP1600_ExtractLanes_LoopAligned
1180
- bx lr
1181
- __KeccakP1600_ExtractLanes_LoopUnaligned:
1182
- ldmia r0!, {r6,r7}
1183
- fromBitInterleaving r6, r7, r5, r4, r3
1184
- strb r6, [r1, #0]
1185
- lsrs r6, r6, #8
1186
- strb r6, [r1, #1]
1187
- lsrs r6, r6, #8
1188
- strb r6, [r1, #2]
1189
- lsrs r6, r6, #8
1190
- strb r6, [r1, #3]
1191
- strb r7, [r1, #4]
1192
- lsrs r7, r7, #8
1193
- strb r7, [r1, #5]
1194
- lsrs r7, r7, #8
1195
- strb r7, [r1, #6]
1196
- lsrs r7, r7, #8
1197
- strb r7, [r1, #7]
1198
- adds r1, r1, #8
1199
- subs r2, r2, #1
1200
- bne __KeccakP1600_ExtractLanes_LoopUnaligned
1201
- bx lr
1202
-
1203
-
1204
- @----------------------------------------------------------------------------
1205
- @
1206
- @ __KeccakP1600_ExtractBytesInLane
1207
- @
1208
- @ Input:
1209
- @ r0 state pointer
1210
- @ r1 data pointer
1211
- @ r2 offset in lane
1212
- @ r3 length
1213
- @ r7 from bit interleaving constants pointer
1214
- @
1215
- @ Output:
1216
- @ r0 state pointer next lane
1217
- @ r1 data pointer next byte to output
1218
- @
1219
- @ Changed: r2-r7
1220
- @
1221
- .align 8
1222
- __KeccakP1600_ExtractBytesInLane:
1223
- ldmia r0!, {r4,r5}
1224
- push {r0, r3}
1225
- fromBitInterleaving r4, r5, r0, r3, r7
1226
- pop {r0, r3}
1227
- push {r4, r5}
1228
- mov r4, sp
1229
- adds r4, r4, r2
1230
- __KeccakP1600_ExtractBytesInLane_Loop:
1231
- ldrb r2, [r4]
1232
- adds r4, r4, #1
1233
- strb r2, [r1]
1234
- adds r1, r1, #1
1235
- subs r3, r3, #1
1236
- bne __KeccakP1600_ExtractBytesInLane_Loop
1237
- add sp, #8
1238
- bx lr
1239
-
1240
-
1241
- @----------------------------------------------------------------------------
1242
- @
1243
- @ void KeccakP1600_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
1244
- @
1245
- .align 8
1246
- .global KeccakP1600_ExtractAndAddBytes
1247
- .type KeccakP1600_ExtractAndAddBytes, %function;
1248
- KeccakP1600_ExtractAndAddBytes:
1249
- push {r3 - r7, lr}
1250
- mov r4, r8
1251
- mov r5, r9
1252
- push {r4 - r5}
1253
- mov r9, r2
1254
- mov r2, r3
1255
- ldr r3, [sp, #8*4]
1256
- cmp r3, #0 @ .if length != 0
1257
- beq KeccakP1600_ExtractAndAddBytes_Exit
1258
- lsrs r4, r2, #3 @ offset &= ~7
1259
- lsls r4, r4, #3
1260
- adds r0, r0, r4 @ add whole lane offset to state pointer
1261
- lsls r2, r2, #29 @ offset &= 7 (part not lane aligned)
1262
- lsrs r2, r2, #29
1263
- beq KeccakP1600_ExtractAndAddBytes_CheckLanes @ .if offset != 0
1264
- movs r4, r3 @ then, do remaining bytes in first lane
1265
- movs r5, #8
1266
- subs r5, r2 @ max size in lane = 8 - offset
1267
- cmp r4, r5
1268
- ble KeccakP1600_ExtractAndAddBytes_BytesAlign
1269
- movs r4, r5
1270
- KeccakP1600_ExtractAndAddBytes_BytesAlign:
1271
- subs r3, r3, r4 @ size left
1272
- mov r8, r3
1273
- movs r3, r4
1274
- adr r7, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
1275
- bl __KeccakP1600_ExtractAndAddBytesInLane
1276
- mov r3, r8
1277
- KeccakP1600_ExtractAndAddBytes_CheckLanes:
1278
- lsrs r2, r3, #3 @ .if length >= 8
1279
- beq KeccakP1600_ExtractAndAddBytes_Bytes
1280
- mov r8, r3
1281
- adr r3, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
1282
- bl __KeccakP1600_ExtractAndAddLanes
1283
- mov r3, r8
1284
- lsls r3, r3, #29
1285
- lsrs r3, r3, #29
1286
- KeccakP1600_ExtractAndAddBytes_Bytes:
1287
- cmp r3, #0
1288
- beq KeccakP1600_ExtractAndAddBytes_Exit
1289
- movs r2, #0
1290
- adr r7, KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants
1291
- bl __KeccakP1600_ExtractAndAddBytesInLane
1292
- KeccakP1600_ExtractAndAddBytes_Exit:
1293
- pop {r4 - r5}
1294
- mov r8, r4
1295
- mov r9, r5
1296
- pop {r3 - r7, pc}
1297
- .align 8
1298
- KeccakP1600_ExtractAndAddBytes_FromBitInterleavingConstants:
1299
- .long 0x0000FF00
1300
- .long 0x00F000F0
1301
- .long 0x0C0C0C0C
1302
- .long 0x22222222
1303
-
1304
-
1305
- @----------------------------------------------------------------------------
1306
- @
1307
- @ __KeccakP1600_ExtractAndAddLanes
1308
- @
1309
- @ Input:
1310
- @ r0 state pointer
1311
- @ r1 in pointer
1312
- @ r2 laneCount
1313
- @ r3 from bit interleaving constants pointer
1314
- @ r9 out pointer
1315
- @
1316
- @ Output:
1317
- @ r0 state pointer next lane
1318
- @ r1 in pointer (next lane)
1319
- @ r9 out pointer (next lane)
1320
- @
1321
- @ Changed: r2-r7
1322
- @
1323
- .align 8
1324
- __KeccakP1600_ExtractAndAddLanes:
1325
- lsls r4, r1, #30
1326
- bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
1327
- mov r4, r9
1328
- lsls r4, r4, #30
1329
- bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
1330
- __KeccakP1600_ExtractAndAddLanes_LoopAligned:
1331
- ldmia r0!, {r6,r7}
1332
- fromBitInterleaving r6, r7, r5, r4, r3
1333
- mov r4, r9
1334
- ldm r1!, {r5}
1335
- eors r6, r6, r5
1336
- ldm r1!, {r5}
1337
- eors r7, r7, r5
1338
- stmia r4!, {r6,r7}
1339
- mov r9, r4
1340
- subs r2, r2, #1
1341
- bne __KeccakP1600_ExtractAndAddLanes_LoopAligned
1342
- bx lr
1343
- __KeccakP1600_ExtractAndAddLanes_LoopUnaligned:
1344
- ldmia r0!, {r6,r7}
1345
- fromBitInterleaving r6, r7, r5, r4, r3
1346
- mov r4, r9
1347
- ldrb r5, [r1, #0]
1348
- eors r5, r5, r6
1349
- strb r5, [r4, #0]
1350
- lsrs r6, r6, #8
1351
- ldrb r5, [r1, #1]
1352
- eors r5, r5, r6
1353
- strb r5, [r4, #1]
1354
- lsrs r6, r6, #8
1355
- ldrb r5, [r1, #2]
1356
- eors r5, r5, r6
1357
- strb r5, [r4, #2]
1358
- lsrs r6, r6, #8
1359
- ldrb r5, [r1, #3]
1360
- eors r5, r5, r6
1361
- strb r5, [r4, #3]
1362
- ldrb r5, [r1, #4]
1363
- eors r5, r5, r7
1364
- strb r5, [r4, #4]
1365
- lsrs r7, r7, #8
1366
- ldrb r5, [r1, #5]
1367
- eors r5, r5, r7
1368
- strb r5, [r4, #5]
1369
- lsrs r7, r7, #8
1370
- ldrb r5, [r1, #6]
1371
- eors r5, r5, r7
1372
- strb r5, [r4, #6]
1373
- lsrs r7, r7, #8
1374
- ldrb r5, [r1, #7]
1375
- eors r5, r5, r7
1376
- strb r5, [r4, #7]
1377
- adds r1, r1, #8
1378
- adds r4, r4, #8
1379
- mov r9, r4
1380
- subs r2, r2, #1
1381
- bne __KeccakP1600_ExtractAndAddLanes_LoopUnaligned
1382
- bx lr
1383
-
1384
-
1385
- @----------------------------------------------------------------------------
1386
- @
1387
- @ __KeccakP1600_ExtractAndAddBytesInLane
1388
- @
1389
- @ Input:
1390
- @ r0 state pointer
1391
- @ r1 data pointer
1392
- @ r2 offset in lane
1393
- @ r3 length
1394
- @ r7 from bit interleaving constants pointer
1395
- @ r9 out pointer
1396
- @
1397
- @ Output:
1398
- @ r0 state pointer next lane
1399
- @ r1 in pointer (next byte)
1400
- @ r9 out pointer (next byte)
1401
- @
1402
- @ Changed: r2-r7
1403
- @
1404
- .align 8
1405
- __KeccakP1600_ExtractAndAddBytesInLane:
1406
- ldmia r0!, {r4,r5}
1407
- push {r0, r3}
1408
- fromBitInterleaving r4, r5, r0, r3, r7
1409
- pop {r0, r3}
1410
- push {r4, r5}
1411
- mov r4, sp
1412
- adds r4, r4, r2
1413
- mov r6, r9
1414
- __KeccakP1600_ExtractAndAddBytesInLane_Loop:
1415
- ldrb r2, [r4]
1416
- adds r4, r4, #1
1417
- ldrb r5, [r1]
1418
- eors r2, r2, r5
1419
- strb r2, [r6]
1420
- adds r1, r1, #1
1421
- adds r6, r6, #1
1422
- subs r3, r3, #1
1423
- bne __KeccakP1600_ExtractAndAddBytesInLane_Loop
1424
- add sp, #8
1425
- mov r9, r6
1426
- bx lr
1427
-
1428
-
1429
-
1430
- .macro ldrf result,offset
1431
- .if \offset >= 128
1432
- ldr \result, [r5, #\offset-128]
1433
- .else
1434
- ldr \result, [r0, #\offset]
1435
- .endif
1436
- .endm
1437
-
1438
- .macro strf result,offset
1439
- .if \offset >= 128
1440
- str \result, [r5, #\offset-128]
1441
- .else
1442
- str \result, [r0, #\offset]
1443
- .endif
1444
- .endm
1445
-
1446
- .macro SwapPI13 in0,in1,in2,in3,eo0,eo1,eo2,eo3
1447
- ldrf r3, \in0+0
1448
- ldrf r4, \in0+4
1449
- ldrf r2, \in1+0
1450
- ldrf r1, \in1+4
1451
- strf r2, \in0+\eo0*4
1452
- strf r1, \in0+(\eo0^1)*4
1453
- ldrf r2, \in2+0
1454
- ldrf r1, \in2+4
1455
- strf r2, \in1+\eo1*4
1456
- strf r1, \in1+(\eo1^1)*4
1457
- ldrf r2, \in3+0
1458
- ldrf r1, \in3+4
1459
- strf r2, \in2+\eo2*4
1460
- strf r1, \in2+(\eo2^1)*4
1461
- strf r3, \in3+\eo3*4
1462
- strf r4, \in3+(\eo3^1)*4
1463
- .endm
1464
-
1465
- .macro SwapPI2 in0,in1,in2,in3
1466
- ldrf r3, \in0+0
1467
- ldrf r4, \in0+4
1468
- ldrf r2, \in1+0
1469
- ldrf r1, \in1+4
1470
- strf r2, \in0+4
1471
- strf r1, \in0+0
1472
- strf r3, \in1+4
1473
- strf r4, \in1+0
1474
- ldrf r3, \in2+0
1475
- ldrf r4, \in2+4
1476
- ldrf r2, \in3+0
1477
- ldrf r1, \in3+4
1478
- strf r2, \in2+4
1479
- strf r1, \in2+0
1480
- strf r3, \in3+4
1481
- strf r4, \in3+0
1482
- .endm
1483
-
1484
- .macro SwapEO even,odd
1485
- ldrf r3, \even
1486
- ldrf r4, \odd
1487
- strf r3, \odd
1488
- strf r4, \even
1489
- .endm
1490
-
1491
- @ ----------------------------------------------------------------------------
1492
- @
1493
- @ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
1494
- @
1495
- .align 8
1496
- .global KeccakP1600_Permute_Nrounds
1497
- .type KeccakP1600_Permute_Nrounds, %function;
1498
- KeccakP1600_Permute_Nrounds:
1499
- lsls r2, r1, #30
1500
- bne KeccakP1600_Permute_NroundsNotMultiple4
1501
- lsls r2, r1, #3
1502
- adr r1, KeccakP1600_Permute_RoundConstants0Mod4
1503
- subs r1, r1, r2
1504
- b KeccakP1600_Permute
1505
- KeccakP1600_Permute_NroundsNotMultiple4: @ nrounds not multiple of 4
1506
- push { r4 - r6, lr }
1507
- mov r2, r8
1508
- mov r3, r9
1509
- mov r4, r10
1510
- mov r5, r11
1511
- mov r6, r12
1512
- push { r2 - r7 }
1513
- sub sp, #mSize
1514
- mov r3, r1
1515
- lsrs r2, r1, #2
1516
- lsls r2, r2, #3+2
1517
- adr r1, KeccakP1600_Permute_RoundConstants0
1518
- subs r1, r1, r2
1519
- str r1, [sp, #mRC]
1520
- mov r5, r0
1521
- adds r5, r5, #128
1522
- lsls r3, r3, #31
1523
- bcs KeccakP1600_Permute_Nrounds23Mod4
1524
- KeccakP1600_Permute_Nrounds1Mod4:
1525
- SwapPI13 Aga0, Aka0, Asa0, Ama0, 1, 0, 1, 0
1526
- SwapPI13 Abe0, Age0, Ame0, Ake0, 0, 1, 0, 1
1527
- SwapPI13 Abi0, Aki0, Agi0, Asi0, 1, 0, 1, 0
1528
- SwapEO Ami0, Ami1
1529
- SwapPI13 Abo0, Amo0, Aso0, Ago0, 1, 0, 1, 0
1530
- SwapEO Ako0, Ako1
1531
- SwapPI13 Abu0, Asu0, Aku0, Amu0, 0, 1, 0, 1
1532
- ldr r1, =KeccakP1600_Permute_Round1Mod4+1
1533
- bx r1
1534
- .align 8
1535
- .ltorg
1536
- KeccakP1600_Permute_Nrounds23Mod4:
1537
- bpl KeccakP1600_Permute_Nrounds2Mod4
1538
- KeccakP1600_Permute_Nrounds3Mod4:
1539
- SwapPI13 Aga0, Ama0, Asa0, Aka0, 0, 1, 0, 1
1540
- SwapPI13 Abe0, Ake0, Ame0, Age0, 1, 0, 1, 0
1541
- SwapPI13 Abi0, Asi0, Agi0, Aki0, 0, 1, 0, 1
1542
- SwapEO Ami0, Ami1
1543
- SwapPI13 Abo0, Ago0, Aso0, Amo0, 0, 1, 0, 1
1544
- SwapEO Ako0, Ako1
1545
- SwapPI13 Abu0, Amu0, Aku0, Asu0, 1, 0, 1, 0
1546
- ldr r1, =KeccakP1600_Permute_Round3Mod4+1
1547
- bx r1
1548
- .align 8
1549
- .ltorg
1550
- KeccakP1600_Permute_Nrounds2Mod4:
1551
- SwapPI2 Aga0, Asa0, Aka0, Ama0
1552
- SwapPI2 Abe0, Ame0, Age0, Ake0
1553
- SwapPI2 Abi0, Agi0, Aki0, Asi0
1554
- SwapPI2 Abo0, Aso0, Ago0, Amo0
1555
- SwapPI2 Abu0, Aku0, Amu0, Asu0
1556
- ldr r1, =KeccakP1600_Permute_Round2Mod4+1
1557
- bx r1
1558
- .align 8
1559
- .ltorg
1560
-
1561
-
1562
- @ ----------------------------------------------------------------------------
1563
- @
1564
- @ void KeccakP1600_Permute_12rounds( void *state )
1565
- @
1566
- .align 8
1567
- .global KeccakP1600_Permute_12rounds
1568
- .type KeccakP1600_Permute_12rounds, %function;
1569
- KeccakP1600_Permute_12rounds:
1570
- adr r1, KeccakP1600_Permute_RoundConstants12
1571
- b KeccakP1600_Permute
1572
-
1573
-
1574
- @ ----------------------------------------------------------------------------
1575
- @
1576
- @ void KeccakP1600_Permute_24rounds( void *state )
1577
- @
1578
- .align 8
1579
- .global KeccakP1600_Permute_24rounds
1580
- .type KeccakP1600_Permute_24rounds, %function;
1581
- KeccakP1600_Permute_24rounds:
1582
- adr r1, KeccakP1600_Permute_RoundConstants24
1583
- b KeccakP1600_Permute
1584
-
1585
-
1586
- .align 8
1587
- KeccakP1600_Permute_RoundConstants24:
1588
- @ 0 1
1589
- .long 0x00000001, 0x00000000
1590
- .long 0x00000000, 0x00000089
1591
- .long 0x00000000, 0x8000008b
1592
- .long 0x00000000, 0x80008080
1593
- .long 0x00000001, 0x0000008b
1594
- .long 0x00000001, 0x00008000
1595
- .long 0x00000001, 0x80008088
1596
- .long 0x00000001, 0x80000082
1597
- .long 0x00000000, 0x0000000b
1598
- .long 0x00000000, 0x0000000a
1599
- .long 0x00000001, 0x00008082
1600
- .long 0x00000000, 0x00008003
1601
- KeccakP1600_Permute_RoundConstants12:
1602
- .long 0x00000001, 0x0000808b
1603
- .long 0x00000001, 0x8000000b
1604
- .long 0x00000001, 0x8000008a
1605
- .long 0x00000001, 0x80000081
1606
- .long 0x00000000, 0x80000081
1607
- .long 0x00000000, 0x80000008
1608
- .long 0x00000000, 0x00000083
1609
- .long 0x00000000, 0x80008003
1610
- KeccakP1600_Permute_RoundConstants0:
1611
- .long 0x00000001, 0x80008088
1612
- .long 0x00000000, 0x80000088
1613
- .long 0x00000001, 0x00008000
1614
- .long 0x00000000, 0x80008082
1615
- KeccakP1600_Permute_RoundConstants0Mod4:
1616
- .long 0x000000FF @terminator
1617
-
1618
- @----------------------------------------------------------------------------
1619
- @
1620
- @ void KeccakP1600_Permute( void *state, void * rc )
1621
- @
1622
- .align 8
1623
- KeccakP1600_Permute:
1624
- push { r4 - r6, lr }
1625
- mov r2, r8
1626
- mov r3, r9
1627
- mov r4, r10
1628
- mov r5, r11
1629
- mov r6, r12
1630
- push { r2 - r7 }
1631
- sub sp, #mSize
1632
- str r1, [sp, #mRC]
1633
- KeccakP1600_Permute_RoundLoop:
1634
- KeccakRound0
1635
- KeccakP1600_Permute_Round3Mod4:
1636
- KeccakRound1
1637
- KeccakP1600_Permute_Round2Mod4:
1638
- KeccakRound2
1639
- KeccakP1600_Permute_Round1Mod4:
1640
- KeccakRound3
1641
- beq KeccakP1600_Permute_Done
1642
- ldr r1, =KeccakP1600_Permute_RoundLoop+1
1643
- bx r1
1644
- .ltorg
1645
- KeccakP1600_Permute_Done:
1646
- add sp, #mSize
1647
- pop { r1 - r5, r7 }
1648
- mov r8, r1
1649
- mov r9, r2
1650
- mov r10, r3
1651
- mov r11, r4
1652
- mov r12, r5
1653
- pop { r4 - r6, pc }
1654
-
1655
-