sleeping_kangaroo12 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +127 -0
  3. data/ext/Rakefile +73 -0
  4. data/ext/binding/sleeping_kangaroo12.c +39 -0
  5. data/ext/config/xkcp.build +17 -0
  6. data/ext/xkcp/LICENSE +1 -0
  7. data/ext/xkcp/Makefile +15 -0
  8. data/ext/xkcp/Makefile.build +200 -0
  9. data/ext/xkcp/README.markdown +296 -0
  10. data/ext/xkcp/lib/HighLevel.build +143 -0
  11. data/ext/xkcp/lib/LowLevel.build +757 -0
  12. data/ext/xkcp/lib/common/align.h +33 -0
  13. data/ext/xkcp/lib/common/brg_endian.h +143 -0
  14. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +301 -0
  15. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.h +97 -0
  16. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +81 -0
  17. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +125 -0
  18. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +48 -0
  19. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +79 -0
  20. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +81 -0
  21. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +73 -0
  22. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +195 -0
  23. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +111 -0
  24. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +76 -0
  25. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +314 -0
  26. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +61 -0
  27. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +67 -0
  28. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +128 -0
  29. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +93 -0
  30. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +599 -0
  31. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +573 -0
  32. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +87 -0
  33. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +88 -0
  34. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +274 -0
  35. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +132 -0
  36. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +217 -0
  37. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +81 -0
  38. data/ext/xkcp/lib/high/Keyak/Motorist.inc +953 -0
  39. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +533 -0
  40. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +115 -0
  41. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +557 -0
  42. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +247 -0
  43. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +66 -0
  44. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +336 -0
  45. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +26 -0
  46. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +55 -0
  47. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +35 -0
  48. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +634 -0
  49. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +147 -0
  50. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +483 -0
  51. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +241 -0
  52. data/ext/xkcp/lib/high/common/Phases.h +25 -0
  53. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +41 -0
  54. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +1666 -0
  55. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +1655 -0
  56. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +1268 -0
  57. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +1264 -0
  58. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +1178 -0
  59. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +1175 -0
  60. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +1338 -0
  61. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +1336 -0
  62. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +1343 -0
  63. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +1339 -0
  64. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +42 -0
  65. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +823 -0
  66. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +831 -0
  67. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +31 -0
  68. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +540 -0
  69. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +42 -0
  70. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +733 -0
  71. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +1121 -0
  72. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-AVX2.s +1100 -0
  73. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +52 -0
  74. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +623 -0
  75. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +47 -0
  76. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +6 -0
  77. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +6 -0
  78. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +6 -0
  79. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +1031 -0
  80. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +53 -0
  81. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +44 -0
  82. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +476 -0
  83. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +6 -0
  84. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +6 -0
  85. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros +748 -0
  86. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +305 -0
  87. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-SnP.h +40 -0
  88. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +420 -0
  89. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +43 -0
  90. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-inplace32BI.c +1163 -0
  91. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-SnP.h +54 -0
  92. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +565 -0
  93. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +7 -0
  94. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +7 -0
  95. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +8 -0
  96. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +6 -0
  97. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +6 -0
  98. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +44 -0
  99. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +23 -0
  100. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +625 -0
  101. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +44 -0
  102. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +440 -0
  103. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h +23 -0
  104. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +42 -0
  105. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +1196 -0
  106. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +1124 -0
  107. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +1196 -0
  108. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +1392 -0
  109. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +1394 -0
  110. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +42 -0
  111. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +7 -0
  112. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +7 -0
  113. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +7 -0
  114. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +850 -0
  115. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +51 -0
  116. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +957 -0
  117. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +49 -0
  118. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +8 -0
  119. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +8 -0
  120. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +9 -0
  121. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +9 -0
  122. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +45 -0
  123. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +37 -0
  124. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +1321 -0
  125. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +55 -0
  126. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +7 -0
  127. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +7 -0
  128. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +7 -0
  129. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +7 -0
  130. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +7 -0
  131. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +7 -0
  132. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +881 -0
  133. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +51 -0
  134. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +45 -0
  135. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +37 -0
  136. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +45 -0
  137. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +38 -0
  138. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +1615 -0
  139. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +57 -0
  140. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +7 -0
  141. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +7 -0
  142. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +7 -0
  143. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +45 -0
  144. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +37 -0
  145. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +45 -0
  146. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +38 -0
  147. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +45 -0
  148. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +38 -0
  149. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +41 -0
  150. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +442 -0
  151. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +446 -0
  152. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +419 -0
  153. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +427 -0
  154. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +41 -0
  155. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +647 -0
  156. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +39 -0
  157. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +190 -0
  158. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +43 -0
  159. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +412 -0
  160. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +23 -0
  161. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +41 -0
  162. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +454 -0
  163. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +458 -0
  164. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +455 -0
  165. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +458 -0
  166. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +41 -0
  167. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +728 -0
  168. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +43 -0
  169. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +414 -0
  170. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +23 -0
  171. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +42 -0
  172. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +527 -0
  173. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +533 -0
  174. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +528 -0
  175. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +534 -0
  176. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +521 -0
  177. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +527 -0
  178. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +517 -0
  179. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +523 -0
  180. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +550 -0
  181. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +556 -0
  182. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +32 -0
  183. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +432 -0
  184. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +42 -0
  185. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +929 -0
  186. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +40 -0
  187. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +244 -0
  188. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +46 -0
  189. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +184 -0
  190. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +454 -0
  191. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +459 -0
  192. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +83 -0
  193. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +88 -0
  194. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +7 -0
  195. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +7 -0
  196. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +7 -0
  197. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +7 -0
  198. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +44 -0
  199. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +437 -0
  200. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +23 -0
  201. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +57 -0
  202. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +475 -0
  203. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +480 -0
  204. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +590 -0
  205. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +590 -0
  206. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +126 -0
  207. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +68 -0
  208. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +174 -0
  209. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +80 -0
  210. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +68 -0
  211. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +142 -0
  212. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +55 -0
  213. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +1086 -0
  214. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +1092 -0
  215. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +721 -0
  216. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +726 -0
  217. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +723 -0
  218. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +729 -0
  219. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +1164 -0
  220. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +1165 -0
  221. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +562 -0
  222. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +563 -0
  223. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +563 -0
  224. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +565 -0
  225. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +55 -0
  226. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +476 -0
  227. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +485 -0
  228. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +362 -0
  229. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +367 -0
  230. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +43 -0
  231. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +1341 -0
  232. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +581 -0
  233. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +58 -0
  234. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +332 -0
  235. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +329 -0
  236. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +53 -0
  237. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +355 -0
  238. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +79 -0
  239. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +56 -0
  240. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +399 -0
  241. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +127 -0
  242. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +43 -0
  243. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +253 -0
  244. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +1044 -0
  245. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +49 -0
  246. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +45 -0
  247. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +37 -0
  248. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +1587 -0
  249. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +48 -0
  250. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +1202 -0
  251. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +48 -0
  252. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +484 -0
  253. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +44 -0
  254. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +45 -0
  255. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +37 -0
  256. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +939 -0
  257. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +49 -0
  258. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +1216 -0
  259. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +48 -0
  260. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +45 -0
  261. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +37 -0
  262. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +290 -0
  263. data/ext/xkcp/lib/low/common/SnP-Relaned.h +141 -0
  264. data/ext/xkcp/support/Build/ExpandProducts.xsl +79 -0
  265. data/ext/xkcp/support/Build/ToGlobalMakefile.xsl +206 -0
  266. data/ext/xkcp/support/Build/ToOneTarget.xsl +89 -0
  267. data/ext/xkcp/support/Build/ToTargetConfigFile.xsl +37 -0
  268. data/ext/xkcp/support/Build/ToTargetMakefile.xsl +298 -0
  269. data/ext/xkcp/support/Build/ToVCXProj.xsl +198 -0
  270. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +133 -0
  271. data/ext/xkcp/support/Kernel-PMU/Makefile +8 -0
  272. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +129 -0
  273. data/ext/xkcp/support/Kernel-PMU/load-module +1 -0
  274. data/ext/xkcp/util/KeccakSum/KeccakSum.c +394 -0
  275. data/ext/xkcp/util/KeccakSum/base64.c +86 -0
  276. data/ext/xkcp/util/KeccakSum/base64.h +12 -0
  277. data/lib/sleeping_kangaroo12/binding.rb +15 -0
  278. data/lib/sleeping_kangaroo12/build/loader.rb +40 -0
  279. data/lib/sleeping_kangaroo12/build/platform.rb +37 -0
  280. data/lib/sleeping_kangaroo12/build.rb +4 -0
  281. data/lib/sleeping_kangaroo12/digest.rb +103 -0
  282. data/lib/sleeping_kangaroo12/version.rb +5 -0
  283. data/lib/sleeping_kangaroo12.rb +7 -0
  284. metadata +372 -0
@@ -0,0 +1,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