1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 /* 30 * Unified version for both position independent and non position independent 31 * for both v8plus and v9 32 * compile with: 33 * 34 * cc -c -xarch=v8plus des_crypt_asm.s or 35 * cc -c -arch=v9 des_crypt_asm.s 36 * for kernel use (no -KPIC) 37 * 38 * and with 39 * 40 * cc -c -xarch=v8plus -KPIC -DPIC des_crypt_asm.s or 41 * cc -c -arch=v9 -KPIC -DPIC des_crypt_asm.s 42 * for .so use 43 * 44 * The tables were generated by a C program, compiled into the C version 45 * of this function, from which a .s was generated by the C compiler and 46 * that .s was used as a starting point for this one, in particular for 47 * the data definitions. It is important, though that the tables and 48 * the code both remain in the text section and in this order, otherwise, 49 * at least on UltraSparc-II processors, collisions in the E-cache are 50 * highly probable between the code and the data it is using which can 51 * result in up to 40% performance loss 52 * 53 * For a description of the DES algithm, see NIST publication FIPS PUB 46-3 54 * 55 * In this implementation, the 16 rounds of DES are carried out by unrolling 56 * a loop that computes two rounds. For those 2 rounds, the two parts of 57 * the intermediate variable (L and R in the FIPS pub) are kept in their 58 * extended forms (i.e. in the one after applying the transformation E), 59 * with the appropriate bits repeated so that bits needed for the S-box 60 * lookups are in consecutive positions. So the bits of the L (or R) 61 * variable appear in the following order (X represents a bit that is not 62 * from L (R), these bits are always 0): 63 * 32 1 2 3 4 5 X X X X X X X X 4 5 64 * 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 65 * 16 17 18 19 20 21 X X X X X 20 21 22 23 24 66 * 25 24 25 26 27 28 29 28 29 30 31 32 1 X X X 67 * This arrangement makes it possible that 3 of the 8 S-box indices 68 * can be extracted by a single instruction: srlx by 55 for the S1 index, 69 * srl by 23 for the S5 index and and by 0x1f80 for the S8 index. The rest 70 * of the indices requires two operations, a shift and an and. 71 * The tables for the S-boxes are computed in such a way that when or-ed 72 * together, they give the result of the S-box, P and E computations. 73 * Also, the key schedule bits are computed to follow this bit-scheme. 74 * The initial permutation tables are also computed to produce this 75 * bit distribution and the final permutation works from these, too. 76 * 77 * The end of each round is overlapped with the beginning of the next 78 * one since after the first 6 S-box lookups all the bits necessary 79 * for one S-box lookup in the next round can be computed (by xor-ing 80 * the next key schedule item to the partially computed next R). 81 */ 82 83 #if defined(lint) || defined(__lint) 84 /* LINTED */ 85 /* Nothing to be linted in this file, its pure assembly source */ 86 #else /* lint || __lint */ 87 88 .register %g2,#scratch 89 .register %g3,#scratch 90 91 .file "encrypt_asm.S" 92 93 .section ".text",#alloc 94 .align 32 95 96 ! 97 ! CONSTANT POOL 98 ! 99 100 des_sbox_table: 101 .word 5121 102 .word 1073872896 103 .word 0 104 .word 0 105 .word 1 106 .word 1073741824 107 .word 5121 108 .word 1073872928 109 .word 5121 110 .word 1073741856 111 .word 1 112 .word 1073872928 113 .word 0 114 .word 32 115 .word 1 116 .word 1073741824 117 .word 0 118 .word 131072 119 .word 5121 120 .word 1073872896 121 .word 5121 122 .word 1073872928 123 .word 0 124 .word 131072 125 .word 5120 126 .word 131104 127 .word 5121 128 .word 1073741856 129 .word 5120 130 .word 0 131 .word 0 132 .word 32 133 .word 0 134 .word 131104 135 .word 5120 136 .word 131072 137 .word 5120 138 .word 131072 139 .word 1 140 .word 1073872896 141 .word 1 142 .word 1073872896 143 .word 5121 144 .word 1073741824 145 .word 5121 146 .word 1073741824 147 .word 5120 148 .word 131104 149 .word 1 150 .word 1073741856 151 .word 5120 152 .word 32 153 .word 5120 154 .word 32 155 .word 1 156 .word 1073741856 157 .word 0 158 .word 0 159 .word 0 160 .word 131104 161 .word 1 162 .word 1073872928 163 .word 5120 164 .word 0 165 .word 1 166 .word 1073741824 167 .word 5121 168 .word 1073872928 169 .word 0 170 .word 32 171 .word 5121 172 .word 1073741824 173 .word 5121 174 .word 1073872896 175 .word 5120 176 .word 0 177 .word 5120 178 .word 0 179 .word 0 180 .word 131072 181 .word 5121 182 .word 1073741856 183 .word 1 184 .word 1073741824 185 .word 1 186 .word 1073872896 187 .word 5120 188 .word 32 189 .word 0 190 .word 131072 191 .word 0 192 .word 32 193 .word 5120 194 .word 131104 195 .word 1 196 .word 1073872928 197 .word 5121 198 .word 1073872928 199 .word 1 200 .word 1073741856 201 .word 5121 202 .word 1073741824 203 .word 5120 204 .word 131104 205 .word 5120 206 .word 32 207 .word 0 208 .word 131104 209 .word 1 210 .word 1073872928 211 .word 5121 212 .word 1073872896 213 .word 0 214 .word 131104 215 .word 5120 216 .word 131072 217 .word 5120 218 .word 131072 219 .word 0 220 .word 0 221 .word 1 222 .word 1073741856 223 .word 1 224 .word 1073872896 225 .word 0 226 .word 0 227 .word 5121 228 .word 1073741856 229 .word 536870992 230 .word 536872192 231 .word 536870912 232 .word 536870912 233 .word 0 234 .word 536870912 235 .word 80 236 .word 536872192 237 .word 80 238 .word 0 239 .word 0 240 .word 1280 241 .word 536870992 242 .word 1280 243 .word 536870912 244 .word 536872192 245 .word 536870912 246 .word 1280 247 .word 536870992 248 .word 536872192 249 .word 536870992 250 .word 536870912 251 .word 536870912 252 .word 0 253 .word 536870912 254 .word 536870912 255 .word 80 256 .word 0 257 .word 0 258 .word 1280 259 .word 536870992 260 .word 1280 261 .word 80 262 .word 536870912 263 .word 80 264 .word 1280 265 .word 536870912 266 .word 536872192 267 .word 0 268 .word 0 269 .word 536870912 270 .word 0 271 .word 0 272 .word 536870912 273 .word 80 274 .word 536872192 275 .word 536870992 276 .word 0 277 .word 80 278 .word 1280 279 .word 536870912 280 .word 1280 281 .word 0 282 .word 0 283 .word 80 284 .word 536870912 285 .word 0 286 .word 536872192 287 .word 536870992 288 .word 536870912 289 .word 536870992 290 .word 0 291 .word 0 292 .word 536872192 293 .word 0 294 .word 0 295 .word 80 296 .word 536872192 297 .word 536870992 298 .word 1280 299 .word 80 300 .word 0 301 .word 536870912 302 .word 536872192 303 .word 536870992 304 .word 0 305 .word 536870992 306 .word 536870912 307 .word 0 308 .word 536870912 309 .word 536870992 310 .word 0 311 .word 536870912 312 .word 536870912 313 .word 0 314 .word 1280 315 .word 536870992 316 .word 536872192 317 .word 80 318 .word 536872192 319 .word 0 320 .word 1280 321 .word 0 322 .word 536870912 323 .word 536870912 324 .word 0 325 .word 0 326 .word 536872192 327 .word 536870992 328 .word 536870912 329 .word 80 330 .word 0 331 .word 536870912 332 .word 1280 333 .word 80 334 .word 1280 335 .word 536870912 336 .word 536872192 337 .word 536870912 338 .word 1280 339 .word 80 340 .word 1280 341 .word 80 342 .word 536870912 343 .word 0 344 .word 0 345 .word 536870912 346 .word 536870912 347 .word 0 348 .word 536872192 349 .word 536870912 350 .word 0 351 .word 536870992 352 .word 1280 353 .word 536870992 354 .word 536872192 355 .word 80 356 .word 536870912 357 .word 0 358 .word 81984 359 .word 32770 360 .word -2147401728 361 .word 0 362 .word 0 363 .word 32770 364 .word -2147483584 365 .word 32768 366 .word 81920 367 .word 0 368 .word 0 369 .word 2 370 .word -2147401664 371 .word 32768 372 .word 81920 373 .word 2 374 .word -2147483584 375 .word 32768 376 .word 64 377 .word 32768 378 .word 64 379 .word 2 380 .word -2147483648 381 .word 32770 382 .word -2147401664 383 .word 2 384 .word -2147483584 385 .word 32770 386 .word -2147483648 387 .word 0 388 .word 81984 389 .word 32768 390 .word 0 391 .word 0 392 .word 64 393 .word 32770 394 .word -2147401728 395 .word 0 396 .word 81920 397 .word 2 398 .word -2147401728 399 .word 32770 400 .word -2147483648 401 .word 32770 402 .word -2147483584 403 .word 2 404 .word -2147401664 405 .word 32768 406 .word 81984 407 .word 2 408 .word -2147401728 409 .word 2 410 .word -2147483648 411 .word 32768 412 .word 81984 413 .word 0 414 .word 64 415 .word 32770 416 .word -2147401664 417 .word 0 418 .word 81920 419 .word 32768 420 .word 0 421 .word 32770 422 .word -2147401728 423 .word 32768 424 .word 0 425 .word 2 426 .word -2147483584 427 .word 0 428 .word 81984 429 .word 2 430 .word -2147483648 431 .word 32770 432 .word -2147401728 433 .word 32768 434 .word 81920 435 .word 0 436 .word 0 437 .word 0 438 .word 81920 439 .word 2 440 .word -2147483584 441 .word 32770 442 .word -2147401664 443 .word 32768 444 .word 81920 445 .word 32768 446 .word 64 447 .word 0 448 .word 81920 449 .word 0 450 .word 0 451 .word 32770 452 .word -2147483584 453 .word 32768 454 .word 81984 455 .word 2 456 .word -2147483648 457 .word 32768 458 .word 0 459 .word 32770 460 .word -2147401664 461 .word 0 462 .word 64 463 .word 2 464 .word -2147401664 465 .word 2 466 .word -2147401728 467 .word 32768 468 .word 64 469 .word 32770 470 .word -2147483648 471 .word 32768 472 .word 81984 473 .word 0 474 .word 81984 475 .word 32770 476 .word -2147483648 477 .word 2 478 .word -2147401664 479 .word 0 480 .word 64 481 .word 32770 482 .word -2147483584 483 .word 2 484 .word -2147401728 485 .word 1073742336 486 .word 135266312 487 .word 1073741824 488 .word 135270408 489 .word 1073741824 490 .word 135270408 491 .word 0 492 .word 4096 493 .word 512 494 .word 135270400 495 .word 1073742336 496 .word 4104 497 .word 1073742336 498 .word 8 499 .word 1073741824 500 .word 135266312 501 .word 0 502 .word 0 503 .word 512 504 .word 135266304 505 .word 512 506 .word 135266304 507 .word 1073742336 508 .word 135270408 509 .word 1073741824 510 .word 4104 511 .word 0 512 .word 0 513 .word 512 514 .word 4096 515 .word 1073742336 516 .word 8 517 .word 1073741824 518 .word 8 519 .word 0 520 .word 135266304 521 .word 512 522 .word 0 523 .word 1073742336 524 .word 135266312 525 .word 0 526 .word 4096 527 .word 512 528 .word 0 529 .word 1073741824 530 .word 135266312 531 .word 0 532 .word 135270400 533 .word 1073742336 534 .word 4104 535 .word 1073741824 536 .word 8 537 .word 0 538 .word 135270400 539 .word 512 540 .word 4096 541 .word 0 542 .word 135266304 543 .word 512 544 .word 135270400 545 .word 1073742336 546 .word 135270408 547 .word 1073741824 548 .word 4104 549 .word 512 550 .word 4096 551 .word 1073742336 552 .word 8 553 .word 512 554 .word 135266304 555 .word 1073742336 556 .word 135270408 557 .word 1073741824 558 .word 4104 559 .word 0 560 .word 0 561 .word 0 562 .word 0 563 .word 512 564 .word 135266304 565 .word 0 566 .word 135270400 567 .word 512 568 .word 4096 569 .word 1073742336 570 .word 4104 571 .word 1073741824 572 .word 8 573 .word 1073742336 574 .word 135266312 575 .word 1073741824 576 .word 135270408 577 .word 1073741824 578 .word 135270408 579 .word 0 580 .word 4096 581 .word 1073742336 582 .word 135270408 583 .word 1073741824 584 .word 4104 585 .word 1073741824 586 .word 8 587 .word 0 588 .word 135266304 589 .word 1073742336 590 .word 8 591 .word 1073741824 592 .word 135266312 593 .word 512 594 .word 135270400 595 .word 1073742336 596 .word 4104 597 .word 1073741824 598 .word 135266312 599 .word 0 600 .word 135270400 601 .word 512 602 .word 0 603 .word 1073742336 604 .word 135266312 605 .word 0 606 .word 4096 607 .word 512 608 .word 0 609 .word 0 610 .word 135266304 611 .word 512 612 .word 135270400 613 .word 0 614 .word 40960 615 .word 10248 616 .word 40960 617 .word 10248 618 .word 0 619 .word 268445696 620 .word 40960 621 .word 8 622 .word 0 623 .word 0 624 .word 40960 625 .word 268435456 626 .word 0 627 .word 10248 628 .word 0 629 .word 268435464 630 .word 40960 631 .word 8 632 .word 0 633 .word 10240 634 .word 40960 635 .word 268435464 636 .word 40960 637 .word 268445696 638 .word 40960 639 .word 268445704 640 .word 0 641 .word 8 642 .word 40960 643 .word 268435456 644 .word 0 645 .word 10240 646 .word 0 647 .word 268435464 648 .word 0 649 .word 268435464 650 .word 0 651 .word 0 652 .word 0 653 .word 268435456 654 .word 40960 655 .word 268445704 656 .word 40960 657 .word 268445704 658 .word 40960 659 .word 10240 660 .word 40960 661 .word 268445704 662 .word 0 663 .word 268435456 664 .word 40960 665 .word 0 666 .word 0 667 .word 268445696 668 .word 0 669 .word 10248 670 .word 40960 671 .word 10240 672 .word 0 673 .word 268445696 674 .word 0 675 .word 8 676 .word 40960 677 .word 8 678 .word 0 679 .word 268445696 680 .word 40960 681 .word 0 682 .word 40960 683 .word 10240 684 .word 0 685 .word 268435456 686 .word 0 687 .word 10248 688 .word 0 689 .word 268445696 690 .word 40960 691 .word 268435464 692 .word 40960 693 .word 10240 694 .word 40960 695 .word 268435456 696 .word 0 697 .word 268445704 698 .word 0 699 .word 10248 700 .word 40960 701 .word 268435464 702 .word 40960 703 .word 0 704 .word 40960 705 .word 10240 706 .word 0 707 .word 268445704 708 .word 0 709 .word 268445704 710 .word 40960 711 .word 8 712 .word 40960 713 .word 268445696 714 .word 0 715 .word 268445704 716 .word 40960 717 .word 10248 718 .word 0 719 .word 0 720 .word 0 721 .word 268435464 722 .word 0 723 .word 268445696 724 .word 0 725 .word 8 726 .word 40960 727 .word 10240 728 .word 40960 729 .word 268435456 730 .word 40960 731 .word 8 732 .word 0 733 .word 0 734 .word 0 735 .word 268435464 736 .word 0 737 .word 10248 738 .word 40960 739 .word 268435456 740 .word 40960 741 .word 134348800 742 .word 640 743 .word 134349056 744 .word 0 745 .word 0 746 .word 268435456 747 .word 134349056 748 .word 268436096 749 .word 134349056 750 .word 0 751 .word 0 752 .word 640 753 .word 134349056 754 .word 268436096 755 .word 256 756 .word 0 757 .word 134348800 758 .word 268435456 759 .word 256 760 .word 268436096 761 .word 256 762 .word 0 763 .word 134348800 764 .word 640 765 .word 256 766 .word 640 767 .word 134348800 768 .word 268435456 769 .word 134348800 770 .word 0 771 .word 0 772 .word 268436096 773 .word 0 774 .word 0 775 .word 256 776 .word 640 777 .word 134348800 778 .word 268436096 779 .word 0 780 .word 268435456 781 .word 256 782 .word 268435456 783 .word 134348800 784 .word 268436096 785 .word 0 786 .word 640 787 .word 134349056 788 .word 640 789 .word 134349056 790 .word 640 791 .word 0 792 .word 0 793 .word 256 794 .word 268436096 795 .word 134349056 796 .word 268435456 797 .word 0 798 .word 268436096 799 .word 256 800 .word 268435456 801 .word 134349056 802 .word 268435456 803 .word 134348800 804 .word 0 805 .word 134348800 806 .word 268435456 807 .word 0 808 .word 640 809 .word 134349056 810 .word 640 811 .word 256 812 .word 268435456 813 .word 134349056 814 .word 268436096 815 .word 256 816 .word 0 817 .word 0 818 .word 268436096 819 .word 134348800 820 .word 640 821 .word 256 822 .word 0 823 .word 134348800 824 .word 268435456 825 .word 134348800 826 .word 0 827 .word 0 828 .word 268436096 829 .word 134348800 830 .word 640 831 .word 134349056 832 .word 268436096 833 .word 256 834 .word 268435456 835 .word 134349056 836 .word 0 837 .word 256 838 .word 268436096 839 .word 134349056 840 .word 268435456 841 .word 0 842 .word 0 843 .word 134349056 844 .word 640 845 .word 0 846 .word 640 847 .word 0 848 .word 268435456 849 .word 134349056 850 .word 0 851 .word 256 852 .word 268436096 853 .word 0 854 .word 268435456 855 .word 256 856 .word 640 857 .word 134348800 858 .word 268436096 859 .word 0 860 .word 0 861 .word 134349056 862 .word 268435456 863 .word 134348800 864 .word 0 865 .word 256 866 .word 640 867 .word 134348800 868 .word 268436096 869 .word 160 870 .word 0 871 .word -2147467104 872 .word 16 873 .word -2147467264 874 .word 262160 875 .word 0 876 .word 0 877 .word 0 878 .word 262144 879 .word -2147467264 880 .word 262160 881 .word -2147483488 882 .word 262160 883 .word 16544 884 .word 262144 885 .word -2147467104 886 .word 262160 887 .word 160 888 .word 0 889 .word 0 890 .word 0 891 .word -2147467264 892 .word 16 893 .word -2147483648 894 .word 16 895 .word 16384 896 .word 0 897 .word -2147467104 898 .word 16 899 .word -2147483648 900 .word 262160 901 .word 16384 902 .word 262144 903 .word -2147483488 904 .word 262160 905 .word -2147483488 906 .word 16 907 .word 16384 908 .word 262144 909 .word -2147467264 910 .word 16 911 .word 16544 912 .word 0 913 .word 16544 914 .word 262144 915 .word -2147483488 916 .word 16 917 .word 16544 918 .word 0 919 .word 0 920 .word 262144 921 .word -2147483648 922 .word 262160 923 .word -2147467104 924 .word 262160 925 .word 160 926 .word 262144 927 .word -2147483648 928 .word 16 929 .word 16384 930 .word 0 931 .word 160 932 .word 262144 933 .word 16384 934 .word 0 935 .word 160 936 .word 262144 937 .word 160 938 .word 0 939 .word -2147467264 940 .word 262160 941 .word -2147467264 942 .word 262160 943 .word -2147467104 944 .word 16 945 .word -2147467104 946 .word 16 947 .word -2147483648 948 .word 16 949 .word -2147483488 950 .word 16 951 .word 16384 952 .word 0 953 .word 16384 954 .word 262144 955 .word 160 956 .word 0 957 .word 16544 958 .word 262144 959 .word -2147483648 960 .word 262160 961 .word -2147483488 962 .word 262160 963 .word 16544 964 .word 262144 965 .word -2147483648 966 .word 262160 967 .word -2147467264 968 .word 16 969 .word -2147467104 970 .word 262160 971 .word 16544 972 .word 0 973 .word 160 974 .word 262144 975 .word 0 976 .word 0 977 .word -2147483648 978 .word 16 979 .word -2147467104 980 .word 262160 981 .word 0 982 .word 0 983 .word -2147483488 984 .word 262160 985 .word 16544 986 .word 0 987 .word 0 988 .word 262144 989 .word -2147467264 990 .word 16 991 .word 16384 992 .word 262144 993 .word 0 994 .word 262144 995 .word -2147483488 996 .word 16 997 .word 67174400 998 .word 67635200 999 .word 0 1000 .word 67633152 1001 .word 4 1002 .word 0 1003 .word 67174404 1004 .word 67635200 1005 .word 67174400 1006 .word 0 1007 .word 67174400 1008 .word 67635200 1009 .word 0 1010 .word 2048 1011 .word 67174400 1012 .word 0 1013 .word 4 1014 .word 2048 1015 .word 67174404 1016 .word 0 1017 .word 67174404 1018 .word 67635200 1019 .word 4 1020 .word 67633152 1021 .word 67174404 1022 .word 67633152 1023 .word 4 1024 .word 67635200 1025 .word 0 1026 .word 67633152 1027 .word 0 1028 .word 2048 1029 .word 67174404 1030 .word 0 1031 .word 67174400 1032 .word 2048 1033 .word 67174400 1034 .word 67633152 1035 .word 0 1036 .word 67635200 1037 .word 4 1038 .word 67633152 1039 .word 4 1040 .word 2048 1041 .word 67174404 1042 .word 2048 1043 .word 67174404 1044 .word 67633152 1045 .word 0 1046 .word 67635200 1047 .word 0 1048 .word 0 1049 .word 0 1050 .word 0 1051 .word 67174404 1052 .word 2048 1053 .word 67174400 1054 .word 2048 1055 .word 67174400 1056 .word 67633152 1057 .word 4 1058 .word 67635200 1059 .word 4 1060 .word 0 1061 .word 4 1062 .word 67635200 1063 .word 4 1064 .word 0 1065 .word 67174404 1066 .word 67633152 1067 .word 0 1068 .word 67633152 1069 .word 0 1070 .word 2048 1071 .word 67174404 1072 .word 2048 1073 .word 0 1074 .word 67633152 1075 .word 4 1076 .word 67635200 1077 .word 67174400 1078 .word 67633152 1079 .word 0 1080 .word 2048 1081 .word 67174400 1082 .word 2048 1083 .word 67174404 1084 .word 0 1085 .word 67174404 1086 .word 2048 1087 .word 67174400 1088 .word 0 1089 .word 4 1090 .word 0 1091 .word 67174400 1092 .word 67635200 1093 .word 0 1094 .word 0 1095 .word 67174404 1096 .word 67635200 1097 .word 4 1098 .word 2048 1099 .word 67174400 1100 .word 2048 1101 .word 67174404 1102 .word 0 1103 .word 67174400 1104 .word 67633152 1105 .word 67174400 1106 .word 67635200 1107 .word 0 1108 .word 0 1109 .word 67174404 1110 .word 67635200 1111 .word 4 1112 .word 67633152 1113 .word 4 1114 .word 67633152 1115 .word 0 1116 .word 67635200 1117 .word 0 1118 .word 67635200 1119 .word 4 1120 .word 2048 1121 .word 67174400 1122 .word 0 1123 .word 67174404 1124 .word 67633152 1125 .type des_sbox_table,#object 1126 .size des_sbox_table,4096 1127 1128 .align 32 1129 ! 1130 ! CONSTANT POOL 1131 ! 1132 .section ".text",#alloc,#execinstr 1133 1134 des_ip_table: 1135 .word 0 1136 .word 0 1137 .word 0 1138 .word 1024 1139 .word 8388608 1140 .word 640 1141 .word 8388608 1142 .word 1664 1143 .word 0 1144 .word 4194304 1145 .word 0 1146 .word 4195328 1147 .word 8388608 1148 .word 4194944 1149 .word 8388608 1150 .word 4195968 1151 .word 0 1152 .word 2621440 1153 .word 0 1154 .word 2622464 1155 .word 8388608 1156 .word 2622080 1157 .word 8388608 1158 .word 2623104 1159 .word 0 1160 .word 6815744 1161 .word 0 1162 .word 6816768 1163 .word 8388608 1164 .word 6816384 1165 .word 8388608 1166 .word 6817408 1167 .word 4 1168 .word 0 1169 .word 4 1170 .word 1024 1171 .word 8388612 1172 .word 640 1173 .word 8388612 1174 .word 1664 1175 .word 4 1176 .word 4194304 1177 .word 4 1178 .word 4195328 1179 .word 8388612 1180 .word 4194944 1181 .word 8388612 1182 .word 4195968 1183 .word 4 1184 .word 2621440 1185 .word 4 1186 .word 2622464 1187 .word 8388612 1188 .word 2622080 1189 .word 8388612 1190 .word 2623104 1191 .word 4 1192 .word 6815744 1193 .word 4 1194 .word 6816768 1195 .word 8388612 1196 .word 6816384 1197 .word 8388612 1198 .word 6817408 1199 .word 2 1200 .word -2147483648 1201 .word 2 1202 .word -2147482624 1203 .word 8388610 1204 .word -2147483008 1205 .word 8388610 1206 .word -2147481984 1207 .word 2 1208 .word -2143289344 1209 .word 2 1210 .word -2143288320 1211 .word 8388610 1212 .word -2143288704 1213 .word 8388610 1214 .word -2143287680 1215 .word 2 1216 .word -2144862208 1217 .word 2 1218 .word -2144861184 1219 .word 8388610 1220 .word -2144861568 1221 .word 8388610 1222 .word -2144860544 1223 .word 2 1224 .word -2140667904 1225 .word 2 1226 .word -2140666880 1227 .word 8388610 1228 .word -2140667264 1229 .word 8388610 1230 .word -2140666240 1231 .word 6 1232 .word -2147483648 1233 .word 6 1234 .word -2147482624 1235 .word 8388614 1236 .word -2147483008 1237 .word 8388614 1238 .word -2147481984 1239 .word 6 1240 .word -2143289344 1241 .word 6 1242 .word -2143288320 1243 .word 8388614 1244 .word -2143288704 1245 .word 8388614 1246 .word -2143287680 1247 .word 6 1248 .word -2144862208 1249 .word 6 1250 .word -2144861184 1251 .word 8388614 1252 .word -2144861568 1253 .word 8388614 1254 .word -2144860544 1255 .word 6 1256 .word -2140667904 1257 .word 6 1258 .word -2140666880 1259 .word 8388614 1260 .word -2140667264 1261 .word 8388614 1262 .word -2140666240 1263 .word 16384 1264 .word 0 1265 .word 16384 1266 .word 1024 1267 .word 8404992 1268 .word 640 1269 .word 8404992 1270 .word 1664 1271 .word 16384 1272 .word 4194304 1273 .word 16384 1274 .word 4195328 1275 .word 8404992 1276 .word 4194944 1277 .word 8404992 1278 .word 4195968 1279 .word 16384 1280 .word 2621440 1281 .word 16384 1282 .word 2622464 1283 .word 8404992 1284 .word 2622080 1285 .word 8404992 1286 .word 2623104 1287 .word 16384 1288 .word 6815744 1289 .word 16384 1290 .word 6816768 1291 .word 8404992 1292 .word 6816384 1293 .word 8404992 1294 .word 6817408 1295 .word 16388 1296 .word 0 1297 .word 16388 1298 .word 1024 1299 .word 8404996 1300 .word 640 1301 .word 8404996 1302 .word 1664 1303 .word 16388 1304 .word 4194304 1305 .word 16388 1306 .word 4195328 1307 .word 8404996 1308 .word 4194944 1309 .word 8404996 1310 .word 4195968 1311 .word 16388 1312 .word 2621440 1313 .word 16388 1314 .word 2622464 1315 .word 8404996 1316 .word 2622080 1317 .word 8404996 1318 .word 2623104 1319 .word 16388 1320 .word 6815744 1321 .word 16388 1322 .word 6816768 1323 .word 8404996 1324 .word 6816384 1325 .word 8404996 1326 .word 6817408 1327 .word 16386 1328 .word -2147483648 1329 .word 16386 1330 .word -2147482624 1331 .word 8404994 1332 .word -2147483008 1333 .word 8404994 1334 .word -2147481984 1335 .word 16386 1336 .word -2143289344 1337 .word 16386 1338 .word -2143288320 1339 .word 8404994 1340 .word -2143288704 1341 .word 8404994 1342 .word -2143287680 1343 .word 16386 1344 .word -2144862208 1345 .word 16386 1346 .word -2144861184 1347 .word 8404994 1348 .word -2144861568 1349 .word 8404994 1350 .word -2144860544 1351 .word 16386 1352 .word -2140667904 1353 .word 16386 1354 .word -2140666880 1355 .word 8404994 1356 .word -2140667264 1357 .word 8404994 1358 .word -2140666240 1359 .word 16390 1360 .word -2147483648 1361 .word 16390 1362 .word -2147482624 1363 .word 8404998 1364 .word -2147483008 1365 .word 8404998 1366 .word -2147481984 1367 .word 16390 1368 .word -2143289344 1369 .word 16390 1370 .word -2143288320 1371 .word 8404998 1372 .word -2143288704 1373 .word 8404998 1374 .word -2143287680 1375 .word 16390 1376 .word -2144862208 1377 .word 16390 1378 .word -2144861184 1379 .word 8404998 1380 .word -2144861568 1381 .word 8404998 1382 .word -2144860544 1383 .word 16390 1384 .word -2140667904 1385 .word 16390 1386 .word -2140666880 1387 .word 8404998 1388 .word -2140667264 1389 .word 8404998 1390 .word -2140666240 1391 .word 10240 1392 .word 0 1393 .word 10240 1394 .word 1024 1395 .word 8398848 1396 .word 640 1397 .word 8398848 1398 .word 1664 1399 .word 10240 1400 .word 4194304 1401 .word 10240 1402 .word 4195328 1403 .word 8398848 1404 .word 4194944 1405 .word 8398848 1406 .word 4195968 1407 .word 10240 1408 .word 2621440 1409 .word 10240 1410 .word 2622464 1411 .word 8398848 1412 .word 2622080 1413 .word 8398848 1414 .word 2623104 1415 .word 10240 1416 .word 6815744 1417 .word 10240 1418 .word 6816768 1419 .word 8398848 1420 .word 6816384 1421 .word 8398848 1422 .word 6817408 1423 .word 10244 1424 .word 0 1425 .word 10244 1426 .word 1024 1427 .word 8398852 1428 .word 640 1429 .word 8398852 1430 .word 1664 1431 .word 10244 1432 .word 4194304 1433 .word 10244 1434 .word 4195328 1435 .word 8398852 1436 .word 4194944 1437 .word 8398852 1438 .word 4195968 1439 .word 10244 1440 .word 2621440 1441 .word 10244 1442 .word 2622464 1443 .word 8398852 1444 .word 2622080 1445 .word 8398852 1446 .word 2623104 1447 .word 10244 1448 .word 6815744 1449 .word 10244 1450 .word 6816768 1451 .word 8398852 1452 .word 6816384 1453 .word 8398852 1454 .word 6817408 1455 .word 10242 1456 .word -2147483648 1457 .word 10242 1458 .word -2147482624 1459 .word 8398850 1460 .word -2147483008 1461 .word 8398850 1462 .word -2147481984 1463 .word 10242 1464 .word -2143289344 1465 .word 10242 1466 .word -2143288320 1467 .word 8398850 1468 .word -2143288704 1469 .word 8398850 1470 .word -2143287680 1471 .word 10242 1472 .word -2144862208 1473 .word 10242 1474 .word -2144861184 1475 .word 8398850 1476 .word -2144861568 1477 .word 8398850 1478 .word -2144860544 1479 .word 10242 1480 .word -2140667904 1481 .word 10242 1482 .word -2140666880 1483 .word 8398850 1484 .word -2140667264 1485 .word 8398850 1486 .word -2140666240 1487 .word 10246 1488 .word -2147483648 1489 .word 10246 1490 .word -2147482624 1491 .word 8398854 1492 .word -2147483008 1493 .word 8398854 1494 .word -2147481984 1495 .word 10246 1496 .word -2143289344 1497 .word 10246 1498 .word -2143288320 1499 .word 8398854 1500 .word -2143288704 1501 .word 8398854 1502 .word -2143287680 1503 .word 10246 1504 .word -2144862208 1505 .word 10246 1506 .word -2144861184 1507 .word 8398854 1508 .word -2144861568 1509 .word 8398854 1510 .word -2144860544 1511 .word 10246 1512 .word -2140667904 1513 .word 10246 1514 .word -2140666880 1515 .word 8398854 1516 .word -2140667264 1517 .word 8398854 1518 .word -2140666240 1519 .word 26624 1520 .word 0 1521 .word 26624 1522 .word 1024 1523 .word 8415232 1524 .word 640 1525 .word 8415232 1526 .word 1664 1527 .word 26624 1528 .word 4194304 1529 .word 26624 1530 .word 4195328 1531 .word 8415232 1532 .word 4194944 1533 .word 8415232 1534 .word 4195968 1535 .word 26624 1536 .word 2621440 1537 .word 26624 1538 .word 2622464 1539 .word 8415232 1540 .word 2622080 1541 .word 8415232 1542 .word 2623104 1543 .word 26624 1544 .word 6815744 1545 .word 26624 1546 .word 6816768 1547 .word 8415232 1548 .word 6816384 1549 .word 8415232 1550 .word 6817408 1551 .word 26628 1552 .word 0 1553 .word 26628 1554 .word 1024 1555 .word 8415236 1556 .word 640 1557 .word 8415236 1558 .word 1664 1559 .word 26628 1560 .word 4194304 1561 .word 26628 1562 .word 4195328 1563 .word 8415236 1564 .word 4194944 1565 .word 8415236 1566 .word 4195968 1567 .word 26628 1568 .word 2621440 1569 .word 26628 1570 .word 2622464 1571 .word 8415236 1572 .word 2622080 1573 .word 8415236 1574 .word 2623104 1575 .word 26628 1576 .word 6815744 1577 .word 26628 1578 .word 6816768 1579 .word 8415236 1580 .word 6816384 1581 .word 8415236 1582 .word 6817408 1583 .word 26626 1584 .word -2147483648 1585 .word 26626 1586 .word -2147482624 1587 .word 8415234 1588 .word -2147483008 1589 .word 8415234 1590 .word -2147481984 1591 .word 26626 1592 .word -2143289344 1593 .word 26626 1594 .word -2143288320 1595 .word 8415234 1596 .word -2143288704 1597 .word 8415234 1598 .word -2143287680 1599 .word 26626 1600 .word -2144862208 1601 .word 26626 1602 .word -2144861184 1603 .word 8415234 1604 .word -2144861568 1605 .word 8415234 1606 .word -2144860544 1607 .word 26626 1608 .word -2140667904 1609 .word 26626 1610 .word -2140666880 1611 .word 8415234 1612 .word -2140667264 1613 .word 8415234 1614 .word -2140666240 1615 .word 26630 1616 .word -2147483648 1617 .word 26630 1618 .word -2147482624 1619 .word 8415238 1620 .word -2147483008 1621 .word 8415238 1622 .word -2147481984 1623 .word 26630 1624 .word -2143289344 1625 .word 26630 1626 .word -2143288320 1627 .word 8415238 1628 .word -2143288704 1629 .word 8415238 1630 .word -2143287680 1631 .word 26630 1632 .word -2144862208 1633 .word 26630 1634 .word -2144861184 1635 .word 8415238 1636 .word -2144861568 1637 .word 8415238 1638 .word -2144860544 1639 .word 26630 1640 .word -2140667904 1641 .word 26630 1642 .word -2140666880 1643 .word 8415238 1644 .word -2140667264 1645 .word 8415238 1646 .word -2140666240 1647 .word 0 1648 .word 0 1649 .word 0 1650 .word 20480 1651 .word 0 1652 .word 2048 1653 .word 0 1654 .word 22528 1655 .word 0 1656 .word 83886080 1657 .word 0 1658 .word 83906560 1659 .word 0 1660 .word 83888128 1661 .word 0 1662 .word 83908608 1663 .word 0 1664 .word 8388608 1665 .word 0 1666 .word 8409088 1667 .word 0 1668 .word 8390656 1669 .word 0 1670 .word 8411136 1671 .word 0 1672 .word 92274688 1673 .word 0 1674 .word 92295168 1675 .word 0 1676 .word 92276736 1677 .word 0 1678 .word 92297216 1679 .word 80 1680 .word 0 1681 .word 80 1682 .word 20480 1683 .word 80 1684 .word 2048 1685 .word 80 1686 .word 22528 1687 .word 80 1688 .word 83886080 1689 .word 80 1690 .word 83906560 1691 .word 80 1692 .word 83888128 1693 .word 80 1694 .word 83908608 1695 .word 80 1696 .word 8388608 1697 .word 80 1698 .word 8409088 1699 .word 80 1700 .word 8390656 1701 .word 80 1702 .word 8411136 1703 .word 80 1704 .word 92274688 1705 .word 80 1706 .word 92295168 1707 .word 80 1708 .word 92276736 1709 .word 80 1710 .word 92297216 1711 .word 8 1712 .word 0 1713 .word 8 1714 .word 20480 1715 .word 8 1716 .word 2048 1717 .word 8 1718 .word 22528 1719 .word 8 1720 .word 83886080 1721 .word 8 1722 .word 83906560 1723 .word 8 1724 .word 83888128 1725 .word 8 1726 .word 83908608 1727 .word 8 1728 .word 8388608 1729 .word 8 1730 .word 8409088 1731 .word 8 1732 .word 8390656 1733 .word 8 1734 .word 8411136 1735 .word 8 1736 .word 92274688 1737 .word 8 1738 .word 92295168 1739 .word 8 1740 .word 92276736 1741 .word 8 1742 .word 92297216 1743 .word 88 1744 .word 0 1745 .word 88 1746 .word 20480 1747 .word 88 1748 .word 2048 1749 .word 88 1750 .word 22528 1751 .word 88 1752 .word 83886080 1753 .word 88 1754 .word 83906560 1755 .word 88 1756 .word 83888128 1757 .word 88 1758 .word 83908608 1759 .word 88 1760 .word 8388608 1761 .word 88 1762 .word 8409088 1763 .word 88 1764 .word 8390656 1765 .word 88 1766 .word 8411136 1767 .word 88 1768 .word 92274688 1769 .word 88 1770 .word 92295168 1771 .word 88 1772 .word 92276736 1773 .word 88 1774 .word 92297216 1775 .word 327680 1776 .word 4 1777 .word 327680 1778 .word 20484 1779 .word 327680 1780 .word 2052 1781 .word 327680 1782 .word 22532 1783 .word 327680 1784 .word 83886084 1785 .word 327680 1786 .word 83906564 1787 .word 327680 1788 .word 83888132 1789 .word 327680 1790 .word 83908612 1791 .word 327680 1792 .word 8388612 1793 .word 327680 1794 .word 8409092 1795 .word 327680 1796 .word 8390660 1797 .word 327680 1798 .word 8411140 1799 .word 327680 1800 .word 92274692 1801 .word 327680 1802 .word 92295172 1803 .word 327680 1804 .word 92276740 1805 .word 327680 1806 .word 92297220 1807 .word 327760 1808 .word 4 1809 .word 327760 1810 .word 20484 1811 .word 327760 1812 .word 2052 1813 .word 327760 1814 .word 22532 1815 .word 327760 1816 .word 83886084 1817 .word 327760 1818 .word 83906564 1819 .word 327760 1820 .word 83888132 1821 .word 327760 1822 .word 83908612 1823 .word 327760 1824 .word 8388612 1825 .word 327760 1826 .word 8409092 1827 .word 327760 1828 .word 8390660 1829 .word 327760 1830 .word 8411140 1831 .word 327760 1832 .word 92274692 1833 .word 327760 1834 .word 92295172 1835 .word 327760 1836 .word 92276740 1837 .word 327760 1838 .word 92297220 1839 .word 327688 1840 .word 4 1841 .word 327688 1842 .word 20484 1843 .word 327688 1844 .word 2052 1845 .word 327688 1846 .word 22532 1847 .word 327688 1848 .word 83886084 1849 .word 327688 1850 .word 83906564 1851 .word 327688 1852 .word 83888132 1853 .word 327688 1854 .word 83908612 1855 .word 327688 1856 .word 8388612 1857 .word 327688 1858 .word 8409092 1859 .word 327688 1860 .word 8390660 1861 .word 327688 1862 .word 8411140 1863 .word 327688 1864 .word 92274692 1865 .word 327688 1866 .word 92295172 1867 .word 327688 1868 .word 92276740 1869 .word 327688 1870 .word 92297220 1871 .word 327768 1872 .word 4 1873 .word 327768 1874 .word 20484 1875 .word 327768 1876 .word 2052 1877 .word 327768 1878 .word 22532 1879 .word 327768 1880 .word 83886084 1881 .word 327768 1882 .word 83906564 1883 .word 327768 1884 .word 83888132 1885 .word 327768 1886 .word 83908612 1887 .word 327768 1888 .word 8388612 1889 .word 327768 1890 .word 8409092 1891 .word 327768 1892 .word 8390660 1893 .word 327768 1894 .word 8411140 1895 .word 327768 1896 .word 92274692 1897 .word 327768 1898 .word 92295172 1899 .word 327768 1900 .word 92276740 1901 .word 327768 1902 .word 92297220 1903 .word 32768 1904 .word 0 1905 .word 32768 1906 .word 20480 1907 .word 32768 1908 .word 2048 1909 .word 32768 1910 .word 22528 1911 .word 32768 1912 .word 83886080 1913 .word 32768 1914 .word 83906560 1915 .word 32768 1916 .word 83888128 1917 .word 32768 1918 .word 83908608 1919 .word 32768 1920 .word 8388608 1921 .word 32768 1922 .word 8409088 1923 .word 32768 1924 .word 8390656 1925 .word 32768 1926 .word 8411136 1927 .word 32768 1928 .word 92274688 1929 .word 32768 1930 .word 92295168 1931 .word 32768 1932 .word 92276736 1933 .word 32768 1934 .word 92297216 1935 .word 32848 1936 .word 0 1937 .word 32848 1938 .word 20480 1939 .word 32848 1940 .word 2048 1941 .word 32848 1942 .word 22528 1943 .word 32848 1944 .word 83886080 1945 .word 32848 1946 .word 83906560 1947 .word 32848 1948 .word 83888128 1949 .word 32848 1950 .word 83908608 1951 .word 32848 1952 .word 8388608 1953 .word 32848 1954 .word 8409088 1955 .word 32848 1956 .word 8390656 1957 .word 32848 1958 .word 8411136 1959 .word 32848 1960 .word 92274688 1961 .word 32848 1962 .word 92295168 1963 .word 32848 1964 .word 92276736 1965 .word 32848 1966 .word 92297216 1967 .word 32776 1968 .word 0 1969 .word 32776 1970 .word 20480 1971 .word 32776 1972 .word 2048 1973 .word 32776 1974 .word 22528 1975 .word 32776 1976 .word 83886080 1977 .word 32776 1978 .word 83906560 1979 .word 32776 1980 .word 83888128 1981 .word 32776 1982 .word 83908608 1983 .word 32776 1984 .word 8388608 1985 .word 32776 1986 .word 8409088 1987 .word 32776 1988 .word 8390656 1989 .word 32776 1990 .word 8411136 1991 .word 32776 1992 .word 92274688 1993 .word 32776 1994 .word 92295168 1995 .word 32776 1996 .word 92276736 1997 .word 32776 1998 .word 92297216 1999 .word 32856 2000 .word 0 2001 .word 32856 2002 .word 20480 2003 .word 32856 2004 .word 2048 2005 .word 32856 2006 .word 22528 2007 .word 32856 2008 .word 83886080 2009 .word 32856 2010 .word 83906560 2011 .word 32856 2012 .word 83888128 2013 .word 32856 2014 .word 83908608 2015 .word 32856 2016 .word 8388608 2017 .word 32856 2018 .word 8409088 2019 .word 32856 2020 .word 8390656 2021 .word 32856 2022 .word 8411136 2023 .word 32856 2024 .word 92274688 2025 .word 32856 2026 .word 92295168 2027 .word 32856 2028 .word 92276736 2029 .word 32856 2030 .word 92297216 2031 .word 360448 2032 .word 4 2033 .word 360448 2034 .word 20484 2035 .word 360448 2036 .word 2052 2037 .word 360448 2038 .word 22532 2039 .word 360448 2040 .word 83886084 2041 .word 360448 2042 .word 83906564 2043 .word 360448 2044 .word 83888132 2045 .word 360448 2046 .word 83908612 2047 .word 360448 2048 .word 8388612 2049 .word 360448 2050 .word 8409092 2051 .word 360448 2052 .word 8390660 2053 .word 360448 2054 .word 8411140 2055 .word 360448 2056 .word 92274692 2057 .word 360448 2058 .word 92295172 2059 .word 360448 2060 .word 92276740 2061 .word 360448 2062 .word 92297220 2063 .word 360528 2064 .word 4 2065 .word 360528 2066 .word 20484 2067 .word 360528 2068 .word 2052 2069 .word 360528 2070 .word 22532 2071 .word 360528 2072 .word 83886084 2073 .word 360528 2074 .word 83906564 2075 .word 360528 2076 .word 83888132 2077 .word 360528 2078 .word 83908612 2079 .word 360528 2080 .word 8388612 2081 .word 360528 2082 .word 8409092 2083 .word 360528 2084 .word 8390660 2085 .word 360528 2086 .word 8411140 2087 .word 360528 2088 .word 92274692 2089 .word 360528 2090 .word 92295172 2091 .word 360528 2092 .word 92276740 2093 .word 360528 2094 .word 92297220 2095 .word 360456 2096 .word 4 2097 .word 360456 2098 .word 20484 2099 .word 360456 2100 .word 2052 2101 .word 360456 2102 .word 22532 2103 .word 360456 2104 .word 83886084 2105 .word 360456 2106 .word 83906564 2107 .word 360456 2108 .word 83888132 2109 .word 360456 2110 .word 83908612 2111 .word 360456 2112 .word 8388612 2113 .word 360456 2114 .word 8409092 2115 .word 360456 2116 .word 8390660 2117 .word 360456 2118 .word 8411140 2119 .word 360456 2120 .word 92274692 2121 .word 360456 2122 .word 92295172 2123 .word 360456 2124 .word 92276740 2125 .word 360456 2126 .word 92297220 2127 .word 360536 2128 .word 4 2129 .word 360536 2130 .word 20484 2131 .word 360536 2132 .word 2052 2133 .word 360536 2134 .word 22532 2135 .word 360536 2136 .word 83886084 2137 .word 360536 2138 .word 83906564 2139 .word 360536 2140 .word 83888132 2141 .word 360536 2142 .word 83908612 2143 .word 360536 2144 .word 8388612 2145 .word 360536 2146 .word 8409092 2147 .word 360536 2148 .word 8390660 2149 .word 360536 2150 .word 8411140 2151 .word 360536 2152 .word 92274692 2153 .word 360536 2154 .word 92295172 2155 .word 360536 2156 .word 92276740 2157 .word 360536 2158 .word 92297220 2159 .type des_ip_table,#object 2160 .size des_ip_table,4096 2161 2162 2163 .section ".data",#alloc 2164 .align 32 2165 2166 2167 des_enc_const: 2168 2169 #ifdef __sparcv9 2170 2171 ! 2172 ! For v9, the addresses ar 64-bit long, so we should use .xword 2173 ! instead of .word, this makes the constant table bigger 2174 ! 2175 .xword (des_ip_table+0x0) ! initial permutation table 2176 .xword (des_ip_table+0x800) 2177 2178 .xword (des_fp_table+0x0) ! final permutation table 2179 2180 .xword (des_sbox_table+0x0) ! sboxes table 2181 .xword (des_sbox_table+0x200) 2182 .xword (des_sbox_table+0x400) 2183 .xword (des_sbox_table+0x600) 2184 .xword (des_sbox_table+0x800) 2185 .xword (des_sbox_table+0xa00) 2186 .xword (des_sbox_table+0xc00) 2187 .xword (des_sbox_table+0xe00) 2188 2189 .word 0 ! for alignment 2190 .word 7 ! counter for encrypt loop 2191 2192 .word 16515072 ! top_1 2193 .word 0 ! 2194 2195 .word 262143 ! mid_4 2196 .word -67108864 ! 2197 2198 .word 0 ! low_3 2199 .word 67108608 ! 2200 2201 .word -1431655766 ! 0xaaaaaaaaaaaaaaaa 2202 .word -1431655766 ! 2203 2204 .word 1431655765 ! 0x5555555555555555 2205 .word 1431655765 ! 2206 #else 2207 2208 ! 2209 ! For v8, the addresses are 32-bit long 2210 ! 2211 2212 .word (des_ip_table+0x0) ! initial permutation table 2213 .word (des_ip_table+0x800) 2214 2215 .word (des_fp_table+0x0) ! final permutation table 2216 2217 .word (des_sbox_table+0x0) ! sboxes table 2218 .word (des_sbox_table+0x200) 2219 .word (des_sbox_table+0x400) 2220 .word (des_sbox_table+0x600) 2221 .word (des_sbox_table+0x800) 2222 .word (des_sbox_table+0xa00) 2223 .word (des_sbox_table+0xc00) 2224 .word (des_sbox_table+0xe00) 2225 2226 .word 7 ! counter for encrypt loop 2227 2228 .word 16515072 ! top_1 2229 .word 0 ! 2230 2231 .word 262143 ! mid_4 2232 .word -67108864 ! 2233 2234 .word 0 ! low_3 2235 .word 67108608 ! 2236 2237 .word -1431655766 ! 0xaaaaaaaaaaaaaaaa 2238 .word -1431655766 ! 2239 2240 .word 1431655765 ! 0x5555555555555555 2241 .word 1431655765 ! 2242 #endif 2243 .type des_enc_const,#object 2244 .size des_enc_const,(.-des_enc_const) 2245 2246 2247 .section ".text",#alloc,#execinstr 2248 /* 000000 0 */ .align 32 2249 /* 000000 */ .skip 32 2250 ! 2251 ! SUBROUTINE des_crypt_impl 2252 ! 2253 ! OFFSET SOURCE LINE LABEL INSTRUCTION 2254 2255 .global des_crypt_impl 2256 2257 ! uint64_t des_crypt_impl(uint64_t *ks, uint64_t block, int one_or_three); 2258 ! 2259 ! ks is the key schedule, en/decryption is differentiated by computing 2260 ! an encryption key schedule for encryption and the reverse of it 2261 ! for decryption (for DES, 16 entries, for triple-DES, 48 entries) 2262 ! block is the 64-bit block to en/decrypt 2263 ! one_or_three is 1 for DES and 3 for triple-DES 2264 2265 des_crypt_impl: 2266 2267 #ifdef __sparcv9 2268 save %sp,-192,%sp 2269 #ifdef PIC 2270 .L0: 2271 call . + 8 2272 sethi %hi(_GLOBAL_OFFSET_TABLE_ - (.L0 - .)), %o1 2273 sethi %hi(des_enc_const), %g1 2274 2275 or %o1, %lo(_GLOBAL_OFFSET_TABLE_ - (.L0 - .)), %o1 2276 or %g1, %lo(des_enc_const),%g1 2277 2278 add %o1, %o7, %o1 2279 #else 2280 sethi %hh(des_enc_const),%o1 2281 sethi %lm(des_enc_const),%g1 2282 2283 or %o1,%hm(des_enc_const),%o1 2284 or %g1,%lo(des_enc_const),%g1 2285 2286 sllx %o1,32,%o1 2287 #endif 2288 sethi %hi(0xaaaaaaaa), %g3 2289 2290 #ifdef PIC 2291 ldx [%o1 + %g1], %i5 2292 #else 2293 or %o1,%g1,%i5 ! &des_enc_const 2294 #endif 2295 or %g3, %lo(0xaaaaaaaa), %g3 2296 2297 sllx %g3, 32, %o0 2298 2299 or %g3, %o0, %g3 ! 0xaaaaaaaaaaaaaaaa 2300 2301 srlx %g3, 1, %g2 ! 0x5555555555555555 2302 and %i1, %g3, %g1 2303 2304 sllx %g1, 7, %g3 2305 ldx [%i5 + 0], %l7 ! &(des_ip_table[0][0]) 2306 and %i1, %g2, %g2 2307 2308 srlx %g2, 7, %g4 2309 ldx [%i5 + 8], %l6 ! &(des_ip_table[1][0]) 2310 or %g1, %g3, %g1 2311 2312 srlx %g1, 21, %o0 2313 ld [%i5 + 92], %i4 ! 7 (for iteration counter) 2314 or %g2, %g4, %g2 2315 2316 srlx %g1, 5, %o1 2317 ldx [%i5 + 24], %l0 ! &(des_sbox_table[0][0]) 2318 and %o0, 0x7f8, %o0 2319 2320 srlx %g2, 13, %o2 2321 ldx [%l7 + %o0], %o0 2322 and %o1, 0x7f8, %o1 2323 2324 sllx %g2, 3, %o3 2325 ldx [%l6 + %o1], %o1 2326 and %o2, 0x7f8, %o2 2327 2328 srlx %g1, 53, %o4 2329 ldx [%l7 + %o2], %o2 2330 and %o3, 0x7f8, %o3 2331 2332 srlx %g1, 37, %o5 2333 ldx [%l6 + %o3], %o3 2334 and %o4, 0x7f8, %o4 2335 2336 srlx %g2, 45, %g1 2337 ldx [%l7 + %o4], %o4 2338 and %o5, 0x7f8, %o5 2339 2340 srlx %g2, 29, %g2 2341 ldx [%l6 + %o5], %o5 2342 and %g1, 0x7f8, %g1 2343 2344 sllx %o0, 6, %o0 2345 ldx [%l7 + %g1], %g1 2346 and %g2, 0x7f8, %g2 2347 2348 sllx %o1, 6, %o1 2349 ldx [%l6 + %g2], %g2 2350 or %o4, %o5, %o4 2351 2352 sllx %o2, 6, %o2 2353 ldx [%i5 + 32], %l1 ! &(des_sbox_table[1][0]) 2354 or %o0, %o1, %o0 2355 2356 sllx %o3, 6, %o3 2357 ldx [%i5 + 96], %g3 ! top_1 2358 or %o0, %o4, %o0 2359 2360 or %g1, %g2, %g1 2361 ldx [%i5 + 104], %g4 ! mid_4 2362 or %o2, %o3, %o2 2363 2364 and %o0, %g3, %o4 2365 ldx [%i5 + 112], %g2 ! low_3 2366 or %o2, %g1, %o1 2367 2368 sllx %o4, 8, %o4 2369 ldx [%i5 + 40], %l2 ! &(des_sbox_table[2][0]) 2370 and %o1, %g3, %o5 2371 2372 sllx %o5, 8, %o5 2373 ldx [%i5 + 48], %l3 ! &(des_sbox_table[3][0]) 2374 and %o0, %g2, %o2 2375 2376 srlx %o2, 5, %o2 2377 ldx [%i5 + 56], %l4 ! &(des_sbox_table[4][0]) 2378 and %o1, %g2, %o3 2379 2380 srlx %o3, 5, %o3 2381 ldx [%i0], %g2 ! ks[0] 2382 and %o0, %g4, %o0 2383 2384 or %o0, %o2, %o0 2385 ldx [%i5 + 64], %l5 ! &(des_sbox_table[5][0]) 2386 and %o1, %g4, %o1 2387 2388 or %o0, %o4, %o0 2389 ldx [%i5 + 72], %l6 ! &(des_sbox_table[6][0]) 2390 or %o1, %o3, %o1 2391 2392 xor %o0, %g2, %g1 2393 ldx [%i5 + 80], %l7 ! &(des_sbox_table[7][0]) 2394 or %o1, %o5, %o1 2395 #else 2396 2397 ! v8 version 2398 2399 save %sp,-144,%sp 2400 sethi %hi(des_enc_const), %g2 2401 2402 #ifdef PIC 2403 .L1: 2404 call .+8 2405 2406 sethi %hi(_GLOBAL_OFFSET_TABLE_ - (.L1 - .)), %g1 2407 2408 or %g1, %lo(_GLOBAL_OFFSET_TABLE_ - (.L1 - .)), %g1 2409 or %g2, %lo(des_enc_const), %g2 2410 #else 2411 or %g2, %lo(des_enc_const), %i5 2412 #endif 2413 srl %i2, 0, %g4 2414 sethi %hi(0xaaaaaaaa), %g3 2415 2416 sllx %i1, 32, %g5 2417 or %g3, %lo(0xaaaaaaaa), %g3 2418 2419 sllx %g3, 32, %o0 2420 add %o7, %g1, %g1 2421 2422 or %g3, %o0, %g3 ! 0xaaaaaaaaaaaaaaaa 2423 #ifdef PIC 2424 ld [%g1 + %g2], %i5 2425 #endif 2426 or %g4, %g5, %g4 2427 2428 srlx %g3, 1, %g2 ! 0x5555555555555555 2429 and %g4, %g3, %g1 2430 2431 sllx %g1, 7, %g3 2432 ld [%i5 + 0], %l7 ! &(des_ip_table[0][0]) 2433 and %g4, %g2, %g2 2434 2435 srlx %g2, 7, %g4 2436 ld [%i5 + 4], %l6 ! &(des_ip_table[1][0]) 2437 or %g1, %g3, %g1 2438 2439 srlx %g1, 21, %o0 2440 ld [%i5 + 44], %i4 ! 7 (for iteration counter) 2441 or %g2, %g4, %g2 2442 2443 srlx %g1, 5, %o1 2444 ld [%i5 + 12], %l0 ! &(des_sbox_table[0][0]) 2445 and %o0, 0x7f8, %o0 2446 2447 srlx %g2, 13, %o2 2448 ldx [%l7 + %o0], %o0 2449 and %o1, 0x7f8, %o1 2450 2451 sllx %g2, 3, %o3 2452 ldx [%l6 + %o1], %o1 2453 and %o2, 0x7f8, %o2 2454 2455 srlx %g1, 53, %o4 2456 ldx [%l7 + %o2], %o2 2457 and %o3, 0x7f8, %o3 2458 2459 srlx %g1, 37, %o5 2460 ldx [%l6 + %o3], %o3 2461 and %o4, 0x7f8, %o4 2462 2463 srlx %g2, 45, %g1 2464 ldx [%l7 + %o4], %o4 2465 and %o5, 0x7f8, %o5 2466 2467 srlx %g2, 29, %g2 2468 ldx [%l6 + %o5], %o5 2469 and %g1, 0x7f8, %g1 2470 2471 sllx %o0, 6, %o0 2472 ldx [%l7 + %g1], %g1 2473 and %g2, 0x7f8, %g2 2474 2475 sllx %o1, 6, %o1 2476 ldx [%l6 + %g2], %g2 2477 or %o4, %o5, %o4 2478 2479 sllx %o2, 6, %o2 2480 ld [%i5 + 16], %l1 ! &(des_sbox_table[1][0]) 2481 or %o0, %o1, %o0 2482 2483 sllx %o3, 6, %o3 2484 ldx [%i5 + 48], %g3 ! top_1 2485 or %o0, %o4, %o0 2486 2487 or %g1, %g2, %g1 2488 ldx [%i5 + 56], %g4 ! mid_4 2489 or %o2, %o3, %o2 2490 2491 and %o0, %g3, %o4 2492 ldx [%i5 + 64], %g2 ! low_3 2493 or %o2, %g1, %o1 2494 2495 sllx %o4, 8, %o4 2496 ld [%i5 + 20], %l2 ! &(des_sbox_table[2][0]) 2497 and %o1, %g3, %o5 2498 2499 sllx %o5, 8, %o5 2500 ld [%i5 + 24], %l3 ! &(des_sbox_table[3][0]) 2501 and %o0, %g2, %o2 2502 2503 srlx %o2, 5, %o2 2504 ld [%i5 + 28], %l4 ! &(des_sbox_table[4][0]) 2505 and %o1, %g2, %o3 2506 2507 srlx %o3, 5, %o3 2508 ldx [%i0], %g2 ! ks[0] 2509 and %o0, %g4, %o0 2510 2511 or %o0, %o2, %o0 2512 ld [%i5 + 32], %l5 ! &(des_sbox_table[5][0]) 2513 and %o1, %g4, %o1 2514 2515 or %o0, %o4, %o0 2516 ld [%i5 + 36], %l6 ! &(des_sbox_table[6][0]) 2517 or %o1, %o3, %o1 2518 2519 xor %o0, %g2, %g1 2520 ld [%i5 + 40], %l7 ! &(des_sbox_table[7][0]) 2521 or %o1, %o5, %o1 2522 2523 #endif 2524 .L2: 2525 srlx %g1, 55, %g1 2526 xor %o0, %g2, %o5 2527 .L3: 2528 srlx %o5, 41, %g3 2529 ldx [%l0 + %g1], %g1 2530 and %o5, 0x1f8, %g2 2531 2532 srlx %o5, 29, %g4 2533 ldx [%l7 + %g2], %g2 2534 and %g3, 0x1f8, %g3 2535 2536 srlx %o5, 12, %o2 2537 ldx [%l1 + %g3], %g3 2538 and %g4, 0x1f8, %g4 2539 2540 srlx %o5, 35, %o3 2541 ldx [%l3 + %g4], %g4 2542 and %o2, 0x1f8, %o2 2543 2544 srlx %o5, 6, %o4 2545 ldx [%l5 + %o2], %o2 2546 and %o3, 0x1f8, %o3 2547 2548 or %g1, %g2, %g2 2549 ldx [%l2 + %o3], %o3 2550 and %o4, 0x1f8, %o4 2551 2552 srl %o5, 23, %o5 2553 ldx [%l6 + %o4], %o4 2554 or %g3, %g4, %g4 2555 2556 or %g2, %g4, %g4 2557 ldx [%l4 + %o5], %o5 2558 or %o2, %o3, %o3 2559 2560 or %g4, %o3, %o3 2561 ldx [%i0 + 8], %g2 2562 add %i0, 16, %i0 2563 2564 xor %o1, %o3, %o1 2565 or %o4, %o5, %o5 2566 2567 xor %o1, %g2, %g1 2568 xor %o1, %o5, %o1 2569 2570 srl %g1, 23, %g1 2571 xor %o1, %g2, %o5 2572 2573 srlx %o5, 41, %g3 2574 ldx [%l4 + %g1], %g1 2575 and %o5, 0x1f8, %g2 2576 2577 srlx %o5, 29, %g4 2578 ldx [%l7 + %g2], %g2 2579 and %g3, 0x1f8, %g3 2580 2581 srlx %o5, 12, %o2 2582 ldx [%l1 + %g3], %g3 2583 and %g4, 0x1f8, %g4 2584 2585 srlx %o5, 6, %o3 2586 ldx [%l3 + %g4], %g4 2587 and %o2, 0x1f8, %o2 2588 2589 srlx %o5, 35, %o4 2590 ldx [%l5 + %o2], %o2 2591 and %o3, 0x1f8, %o3 2592 2593 or %g1, %g2, %g2 2594 ldx [%l6 + %o3], %o3 2595 and %o4, 0x1f8, %o4 2596 2597 srlx %o5, 55, %o5 2598 ldx [%l2 + %o4], %o4 2599 or %g3, %g4, %g4 2600 2601 or %g2, %g4, %g4 2602 ldx [%l0 + %o5], %o5 2603 or %o2, %o3, %o3 2604 2605 or %g4, %o3, %o3 2606 ldx [%i0], %g2 2607 subcc %i4,1,%i4 2608 2609 xor %o0, %o3, %o0 2610 or %o4, %o5, %o5 2611 2612 xor %o0, %g2, %g1 2613 ! bnz %icc, .L2 2614 xor %o0, %o5, %o0 2615 2616 srlx %g1, 55, %g1 2617 xor %o0, %g2, %o5 2618 2619 srlx %o5, 41, %g3 2620 ldx [%l0 + %g1], %g1 2621 and %o5, 0x1f8, %g2 2622 2623 srlx %o5, 29, %g4 2624 ldx [%l7 + %g2], %g2 2625 and %g3, 0x1f8, %g3 2626 2627 srlx %o5, 12, %o2 2628 ldx [%l1 + %g3], %g3 2629 and %g4, 0x1f8, %g4 2630 2631 srlx %o5, 35, %o3 2632 ldx [%l3 + %g4], %g4 2633 and %o2, 0x1f8, %o2 2634 2635 srlx %o5, 6, %o4 2636 ldx [%l5 + %o2], %o2 2637 and %o3, 0x1f8, %o3 2638 2639 or %g1, %g2, %g2 2640 ldx [%l2 + %o3], %o3 2641 and %o4, 0x1f8, %o4 2642 2643 srl %o5, 23, %o5 2644 ldx [%l6 + %o4], %o4 2645 or %g3, %g4, %g4 2646 2647 or %g2, %g4, %g4 2648 ldx [%l4 + %o5], %o5 2649 or %o2, %o3, %o3 2650 2651 or %g4, %o3, %o3 2652 ldx [%i0 + 8], %g2 2653 add %i0, 16, %i0 2654 2655 xor %o1, %o3, %o1 2656 or %o4, %o5, %o5 2657 2658 xor %o1, %g2, %g1 2659 xor %o1, %o5, %o1 2660 2661 srl %g1, 23, %g1 2662 xor %o1, %g2, %o5 2663 2664 srlx %o5, 41, %g3 2665 ldx [%l4 + %g1], %g1 2666 and %o5, 0x1f8, %g2 2667 2668 srlx %o5, 29, %g4 2669 ldx [%l7 + %g2], %g2 2670 and %g3, 0x1f8, %g3 2671 2672 srlx %o5, 12, %o2 2673 ldx [%l1 + %g3], %g3 2674 and %g4, 0x1f8, %g4 2675 2676 srlx %o5, 6, %o3 2677 ldx [%l3 + %g4], %g4 2678 and %o2, 0x1f8, %o2 2679 2680 srlx %o5, 35, %o4 2681 ldx [%l5 + %o2], %o2 2682 and %o3, 0x1f8, %o3 2683 2684 or %g1, %g2, %g2 2685 ldx [%l6 + %o3], %o3 2686 and %o4, 0x1f8, %o4 2687 2688 srlx %o5, 55, %o5 2689 ldx [%l2 + %o4], %o4 2690 or %g3, %g4, %g4 2691 2692 or %g2, %g4, %g4 2693 ldx [%l0 + %o5], %o5 2694 or %o2, %o3, %o3 2695 2696 or %g4, %o3, %o3 2697 ldx [%i0], %g2 2698 subcc %i4,1,%i4 2699 2700 xor %o0, %o3, %o0 2701 or %o4, %o5, %o5 2702 2703 xor %o0, %g2, %g1 2704 ! bnz %icc, .L2 2705 xor %o0, %o5, %o0 2706 2707 srlx %g1, 55, %g1 2708 xor %o0, %g2, %o5 2709 2710 srlx %o5, 41, %g3 2711 ldx [%l0 + %g1], %g1 2712 and %o5, 0x1f8, %g2 2713 2714 srlx %o5, 29, %g4 2715 ldx [%l7 + %g2], %g2 2716 and %g3, 0x1f8, %g3 2717 2718 srlx %o5, 12, %o2 2719 ldx [%l1 + %g3], %g3 2720 and %g4, 0x1f8, %g4 2721 2722 srlx %o5, 35, %o3 2723 ldx [%l3 + %g4], %g4 2724 and %o2, 0x1f8, %o2 2725 2726 srlx %o5, 6, %o4 2727 ldx [%l5 + %o2], %o2 2728 and %o3, 0x1f8, %o3 2729 2730 or %g1, %g2, %g2 2731 ldx [%l2 + %o3], %o3 2732 and %o4, 0x1f8, %o4 2733 2734 srl %o5, 23, %o5 2735 ldx [%l6 + %o4], %o4 2736 or %g3, %g4, %g4 2737 2738 or %g2, %g4, %g4 2739 ldx [%l4 + %o5], %o5 2740 or %o2, %o3, %o3 2741 2742 or %g4, %o3, %o3 2743 ldx [%i0 + 8], %g2 2744 add %i0, 16, %i0 2745 2746 xor %o1, %o3, %o1 2747 or %o4, %o5, %o5 2748 2749 xor %o1, %g2, %g1 2750 xor %o1, %o5, %o1 2751 2752 srl %g1, 23, %g1 2753 xor %o1, %g2, %o5 2754 2755 srlx %o5, 41, %g3 2756 ldx [%l4 + %g1], %g1 2757 and %o5, 0x1f8, %g2 2758 2759 srlx %o5, 29, %g4 2760 ldx [%l7 + %g2], %g2 2761 and %g3, 0x1f8, %g3 2762 2763 srlx %o5, 12, %o2 2764 ldx [%l1 + %g3], %g3 2765 and %g4, 0x1f8, %g4 2766 2767 srlx %o5, 6, %o3 2768 ldx [%l3 + %g4], %g4 2769 and %o2, 0x1f8, %o2 2770 2771 srlx %o5, 35, %o4 2772 ldx [%l5 + %o2], %o2 2773 and %o3, 0x1f8, %o3 2774 2775 or %g1, %g2, %g2 2776 ldx [%l6 + %o3], %o3 2777 and %o4, 0x1f8, %o4 2778 2779 srlx %o5, 55, %o5 2780 ldx [%l2 + %o4], %o4 2781 or %g3, %g4, %g4 2782 2783 or %g2, %g4, %g4 2784 ldx [%l0 + %o5], %o5 2785 or %o2, %o3, %o3 2786 2787 or %g4, %o3, %o3 2788 ldx [%i0], %g2 2789 subcc %i4,1,%i4 2790 2791 xor %o0, %o3, %o0 2792 or %o4, %o5, %o5 2793 2794 xor %o0, %g2, %g1 2795 ! bnz %icc, .L2 2796 xor %o0, %o5, %o0 2797 2798 srlx %g1, 55, %g1 2799 xor %o0, %g2, %o5 2800 2801 srlx %o5, 41, %g3 2802 ldx [%l0 + %g1], %g1 2803 and %o5, 0x1f8, %g2 2804 2805 srlx %o5, 29, %g4 2806 ldx [%l7 + %g2], %g2 2807 and %g3, 0x1f8, %g3 2808 2809 srlx %o5, 12, %o2 2810 ldx [%l1 + %g3], %g3 2811 and %g4, 0x1f8, %g4 2812 2813 srlx %o5, 35, %o3 2814 ldx [%l3 + %g4], %g4 2815 and %o2, 0x1f8, %o2 2816 2817 srlx %o5, 6, %o4 2818 ldx [%l5 + %o2], %o2 2819 and %o3, 0x1f8, %o3 2820 2821 or %g1, %g2, %g2 2822 ldx [%l2 + %o3], %o3 2823 and %o4, 0x1f8, %o4 2824 2825 srl %o5, 23, %o5 2826 ldx [%l6 + %o4], %o4 2827 or %g3, %g4, %g4 2828 2829 or %g2, %g4, %g4 2830 ldx [%l4 + %o5], %o5 2831 or %o2, %o3, %o3 2832 2833 or %g4, %o3, %o3 2834 ldx [%i0 + 8], %g2 2835 add %i0, 16, %i0 2836 2837 xor %o1, %o3, %o1 2838 or %o4, %o5, %o5 2839 2840 xor %o1, %g2, %g1 2841 xor %o1, %o5, %o1 2842 2843 srl %g1, 23, %g1 2844 xor %o1, %g2, %o5 2845 2846 srlx %o5, 41, %g3 2847 ldx [%l4 + %g1], %g1 2848 and %o5, 0x1f8, %g2 2849 2850 srlx %o5, 29, %g4 2851 ldx [%l7 + %g2], %g2 2852 and %g3, 0x1f8, %g3 2853 2854 srlx %o5, 12, %o2 2855 ldx [%l1 + %g3], %g3 2856 and %g4, 0x1f8, %g4 2857 2858 srlx %o5, 6, %o3 2859 ldx [%l3 + %g4], %g4 2860 and %o2, 0x1f8, %o2 2861 2862 srlx %o5, 35, %o4 2863 ldx [%l5 + %o2], %o2 2864 and %o3, 0x1f8, %o3 2865 2866 or %g1, %g2, %g2 2867 ldx [%l6 + %o3], %o3 2868 and %o4, 0x1f8, %o4 2869 2870 srlx %o5, 55, %o5 2871 ldx [%l2 + %o4], %o4 2872 or %g3, %g4, %g4 2873 2874 or %g2, %g4, %g4 2875 ldx [%l0 + %o5], %o5 2876 or %o2, %o3, %o3 2877 2878 or %g4, %o3, %o3 2879 ldx [%i0], %g2 2880 subcc %i4,1,%i4 2881 2882 xor %o0, %o3, %o0 2883 or %o4, %o5, %o5 2884 2885 xor %o0, %g2, %g1 2886 ! bnz %icc, .L2 2887 xor %o0, %o5, %o0 2888 2889 srlx %g1, 55, %g1 2890 xor %o0, %g2, %o5 2891 2892 srlx %o5, 41, %g3 2893 ldx [%l0 + %g1], %g1 2894 and %o5, 0x1f8, %g2 2895 2896 srlx %o5, 29, %g4 2897 ldx [%l7 + %g2], %g2 2898 and %g3, 0x1f8, %g3 2899 2900 srlx %o5, 12, %o2 2901 ldx [%l1 + %g3], %g3 2902 and %g4, 0x1f8, %g4 2903 2904 srlx %o5, 35, %o3 2905 ldx [%l3 + %g4], %g4 2906 and %o2, 0x1f8, %o2 2907 2908 srlx %o5, 6, %o4 2909 ldx [%l5 + %o2], %o2 2910 and %o3, 0x1f8, %o3 2911 2912 or %g1, %g2, %g2 2913 ldx [%l2 + %o3], %o3 2914 and %o4, 0x1f8, %o4 2915 2916 srl %o5, 23, %o5 2917 ldx [%l6 + %o4], %o4 2918 or %g3, %g4, %g4 2919 2920 or %g2, %g4, %g4 2921 ldx [%l4 + %o5], %o5 2922 or %o2, %o3, %o3 2923 2924 or %g4, %o3, %o3 2925 ldx [%i0 + 8], %g2 2926 add %i0, 16, %i0 2927 2928 xor %o1, %o3, %o1 2929 or %o4, %o5, %o5 2930 2931 xor %o1, %g2, %g1 2932 xor %o1, %o5, %o1 2933 2934 srl %g1, 23, %g1 2935 xor %o1, %g2, %o5 2936 2937 srlx %o5, 41, %g3 2938 ldx [%l4 + %g1], %g1 2939 and %o5, 0x1f8, %g2 2940 2941 srlx %o5, 29, %g4 2942 ldx [%l7 + %g2], %g2 2943 and %g3, 0x1f8, %g3 2944 2945 srlx %o5, 12, %o2 2946 ldx [%l1 + %g3], %g3 2947 and %g4, 0x1f8, %g4 2948 2949 srlx %o5, 6, %o3 2950 ldx [%l3 + %g4], %g4 2951 and %o2, 0x1f8, %o2 2952 2953 srlx %o5, 35, %o4 2954 ldx [%l5 + %o2], %o2 2955 and %o3, 0x1f8, %o3 2956 2957 or %g1, %g2, %g2 2958 ldx [%l6 + %o3], %o3 2959 and %o4, 0x1f8, %o4 2960 2961 srlx %o5, 55, %o5 2962 ldx [%l2 + %o4], %o4 2963 or %g3, %g4, %g4 2964 2965 or %g2, %g4, %g4 2966 ldx [%l0 + %o5], %o5 2967 or %o2, %o3, %o3 2968 2969 or %g4, %o3, %o3 2970 ldx [%i0], %g2 2971 subcc %i4,1,%i4 2972 2973 xor %o0, %o3, %o0 2974 or %o4, %o5, %o5 2975 2976 xor %o0, %g2, %g1 2977 ! bnz %icc, .L2 2978 xor %o0, %o5, %o0 2979 2980 srlx %g1, 55, %g1 2981 xor %o0, %g2, %o5 2982 2983 srlx %o5, 41, %g3 2984 ldx [%l0 + %g1], %g1 2985 and %o5, 0x1f8, %g2 2986 2987 srlx %o5, 29, %g4 2988 ldx [%l7 + %g2], %g2 2989 and %g3, 0x1f8, %g3 2990 2991 srlx %o5, 12, %o2 2992 ldx [%l1 + %g3], %g3 2993 and %g4, 0x1f8, %g4 2994 2995 srlx %o5, 35, %o3 2996 ldx [%l3 + %g4], %g4 2997 and %o2, 0x1f8, %o2 2998 2999 srlx %o5, 6, %o4 3000 ldx [%l5 + %o2], %o2 3001 and %o3, 0x1f8, %o3 3002 3003 or %g1, %g2, %g2 3004 ldx [%l2 + %o3], %o3 3005 and %o4, 0x1f8, %o4 3006 3007 srl %o5, 23, %o5 3008 ldx [%l6 + %o4], %o4 3009 or %g3, %g4, %g4 3010 3011 or %g2, %g4, %g4 3012 ldx [%l4 + %o5], %o5 3013 or %o2, %o3, %o3 3014 3015 or %g4, %o3, %o3 3016 ldx [%i0 + 8], %g2 3017 add %i0, 16, %i0 3018 3019 xor %o1, %o3, %o1 3020 or %o4, %o5, %o5 3021 3022 xor %o1, %g2, %g1 3023 xor %o1, %o5, %o1 3024 3025 srl %g1, 23, %g1 3026 xor %o1, %g2, %o5 3027 3028 srlx %o5, 41, %g3 3029 ldx [%l4 + %g1], %g1 3030 and %o5, 0x1f8, %g2 3031 3032 srlx %o5, 29, %g4 3033 ldx [%l7 + %g2], %g2 3034 and %g3, 0x1f8, %g3 3035 3036 srlx %o5, 12, %o2 3037 ldx [%l1 + %g3], %g3 3038 and %g4, 0x1f8, %g4 3039 3040 srlx %o5, 6, %o3 3041 ldx [%l3 + %g4], %g4 3042 and %o2, 0x1f8, %o2 3043 3044 srlx %o5, 35, %o4 3045 ldx [%l5 + %o2], %o2 3046 and %o3, 0x1f8, %o3 3047 3048 or %g1, %g2, %g2 3049 ldx [%l6 + %o3], %o3 3050 and %o4, 0x1f8, %o4 3051 3052 srlx %o5, 55, %o5 3053 ldx [%l2 + %o4], %o4 3054 or %g3, %g4, %g4 3055 3056 or %g2, %g4, %g4 3057 ldx [%l0 + %o5], %o5 3058 or %o2, %o3, %o3 3059 3060 or %g4, %o3, %o3 3061 ldx [%i0], %g2 3062 subcc %i4,1,%i4 3063 3064 xor %o0, %o3, %o0 3065 or %o4, %o5, %o5 3066 3067 xor %o0, %g2, %g1 3068 ! bnz %icc, .L2 3069 xor %o0, %o5, %o0 3070 3071 srlx %g1, 55, %g1 3072 xor %o0, %g2, %o5 3073 3074 srlx %o5, 41, %g3 3075 ldx [%l0 + %g1], %g1 3076 and %o5, 0x1f8, %g2 3077 3078 srlx %o5, 29, %g4 3079 ldx [%l7 + %g2], %g2 3080 and %g3, 0x1f8, %g3 3081 3082 srlx %o5, 12, %o2 3083 ldx [%l1 + %g3], %g3 3084 and %g4, 0x1f8, %g4 3085 3086 srlx %o5, 35, %o3 3087 ldx [%l3 + %g4], %g4 3088 and %o2, 0x1f8, %o2 3089 3090 srlx %o5, 6, %o4 3091 ldx [%l5 + %o2], %o2 3092 and %o3, 0x1f8, %o3 3093 3094 or %g1, %g2, %g2 3095 ldx [%l2 + %o3], %o3 3096 and %o4, 0x1f8, %o4 3097 3098 srl %o5, 23, %o5 3099 ldx [%l6 + %o4], %o4 3100 or %g3, %g4, %g4 3101 3102 or %g2, %g4, %g4 3103 ldx [%l4 + %o5], %o5 3104 or %o2, %o3, %o3 3105 3106 or %g4, %o3, %o3 3107 ldx [%i0 + 8], %g2 3108 add %i0, 16, %i0 3109 3110 xor %o1, %o3, %o1 3111 or %o4, %o5, %o5 3112 3113 xor %o1, %g2, %g1 3114 xor %o1, %o5, %o1 3115 3116 srl %g1, 23, %g1 3117 xor %o1, %g2, %o5 3118 3119 srlx %o5, 41, %g3 3120 ldx [%l4 + %g1], %g1 3121 and %o5, 0x1f8, %g2 3122 3123 srlx %o5, 29, %g4 3124 ldx [%l7 + %g2], %g2 3125 and %g3, 0x1f8, %g3 3126 3127 srlx %o5, 12, %o2 3128 ldx [%l1 + %g3], %g3 3129 and %g4, 0x1f8, %g4 3130 3131 srlx %o5, 6, %o3 3132 ldx [%l3 + %g4], %g4 3133 and %o2, 0x1f8, %o2 3134 3135 srlx %o5, 35, %o4 3136 ldx [%l5 + %o2], %o2 3137 and %o3, 0x1f8, %o3 3138 3139 or %g1, %g2, %g2 3140 ldx [%l6 + %o3], %o3 3141 and %o4, 0x1f8, %o4 3142 3143 srlx %o5, 55, %o5 3144 ldx [%l2 + %o4], %o4 3145 or %g3, %g4, %g4 3146 3147 or %g2, %g4, %g4 3148 ldx [%l0 + %o5], %o5 3149 or %o2, %o3, %o3 3150 3151 or %g4, %o3, %o3 3152 ldx [%i0], %g2 3153 subcc %i4,1,%i4 3154 3155 xor %o0, %o3, %o0 3156 or %o4, %o5, %o5 3157 3158 xor %o0, %g2, %g1 3159 ! bnz %icc, .L2 3160 xor %o0, %o5, %o0 3161 3162 srlx %g1, 55, %g1 3163 xor %o0, %g2, %o5 3164 3165 srlx %o5, 41, %g3 3166 ldx [%l0 + %g1], %g1 3167 and %o5, 0x1f8, %g2 3168 3169 srlx %o5, 29, %g4 3170 ldx [%l7 + %g2], %g2 3171 and %g3, 0x1f8, %g3 3172 3173 srlx %o5, 12, %o2 3174 ldx [%l1 + %g3], %g3 3175 and %g4, 0x1f8, %g4 3176 3177 srlx %o5, 35, %o3 3178 ldx [%l3 + %g4], %g4 3179 and %o2, 0x1f8, %o2 3180 3181 srlx %o5, 6, %o4 3182 ldx [%l5 + %o2], %o2 3183 and %o3, 0x1f8, %o3 3184 3185 or %g1, %g2, %g2 3186 ldx [%l2 + %o3], %o3 3187 and %o4, 0x1f8, %o4 3188 3189 srl %o5, 23, %o5 3190 ldx [%l6 + %o4], %o4 3191 or %g3, %g4, %g4 3192 3193 or %g2, %g4, %g4 3194 ldx [%l4 + %o5], %o5 3195 or %o2, %o3, %o3 3196 3197 or %g4, %o3, %o3 3198 ldx [%i0 + 8], %g2 3199 #ifdef __sparcv9 3200 subcc %i2, 1, %i2 ! one_or_three for v9 3201 #else 3202 subcc %i3, 1, %i3 ! one_or_three for v8 3203 #endif 3204 3205 xor %o1, %o3, %o1 3206 or %o4, %o5, %o5 3207 3208 xor %o1, %g2, %g1 3209 xor %o1, %o5, %g5 3210 3211 srl %g1, 23, %g1 3212 xor %g5, %g2, %o5 3213 3214 srlx %o5, 41, %g3 3215 ldx [%l4 + %g1], %g1 3216 and %o5, 0x1f8, %g2 3217 3218 srlx %o5, 29, %g4 3219 ldx [%l7 + %g2], %g2 3220 and %g3, 0x1f8, %g3 3221 3222 srlx %o5, 12, %o2 3223 ldx [%l1 + %g3], %g3 3224 and %g4, 0x1f8, %g4 3225 3226 srlx %o5, 6, %o3 3227 ldx [%l3 + %g4], %g4 3228 and %o2, 0x1f8, %o2 3229 3230 srlx %o5, 35, %o4 3231 ldx [%l5 + %o2], %o2 3232 and %o3, 0x1f8, %o3 3233 3234 or %g1, %g2, %g2 3235 ldx [%l6 + %o3], %o3 3236 and %o4, 0x1f8, %o4 3237 3238 srlx %o5, 55, %o5 3239 ldx [%l2 + %o4], %o4 3240 or %g3, %g4, %g4 3241 3242 or %g2, %g4, %g4 3243 ldx [%l0 + %o5], %o5 3244 bz,pn %icc, .L4 ! if finished (one or three iterations 3245 or %o2, %o3, %o3 ! of the 16 rounds), go to final perm. 3246 3247 or %g4, %o3, %o3 3248 ldx [%i0 + 16], %g2 3249 add %i0, 16, %i0 3250 3251 xor %o0, %o3, %o0 3252 or %o4, %o5, %o4 3253 3254 xor %g5, %g2, %o5 3255 xor %o0, %o4, %o1 3256 3257 srlx %o5, 55, %g1 3258 ba .L3 3259 or %g5, %g0, %o0 3260 3261 3262 .L4: 3263 or %g4, %o3, %o3 3264 #ifdef __sparcv9 3265 ldx [%i5 + 16], %i5 ! &(dec_fp_table[0]) 3266 #else 3267 ld [%i5 + 8], %i5 ! &(dec_fp_table[0]) 3268 #endif 3269 or %g0, 0xf, %g4 3270 3271 xor %o0, %o3, %o0 3272 or %o4, %o5, %o5 3273 3274 sllx %g4, 59, %g4 ! mask for bits 1-4 3275 xor %o0, %o5, %o0 3276 3277 ! fp starts here 3278 3279 srlx %o0, 33, %g1 3280 and %o0, %g4, %g2 3281 3282 srlx %g5, 37, %l0 3283 and %g5, %g4, %g3 3284 3285 srlx %g2, 53, %g2 3286 and %g1, 0x3c0, %g1 3287 3288 srlx %g3, 57, %l1 3289 and %l0, 0x3c, %l0 3290 3291 srlx %o0, 21, %g3 3292 or %g1, %l0, %l0 3293 3294 srlx %g5, 25, %l2 3295 ld [%i5 + %l0], %l0 3296 or %l1, %g2, %l1 3297 3298 srlx %o0, 4, %g4 3299 ld [%i5 + %l1], %l1 3300 and %g3, 0x3c0, %g3 3301 3302 srlx %g5, 8, %l3 3303 and %l2, 0x3c, %l2 3304 3305 srlx %o0, 27, %g1 3306 or %l2, %g3, %l2 3307 3308 srlx %g5, 31, %l4 3309 ld [%i5 + %l2], %l2 3310 and %g4, 0x3c0, %g4 3311 3312 and %l3, 0x3c, %l3 3313 and %g1, 0x3c0, %g1 3314 3315 srlx %o0, 10, %g2 3316 or %l3, %g4, %l3 3317 3318 srlx %g5, 14, %l5 3319 ld [%i5 + %l3], %l3 3320 and %l4, 0x3c, %l4 3321 3322 sllx %o0, 2, %g3 3323 or %l4, %g1, %l4 3324 3325 srlx %g5, 2, %l6 3326 ld [%i5 + %l4], %l4 3327 and %g2, 0x3c0, %g2 3328 3329 srlx %o0, 39, %g4 3330 and %l5, 0x3c, %l5 3331 3332 and %g3, 0x3c0, %g3 3333 or %l5, %g2, %l5 3334 3335 srlx %g5, 43, %l7 3336 ld [%i5 + %l5], %l5 3337 and %l6, 0x3c, %l6 3338 3339 and %g4, 0x3c0, %g4 3340 or %l6, %g3, %l6 3341 3342 srl %l0, 2, %l0 3343 ld [%i5 + %l6], %l6 3344 and %l7, 0x3c, %l7 3345 3346 srl %l2, 4, %l2 3347 or %l7, %g4, %l7 3348 3349 srl %l4, 2, %l4 3350 ld [%i5 + %l7], %l7 3351 or %l0, %l1, %l1 3352 3353 srl %l5, 4, %l5 3354 or %l1, %l2, %l2 3355 3356 srl %l6, 6, %l6 3357 or %l4, %l5, %l5 3358 3359 srl %l3, 6, %l3 3360 or %l6, %l7, %l7 3361 3362 or %l2, %l3, %i1 3363 or %l5, %l7, %i0 3364 3365 ! 3366 ! result at this point is in i0-i1, just as it should for v8 3367 ! 3368 #ifdef __sparcv9 3369 srl %i1, 0, %i1 3370 3371 sllx %i0, 32, %i0 3372 3373 or %i0, %i1, %i0 3374 #endif 3375 3376 3377 ret 3378 restore %g0,%g0,%g0 3379 .type des_crypt_impl,2 3380 .size des_crypt_impl,(.-des_crypt_impl) 3381 3382 .align 32 3383 ! 3384 ! CONSTANT POOL 3385 ! 3386 des_fp_table: 3387 .word 0 3388 .word -2147483648 3389 .word 8388608 3390 .word -2139095040 3391 .word 32768 3392 .word -2147450880 3393 .word 8421376 3394 .word -2139062272 3395 .word 128 3396 .word -2147483520 3397 .word 8388736 3398 .word -2139094912 3399 .word 32896 3400 .word -2147450752 3401 .word 8421504 3402 .word -2139062144 3403 .word 1073741824 3404 .word -1073741824 3405 .word 1082130432 3406 .word -1065353216 3407 .word 1073774592 3408 .word -1073709056 3409 .word 1082163200 3410 .word -1065320448 3411 .word 1073741952 3412 .word -1073741696 3413 .word 1082130560 3414 .word -1065353088 3415 .word 1073774720 3416 .word -1073708928 3417 .word 1082163328 3418 .word -1065320320 3419 .word 4194304 3420 .word -2143289344 3421 .word 12582912 3422 .word -2134900736 3423 .word 4227072 3424 .word -2143256576 3425 .word 12615680 3426 .word -2134867968 3427 .word 4194432 3428 .word -2143289216 3429 .word 12583040 3430 .word -2134900608 3431 .word 4227200 3432 .word -2143256448 3433 .word 12615808 3434 .word -2134867840 3435 .word 1077936128 3436 .word -1069547520 3437 .word 1086324736 3438 .word -1061158912 3439 .word 1077968896 3440 .word -1069514752 3441 .word 1086357504 3442 .word -1061126144 3443 .word 1077936256 3444 .word -1069547392 3445 .word 1086324864 3446 .word -1061158784 3447 .word 1077969024 3448 .word -1069514624 3449 .word 1086357632 3450 .word -1061126016 3451 .word 16384 3452 .word -2147467264 3453 .word 8404992 3454 .word -2139078656 3455 .word 49152 3456 .word -2147434496 3457 .word 8437760 3458 .word -2139045888 3459 .word 16512 3460 .word -2147467136 3461 .word 8405120 3462 .word -2139078528 3463 .word 49280 3464 .word -2147434368 3465 .word 8437888 3466 .word -2139045760 3467 .word 1073758208 3468 .word -1073725440 3469 .word 1082146816 3470 .word -1065336832 3471 .word 1073790976 3472 .word -1073692672 3473 .word 1082179584 3474 .word -1065304064 3475 .word 1073758336 3476 .word -1073725312 3477 .word 1082146944 3478 .word -1065336704 3479 .word 1073791104 3480 .word -1073692544 3481 .word 1082179712 3482 .word -1065303936 3483 .word 4210688 3484 .word -2143272960 3485 .word 12599296 3486 .word -2134884352 3487 .word 4243456 3488 .word -2143240192 3489 .word 12632064 3490 .word -2134851584 3491 .word 4210816 3492 .word -2143272832 3493 .word 12599424 3494 .word -2134884224 3495 .word 4243584 3496 .word -2143240064 3497 .word 12632192 3498 .word -2134851456 3499 .word 1077952512 3500 .word -1069531136 3501 .word 1086341120 3502 .word -1061142528 3503 .word 1077985280 3504 .word -1069498368 3505 .word 1086373888 3506 .word -1061109760 3507 .word 1077952640 3508 .word -1069531008 3509 .word 1086341248 3510 .word -1061142400 3511 .word 1077985408 3512 .word -1069498240 3513 .word 1086374016 3514 .word -1061109632 3515 .word 64 3516 .word -2147483584 3517 .word 8388672 3518 .word -2139094976 3519 .word 32832 3520 .word -2147450816 3521 .word 8421440 3522 .word -2139062208 3523 .word 192 3524 .word -2147483456 3525 .word 8388800 3526 .word -2139094848 3527 .word 32960 3528 .word -2147450688 3529 .word 8421568 3530 .word -2139062080 3531 .word 1073741888 3532 .word -1073741760 3533 .word 1082130496 3534 .word -1065353152 3535 .word 1073774656 3536 .word -1073708992 3537 .word 1082163264 3538 .word -1065320384 3539 .word 1073742016 3540 .word -1073741632 3541 .word 1082130624 3542 .word -1065353024 3543 .word 1073774784 3544 .word -1073708864 3545 .word 1082163392 3546 .word -1065320256 3547 .word 4194368 3548 .word -2143289280 3549 .word 12582976 3550 .word -2134900672 3551 .word 4227136 3552 .word -2143256512 3553 .word 12615744 3554 .word -2134867904 3555 .word 4194496 3556 .word -2143289152 3557 .word 12583104 3558 .word -2134900544 3559 .word 4227264 3560 .word -2143256384 3561 .word 12615872 3562 .word -2134867776 3563 .word 1077936192 3564 .word -1069547456 3565 .word 1086324800 3566 .word -1061158848 3567 .word 1077968960 3568 .word -1069514688 3569 .word 1086357568 3570 .word -1061126080 3571 .word 1077936320 3572 .word -1069547328 3573 .word 1086324928 3574 .word -1061158720 3575 .word 1077969088 3576 .word -1069514560 3577 .word 1086357696 3578 .word -1061125952 3579 .word 16448 3580 .word -2147467200 3581 .word 8405056 3582 .word -2139078592 3583 .word 49216 3584 .word -2147434432 3585 .word 8437824 3586 .word -2139045824 3587 .word 16576 3588 .word -2147467072 3589 .word 8405184 3590 .word -2139078464 3591 .word 49344 3592 .word -2147434304 3593 .word 8437952 3594 .word -2139045696 3595 .word 1073758272 3596 .word -1073725376 3597 .word 1082146880 3598 .word -1065336768 3599 .word 1073791040 3600 .word -1073692608 3601 .word 1082179648 3602 .word -1065304000 3603 .word 1073758400 3604 .word -1073725248 3605 .word 1082147008 3606 .word -1065336640 3607 .word 1073791168 3608 .word -1073692480 3609 .word 1082179776 3610 .word -1065303872 3611 .word 4210752 3612 .word -2143272896 3613 .word 12599360 3614 .word -2134884288 3615 .word 4243520 3616 .word -2143240128 3617 .word 12632128 3618 .word -2134851520 3619 .word 4210880 3620 .word -2143272768 3621 .word 12599488 3622 .word -2134884160 3623 .word 4243648 3624 .word -2143240000 3625 .word 12632256 3626 .word -2134851392 3627 .word 1077952576 3628 .word -1069531072 3629 .word 1086341184 3630 .word -1061142464 3631 .word 1077985344 3632 .word -1069498304 3633 .word 1086373952 3634 .word -1061109696 3635 .word 1077952704 3636 .word -1069530944 3637 .word 1086341312 3638 .word -1061142336 3639 .word 1077985472 3640 .word -1069498176 3641 .word 1086374080 3642 .word -1061109568 3643 .type des_fp_table,#object 3644 .size des_fp_table,1024 3645 3646 #endif /* lint || __lint */