From: Sebastian Siewior Subject: Re: [PATCH 2/2] salsa20_i586: Salsa20 stream cipher algorithm (i586 version) Date: Wed, 5 Dec 2007 22:49:47 +0100 Message-ID: <20071205214947.GA20246@Chamillionaire.breakpoint.cc> References: Reply-To: Sebastian Siewior Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Cc: Herbert Xu , Linux Crypto To: Tan Swee Heng Return-path: Received: from Chamillionaire.breakpoint.cc ([85.10.199.196]:50693 "EHLO Chamillionaire.breakpoint.cc" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753410AbXLEVtz (ORCPT ); Wed, 5 Dec 2007 16:49:55 -0500 Content-Disposition: inline In-Reply-To: Sender: linux-crypto-owner@vger.kernel.org List-ID: * Tan Swee Heng | 2007-12-06 04:31:25 [+0800]: >This patch contains the salsa20-i586 implementation. The original >assembly code came from >. I have reformatted >it (added indents) so that it matches the other algorithms in >arch/x86/crypto. The patch is a large one. Do you thing all those comments are requried or helping to understand what is going on? Besides that, I saw the keysetup routine is also included in assembly. Is the computed key any different from the C version? *I* would prefer to share the keysetup code with the C version because it is not a performace critical part. There are a few labels like '_label:' and 'label:' One of them should be enough or am I missing something? >This patch also contains a speed test for salsa20-i586. Usage is >"modprobe tcrypt mode=206" > >Signed-off-by: Tan Swee Heng > >==== >Note: this is a resubmission; previously the indentation in the >assembly code was missing. >diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile >index b8fbb43..265135b 100644 >--- a/arch/x86/crypto/Makefile >+++ b/arch/x86/crypto/Makefile >@@ -4,12 +4,14 @@ > > obj-$(CONFIG_CRYPTO_AES_586) += aes-i586.o > obj-$(CONFIG_CRYPTO_TWOFISH_586) += twofish-i586.o >+obj-$(CONFIG_CRYPTO_SALSA20_586) += salsa20-i586.o > > obj-$(CONFIG_CRYPTO_AES_X86_64) += aes-x86_64.o > obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o > > aes-i586-y := aes-i586-asm_32.o aes_glue.o > twofish-i586-y := twofish-i586-asm_32.o twofish_32.o >+salsa20-i586-y := salsa20-i586-asm_32.o salsa20_32.o > > aes-x86_64-y := aes-x86_64-asm_64.o aes_glue.o > twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_64.o >diff --git a/arch/x86/crypto/salsa20-i586-asm_32.S b/arch/x86/crypto/salsa20-i586-asm_32.S >new file mode 100644 >index 0000000..7ad215a >--- /dev/null >+++ b/arch/x86/crypto/salsa20-i586-asm_32.S >@@ -0,0 +1,3069 @@ >+# salsa20_pm.s version 20051229 >+# D. J. Bernstein >+# Public domain. >+ >+# int32 a >+ >+# int32 p >+ >+# int32 s >+ >+# int32 t >+ >+# int32 w >+ >+# int32 r >+ >+# int32 v >+ >+# stack32 arg1 >+ >+# stack32 arg2 >+ >+# stack32 arg3 >+ >+# stack32 arg4 >+ >+# input arg1 >+ >+# input arg2 >+ >+# input arg3 >+ >+# input arg4 >+ >+# int32 eax >+ >+# int32 ebx >+ >+# int32 esi >+ >+# int32 edi >+ >+# int32 ebp >+ >+# caller eax >+ >+# caller ebx >+ >+# caller esi >+ >+# caller edi >+ >+# caller ebp >+ >+# int32 k >+ >+# int32 kbits >+ >+# int32 iv >+ >+# int32 i >+ >+# stack32 x_backup >+ >+# int32 x >+ >+# stack32 m_backup >+ >+# int32 m >+ >+# stack32 out_backup >+ >+# int32 out >+ >+# stack32 bytes_backup >+ >+# int32 bytes >+ >+# stack32 eax_stack >+ >+# stack32 ebx_stack >+ >+# stack32 esi_stack >+ >+# stack32 edi_stack >+ >+# stack32 ebp_stack >+ >+# int32 in0 >+ >+# int32 in1 >+ >+# int32 in2 >+ >+# int32 in3 >+ >+# int32 in4 >+ >+# int32 in5 >+ >+# int32 in6 >+ >+# int32 in7 >+ >+# int32 in8 >+ >+# int32 in9 >+ >+# int32 in10 >+ >+# int32 in11 >+ >+# int32 in12 >+ >+# int32 in13 >+ >+# int32 in14 >+ >+# int32 in15 >+ >+# stack32 x0 >+ >+# stack32 x1 >+ >+# stack32 x2 >+ >+# stack32 x3 >+ >+# stack32 x4 >+ >+# stack32 x5 >+ >+# stack32 x6 >+ >+# stack32 x7 >+ >+# stack32 x8 >+ >+# stack32 x9 >+ >+# stack32 x10 >+ >+# stack32 x11 >+ >+# stack32 x12 >+ >+# stack32 x13 >+ >+# stack32 x14 >+ >+# stack32 x15 >+ >+# stack32 j0 >+ >+# stack32 j1 >+ >+# stack32 j2 >+ >+# stack32 j3 >+ >+# stack32 j4 >+ >+# stack32 j5 >+ >+# stack32 j6 >+ >+# stack32 j7 >+ >+# stack32 j8 >+ >+# stack32 j9 >+ >+# stack32 j10 >+ >+# stack32 j11 >+ >+# stack32 j12 >+ >+# stack32 j13 >+ >+# stack32 j14 >+ >+# stack32 j15 >+ >+# stack512 tmp >+ >+# stack32 ctarget >+ >+# enter ECRYPT_keystream_bytes >+.text >+.p2align 5 >+.globl ECRYPT_keystream_bytes >+_ECRYPT_keystream_bytes: >+ECRYPT_keystream_bytes: >+ mov %esp,%eax >+ and $31,%eax >+ add $256,%eax >+ sub %eax,%esp >+ >+ # eax_stack = eax >+ # movl eax_stack=stack32#5 >+ # movl eax_stack=80(%esp) >+ movl %eax,80(%esp) >+ >+ # ebx_stack = ebx >+ # movl ebx_stack=stack32#6 >+ # movl ebx_stack=84(%esp) >+ movl %ebx,84(%esp) >+ >+ # esi_stack = esi >+ # movl esi_stack=stack32#7 >+ # movl esi_stack=88(%esp) >+ movl %esi,88(%esp) >+ >+ # edi_stack = edi >+ # movl edi_stack=stack32#8 >+ # movl edi_stack=92(%esp) >+ movl %edi,92(%esp) >+ >+ # ebp_stack = ebp >+ # movl ebp_stack=stack32#9 >+ # movl ebp_stack=96(%esp) >+ movl %ebp,96(%esp) >+ >+ # x = arg1 >+ # movl x=int32#3 >+ # movl x=%edx >+ movl 4(%esp,%eax),%edx >+ >+ # m = arg2 >+ # movl m=int32#5 >+ # movl m=%esi >+ movl 8(%esp,%eax),%esi >+ >+ # out = m >+ # mov out=int32#6 >+ # mov out=%edi >+ mov %esi,%edi >+ >+ # bytes = arg3 >+ # movl bytes=int32#4 >+ # movl bytes=%ebx >+ movl 12(%esp,%eax),%ebx >+ >+ # bytes -= 0 >+ # sub $0,+ # sub $0,+ sub $0,%ebx >+ >+ # goto done if unsigned<= >+ jbe ._done >+ >+ # a = 0 >+ # mov $0,>a=int32#1 >+ # mov $0,>a=%eax >+ mov $0,%eax >+ >+ # i = bytes >+ # mov i=int32#2 >+ # mov i=%ecx >+ mov %ebx,%ecx >+ >+ # while (i) { *out++ = a; --i } >+ rep stosb >+ >+ # out -= bytes >+ # sub + # sub + sub %ebx,%edi >+ >+ # goto start >+ jmp ._start >+ >+# enter ECRYPT_decrypt_bytes >+.text >+.p2align 5 >+.globl ECRYPT_decrypt_bytes >+_ECRYPT_decrypt_bytes: >+ECRYPT_decrypt_bytes: >+ mov %esp,%eax >+ and $31,%eax >+ add $256,%eax >+ sub %eax,%esp >+ >+ # eax_stack = eax >+ # movl eax_stack=stack32#5 >+ # movl eax_stack=80(%esp) >+ movl %eax,80(%esp) >+ >+ # ebx_stack = ebx >+ # movl ebx_stack=stack32#6 >+ # movl ebx_stack=84(%esp) >+ movl %ebx,84(%esp) >+ >+ # esi_stack = esi >+ # movl esi_stack=stack32#7 >+ # movl esi_stack=88(%esp) >+ movl %esi,88(%esp) >+ >+ # edi_stack = edi >+ # movl edi_stack=stack32#8 >+ # movl edi_stack=92(%esp) >+ movl %edi,92(%esp) >+ >+ # ebp_stack = ebp >+ # movl ebp_stack=stack32#9 >+ # movl ebp_stack=96(%esp) >+ movl %ebp,96(%esp) >+ >+ # x = arg1 >+ # movl x=int32#3 >+ # movl x=%edx >+ movl 4(%esp,%eax),%edx >+ >+ # m = arg2 >+ # movl m=int32#5 >+ # movl m=%esi >+ movl 8(%esp,%eax),%esi >+ >+ # out = arg3 >+ # movl out=int32#6 >+ # movl out=%edi >+ movl 12(%esp,%eax),%edi >+ >+ # bytes = arg4 >+ # movl bytes=int32#4 >+ # movl bytes=%ebx >+ movl 16(%esp,%eax),%ebx >+ >+ # bytes -= 0 >+ # sub $0,+ # sub $0,+ sub $0,%ebx >+ >+ # goto done if unsigned<= >+ jbe ._done >+ >+ # goto start >+ jmp ._start >+ >+# enter ECRYPT_encrypt_bytes >+.text >+.p2align 5 >+.globl ECRYPT_encrypt_bytes >+_ECRYPT_encrypt_bytes: >+ECRYPT_encrypt_bytes: >+ mov %esp,%eax >+ and $31,%eax >+ add $256,%eax >+ sub %eax,%esp >+ >+ # eax_stack = eax >+ # movl eax_stack=stack32#5 >+ # movl eax_stack=80(%esp) >+ movl %eax,80(%esp) >+ >+ # ebx_stack = ebx >+ # movl ebx_stack=stack32#6 >+ # movl ebx_stack=84(%esp) >+ movl %ebx,84(%esp) >+ >+ # esi_stack = esi >+ # movl esi_stack=stack32#7 >+ # movl esi_stack=88(%esp) >+ movl %esi,88(%esp) >+ >+ # edi_stack = edi >+ # movl edi_stack=stack32#8 >+ # movl edi_stack=92(%esp) >+ movl %edi,92(%esp) >+ >+ # ebp_stack = ebp >+ # movl ebp_stack=stack32#9 >+ # movl ebp_stack=96(%esp) >+ movl %ebp,96(%esp) >+ >+ # x = arg1 >+ # movl x=int32#3 >+ # movl x=%edx >+ movl 4(%esp,%eax),%edx >+ >+ # m = arg2 >+ # movl m=int32#5 >+ # movl m=%esi >+ movl 8(%esp,%eax),%esi >+ >+ # out = arg3 >+ # movl out=int32#6 >+ # movl out=%edi >+ movl 12(%esp,%eax),%edi >+ >+ # bytes = arg4 >+ # movl bytes=int32#4 >+ # movl bytes=%ebx >+ movl 16(%esp,%eax),%ebx >+ >+ # bytes -= 0 >+ # sub $0,+ # sub $0,+ sub $0,%ebx >+ >+ # goto done if unsigned<= >+ jbe ._done >+ >+ # start# >+._start: >+ >+ # in0 = *(uint32 *) (x + 0) >+ # movl 0(in0=int32#1 >+ # movl 0(in0=%eax >+ movl 0(%edx),%eax >+ >+ # in1 = *(uint32 *) (x + 4) >+ # movl 4(in1=int32#2 >+ # movl 4(in1=%ecx >+ movl 4(%edx),%ecx >+ >+ # in2 = *(uint32 *) (x + 8) >+ # movl 8(in2=int32#7 >+ # movl 8(in2=%ebp >+ movl 8(%edx),%ebp >+ >+ # j0 = in0 >+ # movl j0=stack32#26 >+ # movl j0=164(%esp) >+ movl %eax,164(%esp) >+ >+ # in3 = *(uint32 *) (x + 12) >+ # movl 12(in3=int32#1 >+ # movl 12(in3=%eax >+ movl 12(%edx),%eax >+ >+ # j1 = in1 >+ # movl j1=stack32#27 >+ # movl j1=168(%esp) >+ movl %ecx,168(%esp) >+ >+ # in4 = *(uint32 *) (x + 16) >+ # movl 16(in4=int32#2 >+ # movl 16(in4=%ecx >+ movl 16(%edx),%ecx >+ >+ # j2 = in2 >+ # movl j2=stack32#28 >+ # movl j2=172(%esp) >+ movl %ebp,172(%esp) >+ >+ # in5 = *(uint32 *) (x + 20) >+ # movl 20(in5=int32#7 >+ # movl 20(in5=%ebp >+ movl 20(%edx),%ebp >+ >+ # j3 = in3 >+ # movl j3=stack32#29 >+ # movl j3=176(%esp) >+ movl %eax,176(%esp) >+ >+ # in6 = *(uint32 *) (x + 24) >+ # movl 24(in6=int32#1 >+ # movl 24(in6=%eax >+ movl 24(%edx),%eax >+ >+ # j4 = in4 >+ # movl j4=stack32#30 >+ # movl j4=180(%esp) >+ movl %ecx,180(%esp) >+ >+ # in7 = *(uint32 *) (x + 28) >+ # movl 28(in7=int32#2 >+ # movl 28(in7=%ecx >+ movl 28(%edx),%ecx >+ >+ # j5 = in5 >+ # movl j5=stack32#31 >+ # movl j5=184(%esp) >+ movl %ebp,184(%esp) >+ >+ # in8 = *(uint32 *) (x + 32) >+ # movl 32(in8=int32#7 >+ # movl 32(in8=%ebp >+ movl 32(%edx),%ebp >+ >+ # j6 = in6 >+ # movl j6=stack32#32 >+ # movl j6=188(%esp) >+ movl %eax,188(%esp) >+ >+ # in9 = *(uint32 *) (x + 36) >+ # movl 36(in9=int32#1 >+ # movl 36(in9=%eax >+ movl 36(%edx),%eax >+ >+ # j7 = in7 >+ # movl j7=stack32#33 >+ # movl j7=192(%esp) >+ movl %ecx,192(%esp) >+ >+ # in10 = *(uint32 *) (x + 40) >+ # movl 40(in10=int32#2 >+ # movl 40(in10=%ecx >+ movl 40(%edx),%ecx >+ >+ # j8 = in8 >+ # movl j8=stack32#34 >+ # movl j8=196(%esp) >+ movl %ebp,196(%esp) >+ >+ # in11 = *(uint32 *) (x + 44) >+ # movl 44(in11=int32#7 >+ # movl 44(in11=%ebp >+ movl 44(%edx),%ebp >+ >+ # j9 = in9 >+ # movl j9=stack32#35 >+ # movl j9=200(%esp) >+ movl %eax,200(%esp) >+ >+ # in12 = *(uint32 *) (x + 48) >+ # movl 48(in12=int32#1 >+ # movl 48(in12=%eax >+ movl 48(%edx),%eax >+ >+ # j10 = in10 >+ # movl j10=stack32#36 >+ # movl j10=204(%esp) >+ movl %ecx,204(%esp) >+ >+ # in13 = *(uint32 *) (x + 52) >+ # movl 52(in13=int32#2 >+ # movl 52(in13=%ecx >+ movl 52(%edx),%ecx >+ >+ # j11 = in11 >+ # movl j11=stack32#37 >+ # movl j11=208(%esp) >+ movl %ebp,208(%esp) >+ >+ # in14 = *(uint32 *) (x + 56) >+ # movl 56(in14=int32#7 >+ # movl 56(in14=%ebp >+ movl 56(%edx),%ebp >+ >+ # j12 = in12 >+ # movl j12=stack32#38 >+ # movl j12=212(%esp) >+ movl %eax,212(%esp) >+ >+ # in15 = *(uint32 *) (x + 60) >+ # movl 60(in15=int32#1 >+ # movl 60(in15=%eax >+ movl 60(%edx),%eax >+ >+ # j13 = in13 >+ # movl j13=stack32#39 >+ # movl j13=216(%esp) >+ movl %ecx,216(%esp) >+ >+ # j14 = in14 >+ # movl j14=stack32#40 >+ # movl j14=220(%esp) >+ movl %ebp,220(%esp) >+ >+ # j15 = in15 >+ # movl j15=stack32#41 >+ # movl j15=224(%esp) >+ movl %eax,224(%esp) >+ >+ # x_backup = x >+ # movl x_backup=stack32#1 >+ # movl x_backup=64(%esp) >+ movl %edx,64(%esp) >+ >+ # bytesatleast1# >+._bytesatleast1: >+ >+ # bytes - 64 >+ # cmp $64,+ # cmp $64,+ cmp $64,%ebx >+ >+ # goto nocopy if unsigned>= >+ jae ._nocopy >+ >+ # ctarget = out >+ # movl ctarget=stack32#42 >+ # movl ctarget=228(%esp) >+ movl %edi,228(%esp) >+ >+ # out = &tmp >+ # leal >tmp=stack512#1,>out=int32#6 >+ # leal >tmp=0(%esp),>out=%edi >+ leal 0(%esp),%edi >+ >+ # i = bytes >+ # mov i=int32#2 >+ # mov i=%ecx >+ mov %ebx,%ecx >+ >+ # while (i) { *out++ = *m++; --i } >+ rep movsb >+ >+ # out = &tmp >+ # leal >tmp=stack512#1,>out=int32#6 >+ # leal >tmp=0(%esp),>out=%edi >+ leal 0(%esp),%edi >+ >+ # m = &tmp >+ # leal >tmp=stack512#1,>m=int32#5 >+ # leal >tmp=0(%esp),>m=%esi >+ leal 0(%esp),%esi >+ >+ # nocopy# >+._nocopy: >+ >+ # out_backup = out >+ # movl out_backup=stack32#3 >+ # movl out_backup=72(%esp) >+ movl %edi,72(%esp) >+ >+ # m_backup = m >+ # movl m_backup=stack32#2 >+ # movl m_backup=68(%esp) >+ movl %esi,68(%esp) >+ >+ # bytes_backup = bytes >+ # movl bytes_backup=stack32#4 >+ # movl bytes_backup=76(%esp) >+ movl %ebx,76(%esp) >+ >+ # in0 = j0 >+ # movl in0=int32#1 >+ # movl in0=%eax >+ movl 164(%esp),%eax >+ >+ # in1 = j1 >+ # movl in1=int32#2 >+ # movl in1=%ecx >+ movl 168(%esp),%ecx >+ >+ # in2 = j2 >+ # movl in2=int32#3 >+ # movl in2=%edx >+ movl 172(%esp),%edx >+ >+ # in3 = j3 >+ # movl in3=int32#4 >+ # movl in3=%ebx >+ movl 176(%esp),%ebx >+ >+ # x0 = in0 >+ # movl x0=stack32#10 >+ # movl x0=100(%esp) >+ movl %eax,100(%esp) >+ >+ # x1 = in1 >+ # movl x1=stack32#11 >+ # movl x1=104(%esp) >+ movl %ecx,104(%esp) >+ >+ # x2 = in2 >+ # movl x2=stack32#12 >+ # movl x2=108(%esp) >+ movl %edx,108(%esp) >+ >+ # x3 = in3 >+ # movl x3=stack32#13 >+ # movl x3=112(%esp) >+ movl %ebx,112(%esp) >+ >+ # in4 = j4 >+ # movl in4=int32#1 >+ # movl in4=%eax >+ movl 180(%esp),%eax >+ >+ # in5 = j5 >+ # movl in5=int32#2 >+ # movl in5=%ecx >+ movl 184(%esp),%ecx >+ >+ # in6 = j6 >+ # movl in6=int32#3 >+ # movl in6=%edx >+ movl 188(%esp),%edx >+ >+ # in7 = j7 >+ # movl in7=int32#4 >+ # movl in7=%ebx >+ movl 192(%esp),%ebx >+ >+ # x4 = in4 >+ # movl x4=stack32#14 >+ # movl x4=116(%esp) >+ movl %eax,116(%esp) >+ >+ # x5 = in5 >+ # movl x5=stack32#15 >+ # movl x5=120(%esp) >+ movl %ecx,120(%esp) >+ >+ # x6 = in6 >+ # movl x6=stack32#16 >+ # movl x6=124(%esp) >+ movl %edx,124(%esp) >+ >+ # x7 = in7 >+ # movl x7=stack32#17 >+ # movl x7=128(%esp) >+ movl %ebx,128(%esp) >+ >+ # in8 = j8 >+ # movl in8=int32#1 >+ # movl in8=%eax >+ movl 196(%esp),%eax >+ >+ # in9 = j9 >+ # movl in9=int32#2 >+ # movl in9=%ecx >+ movl 200(%esp),%ecx >+ >+ # in10 = j10 >+ # movl in10=int32#3 >+ # movl in10=%edx >+ movl 204(%esp),%edx >+ >+ # in11 = j11 >+ # movl in11=int32#4 >+ # movl in11=%ebx >+ movl 208(%esp),%ebx >+ >+ # x8 = in8 >+ # movl x8=stack32#18 >+ # movl x8=132(%esp) >+ movl %eax,132(%esp) >+ >+ # x9 = in9 >+ # movl x9=stack32#19 >+ # movl x9=136(%esp) >+ movl %ecx,136(%esp) >+ >+ # x10 = in10 >+ # movl x10=stack32#20 >+ # movl x10=140(%esp) >+ movl %edx,140(%esp) >+ >+ # x11 = in11 >+ # movl x11=stack32#21 >+ # movl x11=144(%esp) >+ movl %ebx,144(%esp) >+ >+ # in12 = j12 >+ # movl in12=int32#1 >+ # movl in12=%eax >+ movl 212(%esp),%eax >+ >+ # in13 = j13 >+ # movl in13=int32#2 >+ # movl in13=%ecx >+ movl 216(%esp),%ecx >+ >+ # in14 = j14 >+ # movl in14=int32#3 >+ # movl in14=%edx >+ movl 220(%esp),%edx >+ >+ # in15 = j15 >+ # movl in15=int32#4 >+ # movl in15=%ebx >+ movl 224(%esp),%ebx >+ >+ # x12 = in12 >+ # movl x12=stack32#22 >+ # movl x12=148(%esp) >+ movl %eax,148(%esp) >+ >+ # x13 = in13 >+ # movl x13=stack32#23 >+ # movl x13=152(%esp) >+ movl %ecx,152(%esp) >+ >+ # x14 = in14 >+ # movl x14=stack32#24 >+ # movl x14=156(%esp) >+ movl %edx,156(%esp) >+ >+ # x15 = in15 >+ # movl x15=stack32#25 >+ # movl x15=160(%esp) >+ movl %ebx,160(%esp) >+ >+ # i = 20 >+ # mov $20,>i=int32#7 >+ # mov $20,>i=%ebp >+ mov $20,%ebp >+ >+ # p = x0 >+ # movl p=int32#1 >+ # movl p=%eax >+ movl 100(%esp),%eax >+ >+ # s = x5 >+ # movl s=int32#2 >+ # movl s=%ecx >+ movl 120(%esp),%ecx >+ >+ # t = x10 >+ # movl t=int32#3 >+ # movl t=%edx >+ movl 140(%esp),%edx >+ >+ # w = x15 >+ # movl w=int32#4 >+ # movl w=%ebx >+ movl 160(%esp),%ebx >+ >+ # mainloop# >+._mainloop: >+ >+ # x0 = p >+ # movl x0=stack32#10 >+ # movl x0=100(%esp) >+ movl %eax,100(%esp) >+ >+ # x10 = t >+ # movl x10=stack32#20 >+ # movl x10=140(%esp) >+ movl %edx,140(%esp) >+ >+ # p += x12 >+ # addl + # addl + addl 148(%esp),%eax >+ >+ # x5 = s >+ # movl x5=stack32#15 >+ # movl x5=120(%esp) >+ movl %ecx,120(%esp) >+ >+ # t += x6 >+ # addl + # addl + addl 124(%esp),%edx >+ >+ # x15 = w >+ # movl x15=stack32#25 >+ # movl x15=160(%esp) >+ movl %ebx,160(%esp) >+ >+ # r = x1 >+ # movl r=int32#5 >+ # movl r=%esi >+ movl 104(%esp),%esi >+ >+ # r += s >+ # add + # add + add %ecx,%esi >+ >+ # v = x11 >+ # movl v=int32#6 >+ # movl v=%edi >+ movl 144(%esp),%edi >+ >+ # v += w >+ # add + # add + add %ebx,%edi >+ >+ # p <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%eax >+ >+ # p ^= x4 >+ # xorl + # xorl + xorl 116(%esp),%eax >+ >+ # t <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%edx >+ >+ # t ^= x14 >+ # xorl + # xorl + xorl 156(%esp),%edx >+ >+ # r <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%esi >+ >+ # r ^= x9 >+ # xorl + # xorl + xorl 136(%esp),%esi >+ >+ # v <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%edi >+ >+ # v ^= x3 >+ # xorl + # xorl + xorl 112(%esp),%edi >+ >+ # x4 = p >+ # movl x4=stack32#14 >+ # movl x4=116(%esp) >+ movl %eax,116(%esp) >+ >+ # x14 = t >+ # movl x14=stack32#24 >+ # movl x14=156(%esp) >+ movl %edx,156(%esp) >+ >+ # p += x0 >+ # addl + # addl + addl 100(%esp),%eax >+ >+ # x9 = r >+ # movl x9=stack32#19 >+ # movl x9=136(%esp) >+ movl %esi,136(%esp) >+ >+ # t += x10 >+ # addl + # addl + addl 140(%esp),%edx >+ >+ # x3 = v >+ # movl x3=stack32#13 >+ # movl x3=112(%esp) >+ movl %edi,112(%esp) >+ >+ # p <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%eax >+ >+ # p ^= x8 >+ # xorl + # xorl + xorl 132(%esp),%eax >+ >+ # t <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%edx >+ >+ # t ^= x2 >+ # xorl + # xorl + xorl 108(%esp),%edx >+ >+ # s += r >+ # add + # add + add %esi,%ecx >+ >+ # s <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%ecx >+ >+ # s ^= x13 >+ # xorl + # xorl + xorl 152(%esp),%ecx >+ >+ # w += v >+ # add + # add + add %edi,%ebx >+ >+ # w <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%ebx >+ >+ # w ^= x7 >+ # xorl + # xorl + xorl 128(%esp),%ebx >+ >+ # x8 = p >+ # movl x8=stack32#18 >+ # movl x8=132(%esp) >+ movl %eax,132(%esp) >+ >+ # x2 = t >+ # movl x2=stack32#12 >+ # movl x2=108(%esp) >+ movl %edx,108(%esp) >+ >+ # p += x4 >+ # addl + # addl + addl 116(%esp),%eax >+ >+ # x13 = s >+ # movl x13=stack32#23 >+ # movl x13=152(%esp) >+ movl %ecx,152(%esp) >+ >+ # t += x14 >+ # addl + # addl + addl 156(%esp),%edx >+ >+ # x7 = w >+ # movl x7=stack32#17 >+ # movl x7=128(%esp) >+ movl %ebx,128(%esp) >+ >+ # p <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%eax >+ >+ # p ^= x12 >+ # xorl + # xorl + xorl 148(%esp),%eax >+ >+ # t <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%edx >+ >+ # t ^= x6 >+ # xorl + # xorl + xorl 124(%esp),%edx >+ >+ # r += s >+ # add + # add + add %ecx,%esi >+ >+ # r <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%esi >+ >+ # r ^= x1 >+ # xorl + # xorl + xorl 104(%esp),%esi >+ >+ # v += w >+ # add + # add + add %ebx,%edi >+ >+ # v <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%edi >+ >+ # v ^= x11 >+ # xorl + # xorl + xorl 144(%esp),%edi >+ >+ # x12 = p >+ # movl x12=stack32#22 >+ # movl x12=148(%esp) >+ movl %eax,148(%esp) >+ >+ # x6 = t >+ # movl x6=stack32#16 >+ # movl x6=124(%esp) >+ movl %edx,124(%esp) >+ >+ # p += x8 >+ # addl + # addl + addl 132(%esp),%eax >+ >+ # x1 = r >+ # movl x1=stack32#11 >+ # movl x1=104(%esp) >+ movl %esi,104(%esp) >+ >+ # t += x2 >+ # addl + # addl + addl 108(%esp),%edx >+ >+ # x11 = v >+ # movl x11=stack32#21 >+ # movl x11=144(%esp) >+ movl %edi,144(%esp) >+ >+ # p <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%eax >+ >+ # p ^= x0 >+ # xorl + # xorl + xorl 100(%esp),%eax >+ >+ # t <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%edx >+ >+ # t ^= x10 >+ # xorl + # xorl + xorl 140(%esp),%edx >+ >+ # s += r >+ # add + # add + add %esi,%ecx >+ >+ # s <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%ecx >+ >+ # s ^= x5 >+ # xorl + # xorl + xorl 120(%esp),%ecx >+ >+ # w += v >+ # add + # add + add %edi,%ebx >+ >+ # w <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%ebx >+ >+ # w ^= x15 >+ # xorl + # xorl + xorl 160(%esp),%ebx >+ >+ # x0 = p >+ # movl x0=stack32#10 >+ # movl x0=100(%esp) >+ movl %eax,100(%esp) >+ >+ # x10 = t >+ # movl x10=stack32#20 >+ # movl x10=140(%esp) >+ movl %edx,140(%esp) >+ >+ # p += x3 >+ # addl + # addl + addl 112(%esp),%eax >+ >+ # p <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%eax >+ >+ # x5 = s >+ # movl x5=stack32#15 >+ # movl x5=120(%esp) >+ movl %ecx,120(%esp) >+ >+ # t += x9 >+ # addl + # addl + addl 136(%esp),%edx >+ >+ # x15 = w >+ # movl x15=stack32#25 >+ # movl x15=160(%esp) >+ movl %ebx,160(%esp) >+ >+ # r = x4 >+ # movl r=int32#5 >+ # movl r=%esi >+ movl 116(%esp),%esi >+ >+ # r += s >+ # add + # add + add %ecx,%esi >+ >+ # v = x14 >+ # movl v=int32#6 >+ # movl v=%edi >+ movl 156(%esp),%edi >+ >+ # v += w >+ # add + # add + add %ebx,%edi >+ >+ # p ^= x1 >+ # xorl + # xorl + xorl 104(%esp),%eax >+ >+ # t <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%edx >+ >+ # t ^= x11 >+ # xorl + # xorl + xorl 144(%esp),%edx >+ >+ # r <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%esi >+ >+ # r ^= x6 >+ # xorl + # xorl + xorl 124(%esp),%esi >+ >+ # v <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%edi >+ >+ # v ^= x12 >+ # xorl + # xorl + xorl 148(%esp),%edi >+ >+ # x1 = p >+ # movl x1=stack32#11 >+ # movl x1=104(%esp) >+ movl %eax,104(%esp) >+ >+ # x11 = t >+ # movl x11=stack32#21 >+ # movl x11=144(%esp) >+ movl %edx,144(%esp) >+ >+ # p += x0 >+ # addl + # addl + addl 100(%esp),%eax >+ >+ # x6 = r >+ # movl x6=stack32#16 >+ # movl x6=124(%esp) >+ movl %esi,124(%esp) >+ >+ # t += x10 >+ # addl + # addl + addl 140(%esp),%edx >+ >+ # x12 = v >+ # movl x12=stack32#22 >+ # movl x12=148(%esp) >+ movl %edi,148(%esp) >+ >+ # p <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%eax >+ >+ # p ^= x2 >+ # xorl + # xorl + xorl 108(%esp),%eax >+ >+ # t <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%edx >+ >+ # t ^= x8 >+ # xorl + # xorl + xorl 132(%esp),%edx >+ >+ # s += r >+ # add + # add + add %esi,%ecx >+ >+ # s <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%ecx >+ >+ # s ^= x7 >+ # xorl + # xorl + xorl 128(%esp),%ecx >+ >+ # w += v >+ # add + # add + add %edi,%ebx >+ >+ # w <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%ebx >+ >+ # w ^= x13 >+ # xorl + # xorl + xorl 152(%esp),%ebx >+ >+ # x2 = p >+ # movl x2=stack32#12 >+ # movl x2=108(%esp) >+ movl %eax,108(%esp) >+ >+ # x8 = t >+ # movl x8=stack32#18 >+ # movl x8=132(%esp) >+ movl %edx,132(%esp) >+ >+ # p += x1 >+ # addl + # addl + addl 104(%esp),%eax >+ >+ # x7 = s >+ # movl x7=stack32#17 >+ # movl x7=128(%esp) >+ movl %ecx,128(%esp) >+ >+ # t += x11 >+ # addl + # addl + addl 144(%esp),%edx >+ >+ # x13 = w >+ # movl x13=stack32#23 >+ # movl x13=152(%esp) >+ movl %ebx,152(%esp) >+ >+ # p <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%eax >+ >+ # p ^= x3 >+ # xorl + # xorl + xorl 112(%esp),%eax >+ >+ # t <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%edx >+ >+ # t ^= x9 >+ # xorl + # xorl + xorl 136(%esp),%edx >+ >+ # r += s >+ # add + # add + add %ecx,%esi >+ >+ # r <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%esi >+ >+ # r ^= x4 >+ # xorl + # xorl + xorl 116(%esp),%esi >+ >+ # v += w >+ # add + # add + add %ebx,%edi >+ >+ # v <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%edi >+ >+ # v ^= x14 >+ # xorl + # xorl + xorl 156(%esp),%edi >+ >+ # x3 = p >+ # movl x3=stack32#13 >+ # movl x3=112(%esp) >+ movl %eax,112(%esp) >+ >+ # x9 = t >+ # movl x9=stack32#19 >+ # movl x9=136(%esp) >+ movl %edx,136(%esp) >+ >+ # p += x2 >+ # addl + # addl + addl 108(%esp),%eax >+ >+ # x4 = r >+ # movl x4=stack32#14 >+ # movl x4=116(%esp) >+ movl %esi,116(%esp) >+ >+ # t += x8 >+ # addl + # addl + addl 132(%esp),%edx >+ >+ # x14 = v >+ # movl x14=stack32#24 >+ # movl x14=156(%esp) >+ movl %edi,156(%esp) >+ >+ # p <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%eax >+ >+ # p ^= x0 >+ # xorl + # xorl + xorl 100(%esp),%eax >+ >+ # t <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%edx >+ >+ # t ^= x10 >+ # xorl + # xorl + xorl 140(%esp),%edx >+ >+ # s += r >+ # add + # add + add %esi,%ecx >+ >+ # s <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%ecx >+ >+ # s ^= x5 >+ # xorl + # xorl + xorl 120(%esp),%ecx >+ >+ # w += v >+ # add + # add + add %edi,%ebx >+ >+ # w <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%ebx >+ >+ # w ^= x15 >+ # xorl + # xorl + xorl 160(%esp),%ebx >+ >+ # x0 = p >+ # movl x0=stack32#10 >+ # movl x0=100(%esp) >+ movl %eax,100(%esp) >+ >+ # x10 = t >+ # movl x10=stack32#20 >+ # movl x10=140(%esp) >+ movl %edx,140(%esp) >+ >+ # p += x12 >+ # addl + # addl + addl 148(%esp),%eax >+ >+ # x5 = s >+ # movl x5=stack32#15 >+ # movl x5=120(%esp) >+ movl %ecx,120(%esp) >+ >+ # t += x6 >+ # addl + # addl + addl 124(%esp),%edx >+ >+ # x15 = w >+ # movl x15=stack32#25 >+ # movl x15=160(%esp) >+ movl %ebx,160(%esp) >+ >+ # r = x1 >+ # movl r=int32#5 >+ # movl r=%esi >+ movl 104(%esp),%esi >+ >+ # r += s >+ # add + # add + add %ecx,%esi >+ >+ # v = x11 >+ # movl v=int32#6 >+ # movl v=%edi >+ movl 144(%esp),%edi >+ >+ # v += w >+ # add + # add + add %ebx,%edi >+ >+ # p <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%eax >+ >+ # p ^= x4 >+ # xorl + # xorl + xorl 116(%esp),%eax >+ >+ # t <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%edx >+ >+ # t ^= x14 >+ # xorl + # xorl + xorl 156(%esp),%edx >+ >+ # r <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%esi >+ >+ # r ^= x9 >+ # xorl + # xorl + xorl 136(%esp),%esi >+ >+ # v <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%edi >+ >+ # v ^= x3 >+ # xorl + # xorl + xorl 112(%esp),%edi >+ >+ # x4 = p >+ # movl x4=stack32#14 >+ # movl x4=116(%esp) >+ movl %eax,116(%esp) >+ >+ # x14 = t >+ # movl x14=stack32#24 >+ # movl x14=156(%esp) >+ movl %edx,156(%esp) >+ >+ # p += x0 >+ # addl + # addl + addl 100(%esp),%eax >+ >+ # x9 = r >+ # movl x9=stack32#19 >+ # movl x9=136(%esp) >+ movl %esi,136(%esp) >+ >+ # t += x10 >+ # addl + # addl + addl 140(%esp),%edx >+ >+ # x3 = v >+ # movl x3=stack32#13 >+ # movl x3=112(%esp) >+ movl %edi,112(%esp) >+ >+ # p <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%eax >+ >+ # p ^= x8 >+ # xorl + # xorl + xorl 132(%esp),%eax >+ >+ # t <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%edx >+ >+ # t ^= x2 >+ # xorl + # xorl + xorl 108(%esp),%edx >+ >+ # s += r >+ # add + # add + add %esi,%ecx >+ >+ # s <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%ecx >+ >+ # s ^= x13 >+ # xorl + # xorl + xorl 152(%esp),%ecx >+ >+ # w += v >+ # add + # add + add %edi,%ebx >+ >+ # w <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%ebx >+ >+ # w ^= x7 >+ # xorl + # xorl + xorl 128(%esp),%ebx >+ >+ # x8 = p >+ # movl x8=stack32#18 >+ # movl x8=132(%esp) >+ movl %eax,132(%esp) >+ >+ # x2 = t >+ # movl x2=stack32#12 >+ # movl x2=108(%esp) >+ movl %edx,108(%esp) >+ >+ # p += x4 >+ # addl + # addl + addl 116(%esp),%eax >+ >+ # x13 = s >+ # movl x13=stack32#23 >+ # movl x13=152(%esp) >+ movl %ecx,152(%esp) >+ >+ # t += x14 >+ # addl + # addl + addl 156(%esp),%edx >+ >+ # x7 = w >+ # movl x7=stack32#17 >+ # movl x7=128(%esp) >+ movl %ebx,128(%esp) >+ >+ # p <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%eax >+ >+ # p ^= x12 >+ # xorl + # xorl + xorl 148(%esp),%eax >+ >+ # t <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%edx >+ >+ # t ^= x6 >+ # xorl + # xorl + xorl 124(%esp),%edx >+ >+ # r += s >+ # add + # add + add %ecx,%esi >+ >+ # r <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%esi >+ >+ # r ^= x1 >+ # xorl + # xorl + xorl 104(%esp),%esi >+ >+ # v += w >+ # add + # add + add %ebx,%edi >+ >+ # v <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%edi >+ >+ # v ^= x11 >+ # xorl + # xorl + xorl 144(%esp),%edi >+ >+ # x12 = p >+ # movl x12=stack32#22 >+ # movl x12=148(%esp) >+ movl %eax,148(%esp) >+ >+ # x6 = t >+ # movl x6=stack32#16 >+ # movl x6=124(%esp) >+ movl %edx,124(%esp) >+ >+ # p += x8 >+ # addl + # addl + addl 132(%esp),%eax >+ >+ # x1 = r >+ # movl x1=stack32#11 >+ # movl x1=104(%esp) >+ movl %esi,104(%esp) >+ >+ # t += x2 >+ # addl + # addl + addl 108(%esp),%edx >+ >+ # x11 = v >+ # movl x11=stack32#21 >+ # movl x11=144(%esp) >+ movl %edi,144(%esp) >+ >+ # p <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%eax >+ >+ # p ^= x0 >+ # xorl + # xorl + xorl 100(%esp),%eax >+ >+ # t <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%edx >+ >+ # t ^= x10 >+ # xorl + # xorl + xorl 140(%esp),%edx >+ >+ # s += r >+ # add + # add + add %esi,%ecx >+ >+ # s <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%ecx >+ >+ # s ^= x5 >+ # xorl + # xorl + xorl 120(%esp),%ecx >+ >+ # w += v >+ # add + # add + add %edi,%ebx >+ >+ # w <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%ebx >+ >+ # w ^= x15 >+ # xorl + # xorl + xorl 160(%esp),%ebx >+ >+ # x0 = p >+ # movl x0=stack32#10 >+ # movl x0=100(%esp) >+ movl %eax,100(%esp) >+ >+ # x10 = t >+ # movl x10=stack32#20 >+ # movl x10=140(%esp) >+ movl %edx,140(%esp) >+ >+ # p += x3 >+ # addl + # addl + addl 112(%esp),%eax >+ >+ # p <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%eax >+ >+ # x5 = s >+ # movl x5=stack32#15 >+ # movl x5=120(%esp) >+ movl %ecx,120(%esp) >+ >+ # t += x9 >+ # addl + # addl + addl 136(%esp),%edx >+ >+ # x15 = w >+ # movl x15=stack32#25 >+ # movl x15=160(%esp) >+ movl %ebx,160(%esp) >+ >+ # r = x4 >+ # movl r=int32#5 >+ # movl r=%esi >+ movl 116(%esp),%esi >+ >+ # r += s >+ # add + # add + add %ecx,%esi >+ >+ # v = x14 >+ # movl v=int32#6 >+ # movl v=%edi >+ movl 156(%esp),%edi >+ >+ # v += w >+ # add + # add + add %ebx,%edi >+ >+ # p ^= x1 >+ # xorl + # xorl + xorl 104(%esp),%eax >+ >+ # t <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%edx >+ >+ # t ^= x11 >+ # xorl + # xorl + xorl 144(%esp),%edx >+ >+ # r <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%esi >+ >+ # r ^= x6 >+ # xorl + # xorl + xorl 124(%esp),%esi >+ >+ # v <<<= 7 >+ # rol $7,+ # rol $7,+ rol $7,%edi >+ >+ # v ^= x12 >+ # xorl + # xorl + xorl 148(%esp),%edi >+ >+ # x1 = p >+ # movl x1=stack32#11 >+ # movl x1=104(%esp) >+ movl %eax,104(%esp) >+ >+ # x11 = t >+ # movl x11=stack32#21 >+ # movl x11=144(%esp) >+ movl %edx,144(%esp) >+ >+ # p += x0 >+ # addl + # addl + addl 100(%esp),%eax >+ >+ # x6 = r >+ # movl x6=stack32#16 >+ # movl x6=124(%esp) >+ movl %esi,124(%esp) >+ >+ # t += x10 >+ # addl + # addl + addl 140(%esp),%edx >+ >+ # x12 = v >+ # movl x12=stack32#22 >+ # movl x12=148(%esp) >+ movl %edi,148(%esp) >+ >+ # p <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%eax >+ >+ # p ^= x2 >+ # xorl + # xorl + xorl 108(%esp),%eax >+ >+ # t <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%edx >+ >+ # t ^= x8 >+ # xorl + # xorl + xorl 132(%esp),%edx >+ >+ # s += r >+ # add + # add + add %esi,%ecx >+ >+ # s <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%ecx >+ >+ # s ^= x7 >+ # xorl + # xorl + xorl 128(%esp),%ecx >+ >+ # w += v >+ # add + # add + add %edi,%ebx >+ >+ # w <<<= 9 >+ # rol $9,+ # rol $9,+ rol $9,%ebx >+ >+ # w ^= x13 >+ # xorl + # xorl + xorl 152(%esp),%ebx >+ >+ # x2 = p >+ # movl x2=stack32#12 >+ # movl x2=108(%esp) >+ movl %eax,108(%esp) >+ >+ # x8 = t >+ # movl x8=stack32#18 >+ # movl x8=132(%esp) >+ movl %edx,132(%esp) >+ >+ # p += x1 >+ # addl + # addl + addl 104(%esp),%eax >+ >+ # x7 = s >+ # movl x7=stack32#17 >+ # movl x7=128(%esp) >+ movl %ecx,128(%esp) >+ >+ # t += x11 >+ # addl + # addl + addl 144(%esp),%edx >+ >+ # x13 = w >+ # movl x13=stack32#23 >+ # movl x13=152(%esp) >+ movl %ebx,152(%esp) >+ >+ # p <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%eax >+ >+ # p ^= x3 >+ # xorl + # xorl + xorl 112(%esp),%eax >+ >+ # t <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%edx >+ >+ # t ^= x9 >+ # xorl + # xorl + xorl 136(%esp),%edx >+ >+ # r += s >+ # add + # add + add %ecx,%esi >+ >+ # r <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%esi >+ >+ # r ^= x4 >+ # xorl + # xorl + xorl 116(%esp),%esi >+ >+ # v += w >+ # add + # add + add %ebx,%edi >+ >+ # v <<<= 13 >+ # rol $13,+ # rol $13,+ rol $13,%edi >+ >+ # v ^= x14 >+ # xorl + # xorl + xorl 156(%esp),%edi >+ >+ # x3 = p >+ # movl x3=stack32#13 >+ # movl x3=112(%esp) >+ movl %eax,112(%esp) >+ >+ # x9 = t >+ # movl x9=stack32#19 >+ # movl x9=136(%esp) >+ movl %edx,136(%esp) >+ >+ # p += x2 >+ # addl + # addl + addl 108(%esp),%eax >+ >+ # x4 = r >+ # movl x4=stack32#14 >+ # movl x4=116(%esp) >+ movl %esi,116(%esp) >+ >+ # t += x8 >+ # addl + # addl + addl 132(%esp),%edx >+ >+ # x14 = v >+ # movl x14=stack32#24 >+ # movl x14=156(%esp) >+ movl %edi,156(%esp) >+ >+ # p <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%eax >+ >+ # p ^= x0 >+ # xorl + # xorl + xorl 100(%esp),%eax >+ >+ # t <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%edx >+ >+ # t ^= x10 >+ # xorl + # xorl + xorl 140(%esp),%edx >+ >+ # s += r >+ # add + # add + add %esi,%ecx >+ >+ # s <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%ecx >+ >+ # s ^= x5 >+ # xorl + # xorl + xorl 120(%esp),%ecx >+ >+ # w += v >+ # add + # add + add %edi,%ebx >+ >+ # w <<<= 18 >+ # rol $18,+ # rol $18,+ rol $18,%ebx >+ >+ # w ^= x15 >+ # xorl + # xorl + xorl 160(%esp),%ebx >+ >+ # i -= 4 >+ # sub $4,+ # sub $4,+ sub $4,%ebp >+ >+ # goto mainloop if unsigned > >+ ja ._mainloop >+ >+ # x0 = p >+ # movl x0=stack32#10 >+ # movl x0=100(%esp) >+ movl %eax,100(%esp) >+ >+ # x5 = s >+ # movl x5=stack32#15 >+ # movl x5=120(%esp) >+ movl %ecx,120(%esp) >+ >+ # x10 = t >+ # movl x10=stack32#20 >+ # movl x10=140(%esp) >+ movl %edx,140(%esp) >+ >+ # x15 = w >+ # movl x15=stack32#25 >+ # movl x15=160(%esp) >+ movl %ebx,160(%esp) >+ >+ # out = out_backup >+ # movl out=int32#6 >+ # movl out=%edi >+ movl 72(%esp),%edi >+ >+ # m = m_backup >+ # movl m=int32#5 >+ # movl m=%esi >+ movl 68(%esp),%esi >+ >+ # in0 = x0 >+ # movl in0=int32#1 >+ # movl in0=%eax >+ movl 100(%esp),%eax >+ >+ # in1 = x1 >+ # movl in1=int32#2 >+ # movl in1=%ecx >+ movl 104(%esp),%ecx >+ >+ # in0 += j0 >+ # addl + # addl + addl 164(%esp),%eax >+ >+ # in1 += j1 >+ # addl + # addl + addl 168(%esp),%ecx >+ >+ # in0 ^= *(uint32 *) (m + 0) >+ # xorl 0(+ # xorl 0(+ xorl 0(%esi),%eax >+ >+ # in1 ^= *(uint32 *) (m + 4) >+ # xorl 4(+ # xorl 4(+ xorl 4(%esi),%ecx >+ >+ # *(uint32 *) (out + 0) = in0 >+ # movl + # movl + movl %eax,0(%edi) >+ >+ # *(uint32 *) (out + 4) = in1 >+ # movl + # movl + movl %ecx,4(%edi) >+ >+ # in2 = x2 >+ # movl in2=int32#1 >+ # movl in2=%eax >+ movl 108(%esp),%eax >+ >+ # in3 = x3 >+ # movl in3=int32#2 >+ # movl in3=%ecx >+ movl 112(%esp),%ecx >+ >+ # in2 += j2 >+ # addl + # addl + addl 172(%esp),%eax >+ >+ # in3 += j3 >+ # addl + # addl + addl 176(%esp),%ecx >+ >+ # in2 ^= *(uint32 *) (m + 8) >+ # xorl 8(+ # xorl 8(+ xorl 8(%esi),%eax >+ >+ # in3 ^= *(uint32 *) (m + 12) >+ # xorl 12(+ # xorl 12(+ xorl 12(%esi),%ecx >+ >+ # *(uint32 *) (out + 8) = in2 >+ # movl + # movl + movl %eax,8(%edi) >+ >+ # *(uint32 *) (out + 12) = in3 >+ # movl + # movl + movl %ecx,12(%edi) >+ >+ # in4 = x4 >+ # movl in4=int32#1 >+ # movl in4=%eax >+ movl 116(%esp),%eax >+ >+ # in5 = x5 >+ # movl in5=int32#2 >+ # movl in5=%ecx >+ movl 120(%esp),%ecx >+ >+ # in4 += j4 >+ # addl + # addl + addl 180(%esp),%eax >+ >+ # in5 += j5 >+ # addl + # addl + addl 184(%esp),%ecx >+ >+ # in4 ^= *(uint32 *) (m + 16) >+ # xorl 16(+ # xorl 16(+ xorl 16(%esi),%eax >+ >+ # in5 ^= *(uint32 *) (m + 20) >+ # xorl 20(+ # xorl 20(+ xorl 20(%esi),%ecx >+ >+ # *(uint32 *) (out + 16) = in4 >+ # movl + # movl + movl %eax,16(%edi) >+ >+ # *(uint32 *) (out + 20) = in5 >+ # movl + # movl + movl %ecx,20(%edi) >+ >+ # in6 = x6 >+ # movl in6=int32#1 >+ # movl in6=%eax >+ movl 124(%esp),%eax >+ >+ # in7 = x7 >+ # movl in7=int32#2 >+ # movl in7=%ecx >+ movl 128(%esp),%ecx >+ >+ # in6 += j6 >+ # addl + # addl + addl 188(%esp),%eax >+ >+ # in7 += j7 >+ # addl + # addl + addl 192(%esp),%ecx >+ >+ # in6 ^= *(uint32 *) (m + 24) >+ # xorl 24(+ # xorl 24(+ xorl 24(%esi),%eax >+ >+ # in7 ^= *(uint32 *) (m + 28) >+ # xorl 28(+ # xorl 28(+ xorl 28(%esi),%ecx >+ >+ # *(uint32 *) (out + 24) = in6 >+ # movl + # movl + movl %eax,24(%edi) >+ >+ # *(uint32 *) (out + 28) = in7 >+ # movl + # movl + movl %ecx,28(%edi) >+ >+ # in8 = x8 >+ # movl in8=int32#1 >+ # movl in8=%eax >+ movl 132(%esp),%eax >+ >+ # in9 = x9 >+ # movl in9=int32#2 >+ # movl in9=%ecx >+ movl 136(%esp),%ecx >+ >+ # in8 += j8 >+ # addl + # addl + addl 196(%esp),%eax >+ >+ # in9 += j9 >+ # addl + # addl + addl 200(%esp),%ecx >+ >+ # in8 ^= *(uint32 *) (m + 32) >+ # xorl 32(+ # xorl 32(+ xorl 32(%esi),%eax >+ >+ # in9 ^= *(uint32 *) (m + 36) >+ # xorl 36(+ # xorl 36(+ xorl 36(%esi),%ecx >+ >+ # *(uint32 *) (out + 32) = in8 >+ # movl + # movl + movl %eax,32(%edi) >+ >+ # *(uint32 *) (out + 36) = in9 >+ # movl + # movl + movl %ecx,36(%edi) >+ >+ # in10 = x10 >+ # movl in10=int32#1 >+ # movl in10=%eax >+ movl 140(%esp),%eax >+ >+ # in11 = x11 >+ # movl in11=int32#2 >+ # movl in11=%ecx >+ movl 144(%esp),%ecx >+ >+ # in10 += j10 >+ # addl + # addl + addl 204(%esp),%eax >+ >+ # in11 += j11 >+ # addl + # addl + addl 208(%esp),%ecx >+ >+ # in10 ^= *(uint32 *) (m + 40) >+ # xorl 40(+ # xorl 40(+ xorl 40(%esi),%eax >+ >+ # in11 ^= *(uint32 *) (m + 44) >+ # xorl 44(+ # xorl 44(+ xorl 44(%esi),%ecx >+ >+ # *(uint32 *) (out + 40) = in10 >+ # movl + # movl + movl %eax,40(%edi) >+ >+ # *(uint32 *) (out + 44) = in11 >+ # movl + # movl + movl %ecx,44(%edi) >+ >+ # in12 = x12 >+ # movl in12=int32#1 >+ # movl in12=%eax >+ movl 148(%esp),%eax >+ >+ # in13 = x13 >+ # movl in13=int32#2 >+ # movl in13=%ecx >+ movl 152(%esp),%ecx >+ >+ # in12 += j12 >+ # addl + # addl + addl 212(%esp),%eax >+ >+ # in13 += j13 >+ # addl + # addl + addl 216(%esp),%ecx >+ >+ # in12 ^= *(uint32 *) (m + 48) >+ # xorl 48(+ # xorl 48(+ xorl 48(%esi),%eax >+ >+ # in13 ^= *(uint32 *) (m + 52) >+ # xorl 52(+ # xorl 52(+ xorl 52(%esi),%ecx >+ >+ # *(uint32 *) (out + 48) = in12 >+ # movl + # movl + movl %eax,48(%edi) >+ >+ # *(uint32 *) (out + 52) = in13 >+ # movl + # movl + movl %ecx,52(%edi) >+ >+ # in14 = x14 >+ # movl in14=int32#1 >+ # movl in14=%eax >+ movl 156(%esp),%eax >+ >+ # in15 = x15 >+ # movl in15=int32#2 >+ # movl in15=%ecx >+ movl 160(%esp),%ecx >+ >+ # in14 += j14 >+ # addl + # addl + addl 220(%esp),%eax >+ >+ # in15 += j15 >+ # addl + # addl + addl 224(%esp),%ecx >+ >+ # in14 ^= *(uint32 *) (m + 56) >+ # xorl 56(+ # xorl 56(+ xorl 56(%esi),%eax >+ >+ # in15 ^= *(uint32 *) (m + 60) >+ # xorl 60(+ # xorl 60(+ xorl 60(%esi),%ecx >+ >+ # *(uint32 *) (out + 56) = in14 >+ # movl + # movl + movl %eax,56(%edi) >+ >+ # *(uint32 *) (out + 60) = in15 >+ # movl + # movl + movl %ecx,60(%edi) >+ >+ # bytes = bytes_backup >+ # movl bytes=int32#4 >+ # movl bytes=%ebx >+ movl 76(%esp),%ebx >+ >+ # in8 = j8 >+ # movl in8=int32#1 >+ # movl in8=%eax >+ movl 196(%esp),%eax >+ >+ # in9 = j9 >+ # movl in9=int32#2 >+ # movl in9=%ecx >+ movl 200(%esp),%ecx >+ >+ # in8 += 1 >+ # add $1,+ # add $1,+ add $1,%eax >+ >+ # in9 += 0 + carry >+ # adc $0,+ # adc $0,+ adc $0,%ecx >+ >+ # j8 = in8 >+ # movl j8=stack32#34 >+ # movl j8=196(%esp) >+ movl %eax,196(%esp) >+ >+ # j9 = in9 >+ # movl j9=stack32#35 >+ # movl j9=200(%esp) >+ movl %ecx,200(%esp) >+ >+ # bytes - 64 >+ # cmp $64,+ # cmp $64,+ cmp $64,%ebx >+ >+ # goto bytesatleast65 if unsigned> >+ ja ._bytesatleast65 >+ >+ # goto bytesatleast64 if unsigned>= >+ jae ._bytesatleast64 >+ >+ # m = out >+ # mov m=int32#5 >+ # mov m=%esi >+ mov %edi,%esi >+ >+ # out = ctarget >+ # movl out=int32#6 >+ # movl out=%edi >+ movl 228(%esp),%edi >+ >+ # i = bytes >+ # mov i=int32#2 >+ # mov i=%ecx >+ mov %ebx,%ecx >+ >+ # while (i) { *out++ = *m++; --i } >+ rep movsb >+ >+ # bytesatleast64# >+._bytesatleast64: >+ >+ # x = x_backup >+ # movl x=int32#1 >+ # movl x=%eax >+ movl 64(%esp),%eax >+ >+ # in8 = j8 >+ # movl in8=int32#2 >+ # movl in8=%ecx >+ movl 196(%esp),%ecx >+ >+ # in9 = j9 >+ # movl in9=int32#3 >+ # movl in9=%edx >+ movl 200(%esp),%edx >+ >+ # *(uint32 *) (x + 32) = in8 >+ # movl + # movl + movl %ecx,32(%eax) >+ >+ # *(uint32 *) (x + 36) = in9 >+ # movl + # movl + movl %edx,36(%eax) >+ >+ # done# >+._done: >+ >+ # eax = eax_stack >+ # movl eax=int32#1 >+ # movl eax=%eax >+ movl 80(%esp),%eax >+ >+ # ebx = ebx_stack >+ # movl ebx=int32#4 >+ # movl ebx=%ebx >+ movl 84(%esp),%ebx >+ >+ # esi = esi_stack >+ # movl esi=int32#5 >+ # movl esi=%esi >+ movl 88(%esp),%esi >+ >+ # edi = edi_stack >+ # movl edi=int32#6 >+ # movl edi=%edi >+ movl 92(%esp),%edi >+ >+ # ebp = ebp_stack >+ # movl ebp=int32#7 >+ # movl ebp=%ebp >+ movl 96(%esp),%ebp >+ >+ # leave >+ add %eax,%esp >+ ret >+ >+ # bytesatleast65# >+._bytesatleast65: >+ >+ # bytes -= 64 >+ # sub $64,+ # sub $64,+ sub $64,%ebx >+ >+ # out += 64 >+ # add $64,+ # add $64,+ add $64,%edi >+ >+ # m += 64 >+ # add $64,+ # add $64,+ add $64,%esi >+ >+ # goto bytesatleast1 >+ jmp ._bytesatleast1 >+ >+# enter ECRYPT_init >+.text >+.p2align 5 >+.globl ECRYPT_init >+_ECRYPT_init: >+ECRYPT_init: >+ mov %esp,%eax >+ and $31,%eax >+ add $256,%eax >+ sub %eax,%esp >+ >+ # leave >+ add %eax,%esp >+ ret >+ >+# enter ECRYPT_keysetup >+.text >+.p2align 5 >+.globl ECRYPT_keysetup >+_ECRYPT_keysetup: >+ECRYPT_keysetup: >+ mov %esp,%eax >+ and $31,%eax >+ add $256,%eax >+ sub %eax,%esp >+ >+ # eax_stack = eax >+ # movl eax_stack=stack32#1 >+ # movl eax_stack=64(%esp) >+ movl %eax,64(%esp) >+ >+ # ebx_stack = ebx >+ # movl ebx_stack=stack32#2 >+ # movl ebx_stack=68(%esp) >+ movl %ebx,68(%esp) >+ >+ # esi_stack = esi >+ # movl esi_stack=stack32#3 >+ # movl esi_stack=72(%esp) >+ movl %esi,72(%esp) >+ >+ # edi_stack = edi >+ # movl edi_stack=stack32#4 >+ # movl edi_stack=76(%esp) >+ movl %edi,76(%esp) >+ >+ # ebp_stack = ebp >+ # movl ebp_stack=stack32#5 >+ # movl ebp_stack=80(%esp) >+ movl %ebp,80(%esp) >+ >+ # k = arg2 >+ # movl k=int32#2 >+ # movl k=%ecx >+ movl 8(%esp,%eax),%ecx >+ >+ # kbits = arg3 >+ # movl kbits=int32#3 >+ # movl kbits=%edx >+ movl 12(%esp,%eax),%edx >+ >+ # x = arg1 >+ # movl x=int32#1 >+ # movl x=%eax >+ movl 4(%esp,%eax),%eax >+ >+ # in1 = *(uint32 *) (k + 0) >+ # movl 0(in1=int32#4 >+ # movl 0(in1=%ebx >+ movl 0(%ecx),%ebx >+ >+ # in2 = *(uint32 *) (k + 4) >+ # movl 4(in2=int32#5 >+ # movl 4(in2=%esi >+ movl 4(%ecx),%esi >+ >+ # in3 = *(uint32 *) (k + 8) >+ # movl 8(in3=int32#6 >+ # movl 8(in3=%edi >+ movl 8(%ecx),%edi >+ >+ # in4 = *(uint32 *) (k + 12) >+ # movl 12(in4=int32#7 >+ # movl 12(in4=%ebp >+ movl 12(%ecx),%ebp >+ >+ # *(uint32 *) (x + 4) = in1 >+ # movl + # movl + movl %ebx,4(%eax) >+ >+ # *(uint32 *) (x + 8) = in2 >+ # movl + # movl + movl %esi,8(%eax) >+ >+ # *(uint32 *) (x + 12) = in3 >+ # movl + # movl + movl %edi,12(%eax) >+ >+ # *(uint32 *) (x + 16) = in4 >+ # movl + # movl + movl %ebp,16(%eax) >+ >+ # kbits - 256 >+ # cmp $256,+ # cmp $256,+ cmp $256,%edx >+ >+ # goto kbits128 if unsigned< >+ jb ._kbits128 >+ >+ # kbits256# >+._kbits256: >+ >+ # in11 = *(uint32 *) (k + 16) >+ # movl 16(in11=int32#3 >+ # movl 16(in11=%edx >+ movl 16(%ecx),%edx >+ >+ # in12 = *(uint32 *) (k + 20) >+ # movl 20(in12=int32#4 >+ # movl 20(in12=%ebx >+ movl 20(%ecx),%ebx >+ >+ # in13 = *(uint32 *) (k + 24) >+ # movl 24(in13=int32#5 >+ # movl 24(in13=%esi >+ movl 24(%ecx),%esi >+ >+ # in14 = *(uint32 *) (k + 28) >+ # movl 28(in14=int32#2 >+ # movl 28(in14=%ecx >+ movl 28(%ecx),%ecx >+ >+ # *(uint32 *) (x + 44) = in11 >+ # movl + # movl + movl %edx,44(%eax) >+ >+ # *(uint32 *) (x + 48) = in12 >+ # movl + # movl + movl %ebx,48(%eax) >+ >+ # *(uint32 *) (x + 52) = in13 >+ # movl + # movl + movl %esi,52(%eax) >+ >+ # *(uint32 *) (x + 56) = in14 >+ # movl + # movl + movl %ecx,56(%eax) >+ >+ # in0 = 1634760805 >+ # mov $1634760805,>in0=int32#2 >+ # mov $1634760805,>in0=%ecx >+ mov $1634760805,%ecx >+ >+ # in5 = 857760878 >+ # mov $857760878,>in5=int32#3 >+ # mov $857760878,>in5=%edx >+ mov $857760878,%edx >+ >+ # in10 = 2036477234 >+ # mov $2036477234,>in10=int32#4 >+ # mov $2036477234,>in10=%ebx >+ mov $2036477234,%ebx >+ >+ # in15 = 1797285236 >+ # mov $1797285236,>in15=int32#5 >+ # mov $1797285236,>in15=%esi >+ mov $1797285236,%esi >+ >+ # *(uint32 *) (x + 0) = in0 >+ # movl + # movl + movl %ecx,0(%eax) >+ >+ # *(uint32 *) (x + 20) = in5 >+ # movl + # movl + movl %edx,20(%eax) >+ >+ # *(uint32 *) (x + 40) = in10 >+ # movl + # movl + movl %ebx,40(%eax) >+ >+ # *(uint32 *) (x + 60) = in15 >+ # movl + # movl + movl %esi,60(%eax) >+ >+ # goto keysetupdone >+ jmp ._keysetupdone >+ >+ # kbits128# >+._kbits128: >+ >+ # in11 = *(uint32 *) (k + 0) >+ # movl 0(in11=int32#3 >+ # movl 0(in11=%edx >+ movl 0(%ecx),%edx >+ >+ # in12 = *(uint32 *) (k + 4) >+ # movl 4(in12=int32#4 >+ # movl 4(in12=%ebx >+ movl 4(%ecx),%ebx >+ >+ # in13 = *(uint32 *) (k + 8) >+ # movl 8(in13=int32#5 >+ # movl 8(in13=%esi >+ movl 8(%ecx),%esi >+ >+ # in14 = *(uint32 *) (k + 12) >+ # movl 12(in14=int32#2 >+ # movl 12(in14=%ecx >+ movl 12(%ecx),%ecx >+ >+ # *(uint32 *) (x + 44) = in11 >+ # movl + # movl + movl %edx,44(%eax) >+ >+ # *(uint32 *) (x + 48) = in12 >+ # movl + # movl + movl %ebx,48(%eax) >+ >+ # *(uint32 *) (x + 52) = in13 >+ # movl + # movl + movl %esi,52(%eax) >+ >+ # *(uint32 *) (x + 56) = in14 >+ # movl + # movl + movl %ecx,56(%eax) >+ >+ # in0 = 1634760805 >+ # mov $1634760805,>in0=int32#2 >+ # mov $1634760805,>in0=%ecx >+ mov $1634760805,%ecx >+ >+ # in5 = 824206446 >+ # mov $824206446,>in5=int32#3 >+ # mov $824206446,>in5=%edx >+ mov $824206446,%edx >+ >+ # in10 = 2036477238 >+ # mov $2036477238,>in10=int32#4 >+ # mov $2036477238,>in10=%ebx >+ mov $2036477238,%ebx >+ >+ # in15 = 1797285236 >+ # mov $1797285236,>in15=int32#5 >+ # mov $1797285236,>in15=%esi >+ mov $1797285236,%esi >+ >+ # *(uint32 *) (x + 0) = in0 >+ # movl + # movl + movl %ecx,0(%eax) >+ >+ # *(uint32 *) (x + 20) = in5 >+ # movl + # movl + movl %edx,20(%eax) >+ >+ # *(uint32 *) (x + 40) = in10 >+ # movl + # movl + movl %ebx,40(%eax) >+ >+ # *(uint32 *) (x + 60) = in15 >+ # movl + # movl + movl %esi,60(%eax) >+ >+ # keysetupdone# >+._keysetupdone: >+ >+ # eax = eax_stack >+ # movl eax=int32#1 >+ # movl eax=%eax >+ movl 64(%esp),%eax >+ >+ # ebx = ebx_stack >+ # movl ebx=int32#4 >+ # movl ebx=%ebx >+ movl 68(%esp),%ebx >+ >+ # esi = esi_stack >+ # movl esi=int32#5 >+ # movl esi=%esi >+ movl 72(%esp),%esi >+ >+ # edi = edi_stack >+ # movl edi=int32#6 >+ # movl edi=%edi >+ movl 76(%esp),%edi >+ >+ # ebp = ebp_stack >+ # movl ebp=int32#7 >+ # movl ebp=%ebp >+ movl 80(%esp),%ebp >+ >+ # leave >+ add %eax,%esp >+ ret >+ >+# enter ECRYPT_ivsetup >+.text >+.p2align 5 >+.globl ECRYPT_ivsetup >+_ECRYPT_ivsetup: >+ECRYPT_ivsetup: >+ mov %esp,%eax >+ and $31,%eax >+ add $256,%eax >+ sub %eax,%esp >+ >+ # eax_stack = eax >+ # movl eax_stack=stack32#1 >+ # movl eax_stack=64(%esp) >+ movl %eax,64(%esp) >+ >+ # ebx_stack = ebx >+ # movl ebx_stack=stack32#2 >+ # movl ebx_stack=68(%esp) >+ movl %ebx,68(%esp) >+ >+ # esi_stack = esi >+ # movl esi_stack=stack32#3 >+ # movl esi_stack=72(%esp) >+ movl %esi,72(%esp) >+ >+ # edi_stack = edi >+ # movl edi_stack=stack32#4 >+ # movl edi_stack=76(%esp) >+ movl %edi,76(%esp) >+ >+ # ebp_stack = ebp >+ # movl ebp_stack=stack32#5 >+ # movl ebp_stack=80(%esp) >+ movl %ebp,80(%esp) >+ >+ # iv = arg2 >+ # movl iv=int32#2 >+ # movl iv=%ecx >+ movl 8(%esp,%eax),%ecx >+ >+ # x = arg1 >+ # movl x=int32#1 >+ # movl x=%eax >+ movl 4(%esp,%eax),%eax >+ >+ # in6 = *(uint32 *) (iv + 0) >+ # movl 0(in6=int32#3 >+ # movl 0(in6=%edx >+ movl 0(%ecx),%edx >+ >+ # in7 = *(uint32 *) (iv + 4) >+ # movl 4(in7=int32#2 >+ # movl 4(in7=%ecx >+ movl 4(%ecx),%ecx >+ >+ # in8 = 0 >+ # mov $0,>in8=int32#4 >+ # mov $0,>in8=%ebx >+ mov $0,%ebx >+ >+ # in9 = 0 >+ # mov $0,>in9=int32#5 >+ # mov $0,>in9=%esi >+ mov $0,%esi >+ >+ # *(uint32 *) (x + 24) = in6 >+ # movl + # movl + movl %edx,24(%eax) >+ >+ # *(uint32 *) (x + 28) = in7 >+ # movl + # movl + movl %ecx,28(%eax) >+ >+ # *(uint32 *) (x + 32) = in8 >+ # movl + # movl + movl %ebx,32(%eax) >+ >+ # *(uint32 *) (x + 36) = in9 >+ # movl + # movl + movl %esi,36(%eax) >+ >+ # eax = eax_stack >+ # movl eax=int32#1 >+ # movl eax=%eax >+ movl 64(%esp),%eax >+ >+ # ebx = ebx_stack >+ # movl ebx=int32#4 >+ # movl ebx=%ebx >+ movl 68(%esp),%ebx >+ >+ # esi = esi_stack >+ # movl esi=int32#5 >+ # movl esi=%esi >+ movl 72(%esp),%esi >+ >+ # edi = edi_stack >+ # movl edi=int32#6 >+ # movl edi=%edi >+ movl 76(%esp),%edi >+ >+ # ebp = ebp_stack >+ # movl ebp=int32#7 >+ # movl ebp=%ebp >+ movl 80(%esp),%ebp >+ >+ # leave >+ add %eax,%esp >+ ret >diff --git a/arch/x86/crypto/salsa20_32.c b/arch/x86/crypto/salsa20_32.c >new file mode 100644 >index 0000000..14dd69d >--- /dev/null >+++ b/arch/x86/crypto/salsa20_32.c >@@ -0,0 +1,127 @@ >+/* >+ * Glue code for optimized i586 version of Salsa20. >+ * >+ * Copyright (c) 2007 Tan Swee Heng >+ * >+ * Optimized i586 assembly code taken from: >+ * - salsa20.s: >+ * Public domain assembly code by Daniel. J. Bernstein . >+ * Available from . >+ * We renamed it salsa20-i586-asm_32.S and indented it nicely to match >+ * the other ciphers. >+ * >+ * This program is free software; you can redistribute it and/or modify it >+ * under the terms of the GNU General Public License as published by the Free >+ * Software Foundation; either version 2 of the License, or (at your option) >+ * any later version. >+ * >+ */ >+ >+#include >+#include >+#include >+ >+#define SALSA20_IV_SIZE 8U >+#define SALSA20_MIN_KEY_SIZE 16U >+#define SALSA20_MAX_KEY_SIZE 32U >+ >+// use the ECRYPT_* function names in salsa20-i586-asm_32.S >+#define salsa20_keysetup ECRYPT_keysetup >+#define salsa20_ivsetup ECRYPT_ivsetup >+#define salsa20_encrypt_bytes ECRYPT_encrypt_bytes >+ >+struct salsa20_ctx >+{ >+ u32 input[16]; >+}; >+ >+asmlinkage void salsa20_keysetup(struct salsa20_ctx *ctx, const u8 *k, >+ u32 keysize, u32 ivsize); >+asmlinkage void salsa20_ivsetup(struct salsa20_ctx *ctx, const u8 *iv); >+asmlinkage void salsa20_encrypt_bytes(struct salsa20_ctx *ctx, >+ const u8 *src, u8 *dst, u32 bytes); >+ >+static int setkey(struct crypto_tfm *tfm, const u8 *key, >+ unsigned int keysize) >+{ >+ struct salsa20_ctx *ctx = crypto_tfm_ctx(tfm); >+ salsa20_keysetup(ctx, key, keysize*8, SALSA20_IV_SIZE*8); >+ return 0; >+} >+ >+static int encrypt(struct blkcipher_desc *desc, >+ struct scatterlist *dst, struct scatterlist *src, >+ unsigned int nbytes) >+{ >+ struct blkcipher_walk walk; >+ struct crypto_blkcipher *tfm = desc->tfm; >+ struct salsa20_ctx *ctx = crypto_blkcipher_ctx(tfm); >+ int err; >+ >+ blkcipher_walk_init(&walk, dst, src, nbytes); >+ err = blkcipher_walk_virt_block(desc, &walk, 64); >+ >+ salsa20_ivsetup(ctx, walk.iv); >+ >+ if (likely(walk.nbytes == nbytes)) >+ { >+ salsa20_encrypt_bytes(ctx, walk.dst.virt.addr, >+ walk.src.virt.addr, nbytes); >+ return blkcipher_walk_done(desc, &walk, 0); >+ } >+ >+ while (walk.nbytes >= 64) { >+ salsa20_encrypt_bytes(ctx, walk.dst.virt.addr, >+ walk.src.virt.addr, >+ walk.nbytes - (walk.nbytes % 64)); >+ err = blkcipher_walk_done(desc, &walk, walk.nbytes % 64); >+ } >+ >+ if (walk.nbytes) { >+ salsa20_encrypt_bytes(ctx, walk.dst.virt.addr, >+ walk.src.virt.addr, walk.nbytes); >+ err = blkcipher_walk_done(desc, &walk, 0); >+ } >+ >+ return err; >+} >+ >+static struct crypto_alg alg = { >+ .cra_name = "salsa20", >+ .cra_driver_name = "salsa20-i586", >+ .cra_priority = 200, >+ .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, >+ .cra_type = &crypto_blkcipher_type, >+ .cra_blocksize = 1, >+ .cra_ctxsize = sizeof(struct salsa20_ctx), >+ .cra_alignmask = 3, >+ .cra_module = THIS_MODULE, >+ .cra_list = LIST_HEAD_INIT(alg.cra_list), >+ .cra_u = { >+ .blkcipher = { >+ .setkey = setkey, >+ .encrypt = encrypt, >+ .decrypt = encrypt, >+ .min_keysize = SALSA20_MIN_KEY_SIZE, >+ .max_keysize = SALSA20_MAX_KEY_SIZE, >+ .ivsize = SALSA20_IV_SIZE, >+ } >+ } >+}; >+ >+static int __init init(void) >+{ >+ return crypto_register_alg(&alg); >+} >+ >+static void __exit fini(void) >+{ >+ crypto_unregister_alg(&alg); >+} >+ >+module_init(init); >+module_exit(fini); >+ >+MODULE_LICENSE("GPL"); >+MODULE_DESCRIPTION ("Salsa20 stream cipher algorithm (i586 version)"); >+MODULE_ALIAS("salsa20"); >diff --git a/crypto/Kconfig b/crypto/Kconfig >index 40ae92c..5cd0eb8 100644 >--- a/crypto/Kconfig >+++ b/crypto/Kconfig >@@ -476,6 +476,21 @@ config CRYPTO_SALSA20 > The Salsa20 stream cipher algorithm is designed by Daniel J. > Bernstein . See > >+config CRYPTO_SALSA20_586 >+ tristate "Salsa20 stream cipher algorithm (i586) (EXPERIMENTAL)" >+ depends on (X86 || UML_X86) && !64BIT >+ depends on EXPERIMENTAL >+ select CRYPTO_BLKCIPHER >+ select CRYPTO_SALSA20 >+ help >+ Salsa20 stream cipher algorithm. >+ >+ Salsa20 is a stream cipher submitted to eSTREAM, the ECRYPT >+ Stream Cipher Project. See >+ >+ The Salsa20 stream cipher algorithm is designed by Daniel J. >+ Bernstein . See >+ > config CRYPTO_DEFLATE > tristate "Deflate compression algorithm" > select CRYPTO_ALGAPI >diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c >index 6a474f4..cd8e04f 100644 >--- a/crypto/tcrypt.c >+++ b/crypto/tcrypt.c >@@ -1662,6 +1662,8 @@ static void do_test(void) > case 206: > test_cipher_speed("salsa20-generic", ENCRYPT, sec, NULL, 0, > salsa20_speed_template); >+ test_cipher_speed("salsa20-i586", ENCRYPT, sec, NULL, 0, >+ salsa20_speed_template); > break; > > case 300: Sebastian