Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/x86/crypto/salsa20-i586-asm_32.S
10817 views
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
1115
1116