OLD | NEW |
(Empty) | |
| 1 %ifidn __OUTPUT_FORMAT__,obj |
| 2 section code use32 class=code align=64 |
| 3 %elifidn __OUTPUT_FORMAT__,win32 |
| 4 %ifdef __YASM_VERSION_ID__ |
| 5 %if __YASM_VERSION_ID__ < 01010000h |
| 6 %error yasm version 1.1.0 or later needed. |
| 7 %endif |
| 8 ; Yasm automatically includes .00 and complains about redefining it. |
| 9 ; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html |
| 10 %else |
| 11 $@feat.00 equ 1 |
| 12 %endif |
| 13 section .text code align=64 |
| 14 %else |
| 15 section .text code |
| 16 %endif |
| 17 ;extern _OPENSSL_ia32cap_P |
| 18 global _asm_RC4 |
| 19 align 16 |
| 20 _asm_RC4: |
| 21 L$_asm_RC4_begin: |
| 22 push ebp |
| 23 push ebx |
| 24 push esi |
| 25 push edi |
| 26 mov edi,DWORD [20+esp] |
| 27 mov edx,DWORD [24+esp] |
| 28 mov esi,DWORD [28+esp] |
| 29 mov ebp,DWORD [32+esp] |
| 30 xor eax,eax |
| 31 xor ebx,ebx |
| 32 cmp edx,0 |
| 33 je NEAR L$000abort |
| 34 mov al,BYTE [edi] |
| 35 mov bl,BYTE [4+edi] |
| 36 add edi,8 |
| 37 lea ecx,[edx*1+esi] |
| 38 sub ebp,esi |
| 39 mov DWORD [24+esp],ecx |
| 40 inc al |
| 41 cmp DWORD [256+edi],-1 |
| 42 je NEAR L$001RC4_CHAR |
| 43 mov ecx,DWORD [eax*4+edi] |
| 44 and edx,-4 |
| 45 jz NEAR L$002loop1 |
| 46 mov DWORD [32+esp],ebp |
| 47 test edx,-8 |
| 48 jz NEAR L$003go4loop4 |
| 49 lea ebp,[_OPENSSL_ia32cap_P] |
| 50 bt DWORD [ebp],26 |
| 51 jnc NEAR L$003go4loop4 |
| 52 mov ebp,DWORD [32+esp] |
| 53 and edx,-8 |
| 54 lea edx,[edx*1+esi-8] |
| 55 mov DWORD [edi-4],edx |
| 56 add bl,cl |
| 57 mov edx,DWORD [ebx*4+edi] |
| 58 mov DWORD [ebx*4+edi],ecx |
| 59 mov DWORD [eax*4+edi],edx |
| 60 inc eax |
| 61 add edx,ecx |
| 62 movzx eax,al |
| 63 movzx edx,dl |
| 64 movq mm0,[esi] |
| 65 mov ecx,DWORD [eax*4+edi] |
| 66 movd mm2,DWORD [edx*4+edi] |
| 67 jmp NEAR L$004loop_mmx_enter |
| 68 align 16 |
| 69 L$005loop_mmx: |
| 70 add bl,cl |
| 71 psllq mm1,56 |
| 72 mov edx,DWORD [ebx*4+edi] |
| 73 mov DWORD [ebx*4+edi],ecx |
| 74 mov DWORD [eax*4+edi],edx |
| 75 inc eax |
| 76 add edx,ecx |
| 77 movzx eax,al |
| 78 movzx edx,dl |
| 79 pxor mm2,mm1 |
| 80 movq mm0,[esi] |
| 81 movq [esi*1+ebp-8],mm2 |
| 82 mov ecx,DWORD [eax*4+edi] |
| 83 movd mm2,DWORD [edx*4+edi] |
| 84 L$004loop_mmx_enter: |
| 85 add bl,cl |
| 86 mov edx,DWORD [ebx*4+edi] |
| 87 mov DWORD [ebx*4+edi],ecx |
| 88 mov DWORD [eax*4+edi],edx |
| 89 inc eax |
| 90 add edx,ecx |
| 91 movzx eax,al |
| 92 movzx edx,dl |
| 93 pxor mm2,mm0 |
| 94 mov ecx,DWORD [eax*4+edi] |
| 95 movd mm1,DWORD [edx*4+edi] |
| 96 add bl,cl |
| 97 psllq mm1,8 |
| 98 mov edx,DWORD [ebx*4+edi] |
| 99 mov DWORD [ebx*4+edi],ecx |
| 100 mov DWORD [eax*4+edi],edx |
| 101 inc eax |
| 102 add edx,ecx |
| 103 movzx eax,al |
| 104 movzx edx,dl |
| 105 pxor mm2,mm1 |
| 106 mov ecx,DWORD [eax*4+edi] |
| 107 movd mm1,DWORD [edx*4+edi] |
| 108 add bl,cl |
| 109 psllq mm1,16 |
| 110 mov edx,DWORD [ebx*4+edi] |
| 111 mov DWORD [ebx*4+edi],ecx |
| 112 mov DWORD [eax*4+edi],edx |
| 113 inc eax |
| 114 add edx,ecx |
| 115 movzx eax,al |
| 116 movzx edx,dl |
| 117 pxor mm2,mm1 |
| 118 mov ecx,DWORD [eax*4+edi] |
| 119 movd mm1,DWORD [edx*4+edi] |
| 120 add bl,cl |
| 121 psllq mm1,24 |
| 122 mov edx,DWORD [ebx*4+edi] |
| 123 mov DWORD [ebx*4+edi],ecx |
| 124 mov DWORD [eax*4+edi],edx |
| 125 inc eax |
| 126 add edx,ecx |
| 127 movzx eax,al |
| 128 movzx edx,dl |
| 129 pxor mm2,mm1 |
| 130 mov ecx,DWORD [eax*4+edi] |
| 131 movd mm1,DWORD [edx*4+edi] |
| 132 add bl,cl |
| 133 psllq mm1,32 |
| 134 mov edx,DWORD [ebx*4+edi] |
| 135 mov DWORD [ebx*4+edi],ecx |
| 136 mov DWORD [eax*4+edi],edx |
| 137 inc eax |
| 138 add edx,ecx |
| 139 movzx eax,al |
| 140 movzx edx,dl |
| 141 pxor mm2,mm1 |
| 142 mov ecx,DWORD [eax*4+edi] |
| 143 movd mm1,DWORD [edx*4+edi] |
| 144 add bl,cl |
| 145 psllq mm1,40 |
| 146 mov edx,DWORD [ebx*4+edi] |
| 147 mov DWORD [ebx*4+edi],ecx |
| 148 mov DWORD [eax*4+edi],edx |
| 149 inc eax |
| 150 add edx,ecx |
| 151 movzx eax,al |
| 152 movzx edx,dl |
| 153 pxor mm2,mm1 |
| 154 mov ecx,DWORD [eax*4+edi] |
| 155 movd mm1,DWORD [edx*4+edi] |
| 156 add bl,cl |
| 157 psllq mm1,48 |
| 158 mov edx,DWORD [ebx*4+edi] |
| 159 mov DWORD [ebx*4+edi],ecx |
| 160 mov DWORD [eax*4+edi],edx |
| 161 inc eax |
| 162 add edx,ecx |
| 163 movzx eax,al |
| 164 movzx edx,dl |
| 165 pxor mm2,mm1 |
| 166 mov ecx,DWORD [eax*4+edi] |
| 167 movd mm1,DWORD [edx*4+edi] |
| 168 mov edx,ebx |
| 169 xor ebx,ebx |
| 170 mov bl,dl |
| 171 cmp esi,DWORD [edi-4] |
| 172 lea esi,[8+esi] |
| 173 jb NEAR L$005loop_mmx |
| 174 psllq mm1,56 |
| 175 pxor mm2,mm1 |
| 176 movq [esi*1+ebp-8],mm2 |
| 177 emms |
| 178 cmp esi,DWORD [24+esp] |
| 179 je NEAR L$006done |
| 180 jmp NEAR L$002loop1 |
| 181 align 16 |
| 182 L$003go4loop4: |
| 183 lea edx,[edx*1+esi-4] |
| 184 mov DWORD [28+esp],edx |
| 185 L$007loop4: |
| 186 add bl,cl |
| 187 mov edx,DWORD [ebx*4+edi] |
| 188 mov DWORD [ebx*4+edi],ecx |
| 189 mov DWORD [eax*4+edi],edx |
| 190 add edx,ecx |
| 191 inc al |
| 192 and edx,255 |
| 193 mov ecx,DWORD [eax*4+edi] |
| 194 mov ebp,DWORD [edx*4+edi] |
| 195 add bl,cl |
| 196 mov edx,DWORD [ebx*4+edi] |
| 197 mov DWORD [ebx*4+edi],ecx |
| 198 mov DWORD [eax*4+edi],edx |
| 199 add edx,ecx |
| 200 inc al |
| 201 and edx,255 |
| 202 ror ebp,8 |
| 203 mov ecx,DWORD [eax*4+edi] |
| 204 or ebp,DWORD [edx*4+edi] |
| 205 add bl,cl |
| 206 mov edx,DWORD [ebx*4+edi] |
| 207 mov DWORD [ebx*4+edi],ecx |
| 208 mov DWORD [eax*4+edi],edx |
| 209 add edx,ecx |
| 210 inc al |
| 211 and edx,255 |
| 212 ror ebp,8 |
| 213 mov ecx,DWORD [eax*4+edi] |
| 214 or ebp,DWORD [edx*4+edi] |
| 215 add bl,cl |
| 216 mov edx,DWORD [ebx*4+edi] |
| 217 mov DWORD [ebx*4+edi],ecx |
| 218 mov DWORD [eax*4+edi],edx |
| 219 add edx,ecx |
| 220 inc al |
| 221 and edx,255 |
| 222 ror ebp,8 |
| 223 mov ecx,DWORD [32+esp] |
| 224 or ebp,DWORD [edx*4+edi] |
| 225 ror ebp,8 |
| 226 xor ebp,DWORD [esi] |
| 227 cmp esi,DWORD [28+esp] |
| 228 mov DWORD [esi*1+ecx],ebp |
| 229 lea esi,[4+esi] |
| 230 mov ecx,DWORD [eax*4+edi] |
| 231 jb NEAR L$007loop4 |
| 232 cmp esi,DWORD [24+esp] |
| 233 je NEAR L$006done |
| 234 mov ebp,DWORD [32+esp] |
| 235 align 16 |
| 236 L$002loop1: |
| 237 add bl,cl |
| 238 mov edx,DWORD [ebx*4+edi] |
| 239 mov DWORD [ebx*4+edi],ecx |
| 240 mov DWORD [eax*4+edi],edx |
| 241 add edx,ecx |
| 242 inc al |
| 243 and edx,255 |
| 244 mov edx,DWORD [edx*4+edi] |
| 245 xor dl,BYTE [esi] |
| 246 lea esi,[1+esi] |
| 247 mov ecx,DWORD [eax*4+edi] |
| 248 cmp esi,DWORD [24+esp] |
| 249 mov BYTE [esi*1+ebp-1],dl |
| 250 jb NEAR L$002loop1 |
| 251 jmp NEAR L$006done |
| 252 align 16 |
| 253 L$001RC4_CHAR: |
| 254 movzx ecx,BYTE [eax*1+edi] |
| 255 L$008cloop1: |
| 256 add bl,cl |
| 257 movzx edx,BYTE [ebx*1+edi] |
| 258 mov BYTE [ebx*1+edi],cl |
| 259 mov BYTE [eax*1+edi],dl |
| 260 add dl,cl |
| 261 movzx edx,BYTE [edx*1+edi] |
| 262 add al,1 |
| 263 xor dl,BYTE [esi] |
| 264 lea esi,[1+esi] |
| 265 movzx ecx,BYTE [eax*1+edi] |
| 266 cmp esi,DWORD [24+esp] |
| 267 mov BYTE [esi*1+ebp-1],dl |
| 268 jb NEAR L$008cloop1 |
| 269 L$006done: |
| 270 dec al |
| 271 mov DWORD [edi-4],ebx |
| 272 mov BYTE [edi-8],al |
| 273 L$000abort: |
| 274 pop edi |
| 275 pop esi |
| 276 pop ebx |
| 277 pop ebp |
| 278 ret |
| 279 global _asm_RC4_set_key |
| 280 align 16 |
| 281 _asm_RC4_set_key: |
| 282 L$_asm_RC4_set_key_begin: |
| 283 push ebp |
| 284 push ebx |
| 285 push esi |
| 286 push edi |
| 287 mov edi,DWORD [20+esp] |
| 288 mov ebp,DWORD [24+esp] |
| 289 mov esi,DWORD [28+esp] |
| 290 lea edx,[_OPENSSL_ia32cap_P] |
| 291 lea edi,[8+edi] |
| 292 lea esi,[ebp*1+esi] |
| 293 neg ebp |
| 294 xor eax,eax |
| 295 mov DWORD [edi-4],ebp |
| 296 bt DWORD [edx],20 |
| 297 jc NEAR L$009c1stloop |
| 298 align 16 |
| 299 L$010w1stloop: |
| 300 mov DWORD [eax*4+edi],eax |
| 301 add al,1 |
| 302 jnc NEAR L$010w1stloop |
| 303 xor ecx,ecx |
| 304 xor edx,edx |
| 305 align 16 |
| 306 L$011w2ndloop: |
| 307 mov eax,DWORD [ecx*4+edi] |
| 308 add dl,BYTE [ebp*1+esi] |
| 309 add dl,al |
| 310 add ebp,1 |
| 311 mov ebx,DWORD [edx*4+edi] |
| 312 jnz NEAR L$012wnowrap |
| 313 mov ebp,DWORD [edi-4] |
| 314 L$012wnowrap: |
| 315 mov DWORD [edx*4+edi],eax |
| 316 mov DWORD [ecx*4+edi],ebx |
| 317 add cl,1 |
| 318 jnc NEAR L$011w2ndloop |
| 319 jmp NEAR L$013exit |
| 320 align 16 |
| 321 L$009c1stloop: |
| 322 mov BYTE [eax*1+edi],al |
| 323 add al,1 |
| 324 jnc NEAR L$009c1stloop |
| 325 xor ecx,ecx |
| 326 xor edx,edx |
| 327 xor ebx,ebx |
| 328 align 16 |
| 329 L$014c2ndloop: |
| 330 mov al,BYTE [ecx*1+edi] |
| 331 add dl,BYTE [ebp*1+esi] |
| 332 add dl,al |
| 333 add ebp,1 |
| 334 mov bl,BYTE [edx*1+edi] |
| 335 jnz NEAR L$015cnowrap |
| 336 mov ebp,DWORD [edi-4] |
| 337 L$015cnowrap: |
| 338 mov BYTE [edx*1+edi],al |
| 339 mov BYTE [ecx*1+edi],bl |
| 340 add cl,1 |
| 341 jnc NEAR L$014c2ndloop |
| 342 mov DWORD [256+edi],-1 |
| 343 L$013exit: |
| 344 xor eax,eax |
| 345 mov DWORD [edi-8],eax |
| 346 mov DWORD [edi-4],eax |
| 347 pop edi |
| 348 pop esi |
| 349 pop ebx |
| 350 pop ebp |
| 351 ret |
| 352 global _RC4_options |
| 353 align 16 |
| 354 _RC4_options: |
| 355 L$_RC4_options_begin: |
| 356 call L$016pic_point |
| 357 L$016pic_point: |
| 358 pop eax |
| 359 lea eax,[(L$017opts-L$016pic_point)+eax] |
| 360 lea edx,[_OPENSSL_ia32cap_P] |
| 361 mov edx,DWORD [edx] |
| 362 bt edx,20 |
| 363 jc NEAR L$0181xchar |
| 364 bt edx,26 |
| 365 jnc NEAR L$019ret |
| 366 add eax,25 |
| 367 ret |
| 368 L$0181xchar: |
| 369 add eax,12 |
| 370 L$019ret: |
| 371 ret |
| 372 align 64 |
| 373 L$017opts: |
| 374 db 114,99,52,40,52,120,44,105,110,116,41,0 |
| 375 db 114,99,52,40,49,120,44,99,104,97,114,41,0 |
| 376 db 114,99,52,40,56,120,44,109,109,120,41,0 |
| 377 db 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89 |
| 378 db 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 |
| 379 db 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 |
| 380 align 64 |
| 381 segment .bss |
| 382 common _OPENSSL_ia32cap_P 16 |
OLD | NEW |