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,476 @@
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 ARMv7a + NEON architecture (Cortex-A8, ...).
18
+
19
+ PRESERVE8
20
+ AREA |.text|, CODE, READONLY
21
+
22
+ ; ----------------------------------------------------------------------------
23
+ ;
24
+ ; void Xoodoo_Initialize(void *state)
25
+ ;
26
+ ALIGN
27
+ EXPORT Xoodoo_Initialize
28
+ Xoodoo_Initialize PROC
29
+ vmov.i32 q0, #0
30
+ vstm r0!, { d0 - d1 }
31
+ vstm r0!, { d0 - d1 }
32
+ vstm r0!, { d0 - d1 }
33
+ bx lr
34
+ align 8
35
+ ENDP
36
+
37
+ ; ----------------------------------------------------------------------------
38
+ ;
39
+ ; void Xoodoo_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
40
+ ;
41
+ EXPORT Xoodoo_AddBytes
42
+ Xoodoo_AddBytes PROC
43
+ push {r4,lr}
44
+ adds r0, r0, r2 ; state += offset
45
+ subs r3, r3, #4 ; if length >= 4
46
+ bcc Xoodoo_AddBytes_Bytes
47
+ Xoodoo_AddBytes_LanesLoop ; then, perform on lanes
48
+ ldr r2, [r0]
49
+ ldr r4, [r1], #4
50
+ eors r2, r2, r4
51
+ str r2, [r0], #4
52
+ subs r3, r3, #4
53
+ bcs Xoodoo_AddBytes_LanesLoop
54
+ Xoodoo_AddBytes_Bytes
55
+ adds r3, r3, #3
56
+ bcc Xoodoo_AddBytes_Exit
57
+ Xoodoo_AddBytes_BytesLoop
58
+ ldrb r2, [r0]
59
+ ldrb r4, [r1], #1
60
+ eors r2, r2, r4
61
+ strb r2, [r0], #1
62
+ subs r3, r3, #1
63
+ bcs Xoodoo_AddBytes_BytesLoop
64
+ Xoodoo_AddBytes_Exit
65
+ pop {r4,pc}
66
+ align 8
67
+ ENDP
68
+
69
+ ; ----------------------------------------------------------------------------
70
+ ;
71
+ ; void Xoodoo_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
72
+ ;
73
+ EXPORT Xoodoo_OverwriteBytes
74
+ Xoodoo_OverwriteBytes PROC
75
+ adds r0, r0, r2 ; state += offset
76
+ subs r3, r3, #4 ; if length >= 4
77
+ bcc Xoodoo_OverwriteBytes_Bytes
78
+ Xoodoo_OverwriteBytes_LanesLoop ; then, perform on words
79
+ ldr r2, [r1], #4
80
+ str r2, [r0], #4
81
+ subs r3, r3, #4
82
+ bcs Xoodoo_OverwriteBytes_LanesLoop
83
+ Xoodoo_OverwriteBytes_Bytes
84
+ adds r3, r3, #3
85
+ bcc Xoodoo_OverwriteBytes_Exit
86
+ Xoodoo_OverwriteBytes_BytesLoop
87
+ ldrb r2, [r1], #1
88
+ strb r2, [r0], #1
89
+ subs r3, r3, #1
90
+ bcs Xoodoo_OverwriteBytes_BytesLoop
91
+ Xoodoo_OverwriteBytes_Exit
92
+ bx lr
93
+ align 8
94
+ ENDP
95
+
96
+ ; ----------------------------------------------------------------------------
97
+ ;
98
+ ; void Xoodoo_OverwriteWithZeroes(void *state, unsigned int byteCount)
99
+ ;
100
+ EXPORT Xoodoo_OverwriteWithZeroes
101
+ Xoodoo_OverwriteWithZeroes PROC
102
+ movs r3, #0
103
+ lsrs r2, r1, #2
104
+ beq Xoodoo_OverwriteWithZeroes_Bytes
105
+ Xoodoo_OverwriteWithZeroes_LoopLanes
106
+ str r3, [r0], #4
107
+ subs r2, r2, #1
108
+ bne Xoodoo_OverwriteWithZeroes_LoopLanes
109
+ Xoodoo_OverwriteWithZeroes_Bytes
110
+ ands r1, #3
111
+ beq Xoodoo_OverwriteWithZeroes_Exit
112
+ Xoodoo_OverwriteWithZeroes_LoopBytes
113
+ strb r3, [r0], #1
114
+ subs r1, r1, #1
115
+ bne Xoodoo_OverwriteWithZeroes_LoopBytes
116
+ Xoodoo_OverwriteWithZeroes_Exit
117
+ bx lr
118
+ align 8
119
+ ENDP
120
+
121
+ ; ----------------------------------------------------------------------------
122
+ ;
123
+ ; void Xoodoo_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
124
+ ;
125
+ EXPORT Xoodoo_ExtractBytes
126
+ Xoodoo_ExtractBytes PROC
127
+ adds r0, r0, r2 ; state += offset
128
+ subs r3, r3, #4 ; if length >= 4
129
+ bcc Xoodoo_ExtractBytes_Bytes
130
+ Xoodoo_ExtractBytes_LanesLoop ; then, handle words
131
+ ldr r2, [r0], #4
132
+ str r2, [r1], #4
133
+ subs r3, r3, #4
134
+ bcs Xoodoo_ExtractBytes_LanesLoop
135
+ Xoodoo_ExtractBytes_Bytes
136
+ adds r3, r3, #3
137
+ bcc Xoodoo_ExtractBytes_Exit
138
+ Xoodoo_ExtractBytes_BytesLoop
139
+ ldrb r2, [r0], #1
140
+ strb r2, [r1], #1
141
+ subs r3, r3, #1
142
+ bcs Xoodoo_ExtractBytes_BytesLoop
143
+ Xoodoo_ExtractBytes_Exit
144
+ bx lr
145
+ align 8
146
+ ENDP
147
+
148
+ ; ----------------------------------------------------------------------------
149
+ ;
150
+ ; void Xoodoo_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
151
+ ;
152
+ EXPORT Xoodoo_ExtractAndAddBytes
153
+ Xoodoo_ExtractAndAddBytes PROC
154
+ push {r4,r5}
155
+ adds r0, r0, r3 ; state += offset (offset register no longer needed, reuse for length)
156
+ ldr r3, [sp, #8] ; get length argument from stack
157
+ subs r3, r3, #4 ; if length >= 4
158
+ bcc Xoodoo_ExtractAndAddBytes_Bytes
159
+ Xoodoo_ExtractAndAddBytes_LanesLoop ; then, handle words
160
+ ldr r5, [r0], #4
161
+ ldr r4, [r1], #4
162
+ eors r5, r5, r4
163
+ str r5, [r2], #4
164
+ subs r3, r3, #4
165
+ bcs Xoodoo_ExtractAndAddBytes_LanesLoop
166
+ Xoodoo_ExtractAndAddBytes_Bytes
167
+ adds r3, r3, #3
168
+ bcc Xoodoo_ExtractAndAddBytes_Exit
169
+ Xoodoo_ExtractAndAddBytes_BytesLoop
170
+ ldrb r5, [r0], #1
171
+ ldrb r4, [r1], #1
172
+ eors r5, r5, r4
173
+ strb r5, [r2], #1
174
+ subs r3, r3, #1
175
+ bcs Xoodoo_ExtractAndAddBytes_BytesLoop
176
+ Xoodoo_ExtractAndAddBytes_Exit
177
+ pop {r4,r5}
178
+ bx lr
179
+ align 8
180
+ ENDP
181
+
182
+ ; ----------------------------------------------------------------------------
183
+
184
+ macro
185
+ mRound
186
+
187
+ ; Theta: Column Parity Mixer
188
+ veor.32 q4, q0, q1
189
+ veor.32 q4, q4, q2
190
+ vext.32 q4, q4, q4, #3
191
+ vshl.u32 q3, q4, #5
192
+ vsri.u32 q3, q4, #32-5
193
+ vshl.u32 q5, q4, #14
194
+ vsri.u32 q5, q4, #32-14
195
+ veor.32 q3, q3, q5
196
+ veor.32 q0, q0, q3
197
+ veor.32 q1, q1, q3
198
+ veor.32 q5, q2, q3 ; q2 resides in q5
199
+
200
+ ; Rho-west: Plane shift
201
+ ; Iota: add round constant
202
+ vshl.u32 q2, q5, #11
203
+ vext.32 q1, q1, q1, #3
204
+ vldmia r1!, {d6} ; iota
205
+ vsri.u32 q2, q5, #32-11
206
+ veor.32 d0, d0, d6 ; iota
207
+
208
+ ; Chi: non linear step, on colums
209
+ vbic.32 q3, q2, q1
210
+ vbic.32 q4, q0, q2
211
+ vbic.32 q5, q1, q0
212
+ veor.32 q0, q0, q3
213
+ veor.32 q4, q1, q4 ; q1 resides in q4
214
+ veor.32 q2, q2, q5
215
+
216
+ ; Rho-east: Plane shift
217
+ vext.32 q5, q2, q2, #2
218
+ vshl.u32 q1, q4, #1
219
+ vshl.u32 q2, q5, #8
220
+ vsri.u32 q1, q4, #32-1
221
+ vsri.u32 q2, q5, #32-8
222
+ mend
223
+
224
+ ; ----------------------------------------------------------------------------
225
+ ;
226
+ ; void Xoodoo_Permute_6rounds( void *state )
227
+ ;
228
+ EXPORT Xoodoo_Permute_6rounds
229
+ Xoodoo_Permute_6rounds PROC
230
+ vpush {q4-q5}
231
+ vldmia r0, {q0-q2}
232
+ adr r1, _rc6
233
+ mRound
234
+ mRound
235
+ mRound
236
+ mRound
237
+ mRound
238
+ mRound
239
+ vstmia r0, {q0-q2}
240
+ vpop {q4-q5}
241
+ bx lr
242
+ LTORG
243
+ align 8
244
+ _rc12
245
+ dcq 0x00000058
246
+ dcq 0x00000038
247
+ dcq 0x000003C0
248
+ dcq 0x000000D0
249
+ dcq 0x00000120
250
+ dcq 0x00000014
251
+ _rc6
252
+ dcq 0x00000060
253
+ dcq 0x0000002C
254
+ dcq 0x00000380
255
+ dcq 0x000000F0
256
+ dcq 0x000001A0
257
+ dcq 0x00000012
258
+ ENDP
259
+
260
+ ; ----------------------------------------------------------------------------
261
+ ;
262
+ ; void Xoodoo_Permute_12rounds( void *state )
263
+ ;
264
+ EXPORT Xoodoo_Permute_12rounds
265
+ Xoodoo_Permute_12rounds PROC
266
+ vpush {q4-q5}
267
+ vldmia r0, {q0-q2}
268
+ adr r1, _rc12
269
+ mRound
270
+ mRound
271
+ mRound
272
+ mRound
273
+ mRound
274
+ mRound
275
+ mRound
276
+ mRound
277
+ mRound
278
+ mRound
279
+ mRound
280
+ mRound
281
+ vstmia r0, {q0-q2}
282
+ vpop {q4-q5}
283
+ bx lr
284
+ align 8
285
+ ENDP
286
+
287
+ Xoofff_BlockSize equ 3*4*4
288
+
289
+ ; ----------------------------------------------------------------------------
290
+ ;
291
+ ; void Xoofff_AddIs(BitSequence *output, const BitSequence *input, BitLength bitLen)
292
+ EXPORT Xoofff_AddIs
293
+ Xoofff_AddIs PROC
294
+ subs r2, r2, #Xoofff_BlockSize*8
295
+ bcc Xoofff_AddIs_LessThanBlock
296
+ Xoofff_AddIs_BlockLoop
297
+ vld1.32 {q0, q1}, [r1]!
298
+ vld1.32 {q2}, [r1]!
299
+ vld1.32 {q8, q9}, [r0]!
300
+ vld1.32 {q10}, [r0]!
301
+ veor.32 q8, q8, q0
302
+ sub r0, r0, #Xoofff_BlockSize
303
+ veor.32 q9, q9, q1
304
+ veor.32 q10, q10, q2
305
+ vst1.32 {q8, q9}, [r0]!
306
+ vst1.32 {q10}, [r0]!
307
+ subs r2, r2, #Xoofff_BlockSize*8
308
+ bcs Xoofff_AddIs_BlockLoop
309
+ Xoofff_AddIs_LessThanBlock
310
+ adds r2, r2, #Xoofff_BlockSize*8
311
+ beq Xoofff_AddIs_Return
312
+ subs r2, r2, #16*8
313
+ bcc Xoofff_AddIs_LessThan16
314
+ Xoofff_AddIs_16Loop
315
+ vld1.32 {q0}, [r1]!
316
+ vld1.32 {q1}, [r0]
317
+ veor.32 q1, q1, q0
318
+ vst1.32 {q1}, [r0]!
319
+ subs r2, r2, #16*8
320
+ bcs Xoofff_AddIs_16Loop
321
+ Xoofff_AddIs_LessThan16
322
+ adds r2, r2, #16*8
323
+ beq Xoofff_AddIs_Return
324
+ subs r2, r2, #4*8
325
+ bcc Xoofff_AddIs_LessThan4
326
+ Xoofff_AddIs_4Loop
327
+ ldr r3, [r0]
328
+ ldr r12, [r1], #4
329
+ eors r3, r3, r12
330
+ str r3, [r0], #4
331
+ subs r2, r2, #4*8
332
+ bcs Xoofff_AddIs_4Loop
333
+ Xoofff_AddIs_LessThan4
334
+ adds r2, r2, #4*8
335
+ beq Xoofff_AddIs_Return
336
+ subs r2, r2, #8
337
+ bcc Xoofff_AddIs_LessThan1
338
+ Xoofff_AddIs_1Loop
339
+ ldrb r3, [r0]
340
+ ldrb r12, [r1], #1
341
+ eors r3, r3, r12
342
+ strb r3, [r0], #1
343
+ subs r2, r2, #8
344
+ bcs Xoofff_AddIs_1Loop
345
+ Xoofff_AddIs_LessThan1
346
+ adds r2, r2, #8
347
+ beq Xoofff_AddIs_Return
348
+ ldrb r3, [r0]
349
+ ldrb r12, [r1]
350
+ movs r1, #1
351
+ eors r3, r3, r12
352
+ lsls r1, r1, r2
353
+ subs r1, r1, #1
354
+ ands r3, r3, r1
355
+ strb r3, [r0]
356
+ Xoofff_AddIs_Return
357
+ bx lr
358
+ align 8
359
+ ENDP
360
+
361
+ ; ----------------------------------------------------------------------------
362
+ ;
363
+ ; size_t Xoofff_CompressFastLoop(unsigned char *kRoll, unsigned char *xAccu, const unsigned char *input, size_t length)
364
+ ;
365
+ EXPORT Xoofff_CompressFastLoop
366
+ Xoofff_CompressFastLoop PROC
367
+ subs r3, #Xoofff_BlockSize ; length must be greater than block size
368
+ push {r4,r5,r6,lr}
369
+ vpush {q4-q7}
370
+ mov r4, r0 ; kRoll
371
+ mov r5, r1 ; xAccu
372
+ mov r6, r2 ; initial input
373
+ vld1.32 {q6,q7}, [r0]! ; get kRoll
374
+ vld1.32 {q8}, [r0]
375
+ vld1.32 {q9,q10}, [r1]! ; get xAccu
376
+ vld1.32 {q11}, [r1]
377
+ Xoofff_CompressFastLoop_Loop
378
+ vld1.32 {q0,q1}, [r2]! ; get input
379
+ adr r1, _rc6b
380
+ vld1.32 {q2}, [r2]!
381
+ veor.32 q0, q0, q6
382
+ veor.32 q1, q1, q7
383
+ veor.32 q2, q2, q8
384
+ mRound ; permutation
385
+ mRound
386
+ mRound
387
+ mRound
388
+ mRound
389
+ mRound
390
+ veor.32 q9, q9, q0 ; add into xAccu
391
+ veor.32 q10, q10, q1
392
+ veor.32 q11, q11, q2
393
+ vshl.u32 q3, q6, #13 ; roll-c kRoll
394
+ veor.32 q3, q3, q6
395
+ vshl.u32 q4, q7, #3
396
+ vsri.u32 q4, q7, #32-3
397
+ veor.32 q3, q3, q4
398
+ vext.32 q3, q6, q3, #1
399
+ vmov q6, q7
400
+ vmov q7, q8
401
+ vmov q8, q3
402
+ subs r3, #Xoofff_BlockSize
403
+ bcs Xoofff_CompressFastLoop_Loop
404
+ vst1.32 {q6,q7}, [r4]! ; save kRoll
405
+ vst1.32 {q8}, [r4]
406
+ vst1.32 {q9,q10}, [r5]! ; save xAccu
407
+ vst1.32 {q11}, [r5]
408
+ sub r0, r2, r6 ; return number of bytes processed
409
+ vpop {q4-q7}
410
+ pop {r4,r5,r6,pc}
411
+ LTORG
412
+ align 8
413
+ _rc6b
414
+ dcq 0x00000060
415
+ dcq 0x0000002C
416
+ dcq 0x00000380
417
+ dcq 0x000000F0
418
+ dcq 0x000001A0
419
+ dcq 0x00000012
420
+ ENDP
421
+
422
+ ; ----------------------------------------------------------------------------
423
+ ;
424
+ ; size_t Xoofff_ExpandFastLoop(unsigned char *yAccu, const unsigned char *kRoll, unsigned char *output, size_t length)
425
+ ;
426
+ EXPORT Xoofff_ExpandFastLoop
427
+ Xoofff_ExpandFastLoop PROC
428
+ subs r3, #Xoofff_BlockSize ; length must be greater than block size
429
+ push {r4,r5,r6,lr}
430
+ vpush {q4-q7}
431
+ mov r5, r0 ; yAccu
432
+ mov r6, r2 ; initial output
433
+ vld1.32 {q6,q7}, [r1]! ; get kRoll
434
+ vld1.32 {q8}, [r1]
435
+ vld1.32 {q9,q10}, [r0]! ; get yAccu
436
+ vld1.32 {q11}, [r0]
437
+ Xoofff_ExpandFastLoop_Loop
438
+ vmov q0, q9
439
+ vmov q1, q10
440
+ vmov q2, q11
441
+ adr r1, _rc6b
442
+ mRound ; permutation
443
+ mRound
444
+ mRound
445
+ mRound
446
+ mRound
447
+ mRound
448
+ veor.32 q0, q0, q6 ; add k and extract
449
+ veor.32 q1, q1, q7
450
+ veor.32 q2, q2, q8
451
+ vst1.32 {q0,q1}, [r2]! ; save output
452
+ vst1.32 {q2}, [r2]!
453
+ vshl.u32 q3, q9, #5 ; roll-e yAccu
454
+ vsri.u32 q3, q9, #32-5
455
+ vshl.u32 q4, q10, #13
456
+ vsri.u32 q4, q10, #32-13
457
+ veor.32 q3, q3, q4
458
+ vand.32 q4, q10, q11
459
+ veor.32 q3, q3, q4
460
+ vmov.i32 q4, #7
461
+ veor.32 q3, q3, q4
462
+ vext.32 q3, q9, q3, #1
463
+ vmov q9, q10
464
+ vmov q10, q11
465
+ vmov q11, q3
466
+ subs r3, #Xoofff_BlockSize
467
+ bcs Xoofff_ExpandFastLoop_Loop
468
+ vst1.32 {q9,q10}, [r5]! ; save yAccu
469
+ sub r0, r2, r6 ; return number of bytes processed
470
+ vst1.32 {q11}, [r5]
471
+ vpop {q4-q7}
472
+ pop {r4,r5,r6,pc}
473
+ align 8
474
+ ENDP
475
+
476
+ END