]>
Commit | Line | Data |
---|---|---|
974e4b75 TSH |
1 | # salsa20_pm.s version 20051229 |
2 | # D. J. Bernstein | |
3 | # Public domain. | |
4 | ||
5 | # enter ECRYPT_encrypt_bytes | |
6 | .text | |
7 | .p2align 5 | |
8 | .globl ECRYPT_encrypt_bytes | |
9 | ECRYPT_encrypt_bytes: | |
10 | mov %esp,%eax | |
11 | and $31,%eax | |
12 | add $256,%eax | |
13 | sub %eax,%esp | |
14 | # eax_stack = eax | |
15 | movl %eax,80(%esp) | |
16 | # ebx_stack = ebx | |
17 | movl %ebx,84(%esp) | |
18 | # esi_stack = esi | |
19 | movl %esi,88(%esp) | |
20 | # edi_stack = edi | |
21 | movl %edi,92(%esp) | |
22 | # ebp_stack = ebp | |
23 | movl %ebp,96(%esp) | |
24 | # x = arg1 | |
25 | movl 4(%esp,%eax),%edx | |
26 | # m = arg2 | |
27 | movl 8(%esp,%eax),%esi | |
28 | # out = arg3 | |
29 | movl 12(%esp,%eax),%edi | |
30 | # bytes = arg4 | |
31 | movl 16(%esp,%eax),%ebx | |
32 | # bytes -= 0 | |
33 | sub $0,%ebx | |
34 | # goto done if unsigned<= | |
35 | jbe ._done | |
36 | ._start: | |
37 | # in0 = *(uint32 *) (x + 0) | |
38 | movl 0(%edx),%eax | |
39 | # in1 = *(uint32 *) (x + 4) | |
40 | movl 4(%edx),%ecx | |
41 | # in2 = *(uint32 *) (x + 8) | |
42 | movl 8(%edx),%ebp | |
43 | # j0 = in0 | |
44 | movl %eax,164(%esp) | |
45 | # in3 = *(uint32 *) (x + 12) | |
46 | movl 12(%edx),%eax | |
47 | # j1 = in1 | |
48 | movl %ecx,168(%esp) | |
49 | # in4 = *(uint32 *) (x + 16) | |
50 | movl 16(%edx),%ecx | |
51 | # j2 = in2 | |
52 | movl %ebp,172(%esp) | |
53 | # in5 = *(uint32 *) (x + 20) | |
54 | movl 20(%edx),%ebp | |
55 | # j3 = in3 | |
56 | movl %eax,176(%esp) | |
57 | # in6 = *(uint32 *) (x + 24) | |
58 | movl 24(%edx),%eax | |
59 | # j4 = in4 | |
60 | movl %ecx,180(%esp) | |
61 | # in7 = *(uint32 *) (x + 28) | |
62 | movl 28(%edx),%ecx | |
63 | # j5 = in5 | |
64 | movl %ebp,184(%esp) | |
65 | # in8 = *(uint32 *) (x + 32) | |
66 | movl 32(%edx),%ebp | |
67 | # j6 = in6 | |
68 | movl %eax,188(%esp) | |
69 | # in9 = *(uint32 *) (x + 36) | |
70 | movl 36(%edx),%eax | |
71 | # j7 = in7 | |
72 | movl %ecx,192(%esp) | |
73 | # in10 = *(uint32 *) (x + 40) | |
74 | movl 40(%edx),%ecx | |
75 | # j8 = in8 | |
76 | movl %ebp,196(%esp) | |
77 | # in11 = *(uint32 *) (x + 44) | |
78 | movl 44(%edx),%ebp | |
79 | # j9 = in9 | |
80 | movl %eax,200(%esp) | |
81 | # in12 = *(uint32 *) (x + 48) | |
82 | movl 48(%edx),%eax | |
83 | # j10 = in10 | |
84 | movl %ecx,204(%esp) | |
85 | # in13 = *(uint32 *) (x + 52) | |
86 | movl 52(%edx),%ecx | |
87 | # j11 = in11 | |
88 | movl %ebp,208(%esp) | |
89 | # in14 = *(uint32 *) (x + 56) | |
90 | movl 56(%edx),%ebp | |
91 | # j12 = in12 | |
92 | movl %eax,212(%esp) | |
93 | # in15 = *(uint32 *) (x + 60) | |
94 | movl 60(%edx),%eax | |
95 | # j13 = in13 | |
96 | movl %ecx,216(%esp) | |
97 | # j14 = in14 | |
98 | movl %ebp,220(%esp) | |
99 | # j15 = in15 | |
100 | movl %eax,224(%esp) | |
101 | # x_backup = x | |
102 | movl %edx,64(%esp) | |
103 | ._bytesatleast1: | |
104 | # bytes - 64 | |
105 | cmp $64,%ebx | |
106 | # goto nocopy if unsigned>= | |
107 | jae ._nocopy | |
108 | # ctarget = out | |
109 | movl %edi,228(%esp) | |
110 | # out = &tmp | |
111 | leal 0(%esp),%edi | |
112 | # i = bytes | |
113 | mov %ebx,%ecx | |
114 | # while (i) { *out++ = *m++; --i } | |
115 | rep movsb | |
116 | # out = &tmp | |
117 | leal 0(%esp),%edi | |
118 | # m = &tmp | |
119 | leal 0(%esp),%esi | |
120 | ._nocopy: | |
121 | # out_backup = out | |
122 | movl %edi,72(%esp) | |
123 | # m_backup = m | |
124 | movl %esi,68(%esp) | |
125 | # bytes_backup = bytes | |
126 | movl %ebx,76(%esp) | |
127 | # in0 = j0 | |
128 | movl 164(%esp),%eax | |
129 | # in1 = j1 | |
130 | movl 168(%esp),%ecx | |
131 | # in2 = j2 | |
132 | movl 172(%esp),%edx | |
133 | # in3 = j3 | |
134 | movl 176(%esp),%ebx | |
135 | # x0 = in0 | |
136 | movl %eax,100(%esp) | |
137 | # x1 = in1 | |
138 | movl %ecx,104(%esp) | |
139 | # x2 = in2 | |
140 | movl %edx,108(%esp) | |
141 | # x3 = in3 | |
142 | movl %ebx,112(%esp) | |
143 | # in4 = j4 | |
144 | movl 180(%esp),%eax | |
145 | # in5 = j5 | |
146 | movl 184(%esp),%ecx | |
147 | # in6 = j6 | |
148 | movl 188(%esp),%edx | |
149 | # in7 = j7 | |
150 | movl 192(%esp),%ebx | |
151 | # x4 = in4 | |
152 | movl %eax,116(%esp) | |
153 | # x5 = in5 | |
154 | movl %ecx,120(%esp) | |
155 | # x6 = in6 | |
156 | movl %edx,124(%esp) | |
157 | # x7 = in7 | |
158 | movl %ebx,128(%esp) | |
159 | # in8 = j8 | |
160 | movl 196(%esp),%eax | |
161 | # in9 = j9 | |
162 | movl 200(%esp),%ecx | |
163 | # in10 = j10 | |
164 | movl 204(%esp),%edx | |
165 | # in11 = j11 | |
166 | movl 208(%esp),%ebx | |
167 | # x8 = in8 | |
168 | movl %eax,132(%esp) | |
169 | # x9 = in9 | |
170 | movl %ecx,136(%esp) | |
171 | # x10 = in10 | |
172 | movl %edx,140(%esp) | |
173 | # x11 = in11 | |
174 | movl %ebx,144(%esp) | |
175 | # in12 = j12 | |
176 | movl 212(%esp),%eax | |
177 | # in13 = j13 | |
178 | movl 216(%esp),%ecx | |
179 | # in14 = j14 | |
180 | movl 220(%esp),%edx | |
181 | # in15 = j15 | |
182 | movl 224(%esp),%ebx | |
183 | # x12 = in12 | |
184 | movl %eax,148(%esp) | |
185 | # x13 = in13 | |
186 | movl %ecx,152(%esp) | |
187 | # x14 = in14 | |
188 | movl %edx,156(%esp) | |
189 | # x15 = in15 | |
190 | movl %ebx,160(%esp) | |
191 | # i = 20 | |
192 | mov $20,%ebp | |
193 | # p = x0 | |
194 | movl 100(%esp),%eax | |
195 | # s = x5 | |
196 | movl 120(%esp),%ecx | |
197 | # t = x10 | |
198 | movl 140(%esp),%edx | |
199 | # w = x15 | |
200 | movl 160(%esp),%ebx | |
201 | ._mainloop: | |
202 | # x0 = p | |
203 | movl %eax,100(%esp) | |
204 | # x10 = t | |
205 | movl %edx,140(%esp) | |
206 | # p += x12 | |
207 | addl 148(%esp),%eax | |
208 | # x5 = s | |
209 | movl %ecx,120(%esp) | |
210 | # t += x6 | |
211 | addl 124(%esp),%edx | |
212 | # x15 = w | |
213 | movl %ebx,160(%esp) | |
214 | # r = x1 | |
215 | movl 104(%esp),%esi | |
216 | # r += s | |
217 | add %ecx,%esi | |
218 | # v = x11 | |
219 | movl 144(%esp),%edi | |
220 | # v += w | |
221 | add %ebx,%edi | |
222 | # p <<<= 7 | |
223 | rol $7,%eax | |
224 | # p ^= x4 | |
225 | xorl 116(%esp),%eax | |
226 | # t <<<= 7 | |
227 | rol $7,%edx | |
228 | # t ^= x14 | |
229 | xorl 156(%esp),%edx | |
230 | # r <<<= 7 | |
231 | rol $7,%esi | |
232 | # r ^= x9 | |
233 | xorl 136(%esp),%esi | |
234 | # v <<<= 7 | |
235 | rol $7,%edi | |
236 | # v ^= x3 | |
237 | xorl 112(%esp),%edi | |
238 | # x4 = p | |
239 | movl %eax,116(%esp) | |
240 | # x14 = t | |
241 | movl %edx,156(%esp) | |
242 | # p += x0 | |
243 | addl 100(%esp),%eax | |
244 | # x9 = r | |
245 | movl %esi,136(%esp) | |
246 | # t += x10 | |
247 | addl 140(%esp),%edx | |
248 | # x3 = v | |
249 | movl %edi,112(%esp) | |
250 | # p <<<= 9 | |
251 | rol $9,%eax | |
252 | # p ^= x8 | |
253 | xorl 132(%esp),%eax | |
254 | # t <<<= 9 | |
255 | rol $9,%edx | |
256 | # t ^= x2 | |
257 | xorl 108(%esp),%edx | |
258 | # s += r | |
259 | add %esi,%ecx | |
260 | # s <<<= 9 | |
261 | rol $9,%ecx | |
262 | # s ^= x13 | |
263 | xorl 152(%esp),%ecx | |
264 | # w += v | |
265 | add %edi,%ebx | |
266 | # w <<<= 9 | |
267 | rol $9,%ebx | |
268 | # w ^= x7 | |
269 | xorl 128(%esp),%ebx | |
270 | # x8 = p | |
271 | movl %eax,132(%esp) | |
272 | # x2 = t | |
273 | movl %edx,108(%esp) | |
274 | # p += x4 | |
275 | addl 116(%esp),%eax | |
276 | # x13 = s | |
277 | movl %ecx,152(%esp) | |
278 | # t += x14 | |
279 | addl 156(%esp),%edx | |
280 | # x7 = w | |
281 | movl %ebx,128(%esp) | |
282 | # p <<<= 13 | |
283 | rol $13,%eax | |
284 | # p ^= x12 | |
285 | xorl 148(%esp),%eax | |
286 | # t <<<= 13 | |
287 | rol $13,%edx | |
288 | # t ^= x6 | |
289 | xorl 124(%esp),%edx | |
290 | # r += s | |
291 | add %ecx,%esi | |
292 | # r <<<= 13 | |
293 | rol $13,%esi | |
294 | # r ^= x1 | |
295 | xorl 104(%esp),%esi | |
296 | # v += w | |
297 | add %ebx,%edi | |
298 | # v <<<= 13 | |
299 | rol $13,%edi | |
300 | # v ^= x11 | |
301 | xorl 144(%esp),%edi | |
302 | # x12 = p | |
303 | movl %eax,148(%esp) | |
304 | # x6 = t | |
305 | movl %edx,124(%esp) | |
306 | # p += x8 | |
307 | addl 132(%esp),%eax | |
308 | # x1 = r | |
309 | movl %esi,104(%esp) | |
310 | # t += x2 | |
311 | addl 108(%esp),%edx | |
312 | # x11 = v | |
313 | movl %edi,144(%esp) | |
314 | # p <<<= 18 | |
315 | rol $18,%eax | |
316 | # p ^= x0 | |
317 | xorl 100(%esp),%eax | |
318 | # t <<<= 18 | |
319 | rol $18,%edx | |
320 | # t ^= x10 | |
321 | xorl 140(%esp),%edx | |
322 | # s += r | |
323 | add %esi,%ecx | |
324 | # s <<<= 18 | |
325 | rol $18,%ecx | |
326 | # s ^= x5 | |
327 | xorl 120(%esp),%ecx | |
328 | # w += v | |
329 | add %edi,%ebx | |
330 | # w <<<= 18 | |
331 | rol $18,%ebx | |
332 | # w ^= x15 | |
333 | xorl 160(%esp),%ebx | |
334 | # x0 = p | |
335 | movl %eax,100(%esp) | |
336 | # x10 = t | |
337 | movl %edx,140(%esp) | |
338 | # p += x3 | |
339 | addl 112(%esp),%eax | |
340 | # p <<<= 7 | |
341 | rol $7,%eax | |
342 | # x5 = s | |
343 | movl %ecx,120(%esp) | |
344 | # t += x9 | |
345 | addl 136(%esp),%edx | |
346 | # x15 = w | |
347 | movl %ebx,160(%esp) | |
348 | # r = x4 | |
349 | movl 116(%esp),%esi | |
350 | # r += s | |
351 | add %ecx,%esi | |
352 | # v = x14 | |
353 | movl 156(%esp),%edi | |
354 | # v += w | |
355 | add %ebx,%edi | |
356 | # p ^= x1 | |
357 | xorl 104(%esp),%eax | |
358 | # t <<<= 7 | |
359 | rol $7,%edx | |
360 | # t ^= x11 | |
361 | xorl 144(%esp),%edx | |
362 | # r <<<= 7 | |
363 | rol $7,%esi | |
364 | # r ^= x6 | |
365 | xorl 124(%esp),%esi | |
366 | # v <<<= 7 | |
367 | rol $7,%edi | |
368 | # v ^= x12 | |
369 | xorl 148(%esp),%edi | |
370 | # x1 = p | |
371 | movl %eax,104(%esp) | |
372 | # x11 = t | |
373 | movl %edx,144(%esp) | |
374 | # p += x0 | |
375 | addl 100(%esp),%eax | |
376 | # x6 = r | |
377 | movl %esi,124(%esp) | |
378 | # t += x10 | |
379 | addl 140(%esp),%edx | |
380 | # x12 = v | |
381 | movl %edi,148(%esp) | |
382 | # p <<<= 9 | |
383 | rol $9,%eax | |
384 | # p ^= x2 | |
385 | xorl 108(%esp),%eax | |
386 | # t <<<= 9 | |
387 | rol $9,%edx | |
388 | # t ^= x8 | |
389 | xorl 132(%esp),%edx | |
390 | # s += r | |
391 | add %esi,%ecx | |
392 | # s <<<= 9 | |
393 | rol $9,%ecx | |
394 | # s ^= x7 | |
395 | xorl 128(%esp),%ecx | |
396 | # w += v | |
397 | add %edi,%ebx | |
398 | # w <<<= 9 | |
399 | rol $9,%ebx | |
400 | # w ^= x13 | |
401 | xorl 152(%esp),%ebx | |
402 | # x2 = p | |
403 | movl %eax,108(%esp) | |
404 | # x8 = t | |
405 | movl %edx,132(%esp) | |
406 | # p += x1 | |
407 | addl 104(%esp),%eax | |
408 | # x7 = s | |
409 | movl %ecx,128(%esp) | |
410 | # t += x11 | |
411 | addl 144(%esp),%edx | |
412 | # x13 = w | |
413 | movl %ebx,152(%esp) | |
414 | # p <<<= 13 | |
415 | rol $13,%eax | |
416 | # p ^= x3 | |
417 | xorl 112(%esp),%eax | |
418 | # t <<<= 13 | |
419 | rol $13,%edx | |
420 | # t ^= x9 | |
421 | xorl 136(%esp),%edx | |
422 | # r += s | |
423 | add %ecx,%esi | |
424 | # r <<<= 13 | |
425 | rol $13,%esi | |
426 | # r ^= x4 | |
427 | xorl 116(%esp),%esi | |
428 | # v += w | |
429 | add %ebx,%edi | |
430 | # v <<<= 13 | |
431 | rol $13,%edi | |
432 | # v ^= x14 | |
433 | xorl 156(%esp),%edi | |
434 | # x3 = p | |
435 | movl %eax,112(%esp) | |
436 | # x9 = t | |
437 | movl %edx,136(%esp) | |
438 | # p += x2 | |
439 | addl 108(%esp),%eax | |
440 | # x4 = r | |
441 | movl %esi,116(%esp) | |
442 | # t += x8 | |
443 | addl 132(%esp),%edx | |
444 | # x14 = v | |
445 | movl %edi,156(%esp) | |
446 | # p <<<= 18 | |
447 | rol $18,%eax | |
448 | # p ^= x0 | |
449 | xorl 100(%esp),%eax | |
450 | # t <<<= 18 | |
451 | rol $18,%edx | |
452 | # t ^= x10 | |
453 | xorl 140(%esp),%edx | |
454 | # s += r | |
455 | add %esi,%ecx | |
456 | # s <<<= 18 | |
457 | rol $18,%ecx | |
458 | # s ^= x5 | |
459 | xorl 120(%esp),%ecx | |
460 | # w += v | |
461 | add %edi,%ebx | |
462 | # w <<<= 18 | |
463 | rol $18,%ebx | |
464 | # w ^= x15 | |
465 | xorl 160(%esp),%ebx | |
466 | # x0 = p | |
467 | movl %eax,100(%esp) | |
468 | # x10 = t | |
469 | movl %edx,140(%esp) | |
470 | # p += x12 | |
471 | addl 148(%esp),%eax | |
472 | # x5 = s | |
473 | movl %ecx,120(%esp) | |
474 | # t += x6 | |
475 | addl 124(%esp),%edx | |
476 | # x15 = w | |
477 | movl %ebx,160(%esp) | |
478 | # r = x1 | |
479 | movl 104(%esp),%esi | |
480 | # r += s | |
481 | add %ecx,%esi | |
482 | # v = x11 | |
483 | movl 144(%esp),%edi | |
484 | # v += w | |
485 | add %ebx,%edi | |
486 | # p <<<= 7 | |
487 | rol $7,%eax | |
488 | # p ^= x4 | |
489 | xorl 116(%esp),%eax | |
490 | # t <<<= 7 | |
491 | rol $7,%edx | |
492 | # t ^= x14 | |
493 | xorl 156(%esp),%edx | |
494 | # r <<<= 7 | |
495 | rol $7,%esi | |
496 | # r ^= x9 | |
497 | xorl 136(%esp),%esi | |
498 | # v <<<= 7 | |
499 | rol $7,%edi | |
500 | # v ^= x3 | |
501 | xorl 112(%esp),%edi | |
502 | # x4 = p | |
503 | movl %eax,116(%esp) | |
504 | # x14 = t | |
505 | movl %edx,156(%esp) | |
506 | # p += x0 | |
507 | addl 100(%esp),%eax | |
508 | # x9 = r | |
509 | movl %esi,136(%esp) | |
510 | # t += x10 | |
511 | addl 140(%esp),%edx | |
512 | # x3 = v | |
513 | movl %edi,112(%esp) | |
514 | # p <<<= 9 | |
515 | rol $9,%eax | |
516 | # p ^= x8 | |
517 | xorl 132(%esp),%eax | |
518 | # t <<<= 9 | |
519 | rol $9,%edx | |
520 | # t ^= x2 | |
521 | xorl 108(%esp),%edx | |
522 | # s += r | |
523 | add %esi,%ecx | |
524 | # s <<<= 9 | |
525 | rol $9,%ecx | |
526 | # s ^= x13 | |
527 | xorl 152(%esp),%ecx | |
528 | # w += v | |
529 | add %edi,%ebx | |
530 | # w <<<= 9 | |
531 | rol $9,%ebx | |
532 | # w ^= x7 | |
533 | xorl 128(%esp),%ebx | |
534 | # x8 = p | |
535 | movl %eax,132(%esp) | |
536 | # x2 = t | |
537 | movl %edx,108(%esp) | |
538 | # p += x4 | |
539 | addl 116(%esp),%eax | |
540 | # x13 = s | |
541 | movl %ecx,152(%esp) | |
542 | # t += x14 | |
543 | addl 156(%esp),%edx | |
544 | # x7 = w | |
545 | movl %ebx,128(%esp) | |
546 | # p <<<= 13 | |
547 | rol $13,%eax | |
548 | # p ^= x12 | |
549 | xorl 148(%esp),%eax | |
550 | # t <<<= 13 | |
551 | rol $13,%edx | |
552 | # t ^= x6 | |
553 | xorl 124(%esp),%edx | |
554 | # r += s | |
555 | add %ecx,%esi | |
556 | # r <<<= 13 | |
557 | rol $13,%esi | |
558 | # r ^= x1 | |
559 | xorl 104(%esp),%esi | |
560 | # v += w | |
561 | add %ebx,%edi | |
562 | # v <<<= 13 | |
563 | rol $13,%edi | |
564 | # v ^= x11 | |
565 | xorl 144(%esp),%edi | |
566 | # x12 = p | |
567 | movl %eax,148(%esp) | |
568 | # x6 = t | |
569 | movl %edx,124(%esp) | |
570 | # p += x8 | |
571 | addl 132(%esp),%eax | |
572 | # x1 = r | |
573 | movl %esi,104(%esp) | |
574 | # t += x2 | |
575 | addl 108(%esp),%edx | |
576 | # x11 = v | |
577 | movl %edi,144(%esp) | |
578 | # p <<<= 18 | |
579 | rol $18,%eax | |
580 | # p ^= x0 | |
581 | xorl 100(%esp),%eax | |
582 | # t <<<= 18 | |
583 | rol $18,%edx | |
584 | # t ^= x10 | |
585 | xorl 140(%esp),%edx | |
586 | # s += r | |
587 | add %esi,%ecx | |
588 | # s <<<= 18 | |
589 | rol $18,%ecx | |
590 | # s ^= x5 | |
591 | xorl 120(%esp),%ecx | |
592 | # w += v | |
593 | add %edi,%ebx | |
594 | # w <<<= 18 | |
595 | rol $18,%ebx | |
596 | # w ^= x15 | |
597 | xorl 160(%esp),%ebx | |
598 | # x0 = p | |
599 | movl %eax,100(%esp) | |
600 | # x10 = t | |
601 | movl %edx,140(%esp) | |
602 | # p += x3 | |
603 | addl 112(%esp),%eax | |
604 | # p <<<= 7 | |
605 | rol $7,%eax | |
606 | # x5 = s | |
607 | movl %ecx,120(%esp) | |
608 | # t += x9 | |
609 | addl 136(%esp),%edx | |
610 | # x15 = w | |
611 | movl %ebx,160(%esp) | |
612 | # r = x4 | |
613 | movl 116(%esp),%esi | |
614 | # r += s | |
615 | add %ecx,%esi | |
616 | # v = x14 | |
617 | movl 156(%esp),%edi | |
618 | # v += w | |
619 | add %ebx,%edi | |
620 | # p ^= x1 | |
621 | xorl 104(%esp),%eax | |
622 | # t <<<= 7 | |
623 | rol $7,%edx | |
624 | # t ^= x11 | |
625 | xorl 144(%esp),%edx | |
626 | # r <<<= 7 | |
627 | rol $7,%esi | |
628 | # r ^= x6 | |
629 | xorl 124(%esp),%esi | |
630 | # v <<<= 7 | |
631 | rol $7,%edi | |
632 | # v ^= x12 | |
633 | xorl 148(%esp),%edi | |
634 | # x1 = p | |
635 | movl %eax,104(%esp) | |
636 | # x11 = t | |
637 | movl %edx,144(%esp) | |
638 | # p += x0 | |
639 | addl 100(%esp),%eax | |
640 | # x6 = r | |
641 | movl %esi,124(%esp) | |
642 | # t += x10 | |
643 | addl 140(%esp),%edx | |
644 | # x12 = v | |
645 | movl %edi,148(%esp) | |
646 | # p <<<= 9 | |
647 | rol $9,%eax | |
648 | # p ^= x2 | |
649 | xorl 108(%esp),%eax | |
650 | # t <<<= 9 | |
651 | rol $9,%edx | |
652 | # t ^= x8 | |
653 | xorl 132(%esp),%edx | |
654 | # s += r | |
655 | add %esi,%ecx | |
656 | # s <<<= 9 | |
657 | rol $9,%ecx | |
658 | # s ^= x7 | |
659 | xorl 128(%esp),%ecx | |
660 | # w += v | |
661 | add %edi,%ebx | |
662 | # w <<<= 9 | |
663 | rol $9,%ebx | |
664 | # w ^= x13 | |
665 | xorl 152(%esp),%ebx | |
666 | # x2 = p | |
667 | movl %eax,108(%esp) | |
668 | # x8 = t | |
669 | movl %edx,132(%esp) | |
670 | # p += x1 | |
671 | addl 104(%esp),%eax | |
672 | # x7 = s | |
673 | movl %ecx,128(%esp) | |
674 | # t += x11 | |
675 | addl 144(%esp),%edx | |
676 | # x13 = w | |
677 | movl %ebx,152(%esp) | |
678 | # p <<<= 13 | |
679 | rol $13,%eax | |
680 | # p ^= x3 | |
681 | xorl 112(%esp),%eax | |
682 | # t <<<= 13 | |
683 | rol $13,%edx | |
684 | # t ^= x9 | |
685 | xorl 136(%esp),%edx | |
686 | # r += s | |
687 | add %ecx,%esi | |
688 | # r <<<= 13 | |
689 | rol $13,%esi | |
690 | # r ^= x4 | |
691 | xorl 116(%esp),%esi | |
692 | # v += w | |
693 | add %ebx,%edi | |
694 | # v <<<= 13 | |
695 | rol $13,%edi | |
696 | # v ^= x14 | |
697 | xorl 156(%esp),%edi | |
698 | # x3 = p | |
699 | movl %eax,112(%esp) | |
700 | # x9 = t | |
701 | movl %edx,136(%esp) | |
702 | # p += x2 | |
703 | addl 108(%esp),%eax | |
704 | # x4 = r | |
705 | movl %esi,116(%esp) | |
706 | # t += x8 | |
707 | addl 132(%esp),%edx | |
708 | # x14 = v | |
709 | movl %edi,156(%esp) | |
710 | # p <<<= 18 | |
711 | rol $18,%eax | |
712 | # p ^= x0 | |
713 | xorl 100(%esp),%eax | |
714 | # t <<<= 18 | |
715 | rol $18,%edx | |
716 | # t ^= x10 | |
717 | xorl 140(%esp),%edx | |
718 | # s += r | |
719 | add %esi,%ecx | |
720 | # s <<<= 18 | |
721 | rol $18,%ecx | |
722 | # s ^= x5 | |
723 | xorl 120(%esp),%ecx | |
724 | # w += v | |
725 | add %edi,%ebx | |
726 | # w <<<= 18 | |
727 | rol $18,%ebx | |
728 | # w ^= x15 | |
729 | xorl 160(%esp),%ebx | |
730 | # i -= 4 | |
731 | sub $4,%ebp | |
732 | # goto mainloop if unsigned > | |
733 | ja ._mainloop | |
734 | # x0 = p | |
735 | movl %eax,100(%esp) | |
736 | # x5 = s | |
737 | movl %ecx,120(%esp) | |
738 | # x10 = t | |
739 | movl %edx,140(%esp) | |
740 | # x15 = w | |
741 | movl %ebx,160(%esp) | |
742 | # out = out_backup | |
743 | movl 72(%esp),%edi | |
744 | # m = m_backup | |
745 | movl 68(%esp),%esi | |
746 | # in0 = x0 | |
747 | movl 100(%esp),%eax | |
748 | # in1 = x1 | |
749 | movl 104(%esp),%ecx | |
750 | # in0 += j0 | |
751 | addl 164(%esp),%eax | |
752 | # in1 += j1 | |
753 | addl 168(%esp),%ecx | |
754 | # in0 ^= *(uint32 *) (m + 0) | |
755 | xorl 0(%esi),%eax | |
756 | # in1 ^= *(uint32 *) (m + 4) | |
757 | xorl 4(%esi),%ecx | |
758 | # *(uint32 *) (out + 0) = in0 | |
759 | movl %eax,0(%edi) | |
760 | # *(uint32 *) (out + 4) = in1 | |
761 | movl %ecx,4(%edi) | |
762 | # in2 = x2 | |
763 | movl 108(%esp),%eax | |
764 | # in3 = x3 | |
765 | movl 112(%esp),%ecx | |
766 | # in2 += j2 | |
767 | addl 172(%esp),%eax | |
768 | # in3 += j3 | |
769 | addl 176(%esp),%ecx | |
770 | # in2 ^= *(uint32 *) (m + 8) | |
771 | xorl 8(%esi),%eax | |
772 | # in3 ^= *(uint32 *) (m + 12) | |
773 | xorl 12(%esi),%ecx | |
774 | # *(uint32 *) (out + 8) = in2 | |
775 | movl %eax,8(%edi) | |
776 | # *(uint32 *) (out + 12) = in3 | |
777 | movl %ecx,12(%edi) | |
778 | # in4 = x4 | |
779 | movl 116(%esp),%eax | |
780 | # in5 = x5 | |
781 | movl 120(%esp),%ecx | |
782 | # in4 += j4 | |
783 | addl 180(%esp),%eax | |
784 | # in5 += j5 | |
785 | addl 184(%esp),%ecx | |
786 | # in4 ^= *(uint32 *) (m + 16) | |
787 | xorl 16(%esi),%eax | |
788 | # in5 ^= *(uint32 *) (m + 20) | |
789 | xorl 20(%esi),%ecx | |
790 | # *(uint32 *) (out + 16) = in4 | |
791 | movl %eax,16(%edi) | |
792 | # *(uint32 *) (out + 20) = in5 | |
793 | movl %ecx,20(%edi) | |
794 | # in6 = x6 | |
795 | movl 124(%esp),%eax | |
796 | # in7 = x7 | |
797 | movl 128(%esp),%ecx | |
798 | # in6 += j6 | |
799 | addl 188(%esp),%eax | |
800 | # in7 += j7 | |
801 | addl 192(%esp),%ecx | |
802 | # in6 ^= *(uint32 *) (m + 24) | |
803 | xorl 24(%esi),%eax | |
804 | # in7 ^= *(uint32 *) (m + 28) | |
805 | xorl 28(%esi),%ecx | |
806 | # *(uint32 *) (out + 24) = in6 | |
807 | movl %eax,24(%edi) | |
808 | # *(uint32 *) (out + 28) = in7 | |
809 | movl %ecx,28(%edi) | |
810 | # in8 = x8 | |
811 | movl 132(%esp),%eax | |
812 | # in9 = x9 | |
813 | movl 136(%esp),%ecx | |
814 | # in8 += j8 | |
815 | addl 196(%esp),%eax | |
816 | # in9 += j9 | |
817 | addl 200(%esp),%ecx | |
818 | # in8 ^= *(uint32 *) (m + 32) | |
819 | xorl 32(%esi),%eax | |
820 | # in9 ^= *(uint32 *) (m + 36) | |
821 | xorl 36(%esi),%ecx | |
822 | # *(uint32 *) (out + 32) = in8 | |
823 | movl %eax,32(%edi) | |
824 | # *(uint32 *) (out + 36) = in9 | |
825 | movl %ecx,36(%edi) | |
826 | # in10 = x10 | |
827 | movl 140(%esp),%eax | |
828 | # in11 = x11 | |
829 | movl 144(%esp),%ecx | |
830 | # in10 += j10 | |
831 | addl 204(%esp),%eax | |
832 | # in11 += j11 | |
833 | addl 208(%esp),%ecx | |
834 | # in10 ^= *(uint32 *) (m + 40) | |
835 | xorl 40(%esi),%eax | |
836 | # in11 ^= *(uint32 *) (m + 44) | |
837 | xorl 44(%esi),%ecx | |
838 | # *(uint32 *) (out + 40) = in10 | |
839 | movl %eax,40(%edi) | |
840 | # *(uint32 *) (out + 44) = in11 | |
841 | movl %ecx,44(%edi) | |
842 | # in12 = x12 | |
843 | movl 148(%esp),%eax | |
844 | # in13 = x13 | |
845 | movl 152(%esp),%ecx | |
846 | # in12 += j12 | |
847 | addl 212(%esp),%eax | |
848 | # in13 += j13 | |
849 | addl 216(%esp),%ecx | |
850 | # in12 ^= *(uint32 *) (m + 48) | |
851 | xorl 48(%esi),%eax | |
852 | # in13 ^= *(uint32 *) (m + 52) | |
853 | xorl 52(%esi),%ecx | |
854 | # *(uint32 *) (out + 48) = in12 | |
855 | movl %eax,48(%edi) | |
856 | # *(uint32 *) (out + 52) = in13 | |
857 | movl %ecx,52(%edi) | |
858 | # in14 = x14 | |
859 | movl 156(%esp),%eax | |
860 | # in15 = x15 | |
861 | movl 160(%esp),%ecx | |
862 | # in14 += j14 | |
863 | addl 220(%esp),%eax | |
864 | # in15 += j15 | |
865 | addl 224(%esp),%ecx | |
866 | # in14 ^= *(uint32 *) (m + 56) | |
867 | xorl 56(%esi),%eax | |
868 | # in15 ^= *(uint32 *) (m + 60) | |
869 | xorl 60(%esi),%ecx | |
870 | # *(uint32 *) (out + 56) = in14 | |
871 | movl %eax,56(%edi) | |
872 | # *(uint32 *) (out + 60) = in15 | |
873 | movl %ecx,60(%edi) | |
874 | # bytes = bytes_backup | |
875 | movl 76(%esp),%ebx | |
876 | # in8 = j8 | |
877 | movl 196(%esp),%eax | |
878 | # in9 = j9 | |
879 | movl 200(%esp),%ecx | |
880 | # in8 += 1 | |
881 | add $1,%eax | |
882 | # in9 += 0 + carry | |
883 | adc $0,%ecx | |
884 | # j8 = in8 | |
885 | movl %eax,196(%esp) | |
886 | # j9 = in9 | |
887 | movl %ecx,200(%esp) | |
888 | # bytes - 64 | |
889 | cmp $64,%ebx | |
890 | # goto bytesatleast65 if unsigned> | |
891 | ja ._bytesatleast65 | |
892 | # goto bytesatleast64 if unsigned>= | |
893 | jae ._bytesatleast64 | |
894 | # m = out | |
895 | mov %edi,%esi | |
896 | # out = ctarget | |
897 | movl 228(%esp),%edi | |
898 | # i = bytes | |
899 | mov %ebx,%ecx | |
900 | # while (i) { *out++ = *m++; --i } | |
901 | rep movsb | |
902 | ._bytesatleast64: | |
903 | # x = x_backup | |
904 | movl 64(%esp),%eax | |
905 | # in8 = j8 | |
906 | movl 196(%esp),%ecx | |
907 | # in9 = j9 | |
908 | movl 200(%esp),%edx | |
909 | # *(uint32 *) (x + 32) = in8 | |
910 | movl %ecx,32(%eax) | |
911 | # *(uint32 *) (x + 36) = in9 | |
912 | movl %edx,36(%eax) | |
913 | ._done: | |
914 | # eax = eax_stack | |
915 | movl 80(%esp),%eax | |
916 | # ebx = ebx_stack | |
917 | movl 84(%esp),%ebx | |
918 | # esi = esi_stack | |
919 | movl 88(%esp),%esi | |
920 | # edi = edi_stack | |
921 | movl 92(%esp),%edi | |
922 | # ebp = ebp_stack | |
923 | movl 96(%esp),%ebp | |
924 | # leave | |
925 | add %eax,%esp | |
926 | ret | |
927 | ._bytesatleast65: | |
928 | # bytes -= 64 | |
929 | sub $64,%ebx | |
930 | # out += 64 | |
931 | add $64,%edi | |
932 | # m += 64 | |
933 | add $64,%esi | |
934 | # goto bytesatleast1 | |
935 | jmp ._bytesatleast1 | |
936 | # enter ECRYPT_keysetup | |
937 | .text | |
938 | .p2align 5 | |
939 | .globl ECRYPT_keysetup | |
940 | ECRYPT_keysetup: | |
941 | mov %esp,%eax | |
942 | and $31,%eax | |
943 | add $256,%eax | |
944 | sub %eax,%esp | |
945 | # eax_stack = eax | |
946 | movl %eax,64(%esp) | |
947 | # ebx_stack = ebx | |
948 | movl %ebx,68(%esp) | |
949 | # esi_stack = esi | |
950 | movl %esi,72(%esp) | |
951 | # edi_stack = edi | |
952 | movl %edi,76(%esp) | |
953 | # ebp_stack = ebp | |
954 | movl %ebp,80(%esp) | |
955 | # k = arg2 | |
956 | movl 8(%esp,%eax),%ecx | |
957 | # kbits = arg3 | |
958 | movl 12(%esp,%eax),%edx | |
959 | # x = arg1 | |
960 | movl 4(%esp,%eax),%eax | |
961 | # in1 = *(uint32 *) (k + 0) | |
962 | movl 0(%ecx),%ebx | |
963 | # in2 = *(uint32 *) (k + 4) | |
964 | movl 4(%ecx),%esi | |
965 | # in3 = *(uint32 *) (k + 8) | |
966 | movl 8(%ecx),%edi | |
967 | # in4 = *(uint32 *) (k + 12) | |
968 | movl 12(%ecx),%ebp | |
969 | # *(uint32 *) (x + 4) = in1 | |
970 | movl %ebx,4(%eax) | |
971 | # *(uint32 *) (x + 8) = in2 | |
972 | movl %esi,8(%eax) | |
973 | # *(uint32 *) (x + 12) = in3 | |
974 | movl %edi,12(%eax) | |
975 | # *(uint32 *) (x + 16) = in4 | |
976 | movl %ebp,16(%eax) | |
977 | # kbits - 256 | |
978 | cmp $256,%edx | |
979 | # goto kbits128 if unsigned< | |
980 | jb ._kbits128 | |
981 | ._kbits256: | |
982 | # in11 = *(uint32 *) (k + 16) | |
983 | movl 16(%ecx),%edx | |
984 | # in12 = *(uint32 *) (k + 20) | |
985 | movl 20(%ecx),%ebx | |
986 | # in13 = *(uint32 *) (k + 24) | |
987 | movl 24(%ecx),%esi | |
988 | # in14 = *(uint32 *) (k + 28) | |
989 | movl 28(%ecx),%ecx | |
990 | # *(uint32 *) (x + 44) = in11 | |
991 | movl %edx,44(%eax) | |
992 | # *(uint32 *) (x + 48) = in12 | |
993 | movl %ebx,48(%eax) | |
994 | # *(uint32 *) (x + 52) = in13 | |
995 | movl %esi,52(%eax) | |
996 | # *(uint32 *) (x + 56) = in14 | |
997 | movl %ecx,56(%eax) | |
998 | # in0 = 1634760805 | |
999 | mov $1634760805,%ecx | |
1000 | # in5 = 857760878 | |
1001 | mov $857760878,%edx | |
1002 | # in10 = 2036477234 | |
1003 | mov $2036477234,%ebx | |
1004 | # in15 = 1797285236 | |
1005 | mov $1797285236,%esi | |
1006 | # *(uint32 *) (x + 0) = in0 | |
1007 | movl %ecx,0(%eax) | |
1008 | # *(uint32 *) (x + 20) = in5 | |
1009 | movl %edx,20(%eax) | |
1010 | # *(uint32 *) (x + 40) = in10 | |
1011 | movl %ebx,40(%eax) | |
1012 | # *(uint32 *) (x + 60) = in15 | |
1013 | movl %esi,60(%eax) | |
1014 | # goto keysetupdone | |
1015 | jmp ._keysetupdone | |
1016 | ._kbits128: | |
1017 | # in11 = *(uint32 *) (k + 0) | |
1018 | movl 0(%ecx),%edx | |
1019 | # in12 = *(uint32 *) (k + 4) | |
1020 | movl 4(%ecx),%ebx | |
1021 | # in13 = *(uint32 *) (k + 8) | |
1022 | movl 8(%ecx),%esi | |
1023 | # in14 = *(uint32 *) (k + 12) | |
1024 | movl 12(%ecx),%ecx | |
1025 | # *(uint32 *) (x + 44) = in11 | |
1026 | movl %edx,44(%eax) | |
1027 | # *(uint32 *) (x + 48) = in12 | |
1028 | movl %ebx,48(%eax) | |
1029 | # *(uint32 *) (x + 52) = in13 | |
1030 | movl %esi,52(%eax) | |
1031 | # *(uint32 *) (x + 56) = in14 | |
1032 | movl %ecx,56(%eax) | |
1033 | # in0 = 1634760805 | |
1034 | mov $1634760805,%ecx | |
1035 | # in5 = 824206446 | |
1036 | mov $824206446,%edx | |
1037 | # in10 = 2036477238 | |
1038 | mov $2036477238,%ebx | |
1039 | # in15 = 1797285236 | |
1040 | mov $1797285236,%esi | |
1041 | # *(uint32 *) (x + 0) = in0 | |
1042 | movl %ecx,0(%eax) | |
1043 | # *(uint32 *) (x + 20) = in5 | |
1044 | movl %edx,20(%eax) | |
1045 | # *(uint32 *) (x + 40) = in10 | |
1046 | movl %ebx,40(%eax) | |
1047 | # *(uint32 *) (x + 60) = in15 | |
1048 | movl %esi,60(%eax) | |
1049 | ._keysetupdone: | |
1050 | # eax = eax_stack | |
1051 | movl 64(%esp),%eax | |
1052 | # ebx = ebx_stack | |
1053 | movl 68(%esp),%ebx | |
1054 | # esi = esi_stack | |
1055 | movl 72(%esp),%esi | |
1056 | # edi = edi_stack | |
1057 | movl 76(%esp),%edi | |
1058 | # ebp = ebp_stack | |
1059 | movl 80(%esp),%ebp | |
1060 | # leave | |
1061 | add %eax,%esp | |
1062 | ret | |
1063 | # enter ECRYPT_ivsetup | |
1064 | .text | |
1065 | .p2align 5 | |
1066 | .globl ECRYPT_ivsetup | |
1067 | ECRYPT_ivsetup: | |
1068 | mov %esp,%eax | |
1069 | and $31,%eax | |
1070 | add $256,%eax | |
1071 | sub %eax,%esp | |
1072 | # eax_stack = eax | |
1073 | movl %eax,64(%esp) | |
1074 | # ebx_stack = ebx | |
1075 | movl %ebx,68(%esp) | |
1076 | # esi_stack = esi | |
1077 | movl %esi,72(%esp) | |
1078 | # edi_stack = edi | |
1079 | movl %edi,76(%esp) | |
1080 | # ebp_stack = ebp | |
1081 | movl %ebp,80(%esp) | |
1082 | # iv = arg2 | |
1083 | movl 8(%esp,%eax),%ecx | |
1084 | # x = arg1 | |
1085 | movl 4(%esp,%eax),%eax | |
1086 | # in6 = *(uint32 *) (iv + 0) | |
1087 | movl 0(%ecx),%edx | |
1088 | # in7 = *(uint32 *) (iv + 4) | |
1089 | movl 4(%ecx),%ecx | |
1090 | # in8 = 0 | |
1091 | mov $0,%ebx | |
1092 | # in9 = 0 | |
1093 | mov $0,%esi | |
1094 | # *(uint32 *) (x + 24) = in6 | |
1095 | movl %edx,24(%eax) | |
1096 | # *(uint32 *) (x + 28) = in7 | |
1097 | movl %ecx,28(%eax) | |
1098 | # *(uint32 *) (x + 32) = in8 | |
1099 | movl %ebx,32(%eax) | |
1100 | # *(uint32 *) (x + 36) = in9 | |
1101 | movl %esi,36(%eax) | |
1102 | # eax = eax_stack | |
1103 | movl 64(%esp),%eax | |
1104 | # ebx = ebx_stack | |
1105 | movl 68(%esp),%ebx | |
1106 | # esi = esi_stack | |
1107 | movl 72(%esp),%esi | |
1108 | # edi = edi_stack | |
1109 | movl 76(%esp),%edi | |
1110 | # ebp = ebp_stack | |
1111 | movl 80(%esp),%ebp | |
1112 | # leave | |
1113 | add %eax,%esp | |
1114 | ret |