1.text 2.globl _RC4 3.align 4 4_RC4: 5L_RC4_begin: 6 %ifdef __CET__ 7 8.byte 243,15,30,251 9 %endif 10 11 pushl %ebp 12 pushl %ebx 13 pushl %esi 14 pushl %edi 15 movl 20(%esp),%edi 16 movl 24(%esp),%edx 17 movl 28(%esp),%esi 18 movl 32(%esp),%ebp 19 xorl %eax,%eax 20 xorl %ebx,%ebx 21 cmpl $0,%edx 22 je L000abort 23 movb (%edi),%al 24 movb 4(%edi),%bl 25 addl $8,%edi 26 leal (%esi,%edx,1),%ecx 27 subl %esi,%ebp 28 movl %ecx,24(%esp) 29 incb %al 30 cmpl $-1,256(%edi) 31 je L001RC4_CHAR 32 movl (%edi,%eax,4),%ecx 33 andl $-4,%edx 34 jz L002loop1 35 movl %ebp,32(%esp) 36 testl $-8,%edx 37 jz L003go4loop4 38 call L004PIC_me_up 39L004PIC_me_up: 40 popl %ebp 41 movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L004PIC_me_up(%ebp),%ebp 42 btl $26,(%ebp) 43 jnc L003go4loop4 44 movl 32(%esp),%ebp 45 andl $-8,%edx 46 leal -8(%esi,%edx,1),%edx 47 movl %edx,-4(%edi) 48 addb %cl,%bl 49 movl (%edi,%ebx,4),%edx 50 movl %ecx,(%edi,%ebx,4) 51 movl %edx,(%edi,%eax,4) 52 incl %eax 53 addl %ecx,%edx 54 movzbl %al,%eax 55 movzbl %dl,%edx 56 movq (%esi),%mm0 57 movl (%edi,%eax,4),%ecx 58 movd (%edi,%edx,4),%mm2 59 jmp L005loop_mmx_enter 60.align 4,0x90 61L006loop_mmx: 62 addb %cl,%bl 63 psllq $56,%mm1 64 movl (%edi,%ebx,4),%edx 65 movl %ecx,(%edi,%ebx,4) 66 movl %edx,(%edi,%eax,4) 67 incl %eax 68 addl %ecx,%edx 69 movzbl %al,%eax 70 movzbl %dl,%edx 71 pxor %mm1,%mm2 72 movq (%esi),%mm0 73 movq %mm2,-8(%ebp,%esi,1) 74 movl (%edi,%eax,4),%ecx 75 movd (%edi,%edx,4),%mm2 76L005loop_mmx_enter: 77 addb %cl,%bl 78 movl (%edi,%ebx,4),%edx 79 movl %ecx,(%edi,%ebx,4) 80 movl %edx,(%edi,%eax,4) 81 incl %eax 82 addl %ecx,%edx 83 movzbl %al,%eax 84 movzbl %dl,%edx 85 pxor %mm0,%mm2 86 movl (%edi,%eax,4),%ecx 87 movd (%edi,%edx,4),%mm1 88 addb %cl,%bl 89 psllq $8,%mm1 90 movl (%edi,%ebx,4),%edx 91 movl %ecx,(%edi,%ebx,4) 92 movl %edx,(%edi,%eax,4) 93 incl %eax 94 addl %ecx,%edx 95 movzbl %al,%eax 96 movzbl %dl,%edx 97 pxor %mm1,%mm2 98 movl (%edi,%eax,4),%ecx 99 movd (%edi,%edx,4),%mm1 100 addb %cl,%bl 101 psllq $16,%mm1 102 movl (%edi,%ebx,4),%edx 103 movl %ecx,(%edi,%ebx,4) 104 movl %edx,(%edi,%eax,4) 105 incl %eax 106 addl %ecx,%edx 107 movzbl %al,%eax 108 movzbl %dl,%edx 109 pxor %mm1,%mm2 110 movl (%edi,%eax,4),%ecx 111 movd (%edi,%edx,4),%mm1 112 addb %cl,%bl 113 psllq $24,%mm1 114 movl (%edi,%ebx,4),%edx 115 movl %ecx,(%edi,%ebx,4) 116 movl %edx,(%edi,%eax,4) 117 incl %eax 118 addl %ecx,%edx 119 movzbl %al,%eax 120 movzbl %dl,%edx 121 pxor %mm1,%mm2 122 movl (%edi,%eax,4),%ecx 123 movd (%edi,%edx,4),%mm1 124 addb %cl,%bl 125 psllq $32,%mm1 126 movl (%edi,%ebx,4),%edx 127 movl %ecx,(%edi,%ebx,4) 128 movl %edx,(%edi,%eax,4) 129 incl %eax 130 addl %ecx,%edx 131 movzbl %al,%eax 132 movzbl %dl,%edx 133 pxor %mm1,%mm2 134 movl (%edi,%eax,4),%ecx 135 movd (%edi,%edx,4),%mm1 136 addb %cl,%bl 137 psllq $40,%mm1 138 movl (%edi,%ebx,4),%edx 139 movl %ecx,(%edi,%ebx,4) 140 movl %edx,(%edi,%eax,4) 141 incl %eax 142 addl %ecx,%edx 143 movzbl %al,%eax 144 movzbl %dl,%edx 145 pxor %mm1,%mm2 146 movl (%edi,%eax,4),%ecx 147 movd (%edi,%edx,4),%mm1 148 addb %cl,%bl 149 psllq $48,%mm1 150 movl (%edi,%ebx,4),%edx 151 movl %ecx,(%edi,%ebx,4) 152 movl %edx,(%edi,%eax,4) 153 incl %eax 154 addl %ecx,%edx 155 movzbl %al,%eax 156 movzbl %dl,%edx 157 pxor %mm1,%mm2 158 movl (%edi,%eax,4),%ecx 159 movd (%edi,%edx,4),%mm1 160 movl %ebx,%edx 161 xorl %ebx,%ebx 162 movb %dl,%bl 163 cmpl -4(%edi),%esi 164 leal 8(%esi),%esi 165 jb L006loop_mmx 166 psllq $56,%mm1 167 pxor %mm1,%mm2 168 movq %mm2,-8(%ebp,%esi,1) 169 emms 170 cmpl 24(%esp),%esi 171 je L007done 172 jmp L002loop1 173.align 4,0x90 174L003go4loop4: 175 leal -4(%esi,%edx,1),%edx 176 movl %edx,28(%esp) 177L008loop4: 178 addb %cl,%bl 179 movl (%edi,%ebx,4),%edx 180 movl %ecx,(%edi,%ebx,4) 181 movl %edx,(%edi,%eax,4) 182 addl %ecx,%edx 183 incb %al 184 andl $255,%edx 185 movl (%edi,%eax,4),%ecx 186 movl (%edi,%edx,4),%ebp 187 addb %cl,%bl 188 movl (%edi,%ebx,4),%edx 189 movl %ecx,(%edi,%ebx,4) 190 movl %edx,(%edi,%eax,4) 191 addl %ecx,%edx 192 incb %al 193 andl $255,%edx 194 rorl $8,%ebp 195 movl (%edi,%eax,4),%ecx 196 orl (%edi,%edx,4),%ebp 197 addb %cl,%bl 198 movl (%edi,%ebx,4),%edx 199 movl %ecx,(%edi,%ebx,4) 200 movl %edx,(%edi,%eax,4) 201 addl %ecx,%edx 202 incb %al 203 andl $255,%edx 204 rorl $8,%ebp 205 movl (%edi,%eax,4),%ecx 206 orl (%edi,%edx,4),%ebp 207 addb %cl,%bl 208 movl (%edi,%ebx,4),%edx 209 movl %ecx,(%edi,%ebx,4) 210 movl %edx,(%edi,%eax,4) 211 addl %ecx,%edx 212 incb %al 213 andl $255,%edx 214 rorl $8,%ebp 215 movl 32(%esp),%ecx 216 orl (%edi,%edx,4),%ebp 217 rorl $8,%ebp 218 xorl (%esi),%ebp 219 cmpl 28(%esp),%esi 220 movl %ebp,(%ecx,%esi,1) 221 leal 4(%esi),%esi 222 movl (%edi,%eax,4),%ecx 223 jb L008loop4 224 cmpl 24(%esp),%esi 225 je L007done 226 movl 32(%esp),%ebp 227.align 4,0x90 228L002loop1: 229 addb %cl,%bl 230 movl (%edi,%ebx,4),%edx 231 movl %ecx,(%edi,%ebx,4) 232 movl %edx,(%edi,%eax,4) 233 addl %ecx,%edx 234 incb %al 235 andl $255,%edx 236 movl (%edi,%edx,4),%edx 237 xorb (%esi),%dl 238 leal 1(%esi),%esi 239 movl (%edi,%eax,4),%ecx 240 cmpl 24(%esp),%esi 241 movb %dl,-1(%ebp,%esi,1) 242 jb L002loop1 243 jmp L007done 244.align 4,0x90 245L001RC4_CHAR: 246 movzbl (%edi,%eax,1),%ecx 247L009cloop1: 248 addb %cl,%bl 249 movzbl (%edi,%ebx,1),%edx 250 movb %cl,(%edi,%ebx,1) 251 movb %dl,(%edi,%eax,1) 252 addb %cl,%dl 253 movzbl (%edi,%edx,1),%edx 254 addb $1,%al 255 xorb (%esi),%dl 256 leal 1(%esi),%esi 257 movzbl (%edi,%eax,1),%ecx 258 cmpl 24(%esp),%esi 259 movb %dl,-1(%ebp,%esi,1) 260 jb L009cloop1 261L007done: 262 decb %al 263 movl %ebx,-4(%edi) 264 movb %al,-8(%edi) 265L000abort: 266 popl %edi 267 popl %esi 268 popl %ebx 269 popl %ebp 270 ret 271.globl _RC4_set_key 272.align 4 273_RC4_set_key: 274L_RC4_set_key_begin: 275 %ifdef __CET__ 276 277.byte 243,15,30,251 278 %endif 279 280 pushl %ebp 281 pushl %ebx 282 pushl %esi 283 pushl %edi 284 movl 20(%esp),%edi 285 movl 24(%esp),%ebp 286 movl 28(%esp),%esi 287 call L010PIC_me_up 288L010PIC_me_up: 289 popl %edx 290 movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L010PIC_me_up(%edx),%edx 291 leal 8(%edi),%edi 292 leal (%esi,%ebp,1),%esi 293 negl %ebp 294 xorl %eax,%eax 295 movl %ebp,-4(%edi) 296 btl $20,(%edx) 297 jc L011c1stloop 298.align 4,0x90 299L012w1stloop: 300 movl %eax,(%edi,%eax,4) 301 addb $1,%al 302 jnc L012w1stloop 303 xorl %ecx,%ecx 304 xorl %edx,%edx 305.align 4,0x90 306L013w2ndloop: 307 movl (%edi,%ecx,4),%eax 308 addb (%esi,%ebp,1),%dl 309 addb %al,%dl 310 addl $1,%ebp 311 movl (%edi,%edx,4),%ebx 312 jnz L014wnowrap 313 movl -4(%edi),%ebp 314L014wnowrap: 315 movl %eax,(%edi,%edx,4) 316 movl %ebx,(%edi,%ecx,4) 317 addb $1,%cl 318 jnc L013w2ndloop 319 jmp L015exit 320.align 4,0x90 321L011c1stloop: 322 movb %al,(%edi,%eax,1) 323 addb $1,%al 324 jnc L011c1stloop 325 xorl %ecx,%ecx 326 xorl %edx,%edx 327 xorl %ebx,%ebx 328.align 4,0x90 329L016c2ndloop: 330 movb (%edi,%ecx,1),%al 331 addb (%esi,%ebp,1),%dl 332 addb %al,%dl 333 addl $1,%ebp 334 movb (%edi,%edx,1),%bl 335 jnz L017cnowrap 336 movl -4(%edi),%ebp 337L017cnowrap: 338 movb %al,(%edi,%edx,1) 339 movb %bl,(%edi,%ecx,1) 340 addb $1,%cl 341 jnc L016c2ndloop 342 movl $-1,256(%edi) 343L015exit: 344 xorl %eax,%eax 345 movl %eax,-8(%edi) 346 movl %eax,-4(%edi) 347 popl %edi 348 popl %esi 349 popl %ebx 350 popl %ebp 351 ret 352.globl _RC4_options 353.align 4 354_RC4_options: 355L_RC4_options_begin: 356 %ifdef __CET__ 357 358.byte 243,15,30,251 359 %endif 360 361 call L018pic_point 362L018pic_point: 363 popl %eax 364 leal L019opts-L018pic_point(%eax),%eax 365 call L020PIC_me_up 366L020PIC_me_up: 367 popl %edx 368 movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L020PIC_me_up(%edx),%edx 369 movl (%edx),%edx 370 btl $20,%edx 371 jc L0211xchar 372 btl $26,%edx 373 jnc L022ret 374 addl $25,%eax 375 ret 376L0211xchar: 377 addl $12,%eax 378L022ret: 379 ret 380.align 6,0x90 381L019opts: 382.byte 114,99,52,40,52,120,44,105,110,116,41,0 383.byte 114,99,52,40,49,120,44,99,104,97,114,41,0 384.byte 114,99,52,40,56,120,44,109,109,120,41,0 385.byte 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89 386.byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 387.byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 388.align 6,0x90 389.section __IMPORT,__pointers,non_lazy_symbol_pointers 390L_OPENSSL_ia32cap_P$non_lazy_ptr: 391.indirect_symbol _OPENSSL_ia32cap_P 392.long 0 393.comm _OPENSSL_ia32cap_P,16,2 394