diff options
Diffstat (limited to 'chromium/third_party/openssl/openssl')
49 files changed, 34496 insertions, 202 deletions
diff --git a/chromium/third_party/openssl/openssl/crypto/aes/asm/aes-586-mac.S b/chromium/third_party/openssl/openssl/crypto/aes/asm/aes-586-mac.S new file mode 100644 index 00000000000..15d5d7b36d5 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/aes/asm/aes-586-mac.S @@ -0,0 +1,3200 @@ +.file "aes-586.s" +.text +.align 4 +__x86_AES_encrypt_compact: + movl %edi,20(%esp) + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl 240(%edi),%esi + leal -2(%esi,%esi,1),%esi + leal (%edi,%esi,8),%esi + movl %esi,24(%esp) + movl -128(%ebp),%edi + movl -96(%ebp),%esi + movl -64(%ebp),%edi + movl -32(%ebp),%esi + movl (%ebp),%edi + movl 32(%ebp),%esi + movl 64(%ebp),%edi + movl 96(%ebp),%esi +.align 4,0x90 +L000loop: + movl %eax,%esi + andl $255,%esi + movzbl -128(%ebp,%esi,1),%esi + movzbl %bh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,4(%esp) + movl %ebx,%esi + andl $255,%esi + shrl $16,%ebx + movzbl -128(%ebp,%esi,1),%esi + movzbl %ch,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,8(%esp) + movl %ecx,%esi + andl $255,%esi + shrl $24,%ecx + movzbl -128(%ebp,%esi,1),%esi + movzbl %dh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $16,%edi + andl $255,%edx + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movzbl %bh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + andl $255,%edx + movzbl -128(%ebp,%edx,1),%edx + movzbl %ah,%eax + movzbl -128(%ebp,%eax,1),%eax + shll $8,%eax + xorl %eax,%edx + movl 4(%esp),%eax + andl $255,%ebx + movzbl -128(%ebp,%ebx,1),%ebx + shll $16,%ebx + xorl %ebx,%edx + movl 8(%esp),%ebx + movzbl -128(%ebp,%ecx,1),%ecx + shll $24,%ecx + xorl %ecx,%edx + movl %esi,%ecx + movl %ecx,%esi + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%ecx,%ecx,1),%edi + subl %ebp,%esi + andl $4278124286,%edi + andl $454761243,%esi + movl %ecx,%ebp + xorl %edi,%esi + xorl %esi,%ecx + roll $24,%ecx + xorl %esi,%ecx + rorl $16,%ebp + xorl %ebp,%ecx + rorl $8,%ebp + xorl %ebp,%ecx + movl %edx,%esi + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%edx,%edx,1),%edi + subl %ebp,%esi + andl $4278124286,%edi + andl $454761243,%esi + movl %edx,%ebp + xorl %edi,%esi + xorl %esi,%edx + roll $24,%edx + xorl %esi,%edx + rorl $16,%ebp + xorl %ebp,%edx + rorl $8,%ebp + xorl %ebp,%edx + movl %eax,%esi + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%eax,%eax,1),%edi + subl %ebp,%esi + andl $4278124286,%edi + andl $454761243,%esi + movl %eax,%ebp + xorl %edi,%esi + xorl %esi,%eax + roll $24,%eax + xorl %esi,%eax + rorl $16,%ebp + xorl %ebp,%eax + rorl $8,%ebp + xorl %ebp,%eax + movl %ebx,%esi + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%ebx,%ebx,1),%edi + subl %ebp,%esi + andl $4278124286,%edi + andl $454761243,%esi + movl %ebx,%ebp + xorl %edi,%esi + xorl %esi,%ebx + roll $24,%ebx + xorl %esi,%ebx + rorl $16,%ebp + xorl %ebp,%ebx + rorl $8,%ebp + xorl %ebp,%ebx + movl 20(%esp),%edi + movl 28(%esp),%ebp + addl $16,%edi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + cmpl 24(%esp),%edi + movl %edi,20(%esp) + jb L000loop + movl %eax,%esi + andl $255,%esi + movzbl -128(%ebp,%esi,1),%esi + movzbl %bh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,4(%esp) + movl %ebx,%esi + andl $255,%esi + shrl $16,%ebx + movzbl -128(%ebp,%esi,1),%esi + movzbl %ch,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,8(%esp) + movl %ecx,%esi + andl $255,%esi + shrl $24,%ecx + movzbl -128(%ebp,%esi,1),%esi + movzbl %dh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $16,%edi + andl $255,%edx + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movzbl %bh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl 20(%esp),%edi + andl $255,%edx + movzbl -128(%ebp,%edx,1),%edx + movzbl %ah,%eax + movzbl -128(%ebp,%eax,1),%eax + shll $8,%eax + xorl %eax,%edx + movl 4(%esp),%eax + andl $255,%ebx + movzbl -128(%ebp,%ebx,1),%ebx + shll $16,%ebx + xorl %ebx,%edx + movl 8(%esp),%ebx + movzbl -128(%ebp,%ecx,1),%ecx + shll $24,%ecx + xorl %ecx,%edx + movl %esi,%ecx + xorl 16(%edi),%eax + xorl 20(%edi),%ebx + xorl 24(%edi),%ecx + xorl 28(%edi),%edx + ret +.align 4 +__sse_AES_encrypt_compact: + pxor (%edi),%mm0 + pxor 8(%edi),%mm4 + movl 240(%edi),%esi + leal -2(%esi,%esi,1),%esi + leal (%edi,%esi,8),%esi + movl %esi,24(%esp) + movl $454761243,%eax + movl %eax,8(%esp) + movl %eax,12(%esp) + movl -128(%ebp),%eax + movl -96(%ebp),%ebx + movl -64(%ebp),%ecx + movl -32(%ebp),%edx + movl (%ebp),%eax + movl 32(%ebp),%ebx + movl 64(%ebp),%ecx + movl 96(%ebp),%edx +.align 4,0x90 +L001loop: + pshufw $8,%mm0,%mm1 + pshufw $13,%mm4,%mm5 + movd %mm1,%eax + movd %mm5,%ebx + movzbl %al,%esi + movzbl -128(%ebp,%esi,1),%ecx + pshufw $13,%mm0,%mm2 + movzbl %ah,%edx + movzbl -128(%ebp,%edx,1),%edx + shll $8,%edx + shrl $16,%eax + movzbl %bl,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $16,%esi + orl %esi,%ecx + pshufw $8,%mm4,%mm6 + movzbl %bh,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $24,%esi + orl %esi,%edx + shrl $16,%ebx + movzbl %ah,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $8,%esi + orl %esi,%ecx + movzbl %bh,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $24,%esi + orl %esi,%ecx + movd %ecx,%mm0 + movzbl %al,%esi + movzbl -128(%ebp,%esi,1),%ecx + movd %mm2,%eax + movzbl %bl,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $16,%esi + orl %esi,%ecx + movd %mm6,%ebx + movzbl %ah,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $24,%esi + orl %esi,%ecx + movzbl %bh,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $8,%esi + orl %esi,%ecx + movd %ecx,%mm1 + movzbl %bl,%esi + movzbl -128(%ebp,%esi,1),%ecx + shrl $16,%ebx + movzbl %al,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $16,%esi + orl %esi,%ecx + shrl $16,%eax + punpckldq %mm1,%mm0 + movzbl %ah,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $24,%esi + orl %esi,%ecx + andl $255,%eax + movzbl -128(%ebp,%eax,1),%eax + shll $16,%eax + orl %eax,%edx + movzbl %bh,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $8,%esi + orl %esi,%ecx + movd %ecx,%mm4 + andl $255,%ebx + movzbl -128(%ebp,%ebx,1),%ebx + orl %ebx,%edx + movd %edx,%mm5 + punpckldq %mm5,%mm4 + addl $16,%edi + cmpl 24(%esp),%edi + ja L002out + movq 8(%esp),%mm2 + pxor %mm3,%mm3 + pxor %mm7,%mm7 + movq %mm0,%mm1 + movq %mm4,%mm5 + pcmpgtb %mm0,%mm3 + pcmpgtb %mm4,%mm7 + pand %mm2,%mm3 + pand %mm2,%mm7 + pshufw $177,%mm0,%mm2 + pshufw $177,%mm4,%mm6 + paddb %mm0,%mm0 + paddb %mm4,%mm4 + pxor %mm3,%mm0 + pxor %mm7,%mm4 + pshufw $177,%mm2,%mm3 + pshufw $177,%mm6,%mm7 + pxor %mm0,%mm1 + pxor %mm4,%mm5 + pxor %mm2,%mm0 + pxor %mm6,%mm4 + movq %mm3,%mm2 + movq %mm7,%mm6 + pslld $8,%mm3 + pslld $8,%mm7 + psrld $24,%mm2 + psrld $24,%mm6 + pxor %mm3,%mm0 + pxor %mm7,%mm4 + pxor %mm2,%mm0 + pxor %mm6,%mm4 + movq %mm1,%mm3 + movq %mm5,%mm7 + movq (%edi),%mm2 + movq 8(%edi),%mm6 + psrld $8,%mm1 + psrld $8,%mm5 + movl -128(%ebp),%eax + pslld $24,%mm3 + pslld $24,%mm7 + movl -64(%ebp),%ebx + pxor %mm1,%mm0 + pxor %mm5,%mm4 + movl (%ebp),%ecx + pxor %mm3,%mm0 + pxor %mm7,%mm4 + movl 64(%ebp),%edx + pxor %mm2,%mm0 + pxor %mm6,%mm4 + jmp L001loop +.align 4,0x90 +L002out: + pxor (%edi),%mm0 + pxor 8(%edi),%mm4 + ret +.align 4 +__x86_AES_encrypt: + movl %edi,20(%esp) + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl 240(%edi),%esi + leal -2(%esi,%esi,1),%esi + leal (%edi,%esi,8),%esi + movl %esi,24(%esp) +.align 4,0x90 +L003loop: + movl %eax,%esi + andl $255,%esi + movl (%ebp,%esi,8),%esi + movzbl %bh,%edi + xorl 3(%ebp,%edi,8),%esi + movl %ecx,%edi + shrl $16,%edi + andl $255,%edi + xorl 2(%ebp,%edi,8),%esi + movl %edx,%edi + shrl $24,%edi + xorl 1(%ebp,%edi,8),%esi + movl %esi,4(%esp) + movl %ebx,%esi + andl $255,%esi + shrl $16,%ebx + movl (%ebp,%esi,8),%esi + movzbl %ch,%edi + xorl 3(%ebp,%edi,8),%esi + movl %edx,%edi + shrl $16,%edi + andl $255,%edi + xorl 2(%ebp,%edi,8),%esi + movl %eax,%edi + shrl $24,%edi + xorl 1(%ebp,%edi,8),%esi + movl %esi,8(%esp) + movl %ecx,%esi + andl $255,%esi + shrl $24,%ecx + movl (%ebp,%esi,8),%esi + movzbl %dh,%edi + xorl 3(%ebp,%edi,8),%esi + movl %eax,%edi + shrl $16,%edi + andl $255,%edx + andl $255,%edi + xorl 2(%ebp,%edi,8),%esi + movzbl %bh,%edi + xorl 1(%ebp,%edi,8),%esi + movl 20(%esp),%edi + movl (%ebp,%edx,8),%edx + movzbl %ah,%eax + xorl 3(%ebp,%eax,8),%edx + movl 4(%esp),%eax + andl $255,%ebx + xorl 2(%ebp,%ebx,8),%edx + movl 8(%esp),%ebx + xorl 1(%ebp,%ecx,8),%edx + movl %esi,%ecx + addl $16,%edi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + cmpl 24(%esp),%edi + movl %edi,20(%esp) + jb L003loop + movl %eax,%esi + andl $255,%esi + movl 2(%ebp,%esi,8),%esi + andl $255,%esi + movzbl %bh,%edi + movl (%ebp,%edi,8),%edi + andl $65280,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $16,%edi + andl $255,%edi + movl (%ebp,%edi,8),%edi + andl $16711680,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $24,%edi + movl 2(%ebp,%edi,8),%edi + andl $4278190080,%edi + xorl %edi,%esi + movl %esi,4(%esp) + movl %ebx,%esi + andl $255,%esi + shrl $16,%ebx + movl 2(%ebp,%esi,8),%esi + andl $255,%esi + movzbl %ch,%edi + movl (%ebp,%edi,8),%edi + andl $65280,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $16,%edi + andl $255,%edi + movl (%ebp,%edi,8),%edi + andl $16711680,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $24,%edi + movl 2(%ebp,%edi,8),%edi + andl $4278190080,%edi + xorl %edi,%esi + movl %esi,8(%esp) + movl %ecx,%esi + andl $255,%esi + shrl $24,%ecx + movl 2(%ebp,%esi,8),%esi + andl $255,%esi + movzbl %dh,%edi + movl (%ebp,%edi,8),%edi + andl $65280,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $16,%edi + andl $255,%edx + andl $255,%edi + movl (%ebp,%edi,8),%edi + andl $16711680,%edi + xorl %edi,%esi + movzbl %bh,%edi + movl 2(%ebp,%edi,8),%edi + andl $4278190080,%edi + xorl %edi,%esi + movl 20(%esp),%edi + andl $255,%edx + movl 2(%ebp,%edx,8),%edx + andl $255,%edx + movzbl %ah,%eax + movl (%ebp,%eax,8),%eax + andl $65280,%eax + xorl %eax,%edx + movl 4(%esp),%eax + andl $255,%ebx + movl (%ebp,%ebx,8),%ebx + andl $16711680,%ebx + xorl %ebx,%edx + movl 8(%esp),%ebx + movl 2(%ebp,%ecx,8),%ecx + andl $4278190080,%ecx + xorl %ecx,%edx + movl %esi,%ecx + addl $16,%edi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + ret +.align 6,0x90 +LAES_Te: +.long 2774754246,2774754246 +.long 2222750968,2222750968 +.long 2574743534,2574743534 +.long 2373680118,2373680118 +.long 234025727,234025727 +.long 3177933782,3177933782 +.long 2976870366,2976870366 +.long 1422247313,1422247313 +.long 1345335392,1345335392 +.long 50397442,50397442 +.long 2842126286,2842126286 +.long 2099981142,2099981142 +.long 436141799,436141799 +.long 1658312629,1658312629 +.long 3870010189,3870010189 +.long 2591454956,2591454956 +.long 1170918031,1170918031 +.long 2642575903,2642575903 +.long 1086966153,1086966153 +.long 2273148410,2273148410 +.long 368769775,368769775 +.long 3948501426,3948501426 +.long 3376891790,3376891790 +.long 200339707,200339707 +.long 3970805057,3970805057 +.long 1742001331,1742001331 +.long 4255294047,4255294047 +.long 3937382213,3937382213 +.long 3214711843,3214711843 +.long 4154762323,4154762323 +.long 2524082916,2524082916 +.long 1539358875,1539358875 +.long 3266819957,3266819957 +.long 486407649,486407649 +.long 2928907069,2928907069 +.long 1780885068,1780885068 +.long 1513502316,1513502316 +.long 1094664062,1094664062 +.long 49805301,49805301 +.long 1338821763,1338821763 +.long 1546925160,1546925160 +.long 4104496465,4104496465 +.long 887481809,887481809 +.long 150073849,150073849 +.long 2473685474,2473685474 +.long 1943591083,1943591083 +.long 1395732834,1395732834 +.long 1058346282,1058346282 +.long 201589768,201589768 +.long 1388824469,1388824469 +.long 1696801606,1696801606 +.long 1589887901,1589887901 +.long 672667696,672667696 +.long 2711000631,2711000631 +.long 251987210,251987210 +.long 3046808111,3046808111 +.long 151455502,151455502 +.long 907153956,907153956 +.long 2608889883,2608889883 +.long 1038279391,1038279391 +.long 652995533,652995533 +.long 1764173646,1764173646 +.long 3451040383,3451040383 +.long 2675275242,2675275242 +.long 453576978,453576978 +.long 2659418909,2659418909 +.long 1949051992,1949051992 +.long 773462580,773462580 +.long 756751158,756751158 +.long 2993581788,2993581788 +.long 3998898868,3998898868 +.long 4221608027,4221608027 +.long 4132590244,4132590244 +.long 1295727478,1295727478 +.long 1641469623,1641469623 +.long 3467883389,3467883389 +.long 2066295122,2066295122 +.long 1055122397,1055122397 +.long 1898917726,1898917726 +.long 2542044179,2542044179 +.long 4115878822,4115878822 +.long 1758581177,1758581177 +.long 0,0 +.long 753790401,753790401 +.long 1612718144,1612718144 +.long 536673507,536673507 +.long 3367088505,3367088505 +.long 3982187446,3982187446 +.long 3194645204,3194645204 +.long 1187761037,1187761037 +.long 3653156455,3653156455 +.long 1262041458,1262041458 +.long 3729410708,3729410708 +.long 3561770136,3561770136 +.long 3898103984,3898103984 +.long 1255133061,1255133061 +.long 1808847035,1808847035 +.long 720367557,720367557 +.long 3853167183,3853167183 +.long 385612781,385612781 +.long 3309519750,3309519750 +.long 3612167578,3612167578 +.long 1429418854,1429418854 +.long 2491778321,2491778321 +.long 3477423498,3477423498 +.long 284817897,284817897 +.long 100794884,100794884 +.long 2172616702,2172616702 +.long 4031795360,4031795360 +.long 1144798328,1144798328 +.long 3131023141,3131023141 +.long 3819481163,3819481163 +.long 4082192802,4082192802 +.long 4272137053,4272137053 +.long 3225436288,3225436288 +.long 2324664069,2324664069 +.long 2912064063,2912064063 +.long 3164445985,3164445985 +.long 1211644016,1211644016 +.long 83228145,83228145 +.long 3753688163,3753688163 +.long 3249976951,3249976951 +.long 1977277103,1977277103 +.long 1663115586,1663115586 +.long 806359072,806359072 +.long 452984805,452984805 +.long 250868733,250868733 +.long 1842533055,1842533055 +.long 1288555905,1288555905 +.long 336333848,336333848 +.long 890442534,890442534 +.long 804056259,804056259 +.long 3781124030,3781124030 +.long 2727843637,2727843637 +.long 3427026056,3427026056 +.long 957814574,957814574 +.long 1472513171,1472513171 +.long 4071073621,4071073621 +.long 2189328124,2189328124 +.long 1195195770,1195195770 +.long 2892260552,2892260552 +.long 3881655738,3881655738 +.long 723065138,723065138 +.long 2507371494,2507371494 +.long 2690670784,2690670784 +.long 2558624025,2558624025 +.long 3511635870,3511635870 +.long 2145180835,2145180835 +.long 1713513028,1713513028 +.long 2116692564,2116692564 +.long 2878378043,2878378043 +.long 2206763019,2206763019 +.long 3393603212,3393603212 +.long 703524551,703524551 +.long 3552098411,3552098411 +.long 1007948840,1007948840 +.long 2044649127,2044649127 +.long 3797835452,3797835452 +.long 487262998,487262998 +.long 1994120109,1994120109 +.long 1004593371,1004593371 +.long 1446130276,1446130276 +.long 1312438900,1312438900 +.long 503974420,503974420 +.long 3679013266,3679013266 +.long 168166924,168166924 +.long 1814307912,1814307912 +.long 3831258296,3831258296 +.long 1573044895,1573044895 +.long 1859376061,1859376061 +.long 4021070915,4021070915 +.long 2791465668,2791465668 +.long 2828112185,2828112185 +.long 2761266481,2761266481 +.long 937747667,937747667 +.long 2339994098,2339994098 +.long 854058965,854058965 +.long 1137232011,1137232011 +.long 1496790894,1496790894 +.long 3077402074,3077402074 +.long 2358086913,2358086913 +.long 1691735473,1691735473 +.long 3528347292,3528347292 +.long 3769215305,3769215305 +.long 3027004632,3027004632 +.long 4199962284,4199962284 +.long 133494003,133494003 +.long 636152527,636152527 +.long 2942657994,2942657994 +.long 2390391540,2390391540 +.long 3920539207,3920539207 +.long 403179536,403179536 +.long 3585784431,3585784431 +.long 2289596656,2289596656 +.long 1864705354,1864705354 +.long 1915629148,1915629148 +.long 605822008,605822008 +.long 4054230615,4054230615 +.long 3350508659,3350508659 +.long 1371981463,1371981463 +.long 602466507,602466507 +.long 2094914977,2094914977 +.long 2624877800,2624877800 +.long 555687742,555687742 +.long 3712699286,3712699286 +.long 3703422305,3703422305 +.long 2257292045,2257292045 +.long 2240449039,2240449039 +.long 2423288032,2423288032 +.long 1111375484,1111375484 +.long 3300242801,3300242801 +.long 2858837708,2858837708 +.long 3628615824,3628615824 +.long 84083462,84083462 +.long 32962295,32962295 +.long 302911004,302911004 +.long 2741068226,2741068226 +.long 1597322602,1597322602 +.long 4183250862,4183250862 +.long 3501832553,3501832553 +.long 2441512471,2441512471 +.long 1489093017,1489093017 +.long 656219450,656219450 +.long 3114180135,3114180135 +.long 954327513,954327513 +.long 335083755,335083755 +.long 3013122091,3013122091 +.long 856756514,856756514 +.long 3144247762,3144247762 +.long 1893325225,1893325225 +.long 2307821063,2307821063 +.long 2811532339,2811532339 +.long 3063651117,3063651117 +.long 572399164,572399164 +.long 2458355477,2458355477 +.long 552200649,552200649 +.long 1238290055,1238290055 +.long 4283782570,4283782570 +.long 2015897680,2015897680 +.long 2061492133,2061492133 +.long 2408352771,2408352771 +.long 4171342169,4171342169 +.long 2156497161,2156497161 +.long 386731290,386731290 +.long 3669999461,3669999461 +.long 837215959,837215959 +.long 3326231172,3326231172 +.long 3093850320,3093850320 +.long 3275833730,3275833730 +.long 2962856233,2962856233 +.long 1999449434,1999449434 +.long 286199582,286199582 +.long 3417354363,3417354363 +.long 4233385128,4233385128 +.long 3602627437,3602627437 +.long 974525996,974525996 +.byte 99,124,119,123,242,107,111,197 +.byte 48,1,103,43,254,215,171,118 +.byte 202,130,201,125,250,89,71,240 +.byte 173,212,162,175,156,164,114,192 +.byte 183,253,147,38,54,63,247,204 +.byte 52,165,229,241,113,216,49,21 +.byte 4,199,35,195,24,150,5,154 +.byte 7,18,128,226,235,39,178,117 +.byte 9,131,44,26,27,110,90,160 +.byte 82,59,214,179,41,227,47,132 +.byte 83,209,0,237,32,252,177,91 +.byte 106,203,190,57,74,76,88,207 +.byte 208,239,170,251,67,77,51,133 +.byte 69,249,2,127,80,60,159,168 +.byte 81,163,64,143,146,157,56,245 +.byte 188,182,218,33,16,255,243,210 +.byte 205,12,19,236,95,151,68,23 +.byte 196,167,126,61,100,93,25,115 +.byte 96,129,79,220,34,42,144,136 +.byte 70,238,184,20,222,94,11,219 +.byte 224,50,58,10,73,6,36,92 +.byte 194,211,172,98,145,149,228,121 +.byte 231,200,55,109,141,213,78,169 +.byte 108,86,244,234,101,122,174,8 +.byte 186,120,37,46,28,166,180,198 +.byte 232,221,116,31,75,189,139,138 +.byte 112,62,181,102,72,3,246,14 +.byte 97,53,87,185,134,193,29,158 +.byte 225,248,152,17,105,217,142,148 +.byte 155,30,135,233,206,85,40,223 +.byte 140,161,137,13,191,230,66,104 +.byte 65,153,45,15,176,84,187,22 +.byte 99,124,119,123,242,107,111,197 +.byte 48,1,103,43,254,215,171,118 +.byte 202,130,201,125,250,89,71,240 +.byte 173,212,162,175,156,164,114,192 +.byte 183,253,147,38,54,63,247,204 +.byte 52,165,229,241,113,216,49,21 +.byte 4,199,35,195,24,150,5,154 +.byte 7,18,128,226,235,39,178,117 +.byte 9,131,44,26,27,110,90,160 +.byte 82,59,214,179,41,227,47,132 +.byte 83,209,0,237,32,252,177,91 +.byte 106,203,190,57,74,76,88,207 +.byte 208,239,170,251,67,77,51,133 +.byte 69,249,2,127,80,60,159,168 +.byte 81,163,64,143,146,157,56,245 +.byte 188,182,218,33,16,255,243,210 +.byte 205,12,19,236,95,151,68,23 +.byte 196,167,126,61,100,93,25,115 +.byte 96,129,79,220,34,42,144,136 +.byte 70,238,184,20,222,94,11,219 +.byte 224,50,58,10,73,6,36,92 +.byte 194,211,172,98,145,149,228,121 +.byte 231,200,55,109,141,213,78,169 +.byte 108,86,244,234,101,122,174,8 +.byte 186,120,37,46,28,166,180,198 +.byte 232,221,116,31,75,189,139,138 +.byte 112,62,181,102,72,3,246,14 +.byte 97,53,87,185,134,193,29,158 +.byte 225,248,152,17,105,217,142,148 +.byte 155,30,135,233,206,85,40,223 +.byte 140,161,137,13,191,230,66,104 +.byte 65,153,45,15,176,84,187,22 +.byte 99,124,119,123,242,107,111,197 +.byte 48,1,103,43,254,215,171,118 +.byte 202,130,201,125,250,89,71,240 +.byte 173,212,162,175,156,164,114,192 +.byte 183,253,147,38,54,63,247,204 +.byte 52,165,229,241,113,216,49,21 +.byte 4,199,35,195,24,150,5,154 +.byte 7,18,128,226,235,39,178,117 +.byte 9,131,44,26,27,110,90,160 +.byte 82,59,214,179,41,227,47,132 +.byte 83,209,0,237,32,252,177,91 +.byte 106,203,190,57,74,76,88,207 +.byte 208,239,170,251,67,77,51,133 +.byte 69,249,2,127,80,60,159,168 +.byte 81,163,64,143,146,157,56,245 +.byte 188,182,218,33,16,255,243,210 +.byte 205,12,19,236,95,151,68,23 +.byte 196,167,126,61,100,93,25,115 +.byte 96,129,79,220,34,42,144,136 +.byte 70,238,184,20,222,94,11,219 +.byte 224,50,58,10,73,6,36,92 +.byte 194,211,172,98,145,149,228,121 +.byte 231,200,55,109,141,213,78,169 +.byte 108,86,244,234,101,122,174,8 +.byte 186,120,37,46,28,166,180,198 +.byte 232,221,116,31,75,189,139,138 +.byte 112,62,181,102,72,3,246,14 +.byte 97,53,87,185,134,193,29,158 +.byte 225,248,152,17,105,217,142,148 +.byte 155,30,135,233,206,85,40,223 +.byte 140,161,137,13,191,230,66,104 +.byte 65,153,45,15,176,84,187,22 +.byte 99,124,119,123,242,107,111,197 +.byte 48,1,103,43,254,215,171,118 +.byte 202,130,201,125,250,89,71,240 +.byte 173,212,162,175,156,164,114,192 +.byte 183,253,147,38,54,63,247,204 +.byte 52,165,229,241,113,216,49,21 +.byte 4,199,35,195,24,150,5,154 +.byte 7,18,128,226,235,39,178,117 +.byte 9,131,44,26,27,110,90,160 +.byte 82,59,214,179,41,227,47,132 +.byte 83,209,0,237,32,252,177,91 +.byte 106,203,190,57,74,76,88,207 +.byte 208,239,170,251,67,77,51,133 +.byte 69,249,2,127,80,60,159,168 +.byte 81,163,64,143,146,157,56,245 +.byte 188,182,218,33,16,255,243,210 +.byte 205,12,19,236,95,151,68,23 +.byte 196,167,126,61,100,93,25,115 +.byte 96,129,79,220,34,42,144,136 +.byte 70,238,184,20,222,94,11,219 +.byte 224,50,58,10,73,6,36,92 +.byte 194,211,172,98,145,149,228,121 +.byte 231,200,55,109,141,213,78,169 +.byte 108,86,244,234,101,122,174,8 +.byte 186,120,37,46,28,166,180,198 +.byte 232,221,116,31,75,189,139,138 +.byte 112,62,181,102,72,3,246,14 +.byte 97,53,87,185,134,193,29,158 +.byte 225,248,152,17,105,217,142,148 +.byte 155,30,135,233,206,85,40,223 +.byte 140,161,137,13,191,230,66,104 +.byte 65,153,45,15,176,84,187,22 +.long 1,2,4,8 +.long 16,32,64,128 +.long 27,54,0,0 +.long 0,0,0,0 +.globl _AES_encrypt +.align 4 +_AES_encrypt: +L_AES_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 28(%esp),%edi + movl %esp,%eax + subl $36,%esp + andl $-64,%esp + leal -127(%edi),%ebx + subl %esp,%ebx + negl %ebx + andl $960,%ebx + subl %ebx,%esp + addl $4,%esp + movl %eax,28(%esp) + call L004pic_point +L004pic_point: + popl %ebp + movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L004pic_point(%ebp),%eax + leal LAES_Te-L004pic_point(%ebp),%ebp + leal 764(%esp),%ebx + subl %ebp,%ebx + andl $768,%ebx + leal 2176(%ebp,%ebx,1),%ebp + btl $25,(%eax) + jnc L005x86 + movq (%esi),%mm0 + movq 8(%esi),%mm4 + call __sse_AES_encrypt_compact + movl 28(%esp),%esp + movl 24(%esp),%esi + movq %mm0,(%esi) + movq %mm4,8(%esi) + emms + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 4,0x90 +L005x86: + movl %ebp,24(%esp) + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + call __x86_AES_encrypt_compact + movl 28(%esp),%esp + movl 24(%esp),%esi + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 4 +__x86_AES_decrypt_compact: + movl %edi,20(%esp) + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl 240(%edi),%esi + leal -2(%esi,%esi,1),%esi + leal (%edi,%esi,8),%esi + movl %esi,24(%esp) + movl -128(%ebp),%edi + movl -96(%ebp),%esi + movl -64(%ebp),%edi + movl -32(%ebp),%esi + movl (%ebp),%edi + movl 32(%ebp),%esi + movl 64(%ebp),%edi + movl 96(%ebp),%esi +.align 4,0x90 +L006loop: + movl %eax,%esi + andl $255,%esi + movzbl -128(%ebp,%esi,1),%esi + movzbl %dh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %ebx,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,4(%esp) + movl %ebx,%esi + andl $255,%esi + movzbl -128(%ebp,%esi,1),%esi + movzbl %ah,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,8(%esp) + movl %ecx,%esi + andl $255,%esi + movzbl -128(%ebp,%esi,1),%esi + movzbl %bh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + andl $255,%edx + movzbl -128(%ebp,%edx,1),%edx + movzbl %ch,%ecx + movzbl -128(%ebp,%ecx,1),%ecx + shll $8,%ecx + xorl %ecx,%edx + movl %esi,%ecx + shrl $16,%ebx + andl $255,%ebx + movzbl -128(%ebp,%ebx,1),%ebx + shll $16,%ebx + xorl %ebx,%edx + shrl $24,%eax + movzbl -128(%ebp,%eax,1),%eax + shll $24,%eax + xorl %eax,%edx + movl %ecx,%esi + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%ecx,%ecx,1),%eax + subl %edi,%esi + andl $4278124286,%eax + andl $454761243,%esi + xorl %eax,%esi + movl %esi,%eax + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%eax,%eax,1),%ebx + subl %edi,%esi + andl $4278124286,%ebx + andl $454761243,%esi + xorl %ecx,%eax + xorl %ebx,%esi + movl %esi,%ebx + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%ebx,%ebx,1),%ebp + subl %edi,%esi + andl $4278124286,%ebp + andl $454761243,%esi + xorl %ecx,%ebx + roll $8,%ecx + xorl %esi,%ebp + xorl %eax,%ecx + xorl %ebp,%eax + roll $24,%eax + xorl %ebx,%ecx + xorl %ebp,%ebx + roll $16,%ebx + xorl %ebp,%ecx + roll $8,%ebp + xorl %eax,%ecx + xorl %ebx,%ecx + movl 4(%esp),%eax + xorl %ebp,%ecx + movl %ecx,12(%esp) + movl %edx,%esi + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%edx,%edx,1),%ebx + subl %edi,%esi + andl $4278124286,%ebx + andl $454761243,%esi + xorl %ebx,%esi + movl %esi,%ebx + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%ebx,%ebx,1),%ecx + subl %edi,%esi + andl $4278124286,%ecx + andl $454761243,%esi + xorl %edx,%ebx + xorl %ecx,%esi + movl %esi,%ecx + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%ecx,%ecx,1),%ebp + subl %edi,%esi + andl $4278124286,%ebp + andl $454761243,%esi + xorl %edx,%ecx + roll $8,%edx + xorl %esi,%ebp + xorl %ebx,%edx + xorl %ebp,%ebx + roll $24,%ebx + xorl %ecx,%edx + xorl %ebp,%ecx + roll $16,%ecx + xorl %ebp,%edx + roll $8,%ebp + xorl %ebx,%edx + xorl %ecx,%edx + movl 8(%esp),%ebx + xorl %ebp,%edx + movl %edx,16(%esp) + movl %eax,%esi + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%eax,%eax,1),%ecx + subl %edi,%esi + andl $4278124286,%ecx + andl $454761243,%esi + xorl %ecx,%esi + movl %esi,%ecx + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%ecx,%ecx,1),%edx + subl %edi,%esi + andl $4278124286,%edx + andl $454761243,%esi + xorl %eax,%ecx + xorl %edx,%esi + movl %esi,%edx + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%edx,%edx,1),%ebp + subl %edi,%esi + andl $4278124286,%ebp + andl $454761243,%esi + xorl %eax,%edx + roll $8,%eax + xorl %esi,%ebp + xorl %ecx,%eax + xorl %ebp,%ecx + roll $24,%ecx + xorl %edx,%eax + xorl %ebp,%edx + roll $16,%edx + xorl %ebp,%eax + roll $8,%ebp + xorl %ecx,%eax + xorl %edx,%eax + xorl %ebp,%eax + movl %ebx,%esi + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%ebx,%ebx,1),%ecx + subl %edi,%esi + andl $4278124286,%ecx + andl $454761243,%esi + xorl %ecx,%esi + movl %esi,%ecx + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%ecx,%ecx,1),%edx + subl %edi,%esi + andl $4278124286,%edx + andl $454761243,%esi + xorl %ebx,%ecx + xorl %edx,%esi + movl %esi,%edx + andl $2155905152,%esi + movl %esi,%edi + shrl $7,%edi + leal (%edx,%edx,1),%ebp + subl %edi,%esi + andl $4278124286,%ebp + andl $454761243,%esi + xorl %ebx,%edx + roll $8,%ebx + xorl %esi,%ebp + xorl %ecx,%ebx + xorl %ebp,%ecx + roll $24,%ecx + xorl %edx,%ebx + xorl %ebp,%edx + roll $16,%edx + xorl %ebp,%ebx + roll $8,%ebp + xorl %ecx,%ebx + xorl %edx,%ebx + movl 12(%esp),%ecx + xorl %ebp,%ebx + movl 16(%esp),%edx + movl 20(%esp),%edi + movl 28(%esp),%ebp + addl $16,%edi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + cmpl 24(%esp),%edi + movl %edi,20(%esp) + jb L006loop + movl %eax,%esi + andl $255,%esi + movzbl -128(%ebp,%esi,1),%esi + movzbl %dh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %ebx,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,4(%esp) + movl %ebx,%esi + andl $255,%esi + movzbl -128(%ebp,%esi,1),%esi + movzbl %ah,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,8(%esp) + movl %ecx,%esi + andl $255,%esi + movzbl -128(%ebp,%esi,1),%esi + movzbl %bh,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $16,%edi + andl $255,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $24,%edi + movzbl -128(%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl 20(%esp),%edi + andl $255,%edx + movzbl -128(%ebp,%edx,1),%edx + movzbl %ch,%ecx + movzbl -128(%ebp,%ecx,1),%ecx + shll $8,%ecx + xorl %ecx,%edx + movl %esi,%ecx + shrl $16,%ebx + andl $255,%ebx + movzbl -128(%ebp,%ebx,1),%ebx + shll $16,%ebx + xorl %ebx,%edx + movl 8(%esp),%ebx + shrl $24,%eax + movzbl -128(%ebp,%eax,1),%eax + shll $24,%eax + xorl %eax,%edx + movl 4(%esp),%eax + xorl 16(%edi),%eax + xorl 20(%edi),%ebx + xorl 24(%edi),%ecx + xorl 28(%edi),%edx + ret +.align 4 +__sse_AES_decrypt_compact: + pxor (%edi),%mm0 + pxor 8(%edi),%mm4 + movl 240(%edi),%esi + leal -2(%esi,%esi,1),%esi + leal (%edi,%esi,8),%esi + movl %esi,24(%esp) + movl $454761243,%eax + movl %eax,8(%esp) + movl %eax,12(%esp) + movl -128(%ebp),%eax + movl -96(%ebp),%ebx + movl -64(%ebp),%ecx + movl -32(%ebp),%edx + movl (%ebp),%eax + movl 32(%ebp),%ebx + movl 64(%ebp),%ecx + movl 96(%ebp),%edx +.align 4,0x90 +L007loop: + pshufw $12,%mm0,%mm1 + movd %mm1,%eax + pshufw $9,%mm4,%mm5 + movzbl %al,%esi + movzbl -128(%ebp,%esi,1),%ecx + movd %mm5,%ebx + movzbl %ah,%edx + movzbl -128(%ebp,%edx,1),%edx + shll $8,%edx + pshufw $6,%mm0,%mm2 + movzbl %bl,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $16,%esi + orl %esi,%ecx + shrl $16,%eax + movzbl %bh,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $24,%esi + orl %esi,%edx + shrl $16,%ebx + pshufw $3,%mm4,%mm6 + movzbl %ah,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $24,%esi + orl %esi,%ecx + movzbl %bh,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $8,%esi + orl %esi,%ecx + movd %ecx,%mm0 + movzbl %al,%esi + movd %mm2,%eax + movzbl -128(%ebp,%esi,1),%ecx + shll $16,%ecx + movzbl %bl,%esi + movd %mm6,%ebx + movzbl -128(%ebp,%esi,1),%esi + orl %esi,%ecx + movzbl %al,%esi + movzbl -128(%ebp,%esi,1),%esi + orl %esi,%edx + movzbl %bl,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $16,%esi + orl %esi,%edx + movd %edx,%mm1 + movzbl %ah,%esi + movzbl -128(%ebp,%esi,1),%edx + shll $8,%edx + movzbl %bh,%esi + shrl $16,%eax + movzbl -128(%ebp,%esi,1),%esi + shll $24,%esi + orl %esi,%edx + shrl $16,%ebx + punpckldq %mm1,%mm0 + movzbl %bh,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $8,%esi + orl %esi,%ecx + andl $255,%ebx + movzbl -128(%ebp,%ebx,1),%ebx + orl %ebx,%edx + movzbl %al,%esi + movzbl -128(%ebp,%esi,1),%esi + shll $16,%esi + orl %esi,%edx + movd %edx,%mm4 + movzbl %ah,%eax + movzbl -128(%ebp,%eax,1),%eax + shll $24,%eax + orl %eax,%ecx + movd %ecx,%mm5 + punpckldq %mm5,%mm4 + addl $16,%edi + cmpl 24(%esp),%edi + ja L008out + movq %mm0,%mm3 + movq %mm4,%mm7 + pshufw $228,%mm0,%mm2 + pshufw $228,%mm4,%mm6 + movq %mm0,%mm1 + movq %mm4,%mm5 + pshufw $177,%mm0,%mm0 + pshufw $177,%mm4,%mm4 + pslld $8,%mm2 + pslld $8,%mm6 + psrld $8,%mm3 + psrld $8,%mm7 + pxor %mm2,%mm0 + pxor %mm6,%mm4 + pxor %mm3,%mm0 + pxor %mm7,%mm4 + pslld $16,%mm2 + pslld $16,%mm6 + psrld $16,%mm3 + psrld $16,%mm7 + pxor %mm2,%mm0 + pxor %mm6,%mm4 + pxor %mm3,%mm0 + pxor %mm7,%mm4 + movq 8(%esp),%mm3 + pxor %mm2,%mm2 + pxor %mm6,%mm6 + pcmpgtb %mm1,%mm2 + pcmpgtb %mm5,%mm6 + pand %mm3,%mm2 + pand %mm3,%mm6 + paddb %mm1,%mm1 + paddb %mm5,%mm5 + pxor %mm2,%mm1 + pxor %mm6,%mm5 + movq %mm1,%mm3 + movq %mm5,%mm7 + movq %mm1,%mm2 + movq %mm5,%mm6 + pxor %mm1,%mm0 + pxor %mm5,%mm4 + pslld $24,%mm3 + pslld $24,%mm7 + psrld $8,%mm2 + psrld $8,%mm6 + pxor %mm3,%mm0 + pxor %mm7,%mm4 + pxor %mm2,%mm0 + pxor %mm6,%mm4 + movq 8(%esp),%mm2 + pxor %mm3,%mm3 + pxor %mm7,%mm7 + pcmpgtb %mm1,%mm3 + pcmpgtb %mm5,%mm7 + pand %mm2,%mm3 + pand %mm2,%mm7 + paddb %mm1,%mm1 + paddb %mm5,%mm5 + pxor %mm3,%mm1 + pxor %mm7,%mm5 + pshufw $177,%mm1,%mm3 + pshufw $177,%mm5,%mm7 + pxor %mm1,%mm0 + pxor %mm5,%mm4 + pxor %mm3,%mm0 + pxor %mm7,%mm4 + pxor %mm3,%mm3 + pxor %mm7,%mm7 + pcmpgtb %mm1,%mm3 + pcmpgtb %mm5,%mm7 + pand %mm2,%mm3 + pand %mm2,%mm7 + paddb %mm1,%mm1 + paddb %mm5,%mm5 + pxor %mm3,%mm1 + pxor %mm7,%mm5 + pxor %mm1,%mm0 + pxor %mm5,%mm4 + movq %mm1,%mm3 + movq %mm5,%mm7 + pshufw $177,%mm1,%mm2 + pshufw $177,%mm5,%mm6 + pxor %mm2,%mm0 + pxor %mm6,%mm4 + pslld $8,%mm1 + pslld $8,%mm5 + psrld $8,%mm3 + psrld $8,%mm7 + movq (%edi),%mm2 + movq 8(%edi),%mm6 + pxor %mm1,%mm0 + pxor %mm5,%mm4 + pxor %mm3,%mm0 + pxor %mm7,%mm4 + movl -128(%ebp),%eax + pslld $16,%mm1 + pslld $16,%mm5 + movl -64(%ebp),%ebx + psrld $16,%mm3 + psrld $16,%mm7 + movl (%ebp),%ecx + pxor %mm1,%mm0 + pxor %mm5,%mm4 + movl 64(%ebp),%edx + pxor %mm3,%mm0 + pxor %mm7,%mm4 + pxor %mm2,%mm0 + pxor %mm6,%mm4 + jmp L007loop +.align 4,0x90 +L008out: + pxor (%edi),%mm0 + pxor 8(%edi),%mm4 + ret +.align 4 +__x86_AES_decrypt: + movl %edi,20(%esp) + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl 240(%edi),%esi + leal -2(%esi,%esi,1),%esi + leal (%edi,%esi,8),%esi + movl %esi,24(%esp) +.align 4,0x90 +L009loop: + movl %eax,%esi + andl $255,%esi + movl (%ebp,%esi,8),%esi + movzbl %dh,%edi + xorl 3(%ebp,%edi,8),%esi + movl %ecx,%edi + shrl $16,%edi + andl $255,%edi + xorl 2(%ebp,%edi,8),%esi + movl %ebx,%edi + shrl $24,%edi + xorl 1(%ebp,%edi,8),%esi + movl %esi,4(%esp) + movl %ebx,%esi + andl $255,%esi + movl (%ebp,%esi,8),%esi + movzbl %ah,%edi + xorl 3(%ebp,%edi,8),%esi + movl %edx,%edi + shrl $16,%edi + andl $255,%edi + xorl 2(%ebp,%edi,8),%esi + movl %ecx,%edi + shrl $24,%edi + xorl 1(%ebp,%edi,8),%esi + movl %esi,8(%esp) + movl %ecx,%esi + andl $255,%esi + movl (%ebp,%esi,8),%esi + movzbl %bh,%edi + xorl 3(%ebp,%edi,8),%esi + movl %eax,%edi + shrl $16,%edi + andl $255,%edi + xorl 2(%ebp,%edi,8),%esi + movl %edx,%edi + shrl $24,%edi + xorl 1(%ebp,%edi,8),%esi + movl 20(%esp),%edi + andl $255,%edx + movl (%ebp,%edx,8),%edx + movzbl %ch,%ecx + xorl 3(%ebp,%ecx,8),%edx + movl %esi,%ecx + shrl $16,%ebx + andl $255,%ebx + xorl 2(%ebp,%ebx,8),%edx + movl 8(%esp),%ebx + shrl $24,%eax + xorl 1(%ebp,%eax,8),%edx + movl 4(%esp),%eax + addl $16,%edi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + cmpl 24(%esp),%edi + movl %edi,20(%esp) + jb L009loop + leal 2176(%ebp),%ebp + movl -128(%ebp),%edi + movl -96(%ebp),%esi + movl -64(%ebp),%edi + movl -32(%ebp),%esi + movl (%ebp),%edi + movl 32(%ebp),%esi + movl 64(%ebp),%edi + movl 96(%ebp),%esi + leal -128(%ebp),%ebp + movl %eax,%esi + andl $255,%esi + movzbl (%ebp,%esi,1),%esi + movzbl %dh,%edi + movzbl (%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $16,%edi + andl $255,%edi + movzbl (%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %ebx,%edi + shrl $24,%edi + movzbl (%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,4(%esp) + movl %ebx,%esi + andl $255,%esi + movzbl (%ebp,%esi,1),%esi + movzbl %ah,%edi + movzbl (%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $16,%edi + andl $255,%edi + movzbl (%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %ecx,%edi + shrl $24,%edi + movzbl (%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl %esi,8(%esp) + movl %ecx,%esi + andl $255,%esi + movzbl (%ebp,%esi,1),%esi + movzbl %bh,%edi + movzbl (%ebp,%edi,1),%edi + shll $8,%edi + xorl %edi,%esi + movl %eax,%edi + shrl $16,%edi + andl $255,%edi + movzbl (%ebp,%edi,1),%edi + shll $16,%edi + xorl %edi,%esi + movl %edx,%edi + shrl $24,%edi + movzbl (%ebp,%edi,1),%edi + shll $24,%edi + xorl %edi,%esi + movl 20(%esp),%edi + andl $255,%edx + movzbl (%ebp,%edx,1),%edx + movzbl %ch,%ecx + movzbl (%ebp,%ecx,1),%ecx + shll $8,%ecx + xorl %ecx,%edx + movl %esi,%ecx + shrl $16,%ebx + andl $255,%ebx + movzbl (%ebp,%ebx,1),%ebx + shll $16,%ebx + xorl %ebx,%edx + movl 8(%esp),%ebx + shrl $24,%eax + movzbl (%ebp,%eax,1),%eax + shll $24,%eax + xorl %eax,%edx + movl 4(%esp),%eax + leal -2048(%ebp),%ebp + addl $16,%edi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + ret +.align 6,0x90 +LAES_Td: +.long 1353184337,1353184337 +.long 1399144830,1399144830 +.long 3282310938,3282310938 +.long 2522752826,2522752826 +.long 3412831035,3412831035 +.long 4047871263,4047871263 +.long 2874735276,2874735276 +.long 2466505547,2466505547 +.long 1442459680,1442459680 +.long 4134368941,4134368941 +.long 2440481928,2440481928 +.long 625738485,625738485 +.long 4242007375,4242007375 +.long 3620416197,3620416197 +.long 2151953702,2151953702 +.long 2409849525,2409849525 +.long 1230680542,1230680542 +.long 1729870373,1729870373 +.long 2551114309,2551114309 +.long 3787521629,3787521629 +.long 41234371,41234371 +.long 317738113,317738113 +.long 2744600205,2744600205 +.long 3338261355,3338261355 +.long 3881799427,3881799427 +.long 2510066197,2510066197 +.long 3950669247,3950669247 +.long 3663286933,3663286933 +.long 763608788,763608788 +.long 3542185048,3542185048 +.long 694804553,694804553 +.long 1154009486,1154009486 +.long 1787413109,1787413109 +.long 2021232372,2021232372 +.long 1799248025,1799248025 +.long 3715217703,3715217703 +.long 3058688446,3058688446 +.long 397248752,397248752 +.long 1722556617,1722556617 +.long 3023752829,3023752829 +.long 407560035,407560035 +.long 2184256229,2184256229 +.long 1613975959,1613975959 +.long 1165972322,1165972322 +.long 3765920945,3765920945 +.long 2226023355,2226023355 +.long 480281086,480281086 +.long 2485848313,2485848313 +.long 1483229296,1483229296 +.long 436028815,436028815 +.long 2272059028,2272059028 +.long 3086515026,3086515026 +.long 601060267,601060267 +.long 3791801202,3791801202 +.long 1468997603,1468997603 +.long 715871590,715871590 +.long 120122290,120122290 +.long 63092015,63092015 +.long 2591802758,2591802758 +.long 2768779219,2768779219 +.long 4068943920,4068943920 +.long 2997206819,2997206819 +.long 3127509762,3127509762 +.long 1552029421,1552029421 +.long 723308426,723308426 +.long 2461301159,2461301159 +.long 4042393587,4042393587 +.long 2715969870,2715969870 +.long 3455375973,3455375973 +.long 3586000134,3586000134 +.long 526529745,526529745 +.long 2331944644,2331944644 +.long 2639474228,2639474228 +.long 2689987490,2689987490 +.long 853641733,853641733 +.long 1978398372,1978398372 +.long 971801355,971801355 +.long 2867814464,2867814464 +.long 111112542,111112542 +.long 1360031421,1360031421 +.long 4186579262,4186579262 +.long 1023860118,1023860118 +.long 2919579357,2919579357 +.long 1186850381,1186850381 +.long 3045938321,3045938321 +.long 90031217,90031217 +.long 1876166148,1876166148 +.long 4279586912,4279586912 +.long 620468249,620468249 +.long 2548678102,2548678102 +.long 3426959497,3426959497 +.long 2006899047,2006899047 +.long 3175278768,3175278768 +.long 2290845959,2290845959 +.long 945494503,945494503 +.long 3689859193,3689859193 +.long 1191869601,1191869601 +.long 3910091388,3910091388 +.long 3374220536,3374220536 +.long 0,0 +.long 2206629897,2206629897 +.long 1223502642,1223502642 +.long 2893025566,2893025566 +.long 1316117100,1316117100 +.long 4227796733,4227796733 +.long 1446544655,1446544655 +.long 517320253,517320253 +.long 658058550,658058550 +.long 1691946762,1691946762 +.long 564550760,564550760 +.long 3511966619,3511966619 +.long 976107044,976107044 +.long 2976320012,2976320012 +.long 266819475,266819475 +.long 3533106868,3533106868 +.long 2660342555,2660342555 +.long 1338359936,1338359936 +.long 2720062561,2720062561 +.long 1766553434,1766553434 +.long 370807324,370807324 +.long 179999714,179999714 +.long 3844776128,3844776128 +.long 1138762300,1138762300 +.long 488053522,488053522 +.long 185403662,185403662 +.long 2915535858,2915535858 +.long 3114841645,3114841645 +.long 3366526484,3366526484 +.long 2233069911,2233069911 +.long 1275557295,1275557295 +.long 3151862254,3151862254 +.long 4250959779,4250959779 +.long 2670068215,2670068215 +.long 3170202204,3170202204 +.long 3309004356,3309004356 +.long 880737115,880737115 +.long 1982415755,1982415755 +.long 3703972811,3703972811 +.long 1761406390,1761406390 +.long 1676797112,1676797112 +.long 3403428311,3403428311 +.long 277177154,277177154 +.long 1076008723,1076008723 +.long 538035844,538035844 +.long 2099530373,2099530373 +.long 4164795346,4164795346 +.long 288553390,288553390 +.long 1839278535,1839278535 +.long 1261411869,1261411869 +.long 4080055004,4080055004 +.long 3964831245,3964831245 +.long 3504587127,3504587127 +.long 1813426987,1813426987 +.long 2579067049,2579067049 +.long 4199060497,4199060497 +.long 577038663,577038663 +.long 3297574056,3297574056 +.long 440397984,440397984 +.long 3626794326,3626794326 +.long 4019204898,4019204898 +.long 3343796615,3343796615 +.long 3251714265,3251714265 +.long 4272081548,4272081548 +.long 906744984,906744984 +.long 3481400742,3481400742 +.long 685669029,685669029 +.long 646887386,646887386 +.long 2764025151,2764025151 +.long 3835509292,3835509292 +.long 227702864,227702864 +.long 2613862250,2613862250 +.long 1648787028,1648787028 +.long 3256061430,3256061430 +.long 3904428176,3904428176 +.long 1593260334,1593260334 +.long 4121936770,4121936770 +.long 3196083615,3196083615 +.long 2090061929,2090061929 +.long 2838353263,2838353263 +.long 3004310991,3004310991 +.long 999926984,999926984 +.long 2809993232,2809993232 +.long 1852021992,1852021992 +.long 2075868123,2075868123 +.long 158869197,158869197 +.long 4095236462,4095236462 +.long 28809964,28809964 +.long 2828685187,2828685187 +.long 1701746150,1701746150 +.long 2129067946,2129067946 +.long 147831841,147831841 +.long 3873969647,3873969647 +.long 3650873274,3650873274 +.long 3459673930,3459673930 +.long 3557400554,3557400554 +.long 3598495785,3598495785 +.long 2947720241,2947720241 +.long 824393514,824393514 +.long 815048134,815048134 +.long 3227951669,3227951669 +.long 935087732,935087732 +.long 2798289660,2798289660 +.long 2966458592,2966458592 +.long 366520115,366520115 +.long 1251476721,1251476721 +.long 4158319681,4158319681 +.long 240176511,240176511 +.long 804688151,804688151 +.long 2379631990,2379631990 +.long 1303441219,1303441219 +.long 1414376140,1414376140 +.long 3741619940,3741619940 +.long 3820343710,3820343710 +.long 461924940,461924940 +.long 3089050817,3089050817 +.long 2136040774,2136040774 +.long 82468509,82468509 +.long 1563790337,1563790337 +.long 1937016826,1937016826 +.long 776014843,776014843 +.long 1511876531,1511876531 +.long 1389550482,1389550482 +.long 861278441,861278441 +.long 323475053,323475053 +.long 2355222426,2355222426 +.long 2047648055,2047648055 +.long 2383738969,2383738969 +.long 2302415851,2302415851 +.long 3995576782,3995576782 +.long 902390199,902390199 +.long 3991215329,3991215329 +.long 1018251130,1018251130 +.long 1507840668,1507840668 +.long 1064563285,1064563285 +.long 2043548696,2043548696 +.long 3208103795,3208103795 +.long 3939366739,3939366739 +.long 1537932639,1537932639 +.long 342834655,342834655 +.long 2262516856,2262516856 +.long 2180231114,2180231114 +.long 1053059257,1053059257 +.long 741614648,741614648 +.long 1598071746,1598071746 +.long 1925389590,1925389590 +.long 203809468,203809468 +.long 2336832552,2336832552 +.long 1100287487,1100287487 +.long 1895934009,1895934009 +.long 3736275976,3736275976 +.long 2632234200,2632234200 +.long 2428589668,2428589668 +.long 1636092795,1636092795 +.long 1890988757,1890988757 +.long 1952214088,1952214088 +.long 1113045200,1113045200 +.byte 82,9,106,213,48,54,165,56 +.byte 191,64,163,158,129,243,215,251 +.byte 124,227,57,130,155,47,255,135 +.byte 52,142,67,68,196,222,233,203 +.byte 84,123,148,50,166,194,35,61 +.byte 238,76,149,11,66,250,195,78 +.byte 8,46,161,102,40,217,36,178 +.byte 118,91,162,73,109,139,209,37 +.byte 114,248,246,100,134,104,152,22 +.byte 212,164,92,204,93,101,182,146 +.byte 108,112,72,80,253,237,185,218 +.byte 94,21,70,87,167,141,157,132 +.byte 144,216,171,0,140,188,211,10 +.byte 247,228,88,5,184,179,69,6 +.byte 208,44,30,143,202,63,15,2 +.byte 193,175,189,3,1,19,138,107 +.byte 58,145,17,65,79,103,220,234 +.byte 151,242,207,206,240,180,230,115 +.byte 150,172,116,34,231,173,53,133 +.byte 226,249,55,232,28,117,223,110 +.byte 71,241,26,113,29,41,197,137 +.byte 111,183,98,14,170,24,190,27 +.byte 252,86,62,75,198,210,121,32 +.byte 154,219,192,254,120,205,90,244 +.byte 31,221,168,51,136,7,199,49 +.byte 177,18,16,89,39,128,236,95 +.byte 96,81,127,169,25,181,74,13 +.byte 45,229,122,159,147,201,156,239 +.byte 160,224,59,77,174,42,245,176 +.byte 200,235,187,60,131,83,153,97 +.byte 23,43,4,126,186,119,214,38 +.byte 225,105,20,99,85,33,12,125 +.byte 82,9,106,213,48,54,165,56 +.byte 191,64,163,158,129,243,215,251 +.byte 124,227,57,130,155,47,255,135 +.byte 52,142,67,68,196,222,233,203 +.byte 84,123,148,50,166,194,35,61 +.byte 238,76,149,11,66,250,195,78 +.byte 8,46,161,102,40,217,36,178 +.byte 118,91,162,73,109,139,209,37 +.byte 114,248,246,100,134,104,152,22 +.byte 212,164,92,204,93,101,182,146 +.byte 108,112,72,80,253,237,185,218 +.byte 94,21,70,87,167,141,157,132 +.byte 144,216,171,0,140,188,211,10 +.byte 247,228,88,5,184,179,69,6 +.byte 208,44,30,143,202,63,15,2 +.byte 193,175,189,3,1,19,138,107 +.byte 58,145,17,65,79,103,220,234 +.byte 151,242,207,206,240,180,230,115 +.byte 150,172,116,34,231,173,53,133 +.byte 226,249,55,232,28,117,223,110 +.byte 71,241,26,113,29,41,197,137 +.byte 111,183,98,14,170,24,190,27 +.byte 252,86,62,75,198,210,121,32 +.byte 154,219,192,254,120,205,90,244 +.byte 31,221,168,51,136,7,199,49 +.byte 177,18,16,89,39,128,236,95 +.byte 96,81,127,169,25,181,74,13 +.byte 45,229,122,159,147,201,156,239 +.byte 160,224,59,77,174,42,245,176 +.byte 200,235,187,60,131,83,153,97 +.byte 23,43,4,126,186,119,214,38 +.byte 225,105,20,99,85,33,12,125 +.byte 82,9,106,213,48,54,165,56 +.byte 191,64,163,158,129,243,215,251 +.byte 124,227,57,130,155,47,255,135 +.byte 52,142,67,68,196,222,233,203 +.byte 84,123,148,50,166,194,35,61 +.byte 238,76,149,11,66,250,195,78 +.byte 8,46,161,102,40,217,36,178 +.byte 118,91,162,73,109,139,209,37 +.byte 114,248,246,100,134,104,152,22 +.byte 212,164,92,204,93,101,182,146 +.byte 108,112,72,80,253,237,185,218 +.byte 94,21,70,87,167,141,157,132 +.byte 144,216,171,0,140,188,211,10 +.byte 247,228,88,5,184,179,69,6 +.byte 208,44,30,143,202,63,15,2 +.byte 193,175,189,3,1,19,138,107 +.byte 58,145,17,65,79,103,220,234 +.byte 151,242,207,206,240,180,230,115 +.byte 150,172,116,34,231,173,53,133 +.byte 226,249,55,232,28,117,223,110 +.byte 71,241,26,113,29,41,197,137 +.byte 111,183,98,14,170,24,190,27 +.byte 252,86,62,75,198,210,121,32 +.byte 154,219,192,254,120,205,90,244 +.byte 31,221,168,51,136,7,199,49 +.byte 177,18,16,89,39,128,236,95 +.byte 96,81,127,169,25,181,74,13 +.byte 45,229,122,159,147,201,156,239 +.byte 160,224,59,77,174,42,245,176 +.byte 200,235,187,60,131,83,153,97 +.byte 23,43,4,126,186,119,214,38 +.byte 225,105,20,99,85,33,12,125 +.byte 82,9,106,213,48,54,165,56 +.byte 191,64,163,158,129,243,215,251 +.byte 124,227,57,130,155,47,255,135 +.byte 52,142,67,68,196,222,233,203 +.byte 84,123,148,50,166,194,35,61 +.byte 238,76,149,11,66,250,195,78 +.byte 8,46,161,102,40,217,36,178 +.byte 118,91,162,73,109,139,209,37 +.byte 114,248,246,100,134,104,152,22 +.byte 212,164,92,204,93,101,182,146 +.byte 108,112,72,80,253,237,185,218 +.byte 94,21,70,87,167,141,157,132 +.byte 144,216,171,0,140,188,211,10 +.byte 247,228,88,5,184,179,69,6 +.byte 208,44,30,143,202,63,15,2 +.byte 193,175,189,3,1,19,138,107 +.byte 58,145,17,65,79,103,220,234 +.byte 151,242,207,206,240,180,230,115 +.byte 150,172,116,34,231,173,53,133 +.byte 226,249,55,232,28,117,223,110 +.byte 71,241,26,113,29,41,197,137 +.byte 111,183,98,14,170,24,190,27 +.byte 252,86,62,75,198,210,121,32 +.byte 154,219,192,254,120,205,90,244 +.byte 31,221,168,51,136,7,199,49 +.byte 177,18,16,89,39,128,236,95 +.byte 96,81,127,169,25,181,74,13 +.byte 45,229,122,159,147,201,156,239 +.byte 160,224,59,77,174,42,245,176 +.byte 200,235,187,60,131,83,153,97 +.byte 23,43,4,126,186,119,214,38 +.byte 225,105,20,99,85,33,12,125 +.globl _AES_decrypt +.align 4 +_AES_decrypt: +L_AES_decrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 28(%esp),%edi + movl %esp,%eax + subl $36,%esp + andl $-64,%esp + leal -127(%edi),%ebx + subl %esp,%ebx + negl %ebx + andl $960,%ebx + subl %ebx,%esp + addl $4,%esp + movl %eax,28(%esp) + call L010pic_point +L010pic_point: + popl %ebp + movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L010pic_point(%ebp),%eax + leal LAES_Td-L010pic_point(%ebp),%ebp + leal 764(%esp),%ebx + subl %ebp,%ebx + andl $768,%ebx + leal 2176(%ebp,%ebx,1),%ebp + btl $25,(%eax) + jnc L011x86 + movq (%esi),%mm0 + movq 8(%esi),%mm4 + call __sse_AES_decrypt_compact + movl 28(%esp),%esp + movl 24(%esp),%esi + movq %mm0,(%esi) + movq %mm4,8(%esi) + emms + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 4,0x90 +L011x86: + movl %ebp,24(%esp) + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + call __x86_AES_decrypt_compact + movl 28(%esp),%esp + movl 24(%esp),%esi + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _AES_cbc_encrypt +.align 4 +_AES_cbc_encrypt: +L_AES_cbc_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 28(%esp),%ecx + cmpl $0,%ecx + je L012drop_out + call L013pic_point +L013pic_point: + popl %ebp + movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L013pic_point(%ebp),%eax + cmpl $0,40(%esp) + leal LAES_Te-L013pic_point(%ebp),%ebp + jne L014picked_te + leal LAES_Td-LAES_Te(%ebp),%ebp +L014picked_te: + pushfl + cld + cmpl $512,%ecx + jb L015slow_way + testl $15,%ecx + jnz L015slow_way + btl $28,(%eax) + jc L015slow_way + leal -324(%esp),%esi + andl $-64,%esi + movl %ebp,%eax + leal 2304(%ebp),%ebx + movl %esi,%edx + andl $4095,%eax + andl $4095,%ebx + andl $4095,%edx + cmpl %ebx,%edx + jb L016tbl_break_out + subl %ebx,%edx + subl %edx,%esi + jmp L017tbl_ok +.align 2,0x90 +L016tbl_break_out: + subl %eax,%edx + andl $4095,%edx + addl $384,%edx + subl %edx,%esi +.align 2,0x90 +L017tbl_ok: + leal 24(%esp),%edx + xchgl %esi,%esp + addl $4,%esp + movl %ebp,24(%esp) + movl %esi,28(%esp) + movl (%edx),%eax + movl 4(%edx),%ebx + movl 12(%edx),%edi + movl 16(%edx),%esi + movl 20(%edx),%edx + movl %eax,32(%esp) + movl %ebx,36(%esp) + movl %ecx,40(%esp) + movl %edi,44(%esp) + movl %esi,48(%esp) + movl $0,316(%esp) + movl %edi,%ebx + movl $61,%ecx + subl %ebp,%ebx + movl %edi,%esi + andl $4095,%ebx + leal 76(%esp),%edi + cmpl $2304,%ebx + jb L018do_copy + cmpl $3852,%ebx + jb L019skip_copy +.align 2,0x90 +L018do_copy: + movl %edi,44(%esp) +.long 2784229001 +L019skip_copy: + movl $16,%edi +.align 2,0x90 +L020prefetch_tbl: + movl (%ebp),%eax + movl 32(%ebp),%ebx + movl 64(%ebp),%ecx + movl 96(%ebp),%esi + leal 128(%ebp),%ebp + subl $1,%edi + jnz L020prefetch_tbl + subl $2048,%ebp + movl 32(%esp),%esi + movl 48(%esp),%edi + cmpl $0,%edx + je L021fast_decrypt + movl (%edi),%eax + movl 4(%edi),%ebx +.align 4,0x90 +L022fast_enc_loop: + movl 8(%edi),%ecx + movl 12(%edi),%edx + xorl (%esi),%eax + xorl 4(%esi),%ebx + xorl 8(%esi),%ecx + xorl 12(%esi),%edx + movl 44(%esp),%edi + call __x86_AES_encrypt + movl 32(%esp),%esi + movl 36(%esp),%edi + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + leal 16(%esi),%esi + movl 40(%esp),%ecx + movl %esi,32(%esp) + leal 16(%edi),%edx + movl %edx,36(%esp) + subl $16,%ecx + movl %ecx,40(%esp) + jnz L022fast_enc_loop + movl 48(%esp),%esi + movl 8(%edi),%ecx + movl 12(%edi),%edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + cmpl $0,316(%esp) + movl 44(%esp),%edi + je L023skip_ezero + movl $60,%ecx + xorl %eax,%eax +.align 2,0x90 +.long 2884892297 +L023skip_ezero: + movl 28(%esp),%esp + popfl +L012drop_out: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret + pushfl +.align 4,0x90 +L021fast_decrypt: + cmpl 36(%esp),%esi + je L024fast_dec_in_place + movl %edi,52(%esp) +.align 2,0x90 +.align 4,0x90 +L025fast_dec_loop: + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl 44(%esp),%edi + call __x86_AES_decrypt + movl 52(%esp),%edi + movl 40(%esp),%esi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl 36(%esp),%edi + movl 32(%esp),%esi + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 40(%esp),%ecx + movl %esi,52(%esp) + leal 16(%esi),%esi + movl %esi,32(%esp) + leal 16(%edi),%edi + movl %edi,36(%esp) + subl $16,%ecx + movl %ecx,40(%esp) + jnz L025fast_dec_loop + movl 52(%esp),%edi + movl 48(%esp),%esi + movl (%edi),%eax + movl 4(%edi),%ebx + movl 8(%edi),%ecx + movl 12(%edi),%edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + jmp L026fast_dec_out +.align 4,0x90 +L024fast_dec_in_place: +L027fast_dec_in_place_loop: + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + leal 60(%esp),%edi + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 44(%esp),%edi + call __x86_AES_decrypt + movl 48(%esp),%edi + movl 36(%esp),%esi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + leal 16(%esi),%esi + movl %esi,36(%esp) + leal 60(%esp),%esi + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 32(%esp),%esi + movl 40(%esp),%ecx + leal 16(%esi),%esi + movl %esi,32(%esp) + subl $16,%ecx + movl %ecx,40(%esp) + jnz L027fast_dec_in_place_loop +.align 2,0x90 +L026fast_dec_out: + cmpl $0,316(%esp) + movl 44(%esp),%edi + je L028skip_dzero + movl $60,%ecx + xorl %eax,%eax +.align 2,0x90 +.long 2884892297 +L028skip_dzero: + movl 28(%esp),%esp + popfl + popl %edi + popl %esi + popl %ebx + popl %ebp + ret + pushfl +.align 4,0x90 +L015slow_way: + movl (%eax),%eax + movl 36(%esp),%edi + leal -80(%esp),%esi + andl $-64,%esi + leal -143(%edi),%ebx + subl %esi,%ebx + negl %ebx + andl $960,%ebx + subl %ebx,%esi + leal 768(%esi),%ebx + subl %ebp,%ebx + andl $768,%ebx + leal 2176(%ebp,%ebx,1),%ebp + leal 24(%esp),%edx + xchgl %esi,%esp + addl $4,%esp + movl %ebp,24(%esp) + movl %esi,28(%esp) + movl %eax,52(%esp) + movl (%edx),%eax + movl 4(%edx),%ebx + movl 16(%edx),%esi + movl 20(%edx),%edx + movl %eax,32(%esp) + movl %ebx,36(%esp) + movl %ecx,40(%esp) + movl %edi,44(%esp) + movl %esi,48(%esp) + movl %esi,%edi + movl %eax,%esi + cmpl $0,%edx + je L029slow_decrypt + cmpl $16,%ecx + movl %ebx,%edx + jb L030slow_enc_tail + btl $25,52(%esp) + jnc L031slow_enc_x86 + movq (%edi),%mm0 + movq 8(%edi),%mm4 +.align 4,0x90 +L032slow_enc_loop_sse: + pxor (%esi),%mm0 + pxor 8(%esi),%mm4 + movl 44(%esp),%edi + call __sse_AES_encrypt_compact + movl 32(%esp),%esi + movl 36(%esp),%edi + movl 40(%esp),%ecx + movq %mm0,(%edi) + movq %mm4,8(%edi) + leal 16(%esi),%esi + movl %esi,32(%esp) + leal 16(%edi),%edx + movl %edx,36(%esp) + subl $16,%ecx + cmpl $16,%ecx + movl %ecx,40(%esp) + jae L032slow_enc_loop_sse + testl $15,%ecx + jnz L030slow_enc_tail + movl 48(%esp),%esi + movq %mm0,(%esi) + movq %mm4,8(%esi) + emms + movl 28(%esp),%esp + popfl + popl %edi + popl %esi + popl %ebx + popl %ebp + ret + pushfl +.align 4,0x90 +L031slow_enc_x86: + movl (%edi),%eax + movl 4(%edi),%ebx +.align 2,0x90 +L033slow_enc_loop_x86: + movl 8(%edi),%ecx + movl 12(%edi),%edx + xorl (%esi),%eax + xorl 4(%esi),%ebx + xorl 8(%esi),%ecx + xorl 12(%esi),%edx + movl 44(%esp),%edi + call __x86_AES_encrypt_compact + movl 32(%esp),%esi + movl 36(%esp),%edi + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 40(%esp),%ecx + leal 16(%esi),%esi + movl %esi,32(%esp) + leal 16(%edi),%edx + movl %edx,36(%esp) + subl $16,%ecx + cmpl $16,%ecx + movl %ecx,40(%esp) + jae L033slow_enc_loop_x86 + testl $15,%ecx + jnz L030slow_enc_tail + movl 48(%esp),%esi + movl 8(%edi),%ecx + movl 12(%edi),%edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + movl 28(%esp),%esp + popfl + popl %edi + popl %esi + popl %ebx + popl %ebp + ret + pushfl +.align 4,0x90 +L030slow_enc_tail: + emms + movl %edx,%edi + movl $16,%ebx + subl %ecx,%ebx + cmpl %esi,%edi + je L034enc_in_place +.align 2,0x90 +.long 2767451785 + jmp L035enc_skip_in_place +L034enc_in_place: + leal (%edi,%ecx,1),%edi +L035enc_skip_in_place: + movl %ebx,%ecx + xorl %eax,%eax +.align 2,0x90 +.long 2868115081 + movl 48(%esp),%edi + movl %edx,%esi + movl (%edi),%eax + movl 4(%edi),%ebx + movl $16,40(%esp) + jmp L033slow_enc_loop_x86 +.align 4,0x90 +L029slow_decrypt: + btl $25,52(%esp) + jnc L036slow_dec_loop_x86 +.align 2,0x90 +L037slow_dec_loop_sse: + movq (%esi),%mm0 + movq 8(%esi),%mm4 + movl 44(%esp),%edi + call __sse_AES_decrypt_compact + movl 32(%esp),%esi + leal 60(%esp),%eax + movl 36(%esp),%ebx + movl 40(%esp),%ecx + movl 48(%esp),%edi + movq (%esi),%mm1 + movq 8(%esi),%mm5 + pxor (%edi),%mm0 + pxor 8(%edi),%mm4 + movq %mm1,(%edi) + movq %mm5,8(%edi) + subl $16,%ecx + jc L038slow_dec_partial_sse + movq %mm0,(%ebx) + movq %mm4,8(%ebx) + leal 16(%ebx),%ebx + movl %ebx,36(%esp) + leal 16(%esi),%esi + movl %esi,32(%esp) + movl %ecx,40(%esp) + jnz L037slow_dec_loop_sse + emms + movl 28(%esp),%esp + popfl + popl %edi + popl %esi + popl %ebx + popl %ebp + ret + pushfl +.align 4,0x90 +L038slow_dec_partial_sse: + movq %mm0,(%eax) + movq %mm4,8(%eax) + emms + addl $16,%ecx + movl %ebx,%edi + movl %eax,%esi +.align 2,0x90 +.long 2767451785 + movl 28(%esp),%esp + popfl + popl %edi + popl %esi + popl %ebx + popl %ebp + ret + pushfl +.align 4,0x90 +L036slow_dec_loop_x86: + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + leal 60(%esp),%edi + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 44(%esp),%edi + call __x86_AES_decrypt_compact + movl 48(%esp),%edi + movl 40(%esp),%esi + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + subl $16,%esi + jc L039slow_dec_partial_x86 + movl %esi,40(%esp) + movl 36(%esp),%esi + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + leal 16(%esi),%esi + movl %esi,36(%esp) + leal 60(%esp),%esi + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 32(%esp),%esi + leal 16(%esi),%esi + movl %esi,32(%esp) + jnz L036slow_dec_loop_x86 + movl 28(%esp),%esp + popfl + popl %edi + popl %esi + popl %ebx + popl %ebp + ret + pushfl +.align 4,0x90 +L039slow_dec_partial_x86: + leal 60(%esp),%esi + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + movl 32(%esp),%esi + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 40(%esp),%ecx + movl 36(%esp),%edi + leal 60(%esp),%esi +.align 2,0x90 +.long 2767451785 + movl 28(%esp),%esp + popfl + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 4 +__x86_AES_set_encrypt_key: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 24(%esp),%esi + movl 32(%esp),%edi + testl $-1,%esi + jz L040badpointer + testl $-1,%edi + jz L040badpointer + call L041pic_point +L041pic_point: + popl %ebp + leal LAES_Te-L041pic_point(%ebp),%ebp + leal 2176(%ebp),%ebp + movl -128(%ebp),%eax + movl -96(%ebp),%ebx + movl -64(%ebp),%ecx + movl -32(%ebp),%edx + movl (%ebp),%eax + movl 32(%ebp),%ebx + movl 64(%ebp),%ecx + movl 96(%ebp),%edx + movl 28(%esp),%ecx + cmpl $128,%ecx + je L04210rounds + cmpl $192,%ecx + je L04312rounds + cmpl $256,%ecx + je L04414rounds + movl $-2,%eax + jmp L045exit +L04210rounds: + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + xorl %ecx,%ecx + jmp L04610shortcut +.align 2,0x90 +L04710loop: + movl (%edi),%eax + movl 12(%edi),%edx +L04610shortcut: + movzbl %dl,%esi + movzbl -128(%ebp,%esi,1),%ebx + movzbl %dh,%esi + shll $24,%ebx + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + shrl $16,%edx + movzbl %dl,%esi + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + movzbl %dh,%esi + shll $8,%ebx + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + shll $16,%ebx + xorl %ebx,%eax + xorl 896(%ebp,%ecx,4),%eax + movl %eax,16(%edi) + xorl 4(%edi),%eax + movl %eax,20(%edi) + xorl 8(%edi),%eax + movl %eax,24(%edi) + xorl 12(%edi),%eax + movl %eax,28(%edi) + incl %ecx + addl $16,%edi + cmpl $10,%ecx + jl L04710loop + movl $10,80(%edi) + xorl %eax,%eax + jmp L045exit +L04312rounds: + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 16(%esi),%ecx + movl 20(%esi),%edx + movl %ecx,16(%edi) + movl %edx,20(%edi) + xorl %ecx,%ecx + jmp L04812shortcut +.align 2,0x90 +L04912loop: + movl (%edi),%eax + movl 20(%edi),%edx +L04812shortcut: + movzbl %dl,%esi + movzbl -128(%ebp,%esi,1),%ebx + movzbl %dh,%esi + shll $24,%ebx + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + shrl $16,%edx + movzbl %dl,%esi + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + movzbl %dh,%esi + shll $8,%ebx + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + shll $16,%ebx + xorl %ebx,%eax + xorl 896(%ebp,%ecx,4),%eax + movl %eax,24(%edi) + xorl 4(%edi),%eax + movl %eax,28(%edi) + xorl 8(%edi),%eax + movl %eax,32(%edi) + xorl 12(%edi),%eax + movl %eax,36(%edi) + cmpl $7,%ecx + je L05012break + incl %ecx + xorl 16(%edi),%eax + movl %eax,40(%edi) + xorl 20(%edi),%eax + movl %eax,44(%edi) + addl $24,%edi + jmp L04912loop +L05012break: + movl $12,72(%edi) + xorl %eax,%eax + jmp L045exit +L04414rounds: + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 16(%esi),%eax + movl 20(%esi),%ebx + movl 24(%esi),%ecx + movl 28(%esi),%edx + movl %eax,16(%edi) + movl %ebx,20(%edi) + movl %ecx,24(%edi) + movl %edx,28(%edi) + xorl %ecx,%ecx + jmp L05114shortcut +.align 2,0x90 +L05214loop: + movl 28(%edi),%edx +L05114shortcut: + movl (%edi),%eax + movzbl %dl,%esi + movzbl -128(%ebp,%esi,1),%ebx + movzbl %dh,%esi + shll $24,%ebx + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + shrl $16,%edx + movzbl %dl,%esi + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + movzbl %dh,%esi + shll $8,%ebx + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + shll $16,%ebx + xorl %ebx,%eax + xorl 896(%ebp,%ecx,4),%eax + movl %eax,32(%edi) + xorl 4(%edi),%eax + movl %eax,36(%edi) + xorl 8(%edi),%eax + movl %eax,40(%edi) + xorl 12(%edi),%eax + movl %eax,44(%edi) + cmpl $6,%ecx + je L05314break + incl %ecx + movl %eax,%edx + movl 16(%edi),%eax + movzbl %dl,%esi + movzbl -128(%ebp,%esi,1),%ebx + movzbl %dh,%esi + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + shrl $16,%edx + shll $8,%ebx + movzbl %dl,%esi + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + movzbl %dh,%esi + shll $16,%ebx + xorl %ebx,%eax + movzbl -128(%ebp,%esi,1),%ebx + shll $24,%ebx + xorl %ebx,%eax + movl %eax,48(%edi) + xorl 20(%edi),%eax + movl %eax,52(%edi) + xorl 24(%edi),%eax + movl %eax,56(%edi) + xorl 28(%edi),%eax + movl %eax,60(%edi) + addl $32,%edi + jmp L05214loop +L05314break: + movl $14,48(%edi) + xorl %eax,%eax + jmp L045exit +L040badpointer: + movl $-1,%eax +L045exit: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _private_AES_set_encrypt_key +.align 4 +_private_AES_set_encrypt_key: +L_private_AES_set_encrypt_key_begin: + call __x86_AES_set_encrypt_key + ret +.globl _private_AES_set_decrypt_key +.align 4 +_private_AES_set_decrypt_key: +L_private_AES_set_decrypt_key_begin: + call __x86_AES_set_encrypt_key + cmpl $0,%eax + je L054proceed + ret +L054proceed: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 28(%esp),%esi + movl 240(%esi),%ecx + leal (,%ecx,4),%ecx + leal (%esi,%ecx,4),%edi +.align 2,0x90 +L055invert: + movl (%esi),%eax + movl 4(%esi),%ebx + movl (%edi),%ecx + movl 4(%edi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,(%esi) + movl %edx,4(%esi) + movl 8(%esi),%eax + movl 12(%esi),%ebx + movl 8(%edi),%ecx + movl 12(%edi),%edx + movl %eax,8(%edi) + movl %ebx,12(%edi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + addl $16,%esi + subl $16,%edi + cmpl %edi,%esi + jne L055invert + movl 28(%esp),%edi + movl 240(%edi),%esi + leal -2(%esi,%esi,1),%esi + leal (%edi,%esi,8),%esi + movl %esi,28(%esp) + movl 16(%edi),%eax +.align 2,0x90 +L056permute: + addl $16,%edi + movl %eax,%esi + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%eax,%eax,1),%ebx + subl %ebp,%esi + andl $4278124286,%ebx + andl $454761243,%esi + xorl %ebx,%esi + movl %esi,%ebx + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%ebx,%ebx,1),%ecx + subl %ebp,%esi + andl $4278124286,%ecx + andl $454761243,%esi + xorl %eax,%ebx + xorl %ecx,%esi + movl %esi,%ecx + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%ecx,%ecx,1),%edx + xorl %eax,%ecx + subl %ebp,%esi + andl $4278124286,%edx + andl $454761243,%esi + roll $8,%eax + xorl %esi,%edx + movl 4(%edi),%ebp + xorl %ebx,%eax + xorl %edx,%ebx + xorl %ecx,%eax + roll $24,%ebx + xorl %edx,%ecx + xorl %edx,%eax + roll $16,%ecx + xorl %ebx,%eax + roll $8,%edx + xorl %ecx,%eax + movl %ebp,%ebx + xorl %edx,%eax + movl %eax,(%edi) + movl %ebx,%esi + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%ebx,%ebx,1),%ecx + subl %ebp,%esi + andl $4278124286,%ecx + andl $454761243,%esi + xorl %ecx,%esi + movl %esi,%ecx + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%ecx,%ecx,1),%edx + subl %ebp,%esi + andl $4278124286,%edx + andl $454761243,%esi + xorl %ebx,%ecx + xorl %edx,%esi + movl %esi,%edx + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%edx,%edx,1),%eax + xorl %ebx,%edx + subl %ebp,%esi + andl $4278124286,%eax + andl $454761243,%esi + roll $8,%ebx + xorl %esi,%eax + movl 8(%edi),%ebp + xorl %ecx,%ebx + xorl %eax,%ecx + xorl %edx,%ebx + roll $24,%ecx + xorl %eax,%edx + xorl %eax,%ebx + roll $16,%edx + xorl %ecx,%ebx + roll $8,%eax + xorl %edx,%ebx + movl %ebp,%ecx + xorl %eax,%ebx + movl %ebx,4(%edi) + movl %ecx,%esi + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%ecx,%ecx,1),%edx + subl %ebp,%esi + andl $4278124286,%edx + andl $454761243,%esi + xorl %edx,%esi + movl %esi,%edx + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%edx,%edx,1),%eax + subl %ebp,%esi + andl $4278124286,%eax + andl $454761243,%esi + xorl %ecx,%edx + xorl %eax,%esi + movl %esi,%eax + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%eax,%eax,1),%ebx + xorl %ecx,%eax + subl %ebp,%esi + andl $4278124286,%ebx + andl $454761243,%esi + roll $8,%ecx + xorl %esi,%ebx + movl 12(%edi),%ebp + xorl %edx,%ecx + xorl %ebx,%edx + xorl %eax,%ecx + roll $24,%edx + xorl %ebx,%eax + xorl %ebx,%ecx + roll $16,%eax + xorl %edx,%ecx + roll $8,%ebx + xorl %eax,%ecx + movl %ebp,%edx + xorl %ebx,%ecx + movl %ecx,8(%edi) + movl %edx,%esi + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%edx,%edx,1),%eax + subl %ebp,%esi + andl $4278124286,%eax + andl $454761243,%esi + xorl %eax,%esi + movl %esi,%eax + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%eax,%eax,1),%ebx + subl %ebp,%esi + andl $4278124286,%ebx + andl $454761243,%esi + xorl %edx,%eax + xorl %ebx,%esi + movl %esi,%ebx + andl $2155905152,%esi + movl %esi,%ebp + shrl $7,%ebp + leal (%ebx,%ebx,1),%ecx + xorl %edx,%ebx + subl %ebp,%esi + andl $4278124286,%ecx + andl $454761243,%esi + roll $8,%edx + xorl %esi,%ecx + movl 16(%edi),%ebp + xorl %eax,%edx + xorl %ecx,%eax + xorl %ebx,%edx + roll $24,%eax + xorl %ecx,%ebx + xorl %ecx,%edx + roll $16,%ebx + xorl %eax,%edx + roll $8,%ecx + xorl %ebx,%edx + movl %ebp,%eax + xorl %ecx,%edx + movl %edx,12(%edi) + cmpl 28(%esp),%edi + jb L056permute + xorl %eax,%eax + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.byte 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89 +.byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 +.byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.section __IMPORT,__pointers,non_lazy_symbol_pointers +L_OPENSSL_ia32cap_P$non_lazy_ptr: +.indirect_symbol _OPENSSL_ia32cap_P +.long 0 +.comm _OPENSSL_ia32cap_P,8,2 diff --git a/chromium/third_party/openssl/openssl/crypto/aes/asm/aesni-x86-mac.S b/chromium/third_party/openssl/openssl/crypto/aes/asm/aesni-x86-mac.S new file mode 100644 index 00000000000..2bf45c6d5ba --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/aes/asm/aesni-x86-mac.S @@ -0,0 +1,2107 @@ +.file "crypto/aes/asm/aesni-x86.s" +.text +.globl _aesni_encrypt +.align 4 +_aesni_encrypt: +L_aesni_encrypt_begin: + movl 4(%esp),%eax + movl 12(%esp),%edx + movups (%eax),%xmm2 + movl 240(%edx),%ecx + movl 8(%esp),%eax + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L000enc1_loop_1: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L000enc1_loop_1 +.byte 102,15,56,221,209 + movups %xmm2,(%eax) + ret +.globl _aesni_decrypt +.align 4 +_aesni_decrypt: +L_aesni_decrypt_begin: + movl 4(%esp),%eax + movl 12(%esp),%edx + movups (%eax),%xmm2 + movl 240(%edx),%ecx + movl 8(%esp),%eax + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L001dec1_loop_2: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L001dec1_loop_2 +.byte 102,15,56,223,209 + movups %xmm2,(%eax) + ret +.align 4 +__aesni_encrypt3: + movups (%edx),%xmm0 + shrl $1,%ecx + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + movups (%edx),%xmm0 +L002enc3_loop: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 + decl %ecx +.byte 102,15,56,220,225 + movups 16(%edx),%xmm1 +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 + leal 32(%edx),%edx +.byte 102,15,56,220,224 + movups (%edx),%xmm0 + jnz L002enc3_loop +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,221,208 +.byte 102,15,56,221,216 +.byte 102,15,56,221,224 + ret +.align 4 +__aesni_decrypt3: + movups (%edx),%xmm0 + shrl $1,%ecx + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + movups (%edx),%xmm0 +L003dec3_loop: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 + decl %ecx +.byte 102,15,56,222,225 + movups 16(%edx),%xmm1 +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 + leal 32(%edx),%edx +.byte 102,15,56,222,224 + movups (%edx),%xmm0 + jnz L003dec3_loop +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,223,208 +.byte 102,15,56,223,216 +.byte 102,15,56,223,224 + ret +.align 4 +__aesni_encrypt4: + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + shrl $1,%ecx + leal 32(%edx),%edx + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + pxor %xmm0,%xmm5 + movups (%edx),%xmm0 +L004enc4_loop: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 + decl %ecx +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups 16(%edx),%xmm1 +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 + leal 32(%edx),%edx +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 + movups (%edx),%xmm0 + jnz L004enc4_loop +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,221,208 +.byte 102,15,56,221,216 +.byte 102,15,56,221,224 +.byte 102,15,56,221,232 + ret +.align 4 +__aesni_decrypt4: + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + shrl $1,%ecx + leal 32(%edx),%edx + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + pxor %xmm0,%xmm5 + movups (%edx),%xmm0 +L005dec4_loop: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 + decl %ecx +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups 16(%edx),%xmm1 +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 + leal 32(%edx),%edx +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 + movups (%edx),%xmm0 + jnz L005dec4_loop +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,223,208 +.byte 102,15,56,223,216 +.byte 102,15,56,223,224 +.byte 102,15,56,223,232 + ret +.align 4 +__aesni_encrypt6: + movups (%edx),%xmm0 + shrl $1,%ecx + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 +.byte 102,15,56,220,209 + pxor %xmm0,%xmm4 +.byte 102,15,56,220,217 + pxor %xmm0,%xmm5 + decl %ecx +.byte 102,15,56,220,225 + pxor %xmm0,%xmm6 +.byte 102,15,56,220,233 + pxor %xmm0,%xmm7 +.byte 102,15,56,220,241 + movups (%edx),%xmm0 +.byte 102,15,56,220,249 + jmp L_aesni_encrypt6_enter +.align 4,0x90 +L006enc6_loop: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 + decl %ecx +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 +.align 4,0x90 +L_aesni_encrypt6_enter: + movups 16(%edx),%xmm1 +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 + leal 32(%edx),%edx +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 +.byte 102,15,56,220,240 +.byte 102,15,56,220,248 + movups (%edx),%xmm0 + jnz L006enc6_loop +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 +.byte 102,15,56,221,208 +.byte 102,15,56,221,216 +.byte 102,15,56,221,224 +.byte 102,15,56,221,232 +.byte 102,15,56,221,240 +.byte 102,15,56,221,248 + ret +.align 4 +__aesni_decrypt6: + movups (%edx),%xmm0 + shrl $1,%ecx + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 +.byte 102,15,56,222,209 + pxor %xmm0,%xmm4 +.byte 102,15,56,222,217 + pxor %xmm0,%xmm5 + decl %ecx +.byte 102,15,56,222,225 + pxor %xmm0,%xmm6 +.byte 102,15,56,222,233 + pxor %xmm0,%xmm7 +.byte 102,15,56,222,241 + movups (%edx),%xmm0 +.byte 102,15,56,222,249 + jmp L_aesni_decrypt6_enter +.align 4,0x90 +L007dec6_loop: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 + decl %ecx +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.align 4,0x90 +L_aesni_decrypt6_enter: + movups 16(%edx),%xmm1 +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 + leal 32(%edx),%edx +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 + movups (%edx),%xmm0 + jnz L007dec6_loop +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.byte 102,15,56,223,208 +.byte 102,15,56,223,216 +.byte 102,15,56,223,224 +.byte 102,15,56,223,232 +.byte 102,15,56,223,240 +.byte 102,15,56,223,248 + ret +.globl _aesni_ecb_encrypt +.align 4 +_aesni_ecb_encrypt: +L_aesni_ecb_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movl 36(%esp),%ebx + andl $-16,%eax + jz L008ecb_ret + movl 240(%edx),%ecx + testl %ebx,%ebx + jz L009ecb_decrypt + movl %edx,%ebp + movl %ecx,%ebx + cmpl $96,%eax + jb L010ecb_enc_tail + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi + subl $96,%eax + jmp L011ecb_enc_loop6_enter +.align 4,0x90 +L012ecb_enc_loop6: + movups %xmm2,(%edi) + movdqu (%esi),%xmm2 + movups %xmm3,16(%edi) + movdqu 16(%esi),%xmm3 + movups %xmm4,32(%edi) + movdqu 32(%esi),%xmm4 + movups %xmm5,48(%edi) + movdqu 48(%esi),%xmm5 + movups %xmm6,64(%edi) + movdqu 64(%esi),%xmm6 + movups %xmm7,80(%edi) + leal 96(%edi),%edi + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi +L011ecb_enc_loop6_enter: + call __aesni_encrypt6 + movl %ebp,%edx + movl %ebx,%ecx + subl $96,%eax + jnc L012ecb_enc_loop6 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + movups %xmm6,64(%edi) + movups %xmm7,80(%edi) + leal 96(%edi),%edi + addl $96,%eax + jz L008ecb_ret +L010ecb_enc_tail: + movups (%esi),%xmm2 + cmpl $32,%eax + jb L013ecb_enc_one + movups 16(%esi),%xmm3 + je L014ecb_enc_two + movups 32(%esi),%xmm4 + cmpl $64,%eax + jb L015ecb_enc_three + movups 48(%esi),%xmm5 + je L016ecb_enc_four + movups 64(%esi),%xmm6 + xorps %xmm7,%xmm7 + call __aesni_encrypt6 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + movups %xmm6,64(%edi) + jmp L008ecb_ret +.align 4,0x90 +L013ecb_enc_one: + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L017enc1_loop_3: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L017enc1_loop_3 +.byte 102,15,56,221,209 + movups %xmm2,(%edi) + jmp L008ecb_ret +.align 4,0x90 +L014ecb_enc_two: + xorps %xmm4,%xmm4 + call __aesni_encrypt3 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + jmp L008ecb_ret +.align 4,0x90 +L015ecb_enc_three: + call __aesni_encrypt3 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + jmp L008ecb_ret +.align 4,0x90 +L016ecb_enc_four: + call __aesni_encrypt4 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + jmp L008ecb_ret +.align 4,0x90 +L009ecb_decrypt: + movl %edx,%ebp + movl %ecx,%ebx + cmpl $96,%eax + jb L018ecb_dec_tail + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi + subl $96,%eax + jmp L019ecb_dec_loop6_enter +.align 4,0x90 +L020ecb_dec_loop6: + movups %xmm2,(%edi) + movdqu (%esi),%xmm2 + movups %xmm3,16(%edi) + movdqu 16(%esi),%xmm3 + movups %xmm4,32(%edi) + movdqu 32(%esi),%xmm4 + movups %xmm5,48(%edi) + movdqu 48(%esi),%xmm5 + movups %xmm6,64(%edi) + movdqu 64(%esi),%xmm6 + movups %xmm7,80(%edi) + leal 96(%edi),%edi + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi +L019ecb_dec_loop6_enter: + call __aesni_decrypt6 + movl %ebp,%edx + movl %ebx,%ecx + subl $96,%eax + jnc L020ecb_dec_loop6 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + movups %xmm6,64(%edi) + movups %xmm7,80(%edi) + leal 96(%edi),%edi + addl $96,%eax + jz L008ecb_ret +L018ecb_dec_tail: + movups (%esi),%xmm2 + cmpl $32,%eax + jb L021ecb_dec_one + movups 16(%esi),%xmm3 + je L022ecb_dec_two + movups 32(%esi),%xmm4 + cmpl $64,%eax + jb L023ecb_dec_three + movups 48(%esi),%xmm5 + je L024ecb_dec_four + movups 64(%esi),%xmm6 + xorps %xmm7,%xmm7 + call __aesni_decrypt6 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + movups %xmm6,64(%edi) + jmp L008ecb_ret +.align 4,0x90 +L021ecb_dec_one: + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L025dec1_loop_4: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L025dec1_loop_4 +.byte 102,15,56,223,209 + movups %xmm2,(%edi) + jmp L008ecb_ret +.align 4,0x90 +L022ecb_dec_two: + xorps %xmm4,%xmm4 + call __aesni_decrypt3 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + jmp L008ecb_ret +.align 4,0x90 +L023ecb_dec_three: + call __aesni_decrypt3 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + jmp L008ecb_ret +.align 4,0x90 +L024ecb_dec_four: + call __aesni_decrypt4 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) +L008ecb_ret: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_ccm64_encrypt_blocks +.align 4 +_aesni_ccm64_encrypt_blocks: +L_aesni_ccm64_encrypt_blocks_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movl 36(%esp),%ebx + movl 40(%esp),%ecx + movl %esp,%ebp + subl $60,%esp + andl $-16,%esp + movl %ebp,48(%esp) + movdqu (%ebx),%xmm7 + movdqu (%ecx),%xmm3 + movl 240(%edx),%ecx + movl $202182159,(%esp) + movl $134810123,4(%esp) + movl $67438087,8(%esp) + movl $66051,12(%esp) + movl $1,%ebx + xorl %ebp,%ebp + movl %ebx,16(%esp) + movl %ebp,20(%esp) + movl %ebp,24(%esp) + movl %ebp,28(%esp) + shrl $1,%ecx + leal (%edx),%ebp + movdqa (%esp),%xmm5 + movdqa %xmm7,%xmm2 + movl %ecx,%ebx +.byte 102,15,56,0,253 +L026ccm64_enc_outer: + movups (%ebp),%xmm0 + movl %ebx,%ecx + movups (%esi),%xmm6 + xorps %xmm0,%xmm2 + movups 16(%ebp),%xmm1 + xorps %xmm6,%xmm0 + leal 32(%ebp),%edx + xorps %xmm0,%xmm3 + movups (%edx),%xmm0 +L027ccm64_enc2_loop: +.byte 102,15,56,220,209 + decl %ecx +.byte 102,15,56,220,217 + movups 16(%edx),%xmm1 +.byte 102,15,56,220,208 + leal 32(%edx),%edx +.byte 102,15,56,220,216 + movups (%edx),%xmm0 + jnz L027ccm64_enc2_loop +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 + paddq 16(%esp),%xmm7 +.byte 102,15,56,221,208 +.byte 102,15,56,221,216 + decl %eax + leal 16(%esi),%esi + xorps %xmm2,%xmm6 + movdqa %xmm7,%xmm2 + movups %xmm6,(%edi) + leal 16(%edi),%edi +.byte 102,15,56,0,213 + jnz L026ccm64_enc_outer + movl 48(%esp),%esp + movl 40(%esp),%edi + movups %xmm3,(%edi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_ccm64_decrypt_blocks +.align 4 +_aesni_ccm64_decrypt_blocks: +L_aesni_ccm64_decrypt_blocks_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movl 36(%esp),%ebx + movl 40(%esp),%ecx + movl %esp,%ebp + subl $60,%esp + andl $-16,%esp + movl %ebp,48(%esp) + movdqu (%ebx),%xmm7 + movdqu (%ecx),%xmm3 + movl 240(%edx),%ecx + movl $202182159,(%esp) + movl $134810123,4(%esp) + movl $67438087,8(%esp) + movl $66051,12(%esp) + movl $1,%ebx + xorl %ebp,%ebp + movl %ebx,16(%esp) + movl %ebp,20(%esp) + movl %ebp,24(%esp) + movl %ebp,28(%esp) + movdqa (%esp),%xmm5 + movdqa %xmm7,%xmm2 + movl %edx,%ebp + movl %ecx,%ebx +.byte 102,15,56,0,253 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L028enc1_loop_5: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L028enc1_loop_5 +.byte 102,15,56,221,209 + movups (%esi),%xmm6 + paddq 16(%esp),%xmm7 + leal 16(%esi),%esi + jmp L029ccm64_dec_outer +.align 4,0x90 +L029ccm64_dec_outer: + xorps %xmm2,%xmm6 + movdqa %xmm7,%xmm2 + movl %ebx,%ecx + movups %xmm6,(%edi) + leal 16(%edi),%edi +.byte 102,15,56,0,213 + subl $1,%eax + jz L030ccm64_dec_break + movups (%ebp),%xmm0 + shrl $1,%ecx + movups 16(%ebp),%xmm1 + xorps %xmm0,%xmm6 + leal 32(%ebp),%edx + xorps %xmm0,%xmm2 + xorps %xmm6,%xmm3 + movups (%edx),%xmm0 +L031ccm64_dec2_loop: +.byte 102,15,56,220,209 + decl %ecx +.byte 102,15,56,220,217 + movups 16(%edx),%xmm1 +.byte 102,15,56,220,208 + leal 32(%edx),%edx +.byte 102,15,56,220,216 + movups (%edx),%xmm0 + jnz L031ccm64_dec2_loop + movups (%esi),%xmm6 + paddq 16(%esp),%xmm7 +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 + leal 16(%esi),%esi +.byte 102,15,56,221,208 +.byte 102,15,56,221,216 + jmp L029ccm64_dec_outer +.align 4,0x90 +L030ccm64_dec_break: + movl %ebp,%edx + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm6 + leal 32(%edx),%edx + xorps %xmm6,%xmm3 +L032enc1_loop_6: +.byte 102,15,56,220,217 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L032enc1_loop_6 +.byte 102,15,56,221,217 + movl 48(%esp),%esp + movl 40(%esp),%edi + movups %xmm3,(%edi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_ctr32_encrypt_blocks +.align 4 +_aesni_ctr32_encrypt_blocks: +L_aesni_ctr32_encrypt_blocks_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movl 36(%esp),%ebx + movl %esp,%ebp + subl $88,%esp + andl $-16,%esp + movl %ebp,80(%esp) + cmpl $1,%eax + je L033ctr32_one_shortcut + movdqu (%ebx),%xmm7 + movl $202182159,(%esp) + movl $134810123,4(%esp) + movl $67438087,8(%esp) + movl $66051,12(%esp) + movl $6,%ecx + xorl %ebp,%ebp + movl %ecx,16(%esp) + movl %ecx,20(%esp) + movl %ecx,24(%esp) + movl %ebp,28(%esp) +.byte 102,15,58,22,251,3 +.byte 102,15,58,34,253,3 + movl 240(%edx),%ecx + bswap %ebx + pxor %xmm1,%xmm1 + pxor %xmm0,%xmm0 + movdqa (%esp),%xmm2 +.byte 102,15,58,34,203,0 + leal 3(%ebx),%ebp +.byte 102,15,58,34,197,0 + incl %ebx +.byte 102,15,58,34,203,1 + incl %ebp +.byte 102,15,58,34,197,1 + incl %ebx +.byte 102,15,58,34,203,2 + incl %ebp +.byte 102,15,58,34,197,2 + movdqa %xmm1,48(%esp) +.byte 102,15,56,0,202 + movdqa %xmm0,64(%esp) +.byte 102,15,56,0,194 + pshufd $192,%xmm1,%xmm2 + pshufd $128,%xmm1,%xmm3 + cmpl $6,%eax + jb L034ctr32_tail + movdqa %xmm7,32(%esp) + shrl $1,%ecx + movl %edx,%ebp + movl %ecx,%ebx + subl $6,%eax + jmp L035ctr32_loop6 +.align 4,0x90 +L035ctr32_loop6: + pshufd $64,%xmm1,%xmm4 + movdqa 32(%esp),%xmm1 + pshufd $192,%xmm0,%xmm5 + por %xmm1,%xmm2 + pshufd $128,%xmm0,%xmm6 + por %xmm1,%xmm3 + pshufd $64,%xmm0,%xmm7 + por %xmm1,%xmm4 + por %xmm1,%xmm5 + por %xmm1,%xmm6 + por %xmm1,%xmm7 + movups (%ebp),%xmm0 + movups 16(%ebp),%xmm1 + leal 32(%ebp),%edx + decl %ecx + pxor %xmm0,%xmm2 + pxor %xmm0,%xmm3 +.byte 102,15,56,220,209 + pxor %xmm0,%xmm4 +.byte 102,15,56,220,217 + pxor %xmm0,%xmm5 +.byte 102,15,56,220,225 + pxor %xmm0,%xmm6 +.byte 102,15,56,220,233 + pxor %xmm0,%xmm7 +.byte 102,15,56,220,241 + movups (%edx),%xmm0 +.byte 102,15,56,220,249 + call L_aesni_encrypt6_enter + movups (%esi),%xmm1 + movups 16(%esi),%xmm0 + xorps %xmm1,%xmm2 + movups 32(%esi),%xmm1 + xorps %xmm0,%xmm3 + movups %xmm2,(%edi) + movdqa 16(%esp),%xmm0 + xorps %xmm1,%xmm4 + movdqa 48(%esp),%xmm1 + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + paddd %xmm0,%xmm1 + paddd 64(%esp),%xmm0 + movdqa (%esp),%xmm2 + movups 48(%esi),%xmm3 + movups 64(%esi),%xmm4 + xorps %xmm3,%xmm5 + movups 80(%esi),%xmm3 + leal 96(%esi),%esi + movdqa %xmm1,48(%esp) +.byte 102,15,56,0,202 + xorps %xmm4,%xmm6 + movups %xmm5,48(%edi) + xorps %xmm3,%xmm7 + movdqa %xmm0,64(%esp) +.byte 102,15,56,0,194 + movups %xmm6,64(%edi) + pshufd $192,%xmm1,%xmm2 + movups %xmm7,80(%edi) + leal 96(%edi),%edi + movl %ebx,%ecx + pshufd $128,%xmm1,%xmm3 + subl $6,%eax + jnc L035ctr32_loop6 + addl $6,%eax + jz L036ctr32_ret + movl %ebp,%edx + leal 1(,%ecx,2),%ecx + movdqa 32(%esp),%xmm7 +L034ctr32_tail: + por %xmm7,%xmm2 + cmpl $2,%eax + jb L037ctr32_one + pshufd $64,%xmm1,%xmm4 + por %xmm7,%xmm3 + je L038ctr32_two + pshufd $192,%xmm0,%xmm5 + por %xmm7,%xmm4 + cmpl $4,%eax + jb L039ctr32_three + pshufd $128,%xmm0,%xmm6 + por %xmm7,%xmm5 + je L040ctr32_four + por %xmm7,%xmm6 + call __aesni_encrypt6 + movups (%esi),%xmm1 + movups 16(%esi),%xmm0 + xorps %xmm1,%xmm2 + movups 32(%esi),%xmm1 + xorps %xmm0,%xmm3 + movups 48(%esi),%xmm0 + xorps %xmm1,%xmm4 + movups 64(%esi),%xmm1 + xorps %xmm0,%xmm5 + movups %xmm2,(%edi) + xorps %xmm1,%xmm6 + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + movups %xmm6,64(%edi) + jmp L036ctr32_ret +.align 4,0x90 +L033ctr32_one_shortcut: + movups (%ebx),%xmm2 + movl 240(%edx),%ecx +L037ctr32_one: + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L041enc1_loop_7: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L041enc1_loop_7 +.byte 102,15,56,221,209 + movups (%esi),%xmm6 + xorps %xmm2,%xmm6 + movups %xmm6,(%edi) + jmp L036ctr32_ret +.align 4,0x90 +L038ctr32_two: + call __aesni_encrypt3 + movups (%esi),%xmm5 + movups 16(%esi),%xmm6 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + jmp L036ctr32_ret +.align 4,0x90 +L039ctr32_three: + call __aesni_encrypt3 + movups (%esi),%xmm5 + movups 16(%esi),%xmm6 + xorps %xmm5,%xmm2 + movups 32(%esi),%xmm7 + xorps %xmm6,%xmm3 + movups %xmm2,(%edi) + xorps %xmm7,%xmm4 + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + jmp L036ctr32_ret +.align 4,0x90 +L040ctr32_four: + call __aesni_encrypt4 + movups (%esi),%xmm6 + movups 16(%esi),%xmm7 + movups 32(%esi),%xmm1 + xorps %xmm6,%xmm2 + movups 48(%esi),%xmm0 + xorps %xmm7,%xmm3 + movups %xmm2,(%edi) + xorps %xmm1,%xmm4 + movups %xmm3,16(%edi) + xorps %xmm0,%xmm5 + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) +L036ctr32_ret: + movl 80(%esp),%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_xts_encrypt +.align 4 +_aesni_xts_encrypt: +L_aesni_xts_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 36(%esp),%edx + movl 40(%esp),%esi + movl 240(%edx),%ecx + movups (%esi),%xmm2 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L042enc1_loop_8: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L042enc1_loop_8 +.byte 102,15,56,221,209 + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movl %esp,%ebp + subl $120,%esp + movl 240(%edx),%ecx + andl $-16,%esp + movl $135,96(%esp) + movl $0,100(%esp) + movl $1,104(%esp) + movl $0,108(%esp) + movl %eax,112(%esp) + movl %ebp,116(%esp) + movdqa %xmm2,%xmm1 + pxor %xmm0,%xmm0 + movdqa 96(%esp),%xmm3 + pcmpgtd %xmm1,%xmm0 + andl $-16,%eax + movl %edx,%ebp + movl %ecx,%ebx + subl $96,%eax + jc L043xts_enc_short + shrl $1,%ecx + movl %ecx,%ebx + jmp L044xts_enc_loop6 +.align 4,0x90 +L044xts_enc_loop6: + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,16(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,32(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,48(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + pshufd $19,%xmm0,%xmm7 + movdqa %xmm1,64(%esp) + paddq %xmm1,%xmm1 + movups (%ebp),%xmm0 + pand %xmm3,%xmm7 + movups (%esi),%xmm2 + pxor %xmm1,%xmm7 + movdqu 16(%esi),%xmm3 + xorps %xmm0,%xmm2 + movdqu 32(%esi),%xmm4 + pxor %xmm0,%xmm3 + movdqu 48(%esi),%xmm5 + pxor %xmm0,%xmm4 + movdqu 64(%esi),%xmm6 + pxor %xmm0,%xmm5 + movdqu 80(%esi),%xmm1 + pxor %xmm0,%xmm6 + leal 96(%esi),%esi + pxor (%esp),%xmm2 + movdqa %xmm7,80(%esp) + pxor %xmm1,%xmm7 + movups 16(%ebp),%xmm1 + leal 32(%ebp),%edx + pxor 16(%esp),%xmm3 +.byte 102,15,56,220,209 + pxor 32(%esp),%xmm4 +.byte 102,15,56,220,217 + pxor 48(%esp),%xmm5 + decl %ecx +.byte 102,15,56,220,225 + pxor 64(%esp),%xmm6 +.byte 102,15,56,220,233 + pxor %xmm0,%xmm7 +.byte 102,15,56,220,241 + movups (%edx),%xmm0 +.byte 102,15,56,220,249 + call L_aesni_encrypt6_enter + movdqa 80(%esp),%xmm1 + pxor %xmm0,%xmm0 + xorps (%esp),%xmm2 + pcmpgtd %xmm1,%xmm0 + xorps 16(%esp),%xmm3 + movups %xmm2,(%edi) + xorps 32(%esp),%xmm4 + movups %xmm3,16(%edi) + xorps 48(%esp),%xmm5 + movups %xmm4,32(%edi) + xorps 64(%esp),%xmm6 + movups %xmm5,48(%edi) + xorps %xmm1,%xmm7 + movups %xmm6,64(%edi) + pshufd $19,%xmm0,%xmm2 + movups %xmm7,80(%edi) + leal 96(%edi),%edi + movdqa 96(%esp),%xmm3 + pxor %xmm0,%xmm0 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + movl %ebx,%ecx + pxor %xmm2,%xmm1 + subl $96,%eax + jnc L044xts_enc_loop6 + leal 1(,%ecx,2),%ecx + movl %ebp,%edx + movl %ecx,%ebx +L043xts_enc_short: + addl $96,%eax + jz L045xts_enc_done6x + movdqa %xmm1,%xmm5 + cmpl $32,%eax + jb L046xts_enc_one + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + je L047xts_enc_two + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,%xmm6 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + cmpl $64,%eax + jb L048xts_enc_three + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,%xmm7 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + movdqa %xmm5,(%esp) + movdqa %xmm6,16(%esp) + je L049xts_enc_four + movdqa %xmm7,32(%esp) + pshufd $19,%xmm0,%xmm7 + movdqa %xmm1,48(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm7 + pxor %xmm1,%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + pxor (%esp),%xmm2 + movdqu 48(%esi),%xmm5 + pxor 16(%esp),%xmm3 + movdqu 64(%esi),%xmm6 + pxor 32(%esp),%xmm4 + leal 80(%esi),%esi + pxor 48(%esp),%xmm5 + movdqa %xmm7,64(%esp) + pxor %xmm7,%xmm6 + call __aesni_encrypt6 + movaps 64(%esp),%xmm1 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps 32(%esp),%xmm4 + movups %xmm2,(%edi) + xorps 48(%esp),%xmm5 + movups %xmm3,16(%edi) + xorps %xmm1,%xmm6 + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + movups %xmm6,64(%edi) + leal 80(%edi),%edi + jmp L050xts_enc_done +.align 4,0x90 +L046xts_enc_one: + movups (%esi),%xmm2 + leal 16(%esi),%esi + xorps %xmm5,%xmm2 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L051enc1_loop_9: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L051enc1_loop_9 +.byte 102,15,56,221,209 + xorps %xmm5,%xmm2 + movups %xmm2,(%edi) + leal 16(%edi),%edi + movdqa %xmm5,%xmm1 + jmp L050xts_enc_done +.align 4,0x90 +L047xts_enc_two: + movaps %xmm1,%xmm6 + movups (%esi),%xmm2 + movups 16(%esi),%xmm3 + leal 32(%esi),%esi + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm4,%xmm4 + call __aesni_encrypt3 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + leal 32(%edi),%edi + movdqa %xmm6,%xmm1 + jmp L050xts_enc_done +.align 4,0x90 +L048xts_enc_three: + movaps %xmm1,%xmm7 + movups (%esi),%xmm2 + movups 16(%esi),%xmm3 + movups 32(%esi),%xmm4 + leal 48(%esi),%esi + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + call __aesni_encrypt3 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + leal 48(%edi),%edi + movdqa %xmm7,%xmm1 + jmp L050xts_enc_done +.align 4,0x90 +L049xts_enc_four: + movaps %xmm1,%xmm6 + movups (%esi),%xmm2 + movups 16(%esi),%xmm3 + movups 32(%esi),%xmm4 + xorps (%esp),%xmm2 + movups 48(%esi),%xmm5 + leal 64(%esi),%esi + xorps 16(%esp),%xmm3 + xorps %xmm7,%xmm4 + xorps %xmm6,%xmm5 + call __aesni_encrypt4 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps %xmm7,%xmm4 + movups %xmm2,(%edi) + xorps %xmm6,%xmm5 + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + leal 64(%edi),%edi + movdqa %xmm6,%xmm1 + jmp L050xts_enc_done +.align 4,0x90 +L045xts_enc_done6x: + movl 112(%esp),%eax + andl $15,%eax + jz L052xts_enc_ret + movdqa %xmm1,%xmm5 + movl %eax,112(%esp) + jmp L053xts_enc_steal +.align 4,0x90 +L050xts_enc_done: + movl 112(%esp),%eax + pxor %xmm0,%xmm0 + andl $15,%eax + jz L052xts_enc_ret + pcmpgtd %xmm1,%xmm0 + movl %eax,112(%esp) + pshufd $19,%xmm0,%xmm5 + paddq %xmm1,%xmm1 + pand 96(%esp),%xmm5 + pxor %xmm1,%xmm5 +L053xts_enc_steal: + movzbl (%esi),%ecx + movzbl -16(%edi),%edx + leal 1(%esi),%esi + movb %cl,-16(%edi) + movb %dl,(%edi) + leal 1(%edi),%edi + subl $1,%eax + jnz L053xts_enc_steal + subl 112(%esp),%edi + movl %ebp,%edx + movl %ebx,%ecx + movups -16(%edi),%xmm2 + xorps %xmm5,%xmm2 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L054enc1_loop_10: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L054enc1_loop_10 +.byte 102,15,56,221,209 + xorps %xmm5,%xmm2 + movups %xmm2,-16(%edi) +L052xts_enc_ret: + movl 116(%esp),%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_xts_decrypt +.align 4 +_aesni_xts_decrypt: +L_aesni_xts_decrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 36(%esp),%edx + movl 40(%esp),%esi + movl 240(%edx),%ecx + movups (%esi),%xmm2 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L055enc1_loop_11: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L055enc1_loop_11 +.byte 102,15,56,221,209 + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movl %esp,%ebp + subl $120,%esp + andl $-16,%esp + xorl %ebx,%ebx + testl $15,%eax + setnz %bl + shll $4,%ebx + subl %ebx,%eax + movl $135,96(%esp) + movl $0,100(%esp) + movl $1,104(%esp) + movl $0,108(%esp) + movl %eax,112(%esp) + movl %ebp,116(%esp) + movl 240(%edx),%ecx + movl %edx,%ebp + movl %ecx,%ebx + movdqa %xmm2,%xmm1 + pxor %xmm0,%xmm0 + movdqa 96(%esp),%xmm3 + pcmpgtd %xmm1,%xmm0 + andl $-16,%eax + subl $96,%eax + jc L056xts_dec_short + shrl $1,%ecx + movl %ecx,%ebx + jmp L057xts_dec_loop6 +.align 4,0x90 +L057xts_dec_loop6: + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,16(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,32(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,48(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + pshufd $19,%xmm0,%xmm7 + movdqa %xmm1,64(%esp) + paddq %xmm1,%xmm1 + movups (%ebp),%xmm0 + pand %xmm3,%xmm7 + movups (%esi),%xmm2 + pxor %xmm1,%xmm7 + movdqu 16(%esi),%xmm3 + xorps %xmm0,%xmm2 + movdqu 32(%esi),%xmm4 + pxor %xmm0,%xmm3 + movdqu 48(%esi),%xmm5 + pxor %xmm0,%xmm4 + movdqu 64(%esi),%xmm6 + pxor %xmm0,%xmm5 + movdqu 80(%esi),%xmm1 + pxor %xmm0,%xmm6 + leal 96(%esi),%esi + pxor (%esp),%xmm2 + movdqa %xmm7,80(%esp) + pxor %xmm1,%xmm7 + movups 16(%ebp),%xmm1 + leal 32(%ebp),%edx + pxor 16(%esp),%xmm3 +.byte 102,15,56,222,209 + pxor 32(%esp),%xmm4 +.byte 102,15,56,222,217 + pxor 48(%esp),%xmm5 + decl %ecx +.byte 102,15,56,222,225 + pxor 64(%esp),%xmm6 +.byte 102,15,56,222,233 + pxor %xmm0,%xmm7 +.byte 102,15,56,222,241 + movups (%edx),%xmm0 +.byte 102,15,56,222,249 + call L_aesni_decrypt6_enter + movdqa 80(%esp),%xmm1 + pxor %xmm0,%xmm0 + xorps (%esp),%xmm2 + pcmpgtd %xmm1,%xmm0 + xorps 16(%esp),%xmm3 + movups %xmm2,(%edi) + xorps 32(%esp),%xmm4 + movups %xmm3,16(%edi) + xorps 48(%esp),%xmm5 + movups %xmm4,32(%edi) + xorps 64(%esp),%xmm6 + movups %xmm5,48(%edi) + xorps %xmm1,%xmm7 + movups %xmm6,64(%edi) + pshufd $19,%xmm0,%xmm2 + movups %xmm7,80(%edi) + leal 96(%edi),%edi + movdqa 96(%esp),%xmm3 + pxor %xmm0,%xmm0 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + movl %ebx,%ecx + pxor %xmm2,%xmm1 + subl $96,%eax + jnc L057xts_dec_loop6 + leal 1(,%ecx,2),%ecx + movl %ebp,%edx + movl %ecx,%ebx +L056xts_dec_short: + addl $96,%eax + jz L058xts_dec_done6x + movdqa %xmm1,%xmm5 + cmpl $32,%eax + jb L059xts_dec_one + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + je L060xts_dec_two + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,%xmm6 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + cmpl $64,%eax + jb L061xts_dec_three + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa %xmm1,%xmm7 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 + movdqa %xmm5,(%esp) + movdqa %xmm6,16(%esp) + je L062xts_dec_four + movdqa %xmm7,32(%esp) + pshufd $19,%xmm0,%xmm7 + movdqa %xmm1,48(%esp) + paddq %xmm1,%xmm1 + pand %xmm3,%xmm7 + pxor %xmm1,%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + pxor (%esp),%xmm2 + movdqu 48(%esi),%xmm5 + pxor 16(%esp),%xmm3 + movdqu 64(%esi),%xmm6 + pxor 32(%esp),%xmm4 + leal 80(%esi),%esi + pxor 48(%esp),%xmm5 + movdqa %xmm7,64(%esp) + pxor %xmm7,%xmm6 + call __aesni_decrypt6 + movaps 64(%esp),%xmm1 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps 32(%esp),%xmm4 + movups %xmm2,(%edi) + xorps 48(%esp),%xmm5 + movups %xmm3,16(%edi) + xorps %xmm1,%xmm6 + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + movups %xmm6,64(%edi) + leal 80(%edi),%edi + jmp L063xts_dec_done +.align 4,0x90 +L059xts_dec_one: + movups (%esi),%xmm2 + leal 16(%esi),%esi + xorps %xmm5,%xmm2 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L064dec1_loop_12: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L064dec1_loop_12 +.byte 102,15,56,223,209 + xorps %xmm5,%xmm2 + movups %xmm2,(%edi) + leal 16(%edi),%edi + movdqa %xmm5,%xmm1 + jmp L063xts_dec_done +.align 4,0x90 +L060xts_dec_two: + movaps %xmm1,%xmm6 + movups (%esi),%xmm2 + movups 16(%esi),%xmm3 + leal 32(%esi),%esi + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + call __aesni_decrypt3 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + leal 32(%edi),%edi + movdqa %xmm6,%xmm1 + jmp L063xts_dec_done +.align 4,0x90 +L061xts_dec_three: + movaps %xmm1,%xmm7 + movups (%esi),%xmm2 + movups 16(%esi),%xmm3 + movups 32(%esi),%xmm4 + leal 48(%esi),%esi + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + call __aesni_decrypt3 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + leal 48(%edi),%edi + movdqa %xmm7,%xmm1 + jmp L063xts_dec_done +.align 4,0x90 +L062xts_dec_four: + movaps %xmm1,%xmm6 + movups (%esi),%xmm2 + movups 16(%esi),%xmm3 + movups 32(%esi),%xmm4 + xorps (%esp),%xmm2 + movups 48(%esi),%xmm5 + leal 64(%esi),%esi + xorps 16(%esp),%xmm3 + xorps %xmm7,%xmm4 + xorps %xmm6,%xmm5 + call __aesni_decrypt4 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps %xmm7,%xmm4 + movups %xmm2,(%edi) + xorps %xmm6,%xmm5 + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + leal 64(%edi),%edi + movdqa %xmm6,%xmm1 + jmp L063xts_dec_done +.align 4,0x90 +L058xts_dec_done6x: + movl 112(%esp),%eax + andl $15,%eax + jz L065xts_dec_ret + movl %eax,112(%esp) + jmp L066xts_dec_only_one_more +.align 4,0x90 +L063xts_dec_done: + movl 112(%esp),%eax + pxor %xmm0,%xmm0 + andl $15,%eax + jz L065xts_dec_ret + pcmpgtd %xmm1,%xmm0 + movl %eax,112(%esp) + pshufd $19,%xmm0,%xmm2 + pxor %xmm0,%xmm0 + movdqa 96(%esp),%xmm3 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm2 + pcmpgtd %xmm1,%xmm0 + pxor %xmm2,%xmm1 +L066xts_dec_only_one_more: + pshufd $19,%xmm0,%xmm5 + movdqa %xmm1,%xmm6 + paddq %xmm1,%xmm1 + pand %xmm3,%xmm5 + pxor %xmm1,%xmm5 + movl %ebp,%edx + movl %ebx,%ecx + movups (%esi),%xmm2 + xorps %xmm5,%xmm2 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L067dec1_loop_13: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L067dec1_loop_13 +.byte 102,15,56,223,209 + xorps %xmm5,%xmm2 + movups %xmm2,(%edi) +L068xts_dec_steal: + movzbl 16(%esi),%ecx + movzbl (%edi),%edx + leal 1(%esi),%esi + movb %cl,(%edi) + movb %dl,16(%edi) + leal 1(%edi),%edi + subl $1,%eax + jnz L068xts_dec_steal + subl 112(%esp),%edi + movl %ebp,%edx + movl %ebx,%ecx + movups (%edi),%xmm2 + xorps %xmm6,%xmm2 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L069dec1_loop_14: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L069dec1_loop_14 +.byte 102,15,56,223,209 + xorps %xmm6,%xmm2 + movups %xmm2,(%edi) +L065xts_dec_ret: + movl 116(%esp),%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_cbc_encrypt +.align 4 +_aesni_cbc_encrypt: +L_aesni_cbc_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl %esp,%ebx + movl 24(%esp),%edi + subl $24,%ebx + movl 28(%esp),%eax + andl $-16,%ebx + movl 32(%esp),%edx + movl 36(%esp),%ebp + testl %eax,%eax + jz L070cbc_abort + cmpl $0,40(%esp) + xchgl %esp,%ebx + movups (%ebp),%xmm7 + movl 240(%edx),%ecx + movl %edx,%ebp + movl %ebx,16(%esp) + movl %ecx,%ebx + je L071cbc_decrypt + movaps %xmm7,%xmm2 + cmpl $16,%eax + jb L072cbc_enc_tail + subl $16,%eax + jmp L073cbc_enc_loop +.align 4,0x90 +L073cbc_enc_loop: + movups (%esi),%xmm7 + leal 16(%esi),%esi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm7 + leal 32(%edx),%edx + xorps %xmm7,%xmm2 +L074enc1_loop_15: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L074enc1_loop_15 +.byte 102,15,56,221,209 + movl %ebx,%ecx + movl %ebp,%edx + movups %xmm2,(%edi) + leal 16(%edi),%edi + subl $16,%eax + jnc L073cbc_enc_loop + addl $16,%eax + jnz L072cbc_enc_tail + movaps %xmm2,%xmm7 + jmp L075cbc_ret +L072cbc_enc_tail: + movl %eax,%ecx +.long 2767451785 + movl $16,%ecx + subl %eax,%ecx + xorl %eax,%eax +.long 2868115081 + leal -16(%edi),%edi + movl %ebx,%ecx + movl %edi,%esi + movl %ebp,%edx + jmp L073cbc_enc_loop +.align 4,0x90 +L071cbc_decrypt: + cmpl $80,%eax + jbe L076cbc_dec_tail + movaps %xmm7,(%esp) + subl $80,%eax + jmp L077cbc_dec_loop6_enter +.align 4,0x90 +L078cbc_dec_loop6: + movaps %xmm0,(%esp) + movups %xmm7,(%edi) + leal 16(%edi),%edi +L077cbc_dec_loop6_enter: + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + call __aesni_decrypt6 + movups (%esi),%xmm1 + movups 16(%esi),%xmm0 + xorps (%esp),%xmm2 + xorps %xmm1,%xmm3 + movups 32(%esi),%xmm1 + xorps %xmm0,%xmm4 + movups 48(%esi),%xmm0 + xorps %xmm1,%xmm5 + movups 64(%esi),%xmm1 + xorps %xmm0,%xmm6 + movups 80(%esi),%xmm0 + xorps %xmm1,%xmm7 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + leal 96(%esi),%esi + movups %xmm4,32(%edi) + movl %ebx,%ecx + movups %xmm5,48(%edi) + movl %ebp,%edx + movups %xmm6,64(%edi) + leal 80(%edi),%edi + subl $96,%eax + ja L078cbc_dec_loop6 + movaps %xmm7,%xmm2 + movaps %xmm0,%xmm7 + addl $80,%eax + jle L079cbc_dec_tail_collected + movups %xmm2,(%edi) + leal 16(%edi),%edi +L076cbc_dec_tail: + movups (%esi),%xmm2 + movaps %xmm2,%xmm6 + cmpl $16,%eax + jbe L080cbc_dec_one + movups 16(%esi),%xmm3 + movaps %xmm3,%xmm5 + cmpl $32,%eax + jbe L081cbc_dec_two + movups 32(%esi),%xmm4 + cmpl $48,%eax + jbe L082cbc_dec_three + movups 48(%esi),%xmm5 + cmpl $64,%eax + jbe L083cbc_dec_four + movups 64(%esi),%xmm6 + movaps %xmm7,(%esp) + movups (%esi),%xmm2 + xorps %xmm7,%xmm7 + call __aesni_decrypt6 + movups (%esi),%xmm1 + movups 16(%esi),%xmm0 + xorps (%esp),%xmm2 + xorps %xmm1,%xmm3 + movups 32(%esi),%xmm1 + xorps %xmm0,%xmm4 + movups 48(%esi),%xmm0 + xorps %xmm1,%xmm5 + movups 64(%esi),%xmm7 + xorps %xmm0,%xmm6 + movups %xmm2,(%edi) + movups %xmm3,16(%edi) + movups %xmm4,32(%edi) + movups %xmm5,48(%edi) + leal 64(%edi),%edi + movaps %xmm6,%xmm2 + subl $80,%eax + jmp L079cbc_dec_tail_collected +.align 4,0x90 +L080cbc_dec_one: + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L084dec1_loop_16: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L084dec1_loop_16 +.byte 102,15,56,223,209 + xorps %xmm7,%xmm2 + movaps %xmm6,%xmm7 + subl $16,%eax + jmp L079cbc_dec_tail_collected +.align 4,0x90 +L081cbc_dec_two: + xorps %xmm4,%xmm4 + call __aesni_decrypt3 + xorps %xmm7,%xmm2 + xorps %xmm6,%xmm3 + movups %xmm2,(%edi) + movaps %xmm3,%xmm2 + leal 16(%edi),%edi + movaps %xmm5,%xmm7 + subl $32,%eax + jmp L079cbc_dec_tail_collected +.align 4,0x90 +L082cbc_dec_three: + call __aesni_decrypt3 + xorps %xmm7,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm5,%xmm4 + movups %xmm2,(%edi) + movaps %xmm4,%xmm2 + movups %xmm3,16(%edi) + leal 32(%edi),%edi + movups 32(%esi),%xmm7 + subl $48,%eax + jmp L079cbc_dec_tail_collected +.align 4,0x90 +L083cbc_dec_four: + call __aesni_decrypt4 + movups 16(%esi),%xmm1 + movups 32(%esi),%xmm0 + xorps %xmm7,%xmm2 + movups 48(%esi),%xmm7 + xorps %xmm6,%xmm3 + movups %xmm2,(%edi) + xorps %xmm1,%xmm4 + movups %xmm3,16(%edi) + xorps %xmm0,%xmm5 + movups %xmm4,32(%edi) + leal 48(%edi),%edi + movaps %xmm5,%xmm2 + subl $64,%eax +L079cbc_dec_tail_collected: + andl $15,%eax + jnz L085cbc_dec_tail_partial + movups %xmm2,(%edi) + jmp L075cbc_ret +.align 4,0x90 +L085cbc_dec_tail_partial: + movaps %xmm2,(%esp) + movl $16,%ecx + movl %esp,%esi + subl %eax,%ecx +.long 2767451785 +L075cbc_ret: + movl 16(%esp),%esp + movl 36(%esp),%ebp + movups %xmm7,(%ebp) +L070cbc_abort: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 4 +__aesni_set_encrypt_key: + testl %eax,%eax + jz L086bad_pointer + testl %edx,%edx + jz L086bad_pointer + movups (%eax),%xmm0 + xorps %xmm4,%xmm4 + leal 16(%edx),%edx + cmpl $256,%ecx + je L08714rounds + cmpl $192,%ecx + je L08812rounds + cmpl $128,%ecx + jne L089bad_keybits +.align 4,0x90 +L09010rounds: + movl $9,%ecx + movups %xmm0,-16(%edx) +.byte 102,15,58,223,200,1 + call L091key_128_cold +.byte 102,15,58,223,200,2 + call L092key_128 +.byte 102,15,58,223,200,4 + call L092key_128 +.byte 102,15,58,223,200,8 + call L092key_128 +.byte 102,15,58,223,200,16 + call L092key_128 +.byte 102,15,58,223,200,32 + call L092key_128 +.byte 102,15,58,223,200,64 + call L092key_128 +.byte 102,15,58,223,200,128 + call L092key_128 +.byte 102,15,58,223,200,27 + call L092key_128 +.byte 102,15,58,223,200,54 + call L092key_128 + movups %xmm0,(%edx) + movl %ecx,80(%edx) + xorl %eax,%eax + ret +.align 4,0x90 +L092key_128: + movups %xmm0,(%edx) + leal 16(%edx),%edx +L091key_128_cold: + shufps $16,%xmm0,%xmm4 + xorps %xmm4,%xmm0 + shufps $140,%xmm0,%xmm4 + xorps %xmm4,%xmm0 + shufps $255,%xmm1,%xmm1 + xorps %xmm1,%xmm0 + ret +.align 4,0x90 +L08812rounds: + movq 16(%eax),%xmm2 + movl $11,%ecx + movups %xmm0,-16(%edx) +.byte 102,15,58,223,202,1 + call L093key_192a_cold +.byte 102,15,58,223,202,2 + call L094key_192b +.byte 102,15,58,223,202,4 + call L095key_192a +.byte 102,15,58,223,202,8 + call L094key_192b +.byte 102,15,58,223,202,16 + call L095key_192a +.byte 102,15,58,223,202,32 + call L094key_192b +.byte 102,15,58,223,202,64 + call L095key_192a +.byte 102,15,58,223,202,128 + call L094key_192b + movups %xmm0,(%edx) + movl %ecx,48(%edx) + xorl %eax,%eax + ret +.align 4,0x90 +L095key_192a: + movups %xmm0,(%edx) + leal 16(%edx),%edx +.align 4,0x90 +L093key_192a_cold: + movaps %xmm2,%xmm5 +L096key_192b_warm: + shufps $16,%xmm0,%xmm4 + movdqa %xmm2,%xmm3 + xorps %xmm4,%xmm0 + shufps $140,%xmm0,%xmm4 + pslldq $4,%xmm3 + xorps %xmm4,%xmm0 + pshufd $85,%xmm1,%xmm1 + pxor %xmm3,%xmm2 + pxor %xmm1,%xmm0 + pshufd $255,%xmm0,%xmm3 + pxor %xmm3,%xmm2 + ret +.align 4,0x90 +L094key_192b: + movaps %xmm0,%xmm3 + shufps $68,%xmm0,%xmm5 + movups %xmm5,(%edx) + shufps $78,%xmm2,%xmm3 + movups %xmm3,16(%edx) + leal 32(%edx),%edx + jmp L096key_192b_warm +.align 4,0x90 +L08714rounds: + movups 16(%eax),%xmm2 + movl $13,%ecx + leal 16(%edx),%edx + movups %xmm0,-32(%edx) + movups %xmm2,-16(%edx) +.byte 102,15,58,223,202,1 + call L097key_256a_cold +.byte 102,15,58,223,200,1 + call L098key_256b +.byte 102,15,58,223,202,2 + call L099key_256a +.byte 102,15,58,223,200,2 + call L098key_256b +.byte 102,15,58,223,202,4 + call L099key_256a +.byte 102,15,58,223,200,4 + call L098key_256b +.byte 102,15,58,223,202,8 + call L099key_256a +.byte 102,15,58,223,200,8 + call L098key_256b +.byte 102,15,58,223,202,16 + call L099key_256a +.byte 102,15,58,223,200,16 + call L098key_256b +.byte 102,15,58,223,202,32 + call L099key_256a +.byte 102,15,58,223,200,32 + call L098key_256b +.byte 102,15,58,223,202,64 + call L099key_256a + movups %xmm0,(%edx) + movl %ecx,16(%edx) + xorl %eax,%eax + ret +.align 4,0x90 +L099key_256a: + movups %xmm2,(%edx) + leal 16(%edx),%edx +L097key_256a_cold: + shufps $16,%xmm0,%xmm4 + xorps %xmm4,%xmm0 + shufps $140,%xmm0,%xmm4 + xorps %xmm4,%xmm0 + shufps $255,%xmm1,%xmm1 + xorps %xmm1,%xmm0 + ret +.align 4,0x90 +L098key_256b: + movups %xmm0,(%edx) + leal 16(%edx),%edx + shufps $16,%xmm2,%xmm4 + xorps %xmm4,%xmm2 + shufps $140,%xmm2,%xmm4 + xorps %xmm4,%xmm2 + shufps $170,%xmm1,%xmm1 + xorps %xmm1,%xmm2 + ret +.align 2,0x90 +L086bad_pointer: + movl $-1,%eax + ret +.align 2,0x90 +L089bad_keybits: + movl $-2,%eax + ret +.globl _aesni_set_encrypt_key +.align 4 +_aesni_set_encrypt_key: +L_aesni_set_encrypt_key_begin: + movl 4(%esp),%eax + movl 8(%esp),%ecx + movl 12(%esp),%edx + call __aesni_set_encrypt_key + ret +.globl _aesni_set_decrypt_key +.align 4 +_aesni_set_decrypt_key: +L_aesni_set_decrypt_key_begin: + movl 4(%esp),%eax + movl 8(%esp),%ecx + movl 12(%esp),%edx + call __aesni_set_encrypt_key + movl 12(%esp),%edx + shll $4,%ecx + testl %eax,%eax + jnz L100dec_key_ret + leal 16(%edx,%ecx,1),%eax + movups (%edx),%xmm0 + movups (%eax),%xmm1 + movups %xmm0,(%eax) + movups %xmm1,(%edx) + leal 16(%edx),%edx + leal -16(%eax),%eax +L101dec_key_inverse: + movups (%edx),%xmm0 + movups (%eax),%xmm1 +.byte 102,15,56,219,192 +.byte 102,15,56,219,201 + leal 16(%edx),%edx + leal -16(%eax),%eax + movups %xmm0,16(%eax) + movups %xmm1,-16(%edx) + cmpl %edx,%eax + ja L101dec_key_inverse + movups (%edx),%xmm0 +.byte 102,15,56,219,192 + movups %xmm0,(%edx) + xorl %eax,%eax +L100dec_key_ret: + ret +.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 +.byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 +.byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 +.byte 115,108,46,111,114,103,62,0 diff --git a/chromium/third_party/openssl/openssl/crypto/aes/asm/vpaes-x86-mac.S b/chromium/third_party/openssl/openssl/crypto/aes/asm/vpaes-x86-mac.S new file mode 100644 index 00000000000..f6d164f66fc --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/aes/asm/vpaes-x86-mac.S @@ -0,0 +1,635 @@ +.file "vpaes-x86.s" +.text +.align 6,0x90 +L_vpaes_consts: +.long 218628480,235210255,168496130,67568393 +.long 252381056,17041926,33884169,51187212 +.long 252645135,252645135,252645135,252645135 +.long 1512730624,3266504856,1377990664,3401244816 +.long 830229760,1275146365,2969422977,3447763452 +.long 3411033600,2979783055,338359620,2782886510 +.long 4209124096,907596821,221174255,1006095553 +.long 191964160,3799684038,3164090317,1589111125 +.long 182528256,1777043520,2877432650,3265356744 +.long 1874708224,3503451415,3305285752,363511674 +.long 1606117888,3487855781,1093350906,2384367825 +.long 197121,67569157,134941193,202313229 +.long 67569157,134941193,202313229,197121 +.long 134941193,202313229,197121,67569157 +.long 202313229,197121,67569157,134941193 +.long 33619971,100992007,168364043,235736079 +.long 235736079,33619971,100992007,168364043 +.long 168364043,235736079,33619971,100992007 +.long 100992007,168364043,235736079,33619971 +.long 50462976,117835012,185207048,252579084 +.long 252314880,51251460,117574920,184942860 +.long 184682752,252054788,50987272,118359308 +.long 118099200,185467140,251790600,50727180 +.long 2946363062,528716217,1300004225,1881839624 +.long 1532713819,1532713819,1532713819,1532713819 +.long 3602276352,4288629033,3737020424,4153884961 +.long 1354558464,32357713,2958822624,3775749553 +.long 1201988352,132424512,1572796698,503232858 +.long 2213177600,1597421020,4103937655,675398315 +.long 2749646592,4273543773,1511898873,121693092 +.long 3040248576,1103263732,2871565598,1608280554 +.long 2236667136,2588920351,482954393,64377734 +.long 3069987328,291237287,2117370568,3650299247 +.long 533321216,3573750986,2572112006,1401264716 +.long 1339849704,2721158661,548607111,3445553514 +.long 2128193280,3054596040,2183486460,1257083700 +.long 655635200,1165381986,3923443150,2344132524 +.long 190078720,256924420,290342170,357187870 +.long 1610966272,2263057382,4103205268,309794674 +.long 2592527872,2233205587,1335446729,3402964816 +.long 3973531904,3225098121,3002836325,1918774430 +.long 3870401024,2102906079,2284471353,4117666579 +.long 617007872,1021508343,366931923,691083277 +.long 2528395776,3491914898,2968704004,1613121270 +.long 3445188352,3247741094,844474987,4093578302 +.long 651481088,1190302358,1689581232,574775300 +.long 4289380608,206939853,2555985458,2489840491 +.long 2130264064,327674451,3566485037,3349835193 +.long 2470714624,316102159,3636825756,3393945945 +.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 +.byte 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 +.byte 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 +.byte 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 +.byte 118,101,114,115,105,116,121,41,0 +.align 6,0x90 +.align 4 +__vpaes_preheat: + addl (%esp),%ebp + movdqa -48(%ebp),%xmm7 + movdqa -16(%ebp),%xmm6 + ret +.align 4 +__vpaes_encrypt_core: + movl $16,%ecx + movl 240(%edx),%eax + movdqa %xmm6,%xmm1 + movdqa (%ebp),%xmm2 + pandn %xmm0,%xmm1 + movdqu (%edx),%xmm5 + psrld $4,%xmm1 + pand %xmm6,%xmm0 +.byte 102,15,56,0,208 + movdqa 16(%ebp),%xmm0 +.byte 102,15,56,0,193 + pxor %xmm5,%xmm2 + pxor %xmm2,%xmm0 + addl $16,%edx + leal 192(%ebp),%ebx + jmp L000enc_entry +.align 4,0x90 +L001enc_loop: + movdqa 32(%ebp),%xmm4 +.byte 102,15,56,0,226 + pxor %xmm5,%xmm4 + movdqa 48(%ebp),%xmm0 +.byte 102,15,56,0,195 + pxor %xmm4,%xmm0 + movdqa 64(%ebp),%xmm5 +.byte 102,15,56,0,234 + movdqa -64(%ebx,%ecx,1),%xmm1 + movdqa 80(%ebp),%xmm2 +.byte 102,15,56,0,211 + pxor %xmm5,%xmm2 + movdqa (%ebx,%ecx,1),%xmm4 + movdqa %xmm0,%xmm3 +.byte 102,15,56,0,193 + addl $16,%edx + pxor %xmm2,%xmm0 +.byte 102,15,56,0,220 + addl $16,%ecx + pxor %xmm0,%xmm3 +.byte 102,15,56,0,193 + andl $48,%ecx + pxor %xmm3,%xmm0 + subl $1,%eax +L000enc_entry: + movdqa %xmm6,%xmm1 + pandn %xmm0,%xmm1 + psrld $4,%xmm1 + pand %xmm6,%xmm0 + movdqa -32(%ebp),%xmm5 +.byte 102,15,56,0,232 + pxor %xmm1,%xmm0 + movdqa %xmm7,%xmm3 +.byte 102,15,56,0,217 + pxor %xmm5,%xmm3 + movdqa %xmm7,%xmm4 +.byte 102,15,56,0,224 + pxor %xmm5,%xmm4 + movdqa %xmm7,%xmm2 +.byte 102,15,56,0,211 + pxor %xmm0,%xmm2 + movdqa %xmm7,%xmm3 + movdqu (%edx),%xmm5 +.byte 102,15,56,0,220 + pxor %xmm1,%xmm3 + jnz L001enc_loop + movdqa 96(%ebp),%xmm4 + movdqa 112(%ebp),%xmm0 +.byte 102,15,56,0,226 + pxor %xmm5,%xmm4 +.byte 102,15,56,0,195 + movdqa 64(%ebx,%ecx,1),%xmm1 + pxor %xmm4,%xmm0 +.byte 102,15,56,0,193 + ret +.align 4 +__vpaes_decrypt_core: + movl 240(%edx),%eax + leal 608(%ebp),%ebx + movdqa %xmm6,%xmm1 + movdqa -64(%ebx),%xmm2 + pandn %xmm0,%xmm1 + movl %eax,%ecx + psrld $4,%xmm1 + movdqu (%edx),%xmm5 + shll $4,%ecx + pand %xmm6,%xmm0 +.byte 102,15,56,0,208 + movdqa -48(%ebx),%xmm0 + xorl $48,%ecx +.byte 102,15,56,0,193 + andl $48,%ecx + pxor %xmm5,%xmm2 + movdqa 176(%ebp),%xmm5 + pxor %xmm2,%xmm0 + addl $16,%edx + leal -352(%ebx,%ecx,1),%ecx + jmp L002dec_entry +.align 4,0x90 +L003dec_loop: + movdqa -32(%ebx),%xmm4 +.byte 102,15,56,0,226 + pxor %xmm0,%xmm4 + movdqa -16(%ebx),%xmm0 +.byte 102,15,56,0,195 + pxor %xmm4,%xmm0 + addl $16,%edx +.byte 102,15,56,0,197 + movdqa (%ebx),%xmm4 +.byte 102,15,56,0,226 + pxor %xmm0,%xmm4 + movdqa 16(%ebx),%xmm0 +.byte 102,15,56,0,195 + pxor %xmm4,%xmm0 + subl $1,%eax +.byte 102,15,56,0,197 + movdqa 32(%ebx),%xmm4 +.byte 102,15,56,0,226 + pxor %xmm0,%xmm4 + movdqa 48(%ebx),%xmm0 +.byte 102,15,56,0,195 + pxor %xmm4,%xmm0 +.byte 102,15,56,0,197 + movdqa 64(%ebx),%xmm4 +.byte 102,15,56,0,226 + pxor %xmm0,%xmm4 + movdqa 80(%ebx),%xmm0 +.byte 102,15,56,0,195 + pxor %xmm4,%xmm0 +.byte 102,15,58,15,237,12 +L002dec_entry: + movdqa %xmm6,%xmm1 + pandn %xmm0,%xmm1 + psrld $4,%xmm1 + pand %xmm6,%xmm0 + movdqa -32(%ebp),%xmm2 +.byte 102,15,56,0,208 + pxor %xmm1,%xmm0 + movdqa %xmm7,%xmm3 +.byte 102,15,56,0,217 + pxor %xmm2,%xmm3 + movdqa %xmm7,%xmm4 +.byte 102,15,56,0,224 + pxor %xmm2,%xmm4 + movdqa %xmm7,%xmm2 +.byte 102,15,56,0,211 + pxor %xmm0,%xmm2 + movdqa %xmm7,%xmm3 +.byte 102,15,56,0,220 + pxor %xmm1,%xmm3 + movdqu (%edx),%xmm0 + jnz L003dec_loop + movdqa 96(%ebx),%xmm4 +.byte 102,15,56,0,226 + pxor %xmm0,%xmm4 + movdqa 112(%ebx),%xmm0 + movdqa (%ecx),%xmm2 +.byte 102,15,56,0,195 + pxor %xmm4,%xmm0 +.byte 102,15,56,0,194 + ret +.align 4 +__vpaes_schedule_core: + addl (%esp),%ebp + movdqu (%esi),%xmm0 + movdqa 320(%ebp),%xmm2 + movdqa %xmm0,%xmm3 + leal (%ebp),%ebx + movdqa %xmm2,4(%esp) + call __vpaes_schedule_transform + movdqa %xmm0,%xmm7 + testl %edi,%edi + jnz L004schedule_am_decrypting + movdqu %xmm0,(%edx) + jmp L005schedule_go +L004schedule_am_decrypting: + movdqa 256(%ebp,%ecx,1),%xmm1 +.byte 102,15,56,0,217 + movdqu %xmm3,(%edx) + xorl $48,%ecx +L005schedule_go: + cmpl $192,%eax + ja L006schedule_256 + je L007schedule_192 +L008schedule_128: + movl $10,%eax +L009loop_schedule_128: + call __vpaes_schedule_round + decl %eax + jz L010schedule_mangle_last + call __vpaes_schedule_mangle + jmp L009loop_schedule_128 +.align 4,0x90 +L007schedule_192: + movdqu 8(%esi),%xmm0 + call __vpaes_schedule_transform + movdqa %xmm0,%xmm6 + pxor %xmm4,%xmm4 + movhlps %xmm4,%xmm6 + movl $4,%eax +L011loop_schedule_192: + call __vpaes_schedule_round +.byte 102,15,58,15,198,8 + call __vpaes_schedule_mangle + call __vpaes_schedule_192_smear + call __vpaes_schedule_mangle + call __vpaes_schedule_round + decl %eax + jz L010schedule_mangle_last + call __vpaes_schedule_mangle + call __vpaes_schedule_192_smear + jmp L011loop_schedule_192 +.align 4,0x90 +L006schedule_256: + movdqu 16(%esi),%xmm0 + call __vpaes_schedule_transform + movl $7,%eax +L012loop_schedule_256: + call __vpaes_schedule_mangle + movdqa %xmm0,%xmm6 + call __vpaes_schedule_round + decl %eax + jz L010schedule_mangle_last + call __vpaes_schedule_mangle + pshufd $255,%xmm0,%xmm0 + movdqa %xmm7,20(%esp) + movdqa %xmm6,%xmm7 + call L_vpaes_schedule_low_round + movdqa 20(%esp),%xmm7 + jmp L012loop_schedule_256 +.align 4,0x90 +L010schedule_mangle_last: + leal 384(%ebp),%ebx + testl %edi,%edi + jnz L013schedule_mangle_last_dec + movdqa 256(%ebp,%ecx,1),%xmm1 +.byte 102,15,56,0,193 + leal 352(%ebp),%ebx + addl $32,%edx +L013schedule_mangle_last_dec: + addl $-16,%edx + pxor 336(%ebp),%xmm0 + call __vpaes_schedule_transform + movdqu %xmm0,(%edx) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 + ret +.align 4 +__vpaes_schedule_192_smear: + pshufd $128,%xmm6,%xmm0 + pxor %xmm0,%xmm6 + pshufd $254,%xmm7,%xmm0 + pxor %xmm0,%xmm6 + movdqa %xmm6,%xmm0 + pxor %xmm1,%xmm1 + movhlps %xmm1,%xmm6 + ret +.align 4 +__vpaes_schedule_round: + movdqa 8(%esp),%xmm2 + pxor %xmm1,%xmm1 +.byte 102,15,58,15,202,15 +.byte 102,15,58,15,210,15 + pxor %xmm1,%xmm7 + pshufd $255,%xmm0,%xmm0 +.byte 102,15,58,15,192,1 + movdqa %xmm2,8(%esp) +L_vpaes_schedule_low_round: + movdqa %xmm7,%xmm1 + pslldq $4,%xmm7 + pxor %xmm1,%xmm7 + movdqa %xmm7,%xmm1 + pslldq $8,%xmm7 + pxor %xmm1,%xmm7 + pxor 336(%ebp),%xmm7 + movdqa -16(%ebp),%xmm4 + movdqa -48(%ebp),%xmm5 + movdqa %xmm4,%xmm1 + pandn %xmm0,%xmm1 + psrld $4,%xmm1 + pand %xmm4,%xmm0 + movdqa -32(%ebp),%xmm2 +.byte 102,15,56,0,208 + pxor %xmm1,%xmm0 + movdqa %xmm5,%xmm3 +.byte 102,15,56,0,217 + pxor %xmm2,%xmm3 + movdqa %xmm5,%xmm4 +.byte 102,15,56,0,224 + pxor %xmm2,%xmm4 + movdqa %xmm5,%xmm2 +.byte 102,15,56,0,211 + pxor %xmm0,%xmm2 + movdqa %xmm5,%xmm3 +.byte 102,15,56,0,220 + pxor %xmm1,%xmm3 + movdqa 32(%ebp),%xmm4 +.byte 102,15,56,0,226 + movdqa 48(%ebp),%xmm0 +.byte 102,15,56,0,195 + pxor %xmm4,%xmm0 + pxor %xmm7,%xmm0 + movdqa %xmm0,%xmm7 + ret +.align 4 +__vpaes_schedule_transform: + movdqa -16(%ebp),%xmm2 + movdqa %xmm2,%xmm1 + pandn %xmm0,%xmm1 + psrld $4,%xmm1 + pand %xmm2,%xmm0 + movdqa (%ebx),%xmm2 +.byte 102,15,56,0,208 + movdqa 16(%ebx),%xmm0 +.byte 102,15,56,0,193 + pxor %xmm2,%xmm0 + ret +.align 4 +__vpaes_schedule_mangle: + movdqa %xmm0,%xmm4 + movdqa 128(%ebp),%xmm5 + testl %edi,%edi + jnz L014schedule_mangle_dec + addl $16,%edx + pxor 336(%ebp),%xmm4 +.byte 102,15,56,0,229 + movdqa %xmm4,%xmm3 +.byte 102,15,56,0,229 + pxor %xmm4,%xmm3 +.byte 102,15,56,0,229 + pxor %xmm4,%xmm3 + jmp L015schedule_mangle_both +.align 4,0x90 +L014schedule_mangle_dec: + movdqa -16(%ebp),%xmm2 + leal 416(%ebp),%esi + movdqa %xmm2,%xmm1 + pandn %xmm4,%xmm1 + psrld $4,%xmm1 + pand %xmm2,%xmm4 + movdqa (%esi),%xmm2 +.byte 102,15,56,0,212 + movdqa 16(%esi),%xmm3 +.byte 102,15,56,0,217 + pxor %xmm2,%xmm3 +.byte 102,15,56,0,221 + movdqa 32(%esi),%xmm2 +.byte 102,15,56,0,212 + pxor %xmm3,%xmm2 + movdqa 48(%esi),%xmm3 +.byte 102,15,56,0,217 + pxor %xmm2,%xmm3 +.byte 102,15,56,0,221 + movdqa 64(%esi),%xmm2 +.byte 102,15,56,0,212 + pxor %xmm3,%xmm2 + movdqa 80(%esi),%xmm3 +.byte 102,15,56,0,217 + pxor %xmm2,%xmm3 +.byte 102,15,56,0,221 + movdqa 96(%esi),%xmm2 +.byte 102,15,56,0,212 + pxor %xmm3,%xmm2 + movdqa 112(%esi),%xmm3 +.byte 102,15,56,0,217 + pxor %xmm2,%xmm3 + addl $-16,%edx +L015schedule_mangle_both: + movdqa 256(%ebp,%ecx,1),%xmm1 +.byte 102,15,56,0,217 + addl $-16,%ecx + andl $48,%ecx + movdqu %xmm3,(%edx) + ret +.globl _vpaes_set_encrypt_key +.align 4 +_vpaes_set_encrypt_key: +L_vpaes_set_encrypt_key_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + leal -56(%esp),%ebx + movl 24(%esp),%eax + andl $-16,%ebx + movl 28(%esp),%edx + xchgl %esp,%ebx + movl %ebx,48(%esp) + movl %eax,%ebx + shrl $5,%ebx + addl $5,%ebx + movl %ebx,240(%edx) + movl $48,%ecx + movl $0,%edi + leal L_vpaes_consts+0x30-L016pic_point,%ebp + call __vpaes_schedule_core +L016pic_point: + movl 48(%esp),%esp + xorl %eax,%eax + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _vpaes_set_decrypt_key +.align 4 +_vpaes_set_decrypt_key: +L_vpaes_set_decrypt_key_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + leal -56(%esp),%ebx + movl 24(%esp),%eax + andl $-16,%ebx + movl 28(%esp),%edx + xchgl %esp,%ebx + movl %ebx,48(%esp) + movl %eax,%ebx + shrl $5,%ebx + addl $5,%ebx + movl %ebx,240(%edx) + shll $4,%ebx + leal 16(%edx,%ebx,1),%edx + movl $1,%edi + movl %eax,%ecx + shrl $1,%ecx + andl $32,%ecx + xorl $32,%ecx + leal L_vpaes_consts+0x30-L017pic_point,%ebp + call __vpaes_schedule_core +L017pic_point: + movl 48(%esp),%esp + xorl %eax,%eax + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _vpaes_encrypt +.align 4 +_vpaes_encrypt: +L_vpaes_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + leal L_vpaes_consts+0x30-L018pic_point,%ebp + call __vpaes_preheat +L018pic_point: + movl 20(%esp),%esi + leal -56(%esp),%ebx + movl 24(%esp),%edi + andl $-16,%ebx + movl 28(%esp),%edx + xchgl %esp,%ebx + movl %ebx,48(%esp) + movdqu (%esi),%xmm0 + call __vpaes_encrypt_core + movdqu %xmm0,(%edi) + movl 48(%esp),%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _vpaes_decrypt +.align 4 +_vpaes_decrypt: +L_vpaes_decrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + leal L_vpaes_consts+0x30-L019pic_point,%ebp + call __vpaes_preheat +L019pic_point: + movl 20(%esp),%esi + leal -56(%esp),%ebx + movl 24(%esp),%edi + andl $-16,%ebx + movl 28(%esp),%edx + xchgl %esp,%ebx + movl %ebx,48(%esp) + movdqu (%esi),%xmm0 + call __vpaes_decrypt_core + movdqu %xmm0,(%edi) + movl 48(%esp),%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _vpaes_cbc_encrypt +.align 4 +_vpaes_cbc_encrypt: +L_vpaes_cbc_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + subl $16,%eax + jc L020cbc_abort + leal -56(%esp),%ebx + movl 36(%esp),%ebp + andl $-16,%ebx + movl 40(%esp),%ecx + xchgl %esp,%ebx + movdqu (%ebp),%xmm1 + subl %esi,%edi + movl %ebx,48(%esp) + movl %edi,(%esp) + movl %edx,4(%esp) + movl %ebp,8(%esp) + movl %eax,%edi + leal L_vpaes_consts+0x30-L021pic_point,%ebp + call __vpaes_preheat +L021pic_point: + cmpl $0,%ecx + je L022cbc_dec_loop + jmp L023cbc_enc_loop +.align 4,0x90 +L023cbc_enc_loop: + movdqu (%esi),%xmm0 + pxor %xmm1,%xmm0 + call __vpaes_encrypt_core + movl (%esp),%ebx + movl 4(%esp),%edx + movdqa %xmm0,%xmm1 + movdqu %xmm0,(%ebx,%esi,1) + leal 16(%esi),%esi + subl $16,%edi + jnc L023cbc_enc_loop + jmp L024cbc_done +.align 4,0x90 +L022cbc_dec_loop: + movdqu (%esi),%xmm0 + movdqa %xmm1,16(%esp) + movdqa %xmm0,32(%esp) + call __vpaes_decrypt_core + movl (%esp),%ebx + movl 4(%esp),%edx + pxor 16(%esp),%xmm0 + movdqa 32(%esp),%xmm1 + movdqu %xmm0,(%ebx,%esi,1) + leal 16(%esi),%esi + subl $16,%edi + jnc L022cbc_dec_loop +L024cbc_done: + movl 8(%esp),%ebx + movl 48(%esp),%esp + movdqu %xmm1,(%ebx) +L020cbc_abort: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret diff --git a/chromium/third_party/openssl/openssl/crypto/bf/asm/bf-586-mac.S b/chromium/third_party/openssl/openssl/crypto/bf/asm/bf-586-mac.S new file mode 100644 index 00000000000..bf023847379 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/bf/asm/bf-586-mac.S @@ -0,0 +1,890 @@ +.file "bf-586.s" +.text +.globl _BF_encrypt +.align 4 +_BF_encrypt: +L_BF_encrypt_begin: + + pushl %ebp + pushl %ebx + movl 12(%esp),%ebx + movl 16(%esp),%ebp + pushl %esi + pushl %edi + # Load the 2 words + movl (%ebx),%edi + movl 4(%ebx),%esi + xorl %eax,%eax + movl (%ebp),%ebx + xorl %ecx,%ecx + xorl %ebx,%edi + + # Round 0 + movl 4(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 1 + movl 8(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 2 + movl 12(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 3 + movl 16(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 4 + movl 20(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 5 + movl 24(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 6 + movl 28(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 7 + movl 32(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 8 + movl 36(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 9 + movl 40(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 10 + movl 44(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 11 + movl 48(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 12 + movl 52(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 13 + movl 56(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 14 + movl 60(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 15 + movl 64(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + # Load parameter 0 (16) enc=1 + movl 20(%esp),%eax + xorl %ebx,%edi + movl 68(%ebp),%edx + xorl %edx,%esi + movl %edi,4(%eax) + movl %esi,(%eax) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _BF_decrypt +.align 4 +_BF_decrypt: +L_BF_decrypt_begin: + + pushl %ebp + pushl %ebx + movl 12(%esp),%ebx + movl 16(%esp),%ebp + pushl %esi + pushl %edi + # Load the 2 words + movl (%ebx),%edi + movl 4(%ebx),%esi + xorl %eax,%eax + movl 68(%ebp),%ebx + xorl %ecx,%ecx + xorl %ebx,%edi + + # Round 16 + movl 64(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 15 + movl 60(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 14 + movl 56(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 13 + movl 52(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 12 + movl 48(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 11 + movl 44(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 10 + movl 40(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 9 + movl 36(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 8 + movl 32(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 7 + movl 28(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 6 + movl 24(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 5 + movl 20(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 4 + movl 16(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 3 + movl 12(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%edi + + # Round 2 + movl 8(%ebp),%edx + movl %edi,%ebx + xorl %edx,%esi + shrl $16,%ebx + movl %edi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + xorl %eax,%eax + xorl %ebx,%esi + + # Round 1 + movl 4(%ebp),%edx + movl %esi,%ebx + xorl %edx,%edi + shrl $16,%ebx + movl %esi,%edx + movb %bh,%al + andl $255,%ebx + movb %dh,%cl + andl $255,%edx + movl 72(%ebp,%eax,4),%eax + movl 1096(%ebp,%ebx,4),%ebx + addl %eax,%ebx + movl 2120(%ebp,%ecx,4),%eax + xorl %eax,%ebx + movl 3144(%ebp,%edx,4),%edx + addl %edx,%ebx + # Load parameter 0 (1) enc=0 + movl 20(%esp),%eax + xorl %ebx,%edi + movl (%ebp),%edx + xorl %edx,%esi + movl %edi,4(%eax) + movl %esi,(%eax) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _BF_cbc_encrypt +.align 4 +_BF_cbc_encrypt: +L_BF_cbc_encrypt_begin: + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 28(%esp),%ebp + # getting iv ptr from parameter 4 + movl 36(%esp),%ebx + movl (%ebx),%esi + movl 4(%ebx),%edi + pushl %edi + pushl %esi + pushl %edi + pushl %esi + movl %esp,%ebx + movl 36(%esp),%esi + movl 40(%esp),%edi + # getting encrypt flag from parameter 5 + movl 56(%esp),%ecx + # get and push parameter 3 + movl 48(%esp),%eax + pushl %eax + pushl %ebx + cmpl $0,%ecx + jz L000decrypt + andl $4294967288,%ebp + movl 8(%esp),%eax + movl 12(%esp),%ebx + jz L001encrypt_finish +L002encrypt_loop: + movl (%esi),%ecx + movl 4(%esi),%edx + xorl %ecx,%eax + xorl %edx,%ebx + bswap %eax + bswap %ebx + movl %eax,8(%esp) + movl %ebx,12(%esp) + call L_BF_encrypt_begin + movl 8(%esp),%eax + movl 12(%esp),%ebx + bswap %eax + bswap %ebx + movl %eax,(%edi) + movl %ebx,4(%edi) + addl $8,%esi + addl $8,%edi + subl $8,%ebp + jnz L002encrypt_loop +L001encrypt_finish: + movl 52(%esp),%ebp + andl $7,%ebp + jz L003finish + call L004PIC_point +L004PIC_point: + popl %edx + leal L005cbc_enc_jmp_table-L004PIC_point(%edx),%ecx + movl (%ecx,%ebp,4),%ebp + addl %edx,%ebp + xorl %ecx,%ecx + xorl %edx,%edx + jmp *%ebp +L006ej7: + movb 6(%esi),%dh + shll $8,%edx +L007ej6: + movb 5(%esi),%dh +L008ej5: + movb 4(%esi),%dl +L009ej4: + movl (%esi),%ecx + jmp L010ejend +L011ej3: + movb 2(%esi),%ch + shll $8,%ecx +L012ej2: + movb 1(%esi),%ch +L013ej1: + movb (%esi),%cl +L010ejend: + xorl %ecx,%eax + xorl %edx,%ebx + bswap %eax + bswap %ebx + movl %eax,8(%esp) + movl %ebx,12(%esp) + call L_BF_encrypt_begin + movl 8(%esp),%eax + movl 12(%esp),%ebx + bswap %eax + bswap %ebx + movl %eax,(%edi) + movl %ebx,4(%edi) + jmp L003finish +L000decrypt: + andl $4294967288,%ebp + movl 16(%esp),%eax + movl 20(%esp),%ebx + jz L014decrypt_finish +L015decrypt_loop: + movl (%esi),%eax + movl 4(%esi),%ebx + bswap %eax + bswap %ebx + movl %eax,8(%esp) + movl %ebx,12(%esp) + call L_BF_decrypt_begin + movl 8(%esp),%eax + movl 12(%esp),%ebx + bswap %eax + bswap %ebx + movl 16(%esp),%ecx + movl 20(%esp),%edx + xorl %eax,%ecx + xorl %ebx,%edx + movl (%esi),%eax + movl 4(%esi),%ebx + movl %ecx,(%edi) + movl %edx,4(%edi) + movl %eax,16(%esp) + movl %ebx,20(%esp) + addl $8,%esi + addl $8,%edi + subl $8,%ebp + jnz L015decrypt_loop +L014decrypt_finish: + movl 52(%esp),%ebp + andl $7,%ebp + jz L003finish + movl (%esi),%eax + movl 4(%esi),%ebx + bswap %eax + bswap %ebx + movl %eax,8(%esp) + movl %ebx,12(%esp) + call L_BF_decrypt_begin + movl 8(%esp),%eax + movl 12(%esp),%ebx + bswap %eax + bswap %ebx + movl 16(%esp),%ecx + movl 20(%esp),%edx + xorl %eax,%ecx + xorl %ebx,%edx + movl (%esi),%eax + movl 4(%esi),%ebx +L016dj7: + rorl $16,%edx + movb %dl,6(%edi) + shrl $16,%edx +L017dj6: + movb %dh,5(%edi) +L018dj5: + movb %dl,4(%edi) +L019dj4: + movl %ecx,(%edi) + jmp L020djend +L021dj3: + rorl $16,%ecx + movb %cl,2(%edi) + shll $16,%ecx +L022dj2: + movb %ch,1(%esi) +L023dj1: + movb %cl,(%esi) +L020djend: + jmp L003finish +L003finish: + movl 60(%esp),%ecx + addl $24,%esp + movl %eax,(%ecx) + movl %ebx,4(%ecx) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 6,0x90 +L005cbc_enc_jmp_table: +.long 0 +.long L013ej1-L004PIC_point +.long L012ej2-L004PIC_point +.long L011ej3-L004PIC_point +.long L009ej4-L004PIC_point +.long L008ej5-L004PIC_point +.long L007ej6-L004PIC_point +.long L006ej7-L004PIC_point +.align 6,0x90 diff --git a/chromium/third_party/openssl/openssl/crypto/bn/asm/bn-586-mac.S b/chromium/third_party/openssl/openssl/crypto/bn/asm/bn-586-mac.S new file mode 100644 index 00000000000..05a81aa2112 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/bn/asm/bn-586-mac.S @@ -0,0 +1,1370 @@ +.file "crypto/bn/asm/bn-586.s" +.text +.globl _bn_mul_add_words +.align 4 +_bn_mul_add_words: +L_bn_mul_add_words_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + + xorl %esi,%esi + movl 20(%esp),%edi + movl 28(%esp),%ecx + movl 24(%esp),%ebx + andl $4294967288,%ecx + movl 32(%esp),%ebp + pushl %ecx + jz L000maw_finish +.align 4,0x90 +L001maw_loop: + # Round 0 + movl (%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl (%edi),%eax + adcl $0,%edx + movl %eax,(%edi) + movl %edx,%esi + # Round 4 + movl 4(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 4(%edi),%eax + adcl $0,%edx + movl %eax,4(%edi) + movl %edx,%esi + # Round 8 + movl 8(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 8(%edi),%eax + adcl $0,%edx + movl %eax,8(%edi) + movl %edx,%esi + # Round 12 + movl 12(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 12(%edi),%eax + adcl $0,%edx + movl %eax,12(%edi) + movl %edx,%esi + # Round 16 + movl 16(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 16(%edi),%eax + adcl $0,%edx + movl %eax,16(%edi) + movl %edx,%esi + # Round 20 + movl 20(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 20(%edi),%eax + adcl $0,%edx + movl %eax,20(%edi) + movl %edx,%esi + # Round 24 + movl 24(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 24(%edi),%eax + adcl $0,%edx + movl %eax,24(%edi) + movl %edx,%esi + # Round 28 + movl 28(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 28(%edi),%eax + adcl $0,%edx + movl %eax,28(%edi) + movl %edx,%esi + + subl $8,%ecx + leal 32(%ebx),%ebx + leal 32(%edi),%edi + jnz L001maw_loop +L000maw_finish: + movl 32(%esp),%ecx + andl $7,%ecx + jnz L002maw_finish2 + jmp L003maw_end +L002maw_finish2: + # Tail Round 0 + movl (%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl (%edi),%eax + adcl $0,%edx + decl %ecx + movl %eax,(%edi) + movl %edx,%esi + jz L003maw_end + # Tail Round 1 + movl 4(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 4(%edi),%eax + adcl $0,%edx + decl %ecx + movl %eax,4(%edi) + movl %edx,%esi + jz L003maw_end + # Tail Round 2 + movl 8(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 8(%edi),%eax + adcl $0,%edx + decl %ecx + movl %eax,8(%edi) + movl %edx,%esi + jz L003maw_end + # Tail Round 3 + movl 12(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 12(%edi),%eax + adcl $0,%edx + decl %ecx + movl %eax,12(%edi) + movl %edx,%esi + jz L003maw_end + # Tail Round 4 + movl 16(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 16(%edi),%eax + adcl $0,%edx + decl %ecx + movl %eax,16(%edi) + movl %edx,%esi + jz L003maw_end + # Tail Round 5 + movl 20(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 20(%edi),%eax + adcl $0,%edx + decl %ecx + movl %eax,20(%edi) + movl %edx,%esi + jz L003maw_end + # Tail Round 6 + movl 24(%ebx),%eax + mull %ebp + addl %esi,%eax + adcl $0,%edx + addl 24(%edi),%eax + adcl $0,%edx + movl %eax,24(%edi) + movl %edx,%esi +L003maw_end: + movl %esi,%eax + popl %ecx + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _bn_mul_words +.align 4 +_bn_mul_words: +L_bn_mul_words_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + + xorl %esi,%esi + movl 20(%esp),%edi + movl 24(%esp),%ebx + movl 28(%esp),%ebp + movl 32(%esp),%ecx + andl $4294967288,%ebp + jz L004mw_finish +L005mw_loop: + # Round 0 + movl (%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,(%edi) + movl %edx,%esi + # Round 4 + movl 4(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,4(%edi) + movl %edx,%esi + # Round 8 + movl 8(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,8(%edi) + movl %edx,%esi + # Round 12 + movl 12(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,12(%edi) + movl %edx,%esi + # Round 16 + movl 16(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,16(%edi) + movl %edx,%esi + # Round 20 + movl 20(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,20(%edi) + movl %edx,%esi + # Round 24 + movl 24(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,24(%edi) + movl %edx,%esi + # Round 28 + movl 28(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,28(%edi) + movl %edx,%esi + + addl $32,%ebx + addl $32,%edi + subl $8,%ebp + jz L004mw_finish + jmp L005mw_loop +L004mw_finish: + movl 28(%esp),%ebp + andl $7,%ebp + jnz L006mw_finish2 + jmp L007mw_end +L006mw_finish2: + # Tail Round 0 + movl (%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,(%edi) + movl %edx,%esi + decl %ebp + jz L007mw_end + # Tail Round 1 + movl 4(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,4(%edi) + movl %edx,%esi + decl %ebp + jz L007mw_end + # Tail Round 2 + movl 8(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,8(%edi) + movl %edx,%esi + decl %ebp + jz L007mw_end + # Tail Round 3 + movl 12(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,12(%edi) + movl %edx,%esi + decl %ebp + jz L007mw_end + # Tail Round 4 + movl 16(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,16(%edi) + movl %edx,%esi + decl %ebp + jz L007mw_end + # Tail Round 5 + movl 20(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,20(%edi) + movl %edx,%esi + decl %ebp + jz L007mw_end + # Tail Round 6 + movl 24(%ebx),%eax + mull %ecx + addl %esi,%eax + adcl $0,%edx + movl %eax,24(%edi) + movl %edx,%esi +L007mw_end: + movl %esi,%eax + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _bn_sqr_words +.align 4 +_bn_sqr_words: +L_bn_sqr_words_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%ebx + andl $4294967288,%ebx + jz L008sw_finish +L009sw_loop: + # Round 0 + movl (%edi),%eax + mull %eax + movl %eax,(%esi) + movl %edx,4(%esi) + # Round 4 + movl 4(%edi),%eax + mull %eax + movl %eax,8(%esi) + movl %edx,12(%esi) + # Round 8 + movl 8(%edi),%eax + mull %eax + movl %eax,16(%esi) + movl %edx,20(%esi) + # Round 12 + movl 12(%edi),%eax + mull %eax + movl %eax,24(%esi) + movl %edx,28(%esi) + # Round 16 + movl 16(%edi),%eax + mull %eax + movl %eax,32(%esi) + movl %edx,36(%esi) + # Round 20 + movl 20(%edi),%eax + mull %eax + movl %eax,40(%esi) + movl %edx,44(%esi) + # Round 24 + movl 24(%edi),%eax + mull %eax + movl %eax,48(%esi) + movl %edx,52(%esi) + # Round 28 + movl 28(%edi),%eax + mull %eax + movl %eax,56(%esi) + movl %edx,60(%esi) + + addl $32,%edi + addl $64,%esi + subl $8,%ebx + jnz L009sw_loop +L008sw_finish: + movl 28(%esp),%ebx + andl $7,%ebx + jz L010sw_end + # Tail Round 0 + movl (%edi),%eax + mull %eax + movl %eax,(%esi) + decl %ebx + movl %edx,4(%esi) + jz L010sw_end + # Tail Round 1 + movl 4(%edi),%eax + mull %eax + movl %eax,8(%esi) + decl %ebx + movl %edx,12(%esi) + jz L010sw_end + # Tail Round 2 + movl 8(%edi),%eax + mull %eax + movl %eax,16(%esi) + decl %ebx + movl %edx,20(%esi) + jz L010sw_end + # Tail Round 3 + movl 12(%edi),%eax + mull %eax + movl %eax,24(%esi) + decl %ebx + movl %edx,28(%esi) + jz L010sw_end + # Tail Round 4 + movl 16(%edi),%eax + mull %eax + movl %eax,32(%esi) + decl %ebx + movl %edx,36(%esi) + jz L010sw_end + # Tail Round 5 + movl 20(%edi),%eax + mull %eax + movl %eax,40(%esi) + decl %ebx + movl %edx,44(%esi) + jz L010sw_end + # Tail Round 6 + movl 24(%edi),%eax + mull %eax + movl %eax,48(%esi) + movl %edx,52(%esi) +L010sw_end: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _bn_div_words +.align 4 +_bn_div_words: +L_bn_div_words_begin: + movl 4(%esp),%edx + movl 8(%esp),%eax + movl 12(%esp),%ecx + divl %ecx + ret +.globl _bn_add_words +.align 4 +_bn_add_words: +L_bn_add_words_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + + movl 20(%esp),%ebx + movl 24(%esp),%esi + movl 28(%esp),%edi + movl 32(%esp),%ebp + xorl %eax,%eax + andl $4294967288,%ebp + jz L011aw_finish +L012aw_loop: + # Round 0 + movl (%esi),%ecx + movl (%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + # Round 1 + movl 4(%esi),%ecx + movl 4(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,4(%ebx) + # Round 2 + movl 8(%esi),%ecx + movl 8(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,8(%ebx) + # Round 3 + movl 12(%esi),%ecx + movl 12(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,12(%ebx) + # Round 4 + movl 16(%esi),%ecx + movl 16(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,16(%ebx) + # Round 5 + movl 20(%esi),%ecx + movl 20(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,20(%ebx) + # Round 6 + movl 24(%esi),%ecx + movl 24(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,24(%ebx) + # Round 7 + movl 28(%esi),%ecx + movl 28(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,28(%ebx) + + addl $32,%esi + addl $32,%edi + addl $32,%ebx + subl $8,%ebp + jnz L012aw_loop +L011aw_finish: + movl 32(%esp),%ebp + andl $7,%ebp + jz L013aw_end + # Tail Round 0 + movl (%esi),%ecx + movl (%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,(%ebx) + jz L013aw_end + # Tail Round 1 + movl 4(%esi),%ecx + movl 4(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,4(%ebx) + jz L013aw_end + # Tail Round 2 + movl 8(%esi),%ecx + movl 8(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,8(%ebx) + jz L013aw_end + # Tail Round 3 + movl 12(%esi),%ecx + movl 12(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,12(%ebx) + jz L013aw_end + # Tail Round 4 + movl 16(%esi),%ecx + movl 16(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,16(%ebx) + jz L013aw_end + # Tail Round 5 + movl 20(%esi),%ecx + movl 20(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,20(%ebx) + jz L013aw_end + # Tail Round 6 + movl 24(%esi),%ecx + movl 24(%edi),%edx + addl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + addl %edx,%ecx + adcl $0,%eax + movl %ecx,24(%ebx) +L013aw_end: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _bn_sub_words +.align 4 +_bn_sub_words: +L_bn_sub_words_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + + movl 20(%esp),%ebx + movl 24(%esp),%esi + movl 28(%esp),%edi + movl 32(%esp),%ebp + xorl %eax,%eax + andl $4294967288,%ebp + jz L014aw_finish +L015aw_loop: + # Round 0 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + # Round 1 + movl 4(%esi),%ecx + movl 4(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,4(%ebx) + # Round 2 + movl 8(%esi),%ecx + movl 8(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,8(%ebx) + # Round 3 + movl 12(%esi),%ecx + movl 12(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,12(%ebx) + # Round 4 + movl 16(%esi),%ecx + movl 16(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,16(%ebx) + # Round 5 + movl 20(%esi),%ecx + movl 20(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,20(%ebx) + # Round 6 + movl 24(%esi),%ecx + movl 24(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,24(%ebx) + # Round 7 + movl 28(%esi),%ecx + movl 28(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,28(%ebx) + + addl $32,%esi + addl $32,%edi + addl $32,%ebx + subl $8,%ebp + jnz L015aw_loop +L014aw_finish: + movl 32(%esp),%ebp + andl $7,%ebp + jz L016aw_end + # Tail Round 0 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,(%ebx) + jz L016aw_end + # Tail Round 1 + movl 4(%esi),%ecx + movl 4(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,4(%ebx) + jz L016aw_end + # Tail Round 2 + movl 8(%esi),%ecx + movl 8(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,8(%ebx) + jz L016aw_end + # Tail Round 3 + movl 12(%esi),%ecx + movl 12(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,12(%ebx) + jz L016aw_end + # Tail Round 4 + movl 16(%esi),%ecx + movl 16(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,16(%ebx) + jz L016aw_end + # Tail Round 5 + movl 20(%esi),%ecx + movl 20(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,20(%ebx) + jz L016aw_end + # Tail Round 6 + movl 24(%esi),%ecx + movl 24(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,24(%ebx) +L016aw_end: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _bn_sub_part_words +.align 4 +_bn_sub_part_words: +L_bn_sub_part_words_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + + movl 20(%esp),%ebx + movl 24(%esp),%esi + movl 28(%esp),%edi + movl 32(%esp),%ebp + xorl %eax,%eax + andl $4294967288,%ebp + jz L017aw_finish +L018aw_loop: + # Round 0 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + # Round 1 + movl 4(%esi),%ecx + movl 4(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,4(%ebx) + # Round 2 + movl 8(%esi),%ecx + movl 8(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,8(%ebx) + # Round 3 + movl 12(%esi),%ecx + movl 12(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,12(%ebx) + # Round 4 + movl 16(%esi),%ecx + movl 16(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,16(%ebx) + # Round 5 + movl 20(%esi),%ecx + movl 20(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,20(%ebx) + # Round 6 + movl 24(%esi),%ecx + movl 24(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,24(%ebx) + # Round 7 + movl 28(%esi),%ecx + movl 28(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,28(%ebx) + + addl $32,%esi + addl $32,%edi + addl $32,%ebx + subl $8,%ebp + jnz L018aw_loop +L017aw_finish: + movl 32(%esp),%ebp + andl $7,%ebp + jz L019aw_end + # Tail Round 0 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + addl $4,%esi + addl $4,%edi + addl $4,%ebx + decl %ebp + jz L019aw_end + # Tail Round 1 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + addl $4,%esi + addl $4,%edi + addl $4,%ebx + decl %ebp + jz L019aw_end + # Tail Round 2 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + addl $4,%esi + addl $4,%edi + addl $4,%ebx + decl %ebp + jz L019aw_end + # Tail Round 3 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + addl $4,%esi + addl $4,%edi + addl $4,%ebx + decl %ebp + jz L019aw_end + # Tail Round 4 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + addl $4,%esi + addl $4,%edi + addl $4,%ebx + decl %ebp + jz L019aw_end + # Tail Round 5 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + addl $4,%esi + addl $4,%edi + addl $4,%ebx + decl %ebp + jz L019aw_end + # Tail Round 6 + movl (%esi),%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + addl $4,%esi + addl $4,%edi + addl $4,%ebx +L019aw_end: + cmpl $0,36(%esp) + je L020pw_end + movl 36(%esp),%ebp + cmpl $0,%ebp + je L020pw_end + jge L021pw_pos + # pw_neg + movl $0,%edx + subl %ebp,%edx + movl %edx,%ebp + andl $4294967288,%ebp + jz L022pw_neg_finish +L023pw_neg_loop: + # dl<0 Round 0 + movl $0,%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,(%ebx) + # dl<0 Round 1 + movl $0,%ecx + movl 4(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,4(%ebx) + # dl<0 Round 2 + movl $0,%ecx + movl 8(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,8(%ebx) + # dl<0 Round 3 + movl $0,%ecx + movl 12(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,12(%ebx) + # dl<0 Round 4 + movl $0,%ecx + movl 16(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,16(%ebx) + # dl<0 Round 5 + movl $0,%ecx + movl 20(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,20(%ebx) + # dl<0 Round 6 + movl $0,%ecx + movl 24(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,24(%ebx) + # dl<0 Round 7 + movl $0,%ecx + movl 28(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,28(%ebx) + + addl $32,%edi + addl $32,%ebx + subl $8,%ebp + jnz L023pw_neg_loop +L022pw_neg_finish: + movl 36(%esp),%edx + movl $0,%ebp + subl %edx,%ebp + andl $7,%ebp + jz L020pw_end + # dl<0 Tail Round 0 + movl $0,%ecx + movl (%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,(%ebx) + jz L020pw_end + # dl<0 Tail Round 1 + movl $0,%ecx + movl 4(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,4(%ebx) + jz L020pw_end + # dl<0 Tail Round 2 + movl $0,%ecx + movl 8(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,8(%ebx) + jz L020pw_end + # dl<0 Tail Round 3 + movl $0,%ecx + movl 12(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,12(%ebx) + jz L020pw_end + # dl<0 Tail Round 4 + movl $0,%ecx + movl 16(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,16(%ebx) + jz L020pw_end + # dl<0 Tail Round 5 + movl $0,%ecx + movl 20(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + decl %ebp + movl %ecx,20(%ebx) + jz L020pw_end + # dl<0 Tail Round 6 + movl $0,%ecx + movl 24(%edi),%edx + subl %eax,%ecx + movl $0,%eax + adcl %eax,%eax + subl %edx,%ecx + adcl $0,%eax + movl %ecx,24(%ebx) + jmp L020pw_end +L021pw_pos: + andl $4294967288,%ebp + jz L024pw_pos_finish +L025pw_pos_loop: + # dl>0 Round 0 + movl (%esi),%ecx + subl %eax,%ecx + movl %ecx,(%ebx) + jnc L026pw_nc0 + # dl>0 Round 1 + movl 4(%esi),%ecx + subl %eax,%ecx + movl %ecx,4(%ebx) + jnc L027pw_nc1 + # dl>0 Round 2 + movl 8(%esi),%ecx + subl %eax,%ecx + movl %ecx,8(%ebx) + jnc L028pw_nc2 + # dl>0 Round 3 + movl 12(%esi),%ecx + subl %eax,%ecx + movl %ecx,12(%ebx) + jnc L029pw_nc3 + # dl>0 Round 4 + movl 16(%esi),%ecx + subl %eax,%ecx + movl %ecx,16(%ebx) + jnc L030pw_nc4 + # dl>0 Round 5 + movl 20(%esi),%ecx + subl %eax,%ecx + movl %ecx,20(%ebx) + jnc L031pw_nc5 + # dl>0 Round 6 + movl 24(%esi),%ecx + subl %eax,%ecx + movl %ecx,24(%ebx) + jnc L032pw_nc6 + # dl>0 Round 7 + movl 28(%esi),%ecx + subl %eax,%ecx + movl %ecx,28(%ebx) + jnc L033pw_nc7 + + addl $32,%esi + addl $32,%ebx + subl $8,%ebp + jnz L025pw_pos_loop +L024pw_pos_finish: + movl 36(%esp),%ebp + andl $7,%ebp + jz L020pw_end + # dl>0 Tail Round 0 + movl (%esi),%ecx + subl %eax,%ecx + movl %ecx,(%ebx) + jnc L034pw_tail_nc0 + decl %ebp + jz L020pw_end + # dl>0 Tail Round 1 + movl 4(%esi),%ecx + subl %eax,%ecx + movl %ecx,4(%ebx) + jnc L035pw_tail_nc1 + decl %ebp + jz L020pw_end + # dl>0 Tail Round 2 + movl 8(%esi),%ecx + subl %eax,%ecx + movl %ecx,8(%ebx) + jnc L036pw_tail_nc2 + decl %ebp + jz L020pw_end + # dl>0 Tail Round 3 + movl 12(%esi),%ecx + subl %eax,%ecx + movl %ecx,12(%ebx) + jnc L037pw_tail_nc3 + decl %ebp + jz L020pw_end + # dl>0 Tail Round 4 + movl 16(%esi),%ecx + subl %eax,%ecx + movl %ecx,16(%ebx) + jnc L038pw_tail_nc4 + decl %ebp + jz L020pw_end + # dl>0 Tail Round 5 + movl 20(%esi),%ecx + subl %eax,%ecx + movl %ecx,20(%ebx) + jnc L039pw_tail_nc5 + decl %ebp + jz L020pw_end + # dl>0 Tail Round 6 + movl 24(%esi),%ecx + subl %eax,%ecx + movl %ecx,24(%ebx) + jnc L040pw_tail_nc6 + movl $1,%eax + jmp L020pw_end +L041pw_nc_loop: + movl (%esi),%ecx + movl %ecx,(%ebx) +L026pw_nc0: + movl 4(%esi),%ecx + movl %ecx,4(%ebx) +L027pw_nc1: + movl 8(%esi),%ecx + movl %ecx,8(%ebx) +L028pw_nc2: + movl 12(%esi),%ecx + movl %ecx,12(%ebx) +L029pw_nc3: + movl 16(%esi),%ecx + movl %ecx,16(%ebx) +L030pw_nc4: + movl 20(%esi),%ecx + movl %ecx,20(%ebx) +L031pw_nc5: + movl 24(%esi),%ecx + movl %ecx,24(%ebx) +L032pw_nc6: + movl 28(%esi),%ecx + movl %ecx,28(%ebx) +L033pw_nc7: + + addl $32,%esi + addl $32,%ebx + subl $8,%ebp + jnz L041pw_nc_loop + movl 36(%esp),%ebp + andl $7,%ebp + jz L042pw_nc_end + movl (%esi),%ecx + movl %ecx,(%ebx) +L034pw_tail_nc0: + decl %ebp + jz L042pw_nc_end + movl 4(%esi),%ecx + movl %ecx,4(%ebx) +L035pw_tail_nc1: + decl %ebp + jz L042pw_nc_end + movl 8(%esi),%ecx + movl %ecx,8(%ebx) +L036pw_tail_nc2: + decl %ebp + jz L042pw_nc_end + movl 12(%esi),%ecx + movl %ecx,12(%ebx) +L037pw_tail_nc3: + decl %ebp + jz L042pw_nc_end + movl 16(%esi),%ecx + movl %ecx,16(%ebx) +L038pw_tail_nc4: + decl %ebp + jz L042pw_nc_end + movl 20(%esi),%ecx + movl %ecx,20(%ebx) +L039pw_tail_nc5: + decl %ebp + jz L042pw_nc_end + movl 24(%esi),%ecx + movl %ecx,24(%ebx) +L040pw_tail_nc6: +L042pw_nc_end: + movl $0,%eax +L020pw_end: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret diff --git a/chromium/third_party/openssl/openssl/crypto/bn/asm/co-586-mac.S b/chromium/third_party/openssl/openssl/crypto/bn/asm/co-586-mac.S new file mode 100644 index 00000000000..d82fdcbc7d6 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/bn/asm/co-586-mac.S @@ -0,0 +1,1246 @@ +.file "crypto/bn/asm/co-586.s" +.text +.globl _bn_mul_comba8 +.align 4 +_bn_mul_comba8: +L_bn_mul_comba8_begin: + pushl %esi + movl 12(%esp),%esi + pushl %edi + movl 20(%esp),%edi + pushl %ebp + pushl %ebx + xorl %ebx,%ebx + movl (%esi),%eax + xorl %ecx,%ecx + movl (%edi),%edx + # ################## Calculate word 0 + xorl %ebp,%ebp + # mul a[0]*b[0] + mull %edx + addl %eax,%ebx + movl 20(%esp),%eax + adcl %edx,%ecx + movl (%edi),%edx + adcl $0,%ebp + movl %ebx,(%eax) + movl 4(%esi),%eax + # saved r[0] + # ################## Calculate word 1 + xorl %ebx,%ebx + # mul a[1]*b[0] + mull %edx + addl %eax,%ecx + movl (%esi),%eax + adcl %edx,%ebp + movl 4(%edi),%edx + adcl $0,%ebx + # mul a[0]*b[1] + mull %edx + addl %eax,%ecx + movl 20(%esp),%eax + adcl %edx,%ebp + movl (%edi),%edx + adcl $0,%ebx + movl %ecx,4(%eax) + movl 8(%esi),%eax + # saved r[1] + # ################## Calculate word 2 + xorl %ecx,%ecx + # mul a[2]*b[0] + mull %edx + addl %eax,%ebp + movl 4(%esi),%eax + adcl %edx,%ebx + movl 4(%edi),%edx + adcl $0,%ecx + # mul a[1]*b[1] + mull %edx + addl %eax,%ebp + movl (%esi),%eax + adcl %edx,%ebx + movl 8(%edi),%edx + adcl $0,%ecx + # mul a[0]*b[2] + mull %edx + addl %eax,%ebp + movl 20(%esp),%eax + adcl %edx,%ebx + movl (%edi),%edx + adcl $0,%ecx + movl %ebp,8(%eax) + movl 12(%esi),%eax + # saved r[2] + # ################## Calculate word 3 + xorl %ebp,%ebp + # mul a[3]*b[0] + mull %edx + addl %eax,%ebx + movl 8(%esi),%eax + adcl %edx,%ecx + movl 4(%edi),%edx + adcl $0,%ebp + # mul a[2]*b[1] + mull %edx + addl %eax,%ebx + movl 4(%esi),%eax + adcl %edx,%ecx + movl 8(%edi),%edx + adcl $0,%ebp + # mul a[1]*b[2] + mull %edx + addl %eax,%ebx + movl (%esi),%eax + adcl %edx,%ecx + movl 12(%edi),%edx + adcl $0,%ebp + # mul a[0]*b[3] + mull %edx + addl %eax,%ebx + movl 20(%esp),%eax + adcl %edx,%ecx + movl (%edi),%edx + adcl $0,%ebp + movl %ebx,12(%eax) + movl 16(%esi),%eax + # saved r[3] + # ################## Calculate word 4 + xorl %ebx,%ebx + # mul a[4]*b[0] + mull %edx + addl %eax,%ecx + movl 12(%esi),%eax + adcl %edx,%ebp + movl 4(%edi),%edx + adcl $0,%ebx + # mul a[3]*b[1] + mull %edx + addl %eax,%ecx + movl 8(%esi),%eax + adcl %edx,%ebp + movl 8(%edi),%edx + adcl $0,%ebx + # mul a[2]*b[2] + mull %edx + addl %eax,%ecx + movl 4(%esi),%eax + adcl %edx,%ebp + movl 12(%edi),%edx + adcl $0,%ebx + # mul a[1]*b[3] + mull %edx + addl %eax,%ecx + movl (%esi),%eax + adcl %edx,%ebp + movl 16(%edi),%edx + adcl $0,%ebx + # mul a[0]*b[4] + mull %edx + addl %eax,%ecx + movl 20(%esp),%eax + adcl %edx,%ebp + movl (%edi),%edx + adcl $0,%ebx + movl %ecx,16(%eax) + movl 20(%esi),%eax + # saved r[4] + # ################## Calculate word 5 + xorl %ecx,%ecx + # mul a[5]*b[0] + mull %edx + addl %eax,%ebp + movl 16(%esi),%eax + adcl %edx,%ebx + movl 4(%edi),%edx + adcl $0,%ecx + # mul a[4]*b[1] + mull %edx + addl %eax,%ebp + movl 12(%esi),%eax + adcl %edx,%ebx + movl 8(%edi),%edx + adcl $0,%ecx + # mul a[3]*b[2] + mull %edx + addl %eax,%ebp + movl 8(%esi),%eax + adcl %edx,%ebx + movl 12(%edi),%edx + adcl $0,%ecx + # mul a[2]*b[3] + mull %edx + addl %eax,%ebp + movl 4(%esi),%eax + adcl %edx,%ebx + movl 16(%edi),%edx + adcl $0,%ecx + # mul a[1]*b[4] + mull %edx + addl %eax,%ebp + movl (%esi),%eax + adcl %edx,%ebx + movl 20(%edi),%edx + adcl $0,%ecx + # mul a[0]*b[5] + mull %edx + addl %eax,%ebp + movl 20(%esp),%eax + adcl %edx,%ebx + movl (%edi),%edx + adcl $0,%ecx + movl %ebp,20(%eax) + movl 24(%esi),%eax + # saved r[5] + # ################## Calculate word 6 + xorl %ebp,%ebp + # mul a[6]*b[0] + mull %edx + addl %eax,%ebx + movl 20(%esi),%eax + adcl %edx,%ecx + movl 4(%edi),%edx + adcl $0,%ebp + # mul a[5]*b[1] + mull %edx + addl %eax,%ebx + movl 16(%esi),%eax + adcl %edx,%ecx + movl 8(%edi),%edx + adcl $0,%ebp + # mul a[4]*b[2] + mull %edx + addl %eax,%ebx + movl 12(%esi),%eax + adcl %edx,%ecx + movl 12(%edi),%edx + adcl $0,%ebp + # mul a[3]*b[3] + mull %edx + addl %eax,%ebx + movl 8(%esi),%eax + adcl %edx,%ecx + movl 16(%edi),%edx + adcl $0,%ebp + # mul a[2]*b[4] + mull %edx + addl %eax,%ebx + movl 4(%esi),%eax + adcl %edx,%ecx + movl 20(%edi),%edx + adcl $0,%ebp + # mul a[1]*b[5] + mull %edx + addl %eax,%ebx + movl (%esi),%eax + adcl %edx,%ecx + movl 24(%edi),%edx + adcl $0,%ebp + # mul a[0]*b[6] + mull %edx + addl %eax,%ebx + movl 20(%esp),%eax + adcl %edx,%ecx + movl (%edi),%edx + adcl $0,%ebp + movl %ebx,24(%eax) + movl 28(%esi),%eax + # saved r[6] + # ################## Calculate word 7 + xorl %ebx,%ebx + # mul a[7]*b[0] + mull %edx + addl %eax,%ecx + movl 24(%esi),%eax + adcl %edx,%ebp + movl 4(%edi),%edx + adcl $0,%ebx + # mul a[6]*b[1] + mull %edx + addl %eax,%ecx + movl 20(%esi),%eax + adcl %edx,%ebp + movl 8(%edi),%edx + adcl $0,%ebx + # mul a[5]*b[2] + mull %edx + addl %eax,%ecx + movl 16(%esi),%eax + adcl %edx,%ebp + movl 12(%edi),%edx + adcl $0,%ebx + # mul a[4]*b[3] + mull %edx + addl %eax,%ecx + movl 12(%esi),%eax + adcl %edx,%ebp + movl 16(%edi),%edx + adcl $0,%ebx + # mul a[3]*b[4] + mull %edx + addl %eax,%ecx + movl 8(%esi),%eax + adcl %edx,%ebp + movl 20(%edi),%edx + adcl $0,%ebx + # mul a[2]*b[5] + mull %edx + addl %eax,%ecx + movl 4(%esi),%eax + adcl %edx,%ebp + movl 24(%edi),%edx + adcl $0,%ebx + # mul a[1]*b[6] + mull %edx + addl %eax,%ecx + movl (%esi),%eax + adcl %edx,%ebp + movl 28(%edi),%edx + adcl $0,%ebx + # mul a[0]*b[7] + mull %edx + addl %eax,%ecx + movl 20(%esp),%eax + adcl %edx,%ebp + movl 4(%edi),%edx + adcl $0,%ebx + movl %ecx,28(%eax) + movl 28(%esi),%eax + # saved r[7] + # ################## Calculate word 8 + xorl %ecx,%ecx + # mul a[7]*b[1] + mull %edx + addl %eax,%ebp + movl 24(%esi),%eax + adcl %edx,%ebx + movl 8(%edi),%edx + adcl $0,%ecx + # mul a[6]*b[2] + mull %edx + addl %eax,%ebp + movl 20(%esi),%eax + adcl %edx,%ebx + movl 12(%edi),%edx + adcl $0,%ecx + # mul a[5]*b[3] + mull %edx + addl %eax,%ebp + movl 16(%esi),%eax + adcl %edx,%ebx + movl 16(%edi),%edx + adcl $0,%ecx + # mul a[4]*b[4] + mull %edx + addl %eax,%ebp + movl 12(%esi),%eax + adcl %edx,%ebx + movl 20(%edi),%edx + adcl $0,%ecx + # mul a[3]*b[5] + mull %edx + addl %eax,%ebp + movl 8(%esi),%eax + adcl %edx,%ebx + movl 24(%edi),%edx + adcl $0,%ecx + # mul a[2]*b[6] + mull %edx + addl %eax,%ebp + movl 4(%esi),%eax + adcl %edx,%ebx + movl 28(%edi),%edx + adcl $0,%ecx + # mul a[1]*b[7] + mull %edx + addl %eax,%ebp + movl 20(%esp),%eax + adcl %edx,%ebx + movl 8(%edi),%edx + adcl $0,%ecx + movl %ebp,32(%eax) + movl 28(%esi),%eax + # saved r[8] + # ################## Calculate word 9 + xorl %ebp,%ebp + # mul a[7]*b[2] + mull %edx + addl %eax,%ebx + movl 24(%esi),%eax + adcl %edx,%ecx + movl 12(%edi),%edx + adcl $0,%ebp + # mul a[6]*b[3] + mull %edx + addl %eax,%ebx + movl 20(%esi),%eax + adcl %edx,%ecx + movl 16(%edi),%edx + adcl $0,%ebp + # mul a[5]*b[4] + mull %edx + addl %eax,%ebx + movl 16(%esi),%eax + adcl %edx,%ecx + movl 20(%edi),%edx + adcl $0,%ebp + # mul a[4]*b[5] + mull %edx + addl %eax,%ebx + movl 12(%esi),%eax + adcl %edx,%ecx + movl 24(%edi),%edx + adcl $0,%ebp + # mul a[3]*b[6] + mull %edx + addl %eax,%ebx + movl 8(%esi),%eax + adcl %edx,%ecx + movl 28(%edi),%edx + adcl $0,%ebp + # mul a[2]*b[7] + mull %edx + addl %eax,%ebx + movl 20(%esp),%eax + adcl %edx,%ecx + movl 12(%edi),%edx + adcl $0,%ebp + movl %ebx,36(%eax) + movl 28(%esi),%eax + # saved r[9] + # ################## Calculate word 10 + xorl %ebx,%ebx + # mul a[7]*b[3] + mull %edx + addl %eax,%ecx + movl 24(%esi),%eax + adcl %edx,%ebp + movl 16(%edi),%edx + adcl $0,%ebx + # mul a[6]*b[4] + mull %edx + addl %eax,%ecx + movl 20(%esi),%eax + adcl %edx,%ebp + movl 20(%edi),%edx + adcl $0,%ebx + # mul a[5]*b[5] + mull %edx + addl %eax,%ecx + movl 16(%esi),%eax + adcl %edx,%ebp + movl 24(%edi),%edx + adcl $0,%ebx + # mul a[4]*b[6] + mull %edx + addl %eax,%ecx + movl 12(%esi),%eax + adcl %edx,%ebp + movl 28(%edi),%edx + adcl $0,%ebx + # mul a[3]*b[7] + mull %edx + addl %eax,%ecx + movl 20(%esp),%eax + adcl %edx,%ebp + movl 16(%edi),%edx + adcl $0,%ebx + movl %ecx,40(%eax) + movl 28(%esi),%eax + # saved r[10] + # ################## Calculate word 11 + xorl %ecx,%ecx + # mul a[7]*b[4] + mull %edx + addl %eax,%ebp + movl 24(%esi),%eax + adcl %edx,%ebx + movl 20(%edi),%edx + adcl $0,%ecx + # mul a[6]*b[5] + mull %edx + addl %eax,%ebp + movl 20(%esi),%eax + adcl %edx,%ebx + movl 24(%edi),%edx + adcl $0,%ecx + # mul a[5]*b[6] + mull %edx + addl %eax,%ebp + movl 16(%esi),%eax + adcl %edx,%ebx + movl 28(%edi),%edx + adcl $0,%ecx + # mul a[4]*b[7] + mull %edx + addl %eax,%ebp + movl 20(%esp),%eax + adcl %edx,%ebx + movl 20(%edi),%edx + adcl $0,%ecx + movl %ebp,44(%eax) + movl 28(%esi),%eax + # saved r[11] + # ################## Calculate word 12 + xorl %ebp,%ebp + # mul a[7]*b[5] + mull %edx + addl %eax,%ebx + movl 24(%esi),%eax + adcl %edx,%ecx + movl 24(%edi),%edx + adcl $0,%ebp + # mul a[6]*b[6] + mull %edx + addl %eax,%ebx + movl 20(%esi),%eax + adcl %edx,%ecx + movl 28(%edi),%edx + adcl $0,%ebp + # mul a[5]*b[7] + mull %edx + addl %eax,%ebx + movl 20(%esp),%eax + adcl %edx,%ecx + movl 24(%edi),%edx + adcl $0,%ebp + movl %ebx,48(%eax) + movl 28(%esi),%eax + # saved r[12] + # ################## Calculate word 13 + xorl %ebx,%ebx + # mul a[7]*b[6] + mull %edx + addl %eax,%ecx + movl 24(%esi),%eax + adcl %edx,%ebp + movl 28(%edi),%edx + adcl $0,%ebx + # mul a[6]*b[7] + mull %edx + addl %eax,%ecx + movl 20(%esp),%eax + adcl %edx,%ebp + movl 28(%edi),%edx + adcl $0,%ebx + movl %ecx,52(%eax) + movl 28(%esi),%eax + # saved r[13] + # ################## Calculate word 14 + xorl %ecx,%ecx + # mul a[7]*b[7] + mull %edx + addl %eax,%ebp + movl 20(%esp),%eax + adcl %edx,%ebx + adcl $0,%ecx + movl %ebp,56(%eax) + # saved r[14] + # save r[15] + movl %ebx,60(%eax) + popl %ebx + popl %ebp + popl %edi + popl %esi + ret +.globl _bn_mul_comba4 +.align 4 +_bn_mul_comba4: +L_bn_mul_comba4_begin: + pushl %esi + movl 12(%esp),%esi + pushl %edi + movl 20(%esp),%edi + pushl %ebp + pushl %ebx + xorl %ebx,%ebx + movl (%esi),%eax + xorl %ecx,%ecx + movl (%edi),%edx + # ################## Calculate word 0 + xorl %ebp,%ebp + # mul a[0]*b[0] + mull %edx + addl %eax,%ebx + movl 20(%esp),%eax + adcl %edx,%ecx + movl (%edi),%edx + adcl $0,%ebp + movl %ebx,(%eax) + movl 4(%esi),%eax + # saved r[0] + # ################## Calculate word 1 + xorl %ebx,%ebx + # mul a[1]*b[0] + mull %edx + addl %eax,%ecx + movl (%esi),%eax + adcl %edx,%ebp + movl 4(%edi),%edx + adcl $0,%ebx + # mul a[0]*b[1] + mull %edx + addl %eax,%ecx + movl 20(%esp),%eax + adcl %edx,%ebp + movl (%edi),%edx + adcl $0,%ebx + movl %ecx,4(%eax) + movl 8(%esi),%eax + # saved r[1] + # ################## Calculate word 2 + xorl %ecx,%ecx + # mul a[2]*b[0] + mull %edx + addl %eax,%ebp + movl 4(%esi),%eax + adcl %edx,%ebx + movl 4(%edi),%edx + adcl $0,%ecx + # mul a[1]*b[1] + mull %edx + addl %eax,%ebp + movl (%esi),%eax + adcl %edx,%ebx + movl 8(%edi),%edx + adcl $0,%ecx + # mul a[0]*b[2] + mull %edx + addl %eax,%ebp + movl 20(%esp),%eax + adcl %edx,%ebx + movl (%edi),%edx + adcl $0,%ecx + movl %ebp,8(%eax) + movl 12(%esi),%eax + # saved r[2] + # ################## Calculate word 3 + xorl %ebp,%ebp + # mul a[3]*b[0] + mull %edx + addl %eax,%ebx + movl 8(%esi),%eax + adcl %edx,%ecx + movl 4(%edi),%edx + adcl $0,%ebp + # mul a[2]*b[1] + mull %edx + addl %eax,%ebx + movl 4(%esi),%eax + adcl %edx,%ecx + movl 8(%edi),%edx + adcl $0,%ebp + # mul a[1]*b[2] + mull %edx + addl %eax,%ebx + movl (%esi),%eax + adcl %edx,%ecx + movl 12(%edi),%edx + adcl $0,%ebp + # mul a[0]*b[3] + mull %edx + addl %eax,%ebx + movl 20(%esp),%eax + adcl %edx,%ecx + movl 4(%edi),%edx + adcl $0,%ebp + movl %ebx,12(%eax) + movl 12(%esi),%eax + # saved r[3] + # ################## Calculate word 4 + xorl %ebx,%ebx + # mul a[3]*b[1] + mull %edx + addl %eax,%ecx + movl 8(%esi),%eax + adcl %edx,%ebp + movl 8(%edi),%edx + adcl $0,%ebx + # mul a[2]*b[2] + mull %edx + addl %eax,%ecx + movl 4(%esi),%eax + adcl %edx,%ebp + movl 12(%edi),%edx + adcl $0,%ebx + # mul a[1]*b[3] + mull %edx + addl %eax,%ecx + movl 20(%esp),%eax + adcl %edx,%ebp + movl 8(%edi),%edx + adcl $0,%ebx + movl %ecx,16(%eax) + movl 12(%esi),%eax + # saved r[4] + # ################## Calculate word 5 + xorl %ecx,%ecx + # mul a[3]*b[2] + mull %edx + addl %eax,%ebp + movl 8(%esi),%eax + adcl %edx,%ebx + movl 12(%edi),%edx + adcl $0,%ecx + # mul a[2]*b[3] + mull %edx + addl %eax,%ebp + movl 20(%esp),%eax + adcl %edx,%ebx + movl 12(%edi),%edx + adcl $0,%ecx + movl %ebp,20(%eax) + movl 12(%esi),%eax + # saved r[5] + # ################## Calculate word 6 + xorl %ebp,%ebp + # mul a[3]*b[3] + mull %edx + addl %eax,%ebx + movl 20(%esp),%eax + adcl %edx,%ecx + adcl $0,%ebp + movl %ebx,24(%eax) + # saved r[6] + # save r[7] + movl %ecx,28(%eax) + popl %ebx + popl %ebp + popl %edi + popl %esi + ret +.globl _bn_sqr_comba8 +.align 4 +_bn_sqr_comba8: +L_bn_sqr_comba8_begin: + pushl %esi + pushl %edi + pushl %ebp + pushl %ebx + movl 20(%esp),%edi + movl 24(%esp),%esi + xorl %ebx,%ebx + xorl %ecx,%ecx + movl (%esi),%eax + # ############### Calculate word 0 + xorl %ebp,%ebp + # sqr a[0]*a[0] + mull %eax + addl %eax,%ebx + adcl %edx,%ecx + movl (%esi),%edx + adcl $0,%ebp + movl %ebx,(%edi) + movl 4(%esi),%eax + # saved r[0] + # ############### Calculate word 1 + xorl %ebx,%ebx + # sqr a[1]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 8(%esi),%eax + adcl $0,%ebx + movl %ecx,4(%edi) + movl (%esi),%edx + # saved r[1] + # ############### Calculate word 2 + xorl %ecx,%ecx + # sqr a[2]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 4(%esi),%eax + adcl $0,%ecx + # sqr a[1]*a[1] + mull %eax + addl %eax,%ebp + adcl %edx,%ebx + movl (%esi),%edx + adcl $0,%ecx + movl %ebp,8(%edi) + movl 12(%esi),%eax + # saved r[2] + # ############### Calculate word 3 + xorl %ebp,%ebp + # sqr a[3]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 8(%esi),%eax + adcl $0,%ebp + movl 4(%esi),%edx + # sqr a[2]*a[1] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 16(%esi),%eax + adcl $0,%ebp + movl %ebx,12(%edi) + movl (%esi),%edx + # saved r[3] + # ############### Calculate word 4 + xorl %ebx,%ebx + # sqr a[4]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 12(%esi),%eax + adcl $0,%ebx + movl 4(%esi),%edx + # sqr a[3]*a[1] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 8(%esi),%eax + adcl $0,%ebx + # sqr a[2]*a[2] + mull %eax + addl %eax,%ecx + adcl %edx,%ebp + movl (%esi),%edx + adcl $0,%ebx + movl %ecx,16(%edi) + movl 20(%esi),%eax + # saved r[4] + # ############### Calculate word 5 + xorl %ecx,%ecx + # sqr a[5]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 16(%esi),%eax + adcl $0,%ecx + movl 4(%esi),%edx + # sqr a[4]*a[1] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 12(%esi),%eax + adcl $0,%ecx + movl 8(%esi),%edx + # sqr a[3]*a[2] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 24(%esi),%eax + adcl $0,%ecx + movl %ebp,20(%edi) + movl (%esi),%edx + # saved r[5] + # ############### Calculate word 6 + xorl %ebp,%ebp + # sqr a[6]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 20(%esi),%eax + adcl $0,%ebp + movl 4(%esi),%edx + # sqr a[5]*a[1] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 16(%esi),%eax + adcl $0,%ebp + movl 8(%esi),%edx + # sqr a[4]*a[2] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 12(%esi),%eax + adcl $0,%ebp + # sqr a[3]*a[3] + mull %eax + addl %eax,%ebx + adcl %edx,%ecx + movl (%esi),%edx + adcl $0,%ebp + movl %ebx,24(%edi) + movl 28(%esi),%eax + # saved r[6] + # ############### Calculate word 7 + xorl %ebx,%ebx + # sqr a[7]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 24(%esi),%eax + adcl $0,%ebx + movl 4(%esi),%edx + # sqr a[6]*a[1] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 20(%esi),%eax + adcl $0,%ebx + movl 8(%esi),%edx + # sqr a[5]*a[2] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 16(%esi),%eax + adcl $0,%ebx + movl 12(%esi),%edx + # sqr a[4]*a[3] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 28(%esi),%eax + adcl $0,%ebx + movl %ecx,28(%edi) + movl 4(%esi),%edx + # saved r[7] + # ############### Calculate word 8 + xorl %ecx,%ecx + # sqr a[7]*a[1] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 24(%esi),%eax + adcl $0,%ecx + movl 8(%esi),%edx + # sqr a[6]*a[2] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 20(%esi),%eax + adcl $0,%ecx + movl 12(%esi),%edx + # sqr a[5]*a[3] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 16(%esi),%eax + adcl $0,%ecx + # sqr a[4]*a[4] + mull %eax + addl %eax,%ebp + adcl %edx,%ebx + movl 8(%esi),%edx + adcl $0,%ecx + movl %ebp,32(%edi) + movl 28(%esi),%eax + # saved r[8] + # ############### Calculate word 9 + xorl %ebp,%ebp + # sqr a[7]*a[2] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 24(%esi),%eax + adcl $0,%ebp + movl 12(%esi),%edx + # sqr a[6]*a[3] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 20(%esi),%eax + adcl $0,%ebp + movl 16(%esi),%edx + # sqr a[5]*a[4] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 28(%esi),%eax + adcl $0,%ebp + movl %ebx,36(%edi) + movl 12(%esi),%edx + # saved r[9] + # ############### Calculate word 10 + xorl %ebx,%ebx + # sqr a[7]*a[3] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 24(%esi),%eax + adcl $0,%ebx + movl 16(%esi),%edx + # sqr a[6]*a[4] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 20(%esi),%eax + adcl $0,%ebx + # sqr a[5]*a[5] + mull %eax + addl %eax,%ecx + adcl %edx,%ebp + movl 16(%esi),%edx + adcl $0,%ebx + movl %ecx,40(%edi) + movl 28(%esi),%eax + # saved r[10] + # ############### Calculate word 11 + xorl %ecx,%ecx + # sqr a[7]*a[4] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 24(%esi),%eax + adcl $0,%ecx + movl 20(%esi),%edx + # sqr a[6]*a[5] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 28(%esi),%eax + adcl $0,%ecx + movl %ebp,44(%edi) + movl 20(%esi),%edx + # saved r[11] + # ############### Calculate word 12 + xorl %ebp,%ebp + # sqr a[7]*a[5] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 24(%esi),%eax + adcl $0,%ebp + # sqr a[6]*a[6] + mull %eax + addl %eax,%ebx + adcl %edx,%ecx + movl 24(%esi),%edx + adcl $0,%ebp + movl %ebx,48(%edi) + movl 28(%esi),%eax + # saved r[12] + # ############### Calculate word 13 + xorl %ebx,%ebx + # sqr a[7]*a[6] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 28(%esi),%eax + adcl $0,%ebx + movl %ecx,52(%edi) + # saved r[13] + # ############### Calculate word 14 + xorl %ecx,%ecx + # sqr a[7]*a[7] + mull %eax + addl %eax,%ebp + adcl %edx,%ebx + adcl $0,%ecx + movl %ebp,56(%edi) + # saved r[14] + movl %ebx,60(%edi) + popl %ebx + popl %ebp + popl %edi + popl %esi + ret +.globl _bn_sqr_comba4 +.align 4 +_bn_sqr_comba4: +L_bn_sqr_comba4_begin: + pushl %esi + pushl %edi + pushl %ebp + pushl %ebx + movl 20(%esp),%edi + movl 24(%esp),%esi + xorl %ebx,%ebx + xorl %ecx,%ecx + movl (%esi),%eax + # ############### Calculate word 0 + xorl %ebp,%ebp + # sqr a[0]*a[0] + mull %eax + addl %eax,%ebx + adcl %edx,%ecx + movl (%esi),%edx + adcl $0,%ebp + movl %ebx,(%edi) + movl 4(%esi),%eax + # saved r[0] + # ############### Calculate word 1 + xorl %ebx,%ebx + # sqr a[1]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 8(%esi),%eax + adcl $0,%ebx + movl %ecx,4(%edi) + movl (%esi),%edx + # saved r[1] + # ############### Calculate word 2 + xorl %ecx,%ecx + # sqr a[2]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 4(%esi),%eax + adcl $0,%ecx + # sqr a[1]*a[1] + mull %eax + addl %eax,%ebp + adcl %edx,%ebx + movl (%esi),%edx + adcl $0,%ecx + movl %ebp,8(%edi) + movl 12(%esi),%eax + # saved r[2] + # ############### Calculate word 3 + xorl %ebp,%ebp + # sqr a[3]*a[0] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 8(%esi),%eax + adcl $0,%ebp + movl 4(%esi),%edx + # sqr a[2]*a[1] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebp + addl %eax,%ebx + adcl %edx,%ecx + movl 12(%esi),%eax + adcl $0,%ebp + movl %ebx,12(%edi) + movl 4(%esi),%edx + # saved r[3] + # ############### Calculate word 4 + xorl %ebx,%ebx + # sqr a[3]*a[1] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ebx + addl %eax,%ecx + adcl %edx,%ebp + movl 8(%esi),%eax + adcl $0,%ebx + # sqr a[2]*a[2] + mull %eax + addl %eax,%ecx + adcl %edx,%ebp + movl 8(%esi),%edx + adcl $0,%ebx + movl %ecx,16(%edi) + movl 12(%esi),%eax + # saved r[4] + # ############### Calculate word 5 + xorl %ecx,%ecx + # sqr a[3]*a[2] + mull %edx + addl %eax,%eax + adcl %edx,%edx + adcl $0,%ecx + addl %eax,%ebp + adcl %edx,%ebx + movl 12(%esi),%eax + adcl $0,%ecx + movl %ebp,20(%edi) + # saved r[5] + # ############### Calculate word 6 + xorl %ebp,%ebp + # sqr a[3]*a[3] + mull %eax + addl %eax,%ebx + adcl %edx,%ecx + adcl $0,%ebp + movl %ebx,24(%edi) + # saved r[6] + movl %ecx,28(%edi) + popl %ebx + popl %ebp + popl %edi + popl %esi + ret diff --git a/chromium/third_party/openssl/openssl/crypto/bn/asm/x86-gf2m-mac.S b/chromium/third_party/openssl/openssl/crypto/bn/asm/x86-gf2m-mac.S new file mode 100644 index 00000000000..31718e0c322 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/bn/asm/x86-gf2m-mac.S @@ -0,0 +1,332 @@ +.file "crypto/bn/asm/x86-gf2m.s" +.text +.align 4 +__mul_1x1_mmx: + subl $36,%esp + movl %eax,%ecx + leal (%eax,%eax,1),%edx + andl $1073741823,%ecx + leal (%edx,%edx,1),%ebp + movl $0,(%esp) + andl $2147483647,%edx + movd %eax,%mm2 + movd %ebx,%mm3 + movl %ecx,4(%esp) + xorl %edx,%ecx + pxor %mm5,%mm5 + pxor %mm4,%mm4 + movl %edx,8(%esp) + xorl %ebp,%edx + movl %ecx,12(%esp) + pcmpgtd %mm2,%mm5 + paddd %mm2,%mm2 + xorl %edx,%ecx + movl %ebp,16(%esp) + xorl %edx,%ebp + pand %mm3,%mm5 + pcmpgtd %mm2,%mm4 + movl %ecx,20(%esp) + xorl %ecx,%ebp + psllq $31,%mm5 + pand %mm3,%mm4 + movl %edx,24(%esp) + movl $7,%esi + movl %ebp,28(%esp) + movl %esi,%ebp + andl %ebx,%esi + shrl $3,%ebx + movl %ebp,%edi + psllq $30,%mm4 + andl %ebx,%edi + shrl $3,%ebx + movd (%esp,%esi,4),%mm0 + movl %ebp,%esi + andl %ebx,%esi + shrl $3,%ebx + movd (%esp,%edi,4),%mm2 + movl %ebp,%edi + psllq $3,%mm2 + andl %ebx,%edi + shrl $3,%ebx + pxor %mm2,%mm0 + movd (%esp,%esi,4),%mm1 + movl %ebp,%esi + psllq $6,%mm1 + andl %ebx,%esi + shrl $3,%ebx + pxor %mm1,%mm0 + movd (%esp,%edi,4),%mm2 + movl %ebp,%edi + psllq $9,%mm2 + andl %ebx,%edi + shrl $3,%ebx + pxor %mm2,%mm0 + movd (%esp,%esi,4),%mm1 + movl %ebp,%esi + psllq $12,%mm1 + andl %ebx,%esi + shrl $3,%ebx + pxor %mm1,%mm0 + movd (%esp,%edi,4),%mm2 + movl %ebp,%edi + psllq $15,%mm2 + andl %ebx,%edi + shrl $3,%ebx + pxor %mm2,%mm0 + movd (%esp,%esi,4),%mm1 + movl %ebp,%esi + psllq $18,%mm1 + andl %ebx,%esi + shrl $3,%ebx + pxor %mm1,%mm0 + movd (%esp,%edi,4),%mm2 + movl %ebp,%edi + psllq $21,%mm2 + andl %ebx,%edi + shrl $3,%ebx + pxor %mm2,%mm0 + movd (%esp,%esi,4),%mm1 + movl %ebp,%esi + psllq $24,%mm1 + andl %ebx,%esi + shrl $3,%ebx + pxor %mm1,%mm0 + movd (%esp,%edi,4),%mm2 + pxor %mm4,%mm0 + psllq $27,%mm2 + pxor %mm2,%mm0 + movd (%esp,%esi,4),%mm1 + pxor %mm5,%mm0 + psllq $30,%mm1 + addl $36,%esp + pxor %mm1,%mm0 + ret +.align 4 +__mul_1x1_ialu: + subl $36,%esp + movl %eax,%ecx + leal (%eax,%eax,1),%edx + leal (,%eax,4),%ebp + andl $1073741823,%ecx + leal (%eax,%eax,1),%edi + sarl $31,%eax + movl $0,(%esp) + andl $2147483647,%edx + movl %ecx,4(%esp) + xorl %edx,%ecx + movl %edx,8(%esp) + xorl %ebp,%edx + movl %ecx,12(%esp) + xorl %edx,%ecx + movl %ebp,16(%esp) + xorl %edx,%ebp + movl %ecx,20(%esp) + xorl %ecx,%ebp + sarl $31,%edi + andl %ebx,%eax + movl %edx,24(%esp) + andl %ebx,%edi + movl %ebp,28(%esp) + movl %eax,%edx + shll $31,%eax + movl %edi,%ecx + shrl $1,%edx + movl $7,%esi + shll $30,%edi + andl %ebx,%esi + shrl $2,%ecx + xorl %edi,%eax + shrl $3,%ebx + movl $7,%edi + andl %ebx,%edi + shrl $3,%ebx + xorl %ecx,%edx + xorl (%esp,%esi,4),%eax + movl $7,%esi + andl %ebx,%esi + shrl $3,%ebx + movl (%esp,%edi,4),%ebp + movl $7,%edi + movl %ebp,%ecx + shll $3,%ebp + andl %ebx,%edi + shrl $29,%ecx + xorl %ebp,%eax + shrl $3,%ebx + xorl %ecx,%edx + movl (%esp,%esi,4),%ecx + movl $7,%esi + movl %ecx,%ebp + shll $6,%ecx + andl %ebx,%esi + shrl $26,%ebp + xorl %ecx,%eax + shrl $3,%ebx + xorl %ebp,%edx + movl (%esp,%edi,4),%ebp + movl $7,%edi + movl %ebp,%ecx + shll $9,%ebp + andl %ebx,%edi + shrl $23,%ecx + xorl %ebp,%eax + shrl $3,%ebx + xorl %ecx,%edx + movl (%esp,%esi,4),%ecx + movl $7,%esi + movl %ecx,%ebp + shll $12,%ecx + andl %ebx,%esi + shrl $20,%ebp + xorl %ecx,%eax + shrl $3,%ebx + xorl %ebp,%edx + movl (%esp,%edi,4),%ebp + movl $7,%edi + movl %ebp,%ecx + shll $15,%ebp + andl %ebx,%edi + shrl $17,%ecx + xorl %ebp,%eax + shrl $3,%ebx + xorl %ecx,%edx + movl (%esp,%esi,4),%ecx + movl $7,%esi + movl %ecx,%ebp + shll $18,%ecx + andl %ebx,%esi + shrl $14,%ebp + xorl %ecx,%eax + shrl $3,%ebx + xorl %ebp,%edx + movl (%esp,%edi,4),%ebp + movl $7,%edi + movl %ebp,%ecx + shll $21,%ebp + andl %ebx,%edi + shrl $11,%ecx + xorl %ebp,%eax + shrl $3,%ebx + xorl %ecx,%edx + movl (%esp,%esi,4),%ecx + movl $7,%esi + movl %ecx,%ebp + shll $24,%ecx + andl %ebx,%esi + shrl $8,%ebp + xorl %ecx,%eax + shrl $3,%ebx + xorl %ebp,%edx + movl (%esp,%edi,4),%ebp + movl %ebp,%ecx + shll $27,%ebp + movl (%esp,%esi,4),%edi + shrl $5,%ecx + movl %edi,%esi + xorl %ebp,%eax + shll $30,%edi + xorl %ecx,%edx + shrl $2,%esi + xorl %edi,%eax + xorl %esi,%edx + addl $36,%esp + ret +.globl _bn_GF2m_mul_2x2 +.align 4 +_bn_GF2m_mul_2x2: +L_bn_GF2m_mul_2x2_begin: + call L000PIC_me_up +L000PIC_me_up: + popl %edx + movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L000PIC_me_up(%edx),%edx + movl (%edx),%eax + movl 4(%edx),%edx + testl $8388608,%eax + jz L001ialu + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 24(%esp),%eax + movl 32(%esp),%ebx + call __mul_1x1_mmx + movq %mm0,%mm7 + movl 28(%esp),%eax + movl 36(%esp),%ebx + call __mul_1x1_mmx + movq %mm0,%mm6 + movl 24(%esp),%eax + movl 32(%esp),%ebx + xorl 28(%esp),%eax + xorl 36(%esp),%ebx + call __mul_1x1_mmx + pxor %mm7,%mm0 + movl 20(%esp),%eax + pxor %mm6,%mm0 + movq %mm0,%mm2 + psllq $32,%mm0 + popl %edi + psrlq $32,%mm2 + popl %esi + pxor %mm6,%mm0 + popl %ebx + pxor %mm7,%mm2 + movq %mm0,(%eax) + popl %ebp + movq %mm2,8(%eax) + emms + ret +.align 4,0x90 +L001ialu: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + subl $20,%esp + movl 44(%esp),%eax + movl 52(%esp),%ebx + call __mul_1x1_ialu + movl %eax,8(%esp) + movl %edx,12(%esp) + movl 48(%esp),%eax + movl 56(%esp),%ebx + call __mul_1x1_ialu + movl %eax,(%esp) + movl %edx,4(%esp) + movl 44(%esp),%eax + movl 52(%esp),%ebx + xorl 48(%esp),%eax + xorl 56(%esp),%ebx + call __mul_1x1_ialu + movl 40(%esp),%ebp + movl (%esp),%ebx + movl 4(%esp),%ecx + movl 8(%esp),%edi + movl 12(%esp),%esi + xorl %edx,%eax + xorl %ecx,%edx + xorl %ebx,%eax + movl %ebx,(%ebp) + xorl %edi,%edx + movl %esi,12(%ebp) + xorl %esi,%eax + addl $20,%esp + xorl %esi,%edx + popl %edi + xorl %edx,%eax + popl %esi + movl %edx,8(%ebp) + popl %ebx + movl %eax,4(%ebp) + popl %ebp + ret +.byte 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105 +.byte 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 +.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 +.byte 62,0 +.section __IMPORT,__pointers,non_lazy_symbol_pointers +L_OPENSSL_ia32cap_P$non_lazy_ptr: +.indirect_symbol _OPENSSL_ia32cap_P +.long 0 +.comm _OPENSSL_ia32cap_P,8,2 diff --git a/chromium/third_party/openssl/openssl/crypto/bn/asm/x86-mont-mac.S b/chromium/third_party/openssl/openssl/crypto/bn/asm/x86-mont-mac.S new file mode 100644 index 00000000000..aab259a6a0c --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/bn/asm/x86-mont-mac.S @@ -0,0 +1,336 @@ +.file "crypto/bn/asm/x86-mont.s" +.text +.globl _bn_mul_mont +.align 4 +_bn_mul_mont: +L_bn_mul_mont_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + xorl %eax,%eax + movl 40(%esp),%edi + cmpl $4,%edi + jl L000just_leave + leal 20(%esp),%esi + leal 24(%esp),%edx + movl %esp,%ebp + addl $2,%edi + negl %edi + leal -32(%esp,%edi,4),%esp + negl %edi + movl %esp,%eax + subl %edx,%eax + andl $2047,%eax + subl %eax,%esp + xorl %esp,%edx + andl $2048,%edx + xorl $2048,%edx + subl %edx,%esp + andl $-64,%esp + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl 16(%esi),%esi + movl (%esi),%esi + movl %eax,4(%esp) + movl %ebx,8(%esp) + movl %ecx,12(%esp) + movl %edx,16(%esp) + movl %esi,20(%esp) + leal -3(%edi),%ebx + movl %ebp,24(%esp) + movl 8(%esp),%esi + leal 1(%ebx),%ebp + movl 12(%esp),%edi + xorl %ecx,%ecx + movl %esi,%edx + andl $1,%ebp + subl %edi,%edx + leal 4(%edi,%ebx,4),%eax + orl %edx,%ebp + movl (%edi),%edi + jz L001bn_sqr_mont + movl %eax,28(%esp) + movl (%esi),%eax + xorl %edx,%edx +.align 4,0x90 +L002mull: + movl %edx,%ebp + mull %edi + addl %eax,%ebp + leal 1(%ecx),%ecx + adcl $0,%edx + movl (%esi,%ecx,4),%eax + cmpl %ebx,%ecx + movl %ebp,28(%esp,%ecx,4) + jl L002mull + movl %edx,%ebp + mull %edi + movl 20(%esp),%edi + addl %ebp,%eax + movl 16(%esp),%esi + adcl $0,%edx + imull 32(%esp),%edi + movl %eax,32(%esp,%ebx,4) + xorl %ecx,%ecx + movl %edx,36(%esp,%ebx,4) + movl %ecx,40(%esp,%ebx,4) + movl (%esi),%eax + mull %edi + addl 32(%esp),%eax + movl 4(%esi),%eax + adcl $0,%edx + incl %ecx + jmp L0032ndmadd +.align 4,0x90 +L0041stmadd: + movl %edx,%ebp + mull %edi + addl 32(%esp,%ecx,4),%ebp + leal 1(%ecx),%ecx + adcl $0,%edx + addl %eax,%ebp + movl (%esi,%ecx,4),%eax + adcl $0,%edx + cmpl %ebx,%ecx + movl %ebp,28(%esp,%ecx,4) + jl L0041stmadd + movl %edx,%ebp + mull %edi + addl 32(%esp,%ebx,4),%eax + movl 20(%esp),%edi + adcl $0,%edx + movl 16(%esp),%esi + addl %eax,%ebp + adcl $0,%edx + imull 32(%esp),%edi + xorl %ecx,%ecx + addl 36(%esp,%ebx,4),%edx + movl %ebp,32(%esp,%ebx,4) + adcl $0,%ecx + movl (%esi),%eax + movl %edx,36(%esp,%ebx,4) + movl %ecx,40(%esp,%ebx,4) + mull %edi + addl 32(%esp),%eax + movl 4(%esi),%eax + adcl $0,%edx + movl $1,%ecx +.align 4,0x90 +L0032ndmadd: + movl %edx,%ebp + mull %edi + addl 32(%esp,%ecx,4),%ebp + leal 1(%ecx),%ecx + adcl $0,%edx + addl %eax,%ebp + movl (%esi,%ecx,4),%eax + adcl $0,%edx + cmpl %ebx,%ecx + movl %ebp,24(%esp,%ecx,4) + jl L0032ndmadd + movl %edx,%ebp + mull %edi + addl 32(%esp,%ebx,4),%ebp + adcl $0,%edx + addl %eax,%ebp + adcl $0,%edx + movl %ebp,28(%esp,%ebx,4) + xorl %eax,%eax + movl 12(%esp),%ecx + addl 36(%esp,%ebx,4),%edx + adcl 40(%esp,%ebx,4),%eax + leal 4(%ecx),%ecx + movl %edx,32(%esp,%ebx,4) + cmpl 28(%esp),%ecx + movl %eax,36(%esp,%ebx,4) + je L005common_tail + movl (%ecx),%edi + movl 8(%esp),%esi + movl %ecx,12(%esp) + xorl %ecx,%ecx + xorl %edx,%edx + movl (%esi),%eax + jmp L0041stmadd +.align 4,0x90 +L001bn_sqr_mont: + movl %ebx,(%esp) + movl %ecx,12(%esp) + movl %edi,%eax + mull %edi + movl %eax,32(%esp) + movl %edx,%ebx + shrl $1,%edx + andl $1,%ebx + incl %ecx +.align 4,0x90 +L006sqr: + movl (%esi,%ecx,4),%eax + movl %edx,%ebp + mull %edi + addl %ebp,%eax + leal 1(%ecx),%ecx + adcl $0,%edx + leal (%ebx,%eax,2),%ebp + shrl $31,%eax + cmpl (%esp),%ecx + movl %eax,%ebx + movl %ebp,28(%esp,%ecx,4) + jl L006sqr + movl (%esi,%ecx,4),%eax + movl %edx,%ebp + mull %edi + addl %ebp,%eax + movl 20(%esp),%edi + adcl $0,%edx + movl 16(%esp),%esi + leal (%ebx,%eax,2),%ebp + imull 32(%esp),%edi + shrl $31,%eax + movl %ebp,32(%esp,%ecx,4) + leal (%eax,%edx,2),%ebp + movl (%esi),%eax + shrl $31,%edx + movl %ebp,36(%esp,%ecx,4) + movl %edx,40(%esp,%ecx,4) + mull %edi + addl 32(%esp),%eax + movl %ecx,%ebx + adcl $0,%edx + movl 4(%esi),%eax + movl $1,%ecx +.align 4,0x90 +L0073rdmadd: + movl %edx,%ebp + mull %edi + addl 32(%esp,%ecx,4),%ebp + adcl $0,%edx + addl %eax,%ebp + movl 4(%esi,%ecx,4),%eax + adcl $0,%edx + movl %ebp,28(%esp,%ecx,4) + movl %edx,%ebp + mull %edi + addl 36(%esp,%ecx,4),%ebp + leal 2(%ecx),%ecx + adcl $0,%edx + addl %eax,%ebp + movl (%esi,%ecx,4),%eax + adcl $0,%edx + cmpl %ebx,%ecx + movl %ebp,24(%esp,%ecx,4) + jl L0073rdmadd + movl %edx,%ebp + mull %edi + addl 32(%esp,%ebx,4),%ebp + adcl $0,%edx + addl %eax,%ebp + adcl $0,%edx + movl %ebp,28(%esp,%ebx,4) + movl 12(%esp),%ecx + xorl %eax,%eax + movl 8(%esp),%esi + addl 36(%esp,%ebx,4),%edx + adcl 40(%esp,%ebx,4),%eax + movl %edx,32(%esp,%ebx,4) + cmpl %ebx,%ecx + movl %eax,36(%esp,%ebx,4) + je L005common_tail + movl 4(%esi,%ecx,4),%edi + leal 1(%ecx),%ecx + movl %edi,%eax + movl %ecx,12(%esp) + mull %edi + addl 32(%esp,%ecx,4),%eax + adcl $0,%edx + movl %eax,32(%esp,%ecx,4) + xorl %ebp,%ebp + cmpl %ebx,%ecx + leal 1(%ecx),%ecx + je L008sqrlast + movl %edx,%ebx + shrl $1,%edx + andl $1,%ebx +.align 4,0x90 +L009sqradd: + movl (%esi,%ecx,4),%eax + movl %edx,%ebp + mull %edi + addl %ebp,%eax + leal (%eax,%eax,1),%ebp + adcl $0,%edx + shrl $31,%eax + addl 32(%esp,%ecx,4),%ebp + leal 1(%ecx),%ecx + adcl $0,%eax + addl %ebx,%ebp + adcl $0,%eax + cmpl (%esp),%ecx + movl %ebp,28(%esp,%ecx,4) + movl %eax,%ebx + jle L009sqradd + movl %edx,%ebp + addl %edx,%edx + shrl $31,%ebp + addl %ebx,%edx + adcl $0,%ebp +L008sqrlast: + movl 20(%esp),%edi + movl 16(%esp),%esi + imull 32(%esp),%edi + addl 32(%esp,%ecx,4),%edx + movl (%esi),%eax + adcl $0,%ebp + movl %edx,32(%esp,%ecx,4) + movl %ebp,36(%esp,%ecx,4) + mull %edi + addl 32(%esp),%eax + leal -1(%ecx),%ebx + adcl $0,%edx + movl $1,%ecx + movl 4(%esi),%eax + jmp L0073rdmadd +.align 4,0x90 +L005common_tail: + movl 16(%esp),%ebp + movl 4(%esp),%edi + leal 32(%esp),%esi + movl (%esi),%eax + movl %ebx,%ecx + xorl %edx,%edx +.align 4,0x90 +L010sub: + sbbl (%ebp,%edx,4),%eax + movl %eax,(%edi,%edx,4) + decl %ecx + movl 4(%esi,%edx,4),%eax + leal 1(%edx),%edx + jge L010sub + sbbl $0,%eax + andl %eax,%esi + notl %eax + movl %edi,%ebp + andl %eax,%ebp + orl %ebp,%esi +.align 4,0x90 +L011copy: + movl (%esi,%ebx,4),%eax + movl %eax,(%edi,%ebx,4) + movl %ecx,32(%esp,%ebx,4) + decl %ebx + jge L011copy + movl 24(%esp),%esp + movl $1,%eax +L000just_leave: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 +.byte 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 +.byte 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 +.byte 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 +.byte 111,114,103,62,0 diff --git a/chromium/third_party/openssl/openssl/crypto/cryptlib.c b/chromium/third_party/openssl/openssl/crypto/cryptlib.c index 6752ca44fcc..cf13fd74702 100644 --- a/chromium/third_party/openssl/openssl/crypto/cryptlib.c +++ b/chromium/third_party/openssl/openssl/crypto/cryptlib.c @@ -669,7 +669,7 @@ void CRYPTO_set_NEON_capable(int on) global_arm_neon_enabled = on != 0; } -int CRYPTO_is_NEON_capable() +int CRYPTO_is_NEON_capable(void) { return global_arm_neon_enabled; } diff --git a/chromium/third_party/openssl/openssl/crypto/crypto.h b/chromium/third_party/openssl/openssl/crypto/crypto.h index e1ff7b7a7d1..35bc9f8c0d2 100644 --- a/chromium/third_party/openssl/openssl/crypto/crypto.h +++ b/chromium/third_party/openssl/openssl/crypto/crypto.h @@ -420,7 +420,7 @@ void CRYPTO_set_NEON_capable(int on); /* CRYPTO_is_NEON_capable returns the last value given to * CRYPTO_set_NEON_capable, or else zero if it has never been called. */ -int CRYPTO_is_NEON_capable(); +int CRYPTO_is_NEON_capable(void); int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ void CRYPTO_lock(int mode, int type,const char *file,int line); diff --git a/chromium/third_party/openssl/openssl/crypto/des/asm/crypt586-mac.S b/chromium/third_party/openssl/openssl/crypto/des/asm/crypt586-mac.S new file mode 100644 index 00000000000..9156a65a1e6 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/des/asm/crypt586-mac.S @@ -0,0 +1,880 @@ +.file "crypt586.s" +.text +.globl _fcrypt_body +.align 4 +_fcrypt_body: +L_fcrypt_body_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + + # Load the 2 words + xorl %edi,%edi + xorl %esi,%esi + call L000PIC_me_up +L000PIC_me_up: + popl %edx + movl L_DES_SPtrans$non_lazy_ptr-L000PIC_me_up(%edx),%edx + pushl %edx + movl 28(%esp),%ebp + pushl $25 +L001start: + + # Round 0 + movl 36(%esp),%eax + movl %esi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %esi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl (%ebp),%ebx + xorl %ebx,%eax + movl 4(%ebp),%ecx + xorl %esi,%eax + xorl %esi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%edi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%edi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%edi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%edi + movl 32(%esp),%ebp + + # Round 1 + movl 36(%esp),%eax + movl %edi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %edi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 8(%ebp),%ebx + xorl %ebx,%eax + movl 12(%ebp),%ecx + xorl %edi,%eax + xorl %edi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%esi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%esi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%esi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%esi + movl 32(%esp),%ebp + + # Round 2 + movl 36(%esp),%eax + movl %esi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %esi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 16(%ebp),%ebx + xorl %ebx,%eax + movl 20(%ebp),%ecx + xorl %esi,%eax + xorl %esi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%edi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%edi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%edi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%edi + movl 32(%esp),%ebp + + # Round 3 + movl 36(%esp),%eax + movl %edi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %edi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 24(%ebp),%ebx + xorl %ebx,%eax + movl 28(%ebp),%ecx + xorl %edi,%eax + xorl %edi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%esi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%esi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%esi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%esi + movl 32(%esp),%ebp + + # Round 4 + movl 36(%esp),%eax + movl %esi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %esi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 32(%ebp),%ebx + xorl %ebx,%eax + movl 36(%ebp),%ecx + xorl %esi,%eax + xorl %esi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%edi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%edi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%edi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%edi + movl 32(%esp),%ebp + + # Round 5 + movl 36(%esp),%eax + movl %edi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %edi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 40(%ebp),%ebx + xorl %ebx,%eax + movl 44(%ebp),%ecx + xorl %edi,%eax + xorl %edi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%esi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%esi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%esi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%esi + movl 32(%esp),%ebp + + # Round 6 + movl 36(%esp),%eax + movl %esi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %esi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 48(%ebp),%ebx + xorl %ebx,%eax + movl 52(%ebp),%ecx + xorl %esi,%eax + xorl %esi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%edi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%edi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%edi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%edi + movl 32(%esp),%ebp + + # Round 7 + movl 36(%esp),%eax + movl %edi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %edi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 56(%ebp),%ebx + xorl %ebx,%eax + movl 60(%ebp),%ecx + xorl %edi,%eax + xorl %edi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%esi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%esi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%esi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%esi + movl 32(%esp),%ebp + + # Round 8 + movl 36(%esp),%eax + movl %esi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %esi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 64(%ebp),%ebx + xorl %ebx,%eax + movl 68(%ebp),%ecx + xorl %esi,%eax + xorl %esi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%edi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%edi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%edi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%edi + movl 32(%esp),%ebp + + # Round 9 + movl 36(%esp),%eax + movl %edi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %edi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 72(%ebp),%ebx + xorl %ebx,%eax + movl 76(%ebp),%ecx + xorl %edi,%eax + xorl %edi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%esi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%esi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%esi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%esi + movl 32(%esp),%ebp + + # Round 10 + movl 36(%esp),%eax + movl %esi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %esi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 80(%ebp),%ebx + xorl %ebx,%eax + movl 84(%ebp),%ecx + xorl %esi,%eax + xorl %esi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%edi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%edi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%edi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%edi + movl 32(%esp),%ebp + + # Round 11 + movl 36(%esp),%eax + movl %edi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %edi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 88(%ebp),%ebx + xorl %ebx,%eax + movl 92(%ebp),%ecx + xorl %edi,%eax + xorl %edi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%esi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%esi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%esi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%esi + movl 32(%esp),%ebp + + # Round 12 + movl 36(%esp),%eax + movl %esi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %esi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 96(%ebp),%ebx + xorl %ebx,%eax + movl 100(%ebp),%ecx + xorl %esi,%eax + xorl %esi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%edi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%edi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%edi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%edi + movl 32(%esp),%ebp + + # Round 13 + movl 36(%esp),%eax + movl %edi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %edi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 104(%ebp),%ebx + xorl %ebx,%eax + movl 108(%ebp),%ecx + xorl %edi,%eax + xorl %edi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%esi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%esi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%esi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%esi + movl 32(%esp),%ebp + + # Round 14 + movl 36(%esp),%eax + movl %esi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %esi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 112(%ebp),%ebx + xorl %ebx,%eax + movl 116(%ebp),%ecx + xorl %esi,%eax + xorl %esi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%edi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%edi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%edi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%edi + movl 32(%esp),%ebp + + # Round 15 + movl 36(%esp),%eax + movl %edi,%edx + shrl $16,%edx + movl 40(%esp),%ecx + xorl %edi,%edx + andl %edx,%eax + andl %ecx,%edx + movl %eax,%ebx + shll $16,%ebx + movl %edx,%ecx + shll $16,%ecx + xorl %ebx,%eax + xorl %ecx,%edx + movl 120(%ebp),%ebx + xorl %ebx,%eax + movl 124(%ebp),%ecx + xorl %edi,%eax + xorl %edi,%edx + xorl %ecx,%edx + andl $0xfcfcfcfc,%eax + xorl %ebx,%ebx + andl $0xcfcfcfcf,%edx + xorl %ecx,%ecx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + movl 4(%esp),%ebp + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + movl 0x600(%ebp,%ebx,1),%ebx + xorl %ebx,%esi + movl 0x700(%ebp,%ecx,1),%ebx + xorl %ebx,%esi + movl 0x400(%ebp,%eax,1),%ebx + xorl %ebx,%esi + movl 0x500(%ebp,%edx,1),%ebx + xorl %ebx,%esi + movl 32(%esp),%ebp + movl (%esp),%ebx + movl %edi,%eax + decl %ebx + movl %esi,%edi + movl %eax,%esi + movl %ebx,(%esp) + jnz L001start + + # FP + movl 28(%esp),%edx + rorl $1,%edi + movl %esi,%eax + xorl %edi,%esi + andl $0xaaaaaaaa,%esi + xorl %esi,%eax + xorl %esi,%edi + + roll $23,%eax + movl %eax,%esi + xorl %edi,%eax + andl $0x03fc03fc,%eax + xorl %eax,%esi + xorl %eax,%edi + + roll $10,%esi + movl %esi,%eax + xorl %edi,%esi + andl $0x33333333,%esi + xorl %esi,%eax + xorl %esi,%edi + + roll $18,%edi + movl %edi,%esi + xorl %eax,%edi + andl $0xfff0000f,%edi + xorl %edi,%esi + xorl %edi,%eax + + roll $12,%esi + movl %esi,%edi + xorl %eax,%esi + andl $0xf0f0f0f0,%esi + xorl %esi,%edi + xorl %esi,%eax + + rorl $4,%eax + movl %eax,(%edx) + movl %edi,4(%edx) + addl $8,%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.section __IMPORT,__pointers,non_lazy_symbol_pointers +L_DES_SPtrans$non_lazy_ptr: +.indirect_symbol _DES_SPtrans +.long 0 diff --git a/chromium/third_party/openssl/openssl/crypto/des/asm/des-586-mac.S b/chromium/third_party/openssl/openssl/crypto/des/asm/des-586-mac.S new file mode 100644 index 00000000000..49694169c11 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/des/asm/des-586-mac.S @@ -0,0 +1,1821 @@ +.file "des-586.s" +.text +.globl _DES_SPtrans +.align 4 +__x86_DES_encrypt: + pushl %ecx + # Round 0 + movl (%ecx),%eax + xorl %ebx,%ebx + movl 4(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 1 + movl 8(%ecx),%eax + xorl %ebx,%ebx + movl 12(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 2 + movl 16(%ecx),%eax + xorl %ebx,%ebx + movl 20(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 3 + movl 24(%ecx),%eax + xorl %ebx,%ebx + movl 28(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 4 + movl 32(%ecx),%eax + xorl %ebx,%ebx + movl 36(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 5 + movl 40(%ecx),%eax + xorl %ebx,%ebx + movl 44(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 6 + movl 48(%ecx),%eax + xorl %ebx,%ebx + movl 52(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 7 + movl 56(%ecx),%eax + xorl %ebx,%ebx + movl 60(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 8 + movl 64(%ecx),%eax + xorl %ebx,%ebx + movl 68(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 9 + movl 72(%ecx),%eax + xorl %ebx,%ebx + movl 76(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 10 + movl 80(%ecx),%eax + xorl %ebx,%ebx + movl 84(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 11 + movl 88(%ecx),%eax + xorl %ebx,%ebx + movl 92(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 12 + movl 96(%ecx),%eax + xorl %ebx,%ebx + movl 100(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 13 + movl 104(%ecx),%eax + xorl %ebx,%ebx + movl 108(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 14 + movl 112(%ecx),%eax + xorl %ebx,%ebx + movl 116(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 15 + movl 120(%ecx),%eax + xorl %ebx,%ebx + movl 124(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + addl $4,%esp + ret +.align 4 +__x86_DES_decrypt: + pushl %ecx + # Round 15 + movl 120(%ecx),%eax + xorl %ebx,%ebx + movl 124(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 14 + movl 112(%ecx),%eax + xorl %ebx,%ebx + movl 116(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 13 + movl 104(%ecx),%eax + xorl %ebx,%ebx + movl 108(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 12 + movl 96(%ecx),%eax + xorl %ebx,%ebx + movl 100(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 11 + movl 88(%ecx),%eax + xorl %ebx,%ebx + movl 92(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 10 + movl 80(%ecx),%eax + xorl %ebx,%ebx + movl 84(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 9 + movl 72(%ecx),%eax + xorl %ebx,%ebx + movl 76(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 8 + movl 64(%ecx),%eax + xorl %ebx,%ebx + movl 68(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 7 + movl 56(%ecx),%eax + xorl %ebx,%ebx + movl 60(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 6 + movl 48(%ecx),%eax + xorl %ebx,%ebx + movl 52(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 5 + movl 40(%ecx),%eax + xorl %ebx,%ebx + movl 44(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 4 + movl 32(%ecx),%eax + xorl %ebx,%ebx + movl 36(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 3 + movl 24(%ecx),%eax + xorl %ebx,%ebx + movl 28(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 2 + movl 16(%ecx),%eax + xorl %ebx,%ebx + movl 20(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + # Round 1 + movl 8(%ecx),%eax + xorl %ebx,%ebx + movl 12(%ecx),%edx + xorl %esi,%eax + xorl %ecx,%ecx + xorl %esi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%edi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%edi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%edi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%edi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%edi + xorl 0x700(%ebp,%ecx,1),%edi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%edi + xorl 0x500(%ebp,%edx,1),%edi + # Round 0 + movl (%ecx),%eax + xorl %ebx,%ebx + movl 4(%ecx),%edx + xorl %edi,%eax + xorl %ecx,%ecx + xorl %edi,%edx + andl $0xfcfcfcfc,%eax + andl $0xcfcfcfcf,%edx + movb %al,%bl + movb %ah,%cl + rorl $4,%edx + xorl (%ebp,%ebx,1),%esi + movb %dl,%bl + xorl 0x200(%ebp,%ecx,1),%esi + movb %dh,%cl + shrl $16,%eax + xorl 0x100(%ebp,%ebx,1),%esi + movb %ah,%bl + shrl $16,%edx + xorl 0x300(%ebp,%ecx,1),%esi + movb %dh,%cl + andl $0xff,%eax + andl $0xff,%edx + xorl 0x600(%ebp,%ebx,1),%esi + xorl 0x700(%ebp,%ecx,1),%esi + movl (%esp),%ecx + xorl 0x400(%ebp,%eax,1),%esi + xorl 0x500(%ebp,%edx,1),%esi + addl $4,%esp + ret +.globl _DES_encrypt1 +.align 4 +_DES_encrypt1: +L_DES_encrypt1_begin: + pushl %esi + pushl %edi + + # Load the 2 words + movl 12(%esp),%esi + xorl %ecx,%ecx + pushl %ebx + pushl %ebp + movl (%esi),%eax + movl 28(%esp),%ebx + movl 4(%esi),%edi + + # IP + roll $4,%eax + movl %eax,%esi + xorl %edi,%eax + andl $0xf0f0f0f0,%eax + xorl %eax,%esi + xorl %eax,%edi + + roll $20,%edi + movl %edi,%eax + xorl %esi,%edi + andl $0xfff0000f,%edi + xorl %edi,%eax + xorl %edi,%esi + + roll $14,%eax + movl %eax,%edi + xorl %esi,%eax + andl $0x33333333,%eax + xorl %eax,%edi + xorl %eax,%esi + + roll $22,%esi + movl %esi,%eax + xorl %edi,%esi + andl $0x03fc03fc,%esi + xorl %esi,%eax + xorl %esi,%edi + + roll $9,%eax + movl %eax,%esi + xorl %edi,%eax + andl $0xaaaaaaaa,%eax + xorl %eax,%esi + xorl %eax,%edi + + roll $1,%edi + call L000pic_point +L000pic_point: + popl %ebp + leal _DES_SPtrans-L000pic_point(%ebp),%ebp + movl 24(%esp),%ecx + cmpl $0,%ebx + je L001decrypt + call __x86_DES_encrypt + jmp L002done +L001decrypt: + call __x86_DES_decrypt +L002done: + + # FP + movl 20(%esp),%edx + rorl $1,%esi + movl %edi,%eax + xorl %esi,%edi + andl $0xaaaaaaaa,%edi + xorl %edi,%eax + xorl %edi,%esi + + roll $23,%eax + movl %eax,%edi + xorl %esi,%eax + andl $0x03fc03fc,%eax + xorl %eax,%edi + xorl %eax,%esi + + roll $10,%edi + movl %edi,%eax + xorl %esi,%edi + andl $0x33333333,%edi + xorl %edi,%eax + xorl %edi,%esi + + roll $18,%esi + movl %esi,%edi + xorl %eax,%esi + andl $0xfff0000f,%esi + xorl %esi,%edi + xorl %esi,%eax + + roll $12,%edi + movl %edi,%esi + xorl %eax,%edi + andl $0xf0f0f0f0,%edi + xorl %edi,%esi + xorl %edi,%eax + + rorl $4,%eax + movl %eax,(%edx) + movl %esi,4(%edx) + popl %ebp + popl %ebx + popl %edi + popl %esi + ret +.globl _DES_encrypt2 +.align 4 +_DES_encrypt2: +L_DES_encrypt2_begin: + pushl %esi + pushl %edi + + # Load the 2 words + movl 12(%esp),%eax + xorl %ecx,%ecx + pushl %ebx + pushl %ebp + movl (%eax),%esi + movl 28(%esp),%ebx + roll $3,%esi + movl 4(%eax),%edi + roll $3,%edi + call L003pic_point +L003pic_point: + popl %ebp + leal _DES_SPtrans-L003pic_point(%ebp),%ebp + movl 24(%esp),%ecx + cmpl $0,%ebx + je L004decrypt + call __x86_DES_encrypt + jmp L005done +L004decrypt: + call __x86_DES_decrypt +L005done: + + # Fixup + rorl $3,%edi + movl 20(%esp),%eax + rorl $3,%esi + movl %edi,(%eax) + movl %esi,4(%eax) + popl %ebp + popl %ebx + popl %edi + popl %esi + ret +.globl _DES_encrypt3 +.align 4 +_DES_encrypt3: +L_DES_encrypt3_begin: + pushl %ebx + movl 8(%esp),%ebx + pushl %ebp + pushl %esi + pushl %edi + + # Load the data words + movl (%ebx),%edi + movl 4(%ebx),%esi + subl $12,%esp + + # IP + roll $4,%edi + movl %edi,%edx + xorl %esi,%edi + andl $0xf0f0f0f0,%edi + xorl %edi,%edx + xorl %edi,%esi + + roll $20,%esi + movl %esi,%edi + xorl %edx,%esi + andl $0xfff0000f,%esi + xorl %esi,%edi + xorl %esi,%edx + + roll $14,%edi + movl %edi,%esi + xorl %edx,%edi + andl $0x33333333,%edi + xorl %edi,%esi + xorl %edi,%edx + + roll $22,%edx + movl %edx,%edi + xorl %esi,%edx + andl $0x03fc03fc,%edx + xorl %edx,%edi + xorl %edx,%esi + + roll $9,%edi + movl %edi,%edx + xorl %esi,%edi + andl $0xaaaaaaaa,%edi + xorl %edi,%edx + xorl %edi,%esi + + rorl $3,%edx + rorl $2,%esi + movl %esi,4(%ebx) + movl 36(%esp),%eax + movl %edx,(%ebx) + movl 40(%esp),%edi + movl 44(%esp),%esi + movl $1,8(%esp) + movl %eax,4(%esp) + movl %ebx,(%esp) + call L_DES_encrypt2_begin + movl $0,8(%esp) + movl %edi,4(%esp) + movl %ebx,(%esp) + call L_DES_encrypt2_begin + movl $1,8(%esp) + movl %esi,4(%esp) + movl %ebx,(%esp) + call L_DES_encrypt2_begin + addl $12,%esp + movl (%ebx),%edi + movl 4(%ebx),%esi + + # FP + roll $2,%esi + roll $3,%edi + movl %edi,%eax + xorl %esi,%edi + andl $0xaaaaaaaa,%edi + xorl %edi,%eax + xorl %edi,%esi + + roll $23,%eax + movl %eax,%edi + xorl %esi,%eax + andl $0x03fc03fc,%eax + xorl %eax,%edi + xorl %eax,%esi + + roll $10,%edi + movl %edi,%eax + xorl %esi,%edi + andl $0x33333333,%edi + xorl %edi,%eax + xorl %edi,%esi + + roll $18,%esi + movl %esi,%edi + xorl %eax,%esi + andl $0xfff0000f,%esi + xorl %esi,%edi + xorl %esi,%eax + + roll $12,%edi + movl %edi,%esi + xorl %eax,%edi + andl $0xf0f0f0f0,%edi + xorl %edi,%esi + xorl %edi,%eax + + rorl $4,%eax + movl %eax,(%ebx) + movl %esi,4(%ebx) + popl %edi + popl %esi + popl %ebp + popl %ebx + ret +.globl _DES_decrypt3 +.align 4 +_DES_decrypt3: +L_DES_decrypt3_begin: + pushl %ebx + movl 8(%esp),%ebx + pushl %ebp + pushl %esi + pushl %edi + + # Load the data words + movl (%ebx),%edi + movl 4(%ebx),%esi + subl $12,%esp + + # IP + roll $4,%edi + movl %edi,%edx + xorl %esi,%edi + andl $0xf0f0f0f0,%edi + xorl %edi,%edx + xorl %edi,%esi + + roll $20,%esi + movl %esi,%edi + xorl %edx,%esi + andl $0xfff0000f,%esi + xorl %esi,%edi + xorl %esi,%edx + + roll $14,%edi + movl %edi,%esi + xorl %edx,%edi + andl $0x33333333,%edi + xorl %edi,%esi + xorl %edi,%edx + + roll $22,%edx + movl %edx,%edi + xorl %esi,%edx + andl $0x03fc03fc,%edx + xorl %edx,%edi + xorl %edx,%esi + + roll $9,%edi + movl %edi,%edx + xorl %esi,%edi + andl $0xaaaaaaaa,%edi + xorl %edi,%edx + xorl %edi,%esi + + rorl $3,%edx + rorl $2,%esi + movl %esi,4(%ebx) + movl 36(%esp),%esi + movl %edx,(%ebx) + movl 40(%esp),%edi + movl 44(%esp),%eax + movl $0,8(%esp) + movl %eax,4(%esp) + movl %ebx,(%esp) + call L_DES_encrypt2_begin + movl $1,8(%esp) + movl %edi,4(%esp) + movl %ebx,(%esp) + call L_DES_encrypt2_begin + movl $0,8(%esp) + movl %esi,4(%esp) + movl %ebx,(%esp) + call L_DES_encrypt2_begin + addl $12,%esp + movl (%ebx),%edi + movl 4(%ebx),%esi + + # FP + roll $2,%esi + roll $3,%edi + movl %edi,%eax + xorl %esi,%edi + andl $0xaaaaaaaa,%edi + xorl %edi,%eax + xorl %edi,%esi + + roll $23,%eax + movl %eax,%edi + xorl %esi,%eax + andl $0x03fc03fc,%eax + xorl %eax,%edi + xorl %eax,%esi + + roll $10,%edi + movl %edi,%eax + xorl %esi,%edi + andl $0x33333333,%edi + xorl %edi,%eax + xorl %edi,%esi + + roll $18,%esi + movl %esi,%edi + xorl %eax,%esi + andl $0xfff0000f,%esi + xorl %esi,%edi + xorl %esi,%eax + + roll $12,%edi + movl %edi,%esi + xorl %eax,%edi + andl $0xf0f0f0f0,%edi + xorl %edi,%esi + xorl %edi,%eax + + rorl $4,%eax + movl %eax,(%ebx) + movl %esi,4(%ebx) + popl %edi + popl %esi + popl %ebp + popl %ebx + ret +.globl _DES_ncbc_encrypt +.align 4 +_DES_ncbc_encrypt: +L_DES_ncbc_encrypt_begin: + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 28(%esp),%ebp + # getting iv ptr from parameter 4 + movl 36(%esp),%ebx + movl (%ebx),%esi + movl 4(%ebx),%edi + pushl %edi + pushl %esi + pushl %edi + pushl %esi + movl %esp,%ebx + movl 36(%esp),%esi + movl 40(%esp),%edi + # getting encrypt flag from parameter 5 + movl 56(%esp),%ecx + # get and push parameter 5 + pushl %ecx + # get and push parameter 3 + movl 52(%esp),%eax + pushl %eax + pushl %ebx + cmpl $0,%ecx + jz L006decrypt + andl $4294967288,%ebp + movl 12(%esp),%eax + movl 16(%esp),%ebx + jz L007encrypt_finish +L008encrypt_loop: + movl (%esi),%ecx + movl 4(%esi),%edx + xorl %ecx,%eax + xorl %edx,%ebx + movl %eax,12(%esp) + movl %ebx,16(%esp) + call L_DES_encrypt1_begin + movl 12(%esp),%eax + movl 16(%esp),%ebx + movl %eax,(%edi) + movl %ebx,4(%edi) + addl $8,%esi + addl $8,%edi + subl $8,%ebp + jnz L008encrypt_loop +L007encrypt_finish: + movl 56(%esp),%ebp + andl $7,%ebp + jz L009finish + call L010PIC_point +L010PIC_point: + popl %edx + leal L011cbc_enc_jmp_table-L010PIC_point(%edx),%ecx + movl (%ecx,%ebp,4),%ebp + addl %edx,%ebp + xorl %ecx,%ecx + xorl %edx,%edx + jmp *%ebp +L012ej7: + movb 6(%esi),%dh + shll $8,%edx +L013ej6: + movb 5(%esi),%dh +L014ej5: + movb 4(%esi),%dl +L015ej4: + movl (%esi),%ecx + jmp L016ejend +L017ej3: + movb 2(%esi),%ch + shll $8,%ecx +L018ej2: + movb 1(%esi),%ch +L019ej1: + movb (%esi),%cl +L016ejend: + xorl %ecx,%eax + xorl %edx,%ebx + movl %eax,12(%esp) + movl %ebx,16(%esp) + call L_DES_encrypt1_begin + movl 12(%esp),%eax + movl 16(%esp),%ebx + movl %eax,(%edi) + movl %ebx,4(%edi) + jmp L009finish +L006decrypt: + andl $4294967288,%ebp + movl 20(%esp),%eax + movl 24(%esp),%ebx + jz L020decrypt_finish +L021decrypt_loop: + movl (%esi),%eax + movl 4(%esi),%ebx + movl %eax,12(%esp) + movl %ebx,16(%esp) + call L_DES_encrypt1_begin + movl 12(%esp),%eax + movl 16(%esp),%ebx + movl 20(%esp),%ecx + movl 24(%esp),%edx + xorl %eax,%ecx + xorl %ebx,%edx + movl (%esi),%eax + movl 4(%esi),%ebx + movl %ecx,(%edi) + movl %edx,4(%edi) + movl %eax,20(%esp) + movl %ebx,24(%esp) + addl $8,%esi + addl $8,%edi + subl $8,%ebp + jnz L021decrypt_loop +L020decrypt_finish: + movl 56(%esp),%ebp + andl $7,%ebp + jz L009finish + movl (%esi),%eax + movl 4(%esi),%ebx + movl %eax,12(%esp) + movl %ebx,16(%esp) + call L_DES_encrypt1_begin + movl 12(%esp),%eax + movl 16(%esp),%ebx + movl 20(%esp),%ecx + movl 24(%esp),%edx + xorl %eax,%ecx + xorl %ebx,%edx + movl (%esi),%eax + movl 4(%esi),%ebx +L022dj7: + rorl $16,%edx + movb %dl,6(%edi) + shrl $16,%edx +L023dj6: + movb %dh,5(%edi) +L024dj5: + movb %dl,4(%edi) +L025dj4: + movl %ecx,(%edi) + jmp L026djend +L027dj3: + rorl $16,%ecx + movb %cl,2(%edi) + shll $16,%ecx +L028dj2: + movb %ch,1(%esi) +L029dj1: + movb %cl,(%esi) +L026djend: + jmp L009finish +L009finish: + movl 64(%esp),%ecx + addl $28,%esp + movl %eax,(%ecx) + movl %ebx,4(%ecx) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 6,0x90 +L011cbc_enc_jmp_table: +.long 0 +.long L019ej1-L010PIC_point +.long L018ej2-L010PIC_point +.long L017ej3-L010PIC_point +.long L015ej4-L010PIC_point +.long L014ej5-L010PIC_point +.long L013ej6-L010PIC_point +.long L012ej7-L010PIC_point +.align 6,0x90 +.globl _DES_ede3_cbc_encrypt +.align 4 +_DES_ede3_cbc_encrypt: +L_DES_ede3_cbc_encrypt_begin: + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 28(%esp),%ebp + # getting iv ptr from parameter 6 + movl 44(%esp),%ebx + movl (%ebx),%esi + movl 4(%ebx),%edi + pushl %edi + pushl %esi + pushl %edi + pushl %esi + movl %esp,%ebx + movl 36(%esp),%esi + movl 40(%esp),%edi + # getting encrypt flag from parameter 7 + movl 64(%esp),%ecx + # get and push parameter 5 + movl 56(%esp),%eax + pushl %eax + # get and push parameter 4 + movl 56(%esp),%eax + pushl %eax + # get and push parameter 3 + movl 56(%esp),%eax + pushl %eax + pushl %ebx + cmpl $0,%ecx + jz L030decrypt + andl $4294967288,%ebp + movl 16(%esp),%eax + movl 20(%esp),%ebx + jz L031encrypt_finish +L032encrypt_loop: + movl (%esi),%ecx + movl 4(%esi),%edx + xorl %ecx,%eax + xorl %edx,%ebx + movl %eax,16(%esp) + movl %ebx,20(%esp) + call L_DES_encrypt3_begin + movl 16(%esp),%eax + movl 20(%esp),%ebx + movl %eax,(%edi) + movl %ebx,4(%edi) + addl $8,%esi + addl $8,%edi + subl $8,%ebp + jnz L032encrypt_loop +L031encrypt_finish: + movl 60(%esp),%ebp + andl $7,%ebp + jz L033finish + call L034PIC_point +L034PIC_point: + popl %edx + leal L035cbc_enc_jmp_table-L034PIC_point(%edx),%ecx + movl (%ecx,%ebp,4),%ebp + addl %edx,%ebp + xorl %ecx,%ecx + xorl %edx,%edx + jmp *%ebp +L036ej7: + movb 6(%esi),%dh + shll $8,%edx +L037ej6: + movb 5(%esi),%dh +L038ej5: + movb 4(%esi),%dl +L039ej4: + movl (%esi),%ecx + jmp L040ejend +L041ej3: + movb 2(%esi),%ch + shll $8,%ecx +L042ej2: + movb 1(%esi),%ch +L043ej1: + movb (%esi),%cl +L040ejend: + xorl %ecx,%eax + xorl %edx,%ebx + movl %eax,16(%esp) + movl %ebx,20(%esp) + call L_DES_encrypt3_begin + movl 16(%esp),%eax + movl 20(%esp),%ebx + movl %eax,(%edi) + movl %ebx,4(%edi) + jmp L033finish +L030decrypt: + andl $4294967288,%ebp + movl 24(%esp),%eax + movl 28(%esp),%ebx + jz L044decrypt_finish +L045decrypt_loop: + movl (%esi),%eax + movl 4(%esi),%ebx + movl %eax,16(%esp) + movl %ebx,20(%esp) + call L_DES_decrypt3_begin + movl 16(%esp),%eax + movl 20(%esp),%ebx + movl 24(%esp),%ecx + movl 28(%esp),%edx + xorl %eax,%ecx + xorl %ebx,%edx + movl (%esi),%eax + movl 4(%esi),%ebx + movl %ecx,(%edi) + movl %edx,4(%edi) + movl %eax,24(%esp) + movl %ebx,28(%esp) + addl $8,%esi + addl $8,%edi + subl $8,%ebp + jnz L045decrypt_loop +L044decrypt_finish: + movl 60(%esp),%ebp + andl $7,%ebp + jz L033finish + movl (%esi),%eax + movl 4(%esi),%ebx + movl %eax,16(%esp) + movl %ebx,20(%esp) + call L_DES_decrypt3_begin + movl 16(%esp),%eax + movl 20(%esp),%ebx + movl 24(%esp),%ecx + movl 28(%esp),%edx + xorl %eax,%ecx + xorl %ebx,%edx + movl (%esi),%eax + movl 4(%esi),%ebx +L046dj7: + rorl $16,%edx + movb %dl,6(%edi) + shrl $16,%edx +L047dj6: + movb %dh,5(%edi) +L048dj5: + movb %dl,4(%edi) +L049dj4: + movl %ecx,(%edi) + jmp L050djend +L051dj3: + rorl $16,%ecx + movb %cl,2(%edi) + shll $16,%ecx +L052dj2: + movb %ch,1(%esi) +L053dj1: + movb %cl,(%esi) +L050djend: + jmp L033finish +L033finish: + movl 76(%esp),%ecx + addl $32,%esp + movl %eax,(%ecx) + movl %ebx,4(%ecx) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 6,0x90 +L035cbc_enc_jmp_table: +.long 0 +.long L043ej1-L034PIC_point +.long L042ej2-L034PIC_point +.long L041ej3-L034PIC_point +.long L039ej4-L034PIC_point +.long L038ej5-L034PIC_point +.long L037ej6-L034PIC_point +.long L036ej7-L034PIC_point +.align 6,0x90 +.align 6,0x90 +_DES_SPtrans: +.long 34080768,524288,33554434,34080770 +.long 33554432,526338,524290,33554434 +.long 526338,34080768,34078720,2050 +.long 33556482,33554432,0,524290 +.long 524288,2,33556480,526336 +.long 34080770,34078720,2050,33556480 +.long 2,2048,526336,34078722 +.long 2048,33556482,34078722,0 +.long 0,34080770,33556480,524290 +.long 34080768,524288,2050,33556480 +.long 34078722,2048,526336,33554434 +.long 526338,2,33554434,34078720 +.long 34080770,526336,34078720,33556482 +.long 33554432,2050,524290,0 +.long 524288,33554432,33556482,34080768 +.long 2,34078722,2048,526338 +.long 1074823184,0,1081344,1074790400 +.long 1073741840,32784,1073774592,1081344 +.long 32768,1074790416,16,1073774592 +.long 1048592,1074823168,1074790400,16 +.long 1048576,1073774608,1074790416,32768 +.long 1081360,1073741824,0,1048592 +.long 1073774608,1081360,1074823168,1073741840 +.long 1073741824,1048576,32784,1074823184 +.long 1048592,1074823168,1073774592,1081360 +.long 1074823184,1048592,1073741840,0 +.long 1073741824,32784,1048576,1074790416 +.long 32768,1073741824,1081360,1073774608 +.long 1074823168,32768,0,1073741840 +.long 16,1074823184,1081344,1074790400 +.long 1074790416,1048576,32784,1073774592 +.long 1073774608,16,1074790400,1081344 +.long 67108865,67371264,256,67109121 +.long 262145,67108864,67109121,262400 +.long 67109120,262144,67371008,1 +.long 67371265,257,1,67371009 +.long 0,262145,67371264,256 +.long 257,67371265,262144,67108865 +.long 67371009,67109120,262401,67371008 +.long 262400,0,67108864,262401 +.long 67371264,256,1,262144 +.long 257,262145,67371008,67109121 +.long 0,67371264,262400,67371009 +.long 262145,67108864,67371265,1 +.long 262401,67108865,67108864,67371265 +.long 262144,67109120,67109121,262400 +.long 67109120,0,67371009,257 +.long 67108865,262401,256,67371008 +.long 4198408,268439552,8,272633864 +.long 0,272629760,268439560,4194312 +.long 272633856,268435464,268435456,4104 +.long 268435464,4198408,4194304,268435456 +.long 272629768,4198400,4096,8 +.long 4198400,268439560,272629760,4096 +.long 4104,0,4194312,272633856 +.long 268439552,272629768,272633864,4194304 +.long 272629768,4104,4194304,268435464 +.long 4198400,268439552,8,272629760 +.long 268439560,0,4096,4194312 +.long 0,272629768,272633856,4096 +.long 268435456,272633864,4198408,4194304 +.long 272633864,8,268439552,4198408 +.long 4194312,4198400,272629760,268439560 +.long 4104,268435456,268435464,272633856 +.long 134217728,65536,1024,134284320 +.long 134283296,134218752,66592,134283264 +.long 65536,32,134217760,66560 +.long 134218784,134283296,134284288,0 +.long 66560,134217728,65568,1056 +.long 134218752,66592,0,134217760 +.long 32,134218784,134284320,65568 +.long 134283264,1024,1056,134284288 +.long 134284288,134218784,65568,134283264 +.long 65536,32,134217760,134218752 +.long 134217728,66560,134284320,0 +.long 66592,134217728,1024,65568 +.long 134218784,1024,0,134284320 +.long 134283296,134284288,1056,65536 +.long 66560,134283296,134218752,1056 +.long 32,66592,134283264,134217760 +.long 2147483712,2097216,0,2149588992 +.long 2097216,8192,2147491904,2097152 +.long 8256,2149589056,2105344,2147483648 +.long 2147491840,2147483712,2149580800,2105408 +.long 2097152,2147491904,2149580864,0 +.long 8192,64,2149588992,2149580864 +.long 2149589056,2149580800,2147483648,8256 +.long 64,2105344,2105408,2147491840 +.long 8256,2147483648,2147491840,2105408 +.long 2149588992,2097216,0,2147491840 +.long 2147483648,8192,2149580864,2097152 +.long 2097216,2149589056,2105344,64 +.long 2149589056,2105344,2097152,2147491904 +.long 2147483712,2149580800,2105408,0 +.long 8192,2147483712,2147491904,2149588992 +.long 2149580800,8256,64,2149580864 +.long 16384,512,16777728,16777220 +.long 16794116,16388,16896,0 +.long 16777216,16777732,516,16793600 +.long 4,16794112,16793600,516 +.long 16777732,16384,16388,16794116 +.long 0,16777728,16777220,16896 +.long 16793604,16900,16794112,4 +.long 16900,16793604,512,16777216 +.long 16900,16793600,16793604,516 +.long 16384,512,16777216,16793604 +.long 16777732,16900,16896,0 +.long 512,16777220,4,16777728 +.long 0,16777732,16777728,16896 +.long 516,16384,16794116,16777216 +.long 16794112,4,16388,16794116 +.long 16777220,16794112,16793600,16388 +.long 545259648,545390592,131200,0 +.long 537001984,8388736,545259520,545390720 +.long 128,536870912,8519680,131200 +.long 8519808,537002112,536871040,545259520 +.long 131072,8519808,8388736,537001984 +.long 545390720,536871040,0,8519680 +.long 536870912,8388608,537002112,545259648 +.long 8388608,131072,545390592,128 +.long 8388608,131072,536871040,545390720 +.long 131200,536870912,0,8519680 +.long 545259648,537002112,537001984,8388736 +.long 545390592,128,8388736,537001984 +.long 545390720,8388608,545259520,536871040 +.long 8519680,131200,537002112,545259520 +.long 128,545390592,8519808,0 +.long 536870912,545259648,131072,8519808 diff --git a/chromium/third_party/openssl/openssl/crypto/ec/ec_asn1.c b/chromium/third_party/openssl/openssl/crypto/ec/ec_asn1.c index 175eec53428..e8e54489b59 100644 --- a/chromium/third_party/openssl/openssl/crypto/ec/ec_asn1.c +++ b/chromium/third_party/openssl/openssl/crypto/ec/ec_asn1.c @@ -1433,8 +1433,11 @@ int i2o_ECPublicKey(EC_KEY *a, unsigned char **out) *out, buf_len, NULL)) { ECerr(EC_F_I2O_ECPUBLICKEY, ERR_R_EC_LIB); - OPENSSL_free(*out); - *out = NULL; + if (new_buffer) + { + OPENSSL_free(*out); + *out = NULL; + } return 0; } if (!new_buffer) diff --git a/chromium/third_party/openssl/openssl/crypto/evp/bio_b64.c b/chromium/third_party/openssl/openssl/crypto/evp/bio_b64.c index 72a2a67277a..373c3406024 100644 --- a/chromium/third_party/openssl/openssl/crypto/evp/bio_b64.c +++ b/chromium/third_party/openssl/openssl/crypto/evp/bio_b64.c @@ -226,6 +226,7 @@ static int b64_read(BIO *b, char *out, int outl) else if (ctx->start) { q=p=(unsigned char *)ctx->tmp; + num = 0; for (j=0; j<i; j++) { if (*(q++) != '\n') continue; diff --git a/chromium/third_party/openssl/openssl/crypto/evp/encode.c b/chromium/third_party/openssl/openssl/crypto/evp/encode.c index 28546a84bc2..4654bdc61a6 100644 --- a/chromium/third_party/openssl/openssl/crypto/evp/encode.c +++ b/chromium/third_party/openssl/openssl/crypto/evp/encode.c @@ -324,6 +324,7 @@ int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, v=EVP_DecodeBlock(out,d,n); n=0; if (v < 0) { rv=0; goto end; } + if (eof > v) { rv=-1; goto end; } ret+=(v-eof); } else diff --git a/chromium/third_party/openssl/openssl/crypto/md5/asm/md5-586-mac.S b/chromium/third_party/openssl/openssl/crypto/md5/asm/md5-586-mac.S new file mode 100644 index 00000000000..8413d0c93e1 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/md5/asm/md5-586-mac.S @@ -0,0 +1,677 @@ +.file "crypto/md5/asm/md5-586.s" +.text +.globl _md5_block_asm_data_order +.align 4 +_md5_block_asm_data_order: +L_md5_block_asm_data_order_begin: + pushl %esi + pushl %edi + movl 12(%esp),%edi + movl 16(%esp),%esi + movl 20(%esp),%ecx + pushl %ebp + shll $6,%ecx + pushl %ebx + addl %esi,%ecx + subl $64,%ecx + movl (%edi),%eax + pushl %ecx + movl 4(%edi),%ebx + movl 8(%edi),%ecx + movl 12(%edi),%edx +L000start: + + # R0 section + movl %ecx,%edi + movl (%esi),%ebp + # R0 0 + xorl %edx,%edi + andl %ebx,%edi + leal 3614090360(%eax,%ebp,1),%eax + xorl %edx,%edi + addl %edi,%eax + movl %ebx,%edi + roll $7,%eax + movl 4(%esi),%ebp + addl %ebx,%eax + # R0 1 + xorl %ecx,%edi + andl %eax,%edi + leal 3905402710(%edx,%ebp,1),%edx + xorl %ecx,%edi + addl %edi,%edx + movl %eax,%edi + roll $12,%edx + movl 8(%esi),%ebp + addl %eax,%edx + # R0 2 + xorl %ebx,%edi + andl %edx,%edi + leal 606105819(%ecx,%ebp,1),%ecx + xorl %ebx,%edi + addl %edi,%ecx + movl %edx,%edi + roll $17,%ecx + movl 12(%esi),%ebp + addl %edx,%ecx + # R0 3 + xorl %eax,%edi + andl %ecx,%edi + leal 3250441966(%ebx,%ebp,1),%ebx + xorl %eax,%edi + addl %edi,%ebx + movl %ecx,%edi + roll $22,%ebx + movl 16(%esi),%ebp + addl %ecx,%ebx + # R0 4 + xorl %edx,%edi + andl %ebx,%edi + leal 4118548399(%eax,%ebp,1),%eax + xorl %edx,%edi + addl %edi,%eax + movl %ebx,%edi + roll $7,%eax + movl 20(%esi),%ebp + addl %ebx,%eax + # R0 5 + xorl %ecx,%edi + andl %eax,%edi + leal 1200080426(%edx,%ebp,1),%edx + xorl %ecx,%edi + addl %edi,%edx + movl %eax,%edi + roll $12,%edx + movl 24(%esi),%ebp + addl %eax,%edx + # R0 6 + xorl %ebx,%edi + andl %edx,%edi + leal 2821735955(%ecx,%ebp,1),%ecx + xorl %ebx,%edi + addl %edi,%ecx + movl %edx,%edi + roll $17,%ecx + movl 28(%esi),%ebp + addl %edx,%ecx + # R0 7 + xorl %eax,%edi + andl %ecx,%edi + leal 4249261313(%ebx,%ebp,1),%ebx + xorl %eax,%edi + addl %edi,%ebx + movl %ecx,%edi + roll $22,%ebx + movl 32(%esi),%ebp + addl %ecx,%ebx + # R0 8 + xorl %edx,%edi + andl %ebx,%edi + leal 1770035416(%eax,%ebp,1),%eax + xorl %edx,%edi + addl %edi,%eax + movl %ebx,%edi + roll $7,%eax + movl 36(%esi),%ebp + addl %ebx,%eax + # R0 9 + xorl %ecx,%edi + andl %eax,%edi + leal 2336552879(%edx,%ebp,1),%edx + xorl %ecx,%edi + addl %edi,%edx + movl %eax,%edi + roll $12,%edx + movl 40(%esi),%ebp + addl %eax,%edx + # R0 10 + xorl %ebx,%edi + andl %edx,%edi + leal 4294925233(%ecx,%ebp,1),%ecx + xorl %ebx,%edi + addl %edi,%ecx + movl %edx,%edi + roll $17,%ecx + movl 44(%esi),%ebp + addl %edx,%ecx + # R0 11 + xorl %eax,%edi + andl %ecx,%edi + leal 2304563134(%ebx,%ebp,1),%ebx + xorl %eax,%edi + addl %edi,%ebx + movl %ecx,%edi + roll $22,%ebx + movl 48(%esi),%ebp + addl %ecx,%ebx + # R0 12 + xorl %edx,%edi + andl %ebx,%edi + leal 1804603682(%eax,%ebp,1),%eax + xorl %edx,%edi + addl %edi,%eax + movl %ebx,%edi + roll $7,%eax + movl 52(%esi),%ebp + addl %ebx,%eax + # R0 13 + xorl %ecx,%edi + andl %eax,%edi + leal 4254626195(%edx,%ebp,1),%edx + xorl %ecx,%edi + addl %edi,%edx + movl %eax,%edi + roll $12,%edx + movl 56(%esi),%ebp + addl %eax,%edx + # R0 14 + xorl %ebx,%edi + andl %edx,%edi + leal 2792965006(%ecx,%ebp,1),%ecx + xorl %ebx,%edi + addl %edi,%ecx + movl %edx,%edi + roll $17,%ecx + movl 60(%esi),%ebp + addl %edx,%ecx + # R0 15 + xorl %eax,%edi + andl %ecx,%edi + leal 1236535329(%ebx,%ebp,1),%ebx + xorl %eax,%edi + addl %edi,%ebx + movl %ecx,%edi + roll $22,%ebx + movl 4(%esi),%ebp + addl %ecx,%ebx + + # R1 section + # R1 16 + leal 4129170786(%eax,%ebp,1),%eax + xorl %ebx,%edi + andl %edx,%edi + movl 24(%esi),%ebp + xorl %ecx,%edi + addl %edi,%eax + movl %ebx,%edi + roll $5,%eax + addl %ebx,%eax + # R1 17 + leal 3225465664(%edx,%ebp,1),%edx + xorl %eax,%edi + andl %ecx,%edi + movl 44(%esi),%ebp + xorl %ebx,%edi + addl %edi,%edx + movl %eax,%edi + roll $9,%edx + addl %eax,%edx + # R1 18 + leal 643717713(%ecx,%ebp,1),%ecx + xorl %edx,%edi + andl %ebx,%edi + movl (%esi),%ebp + xorl %eax,%edi + addl %edi,%ecx + movl %edx,%edi + roll $14,%ecx + addl %edx,%ecx + # R1 19 + leal 3921069994(%ebx,%ebp,1),%ebx + xorl %ecx,%edi + andl %eax,%edi + movl 20(%esi),%ebp + xorl %edx,%edi + addl %edi,%ebx + movl %ecx,%edi + roll $20,%ebx + addl %ecx,%ebx + # R1 20 + leal 3593408605(%eax,%ebp,1),%eax + xorl %ebx,%edi + andl %edx,%edi + movl 40(%esi),%ebp + xorl %ecx,%edi + addl %edi,%eax + movl %ebx,%edi + roll $5,%eax + addl %ebx,%eax + # R1 21 + leal 38016083(%edx,%ebp,1),%edx + xorl %eax,%edi + andl %ecx,%edi + movl 60(%esi),%ebp + xorl %ebx,%edi + addl %edi,%edx + movl %eax,%edi + roll $9,%edx + addl %eax,%edx + # R1 22 + leal 3634488961(%ecx,%ebp,1),%ecx + xorl %edx,%edi + andl %ebx,%edi + movl 16(%esi),%ebp + xorl %eax,%edi + addl %edi,%ecx + movl %edx,%edi + roll $14,%ecx + addl %edx,%ecx + # R1 23 + leal 3889429448(%ebx,%ebp,1),%ebx + xorl %ecx,%edi + andl %eax,%edi + movl 36(%esi),%ebp + xorl %edx,%edi + addl %edi,%ebx + movl %ecx,%edi + roll $20,%ebx + addl %ecx,%ebx + # R1 24 + leal 568446438(%eax,%ebp,1),%eax + xorl %ebx,%edi + andl %edx,%edi + movl 56(%esi),%ebp + xorl %ecx,%edi + addl %edi,%eax + movl %ebx,%edi + roll $5,%eax + addl %ebx,%eax + # R1 25 + leal 3275163606(%edx,%ebp,1),%edx + xorl %eax,%edi + andl %ecx,%edi + movl 12(%esi),%ebp + xorl %ebx,%edi + addl %edi,%edx + movl %eax,%edi + roll $9,%edx + addl %eax,%edx + # R1 26 + leal 4107603335(%ecx,%ebp,1),%ecx + xorl %edx,%edi + andl %ebx,%edi + movl 32(%esi),%ebp + xorl %eax,%edi + addl %edi,%ecx + movl %edx,%edi + roll $14,%ecx + addl %edx,%ecx + # R1 27 + leal 1163531501(%ebx,%ebp,1),%ebx + xorl %ecx,%edi + andl %eax,%edi + movl 52(%esi),%ebp + xorl %edx,%edi + addl %edi,%ebx + movl %ecx,%edi + roll $20,%ebx + addl %ecx,%ebx + # R1 28 + leal 2850285829(%eax,%ebp,1),%eax + xorl %ebx,%edi + andl %edx,%edi + movl 8(%esi),%ebp + xorl %ecx,%edi + addl %edi,%eax + movl %ebx,%edi + roll $5,%eax + addl %ebx,%eax + # R1 29 + leal 4243563512(%edx,%ebp,1),%edx + xorl %eax,%edi + andl %ecx,%edi + movl 28(%esi),%ebp + xorl %ebx,%edi + addl %edi,%edx + movl %eax,%edi + roll $9,%edx + addl %eax,%edx + # R1 30 + leal 1735328473(%ecx,%ebp,1),%ecx + xorl %edx,%edi + andl %ebx,%edi + movl 48(%esi),%ebp + xorl %eax,%edi + addl %edi,%ecx + movl %edx,%edi + roll $14,%ecx + addl %edx,%ecx + # R1 31 + leal 2368359562(%ebx,%ebp,1),%ebx + xorl %ecx,%edi + andl %eax,%edi + movl 20(%esi),%ebp + xorl %edx,%edi + addl %edi,%ebx + movl %ecx,%edi + roll $20,%ebx + addl %ecx,%ebx + + # R2 section + # R2 32 + xorl %edx,%edi + xorl %ebx,%edi + leal 4294588738(%eax,%ebp,1),%eax + addl %edi,%eax + roll $4,%eax + movl 32(%esi),%ebp + movl %ebx,%edi + # R2 33 + leal 2272392833(%edx,%ebp,1),%edx + addl %ebx,%eax + xorl %ecx,%edi + xorl %eax,%edi + movl 44(%esi),%ebp + addl %edi,%edx + movl %eax,%edi + roll $11,%edx + addl %eax,%edx + # R2 34 + xorl %ebx,%edi + xorl %edx,%edi + leal 1839030562(%ecx,%ebp,1),%ecx + addl %edi,%ecx + roll $16,%ecx + movl 56(%esi),%ebp + movl %edx,%edi + # R2 35 + leal 4259657740(%ebx,%ebp,1),%ebx + addl %edx,%ecx + xorl %eax,%edi + xorl %ecx,%edi + movl 4(%esi),%ebp + addl %edi,%ebx + movl %ecx,%edi + roll $23,%ebx + addl %ecx,%ebx + # R2 36 + xorl %edx,%edi + xorl %ebx,%edi + leal 2763975236(%eax,%ebp,1),%eax + addl %edi,%eax + roll $4,%eax + movl 16(%esi),%ebp + movl %ebx,%edi + # R2 37 + leal 1272893353(%edx,%ebp,1),%edx + addl %ebx,%eax + xorl %ecx,%edi + xorl %eax,%edi + movl 28(%esi),%ebp + addl %edi,%edx + movl %eax,%edi + roll $11,%edx + addl %eax,%edx + # R2 38 + xorl %ebx,%edi + xorl %edx,%edi + leal 4139469664(%ecx,%ebp,1),%ecx + addl %edi,%ecx + roll $16,%ecx + movl 40(%esi),%ebp + movl %edx,%edi + # R2 39 + leal 3200236656(%ebx,%ebp,1),%ebx + addl %edx,%ecx + xorl %eax,%edi + xorl %ecx,%edi + movl 52(%esi),%ebp + addl %edi,%ebx + movl %ecx,%edi + roll $23,%ebx + addl %ecx,%ebx + # R2 40 + xorl %edx,%edi + xorl %ebx,%edi + leal 681279174(%eax,%ebp,1),%eax + addl %edi,%eax + roll $4,%eax + movl (%esi),%ebp + movl %ebx,%edi + # R2 41 + leal 3936430074(%edx,%ebp,1),%edx + addl %ebx,%eax + xorl %ecx,%edi + xorl %eax,%edi + movl 12(%esi),%ebp + addl %edi,%edx + movl %eax,%edi + roll $11,%edx + addl %eax,%edx + # R2 42 + xorl %ebx,%edi + xorl %edx,%edi + leal 3572445317(%ecx,%ebp,1),%ecx + addl %edi,%ecx + roll $16,%ecx + movl 24(%esi),%ebp + movl %edx,%edi + # R2 43 + leal 76029189(%ebx,%ebp,1),%ebx + addl %edx,%ecx + xorl %eax,%edi + xorl %ecx,%edi + movl 36(%esi),%ebp + addl %edi,%ebx + movl %ecx,%edi + roll $23,%ebx + addl %ecx,%ebx + # R2 44 + xorl %edx,%edi + xorl %ebx,%edi + leal 3654602809(%eax,%ebp,1),%eax + addl %edi,%eax + roll $4,%eax + movl 48(%esi),%ebp + movl %ebx,%edi + # R2 45 + leal 3873151461(%edx,%ebp,1),%edx + addl %ebx,%eax + xorl %ecx,%edi + xorl %eax,%edi + movl 60(%esi),%ebp + addl %edi,%edx + movl %eax,%edi + roll $11,%edx + addl %eax,%edx + # R2 46 + xorl %ebx,%edi + xorl %edx,%edi + leal 530742520(%ecx,%ebp,1),%ecx + addl %edi,%ecx + roll $16,%ecx + movl 8(%esi),%ebp + movl %edx,%edi + # R2 47 + leal 3299628645(%ebx,%ebp,1),%ebx + addl %edx,%ecx + xorl %eax,%edi + xorl %ecx,%edi + movl (%esi),%ebp + addl %edi,%ebx + movl $-1,%edi + roll $23,%ebx + addl %ecx,%ebx + + # R3 section + # R3 48 + xorl %edx,%edi + orl %ebx,%edi + leal 4096336452(%eax,%ebp,1),%eax + xorl %ecx,%edi + movl 28(%esi),%ebp + addl %edi,%eax + movl $-1,%edi + roll $6,%eax + xorl %ecx,%edi + addl %ebx,%eax + # R3 49 + orl %eax,%edi + leal 1126891415(%edx,%ebp,1),%edx + xorl %ebx,%edi + movl 56(%esi),%ebp + addl %edi,%edx + movl $-1,%edi + roll $10,%edx + xorl %ebx,%edi + addl %eax,%edx + # R3 50 + orl %edx,%edi + leal 2878612391(%ecx,%ebp,1),%ecx + xorl %eax,%edi + movl 20(%esi),%ebp + addl %edi,%ecx + movl $-1,%edi + roll $15,%ecx + xorl %eax,%edi + addl %edx,%ecx + # R3 51 + orl %ecx,%edi + leal 4237533241(%ebx,%ebp,1),%ebx + xorl %edx,%edi + movl 48(%esi),%ebp + addl %edi,%ebx + movl $-1,%edi + roll $21,%ebx + xorl %edx,%edi + addl %ecx,%ebx + # R3 52 + orl %ebx,%edi + leal 1700485571(%eax,%ebp,1),%eax + xorl %ecx,%edi + movl 12(%esi),%ebp + addl %edi,%eax + movl $-1,%edi + roll $6,%eax + xorl %ecx,%edi + addl %ebx,%eax + # R3 53 + orl %eax,%edi + leal 2399980690(%edx,%ebp,1),%edx + xorl %ebx,%edi + movl 40(%esi),%ebp + addl %edi,%edx + movl $-1,%edi + roll $10,%edx + xorl %ebx,%edi + addl %eax,%edx + # R3 54 + orl %edx,%edi + leal 4293915773(%ecx,%ebp,1),%ecx + xorl %eax,%edi + movl 4(%esi),%ebp + addl %edi,%ecx + movl $-1,%edi + roll $15,%ecx + xorl %eax,%edi + addl %edx,%ecx + # R3 55 + orl %ecx,%edi + leal 2240044497(%ebx,%ebp,1),%ebx + xorl %edx,%edi + movl 32(%esi),%ebp + addl %edi,%ebx + movl $-1,%edi + roll $21,%ebx + xorl %edx,%edi + addl %ecx,%ebx + # R3 56 + orl %ebx,%edi + leal 1873313359(%eax,%ebp,1),%eax + xorl %ecx,%edi + movl 60(%esi),%ebp + addl %edi,%eax + movl $-1,%edi + roll $6,%eax + xorl %ecx,%edi + addl %ebx,%eax + # R3 57 + orl %eax,%edi + leal 4264355552(%edx,%ebp,1),%edx + xorl %ebx,%edi + movl 24(%esi),%ebp + addl %edi,%edx + movl $-1,%edi + roll $10,%edx + xorl %ebx,%edi + addl %eax,%edx + # R3 58 + orl %edx,%edi + leal 2734768916(%ecx,%ebp,1),%ecx + xorl %eax,%edi + movl 52(%esi),%ebp + addl %edi,%ecx + movl $-1,%edi + roll $15,%ecx + xorl %eax,%edi + addl %edx,%ecx + # R3 59 + orl %ecx,%edi + leal 1309151649(%ebx,%ebp,1),%ebx + xorl %edx,%edi + movl 16(%esi),%ebp + addl %edi,%ebx + movl $-1,%edi + roll $21,%ebx + xorl %edx,%edi + addl %ecx,%ebx + # R3 60 + orl %ebx,%edi + leal 4149444226(%eax,%ebp,1),%eax + xorl %ecx,%edi + movl 44(%esi),%ebp + addl %edi,%eax + movl $-1,%edi + roll $6,%eax + xorl %ecx,%edi + addl %ebx,%eax + # R3 61 + orl %eax,%edi + leal 3174756917(%edx,%ebp,1),%edx + xorl %ebx,%edi + movl 8(%esi),%ebp + addl %edi,%edx + movl $-1,%edi + roll $10,%edx + xorl %ebx,%edi + addl %eax,%edx + # R3 62 + orl %edx,%edi + leal 718787259(%ecx,%ebp,1),%ecx + xorl %eax,%edi + movl 36(%esi),%ebp + addl %edi,%ecx + movl $-1,%edi + roll $15,%ecx + xorl %eax,%edi + addl %edx,%ecx + # R3 63 + orl %ecx,%edi + leal 3951481745(%ebx,%ebp,1),%ebx + xorl %edx,%edi + movl 24(%esp),%ebp + addl %edi,%ebx + addl $64,%esi + roll $21,%ebx + movl (%ebp),%edi + addl %ecx,%ebx + addl %edi,%eax + movl 4(%ebp),%edi + addl %edi,%ebx + movl 8(%ebp),%edi + addl %edi,%ecx + movl 12(%ebp),%edi + addl %edi,%edx + movl %eax,(%ebp) + movl %ebx,4(%ebp) + movl (%esp),%edi + movl %ecx,8(%ebp) + movl %edx,12(%ebp) + cmpl %esi,%edi + jae L000start + popl %eax + popl %ebx + popl %ebp + popl %edi + popl %esi + ret diff --git a/chromium/third_party/openssl/openssl/crypto/modes/asm/ghash-x86-mac.S b/chromium/third_party/openssl/openssl/crypto/modes/asm/ghash-x86-mac.S new file mode 100644 index 00000000000..dc6ba14e695 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/modes/asm/ghash-x86-mac.S @@ -0,0 +1,718 @@ +.file "ghash-x86.s" +.text +.globl _gcm_gmult_4bit_x86 +.align 4 +_gcm_gmult_4bit_x86: +L_gcm_gmult_4bit_x86_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + subl $84,%esp + movl 104(%esp),%edi + movl 108(%esp),%esi + movl (%edi),%ebp + movl 4(%edi),%edx + movl 8(%edi),%ecx + movl 12(%edi),%ebx + movl $0,16(%esp) + movl $471859200,20(%esp) + movl $943718400,24(%esp) + movl $610271232,28(%esp) + movl $1887436800,32(%esp) + movl $1822425088,36(%esp) + movl $1220542464,40(%esp) + movl $1423966208,44(%esp) + movl $3774873600,48(%esp) + movl $4246732800,52(%esp) + movl $3644850176,56(%esp) + movl $3311403008,60(%esp) + movl $2441084928,64(%esp) + movl $2376073216,68(%esp) + movl $2847932416,72(%esp) + movl $3051356160,76(%esp) + movl %ebp,(%esp) + movl %edx,4(%esp) + movl %ecx,8(%esp) + movl %ebx,12(%esp) + shrl $20,%ebx + andl $240,%ebx + movl 4(%esi,%ebx,1),%ebp + movl (%esi,%ebx,1),%edx + movl 12(%esi,%ebx,1),%ecx + movl 8(%esi,%ebx,1),%ebx + xorl %eax,%eax + movl $15,%edi + jmp L000x86_loop +.align 4,0x90 +L000x86_loop: + movb %bl,%al + shrdl $4,%ecx,%ebx + andb $15,%al + shrdl $4,%edx,%ecx + shrdl $4,%ebp,%edx + shrl $4,%ebp + xorl 16(%esp,%eax,4),%ebp + movb (%esp,%edi,1),%al + andb $240,%al + xorl 8(%esi,%eax,1),%ebx + xorl 12(%esi,%eax,1),%ecx + xorl (%esi,%eax,1),%edx + xorl 4(%esi,%eax,1),%ebp + decl %edi + js L001x86_break + movb %bl,%al + shrdl $4,%ecx,%ebx + andb $15,%al + shrdl $4,%edx,%ecx + shrdl $4,%ebp,%edx + shrl $4,%ebp + xorl 16(%esp,%eax,4),%ebp + movb (%esp,%edi,1),%al + shlb $4,%al + xorl 8(%esi,%eax,1),%ebx + xorl 12(%esi,%eax,1),%ecx + xorl (%esi,%eax,1),%edx + xorl 4(%esi,%eax,1),%ebp + jmp L000x86_loop +.align 4,0x90 +L001x86_break: + bswap %ebx + bswap %ecx + bswap %edx + bswap %ebp + movl 104(%esp),%edi + movl %ebx,12(%edi) + movl %ecx,8(%edi) + movl %edx,4(%edi) + movl %ebp,(%edi) + addl $84,%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _gcm_ghash_4bit_x86 +.align 4 +_gcm_ghash_4bit_x86: +L_gcm_ghash_4bit_x86_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + subl $84,%esp + movl 104(%esp),%ebx + movl 108(%esp),%esi + movl 112(%esp),%edi + movl 116(%esp),%ecx + addl %edi,%ecx + movl %ecx,116(%esp) + movl (%ebx),%ebp + movl 4(%ebx),%edx + movl 8(%ebx),%ecx + movl 12(%ebx),%ebx + movl $0,16(%esp) + movl $471859200,20(%esp) + movl $943718400,24(%esp) + movl $610271232,28(%esp) + movl $1887436800,32(%esp) + movl $1822425088,36(%esp) + movl $1220542464,40(%esp) + movl $1423966208,44(%esp) + movl $3774873600,48(%esp) + movl $4246732800,52(%esp) + movl $3644850176,56(%esp) + movl $3311403008,60(%esp) + movl $2441084928,64(%esp) + movl $2376073216,68(%esp) + movl $2847932416,72(%esp) + movl $3051356160,76(%esp) +.align 4,0x90 +L002x86_outer_loop: + xorl 12(%edi),%ebx + xorl 8(%edi),%ecx + xorl 4(%edi),%edx + xorl (%edi),%ebp + movl %ebx,12(%esp) + movl %ecx,8(%esp) + movl %edx,4(%esp) + movl %ebp,(%esp) + shrl $20,%ebx + andl $240,%ebx + movl 4(%esi,%ebx,1),%ebp + movl (%esi,%ebx,1),%edx + movl 12(%esi,%ebx,1),%ecx + movl 8(%esi,%ebx,1),%ebx + xorl %eax,%eax + movl $15,%edi + jmp L003x86_loop +.align 4,0x90 +L003x86_loop: + movb %bl,%al + shrdl $4,%ecx,%ebx + andb $15,%al + shrdl $4,%edx,%ecx + shrdl $4,%ebp,%edx + shrl $4,%ebp + xorl 16(%esp,%eax,4),%ebp + movb (%esp,%edi,1),%al + andb $240,%al + xorl 8(%esi,%eax,1),%ebx + xorl 12(%esi,%eax,1),%ecx + xorl (%esi,%eax,1),%edx + xorl 4(%esi,%eax,1),%ebp + decl %edi + js L004x86_break + movb %bl,%al + shrdl $4,%ecx,%ebx + andb $15,%al + shrdl $4,%edx,%ecx + shrdl $4,%ebp,%edx + shrl $4,%ebp + xorl 16(%esp,%eax,4),%ebp + movb (%esp,%edi,1),%al + shlb $4,%al + xorl 8(%esi,%eax,1),%ebx + xorl 12(%esi,%eax,1),%ecx + xorl (%esi,%eax,1),%edx + xorl 4(%esi,%eax,1),%ebp + jmp L003x86_loop +.align 4,0x90 +L004x86_break: + bswap %ebx + bswap %ecx + bswap %edx + bswap %ebp + movl 112(%esp),%edi + leal 16(%edi),%edi + cmpl 116(%esp),%edi + movl %edi,112(%esp) + jb L002x86_outer_loop + movl 104(%esp),%edi + movl %ebx,12(%edi) + movl %ecx,8(%edi) + movl %edx,4(%edi) + movl %ebp,(%edi) + addl $84,%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 4 +__mmx_gmult_4bit_inner: + xorl %ecx,%ecx + movl %ebx,%edx + movb %dl,%cl + shlb $4,%cl + andl $240,%edx + movq 8(%esi,%ecx,1),%mm0 + movq (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 14(%edi),%cl + psllq $60,%mm2 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 13(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 12(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 11(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 10(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 9(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 8(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 7(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 6(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 5(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 4(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 3(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 2(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb 1(%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + movb (%edi),%cl + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movl %ecx,%edx + movd %mm0,%ebx + pxor %mm2,%mm0 + shlb $4,%cl + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%ecx,1),%mm0 + psllq $60,%mm2 + andl $240,%edx + pxor (%eax,%ebp,8),%mm1 + andl $15,%ebx + pxor (%esi,%ecx,1),%mm1 + movd %mm0,%ebp + pxor %mm2,%mm0 + psrlq $4,%mm0 + movq %mm1,%mm2 + psrlq $4,%mm1 + pxor 8(%esi,%edx,1),%mm0 + psllq $60,%mm2 + pxor (%eax,%ebx,8),%mm1 + andl $15,%ebp + pxor (%esi,%edx,1),%mm1 + movd %mm0,%ebx + pxor %mm2,%mm0 + movl 4(%eax,%ebp,8),%edi + psrlq $32,%mm0 + movd %mm1,%edx + psrlq $32,%mm1 + movd %mm0,%ecx + movd %mm1,%ebp + shll $4,%edi + bswap %ebx + bswap %edx + bswap %ecx + xorl %edi,%ebp + bswap %ebp + ret +.globl _gcm_gmult_4bit_mmx +.align 4 +_gcm_gmult_4bit_mmx: +L_gcm_gmult_4bit_mmx_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%edi + movl 24(%esp),%esi + call L005pic_point +L005pic_point: + popl %eax + leal Lrem_4bit-L005pic_point(%eax),%eax + movzbl 15(%edi),%ebx + call __mmx_gmult_4bit_inner + movl 20(%esp),%edi + emms + movl %ebx,12(%edi) + movl %edx,4(%edi) + movl %ecx,8(%edi) + movl %ebp,(%edi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _gcm_ghash_4bit_mmx +.align 4 +_gcm_ghash_4bit_mmx: +L_gcm_ghash_4bit_mmx_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%ebp + movl 24(%esp),%esi + movl 28(%esp),%edi + movl 32(%esp),%ecx + call L006pic_point +L006pic_point: + popl %eax + leal Lrem_4bit-L006pic_point(%eax),%eax + addl %edi,%ecx + movl %ecx,32(%esp) + subl $20,%esp + movl 12(%ebp),%ebx + movl 4(%ebp),%edx + movl 8(%ebp),%ecx + movl (%ebp),%ebp + jmp L007mmx_outer_loop +.align 4,0x90 +L007mmx_outer_loop: + xorl 12(%edi),%ebx + xorl 4(%edi),%edx + xorl 8(%edi),%ecx + xorl (%edi),%ebp + movl %edi,48(%esp) + movl %ebx,12(%esp) + movl %edx,4(%esp) + movl %ecx,8(%esp) + movl %ebp,(%esp) + movl %esp,%edi + shrl $24,%ebx + call __mmx_gmult_4bit_inner + movl 48(%esp),%edi + leal 16(%edi),%edi + cmpl 52(%esp),%edi + jb L007mmx_outer_loop + movl 40(%esp),%edi + emms + movl %ebx,12(%edi) + movl %edx,4(%edi) + movl %ecx,8(%edi) + movl %ebp,(%edi) + addl $20,%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 6,0x90 +Lrem_4bit: +.long 0,0,0,29491200,0,58982400,0,38141952 +.long 0,117964800,0,113901568,0,76283904,0,88997888 +.long 0,235929600,0,265420800,0,227803136,0,206962688 +.long 0,152567808,0,148504576,0,177995776,0,190709760 +.align 6,0x90 +L008rem_8bit: +.value 0,450,900,582,1800,1738,1164,1358 +.value 3600,4050,3476,3158,2328,2266,2716,2910 +.value 7200,7650,8100,7782,6952,6890,6316,6510 +.value 4656,5106,4532,4214,5432,5370,5820,6014 +.value 14400,14722,15300,14854,16200,16010,15564,15630 +.value 13904,14226,13780,13334,12632,12442,13020,13086 +.value 9312,9634,10212,9766,9064,8874,8428,8494 +.value 10864,11186,10740,10294,11640,11450,12028,12094 +.value 28800,28994,29444,29382,30600,30282,29708,30158 +.value 32400,32594,32020,31958,31128,30810,31260,31710 +.value 27808,28002,28452,28390,27560,27242,26668,27118 +.value 25264,25458,24884,24822,26040,25722,26172,26622 +.value 18624,18690,19268,19078,20424,19978,19532,19854 +.value 18128,18194,17748,17558,16856,16410,16988,17310 +.value 21728,21794,22372,22182,21480,21034,20588,20910 +.value 23280,23346,22900,22710,24056,23610,24188,24510 +.value 57600,57538,57988,58182,58888,59338,58764,58446 +.value 61200,61138,60564,60758,59416,59866,60316,59998 +.value 64800,64738,65188,65382,64040,64490,63916,63598 +.value 62256,62194,61620,61814,62520,62970,63420,63102 +.value 55616,55426,56004,56070,56904,57226,56780,56334 +.value 55120,54930,54484,54550,53336,53658,54236,53790 +.value 50528,50338,50916,50982,49768,50090,49644,49198 +.value 52080,51890,51444,51510,52344,52666,53244,52798 +.value 37248,36930,37380,37830,38536,38730,38156,38094 +.value 40848,40530,39956,40406,39064,39258,39708,39646 +.value 36256,35938,36388,36838,35496,35690,35116,35054 +.value 33712,33394,32820,33270,33976,34170,34620,34558 +.value 43456,43010,43588,43910,44744,44810,44364,44174 +.value 42960,42514,42068,42390,41176,41242,41820,41630 +.value 46560,46114,46692,47014,45800,45866,45420,45230 +.value 48112,47666,47220,47542,48376,48442,49020,48830 +.byte 71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67 +.byte 82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112 +.byte 112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62 +.byte 0 diff --git a/chromium/third_party/openssl/openssl/crypto/pkcs7/pk7_doit.c b/chromium/third_party/openssl/openssl/crypto/pkcs7/pk7_doit.c index 77fda3b82a0..4c12a9dcc9d 100644 --- a/chromium/third_party/openssl/openssl/crypto/pkcs7/pk7_doit.c +++ b/chromium/third_party/openssl/openssl/crypto/pkcs7/pk7_doit.c @@ -928,6 +928,7 @@ int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si) if (EVP_DigestSignUpdate(&mctx,abuf,alen) <= 0) goto err; OPENSSL_free(abuf); + abuf = NULL; if (EVP_DigestSignFinal(&mctx, NULL, &siglen) <= 0) goto err; abuf = OPENSSL_malloc(siglen); diff --git a/chromium/third_party/openssl/openssl/crypto/sha/asm/sha1-586-mac.S b/chromium/third_party/openssl/openssl/crypto/sha/asm/sha1-586-mac.S new file mode 100644 index 00000000000..b843b8007f1 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/sha/asm/sha1-586-mac.S @@ -0,0 +1,1378 @@ +.file "sha1-586.s" +.text +.globl _sha1_block_data_order +.align 4 +_sha1_block_data_order: +L_sha1_block_data_order_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%ebp + movl 24(%esp),%esi + movl 28(%esp),%eax + subl $76,%esp + shll $6,%eax + addl %esi,%eax + movl %eax,104(%esp) + movl 16(%ebp),%edi + jmp L000loop +.align 4,0x90 +L000loop: + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,(%esp) + movl %ebx,4(%esp) + movl %ecx,8(%esp) + movl %edx,12(%esp) + movl 16(%esi),%eax + movl 20(%esi),%ebx + movl 24(%esi),%ecx + movl 28(%esi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,16(%esp) + movl %ebx,20(%esp) + movl %ecx,24(%esp) + movl %edx,28(%esp) + movl 32(%esi),%eax + movl 36(%esi),%ebx + movl 40(%esi),%ecx + movl 44(%esi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,32(%esp) + movl %ebx,36(%esp) + movl %ecx,40(%esp) + movl %edx,44(%esp) + movl 48(%esi),%eax + movl 52(%esi),%ebx + movl 56(%esi),%ecx + movl 60(%esi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,48(%esp) + movl %ebx,52(%esp) + movl %ecx,56(%esp) + movl %edx,60(%esp) + movl %esi,100(%esp) + movl (%ebp),%eax + movl 4(%ebp),%ebx + movl 8(%ebp),%ecx + movl 12(%ebp),%edx + # 00_15 0 + movl %ecx,%esi + movl %eax,%ebp + roll $5,%ebp + xorl %edx,%esi + addl %edi,%ebp + movl (%esp),%edi + andl %ebx,%esi + rorl $2,%ebx + xorl %edx,%esi + leal 1518500249(%ebp,%edi,1),%ebp + addl %esi,%ebp + # 00_15 1 + movl %ebx,%edi + movl %ebp,%esi + roll $5,%ebp + xorl %ecx,%edi + addl %edx,%ebp + movl 4(%esp),%edx + andl %eax,%edi + rorl $2,%eax + xorl %ecx,%edi + leal 1518500249(%ebp,%edx,1),%ebp + addl %edi,%ebp + # 00_15 2 + movl %eax,%edx + movl %ebp,%edi + roll $5,%ebp + xorl %ebx,%edx + addl %ecx,%ebp + movl 8(%esp),%ecx + andl %esi,%edx + rorl $2,%esi + xorl %ebx,%edx + leal 1518500249(%ebp,%ecx,1),%ebp + addl %edx,%ebp + # 00_15 3 + movl %esi,%ecx + movl %ebp,%edx + roll $5,%ebp + xorl %eax,%ecx + addl %ebx,%ebp + movl 12(%esp),%ebx + andl %edi,%ecx + rorl $2,%edi + xorl %eax,%ecx + leal 1518500249(%ebp,%ebx,1),%ebp + addl %ecx,%ebp + # 00_15 4 + movl %edi,%ebx + movl %ebp,%ecx + roll $5,%ebp + xorl %esi,%ebx + addl %eax,%ebp + movl 16(%esp),%eax + andl %edx,%ebx + rorl $2,%edx + xorl %esi,%ebx + leal 1518500249(%ebp,%eax,1),%ebp + addl %ebx,%ebp + # 00_15 5 + movl %edx,%eax + movl %ebp,%ebx + roll $5,%ebp + xorl %edi,%eax + addl %esi,%ebp + movl 20(%esp),%esi + andl %ecx,%eax + rorl $2,%ecx + xorl %edi,%eax + leal 1518500249(%ebp,%esi,1),%ebp + addl %eax,%ebp + # 00_15 6 + movl %ecx,%esi + movl %ebp,%eax + roll $5,%ebp + xorl %edx,%esi + addl %edi,%ebp + movl 24(%esp),%edi + andl %ebx,%esi + rorl $2,%ebx + xorl %edx,%esi + leal 1518500249(%ebp,%edi,1),%ebp + addl %esi,%ebp + # 00_15 7 + movl %ebx,%edi + movl %ebp,%esi + roll $5,%ebp + xorl %ecx,%edi + addl %edx,%ebp + movl 28(%esp),%edx + andl %eax,%edi + rorl $2,%eax + xorl %ecx,%edi + leal 1518500249(%ebp,%edx,1),%ebp + addl %edi,%ebp + # 00_15 8 + movl %eax,%edx + movl %ebp,%edi + roll $5,%ebp + xorl %ebx,%edx + addl %ecx,%ebp + movl 32(%esp),%ecx + andl %esi,%edx + rorl $2,%esi + xorl %ebx,%edx + leal 1518500249(%ebp,%ecx,1),%ebp + addl %edx,%ebp + # 00_15 9 + movl %esi,%ecx + movl %ebp,%edx + roll $5,%ebp + xorl %eax,%ecx + addl %ebx,%ebp + movl 36(%esp),%ebx + andl %edi,%ecx + rorl $2,%edi + xorl %eax,%ecx + leal 1518500249(%ebp,%ebx,1),%ebp + addl %ecx,%ebp + # 00_15 10 + movl %edi,%ebx + movl %ebp,%ecx + roll $5,%ebp + xorl %esi,%ebx + addl %eax,%ebp + movl 40(%esp),%eax + andl %edx,%ebx + rorl $2,%edx + xorl %esi,%ebx + leal 1518500249(%ebp,%eax,1),%ebp + addl %ebx,%ebp + # 00_15 11 + movl %edx,%eax + movl %ebp,%ebx + roll $5,%ebp + xorl %edi,%eax + addl %esi,%ebp + movl 44(%esp),%esi + andl %ecx,%eax + rorl $2,%ecx + xorl %edi,%eax + leal 1518500249(%ebp,%esi,1),%ebp + addl %eax,%ebp + # 00_15 12 + movl %ecx,%esi + movl %ebp,%eax + roll $5,%ebp + xorl %edx,%esi + addl %edi,%ebp + movl 48(%esp),%edi + andl %ebx,%esi + rorl $2,%ebx + xorl %edx,%esi + leal 1518500249(%ebp,%edi,1),%ebp + addl %esi,%ebp + # 00_15 13 + movl %ebx,%edi + movl %ebp,%esi + roll $5,%ebp + xorl %ecx,%edi + addl %edx,%ebp + movl 52(%esp),%edx + andl %eax,%edi + rorl $2,%eax + xorl %ecx,%edi + leal 1518500249(%ebp,%edx,1),%ebp + addl %edi,%ebp + # 00_15 14 + movl %eax,%edx + movl %ebp,%edi + roll $5,%ebp + xorl %ebx,%edx + addl %ecx,%ebp + movl 56(%esp),%ecx + andl %esi,%edx + rorl $2,%esi + xorl %ebx,%edx + leal 1518500249(%ebp,%ecx,1),%ebp + addl %edx,%ebp + # 00_15 15 + movl %esi,%ecx + movl %ebp,%edx + roll $5,%ebp + xorl %eax,%ecx + addl %ebx,%ebp + movl 60(%esp),%ebx + andl %edi,%ecx + rorl $2,%edi + xorl %eax,%ecx + leal 1518500249(%ebp,%ebx,1),%ebp + movl (%esp),%ebx + addl %ebp,%ecx + # 16_19 16 + movl %edi,%ebp + xorl 8(%esp),%ebx + xorl %esi,%ebp + xorl 32(%esp),%ebx + andl %edx,%ebp + xorl 52(%esp),%ebx + roll $1,%ebx + xorl %esi,%ebp + addl %ebp,%eax + movl %ecx,%ebp + rorl $2,%edx + movl %ebx,(%esp) + roll $5,%ebp + leal 1518500249(%ebx,%eax,1),%ebx + movl 4(%esp),%eax + addl %ebp,%ebx + # 16_19 17 + movl %edx,%ebp + xorl 12(%esp),%eax + xorl %edi,%ebp + xorl 36(%esp),%eax + andl %ecx,%ebp + xorl 56(%esp),%eax + roll $1,%eax + xorl %edi,%ebp + addl %ebp,%esi + movl %ebx,%ebp + rorl $2,%ecx + movl %eax,4(%esp) + roll $5,%ebp + leal 1518500249(%eax,%esi,1),%eax + movl 8(%esp),%esi + addl %ebp,%eax + # 16_19 18 + movl %ecx,%ebp + xorl 16(%esp),%esi + xorl %edx,%ebp + xorl 40(%esp),%esi + andl %ebx,%ebp + xorl 60(%esp),%esi + roll $1,%esi + xorl %edx,%ebp + addl %ebp,%edi + movl %eax,%ebp + rorl $2,%ebx + movl %esi,8(%esp) + roll $5,%ebp + leal 1518500249(%esi,%edi,1),%esi + movl 12(%esp),%edi + addl %ebp,%esi + # 16_19 19 + movl %ebx,%ebp + xorl 20(%esp),%edi + xorl %ecx,%ebp + xorl 44(%esp),%edi + andl %eax,%ebp + xorl (%esp),%edi + roll $1,%edi + xorl %ecx,%ebp + addl %ebp,%edx + movl %esi,%ebp + rorl $2,%eax + movl %edi,12(%esp) + roll $5,%ebp + leal 1518500249(%edi,%edx,1),%edi + movl 16(%esp),%edx + addl %ebp,%edi + # 20_39 20 + movl %esi,%ebp + xorl 24(%esp),%edx + xorl %eax,%ebp + xorl 48(%esp),%edx + xorl %ebx,%ebp + xorl 4(%esp),%edx + roll $1,%edx + addl %ebp,%ecx + rorl $2,%esi + movl %edi,%ebp + roll $5,%ebp + movl %edx,16(%esp) + leal 1859775393(%edx,%ecx,1),%edx + movl 20(%esp),%ecx + addl %ebp,%edx + # 20_39 21 + movl %edi,%ebp + xorl 28(%esp),%ecx + xorl %esi,%ebp + xorl 52(%esp),%ecx + xorl %eax,%ebp + xorl 8(%esp),%ecx + roll $1,%ecx + addl %ebp,%ebx + rorl $2,%edi + movl %edx,%ebp + roll $5,%ebp + movl %ecx,20(%esp) + leal 1859775393(%ecx,%ebx,1),%ecx + movl 24(%esp),%ebx + addl %ebp,%ecx + # 20_39 22 + movl %edx,%ebp + xorl 32(%esp),%ebx + xorl %edi,%ebp + xorl 56(%esp),%ebx + xorl %esi,%ebp + xorl 12(%esp),%ebx + roll $1,%ebx + addl %ebp,%eax + rorl $2,%edx + movl %ecx,%ebp + roll $5,%ebp + movl %ebx,24(%esp) + leal 1859775393(%ebx,%eax,1),%ebx + movl 28(%esp),%eax + addl %ebp,%ebx + # 20_39 23 + movl %ecx,%ebp + xorl 36(%esp),%eax + xorl %edx,%ebp + xorl 60(%esp),%eax + xorl %edi,%ebp + xorl 16(%esp),%eax + roll $1,%eax + addl %ebp,%esi + rorl $2,%ecx + movl %ebx,%ebp + roll $5,%ebp + movl %eax,28(%esp) + leal 1859775393(%eax,%esi,1),%eax + movl 32(%esp),%esi + addl %ebp,%eax + # 20_39 24 + movl %ebx,%ebp + xorl 40(%esp),%esi + xorl %ecx,%ebp + xorl (%esp),%esi + xorl %edx,%ebp + xorl 20(%esp),%esi + roll $1,%esi + addl %ebp,%edi + rorl $2,%ebx + movl %eax,%ebp + roll $5,%ebp + movl %esi,32(%esp) + leal 1859775393(%esi,%edi,1),%esi + movl 36(%esp),%edi + addl %ebp,%esi + # 20_39 25 + movl %eax,%ebp + xorl 44(%esp),%edi + xorl %ebx,%ebp + xorl 4(%esp),%edi + xorl %ecx,%ebp + xorl 24(%esp),%edi + roll $1,%edi + addl %ebp,%edx + rorl $2,%eax + movl %esi,%ebp + roll $5,%ebp + movl %edi,36(%esp) + leal 1859775393(%edi,%edx,1),%edi + movl 40(%esp),%edx + addl %ebp,%edi + # 20_39 26 + movl %esi,%ebp + xorl 48(%esp),%edx + xorl %eax,%ebp + xorl 8(%esp),%edx + xorl %ebx,%ebp + xorl 28(%esp),%edx + roll $1,%edx + addl %ebp,%ecx + rorl $2,%esi + movl %edi,%ebp + roll $5,%ebp + movl %edx,40(%esp) + leal 1859775393(%edx,%ecx,1),%edx + movl 44(%esp),%ecx + addl %ebp,%edx + # 20_39 27 + movl %edi,%ebp + xorl 52(%esp),%ecx + xorl %esi,%ebp + xorl 12(%esp),%ecx + xorl %eax,%ebp + xorl 32(%esp),%ecx + roll $1,%ecx + addl %ebp,%ebx + rorl $2,%edi + movl %edx,%ebp + roll $5,%ebp + movl %ecx,44(%esp) + leal 1859775393(%ecx,%ebx,1),%ecx + movl 48(%esp),%ebx + addl %ebp,%ecx + # 20_39 28 + movl %edx,%ebp + xorl 56(%esp),%ebx + xorl %edi,%ebp + xorl 16(%esp),%ebx + xorl %esi,%ebp + xorl 36(%esp),%ebx + roll $1,%ebx + addl %ebp,%eax + rorl $2,%edx + movl %ecx,%ebp + roll $5,%ebp + movl %ebx,48(%esp) + leal 1859775393(%ebx,%eax,1),%ebx + movl 52(%esp),%eax + addl %ebp,%ebx + # 20_39 29 + movl %ecx,%ebp + xorl 60(%esp),%eax + xorl %edx,%ebp + xorl 20(%esp),%eax + xorl %edi,%ebp + xorl 40(%esp),%eax + roll $1,%eax + addl %ebp,%esi + rorl $2,%ecx + movl %ebx,%ebp + roll $5,%ebp + movl %eax,52(%esp) + leal 1859775393(%eax,%esi,1),%eax + movl 56(%esp),%esi + addl %ebp,%eax + # 20_39 30 + movl %ebx,%ebp + xorl (%esp),%esi + xorl %ecx,%ebp + xorl 24(%esp),%esi + xorl %edx,%ebp + xorl 44(%esp),%esi + roll $1,%esi + addl %ebp,%edi + rorl $2,%ebx + movl %eax,%ebp + roll $5,%ebp + movl %esi,56(%esp) + leal 1859775393(%esi,%edi,1),%esi + movl 60(%esp),%edi + addl %ebp,%esi + # 20_39 31 + movl %eax,%ebp + xorl 4(%esp),%edi + xorl %ebx,%ebp + xorl 28(%esp),%edi + xorl %ecx,%ebp + xorl 48(%esp),%edi + roll $1,%edi + addl %ebp,%edx + rorl $2,%eax + movl %esi,%ebp + roll $5,%ebp + movl %edi,60(%esp) + leal 1859775393(%edi,%edx,1),%edi + movl (%esp),%edx + addl %ebp,%edi + # 20_39 32 + movl %esi,%ebp + xorl 8(%esp),%edx + xorl %eax,%ebp + xorl 32(%esp),%edx + xorl %ebx,%ebp + xorl 52(%esp),%edx + roll $1,%edx + addl %ebp,%ecx + rorl $2,%esi + movl %edi,%ebp + roll $5,%ebp + movl %edx,(%esp) + leal 1859775393(%edx,%ecx,1),%edx + movl 4(%esp),%ecx + addl %ebp,%edx + # 20_39 33 + movl %edi,%ebp + xorl 12(%esp),%ecx + xorl %esi,%ebp + xorl 36(%esp),%ecx + xorl %eax,%ebp + xorl 56(%esp),%ecx + roll $1,%ecx + addl %ebp,%ebx + rorl $2,%edi + movl %edx,%ebp + roll $5,%ebp + movl %ecx,4(%esp) + leal 1859775393(%ecx,%ebx,1),%ecx + movl 8(%esp),%ebx + addl %ebp,%ecx + # 20_39 34 + movl %edx,%ebp + xorl 16(%esp),%ebx + xorl %edi,%ebp + xorl 40(%esp),%ebx + xorl %esi,%ebp + xorl 60(%esp),%ebx + roll $1,%ebx + addl %ebp,%eax + rorl $2,%edx + movl %ecx,%ebp + roll $5,%ebp + movl %ebx,8(%esp) + leal 1859775393(%ebx,%eax,1),%ebx + movl 12(%esp),%eax + addl %ebp,%ebx + # 20_39 35 + movl %ecx,%ebp + xorl 20(%esp),%eax + xorl %edx,%ebp + xorl 44(%esp),%eax + xorl %edi,%ebp + xorl (%esp),%eax + roll $1,%eax + addl %ebp,%esi + rorl $2,%ecx + movl %ebx,%ebp + roll $5,%ebp + movl %eax,12(%esp) + leal 1859775393(%eax,%esi,1),%eax + movl 16(%esp),%esi + addl %ebp,%eax + # 20_39 36 + movl %ebx,%ebp + xorl 24(%esp),%esi + xorl %ecx,%ebp + xorl 48(%esp),%esi + xorl %edx,%ebp + xorl 4(%esp),%esi + roll $1,%esi + addl %ebp,%edi + rorl $2,%ebx + movl %eax,%ebp + roll $5,%ebp + movl %esi,16(%esp) + leal 1859775393(%esi,%edi,1),%esi + movl 20(%esp),%edi + addl %ebp,%esi + # 20_39 37 + movl %eax,%ebp + xorl 28(%esp),%edi + xorl %ebx,%ebp + xorl 52(%esp),%edi + xorl %ecx,%ebp + xorl 8(%esp),%edi + roll $1,%edi + addl %ebp,%edx + rorl $2,%eax + movl %esi,%ebp + roll $5,%ebp + movl %edi,20(%esp) + leal 1859775393(%edi,%edx,1),%edi + movl 24(%esp),%edx + addl %ebp,%edi + # 20_39 38 + movl %esi,%ebp + xorl 32(%esp),%edx + xorl %eax,%ebp + xorl 56(%esp),%edx + xorl %ebx,%ebp + xorl 12(%esp),%edx + roll $1,%edx + addl %ebp,%ecx + rorl $2,%esi + movl %edi,%ebp + roll $5,%ebp + movl %edx,24(%esp) + leal 1859775393(%edx,%ecx,1),%edx + movl 28(%esp),%ecx + addl %ebp,%edx + # 20_39 39 + movl %edi,%ebp + xorl 36(%esp),%ecx + xorl %esi,%ebp + xorl 60(%esp),%ecx + xorl %eax,%ebp + xorl 16(%esp),%ecx + roll $1,%ecx + addl %ebp,%ebx + rorl $2,%edi + movl %edx,%ebp + roll $5,%ebp + movl %ecx,28(%esp) + leal 1859775393(%ecx,%ebx,1),%ecx + movl 32(%esp),%ebx + addl %ebp,%ecx + # 40_59 40 + movl %edi,%ebp + xorl 40(%esp),%ebx + xorl %esi,%ebp + xorl (%esp),%ebx + andl %edx,%ebp + xorl 20(%esp),%ebx + roll $1,%ebx + addl %eax,%ebp + rorl $2,%edx + movl %ecx,%eax + roll $5,%eax + movl %ebx,32(%esp) + leal 2400959708(%ebx,%ebp,1),%ebx + movl %edi,%ebp + addl %eax,%ebx + andl %esi,%ebp + movl 36(%esp),%eax + addl %ebp,%ebx + # 40_59 41 + movl %edx,%ebp + xorl 44(%esp),%eax + xorl %edi,%ebp + xorl 4(%esp),%eax + andl %ecx,%ebp + xorl 24(%esp),%eax + roll $1,%eax + addl %esi,%ebp + rorl $2,%ecx + movl %ebx,%esi + roll $5,%esi + movl %eax,36(%esp) + leal 2400959708(%eax,%ebp,1),%eax + movl %edx,%ebp + addl %esi,%eax + andl %edi,%ebp + movl 40(%esp),%esi + addl %ebp,%eax + # 40_59 42 + movl %ecx,%ebp + xorl 48(%esp),%esi + xorl %edx,%ebp + xorl 8(%esp),%esi + andl %ebx,%ebp + xorl 28(%esp),%esi + roll $1,%esi + addl %edi,%ebp + rorl $2,%ebx + movl %eax,%edi + roll $5,%edi + movl %esi,40(%esp) + leal 2400959708(%esi,%ebp,1),%esi + movl %ecx,%ebp + addl %edi,%esi + andl %edx,%ebp + movl 44(%esp),%edi + addl %ebp,%esi + # 40_59 43 + movl %ebx,%ebp + xorl 52(%esp),%edi + xorl %ecx,%ebp + xorl 12(%esp),%edi + andl %eax,%ebp + xorl 32(%esp),%edi + roll $1,%edi + addl %edx,%ebp + rorl $2,%eax + movl %esi,%edx + roll $5,%edx + movl %edi,44(%esp) + leal 2400959708(%edi,%ebp,1),%edi + movl %ebx,%ebp + addl %edx,%edi + andl %ecx,%ebp + movl 48(%esp),%edx + addl %ebp,%edi + # 40_59 44 + movl %eax,%ebp + xorl 56(%esp),%edx + xorl %ebx,%ebp + xorl 16(%esp),%edx + andl %esi,%ebp + xorl 36(%esp),%edx + roll $1,%edx + addl %ecx,%ebp + rorl $2,%esi + movl %edi,%ecx + roll $5,%ecx + movl %edx,48(%esp) + leal 2400959708(%edx,%ebp,1),%edx + movl %eax,%ebp + addl %ecx,%edx + andl %ebx,%ebp + movl 52(%esp),%ecx + addl %ebp,%edx + # 40_59 45 + movl %esi,%ebp + xorl 60(%esp),%ecx + xorl %eax,%ebp + xorl 20(%esp),%ecx + andl %edi,%ebp + xorl 40(%esp),%ecx + roll $1,%ecx + addl %ebx,%ebp + rorl $2,%edi + movl %edx,%ebx + roll $5,%ebx + movl %ecx,52(%esp) + leal 2400959708(%ecx,%ebp,1),%ecx + movl %esi,%ebp + addl %ebx,%ecx + andl %eax,%ebp + movl 56(%esp),%ebx + addl %ebp,%ecx + # 40_59 46 + movl %edi,%ebp + xorl (%esp),%ebx + xorl %esi,%ebp + xorl 24(%esp),%ebx + andl %edx,%ebp + xorl 44(%esp),%ebx + roll $1,%ebx + addl %eax,%ebp + rorl $2,%edx + movl %ecx,%eax + roll $5,%eax + movl %ebx,56(%esp) + leal 2400959708(%ebx,%ebp,1),%ebx + movl %edi,%ebp + addl %eax,%ebx + andl %esi,%ebp + movl 60(%esp),%eax + addl %ebp,%ebx + # 40_59 47 + movl %edx,%ebp + xorl 4(%esp),%eax + xorl %edi,%ebp + xorl 28(%esp),%eax + andl %ecx,%ebp + xorl 48(%esp),%eax + roll $1,%eax + addl %esi,%ebp + rorl $2,%ecx + movl %ebx,%esi + roll $5,%esi + movl %eax,60(%esp) + leal 2400959708(%eax,%ebp,1),%eax + movl %edx,%ebp + addl %esi,%eax + andl %edi,%ebp + movl (%esp),%esi + addl %ebp,%eax + # 40_59 48 + movl %ecx,%ebp + xorl 8(%esp),%esi + xorl %edx,%ebp + xorl 32(%esp),%esi + andl %ebx,%ebp + xorl 52(%esp),%esi + roll $1,%esi + addl %edi,%ebp + rorl $2,%ebx + movl %eax,%edi + roll $5,%edi + movl %esi,(%esp) + leal 2400959708(%esi,%ebp,1),%esi + movl %ecx,%ebp + addl %edi,%esi + andl %edx,%ebp + movl 4(%esp),%edi + addl %ebp,%esi + # 40_59 49 + movl %ebx,%ebp + xorl 12(%esp),%edi + xorl %ecx,%ebp + xorl 36(%esp),%edi + andl %eax,%ebp + xorl 56(%esp),%edi + roll $1,%edi + addl %edx,%ebp + rorl $2,%eax + movl %esi,%edx + roll $5,%edx + movl %edi,4(%esp) + leal 2400959708(%edi,%ebp,1),%edi + movl %ebx,%ebp + addl %edx,%edi + andl %ecx,%ebp + movl 8(%esp),%edx + addl %ebp,%edi + # 40_59 50 + movl %eax,%ebp + xorl 16(%esp),%edx + xorl %ebx,%ebp + xorl 40(%esp),%edx + andl %esi,%ebp + xorl 60(%esp),%edx + roll $1,%edx + addl %ecx,%ebp + rorl $2,%esi + movl %edi,%ecx + roll $5,%ecx + movl %edx,8(%esp) + leal 2400959708(%edx,%ebp,1),%edx + movl %eax,%ebp + addl %ecx,%edx + andl %ebx,%ebp + movl 12(%esp),%ecx + addl %ebp,%edx + # 40_59 51 + movl %esi,%ebp + xorl 20(%esp),%ecx + xorl %eax,%ebp + xorl 44(%esp),%ecx + andl %edi,%ebp + xorl (%esp),%ecx + roll $1,%ecx + addl %ebx,%ebp + rorl $2,%edi + movl %edx,%ebx + roll $5,%ebx + movl %ecx,12(%esp) + leal 2400959708(%ecx,%ebp,1),%ecx + movl %esi,%ebp + addl %ebx,%ecx + andl %eax,%ebp + movl 16(%esp),%ebx + addl %ebp,%ecx + # 40_59 52 + movl %edi,%ebp + xorl 24(%esp),%ebx + xorl %esi,%ebp + xorl 48(%esp),%ebx + andl %edx,%ebp + xorl 4(%esp),%ebx + roll $1,%ebx + addl %eax,%ebp + rorl $2,%edx + movl %ecx,%eax + roll $5,%eax + movl %ebx,16(%esp) + leal 2400959708(%ebx,%ebp,1),%ebx + movl %edi,%ebp + addl %eax,%ebx + andl %esi,%ebp + movl 20(%esp),%eax + addl %ebp,%ebx + # 40_59 53 + movl %edx,%ebp + xorl 28(%esp),%eax + xorl %edi,%ebp + xorl 52(%esp),%eax + andl %ecx,%ebp + xorl 8(%esp),%eax + roll $1,%eax + addl %esi,%ebp + rorl $2,%ecx + movl %ebx,%esi + roll $5,%esi + movl %eax,20(%esp) + leal 2400959708(%eax,%ebp,1),%eax + movl %edx,%ebp + addl %esi,%eax + andl %edi,%ebp + movl 24(%esp),%esi + addl %ebp,%eax + # 40_59 54 + movl %ecx,%ebp + xorl 32(%esp),%esi + xorl %edx,%ebp + xorl 56(%esp),%esi + andl %ebx,%ebp + xorl 12(%esp),%esi + roll $1,%esi + addl %edi,%ebp + rorl $2,%ebx + movl %eax,%edi + roll $5,%edi + movl %esi,24(%esp) + leal 2400959708(%esi,%ebp,1),%esi + movl %ecx,%ebp + addl %edi,%esi + andl %edx,%ebp + movl 28(%esp),%edi + addl %ebp,%esi + # 40_59 55 + movl %ebx,%ebp + xorl 36(%esp),%edi + xorl %ecx,%ebp + xorl 60(%esp),%edi + andl %eax,%ebp + xorl 16(%esp),%edi + roll $1,%edi + addl %edx,%ebp + rorl $2,%eax + movl %esi,%edx + roll $5,%edx + movl %edi,28(%esp) + leal 2400959708(%edi,%ebp,1),%edi + movl %ebx,%ebp + addl %edx,%edi + andl %ecx,%ebp + movl 32(%esp),%edx + addl %ebp,%edi + # 40_59 56 + movl %eax,%ebp + xorl 40(%esp),%edx + xorl %ebx,%ebp + xorl (%esp),%edx + andl %esi,%ebp + xorl 20(%esp),%edx + roll $1,%edx + addl %ecx,%ebp + rorl $2,%esi + movl %edi,%ecx + roll $5,%ecx + movl %edx,32(%esp) + leal 2400959708(%edx,%ebp,1),%edx + movl %eax,%ebp + addl %ecx,%edx + andl %ebx,%ebp + movl 36(%esp),%ecx + addl %ebp,%edx + # 40_59 57 + movl %esi,%ebp + xorl 44(%esp),%ecx + xorl %eax,%ebp + xorl 4(%esp),%ecx + andl %edi,%ebp + xorl 24(%esp),%ecx + roll $1,%ecx + addl %ebx,%ebp + rorl $2,%edi + movl %edx,%ebx + roll $5,%ebx + movl %ecx,36(%esp) + leal 2400959708(%ecx,%ebp,1),%ecx + movl %esi,%ebp + addl %ebx,%ecx + andl %eax,%ebp + movl 40(%esp),%ebx + addl %ebp,%ecx + # 40_59 58 + movl %edi,%ebp + xorl 48(%esp),%ebx + xorl %esi,%ebp + xorl 8(%esp),%ebx + andl %edx,%ebp + xorl 28(%esp),%ebx + roll $1,%ebx + addl %eax,%ebp + rorl $2,%edx + movl %ecx,%eax + roll $5,%eax + movl %ebx,40(%esp) + leal 2400959708(%ebx,%ebp,1),%ebx + movl %edi,%ebp + addl %eax,%ebx + andl %esi,%ebp + movl 44(%esp),%eax + addl %ebp,%ebx + # 40_59 59 + movl %edx,%ebp + xorl 52(%esp),%eax + xorl %edi,%ebp + xorl 12(%esp),%eax + andl %ecx,%ebp + xorl 32(%esp),%eax + roll $1,%eax + addl %esi,%ebp + rorl $2,%ecx + movl %ebx,%esi + roll $5,%esi + movl %eax,44(%esp) + leal 2400959708(%eax,%ebp,1),%eax + movl %edx,%ebp + addl %esi,%eax + andl %edi,%ebp + movl 48(%esp),%esi + addl %ebp,%eax + # 20_39 60 + movl %ebx,%ebp + xorl 56(%esp),%esi + xorl %ecx,%ebp + xorl 16(%esp),%esi + xorl %edx,%ebp + xorl 36(%esp),%esi + roll $1,%esi + addl %ebp,%edi + rorl $2,%ebx + movl %eax,%ebp + roll $5,%ebp + movl %esi,48(%esp) + leal 3395469782(%esi,%edi,1),%esi + movl 52(%esp),%edi + addl %ebp,%esi + # 20_39 61 + movl %eax,%ebp + xorl 60(%esp),%edi + xorl %ebx,%ebp + xorl 20(%esp),%edi + xorl %ecx,%ebp + xorl 40(%esp),%edi + roll $1,%edi + addl %ebp,%edx + rorl $2,%eax + movl %esi,%ebp + roll $5,%ebp + movl %edi,52(%esp) + leal 3395469782(%edi,%edx,1),%edi + movl 56(%esp),%edx + addl %ebp,%edi + # 20_39 62 + movl %esi,%ebp + xorl (%esp),%edx + xorl %eax,%ebp + xorl 24(%esp),%edx + xorl %ebx,%ebp + xorl 44(%esp),%edx + roll $1,%edx + addl %ebp,%ecx + rorl $2,%esi + movl %edi,%ebp + roll $5,%ebp + movl %edx,56(%esp) + leal 3395469782(%edx,%ecx,1),%edx + movl 60(%esp),%ecx + addl %ebp,%edx + # 20_39 63 + movl %edi,%ebp + xorl 4(%esp),%ecx + xorl %esi,%ebp + xorl 28(%esp),%ecx + xorl %eax,%ebp + xorl 48(%esp),%ecx + roll $1,%ecx + addl %ebp,%ebx + rorl $2,%edi + movl %edx,%ebp + roll $5,%ebp + movl %ecx,60(%esp) + leal 3395469782(%ecx,%ebx,1),%ecx + movl (%esp),%ebx + addl %ebp,%ecx + # 20_39 64 + movl %edx,%ebp + xorl 8(%esp),%ebx + xorl %edi,%ebp + xorl 32(%esp),%ebx + xorl %esi,%ebp + xorl 52(%esp),%ebx + roll $1,%ebx + addl %ebp,%eax + rorl $2,%edx + movl %ecx,%ebp + roll $5,%ebp + movl %ebx,(%esp) + leal 3395469782(%ebx,%eax,1),%ebx + movl 4(%esp),%eax + addl %ebp,%ebx + # 20_39 65 + movl %ecx,%ebp + xorl 12(%esp),%eax + xorl %edx,%ebp + xorl 36(%esp),%eax + xorl %edi,%ebp + xorl 56(%esp),%eax + roll $1,%eax + addl %ebp,%esi + rorl $2,%ecx + movl %ebx,%ebp + roll $5,%ebp + movl %eax,4(%esp) + leal 3395469782(%eax,%esi,1),%eax + movl 8(%esp),%esi + addl %ebp,%eax + # 20_39 66 + movl %ebx,%ebp + xorl 16(%esp),%esi + xorl %ecx,%ebp + xorl 40(%esp),%esi + xorl %edx,%ebp + xorl 60(%esp),%esi + roll $1,%esi + addl %ebp,%edi + rorl $2,%ebx + movl %eax,%ebp + roll $5,%ebp + movl %esi,8(%esp) + leal 3395469782(%esi,%edi,1),%esi + movl 12(%esp),%edi + addl %ebp,%esi + # 20_39 67 + movl %eax,%ebp + xorl 20(%esp),%edi + xorl %ebx,%ebp + xorl 44(%esp),%edi + xorl %ecx,%ebp + xorl (%esp),%edi + roll $1,%edi + addl %ebp,%edx + rorl $2,%eax + movl %esi,%ebp + roll $5,%ebp + movl %edi,12(%esp) + leal 3395469782(%edi,%edx,1),%edi + movl 16(%esp),%edx + addl %ebp,%edi + # 20_39 68 + movl %esi,%ebp + xorl 24(%esp),%edx + xorl %eax,%ebp + xorl 48(%esp),%edx + xorl %ebx,%ebp + xorl 4(%esp),%edx + roll $1,%edx + addl %ebp,%ecx + rorl $2,%esi + movl %edi,%ebp + roll $5,%ebp + movl %edx,16(%esp) + leal 3395469782(%edx,%ecx,1),%edx + movl 20(%esp),%ecx + addl %ebp,%edx + # 20_39 69 + movl %edi,%ebp + xorl 28(%esp),%ecx + xorl %esi,%ebp + xorl 52(%esp),%ecx + xorl %eax,%ebp + xorl 8(%esp),%ecx + roll $1,%ecx + addl %ebp,%ebx + rorl $2,%edi + movl %edx,%ebp + roll $5,%ebp + movl %ecx,20(%esp) + leal 3395469782(%ecx,%ebx,1),%ecx + movl 24(%esp),%ebx + addl %ebp,%ecx + # 20_39 70 + movl %edx,%ebp + xorl 32(%esp),%ebx + xorl %edi,%ebp + xorl 56(%esp),%ebx + xorl %esi,%ebp + xorl 12(%esp),%ebx + roll $1,%ebx + addl %ebp,%eax + rorl $2,%edx + movl %ecx,%ebp + roll $5,%ebp + movl %ebx,24(%esp) + leal 3395469782(%ebx,%eax,1),%ebx + movl 28(%esp),%eax + addl %ebp,%ebx + # 20_39 71 + movl %ecx,%ebp + xorl 36(%esp),%eax + xorl %edx,%ebp + xorl 60(%esp),%eax + xorl %edi,%ebp + xorl 16(%esp),%eax + roll $1,%eax + addl %ebp,%esi + rorl $2,%ecx + movl %ebx,%ebp + roll $5,%ebp + movl %eax,28(%esp) + leal 3395469782(%eax,%esi,1),%eax + movl 32(%esp),%esi + addl %ebp,%eax + # 20_39 72 + movl %ebx,%ebp + xorl 40(%esp),%esi + xorl %ecx,%ebp + xorl (%esp),%esi + xorl %edx,%ebp + xorl 20(%esp),%esi + roll $1,%esi + addl %ebp,%edi + rorl $2,%ebx + movl %eax,%ebp + roll $5,%ebp + movl %esi,32(%esp) + leal 3395469782(%esi,%edi,1),%esi + movl 36(%esp),%edi + addl %ebp,%esi + # 20_39 73 + movl %eax,%ebp + xorl 44(%esp),%edi + xorl %ebx,%ebp + xorl 4(%esp),%edi + xorl %ecx,%ebp + xorl 24(%esp),%edi + roll $1,%edi + addl %ebp,%edx + rorl $2,%eax + movl %esi,%ebp + roll $5,%ebp + movl %edi,36(%esp) + leal 3395469782(%edi,%edx,1),%edi + movl 40(%esp),%edx + addl %ebp,%edi + # 20_39 74 + movl %esi,%ebp + xorl 48(%esp),%edx + xorl %eax,%ebp + xorl 8(%esp),%edx + xorl %ebx,%ebp + xorl 28(%esp),%edx + roll $1,%edx + addl %ebp,%ecx + rorl $2,%esi + movl %edi,%ebp + roll $5,%ebp + movl %edx,40(%esp) + leal 3395469782(%edx,%ecx,1),%edx + movl 44(%esp),%ecx + addl %ebp,%edx + # 20_39 75 + movl %edi,%ebp + xorl 52(%esp),%ecx + xorl %esi,%ebp + xorl 12(%esp),%ecx + xorl %eax,%ebp + xorl 32(%esp),%ecx + roll $1,%ecx + addl %ebp,%ebx + rorl $2,%edi + movl %edx,%ebp + roll $5,%ebp + movl %ecx,44(%esp) + leal 3395469782(%ecx,%ebx,1),%ecx + movl 48(%esp),%ebx + addl %ebp,%ecx + # 20_39 76 + movl %edx,%ebp + xorl 56(%esp),%ebx + xorl %edi,%ebp + xorl 16(%esp),%ebx + xorl %esi,%ebp + xorl 36(%esp),%ebx + roll $1,%ebx + addl %ebp,%eax + rorl $2,%edx + movl %ecx,%ebp + roll $5,%ebp + movl %ebx,48(%esp) + leal 3395469782(%ebx,%eax,1),%ebx + movl 52(%esp),%eax + addl %ebp,%ebx + # 20_39 77 + movl %ecx,%ebp + xorl 60(%esp),%eax + xorl %edx,%ebp + xorl 20(%esp),%eax + xorl %edi,%ebp + xorl 40(%esp),%eax + roll $1,%eax + addl %ebp,%esi + rorl $2,%ecx + movl %ebx,%ebp + roll $5,%ebp + leal 3395469782(%eax,%esi,1),%eax + movl 56(%esp),%esi + addl %ebp,%eax + # 20_39 78 + movl %ebx,%ebp + xorl (%esp),%esi + xorl %ecx,%ebp + xorl 24(%esp),%esi + xorl %edx,%ebp + xorl 44(%esp),%esi + roll $1,%esi + addl %ebp,%edi + rorl $2,%ebx + movl %eax,%ebp + roll $5,%ebp + leal 3395469782(%esi,%edi,1),%esi + movl 60(%esp),%edi + addl %ebp,%esi + # 20_39 79 + movl %eax,%ebp + xorl 4(%esp),%edi + xorl %ebx,%ebp + xorl 28(%esp),%edi + xorl %ecx,%ebp + xorl 48(%esp),%edi + roll $1,%edi + addl %ebp,%edx + rorl $2,%eax + movl %esi,%ebp + roll $5,%ebp + leal 3395469782(%edi,%edx,1),%edi + addl %ebp,%edi + movl 96(%esp),%ebp + movl 100(%esp),%edx + addl (%ebp),%edi + addl 4(%ebp),%esi + addl 8(%ebp),%eax + addl 12(%ebp),%ebx + addl 16(%ebp),%ecx + movl %edi,(%ebp) + addl $64,%edx + movl %esi,4(%ebp) + cmpl 104(%esp),%edx + movl %eax,8(%ebp) + movl %ecx,%edi + movl %ebx,12(%ebp) + movl %edx,%esi + movl %ecx,16(%ebp) + jb L000loop + addl $76,%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115 +.byte 102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82 +.byte 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 +.byte 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff --git a/chromium/third_party/openssl/openssl/crypto/sha/asm/sha256-586-mac.S b/chromium/third_party/openssl/openssl/crypto/sha/asm/sha256-586-mac.S new file mode 100644 index 00000000000..67c7a96bc02 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/sha/asm/sha256-586-mac.S @@ -0,0 +1,256 @@ +.file "sha512-586.s" +.text +.globl _sha256_block_data_order +.align 4 +_sha256_block_data_order: +L_sha256_block_data_order_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl %esp,%ebx + call L000pic_point +L000pic_point: + popl %ebp + leal L001K256-L000pic_point(%ebp),%ebp + subl $16,%esp + andl $-64,%esp + shll $6,%eax + addl %edi,%eax + movl %esi,(%esp) + movl %edi,4(%esp) + movl %eax,8(%esp) + movl %ebx,12(%esp) +.align 4,0x90 +L002loop: + movl (%edi),%eax + movl 4(%edi),%ebx + movl 8(%edi),%ecx + movl 12(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 16(%edi),%eax + movl 20(%edi),%ebx + movl 24(%edi),%ecx + movl 28(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 32(%edi),%eax + movl 36(%edi),%ebx + movl 40(%edi),%ecx + movl 44(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 48(%edi),%eax + movl 52(%edi),%ebx + movl 56(%edi),%ecx + movl 60(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + addl $64,%edi + subl $32,%esp + movl %edi,100(%esp) + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edi + movl %ebx,4(%esp) + movl %ecx,8(%esp) + movl %edi,12(%esp) + movl 16(%esi),%edx + movl 20(%esi),%ebx + movl 24(%esi),%ecx + movl 28(%esi),%edi + movl %ebx,20(%esp) + movl %ecx,24(%esp) + movl %edi,28(%esp) +.align 4,0x90 +L00300_15: + movl 92(%esp),%ebx + movl %edx,%ecx + rorl $14,%ecx + movl 20(%esp),%esi + xorl %edx,%ecx + rorl $5,%ecx + xorl %edx,%ecx + rorl $6,%ecx + movl 24(%esp),%edi + addl %ecx,%ebx + xorl %edi,%esi + movl %edx,16(%esp) + movl %eax,%ecx + andl %edx,%esi + movl 12(%esp),%edx + xorl %edi,%esi + movl %eax,%edi + addl %esi,%ebx + rorl $9,%ecx + addl 28(%esp),%ebx + xorl %eax,%ecx + rorl $11,%ecx + movl 4(%esp),%esi + xorl %eax,%ecx + rorl $2,%ecx + addl %ebx,%edx + movl 8(%esp),%edi + addl %ecx,%ebx + movl %eax,(%esp) + movl %eax,%ecx + subl $4,%esp + orl %esi,%eax + andl %esi,%ecx + andl %edi,%eax + movl (%ebp),%esi + orl %ecx,%eax + addl $4,%ebp + addl %ebx,%eax + addl %esi,%edx + addl %esi,%eax + cmpl $3248222580,%esi + jne L00300_15 + movl 152(%esp),%ebx +.align 4,0x90 +L00416_63: + movl %ebx,%esi + movl 100(%esp),%ecx + rorl $11,%esi + movl %ecx,%edi + xorl %ebx,%esi + rorl $7,%esi + shrl $3,%ebx + rorl $2,%edi + xorl %esi,%ebx + xorl %ecx,%edi + rorl $17,%edi + shrl $10,%ecx + addl 156(%esp),%ebx + xorl %ecx,%edi + addl 120(%esp),%ebx + movl %edx,%ecx + addl %edi,%ebx + rorl $14,%ecx + movl 20(%esp),%esi + xorl %edx,%ecx + rorl $5,%ecx + movl %ebx,92(%esp) + xorl %edx,%ecx + rorl $6,%ecx + movl 24(%esp),%edi + addl %ecx,%ebx + xorl %edi,%esi + movl %edx,16(%esp) + movl %eax,%ecx + andl %edx,%esi + movl 12(%esp),%edx + xorl %edi,%esi + movl %eax,%edi + addl %esi,%ebx + rorl $9,%ecx + addl 28(%esp),%ebx + xorl %eax,%ecx + rorl $11,%ecx + movl 4(%esp),%esi + xorl %eax,%ecx + rorl $2,%ecx + addl %ebx,%edx + movl 8(%esp),%edi + addl %ecx,%ebx + movl %eax,(%esp) + movl %eax,%ecx + subl $4,%esp + orl %esi,%eax + andl %esi,%ecx + andl %edi,%eax + movl (%ebp),%esi + orl %ecx,%eax + addl $4,%ebp + addl %ebx,%eax + movl 152(%esp),%ebx + addl %esi,%edx + addl %esi,%eax + cmpl $3329325298,%esi + jne L00416_63 + movl 352(%esp),%esi + movl 4(%esp),%ebx + movl 8(%esp),%ecx + movl 12(%esp),%edi + addl (%esi),%eax + addl 4(%esi),%ebx + addl 8(%esi),%ecx + addl 12(%esi),%edi + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edi,12(%esi) + movl 20(%esp),%eax + movl 24(%esp),%ebx + movl 28(%esp),%ecx + movl 356(%esp),%edi + addl 16(%esi),%edx + addl 20(%esi),%eax + addl 24(%esi),%ebx + addl 28(%esi),%ecx + movl %edx,16(%esi) + movl %eax,20(%esi) + movl %ebx,24(%esi) + movl %ecx,28(%esi) + addl $352,%esp + subl $256,%ebp + cmpl 8(%esp),%edi + jb L002loop + movl 12(%esp),%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 6,0x90 +L001K256: +.long 1116352408,1899447441,3049323471,3921009573 +.long 961987163,1508970993,2453635748,2870763221 +.long 3624381080,310598401,607225278,1426881987 +.long 1925078388,2162078206,2614888103,3248222580 +.long 3835390401,4022224774,264347078,604807628 +.long 770255983,1249150122,1555081692,1996064986 +.long 2554220882,2821834349,2952996808,3210313671 +.long 3336571891,3584528711,113926993,338241895 +.long 666307205,773529912,1294757372,1396182291 +.long 1695183700,1986661051,2177026350,2456956037 +.long 2730485921,2820302411,3259730800,3345764771 +.long 3516065817,3600352804,4094571909,275423344 +.long 430227734,506948616,659060556,883997877 +.long 958139571,1322822218,1537002063,1747873779 +.long 1955562222,2024104815,2227730452,2361852424 +.long 2428436474,2756734187,3204031479,3329325298 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 +.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 +.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 +.byte 62,0 diff --git a/chromium/third_party/openssl/openssl/crypto/sha/asm/sha512-586-mac.S b/chromium/third_party/openssl/openssl/crypto/sha/asm/sha512-586-mac.S new file mode 100644 index 00000000000..2c9975305a3 --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/sha/asm/sha512-586-mac.S @@ -0,0 +1,561 @@ +.file "sha512-586.s" +.text +.globl _sha512_block_data_order +.align 4 +_sha512_block_data_order: +L_sha512_block_data_order_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl %esp,%ebx + call L000pic_point +L000pic_point: + popl %ebp + leal L001K512-L000pic_point(%ebp),%ebp + subl $16,%esp + andl $-64,%esp + shll $7,%eax + addl %edi,%eax + movl %esi,(%esp) + movl %edi,4(%esp) + movl %eax,8(%esp) + movl %ebx,12(%esp) +.align 4,0x90 +L002loop_x86: + movl (%edi),%eax + movl 4(%edi),%ebx + movl 8(%edi),%ecx + movl 12(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 16(%edi),%eax + movl 20(%edi),%ebx + movl 24(%edi),%ecx + movl 28(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 32(%edi),%eax + movl 36(%edi),%ebx + movl 40(%edi),%ecx + movl 44(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 48(%edi),%eax + movl 52(%edi),%ebx + movl 56(%edi),%ecx + movl 60(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 64(%edi),%eax + movl 68(%edi),%ebx + movl 72(%edi),%ecx + movl 76(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 80(%edi),%eax + movl 84(%edi),%ebx + movl 88(%edi),%ecx + movl 92(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 96(%edi),%eax + movl 100(%edi),%ebx + movl 104(%edi),%ecx + movl 108(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + movl 112(%edi),%eax + movl 116(%edi),%ebx + movl 120(%edi),%ecx + movl 124(%edi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + addl $128,%edi + subl $72,%esp + movl %edi,204(%esp) + leal 8(%esp),%edi + movl $16,%ecx +.long 2784229001 +.align 4,0x90 +L00300_15_x86: + movl 40(%esp),%ecx + movl 44(%esp),%edx + movl %ecx,%esi + shrl $9,%ecx + movl %edx,%edi + shrl $9,%edx + movl %ecx,%ebx + shll $14,%esi + movl %edx,%eax + shll $14,%edi + xorl %esi,%ebx + shrl $5,%ecx + xorl %edi,%eax + shrl $5,%edx + xorl %ecx,%eax + shll $4,%esi + xorl %edx,%ebx + shll $4,%edi + xorl %esi,%ebx + shrl $4,%ecx + xorl %edi,%eax + shrl $4,%edx + xorl %ecx,%eax + shll $5,%esi + xorl %edx,%ebx + shll $5,%edi + xorl %esi,%eax + xorl %edi,%ebx + movl 48(%esp),%ecx + movl 52(%esp),%edx + movl 56(%esp),%esi + movl 60(%esp),%edi + addl 64(%esp),%eax + adcl 68(%esp),%ebx + xorl %esi,%ecx + xorl %edi,%edx + andl 40(%esp),%ecx + andl 44(%esp),%edx + addl 192(%esp),%eax + adcl 196(%esp),%ebx + xorl %esi,%ecx + xorl %edi,%edx + movl (%ebp),%esi + movl 4(%ebp),%edi + addl %ecx,%eax + adcl %edx,%ebx + movl 32(%esp),%ecx + movl 36(%esp),%edx + addl %esi,%eax + adcl %edi,%ebx + movl %eax,(%esp) + movl %ebx,4(%esp) + addl %ecx,%eax + adcl %edx,%ebx + movl 8(%esp),%ecx + movl 12(%esp),%edx + movl %eax,32(%esp) + movl %ebx,36(%esp) + movl %ecx,%esi + shrl $2,%ecx + movl %edx,%edi + shrl $2,%edx + movl %ecx,%ebx + shll $4,%esi + movl %edx,%eax + shll $4,%edi + xorl %esi,%ebx + shrl $5,%ecx + xorl %edi,%eax + shrl $5,%edx + xorl %ecx,%ebx + shll $21,%esi + xorl %edx,%eax + shll $21,%edi + xorl %esi,%eax + shrl $21,%ecx + xorl %edi,%ebx + shrl $21,%edx + xorl %ecx,%eax + shll $5,%esi + xorl %edx,%ebx + shll $5,%edi + xorl %esi,%eax + xorl %edi,%ebx + movl 8(%esp),%ecx + movl 12(%esp),%edx + movl 16(%esp),%esi + movl 20(%esp),%edi + addl (%esp),%eax + adcl 4(%esp),%ebx + orl %esi,%ecx + orl %edi,%edx + andl 24(%esp),%ecx + andl 28(%esp),%edx + andl 8(%esp),%esi + andl 12(%esp),%edi + orl %esi,%ecx + orl %edi,%edx + addl %ecx,%eax + adcl %edx,%ebx + movl %eax,(%esp) + movl %ebx,4(%esp) + movb (%ebp),%dl + subl $8,%esp + leal 8(%ebp),%ebp + cmpb $148,%dl + jne L00300_15_x86 +.align 4,0x90 +L00416_79_x86: + movl 312(%esp),%ecx + movl 316(%esp),%edx + movl %ecx,%esi + shrl $1,%ecx + movl %edx,%edi + shrl $1,%edx + movl %ecx,%eax + shll $24,%esi + movl %edx,%ebx + shll $24,%edi + xorl %esi,%ebx + shrl $6,%ecx + xorl %edi,%eax + shrl $6,%edx + xorl %ecx,%eax + shll $7,%esi + xorl %edx,%ebx + shll $1,%edi + xorl %esi,%ebx + shrl $1,%ecx + xorl %edi,%eax + shrl $1,%edx + xorl %ecx,%eax + shll $6,%edi + xorl %edx,%ebx + xorl %edi,%eax + movl %eax,(%esp) + movl %ebx,4(%esp) + movl 208(%esp),%ecx + movl 212(%esp),%edx + movl %ecx,%esi + shrl $6,%ecx + movl %edx,%edi + shrl $6,%edx + movl %ecx,%eax + shll $3,%esi + movl %edx,%ebx + shll $3,%edi + xorl %esi,%eax + shrl $13,%ecx + xorl %edi,%ebx + shrl $13,%edx + xorl %ecx,%eax + shll $10,%esi + xorl %edx,%ebx + shll $10,%edi + xorl %esi,%ebx + shrl $10,%ecx + xorl %edi,%eax + shrl $10,%edx + xorl %ecx,%ebx + shll $13,%edi + xorl %edx,%eax + xorl %edi,%eax + movl 320(%esp),%ecx + movl 324(%esp),%edx + addl (%esp),%eax + adcl 4(%esp),%ebx + movl 248(%esp),%esi + movl 252(%esp),%edi + addl %ecx,%eax + adcl %edx,%ebx + addl %esi,%eax + adcl %edi,%ebx + movl %eax,192(%esp) + movl %ebx,196(%esp) + movl 40(%esp),%ecx + movl 44(%esp),%edx + movl %ecx,%esi + shrl $9,%ecx + movl %edx,%edi + shrl $9,%edx + movl %ecx,%ebx + shll $14,%esi + movl %edx,%eax + shll $14,%edi + xorl %esi,%ebx + shrl $5,%ecx + xorl %edi,%eax + shrl $5,%edx + xorl %ecx,%eax + shll $4,%esi + xorl %edx,%ebx + shll $4,%edi + xorl %esi,%ebx + shrl $4,%ecx + xorl %edi,%eax + shrl $4,%edx + xorl %ecx,%eax + shll $5,%esi + xorl %edx,%ebx + shll $5,%edi + xorl %esi,%eax + xorl %edi,%ebx + movl 48(%esp),%ecx + movl 52(%esp),%edx + movl 56(%esp),%esi + movl 60(%esp),%edi + addl 64(%esp),%eax + adcl 68(%esp),%ebx + xorl %esi,%ecx + xorl %edi,%edx + andl 40(%esp),%ecx + andl 44(%esp),%edx + addl 192(%esp),%eax + adcl 196(%esp),%ebx + xorl %esi,%ecx + xorl %edi,%edx + movl (%ebp),%esi + movl 4(%ebp),%edi + addl %ecx,%eax + adcl %edx,%ebx + movl 32(%esp),%ecx + movl 36(%esp),%edx + addl %esi,%eax + adcl %edi,%ebx + movl %eax,(%esp) + movl %ebx,4(%esp) + addl %ecx,%eax + adcl %edx,%ebx + movl 8(%esp),%ecx + movl 12(%esp),%edx + movl %eax,32(%esp) + movl %ebx,36(%esp) + movl %ecx,%esi + shrl $2,%ecx + movl %edx,%edi + shrl $2,%edx + movl %ecx,%ebx + shll $4,%esi + movl %edx,%eax + shll $4,%edi + xorl %esi,%ebx + shrl $5,%ecx + xorl %edi,%eax + shrl $5,%edx + xorl %ecx,%ebx + shll $21,%esi + xorl %edx,%eax + shll $21,%edi + xorl %esi,%eax + shrl $21,%ecx + xorl %edi,%ebx + shrl $21,%edx + xorl %ecx,%eax + shll $5,%esi + xorl %edx,%ebx + shll $5,%edi + xorl %esi,%eax + xorl %edi,%ebx + movl 8(%esp),%ecx + movl 12(%esp),%edx + movl 16(%esp),%esi + movl 20(%esp),%edi + addl (%esp),%eax + adcl 4(%esp),%ebx + orl %esi,%ecx + orl %edi,%edx + andl 24(%esp),%ecx + andl 28(%esp),%edx + andl 8(%esp),%esi + andl 12(%esp),%edi + orl %esi,%ecx + orl %edi,%edx + addl %ecx,%eax + adcl %edx,%ebx + movl %eax,(%esp) + movl %ebx,4(%esp) + movb (%ebp),%dl + subl $8,%esp + leal 8(%ebp),%ebp + cmpb $23,%dl + jne L00416_79_x86 + movl 840(%esp),%esi + movl 844(%esp),%edi + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + addl 8(%esp),%eax + adcl 12(%esp),%ebx + movl %eax,(%esi) + movl %ebx,4(%esi) + addl 16(%esp),%ecx + adcl 20(%esp),%edx + movl %ecx,8(%esi) + movl %edx,12(%esi) + movl 16(%esi),%eax + movl 20(%esi),%ebx + movl 24(%esi),%ecx + movl 28(%esi),%edx + addl 24(%esp),%eax + adcl 28(%esp),%ebx + movl %eax,16(%esi) + movl %ebx,20(%esi) + addl 32(%esp),%ecx + adcl 36(%esp),%edx + movl %ecx,24(%esi) + movl %edx,28(%esi) + movl 32(%esi),%eax + movl 36(%esi),%ebx + movl 40(%esi),%ecx + movl 44(%esi),%edx + addl 40(%esp),%eax + adcl 44(%esp),%ebx + movl %eax,32(%esi) + movl %ebx,36(%esi) + addl 48(%esp),%ecx + adcl 52(%esp),%edx + movl %ecx,40(%esi) + movl %edx,44(%esi) + movl 48(%esi),%eax + movl 52(%esi),%ebx + movl 56(%esi),%ecx + movl 60(%esi),%edx + addl 56(%esp),%eax + adcl 60(%esp),%ebx + movl %eax,48(%esi) + movl %ebx,52(%esi) + addl 64(%esp),%ecx + adcl 68(%esp),%edx + movl %ecx,56(%esi) + movl %edx,60(%esi) + addl $840,%esp + subl $640,%ebp + cmpl 8(%esp),%edi + jb L002loop_x86 + movl 12(%esp),%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.align 6,0x90 +L001K512: +.long 3609767458,1116352408 +.long 602891725,1899447441 +.long 3964484399,3049323471 +.long 2173295548,3921009573 +.long 4081628472,961987163 +.long 3053834265,1508970993 +.long 2937671579,2453635748 +.long 3664609560,2870763221 +.long 2734883394,3624381080 +.long 1164996542,310598401 +.long 1323610764,607225278 +.long 3590304994,1426881987 +.long 4068182383,1925078388 +.long 991336113,2162078206 +.long 633803317,2614888103 +.long 3479774868,3248222580 +.long 2666613458,3835390401 +.long 944711139,4022224774 +.long 2341262773,264347078 +.long 2007800933,604807628 +.long 1495990901,770255983 +.long 1856431235,1249150122 +.long 3175218132,1555081692 +.long 2198950837,1996064986 +.long 3999719339,2554220882 +.long 766784016,2821834349 +.long 2566594879,2952996808 +.long 3203337956,3210313671 +.long 1034457026,3336571891 +.long 2466948901,3584528711 +.long 3758326383,113926993 +.long 168717936,338241895 +.long 1188179964,666307205 +.long 1546045734,773529912 +.long 1522805485,1294757372 +.long 2643833823,1396182291 +.long 2343527390,1695183700 +.long 1014477480,1986661051 +.long 1206759142,2177026350 +.long 344077627,2456956037 +.long 1290863460,2730485921 +.long 3158454273,2820302411 +.long 3505952657,3259730800 +.long 106217008,3345764771 +.long 3606008344,3516065817 +.long 1432725776,3600352804 +.long 1467031594,4094571909 +.long 851169720,275423344 +.long 3100823752,430227734 +.long 1363258195,506948616 +.long 3750685593,659060556 +.long 3785050280,883997877 +.long 3318307427,958139571 +.long 3812723403,1322822218 +.long 2003034995,1537002063 +.long 3602036899,1747873779 +.long 1575990012,1955562222 +.long 1125592928,2024104815 +.long 2716904306,2227730452 +.long 442776044,2361852424 +.long 593698344,2428436474 +.long 3733110249,2756734187 +.long 2999351573,3204031479 +.long 3815920427,3329325298 +.long 3928383900,3391569614 +.long 566280711,3515267271 +.long 3454069534,3940187606 +.long 4000239992,4118630271 +.long 1914138554,116418474 +.long 2731055270,174292421 +.long 3203993006,289380356 +.long 320620315,460393269 +.long 587496836,685471733 +.long 1086792851,852142971 +.long 365543100,1017036298 +.long 2618297676,1126000580 +.long 3409855158,1288033470 +.long 4234509866,1501505948 +.long 987167468,1607167915 +.long 1246189591,1816402316 +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97 +.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 +.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 +.byte 62,0 diff --git a/chromium/third_party/openssl/openssl/crypto/x86cpuid-mac.S b/chromium/third_party/openssl/openssl/crypto/x86cpuid-mac.S new file mode 100644 index 00000000000..db36e6f503e --- /dev/null +++ b/chromium/third_party/openssl/openssl/crypto/x86cpuid-mac.S @@ -0,0 +1,316 @@ +.file "x86cpuid.s" +.text +.globl _OPENSSL_ia32_cpuid +.align 4 +_OPENSSL_ia32_cpuid: +L_OPENSSL_ia32_cpuid_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + xorl %edx,%edx + pushfl + popl %eax + movl %eax,%ecx + xorl $2097152,%eax + pushl %eax + popfl + pushfl + popl %eax + xorl %eax,%ecx + xorl %eax,%eax + btl $21,%ecx + jnc L000nocpuid + .byte 0x0f,0xa2 + movl %eax,%edi + xorl %eax,%eax + cmpl $1970169159,%ebx + setne %al + movl %eax,%ebp + cmpl $1231384169,%edx + setne %al + orl %eax,%ebp + cmpl $1818588270,%ecx + setne %al + orl %eax,%ebp + jz L001intel + cmpl $1752462657,%ebx + setne %al + movl %eax,%esi + cmpl $1769238117,%edx + setne %al + orl %eax,%esi + cmpl $1145913699,%ecx + setne %al + orl %eax,%esi + jnz L001intel + movl $2147483648,%eax + .byte 0x0f,0xa2 + cmpl $2147483649,%eax + jb L001intel + movl %eax,%esi + movl $2147483649,%eax + .byte 0x0f,0xa2 + orl %ecx,%ebp + andl $2049,%ebp + cmpl $2147483656,%esi + jb L001intel + movl $2147483656,%eax + .byte 0x0f,0xa2 + movzbl %cl,%esi + incl %esi + movl $1,%eax + .byte 0x0f,0xa2 + btl $28,%edx + jnc L002generic + shrl $16,%ebx + andl $255,%ebx + cmpl %esi,%ebx + ja L002generic + andl $4026531839,%edx + jmp L002generic +L001intel: + cmpl $4,%edi + movl $-1,%edi + jb L003nocacheinfo + movl $4,%eax + movl $0,%ecx + .byte 0x0f,0xa2 + movl %eax,%edi + shrl $14,%edi + andl $4095,%edi +L003nocacheinfo: + movl $1,%eax + .byte 0x0f,0xa2 + andl $3220176895,%edx + cmpl $0,%ebp + jne L004notintel + orl $1073741824,%edx + andb $15,%ah + cmpb $15,%ah + jne L004notintel + orl $1048576,%edx +L004notintel: + btl $28,%edx + jnc L002generic + andl $4026531839,%edx + cmpl $0,%edi + je L002generic + orl $268435456,%edx + shrl $16,%ebx + cmpb $1,%bl + ja L002generic + andl $4026531839,%edx +L002generic: + andl $2048,%ebp + andl $4294965247,%ecx + movl %edx,%esi + orl %ecx,%ebp + btl $27,%ecx + jnc L005clear_avx + xorl %ecx,%ecx +.byte 15,1,208 + andl $6,%eax + cmpl $6,%eax + je L006done + cmpl $2,%eax + je L005clear_avx +L007clear_xmm: + andl $4261412861,%ebp + andl $4278190079,%esi +L005clear_avx: + andl $4026525695,%ebp +L006done: + movl %esi,%eax + movl %ebp,%edx +L000nocpuid: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _OPENSSL_rdtsc +.align 4 +_OPENSSL_rdtsc: +L_OPENSSL_rdtsc_begin: + xorl %eax,%eax + xorl %edx,%edx + call L008PIC_me_up +L008PIC_me_up: + popl %ecx + movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L008PIC_me_up(%ecx),%ecx + btl $4,(%ecx) + jnc L009notsc + .byte 0x0f,0x31 +L009notsc: + ret +.globl _OPENSSL_instrument_halt +.align 4 +_OPENSSL_instrument_halt: +L_OPENSSL_instrument_halt_begin: + call L010PIC_me_up +L010PIC_me_up: + popl %ecx + movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L010PIC_me_up(%ecx),%ecx + btl $4,(%ecx) + jnc L011nohalt +.long 2421723150 + andl $3,%eax + jnz L011nohalt + pushfl + popl %eax + btl $9,%eax + jnc L011nohalt + .byte 0x0f,0x31 + pushl %edx + pushl %eax + hlt + .byte 0x0f,0x31 + subl (%esp),%eax + sbbl 4(%esp),%edx + addl $8,%esp + ret +L011nohalt: + xorl %eax,%eax + xorl %edx,%edx + ret +.globl _OPENSSL_far_spin +.align 4 +_OPENSSL_far_spin: +L_OPENSSL_far_spin_begin: + pushfl + popl %eax + btl $9,%eax + jnc L012nospin + movl 4(%esp),%eax + movl 8(%esp),%ecx +.long 2430111262 + xorl %eax,%eax + movl (%ecx),%edx + jmp L013spin +.align 4,0x90 +L013spin: + incl %eax + cmpl (%ecx),%edx + je L013spin +.long 529567888 + ret +L012nospin: + xorl %eax,%eax + xorl %edx,%edx + ret +.globl _OPENSSL_wipe_cpu +.align 4 +_OPENSSL_wipe_cpu: +L_OPENSSL_wipe_cpu_begin: + xorl %eax,%eax + xorl %edx,%edx + call L014PIC_me_up +L014PIC_me_up: + popl %ecx + movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L014PIC_me_up(%ecx),%ecx + movl (%ecx),%ecx + btl $1,(%ecx) + jnc L015no_x87 +.long 4007259865,4007259865,4007259865,4007259865,2430851995 +L015no_x87: + leal 4(%esp),%eax + ret +.globl _OPENSSL_atomic_add +.align 4 +_OPENSSL_atomic_add: +L_OPENSSL_atomic_add_begin: + movl 4(%esp),%edx + movl 8(%esp),%ecx + pushl %ebx + nop + movl (%edx),%eax +L016spin: + leal (%eax,%ecx,1),%ebx + nop +.long 447811568 + jne L016spin + movl %ebx,%eax + popl %ebx + ret +.globl _OPENSSL_indirect_call +.align 4 +_OPENSSL_indirect_call: +L_OPENSSL_indirect_call_begin: + pushl %ebp + movl %esp,%ebp + subl $28,%esp + movl 12(%ebp),%ecx + movl %ecx,(%esp) + movl 16(%ebp),%edx + movl %edx,4(%esp) + movl 20(%ebp),%eax + movl %eax,8(%esp) + movl 24(%ebp),%eax + movl %eax,12(%esp) + movl 28(%ebp),%eax + movl %eax,16(%esp) + movl 32(%ebp),%eax + movl %eax,20(%esp) + movl 36(%ebp),%eax + movl %eax,24(%esp) + call *8(%ebp) + movl %ebp,%esp + popl %ebp + ret +.globl _OPENSSL_cleanse +.align 4 +_OPENSSL_cleanse: +L_OPENSSL_cleanse_begin: + movl 4(%esp),%edx + movl 8(%esp),%ecx + xorl %eax,%eax + cmpl $7,%ecx + jae L017lot + cmpl $0,%ecx + je L018ret +L019little: + movb %al,(%edx) + subl $1,%ecx + leal 1(%edx),%edx + jnz L019little +L018ret: + ret +.align 4,0x90 +L017lot: + testl $3,%edx + jz L020aligned + movb %al,(%edx) + leal -1(%ecx),%ecx + leal 1(%edx),%edx + jmp L017lot +L020aligned: + movl %eax,(%edx) + leal -4(%ecx),%ecx + testl $-4,%ecx + leal 4(%edx),%edx + jnz L020aligned + cmpl $0,%ecx + jne L019little + ret +.globl _OPENSSL_ia32_rdrand +.align 4 +_OPENSSL_ia32_rdrand: +L_OPENSSL_ia32_rdrand_begin: + movl $8,%ecx +L021loop: +.byte 15,199,240 + jc L022break + loop L021loop +L022break: + cmpl $0,%eax + cmovel %ecx,%eax + ret +.section __IMPORT,__pointers,non_lazy_symbol_pointers +L_OPENSSL_ia32cap_P$non_lazy_ptr: +.indirect_symbol _OPENSSL_ia32cap_P +.long 0 +.comm _OPENSSL_ia32cap_P,8,2 +.mod_init_func +.align 2 +.long _OPENSSL_cpuid_setup diff --git a/chromium/third_party/openssl/openssl/e_os2.h b/chromium/third_party/openssl/openssl/e_os2.h index d22c0368f80..ad63669f1db 100644 --- a/chromium/third_party/openssl/openssl/e_os2.h +++ b/chromium/third_party/openssl/openssl/e_os2.h @@ -289,6 +289,15 @@ extern "C" { # define OPENSSL_GLOBAL_REF(name) _shadow_##name #endif +#ifdef OPENSSL_SYS_WINDOWS +# include <BaseTsd.h> +# define ssize_t SSIZE_T +#endif + +#ifdef OPENSSL_SYS_MACOSX +# include <sys/types.h> +#endif + #if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && macintosh==1 && !defined(MAC_OS_GUSI_SOURCE) # define ossl_ssize_t long #endif @@ -309,6 +318,10 @@ extern "C" { # define ossl_ssize_t ssize_t #endif +#ifndef SSIZE_MAX +#define SSIZE_MAX ((ssize_t)(((size_t)-1)/2)) +#endif + #ifdef __cplusplus } #endif diff --git a/chromium/third_party/openssl/openssl/import_openssl.sh b/chromium/third_party/openssl/openssl/import_openssl.sh index 01bbc298462..320b8c41be2 100755 --- a/chromium/third_party/openssl/openssl/import_openssl.sh +++ b/chromium/third_party/openssl/openssl/import_openssl.sh @@ -118,6 +118,13 @@ function default_asm_file () { fi } +function default_asm_mac_ia32_file () { + if [ "$2" ]; then + echo "$2" + else + echo "${1%%.pl}-mac.S" + fi +} # Generate an ARM assembly file. # $1: generator (perl script) # $2: [optional] output file name @@ -148,6 +155,11 @@ function gen_asm_x86_64 () { perl "$1" elf "$OUT" > "$OUT" } +function gen_asm_mac_ia32 () { + local OUT + OUT=$(default_asm_mac_ia32_file "$@") + perl "$1" macosx "$OUT" > "$OUT" +} # Filter all items in a list that match a given pattern. # $1: space-separated list @@ -415,6 +427,24 @@ function import() { gen_asm_x86_64 crypto/rc4/asm/rc4-x86_64.pl gen_asm_x86_64 crypto/rc4/asm/rc4-md5-x86_64.pl + # Generate mac_ia32 asm + gen_asm_mac_ia32 crypto/x86cpuid.pl + gen_asm_mac_ia32 crypto/aes/asm/aes-586.pl + gen_asm_mac_ia32 crypto/aes/asm/vpaes-x86.pl + gen_asm_mac_ia32 crypto/aes/asm/aesni-x86.pl + gen_asm_mac_ia32 crypto/bn/asm/bn-586.pl + gen_asm_mac_ia32 crypto/bn/asm/co-586.pl + gen_asm_mac_ia32 crypto/bn/asm/x86-mont.pl + gen_asm_mac_ia32 crypto/bn/asm/x86-gf2m.pl + gen_asm_mac_ia32 crypto/modes/asm/ghash-x86.pl + gen_asm_mac_ia32 crypto/sha/asm/sha1-586.pl + gen_asm_mac_ia32 crypto/sha/asm/sha256-586.pl + gen_asm_mac_ia32 crypto/sha/asm/sha512-586.pl + gen_asm_mac_ia32 crypto/md5/asm/md5-586.pl + gen_asm_mac_ia32 crypto/des/asm/des-586.pl + gen_asm_mac_ia32 crypto/des/asm/crypt586.pl + gen_asm_mac_ia32 crypto/bf/asm/bf-586.pl + # Setup android.testssl directory mkdir android.testssl cat test/testssl | \ diff --git a/chromium/third_party/openssl/openssl/include/openssl/ssl.h b/chromium/third_party/openssl/openssl/include/openssl/ssl.h index a3944f177dd..5faae95c1d5 100644 --- a/chromium/third_party/openssl/openssl/include/openssl/ssl.h +++ b/chromium/third_party/openssl/openssl/include/openssl/ssl.h @@ -547,6 +547,13 @@ struct ssl_session_st #ifndef OPENSSL_NO_SRP char *srp_username; #endif + + /* original_handshake_hash contains the handshake hash (either + * SHA-1+MD5 or SHA-2, depending on TLS version) for the original, full + * handshake that created a session. This is used by Channel IDs during + * resumption. */ + unsigned char original_handshake_hash[EVP_MAX_MD_SIZE]; + unsigned int original_handshake_hash_len; }; #endif @@ -1982,6 +1989,9 @@ STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); int SSL_add_client_CA(SSL *ssl,X509 *x); int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x); +void SSL_get_client_certificate_types(const SSL *s, const unsigned char **ctype, + size_t *ctype_num); + void SSL_set_connect_state(SSL *s); void SSL_set_accept_state(SSL *s); diff --git a/chromium/third_party/openssl/openssl/include/openssl/ssl3.h b/chromium/third_party/openssl/openssl/include/openssl/ssl3.h index 899c8a89837..c5864ee54bb 100644 --- a/chromium/third_party/openssl/openssl/include/openssl/ssl3.h +++ b/chromium/third_party/openssl/openssl/include/openssl/ssl3.h @@ -388,6 +388,7 @@ typedef struct ssl3_buffer_st #define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 #define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 #define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020 +#define SSL3_FLAGS_CCS_OK 0x0080 /* SSL3_FLAGS_SGC_RESTART_DONE is set when we * restart a handshake because of MS SGC and so prevents us @@ -508,7 +509,7 @@ typedef struct ssl3_state_st /* used for certificate requests */ int cert_req; int ctype_num; - char ctype[SSL3_CT_NUMBER]; + unsigned char ctype[SSL3_CT_NUMBER]; STACK_OF(X509_NAME) *ca_names; int use_rsa_tmp; diff --git a/chromium/third_party/openssl/openssl/include/openssl/tls1.h b/chromium/third_party/openssl/openssl/include/openssl/tls1.h index 0ce0193c582..55594861183 100644 --- a/chromium/third_party/openssl/openssl/include/openssl/tls1.h +++ b/chromium/third_party/openssl/openssl/include/openssl/tls1.h @@ -230,6 +230,12 @@ extern "C" { /* ExtensionType value from RFC5620 */ #define TLSEXT_TYPE_heartbeat 15 +/* ExtensionType value for TLS padding extension. + * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml + * http://tools.ietf.org/html/draft-agl-tls-padding-03 + */ +#define TLSEXT_TYPE_padding 21 + /* ExtensionType value from RFC4507 */ #define TLSEXT_TYPE_session_ticket 35 @@ -249,7 +255,7 @@ extern "C" { #endif /* This is not an IANA defined extension number */ -#define TLSEXT_TYPE_channel_id 30031 +#define TLSEXT_TYPE_channel_id 30032 /* NameType value from RFC 3546 */ #define TLSEXT_NAMETYPE_host_name 0 diff --git a/chromium/third_party/openssl/openssl/openssl.config b/chromium/third_party/openssl/openssl/openssl.config index 3a980f474ca..d6065b0d4a1 100644 --- a/chromium/third_party/openssl/openssl/openssl.config +++ b/chromium/third_party/openssl/openssl/openssl.config @@ -270,6 +270,22 @@ DES_UNROLL \ OPENSSL_CPUID_OBJ \ " +OPENSSL_CRYPTO_DEFINES_mac_ia32="\ +OPENSSL_BN_ASM_GF2m \ +OPENSSL_BN_ASM_MONT \ +OPENSSL_BN_ASM_PART_WORDS \ +AES_ASM \ +GHASH_ASM \ +SHA1_ASM \ +SHA256_ASM \ +SHA512_ASM \ +MD5_ASM \ +DES_PTR \ +DES_RISC1 \ +DES_UNROLL \ +OPENSSL_CPUID_OBJ \ +" + OPENSSL_CRYPTO_INCLUDES="\ . \ include \ @@ -848,6 +864,35 @@ crypto/des/fcrypt_b.c \ crypto/mem_clr.c \ " +OPENSSL_CRYPTO_SOURCES_mac_ia32="\ +crypto/aes/asm/aes-586-mac.S \ +crypto/aes/asm/aesni-x86-mac.S \ +crypto/aes/asm/vpaes-x86-mac.S \ +crypto/bf/asm/bf-586-mac.S \ +crypto/bn/asm/bn-586-mac.S \ +crypto/bn/asm/co-586-mac.S \ +crypto/bn/asm/x86-gf2m-mac.S \ +crypto/bn/asm/x86-mont-mac.S \ +crypto/des/asm/crypt586-mac.S \ +crypto/des/asm/des-586-mac.S \ +crypto/md5/asm/md5-586-mac.S \ +crypto/modes/asm/ghash-x86-mac.S \ +crypto/sha/asm/sha1-586-mac.S \ +crypto/sha/asm/sha256-586-mac.S \ +crypto/sha/asm/sha512-586-mac.S \ +crypto/x86cpuid-mac.S \ +" + +OPENSSL_CRYPTO_SOURCES_EXCLUDES_mac_ia32="\ +crypto/aes/aes_core.c \ +crypto/aes/aes_cbc.c \ +crypto/bf/bf_enc.c \ +crypto/bn/bn_asm.c \ +crypto/des/des_enc.c \ +crypto/des/fcrypt_b.c \ +crypto/mem_clr.c \ +" + OPENSSL_CRYPTO_SOURCES_x86_64="\ crypto/aes/asm/aes-x86_64.S \ crypto/aes/asm/aesni-x86_64.S \ @@ -1015,6 +1060,8 @@ aead_ssl_support.patch \ use_aead_for_aes_gcm.patch \ chacha20poly1305.patch \ neon_runtime.patch \ +paddingext.patch \ +mac_ia32_assembly.patch \ " OPENSSL_PATCHES_progs_SOURCES="\ @@ -1088,3 +1135,22 @@ crypto/objects/obj_dat.c include/openssl/lhash.h ssl/ssl_sess.c " + +OPENSSL_PATCHES_mac_ia32_assembly_SOURCES="\ +crypto/aes/asm/aes-586-mac.S \ +crypto/aes/asm/aesni-x86-mac.S \ +crypto/aes/asm/vpaes-x86-mac.S \ +crypto/bf/asm/bf-586-mac.S \ +crypto/bn/asm/bn-586-mac.S \ +crypto/bn/asm/co-586-mac.S \ +crypto/bn/asm/x86-gf2m-mac.S \ +crypto/bn/asm/x86-mont-mac.S \ +crypto/des/asm/crypt586-mac.S \ +crypto/des/asm/des-586-mac.S \ +crypto/md5/asm/md5-586-mac.S \ +crypto/modes/asm/ghash-x86-mac.S \ +crypto/sha/asm/sha1-586-mac.S \ +crypto/sha/asm/sha256-586-mac.S \ +crypto/sha/asm/sha512-586-mac.S \ +crypto/x86cpuid-mac.S \ +" diff --git a/chromium/third_party/openssl/openssl/patches/mac_ia32_assembly.patch b/chromium/third_party/openssl/openssl/patches/mac_ia32_assembly.patch new file mode 100644 index 00000000000..1f11f87e117 --- /dev/null +++ b/chromium/third_party/openssl/openssl/patches/mac_ia32_assembly.patch @@ -0,0 +1,16865 @@ +From dee77b350211c7b5980f03cc67e30ebf616b029e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?H=C3=A5vard=20Molland?= <haavardm@opera.com> +Date: Thu, 3 Apr 2014 10:58:22 +0200 +Subject: [PATCH 4/4] Assembly files for OSX-32. + +Needed for compiling 32 bit OSX with assembly support. +--- + crypto/aes/asm/aes-586-mac.S | 3200 +++++++++++++++++++++++++++ + crypto/aes/asm/aesni-x86-mac.S | 2107 ++++++++++++++++++ + crypto/aes/asm/vpaes-x86-mac.S | 635 ++++++ + crypto/bf/asm/bf-586-mac.S | 890 ++++++++ + crypto/bn/asm/bn-586-mac.S | 1370 ++++++++++++ + crypto/bn/asm/co-586-mac.S | 1246 +++++++++++ + crypto/bn/asm/x86-gf2m-mac.S | 332 +++ + crypto/bn/asm/x86-mont-mac.S | 336 +++ + crypto/des/asm/crypt586-mac.S | 880 ++++++++ + crypto/des/asm/des-586-mac.S | 1821 +++++++++++++++ + crypto/md5/asm/md5-586-mac.S | 677 ++++++ + crypto/modes/asm/ghash-x86-mac.S | 718 ++++++ + crypto/sha/asm/sha1-586-mac.S | 1378 ++++++++++++ + crypto/sha/asm/sha256-586-mac.S | 256 +++ + crypto/sha/asm/sha512-586-mac.S | 561 +++++ + crypto/x86cpuid-mac.S | 316 +++ + import_openssl.sh | 32 +- + openssl.config | 29 - + 18 files changed, 16724 insertions(+), 60 deletions(-) + create mode 100644 crypto/aes/asm/aes-586-mac.S + create mode 100644 crypto/aes/asm/aesni-x86-mac.S + create mode 100644 crypto/aes/asm/vpaes-x86-mac.S + create mode 100644 crypto/bf/asm/bf-586-mac.S + create mode 100644 crypto/bn/asm/bn-586-mac.S + create mode 100644 crypto/bn/asm/co-586-mac.S + create mode 100644 crypto/bn/asm/x86-gf2m-mac.S + create mode 100644 crypto/bn/asm/x86-mont-mac.S + create mode 100644 crypto/des/asm/crypt586-mac.S + create mode 100644 crypto/des/asm/des-586-mac.S + create mode 100644 crypto/md5/asm/md5-586-mac.S + create mode 100644 crypto/modes/asm/ghash-x86-mac.S + create mode 100644 crypto/sha/asm/sha1-586-mac.S + create mode 100644 crypto/sha/asm/sha256-586-mac.S + create mode 100644 crypto/sha/asm/sha512-586-mac.S + create mode 100644 crypto/x86cpuid-mac.S + +diff --git a/crypto/aes/asm/aes-586-mac.S b/crypto/aes/asm/aes-586-mac.S +new file mode 100644 +index 0000000..15d5d7b +--- /dev/null ++++ b/crypto/aes/asm/aes-586-mac.S +@@ -0,0 +1,3200 @@ ++.file "aes-586.s" ++.text ++.align 4 ++__x86_AES_encrypt_compact: ++ movl %edi,20(%esp) ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ movl 240(%edi),%esi ++ leal -2(%esi,%esi,1),%esi ++ leal (%edi,%esi,8),%esi ++ movl %esi,24(%esp) ++ movl -128(%ebp),%edi ++ movl -96(%ebp),%esi ++ movl -64(%ebp),%edi ++ movl -32(%ebp),%esi ++ movl (%ebp),%edi ++ movl 32(%ebp),%esi ++ movl 64(%ebp),%edi ++ movl 96(%ebp),%esi ++.align 4,0x90 ++L000loop: ++ movl %eax,%esi ++ andl $255,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %bh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,4(%esp) ++ movl %ebx,%esi ++ andl $255,%esi ++ shrl $16,%ebx ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %ch,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,8(%esp) ++ movl %ecx,%esi ++ andl $255,%esi ++ shrl $24,%ecx ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %dh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $16,%edi ++ andl $255,%edx ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movzbl %bh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ andl $255,%edx ++ movzbl -128(%ebp,%edx,1),%edx ++ movzbl %ah,%eax ++ movzbl -128(%ebp,%eax,1),%eax ++ shll $8,%eax ++ xorl %eax,%edx ++ movl 4(%esp),%eax ++ andl $255,%ebx ++ movzbl -128(%ebp,%ebx,1),%ebx ++ shll $16,%ebx ++ xorl %ebx,%edx ++ movl 8(%esp),%ebx ++ movzbl -128(%ebp,%ecx,1),%ecx ++ shll $24,%ecx ++ xorl %ecx,%edx ++ movl %esi,%ecx ++ movl %ecx,%esi ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%ecx,%ecx,1),%edi ++ subl %ebp,%esi ++ andl $4278124286,%edi ++ andl $454761243,%esi ++ movl %ecx,%ebp ++ xorl %edi,%esi ++ xorl %esi,%ecx ++ roll $24,%ecx ++ xorl %esi,%ecx ++ rorl $16,%ebp ++ xorl %ebp,%ecx ++ rorl $8,%ebp ++ xorl %ebp,%ecx ++ movl %edx,%esi ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%edx,%edx,1),%edi ++ subl %ebp,%esi ++ andl $4278124286,%edi ++ andl $454761243,%esi ++ movl %edx,%ebp ++ xorl %edi,%esi ++ xorl %esi,%edx ++ roll $24,%edx ++ xorl %esi,%edx ++ rorl $16,%ebp ++ xorl %ebp,%edx ++ rorl $8,%ebp ++ xorl %ebp,%edx ++ movl %eax,%esi ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%eax,%eax,1),%edi ++ subl %ebp,%esi ++ andl $4278124286,%edi ++ andl $454761243,%esi ++ movl %eax,%ebp ++ xorl %edi,%esi ++ xorl %esi,%eax ++ roll $24,%eax ++ xorl %esi,%eax ++ rorl $16,%ebp ++ xorl %ebp,%eax ++ rorl $8,%ebp ++ xorl %ebp,%eax ++ movl %ebx,%esi ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%ebx,%ebx,1),%edi ++ subl %ebp,%esi ++ andl $4278124286,%edi ++ andl $454761243,%esi ++ movl %ebx,%ebp ++ xorl %edi,%esi ++ xorl %esi,%ebx ++ roll $24,%ebx ++ xorl %esi,%ebx ++ rorl $16,%ebp ++ xorl %ebp,%ebx ++ rorl $8,%ebp ++ xorl %ebp,%ebx ++ movl 20(%esp),%edi ++ movl 28(%esp),%ebp ++ addl $16,%edi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ cmpl 24(%esp),%edi ++ movl %edi,20(%esp) ++ jb L000loop ++ movl %eax,%esi ++ andl $255,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %bh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,4(%esp) ++ movl %ebx,%esi ++ andl $255,%esi ++ shrl $16,%ebx ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %ch,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,8(%esp) ++ movl %ecx,%esi ++ andl $255,%esi ++ shrl $24,%ecx ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %dh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $16,%edi ++ andl $255,%edx ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movzbl %bh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl 20(%esp),%edi ++ andl $255,%edx ++ movzbl -128(%ebp,%edx,1),%edx ++ movzbl %ah,%eax ++ movzbl -128(%ebp,%eax,1),%eax ++ shll $8,%eax ++ xorl %eax,%edx ++ movl 4(%esp),%eax ++ andl $255,%ebx ++ movzbl -128(%ebp,%ebx,1),%ebx ++ shll $16,%ebx ++ xorl %ebx,%edx ++ movl 8(%esp),%ebx ++ movzbl -128(%ebp,%ecx,1),%ecx ++ shll $24,%ecx ++ xorl %ecx,%edx ++ movl %esi,%ecx ++ xorl 16(%edi),%eax ++ xorl 20(%edi),%ebx ++ xorl 24(%edi),%ecx ++ xorl 28(%edi),%edx ++ ret ++.align 4 ++__sse_AES_encrypt_compact: ++ pxor (%edi),%mm0 ++ pxor 8(%edi),%mm4 ++ movl 240(%edi),%esi ++ leal -2(%esi,%esi,1),%esi ++ leal (%edi,%esi,8),%esi ++ movl %esi,24(%esp) ++ movl $454761243,%eax ++ movl %eax,8(%esp) ++ movl %eax,12(%esp) ++ movl -128(%ebp),%eax ++ movl -96(%ebp),%ebx ++ movl -64(%ebp),%ecx ++ movl -32(%ebp),%edx ++ movl (%ebp),%eax ++ movl 32(%ebp),%ebx ++ movl 64(%ebp),%ecx ++ movl 96(%ebp),%edx ++.align 4,0x90 ++L001loop: ++ pshufw $8,%mm0,%mm1 ++ pshufw $13,%mm4,%mm5 ++ movd %mm1,%eax ++ movd %mm5,%ebx ++ movzbl %al,%esi ++ movzbl -128(%ebp,%esi,1),%ecx ++ pshufw $13,%mm0,%mm2 ++ movzbl %ah,%edx ++ movzbl -128(%ebp,%edx,1),%edx ++ shll $8,%edx ++ shrl $16,%eax ++ movzbl %bl,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $16,%esi ++ orl %esi,%ecx ++ pshufw $8,%mm4,%mm6 ++ movzbl %bh,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $24,%esi ++ orl %esi,%edx ++ shrl $16,%ebx ++ movzbl %ah,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $8,%esi ++ orl %esi,%ecx ++ movzbl %bh,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $24,%esi ++ orl %esi,%ecx ++ movd %ecx,%mm0 ++ movzbl %al,%esi ++ movzbl -128(%ebp,%esi,1),%ecx ++ movd %mm2,%eax ++ movzbl %bl,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $16,%esi ++ orl %esi,%ecx ++ movd %mm6,%ebx ++ movzbl %ah,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $24,%esi ++ orl %esi,%ecx ++ movzbl %bh,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $8,%esi ++ orl %esi,%ecx ++ movd %ecx,%mm1 ++ movzbl %bl,%esi ++ movzbl -128(%ebp,%esi,1),%ecx ++ shrl $16,%ebx ++ movzbl %al,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $16,%esi ++ orl %esi,%ecx ++ shrl $16,%eax ++ punpckldq %mm1,%mm0 ++ movzbl %ah,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $24,%esi ++ orl %esi,%ecx ++ andl $255,%eax ++ movzbl -128(%ebp,%eax,1),%eax ++ shll $16,%eax ++ orl %eax,%edx ++ movzbl %bh,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $8,%esi ++ orl %esi,%ecx ++ movd %ecx,%mm4 ++ andl $255,%ebx ++ movzbl -128(%ebp,%ebx,1),%ebx ++ orl %ebx,%edx ++ movd %edx,%mm5 ++ punpckldq %mm5,%mm4 ++ addl $16,%edi ++ cmpl 24(%esp),%edi ++ ja L002out ++ movq 8(%esp),%mm2 ++ pxor %mm3,%mm3 ++ pxor %mm7,%mm7 ++ movq %mm0,%mm1 ++ movq %mm4,%mm5 ++ pcmpgtb %mm0,%mm3 ++ pcmpgtb %mm4,%mm7 ++ pand %mm2,%mm3 ++ pand %mm2,%mm7 ++ pshufw $177,%mm0,%mm2 ++ pshufw $177,%mm4,%mm6 ++ paddb %mm0,%mm0 ++ paddb %mm4,%mm4 ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ pshufw $177,%mm2,%mm3 ++ pshufw $177,%mm6,%mm7 ++ pxor %mm0,%mm1 ++ pxor %mm4,%mm5 ++ pxor %mm2,%mm0 ++ pxor %mm6,%mm4 ++ movq %mm3,%mm2 ++ movq %mm7,%mm6 ++ pslld $8,%mm3 ++ pslld $8,%mm7 ++ psrld $24,%mm2 ++ psrld $24,%mm6 ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ pxor %mm2,%mm0 ++ pxor %mm6,%mm4 ++ movq %mm1,%mm3 ++ movq %mm5,%mm7 ++ movq (%edi),%mm2 ++ movq 8(%edi),%mm6 ++ psrld $8,%mm1 ++ psrld $8,%mm5 ++ movl -128(%ebp),%eax ++ pslld $24,%mm3 ++ pslld $24,%mm7 ++ movl -64(%ebp),%ebx ++ pxor %mm1,%mm0 ++ pxor %mm5,%mm4 ++ movl (%ebp),%ecx ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ movl 64(%ebp),%edx ++ pxor %mm2,%mm0 ++ pxor %mm6,%mm4 ++ jmp L001loop ++.align 4,0x90 ++L002out: ++ pxor (%edi),%mm0 ++ pxor 8(%edi),%mm4 ++ ret ++.align 4 ++__x86_AES_encrypt: ++ movl %edi,20(%esp) ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ movl 240(%edi),%esi ++ leal -2(%esi,%esi,1),%esi ++ leal (%edi,%esi,8),%esi ++ movl %esi,24(%esp) ++.align 4,0x90 ++L003loop: ++ movl %eax,%esi ++ andl $255,%esi ++ movl (%ebp,%esi,8),%esi ++ movzbl %bh,%edi ++ xorl 3(%ebp,%edi,8),%esi ++ movl %ecx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ xorl 2(%ebp,%edi,8),%esi ++ movl %edx,%edi ++ shrl $24,%edi ++ xorl 1(%ebp,%edi,8),%esi ++ movl %esi,4(%esp) ++ movl %ebx,%esi ++ andl $255,%esi ++ shrl $16,%ebx ++ movl (%ebp,%esi,8),%esi ++ movzbl %ch,%edi ++ xorl 3(%ebp,%edi,8),%esi ++ movl %edx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ xorl 2(%ebp,%edi,8),%esi ++ movl %eax,%edi ++ shrl $24,%edi ++ xorl 1(%ebp,%edi,8),%esi ++ movl %esi,8(%esp) ++ movl %ecx,%esi ++ andl $255,%esi ++ shrl $24,%ecx ++ movl (%ebp,%esi,8),%esi ++ movzbl %dh,%edi ++ xorl 3(%ebp,%edi,8),%esi ++ movl %eax,%edi ++ shrl $16,%edi ++ andl $255,%edx ++ andl $255,%edi ++ xorl 2(%ebp,%edi,8),%esi ++ movzbl %bh,%edi ++ xorl 1(%ebp,%edi,8),%esi ++ movl 20(%esp),%edi ++ movl (%ebp,%edx,8),%edx ++ movzbl %ah,%eax ++ xorl 3(%ebp,%eax,8),%edx ++ movl 4(%esp),%eax ++ andl $255,%ebx ++ xorl 2(%ebp,%ebx,8),%edx ++ movl 8(%esp),%ebx ++ xorl 1(%ebp,%ecx,8),%edx ++ movl %esi,%ecx ++ addl $16,%edi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ cmpl 24(%esp),%edi ++ movl %edi,20(%esp) ++ jb L003loop ++ movl %eax,%esi ++ andl $255,%esi ++ movl 2(%ebp,%esi,8),%esi ++ andl $255,%esi ++ movzbl %bh,%edi ++ movl (%ebp,%edi,8),%edi ++ andl $65280,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movl (%ebp,%edi,8),%edi ++ andl $16711680,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $24,%edi ++ movl 2(%ebp,%edi,8),%edi ++ andl $4278190080,%edi ++ xorl %edi,%esi ++ movl %esi,4(%esp) ++ movl %ebx,%esi ++ andl $255,%esi ++ shrl $16,%ebx ++ movl 2(%ebp,%esi,8),%esi ++ andl $255,%esi ++ movzbl %ch,%edi ++ movl (%ebp,%edi,8),%edi ++ andl $65280,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movl (%ebp,%edi,8),%edi ++ andl $16711680,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $24,%edi ++ movl 2(%ebp,%edi,8),%edi ++ andl $4278190080,%edi ++ xorl %edi,%esi ++ movl %esi,8(%esp) ++ movl %ecx,%esi ++ andl $255,%esi ++ shrl $24,%ecx ++ movl 2(%ebp,%esi,8),%esi ++ andl $255,%esi ++ movzbl %dh,%edi ++ movl (%ebp,%edi,8),%edi ++ andl $65280,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $16,%edi ++ andl $255,%edx ++ andl $255,%edi ++ movl (%ebp,%edi,8),%edi ++ andl $16711680,%edi ++ xorl %edi,%esi ++ movzbl %bh,%edi ++ movl 2(%ebp,%edi,8),%edi ++ andl $4278190080,%edi ++ xorl %edi,%esi ++ movl 20(%esp),%edi ++ andl $255,%edx ++ movl 2(%ebp,%edx,8),%edx ++ andl $255,%edx ++ movzbl %ah,%eax ++ movl (%ebp,%eax,8),%eax ++ andl $65280,%eax ++ xorl %eax,%edx ++ movl 4(%esp),%eax ++ andl $255,%ebx ++ movl (%ebp,%ebx,8),%ebx ++ andl $16711680,%ebx ++ xorl %ebx,%edx ++ movl 8(%esp),%ebx ++ movl 2(%ebp,%ecx,8),%ecx ++ andl $4278190080,%ecx ++ xorl %ecx,%edx ++ movl %esi,%ecx ++ addl $16,%edi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ ret ++.align 6,0x90 ++LAES_Te: ++.long 2774754246,2774754246 ++.long 2222750968,2222750968 ++.long 2574743534,2574743534 ++.long 2373680118,2373680118 ++.long 234025727,234025727 ++.long 3177933782,3177933782 ++.long 2976870366,2976870366 ++.long 1422247313,1422247313 ++.long 1345335392,1345335392 ++.long 50397442,50397442 ++.long 2842126286,2842126286 ++.long 2099981142,2099981142 ++.long 436141799,436141799 ++.long 1658312629,1658312629 ++.long 3870010189,3870010189 ++.long 2591454956,2591454956 ++.long 1170918031,1170918031 ++.long 2642575903,2642575903 ++.long 1086966153,1086966153 ++.long 2273148410,2273148410 ++.long 368769775,368769775 ++.long 3948501426,3948501426 ++.long 3376891790,3376891790 ++.long 200339707,200339707 ++.long 3970805057,3970805057 ++.long 1742001331,1742001331 ++.long 4255294047,4255294047 ++.long 3937382213,3937382213 ++.long 3214711843,3214711843 ++.long 4154762323,4154762323 ++.long 2524082916,2524082916 ++.long 1539358875,1539358875 ++.long 3266819957,3266819957 ++.long 486407649,486407649 ++.long 2928907069,2928907069 ++.long 1780885068,1780885068 ++.long 1513502316,1513502316 ++.long 1094664062,1094664062 ++.long 49805301,49805301 ++.long 1338821763,1338821763 ++.long 1546925160,1546925160 ++.long 4104496465,4104496465 ++.long 887481809,887481809 ++.long 150073849,150073849 ++.long 2473685474,2473685474 ++.long 1943591083,1943591083 ++.long 1395732834,1395732834 ++.long 1058346282,1058346282 ++.long 201589768,201589768 ++.long 1388824469,1388824469 ++.long 1696801606,1696801606 ++.long 1589887901,1589887901 ++.long 672667696,672667696 ++.long 2711000631,2711000631 ++.long 251987210,251987210 ++.long 3046808111,3046808111 ++.long 151455502,151455502 ++.long 907153956,907153956 ++.long 2608889883,2608889883 ++.long 1038279391,1038279391 ++.long 652995533,652995533 ++.long 1764173646,1764173646 ++.long 3451040383,3451040383 ++.long 2675275242,2675275242 ++.long 453576978,453576978 ++.long 2659418909,2659418909 ++.long 1949051992,1949051992 ++.long 773462580,773462580 ++.long 756751158,756751158 ++.long 2993581788,2993581788 ++.long 3998898868,3998898868 ++.long 4221608027,4221608027 ++.long 4132590244,4132590244 ++.long 1295727478,1295727478 ++.long 1641469623,1641469623 ++.long 3467883389,3467883389 ++.long 2066295122,2066295122 ++.long 1055122397,1055122397 ++.long 1898917726,1898917726 ++.long 2542044179,2542044179 ++.long 4115878822,4115878822 ++.long 1758581177,1758581177 ++.long 0,0 ++.long 753790401,753790401 ++.long 1612718144,1612718144 ++.long 536673507,536673507 ++.long 3367088505,3367088505 ++.long 3982187446,3982187446 ++.long 3194645204,3194645204 ++.long 1187761037,1187761037 ++.long 3653156455,3653156455 ++.long 1262041458,1262041458 ++.long 3729410708,3729410708 ++.long 3561770136,3561770136 ++.long 3898103984,3898103984 ++.long 1255133061,1255133061 ++.long 1808847035,1808847035 ++.long 720367557,720367557 ++.long 3853167183,3853167183 ++.long 385612781,385612781 ++.long 3309519750,3309519750 ++.long 3612167578,3612167578 ++.long 1429418854,1429418854 ++.long 2491778321,2491778321 ++.long 3477423498,3477423498 ++.long 284817897,284817897 ++.long 100794884,100794884 ++.long 2172616702,2172616702 ++.long 4031795360,4031795360 ++.long 1144798328,1144798328 ++.long 3131023141,3131023141 ++.long 3819481163,3819481163 ++.long 4082192802,4082192802 ++.long 4272137053,4272137053 ++.long 3225436288,3225436288 ++.long 2324664069,2324664069 ++.long 2912064063,2912064063 ++.long 3164445985,3164445985 ++.long 1211644016,1211644016 ++.long 83228145,83228145 ++.long 3753688163,3753688163 ++.long 3249976951,3249976951 ++.long 1977277103,1977277103 ++.long 1663115586,1663115586 ++.long 806359072,806359072 ++.long 452984805,452984805 ++.long 250868733,250868733 ++.long 1842533055,1842533055 ++.long 1288555905,1288555905 ++.long 336333848,336333848 ++.long 890442534,890442534 ++.long 804056259,804056259 ++.long 3781124030,3781124030 ++.long 2727843637,2727843637 ++.long 3427026056,3427026056 ++.long 957814574,957814574 ++.long 1472513171,1472513171 ++.long 4071073621,4071073621 ++.long 2189328124,2189328124 ++.long 1195195770,1195195770 ++.long 2892260552,2892260552 ++.long 3881655738,3881655738 ++.long 723065138,723065138 ++.long 2507371494,2507371494 ++.long 2690670784,2690670784 ++.long 2558624025,2558624025 ++.long 3511635870,3511635870 ++.long 2145180835,2145180835 ++.long 1713513028,1713513028 ++.long 2116692564,2116692564 ++.long 2878378043,2878378043 ++.long 2206763019,2206763019 ++.long 3393603212,3393603212 ++.long 703524551,703524551 ++.long 3552098411,3552098411 ++.long 1007948840,1007948840 ++.long 2044649127,2044649127 ++.long 3797835452,3797835452 ++.long 487262998,487262998 ++.long 1994120109,1994120109 ++.long 1004593371,1004593371 ++.long 1446130276,1446130276 ++.long 1312438900,1312438900 ++.long 503974420,503974420 ++.long 3679013266,3679013266 ++.long 168166924,168166924 ++.long 1814307912,1814307912 ++.long 3831258296,3831258296 ++.long 1573044895,1573044895 ++.long 1859376061,1859376061 ++.long 4021070915,4021070915 ++.long 2791465668,2791465668 ++.long 2828112185,2828112185 ++.long 2761266481,2761266481 ++.long 937747667,937747667 ++.long 2339994098,2339994098 ++.long 854058965,854058965 ++.long 1137232011,1137232011 ++.long 1496790894,1496790894 ++.long 3077402074,3077402074 ++.long 2358086913,2358086913 ++.long 1691735473,1691735473 ++.long 3528347292,3528347292 ++.long 3769215305,3769215305 ++.long 3027004632,3027004632 ++.long 4199962284,4199962284 ++.long 133494003,133494003 ++.long 636152527,636152527 ++.long 2942657994,2942657994 ++.long 2390391540,2390391540 ++.long 3920539207,3920539207 ++.long 403179536,403179536 ++.long 3585784431,3585784431 ++.long 2289596656,2289596656 ++.long 1864705354,1864705354 ++.long 1915629148,1915629148 ++.long 605822008,605822008 ++.long 4054230615,4054230615 ++.long 3350508659,3350508659 ++.long 1371981463,1371981463 ++.long 602466507,602466507 ++.long 2094914977,2094914977 ++.long 2624877800,2624877800 ++.long 555687742,555687742 ++.long 3712699286,3712699286 ++.long 3703422305,3703422305 ++.long 2257292045,2257292045 ++.long 2240449039,2240449039 ++.long 2423288032,2423288032 ++.long 1111375484,1111375484 ++.long 3300242801,3300242801 ++.long 2858837708,2858837708 ++.long 3628615824,3628615824 ++.long 84083462,84083462 ++.long 32962295,32962295 ++.long 302911004,302911004 ++.long 2741068226,2741068226 ++.long 1597322602,1597322602 ++.long 4183250862,4183250862 ++.long 3501832553,3501832553 ++.long 2441512471,2441512471 ++.long 1489093017,1489093017 ++.long 656219450,656219450 ++.long 3114180135,3114180135 ++.long 954327513,954327513 ++.long 335083755,335083755 ++.long 3013122091,3013122091 ++.long 856756514,856756514 ++.long 3144247762,3144247762 ++.long 1893325225,1893325225 ++.long 2307821063,2307821063 ++.long 2811532339,2811532339 ++.long 3063651117,3063651117 ++.long 572399164,572399164 ++.long 2458355477,2458355477 ++.long 552200649,552200649 ++.long 1238290055,1238290055 ++.long 4283782570,4283782570 ++.long 2015897680,2015897680 ++.long 2061492133,2061492133 ++.long 2408352771,2408352771 ++.long 4171342169,4171342169 ++.long 2156497161,2156497161 ++.long 386731290,386731290 ++.long 3669999461,3669999461 ++.long 837215959,837215959 ++.long 3326231172,3326231172 ++.long 3093850320,3093850320 ++.long 3275833730,3275833730 ++.long 2962856233,2962856233 ++.long 1999449434,1999449434 ++.long 286199582,286199582 ++.long 3417354363,3417354363 ++.long 4233385128,4233385128 ++.long 3602627437,3602627437 ++.long 974525996,974525996 ++.byte 99,124,119,123,242,107,111,197 ++.byte 48,1,103,43,254,215,171,118 ++.byte 202,130,201,125,250,89,71,240 ++.byte 173,212,162,175,156,164,114,192 ++.byte 183,253,147,38,54,63,247,204 ++.byte 52,165,229,241,113,216,49,21 ++.byte 4,199,35,195,24,150,5,154 ++.byte 7,18,128,226,235,39,178,117 ++.byte 9,131,44,26,27,110,90,160 ++.byte 82,59,214,179,41,227,47,132 ++.byte 83,209,0,237,32,252,177,91 ++.byte 106,203,190,57,74,76,88,207 ++.byte 208,239,170,251,67,77,51,133 ++.byte 69,249,2,127,80,60,159,168 ++.byte 81,163,64,143,146,157,56,245 ++.byte 188,182,218,33,16,255,243,210 ++.byte 205,12,19,236,95,151,68,23 ++.byte 196,167,126,61,100,93,25,115 ++.byte 96,129,79,220,34,42,144,136 ++.byte 70,238,184,20,222,94,11,219 ++.byte 224,50,58,10,73,6,36,92 ++.byte 194,211,172,98,145,149,228,121 ++.byte 231,200,55,109,141,213,78,169 ++.byte 108,86,244,234,101,122,174,8 ++.byte 186,120,37,46,28,166,180,198 ++.byte 232,221,116,31,75,189,139,138 ++.byte 112,62,181,102,72,3,246,14 ++.byte 97,53,87,185,134,193,29,158 ++.byte 225,248,152,17,105,217,142,148 ++.byte 155,30,135,233,206,85,40,223 ++.byte 140,161,137,13,191,230,66,104 ++.byte 65,153,45,15,176,84,187,22 ++.byte 99,124,119,123,242,107,111,197 ++.byte 48,1,103,43,254,215,171,118 ++.byte 202,130,201,125,250,89,71,240 ++.byte 173,212,162,175,156,164,114,192 ++.byte 183,253,147,38,54,63,247,204 ++.byte 52,165,229,241,113,216,49,21 ++.byte 4,199,35,195,24,150,5,154 ++.byte 7,18,128,226,235,39,178,117 ++.byte 9,131,44,26,27,110,90,160 ++.byte 82,59,214,179,41,227,47,132 ++.byte 83,209,0,237,32,252,177,91 ++.byte 106,203,190,57,74,76,88,207 ++.byte 208,239,170,251,67,77,51,133 ++.byte 69,249,2,127,80,60,159,168 ++.byte 81,163,64,143,146,157,56,245 ++.byte 188,182,218,33,16,255,243,210 ++.byte 205,12,19,236,95,151,68,23 ++.byte 196,167,126,61,100,93,25,115 ++.byte 96,129,79,220,34,42,144,136 ++.byte 70,238,184,20,222,94,11,219 ++.byte 224,50,58,10,73,6,36,92 ++.byte 194,211,172,98,145,149,228,121 ++.byte 231,200,55,109,141,213,78,169 ++.byte 108,86,244,234,101,122,174,8 ++.byte 186,120,37,46,28,166,180,198 ++.byte 232,221,116,31,75,189,139,138 ++.byte 112,62,181,102,72,3,246,14 ++.byte 97,53,87,185,134,193,29,158 ++.byte 225,248,152,17,105,217,142,148 ++.byte 155,30,135,233,206,85,40,223 ++.byte 140,161,137,13,191,230,66,104 ++.byte 65,153,45,15,176,84,187,22 ++.byte 99,124,119,123,242,107,111,197 ++.byte 48,1,103,43,254,215,171,118 ++.byte 202,130,201,125,250,89,71,240 ++.byte 173,212,162,175,156,164,114,192 ++.byte 183,253,147,38,54,63,247,204 ++.byte 52,165,229,241,113,216,49,21 ++.byte 4,199,35,195,24,150,5,154 ++.byte 7,18,128,226,235,39,178,117 ++.byte 9,131,44,26,27,110,90,160 ++.byte 82,59,214,179,41,227,47,132 ++.byte 83,209,0,237,32,252,177,91 ++.byte 106,203,190,57,74,76,88,207 ++.byte 208,239,170,251,67,77,51,133 ++.byte 69,249,2,127,80,60,159,168 ++.byte 81,163,64,143,146,157,56,245 ++.byte 188,182,218,33,16,255,243,210 ++.byte 205,12,19,236,95,151,68,23 ++.byte 196,167,126,61,100,93,25,115 ++.byte 96,129,79,220,34,42,144,136 ++.byte 70,238,184,20,222,94,11,219 ++.byte 224,50,58,10,73,6,36,92 ++.byte 194,211,172,98,145,149,228,121 ++.byte 231,200,55,109,141,213,78,169 ++.byte 108,86,244,234,101,122,174,8 ++.byte 186,120,37,46,28,166,180,198 ++.byte 232,221,116,31,75,189,139,138 ++.byte 112,62,181,102,72,3,246,14 ++.byte 97,53,87,185,134,193,29,158 ++.byte 225,248,152,17,105,217,142,148 ++.byte 155,30,135,233,206,85,40,223 ++.byte 140,161,137,13,191,230,66,104 ++.byte 65,153,45,15,176,84,187,22 ++.byte 99,124,119,123,242,107,111,197 ++.byte 48,1,103,43,254,215,171,118 ++.byte 202,130,201,125,250,89,71,240 ++.byte 173,212,162,175,156,164,114,192 ++.byte 183,253,147,38,54,63,247,204 ++.byte 52,165,229,241,113,216,49,21 ++.byte 4,199,35,195,24,150,5,154 ++.byte 7,18,128,226,235,39,178,117 ++.byte 9,131,44,26,27,110,90,160 ++.byte 82,59,214,179,41,227,47,132 ++.byte 83,209,0,237,32,252,177,91 ++.byte 106,203,190,57,74,76,88,207 ++.byte 208,239,170,251,67,77,51,133 ++.byte 69,249,2,127,80,60,159,168 ++.byte 81,163,64,143,146,157,56,245 ++.byte 188,182,218,33,16,255,243,210 ++.byte 205,12,19,236,95,151,68,23 ++.byte 196,167,126,61,100,93,25,115 ++.byte 96,129,79,220,34,42,144,136 ++.byte 70,238,184,20,222,94,11,219 ++.byte 224,50,58,10,73,6,36,92 ++.byte 194,211,172,98,145,149,228,121 ++.byte 231,200,55,109,141,213,78,169 ++.byte 108,86,244,234,101,122,174,8 ++.byte 186,120,37,46,28,166,180,198 ++.byte 232,221,116,31,75,189,139,138 ++.byte 112,62,181,102,72,3,246,14 ++.byte 97,53,87,185,134,193,29,158 ++.byte 225,248,152,17,105,217,142,148 ++.byte 155,30,135,233,206,85,40,223 ++.byte 140,161,137,13,191,230,66,104 ++.byte 65,153,45,15,176,84,187,22 ++.long 1,2,4,8 ++.long 16,32,64,128 ++.long 27,54,0,0 ++.long 0,0,0,0 ++.globl _AES_encrypt ++.align 4 ++_AES_encrypt: ++L_AES_encrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 28(%esp),%edi ++ movl %esp,%eax ++ subl $36,%esp ++ andl $-64,%esp ++ leal -127(%edi),%ebx ++ subl %esp,%ebx ++ negl %ebx ++ andl $960,%ebx ++ subl %ebx,%esp ++ addl $4,%esp ++ movl %eax,28(%esp) ++ call L004pic_point ++L004pic_point: ++ popl %ebp ++ movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L004pic_point(%ebp),%eax ++ leal LAES_Te-L004pic_point(%ebp),%ebp ++ leal 764(%esp),%ebx ++ subl %ebp,%ebx ++ andl $768,%ebx ++ leal 2176(%ebp,%ebx,1),%ebp ++ btl $25,(%eax) ++ jnc L005x86 ++ movq (%esi),%mm0 ++ movq 8(%esi),%mm4 ++ call __sse_AES_encrypt_compact ++ movl 28(%esp),%esp ++ movl 24(%esp),%esi ++ movq %mm0,(%esi) ++ movq %mm4,8(%esi) ++ emms ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 4,0x90 ++L005x86: ++ movl %ebp,24(%esp) ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ call __x86_AES_encrypt_compact ++ movl 28(%esp),%esp ++ movl 24(%esp),%esi ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 4 ++__x86_AES_decrypt_compact: ++ movl %edi,20(%esp) ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ movl 240(%edi),%esi ++ leal -2(%esi,%esi,1),%esi ++ leal (%edi,%esi,8),%esi ++ movl %esi,24(%esp) ++ movl -128(%ebp),%edi ++ movl -96(%ebp),%esi ++ movl -64(%ebp),%edi ++ movl -32(%ebp),%esi ++ movl (%ebp),%edi ++ movl 32(%ebp),%esi ++ movl 64(%ebp),%edi ++ movl 96(%ebp),%esi ++.align 4,0x90 ++L006loop: ++ movl %eax,%esi ++ andl $255,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %dh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %ebx,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,4(%esp) ++ movl %ebx,%esi ++ andl $255,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %ah,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,8(%esp) ++ movl %ecx,%esi ++ andl $255,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %bh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ andl $255,%edx ++ movzbl -128(%ebp,%edx,1),%edx ++ movzbl %ch,%ecx ++ movzbl -128(%ebp,%ecx,1),%ecx ++ shll $8,%ecx ++ xorl %ecx,%edx ++ movl %esi,%ecx ++ shrl $16,%ebx ++ andl $255,%ebx ++ movzbl -128(%ebp,%ebx,1),%ebx ++ shll $16,%ebx ++ xorl %ebx,%edx ++ shrl $24,%eax ++ movzbl -128(%ebp,%eax,1),%eax ++ shll $24,%eax ++ xorl %eax,%edx ++ movl %ecx,%esi ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%ecx,%ecx,1),%eax ++ subl %edi,%esi ++ andl $4278124286,%eax ++ andl $454761243,%esi ++ xorl %eax,%esi ++ movl %esi,%eax ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%eax,%eax,1),%ebx ++ subl %edi,%esi ++ andl $4278124286,%ebx ++ andl $454761243,%esi ++ xorl %ecx,%eax ++ xorl %ebx,%esi ++ movl %esi,%ebx ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%ebx,%ebx,1),%ebp ++ subl %edi,%esi ++ andl $4278124286,%ebp ++ andl $454761243,%esi ++ xorl %ecx,%ebx ++ roll $8,%ecx ++ xorl %esi,%ebp ++ xorl %eax,%ecx ++ xorl %ebp,%eax ++ roll $24,%eax ++ xorl %ebx,%ecx ++ xorl %ebp,%ebx ++ roll $16,%ebx ++ xorl %ebp,%ecx ++ roll $8,%ebp ++ xorl %eax,%ecx ++ xorl %ebx,%ecx ++ movl 4(%esp),%eax ++ xorl %ebp,%ecx ++ movl %ecx,12(%esp) ++ movl %edx,%esi ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%edx,%edx,1),%ebx ++ subl %edi,%esi ++ andl $4278124286,%ebx ++ andl $454761243,%esi ++ xorl %ebx,%esi ++ movl %esi,%ebx ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%ebx,%ebx,1),%ecx ++ subl %edi,%esi ++ andl $4278124286,%ecx ++ andl $454761243,%esi ++ xorl %edx,%ebx ++ xorl %ecx,%esi ++ movl %esi,%ecx ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%ecx,%ecx,1),%ebp ++ subl %edi,%esi ++ andl $4278124286,%ebp ++ andl $454761243,%esi ++ xorl %edx,%ecx ++ roll $8,%edx ++ xorl %esi,%ebp ++ xorl %ebx,%edx ++ xorl %ebp,%ebx ++ roll $24,%ebx ++ xorl %ecx,%edx ++ xorl %ebp,%ecx ++ roll $16,%ecx ++ xorl %ebp,%edx ++ roll $8,%ebp ++ xorl %ebx,%edx ++ xorl %ecx,%edx ++ movl 8(%esp),%ebx ++ xorl %ebp,%edx ++ movl %edx,16(%esp) ++ movl %eax,%esi ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%eax,%eax,1),%ecx ++ subl %edi,%esi ++ andl $4278124286,%ecx ++ andl $454761243,%esi ++ xorl %ecx,%esi ++ movl %esi,%ecx ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%ecx,%ecx,1),%edx ++ subl %edi,%esi ++ andl $4278124286,%edx ++ andl $454761243,%esi ++ xorl %eax,%ecx ++ xorl %edx,%esi ++ movl %esi,%edx ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%edx,%edx,1),%ebp ++ subl %edi,%esi ++ andl $4278124286,%ebp ++ andl $454761243,%esi ++ xorl %eax,%edx ++ roll $8,%eax ++ xorl %esi,%ebp ++ xorl %ecx,%eax ++ xorl %ebp,%ecx ++ roll $24,%ecx ++ xorl %edx,%eax ++ xorl %ebp,%edx ++ roll $16,%edx ++ xorl %ebp,%eax ++ roll $8,%ebp ++ xorl %ecx,%eax ++ xorl %edx,%eax ++ xorl %ebp,%eax ++ movl %ebx,%esi ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%ebx,%ebx,1),%ecx ++ subl %edi,%esi ++ andl $4278124286,%ecx ++ andl $454761243,%esi ++ xorl %ecx,%esi ++ movl %esi,%ecx ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%ecx,%ecx,1),%edx ++ subl %edi,%esi ++ andl $4278124286,%edx ++ andl $454761243,%esi ++ xorl %ebx,%ecx ++ xorl %edx,%esi ++ movl %esi,%edx ++ andl $2155905152,%esi ++ movl %esi,%edi ++ shrl $7,%edi ++ leal (%edx,%edx,1),%ebp ++ subl %edi,%esi ++ andl $4278124286,%ebp ++ andl $454761243,%esi ++ xorl %ebx,%edx ++ roll $8,%ebx ++ xorl %esi,%ebp ++ xorl %ecx,%ebx ++ xorl %ebp,%ecx ++ roll $24,%ecx ++ xorl %edx,%ebx ++ xorl %ebp,%edx ++ roll $16,%edx ++ xorl %ebp,%ebx ++ roll $8,%ebp ++ xorl %ecx,%ebx ++ xorl %edx,%ebx ++ movl 12(%esp),%ecx ++ xorl %ebp,%ebx ++ movl 16(%esp),%edx ++ movl 20(%esp),%edi ++ movl 28(%esp),%ebp ++ addl $16,%edi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ cmpl 24(%esp),%edi ++ movl %edi,20(%esp) ++ jb L006loop ++ movl %eax,%esi ++ andl $255,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %dh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %ebx,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,4(%esp) ++ movl %ebx,%esi ++ andl $255,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %ah,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,8(%esp) ++ movl %ecx,%esi ++ andl $255,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ movzbl %bh,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $24,%edi ++ movzbl -128(%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl 20(%esp),%edi ++ andl $255,%edx ++ movzbl -128(%ebp,%edx,1),%edx ++ movzbl %ch,%ecx ++ movzbl -128(%ebp,%ecx,1),%ecx ++ shll $8,%ecx ++ xorl %ecx,%edx ++ movl %esi,%ecx ++ shrl $16,%ebx ++ andl $255,%ebx ++ movzbl -128(%ebp,%ebx,1),%ebx ++ shll $16,%ebx ++ xorl %ebx,%edx ++ movl 8(%esp),%ebx ++ shrl $24,%eax ++ movzbl -128(%ebp,%eax,1),%eax ++ shll $24,%eax ++ xorl %eax,%edx ++ movl 4(%esp),%eax ++ xorl 16(%edi),%eax ++ xorl 20(%edi),%ebx ++ xorl 24(%edi),%ecx ++ xorl 28(%edi),%edx ++ ret ++.align 4 ++__sse_AES_decrypt_compact: ++ pxor (%edi),%mm0 ++ pxor 8(%edi),%mm4 ++ movl 240(%edi),%esi ++ leal -2(%esi,%esi,1),%esi ++ leal (%edi,%esi,8),%esi ++ movl %esi,24(%esp) ++ movl $454761243,%eax ++ movl %eax,8(%esp) ++ movl %eax,12(%esp) ++ movl -128(%ebp),%eax ++ movl -96(%ebp),%ebx ++ movl -64(%ebp),%ecx ++ movl -32(%ebp),%edx ++ movl (%ebp),%eax ++ movl 32(%ebp),%ebx ++ movl 64(%ebp),%ecx ++ movl 96(%ebp),%edx ++.align 4,0x90 ++L007loop: ++ pshufw $12,%mm0,%mm1 ++ movd %mm1,%eax ++ pshufw $9,%mm4,%mm5 ++ movzbl %al,%esi ++ movzbl -128(%ebp,%esi,1),%ecx ++ movd %mm5,%ebx ++ movzbl %ah,%edx ++ movzbl -128(%ebp,%edx,1),%edx ++ shll $8,%edx ++ pshufw $6,%mm0,%mm2 ++ movzbl %bl,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $16,%esi ++ orl %esi,%ecx ++ shrl $16,%eax ++ movzbl %bh,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $24,%esi ++ orl %esi,%edx ++ shrl $16,%ebx ++ pshufw $3,%mm4,%mm6 ++ movzbl %ah,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $24,%esi ++ orl %esi,%ecx ++ movzbl %bh,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $8,%esi ++ orl %esi,%ecx ++ movd %ecx,%mm0 ++ movzbl %al,%esi ++ movd %mm2,%eax ++ movzbl -128(%ebp,%esi,1),%ecx ++ shll $16,%ecx ++ movzbl %bl,%esi ++ movd %mm6,%ebx ++ movzbl -128(%ebp,%esi,1),%esi ++ orl %esi,%ecx ++ movzbl %al,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ orl %esi,%edx ++ movzbl %bl,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $16,%esi ++ orl %esi,%edx ++ movd %edx,%mm1 ++ movzbl %ah,%esi ++ movzbl -128(%ebp,%esi,1),%edx ++ shll $8,%edx ++ movzbl %bh,%esi ++ shrl $16,%eax ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $24,%esi ++ orl %esi,%edx ++ shrl $16,%ebx ++ punpckldq %mm1,%mm0 ++ movzbl %bh,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $8,%esi ++ orl %esi,%ecx ++ andl $255,%ebx ++ movzbl -128(%ebp,%ebx,1),%ebx ++ orl %ebx,%edx ++ movzbl %al,%esi ++ movzbl -128(%ebp,%esi,1),%esi ++ shll $16,%esi ++ orl %esi,%edx ++ movd %edx,%mm4 ++ movzbl %ah,%eax ++ movzbl -128(%ebp,%eax,1),%eax ++ shll $24,%eax ++ orl %eax,%ecx ++ movd %ecx,%mm5 ++ punpckldq %mm5,%mm4 ++ addl $16,%edi ++ cmpl 24(%esp),%edi ++ ja L008out ++ movq %mm0,%mm3 ++ movq %mm4,%mm7 ++ pshufw $228,%mm0,%mm2 ++ pshufw $228,%mm4,%mm6 ++ movq %mm0,%mm1 ++ movq %mm4,%mm5 ++ pshufw $177,%mm0,%mm0 ++ pshufw $177,%mm4,%mm4 ++ pslld $8,%mm2 ++ pslld $8,%mm6 ++ psrld $8,%mm3 ++ psrld $8,%mm7 ++ pxor %mm2,%mm0 ++ pxor %mm6,%mm4 ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ pslld $16,%mm2 ++ pslld $16,%mm6 ++ psrld $16,%mm3 ++ psrld $16,%mm7 ++ pxor %mm2,%mm0 ++ pxor %mm6,%mm4 ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ movq 8(%esp),%mm3 ++ pxor %mm2,%mm2 ++ pxor %mm6,%mm6 ++ pcmpgtb %mm1,%mm2 ++ pcmpgtb %mm5,%mm6 ++ pand %mm3,%mm2 ++ pand %mm3,%mm6 ++ paddb %mm1,%mm1 ++ paddb %mm5,%mm5 ++ pxor %mm2,%mm1 ++ pxor %mm6,%mm5 ++ movq %mm1,%mm3 ++ movq %mm5,%mm7 ++ movq %mm1,%mm2 ++ movq %mm5,%mm6 ++ pxor %mm1,%mm0 ++ pxor %mm5,%mm4 ++ pslld $24,%mm3 ++ pslld $24,%mm7 ++ psrld $8,%mm2 ++ psrld $8,%mm6 ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ pxor %mm2,%mm0 ++ pxor %mm6,%mm4 ++ movq 8(%esp),%mm2 ++ pxor %mm3,%mm3 ++ pxor %mm7,%mm7 ++ pcmpgtb %mm1,%mm3 ++ pcmpgtb %mm5,%mm7 ++ pand %mm2,%mm3 ++ pand %mm2,%mm7 ++ paddb %mm1,%mm1 ++ paddb %mm5,%mm5 ++ pxor %mm3,%mm1 ++ pxor %mm7,%mm5 ++ pshufw $177,%mm1,%mm3 ++ pshufw $177,%mm5,%mm7 ++ pxor %mm1,%mm0 ++ pxor %mm5,%mm4 ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ pxor %mm3,%mm3 ++ pxor %mm7,%mm7 ++ pcmpgtb %mm1,%mm3 ++ pcmpgtb %mm5,%mm7 ++ pand %mm2,%mm3 ++ pand %mm2,%mm7 ++ paddb %mm1,%mm1 ++ paddb %mm5,%mm5 ++ pxor %mm3,%mm1 ++ pxor %mm7,%mm5 ++ pxor %mm1,%mm0 ++ pxor %mm5,%mm4 ++ movq %mm1,%mm3 ++ movq %mm5,%mm7 ++ pshufw $177,%mm1,%mm2 ++ pshufw $177,%mm5,%mm6 ++ pxor %mm2,%mm0 ++ pxor %mm6,%mm4 ++ pslld $8,%mm1 ++ pslld $8,%mm5 ++ psrld $8,%mm3 ++ psrld $8,%mm7 ++ movq (%edi),%mm2 ++ movq 8(%edi),%mm6 ++ pxor %mm1,%mm0 ++ pxor %mm5,%mm4 ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ movl -128(%ebp),%eax ++ pslld $16,%mm1 ++ pslld $16,%mm5 ++ movl -64(%ebp),%ebx ++ psrld $16,%mm3 ++ psrld $16,%mm7 ++ movl (%ebp),%ecx ++ pxor %mm1,%mm0 ++ pxor %mm5,%mm4 ++ movl 64(%ebp),%edx ++ pxor %mm3,%mm0 ++ pxor %mm7,%mm4 ++ pxor %mm2,%mm0 ++ pxor %mm6,%mm4 ++ jmp L007loop ++.align 4,0x90 ++L008out: ++ pxor (%edi),%mm0 ++ pxor 8(%edi),%mm4 ++ ret ++.align 4 ++__x86_AES_decrypt: ++ movl %edi,20(%esp) ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ movl 240(%edi),%esi ++ leal -2(%esi,%esi,1),%esi ++ leal (%edi,%esi,8),%esi ++ movl %esi,24(%esp) ++.align 4,0x90 ++L009loop: ++ movl %eax,%esi ++ andl $255,%esi ++ movl (%ebp,%esi,8),%esi ++ movzbl %dh,%edi ++ xorl 3(%ebp,%edi,8),%esi ++ movl %ecx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ xorl 2(%ebp,%edi,8),%esi ++ movl %ebx,%edi ++ shrl $24,%edi ++ xorl 1(%ebp,%edi,8),%esi ++ movl %esi,4(%esp) ++ movl %ebx,%esi ++ andl $255,%esi ++ movl (%ebp,%esi,8),%esi ++ movzbl %ah,%edi ++ xorl 3(%ebp,%edi,8),%esi ++ movl %edx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ xorl 2(%ebp,%edi,8),%esi ++ movl %ecx,%edi ++ shrl $24,%edi ++ xorl 1(%ebp,%edi,8),%esi ++ movl %esi,8(%esp) ++ movl %ecx,%esi ++ andl $255,%esi ++ movl (%ebp,%esi,8),%esi ++ movzbl %bh,%edi ++ xorl 3(%ebp,%edi,8),%esi ++ movl %eax,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ xorl 2(%ebp,%edi,8),%esi ++ movl %edx,%edi ++ shrl $24,%edi ++ xorl 1(%ebp,%edi,8),%esi ++ movl 20(%esp),%edi ++ andl $255,%edx ++ movl (%ebp,%edx,8),%edx ++ movzbl %ch,%ecx ++ xorl 3(%ebp,%ecx,8),%edx ++ movl %esi,%ecx ++ shrl $16,%ebx ++ andl $255,%ebx ++ xorl 2(%ebp,%ebx,8),%edx ++ movl 8(%esp),%ebx ++ shrl $24,%eax ++ xorl 1(%ebp,%eax,8),%edx ++ movl 4(%esp),%eax ++ addl $16,%edi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ cmpl 24(%esp),%edi ++ movl %edi,20(%esp) ++ jb L009loop ++ leal 2176(%ebp),%ebp ++ movl -128(%ebp),%edi ++ movl -96(%ebp),%esi ++ movl -64(%ebp),%edi ++ movl -32(%ebp),%esi ++ movl (%ebp),%edi ++ movl 32(%ebp),%esi ++ movl 64(%ebp),%edi ++ movl 96(%ebp),%esi ++ leal -128(%ebp),%ebp ++ movl %eax,%esi ++ andl $255,%esi ++ movzbl (%ebp,%esi,1),%esi ++ movzbl %dh,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %ebx,%edi ++ shrl $24,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,4(%esp) ++ movl %ebx,%esi ++ andl $255,%esi ++ movzbl (%ebp,%esi,1),%esi ++ movzbl %ah,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %ecx,%edi ++ shrl $24,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl %esi,8(%esp) ++ movl %ecx,%esi ++ andl $255,%esi ++ movzbl (%ebp,%esi,1),%esi ++ movzbl %bh,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $8,%edi ++ xorl %edi,%esi ++ movl %eax,%edi ++ shrl $16,%edi ++ andl $255,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $16,%edi ++ xorl %edi,%esi ++ movl %edx,%edi ++ shrl $24,%edi ++ movzbl (%ebp,%edi,1),%edi ++ shll $24,%edi ++ xorl %edi,%esi ++ movl 20(%esp),%edi ++ andl $255,%edx ++ movzbl (%ebp,%edx,1),%edx ++ movzbl %ch,%ecx ++ movzbl (%ebp,%ecx,1),%ecx ++ shll $8,%ecx ++ xorl %ecx,%edx ++ movl %esi,%ecx ++ shrl $16,%ebx ++ andl $255,%ebx ++ movzbl (%ebp,%ebx,1),%ebx ++ shll $16,%ebx ++ xorl %ebx,%edx ++ movl 8(%esp),%ebx ++ shrl $24,%eax ++ movzbl (%ebp,%eax,1),%eax ++ shll $24,%eax ++ xorl %eax,%edx ++ movl 4(%esp),%eax ++ leal -2048(%ebp),%ebp ++ addl $16,%edi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ ret ++.align 6,0x90 ++LAES_Td: ++.long 1353184337,1353184337 ++.long 1399144830,1399144830 ++.long 3282310938,3282310938 ++.long 2522752826,2522752826 ++.long 3412831035,3412831035 ++.long 4047871263,4047871263 ++.long 2874735276,2874735276 ++.long 2466505547,2466505547 ++.long 1442459680,1442459680 ++.long 4134368941,4134368941 ++.long 2440481928,2440481928 ++.long 625738485,625738485 ++.long 4242007375,4242007375 ++.long 3620416197,3620416197 ++.long 2151953702,2151953702 ++.long 2409849525,2409849525 ++.long 1230680542,1230680542 ++.long 1729870373,1729870373 ++.long 2551114309,2551114309 ++.long 3787521629,3787521629 ++.long 41234371,41234371 ++.long 317738113,317738113 ++.long 2744600205,2744600205 ++.long 3338261355,3338261355 ++.long 3881799427,3881799427 ++.long 2510066197,2510066197 ++.long 3950669247,3950669247 ++.long 3663286933,3663286933 ++.long 763608788,763608788 ++.long 3542185048,3542185048 ++.long 694804553,694804553 ++.long 1154009486,1154009486 ++.long 1787413109,1787413109 ++.long 2021232372,2021232372 ++.long 1799248025,1799248025 ++.long 3715217703,3715217703 ++.long 3058688446,3058688446 ++.long 397248752,397248752 ++.long 1722556617,1722556617 ++.long 3023752829,3023752829 ++.long 407560035,407560035 ++.long 2184256229,2184256229 ++.long 1613975959,1613975959 ++.long 1165972322,1165972322 ++.long 3765920945,3765920945 ++.long 2226023355,2226023355 ++.long 480281086,480281086 ++.long 2485848313,2485848313 ++.long 1483229296,1483229296 ++.long 436028815,436028815 ++.long 2272059028,2272059028 ++.long 3086515026,3086515026 ++.long 601060267,601060267 ++.long 3791801202,3791801202 ++.long 1468997603,1468997603 ++.long 715871590,715871590 ++.long 120122290,120122290 ++.long 63092015,63092015 ++.long 2591802758,2591802758 ++.long 2768779219,2768779219 ++.long 4068943920,4068943920 ++.long 2997206819,2997206819 ++.long 3127509762,3127509762 ++.long 1552029421,1552029421 ++.long 723308426,723308426 ++.long 2461301159,2461301159 ++.long 4042393587,4042393587 ++.long 2715969870,2715969870 ++.long 3455375973,3455375973 ++.long 3586000134,3586000134 ++.long 526529745,526529745 ++.long 2331944644,2331944644 ++.long 2639474228,2639474228 ++.long 2689987490,2689987490 ++.long 853641733,853641733 ++.long 1978398372,1978398372 ++.long 971801355,971801355 ++.long 2867814464,2867814464 ++.long 111112542,111112542 ++.long 1360031421,1360031421 ++.long 4186579262,4186579262 ++.long 1023860118,1023860118 ++.long 2919579357,2919579357 ++.long 1186850381,1186850381 ++.long 3045938321,3045938321 ++.long 90031217,90031217 ++.long 1876166148,1876166148 ++.long 4279586912,4279586912 ++.long 620468249,620468249 ++.long 2548678102,2548678102 ++.long 3426959497,3426959497 ++.long 2006899047,2006899047 ++.long 3175278768,3175278768 ++.long 2290845959,2290845959 ++.long 945494503,945494503 ++.long 3689859193,3689859193 ++.long 1191869601,1191869601 ++.long 3910091388,3910091388 ++.long 3374220536,3374220536 ++.long 0,0 ++.long 2206629897,2206629897 ++.long 1223502642,1223502642 ++.long 2893025566,2893025566 ++.long 1316117100,1316117100 ++.long 4227796733,4227796733 ++.long 1446544655,1446544655 ++.long 517320253,517320253 ++.long 658058550,658058550 ++.long 1691946762,1691946762 ++.long 564550760,564550760 ++.long 3511966619,3511966619 ++.long 976107044,976107044 ++.long 2976320012,2976320012 ++.long 266819475,266819475 ++.long 3533106868,3533106868 ++.long 2660342555,2660342555 ++.long 1338359936,1338359936 ++.long 2720062561,2720062561 ++.long 1766553434,1766553434 ++.long 370807324,370807324 ++.long 179999714,179999714 ++.long 3844776128,3844776128 ++.long 1138762300,1138762300 ++.long 488053522,488053522 ++.long 185403662,185403662 ++.long 2915535858,2915535858 ++.long 3114841645,3114841645 ++.long 3366526484,3366526484 ++.long 2233069911,2233069911 ++.long 1275557295,1275557295 ++.long 3151862254,3151862254 ++.long 4250959779,4250959779 ++.long 2670068215,2670068215 ++.long 3170202204,3170202204 ++.long 3309004356,3309004356 ++.long 880737115,880737115 ++.long 1982415755,1982415755 ++.long 3703972811,3703972811 ++.long 1761406390,1761406390 ++.long 1676797112,1676797112 ++.long 3403428311,3403428311 ++.long 277177154,277177154 ++.long 1076008723,1076008723 ++.long 538035844,538035844 ++.long 2099530373,2099530373 ++.long 4164795346,4164795346 ++.long 288553390,288553390 ++.long 1839278535,1839278535 ++.long 1261411869,1261411869 ++.long 4080055004,4080055004 ++.long 3964831245,3964831245 ++.long 3504587127,3504587127 ++.long 1813426987,1813426987 ++.long 2579067049,2579067049 ++.long 4199060497,4199060497 ++.long 577038663,577038663 ++.long 3297574056,3297574056 ++.long 440397984,440397984 ++.long 3626794326,3626794326 ++.long 4019204898,4019204898 ++.long 3343796615,3343796615 ++.long 3251714265,3251714265 ++.long 4272081548,4272081548 ++.long 906744984,906744984 ++.long 3481400742,3481400742 ++.long 685669029,685669029 ++.long 646887386,646887386 ++.long 2764025151,2764025151 ++.long 3835509292,3835509292 ++.long 227702864,227702864 ++.long 2613862250,2613862250 ++.long 1648787028,1648787028 ++.long 3256061430,3256061430 ++.long 3904428176,3904428176 ++.long 1593260334,1593260334 ++.long 4121936770,4121936770 ++.long 3196083615,3196083615 ++.long 2090061929,2090061929 ++.long 2838353263,2838353263 ++.long 3004310991,3004310991 ++.long 999926984,999926984 ++.long 2809993232,2809993232 ++.long 1852021992,1852021992 ++.long 2075868123,2075868123 ++.long 158869197,158869197 ++.long 4095236462,4095236462 ++.long 28809964,28809964 ++.long 2828685187,2828685187 ++.long 1701746150,1701746150 ++.long 2129067946,2129067946 ++.long 147831841,147831841 ++.long 3873969647,3873969647 ++.long 3650873274,3650873274 ++.long 3459673930,3459673930 ++.long 3557400554,3557400554 ++.long 3598495785,3598495785 ++.long 2947720241,2947720241 ++.long 824393514,824393514 ++.long 815048134,815048134 ++.long 3227951669,3227951669 ++.long 935087732,935087732 ++.long 2798289660,2798289660 ++.long 2966458592,2966458592 ++.long 366520115,366520115 ++.long 1251476721,1251476721 ++.long 4158319681,4158319681 ++.long 240176511,240176511 ++.long 804688151,804688151 ++.long 2379631990,2379631990 ++.long 1303441219,1303441219 ++.long 1414376140,1414376140 ++.long 3741619940,3741619940 ++.long 3820343710,3820343710 ++.long 461924940,461924940 ++.long 3089050817,3089050817 ++.long 2136040774,2136040774 ++.long 82468509,82468509 ++.long 1563790337,1563790337 ++.long 1937016826,1937016826 ++.long 776014843,776014843 ++.long 1511876531,1511876531 ++.long 1389550482,1389550482 ++.long 861278441,861278441 ++.long 323475053,323475053 ++.long 2355222426,2355222426 ++.long 2047648055,2047648055 ++.long 2383738969,2383738969 ++.long 2302415851,2302415851 ++.long 3995576782,3995576782 ++.long 902390199,902390199 ++.long 3991215329,3991215329 ++.long 1018251130,1018251130 ++.long 1507840668,1507840668 ++.long 1064563285,1064563285 ++.long 2043548696,2043548696 ++.long 3208103795,3208103795 ++.long 3939366739,3939366739 ++.long 1537932639,1537932639 ++.long 342834655,342834655 ++.long 2262516856,2262516856 ++.long 2180231114,2180231114 ++.long 1053059257,1053059257 ++.long 741614648,741614648 ++.long 1598071746,1598071746 ++.long 1925389590,1925389590 ++.long 203809468,203809468 ++.long 2336832552,2336832552 ++.long 1100287487,1100287487 ++.long 1895934009,1895934009 ++.long 3736275976,3736275976 ++.long 2632234200,2632234200 ++.long 2428589668,2428589668 ++.long 1636092795,1636092795 ++.long 1890988757,1890988757 ++.long 1952214088,1952214088 ++.long 1113045200,1113045200 ++.byte 82,9,106,213,48,54,165,56 ++.byte 191,64,163,158,129,243,215,251 ++.byte 124,227,57,130,155,47,255,135 ++.byte 52,142,67,68,196,222,233,203 ++.byte 84,123,148,50,166,194,35,61 ++.byte 238,76,149,11,66,250,195,78 ++.byte 8,46,161,102,40,217,36,178 ++.byte 118,91,162,73,109,139,209,37 ++.byte 114,248,246,100,134,104,152,22 ++.byte 212,164,92,204,93,101,182,146 ++.byte 108,112,72,80,253,237,185,218 ++.byte 94,21,70,87,167,141,157,132 ++.byte 144,216,171,0,140,188,211,10 ++.byte 247,228,88,5,184,179,69,6 ++.byte 208,44,30,143,202,63,15,2 ++.byte 193,175,189,3,1,19,138,107 ++.byte 58,145,17,65,79,103,220,234 ++.byte 151,242,207,206,240,180,230,115 ++.byte 150,172,116,34,231,173,53,133 ++.byte 226,249,55,232,28,117,223,110 ++.byte 71,241,26,113,29,41,197,137 ++.byte 111,183,98,14,170,24,190,27 ++.byte 252,86,62,75,198,210,121,32 ++.byte 154,219,192,254,120,205,90,244 ++.byte 31,221,168,51,136,7,199,49 ++.byte 177,18,16,89,39,128,236,95 ++.byte 96,81,127,169,25,181,74,13 ++.byte 45,229,122,159,147,201,156,239 ++.byte 160,224,59,77,174,42,245,176 ++.byte 200,235,187,60,131,83,153,97 ++.byte 23,43,4,126,186,119,214,38 ++.byte 225,105,20,99,85,33,12,125 ++.byte 82,9,106,213,48,54,165,56 ++.byte 191,64,163,158,129,243,215,251 ++.byte 124,227,57,130,155,47,255,135 ++.byte 52,142,67,68,196,222,233,203 ++.byte 84,123,148,50,166,194,35,61 ++.byte 238,76,149,11,66,250,195,78 ++.byte 8,46,161,102,40,217,36,178 ++.byte 118,91,162,73,109,139,209,37 ++.byte 114,248,246,100,134,104,152,22 ++.byte 212,164,92,204,93,101,182,146 ++.byte 108,112,72,80,253,237,185,218 ++.byte 94,21,70,87,167,141,157,132 ++.byte 144,216,171,0,140,188,211,10 ++.byte 247,228,88,5,184,179,69,6 ++.byte 208,44,30,143,202,63,15,2 ++.byte 193,175,189,3,1,19,138,107 ++.byte 58,145,17,65,79,103,220,234 ++.byte 151,242,207,206,240,180,230,115 ++.byte 150,172,116,34,231,173,53,133 ++.byte 226,249,55,232,28,117,223,110 ++.byte 71,241,26,113,29,41,197,137 ++.byte 111,183,98,14,170,24,190,27 ++.byte 252,86,62,75,198,210,121,32 ++.byte 154,219,192,254,120,205,90,244 ++.byte 31,221,168,51,136,7,199,49 ++.byte 177,18,16,89,39,128,236,95 ++.byte 96,81,127,169,25,181,74,13 ++.byte 45,229,122,159,147,201,156,239 ++.byte 160,224,59,77,174,42,245,176 ++.byte 200,235,187,60,131,83,153,97 ++.byte 23,43,4,126,186,119,214,38 ++.byte 225,105,20,99,85,33,12,125 ++.byte 82,9,106,213,48,54,165,56 ++.byte 191,64,163,158,129,243,215,251 ++.byte 124,227,57,130,155,47,255,135 ++.byte 52,142,67,68,196,222,233,203 ++.byte 84,123,148,50,166,194,35,61 ++.byte 238,76,149,11,66,250,195,78 ++.byte 8,46,161,102,40,217,36,178 ++.byte 118,91,162,73,109,139,209,37 ++.byte 114,248,246,100,134,104,152,22 ++.byte 212,164,92,204,93,101,182,146 ++.byte 108,112,72,80,253,237,185,218 ++.byte 94,21,70,87,167,141,157,132 ++.byte 144,216,171,0,140,188,211,10 ++.byte 247,228,88,5,184,179,69,6 ++.byte 208,44,30,143,202,63,15,2 ++.byte 193,175,189,3,1,19,138,107 ++.byte 58,145,17,65,79,103,220,234 ++.byte 151,242,207,206,240,180,230,115 ++.byte 150,172,116,34,231,173,53,133 ++.byte 226,249,55,232,28,117,223,110 ++.byte 71,241,26,113,29,41,197,137 ++.byte 111,183,98,14,170,24,190,27 ++.byte 252,86,62,75,198,210,121,32 ++.byte 154,219,192,254,120,205,90,244 ++.byte 31,221,168,51,136,7,199,49 ++.byte 177,18,16,89,39,128,236,95 ++.byte 96,81,127,169,25,181,74,13 ++.byte 45,229,122,159,147,201,156,239 ++.byte 160,224,59,77,174,42,245,176 ++.byte 200,235,187,60,131,83,153,97 ++.byte 23,43,4,126,186,119,214,38 ++.byte 225,105,20,99,85,33,12,125 ++.byte 82,9,106,213,48,54,165,56 ++.byte 191,64,163,158,129,243,215,251 ++.byte 124,227,57,130,155,47,255,135 ++.byte 52,142,67,68,196,222,233,203 ++.byte 84,123,148,50,166,194,35,61 ++.byte 238,76,149,11,66,250,195,78 ++.byte 8,46,161,102,40,217,36,178 ++.byte 118,91,162,73,109,139,209,37 ++.byte 114,248,246,100,134,104,152,22 ++.byte 212,164,92,204,93,101,182,146 ++.byte 108,112,72,80,253,237,185,218 ++.byte 94,21,70,87,167,141,157,132 ++.byte 144,216,171,0,140,188,211,10 ++.byte 247,228,88,5,184,179,69,6 ++.byte 208,44,30,143,202,63,15,2 ++.byte 193,175,189,3,1,19,138,107 ++.byte 58,145,17,65,79,103,220,234 ++.byte 151,242,207,206,240,180,230,115 ++.byte 150,172,116,34,231,173,53,133 ++.byte 226,249,55,232,28,117,223,110 ++.byte 71,241,26,113,29,41,197,137 ++.byte 111,183,98,14,170,24,190,27 ++.byte 252,86,62,75,198,210,121,32 ++.byte 154,219,192,254,120,205,90,244 ++.byte 31,221,168,51,136,7,199,49 ++.byte 177,18,16,89,39,128,236,95 ++.byte 96,81,127,169,25,181,74,13 ++.byte 45,229,122,159,147,201,156,239 ++.byte 160,224,59,77,174,42,245,176 ++.byte 200,235,187,60,131,83,153,97 ++.byte 23,43,4,126,186,119,214,38 ++.byte 225,105,20,99,85,33,12,125 ++.globl _AES_decrypt ++.align 4 ++_AES_decrypt: ++L_AES_decrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 28(%esp),%edi ++ movl %esp,%eax ++ subl $36,%esp ++ andl $-64,%esp ++ leal -127(%edi),%ebx ++ subl %esp,%ebx ++ negl %ebx ++ andl $960,%ebx ++ subl %ebx,%esp ++ addl $4,%esp ++ movl %eax,28(%esp) ++ call L010pic_point ++L010pic_point: ++ popl %ebp ++ movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L010pic_point(%ebp),%eax ++ leal LAES_Td-L010pic_point(%ebp),%ebp ++ leal 764(%esp),%ebx ++ subl %ebp,%ebx ++ andl $768,%ebx ++ leal 2176(%ebp,%ebx,1),%ebp ++ btl $25,(%eax) ++ jnc L011x86 ++ movq (%esi),%mm0 ++ movq 8(%esi),%mm4 ++ call __sse_AES_decrypt_compact ++ movl 28(%esp),%esp ++ movl 24(%esp),%esi ++ movq %mm0,(%esi) ++ movq %mm4,8(%esi) ++ emms ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 4,0x90 ++L011x86: ++ movl %ebp,24(%esp) ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ call __x86_AES_decrypt_compact ++ movl 28(%esp),%esp ++ movl 24(%esp),%esi ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _AES_cbc_encrypt ++.align 4 ++_AES_cbc_encrypt: ++L_AES_cbc_encrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 28(%esp),%ecx ++ cmpl $0,%ecx ++ je L012drop_out ++ call L013pic_point ++L013pic_point: ++ popl %ebp ++ movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L013pic_point(%ebp),%eax ++ cmpl $0,40(%esp) ++ leal LAES_Te-L013pic_point(%ebp),%ebp ++ jne L014picked_te ++ leal LAES_Td-LAES_Te(%ebp),%ebp ++L014picked_te: ++ pushfl ++ cld ++ cmpl $512,%ecx ++ jb L015slow_way ++ testl $15,%ecx ++ jnz L015slow_way ++ btl $28,(%eax) ++ jc L015slow_way ++ leal -324(%esp),%esi ++ andl $-64,%esi ++ movl %ebp,%eax ++ leal 2304(%ebp),%ebx ++ movl %esi,%edx ++ andl $4095,%eax ++ andl $4095,%ebx ++ andl $4095,%edx ++ cmpl %ebx,%edx ++ jb L016tbl_break_out ++ subl %ebx,%edx ++ subl %edx,%esi ++ jmp L017tbl_ok ++.align 2,0x90 ++L016tbl_break_out: ++ subl %eax,%edx ++ andl $4095,%edx ++ addl $384,%edx ++ subl %edx,%esi ++.align 2,0x90 ++L017tbl_ok: ++ leal 24(%esp),%edx ++ xchgl %esi,%esp ++ addl $4,%esp ++ movl %ebp,24(%esp) ++ movl %esi,28(%esp) ++ movl (%edx),%eax ++ movl 4(%edx),%ebx ++ movl 12(%edx),%edi ++ movl 16(%edx),%esi ++ movl 20(%edx),%edx ++ movl %eax,32(%esp) ++ movl %ebx,36(%esp) ++ movl %ecx,40(%esp) ++ movl %edi,44(%esp) ++ movl %esi,48(%esp) ++ movl $0,316(%esp) ++ movl %edi,%ebx ++ movl $61,%ecx ++ subl %ebp,%ebx ++ movl %edi,%esi ++ andl $4095,%ebx ++ leal 76(%esp),%edi ++ cmpl $2304,%ebx ++ jb L018do_copy ++ cmpl $3852,%ebx ++ jb L019skip_copy ++.align 2,0x90 ++L018do_copy: ++ movl %edi,44(%esp) ++.long 2784229001 ++L019skip_copy: ++ movl $16,%edi ++.align 2,0x90 ++L020prefetch_tbl: ++ movl (%ebp),%eax ++ movl 32(%ebp),%ebx ++ movl 64(%ebp),%ecx ++ movl 96(%ebp),%esi ++ leal 128(%ebp),%ebp ++ subl $1,%edi ++ jnz L020prefetch_tbl ++ subl $2048,%ebp ++ movl 32(%esp),%esi ++ movl 48(%esp),%edi ++ cmpl $0,%edx ++ je L021fast_decrypt ++ movl (%edi),%eax ++ movl 4(%edi),%ebx ++.align 4,0x90 ++L022fast_enc_loop: ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++ xorl (%esi),%eax ++ xorl 4(%esi),%ebx ++ xorl 8(%esi),%ecx ++ xorl 12(%esi),%edx ++ movl 44(%esp),%edi ++ call __x86_AES_encrypt ++ movl 32(%esp),%esi ++ movl 36(%esp),%edi ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ leal 16(%esi),%esi ++ movl 40(%esp),%ecx ++ movl %esi,32(%esp) ++ leal 16(%edi),%edx ++ movl %edx,36(%esp) ++ subl $16,%ecx ++ movl %ecx,40(%esp) ++ jnz L022fast_enc_loop ++ movl 48(%esp),%esi ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ cmpl $0,316(%esp) ++ movl 44(%esp),%edi ++ je L023skip_ezero ++ movl $60,%ecx ++ xorl %eax,%eax ++.align 2,0x90 ++.long 2884892297 ++L023skip_ezero: ++ movl 28(%esp),%esp ++ popfl ++L012drop_out: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++ pushfl ++.align 4,0x90 ++L021fast_decrypt: ++ cmpl 36(%esp),%esi ++ je L024fast_dec_in_place ++ movl %edi,52(%esp) ++.align 2,0x90 ++.align 4,0x90 ++L025fast_dec_loop: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ movl 44(%esp),%edi ++ call __x86_AES_decrypt ++ movl 52(%esp),%edi ++ movl 40(%esp),%esi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ movl 36(%esp),%edi ++ movl 32(%esp),%esi ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 40(%esp),%ecx ++ movl %esi,52(%esp) ++ leal 16(%esi),%esi ++ movl %esi,32(%esp) ++ leal 16(%edi),%edi ++ movl %edi,36(%esp) ++ subl $16,%ecx ++ movl %ecx,40(%esp) ++ jnz L025fast_dec_loop ++ movl 52(%esp),%edi ++ movl 48(%esp),%esi ++ movl (%edi),%eax ++ movl 4(%edi),%ebx ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ jmp L026fast_dec_out ++.align 4,0x90 ++L024fast_dec_in_place: ++L027fast_dec_in_place_loop: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ leal 60(%esp),%edi ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 44(%esp),%edi ++ call __x86_AES_decrypt ++ movl 48(%esp),%edi ++ movl 36(%esp),%esi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ leal 16(%esi),%esi ++ movl %esi,36(%esp) ++ leal 60(%esp),%esi ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 32(%esp),%esi ++ movl 40(%esp),%ecx ++ leal 16(%esi),%esi ++ movl %esi,32(%esp) ++ subl $16,%ecx ++ movl %ecx,40(%esp) ++ jnz L027fast_dec_in_place_loop ++.align 2,0x90 ++L026fast_dec_out: ++ cmpl $0,316(%esp) ++ movl 44(%esp),%edi ++ je L028skip_dzero ++ movl $60,%ecx ++ xorl %eax,%eax ++.align 2,0x90 ++.long 2884892297 ++L028skip_dzero: ++ movl 28(%esp),%esp ++ popfl ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++ pushfl ++.align 4,0x90 ++L015slow_way: ++ movl (%eax),%eax ++ movl 36(%esp),%edi ++ leal -80(%esp),%esi ++ andl $-64,%esi ++ leal -143(%edi),%ebx ++ subl %esi,%ebx ++ negl %ebx ++ andl $960,%ebx ++ subl %ebx,%esi ++ leal 768(%esi),%ebx ++ subl %ebp,%ebx ++ andl $768,%ebx ++ leal 2176(%ebp,%ebx,1),%ebp ++ leal 24(%esp),%edx ++ xchgl %esi,%esp ++ addl $4,%esp ++ movl %ebp,24(%esp) ++ movl %esi,28(%esp) ++ movl %eax,52(%esp) ++ movl (%edx),%eax ++ movl 4(%edx),%ebx ++ movl 16(%edx),%esi ++ movl 20(%edx),%edx ++ movl %eax,32(%esp) ++ movl %ebx,36(%esp) ++ movl %ecx,40(%esp) ++ movl %edi,44(%esp) ++ movl %esi,48(%esp) ++ movl %esi,%edi ++ movl %eax,%esi ++ cmpl $0,%edx ++ je L029slow_decrypt ++ cmpl $16,%ecx ++ movl %ebx,%edx ++ jb L030slow_enc_tail ++ btl $25,52(%esp) ++ jnc L031slow_enc_x86 ++ movq (%edi),%mm0 ++ movq 8(%edi),%mm4 ++.align 4,0x90 ++L032slow_enc_loop_sse: ++ pxor (%esi),%mm0 ++ pxor 8(%esi),%mm4 ++ movl 44(%esp),%edi ++ call __sse_AES_encrypt_compact ++ movl 32(%esp),%esi ++ movl 36(%esp),%edi ++ movl 40(%esp),%ecx ++ movq %mm0,(%edi) ++ movq %mm4,8(%edi) ++ leal 16(%esi),%esi ++ movl %esi,32(%esp) ++ leal 16(%edi),%edx ++ movl %edx,36(%esp) ++ subl $16,%ecx ++ cmpl $16,%ecx ++ movl %ecx,40(%esp) ++ jae L032slow_enc_loop_sse ++ testl $15,%ecx ++ jnz L030slow_enc_tail ++ movl 48(%esp),%esi ++ movq %mm0,(%esi) ++ movq %mm4,8(%esi) ++ emms ++ movl 28(%esp),%esp ++ popfl ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++ pushfl ++.align 4,0x90 ++L031slow_enc_x86: ++ movl (%edi),%eax ++ movl 4(%edi),%ebx ++.align 2,0x90 ++L033slow_enc_loop_x86: ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++ xorl (%esi),%eax ++ xorl 4(%esi),%ebx ++ xorl 8(%esi),%ecx ++ xorl 12(%esi),%edx ++ movl 44(%esp),%edi ++ call __x86_AES_encrypt_compact ++ movl 32(%esp),%esi ++ movl 36(%esp),%edi ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 40(%esp),%ecx ++ leal 16(%esi),%esi ++ movl %esi,32(%esp) ++ leal 16(%edi),%edx ++ movl %edx,36(%esp) ++ subl $16,%ecx ++ cmpl $16,%ecx ++ movl %ecx,40(%esp) ++ jae L033slow_enc_loop_x86 ++ testl $15,%ecx ++ jnz L030slow_enc_tail ++ movl 48(%esp),%esi ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ movl 28(%esp),%esp ++ popfl ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++ pushfl ++.align 4,0x90 ++L030slow_enc_tail: ++ emms ++ movl %edx,%edi ++ movl $16,%ebx ++ subl %ecx,%ebx ++ cmpl %esi,%edi ++ je L034enc_in_place ++.align 2,0x90 ++.long 2767451785 ++ jmp L035enc_skip_in_place ++L034enc_in_place: ++ leal (%edi,%ecx,1),%edi ++L035enc_skip_in_place: ++ movl %ebx,%ecx ++ xorl %eax,%eax ++.align 2,0x90 ++.long 2868115081 ++ movl 48(%esp),%edi ++ movl %edx,%esi ++ movl (%edi),%eax ++ movl 4(%edi),%ebx ++ movl $16,40(%esp) ++ jmp L033slow_enc_loop_x86 ++.align 4,0x90 ++L029slow_decrypt: ++ btl $25,52(%esp) ++ jnc L036slow_dec_loop_x86 ++.align 2,0x90 ++L037slow_dec_loop_sse: ++ movq (%esi),%mm0 ++ movq 8(%esi),%mm4 ++ movl 44(%esp),%edi ++ call __sse_AES_decrypt_compact ++ movl 32(%esp),%esi ++ leal 60(%esp),%eax ++ movl 36(%esp),%ebx ++ movl 40(%esp),%ecx ++ movl 48(%esp),%edi ++ movq (%esi),%mm1 ++ movq 8(%esi),%mm5 ++ pxor (%edi),%mm0 ++ pxor 8(%edi),%mm4 ++ movq %mm1,(%edi) ++ movq %mm5,8(%edi) ++ subl $16,%ecx ++ jc L038slow_dec_partial_sse ++ movq %mm0,(%ebx) ++ movq %mm4,8(%ebx) ++ leal 16(%ebx),%ebx ++ movl %ebx,36(%esp) ++ leal 16(%esi),%esi ++ movl %esi,32(%esp) ++ movl %ecx,40(%esp) ++ jnz L037slow_dec_loop_sse ++ emms ++ movl 28(%esp),%esp ++ popfl ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++ pushfl ++.align 4,0x90 ++L038slow_dec_partial_sse: ++ movq %mm0,(%eax) ++ movq %mm4,8(%eax) ++ emms ++ addl $16,%ecx ++ movl %ebx,%edi ++ movl %eax,%esi ++.align 2,0x90 ++.long 2767451785 ++ movl 28(%esp),%esp ++ popfl ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++ pushfl ++.align 4,0x90 ++L036slow_dec_loop_x86: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ leal 60(%esp),%edi ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 44(%esp),%edi ++ call __x86_AES_decrypt_compact ++ movl 48(%esp),%edi ++ movl 40(%esp),%esi ++ xorl (%edi),%eax ++ xorl 4(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 12(%edi),%edx ++ subl $16,%esi ++ jc L039slow_dec_partial_x86 ++ movl %esi,40(%esp) ++ movl 36(%esp),%esi ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ leal 16(%esi),%esi ++ movl %esi,36(%esp) ++ leal 60(%esp),%esi ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 32(%esp),%esi ++ leal 16(%esi),%esi ++ movl %esi,32(%esp) ++ jnz L036slow_dec_loop_x86 ++ movl 28(%esp),%esp ++ popfl ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++ pushfl ++.align 4,0x90 ++L039slow_dec_partial_x86: ++ leal 60(%esp),%esi ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ movl 32(%esp),%esi ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 40(%esp),%ecx ++ movl 36(%esp),%edi ++ leal 60(%esp),%esi ++.align 2,0x90 ++.long 2767451785 ++ movl 28(%esp),%esp ++ popfl ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 4 ++__x86_AES_set_encrypt_key: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 24(%esp),%esi ++ movl 32(%esp),%edi ++ testl $-1,%esi ++ jz L040badpointer ++ testl $-1,%edi ++ jz L040badpointer ++ call L041pic_point ++L041pic_point: ++ popl %ebp ++ leal LAES_Te-L041pic_point(%ebp),%ebp ++ leal 2176(%ebp),%ebp ++ movl -128(%ebp),%eax ++ movl -96(%ebp),%ebx ++ movl -64(%ebp),%ecx ++ movl -32(%ebp),%edx ++ movl (%ebp),%eax ++ movl 32(%ebp),%ebx ++ movl 64(%ebp),%ecx ++ movl 96(%ebp),%edx ++ movl 28(%esp),%ecx ++ cmpl $128,%ecx ++ je L04210rounds ++ cmpl $192,%ecx ++ je L04312rounds ++ cmpl $256,%ecx ++ je L04414rounds ++ movl $-2,%eax ++ jmp L045exit ++L04210rounds: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ xorl %ecx,%ecx ++ jmp L04610shortcut ++.align 2,0x90 ++L04710loop: ++ movl (%edi),%eax ++ movl 12(%edi),%edx ++L04610shortcut: ++ movzbl %dl,%esi ++ movzbl -128(%ebp,%esi,1),%ebx ++ movzbl %dh,%esi ++ shll $24,%ebx ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ shrl $16,%edx ++ movzbl %dl,%esi ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ movzbl %dh,%esi ++ shll $8,%ebx ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ shll $16,%ebx ++ xorl %ebx,%eax ++ xorl 896(%ebp,%ecx,4),%eax ++ movl %eax,16(%edi) ++ xorl 4(%edi),%eax ++ movl %eax,20(%edi) ++ xorl 8(%edi),%eax ++ movl %eax,24(%edi) ++ xorl 12(%edi),%eax ++ movl %eax,28(%edi) ++ incl %ecx ++ addl $16,%edi ++ cmpl $10,%ecx ++ jl L04710loop ++ movl $10,80(%edi) ++ xorl %eax,%eax ++ jmp L045exit ++L04312rounds: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 16(%esi),%ecx ++ movl 20(%esi),%edx ++ movl %ecx,16(%edi) ++ movl %edx,20(%edi) ++ xorl %ecx,%ecx ++ jmp L04812shortcut ++.align 2,0x90 ++L04912loop: ++ movl (%edi),%eax ++ movl 20(%edi),%edx ++L04812shortcut: ++ movzbl %dl,%esi ++ movzbl -128(%ebp,%esi,1),%ebx ++ movzbl %dh,%esi ++ shll $24,%ebx ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ shrl $16,%edx ++ movzbl %dl,%esi ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ movzbl %dh,%esi ++ shll $8,%ebx ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ shll $16,%ebx ++ xorl %ebx,%eax ++ xorl 896(%ebp,%ecx,4),%eax ++ movl %eax,24(%edi) ++ xorl 4(%edi),%eax ++ movl %eax,28(%edi) ++ xorl 8(%edi),%eax ++ movl %eax,32(%edi) ++ xorl 12(%edi),%eax ++ movl %eax,36(%edi) ++ cmpl $7,%ecx ++ je L05012break ++ incl %ecx ++ xorl 16(%edi),%eax ++ movl %eax,40(%edi) ++ xorl 20(%edi),%eax ++ movl %eax,44(%edi) ++ addl $24,%edi ++ jmp L04912loop ++L05012break: ++ movl $12,72(%edi) ++ xorl %eax,%eax ++ jmp L045exit ++L04414rounds: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,12(%edi) ++ movl 16(%esi),%eax ++ movl 20(%esi),%ebx ++ movl 24(%esi),%ecx ++ movl 28(%esi),%edx ++ movl %eax,16(%edi) ++ movl %ebx,20(%edi) ++ movl %ecx,24(%edi) ++ movl %edx,28(%edi) ++ xorl %ecx,%ecx ++ jmp L05114shortcut ++.align 2,0x90 ++L05214loop: ++ movl 28(%edi),%edx ++L05114shortcut: ++ movl (%edi),%eax ++ movzbl %dl,%esi ++ movzbl -128(%ebp,%esi,1),%ebx ++ movzbl %dh,%esi ++ shll $24,%ebx ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ shrl $16,%edx ++ movzbl %dl,%esi ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ movzbl %dh,%esi ++ shll $8,%ebx ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ shll $16,%ebx ++ xorl %ebx,%eax ++ xorl 896(%ebp,%ecx,4),%eax ++ movl %eax,32(%edi) ++ xorl 4(%edi),%eax ++ movl %eax,36(%edi) ++ xorl 8(%edi),%eax ++ movl %eax,40(%edi) ++ xorl 12(%edi),%eax ++ movl %eax,44(%edi) ++ cmpl $6,%ecx ++ je L05314break ++ incl %ecx ++ movl %eax,%edx ++ movl 16(%edi),%eax ++ movzbl %dl,%esi ++ movzbl -128(%ebp,%esi,1),%ebx ++ movzbl %dh,%esi ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ shrl $16,%edx ++ shll $8,%ebx ++ movzbl %dl,%esi ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ movzbl %dh,%esi ++ shll $16,%ebx ++ xorl %ebx,%eax ++ movzbl -128(%ebp,%esi,1),%ebx ++ shll $24,%ebx ++ xorl %ebx,%eax ++ movl %eax,48(%edi) ++ xorl 20(%edi),%eax ++ movl %eax,52(%edi) ++ xorl 24(%edi),%eax ++ movl %eax,56(%edi) ++ xorl 28(%edi),%eax ++ movl %eax,60(%edi) ++ addl $32,%edi ++ jmp L05214loop ++L05314break: ++ movl $14,48(%edi) ++ xorl %eax,%eax ++ jmp L045exit ++L040badpointer: ++ movl $-1,%eax ++L045exit: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _private_AES_set_encrypt_key ++.align 4 ++_private_AES_set_encrypt_key: ++L_private_AES_set_encrypt_key_begin: ++ call __x86_AES_set_encrypt_key ++ ret ++.globl _private_AES_set_decrypt_key ++.align 4 ++_private_AES_set_decrypt_key: ++L_private_AES_set_decrypt_key_begin: ++ call __x86_AES_set_encrypt_key ++ cmpl $0,%eax ++ je L054proceed ++ ret ++L054proceed: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 28(%esp),%esi ++ movl 240(%esi),%ecx ++ leal (,%ecx,4),%ecx ++ leal (%esi,%ecx,4),%edi ++.align 2,0x90 ++L055invert: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl (%edi),%ecx ++ movl 4(%edi),%edx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ movl %ecx,(%esi) ++ movl %edx,4(%esi) ++ movl 8(%esi),%eax ++ movl 12(%esi),%ebx ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++ movl %eax,8(%edi) ++ movl %ebx,12(%edi) ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ addl $16,%esi ++ subl $16,%edi ++ cmpl %edi,%esi ++ jne L055invert ++ movl 28(%esp),%edi ++ movl 240(%edi),%esi ++ leal -2(%esi,%esi,1),%esi ++ leal (%edi,%esi,8),%esi ++ movl %esi,28(%esp) ++ movl 16(%edi),%eax ++.align 2,0x90 ++L056permute: ++ addl $16,%edi ++ movl %eax,%esi ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%eax,%eax,1),%ebx ++ subl %ebp,%esi ++ andl $4278124286,%ebx ++ andl $454761243,%esi ++ xorl %ebx,%esi ++ movl %esi,%ebx ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%ebx,%ebx,1),%ecx ++ subl %ebp,%esi ++ andl $4278124286,%ecx ++ andl $454761243,%esi ++ xorl %eax,%ebx ++ xorl %ecx,%esi ++ movl %esi,%ecx ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%ecx,%ecx,1),%edx ++ xorl %eax,%ecx ++ subl %ebp,%esi ++ andl $4278124286,%edx ++ andl $454761243,%esi ++ roll $8,%eax ++ xorl %esi,%edx ++ movl 4(%edi),%ebp ++ xorl %ebx,%eax ++ xorl %edx,%ebx ++ xorl %ecx,%eax ++ roll $24,%ebx ++ xorl %edx,%ecx ++ xorl %edx,%eax ++ roll $16,%ecx ++ xorl %ebx,%eax ++ roll $8,%edx ++ xorl %ecx,%eax ++ movl %ebp,%ebx ++ xorl %edx,%eax ++ movl %eax,(%edi) ++ movl %ebx,%esi ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%ebx,%ebx,1),%ecx ++ subl %ebp,%esi ++ andl $4278124286,%ecx ++ andl $454761243,%esi ++ xorl %ecx,%esi ++ movl %esi,%ecx ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%ecx,%ecx,1),%edx ++ subl %ebp,%esi ++ andl $4278124286,%edx ++ andl $454761243,%esi ++ xorl %ebx,%ecx ++ xorl %edx,%esi ++ movl %esi,%edx ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%edx,%edx,1),%eax ++ xorl %ebx,%edx ++ subl %ebp,%esi ++ andl $4278124286,%eax ++ andl $454761243,%esi ++ roll $8,%ebx ++ xorl %esi,%eax ++ movl 8(%edi),%ebp ++ xorl %ecx,%ebx ++ xorl %eax,%ecx ++ xorl %edx,%ebx ++ roll $24,%ecx ++ xorl %eax,%edx ++ xorl %eax,%ebx ++ roll $16,%edx ++ xorl %ecx,%ebx ++ roll $8,%eax ++ xorl %edx,%ebx ++ movl %ebp,%ecx ++ xorl %eax,%ebx ++ movl %ebx,4(%edi) ++ movl %ecx,%esi ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%ecx,%ecx,1),%edx ++ subl %ebp,%esi ++ andl $4278124286,%edx ++ andl $454761243,%esi ++ xorl %edx,%esi ++ movl %esi,%edx ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%edx,%edx,1),%eax ++ subl %ebp,%esi ++ andl $4278124286,%eax ++ andl $454761243,%esi ++ xorl %ecx,%edx ++ xorl %eax,%esi ++ movl %esi,%eax ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%eax,%eax,1),%ebx ++ xorl %ecx,%eax ++ subl %ebp,%esi ++ andl $4278124286,%ebx ++ andl $454761243,%esi ++ roll $8,%ecx ++ xorl %esi,%ebx ++ movl 12(%edi),%ebp ++ xorl %edx,%ecx ++ xorl %ebx,%edx ++ xorl %eax,%ecx ++ roll $24,%edx ++ xorl %ebx,%eax ++ xorl %ebx,%ecx ++ roll $16,%eax ++ xorl %edx,%ecx ++ roll $8,%ebx ++ xorl %eax,%ecx ++ movl %ebp,%edx ++ xorl %ebx,%ecx ++ movl %ecx,8(%edi) ++ movl %edx,%esi ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%edx,%edx,1),%eax ++ subl %ebp,%esi ++ andl $4278124286,%eax ++ andl $454761243,%esi ++ xorl %eax,%esi ++ movl %esi,%eax ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%eax,%eax,1),%ebx ++ subl %ebp,%esi ++ andl $4278124286,%ebx ++ andl $454761243,%esi ++ xorl %edx,%eax ++ xorl %ebx,%esi ++ movl %esi,%ebx ++ andl $2155905152,%esi ++ movl %esi,%ebp ++ shrl $7,%ebp ++ leal (%ebx,%ebx,1),%ecx ++ xorl %edx,%ebx ++ subl %ebp,%esi ++ andl $4278124286,%ecx ++ andl $454761243,%esi ++ roll $8,%edx ++ xorl %esi,%ecx ++ movl 16(%edi),%ebp ++ xorl %eax,%edx ++ xorl %ecx,%eax ++ xorl %ebx,%edx ++ roll $24,%eax ++ xorl %ecx,%ebx ++ xorl %ecx,%edx ++ roll $16,%ebx ++ xorl %eax,%edx ++ roll $8,%ecx ++ xorl %ebx,%edx ++ movl %ebp,%eax ++ xorl %ecx,%edx ++ movl %edx,12(%edi) ++ cmpl 28(%esp),%edi ++ jb L056permute ++ xorl %eax,%eax ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.byte 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89 ++.byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 ++.byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 ++.section __IMPORT,__pointers,non_lazy_symbol_pointers ++L_OPENSSL_ia32cap_P$non_lazy_ptr: ++.indirect_symbol _OPENSSL_ia32cap_P ++.long 0 ++.comm _OPENSSL_ia32cap_P,8,2 +diff --git a/crypto/aes/asm/aesni-x86-mac.S b/crypto/aes/asm/aesni-x86-mac.S +new file mode 100644 +index 0000000..2bf45c6 +--- /dev/null ++++ b/crypto/aes/asm/aesni-x86-mac.S +@@ -0,0 +1,2107 @@ ++.file "crypto/aes/asm/aesni-x86.s" ++.text ++.globl _aesni_encrypt ++.align 4 ++_aesni_encrypt: ++L_aesni_encrypt_begin: ++ movl 4(%esp),%eax ++ movl 12(%esp),%edx ++ movups (%eax),%xmm2 ++ movl 240(%edx),%ecx ++ movl 8(%esp),%eax ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L000enc1_loop_1: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L000enc1_loop_1 ++.byte 102,15,56,221,209 ++ movups %xmm2,(%eax) ++ ret ++.globl _aesni_decrypt ++.align 4 ++_aesni_decrypt: ++L_aesni_decrypt_begin: ++ movl 4(%esp),%eax ++ movl 12(%esp),%edx ++ movups (%eax),%xmm2 ++ movl 240(%edx),%ecx ++ movl 8(%esp),%eax ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L001dec1_loop_2: ++.byte 102,15,56,222,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L001dec1_loop_2 ++.byte 102,15,56,223,209 ++ movups %xmm2,(%eax) ++ ret ++.align 4 ++__aesni_encrypt3: ++ movups (%edx),%xmm0 ++ shrl $1,%ecx ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++ pxor %xmm0,%xmm3 ++ pxor %xmm0,%xmm4 ++ movups (%edx),%xmm0 ++L002enc3_loop: ++.byte 102,15,56,220,209 ++.byte 102,15,56,220,217 ++ decl %ecx ++.byte 102,15,56,220,225 ++ movups 16(%edx),%xmm1 ++.byte 102,15,56,220,208 ++.byte 102,15,56,220,216 ++ leal 32(%edx),%edx ++.byte 102,15,56,220,224 ++ movups (%edx),%xmm0 ++ jnz L002enc3_loop ++.byte 102,15,56,220,209 ++.byte 102,15,56,220,217 ++.byte 102,15,56,220,225 ++.byte 102,15,56,221,208 ++.byte 102,15,56,221,216 ++.byte 102,15,56,221,224 ++ ret ++.align 4 ++__aesni_decrypt3: ++ movups (%edx),%xmm0 ++ shrl $1,%ecx ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++ pxor %xmm0,%xmm3 ++ pxor %xmm0,%xmm4 ++ movups (%edx),%xmm0 ++L003dec3_loop: ++.byte 102,15,56,222,209 ++.byte 102,15,56,222,217 ++ decl %ecx ++.byte 102,15,56,222,225 ++ movups 16(%edx),%xmm1 ++.byte 102,15,56,222,208 ++.byte 102,15,56,222,216 ++ leal 32(%edx),%edx ++.byte 102,15,56,222,224 ++ movups (%edx),%xmm0 ++ jnz L003dec3_loop ++.byte 102,15,56,222,209 ++.byte 102,15,56,222,217 ++.byte 102,15,56,222,225 ++.byte 102,15,56,223,208 ++.byte 102,15,56,223,216 ++.byte 102,15,56,223,224 ++ ret ++.align 4 ++__aesni_encrypt4: ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ shrl $1,%ecx ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++ pxor %xmm0,%xmm3 ++ pxor %xmm0,%xmm4 ++ pxor %xmm0,%xmm5 ++ movups (%edx),%xmm0 ++L004enc4_loop: ++.byte 102,15,56,220,209 ++.byte 102,15,56,220,217 ++ decl %ecx ++.byte 102,15,56,220,225 ++.byte 102,15,56,220,233 ++ movups 16(%edx),%xmm1 ++.byte 102,15,56,220,208 ++.byte 102,15,56,220,216 ++ leal 32(%edx),%edx ++.byte 102,15,56,220,224 ++.byte 102,15,56,220,232 ++ movups (%edx),%xmm0 ++ jnz L004enc4_loop ++.byte 102,15,56,220,209 ++.byte 102,15,56,220,217 ++.byte 102,15,56,220,225 ++.byte 102,15,56,220,233 ++.byte 102,15,56,221,208 ++.byte 102,15,56,221,216 ++.byte 102,15,56,221,224 ++.byte 102,15,56,221,232 ++ ret ++.align 4 ++__aesni_decrypt4: ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ shrl $1,%ecx ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++ pxor %xmm0,%xmm3 ++ pxor %xmm0,%xmm4 ++ pxor %xmm0,%xmm5 ++ movups (%edx),%xmm0 ++L005dec4_loop: ++.byte 102,15,56,222,209 ++.byte 102,15,56,222,217 ++ decl %ecx ++.byte 102,15,56,222,225 ++.byte 102,15,56,222,233 ++ movups 16(%edx),%xmm1 ++.byte 102,15,56,222,208 ++.byte 102,15,56,222,216 ++ leal 32(%edx),%edx ++.byte 102,15,56,222,224 ++.byte 102,15,56,222,232 ++ movups (%edx),%xmm0 ++ jnz L005dec4_loop ++.byte 102,15,56,222,209 ++.byte 102,15,56,222,217 ++.byte 102,15,56,222,225 ++.byte 102,15,56,222,233 ++.byte 102,15,56,223,208 ++.byte 102,15,56,223,216 ++.byte 102,15,56,223,224 ++.byte 102,15,56,223,232 ++ ret ++.align 4 ++__aesni_encrypt6: ++ movups (%edx),%xmm0 ++ shrl $1,%ecx ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++ pxor %xmm0,%xmm3 ++.byte 102,15,56,220,209 ++ pxor %xmm0,%xmm4 ++.byte 102,15,56,220,217 ++ pxor %xmm0,%xmm5 ++ decl %ecx ++.byte 102,15,56,220,225 ++ pxor %xmm0,%xmm6 ++.byte 102,15,56,220,233 ++ pxor %xmm0,%xmm7 ++.byte 102,15,56,220,241 ++ movups (%edx),%xmm0 ++.byte 102,15,56,220,249 ++ jmp L_aesni_encrypt6_enter ++.align 4,0x90 ++L006enc6_loop: ++.byte 102,15,56,220,209 ++.byte 102,15,56,220,217 ++ decl %ecx ++.byte 102,15,56,220,225 ++.byte 102,15,56,220,233 ++.byte 102,15,56,220,241 ++.byte 102,15,56,220,249 ++.align 4,0x90 ++L_aesni_encrypt6_enter: ++ movups 16(%edx),%xmm1 ++.byte 102,15,56,220,208 ++.byte 102,15,56,220,216 ++ leal 32(%edx),%edx ++.byte 102,15,56,220,224 ++.byte 102,15,56,220,232 ++.byte 102,15,56,220,240 ++.byte 102,15,56,220,248 ++ movups (%edx),%xmm0 ++ jnz L006enc6_loop ++.byte 102,15,56,220,209 ++.byte 102,15,56,220,217 ++.byte 102,15,56,220,225 ++.byte 102,15,56,220,233 ++.byte 102,15,56,220,241 ++.byte 102,15,56,220,249 ++.byte 102,15,56,221,208 ++.byte 102,15,56,221,216 ++.byte 102,15,56,221,224 ++.byte 102,15,56,221,232 ++.byte 102,15,56,221,240 ++.byte 102,15,56,221,248 ++ ret ++.align 4 ++__aesni_decrypt6: ++ movups (%edx),%xmm0 ++ shrl $1,%ecx ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++ pxor %xmm0,%xmm3 ++.byte 102,15,56,222,209 ++ pxor %xmm0,%xmm4 ++.byte 102,15,56,222,217 ++ pxor %xmm0,%xmm5 ++ decl %ecx ++.byte 102,15,56,222,225 ++ pxor %xmm0,%xmm6 ++.byte 102,15,56,222,233 ++ pxor %xmm0,%xmm7 ++.byte 102,15,56,222,241 ++ movups (%edx),%xmm0 ++.byte 102,15,56,222,249 ++ jmp L_aesni_decrypt6_enter ++.align 4,0x90 ++L007dec6_loop: ++.byte 102,15,56,222,209 ++.byte 102,15,56,222,217 ++ decl %ecx ++.byte 102,15,56,222,225 ++.byte 102,15,56,222,233 ++.byte 102,15,56,222,241 ++.byte 102,15,56,222,249 ++.align 4,0x90 ++L_aesni_decrypt6_enter: ++ movups 16(%edx),%xmm1 ++.byte 102,15,56,222,208 ++.byte 102,15,56,222,216 ++ leal 32(%edx),%edx ++.byte 102,15,56,222,224 ++.byte 102,15,56,222,232 ++.byte 102,15,56,222,240 ++.byte 102,15,56,222,248 ++ movups (%edx),%xmm0 ++ jnz L007dec6_loop ++.byte 102,15,56,222,209 ++.byte 102,15,56,222,217 ++.byte 102,15,56,222,225 ++.byte 102,15,56,222,233 ++.byte 102,15,56,222,241 ++.byte 102,15,56,222,249 ++.byte 102,15,56,223,208 ++.byte 102,15,56,223,216 ++.byte 102,15,56,223,224 ++.byte 102,15,56,223,232 ++.byte 102,15,56,223,240 ++.byte 102,15,56,223,248 ++ ret ++.globl _aesni_ecb_encrypt ++.align 4 ++_aesni_ecb_encrypt: ++L_aesni_ecb_encrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl 32(%esp),%edx ++ movl 36(%esp),%ebx ++ andl $-16,%eax ++ jz L008ecb_ret ++ movl 240(%edx),%ecx ++ testl %ebx,%ebx ++ jz L009ecb_decrypt ++ movl %edx,%ebp ++ movl %ecx,%ebx ++ cmpl $96,%eax ++ jb L010ecb_enc_tail ++ movdqu (%esi),%xmm2 ++ movdqu 16(%esi),%xmm3 ++ movdqu 32(%esi),%xmm4 ++ movdqu 48(%esi),%xmm5 ++ movdqu 64(%esi),%xmm6 ++ movdqu 80(%esi),%xmm7 ++ leal 96(%esi),%esi ++ subl $96,%eax ++ jmp L011ecb_enc_loop6_enter ++.align 4,0x90 ++L012ecb_enc_loop6: ++ movups %xmm2,(%edi) ++ movdqu (%esi),%xmm2 ++ movups %xmm3,16(%edi) ++ movdqu 16(%esi),%xmm3 ++ movups %xmm4,32(%edi) ++ movdqu 32(%esi),%xmm4 ++ movups %xmm5,48(%edi) ++ movdqu 48(%esi),%xmm5 ++ movups %xmm6,64(%edi) ++ movdqu 64(%esi),%xmm6 ++ movups %xmm7,80(%edi) ++ leal 96(%edi),%edi ++ movdqu 80(%esi),%xmm7 ++ leal 96(%esi),%esi ++L011ecb_enc_loop6_enter: ++ call __aesni_encrypt6 ++ movl %ebp,%edx ++ movl %ebx,%ecx ++ subl $96,%eax ++ jnc L012ecb_enc_loop6 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ movups %xmm6,64(%edi) ++ movups %xmm7,80(%edi) ++ leal 96(%edi),%edi ++ addl $96,%eax ++ jz L008ecb_ret ++L010ecb_enc_tail: ++ movups (%esi),%xmm2 ++ cmpl $32,%eax ++ jb L013ecb_enc_one ++ movups 16(%esi),%xmm3 ++ je L014ecb_enc_two ++ movups 32(%esi),%xmm4 ++ cmpl $64,%eax ++ jb L015ecb_enc_three ++ movups 48(%esi),%xmm5 ++ je L016ecb_enc_four ++ movups 64(%esi),%xmm6 ++ xorps %xmm7,%xmm7 ++ call __aesni_encrypt6 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ movups %xmm6,64(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L013ecb_enc_one: ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L017enc1_loop_3: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L017enc1_loop_3 ++.byte 102,15,56,221,209 ++ movups %xmm2,(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L014ecb_enc_two: ++ xorps %xmm4,%xmm4 ++ call __aesni_encrypt3 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L015ecb_enc_three: ++ call __aesni_encrypt3 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L016ecb_enc_four: ++ call __aesni_encrypt4 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L009ecb_decrypt: ++ movl %edx,%ebp ++ movl %ecx,%ebx ++ cmpl $96,%eax ++ jb L018ecb_dec_tail ++ movdqu (%esi),%xmm2 ++ movdqu 16(%esi),%xmm3 ++ movdqu 32(%esi),%xmm4 ++ movdqu 48(%esi),%xmm5 ++ movdqu 64(%esi),%xmm6 ++ movdqu 80(%esi),%xmm7 ++ leal 96(%esi),%esi ++ subl $96,%eax ++ jmp L019ecb_dec_loop6_enter ++.align 4,0x90 ++L020ecb_dec_loop6: ++ movups %xmm2,(%edi) ++ movdqu (%esi),%xmm2 ++ movups %xmm3,16(%edi) ++ movdqu 16(%esi),%xmm3 ++ movups %xmm4,32(%edi) ++ movdqu 32(%esi),%xmm4 ++ movups %xmm5,48(%edi) ++ movdqu 48(%esi),%xmm5 ++ movups %xmm6,64(%edi) ++ movdqu 64(%esi),%xmm6 ++ movups %xmm7,80(%edi) ++ leal 96(%edi),%edi ++ movdqu 80(%esi),%xmm7 ++ leal 96(%esi),%esi ++L019ecb_dec_loop6_enter: ++ call __aesni_decrypt6 ++ movl %ebp,%edx ++ movl %ebx,%ecx ++ subl $96,%eax ++ jnc L020ecb_dec_loop6 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ movups %xmm6,64(%edi) ++ movups %xmm7,80(%edi) ++ leal 96(%edi),%edi ++ addl $96,%eax ++ jz L008ecb_ret ++L018ecb_dec_tail: ++ movups (%esi),%xmm2 ++ cmpl $32,%eax ++ jb L021ecb_dec_one ++ movups 16(%esi),%xmm3 ++ je L022ecb_dec_two ++ movups 32(%esi),%xmm4 ++ cmpl $64,%eax ++ jb L023ecb_dec_three ++ movups 48(%esi),%xmm5 ++ je L024ecb_dec_four ++ movups 64(%esi),%xmm6 ++ xorps %xmm7,%xmm7 ++ call __aesni_decrypt6 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ movups %xmm6,64(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L021ecb_dec_one: ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L025dec1_loop_4: ++.byte 102,15,56,222,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L025dec1_loop_4 ++.byte 102,15,56,223,209 ++ movups %xmm2,(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L022ecb_dec_two: ++ xorps %xmm4,%xmm4 ++ call __aesni_decrypt3 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L023ecb_dec_three: ++ call __aesni_decrypt3 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ jmp L008ecb_ret ++.align 4,0x90 ++L024ecb_dec_four: ++ call __aesni_decrypt4 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++L008ecb_ret: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _aesni_ccm64_encrypt_blocks ++.align 4 ++_aesni_ccm64_encrypt_blocks: ++L_aesni_ccm64_encrypt_blocks_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl 32(%esp),%edx ++ movl 36(%esp),%ebx ++ movl 40(%esp),%ecx ++ movl %esp,%ebp ++ subl $60,%esp ++ andl $-16,%esp ++ movl %ebp,48(%esp) ++ movdqu (%ebx),%xmm7 ++ movdqu (%ecx),%xmm3 ++ movl 240(%edx),%ecx ++ movl $202182159,(%esp) ++ movl $134810123,4(%esp) ++ movl $67438087,8(%esp) ++ movl $66051,12(%esp) ++ movl $1,%ebx ++ xorl %ebp,%ebp ++ movl %ebx,16(%esp) ++ movl %ebp,20(%esp) ++ movl %ebp,24(%esp) ++ movl %ebp,28(%esp) ++ shrl $1,%ecx ++ leal (%edx),%ebp ++ movdqa (%esp),%xmm5 ++ movdqa %xmm7,%xmm2 ++ movl %ecx,%ebx ++.byte 102,15,56,0,253 ++L026ccm64_enc_outer: ++ movups (%ebp),%xmm0 ++ movl %ebx,%ecx ++ movups (%esi),%xmm6 ++ xorps %xmm0,%xmm2 ++ movups 16(%ebp),%xmm1 ++ xorps %xmm6,%xmm0 ++ leal 32(%ebp),%edx ++ xorps %xmm0,%xmm3 ++ movups (%edx),%xmm0 ++L027ccm64_enc2_loop: ++.byte 102,15,56,220,209 ++ decl %ecx ++.byte 102,15,56,220,217 ++ movups 16(%edx),%xmm1 ++.byte 102,15,56,220,208 ++ leal 32(%edx),%edx ++.byte 102,15,56,220,216 ++ movups (%edx),%xmm0 ++ jnz L027ccm64_enc2_loop ++.byte 102,15,56,220,209 ++.byte 102,15,56,220,217 ++ paddq 16(%esp),%xmm7 ++.byte 102,15,56,221,208 ++.byte 102,15,56,221,216 ++ decl %eax ++ leal 16(%esi),%esi ++ xorps %xmm2,%xmm6 ++ movdqa %xmm7,%xmm2 ++ movups %xmm6,(%edi) ++ leal 16(%edi),%edi ++.byte 102,15,56,0,213 ++ jnz L026ccm64_enc_outer ++ movl 48(%esp),%esp ++ movl 40(%esp),%edi ++ movups %xmm3,(%edi) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _aesni_ccm64_decrypt_blocks ++.align 4 ++_aesni_ccm64_decrypt_blocks: ++L_aesni_ccm64_decrypt_blocks_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl 32(%esp),%edx ++ movl 36(%esp),%ebx ++ movl 40(%esp),%ecx ++ movl %esp,%ebp ++ subl $60,%esp ++ andl $-16,%esp ++ movl %ebp,48(%esp) ++ movdqu (%ebx),%xmm7 ++ movdqu (%ecx),%xmm3 ++ movl 240(%edx),%ecx ++ movl $202182159,(%esp) ++ movl $134810123,4(%esp) ++ movl $67438087,8(%esp) ++ movl $66051,12(%esp) ++ movl $1,%ebx ++ xorl %ebp,%ebp ++ movl %ebx,16(%esp) ++ movl %ebp,20(%esp) ++ movl %ebp,24(%esp) ++ movl %ebp,28(%esp) ++ movdqa (%esp),%xmm5 ++ movdqa %xmm7,%xmm2 ++ movl %edx,%ebp ++ movl %ecx,%ebx ++.byte 102,15,56,0,253 ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L028enc1_loop_5: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L028enc1_loop_5 ++.byte 102,15,56,221,209 ++ movups (%esi),%xmm6 ++ paddq 16(%esp),%xmm7 ++ leal 16(%esi),%esi ++ jmp L029ccm64_dec_outer ++.align 4,0x90 ++L029ccm64_dec_outer: ++ xorps %xmm2,%xmm6 ++ movdqa %xmm7,%xmm2 ++ movl %ebx,%ecx ++ movups %xmm6,(%edi) ++ leal 16(%edi),%edi ++.byte 102,15,56,0,213 ++ subl $1,%eax ++ jz L030ccm64_dec_break ++ movups (%ebp),%xmm0 ++ shrl $1,%ecx ++ movups 16(%ebp),%xmm1 ++ xorps %xmm0,%xmm6 ++ leal 32(%ebp),%edx ++ xorps %xmm0,%xmm2 ++ xorps %xmm6,%xmm3 ++ movups (%edx),%xmm0 ++L031ccm64_dec2_loop: ++.byte 102,15,56,220,209 ++ decl %ecx ++.byte 102,15,56,220,217 ++ movups 16(%edx),%xmm1 ++.byte 102,15,56,220,208 ++ leal 32(%edx),%edx ++.byte 102,15,56,220,216 ++ movups (%edx),%xmm0 ++ jnz L031ccm64_dec2_loop ++ movups (%esi),%xmm6 ++ paddq 16(%esp),%xmm7 ++.byte 102,15,56,220,209 ++.byte 102,15,56,220,217 ++ leal 16(%esi),%esi ++.byte 102,15,56,221,208 ++.byte 102,15,56,221,216 ++ jmp L029ccm64_dec_outer ++.align 4,0x90 ++L030ccm64_dec_break: ++ movl %ebp,%edx ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ xorps %xmm0,%xmm6 ++ leal 32(%edx),%edx ++ xorps %xmm6,%xmm3 ++L032enc1_loop_6: ++.byte 102,15,56,220,217 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L032enc1_loop_6 ++.byte 102,15,56,221,217 ++ movl 48(%esp),%esp ++ movl 40(%esp),%edi ++ movups %xmm3,(%edi) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _aesni_ctr32_encrypt_blocks ++.align 4 ++_aesni_ctr32_encrypt_blocks: ++L_aesni_ctr32_encrypt_blocks_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl 32(%esp),%edx ++ movl 36(%esp),%ebx ++ movl %esp,%ebp ++ subl $88,%esp ++ andl $-16,%esp ++ movl %ebp,80(%esp) ++ cmpl $1,%eax ++ je L033ctr32_one_shortcut ++ movdqu (%ebx),%xmm7 ++ movl $202182159,(%esp) ++ movl $134810123,4(%esp) ++ movl $67438087,8(%esp) ++ movl $66051,12(%esp) ++ movl $6,%ecx ++ xorl %ebp,%ebp ++ movl %ecx,16(%esp) ++ movl %ecx,20(%esp) ++ movl %ecx,24(%esp) ++ movl %ebp,28(%esp) ++.byte 102,15,58,22,251,3 ++.byte 102,15,58,34,253,3 ++ movl 240(%edx),%ecx ++ bswap %ebx ++ pxor %xmm1,%xmm1 ++ pxor %xmm0,%xmm0 ++ movdqa (%esp),%xmm2 ++.byte 102,15,58,34,203,0 ++ leal 3(%ebx),%ebp ++.byte 102,15,58,34,197,0 ++ incl %ebx ++.byte 102,15,58,34,203,1 ++ incl %ebp ++.byte 102,15,58,34,197,1 ++ incl %ebx ++.byte 102,15,58,34,203,2 ++ incl %ebp ++.byte 102,15,58,34,197,2 ++ movdqa %xmm1,48(%esp) ++.byte 102,15,56,0,202 ++ movdqa %xmm0,64(%esp) ++.byte 102,15,56,0,194 ++ pshufd $192,%xmm1,%xmm2 ++ pshufd $128,%xmm1,%xmm3 ++ cmpl $6,%eax ++ jb L034ctr32_tail ++ movdqa %xmm7,32(%esp) ++ shrl $1,%ecx ++ movl %edx,%ebp ++ movl %ecx,%ebx ++ subl $6,%eax ++ jmp L035ctr32_loop6 ++.align 4,0x90 ++L035ctr32_loop6: ++ pshufd $64,%xmm1,%xmm4 ++ movdqa 32(%esp),%xmm1 ++ pshufd $192,%xmm0,%xmm5 ++ por %xmm1,%xmm2 ++ pshufd $128,%xmm0,%xmm6 ++ por %xmm1,%xmm3 ++ pshufd $64,%xmm0,%xmm7 ++ por %xmm1,%xmm4 ++ por %xmm1,%xmm5 ++ por %xmm1,%xmm6 ++ por %xmm1,%xmm7 ++ movups (%ebp),%xmm0 ++ movups 16(%ebp),%xmm1 ++ leal 32(%ebp),%edx ++ decl %ecx ++ pxor %xmm0,%xmm2 ++ pxor %xmm0,%xmm3 ++.byte 102,15,56,220,209 ++ pxor %xmm0,%xmm4 ++.byte 102,15,56,220,217 ++ pxor %xmm0,%xmm5 ++.byte 102,15,56,220,225 ++ pxor %xmm0,%xmm6 ++.byte 102,15,56,220,233 ++ pxor %xmm0,%xmm7 ++.byte 102,15,56,220,241 ++ movups (%edx),%xmm0 ++.byte 102,15,56,220,249 ++ call L_aesni_encrypt6_enter ++ movups (%esi),%xmm1 ++ movups 16(%esi),%xmm0 ++ xorps %xmm1,%xmm2 ++ movups 32(%esi),%xmm1 ++ xorps %xmm0,%xmm3 ++ movups %xmm2,(%edi) ++ movdqa 16(%esp),%xmm0 ++ xorps %xmm1,%xmm4 ++ movdqa 48(%esp),%xmm1 ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ paddd %xmm0,%xmm1 ++ paddd 64(%esp),%xmm0 ++ movdqa (%esp),%xmm2 ++ movups 48(%esi),%xmm3 ++ movups 64(%esi),%xmm4 ++ xorps %xmm3,%xmm5 ++ movups 80(%esi),%xmm3 ++ leal 96(%esi),%esi ++ movdqa %xmm1,48(%esp) ++.byte 102,15,56,0,202 ++ xorps %xmm4,%xmm6 ++ movups %xmm5,48(%edi) ++ xorps %xmm3,%xmm7 ++ movdqa %xmm0,64(%esp) ++.byte 102,15,56,0,194 ++ movups %xmm6,64(%edi) ++ pshufd $192,%xmm1,%xmm2 ++ movups %xmm7,80(%edi) ++ leal 96(%edi),%edi ++ movl %ebx,%ecx ++ pshufd $128,%xmm1,%xmm3 ++ subl $6,%eax ++ jnc L035ctr32_loop6 ++ addl $6,%eax ++ jz L036ctr32_ret ++ movl %ebp,%edx ++ leal 1(,%ecx,2),%ecx ++ movdqa 32(%esp),%xmm7 ++L034ctr32_tail: ++ por %xmm7,%xmm2 ++ cmpl $2,%eax ++ jb L037ctr32_one ++ pshufd $64,%xmm1,%xmm4 ++ por %xmm7,%xmm3 ++ je L038ctr32_two ++ pshufd $192,%xmm0,%xmm5 ++ por %xmm7,%xmm4 ++ cmpl $4,%eax ++ jb L039ctr32_three ++ pshufd $128,%xmm0,%xmm6 ++ por %xmm7,%xmm5 ++ je L040ctr32_four ++ por %xmm7,%xmm6 ++ call __aesni_encrypt6 ++ movups (%esi),%xmm1 ++ movups 16(%esi),%xmm0 ++ xorps %xmm1,%xmm2 ++ movups 32(%esi),%xmm1 ++ xorps %xmm0,%xmm3 ++ movups 48(%esi),%xmm0 ++ xorps %xmm1,%xmm4 ++ movups 64(%esi),%xmm1 ++ xorps %xmm0,%xmm5 ++ movups %xmm2,(%edi) ++ xorps %xmm1,%xmm6 ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ movups %xmm6,64(%edi) ++ jmp L036ctr32_ret ++.align 4,0x90 ++L033ctr32_one_shortcut: ++ movups (%ebx),%xmm2 ++ movl 240(%edx),%ecx ++L037ctr32_one: ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L041enc1_loop_7: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L041enc1_loop_7 ++.byte 102,15,56,221,209 ++ movups (%esi),%xmm6 ++ xorps %xmm2,%xmm6 ++ movups %xmm6,(%edi) ++ jmp L036ctr32_ret ++.align 4,0x90 ++L038ctr32_two: ++ call __aesni_encrypt3 ++ movups (%esi),%xmm5 ++ movups 16(%esi),%xmm6 ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ jmp L036ctr32_ret ++.align 4,0x90 ++L039ctr32_three: ++ call __aesni_encrypt3 ++ movups (%esi),%xmm5 ++ movups 16(%esi),%xmm6 ++ xorps %xmm5,%xmm2 ++ movups 32(%esi),%xmm7 ++ xorps %xmm6,%xmm3 ++ movups %xmm2,(%edi) ++ xorps %xmm7,%xmm4 ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ jmp L036ctr32_ret ++.align 4,0x90 ++L040ctr32_four: ++ call __aesni_encrypt4 ++ movups (%esi),%xmm6 ++ movups 16(%esi),%xmm7 ++ movups 32(%esi),%xmm1 ++ xorps %xmm6,%xmm2 ++ movups 48(%esi),%xmm0 ++ xorps %xmm7,%xmm3 ++ movups %xmm2,(%edi) ++ xorps %xmm1,%xmm4 ++ movups %xmm3,16(%edi) ++ xorps %xmm0,%xmm5 ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++L036ctr32_ret: ++ movl 80(%esp),%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _aesni_xts_encrypt ++.align 4 ++_aesni_xts_encrypt: ++L_aesni_xts_encrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 36(%esp),%edx ++ movl 40(%esp),%esi ++ movl 240(%edx),%ecx ++ movups (%esi),%xmm2 ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L042enc1_loop_8: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L042enc1_loop_8 ++.byte 102,15,56,221,209 ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl 32(%esp),%edx ++ movl %esp,%ebp ++ subl $120,%esp ++ movl 240(%edx),%ecx ++ andl $-16,%esp ++ movl $135,96(%esp) ++ movl $0,100(%esp) ++ movl $1,104(%esp) ++ movl $0,108(%esp) ++ movl %eax,112(%esp) ++ movl %ebp,116(%esp) ++ movdqa %xmm2,%xmm1 ++ pxor %xmm0,%xmm0 ++ movdqa 96(%esp),%xmm3 ++ pcmpgtd %xmm1,%xmm0 ++ andl $-16,%eax ++ movl %edx,%ebp ++ movl %ecx,%ebx ++ subl $96,%eax ++ jc L043xts_enc_short ++ shrl $1,%ecx ++ movl %ecx,%ebx ++ jmp L044xts_enc_loop6 ++.align 4,0x90 ++L044xts_enc_loop6: ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,16(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,32(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,48(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ pshufd $19,%xmm0,%xmm7 ++ movdqa %xmm1,64(%esp) ++ paddq %xmm1,%xmm1 ++ movups (%ebp),%xmm0 ++ pand %xmm3,%xmm7 ++ movups (%esi),%xmm2 ++ pxor %xmm1,%xmm7 ++ movdqu 16(%esi),%xmm3 ++ xorps %xmm0,%xmm2 ++ movdqu 32(%esi),%xmm4 ++ pxor %xmm0,%xmm3 ++ movdqu 48(%esi),%xmm5 ++ pxor %xmm0,%xmm4 ++ movdqu 64(%esi),%xmm6 ++ pxor %xmm0,%xmm5 ++ movdqu 80(%esi),%xmm1 ++ pxor %xmm0,%xmm6 ++ leal 96(%esi),%esi ++ pxor (%esp),%xmm2 ++ movdqa %xmm7,80(%esp) ++ pxor %xmm1,%xmm7 ++ movups 16(%ebp),%xmm1 ++ leal 32(%ebp),%edx ++ pxor 16(%esp),%xmm3 ++.byte 102,15,56,220,209 ++ pxor 32(%esp),%xmm4 ++.byte 102,15,56,220,217 ++ pxor 48(%esp),%xmm5 ++ decl %ecx ++.byte 102,15,56,220,225 ++ pxor 64(%esp),%xmm6 ++.byte 102,15,56,220,233 ++ pxor %xmm0,%xmm7 ++.byte 102,15,56,220,241 ++ movups (%edx),%xmm0 ++.byte 102,15,56,220,249 ++ call L_aesni_encrypt6_enter ++ movdqa 80(%esp),%xmm1 ++ pxor %xmm0,%xmm0 ++ xorps (%esp),%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ xorps 16(%esp),%xmm3 ++ movups %xmm2,(%edi) ++ xorps 32(%esp),%xmm4 ++ movups %xmm3,16(%edi) ++ xorps 48(%esp),%xmm5 ++ movups %xmm4,32(%edi) ++ xorps 64(%esp),%xmm6 ++ movups %xmm5,48(%edi) ++ xorps %xmm1,%xmm7 ++ movups %xmm6,64(%edi) ++ pshufd $19,%xmm0,%xmm2 ++ movups %xmm7,80(%edi) ++ leal 96(%edi),%edi ++ movdqa 96(%esp),%xmm3 ++ pxor %xmm0,%xmm0 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ movl %ebx,%ecx ++ pxor %xmm2,%xmm1 ++ subl $96,%eax ++ jnc L044xts_enc_loop6 ++ leal 1(,%ecx,2),%ecx ++ movl %ebp,%edx ++ movl %ecx,%ebx ++L043xts_enc_short: ++ addl $96,%eax ++ jz L045xts_enc_done6x ++ movdqa %xmm1,%xmm5 ++ cmpl $32,%eax ++ jb L046xts_enc_one ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ je L047xts_enc_two ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,%xmm6 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ cmpl $64,%eax ++ jb L048xts_enc_three ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,%xmm7 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ movdqa %xmm5,(%esp) ++ movdqa %xmm6,16(%esp) ++ je L049xts_enc_four ++ movdqa %xmm7,32(%esp) ++ pshufd $19,%xmm0,%xmm7 ++ movdqa %xmm1,48(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm7 ++ pxor %xmm1,%xmm7 ++ movdqu (%esi),%xmm2 ++ movdqu 16(%esi),%xmm3 ++ movdqu 32(%esi),%xmm4 ++ pxor (%esp),%xmm2 ++ movdqu 48(%esi),%xmm5 ++ pxor 16(%esp),%xmm3 ++ movdqu 64(%esi),%xmm6 ++ pxor 32(%esp),%xmm4 ++ leal 80(%esi),%esi ++ pxor 48(%esp),%xmm5 ++ movdqa %xmm7,64(%esp) ++ pxor %xmm7,%xmm6 ++ call __aesni_encrypt6 ++ movaps 64(%esp),%xmm1 ++ xorps (%esp),%xmm2 ++ xorps 16(%esp),%xmm3 ++ xorps 32(%esp),%xmm4 ++ movups %xmm2,(%edi) ++ xorps 48(%esp),%xmm5 ++ movups %xmm3,16(%edi) ++ xorps %xmm1,%xmm6 ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ movups %xmm6,64(%edi) ++ leal 80(%edi),%edi ++ jmp L050xts_enc_done ++.align 4,0x90 ++L046xts_enc_one: ++ movups (%esi),%xmm2 ++ leal 16(%esi),%esi ++ xorps %xmm5,%xmm2 ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L051enc1_loop_9: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L051enc1_loop_9 ++.byte 102,15,56,221,209 ++ xorps %xmm5,%xmm2 ++ movups %xmm2,(%edi) ++ leal 16(%edi),%edi ++ movdqa %xmm5,%xmm1 ++ jmp L050xts_enc_done ++.align 4,0x90 ++L047xts_enc_two: ++ movaps %xmm1,%xmm6 ++ movups (%esi),%xmm2 ++ movups 16(%esi),%xmm3 ++ leal 32(%esi),%esi ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ xorps %xmm4,%xmm4 ++ call __aesni_encrypt3 ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ leal 32(%edi),%edi ++ movdqa %xmm6,%xmm1 ++ jmp L050xts_enc_done ++.align 4,0x90 ++L048xts_enc_three: ++ movaps %xmm1,%xmm7 ++ movups (%esi),%xmm2 ++ movups 16(%esi),%xmm3 ++ movups 32(%esi),%xmm4 ++ leal 48(%esi),%esi ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ xorps %xmm7,%xmm4 ++ call __aesni_encrypt3 ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ xorps %xmm7,%xmm4 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ leal 48(%edi),%edi ++ movdqa %xmm7,%xmm1 ++ jmp L050xts_enc_done ++.align 4,0x90 ++L049xts_enc_four: ++ movaps %xmm1,%xmm6 ++ movups (%esi),%xmm2 ++ movups 16(%esi),%xmm3 ++ movups 32(%esi),%xmm4 ++ xorps (%esp),%xmm2 ++ movups 48(%esi),%xmm5 ++ leal 64(%esi),%esi ++ xorps 16(%esp),%xmm3 ++ xorps %xmm7,%xmm4 ++ xorps %xmm6,%xmm5 ++ call __aesni_encrypt4 ++ xorps (%esp),%xmm2 ++ xorps 16(%esp),%xmm3 ++ xorps %xmm7,%xmm4 ++ movups %xmm2,(%edi) ++ xorps %xmm6,%xmm5 ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ leal 64(%edi),%edi ++ movdqa %xmm6,%xmm1 ++ jmp L050xts_enc_done ++.align 4,0x90 ++L045xts_enc_done6x: ++ movl 112(%esp),%eax ++ andl $15,%eax ++ jz L052xts_enc_ret ++ movdqa %xmm1,%xmm5 ++ movl %eax,112(%esp) ++ jmp L053xts_enc_steal ++.align 4,0x90 ++L050xts_enc_done: ++ movl 112(%esp),%eax ++ pxor %xmm0,%xmm0 ++ andl $15,%eax ++ jz L052xts_enc_ret ++ pcmpgtd %xmm1,%xmm0 ++ movl %eax,112(%esp) ++ pshufd $19,%xmm0,%xmm5 ++ paddq %xmm1,%xmm1 ++ pand 96(%esp),%xmm5 ++ pxor %xmm1,%xmm5 ++L053xts_enc_steal: ++ movzbl (%esi),%ecx ++ movzbl -16(%edi),%edx ++ leal 1(%esi),%esi ++ movb %cl,-16(%edi) ++ movb %dl,(%edi) ++ leal 1(%edi),%edi ++ subl $1,%eax ++ jnz L053xts_enc_steal ++ subl 112(%esp),%edi ++ movl %ebp,%edx ++ movl %ebx,%ecx ++ movups -16(%edi),%xmm2 ++ xorps %xmm5,%xmm2 ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L054enc1_loop_10: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L054enc1_loop_10 ++.byte 102,15,56,221,209 ++ xorps %xmm5,%xmm2 ++ movups %xmm2,-16(%edi) ++L052xts_enc_ret: ++ movl 116(%esp),%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _aesni_xts_decrypt ++.align 4 ++_aesni_xts_decrypt: ++L_aesni_xts_decrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 36(%esp),%edx ++ movl 40(%esp),%esi ++ movl 240(%edx),%ecx ++ movups (%esi),%xmm2 ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L055enc1_loop_11: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L055enc1_loop_11 ++.byte 102,15,56,221,209 ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl 32(%esp),%edx ++ movl %esp,%ebp ++ subl $120,%esp ++ andl $-16,%esp ++ xorl %ebx,%ebx ++ testl $15,%eax ++ setnz %bl ++ shll $4,%ebx ++ subl %ebx,%eax ++ movl $135,96(%esp) ++ movl $0,100(%esp) ++ movl $1,104(%esp) ++ movl $0,108(%esp) ++ movl %eax,112(%esp) ++ movl %ebp,116(%esp) ++ movl 240(%edx),%ecx ++ movl %edx,%ebp ++ movl %ecx,%ebx ++ movdqa %xmm2,%xmm1 ++ pxor %xmm0,%xmm0 ++ movdqa 96(%esp),%xmm3 ++ pcmpgtd %xmm1,%xmm0 ++ andl $-16,%eax ++ subl $96,%eax ++ jc L056xts_dec_short ++ shrl $1,%ecx ++ movl %ecx,%ebx ++ jmp L057xts_dec_loop6 ++.align 4,0x90 ++L057xts_dec_loop6: ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,16(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,32(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,48(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ pshufd $19,%xmm0,%xmm7 ++ movdqa %xmm1,64(%esp) ++ paddq %xmm1,%xmm1 ++ movups (%ebp),%xmm0 ++ pand %xmm3,%xmm7 ++ movups (%esi),%xmm2 ++ pxor %xmm1,%xmm7 ++ movdqu 16(%esi),%xmm3 ++ xorps %xmm0,%xmm2 ++ movdqu 32(%esi),%xmm4 ++ pxor %xmm0,%xmm3 ++ movdqu 48(%esi),%xmm5 ++ pxor %xmm0,%xmm4 ++ movdqu 64(%esi),%xmm6 ++ pxor %xmm0,%xmm5 ++ movdqu 80(%esi),%xmm1 ++ pxor %xmm0,%xmm6 ++ leal 96(%esi),%esi ++ pxor (%esp),%xmm2 ++ movdqa %xmm7,80(%esp) ++ pxor %xmm1,%xmm7 ++ movups 16(%ebp),%xmm1 ++ leal 32(%ebp),%edx ++ pxor 16(%esp),%xmm3 ++.byte 102,15,56,222,209 ++ pxor 32(%esp),%xmm4 ++.byte 102,15,56,222,217 ++ pxor 48(%esp),%xmm5 ++ decl %ecx ++.byte 102,15,56,222,225 ++ pxor 64(%esp),%xmm6 ++.byte 102,15,56,222,233 ++ pxor %xmm0,%xmm7 ++.byte 102,15,56,222,241 ++ movups (%edx),%xmm0 ++.byte 102,15,56,222,249 ++ call L_aesni_decrypt6_enter ++ movdqa 80(%esp),%xmm1 ++ pxor %xmm0,%xmm0 ++ xorps (%esp),%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ xorps 16(%esp),%xmm3 ++ movups %xmm2,(%edi) ++ xorps 32(%esp),%xmm4 ++ movups %xmm3,16(%edi) ++ xorps 48(%esp),%xmm5 ++ movups %xmm4,32(%edi) ++ xorps 64(%esp),%xmm6 ++ movups %xmm5,48(%edi) ++ xorps %xmm1,%xmm7 ++ movups %xmm6,64(%edi) ++ pshufd $19,%xmm0,%xmm2 ++ movups %xmm7,80(%edi) ++ leal 96(%edi),%edi ++ movdqa 96(%esp),%xmm3 ++ pxor %xmm0,%xmm0 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ movl %ebx,%ecx ++ pxor %xmm2,%xmm1 ++ subl $96,%eax ++ jnc L057xts_dec_loop6 ++ leal 1(,%ecx,2),%ecx ++ movl %ebp,%edx ++ movl %ecx,%ebx ++L056xts_dec_short: ++ addl $96,%eax ++ jz L058xts_dec_done6x ++ movdqa %xmm1,%xmm5 ++ cmpl $32,%eax ++ jb L059xts_dec_one ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ je L060xts_dec_two ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,%xmm6 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ cmpl $64,%eax ++ jb L061xts_dec_three ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa %xmm1,%xmm7 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++ movdqa %xmm5,(%esp) ++ movdqa %xmm6,16(%esp) ++ je L062xts_dec_four ++ movdqa %xmm7,32(%esp) ++ pshufd $19,%xmm0,%xmm7 ++ movdqa %xmm1,48(%esp) ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm7 ++ pxor %xmm1,%xmm7 ++ movdqu (%esi),%xmm2 ++ movdqu 16(%esi),%xmm3 ++ movdqu 32(%esi),%xmm4 ++ pxor (%esp),%xmm2 ++ movdqu 48(%esi),%xmm5 ++ pxor 16(%esp),%xmm3 ++ movdqu 64(%esi),%xmm6 ++ pxor 32(%esp),%xmm4 ++ leal 80(%esi),%esi ++ pxor 48(%esp),%xmm5 ++ movdqa %xmm7,64(%esp) ++ pxor %xmm7,%xmm6 ++ call __aesni_decrypt6 ++ movaps 64(%esp),%xmm1 ++ xorps (%esp),%xmm2 ++ xorps 16(%esp),%xmm3 ++ xorps 32(%esp),%xmm4 ++ movups %xmm2,(%edi) ++ xorps 48(%esp),%xmm5 ++ movups %xmm3,16(%edi) ++ xorps %xmm1,%xmm6 ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ movups %xmm6,64(%edi) ++ leal 80(%edi),%edi ++ jmp L063xts_dec_done ++.align 4,0x90 ++L059xts_dec_one: ++ movups (%esi),%xmm2 ++ leal 16(%esi),%esi ++ xorps %xmm5,%xmm2 ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L064dec1_loop_12: ++.byte 102,15,56,222,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L064dec1_loop_12 ++.byte 102,15,56,223,209 ++ xorps %xmm5,%xmm2 ++ movups %xmm2,(%edi) ++ leal 16(%edi),%edi ++ movdqa %xmm5,%xmm1 ++ jmp L063xts_dec_done ++.align 4,0x90 ++L060xts_dec_two: ++ movaps %xmm1,%xmm6 ++ movups (%esi),%xmm2 ++ movups 16(%esi),%xmm3 ++ leal 32(%esi),%esi ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ call __aesni_decrypt3 ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ leal 32(%edi),%edi ++ movdqa %xmm6,%xmm1 ++ jmp L063xts_dec_done ++.align 4,0x90 ++L061xts_dec_three: ++ movaps %xmm1,%xmm7 ++ movups (%esi),%xmm2 ++ movups 16(%esi),%xmm3 ++ movups 32(%esi),%xmm4 ++ leal 48(%esi),%esi ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ xorps %xmm7,%xmm4 ++ call __aesni_decrypt3 ++ xorps %xmm5,%xmm2 ++ xorps %xmm6,%xmm3 ++ xorps %xmm7,%xmm4 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ leal 48(%edi),%edi ++ movdqa %xmm7,%xmm1 ++ jmp L063xts_dec_done ++.align 4,0x90 ++L062xts_dec_four: ++ movaps %xmm1,%xmm6 ++ movups (%esi),%xmm2 ++ movups 16(%esi),%xmm3 ++ movups 32(%esi),%xmm4 ++ xorps (%esp),%xmm2 ++ movups 48(%esi),%xmm5 ++ leal 64(%esi),%esi ++ xorps 16(%esp),%xmm3 ++ xorps %xmm7,%xmm4 ++ xorps %xmm6,%xmm5 ++ call __aesni_decrypt4 ++ xorps (%esp),%xmm2 ++ xorps 16(%esp),%xmm3 ++ xorps %xmm7,%xmm4 ++ movups %xmm2,(%edi) ++ xorps %xmm6,%xmm5 ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ leal 64(%edi),%edi ++ movdqa %xmm6,%xmm1 ++ jmp L063xts_dec_done ++.align 4,0x90 ++L058xts_dec_done6x: ++ movl 112(%esp),%eax ++ andl $15,%eax ++ jz L065xts_dec_ret ++ movl %eax,112(%esp) ++ jmp L066xts_dec_only_one_more ++.align 4,0x90 ++L063xts_dec_done: ++ movl 112(%esp),%eax ++ pxor %xmm0,%xmm0 ++ andl $15,%eax ++ jz L065xts_dec_ret ++ pcmpgtd %xmm1,%xmm0 ++ movl %eax,112(%esp) ++ pshufd $19,%xmm0,%xmm2 ++ pxor %xmm0,%xmm0 ++ movdqa 96(%esp),%xmm3 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm2 ++ pcmpgtd %xmm1,%xmm0 ++ pxor %xmm2,%xmm1 ++L066xts_dec_only_one_more: ++ pshufd $19,%xmm0,%xmm5 ++ movdqa %xmm1,%xmm6 ++ paddq %xmm1,%xmm1 ++ pand %xmm3,%xmm5 ++ pxor %xmm1,%xmm5 ++ movl %ebp,%edx ++ movl %ebx,%ecx ++ movups (%esi),%xmm2 ++ xorps %xmm5,%xmm2 ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L067dec1_loop_13: ++.byte 102,15,56,222,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L067dec1_loop_13 ++.byte 102,15,56,223,209 ++ xorps %xmm5,%xmm2 ++ movups %xmm2,(%edi) ++L068xts_dec_steal: ++ movzbl 16(%esi),%ecx ++ movzbl (%edi),%edx ++ leal 1(%esi),%esi ++ movb %cl,(%edi) ++ movb %dl,16(%edi) ++ leal 1(%edi),%edi ++ subl $1,%eax ++ jnz L068xts_dec_steal ++ subl 112(%esp),%edi ++ movl %ebp,%edx ++ movl %ebx,%ecx ++ movups (%edi),%xmm2 ++ xorps %xmm6,%xmm2 ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L069dec1_loop_14: ++.byte 102,15,56,222,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L069dec1_loop_14 ++.byte 102,15,56,223,209 ++ xorps %xmm6,%xmm2 ++ movups %xmm2,(%edi) ++L065xts_dec_ret: ++ movl 116(%esp),%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _aesni_cbc_encrypt ++.align 4 ++_aesni_cbc_encrypt: ++L_aesni_cbc_encrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl %esp,%ebx ++ movl 24(%esp),%edi ++ subl $24,%ebx ++ movl 28(%esp),%eax ++ andl $-16,%ebx ++ movl 32(%esp),%edx ++ movl 36(%esp),%ebp ++ testl %eax,%eax ++ jz L070cbc_abort ++ cmpl $0,40(%esp) ++ xchgl %esp,%ebx ++ movups (%ebp),%xmm7 ++ movl 240(%edx),%ecx ++ movl %edx,%ebp ++ movl %ebx,16(%esp) ++ movl %ecx,%ebx ++ je L071cbc_decrypt ++ movaps %xmm7,%xmm2 ++ cmpl $16,%eax ++ jb L072cbc_enc_tail ++ subl $16,%eax ++ jmp L073cbc_enc_loop ++.align 4,0x90 ++L073cbc_enc_loop: ++ movups (%esi),%xmm7 ++ leal 16(%esi),%esi ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ xorps %xmm0,%xmm7 ++ leal 32(%edx),%edx ++ xorps %xmm7,%xmm2 ++L074enc1_loop_15: ++.byte 102,15,56,220,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L074enc1_loop_15 ++.byte 102,15,56,221,209 ++ movl %ebx,%ecx ++ movl %ebp,%edx ++ movups %xmm2,(%edi) ++ leal 16(%edi),%edi ++ subl $16,%eax ++ jnc L073cbc_enc_loop ++ addl $16,%eax ++ jnz L072cbc_enc_tail ++ movaps %xmm2,%xmm7 ++ jmp L075cbc_ret ++L072cbc_enc_tail: ++ movl %eax,%ecx ++.long 2767451785 ++ movl $16,%ecx ++ subl %eax,%ecx ++ xorl %eax,%eax ++.long 2868115081 ++ leal -16(%edi),%edi ++ movl %ebx,%ecx ++ movl %edi,%esi ++ movl %ebp,%edx ++ jmp L073cbc_enc_loop ++.align 4,0x90 ++L071cbc_decrypt: ++ cmpl $80,%eax ++ jbe L076cbc_dec_tail ++ movaps %xmm7,(%esp) ++ subl $80,%eax ++ jmp L077cbc_dec_loop6_enter ++.align 4,0x90 ++L078cbc_dec_loop6: ++ movaps %xmm0,(%esp) ++ movups %xmm7,(%edi) ++ leal 16(%edi),%edi ++L077cbc_dec_loop6_enter: ++ movdqu (%esi),%xmm2 ++ movdqu 16(%esi),%xmm3 ++ movdqu 32(%esi),%xmm4 ++ movdqu 48(%esi),%xmm5 ++ movdqu 64(%esi),%xmm6 ++ movdqu 80(%esi),%xmm7 ++ call __aesni_decrypt6 ++ movups (%esi),%xmm1 ++ movups 16(%esi),%xmm0 ++ xorps (%esp),%xmm2 ++ xorps %xmm1,%xmm3 ++ movups 32(%esi),%xmm1 ++ xorps %xmm0,%xmm4 ++ movups 48(%esi),%xmm0 ++ xorps %xmm1,%xmm5 ++ movups 64(%esi),%xmm1 ++ xorps %xmm0,%xmm6 ++ movups 80(%esi),%xmm0 ++ xorps %xmm1,%xmm7 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ leal 96(%esi),%esi ++ movups %xmm4,32(%edi) ++ movl %ebx,%ecx ++ movups %xmm5,48(%edi) ++ movl %ebp,%edx ++ movups %xmm6,64(%edi) ++ leal 80(%edi),%edi ++ subl $96,%eax ++ ja L078cbc_dec_loop6 ++ movaps %xmm7,%xmm2 ++ movaps %xmm0,%xmm7 ++ addl $80,%eax ++ jle L079cbc_dec_tail_collected ++ movups %xmm2,(%edi) ++ leal 16(%edi),%edi ++L076cbc_dec_tail: ++ movups (%esi),%xmm2 ++ movaps %xmm2,%xmm6 ++ cmpl $16,%eax ++ jbe L080cbc_dec_one ++ movups 16(%esi),%xmm3 ++ movaps %xmm3,%xmm5 ++ cmpl $32,%eax ++ jbe L081cbc_dec_two ++ movups 32(%esi),%xmm4 ++ cmpl $48,%eax ++ jbe L082cbc_dec_three ++ movups 48(%esi),%xmm5 ++ cmpl $64,%eax ++ jbe L083cbc_dec_four ++ movups 64(%esi),%xmm6 ++ movaps %xmm7,(%esp) ++ movups (%esi),%xmm2 ++ xorps %xmm7,%xmm7 ++ call __aesni_decrypt6 ++ movups (%esi),%xmm1 ++ movups 16(%esi),%xmm0 ++ xorps (%esp),%xmm2 ++ xorps %xmm1,%xmm3 ++ movups 32(%esi),%xmm1 ++ xorps %xmm0,%xmm4 ++ movups 48(%esi),%xmm0 ++ xorps %xmm1,%xmm5 ++ movups 64(%esi),%xmm7 ++ xorps %xmm0,%xmm6 ++ movups %xmm2,(%edi) ++ movups %xmm3,16(%edi) ++ movups %xmm4,32(%edi) ++ movups %xmm5,48(%edi) ++ leal 64(%edi),%edi ++ movaps %xmm6,%xmm2 ++ subl $80,%eax ++ jmp L079cbc_dec_tail_collected ++.align 4,0x90 ++L080cbc_dec_one: ++ movups (%edx),%xmm0 ++ movups 16(%edx),%xmm1 ++ leal 32(%edx),%edx ++ xorps %xmm0,%xmm2 ++L084dec1_loop_16: ++.byte 102,15,56,222,209 ++ decl %ecx ++ movups (%edx),%xmm1 ++ leal 16(%edx),%edx ++ jnz L084dec1_loop_16 ++.byte 102,15,56,223,209 ++ xorps %xmm7,%xmm2 ++ movaps %xmm6,%xmm7 ++ subl $16,%eax ++ jmp L079cbc_dec_tail_collected ++.align 4,0x90 ++L081cbc_dec_two: ++ xorps %xmm4,%xmm4 ++ call __aesni_decrypt3 ++ xorps %xmm7,%xmm2 ++ xorps %xmm6,%xmm3 ++ movups %xmm2,(%edi) ++ movaps %xmm3,%xmm2 ++ leal 16(%edi),%edi ++ movaps %xmm5,%xmm7 ++ subl $32,%eax ++ jmp L079cbc_dec_tail_collected ++.align 4,0x90 ++L082cbc_dec_three: ++ call __aesni_decrypt3 ++ xorps %xmm7,%xmm2 ++ xorps %xmm6,%xmm3 ++ xorps %xmm5,%xmm4 ++ movups %xmm2,(%edi) ++ movaps %xmm4,%xmm2 ++ movups %xmm3,16(%edi) ++ leal 32(%edi),%edi ++ movups 32(%esi),%xmm7 ++ subl $48,%eax ++ jmp L079cbc_dec_tail_collected ++.align 4,0x90 ++L083cbc_dec_four: ++ call __aesni_decrypt4 ++ movups 16(%esi),%xmm1 ++ movups 32(%esi),%xmm0 ++ xorps %xmm7,%xmm2 ++ movups 48(%esi),%xmm7 ++ xorps %xmm6,%xmm3 ++ movups %xmm2,(%edi) ++ xorps %xmm1,%xmm4 ++ movups %xmm3,16(%edi) ++ xorps %xmm0,%xmm5 ++ movups %xmm4,32(%edi) ++ leal 48(%edi),%edi ++ movaps %xmm5,%xmm2 ++ subl $64,%eax ++L079cbc_dec_tail_collected: ++ andl $15,%eax ++ jnz L085cbc_dec_tail_partial ++ movups %xmm2,(%edi) ++ jmp L075cbc_ret ++.align 4,0x90 ++L085cbc_dec_tail_partial: ++ movaps %xmm2,(%esp) ++ movl $16,%ecx ++ movl %esp,%esi ++ subl %eax,%ecx ++.long 2767451785 ++L075cbc_ret: ++ movl 16(%esp),%esp ++ movl 36(%esp),%ebp ++ movups %xmm7,(%ebp) ++L070cbc_abort: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 4 ++__aesni_set_encrypt_key: ++ testl %eax,%eax ++ jz L086bad_pointer ++ testl %edx,%edx ++ jz L086bad_pointer ++ movups (%eax),%xmm0 ++ xorps %xmm4,%xmm4 ++ leal 16(%edx),%edx ++ cmpl $256,%ecx ++ je L08714rounds ++ cmpl $192,%ecx ++ je L08812rounds ++ cmpl $128,%ecx ++ jne L089bad_keybits ++.align 4,0x90 ++L09010rounds: ++ movl $9,%ecx ++ movups %xmm0,-16(%edx) ++.byte 102,15,58,223,200,1 ++ call L091key_128_cold ++.byte 102,15,58,223,200,2 ++ call L092key_128 ++.byte 102,15,58,223,200,4 ++ call L092key_128 ++.byte 102,15,58,223,200,8 ++ call L092key_128 ++.byte 102,15,58,223,200,16 ++ call L092key_128 ++.byte 102,15,58,223,200,32 ++ call L092key_128 ++.byte 102,15,58,223,200,64 ++ call L092key_128 ++.byte 102,15,58,223,200,128 ++ call L092key_128 ++.byte 102,15,58,223,200,27 ++ call L092key_128 ++.byte 102,15,58,223,200,54 ++ call L092key_128 ++ movups %xmm0,(%edx) ++ movl %ecx,80(%edx) ++ xorl %eax,%eax ++ ret ++.align 4,0x90 ++L092key_128: ++ movups %xmm0,(%edx) ++ leal 16(%edx),%edx ++L091key_128_cold: ++ shufps $16,%xmm0,%xmm4 ++ xorps %xmm4,%xmm0 ++ shufps $140,%xmm0,%xmm4 ++ xorps %xmm4,%xmm0 ++ shufps $255,%xmm1,%xmm1 ++ xorps %xmm1,%xmm0 ++ ret ++.align 4,0x90 ++L08812rounds: ++ movq 16(%eax),%xmm2 ++ movl $11,%ecx ++ movups %xmm0,-16(%edx) ++.byte 102,15,58,223,202,1 ++ call L093key_192a_cold ++.byte 102,15,58,223,202,2 ++ call L094key_192b ++.byte 102,15,58,223,202,4 ++ call L095key_192a ++.byte 102,15,58,223,202,8 ++ call L094key_192b ++.byte 102,15,58,223,202,16 ++ call L095key_192a ++.byte 102,15,58,223,202,32 ++ call L094key_192b ++.byte 102,15,58,223,202,64 ++ call L095key_192a ++.byte 102,15,58,223,202,128 ++ call L094key_192b ++ movups %xmm0,(%edx) ++ movl %ecx,48(%edx) ++ xorl %eax,%eax ++ ret ++.align 4,0x90 ++L095key_192a: ++ movups %xmm0,(%edx) ++ leal 16(%edx),%edx ++.align 4,0x90 ++L093key_192a_cold: ++ movaps %xmm2,%xmm5 ++L096key_192b_warm: ++ shufps $16,%xmm0,%xmm4 ++ movdqa %xmm2,%xmm3 ++ xorps %xmm4,%xmm0 ++ shufps $140,%xmm0,%xmm4 ++ pslldq $4,%xmm3 ++ xorps %xmm4,%xmm0 ++ pshufd $85,%xmm1,%xmm1 ++ pxor %xmm3,%xmm2 ++ pxor %xmm1,%xmm0 ++ pshufd $255,%xmm0,%xmm3 ++ pxor %xmm3,%xmm2 ++ ret ++.align 4,0x90 ++L094key_192b: ++ movaps %xmm0,%xmm3 ++ shufps $68,%xmm0,%xmm5 ++ movups %xmm5,(%edx) ++ shufps $78,%xmm2,%xmm3 ++ movups %xmm3,16(%edx) ++ leal 32(%edx),%edx ++ jmp L096key_192b_warm ++.align 4,0x90 ++L08714rounds: ++ movups 16(%eax),%xmm2 ++ movl $13,%ecx ++ leal 16(%edx),%edx ++ movups %xmm0,-32(%edx) ++ movups %xmm2,-16(%edx) ++.byte 102,15,58,223,202,1 ++ call L097key_256a_cold ++.byte 102,15,58,223,200,1 ++ call L098key_256b ++.byte 102,15,58,223,202,2 ++ call L099key_256a ++.byte 102,15,58,223,200,2 ++ call L098key_256b ++.byte 102,15,58,223,202,4 ++ call L099key_256a ++.byte 102,15,58,223,200,4 ++ call L098key_256b ++.byte 102,15,58,223,202,8 ++ call L099key_256a ++.byte 102,15,58,223,200,8 ++ call L098key_256b ++.byte 102,15,58,223,202,16 ++ call L099key_256a ++.byte 102,15,58,223,200,16 ++ call L098key_256b ++.byte 102,15,58,223,202,32 ++ call L099key_256a ++.byte 102,15,58,223,200,32 ++ call L098key_256b ++.byte 102,15,58,223,202,64 ++ call L099key_256a ++ movups %xmm0,(%edx) ++ movl %ecx,16(%edx) ++ xorl %eax,%eax ++ ret ++.align 4,0x90 ++L099key_256a: ++ movups %xmm2,(%edx) ++ leal 16(%edx),%edx ++L097key_256a_cold: ++ shufps $16,%xmm0,%xmm4 ++ xorps %xmm4,%xmm0 ++ shufps $140,%xmm0,%xmm4 ++ xorps %xmm4,%xmm0 ++ shufps $255,%xmm1,%xmm1 ++ xorps %xmm1,%xmm0 ++ ret ++.align 4,0x90 ++L098key_256b: ++ movups %xmm0,(%edx) ++ leal 16(%edx),%edx ++ shufps $16,%xmm2,%xmm4 ++ xorps %xmm4,%xmm2 ++ shufps $140,%xmm2,%xmm4 ++ xorps %xmm4,%xmm2 ++ shufps $170,%xmm1,%xmm1 ++ xorps %xmm1,%xmm2 ++ ret ++.align 2,0x90 ++L086bad_pointer: ++ movl $-1,%eax ++ ret ++.align 2,0x90 ++L089bad_keybits: ++ movl $-2,%eax ++ ret ++.globl _aesni_set_encrypt_key ++.align 4 ++_aesni_set_encrypt_key: ++L_aesni_set_encrypt_key_begin: ++ movl 4(%esp),%eax ++ movl 8(%esp),%ecx ++ movl 12(%esp),%edx ++ call __aesni_set_encrypt_key ++ ret ++.globl _aesni_set_decrypt_key ++.align 4 ++_aesni_set_decrypt_key: ++L_aesni_set_decrypt_key_begin: ++ movl 4(%esp),%eax ++ movl 8(%esp),%ecx ++ movl 12(%esp),%edx ++ call __aesni_set_encrypt_key ++ movl 12(%esp),%edx ++ shll $4,%ecx ++ testl %eax,%eax ++ jnz L100dec_key_ret ++ leal 16(%edx,%ecx,1),%eax ++ movups (%edx),%xmm0 ++ movups (%eax),%xmm1 ++ movups %xmm0,(%eax) ++ movups %xmm1,(%edx) ++ leal 16(%edx),%edx ++ leal -16(%eax),%eax ++L101dec_key_inverse: ++ movups (%edx),%xmm0 ++ movups (%eax),%xmm1 ++.byte 102,15,56,219,192 ++.byte 102,15,56,219,201 ++ leal 16(%edx),%edx ++ leal -16(%eax),%eax ++ movups %xmm0,16(%eax) ++ movups %xmm1,-16(%edx) ++ cmpl %edx,%eax ++ ja L101dec_key_inverse ++ movups (%edx),%xmm0 ++.byte 102,15,56,219,192 ++ movups %xmm0,(%edx) ++ xorl %eax,%eax ++L100dec_key_ret: ++ ret ++.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 ++.byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 ++.byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 ++.byte 115,108,46,111,114,103,62,0 +diff --git a/crypto/aes/asm/vpaes-x86-mac.S b/crypto/aes/asm/vpaes-x86-mac.S +new file mode 100644 +index 0000000..f6d164f +--- /dev/null ++++ b/crypto/aes/asm/vpaes-x86-mac.S +@@ -0,0 +1,635 @@ ++.file "vpaes-x86.s" ++.text ++.align 6,0x90 ++L_vpaes_consts: ++.long 218628480,235210255,168496130,67568393 ++.long 252381056,17041926,33884169,51187212 ++.long 252645135,252645135,252645135,252645135 ++.long 1512730624,3266504856,1377990664,3401244816 ++.long 830229760,1275146365,2969422977,3447763452 ++.long 3411033600,2979783055,338359620,2782886510 ++.long 4209124096,907596821,221174255,1006095553 ++.long 191964160,3799684038,3164090317,1589111125 ++.long 182528256,1777043520,2877432650,3265356744 ++.long 1874708224,3503451415,3305285752,363511674 ++.long 1606117888,3487855781,1093350906,2384367825 ++.long 197121,67569157,134941193,202313229 ++.long 67569157,134941193,202313229,197121 ++.long 134941193,202313229,197121,67569157 ++.long 202313229,197121,67569157,134941193 ++.long 33619971,100992007,168364043,235736079 ++.long 235736079,33619971,100992007,168364043 ++.long 168364043,235736079,33619971,100992007 ++.long 100992007,168364043,235736079,33619971 ++.long 50462976,117835012,185207048,252579084 ++.long 252314880,51251460,117574920,184942860 ++.long 184682752,252054788,50987272,118359308 ++.long 118099200,185467140,251790600,50727180 ++.long 2946363062,528716217,1300004225,1881839624 ++.long 1532713819,1532713819,1532713819,1532713819 ++.long 3602276352,4288629033,3737020424,4153884961 ++.long 1354558464,32357713,2958822624,3775749553 ++.long 1201988352,132424512,1572796698,503232858 ++.long 2213177600,1597421020,4103937655,675398315 ++.long 2749646592,4273543773,1511898873,121693092 ++.long 3040248576,1103263732,2871565598,1608280554 ++.long 2236667136,2588920351,482954393,64377734 ++.long 3069987328,291237287,2117370568,3650299247 ++.long 533321216,3573750986,2572112006,1401264716 ++.long 1339849704,2721158661,548607111,3445553514 ++.long 2128193280,3054596040,2183486460,1257083700 ++.long 655635200,1165381986,3923443150,2344132524 ++.long 190078720,256924420,290342170,357187870 ++.long 1610966272,2263057382,4103205268,309794674 ++.long 2592527872,2233205587,1335446729,3402964816 ++.long 3973531904,3225098121,3002836325,1918774430 ++.long 3870401024,2102906079,2284471353,4117666579 ++.long 617007872,1021508343,366931923,691083277 ++.long 2528395776,3491914898,2968704004,1613121270 ++.long 3445188352,3247741094,844474987,4093578302 ++.long 651481088,1190302358,1689581232,574775300 ++.long 4289380608,206939853,2555985458,2489840491 ++.long 2130264064,327674451,3566485037,3349835193 ++.long 2470714624,316102159,3636825756,3393945945 ++.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 ++.byte 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 ++.byte 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 ++.byte 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 ++.byte 118,101,114,115,105,116,121,41,0 ++.align 6,0x90 ++.align 4 ++__vpaes_preheat: ++ addl (%esp),%ebp ++ movdqa -48(%ebp),%xmm7 ++ movdqa -16(%ebp),%xmm6 ++ ret ++.align 4 ++__vpaes_encrypt_core: ++ movl $16,%ecx ++ movl 240(%edx),%eax ++ movdqa %xmm6,%xmm1 ++ movdqa (%ebp),%xmm2 ++ pandn %xmm0,%xmm1 ++ movdqu (%edx),%xmm5 ++ psrld $4,%xmm1 ++ pand %xmm6,%xmm0 ++.byte 102,15,56,0,208 ++ movdqa 16(%ebp),%xmm0 ++.byte 102,15,56,0,193 ++ pxor %xmm5,%xmm2 ++ pxor %xmm2,%xmm0 ++ addl $16,%edx ++ leal 192(%ebp),%ebx ++ jmp L000enc_entry ++.align 4,0x90 ++L001enc_loop: ++ movdqa 32(%ebp),%xmm4 ++.byte 102,15,56,0,226 ++ pxor %xmm5,%xmm4 ++ movdqa 48(%ebp),%xmm0 ++.byte 102,15,56,0,195 ++ pxor %xmm4,%xmm0 ++ movdqa 64(%ebp),%xmm5 ++.byte 102,15,56,0,234 ++ movdqa -64(%ebx,%ecx,1),%xmm1 ++ movdqa 80(%ebp),%xmm2 ++.byte 102,15,56,0,211 ++ pxor %xmm5,%xmm2 ++ movdqa (%ebx,%ecx,1),%xmm4 ++ movdqa %xmm0,%xmm3 ++.byte 102,15,56,0,193 ++ addl $16,%edx ++ pxor %xmm2,%xmm0 ++.byte 102,15,56,0,220 ++ addl $16,%ecx ++ pxor %xmm0,%xmm3 ++.byte 102,15,56,0,193 ++ andl $48,%ecx ++ pxor %xmm3,%xmm0 ++ subl $1,%eax ++L000enc_entry: ++ movdqa %xmm6,%xmm1 ++ pandn %xmm0,%xmm1 ++ psrld $4,%xmm1 ++ pand %xmm6,%xmm0 ++ movdqa -32(%ebp),%xmm5 ++.byte 102,15,56,0,232 ++ pxor %xmm1,%xmm0 ++ movdqa %xmm7,%xmm3 ++.byte 102,15,56,0,217 ++ pxor %xmm5,%xmm3 ++ movdqa %xmm7,%xmm4 ++.byte 102,15,56,0,224 ++ pxor %xmm5,%xmm4 ++ movdqa %xmm7,%xmm2 ++.byte 102,15,56,0,211 ++ pxor %xmm0,%xmm2 ++ movdqa %xmm7,%xmm3 ++ movdqu (%edx),%xmm5 ++.byte 102,15,56,0,220 ++ pxor %xmm1,%xmm3 ++ jnz L001enc_loop ++ movdqa 96(%ebp),%xmm4 ++ movdqa 112(%ebp),%xmm0 ++.byte 102,15,56,0,226 ++ pxor %xmm5,%xmm4 ++.byte 102,15,56,0,195 ++ movdqa 64(%ebx,%ecx,1),%xmm1 ++ pxor %xmm4,%xmm0 ++.byte 102,15,56,0,193 ++ ret ++.align 4 ++__vpaes_decrypt_core: ++ movl 240(%edx),%eax ++ leal 608(%ebp),%ebx ++ movdqa %xmm6,%xmm1 ++ movdqa -64(%ebx),%xmm2 ++ pandn %xmm0,%xmm1 ++ movl %eax,%ecx ++ psrld $4,%xmm1 ++ movdqu (%edx),%xmm5 ++ shll $4,%ecx ++ pand %xmm6,%xmm0 ++.byte 102,15,56,0,208 ++ movdqa -48(%ebx),%xmm0 ++ xorl $48,%ecx ++.byte 102,15,56,0,193 ++ andl $48,%ecx ++ pxor %xmm5,%xmm2 ++ movdqa 176(%ebp),%xmm5 ++ pxor %xmm2,%xmm0 ++ addl $16,%edx ++ leal -352(%ebx,%ecx,1),%ecx ++ jmp L002dec_entry ++.align 4,0x90 ++L003dec_loop: ++ movdqa -32(%ebx),%xmm4 ++.byte 102,15,56,0,226 ++ pxor %xmm0,%xmm4 ++ movdqa -16(%ebx),%xmm0 ++.byte 102,15,56,0,195 ++ pxor %xmm4,%xmm0 ++ addl $16,%edx ++.byte 102,15,56,0,197 ++ movdqa (%ebx),%xmm4 ++.byte 102,15,56,0,226 ++ pxor %xmm0,%xmm4 ++ movdqa 16(%ebx),%xmm0 ++.byte 102,15,56,0,195 ++ pxor %xmm4,%xmm0 ++ subl $1,%eax ++.byte 102,15,56,0,197 ++ movdqa 32(%ebx),%xmm4 ++.byte 102,15,56,0,226 ++ pxor %xmm0,%xmm4 ++ movdqa 48(%ebx),%xmm0 ++.byte 102,15,56,0,195 ++ pxor %xmm4,%xmm0 ++.byte 102,15,56,0,197 ++ movdqa 64(%ebx),%xmm4 ++.byte 102,15,56,0,226 ++ pxor %xmm0,%xmm4 ++ movdqa 80(%ebx),%xmm0 ++.byte 102,15,56,0,195 ++ pxor %xmm4,%xmm0 ++.byte 102,15,58,15,237,12 ++L002dec_entry: ++ movdqa %xmm6,%xmm1 ++ pandn %xmm0,%xmm1 ++ psrld $4,%xmm1 ++ pand %xmm6,%xmm0 ++ movdqa -32(%ebp),%xmm2 ++.byte 102,15,56,0,208 ++ pxor %xmm1,%xmm0 ++ movdqa %xmm7,%xmm3 ++.byte 102,15,56,0,217 ++ pxor %xmm2,%xmm3 ++ movdqa %xmm7,%xmm4 ++.byte 102,15,56,0,224 ++ pxor %xmm2,%xmm4 ++ movdqa %xmm7,%xmm2 ++.byte 102,15,56,0,211 ++ pxor %xmm0,%xmm2 ++ movdqa %xmm7,%xmm3 ++.byte 102,15,56,0,220 ++ pxor %xmm1,%xmm3 ++ movdqu (%edx),%xmm0 ++ jnz L003dec_loop ++ movdqa 96(%ebx),%xmm4 ++.byte 102,15,56,0,226 ++ pxor %xmm0,%xmm4 ++ movdqa 112(%ebx),%xmm0 ++ movdqa (%ecx),%xmm2 ++.byte 102,15,56,0,195 ++ pxor %xmm4,%xmm0 ++.byte 102,15,56,0,194 ++ ret ++.align 4 ++__vpaes_schedule_core: ++ addl (%esp),%ebp ++ movdqu (%esi),%xmm0 ++ movdqa 320(%ebp),%xmm2 ++ movdqa %xmm0,%xmm3 ++ leal (%ebp),%ebx ++ movdqa %xmm2,4(%esp) ++ call __vpaes_schedule_transform ++ movdqa %xmm0,%xmm7 ++ testl %edi,%edi ++ jnz L004schedule_am_decrypting ++ movdqu %xmm0,(%edx) ++ jmp L005schedule_go ++L004schedule_am_decrypting: ++ movdqa 256(%ebp,%ecx,1),%xmm1 ++.byte 102,15,56,0,217 ++ movdqu %xmm3,(%edx) ++ xorl $48,%ecx ++L005schedule_go: ++ cmpl $192,%eax ++ ja L006schedule_256 ++ je L007schedule_192 ++L008schedule_128: ++ movl $10,%eax ++L009loop_schedule_128: ++ call __vpaes_schedule_round ++ decl %eax ++ jz L010schedule_mangle_last ++ call __vpaes_schedule_mangle ++ jmp L009loop_schedule_128 ++.align 4,0x90 ++L007schedule_192: ++ movdqu 8(%esi),%xmm0 ++ call __vpaes_schedule_transform ++ movdqa %xmm0,%xmm6 ++ pxor %xmm4,%xmm4 ++ movhlps %xmm4,%xmm6 ++ movl $4,%eax ++L011loop_schedule_192: ++ call __vpaes_schedule_round ++.byte 102,15,58,15,198,8 ++ call __vpaes_schedule_mangle ++ call __vpaes_schedule_192_smear ++ call __vpaes_schedule_mangle ++ call __vpaes_schedule_round ++ decl %eax ++ jz L010schedule_mangle_last ++ call __vpaes_schedule_mangle ++ call __vpaes_schedule_192_smear ++ jmp L011loop_schedule_192 ++.align 4,0x90 ++L006schedule_256: ++ movdqu 16(%esi),%xmm0 ++ call __vpaes_schedule_transform ++ movl $7,%eax ++L012loop_schedule_256: ++ call __vpaes_schedule_mangle ++ movdqa %xmm0,%xmm6 ++ call __vpaes_schedule_round ++ decl %eax ++ jz L010schedule_mangle_last ++ call __vpaes_schedule_mangle ++ pshufd $255,%xmm0,%xmm0 ++ movdqa %xmm7,20(%esp) ++ movdqa %xmm6,%xmm7 ++ call L_vpaes_schedule_low_round ++ movdqa 20(%esp),%xmm7 ++ jmp L012loop_schedule_256 ++.align 4,0x90 ++L010schedule_mangle_last: ++ leal 384(%ebp),%ebx ++ testl %edi,%edi ++ jnz L013schedule_mangle_last_dec ++ movdqa 256(%ebp,%ecx,1),%xmm1 ++.byte 102,15,56,0,193 ++ leal 352(%ebp),%ebx ++ addl $32,%edx ++L013schedule_mangle_last_dec: ++ addl $-16,%edx ++ pxor 336(%ebp),%xmm0 ++ call __vpaes_schedule_transform ++ movdqu %xmm0,(%edx) ++ pxor %xmm0,%xmm0 ++ pxor %xmm1,%xmm1 ++ pxor %xmm2,%xmm2 ++ pxor %xmm3,%xmm3 ++ pxor %xmm4,%xmm4 ++ pxor %xmm5,%xmm5 ++ pxor %xmm6,%xmm6 ++ pxor %xmm7,%xmm7 ++ ret ++.align 4 ++__vpaes_schedule_192_smear: ++ pshufd $128,%xmm6,%xmm0 ++ pxor %xmm0,%xmm6 ++ pshufd $254,%xmm7,%xmm0 ++ pxor %xmm0,%xmm6 ++ movdqa %xmm6,%xmm0 ++ pxor %xmm1,%xmm1 ++ movhlps %xmm1,%xmm6 ++ ret ++.align 4 ++__vpaes_schedule_round: ++ movdqa 8(%esp),%xmm2 ++ pxor %xmm1,%xmm1 ++.byte 102,15,58,15,202,15 ++.byte 102,15,58,15,210,15 ++ pxor %xmm1,%xmm7 ++ pshufd $255,%xmm0,%xmm0 ++.byte 102,15,58,15,192,1 ++ movdqa %xmm2,8(%esp) ++L_vpaes_schedule_low_round: ++ movdqa %xmm7,%xmm1 ++ pslldq $4,%xmm7 ++ pxor %xmm1,%xmm7 ++ movdqa %xmm7,%xmm1 ++ pslldq $8,%xmm7 ++ pxor %xmm1,%xmm7 ++ pxor 336(%ebp),%xmm7 ++ movdqa -16(%ebp),%xmm4 ++ movdqa -48(%ebp),%xmm5 ++ movdqa %xmm4,%xmm1 ++ pandn %xmm0,%xmm1 ++ psrld $4,%xmm1 ++ pand %xmm4,%xmm0 ++ movdqa -32(%ebp),%xmm2 ++.byte 102,15,56,0,208 ++ pxor %xmm1,%xmm0 ++ movdqa %xmm5,%xmm3 ++.byte 102,15,56,0,217 ++ pxor %xmm2,%xmm3 ++ movdqa %xmm5,%xmm4 ++.byte 102,15,56,0,224 ++ pxor %xmm2,%xmm4 ++ movdqa %xmm5,%xmm2 ++.byte 102,15,56,0,211 ++ pxor %xmm0,%xmm2 ++ movdqa %xmm5,%xmm3 ++.byte 102,15,56,0,220 ++ pxor %xmm1,%xmm3 ++ movdqa 32(%ebp),%xmm4 ++.byte 102,15,56,0,226 ++ movdqa 48(%ebp),%xmm0 ++.byte 102,15,56,0,195 ++ pxor %xmm4,%xmm0 ++ pxor %xmm7,%xmm0 ++ movdqa %xmm0,%xmm7 ++ ret ++.align 4 ++__vpaes_schedule_transform: ++ movdqa -16(%ebp),%xmm2 ++ movdqa %xmm2,%xmm1 ++ pandn %xmm0,%xmm1 ++ psrld $4,%xmm1 ++ pand %xmm2,%xmm0 ++ movdqa (%ebx),%xmm2 ++.byte 102,15,56,0,208 ++ movdqa 16(%ebx),%xmm0 ++.byte 102,15,56,0,193 ++ pxor %xmm2,%xmm0 ++ ret ++.align 4 ++__vpaes_schedule_mangle: ++ movdqa %xmm0,%xmm4 ++ movdqa 128(%ebp),%xmm5 ++ testl %edi,%edi ++ jnz L014schedule_mangle_dec ++ addl $16,%edx ++ pxor 336(%ebp),%xmm4 ++.byte 102,15,56,0,229 ++ movdqa %xmm4,%xmm3 ++.byte 102,15,56,0,229 ++ pxor %xmm4,%xmm3 ++.byte 102,15,56,0,229 ++ pxor %xmm4,%xmm3 ++ jmp L015schedule_mangle_both ++.align 4,0x90 ++L014schedule_mangle_dec: ++ movdqa -16(%ebp),%xmm2 ++ leal 416(%ebp),%esi ++ movdqa %xmm2,%xmm1 ++ pandn %xmm4,%xmm1 ++ psrld $4,%xmm1 ++ pand %xmm2,%xmm4 ++ movdqa (%esi),%xmm2 ++.byte 102,15,56,0,212 ++ movdqa 16(%esi),%xmm3 ++.byte 102,15,56,0,217 ++ pxor %xmm2,%xmm3 ++.byte 102,15,56,0,221 ++ movdqa 32(%esi),%xmm2 ++.byte 102,15,56,0,212 ++ pxor %xmm3,%xmm2 ++ movdqa 48(%esi),%xmm3 ++.byte 102,15,56,0,217 ++ pxor %xmm2,%xmm3 ++.byte 102,15,56,0,221 ++ movdqa 64(%esi),%xmm2 ++.byte 102,15,56,0,212 ++ pxor %xmm3,%xmm2 ++ movdqa 80(%esi),%xmm3 ++.byte 102,15,56,0,217 ++ pxor %xmm2,%xmm3 ++.byte 102,15,56,0,221 ++ movdqa 96(%esi),%xmm2 ++.byte 102,15,56,0,212 ++ pxor %xmm3,%xmm2 ++ movdqa 112(%esi),%xmm3 ++.byte 102,15,56,0,217 ++ pxor %xmm2,%xmm3 ++ addl $-16,%edx ++L015schedule_mangle_both: ++ movdqa 256(%ebp,%ecx,1),%xmm1 ++.byte 102,15,56,0,217 ++ addl $-16,%ecx ++ andl $48,%ecx ++ movdqu %xmm3,(%edx) ++ ret ++.globl _vpaes_set_encrypt_key ++.align 4 ++_vpaes_set_encrypt_key: ++L_vpaes_set_encrypt_key_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ leal -56(%esp),%ebx ++ movl 24(%esp),%eax ++ andl $-16,%ebx ++ movl 28(%esp),%edx ++ xchgl %esp,%ebx ++ movl %ebx,48(%esp) ++ movl %eax,%ebx ++ shrl $5,%ebx ++ addl $5,%ebx ++ movl %ebx,240(%edx) ++ movl $48,%ecx ++ movl $0,%edi ++ leal L_vpaes_consts+0x30-L016pic_point,%ebp ++ call __vpaes_schedule_core ++L016pic_point: ++ movl 48(%esp),%esp ++ xorl %eax,%eax ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _vpaes_set_decrypt_key ++.align 4 ++_vpaes_set_decrypt_key: ++L_vpaes_set_decrypt_key_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ leal -56(%esp),%ebx ++ movl 24(%esp),%eax ++ andl $-16,%ebx ++ movl 28(%esp),%edx ++ xchgl %esp,%ebx ++ movl %ebx,48(%esp) ++ movl %eax,%ebx ++ shrl $5,%ebx ++ addl $5,%ebx ++ movl %ebx,240(%edx) ++ shll $4,%ebx ++ leal 16(%edx,%ebx,1),%edx ++ movl $1,%edi ++ movl %eax,%ecx ++ shrl $1,%ecx ++ andl $32,%ecx ++ xorl $32,%ecx ++ leal L_vpaes_consts+0x30-L017pic_point,%ebp ++ call __vpaes_schedule_core ++L017pic_point: ++ movl 48(%esp),%esp ++ xorl %eax,%eax ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _vpaes_encrypt ++.align 4 ++_vpaes_encrypt: ++L_vpaes_encrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ leal L_vpaes_consts+0x30-L018pic_point,%ebp ++ call __vpaes_preheat ++L018pic_point: ++ movl 20(%esp),%esi ++ leal -56(%esp),%ebx ++ movl 24(%esp),%edi ++ andl $-16,%ebx ++ movl 28(%esp),%edx ++ xchgl %esp,%ebx ++ movl %ebx,48(%esp) ++ movdqu (%esi),%xmm0 ++ call __vpaes_encrypt_core ++ movdqu %xmm0,(%edi) ++ movl 48(%esp),%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _vpaes_decrypt ++.align 4 ++_vpaes_decrypt: ++L_vpaes_decrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ leal L_vpaes_consts+0x30-L019pic_point,%ebp ++ call __vpaes_preheat ++L019pic_point: ++ movl 20(%esp),%esi ++ leal -56(%esp),%ebx ++ movl 24(%esp),%edi ++ andl $-16,%ebx ++ movl 28(%esp),%edx ++ xchgl %esp,%ebx ++ movl %ebx,48(%esp) ++ movdqu (%esi),%xmm0 ++ call __vpaes_decrypt_core ++ movdqu %xmm0,(%edi) ++ movl 48(%esp),%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _vpaes_cbc_encrypt ++.align 4 ++_vpaes_cbc_encrypt: ++L_vpaes_cbc_encrypt_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl 32(%esp),%edx ++ subl $16,%eax ++ jc L020cbc_abort ++ leal -56(%esp),%ebx ++ movl 36(%esp),%ebp ++ andl $-16,%ebx ++ movl 40(%esp),%ecx ++ xchgl %esp,%ebx ++ movdqu (%ebp),%xmm1 ++ subl %esi,%edi ++ movl %ebx,48(%esp) ++ movl %edi,(%esp) ++ movl %edx,4(%esp) ++ movl %ebp,8(%esp) ++ movl %eax,%edi ++ leal L_vpaes_consts+0x30-L021pic_point,%ebp ++ call __vpaes_preheat ++L021pic_point: ++ cmpl $0,%ecx ++ je L022cbc_dec_loop ++ jmp L023cbc_enc_loop ++.align 4,0x90 ++L023cbc_enc_loop: ++ movdqu (%esi),%xmm0 ++ pxor %xmm1,%xmm0 ++ call __vpaes_encrypt_core ++ movl (%esp),%ebx ++ movl 4(%esp),%edx ++ movdqa %xmm0,%xmm1 ++ movdqu %xmm0,(%ebx,%esi,1) ++ leal 16(%esi),%esi ++ subl $16,%edi ++ jnc L023cbc_enc_loop ++ jmp L024cbc_done ++.align 4,0x90 ++L022cbc_dec_loop: ++ movdqu (%esi),%xmm0 ++ movdqa %xmm1,16(%esp) ++ movdqa %xmm0,32(%esp) ++ call __vpaes_decrypt_core ++ movl (%esp),%ebx ++ movl 4(%esp),%edx ++ pxor 16(%esp),%xmm0 ++ movdqa 32(%esp),%xmm1 ++ movdqu %xmm0,(%ebx,%esi,1) ++ leal 16(%esi),%esi ++ subl $16,%edi ++ jnc L022cbc_dec_loop ++L024cbc_done: ++ movl 8(%esp),%ebx ++ movl 48(%esp),%esp ++ movdqu %xmm1,(%ebx) ++L020cbc_abort: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret +diff --git a/crypto/bf/asm/bf-586-mac.S b/crypto/bf/asm/bf-586-mac.S +new file mode 100644 +index 0000000..bf02384 +--- /dev/null ++++ b/crypto/bf/asm/bf-586-mac.S +@@ -0,0 +1,890 @@ ++.file "bf-586.s" ++.text ++.globl _BF_encrypt ++.align 4 ++_BF_encrypt: ++L_BF_encrypt_begin: ++ ++ pushl %ebp ++ pushl %ebx ++ movl 12(%esp),%ebx ++ movl 16(%esp),%ebp ++ pushl %esi ++ pushl %edi ++ # Load the 2 words ++ movl (%ebx),%edi ++ movl 4(%ebx),%esi ++ xorl %eax,%eax ++ movl (%ebp),%ebx ++ xorl %ecx,%ecx ++ xorl %ebx,%edi ++ ++ # Round 0 ++ movl 4(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 1 ++ movl 8(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 2 ++ movl 12(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 3 ++ movl 16(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 4 ++ movl 20(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 5 ++ movl 24(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 6 ++ movl 28(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 7 ++ movl 32(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 8 ++ movl 36(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 9 ++ movl 40(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 10 ++ movl 44(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 11 ++ movl 48(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 12 ++ movl 52(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 13 ++ movl 56(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 14 ++ movl 60(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 15 ++ movl 64(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ # Load parameter 0 (16) enc=1 ++ movl 20(%esp),%eax ++ xorl %ebx,%edi ++ movl 68(%ebp),%edx ++ xorl %edx,%esi ++ movl %edi,4(%eax) ++ movl %esi,(%eax) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _BF_decrypt ++.align 4 ++_BF_decrypt: ++L_BF_decrypt_begin: ++ ++ pushl %ebp ++ pushl %ebx ++ movl 12(%esp),%ebx ++ movl 16(%esp),%ebp ++ pushl %esi ++ pushl %edi ++ # Load the 2 words ++ movl (%ebx),%edi ++ movl 4(%ebx),%esi ++ xorl %eax,%eax ++ movl 68(%ebp),%ebx ++ xorl %ecx,%ecx ++ xorl %ebx,%edi ++ ++ # Round 16 ++ movl 64(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 15 ++ movl 60(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 14 ++ movl 56(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 13 ++ movl 52(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 12 ++ movl 48(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 11 ++ movl 44(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 10 ++ movl 40(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 9 ++ movl 36(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 8 ++ movl 32(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 7 ++ movl 28(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 6 ++ movl 24(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 5 ++ movl 20(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 4 ++ movl 16(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 3 ++ movl 12(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%edi ++ ++ # Round 2 ++ movl 8(%ebp),%edx ++ movl %edi,%ebx ++ xorl %edx,%esi ++ shrl $16,%ebx ++ movl %edi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ xorl %eax,%eax ++ xorl %ebx,%esi ++ ++ # Round 1 ++ movl 4(%ebp),%edx ++ movl %esi,%ebx ++ xorl %edx,%edi ++ shrl $16,%ebx ++ movl %esi,%edx ++ movb %bh,%al ++ andl $255,%ebx ++ movb %dh,%cl ++ andl $255,%edx ++ movl 72(%ebp,%eax,4),%eax ++ movl 1096(%ebp,%ebx,4),%ebx ++ addl %eax,%ebx ++ movl 2120(%ebp,%ecx,4),%eax ++ xorl %eax,%ebx ++ movl 3144(%ebp,%edx,4),%edx ++ addl %edx,%ebx ++ # Load parameter 0 (1) enc=0 ++ movl 20(%esp),%eax ++ xorl %ebx,%edi ++ movl (%ebp),%edx ++ xorl %edx,%esi ++ movl %edi,4(%eax) ++ movl %esi,(%eax) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _BF_cbc_encrypt ++.align 4 ++_BF_cbc_encrypt: ++L_BF_cbc_encrypt_begin: ++ ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 28(%esp),%ebp ++ # getting iv ptr from parameter 4 ++ movl 36(%esp),%ebx ++ movl (%ebx),%esi ++ movl 4(%ebx),%edi ++ pushl %edi ++ pushl %esi ++ pushl %edi ++ pushl %esi ++ movl %esp,%ebx ++ movl 36(%esp),%esi ++ movl 40(%esp),%edi ++ # getting encrypt flag from parameter 5 ++ movl 56(%esp),%ecx ++ # get and push parameter 3 ++ movl 48(%esp),%eax ++ pushl %eax ++ pushl %ebx ++ cmpl $0,%ecx ++ jz L000decrypt ++ andl $4294967288,%ebp ++ movl 8(%esp),%eax ++ movl 12(%esp),%ebx ++ jz L001encrypt_finish ++L002encrypt_loop: ++ movl (%esi),%ecx ++ movl 4(%esi),%edx ++ xorl %ecx,%eax ++ xorl %edx,%ebx ++ bswap %eax ++ bswap %ebx ++ movl %eax,8(%esp) ++ movl %ebx,12(%esp) ++ call L_BF_encrypt_begin ++ movl 8(%esp),%eax ++ movl 12(%esp),%ebx ++ bswap %eax ++ bswap %ebx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ addl $8,%esi ++ addl $8,%edi ++ subl $8,%ebp ++ jnz L002encrypt_loop ++L001encrypt_finish: ++ movl 52(%esp),%ebp ++ andl $7,%ebp ++ jz L003finish ++ call L004PIC_point ++L004PIC_point: ++ popl %edx ++ leal L005cbc_enc_jmp_table-L004PIC_point(%edx),%ecx ++ movl (%ecx,%ebp,4),%ebp ++ addl %edx,%ebp ++ xorl %ecx,%ecx ++ xorl %edx,%edx ++ jmp *%ebp ++L006ej7: ++ movb 6(%esi),%dh ++ shll $8,%edx ++L007ej6: ++ movb 5(%esi),%dh ++L008ej5: ++ movb 4(%esi),%dl ++L009ej4: ++ movl (%esi),%ecx ++ jmp L010ejend ++L011ej3: ++ movb 2(%esi),%ch ++ shll $8,%ecx ++L012ej2: ++ movb 1(%esi),%ch ++L013ej1: ++ movb (%esi),%cl ++L010ejend: ++ xorl %ecx,%eax ++ xorl %edx,%ebx ++ bswap %eax ++ bswap %ebx ++ movl %eax,8(%esp) ++ movl %ebx,12(%esp) ++ call L_BF_encrypt_begin ++ movl 8(%esp),%eax ++ movl 12(%esp),%ebx ++ bswap %eax ++ bswap %ebx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ jmp L003finish ++L000decrypt: ++ andl $4294967288,%ebp ++ movl 16(%esp),%eax ++ movl 20(%esp),%ebx ++ jz L014decrypt_finish ++L015decrypt_loop: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ bswap %eax ++ bswap %ebx ++ movl %eax,8(%esp) ++ movl %ebx,12(%esp) ++ call L_BF_decrypt_begin ++ movl 8(%esp),%eax ++ movl 12(%esp),%ebx ++ bswap %eax ++ bswap %ebx ++ movl 16(%esp),%ecx ++ movl 20(%esp),%edx ++ xorl %eax,%ecx ++ xorl %ebx,%edx ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl %ecx,(%edi) ++ movl %edx,4(%edi) ++ movl %eax,16(%esp) ++ movl %ebx,20(%esp) ++ addl $8,%esi ++ addl $8,%edi ++ subl $8,%ebp ++ jnz L015decrypt_loop ++L014decrypt_finish: ++ movl 52(%esp),%ebp ++ andl $7,%ebp ++ jz L003finish ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ bswap %eax ++ bswap %ebx ++ movl %eax,8(%esp) ++ movl %ebx,12(%esp) ++ call L_BF_decrypt_begin ++ movl 8(%esp),%eax ++ movl 12(%esp),%ebx ++ bswap %eax ++ bswap %ebx ++ movl 16(%esp),%ecx ++ movl 20(%esp),%edx ++ xorl %eax,%ecx ++ xorl %ebx,%edx ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++L016dj7: ++ rorl $16,%edx ++ movb %dl,6(%edi) ++ shrl $16,%edx ++L017dj6: ++ movb %dh,5(%edi) ++L018dj5: ++ movb %dl,4(%edi) ++L019dj4: ++ movl %ecx,(%edi) ++ jmp L020djend ++L021dj3: ++ rorl $16,%ecx ++ movb %cl,2(%edi) ++ shll $16,%ecx ++L022dj2: ++ movb %ch,1(%esi) ++L023dj1: ++ movb %cl,(%esi) ++L020djend: ++ jmp L003finish ++L003finish: ++ movl 60(%esp),%ecx ++ addl $24,%esp ++ movl %eax,(%ecx) ++ movl %ebx,4(%ecx) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 6,0x90 ++L005cbc_enc_jmp_table: ++.long 0 ++.long L013ej1-L004PIC_point ++.long L012ej2-L004PIC_point ++.long L011ej3-L004PIC_point ++.long L009ej4-L004PIC_point ++.long L008ej5-L004PIC_point ++.long L007ej6-L004PIC_point ++.long L006ej7-L004PIC_point ++.align 6,0x90 +diff --git a/crypto/bn/asm/bn-586-mac.S b/crypto/bn/asm/bn-586-mac.S +new file mode 100644 +index 0000000..05a81aa +--- /dev/null ++++ b/crypto/bn/asm/bn-586-mac.S +@@ -0,0 +1,1370 @@ ++.file "crypto/bn/asm/bn-586.s" ++.text ++.globl _bn_mul_add_words ++.align 4 ++_bn_mul_add_words: ++L_bn_mul_add_words_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ ++ xorl %esi,%esi ++ movl 20(%esp),%edi ++ movl 28(%esp),%ecx ++ movl 24(%esp),%ebx ++ andl $4294967288,%ecx ++ movl 32(%esp),%ebp ++ pushl %ecx ++ jz L000maw_finish ++.align 4,0x90 ++L001maw_loop: ++ # Round 0 ++ movl (%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl (%edi),%eax ++ adcl $0,%edx ++ movl %eax,(%edi) ++ movl %edx,%esi ++ # Round 4 ++ movl 4(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 4(%edi),%eax ++ adcl $0,%edx ++ movl %eax,4(%edi) ++ movl %edx,%esi ++ # Round 8 ++ movl 8(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 8(%edi),%eax ++ adcl $0,%edx ++ movl %eax,8(%edi) ++ movl %edx,%esi ++ # Round 12 ++ movl 12(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 12(%edi),%eax ++ adcl $0,%edx ++ movl %eax,12(%edi) ++ movl %edx,%esi ++ # Round 16 ++ movl 16(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 16(%edi),%eax ++ adcl $0,%edx ++ movl %eax,16(%edi) ++ movl %edx,%esi ++ # Round 20 ++ movl 20(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 20(%edi),%eax ++ adcl $0,%edx ++ movl %eax,20(%edi) ++ movl %edx,%esi ++ # Round 24 ++ movl 24(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 24(%edi),%eax ++ adcl $0,%edx ++ movl %eax,24(%edi) ++ movl %edx,%esi ++ # Round 28 ++ movl 28(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 28(%edi),%eax ++ adcl $0,%edx ++ movl %eax,28(%edi) ++ movl %edx,%esi ++ ++ subl $8,%ecx ++ leal 32(%ebx),%ebx ++ leal 32(%edi),%edi ++ jnz L001maw_loop ++L000maw_finish: ++ movl 32(%esp),%ecx ++ andl $7,%ecx ++ jnz L002maw_finish2 ++ jmp L003maw_end ++L002maw_finish2: ++ # Tail Round 0 ++ movl (%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl (%edi),%eax ++ adcl $0,%edx ++ decl %ecx ++ movl %eax,(%edi) ++ movl %edx,%esi ++ jz L003maw_end ++ # Tail Round 1 ++ movl 4(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 4(%edi),%eax ++ adcl $0,%edx ++ decl %ecx ++ movl %eax,4(%edi) ++ movl %edx,%esi ++ jz L003maw_end ++ # Tail Round 2 ++ movl 8(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 8(%edi),%eax ++ adcl $0,%edx ++ decl %ecx ++ movl %eax,8(%edi) ++ movl %edx,%esi ++ jz L003maw_end ++ # Tail Round 3 ++ movl 12(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 12(%edi),%eax ++ adcl $0,%edx ++ decl %ecx ++ movl %eax,12(%edi) ++ movl %edx,%esi ++ jz L003maw_end ++ # Tail Round 4 ++ movl 16(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 16(%edi),%eax ++ adcl $0,%edx ++ decl %ecx ++ movl %eax,16(%edi) ++ movl %edx,%esi ++ jz L003maw_end ++ # Tail Round 5 ++ movl 20(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 20(%edi),%eax ++ adcl $0,%edx ++ decl %ecx ++ movl %eax,20(%edi) ++ movl %edx,%esi ++ jz L003maw_end ++ # Tail Round 6 ++ movl 24(%ebx),%eax ++ mull %ebp ++ addl %esi,%eax ++ adcl $0,%edx ++ addl 24(%edi),%eax ++ adcl $0,%edx ++ movl %eax,24(%edi) ++ movl %edx,%esi ++L003maw_end: ++ movl %esi,%eax ++ popl %ecx ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _bn_mul_words ++.align 4 ++_bn_mul_words: ++L_bn_mul_words_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ ++ xorl %esi,%esi ++ movl 20(%esp),%edi ++ movl 24(%esp),%ebx ++ movl 28(%esp),%ebp ++ movl 32(%esp),%ecx ++ andl $4294967288,%ebp ++ jz L004mw_finish ++L005mw_loop: ++ # Round 0 ++ movl (%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,(%edi) ++ movl %edx,%esi ++ # Round 4 ++ movl 4(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,4(%edi) ++ movl %edx,%esi ++ # Round 8 ++ movl 8(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,8(%edi) ++ movl %edx,%esi ++ # Round 12 ++ movl 12(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,12(%edi) ++ movl %edx,%esi ++ # Round 16 ++ movl 16(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,16(%edi) ++ movl %edx,%esi ++ # Round 20 ++ movl 20(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,20(%edi) ++ movl %edx,%esi ++ # Round 24 ++ movl 24(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,24(%edi) ++ movl %edx,%esi ++ # Round 28 ++ movl 28(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,28(%edi) ++ movl %edx,%esi ++ ++ addl $32,%ebx ++ addl $32,%edi ++ subl $8,%ebp ++ jz L004mw_finish ++ jmp L005mw_loop ++L004mw_finish: ++ movl 28(%esp),%ebp ++ andl $7,%ebp ++ jnz L006mw_finish2 ++ jmp L007mw_end ++L006mw_finish2: ++ # Tail Round 0 ++ movl (%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,(%edi) ++ movl %edx,%esi ++ decl %ebp ++ jz L007mw_end ++ # Tail Round 1 ++ movl 4(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,4(%edi) ++ movl %edx,%esi ++ decl %ebp ++ jz L007mw_end ++ # Tail Round 2 ++ movl 8(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,8(%edi) ++ movl %edx,%esi ++ decl %ebp ++ jz L007mw_end ++ # Tail Round 3 ++ movl 12(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,12(%edi) ++ movl %edx,%esi ++ decl %ebp ++ jz L007mw_end ++ # Tail Round 4 ++ movl 16(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,16(%edi) ++ movl %edx,%esi ++ decl %ebp ++ jz L007mw_end ++ # Tail Round 5 ++ movl 20(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,20(%edi) ++ movl %edx,%esi ++ decl %ebp ++ jz L007mw_end ++ # Tail Round 6 ++ movl 24(%ebx),%eax ++ mull %ecx ++ addl %esi,%eax ++ adcl $0,%edx ++ movl %eax,24(%edi) ++ movl %edx,%esi ++L007mw_end: ++ movl %esi,%eax ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _bn_sqr_words ++.align 4 ++_bn_sqr_words: ++L_bn_sqr_words_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%ebx ++ andl $4294967288,%ebx ++ jz L008sw_finish ++L009sw_loop: ++ # Round 0 ++ movl (%edi),%eax ++ mull %eax ++ movl %eax,(%esi) ++ movl %edx,4(%esi) ++ # Round 4 ++ movl 4(%edi),%eax ++ mull %eax ++ movl %eax,8(%esi) ++ movl %edx,12(%esi) ++ # Round 8 ++ movl 8(%edi),%eax ++ mull %eax ++ movl %eax,16(%esi) ++ movl %edx,20(%esi) ++ # Round 12 ++ movl 12(%edi),%eax ++ mull %eax ++ movl %eax,24(%esi) ++ movl %edx,28(%esi) ++ # Round 16 ++ movl 16(%edi),%eax ++ mull %eax ++ movl %eax,32(%esi) ++ movl %edx,36(%esi) ++ # Round 20 ++ movl 20(%edi),%eax ++ mull %eax ++ movl %eax,40(%esi) ++ movl %edx,44(%esi) ++ # Round 24 ++ movl 24(%edi),%eax ++ mull %eax ++ movl %eax,48(%esi) ++ movl %edx,52(%esi) ++ # Round 28 ++ movl 28(%edi),%eax ++ mull %eax ++ movl %eax,56(%esi) ++ movl %edx,60(%esi) ++ ++ addl $32,%edi ++ addl $64,%esi ++ subl $8,%ebx ++ jnz L009sw_loop ++L008sw_finish: ++ movl 28(%esp),%ebx ++ andl $7,%ebx ++ jz L010sw_end ++ # Tail Round 0 ++ movl (%edi),%eax ++ mull %eax ++ movl %eax,(%esi) ++ decl %ebx ++ movl %edx,4(%esi) ++ jz L010sw_end ++ # Tail Round 1 ++ movl 4(%edi),%eax ++ mull %eax ++ movl %eax,8(%esi) ++ decl %ebx ++ movl %edx,12(%esi) ++ jz L010sw_end ++ # Tail Round 2 ++ movl 8(%edi),%eax ++ mull %eax ++ movl %eax,16(%esi) ++ decl %ebx ++ movl %edx,20(%esi) ++ jz L010sw_end ++ # Tail Round 3 ++ movl 12(%edi),%eax ++ mull %eax ++ movl %eax,24(%esi) ++ decl %ebx ++ movl %edx,28(%esi) ++ jz L010sw_end ++ # Tail Round 4 ++ movl 16(%edi),%eax ++ mull %eax ++ movl %eax,32(%esi) ++ decl %ebx ++ movl %edx,36(%esi) ++ jz L010sw_end ++ # Tail Round 5 ++ movl 20(%edi),%eax ++ mull %eax ++ movl %eax,40(%esi) ++ decl %ebx ++ movl %edx,44(%esi) ++ jz L010sw_end ++ # Tail Round 6 ++ movl 24(%edi),%eax ++ mull %eax ++ movl %eax,48(%esi) ++ movl %edx,52(%esi) ++L010sw_end: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _bn_div_words ++.align 4 ++_bn_div_words: ++L_bn_div_words_begin: ++ movl 4(%esp),%edx ++ movl 8(%esp),%eax ++ movl 12(%esp),%ecx ++ divl %ecx ++ ret ++.globl _bn_add_words ++.align 4 ++_bn_add_words: ++L_bn_add_words_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ ++ movl 20(%esp),%ebx ++ movl 24(%esp),%esi ++ movl 28(%esp),%edi ++ movl 32(%esp),%ebp ++ xorl %eax,%eax ++ andl $4294967288,%ebp ++ jz L011aw_finish ++L012aw_loop: ++ # Round 0 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ # Round 1 ++ movl 4(%esi),%ecx ++ movl 4(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,4(%ebx) ++ # Round 2 ++ movl 8(%esi),%ecx ++ movl 8(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,8(%ebx) ++ # Round 3 ++ movl 12(%esi),%ecx ++ movl 12(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,12(%ebx) ++ # Round 4 ++ movl 16(%esi),%ecx ++ movl 16(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,16(%ebx) ++ # Round 5 ++ movl 20(%esi),%ecx ++ movl 20(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,20(%ebx) ++ # Round 6 ++ movl 24(%esi),%ecx ++ movl 24(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,24(%ebx) ++ # Round 7 ++ movl 28(%esi),%ecx ++ movl 28(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,28(%ebx) ++ ++ addl $32,%esi ++ addl $32,%edi ++ addl $32,%ebx ++ subl $8,%ebp ++ jnz L012aw_loop ++L011aw_finish: ++ movl 32(%esp),%ebp ++ andl $7,%ebp ++ jz L013aw_end ++ # Tail Round 0 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,(%ebx) ++ jz L013aw_end ++ # Tail Round 1 ++ movl 4(%esi),%ecx ++ movl 4(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,4(%ebx) ++ jz L013aw_end ++ # Tail Round 2 ++ movl 8(%esi),%ecx ++ movl 8(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,8(%ebx) ++ jz L013aw_end ++ # Tail Round 3 ++ movl 12(%esi),%ecx ++ movl 12(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,12(%ebx) ++ jz L013aw_end ++ # Tail Round 4 ++ movl 16(%esi),%ecx ++ movl 16(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,16(%ebx) ++ jz L013aw_end ++ # Tail Round 5 ++ movl 20(%esi),%ecx ++ movl 20(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,20(%ebx) ++ jz L013aw_end ++ # Tail Round 6 ++ movl 24(%esi),%ecx ++ movl 24(%edi),%edx ++ addl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ addl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,24(%ebx) ++L013aw_end: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _bn_sub_words ++.align 4 ++_bn_sub_words: ++L_bn_sub_words_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ ++ movl 20(%esp),%ebx ++ movl 24(%esp),%esi ++ movl 28(%esp),%edi ++ movl 32(%esp),%ebp ++ xorl %eax,%eax ++ andl $4294967288,%ebp ++ jz L014aw_finish ++L015aw_loop: ++ # Round 0 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ # Round 1 ++ movl 4(%esi),%ecx ++ movl 4(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,4(%ebx) ++ # Round 2 ++ movl 8(%esi),%ecx ++ movl 8(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,8(%ebx) ++ # Round 3 ++ movl 12(%esi),%ecx ++ movl 12(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,12(%ebx) ++ # Round 4 ++ movl 16(%esi),%ecx ++ movl 16(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,16(%ebx) ++ # Round 5 ++ movl 20(%esi),%ecx ++ movl 20(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,20(%ebx) ++ # Round 6 ++ movl 24(%esi),%ecx ++ movl 24(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,24(%ebx) ++ # Round 7 ++ movl 28(%esi),%ecx ++ movl 28(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,28(%ebx) ++ ++ addl $32,%esi ++ addl $32,%edi ++ addl $32,%ebx ++ subl $8,%ebp ++ jnz L015aw_loop ++L014aw_finish: ++ movl 32(%esp),%ebp ++ andl $7,%ebp ++ jz L016aw_end ++ # Tail Round 0 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,(%ebx) ++ jz L016aw_end ++ # Tail Round 1 ++ movl 4(%esi),%ecx ++ movl 4(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,4(%ebx) ++ jz L016aw_end ++ # Tail Round 2 ++ movl 8(%esi),%ecx ++ movl 8(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,8(%ebx) ++ jz L016aw_end ++ # Tail Round 3 ++ movl 12(%esi),%ecx ++ movl 12(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,12(%ebx) ++ jz L016aw_end ++ # Tail Round 4 ++ movl 16(%esi),%ecx ++ movl 16(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,16(%ebx) ++ jz L016aw_end ++ # Tail Round 5 ++ movl 20(%esi),%ecx ++ movl 20(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,20(%ebx) ++ jz L016aw_end ++ # Tail Round 6 ++ movl 24(%esi),%ecx ++ movl 24(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,24(%ebx) ++L016aw_end: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _bn_sub_part_words ++.align 4 ++_bn_sub_part_words: ++L_bn_sub_part_words_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ ++ movl 20(%esp),%ebx ++ movl 24(%esp),%esi ++ movl 28(%esp),%edi ++ movl 32(%esp),%ebp ++ xorl %eax,%eax ++ andl $4294967288,%ebp ++ jz L017aw_finish ++L018aw_loop: ++ # Round 0 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ # Round 1 ++ movl 4(%esi),%ecx ++ movl 4(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,4(%ebx) ++ # Round 2 ++ movl 8(%esi),%ecx ++ movl 8(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,8(%ebx) ++ # Round 3 ++ movl 12(%esi),%ecx ++ movl 12(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,12(%ebx) ++ # Round 4 ++ movl 16(%esi),%ecx ++ movl 16(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,16(%ebx) ++ # Round 5 ++ movl 20(%esi),%ecx ++ movl 20(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,20(%ebx) ++ # Round 6 ++ movl 24(%esi),%ecx ++ movl 24(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,24(%ebx) ++ # Round 7 ++ movl 28(%esi),%ecx ++ movl 28(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,28(%ebx) ++ ++ addl $32,%esi ++ addl $32,%edi ++ addl $32,%ebx ++ subl $8,%ebp ++ jnz L018aw_loop ++L017aw_finish: ++ movl 32(%esp),%ebp ++ andl $7,%ebp ++ jz L019aw_end ++ # Tail Round 0 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ addl $4,%esi ++ addl $4,%edi ++ addl $4,%ebx ++ decl %ebp ++ jz L019aw_end ++ # Tail Round 1 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ addl $4,%esi ++ addl $4,%edi ++ addl $4,%ebx ++ decl %ebp ++ jz L019aw_end ++ # Tail Round 2 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ addl $4,%esi ++ addl $4,%edi ++ addl $4,%ebx ++ decl %ebp ++ jz L019aw_end ++ # Tail Round 3 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ addl $4,%esi ++ addl $4,%edi ++ addl $4,%ebx ++ decl %ebp ++ jz L019aw_end ++ # Tail Round 4 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ addl $4,%esi ++ addl $4,%edi ++ addl $4,%ebx ++ decl %ebp ++ jz L019aw_end ++ # Tail Round 5 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ addl $4,%esi ++ addl $4,%edi ++ addl $4,%ebx ++ decl %ebp ++ jz L019aw_end ++ # Tail Round 6 ++ movl (%esi),%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ addl $4,%esi ++ addl $4,%edi ++ addl $4,%ebx ++L019aw_end: ++ cmpl $0,36(%esp) ++ je L020pw_end ++ movl 36(%esp),%ebp ++ cmpl $0,%ebp ++ je L020pw_end ++ jge L021pw_pos ++ # pw_neg ++ movl $0,%edx ++ subl %ebp,%edx ++ movl %edx,%ebp ++ andl $4294967288,%ebp ++ jz L022pw_neg_finish ++L023pw_neg_loop: ++ # dl<0 Round 0 ++ movl $0,%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,(%ebx) ++ # dl<0 Round 1 ++ movl $0,%ecx ++ movl 4(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,4(%ebx) ++ # dl<0 Round 2 ++ movl $0,%ecx ++ movl 8(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,8(%ebx) ++ # dl<0 Round 3 ++ movl $0,%ecx ++ movl 12(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,12(%ebx) ++ # dl<0 Round 4 ++ movl $0,%ecx ++ movl 16(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,16(%ebx) ++ # dl<0 Round 5 ++ movl $0,%ecx ++ movl 20(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,20(%ebx) ++ # dl<0 Round 6 ++ movl $0,%ecx ++ movl 24(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,24(%ebx) ++ # dl<0 Round 7 ++ movl $0,%ecx ++ movl 28(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,28(%ebx) ++ ++ addl $32,%edi ++ addl $32,%ebx ++ subl $8,%ebp ++ jnz L023pw_neg_loop ++L022pw_neg_finish: ++ movl 36(%esp),%edx ++ movl $0,%ebp ++ subl %edx,%ebp ++ andl $7,%ebp ++ jz L020pw_end ++ # dl<0 Tail Round 0 ++ movl $0,%ecx ++ movl (%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,(%ebx) ++ jz L020pw_end ++ # dl<0 Tail Round 1 ++ movl $0,%ecx ++ movl 4(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,4(%ebx) ++ jz L020pw_end ++ # dl<0 Tail Round 2 ++ movl $0,%ecx ++ movl 8(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,8(%ebx) ++ jz L020pw_end ++ # dl<0 Tail Round 3 ++ movl $0,%ecx ++ movl 12(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,12(%ebx) ++ jz L020pw_end ++ # dl<0 Tail Round 4 ++ movl $0,%ecx ++ movl 16(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,16(%ebx) ++ jz L020pw_end ++ # dl<0 Tail Round 5 ++ movl $0,%ecx ++ movl 20(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ decl %ebp ++ movl %ecx,20(%ebx) ++ jz L020pw_end ++ # dl<0 Tail Round 6 ++ movl $0,%ecx ++ movl 24(%edi),%edx ++ subl %eax,%ecx ++ movl $0,%eax ++ adcl %eax,%eax ++ subl %edx,%ecx ++ adcl $0,%eax ++ movl %ecx,24(%ebx) ++ jmp L020pw_end ++L021pw_pos: ++ andl $4294967288,%ebp ++ jz L024pw_pos_finish ++L025pw_pos_loop: ++ # dl>0 Round 0 ++ movl (%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,(%ebx) ++ jnc L026pw_nc0 ++ # dl>0 Round 1 ++ movl 4(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,4(%ebx) ++ jnc L027pw_nc1 ++ # dl>0 Round 2 ++ movl 8(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,8(%ebx) ++ jnc L028pw_nc2 ++ # dl>0 Round 3 ++ movl 12(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,12(%ebx) ++ jnc L029pw_nc3 ++ # dl>0 Round 4 ++ movl 16(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,16(%ebx) ++ jnc L030pw_nc4 ++ # dl>0 Round 5 ++ movl 20(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,20(%ebx) ++ jnc L031pw_nc5 ++ # dl>0 Round 6 ++ movl 24(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,24(%ebx) ++ jnc L032pw_nc6 ++ # dl>0 Round 7 ++ movl 28(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,28(%ebx) ++ jnc L033pw_nc7 ++ ++ addl $32,%esi ++ addl $32,%ebx ++ subl $8,%ebp ++ jnz L025pw_pos_loop ++L024pw_pos_finish: ++ movl 36(%esp),%ebp ++ andl $7,%ebp ++ jz L020pw_end ++ # dl>0 Tail Round 0 ++ movl (%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,(%ebx) ++ jnc L034pw_tail_nc0 ++ decl %ebp ++ jz L020pw_end ++ # dl>0 Tail Round 1 ++ movl 4(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,4(%ebx) ++ jnc L035pw_tail_nc1 ++ decl %ebp ++ jz L020pw_end ++ # dl>0 Tail Round 2 ++ movl 8(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,8(%ebx) ++ jnc L036pw_tail_nc2 ++ decl %ebp ++ jz L020pw_end ++ # dl>0 Tail Round 3 ++ movl 12(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,12(%ebx) ++ jnc L037pw_tail_nc3 ++ decl %ebp ++ jz L020pw_end ++ # dl>0 Tail Round 4 ++ movl 16(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,16(%ebx) ++ jnc L038pw_tail_nc4 ++ decl %ebp ++ jz L020pw_end ++ # dl>0 Tail Round 5 ++ movl 20(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,20(%ebx) ++ jnc L039pw_tail_nc5 ++ decl %ebp ++ jz L020pw_end ++ # dl>0 Tail Round 6 ++ movl 24(%esi),%ecx ++ subl %eax,%ecx ++ movl %ecx,24(%ebx) ++ jnc L040pw_tail_nc6 ++ movl $1,%eax ++ jmp L020pw_end ++L041pw_nc_loop: ++ movl (%esi),%ecx ++ movl %ecx,(%ebx) ++L026pw_nc0: ++ movl 4(%esi),%ecx ++ movl %ecx,4(%ebx) ++L027pw_nc1: ++ movl 8(%esi),%ecx ++ movl %ecx,8(%ebx) ++L028pw_nc2: ++ movl 12(%esi),%ecx ++ movl %ecx,12(%ebx) ++L029pw_nc3: ++ movl 16(%esi),%ecx ++ movl %ecx,16(%ebx) ++L030pw_nc4: ++ movl 20(%esi),%ecx ++ movl %ecx,20(%ebx) ++L031pw_nc5: ++ movl 24(%esi),%ecx ++ movl %ecx,24(%ebx) ++L032pw_nc6: ++ movl 28(%esi),%ecx ++ movl %ecx,28(%ebx) ++L033pw_nc7: ++ ++ addl $32,%esi ++ addl $32,%ebx ++ subl $8,%ebp ++ jnz L041pw_nc_loop ++ movl 36(%esp),%ebp ++ andl $7,%ebp ++ jz L042pw_nc_end ++ movl (%esi),%ecx ++ movl %ecx,(%ebx) ++L034pw_tail_nc0: ++ decl %ebp ++ jz L042pw_nc_end ++ movl 4(%esi),%ecx ++ movl %ecx,4(%ebx) ++L035pw_tail_nc1: ++ decl %ebp ++ jz L042pw_nc_end ++ movl 8(%esi),%ecx ++ movl %ecx,8(%ebx) ++L036pw_tail_nc2: ++ decl %ebp ++ jz L042pw_nc_end ++ movl 12(%esi),%ecx ++ movl %ecx,12(%ebx) ++L037pw_tail_nc3: ++ decl %ebp ++ jz L042pw_nc_end ++ movl 16(%esi),%ecx ++ movl %ecx,16(%ebx) ++L038pw_tail_nc4: ++ decl %ebp ++ jz L042pw_nc_end ++ movl 20(%esi),%ecx ++ movl %ecx,20(%ebx) ++L039pw_tail_nc5: ++ decl %ebp ++ jz L042pw_nc_end ++ movl 24(%esi),%ecx ++ movl %ecx,24(%ebx) ++L040pw_tail_nc6: ++L042pw_nc_end: ++ movl $0,%eax ++L020pw_end: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret +diff --git a/crypto/bn/asm/co-586-mac.S b/crypto/bn/asm/co-586-mac.S +new file mode 100644 +index 0000000..d82fdcb +--- /dev/null ++++ b/crypto/bn/asm/co-586-mac.S +@@ -0,0 +1,1246 @@ ++.file "crypto/bn/asm/co-586.s" ++.text ++.globl _bn_mul_comba8 ++.align 4 ++_bn_mul_comba8: ++L_bn_mul_comba8_begin: ++ pushl %esi ++ movl 12(%esp),%esi ++ pushl %edi ++ movl 20(%esp),%edi ++ pushl %ebp ++ pushl %ebx ++ xorl %ebx,%ebx ++ movl (%esi),%eax ++ xorl %ecx,%ecx ++ movl (%edi),%edx ++ # ################## Calculate word 0 ++ xorl %ebp,%ebp ++ # mul a[0]*b[0] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esp),%eax ++ adcl %edx,%ecx ++ movl (%edi),%edx ++ adcl $0,%ebp ++ movl %ebx,(%eax) ++ movl 4(%esi),%eax ++ # saved r[0] ++ # ################## Calculate word 1 ++ xorl %ebx,%ebx ++ # mul a[1]*b[0] ++ mull %edx ++ addl %eax,%ecx ++ movl (%esi),%eax ++ adcl %edx,%ebp ++ movl 4(%edi),%edx ++ adcl $0,%ebx ++ # mul a[0]*b[1] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esp),%eax ++ adcl %edx,%ebp ++ movl (%edi),%edx ++ adcl $0,%ebx ++ movl %ecx,4(%eax) ++ movl 8(%esi),%eax ++ # saved r[1] ++ # ################## Calculate word 2 ++ xorl %ecx,%ecx ++ # mul a[2]*b[0] ++ mull %edx ++ addl %eax,%ebp ++ movl 4(%esi),%eax ++ adcl %edx,%ebx ++ movl 4(%edi),%edx ++ adcl $0,%ecx ++ # mul a[1]*b[1] ++ mull %edx ++ addl %eax,%ebp ++ movl (%esi),%eax ++ adcl %edx,%ebx ++ movl 8(%edi),%edx ++ adcl $0,%ecx ++ # mul a[0]*b[2] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esp),%eax ++ adcl %edx,%ebx ++ movl (%edi),%edx ++ adcl $0,%ecx ++ movl %ebp,8(%eax) ++ movl 12(%esi),%eax ++ # saved r[2] ++ # ################## Calculate word 3 ++ xorl %ebp,%ebp ++ # mul a[3]*b[0] ++ mull %edx ++ addl %eax,%ebx ++ movl 8(%esi),%eax ++ adcl %edx,%ecx ++ movl 4(%edi),%edx ++ adcl $0,%ebp ++ # mul a[2]*b[1] ++ mull %edx ++ addl %eax,%ebx ++ movl 4(%esi),%eax ++ adcl %edx,%ecx ++ movl 8(%edi),%edx ++ adcl $0,%ebp ++ # mul a[1]*b[2] ++ mull %edx ++ addl %eax,%ebx ++ movl (%esi),%eax ++ adcl %edx,%ecx ++ movl 12(%edi),%edx ++ adcl $0,%ebp ++ # mul a[0]*b[3] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esp),%eax ++ adcl %edx,%ecx ++ movl (%edi),%edx ++ adcl $0,%ebp ++ movl %ebx,12(%eax) ++ movl 16(%esi),%eax ++ # saved r[3] ++ # ################## Calculate word 4 ++ xorl %ebx,%ebx ++ # mul a[4]*b[0] ++ mull %edx ++ addl %eax,%ecx ++ movl 12(%esi),%eax ++ adcl %edx,%ebp ++ movl 4(%edi),%edx ++ adcl $0,%ebx ++ # mul a[3]*b[1] ++ mull %edx ++ addl %eax,%ecx ++ movl 8(%esi),%eax ++ adcl %edx,%ebp ++ movl 8(%edi),%edx ++ adcl $0,%ebx ++ # mul a[2]*b[2] ++ mull %edx ++ addl %eax,%ecx ++ movl 4(%esi),%eax ++ adcl %edx,%ebp ++ movl 12(%edi),%edx ++ adcl $0,%ebx ++ # mul a[1]*b[3] ++ mull %edx ++ addl %eax,%ecx ++ movl (%esi),%eax ++ adcl %edx,%ebp ++ movl 16(%edi),%edx ++ adcl $0,%ebx ++ # mul a[0]*b[4] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esp),%eax ++ adcl %edx,%ebp ++ movl (%edi),%edx ++ adcl $0,%ebx ++ movl %ecx,16(%eax) ++ movl 20(%esi),%eax ++ # saved r[4] ++ # ################## Calculate word 5 ++ xorl %ecx,%ecx ++ # mul a[5]*b[0] ++ mull %edx ++ addl %eax,%ebp ++ movl 16(%esi),%eax ++ adcl %edx,%ebx ++ movl 4(%edi),%edx ++ adcl $0,%ecx ++ # mul a[4]*b[1] ++ mull %edx ++ addl %eax,%ebp ++ movl 12(%esi),%eax ++ adcl %edx,%ebx ++ movl 8(%edi),%edx ++ adcl $0,%ecx ++ # mul a[3]*b[2] ++ mull %edx ++ addl %eax,%ebp ++ movl 8(%esi),%eax ++ adcl %edx,%ebx ++ movl 12(%edi),%edx ++ adcl $0,%ecx ++ # mul a[2]*b[3] ++ mull %edx ++ addl %eax,%ebp ++ movl 4(%esi),%eax ++ adcl %edx,%ebx ++ movl 16(%edi),%edx ++ adcl $0,%ecx ++ # mul a[1]*b[4] ++ mull %edx ++ addl %eax,%ebp ++ movl (%esi),%eax ++ adcl %edx,%ebx ++ movl 20(%edi),%edx ++ adcl $0,%ecx ++ # mul a[0]*b[5] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esp),%eax ++ adcl %edx,%ebx ++ movl (%edi),%edx ++ adcl $0,%ecx ++ movl %ebp,20(%eax) ++ movl 24(%esi),%eax ++ # saved r[5] ++ # ################## Calculate word 6 ++ xorl %ebp,%ebp ++ # mul a[6]*b[0] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esi),%eax ++ adcl %edx,%ecx ++ movl 4(%edi),%edx ++ adcl $0,%ebp ++ # mul a[5]*b[1] ++ mull %edx ++ addl %eax,%ebx ++ movl 16(%esi),%eax ++ adcl %edx,%ecx ++ movl 8(%edi),%edx ++ adcl $0,%ebp ++ # mul a[4]*b[2] ++ mull %edx ++ addl %eax,%ebx ++ movl 12(%esi),%eax ++ adcl %edx,%ecx ++ movl 12(%edi),%edx ++ adcl $0,%ebp ++ # mul a[3]*b[3] ++ mull %edx ++ addl %eax,%ebx ++ movl 8(%esi),%eax ++ adcl %edx,%ecx ++ movl 16(%edi),%edx ++ adcl $0,%ebp ++ # mul a[2]*b[4] ++ mull %edx ++ addl %eax,%ebx ++ movl 4(%esi),%eax ++ adcl %edx,%ecx ++ movl 20(%edi),%edx ++ adcl $0,%ebp ++ # mul a[1]*b[5] ++ mull %edx ++ addl %eax,%ebx ++ movl (%esi),%eax ++ adcl %edx,%ecx ++ movl 24(%edi),%edx ++ adcl $0,%ebp ++ # mul a[0]*b[6] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esp),%eax ++ adcl %edx,%ecx ++ movl (%edi),%edx ++ adcl $0,%ebp ++ movl %ebx,24(%eax) ++ movl 28(%esi),%eax ++ # saved r[6] ++ # ################## Calculate word 7 ++ xorl %ebx,%ebx ++ # mul a[7]*b[0] ++ mull %edx ++ addl %eax,%ecx ++ movl 24(%esi),%eax ++ adcl %edx,%ebp ++ movl 4(%edi),%edx ++ adcl $0,%ebx ++ # mul a[6]*b[1] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esi),%eax ++ adcl %edx,%ebp ++ movl 8(%edi),%edx ++ adcl $0,%ebx ++ # mul a[5]*b[2] ++ mull %edx ++ addl %eax,%ecx ++ movl 16(%esi),%eax ++ adcl %edx,%ebp ++ movl 12(%edi),%edx ++ adcl $0,%ebx ++ # mul a[4]*b[3] ++ mull %edx ++ addl %eax,%ecx ++ movl 12(%esi),%eax ++ adcl %edx,%ebp ++ movl 16(%edi),%edx ++ adcl $0,%ebx ++ # mul a[3]*b[4] ++ mull %edx ++ addl %eax,%ecx ++ movl 8(%esi),%eax ++ adcl %edx,%ebp ++ movl 20(%edi),%edx ++ adcl $0,%ebx ++ # mul a[2]*b[5] ++ mull %edx ++ addl %eax,%ecx ++ movl 4(%esi),%eax ++ adcl %edx,%ebp ++ movl 24(%edi),%edx ++ adcl $0,%ebx ++ # mul a[1]*b[6] ++ mull %edx ++ addl %eax,%ecx ++ movl (%esi),%eax ++ adcl %edx,%ebp ++ movl 28(%edi),%edx ++ adcl $0,%ebx ++ # mul a[0]*b[7] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esp),%eax ++ adcl %edx,%ebp ++ movl 4(%edi),%edx ++ adcl $0,%ebx ++ movl %ecx,28(%eax) ++ movl 28(%esi),%eax ++ # saved r[7] ++ # ################## Calculate word 8 ++ xorl %ecx,%ecx ++ # mul a[7]*b[1] ++ mull %edx ++ addl %eax,%ebp ++ movl 24(%esi),%eax ++ adcl %edx,%ebx ++ movl 8(%edi),%edx ++ adcl $0,%ecx ++ # mul a[6]*b[2] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esi),%eax ++ adcl %edx,%ebx ++ movl 12(%edi),%edx ++ adcl $0,%ecx ++ # mul a[5]*b[3] ++ mull %edx ++ addl %eax,%ebp ++ movl 16(%esi),%eax ++ adcl %edx,%ebx ++ movl 16(%edi),%edx ++ adcl $0,%ecx ++ # mul a[4]*b[4] ++ mull %edx ++ addl %eax,%ebp ++ movl 12(%esi),%eax ++ adcl %edx,%ebx ++ movl 20(%edi),%edx ++ adcl $0,%ecx ++ # mul a[3]*b[5] ++ mull %edx ++ addl %eax,%ebp ++ movl 8(%esi),%eax ++ adcl %edx,%ebx ++ movl 24(%edi),%edx ++ adcl $0,%ecx ++ # mul a[2]*b[6] ++ mull %edx ++ addl %eax,%ebp ++ movl 4(%esi),%eax ++ adcl %edx,%ebx ++ movl 28(%edi),%edx ++ adcl $0,%ecx ++ # mul a[1]*b[7] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esp),%eax ++ adcl %edx,%ebx ++ movl 8(%edi),%edx ++ adcl $0,%ecx ++ movl %ebp,32(%eax) ++ movl 28(%esi),%eax ++ # saved r[8] ++ # ################## Calculate word 9 ++ xorl %ebp,%ebp ++ # mul a[7]*b[2] ++ mull %edx ++ addl %eax,%ebx ++ movl 24(%esi),%eax ++ adcl %edx,%ecx ++ movl 12(%edi),%edx ++ adcl $0,%ebp ++ # mul a[6]*b[3] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esi),%eax ++ adcl %edx,%ecx ++ movl 16(%edi),%edx ++ adcl $0,%ebp ++ # mul a[5]*b[4] ++ mull %edx ++ addl %eax,%ebx ++ movl 16(%esi),%eax ++ adcl %edx,%ecx ++ movl 20(%edi),%edx ++ adcl $0,%ebp ++ # mul a[4]*b[5] ++ mull %edx ++ addl %eax,%ebx ++ movl 12(%esi),%eax ++ adcl %edx,%ecx ++ movl 24(%edi),%edx ++ adcl $0,%ebp ++ # mul a[3]*b[6] ++ mull %edx ++ addl %eax,%ebx ++ movl 8(%esi),%eax ++ adcl %edx,%ecx ++ movl 28(%edi),%edx ++ adcl $0,%ebp ++ # mul a[2]*b[7] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esp),%eax ++ adcl %edx,%ecx ++ movl 12(%edi),%edx ++ adcl $0,%ebp ++ movl %ebx,36(%eax) ++ movl 28(%esi),%eax ++ # saved r[9] ++ # ################## Calculate word 10 ++ xorl %ebx,%ebx ++ # mul a[7]*b[3] ++ mull %edx ++ addl %eax,%ecx ++ movl 24(%esi),%eax ++ adcl %edx,%ebp ++ movl 16(%edi),%edx ++ adcl $0,%ebx ++ # mul a[6]*b[4] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esi),%eax ++ adcl %edx,%ebp ++ movl 20(%edi),%edx ++ adcl $0,%ebx ++ # mul a[5]*b[5] ++ mull %edx ++ addl %eax,%ecx ++ movl 16(%esi),%eax ++ adcl %edx,%ebp ++ movl 24(%edi),%edx ++ adcl $0,%ebx ++ # mul a[4]*b[6] ++ mull %edx ++ addl %eax,%ecx ++ movl 12(%esi),%eax ++ adcl %edx,%ebp ++ movl 28(%edi),%edx ++ adcl $0,%ebx ++ # mul a[3]*b[7] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esp),%eax ++ adcl %edx,%ebp ++ movl 16(%edi),%edx ++ adcl $0,%ebx ++ movl %ecx,40(%eax) ++ movl 28(%esi),%eax ++ # saved r[10] ++ # ################## Calculate word 11 ++ xorl %ecx,%ecx ++ # mul a[7]*b[4] ++ mull %edx ++ addl %eax,%ebp ++ movl 24(%esi),%eax ++ adcl %edx,%ebx ++ movl 20(%edi),%edx ++ adcl $0,%ecx ++ # mul a[6]*b[5] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esi),%eax ++ adcl %edx,%ebx ++ movl 24(%edi),%edx ++ adcl $0,%ecx ++ # mul a[5]*b[6] ++ mull %edx ++ addl %eax,%ebp ++ movl 16(%esi),%eax ++ adcl %edx,%ebx ++ movl 28(%edi),%edx ++ adcl $0,%ecx ++ # mul a[4]*b[7] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esp),%eax ++ adcl %edx,%ebx ++ movl 20(%edi),%edx ++ adcl $0,%ecx ++ movl %ebp,44(%eax) ++ movl 28(%esi),%eax ++ # saved r[11] ++ # ################## Calculate word 12 ++ xorl %ebp,%ebp ++ # mul a[7]*b[5] ++ mull %edx ++ addl %eax,%ebx ++ movl 24(%esi),%eax ++ adcl %edx,%ecx ++ movl 24(%edi),%edx ++ adcl $0,%ebp ++ # mul a[6]*b[6] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esi),%eax ++ adcl %edx,%ecx ++ movl 28(%edi),%edx ++ adcl $0,%ebp ++ # mul a[5]*b[7] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esp),%eax ++ adcl %edx,%ecx ++ movl 24(%edi),%edx ++ adcl $0,%ebp ++ movl %ebx,48(%eax) ++ movl 28(%esi),%eax ++ # saved r[12] ++ # ################## Calculate word 13 ++ xorl %ebx,%ebx ++ # mul a[7]*b[6] ++ mull %edx ++ addl %eax,%ecx ++ movl 24(%esi),%eax ++ adcl %edx,%ebp ++ movl 28(%edi),%edx ++ adcl $0,%ebx ++ # mul a[6]*b[7] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esp),%eax ++ adcl %edx,%ebp ++ movl 28(%edi),%edx ++ adcl $0,%ebx ++ movl %ecx,52(%eax) ++ movl 28(%esi),%eax ++ # saved r[13] ++ # ################## Calculate word 14 ++ xorl %ecx,%ecx ++ # mul a[7]*b[7] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esp),%eax ++ adcl %edx,%ebx ++ adcl $0,%ecx ++ movl %ebp,56(%eax) ++ # saved r[14] ++ # save r[15] ++ movl %ebx,60(%eax) ++ popl %ebx ++ popl %ebp ++ popl %edi ++ popl %esi ++ ret ++.globl _bn_mul_comba4 ++.align 4 ++_bn_mul_comba4: ++L_bn_mul_comba4_begin: ++ pushl %esi ++ movl 12(%esp),%esi ++ pushl %edi ++ movl 20(%esp),%edi ++ pushl %ebp ++ pushl %ebx ++ xorl %ebx,%ebx ++ movl (%esi),%eax ++ xorl %ecx,%ecx ++ movl (%edi),%edx ++ # ################## Calculate word 0 ++ xorl %ebp,%ebp ++ # mul a[0]*b[0] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esp),%eax ++ adcl %edx,%ecx ++ movl (%edi),%edx ++ adcl $0,%ebp ++ movl %ebx,(%eax) ++ movl 4(%esi),%eax ++ # saved r[0] ++ # ################## Calculate word 1 ++ xorl %ebx,%ebx ++ # mul a[1]*b[0] ++ mull %edx ++ addl %eax,%ecx ++ movl (%esi),%eax ++ adcl %edx,%ebp ++ movl 4(%edi),%edx ++ adcl $0,%ebx ++ # mul a[0]*b[1] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esp),%eax ++ adcl %edx,%ebp ++ movl (%edi),%edx ++ adcl $0,%ebx ++ movl %ecx,4(%eax) ++ movl 8(%esi),%eax ++ # saved r[1] ++ # ################## Calculate word 2 ++ xorl %ecx,%ecx ++ # mul a[2]*b[0] ++ mull %edx ++ addl %eax,%ebp ++ movl 4(%esi),%eax ++ adcl %edx,%ebx ++ movl 4(%edi),%edx ++ adcl $0,%ecx ++ # mul a[1]*b[1] ++ mull %edx ++ addl %eax,%ebp ++ movl (%esi),%eax ++ adcl %edx,%ebx ++ movl 8(%edi),%edx ++ adcl $0,%ecx ++ # mul a[0]*b[2] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esp),%eax ++ adcl %edx,%ebx ++ movl (%edi),%edx ++ adcl $0,%ecx ++ movl %ebp,8(%eax) ++ movl 12(%esi),%eax ++ # saved r[2] ++ # ################## Calculate word 3 ++ xorl %ebp,%ebp ++ # mul a[3]*b[0] ++ mull %edx ++ addl %eax,%ebx ++ movl 8(%esi),%eax ++ adcl %edx,%ecx ++ movl 4(%edi),%edx ++ adcl $0,%ebp ++ # mul a[2]*b[1] ++ mull %edx ++ addl %eax,%ebx ++ movl 4(%esi),%eax ++ adcl %edx,%ecx ++ movl 8(%edi),%edx ++ adcl $0,%ebp ++ # mul a[1]*b[2] ++ mull %edx ++ addl %eax,%ebx ++ movl (%esi),%eax ++ adcl %edx,%ecx ++ movl 12(%edi),%edx ++ adcl $0,%ebp ++ # mul a[0]*b[3] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esp),%eax ++ adcl %edx,%ecx ++ movl 4(%edi),%edx ++ adcl $0,%ebp ++ movl %ebx,12(%eax) ++ movl 12(%esi),%eax ++ # saved r[3] ++ # ################## Calculate word 4 ++ xorl %ebx,%ebx ++ # mul a[3]*b[1] ++ mull %edx ++ addl %eax,%ecx ++ movl 8(%esi),%eax ++ adcl %edx,%ebp ++ movl 8(%edi),%edx ++ adcl $0,%ebx ++ # mul a[2]*b[2] ++ mull %edx ++ addl %eax,%ecx ++ movl 4(%esi),%eax ++ adcl %edx,%ebp ++ movl 12(%edi),%edx ++ adcl $0,%ebx ++ # mul a[1]*b[3] ++ mull %edx ++ addl %eax,%ecx ++ movl 20(%esp),%eax ++ adcl %edx,%ebp ++ movl 8(%edi),%edx ++ adcl $0,%ebx ++ movl %ecx,16(%eax) ++ movl 12(%esi),%eax ++ # saved r[4] ++ # ################## Calculate word 5 ++ xorl %ecx,%ecx ++ # mul a[3]*b[2] ++ mull %edx ++ addl %eax,%ebp ++ movl 8(%esi),%eax ++ adcl %edx,%ebx ++ movl 12(%edi),%edx ++ adcl $0,%ecx ++ # mul a[2]*b[3] ++ mull %edx ++ addl %eax,%ebp ++ movl 20(%esp),%eax ++ adcl %edx,%ebx ++ movl 12(%edi),%edx ++ adcl $0,%ecx ++ movl %ebp,20(%eax) ++ movl 12(%esi),%eax ++ # saved r[5] ++ # ################## Calculate word 6 ++ xorl %ebp,%ebp ++ # mul a[3]*b[3] ++ mull %edx ++ addl %eax,%ebx ++ movl 20(%esp),%eax ++ adcl %edx,%ecx ++ adcl $0,%ebp ++ movl %ebx,24(%eax) ++ # saved r[6] ++ # save r[7] ++ movl %ecx,28(%eax) ++ popl %ebx ++ popl %ebp ++ popl %edi ++ popl %esi ++ ret ++.globl _bn_sqr_comba8 ++.align 4 ++_bn_sqr_comba8: ++L_bn_sqr_comba8_begin: ++ pushl %esi ++ pushl %edi ++ pushl %ebp ++ pushl %ebx ++ movl 20(%esp),%edi ++ movl 24(%esp),%esi ++ xorl %ebx,%ebx ++ xorl %ecx,%ecx ++ movl (%esi),%eax ++ # ############### Calculate word 0 ++ xorl %ebp,%ebp ++ # sqr a[0]*a[0] ++ mull %eax ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl (%esi),%edx ++ adcl $0,%ebp ++ movl %ebx,(%edi) ++ movl 4(%esi),%eax ++ # saved r[0] ++ # ############### Calculate word 1 ++ xorl %ebx,%ebx ++ # sqr a[1]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 8(%esi),%eax ++ adcl $0,%ebx ++ movl %ecx,4(%edi) ++ movl (%esi),%edx ++ # saved r[1] ++ # ############### Calculate word 2 ++ xorl %ecx,%ecx ++ # sqr a[2]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 4(%esi),%eax ++ adcl $0,%ecx ++ # sqr a[1]*a[1] ++ mull %eax ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl (%esi),%edx ++ adcl $0,%ecx ++ movl %ebp,8(%edi) ++ movl 12(%esi),%eax ++ # saved r[2] ++ # ############### Calculate word 3 ++ xorl %ebp,%ebp ++ # sqr a[3]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 8(%esi),%eax ++ adcl $0,%ebp ++ movl 4(%esi),%edx ++ # sqr a[2]*a[1] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 16(%esi),%eax ++ adcl $0,%ebp ++ movl %ebx,12(%edi) ++ movl (%esi),%edx ++ # saved r[3] ++ # ############### Calculate word 4 ++ xorl %ebx,%ebx ++ # sqr a[4]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 12(%esi),%eax ++ adcl $0,%ebx ++ movl 4(%esi),%edx ++ # sqr a[3]*a[1] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 8(%esi),%eax ++ adcl $0,%ebx ++ # sqr a[2]*a[2] ++ mull %eax ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl (%esi),%edx ++ adcl $0,%ebx ++ movl %ecx,16(%edi) ++ movl 20(%esi),%eax ++ # saved r[4] ++ # ############### Calculate word 5 ++ xorl %ecx,%ecx ++ # sqr a[5]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 16(%esi),%eax ++ adcl $0,%ecx ++ movl 4(%esi),%edx ++ # sqr a[4]*a[1] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 12(%esi),%eax ++ adcl $0,%ecx ++ movl 8(%esi),%edx ++ # sqr a[3]*a[2] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 24(%esi),%eax ++ adcl $0,%ecx ++ movl %ebp,20(%edi) ++ movl (%esi),%edx ++ # saved r[5] ++ # ############### Calculate word 6 ++ xorl %ebp,%ebp ++ # sqr a[6]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 20(%esi),%eax ++ adcl $0,%ebp ++ movl 4(%esi),%edx ++ # sqr a[5]*a[1] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 16(%esi),%eax ++ adcl $0,%ebp ++ movl 8(%esi),%edx ++ # sqr a[4]*a[2] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 12(%esi),%eax ++ adcl $0,%ebp ++ # sqr a[3]*a[3] ++ mull %eax ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl (%esi),%edx ++ adcl $0,%ebp ++ movl %ebx,24(%edi) ++ movl 28(%esi),%eax ++ # saved r[6] ++ # ############### Calculate word 7 ++ xorl %ebx,%ebx ++ # sqr a[7]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 24(%esi),%eax ++ adcl $0,%ebx ++ movl 4(%esi),%edx ++ # sqr a[6]*a[1] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 20(%esi),%eax ++ adcl $0,%ebx ++ movl 8(%esi),%edx ++ # sqr a[5]*a[2] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 16(%esi),%eax ++ adcl $0,%ebx ++ movl 12(%esi),%edx ++ # sqr a[4]*a[3] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 28(%esi),%eax ++ adcl $0,%ebx ++ movl %ecx,28(%edi) ++ movl 4(%esi),%edx ++ # saved r[7] ++ # ############### Calculate word 8 ++ xorl %ecx,%ecx ++ # sqr a[7]*a[1] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 24(%esi),%eax ++ adcl $0,%ecx ++ movl 8(%esi),%edx ++ # sqr a[6]*a[2] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 20(%esi),%eax ++ adcl $0,%ecx ++ movl 12(%esi),%edx ++ # sqr a[5]*a[3] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 16(%esi),%eax ++ adcl $0,%ecx ++ # sqr a[4]*a[4] ++ mull %eax ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 8(%esi),%edx ++ adcl $0,%ecx ++ movl %ebp,32(%edi) ++ movl 28(%esi),%eax ++ # saved r[8] ++ # ############### Calculate word 9 ++ xorl %ebp,%ebp ++ # sqr a[7]*a[2] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 24(%esi),%eax ++ adcl $0,%ebp ++ movl 12(%esi),%edx ++ # sqr a[6]*a[3] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 20(%esi),%eax ++ adcl $0,%ebp ++ movl 16(%esi),%edx ++ # sqr a[5]*a[4] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 28(%esi),%eax ++ adcl $0,%ebp ++ movl %ebx,36(%edi) ++ movl 12(%esi),%edx ++ # saved r[9] ++ # ############### Calculate word 10 ++ xorl %ebx,%ebx ++ # sqr a[7]*a[3] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 24(%esi),%eax ++ adcl $0,%ebx ++ movl 16(%esi),%edx ++ # sqr a[6]*a[4] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 20(%esi),%eax ++ adcl $0,%ebx ++ # sqr a[5]*a[5] ++ mull %eax ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 16(%esi),%edx ++ adcl $0,%ebx ++ movl %ecx,40(%edi) ++ movl 28(%esi),%eax ++ # saved r[10] ++ # ############### Calculate word 11 ++ xorl %ecx,%ecx ++ # sqr a[7]*a[4] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 24(%esi),%eax ++ adcl $0,%ecx ++ movl 20(%esi),%edx ++ # sqr a[6]*a[5] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 28(%esi),%eax ++ adcl $0,%ecx ++ movl %ebp,44(%edi) ++ movl 20(%esi),%edx ++ # saved r[11] ++ # ############### Calculate word 12 ++ xorl %ebp,%ebp ++ # sqr a[7]*a[5] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 24(%esi),%eax ++ adcl $0,%ebp ++ # sqr a[6]*a[6] ++ mull %eax ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 24(%esi),%edx ++ adcl $0,%ebp ++ movl %ebx,48(%edi) ++ movl 28(%esi),%eax ++ # saved r[12] ++ # ############### Calculate word 13 ++ xorl %ebx,%ebx ++ # sqr a[7]*a[6] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 28(%esi),%eax ++ adcl $0,%ebx ++ movl %ecx,52(%edi) ++ # saved r[13] ++ # ############### Calculate word 14 ++ xorl %ecx,%ecx ++ # sqr a[7]*a[7] ++ mull %eax ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ adcl $0,%ecx ++ movl %ebp,56(%edi) ++ # saved r[14] ++ movl %ebx,60(%edi) ++ popl %ebx ++ popl %ebp ++ popl %edi ++ popl %esi ++ ret ++.globl _bn_sqr_comba4 ++.align 4 ++_bn_sqr_comba4: ++L_bn_sqr_comba4_begin: ++ pushl %esi ++ pushl %edi ++ pushl %ebp ++ pushl %ebx ++ movl 20(%esp),%edi ++ movl 24(%esp),%esi ++ xorl %ebx,%ebx ++ xorl %ecx,%ecx ++ movl (%esi),%eax ++ # ############### Calculate word 0 ++ xorl %ebp,%ebp ++ # sqr a[0]*a[0] ++ mull %eax ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl (%esi),%edx ++ adcl $0,%ebp ++ movl %ebx,(%edi) ++ movl 4(%esi),%eax ++ # saved r[0] ++ # ############### Calculate word 1 ++ xorl %ebx,%ebx ++ # sqr a[1]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 8(%esi),%eax ++ adcl $0,%ebx ++ movl %ecx,4(%edi) ++ movl (%esi),%edx ++ # saved r[1] ++ # ############### Calculate word 2 ++ xorl %ecx,%ecx ++ # sqr a[2]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 4(%esi),%eax ++ adcl $0,%ecx ++ # sqr a[1]*a[1] ++ mull %eax ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl (%esi),%edx ++ adcl $0,%ecx ++ movl %ebp,8(%edi) ++ movl 12(%esi),%eax ++ # saved r[2] ++ # ############### Calculate word 3 ++ xorl %ebp,%ebp ++ # sqr a[3]*a[0] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 8(%esi),%eax ++ adcl $0,%ebp ++ movl 4(%esi),%edx ++ # sqr a[2]*a[1] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebp ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ movl 12(%esi),%eax ++ adcl $0,%ebp ++ movl %ebx,12(%edi) ++ movl 4(%esi),%edx ++ # saved r[3] ++ # ############### Calculate word 4 ++ xorl %ebx,%ebx ++ # sqr a[3]*a[1] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ebx ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 8(%esi),%eax ++ adcl $0,%ebx ++ # sqr a[2]*a[2] ++ mull %eax ++ addl %eax,%ecx ++ adcl %edx,%ebp ++ movl 8(%esi),%edx ++ adcl $0,%ebx ++ movl %ecx,16(%edi) ++ movl 12(%esi),%eax ++ # saved r[4] ++ # ############### Calculate word 5 ++ xorl %ecx,%ecx ++ # sqr a[3]*a[2] ++ mull %edx ++ addl %eax,%eax ++ adcl %edx,%edx ++ adcl $0,%ecx ++ addl %eax,%ebp ++ adcl %edx,%ebx ++ movl 12(%esi),%eax ++ adcl $0,%ecx ++ movl %ebp,20(%edi) ++ # saved r[5] ++ # ############### Calculate word 6 ++ xorl %ebp,%ebp ++ # sqr a[3]*a[3] ++ mull %eax ++ addl %eax,%ebx ++ adcl %edx,%ecx ++ adcl $0,%ebp ++ movl %ebx,24(%edi) ++ # saved r[6] ++ movl %ecx,28(%edi) ++ popl %ebx ++ popl %ebp ++ popl %edi ++ popl %esi ++ ret +diff --git a/crypto/bn/asm/x86-gf2m-mac.S b/crypto/bn/asm/x86-gf2m-mac.S +new file mode 100644 +index 0000000..31718e0 +--- /dev/null ++++ b/crypto/bn/asm/x86-gf2m-mac.S +@@ -0,0 +1,332 @@ ++.file "crypto/bn/asm/x86-gf2m.s" ++.text ++.align 4 ++__mul_1x1_mmx: ++ subl $36,%esp ++ movl %eax,%ecx ++ leal (%eax,%eax,1),%edx ++ andl $1073741823,%ecx ++ leal (%edx,%edx,1),%ebp ++ movl $0,(%esp) ++ andl $2147483647,%edx ++ movd %eax,%mm2 ++ movd %ebx,%mm3 ++ movl %ecx,4(%esp) ++ xorl %edx,%ecx ++ pxor %mm5,%mm5 ++ pxor %mm4,%mm4 ++ movl %edx,8(%esp) ++ xorl %ebp,%edx ++ movl %ecx,12(%esp) ++ pcmpgtd %mm2,%mm5 ++ paddd %mm2,%mm2 ++ xorl %edx,%ecx ++ movl %ebp,16(%esp) ++ xorl %edx,%ebp ++ pand %mm3,%mm5 ++ pcmpgtd %mm2,%mm4 ++ movl %ecx,20(%esp) ++ xorl %ecx,%ebp ++ psllq $31,%mm5 ++ pand %mm3,%mm4 ++ movl %edx,24(%esp) ++ movl $7,%esi ++ movl %ebp,28(%esp) ++ movl %esi,%ebp ++ andl %ebx,%esi ++ shrl $3,%ebx ++ movl %ebp,%edi ++ psllq $30,%mm4 ++ andl %ebx,%edi ++ shrl $3,%ebx ++ movd (%esp,%esi,4),%mm0 ++ movl %ebp,%esi ++ andl %ebx,%esi ++ shrl $3,%ebx ++ movd (%esp,%edi,4),%mm2 ++ movl %ebp,%edi ++ psllq $3,%mm2 ++ andl %ebx,%edi ++ shrl $3,%ebx ++ pxor %mm2,%mm0 ++ movd (%esp,%esi,4),%mm1 ++ movl %ebp,%esi ++ psllq $6,%mm1 ++ andl %ebx,%esi ++ shrl $3,%ebx ++ pxor %mm1,%mm0 ++ movd (%esp,%edi,4),%mm2 ++ movl %ebp,%edi ++ psllq $9,%mm2 ++ andl %ebx,%edi ++ shrl $3,%ebx ++ pxor %mm2,%mm0 ++ movd (%esp,%esi,4),%mm1 ++ movl %ebp,%esi ++ psllq $12,%mm1 ++ andl %ebx,%esi ++ shrl $3,%ebx ++ pxor %mm1,%mm0 ++ movd (%esp,%edi,4),%mm2 ++ movl %ebp,%edi ++ psllq $15,%mm2 ++ andl %ebx,%edi ++ shrl $3,%ebx ++ pxor %mm2,%mm0 ++ movd (%esp,%esi,4),%mm1 ++ movl %ebp,%esi ++ psllq $18,%mm1 ++ andl %ebx,%esi ++ shrl $3,%ebx ++ pxor %mm1,%mm0 ++ movd (%esp,%edi,4),%mm2 ++ movl %ebp,%edi ++ psllq $21,%mm2 ++ andl %ebx,%edi ++ shrl $3,%ebx ++ pxor %mm2,%mm0 ++ movd (%esp,%esi,4),%mm1 ++ movl %ebp,%esi ++ psllq $24,%mm1 ++ andl %ebx,%esi ++ shrl $3,%ebx ++ pxor %mm1,%mm0 ++ movd (%esp,%edi,4),%mm2 ++ pxor %mm4,%mm0 ++ psllq $27,%mm2 ++ pxor %mm2,%mm0 ++ movd (%esp,%esi,4),%mm1 ++ pxor %mm5,%mm0 ++ psllq $30,%mm1 ++ addl $36,%esp ++ pxor %mm1,%mm0 ++ ret ++.align 4 ++__mul_1x1_ialu: ++ subl $36,%esp ++ movl %eax,%ecx ++ leal (%eax,%eax,1),%edx ++ leal (,%eax,4),%ebp ++ andl $1073741823,%ecx ++ leal (%eax,%eax,1),%edi ++ sarl $31,%eax ++ movl $0,(%esp) ++ andl $2147483647,%edx ++ movl %ecx,4(%esp) ++ xorl %edx,%ecx ++ movl %edx,8(%esp) ++ xorl %ebp,%edx ++ movl %ecx,12(%esp) ++ xorl %edx,%ecx ++ movl %ebp,16(%esp) ++ xorl %edx,%ebp ++ movl %ecx,20(%esp) ++ xorl %ecx,%ebp ++ sarl $31,%edi ++ andl %ebx,%eax ++ movl %edx,24(%esp) ++ andl %ebx,%edi ++ movl %ebp,28(%esp) ++ movl %eax,%edx ++ shll $31,%eax ++ movl %edi,%ecx ++ shrl $1,%edx ++ movl $7,%esi ++ shll $30,%edi ++ andl %ebx,%esi ++ shrl $2,%ecx ++ xorl %edi,%eax ++ shrl $3,%ebx ++ movl $7,%edi ++ andl %ebx,%edi ++ shrl $3,%ebx ++ xorl %ecx,%edx ++ xorl (%esp,%esi,4),%eax ++ movl $7,%esi ++ andl %ebx,%esi ++ shrl $3,%ebx ++ movl (%esp,%edi,4),%ebp ++ movl $7,%edi ++ movl %ebp,%ecx ++ shll $3,%ebp ++ andl %ebx,%edi ++ shrl $29,%ecx ++ xorl %ebp,%eax ++ shrl $3,%ebx ++ xorl %ecx,%edx ++ movl (%esp,%esi,4),%ecx ++ movl $7,%esi ++ movl %ecx,%ebp ++ shll $6,%ecx ++ andl %ebx,%esi ++ shrl $26,%ebp ++ xorl %ecx,%eax ++ shrl $3,%ebx ++ xorl %ebp,%edx ++ movl (%esp,%edi,4),%ebp ++ movl $7,%edi ++ movl %ebp,%ecx ++ shll $9,%ebp ++ andl %ebx,%edi ++ shrl $23,%ecx ++ xorl %ebp,%eax ++ shrl $3,%ebx ++ xorl %ecx,%edx ++ movl (%esp,%esi,4),%ecx ++ movl $7,%esi ++ movl %ecx,%ebp ++ shll $12,%ecx ++ andl %ebx,%esi ++ shrl $20,%ebp ++ xorl %ecx,%eax ++ shrl $3,%ebx ++ xorl %ebp,%edx ++ movl (%esp,%edi,4),%ebp ++ movl $7,%edi ++ movl %ebp,%ecx ++ shll $15,%ebp ++ andl %ebx,%edi ++ shrl $17,%ecx ++ xorl %ebp,%eax ++ shrl $3,%ebx ++ xorl %ecx,%edx ++ movl (%esp,%esi,4),%ecx ++ movl $7,%esi ++ movl %ecx,%ebp ++ shll $18,%ecx ++ andl %ebx,%esi ++ shrl $14,%ebp ++ xorl %ecx,%eax ++ shrl $3,%ebx ++ xorl %ebp,%edx ++ movl (%esp,%edi,4),%ebp ++ movl $7,%edi ++ movl %ebp,%ecx ++ shll $21,%ebp ++ andl %ebx,%edi ++ shrl $11,%ecx ++ xorl %ebp,%eax ++ shrl $3,%ebx ++ xorl %ecx,%edx ++ movl (%esp,%esi,4),%ecx ++ movl $7,%esi ++ movl %ecx,%ebp ++ shll $24,%ecx ++ andl %ebx,%esi ++ shrl $8,%ebp ++ xorl %ecx,%eax ++ shrl $3,%ebx ++ xorl %ebp,%edx ++ movl (%esp,%edi,4),%ebp ++ movl %ebp,%ecx ++ shll $27,%ebp ++ movl (%esp,%esi,4),%edi ++ shrl $5,%ecx ++ movl %edi,%esi ++ xorl %ebp,%eax ++ shll $30,%edi ++ xorl %ecx,%edx ++ shrl $2,%esi ++ xorl %edi,%eax ++ xorl %esi,%edx ++ addl $36,%esp ++ ret ++.globl _bn_GF2m_mul_2x2 ++.align 4 ++_bn_GF2m_mul_2x2: ++L_bn_GF2m_mul_2x2_begin: ++ call L000PIC_me_up ++L000PIC_me_up: ++ popl %edx ++ movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L000PIC_me_up(%edx),%edx ++ movl (%edx),%eax ++ movl 4(%edx),%edx ++ testl $8388608,%eax ++ jz L001ialu ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 24(%esp),%eax ++ movl 32(%esp),%ebx ++ call __mul_1x1_mmx ++ movq %mm0,%mm7 ++ movl 28(%esp),%eax ++ movl 36(%esp),%ebx ++ call __mul_1x1_mmx ++ movq %mm0,%mm6 ++ movl 24(%esp),%eax ++ movl 32(%esp),%ebx ++ xorl 28(%esp),%eax ++ xorl 36(%esp),%ebx ++ call __mul_1x1_mmx ++ pxor %mm7,%mm0 ++ movl 20(%esp),%eax ++ pxor %mm6,%mm0 ++ movq %mm0,%mm2 ++ psllq $32,%mm0 ++ popl %edi ++ psrlq $32,%mm2 ++ popl %esi ++ pxor %mm6,%mm0 ++ popl %ebx ++ pxor %mm7,%mm2 ++ movq %mm0,(%eax) ++ popl %ebp ++ movq %mm2,8(%eax) ++ emms ++ ret ++.align 4,0x90 ++L001ialu: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ subl $20,%esp ++ movl 44(%esp),%eax ++ movl 52(%esp),%ebx ++ call __mul_1x1_ialu ++ movl %eax,8(%esp) ++ movl %edx,12(%esp) ++ movl 48(%esp),%eax ++ movl 56(%esp),%ebx ++ call __mul_1x1_ialu ++ movl %eax,(%esp) ++ movl %edx,4(%esp) ++ movl 44(%esp),%eax ++ movl 52(%esp),%ebx ++ xorl 48(%esp),%eax ++ xorl 56(%esp),%ebx ++ call __mul_1x1_ialu ++ movl 40(%esp),%ebp ++ movl (%esp),%ebx ++ movl 4(%esp),%ecx ++ movl 8(%esp),%edi ++ movl 12(%esp),%esi ++ xorl %edx,%eax ++ xorl %ecx,%edx ++ xorl %ebx,%eax ++ movl %ebx,(%ebp) ++ xorl %edi,%edx ++ movl %esi,12(%ebp) ++ xorl %esi,%eax ++ addl $20,%esp ++ xorl %esi,%edx ++ popl %edi ++ xorl %edx,%eax ++ popl %esi ++ movl %edx,8(%ebp) ++ popl %ebx ++ movl %eax,4(%ebp) ++ popl %ebp ++ ret ++.byte 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105 ++.byte 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32 ++.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 ++.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 ++.byte 62,0 ++.section __IMPORT,__pointers,non_lazy_symbol_pointers ++L_OPENSSL_ia32cap_P$non_lazy_ptr: ++.indirect_symbol _OPENSSL_ia32cap_P ++.long 0 ++.comm _OPENSSL_ia32cap_P,8,2 +diff --git a/crypto/bn/asm/x86-mont-mac.S b/crypto/bn/asm/x86-mont-mac.S +new file mode 100644 +index 0000000..aab259a +--- /dev/null ++++ b/crypto/bn/asm/x86-mont-mac.S +@@ -0,0 +1,336 @@ ++.file "crypto/bn/asm/x86-mont.s" ++.text ++.globl _bn_mul_mont ++.align 4 ++_bn_mul_mont: ++L_bn_mul_mont_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ xorl %eax,%eax ++ movl 40(%esp),%edi ++ cmpl $4,%edi ++ jl L000just_leave ++ leal 20(%esp),%esi ++ leal 24(%esp),%edx ++ movl %esp,%ebp ++ addl $2,%edi ++ negl %edi ++ leal -32(%esp,%edi,4),%esp ++ negl %edi ++ movl %esp,%eax ++ subl %edx,%eax ++ andl $2047,%eax ++ subl %eax,%esp ++ xorl %esp,%edx ++ andl $2048,%edx ++ xorl $2048,%edx ++ subl %edx,%esp ++ andl $-64,%esp ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ movl 16(%esi),%esi ++ movl (%esi),%esi ++ movl %eax,4(%esp) ++ movl %ebx,8(%esp) ++ movl %ecx,12(%esp) ++ movl %edx,16(%esp) ++ movl %esi,20(%esp) ++ leal -3(%edi),%ebx ++ movl %ebp,24(%esp) ++ movl 8(%esp),%esi ++ leal 1(%ebx),%ebp ++ movl 12(%esp),%edi ++ xorl %ecx,%ecx ++ movl %esi,%edx ++ andl $1,%ebp ++ subl %edi,%edx ++ leal 4(%edi,%ebx,4),%eax ++ orl %edx,%ebp ++ movl (%edi),%edi ++ jz L001bn_sqr_mont ++ movl %eax,28(%esp) ++ movl (%esi),%eax ++ xorl %edx,%edx ++.align 4,0x90 ++L002mull: ++ movl %edx,%ebp ++ mull %edi ++ addl %eax,%ebp ++ leal 1(%ecx),%ecx ++ adcl $0,%edx ++ movl (%esi,%ecx,4),%eax ++ cmpl %ebx,%ecx ++ movl %ebp,28(%esp,%ecx,4) ++ jl L002mull ++ movl %edx,%ebp ++ mull %edi ++ movl 20(%esp),%edi ++ addl %ebp,%eax ++ movl 16(%esp),%esi ++ adcl $0,%edx ++ imull 32(%esp),%edi ++ movl %eax,32(%esp,%ebx,4) ++ xorl %ecx,%ecx ++ movl %edx,36(%esp,%ebx,4) ++ movl %ecx,40(%esp,%ebx,4) ++ movl (%esi),%eax ++ mull %edi ++ addl 32(%esp),%eax ++ movl 4(%esi),%eax ++ adcl $0,%edx ++ incl %ecx ++ jmp L0032ndmadd ++.align 4,0x90 ++L0041stmadd: ++ movl %edx,%ebp ++ mull %edi ++ addl 32(%esp,%ecx,4),%ebp ++ leal 1(%ecx),%ecx ++ adcl $0,%edx ++ addl %eax,%ebp ++ movl (%esi,%ecx,4),%eax ++ adcl $0,%edx ++ cmpl %ebx,%ecx ++ movl %ebp,28(%esp,%ecx,4) ++ jl L0041stmadd ++ movl %edx,%ebp ++ mull %edi ++ addl 32(%esp,%ebx,4),%eax ++ movl 20(%esp),%edi ++ adcl $0,%edx ++ movl 16(%esp),%esi ++ addl %eax,%ebp ++ adcl $0,%edx ++ imull 32(%esp),%edi ++ xorl %ecx,%ecx ++ addl 36(%esp,%ebx,4),%edx ++ movl %ebp,32(%esp,%ebx,4) ++ adcl $0,%ecx ++ movl (%esi),%eax ++ movl %edx,36(%esp,%ebx,4) ++ movl %ecx,40(%esp,%ebx,4) ++ mull %edi ++ addl 32(%esp),%eax ++ movl 4(%esi),%eax ++ adcl $0,%edx ++ movl $1,%ecx ++.align 4,0x90 ++L0032ndmadd: ++ movl %edx,%ebp ++ mull %edi ++ addl 32(%esp,%ecx,4),%ebp ++ leal 1(%ecx),%ecx ++ adcl $0,%edx ++ addl %eax,%ebp ++ movl (%esi,%ecx,4),%eax ++ adcl $0,%edx ++ cmpl %ebx,%ecx ++ movl %ebp,24(%esp,%ecx,4) ++ jl L0032ndmadd ++ movl %edx,%ebp ++ mull %edi ++ addl 32(%esp,%ebx,4),%ebp ++ adcl $0,%edx ++ addl %eax,%ebp ++ adcl $0,%edx ++ movl %ebp,28(%esp,%ebx,4) ++ xorl %eax,%eax ++ movl 12(%esp),%ecx ++ addl 36(%esp,%ebx,4),%edx ++ adcl 40(%esp,%ebx,4),%eax ++ leal 4(%ecx),%ecx ++ movl %edx,32(%esp,%ebx,4) ++ cmpl 28(%esp),%ecx ++ movl %eax,36(%esp,%ebx,4) ++ je L005common_tail ++ movl (%ecx),%edi ++ movl 8(%esp),%esi ++ movl %ecx,12(%esp) ++ xorl %ecx,%ecx ++ xorl %edx,%edx ++ movl (%esi),%eax ++ jmp L0041stmadd ++.align 4,0x90 ++L001bn_sqr_mont: ++ movl %ebx,(%esp) ++ movl %ecx,12(%esp) ++ movl %edi,%eax ++ mull %edi ++ movl %eax,32(%esp) ++ movl %edx,%ebx ++ shrl $1,%edx ++ andl $1,%ebx ++ incl %ecx ++.align 4,0x90 ++L006sqr: ++ movl (%esi,%ecx,4),%eax ++ movl %edx,%ebp ++ mull %edi ++ addl %ebp,%eax ++ leal 1(%ecx),%ecx ++ adcl $0,%edx ++ leal (%ebx,%eax,2),%ebp ++ shrl $31,%eax ++ cmpl (%esp),%ecx ++ movl %eax,%ebx ++ movl %ebp,28(%esp,%ecx,4) ++ jl L006sqr ++ movl (%esi,%ecx,4),%eax ++ movl %edx,%ebp ++ mull %edi ++ addl %ebp,%eax ++ movl 20(%esp),%edi ++ adcl $0,%edx ++ movl 16(%esp),%esi ++ leal (%ebx,%eax,2),%ebp ++ imull 32(%esp),%edi ++ shrl $31,%eax ++ movl %ebp,32(%esp,%ecx,4) ++ leal (%eax,%edx,2),%ebp ++ movl (%esi),%eax ++ shrl $31,%edx ++ movl %ebp,36(%esp,%ecx,4) ++ movl %edx,40(%esp,%ecx,4) ++ mull %edi ++ addl 32(%esp),%eax ++ movl %ecx,%ebx ++ adcl $0,%edx ++ movl 4(%esi),%eax ++ movl $1,%ecx ++.align 4,0x90 ++L0073rdmadd: ++ movl %edx,%ebp ++ mull %edi ++ addl 32(%esp,%ecx,4),%ebp ++ adcl $0,%edx ++ addl %eax,%ebp ++ movl 4(%esi,%ecx,4),%eax ++ adcl $0,%edx ++ movl %ebp,28(%esp,%ecx,4) ++ movl %edx,%ebp ++ mull %edi ++ addl 36(%esp,%ecx,4),%ebp ++ leal 2(%ecx),%ecx ++ adcl $0,%edx ++ addl %eax,%ebp ++ movl (%esi,%ecx,4),%eax ++ adcl $0,%edx ++ cmpl %ebx,%ecx ++ movl %ebp,24(%esp,%ecx,4) ++ jl L0073rdmadd ++ movl %edx,%ebp ++ mull %edi ++ addl 32(%esp,%ebx,4),%ebp ++ adcl $0,%edx ++ addl %eax,%ebp ++ adcl $0,%edx ++ movl %ebp,28(%esp,%ebx,4) ++ movl 12(%esp),%ecx ++ xorl %eax,%eax ++ movl 8(%esp),%esi ++ addl 36(%esp,%ebx,4),%edx ++ adcl 40(%esp,%ebx,4),%eax ++ movl %edx,32(%esp,%ebx,4) ++ cmpl %ebx,%ecx ++ movl %eax,36(%esp,%ebx,4) ++ je L005common_tail ++ movl 4(%esi,%ecx,4),%edi ++ leal 1(%ecx),%ecx ++ movl %edi,%eax ++ movl %ecx,12(%esp) ++ mull %edi ++ addl 32(%esp,%ecx,4),%eax ++ adcl $0,%edx ++ movl %eax,32(%esp,%ecx,4) ++ xorl %ebp,%ebp ++ cmpl %ebx,%ecx ++ leal 1(%ecx),%ecx ++ je L008sqrlast ++ movl %edx,%ebx ++ shrl $1,%edx ++ andl $1,%ebx ++.align 4,0x90 ++L009sqradd: ++ movl (%esi,%ecx,4),%eax ++ movl %edx,%ebp ++ mull %edi ++ addl %ebp,%eax ++ leal (%eax,%eax,1),%ebp ++ adcl $0,%edx ++ shrl $31,%eax ++ addl 32(%esp,%ecx,4),%ebp ++ leal 1(%ecx),%ecx ++ adcl $0,%eax ++ addl %ebx,%ebp ++ adcl $0,%eax ++ cmpl (%esp),%ecx ++ movl %ebp,28(%esp,%ecx,4) ++ movl %eax,%ebx ++ jle L009sqradd ++ movl %edx,%ebp ++ addl %edx,%edx ++ shrl $31,%ebp ++ addl %ebx,%edx ++ adcl $0,%ebp ++L008sqrlast: ++ movl 20(%esp),%edi ++ movl 16(%esp),%esi ++ imull 32(%esp),%edi ++ addl 32(%esp,%ecx,4),%edx ++ movl (%esi),%eax ++ adcl $0,%ebp ++ movl %edx,32(%esp,%ecx,4) ++ movl %ebp,36(%esp,%ecx,4) ++ mull %edi ++ addl 32(%esp),%eax ++ leal -1(%ecx),%ebx ++ adcl $0,%edx ++ movl $1,%ecx ++ movl 4(%esi),%eax ++ jmp L0073rdmadd ++.align 4,0x90 ++L005common_tail: ++ movl 16(%esp),%ebp ++ movl 4(%esp),%edi ++ leal 32(%esp),%esi ++ movl (%esi),%eax ++ movl %ebx,%ecx ++ xorl %edx,%edx ++.align 4,0x90 ++L010sub: ++ sbbl (%ebp,%edx,4),%eax ++ movl %eax,(%edi,%edx,4) ++ decl %ecx ++ movl 4(%esi,%edx,4),%eax ++ leal 1(%edx),%edx ++ jge L010sub ++ sbbl $0,%eax ++ andl %eax,%esi ++ notl %eax ++ movl %edi,%ebp ++ andl %eax,%ebp ++ orl %ebp,%esi ++.align 4,0x90 ++L011copy: ++ movl (%esi,%ebx,4),%eax ++ movl %eax,(%edi,%ebx,4) ++ movl %ecx,32(%esp,%ebx,4) ++ decl %ebx ++ jge L011copy ++ movl 24(%esp),%esp ++ movl $1,%eax ++L000just_leave: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 ++.byte 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 ++.byte 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 ++.byte 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 ++.byte 111,114,103,62,0 +diff --git a/crypto/des/asm/crypt586-mac.S b/crypto/des/asm/crypt586-mac.S +new file mode 100644 +index 0000000..9156a65 +--- /dev/null ++++ b/crypto/des/asm/crypt586-mac.S +@@ -0,0 +1,880 @@ ++.file "crypt586.s" ++.text ++.globl _fcrypt_body ++.align 4 ++_fcrypt_body: ++L_fcrypt_body_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ ++ # Load the 2 words ++ xorl %edi,%edi ++ xorl %esi,%esi ++ call L000PIC_me_up ++L000PIC_me_up: ++ popl %edx ++ movl L_DES_SPtrans$non_lazy_ptr-L000PIC_me_up(%edx),%edx ++ pushl %edx ++ movl 28(%esp),%ebp ++ pushl $25 ++L001start: ++ ++ # Round 0 ++ movl 36(%esp),%eax ++ movl %esi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %esi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl (%ebp),%ebx ++ xorl %ebx,%eax ++ movl 4(%ebp),%ecx ++ xorl %esi,%eax ++ xorl %esi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%edi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%edi ++ movl 32(%esp),%ebp ++ ++ # Round 1 ++ movl 36(%esp),%eax ++ movl %edi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %edi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 8(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 12(%ebp),%ecx ++ xorl %edi,%eax ++ xorl %edi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%esi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%esi ++ movl 32(%esp),%ebp ++ ++ # Round 2 ++ movl 36(%esp),%eax ++ movl %esi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %esi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 16(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 20(%ebp),%ecx ++ xorl %esi,%eax ++ xorl %esi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%edi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%edi ++ movl 32(%esp),%ebp ++ ++ # Round 3 ++ movl 36(%esp),%eax ++ movl %edi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %edi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 24(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 28(%ebp),%ecx ++ xorl %edi,%eax ++ xorl %edi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%esi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%esi ++ movl 32(%esp),%ebp ++ ++ # Round 4 ++ movl 36(%esp),%eax ++ movl %esi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %esi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 32(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 36(%ebp),%ecx ++ xorl %esi,%eax ++ xorl %esi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%edi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%edi ++ movl 32(%esp),%ebp ++ ++ # Round 5 ++ movl 36(%esp),%eax ++ movl %edi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %edi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 40(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 44(%ebp),%ecx ++ xorl %edi,%eax ++ xorl %edi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%esi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%esi ++ movl 32(%esp),%ebp ++ ++ # Round 6 ++ movl 36(%esp),%eax ++ movl %esi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %esi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 48(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 52(%ebp),%ecx ++ xorl %esi,%eax ++ xorl %esi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%edi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%edi ++ movl 32(%esp),%ebp ++ ++ # Round 7 ++ movl 36(%esp),%eax ++ movl %edi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %edi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 56(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 60(%ebp),%ecx ++ xorl %edi,%eax ++ xorl %edi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%esi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%esi ++ movl 32(%esp),%ebp ++ ++ # Round 8 ++ movl 36(%esp),%eax ++ movl %esi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %esi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 64(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 68(%ebp),%ecx ++ xorl %esi,%eax ++ xorl %esi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%edi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%edi ++ movl 32(%esp),%ebp ++ ++ # Round 9 ++ movl 36(%esp),%eax ++ movl %edi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %edi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 72(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 76(%ebp),%ecx ++ xorl %edi,%eax ++ xorl %edi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%esi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%esi ++ movl 32(%esp),%ebp ++ ++ # Round 10 ++ movl 36(%esp),%eax ++ movl %esi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %esi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 80(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 84(%ebp),%ecx ++ xorl %esi,%eax ++ xorl %esi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%edi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%edi ++ movl 32(%esp),%ebp ++ ++ # Round 11 ++ movl 36(%esp),%eax ++ movl %edi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %edi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 88(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 92(%ebp),%ecx ++ xorl %edi,%eax ++ xorl %edi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%esi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%esi ++ movl 32(%esp),%ebp ++ ++ # Round 12 ++ movl 36(%esp),%eax ++ movl %esi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %esi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 96(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 100(%ebp),%ecx ++ xorl %esi,%eax ++ xorl %esi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%edi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%edi ++ movl 32(%esp),%ebp ++ ++ # Round 13 ++ movl 36(%esp),%eax ++ movl %edi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %edi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 104(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 108(%ebp),%ecx ++ xorl %edi,%eax ++ xorl %edi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%esi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%esi ++ movl 32(%esp),%ebp ++ ++ # Round 14 ++ movl 36(%esp),%eax ++ movl %esi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %esi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 112(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 116(%ebp),%ecx ++ xorl %esi,%eax ++ xorl %esi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%edi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%edi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%edi ++ movl 32(%esp),%ebp ++ ++ # Round 15 ++ movl 36(%esp),%eax ++ movl %edi,%edx ++ shrl $16,%edx ++ movl 40(%esp),%ecx ++ xorl %edi,%edx ++ andl %edx,%eax ++ andl %ecx,%edx ++ movl %eax,%ebx ++ shll $16,%ebx ++ movl %edx,%ecx ++ shll $16,%ecx ++ xorl %ebx,%eax ++ xorl %ecx,%edx ++ movl 120(%ebp),%ebx ++ xorl %ebx,%eax ++ movl 124(%ebp),%ecx ++ xorl %edi,%eax ++ xorl %edi,%edx ++ xorl %ecx,%edx ++ andl $0xfcfcfcfc,%eax ++ xorl %ebx,%ebx ++ andl $0xcfcfcfcf,%edx ++ xorl %ecx,%ecx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ movl 4(%esp),%ebp ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ movl 0x600(%ebp,%ebx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x700(%ebp,%ecx,1),%ebx ++ xorl %ebx,%esi ++ movl 0x400(%ebp,%eax,1),%ebx ++ xorl %ebx,%esi ++ movl 0x500(%ebp,%edx,1),%ebx ++ xorl %ebx,%esi ++ movl 32(%esp),%ebp ++ movl (%esp),%ebx ++ movl %edi,%eax ++ decl %ebx ++ movl %esi,%edi ++ movl %eax,%esi ++ movl %ebx,(%esp) ++ jnz L001start ++ ++ # FP ++ movl 28(%esp),%edx ++ rorl $1,%edi ++ movl %esi,%eax ++ xorl %edi,%esi ++ andl $0xaaaaaaaa,%esi ++ xorl %esi,%eax ++ xorl %esi,%edi ++ ++ roll $23,%eax ++ movl %eax,%esi ++ xorl %edi,%eax ++ andl $0x03fc03fc,%eax ++ xorl %eax,%esi ++ xorl %eax,%edi ++ ++ roll $10,%esi ++ movl %esi,%eax ++ xorl %edi,%esi ++ andl $0x33333333,%esi ++ xorl %esi,%eax ++ xorl %esi,%edi ++ ++ roll $18,%edi ++ movl %edi,%esi ++ xorl %eax,%edi ++ andl $0xfff0000f,%edi ++ xorl %edi,%esi ++ xorl %edi,%eax ++ ++ roll $12,%esi ++ movl %esi,%edi ++ xorl %eax,%esi ++ andl $0xf0f0f0f0,%esi ++ xorl %esi,%edi ++ xorl %esi,%eax ++ ++ rorl $4,%eax ++ movl %eax,(%edx) ++ movl %edi,4(%edx) ++ addl $8,%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.section __IMPORT,__pointers,non_lazy_symbol_pointers ++L_DES_SPtrans$non_lazy_ptr: ++.indirect_symbol _DES_SPtrans ++.long 0 +diff --git a/crypto/des/asm/des-586-mac.S b/crypto/des/asm/des-586-mac.S +new file mode 100644 +index 0000000..4969416 +--- /dev/null ++++ b/crypto/des/asm/des-586-mac.S +@@ -0,0 +1,1821 @@ ++.file "des-586.s" ++.text ++.globl _DES_SPtrans ++.align 4 ++__x86_DES_encrypt: ++ pushl %ecx ++ # Round 0 ++ movl (%ecx),%eax ++ xorl %ebx,%ebx ++ movl 4(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 1 ++ movl 8(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 12(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 2 ++ movl 16(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 20(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 3 ++ movl 24(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 28(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 4 ++ movl 32(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 36(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 5 ++ movl 40(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 44(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 6 ++ movl 48(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 52(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 7 ++ movl 56(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 60(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 8 ++ movl 64(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 68(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 9 ++ movl 72(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 76(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 10 ++ movl 80(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 84(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 11 ++ movl 88(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 92(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 12 ++ movl 96(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 100(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 13 ++ movl 104(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 108(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 14 ++ movl 112(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 116(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 15 ++ movl 120(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 124(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ addl $4,%esp ++ ret ++.align 4 ++__x86_DES_decrypt: ++ pushl %ecx ++ # Round 15 ++ movl 120(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 124(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 14 ++ movl 112(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 116(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 13 ++ movl 104(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 108(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 12 ++ movl 96(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 100(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 11 ++ movl 88(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 92(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 10 ++ movl 80(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 84(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 9 ++ movl 72(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 76(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 8 ++ movl 64(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 68(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 7 ++ movl 56(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 60(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 6 ++ movl 48(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 52(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 5 ++ movl 40(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 44(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 4 ++ movl 32(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 36(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 3 ++ movl 24(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 28(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 2 ++ movl 16(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 20(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ # Round 1 ++ movl 8(%ecx),%eax ++ xorl %ebx,%ebx ++ movl 12(%ecx),%edx ++ xorl %esi,%eax ++ xorl %ecx,%ecx ++ xorl %esi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%edi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%edi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%edi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%edi ++ xorl 0x700(%ebp,%ecx,1),%edi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%edi ++ xorl 0x500(%ebp,%edx,1),%edi ++ # Round 0 ++ movl (%ecx),%eax ++ xorl %ebx,%ebx ++ movl 4(%ecx),%edx ++ xorl %edi,%eax ++ xorl %ecx,%ecx ++ xorl %edi,%edx ++ andl $0xfcfcfcfc,%eax ++ andl $0xcfcfcfcf,%edx ++ movb %al,%bl ++ movb %ah,%cl ++ rorl $4,%edx ++ xorl (%ebp,%ebx,1),%esi ++ movb %dl,%bl ++ xorl 0x200(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ shrl $16,%eax ++ xorl 0x100(%ebp,%ebx,1),%esi ++ movb %ah,%bl ++ shrl $16,%edx ++ xorl 0x300(%ebp,%ecx,1),%esi ++ movb %dh,%cl ++ andl $0xff,%eax ++ andl $0xff,%edx ++ xorl 0x600(%ebp,%ebx,1),%esi ++ xorl 0x700(%ebp,%ecx,1),%esi ++ movl (%esp),%ecx ++ xorl 0x400(%ebp,%eax,1),%esi ++ xorl 0x500(%ebp,%edx,1),%esi ++ addl $4,%esp ++ ret ++.globl _DES_encrypt1 ++.align 4 ++_DES_encrypt1: ++L_DES_encrypt1_begin: ++ pushl %esi ++ pushl %edi ++ ++ # Load the 2 words ++ movl 12(%esp),%esi ++ xorl %ecx,%ecx ++ pushl %ebx ++ pushl %ebp ++ movl (%esi),%eax ++ movl 28(%esp),%ebx ++ movl 4(%esi),%edi ++ ++ # IP ++ roll $4,%eax ++ movl %eax,%esi ++ xorl %edi,%eax ++ andl $0xf0f0f0f0,%eax ++ xorl %eax,%esi ++ xorl %eax,%edi ++ ++ roll $20,%edi ++ movl %edi,%eax ++ xorl %esi,%edi ++ andl $0xfff0000f,%edi ++ xorl %edi,%eax ++ xorl %edi,%esi ++ ++ roll $14,%eax ++ movl %eax,%edi ++ xorl %esi,%eax ++ andl $0x33333333,%eax ++ xorl %eax,%edi ++ xorl %eax,%esi ++ ++ roll $22,%esi ++ movl %esi,%eax ++ xorl %edi,%esi ++ andl $0x03fc03fc,%esi ++ xorl %esi,%eax ++ xorl %esi,%edi ++ ++ roll $9,%eax ++ movl %eax,%esi ++ xorl %edi,%eax ++ andl $0xaaaaaaaa,%eax ++ xorl %eax,%esi ++ xorl %eax,%edi ++ ++ roll $1,%edi ++ call L000pic_point ++L000pic_point: ++ popl %ebp ++ leal _DES_SPtrans-L000pic_point(%ebp),%ebp ++ movl 24(%esp),%ecx ++ cmpl $0,%ebx ++ je L001decrypt ++ call __x86_DES_encrypt ++ jmp L002done ++L001decrypt: ++ call __x86_DES_decrypt ++L002done: ++ ++ # FP ++ movl 20(%esp),%edx ++ rorl $1,%esi ++ movl %edi,%eax ++ xorl %esi,%edi ++ andl $0xaaaaaaaa,%edi ++ xorl %edi,%eax ++ xorl %edi,%esi ++ ++ roll $23,%eax ++ movl %eax,%edi ++ xorl %esi,%eax ++ andl $0x03fc03fc,%eax ++ xorl %eax,%edi ++ xorl %eax,%esi ++ ++ roll $10,%edi ++ movl %edi,%eax ++ xorl %esi,%edi ++ andl $0x33333333,%edi ++ xorl %edi,%eax ++ xorl %edi,%esi ++ ++ roll $18,%esi ++ movl %esi,%edi ++ xorl %eax,%esi ++ andl $0xfff0000f,%esi ++ xorl %esi,%edi ++ xorl %esi,%eax ++ ++ roll $12,%edi ++ movl %edi,%esi ++ xorl %eax,%edi ++ andl $0xf0f0f0f0,%edi ++ xorl %edi,%esi ++ xorl %edi,%eax ++ ++ rorl $4,%eax ++ movl %eax,(%edx) ++ movl %esi,4(%edx) ++ popl %ebp ++ popl %ebx ++ popl %edi ++ popl %esi ++ ret ++.globl _DES_encrypt2 ++.align 4 ++_DES_encrypt2: ++L_DES_encrypt2_begin: ++ pushl %esi ++ pushl %edi ++ ++ # Load the 2 words ++ movl 12(%esp),%eax ++ xorl %ecx,%ecx ++ pushl %ebx ++ pushl %ebp ++ movl (%eax),%esi ++ movl 28(%esp),%ebx ++ roll $3,%esi ++ movl 4(%eax),%edi ++ roll $3,%edi ++ call L003pic_point ++L003pic_point: ++ popl %ebp ++ leal _DES_SPtrans-L003pic_point(%ebp),%ebp ++ movl 24(%esp),%ecx ++ cmpl $0,%ebx ++ je L004decrypt ++ call __x86_DES_encrypt ++ jmp L005done ++L004decrypt: ++ call __x86_DES_decrypt ++L005done: ++ ++ # Fixup ++ rorl $3,%edi ++ movl 20(%esp),%eax ++ rorl $3,%esi ++ movl %edi,(%eax) ++ movl %esi,4(%eax) ++ popl %ebp ++ popl %ebx ++ popl %edi ++ popl %esi ++ ret ++.globl _DES_encrypt3 ++.align 4 ++_DES_encrypt3: ++L_DES_encrypt3_begin: ++ pushl %ebx ++ movl 8(%esp),%ebx ++ pushl %ebp ++ pushl %esi ++ pushl %edi ++ ++ # Load the data words ++ movl (%ebx),%edi ++ movl 4(%ebx),%esi ++ subl $12,%esp ++ ++ # IP ++ roll $4,%edi ++ movl %edi,%edx ++ xorl %esi,%edi ++ andl $0xf0f0f0f0,%edi ++ xorl %edi,%edx ++ xorl %edi,%esi ++ ++ roll $20,%esi ++ movl %esi,%edi ++ xorl %edx,%esi ++ andl $0xfff0000f,%esi ++ xorl %esi,%edi ++ xorl %esi,%edx ++ ++ roll $14,%edi ++ movl %edi,%esi ++ xorl %edx,%edi ++ andl $0x33333333,%edi ++ xorl %edi,%esi ++ xorl %edi,%edx ++ ++ roll $22,%edx ++ movl %edx,%edi ++ xorl %esi,%edx ++ andl $0x03fc03fc,%edx ++ xorl %edx,%edi ++ xorl %edx,%esi ++ ++ roll $9,%edi ++ movl %edi,%edx ++ xorl %esi,%edi ++ andl $0xaaaaaaaa,%edi ++ xorl %edi,%edx ++ xorl %edi,%esi ++ ++ rorl $3,%edx ++ rorl $2,%esi ++ movl %esi,4(%ebx) ++ movl 36(%esp),%eax ++ movl %edx,(%ebx) ++ movl 40(%esp),%edi ++ movl 44(%esp),%esi ++ movl $1,8(%esp) ++ movl %eax,4(%esp) ++ movl %ebx,(%esp) ++ call L_DES_encrypt2_begin ++ movl $0,8(%esp) ++ movl %edi,4(%esp) ++ movl %ebx,(%esp) ++ call L_DES_encrypt2_begin ++ movl $1,8(%esp) ++ movl %esi,4(%esp) ++ movl %ebx,(%esp) ++ call L_DES_encrypt2_begin ++ addl $12,%esp ++ movl (%ebx),%edi ++ movl 4(%ebx),%esi ++ ++ # FP ++ roll $2,%esi ++ roll $3,%edi ++ movl %edi,%eax ++ xorl %esi,%edi ++ andl $0xaaaaaaaa,%edi ++ xorl %edi,%eax ++ xorl %edi,%esi ++ ++ roll $23,%eax ++ movl %eax,%edi ++ xorl %esi,%eax ++ andl $0x03fc03fc,%eax ++ xorl %eax,%edi ++ xorl %eax,%esi ++ ++ roll $10,%edi ++ movl %edi,%eax ++ xorl %esi,%edi ++ andl $0x33333333,%edi ++ xorl %edi,%eax ++ xorl %edi,%esi ++ ++ roll $18,%esi ++ movl %esi,%edi ++ xorl %eax,%esi ++ andl $0xfff0000f,%esi ++ xorl %esi,%edi ++ xorl %esi,%eax ++ ++ roll $12,%edi ++ movl %edi,%esi ++ xorl %eax,%edi ++ andl $0xf0f0f0f0,%edi ++ xorl %edi,%esi ++ xorl %edi,%eax ++ ++ rorl $4,%eax ++ movl %eax,(%ebx) ++ movl %esi,4(%ebx) ++ popl %edi ++ popl %esi ++ popl %ebp ++ popl %ebx ++ ret ++.globl _DES_decrypt3 ++.align 4 ++_DES_decrypt3: ++L_DES_decrypt3_begin: ++ pushl %ebx ++ movl 8(%esp),%ebx ++ pushl %ebp ++ pushl %esi ++ pushl %edi ++ ++ # Load the data words ++ movl (%ebx),%edi ++ movl 4(%ebx),%esi ++ subl $12,%esp ++ ++ # IP ++ roll $4,%edi ++ movl %edi,%edx ++ xorl %esi,%edi ++ andl $0xf0f0f0f0,%edi ++ xorl %edi,%edx ++ xorl %edi,%esi ++ ++ roll $20,%esi ++ movl %esi,%edi ++ xorl %edx,%esi ++ andl $0xfff0000f,%esi ++ xorl %esi,%edi ++ xorl %esi,%edx ++ ++ roll $14,%edi ++ movl %edi,%esi ++ xorl %edx,%edi ++ andl $0x33333333,%edi ++ xorl %edi,%esi ++ xorl %edi,%edx ++ ++ roll $22,%edx ++ movl %edx,%edi ++ xorl %esi,%edx ++ andl $0x03fc03fc,%edx ++ xorl %edx,%edi ++ xorl %edx,%esi ++ ++ roll $9,%edi ++ movl %edi,%edx ++ xorl %esi,%edi ++ andl $0xaaaaaaaa,%edi ++ xorl %edi,%edx ++ xorl %edi,%esi ++ ++ rorl $3,%edx ++ rorl $2,%esi ++ movl %esi,4(%ebx) ++ movl 36(%esp),%esi ++ movl %edx,(%ebx) ++ movl 40(%esp),%edi ++ movl 44(%esp),%eax ++ movl $0,8(%esp) ++ movl %eax,4(%esp) ++ movl %ebx,(%esp) ++ call L_DES_encrypt2_begin ++ movl $1,8(%esp) ++ movl %edi,4(%esp) ++ movl %ebx,(%esp) ++ call L_DES_encrypt2_begin ++ movl $0,8(%esp) ++ movl %esi,4(%esp) ++ movl %ebx,(%esp) ++ call L_DES_encrypt2_begin ++ addl $12,%esp ++ movl (%ebx),%edi ++ movl 4(%ebx),%esi ++ ++ # FP ++ roll $2,%esi ++ roll $3,%edi ++ movl %edi,%eax ++ xorl %esi,%edi ++ andl $0xaaaaaaaa,%edi ++ xorl %edi,%eax ++ xorl %edi,%esi ++ ++ roll $23,%eax ++ movl %eax,%edi ++ xorl %esi,%eax ++ andl $0x03fc03fc,%eax ++ xorl %eax,%edi ++ xorl %eax,%esi ++ ++ roll $10,%edi ++ movl %edi,%eax ++ xorl %esi,%edi ++ andl $0x33333333,%edi ++ xorl %edi,%eax ++ xorl %edi,%esi ++ ++ roll $18,%esi ++ movl %esi,%edi ++ xorl %eax,%esi ++ andl $0xfff0000f,%esi ++ xorl %esi,%edi ++ xorl %esi,%eax ++ ++ roll $12,%edi ++ movl %edi,%esi ++ xorl %eax,%edi ++ andl $0xf0f0f0f0,%edi ++ xorl %edi,%esi ++ xorl %edi,%eax ++ ++ rorl $4,%eax ++ movl %eax,(%ebx) ++ movl %esi,4(%ebx) ++ popl %edi ++ popl %esi ++ popl %ebp ++ popl %ebx ++ ret ++.globl _DES_ncbc_encrypt ++.align 4 ++_DES_ncbc_encrypt: ++L_DES_ncbc_encrypt_begin: ++ ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 28(%esp),%ebp ++ # getting iv ptr from parameter 4 ++ movl 36(%esp),%ebx ++ movl (%ebx),%esi ++ movl 4(%ebx),%edi ++ pushl %edi ++ pushl %esi ++ pushl %edi ++ pushl %esi ++ movl %esp,%ebx ++ movl 36(%esp),%esi ++ movl 40(%esp),%edi ++ # getting encrypt flag from parameter 5 ++ movl 56(%esp),%ecx ++ # get and push parameter 5 ++ pushl %ecx ++ # get and push parameter 3 ++ movl 52(%esp),%eax ++ pushl %eax ++ pushl %ebx ++ cmpl $0,%ecx ++ jz L006decrypt ++ andl $4294967288,%ebp ++ movl 12(%esp),%eax ++ movl 16(%esp),%ebx ++ jz L007encrypt_finish ++L008encrypt_loop: ++ movl (%esi),%ecx ++ movl 4(%esi),%edx ++ xorl %ecx,%eax ++ xorl %edx,%ebx ++ movl %eax,12(%esp) ++ movl %ebx,16(%esp) ++ call L_DES_encrypt1_begin ++ movl 12(%esp),%eax ++ movl 16(%esp),%ebx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ addl $8,%esi ++ addl $8,%edi ++ subl $8,%ebp ++ jnz L008encrypt_loop ++L007encrypt_finish: ++ movl 56(%esp),%ebp ++ andl $7,%ebp ++ jz L009finish ++ call L010PIC_point ++L010PIC_point: ++ popl %edx ++ leal L011cbc_enc_jmp_table-L010PIC_point(%edx),%ecx ++ movl (%ecx,%ebp,4),%ebp ++ addl %edx,%ebp ++ xorl %ecx,%ecx ++ xorl %edx,%edx ++ jmp *%ebp ++L012ej7: ++ movb 6(%esi),%dh ++ shll $8,%edx ++L013ej6: ++ movb 5(%esi),%dh ++L014ej5: ++ movb 4(%esi),%dl ++L015ej4: ++ movl (%esi),%ecx ++ jmp L016ejend ++L017ej3: ++ movb 2(%esi),%ch ++ shll $8,%ecx ++L018ej2: ++ movb 1(%esi),%ch ++L019ej1: ++ movb (%esi),%cl ++L016ejend: ++ xorl %ecx,%eax ++ xorl %edx,%ebx ++ movl %eax,12(%esp) ++ movl %ebx,16(%esp) ++ call L_DES_encrypt1_begin ++ movl 12(%esp),%eax ++ movl 16(%esp),%ebx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ jmp L009finish ++L006decrypt: ++ andl $4294967288,%ebp ++ movl 20(%esp),%eax ++ movl 24(%esp),%ebx ++ jz L020decrypt_finish ++L021decrypt_loop: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl %eax,12(%esp) ++ movl %ebx,16(%esp) ++ call L_DES_encrypt1_begin ++ movl 12(%esp),%eax ++ movl 16(%esp),%ebx ++ movl 20(%esp),%ecx ++ movl 24(%esp),%edx ++ xorl %eax,%ecx ++ xorl %ebx,%edx ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl %ecx,(%edi) ++ movl %edx,4(%edi) ++ movl %eax,20(%esp) ++ movl %ebx,24(%esp) ++ addl $8,%esi ++ addl $8,%edi ++ subl $8,%ebp ++ jnz L021decrypt_loop ++L020decrypt_finish: ++ movl 56(%esp),%ebp ++ andl $7,%ebp ++ jz L009finish ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl %eax,12(%esp) ++ movl %ebx,16(%esp) ++ call L_DES_encrypt1_begin ++ movl 12(%esp),%eax ++ movl 16(%esp),%ebx ++ movl 20(%esp),%ecx ++ movl 24(%esp),%edx ++ xorl %eax,%ecx ++ xorl %ebx,%edx ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++L022dj7: ++ rorl $16,%edx ++ movb %dl,6(%edi) ++ shrl $16,%edx ++L023dj6: ++ movb %dh,5(%edi) ++L024dj5: ++ movb %dl,4(%edi) ++L025dj4: ++ movl %ecx,(%edi) ++ jmp L026djend ++L027dj3: ++ rorl $16,%ecx ++ movb %cl,2(%edi) ++ shll $16,%ecx ++L028dj2: ++ movb %ch,1(%esi) ++L029dj1: ++ movb %cl,(%esi) ++L026djend: ++ jmp L009finish ++L009finish: ++ movl 64(%esp),%ecx ++ addl $28,%esp ++ movl %eax,(%ecx) ++ movl %ebx,4(%ecx) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 6,0x90 ++L011cbc_enc_jmp_table: ++.long 0 ++.long L019ej1-L010PIC_point ++.long L018ej2-L010PIC_point ++.long L017ej3-L010PIC_point ++.long L015ej4-L010PIC_point ++.long L014ej5-L010PIC_point ++.long L013ej6-L010PIC_point ++.long L012ej7-L010PIC_point ++.align 6,0x90 ++.globl _DES_ede3_cbc_encrypt ++.align 4 ++_DES_ede3_cbc_encrypt: ++L_DES_ede3_cbc_encrypt_begin: ++ ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 28(%esp),%ebp ++ # getting iv ptr from parameter 6 ++ movl 44(%esp),%ebx ++ movl (%ebx),%esi ++ movl 4(%ebx),%edi ++ pushl %edi ++ pushl %esi ++ pushl %edi ++ pushl %esi ++ movl %esp,%ebx ++ movl 36(%esp),%esi ++ movl 40(%esp),%edi ++ # getting encrypt flag from parameter 7 ++ movl 64(%esp),%ecx ++ # get and push parameter 5 ++ movl 56(%esp),%eax ++ pushl %eax ++ # get and push parameter 4 ++ movl 56(%esp),%eax ++ pushl %eax ++ # get and push parameter 3 ++ movl 56(%esp),%eax ++ pushl %eax ++ pushl %ebx ++ cmpl $0,%ecx ++ jz L030decrypt ++ andl $4294967288,%ebp ++ movl 16(%esp),%eax ++ movl 20(%esp),%ebx ++ jz L031encrypt_finish ++L032encrypt_loop: ++ movl (%esi),%ecx ++ movl 4(%esi),%edx ++ xorl %ecx,%eax ++ xorl %edx,%ebx ++ movl %eax,16(%esp) ++ movl %ebx,20(%esp) ++ call L_DES_encrypt3_begin ++ movl 16(%esp),%eax ++ movl 20(%esp),%ebx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ addl $8,%esi ++ addl $8,%edi ++ subl $8,%ebp ++ jnz L032encrypt_loop ++L031encrypt_finish: ++ movl 60(%esp),%ebp ++ andl $7,%ebp ++ jz L033finish ++ call L034PIC_point ++L034PIC_point: ++ popl %edx ++ leal L035cbc_enc_jmp_table-L034PIC_point(%edx),%ecx ++ movl (%ecx,%ebp,4),%ebp ++ addl %edx,%ebp ++ xorl %ecx,%ecx ++ xorl %edx,%edx ++ jmp *%ebp ++L036ej7: ++ movb 6(%esi),%dh ++ shll $8,%edx ++L037ej6: ++ movb 5(%esi),%dh ++L038ej5: ++ movb 4(%esi),%dl ++L039ej4: ++ movl (%esi),%ecx ++ jmp L040ejend ++L041ej3: ++ movb 2(%esi),%ch ++ shll $8,%ecx ++L042ej2: ++ movb 1(%esi),%ch ++L043ej1: ++ movb (%esi),%cl ++L040ejend: ++ xorl %ecx,%eax ++ xorl %edx,%ebx ++ movl %eax,16(%esp) ++ movl %ebx,20(%esp) ++ call L_DES_encrypt3_begin ++ movl 16(%esp),%eax ++ movl 20(%esp),%ebx ++ movl %eax,(%edi) ++ movl %ebx,4(%edi) ++ jmp L033finish ++L030decrypt: ++ andl $4294967288,%ebp ++ movl 24(%esp),%eax ++ movl 28(%esp),%ebx ++ jz L044decrypt_finish ++L045decrypt_loop: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl %eax,16(%esp) ++ movl %ebx,20(%esp) ++ call L_DES_decrypt3_begin ++ movl 16(%esp),%eax ++ movl 20(%esp),%ebx ++ movl 24(%esp),%ecx ++ movl 28(%esp),%edx ++ xorl %eax,%ecx ++ xorl %ebx,%edx ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl %ecx,(%edi) ++ movl %edx,4(%edi) ++ movl %eax,24(%esp) ++ movl %ebx,28(%esp) ++ addl $8,%esi ++ addl $8,%edi ++ subl $8,%ebp ++ jnz L045decrypt_loop ++L044decrypt_finish: ++ movl 60(%esp),%ebp ++ andl $7,%ebp ++ jz L033finish ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl %eax,16(%esp) ++ movl %ebx,20(%esp) ++ call L_DES_decrypt3_begin ++ movl 16(%esp),%eax ++ movl 20(%esp),%ebx ++ movl 24(%esp),%ecx ++ movl 28(%esp),%edx ++ xorl %eax,%ecx ++ xorl %ebx,%edx ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++L046dj7: ++ rorl $16,%edx ++ movb %dl,6(%edi) ++ shrl $16,%edx ++L047dj6: ++ movb %dh,5(%edi) ++L048dj5: ++ movb %dl,4(%edi) ++L049dj4: ++ movl %ecx,(%edi) ++ jmp L050djend ++L051dj3: ++ rorl $16,%ecx ++ movb %cl,2(%edi) ++ shll $16,%ecx ++L052dj2: ++ movb %ch,1(%esi) ++L053dj1: ++ movb %cl,(%esi) ++L050djend: ++ jmp L033finish ++L033finish: ++ movl 76(%esp),%ecx ++ addl $32,%esp ++ movl %eax,(%ecx) ++ movl %ebx,4(%ecx) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 6,0x90 ++L035cbc_enc_jmp_table: ++.long 0 ++.long L043ej1-L034PIC_point ++.long L042ej2-L034PIC_point ++.long L041ej3-L034PIC_point ++.long L039ej4-L034PIC_point ++.long L038ej5-L034PIC_point ++.long L037ej6-L034PIC_point ++.long L036ej7-L034PIC_point ++.align 6,0x90 ++.align 6,0x90 ++_DES_SPtrans: ++.long 34080768,524288,33554434,34080770 ++.long 33554432,526338,524290,33554434 ++.long 526338,34080768,34078720,2050 ++.long 33556482,33554432,0,524290 ++.long 524288,2,33556480,526336 ++.long 34080770,34078720,2050,33556480 ++.long 2,2048,526336,34078722 ++.long 2048,33556482,34078722,0 ++.long 0,34080770,33556480,524290 ++.long 34080768,524288,2050,33556480 ++.long 34078722,2048,526336,33554434 ++.long 526338,2,33554434,34078720 ++.long 34080770,526336,34078720,33556482 ++.long 33554432,2050,524290,0 ++.long 524288,33554432,33556482,34080768 ++.long 2,34078722,2048,526338 ++.long 1074823184,0,1081344,1074790400 ++.long 1073741840,32784,1073774592,1081344 ++.long 32768,1074790416,16,1073774592 ++.long 1048592,1074823168,1074790400,16 ++.long 1048576,1073774608,1074790416,32768 ++.long 1081360,1073741824,0,1048592 ++.long 1073774608,1081360,1074823168,1073741840 ++.long 1073741824,1048576,32784,1074823184 ++.long 1048592,1074823168,1073774592,1081360 ++.long 1074823184,1048592,1073741840,0 ++.long 1073741824,32784,1048576,1074790416 ++.long 32768,1073741824,1081360,1073774608 ++.long 1074823168,32768,0,1073741840 ++.long 16,1074823184,1081344,1074790400 ++.long 1074790416,1048576,32784,1073774592 ++.long 1073774608,16,1074790400,1081344 ++.long 67108865,67371264,256,67109121 ++.long 262145,67108864,67109121,262400 ++.long 67109120,262144,67371008,1 ++.long 67371265,257,1,67371009 ++.long 0,262145,67371264,256 ++.long 257,67371265,262144,67108865 ++.long 67371009,67109120,262401,67371008 ++.long 262400,0,67108864,262401 ++.long 67371264,256,1,262144 ++.long 257,262145,67371008,67109121 ++.long 0,67371264,262400,67371009 ++.long 262145,67108864,67371265,1 ++.long 262401,67108865,67108864,67371265 ++.long 262144,67109120,67109121,262400 ++.long 67109120,0,67371009,257 ++.long 67108865,262401,256,67371008 ++.long 4198408,268439552,8,272633864 ++.long 0,272629760,268439560,4194312 ++.long 272633856,268435464,268435456,4104 ++.long 268435464,4198408,4194304,268435456 ++.long 272629768,4198400,4096,8 ++.long 4198400,268439560,272629760,4096 ++.long 4104,0,4194312,272633856 ++.long 268439552,272629768,272633864,4194304 ++.long 272629768,4104,4194304,268435464 ++.long 4198400,268439552,8,272629760 ++.long 268439560,0,4096,4194312 ++.long 0,272629768,272633856,4096 ++.long 268435456,272633864,4198408,4194304 ++.long 272633864,8,268439552,4198408 ++.long 4194312,4198400,272629760,268439560 ++.long 4104,268435456,268435464,272633856 ++.long 134217728,65536,1024,134284320 ++.long 134283296,134218752,66592,134283264 ++.long 65536,32,134217760,66560 ++.long 134218784,134283296,134284288,0 ++.long 66560,134217728,65568,1056 ++.long 134218752,66592,0,134217760 ++.long 32,134218784,134284320,65568 ++.long 134283264,1024,1056,134284288 ++.long 134284288,134218784,65568,134283264 ++.long 65536,32,134217760,134218752 ++.long 134217728,66560,134284320,0 ++.long 66592,134217728,1024,65568 ++.long 134218784,1024,0,134284320 ++.long 134283296,134284288,1056,65536 ++.long 66560,134283296,134218752,1056 ++.long 32,66592,134283264,134217760 ++.long 2147483712,2097216,0,2149588992 ++.long 2097216,8192,2147491904,2097152 ++.long 8256,2149589056,2105344,2147483648 ++.long 2147491840,2147483712,2149580800,2105408 ++.long 2097152,2147491904,2149580864,0 ++.long 8192,64,2149588992,2149580864 ++.long 2149589056,2149580800,2147483648,8256 ++.long 64,2105344,2105408,2147491840 ++.long 8256,2147483648,2147491840,2105408 ++.long 2149588992,2097216,0,2147491840 ++.long 2147483648,8192,2149580864,2097152 ++.long 2097216,2149589056,2105344,64 ++.long 2149589056,2105344,2097152,2147491904 ++.long 2147483712,2149580800,2105408,0 ++.long 8192,2147483712,2147491904,2149588992 ++.long 2149580800,8256,64,2149580864 ++.long 16384,512,16777728,16777220 ++.long 16794116,16388,16896,0 ++.long 16777216,16777732,516,16793600 ++.long 4,16794112,16793600,516 ++.long 16777732,16384,16388,16794116 ++.long 0,16777728,16777220,16896 ++.long 16793604,16900,16794112,4 ++.long 16900,16793604,512,16777216 ++.long 16900,16793600,16793604,516 ++.long 16384,512,16777216,16793604 ++.long 16777732,16900,16896,0 ++.long 512,16777220,4,16777728 ++.long 0,16777732,16777728,16896 ++.long 516,16384,16794116,16777216 ++.long 16794112,4,16388,16794116 ++.long 16777220,16794112,16793600,16388 ++.long 545259648,545390592,131200,0 ++.long 537001984,8388736,545259520,545390720 ++.long 128,536870912,8519680,131200 ++.long 8519808,537002112,536871040,545259520 ++.long 131072,8519808,8388736,537001984 ++.long 545390720,536871040,0,8519680 ++.long 536870912,8388608,537002112,545259648 ++.long 8388608,131072,545390592,128 ++.long 8388608,131072,536871040,545390720 ++.long 131200,536870912,0,8519680 ++.long 545259648,537002112,537001984,8388736 ++.long 545390592,128,8388736,537001984 ++.long 545390720,8388608,545259520,536871040 ++.long 8519680,131200,537002112,545259520 ++.long 128,545390592,8519808,0 ++.long 536870912,545259648,131072,8519808 +diff --git a/crypto/md5/asm/md5-586-mac.S b/crypto/md5/asm/md5-586-mac.S +new file mode 100644 +index 0000000..8413d0c +--- /dev/null ++++ b/crypto/md5/asm/md5-586-mac.S +@@ -0,0 +1,677 @@ ++.file "crypto/md5/asm/md5-586.s" ++.text ++.globl _md5_block_asm_data_order ++.align 4 ++_md5_block_asm_data_order: ++L_md5_block_asm_data_order_begin: ++ pushl %esi ++ pushl %edi ++ movl 12(%esp),%edi ++ movl 16(%esp),%esi ++ movl 20(%esp),%ecx ++ pushl %ebp ++ shll $6,%ecx ++ pushl %ebx ++ addl %esi,%ecx ++ subl $64,%ecx ++ movl (%edi),%eax ++ pushl %ecx ++ movl 4(%edi),%ebx ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++L000start: ++ ++ # R0 section ++ movl %ecx,%edi ++ movl (%esi),%ebp ++ # R0 0 ++ xorl %edx,%edi ++ andl %ebx,%edi ++ leal 3614090360(%eax,%ebp,1),%eax ++ xorl %edx,%edi ++ addl %edi,%eax ++ movl %ebx,%edi ++ roll $7,%eax ++ movl 4(%esi),%ebp ++ addl %ebx,%eax ++ # R0 1 ++ xorl %ecx,%edi ++ andl %eax,%edi ++ leal 3905402710(%edx,%ebp,1),%edx ++ xorl %ecx,%edi ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $12,%edx ++ movl 8(%esi),%ebp ++ addl %eax,%edx ++ # R0 2 ++ xorl %ebx,%edi ++ andl %edx,%edi ++ leal 606105819(%ecx,%ebp,1),%ecx ++ xorl %ebx,%edi ++ addl %edi,%ecx ++ movl %edx,%edi ++ roll $17,%ecx ++ movl 12(%esi),%ebp ++ addl %edx,%ecx ++ # R0 3 ++ xorl %eax,%edi ++ andl %ecx,%edi ++ leal 3250441966(%ebx,%ebp,1),%ebx ++ xorl %eax,%edi ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $22,%ebx ++ movl 16(%esi),%ebp ++ addl %ecx,%ebx ++ # R0 4 ++ xorl %edx,%edi ++ andl %ebx,%edi ++ leal 4118548399(%eax,%ebp,1),%eax ++ xorl %edx,%edi ++ addl %edi,%eax ++ movl %ebx,%edi ++ roll $7,%eax ++ movl 20(%esi),%ebp ++ addl %ebx,%eax ++ # R0 5 ++ xorl %ecx,%edi ++ andl %eax,%edi ++ leal 1200080426(%edx,%ebp,1),%edx ++ xorl %ecx,%edi ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $12,%edx ++ movl 24(%esi),%ebp ++ addl %eax,%edx ++ # R0 6 ++ xorl %ebx,%edi ++ andl %edx,%edi ++ leal 2821735955(%ecx,%ebp,1),%ecx ++ xorl %ebx,%edi ++ addl %edi,%ecx ++ movl %edx,%edi ++ roll $17,%ecx ++ movl 28(%esi),%ebp ++ addl %edx,%ecx ++ # R0 7 ++ xorl %eax,%edi ++ andl %ecx,%edi ++ leal 4249261313(%ebx,%ebp,1),%ebx ++ xorl %eax,%edi ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $22,%ebx ++ movl 32(%esi),%ebp ++ addl %ecx,%ebx ++ # R0 8 ++ xorl %edx,%edi ++ andl %ebx,%edi ++ leal 1770035416(%eax,%ebp,1),%eax ++ xorl %edx,%edi ++ addl %edi,%eax ++ movl %ebx,%edi ++ roll $7,%eax ++ movl 36(%esi),%ebp ++ addl %ebx,%eax ++ # R0 9 ++ xorl %ecx,%edi ++ andl %eax,%edi ++ leal 2336552879(%edx,%ebp,1),%edx ++ xorl %ecx,%edi ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $12,%edx ++ movl 40(%esi),%ebp ++ addl %eax,%edx ++ # R0 10 ++ xorl %ebx,%edi ++ andl %edx,%edi ++ leal 4294925233(%ecx,%ebp,1),%ecx ++ xorl %ebx,%edi ++ addl %edi,%ecx ++ movl %edx,%edi ++ roll $17,%ecx ++ movl 44(%esi),%ebp ++ addl %edx,%ecx ++ # R0 11 ++ xorl %eax,%edi ++ andl %ecx,%edi ++ leal 2304563134(%ebx,%ebp,1),%ebx ++ xorl %eax,%edi ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $22,%ebx ++ movl 48(%esi),%ebp ++ addl %ecx,%ebx ++ # R0 12 ++ xorl %edx,%edi ++ andl %ebx,%edi ++ leal 1804603682(%eax,%ebp,1),%eax ++ xorl %edx,%edi ++ addl %edi,%eax ++ movl %ebx,%edi ++ roll $7,%eax ++ movl 52(%esi),%ebp ++ addl %ebx,%eax ++ # R0 13 ++ xorl %ecx,%edi ++ andl %eax,%edi ++ leal 4254626195(%edx,%ebp,1),%edx ++ xorl %ecx,%edi ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $12,%edx ++ movl 56(%esi),%ebp ++ addl %eax,%edx ++ # R0 14 ++ xorl %ebx,%edi ++ andl %edx,%edi ++ leal 2792965006(%ecx,%ebp,1),%ecx ++ xorl %ebx,%edi ++ addl %edi,%ecx ++ movl %edx,%edi ++ roll $17,%ecx ++ movl 60(%esi),%ebp ++ addl %edx,%ecx ++ # R0 15 ++ xorl %eax,%edi ++ andl %ecx,%edi ++ leal 1236535329(%ebx,%ebp,1),%ebx ++ xorl %eax,%edi ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $22,%ebx ++ movl 4(%esi),%ebp ++ addl %ecx,%ebx ++ ++ # R1 section ++ # R1 16 ++ leal 4129170786(%eax,%ebp,1),%eax ++ xorl %ebx,%edi ++ andl %edx,%edi ++ movl 24(%esi),%ebp ++ xorl %ecx,%edi ++ addl %edi,%eax ++ movl %ebx,%edi ++ roll $5,%eax ++ addl %ebx,%eax ++ # R1 17 ++ leal 3225465664(%edx,%ebp,1),%edx ++ xorl %eax,%edi ++ andl %ecx,%edi ++ movl 44(%esi),%ebp ++ xorl %ebx,%edi ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $9,%edx ++ addl %eax,%edx ++ # R1 18 ++ leal 643717713(%ecx,%ebp,1),%ecx ++ xorl %edx,%edi ++ andl %ebx,%edi ++ movl (%esi),%ebp ++ xorl %eax,%edi ++ addl %edi,%ecx ++ movl %edx,%edi ++ roll $14,%ecx ++ addl %edx,%ecx ++ # R1 19 ++ leal 3921069994(%ebx,%ebp,1),%ebx ++ xorl %ecx,%edi ++ andl %eax,%edi ++ movl 20(%esi),%ebp ++ xorl %edx,%edi ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $20,%ebx ++ addl %ecx,%ebx ++ # R1 20 ++ leal 3593408605(%eax,%ebp,1),%eax ++ xorl %ebx,%edi ++ andl %edx,%edi ++ movl 40(%esi),%ebp ++ xorl %ecx,%edi ++ addl %edi,%eax ++ movl %ebx,%edi ++ roll $5,%eax ++ addl %ebx,%eax ++ # R1 21 ++ leal 38016083(%edx,%ebp,1),%edx ++ xorl %eax,%edi ++ andl %ecx,%edi ++ movl 60(%esi),%ebp ++ xorl %ebx,%edi ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $9,%edx ++ addl %eax,%edx ++ # R1 22 ++ leal 3634488961(%ecx,%ebp,1),%ecx ++ xorl %edx,%edi ++ andl %ebx,%edi ++ movl 16(%esi),%ebp ++ xorl %eax,%edi ++ addl %edi,%ecx ++ movl %edx,%edi ++ roll $14,%ecx ++ addl %edx,%ecx ++ # R1 23 ++ leal 3889429448(%ebx,%ebp,1),%ebx ++ xorl %ecx,%edi ++ andl %eax,%edi ++ movl 36(%esi),%ebp ++ xorl %edx,%edi ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $20,%ebx ++ addl %ecx,%ebx ++ # R1 24 ++ leal 568446438(%eax,%ebp,1),%eax ++ xorl %ebx,%edi ++ andl %edx,%edi ++ movl 56(%esi),%ebp ++ xorl %ecx,%edi ++ addl %edi,%eax ++ movl %ebx,%edi ++ roll $5,%eax ++ addl %ebx,%eax ++ # R1 25 ++ leal 3275163606(%edx,%ebp,1),%edx ++ xorl %eax,%edi ++ andl %ecx,%edi ++ movl 12(%esi),%ebp ++ xorl %ebx,%edi ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $9,%edx ++ addl %eax,%edx ++ # R1 26 ++ leal 4107603335(%ecx,%ebp,1),%ecx ++ xorl %edx,%edi ++ andl %ebx,%edi ++ movl 32(%esi),%ebp ++ xorl %eax,%edi ++ addl %edi,%ecx ++ movl %edx,%edi ++ roll $14,%ecx ++ addl %edx,%ecx ++ # R1 27 ++ leal 1163531501(%ebx,%ebp,1),%ebx ++ xorl %ecx,%edi ++ andl %eax,%edi ++ movl 52(%esi),%ebp ++ xorl %edx,%edi ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $20,%ebx ++ addl %ecx,%ebx ++ # R1 28 ++ leal 2850285829(%eax,%ebp,1),%eax ++ xorl %ebx,%edi ++ andl %edx,%edi ++ movl 8(%esi),%ebp ++ xorl %ecx,%edi ++ addl %edi,%eax ++ movl %ebx,%edi ++ roll $5,%eax ++ addl %ebx,%eax ++ # R1 29 ++ leal 4243563512(%edx,%ebp,1),%edx ++ xorl %eax,%edi ++ andl %ecx,%edi ++ movl 28(%esi),%ebp ++ xorl %ebx,%edi ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $9,%edx ++ addl %eax,%edx ++ # R1 30 ++ leal 1735328473(%ecx,%ebp,1),%ecx ++ xorl %edx,%edi ++ andl %ebx,%edi ++ movl 48(%esi),%ebp ++ xorl %eax,%edi ++ addl %edi,%ecx ++ movl %edx,%edi ++ roll $14,%ecx ++ addl %edx,%ecx ++ # R1 31 ++ leal 2368359562(%ebx,%ebp,1),%ebx ++ xorl %ecx,%edi ++ andl %eax,%edi ++ movl 20(%esi),%ebp ++ xorl %edx,%edi ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $20,%ebx ++ addl %ecx,%ebx ++ ++ # R2 section ++ # R2 32 ++ xorl %edx,%edi ++ xorl %ebx,%edi ++ leal 4294588738(%eax,%ebp,1),%eax ++ addl %edi,%eax ++ roll $4,%eax ++ movl 32(%esi),%ebp ++ movl %ebx,%edi ++ # R2 33 ++ leal 2272392833(%edx,%ebp,1),%edx ++ addl %ebx,%eax ++ xorl %ecx,%edi ++ xorl %eax,%edi ++ movl 44(%esi),%ebp ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $11,%edx ++ addl %eax,%edx ++ # R2 34 ++ xorl %ebx,%edi ++ xorl %edx,%edi ++ leal 1839030562(%ecx,%ebp,1),%ecx ++ addl %edi,%ecx ++ roll $16,%ecx ++ movl 56(%esi),%ebp ++ movl %edx,%edi ++ # R2 35 ++ leal 4259657740(%ebx,%ebp,1),%ebx ++ addl %edx,%ecx ++ xorl %eax,%edi ++ xorl %ecx,%edi ++ movl 4(%esi),%ebp ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $23,%ebx ++ addl %ecx,%ebx ++ # R2 36 ++ xorl %edx,%edi ++ xorl %ebx,%edi ++ leal 2763975236(%eax,%ebp,1),%eax ++ addl %edi,%eax ++ roll $4,%eax ++ movl 16(%esi),%ebp ++ movl %ebx,%edi ++ # R2 37 ++ leal 1272893353(%edx,%ebp,1),%edx ++ addl %ebx,%eax ++ xorl %ecx,%edi ++ xorl %eax,%edi ++ movl 28(%esi),%ebp ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $11,%edx ++ addl %eax,%edx ++ # R2 38 ++ xorl %ebx,%edi ++ xorl %edx,%edi ++ leal 4139469664(%ecx,%ebp,1),%ecx ++ addl %edi,%ecx ++ roll $16,%ecx ++ movl 40(%esi),%ebp ++ movl %edx,%edi ++ # R2 39 ++ leal 3200236656(%ebx,%ebp,1),%ebx ++ addl %edx,%ecx ++ xorl %eax,%edi ++ xorl %ecx,%edi ++ movl 52(%esi),%ebp ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $23,%ebx ++ addl %ecx,%ebx ++ # R2 40 ++ xorl %edx,%edi ++ xorl %ebx,%edi ++ leal 681279174(%eax,%ebp,1),%eax ++ addl %edi,%eax ++ roll $4,%eax ++ movl (%esi),%ebp ++ movl %ebx,%edi ++ # R2 41 ++ leal 3936430074(%edx,%ebp,1),%edx ++ addl %ebx,%eax ++ xorl %ecx,%edi ++ xorl %eax,%edi ++ movl 12(%esi),%ebp ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $11,%edx ++ addl %eax,%edx ++ # R2 42 ++ xorl %ebx,%edi ++ xorl %edx,%edi ++ leal 3572445317(%ecx,%ebp,1),%ecx ++ addl %edi,%ecx ++ roll $16,%ecx ++ movl 24(%esi),%ebp ++ movl %edx,%edi ++ # R2 43 ++ leal 76029189(%ebx,%ebp,1),%ebx ++ addl %edx,%ecx ++ xorl %eax,%edi ++ xorl %ecx,%edi ++ movl 36(%esi),%ebp ++ addl %edi,%ebx ++ movl %ecx,%edi ++ roll $23,%ebx ++ addl %ecx,%ebx ++ # R2 44 ++ xorl %edx,%edi ++ xorl %ebx,%edi ++ leal 3654602809(%eax,%ebp,1),%eax ++ addl %edi,%eax ++ roll $4,%eax ++ movl 48(%esi),%ebp ++ movl %ebx,%edi ++ # R2 45 ++ leal 3873151461(%edx,%ebp,1),%edx ++ addl %ebx,%eax ++ xorl %ecx,%edi ++ xorl %eax,%edi ++ movl 60(%esi),%ebp ++ addl %edi,%edx ++ movl %eax,%edi ++ roll $11,%edx ++ addl %eax,%edx ++ # R2 46 ++ xorl %ebx,%edi ++ xorl %edx,%edi ++ leal 530742520(%ecx,%ebp,1),%ecx ++ addl %edi,%ecx ++ roll $16,%ecx ++ movl 8(%esi),%ebp ++ movl %edx,%edi ++ # R2 47 ++ leal 3299628645(%ebx,%ebp,1),%ebx ++ addl %edx,%ecx ++ xorl %eax,%edi ++ xorl %ecx,%edi ++ movl (%esi),%ebp ++ addl %edi,%ebx ++ movl $-1,%edi ++ roll $23,%ebx ++ addl %ecx,%ebx ++ ++ # R3 section ++ # R3 48 ++ xorl %edx,%edi ++ orl %ebx,%edi ++ leal 4096336452(%eax,%ebp,1),%eax ++ xorl %ecx,%edi ++ movl 28(%esi),%ebp ++ addl %edi,%eax ++ movl $-1,%edi ++ roll $6,%eax ++ xorl %ecx,%edi ++ addl %ebx,%eax ++ # R3 49 ++ orl %eax,%edi ++ leal 1126891415(%edx,%ebp,1),%edx ++ xorl %ebx,%edi ++ movl 56(%esi),%ebp ++ addl %edi,%edx ++ movl $-1,%edi ++ roll $10,%edx ++ xorl %ebx,%edi ++ addl %eax,%edx ++ # R3 50 ++ orl %edx,%edi ++ leal 2878612391(%ecx,%ebp,1),%ecx ++ xorl %eax,%edi ++ movl 20(%esi),%ebp ++ addl %edi,%ecx ++ movl $-1,%edi ++ roll $15,%ecx ++ xorl %eax,%edi ++ addl %edx,%ecx ++ # R3 51 ++ orl %ecx,%edi ++ leal 4237533241(%ebx,%ebp,1),%ebx ++ xorl %edx,%edi ++ movl 48(%esi),%ebp ++ addl %edi,%ebx ++ movl $-1,%edi ++ roll $21,%ebx ++ xorl %edx,%edi ++ addl %ecx,%ebx ++ # R3 52 ++ orl %ebx,%edi ++ leal 1700485571(%eax,%ebp,1),%eax ++ xorl %ecx,%edi ++ movl 12(%esi),%ebp ++ addl %edi,%eax ++ movl $-1,%edi ++ roll $6,%eax ++ xorl %ecx,%edi ++ addl %ebx,%eax ++ # R3 53 ++ orl %eax,%edi ++ leal 2399980690(%edx,%ebp,1),%edx ++ xorl %ebx,%edi ++ movl 40(%esi),%ebp ++ addl %edi,%edx ++ movl $-1,%edi ++ roll $10,%edx ++ xorl %ebx,%edi ++ addl %eax,%edx ++ # R3 54 ++ orl %edx,%edi ++ leal 4293915773(%ecx,%ebp,1),%ecx ++ xorl %eax,%edi ++ movl 4(%esi),%ebp ++ addl %edi,%ecx ++ movl $-1,%edi ++ roll $15,%ecx ++ xorl %eax,%edi ++ addl %edx,%ecx ++ # R3 55 ++ orl %ecx,%edi ++ leal 2240044497(%ebx,%ebp,1),%ebx ++ xorl %edx,%edi ++ movl 32(%esi),%ebp ++ addl %edi,%ebx ++ movl $-1,%edi ++ roll $21,%ebx ++ xorl %edx,%edi ++ addl %ecx,%ebx ++ # R3 56 ++ orl %ebx,%edi ++ leal 1873313359(%eax,%ebp,1),%eax ++ xorl %ecx,%edi ++ movl 60(%esi),%ebp ++ addl %edi,%eax ++ movl $-1,%edi ++ roll $6,%eax ++ xorl %ecx,%edi ++ addl %ebx,%eax ++ # R3 57 ++ orl %eax,%edi ++ leal 4264355552(%edx,%ebp,1),%edx ++ xorl %ebx,%edi ++ movl 24(%esi),%ebp ++ addl %edi,%edx ++ movl $-1,%edi ++ roll $10,%edx ++ xorl %ebx,%edi ++ addl %eax,%edx ++ # R3 58 ++ orl %edx,%edi ++ leal 2734768916(%ecx,%ebp,1),%ecx ++ xorl %eax,%edi ++ movl 52(%esi),%ebp ++ addl %edi,%ecx ++ movl $-1,%edi ++ roll $15,%ecx ++ xorl %eax,%edi ++ addl %edx,%ecx ++ # R3 59 ++ orl %ecx,%edi ++ leal 1309151649(%ebx,%ebp,1),%ebx ++ xorl %edx,%edi ++ movl 16(%esi),%ebp ++ addl %edi,%ebx ++ movl $-1,%edi ++ roll $21,%ebx ++ xorl %edx,%edi ++ addl %ecx,%ebx ++ # R3 60 ++ orl %ebx,%edi ++ leal 4149444226(%eax,%ebp,1),%eax ++ xorl %ecx,%edi ++ movl 44(%esi),%ebp ++ addl %edi,%eax ++ movl $-1,%edi ++ roll $6,%eax ++ xorl %ecx,%edi ++ addl %ebx,%eax ++ # R3 61 ++ orl %eax,%edi ++ leal 3174756917(%edx,%ebp,1),%edx ++ xorl %ebx,%edi ++ movl 8(%esi),%ebp ++ addl %edi,%edx ++ movl $-1,%edi ++ roll $10,%edx ++ xorl %ebx,%edi ++ addl %eax,%edx ++ # R3 62 ++ orl %edx,%edi ++ leal 718787259(%ecx,%ebp,1),%ecx ++ xorl %eax,%edi ++ movl 36(%esi),%ebp ++ addl %edi,%ecx ++ movl $-1,%edi ++ roll $15,%ecx ++ xorl %eax,%edi ++ addl %edx,%ecx ++ # R3 63 ++ orl %ecx,%edi ++ leal 3951481745(%ebx,%ebp,1),%ebx ++ xorl %edx,%edi ++ movl 24(%esp),%ebp ++ addl %edi,%ebx ++ addl $64,%esi ++ roll $21,%ebx ++ movl (%ebp),%edi ++ addl %ecx,%ebx ++ addl %edi,%eax ++ movl 4(%ebp),%edi ++ addl %edi,%ebx ++ movl 8(%ebp),%edi ++ addl %edi,%ecx ++ movl 12(%ebp),%edi ++ addl %edi,%edx ++ movl %eax,(%ebp) ++ movl %ebx,4(%ebp) ++ movl (%esp),%edi ++ movl %ecx,8(%ebp) ++ movl %edx,12(%ebp) ++ cmpl %esi,%edi ++ jae L000start ++ popl %eax ++ popl %ebx ++ popl %ebp ++ popl %edi ++ popl %esi ++ ret +diff --git a/crypto/modes/asm/ghash-x86-mac.S b/crypto/modes/asm/ghash-x86-mac.S +new file mode 100644 +index 0000000..dc6ba14 +--- /dev/null ++++ b/crypto/modes/asm/ghash-x86-mac.S +@@ -0,0 +1,718 @@ ++.file "ghash-x86.s" ++.text ++.globl _gcm_gmult_4bit_x86 ++.align 4 ++_gcm_gmult_4bit_x86: ++L_gcm_gmult_4bit_x86_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ subl $84,%esp ++ movl 104(%esp),%edi ++ movl 108(%esp),%esi ++ movl (%edi),%ebp ++ movl 4(%edi),%edx ++ movl 8(%edi),%ecx ++ movl 12(%edi),%ebx ++ movl $0,16(%esp) ++ movl $471859200,20(%esp) ++ movl $943718400,24(%esp) ++ movl $610271232,28(%esp) ++ movl $1887436800,32(%esp) ++ movl $1822425088,36(%esp) ++ movl $1220542464,40(%esp) ++ movl $1423966208,44(%esp) ++ movl $3774873600,48(%esp) ++ movl $4246732800,52(%esp) ++ movl $3644850176,56(%esp) ++ movl $3311403008,60(%esp) ++ movl $2441084928,64(%esp) ++ movl $2376073216,68(%esp) ++ movl $2847932416,72(%esp) ++ movl $3051356160,76(%esp) ++ movl %ebp,(%esp) ++ movl %edx,4(%esp) ++ movl %ecx,8(%esp) ++ movl %ebx,12(%esp) ++ shrl $20,%ebx ++ andl $240,%ebx ++ movl 4(%esi,%ebx,1),%ebp ++ movl (%esi,%ebx,1),%edx ++ movl 12(%esi,%ebx,1),%ecx ++ movl 8(%esi,%ebx,1),%ebx ++ xorl %eax,%eax ++ movl $15,%edi ++ jmp L000x86_loop ++.align 4,0x90 ++L000x86_loop: ++ movb %bl,%al ++ shrdl $4,%ecx,%ebx ++ andb $15,%al ++ shrdl $4,%edx,%ecx ++ shrdl $4,%ebp,%edx ++ shrl $4,%ebp ++ xorl 16(%esp,%eax,4),%ebp ++ movb (%esp,%edi,1),%al ++ andb $240,%al ++ xorl 8(%esi,%eax,1),%ebx ++ xorl 12(%esi,%eax,1),%ecx ++ xorl (%esi,%eax,1),%edx ++ xorl 4(%esi,%eax,1),%ebp ++ decl %edi ++ js L001x86_break ++ movb %bl,%al ++ shrdl $4,%ecx,%ebx ++ andb $15,%al ++ shrdl $4,%edx,%ecx ++ shrdl $4,%ebp,%edx ++ shrl $4,%ebp ++ xorl 16(%esp,%eax,4),%ebp ++ movb (%esp,%edi,1),%al ++ shlb $4,%al ++ xorl 8(%esi,%eax,1),%ebx ++ xorl 12(%esi,%eax,1),%ecx ++ xorl (%esi,%eax,1),%edx ++ xorl 4(%esi,%eax,1),%ebp ++ jmp L000x86_loop ++.align 4,0x90 ++L001x86_break: ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ bswap %ebp ++ movl 104(%esp),%edi ++ movl %ebx,12(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,4(%edi) ++ movl %ebp,(%edi) ++ addl $84,%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _gcm_ghash_4bit_x86 ++.align 4 ++_gcm_ghash_4bit_x86: ++L_gcm_ghash_4bit_x86_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ subl $84,%esp ++ movl 104(%esp),%ebx ++ movl 108(%esp),%esi ++ movl 112(%esp),%edi ++ movl 116(%esp),%ecx ++ addl %edi,%ecx ++ movl %ecx,116(%esp) ++ movl (%ebx),%ebp ++ movl 4(%ebx),%edx ++ movl 8(%ebx),%ecx ++ movl 12(%ebx),%ebx ++ movl $0,16(%esp) ++ movl $471859200,20(%esp) ++ movl $943718400,24(%esp) ++ movl $610271232,28(%esp) ++ movl $1887436800,32(%esp) ++ movl $1822425088,36(%esp) ++ movl $1220542464,40(%esp) ++ movl $1423966208,44(%esp) ++ movl $3774873600,48(%esp) ++ movl $4246732800,52(%esp) ++ movl $3644850176,56(%esp) ++ movl $3311403008,60(%esp) ++ movl $2441084928,64(%esp) ++ movl $2376073216,68(%esp) ++ movl $2847932416,72(%esp) ++ movl $3051356160,76(%esp) ++.align 4,0x90 ++L002x86_outer_loop: ++ xorl 12(%edi),%ebx ++ xorl 8(%edi),%ecx ++ xorl 4(%edi),%edx ++ xorl (%edi),%ebp ++ movl %ebx,12(%esp) ++ movl %ecx,8(%esp) ++ movl %edx,4(%esp) ++ movl %ebp,(%esp) ++ shrl $20,%ebx ++ andl $240,%ebx ++ movl 4(%esi,%ebx,1),%ebp ++ movl (%esi,%ebx,1),%edx ++ movl 12(%esi,%ebx,1),%ecx ++ movl 8(%esi,%ebx,1),%ebx ++ xorl %eax,%eax ++ movl $15,%edi ++ jmp L003x86_loop ++.align 4,0x90 ++L003x86_loop: ++ movb %bl,%al ++ shrdl $4,%ecx,%ebx ++ andb $15,%al ++ shrdl $4,%edx,%ecx ++ shrdl $4,%ebp,%edx ++ shrl $4,%ebp ++ xorl 16(%esp,%eax,4),%ebp ++ movb (%esp,%edi,1),%al ++ andb $240,%al ++ xorl 8(%esi,%eax,1),%ebx ++ xorl 12(%esi,%eax,1),%ecx ++ xorl (%esi,%eax,1),%edx ++ xorl 4(%esi,%eax,1),%ebp ++ decl %edi ++ js L004x86_break ++ movb %bl,%al ++ shrdl $4,%ecx,%ebx ++ andb $15,%al ++ shrdl $4,%edx,%ecx ++ shrdl $4,%ebp,%edx ++ shrl $4,%ebp ++ xorl 16(%esp,%eax,4),%ebp ++ movb (%esp,%edi,1),%al ++ shlb $4,%al ++ xorl 8(%esi,%eax,1),%ebx ++ xorl 12(%esi,%eax,1),%ecx ++ xorl (%esi,%eax,1),%edx ++ xorl 4(%esi,%eax,1),%ebp ++ jmp L003x86_loop ++.align 4,0x90 ++L004x86_break: ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ bswap %ebp ++ movl 112(%esp),%edi ++ leal 16(%edi),%edi ++ cmpl 116(%esp),%edi ++ movl %edi,112(%esp) ++ jb L002x86_outer_loop ++ movl 104(%esp),%edi ++ movl %ebx,12(%edi) ++ movl %ecx,8(%edi) ++ movl %edx,4(%edi) ++ movl %ebp,(%edi) ++ addl $84,%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 4 ++__mmx_gmult_4bit_inner: ++ xorl %ecx,%ecx ++ movl %ebx,%edx ++ movb %dl,%cl ++ shlb $4,%cl ++ andl $240,%edx ++ movq 8(%esi,%ecx,1),%mm0 ++ movq (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 14(%edi),%cl ++ psllq $60,%mm2 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 13(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 12(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 11(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 10(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 9(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 8(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 7(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 6(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 5(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 4(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 3(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 2(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb 1(%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ movb (%edi),%cl ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movl %ecx,%edx ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ shlb $4,%cl ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%ecx,1),%mm0 ++ psllq $60,%mm2 ++ andl $240,%edx ++ pxor (%eax,%ebp,8),%mm1 ++ andl $15,%ebx ++ pxor (%esi,%ecx,1),%mm1 ++ movd %mm0,%ebp ++ pxor %mm2,%mm0 ++ psrlq $4,%mm0 ++ movq %mm1,%mm2 ++ psrlq $4,%mm1 ++ pxor 8(%esi,%edx,1),%mm0 ++ psllq $60,%mm2 ++ pxor (%eax,%ebx,8),%mm1 ++ andl $15,%ebp ++ pxor (%esi,%edx,1),%mm1 ++ movd %mm0,%ebx ++ pxor %mm2,%mm0 ++ movl 4(%eax,%ebp,8),%edi ++ psrlq $32,%mm0 ++ movd %mm1,%edx ++ psrlq $32,%mm1 ++ movd %mm0,%ecx ++ movd %mm1,%ebp ++ shll $4,%edi ++ bswap %ebx ++ bswap %edx ++ bswap %ecx ++ xorl %edi,%ebp ++ bswap %ebp ++ ret ++.globl _gcm_gmult_4bit_mmx ++.align 4 ++_gcm_gmult_4bit_mmx: ++L_gcm_gmult_4bit_mmx_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%edi ++ movl 24(%esp),%esi ++ call L005pic_point ++L005pic_point: ++ popl %eax ++ leal Lrem_4bit-L005pic_point(%eax),%eax ++ movzbl 15(%edi),%ebx ++ call __mmx_gmult_4bit_inner ++ movl 20(%esp),%edi ++ emms ++ movl %ebx,12(%edi) ++ movl %edx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %ebp,(%edi) ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _gcm_ghash_4bit_mmx ++.align 4 ++_gcm_ghash_4bit_mmx: ++L_gcm_ghash_4bit_mmx_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%ebp ++ movl 24(%esp),%esi ++ movl 28(%esp),%edi ++ movl 32(%esp),%ecx ++ call L006pic_point ++L006pic_point: ++ popl %eax ++ leal Lrem_4bit-L006pic_point(%eax),%eax ++ addl %edi,%ecx ++ movl %ecx,32(%esp) ++ subl $20,%esp ++ movl 12(%ebp),%ebx ++ movl 4(%ebp),%edx ++ movl 8(%ebp),%ecx ++ movl (%ebp),%ebp ++ jmp L007mmx_outer_loop ++.align 4,0x90 ++L007mmx_outer_loop: ++ xorl 12(%edi),%ebx ++ xorl 4(%edi),%edx ++ xorl 8(%edi),%ecx ++ xorl (%edi),%ebp ++ movl %edi,48(%esp) ++ movl %ebx,12(%esp) ++ movl %edx,4(%esp) ++ movl %ecx,8(%esp) ++ movl %ebp,(%esp) ++ movl %esp,%edi ++ shrl $24,%ebx ++ call __mmx_gmult_4bit_inner ++ movl 48(%esp),%edi ++ leal 16(%edi),%edi ++ cmpl 52(%esp),%edi ++ jb L007mmx_outer_loop ++ movl 40(%esp),%edi ++ emms ++ movl %ebx,12(%edi) ++ movl %edx,4(%edi) ++ movl %ecx,8(%edi) ++ movl %ebp,(%edi) ++ addl $20,%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 6,0x90 ++Lrem_4bit: ++.long 0,0,0,29491200,0,58982400,0,38141952 ++.long 0,117964800,0,113901568,0,76283904,0,88997888 ++.long 0,235929600,0,265420800,0,227803136,0,206962688 ++.long 0,152567808,0,148504576,0,177995776,0,190709760 ++.align 6,0x90 ++L008rem_8bit: ++.value 0,450,900,582,1800,1738,1164,1358 ++.value 3600,4050,3476,3158,2328,2266,2716,2910 ++.value 7200,7650,8100,7782,6952,6890,6316,6510 ++.value 4656,5106,4532,4214,5432,5370,5820,6014 ++.value 14400,14722,15300,14854,16200,16010,15564,15630 ++.value 13904,14226,13780,13334,12632,12442,13020,13086 ++.value 9312,9634,10212,9766,9064,8874,8428,8494 ++.value 10864,11186,10740,10294,11640,11450,12028,12094 ++.value 28800,28994,29444,29382,30600,30282,29708,30158 ++.value 32400,32594,32020,31958,31128,30810,31260,31710 ++.value 27808,28002,28452,28390,27560,27242,26668,27118 ++.value 25264,25458,24884,24822,26040,25722,26172,26622 ++.value 18624,18690,19268,19078,20424,19978,19532,19854 ++.value 18128,18194,17748,17558,16856,16410,16988,17310 ++.value 21728,21794,22372,22182,21480,21034,20588,20910 ++.value 23280,23346,22900,22710,24056,23610,24188,24510 ++.value 57600,57538,57988,58182,58888,59338,58764,58446 ++.value 61200,61138,60564,60758,59416,59866,60316,59998 ++.value 64800,64738,65188,65382,64040,64490,63916,63598 ++.value 62256,62194,61620,61814,62520,62970,63420,63102 ++.value 55616,55426,56004,56070,56904,57226,56780,56334 ++.value 55120,54930,54484,54550,53336,53658,54236,53790 ++.value 50528,50338,50916,50982,49768,50090,49644,49198 ++.value 52080,51890,51444,51510,52344,52666,53244,52798 ++.value 37248,36930,37380,37830,38536,38730,38156,38094 ++.value 40848,40530,39956,40406,39064,39258,39708,39646 ++.value 36256,35938,36388,36838,35496,35690,35116,35054 ++.value 33712,33394,32820,33270,33976,34170,34620,34558 ++.value 43456,43010,43588,43910,44744,44810,44364,44174 ++.value 42960,42514,42068,42390,41176,41242,41820,41630 ++.value 46560,46114,46692,47014,45800,45866,45420,45230 ++.value 48112,47666,47220,47542,48376,48442,49020,48830 ++.byte 71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67 ++.byte 82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112 ++.byte 112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62 ++.byte 0 +diff --git a/crypto/sha/asm/sha1-586-mac.S b/crypto/sha/asm/sha1-586-mac.S +new file mode 100644 +index 0000000..b843b80 +--- /dev/null ++++ b/crypto/sha/asm/sha1-586-mac.S +@@ -0,0 +1,1378 @@ ++.file "sha1-586.s" ++.text ++.globl _sha1_block_data_order ++.align 4 ++_sha1_block_data_order: ++L_sha1_block_data_order_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%ebp ++ movl 24(%esp),%esi ++ movl 28(%esp),%eax ++ subl $76,%esp ++ shll $6,%eax ++ addl %esi,%eax ++ movl %eax,104(%esp) ++ movl 16(%ebp),%edi ++ jmp L000loop ++.align 4,0x90 ++L000loop: ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ movl %eax,(%esp) ++ movl %ebx,4(%esp) ++ movl %ecx,8(%esp) ++ movl %edx,12(%esp) ++ movl 16(%esi),%eax ++ movl 20(%esi),%ebx ++ movl 24(%esi),%ecx ++ movl 28(%esi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ movl %eax,16(%esp) ++ movl %ebx,20(%esp) ++ movl %ecx,24(%esp) ++ movl %edx,28(%esp) ++ movl 32(%esi),%eax ++ movl 36(%esi),%ebx ++ movl 40(%esi),%ecx ++ movl 44(%esi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ movl %eax,32(%esp) ++ movl %ebx,36(%esp) ++ movl %ecx,40(%esp) ++ movl %edx,44(%esp) ++ movl 48(%esi),%eax ++ movl 52(%esi),%ebx ++ movl 56(%esi),%ecx ++ movl 60(%esi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ movl %eax,48(%esp) ++ movl %ebx,52(%esp) ++ movl %ecx,56(%esp) ++ movl %edx,60(%esp) ++ movl %esi,100(%esp) ++ movl (%ebp),%eax ++ movl 4(%ebp),%ebx ++ movl 8(%ebp),%ecx ++ movl 12(%ebp),%edx ++ # 00_15 0 ++ movl %ecx,%esi ++ movl %eax,%ebp ++ roll $5,%ebp ++ xorl %edx,%esi ++ addl %edi,%ebp ++ movl (%esp),%edi ++ andl %ebx,%esi ++ rorl $2,%ebx ++ xorl %edx,%esi ++ leal 1518500249(%ebp,%edi,1),%ebp ++ addl %esi,%ebp ++ # 00_15 1 ++ movl %ebx,%edi ++ movl %ebp,%esi ++ roll $5,%ebp ++ xorl %ecx,%edi ++ addl %edx,%ebp ++ movl 4(%esp),%edx ++ andl %eax,%edi ++ rorl $2,%eax ++ xorl %ecx,%edi ++ leal 1518500249(%ebp,%edx,1),%ebp ++ addl %edi,%ebp ++ # 00_15 2 ++ movl %eax,%edx ++ movl %ebp,%edi ++ roll $5,%ebp ++ xorl %ebx,%edx ++ addl %ecx,%ebp ++ movl 8(%esp),%ecx ++ andl %esi,%edx ++ rorl $2,%esi ++ xorl %ebx,%edx ++ leal 1518500249(%ebp,%ecx,1),%ebp ++ addl %edx,%ebp ++ # 00_15 3 ++ movl %esi,%ecx ++ movl %ebp,%edx ++ roll $5,%ebp ++ xorl %eax,%ecx ++ addl %ebx,%ebp ++ movl 12(%esp),%ebx ++ andl %edi,%ecx ++ rorl $2,%edi ++ xorl %eax,%ecx ++ leal 1518500249(%ebp,%ebx,1),%ebp ++ addl %ecx,%ebp ++ # 00_15 4 ++ movl %edi,%ebx ++ movl %ebp,%ecx ++ roll $5,%ebp ++ xorl %esi,%ebx ++ addl %eax,%ebp ++ movl 16(%esp),%eax ++ andl %edx,%ebx ++ rorl $2,%edx ++ xorl %esi,%ebx ++ leal 1518500249(%ebp,%eax,1),%ebp ++ addl %ebx,%ebp ++ # 00_15 5 ++ movl %edx,%eax ++ movl %ebp,%ebx ++ roll $5,%ebp ++ xorl %edi,%eax ++ addl %esi,%ebp ++ movl 20(%esp),%esi ++ andl %ecx,%eax ++ rorl $2,%ecx ++ xorl %edi,%eax ++ leal 1518500249(%ebp,%esi,1),%ebp ++ addl %eax,%ebp ++ # 00_15 6 ++ movl %ecx,%esi ++ movl %ebp,%eax ++ roll $5,%ebp ++ xorl %edx,%esi ++ addl %edi,%ebp ++ movl 24(%esp),%edi ++ andl %ebx,%esi ++ rorl $2,%ebx ++ xorl %edx,%esi ++ leal 1518500249(%ebp,%edi,1),%ebp ++ addl %esi,%ebp ++ # 00_15 7 ++ movl %ebx,%edi ++ movl %ebp,%esi ++ roll $5,%ebp ++ xorl %ecx,%edi ++ addl %edx,%ebp ++ movl 28(%esp),%edx ++ andl %eax,%edi ++ rorl $2,%eax ++ xorl %ecx,%edi ++ leal 1518500249(%ebp,%edx,1),%ebp ++ addl %edi,%ebp ++ # 00_15 8 ++ movl %eax,%edx ++ movl %ebp,%edi ++ roll $5,%ebp ++ xorl %ebx,%edx ++ addl %ecx,%ebp ++ movl 32(%esp),%ecx ++ andl %esi,%edx ++ rorl $2,%esi ++ xorl %ebx,%edx ++ leal 1518500249(%ebp,%ecx,1),%ebp ++ addl %edx,%ebp ++ # 00_15 9 ++ movl %esi,%ecx ++ movl %ebp,%edx ++ roll $5,%ebp ++ xorl %eax,%ecx ++ addl %ebx,%ebp ++ movl 36(%esp),%ebx ++ andl %edi,%ecx ++ rorl $2,%edi ++ xorl %eax,%ecx ++ leal 1518500249(%ebp,%ebx,1),%ebp ++ addl %ecx,%ebp ++ # 00_15 10 ++ movl %edi,%ebx ++ movl %ebp,%ecx ++ roll $5,%ebp ++ xorl %esi,%ebx ++ addl %eax,%ebp ++ movl 40(%esp),%eax ++ andl %edx,%ebx ++ rorl $2,%edx ++ xorl %esi,%ebx ++ leal 1518500249(%ebp,%eax,1),%ebp ++ addl %ebx,%ebp ++ # 00_15 11 ++ movl %edx,%eax ++ movl %ebp,%ebx ++ roll $5,%ebp ++ xorl %edi,%eax ++ addl %esi,%ebp ++ movl 44(%esp),%esi ++ andl %ecx,%eax ++ rorl $2,%ecx ++ xorl %edi,%eax ++ leal 1518500249(%ebp,%esi,1),%ebp ++ addl %eax,%ebp ++ # 00_15 12 ++ movl %ecx,%esi ++ movl %ebp,%eax ++ roll $5,%ebp ++ xorl %edx,%esi ++ addl %edi,%ebp ++ movl 48(%esp),%edi ++ andl %ebx,%esi ++ rorl $2,%ebx ++ xorl %edx,%esi ++ leal 1518500249(%ebp,%edi,1),%ebp ++ addl %esi,%ebp ++ # 00_15 13 ++ movl %ebx,%edi ++ movl %ebp,%esi ++ roll $5,%ebp ++ xorl %ecx,%edi ++ addl %edx,%ebp ++ movl 52(%esp),%edx ++ andl %eax,%edi ++ rorl $2,%eax ++ xorl %ecx,%edi ++ leal 1518500249(%ebp,%edx,1),%ebp ++ addl %edi,%ebp ++ # 00_15 14 ++ movl %eax,%edx ++ movl %ebp,%edi ++ roll $5,%ebp ++ xorl %ebx,%edx ++ addl %ecx,%ebp ++ movl 56(%esp),%ecx ++ andl %esi,%edx ++ rorl $2,%esi ++ xorl %ebx,%edx ++ leal 1518500249(%ebp,%ecx,1),%ebp ++ addl %edx,%ebp ++ # 00_15 15 ++ movl %esi,%ecx ++ movl %ebp,%edx ++ roll $5,%ebp ++ xorl %eax,%ecx ++ addl %ebx,%ebp ++ movl 60(%esp),%ebx ++ andl %edi,%ecx ++ rorl $2,%edi ++ xorl %eax,%ecx ++ leal 1518500249(%ebp,%ebx,1),%ebp ++ movl (%esp),%ebx ++ addl %ebp,%ecx ++ # 16_19 16 ++ movl %edi,%ebp ++ xorl 8(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 32(%esp),%ebx ++ andl %edx,%ebp ++ xorl 52(%esp),%ebx ++ roll $1,%ebx ++ xorl %esi,%ebp ++ addl %ebp,%eax ++ movl %ecx,%ebp ++ rorl $2,%edx ++ movl %ebx,(%esp) ++ roll $5,%ebp ++ leal 1518500249(%ebx,%eax,1),%ebx ++ movl 4(%esp),%eax ++ addl %ebp,%ebx ++ # 16_19 17 ++ movl %edx,%ebp ++ xorl 12(%esp),%eax ++ xorl %edi,%ebp ++ xorl 36(%esp),%eax ++ andl %ecx,%ebp ++ xorl 56(%esp),%eax ++ roll $1,%eax ++ xorl %edi,%ebp ++ addl %ebp,%esi ++ movl %ebx,%ebp ++ rorl $2,%ecx ++ movl %eax,4(%esp) ++ roll $5,%ebp ++ leal 1518500249(%eax,%esi,1),%eax ++ movl 8(%esp),%esi ++ addl %ebp,%eax ++ # 16_19 18 ++ movl %ecx,%ebp ++ xorl 16(%esp),%esi ++ xorl %edx,%ebp ++ xorl 40(%esp),%esi ++ andl %ebx,%ebp ++ xorl 60(%esp),%esi ++ roll $1,%esi ++ xorl %edx,%ebp ++ addl %ebp,%edi ++ movl %eax,%ebp ++ rorl $2,%ebx ++ movl %esi,8(%esp) ++ roll $5,%ebp ++ leal 1518500249(%esi,%edi,1),%esi ++ movl 12(%esp),%edi ++ addl %ebp,%esi ++ # 16_19 19 ++ movl %ebx,%ebp ++ xorl 20(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 44(%esp),%edi ++ andl %eax,%ebp ++ xorl (%esp),%edi ++ roll $1,%edi ++ xorl %ecx,%ebp ++ addl %ebp,%edx ++ movl %esi,%ebp ++ rorl $2,%eax ++ movl %edi,12(%esp) ++ roll $5,%ebp ++ leal 1518500249(%edi,%edx,1),%edi ++ movl 16(%esp),%edx ++ addl %ebp,%edi ++ # 20_39 20 ++ movl %esi,%ebp ++ xorl 24(%esp),%edx ++ xorl %eax,%ebp ++ xorl 48(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 4(%esp),%edx ++ roll $1,%edx ++ addl %ebp,%ecx ++ rorl $2,%esi ++ movl %edi,%ebp ++ roll $5,%ebp ++ movl %edx,16(%esp) ++ leal 1859775393(%edx,%ecx,1),%edx ++ movl 20(%esp),%ecx ++ addl %ebp,%edx ++ # 20_39 21 ++ movl %edi,%ebp ++ xorl 28(%esp),%ecx ++ xorl %esi,%ebp ++ xorl 52(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 8(%esp),%ecx ++ roll $1,%ecx ++ addl %ebp,%ebx ++ rorl $2,%edi ++ movl %edx,%ebp ++ roll $5,%ebp ++ movl %ecx,20(%esp) ++ leal 1859775393(%ecx,%ebx,1),%ecx ++ movl 24(%esp),%ebx ++ addl %ebp,%ecx ++ # 20_39 22 ++ movl %edx,%ebp ++ xorl 32(%esp),%ebx ++ xorl %edi,%ebp ++ xorl 56(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 12(%esp),%ebx ++ roll $1,%ebx ++ addl %ebp,%eax ++ rorl $2,%edx ++ movl %ecx,%ebp ++ roll $5,%ebp ++ movl %ebx,24(%esp) ++ leal 1859775393(%ebx,%eax,1),%ebx ++ movl 28(%esp),%eax ++ addl %ebp,%ebx ++ # 20_39 23 ++ movl %ecx,%ebp ++ xorl 36(%esp),%eax ++ xorl %edx,%ebp ++ xorl 60(%esp),%eax ++ xorl %edi,%ebp ++ xorl 16(%esp),%eax ++ roll $1,%eax ++ addl %ebp,%esi ++ rorl $2,%ecx ++ movl %ebx,%ebp ++ roll $5,%ebp ++ movl %eax,28(%esp) ++ leal 1859775393(%eax,%esi,1),%eax ++ movl 32(%esp),%esi ++ addl %ebp,%eax ++ # 20_39 24 ++ movl %ebx,%ebp ++ xorl 40(%esp),%esi ++ xorl %ecx,%ebp ++ xorl (%esp),%esi ++ xorl %edx,%ebp ++ xorl 20(%esp),%esi ++ roll $1,%esi ++ addl %ebp,%edi ++ rorl $2,%ebx ++ movl %eax,%ebp ++ roll $5,%ebp ++ movl %esi,32(%esp) ++ leal 1859775393(%esi,%edi,1),%esi ++ movl 36(%esp),%edi ++ addl %ebp,%esi ++ # 20_39 25 ++ movl %eax,%ebp ++ xorl 44(%esp),%edi ++ xorl %ebx,%ebp ++ xorl 4(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 24(%esp),%edi ++ roll $1,%edi ++ addl %ebp,%edx ++ rorl $2,%eax ++ movl %esi,%ebp ++ roll $5,%ebp ++ movl %edi,36(%esp) ++ leal 1859775393(%edi,%edx,1),%edi ++ movl 40(%esp),%edx ++ addl %ebp,%edi ++ # 20_39 26 ++ movl %esi,%ebp ++ xorl 48(%esp),%edx ++ xorl %eax,%ebp ++ xorl 8(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 28(%esp),%edx ++ roll $1,%edx ++ addl %ebp,%ecx ++ rorl $2,%esi ++ movl %edi,%ebp ++ roll $5,%ebp ++ movl %edx,40(%esp) ++ leal 1859775393(%edx,%ecx,1),%edx ++ movl 44(%esp),%ecx ++ addl %ebp,%edx ++ # 20_39 27 ++ movl %edi,%ebp ++ xorl 52(%esp),%ecx ++ xorl %esi,%ebp ++ xorl 12(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 32(%esp),%ecx ++ roll $1,%ecx ++ addl %ebp,%ebx ++ rorl $2,%edi ++ movl %edx,%ebp ++ roll $5,%ebp ++ movl %ecx,44(%esp) ++ leal 1859775393(%ecx,%ebx,1),%ecx ++ movl 48(%esp),%ebx ++ addl %ebp,%ecx ++ # 20_39 28 ++ movl %edx,%ebp ++ xorl 56(%esp),%ebx ++ xorl %edi,%ebp ++ xorl 16(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 36(%esp),%ebx ++ roll $1,%ebx ++ addl %ebp,%eax ++ rorl $2,%edx ++ movl %ecx,%ebp ++ roll $5,%ebp ++ movl %ebx,48(%esp) ++ leal 1859775393(%ebx,%eax,1),%ebx ++ movl 52(%esp),%eax ++ addl %ebp,%ebx ++ # 20_39 29 ++ movl %ecx,%ebp ++ xorl 60(%esp),%eax ++ xorl %edx,%ebp ++ xorl 20(%esp),%eax ++ xorl %edi,%ebp ++ xorl 40(%esp),%eax ++ roll $1,%eax ++ addl %ebp,%esi ++ rorl $2,%ecx ++ movl %ebx,%ebp ++ roll $5,%ebp ++ movl %eax,52(%esp) ++ leal 1859775393(%eax,%esi,1),%eax ++ movl 56(%esp),%esi ++ addl %ebp,%eax ++ # 20_39 30 ++ movl %ebx,%ebp ++ xorl (%esp),%esi ++ xorl %ecx,%ebp ++ xorl 24(%esp),%esi ++ xorl %edx,%ebp ++ xorl 44(%esp),%esi ++ roll $1,%esi ++ addl %ebp,%edi ++ rorl $2,%ebx ++ movl %eax,%ebp ++ roll $5,%ebp ++ movl %esi,56(%esp) ++ leal 1859775393(%esi,%edi,1),%esi ++ movl 60(%esp),%edi ++ addl %ebp,%esi ++ # 20_39 31 ++ movl %eax,%ebp ++ xorl 4(%esp),%edi ++ xorl %ebx,%ebp ++ xorl 28(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 48(%esp),%edi ++ roll $1,%edi ++ addl %ebp,%edx ++ rorl $2,%eax ++ movl %esi,%ebp ++ roll $5,%ebp ++ movl %edi,60(%esp) ++ leal 1859775393(%edi,%edx,1),%edi ++ movl (%esp),%edx ++ addl %ebp,%edi ++ # 20_39 32 ++ movl %esi,%ebp ++ xorl 8(%esp),%edx ++ xorl %eax,%ebp ++ xorl 32(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 52(%esp),%edx ++ roll $1,%edx ++ addl %ebp,%ecx ++ rorl $2,%esi ++ movl %edi,%ebp ++ roll $5,%ebp ++ movl %edx,(%esp) ++ leal 1859775393(%edx,%ecx,1),%edx ++ movl 4(%esp),%ecx ++ addl %ebp,%edx ++ # 20_39 33 ++ movl %edi,%ebp ++ xorl 12(%esp),%ecx ++ xorl %esi,%ebp ++ xorl 36(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 56(%esp),%ecx ++ roll $1,%ecx ++ addl %ebp,%ebx ++ rorl $2,%edi ++ movl %edx,%ebp ++ roll $5,%ebp ++ movl %ecx,4(%esp) ++ leal 1859775393(%ecx,%ebx,1),%ecx ++ movl 8(%esp),%ebx ++ addl %ebp,%ecx ++ # 20_39 34 ++ movl %edx,%ebp ++ xorl 16(%esp),%ebx ++ xorl %edi,%ebp ++ xorl 40(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 60(%esp),%ebx ++ roll $1,%ebx ++ addl %ebp,%eax ++ rorl $2,%edx ++ movl %ecx,%ebp ++ roll $5,%ebp ++ movl %ebx,8(%esp) ++ leal 1859775393(%ebx,%eax,1),%ebx ++ movl 12(%esp),%eax ++ addl %ebp,%ebx ++ # 20_39 35 ++ movl %ecx,%ebp ++ xorl 20(%esp),%eax ++ xorl %edx,%ebp ++ xorl 44(%esp),%eax ++ xorl %edi,%ebp ++ xorl (%esp),%eax ++ roll $1,%eax ++ addl %ebp,%esi ++ rorl $2,%ecx ++ movl %ebx,%ebp ++ roll $5,%ebp ++ movl %eax,12(%esp) ++ leal 1859775393(%eax,%esi,1),%eax ++ movl 16(%esp),%esi ++ addl %ebp,%eax ++ # 20_39 36 ++ movl %ebx,%ebp ++ xorl 24(%esp),%esi ++ xorl %ecx,%ebp ++ xorl 48(%esp),%esi ++ xorl %edx,%ebp ++ xorl 4(%esp),%esi ++ roll $1,%esi ++ addl %ebp,%edi ++ rorl $2,%ebx ++ movl %eax,%ebp ++ roll $5,%ebp ++ movl %esi,16(%esp) ++ leal 1859775393(%esi,%edi,1),%esi ++ movl 20(%esp),%edi ++ addl %ebp,%esi ++ # 20_39 37 ++ movl %eax,%ebp ++ xorl 28(%esp),%edi ++ xorl %ebx,%ebp ++ xorl 52(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 8(%esp),%edi ++ roll $1,%edi ++ addl %ebp,%edx ++ rorl $2,%eax ++ movl %esi,%ebp ++ roll $5,%ebp ++ movl %edi,20(%esp) ++ leal 1859775393(%edi,%edx,1),%edi ++ movl 24(%esp),%edx ++ addl %ebp,%edi ++ # 20_39 38 ++ movl %esi,%ebp ++ xorl 32(%esp),%edx ++ xorl %eax,%ebp ++ xorl 56(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 12(%esp),%edx ++ roll $1,%edx ++ addl %ebp,%ecx ++ rorl $2,%esi ++ movl %edi,%ebp ++ roll $5,%ebp ++ movl %edx,24(%esp) ++ leal 1859775393(%edx,%ecx,1),%edx ++ movl 28(%esp),%ecx ++ addl %ebp,%edx ++ # 20_39 39 ++ movl %edi,%ebp ++ xorl 36(%esp),%ecx ++ xorl %esi,%ebp ++ xorl 60(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 16(%esp),%ecx ++ roll $1,%ecx ++ addl %ebp,%ebx ++ rorl $2,%edi ++ movl %edx,%ebp ++ roll $5,%ebp ++ movl %ecx,28(%esp) ++ leal 1859775393(%ecx,%ebx,1),%ecx ++ movl 32(%esp),%ebx ++ addl %ebp,%ecx ++ # 40_59 40 ++ movl %edi,%ebp ++ xorl 40(%esp),%ebx ++ xorl %esi,%ebp ++ xorl (%esp),%ebx ++ andl %edx,%ebp ++ xorl 20(%esp),%ebx ++ roll $1,%ebx ++ addl %eax,%ebp ++ rorl $2,%edx ++ movl %ecx,%eax ++ roll $5,%eax ++ movl %ebx,32(%esp) ++ leal 2400959708(%ebx,%ebp,1),%ebx ++ movl %edi,%ebp ++ addl %eax,%ebx ++ andl %esi,%ebp ++ movl 36(%esp),%eax ++ addl %ebp,%ebx ++ # 40_59 41 ++ movl %edx,%ebp ++ xorl 44(%esp),%eax ++ xorl %edi,%ebp ++ xorl 4(%esp),%eax ++ andl %ecx,%ebp ++ xorl 24(%esp),%eax ++ roll $1,%eax ++ addl %esi,%ebp ++ rorl $2,%ecx ++ movl %ebx,%esi ++ roll $5,%esi ++ movl %eax,36(%esp) ++ leal 2400959708(%eax,%ebp,1),%eax ++ movl %edx,%ebp ++ addl %esi,%eax ++ andl %edi,%ebp ++ movl 40(%esp),%esi ++ addl %ebp,%eax ++ # 40_59 42 ++ movl %ecx,%ebp ++ xorl 48(%esp),%esi ++ xorl %edx,%ebp ++ xorl 8(%esp),%esi ++ andl %ebx,%ebp ++ xorl 28(%esp),%esi ++ roll $1,%esi ++ addl %edi,%ebp ++ rorl $2,%ebx ++ movl %eax,%edi ++ roll $5,%edi ++ movl %esi,40(%esp) ++ leal 2400959708(%esi,%ebp,1),%esi ++ movl %ecx,%ebp ++ addl %edi,%esi ++ andl %edx,%ebp ++ movl 44(%esp),%edi ++ addl %ebp,%esi ++ # 40_59 43 ++ movl %ebx,%ebp ++ xorl 52(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 12(%esp),%edi ++ andl %eax,%ebp ++ xorl 32(%esp),%edi ++ roll $1,%edi ++ addl %edx,%ebp ++ rorl $2,%eax ++ movl %esi,%edx ++ roll $5,%edx ++ movl %edi,44(%esp) ++ leal 2400959708(%edi,%ebp,1),%edi ++ movl %ebx,%ebp ++ addl %edx,%edi ++ andl %ecx,%ebp ++ movl 48(%esp),%edx ++ addl %ebp,%edi ++ # 40_59 44 ++ movl %eax,%ebp ++ xorl 56(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 16(%esp),%edx ++ andl %esi,%ebp ++ xorl 36(%esp),%edx ++ roll $1,%edx ++ addl %ecx,%ebp ++ rorl $2,%esi ++ movl %edi,%ecx ++ roll $5,%ecx ++ movl %edx,48(%esp) ++ leal 2400959708(%edx,%ebp,1),%edx ++ movl %eax,%ebp ++ addl %ecx,%edx ++ andl %ebx,%ebp ++ movl 52(%esp),%ecx ++ addl %ebp,%edx ++ # 40_59 45 ++ movl %esi,%ebp ++ xorl 60(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 20(%esp),%ecx ++ andl %edi,%ebp ++ xorl 40(%esp),%ecx ++ roll $1,%ecx ++ addl %ebx,%ebp ++ rorl $2,%edi ++ movl %edx,%ebx ++ roll $5,%ebx ++ movl %ecx,52(%esp) ++ leal 2400959708(%ecx,%ebp,1),%ecx ++ movl %esi,%ebp ++ addl %ebx,%ecx ++ andl %eax,%ebp ++ movl 56(%esp),%ebx ++ addl %ebp,%ecx ++ # 40_59 46 ++ movl %edi,%ebp ++ xorl (%esp),%ebx ++ xorl %esi,%ebp ++ xorl 24(%esp),%ebx ++ andl %edx,%ebp ++ xorl 44(%esp),%ebx ++ roll $1,%ebx ++ addl %eax,%ebp ++ rorl $2,%edx ++ movl %ecx,%eax ++ roll $5,%eax ++ movl %ebx,56(%esp) ++ leal 2400959708(%ebx,%ebp,1),%ebx ++ movl %edi,%ebp ++ addl %eax,%ebx ++ andl %esi,%ebp ++ movl 60(%esp),%eax ++ addl %ebp,%ebx ++ # 40_59 47 ++ movl %edx,%ebp ++ xorl 4(%esp),%eax ++ xorl %edi,%ebp ++ xorl 28(%esp),%eax ++ andl %ecx,%ebp ++ xorl 48(%esp),%eax ++ roll $1,%eax ++ addl %esi,%ebp ++ rorl $2,%ecx ++ movl %ebx,%esi ++ roll $5,%esi ++ movl %eax,60(%esp) ++ leal 2400959708(%eax,%ebp,1),%eax ++ movl %edx,%ebp ++ addl %esi,%eax ++ andl %edi,%ebp ++ movl (%esp),%esi ++ addl %ebp,%eax ++ # 40_59 48 ++ movl %ecx,%ebp ++ xorl 8(%esp),%esi ++ xorl %edx,%ebp ++ xorl 32(%esp),%esi ++ andl %ebx,%ebp ++ xorl 52(%esp),%esi ++ roll $1,%esi ++ addl %edi,%ebp ++ rorl $2,%ebx ++ movl %eax,%edi ++ roll $5,%edi ++ movl %esi,(%esp) ++ leal 2400959708(%esi,%ebp,1),%esi ++ movl %ecx,%ebp ++ addl %edi,%esi ++ andl %edx,%ebp ++ movl 4(%esp),%edi ++ addl %ebp,%esi ++ # 40_59 49 ++ movl %ebx,%ebp ++ xorl 12(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 36(%esp),%edi ++ andl %eax,%ebp ++ xorl 56(%esp),%edi ++ roll $1,%edi ++ addl %edx,%ebp ++ rorl $2,%eax ++ movl %esi,%edx ++ roll $5,%edx ++ movl %edi,4(%esp) ++ leal 2400959708(%edi,%ebp,1),%edi ++ movl %ebx,%ebp ++ addl %edx,%edi ++ andl %ecx,%ebp ++ movl 8(%esp),%edx ++ addl %ebp,%edi ++ # 40_59 50 ++ movl %eax,%ebp ++ xorl 16(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 40(%esp),%edx ++ andl %esi,%ebp ++ xorl 60(%esp),%edx ++ roll $1,%edx ++ addl %ecx,%ebp ++ rorl $2,%esi ++ movl %edi,%ecx ++ roll $5,%ecx ++ movl %edx,8(%esp) ++ leal 2400959708(%edx,%ebp,1),%edx ++ movl %eax,%ebp ++ addl %ecx,%edx ++ andl %ebx,%ebp ++ movl 12(%esp),%ecx ++ addl %ebp,%edx ++ # 40_59 51 ++ movl %esi,%ebp ++ xorl 20(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 44(%esp),%ecx ++ andl %edi,%ebp ++ xorl (%esp),%ecx ++ roll $1,%ecx ++ addl %ebx,%ebp ++ rorl $2,%edi ++ movl %edx,%ebx ++ roll $5,%ebx ++ movl %ecx,12(%esp) ++ leal 2400959708(%ecx,%ebp,1),%ecx ++ movl %esi,%ebp ++ addl %ebx,%ecx ++ andl %eax,%ebp ++ movl 16(%esp),%ebx ++ addl %ebp,%ecx ++ # 40_59 52 ++ movl %edi,%ebp ++ xorl 24(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 48(%esp),%ebx ++ andl %edx,%ebp ++ xorl 4(%esp),%ebx ++ roll $1,%ebx ++ addl %eax,%ebp ++ rorl $2,%edx ++ movl %ecx,%eax ++ roll $5,%eax ++ movl %ebx,16(%esp) ++ leal 2400959708(%ebx,%ebp,1),%ebx ++ movl %edi,%ebp ++ addl %eax,%ebx ++ andl %esi,%ebp ++ movl 20(%esp),%eax ++ addl %ebp,%ebx ++ # 40_59 53 ++ movl %edx,%ebp ++ xorl 28(%esp),%eax ++ xorl %edi,%ebp ++ xorl 52(%esp),%eax ++ andl %ecx,%ebp ++ xorl 8(%esp),%eax ++ roll $1,%eax ++ addl %esi,%ebp ++ rorl $2,%ecx ++ movl %ebx,%esi ++ roll $5,%esi ++ movl %eax,20(%esp) ++ leal 2400959708(%eax,%ebp,1),%eax ++ movl %edx,%ebp ++ addl %esi,%eax ++ andl %edi,%ebp ++ movl 24(%esp),%esi ++ addl %ebp,%eax ++ # 40_59 54 ++ movl %ecx,%ebp ++ xorl 32(%esp),%esi ++ xorl %edx,%ebp ++ xorl 56(%esp),%esi ++ andl %ebx,%ebp ++ xorl 12(%esp),%esi ++ roll $1,%esi ++ addl %edi,%ebp ++ rorl $2,%ebx ++ movl %eax,%edi ++ roll $5,%edi ++ movl %esi,24(%esp) ++ leal 2400959708(%esi,%ebp,1),%esi ++ movl %ecx,%ebp ++ addl %edi,%esi ++ andl %edx,%ebp ++ movl 28(%esp),%edi ++ addl %ebp,%esi ++ # 40_59 55 ++ movl %ebx,%ebp ++ xorl 36(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 60(%esp),%edi ++ andl %eax,%ebp ++ xorl 16(%esp),%edi ++ roll $1,%edi ++ addl %edx,%ebp ++ rorl $2,%eax ++ movl %esi,%edx ++ roll $5,%edx ++ movl %edi,28(%esp) ++ leal 2400959708(%edi,%ebp,1),%edi ++ movl %ebx,%ebp ++ addl %edx,%edi ++ andl %ecx,%ebp ++ movl 32(%esp),%edx ++ addl %ebp,%edi ++ # 40_59 56 ++ movl %eax,%ebp ++ xorl 40(%esp),%edx ++ xorl %ebx,%ebp ++ xorl (%esp),%edx ++ andl %esi,%ebp ++ xorl 20(%esp),%edx ++ roll $1,%edx ++ addl %ecx,%ebp ++ rorl $2,%esi ++ movl %edi,%ecx ++ roll $5,%ecx ++ movl %edx,32(%esp) ++ leal 2400959708(%edx,%ebp,1),%edx ++ movl %eax,%ebp ++ addl %ecx,%edx ++ andl %ebx,%ebp ++ movl 36(%esp),%ecx ++ addl %ebp,%edx ++ # 40_59 57 ++ movl %esi,%ebp ++ xorl 44(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 4(%esp),%ecx ++ andl %edi,%ebp ++ xorl 24(%esp),%ecx ++ roll $1,%ecx ++ addl %ebx,%ebp ++ rorl $2,%edi ++ movl %edx,%ebx ++ roll $5,%ebx ++ movl %ecx,36(%esp) ++ leal 2400959708(%ecx,%ebp,1),%ecx ++ movl %esi,%ebp ++ addl %ebx,%ecx ++ andl %eax,%ebp ++ movl 40(%esp),%ebx ++ addl %ebp,%ecx ++ # 40_59 58 ++ movl %edi,%ebp ++ xorl 48(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 8(%esp),%ebx ++ andl %edx,%ebp ++ xorl 28(%esp),%ebx ++ roll $1,%ebx ++ addl %eax,%ebp ++ rorl $2,%edx ++ movl %ecx,%eax ++ roll $5,%eax ++ movl %ebx,40(%esp) ++ leal 2400959708(%ebx,%ebp,1),%ebx ++ movl %edi,%ebp ++ addl %eax,%ebx ++ andl %esi,%ebp ++ movl 44(%esp),%eax ++ addl %ebp,%ebx ++ # 40_59 59 ++ movl %edx,%ebp ++ xorl 52(%esp),%eax ++ xorl %edi,%ebp ++ xorl 12(%esp),%eax ++ andl %ecx,%ebp ++ xorl 32(%esp),%eax ++ roll $1,%eax ++ addl %esi,%ebp ++ rorl $2,%ecx ++ movl %ebx,%esi ++ roll $5,%esi ++ movl %eax,44(%esp) ++ leal 2400959708(%eax,%ebp,1),%eax ++ movl %edx,%ebp ++ addl %esi,%eax ++ andl %edi,%ebp ++ movl 48(%esp),%esi ++ addl %ebp,%eax ++ # 20_39 60 ++ movl %ebx,%ebp ++ xorl 56(%esp),%esi ++ xorl %ecx,%ebp ++ xorl 16(%esp),%esi ++ xorl %edx,%ebp ++ xorl 36(%esp),%esi ++ roll $1,%esi ++ addl %ebp,%edi ++ rorl $2,%ebx ++ movl %eax,%ebp ++ roll $5,%ebp ++ movl %esi,48(%esp) ++ leal 3395469782(%esi,%edi,1),%esi ++ movl 52(%esp),%edi ++ addl %ebp,%esi ++ # 20_39 61 ++ movl %eax,%ebp ++ xorl 60(%esp),%edi ++ xorl %ebx,%ebp ++ xorl 20(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 40(%esp),%edi ++ roll $1,%edi ++ addl %ebp,%edx ++ rorl $2,%eax ++ movl %esi,%ebp ++ roll $5,%ebp ++ movl %edi,52(%esp) ++ leal 3395469782(%edi,%edx,1),%edi ++ movl 56(%esp),%edx ++ addl %ebp,%edi ++ # 20_39 62 ++ movl %esi,%ebp ++ xorl (%esp),%edx ++ xorl %eax,%ebp ++ xorl 24(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 44(%esp),%edx ++ roll $1,%edx ++ addl %ebp,%ecx ++ rorl $2,%esi ++ movl %edi,%ebp ++ roll $5,%ebp ++ movl %edx,56(%esp) ++ leal 3395469782(%edx,%ecx,1),%edx ++ movl 60(%esp),%ecx ++ addl %ebp,%edx ++ # 20_39 63 ++ movl %edi,%ebp ++ xorl 4(%esp),%ecx ++ xorl %esi,%ebp ++ xorl 28(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 48(%esp),%ecx ++ roll $1,%ecx ++ addl %ebp,%ebx ++ rorl $2,%edi ++ movl %edx,%ebp ++ roll $5,%ebp ++ movl %ecx,60(%esp) ++ leal 3395469782(%ecx,%ebx,1),%ecx ++ movl (%esp),%ebx ++ addl %ebp,%ecx ++ # 20_39 64 ++ movl %edx,%ebp ++ xorl 8(%esp),%ebx ++ xorl %edi,%ebp ++ xorl 32(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 52(%esp),%ebx ++ roll $1,%ebx ++ addl %ebp,%eax ++ rorl $2,%edx ++ movl %ecx,%ebp ++ roll $5,%ebp ++ movl %ebx,(%esp) ++ leal 3395469782(%ebx,%eax,1),%ebx ++ movl 4(%esp),%eax ++ addl %ebp,%ebx ++ # 20_39 65 ++ movl %ecx,%ebp ++ xorl 12(%esp),%eax ++ xorl %edx,%ebp ++ xorl 36(%esp),%eax ++ xorl %edi,%ebp ++ xorl 56(%esp),%eax ++ roll $1,%eax ++ addl %ebp,%esi ++ rorl $2,%ecx ++ movl %ebx,%ebp ++ roll $5,%ebp ++ movl %eax,4(%esp) ++ leal 3395469782(%eax,%esi,1),%eax ++ movl 8(%esp),%esi ++ addl %ebp,%eax ++ # 20_39 66 ++ movl %ebx,%ebp ++ xorl 16(%esp),%esi ++ xorl %ecx,%ebp ++ xorl 40(%esp),%esi ++ xorl %edx,%ebp ++ xorl 60(%esp),%esi ++ roll $1,%esi ++ addl %ebp,%edi ++ rorl $2,%ebx ++ movl %eax,%ebp ++ roll $5,%ebp ++ movl %esi,8(%esp) ++ leal 3395469782(%esi,%edi,1),%esi ++ movl 12(%esp),%edi ++ addl %ebp,%esi ++ # 20_39 67 ++ movl %eax,%ebp ++ xorl 20(%esp),%edi ++ xorl %ebx,%ebp ++ xorl 44(%esp),%edi ++ xorl %ecx,%ebp ++ xorl (%esp),%edi ++ roll $1,%edi ++ addl %ebp,%edx ++ rorl $2,%eax ++ movl %esi,%ebp ++ roll $5,%ebp ++ movl %edi,12(%esp) ++ leal 3395469782(%edi,%edx,1),%edi ++ movl 16(%esp),%edx ++ addl %ebp,%edi ++ # 20_39 68 ++ movl %esi,%ebp ++ xorl 24(%esp),%edx ++ xorl %eax,%ebp ++ xorl 48(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 4(%esp),%edx ++ roll $1,%edx ++ addl %ebp,%ecx ++ rorl $2,%esi ++ movl %edi,%ebp ++ roll $5,%ebp ++ movl %edx,16(%esp) ++ leal 3395469782(%edx,%ecx,1),%edx ++ movl 20(%esp),%ecx ++ addl %ebp,%edx ++ # 20_39 69 ++ movl %edi,%ebp ++ xorl 28(%esp),%ecx ++ xorl %esi,%ebp ++ xorl 52(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 8(%esp),%ecx ++ roll $1,%ecx ++ addl %ebp,%ebx ++ rorl $2,%edi ++ movl %edx,%ebp ++ roll $5,%ebp ++ movl %ecx,20(%esp) ++ leal 3395469782(%ecx,%ebx,1),%ecx ++ movl 24(%esp),%ebx ++ addl %ebp,%ecx ++ # 20_39 70 ++ movl %edx,%ebp ++ xorl 32(%esp),%ebx ++ xorl %edi,%ebp ++ xorl 56(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 12(%esp),%ebx ++ roll $1,%ebx ++ addl %ebp,%eax ++ rorl $2,%edx ++ movl %ecx,%ebp ++ roll $5,%ebp ++ movl %ebx,24(%esp) ++ leal 3395469782(%ebx,%eax,1),%ebx ++ movl 28(%esp),%eax ++ addl %ebp,%ebx ++ # 20_39 71 ++ movl %ecx,%ebp ++ xorl 36(%esp),%eax ++ xorl %edx,%ebp ++ xorl 60(%esp),%eax ++ xorl %edi,%ebp ++ xorl 16(%esp),%eax ++ roll $1,%eax ++ addl %ebp,%esi ++ rorl $2,%ecx ++ movl %ebx,%ebp ++ roll $5,%ebp ++ movl %eax,28(%esp) ++ leal 3395469782(%eax,%esi,1),%eax ++ movl 32(%esp),%esi ++ addl %ebp,%eax ++ # 20_39 72 ++ movl %ebx,%ebp ++ xorl 40(%esp),%esi ++ xorl %ecx,%ebp ++ xorl (%esp),%esi ++ xorl %edx,%ebp ++ xorl 20(%esp),%esi ++ roll $1,%esi ++ addl %ebp,%edi ++ rorl $2,%ebx ++ movl %eax,%ebp ++ roll $5,%ebp ++ movl %esi,32(%esp) ++ leal 3395469782(%esi,%edi,1),%esi ++ movl 36(%esp),%edi ++ addl %ebp,%esi ++ # 20_39 73 ++ movl %eax,%ebp ++ xorl 44(%esp),%edi ++ xorl %ebx,%ebp ++ xorl 4(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 24(%esp),%edi ++ roll $1,%edi ++ addl %ebp,%edx ++ rorl $2,%eax ++ movl %esi,%ebp ++ roll $5,%ebp ++ movl %edi,36(%esp) ++ leal 3395469782(%edi,%edx,1),%edi ++ movl 40(%esp),%edx ++ addl %ebp,%edi ++ # 20_39 74 ++ movl %esi,%ebp ++ xorl 48(%esp),%edx ++ xorl %eax,%ebp ++ xorl 8(%esp),%edx ++ xorl %ebx,%ebp ++ xorl 28(%esp),%edx ++ roll $1,%edx ++ addl %ebp,%ecx ++ rorl $2,%esi ++ movl %edi,%ebp ++ roll $5,%ebp ++ movl %edx,40(%esp) ++ leal 3395469782(%edx,%ecx,1),%edx ++ movl 44(%esp),%ecx ++ addl %ebp,%edx ++ # 20_39 75 ++ movl %edi,%ebp ++ xorl 52(%esp),%ecx ++ xorl %esi,%ebp ++ xorl 12(%esp),%ecx ++ xorl %eax,%ebp ++ xorl 32(%esp),%ecx ++ roll $1,%ecx ++ addl %ebp,%ebx ++ rorl $2,%edi ++ movl %edx,%ebp ++ roll $5,%ebp ++ movl %ecx,44(%esp) ++ leal 3395469782(%ecx,%ebx,1),%ecx ++ movl 48(%esp),%ebx ++ addl %ebp,%ecx ++ # 20_39 76 ++ movl %edx,%ebp ++ xorl 56(%esp),%ebx ++ xorl %edi,%ebp ++ xorl 16(%esp),%ebx ++ xorl %esi,%ebp ++ xorl 36(%esp),%ebx ++ roll $1,%ebx ++ addl %ebp,%eax ++ rorl $2,%edx ++ movl %ecx,%ebp ++ roll $5,%ebp ++ movl %ebx,48(%esp) ++ leal 3395469782(%ebx,%eax,1),%ebx ++ movl 52(%esp),%eax ++ addl %ebp,%ebx ++ # 20_39 77 ++ movl %ecx,%ebp ++ xorl 60(%esp),%eax ++ xorl %edx,%ebp ++ xorl 20(%esp),%eax ++ xorl %edi,%ebp ++ xorl 40(%esp),%eax ++ roll $1,%eax ++ addl %ebp,%esi ++ rorl $2,%ecx ++ movl %ebx,%ebp ++ roll $5,%ebp ++ leal 3395469782(%eax,%esi,1),%eax ++ movl 56(%esp),%esi ++ addl %ebp,%eax ++ # 20_39 78 ++ movl %ebx,%ebp ++ xorl (%esp),%esi ++ xorl %ecx,%ebp ++ xorl 24(%esp),%esi ++ xorl %edx,%ebp ++ xorl 44(%esp),%esi ++ roll $1,%esi ++ addl %ebp,%edi ++ rorl $2,%ebx ++ movl %eax,%ebp ++ roll $5,%ebp ++ leal 3395469782(%esi,%edi,1),%esi ++ movl 60(%esp),%edi ++ addl %ebp,%esi ++ # 20_39 79 ++ movl %eax,%ebp ++ xorl 4(%esp),%edi ++ xorl %ebx,%ebp ++ xorl 28(%esp),%edi ++ xorl %ecx,%ebp ++ xorl 48(%esp),%edi ++ roll $1,%edi ++ addl %ebp,%edx ++ rorl $2,%eax ++ movl %esi,%ebp ++ roll $5,%ebp ++ leal 3395469782(%edi,%edx,1),%edi ++ addl %ebp,%edi ++ movl 96(%esp),%ebp ++ movl 100(%esp),%edx ++ addl (%ebp),%edi ++ addl 4(%ebp),%esi ++ addl 8(%ebp),%eax ++ addl 12(%ebp),%ebx ++ addl 16(%ebp),%ecx ++ movl %edi,(%ebp) ++ addl $64,%edx ++ movl %esi,4(%ebp) ++ cmpl 104(%esp),%edx ++ movl %eax,8(%ebp) ++ movl %ecx,%edi ++ movl %ebx,12(%ebp) ++ movl %edx,%esi ++ movl %ecx,16(%ebp) ++ jb L000loop ++ addl $76,%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115 ++.byte 102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82 ++.byte 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 ++.byte 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +diff --git a/crypto/sha/asm/sha256-586-mac.S b/crypto/sha/asm/sha256-586-mac.S +new file mode 100644 +index 0000000..67c7a96 +--- /dev/null ++++ b/crypto/sha/asm/sha256-586-mac.S +@@ -0,0 +1,256 @@ ++.file "sha512-586.s" ++.text ++.globl _sha256_block_data_order ++.align 4 ++_sha256_block_data_order: ++L_sha256_block_data_order_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl %esp,%ebx ++ call L000pic_point ++L000pic_point: ++ popl %ebp ++ leal L001K256-L000pic_point(%ebp),%ebp ++ subl $16,%esp ++ andl $-64,%esp ++ shll $6,%eax ++ addl %edi,%eax ++ movl %esi,(%esp) ++ movl %edi,4(%esp) ++ movl %eax,8(%esp) ++ movl %ebx,12(%esp) ++.align 4,0x90 ++L002loop: ++ movl (%edi),%eax ++ movl 4(%edi),%ebx ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 16(%edi),%eax ++ movl 20(%edi),%ebx ++ movl 24(%edi),%ecx ++ movl 28(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 32(%edi),%eax ++ movl 36(%edi),%ebx ++ movl 40(%edi),%ecx ++ movl 44(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 48(%edi),%eax ++ movl 52(%edi),%ebx ++ movl 56(%edi),%ecx ++ movl 60(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ addl $64,%edi ++ subl $32,%esp ++ movl %edi,100(%esp) ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edi ++ movl %ebx,4(%esp) ++ movl %ecx,8(%esp) ++ movl %edi,12(%esp) ++ movl 16(%esi),%edx ++ movl 20(%esi),%ebx ++ movl 24(%esi),%ecx ++ movl 28(%esi),%edi ++ movl %ebx,20(%esp) ++ movl %ecx,24(%esp) ++ movl %edi,28(%esp) ++.align 4,0x90 ++L00300_15: ++ movl 92(%esp),%ebx ++ movl %edx,%ecx ++ rorl $14,%ecx ++ movl 20(%esp),%esi ++ xorl %edx,%ecx ++ rorl $5,%ecx ++ xorl %edx,%ecx ++ rorl $6,%ecx ++ movl 24(%esp),%edi ++ addl %ecx,%ebx ++ xorl %edi,%esi ++ movl %edx,16(%esp) ++ movl %eax,%ecx ++ andl %edx,%esi ++ movl 12(%esp),%edx ++ xorl %edi,%esi ++ movl %eax,%edi ++ addl %esi,%ebx ++ rorl $9,%ecx ++ addl 28(%esp),%ebx ++ xorl %eax,%ecx ++ rorl $11,%ecx ++ movl 4(%esp),%esi ++ xorl %eax,%ecx ++ rorl $2,%ecx ++ addl %ebx,%edx ++ movl 8(%esp),%edi ++ addl %ecx,%ebx ++ movl %eax,(%esp) ++ movl %eax,%ecx ++ subl $4,%esp ++ orl %esi,%eax ++ andl %esi,%ecx ++ andl %edi,%eax ++ movl (%ebp),%esi ++ orl %ecx,%eax ++ addl $4,%ebp ++ addl %ebx,%eax ++ addl %esi,%edx ++ addl %esi,%eax ++ cmpl $3248222580,%esi ++ jne L00300_15 ++ movl 152(%esp),%ebx ++.align 4,0x90 ++L00416_63: ++ movl %ebx,%esi ++ movl 100(%esp),%ecx ++ rorl $11,%esi ++ movl %ecx,%edi ++ xorl %ebx,%esi ++ rorl $7,%esi ++ shrl $3,%ebx ++ rorl $2,%edi ++ xorl %esi,%ebx ++ xorl %ecx,%edi ++ rorl $17,%edi ++ shrl $10,%ecx ++ addl 156(%esp),%ebx ++ xorl %ecx,%edi ++ addl 120(%esp),%ebx ++ movl %edx,%ecx ++ addl %edi,%ebx ++ rorl $14,%ecx ++ movl 20(%esp),%esi ++ xorl %edx,%ecx ++ rorl $5,%ecx ++ movl %ebx,92(%esp) ++ xorl %edx,%ecx ++ rorl $6,%ecx ++ movl 24(%esp),%edi ++ addl %ecx,%ebx ++ xorl %edi,%esi ++ movl %edx,16(%esp) ++ movl %eax,%ecx ++ andl %edx,%esi ++ movl 12(%esp),%edx ++ xorl %edi,%esi ++ movl %eax,%edi ++ addl %esi,%ebx ++ rorl $9,%ecx ++ addl 28(%esp),%ebx ++ xorl %eax,%ecx ++ rorl $11,%ecx ++ movl 4(%esp),%esi ++ xorl %eax,%ecx ++ rorl $2,%ecx ++ addl %ebx,%edx ++ movl 8(%esp),%edi ++ addl %ecx,%ebx ++ movl %eax,(%esp) ++ movl %eax,%ecx ++ subl $4,%esp ++ orl %esi,%eax ++ andl %esi,%ecx ++ andl %edi,%eax ++ movl (%ebp),%esi ++ orl %ecx,%eax ++ addl $4,%ebp ++ addl %ebx,%eax ++ movl 152(%esp),%ebx ++ addl %esi,%edx ++ addl %esi,%eax ++ cmpl $3329325298,%esi ++ jne L00416_63 ++ movl 352(%esp),%esi ++ movl 4(%esp),%ebx ++ movl 8(%esp),%ecx ++ movl 12(%esp),%edi ++ addl (%esi),%eax ++ addl 4(%esi),%ebx ++ addl 8(%esi),%ecx ++ addl 12(%esi),%edi ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ movl %ecx,8(%esi) ++ movl %edi,12(%esi) ++ movl 20(%esp),%eax ++ movl 24(%esp),%ebx ++ movl 28(%esp),%ecx ++ movl 356(%esp),%edi ++ addl 16(%esi),%edx ++ addl 20(%esi),%eax ++ addl 24(%esi),%ebx ++ addl 28(%esi),%ecx ++ movl %edx,16(%esi) ++ movl %eax,20(%esi) ++ movl %ebx,24(%esi) ++ movl %ecx,28(%esi) ++ addl $352,%esp ++ subl $256,%ebp ++ cmpl 8(%esp),%edi ++ jb L002loop ++ movl 12(%esp),%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 6,0x90 ++L001K256: ++.long 1116352408,1899447441,3049323471,3921009573 ++.long 961987163,1508970993,2453635748,2870763221 ++.long 3624381080,310598401,607225278,1426881987 ++.long 1925078388,2162078206,2614888103,3248222580 ++.long 3835390401,4022224774,264347078,604807628 ++.long 770255983,1249150122,1555081692,1996064986 ++.long 2554220882,2821834349,2952996808,3210313671 ++.long 3336571891,3584528711,113926993,338241895 ++.long 666307205,773529912,1294757372,1396182291 ++.long 1695183700,1986661051,2177026350,2456956037 ++.long 2730485921,2820302411,3259730800,3345764771 ++.long 3516065817,3600352804,4094571909,275423344 ++.long 430227734,506948616,659060556,883997877 ++.long 958139571,1322822218,1537002063,1747873779 ++.long 1955562222,2024104815,2227730452,2361852424 ++.long 2428436474,2756734187,3204031479,3329325298 ++.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 ++.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 ++.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 ++.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 ++.byte 62,0 +diff --git a/crypto/sha/asm/sha512-586-mac.S b/crypto/sha/asm/sha512-586-mac.S +new file mode 100644 +index 0000000..2c99753 +--- /dev/null ++++ b/crypto/sha/asm/sha512-586-mac.S +@@ -0,0 +1,561 @@ ++.file "sha512-586.s" ++.text ++.globl _sha512_block_data_order ++.align 4 ++_sha512_block_data_order: ++L_sha512_block_data_order_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ movl 20(%esp),%esi ++ movl 24(%esp),%edi ++ movl 28(%esp),%eax ++ movl %esp,%ebx ++ call L000pic_point ++L000pic_point: ++ popl %ebp ++ leal L001K512-L000pic_point(%ebp),%ebp ++ subl $16,%esp ++ andl $-64,%esp ++ shll $7,%eax ++ addl %edi,%eax ++ movl %esi,(%esp) ++ movl %edi,4(%esp) ++ movl %eax,8(%esp) ++ movl %ebx,12(%esp) ++.align 4,0x90 ++L002loop_x86: ++ movl (%edi),%eax ++ movl 4(%edi),%ebx ++ movl 8(%edi),%ecx ++ movl 12(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 16(%edi),%eax ++ movl 20(%edi),%ebx ++ movl 24(%edi),%ecx ++ movl 28(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 32(%edi),%eax ++ movl 36(%edi),%ebx ++ movl 40(%edi),%ecx ++ movl 44(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 48(%edi),%eax ++ movl 52(%edi),%ebx ++ movl 56(%edi),%ecx ++ movl 60(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 64(%edi),%eax ++ movl 68(%edi),%ebx ++ movl 72(%edi),%ecx ++ movl 76(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 80(%edi),%eax ++ movl 84(%edi),%ebx ++ movl 88(%edi),%ecx ++ movl 92(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 96(%edi),%eax ++ movl 100(%edi),%ebx ++ movl 104(%edi),%ecx ++ movl 108(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ movl 112(%edi),%eax ++ movl 116(%edi),%ebx ++ movl 120(%edi),%ecx ++ movl 124(%edi),%edx ++ bswap %eax ++ bswap %ebx ++ bswap %ecx ++ bswap %edx ++ pushl %eax ++ pushl %ebx ++ pushl %ecx ++ pushl %edx ++ addl $128,%edi ++ subl $72,%esp ++ movl %edi,204(%esp) ++ leal 8(%esp),%edi ++ movl $16,%ecx ++.long 2784229001 ++.align 4,0x90 ++L00300_15_x86: ++ movl 40(%esp),%ecx ++ movl 44(%esp),%edx ++ movl %ecx,%esi ++ shrl $9,%ecx ++ movl %edx,%edi ++ shrl $9,%edx ++ movl %ecx,%ebx ++ shll $14,%esi ++ movl %edx,%eax ++ shll $14,%edi ++ xorl %esi,%ebx ++ shrl $5,%ecx ++ xorl %edi,%eax ++ shrl $5,%edx ++ xorl %ecx,%eax ++ shll $4,%esi ++ xorl %edx,%ebx ++ shll $4,%edi ++ xorl %esi,%ebx ++ shrl $4,%ecx ++ xorl %edi,%eax ++ shrl $4,%edx ++ xorl %ecx,%eax ++ shll $5,%esi ++ xorl %edx,%ebx ++ shll $5,%edi ++ xorl %esi,%eax ++ xorl %edi,%ebx ++ movl 48(%esp),%ecx ++ movl 52(%esp),%edx ++ movl 56(%esp),%esi ++ movl 60(%esp),%edi ++ addl 64(%esp),%eax ++ adcl 68(%esp),%ebx ++ xorl %esi,%ecx ++ xorl %edi,%edx ++ andl 40(%esp),%ecx ++ andl 44(%esp),%edx ++ addl 192(%esp),%eax ++ adcl 196(%esp),%ebx ++ xorl %esi,%ecx ++ xorl %edi,%edx ++ movl (%ebp),%esi ++ movl 4(%ebp),%edi ++ addl %ecx,%eax ++ adcl %edx,%ebx ++ movl 32(%esp),%ecx ++ movl 36(%esp),%edx ++ addl %esi,%eax ++ adcl %edi,%ebx ++ movl %eax,(%esp) ++ movl %ebx,4(%esp) ++ addl %ecx,%eax ++ adcl %edx,%ebx ++ movl 8(%esp),%ecx ++ movl 12(%esp),%edx ++ movl %eax,32(%esp) ++ movl %ebx,36(%esp) ++ movl %ecx,%esi ++ shrl $2,%ecx ++ movl %edx,%edi ++ shrl $2,%edx ++ movl %ecx,%ebx ++ shll $4,%esi ++ movl %edx,%eax ++ shll $4,%edi ++ xorl %esi,%ebx ++ shrl $5,%ecx ++ xorl %edi,%eax ++ shrl $5,%edx ++ xorl %ecx,%ebx ++ shll $21,%esi ++ xorl %edx,%eax ++ shll $21,%edi ++ xorl %esi,%eax ++ shrl $21,%ecx ++ xorl %edi,%ebx ++ shrl $21,%edx ++ xorl %ecx,%eax ++ shll $5,%esi ++ xorl %edx,%ebx ++ shll $5,%edi ++ xorl %esi,%eax ++ xorl %edi,%ebx ++ movl 8(%esp),%ecx ++ movl 12(%esp),%edx ++ movl 16(%esp),%esi ++ movl 20(%esp),%edi ++ addl (%esp),%eax ++ adcl 4(%esp),%ebx ++ orl %esi,%ecx ++ orl %edi,%edx ++ andl 24(%esp),%ecx ++ andl 28(%esp),%edx ++ andl 8(%esp),%esi ++ andl 12(%esp),%edi ++ orl %esi,%ecx ++ orl %edi,%edx ++ addl %ecx,%eax ++ adcl %edx,%ebx ++ movl %eax,(%esp) ++ movl %ebx,4(%esp) ++ movb (%ebp),%dl ++ subl $8,%esp ++ leal 8(%ebp),%ebp ++ cmpb $148,%dl ++ jne L00300_15_x86 ++.align 4,0x90 ++L00416_79_x86: ++ movl 312(%esp),%ecx ++ movl 316(%esp),%edx ++ movl %ecx,%esi ++ shrl $1,%ecx ++ movl %edx,%edi ++ shrl $1,%edx ++ movl %ecx,%eax ++ shll $24,%esi ++ movl %edx,%ebx ++ shll $24,%edi ++ xorl %esi,%ebx ++ shrl $6,%ecx ++ xorl %edi,%eax ++ shrl $6,%edx ++ xorl %ecx,%eax ++ shll $7,%esi ++ xorl %edx,%ebx ++ shll $1,%edi ++ xorl %esi,%ebx ++ shrl $1,%ecx ++ xorl %edi,%eax ++ shrl $1,%edx ++ xorl %ecx,%eax ++ shll $6,%edi ++ xorl %edx,%ebx ++ xorl %edi,%eax ++ movl %eax,(%esp) ++ movl %ebx,4(%esp) ++ movl 208(%esp),%ecx ++ movl 212(%esp),%edx ++ movl %ecx,%esi ++ shrl $6,%ecx ++ movl %edx,%edi ++ shrl $6,%edx ++ movl %ecx,%eax ++ shll $3,%esi ++ movl %edx,%ebx ++ shll $3,%edi ++ xorl %esi,%eax ++ shrl $13,%ecx ++ xorl %edi,%ebx ++ shrl $13,%edx ++ xorl %ecx,%eax ++ shll $10,%esi ++ xorl %edx,%ebx ++ shll $10,%edi ++ xorl %esi,%ebx ++ shrl $10,%ecx ++ xorl %edi,%eax ++ shrl $10,%edx ++ xorl %ecx,%ebx ++ shll $13,%edi ++ xorl %edx,%eax ++ xorl %edi,%eax ++ movl 320(%esp),%ecx ++ movl 324(%esp),%edx ++ addl (%esp),%eax ++ adcl 4(%esp),%ebx ++ movl 248(%esp),%esi ++ movl 252(%esp),%edi ++ addl %ecx,%eax ++ adcl %edx,%ebx ++ addl %esi,%eax ++ adcl %edi,%ebx ++ movl %eax,192(%esp) ++ movl %ebx,196(%esp) ++ movl 40(%esp),%ecx ++ movl 44(%esp),%edx ++ movl %ecx,%esi ++ shrl $9,%ecx ++ movl %edx,%edi ++ shrl $9,%edx ++ movl %ecx,%ebx ++ shll $14,%esi ++ movl %edx,%eax ++ shll $14,%edi ++ xorl %esi,%ebx ++ shrl $5,%ecx ++ xorl %edi,%eax ++ shrl $5,%edx ++ xorl %ecx,%eax ++ shll $4,%esi ++ xorl %edx,%ebx ++ shll $4,%edi ++ xorl %esi,%ebx ++ shrl $4,%ecx ++ xorl %edi,%eax ++ shrl $4,%edx ++ xorl %ecx,%eax ++ shll $5,%esi ++ xorl %edx,%ebx ++ shll $5,%edi ++ xorl %esi,%eax ++ xorl %edi,%ebx ++ movl 48(%esp),%ecx ++ movl 52(%esp),%edx ++ movl 56(%esp),%esi ++ movl 60(%esp),%edi ++ addl 64(%esp),%eax ++ adcl 68(%esp),%ebx ++ xorl %esi,%ecx ++ xorl %edi,%edx ++ andl 40(%esp),%ecx ++ andl 44(%esp),%edx ++ addl 192(%esp),%eax ++ adcl 196(%esp),%ebx ++ xorl %esi,%ecx ++ xorl %edi,%edx ++ movl (%ebp),%esi ++ movl 4(%ebp),%edi ++ addl %ecx,%eax ++ adcl %edx,%ebx ++ movl 32(%esp),%ecx ++ movl 36(%esp),%edx ++ addl %esi,%eax ++ adcl %edi,%ebx ++ movl %eax,(%esp) ++ movl %ebx,4(%esp) ++ addl %ecx,%eax ++ adcl %edx,%ebx ++ movl 8(%esp),%ecx ++ movl 12(%esp),%edx ++ movl %eax,32(%esp) ++ movl %ebx,36(%esp) ++ movl %ecx,%esi ++ shrl $2,%ecx ++ movl %edx,%edi ++ shrl $2,%edx ++ movl %ecx,%ebx ++ shll $4,%esi ++ movl %edx,%eax ++ shll $4,%edi ++ xorl %esi,%ebx ++ shrl $5,%ecx ++ xorl %edi,%eax ++ shrl $5,%edx ++ xorl %ecx,%ebx ++ shll $21,%esi ++ xorl %edx,%eax ++ shll $21,%edi ++ xorl %esi,%eax ++ shrl $21,%ecx ++ xorl %edi,%ebx ++ shrl $21,%edx ++ xorl %ecx,%eax ++ shll $5,%esi ++ xorl %edx,%ebx ++ shll $5,%edi ++ xorl %esi,%eax ++ xorl %edi,%ebx ++ movl 8(%esp),%ecx ++ movl 12(%esp),%edx ++ movl 16(%esp),%esi ++ movl 20(%esp),%edi ++ addl (%esp),%eax ++ adcl 4(%esp),%ebx ++ orl %esi,%ecx ++ orl %edi,%edx ++ andl 24(%esp),%ecx ++ andl 28(%esp),%edx ++ andl 8(%esp),%esi ++ andl 12(%esp),%edi ++ orl %esi,%ecx ++ orl %edi,%edx ++ addl %ecx,%eax ++ adcl %edx,%ebx ++ movl %eax,(%esp) ++ movl %ebx,4(%esp) ++ movb (%ebp),%dl ++ subl $8,%esp ++ leal 8(%ebp),%ebp ++ cmpb $23,%dl ++ jne L00416_79_x86 ++ movl 840(%esp),%esi ++ movl 844(%esp),%edi ++ movl (%esi),%eax ++ movl 4(%esi),%ebx ++ movl 8(%esi),%ecx ++ movl 12(%esi),%edx ++ addl 8(%esp),%eax ++ adcl 12(%esp),%ebx ++ movl %eax,(%esi) ++ movl %ebx,4(%esi) ++ addl 16(%esp),%ecx ++ adcl 20(%esp),%edx ++ movl %ecx,8(%esi) ++ movl %edx,12(%esi) ++ movl 16(%esi),%eax ++ movl 20(%esi),%ebx ++ movl 24(%esi),%ecx ++ movl 28(%esi),%edx ++ addl 24(%esp),%eax ++ adcl 28(%esp),%ebx ++ movl %eax,16(%esi) ++ movl %ebx,20(%esi) ++ addl 32(%esp),%ecx ++ adcl 36(%esp),%edx ++ movl %ecx,24(%esi) ++ movl %edx,28(%esi) ++ movl 32(%esi),%eax ++ movl 36(%esi),%ebx ++ movl 40(%esi),%ecx ++ movl 44(%esi),%edx ++ addl 40(%esp),%eax ++ adcl 44(%esp),%ebx ++ movl %eax,32(%esi) ++ movl %ebx,36(%esi) ++ addl 48(%esp),%ecx ++ adcl 52(%esp),%edx ++ movl %ecx,40(%esi) ++ movl %edx,44(%esi) ++ movl 48(%esi),%eax ++ movl 52(%esi),%ebx ++ movl 56(%esi),%ecx ++ movl 60(%esi),%edx ++ addl 56(%esp),%eax ++ adcl 60(%esp),%ebx ++ movl %eax,48(%esi) ++ movl %ebx,52(%esi) ++ addl 64(%esp),%ecx ++ adcl 68(%esp),%edx ++ movl %ecx,56(%esi) ++ movl %edx,60(%esi) ++ addl $840,%esp ++ subl $640,%ebp ++ cmpl 8(%esp),%edi ++ jb L002loop_x86 ++ movl 12(%esp),%esp ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.align 6,0x90 ++L001K512: ++.long 3609767458,1116352408 ++.long 602891725,1899447441 ++.long 3964484399,3049323471 ++.long 2173295548,3921009573 ++.long 4081628472,961987163 ++.long 3053834265,1508970993 ++.long 2937671579,2453635748 ++.long 3664609560,2870763221 ++.long 2734883394,3624381080 ++.long 1164996542,310598401 ++.long 1323610764,607225278 ++.long 3590304994,1426881987 ++.long 4068182383,1925078388 ++.long 991336113,2162078206 ++.long 633803317,2614888103 ++.long 3479774868,3248222580 ++.long 2666613458,3835390401 ++.long 944711139,4022224774 ++.long 2341262773,264347078 ++.long 2007800933,604807628 ++.long 1495990901,770255983 ++.long 1856431235,1249150122 ++.long 3175218132,1555081692 ++.long 2198950837,1996064986 ++.long 3999719339,2554220882 ++.long 766784016,2821834349 ++.long 2566594879,2952996808 ++.long 3203337956,3210313671 ++.long 1034457026,3336571891 ++.long 2466948901,3584528711 ++.long 3758326383,113926993 ++.long 168717936,338241895 ++.long 1188179964,666307205 ++.long 1546045734,773529912 ++.long 1522805485,1294757372 ++.long 2643833823,1396182291 ++.long 2343527390,1695183700 ++.long 1014477480,1986661051 ++.long 1206759142,2177026350 ++.long 344077627,2456956037 ++.long 1290863460,2730485921 ++.long 3158454273,2820302411 ++.long 3505952657,3259730800 ++.long 106217008,3345764771 ++.long 3606008344,3516065817 ++.long 1432725776,3600352804 ++.long 1467031594,4094571909 ++.long 851169720,275423344 ++.long 3100823752,430227734 ++.long 1363258195,506948616 ++.long 3750685593,659060556 ++.long 3785050280,883997877 ++.long 3318307427,958139571 ++.long 3812723403,1322822218 ++.long 2003034995,1537002063 ++.long 3602036899,1747873779 ++.long 1575990012,1955562222 ++.long 1125592928,2024104815 ++.long 2716904306,2227730452 ++.long 442776044,2361852424 ++.long 593698344,2428436474 ++.long 3733110249,2756734187 ++.long 2999351573,3204031479 ++.long 3815920427,3329325298 ++.long 3928383900,3391569614 ++.long 566280711,3515267271 ++.long 3454069534,3940187606 ++.long 4000239992,4118630271 ++.long 1914138554,116418474 ++.long 2731055270,174292421 ++.long 3203993006,289380356 ++.long 320620315,460393269 ++.long 587496836,685471733 ++.long 1086792851,852142971 ++.long 365543100,1017036298 ++.long 2618297676,1126000580 ++.long 3409855158,1288033470 ++.long 4234509866,1501505948 ++.long 987167468,1607167915 ++.long 1246189591,1816402316 ++.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97 ++.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 ++.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 ++.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 ++.byte 62,0 +diff --git a/crypto/x86cpuid-mac.S b/crypto/x86cpuid-mac.S +new file mode 100644 +index 0000000..db36e6f +--- /dev/null ++++ b/crypto/x86cpuid-mac.S +@@ -0,0 +1,316 @@ ++.file "x86cpuid.s" ++.text ++.globl _OPENSSL_ia32_cpuid ++.align 4 ++_OPENSSL_ia32_cpuid: ++L_OPENSSL_ia32_cpuid_begin: ++ pushl %ebp ++ pushl %ebx ++ pushl %esi ++ pushl %edi ++ xorl %edx,%edx ++ pushfl ++ popl %eax ++ movl %eax,%ecx ++ xorl $2097152,%eax ++ pushl %eax ++ popfl ++ pushfl ++ popl %eax ++ xorl %eax,%ecx ++ xorl %eax,%eax ++ btl $21,%ecx ++ jnc L000nocpuid ++ .byte 0x0f,0xa2 ++ movl %eax,%edi ++ xorl %eax,%eax ++ cmpl $1970169159,%ebx ++ setne %al ++ movl %eax,%ebp ++ cmpl $1231384169,%edx ++ setne %al ++ orl %eax,%ebp ++ cmpl $1818588270,%ecx ++ setne %al ++ orl %eax,%ebp ++ jz L001intel ++ cmpl $1752462657,%ebx ++ setne %al ++ movl %eax,%esi ++ cmpl $1769238117,%edx ++ setne %al ++ orl %eax,%esi ++ cmpl $1145913699,%ecx ++ setne %al ++ orl %eax,%esi ++ jnz L001intel ++ movl $2147483648,%eax ++ .byte 0x0f,0xa2 ++ cmpl $2147483649,%eax ++ jb L001intel ++ movl %eax,%esi ++ movl $2147483649,%eax ++ .byte 0x0f,0xa2 ++ orl %ecx,%ebp ++ andl $2049,%ebp ++ cmpl $2147483656,%esi ++ jb L001intel ++ movl $2147483656,%eax ++ .byte 0x0f,0xa2 ++ movzbl %cl,%esi ++ incl %esi ++ movl $1,%eax ++ .byte 0x0f,0xa2 ++ btl $28,%edx ++ jnc L002generic ++ shrl $16,%ebx ++ andl $255,%ebx ++ cmpl %esi,%ebx ++ ja L002generic ++ andl $4026531839,%edx ++ jmp L002generic ++L001intel: ++ cmpl $4,%edi ++ movl $-1,%edi ++ jb L003nocacheinfo ++ movl $4,%eax ++ movl $0,%ecx ++ .byte 0x0f,0xa2 ++ movl %eax,%edi ++ shrl $14,%edi ++ andl $4095,%edi ++L003nocacheinfo: ++ movl $1,%eax ++ .byte 0x0f,0xa2 ++ andl $3220176895,%edx ++ cmpl $0,%ebp ++ jne L004notintel ++ orl $1073741824,%edx ++ andb $15,%ah ++ cmpb $15,%ah ++ jne L004notintel ++ orl $1048576,%edx ++L004notintel: ++ btl $28,%edx ++ jnc L002generic ++ andl $4026531839,%edx ++ cmpl $0,%edi ++ je L002generic ++ orl $268435456,%edx ++ shrl $16,%ebx ++ cmpb $1,%bl ++ ja L002generic ++ andl $4026531839,%edx ++L002generic: ++ andl $2048,%ebp ++ andl $4294965247,%ecx ++ movl %edx,%esi ++ orl %ecx,%ebp ++ btl $27,%ecx ++ jnc L005clear_avx ++ xorl %ecx,%ecx ++.byte 15,1,208 ++ andl $6,%eax ++ cmpl $6,%eax ++ je L006done ++ cmpl $2,%eax ++ je L005clear_avx ++L007clear_xmm: ++ andl $4261412861,%ebp ++ andl $4278190079,%esi ++L005clear_avx: ++ andl $4026525695,%ebp ++L006done: ++ movl %esi,%eax ++ movl %ebp,%edx ++L000nocpuid: ++ popl %edi ++ popl %esi ++ popl %ebx ++ popl %ebp ++ ret ++.globl _OPENSSL_rdtsc ++.align 4 ++_OPENSSL_rdtsc: ++L_OPENSSL_rdtsc_begin: ++ xorl %eax,%eax ++ xorl %edx,%edx ++ call L008PIC_me_up ++L008PIC_me_up: ++ popl %ecx ++ movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L008PIC_me_up(%ecx),%ecx ++ btl $4,(%ecx) ++ jnc L009notsc ++ .byte 0x0f,0x31 ++L009notsc: ++ ret ++.globl _OPENSSL_instrument_halt ++.align 4 ++_OPENSSL_instrument_halt: ++L_OPENSSL_instrument_halt_begin: ++ call L010PIC_me_up ++L010PIC_me_up: ++ popl %ecx ++ movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L010PIC_me_up(%ecx),%ecx ++ btl $4,(%ecx) ++ jnc L011nohalt ++.long 2421723150 ++ andl $3,%eax ++ jnz L011nohalt ++ pushfl ++ popl %eax ++ btl $9,%eax ++ jnc L011nohalt ++ .byte 0x0f,0x31 ++ pushl %edx ++ pushl %eax ++ hlt ++ .byte 0x0f,0x31 ++ subl (%esp),%eax ++ sbbl 4(%esp),%edx ++ addl $8,%esp ++ ret ++L011nohalt: ++ xorl %eax,%eax ++ xorl %edx,%edx ++ ret ++.globl _OPENSSL_far_spin ++.align 4 ++_OPENSSL_far_spin: ++L_OPENSSL_far_spin_begin: ++ pushfl ++ popl %eax ++ btl $9,%eax ++ jnc L012nospin ++ movl 4(%esp),%eax ++ movl 8(%esp),%ecx ++.long 2430111262 ++ xorl %eax,%eax ++ movl (%ecx),%edx ++ jmp L013spin ++.align 4,0x90 ++L013spin: ++ incl %eax ++ cmpl (%ecx),%edx ++ je L013spin ++.long 529567888 ++ ret ++L012nospin: ++ xorl %eax,%eax ++ xorl %edx,%edx ++ ret ++.globl _OPENSSL_wipe_cpu ++.align 4 ++_OPENSSL_wipe_cpu: ++L_OPENSSL_wipe_cpu_begin: ++ xorl %eax,%eax ++ xorl %edx,%edx ++ call L014PIC_me_up ++L014PIC_me_up: ++ popl %ecx ++ movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L014PIC_me_up(%ecx),%ecx ++ movl (%ecx),%ecx ++ btl $1,(%ecx) ++ jnc L015no_x87 ++.long 4007259865,4007259865,4007259865,4007259865,2430851995 ++L015no_x87: ++ leal 4(%esp),%eax ++ ret ++.globl _OPENSSL_atomic_add ++.align 4 ++_OPENSSL_atomic_add: ++L_OPENSSL_atomic_add_begin: ++ movl 4(%esp),%edx ++ movl 8(%esp),%ecx ++ pushl %ebx ++ nop ++ movl (%edx),%eax ++L016spin: ++ leal (%eax,%ecx,1),%ebx ++ nop ++.long 447811568 ++ jne L016spin ++ movl %ebx,%eax ++ popl %ebx ++ ret ++.globl _OPENSSL_indirect_call ++.align 4 ++_OPENSSL_indirect_call: ++L_OPENSSL_indirect_call_begin: ++ pushl %ebp ++ movl %esp,%ebp ++ subl $28,%esp ++ movl 12(%ebp),%ecx ++ movl %ecx,(%esp) ++ movl 16(%ebp),%edx ++ movl %edx,4(%esp) ++ movl 20(%ebp),%eax ++ movl %eax,8(%esp) ++ movl 24(%ebp),%eax ++ movl %eax,12(%esp) ++ movl 28(%ebp),%eax ++ movl %eax,16(%esp) ++ movl 32(%ebp),%eax ++ movl %eax,20(%esp) ++ movl 36(%ebp),%eax ++ movl %eax,24(%esp) ++ call *8(%ebp) ++ movl %ebp,%esp ++ popl %ebp ++ ret ++.globl _OPENSSL_cleanse ++.align 4 ++_OPENSSL_cleanse: ++L_OPENSSL_cleanse_begin: ++ movl 4(%esp),%edx ++ movl 8(%esp),%ecx ++ xorl %eax,%eax ++ cmpl $7,%ecx ++ jae L017lot ++ cmpl $0,%ecx ++ je L018ret ++L019little: ++ movb %al,(%edx) ++ subl $1,%ecx ++ leal 1(%edx),%edx ++ jnz L019little ++L018ret: ++ ret ++.align 4,0x90 ++L017lot: ++ testl $3,%edx ++ jz L020aligned ++ movb %al,(%edx) ++ leal -1(%ecx),%ecx ++ leal 1(%edx),%edx ++ jmp L017lot ++L020aligned: ++ movl %eax,(%edx) ++ leal -4(%ecx),%ecx ++ testl $-4,%ecx ++ leal 4(%edx),%edx ++ jnz L020aligned ++ cmpl $0,%ecx ++ jne L019little ++ ret ++.globl _OPENSSL_ia32_rdrand ++.align 4 ++_OPENSSL_ia32_rdrand: ++L_OPENSSL_ia32_rdrand_begin: ++ movl $8,%ecx ++L021loop: ++.byte 15,199,240 ++ jc L022break ++ loop L021loop ++L022break: ++ cmpl $0,%eax ++ cmovel %ecx,%eax ++ ret ++.section __IMPORT,__pointers,non_lazy_symbol_pointers ++L_OPENSSL_ia32cap_P$non_lazy_ptr: ++.indirect_symbol _OPENSSL_ia32cap_P ++.long 0 ++.comm _OPENSSL_ia32cap_P,8,2 ++.mod_init_func ++.align 2 ++.long _OPENSSL_cpuid_setup +-- +1.8.3.2 + diff --git a/chromium/third_party/openssl/openssl/patches/neon_runtime.patch b/chromium/third_party/openssl/openssl/patches/neon_runtime.patch index 90f716ae83d..7c6218cfbfb 100644 --- a/chromium/third_party/openssl/openssl/patches/neon_runtime.patch +++ b/chromium/third_party/openssl/openssl/patches/neon_runtime.patch @@ -982,7 +982,7 @@ index 7bef015..3b6ab1d 100644 + global_arm_neon_enabled = on != 0; + } + -+int CRYPTO_is_NEON_capable() ++int CRYPTO_is_NEON_capable(void) + { + return global_arm_neon_enabled; + } @@ -1005,7 +1005,7 @@ index e11ac73..db339c3 100644 + +/* CRYPTO_is_NEON_capable returns the last value given to + * CRYPTO_set_NEON_capable, or else zero if it has never been called. */ -+int CRYPTO_is_NEON_capable(); ++int CRYPTO_is_NEON_capable(void); + int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ void CRYPTO_lock(int mode, int type,const char *file,int line); diff --git a/chromium/third_party/openssl/openssl/patches/new_channelid.patch b/chromium/third_party/openssl/openssl/patches/new_channelid.patch new file mode 100644 index 00000000000..22a8fdd3bda --- /dev/null +++ b/chromium/third_party/openssl/openssl/patches/new_channelid.patch @@ -0,0 +1,273 @@ +diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h +index a3944f1..fe92ccf 100644 +--- a/include/openssl/ssl.h ++++ b/include/openssl/ssl.h +@@ -547,6 +547,13 @@ struct ssl_session_st + #ifndef OPENSSL_NO_SRP + char *srp_username; + #endif ++ ++ /* original_handshake_hash contains the handshake hash (either ++ * SHA-1+MD5 or SHA-2, depending on TLS version) for the original, full ++ * handshake that created a session. This is used by Channel IDs during ++ * resumption. */ ++ unsigned char original_handshake_hash[EVP_MAX_MD_SIZE]; ++ unsigned int original_handshake_hash_len; + }; + + #endif +diff --git a/include/openssl/tls1.h b/include/openssl/tls1.h +index c4f69aa..5559486 100644 +--- a/include/openssl/tls1.h ++++ b/include/openssl/tls1.h +@@ -255,7 +255,7 @@ extern "C" { + #endif + + /* This is not an IANA defined extension number */ +-#define TLSEXT_TYPE_channel_id 30031 ++#define TLSEXT_TYPE_channel_id 30032 + + /* NameType value from RFC 3546 */ + #define TLSEXT_NAMETYPE_host_name 0 +diff --git a/ssl/s3_clnt.c b/ssl/s3_clnt.c +index 640df80..d6154c5 100644 +--- a/ssl/s3_clnt.c ++++ b/ssl/s3_clnt.c +@@ -583,6 +583,18 @@ int ssl3_connect(SSL *s) + #endif + s->s3->tmp.next_state=SSL3_ST_CR_FINISHED_A; + } ++ if (s->s3->tlsext_channel_id_valid) ++ { ++ /* This is a non-resumption handshake. If it ++ * involves ChannelID, then record the ++ * handshake hashes at this point in the ++ * session so that any resumption of this ++ * session with ChannelID can sign those ++ * hashes. */ ++ ret = tls1_record_handshake_hashes_for_channel_id(s); ++ if (ret <= 0) ++ goto end; ++ } + } + s->init_num=0; + break; +diff --git a/ssl/ssl.h b/ssl/ssl.h +index a3944f1..fe92ccf 100644 +--- a/ssl/ssl.h ++++ b/ssl/ssl.h +@@ -547,6 +547,13 @@ struct ssl_session_st + #ifndef OPENSSL_NO_SRP + char *srp_username; + #endif ++ ++ /* original_handshake_hash contains the handshake hash (either ++ * SHA-1+MD5 or SHA-2, depending on TLS version) for the original, full ++ * handshake that created a session. This is used by Channel IDs during ++ * resumption. */ ++ unsigned char original_handshake_hash[EVP_MAX_MD_SIZE]; ++ unsigned int original_handshake_hash_len; + }; + + #endif +diff --git a/ssl/ssl_locl.h b/ssl/ssl_locl.h +index 531a291..c975d31 100644 +--- a/ssl/ssl_locl.h ++++ b/ssl/ssl_locl.h +@@ -1102,6 +1102,7 @@ void ssl_free_wbio_buffer(SSL *s); + int tls1_change_cipher_state(SSL *s, int which); + int tls1_setup_key_block(SSL *s); + int tls1_enc(SSL *s, int snd); ++int tls1_handshake_digest(SSL *s, unsigned char *out, size_t out_len); + int tls1_final_finish_mac(SSL *s, + const char *str, int slen, unsigned char *p); + int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *p); +@@ -1158,6 +1159,7 @@ int tls12_get_sigid(const EVP_PKEY *pk); + const EVP_MD *tls12_get_hash(unsigned char hash_alg); + + int tls1_channel_id_hash(EVP_MD_CTX *ctx, SSL *s); ++int tls1_record_handshake_hashes_for_channel_id(SSL *s); + #endif + + int ssl3_can_cutthrough(const SSL *s); +diff --git a/ssl/t1_enc.c b/ssl/t1_enc.c +index 87b7021..d30ce61 100644 +--- a/ssl/t1_enc.c ++++ b/ssl/t1_enc.c +@@ -1147,53 +1147,79 @@ int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *out) + return((int)ret); + } + ++/* tls1_handshake_digest calculates the current handshake hash and writes it to ++ * |out|, which has space for |out_len| bytes. It returns the number of bytes ++ * written or -1 in the event of an error. This function works on a copy of the ++ * underlying digests so can be called multiple times and prior to the final ++ * update etc. */ ++int tls1_handshake_digest(SSL *s, unsigned char *out, size_t out_len) ++ { ++ const EVP_MD *md; ++ EVP_MD_CTX ctx; ++ int i, err = 0, len = 0; ++ long mask; ++ ++ EVP_MD_CTX_init(&ctx); ++ ++ for (i = 0; ssl_get_handshake_digest(i, &mask, &md); i++) ++ { ++ int hash_size; ++ unsigned int digest_len; ++ EVP_MD_CTX *hdgst = s->s3->handshake_dgst[i]; ++ ++ if ((mask & ssl_get_algorithm2(s)) == 0) ++ continue; ++ ++ hash_size = EVP_MD_size(md); ++ if (!hdgst || hash_size < 0 || (size_t)hash_size > out_len) ++ { ++ err = 1; ++ break; ++ } ++ ++ if (!EVP_MD_CTX_copy_ex(&ctx, hdgst) || ++ !EVP_DigestFinal_ex(&ctx, out, &digest_len) || ++ digest_len != (unsigned int)hash_size) /* internal error */ ++ { ++ err = 1; ++ break; ++ } ++ out += digest_len; ++ out_len -= digest_len; ++ len += digest_len; ++ } ++ ++ EVP_MD_CTX_cleanup(&ctx); ++ ++ if (err != 0) ++ return -1; ++ return len; ++ } ++ + int tls1_final_finish_mac(SSL *s, + const char *str, int slen, unsigned char *out) + { +- unsigned int i; +- EVP_MD_CTX ctx; + unsigned char buf[2*EVP_MAX_MD_SIZE]; +- unsigned char *q,buf2[12]; +- int idx; +- long mask; ++ unsigned char buf2[12]; + int err=0; +- const EVP_MD *md; ++ int digests_len; + +- q=buf; +- +- if (s->s3->handshake_buffer) ++ if (s->s3->handshake_buffer) + if (!ssl3_digest_cached_records(s)) + return 0; + +- EVP_MD_CTX_init(&ctx); +- +- for (idx=0;ssl_get_handshake_digest(idx,&mask,&md);idx++) ++ digests_len = tls1_handshake_digest(s, buf, sizeof(buf)); ++ if (digests_len < 0) + { +- if (mask & ssl_get_algorithm2(s)) +- { +- int hashsize = EVP_MD_size(md); +- if (hashsize < 0 || hashsize > (int)(sizeof buf - (size_t)(q-buf))) +- { +- /* internal error: 'buf' is too small for this cipersuite! */ +- err = 1; +- } +- else +- { +- EVP_MD_CTX_copy_ex(&ctx,s->s3->handshake_dgst[idx]); +- EVP_DigestFinal_ex(&ctx,q,&i); +- if (i != (unsigned int)hashsize) /* can't really happen */ +- err = 1; +- q+=i; +- } +- } ++ err = 1; ++ digests_len = 0; + } +- ++ + if (!tls1_PRF(ssl_get_algorithm2(s), +- str,slen, buf,(int)(q-buf), NULL,0, NULL,0, NULL,0, ++ str,slen, buf, digests_len, NULL,0, NULL,0, NULL,0, + s->session->master_key,s->session->master_key_length, + out,buf2,sizeof buf2)) + err = 1; +- EVP_MD_CTX_cleanup(&ctx); + + if (err) + return 0; +diff --git a/ssl/t1_lib.c b/ssl/t1_lib.c +index ea7fefa..d7ea9a5 100644 +--- a/ssl/t1_lib.c ++++ b/ssl/t1_lib.c +@@ -2684,6 +2684,17 @@ tls1_channel_id_hash(EVP_MD_CTX *md, SSL *s) + + EVP_DigestUpdate(md, kClientIDMagic, sizeof(kClientIDMagic)); + ++ if (s->hit) ++ { ++ static const char kResumptionMagic[] = "Resumption"; ++ EVP_DigestUpdate(md, kResumptionMagic, ++ sizeof(kResumptionMagic)); ++ if (s->session->original_handshake_hash_len == 0) ++ return 0; ++ EVP_DigestUpdate(md, s->session->original_handshake_hash, ++ s->session->original_handshake_hash_len); ++ } ++ + EVP_MD_CTX_init(&ctx); + for (i = 0; i < SSL_MAX_DIGEST; i++) + { +@@ -2698,3 +2709,29 @@ tls1_channel_id_hash(EVP_MD_CTX *md, SSL *s) + return 1; + } + #endif ++ ++/* tls1_record_handshake_hashes_for_channel_id records the current handshake ++ * hashes in |s->session| so that Channel ID resumptions can sign that data. */ ++int tls1_record_handshake_hashes_for_channel_id(SSL *s) ++ { ++ int digest_len; ++ /* This function should never be called for a resumed session because ++ * the handshake hashes that we wish to record are for the original, ++ * full handshake. */ ++ if (s->hit) ++ return -1; ++ /* It only makes sense to call this function if Channel IDs have been ++ * negotiated. */ ++ if (!s->s3->tlsext_channel_id_valid) ++ return -1; ++ ++ digest_len = tls1_handshake_digest( ++ s, s->session->original_handshake_hash, ++ sizeof(s->session->original_handshake_hash)); ++ if (digest_len < 0) ++ return -1; ++ ++ s->session->original_handshake_hash_len = digest_len; ++ ++ return 1; ++ } +diff --git a/ssl/tls1.h b/ssl/tls1.h +index c4f69aa..5559486 100644 +--- a/ssl/tls1.h ++++ b/ssl/tls1.h +@@ -255,7 +255,7 @@ extern "C" { + #endif + + /* This is not an IANA defined extension number */ +-#define TLSEXT_TYPE_channel_id 30031 ++#define TLSEXT_TYPE_channel_id 30032 + + /* NameType value from RFC 3546 */ + #define TLSEXT_NAMETYPE_host_name 0 diff --git a/chromium/third_party/openssl/openssl/patches/paddingext.patch b/chromium/third_party/openssl/openssl/patches/paddingext.patch new file mode 100644 index 00000000000..35da62cc3b8 --- /dev/null +++ b/chromium/third_party/openssl/openssl/patches/paddingext.patch @@ -0,0 +1,96 @@ +diff -burN android-openssl.orig/include/openssl/tls1.h android-openssl/include/openssl/tls1.h +--- android-openssl.orig/include/openssl/tls1.h 2014-04-07 17:20:17.990940592 -0700 ++++ android-openssl/include/openssl/tls1.h 2014-04-07 17:22:32.432921935 -0700 +@@ -230,6 +230,12 @@ + /* ExtensionType value from RFC5620 */ + #define TLSEXT_TYPE_heartbeat 15 + ++/* ExtensionType value for TLS padding extension. ++ * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml ++ * http://tools.ietf.org/html/draft-agl-tls-padding-03 ++ */ ++#define TLSEXT_TYPE_padding 21 ++ + /* ExtensionType value from RFC4507 */ + #define TLSEXT_TYPE_session_ticket 35 + +diff -burN android-openssl.orig/ssl/s23_clnt.c android-openssl/ssl/s23_clnt.c +--- android-openssl.orig/ssl/s23_clnt.c 2014-04-07 17:20:17.990940592 -0700 ++++ android-openssl/ssl/s23_clnt.c 2014-04-07 17:21:55.042370926 -0700 +@@ -466,7 +466,10 @@ + { + /* create Client Hello in SSL 3.0/TLS 1.0 format */ + +- /* do the record header (5 bytes) and handshake message header (4 bytes) last */ ++ /* do the record header (5 bytes) and handshake message ++ * header (4 bytes) last. Note: the code to add the ++ * padding extension in t1_lib.c depends on the size of ++ * this prefix. */ + d = p = &(buf[9]); + + *(p++) = version_major; +diff -burN android-openssl.orig/ssl/s3_clnt.c android-openssl/ssl/s3_clnt.c +--- android-openssl.orig/ssl/s3_clnt.c 2014-04-07 17:20:18.040941329 -0700 ++++ android-openssl/ssl/s3_clnt.c 2014-04-07 17:21:55.042370926 -0700 +@@ -758,7 +758,9 @@ + if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0) + goto err; + +- /* Do the message type and length last */ ++ /* Do the message type and length last. ++ * Note: the code to add the padding extension in t1_lib.c ++ * depends on the size of this prefix. */ + d=p= &(buf[4]); + + /* version indicates the negotiated version: for example from +diff -burN android-openssl.orig/ssl/t1_lib.c android-openssl/ssl/t1_lib.c +--- android-openssl.orig/ssl/t1_lib.c 2014-04-07 17:20:18.000940737 -0700 ++++ android-openssl/ssl/t1_lib.c 2014-04-07 17:21:55.042370926 -0700 +@@ -680,6 +680,31 @@ + } + #endif + ++ /* Add padding to workaround bugs in F5 terminators. ++ * See https://tools.ietf.org/html/draft-agl-tls-padding-02 */ ++ { ++ int hlen = ret - (unsigned char *)s->init_buf->data; ++ /* The code in s23_clnt.c to build ClientHello messages includes the ++ * 5-byte record header in the buffer, while the code in s3_clnt.c does ++ * not. */ ++ if (s->state == SSL23_ST_CW_CLNT_HELLO_A) ++ hlen -= 5; ++ if (hlen > 0xff && hlen < 0x200) ++ { ++ hlen = 0x200 - hlen; ++ if (hlen >= 4) ++ hlen -= 4; ++ else ++ hlen = 0; ++ ++ s2n(TLSEXT_TYPE_padding, ret); ++ s2n(hlen, ret); ++ memset(ret, 0, hlen); ++ ret += hlen; ++ } ++ } ++ ++ + if ((extdatalen = ret-p-2)== 0) + return p; + +diff -burN android-openssl.orig/ssl/tls1.h android-openssl/ssl/tls1.h +--- android-openssl.orig/ssl/tls1.h 2014-04-07 17:20:18.000940737 -0700 ++++ android-openssl/ssl/tls1.h 2014-04-07 17:21:55.042370926 -0700 +@@ -230,6 +230,12 @@ + /* ExtensionType value from RFC5620 */ + #define TLSEXT_TYPE_heartbeat 15 + ++/* ExtensionType value for TLS padding extension. ++ * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml ++ * http://tools.ietf.org/html/draft-agl-tls-padding-03 ++ */ ++#define TLSEXT_TYPE_padding 21 ++ + /* ExtensionType value from RFC4507 */ + #define TLSEXT_TYPE_session_ticket 35 + diff --git a/chromium/third_party/openssl/openssl/ssl/d1_both.c b/chromium/third_party/openssl/openssl/ssl/d1_both.c index de8bab873f2..9a250fdab21 100644 --- a/chromium/third_party/openssl/openssl/ssl/d1_both.c +++ b/chromium/third_party/openssl/openssl/ssl/d1_both.c @@ -620,7 +620,16 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok) frag->msg_header.frag_off = 0; } else + { frag = (hm_fragment*) item->data; + if (frag->msg_header.msg_len != msg_hdr->msg_len) + { + item = NULL; + frag = NULL; + goto err; + } + } + /* If message is already reassembled, this must be a * retransmit and can be dropped. @@ -777,6 +786,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) int i,al; struct hm_header_st msg_hdr; + redo: /* see if we have the required fragment already */ if ((frag_len = dtls1_retrieve_buffered_fragment(s,max,ok)) || *ok) { @@ -835,8 +845,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) s->msg_callback_arg); s->init_num = 0; - return dtls1_get_message_fragment(s, st1, stn, - max, ok); + goto redo; } else /* Incorrectly formated Hello request */ { diff --git a/chromium/third_party/openssl/openssl/ssl/d1_clnt.c b/chromium/third_party/openssl/openssl/ssl/d1_clnt.c index 7e8077e4450..735e544c6f9 100644 --- a/chromium/third_party/openssl/openssl/ssl/d1_clnt.c +++ b/chromium/third_party/openssl/openssl/ssl/d1_clnt.c @@ -874,7 +874,7 @@ int dtls1_client_hello(SSL *s) *(p++)=0; /* Add the NULL method */ #ifndef OPENSSL_NO_TLSEXT - if ((p = ssl_add_clienthello_tlsext(s, p, buf+SSL3_RT_MAX_PLAIN_LENGTH)) == NULL) + if ((p = ssl_add_clienthello_tlsext(s, p, buf+SSL3_RT_MAX_PLAIN_LENGTH, 0)) == NULL) { SSLerr(SSL_F_DTLS1_CLIENT_HELLO,ERR_R_INTERNAL_ERROR); goto err; diff --git a/chromium/third_party/openssl/openssl/ssl/d1_lib.c b/chromium/third_party/openssl/openssl/ssl/d1_lib.c index f61f7181830..1004c578626 100644 --- a/chromium/third_party/openssl/openssl/ssl/d1_lib.c +++ b/chromium/third_party/openssl/openssl/ssl/d1_lib.c @@ -176,9 +176,12 @@ static void dtls1_clear_queues(SSL *s) while ( (item = pqueue_pop(s->d1->buffered_app_data.q)) != NULL) { - frag = (hm_fragment *)item->data; - OPENSSL_free(frag->fragment); - OPENSSL_free(frag); + rdata = (DTLS1_RECORD_DATA *) item->data; + if (rdata->rbuf.buf) + { + OPENSSL_free(rdata->rbuf.buf); + } + OPENSSL_free(item->data); pitem_free(item); } } diff --git a/chromium/third_party/openssl/openssl/ssl/d1_pkt.c b/chromium/third_party/openssl/openssl/ssl/d1_pkt.c index 0bf87be6d21..028d48bb46e 100644 --- a/chromium/third_party/openssl/openssl/ssl/d1_pkt.c +++ b/chromium/third_party/openssl/openssl/ssl/d1_pkt.c @@ -239,14 +239,6 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority) } #endif - /* insert should not fail, since duplicates are dropped */ - if (pqueue_insert(queue->q, item) == NULL) - { - OPENSSL_free(rdata); - pitem_free(item); - return(0); - } - s->packet = NULL; s->packet_length = 0; memset(&(s->s3->rbuf), 0, sizeof(SSL3_BUFFER)); @@ -259,7 +251,15 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority) pitem_free(item); return(0); } - + + /* insert should not fail, since duplicates are dropped */ + if (pqueue_insert(queue->q, item) == NULL) + { + OPENSSL_free(rdata); + pitem_free(item); + return(0); + } + return(1); } diff --git a/chromium/third_party/openssl/openssl/ssl/d1_srvr.c b/chromium/third_party/openssl/openssl/ssl/d1_srvr.c index 29421da9aac..014ef52bbb2 100644 --- a/chromium/third_party/openssl/openssl/ssl/d1_srvr.c +++ b/chromium/third_party/openssl/openssl/ssl/d1_srvr.c @@ -1345,6 +1345,7 @@ int dtls1_send_server_key_exchange(SSL *s) (unsigned char *)encodedPoint, encodedlen); OPENSSL_free(encodedPoint); + encodedPoint = NULL; p += encodedlen; } #endif diff --git a/chromium/third_party/openssl/openssl/ssl/s23_clnt.c b/chromium/third_party/openssl/openssl/ssl/s23_clnt.c index 2d0f51dab82..750d208a866 100644 --- a/chromium/third_party/openssl/openssl/ssl/s23_clnt.c +++ b/chromium/third_party/openssl/openssl/ssl/s23_clnt.c @@ -466,7 +466,10 @@ static int ssl23_client_hello(SSL *s) { /* create Client Hello in SSL 3.0/TLS 1.0 format */ - /* do the record header (5 bytes) and handshake message header (4 bytes) last */ + /* do the record header (5 bytes) and handshake message + * header (4 bytes) last. Note: the final argument to + * ssl_add_clienthello_tlsext below depends on the size + * of this prefix. */ d = p = &(buf[9]); *(p++) = version_major; @@ -523,7 +526,10 @@ static int ssl23_client_hello(SSL *s) SSLerr(SSL_F_SSL23_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT); return -1; } - if ((p = ssl_add_clienthello_tlsext(s, p, buf+SSL3_RT_MAX_PLAIN_LENGTH)) == NULL) + /* The buffer includes the 5 byte record header, so + * subtract it to compute hlen for + * ssl_add_clienthello_tlsext. */ + if ((p = ssl_add_clienthello_tlsext(s, p, buf+SSL3_RT_MAX_PLAIN_LENGTH, p-buf-5)) == NULL) { SSLerr(SSL_F_SSL23_CLIENT_HELLO,ERR_R_INTERNAL_ERROR); return -1; diff --git a/chromium/third_party/openssl/openssl/ssl/s3_clnt.c b/chromium/third_party/openssl/openssl/ssl/s3_clnt.c index 85ffd6780bc..5eb106fbd3a 100644 --- a/chromium/third_party/openssl/openssl/ssl/s3_clnt.c +++ b/chromium/third_party/openssl/openssl/ssl/s3_clnt.c @@ -557,7 +557,8 @@ int ssl3_connect(SSL *s) } else { - if ((SSL_get_mode(s) & SSL_MODE_HANDSHAKE_CUTTHROUGH) && SSL_get_cipher_bits(s, NULL) >= 128 + if ((SSL_get_mode(s) & SSL_MODE_HANDSHAKE_CUTTHROUGH) + && ssl3_can_cutthrough(s) && s->s3->previous_server_finished_len == 0 /* no cutthrough on renegotiation (would complicate the state machine) */ ) { @@ -582,6 +583,18 @@ int ssl3_connect(SSL *s) #endif s->s3->tmp.next_state=SSL3_ST_CR_FINISHED_A; } + if (s->s3->tlsext_channel_id_valid) + { + /* This is a non-resumption handshake. If it + * involves ChannelID, then record the + * handshake hashes at this point in the + * session so that any resumption of this + * session with ChannelID can sign those + * hashes. */ + ret = tls1_record_handshake_hashes_for_channel_id(s); + if (ret <= 0) + goto end; + } } s->init_num=0; break; @@ -607,6 +620,7 @@ int ssl3_connect(SSL *s) case SSL3_ST_CR_FINISHED_A: case SSL3_ST_CR_FINISHED_B: + s->s3->flags |= SSL3_FLAGS_CCS_OK; ret=ssl3_get_finished(s,SSL3_ST_CR_FINISHED_A, SSL3_ST_CR_FINISHED_B); if (ret <= 0) goto end; @@ -757,7 +771,9 @@ int ssl3_client_hello(SSL *s) if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0) goto err; - /* Do the message type and length last */ + /* Do the message type and length last. + * Note: the final argument to ssl_add_clienthello_tlsext below + * depends on the size of this prefix. */ d=p= &(buf[4]); /* version indicates the negotiated version: for example from @@ -864,7 +880,7 @@ int ssl3_client_hello(SSL *s) SSLerr(SSL_F_SSL3_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT); goto err; } - if ((p = ssl_add_clienthello_tlsext(s, p, buf+SSL3_RT_MAX_PLAIN_LENGTH)) == NULL) + if ((p = ssl_add_clienthello_tlsext(s, p, buf+SSL3_RT_MAX_PLAIN_LENGTH, p-buf)) == NULL) { SSLerr(SSL_F_SSL3_CLIENT_HELLO,ERR_R_INTERNAL_ERROR); goto err; @@ -988,6 +1004,7 @@ int ssl3_get_server_hello(SSL *s) SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT); goto f_err; } + s->s3->flags |= SSL3_FLAGS_CCS_OK; s->hit=1; } else /* a miss or crap from the other end */ @@ -2589,6 +2606,13 @@ int ssl3_send_client_key_exchange(SSL *s) int ecdh_clnt_cert = 0; int field_size = 0; + if (s->session->sess_cert == NULL) + { + ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_UNEXPECTED_MESSAGE); + SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,SSL_R_UNEXPECTED_MESSAGE); + goto err; + } + /* Did we send out the client's * ECDH share for use in premaster * computation as part of client certificate? @@ -3007,33 +3031,18 @@ int ssl3_send_client_verify(SSL *s) unsigned char *p,*d; unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH]; EVP_PKEY *pkey; - EVP_PKEY_CTX *pctx=NULL; + EVP_PKEY_CTX *pctx = NULL; EVP_MD_CTX mctx; - unsigned u=0; + unsigned signature_length = 0; unsigned long n; - int j; EVP_MD_CTX_init(&mctx); if (s->state == SSL3_ST_CW_CERT_VRFY_A) { - d=(unsigned char *)s->init_buf->data; - p= &(d[4]); - pkey=s->cert->key->privatekey; -/* Create context from key and test if sha1 is allowed as digest */ - pctx = EVP_PKEY_CTX_new(pkey,NULL); - EVP_PKEY_sign_init(pctx); - if (EVP_PKEY_CTX_set_signature_md(pctx, EVP_sha1())>0) - { - if (TLS1_get_version(s) < TLS1_2_VERSION) - s->method->ssl3_enc->cert_verify_mac(s, - NID_sha1, - &(data[MD5_DIGEST_LENGTH])); - } - else - { - ERR_clear_error(); - } + d = (unsigned char *)s->init_buf->data; + p = &(d[4]); + pkey = s->cert->key->privatekey; /* For TLS v1.2 send signature algorithm and signature * using agreed digest and cached handshake records. */ @@ -3057,14 +3066,15 @@ int ssl3_send_client_verify(SSL *s) #endif if (!EVP_SignInit_ex(&mctx, md, NULL) || !EVP_SignUpdate(&mctx, hdata, hdatalen) - || !EVP_SignFinal(&mctx, p + 2, &u, pkey)) + || !EVP_SignFinal(&mctx, p + 2, + &signature_length, pkey)) { SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_EVP_LIB); goto err; } - s2n(u,p); - n = u + 4; + s2n(signature_length, p); + n = signature_length + 4; if (!ssl3_digest_cached_records(s)) goto err; } @@ -3072,78 +3082,80 @@ int ssl3_send_client_verify(SSL *s) #ifndef OPENSSL_NO_RSA if (pkey->type == EVP_PKEY_RSA) { + s->method->ssl3_enc->cert_verify_mac(s, NID_md5, data); s->method->ssl3_enc->cert_verify_mac(s, - NID_md5, - &(data[0])); + NID_sha1, &(data[MD5_DIGEST_LENGTH])); if (RSA_sign(NID_md5_sha1, data, - MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, - &(p[2]), &u, pkey->pkey.rsa) <= 0 ) + MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH, + &(p[2]), &signature_length, pkey->pkey.rsa) <= 0) { - SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_LIB); + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_RSA_LIB); goto err; } - s2n(u,p); - n=u+2; + s2n(signature_length, p); + n = signature_length + 2; } else #endif #ifndef OPENSSL_NO_DSA - if (pkey->type == EVP_PKEY_DSA) + if (pkey->type == EVP_PKEY_DSA) { - if (!DSA_sign(pkey->save_type, - &(data[MD5_DIGEST_LENGTH]), - SHA_DIGEST_LENGTH,&(p[2]), - (unsigned int *)&j,pkey->pkey.dsa)) + s->method->ssl3_enc->cert_verify_mac(s, NID_sha1, data); + if (!DSA_sign(pkey->save_type, data, + SHA_DIGEST_LENGTH, &(p[2]), + &signature_length, pkey->pkey.dsa)) { - SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_DSA_LIB); + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_DSA_LIB); goto err; } - s2n(j,p); - n=j+2; + s2n(signature_length, p); + n = signature_length + 2; } else #endif #ifndef OPENSSL_NO_ECDSA - if (pkey->type == EVP_PKEY_EC) + if (pkey->type == EVP_PKEY_EC) { - if (!ECDSA_sign(pkey->save_type, - &(data[MD5_DIGEST_LENGTH]), - SHA_DIGEST_LENGTH,&(p[2]), - (unsigned int *)&j,pkey->pkey.ec)) + s->method->ssl3_enc->cert_verify_mac(s, NID_sha1, data); + if (!ECDSA_sign(pkey->save_type, data, + SHA_DIGEST_LENGTH, &(p[2]), + &signature_length, pkey->pkey.ec)) { - SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, - ERR_R_ECDSA_LIB); + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_ECDSA_LIB); goto err; } - s2n(j,p); - n=j+2; + s2n(signature_length, p); + n = signature_length + 2; } else #endif if (pkey->type == NID_id_GostR3410_94 || pkey->type == NID_id_GostR3410_2001) - { - unsigned char signbuf[64]; - int i; - size_t sigsize=64; - s->method->ssl3_enc->cert_verify_mac(s, - NID_id_GostR3411_94, - data); - if (EVP_PKEY_sign(pctx, signbuf, &sigsize, data, 32) <= 0) { - SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, - ERR_R_INTERNAL_ERROR); - goto err; - } - for (i=63,j=0; i>=0; j++, i--) { - p[2+j]=signbuf[i]; - } - s2n(j,p); - n=j+2; - } + { + unsigned char signbuf[64]; + int i, j; + size_t sigsize=64; + + s->method->ssl3_enc->cert_verify_mac(s, + NID_id_GostR3411_94, + data); + pctx = EVP_PKEY_CTX_new(pkey, NULL); + EVP_PKEY_sign_init(pctx); + if (EVP_PKEY_sign(pctx, signbuf, &sigsize, data, 32) <= 0) { + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, + ERR_R_INTERNAL_ERROR); + goto err; + } + for (i=63,j=0; i>=0; j++, i--) { + p[2+j]=signbuf[i]; + } + s2n(j,p); + n=j+2; + } else - { + { SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_INTERNAL_ERROR); goto err; - } + } *(d++)=SSL3_MT_CERTIFICATE_VERIFY; l2n3(n,d); diff --git a/chromium/third_party/openssl/openssl/ssl/s3_pkt.c b/chromium/third_party/openssl/openssl/ssl/s3_pkt.c index 9f117d17331..03ed461add3 100644 --- a/chromium/third_party/openssl/openssl/ssl/s3_pkt.c +++ b/chromium/third_party/openssl/openssl/ssl/s3_pkt.c @@ -641,9 +641,6 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, SSL3_BUFFER *wb=&(s->s3->wbuf); SSL_SESSION *sess; - if (wb->buf == NULL) - if (!ssl3_setup_write_buffer(s)) - return -1; /* first check if there is a SSL3_BUFFER still being written * out. This will happen with non blocking IO */ @@ -659,6 +656,10 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, /* if it went, fall through and send more stuff */ } + if (wb->buf == NULL) + if (!ssl3_setup_write_buffer(s)) + return -1; + if (len == 0 && !create_empty_fragment) return 0; @@ -1060,7 +1061,7 @@ start: { s->rstate=SSL_ST_READ_HEADER; rr->off=0; - if (s->mode & SSL_MODE_RELEASE_BUFFERS) + if (s->mode & SSL_MODE_RELEASE_BUFFERS && s->s3->rbuf.left == 0) ssl3_release_read_buffer(s); } } @@ -1302,6 +1303,15 @@ start: goto f_err; } + if (!(s->s3->flags & SSL3_FLAGS_CCS_OK)) + { + al=SSL_AD_UNEXPECTED_MESSAGE; + SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_CCS_RECEIVED_EARLY); + goto f_err; + } + + s->s3->flags &= ~SSL3_FLAGS_CCS_OK; + rr->length=0; if (s->msg_callback) @@ -1436,7 +1446,7 @@ int ssl3_do_change_cipher_spec(SSL *s) if (s->s3->tmp.key_block == NULL) { - if (s->session == NULL) + if (s->session == NULL || s->session->master_key_length == 0) { /* might happen if dtls1_read_bytes() calls this */ SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC,SSL_R_CCS_RECEIVED_EARLY); diff --git a/chromium/third_party/openssl/openssl/ssl/s3_srvr.c b/chromium/third_party/openssl/openssl/ssl/s3_srvr.c index 5c3343a9876..94e9b6f5fd4 100644 --- a/chromium/third_party/openssl/openssl/ssl/s3_srvr.c +++ b/chromium/third_party/openssl/openssl/ssl/s3_srvr.c @@ -669,6 +669,7 @@ int ssl3_accept(SSL *s) case SSL3_ST_SR_CERT_VRFY_A: case SSL3_ST_SR_CERT_VRFY_B: + s->s3->flags |= SSL3_FLAGS_CCS_OK; /* we should decide if we expected this one */ ret=ssl3_get_cert_verify(s); if (ret <= 0) goto end; @@ -686,6 +687,7 @@ int ssl3_accept(SSL *s) # endif channel_id = s->s3->tlsext_channel_id_valid; #endif + s->s3->flags |= SSL3_FLAGS_CCS_OK; if (next_proto_neg) s->state=SSL3_ST_SR_NEXT_PROTO_A; @@ -721,6 +723,7 @@ int ssl3_accept(SSL *s) case SSL3_ST_SR_FINISHED_A: case SSL3_ST_SR_FINISHED_B: + s->s3->flags |= SSL3_FLAGS_CCS_OK; ret=ssl3_get_finished(s,SSL3_ST_SR_FINISHED_A, SSL3_ST_SR_FINISHED_B); if (ret <= 0) goto end; diff --git a/chromium/third_party/openssl/openssl/ssl/ssl.h b/chromium/third_party/openssl/openssl/ssl/ssl.h index a3944f177dd..5faae95c1d5 100644 --- a/chromium/third_party/openssl/openssl/ssl/ssl.h +++ b/chromium/third_party/openssl/openssl/ssl/ssl.h @@ -547,6 +547,13 @@ struct ssl_session_st #ifndef OPENSSL_NO_SRP char *srp_username; #endif + + /* original_handshake_hash contains the handshake hash (either + * SHA-1+MD5 or SHA-2, depending on TLS version) for the original, full + * handshake that created a session. This is used by Channel IDs during + * resumption. */ + unsigned char original_handshake_hash[EVP_MAX_MD_SIZE]; + unsigned int original_handshake_hash_len; }; #endif @@ -1982,6 +1989,9 @@ STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); int SSL_add_client_CA(SSL *ssl,X509 *x); int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x); +void SSL_get_client_certificate_types(const SSL *s, const unsigned char **ctype, + size_t *ctype_num); + void SSL_set_connect_state(SSL *s); void SSL_set_accept_state(SSL *s); diff --git a/chromium/third_party/openssl/openssl/ssl/ssl3.h b/chromium/third_party/openssl/openssl/ssl/ssl3.h index 899c8a89837..c5864ee54bb 100644 --- a/chromium/third_party/openssl/openssl/ssl/ssl3.h +++ b/chromium/third_party/openssl/openssl/ssl/ssl3.h @@ -388,6 +388,7 @@ typedef struct ssl3_buffer_st #define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 #define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 #define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020 +#define SSL3_FLAGS_CCS_OK 0x0080 /* SSL3_FLAGS_SGC_RESTART_DONE is set when we * restart a handshake because of MS SGC and so prevents us @@ -508,7 +509,7 @@ typedef struct ssl3_state_st /* used for certificate requests */ int cert_req; int ctype_num; - char ctype[SSL3_CT_NUMBER]; + unsigned char ctype[SSL3_CT_NUMBER]; STACK_OF(X509_NAME) *ca_names; int use_rsa_tmp; diff --git a/chromium/third_party/openssl/openssl/ssl/ssl_cert.c b/chromium/third_party/openssl/openssl/ssl/ssl_cert.c index 5123a89182e..8a61650c521 100644 --- a/chromium/third_party/openssl/openssl/ssl/ssl_cert.c +++ b/chromium/third_party/openssl/openssl/ssl/ssl_cert.c @@ -655,6 +655,21 @@ int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x) return(add_client_CA(&(ctx->client_CA),x)); } +void SSL_get_client_certificate_types(const SSL *s, const unsigned char **ctype, + size_t *ctype_num) + { + if (s->s3 == NULL) + { + *ctype = NULL; + *ctype_num = 0; + return; + } + + /* This always returns nothing for the server. */ + *ctype = s->s3->tmp.ctype; + *ctype_num = s->s3->tmp.ctype_num; + } + static int xname_cmp(const X509_NAME * const *a, const X509_NAME * const *b) { return(X509_NAME_cmp(*a,*b)); diff --git a/chromium/third_party/openssl/openssl/ssl/ssl_lib.c b/chromium/third_party/openssl/openssl/ssl/ssl_lib.c index 45a76ae70f6..d75b9f7eb67 100644 --- a/chromium/third_party/openssl/openssl/ssl/ssl_lib.c +++ b/chromium/third_party/openssl/openssl/ssl/ssl_lib.c @@ -3305,12 +3305,39 @@ int SSL_cutthrough_complete(const SSL *s) s->version >= SSL3_VERSION && s->s3->in_read_app_data == 0 && /* cutthrough only applies to write() */ (SSL_get_mode((SSL*)s) & SSL_MODE_HANDSHAKE_CUTTHROUGH) && /* cutthrough enabled */ - SSL_get_cipher_bits(s, NULL) >= 128 && /* strong cipher choosen */ + ssl3_can_cutthrough(s) && /* cutthrough allowed */ s->s3->previous_server_finished_len == 0 && /* not a renegotiation handshake */ (s->state == SSL3_ST_CR_SESSION_TICKET_A || /* ready to write app-data*/ s->state == SSL3_ST_CR_FINISHED_A)); } +int ssl3_can_cutthrough(const SSL *s) + { + const SSL_CIPHER *c; + + /* require a strong enough cipher */ + if (SSL_get_cipher_bits(s, NULL) < 128) + return 0; + + /* require NPN extension */ +#ifndef OPENSSL_NO_NEXTPROTONEG + if (!s->s3->next_proto_neg_seen) + return 0; +#else + return 0; +#endif + + /* require a forward-secret cipher */ + c = SSL_get_current_cipher(s); + if (!c || (c->algorithm_mkey != SSL_kEDH && + c->algorithm_mkey != SSL_kEECDH)) + { + return 0; + } + + return 1; + } + /* Allocates new EVP_MD_CTX and sets pointer to it into given pointer * vairable, freeing EVP_MD_CTX previously stored in that variable, if * any. If EVP_MD pointer is passed, initializes ctx with this md diff --git a/chromium/third_party/openssl/openssl/ssl/ssl_locl.h b/chromium/third_party/openssl/openssl/ssl/ssl_locl.h index 2f8cda8e30b..c975d31e0a6 100644 --- a/chromium/third_party/openssl/openssl/ssl/ssl_locl.h +++ b/chromium/third_party/openssl/openssl/ssl/ssl_locl.h @@ -1102,6 +1102,7 @@ void ssl_free_wbio_buffer(SSL *s); int tls1_change_cipher_state(SSL *s, int which); int tls1_setup_key_block(SSL *s); int tls1_enc(SSL *s, int snd); +int tls1_handshake_digest(SSL *s, unsigned char *out, size_t out_len); int tls1_final_finish_mac(SSL *s, const char *str, int slen, unsigned char *p); int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *p); @@ -1127,8 +1128,8 @@ int tls1_ec_nid2curve_id(int nid); #endif /* OPENSSL_NO_EC */ #ifndef OPENSSL_NO_TLSEXT -unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit); -unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit); +unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf, unsigned char *limit, size_t header_len); +unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf, unsigned char *limit); int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); int ssl_prepare_clienthello_tlsext(SSL *s); @@ -1158,8 +1159,11 @@ int tls12_get_sigid(const EVP_PKEY *pk); const EVP_MD *tls12_get_hash(unsigned char hash_alg); int tls1_channel_id_hash(EVP_MD_CTX *ctx, SSL *s); +int tls1_record_handshake_hashes_for_channel_id(SSL *s); #endif +int ssl3_can_cutthrough(const SSL *s); + EVP_MD_CTX* ssl_replace_hash(EVP_MD_CTX **hash,const EVP_MD *md) ; void ssl_clear_hash_ctx(EVP_MD_CTX **hash); int ssl_add_serverhello_renegotiate_ext(SSL *s, unsigned char *p, int *len, diff --git a/chromium/third_party/openssl/openssl/ssl/t1_enc.c b/chromium/third_party/openssl/openssl/ssl/t1_enc.c index 87b70218653..d30ce6137ed 100644 --- a/chromium/third_party/openssl/openssl/ssl/t1_enc.c +++ b/chromium/third_party/openssl/openssl/ssl/t1_enc.c @@ -1147,53 +1147,79 @@ int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *out) return((int)ret); } +/* tls1_handshake_digest calculates the current handshake hash and writes it to + * |out|, which has space for |out_len| bytes. It returns the number of bytes + * written or -1 in the event of an error. This function works on a copy of the + * underlying digests so can be called multiple times and prior to the final + * update etc. */ +int tls1_handshake_digest(SSL *s, unsigned char *out, size_t out_len) + { + const EVP_MD *md; + EVP_MD_CTX ctx; + int i, err = 0, len = 0; + long mask; + + EVP_MD_CTX_init(&ctx); + + for (i = 0; ssl_get_handshake_digest(i, &mask, &md); i++) + { + int hash_size; + unsigned int digest_len; + EVP_MD_CTX *hdgst = s->s3->handshake_dgst[i]; + + if ((mask & ssl_get_algorithm2(s)) == 0) + continue; + + hash_size = EVP_MD_size(md); + if (!hdgst || hash_size < 0 || (size_t)hash_size > out_len) + { + err = 1; + break; + } + + if (!EVP_MD_CTX_copy_ex(&ctx, hdgst) || + !EVP_DigestFinal_ex(&ctx, out, &digest_len) || + digest_len != (unsigned int)hash_size) /* internal error */ + { + err = 1; + break; + } + out += digest_len; + out_len -= digest_len; + len += digest_len; + } + + EVP_MD_CTX_cleanup(&ctx); + + if (err != 0) + return -1; + return len; + } + int tls1_final_finish_mac(SSL *s, const char *str, int slen, unsigned char *out) { - unsigned int i; - EVP_MD_CTX ctx; unsigned char buf[2*EVP_MAX_MD_SIZE]; - unsigned char *q,buf2[12]; - int idx; - long mask; + unsigned char buf2[12]; int err=0; - const EVP_MD *md; + int digests_len; - q=buf; - - if (s->s3->handshake_buffer) + if (s->s3->handshake_buffer) if (!ssl3_digest_cached_records(s)) return 0; - EVP_MD_CTX_init(&ctx); - - for (idx=0;ssl_get_handshake_digest(idx,&mask,&md);idx++) + digests_len = tls1_handshake_digest(s, buf, sizeof(buf)); + if (digests_len < 0) { - if (mask & ssl_get_algorithm2(s)) - { - int hashsize = EVP_MD_size(md); - if (hashsize < 0 || hashsize > (int)(sizeof buf - (size_t)(q-buf))) - { - /* internal error: 'buf' is too small for this cipersuite! */ - err = 1; - } - else - { - EVP_MD_CTX_copy_ex(&ctx,s->s3->handshake_dgst[idx]); - EVP_DigestFinal_ex(&ctx,q,&i); - if (i != (unsigned int)hashsize) /* can't really happen */ - err = 1; - q+=i; - } - } + err = 1; + digests_len = 0; } - + if (!tls1_PRF(ssl_get_algorithm2(s), - str,slen, buf,(int)(q-buf), NULL,0, NULL,0, NULL,0, + str,slen, buf, digests_len, NULL,0, NULL,0, NULL,0, s->session->master_key,s->session->master_key_length, out,buf2,sizeof buf2)) err = 1; - EVP_MD_CTX_cleanup(&ctx); if (err) return 0; diff --git a/chromium/third_party/openssl/openssl/ssl/t1_lib.c b/chromium/third_party/openssl/openssl/ssl/t1_lib.c index f447f227c29..d7ea9a5238d 100644 --- a/chromium/third_party/openssl/openssl/ssl/t1_lib.c +++ b/chromium/third_party/openssl/openssl/ssl/t1_lib.c @@ -341,15 +341,19 @@ int tls12_get_req_sig_algs(SSL *s, unsigned char *p) return (int)slen; } -unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned char *limit) +/* header_len is the length of the ClientHello header written so far, used to + * compute padding. It does not include the record header. Pass 0 if no padding + * is to be done. */ +unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf, unsigned char *limit, size_t header_len) { int extdatalen=0; - unsigned char *ret = p; + unsigned char *orig = buf; + unsigned char *ret = buf; /* don't add extensions for SSLv3 unless doing secure renegotiation */ if (s->client_version == SSL3_VERSION && !s->s3->send_connection_binding) - return p; + return orig; ret+=2; @@ -398,7 +402,7 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned cha return NULL; } - if((limit - p - 4 - el) < 0) return NULL; + if((limit - ret - 4 - el) < 0) return NULL; s2n(TLSEXT_TYPE_renegotiate,ret); s2n(el,ret); @@ -440,55 +444,6 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned cha } #endif -#ifndef OPENSSL_NO_EC - if (s->tlsext_ecpointformatlist != NULL && - s->version != DTLS1_VERSION) - { - /* Add TLS extension ECPointFormats to the ClientHello message */ - long lenmax; - - if ((lenmax = limit - ret - 5) < 0) return NULL; - if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax) return NULL; - if (s->tlsext_ecpointformatlist_length > 255) - { - SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); - return NULL; - } - - s2n(TLSEXT_TYPE_ec_point_formats,ret); - s2n(s->tlsext_ecpointformatlist_length + 1,ret); - *(ret++) = (unsigned char) s->tlsext_ecpointformatlist_length; - memcpy(ret, s->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist_length); - ret+=s->tlsext_ecpointformatlist_length; - } - if (s->tlsext_ellipticcurvelist != NULL && - s->version != DTLS1_VERSION) - { - /* Add TLS extension EllipticCurves to the ClientHello message */ - long lenmax; - - if ((lenmax = limit - ret - 6) < 0) return NULL; - if (s->tlsext_ellipticcurvelist_length > (unsigned long)lenmax) return NULL; - if (s->tlsext_ellipticcurvelist_length > 65532) - { - SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); - return NULL; - } - - s2n(TLSEXT_TYPE_elliptic_curves,ret); - s2n(s->tlsext_ellipticcurvelist_length + 2, ret); - - /* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for - * elliptic_curve_list, but the examples use two bytes. - * http://www1.ietf.org/mail-archive/web/tls/current/msg00538.html - * resolves this to two bytes. - */ - s2n(s->tlsext_ellipticcurvelist_length, ret); - memcpy(ret, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist_length); - ret+=s->tlsext_ellipticcurvelist_length; - } -#endif /* OPENSSL_NO_EC */ - if (!(SSL_get_options(s) & SSL_OP_NO_TICKET)) { int ticklen; @@ -647,7 +602,7 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned cha ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0); - if((limit - p - 4 - el) < 0) return NULL; + if((limit - ret - 4 - el) < 0) return NULL; s2n(TLSEXT_TYPE_use_srtp,ret); s2n(el,ret); @@ -661,24 +616,104 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned cha } #endif - if ((extdatalen = ret-p-2)== 0) - return p; +#ifndef OPENSSL_NO_EC + /* WebSphere Application Server 7.0 is intolerant to the last extension + * being zero-length. ECC extensions are non-empty and not dropped until + * fallback to SSL3, at which point all extensions are gone. */ + if (s->tlsext_ecpointformatlist != NULL && + s->version != DTLS1_VERSION) + { + /* Add TLS extension ECPointFormats to the ClientHello message */ + long lenmax; - s2n(extdatalen,p); + if ((lenmax = limit - ret - 5) < 0) return NULL; + if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax) return NULL; + if (s->tlsext_ecpointformatlist_length > 255) + { + SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); + return NULL; + } + + s2n(TLSEXT_TYPE_ec_point_formats,ret); + s2n(s->tlsext_ecpointformatlist_length + 1,ret); + *(ret++) = (unsigned char) s->tlsext_ecpointformatlist_length; + memcpy(ret, s->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist_length); + ret+=s->tlsext_ecpointformatlist_length; + } + if (s->tlsext_ellipticcurvelist != NULL && + s->version != DTLS1_VERSION) + { + /* Add TLS extension EllipticCurves to the ClientHello message */ + long lenmax; + + if ((lenmax = limit - ret - 6) < 0) return NULL; + if (s->tlsext_ellipticcurvelist_length > (unsigned long)lenmax) return NULL; + if (s->tlsext_ellipticcurvelist_length > 65532) + { + SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR); + return NULL; + } + + s2n(TLSEXT_TYPE_elliptic_curves,ret); + s2n(s->tlsext_ellipticcurvelist_length + 2, ret); + + /* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for + * elliptic_curve_list, but the examples use two bytes. + * http://www1.ietf.org/mail-archive/web/tls/current/msg00538.html + * resolves this to two bytes. + */ + s2n(s->tlsext_ellipticcurvelist_length, ret); + memcpy(ret, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist_length); + ret+=s->tlsext_ellipticcurvelist_length; + } +#endif /* OPENSSL_NO_EC */ + + /* Add padding to workaround bugs in F5 terminators. + * See https://tools.ietf.org/html/draft-agl-tls-padding-02 */ + if (header_len > 0) + { + header_len += ret - orig; + if (header_len > 0xff && header_len < 0x200) + { + size_t padding_len = 0x200 - header_len; + /* Extensions take at least four bytes to encode. Always + * include least one byte of data if including the + * extension. WebSphere Application Server 7.0 is + * intolerant to the last extension being zero-length. */ + if (padding_len >= 4 + 1) + padding_len -= 4; + else + padding_len = 1; + if (limit - ret - 4 - (long)padding_len < 0) + return NULL; + + s2n(TLSEXT_TYPE_padding, ret); + s2n(padding_len, ret); + memset(ret, 0, padding_len); + ret += padding_len; + } + } + + + if ((extdatalen = ret-orig-2)== 0) + return orig; + + s2n(extdatalen, orig); return ret; } -unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned char *limit) +unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf, unsigned char *limit) { int extdatalen=0; - unsigned char *ret = p; + unsigned char *orig = buf; + unsigned char *ret = buf; #ifndef OPENSSL_NO_NEXTPROTONEG int next_proto_neg_seen; #endif /* don't add extensions for SSLv3, unless doing secure renegotiation */ if (s->version == SSL3_VERSION && !s->s3->send_connection_binding) - return p; + return orig; ret+=2; if (ret>=limit) return NULL; /* this really never occurs, but ... */ @@ -701,7 +736,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha return NULL; } - if((limit - p - 4 - el) < 0) return NULL; + if((limit - ret - 4 - el) < 0) return NULL; s2n(TLSEXT_TYPE_renegotiate,ret); s2n(el,ret); @@ -781,7 +816,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0); - if((limit - p - 4 - el) < 0) return NULL; + if((limit - ret - 4 - el) < 0) return NULL; s2n(TLSEXT_TYPE_use_srtp,ret); s2n(el,ret); @@ -860,10 +895,10 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha s2n(0,ret); } - if ((extdatalen = ret-p-2)== 0) - return p; + if ((extdatalen = ret-orig-2)== 0) + return orig; - s2n(extdatalen,p); + s2n(extdatalen, orig); return ret; } @@ -2649,6 +2684,17 @@ tls1_channel_id_hash(EVP_MD_CTX *md, SSL *s) EVP_DigestUpdate(md, kClientIDMagic, sizeof(kClientIDMagic)); + if (s->hit) + { + static const char kResumptionMagic[] = "Resumption"; + EVP_DigestUpdate(md, kResumptionMagic, + sizeof(kResumptionMagic)); + if (s->session->original_handshake_hash_len == 0) + return 0; + EVP_DigestUpdate(md, s->session->original_handshake_hash, + s->session->original_handshake_hash_len); + } + EVP_MD_CTX_init(&ctx); for (i = 0; i < SSL_MAX_DIGEST; i++) { @@ -2663,3 +2709,29 @@ tls1_channel_id_hash(EVP_MD_CTX *md, SSL *s) return 1; } #endif + +/* tls1_record_handshake_hashes_for_channel_id records the current handshake + * hashes in |s->session| so that Channel ID resumptions can sign that data. */ +int tls1_record_handshake_hashes_for_channel_id(SSL *s) + { + int digest_len; + /* This function should never be called for a resumed session because + * the handshake hashes that we wish to record are for the original, + * full handshake. */ + if (s->hit) + return -1; + /* It only makes sense to call this function if Channel IDs have been + * negotiated. */ + if (!s->s3->tlsext_channel_id_valid) + return -1; + + digest_len = tls1_handshake_digest( + s, s->session->original_handshake_hash, + sizeof(s->session->original_handshake_hash)); + if (digest_len < 0) + return -1; + + s->session->original_handshake_hash_len = digest_len; + + return 1; + } diff --git a/chromium/third_party/openssl/openssl/ssl/tls1.h b/chromium/third_party/openssl/openssl/ssl/tls1.h index 0ce0193c582..55594861183 100644 --- a/chromium/third_party/openssl/openssl/ssl/tls1.h +++ b/chromium/third_party/openssl/openssl/ssl/tls1.h @@ -230,6 +230,12 @@ extern "C" { /* ExtensionType value from RFC5620 */ #define TLSEXT_TYPE_heartbeat 15 +/* ExtensionType value for TLS padding extension. + * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml + * http://tools.ietf.org/html/draft-agl-tls-padding-03 + */ +#define TLSEXT_TYPE_padding 21 + /* ExtensionType value from RFC4507 */ #define TLSEXT_TYPE_session_ticket 35 @@ -249,7 +255,7 @@ extern "C" { #endif /* This is not an IANA defined extension number */ -#define TLSEXT_TYPE_channel_id 30031 +#define TLSEXT_TYPE_channel_id 30032 /* NameType value from RFC 3546 */ #define TLSEXT_NAMETYPE_host_name 0 |