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