rc4-586.S revision 1.1 1 .file "rc4-586.s"
2 .text
3 .globl RC4
4 .type RC4,@function
5 .align 16
6 RC4:
7 .L_RC4_begin:
8 pushl %ebp
9 pushl %ebx
10 pushl %esi
11 pushl %edi
12 movl 20(%esp),%edi
13 movl 24(%esp),%edx
14 movl 28(%esp),%esi
15 movl 32(%esp),%ebp
16 xorl %eax,%eax
17 xorl %ebx,%ebx
18 cmpl $0,%edx
19 je .L000abort
20 movb (%edi),%al
21 movb 4(%edi),%bl
22 addl $8,%edi
23 leal (%esi,%edx,1),%ecx
24 subl %esi,%ebp
25 movl %ecx,24(%esp)
26 incb %al
27 cmpl $-1,256(%edi)
28 je .L001RC4_CHAR
29 movl (%edi,%eax,4),%ecx
30 andl $-4,%edx
31 jz .L002loop1
32 leal -4(%esi,%edx,1),%edx
33 movl %edx,28(%esp)
34 movl %ebp,32(%esp)
35 .align 16
36 .L003loop4:
37 addb %cl,%bl
38 movl (%edi,%ebx,4),%edx
39 movl %ecx,(%edi,%ebx,4)
40 movl %edx,(%edi,%eax,4)
41 addl %ecx,%edx
42 incb %al
43 andl $255,%edx
44 movl (%edi,%eax,4),%ecx
45 movl (%edi,%edx,4),%ebp
46 addb %cl,%bl
47 movl (%edi,%ebx,4),%edx
48 movl %ecx,(%edi,%ebx,4)
49 movl %edx,(%edi,%eax,4)
50 addl %ecx,%edx
51 incb %al
52 andl $255,%edx
53 rorl $8,%ebp
54 movl (%edi,%eax,4),%ecx
55 orl (%edi,%edx,4),%ebp
56 addb %cl,%bl
57 movl (%edi,%ebx,4),%edx
58 movl %ecx,(%edi,%ebx,4)
59 movl %edx,(%edi,%eax,4)
60 addl %ecx,%edx
61 incb %al
62 andl $255,%edx
63 rorl $8,%ebp
64 movl (%edi,%eax,4),%ecx
65 orl (%edi,%edx,4),%ebp
66 addb %cl,%bl
67 movl (%edi,%ebx,4),%edx
68 movl %ecx,(%edi,%ebx,4)
69 movl %edx,(%edi,%eax,4)
70 addl %ecx,%edx
71 incb %al
72 andl $255,%edx
73 rorl $8,%ebp
74 movl 32(%esp),%ecx
75 orl (%edi,%edx,4),%ebp
76 rorl $8,%ebp
77 xorl (%esi),%ebp
78 cmpl 28(%esp),%esi
79 movl %ebp,(%ecx,%esi,1)
80 leal 4(%esi),%esi
81 movl (%edi,%eax,4),%ecx
82 jb .L003loop4
83 cmpl 24(%esp),%esi
84 je .L004done
85 movl 32(%esp),%ebp
86 .align 16
87 .L002loop1:
88 addb %cl,%bl
89 movl (%edi,%ebx,4),%edx
90 movl %ecx,(%edi,%ebx,4)
91 movl %edx,(%edi,%eax,4)
92 addl %ecx,%edx
93 incb %al
94 andl $255,%edx
95 movl (%edi,%edx,4),%edx
96 xorb (%esi),%dl
97 leal 1(%esi),%esi
98 movl (%edi,%eax,4),%ecx
99 cmpl 24(%esp),%esi
100 movb %dl,-1(%ebp,%esi,1)
101 jb .L002loop1
102 jmp .L004done
103 .align 16
104 .L001RC4_CHAR:
105 movzbl (%edi,%eax,1),%ecx
106 .L005cloop1:
107 addb %cl,%bl
108 movzbl (%edi,%ebx,1),%edx
109 movb %cl,(%edi,%ebx,1)
110 movb %dl,(%edi,%eax,1)
111 addb %cl,%dl
112 movzbl (%edi,%edx,1),%edx
113 addb $1,%al
114 xorb (%esi),%dl
115 leal 1(%esi),%esi
116 movzbl (%edi,%eax,1),%ecx
117 cmpl 24(%esp),%esi
118 movb %dl,-1(%ebp,%esi,1)
119 jb .L005cloop1
120 .L004done:
121 decb %al
122 movb %bl,-4(%edi)
123 movb %al,-8(%edi)
124 .L000abort:
125 popl %edi
126 popl %esi
127 popl %ebx
128 popl %ebp
129 ret
130 .size RC4,.-.L_RC4_begin
131 .globl RC4_set_key
132 .type RC4_set_key,@function
133 .align 16
134 RC4_set_key:
135 .L_RC4_set_key_begin:
136 pushl %ebp
137 pushl %ebx
138 pushl %esi
139 pushl %edi
140 movl 20(%esp),%edi
141 movl 24(%esp),%ebp
142 movl 28(%esp),%esi
143 call .L006PIC_me_up
144 .L006PIC_me_up:
145 popl %edx
146 leal _GLOBAL_OFFSET_TABLE_+[.-.L006PIC_me_up](%edx),%edx
147 movl OPENSSL_ia32cap_P@GOT(%edx),%edx
148 leal 8(%edi),%edi
149 leal (%esi,%ebp,1),%esi
150 negl %ebp
151 xorl %eax,%eax
152 movl %ebp,-4(%edi)
153 btl $20,(%edx)
154 jc .L007c1stloop
155 .align 16
156 .L008w1stloop:
157 movl %eax,(%edi,%eax,4)
158 addb $1,%al
159 jnc .L008w1stloop
160 xorl %ecx,%ecx
161 xorl %edx,%edx
162 .align 16
163 .L009w2ndloop:
164 movl (%edi,%ecx,4),%eax
165 addb (%esi,%ebp,1),%dl
166 addb %al,%dl
167 addl $1,%ebp
168 movl (%edi,%edx,4),%ebx
169 jnz .L010wnowrap
170 movl -4(%edi),%ebp
171 .L010wnowrap:
172 movl %eax,(%edi,%edx,4)
173 movl %ebx,(%edi,%ecx,4)
174 addb $1,%cl
175 jnc .L009w2ndloop
176 jmp .L011exit
177 .align 16
178 .L007c1stloop:
179 movb %al,(%edi,%eax,1)
180 addb $1,%al
181 jnc .L007c1stloop
182 xorl %ecx,%ecx
183 xorl %edx,%edx
184 xorl %ebx,%ebx
185 .align 16
186 .L012c2ndloop:
187 movb (%edi,%ecx,1),%al
188 addb (%esi,%ebp,1),%dl
189 addb %al,%dl
190 addl $1,%ebp
191 movb (%edi,%edx,1),%bl
192 jnz .L013cnowrap
193 movl -4(%edi),%ebp
194 .L013cnowrap:
195 movb %al,(%edi,%edx,1)
196 movb %bl,(%edi,%ecx,1)
197 addb $1,%cl
198 jnc .L012c2ndloop
199 movl $-1,256(%edi)
200 .L011exit:
201 xorl %eax,%eax
202 movl %eax,-8(%edi)
203 movl %eax,-4(%edi)
204 popl %edi
205 popl %esi
206 popl %ebx
207 popl %ebp
208 ret
209 .size RC4_set_key,.-.L_RC4_set_key_begin
210 .globl RC4_options
211 .type RC4_options,@function
212 .align 16
213 RC4_options:
214 .L_RC4_options_begin:
215 call .L014pic_point
216 .L014pic_point:
217 popl %eax
218 leal .L015opts-.L014pic_point(%eax),%eax
219 call .L016PIC_me_up
220 .L016PIC_me_up:
221 popl %edx
222 leal _GLOBAL_OFFSET_TABLE_+[.-.L016PIC_me_up](%edx),%edx
223 movl OPENSSL_ia32cap_P@GOT(%edx),%edx
224 btl $20,(%edx)
225 jnc .L017skip
226 addl $12,%eax
227 .L017skip:
228 ret
229 .align 64
230 .L015opts:
231 .byte 114,99,52,40,52,120,44,105,110,116,41,0
232 .byte 114,99,52,40,49,120,44,99,104,97,114,41,0
233 .byte 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
234 .byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
235 .byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
236 .align 64
237 .size RC4_options,.-.L_RC4_options_begin
238 .comm OPENSSL_ia32cap_P,4,4
239