digest-kangarootwelve 0.2.0 → 0.3.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 (305) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +51 -11
  3. data/Rakefile +2 -2
  4. data/digest-kangarootwelve.gemspec +322 -42
  5. data/ext/digest/kangarootwelve/ext.c +1 -1
  6. data/ext/digest/kangarootwelve/extconf.rb +13 -1
  7. data/ext/digest/kangarootwelve/keccak/armv6m/KangarooTwelve.link.c +1 -0
  8. data/ext/digest/kangarootwelve/keccak/armv6m/KeccakDuplexWidth1600.link.c +1 -0
  9. data/ext/digest/kangarootwelve/keccak/armv6m/KeccakP-1600-SnP.h +36 -0
  10. data/ext/digest/kangarootwelve/{KeccakP-1600-times2-SnP.h → keccak/armv6m/KeccakP-1600-times2-SnP.h} +10 -10
  11. data/ext/digest/kangarootwelve/{KeccakP-1600-times2-on1.c → keccak/armv6m/KeccakP-1600-times2-on1.c} +13 -7
  12. data/ext/digest/kangarootwelve/{KeccakP-1600-times4-SnP.h → keccak/armv6m/KeccakP-1600-times4-SnP.h} +10 -10
  13. data/ext/digest/kangarootwelve/{KeccakP-1600-times4-on1.c → keccak/armv6m/KeccakP-1600-times4-on1.c} +13 -7
  14. data/ext/digest/kangarootwelve/{KeccakP-1600-times8-SnP.h → keccak/armv6m/KeccakP-1600-times8-SnP.h} +10 -10
  15. data/ext/digest/kangarootwelve/{KeccakP-1600-times8-on1.c → keccak/armv6m/KeccakP-1600-times8-on1.c} +13 -7
  16. data/ext/digest/kangarootwelve/keccak/armv6m/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +1334 -0
  17. data/ext/digest/kangarootwelve/keccak/armv6m/KeccakSpongeWidth1600.link.c +1 -0
  18. data/ext/digest/kangarootwelve/{PlSnP-Fallback.inc → keccak/armv6m/PlSnP-Fallback.inc} +11 -7
  19. data/ext/digest/kangarootwelve/keccak/armv6m/ext.link.c +1 -0
  20. data/ext/digest/kangarootwelve/keccak/armv7a/KangarooTwelve.link.c +1 -0
  21. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakDuplexWidth1600.link.c +1 -0
  22. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakP-1600-SnP.h +37 -0
  23. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakP-1600-armv7a-le-neon-gcc.s +826 -0
  24. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +1245 -0
  25. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakP-1600-times2-SnP.h +38 -0
  26. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakP-1600-times4-SnP.h +45 -0
  27. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakP-1600-times4-on2.c +38 -0
  28. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakP-1600-times8-SnP.h +45 -0
  29. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakP-1600-times8-on2.c +38 -0
  30. data/ext/digest/kangarootwelve/keccak/armv7a/KeccakSpongeWidth1600.link.c +1 -0
  31. data/ext/digest/kangarootwelve/keccak/armv7a/PlSnP-Fallback.inc +287 -0
  32. data/ext/digest/kangarootwelve/keccak/armv7a/ext.link.c +1 -0
  33. data/ext/digest/kangarootwelve/keccak/armv7m/KangarooTwelve.link.c +1 -0
  34. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakDuplexWidth1600.link.c +1 -0
  35. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakP-1600-SnP.h +36 -0
  36. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +1170 -0
  37. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakP-1600-times2-SnP.h +45 -0
  38. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakP-1600-times2-on1.c +37 -0
  39. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakP-1600-times4-SnP.h +45 -0
  40. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakP-1600-times4-on1.c +37 -0
  41. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakP-1600-times8-SnP.h +45 -0
  42. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakP-1600-times8-on1.c +37 -0
  43. data/ext/digest/kangarootwelve/keccak/armv7m/KeccakSpongeWidth1600.link.c +1 -0
  44. data/ext/digest/kangarootwelve/keccak/armv7m/PlSnP-Fallback.inc +287 -0
  45. data/ext/digest/kangarootwelve/keccak/armv7m/ext.link.c +1 -0
  46. data/ext/digest/kangarootwelve/keccak/armv8a/KangarooTwelve.link.c +1 -0
  47. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakDuplexWidth1600.link.c +1 -0
  48. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakP-1600-SnP.h +28 -0
  49. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakP-1600-armv8a-neon.s +537 -0
  50. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakP-1600-times2-SnP.h +45 -0
  51. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakP-1600-times2-on1.c +37 -0
  52. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakP-1600-times4-SnP.h +45 -0
  53. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakP-1600-times4-on1.c +37 -0
  54. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakP-1600-times8-SnP.h +45 -0
  55. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakP-1600-times8-on1.c +37 -0
  56. data/ext/digest/kangarootwelve/keccak/armv8a/KeccakSpongeWidth1600.link.c +1 -0
  57. data/ext/digest/kangarootwelve/keccak/armv8a/PlSnP-Fallback.inc +287 -0
  58. data/ext/digest/kangarootwelve/keccak/armv8a/ext.link.c +1 -0
  59. data/ext/digest/kangarootwelve/keccak/asmx86-64/KangarooTwelve.link.c +1 -0
  60. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakDuplexWidth1600.link.c +1 -0
  61. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakP-1600-SnP.h +37 -0
  62. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakP-1600-times2-SnP.h +45 -0
  63. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakP-1600-times2-on1.c +37 -0
  64. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakP-1600-times4-SnP.h +45 -0
  65. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakP-1600-times4-on1.c +37 -0
  66. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakP-1600-times8-SnP.h +45 -0
  67. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakP-1600-times8-on1.c +37 -0
  68. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakP-1600-x86-64-gas.s +1190 -0
  69. data/ext/digest/kangarootwelve/keccak/asmx86-64/KeccakSpongeWidth1600.link.c +1 -0
  70. data/ext/digest/kangarootwelve/keccak/asmx86-64/PlSnP-Fallback.inc +287 -0
  71. data/ext/digest/kangarootwelve/keccak/asmx86-64/ext.link.c +1 -0
  72. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KangarooTwelve.link.c +1 -0
  73. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakDuplexWidth1600.link.c +1 -0
  74. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakP-1600-SnP.h +37 -0
  75. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakP-1600-times2-SnP.h +45 -0
  76. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakP-1600-times2-on1.c +37 -0
  77. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakP-1600-times4-SnP.h +45 -0
  78. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakP-1600-times4-on1.c +37 -0
  79. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakP-1600-times8-SnP.h +45 -0
  80. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakP-1600-times8-on1.c +37 -0
  81. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakP-1600-x86-64-shld-gas.s +1190 -0
  82. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/KeccakSpongeWidth1600.link.c +1 -0
  83. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/PlSnP-Fallback.inc +287 -0
  84. data/ext/digest/kangarootwelve/keccak/asmx86-64shld/ext.link.c +1 -0
  85. data/ext/digest/kangarootwelve/keccak/avr8/KangarooTwelve.link.c +1 -0
  86. data/ext/digest/kangarootwelve/keccak/avr8/KeccakDuplexWidth1600.link.c +1 -0
  87. data/ext/digest/kangarootwelve/keccak/avr8/KeccakP-1600-SnP.h +37 -0
  88. data/ext/digest/kangarootwelve/keccak/avr8/KeccakP-1600-avr8-fast.s +1116 -0
  89. data/ext/digest/kangarootwelve/keccak/avr8/KeccakP-1600-times2-SnP.h +45 -0
  90. data/ext/digest/kangarootwelve/keccak/avr8/KeccakP-1600-times2-on1.c +37 -0
  91. data/ext/digest/kangarootwelve/keccak/avr8/KeccakP-1600-times4-SnP.h +45 -0
  92. data/ext/digest/kangarootwelve/keccak/avr8/KeccakP-1600-times4-on1.c +37 -0
  93. data/ext/digest/kangarootwelve/keccak/avr8/KeccakP-1600-times8-SnP.h +45 -0
  94. data/ext/digest/kangarootwelve/keccak/avr8/KeccakP-1600-times8-on1.c +37 -0
  95. data/ext/digest/kangarootwelve/keccak/avr8/KeccakSpongeWidth1600.link.c +1 -0
  96. data/ext/digest/kangarootwelve/keccak/avr8/PlSnP-Fallback.inc +287 -0
  97. data/ext/digest/kangarootwelve/keccak/avr8/ext.link.c +1 -0
  98. data/ext/digest/kangarootwelve/keccak/bulldozer/KangarooTwelve.link.c +1 -0
  99. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakDuplexWidth1600.link.c +1 -0
  100. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-SnP.h +39 -0
  101. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-XOP-config.h +6 -0
  102. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-XOP.c +473 -0
  103. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-times2-SIMD128.c +954 -0
  104. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-times2-SnP.h +47 -0
  105. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-times4-SnP.h +45 -0
  106. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-times4-on2.c +38 -0
  107. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-times8-SnP.h +45 -0
  108. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-times8-on2.c +38 -0
  109. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakP-1600-unrolling.macros +302 -0
  110. data/ext/digest/kangarootwelve/keccak/bulldozer/KeccakSpongeWidth1600.link.c +1 -0
  111. data/ext/digest/kangarootwelve/keccak/bulldozer/PlSnP-Fallback.inc +287 -0
  112. data/ext/digest/kangarootwelve/keccak/bulldozer/SIMD128-config.h +9 -0
  113. data/ext/digest/kangarootwelve/{SnP-Relaned.h → keccak/bulldozer/SnP-Relaned.h} +13 -7
  114. data/ext/digest/kangarootwelve/keccak/bulldozer/ext.link.c +1 -0
  115. data/ext/digest/kangarootwelve/{KangarooTwelve.c → keccak/common/KangarooTwelve.c} +6 -10
  116. data/ext/digest/kangarootwelve/{KangarooTwelve.h → keccak/common/KangarooTwelve.h} +3 -7
  117. data/ext/digest/kangarootwelve/keccak/common/KeccakDuplex-common.h +37 -0
  118. data/ext/digest/kangarootwelve/keccak/common/KeccakDuplex.inc +192 -0
  119. data/ext/digest/kangarootwelve/keccak/common/KeccakDuplexWidth1600.c +34 -0
  120. data/ext/digest/kangarootwelve/keccak/common/KeccakDuplexWidth1600.h +25 -0
  121. data/ext/digest/kangarootwelve/{KeccakSponge-common.h → keccak/common/KeccakSponge-common.h} +5 -7
  122. data/ext/digest/kangarootwelve/{KeccakSponge.inc → keccak/common/KeccakSponge.inc} +6 -8
  123. data/ext/digest/kangarootwelve/{KeccakSpongeWidth1600.c → keccak/common/KeccakSpongeWidth1600.c} +6 -8
  124. data/ext/digest/kangarootwelve/{KeccakSpongeWidth1600.h → keccak/common/KeccakSpongeWidth1600.h} +5 -7
  125. data/ext/digest/kangarootwelve/{Phases.h → keccak/common/Phases.h} +3 -7
  126. data/ext/digest/kangarootwelve/{align.h → keccak/common/align.h} +5 -7
  127. data/ext/digest/kangarootwelve/{brg_endian.h → keccak/common/brg_endian.h} +0 -0
  128. data/ext/digest/kangarootwelve/keccak/compact/KangarooTwelve.link.c +1 -0
  129. data/ext/digest/kangarootwelve/keccak/compact/KeccakDuplexWidth1600.link.c +1 -0
  130. data/ext/digest/kangarootwelve/{KeccakP-1600-SnP.h → keccak/compact/KeccakP-1600-SnP.h} +7 -10
  131. data/ext/digest/kangarootwelve/{KeccakP-1600-compact64.c → keccak/compact/KeccakP-1600-compact64.c} +11 -7
  132. data/ext/digest/kangarootwelve/keccak/compact/KeccakP-1600-times2-SnP.h +45 -0
  133. data/ext/digest/kangarootwelve/keccak/compact/KeccakP-1600-times2-on1.c +37 -0
  134. data/ext/digest/kangarootwelve/keccak/compact/KeccakP-1600-times4-SnP.h +45 -0
  135. data/ext/digest/kangarootwelve/keccak/compact/KeccakP-1600-times4-on1.c +37 -0
  136. data/ext/digest/kangarootwelve/keccak/compact/KeccakP-1600-times8-SnP.h +45 -0
  137. data/ext/digest/kangarootwelve/keccak/compact/KeccakP-1600-times8-on1.c +37 -0
  138. data/ext/digest/kangarootwelve/keccak/compact/KeccakSpongeWidth1600.link.c +1 -0
  139. data/ext/digest/kangarootwelve/keccak/compact/PlSnP-Fallback.inc +287 -0
  140. data/ext/digest/kangarootwelve/keccak/compact/SnP-Relaned.h +140 -0
  141. data/ext/digest/kangarootwelve/keccak/compact/ext.link.c +1 -0
  142. data/ext/digest/kangarootwelve/keccak/generic32/KangarooTwelve.link.c +1 -0
  143. data/ext/digest/kangarootwelve/keccak/generic32/KeccakDuplexWidth1600.link.c +1 -0
  144. data/ext/digest/kangarootwelve/keccak/generic32/KeccakP-1600-SnP.h +38 -0
  145. data/ext/digest/kangarootwelve/keccak/generic32/KeccakP-1600-inplace32BI.c +1162 -0
  146. data/ext/digest/kangarootwelve/keccak/generic32/KeccakP-1600-times2-SnP.h +45 -0
  147. data/ext/digest/kangarootwelve/keccak/generic32/KeccakP-1600-times2-on1.c +37 -0
  148. data/ext/digest/kangarootwelve/keccak/generic32/KeccakP-1600-times4-SnP.h +45 -0
  149. data/ext/digest/kangarootwelve/keccak/generic32/KeccakP-1600-times4-on1.c +37 -0
  150. data/ext/digest/kangarootwelve/keccak/generic32/KeccakP-1600-times8-SnP.h +45 -0
  151. data/ext/digest/kangarootwelve/keccak/generic32/KeccakP-1600-times8-on1.c +37 -0
  152. data/ext/digest/kangarootwelve/keccak/generic32/KeccakSpongeWidth1600.link.c +1 -0
  153. data/ext/digest/kangarootwelve/keccak/generic32/PlSnP-Fallback.inc +287 -0
  154. data/ext/digest/kangarootwelve/keccak/generic32/SnP-Relaned.h +140 -0
  155. data/ext/digest/kangarootwelve/keccak/generic32/ext.link.c +1 -0
  156. data/ext/digest/kangarootwelve/keccak/generic32lc/KangarooTwelve.link.c +1 -0
  157. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakDuplexWidth1600.link.c +1 -0
  158. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakP-1600-SnP.h +38 -0
  159. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakP-1600-inplace32BI.c +1162 -0
  160. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakP-1600-times2-SnP.h +45 -0
  161. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakP-1600-times2-on1.c +37 -0
  162. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakP-1600-times4-SnP.h +45 -0
  163. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakP-1600-times4-on1.c +37 -0
  164. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakP-1600-times8-SnP.h +45 -0
  165. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakP-1600-times8-on1.c +37 -0
  166. data/ext/digest/kangarootwelve/keccak/generic32lc/KeccakSpongeWidth1600.link.c +1 -0
  167. data/ext/digest/kangarootwelve/keccak/generic32lc/PlSnP-Fallback.inc +287 -0
  168. data/ext/digest/kangarootwelve/keccak/generic32lc/SnP-Relaned.h +140 -0
  169. data/ext/digest/kangarootwelve/keccak/generic32lc/ext.link.c +1 -0
  170. data/ext/digest/kangarootwelve/keccak/generic64/KangarooTwelve.link.c +1 -0
  171. data/ext/digest/kangarootwelve/keccak/generic64/KeccakDuplexWidth1600.link.c +1 -0
  172. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-64.macros +2195 -0
  173. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-SnP.h +49 -0
  174. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-opt64-config.h +6 -0
  175. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-opt64.c +541 -0
  176. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-times2-SnP.h +45 -0
  177. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-times2-on1.c +37 -0
  178. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-times4-SnP.h +45 -0
  179. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-times4-on1.c +37 -0
  180. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-times8-SnP.h +45 -0
  181. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-times8-on1.c +37 -0
  182. data/ext/digest/kangarootwelve/keccak/generic64/KeccakP-1600-unrolling.macros +302 -0
  183. data/ext/digest/kangarootwelve/keccak/generic64/KeccakSpongeWidth1600.link.c +1 -0
  184. data/ext/digest/kangarootwelve/keccak/generic64/PlSnP-Fallback.inc +287 -0
  185. data/ext/digest/kangarootwelve/keccak/generic64/SnP-Relaned.h +140 -0
  186. data/ext/digest/kangarootwelve/keccak/generic64/ext.link.c +1 -0
  187. data/ext/digest/kangarootwelve/keccak/generic64lc/KangarooTwelve.link.c +1 -0
  188. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakDuplexWidth1600.link.c +1 -0
  189. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-64.macros +2195 -0
  190. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-SnP.h +49 -0
  191. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-opt64-config.h +7 -0
  192. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-opt64.c +541 -0
  193. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-times2-SnP.h +45 -0
  194. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-times2-on1.c +37 -0
  195. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-times4-SnP.h +45 -0
  196. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-times4-on1.c +37 -0
  197. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-times8-SnP.h +45 -0
  198. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-times8-on1.c +37 -0
  199. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakP-1600-unrolling.macros +302 -0
  200. data/ext/digest/kangarootwelve/keccak/generic64lc/KeccakSpongeWidth1600.link.c +1 -0
  201. data/ext/digest/kangarootwelve/keccak/generic64lc/PlSnP-Fallback.inc +287 -0
  202. data/ext/digest/kangarootwelve/keccak/generic64lc/SnP-Relaned.h +140 -0
  203. data/ext/digest/kangarootwelve/keccak/generic64lc/ext.link.c +1 -0
  204. data/ext/digest/kangarootwelve/keccak/haswell/KangarooTwelve.link.c +1 -0
  205. data/ext/digest/kangarootwelve/keccak/haswell/KeccakDuplexWidth1600.link.c +1 -0
  206. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-AVX2.s +993 -0
  207. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-SnP.h +41 -0
  208. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-times2-SIMD128.c +954 -0
  209. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-times2-SnP.h +47 -0
  210. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-times4-SIMD256.c +1303 -0
  211. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-times4-SnP.h +53 -0
  212. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-times8-SnP.h +45 -0
  213. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-times8-on4.c +38 -0
  214. data/ext/digest/kangarootwelve/keccak/haswell/KeccakP-1600-unrolling.macros +302 -0
  215. data/ext/digest/kangarootwelve/keccak/haswell/KeccakSpongeWidth1600.link.c +1 -0
  216. data/ext/digest/kangarootwelve/keccak/haswell/PlSnP-Fallback.inc +287 -0
  217. data/ext/digest/kangarootwelve/keccak/haswell/SIMD128-config.h +8 -0
  218. data/ext/digest/kangarootwelve/keccak/haswell/SIMD256-config.h +7 -0
  219. data/ext/digest/kangarootwelve/keccak/haswell/ext.link.c +1 -0
  220. data/ext/digest/kangarootwelve/keccak/nehalem/KangarooTwelve.link.c +1 -0
  221. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakDuplexWidth1600.link.c +1 -0
  222. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-64.macros +2195 -0
  223. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-SnP.h +49 -0
  224. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-opt64-config.h +7 -0
  225. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-opt64.c +541 -0
  226. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-times2-SIMD128.c +954 -0
  227. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-times2-SnP.h +47 -0
  228. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-times4-SnP.h +45 -0
  229. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-times4-on2.c +38 -0
  230. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-times8-SnP.h +45 -0
  231. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-times8-on2.c +38 -0
  232. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakP-1600-unrolling.macros +302 -0
  233. data/ext/digest/kangarootwelve/keccak/nehalem/KeccakSpongeWidth1600.link.c +1 -0
  234. data/ext/digest/kangarootwelve/keccak/nehalem/PlSnP-Fallback.inc +287 -0
  235. data/ext/digest/kangarootwelve/keccak/nehalem/SIMD128-config.h +8 -0
  236. data/ext/digest/kangarootwelve/keccak/nehalem/SnP-Relaned.h +140 -0
  237. data/ext/digest/kangarootwelve/keccak/nehalem/ext.link.c +1 -0
  238. data/ext/digest/kangarootwelve/keccak/reference/KangarooTwelve.link.c +1 -0
  239. data/ext/digest/kangarootwelve/keccak/reference/KeccakDuplexWidth1600.link.c +1 -0
  240. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-SnP.h +41 -0
  241. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-reference.c +424 -0
  242. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-reference.h +20 -0
  243. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-times2-SnP.h +45 -0
  244. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-times2-on1.c +37 -0
  245. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-times4-SnP.h +45 -0
  246. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-times4-on1.c +37 -0
  247. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-times8-SnP.h +45 -0
  248. data/ext/digest/kangarootwelve/keccak/reference/KeccakP-1600-times8-on1.c +37 -0
  249. data/ext/digest/kangarootwelve/keccak/reference/KeccakSpongeWidth1600.link.c +1 -0
  250. data/ext/digest/kangarootwelve/keccak/reference/PlSnP-Fallback.inc +287 -0
  251. data/ext/digest/kangarootwelve/keccak/reference/displayIntermediateValues.c +176 -0
  252. data/ext/digest/kangarootwelve/keccak/reference/displayIntermediateValues.h +29 -0
  253. data/ext/digest/kangarootwelve/keccak/reference/ext.link.c +1 -0
  254. data/ext/digest/kangarootwelve/keccak/reference32bits/KangarooTwelve.link.c +1 -0
  255. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakDuplexWidth1600.link.c +1 -0
  256. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-SnP.h +41 -0
  257. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-reference.h +20 -0
  258. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-reference32BI.c +612 -0
  259. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-times2-SnP.h +45 -0
  260. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-times2-on1.c +37 -0
  261. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-times4-SnP.h +45 -0
  262. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-times4-on1.c +37 -0
  263. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-times8-SnP.h +45 -0
  264. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakP-1600-times8-on1.c +37 -0
  265. data/ext/digest/kangarootwelve/keccak/reference32bits/KeccakSpongeWidth1600.link.c +1 -0
  266. data/ext/digest/kangarootwelve/keccak/reference32bits/PlSnP-Fallback.inc +287 -0
  267. data/ext/digest/kangarootwelve/keccak/reference32bits/displayIntermediateValues.c +176 -0
  268. data/ext/digest/kangarootwelve/keccak/reference32bits/displayIntermediateValues.h +29 -0
  269. data/ext/digest/kangarootwelve/keccak/reference32bits/ext.link.c +1 -0
  270. data/ext/digest/kangarootwelve/keccak/sandybridge/KangarooTwelve.link.c +1 -0
  271. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakDuplexWidth1600.link.c +1 -0
  272. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-64.macros +2195 -0
  273. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-SnP.h +49 -0
  274. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-opt64-config.h +8 -0
  275. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-opt64.c +541 -0
  276. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-times2-SIMD128.c +954 -0
  277. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-times2-SnP.h +47 -0
  278. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-times4-SnP.h +45 -0
  279. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-times4-on2.c +38 -0
  280. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-times8-SnP.h +45 -0
  281. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-times8-on2.c +38 -0
  282. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakP-1600-unrolling.macros +302 -0
  283. data/ext/digest/kangarootwelve/keccak/sandybridge/KeccakSpongeWidth1600.link.c +1 -0
  284. data/ext/digest/kangarootwelve/keccak/sandybridge/PlSnP-Fallback.inc +287 -0
  285. data/ext/digest/kangarootwelve/keccak/sandybridge/SIMD128-config.h +8 -0
  286. data/ext/digest/kangarootwelve/keccak/sandybridge/SnP-Relaned.h +140 -0
  287. data/ext/digest/kangarootwelve/keccak/sandybridge/ext.link.c +1 -0
  288. data/ext/digest/kangarootwelve/keccak/skylakex/KangarooTwelve.link.c +1 -0
  289. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakDuplexWidth1600.link.c +1 -0
  290. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-AVX512-config.h +6 -0
  291. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-AVX512.c +621 -0
  292. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-SnP.h +42 -0
  293. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-times2-SIMD512.c +852 -0
  294. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-times2-SnP.h +49 -0
  295. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-times4-SIMD512.c +883 -0
  296. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-times4-SnP.h +49 -0
  297. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-times8-SIMD512.c +1473 -0
  298. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakP-1600-times8-SnP.h +53 -0
  299. data/ext/digest/kangarootwelve/keccak/skylakex/KeccakSpongeWidth1600.link.c +1 -0
  300. data/ext/digest/kangarootwelve/keccak/skylakex/SIMD512-2-config.h +7 -0
  301. data/ext/digest/kangarootwelve/keccak/skylakex/SIMD512-4-config.h +7 -0
  302. data/ext/digest/kangarootwelve/keccak/skylakex/SIMD512-config.h +7 -0
  303. data/ext/digest/kangarootwelve/keccak/skylakex/ext.link.c +1 -0
  304. data/lib/digest/kangarootwelve/version.rb +1 -1
  305. metadata +299 -21
