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