sleeping_kangaroo12 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+