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,247 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Kravatte, designed by Guido Bertoni, Joan Daemen, Seth Hoffert, Michaël Peeters, 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 _KravatteModes_h_
18
+ #define _KravatteModes_h_
19
+
20
+ #include "config.h"
21
+ #ifdef XKCP_has_KeccakP1600
22
+
23
+ #include <stddef.h>
24
+ #include <stdint.h>
25
+ #include "align.h"
26
+ #include "Kravatte.h"
27
+
28
+ /**
29
+ * Kravatte-SANE Tag Length in bytes.
30
+ */
31
+ #define Kravatte_SANE_TagLength 16
32
+
33
+ /**
34
+ * Definition of the constant l.
35
+ */
36
+ #define Kravatte_SANE_l 8
37
+
38
+ typedef struct {
39
+ Kravatte_Instance kravatte;
40
+ unsigned int e;
41
+ } Kravatte_SANE_Instance;
42
+
43
+
44
+ /**
45
+ * Function to initialize a Kravatte SANE instance with given key and nonce.
46
+ * @param kvInstance Pointer to the instance to be initialized.
47
+ * @param Key Pointer to the key (K).
48
+ * @param KeyBitLen The length of the key in bits.
49
+ * @param Nonce Pointer to the nonce (N).
50
+ * @param NonceBitLen The length of the nonce in bits.
51
+ * @param tag The buffer where to store the tag.
52
+ * This buffer must be minimum Kravatte_SANE_TagLength bytes long.
53
+ * @return 0 if successful, 1 otherwise.
54
+ */
55
+ int Kravatte_SANE_Initialize(Kravatte_SANE_Instance *kvInstance, const BitSequence *Key, BitLength KeyBitLen,
56
+ const BitSequence *Nonce, BitLength NonceBitLen, unsigned char *tag);
57
+
58
+ /**
59
+ * Function to wrap plaintext into ciphertext.
60
+ * @param kvInstance Pointer to the instance initialized by Kravatte_SANE_Initialize().
61
+ * @param plaintext Pointer to plaintext data to wrap.
62
+ * @param ciphertext Pointer to buffer where the full wrapped data will be stored.
63
+ * The ciphertext buffer must not overlap plaintext.
64
+ * @param dataBitLen The size of the plaintext/ciphertext data.
65
+ * @param AD Pointer to the Associated Data.
66
+ * @param ADBitLen The number of bytes provided in the Associated Data.
67
+ * @param tag The buffer where to store the tag.
68
+ * This buffer must be minimum Kravatte_SANE_TagLength bytes long.
69
+ * @return 0 if successful, 1 otherwise.
70
+ */
71
+ int Kravatte_SANE_Wrap(Kravatte_SANE_Instance *kvInstance, const BitSequence *plaintext, BitSequence *ciphertext, BitLength dataBitLen,
72
+ const BitSequence *AD, BitLength ADBitLen, unsigned char *tag);
73
+
74
+ /**
75
+ * Function to unwrap ciphertext into plaintext.
76
+ * @param kvInstance Pointer to the instance initialized by Kravatte_SANE_Initialize().
77
+ * @param ciphertext Pointer to ciphertext data to unwrap.
78
+ * @param plaintext Pointer to buffer where the full unwrapped data will be stored.
79
+ * The plaintext buffer must not overlap ciphertext.
80
+ * @param dataBitLen The size of the ciphertext/plaintext data.
81
+ * @param AD Pointer to the Associated Data.
82
+ * @param ADBitLen The number of bytes provided in the Associated Data.
83
+ * @param tag The buffer where to read the tag to check (when lastFlag is set).
84
+ * This buffer must be minimum Kravatte_SANE_TagLength bytes long.
85
+ * @return 0 if successful, 1 otherwise.
86
+ */
87
+ int Kravatte_SANE_Unwrap(Kravatte_SANE_Instance *kvInstance, const BitSequence *ciphertext, BitSequence *plaintext, BitLength dataBitLen,
88
+ const BitSequence *AD, BitLength ADBitLen, const unsigned char *tag);
89
+
90
+ /* ------------------------------------------------------------------------- */
91
+
92
+ /**
93
+ * Kravatte-SANSE Tag Length in bytes.
94
+ */
95
+ #define Kravatte_SANSE_TagLength 32
96
+
97
+ typedef struct {
98
+ Kravatte_Instance kravatte;
99
+ unsigned int e;
100
+ } Kravatte_SANSE_Instance;
101
+
102
+
103
+ /**
104
+ * Function to initialize a Kravatte SANSE instance with given key and nonce.
105
+ * @param kvInstance Pointer to the instance to be initialized.
106
+ * @param Key Pointer to the key (K).
107
+ * @param KeyBitLen The length of the key in bits.
108
+ * @return 0 if successful, 1 otherwise.
109
+ */
110
+ int Kravatte_SANSE_Initialize(Kravatte_SANSE_Instance *kvInstance, const BitSequence *Key, BitLength KeyBitLen);
111
+
112
+ /**
113
+ * Function to wrap plaintext into ciphertext.
114
+ * @param kvInstance Pointer to the instance initialized by Kravatte_SANSE_Initialize().
115
+ * @param plaintext Pointer to plaintext data to wrap.
116
+ * @param ciphertext Pointer to buffer where the full wrapped data will be stored.
117
+ * The ciphertext buffer must not overlap plaintext.
118
+ * @param dataBitLen The size of the plaintext/ciphertext data.
119
+ * @param AD Pointer to the Associated Data.
120
+ * @param ADBitLen The number of bytes provided in the Associated Data.
121
+ * @param tag The buffer where to store the tag.
122
+ * This buffer must be minimum Kravatte_SANSE_TagLength bytes long.
123
+ * @return 0 if successful, 1 otherwise.
124
+ */
125
+ int Kravatte_SANSE_Wrap(Kravatte_SANSE_Instance *kvInstance, const BitSequence *plaintext, BitSequence *ciphertext, BitLength dataBitLen,
126
+ const BitSequence *AD, BitLength ADBitLen, unsigned char *tag);
127
+
128
+ /**
129
+ * Function to unwrap ciphertext into plaintext.
130
+ * @param kvInstance Pointer to the instance initialized by Kravatte_SANSE_Initialize().
131
+ * @param ciphertext Pointer to ciphertext data to unwrap.
132
+ * @param plaintext Pointer to buffer where the full unwrapped data will be stored.
133
+ * The plaintext buffer must not overlap ciphertext.
134
+ * @param dataBitLen The size of the ciphertext/plaintext data.
135
+ * @param AD Pointer to the Associated Data.
136
+ * @param ADBitLen The number of bytes provided in the Associated Data.
137
+ * @param tag The buffer where to read the tag to check (when lastFlag is set).
138
+ * This buffer must be minimum Kravatte_SANSE_TagLength bytes long.
139
+ * @return 0 if successful, 1 otherwise.
140
+ */
141
+ int Kravatte_SANSE_Unwrap(Kravatte_SANSE_Instance *kvInstance, const BitSequence *ciphertext, BitSequence *plaintext, BitLength dataBitLen,
142
+ const BitSequence *AD, BitLength ADBitLen, const unsigned char *tag);
143
+
144
+ /* ------------------------------------------------------------------------- */
145
+
146
+ /**
147
+ * Definition of the constant l, used to split the input into two parts.
148
+ * The left part of the input will be a multiple of l bits.
149
+ */
150
+ #define Kravatte_WBC_l 8
151
+
152
+ /**
153
+ * Definition of the constant b block length.
154
+ */
155
+ #define Kravatte_WBC_b (SnP_widthInBytes*8)
156
+
157
+ /**
158
+ * Macro to initialize a Kravatte_WBC instance with given key.
159
+ * @param kvw Pointer to the instance to be initialized.
160
+ * @param Key Pointer to the key (K).
161
+ * @param KeyBitLen The length of the key in bits.
162
+ * @return 0 if successful, 1 otherwise.
163
+ */
164
+ #define Kravatte_WBC_Initialize(kvw, Key, KeyBitLen) Kravatte_MaskDerivation(kvw, Key, KeyBitLen)
165
+
166
+ /**
167
+ * Function to encipher plaintext into ciphertext.
168
+ * @param kvInstance Pointer to the instance initialized by Kravatte_WBC_Initialize().
169
+ * @param plaintext Pointer to plaintext data to encipher.
170
+ * @param ciphertext Pointer to buffer where the enciphered data will be stored.
171
+ * The ciphertext buffer must not overlap plaintext.
172
+ * @param dataBitLen The size in bits of the plaintext/ciphertext data.
173
+ * @param W Pointer to the tweak W.
174
+ * @param WBitLen The number of bits provided in the tweak.
175
+ * @return 0 if successful, 1 otherwise.
176
+ */
177
+ int Kravatte_WBC_Encipher(Kravatte_Instance *kvwInstance, const BitSequence *plaintext, BitSequence *ciphertext, BitLength dataBitLen,
178
+ const BitSequence *W, BitLength WBitLen);
179
+
180
+ /**
181
+ * Function to decipher ciphertext into plaintext.
182
+ * @param kvInstance Pointer to the instance initialized by Kravatte_WBC_Initialize().
183
+ * @param ciphertext Pointer to ciphertext data to decipher.
184
+ * @param plaintext Pointer to buffer where the deciphered data will be stored.
185
+ * The plaintext buffer must not overlap ciphertext.
186
+ * @param dataBitLen The size in bits of the plaintext/ciphertext data.
187
+ * @param W Pointer to the tweak W.
188
+ * @param WBitLen The number of bits provided in the tweak.
189
+ * @return 0 if successful, 1 otherwise.
190
+ */
191
+ int Kravatte_WBC_Decipher(Kravatte_Instance *kvwInstance, const BitSequence *ciphertext, BitSequence *plaintext, BitLength dataBitLen,
192
+ const BitSequence *W, BitLength WBitLen);
193
+
194
+ /* ------------------------------------------------------------------------- */
195
+
196
+ /**
197
+ * Definition of the constant t, expansion length (in bits).
198
+ */
199
+ #define Kravatte_WBCAE_t 128
200
+
201
+ /**
202
+ * Macro to initialize a Kravatte_WBC instance with given key.
203
+ * @param kvw Pointer to the instance to be initialized.
204
+ * @param Key Pointer to the key (K).
205
+ * @param KeyBitLen The length of the key in bits.
206
+ * @return 0 if successful, 1 otherwise.
207
+ */
208
+ #define Kravatte_WBCAE_Initialize(kvw, Key, KeyBitLen) Kravatte_MaskDerivation(kvw, Key, KeyBitLen)
209
+
210
+ /**
211
+ * Function to encipher plaintext into ciphertext.
212
+ * @param kvInstance Pointer to the instance initialized by Kravatte_WBC_Initialize().
213
+ * @param plaintext Pointer to plaintext data to encipher.
214
+ * The last ::Kravatte_WBCAE_t bits of the buffer will be overwritten with zeros.
215
+ * @param ciphertext Pointer to buffer where the enciphered data will be stored.
216
+ * The ciphertext buffer must not overlap plaintext.
217
+ * Ciphertext will be ::Kravatte_WBCAE_t bits longer than plaintext.
218
+ * @param dataBitLen The size in bits of the plaintext data.
219
+ * Plaintext and ciphertext buffers must be ::Kravatte_WBCAE_t bits longer than dataBitLen.
220
+ * @param AD Pointer to the metadata AD.
221
+ * @param ADBitLen The number of bits provided in the metadata.
222
+ * @return 0 if successful, 1 otherwise.
223
+ */
224
+ int Kravatte_WBCAE_Encipher(Kravatte_Instance *kvwInstance, BitSequence *plaintext, BitSequence *ciphertext, BitLength dataBitLen,
225
+ const BitSequence *AD, BitLength ADBitLen);
226
+
227
+ /**
228
+ * Function to decipher ciphertext into plaintext.
229
+ * @param kvInstance Pointer to the instance initialized by Kravatte_WBC_Initialize().
230
+ * @param ciphertext Pointer to ciphertext data to decipher.
231
+ * Ciphertext is ::Kravatte_WBCAE_t bits longer than plaintext.
232
+ * @param plaintext Pointer to buffer where the deciphered data will be stored.
233
+ * The plaintext buffer must not overlap ciphertext.
234
+ * @param dataBitLen The size in bits of the plaintext data.
235
+ * Ciphertext and plaintext buffers must be ::Kravatte_WBCAE_t bits longer than dataBitLen.
236
+ * @param AD Pointer to the metadata AD.
237
+ * @param ADBitLen The number of bits provided in the metadata.
238
+ * @return 0 if successful, 1 otherwise.
239
+ */
240
+ int Kravatte_WBCAE_Decipher(Kravatte_Instance *kvwInstance, const BitSequence *ciphertext, BitSequence *plaintext, BitLength dataBitLen,
241
+ const BitSequence *AD, BitLength ADBitLen);
242
+
243
+ #else
244
+ #error This requires an implementation of Keccak-p[1600]
245
+ #endif
246
+
247
+ #endif
@@ -0,0 +1,66 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Xoodyak, designed by Joan Daemen, Seth Hoffert, Michaël Peeters, 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 _Cyclist_h_
18
+ #define _Cyclist_h_
19
+
20
+ #include <stdint.h>
21
+ #include "align.h"
22
+
23
+ #define Cyclist_ModeHash 1
24
+ #define Cyclist_ModeKeyed 2
25
+
26
+ #define Cyclist_PhaseDown 1
27
+ #define Cyclist_PhaseUp 2
28
+
29
+ #ifdef OUTPUT
30
+
31
+ #include <stdio.h>
32
+
33
+ #define KCP_DeclareCyclistStructure(prefix, size, alignment) \
34
+ ALIGN(alignment) typedef struct prefix##_CyclistInstanceStruct { \
35
+ uint8_t state[size]; \
36
+ uint8_t stateShadow[size]; \
37
+ FILE *file; \
38
+ unsigned int phase; \
39
+ unsigned int mode; \
40
+ unsigned int Rabsorb; \
41
+ unsigned int Rsqueeze; \
42
+ } prefix##_Instance;
43
+
44
+ #else
45
+
46
+ #define KCP_DeclareCyclistStructure(prefix, size, alignment) \
47
+ ALIGN(alignment) typedef struct prefix##_CyclistInstanceStruct { \
48
+ uint8_t state[size]; \
49
+ unsigned int phase; \
50
+ unsigned int mode; \
51
+ unsigned int Rabsorb; \
52
+ unsigned int Rsqueeze; \
53
+ } prefix##_Instance;
54
+
55
+ #endif
56
+
57
+ #define KCP_DeclareCyclistFunctions(prefix) \
58
+ void prefix##_Initialize(prefix##_Instance *instance, const uint8_t *K, size_t KLen, const uint8_t *ID, size_t IDLen, const uint8_t *counter, size_t counterLen); \
59
+ void prefix##_Absorb(prefix##_Instance *instance, const uint8_t *X, size_t XLen); \
60
+ void prefix##_Encrypt(prefix##_Instance *instance, const uint8_t *P, uint8_t *C, size_t PLen); \
61
+ void prefix##_Decrypt(prefix##_Instance *instance, const uint8_t *C, uint8_t *P, size_t CLen); \
62
+ void prefix##_Squeeze(prefix##_Instance *instance, uint8_t *Y, size_t YLen); \
63
+ void prefix##_SqueezeKey(prefix##_Instance *instance, uint8_t *K, size_t KLen); \
64
+ void prefix##_Ratchet(prefix##_Instance *instance);
65
+
66
+ #endif
@@ -0,0 +1,336 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Xoodyak, designed by Joan Daemen, Seth Hoffert, Michaël Peeters, 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
+ #define JOIN0(a, b) a ## b
18
+ #define JOIN(a, b) JOIN0(a, b)
19
+
20
+ #define SnP_StaticInitialize JOIN(SnP, _StaticInitialize)
21
+ #define SnP_Initialize JOIN(SnP, _Initialize)
22
+ #define SnP_AddBytes JOIN(SnP, _AddBytes)
23
+ #define SnP_AddByte JOIN(SnP, _AddByte)
24
+ #define SnP_OverwriteBytes JOIN(SnP, _OverwriteBytes)
25
+ #define SnP_ExtractBytes JOIN(SnP, _ExtractBytes)
26
+ #define SnP_ExtractAndAddBytes JOIN(SnP, _ExtractAndAddBytes)
27
+
28
+ #define Cyclist_Instance JOIN(prefix, _Instance)
29
+ #define Cyclist_Initialize JOIN(prefix, _Initialize)
30
+ #define Cyclist_Absorb JOIN(prefix, _Absorb)
31
+ #define Cyclist_Encrypt JOIN(prefix, _Encrypt)
32
+ #define Cyclist_Decrypt JOIN(prefix, _Decrypt)
33
+ #define Cyclist_Squeeze JOIN(prefix, _Squeeze)
34
+ #define Cyclist_SqueezeKey JOIN(prefix, _SqueezeKey)
35
+ #define Cyclist_Ratchet JOIN(prefix, _Ratchet)
36
+
37
+ #define Cyclist_AbsorbAny JOIN(prefix, _AbsorbAny)
38
+ #define Cyclist_AbsorbKey JOIN(prefix, _AbsorbKey)
39
+ #define Cyclist_SqueezeAny JOIN(prefix, _SqueezeAny)
40
+ #define Cyclist_Down JOIN(prefix, _Down)
41
+ #define Cyclist_Up JOIN(prefix, _Up)
42
+ #define Cyclist_Crypt JOIN(prefix, _Crypt)
43
+
44
+ #define Cyclist_f_bPrime JOIN(prefix, _f_bPrime)
45
+ #define Cyclist_Rhash JOIN(prefix, _Rhash)
46
+ #define Cyclist_Rkin JOIN(prefix, _Rkin)
47
+ #define Cyclist_Rkout JOIN(prefix, _Rkout)
48
+ #define Cyclist_lRatchet JOIN(prefix, _lRatchet)
49
+
50
+ #if defined(CyclistFullBlocks_supported)
51
+ #define Cyclist_AbsorbKeyedFullBlocks JOIN(prefix, _AbsorbKeyedFullBlocks)
52
+ #define Cyclist_AbsorbHashFullBlocks JOIN(prefix, _AbsorbHashFullBlocks)
53
+ #define Cyclist_SqueezeKeyedFullBlocks JOIN(prefix, _SqueezeKeyedFullBlocks)
54
+ #define Cyclist_SqueezeHashFullBlocks JOIN(prefix, _SqueezeHashFullBlocks)
55
+ #define Cyclist_EncryptFullBlocks JOIN(prefix, _EncryptFullBlocks)
56
+ #define Cyclist_DecryptFullBlocks JOIN(prefix, _DecryptFullBlocks)
57
+ #endif
58
+
59
+ /* ------- Cyclist internal interfaces ------- */
60
+
61
+ static void Cyclist_Down(Cyclist_Instance *instance, const uint8_t *Xi, unsigned int XiLen, uint8_t Cd)
62
+ {
63
+ SnP_AddBytes(instance->state, Xi, 0, XiLen);
64
+ SnP_AddByte(instance->state, 0x01, XiLen);
65
+ SnP_AddByte(instance->state, (instance->mode == Cyclist_ModeHash) ? (Cd & 0x01) : Cd, Cyclist_f_bPrime - 1);
66
+ instance->phase = Cyclist_PhaseDown;
67
+
68
+ }
69
+
70
+ static void Cyclist_Up(Cyclist_Instance *instance, uint8_t *Yi, unsigned int YiLen, uint8_t Cu)
71
+ {
72
+ #if defined(OUTPUT)
73
+ uint8_t s[Cyclist_f_bPrime];
74
+ #endif
75
+
76
+ if (instance->mode != Cyclist_ModeHash) {
77
+ SnP_AddByte(instance->state, Cu, Cyclist_f_bPrime - 1);
78
+ }
79
+ #if defined(OUTPUT)
80
+ if (instance->file != NULL) {
81
+ SnP_ExtractBytes( instance->stateShadow, s, 0, Cyclist_f_bPrime );
82
+ SnP_ExtractAndAddBytes( instance->state, s, s, 0, Cyclist_f_bPrime );
83
+ }
84
+ #endif
85
+ SnP_Permute( instance->state );
86
+ #if defined(OUTPUT)
87
+ if (instance->file != NULL) {
88
+ memcpy( instance->stateShadow, instance->state, sizeof(instance->state) );
89
+ fprintf( instance->file, "Data XORed" );
90
+ displayByteString( instance->file, "", s, Cyclist_f_bPrime );
91
+ SnP_ExtractBytes( instance->stateShadow, s, 0, Cyclist_f_bPrime );
92
+ fprintf( instance->file, "After f() ");
93
+ displayByteString( instance->file, "", s, Cyclist_f_bPrime );
94
+ }
95
+ #endif
96
+ instance->phase = Cyclist_PhaseUp;
97
+ SnP_ExtractBytes( instance->state, Yi, 0, YiLen );
98
+ }
99
+
100
+ static void Cyclist_AbsorbAny(Cyclist_Instance *instance, const uint8_t *X, size_t XLen, unsigned int r, uint8_t Cd)
101
+ {
102
+ unsigned int splitLen;
103
+
104
+ do {
105
+ if (instance->phase != Cyclist_PhaseUp) {
106
+ Cyclist_Up(instance, NULL, 0, 0);
107
+ }
108
+ splitLen = (unsigned int)MyMin(XLen, r);
109
+ Cyclist_Down(instance, X, splitLen, Cd);
110
+ Cd = 0;
111
+ X += splitLen;
112
+ XLen -= splitLen;
113
+ #if defined(CyclistFullBlocks_supported)
114
+ if ((r == Cyclist_Rkin) && (XLen >= Cyclist_Rkin)) {
115
+ size_t lenProcessed = Cyclist_AbsorbKeyedFullBlocks(instance->state, X, XLen);
116
+ X += lenProcessed;
117
+ XLen -= lenProcessed;
118
+ }
119
+ else if ((r == Cyclist_Rhash) && (XLen >= Cyclist_Rhash)) {
120
+ size_t lenProcessed = Cyclist_AbsorbHashFullBlocks(instance->state, X, XLen);
121
+ X += lenProcessed;
122
+ XLen -= lenProcessed;
123
+ }
124
+ #endif
125
+ } while ( XLen != 0 );
126
+ }
127
+
128
+ static void Cyclist_AbsorbKey(Cyclist_Instance *instance, const uint8_t *K, size_t KLen, const uint8_t *ID, size_t IDLen, const uint8_t *counter, size_t counterLen)
129
+ {
130
+ uint8_t KID[Cyclist_Rkin];
131
+
132
+ #if DEBUG
133
+ assert(instance->mode == Cyclist_ModeHash);
134
+ assert((KLen + IDLen) <= (Cyclist_Rkin - 1));
135
+ #endif
136
+ instance->mode = Cyclist_ModeKeyed;
137
+ instance->Rabsorb = Cyclist_Rkin;
138
+ instance->Rsqueeze = Cyclist_Rkout;
139
+ if (KLen != 0) {
140
+ memcpy(KID, K, KLen);
141
+ memcpy(KID + KLen, ID, IDLen);
142
+ KID[KLen + IDLen] = (uint8_t)IDLen;
143
+ Cyclist_AbsorbAny(instance, KID, KLen + IDLen + 1, instance->Rabsorb, 0x02);
144
+ if (counterLen != 0) {
145
+ Cyclist_AbsorbAny(instance, counter, counterLen, 1, 0x00);
146
+ }
147
+ }
148
+ }
149
+
150
+ static void Cyclist_SqueezeAny(Cyclist_Instance *instance, uint8_t *Y, size_t YLen, uint8_t Cu)
151
+ {
152
+ unsigned int len;
153
+
154
+ len = (unsigned int)MyMin(YLen, instance->Rsqueeze );
155
+ Cyclist_Up(instance, Y, len, Cu);
156
+ Y += len;
157
+ YLen -= len;
158
+ while (YLen != 0) {
159
+ #if defined(CyclistFullBlocks_supported)
160
+ if ((instance->mode == Cyclist_ModeKeyed) && (YLen >= Cyclist_Rkin)) {
161
+ size_t lenProcessed = Cyclist_SqueezeKeyedFullBlocks(instance->state, Y, YLen);
162
+ Y += lenProcessed;
163
+ YLen -= lenProcessed;
164
+ }
165
+ else if ((instance->mode == Cyclist_ModeHash) && (YLen >= Cyclist_Rhash)) {
166
+ size_t lenProcessed = Cyclist_SqueezeHashFullBlocks(instance->state, Y, YLen);
167
+ Y += lenProcessed;
168
+ YLen -= lenProcessed;
169
+ }
170
+ else
171
+ #endif
172
+ {
173
+ Cyclist_Down(instance, NULL, 0, 0);
174
+ len = (unsigned int)MyMin(YLen, instance->Rsqueeze );
175
+ Cyclist_Up(instance, Y, len, 0);
176
+ Y += len;
177
+ YLen -= len;
178
+ }
179
+ }
180
+ }
181
+
182
+ static void Cyclist_Crypt(Cyclist_Instance *instance, const uint8_t *I, uint8_t *O, size_t IOLen, int decrypt)
183
+ {
184
+ unsigned int splitLen;
185
+ uint8_t P[Cyclist_Rkout];
186
+ uint8_t Cu = 0x80;
187
+
188
+ do {
189
+ if (decrypt != 0) {
190
+ #if defined(CyclistFullBlocks_supported)
191
+ if ((Cu == 0) && (IOLen >= Cyclist_Rkout)) {
192
+ size_t lenProcessed = Cyclist_DecryptFullBlocks(instance->state, I, O, IOLen);
193
+ I += lenProcessed;
194
+ O += lenProcessed;
195
+ IOLen -= lenProcessed;
196
+ }
197
+ else
198
+ #endif
199
+ {
200
+ splitLen = (unsigned int)MyMin(IOLen, Cyclist_Rkout); /* use Rkout instead of Rsqueeze, this function is only called in keyed mode */
201
+ Cyclist_Up(instance, NULL, 0, Cu); /* Up without extract */
202
+ SnP_ExtractAndAddBytes(instance->state, I, O, 0, splitLen); /* Extract from Up and Add */
203
+ Cyclist_Down(instance, O, splitLen, 0x00);
204
+ I += splitLen;
205
+ O += splitLen;
206
+ IOLen -= splitLen;
207
+ }
208
+ }
209
+ else {
210
+ #if defined(CyclistFullBlocks_supported)
211
+ if ((Cu == 0) && (IOLen >= Cyclist_Rkout)) {
212
+ size_t lenProcessed = Cyclist_EncryptFullBlocks(instance->state, I, O, IOLen);
213
+ I += lenProcessed;
214
+ O += lenProcessed;
215
+ IOLen -= lenProcessed;
216
+ }
217
+ else
218
+ #endif
219
+ {
220
+ splitLen = (unsigned int)MyMin(IOLen, Cyclist_Rkout); /* use Rkout instead of Rsqueeze, this function is only called in keyed mode */
221
+ memcpy(P, I, splitLen);
222
+ Cyclist_Up(instance, NULL, 0, Cu); /* Up without extract */
223
+ SnP_ExtractAndAddBytes(instance->state, I, O, 0, splitLen); /* Extract from Up and Add */
224
+ Cyclist_Down(instance, P, splitLen, 0x00);
225
+ I += splitLen;
226
+ O += splitLen;
227
+ IOLen -= splitLen;
228
+ }
229
+ }
230
+ Cu = 0x00;
231
+ } while ( IOLen != 0 );
232
+ }
233
+
234
+ /* ------- Cyclist interfaces ------- */
235
+
236
+ void Cyclist_Initialize(Cyclist_Instance *instance, const uint8_t *K, size_t KLen, const uint8_t *ID, size_t IDLen, const uint8_t *counter, size_t counterLen)
237
+ {
238
+ SnP_StaticInitialize();
239
+ SnP_Initialize(instance->state);
240
+ instance->phase = Cyclist_PhaseUp;
241
+ instance->mode = Cyclist_ModeHash;
242
+ instance->Rabsorb = Cyclist_Rhash;
243
+ instance->Rsqueeze = Cyclist_Rhash;
244
+ #ifdef OUTPUT
245
+ instance->file = 0;
246
+ SnP_Initialize( instance->stateShadow );
247
+ #endif
248
+ if (KLen != 0) {
249
+ Cyclist_AbsorbKey(instance, K, KLen, ID, IDLen, counter, counterLen);
250
+ }
251
+ }
252
+
253
+ void Cyclist_Absorb(Cyclist_Instance *instance, const uint8_t *X, size_t XLen)
254
+ {
255
+ Cyclist_AbsorbAny(instance, X, XLen, instance->Rabsorb, 0x03);
256
+ }
257
+
258
+ void Cyclist_Encrypt(Cyclist_Instance *instance, const uint8_t *P, uint8_t *C, size_t PLen)
259
+ {
260
+ #if DEBUG
261
+ assert(instance->mode == Cyclist_ModeKeyed);
262
+ #endif
263
+ Cyclist_Crypt(instance, P, C, PLen, 0);
264
+ }
265
+
266
+ void Cyclist_Decrypt(Cyclist_Instance *instance, const uint8_t *C, uint8_t *P, size_t CLen)
267
+ {
268
+ #if DEBUG
269
+ assert(instance->mode == Cyclist_ModeKeyed);
270
+ #endif
271
+ Cyclist_Crypt(instance, C, P, CLen, 1);
272
+ }
273
+
274
+ void Cyclist_Squeeze(Cyclist_Instance *instance, uint8_t *Y, size_t YLen)
275
+ {
276
+ Cyclist_SqueezeAny(instance, Y, YLen, 0x40);
277
+ }
278
+
279
+ void Cyclist_SqueezeKey(Cyclist_Instance *instance, uint8_t *K, size_t KLen)
280
+ {
281
+ #if DEBUG
282
+ assert(instance->mode == Cyclist_ModeKeyed);
283
+ #endif
284
+ Cyclist_SqueezeAny(instance, K, KLen, 0x20);
285
+ }
286
+
287
+ void Cyclist_Ratchet(Cyclist_Instance *instance)
288
+ {
289
+ uint8_t buffer[Cyclist_lRatchet];
290
+
291
+ #if DEBUG
292
+ assert(instance->mode == Cyclist_ModeKeyed);
293
+ #endif
294
+ /* Squeeze then absorb is the same as overwriting with zeros */
295
+ Cyclist_SqueezeAny(instance, buffer, sizeof(buffer), 0x10);
296
+ Cyclist_AbsorbAny(instance, buffer, sizeof(buffer), instance->Rabsorb, 0x00);
297
+ }
298
+
299
+ #undef SnP_StaticInitialize
300
+ #undef SnP_Initialize
301
+ #undef SnP_AddBytes
302
+ #undef SnP_AddByte
303
+ #undef SnP_OverwriteBytes
304
+ #undef SnP_ExtractBytes
305
+ #undef SnP_ExtractAndAddBytes
306
+
307
+ #undef Cyclist_Instance
308
+ #undef Cyclist_Initialize
309
+ #undef Cyclist_Absorb
310
+ #undef Cyclist_Encrypt
311
+ #undef Cyclist_Decrypt
312
+ #undef Cyclist_Squeeze
313
+ #undef Cyclist_SqueezeKey
314
+ #undef Cyclist_Ratchet
315
+
316
+ #undef Cyclist_AbsorbAny
317
+ #undef Cyclist_AbsorbKey
318
+ #undef Cyclist_SqueezeAny
319
+ #undef Cyclist_Down
320
+ #undef Cyclist_Up
321
+ #undef Cyclist_Crypt
322
+
323
+ #undef Cyclist_f_bPrime
324
+ #undef Cyclist_Rhash
325
+ #undef Cyclist_Rkin
326
+ #undef Cyclist_Rkout
327
+ #undef Cyclist_lRatchet
328
+
329
+ #if defined(CyclistFullBlocks_supported)
330
+ #undef Cyclist_AbsorbKeyedFullBlocks
331
+ #undef Cyclist_AbsorbHashFullBlocks
332
+ #undef Cyclist_SqueezeKeyedFullBlocks
333
+ #undef Cyclist_SqueezeHashFullBlocks
334
+ #undef Cyclist_EncryptFullBlocks
335
+ #undef Cyclist_DecryptFullBlocks
336
+ #endif
@@ -0,0 +1,26 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Xoodyak, designed by Joan Daemen, Seth Hoffert, Michaël Peeters, 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 _Xoodyak_parameters_h_
18
+ #define _Xoodyak_parameters_h_
19
+
20
+ #define Xoodyak_f_bPrime 48
21
+ #define Xoodyak_Rhash 16
22
+ #define Xoodyak_Rkin 44
23
+ #define Xoodyak_Rkout 24
24
+ #define Xoodyak_lRatchet 16
25
+
26
+ #endif