1
2.text
3.p2align 5
4.globl ECRYPT_encrypt_bytes
5ECRYPT_encrypt_bytes:
6 mov %rsp,%r11
7 and $31,%r11
8 add $256,%r11
9 sub %r11,%rsp
10
11 mov %rdi,%r8
12
13 mov %rsi,%rsi
14
15 mov %rdx,%rdi
16
17 mov %rcx,%rdx
18
19 cmp $0,%rdx
20
21
22 jbe ._done
23
24
25._start:
26
27 movq %r11,0(%rsp)
28
29 movq %r12,8(%rsp)
30
31 movq %r13,16(%rsp)
32
33 movq %r14,24(%rsp)
34
35 movq %r15,32(%rsp)
36
37 movq %rbx,40(%rsp)
38
39 movq %rbp,48(%rsp)
40
41 movq 0(%r8),%rcx
42
43 movq 8(%r8),%r9
44
45 movq 16(%r8),%rax
46
47 movq 24(%r8),%r10
48
49 movq 32(%r8),%r11
50
51 movq 40(%r8),%r12
52
53 movq 48(%r8),%r13
54
55 movq 56(%r8),%r14
56
57 movq %rcx,56(%rsp)
58
59 movq %r9,64(%rsp)
60
61 movq %rax,72(%rsp)
62
63 movq %r10,80(%rsp)
64
65 movq %r11,88(%rsp)
66
67 movq %r12,96(%rsp)
68
69 movq %r13,104(%rsp)
70
71 movq %r14,112(%rsp)
72
73 movq %r8,120(%rsp)
74
75._bytesatleast1:
76
77 cmp $64,%rdx
78
79
80 jae ._nocopy
81
82 movq %rdi,128(%rsp)
83
84 leaq 192(%rsp),%rdi
85
86 mov %rdx,%rcx
87
88 rep movsb
89
90 leaq 192(%rsp),%rdi
91
92 leaq 192(%rsp),%rsi
93
94
95._nocopy:
96
97 movq %rdi,136(%rsp)
98
99 movq %rsi,144(%rsp)
100
101 movq %rdx,152(%rsp)
102
103 movq 56(%rsp),%rdi
104
105 mov %rdi,%rdx
106
107 shr $32,%rdi
108
109 movq 64(%rsp),%rsi
110
111 mov %rsi,%rcx
112
113 shr $32,%rsi
114
115 movq 72(%rsp),%r8
116
117 mov %r8,%r9
118
119 shr $32,%r8
120
121 movq %r8,160(%rsp)
122
123 movq 80(%rsp),%r8
124
125 mov %r8,%rax
126
127 shr $32,%r8
128
129 movq 88(%rsp),%r10
130
131 mov %r10,%r11
132
133 shr $32,%r10
134
135 movq 96(%rsp),%r12
136
137 mov %r12,%r13
138
139 movq %r13,168(%rsp)
140
141 shr $32,%r12
142
143 movq 104(%rsp),%r13
144
145 mov %r13,%r14
146
147 shr $32,%r13
148
149 movq 112(%rsp),%r15
150
151 mov %r15,%rbx
152
153 shr $32,%r15
154
155 movq %r15,176(%rsp)
156
157 mov $20,%r15
158
159._mainloop:
160
161 movq %r15,184(%rsp)
162
163 movq 160(%rsp),%r15
164
165 lea (%r14,%rdx),%rbp
166
167 rol $7,%ebp
168
169 xor %rbp,%r9
170
171 lea (%rdi,%r15),%rbp
172
173 rol $7,%ebp
174
175 xor %rbp,%r10
176
177 lea (%rdx,%r9),%rbp
178
179 rol $9,%ebp
180
181 xor %rbp,%r11
182
183 lea (%r15,%r10),%rbp
184
185 rol $9,%ebp
186
187 xor %rbp,%r13
188
189 lea (%r9,%r11),%rbp
190
191 rol $13,%ebp
192
193 xor %rbp,%r14
194
195 lea (%r10,%r13),%rbp
196
197 rol $13,%ebp
198
199 xor %rbp,%rdi
200
201 lea (%r11,%r14),%rbp
202
203 rol $18,%ebp
204
205 xor %rbp,%rdx
206
207 lea (%r13,%rdi),%rbp
208
209 rol $18,%ebp
210
211 xor %rbp,%r15
212
213 movq 168(%rsp),%rbp
214
215 movq %r15,160(%rsp)
216
217 lea (%rax,%rbp),%r15
218
219 rol $7,%r15d
220
221 xor %r15,%rbx
222
223 lea (%rbp,%rbx),%r15
224
225 rol $9,%r15d
226
227 xor %r15,%rcx
228
229 lea (%rbx,%rcx),%r15
230
231 rol $13,%r15d
232
233 xor %r15,%rax
234
235 lea (%rcx,%rax),%r15
236
237 rol $18,%r15d
238
239 xor %r15,%rbp
240
241 movq 176(%rsp),%r15
242
243 movq %rbp,168(%rsp)
244
245 lea (%r12,%r15),%rbp
246
247 rol $7,%ebp
248
249 xor %rbp,%rsi
250
251 lea (%r15,%rsi),%rbp
252
253 rol $9,%ebp
254
255 xor %rbp,%r8
256
257 lea (%rsi,%r8),%rbp
258
259 rol $13,%ebp
260
261 xor %rbp,%r12
262
263 lea (%r8,%r12),%rbp
264
265 rol $18,%ebp
266
267 xor %rbp,%r15
268
269 movq %r15,176(%rsp)
270
271 movq 160(%rsp),%r15
272
273 lea (%rsi,%rdx),%rbp
274
275 rol $7,%ebp
276
277 xor %rbp,%rdi
278
279 lea (%r9,%r15),%rbp
280
281 rol $7,%ebp
282
283 xor %rbp,%rax
284
285 lea (%rdx,%rdi),%rbp
286
287 rol $9,%ebp
288
289 xor %rbp,%rcx
290
291 lea (%r15,%rax),%rbp
292
293 rol $9,%ebp
294
295 xor %rbp,%r8
296
297 lea (%rdi,%rcx),%rbp
298
299 rol $13,%ebp
300
301 xor %rbp,%rsi
302
303 lea (%rax,%r8),%rbp
304
305 rol $13,%ebp
306
307 xor %rbp,%r9
308
309 lea (%rcx,%rsi),%rbp
310
311 rol $18,%ebp
312
313 xor %rbp,%rdx
314
315 lea (%r8,%r9),%rbp
316
317 rol $18,%ebp
318
319 xor %rbp,%r15
320
321 movq 168(%rsp),%rbp
322
323 movq %r15,160(%rsp)
324
325 lea (%r10,%rbp),%r15
326
327 rol $7,%r15d
328
329 xor %r15,%r12
330
331 lea (%rbp,%r12),%r15
332
333 rol $9,%r15d
334
335 xor %r15,%r11
336
337 lea (%r12,%r11),%r15
338
339 rol $13,%r15d
340
341 xor %r15,%r10
342
343 lea (%r11,%r10),%r15
344
345 rol $18,%r15d
346
347 xor %r15,%rbp
348
349 movq 176(%rsp),%r15
350
351 movq %rbp,168(%rsp)
352
353 lea (%rbx,%r15),%rbp
354
355 rol $7,%ebp
356
357 xor %rbp,%r14
358
359 lea (%r15,%r14),%rbp
360
361 rol $9,%ebp
362
363 xor %rbp,%r13
364
365 lea (%r14,%r13),%rbp
366
367 rol $13,%ebp
368
369 xor %rbp,%rbx
370
371 lea (%r13,%rbx),%rbp
372
373 rol $18,%ebp
374
375 xor %rbp,%r15
376
377 movq %r15,176(%rsp)
378
379 movq 160(%rsp),%r15
380
381 lea (%r14,%rdx),%rbp
382
383 rol $7,%ebp
384
385 xor %rbp,%r9
386
387 lea (%rdi,%r15),%rbp
388
389 rol $7,%ebp
390
391 xor %rbp,%r10
392
393 lea (%rdx,%r9),%rbp
394
395 rol $9,%ebp
396
397 xor %rbp,%r11
398
399 lea (%r15,%r10),%rbp
400
401 rol $9,%ebp
402
403 xor %rbp,%r13
404
405 lea (%r9,%r11),%rbp
406
407 rol $13,%ebp
408
409 xor %rbp,%r14
410
411 lea (%r10,%r13),%rbp
412
413 rol $13,%ebp
414
415 xor %rbp,%rdi
416
417 lea (%r11,%r14),%rbp
418
419 rol $18,%ebp
420
421 xor %rbp,%rdx
422
423 lea (%r13,%rdi),%rbp
424
425 rol $18,%ebp
426
427 xor %rbp,%r15
428
429 movq 168(%rsp),%rbp
430
431 movq %r15,160(%rsp)
432
433 lea (%rax,%rbp),%r15
434
435 rol $7,%r15d
436
437 xor %r15,%rbx
438
439 lea (%rbp,%rbx),%r15
440
441 rol $9,%r15d
442
443 xor %r15,%rcx
444
445 lea (%rbx,%rcx),%r15
446
447 rol $13,%r15d
448
449 xor %r15,%rax
450
451 lea (%rcx,%rax),%r15
452
453 rol $18,%r15d
454
455 xor %r15,%rbp
456
457 movq 176(%rsp),%r15
458
459 movq %rbp,168(%rsp)
460
461 lea (%r12,%r15),%rbp
462
463 rol $7,%ebp
464
465 xor %rbp,%rsi
466
467 lea (%r15,%rsi),%rbp
468
469 rol $9,%ebp
470
471 xor %rbp,%r8
472
473 lea (%rsi,%r8),%rbp
474
475 rol $13,%ebp
476
477 xor %rbp,%r12
478
479 lea (%r8,%r12),%rbp
480
481 rol $18,%ebp
482
483 xor %rbp,%r15
484
485 movq %r15,176(%rsp)
486
487 movq 160(%rsp),%r15
488
489 lea (%rsi,%rdx),%rbp
490
491 rol $7,%ebp
492
493 xor %rbp,%rdi
494
495 lea (%r9,%r15),%rbp
496
497 rol $7,%ebp
498
499 xor %rbp,%rax
500
501 lea (%rdx,%rdi),%rbp
502
503 rol $9,%ebp
504
505 xor %rbp,%rcx
506
507 lea (%r15,%rax),%rbp
508
509 rol $9,%ebp
510
511 xor %rbp,%r8
512
513 lea (%rdi,%rcx),%rbp
514
515 rol $13,%ebp
516
517 xor %rbp,%rsi
518
519 lea (%rax,%r8),%rbp
520
521 rol $13,%ebp
522
523 xor %rbp,%r9
524
525 lea (%rcx,%rsi),%rbp
526
527 rol $18,%ebp
528
529 xor %rbp,%rdx
530
531 lea (%r8,%r9),%rbp
532
533 rol $18,%ebp
534
535 xor %rbp,%r15
536
537 movq 168(%rsp),%rbp
538
539 movq %r15,160(%rsp)
540
541 lea (%r10,%rbp),%r15
542
543 rol $7,%r15d
544
545 xor %r15,%r12
546
547 lea (%rbp,%r12),%r15
548
549 rol $9,%r15d
550
551 xor %r15,%r11
552
553 lea (%r12,%r11),%r15
554
555 rol $13,%r15d
556
557 xor %r15,%r10
558
559 lea (%r11,%r10),%r15
560
561 rol $18,%r15d
562
563 xor %r15,%rbp
564
565 movq 176(%rsp),%r15
566
567 movq %rbp,168(%rsp)
568
569 lea (%rbx,%r15),%rbp
570
571 rol $7,%ebp
572
573 xor %rbp,%r14
574
575 lea (%r15,%r14),%rbp
576
577 rol $9,%ebp
578
579 xor %rbp,%r13
580
581 lea (%r14,%r13),%rbp
582
583 rol $13,%ebp
584
585 xor %rbp,%rbx
586
587 lea (%r13,%rbx),%rbp
588
589 rol $18,%ebp
590
591 xor %rbp,%r15
592
593 movq %r15,176(%rsp)
594
595 movq 184(%rsp),%r15
596
597 sub $4,%r15
598
599
600 ja ._mainloop
601
602 addl 64(%rsp),%ecx
603
604 shl $32,%rsi
605
606 addq 64(%rsp),%rsi
607
608 shr $32,%rsi
609
610 shl $32,%rsi
611
612 add %rsi,%rcx
613
614 addl 80(%rsp),%eax
615
616 shl $32,%r8
617
618 addq 80(%rsp),%r8
619
620 shr $32,%r8
621
622 shl $32,%r8
623
624 add %r8,%rax
625
626 addl 88(%rsp),%r11d
627
628 shl $32,%r10
629
630 addq 88(%rsp),%r10
631
632 shr $32,%r10
633
634 shl $32,%r10
635
636 add %r10,%r11
637
638 addl 104(%rsp),%r14d
639
640 shl $32,%r13
641
642 addq 104(%rsp),%r13
643
644 shr $32,%r13
645
646 shl $32,%r13
647
648 add %r13,%r14
649
650 addl 56(%rsp),%edx
651
652 shl $32,%rdi
653
654 addq 56(%rsp),%rdi
655
656 shr $32,%rdi
657
658 shl $32,%rdi
659
660 add %rdi,%rdx
661
662 movq 160(%rsp),%rdi
663
664 addl 72(%rsp),%r9d
665
666 shl $32,%rdi
667
668 addq 72(%rsp),%rdi
669
670 shr $32,%rdi
671
672 shl $32,%rdi
673
674 add %rdi,%r9
675
676 movq 168(%rsp),%r8
677
678 addl 96(%rsp),%r8d
679
680 shl $32,%r12
681
682 addq 96(%rsp),%r12
683
684 shr $32,%r12
685
686 shl $32,%r12
687
688 add %r12,%r8
689
690 movq 176(%rsp),%rdi
691
692 addl 112(%rsp),%ebx
693
694 shl $32,%rdi
695
696 addq 112(%rsp),%rdi
697
698 shr $32,%rdi
699
700 shl $32,%rdi
701
702 add %rdi,%rbx
703
704 movq 136(%rsp),%rdi
705
706 movq 144(%rsp),%rsi
707
708 xorq 0(%rsi),%rdx
709
710 movq %rdx,0(%rdi)
711
712 xorq 8(%rsi),%rcx
713
714 movq %rcx,8(%rdi)
715
716 xorq 16(%rsi),%r9
717
718 movq %r9,16(%rdi)
719
720 xorq 24(%rsi),%rax
721
722 movq %rax,24(%rdi)
723
724 xorq 32(%rsi),%r11
725
726 movq %r11,32(%rdi)
727
728 xorq 40(%rsi),%r8
729
730 movq %r8,40(%rdi)
731
732 xorq 48(%rsi),%r14
733
734 movq %r14,48(%rdi)
735
736 xorq 56(%rsi),%rbx
737
738 movq %rbx,56(%rdi)
739
740 movq 152(%rsp),%rdx
741
742 movq 88(%rsp),%rcx
743
744 add $1,%rcx
745
746 movq %rcx,88(%rsp)
747
748 cmp $64,%rdx
749
750
751 ja ._bytesatleast65
752
753
754 jae ._bytesatleast64
755
756 mov %rdi,%rsi
757
758 movq 128(%rsp),%rdi
759
760 mov %rdx,%rcx
761
762 rep movsb
763
764
765._bytesatleast64:
766
767 movq 120(%rsp),%rdi
768
769 movq 88(%rsp),%rsi
770
771 movq %rsi,32(%rdi)
772
773 movq 0(%rsp),%r11
774
775 movq 8(%rsp),%r12
776
777 movq 16(%rsp),%r13
778
779 movq 24(%rsp),%r14
780
781 movq 32(%rsp),%r15
782
783 movq 40(%rsp),%rbx
784
785 movq 48(%rsp),%rbp
786
787
788._done:
789
790 add %r11,%rsp
791 mov %rdi,%rax
792 mov %rsi,%rdx
793 ret
794
795._bytesatleast65:
796
797 sub $64,%rdx
798
799 add $64,%rdi
800
801 add $64,%rsi
802
803
804 jmp ._bytesatleast1
805
806.text
807.p2align 5
808.globl ECRYPT_keysetup
809ECRYPT_keysetup:
810 mov %rsp,%r11
811 and $31,%r11
812 add $256,%r11
813 sub %r11,%rsp
814
815 mov %rsi,%rsi
816
817 mov %rdx,%rdx
818
819 mov %rdi,%rdi
820
821 movq 0(%rsi),%r8
822
823 movq 8(%rsi),%r9
824
825 movq %r8,4(%rdi)
826
827 movq %r9,12(%rdi)
828
829 cmp $256,%rdx
830
831
832 jb ._kbits128
833
834._kbits256:
835
836 movq 16(%rsi),%rdx
837
838 movq 24(%rsi),%rsi
839
840 movq %rdx,44(%rdi)
841
842 movq %rsi,52(%rdi)
843
844 mov $1634760805,%rsi
845
846 mov $857760878,%rdx
847
848 mov $2036477234,%rcx
849
850 mov $1797285236,%r8
851
852 movl %esi,0(%rdi)
853
854 movl %edx,20(%rdi)
855
856 movl %ecx,40(%rdi)
857
858 movl %r8d,60(%rdi)
859
860
861 jmp ._keysetupdone
862
863._kbits128:
864
865 movq 0(%rsi),%rdx
866
867 movq 8(%rsi),%rsi
868
869 movq %rdx,44(%rdi)
870
871 movq %rsi,52(%rdi)
872
873 mov $1634760805,%rsi
874
875 mov $824206446,%rdx
876
877 mov $2036477238,%rcx
878
879 mov $1797285236,%r8
880
881 movl %esi,0(%rdi)
882
883 movl %edx,20(%rdi)
884
885 movl %ecx,40(%rdi)
886
887 movl %r8d,60(%rdi)
888
889._keysetupdone:
890
891 add %r11,%rsp
892 mov %rdi,%rax
893 mov %rsi,%rdx
894 ret
895
896.text
897.p2align 5
898.globl ECRYPT_ivsetup
899ECRYPT_ivsetup:
900 mov %rsp,%r11
901 and $31,%r11
902 add $256,%r11
903 sub %r11,%rsp
904
905 mov %rsi,%rsi
906
907 mov %rdi,%rdi
908
909 movq 0(%rsi),%rsi
910
911 mov $0,%r8
912
913 movq %rsi,24(%rdi)
914
915 movq %r8,32(%rdi)
916
917 add %r11,%rsp
918 mov %rdi,%rax
919 mov %rsi,%rdx
920 ret
921