sleeping_kangaroo12 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +127 -0
  3. data/ext/Rakefile +73 -0
  4. data/ext/binding/sleeping_kangaroo12.c +39 -0
  5. data/ext/config/xkcp.build +17 -0
  6. data/ext/xkcp/LICENSE +1 -0
  7. data/ext/xkcp/Makefile +15 -0
  8. data/ext/xkcp/Makefile.build +200 -0
  9. data/ext/xkcp/README.markdown +296 -0
  10. data/ext/xkcp/lib/HighLevel.build +143 -0
  11. data/ext/xkcp/lib/LowLevel.build +757 -0
  12. data/ext/xkcp/lib/common/align.h +33 -0
  13. data/ext/xkcp/lib/common/brg_endian.h +143 -0
  14. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +301 -0
  15. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.h +97 -0
  16. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +81 -0
  17. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +125 -0
  18. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +48 -0
  19. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +79 -0
  20. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +81 -0
  21. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +73 -0
  22. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +195 -0
  23. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +111 -0
  24. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +76 -0
  25. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +314 -0
  26. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +61 -0
  27. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +67 -0
  28. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +128 -0
  29. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +93 -0
  30. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +599 -0
  31. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +573 -0
  32. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +87 -0
  33. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +88 -0
  34. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +274 -0
  35. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +132 -0
  36. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +217 -0
  37. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +81 -0
  38. data/ext/xkcp/lib/high/Keyak/Motorist.inc +953 -0
  39. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +533 -0
  40. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +115 -0
  41. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +557 -0
  42. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +247 -0
  43. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +66 -0
  44. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +336 -0
  45. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +26 -0
  46. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +55 -0
  47. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +35 -0
  48. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +634 -0
  49. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +147 -0
  50. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +483 -0
  51. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +241 -0
  52. data/ext/xkcp/lib/high/common/Phases.h +25 -0
  53. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +41 -0
  54. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +1666 -0
  55. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +1655 -0
  56. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +1268 -0
  57. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +1264 -0
  58. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +1178 -0
  59. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +1175 -0
  60. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +1338 -0
  61. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +1336 -0
  62. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +1343 -0
  63. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +1339 -0
  64. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +42 -0
  65. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +823 -0
  66. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +831 -0
  67. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +31 -0
  68. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +540 -0
  69. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +42 -0
  70. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +733 -0
  71. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +1121 -0
  72. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-AVX2.s +1100 -0
  73. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +52 -0
  74. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +623 -0
  75. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +47 -0
  76. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +6 -0
  77. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +6 -0
  78. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +6 -0
  79. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +1031 -0
  80. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +53 -0
  81. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +44 -0
  82. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +476 -0
  83. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +6 -0
  84. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +6 -0
  85. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros +748 -0
  86. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +305 -0
  87. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-SnP.h +40 -0
  88. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +420 -0
  89. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +43 -0
  90. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-inplace32BI.c +1163 -0
  91. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-SnP.h +54 -0
  92. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +565 -0
  93. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +7 -0
  94. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +7 -0
  95. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +8 -0
  96. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +6 -0
  97. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +6 -0
  98. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +44 -0
  99. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +23 -0
  100. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +625 -0
  101. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +44 -0
  102. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +440 -0
  103. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h +23 -0
  104. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +42 -0
  105. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +1196 -0
  106. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +1124 -0
  107. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +1196 -0
  108. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +1392 -0
  109. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +1394 -0
  110. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +42 -0
  111. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +7 -0
  112. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +7 -0
  113. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +7 -0
  114. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +850 -0
  115. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +51 -0
  116. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +957 -0
  117. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +49 -0
  118. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +8 -0
  119. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +8 -0
  120. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +9 -0
  121. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +9 -0
  122. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +45 -0
  123. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +37 -0
  124. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +1321 -0
  125. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +55 -0
  126. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +7 -0
  127. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +7 -0
  128. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +7 -0
  129. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +7 -0
  130. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +7 -0
  131. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +7 -0
  132. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +881 -0
  133. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +51 -0
  134. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +45 -0
  135. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +37 -0
  136. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +45 -0
  137. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +38 -0
  138. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +1615 -0
  139. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +57 -0
  140. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +7 -0
  141. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +7 -0
  142. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +7 -0
  143. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +45 -0
  144. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +37 -0
  145. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +45 -0
  146. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +38 -0
  147. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +45 -0
  148. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +38 -0
  149. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +41 -0
  150. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +442 -0
  151. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +446 -0
  152. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +419 -0
  153. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +427 -0
  154. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +41 -0
  155. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +647 -0
  156. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +39 -0
  157. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +190 -0
  158. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +43 -0
  159. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +412 -0
  160. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +23 -0
  161. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +41 -0
  162. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +454 -0
  163. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +458 -0
  164. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +455 -0
  165. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +458 -0
  166. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +41 -0
  167. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +728 -0
  168. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +43 -0
  169. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +414 -0
  170. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +23 -0
  171. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +42 -0
  172. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +527 -0
  173. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +533 -0
  174. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +528 -0
  175. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +534 -0
  176. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +521 -0
  177. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +527 -0
  178. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +517 -0
  179. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +523 -0
  180. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +550 -0
  181. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +556 -0
  182. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +32 -0
  183. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +432 -0
  184. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +42 -0
  185. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +929 -0
  186. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +40 -0
  187. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +244 -0
  188. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +46 -0
  189. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +184 -0
  190. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +454 -0
  191. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +459 -0
  192. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +83 -0
  193. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +88 -0
  194. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +7 -0
  195. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +7 -0
  196. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +7 -0
  197. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +7 -0
  198. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +44 -0
  199. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +437 -0
  200. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +23 -0
  201. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +57 -0
  202. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +475 -0
  203. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +480 -0
  204. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +590 -0
  205. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +590 -0
  206. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +126 -0
  207. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +68 -0
  208. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +174 -0
  209. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +80 -0
  210. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +68 -0
  211. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +142 -0
  212. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +55 -0
  213. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +1086 -0
  214. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +1092 -0
  215. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +721 -0
  216. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +726 -0
  217. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +723 -0
  218. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +729 -0
  219. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +1164 -0
  220. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +1165 -0
  221. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +562 -0
  222. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +563 -0
  223. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +563 -0
  224. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +565 -0
  225. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +55 -0
  226. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +476 -0
  227. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +485 -0
  228. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +362 -0
  229. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +367 -0
  230. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +43 -0
  231. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +1341 -0
  232. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +581 -0
  233. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +58 -0
  234. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +332 -0
  235. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +329 -0
  236. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +53 -0
  237. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +355 -0
  238. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +79 -0
  239. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +56 -0
  240. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +399 -0
  241. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +127 -0
  242. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +43 -0
  243. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +253 -0
  244. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +1044 -0
  245. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +49 -0
  246. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +45 -0
  247. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +37 -0
  248. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +1587 -0
  249. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +48 -0
  250. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +1202 -0
  251. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +48 -0
  252. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +484 -0
  253. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +44 -0
  254. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +45 -0
  255. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +37 -0
  256. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +939 -0
  257. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +49 -0
  258. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +1216 -0
  259. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +48 -0
  260. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +45 -0
  261. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +37 -0
  262. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +290 -0
  263. data/ext/xkcp/lib/low/common/SnP-Relaned.h +141 -0
  264. data/ext/xkcp/support/Build/ExpandProducts.xsl +79 -0
  265. data/ext/xkcp/support/Build/ToGlobalMakefile.xsl +206 -0
  266. data/ext/xkcp/support/Build/ToOneTarget.xsl +89 -0
  267. data/ext/xkcp/support/Build/ToTargetConfigFile.xsl +37 -0
  268. data/ext/xkcp/support/Build/ToTargetMakefile.xsl +298 -0
  269. data/ext/xkcp/support/Build/ToVCXProj.xsl +198 -0
  270. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +133 -0
  271. data/ext/xkcp/support/Kernel-PMU/Makefile +8 -0
  272. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +129 -0
  273. data/ext/xkcp/support/Kernel-PMU/load-module +1 -0
  274. data/ext/xkcp/util/KeccakSum/KeccakSum.c +394 -0
  275. data/ext/xkcp/util/KeccakSum/base64.c +86 -0
  276. data/ext/xkcp/util/KeccakSum/base64.h +12 -0
  277. data/lib/sleeping_kangaroo12/binding.rb +15 -0
  278. data/lib/sleeping_kangaroo12/build/loader.rb +40 -0
  279. data/lib/sleeping_kangaroo12/build/platform.rb +37 -0
  280. data/lib/sleeping_kangaroo12/build.rb +4 -0
  281. data/lib/sleeping_kangaroo12/digest.rb +103 -0
  282. data/lib/sleeping_kangaroo12/version.rb +5 -0
  283. data/lib/sleeping_kangaroo12.rb +7 -0
  284. metadata +372 -0
