sleeping_kangaroo12 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
+