linux/arch/x86/crypto/salsa20-i586-asm_32.S
<<
>>
Prefs
   1# salsa20_pm.s version 20051229
   2# D. J. Bernstein
   3# Public domain.
   4
   5# enter ECRYPT_encrypt_bytes
   6.text
   7.p2align 5
   8.globl ECRYPT_encrypt_bytes
   9ECRYPT_encrypt_bytes:
  10        mov     %esp,%eax
  11        and     $31,%eax
  12        add     $256,%eax
  13        sub     %eax,%esp
  14        # eax_stack = eax
  15        movl    %eax,80(%esp)
  16        # ebx_stack = ebx
  17        movl    %ebx,84(%esp)
  18        # esi_stack = esi
  19        movl    %esi,88(%esp)
  20        # edi_stack = edi
  21        movl    %edi,92(%esp)
  22        # ebp_stack = ebp
  23        movl    %ebp,96(%esp)
  24        # x = arg1
  25        movl    4(%esp,%eax),%edx
  26        # m = arg2
  27        movl    8(%esp,%eax),%esi
  28        # out = arg3
  29        movl    12(%esp,%eax),%edi
  30        # bytes = arg4
  31        movl    16(%esp,%eax),%ebx
  32        # bytes -= 0
  33        sub     $0,%ebx
  34        # goto done if unsigned<=
  35        jbe     ._done
  36._start:
  37        # in0 = *(uint32 *) (x + 0)
  38        movl    0(%edx),%eax
  39        # in1 = *(uint32 *) (x + 4)
  40        movl    4(%edx),%ecx
  41        # in2 = *(uint32 *) (x + 8)
  42        movl    8(%edx),%ebp
  43        # j0 = in0
  44        movl    %eax,164(%esp)
  45        # in3 = *(uint32 *) (x + 12)
  46        movl    12(%edx),%eax
  47        # j1 = in1
  48        movl    %ecx,168(%esp)
  49        # in4 = *(uint32 *) (x + 16)
  50        movl    16(%edx),%ecx
  51        # j2 = in2
  52        movl    %ebp,172(%esp)
  53        # in5 = *(uint32 *) (x + 20)
  54        movl    20(%edx),%ebp
  55        # j3 = in3
  56        movl    %eax,176(%esp)
  57        # in6 = *(uint32 *) (x + 24)
  58        movl    24(%edx),%eax
  59        # j4 = in4
  60        movl    %ecx,180(%esp)
  61        # in7 = *(uint32 *) (x + 28)
  62        movl    28(%edx),%ecx
  63        # j5 = in5
  64        movl    %ebp,184(%esp)
  65        # in8 = *(uint32 *) (x + 32)
  66        movl    32(%edx),%ebp
  67        # j6 = in6
  68        movl    %eax,188(%esp)
  69        # in9 = *(uint32 *) (x + 36)
  70        movl    36(%edx),%eax
  71        # j7 = in7
  72        movl    %ecx,192(%esp)
  73        # in10 = *(uint32 *) (x + 40)
  74        movl    40(%edx),%ecx
  75        # j8 = in8
  76        movl    %ebp,196(%esp)
  77        # in11 = *(uint32 *) (x + 44)
  78        movl    44(%edx),%ebp
  79        # j9 = in9
  80        movl    %eax,200(%esp)
  81        # in12 = *(uint32 *) (x + 48)
  82        movl    48(%edx),%eax
  83        # j10 = in10
  84        movl    %ecx,204(%esp)
  85        # in13 = *(uint32 *) (x + 52)
  86        movl    52(%edx),%ecx
  87        # j11 = in11
  88        movl    %ebp,208(%esp)
  89        # in14 = *(uint32 *) (x + 56)
  90        movl    56(%edx),%ebp
  91        # j12 = in12
  92        movl    %eax,212(%esp)
  93        # in15 = *(uint32 *) (x + 60)
  94        movl    60(%edx),%eax
  95        # j13 = in13
  96        movl    %ecx,216(%esp)
  97        # j14 = in14
  98        movl    %ebp,220(%esp)
  99        # j15 = in15
 100        movl    %eax,224(%esp)
 101        # x_backup = x
 102        movl    %edx,64(%esp)
 103._bytesatleast1:
 104        #   bytes - 64
 105        cmp     $64,%ebx
 106        #   goto nocopy if unsigned>=
 107        jae     ._nocopy
 108        #     ctarget = out
 109        movl    %edi,228(%esp)
 110        #     out = &tmp
 111        leal    0(%esp),%edi
 112        #     i = bytes
 113        mov     %ebx,%ecx
 114        #     while (i) { *out++ = *m++; --i }
 115        rep     movsb
 116        #     out = &tmp
 117        leal    0(%esp),%edi
 118        #     m = &tmp
 119        leal    0(%esp),%esi
 120._nocopy:
 121        #   out_backup = out
 122        movl    %edi,72(%esp)
 123        #   m_backup = m
 124        movl    %esi,68(%esp)
 125        #   bytes_backup = bytes
 126        movl    %ebx,76(%esp)
 127        #   in0 = j0
 128        movl    164(%esp),%eax
 129        #   in1 = j1
 130        movl    168(%esp),%ecx
 131        #   in2 = j2
 132        movl    172(%esp),%edx
 133        #   in3 = j3
 134        movl    176(%esp),%ebx
 135        #   x0 = in0
 136        movl    %eax,100(%esp)
 137        #   x1 = in1
 138        movl    %ecx,104(%esp)
 139        #   x2 = in2
 140        movl    %edx,108(%esp)
 141        #   x3 = in3
 142        movl    %ebx,112(%esp)
 143        #   in4 = j4
 144        movl    180(%esp),%eax
 145        #   in5 = j5
 146        movl    184(%esp),%ecx
 147        #   in6 = j6
 148        movl    188(%esp),%edx
 149        #   in7 = j7
 150        movl    192(%esp),%ebx
 151        #   x4 = in4
 152        movl    %eax,116(%esp)
 153        #   x5 = in5
 154        movl    %ecx,120(%esp)
 155        #   x6 = in6
 156        movl    %edx,124(%esp)
 157        #   x7 = in7
 158        movl    %ebx,128(%esp)
 159        #   in8 = j8
 160        movl    196(%esp),%eax
 161        #   in9 = j9
 162        movl    200(%esp),%ecx
 163        #   in10 = j10
 164        movl    204(%esp),%edx
 165        #   in11 = j11
 166        movl    208(%esp),%ebx
 167        #   x8 = in8
 168        movl    %eax,132(%esp)
 169        #   x9 = in9
 170        movl    %ecx,136(%esp)
 171        #   x10 = in10
 172        movl    %edx,140(%esp)
 173        #   x11 = in11
 174        movl    %ebx,144(%esp)
 175        #   in12 = j12
 176        movl    212(%esp),%eax
 177        #   in13 = j13
 178        movl    216(%esp),%ecx
 179        #   in14 = j14
 180        movl    220(%esp),%edx
 181        #   in15 = j15
 182        movl    224(%esp),%ebx
 183        #   x12 = in12
 184        movl    %eax,148(%esp)
 185        #   x13 = in13
 186        movl    %ecx,152(%esp)
 187        #   x14 = in14
 188        movl    %edx,156(%esp)
 189        #   x15 = in15
 190        movl    %ebx,160(%esp)
 191        #   i = 20
 192        mov     $20,%ebp
 193        # p = x0
 194        movl    100(%esp),%eax
 195        # s = x5
 196        movl    120(%esp),%ecx
 197        # t = x10
 198        movl    140(%esp),%edx
 199        # w = x15
 200        movl    160(%esp),%ebx
 201._mainloop:
 202        # x0 = p
 203        movl    %eax,100(%esp)
 204        #                               x10 = t
 205        movl    %edx,140(%esp)
 206        # p += x12
 207        addl    148(%esp),%eax
 208        #               x5 = s
 209        movl    %ecx,120(%esp)
 210        #                               t += x6
 211        addl    124(%esp),%edx
 212        #                                               x15 = w
 213        movl    %ebx,160(%esp)
 214        #               r = x1
 215        movl    104(%esp),%esi
 216        #               r += s
 217        add     %ecx,%esi
 218        #                                               v = x11
 219        movl    144(%esp),%edi
 220        #                                               v += w
 221        add     %ebx,%edi
 222        # p <<<= 7
 223        rol     $7,%eax
 224        # p ^= x4
 225        xorl    116(%esp),%eax
 226        #                               t <<<= 7
 227        rol     $7,%edx
 228        #                               t ^= x14
 229        xorl    156(%esp),%edx
 230        #               r <<<= 7
 231        rol     $7,%esi
 232        #               r ^= x9
 233        xorl    136(%esp),%esi
 234        #                                               v <<<= 7
 235        rol     $7,%edi
 236        #                                               v ^= x3
 237        xorl    112(%esp),%edi
 238        # x4 = p
 239        movl    %eax,116(%esp)
 240        #                               x14 = t
 241        movl    %edx,156(%esp)
 242        # p += x0
 243        addl    100(%esp),%eax
 244        #               x9 = r
 245        movl    %esi,136(%esp)
 246        #                               t += x10
 247        addl    140(%esp),%edx
 248        #                                               x3 = v
 249        movl    %edi,112(%esp)
 250        # p <<<= 9
 251        rol     $9,%eax
 252        # p ^= x8
 253        xorl    132(%esp),%eax
 254        #                               t <<<= 9
 255        rol     $9,%edx
 256        #                               t ^= x2
 257        xorl    108(%esp),%edx
 258        #               s += r
 259        add     %esi,%ecx
 260        #               s <<<= 9
 261        rol     $9,%ecx
 262        #               s ^= x13
 263        xorl    152(%esp),%ecx
 264        #                                               w += v
 265        add     %edi,%ebx
 266        #                                               w <<<= 9
 267        rol     $9,%ebx
 268        #                                               w ^= x7
 269        xorl    128(%esp),%ebx
 270        # x8 = p
 271        movl    %eax,132(%esp)
 272        #                               x2 = t
 273        movl    %edx,108(%esp)
 274        # p += x4
 275        addl    116(%esp),%eax
 276        #               x13 = s
 277        movl    %ecx,152(%esp)
 278        #                               t += x14
 279        addl    156(%esp),%edx
 280        #                                               x7 = w
 281        movl    %ebx,128(%esp)
 282        # p <<<= 13
 283        rol     $13,%eax
 284        # p ^= x12
 285        xorl    148(%esp),%eax
 286        #                               t <<<= 13
 287        rol     $13,%edx
 288        #                               t ^= x6
 289        xorl    124(%esp),%edx
 290        #               r += s
 291        add     %ecx,%esi
 292        #               r <<<= 13
 293        rol     $13,%esi
 294        #               r ^= x1
 295        xorl    104(%esp),%esi
 296        #                                               v += w
 297        add     %ebx,%edi
 298        #                                               v <<<= 13
 299        rol     $13,%edi
 300        #                                               v ^= x11
 301        xorl    144(%esp),%edi
 302        # x12 = p
 303        movl    %eax,148(%esp)
 304        #                               x6 = t
 305        movl    %edx,124(%esp)
 306        # p += x8
 307        addl    132(%esp),%eax
 308        #               x1 = r
 309        movl    %esi,104(%esp)
 310        #                               t += x2
 311        addl    108(%esp),%edx
 312        #                                               x11 = v
 313        movl    %edi,144(%esp)
 314        # p <<<= 18
 315        rol     $18,%eax
 316        # p ^= x0
 317        xorl    100(%esp),%eax
 318        #                               t <<<= 18
 319        rol     $18,%edx
 320        #                               t ^= x10
 321        xorl    140(%esp),%edx
 322        #               s += r
 323        add     %esi,%ecx
 324        #               s <<<= 18
 325        rol     $18,%ecx
 326        #               s ^= x5
 327        xorl    120(%esp),%ecx
 328        #                                               w += v
 329        add     %edi,%ebx
 330        #                                               w <<<= 18
 331        rol     $18,%ebx
 332        #                                               w ^= x15
 333        xorl    160(%esp),%ebx
 334        # x0 = p
 335        movl    %eax,100(%esp)
 336        #                               x10 = t
 337        movl    %edx,140(%esp)
 338        # p += x3
 339        addl    112(%esp),%eax
 340        # p <<<= 7
 341        rol     $7,%eax
 342        #               x5 = s
 343        movl    %ecx,120(%esp)
 344        #                               t += x9
 345        addl    136(%esp),%edx
 346        #                                               x15 = w
 347        movl    %ebx,160(%esp)
 348        #               r = x4
 349        movl    116(%esp),%esi
 350        #               r += s
 351        add     %ecx,%esi
 352        #                                               v = x14
 353        movl    156(%esp),%edi
 354        #                                               v += w
 355        add     %ebx,%edi
 356        # p ^= x1
 357        xorl    104(%esp),%eax
 358        #                               t <<<= 7
 359        rol     $7,%edx
 360        #                               t ^= x11
 361        xorl    144(%esp),%edx
 362        #               r <<<= 7
 363        rol     $7,%esi
 364        #               r ^= x6
 365        xorl    124(%esp),%esi
 366        #                                               v <<<= 7
 367        rol     $7,%edi
 368        #                                               v ^= x12
 369        xorl    148(%esp),%edi
 370        # x1 = p
 371        movl    %eax,104(%esp)
 372        #                               x11 = t
 373        movl    %edx,144(%esp)
 374        # p += x0
 375        addl    100(%esp),%eax
 376        #               x6 = r
 377        movl    %esi,124(%esp)
 378        #                               t += x10
 379        addl    140(%esp),%edx
 380        #                                               x12 = v
 381        movl    %edi,148(%esp)
 382        # p <<<= 9
 383        rol     $9,%eax
 384        # p ^= x2
 385        xorl    108(%esp),%eax
 386        #                               t <<<= 9
 387        rol     $9,%edx
 388        #                               t ^= x8
 389        xorl    132(%esp),%edx
 390        #               s += r
 391        add     %esi,%ecx
 392        #               s <<<= 9
 393        rol     $9,%ecx
 394        #               s ^= x7
 395        xorl    128(%esp),%ecx
 396        #                                               w += v
 397        add     %edi,%ebx
 398        #                                               w <<<= 9
 399        rol     $9,%ebx
 400        #                                               w ^= x13
 401        xorl    152(%esp),%ebx
 402        # x2 = p
 403        movl    %eax,108(%esp)
 404        #                               x8 = t
 405        movl    %edx,132(%esp)
 406        # p += x1
 407        addl    104(%esp),%eax
 408        #               x7 = s
 409        movl    %ecx,128(%esp)
 410        #                               t += x11
 411        addl    144(%esp),%edx
 412        #                                               x13 = w
 413        movl    %ebx,152(%esp)
 414        # p <<<= 13
 415        rol     $13,%eax
 416        # p ^= x3
 417        xorl    112(%esp),%eax
 418        #                               t <<<= 13
 419        rol     $13,%edx
 420        #                               t ^= x9
 421        xorl    136(%esp),%edx
 422        #               r += s
 423        add     %ecx,%esi
 424        #               r <<<= 13
 425        rol     $13,%esi
 426        #               r ^= x4
 427        xorl    116(%esp),%esi
 428        #                                               v += w
 429        add     %ebx,%edi
 430        #                                               v <<<= 13
 431        rol     $13,%edi
 432        #                                               v ^= x14
 433        xorl    156(%esp),%edi
 434        # x3 = p
 435        movl    %eax,112(%esp)
 436        #                               x9 = t
 437        movl    %edx,136(%esp)
 438        # p += x2
 439        addl    108(%esp),%eax
 440        #               x4 = r
 441        movl    %esi,116(%esp)
 442        #                               t += x8
 443        addl    132(%esp),%edx
 444        #                                               x14 = v
 445        movl    %edi,156(%esp)
 446        # p <<<= 18
 447        rol     $18,%eax
 448        # p ^= x0
 449        xorl    100(%esp),%eax
 450        #                               t <<<= 18
 451        rol     $18,%edx
 452        #                               t ^= x10
 453        xorl    140(%esp),%edx
 454        #               s += r
 455        add     %esi,%ecx
 456        #               s <<<= 18
 457        rol     $18,%ecx
 458        #               s ^= x5
 459        xorl    120(%esp),%ecx
 460        #                                               w += v
 461        add     %edi,%ebx
 462        #                                               w <<<= 18
 463        rol     $18,%ebx
 464        #                                               w ^= x15
 465        xorl    160(%esp),%ebx
 466        # x0 = p
 467        movl    %eax,100(%esp)
 468        #                               x10 = t
 469        movl    %edx,140(%esp)
 470        # p += x12
 471        addl    148(%esp),%eax
 472        #               x5 = s
 473        movl    %ecx,120(%esp)
 474        #                               t += x6
 475        addl    124(%esp),%edx
 476        #                                               x15 = w
 477        movl    %ebx,160(%esp)
 478        #               r = x1
 479        movl    104(%esp),%esi
 480        #               r += s
 481        add     %ecx,%esi
 482        #                                               v = x11
 483        movl    144(%esp),%edi
 484        #                                               v += w
 485        add     %ebx,%edi
 486        # p <<<= 7
 487        rol     $7,%eax
 488        # p ^= x4
 489        xorl    116(%esp),%eax
 490        #                               t <<<= 7
 491        rol     $7,%edx
 492        #                               t ^= x14
 493        xorl    156(%esp),%edx
 494        #               r <<<= 7
 495        rol     $7,%esi
 496        #               r ^= x9
 497        xorl    136(%esp),%esi
 498        #                                               v <<<= 7
 499        rol     $7,%edi
 500        #                                               v ^= x3
 501        xorl    112(%esp),%edi
 502        # x4 = p
 503        movl    %eax,116(%esp)
 504        #                               x14 = t
 505        movl    %edx,156(%esp)
 506        # p += x0
 507        addl    100(%esp),%eax
 508        #               x9 = r
 509        movl    %esi,136(%esp)
 510        #                               t += x10
 511        addl    140(%esp),%edx
 512        #                                               x3 = v
 513        movl    %edi,112(%esp)
 514        # p <<<= 9
 515        rol     $9,%eax
 516        # p ^= x8
 517        xorl    132(%esp),%eax
 518        #                               t <<<= 9
 519        rol     $9,%edx
 520        #                               t ^= x2
 521        xorl    108(%esp),%edx
 522        #               s += r
 523        add     %esi,%ecx
 524        #               s <<<= 9
 525        rol     $9,%ecx
 526        #               s ^= x13
 527        xorl    152(%esp),%ecx
 528        #                                               w += v
 529        add     %edi,%ebx
 530        #                                               w <<<= 9
 531        rol     $9,%ebx
 532        #                                               w ^= x7
 533        xorl    128(%esp),%ebx
 534        # x8 = p
 535        movl    %eax,132(%esp)
 536        #                               x2 = t
 537        movl    %edx,108(%esp)
 538        # p += x4
 539        addl    116(%esp),%eax
 540        #               x13 = s
 541        movl    %ecx,152(%esp)
 542        #                               t += x14
 543        addl    156(%esp),%edx
 544        #                                               x7 = w
 545        movl    %ebx,128(%esp)
 546        # p <<<= 13
 547        rol     $13,%eax
 548        # p ^= x12
 549        xorl    148(%esp),%eax
 550        #                               t <<<= 13
 551        rol     $13,%edx
 552        #                               t ^= x6
 553        xorl    124(%esp),%edx
 554        #               r += s
 555        add     %ecx,%esi
 556        #               r <<<= 13
 557        rol     $13,%esi
 558        #               r ^= x1
 559        xorl    104(%esp),%esi
 560        #                                               v += w
 561        add     %ebx,%edi
 562        #                                               v <<<= 13
 563        rol     $13,%edi
 564        #                                               v ^= x11
 565        xorl    144(%esp),%edi
 566        # x12 = p
 567        movl    %eax,148(%esp)
 568        #                               x6 = t
 569        movl    %edx,124(%esp)
 570        # p += x8
 571        addl    132(%esp),%eax
 572        #               x1 = r
 573        movl    %esi,104(%esp)
 574        #                               t += x2
 575        addl    108(%esp),%edx
 576        #                                               x11 = v
 577        movl    %edi,144(%esp)
 578        # p <<<= 18
 579        rol     $18,%eax
 580        # p ^= x0
 581        xorl    100(%esp),%eax
 582        #                               t <<<= 18
 583        rol     $18,%edx
 584        #                               t ^= x10
 585        xorl    140(%esp),%edx
 586        #               s += r
 587        add     %esi,%ecx
 588        #               s <<<= 18
 589        rol     $18,%ecx
 590        #               s ^= x5
 591        xorl    120(%esp),%ecx
 592        #                                               w += v
 593        add     %edi,%ebx
 594        #                                               w <<<= 18
 595        rol     $18,%ebx
 596        #                                               w ^= x15
 597        xorl    160(%esp),%ebx
 598        # x0 = p
 599        movl    %eax,100(%esp)
 600        #                               x10 = t
 601        movl    %edx,140(%esp)
 602        # p += x3
 603        addl    112(%esp),%eax
 604        # p <<<= 7
 605        rol     $7,%eax
 606        #               x5 = s
 607        movl    %ecx,120(%esp)
 608        #                               t += x9
 609        addl    136(%esp),%edx
 610        #                                               x15 = w
 611        movl    %ebx,160(%esp)
 612        #               r = x4
 613        movl    116(%esp),%esi
 614        #               r += s
 615        add     %ecx,%esi
 616        #                                               v = x14
 617        movl    156(%esp),%edi
 618        #                                               v += w
 619        add     %ebx,%edi
 620        # p ^= x1
 621        xorl    104(%esp),%eax
 622        #                               t <<<= 7
 623        rol     $7,%edx
 624        #                               t ^= x11
 625        xorl    144(%esp),%edx
 626        #               r <<<= 7
 627        rol     $7,%esi
 628        #               r ^= x6
 629        xorl    124(%esp),%esi
 630        #                                               v <<<= 7
 631        rol     $7,%edi
 632        #                                               v ^= x12
 633        xorl    148(%esp),%edi
 634        # x1 = p
 635        movl    %eax,104(%esp)
 636        #                               x11 = t
 637        movl    %edx,144(%esp)
 638        # p += x0
 639        addl    100(%esp),%eax
 640        #               x6 = r
 641        movl    %esi,124(%esp)
 642        #                               t += x10
 643        addl    140(%esp),%edx
 644        #                                               x12 = v
 645        movl    %edi,148(%esp)
 646        # p <<<= 9
 647        rol     $9,%eax
 648        # p ^= x2
 649        xorl    108(%esp),%eax
 650        #                               t <<<= 9
 651        rol     $9,%edx
 652        #                               t ^= x8
 653        xorl    132(%esp),%edx
 654        #               s += r
 655        add     %esi,%ecx
 656        #               s <<<= 9
 657        rol     $9,%ecx
 658        #               s ^= x7
 659        xorl    128(%esp),%ecx
 660        #                                               w += v
 661        add     %edi,%ebx
 662        #                                               w <<<= 9
 663        rol     $9,%ebx
 664        #                                               w ^= x13
 665        xorl    152(%esp),%ebx
 666        # x2 = p
 667        movl    %eax,108(%esp)
 668        #                               x8 = t
 669        movl    %edx,132(%esp)
 670        # p += x1
 671        addl    104(%esp),%eax
 672        #               x7 = s
 673        movl    %ecx,128(%esp)
 674        #                               t += x11
 675        addl    144(%esp),%edx
 676        #                                               x13 = w
 677        movl    %ebx,152(%esp)
 678        # p <<<= 13
 679        rol     $13,%eax
 680        # p ^= x3
 681        xorl    112(%esp),%eax
 682        #                               t <<<= 13
 683        rol     $13,%edx
 684        #                               t ^= x9
 685        xorl    136(%esp),%edx
 686        #               r += s
 687        add     %ecx,%esi
 688        #               r <<<= 13
 689        rol     $13,%esi
 690        #               r ^= x4
 691        xorl    116(%esp),%esi
 692        #                                               v += w
 693        add     %ebx,%edi
 694        #                                               v <<<= 13
 695        rol     $13,%edi
 696        #                                               v ^= x14
 697        xorl    156(%esp),%edi
 698        # x3 = p
 699        movl    %eax,112(%esp)
 700        #                               x9 = t
 701        movl    %edx,136(%esp)
 702        # p += x2
 703        addl    108(%esp),%eax
 704        #               x4 = r
 705        movl    %esi,116(%esp)
 706        #                               t += x8
 707        addl    132(%esp),%edx
 708        #                                               x14 = v
 709        movl    %edi,156(%esp)
 710        # p <<<= 18
 711        rol     $18,%eax
 712        # p ^= x0
 713        xorl    100(%esp),%eax
 714        #                               t <<<= 18
 715        rol     $18,%edx
 716        #                               t ^= x10
 717        xorl    140(%esp),%edx
 718        #               s += r
 719        add     %esi,%ecx
 720        #               s <<<= 18
 721        rol     $18,%ecx
 722        #               s ^= x5
 723        xorl    120(%esp),%ecx
 724        #                                               w += v
 725        add     %edi,%ebx
 726        #                                               w <<<= 18
 727        rol     $18,%ebx
 728        #                                               w ^= x15
 729        xorl    160(%esp),%ebx
 730        # i -= 4
 731        sub     $4,%ebp
 732        # goto mainloop if unsigned >
 733        ja      ._mainloop
 734        # x0 = p
 735        movl    %eax,100(%esp)
 736        # x5 = s
 737        movl    %ecx,120(%esp)
 738        # x10 = t
 739        movl    %edx,140(%esp)
 740        # x15 = w
 741        movl    %ebx,160(%esp)
 742        #   out = out_backup
 743        movl    72(%esp),%edi
 744        #   m = m_backup
 745        movl    68(%esp),%esi
 746        #   in0 = x0
 747        movl    100(%esp),%eax
 748        #   in1 = x1
 749        movl    104(%esp),%ecx
 750        #   in0 += j0
 751        addl    164(%esp),%eax
 752        #   in1 += j1
 753        addl    168(%esp),%ecx
 754        #   in0 ^= *(uint32 *) (m + 0)
 755        xorl    0(%esi),%eax
 756        #   in1 ^= *(uint32 *) (m + 4)
 757        xorl    4(%esi),%ecx
 758        #   *(uint32 *) (out + 0) = in0
 759        movl    %eax,0(%edi)
 760        #   *(uint32 *) (out + 4) = in1
 761        movl    %ecx,4(%edi)
 762        #   in2 = x2
 763        movl    108(%esp),%eax
 764        #   in3 = x3
 765        movl    112(%esp),%ecx
 766        #   in2 += j2
 767        addl    172(%esp),%eax
 768        #   in3 += j3
 769        addl    176(%esp),%ecx
 770        #   in2 ^= *(uint32 *) (m + 8)
 771        xorl    8(%esi),%eax
 772        #   in3 ^= *(uint32 *) (m + 12)
 773        xorl    12(%esi),%ecx
 774        #   *(uint32 *) (out + 8) = in2
 775        movl    %eax,8(%edi)
 776        #   *(uint32 *) (out + 12) = in3
 777        movl    %ecx,12(%edi)
 778        #   in4 = x4
 779        movl    116(%esp),%eax
 780        #   in5 = x5
 781        movl    120(%esp),%ecx
 782        #   in4 += j4
 783        addl    180(%esp),%eax
 784        #   in5 += j5
 785        addl    184(%esp),%ecx
 786        #   in4 ^= *(uint32 *) (m + 16)
 787        xorl    16(%esi),%eax
 788        #   in5 ^= *(uint32 *) (m + 20)
 789        xorl    20(%esi),%ecx
 790        #   *(uint32 *) (out + 16) = in4
 791        movl    %eax,16(%edi)
 792        #   *(uint32 *) (out + 20) = in5
 793        movl    %ecx,20(%edi)
 794        #   in6 = x6
 795        movl    124(%esp),%eax
 796        #   in7 = x7
 797        movl    128(%esp),%ecx
 798        #   in6 += j6
 799        addl    188(%esp),%eax
 800        #   in7 += j7
 801        addl    192(%esp),%ecx
 802        #   in6 ^= *(uint32 *) (m + 24)
 803        xorl    24(%esi),%eax
 804        #   in7 ^= *(uint32 *) (m + 28)
 805        xorl    28(%esi),%ecx
 806        #   *(uint32 *) (out + 24) = in6
 807        movl    %eax,24(%edi)
 808        #   *(uint32 *) (out + 28) = in7
 809        movl    %ecx,28(%edi)
 810        #   in8 = x8
 811        movl    132(%esp),%eax
 812        #   in9 = x9
 813        movl    136(%esp),%ecx
 814        #   in8 += j8
 815        addl    196(%esp),%eax
 816        #   in9 += j9
 817        addl    200(%esp),%ecx
 818        #   in8 ^= *(uint32 *) (m + 32)
 819        xorl    32(%esi),%eax
 820        #   in9 ^= *(uint32 *) (m + 36)
 821        xorl    36(%esi),%ecx
 822        #   *(uint32 *) (out + 32) = in8
 823        movl    %eax,32(%edi)
 824        #   *(uint32 *) (out + 36) = in9
 825        movl    %ecx,36(%edi)
 826        #   in10 = x10
 827        movl    140(%esp),%eax
 828        #   in11 = x11
 829        movl    144(%esp),%ecx
 830        #   in10 += j10
 831        addl    204(%esp),%eax
 832        #   in11 += j11
 833        addl    208(%esp),%ecx
 834        #   in10 ^= *(uint32 *) (m + 40)
 835        xorl    40(%esi),%eax
 836        #   in11 ^= *(uint32 *) (m + 44)
 837        xorl    44(%esi),%ecx
 838        #   *(uint32 *) (out + 40) = in10
 839        movl    %eax,40(%edi)
 840        #   *(uint32 *) (out + 44) = in11
 841        movl    %ecx,44(%edi)
 842        #   in12 = x12
 843        movl    148(%esp),%eax
 844        #   in13 = x13
 845        movl    152(%esp),%ecx
 846        #   in12 += j12
 847        addl    212(%esp),%eax
 848        #   in13 += j13
 849        addl    216(%esp),%ecx
 850        #   in12 ^= *(uint32 *) (m + 48)
 851        xorl    48(%esi),%eax
 852        #   in13 ^= *(uint32 *) (m + 52)
 853        xorl    52(%esi),%ecx
 854        #   *(uint32 *) (out + 48) = in12
 855        movl    %eax,48(%edi)
 856        #   *(uint32 *) (out + 52) = in13
 857        movl    %ecx,52(%edi)
 858        #   in14 = x14
 859        movl    156(%esp),%eax
 860        #   in15 = x15
 861        movl    160(%esp),%ecx
 862        #   in14 += j14
 863        addl    220(%esp),%eax
 864        #   in15 += j15
 865        addl    224(%esp),%ecx
 866        #   in14 ^= *(uint32 *) (m + 56)
 867        xorl    56(%esi),%eax
 868        #   in15 ^= *(uint32 *) (m + 60)
 869        xorl    60(%esi),%ecx
 870        #   *(uint32 *) (out + 56) = in14
 871        movl    %eax,56(%edi)
 872        #   *(uint32 *) (out + 60) = in15
 873        movl    %ecx,60(%edi)
 874        #   bytes = bytes_backup
 875        movl    76(%esp),%ebx
 876        #   in8 = j8
 877        movl    196(%esp),%eax
 878        #   in9 = j9
 879        movl    200(%esp),%ecx
 880        #   in8 += 1
 881        add     $1,%eax
 882        #   in9 += 0 + carry
 883        adc     $0,%ecx
 884        #   j8 = in8
 885        movl    %eax,196(%esp)
 886        #   j9 = in9
 887        movl    %ecx,200(%esp)
 888        #   bytes - 64
 889        cmp     $64,%ebx
 890        #   goto bytesatleast65 if unsigned>
 891        ja      ._bytesatleast65
 892        #     goto bytesatleast64 if unsigned>=
 893        jae     ._bytesatleast64
 894        #       m = out
 895        mov     %edi,%esi
 896        #       out = ctarget
 897        movl    228(%esp),%edi
 898        #       i = bytes
 899        mov     %ebx,%ecx
 900        #       while (i) { *out++ = *m++; --i }
 901        rep     movsb
 902._bytesatleast64:
 903        #     x = x_backup
 904        movl    64(%esp),%eax
 905        #     in8 = j8
 906        movl    196(%esp),%ecx
 907        #     in9 = j9
 908        movl    200(%esp),%edx
 909        #     *(uint32 *) (x + 32) = in8
 910        movl    %ecx,32(%eax)
 911        #     *(uint32 *) (x + 36) = in9
 912        movl    %edx,36(%eax)
 913._done:
 914        #     eax = eax_stack
 915        movl    80(%esp),%eax
 916        #     ebx = ebx_stack
 917        movl    84(%esp),%ebx
 918        #     esi = esi_stack
 919        movl    88(%esp),%esi
 920        #     edi = edi_stack
 921        movl    92(%esp),%edi
 922        #     ebp = ebp_stack
 923        movl    96(%esp),%ebp
 924        #     leave
 925        add     %eax,%esp
 926        ret
 927._bytesatleast65:
 928        #   bytes -= 64
 929        sub     $64,%ebx
 930        #   out += 64
 931        add     $64,%edi
 932        #   m += 64
 933        add     $64,%esi
 934        # goto bytesatleast1
 935        jmp     ._bytesatleast1
 936# enter ECRYPT_keysetup
 937.text
 938.p2align 5
 939.globl ECRYPT_keysetup
 940ECRYPT_keysetup:
 941        mov     %esp,%eax
 942        and     $31,%eax
 943        add     $256,%eax
 944        sub     %eax,%esp
 945        #   eax_stack = eax
 946        movl    %eax,64(%esp)
 947        #   ebx_stack = ebx
 948        movl    %ebx,68(%esp)
 949        #   esi_stack = esi
 950        movl    %esi,72(%esp)
 951        #   edi_stack = edi
 952        movl    %edi,76(%esp)
 953        #   ebp_stack = ebp
 954        movl    %ebp,80(%esp)
 955        #   k = arg2
 956        movl    8(%esp,%eax),%ecx
 957        #   kbits = arg3
 958        movl    12(%esp,%eax),%edx
 959        #   x = arg1
 960        movl    4(%esp,%eax),%eax
 961        #   in1 = *(uint32 *) (k + 0)
 962        movl    0(%ecx),%ebx
 963        #   in2 = *(uint32 *) (k + 4)
 964        movl    4(%ecx),%esi
 965        #   in3 = *(uint32 *) (k + 8)
 966        movl    8(%ecx),%edi
 967        #   in4 = *(uint32 *) (k + 12)
 968        movl    12(%ecx),%ebp
 969        #   *(uint32 *) (x + 4) = in1
 970        movl    %ebx,4(%eax)
 971        #   *(uint32 *) (x + 8) = in2
 972        movl    %esi,8(%eax)
 973        #   *(uint32 *) (x + 12) = in3
 974        movl    %edi,12(%eax)
 975        #   *(uint32 *) (x + 16) = in4
 976        movl    %ebp,16(%eax)
 977        #   kbits - 256
 978        cmp     $256,%edx
 979        #   goto kbits128 if unsigned<
 980        jb      ._kbits128
 981._kbits256:
 982        #     in11 = *(uint32 *) (k + 16)
 983        movl    16(%ecx),%edx
 984        #     in12 = *(uint32 *) (k + 20)
 985        movl    20(%ecx),%ebx
 986        #     in13 = *(uint32 *) (k + 24)
 987        movl    24(%ecx),%esi
 988        #     in14 = *(uint32 *) (k + 28)
 989        movl    28(%ecx),%ecx
 990        #     *(uint32 *) (x + 44) = in11
 991        movl    %edx,44(%eax)
 992        #     *(uint32 *) (x + 48) = in12
 993        movl    %ebx,48(%eax)
 994        #     *(uint32 *) (x + 52) = in13
 995        movl    %esi,52(%eax)
 996        #     *(uint32 *) (x + 56) = in14
 997        movl    %ecx,56(%eax)
 998        #     in0 = 1634760805
 999        mov     $1634760805,%ecx
