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