1%ifidn __OUTPUT_FORMAT__,obj 2section code use32 class=code align=64 3%elifidn __OUTPUT_FORMAT__,win32 4$@feat.00 equ 1 5section .text code align=64 6%else 7section .text code 8%endif 9global _DES_SPtrans 10align 16 11__x86_DES_encrypt: 12 push ecx 13 ; Round 0 14 mov eax,DWORD [ecx] 15 xor ebx,ebx 16 mov edx,DWORD [4+ecx] 17 xor eax,esi 18 xor ecx,ecx 19 xor edx,esi 20 and eax,0xfcfcfcfc 21 and edx,0xcfcfcfcf 22 mov bl,al 23 mov cl,ah 24 ror edx,4 25 xor edi,DWORD [ebx*1+ebp] 26 mov bl,dl 27 xor edi,DWORD [0x200+ecx*1+ebp] 28 mov cl,dh 29 shr eax,16 30 xor edi,DWORD [0x100+ebx*1+ebp] 31 mov bl,ah 32 shr edx,16 33 xor edi,DWORD [0x300+ecx*1+ebp] 34 mov cl,dh 35 and eax,0xff 36 and edx,0xff 37 xor edi,DWORD [0x600+ebx*1+ebp] 38 xor edi,DWORD [0x700+ecx*1+ebp] 39 mov ecx,DWORD [esp] 40 xor edi,DWORD [0x400+eax*1+ebp] 41 xor edi,DWORD [0x500+edx*1+ebp] 42 ; Round 1 43 mov eax,DWORD [8+ecx] 44 xor ebx,ebx 45 mov edx,DWORD [12+ecx] 46 xor eax,edi 47 xor ecx,ecx 48 xor edx,edi 49 and eax,0xfcfcfcfc 50 and edx,0xcfcfcfcf 51 mov bl,al 52 mov cl,ah 53 ror edx,4 54 xor esi,DWORD [ebx*1+ebp] 55 mov bl,dl 56 xor esi,DWORD [0x200+ecx*1+ebp] 57 mov cl,dh 58 shr eax,16 59 xor esi,DWORD [0x100+ebx*1+ebp] 60 mov bl,ah 61 shr edx,16 62 xor esi,DWORD [0x300+ecx*1+ebp] 63 mov cl,dh 64 and eax,0xff 65 and edx,0xff 66 xor esi,DWORD [0x600+ebx*1+ebp] 67 xor esi,DWORD [0x700+ecx*1+ebp] 68 mov ecx,DWORD [esp] 69 xor esi,DWORD [0x400+eax*1+ebp] 70 xor esi,DWORD [0x500+edx*1+ebp] 71 ; Round 2 72 mov eax,DWORD [16+ecx] 73 xor ebx,ebx 74 mov edx,DWORD [20+ecx] 75 xor eax,esi 76 xor ecx,ecx 77 xor edx,esi 78 and eax,0xfcfcfcfc 79 and edx,0xcfcfcfcf 80 mov bl,al 81 mov cl,ah 82 ror edx,4 83 xor edi,DWORD [ebx*1+ebp] 84 mov bl,dl 85 xor edi,DWORD [0x200+ecx*1+ebp] 86 mov cl,dh 87 shr eax,16 88 xor edi,DWORD [0x100+ebx*1+ebp] 89 mov bl,ah 90 shr edx,16 91 xor edi,DWORD [0x300+ecx*1+ebp] 92 mov cl,dh 93 and eax,0xff 94 and edx,0xff 95 xor edi,DWORD [0x600+ebx*1+ebp] 96 xor edi,DWORD [0x700+ecx*1+ebp] 97 mov ecx,DWORD [esp] 98 xor edi,DWORD [0x400+eax*1+ebp] 99 xor edi,DWORD [0x500+edx*1+ebp] 100 ; Round 3 101 mov eax,DWORD [24+ecx] 102 xor ebx,ebx 103 mov edx,DWORD [28+ecx] 104 xor eax,edi 105 xor ecx,ecx 106 xor edx,edi 107 and eax,0xfcfcfcfc 108 and edx,0xcfcfcfcf 109 mov bl,al 110 mov cl,ah 111 ror edx,4 112 xor esi,DWORD [ebx*1+ebp] 113 mov bl,dl 114 xor esi,DWORD [0x200+ecx*1+ebp] 115 mov cl,dh 116 shr eax,16 117 xor esi,DWORD [0x100+ebx*1+ebp] 118 mov bl,ah 119 shr edx,16 120 xor esi,DWORD [0x300+ecx*1+ebp] 121 mov cl,dh 122 and eax,0xff 123 and edx,0xff 124 xor esi,DWORD [0x600+ebx*1+ebp] 125 xor esi,DWORD [0x700+ecx*1+ebp] 126 mov ecx,DWORD [esp] 127 xor esi,DWORD [0x400+eax*1+ebp] 128 xor esi,DWORD [0x500+edx*1+ebp] 129 ; Round 4 130 mov eax,DWORD [32+ecx] 131 xor ebx,ebx 132 mov edx,DWORD [36+ecx] 133 xor eax,esi 134 xor ecx,ecx 135 xor edx,esi 136 and eax,0xfcfcfcfc 137 and edx,0xcfcfcfcf 138 mov bl,al 139 mov cl,ah 140 ror edx,4 141 xor edi,DWORD [ebx*1+ebp] 142 mov bl,dl 143 xor edi,DWORD [0x200+ecx*1+ebp] 144 mov cl,dh 145 shr eax,16 146 xor edi,DWORD [0x100+ebx*1+ebp] 147 mov bl,ah 148 shr edx,16 149 xor edi,DWORD [0x300+ecx*1+ebp] 150 mov cl,dh 151 and eax,0xff 152 and edx,0xff 153 xor edi,DWORD [0x600+ebx*1+ebp] 154 xor edi,DWORD [0x700+ecx*1+ebp] 155 mov ecx,DWORD [esp] 156 xor edi,DWORD [0x400+eax*1+ebp] 157 xor edi,DWORD [0x500+edx*1+ebp] 158 ; Round 5 159 mov eax,DWORD [40+ecx] 160 xor ebx,ebx 161 mov edx,DWORD [44+ecx] 162 xor eax,edi 163 xor ecx,ecx 164 xor edx,edi 165 and eax,0xfcfcfcfc 166 and edx,0xcfcfcfcf 167 mov bl,al 168 mov cl,ah 169 ror edx,4 170 xor esi,DWORD [ebx*1+ebp] 171 mov bl,dl 172 xor esi,DWORD [0x200+ecx*1+ebp] 173 mov cl,dh 174 shr eax,16 175 xor esi,DWORD [0x100+ebx*1+ebp] 176 mov bl,ah 177 shr edx,16 178 xor esi,DWORD [0x300+ecx*1+ebp] 179 mov cl,dh 180 and eax,0xff 181 and edx,0xff 182 xor esi,DWORD [0x600+ebx*1+ebp] 183 xor esi,DWORD [0x700+ecx*1+ebp] 184 mov ecx,DWORD [esp] 185 xor esi,DWORD [0x400+eax*1+ebp] 186 xor esi,DWORD [0x500+edx*1+ebp] 187 ; Round 6 188 mov eax,DWORD [48+ecx] 189 xor ebx,ebx 190 mov edx,DWORD [52+ecx] 191 xor eax,esi 192 xor ecx,ecx 193 xor edx,esi 194 and eax,0xfcfcfcfc 195 and edx,0xcfcfcfcf 196 mov bl,al 197 mov cl,ah 198 ror edx,4 199 xor edi,DWORD [ebx*1+ebp] 200 mov bl,dl 201 xor edi,DWORD [0x200+ecx*1+ebp] 202 mov cl,dh 203 shr eax,16 204 xor edi,DWORD [0x100+ebx*1+ebp] 205 mov bl,ah 206 shr edx,16 207 xor edi,DWORD [0x300+ecx*1+ebp] 208 mov cl,dh 209 and eax,0xff 210 and edx,0xff 211 xor edi,DWORD [0x600+ebx*1+ebp] 212 xor edi,DWORD [0x700+ecx*1+ebp] 213 mov ecx,DWORD [esp] 214 xor edi,DWORD [0x400+eax*1+ebp] 215 xor edi,DWORD [0x500+edx*1+ebp] 216 ; Round 7 217 mov eax,DWORD [56+ecx] 218 xor ebx,ebx 219 mov edx,DWORD [60+ecx] 220 xor eax,edi 221 xor ecx,ecx 222 xor edx,edi 223 and eax,0xfcfcfcfc 224 and edx,0xcfcfcfcf 225 mov bl,al 226 mov cl,ah 227 ror edx,4 228 xor esi,DWORD [ebx*1+ebp] 229 mov bl,dl 230 xor esi,DWORD [0x200+ecx*1+ebp] 231 mov cl,dh 232 shr eax,16 233 xor esi,DWORD [0x100+ebx*1+ebp] 234 mov bl,ah 235 shr edx,16 236 xor esi,DWORD [0x300+ecx*1+ebp] 237 mov cl,dh 238 and eax,0xff 239 and edx,0xff 240 xor esi,DWORD [0x600+ebx*1+ebp] 241 xor esi,DWORD [0x700+ecx*1+ebp] 242 mov ecx,DWORD [esp] 243 xor esi,DWORD [0x400+eax*1+ebp] 244 xor esi,DWORD [0x500+edx*1+ebp] 245 ; Round 8 246 mov eax,DWORD [64+ecx] 247 xor ebx,ebx 248 mov edx,DWORD [68+ecx] 249 xor eax,esi 250 xor ecx,ecx 251 xor edx,esi 252 and eax,0xfcfcfcfc 253 and edx,0xcfcfcfcf 254 mov bl,al 255 mov cl,ah 256 ror edx,4 257 xor edi,DWORD [ebx*1+ebp] 258 mov bl,dl 259 xor edi,DWORD [0x200+ecx*1+ebp] 260 mov cl,dh 261 shr eax,16 262 xor edi,DWORD [0x100+ebx*1+ebp] 263 mov bl,ah 264 shr edx,16 265 xor edi,DWORD [0x300+ecx*1+ebp] 266 mov cl,dh 267 and eax,0xff 268 and edx,0xff 269 xor edi,DWORD [0x600+ebx*1+ebp] 270 xor edi,DWORD [0x700+ecx*1+ebp] 271 mov ecx,DWORD [esp] 272 xor edi,DWORD [0x400+eax*1+ebp] 273 xor edi,DWORD [0x500+edx*1+ebp] 274 ; Round 9 275 mov eax,DWORD [72+ecx] 276 xor ebx,ebx 277 mov edx,DWORD [76+ecx] 278 xor eax,edi 279 xor ecx,ecx 280 xor edx,edi 281 and eax,0xfcfcfcfc 282 and edx,0xcfcfcfcf 283 mov bl,al 284 mov cl,ah 285 ror edx,4 286 xor esi,DWORD [ebx*1+ebp] 287 mov bl,dl 288 xor esi,DWORD [0x200+ecx*1+ebp] 289 mov cl,dh 290 shr eax,16 291 xor esi,DWORD [0x100+ebx*1+ebp] 292 mov bl,ah 293 shr edx,16 294 xor esi,DWORD [0x300+ecx*1+ebp] 295 mov cl,dh 296 and eax,0xff 297 and edx,0xff 298 xor esi,DWORD [0x600+ebx*1+ebp] 299 xor esi,DWORD [0x700+ecx*1+ebp] 300 mov ecx,DWORD [esp] 301 xor esi,DWORD [0x400+eax*1+ebp] 302 xor esi,DWORD [0x500+edx*1+ebp] 303 ; Round 10 304 mov eax,DWORD [80+ecx] 305 xor ebx,ebx 306 mov edx,DWORD [84+ecx] 307 xor eax,esi 308 xor ecx,ecx 309 xor edx,esi 310 and eax,0xfcfcfcfc 311 and edx,0xcfcfcfcf 312 mov bl,al 313 mov cl,ah 314 ror edx,4 315 xor edi,DWORD [ebx*1+ebp] 316 mov bl,dl 317 xor edi,DWORD [0x200+ecx*1+ebp] 318 mov cl,dh 319 shr eax,16 320 xor edi,DWORD [0x100+ebx*1+ebp] 321 mov bl,ah 322 shr edx,16 323 xor edi,DWORD [0x300+ecx*1+ebp] 324 mov cl,dh 325 and eax,0xff 326 and edx,0xff 327 xor edi,DWORD [0x600+ebx*1+ebp] 328 xor edi,DWORD [0x700+ecx*1+ebp] 329 mov ecx,DWORD [esp] 330 xor edi,DWORD [0x400+eax*1+ebp] 331 xor edi,DWORD [0x500+edx*1+ebp] 332 ; Round 11 333 mov eax,DWORD [88+ecx] 334 xor ebx,ebx 335 mov edx,DWORD [92+ecx] 336 xor eax,edi 337 xor ecx,ecx 338 xor edx,edi 339 and eax,0xfcfcfcfc 340 and edx,0xcfcfcfcf 341 mov bl,al 342 mov cl,ah 343 ror edx,4 344 xor esi,DWORD [ebx*1+ebp] 345 mov bl,dl 346 xor esi,DWORD [0x200+ecx*1+ebp] 347 mov cl,dh 348 shr eax,16 349 xor esi,DWORD [0x100+ebx*1+ebp] 350 mov bl,ah 351 shr edx,16 352 xor esi,DWORD [0x300+ecx*1+ebp] 353 mov cl,dh 354 and eax,0xff 355 and edx,0xff 356 xor esi,DWORD [0x600+ebx*1+ebp] 357 xor esi,DWORD [0x700+ecx*1+ebp] 358 mov ecx,DWORD [esp] 359 xor esi,DWORD [0x400+eax*1+ebp] 360 xor esi,DWORD [0x500+edx*1+ebp] 361 ; Round 12 362 mov eax,DWORD [96+ecx] 363 xor ebx,ebx 364 mov edx,DWORD [100+ecx] 365 xor eax,esi 366 xor ecx,ecx 367 xor edx,esi 368 and eax,0xfcfcfcfc 369 and edx,0xcfcfcfcf 370 mov bl,al 371 mov cl,ah 372 ror edx,4 373 xor edi,DWORD [ebx*1+ebp] 374 mov bl,dl 375 xor edi,DWORD [0x200+ecx*1+ebp] 376 mov cl,dh 377 shr eax,16 378 xor edi,DWORD [0x100+ebx*1+ebp] 379 mov bl,ah 380 shr edx,16 381 xor edi,DWORD [0x300+ecx*1+ebp] 382 mov cl,dh 383 and eax,0xff 384 and edx,0xff 385 xor edi,DWORD [0x600+ebx*1+ebp] 386 xor edi,DWORD [0x700+ecx*1+ebp] 387 mov ecx,DWORD [esp] 388 xor edi,DWORD [0x400+eax*1+ebp] 389 xor edi,DWORD [0x500+edx*1+ebp] 390 ; Round 13 391 mov eax,DWORD [104+ecx] 392 xor ebx,ebx 393 mov edx,DWORD [108+ecx] 394 xor eax,edi 395 xor ecx,ecx 396 xor edx,edi 397 and eax,0xfcfcfcfc 398 and edx,0xcfcfcfcf 399 mov bl,al 400 mov cl,ah 401 ror edx,4 402 xor esi,DWORD [ebx*1+ebp] 403 mov bl,dl 404 xor esi,DWORD [0x200+ecx*1+ebp] 405 mov cl,dh 406 shr eax,16 407 xor esi,DWORD [0x100+ebx*1+ebp] 408 mov bl,ah 409 shr edx,16 410 xor esi,DWORD [0x300+ecx*1+ebp] 411 mov cl,dh 412 and eax,0xff 413 and edx,0xff 414 xor esi,DWORD [0x600+ebx*1+ebp] 415 xor esi,DWORD [0x700+ecx*1+ebp] 416 mov ecx,DWORD [esp] 417 xor esi,DWORD [0x400+eax*1+ebp] 418 xor esi,DWORD [0x500+edx*1+ebp] 419 ; Round 14 420 mov eax,DWORD [112+ecx] 421 xor ebx,ebx 422 mov edx,DWORD [116+ecx] 423 xor eax,esi 424 xor ecx,ecx 425 xor edx,esi 426 and eax,0xfcfcfcfc 427 and edx,0xcfcfcfcf 428 mov bl,al 429 mov cl,ah 430 ror edx,4 431 xor edi,DWORD [ebx*1+ebp] 432 mov bl,dl 433 xor edi,DWORD [0x200+ecx*1+ebp] 434 mov cl,dh 435 shr eax,16 436 xor edi,DWORD [0x100+ebx*1+ebp] 437 mov bl,ah 438 shr edx,16 439 xor edi,DWORD [0x300+ecx*1+ebp] 440 mov cl,dh 441 and eax,0xff 442 and edx,0xff 443 xor edi,DWORD [0x600+ebx*1+ebp] 444 xor edi,DWORD [0x700+ecx*1+ebp] 445 mov ecx,DWORD [esp] 446 xor edi,DWORD [0x400+eax*1+ebp] 447 xor edi,DWORD [0x500+edx*1+ebp] 448 ; Round 15 449 mov eax,DWORD [120+ecx] 450 xor ebx,ebx 451 mov edx,DWORD [124+ecx] 452 xor eax,edi 453 xor ecx,ecx 454 xor edx,edi 455 and eax,0xfcfcfcfc 456 and edx,0xcfcfcfcf 457 mov bl,al 458 mov cl,ah 459 ror edx,4 460 xor esi,DWORD [ebx*1+ebp] 461 mov bl,dl 462 xor esi,DWORD [0x200+ecx*1+ebp] 463 mov cl,dh 464 shr eax,16 465 xor esi,DWORD [0x100+ebx*1+ebp] 466 mov bl,ah 467 shr edx,16 468 xor esi,DWORD [0x300+ecx*1+ebp] 469 mov cl,dh 470 and eax,0xff 471 and edx,0xff 472 xor esi,DWORD [0x600+ebx*1+ebp] 473 xor esi,DWORD [0x700+ecx*1+ebp] 474 mov ecx,DWORD [esp] 475 xor esi,DWORD [0x400+eax*1+ebp] 476 xor esi,DWORD [0x500+edx*1+ebp] 477 add esp,4 478 ret 479align 16 480__x86_DES_decrypt: 481 push ecx 482 ; Round 15 483 mov eax,DWORD [120+ecx] 484 xor ebx,ebx 485 mov edx,DWORD [124+ecx] 486 xor eax,esi 487 xor ecx,ecx 488 xor edx,esi 489 and eax,0xfcfcfcfc 490 and edx,0xcfcfcfcf 491 mov bl,al 492 mov cl,ah 493 ror edx,4 494 xor edi,DWORD [ebx*1+ebp] 495 mov bl,dl 496 xor edi,DWORD [0x200+ecx*1+ebp] 497 mov cl,dh 498 shr eax,16 499 xor edi,DWORD [0x100+ebx*1+ebp] 500 mov bl,ah 501 shr edx,16 502 xor edi,DWORD [0x300+ecx*1+ebp] 503 mov cl,dh 504 and eax,0xff 505 and edx,0xff 506 xor edi,DWORD [0x600+ebx*1+ebp] 507 xor edi,DWORD [0x700+ecx*1+ebp] 508 mov ecx,DWORD [esp] 509 xor edi,DWORD [0x400+eax*1+ebp] 510 xor edi,DWORD [0x500+edx*1+ebp] 511 ; Round 14 512 mov eax,DWORD [112+ecx] 513 xor ebx,ebx 514 mov edx,DWORD [116+ecx] 515 xor eax,edi 516 xor ecx,ecx 517 xor edx,edi 518 and eax,0xfcfcfcfc 519 and edx,0xcfcfcfcf 520 mov bl,al 521 mov cl,ah 522 ror edx,4 523 xor esi,DWORD [ebx*1+ebp] 524 mov bl,dl 525 xor esi,DWORD [0x200+ecx*1+ebp] 526 mov cl,dh 527 shr eax,16 528 xor esi,DWORD [0x100+ebx*1+ebp] 529 mov bl,ah 530 shr edx,16 531 xor esi,DWORD [0x300+ecx*1+ebp] 532 mov cl,dh 533 and eax,0xff 534 and edx,0xff 535 xor esi,DWORD [0x600+ebx*1+ebp] 536 xor esi,DWORD [0x700+ecx*1+ebp] 537 mov ecx,DWORD [esp] 538 xor esi,DWORD [0x400+eax*1+ebp] 539 xor esi,DWORD [0x500+edx*1+ebp] 540 ; Round 13 541 mov eax,DWORD [104+ecx] 542 xor ebx,ebx 543 mov edx,DWORD [108+ecx] 544 xor eax,esi 545 xor ecx,ecx 546 xor edx,esi 547 and eax,0xfcfcfcfc 548 and edx,0xcfcfcfcf 549 mov bl,al 550 mov cl,ah 551 ror edx,4 552 xor edi,DWORD [ebx*1+ebp] 553 mov bl,dl 554 xor edi,DWORD [0x200+ecx*1+ebp] 555 mov cl,dh 556 shr eax,16 557 xor edi,DWORD [0x100+ebx*1+ebp] 558 mov bl,ah 559 shr edx,16 560 xor edi,DWORD [0x300+ecx*1+ebp] 561 mov cl,dh 562 and eax,0xff 563 and edx,0xff 564 xor edi,DWORD [0x600+ebx*1+ebp] 565 xor edi,DWORD [0x700+ecx*1+ebp] 566 mov ecx,DWORD [esp] 567 xor edi,DWORD [0x400+eax*1+ebp] 568 xor edi,DWORD [0x500+edx*1+ebp] 569 ; Round 12 570 mov eax,DWORD [96+ecx] 571 xor ebx,ebx 572 mov edx,DWORD [100+ecx] 573 xor eax,edi 574 xor ecx,ecx 575 xor edx,edi 576 and eax,0xfcfcfcfc 577 and edx,0xcfcfcfcf 578 mov bl,al 579 mov cl,ah 580 ror edx,4 581 xor esi,DWORD [ebx*1+ebp] 582 mov bl,dl 583 xor esi,DWORD [0x200+ecx*1+ebp] 584 mov cl,dh 585 shr eax,16 586 xor esi,DWORD [0x100+ebx*1+ebp] 587 mov bl,ah 588 shr edx,16 589 xor esi,DWORD [0x300+ecx*1+ebp] 590 mov cl,dh 591 and eax,0xff 592 and edx,0xff 593 xor esi,DWORD [0x600+ebx*1+ebp] 594 xor esi,DWORD [0x700+ecx*1+ebp] 595 mov ecx,DWORD [esp] 596 xor esi,DWORD [0x400+eax*1+ebp] 597 xor esi,DWORD [0x500+edx*1+ebp] 598 ; Round 11 599 mov eax,DWORD [88+ecx] 600 xor ebx,ebx 601 mov edx,DWORD [92+ecx] 602 xor eax,esi 603 xor ecx,ecx 604 xor edx,esi 605 and eax,0xfcfcfcfc 606 and edx,0xcfcfcfcf 607 mov bl,al 608 mov cl,ah 609 ror edx,4 610 xor edi,DWORD [ebx*1+ebp] 611 mov bl,dl 612 xor edi,DWORD [0x200+ecx*1+ebp] 613 mov cl,dh 614 shr eax,16 615 xor edi,DWORD [0x100+ebx*1+ebp] 616 mov bl,ah 617 shr edx,16 618 xor edi,DWORD [0x300+ecx*1+ebp] 619 mov cl,dh 620 and eax,0xff 621 and edx,0xff 622 xor edi,DWORD [0x600+ebx*1+ebp] 623 xor edi,DWORD [0x700+ecx*1+ebp] 624 mov ecx,DWORD [esp] 625 xor edi,DWORD [0x400+eax*1+ebp] 626 xor edi,DWORD [0x500+edx*1+ebp] 627 ; Round 10 628 mov eax,DWORD [80+ecx] 629 xor ebx,ebx 630 mov edx,DWORD [84+ecx] 631 xor eax,edi 632 xor ecx,ecx 633 xor edx,edi 634 and eax,0xfcfcfcfc 635 and edx,0xcfcfcfcf 636 mov bl,al 637 mov cl,ah 638 ror edx,4 639 xor esi,DWORD [ebx*1+ebp] 640 mov bl,dl 641 xor esi,DWORD [0x200+ecx*1+ebp] 642 mov cl,dh 643 shr eax,16 644 xor esi,DWORD [0x100+ebx*1+ebp] 645 mov bl,ah 646 shr edx,16 647 xor esi,DWORD [0x300+ecx*1+ebp] 648 mov cl,dh 649 and eax,0xff 650 and edx,0xff 651 xor esi,DWORD [0x600+ebx*1+ebp] 652 xor esi,DWORD [0x700+ecx*1+ebp] 653 mov ecx,DWORD [esp] 654 xor esi,DWORD [0x400+eax*1+ebp] 655 xor esi,DWORD [0x500+edx*1+ebp] 656 ; Round 9 657 mov eax,DWORD [72+ecx] 658 xor ebx,ebx 659 mov edx,DWORD [76+ecx] 660 xor eax,esi 661 xor ecx,ecx 662 xor edx,esi 663 and eax,0xfcfcfcfc 664 and edx,0xcfcfcfcf 665 mov bl,al 666 mov cl,ah 667 ror edx,4 668 xor edi,DWORD [ebx*1+ebp] 669 mov bl,dl 670 xor edi,DWORD [0x200+ecx*1+ebp] 671 mov cl,dh 672 shr eax,16 673 xor edi,DWORD [0x100+ebx*1+ebp] 674 mov bl,ah 675 shr edx,16 676 xor edi,DWORD [0x300+ecx*1+ebp] 677 mov cl,dh 678 and eax,0xff 679 and edx,0xff 680 xor edi,DWORD [0x600+ebx*1+ebp] 681 xor edi,DWORD [0x700+ecx*1+ebp] 682 mov ecx,DWORD [esp] 683 xor edi,DWORD [0x400+eax*1+ebp] 684 xor edi,DWORD [0x500+edx*1+ebp] 685 ; Round 8 686 mov eax,DWORD [64+ecx] 687 xor ebx,ebx 688 mov edx,DWORD [68+ecx] 689 xor eax,edi 690 xor ecx,ecx 691 xor edx,edi 692 and eax,0xfcfcfcfc 693 and edx,0xcfcfcfcf 694 mov bl,al 695 mov cl,ah 696 ror edx,4 697 xor esi,DWORD [ebx*1+ebp] 698 mov bl,dl 699 xor esi,DWORD [0x200+ecx*1+ebp] 700 mov cl,dh 701 shr eax,16 702 xor esi,DWORD [0x100+ebx*1+ebp] 703 mov bl,ah 704 shr edx,16 705 xor esi,DWORD [0x300+ecx*1+ebp] 706 mov cl,dh 707 and eax,0xff 708 and edx,0xff 709 xor esi,DWORD [0x600+ebx*1+ebp] 710 xor esi,DWORD [0x700+ecx*1+ebp] 711 mov ecx,DWORD [esp] 712 xor esi,DWORD [0x400+eax*1+ebp] 713 xor esi,DWORD [0x500+edx*1+ebp] 714 ; Round 7 715 mov eax,DWORD [56+ecx] 716 xor ebx,ebx 717 mov edx,DWORD [60+ecx] 718 xor eax,esi 719 xor ecx,ecx 720 xor edx,esi 721 and eax,0xfcfcfcfc 722 and edx,0xcfcfcfcf 723 mov bl,al 724 mov cl,ah 725 ror edx,4 726 xor edi,DWORD [ebx*1+ebp] 727 mov bl,dl 728 xor edi,DWORD [0x200+ecx*1+ebp] 729 mov cl,dh 730 shr eax,16 731 xor edi,DWORD [0x100+ebx*1+ebp] 732 mov bl,ah 733 shr edx,16 734 xor edi,DWORD [0x300+ecx*1+ebp] 735 mov cl,dh 736 and eax,0xff 737 and edx,0xff 738 xor edi,DWORD [0x600+ebx*1+ebp] 739 xor edi,DWORD [0x700+ecx*1+ebp] 740 mov ecx,DWORD [esp] 741 xor edi,DWORD [0x400+eax*1+ebp] 742 xor edi,DWORD [0x500+edx*1+ebp] 743 ; Round 6 744 mov eax,DWORD [48+ecx] 745 xor ebx,ebx 746 mov edx,DWORD [52+ecx] 747 xor eax,edi 748 xor ecx,ecx 749 xor edx,edi 750 and eax,0xfcfcfcfc 751 and edx,0xcfcfcfcf 752 mov bl,al 753 mov cl,ah 754 ror edx,4 755 xor esi,DWORD [ebx*1+ebp] 756 mov bl,dl 757 xor esi,DWORD [0x200+ecx*1+ebp] 758 mov cl,dh 759 shr eax,16 760 xor esi,DWORD [0x100+ebx*1+ebp] 761 mov bl,ah 762 shr edx,16 763 xor esi,DWORD [0x300+ecx*1+ebp] 764 mov cl,dh 765 and eax,0xff 766 and edx,0xff 767 xor esi,DWORD [0x600+ebx*1+ebp] 768 xor esi,DWORD [0x700+ecx*1+ebp] 769 mov ecx,DWORD [esp] 770 xor esi,DWORD [0x400+eax*1+ebp] 771 xor esi,DWORD [0x500+edx*1+ebp] 772 ; Round 5 773 mov eax,DWORD [40+ecx] 774 xor ebx,ebx 775 mov edx,DWORD [44+ecx] 776 xor eax,esi 777 xor ecx,ecx 778 xor edx,esi 779 and eax,0xfcfcfcfc 780 and edx,0xcfcfcfcf 781 mov bl,al 782 mov cl,ah 783 ror edx,4 784 xor edi,DWORD [ebx*1+ebp] 785 mov bl,dl 786 xor edi,DWORD [0x200+ecx*1+ebp] 787 mov cl,dh 788 shr eax,16 789 xor edi,DWORD [0x100+ebx*1+ebp] 790 mov bl,ah 791 shr edx,16 792 xor edi,DWORD [0x300+ecx*1+ebp] 793 mov cl,dh 794 and eax,0xff 795 and edx,0xff 796 xor edi,DWORD [0x600+ebx*1+ebp] 797 xor edi,DWORD [0x700+ecx*1+ebp] 798 mov ecx,DWORD [esp] 799 xor edi,DWORD [0x400+eax*1+ebp] 800 xor edi,DWORD [0x500+edx*1+ebp] 801 ; Round 4 802 mov eax,DWORD [32+ecx] 803 xor ebx,ebx 804 mov edx,DWORD [36+ecx] 805 xor eax,edi 806 xor ecx,ecx 807 xor edx,edi 808 and eax,0xfcfcfcfc 809 and edx,0xcfcfcfcf 810 mov bl,al 811 mov cl,ah 812 ror edx,4 813 xor esi,DWORD [ebx*1+ebp] 814 mov bl,dl 815 xor esi,DWORD [0x200+ecx*1+ebp] 816 mov cl,dh 817 shr eax,16 818 xor esi,DWORD [0x100+ebx*1+ebp] 819 mov bl,ah 820 shr edx,16 821 xor esi,DWORD [0x300+ecx*1+ebp] 822 mov cl,dh 823 and eax,0xff 824 and edx,0xff 825 xor esi,DWORD [0x600+ebx*1+ebp] 826 xor esi,DWORD [0x700+ecx*1+ebp] 827 mov ecx,DWORD [esp] 828 xor esi,DWORD [0x400+eax*1+ebp] 829 xor esi,DWORD [0x500+edx*1+ebp] 830 ; Round 3 831 mov eax,DWORD [24+ecx] 832 xor ebx,ebx 833 mov edx,DWORD [28+ecx] 834 xor eax,esi 835 xor ecx,ecx 836 xor edx,esi 837 and eax,0xfcfcfcfc 838 and edx,0xcfcfcfcf 839 mov bl,al 840 mov cl,ah 841 ror edx,4 842 xor edi,DWORD [ebx*1+ebp] 843 mov bl,dl 844 xor edi,DWORD [0x200+ecx*1+ebp] 845 mov cl,dh 846 shr eax,16 847 xor edi,DWORD [0x100+ebx*1+ebp] 848 mov bl,ah 849 shr edx,16 850 xor edi,DWORD [0x300+ecx*1+ebp] 851 mov cl,dh 852 and eax,0xff 853 and edx,0xff 854 xor edi,DWORD [0x600+ebx*1+ebp] 855 xor edi,DWORD [0x700+ecx*1+ebp] 856 mov ecx,DWORD [esp] 857 xor edi,DWORD [0x400+eax*1+ebp] 858 xor edi,DWORD [0x500+edx*1+ebp] 859 ; Round 2 860 mov eax,DWORD [16+ecx] 861 xor ebx,ebx 862 mov edx,DWORD [20+ecx] 863 xor eax,edi 864 xor ecx,ecx 865 xor edx,edi 866 and eax,0xfcfcfcfc 867 and edx,0xcfcfcfcf 868 mov bl,al 869 mov cl,ah 870 ror edx,4 871 xor esi,DWORD [ebx*1+ebp] 872 mov bl,dl 873 xor esi,DWORD [0x200+ecx*1+ebp] 874 mov cl,dh 875 shr eax,16 876 xor esi,DWORD [0x100+ebx*1+ebp] 877 mov bl,ah 878 shr edx,16 879 xor esi,DWORD [0x300+ecx*1+ebp] 880 mov cl,dh 881 and eax,0xff 882 and edx,0xff 883 xor esi,DWORD [0x600+ebx*1+ebp] 884 xor esi,DWORD [0x700+ecx*1+ebp] 885 mov ecx,DWORD [esp] 886 xor esi,DWORD [0x400+eax*1+ebp] 887 xor esi,DWORD [0x500+edx*1+ebp] 888 ; Round 1 889 mov eax,DWORD [8+ecx] 890 xor ebx,ebx 891 mov edx,DWORD [12+ecx] 892 xor eax,esi 893 xor ecx,ecx 894 xor edx,esi 895 and eax,0xfcfcfcfc 896 and edx,0xcfcfcfcf 897 mov bl,al 898 mov cl,ah 899 ror edx,4 900 xor edi,DWORD [ebx*1+ebp] 901 mov bl,dl 902 xor edi,DWORD [0x200+ecx*1+ebp] 903 mov cl,dh 904 shr eax,16 905 xor edi,DWORD [0x100+ebx*1+ebp] 906 mov bl,ah 907 shr edx,16 908 xor edi,DWORD [0x300+ecx*1+ebp] 909 mov cl,dh 910 and eax,0xff 911 and edx,0xff 912 xor edi,DWORD [0x600+ebx*1+ebp] 913 xor edi,DWORD [0x700+ecx*1+ebp] 914 mov ecx,DWORD [esp] 915 xor edi,DWORD [0x400+eax*1+ebp] 916 xor edi,DWORD [0x500+edx*1+ebp] 917 ; Round 0 918 mov eax,DWORD [ecx] 919 xor ebx,ebx 920 mov edx,DWORD [4+ecx] 921 xor eax,edi 922 xor ecx,ecx 923 xor edx,edi 924 and eax,0xfcfcfcfc 925 and edx,0xcfcfcfcf 926 mov bl,al 927 mov cl,ah 928 ror edx,4 929 xor esi,DWORD [ebx*1+ebp] 930 mov bl,dl 931 xor esi,DWORD [0x200+ecx*1+ebp] 932 mov cl,dh 933 shr eax,16 934 xor esi,DWORD [0x100+ebx*1+ebp] 935 mov bl,ah 936 shr edx,16 937 xor esi,DWORD [0x300+ecx*1+ebp] 938 mov cl,dh 939 and eax,0xff 940 and edx,0xff 941 xor esi,DWORD [0x600+ebx*1+ebp] 942 xor esi,DWORD [0x700+ecx*1+ebp] 943 mov ecx,DWORD [esp] 944 xor esi,DWORD [0x400+eax*1+ebp] 945 xor esi,DWORD [0x500+edx*1+ebp] 946 add esp,4 947 ret 948global _DES_encrypt1 949align 16 950_DES_encrypt1: 951L$_DES_encrypt1_begin: 952 push esi 953 push edi 954 ; 955 ; Load the 2 words 956 mov esi,DWORD [12+esp] 957 xor ecx,ecx 958 push ebx 959 push ebp 960 mov eax,DWORD [esi] 961 mov ebx,DWORD [28+esp] 962 mov edi,DWORD [4+esi] 963 ; 964 ; IP 965 rol eax,4 966 mov esi,eax 967 xor eax,edi 968 and eax,0xf0f0f0f0 969 xor esi,eax 970 xor edi,eax 971 ; 972 rol edi,20 973 mov eax,edi 974 xor edi,esi 975 and edi,0xfff0000f 976 xor eax,edi 977 xor esi,edi 978 ; 979 rol eax,14 980 mov edi,eax 981 xor eax,esi 982 and eax,0x33333333 983 xor edi,eax 984 xor esi,eax 985 ; 986 rol esi,22 987 mov eax,esi 988 xor esi,edi 989 and esi,0x03fc03fc 990 xor eax,esi 991 xor edi,esi 992 ; 993 rol eax,9 994 mov esi,eax 995 xor eax,edi 996 and eax,0xaaaaaaaa 997 xor esi,eax 998 xor edi,eax 999 ; 1000 rol edi,1 1001 call L$000pic_point 1002L$000pic_point: 1003 pop ebp 1004 lea ebp,[(L$des_sptrans-L$000pic_point)+ebp] 1005 mov ecx,DWORD [24+esp] 1006 cmp ebx,0 1007 je NEAR L$001decrypt 1008 call __x86_DES_encrypt 1009 jmp NEAR L$002done 1010L$001decrypt: 1011 call __x86_DES_decrypt 1012L$002done: 1013 ; 1014 ; FP 1015 mov edx,DWORD [20+esp] 1016 ror esi,1 1017 mov eax,edi 1018 xor edi,esi 1019 and edi,0xaaaaaaaa 1020 xor eax,edi 1021 xor esi,edi 1022 ; 1023 rol eax,23 1024 mov edi,eax 1025 xor eax,esi 1026 and eax,0x03fc03fc 1027 xor edi,eax 1028 xor esi,eax 1029 ; 1030 rol edi,10 1031 mov eax,edi 1032 xor edi,esi 1033 and edi,0x33333333 1034 xor eax,edi 1035 xor esi,edi 1036 ; 1037 rol esi,18 1038 mov edi,esi 1039 xor esi,eax 1040 and esi,0xfff0000f 1041 xor edi,esi 1042 xor eax,esi 1043 ; 1044 rol edi,12 1045 mov esi,edi 1046 xor edi,eax 1047 and edi,0xf0f0f0f0 1048 xor esi,edi 1049 xor eax,edi 1050 ; 1051 ror eax,4 1052 mov DWORD [edx],eax 1053 mov DWORD [4+edx],esi 1054 pop ebp 1055 pop ebx 1056 pop edi 1057 pop esi 1058 ret 1059global _DES_encrypt2 1060align 16 1061_DES_encrypt2: 1062L$_DES_encrypt2_begin: 1063 push esi 1064 push edi 1065 ; 1066 ; Load the 2 words 1067 mov eax,DWORD [12+esp] 1068 xor ecx,ecx 1069 push ebx 1070 push ebp 1071 mov esi,DWORD [eax] 1072 mov ebx,DWORD [28+esp] 1073 rol esi,3 1074 mov edi,DWORD [4+eax] 1075 rol edi,3 1076 call L$003pic_point 1077L$003pic_point: 1078 pop ebp 1079 lea ebp,[(L$des_sptrans-L$003pic_point)+ebp] 1080 mov ecx,DWORD [24+esp] 1081 cmp ebx,0 1082 je NEAR L$004decrypt 1083 call __x86_DES_encrypt 1084 jmp NEAR L$005done 1085L$004decrypt: 1086 call __x86_DES_decrypt 1087L$005done: 1088 ; 1089 ; Fixup 1090 ror edi,3 1091 mov eax,DWORD [20+esp] 1092 ror esi,3 1093 mov DWORD [eax],edi 1094 mov DWORD [4+eax],esi 1095 pop ebp 1096 pop ebx 1097 pop edi 1098 pop esi 1099 ret 1100global _DES_encrypt3 1101align 16 1102_DES_encrypt3: 1103L$_DES_encrypt3_begin: 1104 push ebx 1105 mov ebx,DWORD [8+esp] 1106 push ebp 1107 push esi 1108 push edi 1109 ; 1110 ; Load the data words 1111 mov edi,DWORD [ebx] 1112 mov esi,DWORD [4+ebx] 1113 sub esp,12 1114 ; 1115 ; IP 1116 rol edi,4 1117 mov edx,edi 1118 xor edi,esi 1119 and edi,0xf0f0f0f0 1120 xor edx,edi 1121 xor esi,edi 1122 ; 1123 rol esi,20 1124 mov edi,esi 1125 xor esi,edx 1126 and esi,0xfff0000f 1127 xor edi,esi 1128 xor edx,esi 1129 ; 1130 rol edi,14 1131 mov esi,edi 1132 xor edi,edx 1133 and edi,0x33333333 1134 xor esi,edi 1135 xor edx,edi 1136 ; 1137 rol edx,22 1138 mov edi,edx 1139 xor edx,esi 1140 and edx,0x03fc03fc 1141 xor edi,edx 1142 xor esi,edx 1143 ; 1144 rol edi,9 1145 mov edx,edi 1146 xor edi,esi 1147 and edi,0xaaaaaaaa 1148 xor edx,edi 1149 xor esi,edi 1150 ; 1151 ror edx,3 1152 ror esi,2 1153 mov DWORD [4+ebx],esi 1154 mov eax,DWORD [36+esp] 1155 mov DWORD [ebx],edx 1156 mov edi,DWORD [40+esp] 1157 mov esi,DWORD [44+esp] 1158 mov DWORD [8+esp],DWORD 1 1159 mov DWORD [4+esp],eax 1160 mov DWORD [esp],ebx 1161 call L$_DES_encrypt2_begin 1162 mov DWORD [8+esp],DWORD 0 1163 mov DWORD [4+esp],edi 1164 mov DWORD [esp],ebx 1165 call L$_DES_encrypt2_begin 1166 mov DWORD [8+esp],DWORD 1 1167 mov DWORD [4+esp],esi 1168 mov DWORD [esp],ebx 1169 call L$_DES_encrypt2_begin 1170 add esp,12 1171 mov edi,DWORD [ebx] 1172 mov esi,DWORD [4+ebx] 1173 ; 1174 ; FP 1175 rol esi,2 1176 rol edi,3 1177 mov eax,edi 1178 xor edi,esi 1179 and edi,0xaaaaaaaa 1180 xor eax,edi 1181 xor esi,edi 1182 ; 1183 rol eax,23 1184 mov edi,eax 1185 xor eax,esi 1186 and eax,0x03fc03fc 1187 xor edi,eax 1188 xor esi,eax 1189 ; 1190 rol edi,10 1191 mov eax,edi 1192 xor edi,esi 1193 and edi,0x33333333 1194 xor eax,edi 1195 xor esi,edi 1196 ; 1197 rol esi,18 1198 mov edi,esi 1199 xor esi,eax 1200 and esi,0xfff0000f 1201 xor edi,esi 1202 xor eax,esi 1203 ; 1204 rol edi,12 1205 mov esi,edi 1206 xor edi,eax 1207 and edi,0xf0f0f0f0 1208 xor esi,edi 1209 xor eax,edi 1210 ; 1211 ror eax,4 1212 mov DWORD [ebx],eax 1213 mov DWORD [4+ebx],esi 1214 pop edi 1215 pop esi 1216 pop ebp 1217 pop ebx 1218 ret 1219global _DES_decrypt3 1220align 16 1221_DES_decrypt3: 1222L$_DES_decrypt3_begin: 1223 push ebx 1224 mov ebx,DWORD [8+esp] 1225 push ebp 1226 push esi 1227 push edi 1228 ; 1229 ; Load the data words 1230 mov edi,DWORD [ebx] 1231 mov esi,DWORD [4+ebx] 1232 sub esp,12 1233 ; 1234 ; IP 1235 rol edi,4 1236 mov edx,edi 1237 xor edi,esi 1238 and edi,0xf0f0f0f0 1239 xor edx,edi 1240 xor esi,edi 1241 ; 1242 rol esi,20 1243 mov edi,esi 1244 xor esi,edx 1245 and esi,0xfff0000f 1246 xor edi,esi 1247 xor edx,esi 1248 ; 1249 rol edi,14 1250 mov esi,edi 1251 xor edi,edx 1252 and edi,0x33333333 1253 xor esi,edi 1254 xor edx,edi 1255 ; 1256 rol edx,22 1257 mov edi,edx 1258 xor edx,esi 1259 and edx,0x03fc03fc 1260 xor edi,edx 1261 xor esi,edx 1262 ; 1263 rol edi,9 1264 mov edx,edi 1265 xor edi,esi 1266 and edi,0xaaaaaaaa 1267 xor edx,edi 1268 xor esi,edi 1269 ; 1270 ror edx,3 1271 ror esi,2 1272 mov DWORD [4+ebx],esi 1273 mov esi,DWORD [36+esp] 1274 mov DWORD [ebx],edx 1275 mov edi,DWORD [40+esp] 1276 mov eax,DWORD [44+esp] 1277 mov DWORD [8+esp],DWORD 0 1278 mov DWORD [4+esp],eax 1279 mov DWORD [esp],ebx 1280 call L$_DES_encrypt2_begin 1281 mov DWORD [8+esp],DWORD 1 1282 mov DWORD [4+esp],edi 1283 mov DWORD [esp],ebx 1284 call L$_DES_encrypt2_begin 1285 mov DWORD [8+esp],DWORD 0 1286 mov DWORD [4+esp],esi 1287 mov DWORD [esp],ebx 1288 call L$_DES_encrypt2_begin 1289 add esp,12 1290 mov edi,DWORD [ebx] 1291 mov esi,DWORD [4+ebx] 1292 ; 1293 ; FP 1294 rol esi,2 1295 rol edi,3 1296 mov eax,edi 1297 xor edi,esi 1298 and edi,0xaaaaaaaa 1299 xor eax,edi 1300 xor esi,edi 1301 ; 1302 rol eax,23 1303 mov edi,eax 1304 xor eax,esi 1305 and eax,0x03fc03fc 1306 xor edi,eax 1307 xor esi,eax 1308 ; 1309 rol edi,10 1310 mov eax,edi 1311 xor edi,esi 1312 and edi,0x33333333 1313 xor eax,edi 1314 xor esi,edi 1315 ; 1316 rol esi,18 1317 mov edi,esi 1318 xor esi,eax 1319 and esi,0xfff0000f 1320 xor edi,esi 1321 xor eax,esi 1322 ; 1323 rol edi,12 1324 mov esi,edi 1325 xor edi,eax 1326 and edi,0xf0f0f0f0 1327 xor esi,edi 1328 xor eax,edi 1329 ; 1330 ror eax,4 1331 mov DWORD [ebx],eax 1332 mov DWORD [4+ebx],esi 1333 pop edi 1334 pop esi 1335 pop ebp 1336 pop ebx 1337 ret 1338global _DES_ncbc_encrypt 1339align 16 1340_DES_ncbc_encrypt: 1341L$_DES_ncbc_encrypt_begin: 1342 ; 1343 push ebp 1344 push ebx 1345 push esi 1346 push edi 1347 mov ebp,DWORD [28+esp] 1348 ; getting iv ptr from parameter 4 1349 mov ebx,DWORD [36+esp] 1350 mov esi,DWORD [ebx] 1351 mov edi,DWORD [4+ebx] 1352 push edi 1353 push esi 1354 push edi 1355 push esi 1356 mov ebx,esp 1357 mov esi,DWORD [36+esp] 1358 mov edi,DWORD [40+esp] 1359 ; getting encrypt flag from parameter 5 1360 mov ecx,DWORD [56+esp] 1361 ; get and push parameter 5 1362 push ecx 1363 ; get and push parameter 3 1364 mov eax,DWORD [52+esp] 1365 push eax 1366 push ebx 1367 cmp ecx,0 1368 jz NEAR L$006decrypt 1369 and ebp,4294967288 1370 mov eax,DWORD [12+esp] 1371 mov ebx,DWORD [16+esp] 1372 jz NEAR L$007encrypt_finish 1373L$008encrypt_loop: 1374 mov ecx,DWORD [esi] 1375 mov edx,DWORD [4+esi] 1376 xor eax,ecx 1377 xor ebx,edx 1378 mov DWORD [12+esp],eax 1379 mov DWORD [16+esp],ebx 1380 call L$_DES_encrypt1_begin 1381 mov eax,DWORD [12+esp] 1382 mov ebx,DWORD [16+esp] 1383 mov DWORD [edi],eax 1384 mov DWORD [4+edi],ebx 1385 add esi,8 1386 add edi,8 1387 sub ebp,8 1388 jnz NEAR L$008encrypt_loop 1389L$007encrypt_finish: 1390 mov ebp,DWORD [56+esp] 1391 and ebp,7 1392 jz NEAR L$009finish 1393 call L$010PIC_point 1394L$010PIC_point: 1395 pop edx 1396 lea ecx,[(L$011cbc_enc_jmp_table-L$010PIC_point)+edx] 1397 mov ebp,DWORD [ebp*4+ecx] 1398 add ebp,edx 1399 xor ecx,ecx 1400 xor edx,edx 1401 jmp ebp 1402L$012ej7: 1403 %ifdef __CET__ 1404 1405db 243,15,30,251 1406 %endif 1407 1408 mov dh,BYTE [6+esi] 1409 shl edx,8 1410L$013ej6: 1411 %ifdef __CET__ 1412 1413db 243,15,30,251 1414 %endif 1415 1416 mov dh,BYTE [5+esi] 1417L$014ej5: 1418 %ifdef __CET__ 1419 1420db 243,15,30,251 1421 %endif 1422 1423 mov dl,BYTE [4+esi] 1424L$015ej4: 1425 %ifdef __CET__ 1426 1427db 243,15,30,251 1428 %endif 1429 1430 mov ecx,DWORD [esi] 1431 jmp NEAR L$016ejend 1432L$017ej3: 1433 %ifdef __CET__ 1434 1435db 243,15,30,251 1436 %endif 1437 1438 mov ch,BYTE [2+esi] 1439 shl ecx,8 1440L$018ej2: 1441 %ifdef __CET__ 1442 1443db 243,15,30,251 1444 %endif 1445 1446 mov ch,BYTE [1+esi] 1447L$019ej1: 1448 %ifdef __CET__ 1449 1450db 243,15,30,251 1451 %endif 1452 1453 mov cl,BYTE [esi] 1454L$016ejend: 1455 xor eax,ecx 1456 xor ebx,edx 1457 mov DWORD [12+esp],eax 1458 mov DWORD [16+esp],ebx 1459 call L$_DES_encrypt1_begin 1460 mov eax,DWORD [12+esp] 1461 mov ebx,DWORD [16+esp] 1462 mov DWORD [edi],eax 1463 mov DWORD [4+edi],ebx 1464 jmp NEAR L$009finish 1465L$006decrypt: 1466 and ebp,4294967288 1467 mov eax,DWORD [20+esp] 1468 mov ebx,DWORD [24+esp] 1469 jz NEAR L$020decrypt_finish 1470L$021decrypt_loop: 1471 mov eax,DWORD [esi] 1472 mov ebx,DWORD [4+esi] 1473 mov DWORD [12+esp],eax 1474 mov DWORD [16+esp],ebx 1475 call L$_DES_encrypt1_begin 1476 mov eax,DWORD [12+esp] 1477 mov ebx,DWORD [16+esp] 1478 mov ecx,DWORD [20+esp] 1479 mov edx,DWORD [24+esp] 1480 xor ecx,eax 1481 xor edx,ebx 1482 mov eax,DWORD [esi] 1483 mov ebx,DWORD [4+esi] 1484 mov DWORD [edi],ecx 1485 mov DWORD [4+edi],edx 1486 mov DWORD [20+esp],eax 1487 mov DWORD [24+esp],ebx 1488 add esi,8 1489 add edi,8 1490 sub ebp,8 1491 jnz NEAR L$021decrypt_loop 1492L$020decrypt_finish: 1493 mov ebp,DWORD [56+esp] 1494 and ebp,7 1495 jz NEAR L$009finish 1496 mov eax,DWORD [esi] 1497 mov ebx,DWORD [4+esi] 1498 mov DWORD [12+esp],eax 1499 mov DWORD [16+esp],ebx 1500 call L$_DES_encrypt1_begin 1501 mov eax,DWORD [12+esp] 1502 mov ebx,DWORD [16+esp] 1503 mov ecx,DWORD [20+esp] 1504 mov edx,DWORD [24+esp] 1505 xor ecx,eax 1506 xor edx,ebx 1507 mov eax,DWORD [esi] 1508 mov ebx,DWORD [4+esi] 1509L$022dj7: 1510 ror edx,16 1511 mov BYTE [6+edi],dl 1512 shr edx,16 1513L$023dj6: 1514 mov BYTE [5+edi],dh 1515L$024dj5: 1516 mov BYTE [4+edi],dl 1517L$025dj4: 1518 mov DWORD [edi],ecx 1519 jmp NEAR L$026djend 1520L$027dj3: 1521 ror ecx,16 1522 mov BYTE [2+edi],cl 1523 shl ecx,16 1524L$028dj2: 1525 mov BYTE [1+esi],ch 1526L$029dj1: 1527 mov BYTE [esi],cl 1528L$026djend: 1529 jmp NEAR L$009finish 1530L$009finish: 1531 mov ecx,DWORD [64+esp] 1532 add esp,28 1533 mov DWORD [ecx],eax 1534 mov DWORD [4+ecx],ebx 1535 pop edi 1536 pop esi 1537 pop ebx 1538 pop ebp 1539 ret 1540align 64 1541L$011cbc_enc_jmp_table: 1542dd 0 1543dd L$019ej1-L$010PIC_point 1544dd L$018ej2-L$010PIC_point 1545dd L$017ej3-L$010PIC_point 1546dd L$015ej4-L$010PIC_point 1547dd L$014ej5-L$010PIC_point 1548dd L$013ej6-L$010PIC_point 1549dd L$012ej7-L$010PIC_point 1550align 64 1551global _DES_ede3_cbc_encrypt 1552align 16 1553_DES_ede3_cbc_encrypt: 1554L$_DES_ede3_cbc_encrypt_begin: 1555 ; 1556 push ebp 1557 push ebx 1558 push esi 1559 push edi 1560 mov ebp,DWORD [28+esp] 1561 ; getting iv ptr from parameter 6 1562 mov ebx,DWORD [44+esp] 1563 mov esi,DWORD [ebx] 1564 mov edi,DWORD [4+ebx] 1565 push edi 1566 push esi 1567 push edi 1568 push esi 1569 mov ebx,esp 1570 mov esi,DWORD [36+esp] 1571 mov edi,DWORD [40+esp] 1572 ; getting encrypt flag from parameter 7 1573 mov ecx,DWORD [64+esp] 1574 ; get and push parameter 5 1575 mov eax,DWORD [56+esp] 1576 push eax 1577 ; get and push parameter 4 1578 mov eax,DWORD [56+esp] 1579 push eax 1580 ; get and push parameter 3 1581 mov eax,DWORD [56+esp] 1582 push eax 1583 push ebx 1584 cmp ecx,0 1585 jz NEAR L$030decrypt 1586 and ebp,4294967288 1587 mov eax,DWORD [16+esp] 1588 mov ebx,DWORD [20+esp] 1589 jz NEAR L$031encrypt_finish 1590L$032encrypt_loop: 1591 mov ecx,DWORD [esi] 1592 mov edx,DWORD [4+esi] 1593 xor eax,ecx 1594 xor ebx,edx 1595 mov DWORD [16+esp],eax 1596 mov DWORD [20+esp],ebx 1597 call L$_DES_encrypt3_begin 1598 mov eax,DWORD [16+esp] 1599 mov ebx,DWORD [20+esp] 1600 mov DWORD [edi],eax 1601 mov DWORD [4+edi],ebx 1602 add esi,8 1603 add edi,8 1604 sub ebp,8 1605 jnz NEAR L$032encrypt_loop 1606L$031encrypt_finish: 1607 mov ebp,DWORD [60+esp] 1608 and ebp,7 1609 jz NEAR L$033finish 1610 call L$034PIC_point 1611L$034PIC_point: 1612 pop edx 1613 lea ecx,[(L$035cbc_enc_jmp_table-L$034PIC_point)+edx] 1614 mov ebp,DWORD [ebp*4+ecx] 1615 add ebp,edx 1616 xor ecx,ecx 1617 xor edx,edx 1618 jmp ebp 1619L$036ej7: 1620 %ifdef __CET__ 1621 1622db 243,15,30,251 1623 %endif 1624 1625 mov dh,BYTE [6+esi] 1626 shl edx,8 1627L$037ej6: 1628 %ifdef __CET__ 1629 1630db 243,15,30,251 1631 %endif 1632 1633 mov dh,BYTE [5+esi] 1634L$038ej5: 1635 %ifdef __CET__ 1636 1637db 243,15,30,251 1638 %endif 1639 1640 mov dl,BYTE [4+esi] 1641L$039ej4: 1642 %ifdef __CET__ 1643 1644db 243,15,30,251 1645 %endif 1646 1647 mov ecx,DWORD [esi] 1648 jmp NEAR L$040ejend 1649L$041ej3: 1650 %ifdef __CET__ 1651 1652db 243,15,30,251 1653 %endif 1654 1655 mov ch,BYTE [2+esi] 1656 shl ecx,8 1657L$042ej2: 1658 %ifdef __CET__ 1659 1660db 243,15,30,251 1661 %endif 1662 1663 mov ch,BYTE [1+esi] 1664L$043ej1: 1665 %ifdef __CET__ 1666 1667db 243,15,30,251 1668 %endif 1669 1670 mov cl,BYTE [esi] 1671L$040ejend: 1672 xor eax,ecx 1673 xor ebx,edx 1674 mov DWORD [16+esp],eax 1675 mov DWORD [20+esp],ebx 1676 call L$_DES_encrypt3_begin 1677 mov eax,DWORD [16+esp] 1678 mov ebx,DWORD [20+esp] 1679 mov DWORD [edi],eax 1680 mov DWORD [4+edi],ebx 1681 jmp NEAR L$033finish 1682L$030decrypt: 1683 and ebp,4294967288 1684 mov eax,DWORD [24+esp] 1685 mov ebx,DWORD [28+esp] 1686 jz NEAR L$044decrypt_finish 1687L$045decrypt_loop: 1688 mov eax,DWORD [esi] 1689 mov ebx,DWORD [4+esi] 1690 mov DWORD [16+esp],eax 1691 mov DWORD [20+esp],ebx 1692 call L$_DES_decrypt3_begin 1693 mov eax,DWORD [16+esp] 1694 mov ebx,DWORD [20+esp] 1695 mov ecx,DWORD [24+esp] 1696 mov edx,DWORD [28+esp] 1697 xor ecx,eax 1698 xor edx,ebx 1699 mov eax,DWORD [esi] 1700 mov ebx,DWORD [4+esi] 1701 mov DWORD [edi],ecx 1702 mov DWORD [4+edi],edx 1703 mov DWORD [24+esp],eax 1704 mov DWORD [28+esp],ebx 1705 add esi,8 1706 add edi,8 1707 sub ebp,8 1708 jnz NEAR L$045decrypt_loop 1709L$044decrypt_finish: 1710 mov ebp,DWORD [60+esp] 1711 and ebp,7 1712 jz NEAR L$033finish 1713 mov eax,DWORD [esi] 1714 mov ebx,DWORD [4+esi] 1715 mov DWORD [16+esp],eax 1716 mov DWORD [20+esp],ebx 1717 call L$_DES_decrypt3_begin 1718 mov eax,DWORD [16+esp] 1719 mov ebx,DWORD [20+esp] 1720 mov ecx,DWORD [24+esp] 1721 mov edx,DWORD [28+esp] 1722 xor ecx,eax 1723 xor edx,ebx 1724 mov eax,DWORD [esi] 1725 mov ebx,DWORD [4+esi] 1726L$046dj7: 1727 ror edx,16 1728 mov BYTE [6+edi],dl 1729 shr edx,16 1730L$047dj6: 1731 mov BYTE [5+edi],dh 1732L$048dj5: 1733 mov BYTE [4+edi],dl 1734L$049dj4: 1735 mov DWORD [edi],ecx 1736 jmp NEAR L$050djend 1737L$051dj3: 1738 ror ecx,16 1739 mov BYTE [2+edi],cl 1740 shl ecx,16 1741L$052dj2: 1742 mov BYTE [1+esi],ch 1743L$053dj1: 1744 mov BYTE [esi],cl 1745L$050djend: 1746 jmp NEAR L$033finish 1747L$033finish: 1748 mov ecx,DWORD [76+esp] 1749 add esp,32 1750 mov DWORD [ecx],eax 1751 mov DWORD [4+ecx],ebx 1752 pop edi 1753 pop esi 1754 pop ebx 1755 pop ebp 1756 ret 1757align 64 1758L$035cbc_enc_jmp_table: 1759dd 0 1760dd L$043ej1-L$034PIC_point 1761dd L$042ej2-L$034PIC_point 1762dd L$041ej3-L$034PIC_point 1763dd L$039ej4-L$034PIC_point 1764dd L$038ej5-L$034PIC_point 1765dd L$037ej6-L$034PIC_point 1766dd L$036ej7-L$034PIC_point 1767align 64 1768align 64 1769_DES_SPtrans: 1770L$des_sptrans: 1771dd 34080768,524288,33554434,34080770 1772dd 33554432,526338,524290,33554434 1773dd 526338,34080768,34078720,2050 1774dd 33556482,33554432,0,524290 1775dd 524288,2,33556480,526336 1776dd 34080770,34078720,2050,33556480 1777dd 2,2048,526336,34078722 1778dd 2048,33556482,34078722,0 1779dd 0,34080770,33556480,524290 1780dd 34080768,524288,2050,33556480 1781dd 34078722,2048,526336,33554434 1782dd 526338,2,33554434,34078720 1783dd 34080770,526336,34078720,33556482 1784dd 33554432,2050,524290,0 1785dd 524288,33554432,33556482,34080768 1786dd 2,34078722,2048,526338 1787dd 1074823184,0,1081344,1074790400 1788dd 1073741840,32784,1073774592,1081344 1789dd 32768,1074790416,16,1073774592 1790dd 1048592,1074823168,1074790400,16 1791dd 1048576,1073774608,1074790416,32768 1792dd 1081360,1073741824,0,1048592 1793dd 1073774608,1081360,1074823168,1073741840 1794dd 1073741824,1048576,32784,1074823184 1795dd 1048592,1074823168,1073774592,1081360 1796dd 1074823184,1048592,1073741840,0 1797dd 1073741824,32784,1048576,1074790416 1798dd 32768,1073741824,1081360,1073774608 1799dd 1074823168,32768,0,1073741840 1800dd 16,1074823184,1081344,1074790400 1801dd 1074790416,1048576,32784,1073774592 1802dd 1073774608,16,1074790400,1081344 1803dd 67108865,67371264,256,67109121 1804dd 262145,67108864,67109121,262400 1805dd 67109120,262144,67371008,1 1806dd 67371265,257,1,67371009 1807dd 0,262145,67371264,256 1808dd 257,67371265,262144,67108865 1809dd 67371009,67109120,262401,67371008 1810dd 262400,0,67108864,262401 1811dd 67371264,256,1,262144 1812dd 257,262145,67371008,67109121 1813dd 0,67371264,262400,67371009 1814dd 262145,67108864,67371265,1 1815dd 262401,67108865,67108864,67371265 1816dd 262144,67109120,67109121,262400 1817dd 67109120,0,67371009,257 1818dd 67108865,262401,256,67371008 1819dd 4198408,268439552,8,272633864 1820dd 0,272629760,268439560,4194312 1821dd 272633856,268435464,268435456,4104 1822dd 268435464,4198408,4194304,268435456 1823dd 272629768,4198400,4096,8 1824dd 4198400,268439560,272629760,4096 1825dd 4104,0,4194312,272633856 1826dd 268439552,272629768,272633864,4194304 1827dd 272629768,4104,4194304,268435464 1828dd 4198400,268439552,8,272629760 1829dd 268439560,0,4096,4194312 1830dd 0,272629768,272633856,4096 1831dd 268435456,272633864,4198408,4194304 1832dd 272633864,8,268439552,4198408 1833dd 4194312,4198400,272629760,268439560 1834dd 4104,268435456,268435464,272633856 1835dd 134217728,65536,1024,134284320 1836dd 134283296,134218752,66592,134283264 1837dd 65536,32,134217760,66560 1838dd 134218784,134283296,134284288,0 1839dd 66560,134217728,65568,1056 1840dd 134218752,66592,0,134217760 1841dd 32,134218784,134284320,65568 1842dd 134283264,1024,1056,134284288 1843dd 134284288,134218784,65568,134283264 1844dd 65536,32,134217760,134218752 1845dd 134217728,66560,134284320,0 1846dd 66592,134217728,1024,65568 1847dd 134218784,1024,0,134284320 1848dd 134283296,134284288,1056,65536 1849dd 66560,134283296,134218752,1056 1850dd 32,66592,134283264,134217760 1851dd 2147483712,2097216,0,2149588992 1852dd 2097216,8192,2147491904,2097152 1853dd 8256,2149589056,2105344,2147483648 1854dd 2147491840,2147483712,2149580800,2105408 1855dd 2097152,2147491904,2149580864,0 1856dd 8192,64,2149588992,2149580864 1857dd 2149589056,2149580800,2147483648,8256 1858dd 64,2105344,2105408,2147491840 1859dd 8256,2147483648,2147491840,2105408 1860dd 2149588992,2097216,0,2147491840 1861dd 2147483648,8192,2149580864,2097152 1862dd 2097216,2149589056,2105344,64 1863dd 2149589056,2105344,2097152,2147491904 1864dd 2147483712,2149580800,2105408,0 1865dd 8192,2147483712,2147491904,2149588992 1866dd 2149580800,8256,64,2149580864 1867dd 16384,512,16777728,16777220 1868dd 16794116,16388,16896,0 1869dd 16777216,16777732,516,16793600 1870dd 4,16794112,16793600,516 1871dd 16777732,16384,16388,16794116 1872dd 0,16777728,16777220,16896 1873dd 16793604,16900,16794112,4 1874dd 16900,16793604,512,16777216 1875dd 16900,16793600,16793604,516 1876dd 16384,512,16777216,16793604 1877dd 16777732,16900,16896,0 1878dd 512,16777220,4,16777728 1879dd 0,16777732,16777728,16896 1880dd 516,16384,16794116,16777216 1881dd 16794112,4,16388,16794116 1882dd 16777220,16794112,16793600,16388 1883dd 545259648,545390592,131200,0 1884dd 537001984,8388736,545259520,545390720 1885dd 128,536870912,8519680,131200 1886dd 8519808,537002112,536871040,545259520 1887dd 131072,8519808,8388736,537001984 1888dd 545390720,536871040,0,8519680 1889dd 536870912,8388608,537002112,545259648 1890dd 8388608,131072,545390592,128 1891dd 8388608,131072,536871040,545390720 1892dd 131200,536870912,0,8519680 1893dd 545259648,537002112,537001984,8388736 1894dd 545390592,128,8388736,537001984 1895dd 545390720,8388608,545259520,536871040 1896dd 8519680,131200,537002112,545259520 1897dd 128,545390592,8519808,0 1898dd 536870912,545259648,131072,8519808 1899