sleeping_kangaroo12 0.0.1 → 0.0.5

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