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,53 @@
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_1600_SnP_h_
22
+ #define _KeccakP_1600_SnP_h_
23
+
24
+ #include <stddef.h>
25
+
26
+ #ifdef __MINGW32__
27
+ #define FORCE_SYSV __attribute__((sysv_abi))
28
+ #else
29
+ #define FORCE_SYSV
30
+ #endif
31
+
32
+ #define KeccakP1600_implementation "AVX-512 optimized implementation"
33
+ #define KeccakP1600_stateSizeInBytes 200
34
+ #define KeccakP1600_stateAlignment 8
35
+ #define KeccakF1600_FastLoop_supported
36
+ #define KeccakP1600_12rounds_FastLoop_supported
37
+
38
+ #define KeccakP1600_StaticInitialize()
39
+ FORCE_SYSV void KeccakP1600_Initialize(void *state);
40
+ //void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset);
41
+ #define KeccakP1600_AddByte(state, byte, offset) ((unsigned char*)(state))[(offset)] ^= (byte)
42
+ FORCE_SYSV void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
43
+ FORCE_SYSV void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
44
+ FORCE_SYSV void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount);
45
+ FORCE_SYSV void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds);
46
+ FORCE_SYSV void KeccakP1600_Permute_12rounds(void *state);
47
+ FORCE_SYSV void KeccakP1600_Permute_24rounds(void *state);
48
+ FORCE_SYSV void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
49
+ FORCE_SYSV void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
50
+ FORCE_SYSV size_t KeccakF1600_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen);
51
+ FORCE_SYSV size_t KeccakP1600_12rounds_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen);
52
+
53
+ #endif
@@ -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 Gilles Van Assche, hereby denoted as "the implementer".
8
+
9
+ For more information, feedback or questions, please refer to the Keccak Team website:
10
+ https://keccak.team/
11
+
12
+ To the extent possible under law, the implementer has waived all copyright
13
+ and related or neighboring rights to the source code in this file.
14
+ http://creativecommons.org/publicdomain/zero/1.0/
15
+
16
+ ---
17
+
18
+ Please refer to SnP-documentation.h for more details.
19
+ */
20
+
21
+ #ifndef _KeccakP_1600_SnP_h_
22
+ #define _KeccakP_1600_SnP_h_
23
+
24
+ #include "KeccakP-1600-XOP-config.h"
25
+
26
+ #define KeccakP1600_implementation "implementation optimized for XOP (" KeccakP1600_implementation_config ")"
27
+ #define KeccakP1600_stateSizeInBytes 200
28
+ #define KeccakP1600_stateAlignment 8
29
+
30
+ #include <stddef.h>
31
+
32
+ #define KeccakP1600_StaticInitialize()
33
+ void KeccakP1600_Initialize(void *state);
34
+ void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset);
35
+ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
36
+ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
37
+ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount);
38
+ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds);
39
+ void KeccakP1600_Permute_12rounds(void *state);
40
+ void KeccakP1600_Permute_24rounds(void *state);
41
+ void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
42
+ void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
43
+
44
+ #endif
@@ -0,0 +1,476 @@
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 Gilles Van Assche, hereby denoted as "the implementer".
8
+
9
+ For more information, feedback or questions, please refer to the Keccak Team website:
10
+ https://keccak.team/
11
+
12
+ To the extent possible under law, the implementer has waived all copyright
13
+ and related or neighboring rights to the source code in this file.
14
+ http://creativecommons.org/publicdomain/zero/1.0/
15
+
16
+ ---
17
+
18
+ This file implements Keccak-p[1600] in a SnP-compatible way.
19
+ Please refer to SnP-documentation.h for more details.
20
+
21
+ This implementation comes with KeccakP-1600-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
+ #include <stdint.h>
26
+ #include <string.h>
27
+ #include <stdlib.h>
28
+ #include "KeccakP-1600-XOP-config.h"
29
+
30
+ #include "align.h"
31
+ #ifdef KeccakP1600_fullUnrolling
32
+ #define FullUnrolling
33
+ #else
34
+ #define Unrolling KeccakP1600_unrolling
35
+ #endif
36
+ #include "KeccakP-1600-unrolling.macros"
37
+ #include "SnP-Relaned.h"
38
+
39
+ #include <x86intrin.h>
40
+ typedef __m128i V64;
41
+ typedef __m128i V128;
42
+
43
+ #define LOAD64(a) _mm_loadl_epi64((const V64 *)&(a))
44
+ #define CONST64(a) _mm_loadl_epi64((const V64 *)&(a))
45
+ #define STORE64(a, b) _mm_storel_epi64((V64 *)&(a), b)
46
+ #define XOR64(a, b) _mm_xor_si128(a, b)
47
+ #define XOReq64(a, b) a = _mm_xor_si128(a, b)
48
+
49
+ #define ANDnu128(a, b) _mm_andnot_si128(a, b)
50
+ #define LOAD6464(a, b) _mm_set_epi64((__m64)(a), (__m64)(b))
51
+ #define CONST128(a) _mm_load_si128((const V128 *)&(a))
52
+ #define LOAD128(a) _mm_load_si128((const V128 *)&(a))
53
+ #define LOAD128u(a) _mm_loadu_si128((const V128 *)&(a))
54
+ #define STORE128(a, b) _mm_store_si128((V128 *)&(a), b)
55
+ #define XOR128(a, b) _mm_xor_si128(a, b)
56
+ #define XOReq128(a, b) a = _mm_xor_si128(a, b)
57
+ #define ZERO128() _mm_setzero_si128()
58
+
59
+ #define SWAP64(a) _mm_shuffle_epi32(a, 0x4E)
60
+ #define GET64LOLO(a, b) _mm_unpacklo_epi64(a, b)
61
+ #define GET64HIHI(a, b) _mm_unpackhi_epi64(a, b)
62
+ #define GET64LOHI(a, b) ((__m128i)_mm_blend_pd((__m128d)a, (__m128d)b, 2))
63
+ #define GET64HILO(a, b) SWAP64(GET64LOHI(b, a))
64
+ #define COPY64HI2LO(a) _mm_shuffle_epi32(a, 0xEE)
65
+ #define COPY64LO2HI(a) _mm_shuffle_epi32(a, 0x44)
66
+
67
+ #define ROL6464same(a, o) _mm_roti_epi64(a, o)
68
+ #define ROL6464(a, r1, r2) _mm_rot_epi64(a, CONST128( rot_##r1##_##r2 ))
69
+ ALIGN(16) const uint64_t rot_0_20[2] = { 0, 20};
70
+ ALIGN(16) const uint64_t rot_44_3[2] = {44, 3};
71
+ ALIGN(16) const uint64_t rot_43_45[2] = {43, 45};
72
+ ALIGN(16) const uint64_t rot_21_61[2] = {21, 61};
73
+ ALIGN(16) const uint64_t rot_14_28[2] = {14, 28};
74
+ ALIGN(16) const uint64_t rot_1_36[2] = { 1, 36};
75
+ ALIGN(16) const uint64_t rot_6_10[2] = { 6, 10};
76
+ ALIGN(16) const uint64_t rot_25_15[2] = {25, 15};
77
+ ALIGN(16) const uint64_t rot_8_56[2] = { 8, 56};
78
+ ALIGN(16) const uint64_t rot_18_27[2] = {18, 27};
79
+ ALIGN(16) const uint64_t rot_62_55[2] = {62, 55};
80
+ ALIGN(16) const uint64_t rot_39_41[2] = {39, 41};
81
+
82
+ /* ---------------------------------------------------------------- */
83
+
84
+ void KeccakP1600_Initialize(void *state)
85
+ {
86
+ memset(state, 0, 200);
87
+ }
88
+
89
+ /* ---------------------------------------------------------------- */
90
+
91
+ void KeccakP1600_AddBytesInLane(void *state, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length)
92
+ {
93
+ if (length == 0)
94
+ return;
95
+ uint64_t lane;
96
+ if (length == 1)
97
+ lane = data[0];
98
+ else {
99
+ lane = 0;
100
+ memcpy(&lane, data, length);
101
+ }
102
+ lane <<= offset*8;
103
+ ((uint64_t*)state)[lanePosition] ^= lane;
104
+ }
105
+
106
+ /* ---------------------------------------------------------------- */
107
+
108
+ void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int laneCount)
109
+ {
110
+ unsigned int i = 0;
111
+ for( ; (i+8)<=laneCount; i+=8) {
112
+ ((uint64_t*)state)[i+0] ^= ((uint64_t*)data)[i+0];
113
+ ((uint64_t*)state)[i+1] ^= ((uint64_t*)data)[i+1];
114
+ ((uint64_t*)state)[i+2] ^= ((uint64_t*)data)[i+2];
115
+ ((uint64_t*)state)[i+3] ^= ((uint64_t*)data)[i+3];
116
+ ((uint64_t*)state)[i+4] ^= ((uint64_t*)data)[i+4];
117
+ ((uint64_t*)state)[i+5] ^= ((uint64_t*)data)[i+5];
118
+ ((uint64_t*)state)[i+6] ^= ((uint64_t*)data)[i+6];
119
+ ((uint64_t*)state)[i+7] ^= ((uint64_t*)data)[i+7];
120
+ }
121
+ for( ; (i+4)<=laneCount; i+=4) {
122
+ ((uint64_t*)state)[i+0] ^= ((uint64_t*)data)[i+0];
123
+ ((uint64_t*)state)[i+1] ^= ((uint64_t*)data)[i+1];
124
+ ((uint64_t*)state)[i+2] ^= ((uint64_t*)data)[i+2];
125
+ ((uint64_t*)state)[i+3] ^= ((uint64_t*)data)[i+3];
126
+ }
127
+ for( ; (i+2)<=laneCount; i+=2) {
128
+ ((uint64_t*)state)[i+0] ^= ((uint64_t*)data)[i+0];
129
+ ((uint64_t*)state)[i+1] ^= ((uint64_t*)data)[i+1];
130
+ }
131
+ if (i<laneCount) {
132
+ ((uint64_t*)state)[i+0] ^= ((uint64_t*)data)[i+0];
133
+ }
134
+ }
135
+
136
+ /* ---------------------------------------------------------------- */
137
+
138
+ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
139
+ {
140
+ uint64_t lane = byte;
141
+ lane <<= (offset%8)*8;
142
+ ((uint64_t*)state)[offset/8] ^= lane;
143
+ }
144
+
145
+ /* ---------------------------------------------------------------- */
146
+
147
+ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
148
+ {
149
+ SnP_AddBytes(state, data, offset, length, KeccakP1600_AddLanes, KeccakP1600_AddBytesInLane, 8);
150
+ }
151
+
152
+ /* ---------------------------------------------------------------- */
153
+
154
+ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
155
+ {
156
+ memcpy((unsigned char*)state+offset, data, length);
157
+ }
158
+
159
+ /* ---------------------------------------------------------------- */
160
+
161
+ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
162
+ {
163
+ memset(state, 0, byteCount);
164
+ }
165
+
166
+ /* ---------------------------------------------------------------- */
167
+
168
+ #define declareABCDE \
169
+ V128 Abage, Abegi, Abigo, Abogu, Abuga; \
170
+ V128 Akame, Akemi, Akimo, Akomu, Akuma; \
171
+ V128 Abae, Abio, Agae, Agio, Akae, Akio, Amae, Amio; \
172
+ V64 Aba, Abe, Abi, Abo, Abu; \
173
+ V64 Aga, Age, Agi, Ago, Agu; \
174
+ V64 Aka, Ake, Aki, Ako, Aku; \
175
+ V64 Ama, Ame, Ami, Amo, Amu; \
176
+ V128 Asase, Asiso; \
177
+ V64 Asu; \
178
+ V128 Bbage, Bbegi, Bbigo, Bbogu, Bbuga; \
179
+ V128 Bkame, Bkemi, Bkimo, Bkomu, Bkuma; \
180
+ V128 Bsase, Bsesi, Bsiso, Bsosu, Bsusa; \
181
+ V128 Cae, Cei, Cio, Cou, Cua; \
182
+ V128 Dau, Dea, Die, Doi, Duo; \
183
+ V128 Dua, Dae, Dei, Dio, Dou; \
184
+ V128 Ebage, Ebegi, Ebigo, Ebogu, Ebuga; \
185
+ V128 Ekame, Ekemi, Ekimo, Ekomu, Ekuma; \
186
+ V128 Esase, Esiso; \
187
+ V64 Esu; \
188
+ V128 Zero;
189
+
190
+ #define prepareTheta
191
+
192
+ #define computeD \
193
+ Cua = GET64LOLO(Cua, Cae); \
194
+ Dei = XOR128(Cae, ROL6464same(Cio, 1)); \
195
+ Dou = XOR128(Cio, ROL6464same(Cua, 1)); \
196
+ Cei = GET64HILO(Cae, Cio); \
197
+ Dae = XOR128(Cua, ROL6464same(Cei, 1)); \
198
+ Dau = GET64LOHI(Dae, Dou); \
199
+ Dea = SWAP64(Dae); \
200
+ Die = SWAP64(Dei); \
201
+ Doi = GET64LOLO(Dou, Die); \
202
+ Duo = SWAP64(Dou);
203
+
204
+ /* --- Theta Rho Pi Chi Iota Prepare-theta */
205
+ /* --- 64-bit lanes mapped to 64-bit and 128-bit words */
206
+ #define thetaRhoPiChiIotaPrepareTheta(i, A, E) \
207
+ computeD \
208
+ \
209
+ Bbage = XOR128(GET64LOHI(A##bage, A##bogu), Dau); \
210
+ Bbage = ROL6464(Bbage, 0, 20); \
211
+ Bbegi = XOR128(GET64HILO(A##bage, A##kame), Dea); \
212
+ Bbegi = ROL6464(Bbegi, 44, 3); \
213
+ Bbigo = XOR128(GET64LOHI(A##kimo, A##kame), Die); \
214
+ Bbigo = ROL6464(Bbigo, 43, 45); \
215
+ E##bage = XOR128(Bbage, ANDnu128(Bbegi, Bbigo)); \
216
+ XOReq128(E##bage, CONST64(KeccakF1600RoundConstants[i])); \
217
+ Cae = E##bage; \
218
+ Bbogu = XOR128(GET64HILO(A##kimo, A##siso), Doi); \
219
+ Bbogu = ROL6464(Bbogu, 21, 61); \
220
+ E##begi = XOR128(Bbegi, ANDnu128(Bbigo, Bbogu)); \
221
+ Cei = E##begi; \
222
+ Bbuga = XOR128(GET64LOLO(A##su, A##bogu), Duo); \
223
+ Bbuga = ROL6464(Bbuga, 14, 28); \
224
+ E##bigo = XOR128(Bbigo, ANDnu128(Bbogu, Bbuga)); \
225
+ Cio = E##bigo; \
226
+ E##bogu = XOR128(Bbogu, ANDnu128(Bbuga, Bbage)); \
227
+ Cou = E##bogu; \
228
+ E##buga = XOR128(Bbuga, ANDnu128(Bbage, Bbegi)); \
229
+ Cua = E##buga; \
230
+ \
231
+ Bkame = XOR128(GET64LOHI(A##begi, A##buga), Dea); \
232
+ Bkame = ROL6464(Bkame, 1, 36); \
233
+ Bkemi = XOR128(GET64HILO(A##begi, A##kemi), Die); \
234
+ Bkemi = ROL6464(Bkemi, 6, 10); \
235
+ Bkimo = XOR128(GET64LOHI(A##komu, A##kemi), Doi); \
236
+ Bkimo = ROL6464(Bkimo, 25, 15); \
237
+ E##kame = XOR128(Bkame, ANDnu128(Bkemi, Bkimo)); \
238
+ XOReq128(Cae, E##kame); \
239
+ Bkomu = XOR128(GET64HIHI(A##komu, A##siso), Duo); \
240
+ Bkomu = ROL6464(Bkomu, 8, 56); \
241
+ E##kemi = XOR128(Bkemi, ANDnu128(Bkimo, Bkomu)); \
242
+ XOReq128(Cei, E##kemi); \
243
+ Bkuma = XOR128(GET64LOLO(A##sase, A##buga), Dau); \
244
+ Bkuma = ROL6464(Bkuma, 18, 27); \
245
+ E##kimo = XOR128(Bkimo, ANDnu128(Bkomu, Bkuma)); \
246
+ XOReq128(Cio, E##kimo); \
247
+ E##komu = XOR128(Bkomu, ANDnu128(Bkuma, Bkame)); \
248
+ XOReq128(Cou, E##komu); \
249
+ E##kuma = XOR128(Bkuma, ANDnu128(Bkame, Bkemi)); \
250
+ XOReq128(Cua, E##kuma); \
251
+ \
252
+ Bsase = XOR128(A##bigo, SWAP64(Doi)); \
253
+ Bsase = ROL6464(Bsase, 62, 55); \
254
+ Bsiso = XOR128(A##kuma, SWAP64(Dau)); \
255
+ Bsiso = ROL6464(Bsiso, 39, 41); \
256
+ Bsusa = XOR64(COPY64HI2LO(A##sase), Dei); \
257
+ Bsusa = ROL6464same(Bsusa, 2); \
258
+ Bsusa = GET64LOLO(Bsusa, Bsase); \
259
+ Bsesi = GET64HILO(Bsase, Bsiso); \
260
+ Bsosu = GET64HILO(Bsiso, Bsusa); \
261
+ E##sase = XOR128(Bsase, ANDnu128(Bsesi, Bsiso)); \
262
+ XOReq128(Cae, E##sase); \
263
+ E##siso = XOR128(Bsiso, ANDnu128(Bsosu, Bsusa)); \
264
+ XOReq128(Cio, E##siso); \
265
+ Zero = ZERO128(); \
266
+ E##su = GET64LOLO(XOR128(Bsusa, ANDnu128(Bsase, Bsesi)), Zero); \
267
+ XOReq128(Cua, E##su); \
268
+ \
269
+ XOReq128(Cae, GET64HIHI(Cua, Zero)); \
270
+ XOReq128(Cae, GET64LOLO(Zero, Cei)); \
271
+ XOReq128(Cio, GET64HIHI(Cei, Zero)); \
272
+ XOReq128(Cio, GET64LOLO(Zero, Cou)); \
273
+ XOReq128(Cua, GET64HIHI(Cou, Zero)); \
274
+
275
+ /* --- Theta Rho Pi Chi Iota */
276
+ /* --- 64-bit lanes mapped to 64-bit and 128-bit words */
277
+ #define thetaRhoPiChiIota(i, A, E) thetaRhoPiChiIotaPrepareTheta(i, A, E)
278
+
279
+ const uint64_t KeccakF1600RoundConstants[24] = {
280
+ 0x0000000000000001ULL,
281
+ 0x0000000000008082ULL,
282
+ 0x800000000000808aULL,
283
+ 0x8000000080008000ULL,
284
+ 0x000000000000808bULL,
285
+ 0x0000000080000001ULL,
286
+ 0x8000000080008081ULL,
287
+ 0x8000000000008009ULL,
288
+ 0x000000000000008aULL,
289
+ 0x0000000000000088ULL,
290
+ 0x0000000080008009ULL,
291
+ 0x000000008000000aULL,
292
+ 0x000000008000808bULL,
293
+ 0x800000000000008bULL,
294
+ 0x8000000000008089ULL,
295
+ 0x8000000000008003ULL,
296
+ 0x8000000000008002ULL,
297
+ 0x8000000000000080ULL,
298
+ 0x000000000000800aULL,
299
+ 0x800000008000000aULL,
300
+ 0x8000000080008081ULL,
301
+ 0x8000000000008080ULL,
302
+ 0x0000000080000001ULL,
303
+ 0x8000000080008008ULL };
304
+
305
+ #define copyFromState(X, state) \
306
+ X##bae = LOAD128(state[ 0]); \
307
+ X##ba = X##bae; \
308
+ X##be = GET64HIHI(X##bae, X##bae); \
309
+ Cae = X##bae; \
310
+ X##bio = LOAD128(state[ 2]); \
311
+ X##bi = X##bio; \
312
+ X##bo = GET64HIHI(X##bio, X##bio); \
313
+ Cio = X##bio; \
314
+ X##bu = LOAD64(state[ 4]); \
315
+ Cua = X##bu; \
316
+ X##gae = LOAD128u(state[ 5]); \
317
+ X##ga = X##gae; \
318
+ X##buga = GET64LOLO(X##bu, X##ga); \
319
+ X##ge = GET64HIHI(X##gae, X##gae); \
320
+ X##bage = GET64LOLO(X##ba, X##ge); \
321
+ XOReq128(Cae, X##gae); \
322
+ X##gio = LOAD128u(state[ 7]); \
323
+ X##gi = X##gio; \
324
+ X##begi = GET64LOLO(X##be, X##gi); \
325
+ X##go = GET64HIHI(X##gio, X##gio); \
326
+ X##bigo = GET64LOLO(X##bi, X##go); \
327
+ XOReq128(Cio, X##gio); \
328
+ X##gu = LOAD64(state[ 9]); \
329
+ X##bogu = GET64LOLO(X##bo, X##gu); \
330
+ XOReq64(Cua, X##gu); \
331
+ X##kae = LOAD128(state[10]); \
332
+ X##ka = X##kae; \
333
+ X##ke = GET64HIHI(X##kae, X##kae); \
334
+ XOReq128(Cae, X##kae); \
335
+ X##kio = LOAD128(state[12]); \
336
+ X##ki = X##kio; \
337
+ X##ko = GET64HIHI(X##kio, X##kio); \
338
+ XOReq128(Cio, X##kio); \
339
+ X##kuma = LOAD128(state[14]); \
340
+ XOReq64(Cua, X##kuma); \
341
+ X##me = LOAD64(state[16]); \
342
+ X##kame = GET64LOLO(X##ka, X##me); \
343
+ XOReq128(Cae, GET64HIHI(X##kuma, X##kame)); \
344
+ X##mio = LOAD128u(state[17]); \
345
+ X##mi = X##mio; \
346
+ X##kemi = GET64LOLO(X##ke, X##mi); \
347
+ X##mo = GET64HIHI(X##mio, X##mio); \
348
+ X##kimo = GET64LOLO(X##ki, X##mo); \
349
+ XOReq128(Cio, X##mio); \
350
+ X##mu = LOAD64(state[19]); \
351
+ X##komu = GET64LOLO(X##ko, X##mu); \
352
+ XOReq64(Cua, X##mu); \
353
+ X##sase = LOAD128(state[20]); \
354
+ XOReq128(Cae, X##sase); \
355
+ X##siso = LOAD128(state[22]); \
356
+ XOReq128(Cio, X##siso); \
357
+ X##su = LOAD64(state[24]); \
358
+ XOReq64(Cua, X##su); \
359
+
360
+ #define copyToState(state, X) \
361
+ STORE64(state[ 0], X##bage); \
362
+ STORE64(state[ 1], X##begi); \
363
+ STORE64(state[ 2], X##bigo); \
364
+ STORE64(state[ 3], X##bogu); \
365
+ STORE128(state[ 4], X##buga); \
366
+ STORE64(state[ 6], COPY64HI2LO(X##bage)); \
367
+ STORE64(state[ 7], COPY64HI2LO(X##begi)); \
368
+ STORE64(state[ 8], COPY64HI2LO(X##bigo)); \
369
+ STORE64(state[ 9], COPY64HI2LO(X##bogu)); \
370
+ STORE64(state[10], X##kame); \
371
+ STORE64(state[11], X##kemi); \
372
+ STORE64(state[12], X##kimo); \
373
+ STORE64(state[13], X##komu); \
374
+ STORE128(state[14], X##kuma); \
375
+ STORE64(state[16], COPY64HI2LO(X##kame)); \
376
+ STORE64(state[17], COPY64HI2LO(X##kemi)); \
377
+ STORE64(state[18], COPY64HI2LO(X##kimo)); \
378
+ STORE64(state[19], COPY64HI2LO(X##komu)); \
379
+ STORE128(state[20], X##sase); \
380
+ STORE128(state[22], X##siso); \
381
+ STORE64(state[24], X##su); \
382
+
383
+ #define copyStateVariables(X, Y) \
384
+ X##bage = Y##bage; \
385
+ X##begi = Y##begi; \
386
+ X##bigo = Y##bigo; \
387
+ X##bogu = Y##bogu; \
388
+ X##buga = Y##buga; \
389
+ X##kame = Y##kame; \
390
+ X##kemi = Y##kemi; \
391
+ X##kimo = Y##kimo; \
392
+ X##komu = Y##komu; \
393
+ X##kuma = Y##kuma; \
394
+ X##sase = Y##sase; \
395
+ X##siso = Y##siso; \
396
+ X##su = Y##su; \
397
+
398
+ /* ---------------------------------------------------------------- */
399
+
400
+ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nr)
401
+ {
402
+ declareABCDE
403
+ unsigned int i;
404
+ uint64_t *stateAsLanes = (uint64_t*)state;
405
+
406
+ copyFromState(A, stateAsLanes)
407
+ roundsN(nr)
408
+ copyToState(stateAsLanes, A)
409
+ }
410
+
411
+ /* ---------------------------------------------------------------- */
412
+
413
+ void KeccakP1600_Permute_12rounds(void *state)
414
+ {
415
+ declareABCDE
416
+ #ifndef KeccakP1600_fullUnrolling
417
+ unsigned int i;
418
+ #endif
419
+ uint64_t *stateAsLanes = (uint64_t*)state;
420
+
421
+ copyFromState(A, stateAsLanes)
422
+ rounds12
423
+ copyToState(stateAsLanes, A)
424
+ }
425
+
426
+ /* ---------------------------------------------------------------- */
427
+
428
+ void KeccakP1600_Permute_24rounds(void *state)
429
+ {
430
+ declareABCDE
431
+ #ifndef KeccakP1600_fullUnrolling
432
+ unsigned int i;
433
+ #endif
434
+ uint64_t *stateAsLanes = (uint64_t*)state;
435
+
436
+ copyFromState(A, stateAsLanes)
437
+ rounds24
438
+ copyToState(stateAsLanes, A)
439
+ }
440
+
441
+ /* ---------------------------------------------------------------- */
442
+
443
+ void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
444
+ {
445
+ memcpy(data, (const unsigned char *)state+offset, length);
446
+ }
447
+
448
+ /* ---------------------------------------------------------------- */
449
+
450
+ void KeccakP1600_ExtractAndAddBytesInLane(const void *state, unsigned int lanePosition, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
451
+ {
452
+ uint64_t lane = ((uint64_t*)state)[lanePosition];
453
+ unsigned int i;
454
+ uint64_t lane1[1];
455
+ lane1[0] = lane;
456
+ for(i=0; i<length; i++)
457
+ output[i] = input[i] ^ ((uint8_t*)lane1)[offset+i];
458
+ }
459
+
460
+ /* ---------------------------------------------------------------- */
461
+
462
+ void KeccakP1600_ExtractAndAddLanes(const void *state, const unsigned char *input, unsigned char *output, unsigned int laneCount)
463
+ {
464
+ unsigned int i;
465
+
466
+ for(i=0; i<laneCount; i++) {
467
+ ((uint64_t*)output)[i] = ((uint64_t*)input)[i] ^ ((const uint64_t*)state)[i];
468
+ }
469
+ }
470
+
471
+ /* ---------------------------------------------------------------- */
472
+
473
+ void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
474
+ {
475
+ SnP_ExtractAndAddBytes(state, input, output, offset, length, KeccakP1600_ExtractAndAddLanes, KeccakP1600_ExtractAndAddBytesInLane, 8);
476
+ }
@@ -0,0 +1,6 @@
1
+ /*
2
+ This file defines some parameters of the implementation in the parent directory.
3
+ */
4
+
5
+ #define KeccakP1600_implementation_config "6 rounds unrolled"
6
+ #define KeccakP1600_unrolling 6
@@ -0,0 +1,6 @@
1
+ /*
2
+ This file defines some parameters of the implementation in the parent directory.
3
+ */
4
+
5
+ #define KeccakP1600_implementation_config "all rounds unrolled"
6
+ #define KeccakP1600_fullUnrolling