1.machine "any" 2.text 3 4 5.align 5 6KeccakF1600_int: 7 li 0,24 8 mtctr 0 9 li 0,0 10 b .Loop 11 12.align 4 13.Loop: 14 15 vxor 26,0, 5 16 vxor 27,1, 6 17 vxor 28,2, 7 18 vxor 29,3, 8 19 vxor 30,4, 9 20.long 0xF3FAD857 21.long 0xF35ADB57 22.long 0xF37CE857 23.long 0xF39CEB57 24.long 0xF3BEF257 25 vxor 26,26,31 26 vxor 27,27,28 27 vxor 28,29,30 28 vspltisb 31,1 29 vxor 26,26,10 30 vxor 27,27,11 31 vxor 28,28,12 32 33.long 0x13BAF8C4 34.long 0x13DBF8C4 35.long 0x13FCF8C4 36.long 0xF3FFEA57 37 vxor 26,26,30 38 vxor 27,27,31 39 vxor 28,28,29 40 41.long 0xF3BAD057 42.long 0xF3DCD257 43.long 0xF3FCE357 44 vxor 1, 1, 29 45 vxor 6, 6, 29 46 vxor 10,10,30 47 vxor 0, 0, 31 48 vxor 5, 5, 31 49 50.long 0xF3BBD857 51.long 0xF3DAD357 52.long 0xF3FADA57 53 vxor 3, 3, 29 54 vxor 8, 8, 29 55 vxor 2, 2, 30 56 vxor 7, 7, 30 57 vxor 11,11,31 58 59.long 0xF3BBDB57 60 vxor 4, 4, 29 61 vxor 9, 9, 29 62 vxor 12,12,29 63 64 65.long 0x134068C4 66.long 0x102170C4 67.long 0x136278C4 68.long 0x138380C4 69.long 0x108488C4 70.long 0x10A590C4 71.long 0x10C698C4 72.long 0x13A7A0C4 73.long 0x1108A8C4 74.long 0x1129B0C4 75.long 0x114AB8C4 76.long 0x13CBC0C4 77.long 0x118CC8C4 78 79 80.long 0xF01AE057 81.long 0xF05D2857 82.long 0xF1692957 83.long 0xF0A12057 84.long 0xF0212357 85.long 0xF0683357 86.long 0xF08CF257 87.long 0xF0E83057 88.long 0xF0DBD357 89.long 0xF109EB57 90.long 0xF18A5357 91.long 0xF12AF157 92.long 0xF15BE157 93 94 95.long 0x7FEC0699 96 addic 0,0,16 97 98 vandc 26,2, 1 99 vandc 27,3, 2 100 vandc 28,4, 3 101 vandc 29,0, 4 102 vandc 30,1, 0 103 vxor 0, 0, 26 104 vxor 1, 1, 27 105 vxor 2, 2, 28 106 vxor 3, 3, 29 107 vxor 4, 4, 30 108 109 vandc 26,7, 6 110 vandc 27,8, 7 111 vandc 28,9, 8 112 vandc 29,5, 9 113 vandc 30,6, 5 114 vxor 5, 5, 26 115 vxor 6, 6, 27 116 vxor 7, 7, 28 117 vxor 8, 8, 29 118 vxor 9, 9, 30 119 120 vxor 0, 0, 31 121 122.long 0xF34A5A57 123.long 0xF36C5057 124.long 0xF38B6257 125.long 0xF3AA5257 126 vandc 26,11,26 127 vandc 27,27,28 128 vandc 28,10,29 129 vxor 10,10,26 130 vxor 11,11,27 131 vxor 12,12,28 132 133 bc 16,0,.Loop 134 135.long 0xF18C6357 136 blr 137.long 0 138.byte 0,12,0x14,0,0,0,0,0 139 140 141 142.align 5 143KeccakF1600: 144 stdu 1,-256(1) 145 li 10,63 146 li 11,79 147 mflr 8 148 mfspr 7,256 149 stvx 20,10,1 150 addi 10,10,32 151 stvx 21,11,1 152 addi 11,11,32 153 stvx 22,10,1 154 addi 10,10,32 155 stvx 23,11,1 156 addi 11,11,32 157 stvx 24,10,1 158 addi 10,10,32 159 stvx 25,11,1 160 addi 11,11,32 161 stvx 26,10,1 162 addi 10,10,32 163 stvx 27,11,1 164 addi 11,11,32 165 stvx 28,10,1 166 addi 10,10,32 167 stvx 29,11,1 168 addi 11,11,32 169 stvx 30,10,1 170 stvx 31,11,1 171 stw 7,252(1) 172 li 0, -1 173 std 8,272(1) 174 mtspr 256,0 175 176 li 11,16 177.long 0x7C001E19 178 li 10,32 179.long 0x7C2B1E19 180 addi 11,11,32 181.long 0x7C4A1E19 182 addi 10,10,32 183.long 0x7C6B1E19 184 addi 11,11,32 185.long 0x7C8A1E19 186 addi 10,10,32 187.long 0x7CAB1E19 188 addi 11,11,32 189.long 0x7CCA1E19 190 addi 10,10,32 191.long 0x7CEB1E19 192 addi 11,11,32 193.long 0x7D0A1E19 194 addi 10,10,32 195.long 0x7D2B1E19 196 addi 11,11,32 197.long 0x7D4A1E19 198 addi 10,10,32 199.long 0x7D6B1E19 200.long 0x7D8A1A99 201 202 bl PICmeup 203 204 li 11,16 205.long 0x7DA06699 206 li 10,32 207.long 0x7DCB6699 208 addi 11,11,32 209.long 0x7DEA6699 210 addi 10,10,32 211.long 0x7E0B6699 212 addi 11,11,32 213.long 0x7E2A6699 214 addi 10,10,32 215.long 0x7E4B6699 216 addi 11,11,32 217.long 0x7E6A6699 218 addi 10,10,32 219.long 0x7E8B6699 220 addi 11,11,32 221.long 0x7EAA6699 222 addi 10,10,32 223.long 0x7ECB6699 224 addi 11,11,32 225.long 0x7EEA6699 226 addi 10,10,32 227.long 0x7F0B6699 228.long 0x7F2A6699 229 addi 12,12,256 230 231 bl KeccakF1600_int 232 233 li 11,16 234.long 0x7C001F19 235 li 10,32 236.long 0x7C2B1F19 237 addi 11,11,32 238.long 0x7C4A1F19 239 addi 10,10,32 240.long 0x7C6B1F19 241 addi 11,11,32 242.long 0x7C8A1F19 243 addi 10,10,32 244.long 0x7CAB1F19 245 addi 11,11,32 246.long 0x7CCA1F19 247 addi 10,10,32 248.long 0x7CEB1F19 249 addi 11,11,32 250.long 0x7D0A1F19 251 addi 10,10,32 252.long 0x7D2B1F19 253 addi 11,11,32 254.long 0x7D4A1F19 255 addi 10,10,32 256.long 0x7D6B1F19 257.long 0x7D8A1D99 258 259 li 10,63 260 li 11,79 261 mtlr 8 262 mtspr 256,7 263 lvx 20,10,1 264 addi 10,10,32 265 lvx 21,11,1 266 addi 11,11,32 267 lvx 22,10,1 268 addi 10,10,32 269 lvx 23,11,1 270 addi 11,11,32 271 lvx 24,10,1 272 addi 10,10,32 273 lvx 25,11,1 274 addi 11,11,32 275 lvx 26,10,1 276 addi 10,10,32 277 lvx 27,11,1 278 addi 11,11,32 279 lvx 28,10,1 280 addi 10,10,32 281 lvx 29,11,1 282 addi 11,11,32 283 lvx 30,10,1 284 lvx 31,11,1 285 addi 1,1,256 286 blr 287.long 0 288.byte 0,12,0x04,1,0x80,0,1,0 289.long 0 290 291.globl SHA3_absorb 292.type SHA3_absorb,@function 293.section ".opd","aw" 294.align 3 295SHA3_absorb: 296.quad .SHA3_absorb,.TOC.@tocbase,0 297.previous 298 299.align 5 300.SHA3_absorb: 301 stdu 1,-256(1) 302 li 10,63 303 li 11,79 304 mflr 8 305 mfspr 7,256 306 stvx 20,10,1 307 addi 10,10,32 308 stvx 21,11,1 309 addi 11,11,32 310 stvx 22,10,1 311 addi 10,10,32 312 stvx 23,11,1 313 addi 11,11,32 314 stvx 24,10,1 315 addi 10,10,32 316 stvx 25,11,1 317 addi 11,11,32 318 stvx 26,10,1 319 addi 10,10,32 320 stvx 27,11,1 321 addi 11,11,32 322 stvx 28,10,1 323 addi 10,10,32 324 stvx 29,11,1 325 addi 11,11,32 326 stvx 30,10,1 327 stvx 31,11,1 328 stw 7,252(1) 329 li 0, -1 330 std 8,272(1) 331 mtspr 256,0 332 333 li 11,16 334.long 0x7C001E19 335 li 10,32 336.long 0x7C2B1E19 337 addi 11,11,32 338.long 0x7C4A1E19 339 addi 10,10,32 340.long 0x7C6B1E19 341 addi 11,11,32 342.long 0x7C8A1E19 343 addi 10,10,32 344.long 0x7CAB1E19 345 addi 11,11,32 346.long 0x7CCA1E19 347 addi 10,10,32 348.long 0x7CEB1E19 349 addi 11,11,32 350.long 0x7D0A1E19 351 addi 10,10,32 352.long 0x7D2B1E19 353 addi 11,11,32 354.long 0x7D4A1E19 355 addi 10,10,32 356.long 0x7D6B1E19 357.long 0x7D8A1A99 358 359 bl PICmeup 360 361 li 11,16 362.long 0x7DA06699 363 li 10,32 364.long 0x7DCB6699 365 addi 11,11,32 366.long 0x7DEA6699 367 addi 10,10,32 368.long 0x7E0B6699 369 addi 11,11,32 370.long 0x7E2A6699 371 addi 10,10,32 372.long 0x7E4B6699 373 addi 11,11,32 374.long 0x7E6A6699 375 addi 10,10,32 376.long 0x7E8B6699 377 addi 11,11,32 378.long 0x7EAA6699 379 addi 10,10,32 380.long 0x7ECB6699 381 addi 11,11,32 382.long 0x7EEA6699 383 addi 10,10,32 384.long 0x7F0B6699 385.long 0x7F2A6699 386 li 10,-32 387 li 11,-16 388 addi 12,12,256 389 b .Loop_absorb 390 391.align 4 392.Loop_absorb: 393 cmpld 5,6 394 blt .Labsorbed 395 396 sub 5,5,6 397 srwi 0,6,3 398 mtctr 0 399 400.long 0x7FCA6699 401.long 0x7FEB6699 402 vspltisb 27,7 403 vxor 30,30,27 404 vxor 31,31,27 405 406 vxor 27,27,27 407.long 0x7F402499 408 addi 4,4,8 409 vperm 26,26,27,30 410 vxor 0, 0, 26 411 bdz .Lprocess_block 412.long 0x7F402499 413 addi 4,4,8 414 vperm 26,26,27,30 415 vxor 1, 1, 26 416 bdz .Lprocess_block 417.long 0x7F402499 418 addi 4,4,8 419 vperm 26,26,27,30 420 vxor 2, 2, 26 421 bdz .Lprocess_block 422.long 0x7F402499 423 addi 4,4,8 424 vperm 26,26,27,30 425 vxor 3, 3, 26 426 bdz .Lprocess_block 427.long 0x7F402499 428 addi 4,4,8 429 vperm 26,26,27,30 430 vxor 4, 4, 26 431 bdz .Lprocess_block 432.long 0x7F402499 433 addi 4,4,8 434 vperm 26,26,27,31 435 vxor 0, 0, 26 436 bdz .Lprocess_block 437.long 0x7F402499 438 addi 4,4,8 439 vperm 26,26,27,31 440 vxor 1, 1, 26 441 bdz .Lprocess_block 442.long 0x7F402499 443 addi 4,4,8 444 vperm 26,26,27,31 445 vxor 2, 2, 26 446 bdz .Lprocess_block 447.long 0x7F402499 448 addi 4,4,8 449 vperm 26,26,27,31 450 vxor 3, 3, 26 451 bdz .Lprocess_block 452.long 0x7F402499 453 addi 4,4,8 454 vperm 26,26,27,31 455 vxor 4, 4, 26 456 bdz .Lprocess_block 457.long 0x7F402499 458 addi 4,4,8 459 vperm 26,26,27,30 460 vxor 5, 5, 26 461 bdz .Lprocess_block 462.long 0x7F402499 463 addi 4,4,8 464 vperm 26,26,27,30 465 vxor 6, 6, 26 466 bdz .Lprocess_block 467.long 0x7F402499 468 addi 4,4,8 469 vperm 26,26,27,30 470 vxor 7, 7, 26 471 bdz .Lprocess_block 472.long 0x7F402499 473 addi 4,4,8 474 vperm 26,26,27,30 475 vxor 8, 8, 26 476 bdz .Lprocess_block 477.long 0x7F402499 478 addi 4,4,8 479 vperm 26,26,27,30 480 vxor 9, 9, 26 481 bdz .Lprocess_block 482.long 0x7F402499 483 addi 4,4,8 484 vperm 26,26,27,31 485 vxor 5, 5, 26 486 bdz .Lprocess_block 487.long 0x7F402499 488 addi 4,4,8 489 vperm 26,26,27,31 490 vxor 6, 6, 26 491 bdz .Lprocess_block 492.long 0x7F402499 493 addi 4,4,8 494 vperm 26,26,27,31 495 vxor 7, 7, 26 496 bdz .Lprocess_block 497.long 0x7F402499 498 addi 4,4,8 499 vperm 26,26,27,31 500 vxor 8, 8, 26 501 bdz .Lprocess_block 502.long 0x7F402499 503 addi 4,4,8 504 vperm 26,26,27,31 505 vxor 9, 9, 26 506 bdz .Lprocess_block 507.long 0x7F402499 508 addi 4,4,8 509 vperm 26,26,27,30 510 vxor 10, 10, 26 511 bdz .Lprocess_block 512.long 0x7F402499 513 addi 4,4,8 514 vperm 26,26,27,31 515 vxor 10, 10, 26 516 bdz .Lprocess_block 517.long 0x7F402499 518 addi 4,4,8 519 vperm 26,26,27,30 520 vxor 11, 11, 26 521 bdz .Lprocess_block 522.long 0x7F402499 523 addi 4,4,8 524 vperm 26,26,27,31 525 vxor 11, 11, 26 526 bdz .Lprocess_block 527.long 0x7F402499 528 addi 4,4,8 529 vperm 26,26,27,31 530 vxor 12, 12, 26 531 532.Lprocess_block: 533 bl KeccakF1600_int 534 535 b .Loop_absorb 536 537.align 4 538.Labsorbed: 539 li 11,16 540.long 0x7C001F19 541 li 10,32 542.long 0x7C2B1F19 543 addi 11,11,32 544.long 0x7C4A1F19 545 addi 10,10,32 546.long 0x7C6B1F19 547 addi 11,11,32 548.long 0x7C8A1F19 549 addi 10,10,32 550.long 0x7CAB1F19 551 addi 11,11,32 552.long 0x7CCA1F19 553 addi 10,10,32 554.long 0x7CEB1F19 555 addi 11,11,32 556.long 0x7D0A1F19 557 addi 10,10,32 558.long 0x7D2B1F19 559 addi 11,11,32 560.long 0x7D4A1F19 561 addi 10,10,32 562.long 0x7D6B1F19 563.long 0x7D8A1D99 564 565 mr 3,5 566 li 10,63 567 li 11,79 568 mtlr 8 569 mtspr 256,7 570 lvx 20,10,1 571 addi 10,10,32 572 lvx 21,11,1 573 addi 11,11,32 574 lvx 22,10,1 575 addi 10,10,32 576 lvx 23,11,1 577 addi 11,11,32 578 lvx 24,10,1 579 addi 10,10,32 580 lvx 25,11,1 581 addi 11,11,32 582 lvx 26,10,1 583 addi 10,10,32 584 lvx 27,11,1 585 addi 11,11,32 586 lvx 28,10,1 587 addi 10,10,32 588 lvx 29,11,1 589 addi 11,11,32 590 lvx 30,10,1 591 lvx 31,11,1 592 addi 1,1,256 593 blr 594.long 0 595.byte 0,12,0x04,1,0x80,0,4,0 596.long 0 597 598.globl SHA3_squeeze 599.type SHA3_squeeze,@function 600.section ".opd","aw" 601.align 3 602SHA3_squeeze: 603.quad .SHA3_squeeze,.TOC.@tocbase,0 604.previous 605 606.align 5 607.SHA3_squeeze: 608 mflr 9 609 subi 4,4,1 610 addi 8,3,4 611 mr 10,6 612 li 11,0 613 b .Loop_squeeze 614.align 4 615.Loop_squeeze: 616 lwzx 7,11,8 617 lwzx 0,11,3 618 cmpldi 5,8 619 blt .Lsqueeze_tail 620 621 stbu 7,1(4) 622 srwi 7,7,8 623 stbu 7,1(4) 624 srwi 7,7,8 625 stbu 7,1(4) 626 srwi 7,7,8 627 stbu 7,1(4) 628 stbu 0,1(4) 629 srwi 0,0,8 630 stbu 0,1(4) 631 srwi 0,0,8 632 stbu 0,1(4) 633 srwi 0,0,8 634 stbu 0,1(4) 635 636 subic. 5,5,8 637 bclr 12,2 638 639 subic. 10,10,8 640 ble .Loutput_expand 641 642 addi 11,11,16 643 cmplwi 11,80 644 blt .Loop_squeeze 645 subi 11,11,72 646 beq .Loop_squeeze 647 addi 11,11,72 648 cmplwi 11,88 649 subi 11,11,8 650 beq .Loop_squeeze 651 addi 11,11,8 652 cmplwi 11,160 653 subi 11,11,72 654 beq .Loop_squeeze 655 addi 11,11,72 656 blt .Loop_squeeze 657 subi 11,11,8 658 b .Loop_squeeze 659 660.align 4 661.Loutput_expand: 662 bl KeccakF1600 663 mtlr 9 664 665 addi 8,3,4 666 mr 10,6 667 li 11,0 668 b .Loop_squeeze 669 670.align 4 671.Lsqueeze_tail: 672 mtctr 5 673 subic. 5,5,4 674 ble .Loop_tail_lo 675 li 8,4 676 mtctr 8 677.Loop_tail_lo: 678 stbu 7,1(4) 679 srdi 7,7,8 680 bc 16,0,.Loop_tail_lo 681 ble .Lsqueeze_done 682 mtctr 5 683.Loop_tail_hi: 684 stbu 0,1(4) 685 srdi 0,0,8 686 bc 16,0,.Loop_tail_hi 687 688.Lsqueeze_done: 689 blr 690.long 0 691.byte 0,12,0x14,0,0,0,4,0 692.long 0 693 694.align 6 695PICmeup: 696 mflr 0 697 bcl 20,31,$+4 698 mflr 12 699 addi 12,12,56 700 mtlr 0 701 blr 702.long 0 703.byte 0,12,0x14,0,0,0,0,0 704.space 28 705 706.align 6 707rhotates: 708.long 0,0 709.long 0,36 710.long 0,1 711.long 0,44 712.long 0,62 713.long 0,6 714.long 0,28 715.long 0,55 716.long 0,27 717.long 0,20 718.long 0,3 719.long 0,41 720.long 0,10 721.long 0,45 722.long 0,43 723.long 0,15 724.long 0,25 725.long 0,21 726.long 0,39 727.long 0,8 728.long 0,18 729.long 0,2 730.long 0,61 731.long 0,56 732.long 0,14 733.long 0,14 734 735.long 0,0 736.long 0,0 737.long 0x00010203,0x04050607 738.long 0x10111213,0x14151617 739.long 0x10111213,0x14151617 740.long 0x00010203,0x04050607 741 742iotas: 743.long 0x00000000,0x00000001 744.long 0,0 745.long 0x00000000,0x00008082 746.long 0,0 747.long 0x80000000,0x0000808a 748.long 0,0 749.long 0x80000000,0x80008000 750.long 0,0 751.long 0x00000000,0x0000808b 752.long 0,0 753.long 0x00000000,0x80000001 754.long 0,0 755.long 0x80000000,0x80008081 756.long 0,0 757.long 0x80000000,0x00008009 758.long 0,0 759.long 0x00000000,0x0000008a 760.long 0,0 761.long 0x00000000,0x00000088 762.long 0,0 763.long 0x00000000,0x80008009 764.long 0,0 765.long 0x00000000,0x8000000a 766.long 0,0 767.long 0x00000000,0x8000808b 768.long 0,0 769.long 0x80000000,0x0000008b 770.long 0,0 771.long 0x80000000,0x00008089 772.long 0,0 773.long 0x80000000,0x00008003 774.long 0,0 775.long 0x80000000,0x00008002 776.long 0,0 777.long 0x80000000,0x00000080 778.long 0,0 779.long 0x00000000,0x0000800a 780.long 0,0 781.long 0x80000000,0x8000000a 782.long 0,0 783.long 0x80000000,0x80008081 784.long 0,0 785.long 0x80000000,0x00008080 786.long 0,0 787.long 0x00000000,0x80000001 788.long 0,0 789.long 0x80000000,0x80008008 790.long 0,0 791 792.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 793.align 2 794