Guest User

whirlpool.cl

a guest
Jul 21st, 2014
424
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 64.81 KB | None | 0 0
  1. /* $Id: whirlpool.c 227 2010-06-16 17:28:38Z tp $ */
  2. /*
  3. * WHIRLPOOL implementation.
  4. *
  5. * Internally, we use little-endian convention, on the assumption that
  6. * architectures which favour big-endian encoding are:
  7. * 1. rarer
  8. * 2. in decreasing numbers
  9. * 3. able to decode little-endian data efficiently anyway
  10. *
  11. * The most common big-endian architecture is Sparc, and Ultrasparc CPU
  12. * include special opcodes to perform little-endian accesses, which we use
  13. * (see sph_types.h). Most modern CPU designs can work with both endianness
  14. * and architecture designer now favour little-endian (basically, x86 has
  15. * won the endianness war).
  16. *
  17. * TODO: implement a 32-bit version. Not only such a version would be handy
  18. * for non-64-bit-able architectures, but it may also use smaller tables,
  19. * at the expense of more lookups and XORs.
  20. *
  21. * ==========================(LICENSE BEGIN)============================
  22. *
  23. * Copyright (c) 2007-2010 Projet RNRT SAPHIR
  24. *
  25. * Permission is hereby granted, free of charge, to any person obtaining
  26. * a copy of this software and associated documentation files (the
  27. * "Software"), to deal in the Software without restriction, including
  28. * without limitation the rights to use, copy, modify, merge, publish,
  29. * distribute, sublicense, and/or sell copies of the Software, and to
  30. * permit persons to whom the Software is furnished to do so, subject to
  31. * the following conditions:
  32. *
  33. * The above copyright notice and this permission notice shall be
  34. * included in all copies or substantial portions of the Software.
  35. *
  36. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  37. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  38. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  39. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  40. * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  41. * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  42. * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  43. *
  44. * ===========================(LICENSE END)=============================
  45. *
  46. * @author Thomas Pornin <[email protected]>
  47. */
  48.  
  49. #if SPH_64
  50.  
  51. /* ====================================================================== */
  52. /*
  53. * Constants for plain WHIRLPOOL (current version).
  54. */
  55.  
  56. __constant static const sph_u64 plain_T0[256] = {
  57. SPH_C64(0xD83078C018601818), SPH_C64(0x2646AF05238C2323),
  58. SPH_C64(0xB891F97EC63FC6C6), SPH_C64(0xFBCD6F13E887E8E8),
  59. SPH_C64(0xCB13A14C87268787), SPH_C64(0x116D62A9B8DAB8B8),
  60. SPH_C64(0x0902050801040101), SPH_C64(0x0D9E6E424F214F4F),
  61. SPH_C64(0x9B6CEEAD36D83636), SPH_C64(0xFF510459A6A2A6A6),
  62. SPH_C64(0x0CB9BDDED26FD2D2), SPH_C64(0x0EF706FBF5F3F5F5),
  63. SPH_C64(0x96F280EF79F97979), SPH_C64(0x30DECE5F6FA16F6F),
  64. SPH_C64(0x6D3FEFFC917E9191), SPH_C64(0xF8A407AA52555252),
  65. SPH_C64(0x47C0FD27609D6060), SPH_C64(0x35657689BCCABCBC),
  66. SPH_C64(0x372BCDAC9B569B9B), SPH_C64(0x8A018C048E028E8E),
  67. SPH_C64(0xD25B1571A3B6A3A3), SPH_C64(0x6C183C600C300C0C),
  68. SPH_C64(0x84F68AFF7BF17B7B), SPH_C64(0x806AE1B535D43535),
  69. SPH_C64(0xF53A69E81D741D1D), SPH_C64(0xB3DD4753E0A7E0E0),
  70. SPH_C64(0x21B3ACF6D77BD7D7), SPH_C64(0x9C99ED5EC22FC2C2),
  71. SPH_C64(0x435C966D2EB82E2E), SPH_C64(0x29967A624B314B4B),
  72. SPH_C64(0x5DE121A3FEDFFEFE), SPH_C64(0xD5AE168257415757),
  73. SPH_C64(0xBD2A41A815541515), SPH_C64(0xE8EEB69F77C17777),
  74. SPH_C64(0x926EEBA537DC3737), SPH_C64(0x9ED7567BE5B3E5E5),
  75. SPH_C64(0x1323D98C9F469F9F), SPH_C64(0x23FD17D3F0E7F0F0),
  76. SPH_C64(0x20947F6A4A354A4A), SPH_C64(0x44A9959EDA4FDADA),
  77. SPH_C64(0xA2B025FA587D5858), SPH_C64(0xCF8FCA06C903C9C9),
  78. SPH_C64(0x7C528D5529A42929), SPH_C64(0x5A1422500A280A0A),
  79. SPH_C64(0x507F4FE1B1FEB1B1), SPH_C64(0xC95D1A69A0BAA0A0),
  80. SPH_C64(0x14D6DA7F6BB16B6B), SPH_C64(0xD917AB5C852E8585),
  81. SPH_C64(0x3C677381BDCEBDBD), SPH_C64(0x8FBA34D25D695D5D),
  82. SPH_C64(0x9020508010401010), SPH_C64(0x07F503F3F4F7F4F4),
  83. SPH_C64(0xDD8BC016CB0BCBCB), SPH_C64(0xD37CC6ED3EF83E3E),
  84. SPH_C64(0x2D0A112805140505), SPH_C64(0x78CEE61F67816767),
  85. SPH_C64(0x97D55373E4B7E4E4), SPH_C64(0x024EBB25279C2727),
  86. SPH_C64(0x7382583241194141), SPH_C64(0xA70B9D2C8B168B8B),
  87. SPH_C64(0xF6530151A7A6A7A7), SPH_C64(0xB2FA94CF7DE97D7D),
  88. SPH_C64(0x4937FBDC956E9595), SPH_C64(0x56AD9F8ED847D8D8),
  89. SPH_C64(0x70EB308BFBCBFBFB), SPH_C64(0xCDC17123EE9FEEEE),
  90. SPH_C64(0xBBF891C77CED7C7C), SPH_C64(0x71CCE31766856666),
  91. SPH_C64(0x7BA78EA6DD53DDDD), SPH_C64(0xAF2E4BB8175C1717),
  92. SPH_C64(0x458E460247014747), SPH_C64(0x1A21DC849E429E9E),
  93. SPH_C64(0xD489C51ECA0FCACA), SPH_C64(0x585A99752DB42D2D),
  94. SPH_C64(0x2E637991BFC6BFBF), SPH_C64(0x3F0E1B38071C0707),
  95. SPH_C64(0xAC472301AD8EADAD), SPH_C64(0xB0B42FEA5A755A5A),
  96. SPH_C64(0xEF1BB56C83368383), SPH_C64(0xB666FF8533CC3333),
  97. SPH_C64(0x5CC6F23F63916363), SPH_C64(0x12040A1002080202),
  98. SPH_C64(0x93493839AA92AAAA), SPH_C64(0xDEE2A8AF71D97171),
  99. SPH_C64(0xC68DCF0EC807C8C8), SPH_C64(0xD1327DC819641919),
  100. SPH_C64(0x3B92707249394949), SPH_C64(0x5FAF9A86D943D9D9),
  101. SPH_C64(0x31F91DC3F2EFF2F2), SPH_C64(0xA8DB484BE3ABE3E3),
  102. SPH_C64(0xB9B62AE25B715B5B), SPH_C64(0xBC0D9234881A8888),
  103. SPH_C64(0x3E29C8A49A529A9A), SPH_C64(0x0B4CBE2D26982626),
  104. SPH_C64(0xBF64FA8D32C83232), SPH_C64(0x597D4AE9B0FAB0B0),
  105. SPH_C64(0xF2CF6A1BE983E9E9), SPH_C64(0x771E33780F3C0F0F),
  106. SPH_C64(0x33B7A6E6D573D5D5), SPH_C64(0xF41DBA74803A8080),
  107. SPH_C64(0x27617C99BEC2BEBE), SPH_C64(0xEB87DE26CD13CDCD),
  108. SPH_C64(0x8968E4BD34D03434), SPH_C64(0x3290757A483D4848),
  109. SPH_C64(0x54E324ABFFDBFFFF), SPH_C64(0x8DF48FF77AF57A7A),
  110. SPH_C64(0x643DEAF4907A9090), SPH_C64(0x9DBE3EC25F615F5F),
  111. SPH_C64(0x3D40A01D20802020), SPH_C64(0x0FD0D56768BD6868),
  112. SPH_C64(0xCA3472D01A681A1A), SPH_C64(0xB7412C19AE82AEAE),
  113. SPH_C64(0x7D755EC9B4EAB4B4), SPH_C64(0xCEA8199A544D5454),
  114. SPH_C64(0x7F3BE5EC93769393), SPH_C64(0x2F44AA0D22882222),
  115. SPH_C64(0x63C8E907648D6464), SPH_C64(0x2AFF12DBF1E3F1F1),
  116. SPH_C64(0xCCE6A2BF73D17373), SPH_C64(0x82245A9012481212),
  117. SPH_C64(0x7A805D3A401D4040), SPH_C64(0x4810284008200808),
  118. SPH_C64(0x959BE856C32BC3C3), SPH_C64(0xDFC57B33EC97ECEC),
  119. SPH_C64(0x4DAB9096DB4BDBDB), SPH_C64(0xC05F1F61A1BEA1A1),
  120. SPH_C64(0x9107831C8D0E8D8D), SPH_C64(0xC87AC9F53DF43D3D),
  121. SPH_C64(0x5B33F1CC97669797), SPH_C64(0x0000000000000000),
  122. SPH_C64(0xF983D436CF1BCFCF), SPH_C64(0x6E5687452BAC2B2B),
  123. SPH_C64(0xE1ECB39776C57676), SPH_C64(0xE619B06482328282),
  124. SPH_C64(0x28B1A9FED67FD6D6), SPH_C64(0xC33677D81B6C1B1B),
  125. SPH_C64(0x74775BC1B5EEB5B5), SPH_C64(0xBE432911AF86AFAF),
  126. SPH_C64(0x1DD4DF776AB56A6A), SPH_C64(0xEAA00DBA505D5050),
  127. SPH_C64(0x578A4C1245094545), SPH_C64(0x38FB18CBF3EBF3F3),
  128. SPH_C64(0xAD60F09D30C03030), SPH_C64(0xC4C3742BEF9BEFEF),
  129. SPH_C64(0xDA7EC3E53FFC3F3F), SPH_C64(0xC7AA1C9255495555),
  130. SPH_C64(0xDB591079A2B2A2A2), SPH_C64(0xE9C96503EA8FEAEA),
  131. SPH_C64(0x6ACAEC0F65896565), SPH_C64(0x036968B9BAD2BABA),
  132. SPH_C64(0x4A5E93652FBC2F2F), SPH_C64(0x8E9DE74EC027C0C0),
  133. SPH_C64(0x60A181BEDE5FDEDE), SPH_C64(0xFC386CE01C701C1C),
  134. SPH_C64(0x46E72EBBFDD3FDFD), SPH_C64(0x1F9A64524D294D4D),
  135. SPH_C64(0x7639E0E492729292), SPH_C64(0xFAEABC8F75C97575),
  136. SPH_C64(0x360C1E3006180606), SPH_C64(0xAE0998248A128A8A),
  137. SPH_C64(0x4B7940F9B2F2B2B2), SPH_C64(0x85D15963E6BFE6E6),
  138. SPH_C64(0x7E1C36700E380E0E), SPH_C64(0xE73E63F81F7C1F1F),
  139. SPH_C64(0x55C4F73762956262), SPH_C64(0x3AB5A3EED477D4D4),
  140. SPH_C64(0x814D3229A89AA8A8), SPH_C64(0x5231F4C496629696),
  141. SPH_C64(0x62EF3A9BF9C3F9F9), SPH_C64(0xA397F666C533C5C5),
  142. SPH_C64(0x104AB13525942525), SPH_C64(0xABB220F259795959),
  143. SPH_C64(0xD015AE54842A8484), SPH_C64(0xC5E4A7B772D57272),
  144. SPH_C64(0xEC72DDD539E43939), SPH_C64(0x1698615A4C2D4C4C),
  145. SPH_C64(0x94BC3BCA5E655E5E), SPH_C64(0x9FF085E778FD7878),
  146. SPH_C64(0xE570D8DD38E03838), SPH_C64(0x980586148C0A8C8C),
  147. SPH_C64(0x17BFB2C6D163D1D1), SPH_C64(0xE4570B41A5AEA5A5),
  148. SPH_C64(0xA1D94D43E2AFE2E2), SPH_C64(0x4EC2F82F61996161),
  149. SPH_C64(0x427B45F1B3F6B3B3), SPH_C64(0x3442A51521842121),
  150. SPH_C64(0x0825D6949C4A9C9C), SPH_C64(0xEE3C66F01E781E1E),
  151. SPH_C64(0x6186522243114343), SPH_C64(0xB193FC76C73BC7C7),
  152. SPH_C64(0x4FE52BB3FCD7FCFC), SPH_C64(0x2408142004100404),
  153. SPH_C64(0xE3A208B251595151), SPH_C64(0x252FC7BC995E9999),
  154. SPH_C64(0x22DAC44F6DA96D6D), SPH_C64(0x651A39680D340D0D),
  155. SPH_C64(0x79E93583FACFFAFA), SPH_C64(0x69A384B6DF5BDFDF),
  156. SPH_C64(0xA9FC9BD77EE57E7E), SPH_C64(0x1948B43D24902424),
  157. SPH_C64(0xFE76D7C53BEC3B3B), SPH_C64(0x9A4B3D31AB96ABAB),
  158. SPH_C64(0xF081D13ECE1FCECE), SPH_C64(0x9922558811441111),
  159. SPH_C64(0x8303890C8F068F8F), SPH_C64(0x049C6B4A4E254E4E),
  160. SPH_C64(0x667351D1B7E6B7B7), SPH_C64(0xE0CB600BEB8BEBEB),
  161. SPH_C64(0xC178CCFD3CF03C3C), SPH_C64(0xFD1FBF7C813E8181),
  162. SPH_C64(0x4035FED4946A9494), SPH_C64(0x1CF30CEBF7FBF7F7),
  163. SPH_C64(0x186F67A1B9DEB9B9), SPH_C64(0x8B265F98134C1313),
  164. SPH_C64(0x51589C7D2CB02C2C), SPH_C64(0x05BBB8D6D36BD3D3),
  165. SPH_C64(0x8CD35C6BE7BBE7E7), SPH_C64(0x39DCCB576EA56E6E),
  166. SPH_C64(0xAA95F36EC437C4C4), SPH_C64(0x1B060F18030C0303),
  167. SPH_C64(0xDCAC138A56455656), SPH_C64(0x5E88491A440D4444),
  168. SPH_C64(0xA0FE9EDF7FE17F7F), SPH_C64(0x884F3721A99EA9A9),
  169. SPH_C64(0x6754824D2AA82A2A), SPH_C64(0x0A6B6DB1BBD6BBBB),
  170. SPH_C64(0x879FE246C123C1C1), SPH_C64(0xF1A602A253515353),
  171. SPH_C64(0x72A58BAEDC57DCDC), SPH_C64(0x531627580B2C0B0B),
  172. SPH_C64(0x0127D39C9D4E9D9D), SPH_C64(0x2BD8C1476CAD6C6C),
  173. SPH_C64(0xA462F59531C43131), SPH_C64(0xF3E8B98774CD7474),
  174. SPH_C64(0x15F109E3F6FFF6F6), SPH_C64(0x4C8C430A46054646),
  175. SPH_C64(0xA5452609AC8AACAC), SPH_C64(0xB50F973C891E8989),
  176. SPH_C64(0xB42844A014501414), SPH_C64(0xBADF425BE1A3E1E1),
  177. SPH_C64(0xA62C4EB016581616), SPH_C64(0xF774D2CD3AE83A3A),
  178. SPH_C64(0x06D2D06F69B96969), SPH_C64(0x41122D4809240909),
  179. SPH_C64(0xD7E0ADA770DD7070), SPH_C64(0x6F7154D9B6E2B6B6),
  180. SPH_C64(0x1EBDB7CED067D0D0), SPH_C64(0xD6C77E3BED93EDED),
  181. SPH_C64(0xE285DB2ECC17CCCC), SPH_C64(0x6884572A42154242),
  182. SPH_C64(0x2C2DC2B4985A9898), SPH_C64(0xED550E49A4AAA4A4),
  183. SPH_C64(0x7550885D28A02828), SPH_C64(0x86B831DA5C6D5C5C),
  184. SPH_C64(0x6BED3F93F8C7F8F8), SPH_C64(0xC211A44486228686)
  185. };
  186.  
  187. #if !SPH_SMALL_FOOTPRINT_WHIRLPOOL
  188.  
  189. __constant static const sph_u64 plain_T1[256] = {
  190. SPH_C64(0x3078C018601818D8), SPH_C64(0x46AF05238C232326),
  191. SPH_C64(0x91F97EC63FC6C6B8), SPH_C64(0xCD6F13E887E8E8FB),
  192. SPH_C64(0x13A14C87268787CB), SPH_C64(0x6D62A9B8DAB8B811),
  193. SPH_C64(0x0205080104010109), SPH_C64(0x9E6E424F214F4F0D),
  194. SPH_C64(0x6CEEAD36D836369B), SPH_C64(0x510459A6A2A6A6FF),
  195. SPH_C64(0xB9BDDED26FD2D20C), SPH_C64(0xF706FBF5F3F5F50E),
  196. SPH_C64(0xF280EF79F9797996), SPH_C64(0xDECE5F6FA16F6F30),
  197. SPH_C64(0x3FEFFC917E91916D), SPH_C64(0xA407AA52555252F8),
  198. SPH_C64(0xC0FD27609D606047), SPH_C64(0x657689BCCABCBC35),
  199. SPH_C64(0x2BCDAC9B569B9B37), SPH_C64(0x018C048E028E8E8A),
  200. SPH_C64(0x5B1571A3B6A3A3D2), SPH_C64(0x183C600C300C0C6C),
  201. SPH_C64(0xF68AFF7BF17B7B84), SPH_C64(0x6AE1B535D4353580),
  202. SPH_C64(0x3A69E81D741D1DF5), SPH_C64(0xDD4753E0A7E0E0B3),
  203. SPH_C64(0xB3ACF6D77BD7D721), SPH_C64(0x99ED5EC22FC2C29C),
  204. SPH_C64(0x5C966D2EB82E2E43), SPH_C64(0x967A624B314B4B29),
  205. SPH_C64(0xE121A3FEDFFEFE5D), SPH_C64(0xAE168257415757D5),
  206. SPH_C64(0x2A41A815541515BD), SPH_C64(0xEEB69F77C17777E8),
  207. SPH_C64(0x6EEBA537DC373792), SPH_C64(0xD7567BE5B3E5E59E),
  208. SPH_C64(0x23D98C9F469F9F13), SPH_C64(0xFD17D3F0E7F0F023),
  209. SPH_C64(0x947F6A4A354A4A20), SPH_C64(0xA9959EDA4FDADA44),
  210. SPH_C64(0xB025FA587D5858A2), SPH_C64(0x8FCA06C903C9C9CF),
  211. SPH_C64(0x528D5529A429297C), SPH_C64(0x1422500A280A0A5A),
  212. SPH_C64(0x7F4FE1B1FEB1B150), SPH_C64(0x5D1A69A0BAA0A0C9),
  213. SPH_C64(0xD6DA7F6BB16B6B14), SPH_C64(0x17AB5C852E8585D9),
  214. SPH_C64(0x677381BDCEBDBD3C), SPH_C64(0xBA34D25D695D5D8F),
  215. SPH_C64(0x2050801040101090), SPH_C64(0xF503F3F4F7F4F407),
  216. SPH_C64(0x8BC016CB0BCBCBDD), SPH_C64(0x7CC6ED3EF83E3ED3),
  217. SPH_C64(0x0A1128051405052D), SPH_C64(0xCEE61F6781676778),
  218. SPH_C64(0xD55373E4B7E4E497), SPH_C64(0x4EBB25279C272702),
  219. SPH_C64(0x8258324119414173), SPH_C64(0x0B9D2C8B168B8BA7),
  220. SPH_C64(0x530151A7A6A7A7F6), SPH_C64(0xFA94CF7DE97D7DB2),
  221. SPH_C64(0x37FBDC956E959549), SPH_C64(0xAD9F8ED847D8D856),
  222. SPH_C64(0xEB308BFBCBFBFB70), SPH_C64(0xC17123EE9FEEEECD),
  223. SPH_C64(0xF891C77CED7C7CBB), SPH_C64(0xCCE3176685666671),
  224. SPH_C64(0xA78EA6DD53DDDD7B), SPH_C64(0x2E4BB8175C1717AF),
  225. SPH_C64(0x8E46024701474745), SPH_C64(0x21DC849E429E9E1A),
  226. SPH_C64(0x89C51ECA0FCACAD4), SPH_C64(0x5A99752DB42D2D58),
  227. SPH_C64(0x637991BFC6BFBF2E), SPH_C64(0x0E1B38071C07073F),
  228. SPH_C64(0x472301AD8EADADAC), SPH_C64(0xB42FEA5A755A5AB0),
  229. SPH_C64(0x1BB56C83368383EF), SPH_C64(0x66FF8533CC3333B6),
  230. SPH_C64(0xC6F23F639163635C), SPH_C64(0x040A100208020212),
  231. SPH_C64(0x493839AA92AAAA93), SPH_C64(0xE2A8AF71D97171DE),
  232. SPH_C64(0x8DCF0EC807C8C8C6), SPH_C64(0x327DC819641919D1),
  233. SPH_C64(0x927072493949493B), SPH_C64(0xAF9A86D943D9D95F),
  234. SPH_C64(0xF91DC3F2EFF2F231), SPH_C64(0xDB484BE3ABE3E3A8),
  235. SPH_C64(0xB62AE25B715B5BB9), SPH_C64(0x0D9234881A8888BC),
  236. SPH_C64(0x29C8A49A529A9A3E), SPH_C64(0x4CBE2D269826260B),
  237. SPH_C64(0x64FA8D32C83232BF), SPH_C64(0x7D4AE9B0FAB0B059),
  238. SPH_C64(0xCF6A1BE983E9E9F2), SPH_C64(0x1E33780F3C0F0F77),
  239. SPH_C64(0xB7A6E6D573D5D533), SPH_C64(0x1DBA74803A8080F4),
  240. SPH_C64(0x617C99BEC2BEBE27), SPH_C64(0x87DE26CD13CDCDEB),
  241. SPH_C64(0x68E4BD34D0343489), SPH_C64(0x90757A483D484832),
  242. SPH_C64(0xE324ABFFDBFFFF54), SPH_C64(0xF48FF77AF57A7A8D),
  243. SPH_C64(0x3DEAF4907A909064), SPH_C64(0xBE3EC25F615F5F9D),
  244. SPH_C64(0x40A01D208020203D), SPH_C64(0xD0D56768BD68680F),
  245. SPH_C64(0x3472D01A681A1ACA), SPH_C64(0x412C19AE82AEAEB7),
  246. SPH_C64(0x755EC9B4EAB4B47D), SPH_C64(0xA8199A544D5454CE),
  247. SPH_C64(0x3BE5EC937693937F), SPH_C64(0x44AA0D228822222F),
  248. SPH_C64(0xC8E907648D646463), SPH_C64(0xFF12DBF1E3F1F12A),
  249. SPH_C64(0xE6A2BF73D17373CC), SPH_C64(0x245A901248121282),
  250. SPH_C64(0x805D3A401D40407A), SPH_C64(0x1028400820080848),
  251. SPH_C64(0x9BE856C32BC3C395), SPH_C64(0xC57B33EC97ECECDF),
  252. SPH_C64(0xAB9096DB4BDBDB4D), SPH_C64(0x5F1F61A1BEA1A1C0),
  253. SPH_C64(0x07831C8D0E8D8D91), SPH_C64(0x7AC9F53DF43D3DC8),
  254. SPH_C64(0x33F1CC976697975B), SPH_C64(0x0000000000000000),
  255. SPH_C64(0x83D436CF1BCFCFF9), SPH_C64(0x5687452BAC2B2B6E),
  256. SPH_C64(0xECB39776C57676E1), SPH_C64(0x19B06482328282E6),
  257. SPH_C64(0xB1A9FED67FD6D628), SPH_C64(0x3677D81B6C1B1BC3),
  258. SPH_C64(0x775BC1B5EEB5B574), SPH_C64(0x432911AF86AFAFBE),
  259. SPH_C64(0xD4DF776AB56A6A1D), SPH_C64(0xA00DBA505D5050EA),
  260. SPH_C64(0x8A4C124509454557), SPH_C64(0xFB18CBF3EBF3F338),
  261. SPH_C64(0x60F09D30C03030AD), SPH_C64(0xC3742BEF9BEFEFC4),
  262. SPH_C64(0x7EC3E53FFC3F3FDA), SPH_C64(0xAA1C9255495555C7),
  263. SPH_C64(0x591079A2B2A2A2DB), SPH_C64(0xC96503EA8FEAEAE9),
  264. SPH_C64(0xCAEC0F658965656A), SPH_C64(0x6968B9BAD2BABA03),
  265. SPH_C64(0x5E93652FBC2F2F4A), SPH_C64(0x9DE74EC027C0C08E),
  266. SPH_C64(0xA181BEDE5FDEDE60), SPH_C64(0x386CE01C701C1CFC),
  267. SPH_C64(0xE72EBBFDD3FDFD46), SPH_C64(0x9A64524D294D4D1F),
  268. SPH_C64(0x39E0E49272929276), SPH_C64(0xEABC8F75C97575FA),
  269. SPH_C64(0x0C1E300618060636), SPH_C64(0x0998248A128A8AAE),
  270. SPH_C64(0x7940F9B2F2B2B24B), SPH_C64(0xD15963E6BFE6E685),
  271. SPH_C64(0x1C36700E380E0E7E), SPH_C64(0x3E63F81F7C1F1FE7),
  272. SPH_C64(0xC4F7376295626255), SPH_C64(0xB5A3EED477D4D43A),
  273. SPH_C64(0x4D3229A89AA8A881), SPH_C64(0x31F4C49662969652),
  274. SPH_C64(0xEF3A9BF9C3F9F962), SPH_C64(0x97F666C533C5C5A3),
  275. SPH_C64(0x4AB1352594252510), SPH_C64(0xB220F259795959AB),
  276. SPH_C64(0x15AE54842A8484D0), SPH_C64(0xE4A7B772D57272C5),
  277. SPH_C64(0x72DDD539E43939EC), SPH_C64(0x98615A4C2D4C4C16),
  278. SPH_C64(0xBC3BCA5E655E5E94), SPH_C64(0xF085E778FD78789F),
  279. SPH_C64(0x70D8DD38E03838E5), SPH_C64(0x0586148C0A8C8C98),
  280. SPH_C64(0xBFB2C6D163D1D117), SPH_C64(0x570B41A5AEA5A5E4),
  281. SPH_C64(0xD94D43E2AFE2E2A1), SPH_C64(0xC2F82F619961614E),
  282. SPH_C64(0x7B45F1B3F6B3B342), SPH_C64(0x42A5152184212134),
  283. SPH_C64(0x25D6949C4A9C9C08), SPH_C64(0x3C66F01E781E1EEE),
  284. SPH_C64(0x8652224311434361), SPH_C64(0x93FC76C73BC7C7B1),
  285. SPH_C64(0xE52BB3FCD7FCFC4F), SPH_C64(0x0814200410040424),
  286. SPH_C64(0xA208B251595151E3), SPH_C64(0x2FC7BC995E999925),
  287. SPH_C64(0xDAC44F6DA96D6D22), SPH_C64(0x1A39680D340D0D65),
  288. SPH_C64(0xE93583FACFFAFA79), SPH_C64(0xA384B6DF5BDFDF69),
  289. SPH_C64(0xFC9BD77EE57E7EA9), SPH_C64(0x48B43D2490242419),
  290. SPH_C64(0x76D7C53BEC3B3BFE), SPH_C64(0x4B3D31AB96ABAB9A),
  291. SPH_C64(0x81D13ECE1FCECEF0), SPH_C64(0x2255881144111199),
  292. SPH_C64(0x03890C8F068F8F83), SPH_C64(0x9C6B4A4E254E4E04),
  293. SPH_C64(0x7351D1B7E6B7B766), SPH_C64(0xCB600BEB8BEBEBE0),
  294. SPH_C64(0x78CCFD3CF03C3CC1), SPH_C64(0x1FBF7C813E8181FD),
  295. SPH_C64(0x35FED4946A949440), SPH_C64(0xF30CEBF7FBF7F71C),
  296. SPH_C64(0x6F67A1B9DEB9B918), SPH_C64(0x265F98134C13138B),
  297. SPH_C64(0x589C7D2CB02C2C51), SPH_C64(0xBBB8D6D36BD3D305),
  298. SPH_C64(0xD35C6BE7BBE7E78C), SPH_C64(0xDCCB576EA56E6E39),
  299. SPH_C64(0x95F36EC437C4C4AA), SPH_C64(0x060F18030C03031B),
  300. SPH_C64(0xAC138A56455656DC), SPH_C64(0x88491A440D44445E),
  301. SPH_C64(0xFE9EDF7FE17F7FA0), SPH_C64(0x4F3721A99EA9A988),
  302. SPH_C64(0x54824D2AA82A2A67), SPH_C64(0x6B6DB1BBD6BBBB0A),
  303. SPH_C64(0x9FE246C123C1C187), SPH_C64(0xA602A253515353F1),
  304. SPH_C64(0xA58BAEDC57DCDC72), SPH_C64(0x1627580B2C0B0B53),
  305. SPH_C64(0x27D39C9D4E9D9D01), SPH_C64(0xD8C1476CAD6C6C2B),
  306. SPH_C64(0x62F59531C43131A4), SPH_C64(0xE8B98774CD7474F3),
  307. SPH_C64(0xF109E3F6FFF6F615), SPH_C64(0x8C430A460546464C),
  308. SPH_C64(0x452609AC8AACACA5), SPH_C64(0x0F973C891E8989B5),
  309. SPH_C64(0x2844A014501414B4), SPH_C64(0xDF425BE1A3E1E1BA),
  310. SPH_C64(0x2C4EB016581616A6), SPH_C64(0x74D2CD3AE83A3AF7),
  311. SPH_C64(0xD2D06F69B9696906), SPH_C64(0x122D480924090941),
  312. SPH_C64(0xE0ADA770DD7070D7), SPH_C64(0x7154D9B6E2B6B66F),
  313. SPH_C64(0xBDB7CED067D0D01E), SPH_C64(0xC77E3BED93EDEDD6),
  314. SPH_C64(0x85DB2ECC17CCCCE2), SPH_C64(0x84572A4215424268),
  315. SPH_C64(0x2DC2B4985A98982C), SPH_C64(0x550E49A4AAA4A4ED),
  316. SPH_C64(0x50885D28A0282875), SPH_C64(0xB831DA5C6D5C5C86),
  317. SPH_C64(0xED3F93F8C7F8F86B), SPH_C64(0x11A44486228686C2)
  318. };
  319.  
  320. __constant static const sph_u64 plain_T2[256] = {
  321. SPH_C64(0x78C018601818D830), SPH_C64(0xAF05238C23232646),
  322. SPH_C64(0xF97EC63FC6C6B891), SPH_C64(0x6F13E887E8E8FBCD),
  323. SPH_C64(0xA14C87268787CB13), SPH_C64(0x62A9B8DAB8B8116D),
  324. SPH_C64(0x0508010401010902), SPH_C64(0x6E424F214F4F0D9E),
  325. SPH_C64(0xEEAD36D836369B6C), SPH_C64(0x0459A6A2A6A6FF51),
  326. SPH_C64(0xBDDED26FD2D20CB9), SPH_C64(0x06FBF5F3F5F50EF7),
  327. SPH_C64(0x80EF79F9797996F2), SPH_C64(0xCE5F6FA16F6F30DE),
  328. SPH_C64(0xEFFC917E91916D3F), SPH_C64(0x07AA52555252F8A4),
  329. SPH_C64(0xFD27609D606047C0), SPH_C64(0x7689BCCABCBC3565),
  330. SPH_C64(0xCDAC9B569B9B372B), SPH_C64(0x8C048E028E8E8A01),
  331. SPH_C64(0x1571A3B6A3A3D25B), SPH_C64(0x3C600C300C0C6C18),
  332. SPH_C64(0x8AFF7BF17B7B84F6), SPH_C64(0xE1B535D43535806A),
  333. SPH_C64(0x69E81D741D1DF53A), SPH_C64(0x4753E0A7E0E0B3DD),
  334. SPH_C64(0xACF6D77BD7D721B3), SPH_C64(0xED5EC22FC2C29C99),
  335. SPH_C64(0x966D2EB82E2E435C), SPH_C64(0x7A624B314B4B2996),
  336. SPH_C64(0x21A3FEDFFEFE5DE1), SPH_C64(0x168257415757D5AE),
  337. SPH_C64(0x41A815541515BD2A), SPH_C64(0xB69F77C17777E8EE),
  338. SPH_C64(0xEBA537DC3737926E), SPH_C64(0x567BE5B3E5E59ED7),
  339. SPH_C64(0xD98C9F469F9F1323), SPH_C64(0x17D3F0E7F0F023FD),
  340. SPH_C64(0x7F6A4A354A4A2094), SPH_C64(0x959EDA4FDADA44A9),
  341. SPH_C64(0x25FA587D5858A2B0), SPH_C64(0xCA06C903C9C9CF8F),
  342. SPH_C64(0x8D5529A429297C52), SPH_C64(0x22500A280A0A5A14),
  343. SPH_C64(0x4FE1B1FEB1B1507F), SPH_C64(0x1A69A0BAA0A0C95D),
  344. SPH_C64(0xDA7F6BB16B6B14D6), SPH_C64(0xAB5C852E8585D917),
  345. SPH_C64(0x7381BDCEBDBD3C67), SPH_C64(0x34D25D695D5D8FBA),
  346. SPH_C64(0x5080104010109020), SPH_C64(0x03F3F4F7F4F407F5),
  347. SPH_C64(0xC016CB0BCBCBDD8B), SPH_C64(0xC6ED3EF83E3ED37C),
  348. SPH_C64(0x1128051405052D0A), SPH_C64(0xE61F6781676778CE),
  349. SPH_C64(0x5373E4B7E4E497D5), SPH_C64(0xBB25279C2727024E),
  350. SPH_C64(0x5832411941417382), SPH_C64(0x9D2C8B168B8BA70B),
  351. SPH_C64(0x0151A7A6A7A7F653), SPH_C64(0x94CF7DE97D7DB2FA),
  352. SPH_C64(0xFBDC956E95954937), SPH_C64(0x9F8ED847D8D856AD),
  353. SPH_C64(0x308BFBCBFBFB70EB), SPH_C64(0x7123EE9FEEEECDC1),
  354. SPH_C64(0x91C77CED7C7CBBF8), SPH_C64(0xE3176685666671CC),
  355. SPH_C64(0x8EA6DD53DDDD7BA7), SPH_C64(0x4BB8175C1717AF2E),
  356. SPH_C64(0x460247014747458E), SPH_C64(0xDC849E429E9E1A21),
  357. SPH_C64(0xC51ECA0FCACAD489), SPH_C64(0x99752DB42D2D585A),
  358. SPH_C64(0x7991BFC6BFBF2E63), SPH_C64(0x1B38071C07073F0E),
  359. SPH_C64(0x2301AD8EADADAC47), SPH_C64(0x2FEA5A755A5AB0B4),
  360. SPH_C64(0xB56C83368383EF1B), SPH_C64(0xFF8533CC3333B666),
  361. SPH_C64(0xF23F639163635CC6), SPH_C64(0x0A10020802021204),
  362. SPH_C64(0x3839AA92AAAA9349), SPH_C64(0xA8AF71D97171DEE2),
  363. SPH_C64(0xCF0EC807C8C8C68D), SPH_C64(0x7DC819641919D132),
  364. SPH_C64(0x7072493949493B92), SPH_C64(0x9A86D943D9D95FAF),
  365. SPH_C64(0x1DC3F2EFF2F231F9), SPH_C64(0x484BE3ABE3E3A8DB),
  366. SPH_C64(0x2AE25B715B5BB9B6), SPH_C64(0x9234881A8888BC0D),
  367. SPH_C64(0xC8A49A529A9A3E29), SPH_C64(0xBE2D269826260B4C),
  368. SPH_C64(0xFA8D32C83232BF64), SPH_C64(0x4AE9B0FAB0B0597D),
  369. SPH_C64(0x6A1BE983E9E9F2CF), SPH_C64(0x33780F3C0F0F771E),
  370. SPH_C64(0xA6E6D573D5D533B7), SPH_C64(0xBA74803A8080F41D),
  371. SPH_C64(0x7C99BEC2BEBE2761), SPH_C64(0xDE26CD13CDCDEB87),
  372. SPH_C64(0xE4BD34D034348968), SPH_C64(0x757A483D48483290),
  373. SPH_C64(0x24ABFFDBFFFF54E3), SPH_C64(0x8FF77AF57A7A8DF4),
  374. SPH_C64(0xEAF4907A9090643D), SPH_C64(0x3EC25F615F5F9DBE),
  375. SPH_C64(0xA01D208020203D40), SPH_C64(0xD56768BD68680FD0),
  376. SPH_C64(0x72D01A681A1ACA34), SPH_C64(0x2C19AE82AEAEB741),
  377. SPH_C64(0x5EC9B4EAB4B47D75), SPH_C64(0x199A544D5454CEA8),
  378. SPH_C64(0xE5EC937693937F3B), SPH_C64(0xAA0D228822222F44),
  379. SPH_C64(0xE907648D646463C8), SPH_C64(0x12DBF1E3F1F12AFF),
  380. SPH_C64(0xA2BF73D17373CCE6), SPH_C64(0x5A90124812128224),
  381. SPH_C64(0x5D3A401D40407A80), SPH_C64(0x2840082008084810),
  382. SPH_C64(0xE856C32BC3C3959B), SPH_C64(0x7B33EC97ECECDFC5),
  383. SPH_C64(0x9096DB4BDBDB4DAB), SPH_C64(0x1F61A1BEA1A1C05F),
  384. SPH_C64(0x831C8D0E8D8D9107), SPH_C64(0xC9F53DF43D3DC87A),
  385. SPH_C64(0xF1CC976697975B33), SPH_C64(0x0000000000000000),
  386. SPH_C64(0xD436CF1BCFCFF983), SPH_C64(0x87452BAC2B2B6E56),
  387. SPH_C64(0xB39776C57676E1EC), SPH_C64(0xB06482328282E619),
  388. SPH_C64(0xA9FED67FD6D628B1), SPH_C64(0x77D81B6C1B1BC336),
  389. SPH_C64(0x5BC1B5EEB5B57477), SPH_C64(0x2911AF86AFAFBE43),
  390. SPH_C64(0xDF776AB56A6A1DD4), SPH_C64(0x0DBA505D5050EAA0),
  391. SPH_C64(0x4C1245094545578A), SPH_C64(0x18CBF3EBF3F338FB),
  392. SPH_C64(0xF09D30C03030AD60), SPH_C64(0x742BEF9BEFEFC4C3),
  393. SPH_C64(0xC3E53FFC3F3FDA7E), SPH_C64(0x1C9255495555C7AA),
  394. SPH_C64(0x1079A2B2A2A2DB59), SPH_C64(0x6503EA8FEAEAE9C9),
  395. SPH_C64(0xEC0F658965656ACA), SPH_C64(0x68B9BAD2BABA0369),
  396. SPH_C64(0x93652FBC2F2F4A5E), SPH_C64(0xE74EC027C0C08E9D),
  397. SPH_C64(0x81BEDE5FDEDE60A1), SPH_C64(0x6CE01C701C1CFC38),
  398. SPH_C64(0x2EBBFDD3FDFD46E7), SPH_C64(0x64524D294D4D1F9A),
  399. SPH_C64(0xE0E4927292927639), SPH_C64(0xBC8F75C97575FAEA),
  400. SPH_C64(0x1E3006180606360C), SPH_C64(0x98248A128A8AAE09),
  401. SPH_C64(0x40F9B2F2B2B24B79), SPH_C64(0x5963E6BFE6E685D1),
  402. SPH_C64(0x36700E380E0E7E1C), SPH_C64(0x63F81F7C1F1FE73E),
  403. SPH_C64(0xF7376295626255C4), SPH_C64(0xA3EED477D4D43AB5),
  404. SPH_C64(0x3229A89AA8A8814D), SPH_C64(0xF4C4966296965231),
  405. SPH_C64(0x3A9BF9C3F9F962EF), SPH_C64(0xF666C533C5C5A397),
  406. SPH_C64(0xB13525942525104A), SPH_C64(0x20F259795959ABB2),
  407. SPH_C64(0xAE54842A8484D015), SPH_C64(0xA7B772D57272C5E4),
  408. SPH_C64(0xDDD539E43939EC72), SPH_C64(0x615A4C2D4C4C1698),
  409. SPH_C64(0x3BCA5E655E5E94BC), SPH_C64(0x85E778FD78789FF0),
  410. SPH_C64(0xD8DD38E03838E570), SPH_C64(0x86148C0A8C8C9805),
  411. SPH_C64(0xB2C6D163D1D117BF), SPH_C64(0x0B41A5AEA5A5E457),
  412. SPH_C64(0x4D43E2AFE2E2A1D9), SPH_C64(0xF82F619961614EC2),
  413. SPH_C64(0x45F1B3F6B3B3427B), SPH_C64(0xA515218421213442),
  414. SPH_C64(0xD6949C4A9C9C0825), SPH_C64(0x66F01E781E1EEE3C),
  415. SPH_C64(0x5222431143436186), SPH_C64(0xFC76C73BC7C7B193),
  416. SPH_C64(0x2BB3FCD7FCFC4FE5), SPH_C64(0x1420041004042408),
  417. SPH_C64(0x08B251595151E3A2), SPH_C64(0xC7BC995E9999252F),
  418. SPH_C64(0xC44F6DA96D6D22DA), SPH_C64(0x39680D340D0D651A),
  419. SPH_C64(0x3583FACFFAFA79E9), SPH_C64(0x84B6DF5BDFDF69A3),
  420. SPH_C64(0x9BD77EE57E7EA9FC), SPH_C64(0xB43D249024241948),
  421. SPH_C64(0xD7C53BEC3B3BFE76), SPH_C64(0x3D31AB96ABAB9A4B),
  422. SPH_C64(0xD13ECE1FCECEF081), SPH_C64(0x5588114411119922),
  423. SPH_C64(0x890C8F068F8F8303), SPH_C64(0x6B4A4E254E4E049C),
  424. SPH_C64(0x51D1B7E6B7B76673), SPH_C64(0x600BEB8BEBEBE0CB),
  425. SPH_C64(0xCCFD3CF03C3CC178), SPH_C64(0xBF7C813E8181FD1F),
  426. SPH_C64(0xFED4946A94944035), SPH_C64(0x0CEBF7FBF7F71CF3),
  427. SPH_C64(0x67A1B9DEB9B9186F), SPH_C64(0x5F98134C13138B26),
  428. SPH_C64(0x9C7D2CB02C2C5158), SPH_C64(0xB8D6D36BD3D305BB),
  429. SPH_C64(0x5C6BE7BBE7E78CD3), SPH_C64(0xCB576EA56E6E39DC),
  430. SPH_C64(0xF36EC437C4C4AA95), SPH_C64(0x0F18030C03031B06),
  431. SPH_C64(0x138A56455656DCAC), SPH_C64(0x491A440D44445E88),
  432. SPH_C64(0x9EDF7FE17F7FA0FE), SPH_C64(0x3721A99EA9A9884F),
  433. SPH_C64(0x824D2AA82A2A6754), SPH_C64(0x6DB1BBD6BBBB0A6B),
  434. SPH_C64(0xE246C123C1C1879F), SPH_C64(0x02A253515353F1A6),
  435. SPH_C64(0x8BAEDC57DCDC72A5), SPH_C64(0x27580B2C0B0B5316),
  436. SPH_C64(0xD39C9D4E9D9D0127), SPH_C64(0xC1476CAD6C6C2BD8),
  437. SPH_C64(0xF59531C43131A462), SPH_C64(0xB98774CD7474F3E8),
  438. SPH_C64(0x09E3F6FFF6F615F1), SPH_C64(0x430A460546464C8C),
  439. SPH_C64(0x2609AC8AACACA545), SPH_C64(0x973C891E8989B50F),
  440. SPH_C64(0x44A014501414B428), SPH_C64(0x425BE1A3E1E1BADF),
  441. SPH_C64(0x4EB016581616A62C), SPH_C64(0xD2CD3AE83A3AF774),
  442. SPH_C64(0xD06F69B9696906D2), SPH_C64(0x2D48092409094112),
  443. SPH_C64(0xADA770DD7070D7E0), SPH_C64(0x54D9B6E2B6B66F71),
  444. SPH_C64(0xB7CED067D0D01EBD), SPH_C64(0x7E3BED93EDEDD6C7),
  445. SPH_C64(0xDB2ECC17CCCCE285), SPH_C64(0x572A421542426884),
  446. SPH_C64(0xC2B4985A98982C2D), SPH_C64(0x0E49A4AAA4A4ED55),
  447. SPH_C64(0x885D28A028287550), SPH_C64(0x31DA5C6D5C5C86B8),
  448. SPH_C64(0x3F93F8C7F8F86BED), SPH_C64(0xA44486228686C211)
  449. };
  450.  
  451. __constant static const sph_u64 plain_T3[256] = {
  452. SPH_C64(0xC018601818D83078), SPH_C64(0x05238C23232646AF),
  453. SPH_C64(0x7EC63FC6C6B891F9), SPH_C64(0x13E887E8E8FBCD6F),
  454. SPH_C64(0x4C87268787CB13A1), SPH_C64(0xA9B8DAB8B8116D62),
  455. SPH_C64(0x0801040101090205), SPH_C64(0x424F214F4F0D9E6E),
  456. SPH_C64(0xAD36D836369B6CEE), SPH_C64(0x59A6A2A6A6FF5104),
  457. SPH_C64(0xDED26FD2D20CB9BD), SPH_C64(0xFBF5F3F5F50EF706),
  458. SPH_C64(0xEF79F9797996F280), SPH_C64(0x5F6FA16F6F30DECE),
  459. SPH_C64(0xFC917E91916D3FEF), SPH_C64(0xAA52555252F8A407),
  460. SPH_C64(0x27609D606047C0FD), SPH_C64(0x89BCCABCBC356576),
  461. SPH_C64(0xAC9B569B9B372BCD), SPH_C64(0x048E028E8E8A018C),
  462. SPH_C64(0x71A3B6A3A3D25B15), SPH_C64(0x600C300C0C6C183C),
  463. SPH_C64(0xFF7BF17B7B84F68A), SPH_C64(0xB535D43535806AE1),
  464. SPH_C64(0xE81D741D1DF53A69), SPH_C64(0x53E0A7E0E0B3DD47),
  465. SPH_C64(0xF6D77BD7D721B3AC), SPH_C64(0x5EC22FC2C29C99ED),
  466. SPH_C64(0x6D2EB82E2E435C96), SPH_C64(0x624B314B4B29967A),
  467. SPH_C64(0xA3FEDFFEFE5DE121), SPH_C64(0x8257415757D5AE16),
  468. SPH_C64(0xA815541515BD2A41), SPH_C64(0x9F77C17777E8EEB6),
  469. SPH_C64(0xA537DC3737926EEB), SPH_C64(0x7BE5B3E5E59ED756),
  470. SPH_C64(0x8C9F469F9F1323D9), SPH_C64(0xD3F0E7F0F023FD17),
  471. SPH_C64(0x6A4A354A4A20947F), SPH_C64(0x9EDA4FDADA44A995),
  472. SPH_C64(0xFA587D5858A2B025), SPH_C64(0x06C903C9C9CF8FCA),
  473. SPH_C64(0x5529A429297C528D), SPH_C64(0x500A280A0A5A1422),
  474. SPH_C64(0xE1B1FEB1B1507F4F), SPH_C64(0x69A0BAA0A0C95D1A),
  475. SPH_C64(0x7F6BB16B6B14D6DA), SPH_C64(0x5C852E8585D917AB),
  476. SPH_C64(0x81BDCEBDBD3C6773), SPH_C64(0xD25D695D5D8FBA34),
  477. SPH_C64(0x8010401010902050), SPH_C64(0xF3F4F7F4F407F503),
  478. SPH_C64(0x16CB0BCBCBDD8BC0), SPH_C64(0xED3EF83E3ED37CC6),
  479. SPH_C64(0x28051405052D0A11), SPH_C64(0x1F6781676778CEE6),
  480. SPH_C64(0x73E4B7E4E497D553), SPH_C64(0x25279C2727024EBB),
  481. SPH_C64(0x3241194141738258), SPH_C64(0x2C8B168B8BA70B9D),
  482. SPH_C64(0x51A7A6A7A7F65301), SPH_C64(0xCF7DE97D7DB2FA94),
  483. SPH_C64(0xDC956E95954937FB), SPH_C64(0x8ED847D8D856AD9F),
  484. SPH_C64(0x8BFBCBFBFB70EB30), SPH_C64(0x23EE9FEEEECDC171),
  485. SPH_C64(0xC77CED7C7CBBF891), SPH_C64(0x176685666671CCE3),
  486. SPH_C64(0xA6DD53DDDD7BA78E), SPH_C64(0xB8175C1717AF2E4B),
  487. SPH_C64(0x0247014747458E46), SPH_C64(0x849E429E9E1A21DC),
  488. SPH_C64(0x1ECA0FCACAD489C5), SPH_C64(0x752DB42D2D585A99),
  489. SPH_C64(0x91BFC6BFBF2E6379), SPH_C64(0x38071C07073F0E1B),
  490. SPH_C64(0x01AD8EADADAC4723), SPH_C64(0xEA5A755A5AB0B42F),
  491. SPH_C64(0x6C83368383EF1BB5), SPH_C64(0x8533CC3333B666FF),
  492. SPH_C64(0x3F639163635CC6F2), SPH_C64(0x100208020212040A),
  493. SPH_C64(0x39AA92AAAA934938), SPH_C64(0xAF71D97171DEE2A8),
  494. SPH_C64(0x0EC807C8C8C68DCF), SPH_C64(0xC819641919D1327D),
  495. SPH_C64(0x72493949493B9270), SPH_C64(0x86D943D9D95FAF9A),
  496. SPH_C64(0xC3F2EFF2F231F91D), SPH_C64(0x4BE3ABE3E3A8DB48),
  497. SPH_C64(0xE25B715B5BB9B62A), SPH_C64(0x34881A8888BC0D92),
  498. SPH_C64(0xA49A529A9A3E29C8), SPH_C64(0x2D269826260B4CBE),
  499. SPH_C64(0x8D32C83232BF64FA), SPH_C64(0xE9B0FAB0B0597D4A),
  500. SPH_C64(0x1BE983E9E9F2CF6A), SPH_C64(0x780F3C0F0F771E33),
  501. SPH_C64(0xE6D573D5D533B7A6), SPH_C64(0x74803A8080F41DBA),
  502. SPH_C64(0x99BEC2BEBE27617C), SPH_C64(0x26CD13CDCDEB87DE),
  503. SPH_C64(0xBD34D034348968E4), SPH_C64(0x7A483D4848329075),
  504. SPH_C64(0xABFFDBFFFF54E324), SPH_C64(0xF77AF57A7A8DF48F),
  505. SPH_C64(0xF4907A9090643DEA), SPH_C64(0xC25F615F5F9DBE3E),
  506. SPH_C64(0x1D208020203D40A0), SPH_C64(0x6768BD68680FD0D5),
  507. SPH_C64(0xD01A681A1ACA3472), SPH_C64(0x19AE82AEAEB7412C),
  508. SPH_C64(0xC9B4EAB4B47D755E), SPH_C64(0x9A544D5454CEA819),
  509. SPH_C64(0xEC937693937F3BE5), SPH_C64(0x0D228822222F44AA),
  510. SPH_C64(0x07648D646463C8E9), SPH_C64(0xDBF1E3F1F12AFF12),
  511. SPH_C64(0xBF73D17373CCE6A2), SPH_C64(0x901248121282245A),
  512. SPH_C64(0x3A401D40407A805D), SPH_C64(0x4008200808481028),
  513. SPH_C64(0x56C32BC3C3959BE8), SPH_C64(0x33EC97ECECDFC57B),
  514. SPH_C64(0x96DB4BDBDB4DAB90), SPH_C64(0x61A1BEA1A1C05F1F),
  515. SPH_C64(0x1C8D0E8D8D910783), SPH_C64(0xF53DF43D3DC87AC9),
  516. SPH_C64(0xCC976697975B33F1), SPH_C64(0x0000000000000000),
  517. SPH_C64(0x36CF1BCFCFF983D4), SPH_C64(0x452BAC2B2B6E5687),
  518. SPH_C64(0x9776C57676E1ECB3), SPH_C64(0x6482328282E619B0),
  519. SPH_C64(0xFED67FD6D628B1A9), SPH_C64(0xD81B6C1B1BC33677),
  520. SPH_C64(0xC1B5EEB5B574775B), SPH_C64(0x11AF86AFAFBE4329),
  521. SPH_C64(0x776AB56A6A1DD4DF), SPH_C64(0xBA505D5050EAA00D),
  522. SPH_C64(0x1245094545578A4C), SPH_C64(0xCBF3EBF3F338FB18),
  523. SPH_C64(0x9D30C03030AD60F0), SPH_C64(0x2BEF9BEFEFC4C374),
  524. SPH_C64(0xE53FFC3F3FDA7EC3), SPH_C64(0x9255495555C7AA1C),
  525. SPH_C64(0x79A2B2A2A2DB5910), SPH_C64(0x03EA8FEAEAE9C965),
  526. SPH_C64(0x0F658965656ACAEC), SPH_C64(0xB9BAD2BABA036968),
  527. SPH_C64(0x652FBC2F2F4A5E93), SPH_C64(0x4EC027C0C08E9DE7),
  528. SPH_C64(0xBEDE5FDEDE60A181), SPH_C64(0xE01C701C1CFC386C),
  529. SPH_C64(0xBBFDD3FDFD46E72E), SPH_C64(0x524D294D4D1F9A64),
  530. SPH_C64(0xE4927292927639E0), SPH_C64(0x8F75C97575FAEABC),
  531. SPH_C64(0x3006180606360C1E), SPH_C64(0x248A128A8AAE0998),
  532. SPH_C64(0xF9B2F2B2B24B7940), SPH_C64(0x63E6BFE6E685D159),
  533. SPH_C64(0x700E380E0E7E1C36), SPH_C64(0xF81F7C1F1FE73E63),
  534. SPH_C64(0x376295626255C4F7), SPH_C64(0xEED477D4D43AB5A3),
  535. SPH_C64(0x29A89AA8A8814D32), SPH_C64(0xC4966296965231F4),
  536. SPH_C64(0x9BF9C3F9F962EF3A), SPH_C64(0x66C533C5C5A397F6),
  537. SPH_C64(0x3525942525104AB1), SPH_C64(0xF259795959ABB220),
  538. SPH_C64(0x54842A8484D015AE), SPH_C64(0xB772D57272C5E4A7),
  539. SPH_C64(0xD539E43939EC72DD), SPH_C64(0x5A4C2D4C4C169861),
  540. SPH_C64(0xCA5E655E5E94BC3B), SPH_C64(0xE778FD78789FF085),
  541. SPH_C64(0xDD38E03838E570D8), SPH_C64(0x148C0A8C8C980586),
  542. SPH_C64(0xC6D163D1D117BFB2), SPH_C64(0x41A5AEA5A5E4570B),
  543. SPH_C64(0x43E2AFE2E2A1D94D), SPH_C64(0x2F619961614EC2F8),
  544. SPH_C64(0xF1B3F6B3B3427B45), SPH_C64(0x15218421213442A5),
  545. SPH_C64(0x949C4A9C9C0825D6), SPH_C64(0xF01E781E1EEE3C66),
  546. SPH_C64(0x2243114343618652), SPH_C64(0x76C73BC7C7B193FC),
  547. SPH_C64(0xB3FCD7FCFC4FE52B), SPH_C64(0x2004100404240814),
  548. SPH_C64(0xB251595151E3A208), SPH_C64(0xBC995E9999252FC7),
  549. SPH_C64(0x4F6DA96D6D22DAC4), SPH_C64(0x680D340D0D651A39),
  550. SPH_C64(0x83FACFFAFA79E935), SPH_C64(0xB6DF5BDFDF69A384),
  551. SPH_C64(0xD77EE57E7EA9FC9B), SPH_C64(0x3D249024241948B4),
  552. SPH_C64(0xC53BEC3B3BFE76D7), SPH_C64(0x31AB96ABAB9A4B3D),
  553. SPH_C64(0x3ECE1FCECEF081D1), SPH_C64(0x8811441111992255),
  554. SPH_C64(0x0C8F068F8F830389), SPH_C64(0x4A4E254E4E049C6B),
  555. SPH_C64(0xD1B7E6B7B7667351), SPH_C64(0x0BEB8BEBEBE0CB60),
  556. SPH_C64(0xFD3CF03C3CC178CC), SPH_C64(0x7C813E8181FD1FBF),
  557. SPH_C64(0xD4946A94944035FE), SPH_C64(0xEBF7FBF7F71CF30C),
  558. SPH_C64(0xA1B9DEB9B9186F67), SPH_C64(0x98134C13138B265F),
  559. SPH_C64(0x7D2CB02C2C51589C), SPH_C64(0xD6D36BD3D305BBB8),
  560. SPH_C64(0x6BE7BBE7E78CD35C), SPH_C64(0x576EA56E6E39DCCB),
  561. SPH_C64(0x6EC437C4C4AA95F3), SPH_C64(0x18030C03031B060F),
  562. SPH_C64(0x8A56455656DCAC13), SPH_C64(0x1A440D44445E8849),
  563. SPH_C64(0xDF7FE17F7FA0FE9E), SPH_C64(0x21A99EA9A9884F37),
  564. SPH_C64(0x4D2AA82A2A675482), SPH_C64(0xB1BBD6BBBB0A6B6D),
  565. SPH_C64(0x46C123C1C1879FE2), SPH_C64(0xA253515353F1A602),
  566. SPH_C64(0xAEDC57DCDC72A58B), SPH_C64(0x580B2C0B0B531627),
  567. SPH_C64(0x9C9D4E9D9D0127D3), SPH_C64(0x476CAD6C6C2BD8C1),
  568. SPH_C64(0x9531C43131A462F5), SPH_C64(0x8774CD7474F3E8B9),
  569. SPH_C64(0xE3F6FFF6F615F109), SPH_C64(0x0A460546464C8C43),
  570. SPH_C64(0x09AC8AACACA54526), SPH_C64(0x3C891E8989B50F97),
  571. SPH_C64(0xA014501414B42844), SPH_C64(0x5BE1A3E1E1BADF42),
  572. SPH_C64(0xB016581616A62C4E), SPH_C64(0xCD3AE83A3AF774D2),
  573. SPH_C64(0x6F69B9696906D2D0), SPH_C64(0x480924090941122D),
  574. SPH_C64(0xA770DD7070D7E0AD), SPH_C64(0xD9B6E2B6B66F7154),
  575. SPH_C64(0xCED067D0D01EBDB7), SPH_C64(0x3BED93EDEDD6C77E),
  576. SPH_C64(0x2ECC17CCCCE285DB), SPH_C64(0x2A42154242688457),
  577. SPH_C64(0xB4985A98982C2DC2), SPH_C64(0x49A4AAA4A4ED550E),
  578. SPH_C64(0x5D28A02828755088), SPH_C64(0xDA5C6D5C5C86B831),
  579. SPH_C64(0x93F8C7F8F86BED3F), SPH_C64(0x4486228686C211A4)
  580. };
  581.  
  582. __constant static const sph_u64 plain_T4[256] = {
  583. SPH_C64(0x18601818D83078C0), SPH_C64(0x238C23232646AF05),
  584. SPH_C64(0xC63FC6C6B891F97E), SPH_C64(0xE887E8E8FBCD6F13),
  585. SPH_C64(0x87268787CB13A14C), SPH_C64(0xB8DAB8B8116D62A9),
  586. SPH_C64(0x0104010109020508), SPH_C64(0x4F214F4F0D9E6E42),
  587. SPH_C64(0x36D836369B6CEEAD), SPH_C64(0xA6A2A6A6FF510459),
  588. SPH_C64(0xD26FD2D20CB9BDDE), SPH_C64(0xF5F3F5F50EF706FB),
  589. SPH_C64(0x79F9797996F280EF), SPH_C64(0x6FA16F6F30DECE5F),
  590. SPH_C64(0x917E91916D3FEFFC), SPH_C64(0x52555252F8A407AA),
  591. SPH_C64(0x609D606047C0FD27), SPH_C64(0xBCCABCBC35657689),
  592. SPH_C64(0x9B569B9B372BCDAC), SPH_C64(0x8E028E8E8A018C04),
  593. SPH_C64(0xA3B6A3A3D25B1571), SPH_C64(0x0C300C0C6C183C60),
  594. SPH_C64(0x7BF17B7B84F68AFF), SPH_C64(0x35D43535806AE1B5),
  595. SPH_C64(0x1D741D1DF53A69E8), SPH_C64(0xE0A7E0E0B3DD4753),
  596. SPH_C64(0xD77BD7D721B3ACF6), SPH_C64(0xC22FC2C29C99ED5E),
  597. SPH_C64(0x2EB82E2E435C966D), SPH_C64(0x4B314B4B29967A62),
  598. SPH_C64(0xFEDFFEFE5DE121A3), SPH_C64(0x57415757D5AE1682),
  599. SPH_C64(0x15541515BD2A41A8), SPH_C64(0x77C17777E8EEB69F),
  600. SPH_C64(0x37DC3737926EEBA5), SPH_C64(0xE5B3E5E59ED7567B),
  601. SPH_C64(0x9F469F9F1323D98C), SPH_C64(0xF0E7F0F023FD17D3),
  602. SPH_C64(0x4A354A4A20947F6A), SPH_C64(0xDA4FDADA44A9959E),
  603. SPH_C64(0x587D5858A2B025FA), SPH_C64(0xC903C9C9CF8FCA06),
  604. SPH_C64(0x29A429297C528D55), SPH_C64(0x0A280A0A5A142250),
  605. SPH_C64(0xB1FEB1B1507F4FE1), SPH_C64(0xA0BAA0A0C95D1A69),
  606. SPH_C64(0x6BB16B6B14D6DA7F), SPH_C64(0x852E8585D917AB5C),
  607. SPH_C64(0xBDCEBDBD3C677381), SPH_C64(0x5D695D5D8FBA34D2),
  608. SPH_C64(0x1040101090205080), SPH_C64(0xF4F7F4F407F503F3),
  609. SPH_C64(0xCB0BCBCBDD8BC016), SPH_C64(0x3EF83E3ED37CC6ED),
  610. SPH_C64(0x051405052D0A1128), SPH_C64(0x6781676778CEE61F),
  611. SPH_C64(0xE4B7E4E497D55373), SPH_C64(0x279C2727024EBB25),
  612. SPH_C64(0x4119414173825832), SPH_C64(0x8B168B8BA70B9D2C),
  613. SPH_C64(0xA7A6A7A7F6530151), SPH_C64(0x7DE97D7DB2FA94CF),
  614. SPH_C64(0x956E95954937FBDC), SPH_C64(0xD847D8D856AD9F8E),
  615. SPH_C64(0xFBCBFBFB70EB308B), SPH_C64(0xEE9FEEEECDC17123),
  616. SPH_C64(0x7CED7C7CBBF891C7), SPH_C64(0x6685666671CCE317),
  617. SPH_C64(0xDD53DDDD7BA78EA6), SPH_C64(0x175C1717AF2E4BB8),
  618. SPH_C64(0x47014747458E4602), SPH_C64(0x9E429E9E1A21DC84),
  619. SPH_C64(0xCA0FCACAD489C51E), SPH_C64(0x2DB42D2D585A9975),
  620. SPH_C64(0xBFC6BFBF2E637991), SPH_C64(0x071C07073F0E1B38),
  621. SPH_C64(0xAD8EADADAC472301), SPH_C64(0x5A755A5AB0B42FEA),
  622. SPH_C64(0x83368383EF1BB56C), SPH_C64(0x33CC3333B666FF85),
  623. SPH_C64(0x639163635CC6F23F), SPH_C64(0x0208020212040A10),
  624. SPH_C64(0xAA92AAAA93493839), SPH_C64(0x71D97171DEE2A8AF),
  625. SPH_C64(0xC807C8C8C68DCF0E), SPH_C64(0x19641919D1327DC8),
  626. SPH_C64(0x493949493B927072), SPH_C64(0xD943D9D95FAF9A86),
  627. SPH_C64(0xF2EFF2F231F91DC3), SPH_C64(0xE3ABE3E3A8DB484B),
  628. SPH_C64(0x5B715B5BB9B62AE2), SPH_C64(0x881A8888BC0D9234),
  629. SPH_C64(0x9A529A9A3E29C8A4), SPH_C64(0x269826260B4CBE2D),
  630. SPH_C64(0x32C83232BF64FA8D), SPH_C64(0xB0FAB0B0597D4AE9),
  631. SPH_C64(0xE983E9E9F2CF6A1B), SPH_C64(0x0F3C0F0F771E3378),
  632. SPH_C64(0xD573D5D533B7A6E6), SPH_C64(0x803A8080F41DBA74),
  633. SPH_C64(0xBEC2BEBE27617C99), SPH_C64(0xCD13CDCDEB87DE26),
  634. SPH_C64(0x34D034348968E4BD), SPH_C64(0x483D48483290757A),
  635. SPH_C64(0xFFDBFFFF54E324AB), SPH_C64(0x7AF57A7A8DF48FF7),
  636. SPH_C64(0x907A9090643DEAF4), SPH_C64(0x5F615F5F9DBE3EC2),
  637. SPH_C64(0x208020203D40A01D), SPH_C64(0x68BD68680FD0D567),
  638. SPH_C64(0x1A681A1ACA3472D0), SPH_C64(0xAE82AEAEB7412C19),
  639. SPH_C64(0xB4EAB4B47D755EC9), SPH_C64(0x544D5454CEA8199A),
  640. SPH_C64(0x937693937F3BE5EC), SPH_C64(0x228822222F44AA0D),
  641. SPH_C64(0x648D646463C8E907), SPH_C64(0xF1E3F1F12AFF12DB),
  642. SPH_C64(0x73D17373CCE6A2BF), SPH_C64(0x1248121282245A90),
  643. SPH_C64(0x401D40407A805D3A), SPH_C64(0x0820080848102840),
  644. SPH_C64(0xC32BC3C3959BE856), SPH_C64(0xEC97ECECDFC57B33),
  645. SPH_C64(0xDB4BDBDB4DAB9096), SPH_C64(0xA1BEA1A1C05F1F61),
  646. SPH_C64(0x8D0E8D8D9107831C), SPH_C64(0x3DF43D3DC87AC9F5),
  647. SPH_C64(0x976697975B33F1CC), SPH_C64(0x0000000000000000),
  648. SPH_C64(0xCF1BCFCFF983D436), SPH_C64(0x2BAC2B2B6E568745),
  649. SPH_C64(0x76C57676E1ECB397), SPH_C64(0x82328282E619B064),
  650. SPH_C64(0xD67FD6D628B1A9FE), SPH_C64(0x1B6C1B1BC33677D8),
  651. SPH_C64(0xB5EEB5B574775BC1), SPH_C64(0xAF86AFAFBE432911),
  652. SPH_C64(0x6AB56A6A1DD4DF77), SPH_C64(0x505D5050EAA00DBA),
  653. SPH_C64(0x45094545578A4C12), SPH_C64(0xF3EBF3F338FB18CB),
  654. SPH_C64(0x30C03030AD60F09D), SPH_C64(0xEF9BEFEFC4C3742B),
  655. SPH_C64(0x3FFC3F3FDA7EC3E5), SPH_C64(0x55495555C7AA1C92),
  656. SPH_C64(0xA2B2A2A2DB591079), SPH_C64(0xEA8FEAEAE9C96503),
  657. SPH_C64(0x658965656ACAEC0F), SPH_C64(0xBAD2BABA036968B9),
  658. SPH_C64(0x2FBC2F2F4A5E9365), SPH_C64(0xC027C0C08E9DE74E),
  659. SPH_C64(0xDE5FDEDE60A181BE), SPH_C64(0x1C701C1CFC386CE0),
  660. SPH_C64(0xFDD3FDFD46E72EBB), SPH_C64(0x4D294D4D1F9A6452),
  661. SPH_C64(0x927292927639E0E4), SPH_C64(0x75C97575FAEABC8F),
  662. SPH_C64(0x06180606360C1E30), SPH_C64(0x8A128A8AAE099824),
  663. SPH_C64(0xB2F2B2B24B7940F9), SPH_C64(0xE6BFE6E685D15963),
  664. SPH_C64(0x0E380E0E7E1C3670), SPH_C64(0x1F7C1F1FE73E63F8),
  665. SPH_C64(0x6295626255C4F737), SPH_C64(0xD477D4D43AB5A3EE),
  666. SPH_C64(0xA89AA8A8814D3229), SPH_C64(0x966296965231F4C4),
  667. SPH_C64(0xF9C3F9F962EF3A9B), SPH_C64(0xC533C5C5A397F666),
  668. SPH_C64(0x25942525104AB135), SPH_C64(0x59795959ABB220F2),
  669. SPH_C64(0x842A8484D015AE54), SPH_C64(0x72D57272C5E4A7B7),
  670. SPH_C64(0x39E43939EC72DDD5), SPH_C64(0x4C2D4C4C1698615A),
  671. SPH_C64(0x5E655E5E94BC3BCA), SPH_C64(0x78FD78789FF085E7),
  672. SPH_C64(0x38E03838E570D8DD), SPH_C64(0x8C0A8C8C98058614),
  673. SPH_C64(0xD163D1D117BFB2C6), SPH_C64(0xA5AEA5A5E4570B41),
  674. SPH_C64(0xE2AFE2E2A1D94D43), SPH_C64(0x619961614EC2F82F),
  675. SPH_C64(0xB3F6B3B3427B45F1), SPH_C64(0x218421213442A515),
  676. SPH_C64(0x9C4A9C9C0825D694), SPH_C64(0x1E781E1EEE3C66F0),
  677. SPH_C64(0x4311434361865222), SPH_C64(0xC73BC7C7B193FC76),
  678. SPH_C64(0xFCD7FCFC4FE52BB3), SPH_C64(0x0410040424081420),
  679. SPH_C64(0x51595151E3A208B2), SPH_C64(0x995E9999252FC7BC),
  680. SPH_C64(0x6DA96D6D22DAC44F), SPH_C64(0x0D340D0D651A3968),
  681. SPH_C64(0xFACFFAFA79E93583), SPH_C64(0xDF5BDFDF69A384B6),
  682. SPH_C64(0x7EE57E7EA9FC9BD7), SPH_C64(0x249024241948B43D),
  683. SPH_C64(0x3BEC3B3BFE76D7C5), SPH_C64(0xAB96ABAB9A4B3D31),
  684. SPH_C64(0xCE1FCECEF081D13E), SPH_C64(0x1144111199225588),
  685. SPH_C64(0x8F068F8F8303890C), SPH_C64(0x4E254E4E049C6B4A),
  686. SPH_C64(0xB7E6B7B7667351D1), SPH_C64(0xEB8BEBEBE0CB600B),
  687. SPH_C64(0x3CF03C3CC178CCFD), SPH_C64(0x813E8181FD1FBF7C),
  688. SPH_C64(0x946A94944035FED4), SPH_C64(0xF7FBF7F71CF30CEB),
  689. SPH_C64(0xB9DEB9B9186F67A1), SPH_C64(0x134C13138B265F98),
  690. SPH_C64(0x2CB02C2C51589C7D), SPH_C64(0xD36BD3D305BBB8D6),
  691. SPH_C64(0xE7BBE7E78CD35C6B), SPH_C64(0x6EA56E6E39DCCB57),
  692. SPH_C64(0xC437C4C4AA95F36E), SPH_C64(0x030C03031B060F18),
  693. SPH_C64(0x56455656DCAC138A), SPH_C64(0x440D44445E88491A),
  694. SPH_C64(0x7FE17F7FA0FE9EDF), SPH_C64(0xA99EA9A9884F3721),
  695. SPH_C64(0x2AA82A2A6754824D), SPH_C64(0xBBD6BBBB0A6B6DB1),
  696. SPH_C64(0xC123C1C1879FE246), SPH_C64(0x53515353F1A602A2),
  697. SPH_C64(0xDC57DCDC72A58BAE), SPH_C64(0x0B2C0B0B53162758),
  698. SPH_C64(0x9D4E9D9D0127D39C), SPH_C64(0x6CAD6C6C2BD8C147),
  699. SPH_C64(0x31C43131A462F595), SPH_C64(0x74CD7474F3E8B987),
  700. SPH_C64(0xF6FFF6F615F109E3), SPH_C64(0x460546464C8C430A),
  701. SPH_C64(0xAC8AACACA5452609), SPH_C64(0x891E8989B50F973C),
  702. SPH_C64(0x14501414B42844A0), SPH_C64(0xE1A3E1E1BADF425B),
  703. SPH_C64(0x16581616A62C4EB0), SPH_C64(0x3AE83A3AF774D2CD),
  704. SPH_C64(0x69B9696906D2D06F), SPH_C64(0x0924090941122D48),
  705. SPH_C64(0x70DD7070D7E0ADA7), SPH_C64(0xB6E2B6B66F7154D9),
  706. SPH_C64(0xD067D0D01EBDB7CE), SPH_C64(0xED93EDEDD6C77E3B),
  707. SPH_C64(0xCC17CCCCE285DB2E), SPH_C64(0x421542426884572A),
  708. SPH_C64(0x985A98982C2DC2B4), SPH_C64(0xA4AAA4A4ED550E49),
  709. SPH_C64(0x28A028287550885D), SPH_C64(0x5C6D5C5C86B831DA),
  710. SPH_C64(0xF8C7F8F86BED3F93), SPH_C64(0x86228686C211A444)
  711. };
  712.  
  713. __constant static const sph_u64 plain_T5[256] = {
  714. SPH_C64(0x601818D83078C018), SPH_C64(0x8C23232646AF0523),
  715. SPH_C64(0x3FC6C6B891F97EC6), SPH_C64(0x87E8E8FBCD6F13E8),
  716. SPH_C64(0x268787CB13A14C87), SPH_C64(0xDAB8B8116D62A9B8),
  717. SPH_C64(0x0401010902050801), SPH_C64(0x214F4F0D9E6E424F),
  718. SPH_C64(0xD836369B6CEEAD36), SPH_C64(0xA2A6A6FF510459A6),
  719. SPH_C64(0x6FD2D20CB9BDDED2), SPH_C64(0xF3F5F50EF706FBF5),
  720. SPH_C64(0xF9797996F280EF79), SPH_C64(0xA16F6F30DECE5F6F),
  721. SPH_C64(0x7E91916D3FEFFC91), SPH_C64(0x555252F8A407AA52),
  722. SPH_C64(0x9D606047C0FD2760), SPH_C64(0xCABCBC35657689BC),
  723. SPH_C64(0x569B9B372BCDAC9B), SPH_C64(0x028E8E8A018C048E),
  724. SPH_C64(0xB6A3A3D25B1571A3), SPH_C64(0x300C0C6C183C600C),
  725. SPH_C64(0xF17B7B84F68AFF7B), SPH_C64(0xD43535806AE1B535),
  726. SPH_C64(0x741D1DF53A69E81D), SPH_C64(0xA7E0E0B3DD4753E0),
  727. SPH_C64(0x7BD7D721B3ACF6D7), SPH_C64(0x2FC2C29C99ED5EC2),
  728. SPH_C64(0xB82E2E435C966D2E), SPH_C64(0x314B4B29967A624B),
  729. SPH_C64(0xDFFEFE5DE121A3FE), SPH_C64(0x415757D5AE168257),
  730. SPH_C64(0x541515BD2A41A815), SPH_C64(0xC17777E8EEB69F77),
  731. SPH_C64(0xDC3737926EEBA537), SPH_C64(0xB3E5E59ED7567BE5),
  732. SPH_C64(0x469F9F1323D98C9F), SPH_C64(0xE7F0F023FD17D3F0),
  733. SPH_C64(0x354A4A20947F6A4A), SPH_C64(0x4FDADA44A9959EDA),
  734. SPH_C64(0x7D5858A2B025FA58), SPH_C64(0x03C9C9CF8FCA06C9),
  735. SPH_C64(0xA429297C528D5529), SPH_C64(0x280A0A5A1422500A),
  736. SPH_C64(0xFEB1B1507F4FE1B1), SPH_C64(0xBAA0A0C95D1A69A0),
  737. SPH_C64(0xB16B6B14D6DA7F6B), SPH_C64(0x2E8585D917AB5C85),
  738. SPH_C64(0xCEBDBD3C677381BD), SPH_C64(0x695D5D8FBA34D25D),
  739. SPH_C64(0x4010109020508010), SPH_C64(0xF7F4F407F503F3F4),
  740. SPH_C64(0x0BCBCBDD8BC016CB), SPH_C64(0xF83E3ED37CC6ED3E),
  741. SPH_C64(0x1405052D0A112805), SPH_C64(0x81676778CEE61F67),
  742. SPH_C64(0xB7E4E497D55373E4), SPH_C64(0x9C2727024EBB2527),
  743. SPH_C64(0x1941417382583241), SPH_C64(0x168B8BA70B9D2C8B),
  744. SPH_C64(0xA6A7A7F6530151A7), SPH_C64(0xE97D7DB2FA94CF7D),
  745. SPH_C64(0x6E95954937FBDC95), SPH_C64(0x47D8D856AD9F8ED8),
  746. SPH_C64(0xCBFBFB70EB308BFB), SPH_C64(0x9FEEEECDC17123EE),
  747. SPH_C64(0xED7C7CBBF891C77C), SPH_C64(0x85666671CCE31766),
  748. SPH_C64(0x53DDDD7BA78EA6DD), SPH_C64(0x5C1717AF2E4BB817),
  749. SPH_C64(0x014747458E460247), SPH_C64(0x429E9E1A21DC849E),
  750. SPH_C64(0x0FCACAD489C51ECA), SPH_C64(0xB42D2D585A99752D),
  751. SPH_C64(0xC6BFBF2E637991BF), SPH_C64(0x1C07073F0E1B3807),
  752. SPH_C64(0x8EADADAC472301AD), SPH_C64(0x755A5AB0B42FEA5A),
  753. SPH_C64(0x368383EF1BB56C83), SPH_C64(0xCC3333B666FF8533),
  754. SPH_C64(0x9163635CC6F23F63), SPH_C64(0x08020212040A1002),
  755. SPH_C64(0x92AAAA93493839AA), SPH_C64(0xD97171DEE2A8AF71),
  756. SPH_C64(0x07C8C8C68DCF0EC8), SPH_C64(0x641919D1327DC819),
  757. SPH_C64(0x3949493B92707249), SPH_C64(0x43D9D95FAF9A86D9),
  758. SPH_C64(0xEFF2F231F91DC3F2), SPH_C64(0xABE3E3A8DB484BE3),
  759. SPH_C64(0x715B5BB9B62AE25B), SPH_C64(0x1A8888BC0D923488),
  760. SPH_C64(0x529A9A3E29C8A49A), SPH_C64(0x9826260B4CBE2D26),
  761. SPH_C64(0xC83232BF64FA8D32), SPH_C64(0xFAB0B0597D4AE9B0),
  762. SPH_C64(0x83E9E9F2CF6A1BE9), SPH_C64(0x3C0F0F771E33780F),
  763. SPH_C64(0x73D5D533B7A6E6D5), SPH_C64(0x3A8080F41DBA7480),
  764. SPH_C64(0xC2BEBE27617C99BE), SPH_C64(0x13CDCDEB87DE26CD),
  765. SPH_C64(0xD034348968E4BD34), SPH_C64(0x3D48483290757A48),
  766. SPH_C64(0xDBFFFF54E324ABFF), SPH_C64(0xF57A7A8DF48FF77A),
  767. SPH_C64(0x7A9090643DEAF490), SPH_C64(0x615F5F9DBE3EC25F),
  768. SPH_C64(0x8020203D40A01D20), SPH_C64(0xBD68680FD0D56768),
  769. SPH_C64(0x681A1ACA3472D01A), SPH_C64(0x82AEAEB7412C19AE),
  770. SPH_C64(0xEAB4B47D755EC9B4), SPH_C64(0x4D5454CEA8199A54),
  771. SPH_C64(0x7693937F3BE5EC93), SPH_C64(0x8822222F44AA0D22),
  772. SPH_C64(0x8D646463C8E90764), SPH_C64(0xE3F1F12AFF12DBF1),
  773. SPH_C64(0xD17373CCE6A2BF73), SPH_C64(0x48121282245A9012),
  774. SPH_C64(0x1D40407A805D3A40), SPH_C64(0x2008084810284008),
  775. SPH_C64(0x2BC3C3959BE856C3), SPH_C64(0x97ECECDFC57B33EC),
  776. SPH_C64(0x4BDBDB4DAB9096DB), SPH_C64(0xBEA1A1C05F1F61A1),
  777. SPH_C64(0x0E8D8D9107831C8D), SPH_C64(0xF43D3DC87AC9F53D),
  778. SPH_C64(0x6697975B33F1CC97), SPH_C64(0x0000000000000000),
  779. SPH_C64(0x1BCFCFF983D436CF), SPH_C64(0xAC2B2B6E5687452B),
  780. SPH_C64(0xC57676E1ECB39776), SPH_C64(0x328282E619B06482),
  781. SPH_C64(0x7FD6D628B1A9FED6), SPH_C64(0x6C1B1BC33677D81B),
  782. SPH_C64(0xEEB5B574775BC1B5), SPH_C64(0x86AFAFBE432911AF),
  783. SPH_C64(0xB56A6A1DD4DF776A), SPH_C64(0x5D5050EAA00DBA50),
  784. SPH_C64(0x094545578A4C1245), SPH_C64(0xEBF3F338FB18CBF3),
  785. SPH_C64(0xC03030AD60F09D30), SPH_C64(0x9BEFEFC4C3742BEF),
  786. SPH_C64(0xFC3F3FDA7EC3E53F), SPH_C64(0x495555C7AA1C9255),
  787. SPH_C64(0xB2A2A2DB591079A2), SPH_C64(0x8FEAEAE9C96503EA),
  788. SPH_C64(0x8965656ACAEC0F65), SPH_C64(0xD2BABA036968B9BA),
  789. SPH_C64(0xBC2F2F4A5E93652F), SPH_C64(0x27C0C08E9DE74EC0),
  790. SPH_C64(0x5FDEDE60A181BEDE), SPH_C64(0x701C1CFC386CE01C),
  791. SPH_C64(0xD3FDFD46E72EBBFD), SPH_C64(0x294D4D1F9A64524D),
  792. SPH_C64(0x7292927639E0E492), SPH_C64(0xC97575FAEABC8F75),
  793. SPH_C64(0x180606360C1E3006), SPH_C64(0x128A8AAE0998248A),
  794. SPH_C64(0xF2B2B24B7940F9B2), SPH_C64(0xBFE6E685D15963E6),
  795. SPH_C64(0x380E0E7E1C36700E), SPH_C64(0x7C1F1FE73E63F81F),
  796. SPH_C64(0x95626255C4F73762), SPH_C64(0x77D4D43AB5A3EED4),
  797. SPH_C64(0x9AA8A8814D3229A8), SPH_C64(0x6296965231F4C496),
  798. SPH_C64(0xC3F9F962EF3A9BF9), SPH_C64(0x33C5C5A397F666C5),
  799. SPH_C64(0x942525104AB13525), SPH_C64(0x795959ABB220F259),
  800. SPH_C64(0x2A8484D015AE5484), SPH_C64(0xD57272C5E4A7B772),
  801. SPH_C64(0xE43939EC72DDD539), SPH_C64(0x2D4C4C1698615A4C),
  802. SPH_C64(0x655E5E94BC3BCA5E), SPH_C64(0xFD78789FF085E778),
  803. SPH_C64(0xE03838E570D8DD38), SPH_C64(0x0A8C8C980586148C),
  804. SPH_C64(0x63D1D117BFB2C6D1), SPH_C64(0xAEA5A5E4570B41A5),
  805. SPH_C64(0xAFE2E2A1D94D43E2), SPH_C64(0x9961614EC2F82F61),
  806. SPH_C64(0xF6B3B3427B45F1B3), SPH_C64(0x8421213442A51521),
  807. SPH_C64(0x4A9C9C0825D6949C), SPH_C64(0x781E1EEE3C66F01E),
  808. SPH_C64(0x1143436186522243), SPH_C64(0x3BC7C7B193FC76C7),
  809. SPH_C64(0xD7FCFC4FE52BB3FC), SPH_C64(0x1004042408142004),
  810. SPH_C64(0x595151E3A208B251), SPH_C64(0x5E9999252FC7BC99),
  811. SPH_C64(0xA96D6D22DAC44F6D), SPH_C64(0x340D0D651A39680D),
  812. SPH_C64(0xCFFAFA79E93583FA), SPH_C64(0x5BDFDF69A384B6DF),
  813. SPH_C64(0xE57E7EA9FC9BD77E), SPH_C64(0x9024241948B43D24),
  814. SPH_C64(0xEC3B3BFE76D7C53B), SPH_C64(0x96ABAB9A4B3D31AB),
  815. SPH_C64(0x1FCECEF081D13ECE), SPH_C64(0x4411119922558811),
  816. SPH_C64(0x068F8F8303890C8F), SPH_C64(0x254E4E049C6B4A4E),
  817. SPH_C64(0xE6B7B7667351D1B7), SPH_C64(0x8BEBEBE0CB600BEB),
  818. SPH_C64(0xF03C3CC178CCFD3C), SPH_C64(0x3E8181FD1FBF7C81),
  819. SPH_C64(0x6A94944035FED494), SPH_C64(0xFBF7F71CF30CEBF7),
  820. SPH_C64(0xDEB9B9186F67A1B9), SPH_C64(0x4C13138B265F9813),
  821. SPH_C64(0xB02C2C51589C7D2C), SPH_C64(0x6BD3D305BBB8D6D3),
  822. SPH_C64(0xBBE7E78CD35C6BE7), SPH_C64(0xA56E6E39DCCB576E),
  823. SPH_C64(0x37C4C4AA95F36EC4), SPH_C64(0x0C03031B060F1803),
  824. SPH_C64(0x455656DCAC138A56), SPH_C64(0x0D44445E88491A44),
  825. SPH_C64(0xE17F7FA0FE9EDF7F), SPH_C64(0x9EA9A9884F3721A9),
  826. SPH_C64(0xA82A2A6754824D2A), SPH_C64(0xD6BBBB0A6B6DB1BB),
  827. SPH_C64(0x23C1C1879FE246C1), SPH_C64(0x515353F1A602A253),
  828. SPH_C64(0x57DCDC72A58BAEDC), SPH_C64(0x2C0B0B531627580B),
  829. SPH_C64(0x4E9D9D0127D39C9D), SPH_C64(0xAD6C6C2BD8C1476C),
  830. SPH_C64(0xC43131A462F59531), SPH_C64(0xCD7474F3E8B98774),
  831. SPH_C64(0xFFF6F615F109E3F6), SPH_C64(0x0546464C8C430A46),
  832. SPH_C64(0x8AACACA5452609AC), SPH_C64(0x1E8989B50F973C89),
  833. SPH_C64(0x501414B42844A014), SPH_C64(0xA3E1E1BADF425BE1),
  834. SPH_C64(0x581616A62C4EB016), SPH_C64(0xE83A3AF774D2CD3A),
  835. SPH_C64(0xB9696906D2D06F69), SPH_C64(0x24090941122D4809),
  836. SPH_C64(0xDD7070D7E0ADA770), SPH_C64(0xE2B6B66F7154D9B6),
  837. SPH_C64(0x67D0D01EBDB7CED0), SPH_C64(0x93EDEDD6C77E3BED),
  838. SPH_C64(0x17CCCCE285DB2ECC), SPH_C64(0x1542426884572A42),
  839. SPH_C64(0x5A98982C2DC2B498), SPH_C64(0xAAA4A4ED550E49A4),
  840. SPH_C64(0xA028287550885D28), SPH_C64(0x6D5C5C86B831DA5C),
  841. SPH_C64(0xC7F8F86BED3F93F8), SPH_C64(0x228686C211A44486)
  842. };
  843.  
  844. __constant static const sph_u64 plain_T6[256] = {
  845. SPH_C64(0x1818D83078C01860), SPH_C64(0x23232646AF05238C),
  846. SPH_C64(0xC6C6B891F97EC63F), SPH_C64(0xE8E8FBCD6F13E887),
  847. SPH_C64(0x8787CB13A14C8726), SPH_C64(0xB8B8116D62A9B8DA),
  848. SPH_C64(0x0101090205080104), SPH_C64(0x4F4F0D9E6E424F21),
  849. SPH_C64(0x36369B6CEEAD36D8), SPH_C64(0xA6A6FF510459A6A2),
  850. SPH_C64(0xD2D20CB9BDDED26F), SPH_C64(0xF5F50EF706FBF5F3),
  851. SPH_C64(0x797996F280EF79F9), SPH_C64(0x6F6F30DECE5F6FA1),
  852. SPH_C64(0x91916D3FEFFC917E), SPH_C64(0x5252F8A407AA5255),
  853. SPH_C64(0x606047C0FD27609D), SPH_C64(0xBCBC35657689BCCA),
  854. SPH_C64(0x9B9B372BCDAC9B56), SPH_C64(0x8E8E8A018C048E02),
  855. SPH_C64(0xA3A3D25B1571A3B6), SPH_C64(0x0C0C6C183C600C30),
  856. SPH_C64(0x7B7B84F68AFF7BF1), SPH_C64(0x3535806AE1B535D4),
  857. SPH_C64(0x1D1DF53A69E81D74), SPH_C64(0xE0E0B3DD4753E0A7),
  858. SPH_C64(0xD7D721B3ACF6D77B), SPH_C64(0xC2C29C99ED5EC22F),
  859. SPH_C64(0x2E2E435C966D2EB8), SPH_C64(0x4B4B29967A624B31),
  860. SPH_C64(0xFEFE5DE121A3FEDF), SPH_C64(0x5757D5AE16825741),
  861. SPH_C64(0x1515BD2A41A81554), SPH_C64(0x7777E8EEB69F77C1),
  862. SPH_C64(0x3737926EEBA537DC), SPH_C64(0xE5E59ED7567BE5B3),
  863. SPH_C64(0x9F9F1323D98C9F46), SPH_C64(0xF0F023FD17D3F0E7),
  864. SPH_C64(0x4A4A20947F6A4A35), SPH_C64(0xDADA44A9959EDA4F),
  865. SPH_C64(0x5858A2B025FA587D), SPH_C64(0xC9C9CF8FCA06C903),
  866. SPH_C64(0x29297C528D5529A4), SPH_C64(0x0A0A5A1422500A28),
  867. SPH_C64(0xB1B1507F4FE1B1FE), SPH_C64(0xA0A0C95D1A69A0BA),
  868. SPH_C64(0x6B6B14D6DA7F6BB1), SPH_C64(0x8585D917AB5C852E),
  869. SPH_C64(0xBDBD3C677381BDCE), SPH_C64(0x5D5D8FBA34D25D69),
  870. SPH_C64(0x1010902050801040), SPH_C64(0xF4F407F503F3F4F7),
  871. SPH_C64(0xCBCBDD8BC016CB0B), SPH_C64(0x3E3ED37CC6ED3EF8),
  872. SPH_C64(0x05052D0A11280514), SPH_C64(0x676778CEE61F6781),
  873. SPH_C64(0xE4E497D55373E4B7), SPH_C64(0x2727024EBB25279C),
  874. SPH_C64(0x4141738258324119), SPH_C64(0x8B8BA70B9D2C8B16),
  875. SPH_C64(0xA7A7F6530151A7A6), SPH_C64(0x7D7DB2FA94CF7DE9),
  876. SPH_C64(0x95954937FBDC956E), SPH_C64(0xD8D856AD9F8ED847),
  877. SPH_C64(0xFBFB70EB308BFBCB), SPH_C64(0xEEEECDC17123EE9F),
  878. SPH_C64(0x7C7CBBF891C77CED), SPH_C64(0x666671CCE3176685),
  879. SPH_C64(0xDDDD7BA78EA6DD53), SPH_C64(0x1717AF2E4BB8175C),
  880. SPH_C64(0x4747458E46024701), SPH_C64(0x9E9E1A21DC849E42),
  881. SPH_C64(0xCACAD489C51ECA0F), SPH_C64(0x2D2D585A99752DB4),
  882. SPH_C64(0xBFBF2E637991BFC6), SPH_C64(0x07073F0E1B38071C),
  883. SPH_C64(0xADADAC472301AD8E), SPH_C64(0x5A5AB0B42FEA5A75),
  884. SPH_C64(0x8383EF1BB56C8336), SPH_C64(0x3333B666FF8533CC),
  885. SPH_C64(0x63635CC6F23F6391), SPH_C64(0x020212040A100208),
  886. SPH_C64(0xAAAA93493839AA92), SPH_C64(0x7171DEE2A8AF71D9),
  887. SPH_C64(0xC8C8C68DCF0EC807), SPH_C64(0x1919D1327DC81964),
  888. SPH_C64(0x49493B9270724939), SPH_C64(0xD9D95FAF9A86D943),
  889. SPH_C64(0xF2F231F91DC3F2EF), SPH_C64(0xE3E3A8DB484BE3AB),
  890. SPH_C64(0x5B5BB9B62AE25B71), SPH_C64(0x8888BC0D9234881A),
  891. SPH_C64(0x9A9A3E29C8A49A52), SPH_C64(0x26260B4CBE2D2698),
  892. SPH_C64(0x3232BF64FA8D32C8), SPH_C64(0xB0B0597D4AE9B0FA),
  893. SPH_C64(0xE9E9F2CF6A1BE983), SPH_C64(0x0F0F771E33780F3C),
  894. SPH_C64(0xD5D533B7A6E6D573), SPH_C64(0x8080F41DBA74803A),
  895. SPH_C64(0xBEBE27617C99BEC2), SPH_C64(0xCDCDEB87DE26CD13),
  896. SPH_C64(0x34348968E4BD34D0), SPH_C64(0x48483290757A483D),
  897. SPH_C64(0xFFFF54E324ABFFDB), SPH_C64(0x7A7A8DF48FF77AF5),
  898. SPH_C64(0x9090643DEAF4907A), SPH_C64(0x5F5F9DBE3EC25F61),
  899. SPH_C64(0x20203D40A01D2080), SPH_C64(0x68680FD0D56768BD),
  900. SPH_C64(0x1A1ACA3472D01A68), SPH_C64(0xAEAEB7412C19AE82),
  901. SPH_C64(0xB4B47D755EC9B4EA), SPH_C64(0x5454CEA8199A544D),
  902. SPH_C64(0x93937F3BE5EC9376), SPH_C64(0x22222F44AA0D2288),
  903. SPH_C64(0x646463C8E907648D), SPH_C64(0xF1F12AFF12DBF1E3),
  904. SPH_C64(0x7373CCE6A2BF73D1), SPH_C64(0x121282245A901248),
  905. SPH_C64(0x40407A805D3A401D), SPH_C64(0x0808481028400820),
  906. SPH_C64(0xC3C3959BE856C32B), SPH_C64(0xECECDFC57B33EC97),
  907. SPH_C64(0xDBDB4DAB9096DB4B), SPH_C64(0xA1A1C05F1F61A1BE),
  908. SPH_C64(0x8D8D9107831C8D0E), SPH_C64(0x3D3DC87AC9F53DF4),
  909. SPH_C64(0x97975B33F1CC9766), SPH_C64(0x0000000000000000),
  910. SPH_C64(0xCFCFF983D436CF1B), SPH_C64(0x2B2B6E5687452BAC),
  911. SPH_C64(0x7676E1ECB39776C5), SPH_C64(0x8282E619B0648232),
  912. SPH_C64(0xD6D628B1A9FED67F), SPH_C64(0x1B1BC33677D81B6C),
  913. SPH_C64(0xB5B574775BC1B5EE), SPH_C64(0xAFAFBE432911AF86),
  914. SPH_C64(0x6A6A1DD4DF776AB5), SPH_C64(0x5050EAA00DBA505D),
  915. SPH_C64(0x4545578A4C124509), SPH_C64(0xF3F338FB18CBF3EB),
  916. SPH_C64(0x3030AD60F09D30C0), SPH_C64(0xEFEFC4C3742BEF9B),
  917. SPH_C64(0x3F3FDA7EC3E53FFC), SPH_C64(0x5555C7AA1C925549),
  918. SPH_C64(0xA2A2DB591079A2B2), SPH_C64(0xEAEAE9C96503EA8F),
  919. SPH_C64(0x65656ACAEC0F6589), SPH_C64(0xBABA036968B9BAD2),
  920. SPH_C64(0x2F2F4A5E93652FBC), SPH_C64(0xC0C08E9DE74EC027),
  921. SPH_C64(0xDEDE60A181BEDE5F), SPH_C64(0x1C1CFC386CE01C70),
  922. SPH_C64(0xFDFD46E72EBBFDD3), SPH_C64(0x4D4D1F9A64524D29),
  923. SPH_C64(0x92927639E0E49272), SPH_C64(0x7575FAEABC8F75C9),
  924. SPH_C64(0x0606360C1E300618), SPH_C64(0x8A8AAE0998248A12),
  925. SPH_C64(0xB2B24B7940F9B2F2), SPH_C64(0xE6E685D15963E6BF),
  926. SPH_C64(0x0E0E7E1C36700E38), SPH_C64(0x1F1FE73E63F81F7C),
  927. SPH_C64(0x626255C4F7376295), SPH_C64(0xD4D43AB5A3EED477),
  928. SPH_C64(0xA8A8814D3229A89A), SPH_C64(0x96965231F4C49662),
  929. SPH_C64(0xF9F962EF3A9BF9C3), SPH_C64(0xC5C5A397F666C533),
  930. SPH_C64(0x2525104AB1352594), SPH_C64(0x5959ABB220F25979),
  931. SPH_C64(0x8484D015AE54842A), SPH_C64(0x7272C5E4A7B772D5),
  932. SPH_C64(0x3939EC72DDD539E4), SPH_C64(0x4C4C1698615A4C2D),
  933. SPH_C64(0x5E5E94BC3BCA5E65), SPH_C64(0x78789FF085E778FD),
  934. SPH_C64(0x3838E570D8DD38E0), SPH_C64(0x8C8C980586148C0A),
  935. SPH_C64(0xD1D117BFB2C6D163), SPH_C64(0xA5A5E4570B41A5AE),
  936. SPH_C64(0xE2E2A1D94D43E2AF), SPH_C64(0x61614EC2F82F6199),
  937. SPH_C64(0xB3B3427B45F1B3F6), SPH_C64(0x21213442A5152184),
  938. SPH_C64(0x9C9C0825D6949C4A), SPH_C64(0x1E1EEE3C66F01E78),
  939. SPH_C64(0x4343618652224311), SPH_C64(0xC7C7B193FC76C73B),
  940. SPH_C64(0xFCFC4FE52BB3FCD7), SPH_C64(0x0404240814200410),
  941. SPH_C64(0x5151E3A208B25159), SPH_C64(0x9999252FC7BC995E),
  942. SPH_C64(0x6D6D22DAC44F6DA9), SPH_C64(0x0D0D651A39680D34),
  943. SPH_C64(0xFAFA79E93583FACF), SPH_C64(0xDFDF69A384B6DF5B),
  944. SPH_C64(0x7E7EA9FC9BD77EE5), SPH_C64(0x24241948B43D2490),
  945. SPH_C64(0x3B3BFE76D7C53BEC), SPH_C64(0xABAB9A4B3D31AB96),
  946. SPH_C64(0xCECEF081D13ECE1F), SPH_C64(0x1111992255881144),
  947. SPH_C64(0x8F8F8303890C8F06), SPH_C64(0x4E4E049C6B4A4E25),
  948. SPH_C64(0xB7B7667351D1B7E6), SPH_C64(0xEBEBE0CB600BEB8B),
  949. SPH_C64(0x3C3CC178CCFD3CF0), SPH_C64(0x8181FD1FBF7C813E),
  950. SPH_C64(0x94944035FED4946A), SPH_C64(0xF7F71CF30CEBF7FB),
  951. SPH_C64(0xB9B9186F67A1B9DE), SPH_C64(0x13138B265F98134C),
  952. SPH_C64(0x2C2C51589C7D2CB0), SPH_C64(0xD3D305BBB8D6D36B),
  953. SPH_C64(0xE7E78CD35C6BE7BB), SPH_C64(0x6E6E39DCCB576EA5),
  954. SPH_C64(0xC4C4AA95F36EC437), SPH_C64(0x03031B060F18030C),
  955. SPH_C64(0x5656DCAC138A5645), SPH_C64(0x44445E88491A440D),
  956. SPH_C64(0x7F7FA0FE9EDF7FE1), SPH_C64(0xA9A9884F3721A99E),
  957. SPH_C64(0x2A2A6754824D2AA8), SPH_C64(0xBBBB0A6B6DB1BBD6),
  958. SPH_C64(0xC1C1879FE246C123), SPH_C64(0x5353F1A602A25351),
  959. SPH_C64(0xDCDC72A58BAEDC57), SPH_C64(0x0B0B531627580B2C),
  960. SPH_C64(0x9D9D0127D39C9D4E), SPH_C64(0x6C6C2BD8C1476CAD),
  961. SPH_C64(0x3131A462F59531C4), SPH_C64(0x7474F3E8B98774CD),
  962. SPH_C64(0xF6F615F109E3F6FF), SPH_C64(0x46464C8C430A4605),
  963. SPH_C64(0xACACA5452609AC8A), SPH_C64(0x8989B50F973C891E),
  964. SPH_C64(0x1414B42844A01450), SPH_C64(0xE1E1BADF425BE1A3),
  965. SPH_C64(0x1616A62C4EB01658), SPH_C64(0x3A3AF774D2CD3AE8),
  966. SPH_C64(0x696906D2D06F69B9), SPH_C64(0x090941122D480924),
  967. SPH_C64(0x7070D7E0ADA770DD), SPH_C64(0xB6B66F7154D9B6E2),
  968. SPH_C64(0xD0D01EBDB7CED067), SPH_C64(0xEDEDD6C77E3BED93),
  969. SPH_C64(0xCCCCE285DB2ECC17), SPH_C64(0x42426884572A4215),
  970. SPH_C64(0x98982C2DC2B4985A), SPH_C64(0xA4A4ED550E49A4AA),
  971. SPH_C64(0x28287550885D28A0), SPH_C64(0x5C5C86B831DA5C6D),
  972. SPH_C64(0xF8F86BED3F93F8C7), SPH_C64(0x8686C211A4448622)
  973. };
  974.  
  975. __constant static const sph_u64 plain_T7[256] = {
  976. SPH_C64(0x18D83078C0186018), SPH_C64(0x232646AF05238C23),
  977. SPH_C64(0xC6B891F97EC63FC6), SPH_C64(0xE8FBCD6F13E887E8),
  978. SPH_C64(0x87CB13A14C872687), SPH_C64(0xB8116D62A9B8DAB8),
  979. SPH_C64(0x0109020508010401), SPH_C64(0x4F0D9E6E424F214F),
  980. SPH_C64(0x369B6CEEAD36D836), SPH_C64(0xA6FF510459A6A2A6),
  981. SPH_C64(0xD20CB9BDDED26FD2), SPH_C64(0xF50EF706FBF5F3F5),
  982. SPH_C64(0x7996F280EF79F979), SPH_C64(0x6F30DECE5F6FA16F),
  983. SPH_C64(0x916D3FEFFC917E91), SPH_C64(0x52F8A407AA525552),
  984. SPH_C64(0x6047C0FD27609D60), SPH_C64(0xBC35657689BCCABC),
  985. SPH_C64(0x9B372BCDAC9B569B), SPH_C64(0x8E8A018C048E028E),
  986. SPH_C64(0xA3D25B1571A3B6A3), SPH_C64(0x0C6C183C600C300C),
  987. SPH_C64(0x7B84F68AFF7BF17B), SPH_C64(0x35806AE1B535D435),
  988. SPH_C64(0x1DF53A69E81D741D), SPH_C64(0xE0B3DD4753E0A7E0),
  989. SPH_C64(0xD721B3ACF6D77BD7), SPH_C64(0xC29C99ED5EC22FC2),
  990. SPH_C64(0x2E435C966D2EB82E), SPH_C64(0x4B29967A624B314B),
  991. SPH_C64(0xFE5DE121A3FEDFFE), SPH_C64(0x57D5AE1682574157),
  992. SPH_C64(0x15BD2A41A8155415), SPH_C64(0x77E8EEB69F77C177),
  993. SPH_C64(0x37926EEBA537DC37), SPH_C64(0xE59ED7567BE5B3E5),
  994. SPH_C64(0x9F1323D98C9F469F), SPH_C64(0xF023FD17D3F0E7F0),
  995. SPH_C64(0x4A20947F6A4A354A), SPH_C64(0xDA44A9959EDA4FDA),
  996. SPH_C64(0x58A2B025FA587D58), SPH_C64(0xC9CF8FCA06C903C9),
  997. SPH_C64(0x297C528D5529A429), SPH_C64(0x0A5A1422500A280A),
  998. SPH_C64(0xB1507F4FE1B1FEB1), SPH_C64(0xA0C95D1A69A0BAA0),
  999. SPH_C64(0x6B14D6DA7F6BB16B), SPH_C64(0x85D917AB5C852E85),
  1000. SPH_C64(0xBD3C677381BDCEBD), SPH_C64(0x5D8FBA34D25D695D),
  1001. SPH_C64(0x1090205080104010), SPH_C64(0xF407F503F3F4F7F4),
  1002. SPH_C64(0xCBDD8BC016CB0BCB), SPH_C64(0x3ED37CC6ED3EF83E),
  1003. SPH_C64(0x052D0A1128051405), SPH_C64(0x6778CEE61F678167),
  1004. SPH_C64(0xE497D55373E4B7E4), SPH_C64(0x27024EBB25279C27),
  1005. SPH_C64(0x4173825832411941), SPH_C64(0x8BA70B9D2C8B168B),
  1006. SPH_C64(0xA7F6530151A7A6A7), SPH_C64(0x7DB2FA94CF7DE97D),
  1007. SPH_C64(0x954937FBDC956E95), SPH_C64(0xD856AD9F8ED847D8),
  1008. SPH_C64(0xFB70EB308BFBCBFB), SPH_C64(0xEECDC17123EE9FEE),
  1009. SPH_C64(0x7CBBF891C77CED7C), SPH_C64(0x6671CCE317668566),
  1010. SPH_C64(0xDD7BA78EA6DD53DD), SPH_C64(0x17AF2E4BB8175C17),
  1011. SPH_C64(0x47458E4602470147), SPH_C64(0x9E1A21DC849E429E),
  1012. SPH_C64(0xCAD489C51ECA0FCA), SPH_C64(0x2D585A99752DB42D),
  1013. SPH_C64(0xBF2E637991BFC6BF), SPH_C64(0x073F0E1B38071C07),
  1014. SPH_C64(0xADAC472301AD8EAD), SPH_C64(0x5AB0B42FEA5A755A),
  1015. SPH_C64(0x83EF1BB56C833683), SPH_C64(0x33B666FF8533CC33),
  1016. SPH_C64(0x635CC6F23F639163), SPH_C64(0x0212040A10020802),
  1017. SPH_C64(0xAA93493839AA92AA), SPH_C64(0x71DEE2A8AF71D971),
  1018. SPH_C64(0xC8C68DCF0EC807C8), SPH_C64(0x19D1327DC8196419),
  1019. SPH_C64(0x493B927072493949), SPH_C64(0xD95FAF9A86D943D9),
  1020. SPH_C64(0xF231F91DC3F2EFF2), SPH_C64(0xE3A8DB484BE3ABE3),
  1021. SPH_C64(0x5BB9B62AE25B715B), SPH_C64(0x88BC0D9234881A88),
  1022. SPH_C64(0x9A3E29C8A49A529A), SPH_C64(0x260B4CBE2D269826),
  1023. SPH_C64(0x32BF64FA8D32C832), SPH_C64(0xB0597D4AE9B0FAB0),
  1024. SPH_C64(0xE9F2CF6A1BE983E9), SPH_C64(0x0F771E33780F3C0F),
  1025. SPH_C64(0xD533B7A6E6D573D5), SPH_C64(0x80F41DBA74803A80),
  1026. SPH_C64(0xBE27617C99BEC2BE), SPH_C64(0xCDEB87DE26CD13CD),
  1027. SPH_C64(0x348968E4BD34D034), SPH_C64(0x483290757A483D48),
  1028. SPH_C64(0xFF54E324ABFFDBFF), SPH_C64(0x7A8DF48FF77AF57A),
  1029. SPH_C64(0x90643DEAF4907A90), SPH_C64(0x5F9DBE3EC25F615F),
  1030. SPH_C64(0x203D40A01D208020), SPH_C64(0x680FD0D56768BD68),
  1031. SPH_C64(0x1ACA3472D01A681A), SPH_C64(0xAEB7412C19AE82AE),
  1032. SPH_C64(0xB47D755EC9B4EAB4), SPH_C64(0x54CEA8199A544D54),
  1033. SPH_C64(0x937F3BE5EC937693), SPH_C64(0x222F44AA0D228822),
  1034. SPH_C64(0x6463C8E907648D64), SPH_C64(0xF12AFF12DBF1E3F1),
  1035. SPH_C64(0x73CCE6A2BF73D173), SPH_C64(0x1282245A90124812),
  1036. SPH_C64(0x407A805D3A401D40), SPH_C64(0x0848102840082008),
  1037. SPH_C64(0xC3959BE856C32BC3), SPH_C64(0xECDFC57B33EC97EC),
  1038. SPH_C64(0xDB4DAB9096DB4BDB), SPH_C64(0xA1C05F1F61A1BEA1),
  1039. SPH_C64(0x8D9107831C8D0E8D), SPH_C64(0x3DC87AC9F53DF43D),
  1040. SPH_C64(0x975B33F1CC976697), SPH_C64(0x0000000000000000),
  1041. SPH_C64(0xCFF983D436CF1BCF), SPH_C64(0x2B6E5687452BAC2B),
  1042. SPH_C64(0x76E1ECB39776C576), SPH_C64(0x82E619B064823282),
  1043. SPH_C64(0xD628B1A9FED67FD6), SPH_C64(0x1BC33677D81B6C1B),
  1044. SPH_C64(0xB574775BC1B5EEB5), SPH_C64(0xAFBE432911AF86AF),
  1045. SPH_C64(0x6A1DD4DF776AB56A), SPH_C64(0x50EAA00DBA505D50),
  1046. SPH_C64(0x45578A4C12450945), SPH_C64(0xF338FB18CBF3EBF3),
  1047. SPH_C64(0x30AD60F09D30C030), SPH_C64(0xEFC4C3742BEF9BEF),
  1048. SPH_C64(0x3FDA7EC3E53FFC3F), SPH_C64(0x55C7AA1C92554955),
  1049. SPH_C64(0xA2DB591079A2B2A2), SPH_C64(0xEAE9C96503EA8FEA),
  1050. SPH_C64(0x656ACAEC0F658965), SPH_C64(0xBA036968B9BAD2BA),
  1051. SPH_C64(0x2F4A5E93652FBC2F), SPH_C64(0xC08E9DE74EC027C0),
  1052. SPH_C64(0xDE60A181BEDE5FDE), SPH_C64(0x1CFC386CE01C701C),
  1053. SPH_C64(0xFD46E72EBBFDD3FD), SPH_C64(0x4D1F9A64524D294D),
  1054. SPH_C64(0x927639E0E4927292), SPH_C64(0x75FAEABC8F75C975),
  1055. SPH_C64(0x06360C1E30061806), SPH_C64(0x8AAE0998248A128A),
  1056. SPH_C64(0xB24B7940F9B2F2B2), SPH_C64(0xE685D15963E6BFE6),
  1057. SPH_C64(0x0E7E1C36700E380E), SPH_C64(0x1FE73E63F81F7C1F),
  1058. SPH_C64(0x6255C4F737629562), SPH_C64(0xD43AB5A3EED477D4),
  1059. SPH_C64(0xA8814D3229A89AA8), SPH_C64(0x965231F4C4966296),
  1060. SPH_C64(0xF962EF3A9BF9C3F9), SPH_C64(0xC5A397F666C533C5),
  1061. SPH_C64(0x25104AB135259425), SPH_C64(0x59ABB220F2597959),
  1062. SPH_C64(0x84D015AE54842A84), SPH_C64(0x72C5E4A7B772D572),
  1063. SPH_C64(0x39EC72DDD539E439), SPH_C64(0x4C1698615A4C2D4C),
  1064. SPH_C64(0x5E94BC3BCA5E655E), SPH_C64(0x789FF085E778FD78),
  1065. SPH_C64(0x38E570D8DD38E038), SPH_C64(0x8C980586148C0A8C),
  1066. SPH_C64(0xD117BFB2C6D163D1), SPH_C64(0xA5E4570B41A5AEA5),
  1067. SPH_C64(0xE2A1D94D43E2AFE2), SPH_C64(0x614EC2F82F619961),
  1068. SPH_C64(0xB3427B45F1B3F6B3), SPH_C64(0x213442A515218421),
  1069. SPH_C64(0x9C0825D6949C4A9C), SPH_C64(0x1EEE3C66F01E781E),
  1070. SPH_C64(0x4361865222431143), SPH_C64(0xC7B193FC76C73BC7),
  1071. SPH_C64(0xFC4FE52BB3FCD7FC), SPH_C64(0x0424081420041004),
  1072. SPH_C64(0x51E3A208B2515951), SPH_C64(0x99252FC7BC995E99),
  1073. SPH_C64(0x6D22DAC44F6DA96D), SPH_C64(0x0D651A39680D340D),
  1074. SPH_C64(0xFA79E93583FACFFA), SPH_C64(0xDF69A384B6DF5BDF),
  1075. SPH_C64(0x7EA9FC9BD77EE57E), SPH_C64(0x241948B43D249024),
  1076. SPH_C64(0x3BFE76D7C53BEC3B), SPH_C64(0xAB9A4B3D31AB96AB),
  1077. SPH_C64(0xCEF081D13ECE1FCE), SPH_C64(0x1199225588114411),
  1078. SPH_C64(0x8F8303890C8F068F), SPH_C64(0x4E049C6B4A4E254E),
  1079. SPH_C64(0xB7667351D1B7E6B7), SPH_C64(0xEBE0CB600BEB8BEB),
  1080. SPH_C64(0x3CC178CCFD3CF03C), SPH_C64(0x81FD1FBF7C813E81),
  1081. SPH_C64(0x944035FED4946A94), SPH_C64(0xF71CF30CEBF7FBF7),
  1082. SPH_C64(0xB9186F67A1B9DEB9), SPH_C64(0x138B265F98134C13),
  1083. SPH_C64(0x2C51589C7D2CB02C), SPH_C64(0xD305BBB8D6D36BD3),
  1084. SPH_C64(0xE78CD35C6BE7BBE7), SPH_C64(0x6E39DCCB576EA56E),
  1085. SPH_C64(0xC4AA95F36EC437C4), SPH_C64(0x031B060F18030C03),
  1086. SPH_C64(0x56DCAC138A564556), SPH_C64(0x445E88491A440D44),
  1087. SPH_C64(0x7FA0FE9EDF7FE17F), SPH_C64(0xA9884F3721A99EA9),
  1088. SPH_C64(0x2A6754824D2AA82A), SPH_C64(0xBB0A6B6DB1BBD6BB),
  1089. SPH_C64(0xC1879FE246C123C1), SPH_C64(0x53F1A602A2535153),
  1090. SPH_C64(0xDC72A58BAEDC57DC), SPH_C64(0x0B531627580B2C0B),
  1091. SPH_C64(0x9D0127D39C9D4E9D), SPH_C64(0x6C2BD8C1476CAD6C),
  1092. SPH_C64(0x31A462F59531C431), SPH_C64(0x74F3E8B98774CD74),
  1093. SPH_C64(0xF615F109E3F6FFF6), SPH_C64(0x464C8C430A460546),
  1094. SPH_C64(0xACA5452609AC8AAC), SPH_C64(0x89B50F973C891E89),
  1095. SPH_C64(0x14B42844A0145014), SPH_C64(0xE1BADF425BE1A3E1),
  1096. SPH_C64(0x16A62C4EB0165816), SPH_C64(0x3AF774D2CD3AE83A),
  1097. SPH_C64(0x6906D2D06F69B969), SPH_C64(0x0941122D48092409),
  1098. SPH_C64(0x70D7E0ADA770DD70), SPH_C64(0xB66F7154D9B6E2B6),
  1099. SPH_C64(0xD01EBDB7CED067D0), SPH_C64(0xEDD6C77E3BED93ED),
  1100. SPH_C64(0xCCE285DB2ECC17CC), SPH_C64(0x426884572A421542),
  1101. SPH_C64(0x982C2DC2B4985A98), SPH_C64(0xA4ED550E49A4AAA4),
  1102. SPH_C64(0x287550885D28A028), SPH_C64(0x5C86B831DA5C6D5C),
  1103. SPH_C64(0xF86BED3F93F8C7F8), SPH_C64(0x86C211A444862286)
  1104. };
  1105.  
  1106. #endif
  1107.  
  1108. /*
  1109. * Round constants.
  1110. */
  1111. __constant static const sph_u64 plain_RC[10] = {
  1112. SPH_C64(0x4F01B887E8C62318),
  1113. SPH_C64(0x52916F79F5D2A636),
  1114. SPH_C64(0x357B0CA38E9BBC60),
  1115. SPH_C64(0x57FE4B2EC2D7E01D),
  1116. SPH_C64(0xDA4AF09FE5377715),
  1117. SPH_C64(0x856BA0B10A29C958),
  1118. SPH_C64(0x67053ECBF4105DBD),
  1119. SPH_C64(0xD8957DA78B4127E4),
  1120. SPH_C64(0x9E4717DD667CEEFB),
  1121. SPH_C64(0x33835AAD07BF2DCA)
  1122. };
  1123.  
  1124. /* ====================================================================== */
  1125.  
  1126. #define BYTE(x, n) ((unsigned)((x) >> (8 * (n))) & 0xFF)
  1127.  
  1128. #define ROUND_ELT(table, in, i0, i1, i2, i3, i4, i5, i6, i7) \
  1129. (table ## 0[BYTE(in ## i0, 0)] \
  1130. ^ table ## 1[BYTE(in ## i1, 1)] \
  1131. ^ table ## 2[BYTE(in ## i2, 2)] \
  1132. ^ table ## 3[BYTE(in ## i3, 3)] \
  1133. ^ table ## 4[BYTE(in ## i4, 4)] \
  1134. ^ table ## 5[BYTE(in ## i5, 5)] \
  1135. ^ table ## 6[BYTE(in ## i6, 6)] \
  1136. ^ table ## 7[BYTE(in ## i7, 7)])
  1137.  
  1138. #define ROUND(table, in, out, c0, c1, c2, c3, c4, c5, c6, c7) do { \
  1139. out ## 0 = ROUND_ELT(table, in, 0, 7, 6, 5, 4, 3, 2, 1) ^ c0; \
  1140. out ## 1 = ROUND_ELT(table, in, 1, 0, 7, 6, 5, 4, 3, 2) ^ c1; \
  1141. out ## 2 = ROUND_ELT(table, in, 2, 1, 0, 7, 6, 5, 4, 3) ^ c2; \
  1142. out ## 3 = ROUND_ELT(table, in, 3, 2, 1, 0, 7, 6, 5, 4) ^ c3; \
  1143. out ## 4 = ROUND_ELT(table, in, 4, 3, 2, 1, 0, 7, 6, 5) ^ c4; \
  1144. out ## 5 = ROUND_ELT(table, in, 5, 4, 3, 2, 1, 0, 7, 6) ^ c5; \
  1145. out ## 6 = ROUND_ELT(table, in, 6, 5, 4, 3, 2, 1, 0, 7) ^ c6; \
  1146. out ## 7 = ROUND_ELT(table, in, 7, 6, 5, 4, 3, 2, 1, 0) ^ c7; \
  1147. } while (0)
  1148.  
  1149. #define ROUND_KSCHED(table, in, out, c) \
  1150. ROUND(table, in, out, c, 0, 0, 0, 0, 0, 0, 0)
  1151.  
  1152. #define ROUND_WENC(table, in, key, out) \
  1153. ROUND(table, in, out, key ## 0, key ## 1, key ## 2, \
  1154. key ## 3, key ## 4, key ## 5, key ## 6, key ## 7)
  1155.  
  1156. #define TRANSFER(dst, src) do { \
  1157. dst ## 0 = src ## 0; \
  1158. dst ## 1 = src ## 1; \
  1159. dst ## 2 = src ## 2; \
  1160. dst ## 3 = src ## 3; \
  1161. dst ## 4 = src ## 4; \
  1162. dst ## 5 = src ## 5; \
  1163. dst ## 6 = src ## 6; \
  1164. dst ## 7 = src ## 7; \
  1165. } while (0)
  1166.  
  1167. #endif
Advertisement
Add Comment
Please, Sign In to add comment