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 stwu 1,-232(1) 145 li 10,39 146 li 11,55 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,228(1) 172 li 0, -1 173 stw 8,236(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,39 260 li 11,55 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,232 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 294.align 5 295SHA3_absorb: 296 stwu 1,-232(1) 297 li 10,39 298 li 11,55 299 mflr 8 300 mfspr 7,256 301 stvx 20,10,1 302 addi 10,10,32 303 stvx 21,11,1 304 addi 11,11,32 305 stvx 22,10,1 306 addi 10,10,32 307 stvx 23,11,1 308 addi 11,11,32 309 stvx 24,10,1 310 addi 10,10,32 311 stvx 25,11,1 312 addi 11,11,32 313 stvx 26,10,1 314 addi 10,10,32 315 stvx 27,11,1 316 addi 11,11,32 317 stvx 28,10,1 318 addi 10,10,32 319 stvx 29,11,1 320 addi 11,11,32 321 stvx 30,10,1 322 stvx 31,11,1 323 stw 7,228(1) 324 li 0, -1 325 stw 8,236(1) 326 mtspr 256,0 327 328 li 11,16 329.long 0x7C001E19 330 li 10,32 331.long 0x7C2B1E19 332 addi 11,11,32 333.long 0x7C4A1E19 334 addi 10,10,32 335.long 0x7C6B1E19 336 addi 11,11,32 337.long 0x7C8A1E19 338 addi 10,10,32 339.long 0x7CAB1E19 340 addi 11,11,32 341.long 0x7CCA1E19 342 addi 10,10,32 343.long 0x7CEB1E19 344 addi 11,11,32 345.long 0x7D0A1E19 346 addi 10,10,32 347.long 0x7D2B1E19 348 addi 11,11,32 349.long 0x7D4A1E19 350 addi 10,10,32 351.long 0x7D6B1E19 352.long 0x7D8A1A99 353 354 bl PICmeup 355 356 li 11,16 357.long 0x7DA06699 358 li 10,32 359.long 0x7DCB6699 360 addi 11,11,32 361.long 0x7DEA6699 362 addi 10,10,32 363.long 0x7E0B6699 364 addi 11,11,32 365.long 0x7E2A6699 366 addi 10,10,32 367.long 0x7E4B6699 368 addi 11,11,32 369.long 0x7E6A6699 370 addi 10,10,32 371.long 0x7E8B6699 372 addi 11,11,32 373.long 0x7EAA6699 374 addi 10,10,32 375.long 0x7ECB6699 376 addi 11,11,32 377.long 0x7EEA6699 378 addi 10,10,32 379.long 0x7F0B6699 380.long 0x7F2A6699 381 li 10,-32 382 li 11,-16 383 addi 12,12,256 384 b .Loop_absorb 385 386.align 4 387.Loop_absorb: 388 .long 0x7c053040 389 blt .Labsorbed 390 391 sub 5,5,6 392 srwi 0,6,3 393 mtctr 0 394 395.long 0x7FCA6699 396.long 0x7FEB6699 397 vspltisb 27,7 398 vxor 30,30,27 399 vxor 31,31,27 400 401 vxor 27,27,27 402.long 0x7F402499 403 addi 4,4,8 404 vperm 26,26,27,30 405 vxor 0, 0, 26 406 bdz .Lprocess_block 407.long 0x7F402499 408 addi 4,4,8 409 vperm 26,26,27,30 410 vxor 1, 1, 26 411 bdz .Lprocess_block 412.long 0x7F402499 413 addi 4,4,8 414 vperm 26,26,27,30 415 vxor 2, 2, 26 416 bdz .Lprocess_block 417.long 0x7F402499 418 addi 4,4,8 419 vperm 26,26,27,30 420 vxor 3, 3, 26 421 bdz .Lprocess_block 422.long 0x7F402499 423 addi 4,4,8 424 vperm 26,26,27,30 425 vxor 4, 4, 26 426 bdz .Lprocess_block 427.long 0x7F402499 428 addi 4,4,8 429 vperm 26,26,27,31 430 vxor 0, 0, 26 431 bdz .Lprocess_block 432.long 0x7F402499 433 addi 4,4,8 434 vperm 26,26,27,31 435 vxor 1, 1, 26 436 bdz .Lprocess_block 437.long 0x7F402499 438 addi 4,4,8 439 vperm 26,26,27,31 440 vxor 2, 2, 26 441 bdz .Lprocess_block 442.long 0x7F402499 443 addi 4,4,8 444 vperm 26,26,27,31 445 vxor 3, 3, 26 446 bdz .Lprocess_block 447.long 0x7F402499 448 addi 4,4,8 449 vperm 26,26,27,31 450 vxor 4, 4, 26 451 bdz .Lprocess_block 452.long 0x7F402499 453 addi 4,4,8 454 vperm 26,26,27,30 455 vxor 5, 5, 26 456 bdz .Lprocess_block 457.long 0x7F402499 458 addi 4,4,8 459 vperm 26,26,27,30 460 vxor 6, 6, 26 461 bdz .Lprocess_block 462.long 0x7F402499 463 addi 4,4,8 464 vperm 26,26,27,30 465 vxor 7, 7, 26 466 bdz .Lprocess_block 467.long 0x7F402499 468 addi 4,4,8 469 vperm 26,26,27,30 470 vxor 8, 8, 26 471 bdz .Lprocess_block 472.long 0x7F402499 473 addi 4,4,8 474 vperm 26,26,27,30 475 vxor 9, 9, 26 476 bdz .Lprocess_block 477.long 0x7F402499 478 addi 4,4,8 479 vperm 26,26,27,31 480 vxor 5, 5, 26 481 bdz .Lprocess_block 482.long 0x7F402499 483 addi 4,4,8 484 vperm 26,26,27,31 485 vxor 6, 6, 26 486 bdz .Lprocess_block 487.long 0x7F402499 488 addi 4,4,8 489 vperm 26,26,27,31 490 vxor 7, 7, 26 491 bdz .Lprocess_block 492.long 0x7F402499 493 addi 4,4,8 494 vperm 26,26,27,31 495 vxor 8, 8, 26 496 bdz .Lprocess_block 497.long 0x7F402499 498 addi 4,4,8 499 vperm 26,26,27,31 500 vxor 9, 9, 26 501 bdz .Lprocess_block 502.long 0x7F402499 503 addi 4,4,8 504 vperm 26,26,27,30 505 vxor 10, 10, 26 506 bdz .Lprocess_block 507.long 0x7F402499 508 addi 4,4,8 509 vperm 26,26,27,31 510 vxor 10, 10, 26 511 bdz .Lprocess_block 512.long 0x7F402499 513 addi 4,4,8 514 vperm 26,26,27,30 515 vxor 11, 11, 26 516 bdz .Lprocess_block 517.long 0x7F402499 518 addi 4,4,8 519 vperm 26,26,27,31 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 12, 12, 26 526 527.Lprocess_block: 528 bl KeccakF1600_int 529 530 b .Loop_absorb 531 532.align 4 533.Labsorbed: 534 li 11,16 535.long 0x7C001F19 536 li 10,32 537.long 0x7C2B1F19 538 addi 11,11,32 539.long 0x7C4A1F19 540 addi 10,10,32 541.long 0x7C6B1F19 542 addi 11,11,32 543.long 0x7C8A1F19 544 addi 10,10,32 545.long 0x7CAB1F19 546 addi 11,11,32 547.long 0x7CCA1F19 548 addi 10,10,32 549.long 0x7CEB1F19 550 addi 11,11,32 551.long 0x7D0A1F19 552 addi 10,10,32 553.long 0x7D2B1F19 554 addi 11,11,32 555.long 0x7D4A1F19 556 addi 10,10,32 557.long 0x7D6B1F19 558.long 0x7D8A1D99 559 560 mr 3,5 561 li 10,39 562 li 11,55 563 mtlr 8 564 mtspr 256,7 565 lvx 20,10,1 566 addi 10,10,32 567 lvx 21,11,1 568 addi 11,11,32 569 lvx 22,10,1 570 addi 10,10,32 571 lvx 23,11,1 572 addi 11,11,32 573 lvx 24,10,1 574 addi 10,10,32 575 lvx 25,11,1 576 addi 11,11,32 577 lvx 26,10,1 578 addi 10,10,32 579 lvx 27,11,1 580 addi 11,11,32 581 lvx 28,10,1 582 addi 10,10,32 583 lvx 29,11,1 584 addi 11,11,32 585 lvx 30,10,1 586 lvx 31,11,1 587 addi 1,1,232 588 blr 589.long 0 590.byte 0,12,0x04,1,0x80,0,4,0 591.long 0 592 593.globl SHA3_squeeze 594.type SHA3_squeeze,@function 595 596.align 5 597SHA3_squeeze: 598 mflr 9 599 subi 4,4,1 600 addi 8,3,4 601 mr 10,6 602 li 11,0 603 b .Loop_squeeze 604.align 4 605.Loop_squeeze: 606 lwzx 7,11,8 607 lwzx 0,11,3 608 cmplwi 5,8 609 blt .Lsqueeze_tail 610 611 stbu 7,1(4) 612 srwi 7,7,8 613 stbu 7,1(4) 614 srwi 7,7,8 615 stbu 7,1(4) 616 srwi 7,7,8 617 stbu 7,1(4) 618 stbu 0,1(4) 619 srwi 0,0,8 620 stbu 0,1(4) 621 srwi 0,0,8 622 stbu 0,1(4) 623 srwi 0,0,8 624 stbu 0,1(4) 625 626 subic. 5,5,8 627 bclr 12,2 628 629 subic. 10,10,8 630 ble .Loutput_expand 631 632 addi 11,11,16 633 cmplwi 11,80 634 blt .Loop_squeeze 635 subi 11,11,72 636 beq .Loop_squeeze 637 addi 11,11,72 638 cmplwi 11,88 639 subi 11,11,8 640 beq .Loop_squeeze 641 addi 11,11,8 642 cmplwi 11,160 643 subi 11,11,72 644 beq .Loop_squeeze 645 addi 11,11,72 646 blt .Loop_squeeze 647 subi 11,11,8 648 b .Loop_squeeze 649 650.align 4 651.Loutput_expand: 652 bl KeccakF1600 653 mtlr 9 654 655 addi 8,3,4 656 mr 10,6 657 li 11,0 658 b .Loop_squeeze 659 660.align 4 661.Lsqueeze_tail: 662 mtctr 5 663 subic. 5,5,4 664 ble .Loop_tail_lo 665 li 8,4 666 mtctr 8 667.Loop_tail_lo: 668 stbu 7,1(4) 669 srdi 7,7,8 670 bc 16,0,.Loop_tail_lo 671 ble .Lsqueeze_done 672 mtctr 5 673.Loop_tail_hi: 674 stbu 0,1(4) 675 srdi 0,0,8 676 bc 16,0,.Loop_tail_hi 677 678.Lsqueeze_done: 679 blr 680.long 0 681.byte 0,12,0x14,0,0,0,4,0 682.long 0 683 684.align 6 685PICmeup: 686 mflr 0 687 bcl 20,31,$+4 688 mflr 12 689 addi 12,12,56 690 mtlr 0 691 blr 692.long 0 693.byte 0,12,0x14,0,0,0,0,0 694.space 28 695 696.align 6 697rhotates: 698.long 0,0 699.long 0,36 700.long 0,1 701.long 0,44 702.long 0,62 703.long 0,6 704.long 0,28 705.long 0,55 706.long 0,27 707.long 0,20 708.long 0,3 709.long 0,41 710.long 0,10 711.long 0,45 712.long 0,43 713.long 0,15 714.long 0,25 715.long 0,21 716.long 0,39 717.long 0,8 718.long 0,18 719.long 0,2 720.long 0,61 721.long 0,56 722.long 0,14 723.long 0,14 724 725.long 0,0 726.long 0,0 727.long 0x00010203,0x04050607 728.long 0x10111213,0x14151617 729.long 0x10111213,0x14151617 730.long 0x00010203,0x04050607 731 732iotas: 733.long 0x00000000,0x00000001 734.long 0,0 735.long 0x00000000,0x00008082 736.long 0,0 737.long 0x80000000,0x0000808a 738.long 0,0 739.long 0x80000000,0x80008000 740.long 0,0 741.long 0x00000000,0x0000808b 742.long 0,0 743.long 0x00000000,0x80000001 744.long 0,0 745.long 0x80000000,0x80008081 746.long 0,0 747.long 0x80000000,0x00008009 748.long 0,0 749.long 0x00000000,0x0000008a 750.long 0,0 751.long 0x00000000,0x00000088 752.long 0,0 753.long 0x00000000,0x80008009 754.long 0,0 755.long 0x00000000,0x8000000a 756.long 0,0 757.long 0x00000000,0x8000808b 758.long 0,0 759.long 0x80000000,0x0000008b 760.long 0,0 761.long 0x80000000,0x00008089 762.long 0,0 763.long 0x80000000,0x00008003 764.long 0,0 765.long 0x80000000,0x00008002 766.long 0,0 767.long 0x80000000,0x00000080 768.long 0,0 769.long 0x00000000,0x0000800a 770.long 0,0 771.long 0x80000000,0x8000000a 772.long 0,0 773.long 0x80000000,0x80008081 774.long 0,0 775.long 0x80000000,0x00008080 776.long 0,0 777.long 0x00000000,0x80000001 778.long 0,0 779.long 0x80000000,0x80008008 780.long 0,0 781 782.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 783.align 2 784