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,88 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Ketje, designed by Guido Bertoni, Joan Daemen, 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 _Ketjev2_h_
18
+ #define _Ketjev2_h_
19
+
20
+ /* For the documentation, please follow the link: */
21
+ /* #include "Ketje-documentation.h" */
22
+
23
+ #include <string.h>
24
+ #include "align.h"
25
+ #include "config.h"
26
+
27
+ /** The phase is a data element that expresses what Ketje is doing
28
+ * - virgin: the only operation supported is initialization, loading the key and nonce. This will switch
29
+ * the phase to feedingAssociatedData
30
+ * - feedingAssociatedData: Ketje is ready for feeding associated data, has started feeding associated data
31
+ * or has finished feeding associated data. It allows feeding some more associated data in which case the phase does not
32
+ * change. One can also start wrapping plaintext, that sets the phase to wrapping. Finally, one can
33
+ * start unwrapping ciphertext, that sets the phase to unwrapping.
34
+ * - wrapping: Ketje is ready for wrapping some more plaintext or for delivering the tag.
35
+ * Wrapping more plaintext does not modify the phase, asking for the tag sets the phase to feedingAssociatedData.
36
+ * - unwrapping: Ketje is ready for unwrapping some more ciphertext or for delivering the tag.
37
+ * Unwrapping more ciphertext does not modify the phase, asking for the tag sets the phase to feedingAssociatedData.
38
+ */
39
+ enum Phase {
40
+ Ketje_Phase_Virgin = 0,
41
+ Ketje_Phase_FeedingAssociatedData = 1,
42
+ Ketje_Phase_Wrapping = 2,
43
+ Ketje_Phase_Unwrapping = 4
44
+ };
45
+
46
+ #define XKCP_DeclareKetjeStructure(prefix, size, alignment) \
47
+ ALIGN(alignment) typedef struct prefix##InstanceStruct { \
48
+ unsigned char state[size]; \
49
+ unsigned int phase; \
50
+ unsigned int dataRemainderSize; \
51
+ } prefix##_Instance;
52
+
53
+ #define XKCP_DeclareKetjeFunctions(prefix) \
54
+ int prefix##_Initialize(prefix##_Instance *instance, const unsigned char *key, unsigned int keySizeInBits, const unsigned char *nonce, unsigned int nonceSizeInBits); \
55
+ int prefix##_FeedAssociatedData(prefix##_Instance *instance, const unsigned char *data, unsigned int dataSizeInBytes); \
56
+ int prefix##_WrapPlaintext(prefix##_Instance *instance, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int dataSizeInBytes); \
57
+ int prefix##_UnwrapCiphertext(prefix##_Instance *instance, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int dataSizeInBytes); \
58
+ int prefix##_GetTag(prefix##_Instance *instance, unsigned char *tag, unsigned int tagSizeInBytes);
59
+
60
+ #ifdef XKCP_has_KeccakP200
61
+ #include "KeccakP-200-SnP.h"
62
+ XKCP_DeclareKetjeStructure(KetjeJr, KeccakP200_stateSizeInBytes, KeccakP200_stateAlignment)
63
+ XKCP_DeclareKetjeFunctions(KetjeJr)
64
+ #define XKCP_has_KetjeJr
65
+ #endif
66
+
67
+ #ifdef XKCP_has_KeccakP400
68
+ #include "KeccakP-400-SnP.h"
69
+ XKCP_DeclareKetjeStructure(KetjeSr, KeccakP400_stateSizeInBytes, KeccakP400_stateAlignment)
70
+ XKCP_DeclareKetjeFunctions(KetjeSr)
71
+ #define XKCP_has_KetjeSr
72
+ #endif
73
+
74
+ #ifdef XKCP_has_KeccakP800
75
+ #include "KeccakP-800-SnP.h"
76
+ XKCP_DeclareKetjeStructure(KetjeMn, KeccakP800_stateSizeInBytes, KeccakP800_stateAlignment)
77
+ XKCP_DeclareKetjeFunctions(KetjeMn)
78
+ #define XKCP_has_KetjeMn
79
+ #endif
80
+
81
+ #ifdef XKCP_has_KeccakP1600
82
+ #include "KeccakP-1600-SnP.h"
83
+ XKCP_DeclareKetjeStructure(KetjeMj, KeccakP1600_stateSizeInBytes, KeccakP1600_stateAlignment)
84
+ XKCP_DeclareKetjeFunctions(KetjeMj)
85
+ #define XKCP_has_KetjeMj
86
+ #endif
87
+
88
+ #endif
@@ -0,0 +1,274 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Ketje, designed by Guido Bertoni, Joan Daemen, 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
+
23
+ #define Ketje_Instance JOIN(prefix, _Instance)
24
+ #define Ketje_Initialize JOIN(prefix, _Initialize)
25
+ #define Ketje_FeedAssociatedData JOIN(prefix, _FeedAssociatedData)
26
+ #define Ketje_WrapPlaintext JOIN(prefix, _WrapPlaintext)
27
+ #define Ketje_UnwrapCiphertext JOIN(prefix, _UnwrapCiphertext)
28
+ #define Ketje_GetTag JOIN(prefix, _GetTag)
29
+
30
+ #define Ket_StateAddByte JOIN(prefixKet, _StateAddByte)
31
+ #define Ket_StateExtractByte JOIN(prefixKet, _StateExtractByte)
32
+ #define Ket_StateOverwrite JOIN(prefixKet, _StateOverwrite)
33
+ #define Ket_Step JOIN(prefixKet, _Step)
34
+ #define Ket_FeedAssociatedDataBlocks JOIN(prefixKet, _FeedAssociatedDataBlocks)
35
+ #define Ket_UnwrapBlocks JOIN(prefixKet, _UnwrapBlocks)
36
+ #define Ket_WrapBlocks JOIN(prefixKet, _WrapBlocks)
37
+
38
+ int Ketje_Initialize(Ketje_Instance *instance, const unsigned char *key, unsigned int keySizeInBits, const unsigned char *nonce, unsigned int nonceSizeInBits)
39
+ {
40
+ unsigned char smallData[1];
41
+ unsigned int keyPackSizeInBits;
42
+
43
+ keyPackSizeInBits = 8*((keySizeInBits+16)/8);
44
+ if ( (keyPackSizeInBits + nonceSizeInBits + 2) > SnP_width)
45
+ return 1;
46
+
47
+ instance->phase = Ketje_Phase_FeedingAssociatedData;
48
+ instance->dataRemainderSize = 0;
49
+
50
+ SnP_StaticInitialize();
51
+ SnP_Initialize(instance->state);
52
+
53
+ /* Key pack */
54
+ smallData[0] = keySizeInBits / 8 + 2;
55
+ Ket_StateOverwrite( instance->state, 0, smallData, 1 );
56
+ Ket_StateOverwrite( instance->state, 1, key, keySizeInBits/8 );
57
+ if ((keySizeInBits % 8) == 0)
58
+ smallData[0] = 0x01;
59
+ else {
60
+ unsigned char padding = (unsigned char)1 << (keySizeInBits%8);
61
+ unsigned char mask = padding-1;
62
+ smallData[0] = (key[keySizeInBits/8] & mask) | padding;
63
+ }
64
+ Ket_StateOverwrite( instance->state, 1+keySizeInBits/8, smallData, 1 );
65
+
66
+ /* Nonce */
67
+ Ket_StateOverwrite( instance->state, 1+keySizeInBits/8+1, nonce, nonceSizeInBits / 8 );
68
+ if ((nonceSizeInBits % 8) == 0)
69
+ smallData[0] = 0x01;
70
+ else {
71
+ unsigned char padding = (unsigned char)1 << (nonceSizeInBits%8);
72
+ unsigned char mask = padding-1;
73
+ smallData[0] = (nonce[nonceSizeInBits/8] & mask) | padding;
74
+ }
75
+ Ket_StateOverwrite( instance->state, 1+keySizeInBits/8+1+nonceSizeInBits/8, smallData, 1 );
76
+
77
+ Ket_StateAddByte(instance->state, 0x80, SnP_width / 8 - 1 );
78
+ SnP_PermuteRounds(instance->state, Ket_StartRounds );
79
+
80
+ return 0;
81
+ }
82
+
83
+ int Ketje_FeedAssociatedData(Ketje_Instance *instance, const unsigned char *data, unsigned int dataSizeInBytes)
84
+ {
85
+ unsigned int size;
86
+
87
+ if ((instance->phase & Ketje_Phase_FeedingAssociatedData) == 0)
88
+ return 1;
89
+
90
+ if ( (instance->dataRemainderSize + dataSizeInBytes) > Ketje_BlockSize )
91
+ {
92
+ if (instance->dataRemainderSize != 0)
93
+ {
94
+ dataSizeInBytes -= Ketje_BlockSize - instance->dataRemainderSize;
95
+ while ( instance->dataRemainderSize != Ketje_BlockSize )
96
+ Ket_StateAddByte( instance->state, *(data++), instance->dataRemainderSize++ );
97
+ Ket_Step( instance->state, Ketje_BlockSize, FRAMEBITS00 );
98
+ instance->dataRemainderSize = 0;
99
+ }
100
+
101
+ if ( dataSizeInBytes > Ketje_BlockSize )
102
+ {
103
+ size = ((dataSizeInBytes + (Ketje_BlockSize - 1)) & ~(Ketje_BlockSize - 1)) - Ketje_BlockSize;
104
+ Ket_FeedAssociatedDataBlocks( instance->state, data, size / Ketje_BlockSize);
105
+ dataSizeInBytes -= size;
106
+ data += size;
107
+ }
108
+ }
109
+
110
+ while ( dataSizeInBytes-- != 0 )
111
+ Ket_StateAddByte( instance->state, *(data++), instance->dataRemainderSize++ );
112
+ return 0;
113
+ }
114
+
115
+ int Ketje_WrapPlaintext(Ketje_Instance *instance, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int dataSizeInBytes )
116
+ {
117
+ unsigned int size;
118
+ unsigned char temp;
119
+
120
+ if ( (instance->phase & Ketje_Phase_FeedingAssociatedData) != 0)
121
+ {
122
+ Ket_Step( instance->state, instance->dataRemainderSize, FRAMEBITS01 );
123
+ instance->dataRemainderSize = 0;
124
+ instance->phase = Ketje_Phase_Wrapping;
125
+ }
126
+
127
+ if ( (instance->phase & Ketje_Phase_Wrapping) == 0)
128
+ return 1;
129
+
130
+ if ( (instance->dataRemainderSize + dataSizeInBytes) > Ketje_BlockSize )
131
+ {
132
+ /* More than a block */
133
+ if (instance->dataRemainderSize != 0)
134
+ {
135
+ /* Process data remainder */
136
+ while ( instance->dataRemainderSize < Ketje_BlockSize )
137
+ {
138
+ temp = *(plaintext++);
139
+ *(ciphertext++) = temp ^ Ket_StateExtractByte( instance->state, instance->dataRemainderSize );
140
+ Ket_StateAddByte( instance->state, temp, instance->dataRemainderSize++ );
141
+ --dataSizeInBytes;
142
+ }
143
+ Ket_Step( instance->state, Ketje_BlockSize, FRAMEBITS11 );
144
+ instance->dataRemainderSize = 0;
145
+ }
146
+
147
+ /* Wrap multiple blocks except last. */
148
+ if ( dataSizeInBytes > Ketje_BlockSize )
149
+ {
150
+ size = ((dataSizeInBytes + (Ketje_BlockSize - 1)) & ~(Ketje_BlockSize - 1)) - Ketje_BlockSize;
151
+ Ket_WrapBlocks( instance->state, plaintext, ciphertext, size / Ketje_BlockSize );
152
+ dataSizeInBytes -= size;
153
+ plaintext += size;
154
+ ciphertext += size;
155
+ }
156
+ }
157
+
158
+ /* Add remaining data */
159
+ while ( dataSizeInBytes-- != 0 )
160
+ {
161
+ temp = *(plaintext++);
162
+ *(ciphertext++) = temp ^ Ket_StateExtractByte( instance->state, instance->dataRemainderSize );
163
+ Ket_StateAddByte( instance->state, temp, instance->dataRemainderSize++ );
164
+ }
165
+
166
+ return 0;
167
+ }
168
+
169
+ int Ketje_UnwrapCiphertext(Ketje_Instance *instance, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int dataSizeInBytes)
170
+ {
171
+ unsigned int size;
172
+ unsigned char temp;
173
+
174
+ if ( (instance->phase & Ketje_Phase_FeedingAssociatedData) != 0)
175
+ {
176
+ Ket_Step( instance->state, instance->dataRemainderSize, FRAMEBITS01 );
177
+ instance->dataRemainderSize = 0;
178
+ instance->phase = Ketje_Phase_Unwrapping;
179
+ }
180
+
181
+ if ( (instance->phase & Ketje_Phase_Unwrapping) == 0)
182
+ return 1;
183
+
184
+ if ( (instance->dataRemainderSize + dataSizeInBytes) > Ketje_BlockSize )
185
+ {
186
+ /* More than a block */
187
+ if (instance->dataRemainderSize != 0)
188
+ {
189
+ /* Process data remainder */
190
+ while ( instance->dataRemainderSize < Ketje_BlockSize )
191
+ {
192
+ temp = *(ciphertext++) ^ Ket_StateExtractByte( instance->state, instance->dataRemainderSize );
193
+ *(plaintext++) = temp;
194
+ Ket_StateAddByte( instance->state, temp, instance->dataRemainderSize++ );
195
+ --dataSizeInBytes;
196
+ }
197
+ Ket_Step( instance->state, Ketje_BlockSize, FRAMEBITS11 );
198
+ instance->dataRemainderSize = 0;
199
+ }
200
+
201
+ /* Unwrap multiple blocks except last. */
202
+ if ( dataSizeInBytes > Ketje_BlockSize )
203
+ {
204
+ size = ((dataSizeInBytes + (Ketje_BlockSize - 1)) & ~(Ketje_BlockSize - 1)) - Ketje_BlockSize;
205
+ Ket_UnwrapBlocks( instance->state, ciphertext, plaintext, size / Ketje_BlockSize );
206
+ dataSizeInBytes -= size;
207
+ plaintext += size;
208
+ ciphertext += size;
209
+ }
210
+ }
211
+
212
+ /* Add remaining data */
213
+ while ( dataSizeInBytes-- != 0 )
214
+ {
215
+ temp = *(ciphertext++) ^ Ket_StateExtractByte( instance->state, instance->dataRemainderSize );
216
+ *(plaintext++) = temp;
217
+ Ket_StateAddByte( instance->state, temp, instance->dataRemainderSize++ );
218
+ }
219
+
220
+ return 0;
221
+ }
222
+
223
+ int Ketje_GetTag(Ketje_Instance *instance, unsigned char *tag, unsigned int tagSizeInBytes)
224
+ {
225
+ unsigned int tagSizePart;
226
+ unsigned int i;
227
+
228
+ if ((instance->phase & (Ketje_Phase_Wrapping | Ketje_Phase_Unwrapping)) == 0)
229
+ return 1;
230
+
231
+ Ket_StateAddByte(instance->state, FRAMEBITS10, instance->dataRemainderSize);
232
+ Ket_StateAddByte(instance->state, 0x08, Ketje_BlockSize); /* padding */
233
+ SnP_PermuteRounds(instance->state, Ket_StrideRounds );
234
+ instance->dataRemainderSize = 0;
235
+ tagSizePart = Ketje_BlockSize;
236
+ if ( tagSizeInBytes < Ketje_BlockSize )
237
+ tagSizePart = tagSizeInBytes;
238
+ for ( i = 0; i < tagSizePart; ++i )
239
+ *(tag++) = Ket_StateExtractByte( instance->state, i );
240
+ tagSizeInBytes -= tagSizePart;
241
+
242
+ while(tagSizeInBytes > 0)
243
+ {
244
+ Ket_Step( instance->state, 0, FRAMEBITS0 );
245
+ tagSizePart = Ketje_BlockSize;
246
+ if ( tagSizeInBytes < Ketje_BlockSize )
247
+ tagSizePart = tagSizeInBytes;
248
+ for ( i = 0; i < tagSizePart; ++i )
249
+ *(tag++) = Ket_StateExtractByte( instance->state, i );
250
+ tagSizeInBytes -= tagSizePart;
251
+ }
252
+
253
+ instance->phase = Ketje_Phase_FeedingAssociatedData;
254
+
255
+ return 0;
256
+ }
257
+
258
+ #undef SnP_StaticInitialize
259
+ #undef SnP_Initialize
260
+
261
+ #undef Ketje_Instance
262
+ #undef Ketje_Initialize
263
+ #undef Ketje_FeedAssociatedData
264
+ #undef Ketje_WrapPlaintext
265
+ #undef Ketje_UnwrapCiphertext
266
+ #undef Ketje_GetTag
267
+
268
+ #undef Ket_StateAddByte
269
+ #undef Ket_StateExtractByte
270
+ #undef Ket_StateOverwrite
271
+ #undef Ket_Step
272
+ #undef Ket_FeedAssociatedDataBlocks
273
+ #undef Ket_UnwrapBlocks
274
+ #undef Ket_WrapBlocks
@@ -0,0 +1,132 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Keyak, designed by Guido Bertoni, Joan Daemen, 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
+ #ifdef KeccakReference
18
+ #include "displayIntermediateValues.h"
19
+ #endif
20
+
21
+ #include "config.h"
22
+ #include "Keyakv2.h"
23
+
24
+ #ifdef XKCP_has_KeccakP800
25
+ #include "KeccakP-800-SnP.h"
26
+
27
+ #define prefix KeyakWidth800
28
+ #define SnP KeccakP800
29
+ #define SnP_width 800
30
+ #define PlSnP_parallelism 1
31
+ #define SnP_Permute KeccakP800_Permute_12rounds
32
+ #include "Motorist.inc"
33
+ #undef prefix
34
+ #undef SnP
35
+ #undef SnP_width
36
+ #undef PlSnP_parallelism
37
+ #undef SnP_Permute
38
+
39
+ #define prefix River
40
+ #define prefixMotorist KeyakWidth800
41
+ #include "Keyakv2.inc"
42
+ #undef prefix
43
+ #undef prefixMotorist
44
+ #endif
45
+
46
+ #ifdef XKCP_has_KeccakP1600
47
+ #include "KeccakP-1600-SnP.h"
48
+
49
+ #define prefix KeyakWidth1600
50
+ #define SnP KeccakP1600
51
+ #define SnP_width 1600
52
+ #define PlSnP_parallelism 1
53
+ #define SnP_Permute KeccakP1600_Permute_12rounds
54
+ #include "Motorist.inc"
55
+ #undef prefix
56
+ #undef SnP
57
+ #undef SnP_width
58
+ #undef PlSnP_parallelism
59
+ #undef SnP_Permute
60
+
61
+ #define prefix Lake
62
+ #define prefixMotorist KeyakWidth1600
63
+ #include "Keyakv2.inc"
64
+ #undef prefix
65
+ #undef prefixMotorist
66
+ #endif
67
+
68
+ #ifdef XKCP_has_KeccakP1600times2
69
+ #include "KeccakP-1600-times2-SnP.h"
70
+
71
+ #define prefix KeyakWidth1600times2
72
+ #define PlSnP KeccakP1600times2
73
+ #define PlSnP_parallelism 2
74
+ #define PlSnP_PermuteAll KeccakP1600times2_PermuteAll_12rounds
75
+ #define SnP_width 1600
76
+ #include "Motorist.inc"
77
+ #undef prefix
78
+ #undef PlSnP
79
+ #undef PlSnP_parallelism
80
+ #undef PlSnP_PermuteAll
81
+ #undef SnP_width
82
+
83
+ #define prefix Sea
84
+ #define prefixMotorist KeyakWidth1600times2
85
+ #include "Keyakv2.inc"
86
+ #undef prefix
87
+ #undef prefixMotorist
88
+ #endif
89
+
90
+ #ifdef XKCP_has_KeccakP1600times4
91
+ #include "KeccakP-1600-times4-SnP.h"
92
+
93
+ #define prefix KeyakWidth1600times4
94
+ #define PlSnP KeccakP1600times4
95
+ #define PlSnP_parallelism 4
96
+ #define PlSnP_PermuteAll KeccakP1600times4_PermuteAll_12rounds
97
+ #define SnP_width 1600
98
+ #include "Motorist.inc"
99
+ #undef prefix
100
+ #undef PlSnP
101
+ #undef PlSnP_parallelism
102
+ #undef PlSnP_PermuteAll
103
+ #undef SnP_width
104
+
105
+ #define prefix Ocean
106
+ #define prefixMotorist KeyakWidth1600times4
107
+ #include "Keyakv2.inc"
108
+ #undef prefix
109
+ #undef prefixMotorist
110
+ #endif
111
+
112
+ #ifdef XKCP_has_KeccakP1600times8
113
+ #include "KeccakP-1600-times8-SnP.h"
114
+
115
+ #define prefix KeyakWidth1600times8
116
+ #define PlSnP KeccakP1600times8
117
+ #define PlSnP_parallelism 8
118
+ #define PlSnP_PermuteAll KeccakP1600times8_PermuteAll_12rounds
119
+ #define SnP_width 1600
120
+ #include "Motorist.inc"
121
+ #undef prefix
122
+ #undef PlSnP
123
+ #undef PlSnP_parallelism
124
+ #undef PlSnP_PermuteAll
125
+ #undef SnP_width
126
+
127
+ #define prefix Lunar
128
+ #define prefixMotorist KeyakWidth1600times8
129
+ #include "Keyakv2.inc"
130
+ #undef prefix
131
+ #undef prefixMotorist
132
+ #endif