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