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