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,68 @@
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 _Ket_h_
18
+ #define _Ket_h_
19
+
20
+ #include <string.h>
21
+ #include "config.h"
22
+
23
+ /* Ketje frame bits */
24
+ #define FRAMEBITSEMPTY 0x01
25
+ #define FRAMEBITS0 0x02
26
+ #define FRAMEBITS00 0x04
27
+ #define FRAMEBITS10 0x05
28
+ #define FRAMEBITS01 0x06
29
+ #define FRAMEBITS11 0x07
30
+
31
+ /* Ketje rounds */
32
+ #define Ket_StartRounds 12
33
+ #define Ket_StepRounds 1
34
+ #define Ket_StrideRounds 6
35
+
36
+ #define Ketje_LaneSize (SnP_width/8/25)
37
+ #define Ketje_BlockSize (((SnP_width <= 400)?2:4)*Ketje_LaneSize)
38
+
39
+ #define XKCP_DeclareKetFunctions(prefix) \
40
+ void prefix##_StateAddByte( void *state, unsigned char value, unsigned int offset ); \
41
+ unsigned char prefix##_StateExtractByte( void *state, unsigned int offset ); \
42
+ void prefix##_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length ); \
43
+ void prefix##_Step( void *state, unsigned int size, unsigned char frameAndPaddingBits ); \
44
+ void prefix##_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks ); \
45
+ void prefix##_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks ); \
46
+ void prefix##_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks ); \
47
+
48
+ #ifdef XKCP_has_KeccakP200
49
+ #include "KeccakP-200-SnP.h"
50
+ XKCP_DeclareKetFunctions(KetJr)
51
+ #endif
52
+
53
+ #ifdef XKCP_has_KeccakP400
54
+ #include "KeccakP-400-SnP.h"
55
+ XKCP_DeclareKetFunctions(KetSr)
56
+ #endif
57
+
58
+ #ifdef XKCP_has_KeccakP800
59
+ #include "KeccakP-800-SnP.h"
60
+ XKCP_DeclareKetFunctions(KetMn)
61
+ #endif
62
+
63
+ #ifdef XKCP_has_KeccakP1600
64
+ #include "KeccakP-1600-SnP.h"
65
+ XKCP_DeclareKetFunctions(KetMj)
66
+ #endif
67
+
68
+ #endif
@@ -0,0 +1,174 @@
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 Ket_StateTwistIndexes JOIN(prefix, _StateTwistIndexes)
21
+ #define Ket_StateAddByte JOIN(prefix, _StateAddByte)
22
+ #define Ket_StateExtractByte JOIN(prefix, _StateExtractByte)
23
+ #define Ket_StateOverwrite JOIN(prefix, _StateOverwrite)
24
+ #define Ket_Step JOIN(prefix, _Step)
25
+ #define Ket_FeedAssociatedDataBlocks JOIN(prefix, _FeedAssociatedDataBlocks)
26
+ #define Ket_UnwrapBlocks JOIN(prefix, _UnwrapBlocks)
27
+ #define Ket_WrapBlocks JOIN(prefix, _WrapBlocks)
28
+
29
+ #define Ket_StateTwistIndexBlock0 0
30
+ #define Ket_StateTwistIndexBlock1 6
31
+ #if (SnP_width <= 400 )
32
+ #define Ket_StateTwistIndexBlockSize 12
33
+ #else
34
+ #define Ket_StateTwistIndexBlock2 12
35
+ #define Ket_StateTwistIndexBlock3 18
36
+ #define Ket_StateTwistIndexBlockSize 24
37
+ #endif
38
+
39
+ const unsigned char Ket_StateTwistIndexes[] = {
40
+ 0, 6, 12, 18, 24,
41
+ 3, 9, 10, 16, 22,
42
+ 1, 7, 13, 19, 20,
43
+ 4, 5, 11, 17, 23,
44
+ 2, 8, 14, 15, 21
45
+ };
46
+
47
+ /* Permutation state management functions */
48
+
49
+ void Ket_StateAddByte( void *state, unsigned char value, unsigned int offset )
50
+ {
51
+ ((unsigned char *)state)[Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize] ^= value;
52
+ }
53
+
54
+ unsigned char Ket_StateExtractByte( void *state, unsigned int offset )
55
+ {
56
+ return ((unsigned char *)state)[Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize];
57
+ }
58
+
59
+ void Ket_StateOverwrite( void *stateArg, unsigned int offset, const unsigned char *data, unsigned int length )
60
+ {
61
+ unsigned char *state = (unsigned char*)stateArg;
62
+
63
+ while ( length-- != 0 )
64
+ {
65
+ state[Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize] = *(data++);
66
+ offset++;
67
+ }
68
+ }
69
+
70
+ /* Ketje low level functions */
71
+
72
+ void Ket_Step( void *state, unsigned int size, unsigned char framing )
73
+ {
74
+
75
+ ((unsigned char*)state)[Ket_StateTwistIndexes[size / Ketje_LaneSize] * Ketje_LaneSize + size % Ketje_LaneSize] ^= framing;
76
+ ((tKeccakLane*)state)[Ket_StateTwistIndexBlockSize] ^= 0x08;
77
+ SnP_PermuteRounds(state, Ket_StepRounds);
78
+ }
79
+
80
+ void Ket_FeedAssociatedDataBlocks( void *stateArg, const unsigned char *data, unsigned int nBlocks )
81
+ {
82
+ tKeccakLane *state = (tKeccakLane*)stateArg;
83
+
84
+ do
85
+ {
86
+ state[Ket_StateTwistIndexBlock0] ^= ReadUnalignedLane( data + 0 * sizeof(tKeccakLane) );
87
+ state[Ket_StateTwistIndexBlock1] ^= ReadUnalignedLane( data + 1 * sizeof(tKeccakLane) );
88
+ #if (SnP_width >= 800 )
89
+ state[Ket_StateTwistIndexBlock2] ^= ReadUnalignedLane( data + 2 * sizeof(tKeccakLane) );
90
+ state[Ket_StateTwistIndexBlock3] ^= ReadUnalignedLane( data + 3 * sizeof(tKeccakLane) );
91
+ #endif
92
+ data += Ketje_BlockSize;
93
+ state[Ket_StateTwistIndexBlockSize] ^= 0x08 | FRAMEBITS00;
94
+ SnP_PermuteRounds(state, Ket_StepRounds);
95
+ }
96
+ while ( --nBlocks != 0 );
97
+ }
98
+
99
+ void Ket_UnwrapBlocks( void *stateArg, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks )
100
+ {
101
+ tKeccakLane *state = (tKeccakLane*)stateArg;
102
+ tKeccakLane t;
103
+
104
+ do
105
+ {
106
+ t = ReadUnalignedLane( ciphertext + 0 * sizeof(tKeccakLane) );
107
+ WriteUnalignedLane( plaintext + 0 * sizeof(tKeccakLane), state[Ket_StateTwistIndexBlock0] ^ t );
108
+ state[Ket_StateTwistIndexBlock0] = t;
109
+ t = ReadUnalignedLane( ciphertext + 1 * sizeof(tKeccakLane) );
110
+ WriteUnalignedLane( plaintext + 1 * sizeof(tKeccakLane), state[Ket_StateTwistIndexBlock1] ^ t );
111
+ state[Ket_StateTwistIndexBlock1] = t;
112
+
113
+ #if (SnP_width >= 800 )
114
+ t = ReadUnalignedLane( ciphertext + 2 * sizeof(tKeccakLane) );
115
+ WriteUnalignedLane( plaintext + 2 * sizeof(tKeccakLane), state[Ket_StateTwistIndexBlock2] ^ t );
116
+ state[Ket_StateTwistIndexBlock2] = t;
117
+ t = ReadUnalignedLane( ciphertext + 3 * sizeof(tKeccakLane) );
118
+ WriteUnalignedLane( plaintext + 3 * sizeof(tKeccakLane), state[Ket_StateTwistIndexBlock3] ^ t );
119
+ state[Ket_StateTwistIndexBlock3] = t;
120
+ #endif
121
+
122
+ ciphertext += Ketje_BlockSize;
123
+ plaintext += Ketje_BlockSize;
124
+ state[Ket_StateTwistIndexBlockSize] ^= 0x08 | FRAMEBITS11;
125
+ SnP_PermuteRounds(state, Ket_StepRounds);
126
+ }
127
+ while ( --nBlocks != 0 );
128
+ }
129
+
130
+ void Ket_WrapBlocks( void *stateArg, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks )
131
+ {
132
+ tKeccakLane *state = (tKeccakLane*)stateArg;
133
+ tKeccakLane t;
134
+
135
+ do
136
+ {
137
+ t = state[Ket_StateTwistIndexBlock0] ^ ReadUnalignedLane( plaintext + 0 * sizeof(tKeccakLane) );
138
+ state[Ket_StateTwistIndexBlock0] = t;
139
+ WriteUnalignedLane( ciphertext + 0 * sizeof(tKeccakLane), t );
140
+ t = state[Ket_StateTwistIndexBlock1] ^ ReadUnalignedLane( plaintext + 1 * sizeof(tKeccakLane) );
141
+ state[Ket_StateTwistIndexBlock1] = t;
142
+ WriteUnalignedLane( ciphertext + 1 * sizeof(tKeccakLane), t );
143
+
144
+ #if (SnP_width >= 800 )
145
+ t = state[Ket_StateTwistIndexBlock2] ^ ReadUnalignedLane( plaintext + 2 * sizeof(tKeccakLane) );
146
+ state[Ket_StateTwistIndexBlock2] = t;
147
+ WriteUnalignedLane( ciphertext + 2 * sizeof(tKeccakLane), t );
148
+ t = state[Ket_StateTwistIndexBlock3] ^ ReadUnalignedLane( plaintext + 3 * sizeof(tKeccakLane) );
149
+ state[Ket_StateTwistIndexBlock3] = t;
150
+ WriteUnalignedLane( ciphertext + 3 * sizeof(tKeccakLane), t );
151
+ #endif
152
+
153
+ ciphertext += Ketje_BlockSize;
154
+ plaintext += Ketje_BlockSize;
155
+ state[Ket_StateTwistIndexBlockSize] ^= 0x08 | FRAMEBITS11;
156
+ SnP_PermuteRounds(state, Ket_StepRounds);
157
+ }
158
+ while ( --nBlocks != 0 );
159
+ }
160
+
161
+ #undef Ket_StateTwistIndexes
162
+ #undef Ket_StateAddByte
163
+ #undef Ket_StateExtractByte
164
+ #undef Ket_StateOverwrite
165
+ #undef Ket_Step
166
+ #undef Ket_FeedAssociatedDataBlocks
167
+ #undef Ket_UnwrapBlocks
168
+ #undef Ket_WrapBlocks
169
+
170
+ #undef Ket_StateTwistIndexBlock0
171
+ #undef Ket_StateTwistIndexBlock1
172
+ #undef Ket_StateTwistIndexBlock2
173
+ #undef Ket_StateTwistIndexBlock3
174
+ #undef Ket_StateTwistIndexBlockSize
@@ -0,0 +1,80 @@
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
+ #ifdef KeccakReference
18
+ #include "displayIntermediateValues.h"
19
+ #endif
20
+
21
+ #include "config.h"
22
+ #include "Ket.h"
23
+
24
+ #define Ket_Minimum( a, b ) (((a) < (b)) ? (a) : (b))
25
+
26
+ #ifdef XKCP_has_KeccakP200
27
+ #include "KeccakP-200-SnP.h"
28
+
29
+ #define prefix KetJr
30
+ #define SnP KeccakP200
31
+ #define SnP_width 200
32
+ #define SnP_PermuteRounds KeccakP200_Permute_Nrounds
33
+ #include "Ket.inc"
34
+ #undef prefix
35
+ #undef SnP
36
+ #undef SnP_width
37
+ #undef SnP_PermuteRounds
38
+ #endif
39
+
40
+ #ifdef XKCP_has_KeccakP400
41
+ #include "KeccakP-400-SnP.h"
42
+
43
+ #define prefix KetSr
44
+ #define SnP KeccakP400
45
+ #define SnP_width 400
46
+ #define SnP_PermuteRounds KeccakP400_Permute_Nrounds
47
+ #include "Ket.inc"
48
+ #undef prefix
49
+ #undef SnP
50
+ #undef SnP_width
51
+ #undef SnP_PermuteRounds
52
+ #endif
53
+
54
+ #ifdef XKCP_has_KeccakP800
55
+ #include "KeccakP-800-SnP.h"
56
+
57
+ #define prefix KetMn
58
+ #define SnP KeccakP800
59
+ #define SnP_width 800
60
+ #define SnP_PermuteRounds KeccakP800_Permute_Nrounds
61
+ #include "Ket.inc"
62
+ #undef prefix
63
+ #undef SnP
64
+ #undef SnP_width
65
+ #undef SnP_PermuteRounds
66
+ #endif
67
+
68
+ #ifdef XKCP_has_KeccakP1600
69
+ #include "KeccakP-1600-SnP.h"
70
+
71
+ #define prefix KetMj
72
+ #define SnP KeccakP1600
73
+ #define SnP_width 1600
74
+ #define SnP_PermuteRounds KeccakP1600_Permute_Nrounds
75
+ #include "Ket.inc"
76
+ #undef prefix
77
+ #undef SnP
78
+ #undef SnP_width
79
+ #undef SnP_PermuteRounds
80
+ #endif
@@ -0,0 +1,68 @@
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 _Ket_h_
18
+ #define _Ket_h_
19
+
20
+ #include <string.h>
21
+ #include "config.h"
22
+
23
+ /* Ketje frame bits */
24
+ #define FRAMEBITSEMPTY 0x01
25
+ #define FRAMEBITS0 0x02
26
+ #define FRAMEBITS00 0x04
27
+ #define FRAMEBITS10 0x05
28
+ #define FRAMEBITS01 0x06
29
+ #define FRAMEBITS11 0x07
30
+
31
+ /* Ketje rounds */
32
+ #define Ket_StartRounds 12
33
+ #define Ket_StepRounds 1
34
+ #define Ket_StrideRounds 6
35
+
36
+ #define Ketje_LaneSize (SnP_width/8/25)
37
+ #define Ketje_BlockSize (((SnP_width <= 400)?2:4)*Ketje_LaneSize)
38
+
39
+ #define XKCP_DeclareKetFunctions(prefix) \
40
+ void prefix##_StateAddByte( void *state, unsigned char value, unsigned int offset ); \
41
+ unsigned char prefix##_StateExtractByte( void *state, unsigned int offset ); \
42
+ void prefix##_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length ); \
43
+ void prefix##_Step( void *state, unsigned int size, unsigned char frameAndPaddingBits ); \
44
+ void prefix##_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks ); \
45
+ void prefix##_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks ); \
46
+ void prefix##_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks ); \
47
+
48
+ #ifdef XKCP_has_KeccakP200
49
+ #include "KeccakP-200-SnP.h"
50
+ XKCP_DeclareKetFunctions(KetJr)
51
+ #endif
52
+
53
+ #ifdef XKCP_has_KeccakP400
54
+ #include "KeccakP-400-SnP.h"
55
+ XKCP_DeclareKetFunctions(KetSr)
56
+ #endif
57
+
58
+ #ifdef XKCP_has_KeccakP800
59
+ #include "KeccakP-800-SnP.h"
60
+ XKCP_DeclareKetFunctions(KetMn)
61
+ #endif
62
+
63
+ #ifdef XKCP_has_KeccakP1600
64
+ #include "KeccakP-1600-SnP.h"
65
+ XKCP_DeclareKetFunctions(KetMj)
66
+ #endif
67
+
68
+ #endif
@@ -0,0 +1,142 @@
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_AddBytes JOIN(SnP, _AddBytes)
21
+ #define SnP_AddByte JOIN(SnP, _AddByte)
22
+ #define SnP_OverwriteBytes JOIN(SnP, _OverwriteBytes)
23
+ #define SnP_ExtractBytes JOIN(SnP, _ExtractBytes)
24
+ #define SnP_ExtractAndAddBytes JOIN(SnP, _ExtractAndAddBytes)
25
+
26
+ #define Ket_StateTwistIndexes JOIN(prefix, _StateTwistIndexes)
27
+ #define Ket_StateAddByte JOIN(prefix, _StateAddByte)
28
+ #define Ket_StateExtractByte JOIN(prefix, _StateExtractByte)
29
+ #define Ket_StateOverwrite JOIN(prefix, _StateOverwrite)
30
+ #define Ket_Step JOIN(prefix, _Step)
31
+ #define Ket_FeedAssociatedDataBlocks JOIN(prefix, _FeedAssociatedDataBlocks)
32
+ #define Ket_UnwrapBlocks JOIN(prefix, _UnwrapBlocks)
33
+ #define Ket_WrapBlocks JOIN(prefix, _WrapBlocks)
34
+
35
+ const unsigned char Ket_StateTwistIndexes[] = {
36
+ 0, 6, 12, 18, 24,
37
+ 3, 9, 10, 16, 22,
38
+ 1, 7, 13, 19, 20,
39
+ 4, 5, 11, 17, 23,
40
+ 2, 8, 14, 15, 21
41
+ };
42
+
43
+
44
+ /* Permutation state management functions */
45
+
46
+ void Ket_StateAddByte( void *state, unsigned char value, unsigned int offset )
47
+ {
48
+ SnP_AddByte(state, value, Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize);
49
+ }
50
+
51
+ unsigned char Ket_StateExtractByte( void *state, unsigned int offset )
52
+ {
53
+ unsigned char data[1];
54
+
55
+ SnP_ExtractBytes(state, data, Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize, 1);
56
+ return data[0];
57
+ }
58
+
59
+ void Ket_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length )
60
+ {
61
+ while ( length-- != 0 )
62
+ {
63
+ SnP_OverwriteBytes(state, data, Ket_StateTwistIndexes[offset / Ketje_LaneSize] * Ketje_LaneSize + offset % Ketje_LaneSize, 1);
64
+ ++data;
65
+ ++offset;
66
+ }
67
+ }
68
+
69
+ /* Ketje low level functions */
70
+
71
+ void Ket_Step( void *state, unsigned int size, unsigned char frameAndPaddingBits)
72
+ {
73
+
74
+ SnP_AddByte(state, frameAndPaddingBits, Ket_StateTwistIndexes[size / Ketje_LaneSize] * Ketje_LaneSize + size % Ketje_LaneSize);
75
+ SnP_AddByte(state, 0x08, Ket_StateTwistIndexes[Ketje_BlockSize / Ketje_LaneSize] * Ketje_LaneSize);
76
+ SnP_PermuteRounds(state, Ket_StepRounds);
77
+ }
78
+
79
+ void Ket_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks )
80
+ {
81
+ unsigned int laneIndex;
82
+
83
+ do
84
+ {
85
+ for ( laneIndex = 0; laneIndex < (Ketje_BlockSize / Ketje_LaneSize); ++laneIndex )
86
+ {
87
+ SnP_AddBytes( state, data, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize );
88
+ data += Ketje_LaneSize;
89
+ }
90
+ Ket_Step( state, Ketje_BlockSize, FRAMEBITS00 );
91
+ }
92
+ while ( --nBlocks != 0 );
93
+ }
94
+
95
+ void Ket_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks )
96
+ {
97
+ unsigned int laneIndex;
98
+
99
+ while ( nBlocks-- != 0 )
100
+ {
101
+ for ( laneIndex = 0; laneIndex < (Ketje_BlockSize / Ketje_LaneSize); ++laneIndex )
102
+ {
103
+ SnP_ExtractAndAddBytes( state, ciphertext, plaintext, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize );
104
+ SnP_AddBytes(state, plaintext, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize);
105
+ plaintext += Ketje_LaneSize;
106
+ ciphertext += Ketje_LaneSize;
107
+ }
108
+ SnP_AddByte(state, 0x08 | FRAMEBITS11, Ket_StateTwistIndexes[Ketje_BlockSize / Ketje_LaneSize] * Ketje_LaneSize);
109
+ SnP_PermuteRounds(state, Ket_StepRounds);
110
+ }
111
+ }
112
+
113
+ void Ket_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks )
114
+ {
115
+ unsigned int laneIndex;
116
+
117
+ while ( nBlocks-- != 0 )
118
+ {
119
+ for ( laneIndex = 0; laneIndex < (Ketje_BlockSize / Ketje_LaneSize); ++laneIndex )
120
+ {
121
+ SnP_AddBytes(state, plaintext, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize);
122
+ SnP_ExtractBytes( state, ciphertext, Ket_StateTwistIndexes[laneIndex] * Ketje_LaneSize, Ketje_LaneSize );
123
+ plaintext += Ketje_LaneSize;
124
+ ciphertext += Ketje_LaneSize;
125
+ }
126
+ SnP_AddByte(state, 0x08 | FRAMEBITS11, Ket_StateTwistIndexes[Ketje_BlockSize / Ketje_LaneSize] * Ketje_LaneSize);
127
+ SnP_PermuteRounds(state, Ket_StepRounds);
128
+ }
129
+ }
130
+
131
+ #undef SnP_AddBytes
132
+ #undef SnP_AddByte
133
+ #undef SnP_OverwriteBytes
134
+ #undef SnP_ExtractBytes
135
+ #undef SnP_ExtractAndAddBytes
136
+
137
+ #undef Ket_StateExtractByte
138
+ #undef Ket_StateOverwrite
139
+ #undef Ket_Step
140
+ #undef Ket_FeedAssociatedDataBlocks
141
+ #undef Ket_UnwrapBlocks
142
+ #undef Ket_WrapBlocks
@@ -0,0 +1,55 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ The Xoodoo permutation, designed by Joan Daemen, Seth Hoffert, Gilles Van Assche and Ronny Van Keer.
6
+
7
+ Implementation by Ronny Van Keer, hereby denoted as "the implementer".
8
+
9
+ For more information, feedback or questions, please refer to the Keccak Team website:
10
+ https://keccak.team/
11
+
12
+ To the extent possible under law, the implementer has waived all copyright
13
+ and related or neighboring rights to the source code in this file.
14
+ http://creativecommons.org/publicdomain/zero/1.0/
15
+ */
16
+
17
+ #ifndef _Xoodoo_SnP_h_
18
+ #define _Xoodoo_SnP_h_
19
+
20
+ #include <stddef.h>
21
+ #include <stdint.h>
22
+
23
+ /** For the documentation, see SnP-documentation.h.
24
+ */
25
+
26
+ #define Xoodoo_implementation "32-bit optimized ARM assembler implementation"
27
+ #define Xoodoo_stateSizeInBytes (3*4*4)
28
+ #define Xoodoo_stateAlignment 4
29
+
30
+ #define Xoodoo_StaticInitialize()
31
+ void Xoodoo_Initialize(void *state);
32
+ #define Xoodoo_AddByte(argS, argData, argOffset) ((uint8_t*)argS)[argOffset] ^= (argData)
33
+ void Xoodoo_AddBytes(void *state, const uint8_t *data, unsigned int offset, unsigned int length);
34
+ void Xoodoo_OverwriteBytes(void *state, const uint8_t *data, unsigned int offset, unsigned int length);
35
+ void Xoodoo_OverwriteWithZeroes(void *state, unsigned int byteCount);
36
+ //void Xoodoo_Permute_Nrounds(void *state, unsigned int nrounds);
37
+ void Xoodoo_Permute_6rounds(void *state);
38
+ void Xoodoo_Permute_12rounds(void *state);
39
+ void Xoodoo_ExtractBytes(const void *state, uint8_t *data, unsigned int offset, unsigned int length);
40
+ void Xoodoo_ExtractAndAddBytes(const void *state, const uint8_t *input, uint8_t *output, unsigned int offset, unsigned int length);
41
+
42
+ #define Xoodoo_FastXoofff_supported
43
+ void Xoofff_AddIs(uint8_t *output, const uint8_t *input, size_t bitLen);
44
+ size_t Xoofff_CompressFastLoop(uint8_t *kRoll, uint8_t *xAccu, const uint8_t *input, size_t length);
45
+ size_t Xoofff_ExpandFastLoop(uint8_t *yAccu, const uint8_t *kRoll, uint8_t *output, size_t length);
46
+
47
+ #define CyclistFullBlocks_supported
48
+ size_t Xoodyak_AbsorbKeyedFullBlocks(void *state, const uint8_t *X, size_t XLen);
49
+ size_t Xoodyak_AbsorbHashFullBlocks(void *state, const uint8_t *X, size_t XLen);
50
+ size_t Xoodyak_SqueezeHashFullBlocks(void *state, uint8_t *Y, size_t YLen);
51
+ size_t Xoodyak_SqueezeKeyedFullBlocks(void *state, uint8_t *Y, size_t YLen);
52
+ size_t Xoodyak_EncryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen);
53
+ size_t Xoodyak_DecryptFullBlocks(void *state, const uint8_t *I, uint8_t *O, size_t IOLen);
54
+
55
+ #endif