You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1681 lines
30 KiB

  1. // Written in 2011-2012 by Dmitry Chestnykh.
  2. //
  3. // To the extent possible under law, the author have dedicated all copyright
  4. // and related and neighboring rights to this software to the public domain
  5. // worldwide. This software is distributed without any warranty.
  6. // http://creativecommons.org/publicdomain/zero/1.0/
  7. // BLAKE-256 block step.
  8. // In its own file so that a faster assembly or C version
  9. // can be substituted easily.
  10. package blake256
  11. const (
  12. cst0 = 0x243F6A88
  13. cst1 = 0x85A308D3
  14. cst2 = 0x13198A2E
  15. cst3 = 0x03707344
  16. cst4 = 0xA4093822
  17. cst5 = 0x299F31D0
  18. cst6 = 0x082EFA98
  19. cst7 = 0xEC4E6C89
  20. cst8 = 0x452821E6
  21. cst9 = 0x38D01377
  22. cst10 = 0xBE5466CF
  23. cst11 = 0x34E90C6C
  24. cst12 = 0xC0AC29B7
  25. cst13 = 0xC97C50DD
  26. cst14 = 0x3F84D5B5
  27. cst15 = 0xB5470917
  28. )
  29. func block(d *digest, p []uint8) {
  30. h0, h1, h2, h3, h4, h5, h6, h7 := d.h[0], d.h[1], d.h[2], d.h[3], d.h[4], d.h[5], d.h[6], d.h[7]
  31. s0, s1, s2, s3 := d.s[0], d.s[1], d.s[2], d.s[3]
  32. for len(p) >= BlockSize {
  33. v0, v1, v2, v3, v4, v5, v6, v7 := h0, h1, h2, h3, h4, h5, h6, h7
  34. v8 := cst0 ^ s0
  35. v9 := cst1 ^ s1
  36. v10 := cst2 ^ s2
  37. v11 := cst3 ^ s3
  38. v12 := uint32(cst4)
  39. v13 := uint32(cst5)
  40. v14 := uint32(cst6)
  41. v15 := uint32(cst7)
  42. d.t += 512
  43. if !d.nullt {
  44. v12 ^= uint32(d.t)
  45. v13 ^= uint32(d.t)
  46. v14 ^= uint32(d.t >> 32)
  47. v15 ^= uint32(d.t >> 32)
  48. }
  49. var m [16]uint32
  50. m[0] = uint32(p[0])<<24 | uint32(p[1])<<16 | uint32(p[2])<<8 | uint32(p[3])
  51. m[1] = uint32(p[4])<<24 | uint32(p[5])<<16 | uint32(p[6])<<8 | uint32(p[7])
  52. m[2] = uint32(p[8])<<24 | uint32(p[9])<<16 | uint32(p[10])<<8 | uint32(p[11])
  53. m[3] = uint32(p[12])<<24 | uint32(p[13])<<16 | uint32(p[14])<<8 | uint32(p[15])
  54. m[4] = uint32(p[16])<<24 | uint32(p[17])<<16 | uint32(p[18])<<8 | uint32(p[19])
  55. m[5] = uint32(p[20])<<24 | uint32(p[21])<<16 | uint32(p[22])<<8 | uint32(p[23])
  56. m[6] = uint32(p[24])<<24 | uint32(p[25])<<16 | uint32(p[26])<<8 | uint32(p[27])
  57. m[7] = uint32(p[28])<<24 | uint32(p[29])<<16 | uint32(p[30])<<8 | uint32(p[31])
  58. m[8] = uint32(p[32])<<24 | uint32(p[33])<<16 | uint32(p[34])<<8 | uint32(p[35])
  59. m[9] = uint32(p[36])<<24 | uint32(p[37])<<16 | uint32(p[38])<<8 | uint32(p[39])
  60. m[10] = uint32(p[40])<<24 | uint32(p[41])<<16 | uint32(p[42])<<8 | uint32(p[43])
  61. m[11] = uint32(p[44])<<24 | uint32(p[45])<<16 | uint32(p[46])<<8 | uint32(p[47])
  62. m[12] = uint32(p[48])<<24 | uint32(p[49])<<16 | uint32(p[50])<<8 | uint32(p[51])
  63. m[13] = uint32(p[52])<<24 | uint32(p[53])<<16 | uint32(p[54])<<8 | uint32(p[55])
  64. m[14] = uint32(p[56])<<24 | uint32(p[57])<<16 | uint32(p[58])<<8 | uint32(p[59])
  65. m[15] = uint32(p[60])<<24 | uint32(p[61])<<16 | uint32(p[62])<<8 | uint32(p[63])
  66. // Round 1.
  67. v0 += m[0] ^ cst1
  68. v0 += v4
  69. v12 ^= v0
  70. v12 = v12<<(32-16) | v12>>16
  71. v8 += v12
  72. v4 ^= v8
  73. v4 = v4<<(32-12) | v4>>12
  74. v1 += m[2] ^ cst3
  75. v1 += v5
  76. v13 ^= v1
  77. v13 = v13<<(32-16) | v13>>16
  78. v9 += v13
  79. v5 ^= v9
  80. v5 = v5<<(32-12) | v5>>12
  81. v2 += m[4] ^ cst5
  82. v2 += v6
  83. v14 ^= v2
  84. v14 = v14<<(32-16) | v14>>16
  85. v10 += v14
  86. v6 ^= v10
  87. v6 = v6<<(32-12) | v6>>12
  88. v3 += m[6] ^ cst7
  89. v3 += v7
  90. v15 ^= v3
  91. v15 = v15<<(32-16) | v15>>16
  92. v11 += v15
  93. v7 ^= v11
  94. v7 = v7<<(32-12) | v7>>12
  95. v2 += m[5] ^ cst4
  96. v2 += v6
  97. v14 ^= v2
  98. v14 = v14<<(32-8) | v14>>8
  99. v10 += v14
  100. v6 ^= v10
  101. v6 = v6<<(32-7) | v6>>7
  102. v3 += m[7] ^ cst6
  103. v3 += v7
  104. v15 ^= v3
  105. v15 = v15<<(32-8) | v15>>8
  106. v11 += v15
  107. v7 ^= v11
  108. v7 = v7<<(32-7) | v7>>7
  109. v1 += m[3] ^ cst2
  110. v1 += v5
  111. v13 ^= v1
  112. v13 = v13<<(32-8) | v13>>8
  113. v9 += v13
  114. v5 ^= v9
  115. v5 = v5<<(32-7) | v5>>7
  116. v0 += m[1] ^ cst0
  117. v0 += v4
  118. v12 ^= v0
  119. v12 = v12<<(32-8) | v12>>8
  120. v8 += v12
  121. v4 ^= v8
  122. v4 = v4<<(32-7) | v4>>7
  123. v0 += m[8] ^ cst9
  124. v0 += v5
  125. v15 ^= v0
  126. v15 = v15<<(32-16) | v15>>16
  127. v10 += v15
  128. v5 ^= v10
  129. v5 = v5<<(32-12) | v5>>12
  130. v1 += m[10] ^ cst11
  131. v1 += v6
  132. v12 ^= v1
  133. v12 = v12<<(32-16) | v12>>16
  134. v11 += v12
  135. v6 ^= v11
  136. v6 = v6<<(32-12) | v6>>12
  137. v2 += m[12] ^ cst13
  138. v2 += v7
  139. v13 ^= v2
  140. v13 = v13<<(32-16) | v13>>16
  141. v8 += v13
  142. v7 ^= v8
  143. v7 = v7<<(32-12) | v7>>12
  144. v3 += m[14] ^ cst15
  145. v3 += v4
  146. v14 ^= v3
  147. v14 = v14<<(32-16) | v14>>16
  148. v9 += v14
  149. v4 ^= v9
  150. v4 = v4<<(32-12) | v4>>12
  151. v2 += m[13] ^ cst12
  152. v2 += v7
  153. v13 ^= v2
  154. v13 = v13<<(32-8) | v13>>8
  155. v8 += v13
  156. v7 ^= v8
  157. v7 = v7<<(32-7) | v7>>7
  158. v3 += m[15] ^ cst14
  159. v3 += v4
  160. v14 ^= v3
  161. v14 = v14<<(32-8) | v14>>8
  162. v9 += v14
  163. v4 ^= v9
  164. v4 = v4<<(32-7) | v4>>7
  165. v1 += m[11] ^ cst10
  166. v1 += v6
  167. v12 ^= v1
  168. v12 = v12<<(32-8) | v12>>8
  169. v11 += v12
  170. v6 ^= v11
  171. v6 = v6<<(32-7) | v6>>7
  172. v0 += m[9] ^ cst8
  173. v0 += v5
  174. v15 ^= v0
  175. v15 = v15<<(32-8) | v15>>8
  176. v10 += v15
  177. v5 ^= v10
  178. v5 = v5<<(32-7) | v5>>7
  179. // Round 2.
  180. v0 += m[14] ^ cst10
  181. v0 += v4
  182. v12 ^= v0
  183. v12 = v12<<(32-16) | v12>>16
  184. v8 += v12
  185. v4 ^= v8
  186. v4 = v4<<(32-12) | v4>>12
  187. v1 += m[4] ^ cst8
  188. v1 += v5
  189. v13 ^= v1
  190. v13 = v13<<(32-16) | v13>>16
  191. v9 += v13
  192. v5 ^= v9
  193. v5 = v5<<(32-12) | v5>>12
  194. v2 += m[9] ^ cst15
  195. v2 += v6
  196. v14 ^= v2
  197. v14 = v14<<(32-16) | v14>>16
  198. v10 += v14
  199. v6 ^= v10
  200. v6 = v6<<(32-12) | v6>>12
  201. v3 += m[13] ^ cst6
  202. v3 += v7
  203. v15 ^= v3
  204. v15 = v15<<(32-16) | v15>>16
  205. v11 += v15
  206. v7 ^= v11
  207. v7 = v7<<(32-12) | v7>>12
  208. v2 += m[15] ^ cst9
  209. v2 += v6
  210. v14 ^= v2
  211. v14 = v14<<(32-8) | v14>>8
  212. v10 += v14
  213. v6 ^= v10
  214. v6 = v6<<(32-7) | v6>>7
  215. v3 += m[6] ^ cst13
  216. v3 += v7
  217. v15 ^= v3
  218. v15 = v15<<(32-8) | v15>>8
  219. v11 += v15
  220. v7 ^= v11
  221. v7 = v7<<(32-7) | v7>>7
  222. v1 += m[8] ^ cst4
  223. v1 += v5
  224. v13 ^= v1
  225. v13 = v13<<(32-8) | v13>>8
  226. v9 += v13
  227. v5 ^= v9
  228. v5 = v5<<(32-7) | v5>>7
  229. v0 += m[10] ^ cst14
  230. v0 += v4
  231. v12 ^= v0
  232. v12 = v12<<(32-8) | v12>>8
  233. v8 += v12
  234. v4 ^= v8
  235. v4 = v4<<(32-7) | v4>>7
  236. v0 += m[1] ^ cst12
  237. v0 += v5
  238. v15 ^= v0
  239. v15 = v15<<(32-16) | v15>>16
  240. v10 += v15
  241. v5 ^= v10
  242. v5 = v5<<(32-12) | v5>>12
  243. v1 += m[0] ^ cst2
  244. v1 += v6
  245. v12 ^= v1
  246. v12 = v12<<(32-16) | v12>>16
  247. v11 += v12
  248. v6 ^= v11
  249. v6 = v6<<(32-12) | v6>>12
  250. v2 += m[11] ^ cst7
  251. v2 += v7
  252. v13 ^= v2
  253. v13 = v13<<(32-16) | v13>>16
  254. v8 += v13
  255. v7 ^= v8
  256. v7 = v7<<(32-12) | v7>>12
  257. v3 += m[5] ^ cst3
  258. v3 += v4
  259. v14 ^= v3
  260. v14 = v14<<(32-16) | v14>>16
  261. v9 += v14
  262. v4 ^= v9
  263. v4 = v4<<(32-12) | v4>>12
  264. v2 += m[7] ^ cst11
  265. v2 += v7
  266. v13 ^= v2
  267. v13 = v13<<(32-8) | v13>>8
  268. v8 += v13
  269. v7 ^= v8
  270. v7 = v7<<(32-7) | v7>>7
  271. v3 += m[3] ^ cst5
  272. v3 += v4
  273. v14 ^= v3
  274. v14 = v14<<(32-8) | v14>>8
  275. v9 += v14
  276. v4 ^= v9
  277. v4 = v4<<(32-7) | v4>>7
  278. v1 += m[2] ^ cst0
  279. v1 += v6
  280. v12 ^= v1
  281. v12 = v12<<(32-8) | v12>>8
  282. v11 += v12
  283. v6 ^= v11
  284. v6 = v6<<(32-7) | v6>>7
  285. v0 += m[12] ^ cst1
  286. v0 += v5
  287. v15 ^= v0
  288. v15 = v15<<(32-8) | v15>>8
  289. v10 += v15
  290. v5 ^= v10
  291. v5 = v5<<(32-7) | v5>>7
  292. // Round 3.
  293. v0 += m[11] ^ cst8
  294. v0 += v4
  295. v12 ^= v0
  296. v12 = v12<<(32-16) | v12>>16
  297. v8 += v12
  298. v4 ^= v8
  299. v4 = v4<<(32-12) | v4>>12
  300. v1 += m[12] ^ cst0
  301. v1 += v5
  302. v13 ^= v1
  303. v13 = v13<<(32-16) | v13>>16
  304. v9 += v13
  305. v5 ^= v9
  306. v5 = v5<<(32-12) | v5>>12
  307. v2 += m[5] ^ cst2
  308. v2 += v6
  309. v14 ^= v2
  310. v14 = v14<<(32-16) | v14>>16
  311. v10 += v14
  312. v6 ^= v10
  313. v6 = v6<<(32-12) | v6>>12
  314. v3 += m[15] ^ cst13
  315. v3 += v7
  316. v15 ^= v3
  317. v15 = v15<<(32-16) | v15>>16
  318. v11 += v15
  319. v7 ^= v11
  320. v7 = v7<<(32-12) | v7>>12
  321. v2 += m[2] ^ cst5
  322. v2 += v6
  323. v14 ^= v2
  324. v14 = v14<<(32-8) | v14>>8
  325. v10 += v14
  326. v6 ^= v10
  327. v6 = v6<<(32-7) | v6>>7
  328. v3 += m[13] ^ cst15
  329. v3 += v7
  330. v15 ^= v3
  331. v15 = v15<<(32-8) | v15>>8
  332. v11 += v15
  333. v7 ^= v11
  334. v7 = v7<<(32-7) | v7>>7
  335. v1 += m[0] ^ cst12
  336. v1 += v5
  337. v13 ^= v1
  338. v13 = v13<<(32-8) | v13>>8
  339. v9 += v13
  340. v5 ^= v9
  341. v5 = v5<<(32-7) | v5>>7
  342. v0 += m[8] ^ cst11
  343. v0 += v4
  344. v12 ^= v0
  345. v12 = v12<<(32-8) | v12>>8
  346. v8 += v12
  347. v4 ^= v8
  348. v4 = v4<<(32-7) | v4>>7
  349. v0 += m[10] ^ cst14
  350. v0 += v5
  351. v15 ^= v0
  352. v15 = v15<<(32-16) | v15>>16
  353. v10 += v15
  354. v5 ^= v10
  355. v5 = v5<<(32-12) | v5>>12
  356. v1 += m[3] ^ cst6
  357. v1 += v6
  358. v12 ^= v1
  359. v12 = v12<<(32-16) | v12>>16
  360. v11 += v12
  361. v6 ^= v11
  362. v6 = v6<<(32-12) | v6>>12
  363. v2 += m[7] ^ cst1
  364. v2 += v7
  365. v13 ^= v2
  366. v13 = v13<<(32-16) | v13>>16
  367. v8 += v13
  368. v7 ^= v8
  369. v7 = v7<<(32-12) | v7>>12
  370. v3 += m[9] ^ cst4
  371. v3 += v4
  372. v14 ^= v3
  373. v14 = v14<<(32-16) | v14>>16
  374. v9 += v14
  375. v4 ^= v9
  376. v4 = v4<<(32-12) | v4>>12
  377. v2 += m[1] ^ cst7
  378. v2 += v7
  379. v13 ^= v2
  380. v13 = v13<<(32-8) | v13>>8
  381. v8 += v13
  382. v7 ^= v8
  383. v7 = v7<<(32-7) | v7>>7
  384. v3 += m[4] ^ cst9
  385. v3 += v4
  386. v14 ^= v3
  387. v14 = v14<<(32-8) | v14>>8
  388. v9 += v14
  389. v4 ^= v9
  390. v4 = v4<<(32-7) | v4>>7
  391. v1 += m[6] ^ cst3
  392. v1 += v6
  393. v12 ^= v1
  394. v12 = v12<<(32-8) | v12>>8
  395. v11 += v12
  396. v6 ^= v11
  397. v6 = v6<<(32-7) | v6>>7
  398. v0 += m[14] ^ cst10
  399. v0 += v5
  400. v15 ^= v0
  401. v15 = v15<<(32-8) | v15>>8
  402. v10 += v15
  403. v5 ^= v10
  404. v5 = v5<<(32-7) | v5>>7
  405. // Round 4.
  406. v0 += m[7] ^ cst9
  407. v0 += v4
  408. v12 ^= v0
  409. v12 = v12<<(32-16) | v12>>16
  410. v8 += v12
  411. v4 ^= v8
  412. v4 = v4<<(32-12) | v4>>12
  413. v1 += m[3] ^ cst1
  414. v1 += v5
  415. v13 ^= v1
  416. v13 = v13<<(32-16) | v13>>16
  417. v9 += v13
  418. v5 ^= v9
  419. v5 = v5<<(32-12) | v5>>12
  420. v2 += m[13] ^ cst12
  421. v2 += v6
  422. v14 ^= v2
  423. v14 = v14<<(32-16) | v14>>16
  424. v10 += v14
  425. v6 ^= v10
  426. v6 = v6<<(32-12) | v6>>12
  427. v3 += m[11] ^ cst14
  428. v3 += v7
  429. v15 ^= v3
  430. v15 = v15<<(32-16) | v15>>16
  431. v11 += v15
  432. v7 ^= v11
  433. v7 = v7<<(32-12) | v7>>12
  434. v2 += m[12] ^ cst13
  435. v2 += v6
  436. v14 ^= v2
  437. v14 = v14<<(32-8) | v14>>8
  438. v10 += v14
  439. v6 ^= v10
  440. v6 = v6<<(32-7) | v6>>7
  441. v3 += m[14] ^ cst11
  442. v3 += v7
  443. v15 ^= v3
  444. v15 = v15<<(32-8) | v15>>8
  445. v11 += v15
  446. v7 ^= v11
  447. v7 = v7<<(32-7) | v7>>7
  448. v1 += m[1] ^ cst3
  449. v1 += v5
  450. v13 ^= v1
  451. v13 = v13<<(32-8) | v13>>8
  452. v9 += v13
  453. v5 ^= v9
  454. v5 = v5<<(32-7) | v5>>7
  455. v0 += m[9] ^ cst7
  456. v0 += v4
  457. v12 ^= v0
  458. v12 = v12<<(32-8) | v12>>8
  459. v8 += v12
  460. v4 ^= v8
  461. v4 = v4<<(32-7) | v4>>7
  462. v0 += m[2] ^ cst6
  463. v0 += v5
  464. v15 ^= v0
  465. v15 = v15<<(32-16) | v15>>16
  466. v10 += v15
  467. v5 ^= v10
  468. v5 = v5<<(32-12) | v5>>12
  469. v1 += m[5] ^ cst10
  470. v1 += v6
  471. v12 ^= v1
  472. v12 = v12<<(32-16) | v12>>16
  473. v11 += v12
  474. v6 ^= v11
  475. v6 = v6<<(32-12) | v6>>12
  476. v2 += m[4] ^ cst0
  477. v2 += v7
  478. v13 ^= v2
  479. v13 = v13<<(32-16) | v13>>16
  480. v8 += v13
  481. v7 ^= v8
  482. v7 = v7<<(32-12) | v7>>12
  483. v3 += m[15] ^ cst8
  484. v3 += v4
  485. v14 ^= v3
  486. v14 = v14<<(32-16) | v14>>16
  487. v9 += v14
  488. v4 ^= v9
  489. v4 = v4<<(32-12) | v4>>12
  490. v2 += m[0] ^ cst4
  491. v2 += v7
  492. v13 ^= v2
  493. v13 = v13<<(32-8) | v13>>8
  494. v8 += v13
  495. v7 ^= v8
  496. v7 = v7<<(32-7) | v7>>7
  497. v3 += m[8] ^ cst15
  498. v3 += v4
  499. v14 ^= v3
  500. v14 = v14<<(32-8) | v14>>8
  501. v9 += v14
  502. v4 ^= v9
  503. v4 = v4<<(32-7) | v4>>7
  504. v1 += m[10] ^ cst5
  505. v1 += v6
  506. v12 ^= v1
  507. v12 = v12<<(32-8) | v12>>8
  508. v11 += v12
  509. v6 ^= v11
  510. v6 = v6<<(32-7) | v6>>7
  511. v0 += m[6] ^ cst2
  512. v0 += v5
  513. v15 ^= v0
  514. v15 = v15<<(32-8) | v15>>8
  515. v10 += v15
  516. v5 ^= v10
  517. v5 = v5<<(32-7) | v5>>7
  518. // Round 5.
  519. v0 += m[9] ^ cst0
  520. v0 += v4
  521. v12 ^= v0
  522. v12 = v12<<(32-16) | v12>>16
  523. v8 += v12
  524. v4 ^= v8
  525. v4 = v4<<(32-12) | v4>>12
  526. v1 += m[5] ^ cst7
  527. v1 += v5
  528. v13 ^= v1
  529. v13 = v13<<(32-16) | v13>>16
  530. v9 += v13
  531. v5 ^= v9
  532. v5 = v5<<(32-12) | v5>>12
  533. v2 += m[2] ^ cst4
  534. v2 += v6
  535. v14 ^= v2
  536. v14 = v14<<(32-16) | v14>>16
  537. v10 += v14
  538. v6 ^= v10
  539. v6 = v6<<(32-12) | v6>>12
  540. v3 += m[10] ^ cst15
  541. v3 += v7
  542. v15 ^= v3
  543. v15 = v15<<(32-16) | v15>>16
  544. v11 += v15
  545. v7 ^= v11
  546. v7 = v7<<(32-12) | v7>>12
  547. v2 += m[4] ^ cst2
  548. v2 += v6
  549. v14 ^= v2
  550. v14 = v14<<(32-8) | v14>>8
  551. v10 += v14
  552. v6 ^= v10
  553. v6 = v6<<(32-7) | v6>>7
  554. v3 += m[15] ^ cst10
  555. v3 += v7
  556. v15 ^= v3
  557. v15 = v15<<(32-8) | v15>>8
  558. v11 += v15
  559. v7 ^= v11
  560. v7 = v7<<(32-7) | v7>>7
  561. v1 += m[7] ^ cst5
  562. v1 += v5
  563. v13 ^= v1
  564. v13 = v13<<(32-8) | v13>>8
  565. v9 += v13
  566. v5 ^= v9
  567. v5 = v5<<(32-7) | v5>>7
  568. v0 += m[0] ^ cst9
  569. v0 += v4
  570. v12 ^= v0
  571. v12 = v12<<(32-8) | v12>>8
  572. v8 += v12
  573. v4 ^= v8
  574. v4 = v4<<(32-7) | v4>>7
  575. v0 += m[14] ^ cst1
  576. v0 += v5
  577. v15 ^= v0
  578. v15 = v15<<(32-16) | v15>>16
  579. v10 += v15
  580. v5 ^= v10
  581. v5 = v5<<(32-12) | v5>>12
  582. v1 += m[11] ^ cst12
  583. v1 += v6
  584. v12 ^= v1
  585. v12 = v12<<(32-16) | v12>>16
  586. v11 += v12
  587. v6 ^= v11
  588. v6 = v6<<(32-12) | v6>>12
  589. v2 += m[6] ^ cst8
  590. v2 += v7
  591. v13 ^= v2
  592. v13 = v13<<(32-16) | v13>>16
  593. v8 += v13
  594. v7 ^= v8
  595. v7 = v7<<(32-12) | v7>>12
  596. v3 += m[3] ^ cst13
  597. v3 += v4
  598. v14 ^= v3
  599. v14 = v14<<(32-16) | v14>>16
  600. v9 += v14
  601. v4 ^= v9
  602. v4 = v4<<(32-12) | v4>>12
  603. v2 += m[8] ^ cst6
  604. v2 += v7
  605. v13 ^= v2
  606. v13 = v13<<(32-8) | v13>>8
  607. v8 += v13
  608. v7 ^= v8
  609. v7 = v7<<(32-7) | v7>>7
  610. v3 += m[13] ^ cst3
  611. v3 += v4
  612. v14 ^= v3
  613. v14 = v14<<(32-8) | v14>>8
  614. v9 += v14
  615. v4 ^= v9
  616. v4 = v4<<(32-7) | v4>>7
  617. v1 += m[12] ^ cst11
  618. v1 += v6
  619. v12 ^= v1
  620. v12 = v12<<(32-8) | v12>>8
  621. v11 += v12
  622. v6 ^= v11
  623. v6 = v6<<(32-7) | v6>>7
  624. v0 += m[1] ^ cst14
  625. v0 += v5
  626. v15 ^= v0
  627. v15 = v15<<(32-8) | v15>>8
  628. v10 += v15
  629. v5 ^= v10
  630. v5 = v5<<(32-7) | v5>>7
  631. // Round 6.
  632. v0 += m[2] ^ cst12
  633. v0 += v4
  634. v12 ^= v0
  635. v12 = v12<<(32-16) | v12>>16
  636. v8 += v12
  637. v4 ^= v8
  638. v4 = v4<<(32-12) | v4>>12
  639. v1 += m[6] ^ cst10
  640. v1 += v5
  641. v13 ^= v1
  642. v13 = v13<<(32-16) | v13>>16
  643. v9 += v13
  644. v5 ^= v9
  645. v5 = v5<<(32-12) | v5>>12
  646. v2 += m[0] ^ cst11
  647. v2 += v6
  648. v14 ^= v2
  649. v14 = v14<<(32-16) | v14>>16
  650. v10 += v14
  651. v6 ^= v10
  652. v6 = v6<<(32-12) | v6>>12
  653. v3 += m[8] ^ cst3
  654. v3 += v7
  655. v15 ^= v3
  656. v15 = v15<<(32-16) | v15>>16
  657. v11 += v15
  658. v7 ^= v11
  659. v7 = v7<<(32-12) | v7>>12
  660. v2 += m[11] ^ cst0
  661. v2 += v6
  662. v14 ^= v2
  663. v14 = v14<<(32-8) | v14>>8
  664. v10 += v14
  665. v6 ^= v10
  666. v6 = v6<<(32-7) | v6>>7
  667. v3 += m[3] ^ cst8
  668. v3 += v7
  669. v15 ^= v3
  670. v15 = v15<<(32-8) | v15>>8
  671. v11 += v15
  672. v7 ^= v11
  673. v7 = v7<<(32-7) | v7>>7
  674. v1 += m[10] ^ cst6
  675. v1 += v5
  676. v13 ^= v1
  677. v13 = v13<<(32-8) | v13>>8
  678. v9 += v13
  679. v5 ^= v9
  680. v5 = v5<<(32-7) | v5>>7
  681. v0 += m[12] ^ cst2
  682. v0 += v4
  683. v12 ^= v0
  684. v12 = v12<<(32-8) | v12>>8
  685. v8 += v12
  686. v4 ^= v8
  687. v4 = v4<<(32-7) | v4>>7
  688. v0 += m[4] ^ cst13
  689. v0 += v5
  690. v15 ^= v0
  691. v15 = v15<<(32-16) | v15>>16
  692. v10 += v15
  693. v5 ^= v10
  694. v5 = v5<<(32-12) | v5>>12
  695. v1 += m[7] ^ cst5
  696. v1 += v6
  697. v12 ^= v1
  698. v12 = v12<<(32-16) | v12>>16
  699. v11 += v12
  700. v6 ^= v11
  701. v6 = v6<<(32-12) | v6>>12
  702. v2 += m[15] ^ cst14
  703. v2 += v7
  704. v13 ^= v2
  705. v13 = v13<<(32-16) | v13>>16
  706. v8 += v13
  707. v7 ^= v8
  708. v7 = v7<<(32-12) | v7>>12
  709. v3 += m[1] ^ cst9
  710. v3 += v4
  711. v14 ^= v3
  712. v14 = v14<<(32-16) | v14>>16
  713. v9 += v14
  714. v4 ^= v9
  715. v4 = v4<<(32-12) | v4>>12
  716. v2 += m[14] ^ cst15
  717. v2 += v7
  718. v13 ^= v2
  719. v13 = v13<<(32-8) | v13>>8
  720. v8 += v13
  721. v7 ^= v8
  722. v7 = v7<<(32-7) | v7>>7
  723. v3 += m[9] ^ cst1
  724. v3 += v4
  725. v14 ^= v3
  726. v14 = v14<<(32-8) | v14>>8
  727. v9 += v14
  728. v4 ^= v9
  729. v4 = v4<<(32-7) | v4>>7
  730. v1 += m[5] ^ cst7
  731. v1 += v6
  732. v12 ^= v1
  733. v12 = v12<<(32-8) | v12>>8
  734. v11 += v12
  735. v6 ^= v11
  736. v6 = v6<<(32-7) | v6>>7
  737. v0 += m[13] ^ cst4
  738. v0 += v5
  739. v15 ^= v0
  740. v15 = v15<<(32-8) | v15>>8
  741. v10 += v15
  742. v5 ^= v10
  743. v5 = v5<<(32-7) | v5>>7
  744. // Round 7.
  745. v0 += m[12] ^ cst5
  746. v0 += v4
  747. v12 ^= v0
  748. v12 = v12<<(32-16) | v12>>16
  749. v8 += v12
  750. v4 ^= v8
  751. v4 = v4<<(32-12) | v4>>12
  752. v1 += m[1] ^ cst15
  753. v1 += v5
  754. v13 ^= v1
  755. v13 = v13<<(32-16) | v13>>16
  756. v9 += v13
  757. v5 ^= v9
  758. v5 = v5<<(32-12) | v5>>12
  759. v2 += m[14] ^ cst13
  760. v2 += v6
  761. v14 ^= v2
  762. v14 = v14<<(32-16) | v14>>16
  763. v10 += v14
  764. v6 ^= v10
  765. v6 = v6<<(32-12) | v6>>12
  766. v3 += m[4] ^ cst10
  767. v3 += v7
  768. v15 ^= v3
  769. v15 = v15<<(32-16) | v15>>16
  770. v11 += v15
  771. v7 ^= v11
  772. v7 = v7<<(32-12) | v7>>12
  773. v2 += m[13] ^ cst14
  774. v2 += v6
  775. v14 ^= v2
  776. v14 = v14<<(32-8) | v14>>8
  777. v10 += v14
  778. v6 ^= v10
  779. v6 = v6<<(32-7) | v6>>7
  780. v3 += m[10] ^ cst4
  781. v3 += v7
  782. v15 ^= v3
  783. v15 = v15<<(32-8) | v15>>8
  784. v11 += v15
  785. v7 ^= v11
  786. v7 = v7<<(32-7) | v7>>7
  787. v1 += m[15] ^ cst1
  788. v1 += v5
  789. v13 ^= v1
  790. v13 = v13<<(32-8) | v13>>8
  791. v9 += v13
  792. v5 ^= v9
  793. v5 = v5<<(32-7) | v5>>7
  794. v0 += m[5] ^ cst12
  795. v0 += v4
  796. v12 ^= v0
  797. v12 = v12<<(32-8) | v12>>8
  798. v8 += v12
  799. v4 ^= v8
  800. v4 = v4<<(32-7) | v4>>7
  801. v0 += m[0] ^ cst7
  802. v0 += v5
  803. v15 ^= v0
  804. v15 = v15<<(32-16) | v15>>16
  805. v10 += v15
  806. v5 ^= v10
  807. v5 = v5<<(32-12) | v5>>12
  808. v1 += m[6] ^ cst3
  809. v1 += v6
  810. v12 ^= v1
  811. v12 = v12<<(32-16) | v12>>16
  812. v11 += v12
  813. v6 ^= v11
  814. v6 = v6<<(32-12) | v6>>12
  815. v2 += m[9] ^ cst2
  816. v2 += v7
  817. v13 ^= v2
  818. v13 = v13<<(32-16) | v13>>16
  819. v8 += v13
  820. v7 ^= v8
  821. v7 = v7<<(32-12) | v7>>12
  822. v3 += m[8] ^ cst11
  823. v3 += v4
  824. v14 ^= v3
  825. v14 = v14<<(32-16) | v14>>16
  826. v9 += v14
  827. v4 ^= v9
  828. v4 = v4<<(32-12) | v4>>12
  829. v2 += m[2] ^ cst9
  830. v2 += v7
  831. v13 ^= v2
  832. v13 = v13<<(32-8) | v13>>8
  833. v8 += v13
  834. v7 ^= v8
  835. v7 = v7<<(32-7) | v7>>7
  836. v3 += m[11] ^ cst8
  837. v3 += v4
  838. v14 ^= v3
  839. v14 = v14<<(32-8) | v14>>8
  840. v9 += v14
  841. v4 ^= v9
  842. v4 = v4<<(32-7) | v4>>7
  843. v1 += m[3] ^ cst6
  844. v1 += v6
  845. v12 ^= v1
  846. v12 = v12<<(32-8) | v12>>8
  847. v11 += v12
  848. v6 ^= v11
  849. v6 = v6<<(32-7) | v6>>7
  850. v0 += m[7] ^ cst0
  851. v0 += v5
  852. v15 ^= v0
  853. v15 = v15<<(32-8) | v15>>8
  854. v10 += v15
  855. v5 ^= v10
  856. v5 = v5<<(32-7) | v5>>7
  857. // Round 8.
  858. v0 += m[13] ^ cst11
  859. v0 += v4
  860. v12 ^= v0
  861. v12 = v12<<(32-16) | v12>>16
  862. v8 += v12
  863. v4 ^= v8
  864. v4 = v4<<(32-12) | v4>>12
  865. v1 += m[7] ^ cst14
  866. v1 += v5
  867. v13 ^= v1
  868. v13 = v13<<(32-16) | v13>>16
  869. v9 += v13
  870. v5 ^= v9
  871. v5 = v5<<(32-12) | v5>>12
  872. v2 += m[12] ^ cst1
  873. v2 += v6
  874. v14 ^= v2
  875. v14 = v14<<(32-16) | v14>>16
  876. v10 += v14
  877. v6 ^= v10
  878. v6 = v6<<(32-12) | v6>>12
  879. v3 += m[3] ^ cst9
  880. v3 += v7
  881. v15 ^= v3
  882. v15 = v15<<(32-16) | v15>>16
  883. v11 += v15
  884. v7 ^= v11
  885. v7 = v7<<(32-12) | v7>>12
  886. v2 += m[1] ^ cst12
  887. v2 += v6
  888. v14 ^= v2
  889. v14 = v14<<(32-8) | v14>>8
  890. v10 += v14
  891. v6 ^= v10
  892. v6 = v6<<(32-7) | v6>>7
  893. v3 += m[9] ^ cst3
  894. v3 += v7
  895. v15 ^= v3
  896. v15 = v15<<(32-8) | v15>>8
  897. v11 += v15
  898. v7 ^= v11
  899. v7 = v7<<(32-7) | v7>>7
  900. v1 += m[14] ^ cst7
  901. v1 += v5
  902. v13 ^= v1
  903. v13 = v13<<(32-8) | v13>>8
  904. v9 += v13
  905. v5 ^= v9
  906. v5 = v5<<(32-7) | v5>>7
  907. v0 += m[11] ^ cst13
  908. v0 += v4
  909. v12 ^= v0
  910. v12 = v12<<(32-8) | v12>>8
  911. v8 += v12
  912. v4 ^= v8
  913. v4 = v4<<(32-7) | v4>>7
  914. v0 += m[5] ^ cst0
  915. v0 += v5
  916. v15 ^= v0
  917. v15 = v15<<(32-16) | v15>>16
  918. v10 += v15
  919. v5 ^= v10
  920. v5 = v5<<(32-12) | v5>>12
  921. v1 += m[15] ^ cst4
  922. v1 += v6
  923. v12 ^= v1
  924. v12 = v12<<(32-16) | v12>>16
  925. v11 += v12
  926. v6 ^= v11
  927. v6 = v6<<(32-12) | v6>>12
  928. v2 += m[8] ^ cst6
  929. v2 += v7
  930. v13 ^= v2
  931. v13 = v13<<(32-16) | v13>>16
  932. v8 += v13
  933. v7 ^= v8
  934. v7 = v7<<(32-12) | v7>>12
  935. v3 += m[2] ^ cst10
  936. v3 += v4
  937. v14 ^= v3
  938. v14 = v14<<(32-16) | v14>>16
  939. v9 += v14
  940. v4 ^= v9
  941. v4 = v4<<(32-12) | v4>>12
  942. v2 += m[6] ^ cst8
  943. v2 += v7
  944. v13 ^= v2
  945. v13 = v13<<(32-8) | v13>>8
  946. v8 += v13
  947. v7 ^= v8
  948. v7 = v7<<(32-7) | v7>>7
  949. v3 += m[10] ^ cst2
  950. v3 += v4
  951. v14 ^= v3
  952. v14 = v14<<(32-8) | v14>>8
  953. v9 += v14
  954. v4 ^= v9
  955. v4 = v4<<(32-7) | v4>>7
  956. v1 += m[4] ^ cst15
  957. v1 += v6
  958. v12 ^= v1
  959. v12 = v12<<(32-8) | v12>>8
  960. v11 += v12
  961. v6 ^= v11
  962. v6 = v6<<(32-7) | v6>>7
  963. v0 += m[0] ^ cst5
  964. v0 += v5
  965. v15 ^= v0
  966. v15 = v15<<(32-8) | v15>>8
  967. v10 += v15
  968. v5 ^= v10
  969. v5 = v5<<(32-7) | v5>>7
  970. // Round 9.
  971. v0 += m[6] ^ cst15
  972. v0 += v4
  973. v12 ^= v0
  974. v12 = v12<<(32-16) | v12>>16
  975. v8 += v12
  976. v4 ^= v8
  977. v4 = v4<<(32-12) | v4>>12
  978. v1 += m[14] ^ cst9
  979. v1 += v5
  980. v13 ^= v1
  981. v13 = v13<<(32-16) | v13>>16
  982. v9 += v13
  983. v5 ^= v9
  984. v5 = v5<<(32-12) | v5>>12
  985. v2 += m[11] ^ cst3
  986. v2 += v6
  987. v14 ^= v2
  988. v14 = v14<<(32-16) | v14>>16
  989. v10 += v14
  990. v6 ^= v10
  991. v6 = v6<<(32-12) | v6>>12
  992. v3 += m[0] ^ cst8
  993. v3 += v7
  994. v15 ^= v3
  995. v15 = v15<<(32-16) | v15>>16
  996. v11 += v15
  997. v7 ^= v11
  998. v7 = v7<<(32-12) | v7>>12
  999. v2 += m[3] ^ cst11
  1000. v2 += v6
  1001. v14 ^= v2
  1002. v14 = v14<<(32-8) | v14>>8
  1003. v10 += v14
  1004. v6 ^= v10
  1005. v6 = v6<<(32-7) | v6>>7
  1006. v3 += m[8] ^ cst0
  1007. v3 += v7
  1008. v15 ^= v3
  1009. v15 = v15<<(32-8) | v15>>8
  1010. v11 += v15
  1011. v7 ^= v11
  1012. v7 = v7<<(32-7) | v7>>7
  1013. v1 += m[9] ^ cst14
  1014. v1 += v5
  1015. v13 ^= v1
  1016. v13 = v13<<(32-8) | v13>>8
  1017. v9 += v13
  1018. v5 ^= v9
  1019. v5 = v5<<(32-7) | v5>>7
  1020. v0 += m[15] ^ cst6
  1021. v0 += v4
  1022. v12 ^= v0
  1023. v12 = v12<<(32-8) | v12>>8
  1024. v8 += v12
  1025. v4 ^= v8
  1026. v4 = v4<<(32-7) | v4>>7
  1027. v0 += m[12] ^ cst2
  1028. v0 += v5
  1029. v15 ^= v0
  1030. v15 = v15<<(32-16) | v15>>16
  1031. v10 += v15
  1032. v5 ^= v10
  1033. v5 = v5<<(32-12) | v5>>12
  1034. v1 += m[13] ^ cst7
  1035. v1 += v6
  1036. v12 ^= v1
  1037. v12 = v12<<(32-16) | v12>>16
  1038. v11 += v12
  1039. v6 ^= v11
  1040. v6 = v6<<(32-12) | v6>>12
  1041. v2 += m[1] ^ cst4
  1042. v2 += v7
  1043. v13 ^= v2
  1044. v13 = v13<<(32-16) | v13>>16
  1045. v8 += v13
  1046. v7 ^= v8
  1047. v7 = v7<<(32-12) | v7>>12
  1048. v3 += m[10] ^ cst5
  1049. v3 += v4
  1050. v14 ^= v3
  1051. v14 = v14<<(32-16) | v14>>16
  1052. v9 += v14
  1053. v4 ^= v9
  1054. v4 = v4<<(32-12) | v4>>12
  1055. v2 += m[4] ^ cst1
  1056. v2 += v7
  1057. v13 ^= v2
  1058. v13 = v13<<(32-8) | v13>>8
  1059. v8 += v13
  1060. v7 ^= v8
  1061. v7 = v7<<(32-7) | v7>>7
  1062. v3 += m[5] ^ cst10
  1063. v3 += v4
  1064. v14 ^= v3
  1065. v14 = v14<<(32-8) | v14>>8
  1066. v9 += v14
  1067. v4 ^= v9
  1068. v4 = v4<<(32-7) | v4>>7
  1069. v1 += m[7] ^ cst13
  1070. v1 += v6
  1071. v12 ^= v1
  1072. v12 = v12<<(32-8) | v12>>8
  1073. v11 += v12
  1074. v6 ^= v11
  1075. v6 = v6<<(32-7) | v6>>7
  1076. v0 += m[2] ^ cst12
  1077. v0 += v5
  1078. v15 ^= v0
  1079. v15 = v15<<(32-8) | v15>>8
  1080. v10 += v15
  1081. v5 ^= v10
  1082. v5 = v5<<(32-7) | v5>>7
  1083. // Round 10.
  1084. v0 += m[10] ^ cst2
  1085. v0 += v4
  1086. v12 ^= v0
  1087. v12 = v12<<(32-16) | v12>>16
  1088. v8 += v12
  1089. v4 ^= v8
  1090. v4 = v4<<(32-12) | v4>>12
  1091. v1 += m[8] ^ cst4
  1092. v1 += v5
  1093. v13 ^= v1
  1094. v13 = v13<<(32-16) | v13>>16
  1095. v9 += v13
  1096. v5 ^= v9
  1097. v5 = v5<<(32-12) | v5>>12
  1098. v2 += m[7] ^ cst6
  1099. v2 += v6
  1100. v14 ^= v2
  1101. v14 = v14<<(32-16) | v14>>16
  1102. v10 += v14
  1103. v6 ^= v10
  1104. v6 = v6<<(32-12) | v6>>12
  1105. v3 += m[1] ^ cst5
  1106. v3 += v7
  1107. v15 ^= v3
  1108. v15 = v15<<(32-16) | v15>>16
  1109. v11 += v15
  1110. v7 ^= v11
  1111. v7 = v7<<(32-12) | v7>>12
  1112. v2 += m[6] ^ cst7
  1113. v2 += v6
  1114. v14 ^= v2
  1115. v14 = v14<<(32-8) | v14>>8
  1116. v10 += v14
  1117. v6 ^= v10
  1118. v6 = v6<<(32-7) | v6>>7
  1119. v3 += m[5] ^ cst1
  1120. v3 += v7
  1121. v15 ^= v3
  1122. v15 = v15<<(32-8) | v15>>8
  1123. v11 += v15
  1124. v7 ^= v11
  1125. v7 = v7<<(32-7) | v7>>7
  1126. v1 += m[4] ^ cst8
  1127. v1 += v5
  1128. v13 ^= v1
  1129. v13 = v13<<(32-8) | v13>>8
  1130. v9 += v13
  1131. v5 ^= v9
  1132. v5 = v5<<(32-7) | v5>>7
  1133. v0 += m[2] ^ cst10
  1134. v0 += v4
  1135. v12 ^= v0
  1136. v12 = v12<<(32-8) | v12>>8
  1137. v8 += v12
  1138. v4 ^= v8
  1139. v4 = v4<<(32-7) | v4>>7
  1140. v0 += m[15] ^ cst11
  1141. v0 += v5
  1142. v15 ^= v0
  1143. v15 = v15<<(32-16) | v15>>16
  1144. v10 += v15
  1145. v5 ^= v10
  1146. v5 = v5<<(32-12) | v5>>12
  1147. v1 += m[9] ^ cst14
  1148. v1 += v6
  1149. v12 ^= v1
  1150. v12 = v12<<(32-16) | v12>>16
  1151. v11 += v12
  1152. v6 ^= v11
  1153. v6 = v6<<(32-12) | v6>>12
  1154. v2 += m[3] ^ cst12
  1155. v2 += v7
  1156. v13 ^= v2
  1157. v13 = v13<<(32-16) | v13>>16
  1158. v8 += v13
  1159. v7 ^= v8
  1160. v7 = v7<<(32-12) | v7>>12
  1161. v3 += m[13] ^ cst0
  1162. v3 += v4
  1163. v14 ^= v3
  1164. v14 = v14<<(32-16) | v14>>16
  1165. v9 += v14
  1166. v4 ^= v9
  1167. v4 = v4<<(32-12) | v4>>12
  1168. v2 += m[12] ^ cst3
  1169. v2 += v7
  1170. v13 ^= v2
  1171. v13 = v13<<(32-8) | v13>>8
  1172. v8 += v13
  1173. v7 ^= v8
  1174. v7 = v7<<(32-7) | v7>>7
  1175. v3 += m[0] ^ cst13
  1176. v3 += v4
  1177. v14 ^= v3
  1178. v14 = v14<<(32-8) | v14>>8
  1179. v9 += v14
  1180. v4 ^= v9
  1181. v4 = v4<<(32-7) | v4>>7
  1182. v1 += m[14] ^ cst9
  1183. v1 += v6
  1184. v12 ^= v1
  1185. v12 = v12<<(32-8) | v12>>8
  1186. v11 += v12
  1187. v6 ^= v11
  1188. v6 = v6<<(32-7) | v6>>7
  1189. v0 += m[11] ^ cst15
  1190. v0 += v5
  1191. v15 ^= v0
  1192. v15 = v15<<(32-8) | v15>>8
  1193. v10 += v15
  1194. v5 ^= v10
  1195. v5 = v5<<(32-7) | v5>>7
  1196. // Round 11.
  1197. v0 += m[0] ^ cst1
  1198. v0 += v4
  1199. v12 ^= v0
  1200. v12 = v12<<(32-16) | v12>>16
  1201. v8 += v12
  1202. v4 ^= v8
  1203. v4 = v4<<(32-12) | v4>>12
  1204. v1 += m[2] ^ cst3
  1205. v1 += v5
  1206. v13 ^= v1
  1207. v13 = v13<<(32-16) | v13>>16
  1208. v9 += v13
  1209. v5 ^= v9
  1210. v5 = v5<<(32-12) | v5>>12
  1211. v2 += m[4] ^ cst5
  1212. v2 += v6
  1213. v14 ^= v2
  1214. v14 = v14<<(32-16) | v14>>16
  1215. v10 += v14
  1216. v6 ^= v10
  1217. v6 = v6<<(32-12) | v6>>12
  1218. v3 += m[6] ^ cst7
  1219. v3 += v7
  1220. v15 ^= v3
  1221. v15 = v15<<(32-16) | v15>>16
  1222. v11 += v15
  1223. v7 ^= v11
  1224. v7 = v7<<(32-12) | v7>>12
  1225. v2 += m[5] ^ cst4
  1226. v2 += v6
  1227. v14 ^= v2
  1228. v14 = v14<<(32-8) | v14>>8
  1229. v10 += v14
  1230. v6 ^= v10
  1231. v6 = v6<<(32-7) | v6>>7
  1232. v3 += m[7] ^ cst6
  1233. v3 += v7
  1234. v15 ^= v3
  1235. v15 = v15<<(32-8) | v15>>8
  1236. v11 += v15
  1237. v7 ^= v11
  1238. v7 = v7<<(32-7) | v7>>7
  1239. v1 += m[3] ^ cst2
  1240. v1 += v5
  1241. v13 ^= v1
  1242. v13 = v13<<(32-8) | v13>>8
  1243. v9 += v13
  1244. v5 ^= v9
  1245. v5 = v5<<(32-7) | v5>>7
  1246. v0 += m[1] ^ cst0
  1247. v0 += v4
  1248. v12 ^= v0
  1249. v12 = v12<<(32-8) | v12>>8
  1250. v8 += v12
  1251. v4 ^= v8
  1252. v4 = v4<<(32-7) | v4>>7
  1253. v0 += m[8] ^ cst9
  1254. v0 += v5
  1255. v15 ^= v0
  1256. v15 = v15<<(32-16) | v15>>16
  1257. v10 += v15
  1258. v5 ^= v10
  1259. v5 = v5<<(32-12) | v5>>12
  1260. v1 += m[10] ^ cst11
  1261. v1 += v6
  1262. v12 ^= v1
  1263. v12 = v12<<(32-16) | v12>>16
  1264. v11 += v12
  1265. v6 ^= v11
  1266. v6 = v6<<(32-12) | v6>>12
  1267. v2 += m[12] ^ cst13
  1268. v2 += v7
  1269. v13 ^= v2
  1270. v13 = v13<<(32-16) | v13>>16
  1271. v8 += v13
  1272. v7 ^= v8
  1273. v7 = v7<<(32-12) | v7>>12
  1274. v3 += m[14] ^ cst15
  1275. v3 += v4
  1276. v14 ^= v3
  1277. v14 = v14<<(32-16) | v14>>16
  1278. v9 += v14
  1279. v4 ^= v9
  1280. v4 = v4<<(32-12) | v4>>12
  1281. v2 += m[13] ^ cst12
  1282. v2 += v7
  1283. v13 ^= v2
  1284. v13 = v13<<(32-8) | v13>>8
  1285. v8 += v13
  1286. v7 ^= v8
  1287. v7 = v7<<(32-7) | v7>>7
  1288. v3 += m[15] ^ cst14
  1289. v3 += v4
  1290. v14 ^= v3
  1291. v14 = v14<<(32-8) | v14>>8
  1292. v9 += v14
  1293. v4 ^= v9
  1294. v4 = v4<<(32-7) | v4>>7
  1295. v1 += m[11] ^ cst10
  1296. v1 += v6
  1297. v12 ^= v1
  1298. v12 = v12<<(32-8) | v12>>8
  1299. v11 += v12
  1300. v6 ^= v11
  1301. v6 = v6<<(32-7) | v6>>7
  1302. v0 += m[9] ^ cst8
  1303. v0 += v5
  1304. v15 ^= v0
  1305. v15 = v15<<(32-8) | v15>>8
  1306. v10 += v15
  1307. v5 ^= v10
  1308. v5 = v5<<(32-7) | v5>>7
  1309. // Round 12.
  1310. v0 += m[14] ^ cst10
  1311. v0 += v4
  1312. v12 ^= v0
  1313. v12 = v12<<(32-16) | v12>>16
  1314. v8 += v12
  1315. v4 ^= v8
  1316. v4 = v4<<(32-12) | v4>>12
  1317. v1 += m[4] ^ cst8
  1318. v1 += v5
  1319. v13 ^= v1
  1320. v13 = v13<<(32-16) | v13>>16
  1321. v9 += v13
  1322. v5 ^= v9
  1323. v5 = v5<<(32-12) | v5>>12
  1324. v2 += m[9] ^ cst15
  1325. v2 += v6
  1326. v14 ^= v2
  1327. v14 = v14<<(32-16) | v14>>16
  1328. v10 += v14
  1329. v6 ^= v10
  1330. v6 = v6<<(32-12) | v6>>12
  1331. v3 += m[13] ^ cst6
  1332. v3 += v7
  1333. v15 ^= v3
  1334. v15 = v15<<(32-16) | v15>>16
  1335. v11 += v15
  1336. v7 ^= v11
  1337. v7 = v7<<(32-12) | v7>>12
  1338. v2 += m[15] ^ cst9
  1339. v2 += v6
  1340. v14 ^= v2
  1341. v14 = v14<<(32-8) | v14>>8
  1342. v10 += v14
  1343. v6 ^= v10
  1344. v6 = v6<<(32-7) | v6>>7
  1345. v3 += m[6] ^ cst13
  1346. v3 += v7
  1347. v15 ^= v3
  1348. v15 = v15<<(32-8) | v15>>8
  1349. v11 += v15
  1350. v7 ^= v11
  1351. v7 = v7<<(32-7) | v7>>7
  1352. v1 += m[8] ^ cst4
  1353. v1 += v5
  1354. v13 ^= v1
  1355. v13 = v13<<(32-8) | v13>>8
  1356. v9 += v13
  1357. v5 ^= v9
  1358. v5 = v5<<(32-7) | v5>>7
  1359. v0 += m[10] ^ cst14
  1360. v0 += v4
  1361. v12 ^= v0
  1362. v12 = v12<<(32-8) | v12>>8
  1363. v8 += v12
  1364. v4 ^= v8
  1365. v4 = v4<<(32-7) | v4>>7
  1366. v0 += m[1] ^ cst12
  1367. v0 += v5
  1368. v15 ^= v0
  1369. v15 = v15<<(32-16) | v15>>16
  1370. v10 += v15
  1371. v5 ^= v10
  1372. v5 = v5<<(32-12) | v5>>12
  1373. v1 += m[0] ^ cst2
  1374. v1 += v6
  1375. v12 ^= v1
  1376. v12 = v12<<(32-16) | v12>>16
  1377. v11 += v12
  1378. v6 ^= v11
  1379. v6 = v6<<(32-12) | v6>>12
  1380. v2 += m[11] ^ cst7
  1381. v2 += v7
  1382. v13 ^= v2
  1383. v13 = v13<<(32-16) | v13>>16
  1384. v8 += v13
  1385. v7 ^= v8
  1386. v7 = v7<<(32-12) | v7>>12
  1387. v3 += m[5] ^ cst3
  1388. v3 += v4
  1389. v14 ^= v3
  1390. v14 = v14<<(32-16) | v14>>16
  1391. v9 += v14
  1392. v4 ^= v9
  1393. v4 = v4<<(32-12) | v4>>12
  1394. v2 += m[7] ^ cst11
  1395. v2 += v7
  1396. v13 ^= v2
  1397. v13 = v13<<(32-8) | v13>>8
  1398. v8 += v13
  1399. v7 ^= v8
  1400. v7 = v7<<(32-7) | v7>>7
  1401. v3 += m[3] ^ cst5
  1402. v3 += v4
  1403. v14 ^= v3
  1404. v14 = v14<<(32-8) | v14>>8
  1405. v9 += v14
  1406. v4 ^= v9
  1407. v4 = v4<<(32-7) | v4>>7
  1408. v1 += m[2] ^ cst0
  1409. v1 += v6
  1410. v12 ^= v1
  1411. v12 = v12<<(32-8) | v12>>8
  1412. v11 += v12
  1413. v6 ^= v11
  1414. v6 = v6<<(32-7) | v6>>7
  1415. v0 += m[12] ^ cst1
  1416. v0 += v5
  1417. v15 ^= v0
  1418. v15 = v15<<(32-8) | v15>>8
  1419. v10 += v15
  1420. v5 ^= v10
  1421. v5 = v5<<(32-7) | v5>>7
  1422. // Round 13.
  1423. v0 += m[11] ^ cst8
  1424. v0 += v4
  1425. v12 ^= v0
  1426. v12 = v12<<(32-16) | v12>>16
  1427. v8 += v12
  1428. v4 ^= v8
  1429. v4 = v4<<(32-12) | v4>>12
  1430. v1 += m[12] ^ cst0
  1431. v1 += v5
  1432. v13 ^= v1
  1433. v13 = v13<<(32-16) | v13>>16
  1434. v9 += v13
  1435. v5 ^= v9
  1436. v5 = v5<<(32-12) | v5>>12
  1437. v2 += m[5] ^ cst2
  1438. v2 += v6
  1439. v14 ^= v2
  1440. v14 = v14<<(32-16) | v14>>16
  1441. v10 += v14
  1442. v6 ^= v10
  1443. v6 = v6<<(32-12) | v6>>12
  1444. v3 += m[15] ^ cst13
  1445. v3 += v7
  1446. v15 ^= v3
  1447. v15 = v15<<(32-16) | v15>>16
  1448. v11 += v15
  1449. v7 ^= v11
  1450. v7 = v7<<(32-12) | v7>>12
  1451. v2 += m[2] ^ cst5
  1452. v2 += v6
  1453. v14 ^= v2
  1454. v14 = v14<<(32-8) | v14>>8
  1455. v10 += v14
  1456. v6 ^= v10
  1457. v6 = v6<<(32-7) | v6>>7
  1458. v3 += m[13] ^ cst15
  1459. v3 += v7
  1460. v15 ^= v3
  1461. v15 = v15<<(32-8) | v15>>8
  1462. v11 += v15
  1463. v7 ^= v11
  1464. v7 = v7<<(32-7) | v7>>7
  1465. v1 += m[0] ^ cst12
  1466. v1 += v5
  1467. v13 ^= v1
  1468. v13 = v13<<(32-8) | v13>>8
  1469. v9 += v13
  1470. v5 ^= v9
  1471. v5 = v5<<(32-7) | v5>>7
  1472. v0 += m[8] ^ cst11
  1473. v0 += v4
  1474. v12 ^= v0
  1475. v12 = v12<<(32-8) | v12>>8
  1476. v8 += v12
  1477. v4 ^= v8
  1478. v4 = v4<<(32-7) | v4>>7
  1479. v0 += m[10] ^ cst14
  1480. v0 += v5
  1481. v15 ^= v0
  1482. v15 = v15<<(32-16) | v15>>16
  1483. v10 += v15
  1484. v5 ^= v10
  1485. v5 = v5<<(32-12) | v5>>12
  1486. v1 += m[3] ^ cst6
  1487. v1 += v6
  1488. v12 ^= v1
  1489. v12 = v12<<(32-16) | v12>>16
  1490. v11 += v12
  1491. v6 ^= v11
  1492. v6 = v6<<(32-12) | v6>>12
  1493. v2 += m[7] ^ cst1
  1494. v2 += v7
  1495. v13 ^= v2
  1496. v13 = v13<<(32-16) | v13>>16
  1497. v8 += v13
  1498. v7 ^= v8
  1499. v7 = v7<<(32-12) | v7>>12
  1500. v3 += m[9] ^ cst4
  1501. v3 += v4
  1502. v14 ^= v3
  1503. v14 = v14<<(32-16) | v14>>16
  1504. v9 += v14
  1505. v4 ^= v9
  1506. v4 = v4<<(32-12) | v4>>12
  1507. v2 += m[1] ^ cst7
  1508. v2 += v7
  1509. v13 ^= v2
  1510. v13 = v13<<(32-8) | v13>>8
  1511. v8 += v13
  1512. v7 ^= v8
  1513. v7 = v7<<(32-7) | v7>>7
  1514. v3 += m[4] ^ cst9
  1515. v3 += v4
  1516. v14 ^= v3
  1517. v14 = v14<<(32-8) | v14>>8
  1518. v9 += v14
  1519. v4 ^= v9
  1520. v4 = v4<<(32-7) | v4>>7
  1521. v1 += m[6] ^ cst3
  1522. v1 += v6
  1523. v12 ^= v1
  1524. v12 = v12<<(32-8) | v12>>8
  1525. v11 += v12
  1526. v6 ^= v11
  1527. v6 = v6<<(32-7) | v6>>7
  1528. v0 += m[14] ^ cst10
  1529. v0 += v5
  1530. v15 ^= v0
  1531. v15 = v15<<(32-8) | v15>>8
  1532. v10 += v15
  1533. v5 ^= v10
  1534. v5 = v5<<(32-7) | v5>>7
  1535. // Round 14.
  1536. v0 += m[7] ^ cst9
  1537. v0 += v4
  1538. v12 ^= v0
  1539. v12 = v12<<(32-16) | v12>>16
  1540. v8 += v12
  1541. v4 ^= v8
  1542. v4 = v4<<(32-12) | v4>>12
  1543. v1 += m[3] ^ cst1
  1544. v1 += v5
  1545. v13 ^= v1
  1546. v13 = v13<<(32-16) | v13>>16
  1547. v9 += v13
  1548. v5 ^= v9
  1549. v5 = v5<<(32-12) | v5>>12
  1550. v2 += m[13] ^ cst12
  1551. v2 += v6
  1552. v14 ^= v2
  1553. v14 = v14<<(32-16) | v14>>16
  1554. v10 += v14
  1555. v6 ^= v10
  1556. v6 = v6<<(32-12) | v6>>12
  1557. v3 += m[11] ^ cst14
  1558. v3 += v7
  1559. v15 ^= v3
  1560. v15 = v15<<(32-16) | v15>>16
  1561. v11 += v15
  1562. v7 ^= v11
  1563. v7 = v7<<(32-12) | v7>>12
  1564. v2 += m[12] ^ cst13
  1565. v2 += v6
  1566. v14 ^= v2
  1567. v14 = v14<<(32-8) | v14>>8
  1568. v10 += v14
  1569. v6 ^= v10
  1570. v6 = v6<<(32-7) | v6>>7
  1571. v3 += m[14] ^ cst11
  1572. v3 += v7
  1573. v15 ^= v3
  1574. v15 = v15<<(32-8) | v15>>8
  1575. v11 += v15
  1576. v7 ^= v11
  1577. v7 = v7<<(32-7) | v7>>7
  1578. v1 += m[1] ^ cst3
  1579. v1 += v5
  1580. v13 ^= v1
  1581. v13 = v13<<(32-8) | v13>>8
  1582. v9 += v13
  1583. v5 ^= v9
  1584. v5 = v5<<(32-7) | v5>>7
  1585. v0 += m[9] ^ cst7
  1586. v0 += v4
  1587. v12 ^= v0
  1588. v12 = v12<<(32-8) | v12>>8
  1589. v8 += v12
  1590. v4 ^= v8
  1591. v4 = v4<<(32-7) | v4>>7
  1592. v0 += m[2] ^ cst6
  1593. v0 += v5
  1594. v15 ^= v0
  1595. v15 = v15<<(32-16) | v15>>16
  1596. v10 += v15
  1597. v5 ^= v10
  1598. v5 = v5<<(32-12) | v5>>12
  1599. v1 += m[5] ^ cst10
  1600. v1 += v6
  1601. v12 ^= v1
  1602. v12 = v12<<(32-16) | v12>>16
  1603. v11 += v12
  1604. v6 ^= v11
  1605. v6 = v6<<(32-12) | v6>>12
  1606. v2 += m[4] ^ cst0
  1607. v2 += v7
  1608. v13 ^= v2
  1609. v13 = v13<<(32-16) | v13>>16
  1610. v8 += v13
  1611. v7 ^= v8
  1612. v7 = v7<<(32-12) | v7>>12
  1613. v3 += m[15] ^ cst8
  1614. v3 += v4
  1615. v14 ^= v3
  1616. v14 = v14<<(32-16) | v14>>16
  1617. v9 += v14
  1618. v4 ^= v9
  1619. v4 = v4<<(32-12) | v4>>12
  1620. v2 += m[0] ^ cst4
  1621. v2 += v7
  1622. v13 ^= v2
  1623. v13 = v13<<(32-8) | v13>>8
  1624. v8 += v13
  1625. v7 ^= v8
  1626. v7 = v7<<(32-7) | v7>>7
  1627. v3 += m[8] ^ cst15
  1628. v3 += v4
  1629. v14 ^= v3
  1630. v14 = v14<<(32-8) | v14>>8
  1631. v9 += v14
  1632. v4 ^= v9
  1633. v4 = v4<<(32-7) | v4>>7
  1634. v1 += m[10] ^ cst5
  1635. v1 += v6
  1636. v12 ^= v1
  1637. v12 = v12<<(32-8) | v12>>8
  1638. v11 += v12
  1639. v6 ^= v11
  1640. v6 = v6<<(32-7) | v6>>7
  1641. v0 += m[6] ^ cst2
  1642. v0 += v5
  1643. v15 ^= v0
  1644. v15 = v15<<(32-8) | v15>>8
  1645. v10 += v15
  1646. v5 ^= v10
  1647. v5 = v5<<(32-7) | v5>>7
  1648. h0 ^= v0 ^ v8 ^ s0
  1649. h1 ^= v1 ^ v9 ^ s1
  1650. h2 ^= v2 ^ v10 ^ s2
  1651. h3 ^= v3 ^ v11 ^ s3
  1652. h4 ^= v4 ^ v12 ^ s0
  1653. h5 ^= v5 ^ v13 ^ s1
  1654. h6 ^= v6 ^ v14 ^ s2
  1655. h7 ^= v7 ^ v15 ^ s3
  1656. p = p[BlockSize:]
  1657. }
  1658. d.h[0], d.h[1], d.h[2], d.h[3], d.h[4], d.h[5], d.h[6], d.h[7] = h0, h1, h2, h3, h4, h5, h6, h7
  1659. }