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,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