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