digest-kangarootwelve 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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
+ }