1000        #     in5 = 857760878
1001        mov     $857760878,%edx
1002        #     in10 = 2036477234
1003        mov     $2036477234,%ebx
1004        #     in15 = 1797285236
1005        mov     $1797285236,%esi
1006        #     *(uint32 *) (x + 0) = in0
1007        movl    %ecx,0(%eax)
1008        #     *(uint32 *) (x + 20) = in5
1009        movl    %edx,20(%eax)
1010        #     *(uint32 *) (x + 40) = in10
1011        movl    %ebx,40(%eax)
1012        #     *(uint32 *) (x + 60) = in15
1013        movl    %esi,60(%eax)
1014        #   goto keysetupdone
1015        jmp     ._keysetupdone
1016._kbits128:
1017        #     in11 = *(uint32 *) (k + 0)
1018        movl    0(%ecx),%edx
1019        #     in12 = *(uint32 *) (k + 4)
1020        movl    4(%ecx),%ebx
1021        #     in13 = *(uint32 *) (k + 8)
1022        movl    8(%ecx),%esi
1023        #     in14 = *(uint32 *) (k + 12)
1024        movl    12(%ecx),%ecx
1025        #     *(uint32 *) (x + 44) = in11
1026        movl    %edx,44(%eax)
1027        #     *(uint32 *) (x + 48) = in12
1028        movl    %ebx,48(%eax)
1029        #     *(uint32 *) (x + 52) = in13
1030        movl    %esi,52(%eax)
1031        #     *(uint32 *) (x + 56) = in14
1032        movl    %ecx,56(%eax)
1033        #     in0 = 1634760805
1034        mov     $1634760805,%ecx
1035        #     in5 = 824206446
1036        mov     $824206446,%edx
1037        #     in10 = 2036477238
1038        mov     $2036477238,%ebx
1039        #     in15 = 1797285236
1040        mov     $1797285236,%esi
1041        #     *(uint32 *) (x + 0) = in0
1042        movl    %ecx,0(%eax)
1043        #     *(uint32 *) (x + 20) = in5
1044        movl    %edx,20(%eax)
1045        #     *(uint32 *) (x + 40) = in10
1046        movl    %ebx,40(%eax)
1047        #     *(uint32 *) (x + 60) = in15
1048        movl    %esi,60(%eax)
1049._keysetupdone:
1050        #   eax = eax_stack
1051        movl    64(%esp),%eax
1052        #   ebx = ebx_stack
1053        movl    68(%esp),%ebx
1054        #   esi = esi_stack
1055        movl    72(%esp),%esi
1056        #   edi = edi_stack
1057        movl    76(%esp),%edi
1058        #   ebp = ebp_stack
1059        movl    80(%esp),%ebp
1060        # leave
1061        add     %eax,%esp
1062        ret
1063# enter ECRYPT_ivsetup
1064.text
1065.p2align 5
1066.globl ECRYPT_ivsetup
1067ECRYPT_ivsetup:
1068        mov     %esp,%eax
1069        and     $31,%eax
1070        add     $256,%eax
1071        sub     %eax,%esp
1072        #   eax_stack = eax
1073        movl    %eax,64(%esp)
1074        #   ebx_stack = ebx
1075        movl    %ebx,68(%esp)
1076        #   esi_stack = esi
1077        movl    %esi,72(%esp)
1078        #   edi_stack = edi
1079        movl    %edi,76(%esp)
1080        #   ebp_stack = ebp
1081        movl    %ebp,80(%esp)
1082        #   iv = arg2
1083        movl    8(%esp,%eax),%ecx
1084        #   x = arg1
1085        movl    4(%esp,%eax),%eax
1086        #   in6 = *(uint32 *) (iv + 0)
1087        movl    0(%ecx),%edx
1088        #   in7 = *(uint32 *) (iv + 4)
1089        movl    4(%ecx),%ecx
1090        #   in8 = 0
1091        mov     $0,%ebx
1092        #   in9 = 0
1093        mov     $0,%esi
1094        #   *(uint32 *) (x + 24) = in6
1095        movl    %edx,24(%eax)
1096        #   *(uint32 *) (x + 28) = in7
1097        movl    %ecx,28(%eax)
1098        #   *(uint32 *) (x + 32) = in8
1099        movl    %ebx,32(%eax)
1100        #   *(uint32 *) (x + 36) = in9
1101        movl    %esi,36(%eax)
1102        #   eax = eax_stack
1103        movl    64(%esp),%eax
1104        #   ebx = ebx_stack
1105        movl    68(%esp),%ebx
1106        #   esi = esi_stack
1107        movl    72(%esp),%esi
1108        #   edi = edi_stack
1109        movl    76(%esp),%edi
1110        #   ebp = ebp_stack
1111        movl    80(%esp),%ebp
1112        # leave
1113        add     %eax,%esp
1114        ret
1115
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.