@@ -0,0 +1,49 @@
1
+ /*
2
+ Implementation by the Keccak Team, namely, Guido Bertoni, Joan Daemen,
3
+ Michaël Peeters, Gilles Van Assche and Ronny Van Keer,
4
+ hereby denoted as "the implementer".
5
+
6
+ For more information, feedback or questions, please refer to our website:
7
+ https://keccak.team/
8
+
9
+ To the extent possible under law, the implementer has waived all copyright
10
+ and related or neighboring rights to the source code in this file.
11
+ http://creativecommons.org/publicdomain/zero/1.0/
12
+
13
+ ---
14
+
15
+ Please refer to SnP-documentation.h for more details.
16
+ */
17
+
18
+ #ifndef _KeccakP_1600_SnP_h_
19
+ #define _KeccakP_1600_SnP_h_
20
+
21
+ #include "brg_endian.h"
22
+ #include "KeccakP-1600-opt64-config.h"
23
+
24
+ #define KeccakP1600_implementation "generic 64-bit optimized implementation (" KeccakP1600_implementation_config ")"
25
+ #define KeccakP1600_stateSizeInBytes 200
26
+ #define KeccakP1600_stateAlignment 8
27
+ #define KeccakF1600_FastLoop_supported
28
+
29
+ #include <stddef.h>
30
+
31
+ #define KeccakP1600_StaticInitialize()
32
+ void KeccakP1600_Initialize(void *state);
33
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
34
+ #define KeccakP1600_AddByte(state, byte, offset) \
35
+ ((unsigned char*)(state))[(offset)] ^= (byte)
36
+ #else
37
+ void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset);
38
+ #endif
39
+ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
40
+ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
41
+ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount);
42
+ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds);
43
+ void KeccakP1600_Permute_12rounds(void *state);
44
+ void KeccakP1600_Permute_24rounds(void *state);
45
+ void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
46
+ void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
47
+ size_t KeccakF1600_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen);
48
+
49
+ #endif
@@ -0,0 +1,7 @@
1
+ /*
2
+ This file defines some parameters of the implementation in the parent directory.
3
+ */
4
+
5
+ #define KeccakP1600_implementation_config "lane complementing, all rounds unrolled"
6
+ #define KeccakP1600_fullUnrolling
7
+ #define KeccakP1600_useLaneComplementing
@@ -0,0 +1,541 @@
1
+ /*
2
+ Implementation by the Keccak Team, namely, Guido Bertoni, Joan Daemen,
3
+ Michaël Peeters, Gilles Van Assche and Ronny Van Keer,
4
+ hereby denoted as "the implementer".
5
+
6
+ For more information, feedback or questions, please refer to our website:
7
+ https://keccak.team/
8
+
9
+ To the extent possible under law, the implementer has waived all copyright
10
+ and related or neighboring rights to the source code in this file.
11
+ http://creativecommons.org/publicdomain/zero/1.0/
12
+
13
+ ---
14
+
15
+ This file implements Keccak-p[1600] in a SnP-compatible way.
16
+ Please refer to SnP-documentation.h for more details.
17
+
18
+ This implementation comes with KeccakP-1600-SnP.h in the same folder.
19
+ Please refer to LowLevel.build for the exact list of other files it must be combined with.
20
+ */
21
+
22
+ #include <string.h>
23
+ #include <stdlib.h>
24
+ #include "brg_endian.h"
25
+ #include "KeccakP-1600-opt64-config.h"
26
+
27
+ typedef unsigned char UINT8;
28
+ typedef unsigned long long int UINT64;
29
+
30
+ #if defined(KeccakP1600_useLaneComplementing)
31
+ #define UseBebigokimisa
32
+ #endif
33
+
34
+ #if defined(_MSC_VER)
35
+ #define ROL64(a, offset) _rotl64(a, offset)
36
+ #elif defined(KeccakP1600_useSHLD)
37
+ #define ROL64(x,N) ({ \
38
+ register UINT64 __out; \
39
+ register UINT64 __in = x; \
40
+ __asm__ ("shld %2,%0,%0" : "=r"(__out) : "0"(__in), "i"(N)); \
41
+ __out; \
42
+ })
43
+ #else
44
+ #define ROL64(a, offset) ((((UINT64)a) << offset) ^ (((UINT64)a) >> (64-offset)))
45
+ #endif
46
+
47
+ #include "KeccakP-1600-64.macros"
48
+ #ifdef KeccakP1600_fullUnrolling
49
+ #define FullUnrolling
50
+ #else
51
+ #define Unrolling KeccakP1600_unrolling
52
+ #endif
53
+ #include "KeccakP-1600-unrolling.macros"
54
+ #include "SnP-Relaned.h"
55
+
56
+ static const UINT64 KeccakF1600RoundConstants[24] = {
57
+ 0x0000000000000001ULL,
58
+ 0x0000000000008082ULL,
59
+ 0x800000000000808aULL,
60
+ 0x8000000080008000ULL,
61
+ 0x000000000000808bULL,
62
+ 0x0000000080000001ULL,
63
+ 0x8000000080008081ULL,
64
+ 0x8000000000008009ULL,
65
+ 0x000000000000008aULL,
66
+ 0x0000000000000088ULL,
67
+ 0x0000000080008009ULL,
68
+ 0x000000008000000aULL,
69
+ 0x000000008000808bULL,
70
+ 0x800000000000008bULL,
71
+ 0x8000000000008089ULL,
72
+ 0x8000000000008003ULL,
73
+ 0x8000000000008002ULL,
74
+ 0x8000000000000080ULL,
75
+ 0x000000000000800aULL,
76
+ 0x800000008000000aULL,
77
+ 0x8000000080008081ULL,
78
+ 0x8000000000008080ULL,
79
+ 0x0000000080000001ULL,
80
+ 0x8000000080008008ULL };
81
+
82
+ /* ---------------------------------------------------------------- */
83
+
84
+ void KeccakP1600_Initialize(void *state)
85
+ {
86
+ memset(state, 0, 200);
87
+ #ifdef KeccakP1600_useLaneComplementing
88
+ ((UINT64*)state)[ 1] = ~(UINT64)0;
89
+ ((UINT64*)state)[ 2] = ~(UINT64)0;
90
+ ((UINT64*)state)[ 8] = ~(UINT64)0;
91
+ ((UINT64*)state)[12] = ~(UINT64)0;
92
+ ((UINT64*)state)[17] = ~(UINT64)0;
93
+ ((UINT64*)state)[20] = ~(UINT64)0;
94
+ #endif
95
+ }
96
+
97
+ /* ---------------------------------------------------------------- */
98
+
99
+ void KeccakP1600_AddBytesInLane(void *state, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length)
100
+ {
101
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
102
+ UINT64 lane;
103
+ if (length == 0)
104
+ return;
105
+ if (length == 1)
106
+ lane = data[0];
107
+ else {
108
+ lane = 0;
109
+ memcpy(&lane, data, length);
110
+ }
111
+ lane <<= offset*8;
112
+ #else
113
+ UINT64 lane = 0;
114
+ unsigned int i;
115
+ for(i=0; i<length; i++)
116
+ lane |= ((UINT64)data[i]) << ((i+offset)*8);
117
+ #endif
118
+ ((UINT64*)state)[lanePosition] ^= lane;
119
+ }
120
+
121
+ /* ---------------------------------------------------------------- */
122
+
123
+ void KeccakP1600_AddLanes(void *state, const unsigned char *data, unsigned int laneCount)
124
+ {
125
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
126
+ unsigned int i = 0;
127
+ #ifdef NO_MISALIGNED_ACCESSES
128
+ /* If either pointer is misaligned, fall back to byte-wise xor. */
129
+ if (((((uintptr_t)state) & 7) != 0) || ((((uintptr_t)data) & 7) != 0)) {
130
+ for (i = 0; i < laneCount * 8; i++) {
131
+ ((unsigned char*)state)[i] ^= data[i];
132
+ }
133
+ }
134
+ else
135
+ #endif
136
+ {
137
+ /* Otherwise... */
138
+ for( ; (i+8)<=laneCount; i+=8) {
139
+ ((UINT64*)state)[i+0] ^= ((UINT64*)data)[i+0];
140
+ ((UINT64*)state)[i+1] ^= ((UINT64*)data)[i+1];
141
+ ((UINT64*)state)[i+2] ^= ((UINT64*)data)[i+2];
142
+ ((UINT64*)state)[i+3] ^= ((UINT64*)data)[i+3];
143
+ ((UINT64*)state)[i+4] ^= ((UINT64*)data)[i+4];
144
+ ((UINT64*)state)[i+5] ^= ((UINT64*)data)[i+5];
145
+ ((UINT64*)state)[i+6] ^= ((UINT64*)data)[i+6];
146
+ ((UINT64*)state)[i+7] ^= ((UINT64*)data)[i+7];
147
+ }
148
+ for( ; (i+4)<=laneCount; i+=4) {
149
+ ((UINT64*)state)[i+0] ^= ((UINT64*)data)[i+0];
150
+ ((UINT64*)state)[i+1] ^= ((UINT64*)data)[i+1];
151
+ ((UINT64*)state)[i+2] ^= ((UINT64*)data)[i+2];
152
+ ((UINT64*)state)[i+3] ^= ((UINT64*)data)[i+3];
153
+ }
154
+ for( ; (i+2)<=laneCount; i+=2) {
155
+ ((UINT64*)state)[i+0] ^= ((UINT64*)data)[i+0];
156
+ ((UINT64*)state)[i+1] ^= ((UINT64*)data)[i+1];
157
+ }
158
+ if (i<laneCount) {
159
+ ((UINT64*)state)[i+0] ^= ((UINT64*)data)[i+0];
160
+ }
161
+ }
162
+ #else
163
+ unsigned int i;
164
+ const UINT8 *curData = data;
165
+ for(i=0; i<laneCount; i++, curData+=8) {
166
+ UINT64 lane = (UINT64)curData[0]
167
+ | ((UINT64)curData[1] << 8)
168
+ | ((UINT64)curData[2] << 16)
169
+ | ((UINT64)curData[3] << 24)
170
+ | ((UINT64)curData[4] << 32)
171
+ | ((UINT64)curData[5] << 40)
172
+ | ((UINT64)curData[6] << 48)
173
+ | ((UINT64)curData[7] << 56);
174
+ ((UINT64*)state)[i] ^= lane;
175
+ }
176
+ #endif
177
+ }
178
+
179
+ /* ---------------------------------------------------------------- */
180
+
181
+ #if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
182
+ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
183
+ {
184
+ UINT64 lane = byte;
185
+ lane <<= (offset%8)*8;
186
+ ((UINT64*)state)[offset/8] ^= lane;
187
+ }
188
+ #endif
189
+
190
+ /* ---------------------------------------------------------------- */
191
+
192
+ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
193
+ {
194
+ SnP_AddBytes(state, data, offset, length, KeccakP1600_AddLanes, KeccakP1600_AddBytesInLane, 8);
195
+ }
196
+
197
+ /* ---------------------------------------------------------------- */
198
+
199
+ void KeccakP1600_OverwriteBytesInLane(void *state, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length)
200
+ {
201
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
202
+ #ifdef KeccakP1600_useLaneComplementing
203
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20)) {
204
+ unsigned int i;
205
+ for(i=0; i<length; i++)
206
+ ((unsigned char*)state)[lanePosition*8+offset+i] = ~data[i];
207
+ }
208
+ else
209
+ #endif
210
+ {
211
+ memcpy((unsigned char*)state+lanePosition*8+offset, data, length);
212
+ }
213
+ #else
214
+ UINT64 lane = ((UINT64*)state)[lanePosition];
215
+ unsigned int i;
216
+ for(i=0; i<length; i++) {
217
+ lane &= ~((UINT64)0xFF << ((offset+i)*8));
218
+ #ifdef KeccakP1600_useLaneComplementing
219
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
220
+ lane |= (UINT64)(data[i] ^ 0xFF) << ((offset+i)*8);
221
+ else
222
+ #endif
223
+ lane |= (UINT64)data[i] << ((offset+i)*8);
224
+ }
225
+ ((UINT64*)state)[lanePosition] = lane;
226
+ #endif
227
+ }
228
+
229
+ /* ---------------------------------------------------------------- */
230
+
231
+ void KeccakP1600_OverwriteLanes(void *state, const unsigned char *data, unsigned int laneCount)
232
+ {
233
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
234
+ #ifdef KeccakP1600_useLaneComplementing
235
+ unsigned int lanePosition;
236
+
237
+ for(lanePosition=0; lanePosition<laneCount; lanePosition++)
238
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
239
+ ((UINT64*)state)[lanePosition] = ~((const UINT64*)data)[lanePosition];
240
+ else
241
+ ((UINT64*)state)[lanePosition] = ((const UINT64*)data)[lanePosition];
242
+ #else
243
+ memcpy(state, data, laneCount*8);
244
+ #endif
245
+ #else
246
+ unsigned int lanePosition;
247
+ const UINT8 *curData = data;
248
+ for(lanePosition=0; lanePosition<laneCount; lanePosition++, curData+=8) {
249
+ UINT64 lane = (UINT64)curData[0]
250
+ | ((UINT64)curData[1] << 8)
251
+ | ((UINT64)curData[2] << 16)
252
+ | ((UINT64)curData[3] << 24)
253
+ | ((UINT64)curData[4] << 32)
254
+ | ((UINT64)curData[5] << 40)
255
+ | ((UINT64)curData[6] << 48)
256
+ | ((UINT64)curData[7] << 56);
257
+ #ifdef KeccakP1600_useLaneComplementing
258
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
259
+ ((UINT64*)state)[lanePosition] = ~lane;
260
+ else
261
+ #endif
262
+ ((UINT64*)state)[lanePosition] = lane;
263
+ }
264
+ #endif
265
+ }
266
+
267
+ /* ---------------------------------------------------------------- */
268
+
269
+ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
270
+ {
271
+ SnP_OverwriteBytes(state, data, offset, length, KeccakP1600_OverwriteLanes, KeccakP1600_OverwriteBytesInLane, 8);
272
+ }
273
+
274
+ /* ---------------------------------------------------------------- */
275
+
276
+ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
277
+ {
278
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
279
+ #ifdef KeccakP1600_useLaneComplementing
280
+ unsigned int lanePosition;
281
+
282
+ for(lanePosition=0; lanePosition<byteCount/8; lanePosition++)
283
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
284
+ ((UINT64*)state)[lanePosition] = ~0;
285
+ else
286
+ ((UINT64*)state)[lanePosition] = 0;
287
+ if (byteCount%8 != 0) {
288
+ lanePosition = byteCount/8;
289
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
290
+ memset((unsigned char*)state+lanePosition*8, 0xFF, byteCount%8);
291
+ else
292
+ memset((unsigned char*)state+lanePosition*8, 0, byteCount%8);
293
+ }
294
+ #else
295
+ memset(state, 0, byteCount);
296
+ #endif
297
+ #else
298
+ unsigned int i, j;
299
+ for(i=0; i<byteCount; i+=8) {
300
+ unsigned int lanePosition = i/8;
301
+ if (i+8 <= byteCount) {
302
+ #ifdef KeccakP1600_useLaneComplementing
303
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
304
+ ((UINT64*)state)[lanePosition] = ~(UINT64)0;
305
+ else
306
+ #endif
307
+ ((UINT64*)state)[lanePosition] = 0;
308
+ }
309
+ else {
310
+ UINT64 lane = ((UINT64*)state)[lanePosition];
311
+ for(j=0; j<byteCount%8; j++) {
312
+ #ifdef KeccakP1600_useLaneComplementing
313
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
314
+ lane |= (UINT64)0xFF << (j*8);
315
+ else
316
+ #endif
317
+ lane &= ~((UINT64)0xFF << (j*8));
318
+ }
319
+ ((UINT64*)state)[lanePosition] = lane;
320
+ }
321
+ }
322
+ #endif
323
+ }
324
+
325
+ /* ---------------------------------------------------------------- */
326
+
327
+ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nr)
328
+ {
329
+ declareABCDE
330
+ unsigned int i;
331
+ UINT64 *stateAsLanes = (UINT64*)state;
332
+
333
+ copyFromState(A, stateAsLanes)
334
+ roundsN(nr)
335
+ copyToState(stateAsLanes, A)
336
+
337
+ }
338
+
339
+ /* ---------------------------------------------------------------- */
340
+
341
+ void KeccakP1600_Permute_24rounds(void *state)
342
+ {
343
+ declareABCDE
344
+ #ifndef KeccakP1600_fullUnrolling
345
+ unsigned int i;
346
+ #endif
347
+ UINT64 *stateAsLanes = (UINT64*)state;
348
+
349
+ copyFromState(A, stateAsLanes)
350
+ rounds24
351
+ copyToState(stateAsLanes, A)
352
+ }
353
+
354
+ /* ---------------------------------------------------------------- */
355
+
356
+ void KeccakP1600_Permute_12rounds(void *state)
357
+ {
358
+ declareABCDE
359
+ #ifndef KeccakP1600_fullUnrolling
360
+ unsigned int i;
361
+ #endif
362
+ UINT64 *stateAsLanes = (UINT64*)state;
363
+
364
+ copyFromState(A, stateAsLanes)
365
+ rounds12
366
+ copyToState(stateAsLanes, A)
367
+ }
368
+
369
+ /* ---------------------------------------------------------------- */
370
+
371
+ void KeccakP1600_ExtractBytesInLane(const void *state, unsigned int lanePosition, unsigned char *data, unsigned int offset, unsigned int length)
372
+ {
373
+ UINT64 lane = ((UINT64*)state)[lanePosition];
374
+ #ifdef KeccakP1600_useLaneComplementing
375
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
376
+ lane = ~lane;
377
+ #endif
378
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
379
+ {
380
+ UINT64 lane1[1];
381
+ lane1[0] = lane;
382
+ memcpy(data, (UINT8*)lane1+offset, length);
383
+ }
384
+ #else
385
+ unsigned int i;
386
+ lane >>= offset*8;
387
+ for(i=0; i<length; i++) {
388
+ data[i] = lane & 0xFF;
389
+ lane >>= 8;
390
+ }
391
+ #endif
392
+ }
393
+
394
+ /* ---------------------------------------------------------------- */
395
+
396
+ #if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
397
+ void fromWordToBytes(UINT8 *bytes, const UINT64 word)
398
+ {
399
+ unsigned int i;
400
+
401
+ for(i=0; i<(64/8); i++)
402
+ bytes[i] = (word >> (8*i)) & 0xFF;
403
+ }
404
+ #endif
405
+
406
+ void KeccakP1600_ExtractLanes(const void *state, unsigned char *data, unsigned int laneCount)
407
+ {
408
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
409
+ memcpy(data, state, laneCount*8);
410
+ #else
411
+ unsigned int i;
412
+
413
+ for(i=0; i<laneCount; i++)
414
+ fromWordToBytes(data+(i*8), ((const UINT64*)state)[i]);
415
+ #endif
416
+ #ifdef KeccakP1600_useLaneComplementing
417
+ if (laneCount > 1) {
418
+ ((UINT64*)data)[ 1] = ~((UINT64*)data)[ 1];
419
+ if (laneCount > 2) {
420
+ ((UINT64*)data)[ 2] = ~((UINT64*)data)[ 2];
421
+ if (laneCount > 8) {
422
+ ((UINT64*)data)[ 8] = ~((UINT64*)data)[ 8];
423
+ if (laneCount > 12) {
424
+ ((UINT64*)data)[12] = ~((UINT64*)data)[12];
425
+ if (laneCount > 17) {
426
+ ((UINT64*)data)[17] = ~((UINT64*)data)[17];
427
+ if (laneCount > 20) {
428
+ ((UINT64*)data)[20] = ~((UINT64*)data)[20];
429
+ }
430
+ }
431
+ }
432
+ }
433
+ }
434
+ }
435
+ #endif
436
+ }
437
+
438
+ /* ---------------------------------------------------------------- */
439
+
440
+ void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
441
+ {
442
+ SnP_ExtractBytes(state, data, offset, length, KeccakP1600_ExtractLanes, KeccakP1600_ExtractBytesInLane, 8);
443
+ }
444
+
445
+ /* ---------------------------------------------------------------- */
446
+
447
+ void KeccakP1600_ExtractAndAddBytesInLane(const void *state, unsigned int lanePosition, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
448
+ {
449
+ UINT64 lane = ((UINT64*)state)[lanePosition];
450
+ #ifdef KeccakP1600_useLaneComplementing
451
+ if ((lanePosition == 1) || (lanePosition == 2) || (lanePosition == 8) || (lanePosition == 12) || (lanePosition == 17) || (lanePosition == 20))
452
+ lane = ~lane;
453
+ #endif
454
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
455
+ {
456
+ unsigned int i;
457
+ UINT64 lane1[1];
458
+ lane1[0] = lane;
459
+ for(i=0; i<length; i++)
460
+ output[i] = input[i] ^ ((UINT8*)lane1)[offset+i];
461
+ }
462
+ #else
463
+ unsigned int i;
464
+ lane >>= offset*8;
465
+ for(i=0; i<length; i++) {
466
+ output[i] = input[i] ^ (lane & 0xFF);
467
+ lane >>= 8;
468
+ }
469
+ #endif
470
+ }
471
+
472
+ /* ---------------------------------------------------------------- */
473
+
474
+ void KeccakP1600_ExtractAndAddLanes(const void *state, const unsigned char *input, unsigned char *output, unsigned int laneCount)
475
+ {
476
+ unsigned int i;
477
+ #if (PLATFORM_BYTE_ORDER != IS_LITTLE_ENDIAN)
478
+ unsigned char temp[8];
479
+ unsigned int j;
480
+ #endif
481
+
482
+ for(i=0; i<laneCount; i++) {
483
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
484
+ ((UINT64*)output)[i] = ((UINT64*)input)[i] ^ ((const UINT64*)state)[i];
485
+ #else
486
+ fromWordToBytes(temp, ((const UINT64*)state)[i]);
487
+ for(j=0; j<8; j++)
488
+ output[i*8+j] = input[i*8+j] ^ temp[j];
489
+ #endif
490
+ }
491
+ #ifdef KeccakP1600_useLaneComplementing
492
+ if (laneCount > 1) {
493
+ ((UINT64*)output)[ 1] = ~((UINT64*)output)[ 1];
494
+ if (laneCount > 2) {
495
+ ((UINT64*)output)[ 2] = ~((UINT64*)output)[ 2];
496
+ if (laneCount > 8) {
497
+ ((UINT64*)output)[ 8] = ~((UINT64*)output)[ 8];
498
+ if (laneCount > 12) {
499
+ ((UINT64*)output)[12] = ~((UINT64*)output)[12];
500
+ if (laneCount > 17) {
501
+ ((UINT64*)output)[17] = ~((UINT64*)output)[17];
502
+ if (laneCount > 20) {
503
+ ((UINT64*)output)[20] = ~((UINT64*)output)[20];
504
+ }
505
+ }
506
+ }
507
+ }
508
+ }
509
+ }
510
+ #endif
511
+ }
512
+
513
+ /* ---------------------------------------------------------------- */
514
+
515
+ void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
516
+ {
517
+ SnP_ExtractAndAddBytes(state, input, output, offset, length, KeccakP1600_ExtractAndAddLanes, KeccakP1600_ExtractAndAddBytesInLane, 8);
518
+ }
519
+
520
+ /* ---------------------------------------------------------------- */
521
+
522
+ size_t KeccakF1600_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen)
523
+ {
524
+ size_t originalDataByteLen = dataByteLen;
525
+ declareABCDE
526
+ #ifndef KeccakP1600_fullUnrolling
527
+ unsigned int i;
528
+ #endif
529
+ UINT64 *stateAsLanes = (UINT64*)state;
530
+ UINT64 *inDataAsLanes = (UINT64*)data;
531
+
532
+ copyFromState(A, stateAsLanes)
533
+ while(dataByteLen >= laneCount*8) {
534
+ addInput(A, inDataAsLanes, laneCount)
535
+ rounds24
536
+ inDataAsLanes += laneCount;
537
+ dataByteLen -= laneCount*8;
538
+ }
539
+ copyToState(stateAsLanes, A)
540
+ return originalDataByteLen - dataByteLen;
541
+ }