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,1165 @@
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@ ARMv6m architecture (e.g., Cortex-M0).
18
+
19
+
20
+ .thumb
21
+ .syntax unified
22
+ .text
23
+
24
+ @ ----------------------------------------------------------------------------
25
+
26
+ @ offsets in RAM state
27
+ .equ _oA00 , 0*4
28
+ .equ _oA01 , 1*4
29
+ .equ _oA02 , 2*4
30
+ .equ _oA03 , 3*4
31
+ .equ _oA10 , 4*4
32
+ .equ _oA11 , 5*4
33
+ .equ _oA12 , 6*4
34
+ .equ _oA13 , 7*4
35
+ .equ _oA20 , 8*4
36
+ .equ _oA21 , 9*4
37
+ .equ _oA22 , 10*4
38
+ .equ _oA23 , 11*4
39
+
40
+ @ possible locations of state lanes
41
+ .equ locRegL , 1
42
+ .equ locRegH , 2
43
+ .equ locMem , 3
44
+
45
+ @ ----------------------------------------------------------------------------
46
+
47
+ .equ _r0 , 5
48
+ .equ _r1 , 14
49
+ .equ _r2 , 1
50
+
51
+ .equ _w1 , 11
52
+
53
+ .equ _e0 , 2
54
+ .equ _e1 , 8
55
+
56
+ @ ----------------------------------------------------------------------------
57
+
58
+ .macro mLoadU r, p, o, t
59
+ ldrb \r, [\p, #\o+0]
60
+ ldrb \t, [\p, #\o+1]
61
+ lsls \t, \t, #8
62
+ orrs \r, \r, \t
63
+ ldrb \t, [\p, #\o+2]
64
+ lsls \t, \t, #16
65
+ orrs \r, \r, \t
66
+ ldrb \t, [\p, #\o+3]
67
+ lsls \t, \t, #24
68
+ orrs \r, \r, \t
69
+ .endm
70
+
71
+ .macro mStoreU p, o, s, t, loc
72
+ .if \loc == locRegL
73
+ strb \s, [\p, #\o+0]
74
+ lsrs \t, \s, #8
75
+ .else
76
+ mov \t, \s
77
+ strb \t, [\p, #\o+0]
78
+ lsrs \t, \t, #8
79
+ .endif
80
+ strb \t, [\p, #\o+1]
81
+ lsrs \t, \t, #8
82
+ strb \t, [\p, #\o+2]
83
+ lsrs \t, \t, #8
84
+ strb \t, [\p, #\o+3]
85
+ .endm
86
+
87
+ .macro mXor3 ro, a0, a1, a2, loc, tt
88
+ mov \ro, \a1
89
+ eors \ro, \ro, \a2
90
+ .if \loc == locRegL
91
+ eors \ro, \ro, \a0
92
+ .else
93
+ .if \loc == locRegH
94
+ mov \tt, \a0
95
+ .else
96
+ ldr \tt, [sp, #\a0]
97
+ .endif
98
+ eors \ro, \ro, \tt
99
+ .endif
100
+ .endm
101
+
102
+ .macro mXor ro, ri, tt, loc
103
+ .if \loc == locRegL
104
+ eors \ro, \ro, \ri
105
+ .else
106
+ .if \loc == locRegH
107
+ mov \tt, \ro
108
+ eors \tt, \tt, \ri
109
+ mov \ro, \tt
110
+ .else
111
+ ldr \tt, [sp, #\ro]
112
+ eors \tt, \tt, \ri
113
+ str \tt, [sp, #\ro]
114
+ .endif
115
+ .endif
116
+ .endm
117
+
118
+ .macro mChi3 a0,a1,a2,r0,r1,a0s,loc
119
+ mov \r1, \a2
120
+ mov \r0, \a1
121
+ bics \r1, \r1, \r0
122
+ eors \a0, \a0, \r1
123
+ .if \loc != locRegL
124
+ .if \loc == locRegH
125
+ mov \a0s, \a0
126
+ .else
127
+ str \a0, [sp, #\a0s]
128
+ .endif
129
+ .endif
130
+
131
+ mov \r0, \a0
132
+ bics \r0, \r0, \a2
133
+ mov \r1, \a1
134
+ eors \r1, \r1, \r0
135
+ mov \a1, \r1
136
+
137
+ bics \r1, \r1, \a0
138
+ eors \a2, \a2, \r1
139
+ .endm
140
+
141
+ .macro mRound offsetRC, offsetA03
142
+
143
+ @ Theta: Column Parity Mixer
144
+ mXor3 r0, \offsetA03, lr, r7, locMem, r2
145
+ mov r1, r0
146
+ movs r2, #32-(_r1-_r0)
147
+ rors r1, r1, r2
148
+ eors r1, r1, r0
149
+ movs r2, #32-_r0
150
+ rors r1, r1, r2
151
+ mXor3 r0, r3, r10, r4, locRegL, r2
152
+ mXor r3, r1, r2, locRegL
153
+ mXor r10, r1, r2, locRegH
154
+ mXor r4, r1, r2, locRegL
155
+
156
+ mov r1, r0
157
+ movs r2, #32-(_r1-_r0)
158
+ rors r1, r1, r2
159
+ eors r1, r1, r0
160
+ movs r2, #32-_r0
161
+ rors r1, r1, r2
162
+ mXor3 r0, r8, r11, r5, locRegH, r2
163
+ mXor r8, r1, r2, locRegH
164
+ mXor r11, r1, r2, locRegH
165
+ mXor r5, r1, r2, locRegL
166
+
167
+ mov r1, r0
168
+ movs r2, #32-(_r1-_r0)
169
+ rors r1, r1, r2
170
+ eors r1, r1, r0
171
+ movs r2, #32-_r0
172
+ rors r1, r1, r2
173
+ mXor3 r0, r9, r12, r6, locRegH, r2
174
+ mXor r9, r1, r2, locRegH
175
+ mXor r12, r1, r2, locRegH
176
+ mXor r6, r1, r2, locRegL
177
+
178
+ mov r1, r0
179
+ movs r2, #32-(_r1-_r0)
180
+ rors r1, r1, r2
181
+ eors r1, r1, r0
182
+ movs r2, #32-_r0
183
+ rors r1, r1, r2
184
+ mXor \offsetA03, r1, r2, locMem
185
+ mXor lr, r1, r2, locRegH
186
+ mXor r7, r1, r2, locRegL
187
+
188
+ @ Rho-west: Plane shift
189
+ movs r0, #32-_w1
190
+ rors r4, r4, r0
191
+ rors r5, r5, r0
192
+ rors r6, r6, r0
193
+ rors r7, r7, r0
194
+ mov r0, lr
195
+ mov lr, r12
196
+ mov r12, r11
197
+ mov r11, r10
198
+ mov r10, r0
199
+
200
+ @ Iota: round constant
201
+ ldr r0, [sp, #\offsetRC]
202
+ ldmia r0!, {r1}
203
+ str r0, [sp, #\offsetRC]
204
+ eors r3, r3, r1
205
+
206
+ @ Chi: non linear step, on colums
207
+ mChi3 r3, r10, r4, r0, r1, r3, locRegL
208
+ mov r2, r8
209
+ mChi3 r2, r11, r5, r0, r1, r8, locRegH
210
+ mov r2, r9
211
+ mChi3 r2, r12, r6, r0, r1, r9, locRegH
212
+ ldr r2, [sp, #\offsetA03]
213
+ mChi3 r2, lr, r7, r0, r1, \offsetA03, locMem
214
+
215
+ @ Rho-east: Plane shift
216
+ movs r0, #32-1
217
+ mov r1, r10
218
+ rors r1, r1, r0
219
+ mov r10, r1
220
+ mov r1, r11
221
+ rors r1, r1, r0
222
+ mov r11, r1
223
+ mov r1, r12
224
+ rors r1, r1, r0
225
+ mov r12, r1
226
+ mov r1, lr
227
+ rors r1, r1, r0
228
+ mov lr, r1
229
+
230
+ movs r0, #32-_e1
231
+ rors r4, r4, r0
232
+ rors r5, r5, r0
233
+ rors r6, r6, r0
234
+ rors r7, r7, r0
235
+
236
+ mov r0, r4
237
+ mov r4, r6
238
+ mov r6, r0
239
+ mov r0, r5
240
+ mov r5, r7
241
+ mov r7, r0
242
+
243
+ .endm
244
+
245
+ @ ----------------------------------------------------------------------------
246
+ @
247
+ @ Xoodoo_Permute_12roundsAsm
248
+ @
249
+
250
+ @ offsets on stack
251
+ .equ Xoodoo_Permute_12rounds_offsetA03 , 0
252
+ .equ Xoodoo_Permute_12rounds_offsetRC , 4
253
+ .equ Xoodoo_Permute_12rounds_offsetReturn, 8
254
+ .equ Xoodoo_Permute_12rounds_SAS , 12
255
+
256
+ .align 4
257
+ .type Xoodoo_Permute_12roundsAsm, %function;
258
+ Xoodoo_Permute_12roundsAsm:
259
+ adr r2, Xoodoo_Permute_RoundConstants12
260
+ str r2, [sp, #Xoodoo_Permute_12rounds_offsetRC]
261
+ Xoodoo_Permute_12rounds_Loop:
262
+ mRound Xoodoo_Permute_12rounds_offsetRC, Xoodoo_Permute_12rounds_offsetA03
263
+ ldr r0, [sp, #Xoodoo_Permute_12rounds_offsetRC]
264
+ ldr r0, [r0]
265
+ cmp r0, #0
266
+ beq Xoodoo_Permute_12rounds_Done
267
+ b Xoodoo_Permute_12rounds_Loop
268
+ Xoodoo_Permute_12rounds_Done:
269
+ ldr r0, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
270
+ bx r0
271
+ .align 4
272
+ Xoodoo_Permute_RoundConstants12:
273
+ .long 0x00000058
274
+ .long 0x00000038
275
+ .long 0x000003C0
276
+ .long 0x000000D0
277
+ .long 0x00000120
278
+ .long 0x00000014
279
+ .long 0x00000060
280
+ .long 0x0000002C
281
+ .long 0x00000380
282
+ .long 0x000000F0
283
+ .long 0x000001A0
284
+ .long 0x00000012
285
+ .long 0
286
+
287
+
288
+ @ ----------------------------------------------------------------------------
289
+ @
290
+ @ size_t Xoodyak_AbsorbKeyedFullBlocks(void *state, const uint8_t *X, size_t XLen)
291
+ @ {
292
+ @ size_t initialLength = XLen@
293
+ @
294
+ @ do {
295
+ @ SnP_Permute(state )@ /* Xoodyak_Up(instance, NULL, 0, 0)@ */
296
+ @ SnP_AddBytes(state, X, 0, Xoodyak_Rkin)@ /* Xoodyak_Down(instance, X, Xoodyak_Rkin, 0)@ */
297
+ @ SnP_AddByte(state, 0x01, Xoodyak_Rkin)@
298
+ @ X += Xoodyak_Rkin@
299
+ @ XLen -= Xoodyak_Rkin@
300
+ @ } while (XLen >= Xoodyak_Rkin)@
301
+ @ return initialLength - XLen@
302
+ @ }
303
+ @
304
+ .equ XoodyakAbsorb_offsetState , (Xoodoo_Permute_12rounds_SAS+0)
305
+ .equ XoodyakAbsorb_offsetX , (Xoodoo_Permute_12rounds_SAS+4)
306
+ .equ XoodyakAbsorb_offsetXLen , (Xoodoo_Permute_12rounds_SAS+8)
307
+ .equ XoodyakAbsorb_offsetInitialLen , (Xoodoo_Permute_12rounds_SAS+12)
308
+
309
+ .equ XoodyakAbsorb_SAS , (Xoodoo_Permute_12rounds_SAS+20)
310
+
311
+ .align 4
312
+ .global Xoodyak_AbsorbKeyedFullBlocks
313
+ .type Xoodyak_AbsorbKeyedFullBlocks, %function;
314
+ Xoodyak_AbsorbKeyedFullBlocks:
315
+ push {r3-r7,lr}
316
+ mov r4, r8
317
+ mov r5, r9
318
+ mov r6, r10
319
+ mov r7, r11
320
+ push {r4-r7}
321
+
322
+ sub sp, #XoodyakAbsorb_SAS
323
+ str r0, [sp, #XoodyakAbsorb_offsetState] @ setup variables on stack
324
+ str r1, [sp, #XoodyakAbsorb_offsetX]
325
+ str r2, [sp, #XoodyakAbsorb_offsetInitialLen]
326
+ subs r2, r2, #44
327
+ str r2, [sp, #XoodyakAbsorb_offsetXLen]
328
+ ldr r5, =Xoodyak_AbsorbKeyedFullBlocks_Ret+1
329
+ str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
330
+
331
+ ldm r0!, {r3,r5,r6,r7} @ state in registers
332
+ mov r8, r5
333
+ mov r9, r6
334
+ str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
335
+ ldm r0!, {r4,r5,r6,r7}
336
+ mov r10, r4
337
+ mov r11, r5
338
+ mov r12, r6
339
+ mov lr, r7
340
+ ldm r0!, {r4,r5,r6,r7}
341
+ Xoodyak_AbsorbKeyedFullBlocks_Loop:
342
+ ldr r0, =Xoodoo_Permute_12roundsAsm
343
+ bx r0
344
+ .align 4
345
+ .ltorg
346
+ Xoodyak_AbsorbKeyedFullBlocks_Ret:
347
+ ldr r0, [sp, #XoodyakAbsorb_offsetX]
348
+ lsls r1, r0, #30
349
+ bne Xoodyak_AbsorbKeyedFullBlocks_Unaligned
350
+ Xoodyak_AbsorbKeyedFullBlocks_Aligned:
351
+ ldmia r0!, {r1}
352
+ eors r3, r3, r1
353
+ ldmia r0!, {r1}
354
+ mov r2, r8
355
+ eors r2, r2, r1
356
+ mov r8, r2
357
+ ldmia r0!, {r1}
358
+ mov r2, r9
359
+ eors r2, r2, r1
360
+ mov r9, r2
361
+ ldmia r0!, {r1}
362
+ ldr r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
363
+ eors r2, r2, r1
364
+ str r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
365
+
366
+ ldmia r0!, {r1}
367
+ mov r2, r10
368
+ eors r2, r2, r1
369
+ mov r10, r2
370
+ ldmia r0!, {r1}
371
+ mov r2, r11
372
+ eors r2, r2, r1
373
+ mov r11, r2
374
+ ldmia r0!, {r1}
375
+ mov r2, r12
376
+ eors r2, r2, r1
377
+ mov r12, r2
378
+ ldmia r0!, {r1}
379
+ mov r2, lr
380
+ eors r2, r2, r1
381
+ mov lr, r2
382
+
383
+ ldmia r0!, {r1}
384
+ eors r4, r4, r1
385
+ ldmia r0!, {r1}
386
+ eors r5, r5, r1
387
+ ldmia r0!, {r1}
388
+ eors r6, r6, r1
389
+ Xoodyak_AbsorbKeyedFullBlocks_EndLoop:
390
+ str r0, [sp, #XoodyakAbsorb_offsetX]
391
+ movs r2, #1
392
+ eors r7, r7, r2
393
+ ldr r1, [sp, #XoodyakAbsorb_offsetXLen]
394
+ subs r1, r1, #44
395
+ str r1, [sp, #XoodyakAbsorb_offsetXLen]
396
+ bcs Xoodyak_AbsorbKeyedFullBlocks_Loop
397
+ ldr r0, [sp, #XoodyakAbsorb_offsetState]
398
+ stm r0!, {r3}
399
+ mov r1, r8
400
+ mov r2, r9
401
+ ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
402
+ stm r0!, {r1,r2,r3}
403
+ mov r1, r10
404
+ mov r2, r11
405
+ mov r3, r12
406
+ stm r0!, {r1,r2,r3}
407
+ mov r1, lr
408
+ stm r0!, {r1,r4,r5,r6,r7}
409
+
410
+ ldr r0, [sp, #XoodyakAbsorb_offsetInitialLen]
411
+ ldr r2, [sp, #XoodyakAbsorb_offsetXLen]
412
+ adds r2, r2, #44
413
+ subs r0, r0, r2
414
+
415
+ add sp, #XoodyakAbsorb_SAS
416
+ pop {r4-r7}
417
+ mov r8, r4
418
+ mov r9, r5
419
+ mov r10, r6
420
+ mov r11, r7
421
+ pop {r3-r7,pc}
422
+ Xoodyak_AbsorbKeyedFullBlocks_Unaligned:
423
+ mLoadU r1, r0, 0, r2
424
+ eors r3, r3, r1
425
+
426
+ mLoadU r1, r0, 4, r2
427
+ mov r2, r8
428
+ eors r2, r2, r1
429
+ mov r8, r2
430
+
431
+ mLoadU r1, r0, 8, r2
432
+ mov r2, r9
433
+ eors r2, r2, r1
434
+ mov r9, r2
435
+
436
+ mLoadU r1, r0, 12, r2
437
+ ldr r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
438
+ eors r2, r2, r1
439
+ str r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
440
+
441
+ mLoadU r1, r0, 16, r2
442
+ mov r2, r10
443
+ eors r2, r2, r1
444
+ mov r10, r2
445
+
446
+ mLoadU r1, r0, 20, r2
447
+ mov r2, r11
448
+ eors r2, r2, r1
449
+ mov r11, r2
450
+
451
+ mLoadU r1, r0, 24, r2
452
+ mov r2, r12
453
+ eors r2, r2, r1
454
+ mov r12, r2
455
+
456
+ mLoadU r1, r0, 28, r2
457
+ mov r2, lr
458
+ eors r2, r2, r1
459
+ mov lr, r2
460
+
461
+ adds r0, r0, #32
462
+ mLoadU r1, r0, 0, r2
463
+ eors r4, r4, r1
464
+ mLoadU r1, r0, 4, r2
465
+ eors r5, r5, r1
466
+ mLoadU r1, r0, 8, r2
467
+ eors r6, r6, r1
468
+ adds r0, r0, #12
469
+ b Xoodyak_AbsorbKeyedFullBlocks_EndLoop
470
+
471
+
472
+ @ ----------------------------------------------------------------------------
473
+ @
474
+ @ size_t Xoodyak_AbsorbHashFullBlocks(void *state, const uint8_t *X, size_t XLen)
475
+ @ {
476
+ @ size_t initialLength = XLen@
477
+ @
478
+ @ do {
479
+ @ SnP_Permute(state )@ /* Xoodyak_Up(instance, NULL, 0, 0)@ */
480
+ @ SnP_AddBytes(state, X, 0, Xoodyak_Rhash)@ /* Xoodyak_Down(instance, X, Xoodyak_Rhash, 0)@ */
481
+ @ SnP_AddByte(state, 0x01, Xoodyak_Rhash)@
482
+ @ X += Xoodyak_Rhash@
483
+ @ XLen -= Xoodyak_Rhash@
484
+ @ } while (XLen >= Xoodyak_Rhash)@
485
+ @ return initialLength - XLen@
486
+ @ }
487
+ @
488
+ .align 4
489
+ .global Xoodyak_AbsorbHashFullBlocks
490
+ .type Xoodyak_AbsorbHashFullBlocks, %function;
491
+ Xoodyak_AbsorbHashFullBlocks:
492
+ push {r3-r7,lr}
493
+ mov r4, r8
494
+ mov r5, r9
495
+ mov r6, r10
496
+ mov r7, r11
497
+ push {r4-r7}
498
+
499
+ sub sp, #XoodyakAbsorb_SAS
500
+ str r0, [sp, #XoodyakAbsorb_offsetState] @ setup variables on stack
501
+ str r1, [sp, #XoodyakAbsorb_offsetX]
502
+ str r2, [sp, #XoodyakAbsorb_offsetInitialLen]
503
+ subs r2, r2, #16
504
+ str r2, [sp, #XoodyakAbsorb_offsetXLen]
505
+ ldr r5, =Xoodyak_AbsorbHashFullBlocks_Ret+1
506
+ str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
507
+
508
+ ldm r0!, {r3,r5,r6,r7} @ state in registers
509
+ mov r8, r5
510
+ mov r9, r6
511
+ str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
512
+ ldm r0!, {r4,r5,r6,r7}
513
+ mov r10, r4
514
+ mov r11, r5
515
+ mov r12, r6
516
+ mov lr, r7
517
+ ldm r0!, {r4,r5,r6,r7}
518
+ Xoodyak_AbsorbHashFullBlocks_Loop:
519
+ ldr r0, =Xoodoo_Permute_12roundsAsm
520
+ bx r0
521
+ .align 4
522
+ .ltorg
523
+ Xoodyak_AbsorbHashFullBlocks_Ret:
524
+ ldr r0, [sp, #XoodyakAbsorb_offsetX]
525
+ lsls r1, r0, #30
526
+ bne Xoodyak_AbsorbHashFullBlocks_Unaligned
527
+ Xoodyak_AbsorbHashFullBlocks_Aligned:
528
+ ldmia r0!, {r1}
529
+ eors r3, r3, r1
530
+ ldmia r0!, {r1}
531
+ mov r2, r8
532
+ eors r2, r2, r1
533
+ mov r8, r2
534
+ ldmia r0!, {r1}
535
+ mov r2, r9
536
+ eors r2, r2, r1
537
+ mov r9, r2
538
+ ldmia r0!, {r1}
539
+ ldr r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
540
+ eors r2, r2, r1
541
+ str r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
542
+ Xoodyak_AbsorbHashFullBlocks_EndLoop:
543
+ str r0, [sp, #XoodyakAbsorb_offsetX]
544
+ movs r2, #1
545
+ mov r1, r10
546
+ eors r1, r1, r2
547
+ mov r10, r1
548
+ ldr r1, [sp, #XoodyakAbsorb_offsetXLen]
549
+ subs r1, r1, #16
550
+ str r1, [sp, #XoodyakAbsorb_offsetXLen]
551
+ bcs Xoodyak_AbsorbHashFullBlocks_Loop
552
+ ldr r0, [sp, #XoodyakAbsorb_offsetState]
553
+
554
+ stm r0!, {r3}
555
+ mov r1, r8
556
+ mov r2, r9
557
+ ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
558
+ stm r0!, {r1,r2,r3}
559
+ mov r1, r10
560
+ mov r2, r11
561
+ mov r3, r12
562
+ stm r0!, {r1,r2,r3}
563
+ mov r1, lr
564
+ stm r0!, {r1,r4,r5,r6,r7}
565
+
566
+ ldr r0, [sp, #XoodyakAbsorb_offsetInitialLen]
567
+ ldr r2, [sp, #XoodyakAbsorb_offsetXLen]
568
+ adds r2, r2, #16
569
+ subs r0, r0, r2
570
+
571
+ add sp, #XoodyakAbsorb_SAS
572
+ pop {r4-r7}
573
+ mov r8, r4
574
+ mov r9, r5
575
+ mov r10, r6
576
+ mov r11, r7
577
+ pop {r3-r7,pc}
578
+ Xoodyak_AbsorbHashFullBlocks_Unaligned:
579
+ mLoadU r1, r0, 0, r2
580
+ eors r3, r3, r1
581
+ mLoadU r1, r0, 4, r2
582
+ mov r2, r8
583
+ eors r2, r2, r1
584
+ mov r8, r2
585
+ mLoadU r1, r0, 8, r2
586
+ mov r2, r9
587
+ eors r2, r2, r1
588
+ mov r9, r2
589
+ mLoadU r1, r0, 12, r2
590
+ ldr r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
591
+ eors r2, r2, r1
592
+ str r2, [sp, #Xoodoo_Permute_12rounds_offsetA03]
593
+ adds r0, r0, #16
594
+ b Xoodyak_AbsorbHashFullBlocks_EndLoop
595
+
596
+
597
+ @ ----------------------------------------------------------------------------
598
+ @
599
+ @ size_t Xoodyak_SqueezeKeyedFullBlocks(void *state, uint8_t *Y, size_t YLen)
600
+ @ {
601
+ @ size_t initialLength = YLen@
602
+ @
603
+ @ do {
604
+ @ SnP_AddByte(state, 0x01, 0)@ /* Xoodyak_Down(instance, NULL, 0, 0)@ */
605
+ @ SnP_Permute(state )@ /* Xoodyak_Up(instance, Y, Xoodyak_Rkout, 0)@ */
606
+ @ SnP_ExtractBytes(state, Y, 0, Xoodyak_Rkout)@
607
+ @ Y += Xoodyak_Rkout@
608
+ @ YLen -= Xoodyak_Rkout@
609
+ @ } while (YLen >= Xoodyak_Rkout)@
610
+ @ return initialLength - YLen@
611
+ @ }
612
+ @
613
+ .equ XoodyakSqueeze_offsetState , (Xoodoo_Permute_12rounds_SAS+0)
614
+ .equ XoodyakSqueeze_offsetY , (Xoodoo_Permute_12rounds_SAS+4)
615
+ .equ XoodyakSqueeze_offsetYLen , (Xoodoo_Permute_12rounds_SAS+8)
616
+ .equ XoodyakSqueeze_offsetInitialLen , (Xoodoo_Permute_12rounds_SAS+12)
617
+
618
+ .equ XoodyakSqueeze_SAS , (Xoodoo_Permute_12rounds_SAS+20)
619
+
620
+ .align 4
621
+ .global Xoodyak_SqueezeKeyedFullBlocks
622
+ .type Xoodyak_SqueezeKeyedFullBlocks, %function;
623
+ Xoodyak_SqueezeKeyedFullBlocks:
624
+ push {r3-r7,lr}
625
+ mov r4, r8
626
+ mov r5, r9
627
+ mov r6, r10
628
+ mov r7, r11
629
+ push {r4-r7}
630
+
631
+ sub sp, #XoodyakSqueeze_SAS
632
+ str r0, [sp, #XoodyakSqueeze_offsetState] @ setup variables on stack
633
+ str r1, [sp, #XoodyakSqueeze_offsetY]
634
+ str r2, [sp, #XoodyakSqueeze_offsetInitialLen]
635
+ subs r2, r2, #24
636
+ str r2, [sp, #XoodyakSqueeze_offsetYLen]
637
+ ldr r5, =Xoodyak_SqueezeKeyedFullBlocks_Ret+1
638
+ str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
639
+
640
+ ldm r0!, {r3,r5,r6,r7} @ state in registers
641
+ mov r8, r5
642
+ mov r9, r6
643
+ str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
644
+ ldm r0!, {r4,r5,r6,r7}
645
+ mov r10, r4
646
+ mov r11, r5
647
+ mov r12, r6
648
+ mov lr, r7
649
+ ldm r0!, {r4,r5,r6,r7}
650
+ Xoodyak_SqueezeKeyedFullBlocks_Loop:
651
+ movs r0, #1
652
+ eors r3, r3, r0
653
+ ldr r0, =Xoodoo_Permute_12roundsAsm
654
+ bx r0
655
+ .align 4
656
+ .ltorg
657
+ Xoodyak_SqueezeKeyedFullBlocks_Ret:
658
+ ldr r0, [sp, #XoodyakSqueeze_offsetY]
659
+ lsls r1, r0, #30
660
+ bne Xoodyak_SqueezeKeyedFullBlocks_Unaligned
661
+ Xoodyak_SqueezeKeyedFullBlocks_Aligned:
662
+ stmia r0!, {r3}
663
+ mov r1, r8
664
+ mov r2, r9
665
+ stmia r0!, {r1, r2}
666
+ ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03]
667
+ mov r2, r10
668
+ stmia r0!, {r1, r2}
669
+ mov r1, r11
670
+ stmia r0!, {r1}
671
+ Xoodyak_SqueezeKeyedFullBlocks_EndLoop:
672
+ str r0, [sp, #XoodyakSqueeze_offsetY]
673
+ ldr r1, [sp, #XoodyakSqueeze_offsetYLen]
674
+ subs r1, r1, #24
675
+ str r1, [sp, #XoodyakSqueeze_offsetYLen]
676
+ bcs Xoodyak_SqueezeKeyedFullBlocks_Loop
677
+ ldr r0, [sp, #XoodyakSqueeze_offsetState] @ Save state
678
+ stm r0!, {r3}
679
+ mov r1, r8
680
+ mov r2, r9
681
+ ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
682
+ stm r0!, {r1,r2,r3}
683
+ mov r1, r10
684
+ mov r2, r11
685
+ mov r3, r12
686
+ stm r0!, {r1,r2,r3}
687
+ mov r1, lr
688
+ stm r0!, {r1,r4,r5,r6,r7}
689
+ ldr r0, [sp, #XoodyakSqueeze_offsetInitialLen] @ Compute processed length
690
+ ldr r2, [sp, #XoodyakSqueeze_offsetYLen]
691
+ adds r2, r2, #24
692
+ subs r0, r0, r2
693
+ add sp, #XoodyakSqueeze_SAS @ Free stack and pop
694
+ pop {r4-r7}
695
+ mov r8, r4
696
+ mov r9, r5
697
+ mov r10, r6
698
+ mov r11, r7
699
+ pop {r3-r7,pc}
700
+ Xoodyak_SqueezeKeyedFullBlocks_Unaligned:
701
+ mStoreU r0, 0, r3, r2, locRegL
702
+ mStoreU r0, 4, r8, r2, locRegH
703
+ mStoreU r0, 8, r9, r2, locRegH
704
+ ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03]
705
+ mStoreU r0, 12, r1, r2, locRegL
706
+ mStoreU r0, 16, r10, r2, locRegH
707
+ mStoreU r0, 20, r11, r2, locRegH
708
+ adds r0, r0, #24
709
+ b Xoodyak_SqueezeKeyedFullBlocks_EndLoop
710
+
711
+
712
+ @ ----------------------------------------------------------------------------
713
+ @
714
+ @ size_t Xoodyak_SqueezeHashFullBlocks(void *state, uint8_t *Y, size_t YLen)
715
+ @ {
716
+ @ size_t initialLength = YLen@
717
+ @
718
+ @ do {
719
+ @ SnP_AddByte(state, 0x01, 0)@ /* Xoodyak_Down(instance, NULL, 0, 0)@ */
720
+ @ SnP_Permute(state)@ /* Xoodyak_Up(instance, Y, Xoodyak_Rhash, 0)@ */
721
+ @ SnP_ExtractBytes(state, Y, 0, Xoodyak_Rhash)@
722
+ @ Y += Xoodyak_Rhash@
723
+ @ YLen -= Xoodyak_Rhash@
724
+ @ } while (YLen >= Xoodyak_Rhash)@
725
+ @ return initialLength - YLen@
726
+ @ }
727
+ @
728
+ .align 4
729
+ .global Xoodyak_SqueezeHashFullBlocks
730
+ .type Xoodyak_SqueezeHashFullBlocks, %function;
731
+ Xoodyak_SqueezeHashFullBlocks:
732
+ push {r3-r7,lr}
733
+ mov r4, r8
734
+ mov r5, r9
735
+ mov r6, r10
736
+ mov r7, r11
737
+ push {r4-r7}
738
+
739
+ sub sp, #XoodyakSqueeze_SAS
740
+ str r0, [sp, #XoodyakSqueeze_offsetState] @ setup variables on stack
741
+ str r1, [sp, #XoodyakSqueeze_offsetY]
742
+ str r2, [sp, #XoodyakSqueeze_offsetInitialLen]
743
+ subs r2, r2, #16
744
+ str r2, [sp, #XoodyakSqueeze_offsetYLen]
745
+ ldr r5, =Xoodyak_SqueezeHashFullBlocks_Ret+1
746
+ str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
747
+
748
+ ldm r0!, {r3,r5,r6,r7} @ state in registers
749
+ mov r8, r5
750
+ mov r9, r6
751
+ str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
752
+ ldm r0!, {r4,r5,r6,r7}
753
+ mov r10, r4
754
+ mov r11, r5
755
+ mov r12, r6
756
+ mov lr, r7
757
+ ldm r0!, {r4,r5,r6,r7}
758
+ Xoodyak_SqueezeHashFullBlocks_Loop:
759
+ movs r0, #1
760
+ eors r3, r3, r0
761
+ ldr r0, =Xoodoo_Permute_12roundsAsm
762
+ bx r0
763
+ .align 4
764
+ .ltorg
765
+ Xoodyak_SqueezeHashFullBlocks_Ret:
766
+ ldr r0, [sp, #XoodyakSqueeze_offsetY]
767
+ lsls r1, r0, #30
768
+ bne Xoodyak_SqueezeHashFullBlocks_Unaligned
769
+ Xoodyak_SqueezeHashFullBlocks_Aligned:
770
+ stmia r0!, {r3}
771
+ mov r1, r8
772
+ mov r2, r9
773
+ stmia r0!, {r1, r2}
774
+ ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03]
775
+ stmia r0!, {r1}
776
+ Xoodyak_SqueezeHashFullBlocks_EndLoop:
777
+ str r0, [sp, #XoodyakSqueeze_offsetY]
778
+ ldr r1, [sp, #XoodyakSqueeze_offsetYLen]
779
+ subs r1, r1, #16
780
+ str r1, [sp, #XoodyakSqueeze_offsetYLen]
781
+ bcs Xoodyak_SqueezeHashFullBlocks_Loop
782
+ ldr r0, [sp, #XoodyakSqueeze_offsetState] @ Save state
783
+ stm r0!, {r3}
784
+ mov r1, r8
785
+ mov r2, r9
786
+ ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
787
+ stm r0!, {r1,r2,r3}
788
+ mov r1, r10
789
+ mov r2, r11
790
+ mov r3, r12
791
+ stm r0!, {r1,r2,r3}
792
+ mov r1, lr
793
+ stm r0!, {r1,r4,r5,r6,r7}
794
+ ldr r0, [sp, #XoodyakSqueeze_offsetInitialLen] @ Compute processed length
795
+ ldr r2, [sp, #XoodyakSqueeze_offsetYLen]
796
+ adds r2, r2, #16
797
+ subs r0, r0, r2
798
+ add sp, #XoodyakSqueeze_SAS @ Free stack and pop
799
+ pop {r4-r7}
800
+ mov r8, r4
801
+ mov r9, r5
802
+ mov r10, r6
803
+ mov r11, r7
804
+ pop {r3-r7,pc}
805
+ Xoodyak_SqueezeHashFullBlocks_Unaligned:
806
+ mStoreU r0, 0, r3, r2, locRegL
807
+ mStoreU r0, 4, r8, r2, locRegH
808
+ mStoreU r0, 8, r9, r2, locRegH
809
+ ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03]
810
+ mStoreU r0, 12, r1, r2, locRegL
811
+ adds r0, r0, #16
812
+ b Xoodyak_SqueezeHashFullBlocks_EndLoop
813
+
814
+
815
+ @ ----------------------------------------------------------------------------
816
+ @
817
+ @ size_t Xoodyak_EncryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
818
+ @ {
819
+ @ size_t initialLength = IOLen@
820
+ @
821
+ @ do {
822
+ @ SnP_Permute(state)@
823
+ @ SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout)@
824
+ @ SnP_OverwriteBytes(state, O, 0, Xoodyak_Rkout)@
825
+ @ SnP_AddByte(state, 0x01, Xoodyak_Rkout)@
826
+ @ I += Xoodyak_Rkout@
827
+ @ O += Xoodyak_Rkout@
828
+ @ IOLen -= Xoodyak_Rkout@
829
+ @ } while (IOLen >= Xoodyak_Rkout)@
830
+ @ return initialLength - IOLen@
831
+ @ }
832
+ @
833
+ .equ XoodyakCrypt_offsetState , (Xoodoo_Permute_12rounds_SAS+0)
834
+ .equ XoodyakCrypt_offsetI , (Xoodoo_Permute_12rounds_SAS+4)
835
+ .equ XoodyakCrypt_offsetO , (Xoodoo_Permute_12rounds_SAS+8)
836
+ .equ XoodyakCrypt_offsetIOLen , (Xoodoo_Permute_12rounds_SAS+12)
837
+ .equ XoodyakCrypt_offsetInitialLen , (Xoodoo_Permute_12rounds_SAS+16)
838
+ .equ XoodyakCrypt_SAS , (Xoodoo_Permute_12rounds_SAS+20)
839
+
840
+ .align 4
841
+ .global Xoodyak_EncryptFullBlocks
842
+ .type Xoodyak_EncryptFullBlocks, %function;
843
+ Xoodyak_EncryptFullBlocks:
844
+ push {r3-r7,lr}
845
+ mov r4, r8
846
+ mov r5, r9
847
+ mov r6, r10
848
+ mov r7, r11
849
+ push {r4-r7}
850
+
851
+ sub sp, #XoodyakCrypt_SAS
852
+ str r0, [sp, #XoodyakCrypt_offsetState] @ setup variables on stack
853
+ str r1, [sp, #XoodyakCrypt_offsetI]
854
+ str r2, [sp, #XoodyakCrypt_offsetO]
855
+ str r3, [sp, #XoodyakCrypt_offsetInitialLen]
856
+ subs r3, r3, #24
857
+ str r3, [sp, #XoodyakCrypt_offsetIOLen]
858
+ ldr r5, =Xoodyak_EncryptFullBlocks_Ret+1
859
+ str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
860
+
861
+ ldm r0!, {r3,r5,r6,r7} @ state in registers
862
+ mov r8, r5
863
+ mov r9, r6
864
+ str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
865
+ ldm r0!, {r4,r5,r6,r7}
866
+ mov r10, r4
867
+ mov r11, r5
868
+ mov r12, r6
869
+ mov lr, r7
870
+ ldm r0!, {r4,r5,r6,r7}
871
+ Xoodyak_EncryptFullBlocks_Loop:
872
+ ldr r0, =Xoodoo_Permute_12roundsAsm
873
+ bx r0
874
+ .align 4
875
+ .ltorg
876
+ Xoodyak_EncryptFullBlocks_Ret:
877
+ push {r4, r5}
878
+ ldr r5, [sp, #XoodyakCrypt_offsetI+8]
879
+ ldr r4, [sp, #XoodyakCrypt_offsetO+8]
880
+ mov r0, r4
881
+ ands r0, r0, r5
882
+ lsls r0, r0, #30
883
+ bne Xoodyak_EncryptFullBlocks_Unaligned
884
+ Xoodyak_EncryptFullBlocks_Aligned:
885
+ ldmia r5!, {r0}
886
+ eors r3, r3, r0
887
+ stmia r4!, {r3}
888
+
889
+ ldmia r5!, {r0}
890
+ mov r1, r8
891
+ eors r1, r1, r0
892
+ stmia r4!, {r1}
893
+ mov r8, r1
894
+
895
+ ldmia r5!, {r0}
896
+ mov r1, r9
897
+ eors r1, r1, r0
898
+ stmia r4!, {r1}
899
+ mov r9, r1
900
+
901
+ ldmia r5!, {r0}
902
+ ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
903
+ eors r1, r1, r0
904
+ stmia r4!, {r1}
905
+ str r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
906
+
907
+ ldmia r5!, {r0}
908
+ mov r1, r10
909
+ eors r1, r1, r0
910
+ stmia r4!, {r1}
911
+ mov r10, r1
912
+
913
+ ldmia r5!, {r0}
914
+ mov r1, r11
915
+ eors r1, r1, r0
916
+ stmia r4!, {r1}
917
+ mov r11, r1
918
+ Xoodyak_EncryptFullBlocks_EndLoop:
919
+ movs r0, #1
920
+ mov r1, r12
921
+ eors r1, r1, r0
922
+ mov r12, r1
923
+ str r5, [sp, #XoodyakCrypt_offsetI+8]
924
+ str r4, [sp, #XoodyakCrypt_offsetO+8]
925
+ pop {r4, r5}
926
+ ldr r1, [sp, #XoodyakCrypt_offsetIOLen]
927
+ subs r1, r1, #24
928
+ str r1, [sp, #XoodyakCrypt_offsetIOLen]
929
+ bcs Xoodyak_EncryptFullBlocks_Loop
930
+ ldr r0, [sp, #XoodyakCrypt_offsetState] @ Save state
931
+ stm r0!, {r3}
932
+ mov r1, r8
933
+ mov r2, r9
934
+ ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
935
+ stm r0!, {r1,r2,r3}
936
+ mov r1, r10
937
+ mov r2, r11
938
+ mov r3, r12
939
+ stm r0!, {r1,r2,r3}
940
+ mov r1, lr
941
+ stm r0!, {r1,r4,r5,r6,r7}
942
+ ldr r0, [sp, #XoodyakCrypt_offsetInitialLen] @ Compute processed length
943
+ ldr r2, [sp, #XoodyakCrypt_offsetIOLen]
944
+ adds r2, r2, #24
945
+ subs r0, r0, r2
946
+ add sp, #XoodyakCrypt_SAS @ Free stack and pop
947
+ pop {r4-r7}
948
+ mov r8, r4
949
+ mov r9, r5
950
+ mov r10, r6
951
+ mov r11, r7
952
+ pop {r3-r7,pc}
953
+ Xoodyak_EncryptFullBlocks_Unaligned:
954
+ mLoadU r0, r5, 0, r2
955
+ eors r3, r3, r0
956
+ mStoreU r4, 0, r3, r2, locRegL
957
+
958
+ mLoadU r0, r5, 4, r2
959
+ mov r1, r8
960
+ eors r1, r1, r0
961
+ mStoreU r4, 4, r1, r2, locRegL
962
+ mov r8, r1
963
+
964
+ mLoadU r0, r5, 8, r2
965
+ mov r1, r9
966
+ eors r1, r1, r0
967
+ mStoreU r4, 8, r1, r2, locRegL
968
+ mov r9, r1
969
+
970
+ mLoadU r0, r5, 12, r2
971
+ ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
972
+ eors r1, r1, r0
973
+ mStoreU r4, 12, r1, r2, locRegL
974
+ str r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
975
+
976
+ mLoadU r0, r5, 16, r2
977
+ mov r1, r10
978
+ eors r1, r1, r0
979
+ mStoreU r4, 16, r1, r2, locRegL
980
+ mov r10, r1
981
+
982
+ mLoadU r0, r5, 20, r2
983
+ mov r1, r11
984
+ eors r1, r1, r0
985
+ mStoreU r4, 20, r1, r2, locRegL
986
+ mov r11, r1
987
+
988
+ adds r4, r4, #24
989
+ adds r5, r5, #24
990
+ b Xoodyak_EncryptFullBlocks_EndLoop
991
+
992
+
993
+ @ ----------------------------------------------------------------------------
994
+ @
995
+ @ size_t Xoodyak_DecryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
996
+ @ {
997
+ @ size_t initialLength = IOLen@
998
+ @
999
+ @ do {
1000
+ @ SnP_Permute(state)@
1001
+ @ SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout)@
1002
+ @ SnP_AddBytes(state, O, 0, Xoodyak_Rkout)@
1003
+ @ SnP_AddByte(state, 0x01, Xoodyak_Rkout)@
1004
+ @ I += Xoodyak_Rkout@
1005
+ @ O += Xoodyak_Rkout@
1006
+ @ IOLen -= Xoodyak_Rkout@
1007
+ @ } while (IOLen >= Xoodyak_Rkout)@
1008
+ @ return initialLength - IOLen@
1009
+ @ }
1010
+ @
1011
+ .align 4
1012
+ .global Xoodyak_DecryptFullBlocks
1013
+ .type Xoodyak_DecryptFullBlocks, %function;
1014
+ Xoodyak_DecryptFullBlocks:
1015
+ push {r3-r7,lr}
1016
+ mov r4, r8
1017
+ mov r5, r9
1018
+ mov r6, r10
1019
+ mov r7, r11
1020
+ push {r4-r7}
1021
+
1022
+ sub sp, #XoodyakCrypt_SAS
1023
+ str r0, [sp, #XoodyakCrypt_offsetState] @ setup variables on stack
1024
+ str r1, [sp, #XoodyakCrypt_offsetI]
1025
+ str r2, [sp, #XoodyakCrypt_offsetO]
1026
+ str r3, [sp, #XoodyakCrypt_offsetInitialLen]
1027
+ subs r3, r3, #24
1028
+ str r3, [sp, #XoodyakCrypt_offsetIOLen]
1029
+ ldr r5, =Xoodyak_DecryptFullBlocks_Ret+1
1030
+ str r5, [sp, #Xoodoo_Permute_12rounds_offsetReturn]
1031
+
1032
+ ldm r0!, {r3,r5,r6,r7} @ state in registers
1033
+ mov r8, r5
1034
+ mov r9, r6
1035
+ str r7, [sp, #Xoodoo_Permute_12rounds_offsetA03]
1036
+ ldm r0!, {r4,r5,r6,r7}
1037
+ mov r10, r4
1038
+ mov r11, r5
1039
+ mov r12, r6
1040
+ mov lr, r7
1041
+ ldm r0!, {r4,r5,r6,r7}
1042
+ Xoodyak_DecryptFullBlocks_Loop:
1043
+ ldr r0, =Xoodoo_Permute_12roundsAsm
1044
+ bx r0
1045
+ .align 4
1046
+ .ltorg
1047
+ Xoodyak_DecryptFullBlocks_Ret:
1048
+ push {r4, r5}
1049
+ ldr r5, [sp, #XoodyakCrypt_offsetI+8]
1050
+ ldr r4, [sp, #XoodyakCrypt_offsetO+8]
1051
+ mov r0, r4
1052
+ ands r0, r0, r5
1053
+ lsls r0, r0, #30
1054
+ bne Xoodyak_DecryptFullBlocks_Unaligned
1055
+ Xoodyak_DecryptFullBlocks_Aligned:
1056
+ ldmia r5!, {r0}
1057
+ eors r3, r3, r0
1058
+ stmia r4!, {r3}
1059
+ mov r3, r0
1060
+
1061
+ ldmia r5!, {r0}
1062
+ mov r1, r8
1063
+ eors r1, r1, r0
1064
+ stmia r4!, {r1}
1065
+ mov r8, r0
1066
+
1067
+ ldmia r5!, {r0}
1068
+ mov r1, r9
1069
+ eors r1, r1, r0
1070
+ stmia r4!, {r1}
1071
+ mov r9, r0
1072
+
1073
+ ldmia r5!, {r0}
1074
+ ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
1075
+ eors r1, r1, r0
1076
+ stmia r4!, {r1}
1077
+ str r0, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
1078
+
1079
+ ldmia r5!, {r0}
1080
+ mov r1, r10
1081
+ eors r1, r1, r0
1082
+ stmia r4!, {r1}
1083
+ mov r10, r0
1084
+
1085
+ ldmia r5!, {r0}
1086
+ mov r1, r11
1087
+ eors r1, r1, r0
1088
+ stmia r4!, {r1}
1089
+ mov r11, r0
1090
+ Xoodyak_DecryptFullBlocks_EndLoop:
1091
+ movs r0, #1
1092
+ mov r1, r12
1093
+ eors r1, r1, r0
1094
+ mov r12, r1
1095
+ str r5, [sp, #XoodyakCrypt_offsetI+8]
1096
+ str r4, [sp, #XoodyakCrypt_offsetO+8]
1097
+ pop {r4, r5}
1098
+ ldr r1, [sp, #XoodyakCrypt_offsetIOLen]
1099
+ subs r1, r1, #24
1100
+ str r1, [sp, #XoodyakCrypt_offsetIOLen]
1101
+ bcs Xoodyak_DecryptFullBlocks_Loop
1102
+ ldr r0, [sp, #XoodyakCrypt_offsetState] @ Save state
1103
+ stm r0!, {r3}
1104
+ mov r1, r8
1105
+ mov r2, r9
1106
+ ldr r3, [sp, #Xoodoo_Permute_12rounds_offsetA03]
1107
+ stm r0!, {r1,r2,r3}
1108
+ mov r1, r10
1109
+ mov r2, r11
1110
+ mov r3, r12
1111
+ stm r0!, {r1,r2,r3}
1112
+ mov r1, lr
1113
+ stm r0!, {r1,r4,r5,r6,r7}
1114
+ ldr r0, [sp, #XoodyakCrypt_offsetInitialLen] @ Compute processed length
1115
+ ldr r2, [sp, #XoodyakCrypt_offsetIOLen]
1116
+ adds r2, r2, #24
1117
+ subs r0, r0, r2
1118
+ add sp, #XoodyakCrypt_SAS @ Free stack and pop
1119
+ pop {r4-r7}
1120
+ mov r8, r4
1121
+ mov r9, r5
1122
+ mov r10, r6
1123
+ mov r11, r7
1124
+ pop {r3-r7,pc}
1125
+ Xoodyak_DecryptFullBlocks_Unaligned:
1126
+ mLoadU r0, r5, 0, r2
1127
+ eors r3, r3, r0
1128
+ mStoreU r4, 0, r3, r2, locRegL
1129
+ mov r3, r0
1130
+
1131
+ mLoadU r0, r5, 4, r2
1132
+ mov r1, r8
1133
+ eors r1, r1, r0
1134
+ mStoreU r4, 4, r1, r2, locRegL
1135
+ mov r8, r0
1136
+
1137
+ mLoadU r0, r5, 8, r2
1138
+ mov r1, r9
1139
+ eors r1, r1, r0
1140
+ mStoreU r4, 8, r1, r2, locRegL
1141
+ mov r9, r0
1142
+
1143
+ mLoadU r0, r5, 12, r2
1144
+ ldr r1, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
1145
+ eors r1, r1, r0
1146
+ mStoreU r4, 12, r1, r2, locRegL
1147
+ str r0, [sp, #Xoodoo_Permute_12rounds_offsetA03+8]
1148
+
1149
+ mLoadU r0, r5, 16, r2
1150
+ mov r1, r10
1151
+ eors r1, r1, r0
1152
+ mStoreU r4, 16, r1, r2, locRegL
1153
+ mov r10, r0
1154
+
1155
+ mLoadU r0, r5, 20, r2
1156
+ mov r1, r11
1157
+ eors r1, r1, r0
1158
+ mStoreU r4, 20, r1, r2, locRegL
1159
+ mov r11, r0
1160
+
1161
+ adds r4, r4, #24
1162
+ adds r5, r5, #24
1163
+ b Xoodyak_DecryptFullBlocks_EndLoop
1164
+
1165
+