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,563 @@
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 ARMv7m architecture (Cortex-M3, ...).
18
+
19
+ PRESERVE8
20
+ THUMB
21
+ AREA |.text|, CODE, READONLY
22
+
23
+
24
+ ; ----------------------------------------------------------------------------
25
+
26
+ _r0 equ 5
27
+ _r1 equ 14
28
+ _t3 equ 1
29
+
30
+ _w1 equ 11
31
+
32
+ _e0 equ 2
33
+ _e1 equ 8
34
+
35
+ _rc12 equ 0x00000058
36
+ _rc11 equ 0x00000038
37
+ _rc10 equ 0x000003C0
38
+ _rc9 equ 0x000000D0
39
+ _rc8 equ 0x00000120
40
+ _rc7 equ 0x00000014
41
+ _rc6 equ 0x00000060
42
+ _rc5 equ 0x0000002C
43
+ _rc4 equ 0x00000380
44
+ _rc3 equ 0x000000F0
45
+ _rc2 equ 0x000001A0
46
+ _rc1 equ 0x00000012
47
+
48
+ _rc6x1 equ 0x00000003
49
+ _rc5x2 equ 0x0b000000
50
+ _rc4x3 equ 0x07000000
51
+ _rc3x4 equ 0x000f0000
52
+ _rc2x5 equ 0x0000d000
53
+ _rc1x6 equ 0x00000048
54
+
55
+ _rc12x1 equ 0xc0000002
56
+ _rc11x2 equ 0x0e000000
57
+ _rc10x3 equ 0x07800000
58
+ _rc9x4 equ 0x000d0000
59
+ _rc8x5 equ 0x00009000
60
+ _rc7x6 equ 0x00000050
61
+ _rc6x7 equ 0x0000000c
62
+ _rc5x8 equ 0x2c000000
63
+ _rc4x9 equ 0x1c000000
64
+ _rc3x10 equ 0x003c0000
65
+ _rc2x11 equ 0x00034000
66
+ _rc1x12 equ 0x00000120
67
+
68
+ ; ----------------------------------------------------------------------------
69
+
70
+ MACRO
71
+ mXor3 $ro, $a0, $a1, $a2, $rho_e1, $rho_e2
72
+ if (($rho_e1)%32) == 0
73
+ eors $ro, $a0, $a1
74
+ else
75
+ eor $ro, $a0, $a1, ROR #(32-($rho_e1))%32
76
+ endif
77
+ if (($rho_e2)%32) == 0
78
+ eors $ro, $ro, $a2
79
+ else
80
+ eor $ro, $ro, $a2, ROR #(32-($rho_e2))%32
81
+ endif
82
+ MEND
83
+
84
+ MACRO
85
+ mRliXor $ro, $ri, $rot
86
+ if (($rot)%32) == 0
87
+ eors $ro, $ro, $ri
88
+ else
89
+ eor $ro, $ro, $ri, ROR #(32-($rot))%32
90
+ endif
91
+ MEND
92
+
93
+ MACRO
94
+ mRloXor $ro, $ri, $rot
95
+ if (($rot)%32) == 0
96
+ eors $ro, $ro, $ri
97
+ else
98
+ eor $ro, $ri, $ro, ROR #(32-($rot))%32
99
+ endif
100
+ MEND
101
+
102
+ MACRO
103
+ mChi3 $a0,$a1,$a2,$r0,$r1
104
+ bic $r0, $a2, $a1, ROR #_w1
105
+ eors $a0, $a0, $r0, ROR #32-_w1
106
+ bic $r1, $a0, $a2, ROR #32-_w1
107
+ eors $a1, $a1, $r1
108
+ bic $r1, $a1, $a0
109
+ eors $a2, $a2, $r1, ROR #_w1
110
+ MEND
111
+
112
+ MACRO
113
+ mRound $r6i, $r7i, $r8i, $r9i, $r6w, $r7w, $r8w, $r9w, $r10i, $r11i, $r12i, $lri, $rho_e1, $rho_we2, $rc
114
+
115
+ ; Theta: Column Parity Mixer (with late Rho-west, Rho-east bit rotations)
116
+ mXor3 r0, r5, $r9i, $lri, $rho_e1, $rho_we2
117
+ mXor3 r1, r2, $r6i, $r10i, $rho_e1, $rho_we2
118
+ mRliXor r0, r0, _r1-_r0
119
+ mRloXor r2, r0, 32-_r0
120
+ mRloXor $r6i, r0, $rho_e1-_r0
121
+ mRloXor $r10i, r0, $rho_we2-_r0
122
+
123
+ mXor3 r0, r3, $r7i, $r11i, $rho_e1, $rho_we2
124
+ mRliXor r1, r1, _r1-_r0
125
+ mRloXor r3, r1, 32-_r0
126
+ mRloXor $r7i, r1, $rho_e1-_r0
127
+ mRloXor $r11i, r1, $rho_we2-_r0
128
+
129
+ mXor3 r1, r4, $r8i, $r12i, $rho_e1, $rho_we2
130
+ mRliXor r0, r0, _r1-_r0
131
+ mRloXor r4, r0, 32-_r0
132
+ mRloXor $r8i, r0, $rho_e1-_r0
133
+ mRloXor $r12i, r0, $rho_we2-_r0
134
+
135
+ mRliXor r1, r1, _r1-_r0
136
+ mRloXor r5, r1, 32-_r0
137
+ mRloXor $r9i, r1, $rho_e1-_r0
138
+ mRloXor $lri, r1, $rho_we2-_r0
139
+ ; After Theta the whole state is rotated -r0
140
+ ; from here we must use a1.w instead of a1.i
141
+
142
+ ; Iota: round constant
143
+ if $rc == 0xc0000002
144
+ eor r2, r2, #0x00000002
145
+ eor r2, r2, #0xc0000000
146
+ else
147
+ eor r2, r2, #$rc
148
+ endif
149
+
150
+ ; Chi: non linear step, on colums
151
+ mChi3 r2, $r6w, $r10i, r0, r1
152
+ mChi3 r3, $r7w, $r11i, r0, r1
153
+ mChi3 r4, $r8w, $r12i, r0, r1
154
+ mChi3 r5, $r9w, $lri, r0, r1
155
+ MEND
156
+
157
+ offsetInstance equ 0
158
+ offsetInitialLen equ 16
159
+ offsetReturn equ 20
160
+
161
+ ; ----------------------------------------------------------------------------
162
+ ;
163
+ ; Xoodoo_Permute_12roundsAsm: only callable from asm
164
+ ;
165
+ Xoodoo_Permute_12roundsAsm PROC
166
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 32, 32, _rc12x1
167
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc11x2
168
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc10x3
169
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc9x4
170
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc8x5
171
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc7x6
172
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc6x7
173
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc5x8
174
+ mRound r6, r7, r8, r9, r9, r6, r7, r8, r10, r11, r12, lr, 1, _e1+_w1, _rc4x9
175
+ mRound r9, r6, r7, r8, r8, r9, r6, r7, r12, lr, r10, r11, 1, _e1+_w1, _rc3x10
176
+ mRound r8, r9, r6, r7, r7, r8, r9, r6, r10, r11, r12, lr, 1, _e1+_w1, _rc2x11
177
+ mRound r7, r8, r9, r6, r6, r7, r8, r9, r12, lr, r10, r11, 1, _e1+_w1, _rc1x12
178
+ ror r2, r2, #32-(12*_r0)%32
179
+ ror r3, r3, #32-(12*_r0)%32
180
+ ror r4, r4, #32-(12*_r0)%32
181
+ ror r5, r5, #32-(12*_r0)%32
182
+ ror r6, r6, #32-(12*_r0+1)%32
183
+ ror r7, r7, #32-(12*_r0+1)%32
184
+ ror r8, r8, #32-(12*_r0+1)%32
185
+ ror r9, r9, #32-(12*_r0+1)%32
186
+ ror r10, r10, #32-(12*_r0+_e1+_w1)%32
187
+ ror r11, r11, #32-(12*_r0+_e1+_w1)%32
188
+ ror r12, r12, #32-(12*_r0+_e1+_w1)%32
189
+ ror lr, lr, #32-(12*_r0+_e1+_w1)%32
190
+ ldr pc, [sp, #offsetReturn]
191
+ align 4
192
+ ENDP
193
+
194
+
195
+ ; ----------------------------------------------------------------------------
196
+ ;
197
+ ; size_t Xoodyak_AbsorbKeyedFullBlocks(void *state, const uint8_t *X, size_t XLen)
198
+ ; {
199
+ ; size_t initialLength = XLen;
200
+ ;
201
+ ; do {
202
+ ; SnP_Permute(state ); /* Xoodyak_Up(instance, NULL, 0, 0); */
203
+ ; SnP_AddBytes(state, X, 0, Xoodyak_Rkin); /* Xoodyak_Down(instance, X, Xoodyak_Rkin, 0); */
204
+ ; SnP_AddByte(state, 0x01, Xoodyak_Rkin);
205
+ ; X += Xoodyak_Rkin;
206
+ ; XLen -= Xoodyak_Rkin;
207
+ ; } while (XLen >= Xoodyak_Rkin);
208
+ ;
209
+ ; return initialLength - XLen;
210
+ ; }
211
+ ;
212
+ offsetAbsorbX equ 4
213
+ offsetAbsorbXLen equ 8
214
+
215
+ EXPORT Xoodyak_AbsorbKeyedFullBlocks
216
+ Xoodyak_AbsorbKeyedFullBlocks PROC
217
+ push {r4-r12,lr}
218
+ mov r4, r2 ; r4 initialLength
219
+ subs r2, r2, #44
220
+ ldr r5, =Xoodyak_AbsorbKeyedFullBlocks_Ret+1
221
+ push {r0-r5}
222
+ ldmia r0, {r2-r12,lr}
223
+ Xoodyak_AbsorbKeyedFullBlocks_Loop
224
+ b.w Xoodoo_Permute_12roundsAsm
225
+ Xoodyak_AbsorbKeyedFullBlocks_Ret
226
+ ldr r0, [sp, #offsetAbsorbX]
227
+ ldr r1, [r0], #4
228
+ eors r2, r2, r1
229
+ ldr r1, [r0], #4
230
+ eors r3, r3, r1
231
+ ldr r1, [r0], #4
232
+ eors r4, r4, r1
233
+ ldr r1, [r0], #4
234
+ eors r5, r5, r1
235
+ ldr r1, [r0], #4
236
+ eors r6, r6, r1
237
+ ldr r1, [r0], #4
238
+ eors r7, r7, r1
239
+ ldr r1, [r0], #4
240
+ eors r8, r8, r1
241
+ ldr r1, [r0], #4
242
+ eors r9, r9, r1
243
+ ldr r1, [r0], #4
244
+ eors r10, r10, r1
245
+ ldr r1, [r0], #4
246
+ eors r11, r11, r1
247
+ ldr r1, [r0], #4
248
+ eors lr, lr, #1
249
+ eors r12, r12, r1
250
+ ldr r1, [sp, #offsetAbsorbXLen]
251
+ str r0, [sp, #offsetAbsorbX]
252
+ subs r1, r1, #44
253
+ str r1, [sp, #offsetAbsorbXLen]
254
+ bcs Xoodyak_AbsorbKeyedFullBlocks_Loop
255
+ ldr r0, [sp, #offsetInstance]
256
+ stmia r0, {r2-r12,lr}
257
+ pop {r0-r5}
258
+ adds r2, r2, #44
259
+ sub r0, r4, r2
260
+ pop {r4-r12,pc}
261
+ align 4
262
+ ENDP
263
+
264
+ ; ----------------------------------------------------------------------------
265
+ ;
266
+ ; size_t Xoodyak_AbsorbHashFullBlocks(void *state, const uint8_t *X, size_t XLen)
267
+ ; {
268
+ ; size_t initialLength = XLen;
269
+ ;
270
+ ; do {
271
+ ; SnP_Permute(state ); /* Xoodyak_Up(instance, NULL, 0, 0); */
272
+ ; SnP_AddBytes(state, X, 0, Xoodyak_Rhash); /* Xoodyak_Down(instance, X, Xoodyak_Rhash, 0); */
273
+ ; SnP_AddByte(state, 0x01, Xoodyak_Rhash);
274
+ ; X += Xoodyak_Rhash;
275
+ ; XLen -= Xoodyak_Rhash;
276
+ ; } while (XLen >= Xoodyak_Rhash);
277
+ ;
278
+ ; return initialLength - XLen;
279
+ ; }
280
+ ;
281
+ EXPORT Xoodyak_AbsorbHashFullBlocks
282
+ Xoodyak_AbsorbHashFullBlocks PROC
283
+ push {r4-r12,lr}
284
+ mov r4, r2 ; r4 initialLength
285
+ subs r2, r2, #16
286
+ ldr r5, =Xoodyak_AbsorbHashFullBlocks_Ret+1
287
+ push {r0-r5}
288
+ ldmia r0, {r2-r12,lr}
289
+ Xoodyak_AbsorbHashFullBlocks_Loop
290
+ b.w Xoodoo_Permute_12roundsAsm
291
+ Xoodyak_AbsorbHashFullBlocks_Ret
292
+ ldr r0, [sp, #offsetAbsorbX]
293
+ ldr r1, [r0], #4
294
+ eors r2, r2, r1
295
+ ldr r1, [r0], #4
296
+ eors r3, r3, r1
297
+ ldr r1, [r0], #4
298
+ eors r4, r4, r1
299
+ ldr r1, [r0], #4
300
+ eors r6, r6, #1
301
+ eors r5, r5, r1
302
+ ldr r1, [sp, #offsetAbsorbXLen]
303
+ str r0, [sp, #offsetAbsorbX]
304
+ subs r1, r1, #16
305
+ str r1, [sp, #offsetAbsorbXLen]
306
+ bcs Xoodyak_AbsorbHashFullBlocks_Loop
307
+ ldr r0, [sp, #offsetInstance]
308
+ stmia r0, {r2-r12,lr}
309
+ pop {r0-r5}
310
+ adds r2, r2, #16
311
+ sub r0, r4, r2
312
+ pop {r4-r12,pc}
313
+ align 4
314
+ ENDP
315
+
316
+ ; ----------------------------------------------------------------------------
317
+ ;
318
+ ; size_t Xoodyak_SqueezeKeyedFullBlocks(void *state, uint8_t *Y, size_t YLen)
319
+ ; {
320
+ ; size_t initialLength = YLen;
321
+ ;
322
+ ; do {
323
+ ; SnP_AddByte(state, 0x01, 0); /* Xoodyak_Down(instance, NULL, 0, 0); */
324
+ ; SnP_Permute(state ); /* Xoodyak_Up(instance, Y, Xoodyak_Rkout, 0); */
325
+ ; SnP_ExtractBytes(state, Y, 0, Xoodyak_Rkout);
326
+ ; Y += Xoodyak_Rkout;
327
+ ; YLen -= Xoodyak_Rkout;
328
+ ; } while (YLen >= Xoodyak_Rkout);
329
+ ;
330
+ ; return initialLength - YLen;
331
+ ; }
332
+ ;
333
+ offsetSqueezeY equ 4
334
+ offsetSqueezeYLen equ 8
335
+
336
+ EXPORT Xoodyak_SqueezeKeyedFullBlocks
337
+ Xoodyak_SqueezeKeyedFullBlocks PROC
338
+ push {r4-r12,lr}
339
+ mov r4, r2 ; r4 initialLength
340
+ subs r2, r2, #24
341
+ ldr r5, =Xoodyak_SqueezeKeyedFullBlocks_Ret+1
342
+ push {r0-r5}
343
+ ldmia r0, {r2-r12,lr}
344
+ Xoodyak_SqueezeKeyedFullBlocks_Loop
345
+ eors r2, r2, #1
346
+ b.w Xoodoo_Permute_12roundsAsm
347
+ Xoodyak_SqueezeKeyedFullBlocks_Ret
348
+ ldr r0, [sp, #offsetSqueezeY]
349
+ str r2, [r0], #4
350
+ str r3, [r0], #4
351
+ str r4, [r0], #4
352
+ str r5, [r0], #4
353
+ str r6, [r0], #4
354
+ str r7, [r0], #4
355
+ ldr r1, [sp, #offsetSqueezeYLen]
356
+ str r0, [sp, #offsetSqueezeY]
357
+ subs r1, r1, #24
358
+ str r1, [sp, #offsetSqueezeYLen]
359
+ bcs Xoodyak_SqueezeKeyedFullBlocks_Loop
360
+ ldr r0, [sp, #offsetInstance]
361
+ stmia r0, {r2-r12,lr}
362
+ pop {r0-r5}
363
+ adds r2, r2, #24
364
+ sub r0, r4, r2
365
+ pop {r4-r12,pc}
366
+ align 4
367
+ ENDP
368
+
369
+ ; ----------------------------------------------------------------------------
370
+ ;
371
+ ; size_t Xoodyak_SqueezeHashFullBlocks(void *state, uint8_t *Y, size_t YLen)
372
+ ; {
373
+ ; size_t initialLength = YLen;
374
+ ;
375
+ ; do {
376
+ ; SnP_AddByte(state, 0x01, 0); /* Xoodyak_Down(instance, NULL, 0, 0); */
377
+ ; SnP_Permute(state); /* Xoodyak_Up(instance, Y, Xoodyak_Rhash, 0); */
378
+ ; SnP_ExtractBytes(state, Y, 0, Xoodyak_Rhash);
379
+ ; Y += Xoodyak_Rhash;
380
+ ; YLen -= Xoodyak_Rhash;
381
+ ; } while (YLen >= Xoodyak_Rhash);
382
+ ;
383
+ ; return initialLength - YLen;
384
+ ; }
385
+ ;
386
+ EXPORT Xoodyak_SqueezeHashFullBlocks
387
+ Xoodyak_SqueezeHashFullBlocks PROC
388
+ push {r4-r12,lr}
389
+ mov r4, r2 ; r4 initialLength
390
+ subs r2, r2, #16
391
+ ldr r5, =Xoodyak_SqueezeHashFullBlocks_Ret+1
392
+ push {r0-r5}
393
+ ldmia r0, {r2-r12,lr}
394
+ Xoodyak_SqueezeHashFullBlocks_Loop
395
+ eors r2, r2, #1
396
+ b.w Xoodoo_Permute_12roundsAsm
397
+ Xoodyak_SqueezeHashFullBlocks_Ret
398
+ ldr r0, [sp, #offsetSqueezeY]
399
+ str r2, [r0], #4
400
+ str r3, [r0], #4
401
+ str r4, [r0], #4
402
+ str r5, [r0], #4
403
+ ldr r1, [sp, #offsetSqueezeYLen]
404
+ str r0, [sp, #offsetSqueezeY]
405
+ subs r1, r1, #16
406
+ str r1, [sp, #offsetSqueezeYLen]
407
+ bcs Xoodyak_SqueezeHashFullBlocks_Loop
408
+ ldr r0, [sp, #offsetInstance]
409
+ stmia r0, {r2-r12,lr}
410
+ pop {r0-r5}
411
+ adds r2, r2, #16
412
+ sub r0, r4, r2
413
+ pop {r4-r12,pc}
414
+ align 4
415
+ ENDP
416
+
417
+ ; ----------------------------------------------------------------------------
418
+ ;
419
+ ; size_t Xoodyak_EncryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
420
+ ; {
421
+ ; size_t initialLength = IOLen;
422
+ ;
423
+ ; do {
424
+ ; SnP_Permute(state);
425
+ ; SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout);
426
+ ; SnP_OverwriteBytes(state, O, 0, Xoodyak_Rkout);
427
+ ; SnP_AddByte(state, 0x01, Xoodyak_Rkout);
428
+ ; I += Xoodyak_Rkout;
429
+ ; O += Xoodyak_Rkout;
430
+ ; IOLen -= Xoodyak_Rkout;
431
+ ; } while (IOLen >= Xoodyak_Rkout);
432
+ ;
433
+ ; return initialLength - IOLen;
434
+ ; }
435
+ ;
436
+ offsetCryptI equ 4+8
437
+ offsetCryptO equ 8+8
438
+ offsetCryptIOLen equ 12
439
+
440
+ EXPORT Xoodyak_EncryptFullBlocks
441
+ Xoodyak_EncryptFullBlocks PROC
442
+ push {r4-r12,lr}
443
+ mov r4, r3 ; r4 initialLength
444
+ subs r3, r3, #24
445
+ ldr r5, =Xoodyak_EncryptFullBlocks_Ret+1
446
+ push {r0-r5}
447
+ ldmia r0, {r2-r12,lr}
448
+ Xoodyak_EncryptFullBlocks_Loop
449
+ b.w Xoodoo_Permute_12roundsAsm
450
+ Xoodyak_EncryptFullBlocks_Ret
451
+ push {r10, r11}
452
+ ldr r11, [sp, #offsetCryptI]
453
+ ldr r10, [sp, #offsetCryptO]
454
+ ldr r0, [r11], #4
455
+ ldr r1, [r11], #4
456
+ eors r2, r2, r0
457
+ str r2, [r10], #4
458
+ eors r3, r3, r1
459
+ ldr r0, [r11], #4
460
+ str r3, [r10], #4
461
+ eors r4, r4, r0
462
+ ldr r1, [r11], #4
463
+ str r4, [r10], #4
464
+ eors r5, r5, r1
465
+ ldr r0, [r11], #4
466
+ str r5, [r10], #4
467
+ eors r6, r6, r0
468
+ ldr r1, [r11], #4
469
+ str r6, [r10], #4
470
+ eors r7, r7, r1
471
+ str r7, [r10], #4
472
+ str r10, [sp, #offsetCryptO]
473
+ str r11, [sp, #offsetCryptI]
474
+ pop {r10, r11}
475
+ ldr r0, [sp, #offsetCryptIOLen]
476
+ eors r8, r8, #1
477
+ subs r0, r0, #24
478
+ str r0, [sp, #offsetCryptIOLen]
479
+ bcs Xoodyak_EncryptFullBlocks_Loop
480
+ ldr r0, [sp, #offsetInstance]
481
+ stmia r0, {r2-r12,lr}
482
+ pop {r0-r5}
483
+ adds r3, r3, #24
484
+ sub r0, r4, r3
485
+ pop {r4-r12,pc}
486
+ align 4
487
+ ENDP
488
+
489
+ ; ----------------------------------------------------------------------------
490
+ ;
491
+ ; size_t Xoodyak_DecryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
492
+ ; {
493
+ ; size_t initialLength = IOLen;
494
+ ;
495
+ ; do {
496
+ ; SnP_Permute(state);
497
+ ; SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout);
498
+ ; SnP_AddBytes(state, O, 0, Xoodyak_Rkout);
499
+ ; SnP_AddByte(state, 0x01, Xoodyak_Rkout);
500
+ ; I += Xoodyak_Rkout;
501
+ ; O += Xoodyak_Rkout;
502
+ ; IOLen -= Xoodyak_Rkout;
503
+ ; } while (IOLen >= Xoodyak_Rkout);
504
+ ;
505
+ ; return initialLength - IOLen;
506
+ ; }
507
+ ;
508
+ EXPORT Xoodyak_DecryptFullBlocks
509
+ Xoodyak_DecryptFullBlocks PROC
510
+ push {r4-r12,lr}
511
+ mov r4, r3 ; r4 initialLength
512
+ subs r3, r3, #24
513
+ ldr r5, =Xoodyak_DecryptFullBlocks_Ret+1
514
+ push {r0-r5}
515
+ ldmia r0, {r2-r12,lr}
516
+ Xoodyak_DecryptFullBlocks_Loop
517
+ b.w Xoodoo_Permute_12roundsAsm
518
+ Xoodyak_DecryptFullBlocks_Ret
519
+ push {r10, r11}
520
+ ldr r11, [sp, #offsetCryptI]
521
+ ldr r10, [sp, #offsetCryptO]
522
+ ldr r0, [r11], #4
523
+ ldr r1, [r11], #4
524
+ eors r2, r2, r0
525
+ str r2, [r10], #4
526
+ mov r2, r0
527
+ eors r3, r3, r1
528
+ ldr r0, [r11], #4
529
+ str r3, [r10], #4
530
+ mov r3, r1
531
+ eors r4, r4, r0
532
+ ldr r1, [r11], #4
533
+ str r4, [r10], #4
534
+ mov r4, r0
535
+ eors r5, r5, r1
536
+ ldr r0, [r11], #4
537
+ str r5, [r10], #4
538
+ mov r5, r1
539
+ eors r6, r6, r0
540
+ ldr r1, [r11], #4
541
+ str r6, [r10], #4
542
+ mov r6, r0
543
+ eors r7, r7, r1
544
+ str r7, [r10], #4
545
+ mov r7, r1
546
+ str r10, [sp, #offsetCryptO]
547
+ str r11, [sp, #offsetCryptI]
548
+ pop {r10, r11}
549
+ ldr r0, [sp, #offsetCryptIOLen]
550
+ eors r8, r8, #1
551
+ subs r0, r0, #24
552
+ str r0, [sp, #offsetCryptIOLen]
553
+ bcs Xoodyak_DecryptFullBlocks_Loop
554
+ ldr r0, [sp, #offsetInstance]
555
+ stmia r0, {r2-r12,lr}
556
+ pop {r0-r5}
557
+ adds r3, r3, #24
558
+ sub r0, r4, r3
559
+ pop {r4-r12,pc}
560
+ align 4
561
+ ENDP
562
+
563
+ END