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,723 @@
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 ARMv7m architecture (Cortex-M3, ...).
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
+ movs r12, #0
34
+ stmia r0!, { r1 - r3, r12 }
35
+ stmia r0!, { r1 - r3, r12 }
36
+ stmia r0!, { r1 - r3, r12 }
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
+ Xoodoo_AddBytes_LanesLoop ; then, perform on lanes
52
+ ldr r2, [r0]
53
+ ldr r4, [r1], #4
54
+ eors r2, r2, r4
55
+ str r2, [r0], #4
56
+ subs r3, r3, #4
57
+ bcs Xoodoo_AddBytes_LanesLoop
58
+ Xoodoo_AddBytes_Bytes
59
+ adds r3, r3, #3
60
+ bcc Xoodoo_AddBytes_Exit
61
+ Xoodoo_AddBytes_BytesLoop
62
+ ldrb r2, [r0]
63
+ ldrb r4, [r1], #1
64
+ eors r2, r2, r4
65
+ strb r2, [r0], #1
66
+ subs r3, r3, #1
67
+ bcs Xoodoo_AddBytes_BytesLoop
68
+ Xoodoo_AddBytes_Exit
69
+ pop {r4,pc}
70
+ align 4
71
+ ENDP
72
+
73
+ ; ----------------------------------------------------------------------------
74
+ ;
75
+ ; void Xoodoo_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
76
+ ;
77
+ EXPORT Xoodoo_OverwriteBytes
78
+ Xoodoo_OverwriteBytes PROC
79
+ adds r0, r0, r2 ; state += offset
80
+ subs r3, r3, #4 ; if length >= 4
81
+ bcc Xoodoo_OverwriteBytes_Bytes
82
+ Xoodoo_OverwriteBytes_LanesLoop ; then, perform on words
83
+ ldr r2, [r1], #4
84
+ str r2, [r0], #4
85
+ subs r3, r3, #4
86
+ bcs Xoodoo_OverwriteBytes_LanesLoop
87
+ Xoodoo_OverwriteBytes_Bytes
88
+ adds r3, r3, #3
89
+ bcc Xoodoo_OverwriteBytes_Exit
90
+ Xoodoo_OverwriteBytes_BytesLoop
91
+ ldrb r2, [r1], #1
92
+ strb r2, [r0], #1
93
+ subs r3, r3, #1
94
+ bcs Xoodoo_OverwriteBytes_BytesLoop
95
+ Xoodoo_OverwriteBytes_Exit
96
+ bx lr
97
+ align 4
98
+ ENDP
99
+
100
+ ; ----------------------------------------------------------------------------
101
+ ;
102
+ ; void Xoodoo_OverwriteWithZeroes(void *state, unsigned int byteCount)
103
+ ;
104
+ EXPORT Xoodoo_OverwriteWithZeroes
105
+ Xoodoo_OverwriteWithZeroes PROC
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 4
123
+ ENDP
124
+
125
+ ; ----------------------------------------------------------------------------
126
+ ;
127
+ ; void Xoodoo_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
128
+ ;
129
+ EXPORT Xoodoo_ExtractBytes
130
+ Xoodoo_ExtractBytes PROC
131
+ adds r0, r0, r2 ; state += offset
132
+ subs r3, r3, #4 ; if length >= 4
133
+ bcc Xoodoo_ExtractBytes_Bytes
134
+ Xoodoo_ExtractBytes_LanesLoop ; then, handle words
135
+ ldr r2, [r0], #4
136
+ str r2, [r1], #4
137
+ subs r3, r3, #4
138
+ bcs Xoodoo_ExtractBytes_LanesLoop
139
+ Xoodoo_ExtractBytes_Bytes
140
+ adds r3, r3, #3
141
+ bcc Xoodoo_ExtractBytes_Exit
142
+ Xoodoo_ExtractBytes_BytesLoop
143
+ ldrb r2, [r0], #1
144
+ strb r2, [r1], #1
145
+ subs r3, r3, #1
146
+ bcs Xoodoo_ExtractBytes_BytesLoop
147
+ Xoodoo_ExtractBytes_Exit
148
+ bx lr
149
+ align 4
150
+ ENDP
151
+
152
+ ; ----------------------------------------------------------------------------
153
+ ;
154
+ ; void Xoodoo_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
155
+ ;
156
+ EXPORT Xoodoo_ExtractAndAddBytes
157
+ Xoodoo_ExtractAndAddBytes PROC
158
+ push {r4,r5}
159
+ adds r0, r0, r3 ; state += offset (offset register no longer needed, reuse for length)
160
+ ldr r3, [sp, #8] ; get length argument from stack
161
+ subs r3, r3, #4 ; if length >= 4
162
+ bcc Xoodoo_ExtractAndAddBytes_Bytes
163
+ Xoodoo_ExtractAndAddBytes_LanesLoop ; then, handle words
164
+ ldr r5, [r0], #4
165
+ ldr r4, [r1], #4
166
+ eors r5, r5, r4
167
+ str r5, [r2], #4
168
+ subs r3, r3, #4
169
+ bcs Xoodoo_ExtractAndAddBytes_LanesLoop
170
+ Xoodoo_ExtractAndAddBytes_Bytes
171
+ adds r3, r3, #3
172
+ bcc Xoodoo_ExtractAndAddBytes_Exit
173
+ Xoodoo_ExtractAndAddBytes_BytesLoop
174
+ ldrb r5, [r0], #1
175
+ ldrb r4, [r1], #1
176
+ eors r5, r5, r4
177
+ strb r5, [r2], #1
178
+ subs r3, r3, #1
179
+ bcs Xoodoo_ExtractAndAddBytes_BytesLoop
180
+ Xoodoo_ExtractAndAddBytes_Exit
181
+ pop {r4,r5}
182
+ bx lr
183
+ align 4
184
+ ENDP
185
+
186
+ ; ----------------------------------------------------------------------------
187
+
188
+ _r0 equ 5
189
+ _r1 equ 14
190
+ _t3 equ 1
191
+
192
+ _w1 equ 11
193
+
194
+ _e0 equ 2
195
+ _e1 equ 8
196
+
197
+ _rc12 equ 0x00000058
198
+ _rc11 equ 0x00000038
199
+ _rc10 equ 0x000003C0
200
+ _rc9 equ 0x000000D0
201
+ _rc8 equ 0x00000120
202
+ _rc7 equ 0x00000014
203
+ _rc6 equ 0x00000060
204
+ _rc5 equ 0x0000002C
205
+ _rc4 equ 0x00000380
206
+ _rc3 equ 0x000000F0
207
+ _rc2 equ 0x000001A0
208
+ _rc1 equ 0x00000012
209
+
210
+ _rc6x1 equ 0x00000003
211
+ _rc5x2 equ 0x0b000000
212
+ _rc4x3 equ 0x07000000
213
+ _rc3x4 equ 0x000f0000
214
+ _rc2x5 equ 0x0000d000
215
+ _rc1x6 equ 0x00000048
216
+
217
+ _rc12x1 equ 0xc0000002
218
+ _rc11x2 equ 0x0e000000
219
+ _rc10x3 equ 0x07800000
220
+ _rc9x4 equ 0x000d0000
221
+ _rc8x5 equ 0x00009000
222
+ _rc7x6 equ 0x00000050
223
+ _rc6x7 equ 0x0000000c
224
+ _rc5x8 equ 0x2c000000
225
+ _rc4x9 equ 0x1c000000
226
+ _rc3x10 equ 0x003c0000
227
+ _rc2x11 equ 0x00034000
228
+ _rc1x12 equ 0x00000120
229
+
230
+ ; ----------------------------------------------------------------------------
231
+
232
+ MACRO
233
+ mXor3 $ro, $a0, $a1, $a2, $rho_e1, $rho_e2
234
+ if (($rho_e1)%32) == 0
235
+ eors $ro, $a0, $a1
236
+ else
237
+ eor $ro, $a0, $a1, ROR #(32-($rho_e1))%32
238
+ endif
239
+ if (($rho_e2)%32) == 0
240
+ eors $ro, $ro, $a2
241
+ else
242
+ eor $ro, $ro, $a2, ROR #(32-($rho_e2))%32
243
+ endif
244
+ MEND
245
+
246
+ MACRO
247
+ mRliXor $ro, $ri, $rot
248
+ if (($rot)%32) == 0
249
+ eors $ro, $ro, $ri
250
+ else
251
+ eor $ro, $ro, $ri, ROR #(32-($rot))%32
252
+ endif
253
+ MEND
254
+
255
+ MACRO
256
+ mRloXor $ro, $ri, $rot
257
+ if (($rot)%32) == 0
258
+ eors $ro, $ro, $ri
259
+ else
260
+ eor $ro, $ri, $ro, ROR #(32-($rot))%32
261
+ endif
262
+ MEND
263
+
264
+ MACRO
265
+ mChi3 $a0,$a1,$a2,$r0,$r1
266
+ bic $r0, $a2, $a1, ROR #_w1
267
+ eors $a0, $a0, $r0, ROR #32-_w1
268
+ bic $r1, $a0, $a2, ROR #32-_w1
269
+ eors $a1, $a1, $r1
270
+ bic $r1, $a1, $a0
271
+ eors $a2, $a2, $r1, ROR #_w1
272
+ MEND
273
+
274
+ MACRO
275
+ mRound $r6i, $r7i, $r8i, $r9i, $r6w, $r7w, $r8w, $r9w, $r10i, $r11i, $r12i, $lri, $rho_e1, $rho_we2, $rc
276
+
277
+ ; Theta: Column Parity Mixer (with late Rho-west, Rho-east bit rotations)
278
+ mXor3 r0, r5, $r9i, $lri, $rho_e1, $rho_we2
279
+ mXor3 r1, r2, $r6i, $r10i, $rho_e1, $rho_we2
280
+ mRliXor r0, r0, _r1-_r0
281
+ mRloXor r2, r0, 32-_r0
282
+ mRloXor $r6i, r0, $rho_e1-_r0
283
+ mRloXor $r10i, r0, $rho_we2-_r0
284
+
285
+ mXor3 r0, r3, $r7i, $r11i, $rho_e1, $rho_we2
286
+ mRliXor r1, r1, _r1-_r0
287
+ mRloXor r3, r1, 32-_r0
288
+ mRloXor $r7i, r1, $rho_e1-_r0
289
+ mRloXor $r11i, r1, $rho_we2-_r0
290
+
291
+ mXor3 r1, r4, $r8i, $r12i, $rho_e1, $rho_we2
292
+ mRliXor r0, r0, _r1-_r0
293
+ mRloXor r4, r0, 32-_r0
294
+ mRloXor $r8i, r0, $rho_e1-_r0
295
+ mRloXor $r12i, r0, $rho_we2-_r0
296
+
297
+ mRliXor r1, r1, _r1-_r0
298
+ mRloXor r5, r1, 32-_r0
299
+ mRloXor $r9i, r1, $rho_e1-_r0
300
+ mRloXor $lri, r1, $rho_we2-_r0
301
+ ; After Theta the whole state is rotated -r0
302
+ ; from here we must use a1.w instead of a1.i
303
+
304
+ ; Iota: round constant
305
+ if $rc == 0xc0000002
306
+ eor r2, r2, #0x00000002
307
+ eor r2, r2, #0xc0000000
308
+ else
309
+ eor r2, r2, #$rc
310
+ endif
311
+
312
+ ; Chi: non linear step, on colums
313
+ mChi3 r2, $r6w, $r10i, r0, r1
314
+ mChi3 r3, $r7w, $r11i, r0, r1
315
+ mChi3 r4, $r8w, $r12i, r0, r1
316
+ mChi3 r5, $r9w, $lri, r0, r1
317
+ MEND
318
+
319
+ ; ----------------------------------------------------------------------------
320
+ ;
321
+ ; void Xoodoo_Permute_6rounds( void *state )
322
+ ;
323
+ EXPORT Xoodoo_Permute_6rounds
324
+ Xoodoo_Permute_6rounds PROC
325
+ push {r0,r4-r11,lr}
326
+ ldmia r0!, {r2-r5}
327
+ ldmia r0!, {r8-r9}
328
+ ldmia r0!, {r6-r7}
329
+ ldmia r0, {r10-r12,lr}
330
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 32, 32, _rc6x1
331
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc5x2
332
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc4x3
333
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc3x4
334
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc2x5
335
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc1x6
336
+ pop {r0,r1}
337
+ ror r2, r2, #32-(6*_r0)%32
338
+ ror r3, r3, #32-(6*_r0)%32
339
+ ror r4, r4, #32-(6*_r0)%32
340
+ ror r5, r5, #32-(6*_r0)%32
341
+ ror r6, r6, #32-(6*_r0+1)%32
342
+ ror r7, r7, #32-(6*_r0+1)%32
343
+ ror r8, r8, #32-(6*_r0+1)%32
344
+ ror r9, r9, #32-(6*_r0+1)%32
345
+ ror r10, r10, #32-(6*_r0+_e1+_w1)%32
346
+ ror r11, r11, #32-(6*_r0+_e1+_w1)%32
347
+ ror r12, r12, #32-(6*_r0+_e1+_w1)%32
348
+ ror lr, lr, #32-(6*_r0+_e1+_w1)%32
349
+ stmia r0, {r2-r12,lr}
350
+ mov r4, r1
351
+ pop {r5-r11,pc}
352
+ align 4
353
+ ENDP
354
+
355
+ ; ----------------------------------------------------------------------------
356
+ ;
357
+ ; void Xoodoo_Permute_12rounds( void *state )
358
+ ;
359
+ EXPORT Xoodoo_Permute_12rounds
360
+ Xoodoo_Permute_12rounds PROC
361
+ push {r0,r4-r11,lr}
362
+ ldmia r0, {r2-r12,lr}
363
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 32, 32, _rc12x1
364
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc11x2
365
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc10x3
366
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc9x4
367
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc8x5
368
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc7x6
369
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc6x7
370
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc5x8
371
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc4x9
372
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc3x10
373
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc2x11
374
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc1x12
375
+ ror r2, r2, #32-(12*_r0)%32
376
+ ror r3, r3, #32-(12*_r0)%32
377
+ ror r4, r4, #32-(12*_r0)%32
378
+ ror r5, r5, #32-(12*_r0)%32
379
+ ror r6, r6, #32-(12*_r0+1)%32
380
+ ror r7, r7, #32-(12*_r0+1)%32
381
+ ror r8, r8, #32-(12*_r0+1)%32
382
+ ror r9, r9, #32-(12*_r0+1)%32
383
+ ror r10, r10, #32-(12*_r0+_e1+_w1)%32
384
+ ror r11, r11, #32-(12*_r0+_e1+_w1)%32
385
+ ror r12, r12, #32-(12*_r0+_e1+_w1)%32
386
+ ror lr, lr, #32-(12*_r0+_e1+_w1)%32
387
+ pop {r0,r1}
388
+ stmia r0, {r2-r12,lr}
389
+ mov r4, r1
390
+ pop {r5-r11,pc}
391
+ align 4
392
+ ENDP
393
+
394
+ Xoofff_BlockSize equ 3*4*4
395
+
396
+ ; ----------------------------------------------------------------------------
397
+ ;
398
+ ; void Xoofff_AddIs(BitSequence *output, const BitSequence *input, BitLength bitLen)
399
+ EXPORT Xoofff_AddIs
400
+ Xoofff_AddIs PROC
401
+ push {r4-r10,lr}
402
+
403
+ subs r2, r2, #Xoofff_BlockSize*8
404
+ bcc Xoofff_AddIs_LessThanBlock
405
+ Xoofff_AddIs_BlockLoop
406
+ ldr r3, [r0, #0]
407
+ ldr r4, [r0, #4]
408
+ ldr r5, [r0, #8]
409
+ ldr r6, [r0, #12]
410
+ ldr r7, [r1], #4
411
+ ldr r8, [r1], #4
412
+ ldr r9, [r1], #4
413
+ ldr r10, [r1], #4
414
+ eor r3, r3, r7
415
+ eor r4, r4, r8
416
+ eor r5, r5, r9
417
+ eor r6, r6, r10
418
+ str r3, [r0], #4
419
+ str r4, [r0], #4
420
+ str r5, [r0], #4
421
+ str r6, [r0], #4
422
+
423
+ ldr r3, [r0, #0]
424
+ ldr r4, [r0, #4]
425
+ ldr r5, [r0, #8]
426
+ ldr r6, [r0, #12]
427
+ ldr r7, [r1], #4
428
+ ldr r8, [r1], #4
429
+ ldr r9, [r1], #4
430
+ ldr r10, [r1], #4
431
+ eor r3, r3, r7
432
+ eor r4, r4, r8
433
+ eor r5, r5, r9
434
+ eor r6, r6, r10
435
+ str r3, [r0], #4
436
+ str r4, [r0], #4
437
+ str r5, [r0], #4
438
+ str r6, [r0], #4
439
+
440
+ ldr r3, [r0, #0]
441
+ ldr r4, [r0, #4]
442
+ ldr r5, [r0, #8]
443
+ ldr r6, [r0, #12]
444
+ ldr r7, [r1], #4
445
+ ldr r8, [r1], #4
446
+ ldr r9, [r1], #4
447
+ ldr r10, [r1], #4
448
+ eor r3, r3, r7
449
+ eor r4, r4, r8
450
+ eor r5, r5, r9
451
+ eor r6, r6, r10
452
+ str r3, [r0], #4
453
+ str r4, [r0], #4
454
+ str r5, [r0], #4
455
+ str r6, [r0], #4
456
+
457
+ subs r2, r2, #Xoofff_BlockSize*8
458
+ bcs Xoofff_AddIs_BlockLoop
459
+ Xoofff_AddIs_LessThanBlock
460
+ adds r2, r2, #Xoofff_BlockSize*8
461
+ beq Xoofff_AddIs_Return
462
+ subs r2, r2, #16*8
463
+ bcc Xoofff_AddIs_LessThan16
464
+ Xoofff_AddIs_16Loop
465
+ ldr r3, [r0, #0]
466
+ ldr r4, [r0, #4]
467
+ ldr r5, [r0, #8]
468
+ ldr r6, [r0, #12]
469
+ ldr r7, [r1], #4
470
+ ldr r8, [r1], #4
471
+ ldr r9, [r1], #4
472
+ ldr r10, [r1], #4
473
+ eor r3, r3, r7
474
+ eor r4, r4, r8
475
+ eor r5, r5, r9
476
+ eor r6, r6, r10
477
+ str r3, [r0], #4
478
+ str r4, [r0], #4
479
+ str r5, [r0], #4
480
+ str r6, [r0], #4
481
+ subs r2, r2, #16*8
482
+ bcs Xoofff_AddIs_16Loop
483
+ Xoofff_AddIs_LessThan16
484
+ adds r2, r2, #16*8
485
+ beq Xoofff_AddIs_Return
486
+ subs r2, r2, #4*8
487
+ bcc Xoofff_AddIs_LessThan4
488
+ Xoofff_AddIs_4Loop
489
+ ldr r3, [r0]
490
+ ldr r7, [r1], #4
491
+ eors r3, r3, r7
492
+ str r3, [r0], #4
493
+ subs r2, r2, #4*8
494
+ bcs Xoofff_AddIs_4Loop
495
+ Xoofff_AddIs_LessThan4
496
+ adds r2, r2, #4*8
497
+ beq Xoofff_AddIs_Return
498
+ subs r2, r2, #8
499
+ bcc Xoofff_AddIs_LessThan1
500
+ Xoofff_AddIs_1Loop
501
+ ldrb r3, [r0]
502
+ ldrb r7, [r1], #1
503
+ eors r3, r3, r7
504
+ strb r3, [r0], #1
505
+ subs r2, r2, #8
506
+ bcs Xoofff_AddIs_1Loop
507
+ Xoofff_AddIs_LessThan1
508
+ adds r2, r2, #8
509
+ beq Xoofff_AddIs_Return
510
+ ldrb r3, [r0]
511
+ ldrb r7, [r1]
512
+ movs r1, #1
513
+ eors r3, r3, r7
514
+ lsls r1, r1, r2
515
+ subs r1, r1, #1
516
+ ands r3, r3, r1
517
+ strb r3, [r0]
518
+ Xoofff_AddIs_Return
519
+ pop {r4-r10,pc}
520
+ align 4
521
+ ENDP
522
+
523
+ ; ----------------------------------------------------------------------------
524
+ ;
525
+ ; size_t Xoofff_CompressFastLoop(unsigned char *kRoll, unsigned char *xAccu, const unsigned char *input, size_t length)
526
+ ;
527
+ Xoofff_Compress_kRoll equ 0
528
+ Xoofff_Compress_input equ 4
529
+ Xoofff_Compress_xAccu equ 8
530
+ Xoofff_Compress_iInput equ 12
531
+ Xoofff_Compress_length equ 16
532
+
533
+ EXPORT Xoofff_CompressFastLoop
534
+ Xoofff_CompressFastLoop PROC
535
+ subs r3, #Xoofff_BlockSize ; length must be greater than block size
536
+ push {r1-r12,lr}
537
+ push {r0,r2}
538
+ ldmia r0, {r2-r12,lr} ; get initial kRoll
539
+ Xoofff_CompressFastLoop_Loop
540
+ ldr r0, [sp, #Xoofff_Compress_input] ; add input
541
+ ldr r1, [r0], #4
542
+ eors r2, r2, r1
543
+ ldr r1, [r0], #4
544
+ eors r3, r3, r1
545
+ ldr r1, [r0], #4
546
+ eors r4, r4, r1
547
+ ldr r1, [r0], #4
548
+ eors r5, r5, r1
549
+
550
+ ldr r1, [r0], #4
551
+ eors r6, r6, r1
552
+ ldr r1, [r0], #4
553
+ eors r7, r7, r1
554
+ ldr r1, [r0], #4
555
+ eors r8, r8, r1
556
+ ldr r1, [r0], #4
557
+ eors r9, r9, r1
558
+
559
+ ldr r1, [r0], #4
560
+ eors r10, r10, r1
561
+ ldr r1, [r0], #4
562
+ eors r11, r11, r1
563
+ ldr r1, [r0], #4
564
+ eors r12, r12, r1
565
+ ldr r1, [r0], #4
566
+ eors lr, lr, r1
567
+ str r0, [sp, #Xoofff_Compress_input]
568
+
569
+ ; permutation
570
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 32, 32, _rc6x1
571
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc5x2
572
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc4x3
573
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc3x4
574
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc2x5
575
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc1x6
576
+
577
+ ; Extract and add into xAccu
578
+ ldr r0, [sp, #Xoofff_Compress_xAccu]
579
+ ldr r1, [r0]
580
+ mRloXor r2, r1, (6*_r0)%32
581
+ ldr r1, [r0, #4]
582
+
583
+ str r2, [r0], #4
584
+ mRloXor r3, r1, (6*_r0)%32
585
+ ldr r1, [r0, #4]
586
+
587
+ str r3, [r0], #4
588
+ mRloXor r4, r1, (6*_r0)%32
589
+ ldr r1, [r0, #4]
590
+
591
+ str r4, [r0], #4
592
+ mRloXor r5, r1, (6*_r0)%32
593
+ str r5, [r0], #4
594
+
595
+ ldm r0, {r2-r5} ; note that r6-r8 and r7-r9 are swapped
596
+ mRliXor r2, r8, (6*_r0+1)%32
597
+ mRliXor r3, r9, (6*_r0+1)%32
598
+ mRliXor r4, r6, (6*_r0+1)%32
599
+ mRliXor r5, r7, (6*_r0+1)%32
600
+ stm r0!, {r2-r5}
601
+
602
+ ldm r0, {r2-r5}
603
+ mRliXor r2, r10, (6*_r0+_e1+_w1)%32
604
+ mRliXor r3, r11, (6*_r0+_e1+_w1)%32
605
+ mRliXor r4, r12, (6*_r0+_e1+_w1)%32
606
+ mRliXor r5, lr, (6*_r0+_e1+_w1)%32
607
+ stm r0!, {r2-r5}
608
+
609
+ ;roll kRoll
610
+ ldr r0, [sp, #Xoofff_Compress_kRoll]
611
+ ldr lr, [r0], #4
612
+ ldmia r0!, {r10-r12}
613
+ ldmia r0!, {r2-r9}
614
+ eors lr, lr, lr, LSL #13
615
+ eors lr, lr, r2, ROR #32-3
616
+ sub r0, #Xoofff_BlockSize
617
+ stmia r0, {r2-r12,lr}
618
+ ; loop management
619
+ ldr r0, [sp, #Xoofff_Compress_length]
620
+ subs r0, #Xoofff_BlockSize
621
+ str r0, [sp, #Xoofff_Compress_length]
622
+ bcs Xoofff_CompressFastLoop_Loop
623
+ ; return number of bytes processed
624
+ ldr r0, [sp, #Xoofff_Compress_input]
625
+ ldr r1, [sp, #Xoofff_Compress_iInput]
626
+ sub r0, r0, r1
627
+ pop {r1,r2}
628
+ pop {r1-r12,pc}
629
+ align 4
630
+ ENDP
631
+
632
+ ; ----------------------------------------------------------------------------
633
+ ;
634
+ ; size_t Xoofff_ExpandFastLoop(unsigned char *yAccu, const unsigned char *kRoll, unsigned char *output, size_t length)
635
+ ;
636
+ Xoofff_Expand_yAccu equ 0
637
+ Xoofff_Expand_output equ 4
638
+ Xoofff_Expand_kRoll equ 8
639
+ Xoofff_Expand_iOutput equ 12
640
+ Xoofff_Expand_length equ 16
641
+
642
+ EXPORT Xoofff_ExpandFastLoop
643
+ Xoofff_ExpandFastLoop PROC
644
+ subs r3, #Xoofff_BlockSize ; length must be greater than block size
645
+ push {r1-r12,lr}
646
+ push {r0,r2}
647
+ ldmia r0, {r2-r12,lr} ; get initial yAccu
648
+ Xoofff_ExpandFastLoop_Loop
649
+ ; permutation
650
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 32, 32, _rc6x1
651
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc5x2
652
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc4x3
653
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc3x4
654
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc2x5
655
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc1x6
656
+
657
+ ; Add k and extract
658
+ ldr r0, [sp, #Xoofff_Expand_kRoll]
659
+ ldr r1, [r0], #4
660
+ mRloXor r2, r1, (6*_r0)%32
661
+
662
+ ldr r1, [sp, #Xoofff_Expand_output]
663
+ str r2, [r1], #4
664
+
665
+ ldr r2, [r0], #4
666
+ mRloXor r3, r2, (6*_r0)%32
667
+ ldr r2, [r0], #4
668
+
669
+ str r3, [r1], #4
670
+ mRloXor r4, r2, (6*_r0)%32
671
+ ldr r2, [r0], #4
672
+
673
+ str r4, [r1], #4
674
+ mRloXor r5, r2, (6*_r0)%32
675
+ str r5, [r1], #4
676
+
677
+ ldm r0!, {r2-r5} ; Note that r6-r8 and r7-r9 are swapped
678
+ mRliXor r2, r8, (6*_r0+1)%32
679
+ str r2, [r1], #4
680
+ mRliXor r3, r9, (6*_r0+1)%32
681
+ str r3, [r1], #4
682
+ mRliXor r4, r6, (6*_r0+1)%32
683
+ str r4, [r1], #4
684
+ mRliXor r5, r7, (6*_r0+1)%32
685
+ str r5, [r1], #4
686
+
687
+ ldm r0!, {r2-r5}
688
+ mRliXor r2, r10, (6*_r0+_e1+_w1)%32
689
+ str r2, [r1], #4
690
+ mRliXor r3, r11, (6*_r0+_e1+_w1)%32
691
+ str r3, [r1], #4
692
+ mRliXor r4, r12, (6*_r0+_e1+_w1)%32
693
+ str r4, [r1], #4
694
+ mRliXor r5, lr, (6*_r0+_e1+_w1)%32
695
+ str r5, [r1], #4
696
+
697
+ ; roll-e yAccu
698
+ ldr r0, [sp, #Xoofff_Expand_yAccu]
699
+ str r1, [sp, #Xoofff_Expand_output]
700
+ ldr lr, [r0], #4
701
+ ldmia r0!, {r10-r12}
702
+ ldmia r0!, {r2-r9}
703
+ and r1, r6, r2
704
+ eor lr, r1, lr, ROR #32-5
705
+ eor lr, lr, r2, ROR #32-13
706
+ eor lr, lr, #7
707
+ sub r0, #Xoofff_BlockSize
708
+ stmia r0, {r2-r12,lr}
709
+ ; loop management
710
+ ldr r0, [sp, #Xoofff_Expand_length]
711
+ subs r0, #Xoofff_BlockSize
712
+ str r0, [sp, #Xoofff_Expand_length]
713
+ bcs Xoofff_ExpandFastLoop_Loop
714
+ ; return number of bytes processed
715
+ ldr r0, [sp, #Xoofff_Expand_output]
716
+ ldr r1, [sp, #Xoofff_Expand_iOutput]
717
+ sub r0, r0, r1
718
+ pop {r1,r2}
719
+ pop {r1-r12,pc}
720
+ align 4
721
+ ENDP
722
+
723
+ END