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,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