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,125 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Keccak, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
+
7
+ Implementation by the designers, 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 _KeccakHashInterface_h_
18
+ #define _KeccakHashInterface_h_
19
+
20
+ #include "config.h"
21
+ #ifdef XKCP_has_KeccakP1600
22
+
23
+ #include <stdint.h>
24
+ #include <string.h>
25
+ #include "KeccakSponge.h"
26
+
27
+ #ifndef _Keccak_BitTypes_
28
+ #define _Keccak_BitTypes_
29
+ typedef uint8_t BitSequence;
30
+
31
+ typedef size_t BitLength;
32
+ #endif
33
+
34
+ typedef enum { KECCAK_SUCCESS = 0, KECCAK_FAIL = 1, KECCAK_BAD_HASHLEN = 2 } HashReturn;
35
+
36
+ typedef struct {
37
+ KeccakWidth1600_SpongeInstance sponge;
38
+ unsigned int fixedOutputLength;
39
+ unsigned char delimitedSuffix;
40
+ } Keccak_HashInstance;
41
+
42
+ /**
43
+ * Function to initialize the Keccak[r, c] sponge function instance used in sequential hashing mode.
44
+ * @param hashInstance Pointer to the hash instance to be initialized.
45
+ * @param rate The value of the rate r.
46
+ * @param capacity The value of the capacity c.
47
+ * @param hashbitlen The desired number of output bits,
48
+ * or 0 for an arbitrarily-long output.
49
+ * @param delimitedSuffix Bits that will be automatically appended to the end
50
+ * of the input message, as in domain separation.
51
+ * This is a byte containing from 0 to 7 bits
52
+ * formatted like the @a delimitedData parameter of
53
+ * the Keccak_SpongeAbsorbLastFewBits() function.
54
+ * @pre One must have r+c=1600 and the rate a multiple of 8 bits in this implementation.
55
+ * @return KECCAK_SUCCESS if successful, KECCAK_FAIL otherwise.
56
+ */
57
+ HashReturn Keccak_HashInitialize(Keccak_HashInstance *hashInstance, unsigned int rate, unsigned int capacity, unsigned int hashbitlen, unsigned char delimitedSuffix);
58
+
59
+ /** Macro to initialize a SHAKE128 instance as specified in the FIPS 202 standard.
60
+ */
61
+ #define Keccak_HashInitialize_SHAKE128(hashInstance) Keccak_HashInitialize(hashInstance, 1344, 256, 0, 0x1F)
62
+
63
+ /** Macro to initialize a SHAKE256 instance as specified in the FIPS 202 standard.
64
+ */
65
+ #define Keccak_HashInitialize_SHAKE256(hashInstance) Keccak_HashInitialize(hashInstance, 1088, 512, 0, 0x1F)
66
+
67
+ /** Macro to initialize a SHA3-224 instance as specified in the FIPS 202 standard.
68
+ */
69
+ #define Keccak_HashInitialize_SHA3_224(hashInstance) Keccak_HashInitialize(hashInstance, 1152, 448, 224, 0x06)
70
+
71
+ /** Macro to initialize a SHA3-256 instance as specified in the FIPS 202 standard.
72
+ */
73
+ #define Keccak_HashInitialize_SHA3_256(hashInstance) Keccak_HashInitialize(hashInstance, 1088, 512, 256, 0x06)
74
+
75
+ /** Macro to initialize a SHA3-384 instance as specified in the FIPS 202 standard.
76
+ */
77
+ #define Keccak_HashInitialize_SHA3_384(hashInstance) Keccak_HashInitialize(hashInstance, 832, 768, 384, 0x06)
78
+
79
+ /** Macro to initialize a SHA3-512 instance as specified in the FIPS 202 standard.
80
+ */
81
+ #define Keccak_HashInitialize_SHA3_512(hashInstance) Keccak_HashInitialize(hashInstance, 576, 1024, 512, 0x06)
82
+
83
+ /**
84
+ * Function to give input data to be absorbed.
85
+ * @param hashInstance Pointer to the hash instance initialized by Keccak_HashInitialize().
86
+ * @param data Pointer to the input data.
87
+ * When @a databitLen is not a multiple of 8, the last bits of data must be
88
+ * in the least significant bits of the last byte (little-endian convention).
89
+ * In this case, the (8 - @a databitLen mod 8) most significant bits
90
+ * of the last byte are ignored.
91
+ * @param databitLen The number of input bits provided in the input data.
92
+ * @pre In the previous call to Keccak_HashUpdate(), databitlen was a multiple of 8.
93
+ * @return KECCAK_SUCCESS if successful, KECCAK_FAIL otherwise.
94
+ */
95
+ HashReturn Keccak_HashUpdate(Keccak_HashInstance *hashInstance, const BitSequence *data, BitLength databitlen);
96
+
97
+ /**
98
+ * Function to call after all input blocks have been input and to get
99
+ * output bits if the length was specified when calling Keccak_HashInitialize().
100
+ * @param hashInstance Pointer to the hash instance initialized by Keccak_HashInitialize().
101
+ * If @a hashbitlen was not 0 in the call to Keccak_HashInitialize(), the number of
102
+ * output bits is equal to @a hashbitlen.
103
+ * If @a hashbitlen was 0 in the call to Keccak_HashInitialize(), the output bits
104
+ * must be extracted using the Keccak_HashSqueeze() function.
105
+ * @param hashval Pointer to the buffer where to store the output data.
106
+ * @return KECCAK_SUCCESS if successful, KECCAK_FAIL otherwise.
107
+ */
108
+ HashReturn Keccak_HashFinal(Keccak_HashInstance *hashInstance, BitSequence *hashval);
109
+
110
+ /**
111
+ * Function to squeeze output data.
112
+ * @param hashInstance Pointer to the hash instance initialized by Keccak_HashInitialize().
113
+ * @param data Pointer to the buffer where to store the output data.
114
+ * @param databitlen The number of output bits desired (must be a multiple of 8).
115
+ * @pre Keccak_HashFinal() must have been already called.
116
+ * @pre @a databitlen is a multiple of 8.
117
+ * @return KECCAK_SUCCESS if successful, KECCAK_FAIL otherwise.
118
+ */
119
+ HashReturn Keccak_HashSqueeze(Keccak_HashInstance *hashInstance, BitSequence *data, BitLength databitlen);
120
+
121
+ #else
122
+ #error This requires an implementation of Keccak-p[1600]
123
+ #endif
124
+
125
+ #endif
@@ -0,0 +1,48 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Keccak, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
+
7
+ Implementation by Gilles Van Assche, 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 "KeccakSponge.h"
18
+ #include "SimpleFIPS202.h"
19
+
20
+ int SHAKE128(unsigned char *output, size_t outputByteLen, const unsigned char *input, size_t inputByteLen)
21
+ {
22
+ return KeccakWidth1600_Sponge(1344, 256, input, inputByteLen, 0x1F, output, outputByteLen);
23
+ }
24
+
25
+ int SHAKE256(unsigned char *output, size_t outputByteLen, const unsigned char *input, size_t inputByteLen)
26
+ {
27
+ return KeccakWidth1600_Sponge(1088, 512, input, inputByteLen, 0x1F, output, outputByteLen);
28
+ }
29
+
30
+ int SHA3_224(unsigned char *output, const unsigned char *input, size_t inputByteLen)
31
+ {
32
+ return KeccakWidth1600_Sponge(1152, 448, input, inputByteLen, 0x06, output, 224/8);
33
+ }
34
+
35
+ int SHA3_256(unsigned char *output, const unsigned char *input, size_t inputByteLen)
36
+ {
37
+ return KeccakWidth1600_Sponge(1088, 512, input, inputByteLen, 0x06, output, 256/8);
38
+ }
39
+
40
+ int SHA3_384(unsigned char *output, const unsigned char *input, size_t inputByteLen)
41
+ {
42
+ return KeccakWidth1600_Sponge( 832, 768, input, inputByteLen, 0x06, output, 384/8);
43
+ }
44
+
45
+ int SHA3_512(unsigned char *output, const unsigned char *input, size_t inputByteLen)
46
+ {
47
+ return KeccakWidth1600_Sponge(576, 1024, input, inputByteLen, 0x06, output, 512/8);
48
+ }
@@ -0,0 +1,79 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Keccak, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
+
7
+ Implementation by Gilles Van Assche, 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 _SimpleFIPS202_h_
18
+ #define _SimpleFIPS202_h_
19
+
20
+ #include "config.h"
21
+ #ifdef XKCP_has_KeccakP1600
22
+
23
+ #include <string.h>
24
+
25
+ /** Implementation of the SHAKE128 extendable output function (XOF) [FIPS 202].
26
+ * @param output Pointer to the output buffer.
27
+ * @param outputByteLen The desired number of output bytes.
28
+ * @param input Pointer to the input message.
29
+ * @param inputByteLen The length of the input message in bytes.
30
+ * @return 0 if successful, 1 otherwise.
31
+ */
32
+ int SHAKE128(unsigned char *output, size_t outputByteLen, const unsigned char *input, size_t inputByteLen);
33
+
34
+ /** Implementation of the SHAKE256 extendable output function (XOF) [FIPS 202].
35
+ * @param output Pointer to the output buffer.
36
+ * @param outputByteLen The desired number of output bytes.
37
+ * @param input Pointer to the input message.
38
+ * @param inputByteLen The length of the input message in bytes.
39
+ * @return 0 if successful, 1 otherwise.
40
+ */
41
+ int SHAKE256(unsigned char *output, size_t outputByteLen, const unsigned char *input, size_t inputByteLen);
42
+
43
+ /** Implementation of SHA3-224 [FIPS 202].
44
+ * @param output Pointer to the output buffer (28 bytes).
45
+ * @param input Pointer to the input message.
46
+ * @param inputByteLen The length of the input message in bytes.
47
+ * @return 0 if successful, 1 otherwise.
48
+ */
49
+ int SHA3_224(unsigned char *output, const unsigned char *input, size_t inputByteLen);
50
+
51
+ /** Implementation of SHA3-256 [FIPS 202].
52
+ * @param output Pointer to the output buffer (32 bytes).
53
+ * @param input Pointer to the input message.
54
+ * @param inputByteLen The length of the input message in bytes.
55
+ * @return 0 if successful, 1 otherwise.
56
+ */
57
+ int SHA3_256(unsigned char *output, const unsigned char *input, size_t inputByteLen);
58
+
59
+ /** Implementation of SHA3-384 [FIPS 202].
60
+ * @param output Pointer to the output buffer (48 bytes).
61
+ * @param input Pointer to the input message.
62
+ * @param inputByteLen The length of the input message in bytes.
63
+ * @return 0 if successful, 1 otherwise.
64
+ */
65
+ int SHA3_384(unsigned char *output, const unsigned char *input, size_t inputByteLen);
66
+
67
+ /** Implementation of SHA3-512 [FIPS 202].
68
+ * @param output Pointer to the output buffer (64 bytes).
69
+ * @param input Pointer to the input message.
70
+ * @param inputByteLen The length of the input message in bytes.
71
+ * @return 0 if successful, 1 otherwise.
72
+ */
73
+ int SHA3_512(unsigned char *output, const unsigned char *input, size_t inputByteLen);
74
+
75
+ #else
76
+ #error This requires an implementation of Keccak-p[1600]
77
+ #endif
78
+
79
+ #endif
@@ -0,0 +1,81 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Keccak, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
+
7
+ Implementation by the designers, 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 "KeccakDuplex.h"
18
+
19
+ #ifdef KeccakReference
20
+ #include "displayIntermediateValues.h"
21
+ #endif
22
+
23
+ #ifdef XKCP_has_KeccakP200
24
+ #include "KeccakP-200-SnP.h"
25
+
26
+ #define prefix KeccakWidth200
27
+ #define SnP KeccakP200
28
+ #define SnP_width 200
29
+ #define SnP_Permute KeccakP200_Permute_18rounds
30
+ #include "KeccakDuplex.inc"
31
+ #undef prefix
32
+ #undef SnP
33
+ #undef SnP_width
34
+ #undef SnP_Permute
35
+ #undef SnP_FastLoop_Absorb
36
+ #endif
37
+
38
+ #ifdef XKCP_has_KeccakP400
39
+ #include "KeccakP-400-SnP.h"
40
+
41
+ #define prefix KeccakWidth400
42
+ #define SnP KeccakP400
43
+ #define SnP_width 400
44
+ #define SnP_Permute KeccakP400_Permute_20rounds
45
+ #include "KeccakDuplex.inc"
46
+ #undef prefix
47
+ #undef SnP
48
+ #undef SnP_width
49
+ #undef SnP_Permute
50
+ #undef SnP_FastLoop_Absorb
51
+ #endif
52
+
53
+ #ifdef XKCP_has_KeccakP800
54
+ #include "KeccakP-800-SnP.h"
55
+
56
+ #define prefix KeccakWidth800
57
+ #define SnP KeccakP800
58
+ #define SnP_width 800
59
+ #define SnP_Permute KeccakP800_Permute_22rounds
60
+ #include "KeccakDuplex.inc"
61
+ #undef prefix
62
+ #undef SnP
63
+ #undef SnP_width
64
+ #undef SnP_Permute
65
+ #undef SnP_FastLoop_Absorb
66
+ #endif
67
+
68
+ #ifdef XKCP_has_KeccakP1600
69
+ #include "KeccakP-1600-SnP.h"
70
+
71
+ #define prefix KeccakWidth1600
72
+ #define SnP KeccakP1600
73
+ #define SnP_width 1600
74
+ #define SnP_Permute KeccakP1600_Permute_24rounds
75
+ #include "KeccakDuplex.inc"
76
+ #undef prefix
77
+ #undef SnP
78
+ #undef SnP_width
79
+ #undef SnP_Permute
80
+ #undef SnP_FastLoop_Absorb
81
+ #endif
@@ -0,0 +1,73 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Keccak, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
+
7
+ Implementation by the designers, 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 _KeccakDuplex_h_
18
+ #define _KeccakDuplex_h_
19
+
20
+ /* For the documentation, please follow the link: */
21
+ /* #include "KeccakDuplex-documentation.h" */
22
+
23
+ #include <string.h>
24
+ #include "align.h"
25
+ #include "config.h"
26
+
27
+ #define XKCP_DeclareDuplexStructure(prefix, size, alignment) \
28
+ ALIGN(alignment) typedef struct prefix##_DuplexInstanceStruct { \
29
+ unsigned char state[size]; \
30
+ unsigned int rate; \
31
+ unsigned int byteInputIndex; \
32
+ unsigned int byteOutputIndex; \
33
+ } prefix##_DuplexInstance;
34
+
35
+ #define XKCP_DeclareDuplexFunctions(prefix) \
36
+ int prefix##_DuplexInitialize(prefix##_DuplexInstance *duplexInstance, unsigned int rate, unsigned int capacity); \
37
+ int prefix##_Duplexing(prefix##_DuplexInstance *duplexInstance, const unsigned char *sigmaBegin, unsigned int sigmaBeginByteLen, unsigned char *Z, unsigned int ZByteLen, unsigned char delimitedSigmaEnd); \
38
+ int prefix##_DuplexingFeedPartialInput(prefix##_DuplexInstance *duplexInstance, const unsigned char *input, unsigned int inputByteLen); \
39
+ int prefix##_DuplexingFeedZeroes(prefix##_DuplexInstance *duplexInstance, unsigned int inputByteLen); \
40
+ int prefix##_DuplexingOverwritePartialInput(prefix##_DuplexInstance *duplexInstance, const unsigned char *input, unsigned int inputByteLen); \
41
+ int prefix##_DuplexingOverwriteWithZeroes(prefix##_DuplexInstance *duplexInstance, unsigned int inputByteLen); \
42
+ int prefix##_DuplexingGetFurtherOutput(prefix##_DuplexInstance *duplexInstance, unsigned char *out, unsigned int outByteLen); \
43
+ int prefix##_DuplexingGetFurtherOutputAndAdd(prefix##_DuplexInstance *duplexInstance, const unsigned char *input, unsigned char *output, unsigned int outputByteLen);
44
+
45
+ #ifdef XKCP_has_KeccakP200
46
+ #include "KeccakP-200-SnP.h"
47
+ XKCP_DeclareDuplexStructure(KeccakWidth200, KeccakP200_stateSizeInBytes, KeccakP200_stateAlignment)
48
+ XKCP_DeclareDuplexFunctions(KeccakWidth200)
49
+ #define XKCP_has_Duplex_Keccak_width200
50
+ #endif
51
+
52
+ #ifdef XKCP_has_KeccakP400
53
+ #include "KeccakP-400-SnP.h"
54
+ XKCP_DeclareDuplexStructure(KeccakWidth400, KeccakP400_stateSizeInBytes, KeccakP400_stateAlignment)
55
+ XKCP_DeclareDuplexFunctions(KeccakWidth400)
56
+ #define XKCP_has_Duplex_Keccak_width400
57
+ #endif
58
+
59
+ #ifdef XKCP_has_KeccakP800
60
+ #include "KeccakP-800-SnP.h"
61
+ XKCP_DeclareDuplexStructure(KeccakWidth800, KeccakP800_stateSizeInBytes, KeccakP800_stateAlignment)
62
+ XKCP_DeclareDuplexFunctions(KeccakWidth800)
63
+ #define XKCP_has_Duplex_Keccak_width800
64
+ #endif
65
+
66
+ #ifdef XKCP_has_KeccakP1600
67
+ #include "KeccakP-1600-SnP.h"
68
+ XKCP_DeclareDuplexStructure(KeccakWidth1600, KeccakP1600_stateSizeInBytes, KeccakP1600_stateAlignment)
69
+ XKCP_DeclareDuplexFunctions(KeccakWidth1600)
70
+ #define XKCP_has_Duplex_Keccak_width1600
71
+ #endif
72
+
73
+ #endif
@@ -0,0 +1,195 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Keccak, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
+
7
+ Implementation by the designers, 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
+ #define JOIN0(a, b) a ## b
18
+ #define JOIN(a, b) JOIN0(a, b)
19
+
20
+ #define DuplexInstance JOIN(prefix, _DuplexInstance)
21
+ #define DuplexInitialize JOIN(prefix, _DuplexInitialize)
22
+ #define Duplexing JOIN(prefix, _Duplexing)
23
+ #define DuplexingFeedPartialInput JOIN(prefix, _DuplexingFeedPartialInput)
24
+ #define DuplexingFeedZeroes JOIN(prefix, _DuplexingFeedZeroes)
25
+ #define DuplexingOverwritePartialInput JOIN(prefix, _DuplexingOverwritePartialInput)
26
+ #define DuplexingOverwriteWithZeroes JOIN(prefix, _DuplexingOverwriteWithZeroes)
27
+ #define DuplexingGetFurtherOutput JOIN(prefix, _DuplexingGetFurtherOutput)
28
+ #define DuplexingGetFurtherOutputAndAdd JOIN(prefix, _DuplexingGetFurtherOutputAndAdd)
29
+
30
+ #define SnP_stateSizeInBytes JOIN(SnP, _stateSizeInBytes)
31
+ #define SnP_stateAlignment JOIN(SnP, _stateAlignment)
32
+ #define SnP_StaticInitialize JOIN(SnP, _StaticInitialize)
33
+ #define SnP_Initialize JOIN(SnP, _Initialize)
34
+ #define SnP_AddByte JOIN(SnP, _AddByte)
35
+ #define SnP_AddBytes JOIN(SnP, _AddBytes)
36
+ #define SnP_OverwriteBytes JOIN(SnP, _OverwriteBytes)
37
+ #define SnP_OverwriteWithZeroes JOIN(SnP, _OverwriteWithZeroes)
38
+ #define SnP_ExtractBytes JOIN(SnP, _ExtractBytes)
39
+ #define SnP_ExtractAndAddBytes JOIN(SnP, _ExtractAndAddBytes)
40
+
41
+ int DuplexInitialize(DuplexInstance *instance, unsigned int rate, unsigned int capacity)
42
+ {
43
+ if (rate+capacity != SnP_width)
44
+ return 1;
45
+ if ((rate <= 2) || (rate > SnP_width))
46
+ return 1;
47
+ SnP_StaticInitialize();
48
+ instance->rate = rate;
49
+ SnP_Initialize(instance->state);
50
+ instance->byteInputIndex = 0;
51
+ instance->byteOutputIndex = (instance->rate+7)/8;
52
+ return 0;
53
+ }
54
+
55
+ int Duplexing(DuplexInstance *instance, const unsigned char *sigmaBegin, unsigned int sigmaBeginByteLen, unsigned char *Z, unsigned int ZByteLen, unsigned char delimitedSigmaEnd)
56
+ {
57
+ const unsigned int rho_max = instance->rate - 2;
58
+
59
+ if (delimitedSigmaEnd == 0)
60
+ return 1;
61
+ if ((instance->byteInputIndex+sigmaBeginByteLen)*8 > rho_max)
62
+ return 1;
63
+ if (rho_max - sigmaBeginByteLen*8 < 7) {
64
+ unsigned int maxBitsInDelimitedSigmaEnd = rho_max - sigmaBeginByteLen*8;
65
+ if (delimitedSigmaEnd >= (1 << (maxBitsInDelimitedSigmaEnd+1)))
66
+ return 1;
67
+ }
68
+ if (ZByteLen > (instance->rate+7)/8)
69
+ return 1; /* The output length must not be greater than the rate (rounded up to a byte) */
70
+
71
+ SnP_AddBytes(instance->state, sigmaBegin, instance->byteInputIndex, sigmaBeginByteLen);
72
+ #ifdef KeccakReference
73
+ {
74
+ unsigned char block[SnP_width/8];
75
+ memcpy(block, sigmaBegin, sigmaBeginByteLen);
76
+ block[sigmaBeginByteLen] = delimitedSigmaEnd;
77
+ memset(block+sigmaBeginByteLen+1, 0, sizeof(block)-sigmaBeginByteLen-1);
78
+ block[(instance->rate-1)/8] |= 1 << ((instance->rate-1) % 8);
79
+ displayBytes(1, "Block to be absorbed (after padding)", block, (instance->rate+7)/8);
80
+ }
81
+ #endif
82
+
83
+ /* Last few bits, whose delimiter coincides with first bit of padding */
84
+ SnP_AddByte(instance->state, delimitedSigmaEnd, instance->byteInputIndex+sigmaBeginByteLen);
85
+ /* Second bit of padding */
86
+ SnP_AddByte(instance->state, (unsigned char)1 << ((instance->rate - 1)%8), (instance->rate - 1)/8);
87
+ SnP_Permute(instance->state);
88
+ SnP_ExtractBytes(instance->state, Z, 0, ZByteLen);
89
+
90
+ if (ZByteLen*8 > instance->rate) {
91
+ unsigned char mask = (unsigned char)(1 << (instance->rate % 8)) - 1;
92
+ Z[ZByteLen-1] &= mask;
93
+ }
94
+
95
+ instance->byteInputIndex = 0;
96
+ instance->byteOutputIndex = ZByteLen;
97
+
98
+ return 0;
99
+ }
100
+
101
+ int DuplexingFeedPartialInput(DuplexInstance *instance, const unsigned char *input, unsigned int inputByteLen)
102
+ {
103
+ const unsigned int rho_max = instance->rate - 2;
104
+
105
+ if ((instance->byteInputIndex+inputByteLen)*8 > rho_max)
106
+ return 1;
107
+
108
+ SnP_AddBytes(instance->state, input, instance->byteInputIndex, inputByteLen);
109
+ instance->byteInputIndex += inputByteLen;
110
+ return 0;
111
+ }
112
+
113
+ int DuplexingFeedZeroes(DuplexInstance *instance, unsigned int inputByteLen)
114
+ {
115
+ const unsigned int rho_max = instance->rate - 2;
116
+
117
+ if ((instance->byteInputIndex+inputByteLen)*8 > rho_max)
118
+ return 1;
119
+
120
+ instance->byteInputIndex += inputByteLen;
121
+ return 0;
122
+ }
123
+
124
+ int DuplexingOverwritePartialInput(DuplexInstance *instance, const unsigned char *input, unsigned int inputByteLen)
125
+ {
126
+ const unsigned int rho_max = instance->rate - 2;
127
+
128
+ if ((instance->byteInputIndex+inputByteLen)*8 > rho_max)
129
+ return 1;
130
+
131
+ SnP_OverwriteBytes(instance->state, input, instance->byteInputIndex, inputByteLen);
132
+ instance->byteInputIndex += inputByteLen;
133
+ return 0;
134
+ }
135
+
136
+ int DuplexingOverwriteWithZeroes(DuplexInstance *instance, unsigned int inputByteLen)
137
+ {
138
+ const unsigned int rho_max = instance->rate - 2;
139
+
140
+ if ((instance->byteInputIndex != 0) || (inputByteLen*8 > rho_max))
141
+ return 1;
142
+
143
+ SnP_OverwriteWithZeroes(instance->state, inputByteLen);
144
+ instance->byteInputIndex = inputByteLen;
145
+
146
+ return 0;
147
+ }
148
+
149
+ int DuplexingGetFurtherOutput(DuplexInstance *instance, unsigned char *output, unsigned int outputByteLen)
150
+ {
151
+ if ((outputByteLen+instance->byteOutputIndex) > (instance->rate+7)/8)
152
+ return 1; /* The output length must not be greater than the rate (rounded up to a byte) */
153
+
154
+ SnP_ExtractBytes(instance->state, output, instance->byteOutputIndex, outputByteLen);
155
+ instance->byteOutputIndex += outputByteLen;
156
+ if (instance->byteOutputIndex*8 > instance->rate) {
157
+ unsigned char mask = (1 << (instance->rate % 8)) - 1;
158
+ output[outputByteLen-1] &= mask;
159
+ }
160
+ return 0;
161
+ }
162
+
163
+ int DuplexingGetFurtherOutputAndAdd(DuplexInstance *instance, const unsigned char *input, unsigned char *output, unsigned int outputByteLen)
164
+ {
165
+ if ((outputByteLen+instance->byteOutputIndex) > (instance->rate+7)/8)
166
+ return 1; /* The output length must not be greater than the rate (rounded up to a byte) */
167
+
168
+ SnP_ExtractAndAddBytes(instance->state, input, output, instance->byteOutputIndex, outputByteLen);
169
+ instance->byteOutputIndex += outputByteLen;
170
+ if (instance->byteOutputIndex*8 > instance->rate) {
171
+ unsigned char mask = (1 << (instance->rate % 8)) - 1;
172
+ output[outputByteLen-1] &= mask;
173
+ }
174
+ return 0;
175
+ }
176
+
177
+ #undef DuplexInstance
178
+ #undef DuplexInitialize
179
+ #undef Duplexing
180
+ #undef DuplexingFeedPartialInput
181
+ #undef DuplexingFeedZeroes
182
+ #undef DuplexingOverwritePartialInput
183
+ #undef DuplexingOverwriteWithZeroes
184
+ #undef DuplexingGetFurtherOutput
185
+ #undef DuplexingGetFurtherOutputAndAdd
186
+ #undef SnP_stateSizeInBytes
187
+ #undef SnP_stateAlignment
188
+ #undef SnP_StaticInitialize
189
+ #undef SnP_Initialize
190
+ #undef SnP_AddByte
191
+ #undef SnP_AddBytes
192
+ #undef SnP_OverwriteBytes
193
+ #undef SnP_OverwriteWithZeroes
194
+ #undef SnP_ExtractBytes
195
+ #undef SnP_ExtractAndAddBytes