blob: a95563fad071c68fd21a28038c0d6dc1c05b4a54 [file] [log] [blame]
Joe Perchese0a2d502016-03-10 03:43:22 -08001#include <linux/bitops.h>
Jake Edge0109ce72014-05-20 07:58:40 -06002#include "threefish_api.h"
3
4void threefish_encrypt_256(struct threefish_key *key_ctx, u64 *input,
5 u64 *output)
6{
7 u64 b0 = input[0], b1 = input[1],
8 b2 = input[2], b3 = input[3];
9 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
10 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
11 k4 = key_ctx->key[4];
12 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
13 t2 = key_ctx->tweak[2];
14
15 b1 += k1 + t0;
16 b0 += b1 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -080017 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060018
19 b3 += k3;
20 b2 += b3 + k2 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -080021 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060022
23 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080024 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060025
26 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080027 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060028
29 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080030 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060031
32 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080033 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060034
35 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080036 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060037
38 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080039 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060040
41 b1 += k2 + t1;
42 b0 += b1 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -080043 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060044
45 b3 += k4 + 1;
46 b2 += b3 + k3 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -080047 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060048
49 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080050 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060051
52 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080053 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060054
55 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080056 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060057
58 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080059 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060060
61 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080062 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060063
64 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080065 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060066
67
68 b1 += k3 + t2;
69 b0 += b1 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -080070 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060071
72 b3 += k0 + 2;
73 b2 += b3 + k4 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -080074 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060075
76 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080077 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060078
79 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080080 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060081
82 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080083 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060084
85 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080086 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060087
88 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -080089 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060090
91 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -080092 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -060093
94 b1 += k4 + t0;
95 b0 += b1 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -080096 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -060097
98 b3 += k1 + 3;
99 b2 += b3 + k0 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800100 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600101
102 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800103 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600104
105 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800106 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600107
108 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800109 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600110
111 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800112 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600113
114 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800115 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600116
117 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800118 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600119
120
121 b1 += k0 + t1;
122 b0 += b1 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -0800123 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600124
125 b3 += k2 + 4;
126 b2 += b3 + k1 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -0800127 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600128
129 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800130 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600131
132 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800133 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600134
135 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800136 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600137
138 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800139 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600140
141 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800142 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600143
144 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800145 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600146
147 b1 += k1 + t2;
148 b0 += b1 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -0800149 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600150
151 b3 += k3 + 5;
152 b2 += b3 + k2 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -0800153 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600154
155 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800156 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600157
158 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800159 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600160
161 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800162 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600163
164 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800165 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600166
167 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800168 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600169
170 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800171 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600172
173
174 b1 += k2 + t0;
175 b0 += b1 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800176 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600177
178 b3 += k4 + 6;
179 b2 += b3 + k3 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800180 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600181
182 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800183 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600184
185 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800186 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600187
188 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800189 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600190
191 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800192 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600193
194 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800195 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600196
197 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800198 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600199
200 b1 += k3 + t1;
201 b0 += b1 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -0800202 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600203
204 b3 += k0 + 7;
205 b2 += b3 + k4 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -0800206 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600207
208 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800209 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600210
211 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800212 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600213
214 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800215 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600216
217 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800218 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600219
220 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800221 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600222
223 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800224 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600225
226
227 b1 += k4 + t2;
228 b0 += b1 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800229 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600230
231 b3 += k1 + 8;
232 b2 += b3 + k0 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -0800233 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600234
235 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800236 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600237
238 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800239 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600240
241 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800242 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600243
244 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800245 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600246
247 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800248 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600249
250 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800251 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600252
253 b1 += k0 + t0;
254 b0 += b1 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -0800255 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600256
257 b3 += k2 + 9;
258 b2 += b3 + k1 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800259 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600260
261 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800262 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600263
264 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800265 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600266
267 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800268 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600269
270 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800271 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600272
273 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800274 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600275
276 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800277 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600278
279
280 b1 += k1 + t1;
281 b0 += b1 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -0800282 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600283
284 b3 += k3 + 10;
285 b2 += b3 + k2 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -0800286 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600287
288 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800289 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600290
291 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800292 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600293
294 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800295 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600296
297 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800298 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600299
300 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800301 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600302
303 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800304 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600305
306 b1 += k2 + t2;
307 b0 += b1 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800308 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600309
310 b3 += k4 + 11;
311 b2 += b3 + k3 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -0800312 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600313
314 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800315 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600316
317 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800318 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600319
320 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800321 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600322
323 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800324 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600325
326 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800327 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600328
329 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800330 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600331
332
333 b1 += k3 + t0;
334 b0 += b1 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -0800335 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600336
337 b3 += k0 + 12;
338 b2 += b3 + k4 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800339 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600340
341 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800342 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600343
344 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800345 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600346
347 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800348 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600349
350 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800351 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600352
353 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800354 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600355
356 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800357 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600358
359 b1 += k4 + t1;
360 b0 += b1 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800361 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600362
363 b3 += k1 + 13;
364 b2 += b3 + k0 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -0800365 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600366
367 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800368 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600369
370 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800371 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600372
373 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800374 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600375
376 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800377 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600378
379 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800380 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600381
382 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800383 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600384
385
386 b1 += k0 + t2;
387 b0 += b1 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -0800388 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600389
390 b3 += k2 + 14;
391 b2 += b3 + k1 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -0800392 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600393
394 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800395 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600396
397 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800398 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600399
400 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800401 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600402
403 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800404 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600405
406 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800407 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600408
409 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800410 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600411
412 b1 += k1 + t0;
413 b0 += b1 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -0800414 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600415
416 b3 += k3 + 15;
417 b2 += b3 + k2 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800418 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600419
420 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800421 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600422
423 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800424 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600425
426 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800427 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600428
429 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800430 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600431
432 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800433 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600434
435 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800436 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600437
438
439 b1 += k2 + t1;
440 b0 += b1 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800441 b1 = rol64(b1, 14) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600442
443 b3 += k4 + 16;
444 b2 += b3 + k3 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -0800445 b3 = rol64(b3, 16) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600446
447 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800448 b3 = rol64(b3, 52) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600449
450 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800451 b1 = rol64(b1, 57) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600452
453 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800454 b1 = rol64(b1, 23) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600455
456 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800457 b3 = rol64(b3, 40) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600458
459 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800460 b3 = rol64(b3, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600461
462 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800463 b1 = rol64(b1, 37) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600464
465 b1 += k3 + t2;
466 b0 += b1 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -0800467 b1 = rol64(b1, 25) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600468
469 b3 += k0 + 17;
470 b2 += b3 + k4 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -0800471 b3 = rol64(b3, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600472
473 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800474 b3 = rol64(b3, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600475
476 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800477 b1 = rol64(b1, 12) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600478
479 b0 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800480 b1 = rol64(b1, 58) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600481
482 b2 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800483 b3 = rol64(b3, 22) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600484
485 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -0800486 b3 = rol64(b3, 32) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -0600487
488 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -0800489 b1 = rol64(b1, 32) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -0600490
491 output[0] = b0 + k3;
492 output[1] = b1 + k4 + t0;
493 output[2] = b2 + k0 + t1;
494 output[3] = b3 + k1 + 18;
495}
496
497void threefish_decrypt_256(struct threefish_key *key_ctx, u64 *input,
498 u64 *output)
499{
500 u64 b0 = input[0], b1 = input[1],
501 b2 = input[2], b3 = input[3];
502 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
503 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
504 k4 = key_ctx->key[4];
505 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
506 t2 = key_ctx->tweak[2];
507
508 u64 tmp;
509
510 b0 -= k3;
511 b1 -= k4 + t0;
512 b2 -= k0 + t1;
513 b3 -= k1 + 18;
514 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700515 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600516 b0 -= b3;
517
518 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700519 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600520 b2 -= b1;
521
522 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700523 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -0600524 b0 -= b1;
525
526 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700527 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -0600528 b2 -= b3;
529
530 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700531 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -0600532 b0 -= b3;
533
534 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700535 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -0600536 b2 -= b1;
537
538 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700539 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -0600540 b0 -= b1 + k2;
541 b1 -= k3 + t2;
542
543 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700544 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -0600545 b2 -= b3 + k4 + t0;
546 b3 -= k0 + 17;
547
548 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700549 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -0600550 b0 -= b3;
551
552 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700553 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -0600554 b2 -= b1;
555
556 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700557 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -0600558 b0 -= b1;
559
560 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700561 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -0600562 b2 -= b3;
563
564 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700565 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -0600566 b0 -= b3;
567
568 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700569 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -0600570 b2 -= b1;
571
572 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700573 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -0600574 b0 -= b1 + k1;
575 b1 -= k2 + t1;
576
577 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700578 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -0600579 b2 -= b3 + k3 + t2;
580 b3 -= k4 + 16;
581
582
583 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700584 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600585 b0 -= b3;
586
587 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700588 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600589 b2 -= b1;
590
591 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700592 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -0600593 b0 -= b1;
594
595 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700596 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -0600597 b2 -= b3;
598
599 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700600 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -0600601 b0 -= b3;
602
603 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700604 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -0600605 b2 -= b1;
606
607 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700608 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -0600609 b0 -= b1 + k0;
610 b1 -= k1 + t0;
611
612 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700613 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -0600614 b2 -= b3 + k2 + t1;
615 b3 -= k3 + 15;
616
617 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700618 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -0600619 b0 -= b3;
620
621 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700622 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -0600623 b2 -= b1;
624
625 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700626 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -0600627 b0 -= b1;
628
629 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700630 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -0600631 b2 -= b3;
632
633 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700634 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -0600635 b0 -= b3;
636
637 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700638 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -0600639 b2 -= b1;
640
641 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700642 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -0600643 b0 -= b1 + k4;
644 b1 -= k0 + t2;
645
646 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700647 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -0600648 b2 -= b3 + k1 + t0;
649 b3 -= k2 + 14;
650
651
652 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700653 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600654 b0 -= b3;
655
656 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700657 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600658 b2 -= b1;
659
660 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700661 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -0600662 b0 -= b1;
663
664 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700665 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -0600666 b2 -= b3;
667
668 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700669 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -0600670 b0 -= b3;
671
672 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700673 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -0600674 b2 -= b1;
675
676 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700677 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -0600678 b0 -= b1 + k3;
679 b1 -= k4 + t1;
680
681 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700682 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -0600683 b2 -= b3 + k0 + t2;
684 b3 -= k1 + 13;
685
686 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700687 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -0600688 b0 -= b3;
689
690 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700691 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -0600692 b2 -= b1;
693
694 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700695 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -0600696 b0 -= b1;
697
698 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700699 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -0600700 b2 -= b3;
701
702 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700703 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -0600704 b0 -= b3;
705
706 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700707 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -0600708 b2 -= b1;
709
710 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700711 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -0600712 b0 -= b1 + k2;
713 b1 -= k3 + t0;
714
715 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700716 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -0600717 b2 -= b3 + k4 + t1;
718 b3 -= k0 + 12;
719
720
721 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700722 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600723 b0 -= b3;
724
725 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700726 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600727 b2 -= b1;
728
729 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700730 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -0600731 b0 -= b1;
732
733 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700734 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -0600735 b2 -= b3;
736
737 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700738 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -0600739 b0 -= b3;
740
741 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700742 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -0600743 b2 -= b1;
744
745 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700746 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -0600747 b0 -= b1 + k1;
748 b1 -= k2 + t2;
749
750 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700751 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -0600752 b2 -= b3 + k3 + t0;
753 b3 -= k4 + 11;
754
755 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700756 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -0600757 b0 -= b3;
758
759 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700760 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -0600761 b2 -= b1;
762
763 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700764 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -0600765 b0 -= b1;
766
767 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700768 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -0600769 b2 -= b3;
770
771 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700772 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -0600773 b0 -= b3;
774
775 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700776 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -0600777 b2 -= b1;
778
779 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700780 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -0600781 b0 -= b1 + k0;
782 b1 -= k1 + t1;
783
784 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700785 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -0600786 b2 -= b3 + k2 + t2;
787 b3 -= k3 + 10;
788
789
790 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700791 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600792 b0 -= b3;
793
794 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700795 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600796 b2 -= b1;
797
798 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700799 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -0600800 b0 -= b1;
801
802 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700803 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -0600804 b2 -= b3;
805
806 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700807 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -0600808 b0 -= b3;
809
810 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700811 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -0600812 b2 -= b1;
813
814 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700815 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -0600816 b0 -= b1 + k4;
817 b1 -= k0 + t0;
818
819 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700820 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -0600821 b2 -= b3 + k1 + t1;
822 b3 -= k2 + 9;
823
824 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700825 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -0600826 b0 -= b3;
827
828 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700829 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -0600830 b2 -= b1;
831
832 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700833 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -0600834 b0 -= b1;
835
836 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700837 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -0600838 b2 -= b3;
839
840 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700841 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -0600842 b0 -= b3;
843
844 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700845 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -0600846 b2 -= b1;
847
848 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700849 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -0600850 b0 -= b1 + k3;
851 b1 -= k4 + t2;
852
853 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700854 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -0600855 b2 -= b3 + k0 + t0;
856 b3 -= k1 + 8;
857
858
859 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700860 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600861 b0 -= b3;
862
863 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700864 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600865 b2 -= b1;
866
867 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700868 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -0600869 b0 -= b1;
870
871 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700872 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -0600873 b2 -= b3;
874
875 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700876 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -0600877 b0 -= b3;
878
879 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700880 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -0600881 b2 -= b1;
882
883 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700884 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -0600885 b0 -= b1 + k2;
886 b1 -= k3 + t1;
887
888 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700889 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -0600890 b2 -= b3 + k4 + t2;
891 b3 -= k0 + 7;
892
893 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700894 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -0600895 b0 -= b3;
896
897 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700898 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -0600899 b2 -= b1;
900
901 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700902 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -0600903 b0 -= b1;
904
905 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700906 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -0600907 b2 -= b3;
908
909 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700910 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -0600911 b0 -= b3;
912
913 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700914 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -0600915 b2 -= b1;
916
917 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700918 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -0600919 b0 -= b1 + k1;
920 b1 -= k2 + t0;
921
922 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700923 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -0600924 b2 -= b3 + k3 + t1;
925 b3 -= k4 + 6;
926
927
928 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700929 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600930 b0 -= b3;
931
932 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700933 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600934 b2 -= b1;
935
936 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700937 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -0600938 b0 -= b1;
939
940 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700941 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -0600942 b2 -= b3;
943
944 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700945 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -0600946 b0 -= b3;
947
948 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700949 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -0600950 b2 -= b1;
951
952 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700953 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -0600954 b0 -= b1 + k0;
955 b1 -= k1 + t2;
956
957 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700958 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -0600959 b2 -= b3 + k2 + t0;
960 b3 -= k3 + 5;
961
962 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700963 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -0600964 b0 -= b3;
965
966 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700967 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -0600968 b2 -= b1;
969
970 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700971 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -0600972 b0 -= b1;
973
974 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700975 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -0600976 b2 -= b3;
977
978 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700979 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -0600980 b0 -= b3;
981
982 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700983 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -0600984 b2 -= b1;
985
986 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700987 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -0600988 b0 -= b1 + k4;
989 b1 -= k0 + t1;
990
991 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -0700992 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -0600993 b2 -= b3 + k1 + t2;
994 b3 -= k2 + 4;
995
996
997 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -0700998 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -0600999 b0 -= b3;
1000
1001 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001002 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -06001003 b2 -= b1;
1004
1005 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001006 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -06001007 b0 -= b1;
1008
1009 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001010 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06001011 b2 -= b3;
1012
1013 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001014 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06001015 b0 -= b3;
1016
1017 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001018 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06001019 b2 -= b1;
1020
1021 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001022 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06001023 b0 -= b1 + k3;
1024 b1 -= k4 + t0;
1025
1026 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001027 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06001028 b2 -= b3 + k0 + t1;
1029 b3 -= k1 + 3;
1030
1031 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001032 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06001033 b0 -= b3;
1034
1035 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001036 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06001037 b2 -= b1;
1038
1039 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001040 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06001041 b0 -= b1;
1042
1043 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001044 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -06001045 b2 -= b3;
1046
1047 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001048 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06001049 b0 -= b3;
1050
1051 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001052 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -06001053 b2 -= b1;
1054
1055 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001056 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06001057 b0 -= b1 + k2;
1058 b1 -= k3 + t2;
1059
1060 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001061 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06001062 b2 -= b3 + k4 + t0;
1063 b3 -= k0 + 2;
1064
1065
1066 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001067 b3 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -06001068 b0 -= b3;
1069
1070 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001071 b1 = ror64(tmp, 32);
Jake Edge0109ce72014-05-20 07:58:40 -06001072 b2 -= b1;
1073
1074 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001075 b1 = ror64(tmp, 58);
Jake Edge0109ce72014-05-20 07:58:40 -06001076 b0 -= b1;
1077
1078 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001079 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06001080 b2 -= b3;
1081
1082 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001083 b3 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06001084 b0 -= b3;
1085
1086 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001087 b1 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06001088 b2 -= b1;
1089
1090 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001091 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06001092 b0 -= b1 + k1;
1093 b1 -= k2 + t1;
1094
1095 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001096 b3 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06001097 b2 -= b3 + k3 + t2;
1098 b3 -= k4 + 1;
1099
1100 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001101 b3 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06001102 b0 -= b3;
1103
1104 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001105 b1 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06001106 b2 -= b1;
1107
1108 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001109 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06001110 b0 -= b1;
1111
1112 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001113 b3 = ror64(tmp, 40);
Jake Edge0109ce72014-05-20 07:58:40 -06001114 b2 -= b3;
1115
1116 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001117 b3 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06001118 b0 -= b3;
1119
1120 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001121 b1 = ror64(tmp, 57);
Jake Edge0109ce72014-05-20 07:58:40 -06001122 b2 -= b1;
1123
1124 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07001125 b1 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06001126 b0 -= b1 + k0;
1127 b1 -= k1 + t0;
1128
1129 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07001130 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06001131 b2 -= b3 + k2 + t1;
1132 b3 -= k3;
1133
1134 output[0] = b0;
1135 output[1] = b1;
1136 output[2] = b2;
1137 output[3] = b3;
1138}
1139
1140void threefish_encrypt_512(struct threefish_key *key_ctx, u64 *input,
1141 u64 *output)
1142{
1143 u64 b0 = input[0], b1 = input[1],
1144 b2 = input[2], b3 = input[3],
1145 b4 = input[4], b5 = input[5],
1146 b6 = input[6], b7 = input[7];
1147 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
1148 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
1149 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
1150 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
1151 k8 = key_ctx->key[8];
1152 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
1153 t2 = key_ctx->tweak[2];
1154
1155 b1 += k1;
1156 b0 += b1 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001157 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001158
1159 b3 += k3;
1160 b2 += b3 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001161 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001162
1163 b5 += k5 + t0;
1164 b4 += b5 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08001165 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001166
1167 b7 += k7;
1168 b6 += b7 + k6 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001169 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001170
1171 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001172 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001173
1174 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001175 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001176
1177 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001178 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001179
1180 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001181 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001182
1183 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001184 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001185
1186 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001187 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001188
1189 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001190 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001191
1192 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001193 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001194
1195 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001196 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001197
1198 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001199 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001200
1201 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001202 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001203
1204 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001205 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001206
1207 b1 += k2;
1208 b0 += b1 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001209 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001210
1211 b3 += k4;
1212 b2 += b3 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001213 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001214
1215 b5 += k6 + t1;
1216 b4 += b5 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001217 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001218
1219 b7 += k8 + 1;
1220 b6 += b7 + k7 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001221 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001222
1223 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001224 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001225
1226 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001227 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001228
1229 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001230 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001231
1232 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001233 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001234
1235 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001236 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001237
1238 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001239 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001240
1241 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001242 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001243
1244 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001245 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001246
1247 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001248 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001249
1250 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001251 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001252
1253 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001254 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001255
1256 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001257 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001258
1259 b1 += k3;
1260 b0 += b1 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001261 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001262
1263 b3 += k5;
1264 b2 += b3 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08001265 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001266
1267 b5 += k7 + t2;
1268 b4 += b5 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08001269 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001270
1271 b7 += k0 + 2;
1272 b6 += b7 + k8 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001273 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001274
1275 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001276 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001277
1278 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001279 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001280
1281 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001282 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001283
1284 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001285 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001286
1287 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001288 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001289
1290 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001291 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001292
1293 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001294 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001295
1296 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001297 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001298
1299 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001300 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001301
1302 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001303 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001304
1305 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001306 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001307
1308 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001309 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001310
1311 b1 += k4;
1312 b0 += b1 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001313 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001314
1315 b3 += k6;
1316 b2 += b3 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001317 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001318
1319 b5 += k8 + t0;
1320 b4 += b5 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001321 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001322
1323 b7 += k1 + 3;
1324 b6 += b7 + k0 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001325 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001326
1327 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001328 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001329
1330 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001331 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001332
1333 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001334 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001335
1336 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001337 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001338
1339 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001340 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001341
1342 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001343 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001344
1345 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001346 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001347
1348 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001349 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001350
1351 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001352 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001353
1354 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001355 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001356
1357 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001358 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001359
1360 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001361 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001362
1363 b1 += k5;
1364 b0 += b1 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08001365 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001366
1367 b3 += k7;
1368 b2 += b3 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08001369 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001370
1371 b5 += k0 + t1;
1372 b4 += b5 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08001373 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001374
1375 b7 += k2 + 4;
1376 b6 += b7 + k1 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001377 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001378
1379 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001380 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001381
1382 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001383 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001384
1385 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001386 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001387
1388 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001389 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001390
1391 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001392 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001393
1394 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001395 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001396
1397 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001398 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001399
1400 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001401 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001402
1403 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001404 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001405
1406 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001407 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001408
1409 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001410 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001411
1412 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001413 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001414
1415 b1 += k6;
1416 b0 += b1 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001417 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001418
1419 b3 += k8;
1420 b2 += b3 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001421 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001422
1423 b5 += k1 + t2;
1424 b4 += b5 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001425 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001426
1427 b7 += k3 + 5;
1428 b6 += b7 + k2 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001429 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001430
1431 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001432 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001433
1434 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001435 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001436
1437 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001438 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001439
1440 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001441 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001442
1443 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001444 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001445
1446 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001447 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001448
1449 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001450 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001451
1452 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001453 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001454
1455 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001456 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001457
1458 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001459 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001460
1461 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001462 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001463
1464 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001465 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001466
1467 b1 += k7;
1468 b0 += b1 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08001469 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001470
1471 b3 += k0;
1472 b2 += b3 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08001473 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001474
1475 b5 += k2 + t0;
1476 b4 += b5 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001477 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001478
1479 b7 += k4 + 6;
1480 b6 += b7 + k3 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001481 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001482
1483 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001484 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001485
1486 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001487 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001488
1489 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001490 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001491
1492 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001493 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001494
1495 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001496 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001497
1498 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001499 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001500
1501 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001502 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001503
1504 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001505 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001506
1507 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001508 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001509
1510 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001511 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001512
1513 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001514 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001515
1516 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001517 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001518
1519 b1 += k8;
1520 b0 += b1 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001521 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001522
1523 b3 += k1;
1524 b2 += b3 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001525 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001526
1527 b5 += k3 + t1;
1528 b4 += b5 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001529 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001530
1531 b7 += k5 + 7;
1532 b6 += b7 + k4 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001533 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001534
1535 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001536 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001537
1538 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001539 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001540
1541 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001542 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001543
1544 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001545 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001546
1547 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001548 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001549
1550 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001551 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001552
1553 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001554 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001555
1556 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001557 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001558
1559 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001560 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001561
1562 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001563 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001564
1565 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001566 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001567
1568 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001569 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001570
1571 b1 += k0;
1572 b0 += b1 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08001573 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001574
1575 b3 += k2;
1576 b2 += b3 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001577 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001578
1579 b5 += k4 + t2;
1580 b4 += b5 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001581 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001582
1583 b7 += k6 + 8;
1584 b6 += b7 + k5 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001585 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001586
1587 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001588 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001589
1590 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001591 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001592
1593 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001594 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001595
1596 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001597 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001598
1599 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001600 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001601
1602 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001603 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001604
1605 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001606 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001607
1608 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001609 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001610
1611 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001612 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001613
1614 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001615 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001616
1617 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001618 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001619
1620 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001621 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001622
1623 b1 += k1;
1624 b0 += b1 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001625 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001626
1627 b3 += k3;
1628 b2 += b3 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001629 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001630
1631 b5 += k5 + t0;
1632 b4 += b5 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08001633 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001634
1635 b7 += k7 + 9;
1636 b6 += b7 + k6 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001637 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001638
1639 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001640 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001641
1642 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001643 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001644
1645 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001646 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001647
1648 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001649 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001650
1651 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001652 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001653
1654 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001655 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001656
1657 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001658 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001659
1660 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001661 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001662
1663 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001664 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001665
1666 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001667 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001668
1669 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001670 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001671
1672 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001673 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001674
1675 b1 += k2;
1676 b0 += b1 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001677 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001678
1679 b3 += k4;
1680 b2 += b3 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001681 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001682
1683 b5 += k6 + t1;
1684 b4 += b5 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001685 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001686
1687 b7 += k8 + 10;
1688 b6 += b7 + k7 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001689 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001690
1691 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001692 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001693
1694 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001695 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001696
1697 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001698 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001699
1700 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001701 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001702
1703 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001704 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001705
1706 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001707 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001708
1709 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001710 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001711
1712 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001713 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001714
1715 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001716 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001717
1718 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001719 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001720
1721 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001722 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001723
1724 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001725 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001726
1727 b1 += k3;
1728 b0 += b1 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001729 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001730
1731 b3 += k5;
1732 b2 += b3 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08001733 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001734
1735 b5 += k7 + t2;
1736 b4 += b5 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08001737 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001738
1739 b7 += k0 + 11;
1740 b6 += b7 + k8 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001741 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001742
1743 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001744 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001745
1746 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001747 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001748
1749 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001750 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001751
1752 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001753 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001754
1755 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001756 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001757
1758 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001759 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001760
1761 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001762 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001763
1764 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001765 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001766
1767 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001768 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001769
1770 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001771 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001772
1773 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001774 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001775
1776 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001777 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001778
1779 b1 += k4;
1780 b0 += b1 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001781 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001782
1783 b3 += k6;
1784 b2 += b3 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001785 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001786
1787 b5 += k8 + t0;
1788 b4 += b5 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001789 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001790
1791 b7 += k1 + 12;
1792 b6 += b7 + k0 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001793 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001794
1795 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001796 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001797
1798 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001799 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001800
1801 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001802 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001803
1804 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001805 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001806
1807 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001808 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001809
1810 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001811 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001812
1813 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001814 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001815
1816 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001817 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001818
1819 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001820 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001821
1822 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001823 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001824
1825 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001826 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001827
1828 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001829 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001830
1831 b1 += k5;
1832 b0 += b1 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08001833 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001834
1835 b3 += k7;
1836 b2 += b3 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08001837 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001838
1839 b5 += k0 + t1;
1840 b4 += b5 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08001841 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001842
1843 b7 += k2 + 13;
1844 b6 += b7 + k1 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001845 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001846
1847 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001848 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001849
1850 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001851 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001852
1853 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001854 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001855
1856 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001857 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001858
1859 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001860 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001861
1862 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001863 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001864
1865 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001866 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001867
1868 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001869 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001870
1871 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001872 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001873
1874 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001875 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001876
1877 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001878 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001879
1880 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001881 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001882
1883 b1 += k6;
1884 b0 += b1 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001885 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001886
1887 b3 += k8;
1888 b2 += b3 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001889 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001890
1891 b5 += k1 + t2;
1892 b4 += b5 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001893 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001894
1895 b7 += k3 + 14;
1896 b6 += b7 + k2 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001897 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001898
1899 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001900 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001901
1902 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001903 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001904
1905 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001906 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001907
1908 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001909 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001910
1911 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001912 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001913
1914 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001915 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001916
1917 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001918 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001919
1920 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001921 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001922
1923 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001924 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001925
1926 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001927 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001928
1929 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001930 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001931
1932 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001933 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001934
1935 b1 += k7;
1936 b0 += b1 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08001937 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001938
1939 b3 += k0;
1940 b2 += b3 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08001941 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001942
1943 b5 += k2 + t0;
1944 b4 += b5 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001945 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001946
1947 b7 += k4 + 15;
1948 b6 += b7 + k3 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001949 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001950
1951 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001952 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001953
1954 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001955 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001956
1957 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001958 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001959
1960 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001961 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001962
1963 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001964 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001965
1966 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001967 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001968
1969 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001970 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001971
1972 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001973 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001974
1975 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08001976 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06001977
1978 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001979 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001980
1981 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08001982 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001983
1984 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08001985 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001986
1987 b1 += k8;
1988 b0 += b1 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08001989 b1 = rol64(b1, 46) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06001990
1991 b3 += k1;
1992 b2 += b3 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08001993 b3 = rol64(b3, 36) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06001994
1995 b5 += k3 + t1;
1996 b4 += b5 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08001997 b5 = rol64(b5, 19) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06001998
1999 b7 += k5 + 16;
2000 b6 += b7 + k4 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08002001 b7 = rol64(b7, 37) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06002002
2003 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08002004 b1 = rol64(b1, 33) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06002005
2006 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08002007 b7 = rol64(b7, 27) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06002008
2009 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08002010 b5 = rol64(b5, 14) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06002011
2012 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08002013 b3 = rol64(b3, 42) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06002014
2015 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08002016 b1 = rol64(b1, 17) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06002017
2018 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08002019 b3 = rol64(b3, 49) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06002020
2021 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08002022 b5 = rol64(b5, 36) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06002023
2024 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08002025 b7 = rol64(b7, 39) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06002026
2027 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08002028 b1 = rol64(b1, 44) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06002029
2030 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08002031 b7 = rol64(b7, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06002032
2033 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08002034 b5 = rol64(b5, 54) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06002035
2036 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08002037 b3 = rol64(b3, 56) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06002038
2039 b1 += k0;
2040 b0 += b1 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08002041 b1 = rol64(b1, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06002042
2043 b3 += k2;
2044 b2 += b3 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08002045 b3 = rol64(b3, 30) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06002046
2047 b5 += k4 + t2;
2048 b4 += b5 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08002049 b5 = rol64(b5, 34) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06002050
2051 b7 += k6 + 17;
2052 b6 += b7 + k5 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08002053 b7 = rol64(b7, 24) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06002054
2055 b2 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08002056 b1 = rol64(b1, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06002057
2058 b4 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08002059 b7 = rol64(b7, 50) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06002060
2061 b6 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08002062 b5 = rol64(b5, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06002063
2064 b0 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08002065 b3 = rol64(b3, 17) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06002066
2067 b4 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08002068 b1 = rol64(b1, 25) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06002069
2070 b6 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08002071 b3 = rol64(b3, 29) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06002072
2073 b0 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08002074 b5 = rol64(b5, 39) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06002075
2076 b2 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08002077 b7 = rol64(b7, 43) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06002078
2079 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08002080 b1 = rol64(b1, 8) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06002081
2082 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08002083 b7 = rol64(b7, 35) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06002084
2085 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08002086 b5 = rol64(b5, 56) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06002087
2088 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08002089 b3 = rol64(b3, 22) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06002090
2091 output[0] = b0 + k0;
2092 output[1] = b1 + k1;
2093 output[2] = b2 + k2;
2094 output[3] = b3 + k3;
2095 output[4] = b4 + k4;
2096 output[5] = b5 + k5 + t0;
2097 output[6] = b6 + k6 + t1;
2098 output[7] = b7 + k7 + 18;
2099}
2100
2101void threefish_decrypt_512(struct threefish_key *key_ctx, u64 *input,
2102 u64 *output)
2103{
2104 u64 b0 = input[0], b1 = input[1],
2105 b2 = input[2], b3 = input[3],
2106 b4 = input[4], b5 = input[5],
2107 b6 = input[6], b7 = input[7];
2108 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
2109 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
2110 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
2111 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
2112 k8 = key_ctx->key[8];
2113 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
2114 t2 = key_ctx->tweak[2];
2115
2116 u64 tmp;
2117
2118 b0 -= k0;
2119 b1 -= k1;
2120 b2 -= k2;
2121 b3 -= k3;
2122 b4 -= k4;
2123 b5 -= k5 + t0;
2124 b6 -= k6 + t1;
2125 b7 -= k7 + 18;
2126
2127 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002128 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06002129 b4 -= b3;
2130
2131 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002132 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002133 b2 -= b5;
2134
2135 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002136 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06002137 b0 -= b7;
2138
2139 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002140 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06002141 b6 -= b1;
2142
2143 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002144 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06002145 b2 -= b7;
2146
2147 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002148 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002149 b0 -= b5;
2150
2151 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002152 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06002153 b6 -= b3;
2154
2155 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002156 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06002157 b4 -= b1;
2158
2159 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002160 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002161 b0 -= b3;
2162
2163 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002164 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06002165 b6 -= b5;
2166
2167 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002168 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06002169 b4 -= b7;
2170
2171 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002172 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06002173 b2 -= b1;
2174
2175 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002176 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06002177 b6 -= b7 + k5 + t0;
2178 b7 -= k6 + 17;
2179
2180 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002181 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06002182 b4 -= b5 + k3;
2183 b5 -= k4 + t2;
2184
2185 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002186 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06002187 b2 -= b3 + k1;
2188 b3 -= k2;
2189
2190 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002191 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002192 b0 -= b1 + k8;
2193 b1 -= k0;
2194
2195 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002196 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002197 b4 -= b3;
2198
2199 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002200 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06002201 b2 -= b5;
2202
2203 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002204 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06002205 b0 -= b7;
2206
2207 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002208 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06002209 b6 -= b1;
2210
2211 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002212 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002213 b2 -= b7;
2214
2215 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002216 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002217 b0 -= b5;
2218
2219 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002220 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06002221 b6 -= b3;
2222
2223 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002224 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002225 b4 -= b1;
2226
2227 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002228 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06002229 b0 -= b3;
2230
2231 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002232 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06002233 b6 -= b5;
2234
2235 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002236 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06002237 b4 -= b7;
2238
2239 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002240 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06002241 b2 -= b1;
2242
2243 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002244 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06002245 b6 -= b7 + k4 + t2;
2246 b7 -= k5 + 16;
2247
2248 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002249 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06002250 b4 -= b5 + k2;
2251 b5 -= k3 + t1;
2252
2253 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002254 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002255 b2 -= b3 + k0;
2256 b3 -= k1;
2257
2258 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002259 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06002260 b0 -= b1 + k7;
2261 b1 -= k8;
2262
2263 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002264 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06002265 b4 -= b3;
2266
2267 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002268 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002269 b2 -= b5;
2270
2271 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002272 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06002273 b0 -= b7;
2274
2275 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002276 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06002277 b6 -= b1;
2278
2279 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002280 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06002281 b2 -= b7;
2282
2283 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002284 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002285 b0 -= b5;
2286
2287 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002288 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06002289 b6 -= b3;
2290
2291 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002292 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06002293 b4 -= b1;
2294
2295 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002296 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002297 b0 -= b3;
2298
2299 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002300 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06002301 b6 -= b5;
2302
2303 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002304 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06002305 b4 -= b7;
2306
2307 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002308 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06002309 b2 -= b1;
2310
2311 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002312 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06002313 b6 -= b7 + k3 + t1;
2314 b7 -= k4 + 15;
2315
2316 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002317 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06002318 b4 -= b5 + k1;
2319 b5 -= k2 + t0;
2320
2321 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002322 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06002323 b2 -= b3 + k8;
2324 b3 -= k0;
2325
2326 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002327 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002328 b0 -= b1 + k6;
2329 b1 -= k7;
2330
2331 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002332 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002333 b4 -= b3;
2334
2335 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002336 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06002337 b2 -= b5;
2338
2339 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002340 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06002341 b0 -= b7;
2342
2343 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002344 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06002345 b6 -= b1;
2346
2347 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002348 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002349 b2 -= b7;
2350
2351 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002352 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002353 b0 -= b5;
2354
2355 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002356 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06002357 b6 -= b3;
2358
2359 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002360 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002361 b4 -= b1;
2362
2363 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002364 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06002365 b0 -= b3;
2366
2367 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002368 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06002369 b6 -= b5;
2370
2371 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002372 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06002373 b4 -= b7;
2374
2375 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002376 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06002377 b2 -= b1;
2378
2379 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002380 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06002381 b6 -= b7 + k2 + t0;
2382 b7 -= k3 + 14;
2383
2384 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002385 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06002386 b4 -= b5 + k0;
2387 b5 -= k1 + t2;
2388
2389 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002390 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002391 b2 -= b3 + k7;
2392 b3 -= k8;
2393
2394 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002395 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06002396 b0 -= b1 + k5;
2397 b1 -= k6;
2398
2399 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002400 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06002401 b4 -= b3;
2402
2403 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002404 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002405 b2 -= b5;
2406
2407 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002408 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06002409 b0 -= b7;
2410
2411 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002412 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06002413 b6 -= b1;
2414
2415 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002416 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06002417 b2 -= b7;
2418
2419 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002420 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002421 b0 -= b5;
2422
2423 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002424 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06002425 b6 -= b3;
2426
2427 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002428 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06002429 b4 -= b1;
2430
2431 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002432 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002433 b0 -= b3;
2434
2435 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002436 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06002437 b6 -= b5;
2438
2439 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002440 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06002441 b4 -= b7;
2442
2443 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002444 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06002445 b2 -= b1;
2446
2447 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002448 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06002449 b6 -= b7 + k1 + t2;
2450 b7 -= k2 + 13;
2451
2452 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002453 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06002454 b4 -= b5 + k8;
2455 b5 -= k0 + t1;
2456
2457 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002458 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06002459 b2 -= b3 + k6;
2460 b3 -= k7;
2461
2462 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002463 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002464 b0 -= b1 + k4;
2465 b1 -= k5;
2466
2467 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002468 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002469 b4 -= b3;
2470
2471 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002472 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06002473 b2 -= b5;
2474
2475 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002476 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06002477 b0 -= b7;
2478
2479 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002480 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06002481 b6 -= b1;
2482
2483 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002484 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002485 b2 -= b7;
2486
2487 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002488 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002489 b0 -= b5;
2490
2491 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002492 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06002493 b6 -= b3;
2494
2495 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002496 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002497 b4 -= b1;
2498
2499 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002500 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06002501 b0 -= b3;
2502
2503 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002504 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06002505 b6 -= b5;
2506
2507 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002508 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06002509 b4 -= b7;
2510
2511 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002512 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06002513 b2 -= b1;
2514
2515 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002516 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06002517 b6 -= b7 + k0 + t1;
2518 b7 -= k1 + 12;
2519
2520 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002521 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06002522 b4 -= b5 + k7;
2523 b5 -= k8 + t0;
2524
2525 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002526 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002527 b2 -= b3 + k5;
2528 b3 -= k6;
2529
2530 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002531 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06002532 b0 -= b1 + k3;
2533 b1 -= k4;
2534
2535 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002536 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06002537 b4 -= b3;
2538
2539 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002540 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002541 b2 -= b5;
2542
2543 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002544 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06002545 b0 -= b7;
2546
2547 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002548 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06002549 b6 -= b1;
2550
2551 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002552 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06002553 b2 -= b7;
2554
2555 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002556 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002557 b0 -= b5;
2558
2559 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002560 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06002561 b6 -= b3;
2562
2563 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002564 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06002565 b4 -= b1;
2566
2567 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002568 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002569 b0 -= b3;
2570
2571 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002572 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06002573 b6 -= b5;
2574
2575 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002576 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06002577 b4 -= b7;
2578
2579 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002580 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06002581 b2 -= b1;
2582
2583 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002584 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06002585 b6 -= b7 + k8 + t0;
2586 b7 -= k0 + 11;
2587
2588 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002589 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06002590 b4 -= b5 + k6;
2591 b5 -= k7 + t2;
2592
2593 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002594 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06002595 b2 -= b3 + k4;
2596 b3 -= k5;
2597
2598 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002599 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002600 b0 -= b1 + k2;
2601 b1 -= k3;
2602
2603 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002604 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002605 b4 -= b3;
2606
2607 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002608 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06002609 b2 -= b5;
2610
2611 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002612 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06002613 b0 -= b7;
2614
2615 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002616 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06002617 b6 -= b1;
2618
2619 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002620 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002621 b2 -= b7;
2622
2623 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002624 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002625 b0 -= b5;
2626
2627 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002628 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06002629 b6 -= b3;
2630
2631 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002632 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002633 b4 -= b1;
2634
2635 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002636 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06002637 b0 -= b3;
2638
2639 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002640 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06002641 b6 -= b5;
2642
2643 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002644 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06002645 b4 -= b7;
2646
2647 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002648 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06002649 b2 -= b1;
2650
2651 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002652 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06002653 b6 -= b7 + k7 + t2;
2654 b7 -= k8 + 10;
2655
2656 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002657 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06002658 b4 -= b5 + k5;
2659 b5 -= k6 + t1;
2660
2661 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002662 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002663 b2 -= b3 + k3;
2664 b3 -= k4;
2665
2666 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002667 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06002668 b0 -= b1 + k1;
2669 b1 -= k2;
2670
2671 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002672 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06002673 b4 -= b3;
2674
2675 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002676 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002677 b2 -= b5;
2678
2679 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002680 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06002681 b0 -= b7;
2682
2683 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002684 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06002685 b6 -= b1;
2686
2687 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002688 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06002689 b2 -= b7;
2690
2691 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002692 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002693 b0 -= b5;
2694
2695 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002696 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06002697 b6 -= b3;
2698
2699 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002700 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06002701 b4 -= b1;
2702
2703 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002704 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002705 b0 -= b3;
2706
2707 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002708 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06002709 b6 -= b5;
2710
2711 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002712 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06002713 b4 -= b7;
2714
2715 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002716 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06002717 b2 -= b1;
2718
2719 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002720 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06002721 b6 -= b7 + k6 + t1;
2722 b7 -= k7 + 9;
2723
2724 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002725 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06002726 b4 -= b5 + k4;
2727 b5 -= k5 + t0;
2728
2729 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002730 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06002731 b2 -= b3 + k2;
2732 b3 -= k3;
2733
2734 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002735 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002736 b0 -= b1 + k0;
2737 b1 -= k1;
2738
2739 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002740 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002741 b4 -= b3;
2742
2743 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002744 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06002745 b2 -= b5;
2746
2747 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002748 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06002749 b0 -= b7;
2750
2751 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002752 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06002753 b6 -= b1;
2754
2755 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002756 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002757 b2 -= b7;
2758
2759 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002760 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002761 b0 -= b5;
2762
2763 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002764 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06002765 b6 -= b3;
2766
2767 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002768 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002769 b4 -= b1;
2770
2771 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002772 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06002773 b0 -= b3;
2774
2775 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002776 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06002777 b6 -= b5;
2778
2779 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002780 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06002781 b4 -= b7;
2782
2783 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002784 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06002785 b2 -= b1;
2786
2787 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002788 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06002789 b6 -= b7 + k5 + t0;
2790 b7 -= k6 + 8;
2791
2792 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002793 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06002794 b4 -= b5 + k3;
2795 b5 -= k4 + t2;
2796
2797 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002798 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002799 b2 -= b3 + k1;
2800 b3 -= k2;
2801
2802 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002803 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06002804 b0 -= b1 + k8;
2805 b1 -= k0;
2806
2807 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002808 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06002809 b4 -= b3;
2810
2811 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002812 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002813 b2 -= b5;
2814
2815 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002816 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06002817 b0 -= b7;
2818
2819 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002820 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06002821 b6 -= b1;
2822
2823 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002824 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06002825 b2 -= b7;
2826
2827 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002828 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002829 b0 -= b5;
2830
2831 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002832 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06002833 b6 -= b3;
2834
2835 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002836 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06002837 b4 -= b1;
2838
2839 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002840 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002841 b0 -= b3;
2842
2843 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002844 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06002845 b6 -= b5;
2846
2847 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002848 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06002849 b4 -= b7;
2850
2851 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002852 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06002853 b2 -= b1;
2854
2855 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002856 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06002857 b6 -= b7 + k4 + t2;
2858 b7 -= k5 + 7;
2859
2860 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002861 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06002862 b4 -= b5 + k2;
2863 b5 -= k3 + t1;
2864
2865 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002866 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06002867 b2 -= b3 + k0;
2868 b3 -= k1;
2869
2870 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002871 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002872 b0 -= b1 + k7;
2873 b1 -= k8;
2874
2875 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002876 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002877 b4 -= b3;
2878
2879 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002880 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06002881 b2 -= b5;
2882
2883 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002884 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06002885 b0 -= b7;
2886
2887 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002888 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06002889 b6 -= b1;
2890
2891 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002892 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002893 b2 -= b7;
2894
2895 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002896 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002897 b0 -= b5;
2898
2899 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002900 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06002901 b6 -= b3;
2902
2903 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002904 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002905 b4 -= b1;
2906
2907 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002908 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06002909 b0 -= b3;
2910
2911 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002912 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06002913 b6 -= b5;
2914
2915 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002916 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06002917 b4 -= b7;
2918
2919 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002920 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06002921 b2 -= b1;
2922
2923 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002924 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06002925 b6 -= b7 + k3 + t1;
2926 b7 -= k4 + 6;
2927
2928 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002929 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06002930 b4 -= b5 + k1;
2931 b5 -= k2 + t0;
2932
2933 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002934 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06002935 b2 -= b3 + k8;
2936 b3 -= k0;
2937
2938 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002939 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06002940 b0 -= b1 + k6;
2941 b1 -= k7;
2942
2943 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002944 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06002945 b4 -= b3;
2946
2947 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002948 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06002949 b2 -= b5;
2950
2951 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002952 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06002953 b0 -= b7;
2954
2955 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002956 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06002957 b6 -= b1;
2958
2959 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002960 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06002961 b2 -= b7;
2962
2963 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002964 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06002965 b0 -= b5;
2966
2967 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002968 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06002969 b6 -= b3;
2970
2971 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002972 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06002973 b4 -= b1;
2974
2975 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07002976 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06002977 b0 -= b3;
2978
2979 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002980 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06002981 b6 -= b5;
2982
2983 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002984 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06002985 b4 -= b7;
2986
2987 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07002988 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06002989 b2 -= b1;
2990
2991 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07002992 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06002993 b6 -= b7 + k2 + t0;
2994 b7 -= k3 + 5;
2995
2996 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07002997 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06002998 b4 -= b5 + k0;
2999 b5 -= k1 + t2;
3000
3001 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003002 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06003003 b2 -= b3 + k7;
3004 b3 -= k8;
3005
3006 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003007 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06003008 b0 -= b1 + k5;
3009 b1 -= k6;
3010
3011 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003012 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06003013 b4 -= b3;
3014
3015 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003016 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06003017 b2 -= b5;
3018
3019 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003020 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06003021 b0 -= b7;
3022
3023 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003024 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06003025 b6 -= b1;
3026
3027 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003028 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06003029 b2 -= b7;
3030
3031 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003032 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06003033 b0 -= b5;
3034
3035 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003036 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06003037 b6 -= b3;
3038
3039 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003040 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06003041 b4 -= b1;
3042
3043 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003044 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06003045 b0 -= b3;
3046
3047 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003048 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06003049 b6 -= b5;
3050
3051 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003052 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06003053 b4 -= b7;
3054
3055 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003056 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06003057 b2 -= b1;
3058
3059 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003060 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06003061 b6 -= b7 + k1 + t2;
3062 b7 -= k2 + 4;
3063
3064 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003065 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06003066 b4 -= b5 + k8;
3067 b5 -= k0 + t1;
3068
3069 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003070 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06003071 b2 -= b3 + k6;
3072 b3 -= k7;
3073
3074 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003075 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06003076 b0 -= b1 + k4;
3077 b1 -= k5;
3078
3079 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003080 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06003081 b4 -= b3;
3082
3083 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003084 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06003085 b2 -= b5;
3086
3087 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003088 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06003089 b0 -= b7;
3090
3091 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003092 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06003093 b6 -= b1;
3094
3095 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003096 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06003097 b2 -= b7;
3098
3099 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003100 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06003101 b0 -= b5;
3102
3103 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003104 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06003105 b6 -= b3;
3106
3107 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003108 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06003109 b4 -= b1;
3110
3111 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003112 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06003113 b0 -= b3;
3114
3115 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003116 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06003117 b6 -= b5;
3118
3119 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003120 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06003121 b4 -= b7;
3122
3123 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003124 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06003125 b2 -= b1;
3126
3127 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003128 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06003129 b6 -= b7 + k0 + t1;
3130 b7 -= k1 + 3;
3131
3132 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003133 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06003134 b4 -= b5 + k7;
3135 b5 -= k8 + t0;
3136
3137 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003138 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06003139 b2 -= b3 + k5;
3140 b3 -= k6;
3141
3142 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003143 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06003144 b0 -= b1 + k3;
3145 b1 -= k4;
3146
3147 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003148 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06003149 b4 -= b3;
3150
3151 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003152 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06003153 b2 -= b5;
3154
3155 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003156 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06003157 b0 -= b7;
3158
3159 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003160 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06003161 b6 -= b1;
3162
3163 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003164 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06003165 b2 -= b7;
3166
3167 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003168 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06003169 b0 -= b5;
3170
3171 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003172 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06003173 b6 -= b3;
3174
3175 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003176 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06003177 b4 -= b1;
3178
3179 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003180 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06003181 b0 -= b3;
3182
3183 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003184 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06003185 b6 -= b5;
3186
3187 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003188 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06003189 b4 -= b7;
3190
3191 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003192 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06003193 b2 -= b1;
3194
3195 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003196 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06003197 b6 -= b7 + k8 + t0;
3198 b7 -= k0 + 2;
3199
3200 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003201 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06003202 b4 -= b5 + k6;
3203 b5 -= k7 + t2;
3204
3205 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003206 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06003207 b2 -= b3 + k4;
3208 b3 -= k5;
3209
3210 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003211 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06003212 b0 -= b1 + k2;
3213 b1 -= k3;
3214
3215 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003216 b3 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06003217 b4 -= b3;
3218
3219 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003220 b5 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06003221 b2 -= b5;
3222
3223 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003224 b7 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06003225 b0 -= b7;
3226
3227 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003228 b1 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06003229 b6 -= b1;
3230
3231 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003232 b7 = ror64(tmp, 43);
Jake Edge0109ce72014-05-20 07:58:40 -06003233 b2 -= b7;
3234
3235 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003236 b5 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06003237 b0 -= b5;
3238
3239 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003240 b3 = ror64(tmp, 29);
Jake Edge0109ce72014-05-20 07:58:40 -06003241 b6 -= b3;
3242
3243 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003244 b1 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06003245 b4 -= b1;
3246
3247 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003248 b3 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06003249 b0 -= b3;
3250
3251 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003252 b5 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06003253 b6 -= b5;
3254
3255 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003256 b7 = ror64(tmp, 50);
Jake Edge0109ce72014-05-20 07:58:40 -06003257 b4 -= b7;
3258
3259 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003260 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06003261 b2 -= b1;
3262
3263 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003264 b7 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06003265 b6 -= b7 + k7 + t2;
3266 b7 -= k8 + 1;
3267
3268 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003269 b5 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06003270 b4 -= b5 + k5;
3271 b5 -= k6 + t1;
3272
3273 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003274 b3 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06003275 b2 -= b3 + k3;
3276 b3 -= k4;
3277
3278 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003279 b1 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06003280 b0 -= b1 + k1;
3281 b1 -= k2;
3282
3283 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003284 b3 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06003285 b4 -= b3;
3286
3287 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003288 b5 = ror64(tmp, 54);
Jake Edge0109ce72014-05-20 07:58:40 -06003289 b2 -= b5;
3290
3291 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003292 b7 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06003293 b0 -= b7;
3294
3295 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003296 b1 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06003297 b6 -= b1;
3298
3299 tmp = b7 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003300 b7 = ror64(tmp, 39);
Jake Edge0109ce72014-05-20 07:58:40 -06003301 b2 -= b7;
3302
3303 tmp = b5 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003304 b5 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06003305 b0 -= b5;
3306
3307 tmp = b3 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003308 b3 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06003309 b6 -= b3;
3310
3311 tmp = b1 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003312 b1 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06003313 b4 -= b1;
3314
3315 tmp = b3 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003316 b3 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06003317 b0 -= b3;
3318
3319 tmp = b5 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003320 b5 = ror64(tmp, 14);
Jake Edge0109ce72014-05-20 07:58:40 -06003321 b6 -= b5;
3322
3323 tmp = b7 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003324 b7 = ror64(tmp, 27);
Jake Edge0109ce72014-05-20 07:58:40 -06003325 b4 -= b7;
3326
3327 tmp = b1 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003328 b1 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06003329 b2 -= b1;
3330
3331 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07003332 b7 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06003333 b6 -= b7 + k6 + t1;
3334 b7 -= k7;
3335
3336 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07003337 b5 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06003338 b4 -= b5 + k4;
3339 b5 -= k5 + t0;
3340
3341 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07003342 b3 = ror64(tmp, 36);
Jake Edge0109ce72014-05-20 07:58:40 -06003343 b2 -= b3 + k2;
3344 b3 -= k3;
3345
3346 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07003347 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06003348 b0 -= b1 + k0;
3349 b1 -= k1;
3350
3351 output[0] = b0;
3352 output[1] = b1;
3353 output[2] = b2;
3354 output[3] = b3;
3355
3356 output[7] = b7;
3357 output[6] = b6;
3358 output[5] = b5;
3359 output[4] = b4;
3360}
3361
3362void threefish_encrypt_1024(struct threefish_key *key_ctx, u64 *input,
3363 u64 *output)
3364{
3365 u64 b0 = input[0], b1 = input[1],
3366 b2 = input[2], b3 = input[3],
3367 b4 = input[4], b5 = input[5],
3368 b6 = input[6], b7 = input[7],
3369 b8 = input[8], b9 = input[9],
3370 b10 = input[10], b11 = input[11],
3371 b12 = input[12], b13 = input[13],
3372 b14 = input[14], b15 = input[15];
3373 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
3374 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
3375 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
3376 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
3377 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
3378 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
3379 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
3380 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
3381 k16 = key_ctx->key[16];
3382 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
3383 t2 = key_ctx->tweak[2];
3384
3385 b1 += k1;
3386 b0 += b1 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08003387 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003388
3389 b3 += k3;
3390 b2 += b3 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08003391 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003392
3393 b5 += k5;
3394 b4 += b5 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08003395 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003396
3397 b7 += k7;
3398 b6 += b7 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08003399 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003400
3401 b9 += k9;
3402 b8 += b9 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08003403 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003404
3405 b11 += k11;
3406 b10 += b11 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08003407 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003408
3409 b13 += k13 + t0;
3410 b12 += b13 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08003411 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003412
3413 b15 += k15;
3414 b14 += b15 + k14 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003415 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003416
3417 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003418 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003419
3420 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003421 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003422
3423 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003424 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003425
3426 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003427 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003428
3429 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003430 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003431
3432 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003433 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003434
3435 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003436 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003437
3438 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003439 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003440
3441 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003442 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003443
3444 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003445 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003446
3447 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003448 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003449
3450 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003451 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003452
3453 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003454 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003455
3456 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003457 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003458
3459 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003460 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003461
3462 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003463 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003464
3465 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003466 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003467
3468 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003469 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003470
3471 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003472 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003473
3474 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003475 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003476
3477 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003478 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003479
3480 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003481 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003482
3483 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003484 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003485
3486 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003487 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003488
3489 b1 += k2;
3490 b0 += b1 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003491 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003492
3493 b3 += k4;
3494 b2 += b3 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003495 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003496
3497 b5 += k6;
3498 b4 += b5 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003499 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003500
3501 b7 += k8;
3502 b6 += b7 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003503 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003504
3505 b9 += k10;
3506 b8 += b9 + k9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003507 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003508
3509 b11 += k12;
3510 b10 += b11 + k11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003511 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003512
3513 b13 += k14 + t1;
3514 b12 += b13 + k13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003515 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003516
3517 b15 += k16 + 1;
3518 b14 += b15 + k15 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08003519 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003520
3521 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003522 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003523
3524 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003525 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003526
3527 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003528 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003529
3530 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003531 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003532
3533 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003534 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003535
3536 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003537 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003538
3539 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003540 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003541
3542 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003543 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003544
3545 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003546 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003547
3548 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003549 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003550
3551 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003552 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003553
3554 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003555 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003556
3557 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003558 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003559
3560 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003561 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003562
3563 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003564 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003565
3566 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003567 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003568
3569 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003570 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003571
3572 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003573 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003574
3575 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003576 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003577
3578 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003579 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003580
3581 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003582 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003583
3584 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003585 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003586
3587 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003588 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003589
3590 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003591 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003592
3593 b1 += k3;
3594 b0 += b1 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08003595 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003596
3597 b3 += k5;
3598 b2 += b3 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08003599 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003600
3601 b5 += k7;
3602 b4 += b5 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08003603 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003604
3605 b7 += k9;
3606 b6 += b7 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08003607 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003608
3609 b9 += k11;
3610 b8 += b9 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08003611 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003612
3613 b11 += k13;
3614 b10 += b11 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08003615 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003616
3617 b13 += k15 + t2;
3618 b12 += b13 + k14;
Joe Perchese0a2d502016-03-10 03:43:22 -08003619 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003620
3621 b15 += k0 + 2;
3622 b14 += b15 + k16 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08003623 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003624
3625 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003626 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003627
3628 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003629 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003630
3631 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003632 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003633
3634 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003635 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003636
3637 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003638 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003639
3640 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003641 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003642
3643 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003644 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003645
3646 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003647 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003648
3649 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003650 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003651
3652 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003653 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003654
3655 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003656 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003657
3658 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003659 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003660
3661 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003662 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003663
3664 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003665 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003666
3667 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003668 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003669
3670 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003671 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003672
3673 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003674 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003675
3676 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003677 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003678
3679 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003680 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003681
3682 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003683 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003684
3685 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003686 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003687
3688 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003689 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003690
3691 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003692 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003693
3694 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003695 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003696
3697 b1 += k4;
3698 b0 += b1 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003699 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003700
3701 b3 += k6;
3702 b2 += b3 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003703 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003704
3705 b5 += k8;
3706 b4 += b5 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003707 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003708
3709 b7 += k10;
3710 b6 += b7 + k9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003711 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003712
3713 b9 += k12;
3714 b8 += b9 + k11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003715 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003716
3717 b11 += k14;
3718 b10 += b11 + k13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003719 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003720
3721 b13 += k16 + t0;
3722 b12 += b13 + k15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003723 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003724
3725 b15 += k1 + 3;
3726 b14 += b15 + k0 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003727 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003728
3729 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003730 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003731
3732 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003733 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003734
3735 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003736 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003737
3738 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003739 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003740
3741 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003742 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003743
3744 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003745 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003746
3747 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003748 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003749
3750 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003751 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003752
3753 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003754 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003755
3756 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003757 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003758
3759 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003760 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003761
3762 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003763 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003764
3765 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003766 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003767
3768 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003769 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003770
3771 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003772 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003773
3774 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003775 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003776
3777 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003778 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003779
3780 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003781 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003782
3783 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003784 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003785
3786 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003787 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003788
3789 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003790 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003791
3792 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003793 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003794
3795 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003796 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003797
3798 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003799 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003800
3801 b1 += k5;
3802 b0 += b1 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08003803 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003804
3805 b3 += k7;
3806 b2 += b3 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08003807 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003808
3809 b5 += k9;
3810 b4 += b5 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08003811 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003812
3813 b7 += k11;
3814 b6 += b7 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08003815 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003816
3817 b9 += k13;
3818 b8 += b9 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08003819 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003820
3821 b11 += k15;
3822 b10 += b11 + k14;
Joe Perchese0a2d502016-03-10 03:43:22 -08003823 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003824
3825 b13 += k0 + t1;
3826 b12 += b13 + k16;
Joe Perchese0a2d502016-03-10 03:43:22 -08003827 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003828
3829 b15 += k2 + 4;
3830 b14 += b15 + k1 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08003831 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003832
3833 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003834 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003835
3836 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003837 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003838
3839 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003840 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003841
3842 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003843 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003844
3845 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003846 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003847
3848 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003849 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003850
3851 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003852 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003853
3854 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003855 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003856
3857 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003858 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003859
3860 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003861 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003862
3863 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003864 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003865
3866 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003867 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003868
3869 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003870 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003871
3872 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003873 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003874
3875 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003876 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003877
3878 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003879 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003880
3881 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003882 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003883
3884 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003885 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003886
3887 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003888 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003889
3890 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003891 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003892
3893 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003894 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003895
3896 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003897 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003898
3899 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003900 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003901
3902 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003903 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003904
3905 b1 += k6;
3906 b0 += b1 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003907 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003908
3909 b3 += k8;
3910 b2 += b3 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003911 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003912
3913 b5 += k10;
3914 b4 += b5 + k9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003915 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003916
3917 b7 += k12;
3918 b6 += b7 + k11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003919 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003920
3921 b9 += k14;
3922 b8 += b9 + k13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003923 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003924
3925 b11 += k16;
3926 b10 += b11 + k15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003927 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003928
3929 b13 += k1 + t2;
3930 b12 += b13 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08003931 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003932
3933 b15 += k3 + 5;
3934 b14 += b15 + k2 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08003935 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003936
3937 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003938 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003939
3940 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003941 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003942
3943 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003944 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003945
3946 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003947 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003948
3949 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003950 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003951
3952 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003953 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003954
3955 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003956 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003957
3958 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003959 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003960
3961 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08003962 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003963
3964 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08003965 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003966
3967 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08003968 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003969
3970 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003971 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003972
3973 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003974 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06003975
3976 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003977 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003978
3979 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003980 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06003981
3982 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003983 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06003984
3985 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08003986 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06003987
3988 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08003989 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06003990
3991 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08003992 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06003993
3994 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08003995 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06003996
3997 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08003998 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06003999
4000 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004001 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004002
4003 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004004 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004005
4006 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004007 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004008
4009 b1 += k7;
4010 b0 += b1 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08004011 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004012
4013 b3 += k9;
4014 b2 += b3 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08004015 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004016
4017 b5 += k11;
4018 b4 += b5 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08004019 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004020
4021 b7 += k13;
4022 b6 += b7 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08004023 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004024
4025 b9 += k15;
4026 b8 += b9 + k14;
Joe Perchese0a2d502016-03-10 03:43:22 -08004027 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004028
4029 b11 += k0;
4030 b10 += b11 + k16;
Joe Perchese0a2d502016-03-10 03:43:22 -08004031 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004032
4033 b13 += k2 + t0;
4034 b12 += b13 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004035 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004036
4037 b15 += k4 + 6;
4038 b14 += b15 + k3 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004039 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004040
4041 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004042 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004043
4044 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004045 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004046
4047 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004048 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004049
4050 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004051 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004052
4053 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004054 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004055
4056 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004057 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004058
4059 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004060 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004061
4062 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004063 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004064
4065 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004066 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004067
4068 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004069 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004070
4071 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004072 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004073
4074 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004075 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004076
4077 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004078 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004079
4080 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004081 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004082
4083 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004084 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004085
4086 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004087 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004088
4089 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004090 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004091
4092 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004093 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004094
4095 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004096 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004097
4098 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004099 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004100
4101 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004102 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004103
4104 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004105 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004106
4107 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004108 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004109
4110 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004111 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004112
4113 b1 += k8;
4114 b0 += b1 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004115 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004116
4117 b3 += k10;
4118 b2 += b3 + k9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004119 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004120
4121 b5 += k12;
4122 b4 += b5 + k11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004123 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004124
4125 b7 += k14;
4126 b6 += b7 + k13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004127 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004128
4129 b9 += k16;
4130 b8 += b9 + k15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004131 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004132
4133 b11 += k1;
4134 b10 += b11 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08004135 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004136
4137 b13 += k3 + t1;
4138 b12 += b13 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08004139 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004140
4141 b15 += k5 + 7;
4142 b14 += b15 + k4 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08004143 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004144
4145 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004146 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004147
4148 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004149 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004150
4151 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004152 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004153
4154 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004155 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004156
4157 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004158 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004159
4160 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004161 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004162
4163 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004164 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004165
4166 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004167 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004168
4169 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004170 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004171
4172 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004173 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004174
4175 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004176 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004177
4178 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004179 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004180
4181 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004182 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004183
4184 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004185 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004186
4187 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004188 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004189
4190 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004191 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004192
4193 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004194 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004195
4196 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004197 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004198
4199 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004200 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004201
4202 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004203 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004204
4205 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004206 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004207
4208 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004209 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004210
4211 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004212 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004213
4214 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004215 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004216
4217 b1 += k9;
4218 b0 += b1 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08004219 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004220
4221 b3 += k11;
4222 b2 += b3 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08004223 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004224
4225 b5 += k13;
4226 b4 += b5 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08004227 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004228
4229 b7 += k15;
4230 b6 += b7 + k14;
Joe Perchese0a2d502016-03-10 03:43:22 -08004231 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004232
4233 b9 += k0;
4234 b8 += b9 + k16;
Joe Perchese0a2d502016-03-10 03:43:22 -08004235 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004236
4237 b11 += k2;
4238 b10 += b11 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004239 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004240
4241 b13 += k4 + t2;
4242 b12 += b13 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004243 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004244
4245 b15 += k6 + 8;
4246 b14 += b15 + k5 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08004247 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004248
4249 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004250 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004251
4252 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004253 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004254
4255 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004256 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004257
4258 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004259 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004260
4261 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004262 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004263
4264 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004265 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004266
4267 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004268 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004269
4270 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004271 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004272
4273 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004274 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004275
4276 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004277 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004278
4279 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004280 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004281
4282 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004283 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004284
4285 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004286 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004287
4288 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004289 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004290
4291 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004292 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004293
4294 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004295 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004296
4297 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004298 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004299
4300 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004301 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004302
4303 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004304 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004305
4306 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004307 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004308
4309 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004310 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004311
4312 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004313 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004314
4315 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004316 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004317
4318 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004319 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004320
4321 b1 += k10;
4322 b0 += b1 + k9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004323 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004324
4325 b3 += k12;
4326 b2 += b3 + k11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004327 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004328
4329 b5 += k14;
4330 b4 += b5 + k13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004331 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004332
4333 b7 += k16;
4334 b6 += b7 + k15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004335 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004336
4337 b9 += k1;
4338 b8 += b9 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08004339 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004340
4341 b11 += k3;
4342 b10 += b11 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08004343 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004344
4345 b13 += k5 + t0;
4346 b12 += b13 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08004347 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004348
4349 b15 += k7 + 9;
4350 b14 += b15 + k6 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004351 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004352
4353 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004354 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004355
4356 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004357 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004358
4359 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004360 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004361
4362 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004363 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004364
4365 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004366 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004367
4368 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004369 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004370
4371 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004372 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004373
4374 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004375 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004376
4377 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004378 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004379
4380 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004381 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004382
4383 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004384 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004385
4386 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004387 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004388
4389 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004390 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004391
4392 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004393 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004394
4395 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004396 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004397
4398 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004399 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004400
4401 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004402 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004403
4404 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004405 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004406
4407 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004408 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004409
4410 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004411 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004412
4413 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004414 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004415
4416 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004417 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004418
4419 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004420 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004421
4422 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004423 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004424
4425 b1 += k11;
4426 b0 += b1 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08004427 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004428
4429 b3 += k13;
4430 b2 += b3 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08004431 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004432
4433 b5 += k15;
4434 b4 += b5 + k14;
Joe Perchese0a2d502016-03-10 03:43:22 -08004435 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004436
4437 b7 += k0;
4438 b6 += b7 + k16;
Joe Perchese0a2d502016-03-10 03:43:22 -08004439 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004440
4441 b9 += k2;
4442 b8 += b9 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004443 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004444
4445 b11 += k4;
4446 b10 += b11 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004447 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004448
4449 b13 += k6 + t1;
4450 b12 += b13 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004451 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004452
4453 b15 += k8 + 10;
4454 b14 += b15 + k7 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08004455 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004456
4457 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004458 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004459
4460 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004461 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004462
4463 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004464 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004465
4466 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004467 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004468
4469 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004470 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004471
4472 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004473 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004474
4475 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004476 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004477
4478 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004479 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004480
4481 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004482 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004483
4484 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004485 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004486
4487 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004488 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004489
4490 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004491 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004492
4493 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004494 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004495
4496 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004497 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004498
4499 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004500 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004501
4502 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004503 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004504
4505 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004506 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004507
4508 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004509 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004510
4511 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004512 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004513
4514 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004515 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004516
4517 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004518 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004519
4520 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004521 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004522
4523 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004524 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004525
4526 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004527 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004528
4529 b1 += k12;
4530 b0 += b1 + k11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004531 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004532
4533 b3 += k14;
4534 b2 += b3 + k13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004535 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004536
4537 b5 += k16;
4538 b4 += b5 + k15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004539 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004540
4541 b7 += k1;
4542 b6 += b7 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08004543 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004544
4545 b9 += k3;
4546 b8 += b9 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08004547 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004548
4549 b11 += k5;
4550 b10 += b11 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08004551 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004552
4553 b13 += k7 + t2;
4554 b12 += b13 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08004555 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004556
4557 b15 += k9 + 11;
4558 b14 += b15 + k8 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08004559 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004560
4561 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004562 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004563
4564 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004565 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004566
4567 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004568 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004569
4570 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004571 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004572
4573 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004574 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004575
4576 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004577 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004578
4579 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004580 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004581
4582 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004583 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004584
4585 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004586 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004587
4588 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004589 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004590
4591 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004592 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004593
4594 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004595 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004596
4597 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004598 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004599
4600 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004601 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004602
4603 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004604 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004605
4606 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004607 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004608
4609 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004610 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004611
4612 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004613 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004614
4615 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004616 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004617
4618 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004619 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004620
4621 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004622 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004623
4624 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004625 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004626
4627 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004628 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004629
4630 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004631 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004632
4633 b1 += k13;
4634 b0 += b1 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08004635 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004636
4637 b3 += k15;
4638 b2 += b3 + k14;
Joe Perchese0a2d502016-03-10 03:43:22 -08004639 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004640
4641 b5 += k0;
4642 b4 += b5 + k16;
Joe Perchese0a2d502016-03-10 03:43:22 -08004643 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004644
4645 b7 += k2;
4646 b6 += b7 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004647 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004648
4649 b9 += k4;
4650 b8 += b9 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004651 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004652
4653 b11 += k6;
4654 b10 += b11 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004655 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004656
4657 b13 += k8 + t0;
4658 b12 += b13 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004659 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004660
4661 b15 += k10 + 12;
4662 b14 += b15 + k9 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004663 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004664
4665 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004666 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004667
4668 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004669 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004670
4671 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004672 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004673
4674 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004675 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004676
4677 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004678 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004679
4680 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004681 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004682
4683 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004684 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004685
4686 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004687 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004688
4689 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004690 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004691
4692 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004693 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004694
4695 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004696 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004697
4698 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004699 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004700
4701 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004702 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004703
4704 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004705 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004706
4707 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004708 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004709
4710 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004711 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004712
4713 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004714 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004715
4716 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004717 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004718
4719 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004720 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004721
4722 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004723 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004724
4725 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004726 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004727
4728 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004729 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004730
4731 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004732 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004733
4734 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004735 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004736
4737 b1 += k14;
4738 b0 += b1 + k13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004739 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004740
4741 b3 += k16;
4742 b2 += b3 + k15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004743 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004744
4745 b5 += k1;
4746 b4 += b5 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08004747 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004748
4749 b7 += k3;
4750 b6 += b7 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08004751 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004752
4753 b9 += k5;
4754 b8 += b9 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08004755 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004756
4757 b11 += k7;
4758 b10 += b11 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08004759 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004760
4761 b13 += k9 + t1;
4762 b12 += b13 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08004763 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004764
4765 b15 += k11 + 13;
4766 b14 += b15 + k10 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08004767 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004768
4769 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004770 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004771
4772 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004773 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004774
4775 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004776 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004777
4778 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004779 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004780
4781 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004782 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004783
4784 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004785 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004786
4787 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004788 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004789
4790 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004791 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004792
4793 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004794 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004795
4796 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004797 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004798
4799 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004800 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004801
4802 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004803 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004804
4805 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004806 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004807
4808 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004809 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004810
4811 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004812 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004813
4814 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004815 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004816
4817 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004818 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004819
4820 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004821 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004822
4823 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004824 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004825
4826 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004827 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004828
4829 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004830 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004831
4832 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004833 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004834
4835 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004836 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004837
4838 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004839 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004840
4841 b1 += k15;
4842 b0 += b1 + k14;
Joe Perchese0a2d502016-03-10 03:43:22 -08004843 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004844
4845 b3 += k0;
4846 b2 += b3 + k16;
Joe Perchese0a2d502016-03-10 03:43:22 -08004847 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004848
4849 b5 += k2;
4850 b4 += b5 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004851 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004852
4853 b7 += k4;
4854 b6 += b7 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004855 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004856
4857 b9 += k6;
4858 b8 += b9 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004859 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004860
4861 b11 += k8;
4862 b10 += b11 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004863 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004864
4865 b13 += k10 + t2;
4866 b12 += b13 + k9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004867 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004868
4869 b15 += k12 + 14;
4870 b14 += b15 + k11 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08004871 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004872
4873 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004874 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004875
4876 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004877 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004878
4879 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004880 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004881
4882 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004883 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004884
4885 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004886 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004887
4888 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004889 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004890
4891 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004892 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004893
4894 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004895 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004896
4897 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004898 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004899
4900 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004901 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004902
4903 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004904 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004905
4906 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004907 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004908
4909 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004910 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004911
4912 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004913 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004914
4915 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004916 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004917
4918 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004919 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004920
4921 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004922 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004923
4924 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004925 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004926
4927 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004928 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004929
4930 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004931 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004932
4933 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004934 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004935
4936 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004937 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004938
4939 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004940 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004941
4942 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004943 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004944
4945 b1 += k16;
4946 b0 += b1 + k15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004947 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004948
4949 b3 += k1;
4950 b2 += b3 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08004951 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004952
4953 b5 += k3;
4954 b4 += b5 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08004955 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004956
4957 b7 += k5;
4958 b6 += b7 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08004959 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004960
4961 b9 += k7;
4962 b8 += b9 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08004963 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06004964
4965 b11 += k9;
4966 b10 += b11 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08004967 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004968
4969 b13 += k11 + t0;
4970 b12 += b13 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08004971 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004972
4973 b15 += k13 + 15;
4974 b14 += b15 + k12 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004975 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004976
4977 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08004978 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06004979
4980 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08004981 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06004982
4983 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08004984 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06004985
4986 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08004987 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06004988
4989 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08004990 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06004991
4992 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08004993 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06004994
4995 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08004996 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06004997
4998 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08004999 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005000
5001 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005002 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005003
5004 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005005 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005006
5007 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005008 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005009
5010 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005011 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005012
5013 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005014 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005015
5016 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005017 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005018
5019 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005020 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005021
5022 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005023 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005024
5025 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005026 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005027
5028 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005029 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005030
5031 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005032 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005033
5034 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005035 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005036
5037 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005038 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005039
5040 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005041 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005042
5043 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005044 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005045
5046 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005047 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005048
5049 b1 += k0;
5050 b0 += b1 + k16;
Joe Perchese0a2d502016-03-10 03:43:22 -08005051 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005052
5053 b3 += k2;
5054 b2 += b3 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005055 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005056
5057 b5 += k4;
5058 b4 += b5 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005059 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005060
5061 b7 += k6;
5062 b6 += b7 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005063 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005064
5065 b9 += k8;
5066 b8 += b9 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005067 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005068
5069 b11 += k10;
5070 b10 += b11 + k9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005071 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005072
5073 b13 += k12 + t1;
5074 b12 += b13 + k11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005075 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005076
5077 b15 += k14 + 16;
5078 b14 += b15 + k13 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08005079 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005080
5081 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005082 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005083
5084 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005085 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005086
5087 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005088 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005089
5090 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005091 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005092
5093 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005094 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005095
5096 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005097 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005098
5099 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005100 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005101
5102 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005103 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005104
5105 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005106 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005107
5108 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005109 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005110
5111 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005112 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005113
5114 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005115 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005116
5117 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005118 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005119
5120 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005121 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005122
5123 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005124 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005125
5126 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005127 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005128
5129 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005130 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005131
5132 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005133 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005134
5135 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005136 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005137
5138 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005139 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005140
5141 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005142 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005143
5144 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005145 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005146
5147 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005148 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005149
5150 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005151 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005152
5153 b1 += k1;
5154 b0 += b1 + k0;
Joe Perchese0a2d502016-03-10 03:43:22 -08005155 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005156
5157 b3 += k3;
5158 b2 += b3 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08005159 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005160
5161 b5 += k5;
5162 b4 += b5 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08005163 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005164
5165 b7 += k7;
5166 b6 += b7 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08005167 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005168
5169 b9 += k9;
5170 b8 += b9 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08005171 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005172
5173 b11 += k11;
5174 b10 += b11 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08005175 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005176
5177 b13 += k13 + t2;
5178 b12 += b13 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08005179 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005180
5181 b15 += k15 + 17;
5182 b14 += b15 + k14 + t0;
Joe Perchese0a2d502016-03-10 03:43:22 -08005183 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005184
5185 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005186 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005187
5188 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005189 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005190
5191 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005192 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005193
5194 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005195 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005196
5197 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005198 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005199
5200 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005201 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005202
5203 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005204 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005205
5206 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005207 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005208
5209 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005210 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005211
5212 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005213 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005214
5215 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005216 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005217
5218 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005219 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005220
5221 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005222 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005223
5224 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005225 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005226
5227 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005228 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005229
5230 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005231 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005232
5233 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005234 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005235
5236 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005237 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005238
5239 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005240 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005241
5242 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005243 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005244
5245 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005246 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005247
5248 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005249 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005250
5251 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005252 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005253
5254 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005255 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005256
5257 b1 += k2;
5258 b0 += b1 + k1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005259 b1 = rol64(b1, 24) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005260
5261 b3 += k4;
5262 b2 += b3 + k3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005263 b3 = rol64(b3, 13) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005264
5265 b5 += k6;
5266 b4 += b5 + k5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005267 b5 = rol64(b5, 8) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005268
5269 b7 += k8;
5270 b6 += b7 + k7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005271 b7 = rol64(b7, 47) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005272
5273 b9 += k10;
5274 b8 += b9 + k9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005275 b9 = rol64(b9, 8) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005276
5277 b11 += k12;
5278 b10 += b11 + k11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005279 b11 = rol64(b11, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005280
5281 b13 += k14 + t0;
5282 b12 += b13 + k13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005283 b13 = rol64(b13, 22) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005284
5285 b15 += k16 + 18;
5286 b14 += b15 + k15 + t1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005287 b15 = rol64(b15, 37) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005288
5289 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005290 b9 = rol64(b9, 38) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005291
5292 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005293 b13 = rol64(b13, 19) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005294
5295 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005296 b11 = rol64(b11, 10) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005297
5298 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005299 b15 = rol64(b15, 55) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005300
5301 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005302 b7 = rol64(b7, 49) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005303
5304 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005305 b3 = rol64(b3, 18) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005306
5307 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005308 b5 = rol64(b5, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005309
5310 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005311 b1 = rol64(b1, 52) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005312
5313 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005314 b7 = rol64(b7, 33) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005315
5316 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005317 b5 = rol64(b5, 4) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005318
5319 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005320 b3 = rol64(b3, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005321
5322 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005323 b1 = rol64(b1, 13) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005324
5325 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005326 b15 = rol64(b15, 34) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005327
5328 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005329 b13 = rol64(b13, 41) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005330
5331 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005332 b11 = rol64(b11, 59) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005333
5334 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005335 b9 = rol64(b9, 17) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005336
5337 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005338 b15 = rol64(b15, 5) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005339
5340 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005341 b11 = rol64(b11, 20) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005342
5343 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005344 b13 = rol64(b13, 48) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005345
5346 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005347 b9 = rol64(b9, 41) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005348
5349 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005350 b1 = rol64(b1, 47) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005351
5352 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005353 b5 = rol64(b5, 28) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005354
5355 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005356 b3 = rol64(b3, 16) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005357
5358 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005359 b7 = rol64(b7, 25) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005360
5361 b1 += k3;
5362 b0 += b1 + k2;
Joe Perchese0a2d502016-03-10 03:43:22 -08005363 b1 = rol64(b1, 41) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005364
5365 b3 += k5;
5366 b2 += b3 + k4;
Joe Perchese0a2d502016-03-10 03:43:22 -08005367 b3 = rol64(b3, 9) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005368
5369 b5 += k7;
5370 b4 += b5 + k6;
Joe Perchese0a2d502016-03-10 03:43:22 -08005371 b5 = rol64(b5, 37) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005372
5373 b7 += k9;
5374 b6 += b7 + k8;
Joe Perchese0a2d502016-03-10 03:43:22 -08005375 b7 = rol64(b7, 31) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005376
5377 b9 += k11;
5378 b8 += b9 + k10;
Joe Perchese0a2d502016-03-10 03:43:22 -08005379 b9 = rol64(b9, 12) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005380
5381 b11 += k13;
5382 b10 += b11 + k12;
Joe Perchese0a2d502016-03-10 03:43:22 -08005383 b11 = rol64(b11, 47) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005384
5385 b13 += k15 + t1;
5386 b12 += b13 + k14;
Joe Perchese0a2d502016-03-10 03:43:22 -08005387 b13 = rol64(b13, 44) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005388
5389 b15 += k0 + 19;
5390 b14 += b15 + k16 + t2;
Joe Perchese0a2d502016-03-10 03:43:22 -08005391 b15 = rol64(b15, 30) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005392
5393 b0 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005394 b9 = rol64(b9, 16) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005395
5396 b2 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005397 b13 = rol64(b13, 34) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005398
5399 b6 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005400 b11 = rol64(b11, 56) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005401
5402 b4 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005403 b15 = rol64(b15, 51) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005404
5405 b10 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005406 b7 = rol64(b7, 4) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005407
5408 b12 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005409 b3 = rol64(b3, 53) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005410
5411 b14 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005412 b5 = rol64(b5, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005413
5414 b8 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005415 b1 = rol64(b1, 41) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005416
5417 b0 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005418 b7 = rol64(b7, 31) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005419
5420 b2 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005421 b5 = rol64(b5, 44) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005422
5423 b4 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005424 b3 = rol64(b3, 47) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005425
5426 b6 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005427 b1 = rol64(b1, 46) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005428
5429 b12 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005430 b15 = rol64(b15, 19) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005431
5432 b14 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005433 b13 = rol64(b13, 42) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005434
5435 b8 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005436 b11 = rol64(b11, 44) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005437
5438 b10 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005439 b9 = rol64(b9, 25) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005440
5441 b0 += b15;
Joe Perchese0a2d502016-03-10 03:43:22 -08005442 b15 = rol64(b15, 9) ^ b0;
Jake Edge0109ce72014-05-20 07:58:40 -06005443
5444 b2 += b11;
Joe Perchese0a2d502016-03-10 03:43:22 -08005445 b11 = rol64(b11, 48) ^ b2;
Jake Edge0109ce72014-05-20 07:58:40 -06005446
5447 b6 += b13;
Joe Perchese0a2d502016-03-10 03:43:22 -08005448 b13 = rol64(b13, 35) ^ b6;
Jake Edge0109ce72014-05-20 07:58:40 -06005449
5450 b4 += b9;
Joe Perchese0a2d502016-03-10 03:43:22 -08005451 b9 = rol64(b9, 52) ^ b4;
Jake Edge0109ce72014-05-20 07:58:40 -06005452
5453 b14 += b1;
Joe Perchese0a2d502016-03-10 03:43:22 -08005454 b1 = rol64(b1, 23) ^ b14;
Jake Edge0109ce72014-05-20 07:58:40 -06005455
5456 b8 += b5;
Joe Perchese0a2d502016-03-10 03:43:22 -08005457 b5 = rol64(b5, 31) ^ b8;
Jake Edge0109ce72014-05-20 07:58:40 -06005458
5459 b10 += b3;
Joe Perchese0a2d502016-03-10 03:43:22 -08005460 b3 = rol64(b3, 37) ^ b10;
Jake Edge0109ce72014-05-20 07:58:40 -06005461
5462 b12 += b7;
Joe Perchese0a2d502016-03-10 03:43:22 -08005463 b7 = rol64(b7, 20) ^ b12;
Jake Edge0109ce72014-05-20 07:58:40 -06005464
5465 output[0] = b0 + k3;
5466 output[1] = b1 + k4;
5467 output[2] = b2 + k5;
5468 output[3] = b3 + k6;
5469 output[4] = b4 + k7;
5470 output[5] = b5 + k8;
5471 output[6] = b6 + k9;
5472 output[7] = b7 + k10;
5473 output[8] = b8 + k11;
5474 output[9] = b9 + k12;
5475 output[10] = b10 + k13;
5476 output[11] = b11 + k14;
5477 output[12] = b12 + k15;
5478 output[13] = b13 + k16 + t2;
5479 output[14] = b14 + k0 + t0;
5480 output[15] = b15 + k1 + 20;
5481}
5482
5483void threefish_decrypt_1024(struct threefish_key *key_ctx, u64 *input,
5484 u64 *output)
5485{
5486 u64 b0 = input[0], b1 = input[1],
5487 b2 = input[2], b3 = input[3],
5488 b4 = input[4], b5 = input[5],
5489 b6 = input[6], b7 = input[7],
5490 b8 = input[8], b9 = input[9],
5491 b10 = input[10], b11 = input[11],
5492 b12 = input[12], b13 = input[13],
5493 b14 = input[14], b15 = input[15];
5494 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
5495 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
5496 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
5497 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
5498 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
5499 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
5500 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
5501 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
5502 k16 = key_ctx->key[16];
5503 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
5504 t2 = key_ctx->tweak[2];
5505 u64 tmp;
5506
5507 b0 -= k3;
5508 b1 -= k4;
5509 b2 -= k5;
5510 b3 -= k6;
5511 b4 -= k7;
5512 b5 -= k8;
5513 b6 -= k9;
5514 b7 -= k10;
5515 b8 -= k11;
5516 b9 -= k12;
5517 b10 -= k13;
5518 b11 -= k14;
5519 b12 -= k15;
5520 b13 -= k16 + t2;
5521 b14 -= k0 + t0;
5522 b15 -= k1 + 20;
5523 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005524 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06005525 b12 -= b7;
5526
5527 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005528 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06005529 b10 -= b3;
5530
5531 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005532 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06005533 b8 -= b5;
5534
5535 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005536 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06005537 b14 -= b1;
5538
5539 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005540 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06005541 b4 -= b9;
5542
5543 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005544 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06005545 b6 -= b13;
5546
5547 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005548 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06005549 b2 -= b11;
5550
5551 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005552 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06005553 b0 -= b15;
5554
5555 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005556 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06005557 b10 -= b9;
5558
5559 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005560 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06005561 b8 -= b11;
5562
5563 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005564 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06005565 b14 -= b13;
5566
5567 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005568 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06005569 b12 -= b15;
5570
5571 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005572 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06005573 b6 -= b1;
5574
5575 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005576 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06005577 b4 -= b3;
5578
5579 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005580 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06005581 b2 -= b5;
5582
5583 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005584 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06005585 b0 -= b7;
5586
5587 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005588 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06005589 b8 -= b1;
5590
5591 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005592 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06005593 b14 -= b5;
5594
5595 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005596 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06005597 b12 -= b3;
5598
5599 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005600 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06005601 b10 -= b7;
5602
5603 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005604 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06005605 b4 -= b15;
5606
5607 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005608 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06005609 b6 -= b11;
5610
5611 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005612 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06005613 b2 -= b13;
5614
5615 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005616 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06005617 b0 -= b9;
5618
5619 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005620 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06005621 b14 -= b15 + k16 + t2;
5622 b15 -= k0 + 19;
5623
5624 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005625 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06005626 b12 -= b13 + k14;
5627 b13 -= k15 + t1;
5628
5629 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005630 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06005631 b10 -= b11 + k12;
5632 b11 -= k13;
5633
5634 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005635 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06005636 b8 -= b9 + k10;
5637 b9 -= k11;
5638
5639 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005640 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06005641 b6 -= b7 + k8;
5642 b7 -= k9;
5643
5644 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005645 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06005646 b4 -= b5 + k6;
5647 b5 -= k7;
5648
5649 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005650 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06005651 b2 -= b3 + k4;
5652 b3 -= k5;
5653
5654 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005655 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06005656 b0 -= b1 + k2;
5657 b1 -= k3;
5658
5659 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005660 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06005661 b12 -= b7;
5662
5663 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005664 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06005665 b10 -= b3;
5666
5667 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005668 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06005669 b8 -= b5;
5670
5671 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005672 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06005673 b14 -= b1;
5674
5675 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005676 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06005677 b4 -= b9;
5678
5679 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005680 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06005681 b6 -= b13;
5682
5683 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005684 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06005685 b2 -= b11;
5686
5687 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005688 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06005689 b0 -= b15;
5690
5691 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005692 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06005693 b10 -= b9;
5694
5695 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005696 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06005697 b8 -= b11;
5698
5699 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005700 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06005701 b14 -= b13;
5702
5703 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005704 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06005705 b12 -= b15;
5706
5707 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005708 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06005709 b6 -= b1;
5710
5711 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005712 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06005713 b4 -= b3;
5714
5715 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005716 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06005717 b2 -= b5;
5718
5719 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005720 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06005721 b0 -= b7;
5722
5723 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005724 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06005725 b8 -= b1;
5726
5727 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005728 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06005729 b14 -= b5;
5730
5731 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005732 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06005733 b12 -= b3;
5734
5735 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005736 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06005737 b10 -= b7;
5738
5739 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005740 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06005741 b4 -= b15;
5742
5743 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005744 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06005745 b6 -= b11;
5746
5747 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005748 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06005749 b2 -= b13;
5750
5751 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005752 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06005753 b0 -= b9;
5754
5755 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005756 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06005757 b14 -= b15 + k15 + t1;
5758 b15 -= k16 + 18;
5759
5760 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005761 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06005762 b12 -= b13 + k13;
5763 b13 -= k14 + t0;
5764
5765 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005766 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06005767 b10 -= b11 + k11;
5768 b11 -= k12;
5769
5770 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005771 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06005772 b8 -= b9 + k9;
5773 b9 -= k10;
5774
5775 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005776 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06005777 b6 -= b7 + k7;
5778 b7 -= k8;
5779
5780 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005781 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06005782 b4 -= b5 + k5;
5783 b5 -= k6;
5784
5785 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005786 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06005787 b2 -= b3 + k3;
5788 b3 -= k4;
5789
5790 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005791 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06005792 b0 -= b1 + k1;
5793 b1 -= k2;
5794
5795 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005796 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06005797 b12 -= b7;
5798
5799 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005800 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06005801 b10 -= b3;
5802
5803 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005804 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06005805 b8 -= b5;
5806
5807 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005808 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06005809 b14 -= b1;
5810
5811 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005812 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06005813 b4 -= b9;
5814
5815 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005816 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06005817 b6 -= b13;
5818
5819 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005820 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06005821 b2 -= b11;
5822
5823 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005824 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06005825 b0 -= b15;
5826
5827 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005828 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06005829 b10 -= b9;
5830
5831 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005832 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06005833 b8 -= b11;
5834
5835 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005836 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06005837 b14 -= b13;
5838
5839 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005840 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06005841 b12 -= b15;
5842
5843 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005844 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06005845 b6 -= b1;
5846
5847 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005848 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06005849 b4 -= b3;
5850
5851 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005852 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06005853 b2 -= b5;
5854
5855 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005856 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06005857 b0 -= b7;
5858
5859 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005860 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06005861 b8 -= b1;
5862
5863 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005864 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06005865 b14 -= b5;
5866
5867 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005868 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06005869 b12 -= b3;
5870
5871 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005872 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06005873 b10 -= b7;
5874
5875 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005876 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06005877 b4 -= b15;
5878
5879 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005880 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06005881 b6 -= b11;
5882
5883 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005884 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06005885 b2 -= b13;
5886
5887 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005888 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06005889 b0 -= b9;
5890
5891 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005892 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06005893 b14 -= b15 + k14 + t0;
5894 b15 -= k15 + 17;
5895
5896 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005897 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06005898 b12 -= b13 + k12;
5899 b13 -= k13 + t2;
5900
5901 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005902 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06005903 b10 -= b11 + k10;
5904 b11 -= k11;
5905
5906 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005907 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06005908 b8 -= b9 + k8;
5909 b9 -= k9;
5910
5911 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005912 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06005913 b6 -= b7 + k6;
5914 b7 -= k7;
5915
5916 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005917 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06005918 b4 -= b5 + k4;
5919 b5 -= k5;
5920
5921 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005922 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06005923 b2 -= b3 + k2;
5924 b3 -= k3;
5925
5926 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005927 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06005928 b0 -= b1 + k0;
5929 b1 -= k1;
5930
5931 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005932 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06005933 b12 -= b7;
5934
5935 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005936 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06005937 b10 -= b3;
5938
5939 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005940 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06005941 b8 -= b5;
5942
5943 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005944 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06005945 b14 -= b1;
5946
5947 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005948 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06005949 b4 -= b9;
5950
5951 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005952 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06005953 b6 -= b13;
5954
5955 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005956 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06005957 b2 -= b11;
5958
5959 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005960 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06005961 b0 -= b15;
5962
5963 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07005964 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06005965 b10 -= b9;
5966
5967 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005968 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06005969 b8 -= b11;
5970
5971 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07005972 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06005973 b14 -= b13;
5974
5975 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07005976 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06005977 b12 -= b15;
5978
5979 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07005980 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06005981 b6 -= b1;
5982
5983 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07005984 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06005985 b4 -= b3;
5986
5987 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07005988 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06005989 b2 -= b5;
5990
5991 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07005992 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06005993 b0 -= b7;
5994
5995 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07005996 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06005997 b8 -= b1;
5998
5999 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006000 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06006001 b14 -= b5;
6002
6003 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006004 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06006005 b12 -= b3;
6006
6007 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006008 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06006009 b10 -= b7;
6010
6011 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006012 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06006013 b4 -= b15;
6014
6015 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006016 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06006017 b6 -= b11;
6018
6019 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006020 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06006021 b2 -= b13;
6022
6023 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006024 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06006025 b0 -= b9;
6026
6027 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006028 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006029 b14 -= b15 + k13 + t2;
6030 b15 -= k14 + 16;
6031
6032 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006033 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06006034 b12 -= b13 + k11;
6035 b13 -= k12 + t1;
6036
6037 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006038 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06006039 b10 -= b11 + k9;
6040 b11 -= k10;
6041
6042 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006043 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06006044 b8 -= b9 + k7;
6045 b9 -= k8;
6046
6047 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006048 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006049 b6 -= b7 + k5;
6050 b7 -= k6;
6051
6052 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006053 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06006054 b4 -= b5 + k3;
6055 b5 -= k4;
6056
6057 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006058 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06006059 b2 -= b3 + k1;
6060 b3 -= k2;
6061
6062 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006063 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06006064 b0 -= b1 + k16;
6065 b1 -= k0;
6066
6067 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006068 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06006069 b12 -= b7;
6070
6071 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006072 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006073 b10 -= b3;
6074
6075 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006076 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006077 b8 -= b5;
6078
6079 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006080 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06006081 b14 -= b1;
6082
6083 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006084 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06006085 b4 -= b9;
6086
6087 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006088 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06006089 b6 -= b13;
6090
6091 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006092 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06006093 b2 -= b11;
6094
6095 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006096 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06006097 b0 -= b15;
6098
6099 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006100 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06006101 b10 -= b9;
6102
6103 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006104 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006105 b8 -= b11;
6106
6107 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006108 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06006109 b14 -= b13;
6110
6111 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006112 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06006113 b12 -= b15;
6114
6115 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006116 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06006117 b6 -= b1;
6118
6119 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006120 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006121 b4 -= b3;
6122
6123 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006124 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006125 b2 -= b5;
6126
6127 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006128 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006129 b0 -= b7;
6130
6131 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006132 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006133 b8 -= b1;
6134
6135 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006136 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06006137 b14 -= b5;
6138
6139 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006140 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06006141 b12 -= b3;
6142
6143 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006144 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06006145 b10 -= b7;
6146
6147 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006148 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06006149 b4 -= b15;
6150
6151 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006152 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06006153 b6 -= b11;
6154
6155 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006156 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06006157 b2 -= b13;
6158
6159 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006160 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06006161 b0 -= b9;
6162
6163 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006164 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06006165 b14 -= b15 + k12 + t1;
6166 b15 -= k13 + 15;
6167
6168 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006169 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006170 b12 -= b13 + k10;
6171 b13 -= k11 + t0;
6172
6173 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006174 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006175 b10 -= b11 + k8;
6176 b11 -= k9;
6177
6178 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006179 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06006180 b8 -= b9 + k6;
6181 b9 -= k7;
6182
6183 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006184 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006185 b6 -= b7 + k4;
6186 b7 -= k5;
6187
6188 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006189 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006190 b4 -= b5 + k2;
6191 b5 -= k3;
6192
6193 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006194 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06006195 b2 -= b3 + k0;
6196 b3 -= k1;
6197
6198 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006199 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006200 b0 -= b1 + k15;
6201 b1 -= k16;
6202
6203 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006204 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06006205 b12 -= b7;
6206
6207 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006208 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06006209 b10 -= b3;
6210
6211 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006212 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06006213 b8 -= b5;
6214
6215 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006216 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006217 b14 -= b1;
6218
6219 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006220 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006221 b4 -= b9;
6222
6223 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006224 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06006225 b6 -= b13;
6226
6227 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006228 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06006229 b2 -= b11;
6230
6231 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006232 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06006233 b0 -= b15;
6234
6235 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006236 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06006237 b10 -= b9;
6238
6239 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006240 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06006241 b8 -= b11;
6242
6243 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006244 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006245 b14 -= b13;
6246
6247 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006248 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06006249 b12 -= b15;
6250
6251 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006252 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06006253 b6 -= b1;
6254
6255 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006256 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06006257 b4 -= b3;
6258
6259 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006260 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06006261 b2 -= b5;
6262
6263 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006264 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06006265 b0 -= b7;
6266
6267 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006268 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06006269 b8 -= b1;
6270
6271 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006272 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06006273 b14 -= b5;
6274
6275 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006276 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06006277 b12 -= b3;
6278
6279 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006280 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06006281 b10 -= b7;
6282
6283 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006284 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06006285 b4 -= b15;
6286
6287 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006288 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06006289 b6 -= b11;
6290
6291 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006292 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06006293 b2 -= b13;
6294
6295 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006296 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06006297 b0 -= b9;
6298
6299 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006300 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006301 b14 -= b15 + k11 + t0;
6302 b15 -= k12 + 14;
6303
6304 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006305 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06006306 b12 -= b13 + k9;
6307 b13 -= k10 + t2;
6308
6309 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006310 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06006311 b10 -= b11 + k7;
6312 b11 -= k8;
6313
6314 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006315 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06006316 b8 -= b9 + k5;
6317 b9 -= k6;
6318
6319 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006320 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006321 b6 -= b7 + k3;
6322 b7 -= k4;
6323
6324 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006325 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06006326 b4 -= b5 + k1;
6327 b5 -= k2;
6328
6329 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006330 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06006331 b2 -= b3 + k16;
6332 b3 -= k0;
6333
6334 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006335 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06006336 b0 -= b1 + k14;
6337 b1 -= k15;
6338
6339 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006340 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06006341 b12 -= b7;
6342
6343 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006344 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006345 b10 -= b3;
6346
6347 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006348 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006349 b8 -= b5;
6350
6351 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006352 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06006353 b14 -= b1;
6354
6355 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006356 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06006357 b4 -= b9;
6358
6359 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006360 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06006361 b6 -= b13;
6362
6363 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006364 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06006365 b2 -= b11;
6366
6367 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006368 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06006369 b0 -= b15;
6370
6371 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006372 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06006373 b10 -= b9;
6374
6375 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006376 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006377 b8 -= b11;
6378
6379 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006380 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06006381 b14 -= b13;
6382
6383 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006384 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06006385 b12 -= b15;
6386
6387 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006388 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06006389 b6 -= b1;
6390
6391 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006392 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006393 b4 -= b3;
6394
6395 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006396 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006397 b2 -= b5;
6398
6399 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006400 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006401 b0 -= b7;
6402
6403 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006404 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006405 b8 -= b1;
6406
6407 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006408 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06006409 b14 -= b5;
6410
6411 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006412 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06006413 b12 -= b3;
6414
6415 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006416 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06006417 b10 -= b7;
6418
6419 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006420 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06006421 b4 -= b15;
6422
6423 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006424 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06006425 b6 -= b11;
6426
6427 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006428 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06006429 b2 -= b13;
6430
6431 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006432 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06006433 b0 -= b9;
6434
6435 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006436 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06006437 b14 -= b15 + k10 + t2;
6438 b15 -= k11 + 13;
6439
6440 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006441 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006442 b12 -= b13 + k8;
6443 b13 -= k9 + t1;
6444
6445 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006446 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006447 b10 -= b11 + k6;
6448 b11 -= k7;
6449
6450 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006451 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06006452 b8 -= b9 + k4;
6453 b9 -= k5;
6454
6455 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006456 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006457 b6 -= b7 + k2;
6458 b7 -= k3;
6459
6460 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006461 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006462 b4 -= b5 + k0;
6463 b5 -= k1;
6464
6465 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006466 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06006467 b2 -= b3 + k15;
6468 b3 -= k16;
6469
6470 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006471 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006472 b0 -= b1 + k13;
6473 b1 -= k14;
6474
6475 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006476 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06006477 b12 -= b7;
6478
6479 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006480 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06006481 b10 -= b3;
6482
6483 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006484 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06006485 b8 -= b5;
6486
6487 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006488 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006489 b14 -= b1;
6490
6491 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006492 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006493 b4 -= b9;
6494
6495 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006496 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06006497 b6 -= b13;
6498
6499 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006500 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06006501 b2 -= b11;
6502
6503 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006504 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06006505 b0 -= b15;
6506
6507 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006508 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06006509 b10 -= b9;
6510
6511 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006512 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06006513 b8 -= b11;
6514
6515 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006516 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006517 b14 -= b13;
6518
6519 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006520 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06006521 b12 -= b15;
6522
6523 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006524 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06006525 b6 -= b1;
6526
6527 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006528 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06006529 b4 -= b3;
6530
6531 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006532 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06006533 b2 -= b5;
6534
6535 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006536 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06006537 b0 -= b7;
6538
6539 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006540 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06006541 b8 -= b1;
6542
6543 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006544 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06006545 b14 -= b5;
6546
6547 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006548 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06006549 b12 -= b3;
6550
6551 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006552 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06006553 b10 -= b7;
6554
6555 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006556 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06006557 b4 -= b15;
6558
6559 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006560 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06006561 b6 -= b11;
6562
6563 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006564 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06006565 b2 -= b13;
6566
6567 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006568 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06006569 b0 -= b9;
6570
6571 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006572 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006573 b14 -= b15 + k9 + t1;
6574 b15 -= k10 + 12;
6575
6576 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006577 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06006578 b12 -= b13 + k7;
6579 b13 -= k8 + t0;
6580
6581 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006582 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06006583 b10 -= b11 + k5;
6584 b11 -= k6;
6585
6586 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006587 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06006588 b8 -= b9 + k3;
6589 b9 -= k4;
6590
6591 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006592 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006593 b6 -= b7 + k1;
6594 b7 -= k2;
6595
6596 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006597 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06006598 b4 -= b5 + k16;
6599 b5 -= k0;
6600
6601 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006602 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06006603 b2 -= b3 + k14;
6604 b3 -= k15;
6605
6606 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006607 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06006608 b0 -= b1 + k12;
6609 b1 -= k13;
6610
6611 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006612 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06006613 b12 -= b7;
6614
6615 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006616 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006617 b10 -= b3;
6618
6619 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006620 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006621 b8 -= b5;
6622
6623 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006624 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06006625 b14 -= b1;
6626
6627 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006628 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06006629 b4 -= b9;
6630
6631 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006632 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06006633 b6 -= b13;
6634
6635 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006636 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06006637 b2 -= b11;
6638
6639 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006640 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06006641 b0 -= b15;
6642
6643 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006644 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06006645 b10 -= b9;
6646
6647 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006648 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006649 b8 -= b11;
6650
6651 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006652 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06006653 b14 -= b13;
6654
6655 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006656 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06006657 b12 -= b15;
6658
6659 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006660 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06006661 b6 -= b1;
6662
6663 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006664 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006665 b4 -= b3;
6666
6667 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006668 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006669 b2 -= b5;
6670
6671 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006672 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006673 b0 -= b7;
6674
6675 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006676 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006677 b8 -= b1;
6678
6679 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006680 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06006681 b14 -= b5;
6682
6683 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006684 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06006685 b12 -= b3;
6686
6687 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006688 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06006689 b10 -= b7;
6690
6691 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006692 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06006693 b4 -= b15;
6694
6695 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006696 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06006697 b6 -= b11;
6698
6699 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006700 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06006701 b2 -= b13;
6702
6703 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006704 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06006705 b0 -= b9;
6706
6707 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006708 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06006709 b14 -= b15 + k8 + t0;
6710 b15 -= k9 + 11;
6711
6712 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006713 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006714 b12 -= b13 + k6;
6715 b13 -= k7 + t2;
6716
6717 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006718 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006719 b10 -= b11 + k4;
6720 b11 -= k5;
6721
6722 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006723 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06006724 b8 -= b9 + k2;
6725 b9 -= k3;
6726
6727 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006728 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006729 b6 -= b7 + k0;
6730 b7 -= k1;
6731
6732 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006733 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006734 b4 -= b5 + k15;
6735 b5 -= k16;
6736
6737 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006738 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06006739 b2 -= b3 + k13;
6740 b3 -= k14;
6741
6742 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006743 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006744 b0 -= b1 + k11;
6745 b1 -= k12;
6746
6747 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006748 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06006749 b12 -= b7;
6750
6751 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006752 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06006753 b10 -= b3;
6754
6755 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006756 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06006757 b8 -= b5;
6758
6759 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006760 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006761 b14 -= b1;
6762
6763 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006764 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006765 b4 -= b9;
6766
6767 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006768 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06006769 b6 -= b13;
6770
6771 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006772 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06006773 b2 -= b11;
6774
6775 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006776 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06006777 b0 -= b15;
6778
6779 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006780 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06006781 b10 -= b9;
6782
6783 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006784 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06006785 b8 -= b11;
6786
6787 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006788 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006789 b14 -= b13;
6790
6791 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006792 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06006793 b12 -= b15;
6794
6795 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006796 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06006797 b6 -= b1;
6798
6799 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006800 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06006801 b4 -= b3;
6802
6803 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006804 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06006805 b2 -= b5;
6806
6807 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006808 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06006809 b0 -= b7;
6810
6811 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006812 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06006813 b8 -= b1;
6814
6815 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006816 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06006817 b14 -= b5;
6818
6819 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006820 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06006821 b12 -= b3;
6822
6823 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006824 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06006825 b10 -= b7;
6826
6827 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006828 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06006829 b4 -= b15;
6830
6831 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006832 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06006833 b6 -= b11;
6834
6835 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006836 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06006837 b2 -= b13;
6838
6839 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006840 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06006841 b0 -= b9;
6842
6843 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006844 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006845 b14 -= b15 + k7 + t2;
6846 b15 -= k8 + 10;
6847
6848 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006849 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06006850 b12 -= b13 + k5;
6851 b13 -= k6 + t1;
6852
6853 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006854 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06006855 b10 -= b11 + k3;
6856 b11 -= k4;
6857
6858 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006859 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06006860 b8 -= b9 + k1;
6861 b9 -= k2;
6862
6863 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006864 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006865 b6 -= b7 + k16;
6866 b7 -= k0;
6867
6868 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006869 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06006870 b4 -= b5 + k14;
6871 b5 -= k15;
6872
6873 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006874 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06006875 b2 -= b3 + k12;
6876 b3 -= k13;
6877
6878 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006879 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06006880 b0 -= b1 + k10;
6881 b1 -= k11;
6882
6883 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006884 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06006885 b12 -= b7;
6886
6887 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006888 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06006889 b10 -= b3;
6890
6891 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006892 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006893 b8 -= b5;
6894
6895 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006896 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06006897 b14 -= b1;
6898
6899 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006900 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06006901 b4 -= b9;
6902
6903 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006904 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06006905 b6 -= b13;
6906
6907 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006908 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06006909 b2 -= b11;
6910
6911 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006912 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06006913 b0 -= b15;
6914
6915 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006916 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06006917 b10 -= b9;
6918
6919 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006920 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006921 b8 -= b11;
6922
6923 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006924 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06006925 b14 -= b13;
6926
6927 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006928 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06006929 b12 -= b15;
6930
6931 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006932 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06006933 b6 -= b1;
6934
6935 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006936 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006937 b4 -= b3;
6938
6939 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006940 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006941 b2 -= b5;
6942
6943 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006944 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06006945 b0 -= b7;
6946
6947 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006948 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06006949 b8 -= b1;
6950
6951 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006952 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06006953 b14 -= b5;
6954
6955 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006956 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06006957 b12 -= b3;
6958
6959 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006960 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06006961 b10 -= b7;
6962
6963 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07006964 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06006965 b4 -= b15;
6966
6967 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07006968 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06006969 b6 -= b11;
6970
6971 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07006972 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06006973 b2 -= b13;
6974
6975 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07006976 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06006977 b0 -= b9;
6978
6979 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07006980 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06006981 b14 -= b15 + k6 + t1;
6982 b15 -= k7 + 9;
6983
6984 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07006985 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06006986 b12 -= b13 + k4;
6987 b13 -= k5 + t0;
6988
6989 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07006990 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06006991 b10 -= b11 + k2;
6992 b11 -= k3;
6993
6994 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07006995 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06006996 b8 -= b9 + k0;
6997 b9 -= k1;
6998
6999 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007000 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007001 b6 -= b7 + k15;
7002 b7 -= k16;
7003
7004 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007005 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007006 b4 -= b5 + k13;
7007 b5 -= k14;
7008
7009 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007010 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06007011 b2 -= b3 + k11;
7012 b3 -= k12;
7013
7014 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007015 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007016 b0 -= b1 + k9;
7017 b1 -= k10;
7018
7019 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007020 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06007021 b12 -= b7;
7022
7023 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007024 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06007025 b10 -= b3;
7026
7027 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007028 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06007029 b8 -= b5;
7030
7031 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007032 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007033 b14 -= b1;
7034
7035 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007036 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007037 b4 -= b9;
7038
7039 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007040 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06007041 b6 -= b13;
7042
7043 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007044 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06007045 b2 -= b11;
7046
7047 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007048 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06007049 b0 -= b15;
7050
7051 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007052 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06007053 b10 -= b9;
7054
7055 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007056 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06007057 b8 -= b11;
7058
7059 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007060 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007061 b14 -= b13;
7062
7063 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007064 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06007065 b12 -= b15;
7066
7067 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007068 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06007069 b6 -= b1;
7070
7071 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007072 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06007073 b4 -= b3;
7074
7075 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007076 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06007077 b2 -= b5;
7078
7079 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007080 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06007081 b0 -= b7;
7082
7083 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007084 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06007085 b8 -= b1;
7086
7087 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007088 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06007089 b14 -= b5;
7090
7091 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007092 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06007093 b12 -= b3;
7094
7095 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007096 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06007097 b10 -= b7;
7098
7099 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007100 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06007101 b4 -= b15;
7102
7103 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007104 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06007105 b6 -= b11;
7106
7107 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007108 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06007109 b2 -= b13;
7110
7111 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007112 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06007113 b0 -= b9;
7114
7115 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007116 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007117 b14 -= b15 + k5 + t0;
7118 b15 -= k6 + 8;
7119
7120 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007121 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06007122 b12 -= b13 + k3;
7123 b13 -= k4 + t2;
7124
7125 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007126 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06007127 b10 -= b11 + k1;
7128 b11 -= k2;
7129
7130 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007131 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06007132 b8 -= b9 + k16;
7133 b9 -= k0;
7134
7135 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007136 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007137 b6 -= b7 + k14;
7138 b7 -= k15;
7139
7140 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007141 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06007142 b4 -= b5 + k12;
7143 b5 -= k13;
7144
7145 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007146 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06007147 b2 -= b3 + k10;
7148 b3 -= k11;
7149
7150 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007151 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06007152 b0 -= b1 + k8;
7153 b1 -= k9;
7154
7155 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007156 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06007157 b12 -= b7;
7158
7159 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007160 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007161 b10 -= b3;
7162
7163 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007164 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007165 b8 -= b5;
7166
7167 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007168 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06007169 b14 -= b1;
7170
7171 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007172 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06007173 b4 -= b9;
7174
7175 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007176 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06007177 b6 -= b13;
7178
7179 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007180 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06007181 b2 -= b11;
7182
7183 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007184 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06007185 b0 -= b15;
7186
7187 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007188 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06007189 b10 -= b9;
7190
7191 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007192 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007193 b8 -= b11;
7194
7195 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007196 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06007197 b14 -= b13;
7198
7199 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007200 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06007201 b12 -= b15;
7202
7203 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007204 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06007205 b6 -= b1;
7206
7207 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007208 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007209 b4 -= b3;
7210
7211 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007212 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007213 b2 -= b5;
7214
7215 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007216 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007217 b0 -= b7;
7218
7219 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007220 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007221 b8 -= b1;
7222
7223 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007224 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06007225 b14 -= b5;
7226
7227 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007228 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06007229 b12 -= b3;
7230
7231 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007232 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06007233 b10 -= b7;
7234
7235 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007236 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06007237 b4 -= b15;
7238
7239 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007240 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06007241 b6 -= b11;
7242
7243 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007244 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06007245 b2 -= b13;
7246
7247 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007248 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06007249 b0 -= b9;
7250
7251 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007252 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06007253 b14 -= b15 + k4 + t2;
7254 b15 -= k5 + 7;
7255
7256 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007257 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007258 b12 -= b13 + k2;
7259 b13 -= k3 + t1;
7260
7261 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007262 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007263 b10 -= b11 + k0;
7264 b11 -= k1;
7265
7266 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007267 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06007268 b8 -= b9 + k15;
7269 b9 -= k16;
7270
7271 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007272 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007273 b6 -= b7 + k13;
7274 b7 -= k14;
7275
7276 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007277 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007278 b4 -= b5 + k11;
7279 b5 -= k12;
7280
7281 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007282 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06007283 b2 -= b3 + k9;
7284 b3 -= k10;
7285
7286 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007287 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007288 b0 -= b1 + k7;
7289 b1 -= k8;
7290
7291 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007292 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06007293 b12 -= b7;
7294
7295 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007296 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06007297 b10 -= b3;
7298
7299 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007300 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06007301 b8 -= b5;
7302
7303 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007304 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007305 b14 -= b1;
7306
7307 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007308 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007309 b4 -= b9;
7310
7311 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007312 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06007313 b6 -= b13;
7314
7315 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007316 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06007317 b2 -= b11;
7318
7319 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007320 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06007321 b0 -= b15;
7322
7323 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007324 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06007325 b10 -= b9;
7326
7327 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007328 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06007329 b8 -= b11;
7330
7331 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007332 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007333 b14 -= b13;
7334
7335 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007336 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06007337 b12 -= b15;
7338
7339 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007340 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06007341 b6 -= b1;
7342
7343 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007344 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06007345 b4 -= b3;
7346
7347 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007348 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06007349 b2 -= b5;
7350
7351 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007352 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06007353 b0 -= b7;
7354
7355 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007356 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06007357 b8 -= b1;
7358
7359 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007360 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06007361 b14 -= b5;
7362
7363 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007364 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06007365 b12 -= b3;
7366
7367 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007368 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06007369 b10 -= b7;
7370
7371 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007372 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06007373 b4 -= b15;
7374
7375 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007376 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06007377 b6 -= b11;
7378
7379 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007380 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06007381 b2 -= b13;
7382
7383 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007384 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06007385 b0 -= b9;
7386
7387 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007388 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007389 b14 -= b15 + k3 + t1;
7390 b15 -= k4 + 6;
7391
7392 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007393 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06007394 b12 -= b13 + k1;
7395 b13 -= k2 + t0;
7396
7397 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007398 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06007399 b10 -= b11 + k16;
7400 b11 -= k0;
7401
7402 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007403 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06007404 b8 -= b9 + k14;
7405 b9 -= k15;
7406
7407 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007408 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007409 b6 -= b7 + k12;
7410 b7 -= k13;
7411
7412 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007413 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06007414 b4 -= b5 + k10;
7415 b5 -= k11;
7416
7417 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007418 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06007419 b2 -= b3 + k8;
7420 b3 -= k9;
7421
7422 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007423 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06007424 b0 -= b1 + k6;
7425 b1 -= k7;
7426
7427 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007428 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06007429 b12 -= b7;
7430
7431 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007432 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007433 b10 -= b3;
7434
7435 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007436 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007437 b8 -= b5;
7438
7439 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007440 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06007441 b14 -= b1;
7442
7443 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007444 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06007445 b4 -= b9;
7446
7447 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007448 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06007449 b6 -= b13;
7450
7451 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007452 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06007453 b2 -= b11;
7454
7455 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007456 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06007457 b0 -= b15;
7458
7459 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007460 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06007461 b10 -= b9;
7462
7463 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007464 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007465 b8 -= b11;
7466
7467 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007468 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06007469 b14 -= b13;
7470
7471 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007472 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06007473 b12 -= b15;
7474
7475 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007476 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06007477 b6 -= b1;
7478
7479 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007480 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007481 b4 -= b3;
7482
7483 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007484 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007485 b2 -= b5;
7486
7487 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007488 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007489 b0 -= b7;
7490
7491 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007492 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007493 b8 -= b1;
7494
7495 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007496 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06007497 b14 -= b5;
7498
7499 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007500 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06007501 b12 -= b3;
7502
7503 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007504 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06007505 b10 -= b7;
7506
7507 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007508 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06007509 b4 -= b15;
7510
7511 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007512 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06007513 b6 -= b11;
7514
7515 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007516 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06007517 b2 -= b13;
7518
7519 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007520 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06007521 b0 -= b9;
7522
7523 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007524 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06007525 b14 -= b15 + k2 + t0;
7526 b15 -= k3 + 5;
7527
7528 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007529 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007530 b12 -= b13 + k0;
7531 b13 -= k1 + t2;
7532
7533 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007534 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007535 b10 -= b11 + k15;
7536 b11 -= k16;
7537
7538 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007539 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06007540 b8 -= b9 + k13;
7541 b9 -= k14;
7542
7543 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007544 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007545 b6 -= b7 + k11;
7546 b7 -= k12;
7547
7548 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007549 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007550 b4 -= b5 + k9;
7551 b5 -= k10;
7552
7553 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007554 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06007555 b2 -= b3 + k7;
7556 b3 -= k8;
7557
7558 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007559 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007560 b0 -= b1 + k5;
7561 b1 -= k6;
7562
7563 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007564 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06007565 b12 -= b7;
7566
7567 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007568 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06007569 b10 -= b3;
7570
7571 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007572 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06007573 b8 -= b5;
7574
7575 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007576 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007577 b14 -= b1;
7578
7579 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007580 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007581 b4 -= b9;
7582
7583 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007584 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06007585 b6 -= b13;
7586
7587 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007588 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06007589 b2 -= b11;
7590
7591 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007592 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06007593 b0 -= b15;
7594
7595 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007596 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06007597 b10 -= b9;
7598
7599 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007600 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06007601 b8 -= b11;
7602
7603 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007604 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007605 b14 -= b13;
7606
7607 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007608 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06007609 b12 -= b15;
7610
7611 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007612 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06007613 b6 -= b1;
7614
7615 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007616 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06007617 b4 -= b3;
7618
7619 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007620 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06007621 b2 -= b5;
7622
7623 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007624 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06007625 b0 -= b7;
7626
7627 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007628 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06007629 b8 -= b1;
7630
7631 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007632 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06007633 b14 -= b5;
7634
7635 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007636 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06007637 b12 -= b3;
7638
7639 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007640 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06007641 b10 -= b7;
7642
7643 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007644 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06007645 b4 -= b15;
7646
7647 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007648 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06007649 b6 -= b11;
7650
7651 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007652 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06007653 b2 -= b13;
7654
7655 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007656 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06007657 b0 -= b9;
7658
7659 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007660 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007661 b14 -= b15 + k1 + t2;
7662 b15 -= k2 + 4;
7663
7664 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007665 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06007666 b12 -= b13 + k16;
7667 b13 -= k0 + t1;
7668
7669 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007670 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06007671 b10 -= b11 + k14;
7672 b11 -= k15;
7673
7674 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007675 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06007676 b8 -= b9 + k12;
7677 b9 -= k13;
7678
7679 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007680 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007681 b6 -= b7 + k10;
7682 b7 -= k11;
7683
7684 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007685 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06007686 b4 -= b5 + k8;
7687 b5 -= k9;
7688
7689 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007690 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06007691 b2 -= b3 + k6;
7692 b3 -= k7;
7693
7694 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007695 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06007696 b0 -= b1 + k4;
7697 b1 -= k5;
7698
7699 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007700 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06007701 b12 -= b7;
7702
7703 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007704 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007705 b10 -= b3;
7706
7707 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007708 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007709 b8 -= b5;
7710
7711 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007712 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06007713 b14 -= b1;
7714
7715 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007716 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06007717 b4 -= b9;
7718
7719 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007720 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06007721 b6 -= b13;
7722
7723 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007724 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06007725 b2 -= b11;
7726
7727 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007728 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06007729 b0 -= b15;
7730
7731 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007732 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06007733 b10 -= b9;
7734
7735 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007736 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007737 b8 -= b11;
7738
7739 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007740 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06007741 b14 -= b13;
7742
7743 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007744 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06007745 b12 -= b15;
7746
7747 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007748 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06007749 b6 -= b1;
7750
7751 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007752 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007753 b4 -= b3;
7754
7755 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007756 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007757 b2 -= b5;
7758
7759 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007760 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007761 b0 -= b7;
7762
7763 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007764 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007765 b8 -= b1;
7766
7767 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007768 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06007769 b14 -= b5;
7770
7771 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007772 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06007773 b12 -= b3;
7774
7775 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007776 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06007777 b10 -= b7;
7778
7779 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007780 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06007781 b4 -= b15;
7782
7783 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007784 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06007785 b6 -= b11;
7786
7787 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007788 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06007789 b2 -= b13;
7790
7791 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007792 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06007793 b0 -= b9;
7794
7795 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007796 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06007797 b14 -= b15 + k0 + t1;
7798 b15 -= k1 + 3;
7799
7800 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007801 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06007802 b12 -= b13 + k15;
7803 b13 -= k16 + t0;
7804
7805 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007806 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007807 b10 -= b11 + k13;
7808 b11 -= k14;
7809
7810 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007811 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06007812 b8 -= b9 + k11;
7813 b9 -= k12;
7814
7815 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007816 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007817 b6 -= b7 + k9;
7818 b7 -= k10;
7819
7820 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007821 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007822 b4 -= b5 + k7;
7823 b5 -= k8;
7824
7825 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007826 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06007827 b2 -= b3 + k5;
7828 b3 -= k6;
7829
7830 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007831 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007832 b0 -= b1 + k3;
7833 b1 -= k4;
7834
7835 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007836 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06007837 b12 -= b7;
7838
7839 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007840 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06007841 b10 -= b3;
7842
7843 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007844 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06007845 b8 -= b5;
7846
7847 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007848 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007849 b14 -= b1;
7850
7851 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007852 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007853 b4 -= b9;
7854
7855 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007856 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06007857 b6 -= b13;
7858
7859 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007860 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06007861 b2 -= b11;
7862
7863 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007864 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06007865 b0 -= b15;
7866
7867 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007868 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06007869 b10 -= b9;
7870
7871 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007872 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06007873 b8 -= b11;
7874
7875 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007876 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06007877 b14 -= b13;
7878
7879 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007880 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06007881 b12 -= b15;
7882
7883 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007884 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06007885 b6 -= b1;
7886
7887 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007888 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06007889 b4 -= b3;
7890
7891 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007892 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06007893 b2 -= b5;
7894
7895 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007896 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06007897 b0 -= b7;
7898
7899 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007900 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06007901 b8 -= b1;
7902
7903 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007904 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06007905 b14 -= b5;
7906
7907 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007908 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06007909 b12 -= b3;
7910
7911 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007912 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06007913 b10 -= b7;
7914
7915 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007916 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06007917 b4 -= b15;
7918
7919 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007920 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06007921 b6 -= b11;
7922
7923 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007924 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06007925 b2 -= b13;
7926
7927 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007928 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06007929 b0 -= b9;
7930
7931 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007932 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007933 b14 -= b15 + k16 + t0;
7934 b15 -= k0 + 2;
7935
7936 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007937 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06007938 b12 -= b13 + k14;
7939 b13 -= k15 + t2;
7940
7941 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007942 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06007943 b10 -= b11 + k12;
7944 b11 -= k13;
7945
7946 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007947 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06007948 b8 -= b9 + k10;
7949 b9 -= k11;
7950
7951 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007952 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06007953 b6 -= b7 + k8;
7954 b7 -= k9;
7955
7956 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007957 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06007958 b4 -= b5 + k6;
7959 b5 -= k7;
7960
7961 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007962 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06007963 b2 -= b3 + k4;
7964 b3 -= k5;
7965
7966 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07007967 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06007968 b0 -= b1 + k2;
7969 b1 -= k3;
7970
7971 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07007972 b7 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06007973 b12 -= b7;
7974
7975 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07007976 b3 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06007977 b10 -= b3;
7978
7979 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07007980 b5 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06007981 b8 -= b5;
7982
7983 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07007984 b1 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06007985 b14 -= b1;
7986
7987 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07007988 b9 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06007989 b4 -= b9;
7990
7991 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07007992 b13 = ror64(tmp, 35);
Jake Edge0109ce72014-05-20 07:58:40 -06007993 b6 -= b13;
7994
7995 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07007996 b11 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06007997 b2 -= b11;
7998
7999 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07008000 b15 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06008001 b0 -= b15;
8002
8003 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07008004 b9 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06008005 b10 -= b9;
8006
8007 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07008008 b11 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06008009 b8 -= b11;
8010
8011 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07008012 b13 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06008013 b14 -= b13;
8014
8015 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07008016 b15 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06008017 b12 -= b15;
8018
8019 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07008020 b1 = ror64(tmp, 46);
Jake Edge0109ce72014-05-20 07:58:40 -06008021 b6 -= b1;
8022
8023 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07008024 b3 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06008025 b4 -= b3;
8026
8027 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07008028 b5 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06008029 b2 -= b5;
8030
8031 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07008032 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06008033 b0 -= b7;
8034
8035 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07008036 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06008037 b8 -= b1;
8038
8039 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07008040 b5 = ror64(tmp, 42);
Jake Edge0109ce72014-05-20 07:58:40 -06008041 b14 -= b5;
8042
8043 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07008044 b3 = ror64(tmp, 53);
Jake Edge0109ce72014-05-20 07:58:40 -06008045 b12 -= b3;
8046
8047 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07008048 b7 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06008049 b10 -= b7;
8050
8051 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07008052 b15 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06008053 b4 -= b15;
8054
8055 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07008056 b11 = ror64(tmp, 56);
Jake Edge0109ce72014-05-20 07:58:40 -06008057 b6 -= b11;
8058
8059 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07008060 b13 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06008061 b2 -= b13;
8062
8063 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07008064 b9 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06008065 b0 -= b9;
8066
8067 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07008068 b15 = ror64(tmp, 30);
Jake Edge0109ce72014-05-20 07:58:40 -06008069 b14 -= b15 + k15 + t2;
8070 b15 -= k16 + 1;
8071
8072 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07008073 b13 = ror64(tmp, 44);
Jake Edge0109ce72014-05-20 07:58:40 -06008074 b12 -= b13 + k13;
8075 b13 -= k14 + t1;
8076
8077 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07008078 b11 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06008079 b10 -= b11 + k11;
8080 b11 -= k12;
8081
8082 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07008083 b9 = ror64(tmp, 12);
Jake Edge0109ce72014-05-20 07:58:40 -06008084 b8 -= b9 + k9;
8085 b9 -= k10;
8086
8087 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07008088 b7 = ror64(tmp, 31);
Jake Edge0109ce72014-05-20 07:58:40 -06008089 b6 -= b7 + k7;
8090 b7 -= k8;
8091
8092 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07008093 b5 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06008094 b4 -= b5 + k5;
8095 b5 -= k6;
8096
8097 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07008098 b3 = ror64(tmp, 9);
Jake Edge0109ce72014-05-20 07:58:40 -06008099 b2 -= b3 + k3;
8100 b3 -= k4;
8101
8102 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07008103 b1 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06008104 b0 -= b1 + k1;
8105 b1 -= k2;
8106
8107 tmp = b7 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07008108 b7 = ror64(tmp, 25);
Jake Edge0109ce72014-05-20 07:58:40 -06008109 b12 -= b7;
8110
8111 tmp = b3 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07008112 b3 = ror64(tmp, 16);
Jake Edge0109ce72014-05-20 07:58:40 -06008113 b10 -= b3;
8114
8115 tmp = b5 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07008116 b5 = ror64(tmp, 28);
Jake Edge0109ce72014-05-20 07:58:40 -06008117 b8 -= b5;
8118
8119 tmp = b1 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07008120 b1 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06008121 b14 -= b1;
8122
8123 tmp = b9 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07008124 b9 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06008125 b4 -= b9;
8126
8127 tmp = b13 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07008128 b13 = ror64(tmp, 48);
Jake Edge0109ce72014-05-20 07:58:40 -06008129 b6 -= b13;
8130
8131 tmp = b11 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07008132 b11 = ror64(tmp, 20);
Jake Edge0109ce72014-05-20 07:58:40 -06008133 b2 -= b11;
8134
8135 tmp = b15 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07008136 b15 = ror64(tmp, 5);
Jake Edge0109ce72014-05-20 07:58:40 -06008137 b0 -= b15;
8138
8139 tmp = b9 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07008140 b9 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06008141 b10 -= b9;
8142
8143 tmp = b11 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07008144 b11 = ror64(tmp, 59);
Jake Edge0109ce72014-05-20 07:58:40 -06008145 b8 -= b11;
8146
8147 tmp = b13 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07008148 b13 = ror64(tmp, 41);
Jake Edge0109ce72014-05-20 07:58:40 -06008149 b14 -= b13;
8150
8151 tmp = b15 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07008152 b15 = ror64(tmp, 34);
Jake Edge0109ce72014-05-20 07:58:40 -06008153 b12 -= b15;
8154
8155 tmp = b1 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07008156 b1 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06008157 b6 -= b1;
8158
8159 tmp = b3 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07008160 b3 = ror64(tmp, 51);
Jake Edge0109ce72014-05-20 07:58:40 -06008161 b4 -= b3;
8162
8163 tmp = b5 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07008164 b5 = ror64(tmp, 4);
Jake Edge0109ce72014-05-20 07:58:40 -06008165 b2 -= b5;
8166
8167 tmp = b7 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07008168 b7 = ror64(tmp, 33);
Jake Edge0109ce72014-05-20 07:58:40 -06008169 b0 -= b7;
8170
8171 tmp = b1 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07008172 b1 = ror64(tmp, 52);
Jake Edge0109ce72014-05-20 07:58:40 -06008173 b8 -= b1;
8174
8175 tmp = b5 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07008176 b5 = ror64(tmp, 23);
Jake Edge0109ce72014-05-20 07:58:40 -06008177 b14 -= b5;
8178
8179 tmp = b3 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07008180 b3 = ror64(tmp, 18);
Jake Edge0109ce72014-05-20 07:58:40 -06008181 b12 -= b3;
8182
8183 tmp = b7 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07008184 b7 = ror64(tmp, 49);
Jake Edge0109ce72014-05-20 07:58:40 -06008185 b10 -= b7;
8186
8187 tmp = b15 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07008188 b15 = ror64(tmp, 55);
Jake Edge0109ce72014-05-20 07:58:40 -06008189 b4 -= b15;
8190
8191 tmp = b11 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07008192 b11 = ror64(tmp, 10);
Jake Edge0109ce72014-05-20 07:58:40 -06008193 b6 -= b11;
8194
8195 tmp = b13 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07008196 b13 = ror64(tmp, 19);
Jake Edge0109ce72014-05-20 07:58:40 -06008197 b2 -= b13;
8198
8199 tmp = b9 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07008200 b9 = ror64(tmp, 38);
Jake Edge0109ce72014-05-20 07:58:40 -06008201 b0 -= b9;
8202
8203 tmp = b15 ^ b14;
Joe Perches3733d3f2016-03-18 13:32:12 -07008204 b15 = ror64(tmp, 37);
Jake Edge0109ce72014-05-20 07:58:40 -06008205 b14 -= b15 + k14 + t1;
8206 b15 -= k15;
8207
8208 tmp = b13 ^ b12;
Joe Perches3733d3f2016-03-18 13:32:12 -07008209 b13 = ror64(tmp, 22);
Jake Edge0109ce72014-05-20 07:58:40 -06008210 b12 -= b13 + k12;
8211 b13 -= k13 + t0;
8212
8213 tmp = b11 ^ b10;
Joe Perches3733d3f2016-03-18 13:32:12 -07008214 b11 = ror64(tmp, 17);
Jake Edge0109ce72014-05-20 07:58:40 -06008215 b10 -= b11 + k10;
8216 b11 -= k11;
8217
8218 tmp = b9 ^ b8;
Joe Perches3733d3f2016-03-18 13:32:12 -07008219 b9 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06008220 b8 -= b9 + k8;
8221 b9 -= k9;
8222
8223 tmp = b7 ^ b6;
Joe Perches3733d3f2016-03-18 13:32:12 -07008224 b7 = ror64(tmp, 47);
Jake Edge0109ce72014-05-20 07:58:40 -06008225 b6 -= b7 + k6;
8226 b7 -= k7;
8227
8228 tmp = b5 ^ b4;
Joe Perches3733d3f2016-03-18 13:32:12 -07008229 b5 = ror64(tmp, 8);
Jake Edge0109ce72014-05-20 07:58:40 -06008230 b4 -= b5 + k4;
8231 b5 -= k5;
8232
8233 tmp = b3 ^ b2;
Joe Perches3733d3f2016-03-18 13:32:12 -07008234 b3 = ror64(tmp, 13);
Jake Edge0109ce72014-05-20 07:58:40 -06008235 b2 -= b3 + k2;
8236 b3 -= k3;
8237
8238 tmp = b1 ^ b0;
Joe Perches3733d3f2016-03-18 13:32:12 -07008239 b1 = ror64(tmp, 24);
Jake Edge0109ce72014-05-20 07:58:40 -06008240 b0 -= b1 + k0;
8241 b1 -= k1;
8242
8243 output[15] = b15;
8244 output[14] = b14;
8245 output[13] = b13;
8246 output[12] = b12;
8247 output[11] = b11;
8248 output[10] = b10;
8249 output[9] = b9;
8250 output[8] = b8;
8251 output[7] = b7;
8252 output[6] = b6;
8253 output[5] = b5;
8254 output[4] = b4;
8255 output[3] = b3;
8256 output[2] = b2;
8257 output[1] = b1;
8258 output[0] = b0;
8259}