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,399 @@
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
+ #include <stdio.h>
18
+ #include <string.h>
19
+ #include "Xoodoo.h"
20
+
21
+ #define VERBOSE 0
22
+
23
+ #if (VERBOSE > 0)
24
+ #define Dump(__t) printf(__t "\n"); \
25
+ printf("a00 %08x, a01 %08x, a02 %08x, a03 %08x\n", a00, a01, a02, a03 ); \
26
+ printf("a10 %08x, a11 %08x, a12 %08x, a13 %08x\n", a10, a11, a12, a13 ); \
27
+ printf("a20 %08x, a21 %08x, a22 %08x, a23 %08x\n\n", a20, a21, a22, a23 );
28
+ #else
29
+ #define Dump(__t)
30
+ #endif
31
+
32
+ #if (VERBOSE >= 1)
33
+ #define Dump1(__t) Dump(__t)
34
+ #else
35
+ #define Dump1(__t)
36
+ #endif
37
+
38
+ #if (VERBOSE >= 2)
39
+ #define Dump2(__t) Dump(__t)
40
+ #else
41
+ #define Dump2(__t)
42
+ #endif
43
+
44
+ #if (VERBOSE >= 3)
45
+ #define Dump3(__t) Dump(__t)
46
+ #else
47
+ #define Dump3(__t)
48
+ #endif
49
+
50
+ /* ---------------------------------------------------------------- */
51
+
52
+ void Xoodoo_Initialize(void *state)
53
+ {
54
+ memset(state, 0, NLANES*sizeof(tXoodooLane));
55
+ }
56
+
57
+ /* ---------------------------------------------------------------- */
58
+
59
+ void Xoodoo_AddBytes(void *argState, const unsigned char *argdata, unsigned int offset, unsigned int length)
60
+ {
61
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
62
+ if (length == (3*4*4)) {
63
+ uint32_t *state = (uint32_t *)argState;
64
+ uint32_t *data = (uint32_t *)argdata;
65
+ state[0] ^= data[0];
66
+ state[1] ^= data[1];
67
+ state[2] ^= data[2];
68
+ state[3] ^= data[3];
69
+ state[4] ^= data[4];
70
+ state[5] ^= data[5];
71
+ state[6] ^= data[6];
72
+ state[7] ^= data[7];
73
+ state[8] ^= data[8];
74
+ state[9] ^= data[9];
75
+ state[10] ^= data[10];
76
+ state[11] ^= data[11];
77
+ }
78
+ else {
79
+ unsigned int sizeLeft = length;
80
+ unsigned int lanePosition = offset/4;
81
+ unsigned int offsetInLane = offset%4;
82
+ const unsigned char *curData = argdata;
83
+ uint32_t *state = (uint32_t*)argState;
84
+
85
+ state += lanePosition;
86
+ if ((sizeLeft > 0) && (offsetInLane != 0)) {
87
+ unsigned int bytesInLane = 4 - offsetInLane;
88
+ uint32_t lane = 0;
89
+ if (bytesInLane > sizeLeft)
90
+ bytesInLane = sizeLeft;
91
+ memcpy((unsigned char*)&lane + offsetInLane, curData, bytesInLane);
92
+ *state++ ^= lane;
93
+ sizeLeft -= bytesInLane;
94
+ curData += bytesInLane;
95
+ }
96
+
97
+ while(sizeLeft >= 4) {
98
+ *state++ ^= READ32_UNALIGNED( curData );
99
+ sizeLeft -= 4;
100
+ curData += 4;
101
+ }
102
+
103
+ if (sizeLeft > 0) {
104
+ uint32_t lane = 0;
105
+ memcpy(&lane, curData, sizeLeft);
106
+ *state ^= lane;
107
+ }
108
+ }
109
+ #else
110
+ #error "Not yet implemented"
111
+ #endif
112
+ }
113
+
114
+ /* ---------------------------------------------------------------- */
115
+
116
+ void Xoodoo_OverwriteBytes(void *argstate, const unsigned char *argdata, unsigned int offset, unsigned int length)
117
+ {
118
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
119
+ if (length == (3*4*4)) {
120
+ uint32_t *state = (uint32_t *)argstate;
121
+ uint32_t *data = (uint32_t *)argdata;
122
+ state[0] = data[0];
123
+ state[1] = data[1];
124
+ state[2] = data[2];
125
+ state[3] = data[3];
126
+ state[4] = data[4];
127
+ state[5] = data[5];
128
+ state[6] = data[6];
129
+ state[7] = data[7];
130
+ state[8] = data[8];
131
+ state[9] = data[9];
132
+ state[10] = data[10];
133
+ state[11] = data[11];
134
+ }
135
+ else
136
+ memcpy((unsigned char*)argstate+offset, argdata, length);
137
+ #else
138
+ #error "Not yet implemented"
139
+ #endif
140
+ }
141
+
142
+ /* ---------------------------------------------------------------- */
143
+
144
+ void Xoodoo_OverwriteWithZeroes(void *argstate, unsigned int byteCount)
145
+ {
146
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
147
+ memset(argstate, 0, byteCount);
148
+ #else
149
+ #error "Not yet implemented"
150
+ #endif
151
+ }
152
+
153
+ /* ---------------------------------------------------------------- */
154
+
155
+ void Xoodoo_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
156
+ {
157
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
158
+ memcpy(data, (unsigned char*)state+offset, length);
159
+ #else
160
+ #error "Not yet implemented"
161
+ #endif
162
+ }
163
+
164
+ /* ---------------------------------------------------------------- */
165
+
166
+ void Xoodoo_ExtractAndAddBytes(const void *argState, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
167
+ {
168
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
169
+ if (length == (3*4*4)) {
170
+ uint32_t *state = (uint32_t *)argState;
171
+ const uint32_t *ii = (const uint32_t *)input;
172
+ uint32_t *oo = (uint32_t *)output;
173
+
174
+ oo[0] = state[0] ^ ii[0];
175
+ oo[1] = state[1] ^ ii[1];
176
+ oo[2] = state[2] ^ ii[2];
177
+ oo[3] = state[3] ^ ii[3];
178
+ oo[4] = state[4] ^ ii[4];
179
+ oo[5] = state[5] ^ ii[5];
180
+ oo[6] = state[6] ^ ii[6];
181
+ oo[7] = state[7] ^ ii[7];
182
+ oo[8] = state[8] ^ ii[8];
183
+ oo[9] = state[9] ^ ii[9];
184
+ oo[10] = state[10] ^ ii[10];
185
+ oo[11] = state[11] ^ ii[11];
186
+ }
187
+ else {
188
+ unsigned int sizeLeft = length;
189
+ unsigned int lanePosition = offset/4;
190
+ unsigned int offsetInLane = offset%4;
191
+ const unsigned char *curInput = input;
192
+ unsigned char *curOutput = output;
193
+ const uint32_t *state = (const uint32_t*)argState;
194
+
195
+ state += lanePosition;
196
+ if ((sizeLeft > 0) && (offsetInLane != 0)) {
197
+ unsigned int bytesInLane = 4 - offsetInLane;
198
+ uint32_t lane = *state++ >> (offsetInLane * 8);
199
+ if (bytesInLane > sizeLeft)
200
+ bytesInLane = sizeLeft;
201
+ sizeLeft -= bytesInLane;
202
+ do {
203
+ *curOutput++ = (*curInput++) ^ (unsigned char)lane;
204
+ lane >>= 8;
205
+ }
206
+ while ( --bytesInLane != 0);
207
+ }
208
+
209
+ while(sizeLeft >= 4) {
210
+ WRITE32_UNALIGNED( curOutput, READ32_UNALIGNED( curInput ) ^ *state++ );
211
+ sizeLeft -= 4;
212
+ curInput += 4;
213
+ curOutput += 4;
214
+ }
215
+
216
+ if (sizeLeft > 0) {
217
+ uint32_t lane = *state;
218
+ do {
219
+ *curOutput++ = (*curInput++) ^ (unsigned char)lane;
220
+ lane >>= 8;
221
+ }
222
+ while ( --sizeLeft != 0 );
223
+ }
224
+ }
225
+ #else
226
+ #error "Not yet implemented"
227
+ #endif
228
+ }
229
+
230
+ /* ---------------------------------------------------------------- */
231
+
232
+ #define DeclareVars uint32_t a00, a01, a02, a03; \
233
+ uint32_t a10, a11, a12, a13; \
234
+ uint32_t a20, a21, a22, a23; \
235
+ uint32_t v1, v2
236
+
237
+ #define State2Vars a00 = state[0+0], a01 = state[0+1], a02 = state[0+2], a03 = state[0+3]; \
238
+ a10 = state[4+0], a11 = state[4+1], a12 = state[4+2], a13 = state[4+3]; \
239
+ a20 = state[8+0], a21 = state[8+1], a22 = state[8+2], a23 = state[8+3]
240
+
241
+ #define Vars2State state[0+0] = a00, state[0+1] = a01, state[0+2] = a02, state[0+3] = a03; \
242
+ state[4+0] = a10, state[4+1] = a11, state[4+2] = a12, state[4+3] = a13; \
243
+ state[8+0] = a20, state[8+1] = a21, state[8+2] = a22, state[8+3] = a23
244
+
245
+ /*
246
+ ** Theta: Column Parity Mixer
247
+ */
248
+ #define Theta() \
249
+ v1 = a03 ^ a13 ^ a23; \
250
+ v2 = a00 ^ a10 ^ a20; \
251
+ v1 = ROTL32(v1, 5) ^ ROTL32(v1, 14); \
252
+ a00 ^= v1; \
253
+ a10 ^= v1; \
254
+ a20 ^= v1; \
255
+ v1 = a01 ^ a11 ^ a21; \
256
+ v2 = ROTL32(v2, 5) ^ ROTL32(v2, 14); \
257
+ a01 ^= v2; \
258
+ a11 ^= v2; \
259
+ a21 ^= v2; \
260
+ v2 = a02 ^ a12 ^ a22; \
261
+ v1 = ROTL32(v1, 5) ^ ROTL32(v1, 14); \
262
+ a02 ^= v1; \
263
+ a12 ^= v1; \
264
+ a22 ^= v1; \
265
+ v2 = ROTL32(v2, 5) ^ ROTL32(v2, 14); \
266
+ a03 ^= v2; \
267
+ a13 ^= v2; \
268
+ a23 ^= v2
269
+
270
+ /*
271
+ ** Rho-west: Plane shift
272
+ */
273
+ #define Rho_west() \
274
+ a20 = ROTL32(a20, 11); \
275
+ a21 = ROTL32(a21, 11); \
276
+ a22 = ROTL32(a22, 11); \
277
+ a23 = ROTL32(a23, 11); \
278
+ v1 = a13; \
279
+ a13 = a12; \
280
+ a12 = a11; \
281
+ a11 = a10; \
282
+ a10 = v1
283
+
284
+ /*
285
+ ** Iota: Round constants
286
+ */
287
+ #define Iota(__rc) a00 ^= __rc
288
+
289
+ /*
290
+ ** Chi: Non linear step, on colums
291
+ */
292
+ #define Chi() \
293
+ a00 ^= ~a10 & a20; \
294
+ a10 ^= ~a20 & a00; \
295
+ a20 ^= ~a00 & a10; \
296
+ \
297
+ a01 ^= ~a11 & a21; \
298
+ a11 ^= ~a21 & a01; \
299
+ a21 ^= ~a01 & a11; \
300
+ \
301
+ a02 ^= ~a12 & a22; \
302
+ a12 ^= ~a22 & a02; \
303
+ a22 ^= ~a02 & a12; \
304
+ \
305
+ a03 ^= ~a13 & a23; \
306
+ a13 ^= ~a23 & a03; \
307
+ a23 ^= ~a03 & a13
308
+
309
+ /*
310
+ ** Rho-east: Plane shift
311
+ */
312
+ #define Rho_east() \
313
+ a10 = ROTL32(a10, 1); \
314
+ a11 = ROTL32(a11, 1); \
315
+ a12 = ROTL32(a12, 1); \
316
+ a13 = ROTL32(a13, 1); \
317
+ v1 = ROTL32(a23, 8); \
318
+ a23 = ROTL32(a21, 8); \
319
+ a21 = v1; \
320
+ v1 = ROTL32(a22, 8); \
321
+ a22 = ROTL32(a20, 8); \
322
+ a20 = v1
323
+
324
+ #define Round(__rc) \
325
+ Theta(); \
326
+ Dump3("Theta"); \
327
+ Rho_west(); \
328
+ Dump3("Rho-west"); \
329
+ Iota(__rc); \
330
+ Dump3("Iota"); \
331
+ Chi(); \
332
+ Dump3("Chi"); \
333
+ Rho_east(); \
334
+ Dump3("Rho-east")
335
+
336
+ static const uint32_t RC[MAXROUNDS] = {
337
+ _rc12,
338
+ _rc11,
339
+ _rc10,
340
+ _rc9,
341
+ _rc8,
342
+ _rc7,
343
+ _rc6,
344
+ _rc5,
345
+ _rc4,
346
+ _rc3,
347
+ _rc2,
348
+ _rc1
349
+ };
350
+
351
+ void Xoodoo_Permute_Nrounds( uint32_t * state, uint32_t nr )
352
+ {
353
+ DeclareVars;
354
+ uint32_t i;
355
+
356
+ State2Vars;
357
+ for (i = MAXROUNDS - nr; i < MAXROUNDS; ++i ) {
358
+ Round(RC[i]);
359
+ Dump2("Round");
360
+ }
361
+ Dump1("Permutation");
362
+ Vars2State;
363
+ }
364
+
365
+ void Xoodoo_Permute_6rounds( uint32_t * state)
366
+ {
367
+ DeclareVars;
368
+
369
+ State2Vars;
370
+ Round(_rc6);
371
+ Round(_rc5);
372
+ Round(_rc4);
373
+ Round(_rc3);
374
+ Round(_rc2);
375
+ Round(_rc1);
376
+ Dump1("Permutation");
377
+ Vars2State;
378
+ }
379
+
380
+ void Xoodoo_Permute_12rounds( uint32_t * state)
381
+ {
382
+ DeclareVars;
383
+
384
+ State2Vars;
385
+ Round(_rc12);
386
+ Round(_rc11);
387
+ Round(_rc10);
388
+ Round(_rc9);
389
+ Round(_rc8);
390
+ Round(_rc7);
391
+ Round(_rc6);
392
+ Round(_rc5);
393
+ Round(_rc4);
394
+ Round(_rc3);
395
+ Round(_rc2);
396
+ Round(_rc1);
397
+ Dump1("Permutation");
398
+ Vars2State;
399
+ }
@@ -0,0 +1,127 @@
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
+ #include <stdint.h>
18
+ #include <string.h>
19
+ #include <stdlib.h>
20
+ #include "Xoodoo-SnP.h"
21
+ #include "Xoodyak-parameters.h"
22
+
23
+ #ifdef OUTPUT
24
+ #include <stdio.h>
25
+ #endif
26
+
27
+ #define SnP_AddByte Xoodoo_AddByte
28
+ #define SnP_AddBytes Xoodoo_AddBytes
29
+ #define SnP_ExtractBytes Xoodoo_ExtractBytes
30
+ #define SnP_ExtractAndAddBytes Xoodoo_ExtractAndAddBytes
31
+ #define SnP_Permute Xoodoo_Permute_12rounds
32
+ #define SnP_OverwriteBytes Xoodoo_OverwriteBytes
33
+
34
+ size_t Xoodyak_AbsorbKeyedFullBlocks(void *state, const uint8_t *X, size_t XLen)
35
+ {
36
+ size_t initialLength = XLen;
37
+
38
+ do {
39
+ SnP_Permute(state); /* Xoodyak_Up(instance, NULL, 0, 0); */
40
+ SnP_AddBytes(state, X, 0, Xoodyak_Rkin); /* Xoodyak_Down(instance, X, Xoodyak_Rkin, 0); */
41
+ SnP_AddByte(state, 0x01, Xoodyak_Rkin);
42
+ X += Xoodyak_Rkin;
43
+ XLen -= Xoodyak_Rkin;
44
+ } while (XLen >= Xoodyak_Rkin);
45
+
46
+ return initialLength - XLen;
47
+ }
48
+
49
+ size_t Xoodyak_AbsorbHashFullBlocks(void *state, const uint8_t *X, size_t XLen)
50
+ {
51
+ size_t initialLength = XLen;
52
+
53
+ do {
54
+ SnP_Permute(state); /* Xoodyak_Up(instance, NULL, 0, 0); */
55
+ SnP_AddBytes(state, X, 0, Xoodyak_Rhash); /* Xoodyak_Down(instance, X, Xoodyak_Rhash, 0); */
56
+ SnP_AddByte(state, 0x01, Xoodyak_Rhash);
57
+ X += Xoodyak_Rhash;
58
+ XLen -= Xoodyak_Rhash;
59
+ } while (XLen >= Xoodyak_Rhash);
60
+
61
+ return initialLength - XLen;
62
+ }
63
+
64
+
65
+ size_t Xoodyak_SqueezeKeyedFullBlocks(void *state, uint8_t *Y, size_t YLen)
66
+ {
67
+ size_t initialLength = YLen;
68
+
69
+ do {
70
+ SnP_AddByte(state, 0x01, 0); /* Xoodyak_Down(instance, NULL, 0, 0); */
71
+ SnP_Permute(state); /* Xoodyak_Up(instance, Y, Xoodyak_Rkout, 0); */
72
+ SnP_ExtractBytes(state, Y, 0, Xoodyak_Rkout);
73
+ Y += Xoodyak_Rkout;
74
+ YLen -= Xoodyak_Rkout;
75
+ } while (YLen >= Xoodyak_Rkout);
76
+
77
+ return initialLength - YLen;
78
+ }
79
+
80
+ size_t Xoodyak_SqueezeHashFullBlocks(void *state, uint8_t *Y, size_t YLen)
81
+ {
82
+ size_t initialLength = YLen;
83
+
84
+ do {
85
+ SnP_AddByte(state, 0x01, 0); /* Xoodyak_Down(instance, NULL, 0, 0); */
86
+ SnP_Permute(state); /* Xoodyak_Up(instance, Y, Xoodyak_Rhash, 0); */
87
+ SnP_ExtractBytes(state, Y, 0, Xoodyak_Rhash);
88
+ Y += Xoodyak_Rhash;
89
+ YLen -= Xoodyak_Rhash;
90
+ } while (YLen >= Xoodyak_Rhash);
91
+
92
+ return initialLength - YLen;
93
+ }
94
+
95
+ size_t Xoodyak_EncryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
96
+ {
97
+ size_t initialLength = IOLen;
98
+
99
+ do {
100
+ SnP_Permute(state);
101
+ SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout);
102
+ SnP_OverwriteBytes(state, O, 0, Xoodyak_Rkout);
103
+ SnP_AddByte(state, 0x01, Xoodyak_Rkout);
104
+ I += Xoodyak_Rkout;
105
+ O += Xoodyak_Rkout;
106
+ IOLen -= Xoodyak_Rkout;
107
+ } while (IOLen >= Xoodyak_Rkout);
108
+
109
+ return initialLength - IOLen;
110
+ }
111
+
112
+ size_t Xoodyak_DecryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen)
113
+ {
114
+ size_t initialLength = IOLen;
115
+
116
+ do {
117
+ SnP_Permute(state);
118
+ SnP_ExtractAndAddBytes(state, I, O, 0, Xoodyak_Rkout);
119
+ SnP_AddBytes(state, O, 0, Xoodyak_Rkout);
120
+ SnP_AddByte(state, 0x01, Xoodyak_Rkout);
121
+ I += Xoodyak_Rkout;
122
+ O += Xoodyak_Rkout;
123
+ IOLen -= Xoodyak_Rkout;
124
+ } while (IOLen >= Xoodyak_Rkout);
125
+
126
+ return initialLength - IOLen;
127
+ }
@@ -0,0 +1,43 @@
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 "32-bit reference implementation"
27
+ #define Xoodoo_stateSizeInBytes (3*4*4)
28
+ #define Xoodoo_stateAlignment 4
29
+ #define Xoodoo_HasNround
30
+
31
+ void Xoodoo_StaticInitialize( void );
32
+ void Xoodoo_Initialize(void *state);
33
+ #define Xoodoo_AddByte(argS, argData, argOffset) ((uint8_t*)argS)[argOffset] ^= (argData)
34
+ void Xoodoo_AddBytes(void *state, const uint8_t *data, unsigned int offset, unsigned int length);
35
+ void Xoodoo_OverwriteBytes(void *state, const uint8_t *data, unsigned int offset, unsigned int length);
36
+ void Xoodoo_OverwriteWithZeroes(void *state, unsigned int byteCount);
37
+ void Xoodoo_Permute_Nrounds(void *state, unsigned int nrounds);
38
+ void Xoodoo_Permute_6rounds(void *state);
39
+ void Xoodoo_Permute_12rounds(void *state);
40
+ void Xoodoo_ExtractBytes(const void *state, uint8_t *data, unsigned int offset, unsigned int length);
41
+ void Xoodoo_ExtractAndAddBytes(const void *state, const uint8_t *input, uint8_t *output, unsigned int offset, unsigned int length);
42
+
43
+ #endif