# qhasm: stack32 arg1 # qhasm: stack32 arg2 # qhasm: stack32 arg3 # qhasm: stack32 arg4 # qhasm: input arg1 # qhasm: input arg2 # qhasm: input arg3 # qhasm: input arg4 # qhasm: int32 eax # qhasm: int32 ebx # qhasm: int32 esi # qhasm: int32 edi # qhasm: int32 ebp # qhasm: caller eax # qhasm: caller ebx # qhasm: caller esi # qhasm: caller edi # qhasm: caller ebp # qhasm: int32 k # qhasm: int32 kbits # qhasm: int32 iv # qhasm: int32 i # qhasm: stack32 x_backup # qhasm: int32 x # qhasm: stack32 m_backup # qhasm: int32 m # qhasm: stack32 out_backup # qhasm: int32 out # qhasm: stack32 bytes_backup # qhasm: int32 bytes # qhasm: stack32 eax_stack # qhasm: stack32 ebx_stack # qhasm: stack32 esi_stack # qhasm: stack32 edi_stack # qhasm: stack32 ebp_stack # qhasm: int32 a # qhasm: int32 in0 # qhasm: int32 in1 # qhasm: int32 in2 # qhasm: int32 in3 # qhasm: int32 in4 # qhasm: int32 in5 # qhasm: int32 in6 # qhasm: int32 in7 # qhasm: int32 in8 # qhasm: int32 in9 # qhasm: int32 in10 # qhasm: int32 in11 # qhasm: int32 in12 # qhasm: int32 in13 # qhasm: int32 in14 # qhasm: int32 in15 # qhasm: int32 i0 # qhasm: int32 i1 # qhasm: int32 i2 # qhasm: int32 i3 # qhasm: int32 i4 # qhasm: int32 i5 # qhasm: int32 i6 # qhasm: int32 i7 # qhasm: int32 i8 # qhasm: int32 i9 # qhasm: int32 i10 # qhasm: int32 i11 # qhasm: int32 i12 # qhasm: int32 i13 # qhasm: int32 i14 # qhasm: int32 i15 # qhasm: stack32 x0 # qhasm: stack32 x1 # qhasm: stack32 x2 # qhasm: stack32 x3 # qhasm: stack32 x4 # qhasm: stack32 x5 # qhasm: stack32 x6 # qhasm: stack32 x7 # qhasm: stack32 x8 # qhasm: stack32 x9 # qhasm: stack32 x10 # qhasm: stack32 x11 # qhasm: stack32 x12 # qhasm: stack32 x13 # qhasm: stack32 x14 # qhasm: stack32 x15 # qhasm: stack32 j0 # qhasm: stack32 j1 # qhasm: stack32 j2 # qhasm: stack32 j3 # qhasm: stack32 j4 # qhasm: stack32 j5 # qhasm: stack32 j6 # qhasm: stack32 j7 # qhasm: stack32 j8 # qhasm: stack32 j9 # qhasm: stack32 j10 # qhasm: stack32 j11 # qhasm: stack32 j12 # qhasm: stack32 j13 # qhasm: stack32 j14 # qhasm: stack32 j15 # qhasm: stack512 tmp # qhasm: stack32 ctarget # qhasm: enter ECRYPT_keystream_bytes .text .p2align 5 .globl _ECRYPT_keystream_bytes .globl ECRYPT_keystream_bytes _ECRYPT_keystream_bytes: ECRYPT_keystream_bytes: mov %esp,%eax and $31,%eax add $256,%eax sub %eax,%esp # qhasm: eax_stack = eax # asm 1: movl eax_stack=stack32#1 # asm 2: movl eax_stack=0(%esp) movl %eax,0(%esp) # qhasm: ebx_stack = ebx # asm 1: movl ebx_stack=stack32#2 # asm 2: movl ebx_stack=4(%esp) movl %ebx,4(%esp) # qhasm: esi_stack = esi # asm 1: movl esi_stack=stack32#3 # asm 2: movl esi_stack=8(%esp) movl %esi,8(%esp) # qhasm: edi_stack = edi # asm 1: movl edi_stack=stack32#4 # asm 2: movl edi_stack=12(%esp) movl %edi,12(%esp) # qhasm: ebp_stack = ebp # asm 1: movl ebp_stack=stack32#5 # asm 2: movl ebp_stack=16(%esp) movl %ebp,16(%esp) # qhasm: x = arg1 # asm 1: movl x=int32#3 # asm 2: movl x=%edx movl 4(%esp,%eax),%edx # qhasm: m = arg2 # asm 1: movl m=int32#5 # asm 2: movl m=%esi movl 8(%esp,%eax),%esi # qhasm: out = m # asm 1: mov out=int32#6 # asm 2: mov out=%edi mov %esi,%edi # qhasm: bytes = arg3 # asm 1: movl bytes=int32#4 # asm 2: movl bytes=%ebx movl 12(%esp,%eax),%ebx # qhasm: unsigned>? bytes - 0 # asm 1: cmp $0, jbe ._done # qhasm: a = 0 # asm 1: mov $0,>a=int32#1 # asm 2: mov $0,>a=%eax mov $0,%eax # qhasm: i = bytes # asm 1: mov i=int32#2 # asm 2: mov i=%ecx mov %ebx,%ecx # qhasm: while (i) { *out++ = a; --i } rep stosb # qhasm: out -= bytes # asm 1: subl eax_stack=stack32#1 # asm 2: movl eax_stack=0(%esp) movl %eax,0(%esp) # qhasm: ebx_stack = ebx # asm 1: movl ebx_stack=stack32#2 # asm 2: movl ebx_stack=4(%esp) movl %ebx,4(%esp) # qhasm: esi_stack = esi # asm 1: movl esi_stack=stack32#3 # asm 2: movl esi_stack=8(%esp) movl %esi,8(%esp) # qhasm: edi_stack = edi # asm 1: movl edi_stack=stack32#4 # asm 2: movl edi_stack=12(%esp) movl %edi,12(%esp) # qhasm: ebp_stack = ebp # asm 1: movl ebp_stack=stack32#5 # asm 2: movl ebp_stack=16(%esp) movl %ebp,16(%esp) # qhasm: x = arg1 # asm 1: movl x=int32#3 # asm 2: movl x=%edx movl 4(%esp,%eax),%edx # qhasm: m = arg2 # asm 1: movl m=int32#5 # asm 2: movl m=%esi movl 8(%esp,%eax),%esi # qhasm: out = arg3 # asm 1: movl out=int32#6 # asm 2: movl out=%edi movl 12(%esp,%eax),%edi # qhasm: bytes = arg4 # asm 1: movl bytes=int32#4 # asm 2: movl bytes=%ebx movl 16(%esp,%eax),%ebx # qhasm: unsigned>? bytes - 0 # asm 1: cmp $0, jbe ._done # comment:fp stack unchanged by jump # qhasm: goto start jmp ._start # qhasm: enter ECRYPT_encrypt_bytes .text .p2align 5 .globl _ECRYPT_encrypt_bytes .globl ECRYPT_encrypt_bytes _ECRYPT_encrypt_bytes: ECRYPT_encrypt_bytes: mov %esp,%eax and $31,%eax add $256,%eax sub %eax,%esp # qhasm: eax_stack = eax # asm 1: movl eax_stack=stack32#1 # asm 2: movl eax_stack=0(%esp) movl %eax,0(%esp) # qhasm: ebx_stack = ebx # asm 1: movl ebx_stack=stack32#2 # asm 2: movl ebx_stack=4(%esp) movl %ebx,4(%esp) # qhasm: esi_stack = esi # asm 1: movl esi_stack=stack32#3 # asm 2: movl esi_stack=8(%esp) movl %esi,8(%esp) # qhasm: edi_stack = edi # asm 1: movl edi_stack=stack32#4 # asm 2: movl edi_stack=12(%esp) movl %edi,12(%esp) # qhasm: ebp_stack = ebp # asm 1: movl ebp_stack=stack32#5 # asm 2: movl ebp_stack=16(%esp) movl %ebp,16(%esp) # qhasm: x = arg1 # asm 1: movl x=int32#3 # asm 2: movl x=%edx movl 4(%esp,%eax),%edx # qhasm: m = arg2 # asm 1: movl m=int32#5 # asm 2: movl m=%esi movl 8(%esp,%eax),%esi # qhasm: out = arg3 # asm 1: movl out=int32#6 # asm 2: movl out=%edi movl 12(%esp,%eax),%edi # qhasm: bytes = arg4 # asm 1: movl bytes=int32#4 # asm 2: movl bytes=%ebx movl 16(%esp,%eax),%ebx # qhasm: unsigned>? bytes - 0 # asm 1: cmp $0, jbe ._done # comment:fp stack unchanged by fallthrough # qhasm: start: ._start: # qhasm: in0 = *(uint32 *) (x + 0) # asm 1: movl 0(in0=int32#1 # asm 2: movl 0(in0=%eax movl 0(%edx),%eax # qhasm: in1 = *(uint32 *) (x + 4) # asm 1: movl 4(in1=int32#2 # asm 2: movl 4(in1=%ecx movl 4(%edx),%ecx # qhasm: in2 = *(uint32 *) (x + 8) # asm 1: movl 8(in2=int32#7 # asm 2: movl 8(in2=%ebp movl 8(%edx),%ebp # qhasm: j0 = in0 # asm 1: movl j0=stack32#6 # asm 2: movl j0=20(%esp) movl %eax,20(%esp) # qhasm: in3 = *(uint32 *) (x + 12) # asm 1: movl 12(in3=int32#1 # asm 2: movl 12(in3=%eax movl 12(%edx),%eax # qhasm: j1 = in1 # asm 1: movl j1=stack32#7 # asm 2: movl j1=24(%esp) movl %ecx,24(%esp) # qhasm: in4 = *(uint32 *) (x + 16) # asm 1: movl 16(in4=int32#2 # asm 2: movl 16(in4=%ecx movl 16(%edx),%ecx # qhasm: j2 = in2 # asm 1: movl j2=stack32#8 # asm 2: movl j2=28(%esp) movl %ebp,28(%esp) # qhasm: in5 = *(uint32 *) (x + 20) # asm 1: movl 20(in5=int32#7 # asm 2: movl 20(in5=%ebp movl 20(%edx),%ebp # qhasm: j3 = in3 # asm 1: movl j3=stack32#9 # asm 2: movl j3=32(%esp) movl %eax,32(%esp) # qhasm: in6 = *(uint32 *) (x + 24) # asm 1: movl 24(in6=int32#1 # asm 2: movl 24(in6=%eax movl 24(%edx),%eax # qhasm: j4 = in4 # asm 1: movl j4=stack32#10 # asm 2: movl j4=36(%esp) movl %ecx,36(%esp) # qhasm: in7 = *(uint32 *) (x + 28) # asm 1: movl 28(in7=int32#2 # asm 2: movl 28(in7=%ecx movl 28(%edx),%ecx # qhasm: j5 = in5 # asm 1: movl j5=stack32#11 # asm 2: movl j5=40(%esp) movl %ebp,40(%esp) # qhasm: in8 = *(uint32 *) (x + 32) # asm 1: movl 32(in8=int32#7 # asm 2: movl 32(in8=%ebp movl 32(%edx),%ebp # qhasm: j6 = in6 # asm 1: movl j6=stack32#12 # asm 2: movl j6=44(%esp) movl %eax,44(%esp) # qhasm: in9 = *(uint32 *) (x + 36) # asm 1: movl 36(in9=int32#1 # asm 2: movl 36(in9=%eax movl 36(%edx),%eax # qhasm: j7 = in7 # asm 1: movl j7=stack32#13 # asm 2: movl j7=48(%esp) movl %ecx,48(%esp) # qhasm: in10 = *(uint32 *) (x + 40) # asm 1: movl 40(in10=int32#2 # asm 2: movl 40(in10=%ecx movl 40(%edx),%ecx # qhasm: j8 = in8 # asm 1: movl j8=stack32#14 # asm 2: movl j8=52(%esp) movl %ebp,52(%esp) # qhasm: in11 = *(uint32 *) (x + 44) # asm 1: movl 44(in11=int32#7 # asm 2: movl 44(in11=%ebp movl 44(%edx),%ebp # qhasm: j9 = in9 # asm 1: movl j9=stack32#15 # asm 2: movl j9=56(%esp) movl %eax,56(%esp) # qhasm: in12 = *(uint32 *) (x + 48) # asm 1: movl 48(in12=int32#1 # asm 2: movl 48(in12=%eax movl 48(%edx),%eax # qhasm: j10 = in10 # asm 1: movl j10=stack32#16 # asm 2: movl j10=60(%esp) movl %ecx,60(%esp) # qhasm: in13 = *(uint32 *) (x + 52) # asm 1: movl 52(in13=int32#2 # asm 2: movl 52(in13=%ecx movl 52(%edx),%ecx # qhasm: j11 = in11 # asm 1: movl j11=stack32#17 # asm 2: movl j11=64(%esp) movl %ebp,64(%esp) # qhasm: in14 = *(uint32 *) (x + 56) # asm 1: movl 56(in14=int32#7 # asm 2: movl 56(in14=%ebp movl 56(%edx),%ebp # qhasm: j12 = in12 # asm 1: movl j12=stack32#18 # asm 2: movl j12=68(%esp) movl %eax,68(%esp) # qhasm: in15 = *(uint32 *) (x + 60) # asm 1: movl 60(in15=int32#1 # asm 2: movl 60(in15=%eax movl 60(%edx),%eax # qhasm: j13 = in13 # asm 1: movl j13=stack32#19 # asm 2: movl j13=72(%esp) movl %ecx,72(%esp) # qhasm: j14 = in14 # asm 1: movl j14=stack32#20 # asm 2: movl j14=76(%esp) movl %ebp,76(%esp) # qhasm: j15 = in15 # asm 1: movl j15=stack32#21 # asm 2: movl j15=80(%esp) movl %eax,80(%esp) # qhasm: x_backup = x # asm 1: movl x_backup=stack32#22 # asm 2: movl x_backup=84(%esp) movl %edx,84(%esp) # qhasm: bytesatleast1: ._bytesatleast1: # qhasm: unsignedctarget=stack32#23 # asm 2: movl ctarget=88(%esp) movl %edi,88(%esp) # qhasm: out = &tmp # asm 1: leal out=int32#6 # asm 2: leal out=%edi leal 192(%esp),%edi # qhasm: i = bytes # asm 1: mov i=int32#2 # asm 2: mov i=%ecx mov %ebx,%ecx # qhasm: while (i) { *out++ = *m++; --i } rep movsb # qhasm: out = &tmp # asm 1: leal out=int32#6 # asm 2: leal out=%edi leal 192(%esp),%edi # qhasm: m = &tmp # asm 1: leal m=int32#5 # asm 2: leal m=%esi leal 192(%esp),%esi # comment:fp stack unchanged by fallthrough # qhasm: nocopy: ._nocopy: # qhasm: out_backup = out # asm 1: movl out_backup=stack32#24 # asm 2: movl out_backup=92(%esp) movl %edi,92(%esp) # qhasm: m_backup = m # asm 1: movl m_backup=stack32#25 # asm 2: movl m_backup=96(%esp) movl %esi,96(%esp) # qhasm: bytes_backup = bytes # asm 1: movl bytes_backup=stack32#26 # asm 2: movl bytes_backup=100(%esp) movl %ebx,100(%esp) # qhasm: in0 = j0 # asm 1: movl in0=int32#1 # asm 2: movl in0=%eax movl 20(%esp),%eax # qhasm: in1 = j1 # asm 1: movl in1=int32#2 # asm 2: movl in1=%ecx movl 24(%esp),%ecx # qhasm: in2 = j2 # asm 1: movl in2=int32#3 # asm 2: movl in2=%edx movl 28(%esp),%edx # qhasm: in3 = j3 # asm 1: movl in3=int32#4 # asm 2: movl in3=%ebx movl 32(%esp),%ebx # qhasm: x0 = in0 # asm 1: movl x0=stack32#27 # asm 2: movl x0=104(%esp) movl %eax,104(%esp) # qhasm: x1 = in1 # asm 1: movl x1=stack32#28 # asm 2: movl x1=108(%esp) movl %ecx,108(%esp) # qhasm: x2 = in2 # asm 1: movl x2=stack32#29 # asm 2: movl x2=112(%esp) movl %edx,112(%esp) # qhasm: x3 = in3 # asm 1: movl x3=stack32#30 # asm 2: movl x3=116(%esp) movl %ebx,116(%esp) # qhasm: in4 = j4 # asm 1: movl in4=int32#1 # asm 2: movl in4=%eax movl 36(%esp),%eax # qhasm: in5 = j5 # asm 1: movl in5=int32#2 # asm 2: movl in5=%ecx movl 40(%esp),%ecx # qhasm: in6 = j6 # asm 1: movl in6=int32#3 # asm 2: movl in6=%edx movl 44(%esp),%edx # qhasm: in7 = j7 # asm 1: movl in7=int32#4 # asm 2: movl in7=%ebx movl 48(%esp),%ebx # qhasm: x4 = in4 # asm 1: movl x4=stack32#31 # asm 2: movl x4=120(%esp) movl %eax,120(%esp) # qhasm: x5 = in5 # asm 1: movl x5=stack32#32 # asm 2: movl x5=124(%esp) movl %ecx,124(%esp) # qhasm: x6 = in6 # asm 1: movl x6=stack32#33 # asm 2: movl x6=128(%esp) movl %edx,128(%esp) # qhasm: x7 = in7 # asm 1: movl x7=stack32#34 # asm 2: movl x7=132(%esp) movl %ebx,132(%esp) # qhasm: in8 = j8 # asm 1: movl in8=int32#1 # asm 2: movl in8=%eax movl 52(%esp),%eax # qhasm: in9 = j9 # asm 1: movl in9=int32#2 # asm 2: movl in9=%ecx movl 56(%esp),%ecx # qhasm: in10 = j10 # asm 1: movl in10=int32#3 # asm 2: movl in10=%edx movl 60(%esp),%edx # qhasm: in11 = j11 # asm 1: movl in11=int32#4 # asm 2: movl in11=%ebx movl 64(%esp),%ebx # qhasm: x8 = in8 # asm 1: movl x8=stack32#35 # asm 2: movl x8=136(%esp) movl %eax,136(%esp) # qhasm: x9 = in9 # asm 1: movl x9=stack32#36 # asm 2: movl x9=140(%esp) movl %ecx,140(%esp) # qhasm: x10 = in10 # asm 1: movl x10=stack32#37 # asm 2: movl x10=144(%esp) movl %edx,144(%esp) # qhasm: x11 = in11 # asm 1: movl x11=stack32#38 # asm 2: movl x11=148(%esp) movl %ebx,148(%esp) # qhasm: in12 = j12 # asm 1: movl in12=int32#1 # asm 2: movl in12=%eax movl 68(%esp),%eax # qhasm: in13 = j13 # asm 1: movl in13=int32#2 # asm 2: movl in13=%ecx movl 72(%esp),%ecx # qhasm: in14 = j14 # asm 1: movl in14=int32#3 # asm 2: movl in14=%edx movl 76(%esp),%edx # qhasm: in15 = j15 # asm 1: movl in15=int32#4 # asm 2: movl in15=%ebx movl 80(%esp),%ebx # qhasm: x12 = in12 # asm 1: movl x12=stack32#39 # asm 2: movl x12=152(%esp) movl %eax,152(%esp) # qhasm: x13 = in13 # asm 1: movl x13=stack32#40 # asm 2: movl x13=156(%esp) movl %ecx,156(%esp) # qhasm: x14 = in14 # asm 1: movl x14=stack32#41 # asm 2: movl x14=160(%esp) movl %edx,160(%esp) # qhasm: x15 = in15 # asm 1: movl x15=stack32#42 # asm 2: movl x15=164(%esp) movl %ebx,164(%esp) # qhasm: i = 8 # asm 1: mov $8,>i=int32#1 # asm 2: mov $8,>i=%eax mov $8,%eax # qhasm: mainloop: ._mainloop: # qhasm: i0 = x0 # asm 1: movl i0=int32#2 # asm 2: movl i0=%ecx movl 104(%esp),%ecx # qhasm: i4 = x4 # asm 1: movl i4=int32#3 # asm 2: movl i4=%edx movl 120(%esp),%edx # qhasm: i0 += i4 # asm 1: addl i12=int32#4 # asm 2: movl i12=%ebx movl 152(%esp),%ebx # qhasm: i12 ^= i0 # asm 1: xorl i8=int32#5 # asm 2: movl i8=%esi movl 136(%esp),%esi # qhasm: i8 += i12 # asm 1: addl x0=stack32#27 # asm 2: movl x0=104(%esp) movl %ecx,104(%esp) # qhasm: i12 ^= i0 # asm 1: xorl i1=int32#2 # asm 2: movl i1=%ecx movl 108(%esp),%ecx # qhasm: i5 = x5 # asm 1: movl i5=int32#6 # asm 2: movl i5=%edi movl 124(%esp),%edi # qhasm: i1 += i5 # asm 1: addl i13=int32#7 # asm 2: movl i13=%ebp movl 156(%esp),%ebp # qhasm: i13 ^= i1 # asm 1: xorl x12=stack32#28 # asm 2: movl x12=108(%esp) movl %ebx,108(%esp) # qhasm: i8 += i12 # asm 1: addl i9=int32#4 # asm 2: movl i9=%ebx movl 140(%esp),%ebx # qhasm: i9 += i13 # asm 1: addl x1=stack32#31 # asm 2: movl x1=120(%esp) movl %ecx,120(%esp) # qhasm: i13 ^= i1 # asm 1: xorl x8=stack32#35 # asm 2: movl x8=136(%esp) movl %esi,136(%esp) # qhasm: i4 ^= i8 # asm 1: xorl x4=stack32#36 # asm 2: movl x4=140(%esp) movl %edx,140(%esp) # qhasm: i2 = x2 # asm 1: movl i2=int32#2 # asm 2: movl i2=%ecx movl 112(%esp),%ecx # qhasm: i6 = x6 # asm 1: movl i6=int32#3 # asm 2: movl i6=%edx movl 128(%esp),%edx # qhasm: i2 += i6 # asm 1: addl i14=int32#5 # asm 2: movl i14=%esi movl 160(%esp),%esi # qhasm: i14 ^= i2 # asm 1: xorl x13=stack32#29 # asm 2: movl x13=112(%esp) movl %ebp,112(%esp) # qhasm: i9 += i13 # asm 1: addl i10=int32#7 # asm 2: movl i10=%ebp movl 144(%esp),%ebp # qhasm: i10 += i14 # asm 1: addl x2=stack32#33 # asm 2: movl x2=128(%esp) movl %ecx,128(%esp) # qhasm: i14 ^= i2 # asm 1: xorl x9=stack32#41 # asm 2: movl x9=160(%esp) movl %ebx,160(%esp) # qhasm: i5 ^= i9 # asm 1: xorl x5=stack32#32 # asm 2: movl x5=124(%esp) movl %edi,124(%esp) # qhasm: i3 = x3 # asm 1: movl i3=int32#2 # asm 2: movl i3=%ecx movl 116(%esp),%ecx # qhasm: i7 = x7 # asm 1: movl i7=int32#4 # asm 2: movl i7=%ebx movl 132(%esp),%ebx # qhasm: i3 += i7 # asm 1: addl i15=int32#6 # asm 2: movl i15=%edi movl 164(%esp),%edi # qhasm: i15 ^= i3 # asm 1: xorl x14=stack32#30 # asm 2: movl x14=116(%esp) movl %esi,116(%esp) # qhasm: i10 += i14 # asm 1: addl i11=int32#5 # asm 2: movl i11=%esi movl 148(%esp),%esi # qhasm: i11 += i15 # asm 1: addl x3=stack32#34 # asm 2: movl x3=132(%esp) movl %ecx,132(%esp) # qhasm: i15 ^= i3 # asm 1: xorl x11=stack32#37 # asm 2: movl x11=144(%esp) movl %esi,144(%esp) # qhasm: i7 ^= i11 # asm 1: xorl x7=stack32#38 # asm 2: movl x7=148(%esp) movl %ebx,148(%esp) # qhasm: x10 = i10 # asm 1: movl x10=stack32#39 # asm 2: movl x10=152(%esp) movl %ebp,152(%esp) # qhasm: i6 ^= i10 # asm 1: xorl i0=int32#2 # asm 2: movl i0=%ecx movl 104(%esp),%ecx # qhasm: i5 = x5 # asm 1: movl i5=int32#4 # asm 2: movl i5=%ebx movl 124(%esp),%ebx # qhasm: i0 += i5 # asm 1: addl i10=int32#5 # asm 2: movl i10=%esi movl 152(%esp),%esi # qhasm: i10 += i15 # asm 1: addl x0=stack32#27 # asm 2: movl x0=104(%esp) movl %ecx,104(%esp) # qhasm: i15 ^= i0 # asm 1: xorl i1=int32#2 # asm 2: movl i1=%ecx movl 120(%esp),%ecx # qhasm: i1 += i6 # asm 1: addl i12=int32#7 # asm 2: movl i12=%ebp movl 108(%esp),%ebp # qhasm: i12 ^= i1 # asm 1: xorl x15=stack32#42 # asm 2: movl x15=164(%esp) movl %edi,164(%esp) # qhasm: i10 += i15 # asm 1: addl i11=int32#6 # asm 2: movl i11=%edi movl 144(%esp),%edi # qhasm: i11 += i12 # asm 1: addl x1=stack32#28 # asm 2: movl x1=108(%esp) movl %ecx,108(%esp) # qhasm: i12 ^= i1 # asm 1: xorl x10=stack32#37 # asm 2: movl x10=144(%esp) movl %esi,144(%esp) # qhasm: i5 ^= i10 # asm 1: xorl x5=stack32#32 # asm 2: movl x5=124(%esp) movl %ebx,124(%esp) # qhasm: i2 = x2 # asm 1: movl i2=int32#2 # asm 2: movl i2=%ecx movl 128(%esp),%ecx # qhasm: i7 = x7 # asm 1: movl i7=int32#4 # asm 2: movl i7=%ebx movl 148(%esp),%ebx # qhasm: i2 += i7 # asm 1: addl i13=int32#5 # asm 2: movl i13=%esi movl 112(%esp),%esi # qhasm: i13 ^= i2 # asm 1: xorl x12=stack32#39 # asm 2: movl x12=152(%esp) movl %ebp,152(%esp) # qhasm: i11 += i12 # asm 1: addl i8=int32#7 # asm 2: movl i8=%ebp movl 136(%esp),%ebp # qhasm: i8 += i13 # asm 1: addl x2=stack32#29 # asm 2: movl x2=112(%esp) movl %ecx,112(%esp) # qhasm: i13 ^= i2 # asm 1: xorl x11=stack32#38 # asm 2: movl x11=148(%esp) movl %edi,148(%esp) # qhasm: i6 ^= i11 # asm 1: xorl x6=stack32#33 # asm 2: movl x6=128(%esp) movl %edx,128(%esp) # qhasm: i3 = x3 # asm 1: movl i3=int32#2 # asm 2: movl i3=%ecx movl 132(%esp),%ecx # qhasm: i4 = x4 # asm 1: movl i4=int32#3 # asm 2: movl i4=%edx movl 140(%esp),%edx # qhasm: i3 += i4 # asm 1: addl i14=int32#6 # asm 2: movl i14=%edi movl 116(%esp),%edi # qhasm: i14 ^= i3 # asm 1: xorl x13=stack32#40 # asm 2: movl x13=156(%esp) movl %esi,156(%esp) # qhasm: i8 += i13 # asm 1: addl i9=int32#5 # asm 2: movl i9=%esi movl 160(%esp),%esi # qhasm: i9 += i14 # asm 1: addl x3=stack32#30 # asm 2: movl x3=116(%esp) movl %ecx,116(%esp) # qhasm: i14 ^= i3 # asm 1: xorl x14=stack32#41 # asm 2: movl x14=160(%esp) movl %edi,160(%esp) # qhasm: i9 += i14 # asm 1: addl x8=stack32#35 # asm 2: movl x8=136(%esp) movl %ebp,136(%esp) # qhasm: i7 ^= i8 # asm 1: xorl x7=stack32#34 # asm 2: movl x7=132(%esp) movl %ebx,132(%esp) # qhasm: x9 = i9 # asm 1: movl x9=stack32#36 # asm 2: movl x9=140(%esp) movl %esi,140(%esp) # qhasm: i4 ^= i9 # asm 1: xorl x4=stack32#31 # asm 2: movl x4=120(%esp) movl %edx,120(%esp) # qhasm: unsigned>? i -= 2 # asm 1: sub $2, ja ._mainloop # qhasm: out = out_backup # asm 1: movl out=int32#6 # asm 2: movl out=%edi movl 92(%esp),%edi # qhasm: m = m_backup # asm 1: movl m=int32#5 # asm 2: movl m=%esi movl 96(%esp),%esi # qhasm: in0 = x0 # asm 1: movl in0=int32#1 # asm 2: movl in0=%eax movl 104(%esp),%eax # qhasm: in1 = x1 # asm 1: movl in1=int32#2 # asm 2: movl in1=%ecx movl 108(%esp),%ecx # qhasm: in0 += j0 # asm 1: addl in2=int32#1 # asm 2: movl in2=%eax movl 112(%esp),%eax # qhasm: in3 = x3 # asm 1: movl in3=int32#2 # asm 2: movl in3=%ecx movl 116(%esp),%ecx # qhasm: in2 += j2 # asm 1: addl in4=int32#1 # asm 2: movl in4=%eax movl 120(%esp),%eax # qhasm: in5 = x5 # asm 1: movl in5=int32#2 # asm 2: movl in5=%ecx movl 124(%esp),%ecx # qhasm: in4 += j4 # asm 1: addl in6=int32#1 # asm 2: movl in6=%eax movl 128(%esp),%eax # qhasm: in7 = x7 # asm 1: movl in7=int32#2 # asm 2: movl in7=%ecx movl 132(%esp),%ecx # qhasm: in6 += j6 # asm 1: addl in8=int32#1 # asm 2: movl in8=%eax movl 136(%esp),%eax # qhasm: in9 = x9 # asm 1: movl in9=int32#2 # asm 2: movl in9=%ecx movl 140(%esp),%ecx # qhasm: in8 += j8 # asm 1: addl in10=int32#1 # asm 2: movl in10=%eax movl 144(%esp),%eax # qhasm: in11 = x11 # asm 1: movl in11=int32#2 # asm 2: movl in11=%ecx movl 148(%esp),%ecx # qhasm: in10 += j10 # asm 1: addl in12=int32#1 # asm 2: movl in12=%eax movl 152(%esp),%eax # qhasm: in13 = x13 # asm 1: movl in13=int32#2 # asm 2: movl in13=%ecx movl 156(%esp),%ecx # qhasm: in12 += j12 # asm 1: addl in14=int32#1 # asm 2: movl in14=%eax movl 160(%esp),%eax # qhasm: in15 = x15 # asm 1: movl in15=int32#2 # asm 2: movl in15=%ecx movl 164(%esp),%ecx # qhasm: in14 += j14 # asm 1: addl bytes=int32#4 # asm 2: movl bytes=%ebx movl 100(%esp),%ebx # qhasm: in12 = j12 # asm 1: movl in12=int32#1 # asm 2: movl in12=%eax movl 68(%esp),%eax # qhasm: in13 = j13 # asm 1: movl in13=int32#2 # asm 2: movl in13=%ecx movl 72(%esp),%ecx # qhasm: carry? in12 += 1 # asm 1: add $1,j12=stack32#18 # asm 2: movl j12=68(%esp) movl %eax,68(%esp) # qhasm: j13 = in13 # asm 1: movl j13=stack32#19 # asm 2: movl j13=72(%esp) movl %ecx,72(%esp) # qhasm: unsigned>? unsigned ja ._bytesatleast65 # comment:fp stack unchanged by jump # qhasm: goto bytesatleast64 if !unsigned< jae ._bytesatleast64 # qhasm: m = out # asm 1: mov m=int32#5 # asm 2: mov m=%esi mov %edi,%esi # qhasm: out = ctarget # asm 1: movl out=int32#6 # asm 2: movl out=%edi movl 88(%esp),%edi # qhasm: i = bytes # asm 1: mov i=int32#2 # asm 2: mov i=%ecx mov %ebx,%ecx # qhasm: while (i) { *out++ = *m++; --i } rep movsb # comment:fp stack unchanged by fallthrough # qhasm: bytesatleast64: ._bytesatleast64: # qhasm: x = x_backup # asm 1: movl x=int32#1 # asm 2: movl x=%eax movl 84(%esp),%eax # qhasm: in12 = j12 # asm 1: movl in12=int32#2 # asm 2: movl in12=%ecx movl 68(%esp),%ecx # qhasm: in13 = j13 # asm 1: movl in13=int32#3 # asm 2: movl in13=%edx movl 72(%esp),%edx # qhasm: *(uint32 *) (x + 48) = in12 # asm 1: movl eax=int32#1 # asm 2: movl eax=%eax movl 0(%esp),%eax # qhasm: ebx = ebx_stack # asm 1: movl ebx=int32#4 # asm 2: movl ebx=%ebx movl 4(%esp),%ebx # qhasm: esi = esi_stack # asm 1: movl esi=int32#5 # asm 2: movl esi=%esi movl 8(%esp),%esi # qhasm: edi = edi_stack # asm 1: movl edi=int32#6 # asm 2: movl edi=%edi movl 12(%esp),%edi # qhasm: ebp = ebp_stack # asm 1: movl ebp=int32#7 # asm 2: movl ebp=%ebp movl 16(%esp),%ebp # qhasm: leave add %eax,%esp ret # qhasm: bytesatleast65: ._bytesatleast65: # qhasm: bytes -= 64 # asm 1: sub $64,eax_stack=stack32#1 # asm 2: movl eax_stack=0(%esp) movl %eax,0(%esp) # qhasm: ebx_stack = ebx # asm 1: movl ebx_stack=stack32#2 # asm 2: movl ebx_stack=4(%esp) movl %ebx,4(%esp) # qhasm: esi_stack = esi # asm 1: movl esi_stack=stack32#3 # asm 2: movl esi_stack=8(%esp) movl %esi,8(%esp) # qhasm: edi_stack = edi # asm 1: movl edi_stack=stack32#4 # asm 2: movl edi_stack=12(%esp) movl %edi,12(%esp) # qhasm: ebp_stack = ebp # asm 1: movl ebp_stack=stack32#5 # asm 2: movl ebp_stack=16(%esp) movl %ebp,16(%esp) # qhasm: k = arg2 # asm 1: movl k=int32#2 # asm 2: movl k=%ecx movl 8(%esp,%eax),%ecx # qhasm: kbits = arg3 # asm 1: movl kbits=int32#3 # asm 2: movl kbits=%edx movl 12(%esp,%eax),%edx # qhasm: x = arg1 # asm 1: movl x=int32#1 # asm 2: movl x=%eax movl 4(%esp,%eax),%eax # qhasm: in4 = *(uint32 *) (k + 0) # asm 1: movl 0(in4=int32#4 # asm 2: movl 0(in4=%ebx movl 0(%ecx),%ebx # qhasm: in5 = *(uint32 *) (k + 4) # asm 1: movl 4(in5=int32#5 # asm 2: movl 4(in5=%esi movl 4(%ecx),%esi # qhasm: in6 = *(uint32 *) (k + 8) # asm 1: movl 8(in6=int32#6 # asm 2: movl 8(in6=%edi movl 8(%ecx),%edi # qhasm: in7 = *(uint32 *) (k + 12) # asm 1: movl 12(in7=int32#7 # asm 2: movl 12(in7=%ebp movl 12(%ecx),%ebp # qhasm: *(uint32 *) (x + 16) = in4 # asm 1: movl in8=int32#3 # asm 2: movl 16(in8=%edx movl 16(%ecx),%edx # qhasm: in9 = *(uint32 *) (k + 20) # asm 1: movl 20(in9=int32#4 # asm 2: movl 20(in9=%ebx movl 20(%ecx),%ebx # qhasm: in10 = *(uint32 *) (k + 24) # asm 1: movl 24(in10=int32#5 # asm 2: movl 24(in10=%esi movl 24(%ecx),%esi # qhasm: in11 = *(uint32 *) (k + 28) # asm 1: movl 28(in11=int32#2 # asm 2: movl 28(in11=%ecx movl 28(%ecx),%ecx # qhasm: *(uint32 *) (x + 32) = in8 # asm 1: movl in0=int32#2 # asm 2: mov $1634760805,>in0=%ecx mov $1634760805,%ecx # qhasm: in1 = 857760878 # asm 1: mov $857760878,>in1=int32#3 # asm 2: mov $857760878,>in1=%edx mov $857760878,%edx # qhasm: in2 = 2036477234 # asm 1: mov $2036477234,>in2=int32#4 # asm 2: mov $2036477234,>in2=%ebx mov $2036477234,%ebx # qhasm: in3 = 1797285236 # asm 1: mov $1797285236,>in3=int32#5 # asm 2: mov $1797285236,>in3=%esi mov $1797285236,%esi # qhasm: *(uint32 *) (x + 0) = in0 # asm 1: movl in8=int32#3 # asm 2: movl 0(in8=%edx movl 0(%ecx),%edx # qhasm: in9 = *(uint32 *) (k + 4) # asm 1: movl 4(in9=int32#4 # asm 2: movl 4(in9=%ebx movl 4(%ecx),%ebx # qhasm: in10 = *(uint32 *) (k + 8) # asm 1: movl 8(in10=int32#5 # asm 2: movl 8(in10=%esi movl 8(%ecx),%esi # qhasm: in11 = *(uint32 *) (k + 12) # asm 1: movl 12(in11=int32#2 # asm 2: movl 12(in11=%ecx movl 12(%ecx),%ecx # qhasm: *(uint32 *) (x + 32) = in8 # asm 1: movl in0=int32#2 # asm 2: mov $1634760805,>in0=%ecx mov $1634760805,%ecx # qhasm: in1 = 824206446 # asm 1: mov $824206446,>in1=int32#3 # asm 2: mov $824206446,>in1=%edx mov $824206446,%edx # qhasm: in2 = 2036477238 # asm 1: mov $2036477238,>in2=int32#4 # asm 2: mov $2036477238,>in2=%ebx mov $2036477238,%ebx # qhasm: in3 = 1797285236 # asm 1: mov $1797285236,>in3=int32#5 # asm 2: mov $1797285236,>in3=%esi mov $1797285236,%esi # qhasm: *(uint32 *) (x + 0) = in0 # asm 1: movl eax=int32#1 # asm 2: movl eax=%eax movl 0(%esp),%eax # qhasm: ebx = ebx_stack # asm 1: movl ebx=int32#4 # asm 2: movl ebx=%ebx movl 4(%esp),%ebx # qhasm: esi = esi_stack # asm 1: movl esi=int32#5 # asm 2: movl esi=%esi movl 8(%esp),%esi # qhasm: edi = edi_stack # asm 1: movl edi=int32#6 # asm 2: movl edi=%edi movl 12(%esp),%edi # qhasm: ebp = ebp_stack # asm 1: movl ebp=int32#7 # asm 2: movl ebp=%ebp movl 16(%esp),%ebp # qhasm: leave add %eax,%esp ret # qhasm: enter ECRYPT_ivsetup .text .p2align 5 .globl _ECRYPT_ivsetup .globl ECRYPT_ivsetup _ECRYPT_ivsetup: ECRYPT_ivsetup: mov %esp,%eax and $31,%eax add $256,%eax sub %eax,%esp # qhasm: eax_stack = eax # asm 1: movl eax_stack=stack32#1 # asm 2: movl eax_stack=0(%esp) movl %eax,0(%esp) # qhasm: ebx_stack = ebx # asm 1: movl ebx_stack=stack32#2 # asm 2: movl ebx_stack=4(%esp) movl %ebx,4(%esp) # qhasm: esi_stack = esi # asm 1: movl esi_stack=stack32#3 # asm 2: movl esi_stack=8(%esp) movl %esi,8(%esp) # qhasm: edi_stack = edi # asm 1: movl edi_stack=stack32#4 # asm 2: movl edi_stack=12(%esp) movl %edi,12(%esp) # qhasm: ebp_stack = ebp # asm 1: movl ebp_stack=stack32#5 # asm 2: movl ebp_stack=16(%esp) movl %ebp,16(%esp) # qhasm: iv = arg2 # asm 1: movl iv=int32#2 # asm 2: movl iv=%ecx movl 8(%esp,%eax),%ecx # qhasm: x = arg1 # asm 1: movl x=int32#1 # asm 2: movl x=%eax movl 4(%esp,%eax),%eax # qhasm: in12 = 0 # asm 1: mov $0,>in12=int32#3 # asm 2: mov $0,>in12=%edx mov $0,%edx # qhasm: in13 = 0 # asm 1: mov $0,>in13=int32#4 # asm 2: mov $0,>in13=%ebx mov $0,%ebx # qhasm: in14 = *(uint32 *) (iv + 0) # asm 1: movl 0(in14=int32#5 # asm 2: movl 0(in14=%esi movl 0(%ecx),%esi # qhasm: in15 = *(uint32 *) (iv + 4) # asm 1: movl 4(in15=int32#2 # asm 2: movl 4(in15=%ecx movl 4(%ecx),%ecx # qhasm: *(uint32 *) (x + 48) = in12 # asm 1: movl eax=int32#1 # asm 2: movl eax=%eax movl 0(%esp),%eax # qhasm: ebx = ebx_stack # asm 1: movl ebx=int32#4 # asm 2: movl ebx=%ebx movl 4(%esp),%ebx # qhasm: esi = esi_stack # asm 1: movl esi=int32#5 # asm 2: movl esi=%esi movl 8(%esp),%esi # qhasm: edi = edi_stack # asm 1: movl edi=int32#6 # asm 2: movl edi=%edi movl 12(%esp),%edi # qhasm: ebp = ebp_stack # asm 1: movl ebp=int32#7 # asm 2: movl ebp=%ebp movl 16(%esp),%ebp # qhasm: leave add %eax,%esp ret