@@ -0,0 +1,1092 @@
1
+ @
2
+ @ The eXtended Keccak Code Package (XKCP)
3
+ @ https://github.com/XKCP/XKCP
4
+ @
5
+ @ The Xoodoo permutation, designed by Joan Daemen, Seth Hoffert, Gilles Van Assche and Ronny Van Keer.
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
+ @ WARNING: These functions work only on little endian CPU with@ ARMv6m architecture (Cortex-M0, ...).
18
+
19
+
20
+ .thumb
21
+ .syntax unified
22
+ .text
23
+
24
+ @ ----------------------------------------------------------------------------
25
+ @
26
+ @ void Xoodoo_Initialize(void *state)
27
+ @
28
+ .align 4
29
+ .global Xoodoo_Initialize
30
+ .type Xoodoo_Initialize, %function;
31
+ Xoodoo_Initialize:
32
+ movs r1, #0
33
+ movs r2, #0
34
+ movs r3, #0
35
+ stmia r0!, { r1 - r3 }
36
+ stmia r0!, { r1 - r3 }
37
+ stmia r0!, { r1 - r3 }
38
+ stmia r0!, { r1 - r3 }
39
+ bx lr
40
+ .align 4
41
+
42
+
43
+ @ ----------------------------------------------------------------------------
44
+ @
45
+ @ void Xoodoo_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
46
+ @
47
+ .global Xoodoo_AddBytes
48
+ .type Xoodoo_AddBytes, %function;
49
+ Xoodoo_AddBytes:
50
+ push {r4,lr}
51
+ adds r0, r0, r2 @ state += offset
52
+ subs r3, r3, #4 @ .if length >= 4
53
+ bcc Xoodoo_AddBytes_Bytes
54
+ movs r2, r0 @ and data pointer and offset both 32-bit .align 8ed
55
+ orrs r2, r2, r1
56
+ lsls r2, #30
57
+ bne Xoodoo_AddBytes_Bytes
58
+ Xoodoo_AddBytes_LanesLoop: @ then, perform on words
59
+ ldr r2, [r0]
60
+ ldmia r1!, {r4}
61
+ eors r2, r2, r4
62
+ stmia r0!, {r2}
63
+ subs r3, r3, #4
64
+ bcs Xoodoo_AddBytes_LanesLoop
65
+ Xoodoo_AddBytes_Bytes:
66
+ adds r3, r3, #4
67
+ beq Xoodoo_AddBytes_Exit
68
+ subs r3, r3, #1
69
+ Xoodoo_AddBytes_BytesLoop:
70
+ ldrb r2, [r0, r3]
71
+ ldrb r4, [r1, r3]
72
+ eors r2, r2, r4
73
+ strb r2, [r0, r3]
74
+ subs r3, r3, #1
75
+ bcs Xoodoo_AddBytes_BytesLoop
76
+ Xoodoo_AddBytes_Exit:
77
+ pop {r4,pc}
78
+ .align 4
79
+
80
+
81
+ @ ----------------------------------------------------------------------------
82
+ @
83
+ @ void Xoodoo_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
84
+ @
85
+ .global Xoodoo_OverwriteBytes
86
+ .type Xoodoo_OverwriteBytes, %function;
87
+ Xoodoo_OverwriteBytes:
88
+ adds r0, r0, r2 @ state += offset
89
+ subs r3, r3, #4 @ .if length >= 4
90
+ bcc Xoodoo_OverwriteBytes_Bytes
91
+ movs r2, r0 @ and data pointer and offset both 32-bit .align 8ed
92
+ orrs r2, r2, r1
93
+ lsls r2, #30
94
+ bne Xoodoo_OverwriteBytes_Bytes
95
+ Xoodoo_OverwriteBytes_LanesLoop: @ then, perform on words
96
+ ldmia r1!, {r2}
97
+ stmia r0!, {r2}
98
+ subs r3, r3, #4
99
+ bcs Xoodoo_OverwriteBytes_LanesLoop
100
+ Xoodoo_OverwriteBytes_Bytes:
101
+ adds r3, r3, #4
102
+ beq Xoodoo_OverwriteBytes_Exit
103
+ subs r3, r3, #1
104
+ Xoodoo_OverwriteBytes_BytesLoop:
105
+ ldrb r2, [r1, r3]
106
+ strb r2, [r0, r3]
107
+ subs r3, r3, #1
108
+ bcs Xoodoo_OverwriteBytes_BytesLoop
109
+ Xoodoo_OverwriteBytes_Exit:
110
+ bx lr
111
+ .align 4
112
+
113
+
114
+ @ ----------------------------------------------------------------------------
115
+ @
116
+ @ void Xoodoo_OverwriteWithZeroes(void *state, unsigned int byteCount)
117
+ @
118
+ .global Xoodoo_OverwriteWithZeroes
119
+ .type Xoodoo_OverwriteWithZeroes, %function;
120
+ Xoodoo_OverwriteWithZeroes:
121
+ movs r3, #0
122
+ lsrs r2, r1, #2
123
+ beq Xoodoo_OverwriteWithZeroes_Bytes
124
+ Xoodoo_OverwriteWithZeroes_LoopLanes:
125
+ stm r0!, { r3 }
126
+ subs r2, r2, #1
127
+ bne Xoodoo_OverwriteWithZeroes_LoopLanes
128
+ Xoodoo_OverwriteWithZeroes_Bytes:
129
+ lsls r1, r1, #32-2
130
+ beq Xoodoo_OverwriteWithZeroes_Exit
131
+ lsrs r1, r1, #32-2
132
+ Xoodoo_OverwriteWithZeroes_LoopBytes:
133
+ subs r1, r1, #1
134
+ strb r3, [r0, r1]
135
+ bne Xoodoo_OverwriteWithZeroes_LoopBytes
136
+ Xoodoo_OverwriteWithZeroes_Exit:
137
+ bx lr
138
+ .align 4
139
+
140
+
141
+ @ ----------------------------------------------------------------------------
142
+ @
143
+ @ void Xoodoo_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
144
+ @
145
+ .global Xoodoo_ExtractBytes
146
+ .type Xoodoo_ExtractBytes, %function;
147
+ Xoodoo_ExtractBytes:
148
+ adds r0, r0, r2 @ state += offset
149
+ subs r3, r3, #4 @ .if length >= 4
150
+ bcc Xoodoo_ExtractBytes_Bytes
151
+ movs r2, r0 @ and data pointer and offset both 32-bit .align 8ed
152
+ orrs r2, r2, r1
153
+ lsls r2, #30
154
+ bne Xoodoo_ExtractBytes_Bytes
155
+ Xoodoo_ExtractBytes_LanesLoop: @ then, perform on words
156
+ ldmia r0!, {r2}
157
+ stmia r1!, {r2}
158
+ subs r3, r3, #4
159
+ bcs Xoodoo_ExtractBytes_LanesLoop
160
+ Xoodoo_ExtractBytes_Bytes:
161
+ adds r3, r3, #4
162
+ beq Xoodoo_ExtractBytes_Exit
163
+ subs r3, r3, #1
164
+ Xoodoo_ExtractBytes_BytesLoop:
165
+ ldrb r2, [r0, r3]
166
+ strb r2, [r1, r3]
167
+ subs r3, r3, #1
168
+ bcs Xoodoo_ExtractBytes_BytesLoop
169
+ Xoodoo_ExtractBytes_Exit:
170
+ bx lr
171
+ .align 4
172
+
173
+
174
+ @ ----------------------------------------------------------------------------
175
+ @
176
+ @ void Xoodoo_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
177
+ @
178
+ .global Xoodoo_ExtractAndAddBytes
179
+ .type Xoodoo_ExtractAndAddBytes, %function;
180
+ Xoodoo_ExtractAndAddBytes:
181
+ push {r4,r5}
182
+ adds r0, r0, r3 @ state += offset (offset register no longer needed, reuse for length)
183
+ ldr r3, [sp, #8] @ get length argument from stack
184
+ subs r3, r3, #4 @ .if length >= 4
185
+ bcc Xoodoo_ExtractAndAddBytes_Bytes
186
+ movs r5, r0 @ and input/output/state pointer all 32-bit .align 8ed
187
+ orrs r5, r5, r1
188
+ orrs r5, r5, r2
189
+ lsls r5, #30
190
+ bne Xoodoo_ExtractAndAddBytes_Bytes
191
+ Xoodoo_ExtractAndAddBytes_LanesLoop: @ then, perform on words
192
+ ldmia r0!, {r5}
193
+ ldmia r1!, {r4}
194
+ eors r5, r5, r4
195
+ stmia r2!, {r5}
196
+ subs r3, r3, #4
197
+ bcs Xoodoo_ExtractAndAddBytes_LanesLoop
198
+ Xoodoo_ExtractAndAddBytes_Bytes:
199
+ adds r3, r3, #4
200
+ beq Xoodoo_ExtractAndAddBytes_Exit
201
+ subs r3, r3, #1
202
+ Xoodoo_ExtractAndAddBytes_BytesLoop:
203
+ ldrb r5, [r0, r3]
204
+ ldrb r4, [r1, r3]
205
+ eors r5, r5, r4
206
+ strb r5, [r2, r3]
207
+ subs r3, r3, #1
208
+ bcs Xoodoo_ExtractAndAddBytes_BytesLoop
209
+ Xoodoo_ExtractAndAddBytes_Exit:
210
+ pop {r4,r5}
211
+ bx lr
212
+ .align 4
213
+
214
+
215
+ @ ----------------------------------------------------------------------------
216
+
217
+ @ offsets in RAM state
218
+ .equ _oA00 , 0*4
219
+ .equ _oA01 , 1*4
220
+ .equ _oA02 , 2*4
221
+ .equ _oA03 , 3*4
222
+ .equ _oA10 , 4*4
223
+ .equ _oA11 , 5*4
224
+ .equ _oA12 , 6*4
225
+ .equ _oA13 , 7*4
226
+ .equ _oA20 , 8*4
227
+ .equ _oA21 , 9*4
228
+ .equ _oA22 , 10*4
229
+ .equ _oA23 , 11*4
230
+
231
+ @ possible locations of state lanes
232
+ .equ locRegL , 1
233
+ .equ locRegH , 2
234
+ .equ locMem , 3
235
+
236
+ @ ----------------------------------------------------------------------------
237
+
238
+ .equ _r0 , 5
239
+ .equ _r1 , 14
240
+ .equ _r2 , 1
241
+
242
+ .equ _w1 , 11
243
+
244
+ .equ _e0 , 2
245
+ .equ _e1 , 8
246
+
247
+ @ ----------------------------------------------------------------------------
248
+
249
+ .macro mXor3 ro, a0, a1, a2, loc, tt
250
+ mov \ro, \a1
251
+ eors \ro, \ro, \a2
252
+ .if \loc == locRegL
253
+ eors \ro, \ro, \a0
254
+ .else
255
+ .if \loc == locRegH
256
+ mov \tt, \a0
257
+ .else
258
+ ldr \tt, [sp, #\a0]
259
+ .endif
260
+ eors \ro, \ro, \tt
261
+ .endif
262
+ .endm
263
+
264
+ .macro mXor ro, ri, tt, loc
265
+ .if \loc == locRegL
266
+ eors \ro, \ro, \ri
267
+ .else
268
+ .if \loc == locRegH
269
+ mov \tt, \ro
270
+ eors \tt, \tt, \ri
271
+ mov \ro, \tt
272
+ .else
273
+ ldr \tt, [sp, #\ro]
274
+ eors \tt, \tt, \ri
275
+ str \tt, [sp, #\ro]
276
+ .endif
277
+ .endif
278
+ .endm
279
+
280
+ .macro mChi3 a0,a1,a2,r0,r1,a0s,loc
281
+ mov \r1, \a2
282
+ mov \r0, \a1
283
+ bics \r1, \r1, \r0
284
+ eors \a0, \a0, \r1
285
+ .if \loc != locRegL
286
+ .if \loc == locRegH
287
+ mov \a0s, \a0
288
+ .else
289
+ str \a0, [sp, #\a0s]
290
+ .endif
291
+ .endif
292
+
293
+ mov \r0, \a0
294
+ bics \r0, \r0, \a2
295
+ mov \r1, \a1
296
+ eors \r1, \r1, \r0
297
+ mov \a1, \r1
298
+
299
+ bics \r1, \r1, \a0
300
+ eors \a2, \a2, \r1
301
+ .endm
302
+
303
+ .macro mRound offsetRC, offsetA03
304
+
305
+ @ Theta: Column Parity Mixer
306
+ mXor3 r0, \offsetA03, lr, r7, locMem, r2
307
+ mov r1, r0
308
+ movs r2, #32-(_r1-_r0)
309
+ rors r1, r1, r2
310
+ eors r1, r1, r0
311
+ movs r2, #32-_r0
312
+ rors r1, r1, r2
313
+ mXor3 r0, r3, r10, r4, locRegL, r2
314
+ mXor r3, r1, r2, locRegL
315
+ mXor r10, r1, r2, locRegH
316
+ mXor r4, r1, r2, locRegL
317
+
318
+ mov r1, r0
319
+ movs r2, #32-(_r1-_r0)
320
+ rors r1, r1, r2
321
+ eors r1, r1, r0
322
+ movs r2, #32-_r0
323
+ rors r1, r1, r2
324
+ mXor3 r0, r8, r11, r5, locRegH, r2
325
+ mXor r8, r1, r2, locRegH
326
+ mXor r11, r1, r2, locRegH
327
+ mXor r5, r1, r2, locRegL
328
+
329
+ mov r1, r0
330
+ movs r2, #32-(_r1-_r0)
331
+ rors r1, r1, r2
332
+ eors r1, r1, r0
333
+ movs r2, #32-_r0
334
+ rors r1, r1, r2
335
+ mXor3 r0, r9, r12, r6, locRegH, r2
336
+ mXor r9, r1, r2, locRegH
337
+ mXor r12, r1, r2, locRegH
338
+ mXor r6, r1, r2, locRegL
339
+
340
+ mov r1, r0
341
+ movs r2, #32-(_r1-_r0)
342
+ rors r1, r1, r2
343
+ eors r1, r1, r0
344
+ movs r2, #32-_r0
345
+ rors r1, r1, r2
346
+ mXor \offsetA03, r1, r2, locMem
347
+ mXor lr, r1, r2, locRegH
348
+ mXor r7, r1, r2, locRegL
349
+
350
+ @ Rho-west: Plane shift
351
+ movs r0, #32-_w1
352
+ rors r4, r4, r0
353
+ rors r5, r5, r0
354
+ rors r6, r6, r0
355
+ rors r7, r7, r0
356
+ mov r0, lr
357
+ mov lr, r12
358
+ mov r12, r11
359
+ mov r11, r10
360
+ mov r10, r0
361
+
362
+ @ Iota: round constant
363
+ ldr r0, [sp, #\offsetRC]
364
+ ldmia r0!, {r1}
365
+ str r0, [sp, #\offsetRC]
366
+ eors r3, r3, r1
367
+
368
+ @ Chi: non linear step, on colums
369
+ mChi3 r3, r10, r4, r0, r1, r3, locRegL
370
+ mov r2, r8
371
+ mChi3 r2, r11, r5, r0, r1, r8, locRegH
372
+ mov r2, r9
373
+ mChi3 r2, r12, r6, r0, r1, r9, locRegH
374
+ ldr r2, [sp, #\offsetA03]
375
+ mChi3 r2, lr, r7, r0, r1, \offsetA03, locMem
376
+
377
+ @ Rho-east: Plane shift
378
+ movs r0, #32-1
379
+ mov r1, r10
380
+ rors r1, r1, r0
381
+ mov r10, r1
382
+ mov r1, r11
383
+ rors r1, r1, r0
384
+ mov r11, r1
385
+ mov r1, r12
386
+ rors r1, r1, r0
387
+ mov r12, r1
388
+ mov r1, lr
389
+ rors r1, r1, r0
390
+ mov lr, r1
391
+
392
+ movs r0, #32-_e1
393
+ rors r4, r4, r0
394
+ rors r5, r5, r0
395
+ rors r6, r6, r0
396
+ rors r7, r7, r0
397
+
398
+ mov r0, r4
399
+ mov r4, r6
400
+ mov r6, r0
401
+ mov r0, r5
402
+ mov r5, r7
403
+ mov r7, r0
404
+
405
+ .endm
406
+
407
+ @ ----------------------------------------------------------------------------
408
+ @
409
+ @ void Xoodoo_Permute_Nrounds(void *state, unsigned int nrounds)
410
+ @
411
+
412
+ @ offsets on stack
413
+ .equ Xoodoo_Permute_Nrounds_offsetA03 , 0
414
+ .equ Xoodoo_Permute_Nrounds_offsetRC , 4
415
+ .equ Xoodoo_Permute_Nrounds_SAS , 8
416
+ .equ Xoodoo_Permute_Nrounds_offsetState , Xoodoo_Permute_Nrounds_SAS
417
+
418
+ .global Xoodoo_Permute_Nrounds
419
+ .type Xoodoo_Permute_Nrounds, %function;
420
+ Xoodoo_Permute_Nrounds:
421
+ push {r4-r6,lr}
422
+ mov r2, r8
423
+ mov r3, r9
424
+ mov r4, r10
425
+ mov r5, r11
426
+ push {r0,r2-r5,r7}
427
+
428
+ sub sp, #Xoodoo_Permute_Nrounds_SAS
429
+ adr r2, Xoodoo_Permute_RoundConstants12
430
+ lsls r1, r1, #2
431
+ subs r2, r2, r1
432
+ str r2, [sp, #Xoodoo_Permute_Nrounds_offsetRC]
433
+
434
+ ldm r0!, {r3,r5,r6,r7}
435
+ mov r8, r5
436
+ mov r9, r6
437
+ str r7, [sp, #Xoodoo_Permute_Nrounds_offsetA03]
438
+ ldm r0!, {r4,r5,r6,r7}
439
+ mov r10, r4
440
+ mov r11, r5
441
+ mov r12, r6
442
+ mov lr, r7
443
+ ldm r0!, {r4,r5,r6,r7}
444
+ Xoodoo_Permute_Nrouds_Loop:
445
+ mRound Xoodoo_Permute_Nrounds_offsetRC, Xoodoo_Permute_Nrounds_offsetA03
446
+ ldr r0, [sp, #Xoodoo_Permute_Nrounds_offsetRC]
447
+ ldr r0, [r0]
448
+ cmp r0, #0
449
+ beq Xoodoo_Permute_Nrouds_Done
450
+ b Xoodoo_Permute_Nrouds_Loop
451
+ Xoodoo_Permute_Nrouds_Done:
452
+ ldr r0, [sp, #Xoodoo_Permute_Nrounds_offsetState]
453
+
454
+ stm r0!, {r3}
455
+ mov r1, r8
456
+ mov r2, r9
457
+ ldr r3, [sp, #Xoodoo_Permute_Nrounds_offsetA03]
458
+ stm r0!, {r1,r2,r3}
459
+
460
+ mov r1, r10
461
+ mov r2, r11
462
+ mov r3, r12
463
+ stm r0!, {r1,r2,r3}
464
+
465
+ mov r1, lr
466
+ stm r0!, {r1,r4,r5,r6,r7}
467
+
468
+ add sp, #Xoodoo_Permute_Nrounds_SAS
469
+ pop {r0-r4,r7}
470
+ mov r8, r1
471
+ mov r9, r2
472
+ mov r10, r3
473
+ mov r11, r4
474
+ pop {r4-r6,pc}
475
+ .align 4
476
+
477
+
478
+ Xoodoo_Permute_RoundConstants:
479
+ .long 0x00000058
480
+ .long 0x00000038
481
+ .long 0x000003C0
482
+ .long 0x000000D0
483
+ .long 0x00000120
484
+ .long 0x00000014
485
+ .long 0x00000060
486
+ .long 0x0000002C
487
+ .long 0x00000380
488
+ .long 0x000000F0
489
+ .long 0x000001A0
490
+ .long 0x00000012
491
+ Xoodoo_Permute_RoundConstants12:
492
+ .long 0
493
+ .align 4
494
+
495
+ @ ----------------------------------------------------------------------------
496
+ @
497
+ @ void Xoodoo_Permute_6rounds( void *state )
498
+ @
499
+ .global Xoodoo_Permute_6rounds
500
+ .type Xoodoo_Permute_6rounds, %function;
501
+ Xoodoo_Permute_6rounds:
502
+ movs r1, #6
503
+ b Xoodoo_Permute_Nrounds
504
+ .align 4
505
+
506
+
507
+
508
+ @ ----------------------------------------------------------------------------
509
+ @
510
+ @ void Xoodoo_Permute_12rounds( void *state )
511
+ @
512
+ .global Xoodoo_Permute_12rounds
513
+ .type Xoodoo_Permute_12rounds, %function;
514
+ Xoodoo_Permute_12rounds:
515
+ movs r1, #12
516
+ b Xoodoo_Permute_Nrounds
517
+ .align 4
518
+
519
+
520
+
521
+ .equ Xoofff_BlockSize , 3*4*4
522
+
523
+ @ ----------------------------------------------------------------------------
524
+ @
525
+ @ void Xoofff_AddIs(BitSequence *output, const BitSequence *input, BitLength bitLen)
526
+ .global Xoofff_AddIs
527
+ .type Xoofff_AddIs, %function;
528
+ Xoofff_AddIs:
529
+ push {r4-r6,lr}
530
+ movs r3, r0 @ check input and output pointer both 32-bit .align 8ed
531
+ orrs r3, r3, r1
532
+ lsls r3, r3, #30
533
+ bne Xoofff_AddIs_Bytes
534
+ subs r2, r2, #16*8
535
+ bcc Xoofff_AddIs_LessThan16
536
+ Xoofff_AddIs_16Loop:
537
+ ldr r3, [r0, #0]
538
+ ldr r4, [r0, #4]
539
+ ldmia r1!, {r5,r6}
540
+ eors r3, r3, r5
541
+ eors r4, r4, r6
542
+ stmia r0!, {r3,r4}
543
+ ldr r3, [r0, #0]
544
+ ldr r4, [r0, #4]
545
+ ldmia r1!, {r5,r6}
546
+ eors r3, r3, r5
547
+ eors r4, r4, r6
548
+ stmia r0!, {r3,r4}
549
+ subs r2, r2, #16*8
550
+ bcs Xoofff_AddIs_16Loop
551
+ Xoofff_AddIs_LessThan16:
552
+ adds r2, r2, #16*8
553
+ beq Xoofff_AddIs_Return
554
+ subs r2, r2, #4*8
555
+ bcc Xoofff_AddIs_LessThan4
556
+ Xoofff_AddIs_4Loop:
557
+ ldr r3, [r0]
558
+ ldmia r1!, {r4}
559
+ eors r3, r3, r4
560
+ stmia r0!, {r3}
561
+ subs r2, r2, #4*8
562
+ bcs Xoofff_AddIs_4Loop
563
+ Xoofff_AddIs_LessThan4:
564
+ adds r2, r2, #4*8
565
+ beq Xoofff_AddIs_Return
566
+ Xoofff_AddIs_Bytes:
567
+ subs r2, r2, #8
568
+ bcc Xoofff_AddIs_LessThan1
569
+ Xoofff_AddIs_1Loop:
570
+ ldrb r3, [r0]
571
+ ldrb r4, [r1]
572
+ adds r1, r1, #1
573
+ eors r3, r3, r4
574
+ strb r3, [r0]
575
+ adds r0, r0, #1
576
+ subs r2, r2, #8
577
+ bcs Xoofff_AddIs_1Loop
578
+ Xoofff_AddIs_LessThan1:
579
+ adds r2, r2, #8
580
+ beq Xoofff_AddIs_Return
581
+ ldrb r3, [r0]
582
+ ldrb r4, [r1]
583
+ movs r1, #1
584
+ eors r3, r3, r4
585
+ lsls r1, r1, r2
586
+ subs r1, r1, #1
587
+ ands r3, r3, r1
588
+ strb r3, [r0]
589
+ Xoofff_AddIs_Return:
590
+ pop {r4-r6,pc}
591
+ .align 4
592
+
593
+
594
+ .macro mLdu rv, ri, tt
595
+ ldrb \rv, [\ri, #3]
596
+ lsls \rv, \rv, #8
597
+ ldrb \tt, [\ri, #2]
598
+ orrs \rv, \rv, \tt
599
+ lsls \rv, \rv, #8
600
+ ldrb \tt, [\ri, #1]
601
+ orrs \rv, \rv, \tt
602
+ lsls \rv, \rv, #8
603
+ ldrb \tt, [\ri, #0]
604
+ orrs \rv, \rv, \tt
605
+ adds \ri, \ri, #4
606
+ .endm
607
+
608
+ @ ----------------------------------------------------------------------------
609
+ @
610
+ @ size_t Xoofff_CompressFastLoop(unsigned char *kRoll, unsigned char *xAccu, const unsigned char *input, size_t length)
611
+ @
612
+
613
+ @ offsets on stack
614
+ .equ Xoofff_CompressFastLoop_offsetA03 , 0
615
+ .equ Xoofff_CompressFastLoop_offsetRC , 4
616
+ .equ Xoofff_CompressFastLoop_SAS , 8
617
+ .equ Xoofff_CompressFastLoop_kRoll , Xoofff_CompressFastLoop_SAS+0
618
+ .equ Xoofff_CompressFastLoop_input , Xoofff_CompressFastLoop_SAS+4
619
+ .equ Xoofff_CompressFastLoop_xAccu , Xoofff_CompressFastLoop_SAS+8+16
620
+ .equ Xoofff_CompressFastLoop_iInput , Xoofff_CompressFastLoop_SAS+12+16
621
+ .equ Xoofff_CompressFastLoop_length , Xoofff_CompressFastLoop_SAS+16+16
622
+
623
+ .global Xoofff_CompressFastLoop
624
+ .type Xoofff_CompressFastLoop, %function;
625
+ Xoofff_CompressFastLoop:
626
+ subs r3, #Xoofff_BlockSize @ length must be greater than block size
627
+ push {r1-r7,lr}
628
+ mov r4, r8
629
+ mov r5, r9
630
+ mov r6, r10
631
+ mov r7, r11
632
+ push {r0,r2,r4-r7}
633
+ sub sp, #Xoofff_CompressFastLoop_SAS
634
+ ldm r0!, {r3,r5,r6,r7} @ get initial kRoll
635
+ mov r8, r5
636
+ mov r9, r6
637
+ str r7, [sp, #Xoofff_CompressFastLoop_offsetA03]
638
+ ldm r0!, {r4,r5,r6,r7}
639
+ mov r10, r4
640
+ mov r11, r5
641
+ mov r12, r6
642
+ mov lr, r7
643
+ ldm r0!, {r4,r5,r6,r7}
644
+ Xoofff_CompressFastLoop_Loop:
645
+ adr r1, Xoofff_CompressFastLoop_RoundConstants6
646
+ str r1, [sp, #Xoofff_CompressFastLoop_offsetRC]
647
+
648
+ ldr r0, [sp, #Xoofff_CompressFastLoop_input] @ add input
649
+ lsls r1, r0, #30
650
+ bne Xoofff_CompressFastLoop_Unaligned
651
+
652
+ Xoofff_CompressFastLoop_Aligned:
653
+ ldmia r0!, {r1}
654
+ eors r3, r3, r1
655
+ ldmia r0!, {r1}
656
+ mov r2, r8
657
+ eors r2, r2, r1
658
+ mov r8, r2
659
+ ldmia r0!, {r1}
660
+ mov r2, r9
661
+ eors r2, r2, r1
662
+ mov r9, r2
663
+ ldmia r0!, {r1}
664
+ ldr r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
665
+ eors r2, r2, r1
666
+ str r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
667
+
668
+ ldmia r0!, {r1}
669
+ mov r2, r10
670
+ eors r2, r2, r1
671
+ mov r10, r2
672
+ ldmia r0!, {r1}
673
+ mov r2, r11
674
+ eors r2, r2, r1
675
+ mov r11, r2
676
+ ldmia r0!, {r1}
677
+ mov r2, r12
678
+ eors r2, r2, r1
679
+ mov r12, r2
680
+ ldmia r0!, {r1}
681
+ mov r2, lr
682
+ eors r2, r2, r1
683
+ mov lr, r2
684
+
685
+ ldmia r0!, {r1,r2}
686
+ eors r4, r4, r1
687
+ eors r5, r5, r2
688
+ ldmia r0!, {r1,r2}
689
+ eors r6, r6, r1
690
+ eors r7, r7, r2
691
+
692
+ b Xoofff_CompressFastLoop_Permute
693
+ .align 4
694
+ Xoofff_CompressFastLoop_RoundConstants6:
695
+ .long 0x00000060
696
+ .long 0x0000002C
697
+ .long 0x00000380
698
+ .long 0x000000F0
699
+ .long 0x000001A0
700
+ .long 0x00000012
701
+ .long 0
702
+
703
+ Xoofff_CompressFastLoop_Unaligned:
704
+ mLdu r1, r0, r2
705
+ eors r3, r3, r1
706
+ mLdu r1, r0, r2
707
+ mov r2, r8
708
+ eors r2, r2, r1
709
+ mov r8, r2
710
+ mLdu r1, r0, r2
711
+ mov r2, r9
712
+ eors r2, r2, r1
713
+ mov r9, r2
714
+ mLdu r1, r0, r2
715
+ ldr r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
716
+ eors r2, r2, r1
717
+ str r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
718
+
719
+ mLdu r1, r0, r2
720
+ mov r2, r10
721
+ eors r2, r2, r1
722
+ mov r10, r2
723
+ mLdu r1, r0, r2
724
+ mov r2, r11
725
+ eors r2, r2, r1
726
+ mov r11, r2
727
+ mLdu r1, r0, r2
728
+ mov r2, r12
729
+ eors r2, r2, r1
730
+ mov r12, r2
731
+ mLdu r1, r0, r2
732
+ mov r2, lr
733
+ eors r2, r2, r1
734
+ mov lr, r2
735
+
736
+ mLdu r1, r0, r2
737
+ eors r4, r4, r1
738
+ mLdu r1, r0, r2
739
+ eors r5, r5, r1
740
+ mLdu r1, r0, r2
741
+ eors r6, r6, r1
742
+ mLdu r1, r0, r2
743
+ eors r7, r7, r1
744
+
745
+ Xoofff_CompressFastLoop_Permute:
746
+ str r0, [sp, #Xoofff_CompressFastLoop_input]
747
+ Xoofff_CompressFastLoop_PermuteLoop:
748
+ mRound Xoofff_CompressFastLoop_offsetRC, Xoofff_CompressFastLoop_offsetA03
749
+ ldr r0, [sp, #Xoofff_CompressFastLoop_offsetRC]
750
+ ldr r0, [r0]
751
+ cmp r0, #0
752
+ beq Xoofff_CompressFastLoop_PermuteDone
753
+ b Xoofff_CompressFastLoop_PermuteLoop
754
+ Xoofff_CompressFastLoop_PermuteDone:
755
+
756
+ @ Extract and add into xAccu
757
+ ldr r0, [sp, #Xoofff_CompressFastLoop_xAccu]
758
+
759
+ ldr r1, [r0]
760
+ eors r1, r1, r3
761
+ stmia r0!, {r1}
762
+
763
+ ldr r1, [r0]
764
+ mov r2, r8
765
+ eors r1, r1, r2
766
+ stmia r0!, {r1}
767
+
768
+ ldr r1, [r0]
769
+ mov r2, r9
770
+ eors r1, r1, r2
771
+ stmia r0!, {r1}
772
+
773
+ ldr r1, [r0]
774
+ ldr r2, [sp, #Xoofff_CompressFastLoop_offsetA03]
775
+ eors r1, r1, r2
776
+ stmia r0!, {r1}
777
+
778
+
779
+ ldr r1, [r0]
780
+ mov r2, r10
781
+ eors r1, r1, r2
782
+ stmia r0!, {r1}
783
+ ldr r1, [r0]
784
+ mov r2, r11
785
+ eors r1, r1, r2
786
+ stmia r0!, {r1}
787
+ ldr r1, [r0]
788
+ mov r2, r12
789
+ eors r1, r1, r2
790
+ stmia r0!, {r1}
791
+ ldr r1, [r0]
792
+ mov r2, lr
793
+ eors r1, r1, r2
794
+ stmia r0!, {r1}
795
+
796
+ ldr r1, [r0, #0]
797
+ ldr r2, [r0, #4]
798
+ ldr r3, [r0, #8]
799
+ eors r1, r1, r4
800
+ ldr r4, [r0, #12]
801
+ eors r2, r2, r5
802
+ eors r3, r3, r6
803
+ eors r4, r4, r7
804
+ stm r0!, {r1,r2,r3,r4}
805
+
806
+ @roll kRoll-c
807
+ ldr r0, [sp, #Xoofff_CompressFastLoop_kRoll]
808
+ ldmia r0!, {r7}
809
+ ldmia r0!, {r4-r6}
810
+ ldmia r0!, {r3}
811
+ ldmia r0!, {r1,r2}
812
+ mov r8, r1
813
+ mov r9, r2
814
+ ldmia r0!, {r1,r2}
815
+ str r1, [sp, #Xoofff_CompressFastLoop_offsetA03]
816
+ mov r10, r2
817
+ ldmia r0!, {r1,r2}
818
+ mov r11, r1
819
+ mov r12, r2
820
+ ldmia r0!, {r1}
821
+ mov lr, r1
822
+
823
+ lsls r1, r7, #13
824
+ eors r7, r7, r1
825
+ mov r1, r3
826
+ movs r2, #32-3
827
+ rors r1, r1, r2
828
+ eors r7, r7, r1
829
+
830
+ subs r0, r0, #Xoofff_BlockSize
831
+ stmia r0!, {r3}
832
+ mov r1, r8
833
+ mov r2, r9
834
+ stmia r0!, {r1,r2}
835
+ ldr r1, [sp, #Xoofff_CompressFastLoop_offsetA03]
836
+ mov r2, r10
837
+ stmia r0!, {r1,r2}
838
+ mov r1, r11
839
+ mov r2, r12
840
+ stmia r0!, {r1,r2}
841
+ mov r1, lr
842
+ stmia r0!, {r1,r4-r7}
843
+
844
+ @ loop management
845
+ ldr r0, [sp, #Xoofff_CompressFastLoop_length]
846
+ subs r0, #Xoofff_BlockSize
847
+ str r0, [sp, #Xoofff_CompressFastLoop_length]
848
+ bcc Xoofff_CompressFastLoop_Done
849
+ b Xoofff_CompressFastLoop_Loop
850
+ Xoofff_CompressFastLoop_Done:
851
+ @ return number of bytes processed
852
+ ldr r0, [sp, #Xoofff_CompressFastLoop_input]
853
+ ldr r1, [sp, #Xoofff_CompressFastLoop_iInput]
854
+ subs r0, r0, r1
855
+ add sp, #Xoofff_CompressFastLoop_SAS+8
856
+ pop {r4-r7}
857
+ mov r8, r4
858
+ mov r9, r5
859
+ mov r10, r6
860
+ mov r11, r7
861
+ pop {r1-r7,pc}
862
+ .align 4
863
+
864
+
865
+ .macro mStu rv, ro
866
+ strb \rv, [\ro, #0]
867
+ lsrs \rv, \rv, #8
868
+ strb \rv, [\ro, #1]
869
+ lsrs \rv, \rv, #8
870
+ strb \rv, [\ro, #2]
871
+ lsrs \rv, \rv, #8
872
+ strb \rv, [\ro, #3]
873
+ adds \ro, \ro, #4
874
+ .endm
875
+
876
+ @ ----------------------------------------------------------------------------
877
+ @
878
+ @ size_t Xoofff_ExpandFastLoop(unsigned char *yAccu, const unsigned char *kRoll, unsigned char *output, size_t length)
879
+ @
880
+
881
+ @ offsets on stack
882
+ .equ Xoofff_ExpandFastLoop_offsetA03, 0
883
+ .equ Xoofff_ExpandFastLoop_offsetRC , 4
884
+ .equ Xoofff_ExpandFastLoop_SAS , 8
885
+ .equ Xoofff_ExpandFastLoop_yAccu , Xoofff_ExpandFastLoop_SAS+0
886
+ .equ Xoofff_ExpandFastLoop_output , Xoofff_ExpandFastLoop_SAS+4
887
+ .equ Xoofff_ExpandFastLoop_kRoll , Xoofff_ExpandFastLoop_SAS+8+16
888
+ .equ Xoofff_ExpandFastLoop_iOutput , Xoofff_ExpandFastLoop_SAS+12+16
889
+ .equ Xoofff_ExpandFastLoop_length , Xoofff_ExpandFastLoop_SAS+16+16
890
+
891
+ .global Xoofff_ExpandFastLoop
892
+ .type Xoofff_ExpandFastLoop, %function;
893
+ Xoofff_ExpandFastLoop:
894
+ subs r3, #Xoofff_BlockSize @ length must be greater than block size
895
+ push {r1-r7,lr}
896
+ mov r4, r8
897
+ mov r5, r9
898
+ mov r6, r10
899
+ mov r7, r11
900
+ push {r0,r2,r4-r7}
901
+ sub sp, #Xoofff_ExpandFastLoop_SAS
902
+
903
+ ldm r0!, {r3,r5,r6,r7} @ get initial yAccu
904
+ mov r8, r5
905
+ mov r9, r6
906
+ str r7, [sp, #Xoofff_ExpandFastLoop_offsetA03]
907
+ ldm r0!, {r4,r5,r6,r7}
908
+ mov r10, r4
909
+ mov r11, r5
910
+ mov r12, r6
911
+ mov lr, r7
912
+ ldm r0!, {r4,r5,r6,r7}
913
+ Xoofff_ExpandFastLoop_Loop:
914
+ adr r1, Xoofff_ExpandFastLoop_RoundConstants6
915
+ str r1, [sp, #Xoofff_ExpandFastLoop_offsetRC]
916
+ Xoofff_ExpandFastLoop_PermuteLoop:
917
+ mRound Xoofff_ExpandFastLoop_offsetRC, Xoofff_ExpandFastLoop_offsetA03
918
+ ldr r0, [sp, #Xoofff_ExpandFastLoop_offsetRC]
919
+ ldr r0, [r0]
920
+ cmp r0, #0
921
+ beq Xoofff_ExpandFastLoop_PermuteDone
922
+ b Xoofff_ExpandFastLoop_PermuteLoop
923
+ Xoofff_ExpandFastLoop_RoundConstants6:
924
+ .long 0x00000060
925
+ .long 0x0000002C
926
+ .long 0x00000380
927
+ .long 0x000000F0
928
+ .long 0x000001A0
929
+ .long 0x00000012
930
+ .long 0
931
+ Xoofff_ExpandFastLoop_PermuteDone:
932
+ @ Add k and extract
933
+ ldr r0, [sp, #Xoofff_ExpandFastLoop_kRoll]
934
+ ldr r1, [sp, #Xoofff_ExpandFastLoop_output] @ add input
935
+ lsls r2, r1, #30
936
+ bne Xoofff_ExpandFastLoop_Unaligned
937
+ Xoofff_ExpandFastLoop_Aligned:
938
+ ldmia r0!, {r2}
939
+ eors r2, r2, r3
940
+ stmia r1!, {r2}
941
+ ldmia r0!, {r2}
942
+ mov r3, r8
943
+ eors r2, r2, r3
944
+ stmia r1!, {r2}
945
+ ldmia r0!, {r2}
946
+ mov r3, r9
947
+ eors r2, r2, r3
948
+ stmia r1!, {r2}
949
+ ldmia r0!, {r2}
950
+ ldr r3, [sp, #Xoofff_ExpandFastLoop_offsetA03]
951
+ eors r2, r2, r3
952
+ stmia r1!, {r2}
953
+
954
+ ldmia r0!, {r2}
955
+ mov r3, r10
956
+ eors r2, r2, r3
957
+ stmia r1!, {r2}
958
+ ldmia r0!, {r2}
959
+ mov r3, r11
960
+ eors r2, r2, r3
961
+ stmia r1!, {r2}
962
+ ldmia r0!, {r2}
963
+ mov r3, r12
964
+ eors r2, r2, r3
965
+ stmia r1!, {r2}
966
+ ldmia r0!, {r2}
967
+ mov r3, lr
968
+ eors r2, r2, r3
969
+ stmia r1!, {r2}
970
+
971
+ ldmia r0!, {r2,r3}
972
+ eors r2, r2, r4
973
+ eors r3, r3, r5
974
+ stmia r1!, {r2,r3}
975
+ ldmia r0!, {r2,r3}
976
+ eors r2, r2, r6
977
+ eors r3, r3, r7
978
+ stmia r1!, {r2,r3}
979
+ b Xoofff_ExpandFastLoop_ExtractDone
980
+
981
+ Xoofff_ExpandFastLoop_Unaligned:
982
+ ldmia r0!, {r2}
983
+ eors r2, r2, r3
984
+ mStu r2, r1
985
+ ldmia r0!, {r2}
986
+ mov r3, r8
987
+ eors r2, r2, r3
988
+ mStu r2, r1
989
+ ldmia r0!, {r2}
990
+ mov r3, r9
991
+ eors r2, r2, r3
992
+ mStu r2, r1
993
+ ldmia r0!, {r2}
994
+ ldr r3, [sp, #Xoofff_ExpandFastLoop_offsetA03]
995
+ eors r2, r2, r3
996
+ mStu r2, r1
997
+
998
+ ldmia r0!, {r2}
999
+ mov r3, r10
1000
+ eors r2, r2, r3
1001
+ mStu r2, r1
1002
+ ldmia r0!, {r2}
1003
+ mov r3, r11
1004
+ eors r2, r2, r3
1005
+ mStu r2, r1
1006
+ ldmia r0!, {r2}
1007
+ mov r3, r12
1008
+ eors r2, r2, r3
1009
+ mStu r2, r1
1010
+ ldmia r0!, {r2}
1011
+ mov r3, lr
1012
+ eors r2, r2, r3
1013
+ mStu r2, r1
1014
+
1015
+ ldmia r0!, {r2,r3}
1016
+ eors r2, r2, r4
1017
+ mStu r2, r1
1018
+ eors r3, r3, r5
1019
+ mStu r3, r1
1020
+ ldmia r0!, {r2,r3}
1021
+ eors r2, r2, r6
1022
+ mStu r2, r1
1023
+ eors r3, r3, r7
1024
+ mStu r3, r1
1025
+
1026
+ Xoofff_ExpandFastLoop_ExtractDone:
1027
+ str r1, [sp, #Xoofff_ExpandFastLoop_output]
1028
+
1029
+ @ roll-e yAccu
1030
+ ldr r0, [sp, #Xoofff_ExpandFastLoop_yAccu]
1031
+ ldmia r0!, {r7}
1032
+ ldmia r0!, {r4-r6}
1033
+ ldmia r0!, {r3}
1034
+ ldmia r0!, {r1,r2}
1035
+ mov r8, r1
1036
+ mov r9, r2
1037
+ ldmia r0!, {r1,r2}
1038
+ str r1, [sp, #Xoofff_ExpandFastLoop_offsetA03]
1039
+ mov r10, r2
1040
+ ldmia r0!, {r1,r2}
1041
+ mov r11, r1
1042
+ mov r12, r2
1043
+ ldmia r0!, {r1}
1044
+ mov lr, r1
1045
+
1046
+ mov r1, r10
1047
+ ands r1, r1, r3
1048
+ movs r2, #32-5
1049
+ rors r7, r7, r2
1050
+ eors r7, r7, r1
1051
+ movs r2, #32-13
1052
+ mov r1, r3
1053
+ rors r1, r1, r2
1054
+ eors r7, r7, r1
1055
+ movs r1, #7
1056
+ eors r7, r7, r1
1057
+
1058
+ subs r0, r0, #Xoofff_BlockSize
1059
+ stmia r0!, {r3}
1060
+ mov r1, r8
1061
+ mov r2, r9
1062
+ stmia r0!, {r1,r2}
1063
+ ldr r1, [sp, #Xoofff_ExpandFastLoop_offsetA03]
1064
+ mov r2, r10
1065
+ stmia r0!, {r1,r2}
1066
+ mov r1, r11
1067
+ mov r2, r12
1068
+ stmia r0!, {r1,r2}
1069
+ mov r1, lr
1070
+ stmia r0!, {r1,r4-r7}
1071
+
1072
+ @ loop management
1073
+ ldr r0, [sp, #Xoofff_ExpandFastLoop_length]
1074
+ subs r0, #Xoofff_BlockSize
1075
+ str r0, [sp, #Xoofff_ExpandFastLoop_length]
1076
+ bcc Xoofff_ExpandFastLoop_Done
1077
+ b Xoofff_ExpandFastLoop_Loop
1078
+ Xoofff_ExpandFastLoop_Done:
1079
+ @ return number of bytes processed
1080
+ ldr r0, [sp, #Xoofff_ExpandFastLoop_output]
1081
+ ldr r1, [sp, #Xoofff_ExpandFastLoop_iOutput]
1082
+ subs r0, r0, r1
1083
+ add sp, #Xoofff_ExpandFastLoop_SAS+8
1084
+ pop {r4-r7}
1085
+ mov r8, r4
1086
+ mov r9, r5
1087
+ mov r10, r6
1088
+ mov r11, r7
1089
+ pop {r1-r7,pc}
1090
+ .align 4
1091
+
1092
+