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