# 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 .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,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 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,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,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,= 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 x5=stack32#15 # movl x5=120(%esp) movl %ecx,120(%esp) # t += x6 # addl 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 v=int32#6 # movl v=%edi movl 144(%esp),%edi # v += w # add 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 x9=stack32#19 # movl x9=136(%esp) movl %esi,136(%esp) # t += x10 # addl x3=stack32#13 # movl x3=112(%esp) movl %edi,112(%esp) # p <<<= 9 # rol $9,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 x13=stack32#23 # movl x13=152(%esp) movl %ecx,152(%esp) # t += x14 # addl x7=stack32#17 # movl x7=128(%esp) movl %ebx,128(%esp) # p <<<= 13 # rol $13,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 x1=stack32#11 # movl x1=104(%esp) movl %esi,104(%esp) # t += x2 # addl x11=stack32#21 # movl x11=144(%esp) movl %edi,144(%esp) # p <<<= 18 # rol $18,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 x5=stack32#15 # movl x5=120(%esp) movl %ecx,120(%esp) # t += x9 # addl 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 v=int32#6 # movl v=%edi movl 156(%esp),%edi # v += w # add 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 x6=stack32#16 # movl x6=124(%esp) movl %esi,124(%esp) # t += x10 # addl x12=stack32#22 # movl x12=148(%esp) movl %edi,148(%esp) # p <<<= 9 # rol $9,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 x7=stack32#17 # movl x7=128(%esp) movl %ecx,128(%esp) # t += x11 # addl x13=stack32#23 # movl x13=152(%esp) movl %ebx,152(%esp) # p <<<= 13 # rol $13,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 x4=stack32#14 # movl x4=116(%esp) movl %esi,116(%esp) # t += x8 # addl x14=stack32#24 # movl x14=156(%esp) movl %edi,156(%esp) # p <<<= 18 # rol $18,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 x5=stack32#15 # movl x5=120(%esp) movl %ecx,120(%esp) # t += x6 # addl 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 v=int32#6 # movl v=%edi movl 144(%esp),%edi # v += w # add 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 x9=stack32#19 # movl x9=136(%esp) movl %esi,136(%esp) # t += x10 # addl x3=stack32#13 # movl x3=112(%esp) movl %edi,112(%esp) # p <<<= 9 # rol $9,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 x13=stack32#23 # movl x13=152(%esp) movl %ecx,152(%esp) # t += x14 # addl x7=stack32#17 # movl x7=128(%esp) movl %ebx,128(%esp) # p <<<= 13 # rol $13,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 x1=stack32#11 # movl x1=104(%esp) movl %esi,104(%esp) # t += x2 # addl x11=stack32#21 # movl x11=144(%esp) movl %edi,144(%esp) # p <<<= 18 # rol $18,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 x5=stack32#15 # movl x5=120(%esp) movl %ecx,120(%esp) # t += x9 # addl 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 v=int32#6 # movl v=%edi movl 156(%esp),%edi # v += w # add 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 x6=stack32#16 # movl x6=124(%esp) movl %esi,124(%esp) # t += x10 # addl x12=stack32#22 # movl x12=148(%esp) movl %edi,148(%esp) # p <<<= 9 # rol $9,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 x7=stack32#17 # movl x7=128(%esp) movl %ecx,128(%esp) # t += x11 # addl x13=stack32#23 # movl x13=152(%esp) movl %ebx,152(%esp) # p <<<= 13 # rol $13,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 x4=stack32#14 # movl x4=116(%esp) movl %esi,116(%esp) # t += x8 # addl x14=stack32#24 # movl x14=156(%esp) movl %edi,156(%esp) # p <<<= 18 # rol $18, 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 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 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 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 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 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 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 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 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,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, 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 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,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 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 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 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 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 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 .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 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