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,176 @@
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
+ #include <stdio.h>
15
+ #include "displayIntermediateValues.h"
16
+
17
+ FILE *intermediateValueFile = 0;
18
+ int displayLevel = 0;
19
+
20
+ void displaySetIntermediateValueFile(FILE *f)
21
+ {
22
+ intermediateValueFile = f;
23
+ }
24
+
25
+ void displaySetLevel(int level)
26
+ {
27
+ displayLevel = level;
28
+ }
29
+
30
+ void displayBytes(int level, const char *text, const unsigned char *bytes, unsigned int size)
31
+ {
32
+ unsigned int i;
33
+
34
+ if ((intermediateValueFile) && (level <= displayLevel)) {
35
+ fprintf(intermediateValueFile, "%s:\n", text);
36
+ for(i=0; i<size; i++)
37
+ fprintf(intermediateValueFile, "%02X ", bytes[i]);
38
+ fprintf(intermediateValueFile, "\n");
39
+ fprintf(intermediateValueFile, "\n");
40
+ }
41
+ }
42
+
43
+ void displayBits(int level, const char *text, const unsigned char *data, unsigned int size, int MSBfirst)
44
+ {
45
+ unsigned int i, iByte, iBit;
46
+
47
+ if ((intermediateValueFile) && (level <= displayLevel)) {
48
+ fprintf(intermediateValueFile, "%s:\n", text);
49
+ for(i=0; i<size; i++) {
50
+ iByte = i/8;
51
+ iBit = i%8;
52
+ if (MSBfirst)
53
+ fprintf(intermediateValueFile, "%d ", ((data[iByte] << iBit) & 0x80) != 0);
54
+ else
55
+ fprintf(intermediateValueFile, "%d ", ((data[iByte] >> iBit) & 0x01) != 0);
56
+ }
57
+ fprintf(intermediateValueFile, "\n");
58
+ fprintf(intermediateValueFile, "\n");
59
+ }
60
+ }
61
+
62
+ void displayStateAsBytes(int level, const char *text, const unsigned char *state, unsigned int width)
63
+ {
64
+ displayBytes(level, text, state, width/8);
65
+ }
66
+
67
+ void displayStateAs32bitWords(int level, const char *text, const unsigned int *state)
68
+ {
69
+ unsigned int i;
70
+
71
+ if ((intermediateValueFile) && (level <= displayLevel)) {
72
+ fprintf(intermediateValueFile, "%s:\n", text);
73
+ for(i=0; i<25; i++) {
74
+ fprintf(intermediateValueFile, "%08X:%08X", (unsigned int)state[2*i+0], (unsigned int)state[2*i+1]);
75
+ if ((i%5) == 4)
76
+ fprintf(intermediateValueFile, "\n");
77
+ else
78
+ fprintf(intermediateValueFile, " ");
79
+ }
80
+ }
81
+ }
82
+
83
+ void displayStateAs64bitLanes(int level, const char *text, void *statePointer)
84
+ {
85
+ unsigned int i;
86
+ unsigned long long int *state = statePointer;
87
+
88
+ if ((intermediateValueFile) && (level <= displayLevel)) {
89
+ fprintf(intermediateValueFile, "%s:\n", text);
90
+ for(i=0; i<25; i++) {
91
+ fprintf(intermediateValueFile, "%08X", (unsigned int)(state[i] >> 32));
92
+ fprintf(intermediateValueFile, "%08X", (unsigned int)(state[i] & 0xFFFFFFFFULL));
93
+ if ((i%5) == 4)
94
+ fprintf(intermediateValueFile, "\n");
95
+ else
96
+ fprintf(intermediateValueFile, " ");
97
+ }
98
+ }
99
+ }
100
+
101
+ void displayStateAs32bitLanes(int level, const char *text, void *statePointer)
102
+ {
103
+ unsigned int i;
104
+ unsigned int *state = statePointer;
105
+
106
+ if ((intermediateValueFile) && (level <= displayLevel)) {
107
+ fprintf(intermediateValueFile, "%s:\n", text);
108
+ for(i=0; i<25; i++) {
109
+ fprintf(intermediateValueFile, "%08X", state[i]);
110
+ if ((i%5) == 4)
111
+ fprintf(intermediateValueFile, "\n");
112
+ else
113
+ fprintf(intermediateValueFile, " ");
114
+ }
115
+ }
116
+ }
117
+
118
+ void displayStateAs16bitLanes(int level, const char *text, void *statePointer)
119
+ {
120
+ unsigned int i;
121
+ unsigned short *state = statePointer;
122
+
123
+ if ((intermediateValueFile) && (level <= displayLevel)) {
124
+ fprintf(intermediateValueFile, "%s:\n", text);
125
+ for(i=0; i<25; i++) {
126
+ fprintf(intermediateValueFile, "%04X ", state[i]);
127
+ if ((i%5) == 4)
128
+ fprintf(intermediateValueFile, "\n");
129
+ }
130
+ }
131
+ }
132
+
133
+ void displayStateAs8bitLanes(int level, const char *text, void *statePointer)
134
+ {
135
+ unsigned int i;
136
+ unsigned char *state = statePointer;
137
+
138
+ if ((intermediateValueFile) && (level <= displayLevel)) {
139
+ fprintf(intermediateValueFile, "%s:\n", text);
140
+ for(i=0; i<25; i++) {
141
+ fprintf(intermediateValueFile, "%02X ", state[i]);
142
+ if ((i%5) == 4)
143
+ fprintf(intermediateValueFile, "\n");
144
+ }
145
+ }
146
+ }
147
+
148
+ void displayStateAsLanes(int level, const char *text, void *statePointer, unsigned int width)
149
+ {
150
+ if (width == 1600)
151
+ displayStateAs64bitLanes(level, text, statePointer);
152
+ if (width == 800)
153
+ displayStateAs32bitLanes(level, text, statePointer);
154
+ if (width == 400)
155
+ displayStateAs16bitLanes(level, text, statePointer);
156
+ if (width == 200)
157
+ displayStateAs8bitLanes(level, text, statePointer);
158
+ }
159
+
160
+ void displayRoundNumber(int level, unsigned int i)
161
+ {
162
+ if ((intermediateValueFile) && (level <= displayLevel)) {
163
+ fprintf(intermediateValueFile, "\n");
164
+ fprintf(intermediateValueFile, "--- Round %d ---\n", i);
165
+ fprintf(intermediateValueFile, "\n");
166
+ }
167
+ }
168
+
169
+ void displayText(int level, const char *text)
170
+ {
171
+ if ((intermediateValueFile) && (level <= displayLevel)) {
172
+ fprintf(intermediateValueFile, "%s", text);
173
+ fprintf(intermediateValueFile, "\n");
174
+ fprintf(intermediateValueFile, "\n");
175
+ }
176
+ }
@@ -0,0 +1,29 @@
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
+ #ifndef _displayIntermediateValues_h_
15
+ #define _displayIntermediateValues_h_
16
+
17
+ #include <stdio.h>
18
+
19
+ void displaySetIntermediateValueFile(FILE *f);
20
+ void displaySetLevel(int level);
21
+ void displayBytes(int level, const char *text, const unsigned char *bytes, unsigned int size);
22
+ void displayBits(int level, const char *text, const unsigned char *data, unsigned int size, int MSBfirst);
23
+ void displayStateAsBytes(int level, const char *text, const unsigned char *state, unsigned int width);
24
+ void displayStateAs32bitWords(int level, const char *text, const unsigned int *state);
25
+ void displayStateAsLanes(int level, const char *text, void *statePointer, unsigned int width);
26
+ void displayRoundNumber(int level, unsigned int i);
27
+ void displayText(int level, const char *text);
28
+
29
+ #endif
@@ -0,0 +1 @@
1
+ #include "../../ext.c"
@@ -0,0 +1 @@
1
+ #include "../common/KangarooTwelve.c"
@@ -0,0 +1 @@
1
+ #include "../common/KeccakDuplexWidth1600.c"
@@ -0,0 +1,41 @@
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
+ #define KeccakP1600_implementation "32-bit bit-interleaved reference implementation"
22
+ #define KeccakP1600_stateSizeInBytes 200
23
+ #define KeccakP1600_stateAlignment 4
24
+
25
+ #ifdef KeccakReference
26
+ void KeccakP1600_StaticInitialize( void );
27
+ #else
28
+ #define KeccakP1600_StaticInitialize()
29
+ #endif
30
+ void KeccakP1600_Initialize(void *state);
31
+ void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset);
32
+ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
33
+ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
34
+ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount);
35
+ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds);
36
+ void KeccakP1600_Permute_12rounds(void *state);
37
+ void KeccakP1600_Permute_24rounds(void *state);
38
+ void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
39
+ void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
40
+
41
+ #endif
@@ -0,0 +1,20 @@
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
+ #ifndef _KeccakP_1600_reference_h_
15
+ #define _KeccakP_1600_reference_h_
16
+
17
+ void KeccakP1600_DisplayRoundConstants(FILE *f);
18
+ void KeccakP1600_DisplayRhoOffsets(FILE *f);
19
+
20
+ #endif
@@ -0,0 +1,612 @@
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 <assert.h>
23
+ #include <stdio.h>
24
+ #include <string.h>
25
+ #include "brg_endian.h"
26
+ #ifdef KeccakReference
27
+ #include "displayIntermediateValues.h"
28
+ #endif
29
+
30
+ typedef unsigned char UINT8;
31
+ typedef unsigned int UINT32;
32
+ /* WARNING: on 8-bit and 16-bit platforms, this should be replaced by: */
33
+ /* typedef unsigned long UINT32; */
34
+
35
+ #define maxNrRounds 24
36
+ #define nrLanes 25
37
+
38
+ #ifdef KeccakReference
39
+
40
+ static UINT32 KeccakRoundConstants[maxNrRounds][2];
41
+ static unsigned int KeccakRhoOffsets[nrLanes];
42
+
43
+ #endif
44
+
45
+ /* ---------------------------------------------------------------- */
46
+
47
+ void toBitInterleaving(UINT32 low, UINT32 high, UINT32 *even, UINT32 *odd);
48
+ void fromBitInterleaving(UINT32 even, UINT32 odd, UINT32 *low, UINT32 *high);
49
+
50
+ void toBitInterleaving(UINT32 low, UINT32 high, UINT32 *even, UINT32 *odd)
51
+ {
52
+ unsigned int i;
53
+
54
+ *even = 0;
55
+ *odd = 0;
56
+ for(i=0; i<64; i++) {
57
+ unsigned int inBit;
58
+ if (i < 32)
59
+ inBit = (low >> i) & 1;
60
+ else
61
+ inBit = (high >> (i-32)) & 1;
62
+ if ((i % 2) == 0)
63
+ *even |= inBit << (i/2);
64
+ else
65
+ *odd |= inBit << ((i-1)/2);
66
+ }
67
+ }
68
+
69
+ void fromBitInterleaving(UINT32 even, UINT32 odd, UINT32 *low, UINT32 *high)
70
+ {
71
+ unsigned int i;
72
+
73
+ *low = 0;
74
+ *high = 0;
75
+ for(i=0; i<64; i++) {
76
+ unsigned int inBit;
77
+ if ((i % 2) == 0)
78
+ inBit = (even >> (i/2)) & 1;
79
+ else
80
+ inBit = (odd >> ((i-1)/2)) & 1;
81
+ if (i < 32)
82
+ *low |= inBit << i;
83
+ else
84
+ *high |= inBit << (i-32);
85
+ }
86
+ }
87
+
88
+ #ifdef KeccakReference
89
+
90
+ /* ---------------------------------------------------------------- */
91
+
92
+ void KeccakP1600_InitializeRoundConstants(void);
93
+ void KeccakP1600_InitializeRhoOffsets(void);
94
+ static int LFSR86540(UINT8 *LFSR);
95
+
96
+ void KeccakP1600_StaticInitialize(void)
97
+ {
98
+ KeccakP1600_InitializeRoundConstants();
99
+ KeccakP1600_InitializeRhoOffsets();
100
+ }
101
+
102
+ void KeccakP1600_InitializeRoundConstants(void)
103
+ {
104
+ UINT8 LFSRstate = 0x01;
105
+ unsigned int i, j, bitPosition;
106
+ UINT32 low, high;
107
+
108
+ for(i=0; i<maxNrRounds; i++) {
109
+ low = high = 0;
110
+ for(j=0; j<7; j++) {
111
+ bitPosition = (1<<j)-1; /* 2^j-1 */
112
+ if (LFSR86540(&LFSRstate)) {
113
+ if (bitPosition < 32)
114
+ low ^= (UINT32)1 << bitPosition;
115
+ else
116
+ high ^= (UINT32)1 << (bitPosition-32);
117
+ }
118
+ }
119
+ toBitInterleaving(low, high, &(KeccakRoundConstants[i][0]), &(KeccakRoundConstants[i][1]));
120
+ }
121
+ }
122
+
123
+ void KeccakP1600_InitializeRhoOffsets(void)
124
+ {
125
+ unsigned int x, y, t, newX, newY;
126
+
127
+ KeccakRhoOffsets[0] = 0;
128
+ x = 1;
129
+ y = 0;
130
+ for(t=0; t<24; t++) {
131
+ KeccakRhoOffsets[5*y+x] = ((t+1)*(t+2)/2) % 64;
132
+ newX = (0*x+1*y) % 5;
133
+ newY = (2*x+3*y) % 5;
134
+ x = newX;
135
+ y = newY;
136
+ }
137
+ }
138
+
139
+ static int LFSR86540(UINT8 *LFSR)
140
+ {
141
+ int result = ((*LFSR) & 0x01) != 0;
142
+ if (((*LFSR) & 0x80) != 0)
143
+ /* Primitive polynomial over GF(2): x^8+x^6+x^5+x^4+1 */
144
+ (*LFSR) = ((*LFSR) << 1) ^ 0x71;
145
+ else
146
+ (*LFSR) <<= 1;
147
+ return result;
148
+ }
149
+
150
+ #else
151
+
152
+ static const UINT32 KeccakRoundConstants[maxNrRounds][2] =
153
+ {
154
+ 0x00000001, 0x00000000,
155
+ 0x00000000, 0x00000089,
156
+ 0x00000000, 0x8000008B,
157
+ 0x00000000, 0x80008080,
158
+ 0x00000001, 0x0000008B,
159
+ 0x00000001, 0x00008000,
160
+ 0x00000001, 0x80008088,
161
+ 0x00000001, 0x80000082,
162
+ 0x00000000, 0x0000000B,
163
+ 0x00000000, 0x0000000A,
164
+ 0x00000001, 0x00008082,
165
+ 0x00000000, 0x00008003,
166
+ 0x00000001, 0x0000808B,
167
+ 0x00000001, 0x8000000B,
168
+ 0x00000001, 0x8000008A,
169
+ 0x00000001, 0x80000081,
170
+ 0x00000000, 0x80000081,
171
+ 0x00000000, 0x80000008,
172
+ 0x00000000, 0x00000083,
173
+ 0x00000000, 0x80008003,
174
+ 0x00000001, 0x80008088,
175
+ 0x00000000, 0x80000088,
176
+ 0x00000001, 0x00008000,
177
+ 0x00000000, 0x80008082
178
+ };
179
+
180
+ static const unsigned int KeccakRhoOffsets[nrLanes] =
181
+ {
182
+ 0, 1, 62, 28, 27, 36, 44, 6, 55, 20, 3, 10, 43, 25, 39, 41, 45, 15, 21, 8, 18, 2, 61, 56, 14
183
+ };
184
+
185
+ #endif
186
+
187
+ /* ---------------------------------------------------------------- */
188
+
189
+ void KeccakP1600_Initialize(void *state)
190
+ {
191
+ memset(state, 0, 1600/8);
192
+ }
193
+
194
+ /* ---------------------------------------------------------------- */
195
+
196
+ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
197
+
198
+ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
199
+ {
200
+ unsigned char data[1];
201
+
202
+ assert(offset < 200);
203
+ data[0] = byte;
204
+ KeccakP1600_AddBytes(state, data, offset, 1);
205
+ }
206
+
207
+ /* ---------------------------------------------------------------- */
208
+
209
+ void KeccakP1600_AddBytesInLane(void *state, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length)
210
+ {
211
+ if ((lanePosition < 25) && (offset < 8) && (offset+length <= 8)) {
212
+ UINT8 laneAsBytes[8];
213
+ UINT32 low, high;
214
+ UINT32 lane[2];
215
+ UINT32 *stateAsHalfLanes;
216
+
217
+ memset(laneAsBytes, 0, 8);
218
+ memcpy(laneAsBytes+offset, data, length);
219
+ low = laneAsBytes[0]
220
+ | ((UINT32)(laneAsBytes[1]) << 8)
221
+ | ((UINT32)(laneAsBytes[2]) << 16)
222
+ | ((UINT32)(laneAsBytes[3]) << 24);
223
+ high = laneAsBytes[4]
224
+ | ((UINT32)(laneAsBytes[5]) << 8)
225
+ | ((UINT32)(laneAsBytes[6]) << 16)
226
+ | ((UINT32)(laneAsBytes[7]) << 24);
227
+ toBitInterleaving(low, high, lane, lane+1);
228
+ stateAsHalfLanes = (UINT32*)state;
229
+ stateAsHalfLanes[lanePosition*2+0] ^= lane[0];
230
+ stateAsHalfLanes[lanePosition*2+1] ^= lane[1];
231
+ }
232
+ }
233
+
234
+ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
235
+ {
236
+ unsigned int lanePosition = offset/8;
237
+ unsigned int offsetInLane = offset%8;
238
+
239
+ assert(offset < 200);
240
+ assert(offset+length <= 200);
241
+ while(length > 0) {
242
+ unsigned int bytesInLane = 8 - offsetInLane;
243
+ if (bytesInLane > length)
244
+ bytesInLane = length;
245
+ KeccakP1600_AddBytesInLane(state, lanePosition, data, offsetInLane, bytesInLane);
246
+ length -= bytesInLane;
247
+ lanePosition++;
248
+ offsetInLane = 0;
249
+ data += bytesInLane;
250
+ }
251
+ }
252
+
253
+ /* ---------------------------------------------------------------- */
254
+
255
+ void KeccakP1600_ExtractBytesInLane(const void *state, unsigned int lanePosition, unsigned char *data, unsigned int offset, unsigned int length);
256
+
257
+ void KeccakP1600_OverwriteBytesInLane(void *state, unsigned int lanePosition, const unsigned char *data, unsigned int offset, unsigned int length)
258
+ {
259
+ if ((lanePosition < 25) && (offset < 8) && (offset+length <= 8)) {
260
+ UINT8 laneAsBytes[8];
261
+ UINT32 low, high;
262
+ UINT32 lane[2];
263
+ UINT32 *stateAsHalfLanes;
264
+
265
+ KeccakP1600_ExtractBytesInLane(state, lanePosition, laneAsBytes, 0, 8);
266
+ memcpy(laneAsBytes+offset, data, length);
267
+ low = laneAsBytes[0]
268
+ | ((UINT32)(laneAsBytes[1]) << 8)
269
+ | ((UINT32)(laneAsBytes[2]) << 16)
270
+ | ((UINT32)(laneAsBytes[3]) << 24);
271
+ high = laneAsBytes[4]
272
+ | ((UINT32)(laneAsBytes[5]) << 8)
273
+ | ((UINT32)(laneAsBytes[6]) << 16)
274
+ | ((UINT32)(laneAsBytes[7]) << 24);
275
+ toBitInterleaving(low, high, lane, lane+1);
276
+ stateAsHalfLanes = (UINT32*)state;
277
+ stateAsHalfLanes[lanePosition*2+0] = lane[0];
278
+ stateAsHalfLanes[lanePosition*2+1] = lane[1];
279
+ }
280
+ }
281
+
282
+ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
283
+ {
284
+ unsigned int lanePosition = offset/8;
285
+ unsigned int offsetInLane = offset%8;
286
+
287
+ assert(offset < 200);
288
+ assert(offset+length <= 200);
289
+ while(length > 0) {
290
+ unsigned int bytesInLane = 8 - offsetInLane;
291
+ if (bytesInLane > length)
292
+ bytesInLane = length;
293
+ KeccakP1600_OverwriteBytesInLane(state, lanePosition, data, offsetInLane, bytesInLane);
294
+ length -= bytesInLane;
295
+ lanePosition++;
296
+ offsetInLane = 0;
297
+ data += bytesInLane;
298
+ }
299
+ }
300
+
301
+ /* ---------------------------------------------------------------- */
302
+
303
+ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
304
+ {
305
+ UINT8 laneAsBytes[8];
306
+ unsigned int lanePosition = 0;
307
+
308
+ assert(byteCount <= 200);
309
+ memset(laneAsBytes, 0, 8);
310
+ while(byteCount > 0) {
311
+ if (byteCount < 8) {
312
+ KeccakP1600_OverwriteBytesInLane(state, lanePosition, laneAsBytes, 0, byteCount);
313
+ byteCount = 0;
314
+ }
315
+ else {
316
+ UINT32 *stateAsHalfLanes = (UINT32*)state;
317
+ stateAsHalfLanes[lanePosition*2+0] = 0;
318
+ stateAsHalfLanes[lanePosition*2+1] = 0;
319
+ byteCount -= 8;
320
+ lanePosition++;
321
+ }
322
+ }
323
+ }
324
+
325
+ /* ---------------------------------------------------------------- */
326
+
327
+ void KeccakP1600_PermutationOnWords(UINT32 *state, unsigned int nrRounds);
328
+ static void theta(UINT32 *A);
329
+ static void rho(UINT32 *A);
330
+ static void pi(UINT32 *A);
331
+ static void chi(UINT32 *A);
332
+ static void iota(UINT32 *A, unsigned int indexRound);
333
+ void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
334
+
335
+ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
336
+ {
337
+ UINT32 *stateAsHalfLanes = (UINT32*)state;
338
+ {
339
+ UINT8 stateAsBytes[1600/8];
340
+ KeccakP1600_ExtractBytes(state, stateAsBytes, 0, 1600/8);
341
+ #ifdef KeccakReference
342
+ displayStateAsBytes(1, "Input of permutation", stateAsBytes, 1600);
343
+ #endif
344
+ }
345
+ KeccakP1600_PermutationOnWords(stateAsHalfLanes, nrounds);
346
+ {
347
+ UINT8 stateAsBytes[1600/8];
348
+ KeccakP1600_ExtractBytes(state, stateAsBytes, 0, 1600/8);
349
+ #ifdef KeccakReference
350
+ displayStateAsBytes(1, "State after permutation", stateAsBytes, 1600);
351
+ #endif
352
+ }
353
+ }
354
+
355
+
356
+ void KeccakP1600_Permute_12rounds(void *state)
357
+ {
358
+ UINT32 *stateAsHalfLanes = (UINT32*)state;
359
+ {
360
+ UINT8 stateAsBytes[1600/8];
361
+ KeccakP1600_ExtractBytes(state, stateAsBytes, 0, 1600/8);
362
+ #ifdef KeccakReference
363
+ displayStateAsBytes(1, "Input of permutation", stateAsBytes, 1600);
364
+ #endif
365
+ }
366
+ KeccakP1600_PermutationOnWords(stateAsHalfLanes, 12);
367
+ {
368
+ UINT8 stateAsBytes[1600/8];
369
+ KeccakP1600_ExtractBytes(state, stateAsBytes, 0, 1600/8);
370
+ #ifdef KeccakReference
371
+ displayStateAsBytes(1, "State after permutation", stateAsBytes, 1600);
372
+ #endif
373
+ }
374
+ }
375
+
376
+ void KeccakP1600_Permute_24rounds(void *state)
377
+ {
378
+ UINT32 *stateAsHalfLanes = (UINT32*)state;
379
+ {
380
+ UINT8 stateAsBytes[1600/8];
381
+ KeccakP1600_ExtractBytes(state, stateAsBytes, 0, 1600/8);
382
+ #ifdef KeccakReference
383
+ displayStateAsBytes(1, "Input of permutation", stateAsBytes, 1600);
384
+ #endif
385
+ }
386
+ KeccakP1600_PermutationOnWords(stateAsHalfLanes, 24);
387
+ {
388
+ UINT8 stateAsBytes[1600/8];
389
+ KeccakP1600_ExtractBytes(state, stateAsBytes, 0, 1600/8);
390
+ #ifdef KeccakReference
391
+ displayStateAsBytes(1, "State after permutation", stateAsBytes, 1600);
392
+ #endif
393
+ }
394
+ }
395
+
396
+ void KeccakP1600_PermutationOnWords(UINT32 *state, unsigned int nrRounds)
397
+ {
398
+ unsigned int i;
399
+
400
+ #ifdef KeccakReference
401
+ displayStateAs32bitWords(3, "Same, with lanes as pairs of 32-bit words (bit interleaving)", state);
402
+ #endif
403
+
404
+ for(i=(maxNrRounds-nrRounds); i<maxNrRounds; i++) {
405
+ #ifdef KeccakReference
406
+ displayRoundNumber(3, i);
407
+ #endif
408
+
409
+ theta(state);
410
+ #ifdef KeccakReference
411
+ displayStateAs32bitWords(3, "After theta", state);
412
+ #endif
413
+
414
+ rho(state);
415
+ #ifdef KeccakReference
416
+ displayStateAs32bitWords(3, "After rho", state);
417
+ #endif
418
+
419
+ pi(state);
420
+ #ifdef KeccakReference
421
+ displayStateAs32bitWords(3, "After pi", state);
422
+ #endif
423
+
424
+ chi(state);
425
+ #ifdef KeccakReference
426
+ displayStateAs32bitWords(3, "After chi", state);
427
+ #endif
428
+
429
+ iota(state, i);
430
+ #ifdef KeccakReference
431
+ displayStateAs32bitWords(3, "After iota", state);
432
+ #endif
433
+ }
434
+ }
435
+
436
+ #define index(x, y,z) ((((x)%5)+5*((y)%5))*2 + z)
437
+ #define ROL32(a, offset) ((offset != 0) ? ((((UINT32)a) << offset) ^ (((UINT32)a) >> (32-offset))) : a)
438
+
439
+ void ROL64(UINT32 inEven, UINT32 inOdd, UINT32 *outEven, UINT32 *outOdd, unsigned int offset)
440
+ {
441
+ if ((offset % 2) == 0) {
442
+ *outEven = ROL32(inEven, offset/2);
443
+ *outOdd = ROL32(inOdd, offset/2);
444
+ }
445
+ else {
446
+ *outEven = ROL32(inOdd, (offset+1)/2);
447
+ *outOdd = ROL32(inEven, (offset-1)/2);
448
+ }
449
+ }
450
+
451
+ static void theta(UINT32 *A)
452
+ {
453
+ unsigned int x, y, z;
454
+ UINT32 C[5][2], D[5][2];
455
+
456
+ for(x=0; x<5; x++) {
457
+ for(z=0; z<2; z++) {
458
+ C[x][z] = 0;
459
+ for(y=0; y<5; y++)
460
+ C[x][z] ^= A[index(x, y, z)];
461
+ }
462
+ }
463
+ for(x=0; x<5; x++) {
464
+ ROL64(C[(x+1)%5][0], C[(x+1)%5][1], &(D[x][0]), &(D[x][1]), 1);
465
+ for(z=0; z<2; z++)
466
+ D[x][z] ^= C[(x+4)%5][z];
467
+ }
468
+ for(x=0; x<5; x++)
469
+ for(y=0; y<5; y++)
470
+ for(z=0; z<2; z++)
471
+ A[index(x, y, z)] ^= D[x][z];
472
+ }
473
+
474
+ static void rho(UINT32 *A)
475
+ {
476
+ unsigned int x, y;
477
+
478
+ for(x=0; x<5; x++) for(y=0; y<5; y++)
479
+ ROL64(A[index(x, y, 0)], A[index(x, y, 1)], &(A[index(x, y, 0)]), &(A[index(x, y, 1)]), KeccakRhoOffsets[5*y+x]);
480
+ }
481
+
482
+ static void pi(UINT32 *A)
483
+ {
484
+ unsigned int x, y, z;
485
+ UINT32 tempA[50];
486
+
487
+ for(x=0; x<5; x++) for(y=0; y<5; y++) for(z=0; z<2; z++)
488
+ tempA[index(x, y, z)] = A[index(x, y, z)];
489
+ for(x=0; x<5; x++) for(y=0; y<5; y++) for(z=0; z<2; z++)
490
+ A[index(0*x+1*y, 2*x+3*y, z)] = tempA[index(x, y, z)];
491
+ }
492
+
493
+ static void chi(UINT32 *A)
494
+ {
495
+ unsigned int x, y, z;
496
+ UINT32 C[5][2];
497
+
498
+ for(y=0; y<5; y++) {
499
+ for(x=0; x<5; x++)
500
+ for(z=0; z<2; z++)
501
+ C[x][z] = A[index(x, y, z)] ^ ((~A[index(x+1, y, z)]) & A[index(x+2, y, z)]);
502
+ for(x=0; x<5; x++)
503
+ for(z=0; z<2; z++)
504
+ A[index(x, y, z)] = C[x][z];
505
+ }
506
+ }
507
+
508
+ static void iota(UINT32 *A, unsigned int indexRound)
509
+ {
510
+ A[index(0, 0, 0)] ^= KeccakRoundConstants[indexRound][0];
511
+ A[index(0, 0, 1)] ^= KeccakRoundConstants[indexRound][1];
512
+ }
513
+
514
+ /* ---------------------------------------------------------------- */
515
+
516
+ void KeccakP1600_ExtractBytesInLane(const void *state, unsigned int lanePosition, unsigned char *data, unsigned int offset, unsigned int length)
517
+ {
518
+ if ((lanePosition < 25) && (offset < 8) && (offset+length <= 8)) {
519
+ UINT32 *stateAsHalfLanes = (UINT32*)state;
520
+ UINT32 lane[2];
521
+ UINT8 laneAsBytes[8];
522
+ fromBitInterleaving(stateAsHalfLanes[lanePosition*2], stateAsHalfLanes[lanePosition*2+1], lane, lane+1);
523
+ laneAsBytes[0] = lane[0] & 0xFF;
524
+ laneAsBytes[1] = (lane[0] >> 8) & 0xFF;
525
+ laneAsBytes[2] = (lane[0] >> 16) & 0xFF;
526
+ laneAsBytes[3] = (lane[0] >> 24) & 0xFF;
527
+ laneAsBytes[4] = lane[1] & 0xFF;
528
+ laneAsBytes[5] = (lane[1] >> 8) & 0xFF;
529
+ laneAsBytes[6] = (lane[1] >> 16) & 0xFF;
530
+ laneAsBytes[7] = (lane[1] >> 24) & 0xFF;
531
+ memcpy(data, laneAsBytes+offset, length);
532
+ }
533
+ }
534
+
535
+ void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length)
536
+ {
537
+ unsigned int lanePosition = offset/8;
538
+ unsigned int offsetInLane = offset%8;
539
+
540
+ assert(offset < 200);
541
+ assert(offset+length <= 200);
542
+ while(length > 0) {
543
+ unsigned int bytesInLane = 8 - offsetInLane;
544
+ if (bytesInLane > length)
545
+ bytesInLane = length;
546
+ KeccakP1600_ExtractBytesInLane(state, lanePosition, data, offsetInLane, bytesInLane);
547
+ length -= bytesInLane;
548
+ lanePosition++;
549
+ offsetInLane = 0;
550
+ data += bytesInLane;
551
+ }
552
+ }
553
+
554
+ /* ---------------------------------------------------------------- */
555
+
556
+ void KeccakP1600_ExtractAndAddBytesInLane(const void *state, unsigned int lanePosition, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
557
+ {
558
+ if ((lanePosition < 25) && (offset < 8) && (offset+length <= 8)) {
559
+ UINT8 laneAsBytes[8];
560
+ unsigned int i;
561
+
562
+ KeccakP1600_ExtractBytesInLane(state, lanePosition, laneAsBytes, offset, length);
563
+ for(i=0; i<length; i++)
564
+ output[i] = input[i] ^ laneAsBytes[i];
565
+ }
566
+ }
567
+
568
+ void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
569
+ {
570
+ unsigned int lanePosition = offset/8;
571
+ unsigned int offsetInLane = offset%8;
572
+
573
+ assert(offset < 200);
574
+ assert(offset+length <= 200);
575
+ while(length > 0) {
576
+ unsigned int bytesInLane = 8 - offsetInLane;
577
+ if (bytesInLane > length)
578
+ bytesInLane = length;
579
+ KeccakP1600_ExtractAndAddBytesInLane(state, lanePosition, input, output, offsetInLane, bytesInLane);
580
+ length -= bytesInLane;
581
+ lanePosition++;
582
+ offsetInLane = 0;
583
+ input += bytesInLane;
584
+ output += bytesInLane;
585
+ }
586
+ }
587
+
588
+ /* ---------------------------------------------------------------- */
589
+
590
+ void KeccakP1600_DisplayRoundConstants(FILE *f)
591
+ {
592
+ unsigned int i;
593
+
594
+ for(i=0; i<maxNrRounds; i++) {
595
+ fprintf(f, "RC[%02i][0][0] = ", i);
596
+ fprintf(f, "%08X:%08X", (unsigned int)(KeccakRoundConstants[i][0]), (unsigned int)(KeccakRoundConstants[i][1]));
597
+ fprintf(f, "\n");
598
+ }
599
+ fprintf(f, "\n");
600
+ }
601
+
602
+ void KeccakP1600_DisplayRhoOffsets(FILE *f)
603
+ {
604
+ unsigned int x, y;
605
+
606
+ for(y=0; y<5; y++) for(x=0; x<5; x++) {
607
+ fprintf(f, "RhoOffset[%i][%i] = ", x, y);
608
+ fprintf(f, "%2i", KeccakRhoOffsets[5*y+x]);
609
+ fprintf(f, "\n");
610
+ }
611
+ fprintf(f, "\n");
612
+ }