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