License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[linux-2.6-block.git] / drivers / staging / skein / threefish_block.c
CommitLineData
b2441318 1// SPDX-License-Identifier: GPL-2.0
e0a2d503 2#include <linux/bitops.h>
85dfd522 3#include "threefish_api.h"
449bb812 4
0109ce73
JE
5void threefish_encrypt_256(struct threefish_key *key_ctx, u64 *input,
6 u64 *output)
7{
8 u64 b0 = input[0], b1 = input[1],
9 b2 = input[2], b3 = input[3];
10 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
11 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
12 k4 = key_ctx->key[4];
13 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
14 t2 = key_ctx->tweak[2];
15
16 b1 += k1 + t0;
17 b0 += b1 + k0;
e0a2d503 18 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
19
20 b3 += k3;
21 b2 += b3 + k2 + t1;
e0a2d503 22 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
23
24 b0 += b3;
e0a2d503 25 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
26
27 b2 += b1;
e0a2d503 28 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
29
30 b0 += b1;
e0a2d503 31 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
32
33 b2 += b3;
e0a2d503 34 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
35
36 b0 += b3;
e0a2d503 37 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
38
39 b2 += b1;
e0a2d503 40 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
41
42 b1 += k2 + t1;
43 b0 += b1 + k1;
e0a2d503 44 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
45
46 b3 += k4 + 1;
47 b2 += b3 + k3 + t2;
e0a2d503 48 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
49
50 b0 += b3;
e0a2d503 51 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
52
53 b2 += b1;
e0a2d503 54 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
55
56 b0 += b1;
e0a2d503 57 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
58
59 b2 += b3;
e0a2d503 60 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
61
62 b0 += b3;
e0a2d503 63 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
64
65 b2 += b1;
e0a2d503 66 b1 = rol64(b1, 32) ^ b2;
0109ce73 67
0109ce73
JE
68 b1 += k3 + t2;
69 b0 += b1 + k2;
e0a2d503 70 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
71
72 b3 += k0 + 2;
73 b2 += b3 + k4 + t0;
e0a2d503 74 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
75
76 b0 += b3;
e0a2d503 77 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
78
79 b2 += b1;
e0a2d503 80 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
81
82 b0 += b1;
e0a2d503 83 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
84
85 b2 += b3;
e0a2d503 86 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
87
88 b0 += b3;
e0a2d503 89 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
90
91 b2 += b1;
e0a2d503 92 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
93
94 b1 += k4 + t0;
95 b0 += b1 + k3;
e0a2d503 96 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
97
98 b3 += k1 + 3;
99 b2 += b3 + k0 + t1;
e0a2d503 100 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
101
102 b0 += b3;
e0a2d503 103 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
104
105 b2 += b1;
e0a2d503 106 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
107
108 b0 += b1;
e0a2d503 109 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
110
111 b2 += b3;
e0a2d503 112 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
113
114 b0 += b3;
e0a2d503 115 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
116
117 b2 += b1;
e0a2d503 118 b1 = rol64(b1, 32) ^ b2;
0109ce73 119
0109ce73
JE
120 b1 += k0 + t1;
121 b0 += b1 + k4;
e0a2d503 122 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
123
124 b3 += k2 + 4;
125 b2 += b3 + k1 + t2;
e0a2d503 126 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
127
128 b0 += b3;
e0a2d503 129 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
130
131 b2 += b1;
e0a2d503 132 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
133
134 b0 += b1;
e0a2d503 135 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
136
137 b2 += b3;
e0a2d503 138 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
139
140 b0 += b3;
e0a2d503 141 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
142
143 b2 += b1;
e0a2d503 144 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
145
146 b1 += k1 + t2;
147 b0 += b1 + k0;
e0a2d503 148 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
149
150 b3 += k3 + 5;
151 b2 += b3 + k2 + t0;
e0a2d503 152 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
153
154 b0 += b3;
e0a2d503 155 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
156
157 b2 += b1;
e0a2d503 158 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
159
160 b0 += b1;
e0a2d503 161 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
162
163 b2 += b3;
e0a2d503 164 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
165
166 b0 += b3;
e0a2d503 167 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
168
169 b2 += b1;
e0a2d503 170 b1 = rol64(b1, 32) ^ b2;
0109ce73 171
0109ce73
JE
172 b1 += k2 + t0;
173 b0 += b1 + k1;
e0a2d503 174 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
175
176 b3 += k4 + 6;
177 b2 += b3 + k3 + t1;
e0a2d503 178 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
179
180 b0 += b3;
e0a2d503 181 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
182
183 b2 += b1;
e0a2d503 184 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
185
186 b0 += b1;
e0a2d503 187 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
188
189 b2 += b3;
e0a2d503 190 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
191
192 b0 += b3;
e0a2d503 193 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
194
195 b2 += b1;
e0a2d503 196 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
197
198 b1 += k3 + t1;
199 b0 += b1 + k2;
e0a2d503 200 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
201
202 b3 += k0 + 7;
203 b2 += b3 + k4 + t2;
e0a2d503 204 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
205
206 b0 += b3;
e0a2d503 207 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
208
209 b2 += b1;
e0a2d503 210 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
211
212 b0 += b1;
e0a2d503 213 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
214
215 b2 += b3;
e0a2d503 216 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
217
218 b0 += b3;
e0a2d503 219 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
220
221 b2 += b1;
e0a2d503 222 b1 = rol64(b1, 32) ^ b2;
0109ce73 223
0109ce73
JE
224 b1 += k4 + t2;
225 b0 += b1 + k3;
e0a2d503 226 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
227
228 b3 += k1 + 8;
229 b2 += b3 + k0 + t0;
e0a2d503 230 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
231
232 b0 += b3;
e0a2d503 233 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
234
235 b2 += b1;
e0a2d503 236 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
237
238 b0 += b1;
e0a2d503 239 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
240
241 b2 += b3;
e0a2d503 242 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
243
244 b0 += b3;
e0a2d503 245 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
246
247 b2 += b1;
e0a2d503 248 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
249
250 b1 += k0 + t0;
251 b0 += b1 + k4;
e0a2d503 252 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
253
254 b3 += k2 + 9;
255 b2 += b3 + k1 + t1;
e0a2d503 256 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
257
258 b0 += b3;
e0a2d503 259 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
260
261 b2 += b1;
e0a2d503 262 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
263
264 b0 += b1;
e0a2d503 265 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
266
267 b2 += b3;
e0a2d503 268 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
269
270 b0 += b3;
e0a2d503 271 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
272
273 b2 += b1;
e0a2d503 274 b1 = rol64(b1, 32) ^ b2;
0109ce73 275
0109ce73
JE
276 b1 += k1 + t1;
277 b0 += b1 + k0;
e0a2d503 278 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
279
280 b3 += k3 + 10;
281 b2 += b3 + k2 + t2;
e0a2d503 282 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
283
284 b0 += b3;
e0a2d503 285 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
286
287 b2 += b1;
e0a2d503 288 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
289
290 b0 += b1;
e0a2d503 291 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
292
293 b2 += b3;
e0a2d503 294 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
295
296 b0 += b3;
e0a2d503 297 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
298
299 b2 += b1;
e0a2d503 300 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
301
302 b1 += k2 + t2;
303 b0 += b1 + k1;
e0a2d503 304 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
305
306 b3 += k4 + 11;
307 b2 += b3 + k3 + t0;
e0a2d503 308 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
309
310 b0 += b3;
e0a2d503 311 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
312
313 b2 += b1;
e0a2d503 314 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
315
316 b0 += b1;
e0a2d503 317 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
318
319 b2 += b3;
e0a2d503 320 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
321
322 b0 += b3;
e0a2d503 323 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
324
325 b2 += b1;
e0a2d503 326 b1 = rol64(b1, 32) ^ b2;
0109ce73 327
0109ce73
JE
328 b1 += k3 + t0;
329 b0 += b1 + k2;
e0a2d503 330 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
331
332 b3 += k0 + 12;
333 b2 += b3 + k4 + t1;
e0a2d503 334 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
335
336 b0 += b3;
e0a2d503 337 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
338
339 b2 += b1;
e0a2d503 340 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
341
342 b0 += b1;
e0a2d503 343 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
344
345 b2 += b3;
e0a2d503 346 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
347
348 b0 += b3;
e0a2d503 349 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
350
351 b2 += b1;
e0a2d503 352 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
353
354 b1 += k4 + t1;
355 b0 += b1 + k3;
e0a2d503 356 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
357
358 b3 += k1 + 13;
359 b2 += b3 + k0 + t2;
e0a2d503 360 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
361
362 b0 += b3;
e0a2d503 363 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
364
365 b2 += b1;
e0a2d503 366 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
367
368 b0 += b1;
e0a2d503 369 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
370
371 b2 += b3;
e0a2d503 372 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
373
374 b0 += b3;
e0a2d503 375 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
376
377 b2 += b1;
e0a2d503 378 b1 = rol64(b1, 32) ^ b2;
0109ce73 379
0109ce73
JE
380 b1 += k0 + t2;
381 b0 += b1 + k4;
e0a2d503 382 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
383
384 b3 += k2 + 14;
385 b2 += b3 + k1 + t0;
e0a2d503 386 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
387
388 b0 += b3;
e0a2d503 389 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
390
391 b2 += b1;
e0a2d503 392 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
393
394 b0 += b1;
e0a2d503 395 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
396
397 b2 += b3;
e0a2d503 398 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
399
400 b0 += b3;
e0a2d503 401 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
402
403 b2 += b1;
e0a2d503 404 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
405
406 b1 += k1 + t0;
407 b0 += b1 + k0;
e0a2d503 408 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
409
410 b3 += k3 + 15;
411 b2 += b3 + k2 + t1;
e0a2d503 412 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
413
414 b0 += b3;
e0a2d503 415 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
416
417 b2 += b1;
e0a2d503 418 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
419
420 b0 += b1;
e0a2d503 421 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
422
423 b2 += b3;
e0a2d503 424 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
425
426 b0 += b3;
e0a2d503 427 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
428
429 b2 += b1;
e0a2d503 430 b1 = rol64(b1, 32) ^ b2;
0109ce73 431
0109ce73
JE
432 b1 += k2 + t1;
433 b0 += b1 + k1;
e0a2d503 434 b1 = rol64(b1, 14) ^ b0;
0109ce73
JE
435
436 b3 += k4 + 16;
437 b2 += b3 + k3 + t2;
e0a2d503 438 b3 = rol64(b3, 16) ^ b2;
0109ce73
JE
439
440 b0 += b3;
e0a2d503 441 b3 = rol64(b3, 52) ^ b0;
0109ce73
JE
442
443 b2 += b1;
e0a2d503 444 b1 = rol64(b1, 57) ^ b2;
0109ce73
JE
445
446 b0 += b1;
e0a2d503 447 b1 = rol64(b1, 23) ^ b0;
0109ce73
JE
448
449 b2 += b3;
e0a2d503 450 b3 = rol64(b3, 40) ^ b2;
0109ce73
JE
451
452 b0 += b3;
e0a2d503 453 b3 = rol64(b3, 5) ^ b0;
0109ce73
JE
454
455 b2 += b1;
e0a2d503 456 b1 = rol64(b1, 37) ^ b2;
0109ce73
JE
457
458 b1 += k3 + t2;
459 b0 += b1 + k2;
e0a2d503 460 b1 = rol64(b1, 25) ^ b0;
0109ce73
JE
461
462 b3 += k0 + 17;
463 b2 += b3 + k4 + t0;
e0a2d503 464 b3 = rol64(b3, 33) ^ b2;
0109ce73
JE
465
466 b0 += b3;
e0a2d503 467 b3 = rol64(b3, 46) ^ b0;
0109ce73
JE
468
469 b2 += b1;
e0a2d503 470 b1 = rol64(b1, 12) ^ b2;
0109ce73
JE
471
472 b0 += b1;
e0a2d503 473 b1 = rol64(b1, 58) ^ b0;
0109ce73
JE
474
475 b2 += b3;
e0a2d503 476 b3 = rol64(b3, 22) ^ b2;
0109ce73
JE
477
478 b0 += b3;
e0a2d503 479 b3 = rol64(b3, 32) ^ b0;
0109ce73
JE
480
481 b2 += b1;
e0a2d503 482 b1 = rol64(b1, 32) ^ b2;
0109ce73
JE
483
484 output[0] = b0 + k3;
485 output[1] = b1 + k4 + t0;
486 output[2] = b2 + k0 + t1;
487 output[3] = b3 + k1 + 18;
488}
489
490void threefish_decrypt_256(struct threefish_key *key_ctx, u64 *input,
491 u64 *output)
492{
493 u64 b0 = input[0], b1 = input[1],
494 b2 = input[2], b3 = input[3];
495 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
496 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
497 k4 = key_ctx->key[4];
498 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
499 t2 = key_ctx->tweak[2];
500
501 u64 tmp;
502
503 b0 -= k3;
504 b1 -= k4 + t0;
505 b2 -= k0 + t1;
506 b3 -= k1 + 18;
507 tmp = b3 ^ b0;
3733d3f9 508 b3 = ror64(tmp, 32);
0109ce73
JE
509 b0 -= b3;
510
511 tmp = b1 ^ b2;
3733d3f9 512 b1 = ror64(tmp, 32);
0109ce73
JE
513 b2 -= b1;
514
515 tmp = b1 ^ b0;
3733d3f9 516 b1 = ror64(tmp, 58);
0109ce73
JE
517 b0 -= b1;
518
519 tmp = b3 ^ b2;
3733d3f9 520 b3 = ror64(tmp, 22);
0109ce73
JE
521 b2 -= b3;
522
523 tmp = b3 ^ b0;
3733d3f9 524 b3 = ror64(tmp, 46);
0109ce73
JE
525 b0 -= b3;
526
527 tmp = b1 ^ b2;
3733d3f9 528 b1 = ror64(tmp, 12);
0109ce73
JE
529 b2 -= b1;
530
531 tmp = b1 ^ b0;
3733d3f9 532 b1 = ror64(tmp, 25);
0109ce73
JE
533 b0 -= b1 + k2;
534 b1 -= k3 + t2;
535
536 tmp = b3 ^ b2;
3733d3f9 537 b3 = ror64(tmp, 33);
0109ce73
JE
538 b2 -= b3 + k4 + t0;
539 b3 -= k0 + 17;
540
541 tmp = b3 ^ b0;
3733d3f9 542 b3 = ror64(tmp, 5);
0109ce73
JE
543 b0 -= b3;
544
545 tmp = b1 ^ b2;
3733d3f9 546 b1 = ror64(tmp, 37);
0109ce73
JE
547 b2 -= b1;
548
549 tmp = b1 ^ b0;
3733d3f9 550 b1 = ror64(tmp, 23);
0109ce73
JE
551 b0 -= b1;
552
553 tmp = b3 ^ b2;
3733d3f9 554 b3 = ror64(tmp, 40);
0109ce73
JE
555 b2 -= b3;
556
557 tmp = b3 ^ b0;
3733d3f9 558 b3 = ror64(tmp, 52);
0109ce73
JE
559 b0 -= b3;
560
561 tmp = b1 ^ b2;
3733d3f9 562 b1 = ror64(tmp, 57);
0109ce73
JE
563 b2 -= b1;
564
565 tmp = b1 ^ b0;
3733d3f9 566 b1 = ror64(tmp, 14);
0109ce73
JE
567 b0 -= b1 + k1;
568 b1 -= k2 + t1;
569
570 tmp = b3 ^ b2;
3733d3f9 571 b3 = ror64(tmp, 16);
0109ce73
JE
572 b2 -= b3 + k3 + t2;
573 b3 -= k4 + 16;
574
0109ce73 575 tmp = b3 ^ b0;
3733d3f9 576 b3 = ror64(tmp, 32);
0109ce73
JE
577 b0 -= b3;
578
579 tmp = b1 ^ b2;
3733d3f9 580 b1 = ror64(tmp, 32);
0109ce73
JE
581 b2 -= b1;
582
583 tmp = b1 ^ b0;
3733d3f9 584 b1 = ror64(tmp, 58);
0109ce73
JE
585 b0 -= b1;
586
587 tmp = b3 ^ b2;
3733d3f9 588 b3 = ror64(tmp, 22);
0109ce73
JE
589 b2 -= b3;
590
591 tmp = b3 ^ b0;
3733d3f9 592 b3 = ror64(tmp, 46);
0109ce73
JE
593 b0 -= b3;
594
595 tmp = b1 ^ b2;
3733d3f9 596 b1 = ror64(tmp, 12);
0109ce73
JE
597 b2 -= b1;
598
599 tmp = b1 ^ b0;
3733d3f9 600 b1 = ror64(tmp, 25);
0109ce73
JE
601 b0 -= b1 + k0;
602 b1 -= k1 + t0;
603
604 tmp = b3 ^ b2;
3733d3f9 605 b3 = ror64(tmp, 33);
0109ce73
JE
606 b2 -= b3 + k2 + t1;
607 b3 -= k3 + 15;
608
609 tmp = b3 ^ b0;
3733d3f9 610 b3 = ror64(tmp, 5);
0109ce73
JE
611 b0 -= b3;
612
613 tmp = b1 ^ b2;
3733d3f9 614 b1 = ror64(tmp, 37);
0109ce73
JE
615 b2 -= b1;
616
617 tmp = b1 ^ b0;
3733d3f9 618 b1 = ror64(tmp, 23);
0109ce73
JE
619 b0 -= b1;
620
621 tmp = b3 ^ b2;
3733d3f9 622 b3 = ror64(tmp, 40);
0109ce73
JE
623 b2 -= b3;
624
625 tmp = b3 ^ b0;
3733d3f9 626 b3 = ror64(tmp, 52);
0109ce73
JE
627 b0 -= b3;
628
629 tmp = b1 ^ b2;
3733d3f9 630 b1 = ror64(tmp, 57);
0109ce73
JE
631 b2 -= b1;
632
633 tmp = b1 ^ b0;
3733d3f9 634 b1 = ror64(tmp, 14);
0109ce73
JE
635 b0 -= b1 + k4;
636 b1 -= k0 + t2;
637
638 tmp = b3 ^ b2;
3733d3f9 639 b3 = ror64(tmp, 16);
0109ce73
JE
640 b2 -= b3 + k1 + t0;
641 b3 -= k2 + 14;
642
0109ce73 643 tmp = b3 ^ b0;
3733d3f9 644 b3 = ror64(tmp, 32);
0109ce73
JE
645 b0 -= b3;
646
647 tmp = b1 ^ b2;
3733d3f9 648 b1 = ror64(tmp, 32);
0109ce73
JE
649 b2 -= b1;
650
651 tmp = b1 ^ b0;
3733d3f9 652 b1 = ror64(tmp, 58);
0109ce73
JE
653 b0 -= b1;
654
655 tmp = b3 ^ b2;
3733d3f9 656 b3 = ror64(tmp, 22);
0109ce73
JE
657 b2 -= b3;
658
659 tmp = b3 ^ b0;
3733d3f9 660 b3 = ror64(tmp, 46);
0109ce73
JE
661 b0 -= b3;
662
663 tmp = b1 ^ b2;
3733d3f9 664 b1 = ror64(tmp, 12);
0109ce73
JE
665 b2 -= b1;
666
667 tmp = b1 ^ b0;
3733d3f9 668 b1 = ror64(tmp, 25);
0109ce73
JE
669 b0 -= b1 + k3;
670 b1 -= k4 + t1;
671
672 tmp = b3 ^ b2;
3733d3f9 673 b3 = ror64(tmp, 33);
0109ce73
JE
674 b2 -= b3 + k0 + t2;
675 b3 -= k1 + 13;
676
677 tmp = b3 ^ b0;
3733d3f9 678 b3 = ror64(tmp, 5);
0109ce73
JE
679 b0 -= b3;
680
681 tmp = b1 ^ b2;
3733d3f9 682 b1 = ror64(tmp, 37);
0109ce73
JE
683 b2 -= b1;
684
685 tmp = b1 ^ b0;
3733d3f9 686 b1 = ror64(tmp, 23);
0109ce73
JE
687 b0 -= b1;
688
689 tmp = b3 ^ b2;
3733d3f9 690 b3 = ror64(tmp, 40);
0109ce73
JE
691 b2 -= b3;
692
693 tmp = b3 ^ b0;
3733d3f9 694 b3 = ror64(tmp, 52);
0109ce73
JE
695 b0 -= b3;
696
697 tmp = b1 ^ b2;
3733d3f9 698 b1 = ror64(tmp, 57);
0109ce73
JE
699 b2 -= b1;
700
701 tmp = b1 ^ b0;
3733d3f9 702 b1 = ror64(tmp, 14);
0109ce73
JE
703 b0 -= b1 + k2;
704 b1 -= k3 + t0;
705
706 tmp = b3 ^ b2;
3733d3f9 707 b3 = ror64(tmp, 16);
0109ce73
JE
708 b2 -= b3 + k4 + t1;
709 b3 -= k0 + 12;
710
0109ce73 711 tmp = b3 ^ b0;
3733d3f9 712 b3 = ror64(tmp, 32);
0109ce73
JE
713 b0 -= b3;
714
715 tmp = b1 ^ b2;
3733d3f9 716 b1 = ror64(tmp, 32);
0109ce73
JE
717 b2 -= b1;
718
719 tmp = b1 ^ b0;
3733d3f9 720 b1 = ror64(tmp, 58);
0109ce73
JE
721 b0 -= b1;
722
723 tmp = b3 ^ b2;
3733d3f9 724 b3 = ror64(tmp, 22);
0109ce73
JE
725 b2 -= b3;
726
727 tmp = b3 ^ b0;
3733d3f9 728 b3 = ror64(tmp, 46);
0109ce73
JE
729 b0 -= b3;
730
731 tmp = b1 ^ b2;
3733d3f9 732 b1 = ror64(tmp, 12);
0109ce73
JE
733 b2 -= b1;
734
735 tmp = b1 ^ b0;
3733d3f9 736 b1 = ror64(tmp, 25);
0109ce73
JE
737 b0 -= b1 + k1;
738 b1 -= k2 + t2;
739
740 tmp = b3 ^ b2;
3733d3f9 741 b3 = ror64(tmp, 33);
0109ce73
JE
742 b2 -= b3 + k3 + t0;
743 b3 -= k4 + 11;
744
745 tmp = b3 ^ b0;
3733d3f9 746 b3 = ror64(tmp, 5);
0109ce73
JE
747 b0 -= b3;
748
749 tmp = b1 ^ b2;
3733d3f9 750 b1 = ror64(tmp, 37);
0109ce73
JE
751 b2 -= b1;
752
753 tmp = b1 ^ b0;
3733d3f9 754 b1 = ror64(tmp, 23);
0109ce73
JE
755 b0 -= b1;
756
757 tmp = b3 ^ b2;
3733d3f9 758 b3 = ror64(tmp, 40);
0109ce73
JE
759 b2 -= b3;
760
761 tmp = b3 ^ b0;
3733d3f9 762 b3 = ror64(tmp, 52);
0109ce73
JE
763 b0 -= b3;
764
765 tmp = b1 ^ b2;
3733d3f9 766 b1 = ror64(tmp, 57);
0109ce73
JE
767 b2 -= b1;
768
769 tmp = b1 ^ b0;
3733d3f9 770 b1 = ror64(tmp, 14);
0109ce73
JE
771 b0 -= b1 + k0;
772 b1 -= k1 + t1;
773
774 tmp = b3 ^ b2;
3733d3f9 775 b3 = ror64(tmp, 16);
0109ce73
JE
776 b2 -= b3 + k2 + t2;
777 b3 -= k3 + 10;
778
0109ce73 779 tmp = b3 ^ b0;
3733d3f9 780 b3 = ror64(tmp, 32);
0109ce73
JE
781 b0 -= b3;
782
783 tmp = b1 ^ b2;
3733d3f9 784 b1 = ror64(tmp, 32);
0109ce73
JE
785 b2 -= b1;
786
787 tmp = b1 ^ b0;
3733d3f9 788 b1 = ror64(tmp, 58);
0109ce73
JE
789 b0 -= b1;
790
791 tmp = b3 ^ b2;
3733d3f9 792 b3 = ror64(tmp, 22);
0109ce73
JE
793 b2 -= b3;
794
795 tmp = b3 ^ b0;
3733d3f9 796 b3 = ror64(tmp, 46);
0109ce73
JE
797 b0 -= b3;
798
799 tmp = b1 ^ b2;
3733d3f9 800 b1 = ror64(tmp, 12);
0109ce73
JE
801 b2 -= b1;
802
803 tmp = b1 ^ b0;
3733d3f9 804 b1 = ror64(tmp, 25);
0109ce73
JE
805 b0 -= b1 + k4;
806 b1 -= k0 + t0;
807
808 tmp = b3 ^ b2;
3733d3f9 809 b3 = ror64(tmp, 33);
0109ce73
JE
810 b2 -= b3 + k1 + t1;
811 b3 -= k2 + 9;
812
813 tmp = b3 ^ b0;
3733d3f9 814 b3 = ror64(tmp, 5);
0109ce73
JE
815 b0 -= b3;
816
817 tmp = b1 ^ b2;
3733d3f9 818 b1 = ror64(tmp, 37);
0109ce73
JE
819 b2 -= b1;
820
821 tmp = b1 ^ b0;
3733d3f9 822 b1 = ror64(tmp, 23);
0109ce73
JE
823 b0 -= b1;
824
825 tmp = b3 ^ b2;
3733d3f9 826 b3 = ror64(tmp, 40);
0109ce73
JE
827 b2 -= b3;
828
829 tmp = b3 ^ b0;
3733d3f9 830 b3 = ror64(tmp, 52);
0109ce73
JE
831 b0 -= b3;
832
833 tmp = b1 ^ b2;
3733d3f9 834 b1 = ror64(tmp, 57);
0109ce73
JE
835 b2 -= b1;
836
837 tmp = b1 ^ b0;
3733d3f9 838 b1 = ror64(tmp, 14);
0109ce73
JE
839 b0 -= b1 + k3;
840 b1 -= k4 + t2;
841
842 tmp = b3 ^ b2;
3733d3f9 843 b3 = ror64(tmp, 16);
0109ce73
JE
844 b2 -= b3 + k0 + t0;
845 b3 -= k1 + 8;
846
0109ce73 847 tmp = b3 ^ b0;
3733d3f9 848 b3 = ror64(tmp, 32);
0109ce73
JE
849 b0 -= b3;
850
851 tmp = b1 ^ b2;
3733d3f9 852 b1 = ror64(tmp, 32);
0109ce73
JE
853 b2 -= b1;
854
855 tmp = b1 ^ b0;
3733d3f9 856 b1 = ror64(tmp, 58);
0109ce73
JE
857 b0 -= b1;
858
859 tmp = b3 ^ b2;
3733d3f9 860 b3 = ror64(tmp, 22);
0109ce73
JE
861 b2 -= b3;
862
863 tmp = b3 ^ b0;
3733d3f9 864 b3 = ror64(tmp, 46);
0109ce73
JE
865 b0 -= b3;
866
867 tmp = b1 ^ b2;
3733d3f9 868 b1 = ror64(tmp, 12);
0109ce73
JE
869 b2 -= b1;
870
871 tmp = b1 ^ b0;
3733d3f9 872 b1 = ror64(tmp, 25);
0109ce73
JE
873 b0 -= b1 + k2;
874 b1 -= k3 + t1;
875
876 tmp = b3 ^ b2;
3733d3f9 877 b3 = ror64(tmp, 33);
0109ce73
JE
878 b2 -= b3 + k4 + t2;
879 b3 -= k0 + 7;
880
881 tmp = b3 ^ b0;
3733d3f9 882 b3 = ror64(tmp, 5);
0109ce73
JE
883 b0 -= b3;
884
885 tmp = b1 ^ b2;
3733d3f9 886 b1 = ror64(tmp, 37);
0109ce73
JE
887 b2 -= b1;
888
889 tmp = b1 ^ b0;
3733d3f9 890 b1 = ror64(tmp, 23);
0109ce73
JE
891 b0 -= b1;
892
893 tmp = b3 ^ b2;
3733d3f9 894 b3 = ror64(tmp, 40);
0109ce73
JE
895 b2 -= b3;
896
897 tmp = b3 ^ b0;
3733d3f9 898 b3 = ror64(tmp, 52);
0109ce73
JE
899 b0 -= b3;
900
901 tmp = b1 ^ b2;
3733d3f9 902 b1 = ror64(tmp, 57);
0109ce73
JE
903 b2 -= b1;
904
905 tmp = b1 ^ b0;
3733d3f9 906 b1 = ror64(tmp, 14);
0109ce73
JE
907 b0 -= b1 + k1;
908 b1 -= k2 + t0;
909
910 tmp = b3 ^ b2;
3733d3f9 911 b3 = ror64(tmp, 16);
0109ce73
JE
912 b2 -= b3 + k3 + t1;
913 b3 -= k4 + 6;
914
0109ce73 915 tmp = b3 ^ b0;
3733d3f9 916 b3 = ror64(tmp, 32);
0109ce73
JE
917 b0 -= b3;
918
919 tmp = b1 ^ b2;
3733d3f9 920 b1 = ror64(tmp, 32);
0109ce73
JE
921 b2 -= b1;
922
923 tmp = b1 ^ b0;
3733d3f9 924 b1 = ror64(tmp, 58);
0109ce73
JE
925 b0 -= b1;
926
927 tmp = b3 ^ b2;
3733d3f9 928 b3 = ror64(tmp, 22);
0109ce73
JE
929 b2 -= b3;
930
931 tmp = b3 ^ b0;
3733d3f9 932 b3 = ror64(tmp, 46);
0109ce73
JE
933 b0 -= b3;
934
935 tmp = b1 ^ b2;
3733d3f9 936 b1 = ror64(tmp, 12);
0109ce73
JE
937 b2 -= b1;
938
939 tmp = b1 ^ b0;
3733d3f9 940 b1 = ror64(tmp, 25);
0109ce73
JE
941 b0 -= b1 + k0;
942 b1 -= k1 + t2;
943
944 tmp = b3 ^ b2;
3733d3f9 945 b3 = ror64(tmp, 33);
0109ce73
JE
946 b2 -= b3 + k2 + t0;
947 b3 -= k3 + 5;
948
949 tmp = b3 ^ b0;
3733d3f9 950 b3 = ror64(tmp, 5);
0109ce73
JE
951 b0 -= b3;
952
953 tmp = b1 ^ b2;
3733d3f9 954 b1 = ror64(tmp, 37);
0109ce73
JE
955 b2 -= b1;
956
957 tmp = b1 ^ b0;
3733d3f9 958 b1 = ror64(tmp, 23);
0109ce73
JE
959 b0 -= b1;
960
961 tmp = b3 ^ b2;
3733d3f9 962 b3 = ror64(tmp, 40);
0109ce73
JE
963 b2 -= b3;
964
965 tmp = b3 ^ b0;
3733d3f9 966 b3 = ror64(tmp, 52);
0109ce73
JE
967 b0 -= b3;
968
969 tmp = b1 ^ b2;
3733d3f9 970 b1 = ror64(tmp, 57);
0109ce73
JE
971 b2 -= b1;
972
973 tmp = b1 ^ b0;
3733d3f9 974 b1 = ror64(tmp, 14);
0109ce73
JE
975 b0 -= b1 + k4;
976 b1 -= k0 + t1;
977
978 tmp = b3 ^ b2;
3733d3f9 979 b3 = ror64(tmp, 16);
0109ce73
JE
980 b2 -= b3 + k1 + t2;
981 b3 -= k2 + 4;
982
0109ce73 983 tmp = b3 ^ b0;
3733d3f9 984 b3 = ror64(tmp, 32);
0109ce73
JE
985 b0 -= b3;
986
987 tmp = b1 ^ b2;
3733d3f9 988 b1 = ror64(tmp, 32);
0109ce73
JE
989 b2 -= b1;
990
991 tmp = b1 ^ b0;
3733d3f9 992 b1 = ror64(tmp, 58);
0109ce73
JE
993 b0 -= b1;
994
995 tmp = b3 ^ b2;
3733d3f9 996 b3 = ror64(tmp, 22);
0109ce73
JE
997 b2 -= b3;
998
999 tmp = b3 ^ b0;
3733d3f9 1000 b3 = ror64(tmp, 46);
0109ce73
JE
1001 b0 -= b3;
1002
1003 tmp = b1 ^ b2;
3733d3f9 1004 b1 = ror64(tmp, 12);
0109ce73
JE
1005 b2 -= b1;
1006
1007 tmp = b1 ^ b0;
3733d3f9 1008 b1 = ror64(tmp, 25);
0109ce73
JE
1009 b0 -= b1 + k3;
1010 b1 -= k4 + t0;
1011
1012 tmp = b3 ^ b2;
3733d3f9 1013 b3 = ror64(tmp, 33);
0109ce73
JE
1014 b2 -= b3 + k0 + t1;
1015 b3 -= k1 + 3;
1016
1017 tmp = b3 ^ b0;
3733d3f9 1018 b3 = ror64(tmp, 5);
0109ce73
JE
1019 b0 -= b3;
1020
1021 tmp = b1 ^ b2;
3733d3f9 1022 b1 = ror64(tmp, 37);
0109ce73
JE
1023 b2 -= b1;
1024
1025 tmp = b1 ^ b0;
3733d3f9 1026 b1 = ror64(tmp, 23);
0109ce73
JE
1027 b0 -= b1;
1028
1029 tmp = b3 ^ b2;
3733d3f9 1030 b3 = ror64(tmp, 40);
0109ce73
JE
1031 b2 -= b3;
1032
1033 tmp = b3 ^ b0;
3733d3f9 1034 b3 = ror64(tmp, 52);
0109ce73
JE
1035 b0 -= b3;
1036
1037 tmp = b1 ^ b2;
3733d3f9 1038 b1 = ror64(tmp, 57);
0109ce73
JE
1039 b2 -= b1;
1040
1041 tmp = b1 ^ b0;
3733d3f9 1042 b1 = ror64(tmp, 14);
0109ce73
JE
1043 b0 -= b1 + k2;
1044 b1 -= k3 + t2;
1045
1046 tmp = b3 ^ b2;
3733d3f9 1047 b3 = ror64(tmp, 16);
0109ce73
JE
1048 b2 -= b3 + k4 + t0;
1049 b3 -= k0 + 2;
1050
0109ce73 1051 tmp = b3 ^ b0;
3733d3f9 1052 b3 = ror64(tmp, 32);
0109ce73
JE
1053 b0 -= b3;
1054
1055 tmp = b1 ^ b2;
3733d3f9 1056 b1 = ror64(tmp, 32);
0109ce73
JE
1057 b2 -= b1;
1058
1059 tmp = b1 ^ b0;
3733d3f9 1060 b1 = ror64(tmp, 58);
0109ce73
JE
1061 b0 -= b1;
1062
1063 tmp = b3 ^ b2;
3733d3f9 1064 b3 = ror64(tmp, 22);
0109ce73
JE
1065 b2 -= b3;
1066
1067 tmp = b3 ^ b0;
3733d3f9 1068 b3 = ror64(tmp, 46);
0109ce73
JE
1069 b0 -= b3;
1070
1071 tmp = b1 ^ b2;
3733d3f9 1072 b1 = ror64(tmp, 12);
0109ce73
JE
1073 b2 -= b1;
1074
1075 tmp = b1 ^ b0;
3733d3f9 1076 b1 = ror64(tmp, 25);
0109ce73
JE
1077 b0 -= b1 + k1;
1078 b1 -= k2 + t1;
1079
1080 tmp = b3 ^ b2;
3733d3f9 1081 b3 = ror64(tmp, 33);
0109ce73
JE
1082 b2 -= b3 + k3 + t2;
1083 b3 -= k4 + 1;
1084
1085 tmp = b3 ^ b0;
3733d3f9 1086 b3 = ror64(tmp, 5);
0109ce73
JE
1087 b0 -= b3;
1088
1089 tmp = b1 ^ b2;
3733d3f9 1090 b1 = ror64(tmp, 37);
0109ce73
JE
1091 b2 -= b1;
1092
1093 tmp = b1 ^ b0;
3733d3f9 1094 b1 = ror64(tmp, 23);
0109ce73
JE
1095 b0 -= b1;
1096
1097 tmp = b3 ^ b2;
3733d3f9 1098 b3 = ror64(tmp, 40);
0109ce73
JE
1099 b2 -= b3;
1100
1101 tmp = b3 ^ b0;
3733d3f9 1102 b3 = ror64(tmp, 52);
0109ce73
JE
1103 b0 -= b3;
1104
1105 tmp = b1 ^ b2;
3733d3f9 1106 b1 = ror64(tmp, 57);
0109ce73
JE
1107 b2 -= b1;
1108
1109 tmp = b1 ^ b0;
3733d3f9 1110 b1 = ror64(tmp, 14);
0109ce73
JE
1111 b0 -= b1 + k0;
1112 b1 -= k1 + t0;
1113
1114 tmp = b3 ^ b2;
3733d3f9 1115 b3 = ror64(tmp, 16);
0109ce73
JE
1116 b2 -= b3 + k2 + t1;
1117 b3 -= k3;
1118
1119 output[0] = b0;
1120 output[1] = b1;
1121 output[2] = b2;
1122 output[3] = b3;
1123}
1124
1125void threefish_encrypt_512(struct threefish_key *key_ctx, u64 *input,
1126 u64 *output)
1127{
1128 u64 b0 = input[0], b1 = input[1],
1129 b2 = input[2], b3 = input[3],
1130 b4 = input[4], b5 = input[5],
1131 b6 = input[6], b7 = input[7];
1132 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
1133 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
1134 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
1135 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
1136 k8 = key_ctx->key[8];
1137 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
1138 t2 = key_ctx->tweak[2];
1139
1140 b1 += k1;
1141 b0 += b1 + k0;
e0a2d503 1142 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1143
1144 b3 += k3;
1145 b2 += b3 + k2;
e0a2d503 1146 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1147
1148 b5 += k5 + t0;
1149 b4 += b5 + k4;
e0a2d503 1150 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1151
1152 b7 += k7;
1153 b6 += b7 + k6 + t1;
e0a2d503 1154 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1155
1156 b2 += b1;
e0a2d503 1157 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1158
1159 b4 += b7;
e0a2d503 1160 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1161
1162 b6 += b5;
e0a2d503 1163 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1164
1165 b0 += b3;
e0a2d503 1166 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1167
1168 b4 += b1;
e0a2d503 1169 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
1170
1171 b6 += b3;
e0a2d503 1172 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
1173
1174 b0 += b5;
e0a2d503 1175 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
1176
1177 b2 += b7;
e0a2d503 1178 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
1179
1180 b6 += b1;
e0a2d503 1181 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
1182
1183 b0 += b7;
e0a2d503 1184 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
1185
1186 b2 += b5;
e0a2d503 1187 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
1188
1189 b4 += b3;
e0a2d503 1190 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
1191
1192 b1 += k2;
1193 b0 += b1 + k1;
e0a2d503 1194 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
1195
1196 b3 += k4;
1197 b2 += b3 + k3;
e0a2d503 1198 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
1199
1200 b5 += k6 + t1;
1201 b4 += b5 + k5;
e0a2d503 1202 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
1203
1204 b7 += k8 + 1;
1205 b6 += b7 + k7 + t2;
e0a2d503 1206 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
1207
1208 b2 += b1;
e0a2d503 1209 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
1210
1211 b4 += b7;
e0a2d503 1212 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
1213
1214 b6 += b5;
e0a2d503 1215 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
1216
1217 b0 += b3;
e0a2d503 1218 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
1219
1220 b4 += b1;
e0a2d503 1221 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
1222
1223 b6 += b3;
e0a2d503 1224 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
1225
1226 b0 += b5;
e0a2d503 1227 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
1228
1229 b2 += b7;
e0a2d503 1230 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
1231
1232 b6 += b1;
e0a2d503 1233 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
1234
1235 b0 += b7;
e0a2d503 1236 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
1237
1238 b2 += b5;
e0a2d503 1239 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
1240
1241 b4 += b3;
e0a2d503 1242 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
1243
1244 b1 += k3;
1245 b0 += b1 + k2;
e0a2d503 1246 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1247
1248 b3 += k5;
1249 b2 += b3 + k4;
e0a2d503 1250 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1251
1252 b5 += k7 + t2;
1253 b4 += b5 + k6;
e0a2d503 1254 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1255
1256 b7 += k0 + 2;
1257 b6 += b7 + k8 + t0;
e0a2d503 1258 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1259
1260 b2 += b1;
e0a2d503 1261 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1262
1263 b4 += b7;
e0a2d503 1264 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1265
1266 b6 += b5;
e0a2d503 1267 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1268
1269 b0 += b3;
e0a2d503 1270 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1271
1272 b4 += b1;
e0a2d503 1273 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
1274
1275 b6 += b3;
e0a2d503 1276 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
1277
1278 b0 += b5;
e0a2d503 1279 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
1280
1281 b2 += b7;
e0a2d503 1282 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
1283
1284 b6 += b1;
e0a2d503 1285 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
1286
1287 b0 += b7;
e0a2d503 1288 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
1289
1290 b2 += b5;
e0a2d503 1291 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
1292
1293 b4 += b3;
e0a2d503 1294 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
1295
1296 b1 += k4;
1297 b0 += b1 + k3;
e0a2d503 1298 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
1299
1300 b3 += k6;
1301 b2 += b3 + k5;
e0a2d503 1302 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
1303
1304 b5 += k8 + t0;
1305 b4 += b5 + k7;
e0a2d503 1306 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
1307
1308 b7 += k1 + 3;
1309 b6 += b7 + k0 + t1;
e0a2d503 1310 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
1311
1312 b2 += b1;
e0a2d503 1313 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
1314
1315 b4 += b7;
e0a2d503 1316 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
1317
1318 b6 += b5;
e0a2d503 1319 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
1320
1321 b0 += b3;
e0a2d503 1322 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
1323
1324 b4 += b1;
e0a2d503 1325 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
1326
1327 b6 += b3;
e0a2d503 1328 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
1329
1330 b0 += b5;
e0a2d503 1331 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
1332
1333 b2 += b7;
e0a2d503 1334 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
1335
1336 b6 += b1;
e0a2d503 1337 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
1338
1339 b0 += b7;
e0a2d503 1340 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
1341
1342 b2 += b5;
e0a2d503 1343 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
1344
1345 b4 += b3;
e0a2d503 1346 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
1347
1348 b1 += k5;
1349 b0 += b1 + k4;
e0a2d503 1350 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1351
1352 b3 += k7;
1353 b2 += b3 + k6;
e0a2d503 1354 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1355
1356 b5 += k0 + t1;
1357 b4 += b5 + k8;
e0a2d503 1358 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1359
1360 b7 += k2 + 4;
1361 b6 += b7 + k1 + t2;
e0a2d503 1362 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1363
1364 b2 += b1;
e0a2d503 1365 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1366
1367 b4 += b7;
e0a2d503 1368 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1369
1370 b6 += b5;
e0a2d503 1371 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1372
1373 b0 += b3;
e0a2d503 1374 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1375
1376 b4 += b1;
e0a2d503 1377 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
1378
1379 b6 += b3;
e0a2d503 1380 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
1381
1382 b0 += b5;
e0a2d503 1383 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
1384
1385 b2 += b7;
e0a2d503 1386 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
1387
1388 b6 += b1;
e0a2d503 1389 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
1390
1391 b0 += b7;
e0a2d503 1392 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
1393
1394 b2 += b5;
e0a2d503 1395 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
1396
1397 b4 += b3;
e0a2d503 1398 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
1399
1400 b1 += k6;
1401 b0 += b1 + k5;
e0a2d503 1402 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
1403
1404 b3 += k8;
1405 b2 += b3 + k7;
e0a2d503 1406 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
1407
1408 b5 += k1 + t2;
1409 b4 += b5 + k0;
e0a2d503 1410 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
1411
1412 b7 += k3 + 5;
1413 b6 += b7 + k2 + t0;
e0a2d503 1414 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
1415
1416 b2 += b1;
e0a2d503 1417 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
1418
1419 b4 += b7;
e0a2d503 1420 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
1421
1422 b6 += b5;
e0a2d503 1423 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
1424
1425 b0 += b3;
e0a2d503 1426 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
1427
1428 b4 += b1;
e0a2d503 1429 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
1430
1431 b6 += b3;
e0a2d503 1432 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
1433
1434 b0 += b5;
e0a2d503 1435 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
1436
1437 b2 += b7;
e0a2d503 1438 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
1439
1440 b6 += b1;
e0a2d503 1441 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
1442
1443 b0 += b7;
e0a2d503 1444 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
1445
1446 b2 += b5;
e0a2d503 1447 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
1448
1449 b4 += b3;
e0a2d503 1450 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
1451
1452 b1 += k7;
1453 b0 += b1 + k6;
e0a2d503 1454 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1455
1456 b3 += k0;
1457 b2 += b3 + k8;
e0a2d503 1458 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1459
1460 b5 += k2 + t0;
1461 b4 += b5 + k1;
e0a2d503 1462 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1463
1464 b7 += k4 + 6;
1465 b6 += b7 + k3 + t1;
e0a2d503 1466 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1467
1468 b2 += b1;
e0a2d503 1469 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1470
1471 b4 += b7;
e0a2d503 1472 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1473
1474 b6 += b5;
e0a2d503 1475 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1476
1477 b0 += b3;
e0a2d503 1478 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1479
1480 b4 += b1;
e0a2d503 1481 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
1482
1483 b6 += b3;
e0a2d503 1484 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
1485
1486 b0 += b5;
e0a2d503 1487 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
1488
1489 b2 += b7;
e0a2d503 1490 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
1491
1492 b6 += b1;
e0a2d503 1493 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
1494
1495 b0 += b7;
e0a2d503 1496 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
1497
1498 b2 += b5;
e0a2d503 1499 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
1500
1501 b4 += b3;
e0a2d503 1502 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
1503
1504 b1 += k8;
1505 b0 += b1 + k7;
e0a2d503 1506 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
1507
1508 b3 += k1;
1509 b2 += b3 + k0;
e0a2d503 1510 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
1511
1512 b5 += k3 + t1;
1513 b4 += b5 + k2;
e0a2d503 1514 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
1515
1516 b7 += k5 + 7;
1517 b6 += b7 + k4 + t2;
e0a2d503 1518 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
1519
1520 b2 += b1;
e0a2d503 1521 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
1522
1523 b4 += b7;
e0a2d503 1524 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
1525
1526 b6 += b5;
e0a2d503 1527 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
1528
1529 b0 += b3;
e0a2d503 1530 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
1531
1532 b4 += b1;
e0a2d503 1533 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
1534
1535 b6 += b3;
e0a2d503 1536 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
1537
1538 b0 += b5;
e0a2d503 1539 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
1540
1541 b2 += b7;
e0a2d503 1542 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
1543
1544 b6 += b1;
e0a2d503 1545 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
1546
1547 b0 += b7;
e0a2d503 1548 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
1549
1550 b2 += b5;
e0a2d503 1551 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
1552
1553 b4 += b3;
e0a2d503 1554 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
1555
1556 b1 += k0;
1557 b0 += b1 + k8;
e0a2d503 1558 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1559
1560 b3 += k2;
1561 b2 += b3 + k1;
e0a2d503 1562 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1563
1564 b5 += k4 + t2;
1565 b4 += b5 + k3;
e0a2d503 1566 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1567
1568 b7 += k6 + 8;
1569 b6 += b7 + k5 + t0;
e0a2d503 1570 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1571
1572 b2 += b1;
e0a2d503 1573 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1574
1575 b4 += b7;
e0a2d503 1576 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1577
1578 b6 += b5;
e0a2d503 1579 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1580
1581 b0 += b3;
e0a2d503 1582 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1583
1584 b4 += b1;
e0a2d503 1585 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
1586
1587 b6 += b3;
e0a2d503 1588 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
1589
1590 b0 += b5;
e0a2d503 1591 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
1592
1593 b2 += b7;
e0a2d503 1594 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
1595
1596 b6 += b1;
e0a2d503 1597 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
1598
1599 b0 += b7;
e0a2d503 1600 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
1601
1602 b2 += b5;
e0a2d503 1603 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
1604
1605 b4 += b3;
e0a2d503 1606 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
1607
1608 b1 += k1;
1609 b0 += b1 + k0;
e0a2d503 1610 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
1611
1612 b3 += k3;
1613 b2 += b3 + k2;
e0a2d503 1614 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
1615
1616 b5 += k5 + t0;
1617 b4 += b5 + k4;
e0a2d503 1618 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
1619
1620 b7 += k7 + 9;
1621 b6 += b7 + k6 + t1;
e0a2d503 1622 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
1623
1624 b2 += b1;
e0a2d503 1625 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
1626
1627 b4 += b7;
e0a2d503 1628 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
1629
1630 b6 += b5;
e0a2d503 1631 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
1632
1633 b0 += b3;
e0a2d503 1634 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
1635
1636 b4 += b1;
e0a2d503 1637 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
1638
1639 b6 += b3;
e0a2d503 1640 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
1641
1642 b0 += b5;
e0a2d503 1643 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
1644
1645 b2 += b7;
e0a2d503 1646 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
1647
1648 b6 += b1;
e0a2d503 1649 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
1650
1651 b0 += b7;
e0a2d503 1652 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
1653
1654 b2 += b5;
e0a2d503 1655 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
1656
1657 b4 += b3;
e0a2d503 1658 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
1659
1660 b1 += k2;
1661 b0 += b1 + k1;
e0a2d503 1662 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1663
1664 b3 += k4;
1665 b2 += b3 + k3;
e0a2d503 1666 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1667
1668 b5 += k6 + t1;
1669 b4 += b5 + k5;
e0a2d503 1670 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1671
1672 b7 += k8 + 10;
1673 b6 += b7 + k7 + t2;
e0a2d503 1674 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1675
1676 b2 += b1;
e0a2d503 1677 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1678
1679 b4 += b7;
e0a2d503 1680 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1681
1682 b6 += b5;
e0a2d503 1683 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1684
1685 b0 += b3;
e0a2d503 1686 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1687
1688 b4 += b1;
e0a2d503 1689 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
1690
1691 b6 += b3;
e0a2d503 1692 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
1693
1694 b0 += b5;
e0a2d503 1695 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
1696
1697 b2 += b7;
e0a2d503 1698 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
1699
1700 b6 += b1;
e0a2d503 1701 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
1702
1703 b0 += b7;
e0a2d503 1704 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
1705
1706 b2 += b5;
e0a2d503 1707 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
1708
1709 b4 += b3;
e0a2d503 1710 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
1711
1712 b1 += k3;
1713 b0 += b1 + k2;
e0a2d503 1714 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
1715
1716 b3 += k5;
1717 b2 += b3 + k4;
e0a2d503 1718 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
1719
1720 b5 += k7 + t2;
1721 b4 += b5 + k6;
e0a2d503 1722 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
1723
1724 b7 += k0 + 11;
1725 b6 += b7 + k8 + t0;
e0a2d503 1726 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
1727
1728 b2 += b1;
e0a2d503 1729 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
1730
1731 b4 += b7;
e0a2d503 1732 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
1733
1734 b6 += b5;
e0a2d503 1735 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
1736
1737 b0 += b3;
e0a2d503 1738 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
1739
1740 b4 += b1;
e0a2d503 1741 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
1742
1743 b6 += b3;
e0a2d503 1744 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
1745
1746 b0 += b5;
e0a2d503 1747 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
1748
1749 b2 += b7;
e0a2d503 1750 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
1751
1752 b6 += b1;
e0a2d503 1753 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
1754
1755 b0 += b7;
e0a2d503 1756 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
1757
1758 b2 += b5;
e0a2d503 1759 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
1760
1761 b4 += b3;
e0a2d503 1762 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
1763
1764 b1 += k4;
1765 b0 += b1 + k3;
e0a2d503 1766 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1767
1768 b3 += k6;
1769 b2 += b3 + k5;
e0a2d503 1770 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1771
1772 b5 += k8 + t0;
1773 b4 += b5 + k7;
e0a2d503 1774 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1775
1776 b7 += k1 + 12;
1777 b6 += b7 + k0 + t1;
e0a2d503 1778 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1779
1780 b2 += b1;
e0a2d503 1781 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1782
1783 b4 += b7;
e0a2d503 1784 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1785
1786 b6 += b5;
e0a2d503 1787 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1788
1789 b0 += b3;
e0a2d503 1790 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1791
1792 b4 += b1;
e0a2d503 1793 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
1794
1795 b6 += b3;
e0a2d503 1796 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
1797
1798 b0 += b5;
e0a2d503 1799 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
1800
1801 b2 += b7;
e0a2d503 1802 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
1803
1804 b6 += b1;
e0a2d503 1805 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
1806
1807 b0 += b7;
e0a2d503 1808 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
1809
1810 b2 += b5;
e0a2d503 1811 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
1812
1813 b4 += b3;
e0a2d503 1814 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
1815
1816 b1 += k5;
1817 b0 += b1 + k4;
e0a2d503 1818 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
1819
1820 b3 += k7;
1821 b2 += b3 + k6;
e0a2d503 1822 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
1823
1824 b5 += k0 + t1;
1825 b4 += b5 + k8;
e0a2d503 1826 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
1827
1828 b7 += k2 + 13;
1829 b6 += b7 + k1 + t2;
e0a2d503 1830 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
1831
1832 b2 += b1;
e0a2d503 1833 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
1834
1835 b4 += b7;
e0a2d503 1836 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
1837
1838 b6 += b5;
e0a2d503 1839 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
1840
1841 b0 += b3;
e0a2d503 1842 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
1843
1844 b4 += b1;
e0a2d503 1845 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
1846
1847 b6 += b3;
e0a2d503 1848 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
1849
1850 b0 += b5;
e0a2d503 1851 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
1852
1853 b2 += b7;
e0a2d503 1854 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
1855
1856 b6 += b1;
e0a2d503 1857 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
1858
1859 b0 += b7;
e0a2d503 1860 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
1861
1862 b2 += b5;
e0a2d503 1863 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
1864
1865 b4 += b3;
e0a2d503 1866 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
1867
1868 b1 += k6;
1869 b0 += b1 + k5;
e0a2d503 1870 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1871
1872 b3 += k8;
1873 b2 += b3 + k7;
e0a2d503 1874 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1875
1876 b5 += k1 + t2;
1877 b4 += b5 + k0;
e0a2d503 1878 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1879
1880 b7 += k3 + 14;
1881 b6 += b7 + k2 + t0;
e0a2d503 1882 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1883
1884 b2 += b1;
e0a2d503 1885 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1886
1887 b4 += b7;
e0a2d503 1888 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1889
1890 b6 += b5;
e0a2d503 1891 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1892
1893 b0 += b3;
e0a2d503 1894 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1895
1896 b4 += b1;
e0a2d503 1897 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
1898
1899 b6 += b3;
e0a2d503 1900 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
1901
1902 b0 += b5;
e0a2d503 1903 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
1904
1905 b2 += b7;
e0a2d503 1906 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
1907
1908 b6 += b1;
e0a2d503 1909 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
1910
1911 b0 += b7;
e0a2d503 1912 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
1913
1914 b2 += b5;
e0a2d503 1915 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
1916
1917 b4 += b3;
e0a2d503 1918 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
1919
1920 b1 += k7;
1921 b0 += b1 + k6;
e0a2d503 1922 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
1923
1924 b3 += k0;
1925 b2 += b3 + k8;
e0a2d503 1926 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
1927
1928 b5 += k2 + t0;
1929 b4 += b5 + k1;
e0a2d503 1930 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
1931
1932 b7 += k4 + 15;
1933 b6 += b7 + k3 + t1;
e0a2d503 1934 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
1935
1936 b2 += b1;
e0a2d503 1937 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
1938
1939 b4 += b7;
e0a2d503 1940 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
1941
1942 b6 += b5;
e0a2d503 1943 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
1944
1945 b0 += b3;
e0a2d503 1946 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
1947
1948 b4 += b1;
e0a2d503 1949 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
1950
1951 b6 += b3;
e0a2d503 1952 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
1953
1954 b0 += b5;
e0a2d503 1955 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
1956
1957 b2 += b7;
e0a2d503 1958 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
1959
1960 b6 += b1;
e0a2d503 1961 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
1962
1963 b0 += b7;
e0a2d503 1964 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
1965
1966 b2 += b5;
e0a2d503 1967 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
1968
1969 b4 += b3;
e0a2d503 1970 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
1971
1972 b1 += k8;
1973 b0 += b1 + k7;
e0a2d503 1974 b1 = rol64(b1, 46) ^ b0;
0109ce73
JE
1975
1976 b3 += k1;
1977 b2 += b3 + k0;
e0a2d503 1978 b3 = rol64(b3, 36) ^ b2;
0109ce73
JE
1979
1980 b5 += k3 + t1;
1981 b4 += b5 + k2;
e0a2d503 1982 b5 = rol64(b5, 19) ^ b4;
0109ce73
JE
1983
1984 b7 += k5 + 16;
1985 b6 += b7 + k4 + t2;
e0a2d503 1986 b7 = rol64(b7, 37) ^ b6;
0109ce73
JE
1987
1988 b2 += b1;
e0a2d503 1989 b1 = rol64(b1, 33) ^ b2;
0109ce73
JE
1990
1991 b4 += b7;
e0a2d503 1992 b7 = rol64(b7, 27) ^ b4;
0109ce73
JE
1993
1994 b6 += b5;
e0a2d503 1995 b5 = rol64(b5, 14) ^ b6;
0109ce73
JE
1996
1997 b0 += b3;
e0a2d503 1998 b3 = rol64(b3, 42) ^ b0;
0109ce73
JE
1999
2000 b4 += b1;
e0a2d503 2001 b1 = rol64(b1, 17) ^ b4;
0109ce73
JE
2002
2003 b6 += b3;
e0a2d503 2004 b3 = rol64(b3, 49) ^ b6;
0109ce73
JE
2005
2006 b0 += b5;
e0a2d503 2007 b5 = rol64(b5, 36) ^ b0;
0109ce73
JE
2008
2009 b2 += b7;
e0a2d503 2010 b7 = rol64(b7, 39) ^ b2;
0109ce73
JE
2011
2012 b6 += b1;
e0a2d503 2013 b1 = rol64(b1, 44) ^ b6;
0109ce73
JE
2014
2015 b0 += b7;
e0a2d503 2016 b7 = rol64(b7, 9) ^ b0;
0109ce73
JE
2017
2018 b2 += b5;
e0a2d503 2019 b5 = rol64(b5, 54) ^ b2;
0109ce73
JE
2020
2021 b4 += b3;
e0a2d503 2022 b3 = rol64(b3, 56) ^ b4;
0109ce73
JE
2023
2024 b1 += k0;
2025 b0 += b1 + k8;
e0a2d503 2026 b1 = rol64(b1, 39) ^ b0;
0109ce73
JE
2027
2028 b3 += k2;
2029 b2 += b3 + k1;
e0a2d503 2030 b3 = rol64(b3, 30) ^ b2;
0109ce73
JE
2031
2032 b5 += k4 + t2;
2033 b4 += b5 + k3;
e0a2d503 2034 b5 = rol64(b5, 34) ^ b4;
0109ce73
JE
2035
2036 b7 += k6 + 17;
2037 b6 += b7 + k5 + t0;
e0a2d503 2038 b7 = rol64(b7, 24) ^ b6;
0109ce73
JE
2039
2040 b2 += b1;
e0a2d503 2041 b1 = rol64(b1, 13) ^ b2;
0109ce73
JE
2042
2043 b4 += b7;
e0a2d503 2044 b7 = rol64(b7, 50) ^ b4;
0109ce73
JE
2045
2046 b6 += b5;
e0a2d503 2047 b5 = rol64(b5, 10) ^ b6;
0109ce73
JE
2048
2049 b0 += b3;
e0a2d503 2050 b3 = rol64(b3, 17) ^ b0;
0109ce73
JE
2051
2052 b4 += b1;
e0a2d503 2053 b1 = rol64(b1, 25) ^ b4;
0109ce73
JE
2054
2055 b6 += b3;
e0a2d503 2056 b3 = rol64(b3, 29) ^ b6;
0109ce73
JE
2057
2058 b0 += b5;
e0a2d503 2059 b5 = rol64(b5, 39) ^ b0;
0109ce73
JE
2060
2061 b2 += b7;
e0a2d503 2062 b7 = rol64(b7, 43) ^ b2;
0109ce73
JE
2063
2064 b6 += b1;
e0a2d503 2065 b1 = rol64(b1, 8) ^ b6;
0109ce73
JE
2066
2067 b0 += b7;
e0a2d503 2068 b7 = rol64(b7, 35) ^ b0;
0109ce73
JE
2069
2070 b2 += b5;
e0a2d503 2071 b5 = rol64(b5, 56) ^ b2;
0109ce73
JE
2072
2073 b4 += b3;
e0a2d503 2074 b3 = rol64(b3, 22) ^ b4;
0109ce73
JE
2075
2076 output[0] = b0 + k0;
2077 output[1] = b1 + k1;
2078 output[2] = b2 + k2;
2079 output[3] = b3 + k3;
2080 output[4] = b4 + k4;
2081 output[5] = b5 + k5 + t0;
2082 output[6] = b6 + k6 + t1;
2083 output[7] = b7 + k7 + 18;
2084}
2085
2086void threefish_decrypt_512(struct threefish_key *key_ctx, u64 *input,
2087 u64 *output)
2088{
2089 u64 b0 = input[0], b1 = input[1],
2090 b2 = input[2], b3 = input[3],
2091 b4 = input[4], b5 = input[5],
2092 b6 = input[6], b7 = input[7];
2093 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
2094 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
2095 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
2096 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
2097 k8 = key_ctx->key[8];
2098 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
2099 t2 = key_ctx->tweak[2];
2100
2101 u64 tmp;
2102
2103 b0 -= k0;
2104 b1 -= k1;
2105 b2 -= k2;
2106 b3 -= k3;
2107 b4 -= k4;
2108 b5 -= k5 + t0;
2109 b6 -= k6 + t1;
2110 b7 -= k7 + 18;
2111
2112 tmp = b3 ^ b4;
3733d3f9 2113 b3 = ror64(tmp, 22);
0109ce73
JE
2114 b4 -= b3;
2115
2116 tmp = b5 ^ b2;
3733d3f9 2117 b5 = ror64(tmp, 56);
0109ce73
JE
2118 b2 -= b5;
2119
2120 tmp = b7 ^ b0;
3733d3f9 2121 b7 = ror64(tmp, 35);
0109ce73
JE
2122 b0 -= b7;
2123
2124 tmp = b1 ^ b6;
3733d3f9 2125 b1 = ror64(tmp, 8);
0109ce73
JE
2126 b6 -= b1;
2127
2128 tmp = b7 ^ b2;
3733d3f9 2129 b7 = ror64(tmp, 43);
0109ce73
JE
2130 b2 -= b7;
2131
2132 tmp = b5 ^ b0;
3733d3f9 2133 b5 = ror64(tmp, 39);
0109ce73
JE
2134 b0 -= b5;
2135
2136 tmp = b3 ^ b6;
3733d3f9 2137 b3 = ror64(tmp, 29);
0109ce73
JE
2138 b6 -= b3;
2139
2140 tmp = b1 ^ b4;
3733d3f9 2141 b1 = ror64(tmp, 25);
0109ce73
JE
2142 b4 -= b1;
2143
2144 tmp = b3 ^ b0;
3733d3f9 2145 b3 = ror64(tmp, 17);
0109ce73
JE
2146 b0 -= b3;
2147
2148 tmp = b5 ^ b6;
3733d3f9 2149 b5 = ror64(tmp, 10);
0109ce73
JE
2150 b6 -= b5;
2151
2152 tmp = b7 ^ b4;
3733d3f9 2153 b7 = ror64(tmp, 50);
0109ce73
JE
2154 b4 -= b7;
2155
2156 tmp = b1 ^ b2;
3733d3f9 2157 b1 = ror64(tmp, 13);
0109ce73
JE
2158 b2 -= b1;
2159
2160 tmp = b7 ^ b6;
3733d3f9 2161 b7 = ror64(tmp, 24);
0109ce73
JE
2162 b6 -= b7 + k5 + t0;
2163 b7 -= k6 + 17;
2164
2165 tmp = b5 ^ b4;
3733d3f9 2166 b5 = ror64(tmp, 34);
0109ce73
JE
2167 b4 -= b5 + k3;
2168 b5 -= k4 + t2;
2169
2170 tmp = b3 ^ b2;
3733d3f9 2171 b3 = ror64(tmp, 30);
0109ce73
JE
2172 b2 -= b3 + k1;
2173 b3 -= k2;
2174
2175 tmp = b1 ^ b0;
3733d3f9 2176 b1 = ror64(tmp, 39);
0109ce73
JE
2177 b0 -= b1 + k8;
2178 b1 -= k0;
2179
2180 tmp = b3 ^ b4;
3733d3f9 2181 b3 = ror64(tmp, 56);
0109ce73
JE
2182 b4 -= b3;
2183
2184 tmp = b5 ^ b2;
3733d3f9 2185 b5 = ror64(tmp, 54);
0109ce73
JE
2186 b2 -= b5;
2187
2188 tmp = b7 ^ b0;
3733d3f9 2189 b7 = ror64(tmp, 9);
0109ce73
JE
2190 b0 -= b7;
2191
2192 tmp = b1 ^ b6;
3733d3f9 2193 b1 = ror64(tmp, 44);
0109ce73
JE
2194 b6 -= b1;
2195
2196 tmp = b7 ^ b2;
3733d3f9 2197 b7 = ror64(tmp, 39);
0109ce73
JE
2198 b2 -= b7;
2199
2200 tmp = b5 ^ b0;
3733d3f9 2201 b5 = ror64(tmp, 36);
0109ce73
JE
2202 b0 -= b5;
2203
2204 tmp = b3 ^ b6;
3733d3f9 2205 b3 = ror64(tmp, 49);
0109ce73
JE
2206 b6 -= b3;
2207
2208 tmp = b1 ^ b4;
3733d3f9 2209 b1 = ror64(tmp, 17);
0109ce73
JE
2210 b4 -= b1;
2211
2212 tmp = b3 ^ b0;
3733d3f9 2213 b3 = ror64(tmp, 42);
0109ce73
JE
2214 b0 -= b3;
2215
2216 tmp = b5 ^ b6;
3733d3f9 2217 b5 = ror64(tmp, 14);
0109ce73
JE
2218 b6 -= b5;
2219
2220 tmp = b7 ^ b4;
3733d3f9 2221 b7 = ror64(tmp, 27);
0109ce73
JE
2222 b4 -= b7;
2223
2224 tmp = b1 ^ b2;
3733d3f9 2225 b1 = ror64(tmp, 33);
0109ce73
JE
2226 b2 -= b1;
2227
2228 tmp = b7 ^ b6;
3733d3f9 2229 b7 = ror64(tmp, 37);
0109ce73
JE
2230 b6 -= b7 + k4 + t2;
2231 b7 -= k5 + 16;
2232
2233 tmp = b5 ^ b4;
3733d3f9 2234 b5 = ror64(tmp, 19);
0109ce73
JE
2235 b4 -= b5 + k2;
2236 b5 -= k3 + t1;
2237
2238 tmp = b3 ^ b2;
3733d3f9 2239 b3 = ror64(tmp, 36);
0109ce73
JE
2240 b2 -= b3 + k0;
2241 b3 -= k1;
2242
2243 tmp = b1 ^ b0;
3733d3f9 2244 b1 = ror64(tmp, 46);
0109ce73
JE
2245 b0 -= b1 + k7;
2246 b1 -= k8;
2247
2248 tmp = b3 ^ b4;
3733d3f9 2249 b3 = ror64(tmp, 22);
0109ce73
JE
2250 b4 -= b3;
2251
2252 tmp = b5 ^ b2;
3733d3f9 2253 b5 = ror64(tmp, 56);
0109ce73
JE
2254 b2 -= b5;
2255
2256 tmp = b7 ^ b0;
3733d3f9 2257 b7 = ror64(tmp, 35);
0109ce73
JE
2258 b0 -= b7;
2259
2260 tmp = b1 ^ b6;
3733d3f9 2261 b1 = ror64(tmp, 8);
0109ce73
JE
2262 b6 -= b1;
2263
2264 tmp = b7 ^ b2;
3733d3f9 2265 b7 = ror64(tmp, 43);
0109ce73
JE
2266 b2 -= b7;
2267
2268 tmp = b5 ^ b0;
3733d3f9 2269 b5 = ror64(tmp, 39);
0109ce73
JE
2270 b0 -= b5;
2271
2272 tmp = b3 ^ b6;
3733d3f9 2273 b3 = ror64(tmp, 29);
0109ce73
JE
2274 b6 -= b3;
2275
2276 tmp = b1 ^ b4;
3733d3f9 2277 b1 = ror64(tmp, 25);
0109ce73
JE
2278 b4 -= b1;
2279
2280 tmp = b3 ^ b0;
3733d3f9 2281 b3 = ror64(tmp, 17);
0109ce73
JE
2282 b0 -= b3;
2283
2284 tmp = b5 ^ b6;
3733d3f9 2285 b5 = ror64(tmp, 10);
0109ce73
JE
2286 b6 -= b5;
2287
2288 tmp = b7 ^ b4;
3733d3f9 2289 b7 = ror64(tmp, 50);
0109ce73
JE
2290 b4 -= b7;
2291
2292 tmp = b1 ^ b2;
3733d3f9 2293 b1 = ror64(tmp, 13);
0109ce73
JE
2294 b2 -= b1;
2295
2296 tmp = b7 ^ b6;
3733d3f9 2297 b7 = ror64(tmp, 24);
0109ce73
JE
2298 b6 -= b7 + k3 + t1;
2299 b7 -= k4 + 15;
2300
2301 tmp = b5 ^ b4;
3733d3f9 2302 b5 = ror64(tmp, 34);
0109ce73
JE
2303 b4 -= b5 + k1;
2304 b5 -= k2 + t0;
2305
2306 tmp = b3 ^ b2;
3733d3f9 2307 b3 = ror64(tmp, 30);
0109ce73
JE
2308 b2 -= b3 + k8;
2309 b3 -= k0;
2310
2311 tmp = b1 ^ b0;
3733d3f9 2312 b1 = ror64(tmp, 39);
0109ce73
JE
2313 b0 -= b1 + k6;
2314 b1 -= k7;
2315
2316 tmp = b3 ^ b4;
3733d3f9 2317 b3 = ror64(tmp, 56);
0109ce73
JE
2318 b4 -= b3;
2319
2320 tmp = b5 ^ b2;
3733d3f9 2321 b5 = ror64(tmp, 54);
0109ce73
JE
2322 b2 -= b5;
2323
2324 tmp = b7 ^ b0;
3733d3f9 2325 b7 = ror64(tmp, 9);
0109ce73
JE
2326 b0 -= b7;
2327
2328 tmp = b1 ^ b6;
3733d3f9 2329 b1 = ror64(tmp, 44);
0109ce73
JE
2330 b6 -= b1;
2331
2332 tmp = b7 ^ b2;
3733d3f9 2333 b7 = ror64(tmp, 39);
0109ce73
JE
2334 b2 -= b7;
2335
2336 tmp = b5 ^ b0;
3733d3f9 2337 b5 = ror64(tmp, 36);
0109ce73
JE
2338 b0 -= b5;
2339
2340 tmp = b3 ^ b6;
3733d3f9 2341 b3 = ror64(tmp, 49);
0109ce73
JE
2342 b6 -= b3;
2343
2344 tmp = b1 ^ b4;
3733d3f9 2345 b1 = ror64(tmp, 17);
0109ce73
JE
2346 b4 -= b1;
2347
2348 tmp = b3 ^ b0;
3733d3f9 2349 b3 = ror64(tmp, 42);
0109ce73
JE
2350 b0 -= b3;
2351
2352 tmp = b5 ^ b6;
3733d3f9 2353 b5 = ror64(tmp, 14);
0109ce73
JE
2354 b6 -= b5;
2355
2356 tmp = b7 ^ b4;
3733d3f9 2357 b7 = ror64(tmp, 27);
0109ce73
JE
2358 b4 -= b7;
2359
2360 tmp = b1 ^ b2;
3733d3f9 2361 b1 = ror64(tmp, 33);
0109ce73
JE
2362 b2 -= b1;
2363
2364 tmp = b7 ^ b6;
3733d3f9 2365 b7 = ror64(tmp, 37);
0109ce73
JE
2366 b6 -= b7 + k2 + t0;
2367 b7 -= k3 + 14;
2368
2369 tmp = b5 ^ b4;
3733d3f9 2370 b5 = ror64(tmp, 19);
0109ce73
JE
2371 b4 -= b5 + k0;
2372 b5 -= k1 + t2;
2373
2374 tmp = b3 ^ b2;
3733d3f9 2375 b3 = ror64(tmp, 36);
0109ce73
JE
2376 b2 -= b3 + k7;
2377 b3 -= k8;
2378
2379 tmp = b1 ^ b0;
3733d3f9 2380 b1 = ror64(tmp, 46);
0109ce73
JE
2381 b0 -= b1 + k5;
2382 b1 -= k6;
2383
2384 tmp = b3 ^ b4;
3733d3f9 2385 b3 = ror64(tmp, 22);
0109ce73
JE
2386 b4 -= b3;
2387
2388 tmp = b5 ^ b2;
3733d3f9 2389 b5 = ror64(tmp, 56);
0109ce73
JE
2390 b2 -= b5;
2391
2392 tmp = b7 ^ b0;
3733d3f9 2393 b7 = ror64(tmp, 35);
0109ce73
JE
2394 b0 -= b7;
2395
2396 tmp = b1 ^ b6;
3733d3f9 2397 b1 = ror64(tmp, 8);
0109ce73
JE
2398 b6 -= b1;
2399
2400 tmp = b7 ^ b2;
3733d3f9 2401 b7 = ror64(tmp, 43);
0109ce73
JE
2402 b2 -= b7;
2403
2404 tmp = b5 ^ b0;
3733d3f9 2405 b5 = ror64(tmp, 39);
0109ce73
JE
2406 b0 -= b5;
2407
2408 tmp = b3 ^ b6;
3733d3f9 2409 b3 = ror64(tmp, 29);
0109ce73
JE
2410 b6 -= b3;
2411
2412 tmp = b1 ^ b4;
3733d3f9 2413 b1 = ror64(tmp, 25);
0109ce73
JE
2414 b4 -= b1;
2415
2416 tmp = b3 ^ b0;
3733d3f9 2417 b3 = ror64(tmp, 17);
0109ce73
JE
2418 b0 -= b3;
2419
2420 tmp = b5 ^ b6;
3733d3f9 2421 b5 = ror64(tmp, 10);
0109ce73
JE
2422 b6 -= b5;
2423
2424 tmp = b7 ^ b4;
3733d3f9 2425 b7 = ror64(tmp, 50);
0109ce73
JE
2426 b4 -= b7;
2427
2428 tmp = b1 ^ b2;
3733d3f9 2429 b1 = ror64(tmp, 13);
0109ce73
JE
2430 b2 -= b1;
2431
2432 tmp = b7 ^ b6;
3733d3f9 2433 b7 = ror64(tmp, 24);
0109ce73
JE
2434 b6 -= b7 + k1 + t2;
2435 b7 -= k2 + 13;
2436
2437 tmp = b5 ^ b4;
3733d3f9 2438 b5 = ror64(tmp, 34);
0109ce73
JE
2439 b4 -= b5 + k8;
2440 b5 -= k0 + t1;
2441
2442 tmp = b3 ^ b2;
3733d3f9 2443 b3 = ror64(tmp, 30);
0109ce73
JE
2444 b2 -= b3 + k6;
2445 b3 -= k7;
2446
2447 tmp = b1 ^ b0;
3733d3f9 2448 b1 = ror64(tmp, 39);
0109ce73
JE
2449 b0 -= b1 + k4;
2450 b1 -= k5;
2451
2452 tmp = b3 ^ b4;
3733d3f9 2453 b3 = ror64(tmp, 56);
0109ce73
JE
2454 b4 -= b3;
2455
2456 tmp = b5 ^ b2;
3733d3f9 2457 b5 = ror64(tmp, 54);
0109ce73
JE
2458 b2 -= b5;
2459
2460 tmp = b7 ^ b0;
3733d3f9 2461 b7 = ror64(tmp, 9);
0109ce73
JE
2462 b0 -= b7;
2463
2464 tmp = b1 ^ b6;
3733d3f9 2465 b1 = ror64(tmp, 44);
0109ce73
JE
2466 b6 -= b1;
2467
2468 tmp = b7 ^ b2;
3733d3f9 2469 b7 = ror64(tmp, 39);
0109ce73
JE
2470 b2 -= b7;
2471
2472 tmp = b5 ^ b0;
3733d3f9 2473 b5 = ror64(tmp, 36);
0109ce73
JE
2474 b0 -= b5;
2475
2476 tmp = b3 ^ b6;
3733d3f9 2477 b3 = ror64(tmp, 49);
0109ce73
JE
2478 b6 -= b3;
2479
2480 tmp = b1 ^ b4;
3733d3f9 2481 b1 = ror64(tmp, 17);
0109ce73
JE
2482 b4 -= b1;
2483
2484 tmp = b3 ^ b0;
3733d3f9 2485 b3 = ror64(tmp, 42);
0109ce73
JE
2486 b0 -= b3;
2487
2488 tmp = b5 ^ b6;
3733d3f9 2489 b5 = ror64(tmp, 14);
0109ce73
JE
2490 b6 -= b5;
2491
2492 tmp = b7 ^ b4;
3733d3f9 2493 b7 = ror64(tmp, 27);
0109ce73
JE
2494 b4 -= b7;
2495
2496 tmp = b1 ^ b2;
3733d3f9 2497 b1 = ror64(tmp, 33);
0109ce73
JE
2498 b2 -= b1;
2499
2500 tmp = b7 ^ b6;
3733d3f9 2501 b7 = ror64(tmp, 37);
0109ce73
JE
2502 b6 -= b7 + k0 + t1;
2503 b7 -= k1 + 12;
2504
2505 tmp = b5 ^ b4;
3733d3f9 2506 b5 = ror64(tmp, 19);
0109ce73
JE
2507 b4 -= b5 + k7;
2508 b5 -= k8 + t0;
2509
2510 tmp = b3 ^ b2;
3733d3f9 2511 b3 = ror64(tmp, 36);
0109ce73
JE
2512 b2 -= b3 + k5;
2513 b3 -= k6;
2514
2515 tmp = b1 ^ b0;
3733d3f9 2516 b1 = ror64(tmp, 46);
0109ce73
JE
2517 b0 -= b1 + k3;
2518 b1 -= k4;
2519
2520 tmp = b3 ^ b4;
3733d3f9 2521 b3 = ror64(tmp, 22);
0109ce73
JE
2522 b4 -= b3;
2523
2524 tmp = b5 ^ b2;
3733d3f9 2525 b5 = ror64(tmp, 56);
0109ce73
JE
2526 b2 -= b5;
2527
2528 tmp = b7 ^ b0;
3733d3f9 2529 b7 = ror64(tmp, 35);
0109ce73
JE
2530 b0 -= b7;
2531
2532 tmp = b1 ^ b6;
3733d3f9 2533 b1 = ror64(tmp, 8);
0109ce73
JE
2534 b6 -= b1;
2535
2536 tmp = b7 ^ b2;
3733d3f9 2537 b7 = ror64(tmp, 43);
0109ce73
JE
2538 b2 -= b7;
2539
2540 tmp = b5 ^ b0;
3733d3f9 2541 b5 = ror64(tmp, 39);
0109ce73
JE
2542 b0 -= b5;
2543
2544 tmp = b3 ^ b6;
3733d3f9 2545 b3 = ror64(tmp, 29);
0109ce73
JE
2546 b6 -= b3;
2547
2548 tmp = b1 ^ b4;
3733d3f9 2549 b1 = ror64(tmp, 25);
0109ce73
JE
2550 b4 -= b1;
2551
2552 tmp = b3 ^ b0;
3733d3f9 2553 b3 = ror64(tmp, 17);
0109ce73
JE
2554 b0 -= b3;
2555
2556 tmp = b5 ^ b6;
3733d3f9 2557 b5 = ror64(tmp, 10);
0109ce73
JE
2558 b6 -= b5;
2559
2560 tmp = b7 ^ b4;
3733d3f9 2561 b7 = ror64(tmp, 50);
0109ce73
JE
2562 b4 -= b7;
2563
2564 tmp = b1 ^ b2;
3733d3f9 2565 b1 = ror64(tmp, 13);
0109ce73
JE
2566 b2 -= b1;
2567
2568 tmp = b7 ^ b6;
3733d3f9 2569 b7 = ror64(tmp, 24);
0109ce73
JE
2570 b6 -= b7 + k8 + t0;
2571 b7 -= k0 + 11;
2572
2573 tmp = b5 ^ b4;
3733d3f9 2574 b5 = ror64(tmp, 34);
0109ce73
JE
2575 b4 -= b5 + k6;
2576 b5 -= k7 + t2;
2577
2578 tmp = b3 ^ b2;
3733d3f9 2579 b3 = ror64(tmp, 30);
0109ce73
JE
2580 b2 -= b3 + k4;
2581 b3 -= k5;
2582
2583 tmp = b1 ^ b0;
3733d3f9 2584 b1 = ror64(tmp, 39);
0109ce73
JE
2585 b0 -= b1 + k2;
2586 b1 -= k3;
2587
2588 tmp = b3 ^ b4;
3733d3f9 2589 b3 = ror64(tmp, 56);
0109ce73
JE
2590 b4 -= b3;
2591
2592 tmp = b5 ^ b2;
3733d3f9 2593 b5 = ror64(tmp, 54);
0109ce73
JE
2594 b2 -= b5;
2595
2596 tmp = b7 ^ b0;
3733d3f9 2597 b7 = ror64(tmp, 9);
0109ce73
JE
2598 b0 -= b7;
2599
2600 tmp = b1 ^ b6;
3733d3f9 2601 b1 = ror64(tmp, 44);
0109ce73
JE
2602 b6 -= b1;
2603
2604 tmp = b7 ^ b2;
3733d3f9 2605 b7 = ror64(tmp, 39);
0109ce73
JE
2606 b2 -= b7;
2607
2608 tmp = b5 ^ b0;
3733d3f9 2609 b5 = ror64(tmp, 36);
0109ce73
JE
2610 b0 -= b5;
2611
2612 tmp = b3 ^ b6;
3733d3f9 2613 b3 = ror64(tmp, 49);
0109ce73
JE
2614 b6 -= b3;
2615
2616 tmp = b1 ^ b4;
3733d3f9 2617 b1 = ror64(tmp, 17);
0109ce73
JE
2618 b4 -= b1;
2619
2620 tmp = b3 ^ b0;
3733d3f9 2621 b3 = ror64(tmp, 42);
0109ce73
JE
2622 b0 -= b3;
2623
2624 tmp = b5 ^ b6;
3733d3f9 2625 b5 = ror64(tmp, 14);
0109ce73
JE
2626 b6 -= b5;
2627
2628 tmp = b7 ^ b4;
3733d3f9 2629 b7 = ror64(tmp, 27);
0109ce73
JE
2630 b4 -= b7;
2631
2632 tmp = b1 ^ b2;
3733d3f9 2633 b1 = ror64(tmp, 33);
0109ce73
JE
2634 b2 -= b1;
2635
2636 tmp = b7 ^ b6;
3733d3f9 2637 b7 = ror64(tmp, 37);
0109ce73
JE
2638 b6 -= b7 + k7 + t2;
2639 b7 -= k8 + 10;
2640
2641 tmp = b5 ^ b4;
3733d3f9 2642 b5 = ror64(tmp, 19);
0109ce73
JE
2643 b4 -= b5 + k5;
2644 b5 -= k6 + t1;
2645
2646 tmp = b3 ^ b2;
3733d3f9 2647 b3 = ror64(tmp, 36);
0109ce73
JE
2648 b2 -= b3 + k3;
2649 b3 -= k4;
2650
2651 tmp = b1 ^ b0;
3733d3f9 2652 b1 = ror64(tmp, 46);
0109ce73
JE
2653 b0 -= b1 + k1;
2654 b1 -= k2;
2655
2656 tmp = b3 ^ b4;
3733d3f9 2657 b3 = ror64(tmp, 22);
0109ce73
JE
2658 b4 -= b3;
2659
2660 tmp = b5 ^ b2;
3733d3f9 2661 b5 = ror64(tmp, 56);
0109ce73
JE
2662 b2 -= b5;
2663
2664 tmp = b7 ^ b0;
3733d3f9 2665 b7 = ror64(tmp, 35);
0109ce73
JE
2666 b0 -= b7;
2667
2668 tmp = b1 ^ b6;
3733d3f9 2669 b1 = ror64(tmp, 8);
0109ce73
JE
2670 b6 -= b1;
2671
2672 tmp = b7 ^ b2;
3733d3f9 2673 b7 = ror64(tmp, 43);
0109ce73
JE
2674 b2 -= b7;
2675
2676 tmp = b5 ^ b0;
3733d3f9 2677 b5 = ror64(tmp, 39);
0109ce73
JE
2678 b0 -= b5;
2679
2680 tmp = b3 ^ b6;
3733d3f9 2681 b3 = ror64(tmp, 29);
0109ce73
JE
2682 b6 -= b3;
2683
2684 tmp = b1 ^ b4;
3733d3f9 2685 b1 = ror64(tmp, 25);
0109ce73
JE
2686 b4 -= b1;
2687
2688 tmp = b3 ^ b0;
3733d3f9 2689 b3 = ror64(tmp, 17);
0109ce73
JE
2690 b0 -= b3;
2691
2692 tmp = b5 ^ b6;
3733d3f9 2693 b5 = ror64(tmp, 10);
0109ce73
JE
2694 b6 -= b5;
2695
2696 tmp = b7 ^ b4;
3733d3f9 2697 b7 = ror64(tmp, 50);
0109ce73
JE
2698 b4 -= b7;
2699
2700 tmp = b1 ^ b2;
3733d3f9 2701 b1 = ror64(tmp, 13);
0109ce73
JE
2702 b2 -= b1;
2703
2704 tmp = b7 ^ b6;
3733d3f9 2705 b7 = ror64(tmp, 24);
0109ce73
JE
2706 b6 -= b7 + k6 + t1;
2707 b7 -= k7 + 9;
2708
2709 tmp = b5 ^ b4;
3733d3f9 2710 b5 = ror64(tmp, 34);
0109ce73
JE
2711 b4 -= b5 + k4;
2712 b5 -= k5 + t0;
2713
2714 tmp = b3 ^ b2;
3733d3f9 2715 b3 = ror64(tmp, 30);
0109ce73
JE
2716 b2 -= b3 + k2;
2717 b3 -= k3;
2718
2719 tmp = b1 ^ b0;
3733d3f9 2720 b1 = ror64(tmp, 39);
0109ce73
JE
2721 b0 -= b1 + k0;
2722 b1 -= k1;
2723
2724 tmp = b3 ^ b4;
3733d3f9 2725 b3 = ror64(tmp, 56);
0109ce73
JE
2726 b4 -= b3;
2727
2728 tmp = b5 ^ b2;
3733d3f9 2729 b5 = ror64(tmp, 54);
0109ce73
JE
2730 b2 -= b5;
2731
2732 tmp = b7 ^ b0;
3733d3f9 2733 b7 = ror64(tmp, 9);
0109ce73
JE
2734 b0 -= b7;
2735
2736 tmp = b1 ^ b6;
3733d3f9 2737 b1 = ror64(tmp, 44);
0109ce73
JE
2738 b6 -= b1;
2739
2740 tmp = b7 ^ b2;
3733d3f9 2741 b7 = ror64(tmp, 39);
0109ce73
JE
2742 b2 -= b7;
2743
2744 tmp = b5 ^ b0;
3733d3f9 2745 b5 = ror64(tmp, 36);
0109ce73
JE
2746 b0 -= b5;
2747
2748 tmp = b3 ^ b6;
3733d3f9 2749 b3 = ror64(tmp, 49);
0109ce73
JE
2750 b6 -= b3;
2751
2752 tmp = b1 ^ b4;
3733d3f9 2753 b1 = ror64(tmp, 17);
0109ce73
JE
2754 b4 -= b1;
2755
2756 tmp = b3 ^ b0;
3733d3f9 2757 b3 = ror64(tmp, 42);
0109ce73
JE
2758 b0 -= b3;
2759
2760 tmp = b5 ^ b6;
3733d3f9 2761 b5 = ror64(tmp, 14);
0109ce73
JE
2762 b6 -= b5;
2763
2764 tmp = b7 ^ b4;
3733d3f9 2765 b7 = ror64(tmp, 27);
0109ce73
JE
2766 b4 -= b7;
2767
2768 tmp = b1 ^ b2;
3733d3f9 2769 b1 = ror64(tmp, 33);
0109ce73
JE
2770 b2 -= b1;
2771
2772 tmp = b7 ^ b6;
3733d3f9 2773 b7 = ror64(tmp, 37);
0109ce73
JE
2774 b6 -= b7 + k5 + t0;
2775 b7 -= k6 + 8;
2776
2777 tmp = b5 ^ b4;
3733d3f9 2778 b5 = ror64(tmp, 19);
0109ce73
JE
2779 b4 -= b5 + k3;
2780 b5 -= k4 + t2;
2781
2782 tmp = b3 ^ b2;
3733d3f9 2783 b3 = ror64(tmp, 36);
0109ce73
JE
2784 b2 -= b3 + k1;
2785 b3 -= k2;
2786
2787 tmp = b1 ^ b0;
3733d3f9 2788 b1 = ror64(tmp, 46);
0109ce73
JE
2789 b0 -= b1 + k8;
2790 b1 -= k0;
2791
2792 tmp = b3 ^ b4;
3733d3f9 2793 b3 = ror64(tmp, 22);
0109ce73
JE
2794 b4 -= b3;
2795
2796 tmp = b5 ^ b2;
3733d3f9 2797 b5 = ror64(tmp, 56);
0109ce73
JE
2798 b2 -= b5;
2799
2800 tmp = b7 ^ b0;
3733d3f9 2801 b7 = ror64(tmp, 35);
0109ce73
JE
2802 b0 -= b7;
2803
2804 tmp = b1 ^ b6;
3733d3f9 2805 b1 = ror64(tmp, 8);
0109ce73
JE
2806 b6 -= b1;
2807
2808 tmp = b7 ^ b2;
3733d3f9 2809 b7 = ror64(tmp, 43);
0109ce73
JE
2810 b2 -= b7;
2811
2812 tmp = b5 ^ b0;
3733d3f9 2813 b5 = ror64(tmp, 39);
0109ce73
JE
2814 b0 -= b5;
2815
2816 tmp = b3 ^ b6;
3733d3f9 2817 b3 = ror64(tmp, 29);
0109ce73
JE
2818 b6 -= b3;
2819
2820 tmp = b1 ^ b4;
3733d3f9 2821 b1 = ror64(tmp, 25);
0109ce73
JE
2822 b4 -= b1;
2823
2824 tmp = b3 ^ b0;
3733d3f9 2825 b3 = ror64(tmp, 17);
0109ce73
JE
2826 b0 -= b3;
2827
2828 tmp = b5 ^ b6;
3733d3f9 2829 b5 = ror64(tmp, 10);
0109ce73
JE
2830 b6 -= b5;
2831
2832 tmp = b7 ^ b4;
3733d3f9 2833 b7 = ror64(tmp, 50);
0109ce73
JE
2834 b4 -= b7;
2835
2836 tmp = b1 ^ b2;
3733d3f9 2837 b1 = ror64(tmp, 13);
0109ce73
JE
2838 b2 -= b1;
2839
2840 tmp = b7 ^ b6;
3733d3f9 2841 b7 = ror64(tmp, 24);
0109ce73
JE
2842 b6 -= b7 + k4 + t2;
2843 b7 -= k5 + 7;
2844
2845 tmp = b5 ^ b4;
3733d3f9 2846 b5 = ror64(tmp, 34);
0109ce73
JE
2847 b4 -= b5 + k2;
2848 b5 -= k3 + t1;
2849
2850 tmp = b3 ^ b2;
3733d3f9 2851 b3 = ror64(tmp, 30);
0109ce73
JE
2852 b2 -= b3 + k0;
2853 b3 -= k1;
2854
2855 tmp = b1 ^ b0;
3733d3f9 2856 b1 = ror64(tmp, 39);
0109ce73
JE
2857 b0 -= b1 + k7;
2858 b1 -= k8;
2859
2860 tmp = b3 ^ b4;
3733d3f9 2861 b3 = ror64(tmp, 56);
0109ce73
JE
2862 b4 -= b3;
2863
2864 tmp = b5 ^ b2;
3733d3f9 2865 b5 = ror64(tmp, 54);
0109ce73
JE
2866 b2 -= b5;
2867
2868 tmp = b7 ^ b0;
3733d3f9 2869 b7 = ror64(tmp, 9);
0109ce73
JE
2870 b0 -= b7;
2871
2872 tmp = b1 ^ b6;
3733d3f9 2873 b1 = ror64(tmp, 44);
0109ce73
JE
2874 b6 -= b1;
2875
2876 tmp = b7 ^ b2;
3733d3f9 2877 b7 = ror64(tmp, 39);
0109ce73
JE
2878 b2 -= b7;
2879
2880 tmp = b5 ^ b0;
3733d3f9 2881 b5 = ror64(tmp, 36);
0109ce73
JE
2882 b0 -= b5;
2883
2884 tmp = b3 ^ b6;
3733d3f9 2885 b3 = ror64(tmp, 49);
0109ce73
JE
2886 b6 -= b3;
2887
2888 tmp = b1 ^ b4;
3733d3f9 2889 b1 = ror64(tmp, 17);
0109ce73
JE
2890 b4 -= b1;
2891
2892 tmp = b3 ^ b0;
3733d3f9 2893 b3 = ror64(tmp, 42);
0109ce73
JE
2894 b0 -= b3;
2895
2896 tmp = b5 ^ b6;
3733d3f9 2897 b5 = ror64(tmp, 14);
0109ce73
JE
2898 b6 -= b5;
2899
2900 tmp = b7 ^ b4;
3733d3f9 2901 b7 = ror64(tmp, 27);
0109ce73
JE
2902 b4 -= b7;
2903
2904 tmp = b1 ^ b2;
3733d3f9 2905 b1 = ror64(tmp, 33);
0109ce73
JE
2906 b2 -= b1;
2907
2908 tmp = b7 ^ b6;
3733d3f9 2909 b7 = ror64(tmp, 37);
0109ce73
JE
2910 b6 -= b7 + k3 + t1;
2911 b7 -= k4 + 6;
2912
2913 tmp = b5 ^ b4;
3733d3f9 2914 b5 = ror64(tmp, 19);
0109ce73
JE
2915 b4 -= b5 + k1;
2916 b5 -= k2 + t0;
2917
2918 tmp = b3 ^ b2;
3733d3f9 2919 b3 = ror64(tmp, 36);
0109ce73
JE
2920 b2 -= b3 + k8;
2921 b3 -= k0;
2922
2923 tmp = b1 ^ b0;
3733d3f9 2924 b1 = ror64(tmp, 46);
0109ce73
JE
2925 b0 -= b1 + k6;
2926 b1 -= k7;
2927
2928 tmp = b3 ^ b4;
3733d3f9 2929 b3 = ror64(tmp, 22);
0109ce73
JE
2930 b4 -= b3;
2931
2932 tmp = b5 ^ b2;
3733d3f9 2933 b5 = ror64(tmp, 56);
0109ce73
JE
2934 b2 -= b5;
2935
2936 tmp = b7 ^ b0;
3733d3f9 2937 b7 = ror64(tmp, 35);
0109ce73
JE
2938 b0 -= b7;
2939
2940 tmp = b1 ^ b6;
3733d3f9 2941 b1 = ror64(tmp, 8);
0109ce73
JE
2942 b6 -= b1;
2943
2944 tmp = b7 ^ b2;
3733d3f9 2945 b7 = ror64(tmp, 43);
0109ce73
JE
2946 b2 -= b7;
2947
2948 tmp = b5 ^ b0;
3733d3f9 2949 b5 = ror64(tmp, 39);
0109ce73
JE
2950 b0 -= b5;
2951
2952 tmp = b3 ^ b6;
3733d3f9 2953 b3 = ror64(tmp, 29);
0109ce73
JE
2954 b6 -= b3;
2955
2956 tmp = b1 ^ b4;
3733d3f9 2957 b1 = ror64(tmp, 25);
0109ce73
JE
2958 b4 -= b1;
2959
2960 tmp = b3 ^ b0;
3733d3f9 2961 b3 = ror64(tmp, 17);
0109ce73
JE
2962 b0 -= b3;
2963
2964 tmp = b5 ^ b6;
3733d3f9 2965 b5 = ror64(tmp, 10);
0109ce73
JE
2966 b6 -= b5;
2967
2968 tmp = b7 ^ b4;
3733d3f9 2969 b7 = ror64(tmp, 50);
0109ce73
JE
2970 b4 -= b7;
2971
2972 tmp = b1 ^ b2;
3733d3f9 2973 b1 = ror64(tmp, 13);
0109ce73
JE
2974 b2 -= b1;
2975
2976 tmp = b7 ^ b6;
3733d3f9 2977 b7 = ror64(tmp, 24);
0109ce73
JE
2978 b6 -= b7 + k2 + t0;
2979 b7 -= k3 + 5;
2980
2981 tmp = b5 ^ b4;
3733d3f9 2982 b5 = ror64(tmp, 34);
0109ce73
JE
2983 b4 -= b5 + k0;
2984 b5 -= k1 + t2;
2985
2986 tmp = b3 ^ b2;
3733d3f9 2987 b3 = ror64(tmp, 30);
0109ce73
JE
2988 b2 -= b3 + k7;
2989 b3 -= k8;
2990
2991 tmp = b1 ^ b0;
3733d3f9 2992 b1 = ror64(tmp, 39);
0109ce73
JE
2993 b0 -= b1 + k5;
2994 b1 -= k6;
2995
2996 tmp = b3 ^ b4;
3733d3f9 2997 b3 = ror64(tmp, 56);
0109ce73
JE
2998 b4 -= b3;
2999
3000 tmp = b5 ^ b2;
3733d3f9 3001 b5 = ror64(tmp, 54);
0109ce73
JE
3002 b2 -= b5;
3003
3004 tmp = b7 ^ b0;
3733d3f9 3005 b7 = ror64(tmp, 9);
0109ce73
JE
3006 b0 -= b7;
3007
3008 tmp = b1 ^ b6;
3733d3f9 3009 b1 = ror64(tmp, 44);
0109ce73
JE
3010 b6 -= b1;
3011
3012 tmp = b7 ^ b2;
3733d3f9 3013 b7 = ror64(tmp, 39);
0109ce73
JE
3014 b2 -= b7;
3015
3016 tmp = b5 ^ b0;
3733d3f9 3017 b5 = ror64(tmp, 36);
0109ce73
JE
3018 b0 -= b5;
3019
3020 tmp = b3 ^ b6;
3733d3f9 3021 b3 = ror64(tmp, 49);
0109ce73
JE
3022 b6 -= b3;
3023
3024 tmp = b1 ^ b4;
3733d3f9 3025 b1 = ror64(tmp, 17);
0109ce73
JE
3026 b4 -= b1;
3027
3028 tmp = b3 ^ b0;
3733d3f9 3029 b3 = ror64(tmp, 42);
0109ce73
JE
3030 b0 -= b3;
3031
3032 tmp = b5 ^ b6;
3733d3f9 3033 b5 = ror64(tmp, 14);
0109ce73
JE
3034 b6 -= b5;
3035
3036 tmp = b7 ^ b4;
3733d3f9 3037 b7 = ror64(tmp, 27);
0109ce73
JE
3038 b4 -= b7;
3039
3040 tmp = b1 ^ b2;
3733d3f9 3041 b1 = ror64(tmp, 33);
0109ce73
JE
3042 b2 -= b1;
3043
3044 tmp = b7 ^ b6;
3733d3f9 3045 b7 = ror64(tmp, 37);
0109ce73
JE
3046 b6 -= b7 + k1 + t2;
3047 b7 -= k2 + 4;
3048
3049 tmp = b5 ^ b4;
3733d3f9 3050 b5 = ror64(tmp, 19);
0109ce73
JE
3051 b4 -= b5 + k8;
3052 b5 -= k0 + t1;
3053
3054 tmp = b3 ^ b2;
3733d3f9 3055 b3 = ror64(tmp, 36);
0109ce73
JE
3056 b2 -= b3 + k6;
3057 b3 -= k7;
3058
3059 tmp = b1 ^ b0;
3733d3f9 3060 b1 = ror64(tmp, 46);
0109ce73
JE
3061 b0 -= b1 + k4;
3062 b1 -= k5;
3063
3064 tmp = b3 ^ b4;
3733d3f9 3065 b3 = ror64(tmp, 22);
0109ce73
JE
3066 b4 -= b3;
3067
3068 tmp = b5 ^ b2;
3733d3f9 3069 b5 = ror64(tmp, 56);
0109ce73
JE
3070 b2 -= b5;
3071
3072 tmp = b7 ^ b0;
3733d3f9 3073 b7 = ror64(tmp, 35);
0109ce73
JE
3074 b0 -= b7;
3075
3076 tmp = b1 ^ b6;
3733d3f9 3077 b1 = ror64(tmp, 8);
0109ce73
JE
3078 b6 -= b1;
3079
3080 tmp = b7 ^ b2;
3733d3f9 3081 b7 = ror64(tmp, 43);
0109ce73
JE
3082 b2 -= b7;
3083
3084 tmp = b5 ^ b0;
3733d3f9 3085 b5 = ror64(tmp, 39);
0109ce73
JE
3086 b0 -= b5;
3087
3088 tmp = b3 ^ b6;
3733d3f9 3089 b3 = ror64(tmp, 29);
0109ce73
JE
3090 b6 -= b3;
3091
3092 tmp = b1 ^ b4;
3733d3f9 3093 b1 = ror64(tmp, 25);
0109ce73
JE
3094 b4 -= b1;
3095
3096 tmp = b3 ^ b0;
3733d3f9 3097 b3 = ror64(tmp, 17);
0109ce73
JE
3098 b0 -= b3;
3099
3100 tmp = b5 ^ b6;
3733d3f9 3101 b5 = ror64(tmp, 10);
0109ce73
JE
3102 b6 -= b5;
3103
3104 tmp = b7 ^ b4;
3733d3f9 3105 b7 = ror64(tmp, 50);
0109ce73
JE
3106 b4 -= b7;
3107
3108 tmp = b1 ^ b2;
3733d3f9 3109 b1 = ror64(tmp, 13);
0109ce73
JE
3110 b2 -= b1;
3111
3112 tmp = b7 ^ b6;
3733d3f9 3113 b7 = ror64(tmp, 24);
0109ce73
JE
3114 b6 -= b7 + k0 + t1;
3115 b7 -= k1 + 3;
3116
3117 tmp = b5 ^ b4;
3733d3f9 3118 b5 = ror64(tmp, 34);
0109ce73
JE
3119 b4 -= b5 + k7;
3120 b5 -= k8 + t0;
3121
3122 tmp = b3 ^ b2;
3733d3f9 3123 b3 = ror64(tmp, 30);
0109ce73
JE
3124 b2 -= b3 + k5;
3125 b3 -= k6;
3126
3127 tmp = b1 ^ b0;
3733d3f9 3128 b1 = ror64(tmp, 39);
0109ce73
JE
3129 b0 -= b1 + k3;
3130 b1 -= k4;
3131
3132 tmp = b3 ^ b4;
3733d3f9 3133 b3 = ror64(tmp, 56);
0109ce73
JE
3134 b4 -= b3;
3135
3136 tmp = b5 ^ b2;
3733d3f9 3137 b5 = ror64(tmp, 54);
0109ce73
JE
3138 b2 -= b5;
3139
3140 tmp = b7 ^ b0;
3733d3f9 3141 b7 = ror64(tmp, 9);
0109ce73
JE
3142 b0 -= b7;
3143
3144 tmp = b1 ^ b6;
3733d3f9 3145 b1 = ror64(tmp, 44);
0109ce73
JE
3146 b6 -= b1;
3147
3148 tmp = b7 ^ b2;
3733d3f9 3149 b7 = ror64(tmp, 39);
0109ce73
JE
3150 b2 -= b7;
3151
3152 tmp = b5 ^ b0;
3733d3f9 3153 b5 = ror64(tmp, 36);
0109ce73
JE
3154 b0 -= b5;
3155
3156 tmp = b3 ^ b6;
3733d3f9 3157 b3 = ror64(tmp, 49);
0109ce73
JE
3158 b6 -= b3;
3159
3160 tmp = b1 ^ b4;
3733d3f9 3161 b1 = ror64(tmp, 17);
0109ce73
JE
3162 b4 -= b1;
3163
3164 tmp = b3 ^ b0;
3733d3f9 3165 b3 = ror64(tmp, 42);
0109ce73
JE
3166 b0 -= b3;
3167
3168 tmp = b5 ^ b6;
3733d3f9 3169 b5 = ror64(tmp, 14);
0109ce73
JE
3170 b6 -= b5;
3171
3172 tmp = b7 ^ b4;
3733d3f9 3173 b7 = ror64(tmp, 27);
0109ce73
JE
3174 b4 -= b7;
3175
3176 tmp = b1 ^ b2;
3733d3f9 3177 b1 = ror64(tmp, 33);
0109ce73
JE
3178 b2 -= b1;
3179
3180 tmp = b7 ^ b6;
3733d3f9 3181 b7 = ror64(tmp, 37);
0109ce73
JE
3182 b6 -= b7 + k8 + t0;
3183 b7 -= k0 + 2;
3184
3185 tmp = b5 ^ b4;
3733d3f9 3186 b5 = ror64(tmp, 19);
0109ce73
JE
3187 b4 -= b5 + k6;
3188 b5 -= k7 + t2;
3189
3190 tmp = b3 ^ b2;
3733d3f9 3191 b3 = ror64(tmp, 36);
0109ce73
JE
3192 b2 -= b3 + k4;
3193 b3 -= k5;
3194
3195 tmp = b1 ^ b0;
3733d3f9 3196 b1 = ror64(tmp, 46);
0109ce73
JE
3197 b0 -= b1 + k2;
3198 b1 -= k3;
3199
3200 tmp = b3 ^ b4;
3733d3f9 3201 b3 = ror64(tmp, 22);
0109ce73
JE
3202 b4 -= b3;
3203
3204 tmp = b5 ^ b2;
3733d3f9 3205 b5 = ror64(tmp, 56);
0109ce73
JE
3206 b2 -= b5;
3207
3208 tmp = b7 ^ b0;
3733d3f9 3209 b7 = ror64(tmp, 35);
0109ce73
JE
3210 b0 -= b7;
3211
3212 tmp = b1 ^ b6;
3733d3f9 3213 b1 = ror64(tmp, 8);
0109ce73
JE
3214 b6 -= b1;
3215
3216 tmp = b7 ^ b2;
3733d3f9 3217 b7 = ror64(tmp, 43);
0109ce73
JE
3218 b2 -= b7;
3219
3220 tmp = b5 ^ b0;
3733d3f9 3221 b5 = ror64(tmp, 39);
0109ce73
JE
3222 b0 -= b5;
3223
3224 tmp = b3 ^ b6;
3733d3f9 3225 b3 = ror64(tmp, 29);
0109ce73
JE
3226 b6 -= b3;
3227
3228 tmp = b1 ^ b4;
3733d3f9 3229 b1 = ror64(tmp, 25);
0109ce73
JE
3230 b4 -= b1;
3231
3232 tmp = b3 ^ b0;
3733d3f9 3233 b3 = ror64(tmp, 17);
0109ce73
JE
3234 b0 -= b3;
3235
3236 tmp = b5 ^ b6;
3733d3f9 3237 b5 = ror64(tmp, 10);
0109ce73
JE
3238 b6 -= b5;
3239
3240 tmp = b7 ^ b4;
3733d3f9 3241 b7 = ror64(tmp, 50);
0109ce73
JE
3242 b4 -= b7;
3243
3244 tmp = b1 ^ b2;
3733d3f9 3245 b1 = ror64(tmp, 13);
0109ce73
JE
3246 b2 -= b1;
3247
3248 tmp = b7 ^ b6;
3733d3f9 3249 b7 = ror64(tmp, 24);
0109ce73
JE
3250 b6 -= b7 + k7 + t2;
3251 b7 -= k8 + 1;
3252
3253 tmp = b5 ^ b4;
3733d3f9 3254 b5 = ror64(tmp, 34);
0109ce73
JE
3255 b4 -= b5 + k5;
3256 b5 -= k6 + t1;
3257
3258 tmp = b3 ^ b2;
3733d3f9 3259 b3 = ror64(tmp, 30);
0109ce73
JE
3260 b2 -= b3 + k3;
3261 b3 -= k4;
3262
3263 tmp = b1 ^ b0;
3733d3f9 3264 b1 = ror64(tmp, 39);
0109ce73
JE
3265 b0 -= b1 + k1;
3266 b1 -= k2;
3267
3268 tmp = b3 ^ b4;
3733d3f9 3269 b3 = ror64(tmp, 56);
0109ce73
JE
3270 b4 -= b3;
3271
3272 tmp = b5 ^ b2;
3733d3f9 3273 b5 = ror64(tmp, 54);
0109ce73
JE
3274 b2 -= b5;
3275
3276 tmp = b7 ^ b0;
3733d3f9 3277 b7 = ror64(tmp, 9);
0109ce73
JE
3278 b0 -= b7;
3279
3280 tmp = b1 ^ b6;
3733d3f9 3281 b1 = ror64(tmp, 44);
0109ce73
JE
3282 b6 -= b1;
3283
3284 tmp = b7 ^ b2;
3733d3f9 3285 b7 = ror64(tmp, 39);
0109ce73
JE
3286 b2 -= b7;
3287
3288 tmp = b5 ^ b0;
3733d3f9 3289 b5 = ror64(tmp, 36);
0109ce73
JE
3290 b0 -= b5;
3291
3292 tmp = b3 ^ b6;
3733d3f9 3293 b3 = ror64(tmp, 49);
0109ce73
JE
3294 b6 -= b3;
3295
3296 tmp = b1 ^ b4;
3733d3f9 3297 b1 = ror64(tmp, 17);
0109ce73
JE
3298 b4 -= b1;
3299
3300 tmp = b3 ^ b0;
3733d3f9 3301 b3 = ror64(tmp, 42);
0109ce73
JE
3302 b0 -= b3;
3303
3304 tmp = b5 ^ b6;
3733d3f9 3305 b5 = ror64(tmp, 14);
0109ce73
JE
3306 b6 -= b5;
3307
3308 tmp = b7 ^ b4;
3733d3f9 3309 b7 = ror64(tmp, 27);
0109ce73
JE
3310 b4 -= b7;
3311
3312 tmp = b1 ^ b2;
3733d3f9 3313 b1 = ror64(tmp, 33);
0109ce73
JE
3314 b2 -= b1;
3315
3316 tmp = b7 ^ b6;
3733d3f9 3317 b7 = ror64(tmp, 37);
0109ce73
JE
3318 b6 -= b7 + k6 + t1;
3319 b7 -= k7;
3320
3321 tmp = b5 ^ b4;
3733d3f9 3322 b5 = ror64(tmp, 19);
0109ce73
JE
3323 b4 -= b5 + k4;
3324 b5 -= k5 + t0;
3325
3326 tmp = b3 ^ b2;
3733d3f9 3327 b3 = ror64(tmp, 36);
0109ce73
JE
3328 b2 -= b3 + k2;
3329 b3 -= k3;
3330
3331 tmp = b1 ^ b0;
3733d3f9 3332 b1 = ror64(tmp, 46);
0109ce73
JE
3333 b0 -= b1 + k0;
3334 b1 -= k1;
3335
3336 output[0] = b0;
3337 output[1] = b1;
3338 output[2] = b2;
3339 output[3] = b3;
3340
3341 output[7] = b7;
3342 output[6] = b6;
3343 output[5] = b5;
3344 output[4] = b4;
3345}
449bb812 3346
95f1840a 3347void threefish_encrypt_1024(struct threefish_key *key_ctx, u64 *input,
68ace624 3348 u64 *output)
39bd42b0
JC
3349{
3350 u64 b0 = input[0], b1 = input[1],
95f1840a
AS
3351 b2 = input[2], b3 = input[3],
3352 b4 = input[4], b5 = input[5],
3353 b6 = input[6], b7 = input[7],
3354 b8 = input[8], b9 = input[9],
3355 b10 = input[10], b11 = input[11],
3356 b12 = input[12], b13 = input[13],
3357 b14 = input[14], b15 = input[15];
3358 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
3359 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
3360 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
3361 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
3362 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
3363 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
3364 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
3365 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
3366 k16 = key_ctx->key[16];
3367 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
3368 t2 = key_ctx->tweak[2];
449bb812 3369
60eb8175
JC
3370 b1 += k1;
3371 b0 += b1 + k0;
e0a2d503 3372 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
3373
3374 b3 += k3;
3375 b2 += b3 + k2;
e0a2d503 3376 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
3377
3378 b5 += k5;
3379 b4 += b5 + k4;
e0a2d503 3380 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
3381
3382 b7 += k7;
3383 b6 += b7 + k6;
e0a2d503 3384 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
3385
3386 b9 += k9;
3387 b8 += b9 + k8;
e0a2d503 3388 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
3389
3390 b11 += k11;
3391 b10 += b11 + k10;
e0a2d503 3392 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
3393
3394 b13 += k13 + t0;
3395 b12 += b13 + k12;
e0a2d503 3396 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
3397
3398 b15 += k15;
3399 b14 += b15 + k14 + t1;
e0a2d503 3400 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
3401
3402 b0 += b9;
e0a2d503 3403 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
3404
3405 b2 += b13;
e0a2d503 3406 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
3407
3408 b6 += b11;
e0a2d503 3409 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
3410
3411 b4 += b15;
e0a2d503 3412 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
3413
3414 b10 += b7;
e0a2d503 3415 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
3416
3417 b12 += b3;
e0a2d503 3418 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
3419
3420 b14 += b5;
e0a2d503 3421 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
3422
3423 b8 += b1;
e0a2d503 3424 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
3425
3426 b0 += b7;
e0a2d503 3427 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
3428
3429 b2 += b5;
e0a2d503 3430 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
3431
3432 b4 += b3;
e0a2d503 3433 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
3434
3435 b6 += b1;
e0a2d503 3436 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
3437
3438 b12 += b15;
e0a2d503 3439 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
3440
3441 b14 += b13;
e0a2d503 3442 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
3443
3444 b8 += b11;
e0a2d503 3445 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
3446
3447 b10 += b9;
e0a2d503 3448 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
3449
3450 b0 += b15;
e0a2d503 3451 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
3452
3453 b2 += b11;
e0a2d503 3454 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
3455
3456 b6 += b13;
e0a2d503 3457 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
3458
3459 b4 += b9;
e0a2d503 3460 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
3461
3462 b14 += b1;
e0a2d503 3463 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
3464
3465 b8 += b5;
e0a2d503 3466 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
3467
3468 b10 += b3;
e0a2d503 3469 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
3470
3471 b12 += b7;
e0a2d503 3472 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
3473
3474 b1 += k2;
3475 b0 += b1 + k1;
e0a2d503 3476 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
3477
3478 b3 += k4;
3479 b2 += b3 + k3;
e0a2d503 3480 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
3481
3482 b5 += k6;
3483 b4 += b5 + k5;
e0a2d503 3484 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
3485
3486 b7 += k8;
3487 b6 += b7 + k7;
e0a2d503 3488 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
3489
3490 b9 += k10;
3491 b8 += b9 + k9;
e0a2d503 3492 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
3493
3494 b11 += k12;
3495 b10 += b11 + k11;
e0a2d503 3496 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
3497
3498 b13 += k14 + t1;
3499 b12 += b13 + k13;
e0a2d503 3500 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
3501
3502 b15 += k16 + 1;
3503 b14 += b15 + k15 + t2;
e0a2d503 3504 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
3505
3506 b0 += b9;
e0a2d503 3507 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
3508
3509 b2 += b13;
e0a2d503 3510 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
3511
3512 b6 += b11;
e0a2d503 3513 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
3514
3515 b4 += b15;
e0a2d503 3516 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
3517
3518 b10 += b7;
e0a2d503 3519 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
3520
3521 b12 += b3;
e0a2d503 3522 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
3523
3524 b14 += b5;
e0a2d503 3525 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
3526
3527 b8 += b1;
e0a2d503 3528 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
3529
3530 b0 += b7;
e0a2d503 3531 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
3532
3533 b2 += b5;
e0a2d503 3534 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
3535
3536 b4 += b3;
e0a2d503 3537 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
3538
3539 b6 += b1;
e0a2d503 3540 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
3541
3542 b12 += b15;
e0a2d503 3543 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
3544
3545 b14 += b13;
e0a2d503 3546 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
3547
3548 b8 += b11;
e0a2d503 3549 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
3550
3551 b10 += b9;
e0a2d503 3552 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
3553
3554 b0 += b15;
e0a2d503 3555 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
3556
3557 b2 += b11;
e0a2d503 3558 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
3559
3560 b6 += b13;
e0a2d503 3561 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
3562
3563 b4 += b9;
e0a2d503 3564 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
3565
3566 b14 += b1;
e0a2d503 3567 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
3568
3569 b8 += b5;
e0a2d503 3570 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
3571
3572 b10 += b3;
e0a2d503 3573 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
3574
3575 b12 += b7;
e0a2d503 3576 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
3577
3578 b1 += k3;
3579 b0 += b1 + k2;
e0a2d503 3580 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
3581
3582 b3 += k5;
3583 b2 += b3 + k4;
e0a2d503 3584 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
3585
3586 b5 += k7;
3587 b4 += b5 + k6;
e0a2d503 3588 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
3589
3590 b7 += k9;
3591 b6 += b7 + k8;
e0a2d503 3592 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
3593
3594 b9 += k11;
3595 b8 += b9 + k10;
e0a2d503 3596 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
3597
3598 b11 += k13;
3599 b10 += b11 + k12;
e0a2d503 3600 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
3601
3602 b13 += k15 + t2;
3603 b12 += b13 + k14;
e0a2d503 3604 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
3605
3606 b15 += k0 + 2;
3607 b14 += b15 + k16 + t0;
e0a2d503 3608 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
3609
3610 b0 += b9;
e0a2d503 3611 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
3612
3613 b2 += b13;
e0a2d503 3614 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
3615
3616 b6 += b11;
e0a2d503 3617 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
3618
3619 b4 += b15;
e0a2d503 3620 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
3621
3622 b10 += b7;
e0a2d503 3623 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
3624
3625 b12 += b3;
e0a2d503 3626 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
3627
3628 b14 += b5;
e0a2d503 3629 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
3630
3631 b8 += b1;
e0a2d503 3632 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
3633
3634 b0 += b7;
e0a2d503 3635 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
3636
3637 b2 += b5;
e0a2d503 3638 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
3639
3640 b4 += b3;
e0a2d503 3641 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
3642
3643 b6 += b1;
e0a2d503 3644 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
3645
3646 b12 += b15;
e0a2d503 3647 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
3648
3649 b14 += b13;
e0a2d503 3650 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
3651
3652 b8 += b11;
e0a2d503 3653 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
3654
3655 b10 += b9;
e0a2d503 3656 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
3657
3658 b0 += b15;
e0a2d503 3659 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
3660
3661 b2 += b11;
e0a2d503 3662 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
3663
3664 b6 += b13;
e0a2d503 3665 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
3666
3667 b4 += b9;
e0a2d503 3668 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
3669
3670 b14 += b1;
e0a2d503 3671 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
3672
3673 b8 += b5;
e0a2d503 3674 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
3675
3676 b10 += b3;
e0a2d503 3677 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
3678
3679 b12 += b7;
e0a2d503 3680 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
3681
3682 b1 += k4;
3683 b0 += b1 + k3;
e0a2d503 3684 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
3685
3686 b3 += k6;
3687 b2 += b3 + k5;
e0a2d503 3688 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
3689
3690 b5 += k8;
3691 b4 += b5 + k7;
e0a2d503 3692 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
3693
3694 b7 += k10;
3695 b6 += b7 + k9;
e0a2d503 3696 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
3697
3698 b9 += k12;
3699 b8 += b9 + k11;
e0a2d503 3700 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
3701
3702 b11 += k14;
3703 b10 += b11 + k13;
e0a2d503 3704 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
3705
3706 b13 += k16 + t0;
3707 b12 += b13 + k15;
e0a2d503 3708 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
3709
3710 b15 += k1 + 3;
3711 b14 += b15 + k0 + t1;
e0a2d503 3712 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
3713
3714 b0 += b9;
e0a2d503 3715 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
3716
3717 b2 += b13;
e0a2d503 3718 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
3719
3720 b6 += b11;
e0a2d503 3721 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
3722
3723 b4 += b15;
e0a2d503 3724 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
3725
3726 b10 += b7;
e0a2d503 3727 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
3728
3729 b12 += b3;
e0a2d503 3730 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
3731
3732 b14 += b5;
e0a2d503 3733 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
3734
3735 b8 += b1;
e0a2d503 3736 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
3737
3738 b0 += b7;
e0a2d503 3739 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
3740
3741 b2 += b5;
e0a2d503 3742 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
3743
3744 b4 += b3;
e0a2d503 3745 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
3746
3747 b6 += b1;
e0a2d503 3748 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
3749
3750 b12 += b15;
e0a2d503 3751 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
3752
3753 b14 += b13;
e0a2d503 3754 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
3755
3756 b8 += b11;
e0a2d503 3757 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
3758
3759 b10 += b9;
e0a2d503 3760 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
3761
3762 b0 += b15;
e0a2d503 3763 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
3764
3765 b2 += b11;
e0a2d503 3766 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
3767
3768 b6 += b13;
e0a2d503 3769 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
3770
3771 b4 += b9;
e0a2d503 3772 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
3773
3774 b14 += b1;
e0a2d503 3775 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
3776
3777 b8 += b5;
e0a2d503 3778 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
3779
3780 b10 += b3;
e0a2d503 3781 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
3782
3783 b12 += b7;
e0a2d503 3784 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
3785
3786 b1 += k5;
3787 b0 += b1 + k4;
e0a2d503 3788 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
3789
3790 b3 += k7;
3791 b2 += b3 + k6;
e0a2d503 3792 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
3793
3794 b5 += k9;
3795 b4 += b5 + k8;
e0a2d503 3796 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
3797
3798 b7 += k11;
3799 b6 += b7 + k10;
e0a2d503 3800 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
3801
3802 b9 += k13;
3803 b8 += b9 + k12;
e0a2d503 3804 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
3805
3806 b11 += k15;
3807 b10 += b11 + k14;
e0a2d503 3808 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
3809
3810 b13 += k0 + t1;
3811 b12 += b13 + k16;
e0a2d503 3812 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
3813
3814 b15 += k2 + 4;
3815 b14 += b15 + k1 + t2;
e0a2d503 3816 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
3817
3818 b0 += b9;
e0a2d503 3819 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
3820
3821 b2 += b13;
e0a2d503 3822 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
3823
3824 b6 += b11;
e0a2d503 3825 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
3826
3827 b4 += b15;
e0a2d503 3828 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
3829
3830 b10 += b7;
e0a2d503 3831 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
3832
3833 b12 += b3;
e0a2d503 3834 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
3835
3836 b14 += b5;
e0a2d503 3837 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
3838
3839 b8 += b1;
e0a2d503 3840 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
3841
3842 b0 += b7;
e0a2d503 3843 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
3844
3845 b2 += b5;
e0a2d503 3846 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
3847
3848 b4 += b3;
e0a2d503 3849 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
3850
3851 b6 += b1;
e0a2d503 3852 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
3853
3854 b12 += b15;
e0a2d503 3855 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
3856
3857 b14 += b13;
e0a2d503 3858 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
3859
3860 b8 += b11;
e0a2d503 3861 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
3862
3863 b10 += b9;
e0a2d503 3864 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
3865
3866 b0 += b15;
e0a2d503 3867 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
3868
3869 b2 += b11;
e0a2d503 3870 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
3871
3872 b6 += b13;
e0a2d503 3873 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
3874
3875 b4 += b9;
e0a2d503 3876 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
3877
3878 b14 += b1;
e0a2d503 3879 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
3880
3881 b8 += b5;
e0a2d503 3882 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
3883
3884 b10 += b3;
e0a2d503 3885 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
3886
3887 b12 += b7;
e0a2d503 3888 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
3889
3890 b1 += k6;
3891 b0 += b1 + k5;
e0a2d503 3892 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
3893
3894 b3 += k8;
3895 b2 += b3 + k7;
e0a2d503 3896 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
3897
3898 b5 += k10;
3899 b4 += b5 + k9;
e0a2d503 3900 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
3901
3902 b7 += k12;
3903 b6 += b7 + k11;
e0a2d503 3904 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
3905
3906 b9 += k14;
3907 b8 += b9 + k13;
e0a2d503 3908 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
3909
3910 b11 += k16;
3911 b10 += b11 + k15;
e0a2d503 3912 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
3913
3914 b13 += k1 + t2;
3915 b12 += b13 + k0;
e0a2d503 3916 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
3917
3918 b15 += k3 + 5;
3919 b14 += b15 + k2 + t0;
e0a2d503 3920 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
3921
3922 b0 += b9;
e0a2d503 3923 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
3924
3925 b2 += b13;
e0a2d503 3926 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
3927
3928 b6 += b11;
e0a2d503 3929 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
3930
3931 b4 += b15;
e0a2d503 3932 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
3933
3934 b10 += b7;
e0a2d503 3935 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
3936
3937 b12 += b3;
e0a2d503 3938 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
3939
3940 b14 += b5;
e0a2d503 3941 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
3942
3943 b8 += b1;
e0a2d503 3944 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
3945
3946 b0 += b7;
e0a2d503 3947 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
3948
3949 b2 += b5;
e0a2d503 3950 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
3951
3952 b4 += b3;
e0a2d503 3953 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
3954
3955 b6 += b1;
e0a2d503 3956 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
3957
3958 b12 += b15;
e0a2d503 3959 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
3960
3961 b14 += b13;
e0a2d503 3962 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
3963
3964 b8 += b11;
e0a2d503 3965 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
3966
3967 b10 += b9;
e0a2d503 3968 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
3969
3970 b0 += b15;
e0a2d503 3971 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
3972
3973 b2 += b11;
e0a2d503 3974 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
3975
3976 b6 += b13;
e0a2d503 3977 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
3978
3979 b4 += b9;
e0a2d503 3980 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
3981
3982 b14 += b1;
e0a2d503 3983 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
3984
3985 b8 += b5;
e0a2d503 3986 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
3987
3988 b10 += b3;
e0a2d503 3989 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
3990
3991 b12 += b7;
e0a2d503 3992 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
3993
3994 b1 += k7;
3995 b0 += b1 + k6;
e0a2d503 3996 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
3997
3998 b3 += k9;
3999 b2 += b3 + k8;
e0a2d503 4000 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
4001
4002 b5 += k11;
4003 b4 += b5 + k10;
e0a2d503 4004 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
4005
4006 b7 += k13;
4007 b6 += b7 + k12;
e0a2d503 4008 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
4009
4010 b9 += k15;
4011 b8 += b9 + k14;
e0a2d503 4012 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
4013
4014 b11 += k0;
4015 b10 += b11 + k16;
e0a2d503 4016 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
4017
4018 b13 += k2 + t0;
4019 b12 += b13 + k1;
e0a2d503 4020 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
4021
4022 b15 += k4 + 6;
4023 b14 += b15 + k3 + t1;
e0a2d503 4024 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
4025
4026 b0 += b9;
e0a2d503 4027 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
4028
4029 b2 += b13;
e0a2d503 4030 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
4031
4032 b6 += b11;
e0a2d503 4033 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
4034
4035 b4 += b15;
e0a2d503 4036 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
4037
4038 b10 += b7;
e0a2d503 4039 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
4040
4041 b12 += b3;
e0a2d503 4042 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
4043
4044 b14 += b5;
e0a2d503 4045 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
4046
4047 b8 += b1;
e0a2d503 4048 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
4049
4050 b0 += b7;
e0a2d503 4051 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
4052
4053 b2 += b5;
e0a2d503 4054 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
4055
4056 b4 += b3;
e0a2d503 4057 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
4058
4059 b6 += b1;
e0a2d503 4060 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
4061
4062 b12 += b15;
e0a2d503 4063 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
4064
4065 b14 += b13;
e0a2d503 4066 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
4067
4068 b8 += b11;
e0a2d503 4069 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
4070
4071 b10 += b9;
e0a2d503 4072 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
4073
4074 b0 += b15;
e0a2d503 4075 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
4076
4077 b2 += b11;
e0a2d503 4078 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
4079
4080 b6 += b13;
e0a2d503 4081 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
4082
4083 b4 += b9;
e0a2d503 4084 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
4085
4086 b14 += b1;
e0a2d503 4087 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
4088
4089 b8 += b5;
e0a2d503 4090 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
4091
4092 b10 += b3;
e0a2d503 4093 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
4094
4095 b12 += b7;
e0a2d503 4096 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
4097
4098 b1 += k8;
4099 b0 += b1 + k7;
e0a2d503 4100 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
4101
4102 b3 += k10;
4103 b2 += b3 + k9;
e0a2d503 4104 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
4105
4106 b5 += k12;
4107 b4 += b5 + k11;
e0a2d503 4108 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
4109
4110 b7 += k14;
4111 b6 += b7 + k13;
e0a2d503 4112 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
4113
4114 b9 += k16;
4115 b8 += b9 + k15;
e0a2d503 4116 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
4117
4118 b11 += k1;
4119 b10 += b11 + k0;
e0a2d503 4120 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
4121
4122 b13 += k3 + t1;
4123 b12 += b13 + k2;
e0a2d503 4124 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
4125
4126 b15 += k5 + 7;
4127 b14 += b15 + k4 + t2;
e0a2d503 4128 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
4129
4130 b0 += b9;
e0a2d503 4131 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
4132
4133 b2 += b13;
e0a2d503 4134 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
4135
4136 b6 += b11;
e0a2d503 4137 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
4138
4139 b4 += b15;
e0a2d503 4140 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
4141
4142 b10 += b7;
e0a2d503 4143 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
4144
4145 b12 += b3;
e0a2d503 4146 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
4147
4148 b14 += b5;
e0a2d503 4149 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
4150
4151 b8 += b1;
e0a2d503 4152 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
4153
4154 b0 += b7;
e0a2d503 4155 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
4156
4157 b2 += b5;
e0a2d503 4158 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
4159
4160 b4 += b3;
e0a2d503 4161 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
4162
4163 b6 += b1;
e0a2d503 4164 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
4165
4166 b12 += b15;
e0a2d503 4167 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
4168
4169 b14 += b13;
e0a2d503 4170 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
4171
4172 b8 += b11;
e0a2d503 4173 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
4174
4175 b10 += b9;
e0a2d503 4176 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
4177
4178 b0 += b15;
e0a2d503 4179 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
4180
4181 b2 += b11;
e0a2d503 4182 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
4183
4184 b6 += b13;
e0a2d503 4185 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
4186
4187 b4 += b9;
e0a2d503 4188 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
4189
4190 b14 += b1;
e0a2d503 4191 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
4192
4193 b8 += b5;
e0a2d503 4194 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
4195
4196 b10 += b3;
e0a2d503 4197 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
4198
4199 b12 += b7;
e0a2d503 4200 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
4201
4202 b1 += k9;
4203 b0 += b1 + k8;
e0a2d503 4204 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
4205
4206 b3 += k11;
4207 b2 += b3 + k10;
e0a2d503 4208 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
4209
4210 b5 += k13;
4211 b4 += b5 + k12;
e0a2d503 4212 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
4213
4214 b7 += k15;
4215 b6 += b7 + k14;
e0a2d503 4216 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
4217
4218 b9 += k0;
4219 b8 += b9 + k16;
e0a2d503 4220 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
4221
4222 b11 += k2;
4223 b10 += b11 + k1;
e0a2d503 4224 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
4225
4226 b13 += k4 + t2;
4227 b12 += b13 + k3;
e0a2d503 4228 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
4229
4230 b15 += k6 + 8;
4231 b14 += b15 + k5 + t0;
e0a2d503 4232 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
4233
4234 b0 += b9;
e0a2d503 4235 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
4236
4237 b2 += b13;
e0a2d503 4238 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
4239
4240 b6 += b11;
e0a2d503 4241 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
4242
4243 b4 += b15;
e0a2d503 4244 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
4245
4246 b10 += b7;
e0a2d503 4247 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
4248
4249 b12 += b3;
e0a2d503 4250 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
4251
4252 b14 += b5;
e0a2d503 4253 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
4254
4255 b8 += b1;
e0a2d503 4256 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
4257
4258 b0 += b7;
e0a2d503 4259 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
4260
4261 b2 += b5;
e0a2d503 4262 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
4263
4264 b4 += b3;
e0a2d503 4265 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
4266
4267 b6 += b1;
e0a2d503 4268 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
4269
4270 b12 += b15;
e0a2d503 4271 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
4272
4273 b14 += b13;
e0a2d503 4274 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
4275
4276 b8 += b11;
e0a2d503 4277 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
4278
4279 b10 += b9;
e0a2d503 4280 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
4281
4282 b0 += b15;
e0a2d503 4283 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
4284
4285 b2 += b11;
e0a2d503 4286 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
4287
4288 b6 += b13;
e0a2d503 4289 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
4290
4291 b4 += b9;
e0a2d503 4292 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
4293
4294 b14 += b1;
e0a2d503 4295 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
4296
4297 b8 += b5;
e0a2d503 4298 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
4299
4300 b10 += b3;
e0a2d503 4301 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
4302
4303 b12 += b7;
e0a2d503 4304 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
4305
4306 b1 += k10;
4307 b0 += b1 + k9;
e0a2d503 4308 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
4309
4310 b3 += k12;
4311 b2 += b3 + k11;
e0a2d503 4312 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
4313
4314 b5 += k14;
4315 b4 += b5 + k13;
e0a2d503 4316 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
4317
4318 b7 += k16;
4319 b6 += b7 + k15;
e0a2d503 4320 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
4321
4322 b9 += k1;
4323 b8 += b9 + k0;
e0a2d503 4324 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
4325
4326 b11 += k3;
4327 b10 += b11 + k2;
e0a2d503 4328 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
4329
4330 b13 += k5 + t0;
4331 b12 += b13 + k4;
e0a2d503 4332 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
4333
4334 b15 += k7 + 9;
4335 b14 += b15 + k6 + t1;
e0a2d503 4336 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
4337
4338 b0 += b9;
e0a2d503 4339 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
4340
4341 b2 += b13;
e0a2d503 4342 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
4343
4344 b6 += b11;
e0a2d503 4345 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
4346
4347 b4 += b15;
e0a2d503 4348 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
4349
4350 b10 += b7;
e0a2d503 4351 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
4352
4353 b12 += b3;
e0a2d503 4354 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
4355
4356 b14 += b5;
e0a2d503 4357 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
4358
4359 b8 += b1;
e0a2d503 4360 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
4361
4362 b0 += b7;
e0a2d503 4363 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
4364
4365 b2 += b5;
e0a2d503 4366 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
4367
4368 b4 += b3;
e0a2d503 4369 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
4370
4371 b6 += b1;
e0a2d503 4372 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
4373
4374 b12 += b15;
e0a2d503 4375 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
4376
4377 b14 += b13;
e0a2d503 4378 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
4379
4380 b8 += b11;
e0a2d503 4381 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
4382
4383 b10 += b9;
e0a2d503 4384 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
4385
4386 b0 += b15;
e0a2d503 4387 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
4388
4389 b2 += b11;
e0a2d503 4390 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
4391
4392 b6 += b13;
e0a2d503 4393 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
4394
4395 b4 += b9;
e0a2d503 4396 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
4397
4398 b14 += b1;
e0a2d503 4399 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
4400
4401 b8 += b5;
e0a2d503 4402 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
4403
4404 b10 += b3;
e0a2d503 4405 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
4406
4407 b12 += b7;
e0a2d503 4408 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
4409
4410 b1 += k11;
4411 b0 += b1 + k10;
e0a2d503 4412 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
4413
4414 b3 += k13;
4415 b2 += b3 + k12;
e0a2d503 4416 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
4417
4418 b5 += k15;
4419 b4 += b5 + k14;
e0a2d503 4420 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
4421
4422 b7 += k0;
4423 b6 += b7 + k16;
e0a2d503 4424 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
4425
4426 b9 += k2;
4427 b8 += b9 + k1;
e0a2d503 4428 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
4429
4430 b11 += k4;
4431 b10 += b11 + k3;
e0a2d503 4432 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
4433
4434 b13 += k6 + t1;
4435 b12 += b13 + k5;
e0a2d503 4436 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
4437
4438 b15 += k8 + 10;
4439 b14 += b15 + k7 + t2;
e0a2d503 4440 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
4441
4442 b0 += b9;
e0a2d503 4443 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
4444
4445 b2 += b13;
e0a2d503 4446 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
4447
4448 b6 += b11;
e0a2d503 4449 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
4450
4451 b4 += b15;
e0a2d503 4452 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
4453
4454 b10 += b7;
e0a2d503 4455 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
4456
4457 b12 += b3;
e0a2d503 4458 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
4459
4460 b14 += b5;
e0a2d503 4461 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
4462
4463 b8 += b1;
e0a2d503 4464 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
4465
4466 b0 += b7;
e0a2d503 4467 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
4468
4469 b2 += b5;
e0a2d503 4470 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
4471
4472 b4 += b3;
e0a2d503 4473 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
4474
4475 b6 += b1;
e0a2d503 4476 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
4477
4478 b12 += b15;
e0a2d503 4479 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
4480
4481 b14 += b13;
e0a2d503 4482 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
4483
4484 b8 += b11;
e0a2d503 4485 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
4486
4487 b10 += b9;
e0a2d503 4488 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
4489
4490 b0 += b15;
e0a2d503 4491 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
4492
4493 b2 += b11;
e0a2d503 4494 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
4495
4496 b6 += b13;
e0a2d503 4497 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
4498
4499 b4 += b9;
e0a2d503 4500 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
4501
4502 b14 += b1;
e0a2d503 4503 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
4504
4505 b8 += b5;
e0a2d503 4506 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
4507
4508 b10 += b3;
e0a2d503 4509 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
4510
4511 b12 += b7;
e0a2d503 4512 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
4513
4514 b1 += k12;
4515 b0 += b1 + k11;
e0a2d503 4516 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
4517
4518 b3 += k14;
4519 b2 += b3 + k13;
e0a2d503 4520 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
4521
4522 b5 += k16;
4523 b4 += b5 + k15;
e0a2d503 4524 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
4525
4526 b7 += k1;
4527 b6 += b7 + k0;
e0a2d503 4528 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
4529
4530 b9 += k3;
4531 b8 += b9 + k2;
e0a2d503 4532 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
4533
4534 b11 += k5;
4535 b10 += b11 + k4;
e0a2d503 4536 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
4537
4538 b13 += k7 + t2;
4539 b12 += b13 + k6;
e0a2d503 4540 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
4541
4542 b15 += k9 + 11;
4543 b14 += b15 + k8 + t0;
e0a2d503 4544 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
4545
4546 b0 += b9;
e0a2d503 4547 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
4548
4549 b2 += b13;
e0a2d503 4550 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
4551
4552 b6 += b11;
e0a2d503 4553 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
4554
4555 b4 += b15;
e0a2d503 4556 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
4557
4558 b10 += b7;
e0a2d503 4559 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
4560
4561 b12 += b3;
e0a2d503 4562 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
4563
4564 b14 += b5;
e0a2d503 4565 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
4566
4567 b8 += b1;
e0a2d503 4568 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
4569
4570 b0 += b7;
e0a2d503 4571 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
4572
4573 b2 += b5;
e0a2d503 4574 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
4575
4576 b4 += b3;
e0a2d503 4577 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
4578
4579 b6 += b1;
e0a2d503 4580 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
4581
4582 b12 += b15;
e0a2d503 4583 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
4584
4585 b14 += b13;
e0a2d503 4586 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
4587
4588 b8 += b11;
e0a2d503 4589 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
4590
4591 b10 += b9;
e0a2d503 4592 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
4593
4594 b0 += b15;
e0a2d503 4595 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
4596
4597 b2 += b11;
e0a2d503 4598 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
4599
4600 b6 += b13;
e0a2d503 4601 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
4602
4603 b4 += b9;
e0a2d503 4604 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
4605
4606 b14 += b1;
e0a2d503 4607 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
4608
4609 b8 += b5;
e0a2d503 4610 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
4611
4612 b10 += b3;
e0a2d503 4613 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
4614
4615 b12 += b7;
e0a2d503 4616 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
4617
4618 b1 += k13;
4619 b0 += b1 + k12;
e0a2d503 4620 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
4621
4622 b3 += k15;
4623 b2 += b3 + k14;
e0a2d503 4624 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
4625
4626 b5 += k0;
4627 b4 += b5 + k16;
e0a2d503 4628 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
4629
4630 b7 += k2;
4631 b6 += b7 + k1;
e0a2d503 4632 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
4633
4634 b9 += k4;
4635 b8 += b9 + k3;
e0a2d503 4636 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
4637
4638 b11 += k6;
4639 b10 += b11 + k5;
e0a2d503 4640 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
4641
4642 b13 += k8 + t0;
4643 b12 += b13 + k7;
e0a2d503 4644 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
4645
4646 b15 += k10 + 12;
4647 b14 += b15 + k9 + t1;
e0a2d503 4648 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
4649
4650 b0 += b9;
e0a2d503 4651 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
4652
4653 b2 += b13;
e0a2d503 4654 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
4655
4656 b6 += b11;
e0a2d503 4657 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
4658
4659 b4 += b15;
e0a2d503 4660 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
4661
4662 b10 += b7;
e0a2d503 4663 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
4664
4665 b12 += b3;
e0a2d503 4666 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
4667
4668 b14 += b5;
e0a2d503 4669 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
4670
4671 b8 += b1;
e0a2d503 4672 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
4673
4674 b0 += b7;
e0a2d503 4675 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
4676
4677 b2 += b5;
e0a2d503 4678 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
4679
4680 b4 += b3;
e0a2d503 4681 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
4682
4683 b6 += b1;
e0a2d503 4684 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
4685
4686 b12 += b15;
e0a2d503 4687 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
4688
4689 b14 += b13;
e0a2d503 4690 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
4691
4692 b8 += b11;
e0a2d503 4693 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
4694
4695 b10 += b9;
e0a2d503 4696 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
4697
4698 b0 += b15;
e0a2d503 4699 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
4700
4701 b2 += b11;
e0a2d503 4702 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
4703
4704 b6 += b13;
e0a2d503 4705 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
4706
4707 b4 += b9;
e0a2d503 4708 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
4709
4710 b14 += b1;
e0a2d503 4711 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
4712
4713 b8 += b5;
e0a2d503 4714 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
4715
4716 b10 += b3;
e0a2d503 4717 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
4718
4719 b12 += b7;
e0a2d503 4720 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
4721
4722 b1 += k14;
4723 b0 += b1 + k13;
e0a2d503 4724 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
4725
4726 b3 += k16;
4727 b2 += b3 + k15;
e0a2d503 4728 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
4729
4730 b5 += k1;
4731 b4 += b5 + k0;
e0a2d503 4732 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
4733
4734 b7 += k3;
4735 b6 += b7 + k2;
e0a2d503 4736 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
4737
4738 b9 += k5;
4739 b8 += b9 + k4;
e0a2d503 4740 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
4741
4742 b11 += k7;
4743 b10 += b11 + k6;
e0a2d503 4744 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
4745
4746 b13 += k9 + t1;
4747 b12 += b13 + k8;
e0a2d503 4748 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
4749
4750 b15 += k11 + 13;
4751 b14 += b15 + k10 + t2;
e0a2d503 4752 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
4753
4754 b0 += b9;
e0a2d503 4755 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
4756
4757 b2 += b13;
e0a2d503 4758 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
4759
4760 b6 += b11;
e0a2d503 4761 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
4762
4763 b4 += b15;
e0a2d503 4764 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
4765
4766 b10 += b7;
e0a2d503 4767 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
4768
4769 b12 += b3;
e0a2d503 4770 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
4771
4772 b14 += b5;
e0a2d503 4773 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
4774
4775 b8 += b1;
e0a2d503 4776 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
4777
4778 b0 += b7;
e0a2d503 4779 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
4780
4781 b2 += b5;
e0a2d503 4782 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
4783
4784 b4 += b3;
e0a2d503 4785 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
4786
4787 b6 += b1;
e0a2d503 4788 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
4789
4790 b12 += b15;
e0a2d503 4791 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
4792
4793 b14 += b13;
e0a2d503 4794 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
4795
4796 b8 += b11;
e0a2d503 4797 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
4798
4799 b10 += b9;
e0a2d503 4800 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
4801
4802 b0 += b15;
e0a2d503 4803 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
4804
4805 b2 += b11;
e0a2d503 4806 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
4807
4808 b6 += b13;
e0a2d503 4809 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
4810
4811 b4 += b9;
e0a2d503 4812 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
4813
4814 b14 += b1;
e0a2d503 4815 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
4816
4817 b8 += b5;
e0a2d503 4818 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
4819
4820 b10 += b3;
e0a2d503 4821 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
4822
4823 b12 += b7;
e0a2d503 4824 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
4825
4826 b1 += k15;
4827 b0 += b1 + k14;
e0a2d503 4828 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
4829
4830 b3 += k0;
4831 b2 += b3 + k16;
e0a2d503 4832 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
4833
4834 b5 += k2;
4835 b4 += b5 + k1;
e0a2d503 4836 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
4837
4838 b7 += k4;
4839 b6 += b7 + k3;
e0a2d503 4840 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
4841
4842 b9 += k6;
4843 b8 += b9 + k5;
e0a2d503 4844 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
4845
4846 b11 += k8;
4847 b10 += b11 + k7;
e0a2d503 4848 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
4849
4850 b13 += k10 + t2;
4851 b12 += b13 + k9;
e0a2d503 4852 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
4853
4854 b15 += k12 + 14;
4855 b14 += b15 + k11 + t0;
e0a2d503 4856 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
4857
4858 b0 += b9;
e0a2d503 4859 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
4860
4861 b2 += b13;
e0a2d503 4862 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
4863
4864 b6 += b11;
e0a2d503 4865 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
4866
4867 b4 += b15;
e0a2d503 4868 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
4869
4870 b10 += b7;
e0a2d503 4871 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
4872
4873 b12 += b3;
e0a2d503 4874 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
4875
4876 b14 += b5;
e0a2d503 4877 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
4878
4879 b8 += b1;
e0a2d503 4880 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
4881
4882 b0 += b7;
e0a2d503 4883 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
4884
4885 b2 += b5;
e0a2d503 4886 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
4887
4888 b4 += b3;
e0a2d503 4889 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
4890
4891 b6 += b1;
e0a2d503 4892 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
4893
4894 b12 += b15;
e0a2d503 4895 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
4896
4897 b14 += b13;
e0a2d503 4898 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
4899
4900 b8 += b11;
e0a2d503 4901 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
4902
4903 b10 += b9;
e0a2d503 4904 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
4905
4906 b0 += b15;
e0a2d503 4907 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
4908
4909 b2 += b11;
e0a2d503 4910 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
4911
4912 b6 += b13;
e0a2d503 4913 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
4914
4915 b4 += b9;
e0a2d503 4916 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
4917
4918 b14 += b1;
e0a2d503 4919 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
4920
4921 b8 += b5;
e0a2d503 4922 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
4923
4924 b10 += b3;
e0a2d503 4925 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
4926
4927 b12 += b7;
e0a2d503 4928 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
4929
4930 b1 += k16;
4931 b0 += b1 + k15;
e0a2d503 4932 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
4933
4934 b3 += k1;
4935 b2 += b3 + k0;
e0a2d503 4936 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
4937
4938 b5 += k3;
4939 b4 += b5 + k2;
e0a2d503 4940 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
4941
4942 b7 += k5;
4943 b6 += b7 + k4;
e0a2d503 4944 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
4945
4946 b9 += k7;
4947 b8 += b9 + k6;
e0a2d503 4948 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
4949
4950 b11 += k9;
4951 b10 += b11 + k8;
e0a2d503 4952 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
4953
4954 b13 += k11 + t0;
4955 b12 += b13 + k10;
e0a2d503 4956 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
4957
4958 b15 += k13 + 15;
4959 b14 += b15 + k12 + t1;
e0a2d503 4960 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
4961
4962 b0 += b9;
e0a2d503 4963 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
4964
4965 b2 += b13;
e0a2d503 4966 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
4967
4968 b6 += b11;
e0a2d503 4969 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
4970
4971 b4 += b15;
e0a2d503 4972 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
4973
4974 b10 += b7;
e0a2d503 4975 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
4976
4977 b12 += b3;
e0a2d503 4978 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
4979
4980 b14 += b5;
e0a2d503 4981 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
4982
4983 b8 += b1;
e0a2d503 4984 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
4985
4986 b0 += b7;
e0a2d503 4987 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
4988
4989 b2 += b5;
e0a2d503 4990 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
4991
4992 b4 += b3;
e0a2d503 4993 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
4994
4995 b6 += b1;
e0a2d503 4996 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
4997
4998 b12 += b15;
e0a2d503 4999 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
5000
5001 b14 += b13;
e0a2d503 5002 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
5003
5004 b8 += b11;
e0a2d503 5005 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
5006
5007 b10 += b9;
e0a2d503 5008 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
5009
5010 b0 += b15;
e0a2d503 5011 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
5012
5013 b2 += b11;
e0a2d503 5014 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
5015
5016 b6 += b13;
e0a2d503 5017 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
5018
5019 b4 += b9;
e0a2d503 5020 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
5021
5022 b14 += b1;
e0a2d503 5023 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
5024
5025 b8 += b5;
e0a2d503 5026 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
5027
5028 b10 += b3;
e0a2d503 5029 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
5030
5031 b12 += b7;
e0a2d503 5032 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
5033
5034 b1 += k0;
5035 b0 += b1 + k16;
e0a2d503 5036 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
5037
5038 b3 += k2;
5039 b2 += b3 + k1;
e0a2d503 5040 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
5041
5042 b5 += k4;
5043 b4 += b5 + k3;
e0a2d503 5044 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
5045
5046 b7 += k6;
5047 b6 += b7 + k5;
e0a2d503 5048 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
5049
5050 b9 += k8;
5051 b8 += b9 + k7;
e0a2d503 5052 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
5053
5054 b11 += k10;
5055 b10 += b11 + k9;
e0a2d503 5056 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
5057
5058 b13 += k12 + t1;
5059 b12 += b13 + k11;
e0a2d503 5060 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
5061
5062 b15 += k14 + 16;
5063 b14 += b15 + k13 + t2;
e0a2d503 5064 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
5065
5066 b0 += b9;
e0a2d503 5067 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
5068
5069 b2 += b13;
e0a2d503 5070 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
5071
5072 b6 += b11;
e0a2d503 5073 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
5074
5075 b4 += b15;
e0a2d503 5076 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
5077
5078 b10 += b7;
e0a2d503 5079 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
5080
5081 b12 += b3;
e0a2d503 5082 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
5083
5084 b14 += b5;
e0a2d503 5085 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
5086
5087 b8 += b1;
e0a2d503 5088 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
5089
5090 b0 += b7;
e0a2d503 5091 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
5092
5093 b2 += b5;
e0a2d503 5094 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
5095
5096 b4 += b3;
e0a2d503 5097 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
5098
5099 b6 += b1;
e0a2d503 5100 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
5101
5102 b12 += b15;
e0a2d503 5103 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
5104
5105 b14 += b13;
e0a2d503 5106 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
5107
5108 b8 += b11;
e0a2d503 5109 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
5110
5111 b10 += b9;
e0a2d503 5112 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
5113
5114 b0 += b15;
e0a2d503 5115 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
5116
5117 b2 += b11;
e0a2d503 5118 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
5119
5120 b6 += b13;
e0a2d503 5121 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
5122
5123 b4 += b9;
e0a2d503 5124 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
5125
5126 b14 += b1;
e0a2d503 5127 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
5128
5129 b8 += b5;
e0a2d503 5130 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
5131
5132 b10 += b3;
e0a2d503 5133 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
5134
5135 b12 += b7;
e0a2d503 5136 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
5137
5138 b1 += k1;
5139 b0 += b1 + k0;
e0a2d503 5140 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
5141
5142 b3 += k3;
5143 b2 += b3 + k2;
e0a2d503 5144 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
5145
5146 b5 += k5;
5147 b4 += b5 + k4;
e0a2d503 5148 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
5149
5150 b7 += k7;
5151 b6 += b7 + k6;
e0a2d503 5152 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
5153
5154 b9 += k9;
5155 b8 += b9 + k8;
e0a2d503 5156 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
5157
5158 b11 += k11;
5159 b10 += b11 + k10;
e0a2d503 5160 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
5161
5162 b13 += k13 + t2;
5163 b12 += b13 + k12;
e0a2d503 5164 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
5165
5166 b15 += k15 + 17;
5167 b14 += b15 + k14 + t0;
e0a2d503 5168 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
5169
5170 b0 += b9;
e0a2d503 5171 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
5172
5173 b2 += b13;
e0a2d503 5174 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
5175
5176 b6 += b11;
e0a2d503 5177 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
5178
5179 b4 += b15;
e0a2d503 5180 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
5181
5182 b10 += b7;
e0a2d503 5183 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
5184
5185 b12 += b3;
e0a2d503 5186 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
5187
5188 b14 += b5;
e0a2d503 5189 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
5190
5191 b8 += b1;
e0a2d503 5192 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
5193
5194 b0 += b7;
e0a2d503 5195 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
5196
5197 b2 += b5;
e0a2d503 5198 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
5199
5200 b4 += b3;
e0a2d503 5201 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
5202
5203 b6 += b1;
e0a2d503 5204 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
5205
5206 b12 += b15;
e0a2d503 5207 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
5208
5209 b14 += b13;
e0a2d503 5210 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
5211
5212 b8 += b11;
e0a2d503 5213 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
5214
5215 b10 += b9;
e0a2d503 5216 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
5217
5218 b0 += b15;
e0a2d503 5219 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
5220
5221 b2 += b11;
e0a2d503 5222 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
5223
5224 b6 += b13;
e0a2d503 5225 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
5226
5227 b4 += b9;
e0a2d503 5228 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
5229
5230 b14 += b1;
e0a2d503 5231 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
5232
5233 b8 += b5;
e0a2d503 5234 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
5235
5236 b10 += b3;
e0a2d503 5237 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
5238
5239 b12 += b7;
e0a2d503 5240 b7 = rol64(b7, 20) ^ b12;
60eb8175
JC
5241
5242 b1 += k2;
5243 b0 += b1 + k1;
e0a2d503 5244 b1 = rol64(b1, 24) ^ b0;
60eb8175
JC
5245
5246 b3 += k4;
5247 b2 += b3 + k3;
e0a2d503 5248 b3 = rol64(b3, 13) ^ b2;
60eb8175
JC
5249
5250 b5 += k6;
5251 b4 += b5 + k5;
e0a2d503 5252 b5 = rol64(b5, 8) ^ b4;
60eb8175
JC
5253
5254 b7 += k8;
5255 b6 += b7 + k7;
e0a2d503 5256 b7 = rol64(b7, 47) ^ b6;
60eb8175
JC
5257
5258 b9 += k10;
5259 b8 += b9 + k9;
e0a2d503 5260 b9 = rol64(b9, 8) ^ b8;
60eb8175
JC
5261
5262 b11 += k12;
5263 b10 += b11 + k11;
e0a2d503 5264 b11 = rol64(b11, 17) ^ b10;
60eb8175
JC
5265
5266 b13 += k14 + t0;
5267 b12 += b13 + k13;
e0a2d503 5268 b13 = rol64(b13, 22) ^ b12;
60eb8175
JC
5269
5270 b15 += k16 + 18;
5271 b14 += b15 + k15 + t1;
e0a2d503 5272 b15 = rol64(b15, 37) ^ b14;
60eb8175
JC
5273
5274 b0 += b9;
e0a2d503 5275 b9 = rol64(b9, 38) ^ b0;
60eb8175
JC
5276
5277 b2 += b13;
e0a2d503 5278 b13 = rol64(b13, 19) ^ b2;
60eb8175
JC
5279
5280 b6 += b11;
e0a2d503 5281 b11 = rol64(b11, 10) ^ b6;
60eb8175
JC
5282
5283 b4 += b15;
e0a2d503 5284 b15 = rol64(b15, 55) ^ b4;
60eb8175
JC
5285
5286 b10 += b7;
e0a2d503 5287 b7 = rol64(b7, 49) ^ b10;
60eb8175
JC
5288
5289 b12 += b3;
e0a2d503 5290 b3 = rol64(b3, 18) ^ b12;
60eb8175
JC
5291
5292 b14 += b5;
e0a2d503 5293 b5 = rol64(b5, 23) ^ b14;
60eb8175
JC
5294
5295 b8 += b1;
e0a2d503 5296 b1 = rol64(b1, 52) ^ b8;
60eb8175
JC
5297
5298 b0 += b7;
e0a2d503 5299 b7 = rol64(b7, 33) ^ b0;
60eb8175
JC
5300
5301 b2 += b5;
e0a2d503 5302 b5 = rol64(b5, 4) ^ b2;
60eb8175
JC
5303
5304 b4 += b3;
e0a2d503 5305 b3 = rol64(b3, 51) ^ b4;
60eb8175
JC
5306
5307 b6 += b1;
e0a2d503 5308 b1 = rol64(b1, 13) ^ b6;
60eb8175
JC
5309
5310 b12 += b15;
e0a2d503 5311 b15 = rol64(b15, 34) ^ b12;
60eb8175
JC
5312
5313 b14 += b13;
e0a2d503 5314 b13 = rol64(b13, 41) ^ b14;
60eb8175
JC
5315
5316 b8 += b11;
e0a2d503 5317 b11 = rol64(b11, 59) ^ b8;
60eb8175
JC
5318
5319 b10 += b9;
e0a2d503 5320 b9 = rol64(b9, 17) ^ b10;
60eb8175
JC
5321
5322 b0 += b15;
e0a2d503 5323 b15 = rol64(b15, 5) ^ b0;
60eb8175
JC
5324
5325 b2 += b11;
e0a2d503 5326 b11 = rol64(b11, 20) ^ b2;
60eb8175
JC
5327
5328 b6 += b13;
e0a2d503 5329 b13 = rol64(b13, 48) ^ b6;
60eb8175
JC
5330
5331 b4 += b9;
e0a2d503 5332 b9 = rol64(b9, 41) ^ b4;
60eb8175
JC
5333
5334 b14 += b1;
e0a2d503 5335 b1 = rol64(b1, 47) ^ b14;
60eb8175
JC
5336
5337 b8 += b5;
e0a2d503 5338 b5 = rol64(b5, 28) ^ b8;
60eb8175
JC
5339
5340 b10 += b3;
e0a2d503 5341 b3 = rol64(b3, 16) ^ b10;
60eb8175
JC
5342
5343 b12 += b7;
e0a2d503 5344 b7 = rol64(b7, 25) ^ b12;
60eb8175
JC
5345
5346 b1 += k3;
5347 b0 += b1 + k2;
e0a2d503 5348 b1 = rol64(b1, 41) ^ b0;
60eb8175
JC
5349
5350 b3 += k5;
5351 b2 += b3 + k4;
e0a2d503 5352 b3 = rol64(b3, 9) ^ b2;
60eb8175
JC
5353
5354 b5 += k7;
5355 b4 += b5 + k6;
e0a2d503 5356 b5 = rol64(b5, 37) ^ b4;
60eb8175
JC
5357
5358 b7 += k9;
5359 b6 += b7 + k8;
e0a2d503 5360 b7 = rol64(b7, 31) ^ b6;
60eb8175
JC
5361
5362 b9 += k11;
5363 b8 += b9 + k10;
e0a2d503 5364 b9 = rol64(b9, 12) ^ b8;
60eb8175
JC
5365
5366 b11 += k13;
5367 b10 += b11 + k12;
e0a2d503 5368 b11 = rol64(b11, 47) ^ b10;
60eb8175
JC
5369
5370 b13 += k15 + t1;
5371 b12 += b13 + k14;
e0a2d503 5372 b13 = rol64(b13, 44) ^ b12;
60eb8175
JC
5373
5374 b15 += k0 + 19;
5375 b14 += b15 + k16 + t2;
e0a2d503 5376 b15 = rol64(b15, 30) ^ b14;
60eb8175
JC
5377
5378 b0 += b9;
e0a2d503 5379 b9 = rol64(b9, 16) ^ b0;
60eb8175
JC
5380
5381 b2 += b13;
e0a2d503 5382 b13 = rol64(b13, 34) ^ b2;
60eb8175
JC
5383
5384 b6 += b11;
e0a2d503 5385 b11 = rol64(b11, 56) ^ b6;
60eb8175
JC
5386
5387 b4 += b15;
e0a2d503 5388 b15 = rol64(b15, 51) ^ b4;
60eb8175
JC
5389
5390 b10 += b7;
e0a2d503 5391 b7 = rol64(b7, 4) ^ b10;
60eb8175
JC
5392
5393 b12 += b3;
e0a2d503 5394 b3 = rol64(b3, 53) ^ b12;
60eb8175
JC
5395
5396 b14 += b5;
e0a2d503 5397 b5 = rol64(b5, 42) ^ b14;
60eb8175
JC
5398
5399 b8 += b1;
e0a2d503 5400 b1 = rol64(b1, 41) ^ b8;
60eb8175
JC
5401
5402 b0 += b7;
e0a2d503 5403 b7 = rol64(b7, 31) ^ b0;
60eb8175
JC
5404
5405 b2 += b5;
e0a2d503 5406 b5 = rol64(b5, 44) ^ b2;
60eb8175
JC
5407
5408 b4 += b3;
e0a2d503 5409 b3 = rol64(b3, 47) ^ b4;
60eb8175
JC
5410
5411 b6 += b1;
e0a2d503 5412 b1 = rol64(b1, 46) ^ b6;
60eb8175
JC
5413
5414 b12 += b15;
e0a2d503 5415 b15 = rol64(b15, 19) ^ b12;
60eb8175
JC
5416
5417 b14 += b13;
e0a2d503 5418 b13 = rol64(b13, 42) ^ b14;
60eb8175
JC
5419
5420 b8 += b11;
e0a2d503 5421 b11 = rol64(b11, 44) ^ b8;
60eb8175
JC
5422
5423 b10 += b9;
e0a2d503 5424 b9 = rol64(b9, 25) ^ b10;
60eb8175
JC
5425
5426 b0 += b15;
e0a2d503 5427 b15 = rol64(b15, 9) ^ b0;
60eb8175
JC
5428
5429 b2 += b11;
e0a2d503 5430 b11 = rol64(b11, 48) ^ b2;
60eb8175
JC
5431
5432 b6 += b13;
e0a2d503 5433 b13 = rol64(b13, 35) ^ b6;
60eb8175
JC
5434
5435 b4 += b9;
e0a2d503 5436 b9 = rol64(b9, 52) ^ b4;
60eb8175
JC
5437
5438 b14 += b1;
e0a2d503 5439 b1 = rol64(b1, 23) ^ b14;
60eb8175
JC
5440
5441 b8 += b5;
e0a2d503 5442 b5 = rol64(b5, 31) ^ b8;
60eb8175
JC
5443
5444 b10 += b3;
e0a2d503 5445 b3 = rol64(b3, 37) ^ b10;
60eb8175
JC
5446
5447 b12 += b7;
e0a2d503 5448 b7 = rol64(b7, 20) ^ b12;
449bb812 5449
39bd42b0
JC
5450 output[0] = b0 + k3;
5451 output[1] = b1 + k4;
5452 output[2] = b2 + k5;
5453 output[3] = b3 + k6;
5454 output[4] = b4 + k7;
5455 output[5] = b5 + k8;
5456 output[6] = b6 + k9;
5457 output[7] = b7 + k10;
5458 output[8] = b8 + k11;
5459 output[9] = b9 + k12;
5460 output[10] = b10 + k13;
5461 output[11] = b11 + k14;
5462 output[12] = b12 + k15;
5463 output[13] = b13 + k16 + t2;
5464 output[14] = b14 + k0 + t0;
5465 output[15] = b15 + k1 + 20;
5466}
449bb812 5467
95f1840a 5468void threefish_decrypt_1024(struct threefish_key *key_ctx, u64 *input,
68ace624 5469 u64 *output)
60eb8175
JC
5470{
5471 u64 b0 = input[0], b1 = input[1],
95f1840a
AS
5472 b2 = input[2], b3 = input[3],
5473 b4 = input[4], b5 = input[5],
5474 b6 = input[6], b7 = input[7],
5475 b8 = input[8], b9 = input[9],
5476 b10 = input[10], b11 = input[11],
5477 b12 = input[12], b13 = input[13],
5478 b14 = input[14], b15 = input[15];
5479 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
5480 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
5481 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
5482 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
5483 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
5484 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
5485 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
5486 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
5487 k16 = key_ctx->key[16];
5488 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
5489 t2 = key_ctx->tweak[2];
60eb8175
JC
5490 u64 tmp;
5491
5492 b0 -= k3;
5493 b1 -= k4;
5494 b2 -= k5;
5495 b3 -= k6;
5496 b4 -= k7;
5497 b5 -= k8;
5498 b6 -= k9;
5499 b7 -= k10;
5500 b8 -= k11;
5501 b9 -= k12;
5502 b10 -= k13;
5503 b11 -= k14;
5504 b12 -= k15;
5505 b13 -= k16 + t2;
5506 b14 -= k0 + t0;
5507 b15 -= k1 + 20;
5508 tmp = b7 ^ b12;
3733d3f9 5509 b7 = ror64(tmp, 20);
60eb8175
JC
5510 b12 -= b7;
5511
5512 tmp = b3 ^ b10;
3733d3f9 5513 b3 = ror64(tmp, 37);
60eb8175
JC
5514 b10 -= b3;
5515
5516 tmp = b5 ^ b8;
3733d3f9 5517 b5 = ror64(tmp, 31);
60eb8175
JC
5518 b8 -= b5;
5519
5520 tmp = b1 ^ b14;
3733d3f9 5521 b1 = ror64(tmp, 23);
60eb8175
JC
5522 b14 -= b1;
5523
5524 tmp = b9 ^ b4;
3733d3f9 5525 b9 = ror64(tmp, 52);
60eb8175
JC
5526 b4 -= b9;
5527
5528 tmp = b13 ^ b6;
3733d3f9 5529 b13 = ror64(tmp, 35);
60eb8175
JC
5530 b6 -= b13;
5531
5532 tmp = b11 ^ b2;
3733d3f9 5533 b11 = ror64(tmp, 48);
60eb8175
JC
5534 b2 -= b11;
5535
5536 tmp = b15 ^ b0;
3733d3f9 5537 b15 = ror64(tmp, 9);
60eb8175
JC
5538 b0 -= b15;
5539
5540 tmp = b9 ^ b10;
3733d3f9 5541 b9 = ror64(tmp, 25);
60eb8175
JC
5542 b10 -= b9;
5543
5544 tmp = b11 ^ b8;
3733d3f9 5545 b11 = ror64(tmp, 44);
60eb8175
JC
5546 b8 -= b11;
5547
5548 tmp = b13 ^ b14;
3733d3f9 5549 b13 = ror64(tmp, 42);
60eb8175
JC
5550 b14 -= b13;
5551
5552 tmp = b15 ^ b12;
3733d3f9 5553 b15 = ror64(tmp, 19);
60eb8175
JC
5554 b12 -= b15;
5555
5556 tmp = b1 ^ b6;
3733d3f9 5557 b1 = ror64(tmp, 46);
60eb8175
JC
5558 b6 -= b1;
5559
5560 tmp = b3 ^ b4;
3733d3f9 5561 b3 = ror64(tmp, 47);
60eb8175
JC
5562 b4 -= b3;
5563
5564 tmp = b5 ^ b2;
3733d3f9 5565 b5 = ror64(tmp, 44);
60eb8175
JC
5566 b2 -= b5;
5567
5568 tmp = b7 ^ b0;
3733d3f9 5569 b7 = ror64(tmp, 31);
60eb8175
JC
5570 b0 -= b7;
5571
5572 tmp = b1 ^ b8;
3733d3f9 5573 b1 = ror64(tmp, 41);
60eb8175
JC
5574 b8 -= b1;
5575
5576 tmp = b5 ^ b14;
3733d3f9 5577 b5 = ror64(tmp, 42);
60eb8175
JC
5578 b14 -= b5;
5579
5580 tmp = b3 ^ b12;
3733d3f9 5581 b3 = ror64(tmp, 53);
60eb8175
JC
5582 b12 -= b3;
5583
5584 tmp = b7 ^ b10;
3733d3f9 5585 b7 = ror64(tmp, 4);
60eb8175
JC
5586 b10 -= b7;
5587
5588 tmp = b15 ^ b4;
3733d3f9 5589 b15 = ror64(tmp, 51);
60eb8175
JC
5590 b4 -= b15;
5591
5592 tmp = b11 ^ b6;
3733d3f9 5593 b11 = ror64(tmp, 56);
60eb8175
JC
5594 b6 -= b11;
5595
5596 tmp = b13 ^ b2;
3733d3f9 5597 b13 = ror64(tmp, 34);
60eb8175
JC
5598 b2 -= b13;
5599
5600 tmp = b9 ^ b0;
3733d3f9 5601 b9 = ror64(tmp, 16);
60eb8175
JC
5602 b0 -= b9;
5603
5604 tmp = b15 ^ b14;
3733d3f9 5605 b15 = ror64(tmp, 30);
60eb8175
JC
5606 b14 -= b15 + k16 + t2;
5607 b15 -= k0 + 19;
5608
5609 tmp = b13 ^ b12;
3733d3f9 5610 b13 = ror64(tmp, 44);
60eb8175
JC
5611 b12 -= b13 + k14;
5612 b13 -= k15 + t1;
5613
5614 tmp = b11 ^ b10;
3733d3f9 5615 b11 = ror64(tmp, 47);
60eb8175
JC
5616 b10 -= b11 + k12;
5617 b11 -= k13;
5618
5619 tmp = b9 ^ b8;
3733d3f9 5620 b9 = ror64(tmp, 12);
60eb8175
JC
5621 b8 -= b9 + k10;
5622 b9 -= k11;
5623
5624 tmp = b7 ^ b6;
3733d3f9 5625 b7 = ror64(tmp, 31);
60eb8175
JC
5626 b6 -= b7 + k8;
5627 b7 -= k9;
5628
5629 tmp = b5 ^ b4;
3733d3f9 5630 b5 = ror64(tmp, 37);
60eb8175
JC
5631 b4 -= b5 + k6;
5632 b5 -= k7;
5633
5634 tmp = b3 ^ b2;
3733d3f9 5635 b3 = ror64(tmp, 9);
60eb8175
JC
5636 b2 -= b3 + k4;
5637 b3 -= k5;
5638
5639 tmp = b1 ^ b0;
3733d3f9 5640 b1 = ror64(tmp, 41);
60eb8175
JC
5641 b0 -= b1 + k2;
5642 b1 -= k3;
5643
5644 tmp = b7 ^ b12;
3733d3f9 5645 b7 = ror64(tmp, 25);
60eb8175
JC
5646 b12 -= b7;
5647
5648 tmp = b3 ^ b10;
3733d3f9 5649 b3 = ror64(tmp, 16);
60eb8175
JC
5650 b10 -= b3;
5651
5652 tmp = b5 ^ b8;
3733d3f9 5653 b5 = ror64(tmp, 28);
60eb8175
JC
5654 b8 -= b5;
5655
5656 tmp = b1 ^ b14;
3733d3f9 5657 b1 = ror64(tmp, 47);
60eb8175
JC
5658 b14 -= b1;
5659
5660 tmp = b9 ^ b4;
3733d3f9 5661 b9 = ror64(tmp, 41);
60eb8175
JC
5662 b4 -= b9;
5663
5664 tmp = b13 ^ b6;
3733d3f9 5665 b13 = ror64(tmp, 48);
60eb8175
JC
5666 b6 -= b13;
5667
5668 tmp = b11 ^ b2;
3733d3f9 5669 b11 = ror64(tmp, 20);
60eb8175
JC
5670 b2 -= b11;
5671
5672 tmp = b15 ^ b0;
3733d3f9 5673 b15 = ror64(tmp, 5);
60eb8175
JC
5674 b0 -= b15;
5675
5676 tmp = b9 ^ b10;
3733d3f9 5677 b9 = ror64(tmp, 17);
60eb8175
JC
5678 b10 -= b9;
5679
5680 tmp = b11 ^ b8;
3733d3f9 5681 b11 = ror64(tmp, 59);
60eb8175
JC
5682 b8 -= b11;
5683
5684 tmp = b13 ^ b14;
3733d3f9 5685 b13 = ror64(tmp, 41);
60eb8175
JC
5686 b14 -= b13;
5687
5688 tmp = b15 ^ b12;
3733d3f9 5689 b15 = ror64(tmp, 34);
60eb8175
JC
5690 b12 -= b15;
5691
5692 tmp = b1 ^ b6;
3733d3f9 5693 b1 = ror64(tmp, 13);
60eb8175
JC
5694 b6 -= b1;
5695
5696 tmp = b3 ^ b4;
3733d3f9 5697 b3 = ror64(tmp, 51);
60eb8175
JC
5698 b4 -= b3;
5699
5700 tmp = b5 ^ b2;
3733d3f9 5701 b5 = ror64(tmp, 4);
60eb8175
JC
5702 b2 -= b5;
5703
5704 tmp = b7 ^ b0;
3733d3f9 5705 b7 = ror64(tmp, 33);
60eb8175
JC
5706 b0 -= b7;
5707
5708 tmp = b1 ^ b8;
3733d3f9 5709 b1 = ror64(tmp, 52);
60eb8175
JC
5710 b8 -= b1;
5711
5712 tmp = b5 ^ b14;
3733d3f9 5713 b5 = ror64(tmp, 23);
60eb8175
JC
5714 b14 -= b5;
5715
5716 tmp = b3 ^ b12;
3733d3f9 5717 b3 = ror64(tmp, 18);
60eb8175
JC
5718 b12 -= b3;
5719
5720 tmp = b7 ^ b10;
3733d3f9 5721 b7 = ror64(tmp, 49);
60eb8175
JC
5722 b10 -= b7;
5723
5724 tmp = b15 ^ b4;
3733d3f9 5725 b15 = ror64(tmp, 55);
60eb8175
JC
5726 b4 -= b15;
5727
5728 tmp = b11 ^ b6;
3733d3f9 5729 b11 = ror64(tmp, 10);
60eb8175
JC
5730 b6 -= b11;
5731
5732 tmp = b13 ^ b2;
3733d3f9 5733 b13 = ror64(tmp, 19);
60eb8175
JC
5734 b2 -= b13;
5735
5736 tmp = b9 ^ b0;
3733d3f9 5737 b9 = ror64(tmp, 38);
60eb8175
JC
5738 b0 -= b9;
5739
5740 tmp = b15 ^ b14;
3733d3f9 5741 b15 = ror64(tmp, 37);
60eb8175
JC
5742 b14 -= b15 + k15 + t1;
5743 b15 -= k16 + 18;
5744
5745 tmp = b13 ^ b12;
3733d3f9 5746 b13 = ror64(tmp, 22);
60eb8175
JC
5747 b12 -= b13 + k13;
5748 b13 -= k14 + t0;
5749
5750 tmp = b11 ^ b10;
3733d3f9 5751 b11 = ror64(tmp, 17);
60eb8175
JC
5752 b10 -= b11 + k11;
5753 b11 -= k12;
5754
5755 tmp = b9 ^ b8;
3733d3f9 5756 b9 = ror64(tmp, 8);
60eb8175
JC
5757 b8 -= b9 + k9;
5758 b9 -= k10;
5759
5760 tmp = b7 ^ b6;
3733d3f9 5761 b7 = ror64(tmp, 47);
60eb8175
JC
5762 b6 -= b7 + k7;
5763 b7 -= k8;
5764
5765 tmp = b5 ^ b4;
3733d3f9 5766 b5 = ror64(tmp, 8);
60eb8175
JC
5767 b4 -= b5 + k5;
5768 b5 -= k6;
5769
5770 tmp = b3 ^ b2;
3733d3f9 5771 b3 = ror64(tmp, 13);
60eb8175
JC
5772 b2 -= b3 + k3;
5773 b3 -= k4;
5774
5775 tmp = b1 ^ b0;
3733d3f9 5776 b1 = ror64(tmp, 24);
60eb8175
JC
5777 b0 -= b1 + k1;
5778 b1 -= k2;
5779
5780 tmp = b7 ^ b12;
3733d3f9 5781 b7 = ror64(tmp, 20);
60eb8175
JC
5782 b12 -= b7;
5783
5784 tmp = b3 ^ b10;
3733d3f9 5785 b3 = ror64(tmp, 37);
60eb8175
JC
5786 b10 -= b3;
5787
5788 tmp = b5 ^ b8;
3733d3f9 5789 b5 = ror64(tmp, 31);
60eb8175
JC
5790 b8 -= b5;
5791
5792 tmp = b1 ^ b14;
3733d3f9 5793 b1 = ror64(tmp, 23);
60eb8175
JC
5794 b14 -= b1;
5795
5796 tmp = b9 ^ b4;
3733d3f9 5797 b9 = ror64(tmp, 52);
60eb8175
JC
5798 b4 -= b9;
5799
5800 tmp = b13 ^ b6;
3733d3f9 5801 b13 = ror64(tmp, 35);
60eb8175
JC
5802 b6 -= b13;
5803
5804 tmp = b11 ^ b2;
3733d3f9 5805 b11 = ror64(tmp, 48);
60eb8175
JC
5806 b2 -= b11;
5807
5808 tmp = b15 ^ b0;
3733d3f9 5809 b15 = ror64(tmp, 9);
60eb8175
JC
5810 b0 -= b15;
5811
5812 tmp = b9 ^ b10;
3733d3f9 5813 b9 = ror64(tmp, 25);
60eb8175
JC
5814 b10 -= b9;
5815
5816 tmp = b11 ^ b8;
3733d3f9 5817 b11 = ror64(tmp, 44);
60eb8175
JC
5818 b8 -= b11;
5819
5820 tmp = b13 ^ b14;
3733d3f9 5821 b13 = ror64(tmp, 42);
60eb8175
JC
5822 b14 -= b13;
5823
5824 tmp = b15 ^ b12;
3733d3f9 5825 b15 = ror64(tmp, 19);
60eb8175
JC
5826 b12 -= b15;
5827
5828 tmp = b1 ^ b6;
3733d3f9 5829 b1 = ror64(tmp, 46);
60eb8175
JC
5830 b6 -= b1;
5831
5832 tmp = b3 ^ b4;
3733d3f9 5833 b3 = ror64(tmp, 47);
60eb8175
JC
5834 b4 -= b3;
5835
5836 tmp = b5 ^ b2;
3733d3f9 5837 b5 = ror64(tmp, 44);
60eb8175
JC
5838 b2 -= b5;
5839
5840 tmp = b7 ^ b0;
3733d3f9 5841 b7 = ror64(tmp, 31);
60eb8175
JC
5842 b0 -= b7;
5843
5844 tmp = b1 ^ b8;
3733d3f9 5845 b1 = ror64(tmp, 41);
60eb8175
JC
5846 b8 -= b1;
5847
5848 tmp = b5 ^ b14;
3733d3f9 5849 b5 = ror64(tmp, 42);
60eb8175
JC
5850 b14 -= b5;
5851
5852 tmp = b3 ^ b12;
3733d3f9 5853 b3 = ror64(tmp, 53);
60eb8175
JC
5854 b12 -= b3;
5855
5856 tmp = b7 ^ b10;
3733d3f9 5857 b7 = ror64(tmp, 4);
60eb8175
JC
5858 b10 -= b7;
5859
5860 tmp = b15 ^ b4;
3733d3f9 5861 b15 = ror64(tmp, 51);
60eb8175
JC
5862 b4 -= b15;
5863
5864 tmp = b11 ^ b6;
3733d3f9 5865 b11 = ror64(tmp, 56);
60eb8175
JC
5866 b6 -= b11;
5867
5868 tmp = b13 ^ b2;
3733d3f9 5869 b13 = ror64(tmp, 34);
60eb8175
JC
5870 b2 -= b13;
5871
5872 tmp = b9 ^ b0;
3733d3f9 5873 b9 = ror64(tmp, 16);
60eb8175
JC
5874 b0 -= b9;
5875
5876 tmp = b15 ^ b14;
3733d3f9 5877 b15 = ror64(tmp, 30);
60eb8175
JC
5878 b14 -= b15 + k14 + t0;
5879 b15 -= k15 + 17;
5880
5881 tmp = b13 ^ b12;
3733d3f9 5882 b13 = ror64(tmp, 44);
60eb8175
JC
5883 b12 -= b13 + k12;
5884 b13 -= k13 + t2;
5885
5886 tmp = b11 ^ b10;
3733d3f9 5887 b11 = ror64(tmp, 47);
60eb8175
JC
5888 b10 -= b11 + k10;
5889 b11 -= k11;
5890
5891 tmp = b9 ^ b8;
3733d3f9 5892 b9 = ror64(tmp, 12);
60eb8175
JC
5893 b8 -= b9 + k8;
5894 b9 -= k9;
5895
5896 tmp = b7 ^ b6;
3733d3f9 5897 b7 = ror64(tmp, 31);
60eb8175
JC
5898 b6 -= b7 + k6;
5899 b7 -= k7;
5900
5901 tmp = b5 ^ b4;
3733d3f9 5902 b5 = ror64(tmp, 37);
60eb8175
JC
5903 b4 -= b5 + k4;
5904 b5 -= k5;
5905
5906 tmp = b3 ^ b2;
3733d3f9 5907 b3 = ror64(tmp, 9);
60eb8175
JC
5908 b2 -= b3 + k2;
5909 b3 -= k3;
5910
5911 tmp = b1 ^ b0;
3733d3f9 5912 b1 = ror64(tmp, 41);
60eb8175
JC
5913 b0 -= b1 + k0;
5914 b1 -= k1;
5915
5916 tmp = b7 ^ b12;
3733d3f9 5917 b7 = ror64(tmp, 25);
60eb8175
JC
5918 b12 -= b7;
5919
5920 tmp = b3 ^ b10;
3733d3f9 5921 b3 = ror64(tmp, 16);
60eb8175
JC
5922 b10 -= b3;
5923
5924 tmp = b5 ^ b8;
3733d3f9 5925 b5 = ror64(tmp, 28);
60eb8175
JC
5926 b8 -= b5;
5927
5928 tmp = b1 ^ b14;
3733d3f9 5929 b1 = ror64(tmp, 47);
60eb8175
JC
5930 b14 -= b1;
5931
5932 tmp = b9 ^ b4;
3733d3f9 5933 b9 = ror64(tmp, 41);
60eb8175
JC
5934 b4 -= b9;
5935
5936 tmp = b13 ^ b6;
3733d3f9 5937 b13 = ror64(tmp, 48);
60eb8175
JC
5938 b6 -= b13;
5939
5940 tmp = b11 ^ b2;
3733d3f9 5941 b11 = ror64(tmp, 20);
60eb8175
JC
5942 b2 -= b11;
5943
5944 tmp = b15 ^ b0;
3733d3f9 5945 b15 = ror64(tmp, 5);
60eb8175
JC
5946 b0 -= b15;
5947
5948 tmp = b9 ^ b10;
3733d3f9 5949 b9 = ror64(tmp, 17);
60eb8175
JC
5950 b10 -= b9;
5951
5952 tmp = b11 ^ b8;
3733d3f9 5953 b11 = ror64(tmp, 59);
60eb8175
JC
5954 b8 -= b11;
5955
5956 tmp = b13 ^ b14;
3733d3f9 5957 b13 = ror64(tmp, 41);
60eb8175
JC
5958 b14 -= b13;
5959
5960 tmp = b15 ^ b12;
3733d3f9 5961 b15 = ror64(tmp, 34);
60eb8175
JC
5962 b12 -= b15;
5963
5964 tmp = b1 ^ b6;
3733d3f9 5965 b1 = ror64(tmp, 13);
60eb8175
JC
5966 b6 -= b1;
5967
5968 tmp = b3 ^ b4;
3733d3f9 5969 b3 = ror64(tmp, 51);
60eb8175
JC
5970 b4 -= b3;
5971
5972 tmp = b5 ^ b2;
3733d3f9 5973 b5 = ror64(tmp, 4);
60eb8175
JC
5974 b2 -= b5;
5975
5976 tmp = b7 ^ b0;
3733d3f9 5977 b7 = ror64(tmp, 33);
60eb8175
JC
5978 b0 -= b7;
5979
5980 tmp = b1 ^ b8;
3733d3f9 5981 b1 = ror64(tmp, 52);
60eb8175
JC
5982 b8 -= b1;
5983
5984 tmp = b5 ^ b14;
3733d3f9 5985 b5 = ror64(tmp, 23);
60eb8175
JC
5986 b14 -= b5;
5987
5988 tmp = b3 ^ b12;
3733d3f9 5989 b3 = ror64(tmp, 18);
60eb8175
JC
5990 b12 -= b3;
5991
5992 tmp = b7 ^ b10;
3733d3f9 5993 b7 = ror64(tmp, 49);
60eb8175
JC
5994 b10 -= b7;
5995
5996 tmp = b15 ^ b4;
3733d3f9 5997 b15 = ror64(tmp, 55);
60eb8175
JC
5998 b4 -= b15;
5999
6000 tmp = b11 ^ b6;
3733d3f9 6001 b11 = ror64(tmp, 10);
60eb8175
JC
6002 b6 -= b11;
6003
6004 tmp = b13 ^ b2;
3733d3f9 6005 b13 = ror64(tmp, 19);
60eb8175
JC
6006 b2 -= b13;
6007
6008 tmp = b9 ^ b0;
3733d3f9 6009 b9 = ror64(tmp, 38);
60eb8175
JC
6010 b0 -= b9;
6011
6012 tmp = b15 ^ b14;
3733d3f9 6013 b15 = ror64(tmp, 37);
60eb8175
JC
6014 b14 -= b15 + k13 + t2;
6015 b15 -= k14 + 16;
6016
6017 tmp = b13 ^ b12;
3733d3f9 6018 b13 = ror64(tmp, 22);
60eb8175
JC
6019 b12 -= b13 + k11;
6020 b13 -= k12 + t1;
6021
6022 tmp = b11 ^ b10;
3733d3f9 6023 b11 = ror64(tmp, 17);
60eb8175
JC
6024 b10 -= b11 + k9;
6025 b11 -= k10;
6026
6027 tmp = b9 ^ b8;
3733d3f9 6028 b9 = ror64(tmp, 8);
60eb8175
JC
6029 b8 -= b9 + k7;
6030 b9 -= k8;
6031
6032 tmp = b7 ^ b6;
3733d3f9 6033 b7 = ror64(tmp, 47);
60eb8175
JC
6034 b6 -= b7 + k5;
6035 b7 -= k6;
6036
6037 tmp = b5 ^ b4;
3733d3f9 6038 b5 = ror64(tmp, 8);
60eb8175
JC
6039 b4 -= b5 + k3;
6040 b5 -= k4;
6041
6042 tmp = b3 ^ b2;
3733d3f9 6043 b3 = ror64(tmp, 13);
60eb8175
JC
6044 b2 -= b3 + k1;
6045 b3 -= k2;
6046
6047 tmp = b1 ^ b0;
3733d3f9 6048 b1 = ror64(tmp, 24);
60eb8175
JC
6049 b0 -= b1 + k16;
6050 b1 -= k0;
6051
6052 tmp = b7 ^ b12;
3733d3f9 6053 b7 = ror64(tmp, 20);
60eb8175
JC
6054 b12 -= b7;
6055
6056 tmp = b3 ^ b10;
3733d3f9 6057 b3 = ror64(tmp, 37);
60eb8175
JC
6058 b10 -= b3;
6059
6060 tmp = b5 ^ b8;
3733d3f9 6061 b5 = ror64(tmp, 31);
60eb8175
JC
6062 b8 -= b5;
6063
6064 tmp = b1 ^ b14;
3733d3f9 6065 b1 = ror64(tmp, 23);
60eb8175
JC
6066 b14 -= b1;
6067
6068 tmp = b9 ^ b4;
3733d3f9 6069 b9 = ror64(tmp, 52);
60eb8175
JC
6070 b4 -= b9;
6071
6072 tmp = b13 ^ b6;
3733d3f9 6073 b13 = ror64(tmp, 35);
60eb8175
JC
6074 b6 -= b13;
6075
6076 tmp = b11 ^ b2;
3733d3f9 6077 b11 = ror64(tmp, 48);
60eb8175
JC
6078 b2 -= b11;
6079
6080 tmp = b15 ^ b0;
3733d3f9 6081 b15 = ror64(tmp, 9);
60eb8175
JC
6082 b0 -= b15;
6083
6084 tmp = b9 ^ b10;
3733d3f9 6085 b9 = ror64(tmp, 25);
60eb8175
JC
6086 b10 -= b9;
6087
6088 tmp = b11 ^ b8;
3733d3f9 6089 b11 = ror64(tmp, 44);
60eb8175
JC
6090 b8 -= b11;
6091
6092 tmp = b13 ^ b14;
3733d3f9 6093 b13 = ror64(tmp, 42);
60eb8175
JC
6094 b14 -= b13;
6095
6096 tmp = b15 ^ b12;
3733d3f9 6097 b15 = ror64(tmp, 19);
60eb8175
JC
6098 b12 -= b15;
6099
6100 tmp = b1 ^ b6;
3733d3f9 6101 b1 = ror64(tmp, 46);
60eb8175
JC
6102 b6 -= b1;
6103
6104 tmp = b3 ^ b4;
3733d3f9 6105 b3 = ror64(tmp, 47);
60eb8175
JC
6106 b4 -= b3;
6107
6108 tmp = b5 ^ b2;
3733d3f9 6109 b5 = ror64(tmp, 44);
60eb8175
JC
6110 b2 -= b5;
6111
6112 tmp = b7 ^ b0;
3733d3f9 6113 b7 = ror64(tmp, 31);
60eb8175
JC
6114 b0 -= b7;
6115
6116 tmp = b1 ^ b8;
3733d3f9 6117 b1 = ror64(tmp, 41);
60eb8175
JC
6118 b8 -= b1;
6119
6120 tmp = b5 ^ b14;
3733d3f9 6121 b5 = ror64(tmp, 42);
60eb8175
JC
6122 b14 -= b5;
6123
6124 tmp = b3 ^ b12;
3733d3f9 6125 b3 = ror64(tmp, 53);
60eb8175
JC
6126 b12 -= b3;
6127
6128 tmp = b7 ^ b10;
3733d3f9 6129 b7 = ror64(tmp, 4);
60eb8175
JC
6130 b10 -= b7;
6131
6132 tmp = b15 ^ b4;
3733d3f9 6133 b15 = ror64(tmp, 51);
60eb8175
JC
6134 b4 -= b15;
6135
6136 tmp = b11 ^ b6;
3733d3f9 6137 b11 = ror64(tmp, 56);
60eb8175
JC
6138 b6 -= b11;
6139
6140 tmp = b13 ^ b2;
3733d3f9 6141 b13 = ror64(tmp, 34);
60eb8175
JC
6142 b2 -= b13;
6143
6144 tmp = b9 ^ b0;
3733d3f9 6145 b9 = ror64(tmp, 16);
60eb8175
JC
6146 b0 -= b9;
6147
6148 tmp = b15 ^ b14;
3733d3f9 6149 b15 = ror64(tmp, 30);
60eb8175
JC
6150 b14 -= b15 + k12 + t1;
6151 b15 -= k13 + 15;
6152
6153 tmp = b13 ^ b12;
3733d3f9 6154 b13 = ror64(tmp, 44);
60eb8175
JC
6155 b12 -= b13 + k10;
6156 b13 -= k11 + t0;
6157
6158 tmp = b11 ^ b10;
3733d3f9 6159 b11 = ror64(tmp, 47);
60eb8175
JC
6160 b10 -= b11 + k8;
6161 b11 -= k9;
6162
6163 tmp = b9 ^ b8;
3733d3f9 6164 b9 = ror64(tmp, 12);
60eb8175
JC
6165 b8 -= b9 + k6;
6166 b9 -= k7;
6167
6168 tmp = b7 ^ b6;
3733d3f9 6169 b7 = ror64(tmp, 31);
60eb8175
JC
6170 b6 -= b7 + k4;
6171 b7 -= k5;
6172
6173 tmp = b5 ^ b4;
3733d3f9 6174 b5 = ror64(tmp, 37);
60eb8175
JC
6175 b4 -= b5 + k2;
6176 b5 -= k3;
6177
6178 tmp = b3 ^ b2;
3733d3f9 6179 b3 = ror64(tmp, 9);
60eb8175
JC
6180 b2 -= b3 + k0;
6181 b3 -= k1;
6182
6183 tmp = b1 ^ b0;
3733d3f9 6184 b1 = ror64(tmp, 41);
60eb8175
JC
6185 b0 -= b1 + k15;
6186 b1 -= k16;
6187
6188 tmp = b7 ^ b12;
3733d3f9 6189 b7 = ror64(tmp, 25);
60eb8175
JC
6190 b12 -= b7;
6191
6192 tmp = b3 ^ b10;
3733d3f9 6193 b3 = ror64(tmp, 16);
60eb8175
JC
6194 b10 -= b3;
6195
6196 tmp = b5 ^ b8;
3733d3f9 6197 b5 = ror64(tmp, 28);
60eb8175
JC
6198 b8 -= b5;
6199
6200 tmp = b1 ^ b14;
3733d3f9 6201 b1 = ror64(tmp, 47);
60eb8175
JC
6202 b14 -= b1;
6203
6204 tmp = b9 ^ b4;
3733d3f9 6205 b9 = ror64(tmp, 41);
60eb8175
JC
6206 b4 -= b9;
6207
6208 tmp = b13 ^ b6;
3733d3f9 6209 b13 = ror64(tmp, 48);
60eb8175
JC
6210 b6 -= b13;
6211
6212 tmp = b11 ^ b2;
3733d3f9 6213 b11 = ror64(tmp, 20);
60eb8175
JC
6214 b2 -= b11;
6215
6216 tmp = b15 ^ b0;
3733d3f9 6217 b15 = ror64(tmp, 5);
60eb8175
JC
6218 b0 -= b15;
6219
6220 tmp = b9 ^ b10;
3733d3f9 6221 b9 = ror64(tmp, 17);
60eb8175
JC
6222 b10 -= b9;
6223
6224 tmp = b11 ^ b8;
3733d3f9 6225 b11 = ror64(tmp, 59);
60eb8175
JC
6226 b8 -= b11;
6227
6228 tmp = b13 ^ b14;
3733d3f9 6229 b13 = ror64(tmp, 41);
60eb8175
JC
6230 b14 -= b13;
6231
6232 tmp = b15 ^ b12;
3733d3f9 6233 b15 = ror64(tmp, 34);
60eb8175
JC
6234 b12 -= b15;
6235
6236 tmp = b1 ^ b6;
3733d3f9 6237 b1 = ror64(tmp, 13);
60eb8175
JC
6238 b6 -= b1;
6239
6240 tmp = b3 ^ b4;
3733d3f9 6241 b3 = ror64(tmp, 51);
60eb8175
JC
6242 b4 -= b3;
6243
6244 tmp = b5 ^ b2;
3733d3f9 6245 b5 = ror64(tmp, 4);
60eb8175
JC
6246 b2 -= b5;
6247
6248 tmp = b7 ^ b0;
3733d3f9 6249 b7 = ror64(tmp, 33);
60eb8175
JC
6250 b0 -= b7;
6251
6252 tmp = b1 ^ b8;
3733d3f9 6253 b1 = ror64(tmp, 52);
60eb8175
JC
6254 b8 -= b1;
6255
6256 tmp = b5 ^ b14;
3733d3f9 6257 b5 = ror64(tmp, 23);
60eb8175
JC
6258 b14 -= b5;
6259
6260 tmp = b3 ^ b12;
3733d3f9 6261 b3 = ror64(tmp, 18);
60eb8175
JC
6262 b12 -= b3;
6263
6264 tmp = b7 ^ b10;
3733d3f9 6265 b7 = ror64(tmp, 49);
60eb8175
JC
6266 b10 -= b7;
6267
6268 tmp = b15 ^ b4;
3733d3f9 6269 b15 = ror64(tmp, 55);
60eb8175
JC
6270 b4 -= b15;
6271
6272 tmp = b11 ^ b6;
3733d3f9 6273 b11 = ror64(tmp, 10);
60eb8175
JC
6274 b6 -= b11;
6275
6276 tmp = b13 ^ b2;
3733d3f9 6277 b13 = ror64(tmp, 19);
60eb8175
JC
6278 b2 -= b13;
6279
6280 tmp = b9 ^ b0;
3733d3f9 6281 b9 = ror64(tmp, 38);
60eb8175
JC
6282 b0 -= b9;
6283
6284 tmp = b15 ^ b14;
3733d3f9 6285 b15 = ror64(tmp, 37);
60eb8175
JC
6286 b14 -= b15 + k11 + t0;
6287 b15 -= k12 + 14;
6288
6289 tmp = b13 ^ b12;
3733d3f9 6290 b13 = ror64(tmp, 22);
60eb8175
JC
6291 b12 -= b13 + k9;
6292 b13 -= k10 + t2;
6293
6294 tmp = b11 ^ b10;
3733d3f9 6295 b11 = ror64(tmp, 17);
60eb8175
JC
6296 b10 -= b11 + k7;
6297 b11 -= k8;
6298
6299 tmp = b9 ^ b8;
3733d3f9 6300 b9 = ror64(tmp, 8);
60eb8175
JC
6301 b8 -= b9 + k5;
6302 b9 -= k6;
6303
6304 tmp = b7 ^ b6;
3733d3f9 6305 b7 = ror64(tmp, 47);
60eb8175
JC
6306 b6 -= b7 + k3;
6307 b7 -= k4;
6308
6309 tmp = b5 ^ b4;
3733d3f9 6310 b5 = ror64(tmp, 8);
60eb8175
JC
6311 b4 -= b5 + k1;
6312 b5 -= k2;
6313
6314 tmp = b3 ^ b2;
3733d3f9 6315 b3 = ror64(tmp, 13);
60eb8175
JC
6316 b2 -= b3 + k16;
6317 b3 -= k0;
6318
6319 tmp = b1 ^ b0;
3733d3f9 6320 b1 = ror64(tmp, 24);
60eb8175
JC
6321 b0 -= b1 + k14;
6322 b1 -= k15;
6323
6324 tmp = b7 ^ b12;
3733d3f9 6325 b7 = ror64(tmp, 20);
60eb8175
JC
6326 b12 -= b7;
6327
6328 tmp = b3 ^ b10;
3733d3f9 6329 b3 = ror64(tmp, 37);
60eb8175
JC
6330 b10 -= b3;
6331
6332 tmp = b5 ^ b8;
3733d3f9 6333 b5 = ror64(tmp, 31);
60eb8175
JC
6334 b8 -= b5;
6335
6336 tmp = b1 ^ b14;
3733d3f9 6337 b1 = ror64(tmp, 23);
60eb8175
JC
6338 b14 -= b1;
6339
6340 tmp = b9 ^ b4;
3733d3f9 6341 b9 = ror64(tmp, 52);
60eb8175
JC
6342 b4 -= b9;
6343
6344 tmp = b13 ^ b6;
3733d3f9 6345 b13 = ror64(tmp, 35);
60eb8175
JC
6346 b6 -= b13;
6347
6348 tmp = b11 ^ b2;
3733d3f9 6349 b11 = ror64(tmp, 48);
60eb8175
JC
6350 b2 -= b11;
6351
6352 tmp = b15 ^ b0;
3733d3f9 6353 b15 = ror64(tmp, 9);
60eb8175
JC
6354 b0 -= b15;
6355
6356 tmp = b9 ^ b10;
3733d3f9 6357 b9 = ror64(tmp, 25);
60eb8175
JC
6358 b10 -= b9;
6359
6360 tmp = b11 ^ b8;
3733d3f9 6361 b11 = ror64(tmp, 44);
60eb8175
JC
6362 b8 -= b11;
6363
6364 tmp = b13 ^ b14;
3733d3f9 6365 b13 = ror64(tmp, 42);
60eb8175
JC
6366 b14 -= b13;
6367
6368 tmp = b15 ^ b12;
3733d3f9 6369 b15 = ror64(tmp, 19);
60eb8175
JC
6370 b12 -= b15;
6371
6372 tmp = b1 ^ b6;
3733d3f9 6373 b1 = ror64(tmp, 46);
60eb8175
JC
6374 b6 -= b1;
6375
6376 tmp = b3 ^ b4;
3733d3f9 6377 b3 = ror64(tmp, 47);
60eb8175
JC
6378 b4 -= b3;
6379
6380 tmp = b5 ^ b2;
3733d3f9 6381 b5 = ror64(tmp, 44);
60eb8175
JC
6382 b2 -= b5;
6383
6384 tmp = b7 ^ b0;
3733d3f9 6385 b7 = ror64(tmp, 31);
60eb8175
JC
6386 b0 -= b7;
6387
6388 tmp = b1 ^ b8;
3733d3f9 6389 b1 = ror64(tmp, 41);
60eb8175
JC
6390 b8 -= b1;
6391
6392 tmp = b5 ^ b14;
3733d3f9 6393 b5 = ror64(tmp, 42);
60eb8175
JC
6394 b14 -= b5;
6395
6396 tmp = b3 ^ b12;
3733d3f9 6397 b3 = ror64(tmp, 53);
60eb8175
JC
6398 b12 -= b3;
6399
6400 tmp = b7 ^ b10;
3733d3f9 6401 b7 = ror64(tmp, 4);
60eb8175
JC
6402 b10 -= b7;
6403
6404 tmp = b15 ^ b4;
3733d3f9 6405 b15 = ror64(tmp, 51);
60eb8175
JC
6406 b4 -= b15;
6407
6408 tmp = b11 ^ b6;
3733d3f9 6409 b11 = ror64(tmp, 56);
60eb8175
JC
6410 b6 -= b11;
6411
6412 tmp = b13 ^ b2;
3733d3f9 6413 b13 = ror64(tmp, 34);
60eb8175
JC
6414 b2 -= b13;
6415
6416 tmp = b9 ^ b0;
3733d3f9 6417 b9 = ror64(tmp, 16);
60eb8175
JC
6418 b0 -= b9;
6419
6420 tmp = b15 ^ b14;
3733d3f9 6421 b15 = ror64(tmp, 30);
60eb8175
JC
6422 b14 -= b15 + k10 + t2;
6423 b15 -= k11 + 13;
6424
6425 tmp = b13 ^ b12;
3733d3f9 6426 b13 = ror64(tmp, 44);
60eb8175
JC
6427 b12 -= b13 + k8;
6428 b13 -= k9 + t1;
6429
6430 tmp = b11 ^ b10;
3733d3f9 6431 b11 = ror64(tmp, 47);
60eb8175
JC
6432 b10 -= b11 + k6;
6433 b11 -= k7;
6434
6435 tmp = b9 ^ b8;
3733d3f9 6436 b9 = ror64(tmp, 12);
60eb8175
JC
6437 b8 -= b9 + k4;
6438 b9 -= k5;
6439
6440 tmp = b7 ^ b6;
3733d3f9 6441 b7 = ror64(tmp, 31);
60eb8175
JC
6442 b6 -= b7 + k2;
6443 b7 -= k3;
6444
6445 tmp = b5 ^ b4;
3733d3f9 6446 b5 = ror64(tmp, 37);
60eb8175
JC
6447 b4 -= b5 + k0;
6448 b5 -= k1;
6449
6450 tmp = b3 ^ b2;
3733d3f9 6451 b3 = ror64(tmp, 9);
60eb8175
JC
6452 b2 -= b3 + k15;
6453 b3 -= k16;
6454
6455 tmp = b1 ^ b0;
3733d3f9 6456 b1 = ror64(tmp, 41);
60eb8175
JC
6457 b0 -= b1 + k13;
6458 b1 -= k14;
6459
6460 tmp = b7 ^ b12;
3733d3f9 6461 b7 = ror64(tmp, 25);
60eb8175
JC
6462 b12 -= b7;
6463
6464 tmp = b3 ^ b10;
3733d3f9 6465 b3 = ror64(tmp, 16);
60eb8175
JC
6466 b10 -= b3;
6467
6468 tmp = b5 ^ b8;
3733d3f9 6469 b5 = ror64(tmp, 28);
60eb8175
JC
6470 b8 -= b5;
6471
6472 tmp = b1 ^ b14;
3733d3f9 6473 b1 = ror64(tmp, 47);
60eb8175
JC
6474 b14 -= b1;
6475
6476 tmp = b9 ^ b4;
3733d3f9 6477 b9 = ror64(tmp, 41);
60eb8175
JC
6478 b4 -= b9;
6479
6480 tmp = b13 ^ b6;
3733d3f9 6481 b13 = ror64(tmp, 48);
60eb8175
JC
6482 b6 -= b13;
6483
6484 tmp = b11 ^ b2;
3733d3f9 6485 b11 = ror64(tmp, 20);
60eb8175
JC
6486 b2 -= b11;
6487
6488 tmp = b15 ^ b0;
3733d3f9 6489 b15 = ror64(tmp, 5);
60eb8175
JC
6490 b0 -= b15;
6491
6492 tmp = b9 ^ b10;
3733d3f9 6493 b9 = ror64(tmp, 17);
60eb8175
JC
6494 b10 -= b9;
6495
6496 tmp = b11 ^ b8;
3733d3f9 6497 b11 = ror64(tmp, 59);
60eb8175
JC
6498 b8 -= b11;
6499
6500 tmp = b13 ^ b14;
3733d3f9 6501 b13 = ror64(tmp, 41);
60eb8175
JC
6502 b14 -= b13;
6503
6504 tmp = b15 ^ b12;
3733d3f9 6505 b15 = ror64(tmp, 34);
60eb8175
JC
6506 b12 -= b15;
6507
6508 tmp = b1 ^ b6;
3733d3f9 6509 b1 = ror64(tmp, 13);
60eb8175
JC
6510 b6 -= b1;
6511
6512 tmp = b3 ^ b4;
3733d3f9 6513 b3 = ror64(tmp, 51);
60eb8175
JC
6514 b4 -= b3;
6515
6516 tmp = b5 ^ b2;
3733d3f9 6517 b5 = ror64(tmp, 4);
60eb8175
JC
6518 b2 -= b5;
6519
6520 tmp = b7 ^ b0;
3733d3f9 6521 b7 = ror64(tmp, 33);
60eb8175
JC
6522 b0 -= b7;
6523
6524 tmp = b1 ^ b8;
3733d3f9 6525 b1 = ror64(tmp, 52);
60eb8175
JC
6526 b8 -= b1;
6527
6528 tmp = b5 ^ b14;
3733d3f9 6529 b5 = ror64(tmp, 23);
60eb8175
JC
6530 b14 -= b5;
6531
6532 tmp = b3 ^ b12;
3733d3f9 6533 b3 = ror64(tmp, 18);
60eb8175
JC
6534 b12 -= b3;
6535
6536 tmp = b7 ^ b10;
3733d3f9 6537 b7 = ror64(tmp, 49);
60eb8175
JC
6538 b10 -= b7;
6539
6540 tmp = b15 ^ b4;
3733d3f9 6541 b15 = ror64(tmp, 55);
60eb8175
JC
6542 b4 -= b15;
6543
6544 tmp = b11 ^ b6;
3733d3f9 6545 b11 = ror64(tmp, 10);
60eb8175
JC
6546 b6 -= b11;
6547
6548 tmp = b13 ^ b2;
3733d3f9 6549 b13 = ror64(tmp, 19);
60eb8175
JC
6550 b2 -= b13;
6551
6552 tmp = b9 ^ b0;
3733d3f9 6553 b9 = ror64(tmp, 38);
60eb8175
JC
6554 b0 -= b9;
6555
6556 tmp = b15 ^ b14;
3733d3f9 6557 b15 = ror64(tmp, 37);
60eb8175
JC
6558 b14 -= b15 + k9 + t1;
6559 b15 -= k10 + 12;
6560
6561 tmp = b13 ^ b12;
3733d3f9 6562 b13 = ror64(tmp, 22);
60eb8175
JC
6563 b12 -= b13 + k7;
6564 b13 -= k8 + t0;
6565
6566 tmp = b11 ^ b10;
3733d3f9 6567 b11 = ror64(tmp, 17);
60eb8175
JC
6568 b10 -= b11 + k5;
6569 b11 -= k6;
6570
6571 tmp = b9 ^ b8;
3733d3f9 6572 b9 = ror64(tmp, 8);
60eb8175
JC
6573 b8 -= b9 + k3;
6574 b9 -= k4;
6575
6576 tmp = b7 ^ b6;
3733d3f9 6577 b7 = ror64(tmp, 47);
60eb8175
JC
6578 b6 -= b7 + k1;
6579 b7 -= k2;
6580
6581 tmp = b5 ^ b4;
3733d3f9 6582 b5 = ror64(tmp, 8);
60eb8175
JC
6583 b4 -= b5 + k16;
6584 b5 -= k0;
6585
6586 tmp = b3 ^ b2;
3733d3f9 6587 b3 = ror64(tmp, 13);
60eb8175
JC
6588 b2 -= b3 + k14;
6589 b3 -= k15;
6590
6591 tmp = b1 ^ b0;
3733d3f9 6592 b1 = ror64(tmp, 24);
60eb8175
JC
6593 b0 -= b1 + k12;
6594 b1 -= k13;
6595
6596 tmp = b7 ^ b12;
3733d3f9 6597 b7 = ror64(tmp, 20);
60eb8175
JC
6598 b12 -= b7;
6599
6600 tmp = b3 ^ b10;
3733d3f9 6601 b3 = ror64(tmp, 37);
60eb8175
JC
6602 b10 -= b3;
6603
6604 tmp = b5 ^ b8;
3733d3f9 6605 b5 = ror64(tmp, 31);
60eb8175
JC
6606 b8 -= b5;
6607
6608 tmp = b1 ^ b14;
3733d3f9 6609 b1 = ror64(tmp, 23);
60eb8175
JC
6610 b14 -= b1;
6611
6612 tmp = b9 ^ b4;
3733d3f9 6613 b9 = ror64(tmp, 52);
60eb8175
JC
6614 b4 -= b9;
6615
6616 tmp = b13 ^ b6;
3733d3f9 6617 b13 = ror64(tmp, 35);
60eb8175
JC
6618 b6 -= b13;
6619
6620 tmp = b11 ^ b2;
3733d3f9 6621 b11 = ror64(tmp, 48);
60eb8175
JC
6622 b2 -= b11;
6623
6624 tmp = b15 ^ b0;
3733d3f9 6625 b15 = ror64(tmp, 9);
60eb8175
JC
6626 b0 -= b15;
6627
6628 tmp = b9 ^ b10;
3733d3f9 6629 b9 = ror64(tmp, 25);
60eb8175
JC
6630 b10 -= b9;
6631
6632 tmp = b11 ^ b8;
3733d3f9 6633 b11 = ror64(tmp, 44);
60eb8175
JC
6634 b8 -= b11;
6635
6636 tmp = b13 ^ b14;
3733d3f9 6637 b13 = ror64(tmp, 42);
60eb8175
JC
6638 b14 -= b13;
6639
6640 tmp = b15 ^ b12;
3733d3f9 6641 b15 = ror64(tmp, 19);
60eb8175
JC
6642 b12 -= b15;
6643
6644 tmp = b1 ^ b6;
3733d3f9 6645 b1 = ror64(tmp, 46);
60eb8175
JC
6646 b6 -= b1;
6647
6648 tmp = b3 ^ b4;
3733d3f9 6649 b3 = ror64(tmp, 47);
60eb8175
JC
6650 b4 -= b3;
6651
6652 tmp = b5 ^ b2;
3733d3f9 6653 b5 = ror64(tmp, 44);
60eb8175
JC
6654 b2 -= b5;
6655
6656 tmp = b7 ^ b0;
3733d3f9 6657 b7 = ror64(tmp, 31);
60eb8175
JC
6658 b0 -= b7;
6659
6660 tmp = b1 ^ b8;
3733d3f9 6661 b1 = ror64(tmp, 41);
60eb8175
JC
6662 b8 -= b1;
6663
6664 tmp = b5 ^ b14;
3733d3f9 6665 b5 = ror64(tmp, 42);
60eb8175
JC
6666 b14 -= b5;
6667
6668 tmp = b3 ^ b12;
3733d3f9 6669 b3 = ror64(tmp, 53);
60eb8175
JC
6670 b12 -= b3;
6671
6672 tmp = b7 ^ b10;
3733d3f9 6673 b7 = ror64(tmp, 4);
60eb8175
JC
6674 b10 -= b7;
6675
6676 tmp = b15 ^ b4;
3733d3f9 6677 b15 = ror64(tmp, 51);
60eb8175
JC
6678 b4 -= b15;
6679
6680 tmp = b11 ^ b6;
3733d3f9 6681 b11 = ror64(tmp, 56);
60eb8175
JC
6682 b6 -= b11;
6683
6684 tmp = b13 ^ b2;
3733d3f9 6685 b13 = ror64(tmp, 34);
60eb8175
JC
6686 b2 -= b13;
6687
6688 tmp = b9 ^ b0;
3733d3f9 6689 b9 = ror64(tmp, 16);
60eb8175
JC
6690 b0 -= b9;
6691
6692 tmp = b15 ^ b14;
3733d3f9 6693 b15 = ror64(tmp, 30);
60eb8175
JC
6694 b14 -= b15 + k8 + t0;
6695 b15 -= k9 + 11;
6696
6697 tmp = b13 ^ b12;
3733d3f9 6698 b13 = ror64(tmp, 44);
60eb8175
JC
6699 b12 -= b13 + k6;
6700 b13 -= k7 + t2;
6701
6702 tmp = b11 ^ b10;
3733d3f9 6703 b11 = ror64(tmp, 47);
60eb8175
JC
6704 b10 -= b11 + k4;
6705 b11 -= k5;
6706
6707 tmp = b9 ^ b8;
3733d3f9 6708 b9 = ror64(tmp, 12);
60eb8175
JC
6709 b8 -= b9 + k2;
6710 b9 -= k3;
6711
6712 tmp = b7 ^ b6;
3733d3f9 6713 b7 = ror64(tmp, 31);
60eb8175
JC
6714 b6 -= b7 + k0;
6715 b7 -= k1;
6716
6717 tmp = b5 ^ b4;
3733d3f9 6718 b5 = ror64(tmp, 37);
60eb8175
JC
6719 b4 -= b5 + k15;
6720 b5 -= k16;
6721
6722 tmp = b3 ^ b2;
3733d3f9 6723 b3 = ror64(tmp, 9);
60eb8175
JC
6724 b2 -= b3 + k13;
6725 b3 -= k14;
6726
6727 tmp = b1 ^ b0;
3733d3f9 6728 b1 = ror64(tmp, 41);
60eb8175
JC
6729 b0 -= b1 + k11;
6730 b1 -= k12;
6731
6732 tmp = b7 ^ b12;
3733d3f9 6733 b7 = ror64(tmp, 25);
60eb8175
JC
6734 b12 -= b7;
6735
6736 tmp = b3 ^ b10;
3733d3f9 6737 b3 = ror64(tmp, 16);
60eb8175
JC
6738 b10 -= b3;
6739
6740 tmp = b5 ^ b8;
3733d3f9 6741 b5 = ror64(tmp, 28);
60eb8175
JC
6742 b8 -= b5;
6743
6744 tmp = b1 ^ b14;
3733d3f9 6745 b1 = ror64(tmp, 47);
60eb8175
JC
6746 b14 -= b1;
6747
6748 tmp = b9 ^ b4;
3733d3f9 6749 b9 = ror64(tmp, 41);
60eb8175
JC
6750 b4 -= b9;
6751
6752 tmp = b13 ^ b6;
3733d3f9 6753 b13 = ror64(tmp, 48);
60eb8175
JC
6754 b6 -= b13;
6755
6756 tmp = b11 ^ b2;
3733d3f9 6757 b11 = ror64(tmp, 20);
60eb8175
JC
6758 b2 -= b11;
6759
6760 tmp = b15 ^ b0;
3733d3f9 6761 b15 = ror64(tmp, 5);
60eb8175
JC
6762 b0 -= b15;
6763
6764 tmp = b9 ^ b10;
3733d3f9 6765 b9 = ror64(tmp, 17);
60eb8175
JC
6766 b10 -= b9;
6767
6768 tmp = b11 ^ b8;
3733d3f9 6769 b11 = ror64(tmp, 59);
60eb8175
JC
6770 b8 -= b11;
6771
6772 tmp = b13 ^ b14;
3733d3f9 6773 b13 = ror64(tmp, 41);
60eb8175
JC
6774 b14 -= b13;
6775
6776 tmp = b15 ^ b12;
3733d3f9 6777 b15 = ror64(tmp, 34);
60eb8175
JC
6778 b12 -= b15;
6779
6780 tmp = b1 ^ b6;
3733d3f9 6781 b1 = ror64(tmp, 13);
60eb8175
JC
6782 b6 -= b1;
6783
6784 tmp = b3 ^ b4;
3733d3f9 6785 b3 = ror64(tmp, 51);
60eb8175
JC
6786 b4 -= b3;
6787
6788 tmp = b5 ^ b2;
3733d3f9 6789 b5 = ror64(tmp, 4);
60eb8175
JC
6790 b2 -= b5;
6791
6792 tmp = b7 ^ b0;
3733d3f9 6793 b7 = ror64(tmp, 33);
60eb8175
JC
6794 b0 -= b7;
6795
6796 tmp = b1 ^ b8;
3733d3f9 6797 b1 = ror64(tmp, 52);
60eb8175
JC
6798 b8 -= b1;
6799
6800 tmp = b5 ^ b14;
3733d3f9 6801 b5 = ror64(tmp, 23);
60eb8175
JC
6802 b14 -= b5;
6803
6804 tmp = b3 ^ b12;
3733d3f9 6805 b3 = ror64(tmp, 18);
60eb8175
JC
6806 b12 -= b3;
6807
6808 tmp = b7 ^ b10;
3733d3f9 6809 b7 = ror64(tmp, 49);
60eb8175
JC
6810 b10 -= b7;
6811
6812 tmp = b15 ^ b4;
3733d3f9 6813 b15 = ror64(tmp, 55);
60eb8175
JC
6814 b4 -= b15;
6815
6816 tmp = b11 ^ b6;
3733d3f9 6817 b11 = ror64(tmp, 10);
60eb8175
JC
6818 b6 -= b11;
6819
6820 tmp = b13 ^ b2;
3733d3f9 6821 b13 = ror64(tmp, 19);
60eb8175
JC
6822 b2 -= b13;
6823
6824 tmp = b9 ^ b0;
3733d3f9 6825 b9 = ror64(tmp, 38);
60eb8175
JC
6826 b0 -= b9;
6827
6828 tmp = b15 ^ b14;
3733d3f9 6829 b15 = ror64(tmp, 37);
60eb8175
JC
6830 b14 -= b15 + k7 + t2;
6831 b15 -= k8 + 10;
6832
6833 tmp = b13 ^ b12;
3733d3f9 6834 b13 = ror64(tmp, 22);
60eb8175
JC
6835 b12 -= b13 + k5;
6836 b13 -= k6 + t1;
6837
6838 tmp = b11 ^ b10;
3733d3f9 6839 b11 = ror64(tmp, 17);
60eb8175
JC
6840 b10 -= b11 + k3;
6841 b11 -= k4;
6842
6843 tmp = b9 ^ b8;
3733d3f9 6844 b9 = ror64(tmp, 8);
60eb8175
JC
6845 b8 -= b9 + k1;
6846 b9 -= k2;
6847
6848 tmp = b7 ^ b6;
3733d3f9 6849 b7 = ror64(tmp, 47);
60eb8175
JC
6850 b6 -= b7 + k16;
6851 b7 -= k0;
6852
6853 tmp = b5 ^ b4;
3733d3f9 6854 b5 = ror64(tmp, 8);
60eb8175
JC
6855 b4 -= b5 + k14;
6856 b5 -= k15;
6857
6858 tmp = b3 ^ b2;
3733d3f9 6859 b3 = ror64(tmp, 13);
60eb8175
JC
6860 b2 -= b3 + k12;
6861 b3 -= k13;
6862
6863 tmp = b1 ^ b0;
3733d3f9 6864 b1 = ror64(tmp, 24);
60eb8175
JC
6865 b0 -= b1 + k10;
6866 b1 -= k11;
6867
6868 tmp = b7 ^ b12;
3733d3f9 6869 b7 = ror64(tmp, 20);
60eb8175
JC
6870 b12 -= b7;
6871
6872 tmp = b3 ^ b10;
3733d3f9 6873 b3 = ror64(tmp, 37);
60eb8175
JC
6874 b10 -= b3;
6875
6876 tmp = b5 ^ b8;
3733d3f9 6877 b5 = ror64(tmp, 31);
60eb8175
JC
6878 b8 -= b5;
6879
6880 tmp = b1 ^ b14;
3733d3f9 6881 b1 = ror64(tmp, 23);
60eb8175
JC
6882 b14 -= b1;
6883
6884 tmp = b9 ^ b4;
3733d3f9 6885 b9 = ror64(tmp, 52);
60eb8175
JC
6886 b4 -= b9;
6887
6888 tmp = b13 ^ b6;
3733d3f9 6889 b13 = ror64(tmp, 35);
60eb8175
JC
6890 b6 -= b13;
6891
6892 tmp = b11 ^ b2;
3733d3f9 6893 b11 = ror64(tmp, 48);
60eb8175
JC
6894 b2 -= b11;
6895
6896 tmp = b15 ^ b0;
3733d3f9 6897 b15 = ror64(tmp, 9);
60eb8175
JC
6898 b0 -= b15;
6899
6900 tmp = b9 ^ b10;
3733d3f9 6901 b9 = ror64(tmp, 25);
60eb8175
JC
6902 b10 -= b9;
6903
6904 tmp = b11 ^ b8;
3733d3f9 6905 b11 = ror64(tmp, 44);
60eb8175
JC
6906 b8 -= b11;
6907
6908 tmp = b13 ^ b14;
3733d3f9 6909 b13 = ror64(tmp, 42);
60eb8175
JC
6910 b14 -= b13;
6911
6912 tmp = b15 ^ b12;
3733d3f9 6913 b15 = ror64(tmp, 19);
60eb8175
JC
6914 b12 -= b15;
6915
6916 tmp = b1 ^ b6;
3733d3f9 6917 b1 = ror64(tmp, 46);
60eb8175
JC
6918 b6 -= b1;
6919
6920 tmp = b3 ^ b4;
3733d3f9 6921 b3 = ror64(tmp, 47);
60eb8175
JC
6922 b4 -= b3;
6923
6924 tmp = b5 ^ b2;
3733d3f9 6925 b5 = ror64(tmp, 44);
60eb8175
JC
6926 b2 -= b5;
6927
6928 tmp = b7 ^ b0;
3733d3f9 6929 b7 = ror64(tmp, 31);
60eb8175
JC
6930 b0 -= b7;
6931
6932 tmp = b1 ^ b8;
3733d3f9 6933 b1 = ror64(tmp, 41);
60eb8175
JC
6934 b8 -= b1;
6935
6936 tmp = b5 ^ b14;
3733d3f9 6937 b5 = ror64(tmp, 42);
60eb8175
JC
6938 b14 -= b5;
6939
6940 tmp = b3 ^ b12;
3733d3f9 6941 b3 = ror64(tmp, 53);
60eb8175
JC
6942 b12 -= b3;
6943
6944 tmp = b7 ^ b10;
3733d3f9 6945 b7 = ror64(tmp, 4);
60eb8175
JC
6946 b10 -= b7;
6947
6948 tmp = b15 ^ b4;
3733d3f9 6949 b15 = ror64(tmp, 51);
60eb8175
JC
6950 b4 -= b15;
6951
6952 tmp = b11 ^ b6;
3733d3f9 6953 b11 = ror64(tmp, 56);
60eb8175
JC
6954 b6 -= b11;
6955
6956 tmp = b13 ^ b2;
3733d3f9 6957 b13 = ror64(tmp, 34);
60eb8175
JC
6958 b2 -= b13;
6959
6960 tmp = b9 ^ b0;
3733d3f9 6961 b9 = ror64(tmp, 16);
60eb8175
JC
6962 b0 -= b9;
6963
6964 tmp = b15 ^ b14;
3733d3f9 6965 b15 = ror64(tmp, 30);
60eb8175
JC
6966 b14 -= b15 + k6 + t1;
6967 b15 -= k7 + 9;
6968
6969 tmp = b13 ^ b12;
3733d3f9 6970 b13 = ror64(tmp, 44);
60eb8175
JC
6971 b12 -= b13 + k4;
6972 b13 -= k5 + t0;
6973
6974 tmp = b11 ^ b10;
3733d3f9 6975 b11 = ror64(tmp, 47);
60eb8175
JC
6976 b10 -= b11 + k2;
6977 b11 -= k3;
6978
6979 tmp = b9 ^ b8;
3733d3f9 6980 b9 = ror64(tmp, 12);
60eb8175
JC
6981 b8 -= b9 + k0;
6982 b9 -= k1;
6983
6984 tmp = b7 ^ b6;
3733d3f9 6985 b7 = ror64(tmp, 31);
60eb8175
JC
6986 b6 -= b7 + k15;
6987 b7 -= k16;
6988
6989 tmp = b5 ^ b4;
3733d3f9 6990 b5 = ror64(tmp, 37);
60eb8175
JC
6991 b4 -= b5 + k13;
6992 b5 -= k14;
6993
6994 tmp = b3 ^ b2;
3733d3f9 6995 b3 = ror64(tmp, 9);
60eb8175
JC
6996 b2 -= b3 + k11;
6997 b3 -= k12;
6998
6999 tmp = b1 ^ b0;
3733d3f9 7000 b1 = ror64(tmp, 41);
60eb8175
JC
7001 b0 -= b1 + k9;
7002 b1 -= k10;
7003
7004 tmp = b7 ^ b12;
3733d3f9 7005 b7 = ror64(tmp, 25);
60eb8175
JC
7006 b12 -= b7;
7007
7008 tmp = b3 ^ b10;
3733d3f9 7009 b3 = ror64(tmp, 16);
60eb8175
JC
7010 b10 -= b3;
7011
7012 tmp = b5 ^ b8;
3733d3f9 7013 b5 = ror64(tmp, 28);
60eb8175
JC
7014 b8 -= b5;
7015
7016 tmp = b1 ^ b14;
3733d3f9 7017 b1 = ror64(tmp, 47);
60eb8175
JC
7018 b14 -= b1;
7019
7020 tmp = b9 ^ b4;
3733d3f9 7021 b9 = ror64(tmp, 41);
60eb8175
JC
7022 b4 -= b9;
7023
7024 tmp = b13 ^ b6;
3733d3f9 7025 b13 = ror64(tmp, 48);
60eb8175
JC
7026 b6 -= b13;
7027
7028 tmp = b11 ^ b2;
3733d3f9 7029 b11 = ror64(tmp, 20);
60eb8175
JC
7030 b2 -= b11;
7031
7032 tmp = b15 ^ b0;
3733d3f9 7033 b15 = ror64(tmp, 5);
60eb8175
JC
7034 b0 -= b15;
7035
7036 tmp = b9 ^ b10;
3733d3f9 7037 b9 = ror64(tmp, 17);
60eb8175
JC
7038 b10 -= b9;
7039
7040 tmp = b11 ^ b8;
3733d3f9 7041 b11 = ror64(tmp, 59);
60eb8175
JC
7042 b8 -= b11;
7043
7044 tmp = b13 ^ b14;
3733d3f9 7045 b13 = ror64(tmp, 41);
60eb8175
JC
7046 b14 -= b13;
7047
7048 tmp = b15 ^ b12;
3733d3f9 7049 b15 = ror64(tmp, 34);
60eb8175
JC
7050 b12 -= b15;
7051
7052 tmp = b1 ^ b6;
3733d3f9 7053 b1 = ror64(tmp, 13);
60eb8175
JC
7054 b6 -= b1;
7055
7056 tmp = b3 ^ b4;
3733d3f9 7057 b3 = ror64(tmp, 51);
60eb8175
JC
7058 b4 -= b3;
7059
7060 tmp = b5 ^ b2;
3733d3f9 7061 b5 = ror64(tmp, 4);
60eb8175
JC
7062 b2 -= b5;
7063
7064 tmp = b7 ^ b0;
3733d3f9 7065 b7 = ror64(tmp, 33);
60eb8175
JC
7066 b0 -= b7;
7067
7068 tmp = b1 ^ b8;
3733d3f9 7069 b1 = ror64(tmp, 52);
60eb8175
JC
7070 b8 -= b1;
7071
7072 tmp = b5 ^ b14;
3733d3f9 7073 b5 = ror64(tmp, 23);
60eb8175
JC
7074 b14 -= b5;
7075
7076 tmp = b3 ^ b12;
3733d3f9 7077 b3 = ror64(tmp, 18);
60eb8175
JC
7078 b12 -= b3;
7079
7080 tmp = b7 ^ b10;
3733d3f9 7081 b7 = ror64(tmp, 49);
60eb8175
JC
7082 b10 -= b7;
7083
7084 tmp = b15 ^ b4;
3733d3f9 7085 b15 = ror64(tmp, 55);
60eb8175
JC
7086 b4 -= b15;
7087
7088 tmp = b11 ^ b6;
3733d3f9 7089 b11 = ror64(tmp, 10);
60eb8175
JC
7090 b6 -= b11;
7091
7092 tmp = b13 ^ b2;
3733d3f9 7093 b13 = ror64(tmp, 19);
60eb8175
JC
7094 b2 -= b13;
7095
7096 tmp = b9 ^ b0;
3733d3f9 7097 b9 = ror64(tmp, 38);
60eb8175
JC
7098 b0 -= b9;
7099
7100 tmp = b15 ^ b14;
3733d3f9 7101 b15 = ror64(tmp, 37);
60eb8175
JC
7102 b14 -= b15 + k5 + t0;
7103 b15 -= k6 + 8;
7104
7105 tmp = b13 ^ b12;
3733d3f9 7106 b13 = ror64(tmp, 22);
60eb8175
JC
7107 b12 -= b13 + k3;
7108 b13 -= k4 + t2;
7109
7110 tmp = b11 ^ b10;
3733d3f9 7111 b11 = ror64(tmp, 17);
60eb8175
JC
7112 b10 -= b11 + k1;
7113 b11 -= k2;
7114
7115 tmp = b9 ^ b8;
3733d3f9 7116 b9 = ror64(tmp, 8);
60eb8175
JC
7117 b8 -= b9 + k16;
7118 b9 -= k0;
7119
7120 tmp = b7 ^ b6;
3733d3f9 7121 b7 = ror64(tmp, 47);
60eb8175
JC
7122 b6 -= b7 + k14;
7123 b7 -= k15;
7124
7125 tmp = b5 ^ b4;
3733d3f9 7126 b5 = ror64(tmp, 8);
60eb8175
JC
7127 b4 -= b5 + k12;
7128 b5 -= k13;
7129
7130 tmp = b3 ^ b2;
3733d3f9 7131 b3 = ror64(tmp, 13);
60eb8175
JC
7132 b2 -= b3 + k10;
7133 b3 -= k11;
7134
7135 tmp = b1 ^ b0;
3733d3f9 7136 b1 = ror64(tmp, 24);
60eb8175
JC
7137 b0 -= b1 + k8;
7138 b1 -= k9;
7139
7140 tmp = b7 ^ b12;
3733d3f9 7141 b7 = ror64(tmp, 20);
60eb8175
JC
7142 b12 -= b7;
7143
7144 tmp = b3 ^ b10;
3733d3f9 7145 b3 = ror64(tmp, 37);
60eb8175
JC
7146 b10 -= b3;
7147
7148 tmp = b5 ^ b8;
3733d3f9 7149 b5 = ror64(tmp, 31);
60eb8175
JC
7150 b8 -= b5;
7151
7152 tmp = b1 ^ b14;
3733d3f9 7153 b1 = ror64(tmp, 23);
60eb8175
JC
7154 b14 -= b1;
7155
7156 tmp = b9 ^ b4;
3733d3f9 7157 b9 = ror64(tmp, 52);
60eb8175
JC
7158 b4 -= b9;
7159
7160 tmp = b13 ^ b6;
3733d3f9 7161 b13 = ror64(tmp, 35);
60eb8175
JC
7162 b6 -= b13;
7163
7164 tmp = b11 ^ b2;
3733d3f9 7165 b11 = ror64(tmp, 48);
60eb8175
JC
7166 b2 -= b11;
7167
7168 tmp = b15 ^ b0;
3733d3f9 7169 b15 = ror64(tmp, 9);
60eb8175
JC
7170 b0 -= b15;
7171
7172 tmp = b9 ^ b10;
3733d3f9 7173 b9 = ror64(tmp, 25);
60eb8175
JC
7174 b10 -= b9;
7175
7176 tmp = b11 ^ b8;
3733d3f9 7177 b11 = ror64(tmp, 44);
60eb8175
JC
7178 b8 -= b11;
7179
7180 tmp = b13 ^ b14;
3733d3f9 7181 b13 = ror64(tmp, 42);
60eb8175
JC
7182 b14 -= b13;
7183
7184 tmp = b15 ^ b12;
3733d3f9 7185 b15 = ror64(tmp, 19);
60eb8175
JC
7186 b12 -= b15;
7187
7188 tmp = b1 ^ b6;
3733d3f9 7189 b1 = ror64(tmp, 46);
60eb8175
JC
7190 b6 -= b1;
7191
7192 tmp = b3 ^ b4;
3733d3f9 7193 b3 = ror64(tmp, 47);
60eb8175
JC
7194 b4 -= b3;
7195
7196 tmp = b5 ^ b2;
3733d3f9 7197 b5 = ror64(tmp, 44);
60eb8175
JC
7198 b2 -= b5;
7199
7200 tmp = b7 ^ b0;
3733d3f9 7201 b7 = ror64(tmp, 31);
60eb8175
JC
7202 b0 -= b7;
7203
7204 tmp = b1 ^ b8;
3733d3f9 7205 b1 = ror64(tmp, 41);
60eb8175
JC
7206 b8 -= b1;
7207
7208 tmp = b5 ^ b14;
3733d3f9 7209 b5 = ror64(tmp, 42);
60eb8175
JC
7210 b14 -= b5;
7211
7212 tmp = b3 ^ b12;
3733d3f9 7213 b3 = ror64(tmp, 53);
60eb8175
JC
7214 b12 -= b3;
7215
7216 tmp = b7 ^ b10;
3733d3f9 7217 b7 = ror64(tmp, 4);
60eb8175
JC
7218 b10 -= b7;
7219
7220 tmp = b15 ^ b4;
3733d3f9 7221 b15 = ror64(tmp, 51);
60eb8175
JC
7222 b4 -= b15;
7223
7224 tmp = b11 ^ b6;
3733d3f9 7225 b11 = ror64(tmp, 56);
60eb8175
JC
7226 b6 -= b11;
7227
7228 tmp = b13 ^ b2;
3733d3f9 7229 b13 = ror64(tmp, 34);
60eb8175
JC
7230 b2 -= b13;
7231
7232 tmp = b9 ^ b0;
3733d3f9 7233 b9 = ror64(tmp, 16);
60eb8175
JC
7234 b0 -= b9;
7235
7236 tmp = b15 ^ b14;
3733d3f9 7237 b15 = ror64(tmp, 30);
60eb8175
JC
7238 b14 -= b15 + k4 + t2;
7239 b15 -= k5 + 7;
7240
7241 tmp = b13 ^ b12;
3733d3f9 7242 b13 = ror64(tmp, 44);
60eb8175
JC
7243 b12 -= b13 + k2;
7244 b13 -= k3 + t1;
7245
7246 tmp = b11 ^ b10;
3733d3f9 7247 b11 = ror64(tmp, 47);
60eb8175
JC
7248 b10 -= b11 + k0;
7249 b11 -= k1;
7250
7251 tmp = b9 ^ b8;
3733d3f9 7252 b9 = ror64(tmp, 12);
60eb8175
JC
7253 b8 -= b9 + k15;
7254 b9 -= k16;
7255
7256 tmp = b7 ^ b6;
3733d3f9 7257 b7 = ror64(tmp, 31);
60eb8175
JC
7258 b6 -= b7 + k13;
7259 b7 -= k14;
7260
7261 tmp = b5 ^ b4;
3733d3f9 7262 b5 = ror64(tmp, 37);
60eb8175
JC
7263 b4 -= b5 + k11;
7264 b5 -= k12;
7265
7266 tmp = b3 ^ b2;
3733d3f9 7267 b3 = ror64(tmp, 9);
60eb8175
JC
7268 b2 -= b3 + k9;
7269 b3 -= k10;
7270
7271 tmp = b1 ^ b0;
3733d3f9 7272 b1 = ror64(tmp, 41);
60eb8175
JC
7273 b0 -= b1 + k7;
7274 b1 -= k8;
7275
7276 tmp = b7 ^ b12;
3733d3f9 7277 b7 = ror64(tmp, 25);
60eb8175
JC
7278 b12 -= b7;
7279
7280 tmp = b3 ^ b10;
3733d3f9 7281 b3 = ror64(tmp, 16);
60eb8175
JC
7282 b10 -= b3;
7283
7284 tmp = b5 ^ b8;
3733d3f9 7285 b5 = ror64(tmp, 28);
60eb8175
JC
7286 b8 -= b5;
7287
7288 tmp = b1 ^ b14;
3733d3f9 7289 b1 = ror64(tmp, 47);
60eb8175
JC
7290 b14 -= b1;
7291
7292 tmp = b9 ^ b4;
3733d3f9 7293 b9 = ror64(tmp, 41);
60eb8175
JC
7294 b4 -= b9;
7295
7296 tmp = b13 ^ b6;
3733d3f9 7297 b13 = ror64(tmp, 48);
60eb8175
JC
7298 b6 -= b13;
7299
7300 tmp = b11 ^ b2;
3733d3f9 7301 b11 = ror64(tmp, 20);
60eb8175
JC
7302 b2 -= b11;
7303
7304 tmp = b15 ^ b0;
3733d3f9 7305 b15 = ror64(tmp, 5);
60eb8175
JC
7306 b0 -= b15;
7307
7308 tmp = b9 ^ b10;
3733d3f9 7309 b9 = ror64(tmp, 17);
60eb8175 7310 b10 -= b9;
449bb812 7311
60eb8175 7312 tmp = b11 ^ b8;
3733d3f9 7313 b11 = ror64(tmp, 59);
60eb8175
JC
7314 b8 -= b11;
7315
7316 tmp = b13 ^ b14;
3733d3f9 7317 b13 = ror64(tmp, 41);
60eb8175
JC
7318 b14 -= b13;
7319
7320 tmp = b15 ^ b12;
3733d3f9 7321 b15 = ror64(tmp, 34);
60eb8175
JC
7322 b12 -= b15;
7323
7324 tmp = b1 ^ b6;
3733d3f9 7325 b1 = ror64(tmp, 13);
60eb8175
JC
7326 b6 -= b1;
7327
7328 tmp = b3 ^ b4;
3733d3f9 7329 b3 = ror64(tmp, 51);
60eb8175
JC
7330 b4 -= b3;
7331
7332 tmp = b5 ^ b2;
3733d3f9 7333 b5 = ror64(tmp, 4);
60eb8175
JC
7334 b2 -= b5;
7335
7336 tmp = b7 ^ b0;
3733d3f9 7337 b7 = ror64(tmp, 33);
60eb8175
JC
7338 b0 -= b7;
7339
7340 tmp = b1 ^ b8;
3733d3f9 7341 b1 = ror64(tmp, 52);
60eb8175
JC
7342 b8 -= b1;
7343
7344 tmp = b5 ^ b14;
3733d3f9 7345 b5 = ror64(tmp, 23);
60eb8175
JC
7346 b14 -= b5;
7347
7348 tmp = b3 ^ b12;
3733d3f9 7349 b3 = ror64(tmp, 18);
60eb8175
JC
7350 b12 -= b3;
7351
7352 tmp = b7 ^ b10;
3733d3f9 7353 b7 = ror64(tmp, 49);
60eb8175
JC
7354 b10 -= b7;
7355
7356 tmp = b15 ^ b4;
3733d3f9 7357 b15 = ror64(tmp, 55);
60eb8175
JC
7358 b4 -= b15;
7359
7360 tmp = b11 ^ b6;
3733d3f9 7361 b11 = ror64(tmp, 10);
60eb8175
JC
7362 b6 -= b11;
7363
7364 tmp = b13 ^ b2;
3733d3f9 7365 b13 = ror64(tmp, 19);
60eb8175
JC
7366 b2 -= b13;
7367
7368 tmp = b9 ^ b0;
3733d3f9 7369 b9 = ror64(tmp, 38);
60eb8175
JC
7370 b0 -= b9;
7371
7372 tmp = b15 ^ b14;
3733d3f9 7373 b15 = ror64(tmp, 37);
60eb8175
JC
7374 b14 -= b15 + k3 + t1;
7375 b15 -= k4 + 6;
7376
7377 tmp = b13 ^ b12;
3733d3f9 7378 b13 = ror64(tmp, 22);
60eb8175
JC
7379 b12 -= b13 + k1;
7380 b13 -= k2 + t0;
7381
7382 tmp = b11 ^ b10;
3733d3f9 7383 b11 = ror64(tmp, 17);
60eb8175
JC
7384 b10 -= b11 + k16;
7385 b11 -= k0;
7386
7387 tmp = b9 ^ b8;
3733d3f9 7388 b9 = ror64(tmp, 8);
60eb8175
JC
7389 b8 -= b9 + k14;
7390 b9 -= k15;
7391
7392 tmp = b7 ^ b6;
3733d3f9 7393 b7 = ror64(tmp, 47);
60eb8175
JC
7394 b6 -= b7 + k12;
7395 b7 -= k13;
7396
7397 tmp = b5 ^ b4;
3733d3f9 7398 b5 = ror64(tmp, 8);
60eb8175
JC
7399 b4 -= b5 + k10;
7400 b5 -= k11;
7401
7402 tmp = b3 ^ b2;
3733d3f9 7403 b3 = ror64(tmp, 13);
60eb8175
JC
7404 b2 -= b3 + k8;
7405 b3 -= k9;
7406
7407 tmp = b1 ^ b0;
3733d3f9 7408 b1 = ror64(tmp, 24);
60eb8175
JC
7409 b0 -= b1 + k6;
7410 b1 -= k7;
7411
7412 tmp = b7 ^ b12;
3733d3f9 7413 b7 = ror64(tmp, 20);
60eb8175
JC
7414 b12 -= b7;
7415
7416 tmp = b3 ^ b10;
3733d3f9 7417 b3 = ror64(tmp, 37);
60eb8175
JC
7418 b10 -= b3;
7419
7420 tmp = b5 ^ b8;
3733d3f9 7421 b5 = ror64(tmp, 31);
60eb8175
JC
7422 b8 -= b5;
7423
7424 tmp = b1 ^ b14;
3733d3f9 7425 b1 = ror64(tmp, 23);
60eb8175
JC
7426 b14 -= b1;
7427
7428 tmp = b9 ^ b4;
3733d3f9 7429 b9 = ror64(tmp, 52);
60eb8175
JC
7430 b4 -= b9;
7431
7432 tmp = b13 ^ b6;
3733d3f9 7433 b13 = ror64(tmp, 35);
60eb8175
JC
7434 b6 -= b13;
7435
7436 tmp = b11 ^ b2;
3733d3f9 7437 b11 = ror64(tmp, 48);
60eb8175
JC
7438 b2 -= b11;
7439
7440 tmp = b15 ^ b0;
3733d3f9 7441 b15 = ror64(tmp, 9);
60eb8175
JC
7442 b0 -= b15;
7443
7444 tmp = b9 ^ b10;
3733d3f9 7445 b9 = ror64(tmp, 25);
60eb8175
JC
7446 b10 -= b9;
7447
7448 tmp = b11 ^ b8;
3733d3f9 7449 b11 = ror64(tmp, 44);
60eb8175
JC
7450 b8 -= b11;
7451
7452 tmp = b13 ^ b14;
3733d3f9 7453 b13 = ror64(tmp, 42);
60eb8175
JC
7454 b14 -= b13;
7455
7456 tmp = b15 ^ b12;
3733d3f9 7457 b15 = ror64(tmp, 19);
60eb8175
JC
7458 b12 -= b15;
7459
7460 tmp = b1 ^ b6;
3733d3f9 7461 b1 = ror64(tmp, 46);
60eb8175
JC
7462 b6 -= b1;
7463
7464 tmp = b3 ^ b4;
3733d3f9 7465 b3 = ror64(tmp, 47);
60eb8175
JC
7466 b4 -= b3;
7467
7468 tmp = b5 ^ b2;
3733d3f9 7469 b5 = ror64(tmp, 44);
60eb8175
JC
7470 b2 -= b5;
7471
7472 tmp = b7 ^ b0;
3733d3f9 7473 b7 = ror64(tmp, 31);
60eb8175
JC
7474 b0 -= b7;
7475
7476 tmp = b1 ^ b8;
3733d3f9 7477 b1 = ror64(tmp, 41);
60eb8175
JC
7478 b8 -= b1;
7479
7480 tmp = b5 ^ b14;
3733d3f9 7481 b5 = ror64(tmp, 42);
60eb8175
JC
7482 b14 -= b5;
7483
7484 tmp = b3 ^ b12;
3733d3f9 7485 b3 = ror64(tmp, 53);
60eb8175
JC
7486 b12 -= b3;
7487
7488 tmp = b7 ^ b10;
3733d3f9 7489 b7 = ror64(tmp, 4);
60eb8175
JC
7490 b10 -= b7;
7491
7492 tmp = b15 ^ b4;
3733d3f9 7493 b15 = ror64(tmp, 51);
60eb8175
JC
7494 b4 -= b15;
7495
7496 tmp = b11 ^ b6;
3733d3f9 7497 b11 = ror64(tmp, 56);
60eb8175
JC
7498 b6 -= b11;
7499
7500 tmp = b13 ^ b2;
3733d3f9 7501 b13 = ror64(tmp, 34);
60eb8175
JC
7502 b2 -= b13;
7503
7504 tmp = b9 ^ b0;
3733d3f9 7505 b9 = ror64(tmp, 16);
60eb8175
JC
7506 b0 -= b9;
7507
7508 tmp = b15 ^ b14;
3733d3f9 7509 b15 = ror64(tmp, 30);
60eb8175
JC
7510 b14 -= b15 + k2 + t0;
7511 b15 -= k3 + 5;
7512
7513 tmp = b13 ^ b12;
3733d3f9 7514 b13 = ror64(tmp, 44);
60eb8175
JC
7515 b12 -= b13 + k0;
7516 b13 -= k1 + t2;
7517
7518 tmp = b11 ^ b10;
3733d3f9 7519 b11 = ror64(tmp, 47);
60eb8175
JC
7520 b10 -= b11 + k15;
7521 b11 -= k16;
7522
7523 tmp = b9 ^ b8;
3733d3f9 7524 b9 = ror64(tmp, 12);
60eb8175
JC
7525 b8 -= b9 + k13;
7526 b9 -= k14;
7527
7528 tmp = b7 ^ b6;
3733d3f9 7529 b7 = ror64(tmp, 31);
60eb8175
JC
7530 b6 -= b7 + k11;
7531 b7 -= k12;
7532
7533 tmp = b5 ^ b4;
3733d3f9 7534 b5 = ror64(tmp, 37);
60eb8175
JC
7535 b4 -= b5 + k9;
7536 b5 -= k10;
7537
7538 tmp = b3 ^ b2;
3733d3f9 7539 b3 = ror64(tmp, 9);
60eb8175
JC
7540 b2 -= b3 + k7;
7541 b3 -= k8;
7542
7543 tmp = b1 ^ b0;
3733d3f9 7544 b1 = ror64(tmp, 41);
60eb8175
JC
7545 b0 -= b1 + k5;
7546 b1 -= k6;
7547
7548 tmp = b7 ^ b12;
3733d3f9 7549 b7 = ror64(tmp, 25);
60eb8175
JC
7550 b12 -= b7;
7551
7552 tmp = b3 ^ b10;
3733d3f9 7553 b3 = ror64(tmp, 16);
60eb8175
JC
7554 b10 -= b3;
7555
7556 tmp = b5 ^ b8;
3733d3f9 7557 b5 = ror64(tmp, 28);
60eb8175
JC
7558 b8 -= b5;
7559
7560 tmp = b1 ^ b14;
3733d3f9 7561 b1 = ror64(tmp, 47);
60eb8175
JC
7562 b14 -= b1;
7563
7564 tmp = b9 ^ b4;
3733d3f9 7565 b9 = ror64(tmp, 41);
60eb8175
JC
7566 b4 -= b9;
7567
7568 tmp = b13 ^ b6;
3733d3f9 7569 b13 = ror64(tmp, 48);
60eb8175
JC
7570 b6 -= b13;
7571
7572 tmp = b11 ^ b2;
3733d3f9 7573 b11 = ror64(tmp, 20);
60eb8175
JC
7574 b2 -= b11;
7575
7576 tmp = b15 ^ b0;
3733d3f9 7577 b15 = ror64(tmp, 5);
60eb8175
JC
7578 b0 -= b15;
7579
7580 tmp = b9 ^ b10;
3733d3f9 7581 b9 = ror64(tmp, 17);
60eb8175
JC
7582 b10 -= b9;
7583
7584 tmp = b11 ^ b8;
3733d3f9 7585 b11 = ror64(tmp, 59);
60eb8175
JC
7586 b8 -= b11;
7587
7588 tmp = b13 ^ b14;
3733d3f9 7589 b13 = ror64(tmp, 41);
60eb8175
JC
7590 b14 -= b13;
7591
7592 tmp = b15 ^ b12;
3733d3f9 7593 b15 = ror64(tmp, 34);
60eb8175
JC
7594 b12 -= b15;
7595
7596 tmp = b1 ^ b6;
3733d3f9 7597 b1 = ror64(tmp, 13);
60eb8175
JC
7598 b6 -= b1;
7599
7600 tmp = b3 ^ b4;
3733d3f9 7601 b3 = ror64(tmp, 51);
60eb8175
JC
7602 b4 -= b3;
7603
7604 tmp = b5 ^ b2;
3733d3f9 7605 b5 = ror64(tmp, 4);
60eb8175
JC
7606 b2 -= b5;
7607
7608 tmp = b7 ^ b0;
3733d3f9 7609 b7 = ror64(tmp, 33);
60eb8175
JC
7610 b0 -= b7;
7611
7612 tmp = b1 ^ b8;
3733d3f9 7613 b1 = ror64(tmp, 52);
60eb8175
JC
7614 b8 -= b1;
7615
7616 tmp = b5 ^ b14;
3733d3f9 7617 b5 = ror64(tmp, 23);
60eb8175
JC
7618 b14 -= b5;
7619
7620 tmp = b3 ^ b12;
3733d3f9 7621 b3 = ror64(tmp, 18);
60eb8175
JC
7622 b12 -= b3;
7623
7624 tmp = b7 ^ b10;
3733d3f9 7625 b7 = ror64(tmp, 49);
60eb8175
JC
7626 b10 -= b7;
7627
7628 tmp = b15 ^ b4;
3733d3f9 7629 b15 = ror64(tmp, 55);
60eb8175
JC
7630 b4 -= b15;
7631
7632 tmp = b11 ^ b6;
3733d3f9 7633 b11 = ror64(tmp, 10);
60eb8175
JC
7634 b6 -= b11;
7635
7636 tmp = b13 ^ b2;
3733d3f9 7637 b13 = ror64(tmp, 19);
60eb8175
JC
7638 b2 -= b13;
7639
7640 tmp = b9 ^ b0;
3733d3f9 7641 b9 = ror64(tmp, 38);
60eb8175
JC
7642 b0 -= b9;
7643
7644 tmp = b15 ^ b14;
3733d3f9 7645 b15 = ror64(tmp, 37);
60eb8175
JC
7646 b14 -= b15 + k1 + t2;
7647 b15 -= k2 + 4;
7648
7649 tmp = b13 ^ b12;
3733d3f9 7650 b13 = ror64(tmp, 22);
60eb8175
JC
7651 b12 -= b13 + k16;
7652 b13 -= k0 + t1;
7653
7654 tmp = b11 ^ b10;
3733d3f9 7655 b11 = ror64(tmp, 17);
60eb8175
JC
7656 b10 -= b11 + k14;
7657 b11 -= k15;
7658
7659 tmp = b9 ^ b8;
3733d3f9 7660 b9 = ror64(tmp, 8);
60eb8175
JC
7661 b8 -= b9 + k12;
7662 b9 -= k13;
7663
7664 tmp = b7 ^ b6;
3733d3f9 7665 b7 = ror64(tmp, 47);
60eb8175
JC
7666 b6 -= b7 + k10;
7667 b7 -= k11;
7668
7669 tmp = b5 ^ b4;
3733d3f9 7670 b5 = ror64(tmp, 8);
60eb8175
JC
7671 b4 -= b5 + k8;
7672 b5 -= k9;
7673
7674 tmp = b3 ^ b2;
3733d3f9 7675 b3 = ror64(tmp, 13);
60eb8175
JC
7676 b2 -= b3 + k6;
7677 b3 -= k7;
7678
7679 tmp = b1 ^ b0;
3733d3f9 7680 b1 = ror64(tmp, 24);
60eb8175
JC
7681 b0 -= b1 + k4;
7682 b1 -= k5;
7683
7684 tmp = b7 ^ b12;
3733d3f9 7685 b7 = ror64(tmp, 20);
60eb8175
JC
7686 b12 -= b7;
7687
7688 tmp = b3 ^ b10;
3733d3f9 7689 b3 = ror64(tmp, 37);
60eb8175
JC
7690 b10 -= b3;
7691
7692 tmp = b5 ^ b8;
3733d3f9 7693 b5 = ror64(tmp, 31);
60eb8175
JC
7694 b8 -= b5;
7695
7696 tmp = b1 ^ b14;
3733d3f9 7697 b1 = ror64(tmp, 23);
60eb8175
JC
7698 b14 -= b1;
7699
7700 tmp = b9 ^ b4;
3733d3f9 7701 b9 = ror64(tmp, 52);
60eb8175
JC
7702 b4 -= b9;
7703
7704 tmp = b13 ^ b6;
3733d3f9 7705 b13 = ror64(tmp, 35);
60eb8175
JC
7706 b6 -= b13;
7707
7708 tmp = b11 ^ b2;
3733d3f9 7709 b11 = ror64(tmp, 48);
60eb8175
JC
7710 b2 -= b11;
7711
7712 tmp = b15 ^ b0;
3733d3f9 7713 b15 = ror64(tmp, 9);
60eb8175
JC
7714 b0 -= b15;
7715
7716 tmp = b9 ^ b10;
3733d3f9 7717 b9 = ror64(tmp, 25);
60eb8175
JC
7718 b10 -= b9;
7719
7720 tmp = b11 ^ b8;
3733d3f9 7721 b11 = ror64(tmp, 44);
60eb8175
JC
7722 b8 -= b11;
7723
7724 tmp = b13 ^ b14;
3733d3f9 7725 b13 = ror64(tmp, 42);
60eb8175
JC
7726 b14 -= b13;
7727
7728 tmp = b15 ^ b12;
3733d3f9 7729 b15 = ror64(tmp, 19);
60eb8175
JC
7730 b12 -= b15;
7731
7732 tmp = b1 ^ b6;
3733d3f9 7733 b1 = ror64(tmp, 46);
60eb8175
JC
7734 b6 -= b1;
7735
7736 tmp = b3 ^ b4;
3733d3f9 7737 b3 = ror64(tmp, 47);
60eb8175
JC
7738 b4 -= b3;
7739
7740 tmp = b5 ^ b2;
3733d3f9 7741 b5 = ror64(tmp, 44);
60eb8175
JC
7742 b2 -= b5;
7743
7744 tmp = b7 ^ b0;
3733d3f9 7745 b7 = ror64(tmp, 31);
60eb8175
JC
7746 b0 -= b7;
7747
7748 tmp = b1 ^ b8;
3733d3f9 7749 b1 = ror64(tmp, 41);
60eb8175
JC
7750 b8 -= b1;
7751
7752 tmp = b5 ^ b14;
3733d3f9 7753 b5 = ror64(tmp, 42);
60eb8175
JC
7754 b14 -= b5;
7755
7756 tmp = b3 ^ b12;
3733d3f9 7757 b3 = ror64(tmp, 53);
60eb8175
JC
7758 b12 -= b3;
7759
7760 tmp = b7 ^ b10;
3733d3f9 7761 b7 = ror64(tmp, 4);
60eb8175
JC
7762 b10 -= b7;
7763
7764 tmp = b15 ^ b4;
3733d3f9 7765 b15 = ror64(tmp, 51);
60eb8175
JC
7766 b4 -= b15;
7767
7768 tmp = b11 ^ b6;
3733d3f9 7769 b11 = ror64(tmp, 56);
60eb8175
JC
7770 b6 -= b11;
7771
7772 tmp = b13 ^ b2;
3733d3f9 7773 b13 = ror64(tmp, 34);
60eb8175
JC
7774 b2 -= b13;
7775
7776 tmp = b9 ^ b0;
3733d3f9 7777 b9 = ror64(tmp, 16);
60eb8175
JC
7778 b0 -= b9;
7779
7780 tmp = b15 ^ b14;
3733d3f9 7781 b15 = ror64(tmp, 30);
60eb8175
JC
7782 b14 -= b15 + k0 + t1;
7783 b15 -= k1 + 3;
7784
7785 tmp = b13 ^ b12;
3733d3f9 7786 b13 = ror64(tmp, 44);
60eb8175
JC
7787 b12 -= b13 + k15;
7788 b13 -= k16 + t0;
7789
7790 tmp = b11 ^ b10;
3733d3f9 7791 b11 = ror64(tmp, 47);
60eb8175 7792 b10 -= b11 + k13;
39bd42b0 7793 b11 -= k14;
60eb8175
JC
7794
7795 tmp = b9 ^ b8;
3733d3f9 7796 b9 = ror64(tmp, 12);
60eb8175
JC
7797 b8 -= b9 + k11;
7798 b9 -= k12;
7799
7800 tmp = b7 ^ b6;
3733d3f9 7801 b7 = ror64(tmp, 31);
60eb8175
JC
7802 b6 -= b7 + k9;
7803 b7 -= k10;
7804
7805 tmp = b5 ^ b4;
3733d3f9 7806 b5 = ror64(tmp, 37);
60eb8175
JC
7807 b4 -= b5 + k7;
7808 b5 -= k8;
7809
7810 tmp = b3 ^ b2;
3733d3f9 7811 b3 = ror64(tmp, 9);
60eb8175
JC
7812 b2 -= b3 + k5;
7813 b3 -= k6;
7814
7815 tmp = b1 ^ b0;
3733d3f9 7816 b1 = ror64(tmp, 41);
60eb8175
JC
7817 b0 -= b1 + k3;
7818 b1 -= k4;
7819
7820 tmp = b7 ^ b12;
3733d3f9 7821 b7 = ror64(tmp, 25);
60eb8175
JC
7822 b12 -= b7;
7823
7824 tmp = b3 ^ b10;
3733d3f9 7825 b3 = ror64(tmp, 16);
60eb8175
JC
7826 b10 -= b3;
7827
7828 tmp = b5 ^ b8;
3733d3f9 7829 b5 = ror64(tmp, 28);
60eb8175
JC
7830 b8 -= b5;
7831
7832 tmp = b1 ^ b14;
3733d3f9 7833 b1 = ror64(tmp, 47);
60eb8175
JC
7834 b14 -= b1;
7835
7836 tmp = b9 ^ b4;
3733d3f9 7837 b9 = ror64(tmp, 41);
60eb8175
JC
7838 b4 -= b9;
7839
7840 tmp = b13 ^ b6;
3733d3f9 7841 b13 = ror64(tmp, 48);
60eb8175
JC
7842 b6 -= b13;
7843
7844 tmp = b11 ^ b2;
3733d3f9 7845 b11 = ror64(tmp, 20);
60eb8175
JC
7846 b2 -= b11;
7847
7848 tmp = b15 ^ b0;
3733d3f9 7849 b15 = ror64(tmp, 5);
60eb8175
JC
7850 b0 -= b15;
7851
7852 tmp = b9 ^ b10;
3733d3f9 7853 b9 = ror64(tmp, 17);
60eb8175
JC
7854 b10 -= b9;
7855
7856 tmp = b11 ^ b8;
3733d3f9 7857 b11 = ror64(tmp, 59);
60eb8175
JC
7858 b8 -= b11;
7859
7860 tmp = b13 ^ b14;
3733d3f9 7861 b13 = ror64(tmp, 41);
60eb8175
JC
7862 b14 -= b13;
7863
7864 tmp = b15 ^ b12;
3733d3f9 7865 b15 = ror64(tmp, 34);
60eb8175
JC
7866 b12 -= b15;
7867
7868 tmp = b1 ^ b6;
3733d3f9 7869 b1 = ror64(tmp, 13);
60eb8175
JC
7870 b6 -= b1;
7871
7872 tmp = b3 ^ b4;
3733d3f9 7873 b3 = ror64(tmp, 51);
60eb8175
JC
7874 b4 -= b3;
7875
7876 tmp = b5 ^ b2;
3733d3f9 7877 b5 = ror64(tmp, 4);
60eb8175
JC
7878 b2 -= b5;
7879
7880 tmp = b7 ^ b0;
3733d3f9 7881 b7 = ror64(tmp, 33);
60eb8175
JC
7882 b0 -= b7;
7883
7884 tmp = b1 ^ b8;
3733d3f9 7885 b1 = ror64(tmp, 52);
60eb8175
JC
7886 b8 -= b1;
7887
7888 tmp = b5 ^ b14;
3733d3f9 7889 b5 = ror64(tmp, 23);
60eb8175
JC
7890 b14 -= b5;
7891
7892 tmp = b3 ^ b12;
3733d3f9 7893 b3 = ror64(tmp, 18);
60eb8175
JC
7894 b12 -= b3;
7895
7896 tmp = b7 ^ b10;
3733d3f9 7897 b7 = ror64(tmp, 49);
60eb8175
JC
7898 b10 -= b7;
7899
7900 tmp = b15 ^ b4;
3733d3f9 7901 b15 = ror64(tmp, 55);
60eb8175
JC
7902 b4 -= b15;
7903
7904 tmp = b11 ^ b6;
3733d3f9 7905 b11 = ror64(tmp, 10);
60eb8175
JC
7906 b6 -= b11;
7907
7908 tmp = b13 ^ b2;
3733d3f9 7909 b13 = ror64(tmp, 19);
60eb8175
JC
7910 b2 -= b13;
7911
7912 tmp = b9 ^ b0;
3733d3f9 7913 b9 = ror64(tmp, 38);
60eb8175
JC
7914 b0 -= b9;
7915
7916 tmp = b15 ^ b14;
3733d3f9 7917 b15 = ror64(tmp, 37);
60eb8175
JC
7918 b14 -= b15 + k16 + t0;
7919 b15 -= k0 + 2;
7920
7921 tmp = b13 ^ b12;
3733d3f9 7922 b13 = ror64(tmp, 22);
60eb8175
JC
7923 b12 -= b13 + k14;
7924 b13 -= k15 + t2;
7925
7926 tmp = b11 ^ b10;
3733d3f9 7927 b11 = ror64(tmp, 17);
60eb8175
JC
7928 b10 -= b11 + k12;
7929 b11 -= k13;
7930
7931 tmp = b9 ^ b8;
3733d3f9 7932 b9 = ror64(tmp, 8);
60eb8175
JC
7933 b8 -= b9 + k10;
7934 b9 -= k11;
7935
7936 tmp = b7 ^ b6;
3733d3f9 7937 b7 = ror64(tmp, 47);
60eb8175
JC
7938 b6 -= b7 + k8;
7939 b7 -= k9;
7940
7941 tmp = b5 ^ b4;
3733d3f9 7942 b5 = ror64(tmp, 8);
60eb8175
JC
7943 b4 -= b5 + k6;
7944 b5 -= k7;
7945
7946 tmp = b3 ^ b2;
3733d3f9 7947 b3 = ror64(tmp, 13);
60eb8175
JC
7948 b2 -= b3 + k4;
7949 b3 -= k5;
7950
7951 tmp = b1 ^ b0;
3733d3f9 7952 b1 = ror64(tmp, 24);
60eb8175
JC
7953 b0 -= b1 + k2;
7954 b1 -= k3;
7955
7956 tmp = b7 ^ b12;
3733d3f9 7957 b7 = ror64(tmp, 20);
60eb8175
JC
7958 b12 -= b7;
7959
7960 tmp = b3 ^ b10;
3733d3f9 7961 b3 = ror64(tmp, 37);
60eb8175
JC
7962 b10 -= b3;
7963
7964 tmp = b5 ^ b8;
3733d3f9 7965 b5 = ror64(tmp, 31);
60eb8175
JC
7966 b8 -= b5;
7967
7968 tmp = b1 ^ b14;
3733d3f9 7969 b1 = ror64(tmp, 23);
60eb8175
JC
7970 b14 -= b1;
7971
7972 tmp = b9 ^ b4;
3733d3f9 7973 b9 = ror64(tmp, 52);
60eb8175
JC
7974 b4 -= b9;
7975
7976 tmp = b13 ^ b6;
3733d3f9 7977 b13 = ror64(tmp, 35);
60eb8175
JC
7978 b6 -= b13;
7979
7980 tmp = b11 ^ b2;
3733d3f9 7981 b11 = ror64(tmp, 48);
60eb8175
JC
7982 b2 -= b11;
7983
7984 tmp = b15 ^ b0;
3733d3f9 7985 b15 = ror64(tmp, 9);
60eb8175
JC
7986 b0 -= b15;
7987
7988 tmp = b9 ^ b10;
3733d3f9 7989 b9 = ror64(tmp, 25);
60eb8175
JC
7990 b10 -= b9;
7991
7992 tmp = b11 ^ b8;
3733d3f9 7993 b11 = ror64(tmp, 44);
60eb8175
JC
7994 b8 -= b11;
7995
7996 tmp = b13 ^ b14;
3733d3f9 7997 b13 = ror64(tmp, 42);
60eb8175
JC
7998 b14 -= b13;
7999
8000 tmp = b15 ^ b12;
3733d3f9 8001 b15 = ror64(tmp, 19);
60eb8175
JC
8002 b12 -= b15;
8003
8004 tmp = b1 ^ b6;
3733d3f9 8005 b1 = ror64(tmp, 46);
60eb8175
JC
8006 b6 -= b1;
8007
8008 tmp = b3 ^ b4;
3733d3f9 8009 b3 = ror64(tmp, 47);
60eb8175
JC
8010 b4 -= b3;
8011
8012 tmp = b5 ^ b2;
3733d3f9 8013 b5 = ror64(tmp, 44);
60eb8175
JC
8014 b2 -= b5;
8015
8016 tmp = b7 ^ b0;
3733d3f9 8017 b7 = ror64(tmp, 31);
60eb8175
JC
8018 b0 -= b7;
8019
8020 tmp = b1 ^ b8;
3733d3f9 8021 b1 = ror64(tmp, 41);
60eb8175
JC
8022 b8 -= b1;
8023
8024 tmp = b5 ^ b14;
3733d3f9 8025 b5 = ror64(tmp, 42);
60eb8175
JC
8026 b14 -= b5;
8027
8028 tmp = b3 ^ b12;
3733d3f9 8029 b3 = ror64(tmp, 53);
60eb8175
JC
8030 b12 -= b3;
8031
8032 tmp = b7 ^ b10;
3733d3f9 8033 b7 = ror64(tmp, 4);
60eb8175
JC
8034 b10 -= b7;
8035
8036 tmp = b15 ^ b4;
3733d3f9 8037 b15 = ror64(tmp, 51);
60eb8175
JC
8038 b4 -= b15;
8039
8040 tmp = b11 ^ b6;
3733d3f9 8041 b11 = ror64(tmp, 56);
60eb8175
JC
8042 b6 -= b11;
8043
8044 tmp = b13 ^ b2;
3733d3f9 8045 b13 = ror64(tmp, 34);
60eb8175
JC
8046 b2 -= b13;
8047
8048 tmp = b9 ^ b0;
3733d3f9 8049 b9 = ror64(tmp, 16);
60eb8175
JC
8050 b0 -= b9;
8051
8052 tmp = b15 ^ b14;
3733d3f9 8053 b15 = ror64(tmp, 30);
60eb8175
JC
8054 b14 -= b15 + k15 + t2;
8055 b15 -= k16 + 1;
8056
8057 tmp = b13 ^ b12;
3733d3f9 8058 b13 = ror64(tmp, 44);
60eb8175
JC
8059 b12 -= b13 + k13;
8060 b13 -= k14 + t1;
8061
8062 tmp = b11 ^ b10;
3733d3f9 8063 b11 = ror64(tmp, 47);
60eb8175
JC
8064 b10 -= b11 + k11;
8065 b11 -= k12;
8066
8067 tmp = b9 ^ b8;
3733d3f9 8068 b9 = ror64(tmp, 12);
60eb8175
JC
8069 b8 -= b9 + k9;
8070 b9 -= k10;
8071
8072 tmp = b7 ^ b6;
3733d3f9 8073 b7 = ror64(tmp, 31);
60eb8175
JC
8074 b6 -= b7 + k7;
8075 b7 -= k8;
8076
8077 tmp = b5 ^ b4;
3733d3f9 8078 b5 = ror64(tmp, 37);
60eb8175
JC
8079 b4 -= b5 + k5;
8080 b5 -= k6;
8081
8082 tmp = b3 ^ b2;
3733d3f9 8083 b3 = ror64(tmp, 9);
60eb8175
JC
8084 b2 -= b3 + k3;
8085 b3 -= k4;
8086
8087 tmp = b1 ^ b0;
3733d3f9 8088 b1 = ror64(tmp, 41);
60eb8175
JC
8089 b0 -= b1 + k1;
8090 b1 -= k2;
8091
8092 tmp = b7 ^ b12;
3733d3f9 8093 b7 = ror64(tmp, 25);
60eb8175
JC
8094 b12 -= b7;
8095
8096 tmp = b3 ^ b10;
3733d3f9 8097 b3 = ror64(tmp, 16);
60eb8175
JC
8098 b10 -= b3;
8099
8100 tmp = b5 ^ b8;
3733d3f9 8101 b5 = ror64(tmp, 28);
60eb8175
JC
8102 b8 -= b5;
8103
8104 tmp = b1 ^ b14;
3733d3f9 8105 b1 = ror64(tmp, 47);
60eb8175
JC
8106 b14 -= b1;
8107
8108 tmp = b9 ^ b4;
3733d3f9 8109 b9 = ror64(tmp, 41);
60eb8175
JC
8110 b4 -= b9;
8111
8112 tmp = b13 ^ b6;
3733d3f9 8113 b13 = ror64(tmp, 48);
60eb8175
JC
8114 b6 -= b13;
8115
8116 tmp = b11 ^ b2;
3733d3f9 8117 b11 = ror64(tmp, 20);
60eb8175
JC
8118 b2 -= b11;
8119
8120 tmp = b15 ^ b0;
3733d3f9 8121 b15 = ror64(tmp, 5);
60eb8175
JC
8122 b0 -= b15;
8123
8124 tmp = b9 ^ b10;
3733d3f9 8125 b9 = ror64(tmp, 17);
60eb8175
JC
8126 b10 -= b9;
8127
8128 tmp = b11 ^ b8;
3733d3f9 8129 b11 = ror64(tmp, 59);
60eb8175
JC
8130 b8 -= b11;
8131
8132 tmp = b13 ^ b14;
3733d3f9 8133 b13 = ror64(tmp, 41);
60eb8175
JC
8134 b14 -= b13;
8135
8136 tmp = b15 ^ b12;
3733d3f9 8137 b15 = ror64(tmp, 34);
60eb8175
JC
8138 b12 -= b15;
8139
8140 tmp = b1 ^ b6;
3733d3f9 8141 b1 = ror64(tmp, 13);
60eb8175
JC
8142 b6 -= b1;
8143
8144 tmp = b3 ^ b4;
3733d3f9 8145 b3 = ror64(tmp, 51);
60eb8175
JC
8146 b4 -= b3;
8147
8148 tmp = b5 ^ b2;
3733d3f9 8149 b5 = ror64(tmp, 4);
60eb8175
JC
8150 b2 -= b5;
8151
8152 tmp = b7 ^ b0;
3733d3f9 8153 b7 = ror64(tmp, 33);
60eb8175
JC
8154 b0 -= b7;
8155
8156 tmp = b1 ^ b8;
3733d3f9 8157 b1 = ror64(tmp, 52);
60eb8175
JC
8158 b8 -= b1;
8159
8160 tmp = b5 ^ b14;
3733d3f9 8161 b5 = ror64(tmp, 23);
60eb8175
JC
8162 b14 -= b5;
8163
8164 tmp = b3 ^ b12;
3733d3f9 8165 b3 = ror64(tmp, 18);
60eb8175
JC
8166 b12 -= b3;
8167
8168 tmp = b7 ^ b10;
3733d3f9 8169 b7 = ror64(tmp, 49);
60eb8175
JC
8170 b10 -= b7;
8171
8172 tmp = b15 ^ b4;
3733d3f9 8173 b15 = ror64(tmp, 55);
60eb8175
JC
8174 b4 -= b15;
8175
8176 tmp = b11 ^ b6;
3733d3f9 8177 b11 = ror64(tmp, 10);
60eb8175
JC
8178 b6 -= b11;
8179
8180 tmp = b13 ^ b2;
3733d3f9 8181 b13 = ror64(tmp, 19);
60eb8175
JC
8182 b2 -= b13;
8183
8184 tmp = b9 ^ b0;
3733d3f9 8185 b9 = ror64(tmp, 38);
60eb8175
JC
8186 b0 -= b9;
8187
8188 tmp = b15 ^ b14;
3733d3f9 8189 b15 = ror64(tmp, 37);
60eb8175
JC
8190 b14 -= b15 + k14 + t1;
8191 b15 -= k15;
8192
8193 tmp = b13 ^ b12;
3733d3f9 8194 b13 = ror64(tmp, 22);
60eb8175
JC
8195 b12 -= b13 + k12;
8196 b13 -= k13 + t0;
8197
8198 tmp = b11 ^ b10;
3733d3f9 8199 b11 = ror64(tmp, 17);
60eb8175
JC
8200 b10 -= b11 + k10;
8201 b11 -= k11;
8202
8203 tmp = b9 ^ b8;
3733d3f9 8204 b9 = ror64(tmp, 8);
60eb8175
JC
8205 b8 -= b9 + k8;
8206 b9 -= k9;
8207
8208 tmp = b7 ^ b6;
3733d3f9 8209 b7 = ror64(tmp, 47);
60eb8175
JC
8210 b6 -= b7 + k6;
8211 b7 -= k7;
8212
8213 tmp = b5 ^ b4;
3733d3f9 8214 b5 = ror64(tmp, 8);
60eb8175
JC
8215 b4 -= b5 + k4;
8216 b5 -= k5;
8217
8218 tmp = b3 ^ b2;
3733d3f9 8219 b3 = ror64(tmp, 13);
60eb8175
JC
8220 b2 -= b3 + k2;
8221 b3 -= k3;
8222
8223 tmp = b1 ^ b0;
3733d3f9 8224 b1 = ror64(tmp, 24);
60eb8175
JC
8225 b0 -= b1 + k0;
8226 b1 -= k1;
449bb812 8227
39bd42b0
JC
8228 output[15] = b15;
8229 output[14] = b14;
8230 output[13] = b13;
8231 output[12] = b12;
8232 output[11] = b11;
8233 output[10] = b10;
8234 output[9] = b9;
8235 output[8] = b8;
8236 output[7] = b7;
8237 output[6] = b6;
8238 output[5] = b5;
8239 output[4] = b4;
8240 output[3] = b3;
8241 output[2] = b2;
8242 output[1] = b1;
8243 output[0] = b0;
449bb812 8244}