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,562 @@
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 ARMv6 architecture (e.g., ARM11).
18
+
19
+ PRESERVE8
20
+ AREA |.text|, CODE, READONLY
21
+
22
+
23
+ ; ----------------------------------------------------------------------------
24
+
25
+ _r0 equ 5
26
+ _r1 equ 14
27
+ _t3 equ 1
28
+
29
+ _w1 equ 11
30
+
31
+ _e0 equ 2
32
+ _e1 equ 8
33
+
34
+ _rc12 equ 0x00000058
35
+ _rc11 equ 0x00000038
36
+ _rc10 equ 0x000003C0
37
+ _rc9 equ 0x000000D0
38
+ _rc8 equ 0x00000120
39
+ _rc7 equ 0x00000014
40
+ _rc6 equ 0x00000060
41
+ _rc5 equ 0x0000002C
42
+ _rc4 equ 0x00000380
43
+ _rc3 equ 0x000000F0
44
+ _rc2 equ 0x000001A0
45
+ _rc1 equ 0x00000012
46
+
47
+ _rc6x1 equ 0x00000003
48
+ _rc5x2 equ 0x0b000000
49
+ _rc4x3 equ 0x07000000
50
+ _rc3x4 equ 0x000f0000
51
+ _rc2x5 equ 0x0000d000
52
+ _rc1x6 equ 0x00000048
53
+
54
+ _rc12x1 equ 0xc0000002
55
+ _rc11x2 equ 0x0e000000
56
+ _rc10x3 equ 0x07800000
57
+ _rc9x4 equ 0x000d0000
58
+ _rc8x5 equ 0x00009000
59
+ _rc7x6 equ 0x00000050
60
+ _rc6x7 equ 0x0000000c
61
+ _rc5x8 equ 0x2c000000
62
+ _rc4x9 equ 0x1c000000
63
+ _rc3x10 equ 0x003c0000
64
+ _rc2x11 equ 0x00034000
65
+ _rc1x12 equ 0x00000120
66
+
67
+ ; ----------------------------------------------------------------------------
68
+
69
+ MACRO
70
+ mXor3 $ro, $a0, $a1, $a2, $rho_e1, $rho_e2
71
+ if (($rho_e1)%32) == 0
72
+ eors $ro, $a0, $a1
73
+ else
74
+ eor $ro, $a0, $a1, ROR #(32-($rho_e1))%32
75
+ endif
76
+ if (($rho_e2)%32) == 0
77
+ eors $ro, $ro, $a2
78
+ else
79
+ eor $ro, $ro, $a2, ROR #(32-($rho_e2))%32
80
+ endif
81
+ MEND
82
+
83
+ MACRO
84
+ mRliXor $ro, $ri, $rot
85
+ if (($rot)%32) == 0
86
+ eors $ro, $ro, $ri
87
+ else
88
+ eor $ro, $ro, $ri, ROR #(32-($rot))%32
89
+ endif
90
+ MEND
91
+
92
+ MACRO
93
+ mRloXor $ro, $ri, $rot
94
+ if (($rot)%32) == 0
95
+ eors $ro, $ro, $ri
96
+ else
97
+ eor $ro, $ri, $ro, ROR #(32-($rot))%32
98
+ endif
99
+ MEND
100
+
101
+ MACRO
102
+ mChi3 $a0,$a1,$a2,$r0,$r1
103
+ bic $r0, $a2, $a1, ROR #_w1
104
+ eors $a0, $a0, $r0, ROR #32-_w1
105
+ bic $r1, $a0, $a2, ROR #32-_w1
106
+ eors $a1, $a1, $r1
107
+ bic $r1, $a1, $a0
108
+ eors $a2, $a2, $r1, ROR #_w1
109
+ MEND
110
+
111
+ MACRO
112
+ mRound $r6i, $r7i, $r8i, $r9i, $r6w, $r7w, $r8w, $r9w, $r10i, $r11i, $r12i, $lri, $rho_e1, $rho_we2, $rc
113
+
114
+ ; Theta: Column Parity Mixer (with late Rho-west, Rho-east bit rotations)
115
+ mXor3 r0, r5, $r9i, $lri, $rho_e1, $rho_we2
116
+ mXor3 r1, r2, $r6i, $r10i, $rho_e1, $rho_we2
117
+ mRliXor r0, r0, _r1-_r0
118
+ mRloXor r2, r0, 32-_r0
119
+ mRloXor $r6i, r0, $rho_e1-_r0
120
+ mRloXor $r10i, r0, $rho_we2-_r0
121
+
122
+ mXor3 r0, r3, $r7i, $r11i, $rho_e1, $rho_we2
123
+ mRliXor r1, r1, _r1-_r0
124
+ mRloXor r3, r1, 32-_r0
125
+ mRloXor $r7i, r1, $rho_e1-_r0
126
+ mRloXor $r11i, r1, $rho_we2-_r0
127
+
128
+ mXor3 r1, r4, $r8i, $r12i, $rho_e1, $rho_we2
129
+ mRliXor r0, r0, _r1-_r0
130
+ mRloXor r4, r0, 32-_r0
131
+ mRloXor $r8i, r0, $rho_e1-_r0
132
+ mRloXor $r12i, r0, $rho_we2-_r0
133
+
134
+ mRliXor r1, r1, _r1-_r0
135
+ mRloXor r5, r1, 32-_r0
136
+ mRloXor $r9i, r1, $rho_e1-_r0
137
+ mRloXor $lri, r1, $rho_we2-_r0
138
+ ; After Theta the whole state is rotated -r0
139
+ ; from here we must use a1.w instead of a1.i
140
+
141
+ ; Iota: round constant
142
+ if $rc == 0xc0000002
143
+ eor r2, r2, #0x00000002
144
+ eor r2, r2, #0xc0000000
145
+ else
146
+ eor r2, r2, #$rc
147
+ endif
148
+
149
+ ; Chi: non linear step, on colums
150
+ mChi3 r2, $r6w, $r10i, r0, r1
151
+ mChi3 r3, $r7w, $r11i, r0, r1
152
+ mChi3 r4, $r8w, $r12i, r0, r1
153
+ mChi3 r5, $r9w, $lri, r0, r1
154
+ MEND
155
+
156
+ offsetInstance equ 0
157
+ offsetInitialLen equ 16
158
+ offsetReturn equ 20
159
+
160
+ ; ----------------------------------------------------------------------------
161
+ ;
162
+ ; Xoodoo_Permute_12roundsAsm: only callable from asm
163
+ ;
164
+ align 4
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
+ ENDP
192
+
193
+
194
+ ; ----------------------------------------------------------------------------
195
+ ;
196
+ ; size_t Xoodyak_AbsorbKeyedFullBlocks(void *state, const uint8_t *X, size_t XLen)
197
+ ; {
198
+ ; size_t initialLength = XLen;
199
+ ;
200
+ ; do {
201
+ ; SnP_Permute(state ); /* Xoodyak_Up(instance, NULL, 0, 0); */
202
+ ; SnP_AddBytes(state, X, 0, Xoodyak_Rkin); /* Xoodyak_Down(instance, X, Xoodyak_Rkin, 0); */
203
+ ; SnP_AddByte(state, 0x01, Xoodyak_Rkin);
204
+ ; X += Xoodyak_Rkin;
205
+ ; XLen -= Xoodyak_Rkin;
206
+ ; } while (XLen >= Xoodyak_Rkin);
207
+ ;
208
+ ; return initialLength - XLen;
209
+ ; }
210
+ ;
211
+ offsetAbsorbX equ 4
212
+ offsetAbsorbXLen equ 8
213
+
214
+ align 4
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
221
+ push {r0-r5}
222
+ ldmia r0, {r2-r12,lr}
223
+ Xoodyak_AbsorbKeyedFullBlocks_Loop
224
+ b 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
+ ENDP
262
+
263
+ ; ----------------------------------------------------------------------------
264
+ ;
265
+ ; size_t Xoodyak_AbsorbHashFullBlocks(void *state, const uint8_t *X, size_t XLen)
266
+ ; {
267
+ ; size_t initialLength = XLen;
268
+ ;
269
+ ; do {
270
+ ; SnP_Permute(state ); /* Xoodyak_Up(instance, NULL, 0, 0); */
271
+ ; SnP_AddBytes(state, X, 0, Xoodyak_Rhash); /* Xoodyak_Down(instance, X, Xoodyak_Rhash, 0); */
272
+ ; SnP_AddByte(state, 0x01, Xoodyak_Rhash);
273
+ ; X += Xoodyak_Rhash;
274
+ ; XLen -= Xoodyak_Rhash;
275
+ ; } while (XLen >= Xoodyak_Rhash);
276
+ ;
277
+ ; return initialLength - XLen;
278
+ ; }
279
+ ;
280
+ align 4
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
287
+ push {r0-r5}
288
+ ldmia r0, {r2-r12,lr}
289
+ Xoodyak_AbsorbHashFullBlocks_Loop
290
+ b 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
+ ENDP
314
+
315
+ ; ----------------------------------------------------------------------------
316
+ ;
317
+ ; size_t Xoodyak_SqueezeKeyedFullBlocks(void *state, uint8_t *Y, size_t YLen)
318
+ ; {
319
+ ; size_t initialLength = YLen;
320
+ ;
321
+ ; do {
322
+ ; SnP_AddByte(state, 0x01, 0); /* Xoodyak_Down(instance, NULL, 0, 0); */
323
+ ; SnP_Permute(state ); /* Xoodyak_Up(instance, Y, Xoodyak_Rkout, 0); */
324
+ ; SnP_ExtractBytes(state, Y, 0, Xoodyak_Rkout);
325
+ ; Y += Xoodyak_Rkout;
326
+ ; YLen -= Xoodyak_Rkout;
327
+ ; } while (YLen >= Xoodyak_Rkout);
328
+ ;
329
+ ; return initialLength - YLen;
330
+ ; }
331
+ ;
332
+ offsetSqueezeY equ 4
333
+ offsetSqueezeYLen equ 8
334
+
335
+ align 4
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
342
+ push {r0-r5}
343
+ ldmia r0, {r2-r12,lr}
344
+ Xoodyak_SqueezeKeyedFullBlocks_Loop
345
+ eors r2, r2, #1
346
+ b 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
+ ENDP
367
+
368
+ ; ----------------------------------------------------------------------------
369
+ ;
370
+ ; size_t Xoodyak_SqueezeHashFullBlocks(void *state, uint8_t *Y, size_t YLen)
371
+ ; {
372
+ ; size_t initialLength = YLen;
373
+ ;
374
+ ; do {
375
+ ; SnP_AddByte(state, 0x01, 0); /* Xoodyak_Down(instance, NULL, 0, 0); */
376
+ ; SnP_Permute(state); /* Xoodyak_Up(instance, Y, Xoodyak_Rhash, 0); */
377
+ ; SnP_ExtractBytes(state, Y, 0, Xoodyak_Rhash);
378
+ ; Y += Xoodyak_Rhash;
379
+ ; YLen -= Xoodyak_Rhash;
380
+ ; } while (YLen >= Xoodyak_Rhash);
381
+ ;
382
+ ; return initialLength - YLen;
383
+ ; }
384
+ ;
385
+ align 4
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
392
+ push {r0-r5}
393
+ ldmia r0, {r2-r12,lr}
394
+ Xoodyak_SqueezeHashFullBlocks_Loop
395
+ eors r2, r2, #1
396
+ b 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
+ ENDP
415
+
416
+ ; ----------------------------------------------------------------------------
417
+ ;
418
+ ; size_t Xoodyak_EncryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
419
+ ; {
420
+ ; size_t initialLength = IOLen;
421
+ ;
422
+ ; do {
423
+ ; SnP_Permute(state);
424
+ ; SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout);
425
+ ; SnP_OverwriteBytes(state, O, 0, Xoodyak_Rkout);
426
+ ; SnP_AddByte(state, 0x01, Xoodyak_Rkout);
427
+ ; I += Xoodyak_Rkout;
428
+ ; O += Xoodyak_Rkout;
429
+ ; IOLen -= Xoodyak_Rkout;
430
+ ; } while (IOLen >= Xoodyak_Rkout);
431
+ ;
432
+ ; return initialLength - IOLen;
433
+ ; }
434
+ ;
435
+ offsetCryptI equ 4+8
436
+ offsetCryptO equ 8+8
437
+ offsetCryptIOLen equ 12
438
+
439
+ align 4
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
446
+ push {r0-r5}
447
+ ldmia r0, {r2-r12,lr}
448
+ Xoodyak_EncryptFullBlocks_Loop
449
+ b 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
+ ENDP
487
+
488
+ ; ----------------------------------------------------------------------------
489
+ ;
490
+ ; size_t Xoodyak_DecryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
491
+ ; {
492
+ ; size_t initialLength = IOLen;
493
+ ;
494
+ ; do {
495
+ ; SnP_Permute(state);
496
+ ; SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout);
497
+ ; SnP_AddBytes(state, O, 0, Xoodyak_Rkout);
498
+ ; SnP_AddByte(state, 0x01, Xoodyak_Rkout);
499
+ ; I += Xoodyak_Rkout;
500
+ ; O += Xoodyak_Rkout;
501
+ ; IOLen -= Xoodyak_Rkout;
502
+ ; } while (IOLen >= Xoodyak_Rkout);
503
+ ;
504
+ ; return initialLength - IOLen;
505
+ ; }
506
+ ;
507
+ align 4
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
514
+ push {r0-r5}
515
+ ldmia r0, {r2-r12,lr}
516
+ Xoodyak_DecryptFullBlocks_Loop
517
+ b 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
+ ENDP
561
+
562
+ END