1 .csect .text[PR],7 2 3 4 .align 5 5 KeccakF1600_int: 6 li 0,24 7 mtctr 0 8 b Loop 9 .align 4 10 Loop: 11 xor 0,7,12 12 std 11,96(1) 13 xor 3,8,6 14 std 16,104(1) 15 xor 4,9,14 16 std 21,112(1) 17 xor 5,10,15 18 std 26,120(1) 19 xor 11,11,16 20 xor 0,0,17 21 xor 3,3,18 22 xor 4,4,19 23 xor 5,5,20 24 xor 11,11,21 25 xor 0,0,22 26 xor 3,3,23 27 xor 4,4,24 28 xor 5,5,25 29 xor 11,11,26 30 xor 0,0,27 31 xor 4,4,29 32 xor 3,3,28 33 xor 5,5,30 34 rotldi 16,4,1 35 xor 11,11,31 36 rotldi 21,5,1 37 xor 16,16,0 38 rotldi 26,11,1 39 40 xor 8,8,16 41 xor 6,6,16 42 xor 18,18,16 43 xor 23,23,16 44 xor 28,28,16 45 46 rotldi 16,0,1 47 xor 21,21,3 48 xor 4,4,26 49 rotldi 26,3,1 50 xor 5,5,16 51 xor 11,11,26 52 53 xor 3, 9,21 54 xor 14,14,21 55 xor 19,19,21 56 xor 24,24,21 57 xor 29,29,21 58 59 xor 7,7,11 60 xor 12,12,11 61 xor 17,17,11 62 xor 22,22,11 63 xor 27,27,11 64 ld 11,96(1) 65 xor 0, 10,4 66 ld 16,104(1) 67 xor 15,15,4 68 ld 21,112(1) 69 xor 20,20,4 70 ld 26,120(1) 71 xor 25,25,4 72 xor 30,30,4 73 74 xor 4, 11,5 75 xor 16,16,5 76 xor 21,21,5 77 xor 26,26,5 78 xor 31,31,5 79 80 mr 5,8 81 rotldi 8,6,44 82 83 rotldi 9,19,43 84 85 rotldi 10,25,21 86 87 rotldi 11,31,14 88 89 rotldi 6,16,20 90 rotldi 19,20,25 91 rotldi 25,24,15 92 rotldi 31,28,2 93 94 rotldi 16,29,61 95 rotldi 20,26,8 96 rotldi 24,18,10 97 rotldi 28,15,55 98 99 rotldi 29,21,39 100 rotldi 26,30,56 101 rotldi 18,14,6 102 rotldi 15,23,45 103 104 rotldi 21,27,18 105 rotldi 30,22,41 106 rotldi 14,17,3 107 rotldi 23,12,36 108 109 rotldi 12,0,28 110 rotldi 17,5,1 111 rotldi 22,4,27 112 rotldi 27,3,62 113 114 andc 0,9,8 115 andc 3,10,9 116 andc 4,7,11 117 andc 5,8,7 118 xor 7,7,0 119 andc 0,11,10 120 xor 8,8,3 121 ld 3,80(1) 122 xor 10,10,4 123 xor 11,11,5 124 xor 9,9,0 125 ldu 5,8(3) 126 127 andc 0,14,6 128 std 3,80(1) 129 andc 3,15,14 130 andc 4,12,16 131 xor 7,7,5 132 andc 5,6,12 133 xor 12,12,0 134 andc 0,16,15 135 xor 6,6,3 136 xor 15,15,4 137 xor 16,16,5 138 xor 14,14,0 139 140 andc 0,19,18 141 andc 3,20,19 142 andc 4,17,21 143 andc 5,18,17 144 xor 17,17,0 145 andc 0,21,20 146 xor 18,18,3 147 xor 20,20,4 148 xor 21,21,5 149 xor 19,19,0 150 151 andc 0,24,23 152 andc 3,25,24 153 andc 4,22,26 154 andc 5,23,22 155 xor 22,22,0 156 andc 0,26,25 157 xor 23,23,3 158 xor 25,25,4 159 xor 26,26,5 160 xor 24,24,0 161 162 andc 0,29,28 163 andc 3,30,29 164 andc 4,27,31 165 andc 5,28,27 166 xor 27,27,0 167 andc 0,31,30 168 xor 28,28,3 169 xor 30,30,4 170 xor 31,31,5 171 xor 29,29,0 172 173 bc 16,0,Loop 174 175 blr 176 .long 0 177 .byte 0,12,0x14,0,0,0,0,0 178 179 180 181 .align 5 182 KeccakF1600: 183 stdu 1,-272(1) 184 mflr 0 185 std 14,128(1) 186 std 15,136(1) 187 std 16,144(1) 188 std 17,152(1) 189 std 18,160(1) 190 std 19,168(1) 191 std 20,176(1) 192 std 21,184(1) 193 std 22,192(1) 194 std 23,200(1) 195 std 24,208(1) 196 std 25,216(1) 197 std 26,224(1) 198 std 27,232(1) 199 std 28,240(1) 200 std 29,248(1) 201 std 30,256(1) 202 std 31,264(1) 203 std 0,288(1) 204 205 bl PICmeup 206 subi 12,12,8 207 208 std 3,48(1) 209 210 211 212 std 12,80(1) 213 214 ld 7,0(3) 215 ld 8,8(3) 216 ld 9,16(3) 217 ld 10,24(3) 218 ld 11,32(3) 219 ld 12,40(3) 220 ld 6,48(3) 221 ld 14,56(3) 222 ld 15,64(3) 223 ld 16,72(3) 224 ld 17,80(3) 225 ld 18,88(3) 226 ld 19,96(3) 227 ld 20,104(3) 228 ld 21,112(3) 229 ld 22,120(3) 230 ld 23,128(3) 231 ld 24,136(3) 232 ld 25,144(3) 233 ld 26,152(3) 234 ld 27,160(3) 235 ld 28,168(3) 236 ld 29,176(3) 237 ld 30,184(3) 238 ld 31,192(3) 239 240 bl KeccakF1600_int 241 242 ld 3,48(1) 243 std 7,0(3) 244 std 8,8(3) 245 std 9,16(3) 246 std 10,24(3) 247 std 11,32(3) 248 std 12,40(3) 249 std 6,48(3) 250 std 14,56(3) 251 std 15,64(3) 252 std 16,72(3) 253 std 17,80(3) 254 std 18,88(3) 255 std 19,96(3) 256 std 20,104(3) 257 std 21,112(3) 258 std 22,120(3) 259 std 23,128(3) 260 std 24,136(3) 261 std 25,144(3) 262 std 26,152(3) 263 std 27,160(3) 264 std 28,168(3) 265 std 29,176(3) 266 std 30,184(3) 267 std 31,192(3) 268 269 ld 0,288(1) 270 ld 14,128(1) 271 ld 15,136(1) 272 ld 16,144(1) 273 ld 17,152(1) 274 ld 18,160(1) 275 ld 19,168(1) 276 ld 20,176(1) 277 ld 21,184(1) 278 ld 22,192(1) 279 ld 23,200(1) 280 ld 24,208(1) 281 ld 25,216(1) 282 ld 26,224(1) 283 ld 27,232(1) 284 ld 28,240(1) 285 ld 29,248(1) 286 ld 30,256(1) 287 ld 31,264(1) 288 mtlr 0 289 addi 1,1,272 290 blr 291 .long 0 292 .byte 0,12,4,1,0x80,18,1,0 293 .long 0 294 295 296 297 .align 5 298 dword_le_load: 299 lbz 0,1(3) 300 lbz 4,2(3) 301 lbz 5,3(3) 302 insrdi 0,4,8,48 303 lbz 4,4(3) 304 insrdi 0,5,8,40 305 lbz 5,5(3) 306 insrdi 0,4,8,32 307 lbz 4,6(3) 308 insrdi 0,5,8,24 309 lbz 5,7(3) 310 insrdi 0,4,8,16 311 lbzu 4,8(3) 312 insrdi 0,5,8,8 313 insrdi 0,4,8,0 314 blr 315 .long 0 316 .byte 0,12,0x14,0,0,0,1,0 317 .long 0 318 319 320 .globl .SHA3_absorb 321 322 .align 5 323 .SHA3_absorb: 324 stdu 1,-272(1) 325 mflr 0 326 std 14,128(1) 327 std 15,136(1) 328 std 16,144(1) 329 std 17,152(1) 330 std 18,160(1) 331 std 19,168(1) 332 std 20,176(1) 333 std 21,184(1) 334 std 22,192(1) 335 std 23,200(1) 336 std 24,208(1) 337 std 25,216(1) 338 std 26,224(1) 339 std 27,232(1) 340 std 28,240(1) 341 std 29,248(1) 342 std 30,256(1) 343 std 31,264(1) 344 std 0,288(1) 345 346 bl PICmeup 347 subi 4,4,1 348 subi 12,12,8 349 350 std 3,48(1) 351 std 4,56(1) 352 std 5,64(1) 353 std 6,72(1) 354 mr 0,6 355 std 12,80(1) 356 357 ld 7,0(3) 358 ld 8,8(3) 359 ld 9,16(3) 360 ld 10,24(3) 361 ld 11,32(3) 362 ld 12,40(3) 363 ld 6,48(3) 364 ld 14,56(3) 365 ld 15,64(3) 366 ld 16,72(3) 367 ld 17,80(3) 368 ld 18,88(3) 369 ld 19,96(3) 370 ld 20,104(3) 371 ld 21,112(3) 372 ld 22,120(3) 373 ld 23,128(3) 374 ld 24,136(3) 375 ld 25,144(3) 376 ld 26,152(3) 377 ld 27,160(3) 378 ld 28,168(3) 379 ld 29,176(3) 380 ld 30,184(3) 381 ld 31,192(3) 382 383 mr 3,4 384 mr 4,5 385 mr 5,0 386 387 b Loop_absorb 388 389 .align 4 390 Loop_absorb: 391 cmpld 4,5 392 blt Labsorbed 393 394 sub 4,4,5 395 srwi 5,5,3 396 std 4,64(1) 397 mtctr 5 398 bl dword_le_load 399 xor 7,7,0 400 bdz Lprocess_block 401 bl dword_le_load 402 xor 8,8,0 403 bdz Lprocess_block 404 bl dword_le_load 405 xor 9,9,0 406 bdz Lprocess_block 407 bl dword_le_load 408 xor 10,10,0 409 bdz Lprocess_block 410 bl dword_le_load 411 xor 11,11,0 412 bdz Lprocess_block 413 bl dword_le_load 414 xor 12,12,0 415 bdz Lprocess_block 416 bl dword_le_load 417 xor 6,6,0 418 bdz Lprocess_block 419 bl dword_le_load 420 xor 14,14,0 421 bdz Lprocess_block 422 bl dword_le_load 423 xor 15,15,0 424 bdz Lprocess_block 425 bl dword_le_load 426 xor 16,16,0 427 bdz Lprocess_block 428 bl dword_le_load 429 xor 17,17,0 430 bdz Lprocess_block 431 bl dword_le_load 432 xor 18,18,0 433 bdz Lprocess_block 434 bl dword_le_load 435 xor 19,19,0 436 bdz Lprocess_block 437 bl dword_le_load 438 xor 20,20,0 439 bdz Lprocess_block 440 bl dword_le_load 441 xor 21,21,0 442 bdz Lprocess_block 443 bl dword_le_load 444 xor 22,22,0 445 bdz Lprocess_block 446 bl dword_le_load 447 xor 23,23,0 448 bdz Lprocess_block 449 bl dword_le_load 450 xor 24,24,0 451 bdz Lprocess_block 452 bl dword_le_load 453 xor 25,25,0 454 bdz Lprocess_block 455 bl dword_le_load 456 xor 26,26,0 457 bdz Lprocess_block 458 bl dword_le_load 459 xor 27,27,0 460 bdz Lprocess_block 461 bl dword_le_load 462 xor 28,28,0 463 bdz Lprocess_block 464 bl dword_le_load 465 xor 29,29,0 466 bdz Lprocess_block 467 bl dword_le_load 468 xor 30,30,0 469 bdz Lprocess_block 470 bl dword_le_load 471 xor 31,31,0 472 473 Lprocess_block: 474 std 3,56(1) 475 476 bl KeccakF1600_int 477 478 ld 0,80(1) 479 ld 5,72(1) 480 ld 4,64(1) 481 ld 3,56(1) 482 addic 0,0,-192 483 std 0,80(1) 484 485 b Loop_absorb 486 487 .align 4 488 Labsorbed: 489 ld 3,48(1) 490 std 7,0(3) 491 std 8,8(3) 492 std 9,16(3) 493 std 10,24(3) 494 std 11,32(3) 495 std 12,40(3) 496 std 6,48(3) 497 std 14,56(3) 498 std 15,64(3) 499 std 16,72(3) 500 std 17,80(3) 501 std 18,88(3) 502 std 19,96(3) 503 std 20,104(3) 504 std 21,112(3) 505 std 22,120(3) 506 std 23,128(3) 507 std 24,136(3) 508 std 25,144(3) 509 std 26,152(3) 510 std 27,160(3) 511 std 28,168(3) 512 std 29,176(3) 513 std 30,184(3) 514 std 31,192(3) 515 516 mr 3,4 517 ld 0,288(1) 518 ld 14,128(1) 519 ld 15,136(1) 520 ld 16,144(1) 521 ld 17,152(1) 522 ld 18,160(1) 523 ld 19,168(1) 524 ld 20,176(1) 525 ld 21,184(1) 526 ld 22,192(1) 527 ld 23,200(1) 528 ld 24,208(1) 529 ld 25,216(1) 530 ld 26,224(1) 531 ld 27,232(1) 532 ld 28,240(1) 533 ld 29,248(1) 534 ld 30,256(1) 535 ld 31,264(1) 536 mtlr 0 537 addi 1,1,272 538 blr 539 .long 0 540 .byte 0,12,4,1,0x80,18,4,0 541 .long 0 542 543 .globl .SHA3_squeeze 544 545 .align 5 546 .SHA3_squeeze: 547 stdu 1,-80(1) 548 mflr 0 549 std 28,48(1) 550 std 29,56(1) 551 std 30,64(1) 552 std 31,72(1) 553 std 0,96(1) 554 555 mr 28,3 556 subi 3,3,8 557 subi 29,4,1 558 mr 30,5 559 mr 31,6 560 b Loop_squeeze 561 562 .align 4 563 Loop_squeeze: 564 ldu 0,8(3) 565 cmpldi 30,8 566 blt Lsqueeze_tail 567 568 stb 0,1(29) 569 srdi 0,0,8 570 stb 0,2(29) 571 srdi 0,0,8 572 stb 0,3(29) 573 srdi 0,0,8 574 stb 0,4(29) 575 srdi 0,0,8 576 stb 0,5(29) 577 srdi 0,0,8 578 stb 0,6(29) 579 srdi 0,0,8 580 stb 0,7(29) 581 srdi 0,0,8 582 stbu 0,8(29) 583 584 subic. 30,30,8 585 beq Lsqueeze_done 586 587 subic. 6,6,8 588 bgt Loop_squeeze 589 590 mr 3,28 591 bl KeccakF1600 592 subi 3,28,8 593 mr 6,31 594 b Loop_squeeze 595 596 .align 4 597 Lsqueeze_tail: 598 mtctr 30 599 Loop_tail: 600 stbu 0,1(29) 601 srdi 0,0,8 602 bc 16,0,Loop_tail 603 604 Lsqueeze_done: 605 ld 0,96(1) 606 ld 28,48(1) 607 ld 29,56(1) 608 ld 30,64(1) 609 ld 31,72(1) 610 mtlr 0 611 addi 1,1,80 612 blr 613 .long 0 614 .byte 0,12,4,1,0x80,4,4,0 615 .long 0 616 617 .align 6 618 PICmeup: 619 mflr 0 620 bcl 20,31,$+4 621 mflr 12 622 addi 12,12,56 623 mtlr 0 624 blr 625 .long 0 626 .byte 0,12,0x14,0,0,0,0,0 627 .space 28 628 629 iotas: 630 .long 0x00000000,0x00000001 631 .long 0x00000000,0x00008082 632 .long 0x80000000,0x0000808a 633 .long 0x80000000,0x80008000 634 .long 0x00000000,0x0000808b 635 .long 0x00000000,0x80000001 636 .long 0x80000000,0x80008081 637 .long 0x80000000,0x00008009 638 .long 0x00000000,0x0000008a 639 .long 0x00000000,0x00000088 640 .long 0x00000000,0x80008009 641 .long 0x00000000,0x8000000a 642 .long 0x00000000,0x8000808b 643 .long 0x80000000,0x0000008b 644 .long 0x80000000,0x00008089 645 .long 0x80000000,0x00008003 646 .long 0x80000000,0x00008002 647 .long 0x80000000,0x00000080 648 .long 0x00000000,0x0000800a 649 .long 0x80000000,0x8000000a 650 .long 0x80000000,0x80008081 651 .long 0x80000000,0x00008080 652 .long 0x00000000,0x80000001 653 .long 0x80000000,0x80008008 654 655 .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,80,67,54,52,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 656 .align 2 657