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