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