Upload UI
[lsnes.git] / src / library / skein512c.inc
bloba6941e64f8557d18444f218aac5fefdf92ddc272
1 static void skein256_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak)
3         uint64_t k=key[0]^key[1]^key[2]^key[3]^0x1BD11BDAA9FC1A22ULL;
4         uint64_t t=tweak[0]^tweak[1];
5         out[0]=in[0];
6         out[1]=in[1];
7         out[2]=in[2];
8         out[3]=in[3];
9         out[0]+=key[0];
10         out[1]+=key[1]+tweak[0];
11         out[2]+=key[2]+tweak[1];
12         out[3]+=key[3]+0;
13         out[0]=out[0]+out[1];
14         out[1]=(out[1] << 14)|(out[1] >> 50);
15         out[1]=out[0]^out[1];
16         out[2]=out[2]+out[3];
17         out[3]=(out[3] << 16)|(out[3] >> 48);
18         out[3]=out[2]^out[3];
19         out[0]=out[0]+out[3];
20         out[3]=(out[3] << 52)|(out[3] >> 12);
21         out[3]=out[0]^out[3];
22         out[2]=out[2]+out[1];
23         out[1]=(out[1] << 57)|(out[1] >> 7);
24         out[1]=out[2]^out[1];
25         out[0]=out[0]+out[1];
26         out[1]=(out[1] << 23)|(out[1] >> 41);
27         out[1]=out[0]^out[1];
28         out[2]=out[2]+out[3];
29         out[3]=(out[3] << 40)|(out[3] >> 24);
30         out[3]=out[2]^out[3];
31         out[0]=out[0]+out[3];
32         out[3]=(out[3] << 5)|(out[3] >> 59);
33         out[3]=out[0]^out[3];
34         out[2]=out[2]+out[1];
35         out[1]=(out[1] << 37)|(out[1] >> 27);
36         out[1]=out[2]^out[1];
37         out[0]+=key[1];
38         out[1]+=key[2]+tweak[1];
39         out[2]+=key[3]+t;
40         out[3]+=k+1;
41         out[0]=out[0]+out[1];
42         out[1]=(out[1] << 25)|(out[1] >> 39);
43         out[1]=out[0]^out[1];
44         out[2]=out[2]+out[3];
45         out[3]=(out[3] << 33)|(out[3] >> 31);
46         out[3]=out[2]^out[3];
47         out[0]=out[0]+out[3];
48         out[3]=(out[3] << 46)|(out[3] >> 18);
49         out[3]=out[0]^out[3];
50         out[2]=out[2]+out[1];
51         out[1]=(out[1] << 12)|(out[1] >> 52);
52         out[1]=out[2]^out[1];
53         out[0]=out[0]+out[1];
54         out[1]=(out[1] << 58)|(out[1] >> 6);
55         out[1]=out[0]^out[1];
56         out[2]=out[2]+out[3];
57         out[3]=(out[3] << 22)|(out[3] >> 42);
58         out[3]=out[2]^out[3];
59         out[0]=out[0]+out[3];
60         out[3]=(out[3] << 32)|(out[3] >> 32);
61         out[3]=out[0]^out[3];
62         out[2]=out[2]+out[1];
63         out[1]=(out[1] << 32)|(out[1] >> 32);
64         out[1]=out[2]^out[1];
65         out[0]+=key[2];
66         out[1]+=key[3]+t;
67         out[2]+=k+tweak[0];
68         out[3]+=key[0]+2;
69         out[0]=out[0]+out[1];
70         out[1]=(out[1] << 14)|(out[1] >> 50);
71         out[1]=out[0]^out[1];
72         out[2]=out[2]+out[3];
73         out[3]=(out[3] << 16)|(out[3] >> 48);
74         out[3]=out[2]^out[3];
75         out[0]=out[0]+out[3];
76         out[3]=(out[3] << 52)|(out[3] >> 12);
77         out[3]=out[0]^out[3];
78         out[2]=out[2]+out[1];
79         out[1]=(out[1] << 57)|(out[1] >> 7);
80         out[1]=out[2]^out[1];
81         out[0]=out[0]+out[1];
82         out[1]=(out[1] << 23)|(out[1] >> 41);
83         out[1]=out[0]^out[1];
84         out[2]=out[2]+out[3];
85         out[3]=(out[3] << 40)|(out[3] >> 24);
86         out[3]=out[2]^out[3];
87         out[0]=out[0]+out[3];
88         out[3]=(out[3] << 5)|(out[3] >> 59);
89         out[3]=out[0]^out[3];
90         out[2]=out[2]+out[1];
91         out[1]=(out[1] << 37)|(out[1] >> 27);
92         out[1]=out[2]^out[1];
93         out[0]+=key[3];
94         out[1]+=k+tweak[0];
95         out[2]+=key[0]+tweak[1];
96         out[3]+=key[1]+3;
97         out[0]=out[0]+out[1];
98         out[1]=(out[1] << 25)|(out[1] >> 39);
99         out[1]=out[0]^out[1];
100         out[2]=out[2]+out[3];
101         out[3]=(out[3] << 33)|(out[3] >> 31);
102         out[3]=out[2]^out[3];
103         out[0]=out[0]+out[3];
104         out[3]=(out[3] << 46)|(out[3] >> 18);
105         out[3]=out[0]^out[3];
106         out[2]=out[2]+out[1];
107         out[1]=(out[1] << 12)|(out[1] >> 52);
108         out[1]=out[2]^out[1];
109         out[0]=out[0]+out[1];
110         out[1]=(out[1] << 58)|(out[1] >> 6);
111         out[1]=out[0]^out[1];
112         out[2]=out[2]+out[3];
113         out[3]=(out[3] << 22)|(out[3] >> 42);
114         out[3]=out[2]^out[3];
115         out[0]=out[0]+out[3];
116         out[3]=(out[3] << 32)|(out[3] >> 32);
117         out[3]=out[0]^out[3];
118         out[2]=out[2]+out[1];
119         out[1]=(out[1] << 32)|(out[1] >> 32);
120         out[1]=out[2]^out[1];
121         out[0]+=k;
122         out[1]+=key[0]+tweak[1];
123         out[2]+=key[1]+t;
124         out[3]+=key[2]+4;
125         out[0]=out[0]+out[1];
126         out[1]=(out[1] << 14)|(out[1] >> 50);
127         out[1]=out[0]^out[1];
128         out[2]=out[2]+out[3];
129         out[3]=(out[3] << 16)|(out[3] >> 48);
130         out[3]=out[2]^out[3];
131         out[0]=out[0]+out[3];
132         out[3]=(out[3] << 52)|(out[3] >> 12);
133         out[3]=out[0]^out[3];
134         out[2]=out[2]+out[1];
135         out[1]=(out[1] << 57)|(out[1] >> 7);
136         out[1]=out[2]^out[1];
137         out[0]=out[0]+out[1];
138         out[1]=(out[1] << 23)|(out[1] >> 41);
139         out[1]=out[0]^out[1];
140         out[2]=out[2]+out[3];
141         out[3]=(out[3] << 40)|(out[3] >> 24);
142         out[3]=out[2]^out[3];
143         out[0]=out[0]+out[3];
144         out[3]=(out[3] << 5)|(out[3] >> 59);
145         out[3]=out[0]^out[3];
146         out[2]=out[2]+out[1];
147         out[1]=(out[1] << 37)|(out[1] >> 27);
148         out[1]=out[2]^out[1];
149         out[0]+=key[0];
150         out[1]+=key[1]+t;
151         out[2]+=key[2]+tweak[0];
152         out[3]+=key[3]+5;
153         out[0]=out[0]+out[1];
154         out[1]=(out[1] << 25)|(out[1] >> 39);
155         out[1]=out[0]^out[1];
156         out[2]=out[2]+out[3];
157         out[3]=(out[3] << 33)|(out[3] >> 31);
158         out[3]=out[2]^out[3];
159         out[0]=out[0]+out[3];
160         out[3]=(out[3] << 46)|(out[3] >> 18);
161         out[3]=out[0]^out[3];
162         out[2]=out[2]+out[1];
163         out[1]=(out[1] << 12)|(out[1] >> 52);
164         out[1]=out[2]^out[1];
165         out[0]=out[0]+out[1];
166         out[1]=(out[1] << 58)|(out[1] >> 6);
167         out[1]=out[0]^out[1];
168         out[2]=out[2]+out[3];
169         out[3]=(out[3] << 22)|(out[3] >> 42);
170         out[3]=out[2]^out[3];
171         out[0]=out[0]+out[3];
172         out[3]=(out[3] << 32)|(out[3] >> 32);
173         out[3]=out[0]^out[3];
174         out[2]=out[2]+out[1];
175         out[1]=(out[1] << 32)|(out[1] >> 32);
176         out[1]=out[2]^out[1];
177         out[0]+=key[1];
178         out[1]+=key[2]+tweak[0];
179         out[2]+=key[3]+tweak[1];
180         out[3]+=k+6;
181         out[0]=out[0]+out[1];
182         out[1]=(out[1] << 14)|(out[1] >> 50);
183         out[1]=out[0]^out[1];
184         out[2]=out[2]+out[3];
185         out[3]=(out[3] << 16)|(out[3] >> 48);
186         out[3]=out[2]^out[3];
187         out[0]=out[0]+out[3];
188         out[3]=(out[3] << 52)|(out[3] >> 12);
189         out[3]=out[0]^out[3];
190         out[2]=out[2]+out[1];
191         out[1]=(out[1] << 57)|(out[1] >> 7);
192         out[1]=out[2]^out[1];
193         out[0]=out[0]+out[1];
194         out[1]=(out[1] << 23)|(out[1] >> 41);
195         out[1]=out[0]^out[1];
196         out[2]=out[2]+out[3];
197         out[3]=(out[3] << 40)|(out[3] >> 24);
198         out[3]=out[2]^out[3];
199         out[0]=out[0]+out[3];
200         out[3]=(out[3] << 5)|(out[3] >> 59);
201         out[3]=out[0]^out[3];
202         out[2]=out[2]+out[1];
203         out[1]=(out[1] << 37)|(out[1] >> 27);
204         out[1]=out[2]^out[1];
205         out[0]+=key[2];
206         out[1]+=key[3]+tweak[1];
207         out[2]+=k+t;
208         out[3]+=key[0]+7;
209         out[0]=out[0]+out[1];
210         out[1]=(out[1] << 25)|(out[1] >> 39);
211         out[1]=out[0]^out[1];
212         out[2]=out[2]+out[3];
213         out[3]=(out[3] << 33)|(out[3] >> 31);
214         out[3]=out[2]^out[3];
215         out[0]=out[0]+out[3];
216         out[3]=(out[3] << 46)|(out[3] >> 18);
217         out[3]=out[0]^out[3];
218         out[2]=out[2]+out[1];
219         out[1]=(out[1] << 12)|(out[1] >> 52);
220         out[1]=out[2]^out[1];
221         out[0]=out[0]+out[1];
222         out[1]=(out[1] << 58)|(out[1] >> 6);
223         out[1]=out[0]^out[1];
224         out[2]=out[2]+out[3];
225         out[3]=(out[3] << 22)|(out[3] >> 42);
226         out[3]=out[2]^out[3];
227         out[0]=out[0]+out[3];
228         out[3]=(out[3] << 32)|(out[3] >> 32);
229         out[3]=out[0]^out[3];
230         out[2]=out[2]+out[1];
231         out[1]=(out[1] << 32)|(out[1] >> 32);
232         out[1]=out[2]^out[1];
233         out[0]+=key[3];
234         out[1]+=k+t;
235         out[2]+=key[0]+tweak[0];
236         out[3]+=key[1]+8;
237         out[0]=out[0]+out[1];
238         out[1]=(out[1] << 14)|(out[1] >> 50);
239         out[1]=out[0]^out[1];
240         out[2]=out[2]+out[3];
241         out[3]=(out[3] << 16)|(out[3] >> 48);
242         out[3]=out[2]^out[3];
243         out[0]=out[0]+out[3];
244         out[3]=(out[3] << 52)|(out[3] >> 12);
245         out[3]=out[0]^out[3];
246         out[2]=out[2]+out[1];
247         out[1]=(out[1] << 57)|(out[1] >> 7);
248         out[1]=out[2]^out[1];
249         out[0]=out[0]+out[1];
250         out[1]=(out[1] << 23)|(out[1] >> 41);
251         out[1]=out[0]^out[1];
252         out[2]=out[2]+out[3];
253         out[3]=(out[3] << 40)|(out[3] >> 24);
254         out[3]=out[2]^out[3];
255         out[0]=out[0]+out[3];
256         out[3]=(out[3] << 5)|(out[3] >> 59);
257         out[3]=out[0]^out[3];
258         out[2]=out[2]+out[1];
259         out[1]=(out[1] << 37)|(out[1] >> 27);
260         out[1]=out[2]^out[1];
261         out[0]+=k;
262         out[1]+=key[0]+tweak[0];
263         out[2]+=key[1]+tweak[1];
264         out[3]+=key[2]+9;
265         out[0]=out[0]+out[1];
266         out[1]=(out[1] << 25)|(out[1] >> 39);
267         out[1]=out[0]^out[1];
268         out[2]=out[2]+out[3];
269         out[3]=(out[3] << 33)|(out[3] >> 31);
270         out[3]=out[2]^out[3];
271         out[0]=out[0]+out[3];
272         out[3]=(out[3] << 46)|(out[3] >> 18);
273         out[3]=out[0]^out[3];
274         out[2]=out[2]+out[1];
275         out[1]=(out[1] << 12)|(out[1] >> 52);
276         out[1]=out[2]^out[1];
277         out[0]=out[0]+out[1];
278         out[1]=(out[1] << 58)|(out[1] >> 6);
279         out[1]=out[0]^out[1];
280         out[2]=out[2]+out[3];
281         out[3]=(out[3] << 22)|(out[3] >> 42);
282         out[3]=out[2]^out[3];
283         out[0]=out[0]+out[3];
284         out[3]=(out[3] << 32)|(out[3] >> 32);
285         out[3]=out[0]^out[3];
286         out[2]=out[2]+out[1];
287         out[1]=(out[1] << 32)|(out[1] >> 32);
288         out[1]=out[2]^out[1];
289         out[0]+=key[0];
290         out[1]+=key[1]+tweak[1];
291         out[2]+=key[2]+t;
292         out[3]+=key[3]+10;
293         out[0]=out[0]+out[1];
294         out[1]=(out[1] << 14)|(out[1] >> 50);
295         out[1]=out[0]^out[1];
296         out[2]=out[2]+out[3];
297         out[3]=(out[3] << 16)|(out[3] >> 48);
298         out[3]=out[2]^out[3];
299         out[0]=out[0]+out[3];
300         out[3]=(out[3] << 52)|(out[3] >> 12);
301         out[3]=out[0]^out[3];
302         out[2]=out[2]+out[1];
303         out[1]=(out[1] << 57)|(out[1] >> 7);
304         out[1]=out[2]^out[1];
305         out[0]=out[0]+out[1];
306         out[1]=(out[1] << 23)|(out[1] >> 41);
307         out[1]=out[0]^out[1];
308         out[2]=out[2]+out[3];
309         out[3]=(out[3] << 40)|(out[3] >> 24);
310         out[3]=out[2]^out[3];
311         out[0]=out[0]+out[3];
312         out[3]=(out[3] << 5)|(out[3] >> 59);
313         out[3]=out[0]^out[3];
314         out[2]=out[2]+out[1];
315         out[1]=(out[1] << 37)|(out[1] >> 27);
316         out[1]=out[2]^out[1];
317         out[0]+=key[1];
318         out[1]+=key[2]+t;
319         out[2]+=key[3]+tweak[0];
320         out[3]+=k+11;
321         out[0]=out[0]+out[1];
322         out[1]=(out[1] << 25)|(out[1] >> 39);
323         out[1]=out[0]^out[1];
324         out[2]=out[2]+out[3];
325         out[3]=(out[3] << 33)|(out[3] >> 31);
326         out[3]=out[2]^out[3];
327         out[0]=out[0]+out[3];
328         out[3]=(out[3] << 46)|(out[3] >> 18);
329         out[3]=out[0]^out[3];
330         out[2]=out[2]+out[1];
331         out[1]=(out[1] << 12)|(out[1] >> 52);
332         out[1]=out[2]^out[1];
333         out[0]=out[0]+out[1];
334         out[1]=(out[1] << 58)|(out[1] >> 6);
335         out[1]=out[0]^out[1];
336         out[2]=out[2]+out[3];
337         out[3]=(out[3] << 22)|(out[3] >> 42);
338         out[3]=out[2]^out[3];
339         out[0]=out[0]+out[3];
340         out[3]=(out[3] << 32)|(out[3] >> 32);
341         out[3]=out[0]^out[3];
342         out[2]=out[2]+out[1];
343         out[1]=(out[1] << 32)|(out[1] >> 32);
344         out[1]=out[2]^out[1];
345         out[0]+=key[2];
346         out[1]+=key[3]+tweak[0];
347         out[2]+=k+tweak[1];
348         out[3]+=key[0]+12;
349         out[0]=out[0]+out[1];
350         out[1]=(out[1] << 14)|(out[1] >> 50);
351         out[1]=out[0]^out[1];
352         out[2]=out[2]+out[3];
353         out[3]=(out[3] << 16)|(out[3] >> 48);
354         out[3]=out[2]^out[3];
355         out[0]=out[0]+out[3];
356         out[3]=(out[3] << 52)|(out[3] >> 12);
357         out[3]=out[0]^out[3];
358         out[2]=out[2]+out[1];
359         out[1]=(out[1] << 57)|(out[1] >> 7);
360         out[1]=out[2]^out[1];
361         out[0]=out[0]+out[1];
362         out[1]=(out[1] << 23)|(out[1] >> 41);
363         out[1]=out[0]^out[1];
364         out[2]=out[2]+out[3];
365         out[3]=(out[3] << 40)|(out[3] >> 24);
366         out[3]=out[2]^out[3];
367         out[0]=out[0]+out[3];
368         out[3]=(out[3] << 5)|(out[3] >> 59);
369         out[3]=out[0]^out[3];
370         out[2]=out[2]+out[1];
371         out[1]=(out[1] << 37)|(out[1] >> 27);
372         out[1]=out[2]^out[1];
373         out[0]+=key[3];
374         out[1]+=k+tweak[1];
375         out[2]+=key[0]+t;
376         out[3]+=key[1]+13;
377         out[0]=out[0]+out[1];
378         out[1]=(out[1] << 25)|(out[1] >> 39);
379         out[1]=out[0]^out[1];
380         out[2]=out[2]+out[3];
381         out[3]=(out[3] << 33)|(out[3] >> 31);
382         out[3]=out[2]^out[3];
383         out[0]=out[0]+out[3];
384         out[3]=(out[3] << 46)|(out[3] >> 18);
385         out[3]=out[0]^out[3];
386         out[2]=out[2]+out[1];
387         out[1]=(out[1] << 12)|(out[1] >> 52);
388         out[1]=out[2]^out[1];
389         out[0]=out[0]+out[1];
390         out[1]=(out[1] << 58)|(out[1] >> 6);
391         out[1]=out[0]^out[1];
392         out[2]=out[2]+out[3];
393         out[3]=(out[3] << 22)|(out[3] >> 42);
394         out[3]=out[2]^out[3];
395         out[0]=out[0]+out[3];
396         out[3]=(out[3] << 32)|(out[3] >> 32);
397         out[3]=out[0]^out[3];
398         out[2]=out[2]+out[1];
399         out[1]=(out[1] << 32)|(out[1] >> 32);
400         out[1]=out[2]^out[1];
401         out[0]+=k;
402         out[1]+=key[0]+t;
403         out[2]+=key[1]+tweak[0];
404         out[3]+=key[2]+14;
405         out[0]=out[0]+out[1];
406         out[1]=(out[1] << 14)|(out[1] >> 50);
407         out[1]=out[0]^out[1];
408         out[2]=out[2]+out[3];
409         out[3]=(out[3] << 16)|(out[3] >> 48);
410         out[3]=out[2]^out[3];
411         out[0]=out[0]+out[3];
412         out[3]=(out[3] << 52)|(out[3] >> 12);
413         out[3]=out[0]^out[3];
414         out[2]=out[2]+out[1];
415         out[1]=(out[1] << 57)|(out[1] >> 7);
416         out[1]=out[2]^out[1];
417         out[0]=out[0]+out[1];
418         out[1]=(out[1] << 23)|(out[1] >> 41);
419         out[1]=out[0]^out[1];
420         out[2]=out[2]+out[3];
421         out[3]=(out[3] << 40)|(out[3] >> 24);
422         out[3]=out[2]^out[3];
423         out[0]=out[0]+out[3];
424         out[3]=(out[3] << 5)|(out[3] >> 59);
425         out[3]=out[0]^out[3];
426         out[2]=out[2]+out[1];
427         out[1]=(out[1] << 37)|(out[1] >> 27);
428         out[1]=out[2]^out[1];
429         out[0]+=key[0];
430         out[1]+=key[1]+tweak[0];
431         out[2]+=key[2]+tweak[1];
432         out[3]+=key[3]+15;
433         out[0]=out[0]+out[1];
434         out[1]=(out[1] << 25)|(out[1] >> 39);
435         out[1]=out[0]^out[1];
436         out[2]=out[2]+out[3];
437         out[3]=(out[3] << 33)|(out[3] >> 31);
438         out[3]=out[2]^out[3];
439         out[0]=out[0]+out[3];
440         out[3]=(out[3] << 46)|(out[3] >> 18);
441         out[3]=out[0]^out[3];
442         out[2]=out[2]+out[1];
443         out[1]=(out[1] << 12)|(out[1] >> 52);
444         out[1]=out[2]^out[1];
445         out[0]=out[0]+out[1];
446         out[1]=(out[1] << 58)|(out[1] >> 6);
447         out[1]=out[0]^out[1];
448         out[2]=out[2]+out[3];
449         out[3]=(out[3] << 22)|(out[3] >> 42);
450         out[3]=out[2]^out[3];
451         out[0]=out[0]+out[3];
452         out[3]=(out[3] << 32)|(out[3] >> 32);
453         out[3]=out[0]^out[3];
454         out[2]=out[2]+out[1];
455         out[1]=(out[1] << 32)|(out[1] >> 32);
456         out[1]=out[2]^out[1];
457         out[0]+=key[1];
458         out[1]+=key[2]+tweak[1];
459         out[2]+=key[3]+t;
460         out[3]+=k+16;
461         out[0]=out[0]+out[1];
462         out[1]=(out[1] << 14)|(out[1] >> 50);
463         out[1]=out[0]^out[1];
464         out[2]=out[2]+out[3];
465         out[3]=(out[3] << 16)|(out[3] >> 48);
466         out[3]=out[2]^out[3];
467         out[0]=out[0]+out[3];
468         out[3]=(out[3] << 52)|(out[3] >> 12);
469         out[3]=out[0]^out[3];
470         out[2]=out[2]+out[1];
471         out[1]=(out[1] << 57)|(out[1] >> 7);
472         out[1]=out[2]^out[1];
473         out[0]=out[0]+out[1];
474         out[1]=(out[1] << 23)|(out[1] >> 41);
475         out[1]=out[0]^out[1];
476         out[2]=out[2]+out[3];
477         out[3]=(out[3] << 40)|(out[3] >> 24);
478         out[3]=out[2]^out[3];
479         out[0]=out[0]+out[3];
480         out[3]=(out[3] << 5)|(out[3] >> 59);
481         out[3]=out[0]^out[3];
482         out[2]=out[2]+out[1];
483         out[1]=(out[1] << 37)|(out[1] >> 27);
484         out[1]=out[2]^out[1];
485         out[0]+=key[2];
486         out[1]+=key[3]+t;
487         out[2]+=k+tweak[0];
488         out[3]+=key[0]+17;
489         out[0]=out[0]+out[1];
490         out[1]=(out[1] << 25)|(out[1] >> 39);
491         out[1]=out[0]^out[1];
492         out[2]=out[2]+out[3];
493         out[3]=(out[3] << 33)|(out[3] >> 31);
494         out[3]=out[2]^out[3];
495         out[0]=out[0]+out[3];
496         out[3]=(out[3] << 46)|(out[3] >> 18);
497         out[3]=out[0]^out[3];
498         out[2]=out[2]+out[1];
499         out[1]=(out[1] << 12)|(out[1] >> 52);
500         out[1]=out[2]^out[1];
501         out[0]=out[0]+out[1];
502         out[1]=(out[1] << 58)|(out[1] >> 6);
503         out[1]=out[0]^out[1];
504         out[2]=out[2]+out[3];
505         out[3]=(out[3] << 22)|(out[3] >> 42);
506         out[3]=out[2]^out[3];
507         out[0]=out[0]+out[3];
508         out[3]=(out[3] << 32)|(out[3] >> 32);
509         out[3]=out[0]^out[3];
510         out[2]=out[2]+out[1];
511         out[1]=(out[1] << 32)|(out[1] >> 32);
512         out[1]=out[2]^out[1];
513         out[0]+=key[3];
514         out[1]+=k+tweak[0];
515         out[2]+=key[0]+tweak[1];
516         out[3]+=key[1]+18;
517         out[0]=in[0]^out[0];
518         out[1]=in[1]^out[1];
519         out[2]=in[2]^out[2];
520         out[3]=in[3]^out[3];
521         out[4]=in[4]^out[4];
523 static void skein512_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak)
525         uint64_t k=key[0]^key[1]^key[2]^key[3]^key[4]^key[5]^key[6]^key[7]^0x1BD11BDAA9FC1A22ULL;
526         uint64_t t=tweak[0]^tweak[1];
527         out[0]=in[0];
528         out[1]=in[1];
529         out[2]=in[2];
530         out[3]=in[3];
531         out[4]=in[4];
532         out[5]=in[5];
533         out[6]=in[6];
534         out[7]=in[7];
535         out[0]+=key[0];
536         out[1]+=key[1];
537         out[2]+=key[2];
538         out[3]+=key[3];
539         out[4]+=key[4];
540         out[5]+=key[5]+tweak[0];
541         out[6]+=key[6]+tweak[1];
542         out[7]+=key[7]+0;
543         out[0]=out[0]+out[1];
544         out[1]=(out[1] << 46)|(out[1] >> 18);
545         out[1]=out[0]^out[1];
546         out[2]=out[2]+out[3];
547         out[3]=(out[3] << 36)|(out[3] >> 28);
548         out[3]=out[2]^out[3];
549         out[4]=out[4]+out[5];
550         out[5]=(out[5] << 19)|(out[5] >> 45);
551         out[5]=out[4]^out[5];
552         out[6]=out[6]+out[7];
553         out[7]=(out[7] << 37)|(out[7] >> 27);
554         out[7]=out[6]^out[7];
555         out[2]=out[2]+out[1];
556         out[1]=(out[1] << 33)|(out[1] >> 31);
557         out[1]=out[2]^out[1];
558         out[4]=out[4]+out[7];
559         out[7]=(out[7] << 27)|(out[7] >> 37);
560         out[7]=out[4]^out[7];
561         out[6]=out[6]+out[5];
562         out[5]=(out[5] << 14)|(out[5] >> 50);
563         out[5]=out[6]^out[5];
564         out[0]=out[0]+out[3];
565         out[3]=(out[3] << 42)|(out[3] >> 22);
566         out[3]=out[0]^out[3];
567         out[4]=out[4]+out[1];
568         out[1]=(out[1] << 17)|(out[1] >> 47);
569         out[1]=out[4]^out[1];
570         out[6]=out[6]+out[3];
571         out[3]=(out[3] << 49)|(out[3] >> 15);
572         out[3]=out[6]^out[3];
573         out[0]=out[0]+out[5];
574         out[5]=(out[5] << 36)|(out[5] >> 28);
575         out[5]=out[0]^out[5];
576         out[2]=out[2]+out[7];
577         out[7]=(out[7] << 39)|(out[7] >> 25);
578         out[7]=out[2]^out[7];
579         out[6]=out[6]+out[1];
580         out[1]=(out[1] << 44)|(out[1] >> 20);
581         out[1]=out[6]^out[1];
582         out[0]=out[0]+out[7];
583         out[7]=(out[7] << 9)|(out[7] >> 55);
584         out[7]=out[0]^out[7];
585         out[2]=out[2]+out[5];
586         out[5]=(out[5] << 54)|(out[5] >> 10);
587         out[5]=out[2]^out[5];
588         out[4]=out[4]+out[3];
589         out[3]=(out[3] << 56)|(out[3] >> 8);
590         out[3]=out[4]^out[3];
591         out[0]+=key[1];
592         out[1]+=key[2];
593         out[2]+=key[3];
594         out[3]+=key[4];
595         out[4]+=key[5];
596         out[5]+=key[6]+tweak[1];
597         out[6]+=key[7]+t;
598         out[7]+=k+1;
599         out[0]=out[0]+out[1];
600         out[1]=(out[1] << 39)|(out[1] >> 25);
601         out[1]=out[0]^out[1];
602         out[2]=out[2]+out[3];
603         out[3]=(out[3] << 30)|(out[3] >> 34);
604         out[3]=out[2]^out[3];
605         out[4]=out[4]+out[5];
606         out[5]=(out[5] << 34)|(out[5] >> 30);
607         out[5]=out[4]^out[5];
608         out[6]=out[6]+out[7];
609         out[7]=(out[7] << 24)|(out[7] >> 40);
610         out[7]=out[6]^out[7];
611         out[2]=out[2]+out[1];
612         out[1]=(out[1] << 13)|(out[1] >> 51);
613         out[1]=out[2]^out[1];
614         out[4]=out[4]+out[7];
615         out[7]=(out[7] << 50)|(out[7] >> 14);
616         out[7]=out[4]^out[7];
617         out[6]=out[6]+out[5];
618         out[5]=(out[5] << 10)|(out[5] >> 54);
619         out[5]=out[6]^out[5];
620         out[0]=out[0]+out[3];
621         out[3]=(out[3] << 17)|(out[3] >> 47);
622         out[3]=out[0]^out[3];
623         out[4]=out[4]+out[1];
624         out[1]=(out[1] << 25)|(out[1] >> 39);
625         out[1]=out[4]^out[1];
626         out[6]=out[6]+out[3];
627         out[3]=(out[3] << 29)|(out[3] >> 35);
628         out[3]=out[6]^out[3];
629         out[0]=out[0]+out[5];
630         out[5]=(out[5] << 39)|(out[5] >> 25);
631         out[5]=out[0]^out[5];
632         out[2]=out[2]+out[7];
633         out[7]=(out[7] << 43)|(out[7] >> 21);
634         out[7]=out[2]^out[7];
635         out[6]=out[6]+out[1];
636         out[1]=(out[1] << 8)|(out[1] >> 56);
637         out[1]=out[6]^out[1];
638         out[0]=out[0]+out[7];
639         out[7]=(out[7] << 35)|(out[7] >> 29);
640         out[7]=out[0]^out[7];
641         out[2]=out[2]+out[5];
642         out[5]=(out[5] << 56)|(out[5] >> 8);
643         out[5]=out[2]^out[5];
644         out[4]=out[4]+out[3];
645         out[3]=(out[3] << 22)|(out[3] >> 42);
646         out[3]=out[4]^out[3];
647         out[0]+=key[2];
648         out[1]+=key[3];
649         out[2]+=key[4];
650         out[3]+=key[5];
651         out[4]+=key[6];
652         out[5]+=key[7]+t;
653         out[6]+=k+tweak[0];
654         out[7]+=key[0]+2;
655         out[0]=out[0]+out[1];
656         out[1]=(out[1] << 46)|(out[1] >> 18);
657         out[1]=out[0]^out[1];
658         out[2]=out[2]+out[3];
659         out[3]=(out[3] << 36)|(out[3] >> 28);
660         out[3]=out[2]^out[3];
661         out[4]=out[4]+out[5];
662         out[5]=(out[5] << 19)|(out[5] >> 45);
663         out[5]=out[4]^out[5];
664         out[6]=out[6]+out[7];
665         out[7]=(out[7] << 37)|(out[7] >> 27);
666         out[7]=out[6]^out[7];
667         out[2]=out[2]+out[1];
668         out[1]=(out[1] << 33)|(out[1] >> 31);
669         out[1]=out[2]^out[1];
670         out[4]=out[4]+out[7];
671         out[7]=(out[7] << 27)|(out[7] >> 37);
672         out[7]=out[4]^out[7];
673         out[6]=out[6]+out[5];
674         out[5]=(out[5] << 14)|(out[5] >> 50);
675         out[5]=out[6]^out[5];
676         out[0]=out[0]+out[3];
677         out[3]=(out[3] << 42)|(out[3] >> 22);
678         out[3]=out[0]^out[3];
679         out[4]=out[4]+out[1];
680         out[1]=(out[1] << 17)|(out[1] >> 47);
681         out[1]=out[4]^out[1];
682         out[6]=out[6]+out[3];
683         out[3]=(out[3] << 49)|(out[3] >> 15);
684         out[3]=out[6]^out[3];
685         out[0]=out[0]+out[5];
686         out[5]=(out[5] << 36)|(out[5] >> 28);
687         out[5]=out[0]^out[5];
688         out[2]=out[2]+out[7];
689         out[7]=(out[7] << 39)|(out[7] >> 25);
690         out[7]=out[2]^out[7];
691         out[6]=out[6]+out[1];
692         out[1]=(out[1] << 44)|(out[1] >> 20);
693         out[1]=out[6]^out[1];
694         out[0]=out[0]+out[7];
695         out[7]=(out[7] << 9)|(out[7] >> 55);
696         out[7]=out[0]^out[7];
697         out[2]=out[2]+out[5];
698         out[5]=(out[5] << 54)|(out[5] >> 10);
699         out[5]=out[2]^out[5];
700         out[4]=out[4]+out[3];
701         out[3]=(out[3] << 56)|(out[3] >> 8);
702         out[3]=out[4]^out[3];
703         out[0]+=key[3];
704         out[1]+=key[4];
705         out[2]+=key[5];
706         out[3]+=key[6];
707         out[4]+=key[7];
708         out[5]+=k+tweak[0];
709         out[6]+=key[0]+tweak[1];
710         out[7]+=key[1]+3;
711         out[0]=out[0]+out[1];
712         out[1]=(out[1] << 39)|(out[1] >> 25);
713         out[1]=out[0]^out[1];
714         out[2]=out[2]+out[3];
715         out[3]=(out[3] << 30)|(out[3] >> 34);
716         out[3]=out[2]^out[3];
717         out[4]=out[4]+out[5];
718         out[5]=(out[5] << 34)|(out[5] >> 30);
719         out[5]=out[4]^out[5];
720         out[6]=out[6]+out[7];
721         out[7]=(out[7] << 24)|(out[7] >> 40);
722         out[7]=out[6]^out[7];
723         out[2]=out[2]+out[1];
724         out[1]=(out[1] << 13)|(out[1] >> 51);
725         out[1]=out[2]^out[1];
726         out[4]=out[4]+out[7];
727         out[7]=(out[7] << 50)|(out[7] >> 14);
728         out[7]=out[4]^out[7];
729         out[6]=out[6]+out[5];
730         out[5]=(out[5] << 10)|(out[5] >> 54);
731         out[5]=out[6]^out[5];
732         out[0]=out[0]+out[3];
733         out[3]=(out[3] << 17)|(out[3] >> 47);
734         out[3]=out[0]^out[3];
735         out[4]=out[4]+out[1];
736         out[1]=(out[1] << 25)|(out[1] >> 39);
737         out[1]=out[4]^out[1];
738         out[6]=out[6]+out[3];
739         out[3]=(out[3] << 29)|(out[3] >> 35);
740         out[3]=out[6]^out[3];
741         out[0]=out[0]+out[5];
742         out[5]=(out[5] << 39)|(out[5] >> 25);
743         out[5]=out[0]^out[5];
744         out[2]=out[2]+out[7];
745         out[7]=(out[7] << 43)|(out[7] >> 21);
746         out[7]=out[2]^out[7];
747         out[6]=out[6]+out[1];
748         out[1]=(out[1] << 8)|(out[1] >> 56);
749         out[1]=out[6]^out[1];
750         out[0]=out[0]+out[7];
751         out[7]=(out[7] << 35)|(out[7] >> 29);
752         out[7]=out[0]^out[7];
753         out[2]=out[2]+out[5];
754         out[5]=(out[5] << 56)|(out[5] >> 8);
755         out[5]=out[2]^out[5];
756         out[4]=out[4]+out[3];
757         out[3]=(out[3] << 22)|(out[3] >> 42);
758         out[3]=out[4]^out[3];
759         out[0]+=key[4];
760         out[1]+=key[5];
761         out[2]+=key[6];
762         out[3]+=key[7];
763         out[4]+=k;
764         out[5]+=key[0]+tweak[1];
765         out[6]+=key[1]+t;
766         out[7]+=key[2]+4;
767         out[0]=out[0]+out[1];
768         out[1]=(out[1] << 46)|(out[1] >> 18);
769         out[1]=out[0]^out[1];
770         out[2]=out[2]+out[3];
771         out[3]=(out[3] << 36)|(out[3] >> 28);
772         out[3]=out[2]^out[3];
773         out[4]=out[4]+out[5];
774         out[5]=(out[5] << 19)|(out[5] >> 45);
775         out[5]=out[4]^out[5];
776         out[6]=out[6]+out[7];
777         out[7]=(out[7] << 37)|(out[7] >> 27);
778         out[7]=out[6]^out[7];
779         out[2]=out[2]+out[1];
780         out[1]=(out[1] << 33)|(out[1] >> 31);
781         out[1]=out[2]^out[1];
782         out[4]=out[4]+out[7];
783         out[7]=(out[7] << 27)|(out[7] >> 37);
784         out[7]=out[4]^out[7];
785         out[6]=out[6]+out[5];
786         out[5]=(out[5] << 14)|(out[5] >> 50);
787         out[5]=out[6]^out[5];
788         out[0]=out[0]+out[3];
789         out[3]=(out[3] << 42)|(out[3] >> 22);
790         out[3]=out[0]^out[3];
791         out[4]=out[4]+out[1];
792         out[1]=(out[1] << 17)|(out[1] >> 47);
793         out[1]=out[4]^out[1];
794         out[6]=out[6]+out[3];
795         out[3]=(out[3] << 49)|(out[3] >> 15);
796         out[3]=out[6]^out[3];
797         out[0]=out[0]+out[5];
798         out[5]=(out[5] << 36)|(out[5] >> 28);
799         out[5]=out[0]^out[5];
800         out[2]=out[2]+out[7];
801         out[7]=(out[7] << 39)|(out[7] >> 25);
802         out[7]=out[2]^out[7];
803         out[6]=out[6]+out[1];
804         out[1]=(out[1] << 44)|(out[1] >> 20);
805         out[1]=out[6]^out[1];
806         out[0]=out[0]+out[7];
807         out[7]=(out[7] << 9)|(out[7] >> 55);
808         out[7]=out[0]^out[7];
809         out[2]=out[2]+out[5];
810         out[5]=(out[5] << 54)|(out[5] >> 10);
811         out[5]=out[2]^out[5];
812         out[4]=out[4]+out[3];
813         out[3]=(out[3] << 56)|(out[3] >> 8);
814         out[3]=out[4]^out[3];
815         out[0]+=key[5];
816         out[1]+=key[6];
817         out[2]+=key[7];
818         out[3]+=k;
819         out[4]+=key[0];
820         out[5]+=key[1]+t;
821         out[6]+=key[2]+tweak[0];
822         out[7]+=key[3]+5;
823         out[0]=out[0]+out[1];
824         out[1]=(out[1] << 39)|(out[1] >> 25);
825         out[1]=out[0]^out[1];
826         out[2]=out[2]+out[3];
827         out[3]=(out[3] << 30)|(out[3] >> 34);
828         out[3]=out[2]^out[3];
829         out[4]=out[4]+out[5];
830         out[5]=(out[5] << 34)|(out[5] >> 30);
831         out[5]=out[4]^out[5];
832         out[6]=out[6]+out[7];
833         out[7]=(out[7] << 24)|(out[7] >> 40);
834         out[7]=out[6]^out[7];
835         out[2]=out[2]+out[1];
836         out[1]=(out[1] << 13)|(out[1] >> 51);
837         out[1]=out[2]^out[1];
838         out[4]=out[4]+out[7];
839         out[7]=(out[7] << 50)|(out[7] >> 14);
840         out[7]=out[4]^out[7];
841         out[6]=out[6]+out[5];
842         out[5]=(out[5] << 10)|(out[5] >> 54);
843         out[5]=out[6]^out[5];
844         out[0]=out[0]+out[3];
845         out[3]=(out[3] << 17)|(out[3] >> 47);
846         out[3]=out[0]^out[3];
847         out[4]=out[4]+out[1];
848         out[1]=(out[1] << 25)|(out[1] >> 39);
849         out[1]=out[4]^out[1];
850         out[6]=out[6]+out[3];
851         out[3]=(out[3] << 29)|(out[3] >> 35);
852         out[3]=out[6]^out[3];
853         out[0]=out[0]+out[5];
854         out[5]=(out[5] << 39)|(out[5] >> 25);
855         out[5]=out[0]^out[5];
856         out[2]=out[2]+out[7];
857         out[7]=(out[7] << 43)|(out[7] >> 21);
858         out[7]=out[2]^out[7];
859         out[6]=out[6]+out[1];
860         out[1]=(out[1] << 8)|(out[1] >> 56);
861         out[1]=out[6]^out[1];
862         out[0]=out[0]+out[7];
863         out[7]=(out[7] << 35)|(out[7] >> 29);
864         out[7]=out[0]^out[7];
865         out[2]=out[2]+out[5];
866         out[5]=(out[5] << 56)|(out[5] >> 8);
867         out[5]=out[2]^out[5];
868         out[4]=out[4]+out[3];
869         out[3]=(out[3] << 22)|(out[3] >> 42);
870         out[3]=out[4]^out[3];
871         out[0]+=key[6];
872         out[1]+=key[7];
873         out[2]+=k;
874         out[3]+=key[0];
875         out[4]+=key[1];
876         out[5]+=key[2]+tweak[0];
877         out[6]+=key[3]+tweak[1];
878         out[7]+=key[4]+6;
879         out[0]=out[0]+out[1];
880         out[1]=(out[1] << 46)|(out[1] >> 18);
881         out[1]=out[0]^out[1];
882         out[2]=out[2]+out[3];
883         out[3]=(out[3] << 36)|(out[3] >> 28);
884         out[3]=out[2]^out[3];
885         out[4]=out[4]+out[5];
886         out[5]=(out[5] << 19)|(out[5] >> 45);
887         out[5]=out[4]^out[5];
888         out[6]=out[6]+out[7];
889         out[7]=(out[7] << 37)|(out[7] >> 27);
890         out[7]=out[6]^out[7];
891         out[2]=out[2]+out[1];
892         out[1]=(out[1] << 33)|(out[1] >> 31);
893         out[1]=out[2]^out[1];
894         out[4]=out[4]+out[7];
895         out[7]=(out[7] << 27)|(out[7] >> 37);
896         out[7]=out[4]^out[7];
897         out[6]=out[6]+out[5];
898         out[5]=(out[5] << 14)|(out[5] >> 50);
899         out[5]=out[6]^out[5];
900         out[0]=out[0]+out[3];
901         out[3]=(out[3] << 42)|(out[3] >> 22);
902         out[3]=out[0]^out[3];
903         out[4]=out[4]+out[1];
904         out[1]=(out[1] << 17)|(out[1] >> 47);
905         out[1]=out[4]^out[1];
906         out[6]=out[6]+out[3];
907         out[3]=(out[3] << 49)|(out[3] >> 15);
908         out[3]=out[6]^out[3];
909         out[0]=out[0]+out[5];
910         out[5]=(out[5] << 36)|(out[5] >> 28);
911         out[5]=out[0]^out[5];
912         out[2]=out[2]+out[7];
913         out[7]=(out[7] << 39)|(out[7] >> 25);
914         out[7]=out[2]^out[7];
915         out[6]=out[6]+out[1];
916         out[1]=(out[1] << 44)|(out[1] >> 20);
917         out[1]=out[6]^out[1];
918         out[0]=out[0]+out[7];
919         out[7]=(out[7] << 9)|(out[7] >> 55);
920         out[7]=out[0]^out[7];
921         out[2]=out[2]+out[5];
922         out[5]=(out[5] << 54)|(out[5] >> 10);
923         out[5]=out[2]^out[5];
924         out[4]=out[4]+out[3];
925         out[3]=(out[3] << 56)|(out[3] >> 8);
926         out[3]=out[4]^out[3];
927         out[0]+=key[7];
928         out[1]+=k;
929         out[2]+=key[0];
930         out[3]+=key[1];
931         out[4]+=key[2];
932         out[5]+=key[3]+tweak[1];
933         out[6]+=key[4]+t;
934         out[7]+=key[5]+7;
935         out[0]=out[0]+out[1];
936         out[1]=(out[1] << 39)|(out[1] >> 25);
937         out[1]=out[0]^out[1];
938         out[2]=out[2]+out[3];
939         out[3]=(out[3] << 30)|(out[3] >> 34);
940         out[3]=out[2]^out[3];
941         out[4]=out[4]+out[5];
942         out[5]=(out[5] << 34)|(out[5] >> 30);
943         out[5]=out[4]^out[5];
944         out[6]=out[6]+out[7];
945         out[7]=(out[7] << 24)|(out[7] >> 40);
946         out[7]=out[6]^out[7];
947         out[2]=out[2]+out[1];
948         out[1]=(out[1] << 13)|(out[1] >> 51);
949         out[1]=out[2]^out[1];
950         out[4]=out[4]+out[7];
951         out[7]=(out[7] << 50)|(out[7] >> 14);
952         out[7]=out[4]^out[7];
953         out[6]=out[6]+out[5];
954         out[5]=(out[5] << 10)|(out[5] >> 54);
955         out[5]=out[6]^out[5];
956         out[0]=out[0]+out[3];
957         out[3]=(out[3] << 17)|(out[3] >> 47);
958         out[3]=out[0]^out[3];
959         out[4]=out[4]+out[1];
960         out[1]=(out[1] << 25)|(out[1] >> 39);
961         out[1]=out[4]^out[1];
962         out[6]=out[6]+out[3];
963         out[3]=(out[3] << 29)|(out[3] >> 35);
964         out[3]=out[6]^out[3];
965         out[0]=out[0]+out[5];
966         out[5]=(out[5] << 39)|(out[5] >> 25);
967         out[5]=out[0]^out[5];
968         out[2]=out[2]+out[7];
969         out[7]=(out[7] << 43)|(out[7] >> 21);
970         out[7]=out[2]^out[7];
971         out[6]=out[6]+out[1];
972         out[1]=(out[1] << 8)|(out[1] >> 56);
973         out[1]=out[6]^out[1];
974         out[0]=out[0]+out[7];
975         out[7]=(out[7] << 35)|(out[7] >> 29);
976         out[7]=out[0]^out[7];
977         out[2]=out[2]+out[5];
978         out[5]=(out[5] << 56)|(out[5] >> 8);
979         out[5]=out[2]^out[5];
980         out[4]=out[4]+out[3];
981         out[3]=(out[3] << 22)|(out[3] >> 42);
982         out[3]=out[4]^out[3];
983         out[0]+=k;
984         out[1]+=key[0];
985         out[2]+=key[1];
986         out[3]+=key[2];
987         out[4]+=key[3];
988         out[5]+=key[4]+t;
989         out[6]+=key[5]+tweak[0];
990         out[7]+=key[6]+8;
991         out[0]=out[0]+out[1];
992         out[1]=(out[1] << 46)|(out[1] >> 18);
993         out[1]=out[0]^out[1];
994         out[2]=out[2]+out[3];
995         out[3]=(out[3] << 36)|(out[3] >> 28);
996         out[3]=out[2]^out[3];
997         out[4]=out[4]+out[5];
998         out[5]=(out[5] << 19)|(out[5] >> 45);
999         out[5]=out[4]^out[5];
1000         out[6]=out[6]+out[7];
1001         out[7]=(out[7] << 37)|(out[7] >> 27);
1002         out[7]=out[6]^out[7];
1003         out[2]=out[2]+out[1];
1004         out[1]=(out[1] << 33)|(out[1] >> 31);
1005         out[1]=out[2]^out[1];
1006         out[4]=out[4]+out[7];
1007         out[7]=(out[7] << 27)|(out[7] >> 37);
1008         out[7]=out[4]^out[7];
1009         out[6]=out[6]+out[5];
1010         out[5]=(out[5] << 14)|(out[5] >> 50);
1011         out[5]=out[6]^out[5];
1012         out[0]=out[0]+out[3];
1013         out[3]=(out[3] << 42)|(out[3] >> 22);
1014         out[3]=out[0]^out[3];
1015         out[4]=out[4]+out[1];
1016         out[1]=(out[1] << 17)|(out[1] >> 47);
1017         out[1]=out[4]^out[1];
1018         out[6]=out[6]+out[3];
1019         out[3]=(out[3] << 49)|(out[3] >> 15);
1020         out[3]=out[6]^out[3];
1021         out[0]=out[0]+out[5];
1022         out[5]=(out[5] << 36)|(out[5] >> 28);
1023         out[5]=out[0]^out[5];
1024         out[2]=out[2]+out[7];
1025         out[7]=(out[7] << 39)|(out[7] >> 25);
1026         out[7]=out[2]^out[7];
1027         out[6]=out[6]+out[1];
1028         out[1]=(out[1] << 44)|(out[1] >> 20);
1029         out[1]=out[6]^out[1];
1030         out[0]=out[0]+out[7];
1031         out[7]=(out[7] << 9)|(out[7] >> 55);
1032         out[7]=out[0]^out[7];
1033         out[2]=out[2]+out[5];
1034         out[5]=(out[5] << 54)|(out[5] >> 10);
1035         out[5]=out[2]^out[5];
1036         out[4]=out[4]+out[3];
1037         out[3]=(out[3] << 56)|(out[3] >> 8);
1038         out[3]=out[4]^out[3];
1039         out[0]+=key[0];
1040         out[1]+=key[1];
1041         out[2]+=key[2];
1042         out[3]+=key[3];
1043         out[4]+=key[4];
1044         out[5]+=key[5]+tweak[0];
1045         out[6]+=key[6]+tweak[1];
1046         out[7]+=key[7]+9;
1047         out[0]=out[0]+out[1];
1048         out[1]=(out[1] << 39)|(out[1] >> 25);
1049         out[1]=out[0]^out[1];
1050         out[2]=out[2]+out[3];
1051         out[3]=(out[3] << 30)|(out[3] >> 34);
1052         out[3]=out[2]^out[3];
1053         out[4]=out[4]+out[5];
1054         out[5]=(out[5] << 34)|(out[5] >> 30);
1055         out[5]=out[4]^out[5];
1056         out[6]=out[6]+out[7];
1057         out[7]=(out[7] << 24)|(out[7] >> 40);
1058         out[7]=out[6]^out[7];
1059         out[2]=out[2]+out[1];
1060         out[1]=(out[1] << 13)|(out[1] >> 51);
1061         out[1]=out[2]^out[1];
1062         out[4]=out[4]+out[7];
1063         out[7]=(out[7] << 50)|(out[7] >> 14);
1064         out[7]=out[4]^out[7];
1065         out[6]=out[6]+out[5];
1066         out[5]=(out[5] << 10)|(out[5] >> 54);
1067         out[5]=out[6]^out[5];
1068         out[0]=out[0]+out[3];
1069         out[3]=(out[3] << 17)|(out[3] >> 47);
1070         out[3]=out[0]^out[3];
1071         out[4]=out[4]+out[1];
1072         out[1]=(out[1] << 25)|(out[1] >> 39);
1073         out[1]=out[4]^out[1];
1074         out[6]=out[6]+out[3];
1075         out[3]=(out[3] << 29)|(out[3] >> 35);
1076         out[3]=out[6]^out[3];
1077         out[0]=out[0]+out[5];
1078         out[5]=(out[5] << 39)|(out[5] >> 25);
1079         out[5]=out[0]^out[5];
1080         out[2]=out[2]+out[7];
1081         out[7]=(out[7] << 43)|(out[7] >> 21);
1082         out[7]=out[2]^out[7];
1083         out[6]=out[6]+out[1];
1084         out[1]=(out[1] << 8)|(out[1] >> 56);
1085         out[1]=out[6]^out[1];
1086         out[0]=out[0]+out[7];
1087         out[7]=(out[7] << 35)|(out[7] >> 29);
1088         out[7]=out[0]^out[7];
1089         out[2]=out[2]+out[5];
1090         out[5]=(out[5] << 56)|(out[5] >> 8);
1091         out[5]=out[2]^out[5];
1092         out[4]=out[4]+out[3];
1093         out[3]=(out[3] << 22)|(out[3] >> 42);
1094         out[3]=out[4]^out[3];
1095         out[0]+=key[1];
1096         out[1]+=key[2];
1097         out[2]+=key[3];
1098         out[3]+=key[4];
1099         out[4]+=key[5];
1100         out[5]+=key[6]+tweak[1];
1101         out[6]+=key[7]+t;
1102         out[7]+=k+10;
1103         out[0]=out[0]+out[1];
1104         out[1]=(out[1] << 46)|(out[1] >> 18);
1105         out[1]=out[0]^out[1];
1106         out[2]=out[2]+out[3];
1107         out[3]=(out[3] << 36)|(out[3] >> 28);
1108         out[3]=out[2]^out[3];
1109         out[4]=out[4]+out[5];
1110         out[5]=(out[5] << 19)|(out[5] >> 45);
1111         out[5]=out[4]^out[5];
1112         out[6]=out[6]+out[7];
1113         out[7]=(out[7] << 37)|(out[7] >> 27);
1114         out[7]=out[6]^out[7];
1115         out[2]=out[2]+out[1];
1116         out[1]=(out[1] << 33)|(out[1] >> 31);
1117         out[1]=out[2]^out[1];
1118         out[4]=out[4]+out[7];
1119         out[7]=(out[7] << 27)|(out[7] >> 37);
1120         out[7]=out[4]^out[7];
1121         out[6]=out[6]+out[5];
1122         out[5]=(out[5] << 14)|(out[5] >> 50);
1123         out[5]=out[6]^out[5];
1124         out[0]=out[0]+out[3];
1125         out[3]=(out[3] << 42)|(out[3] >> 22);
1126         out[3]=out[0]^out[3];
1127         out[4]=out[4]+out[1];
1128         out[1]=(out[1] << 17)|(out[1] >> 47);
1129         out[1]=out[4]^out[1];
1130         out[6]=out[6]+out[3];
1131         out[3]=(out[3] << 49)|(out[3] >> 15);
1132         out[3]=out[6]^out[3];
1133         out[0]=out[0]+out[5];
1134         out[5]=(out[5] << 36)|(out[5] >> 28);
1135         out[5]=out[0]^out[5];
1136         out[2]=out[2]+out[7];
1137         out[7]=(out[7] << 39)|(out[7] >> 25);
1138         out[7]=out[2]^out[7];
1139         out[6]=out[6]+out[1];
1140         out[1]=(out[1] << 44)|(out[1] >> 20);
1141         out[1]=out[6]^out[1];
1142         out[0]=out[0]+out[7];
1143         out[7]=(out[7] << 9)|(out[7] >> 55);
1144         out[7]=out[0]^out[7];
1145         out[2]=out[2]+out[5];
1146         out[5]=(out[5] << 54)|(out[5] >> 10);
1147         out[5]=out[2]^out[5];
1148         out[4]=out[4]+out[3];
1149         out[3]=(out[3] << 56)|(out[3] >> 8);
1150         out[3]=out[4]^out[3];
1151         out[0]+=key[2];
1152         out[1]+=key[3];
1153         out[2]+=key[4];
1154         out[3]+=key[5];
1155         out[4]+=key[6];
1156         out[5]+=key[7]+t;
1157         out[6]+=k+tweak[0];
1158         out[7]+=key[0]+11;
1159         out[0]=out[0]+out[1];
1160         out[1]=(out[1] << 39)|(out[1] >> 25);
1161         out[1]=out[0]^out[1];
1162         out[2]=out[2]+out[3];
1163         out[3]=(out[3] << 30)|(out[3] >> 34);
1164         out[3]=out[2]^out[3];
1165         out[4]=out[4]+out[5];
1166         out[5]=(out[5] << 34)|(out[5] >> 30);
1167         out[5]=out[4]^out[5];
1168         out[6]=out[6]+out[7];
1169         out[7]=(out[7] << 24)|(out[7] >> 40);
1170         out[7]=out[6]^out[7];
1171         out[2]=out[2]+out[1];
1172         out[1]=(out[1] << 13)|(out[1] >> 51);
1173         out[1]=out[2]^out[1];
1174         out[4]=out[4]+out[7];
1175         out[7]=(out[7] << 50)|(out[7] >> 14);
1176         out[7]=out[4]^out[7];
1177         out[6]=out[6]+out[5];
1178         out[5]=(out[5] << 10)|(out[5] >> 54);
1179         out[5]=out[6]^out[5];
1180         out[0]=out[0]+out[3];
1181         out[3]=(out[3] << 17)|(out[3] >> 47);
1182         out[3]=out[0]^out[3];
1183         out[4]=out[4]+out[1];
1184         out[1]=(out[1] << 25)|(out[1] >> 39);
1185         out[1]=out[4]^out[1];
1186         out[6]=out[6]+out[3];
1187         out[3]=(out[3] << 29)|(out[3] >> 35);
1188         out[3]=out[6]^out[3];
1189         out[0]=out[0]+out[5];
1190         out[5]=(out[5] << 39)|(out[5] >> 25);
1191         out[5]=out[0]^out[5];
1192         out[2]=out[2]+out[7];
1193         out[7]=(out[7] << 43)|(out[7] >> 21);
1194         out[7]=out[2]^out[7];
1195         out[6]=out[6]+out[1];
1196         out[1]=(out[1] << 8)|(out[1] >> 56);
1197         out[1]=out[6]^out[1];
1198         out[0]=out[0]+out[7];
1199         out[7]=(out[7] << 35)|(out[7] >> 29);
1200         out[7]=out[0]^out[7];
1201         out[2]=out[2]+out[5];
1202         out[5]=(out[5] << 56)|(out[5] >> 8);
1203         out[5]=out[2]^out[5];
1204         out[4]=out[4]+out[3];
1205         out[3]=(out[3] << 22)|(out[3] >> 42);
1206         out[3]=out[4]^out[3];
1207         out[0]+=key[3];
1208         out[1]+=key[4];
1209         out[2]+=key[5];
1210         out[3]+=key[6];
1211         out[4]+=key[7];
1212         out[5]+=k+tweak[0];
1213         out[6]+=key[0]+tweak[1];
1214         out[7]+=key[1]+12;
1215         out[0]=out[0]+out[1];
1216         out[1]=(out[1] << 46)|(out[1] >> 18);
1217         out[1]=out[0]^out[1];
1218         out[2]=out[2]+out[3];
1219         out[3]=(out[3] << 36)|(out[3] >> 28);
1220         out[3]=out[2]^out[3];
1221         out[4]=out[4]+out[5];
1222         out[5]=(out[5] << 19)|(out[5] >> 45);
1223         out[5]=out[4]^out[5];
1224         out[6]=out[6]+out[7];
1225         out[7]=(out[7] << 37)|(out[7] >> 27);
1226         out[7]=out[6]^out[7];
1227         out[2]=out[2]+out[1];
1228         out[1]=(out[1] << 33)|(out[1] >> 31);
1229         out[1]=out[2]^out[1];
1230         out[4]=out[4]+out[7];
1231         out[7]=(out[7] << 27)|(out[7] >> 37);
1232         out[7]=out[4]^out[7];
1233         out[6]=out[6]+out[5];
1234         out[5]=(out[5] << 14)|(out[5] >> 50);
1235         out[5]=out[6]^out[5];
1236         out[0]=out[0]+out[3];
1237         out[3]=(out[3] << 42)|(out[3] >> 22);
1238         out[3]=out[0]^out[3];
1239         out[4]=out[4]+out[1];
1240         out[1]=(out[1] << 17)|(out[1] >> 47);
1241         out[1]=out[4]^out[1];
1242         out[6]=out[6]+out[3];
1243         out[3]=(out[3] << 49)|(out[3] >> 15);
1244         out[3]=out[6]^out[3];
1245         out[0]=out[0]+out[5];
1246         out[5]=(out[5] << 36)|(out[5] >> 28);
1247         out[5]=out[0]^out[5];
1248         out[2]=out[2]+out[7];
1249         out[7]=(out[7] << 39)|(out[7] >> 25);
1250         out[7]=out[2]^out[7];
1251         out[6]=out[6]+out[1];
1252         out[1]=(out[1] << 44)|(out[1] >> 20);
1253         out[1]=out[6]^out[1];
1254         out[0]=out[0]+out[7];
1255         out[7]=(out[7] << 9)|(out[7] >> 55);
1256         out[7]=out[0]^out[7];
1257         out[2]=out[2]+out[5];
1258         out[5]=(out[5] << 54)|(out[5] >> 10);
1259         out[5]=out[2]^out[5];
1260         out[4]=out[4]+out[3];
1261         out[3]=(out[3] << 56)|(out[3] >> 8);
1262         out[3]=out[4]^out[3];
1263         out[0]+=key[4];
1264         out[1]+=key[5];
1265         out[2]+=key[6];
1266         out[3]+=key[7];
1267         out[4]+=k;
1268         out[5]+=key[0]+tweak[1];
1269         out[6]+=key[1]+t;
1270         out[7]+=key[2]+13;
1271         out[0]=out[0]+out[1];
1272         out[1]=(out[1] << 39)|(out[1] >> 25);
1273         out[1]=out[0]^out[1];
1274         out[2]=out[2]+out[3];
1275         out[3]=(out[3] << 30)|(out[3] >> 34);
1276         out[3]=out[2]^out[3];
1277         out[4]=out[4]+out[5];
1278         out[5]=(out[5] << 34)|(out[5] >> 30);
1279         out[5]=out[4]^out[5];
1280         out[6]=out[6]+out[7];
1281         out[7]=(out[7] << 24)|(out[7] >> 40);
1282         out[7]=out[6]^out[7];
1283         out[2]=out[2]+out[1];
1284         out[1]=(out[1] << 13)|(out[1] >> 51);
1285         out[1]=out[2]^out[1];
1286         out[4]=out[4]+out[7];
1287         out[7]=(out[7] << 50)|(out[7] >> 14);
1288         out[7]=out[4]^out[7];
1289         out[6]=out[6]+out[5];
1290         out[5]=(out[5] << 10)|(out[5] >> 54);
1291         out[5]=out[6]^out[5];
1292         out[0]=out[0]+out[3];
1293         out[3]=(out[3] << 17)|(out[3] >> 47);
1294         out[3]=out[0]^out[3];
1295         out[4]=out[4]+out[1];
1296         out[1]=(out[1] << 25)|(out[1] >> 39);
1297         out[1]=out[4]^out[1];
1298         out[6]=out[6]+out[3];
1299         out[3]=(out[3] << 29)|(out[3] >> 35);
1300         out[3]=out[6]^out[3];
1301         out[0]=out[0]+out[5];
1302         out[5]=(out[5] << 39)|(out[5] >> 25);
1303         out[5]=out[0]^out[5];
1304         out[2]=out[2]+out[7];
1305         out[7]=(out[7] << 43)|(out[7] >> 21);
1306         out[7]=out[2]^out[7];
1307         out[6]=out[6]+out[1];
1308         out[1]=(out[1] << 8)|(out[1] >> 56);
1309         out[1]=out[6]^out[1];
1310         out[0]=out[0]+out[7];
1311         out[7]=(out[7] << 35)|(out[7] >> 29);
1312         out[7]=out[0]^out[7];
1313         out[2]=out[2]+out[5];
1314         out[5]=(out[5] << 56)|(out[5] >> 8);
1315         out[5]=out[2]^out[5];
1316         out[4]=out[4]+out[3];
1317         out[3]=(out[3] << 22)|(out[3] >> 42);
1318         out[3]=out[4]^out[3];
1319         out[0]+=key[5];
1320         out[1]+=key[6];
1321         out[2]+=key[7];
1322         out[3]+=k;
1323         out[4]+=key[0];
1324         out[5]+=key[1]+t;
1325         out[6]+=key[2]+tweak[0];
1326         out[7]+=key[3]+14;
1327         out[0]=out[0]+out[1];
1328         out[1]=(out[1] << 46)|(out[1] >> 18);
1329         out[1]=out[0]^out[1];
1330         out[2]=out[2]+out[3];
1331         out[3]=(out[3] << 36)|(out[3] >> 28);
1332         out[3]=out[2]^out[3];
1333         out[4]=out[4]+out[5];
1334         out[5]=(out[5] << 19)|(out[5] >> 45);
1335         out[5]=out[4]^out[5];
1336         out[6]=out[6]+out[7];
1337         out[7]=(out[7] << 37)|(out[7] >> 27);
1338         out[7]=out[6]^out[7];
1339         out[2]=out[2]+out[1];
1340         out[1]=(out[1] << 33)|(out[1] >> 31);
1341         out[1]=out[2]^out[1];
1342         out[4]=out[4]+out[7];
1343         out[7]=(out[7] << 27)|(out[7] >> 37);
1344         out[7]=out[4]^out[7];
1345         out[6]=out[6]+out[5];
1346         out[5]=(out[5] << 14)|(out[5] >> 50);
1347         out[5]=out[6]^out[5];
1348         out[0]=out[0]+out[3];
1349         out[3]=(out[3] << 42)|(out[3] >> 22);
1350         out[3]=out[0]^out[3];
1351         out[4]=out[4]+out[1];
1352         out[1]=(out[1] << 17)|(out[1] >> 47);
1353         out[1]=out[4]^out[1];
1354         out[6]=out[6]+out[3];
1355         out[3]=(out[3] << 49)|(out[3] >> 15);
1356         out[3]=out[6]^out[3];
1357         out[0]=out[0]+out[5];
1358         out[5]=(out[5] << 36)|(out[5] >> 28);
1359         out[5]=out[0]^out[5];
1360         out[2]=out[2]+out[7];
1361         out[7]=(out[7] << 39)|(out[7] >> 25);
1362         out[7]=out[2]^out[7];
1363         out[6]=out[6]+out[1];
1364         out[1]=(out[1] << 44)|(out[1] >> 20);
1365         out[1]=out[6]^out[1];
1366         out[0]=out[0]+out[7];
1367         out[7]=(out[7] << 9)|(out[7] >> 55);
1368         out[7]=out[0]^out[7];
1369         out[2]=out[2]+out[5];
1370         out[5]=(out[5] << 54)|(out[5] >> 10);
1371         out[5]=out[2]^out[5];
1372         out[4]=out[4]+out[3];
1373         out[3]=(out[3] << 56)|(out[3] >> 8);
1374         out[3]=out[4]^out[3];
1375         out[0]+=key[6];
1376         out[1]+=key[7];
1377         out[2]+=k;
1378         out[3]+=key[0];
1379         out[4]+=key[1];
1380         out[5]+=key[2]+tweak[0];
1381         out[6]+=key[3]+tweak[1];
1382         out[7]+=key[4]+15;
1383         out[0]=out[0]+out[1];
1384         out[1]=(out[1] << 39)|(out[1] >> 25);
1385         out[1]=out[0]^out[1];
1386         out[2]=out[2]+out[3];
1387         out[3]=(out[3] << 30)|(out[3] >> 34);
1388         out[3]=out[2]^out[3];
1389         out[4]=out[4]+out[5];
1390         out[5]=(out[5] << 34)|(out[5] >> 30);
1391         out[5]=out[4]^out[5];
1392         out[6]=out[6]+out[7];
1393         out[7]=(out[7] << 24)|(out[7] >> 40);
1394         out[7]=out[6]^out[7];
1395         out[2]=out[2]+out[1];
1396         out[1]=(out[1] << 13)|(out[1] >> 51);
1397         out[1]=out[2]^out[1];
1398         out[4]=out[4]+out[7];
1399         out[7]=(out[7] << 50)|(out[7] >> 14);
1400         out[7]=out[4]^out[7];
1401         out[6]=out[6]+out[5];
1402         out[5]=(out[5] << 10)|(out[5] >> 54);
1403         out[5]=out[6]^out[5];
1404         out[0]=out[0]+out[3];
1405         out[3]=(out[3] << 17)|(out[3] >> 47);
1406         out[3]=out[0]^out[3];
1407         out[4]=out[4]+out[1];
1408         out[1]=(out[1] << 25)|(out[1] >> 39);
1409         out[1]=out[4]^out[1];
1410         out[6]=out[6]+out[3];
1411         out[3]=(out[3] << 29)|(out[3] >> 35);
1412         out[3]=out[6]^out[3];
1413         out[0]=out[0]+out[5];
1414         out[5]=(out[5] << 39)|(out[5] >> 25);
1415         out[5]=out[0]^out[5];
1416         out[2]=out[2]+out[7];
1417         out[7]=(out[7] << 43)|(out[7] >> 21);
1418         out[7]=out[2]^out[7];
1419         out[6]=out[6]+out[1];
1420         out[1]=(out[1] << 8)|(out[1] >> 56);
1421         out[1]=out[6]^out[1];
1422         out[0]=out[0]+out[7];
1423         out[7]=(out[7] << 35)|(out[7] >> 29);
1424         out[7]=out[0]^out[7];
1425         out[2]=out[2]+out[5];
1426         out[5]=(out[5] << 56)|(out[5] >> 8);
1427         out[5]=out[2]^out[5];
1428         out[4]=out[4]+out[3];
1429         out[3]=(out[3] << 22)|(out[3] >> 42);
1430         out[3]=out[4]^out[3];
1431         out[0]+=key[7];
1432         out[1]+=k;
1433         out[2]+=key[0];
1434         out[3]+=key[1];
1435         out[4]+=key[2];
1436         out[5]+=key[3]+tweak[1];
1437         out[6]+=key[4]+t;
1438         out[7]+=key[5]+16;
1439         out[0]=out[0]+out[1];
1440         out[1]=(out[1] << 46)|(out[1] >> 18);
1441         out[1]=out[0]^out[1];
1442         out[2]=out[2]+out[3];
1443         out[3]=(out[3] << 36)|(out[3] >> 28);
1444         out[3]=out[2]^out[3];
1445         out[4]=out[4]+out[5];
1446         out[5]=(out[5] << 19)|(out[5] >> 45);
1447         out[5]=out[4]^out[5];
1448         out[6]=out[6]+out[7];
1449         out[7]=(out[7] << 37)|(out[7] >> 27);
1450         out[7]=out[6]^out[7];
1451         out[2]=out[2]+out[1];
1452         out[1]=(out[1] << 33)|(out[1] >> 31);
1453         out[1]=out[2]^out[1];
1454         out[4]=out[4]+out[7];
1455         out[7]=(out[7] << 27)|(out[7] >> 37);
1456         out[7]=out[4]^out[7];
1457         out[6]=out[6]+out[5];
1458         out[5]=(out[5] << 14)|(out[5] >> 50);
1459         out[5]=out[6]^out[5];
1460         out[0]=out[0]+out[3];
1461         out[3]=(out[3] << 42)|(out[3] >> 22);
1462         out[3]=out[0]^out[3];
1463         out[4]=out[4]+out[1];
1464         out[1]=(out[1] << 17)|(out[1] >> 47);
1465         out[1]=out[4]^out[1];
1466         out[6]=out[6]+out[3];
1467         out[3]=(out[3] << 49)|(out[3] >> 15);
1468         out[3]=out[6]^out[3];
1469         out[0]=out[0]+out[5];
1470         out[5]=(out[5] << 36)|(out[5] >> 28);
1471         out[5]=out[0]^out[5];
1472         out[2]=out[2]+out[7];
1473         out[7]=(out[7] << 39)|(out[7] >> 25);
1474         out[7]=out[2]^out[7];
1475         out[6]=out[6]+out[1];
1476         out[1]=(out[1] << 44)|(out[1] >> 20);
1477         out[1]=out[6]^out[1];
1478         out[0]=out[0]+out[7];
1479         out[7]=(out[7] << 9)|(out[7] >> 55);
1480         out[7]=out[0]^out[7];
1481         out[2]=out[2]+out[5];
1482         out[5]=(out[5] << 54)|(out[5] >> 10);
1483         out[5]=out[2]^out[5];
1484         out[4]=out[4]+out[3];
1485         out[3]=(out[3] << 56)|(out[3] >> 8);
1486         out[3]=out[4]^out[3];
1487         out[0]+=k;
1488         out[1]+=key[0];
1489         out[2]+=key[1];
1490         out[3]+=key[2];
1491         out[4]+=key[3];
1492         out[5]+=key[4]+t;
1493         out[6]+=key[5]+tweak[0];
1494         out[7]+=key[6]+17;
1495         out[0]=out[0]+out[1];
1496         out[1]=(out[1] << 39)|(out[1] >> 25);
1497         out[1]=out[0]^out[1];
1498         out[2]=out[2]+out[3];
1499         out[3]=(out[3] << 30)|(out[3] >> 34);
1500         out[3]=out[2]^out[3];
1501         out[4]=out[4]+out[5];
1502         out[5]=(out[5] << 34)|(out[5] >> 30);
1503         out[5]=out[4]^out[5];
1504         out[6]=out[6]+out[7];
1505         out[7]=(out[7] << 24)|(out[7] >> 40);
1506         out[7]=out[6]^out[7];
1507         out[2]=out[2]+out[1];
1508         out[1]=(out[1] << 13)|(out[1] >> 51);
1509         out[1]=out[2]^out[1];
1510         out[4]=out[4]+out[7];
1511         out[7]=(out[7] << 50)|(out[7] >> 14);
1512         out[7]=out[4]^out[7];
1513         out[6]=out[6]+out[5];
1514         out[5]=(out[5] << 10)|(out[5] >> 54);
1515         out[5]=out[6]^out[5];
1516         out[0]=out[0]+out[3];
1517         out[3]=(out[3] << 17)|(out[3] >> 47);
1518         out[3]=out[0]^out[3];
1519         out[4]=out[4]+out[1];
1520         out[1]=(out[1] << 25)|(out[1] >> 39);
1521         out[1]=out[4]^out[1];
1522         out[6]=out[6]+out[3];
1523         out[3]=(out[3] << 29)|(out[3] >> 35);
1524         out[3]=out[6]^out[3];
1525         out[0]=out[0]+out[5];
1526         out[5]=(out[5] << 39)|(out[5] >> 25);
1527         out[5]=out[0]^out[5];
1528         out[2]=out[2]+out[7];
1529         out[7]=(out[7] << 43)|(out[7] >> 21);
1530         out[7]=out[2]^out[7];
1531         out[6]=out[6]+out[1];
1532         out[1]=(out[1] << 8)|(out[1] >> 56);
1533         out[1]=out[6]^out[1];
1534         out[0]=out[0]+out[7];
1535         out[7]=(out[7] << 35)|(out[7] >> 29);
1536         out[7]=out[0]^out[7];
1537         out[2]=out[2]+out[5];
1538         out[5]=(out[5] << 56)|(out[5] >> 8);
1539         out[5]=out[2]^out[5];
1540         out[4]=out[4]+out[3];
1541         out[3]=(out[3] << 22)|(out[3] >> 42);
1542         out[3]=out[4]^out[3];
1543         out[0]+=key[0];
1544         out[1]+=key[1];
1545         out[2]+=key[2];
1546         out[3]+=key[3];
1547         out[4]+=key[4];
1548         out[5]+=key[5]+tweak[0];
1549         out[6]+=key[6]+tweak[1];
1550         out[7]+=key[7]+18;
1551         out[0]=in[0]^out[0];
1552         out[1]=in[1]^out[1];
1553         out[2]=in[2]^out[2];
1554         out[3]=in[3]^out[3];
1555         out[4]=in[4]^out[4];
1556         out[5]=in[5]^out[5];
1557         out[6]=in[6]^out[6];
1558         out[7]=in[7]^out[7];
1559         out[8]=in[8]^out[8];
1561 static void skein1024_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak)
1563         uint64_t k=key[0]^key[1]^key[2]^key[3]^key[4]^key[5]^key[6]^key[7]^key[8]^key[9]^key[10]^key[11]^key[12]^key[13]^key[14]^key[15]^0x1BD11BDAA9FC1A22ULL;
1564         uint64_t t=tweak[0]^tweak[1];
1565         out[0]=in[0];
1566         out[1]=in[1];
1567         out[2]=in[2];
1568         out[3]=in[3];
1569         out[4]=in[4];
1570         out[5]=in[5];
1571         out[6]=in[6];
1572         out[7]=in[7];
1573         out[8]=in[8];
1574         out[9]=in[9];
1575         out[10]=in[10];
1576         out[11]=in[11];
1577         out[12]=in[12];
1578         out[13]=in[13];
1579         out[14]=in[14];
1580         out[15]=in[15];
1581         out[0]+=key[0];
1582         out[1]+=key[1];
1583         out[2]+=key[2];
1584         out[3]+=key[3];
1585         out[4]+=key[4];
1586         out[5]+=key[5];
1587         out[6]+=key[6];
1588         out[7]+=key[7];
1589         out[8]+=key[8];
1590         out[9]+=key[9];
1591         out[10]+=key[10];
1592         out[11]+=key[11];
1593         out[12]+=key[12];
1594         out[13]+=key[13]+tweak[0];
1595         out[14]+=key[14]+tweak[1];
1596         out[15]+=key[15]+0;
1597         out[0]=out[0]+out[1];
1598         out[1]=(out[1] << 24)|(out[1] >> 40);
1599         out[1]=out[0]^out[1];
1600         out[2]=out[2]+out[3];
1601         out[3]=(out[3] << 13)|(out[3] >> 51);
1602         out[3]=out[2]^out[3];
1603         out[4]=out[4]+out[5];
1604         out[5]=(out[5] << 8)|(out[5] >> 56);
1605         out[5]=out[4]^out[5];
1606         out[6]=out[6]+out[7];
1607         out[7]=(out[7] << 47)|(out[7] >> 17);
1608         out[7]=out[6]^out[7];
1609         out[8]=out[8]+out[9];
1610         out[9]=(out[9] << 8)|(out[9] >> 56);
1611         out[9]=out[8]^out[9];
1612         out[10]=out[10]+out[11];
1613         out[11]=(out[11] << 17)|(out[11] >> 47);
1614         out[11]=out[10]^out[11];
1615         out[12]=out[12]+out[13];
1616         out[13]=(out[13] << 22)|(out[13] >> 42);
1617         out[13]=out[12]^out[13];
1618         out[14]=out[14]+out[15];
1619         out[15]=(out[15] << 37)|(out[15] >> 27);
1620         out[15]=out[14]^out[15];
1621         out[0]=out[0]+out[9];
1622         out[9]=(out[9] << 38)|(out[9] >> 26);
1623         out[9]=out[0]^out[9];
1624         out[2]=out[2]+out[13];
1625         out[13]=(out[13] << 19)|(out[13] >> 45);
1626         out[13]=out[2]^out[13];
1627         out[6]=out[6]+out[11];
1628         out[11]=(out[11] << 10)|(out[11] >> 54);
1629         out[11]=out[6]^out[11];
1630         out[4]=out[4]+out[15];
1631         out[15]=(out[15] << 55)|(out[15] >> 9);
1632         out[15]=out[4]^out[15];
1633         out[10]=out[10]+out[7];
1634         out[7]=(out[7] << 49)|(out[7] >> 15);
1635         out[7]=out[10]^out[7];
1636         out[12]=out[12]+out[3];
1637         out[3]=(out[3] << 18)|(out[3] >> 46);
1638         out[3]=out[12]^out[3];
1639         out[14]=out[14]+out[5];
1640         out[5]=(out[5] << 23)|(out[5] >> 41);
1641         out[5]=out[14]^out[5];
1642         out[8]=out[8]+out[1];
1643         out[1]=(out[1] << 52)|(out[1] >> 12);
1644         out[1]=out[8]^out[1];
1645         out[0]=out[0]+out[7];
1646         out[7]=(out[7] << 33)|(out[7] >> 31);
1647         out[7]=out[0]^out[7];
1648         out[2]=out[2]+out[5];
1649         out[5]=(out[5] << 4)|(out[5] >> 60);
1650         out[5]=out[2]^out[5];
1651         out[4]=out[4]+out[3];
1652         out[3]=(out[3] << 51)|(out[3] >> 13);
1653         out[3]=out[4]^out[3];
1654         out[6]=out[6]+out[1];
1655         out[1]=(out[1] << 13)|(out[1] >> 51);
1656         out[1]=out[6]^out[1];
1657         out[12]=out[12]+out[15];
1658         out[15]=(out[15] << 34)|(out[15] >> 30);
1659         out[15]=out[12]^out[15];
1660         out[14]=out[14]+out[13];
1661         out[13]=(out[13] << 41)|(out[13] >> 23);
1662         out[13]=out[14]^out[13];
1663         out[8]=out[8]+out[11];
1664         out[11]=(out[11] << 59)|(out[11] >> 5);
1665         out[11]=out[8]^out[11];
1666         out[10]=out[10]+out[9];
1667         out[9]=(out[9] << 17)|(out[9] >> 47);
1668         out[9]=out[10]^out[9];
1669         out[0]=out[0]+out[15];
1670         out[15]=(out[15] << 5)|(out[15] >> 59);
1671         out[15]=out[0]^out[15];
1672         out[2]=out[2]+out[11];
1673         out[11]=(out[11] << 20)|(out[11] >> 44);
1674         out[11]=out[2]^out[11];
1675         out[6]=out[6]+out[13];
1676         out[13]=(out[13] << 48)|(out[13] >> 16);
1677         out[13]=out[6]^out[13];
1678         out[4]=out[4]+out[9];
1679         out[9]=(out[9] << 41)|(out[9] >> 23);
1680         out[9]=out[4]^out[9];
1681         out[14]=out[14]+out[1];
1682         out[1]=(out[1] << 47)|(out[1] >> 17);
1683         out[1]=out[14]^out[1];
1684         out[8]=out[8]+out[5];
1685         out[5]=(out[5] << 28)|(out[5] >> 36);
1686         out[5]=out[8]^out[5];
1687         out[10]=out[10]+out[3];
1688         out[3]=(out[3] << 16)|(out[3] >> 48);
1689         out[3]=out[10]^out[3];
1690         out[12]=out[12]+out[7];
1691         out[7]=(out[7] << 25)|(out[7] >> 39);
1692         out[7]=out[12]^out[7];
1693         out[0]+=key[1];
1694         out[1]+=key[2];
1695         out[2]+=key[3];
1696         out[3]+=key[4];
1697         out[4]+=key[5];
1698         out[5]+=key[6];
1699         out[6]+=key[7];
1700         out[7]+=key[8];
1701         out[8]+=key[9];
1702         out[9]+=key[10];
1703         out[10]+=key[11];
1704         out[11]+=key[12];
1705         out[12]+=key[13];
1706         out[13]+=key[14]+tweak[1];
1707         out[14]+=key[15]+t;
1708         out[15]+=k+1;
1709         out[0]=out[0]+out[1];
1710         out[1]=(out[1] << 41)|(out[1] >> 23);
1711         out[1]=out[0]^out[1];
1712         out[2]=out[2]+out[3];
1713         out[3]=(out[3] << 9)|(out[3] >> 55);
1714         out[3]=out[2]^out[3];
1715         out[4]=out[4]+out[5];
1716         out[5]=(out[5] << 37)|(out[5] >> 27);
1717         out[5]=out[4]^out[5];
1718         out[6]=out[6]+out[7];
1719         out[7]=(out[7] << 31)|(out[7] >> 33);
1720         out[7]=out[6]^out[7];
1721         out[8]=out[8]+out[9];
1722         out[9]=(out[9] << 12)|(out[9] >> 52);
1723         out[9]=out[8]^out[9];
1724         out[10]=out[10]+out[11];
1725         out[11]=(out[11] << 47)|(out[11] >> 17);
1726         out[11]=out[10]^out[11];
1727         out[12]=out[12]+out[13];
1728         out[13]=(out[13] << 44)|(out[13] >> 20);
1729         out[13]=out[12]^out[13];
1730         out[14]=out[14]+out[15];
1731         out[15]=(out[15] << 30)|(out[15] >> 34);
1732         out[15]=out[14]^out[15];
1733         out[0]=out[0]+out[9];
1734         out[9]=(out[9] << 16)|(out[9] >> 48);
1735         out[9]=out[0]^out[9];
1736         out[2]=out[2]+out[13];
1737         out[13]=(out[13] << 34)|(out[13] >> 30);
1738         out[13]=out[2]^out[13];
1739         out[6]=out[6]+out[11];
1740         out[11]=(out[11] << 56)|(out[11] >> 8);
1741         out[11]=out[6]^out[11];
1742         out[4]=out[4]+out[15];
1743         out[15]=(out[15] << 51)|(out[15] >> 13);
1744         out[15]=out[4]^out[15];
1745         out[10]=out[10]+out[7];
1746         out[7]=(out[7] << 4)|(out[7] >> 60);
1747         out[7]=out[10]^out[7];
1748         out[12]=out[12]+out[3];
1749         out[3]=(out[3] << 53)|(out[3] >> 11);
1750         out[3]=out[12]^out[3];
1751         out[14]=out[14]+out[5];
1752         out[5]=(out[5] << 42)|(out[5] >> 22);
1753         out[5]=out[14]^out[5];
1754         out[8]=out[8]+out[1];
1755         out[1]=(out[1] << 41)|(out[1] >> 23);
1756         out[1]=out[8]^out[1];
1757         out[0]=out[0]+out[7];
1758         out[7]=(out[7] << 31)|(out[7] >> 33);
1759         out[7]=out[0]^out[7];
1760         out[2]=out[2]+out[5];
1761         out[5]=(out[5] << 44)|(out[5] >> 20);
1762         out[5]=out[2]^out[5];
1763         out[4]=out[4]+out[3];
1764         out[3]=(out[3] << 47)|(out[3] >> 17);
1765         out[3]=out[4]^out[3];
1766         out[6]=out[6]+out[1];
1767         out[1]=(out[1] << 46)|(out[1] >> 18);
1768         out[1]=out[6]^out[1];
1769         out[12]=out[12]+out[15];
1770         out[15]=(out[15] << 19)|(out[15] >> 45);
1771         out[15]=out[12]^out[15];
1772         out[14]=out[14]+out[13];
1773         out[13]=(out[13] << 42)|(out[13] >> 22);
1774         out[13]=out[14]^out[13];
1775         out[8]=out[8]+out[11];
1776         out[11]=(out[11] << 44)|(out[11] >> 20);
1777         out[11]=out[8]^out[11];
1778         out[10]=out[10]+out[9];
1779         out[9]=(out[9] << 25)|(out[9] >> 39);
1780         out[9]=out[10]^out[9];
1781         out[0]=out[0]+out[15];
1782         out[15]=(out[15] << 9)|(out[15] >> 55);
1783         out[15]=out[0]^out[15];
1784         out[2]=out[2]+out[11];
1785         out[11]=(out[11] << 48)|(out[11] >> 16);
1786         out[11]=out[2]^out[11];
1787         out[6]=out[6]+out[13];
1788         out[13]=(out[13] << 35)|(out[13] >> 29);
1789         out[13]=out[6]^out[13];
1790         out[4]=out[4]+out[9];
1791         out[9]=(out[9] << 52)|(out[9] >> 12);
1792         out[9]=out[4]^out[9];
1793         out[14]=out[14]+out[1];
1794         out[1]=(out[1] << 23)|(out[1] >> 41);
1795         out[1]=out[14]^out[1];
1796         out[8]=out[8]+out[5];
1797         out[5]=(out[5] << 31)|(out[5] >> 33);
1798         out[5]=out[8]^out[5];
1799         out[10]=out[10]+out[3];
1800         out[3]=(out[3] << 37)|(out[3] >> 27);
1801         out[3]=out[10]^out[3];
1802         out[12]=out[12]+out[7];
1803         out[7]=(out[7] << 20)|(out[7] >> 44);
1804         out[7]=out[12]^out[7];
1805         out[0]+=key[2];
1806         out[1]+=key[3];
1807         out[2]+=key[4];
1808         out[3]+=key[5];
1809         out[4]+=key[6];
1810         out[5]+=key[7];
1811         out[6]+=key[8];
1812         out[7]+=key[9];
1813         out[8]+=key[10];
1814         out[9]+=key[11];
1815         out[10]+=key[12];
1816         out[11]+=key[13];
1817         out[12]+=key[14];
1818         out[13]+=key[15]+t;
1819         out[14]+=k+tweak[0];
1820         out[15]+=key[0]+2;
1821         out[0]=out[0]+out[1];
1822         out[1]=(out[1] << 24)|(out[1] >> 40);
1823         out[1]=out[0]^out[1];
1824         out[2]=out[2]+out[3];
1825         out[3]=(out[3] << 13)|(out[3] >> 51);
1826         out[3]=out[2]^out[3];
1827         out[4]=out[4]+out[5];
1828         out[5]=(out[5] << 8)|(out[5] >> 56);
1829         out[5]=out[4]^out[5];
1830         out[6]=out[6]+out[7];
1831         out[7]=(out[7] << 47)|(out[7] >> 17);
1832         out[7]=out[6]^out[7];
1833         out[8]=out[8]+out[9];
1834         out[9]=(out[9] << 8)|(out[9] >> 56);
1835         out[9]=out[8]^out[9];
1836         out[10]=out[10]+out[11];
1837         out[11]=(out[11] << 17)|(out[11] >> 47);
1838         out[11]=out[10]^out[11];
1839         out[12]=out[12]+out[13];
1840         out[13]=(out[13] << 22)|(out[13] >> 42);
1841         out[13]=out[12]^out[13];
1842         out[14]=out[14]+out[15];
1843         out[15]=(out[15] << 37)|(out[15] >> 27);
1844         out[15]=out[14]^out[15];
1845         out[0]=out[0]+out[9];
1846         out[9]=(out[9] << 38)|(out[9] >> 26);
1847         out[9]=out[0]^out[9];
1848         out[2]=out[2]+out[13];
1849         out[13]=(out[13] << 19)|(out[13] >> 45);
1850         out[13]=out[2]^out[13];
1851         out[6]=out[6]+out[11];
1852         out[11]=(out[11] << 10)|(out[11] >> 54);
1853         out[11]=out[6]^out[11];
1854         out[4]=out[4]+out[15];
1855         out[15]=(out[15] << 55)|(out[15] >> 9);
1856         out[15]=out[4]^out[15];
1857         out[10]=out[10]+out[7];
1858         out[7]=(out[7] << 49)|(out[7] >> 15);
1859         out[7]=out[10]^out[7];
1860         out[12]=out[12]+out[3];
1861         out[3]=(out[3] << 18)|(out[3] >> 46);
1862         out[3]=out[12]^out[3];
1863         out[14]=out[14]+out[5];
1864         out[5]=(out[5] << 23)|(out[5] >> 41);
1865         out[5]=out[14]^out[5];
1866         out[8]=out[8]+out[1];
1867         out[1]=(out[1] << 52)|(out[1] >> 12);
1868         out[1]=out[8]^out[1];
1869         out[0]=out[0]+out[7];
1870         out[7]=(out[7] << 33)|(out[7] >> 31);
1871         out[7]=out[0]^out[7];
1872         out[2]=out[2]+out[5];
1873         out[5]=(out[5] << 4)|(out[5] >> 60);
1874         out[5]=out[2]^out[5];
1875         out[4]=out[4]+out[3];
1876         out[3]=(out[3] << 51)|(out[3] >> 13);
1877         out[3]=out[4]^out[3];
1878         out[6]=out[6]+out[1];
1879         out[1]=(out[1] << 13)|(out[1] >> 51);
1880         out[1]=out[6]^out[1];
1881         out[12]=out[12]+out[15];
1882         out[15]=(out[15] << 34)|(out[15] >> 30);
1883         out[15]=out[12]^out[15];
1884         out[14]=out[14]+out[13];
1885         out[13]=(out[13] << 41)|(out[13] >> 23);
1886         out[13]=out[14]^out[13];
1887         out[8]=out[8]+out[11];
1888         out[11]=(out[11] << 59)|(out[11] >> 5);
1889         out[11]=out[8]^out[11];
1890         out[10]=out[10]+out[9];
1891         out[9]=(out[9] << 17)|(out[9] >> 47);
1892         out[9]=out[10]^out[9];
1893         out[0]=out[0]+out[15];
1894         out[15]=(out[15] << 5)|(out[15] >> 59);
1895         out[15]=out[0]^out[15];
1896         out[2]=out[2]+out[11];
1897         out[11]=(out[11] << 20)|(out[11] >> 44);
1898         out[11]=out[2]^out[11];
1899         out[6]=out[6]+out[13];
1900         out[13]=(out[13] << 48)|(out[13] >> 16);
1901         out[13]=out[6]^out[13];
1902         out[4]=out[4]+out[9];
1903         out[9]=(out[9] << 41)|(out[9] >> 23);
1904         out[9]=out[4]^out[9];
1905         out[14]=out[14]+out[1];
1906         out[1]=(out[1] << 47)|(out[1] >> 17);
1907         out[1]=out[14]^out[1];
1908         out[8]=out[8]+out[5];
1909         out[5]=(out[5] << 28)|(out[5] >> 36);
1910         out[5]=out[8]^out[5];
1911         out[10]=out[10]+out[3];
1912         out[3]=(out[3] << 16)|(out[3] >> 48);
1913         out[3]=out[10]^out[3];
1914         out[12]=out[12]+out[7];
1915         out[7]=(out[7] << 25)|(out[7] >> 39);
1916         out[7]=out[12]^out[7];
1917         out[0]+=key[3];
1918         out[1]+=key[4];
1919         out[2]+=key[5];
1920         out[3]+=key[6];
1921         out[4]+=key[7];
1922         out[5]+=key[8];
1923         out[6]+=key[9];
1924         out[7]+=key[10];
1925         out[8]+=key[11];
1926         out[9]+=key[12];
1927         out[10]+=key[13];
1928         out[11]+=key[14];
1929         out[12]+=key[15];
1930         out[13]+=k+tweak[0];
1931         out[14]+=key[0]+tweak[1];
1932         out[15]+=key[1]+3;
1933         out[0]=out[0]+out[1];
1934         out[1]=(out[1] << 41)|(out[1] >> 23);
1935         out[1]=out[0]^out[1];
1936         out[2]=out[2]+out[3];
1937         out[3]=(out[3] << 9)|(out[3] >> 55);
1938         out[3]=out[2]^out[3];
1939         out[4]=out[4]+out[5];
1940         out[5]=(out[5] << 37)|(out[5] >> 27);
1941         out[5]=out[4]^out[5];
1942         out[6]=out[6]+out[7];
1943         out[7]=(out[7] << 31)|(out[7] >> 33);
1944         out[7]=out[6]^out[7];
1945         out[8]=out[8]+out[9];
1946         out[9]=(out[9] << 12)|(out[9] >> 52);
1947         out[9]=out[8]^out[9];
1948         out[10]=out[10]+out[11];
1949         out[11]=(out[11] << 47)|(out[11] >> 17);
1950         out[11]=out[10]^out[11];
1951         out[12]=out[12]+out[13];
1952         out[13]=(out[13] << 44)|(out[13] >> 20);
1953         out[13]=out[12]^out[13];
1954         out[14]=out[14]+out[15];
1955         out[15]=(out[15] << 30)|(out[15] >> 34);
1956         out[15]=out[14]^out[15];
1957         out[0]=out[0]+out[9];
1958         out[9]=(out[9] << 16)|(out[9] >> 48);
1959         out[9]=out[0]^out[9];
1960         out[2]=out[2]+out[13];
1961         out[13]=(out[13] << 34)|(out[13] >> 30);
1962         out[13]=out[2]^out[13];
1963         out[6]=out[6]+out[11];
1964         out[11]=(out[11] << 56)|(out[11] >> 8);
1965         out[11]=out[6]^out[11];
1966         out[4]=out[4]+out[15];
1967         out[15]=(out[15] << 51)|(out[15] >> 13);
1968         out[15]=out[4]^out[15];
1969         out[10]=out[10]+out[7];
1970         out[7]=(out[7] << 4)|(out[7] >> 60);
1971         out[7]=out[10]^out[7];
1972         out[12]=out[12]+out[3];
1973         out[3]=(out[3] << 53)|(out[3] >> 11);
1974         out[3]=out[12]^out[3];
1975         out[14]=out[14]+out[5];
1976         out[5]=(out[5] << 42)|(out[5] >> 22);
1977         out[5]=out[14]^out[5];
1978         out[8]=out[8]+out[1];
1979         out[1]=(out[1] << 41)|(out[1] >> 23);
1980         out[1]=out[8]^out[1];
1981         out[0]=out[0]+out[7];
1982         out[7]=(out[7] << 31)|(out[7] >> 33);
1983         out[7]=out[0]^out[7];
1984         out[2]=out[2]+out[5];
1985         out[5]=(out[5] << 44)|(out[5] >> 20);
1986         out[5]=out[2]^out[5];
1987         out[4]=out[4]+out[3];
1988         out[3]=(out[3] << 47)|(out[3] >> 17);
1989         out[3]=out[4]^out[3];
1990         out[6]=out[6]+out[1];
1991         out[1]=(out[1] << 46)|(out[1] >> 18);
1992         out[1]=out[6]^out[1];
1993         out[12]=out[12]+out[15];
1994         out[15]=(out[15] << 19)|(out[15] >> 45);
1995         out[15]=out[12]^out[15];
1996         out[14]=out[14]+out[13];
1997         out[13]=(out[13] << 42)|(out[13] >> 22);
1998         out[13]=out[14]^out[13];
1999         out[8]=out[8]+out[11];
2000         out[11]=(out[11] << 44)|(out[11] >> 20);
2001         out[11]=out[8]^out[11];
2002         out[10]=out[10]+out[9];
2003         out[9]=(out[9] << 25)|(out[9] >> 39);
2004         out[9]=out[10]^out[9];
2005         out[0]=out[0]+out[15];
2006         out[15]=(out[15] << 9)|(out[15] >> 55);
2007         out[15]=out[0]^out[15];
2008         out[2]=out[2]+out[11];
2009         out[11]=(out[11] << 48)|(out[11] >> 16);
2010         out[11]=out[2]^out[11];
2011         out[6]=out[6]+out[13];
2012         out[13]=(out[13] << 35)|(out[13] >> 29);
2013         out[13]=out[6]^out[13];
2014         out[4]=out[4]+out[9];
2015         out[9]=(out[9] << 52)|(out[9] >> 12);
2016         out[9]=out[4]^out[9];
2017         out[14]=out[14]+out[1];
2018         out[1]=(out[1] << 23)|(out[1] >> 41);
2019         out[1]=out[14]^out[1];
2020         out[8]=out[8]+out[5];
2021         out[5]=(out[5] << 31)|(out[5] >> 33);
2022         out[5]=out[8]^out[5];
2023         out[10]=out[10]+out[3];
2024         out[3]=(out[3] << 37)|(out[3] >> 27);
2025         out[3]=out[10]^out[3];
2026         out[12]=out[12]+out[7];
2027         out[7]=(out[7] << 20)|(out[7] >> 44);
2028         out[7]=out[12]^out[7];
2029         out[0]+=key[4];
2030         out[1]+=key[5];
2031         out[2]+=key[6];
2032         out[3]+=key[7];
2033         out[4]+=key[8];
2034         out[5]+=key[9];
2035         out[6]+=key[10];
2036         out[7]+=key[11];
2037         out[8]+=key[12];
2038         out[9]+=key[13];
2039         out[10]+=key[14];
2040         out[11]+=key[15];
2041         out[12]+=k;
2042         out[13]+=key[0]+tweak[1];
2043         out[14]+=key[1]+t;
2044         out[15]+=key[2]+4;
2045         out[0]=out[0]+out[1];
2046         out[1]=(out[1] << 24)|(out[1] >> 40);
2047         out[1]=out[0]^out[1];
2048         out[2]=out[2]+out[3];
2049         out[3]=(out[3] << 13)|(out[3] >> 51);
2050         out[3]=out[2]^out[3];
2051         out[4]=out[4]+out[5];
2052         out[5]=(out[5] << 8)|(out[5] >> 56);
2053         out[5]=out[4]^out[5];
2054         out[6]=out[6]+out[7];
2055         out[7]=(out[7] << 47)|(out[7] >> 17);
2056         out[7]=out[6]^out[7];
2057         out[8]=out[8]+out[9];
2058         out[9]=(out[9] << 8)|(out[9] >> 56);
2059         out[9]=out[8]^out[9];
2060         out[10]=out[10]+out[11];
2061         out[11]=(out[11] << 17)|(out[11] >> 47);
2062         out[11]=out[10]^out[11];
2063         out[12]=out[12]+out[13];
2064         out[13]=(out[13] << 22)|(out[13] >> 42);
2065         out[13]=out[12]^out[13];
2066         out[14]=out[14]+out[15];
2067         out[15]=(out[15] << 37)|(out[15] >> 27);
2068         out[15]=out[14]^out[15];
2069         out[0]=out[0]+out[9];
2070         out[9]=(out[9] << 38)|(out[9] >> 26);
2071         out[9]=out[0]^out[9];
2072         out[2]=out[2]+out[13];
2073         out[13]=(out[13] << 19)|(out[13] >> 45);
2074         out[13]=out[2]^out[13];
2075         out[6]=out[6]+out[11];
2076         out[11]=(out[11] << 10)|(out[11] >> 54);
2077         out[11]=out[6]^out[11];
2078         out[4]=out[4]+out[15];
2079         out[15]=(out[15] << 55)|(out[15] >> 9);
2080         out[15]=out[4]^out[15];
2081         out[10]=out[10]+out[7];
2082         out[7]=(out[7] << 49)|(out[7] >> 15);
2083         out[7]=out[10]^out[7];
2084         out[12]=out[12]+out[3];
2085         out[3]=(out[3] << 18)|(out[3] >> 46);
2086         out[3]=out[12]^out[3];
2087         out[14]=out[14]+out[5];
2088         out[5]=(out[5] << 23)|(out[5] >> 41);
2089         out[5]=out[14]^out[5];
2090         out[8]=out[8]+out[1];
2091         out[1]=(out[1] << 52)|(out[1] >> 12);
2092         out[1]=out[8]^out[1];
2093         out[0]=out[0]+out[7];
2094         out[7]=(out[7] << 33)|(out[7] >> 31);
2095         out[7]=out[0]^out[7];
2096         out[2]=out[2]+out[5];
2097         out[5]=(out[5] << 4)|(out[5] >> 60);
2098         out[5]=out[2]^out[5];
2099         out[4]=out[4]+out[3];
2100         out[3]=(out[3] << 51)|(out[3] >> 13);
2101         out[3]=out[4]^out[3];
2102         out[6]=out[6]+out[1];
2103         out[1]=(out[1] << 13)|(out[1] >> 51);
2104         out[1]=out[6]^out[1];
2105         out[12]=out[12]+out[15];
2106         out[15]=(out[15] << 34)|(out[15] >> 30);
2107         out[15]=out[12]^out[15];
2108         out[14]=out[14]+out[13];
2109         out[13]=(out[13] << 41)|(out[13] >> 23);
2110         out[13]=out[14]^out[13];
2111         out[8]=out[8]+out[11];
2112         out[11]=(out[11] << 59)|(out[11] >> 5);
2113         out[11]=out[8]^out[11];
2114         out[10]=out[10]+out[9];
2115         out[9]=(out[9] << 17)|(out[9] >> 47);
2116         out[9]=out[10]^out[9];
2117         out[0]=out[0]+out[15];
2118         out[15]=(out[15] << 5)|(out[15] >> 59);
2119         out[15]=out[0]^out[15];
2120         out[2]=out[2]+out[11];
2121         out[11]=(out[11] << 20)|(out[11] >> 44);
2122         out[11]=out[2]^out[11];
2123         out[6]=out[6]+out[13];
2124         out[13]=(out[13] << 48)|(out[13] >> 16);
2125         out[13]=out[6]^out[13];
2126         out[4]=out[4]+out[9];
2127         out[9]=(out[9] << 41)|(out[9] >> 23);
2128         out[9]=out[4]^out[9];
2129         out[14]=out[14]+out[1];
2130         out[1]=(out[1] << 47)|(out[1] >> 17);
2131         out[1]=out[14]^out[1];
2132         out[8]=out[8]+out[5];
2133         out[5]=(out[5] << 28)|(out[5] >> 36);
2134         out[5]=out[8]^out[5];
2135         out[10]=out[10]+out[3];
2136         out[3]=(out[3] << 16)|(out[3] >> 48);
2137         out[3]=out[10]^out[3];
2138         out[12]=out[12]+out[7];
2139         out[7]=(out[7] << 25)|(out[7] >> 39);
2140         out[7]=out[12]^out[7];
2141         out[0]+=key[5];
2142         out[1]+=key[6];
2143         out[2]+=key[7];
2144         out[3]+=key[8];
2145         out[4]+=key[9];
2146         out[5]+=key[10];
2147         out[6]+=key[11];
2148         out[7]+=key[12];
2149         out[8]+=key[13];
2150         out[9]+=key[14];
2151         out[10]+=key[15];
2152         out[11]+=k;
2153         out[12]+=key[0];
2154         out[13]+=key[1]+t;
2155         out[14]+=key[2]+tweak[0];
2156         out[15]+=key[3]+5;
2157         out[0]=out[0]+out[1];
2158         out[1]=(out[1] << 41)|(out[1] >> 23);
2159         out[1]=out[0]^out[1];
2160         out[2]=out[2]+out[3];
2161         out[3]=(out[3] << 9)|(out[3] >> 55);
2162         out[3]=out[2]^out[3];
2163         out[4]=out[4]+out[5];
2164         out[5]=(out[5] << 37)|(out[5] >> 27);
2165         out[5]=out[4]^out[5];
2166         out[6]=out[6]+out[7];
2167         out[7]=(out[7] << 31)|(out[7] >> 33);
2168         out[7]=out[6]^out[7];
2169         out[8]=out[8]+out[9];
2170         out[9]=(out[9] << 12)|(out[9] >> 52);
2171         out[9]=out[8]^out[9];
2172         out[10]=out[10]+out[11];
2173         out[11]=(out[11] << 47)|(out[11] >> 17);
2174         out[11]=out[10]^out[11];
2175         out[12]=out[12]+out[13];
2176         out[13]=(out[13] << 44)|(out[13] >> 20);
2177         out[13]=out[12]^out[13];
2178         out[14]=out[14]+out[15];
2179         out[15]=(out[15] << 30)|(out[15] >> 34);
2180         out[15]=out[14]^out[15];
2181         out[0]=out[0]+out[9];
2182         out[9]=(out[9] << 16)|(out[9] >> 48);
2183         out[9]=out[0]^out[9];
2184         out[2]=out[2]+out[13];
2185         out[13]=(out[13] << 34)|(out[13] >> 30);
2186         out[13]=out[2]^out[13];
2187         out[6]=out[6]+out[11];
2188         out[11]=(out[11] << 56)|(out[11] >> 8);
2189         out[11]=out[6]^out[11];
2190         out[4]=out[4]+out[15];
2191         out[15]=(out[15] << 51)|(out[15] >> 13);
2192         out[15]=out[4]^out[15];
2193         out[10]=out[10]+out[7];
2194         out[7]=(out[7] << 4)|(out[7] >> 60);
2195         out[7]=out[10]^out[7];
2196         out[12]=out[12]+out[3];
2197         out[3]=(out[3] << 53)|(out[3] >> 11);
2198         out[3]=out[12]^out[3];
2199         out[14]=out[14]+out[5];
2200         out[5]=(out[5] << 42)|(out[5] >> 22);
2201         out[5]=out[14]^out[5];
2202         out[8]=out[8]+out[1];
2203         out[1]=(out[1] << 41)|(out[1] >> 23);
2204         out[1]=out[8]^out[1];
2205         out[0]=out[0]+out[7];
2206         out[7]=(out[7] << 31)|(out[7] >> 33);
2207         out[7]=out[0]^out[7];
2208         out[2]=out[2]+out[5];
2209         out[5]=(out[5] << 44)|(out[5] >> 20);
2210         out[5]=out[2]^out[5];
2211         out[4]=out[4]+out[3];
2212         out[3]=(out[3] << 47)|(out[3] >> 17);
2213         out[3]=out[4]^out[3];
2214         out[6]=out[6]+out[1];
2215         out[1]=(out[1] << 46)|(out[1] >> 18);
2216         out[1]=out[6]^out[1];
2217         out[12]=out[12]+out[15];
2218         out[15]=(out[15] << 19)|(out[15] >> 45);
2219         out[15]=out[12]^out[15];
2220         out[14]=out[14]+out[13];
2221         out[13]=(out[13] << 42)|(out[13] >> 22);
2222         out[13]=out[14]^out[13];
2223         out[8]=out[8]+out[11];
2224         out[11]=(out[11] << 44)|(out[11] >> 20);
2225         out[11]=out[8]^out[11];
2226         out[10]=out[10]+out[9];
2227         out[9]=(out[9] << 25)|(out[9] >> 39);
2228         out[9]=out[10]^out[9];
2229         out[0]=out[0]+out[15];
2230         out[15]=(out[15] << 9)|(out[15] >> 55);
2231         out[15]=out[0]^out[15];
2232         out[2]=out[2]+out[11];
2233         out[11]=(out[11] << 48)|(out[11] >> 16);
2234         out[11]=out[2]^out[11];
2235         out[6]=out[6]+out[13];
2236         out[13]=(out[13] << 35)|(out[13] >> 29);
2237         out[13]=out[6]^out[13];
2238         out[4]=out[4]+out[9];
2239         out[9]=(out[9] << 52)|(out[9] >> 12);
2240         out[9]=out[4]^out[9];
2241         out[14]=out[14]+out[1];
2242         out[1]=(out[1] << 23)|(out[1] >> 41);
2243         out[1]=out[14]^out[1];
2244         out[8]=out[8]+out[5];
2245         out[5]=(out[5] << 31)|(out[5] >> 33);
2246         out[5]=out[8]^out[5];
2247         out[10]=out[10]+out[3];
2248         out[3]=(out[3] << 37)|(out[3] >> 27);
2249         out[3]=out[10]^out[3];
2250         out[12]=out[12]+out[7];
2251         out[7]=(out[7] << 20)|(out[7] >> 44);
2252         out[7]=out[12]^out[7];
2253         out[0]+=key[6];
2254         out[1]+=key[7];
2255         out[2]+=key[8];
2256         out[3]+=key[9];
2257         out[4]+=key[10];
2258         out[5]+=key[11];
2259         out[6]+=key[12];
2260         out[7]+=key[13];
2261         out[8]+=key[14];
2262         out[9]+=key[15];
2263         out[10]+=k;
2264         out[11]+=key[0];
2265         out[12]+=key[1];
2266         out[13]+=key[2]+tweak[0];
2267         out[14]+=key[3]+tweak[1];
2268         out[15]+=key[4]+6;
2269         out[0]=out[0]+out[1];
2270         out[1]=(out[1] << 24)|(out[1] >> 40);
2271         out[1]=out[0]^out[1];
2272         out[2]=out[2]+out[3];
2273         out[3]=(out[3] << 13)|(out[3] >> 51);
2274         out[3]=out[2]^out[3];
2275         out[4]=out[4]+out[5];
2276         out[5]=(out[5] << 8)|(out[5] >> 56);
2277         out[5]=out[4]^out[5];
2278         out[6]=out[6]+out[7];
2279         out[7]=(out[7] << 47)|(out[7] >> 17);
2280         out[7]=out[6]^out[7];
2281         out[8]=out[8]+out[9];
2282         out[9]=(out[9] << 8)|(out[9] >> 56);
2283         out[9]=out[8]^out[9];
2284         out[10]=out[10]+out[11];
2285         out[11]=(out[11] << 17)|(out[11] >> 47);
2286         out[11]=out[10]^out[11];
2287         out[12]=out[12]+out[13];
2288         out[13]=(out[13] << 22)|(out[13] >> 42);
2289         out[13]=out[12]^out[13];
2290         out[14]=out[14]+out[15];
2291         out[15]=(out[15] << 37)|(out[15] >> 27);
2292         out[15]=out[14]^out[15];
2293         out[0]=out[0]+out[9];
2294         out[9]=(out[9] << 38)|(out[9] >> 26);
2295         out[9]=out[0]^out[9];
2296         out[2]=out[2]+out[13];
2297         out[13]=(out[13] << 19)|(out[13] >> 45);
2298         out[13]=out[2]^out[13];
2299         out[6]=out[6]+out[11];
2300         out[11]=(out[11] << 10)|(out[11] >> 54);
2301         out[11]=out[6]^out[11];
2302         out[4]=out[4]+out[15];
2303         out[15]=(out[15] << 55)|(out[15] >> 9);
2304         out[15]=out[4]^out[15];
2305         out[10]=out[10]+out[7];
2306         out[7]=(out[7] << 49)|(out[7] >> 15);
2307         out[7]=out[10]^out[7];
2308         out[12]=out[12]+out[3];
2309         out[3]=(out[3] << 18)|(out[3] >> 46);
2310         out[3]=out[12]^out[3];
2311         out[14]=out[14]+out[5];
2312         out[5]=(out[5] << 23)|(out[5] >> 41);
2313         out[5]=out[14]^out[5];
2314         out[8]=out[8]+out[1];
2315         out[1]=(out[1] << 52)|(out[1] >> 12);
2316         out[1]=out[8]^out[1];
2317         out[0]=out[0]+out[7];
2318         out[7]=(out[7] << 33)|(out[7] >> 31);
2319         out[7]=out[0]^out[7];
2320         out[2]=out[2]+out[5];
2321         out[5]=(out[5] << 4)|(out[5] >> 60);
2322         out[5]=out[2]^out[5];
2323         out[4]=out[4]+out[3];
2324         out[3]=(out[3] << 51)|(out[3] >> 13);
2325         out[3]=out[4]^out[3];
2326         out[6]=out[6]+out[1];
2327         out[1]=(out[1] << 13)|(out[1] >> 51);
2328         out[1]=out[6]^out[1];
2329         out[12]=out[12]+out[15];
2330         out[15]=(out[15] << 34)|(out[15] >> 30);
2331         out[15]=out[12]^out[15];
2332         out[14]=out[14]+out[13];
2333         out[13]=(out[13] << 41)|(out[13] >> 23);
2334         out[13]=out[14]^out[13];
2335         out[8]=out[8]+out[11];
2336         out[11]=(out[11] << 59)|(out[11] >> 5);
2337         out[11]=out[8]^out[11];
2338         out[10]=out[10]+out[9];
2339         out[9]=(out[9] << 17)|(out[9] >> 47);
2340         out[9]=out[10]^out[9];
2341         out[0]=out[0]+out[15];
2342         out[15]=(out[15] << 5)|(out[15] >> 59);
2343         out[15]=out[0]^out[15];
2344         out[2]=out[2]+out[11];
2345         out[11]=(out[11] << 20)|(out[11] >> 44);
2346         out[11]=out[2]^out[11];
2347         out[6]=out[6]+out[13];
2348         out[13]=(out[13] << 48)|(out[13] >> 16);
2349         out[13]=out[6]^out[13];
2350         out[4]=out[4]+out[9];
2351         out[9]=(out[9] << 41)|(out[9] >> 23);
2352         out[9]=out[4]^out[9];
2353         out[14]=out[14]+out[1];
2354         out[1]=(out[1] << 47)|(out[1] >> 17);
2355         out[1]=out[14]^out[1];
2356         out[8]=out[8]+out[5];
2357         out[5]=(out[5] << 28)|(out[5] >> 36);
2358         out[5]=out[8]^out[5];
2359         out[10]=out[10]+out[3];
2360         out[3]=(out[3] << 16)|(out[3] >> 48);
2361         out[3]=out[10]^out[3];
2362         out[12]=out[12]+out[7];
2363         out[7]=(out[7] << 25)|(out[7] >> 39);
2364         out[7]=out[12]^out[7];
2365         out[0]+=key[7];
2366         out[1]+=key[8];
2367         out[2]+=key[9];
2368         out[3]+=key[10];
2369         out[4]+=key[11];
2370         out[5]+=key[12];
2371         out[6]+=key[13];
2372         out[7]+=key[14];
2373         out[8]+=key[15];
2374         out[9]+=k;
2375         out[10]+=key[0];
2376         out[11]+=key[1];
2377         out[12]+=key[2];
2378         out[13]+=key[3]+tweak[1];
2379         out[14]+=key[4]+t;
2380         out[15]+=key[5]+7;
2381         out[0]=out[0]+out[1];
2382         out[1]=(out[1] << 41)|(out[1] >> 23);
2383         out[1]=out[0]^out[1];
2384         out[2]=out[2]+out[3];
2385         out[3]=(out[3] << 9)|(out[3] >> 55);
2386         out[3]=out[2]^out[3];
2387         out[4]=out[4]+out[5];
2388         out[5]=(out[5] << 37)|(out[5] >> 27);
2389         out[5]=out[4]^out[5];
2390         out[6]=out[6]+out[7];
2391         out[7]=(out[7] << 31)|(out[7] >> 33);
2392         out[7]=out[6]^out[7];
2393         out[8]=out[8]+out[9];
2394         out[9]=(out[9] << 12)|(out[9] >> 52);
2395         out[9]=out[8]^out[9];
2396         out[10]=out[10]+out[11];
2397         out[11]=(out[11] << 47)|(out[11] >> 17);
2398         out[11]=out[10]^out[11];
2399         out[12]=out[12]+out[13];
2400         out[13]=(out[13] << 44)|(out[13] >> 20);
2401         out[13]=out[12]^out[13];
2402         out[14]=out[14]+out[15];
2403         out[15]=(out[15] << 30)|(out[15] >> 34);
2404         out[15]=out[14]^out[15];
2405         out[0]=out[0]+out[9];
2406         out[9]=(out[9] << 16)|(out[9] >> 48);
2407         out[9]=out[0]^out[9];
2408         out[2]=out[2]+out[13];
2409         out[13]=(out[13] << 34)|(out[13] >> 30);
2410         out[13]=out[2]^out[13];
2411         out[6]=out[6]+out[11];
2412         out[11]=(out[11] << 56)|(out[11] >> 8);
2413         out[11]=out[6]^out[11];
2414         out[4]=out[4]+out[15];
2415         out[15]=(out[15] << 51)|(out[15] >> 13);
2416         out[15]=out[4]^out[15];
2417         out[10]=out[10]+out[7];
2418         out[7]=(out[7] << 4)|(out[7] >> 60);
2419         out[7]=out[10]^out[7];
2420         out[12]=out[12]+out[3];
2421         out[3]=(out[3] << 53)|(out[3] >> 11);
2422         out[3]=out[12]^out[3];
2423         out[14]=out[14]+out[5];
2424         out[5]=(out[5] << 42)|(out[5] >> 22);
2425         out[5]=out[14]^out[5];
2426         out[8]=out[8]+out[1];
2427         out[1]=(out[1] << 41)|(out[1] >> 23);
2428         out[1]=out[8]^out[1];
2429         out[0]=out[0]+out[7];
2430         out[7]=(out[7] << 31)|(out[7] >> 33);
2431         out[7]=out[0]^out[7];
2432         out[2]=out[2]+out[5];
2433         out[5]=(out[5] << 44)|(out[5] >> 20);
2434         out[5]=out[2]^out[5];
2435         out[4]=out[4]+out[3];
2436         out[3]=(out[3] << 47)|(out[3] >> 17);
2437         out[3]=out[4]^out[3];
2438         out[6]=out[6]+out[1];
2439         out[1]=(out[1] << 46)|(out[1] >> 18);
2440         out[1]=out[6]^out[1];
2441         out[12]=out[12]+out[15];
2442         out[15]=(out[15] << 19)|(out[15] >> 45);
2443         out[15]=out[12]^out[15];
2444         out[14]=out[14]+out[13];
2445         out[13]=(out[13] << 42)|(out[13] >> 22);
2446         out[13]=out[14]^out[13];
2447         out[8]=out[8]+out[11];
2448         out[11]=(out[11] << 44)|(out[11] >> 20);
2449         out[11]=out[8]^out[11];
2450         out[10]=out[10]+out[9];
2451         out[9]=(out[9] << 25)|(out[9] >> 39);
2452         out[9]=out[10]^out[9];
2453         out[0]=out[0]+out[15];
2454         out[15]=(out[15] << 9)|(out[15] >> 55);
2455         out[15]=out[0]^out[15];
2456         out[2]=out[2]+out[11];
2457         out[11]=(out[11] << 48)|(out[11] >> 16);
2458         out[11]=out[2]^out[11];
2459         out[6]=out[6]+out[13];
2460         out[13]=(out[13] << 35)|(out[13] >> 29);
2461         out[13]=out[6]^out[13];
2462         out[4]=out[4]+out[9];
2463         out[9]=(out[9] << 52)|(out[9] >> 12);
2464         out[9]=out[4]^out[9];
2465         out[14]=out[14]+out[1];
2466         out[1]=(out[1] << 23)|(out[1] >> 41);
2467         out[1]=out[14]^out[1];
2468         out[8]=out[8]+out[5];
2469         out[5]=(out[5] << 31)|(out[5] >> 33);
2470         out[5]=out[8]^out[5];
2471         out[10]=out[10]+out[3];
2472         out[3]=(out[3] << 37)|(out[3] >> 27);
2473         out[3]=out[10]^out[3];
2474         out[12]=out[12]+out[7];
2475         out[7]=(out[7] << 20)|(out[7] >> 44);
2476         out[7]=out[12]^out[7];
2477         out[0]+=key[8];
2478         out[1]+=key[9];
2479         out[2]+=key[10];
2480         out[3]+=key[11];
2481         out[4]+=key[12];
2482         out[5]+=key[13];
2483         out[6]+=key[14];
2484         out[7]+=key[15];
2485         out[8]+=k;
2486         out[9]+=key[0];
2487         out[10]+=key[1];
2488         out[11]+=key[2];
2489         out[12]+=key[3];
2490         out[13]+=key[4]+t;
2491         out[14]+=key[5]+tweak[0];
2492         out[15]+=key[6]+8;
2493         out[0]=out[0]+out[1];
2494         out[1]=(out[1] << 24)|(out[1] >> 40);
2495         out[1]=out[0]^out[1];
2496         out[2]=out[2]+out[3];
2497         out[3]=(out[3] << 13)|(out[3] >> 51);
2498         out[3]=out[2]^out[3];
2499         out[4]=out[4]+out[5];
2500         out[5]=(out[5] << 8)|(out[5] >> 56);
2501         out[5]=out[4]^out[5];
2502         out[6]=out[6]+out[7];
2503         out[7]=(out[7] << 47)|(out[7] >> 17);
2504         out[7]=out[6]^out[7];
2505         out[8]=out[8]+out[9];
2506         out[9]=(out[9] << 8)|(out[9] >> 56);
2507         out[9]=out[8]^out[9];
2508         out[10]=out[10]+out[11];
2509         out[11]=(out[11] << 17)|(out[11] >> 47);
2510         out[11]=out[10]^out[11];
2511         out[12]=out[12]+out[13];
2512         out[13]=(out[13] << 22)|(out[13] >> 42);
2513         out[13]=out[12]^out[13];
2514         out[14]=out[14]+out[15];
2515         out[15]=(out[15] << 37)|(out[15] >> 27);
2516         out[15]=out[14]^out[15];
2517         out[0]=out[0]+out[9];
2518         out[9]=(out[9] << 38)|(out[9] >> 26);
2519         out[9]=out[0]^out[9];
2520         out[2]=out[2]+out[13];
2521         out[13]=(out[13] << 19)|(out[13] >> 45);
2522         out[13]=out[2]^out[13];
2523         out[6]=out[6]+out[11];
2524         out[11]=(out[11] << 10)|(out[11] >> 54);
2525         out[11]=out[6]^out[11];
2526         out[4]=out[4]+out[15];
2527         out[15]=(out[15] << 55)|(out[15] >> 9);
2528         out[15]=out[4]^out[15];
2529         out[10]=out[10]+out[7];
2530         out[7]=(out[7] << 49)|(out[7] >> 15);
2531         out[7]=out[10]^out[7];
2532         out[12]=out[12]+out[3];
2533         out[3]=(out[3] << 18)|(out[3] >> 46);
2534         out[3]=out[12]^out[3];
2535         out[14]=out[14]+out[5];
2536         out[5]=(out[5] << 23)|(out[5] >> 41);
2537         out[5]=out[14]^out[5];
2538         out[8]=out[8]+out[1];
2539         out[1]=(out[1] << 52)|(out[1] >> 12);
2540         out[1]=out[8]^out[1];
2541         out[0]=out[0]+out[7];
2542         out[7]=(out[7] << 33)|(out[7] >> 31);
2543         out[7]=out[0]^out[7];
2544         out[2]=out[2]+out[5];
2545         out[5]=(out[5] << 4)|(out[5] >> 60);
2546         out[5]=out[2]^out[5];
2547         out[4]=out[4]+out[3];
2548         out[3]=(out[3] << 51)|(out[3] >> 13);
2549         out[3]=out[4]^out[3];
2550         out[6]=out[6]+out[1];
2551         out[1]=(out[1] << 13)|(out[1] >> 51);
2552         out[1]=out[6]^out[1];
2553         out[12]=out[12]+out[15];
2554         out[15]=(out[15] << 34)|(out[15] >> 30);
2555         out[15]=out[12]^out[15];
2556         out[14]=out[14]+out[13];
2557         out[13]=(out[13] << 41)|(out[13] >> 23);
2558         out[13]=out[14]^out[13];
2559         out[8]=out[8]+out[11];
2560         out[11]=(out[11] << 59)|(out[11] >> 5);
2561         out[11]=out[8]^out[11];
2562         out[10]=out[10]+out[9];
2563         out[9]=(out[9] << 17)|(out[9] >> 47);
2564         out[9]=out[10]^out[9];
2565         out[0]=out[0]+out[15];
2566         out[15]=(out[15] << 5)|(out[15] >> 59);
2567         out[15]=out[0]^out[15];
2568         out[2]=out[2]+out[11];
2569         out[11]=(out[11] << 20)|(out[11] >> 44);
2570         out[11]=out[2]^out[11];
2571         out[6]=out[6]+out[13];
2572         out[13]=(out[13] << 48)|(out[13] >> 16);
2573         out[13]=out[6]^out[13];
2574         out[4]=out[4]+out[9];
2575         out[9]=(out[9] << 41)|(out[9] >> 23);
2576         out[9]=out[4]^out[9];
2577         out[14]=out[14]+out[1];
2578         out[1]=(out[1] << 47)|(out[1] >> 17);
2579         out[1]=out[14]^out[1];
2580         out[8]=out[8]+out[5];
2581         out[5]=(out[5] << 28)|(out[5] >> 36);
2582         out[5]=out[8]^out[5];
2583         out[10]=out[10]+out[3];
2584         out[3]=(out[3] << 16)|(out[3] >> 48);
2585         out[3]=out[10]^out[3];
2586         out[12]=out[12]+out[7];
2587         out[7]=(out[7] << 25)|(out[7] >> 39);
2588         out[7]=out[12]^out[7];
2589         out[0]+=key[9];
2590         out[1]+=key[10];
2591         out[2]+=key[11];
2592         out[3]+=key[12];
2593         out[4]+=key[13];
2594         out[5]+=key[14];
2595         out[6]+=key[15];
2596         out[7]+=k;
2597         out[8]+=key[0];
2598         out[9]+=key[1];
2599         out[10]+=key[2];
2600         out[11]+=key[3];
2601         out[12]+=key[4];
2602         out[13]+=key[5]+tweak[0];
2603         out[14]+=key[6]+tweak[1];
2604         out[15]+=key[7]+9;
2605         out[0]=out[0]+out[1];
2606         out[1]=(out[1] << 41)|(out[1] >> 23);
2607         out[1]=out[0]^out[1];
2608         out[2]=out[2]+out[3];
2609         out[3]=(out[3] << 9)|(out[3] >> 55);
2610         out[3]=out[2]^out[3];
2611         out[4]=out[4]+out[5];
2612         out[5]=(out[5] << 37)|(out[5] >> 27);
2613         out[5]=out[4]^out[5];
2614         out[6]=out[6]+out[7];
2615         out[7]=(out[7] << 31)|(out[7] >> 33);
2616         out[7]=out[6]^out[7];
2617         out[8]=out[8]+out[9];
2618         out[9]=(out[9] << 12)|(out[9] >> 52);
2619         out[9]=out[8]^out[9];
2620         out[10]=out[10]+out[11];
2621         out[11]=(out[11] << 47)|(out[11] >> 17);
2622         out[11]=out[10]^out[11];
2623         out[12]=out[12]+out[13];
2624         out[13]=(out[13] << 44)|(out[13] >> 20);
2625         out[13]=out[12]^out[13];
2626         out[14]=out[14]+out[15];
2627         out[15]=(out[15] << 30)|(out[15] >> 34);
2628         out[15]=out[14]^out[15];
2629         out[0]=out[0]+out[9];
2630         out[9]=(out[9] << 16)|(out[9] >> 48);
2631         out[9]=out[0]^out[9];
2632         out[2]=out[2]+out[13];
2633         out[13]=(out[13] << 34)|(out[13] >> 30);
2634         out[13]=out[2]^out[13];
2635         out[6]=out[6]+out[11];
2636         out[11]=(out[11] << 56)|(out[11] >> 8);
2637         out[11]=out[6]^out[11];
2638         out[4]=out[4]+out[15];
2639         out[15]=(out[15] << 51)|(out[15] >> 13);
2640         out[15]=out[4]^out[15];
2641         out[10]=out[10]+out[7];
2642         out[7]=(out[7] << 4)|(out[7] >> 60);
2643         out[7]=out[10]^out[7];
2644         out[12]=out[12]+out[3];
2645         out[3]=(out[3] << 53)|(out[3] >> 11);
2646         out[3]=out[12]^out[3];
2647         out[14]=out[14]+out[5];
2648         out[5]=(out[5] << 42)|(out[5] >> 22);
2649         out[5]=out[14]^out[5];
2650         out[8]=out[8]+out[1];
2651         out[1]=(out[1] << 41)|(out[1] >> 23);
2652         out[1]=out[8]^out[1];
2653         out[0]=out[0]+out[7];
2654         out[7]=(out[7] << 31)|(out[7] >> 33);
2655         out[7]=out[0]^out[7];
2656         out[2]=out[2]+out[5];
2657         out[5]=(out[5] << 44)|(out[5] >> 20);
2658         out[5]=out[2]^out[5];
2659         out[4]=out[4]+out[3];
2660         out[3]=(out[3] << 47)|(out[3] >> 17);
2661         out[3]=out[4]^out[3];
2662         out[6]=out[6]+out[1];
2663         out[1]=(out[1] << 46)|(out[1] >> 18);
2664         out[1]=out[6]^out[1];
2665         out[12]=out[12]+out[15];
2666         out[15]=(out[15] << 19)|(out[15] >> 45);
2667         out[15]=out[12]^out[15];
2668         out[14]=out[14]+out[13];
2669         out[13]=(out[13] << 42)|(out[13] >> 22);
2670         out[13]=out[14]^out[13];
2671         out[8]=out[8]+out[11];
2672         out[11]=(out[11] << 44)|(out[11] >> 20);
2673         out[11]=out[8]^out[11];
2674         out[10]=out[10]+out[9];
2675         out[9]=(out[9] << 25)|(out[9] >> 39);
2676         out[9]=out[10]^out[9];
2677         out[0]=out[0]+out[15];
2678         out[15]=(out[15] << 9)|(out[15] >> 55);
2679         out[15]=out[0]^out[15];
2680         out[2]=out[2]+out[11];
2681         out[11]=(out[11] << 48)|(out[11] >> 16);
2682         out[11]=out[2]^out[11];
2683         out[6]=out[6]+out[13];
2684         out[13]=(out[13] << 35)|(out[13] >> 29);
2685         out[13]=out[6]^out[13];
2686         out[4]=out[4]+out[9];
2687         out[9]=(out[9] << 52)|(out[9] >> 12);
2688         out[9]=out[4]^out[9];
2689         out[14]=out[14]+out[1];
2690         out[1]=(out[1] << 23)|(out[1] >> 41);
2691         out[1]=out[14]^out[1];
2692         out[8]=out[8]+out[5];
2693         out[5]=(out[5] << 31)|(out[5] >> 33);
2694         out[5]=out[8]^out[5];
2695         out[10]=out[10]+out[3];
2696         out[3]=(out[3] << 37)|(out[3] >> 27);
2697         out[3]=out[10]^out[3];
2698         out[12]=out[12]+out[7];
2699         out[7]=(out[7] << 20)|(out[7] >> 44);
2700         out[7]=out[12]^out[7];
2701         out[0]+=key[10];
2702         out[1]+=key[11];
2703         out[2]+=key[12];
2704         out[3]+=key[13];
2705         out[4]+=key[14];
2706         out[5]+=key[15];
2707         out[6]+=k;
2708         out[7]+=key[0];
2709         out[8]+=key[1];
2710         out[9]+=key[2];
2711         out[10]+=key[3];
2712         out[11]+=key[4];
2713         out[12]+=key[5];
2714         out[13]+=key[6]+tweak[1];
2715         out[14]+=key[7]+t;
2716         out[15]+=key[8]+10;
2717         out[0]=out[0]+out[1];
2718         out[1]=(out[1] << 24)|(out[1] >> 40);
2719         out[1]=out[0]^out[1];
2720         out[2]=out[2]+out[3];
2721         out[3]=(out[3] << 13)|(out[3] >> 51);
2722         out[3]=out[2]^out[3];
2723         out[4]=out[4]+out[5];
2724         out[5]=(out[5] << 8)|(out[5] >> 56);
2725         out[5]=out[4]^out[5];
2726         out[6]=out[6]+out[7];
2727         out[7]=(out[7] << 47)|(out[7] >> 17);
2728         out[7]=out[6]^out[7];
2729         out[8]=out[8]+out[9];
2730         out[9]=(out[9] << 8)|(out[9] >> 56);
2731         out[9]=out[8]^out[9];
2732         out[10]=out[10]+out[11];
2733         out[11]=(out[11] << 17)|(out[11] >> 47);
2734         out[11]=out[10]^out[11];
2735         out[12]=out[12]+out[13];
2736         out[13]=(out[13] << 22)|(out[13] >> 42);
2737         out[13]=out[12]^out[13];
2738         out[14]=out[14]+out[15];
2739         out[15]=(out[15] << 37)|(out[15] >> 27);
2740         out[15]=out[14]^out[15];
2741         out[0]=out[0]+out[9];
2742         out[9]=(out[9] << 38)|(out[9] >> 26);
2743         out[9]=out[0]^out[9];
2744         out[2]=out[2]+out[13];
2745         out[13]=(out[13] << 19)|(out[13] >> 45);
2746         out[13]=out[2]^out[13];
2747         out[6]=out[6]+out[11];
2748         out[11]=(out[11] << 10)|(out[11] >> 54);
2749         out[11]=out[6]^out[11];
2750         out[4]=out[4]+out[15];
2751         out[15]=(out[15] << 55)|(out[15] >> 9);
2752         out[15]=out[4]^out[15];
2753         out[10]=out[10]+out[7];
2754         out[7]=(out[7] << 49)|(out[7] >> 15);
2755         out[7]=out[10]^out[7];
2756         out[12]=out[12]+out[3];
2757         out[3]=(out[3] << 18)|(out[3] >> 46);
2758         out[3]=out[12]^out[3];
2759         out[14]=out[14]+out[5];
2760         out[5]=(out[5] << 23)|(out[5] >> 41);
2761         out[5]=out[14]^out[5];
2762         out[8]=out[8]+out[1];
2763         out[1]=(out[1] << 52)|(out[1] >> 12);
2764         out[1]=out[8]^out[1];
2765         out[0]=out[0]+out[7];
2766         out[7]=(out[7] << 33)|(out[7] >> 31);
2767         out[7]=out[0]^out[7];
2768         out[2]=out[2]+out[5];
2769         out[5]=(out[5] << 4)|(out[5] >> 60);
2770         out[5]=out[2]^out[5];
2771         out[4]=out[4]+out[3];
2772         out[3]=(out[3] << 51)|(out[3] >> 13);
2773         out[3]=out[4]^out[3];
2774         out[6]=out[6]+out[1];
2775         out[1]=(out[1] << 13)|(out[1] >> 51);
2776         out[1]=out[6]^out[1];
2777         out[12]=out[12]+out[15];
2778         out[15]=(out[15] << 34)|(out[15] >> 30);
2779         out[15]=out[12]^out[15];
2780         out[14]=out[14]+out[13];
2781         out[13]=(out[13] << 41)|(out[13] >> 23);
2782         out[13]=out[14]^out[13];
2783         out[8]=out[8]+out[11];
2784         out[11]=(out[11] << 59)|(out[11] >> 5);
2785         out[11]=out[8]^out[11];
2786         out[10]=out[10]+out[9];
2787         out[9]=(out[9] << 17)|(out[9] >> 47);
2788         out[9]=out[10]^out[9];
2789         out[0]=out[0]+out[15];
2790         out[15]=(out[15] << 5)|(out[15] >> 59);
2791         out[15]=out[0]^out[15];
2792         out[2]=out[2]+out[11];
2793         out[11]=(out[11] << 20)|(out[11] >> 44);
2794         out[11]=out[2]^out[11];
2795         out[6]=out[6]+out[13];
2796         out[13]=(out[13] << 48)|(out[13] >> 16);
2797         out[13]=out[6]^out[13];
2798         out[4]=out[4]+out[9];
2799         out[9]=(out[9] << 41)|(out[9] >> 23);
2800         out[9]=out[4]^out[9];
2801         out[14]=out[14]+out[1];
2802         out[1]=(out[1] << 47)|(out[1] >> 17);
2803         out[1]=out[14]^out[1];
2804         out[8]=out[8]+out[5];
2805         out[5]=(out[5] << 28)|(out[5] >> 36);
2806         out[5]=out[8]^out[5];
2807         out[10]=out[10]+out[3];
2808         out[3]=(out[3] << 16)|(out[3] >> 48);
2809         out[3]=out[10]^out[3];
2810         out[12]=out[12]+out[7];
2811         out[7]=(out[7] << 25)|(out[7] >> 39);
2812         out[7]=out[12]^out[7];
2813         out[0]+=key[11];
2814         out[1]+=key[12];
2815         out[2]+=key[13];
2816         out[3]+=key[14];
2817         out[4]+=key[15];
2818         out[5]+=k;
2819         out[6]+=key[0];
2820         out[7]+=key[1];
2821         out[8]+=key[2];
2822         out[9]+=key[3];
2823         out[10]+=key[4];
2824         out[11]+=key[5];
2825         out[12]+=key[6];
2826         out[13]+=key[7]+t;
2827         out[14]+=key[8]+tweak[0];
2828         out[15]+=key[9]+11;
2829         out[0]=out[0]+out[1];
2830         out[1]=(out[1] << 41)|(out[1] >> 23);
2831         out[1]=out[0]^out[1];
2832         out[2]=out[2]+out[3];
2833         out[3]=(out[3] << 9)|(out[3] >> 55);
2834         out[3]=out[2]^out[3];
2835         out[4]=out[4]+out[5];
2836         out[5]=(out[5] << 37)|(out[5] >> 27);
2837         out[5]=out[4]^out[5];
2838         out[6]=out[6]+out[7];
2839         out[7]=(out[7] << 31)|(out[7] >> 33);
2840         out[7]=out[6]^out[7];
2841         out[8]=out[8]+out[9];
2842         out[9]=(out[9] << 12)|(out[9] >> 52);
2843         out[9]=out[8]^out[9];
2844         out[10]=out[10]+out[11];
2845         out[11]=(out[11] << 47)|(out[11] >> 17);
2846         out[11]=out[10]^out[11];
2847         out[12]=out[12]+out[13];
2848         out[13]=(out[13] << 44)|(out[13] >> 20);
2849         out[13]=out[12]^out[13];
2850         out[14]=out[14]+out[15];
2851         out[15]=(out[15] << 30)|(out[15] >> 34);
2852         out[15]=out[14]^out[15];
2853         out[0]=out[0]+out[9];
2854         out[9]=(out[9] << 16)|(out[9] >> 48);
2855         out[9]=out[0]^out[9];
2856         out[2]=out[2]+out[13];
2857         out[13]=(out[13] << 34)|(out[13] >> 30);
2858         out[13]=out[2]^out[13];
2859         out[6]=out[6]+out[11];
2860         out[11]=(out[11] << 56)|(out[11] >> 8);
2861         out[11]=out[6]^out[11];
2862         out[4]=out[4]+out[15];
2863         out[15]=(out[15] << 51)|(out[15] >> 13);
2864         out[15]=out[4]^out[15];
2865         out[10]=out[10]+out[7];
2866         out[7]=(out[7] << 4)|(out[7] >> 60);
2867         out[7]=out[10]^out[7];
2868         out[12]=out[12]+out[3];
2869         out[3]=(out[3] << 53)|(out[3] >> 11);
2870         out[3]=out[12]^out[3];
2871         out[14]=out[14]+out[5];
2872         out[5]=(out[5] << 42)|(out[5] >> 22);
2873         out[5]=out[14]^out[5];
2874         out[8]=out[8]+out[1];
2875         out[1]=(out[1] << 41)|(out[1] >> 23);
2876         out[1]=out[8]^out[1];
2877         out[0]=out[0]+out[7];
2878         out[7]=(out[7] << 31)|(out[7] >> 33);
2879         out[7]=out[0]^out[7];
2880         out[2]=out[2]+out[5];
2881         out[5]=(out[5] << 44)|(out[5] >> 20);
2882         out[5]=out[2]^out[5];
2883         out[4]=out[4]+out[3];
2884         out[3]=(out[3] << 47)|(out[3] >> 17);
2885         out[3]=out[4]^out[3];
2886         out[6]=out[6]+out[1];
2887         out[1]=(out[1] << 46)|(out[1] >> 18);
2888         out[1]=out[6]^out[1];
2889         out[12]=out[12]+out[15];
2890         out[15]=(out[15] << 19)|(out[15] >> 45);
2891         out[15]=out[12]^out[15];
2892         out[14]=out[14]+out[13];
2893         out[13]=(out[13] << 42)|(out[13] >> 22);
2894         out[13]=out[14]^out[13];
2895         out[8]=out[8]+out[11];
2896         out[11]=(out[11] << 44)|(out[11] >> 20);
2897         out[11]=out[8]^out[11];
2898         out[10]=out[10]+out[9];
2899         out[9]=(out[9] << 25)|(out[9] >> 39);
2900         out[9]=out[10]^out[9];
2901         out[0]=out[0]+out[15];
2902         out[15]=(out[15] << 9)|(out[15] >> 55);
2903         out[15]=out[0]^out[15];
2904         out[2]=out[2]+out[11];
2905         out[11]=(out[11] << 48)|(out[11] >> 16);
2906         out[11]=out[2]^out[11];
2907         out[6]=out[6]+out[13];
2908         out[13]=(out[13] << 35)|(out[13] >> 29);
2909         out[13]=out[6]^out[13];
2910         out[4]=out[4]+out[9];
2911         out[9]=(out[9] << 52)|(out[9] >> 12);
2912         out[9]=out[4]^out[9];
2913         out[14]=out[14]+out[1];
2914         out[1]=(out[1] << 23)|(out[1] >> 41);
2915         out[1]=out[14]^out[1];
2916         out[8]=out[8]+out[5];
2917         out[5]=(out[5] << 31)|(out[5] >> 33);
2918         out[5]=out[8]^out[5];
2919         out[10]=out[10]+out[3];
2920         out[3]=(out[3] << 37)|(out[3] >> 27);
2921         out[3]=out[10]^out[3];
2922         out[12]=out[12]+out[7];
2923         out[7]=(out[7] << 20)|(out[7] >> 44);
2924         out[7]=out[12]^out[7];
2925         out[0]+=key[12];
2926         out[1]+=key[13];
2927         out[2]+=key[14];
2928         out[3]+=key[15];
2929         out[4]+=k;
2930         out[5]+=key[0];
2931         out[6]+=key[1];
2932         out[7]+=key[2];
2933         out[8]+=key[3];
2934         out[9]+=key[4];
2935         out[10]+=key[5];
2936         out[11]+=key[6];
2937         out[12]+=key[7];
2938         out[13]+=key[8]+tweak[0];
2939         out[14]+=key[9]+tweak[1];
2940         out[15]+=key[10]+12;
2941         out[0]=out[0]+out[1];
2942         out[1]=(out[1] << 24)|(out[1] >> 40);
2943         out[1]=out[0]^out[1];
2944         out[2]=out[2]+out[3];
2945         out[3]=(out[3] << 13)|(out[3] >> 51);
2946         out[3]=out[2]^out[3];
2947         out[4]=out[4]+out[5];
2948         out[5]=(out[5] << 8)|(out[5] >> 56);
2949         out[5]=out[4]^out[5];
2950         out[6]=out[6]+out[7];
2951         out[7]=(out[7] << 47)|(out[7] >> 17);
2952         out[7]=out[6]^out[7];
2953         out[8]=out[8]+out[9];
2954         out[9]=(out[9] << 8)|(out[9] >> 56);
2955         out[9]=out[8]^out[9];
2956         out[10]=out[10]+out[11];
2957         out[11]=(out[11] << 17)|(out[11] >> 47);
2958         out[11]=out[10]^out[11];
2959         out[12]=out[12]+out[13];
2960         out[13]=(out[13] << 22)|(out[13] >> 42);
2961         out[13]=out[12]^out[13];
2962         out[14]=out[14]+out[15];
2963         out[15]=(out[15] << 37)|(out[15] >> 27);
2964         out[15]=out[14]^out[15];
2965         out[0]=out[0]+out[9];
2966         out[9]=(out[9] << 38)|(out[9] >> 26);
2967         out[9]=out[0]^out[9];
2968         out[2]=out[2]+out[13];
2969         out[13]=(out[13] << 19)|(out[13] >> 45);
2970         out[13]=out[2]^out[13];
2971         out[6]=out[6]+out[11];
2972         out[11]=(out[11] << 10)|(out[11] >> 54);
2973         out[11]=out[6]^out[11];
2974         out[4]=out[4]+out[15];
2975         out[15]=(out[15] << 55)|(out[15] >> 9);
2976         out[15]=out[4]^out[15];
2977         out[10]=out[10]+out[7];
2978         out[7]=(out[7] << 49)|(out[7] >> 15);
2979         out[7]=out[10]^out[7];
2980         out[12]=out[12]+out[3];
2981         out[3]=(out[3] << 18)|(out[3] >> 46);
2982         out[3]=out[12]^out[3];
2983         out[14]=out[14]+out[5];
2984         out[5]=(out[5] << 23)|(out[5] >> 41);
2985         out[5]=out[14]^out[5];
2986         out[8]=out[8]+out[1];
2987         out[1]=(out[1] << 52)|(out[1] >> 12);
2988         out[1]=out[8]^out[1];
2989         out[0]=out[0]+out[7];
2990         out[7]=(out[7] << 33)|(out[7] >> 31);
2991         out[7]=out[0]^out[7];
2992         out[2]=out[2]+out[5];
2993         out[5]=(out[5] << 4)|(out[5] >> 60);
2994         out[5]=out[2]^out[5];
2995         out[4]=out[4]+out[3];
2996         out[3]=(out[3] << 51)|(out[3] >> 13);
2997         out[3]=out[4]^out[3];
2998         out[6]=out[6]+out[1];
2999         out[1]=(out[1] << 13)|(out[1] >> 51);
3000         out[1]=out[6]^out[1];
3001         out[12]=out[12]+out[15];
3002         out[15]=(out[15] << 34)|(out[15] >> 30);
3003         out[15]=out[12]^out[15];
3004         out[14]=out[14]+out[13];
3005         out[13]=(out[13] << 41)|(out[13] >> 23);
3006         out[13]=out[14]^out[13];
3007         out[8]=out[8]+out[11];
3008         out[11]=(out[11] << 59)|(out[11] >> 5);
3009         out[11]=out[8]^out[11];
3010         out[10]=out[10]+out[9];
3011         out[9]=(out[9] << 17)|(out[9] >> 47);
3012         out[9]=out[10]^out[9];
3013         out[0]=out[0]+out[15];
3014         out[15]=(out[15] << 5)|(out[15] >> 59);
3015         out[15]=out[0]^out[15];
3016         out[2]=out[2]+out[11];
3017         out[11]=(out[11] << 20)|(out[11] >> 44);
3018         out[11]=out[2]^out[11];
3019         out[6]=out[6]+out[13];
3020         out[13]=(out[13] << 48)|(out[13] >> 16);
3021         out[13]=out[6]^out[13];
3022         out[4]=out[4]+out[9];
3023         out[9]=(out[9] << 41)|(out[9] >> 23);
3024         out[9]=out[4]^out[9];
3025         out[14]=out[14]+out[1];
3026         out[1]=(out[1] << 47)|(out[1] >> 17);
3027         out[1]=out[14]^out[1];
3028         out[8]=out[8]+out[5];
3029         out[5]=(out[5] << 28)|(out[5] >> 36);
3030         out[5]=out[8]^out[5];
3031         out[10]=out[10]+out[3];
3032         out[3]=(out[3] << 16)|(out[3] >> 48);
3033         out[3]=out[10]^out[3];
3034         out[12]=out[12]+out[7];
3035         out[7]=(out[7] << 25)|(out[7] >> 39);
3036         out[7]=out[12]^out[7];
3037         out[0]+=key[13];
3038         out[1]+=key[14];
3039         out[2]+=key[15];
3040         out[3]+=k;
3041         out[4]+=key[0];
3042         out[5]+=key[1];
3043         out[6]+=key[2];
3044         out[7]+=key[3];
3045         out[8]+=key[4];
3046         out[9]+=key[5];
3047         out[10]+=key[6];
3048         out[11]+=key[7];
3049         out[12]+=key[8];
3050         out[13]+=key[9]+tweak[1];
3051         out[14]+=key[10]+t;
3052         out[15]+=key[11]+13;
3053         out[0]=out[0]+out[1];
3054         out[1]=(out[1] << 41)|(out[1] >> 23);
3055         out[1]=out[0]^out[1];
3056         out[2]=out[2]+out[3];
3057         out[3]=(out[3] << 9)|(out[3] >> 55);
3058         out[3]=out[2]^out[3];
3059         out[4]=out[4]+out[5];
3060         out[5]=(out[5] << 37)|(out[5] >> 27);
3061         out[5]=out[4]^out[5];
3062         out[6]=out[6]+out[7];
3063         out[7]=(out[7] << 31)|(out[7] >> 33);
3064         out[7]=out[6]^out[7];
3065         out[8]=out[8]+out[9];
3066         out[9]=(out[9] << 12)|(out[9] >> 52);
3067         out[9]=out[8]^out[9];
3068         out[10]=out[10]+out[11];
3069         out[11]=(out[11] << 47)|(out[11] >> 17);
3070         out[11]=out[10]^out[11];
3071         out[12]=out[12]+out[13];
3072         out[13]=(out[13] << 44)|(out[13] >> 20);
3073         out[13]=out[12]^out[13];
3074         out[14]=out[14]+out[15];
3075         out[15]=(out[15] << 30)|(out[15] >> 34);
3076         out[15]=out[14]^out[15];
3077         out[0]=out[0]+out[9];
3078         out[9]=(out[9] << 16)|(out[9] >> 48);
3079         out[9]=out[0]^out[9];
3080         out[2]=out[2]+out[13];
3081         out[13]=(out[13] << 34)|(out[13] >> 30);
3082         out[13]=out[2]^out[13];
3083         out[6]=out[6]+out[11];
3084         out[11]=(out[11] << 56)|(out[11] >> 8);
3085         out[11]=out[6]^out[11];
3086         out[4]=out[4]+out[15];
3087         out[15]=(out[15] << 51)|(out[15] >> 13);
3088         out[15]=out[4]^out[15];
3089         out[10]=out[10]+out[7];
3090         out[7]=(out[7] << 4)|(out[7] >> 60);
3091         out[7]=out[10]^out[7];
3092         out[12]=out[12]+out[3];
3093         out[3]=(out[3] << 53)|(out[3] >> 11);
3094         out[3]=out[12]^out[3];
3095         out[14]=out[14]+out[5];
3096         out[5]=(out[5] << 42)|(out[5] >> 22);
3097         out[5]=out[14]^out[5];
3098         out[8]=out[8]+out[1];
3099         out[1]=(out[1] << 41)|(out[1] >> 23);
3100         out[1]=out[8]^out[1];
3101         out[0]=out[0]+out[7];
3102         out[7]=(out[7] << 31)|(out[7] >> 33);
3103         out[7]=out[0]^out[7];
3104         out[2]=out[2]+out[5];
3105         out[5]=(out[5] << 44)|(out[5] >> 20);
3106         out[5]=out[2]^out[5];
3107         out[4]=out[4]+out[3];
3108         out[3]=(out[3] << 47)|(out[3] >> 17);
3109         out[3]=out[4]^out[3];
3110         out[6]=out[6]+out[1];
3111         out[1]=(out[1] << 46)|(out[1] >> 18);
3112         out[1]=out[6]^out[1];
3113         out[12]=out[12]+out[15];
3114         out[15]=(out[15] << 19)|(out[15] >> 45);
3115         out[15]=out[12]^out[15];
3116         out[14]=out[14]+out[13];
3117         out[13]=(out[13] << 42)|(out[13] >> 22);
3118         out[13]=out[14]^out[13];
3119         out[8]=out[8]+out[11];
3120         out[11]=(out[11] << 44)|(out[11] >> 20);
3121         out[11]=out[8]^out[11];
3122         out[10]=out[10]+out[9];
3123         out[9]=(out[9] << 25)|(out[9] >> 39);
3124         out[9]=out[10]^out[9];
3125         out[0]=out[0]+out[15];
3126         out[15]=(out[15] << 9)|(out[15] >> 55);
3127         out[15]=out[0]^out[15];
3128         out[2]=out[2]+out[11];
3129         out[11]=(out[11] << 48)|(out[11] >> 16);
3130         out[11]=out[2]^out[11];
3131         out[6]=out[6]+out[13];
3132         out[13]=(out[13] << 35)|(out[13] >> 29);
3133         out[13]=out[6]^out[13];
3134         out[4]=out[4]+out[9];
3135         out[9]=(out[9] << 52)|(out[9] >> 12);
3136         out[9]=out[4]^out[9];
3137         out[14]=out[14]+out[1];
3138         out[1]=(out[1] << 23)|(out[1] >> 41);
3139         out[1]=out[14]^out[1];
3140         out[8]=out[8]+out[5];
3141         out[5]=(out[5] << 31)|(out[5] >> 33);
3142         out[5]=out[8]^out[5];
3143         out[10]=out[10]+out[3];
3144         out[3]=(out[3] << 37)|(out[3] >> 27);
3145         out[3]=out[10]^out[3];
3146         out[12]=out[12]+out[7];
3147         out[7]=(out[7] << 20)|(out[7] >> 44);
3148         out[7]=out[12]^out[7];
3149         out[0]+=key[14];
3150         out[1]+=key[15];
3151         out[2]+=k;
3152         out[3]+=key[0];
3153         out[4]+=key[1];
3154         out[5]+=key[2];
3155         out[6]+=key[3];
3156         out[7]+=key[4];
3157         out[8]+=key[5];
3158         out[9]+=key[6];
3159         out[10]+=key[7];
3160         out[11]+=key[8];
3161         out[12]+=key[9];
3162         out[13]+=key[10]+t;
3163         out[14]+=key[11]+tweak[0];
3164         out[15]+=key[12]+14;
3165         out[0]=out[0]+out[1];
3166         out[1]=(out[1] << 24)|(out[1] >> 40);
3167         out[1]=out[0]^out[1];
3168         out[2]=out[2]+out[3];
3169         out[3]=(out[3] << 13)|(out[3] >> 51);
3170         out[3]=out[2]^out[3];
3171         out[4]=out[4]+out[5];
3172         out[5]=(out[5] << 8)|(out[5] >> 56);
3173         out[5]=out[4]^out[5];
3174         out[6]=out[6]+out[7];
3175         out[7]=(out[7] << 47)|(out[7] >> 17);
3176         out[7]=out[6]^out[7];
3177         out[8]=out[8]+out[9];
3178         out[9]=(out[9] << 8)|(out[9] >> 56);
3179         out[9]=out[8]^out[9];
3180         out[10]=out[10]+out[11];
3181         out[11]=(out[11] << 17)|(out[11] >> 47);
3182         out[11]=out[10]^out[11];
3183         out[12]=out[12]+out[13];
3184         out[13]=(out[13] << 22)|(out[13] >> 42);
3185         out[13]=out[12]^out[13];
3186         out[14]=out[14]+out[15];
3187         out[15]=(out[15] << 37)|(out[15] >> 27);
3188         out[15]=out[14]^out[15];
3189         out[0]=out[0]+out[9];
3190         out[9]=(out[9] << 38)|(out[9] >> 26);
3191         out[9]=out[0]^out[9];
3192         out[2]=out[2]+out[13];
3193         out[13]=(out[13] << 19)|(out[13] >> 45);
3194         out[13]=out[2]^out[13];
3195         out[6]=out[6]+out[11];
3196         out[11]=(out[11] << 10)|(out[11] >> 54);
3197         out[11]=out[6]^out[11];
3198         out[4]=out[4]+out[15];
3199         out[15]=(out[15] << 55)|(out[15] >> 9);
3200         out[15]=out[4]^out[15];
3201         out[10]=out[10]+out[7];
3202         out[7]=(out[7] << 49)|(out[7] >> 15);
3203         out[7]=out[10]^out[7];
3204         out[12]=out[12]+out[3];
3205         out[3]=(out[3] << 18)|(out[3] >> 46);
3206         out[3]=out[12]^out[3];
3207         out[14]=out[14]+out[5];
3208         out[5]=(out[5] << 23)|(out[5] >> 41);
3209         out[5]=out[14]^out[5];
3210         out[8]=out[8]+out[1];
3211         out[1]=(out[1] << 52)|(out[1] >> 12);
3212         out[1]=out[8]^out[1];
3213         out[0]=out[0]+out[7];
3214         out[7]=(out[7] << 33)|(out[7] >> 31);
3215         out[7]=out[0]^out[7];
3216         out[2]=out[2]+out[5];
3217         out[5]=(out[5] << 4)|(out[5] >> 60);
3218         out[5]=out[2]^out[5];
3219         out[4]=out[4]+out[3];
3220         out[3]=(out[3] << 51)|(out[3] >> 13);
3221         out[3]=out[4]^out[3];
3222         out[6]=out[6]+out[1];
3223         out[1]=(out[1] << 13)|(out[1] >> 51);
3224         out[1]=out[6]^out[1];
3225         out[12]=out[12]+out[15];
3226         out[15]=(out[15] << 34)|(out[15] >> 30);
3227         out[15]=out[12]^out[15];
3228         out[14]=out[14]+out[13];
3229         out[13]=(out[13] << 41)|(out[13] >> 23);
3230         out[13]=out[14]^out[13];
3231         out[8]=out[8]+out[11];
3232         out[11]=(out[11] << 59)|(out[11] >> 5);
3233         out[11]=out[8]^out[11];
3234         out[10]=out[10]+out[9];
3235         out[9]=(out[9] << 17)|(out[9] >> 47);
3236         out[9]=out[10]^out[9];
3237         out[0]=out[0]+out[15];
3238         out[15]=(out[15] << 5)|(out[15] >> 59);
3239         out[15]=out[0]^out[15];
3240         out[2]=out[2]+out[11];
3241         out[11]=(out[11] << 20)|(out[11] >> 44);
3242         out[11]=out[2]^out[11];
3243         out[6]=out[6]+out[13];
3244         out[13]=(out[13] << 48)|(out[13] >> 16);
3245         out[13]=out[6]^out[13];
3246         out[4]=out[4]+out[9];
3247         out[9]=(out[9] << 41)|(out[9] >> 23);
3248         out[9]=out[4]^out[9];
3249         out[14]=out[14]+out[1];
3250         out[1]=(out[1] << 47)|(out[1] >> 17);
3251         out[1]=out[14]^out[1];
3252         out[8]=out[8]+out[5];
3253         out[5]=(out[5] << 28)|(out[5] >> 36);
3254         out[5]=out[8]^out[5];
3255         out[10]=out[10]+out[3];
3256         out[3]=(out[3] << 16)|(out[3] >> 48);
3257         out[3]=out[10]^out[3];
3258         out[12]=out[12]+out[7];
3259         out[7]=(out[7] << 25)|(out[7] >> 39);
3260         out[7]=out[12]^out[7];
3261         out[0]+=key[15];
3262         out[1]+=k;
3263         out[2]+=key[0];
3264         out[3]+=key[1];
3265         out[4]+=key[2];
3266         out[5]+=key[3];
3267         out[6]+=key[4];
3268         out[7]+=key[5];
3269         out[8]+=key[6];
3270         out[9]+=key[7];
3271         out[10]+=key[8];
3272         out[11]+=key[9];
3273         out[12]+=key[10];
3274         out[13]+=key[11]+tweak[0];
3275         out[14]+=key[12]+tweak[1];
3276         out[15]+=key[13]+15;
3277         out[0]=out[0]+out[1];
3278         out[1]=(out[1] << 41)|(out[1] >> 23);
3279         out[1]=out[0]^out[1];
3280         out[2]=out[2]+out[3];
3281         out[3]=(out[3] << 9)|(out[3] >> 55);
3282         out[3]=out[2]^out[3];
3283         out[4]=out[4]+out[5];
3284         out[5]=(out[5] << 37)|(out[5] >> 27);
3285         out[5]=out[4]^out[5];
3286         out[6]=out[6]+out[7];
3287         out[7]=(out[7] << 31)|(out[7] >> 33);
3288         out[7]=out[6]^out[7];
3289         out[8]=out[8]+out[9];
3290         out[9]=(out[9] << 12)|(out[9] >> 52);
3291         out[9]=out[8]^out[9];
3292         out[10]=out[10]+out[11];
3293         out[11]=(out[11] << 47)|(out[11] >> 17);
3294         out[11]=out[10]^out[11];
3295         out[12]=out[12]+out[13];
3296         out[13]=(out[13] << 44)|(out[13] >> 20);
3297         out[13]=out[12]^out[13];
3298         out[14]=out[14]+out[15];
3299         out[15]=(out[15] << 30)|(out[15] >> 34);
3300         out[15]=out[14]^out[15];
3301         out[0]=out[0]+out[9];
3302         out[9]=(out[9] << 16)|(out[9] >> 48);
3303         out[9]=out[0]^out[9];
3304         out[2]=out[2]+out[13];
3305         out[13]=(out[13] << 34)|(out[13] >> 30);
3306         out[13]=out[2]^out[13];
3307         out[6]=out[6]+out[11];
3308         out[11]=(out[11] << 56)|(out[11] >> 8);
3309         out[11]=out[6]^out[11];
3310         out[4]=out[4]+out[15];
3311         out[15]=(out[15] << 51)|(out[15] >> 13);
3312         out[15]=out[4]^out[15];
3313         out[10]=out[10]+out[7];
3314         out[7]=(out[7] << 4)|(out[7] >> 60);
3315         out[7]=out[10]^out[7];
3316         out[12]=out[12]+out[3];
3317         out[3]=(out[3] << 53)|(out[3] >> 11);
3318         out[3]=out[12]^out[3];
3319         out[14]=out[14]+out[5];
3320         out[5]=(out[5] << 42)|(out[5] >> 22);
3321         out[5]=out[14]^out[5];
3322         out[8]=out[8]+out[1];
3323         out[1]=(out[1] << 41)|(out[1] >> 23);
3324         out[1]=out[8]^out[1];
3325         out[0]=out[0]+out[7];
3326         out[7]=(out[7] << 31)|(out[7] >> 33);
3327         out[7]=out[0]^out[7];
3328         out[2]=out[2]+out[5];
3329         out[5]=(out[5] << 44)|(out[5] >> 20);
3330         out[5]=out[2]^out[5];
3331         out[4]=out[4]+out[3];
3332         out[3]=(out[3] << 47)|(out[3] >> 17);
3333         out[3]=out[4]^out[3];
3334         out[6]=out[6]+out[1];
3335         out[1]=(out[1] << 46)|(out[1] >> 18);
3336         out[1]=out[6]^out[1];
3337         out[12]=out[12]+out[15];
3338         out[15]=(out[15] << 19)|(out[15] >> 45);
3339         out[15]=out[12]^out[15];
3340         out[14]=out[14]+out[13];
3341         out[13]=(out[13] << 42)|(out[13] >> 22);
3342         out[13]=out[14]^out[13];
3343         out[8]=out[8]+out[11];
3344         out[11]=(out[11] << 44)|(out[11] >> 20);
3345         out[11]=out[8]^out[11];
3346         out[10]=out[10]+out[9];
3347         out[9]=(out[9] << 25)|(out[9] >> 39);
3348         out[9]=out[10]^out[9];
3349         out[0]=out[0]+out[15];
3350         out[15]=(out[15] << 9)|(out[15] >> 55);
3351         out[15]=out[0]^out[15];
3352         out[2]=out[2]+out[11];
3353         out[11]=(out[11] << 48)|(out[11] >> 16);
3354         out[11]=out[2]^out[11];
3355         out[6]=out[6]+out[13];
3356         out[13]=(out[13] << 35)|(out[13] >> 29);
3357         out[13]=out[6]^out[13];
3358         out[4]=out[4]+out[9];
3359         out[9]=(out[9] << 52)|(out[9] >> 12);
3360         out[9]=out[4]^out[9];
3361         out[14]=out[14]+out[1];
3362         out[1]=(out[1] << 23)|(out[1] >> 41);
3363         out[1]=out[14]^out[1];
3364         out[8]=out[8]+out[5];
3365         out[5]=(out[5] << 31)|(out[5] >> 33);
3366         out[5]=out[8]^out[5];
3367         out[10]=out[10]+out[3];
3368         out[3]=(out[3] << 37)|(out[3] >> 27);
3369         out[3]=out[10]^out[3];
3370         out[12]=out[12]+out[7];
3371         out[7]=(out[7] << 20)|(out[7] >> 44);
3372         out[7]=out[12]^out[7];
3373         out[0]+=k;
3374         out[1]+=key[0];
3375         out[2]+=key[1];
3376         out[3]+=key[2];
3377         out[4]+=key[3];
3378         out[5]+=key[4];
3379         out[6]+=key[5];
3380         out[7]+=key[6];
3381         out[8]+=key[7];
3382         out[9]+=key[8];
3383         out[10]+=key[9];
3384         out[11]+=key[10];
3385         out[12]+=key[11];
3386         out[13]+=key[12]+tweak[1];
3387         out[14]+=key[13]+t;
3388         out[15]+=key[14]+16;
3389         out[0]=out[0]+out[1];
3390         out[1]=(out[1] << 24)|(out[1] >> 40);
3391         out[1]=out[0]^out[1];
3392         out[2]=out[2]+out[3];
3393         out[3]=(out[3] << 13)|(out[3] >> 51);
3394         out[3]=out[2]^out[3];
3395         out[4]=out[4]+out[5];
3396         out[5]=(out[5] << 8)|(out[5] >> 56);
3397         out[5]=out[4]^out[5];
3398         out[6]=out[6]+out[7];
3399         out[7]=(out[7] << 47)|(out[7] >> 17);
3400         out[7]=out[6]^out[7];
3401         out[8]=out[8]+out[9];
3402         out[9]=(out[9] << 8)|(out[9] >> 56);
3403         out[9]=out[8]^out[9];
3404         out[10]=out[10]+out[11];
3405         out[11]=(out[11] << 17)|(out[11] >> 47);
3406         out[11]=out[10]^out[11];
3407         out[12]=out[12]+out[13];
3408         out[13]=(out[13] << 22)|(out[13] >> 42);
3409         out[13]=out[12]^out[13];
3410         out[14]=out[14]+out[15];
3411         out[15]=(out[15] << 37)|(out[15] >> 27);
3412         out[15]=out[14]^out[15];
3413         out[0]=out[0]+out[9];
3414         out[9]=(out[9] << 38)|(out[9] >> 26);
3415         out[9]=out[0]^out[9];
3416         out[2]=out[2]+out[13];
3417         out[13]=(out[13] << 19)|(out[13] >> 45);
3418         out[13]=out[2]^out[13];
3419         out[6]=out[6]+out[11];
3420         out[11]=(out[11] << 10)|(out[11] >> 54);
3421         out[11]=out[6]^out[11];
3422         out[4]=out[4]+out[15];
3423         out[15]=(out[15] << 55)|(out[15] >> 9);
3424         out[15]=out[4]^out[15];
3425         out[10]=out[10]+out[7];
3426         out[7]=(out[7] << 49)|(out[7] >> 15);
3427         out[7]=out[10]^out[7];
3428         out[12]=out[12]+out[3];
3429         out[3]=(out[3] << 18)|(out[3] >> 46);
3430         out[3]=out[12]^out[3];
3431         out[14]=out[14]+out[5];
3432         out[5]=(out[5] << 23)|(out[5] >> 41);
3433         out[5]=out[14]^out[5];
3434         out[8]=out[8]+out[1];
3435         out[1]=(out[1] << 52)|(out[1] >> 12);
3436         out[1]=out[8]^out[1];
3437         out[0]=out[0]+out[7];
3438         out[7]=(out[7] << 33)|(out[7] >> 31);
3439         out[7]=out[0]^out[7];
3440         out[2]=out[2]+out[5];
3441         out[5]=(out[5] << 4)|(out[5] >> 60);
3442         out[5]=out[2]^out[5];
3443         out[4]=out[4]+out[3];
3444         out[3]=(out[3] << 51)|(out[3] >> 13);
3445         out[3]=out[4]^out[3];
3446         out[6]=out[6]+out[1];
3447         out[1]=(out[1] << 13)|(out[1] >> 51);
3448         out[1]=out[6]^out[1];
3449         out[12]=out[12]+out[15];
3450         out[15]=(out[15] << 34)|(out[15] >> 30);
3451         out[15]=out[12]^out[15];
3452         out[14]=out[14]+out[13];
3453         out[13]=(out[13] << 41)|(out[13] >> 23);
3454         out[13]=out[14]^out[13];
3455         out[8]=out[8]+out[11];
3456         out[11]=(out[11] << 59)|(out[11] >> 5);
3457         out[11]=out[8]^out[11];
3458         out[10]=out[10]+out[9];
3459         out[9]=(out[9] << 17)|(out[9] >> 47);
3460         out[9]=out[10]^out[9];
3461         out[0]=out[0]+out[15];
3462         out[15]=(out[15] << 5)|(out[15] >> 59);
3463         out[15]=out[0]^out[15];
3464         out[2]=out[2]+out[11];
3465         out[11]=(out[11] << 20)|(out[11] >> 44);
3466         out[11]=out[2]^out[11];
3467         out[6]=out[6]+out[13];
3468         out[13]=(out[13] << 48)|(out[13] >> 16);
3469         out[13]=out[6]^out[13];
3470         out[4]=out[4]+out[9];
3471         out[9]=(out[9] << 41)|(out[9] >> 23);
3472         out[9]=out[4]^out[9];
3473         out[14]=out[14]+out[1];
3474         out[1]=(out[1] << 47)|(out[1] >> 17);
3475         out[1]=out[14]^out[1];
3476         out[8]=out[8]+out[5];
3477         out[5]=(out[5] << 28)|(out[5] >> 36);
3478         out[5]=out[8]^out[5];
3479         out[10]=out[10]+out[3];
3480         out[3]=(out[3] << 16)|(out[3] >> 48);
3481         out[3]=out[10]^out[3];
3482         out[12]=out[12]+out[7];
3483         out[7]=(out[7] << 25)|(out[7] >> 39);
3484         out[7]=out[12]^out[7];
3485         out[0]+=key[0];
3486         out[1]+=key[1];
3487         out[2]+=key[2];
3488         out[3]+=key[3];
3489         out[4]+=key[4];
3490         out[5]+=key[5];
3491         out[6]+=key[6];
3492         out[7]+=key[7];
3493         out[8]+=key[8];
3494         out[9]+=key[9];
3495         out[10]+=key[10];
3496         out[11]+=key[11];
3497         out[12]+=key[12];
3498         out[13]+=key[13]+t;
3499         out[14]+=key[14]+tweak[0];
3500         out[15]+=key[15]+17;
3501         out[0]=out[0]+out[1];
3502         out[1]=(out[1] << 41)|(out[1] >> 23);
3503         out[1]=out[0]^out[1];
3504         out[2]=out[2]+out[3];
3505         out[3]=(out[3] << 9)|(out[3] >> 55);
3506         out[3]=out[2]^out[3];
3507         out[4]=out[4]+out[5];
3508         out[5]=(out[5] << 37)|(out[5] >> 27);
3509         out[5]=out[4]^out[5];
3510         out[6]=out[6]+out[7];
3511         out[7]=(out[7] << 31)|(out[7] >> 33);
3512         out[7]=out[6]^out[7];
3513         out[8]=out[8]+out[9];
3514         out[9]=(out[9] << 12)|(out[9] >> 52);
3515         out[9]=out[8]^out[9];
3516         out[10]=out[10]+out[11];
3517         out[11]=(out[11] << 47)|(out[11] >> 17);
3518         out[11]=out[10]^out[11];
3519         out[12]=out[12]+out[13];
3520         out[13]=(out[13] << 44)|(out[13] >> 20);
3521         out[13]=out[12]^out[13];
3522         out[14]=out[14]+out[15];
3523         out[15]=(out[15] << 30)|(out[15] >> 34);
3524         out[15]=out[14]^out[15];
3525         out[0]=out[0]+out[9];
3526         out[9]=(out[9] << 16)|(out[9] >> 48);
3527         out[9]=out[0]^out[9];
3528         out[2]=out[2]+out[13];
3529         out[13]=(out[13] << 34)|(out[13] >> 30);
3530         out[13]=out[2]^out[13];
3531         out[6]=out[6]+out[11];
3532         out[11]=(out[11] << 56)|(out[11] >> 8);
3533         out[11]=out[6]^out[11];
3534         out[4]=out[4]+out[15];
3535         out[15]=(out[15] << 51)|(out[15] >> 13);
3536         out[15]=out[4]^out[15];
3537         out[10]=out[10]+out[7];
3538         out[7]=(out[7] << 4)|(out[7] >> 60);
3539         out[7]=out[10]^out[7];
3540         out[12]=out[12]+out[3];
3541         out[3]=(out[3] << 53)|(out[3] >> 11);
3542         out[3]=out[12]^out[3];
3543         out[14]=out[14]+out[5];
3544         out[5]=(out[5] << 42)|(out[5] >> 22);
3545         out[5]=out[14]^out[5];
3546         out[8]=out[8]+out[1];
3547         out[1]=(out[1] << 41)|(out[1] >> 23);
3548         out[1]=out[8]^out[1];
3549         out[0]=out[0]+out[7];
3550         out[7]=(out[7] << 31)|(out[7] >> 33);
3551         out[7]=out[0]^out[7];
3552         out[2]=out[2]+out[5];
3553         out[5]=(out[5] << 44)|(out[5] >> 20);
3554         out[5]=out[2]^out[5];
3555         out[4]=out[4]+out[3];
3556         out[3]=(out[3] << 47)|(out[3] >> 17);
3557         out[3]=out[4]^out[3];
3558         out[6]=out[6]+out[1];
3559         out[1]=(out[1] << 46)|(out[1] >> 18);
3560         out[1]=out[6]^out[1];
3561         out[12]=out[12]+out[15];
3562         out[15]=(out[15] << 19)|(out[15] >> 45);
3563         out[15]=out[12]^out[15];
3564         out[14]=out[14]+out[13];
3565         out[13]=(out[13] << 42)|(out[13] >> 22);
3566         out[13]=out[14]^out[13];
3567         out[8]=out[8]+out[11];
3568         out[11]=(out[11] << 44)|(out[11] >> 20);
3569         out[11]=out[8]^out[11];
3570         out[10]=out[10]+out[9];
3571         out[9]=(out[9] << 25)|(out[9] >> 39);
3572         out[9]=out[10]^out[9];
3573         out[0]=out[0]+out[15];
3574         out[15]=(out[15] << 9)|(out[15] >> 55);
3575         out[15]=out[0]^out[15];
3576         out[2]=out[2]+out[11];
3577         out[11]=(out[11] << 48)|(out[11] >> 16);
3578         out[11]=out[2]^out[11];
3579         out[6]=out[6]+out[13];
3580         out[13]=(out[13] << 35)|(out[13] >> 29);
3581         out[13]=out[6]^out[13];
3582         out[4]=out[4]+out[9];
3583         out[9]=(out[9] << 52)|(out[9] >> 12);
3584         out[9]=out[4]^out[9];
3585         out[14]=out[14]+out[1];
3586         out[1]=(out[1] << 23)|(out[1] >> 41);
3587         out[1]=out[14]^out[1];
3588         out[8]=out[8]+out[5];
3589         out[5]=(out[5] << 31)|(out[5] >> 33);
3590         out[5]=out[8]^out[5];
3591         out[10]=out[10]+out[3];
3592         out[3]=(out[3] << 37)|(out[3] >> 27);
3593         out[3]=out[10]^out[3];
3594         out[12]=out[12]+out[7];
3595         out[7]=(out[7] << 20)|(out[7] >> 44);
3596         out[7]=out[12]^out[7];
3597         out[0]+=key[1];
3598         out[1]+=key[2];
3599         out[2]+=key[3];
3600         out[3]+=key[4];
3601         out[4]+=key[5];
3602         out[5]+=key[6];
3603         out[6]+=key[7];
3604         out[7]+=key[8];
3605         out[8]+=key[9];
3606         out[9]+=key[10];
3607         out[10]+=key[11];
3608         out[11]+=key[12];
3609         out[12]+=key[13];
3610         out[13]+=key[14]+tweak[0];
3611         out[14]+=key[15]+tweak[1];
3612         out[15]+=k+18;
3613         out[0]=out[0]+out[1];
3614         out[1]=(out[1] << 24)|(out[1] >> 40);
3615         out[1]=out[0]^out[1];
3616         out[2]=out[2]+out[3];
3617         out[3]=(out[3] << 13)|(out[3] >> 51);
3618         out[3]=out[2]^out[3];
3619         out[4]=out[4]+out[5];
3620         out[5]=(out[5] << 8)|(out[5] >> 56);
3621         out[5]=out[4]^out[5];
3622         out[6]=out[6]+out[7];
3623         out[7]=(out[7] << 47)|(out[7] >> 17);
3624         out[7]=out[6]^out[7];
3625         out[8]=out[8]+out[9];
3626         out[9]=(out[9] << 8)|(out[9] >> 56);
3627         out[9]=out[8]^out[9];
3628         out[10]=out[10]+out[11];
3629         out[11]=(out[11] << 17)|(out[11] >> 47);
3630         out[11]=out[10]^out[11];
3631         out[12]=out[12]+out[13];
3632         out[13]=(out[13] << 22)|(out[13] >> 42);
3633         out[13]=out[12]^out[13];
3634         out[14]=out[14]+out[15];
3635         out[15]=(out[15] << 37)|(out[15] >> 27);
3636         out[15]=out[14]^out[15];
3637         out[0]=out[0]+out[9];
3638         out[9]=(out[9] << 38)|(out[9] >> 26);
3639         out[9]=out[0]^out[9];
3640         out[2]=out[2]+out[13];
3641         out[13]=(out[13] << 19)|(out[13] >> 45);
3642         out[13]=out[2]^out[13];
3643         out[6]=out[6]+out[11];
3644         out[11]=(out[11] << 10)|(out[11] >> 54);
3645         out[11]=out[6]^out[11];
3646         out[4]=out[4]+out[15];
3647         out[15]=(out[15] << 55)|(out[15] >> 9);
3648         out[15]=out[4]^out[15];
3649         out[10]=out[10]+out[7];
3650         out[7]=(out[7] << 49)|(out[7] >> 15);
3651         out[7]=out[10]^out[7];
3652         out[12]=out[12]+out[3];
3653         out[3]=(out[3] << 18)|(out[3] >> 46);
3654         out[3]=out[12]^out[3];
3655         out[14]=out[14]+out[5];
3656         out[5]=(out[5] << 23)|(out[5] >> 41);
3657         out[5]=out[14]^out[5];
3658         out[8]=out[8]+out[1];
3659         out[1]=(out[1] << 52)|(out[1] >> 12);
3660         out[1]=out[8]^out[1];
3661         out[0]=out[0]+out[7];
3662         out[7]=(out[7] << 33)|(out[7] >> 31);
3663         out[7]=out[0]^out[7];
3664         out[2]=out[2]+out[5];
3665         out[5]=(out[5] << 4)|(out[5] >> 60);
3666         out[5]=out[2]^out[5];
3667         out[4]=out[4]+out[3];
3668         out[3]=(out[3] << 51)|(out[3] >> 13);
3669         out[3]=out[4]^out[3];
3670         out[6]=out[6]+out[1];
3671         out[1]=(out[1] << 13)|(out[1] >> 51);
3672         out[1]=out[6]^out[1];
3673         out[12]=out[12]+out[15];
3674         out[15]=(out[15] << 34)|(out[15] >> 30);
3675         out[15]=out[12]^out[15];
3676         out[14]=out[14]+out[13];
3677         out[13]=(out[13] << 41)|(out[13] >> 23);
3678         out[13]=out[14]^out[13];
3679         out[8]=out[8]+out[11];
3680         out[11]=(out[11] << 59)|(out[11] >> 5);
3681         out[11]=out[8]^out[11];
3682         out[10]=out[10]+out[9];
3683         out[9]=(out[9] << 17)|(out[9] >> 47);
3684         out[9]=out[10]^out[9];
3685         out[0]=out[0]+out[15];
3686         out[15]=(out[15] << 5)|(out[15] >> 59);
3687         out[15]=out[0]^out[15];
3688         out[2]=out[2]+out[11];
3689         out[11]=(out[11] << 20)|(out[11] >> 44);
3690         out[11]=out[2]^out[11];
3691         out[6]=out[6]+out[13];
3692         out[13]=(out[13] << 48)|(out[13] >> 16);
3693         out[13]=out[6]^out[13];
3694         out[4]=out[4]+out[9];
3695         out[9]=(out[9] << 41)|(out[9] >> 23);
3696         out[9]=out[4]^out[9];
3697         out[14]=out[14]+out[1];
3698         out[1]=(out[1] << 47)|(out[1] >> 17);
3699         out[1]=out[14]^out[1];
3700         out[8]=out[8]+out[5];
3701         out[5]=(out[5] << 28)|(out[5] >> 36);
3702         out[5]=out[8]^out[5];
3703         out[10]=out[10]+out[3];
3704         out[3]=(out[3] << 16)|(out[3] >> 48);
3705         out[3]=out[10]^out[3];
3706         out[12]=out[12]+out[7];
3707         out[7]=(out[7] << 25)|(out[7] >> 39);
3708         out[7]=out[12]^out[7];
3709         out[0]+=key[2];
3710         out[1]+=key[3];
3711         out[2]+=key[4];
3712         out[3]+=key[5];
3713         out[4]+=key[6];
3714         out[5]+=key[7];
3715         out[6]+=key[8];
3716         out[7]+=key[9];
3717         out[8]+=key[10];
3718         out[9]+=key[11];
3719         out[10]+=key[12];
3720         out[11]+=key[13];
3721         out[12]+=key[14];
3722         out[13]+=key[15]+tweak[1];
3723         out[14]+=k+t;
3724         out[15]+=key[0]+19;
3725         out[0]=out[0]+out[1];
3726         out[1]=(out[1] << 41)|(out[1] >> 23);
3727         out[1]=out[0]^out[1];
3728         out[2]=out[2]+out[3];
3729         out[3]=(out[3] << 9)|(out[3] >> 55);
3730         out[3]=out[2]^out[3];
3731         out[4]=out[4]+out[5];
3732         out[5]=(out[5] << 37)|(out[5] >> 27);
3733         out[5]=out[4]^out[5];
3734         out[6]=out[6]+out[7];
3735         out[7]=(out[7] << 31)|(out[7] >> 33);
3736         out[7]=out[6]^out[7];
3737         out[8]=out[8]+out[9];
3738         out[9]=(out[9] << 12)|(out[9] >> 52);
3739         out[9]=out[8]^out[9];
3740         out[10]=out[10]+out[11];
3741         out[11]=(out[11] << 47)|(out[11] >> 17);
3742         out[11]=out[10]^out[11];
3743         out[12]=out[12]+out[13];
3744         out[13]=(out[13] << 44)|(out[13] >> 20);
3745         out[13]=out[12]^out[13];
3746         out[14]=out[14]+out[15];
3747         out[15]=(out[15] << 30)|(out[15] >> 34);
3748         out[15]=out[14]^out[15];
3749         out[0]=out[0]+out[9];
3750         out[9]=(out[9] << 16)|(out[9] >> 48);
3751         out[9]=out[0]^out[9];
3752         out[2]=out[2]+out[13];
3753         out[13]=(out[13] << 34)|(out[13] >> 30);
3754         out[13]=out[2]^out[13];
3755         out[6]=out[6]+out[11];
3756         out[11]=(out[11] << 56)|(out[11] >> 8);
3757         out[11]=out[6]^out[11];
3758         out[4]=out[4]+out[15];
3759         out[15]=(out[15] << 51)|(out[15] >> 13);
3760         out[15]=out[4]^out[15];
3761         out[10]=out[10]+out[7];
3762         out[7]=(out[7] << 4)|(out[7] >> 60);
3763         out[7]=out[10]^out[7];
3764         out[12]=out[12]+out[3];
3765         out[3]=(out[3] << 53)|(out[3] >> 11);
3766         out[3]=out[12]^out[3];
3767         out[14]=out[14]+out[5];
3768         out[5]=(out[5] << 42)|(out[5] >> 22);
3769         out[5]=out[14]^out[5];
3770         out[8]=out[8]+out[1];
3771         out[1]=(out[1] << 41)|(out[1] >> 23);
3772         out[1]=out[8]^out[1];
3773         out[0]=out[0]+out[7];
3774         out[7]=(out[7] << 31)|(out[7] >> 33);
3775         out[7]=out[0]^out[7];
3776         out[2]=out[2]+out[5];
3777         out[5]=(out[5] << 44)|(out[5] >> 20);
3778         out[5]=out[2]^out[5];
3779         out[4]=out[4]+out[3];
3780         out[3]=(out[3] << 47)|(out[3] >> 17);
3781         out[3]=out[4]^out[3];
3782         out[6]=out[6]+out[1];
3783         out[1]=(out[1] << 46)|(out[1] >> 18);
3784         out[1]=out[6]^out[1];
3785         out[12]=out[12]+out[15];
3786         out[15]=(out[15] << 19)|(out[15] >> 45);
3787         out[15]=out[12]^out[15];
3788         out[14]=out[14]+out[13];
3789         out[13]=(out[13] << 42)|(out[13] >> 22);
3790         out[13]=out[14]^out[13];
3791         out[8]=out[8]+out[11];
3792         out[11]=(out[11] << 44)|(out[11] >> 20);
3793         out[11]=out[8]^out[11];
3794         out[10]=out[10]+out[9];
3795         out[9]=(out[9] << 25)|(out[9] >> 39);
3796         out[9]=out[10]^out[9];
3797         out[0]=out[0]+out[15];
3798         out[15]=(out[15] << 9)|(out[15] >> 55);
3799         out[15]=out[0]^out[15];
3800         out[2]=out[2]+out[11];
3801         out[11]=(out[11] << 48)|(out[11] >> 16);
3802         out[11]=out[2]^out[11];
3803         out[6]=out[6]+out[13];
3804         out[13]=(out[13] << 35)|(out[13] >> 29);
3805         out[13]=out[6]^out[13];
3806         out[4]=out[4]+out[9];
3807         out[9]=(out[9] << 52)|(out[9] >> 12);
3808         out[9]=out[4]^out[9];
3809         out[14]=out[14]+out[1];
3810         out[1]=(out[1] << 23)|(out[1] >> 41);
3811         out[1]=out[14]^out[1];
3812         out[8]=out[8]+out[5];
3813         out[5]=(out[5] << 31)|(out[5] >> 33);
3814         out[5]=out[8]^out[5];
3815         out[10]=out[10]+out[3];
3816         out[3]=(out[3] << 37)|(out[3] >> 27);
3817         out[3]=out[10]^out[3];
3818         out[12]=out[12]+out[7];
3819         out[7]=(out[7] << 20)|(out[7] >> 44);
3820         out[7]=out[12]^out[7];
3821         out[0]+=key[3];
3822         out[1]+=key[4];
3823         out[2]+=key[5];
3824         out[3]+=key[6];
3825         out[4]+=key[7];
3826         out[5]+=key[8];
3827         out[6]+=key[9];
3828         out[7]+=key[10];
3829         out[8]+=key[11];
3830         out[9]+=key[12];
3831         out[10]+=key[13];
3832         out[11]+=key[14];
3833         out[12]+=key[15];
3834         out[13]+=k+t;
3835         out[14]+=key[0]+tweak[0];
3836         out[15]+=key[1]+20;
3837         out[0]=in[0]^out[0];
3838         out[1]=in[1]^out[1];
3839         out[2]=in[2]^out[2];
3840         out[3]=in[3]^out[3];
3841         out[4]=in[4]^out[4];
3842         out[5]=in[5]^out[5];
3843         out[6]=in[6]^out[6];
3844         out[7]=in[7]^out[7];
3845         out[8]=in[8]^out[8];
3846         out[9]=in[9]^out[9];
3847         out[10]=in[10]^out[10];
3848         out[11]=in[11]^out[11];
3849         out[12]=in[12]^out[12];
3850         out[13]=in[13]^out[13];
3851         out[14]=in[14]^out[14];
3852         out[15]=in[15]^out[15];
3853         out[16]=in[16]^out[16];