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,44 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
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
+
18
+ Please refer to SnP-documentation.h for more details.
19
+ */
20
+
21
+ #ifndef _KeccakP_800_SnP_h_
22
+ #define _KeccakP_800_SnP_h_
23
+
24
+ #define KeccakP800_implementation "32-bit reference implementation"
25
+ #define KeccakP800_stateSizeInBytes 100
26
+ #define KeccakP800_stateAlignment 4
27
+
28
+ #ifdef KeccakReference
29
+ void KeccakP800_StaticInitialize( void );
30
+ #else
31
+ #define KeccakP800_StaticInitialize()
32
+ #endif
33
+ void KeccakP800_Initialize(void *state);
34
+ void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset);
35
+ void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
36
+ void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
37
+ void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount);
38
+ void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds);
39
+ void KeccakP800_Permute_12rounds(void *state);
40
+ void KeccakP800_Permute_22rounds(void *state);
41
+ void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
42
+ void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
43
+
44
+ #endif
@@ -0,0 +1,437 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
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
+
18
+ This file implements Keccak-p[800] in a SnP-compatible way.
19
+ Please refer to SnP-documentation.h for more details.
20
+
21
+ This implementation comes with KeccakP-800-SnP.h in the same folder.
22
+ Please refer to LowLevel.build for the exact list of other files it must be combined with.
23
+ */
24
+
25
+ #if DEBUG
26
+ #include <assert.h>
27
+ #endif
28
+ #include <stdint.h>
29
+ #include <stdio.h>
30
+ #include <stdlib.h>
31
+ #include <string.h>
32
+ #include "brg_endian.h"
33
+ #ifdef KeccakReference
34
+ #include "displayIntermediateValues.h"
35
+ #endif
36
+
37
+ typedef uint32_t tKeccakLane;
38
+
39
+ #define maxNrRounds 22
40
+ #define nrLanes 25
41
+ #define index(x, y) (((x)%5)+5*((y)%5))
42
+
43
+ #ifdef KeccakReference
44
+
45
+ static tKeccakLane KeccakRoundConstants[maxNrRounds];
46
+ static unsigned int KeccakRhoOffsets[nrLanes];
47
+
48
+ /* ---------------------------------------------------------------- */
49
+
50
+ void KeccakP800_InitializeRoundConstants(void);
51
+ void KeccakP800_InitializeRhoOffsets(void);
52
+ static int LFSR86540(uint8_t *LFSR);
53
+
54
+ void KeccakP800_StaticInitialize(void)
55
+ {
56
+ if (sizeof(tKeccakLane) != 4) {
57
+ printf("tKeccakLane should be 32-bit wide\n");
58
+ abort();
59
+ }
60
+ KeccakP800_InitializeRoundConstants();
61
+ KeccakP800_InitializeRhoOffsets();
62
+ }
63
+
64
+ void KeccakP800_InitializeRoundConstants(void)
65
+ {
66
+ uint8_t LFSRstate = 0x01;
67
+ unsigned int i, j, bitPosition;
68
+
69
+ for(i=0; i<maxNrRounds; i++) {
70
+ KeccakRoundConstants[i] = 0;
71
+ for(j=0; j<7; j++) {
72
+ bitPosition = (1<<j)-1; /* 2^j-1 */
73
+ if (LFSR86540(&LFSRstate) && (bitPosition < (sizeof(tKeccakLane)*8)))
74
+ KeccakRoundConstants[i] ^= (tKeccakLane)(1<<bitPosition);
75
+ }
76
+ }
77
+ }
78
+
79
+ void KeccakP800_InitializeRhoOffsets(void)
80
+ {
81
+ unsigned int x, y, t, newX, newY;
82
+
83
+ KeccakRhoOffsets[index(0, 0)] = 0;
84
+ x = 1;
85
+ y = 0;
86
+ for(t=0; t<24; t++) {
87
+ KeccakRhoOffsets[index(x, y)] = ((t+1)*(t+2)/2) % (sizeof(tKeccakLane) * 8);
88
+ newX = (0*x+1*y) % 5;
89
+ newY = (2*x+3*y) % 5;
90
+ x = newX;
91
+ y = newY;
92
+ }
93
+ }
94
+
95
+ static int LFSR86540(uint8_t *LFSR)
96
+ {
97
+ int result = ((*LFSR) & 0x01) != 0;
98
+ if (((*LFSR) & 0x80) != 0)
99
+ /* Primitive polynomial over GF(2): x^8+x^6+x^5+x^4+1 */
100
+ (*LFSR) = ((*LFSR) << 1) ^ 0x71;
101
+ else
102
+ (*LFSR) <<= 1;
103
+ return result;
104
+ }
105
+
106
+ #else
107
+
108
+ static const tKeccakLane KeccakRoundConstants[maxNrRounds] =
109
+ {
110
+ 0x00000001,
111
+ 0x00008082,
112
+ 0x0000808a,
113
+ 0x80008000,
114
+ 0x0000808b,
115
+ 0x80000001,
116
+ 0x80008081,
117
+ 0x00008009,
118
+ 0x0000008a,
119
+ 0x00000088,
120
+ 0x80008009,
121
+ 0x8000000a,
122
+ 0x8000808b,
123
+ 0x0000008b,
124
+ 0x00008089,
125
+ 0x00008003,
126
+ 0x00008002,
127
+ 0x00000080,
128
+ 0x0000800a,
129
+ 0x8000000a,
130
+ 0x80008081,
131
+ 0x00008080,
132
+ };
133
+
134
+ static const unsigned int KeccakRhoOffsets[nrLanes] =
135
+ {
136
+ 0, 1, 30, 28, 27, 4, 12, 6, 23, 20, 3, 10, 11, 25, 7, 9, 13, 15, 21, 8, 18, 2, 29, 24, 14
137
+ };
138
+
139
+ #endif
140
+
141
+ /* ---------------------------------------------------------------- */
142
+
143
+ void KeccakP800_Initialize(void *state)
144
+ {
145
+ memset(state, 0, 800/8);
146
+ }
147
+
148
+ /* ---------------------------------------------------------------- */
149
+
150
+ void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
151
+ {
152
+ #if DEBUG
153
+ assert(offset < 100);
154
+ #endif
155
+ ((unsigned char *)state)[offset] ^= byte;
156
+ }
157
+
158
+ /* ---------------------------------------------------------------- */
159
+
160
+ void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
161
+ {
162
+ unsigned int i;
163
+
164
+ #if DEBUG
165
+ assert(offset < 100);
166
+ assert(offset+length <= 100);
167
+ #endif
168
+ for(i=0; i<length; i++)
169
+ ((unsigned char *)state)[offset+i] ^= data[i];
170
+ }
171
+
172
+ /* ---------------------------------------------------------------- */
173
+
174
+ void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
175
+ {
176
+ #if DEBUG
177
+ assert(offset < 100);
178
+ assert(offset+length <= 100);
179
+ #endif
180
+ memcpy((unsigned char*)state+offset, data, length);
181
+ }
182
+
183
+ /* ---------------------------------------------------------------- */
184
+
185
+ void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
186
+ {
187
+ #if DEBUG
188
+ assert(byteCount <= 100);
189
+ #endif
190
+ memset(state, 0, byteCount);
191
+ }
192
+
193
+ /* ---------------------------------------------------------------- */
194
+
195
+ static void fromBytesToWords(tKeccakLane *stateAsWords, const unsigned char *state);
196
+ static void fromWordsToBytes(unsigned char *state, const tKeccakLane *stateAsWords);
197
+ void KeccakP800OnWords(tKeccakLane *state, unsigned int nrRounds);
198
+ void KeccakP800Round(tKeccakLane *state, unsigned int indexRound);
199
+ static void theta(tKeccakLane *A);
200
+ static void rho(tKeccakLane *A);
201
+ static void pi(tKeccakLane *A);
202
+ static void chi(tKeccakLane *A);
203
+ static void iota(tKeccakLane *A, unsigned int indexRound);
204
+
205
+ void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds)
206
+ {
207
+ #if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
208
+ tKeccakLane stateAsWords[800/32];
209
+ #endif
210
+
211
+ #ifdef KeccakReference
212
+ displayStateAsBytes(1, "Input of permutation", (const unsigned char *)state, 800);
213
+ #endif
214
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
215
+ KeccakP800OnWords((tKeccakLane*)state, nrounds);
216
+ #else
217
+ fromBytesToWords(stateAsWords, (const unsigned char *)state);
218
+ KeccakP800OnWords(stateAsWords, nrounds);
219
+ fromWordsToBytes((unsigned char *)state, stateAsWords);
220
+ #endif
221
+ #ifdef KeccakReference
222
+ displayStateAsBytes(1, "State after permutation", (const unsigned char *)state, 800);
223
+ #endif
224
+ }
225
+
226
+ void KeccakP800_Permute_12rounds(void *state)
227
+ {
228
+ #if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
229
+ tKeccakLane stateAsWords[800/32];
230
+ #endif
231
+
232
+ #ifdef KeccakReference
233
+ displayStateAsBytes(1, "Input of permutation", (const unsigned char *)state, 800);
234
+ #endif
235
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
236
+ KeccakP800OnWords((tKeccakLane*)state, 12);
237
+ #else
238
+ fromBytesToWords(stateAsWords, (const unsigned char *)state);
239
+ KeccakP800OnWords(stateAsWords, 12);
240
+ fromWordsToBytes((unsigned char *)state, stateAsWords);
241
+ #endif
242
+ #ifdef KeccakReference
243
+ displayStateAsBytes(1, "State after permutation", (const unsigned char *)state, 800);
244
+ #endif
245
+ }
246
+
247
+ void KeccakP800_Permute_22rounds(void *state)
248
+ {
249
+ #if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
250
+ tKeccakLane stateAsWords[800/32];
251
+ #endif
252
+
253
+ #ifdef KeccakReference
254
+ displayStateAsBytes(1, "Input of permutation", (const unsigned char *)state, 800);
255
+ #endif
256
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
257
+ KeccakP800OnWords((tKeccakLane*)state, 22);
258
+ #else
259
+ fromBytesToWords(stateAsWords, (const unsigned char *)state);
260
+ KeccakP800OnWords(stateAsWords, 22);
261
+ fromWordsToBytes((unsigned char *)state, stateAsWords);
262
+ #endif
263
+ #ifdef KeccakReference
264
+ displayStateAsBytes(1, "State after permutation", (const unsigned char *)state, 800);
265
+ #endif
266
+ }
267
+
268
+ static void fromBytesToWords(tKeccakLane *stateAsWords, const unsigned char *state)
269
+ {
270
+ unsigned int i, j;
271
+
272
+ for(i=0; i<nrLanes; i++) {
273
+ stateAsWords[i] = 0;
274
+ for(j=0; j<sizeof(tKeccakLane); j++)
275
+ stateAsWords[i] |= (tKeccakLane)(state[i*sizeof(tKeccakLane)+j]) << (8*j);
276
+ }
277
+ }
278
+
279
+ static void fromWordsToBytes(unsigned char *state, const tKeccakLane *stateAsWords)
280
+ {
281
+ unsigned int i, j;
282
+
283
+ for(i=0; i<nrLanes; i++)
284
+ for(j=0; j<sizeof(tKeccakLane); j++)
285
+ state[i*sizeof(tKeccakLane)+j] = (stateAsWords[i] >> (8*j)) & 0xFF;
286
+ }
287
+
288
+ void KeccakP800OnWords(tKeccakLane *state, unsigned int nrRounds)
289
+ {
290
+ unsigned int i;
291
+
292
+ #ifdef KeccakReference
293
+ displayStateAsLanes(3, "Same, with lanes as 32-bit words", state, 800);
294
+ #endif
295
+
296
+ for(i=(maxNrRounds-nrRounds); i<maxNrRounds; i++)
297
+ KeccakP800Round(state, i);
298
+ }
299
+
300
+ void KeccakP800Round(tKeccakLane *state, unsigned int indexRound)
301
+ {
302
+ #ifdef KeccakReference
303
+ displayRoundNumber(3, indexRound);
304
+ #endif
305
+
306
+ theta(state);
307
+ #ifdef KeccakReference
308
+ displayStateAsLanes(3, "After theta", state, 800);
309
+ #endif
310
+
311
+ rho(state);
312
+ #ifdef KeccakReference
313
+ displayStateAsLanes(3, "After rho", state, 800);
314
+ #endif
315
+
316
+ pi(state);
317
+ #ifdef KeccakReference
318
+ displayStateAsLanes(3, "After pi", state, 800);
319
+ #endif
320
+
321
+ chi(state);
322
+ #ifdef KeccakReference
323
+ displayStateAsLanes(3, "After chi", state, 800);
324
+ #endif
325
+
326
+ iota(state, indexRound);
327
+ #ifdef KeccakReference
328
+ displayStateAsLanes(3, "After iota", state, 800);
329
+ #endif
330
+ }
331
+
332
+ #define ROL32(a, offset) ((offset != 0) ? ((((tKeccakLane)a) << offset) ^ (((tKeccakLane)a) >> (sizeof(tKeccakLane)*8-offset))) : a)
333
+
334
+ static void theta(tKeccakLane *A)
335
+ {
336
+ unsigned int x, y;
337
+ tKeccakLane C[5], D[5];
338
+
339
+ for(x=0; x<5; x++) {
340
+ C[x] = 0;
341
+ for(y=0; y<5; y++)
342
+ C[x] ^= A[index(x, y)];
343
+ }
344
+ for(x=0; x<5; x++)
345
+ D[x] = ROL32(C[(x+1)%5], 1) ^ C[(x+4)%5];
346
+ for(x=0; x<5; x++)
347
+ for(y=0; y<5; y++)
348
+ A[index(x, y)] ^= D[x];
349
+ }
350
+
351
+ static void rho(tKeccakLane *A)
352
+ {
353
+ unsigned int x, y;
354
+
355
+ for(x=0; x<5; x++) for(y=0; y<5; y++)
356
+ A[index(x, y)] = ROL32(A[index(x, y)], KeccakRhoOffsets[index(x, y)]);
357
+ }
358
+
359
+ static void pi(tKeccakLane *A)
360
+ {
361
+ unsigned int x, y;
362
+ tKeccakLane tempA[25];
363
+
364
+ for(x=0; x<5; x++) for(y=0; y<5; y++)
365
+ tempA[index(x, y)] = A[index(x, y)];
366
+ for(x=0; x<5; x++) for(y=0; y<5; y++)
367
+ A[index(0*x+1*y, 2*x+3*y)] = tempA[index(x, y)];
368
+ }
369
+
370
+ static void chi(tKeccakLane *A)
371
+ {
372
+ unsigned int x, y;
373
+ tKeccakLane C[5];
374
+
375
+ for(y=0; y<5; y++) {
376
+ for(x=0; x<5; x++)
377
+ C[x] = A[index(x, y)] ^ ((~A[index(x+1, y)]) & A[index(x+2, y)]);
378
+ for(x=0; x<5; x++)
379
+ A[index(x, y)] = C[x];
380
+ }
381
+ }
382
+
383
+ static void iota(tKeccakLane *A, unsigned int indexRound)
384
+ {
385
+ A[index(0, 0)] ^= KeccakRoundConstants[indexRound];
386
+ }
387
+
388
+ /* ---------------------------------------------------------------- */
389
+
390
+ void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
391
+ {
392
+ #if DEBUG
393
+ assert(offset < 100);
394
+ assert(offset+length <= 100);
395
+ #endif
396
+ memcpy(data, (unsigned char*)state+offset, length);
397
+ }
398
+
399
+ /* ---------------------------------------------------------------- */
400
+
401
+ void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
402
+ {
403
+ unsigned int i;
404
+
405
+ #if DEBUG
406
+ assert(offset < 100);
407
+ assert(offset+length <= 100);
408
+ #endif
409
+ for(i=0; i<length; i++)
410
+ output[i] = input[i] ^ ((unsigned char *)state)[offset+i];
411
+ }
412
+
413
+ /* ---------------------------------------------------------------- */
414
+
415
+ void KeccakP800_DisplayRoundConstants(FILE *f)
416
+ {
417
+ unsigned int i;
418
+
419
+ for(i=0; i<maxNrRounds; i++) {
420
+ fprintf(f, "RC[%02i][0][0] = ", i);
421
+ fprintf(f, "%08X", (unsigned int)(KeccakRoundConstants[i]));
422
+ fprintf(f, "\n");
423
+ }
424
+ fprintf(f, "\n");
425
+ }
426
+
427
+ void KeccakP800_DisplayRhoOffsets(FILE *f)
428
+ {
429
+ unsigned int x, y;
430
+
431
+ for(y=0; y<5; y++) for(x=0; x<5; x++) {
432
+ fprintf(f, "RhoOffset[%i][%i] = ", x, y);
433
+ fprintf(f, "%2i", KeccakRhoOffsets[index(x, y)]);
434
+ fprintf(f, "\n");
435
+ }
436
+ fprintf(f, "\n");
437
+ }
@@ -0,0 +1,23 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
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 _KeccakP_800_reference_h_
18
+ #define _KeccakP_800_reference_h_
19
+
20
+ void KeccakP800_DisplayRoundConstants(FILE *f);
21
+ void KeccakP800_DisplayRhoOffsets(FILE *f);
22
+
23
+ #endif
@@ -0,0 +1,57 @@
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 "config.h"
21
+
22
+ /* Ketje frame bits */
23
+ #define FRAMEBITSEMPTY 0x01
24
+ #define FRAMEBITS0 0x02
25
+ #define FRAMEBITS00 0x04
26
+ #define FRAMEBITS10 0x05
27
+ #define FRAMEBITS01 0x06
28
+ #define FRAMEBITS11 0x07
29
+
30
+ /* Ketje rounds */
31
+ #define Ket_StartRounds 12
32
+ #define Ket_StepRounds 1
33
+ #define Ket_StrideRounds 6
34
+
35
+ #define Ketje_LaneSize (SnP_width/8/25)
36
+ #define Ketje_BlockSize (((SnP_width <= 400)?2:4)*Ketje_LaneSize)
37
+
38
+ #define XKCP_DeclareKetFunctions(prefix) \
39
+ void prefix##_StateAddByte( void *state, unsigned char value, unsigned int offset ); \
40
+ unsigned char prefix##_StateExtractByte( void *state, unsigned int offset ); \
41
+ void prefix##_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length ); \
42
+ void prefix##_Step( void *state, unsigned int size, unsigned char frameAndPaddingBits ); \
43
+ void prefix##_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks ); \
44
+ void prefix##_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks ); \
45
+ void prefix##_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks ); \
46
+
47
+ #ifdef XKCP_has_KeccakP200
48
+ #include "KeccakP-200-SnP.h"
49
+ XKCP_DeclareKetFunctions(KetJr)
50
+ #endif
51
+
52
+ #ifdef XKCP_has_KeccakP400
53
+ #include "KeccakP-400-SnP.h"
54
+ XKCP_DeclareKetFunctions(KetSr)
55
+ #endif
56
+
57
+ #endif