1 #include <machine/asm.h> 2 .text 3 .p2align 3 4 .globl rv64i_zvkned_cbc_encrypt 5 .type rv64i_zvkned_cbc_encrypt,@function 6 rv64i_zvkned_cbc_encrypt: 7 # check whether the length is a multiple of 16 and >= 16 8 li t1, 16 9 blt a2, t1, L_end 10 andi t1, a2, 15 11 bnez t1, L_end 12 13 # Load number of rounds 14 lwu t2, 240(a3) 15 16 # Get proper routine for key size 17 li t0, 10 18 beq t2, t0, L_cbc_enc_128 19 20 li t0, 12 21 beq t2, t0, L_cbc_enc_192 22 23 li t0, 14 24 beq t2, t0, L_cbc_enc_256 25 26 ret 27 .size rv64i_zvkned_cbc_encrypt,.-rv64i_zvkned_cbc_encrypt 28 .p2align 3 29 L_cbc_enc_128: 30 # Load all 11 round keys to v1-v11 registers. 31 .word 3439489111 32 .word 34005127 33 addi a3, a3, 16 34 .word 34005255 35 addi a3, a3, 16 36 .word 34005383 37 addi a3, a3, 16 38 .word 34005511 39 addi a3, a3, 16 40 .word 34005639 41 addi a3, a3, 16 42 .word 34005767 43 addi a3, a3, 16 44 .word 34005895 45 addi a3, a3, 16 46 .word 34006023 47 addi a3, a3, 16 48 .word 34006151 49 addi a3, a3, 16 50 .word 34006279 51 addi a3, a3, 16 52 .word 34006407 53 54 55 # Load IV. 56 .word 34039815 57 58 .word 33909767 59 .word 797445207 60 j 2f 61 62 1: 63 .word 33908871 64 .word 797477975 65 66 2: 67 # AES body 68 .word 2786307191 # with round key w[ 0, 3] 69 .word 2787191927 # with round key w[ 4, 7] 70 .word 2788240503 # with round key w[ 8,11] 71 .word 2789289079 # with round key w[12,15] 72 .word 2790337655 # with round key w[16,19] 73 .word 2791386231 # with round key w[20,23] 74 .word 2792434807 # with round key w[24,27] 75 .word 2793483383 # with round key w[28,31] 76 .word 2794531959 # with round key w[32,35] 77 .word 2795580535 # with round key w[36,39] 78 .word 2796661879 # with round key w[40,43] 79 80 81 .word 33942567 82 83 addi a0, a0, 16 84 addi a1, a1, 16 85 addi a2, a2, -16 86 87 bnez a2, 1b 88 89 .word 34040871 90 91 ret 92 .size L_cbc_enc_128,.-L_cbc_enc_128 93 .p2align 3 94 L_cbc_enc_192: 95 # Load all 13 round keys to v1-v13 registers. 96 .word 3439489111 97 .word 34005127 98 addi a3, a3, 16 99 .word 34005255 100 addi a3, a3, 16 101 .word 34005383 102 addi a3, a3, 16 103 .word 34005511 104 addi a3, a3, 16 105 .word 34005639 106 addi a3, a3, 16 107 .word 34005767 108 addi a3, a3, 16 109 .word 34005895 110 addi a3, a3, 16 111 .word 34006023 112 addi a3, a3, 16 113 .word 34006151 114 addi a3, a3, 16 115 .word 34006279 116 addi a3, a3, 16 117 .word 34006407 118 addi a3, a3, 16 119 .word 34006535 120 addi a3, a3, 16 121 .word 34006663 122 123 124 # Load IV. 125 .word 34039815 126 127 .word 33909767 128 .word 797445207 129 j 2f 130 131 1: 132 .word 33908871 133 .word 797477975 134 135 2: 136 # AES body 137 .word 2786307191 # with round key w[ 0, 3] 138 .word 2787191927 # with round key w[ 4, 7] 139 .word 2788240503 # with round key w[ 8,11] 140 .word 2789289079 # with round key w[12,15] 141 .word 2790337655 # with round key w[16,19] 142 .word 2791386231 # with round key w[20,23] 143 .word 2792434807 # with round key w[24,27] 144 .word 2793483383 # with round key w[28,31] 145 .word 2794531959 # with round key w[32,35] 146 .word 2795580535 # with round key w[36,39] 147 .word 2796629111 # with round key w[40,43] 148 .word 2797677687 # with round key w[44,47] 149 .word 2798759031 # with round key w[48,51] 150 151 152 .word 33942567 153 154 addi a0, a0, 16 155 addi a1, a1, 16 156 addi a2, a2, -16 157 158 bnez a2, 1b 159 160 .word 34040871 161 162 ret 163 .size L_cbc_enc_192,.-L_cbc_enc_192 164 .p2align 3 165 L_cbc_enc_256: 166 # Load all 15 round keys to v1-v15 registers. 167 .word 3439489111 168 .word 34005127 169 addi a3, a3, 16 170 .word 34005255 171 addi a3, a3, 16 172 .word 34005383 173 addi a3, a3, 16 174 .word 34005511 175 addi a3, a3, 16 176 .word 34005639 177 addi a3, a3, 16 178 .word 34005767 179 addi a3, a3, 16 180 .word 34005895 181 addi a3, a3, 16 182 .word 34006023 183 addi a3, a3, 16 184 .word 34006151 185 addi a3, a3, 16 186 .word 34006279 187 addi a3, a3, 16 188 .word 34006407 189 addi a3, a3, 16 190 .word 34006535 191 addi a3, a3, 16 192 .word 34006663 193 addi a3, a3, 16 194 .word 34006791 195 addi a3, a3, 16 196 .word 34006919 197 198 199 # Load IV. 200 .word 34039815 201 202 .word 33909767 203 .word 797445207 204 j 2f 205 206 1: 207 .word 33908871 208 .word 797477975 209 210 2: 211 # AES body 212 .word 2786307191 # with round key w[ 0, 3] 213 .word 2787191927 # with round key w[ 4, 7] 214 .word 2788240503 # with round key w[ 8,11] 215 .word 2789289079 # with round key w[12,15] 216 .word 2790337655 # with round key w[16,19] 217 .word 2791386231 # with round key w[20,23] 218 .word 2792434807 # with round key w[24,27] 219 .word 2793483383 # with round key w[28,31] 220 .word 2794531959 # with round key w[32,35] 221 .word 2795580535 # with round key w[36,39] 222 .word 2796629111 # with round key w[40,43] 223 .word 2797677687 # with round key w[44,47] 224 .word 2798726263 # with round key w[48,51] 225 .word 2799774839 # with round key w[52,55] 226 .word 2800856183 # with round key w[56,59] 227 228 229 .word 33942567 230 231 addi a0, a0, 16 232 addi a1, a1, 16 233 addi a2, a2, -16 234 235 bnez a2, 1b 236 237 .word 34040871 238 239 ret 240 .size L_cbc_enc_256,.-L_cbc_enc_256 241 .p2align 3 242 .globl rv64i_zvkned_cbc_decrypt 243 .type rv64i_zvkned_cbc_decrypt,@function 244 rv64i_zvkned_cbc_decrypt: 245 # check whether the length is a multiple of 16 and >= 16 246 li t1, 16 247 blt a2, t1, L_end 248 andi t1, a2, 15 249 bnez t1, L_end 250 251 # Load number of rounds 252 lwu t2, 240(a3) 253 254 # Get proper routine for key size 255 li t0, 10 256 beq t2, t0, L_cbc_dec_128 257 258 li t0, 12 259 beq t2, t0, L_cbc_dec_192 260 261 li t0, 14 262 beq t2, t0, L_cbc_dec_256 263 264 ret 265 .size rv64i_zvkned_cbc_decrypt,.-rv64i_zvkned_cbc_decrypt 266 .p2align 3 267 L_cbc_dec_128: 268 # Load all 11 round keys to v1-v11 registers. 269 .word 3439489111 270 .word 34005127 271 addi a3, a3, 16 272 .word 34005255 273 addi a3, a3, 16 274 .word 34005383 275 addi a3, a3, 16 276 .word 34005511 277 addi a3, a3, 16 278 .word 34005639 279 addi a3, a3, 16 280 .word 34005767 281 addi a3, a3, 16 282 .word 34005895 283 addi a3, a3, 16 284 .word 34006023 285 addi a3, a3, 16 286 .word 34006151 287 addi a3, a3, 16 288 .word 34006279 289 addi a3, a3, 16 290 .word 34006407 291 292 293 # Load IV. 294 .word 34039815 295 296 .word 33909767 297 .word 1577846999 298 j 2f 299 300 1: 301 .word 33909767 302 .word 1577846999 303 addi a1, a1, 16 304 305 2: 306 # AES body 307 .word 2796792951 # with round key w[40,43] 308 .word 2795514999 # with round key w[36,39] 309 .word 2794466423 # with round key w[32,35] 310 .word 2793417847 # with round key w[28,31] 311 .word 2792369271 # with round key w[24,27] 312 .word 2791320695 # with round key w[20,23] 313 .word 2790272119 # with round key w[16,19] 314 .word 2789223543 # with round key w[12,15] 315 .word 2788174967 # with round key w[ 8,11] 316 .word 2787126391 # with round key w[ 4, 7] 317 .word 2786110583 # with round key w[ 0, 3] 318 319 320 .word 797445207 321 .word 33942567 322 .word 1577617495 323 324 addi a2, a2, -16 325 addi a0, a0, 16 326 327 bnez a2, 1b 328 329 .word 34039847 330 331 ret 332 .size L_cbc_dec_128,.-L_cbc_dec_128 333 .p2align 3 334 L_cbc_dec_192: 335 # Load all 13 round keys to v1-v13 registers. 336 .word 3439489111 337 .word 34005127 338 addi a3, a3, 16 339 .word 34005255 340 addi a3, a3, 16 341 .word 34005383 342 addi a3, a3, 16 343 .word 34005511 344 addi a3, a3, 16 345 .word 34005639 346 addi a3, a3, 16 347 .word 34005767 348 addi a3, a3, 16 349 .word 34005895 350 addi a3, a3, 16 351 .word 34006023 352 addi a3, a3, 16 353 .word 34006151 354 addi a3, a3, 16 355 .word 34006279 356 addi a3, a3, 16 357 .word 34006407 358 addi a3, a3, 16 359 .word 34006535 360 addi a3, a3, 16 361 .word 34006663 362 363 364 # Load IV. 365 .word 34039815 366 367 .word 33909767 368 .word 1577846999 369 j 2f 370 371 1: 372 .word 33909767 373 .word 1577846999 374 addi a1, a1, 16 375 376 2: 377 # AES body 378 .word 2798890103 # with round key w[48,51] 379 .word 2797612151 # with round key w[44,47] 380 .word 2796563575 # with round key w[40,43] 381 .word 2795514999 # with round key w[36,39] 382 .word 2794466423 # with round key w[32,35] 383 .word 2793417847 # with round key w[28,31] 384 .word 2792369271 # with round key w[24,27] 385 .word 2791320695 # with round key w[20,23] 386 .word 2790272119 # with round key w[16,19] 387 .word 2789223543 # with round key w[12,15] 388 .word 2788174967 # with round key w[ 8,11] 389 .word 2787126391 # with round key w[ 4, 7] 390 .word 2786110583 # with round key w[ 0, 3] 391 392 393 .word 797445207 394 .word 33942567 395 .word 1577617495 396 397 addi a2, a2, -16 398 addi a0, a0, 16 399 400 bnez a2, 1b 401 402 .word 34039847 403 404 ret 405 .size L_cbc_dec_192,.-L_cbc_dec_192 406 .p2align 3 407 L_cbc_dec_256: 408 # Load all 15 round keys to v1-v15 registers. 409 .word 3439489111 410 .word 34005127 411 addi a3, a3, 16 412 .word 34005255 413 addi a3, a3, 16 414 .word 34005383 415 addi a3, a3, 16 416 .word 34005511 417 addi a3, a3, 16 418 .word 34005639 419 addi a3, a3, 16 420 .word 34005767 421 addi a3, a3, 16 422 .word 34005895 423 addi a3, a3, 16 424 .word 34006023 425 addi a3, a3, 16 426 .word 34006151 427 addi a3, a3, 16 428 .word 34006279 429 addi a3, a3, 16 430 .word 34006407 431 addi a3, a3, 16 432 .word 34006535 433 addi a3, a3, 16 434 .word 34006663 435 addi a3, a3, 16 436 .word 34006791 437 addi a3, a3, 16 438 .word 34006919 439 440 441 # Load IV. 442 .word 34039815 443 444 .word 33909767 445 .word 1577846999 446 j 2f 447 448 1: 449 .word 33909767 450 .word 1577846999 451 addi a1, a1, 16 452 453 2: 454 # AES body 455 .word 2800987255 # with round key w[56,59] 456 .word 2799709303 # with round key w[52,55] 457 .word 2798660727 # with round key w[48,51] 458 .word 2797612151 # with round key w[44,47] 459 .word 2796563575 # with round key w[40,43] 460 .word 2795514999 # with round key w[36,39] 461 .word 2794466423 # with round key w[32,35] 462 .word 2793417847 # with round key w[28,31] 463 .word 2792369271 # with round key w[24,27] 464 .word 2791320695 # with round key w[20,23] 465 .word 2790272119 # with round key w[16,19] 466 .word 2789223543 # with round key w[12,15] 467 .word 2788174967 # with round key w[ 8,11] 468 .word 2787126391 # with round key w[ 4, 7] 469 .word 2786110583 # with round key w[ 0, 3] 470 471 472 .word 797445207 473 .word 33942567 474 .word 1577617495 475 476 addi a2, a2, -16 477 addi a0, a0, 16 478 479 bnez a2, 1b 480 481 .word 34039847 482 483 ret 484 .size L_cbc_dec_256,.-L_cbc_dec_256 485 .p2align 3 486 .globl rv64i_zvkned_ecb_encrypt 487 .type rv64i_zvkned_ecb_encrypt,@function 488 rv64i_zvkned_ecb_encrypt: 489 # Make the LEN become e32 length. 490 srli t3, a2, 2 491 492 # Load number of rounds 493 lwu t2, 240(a3) 494 495 # Get proper routine for key size 496 li t0, 10 497 beq t2, t0, L_ecb_enc_128 498 499 li t0, 12 500 beq t2, t0, L_ecb_enc_192 501 502 li t0, 14 503 beq t2, t0, L_ecb_enc_256 504 505 ret 506 .size rv64i_zvkned_ecb_encrypt,.-rv64i_zvkned_ecb_encrypt 507 .p2align 3 508 L_ecb_enc_128: 509 # Load all 11 round keys to v1-v11 registers. 510 .word 3439489111 511 .word 34005127 512 addi a3, a3, 16 513 .word 34005255 514 addi a3, a3, 16 515 .word 34005383 516 addi a3, a3, 16 517 .word 34005511 518 addi a3, a3, 16 519 .word 34005639 520 addi a3, a3, 16 521 .word 34005767 522 addi a3, a3, 16 523 .word 34005895 524 addi a3, a3, 16 525 .word 34006023 526 addi a3, a3, 16 527 .word 34006151 528 addi a3, a3, 16 529 .word 34006279 530 addi a3, a3, 16 531 .word 34006407 532 533 534 1: 535 .word 221149271 536 slli t0, a6, 2 537 sub t3, t3, a6 538 539 .word 33909767 540 541 # AES body 542 .word 2786307191 # with round key w[ 0, 3] 543 .word 2787191927 # with round key w[ 4, 7] 544 .word 2788240503 # with round key w[ 8,11] 545 .word 2789289079 # with round key w[12,15] 546 .word 2790337655 # with round key w[16,19] 547 .word 2791386231 # with round key w[20,23] 548 .word 2792434807 # with round key w[24,27] 549 .word 2793483383 # with round key w[28,31] 550 .word 2794531959 # with round key w[32,35] 551 .word 2795580535 # with round key w[36,39] 552 .word 2796661879 # with round key w[40,43] 553 554 555 .word 33942567 556 557 add a0, a0, t0 558 add a1, a1, t0 559 560 bnez t3, 1b 561 562 ret 563 .size L_ecb_enc_128,.-L_ecb_enc_128 564 .p2align 3 565 L_ecb_enc_192: 566 # Load all 13 round keys to v1-v13 registers. 567 .word 3439489111 568 .word 34005127 569 addi a3, a3, 16 570 .word 34005255 571 addi a3, a3, 16 572 .word 34005383 573 addi a3, a3, 16 574 .word 34005511 575 addi a3, a3, 16 576 .word 34005639 577 addi a3, a3, 16 578 .word 34005767 579 addi a3, a3, 16 580 .word 34005895 581 addi a3, a3, 16 582 .word 34006023 583 addi a3, a3, 16 584 .word 34006151 585 addi a3, a3, 16 586 .word 34006279 587 addi a3, a3, 16 588 .word 34006407 589 addi a3, a3, 16 590 .word 34006535 591 addi a3, a3, 16 592 .word 34006663 593 594 595 1: 596 .word 221149271 597 slli t0, a6, 2 598 sub t3, t3, a6 599 600 .word 33909767 601 602 # AES body 603 .word 2786307191 # with round key w[ 0, 3] 604 .word 2787191927 # with round key w[ 4, 7] 605 .word 2788240503 # with round key w[ 8,11] 606 .word 2789289079 # with round key w[12,15] 607 .word 2790337655 # with round key w[16,19] 608 .word 2791386231 # with round key w[20,23] 609 .word 2792434807 # with round key w[24,27] 610 .word 2793483383 # with round key w[28,31] 611 .word 2794531959 # with round key w[32,35] 612 .word 2795580535 # with round key w[36,39] 613 .word 2796629111 # with round key w[40,43] 614 .word 2797677687 # with round key w[44,47] 615 .word 2798759031 # with round key w[48,51] 616 617 618 .word 33942567 619 620 add a0, a0, t0 621 add a1, a1, t0 622 623 bnez t3, 1b 624 625 ret 626 .size L_ecb_enc_192,.-L_ecb_enc_192 627 .p2align 3 628 L_ecb_enc_256: 629 # Load all 15 round keys to v1-v15 registers. 630 .word 3439489111 631 .word 34005127 632 addi a3, a3, 16 633 .word 34005255 634 addi a3, a3, 16 635 .word 34005383 636 addi a3, a3, 16 637 .word 34005511 638 addi a3, a3, 16 639 .word 34005639 640 addi a3, a3, 16 641 .word 34005767 642 addi a3, a3, 16 643 .word 34005895 644 addi a3, a3, 16 645 .word 34006023 646 addi a3, a3, 16 647 .word 34006151 648 addi a3, a3, 16 649 .word 34006279 650 addi a3, a3, 16 651 .word 34006407 652 addi a3, a3, 16 653 .word 34006535 654 addi a3, a3, 16 655 .word 34006663 656 addi a3, a3, 16 657 .word 34006791 658 addi a3, a3, 16 659 .word 34006919 660 661 662 1: 663 .word 221149271 664 slli t0, a6, 2 665 sub t3, t3, a6 666 667 .word 33909767 668 669 # AES body 670 .word 2786307191 # with round key w[ 0, 3] 671 .word 2787191927 # with round key w[ 4, 7] 672 .word 2788240503 # with round key w[ 8,11] 673 .word 2789289079 # with round key w[12,15] 674 .word 2790337655 # with round key w[16,19] 675 .word 2791386231 # with round key w[20,23] 676 .word 2792434807 # with round key w[24,27] 677 .word 2793483383 # with round key w[28,31] 678 .word 2794531959 # with round key w[32,35] 679 .word 2795580535 # with round key w[36,39] 680 .word 2796629111 # with round key w[40,43] 681 .word 2797677687 # with round key w[44,47] 682 .word 2798726263 # with round key w[48,51] 683 .word 2799774839 # with round key w[52,55] 684 .word 2800856183 # with round key w[56,59] 685 686 687 .word 33942567 688 689 add a0, a0, t0 690 add a1, a1, t0 691 692 bnez t3, 1b 693 694 ret 695 .size L_ecb_enc_256,.-L_ecb_enc_256 696 .p2align 3 697 .globl rv64i_zvkned_ecb_decrypt 698 .type rv64i_zvkned_ecb_decrypt,@function 699 rv64i_zvkned_ecb_decrypt: 700 # Make the LEN become e32 length. 701 srli t3, a2, 2 702 703 # Load number of rounds 704 lwu t2, 240(a3) 705 706 # Get proper routine for key size 707 li t0, 10 708 beq t2, t0, L_ecb_dec_128 709 710 li t0, 12 711 beq t2, t0, L_ecb_dec_192 712 713 li t0, 14 714 beq t2, t0, L_ecb_dec_256 715 716 ret 717 .size rv64i_zvkned_ecb_decrypt,.-rv64i_zvkned_ecb_decrypt 718 .p2align 3 719 L_ecb_dec_128: 720 # Load all 11 round keys to v1-v11 registers. 721 .word 3439489111 722 .word 34005127 723 addi a3, a3, 16 724 .word 34005255 725 addi a3, a3, 16 726 .word 34005383 727 addi a3, a3, 16 728 .word 34005511 729 addi a3, a3, 16 730 .word 34005639 731 addi a3, a3, 16 732 .word 34005767 733 addi a3, a3, 16 734 .word 34005895 735 addi a3, a3, 16 736 .word 34006023 737 addi a3, a3, 16 738 .word 34006151 739 addi a3, a3, 16 740 .word 34006279 741 addi a3, a3, 16 742 .word 34006407 743 744 745 1: 746 .word 221149271 747 slli t0, a6, 2 748 sub t3, t3, a6 749 750 .word 33909767 751 752 # AES body 753 .word 2796792951 # with round key w[40,43] 754 .word 2795514999 # with round key w[36,39] 755 .word 2794466423 # with round key w[32,35] 756 .word 2793417847 # with round key w[28,31] 757 .word 2792369271 # with round key w[24,27] 758 .word 2791320695 # with round key w[20,23] 759 .word 2790272119 # with round key w[16,19] 760 .word 2789223543 # with round key w[12,15] 761 .word 2788174967 # with round key w[ 8,11] 762 .word 2787126391 # with round key w[ 4, 7] 763 .word 2786110583 # with round key w[ 0, 3] 764 765 766 .word 33942567 767 768 add a0, a0, t0 769 add a1, a1, t0 770 771 bnez t3, 1b 772 773 ret 774 .size L_ecb_dec_128,.-L_ecb_dec_128 775 .p2align 3 776 L_ecb_dec_192: 777 # Load all 13 round keys to v1-v13 registers. 778 .word 3439489111 779 .word 34005127 780 addi a3, a3, 16 781 .word 34005255 782 addi a3, a3, 16 783 .word 34005383 784 addi a3, a3, 16 785 .word 34005511 786 addi a3, a3, 16 787 .word 34005639 788 addi a3, a3, 16 789 .word 34005767 790 addi a3, a3, 16 791 .word 34005895 792 addi a3, a3, 16 793 .word 34006023 794 addi a3, a3, 16 795 .word 34006151 796 addi a3, a3, 16 797 .word 34006279 798 addi a3, a3, 16 799 .word 34006407 800 addi a3, a3, 16 801 .word 34006535 802 addi a3, a3, 16 803 .word 34006663 804 805 806 1: 807 .word 221149271 808 slli t0, a6, 2 809 sub t3, t3, a6 810 811 .word 33909767 812 813 # AES body 814 .word 2798890103 # with round key w[48,51] 815 .word 2797612151 # with round key w[44,47] 816 .word 2796563575 # with round key w[40,43] 817 .word 2795514999 # with round key w[36,39] 818 .word 2794466423 # with round key w[32,35] 819 .word 2793417847 # with round key w[28,31] 820 .word 2792369271 # with round key w[24,27] 821 .word 2791320695 # with round key w[20,23] 822 .word 2790272119 # with round key w[16,19] 823 .word 2789223543 # with round key w[12,15] 824 .word 2788174967 # with round key w[ 8,11] 825 .word 2787126391 # with round key w[ 4, 7] 826 .word 2786110583 # with round key w[ 0, 3] 827 828 829 .word 33942567 830 831 add a0, a0, t0 832 add a1, a1, t0 833 834 bnez t3, 1b 835 836 ret 837 .size L_ecb_dec_192,.-L_ecb_dec_192 838 .p2align 3 839 L_ecb_dec_256: 840 # Load all 15 round keys to v1-v15 registers. 841 .word 3439489111 842 .word 34005127 843 addi a3, a3, 16 844 .word 34005255 845 addi a3, a3, 16 846 .word 34005383 847 addi a3, a3, 16 848 .word 34005511 849 addi a3, a3, 16 850 .word 34005639 851 addi a3, a3, 16 852 .word 34005767 853 addi a3, a3, 16 854 .word 34005895 855 addi a3, a3, 16 856 .word 34006023 857 addi a3, a3, 16 858 .word 34006151 859 addi a3, a3, 16 860 .word 34006279 861 addi a3, a3, 16 862 .word 34006407 863 addi a3, a3, 16 864 .word 34006535 865 addi a3, a3, 16 866 .word 34006663 867 addi a3, a3, 16 868 .word 34006791 869 addi a3, a3, 16 870 .word 34006919 871 872 873 1: 874 .word 221149271 875 slli t0, a6, 2 876 sub t3, t3, a6 877 878 .word 33909767 879 880 # AES body 881 .word 2800987255 # with round key w[56,59] 882 .word 2799709303 # with round key w[52,55] 883 .word 2798660727 # with round key w[48,51] 884 .word 2797612151 # with round key w[44,47] 885 .word 2796563575 # with round key w[40,43] 886 .word 2795514999 # with round key w[36,39] 887 .word 2794466423 # with round key w[32,35] 888 .word 2793417847 # with round key w[28,31] 889 .word 2792369271 # with round key w[24,27] 890 .word 2791320695 # with round key w[20,23] 891 .word 2790272119 # with round key w[16,19] 892 .word 2789223543 # with round key w[12,15] 893 .word 2788174967 # with round key w[ 8,11] 894 .word 2787126391 # with round key w[ 4, 7] 895 .word 2786110583 # with round key w[ 0, 3] 896 897 898 .word 33942567 899 900 add a0, a0, t0 901 add a1, a1, t0 902 903 bnez t3, 1b 904 905 ret 906 .size L_ecb_dec_256,.-L_ecb_dec_256 907 .p2align 3 908 .globl rv64i_zvkned_set_encrypt_key 909 .type rv64i_zvkned_set_encrypt_key,@function 910 rv64i_zvkned_set_encrypt_key: 911 beqz a0, L_fail_m1 912 beqz a2, L_fail_m1 913 914 # Get proper routine for key size 915 li t1, 256 916 beq a1, t1, L_set_key_256 917 li t1, 128 918 beq a1, t1, L_set_key_128 919 920 j L_fail_m2 921 922 .size rv64i_zvkned_set_encrypt_key,.-rv64i_zvkned_set_encrypt_key 923 .p2align 3 924 .globl rv64i_zvkned_set_decrypt_key 925 .type rv64i_zvkned_set_decrypt_key,@function 926 rv64i_zvkned_set_decrypt_key: 927 beqz a0, L_fail_m1 928 beqz a2, L_fail_m1 929 930 # Get proper routine for key size 931 li t1, 256 932 beq a1, t1, L_set_key_256 933 li t1, 128 934 beq a1, t1, L_set_key_128 935 936 j L_fail_m2 937 938 .size rv64i_zvkned_set_decrypt_key,.-rv64i_zvkned_set_decrypt_key 939 .p2align 3 940 L_set_key_128: 941 # Store the number of rounds 942 li t2, 10 943 sw t2, 240(a2) 944 945 .word 0xc1027057 946 947 # Load the key 948 .word 33907975 949 950 # Generate keys for round 2-11 into registers v11-v20. 951 .word 2325784055 # v11 <- rk2 (w[ 4, 7]) 952 .word 2326865527 # v12 <- rk3 (w[ 8,11]) 953 .word 2327946999 # v13 <- rk4 (w[12,15]) 954 .word 2329028471 # v14 <- rk5 (w[16,19]) 955 .word 2330109943 # v15 <- rk6 (w[20,23]) 956 .word 2331191415 # v16 <- rk7 (w[24,27]) 957 .word 2332272887 # v17 <- rk8 (w[28,31]) 958 .word 2333354359 # v18 <- rk9 (w[32,35]) 959 .word 2334435831 # v19 <- rk10 (w[36,39]) 960 .word 2335517303 # v20 <- rk11 (w[40,43]) 961 962 # Store the round keys 963 .word 33973543 964 addi a2, a2, 16 965 .word 33973671 966 addi a2, a2, 16 967 .word 33973799 968 addi a2, a2, 16 969 .word 33973927 970 addi a2, a2, 16 971 .word 33974055 972 addi a2, a2, 16 973 .word 33974183 974 addi a2, a2, 16 975 .word 33974311 976 addi a2, a2, 16 977 .word 33974439 978 addi a2, a2, 16 979 .word 33974567 980 addi a2, a2, 16 981 .word 33974695 982 addi a2, a2, 16 983 .word 33974823 984 985 li a0, 1 986 ret 987 .size L_set_key_128,.-L_set_key_128 988 .p2align 3 989 L_set_key_256: 990 # Store the number of rounds 991 li t2, 14 992 sw t2, 240(a2) 993 994 .word 0xc1027057 995 996 # Load the key 997 .word 33907975 998 addi a0, a0, 16 999 .word 33908103 1000 1001 .word 1577387607 1002 .word 2863736439 1003 .word 1577420503 1004 .word 2864817911 1005 .word 1577453399 1006 .word 2865899383 1007 .word 1577486295 1008 .word 2866980855 1009 .word 1577519191 1010 .word 2868062327 1011 .word 1577552087 1012 .word 2869143799 1013 .word 1577584983 1014 .word 2870225271 1015 .word 1577617879 1016 .word 2871306743 1017 .word 1577650775 1018 .word 2872388215 1019 .word 1577683671 1020 .word 2873469687 1021 .word 1577716567 1022 .word 2874551159 1023 .word 1577749463 1024 .word 2875632631 1025 .word 1577782359 1026 .word 2876714103 1027 1028 .word 33973543 1029 addi a2, a2, 16 1030 .word 33973671 1031 addi a2, a2, 16 1032 .word 33973799 1033 addi a2, a2, 16 1034 .word 33973927 1035 addi a2, a2, 16 1036 .word 33974055 1037 addi a2, a2, 16 1038 .word 33974183 1039 addi a2, a2, 16 1040 .word 33974311 1041 addi a2, a2, 16 1042 .word 33974439 1043 addi a2, a2, 16 1044 .word 33974567 1045 addi a2, a2, 16 1046 .word 33974695 1047 addi a2, a2, 16 1048 .word 33974823 1049 addi a2, a2, 16 1050 .word 33974951 1051 addi a2, a2, 16 1052 .word 33975079 1053 addi a2, a2, 16 1054 .word 33975207 1055 addi a2, a2, 16 1056 .word 33975335 1057 1058 li a0, 1 1059 ret 1060 .size L_set_key_256,.-L_set_key_256 1061 .p2align 3 1062 .globl rv64i_zvkned_encrypt 1063 .type rv64i_zvkned_encrypt,@function 1064 rv64i_zvkned_encrypt: 1065 # Load number of rounds 1066 lwu t5, 240(a2) 1067 1068 # Get proper routine for key size 1069 li t6, 14 1070 beq t5, t6, L_enc_256 1071 li t6, 10 1072 beq t5, t6, L_enc_128 1073 li t6, 12 1074 beq t5, t6, L_enc_192 1075 1076 j L_fail_m2 1077 .size rv64i_zvkned_encrypt,.-rv64i_zvkned_encrypt 1078 .p2align 3 1079 L_enc_128: 1080 .word 3439489111 1081 1082 .word 33906823 1083 1084 .word 33973511 1085 .word 2795741431 # with round key w[ 0, 3] 1086 addi a2, a2, 16 1087 .word 33973639 1088 .word 2796626167 # with round key w[ 4, 7] 1089 addi a2, a2, 16 1090 .word 33973767 1091 .word 2797674743 # with round key w[ 8,11] 1092 addi a2, a2, 16 1093 .word 33973895 1094 .word 2798723319 # with round key w[12,15] 1095 addi a2, a2, 16 1096 .word 33974023 1097 .word 2799771895 # with round key w[16,19] 1098 addi a2, a2, 16 1099 .word 33974151 1100 .word 2800820471 # with round key w[20,23] 1101 addi a2, a2, 16 1102 .word 33974279 1103 .word 2801869047 # with round key w[24,27] 1104 addi a2, a2, 16 1105 .word 33974407 1106 .word 2802917623 # with round key w[28,31] 1107 addi a2, a2, 16 1108 .word 33974535 1109 .word 2803966199 # with round key w[32,35] 1110 addi a2, a2, 16 1111 .word 33974663 1112 .word 2805014775 # with round key w[36,39] 1113 addi a2, a2, 16 1114 .word 33974791 1115 .word 2806096119 # with round key w[40,43] 1116 1117 .word 33939623 1118 1119 ret 1120 .size L_enc_128,.-L_enc_128 1121 .p2align 3 1122 L_enc_192: 1123 .word 3439489111 1124 1125 .word 33906823 1126 1127 .word 33973511 1128 .word 2795741431 # with round key w[ 0, 3] 1129 addi a2, a2, 16 1130 .word 33973639 1131 .word 2796626167 1132 addi a2, a2, 16 1133 .word 33973767 1134 .word 2797674743 1135 addi a2, a2, 16 1136 .word 33973895 1137 .word 2798723319 1138 addi a2, a2, 16 1139 .word 33974023 1140 .word 2799771895 1141 addi a2, a2, 16 1142 .word 33974151 1143 .word 2800820471 1144 addi a2, a2, 16 1145 .word 33974279 1146 .word 2801869047 1147 addi a2, a2, 16 1148 .word 33974407 1149 .word 2802917623 1150 addi a2, a2, 16 1151 .word 33974535 1152 .word 2803966199 1153 addi a2, a2, 16 1154 .word 33974663 1155 .word 2805014775 1156 addi a2, a2, 16 1157 .word 33974791 1158 .word 2806063351 1159 addi a2, a2, 16 1160 .word 33974919 1161 .word 2807111927 1162 addi a2, a2, 16 1163 .word 33975047 1164 .word 2808193271 1165 1166 .word 33939623 1167 ret 1168 .size L_enc_192,.-L_enc_192 1169 .p2align 3 1170 L_enc_256: 1171 .word 3439489111 1172 1173 .word 33906823 1174 1175 .word 33973511 1176 .word 2795741431 # with round key w[ 0, 3] 1177 addi a2, a2, 16 1178 .word 33973639 1179 .word 2796626167 1180 addi a2, a2, 16 1181 .word 33973767 1182 .word 2797674743 1183 addi a2, a2, 16 1184 .word 33973895 1185 .word 2798723319 1186 addi a2, a2, 16 1187 .word 33974023 1188 .word 2799771895 1189 addi a2, a2, 16 1190 .word 33974151 1191 .word 2800820471 1192 addi a2, a2, 16 1193 .word 33974279 1194 .word 2801869047 1195 addi a2, a2, 16 1196 .word 33974407 1197 .word 2802917623 1198 addi a2, a2, 16 1199 .word 33974535 1200 .word 2803966199 1201 addi a2, a2, 16 1202 .word 33974663 1203 .word 2805014775 1204 addi a2, a2, 16 1205 .word 33974791 1206 .word 2806063351 1207 addi a2, a2, 16 1208 .word 33974919 1209 .word 2807111927 1210 addi a2, a2, 16 1211 .word 33975047 1212 .word 2808160503 1213 addi a2, a2, 16 1214 .word 33975175 1215 .word 2809209079 1216 addi a2, a2, 16 1217 .word 33975303 1218 .word 2810290423 1219 1220 .word 33939623 1221 ret 1222 .size L_enc_256,.-L_enc_256 1223 .p2align 3 1224 .globl rv64i_zvkned_decrypt 1225 .type rv64i_zvkned_decrypt,@function 1226 rv64i_zvkned_decrypt: 1227 # Load number of rounds 1228 lwu t5, 240(a2) 1229 1230 # Get proper routine for key size 1231 li t6, 14 1232 beq t5, t6, L_dec_256 1233 li t6, 10 1234 beq t5, t6, L_dec_128 1235 li t6, 12 1236 beq t5, t6, L_dec_192 1237 1238 j L_fail_m2 1239 .size rv64i_zvkned_decrypt,.-rv64i_zvkned_decrypt 1240 .p2align 3 1241 L_dec_128: 1242 .word 3439489111 1243 1244 .word 33906823 1245 1246 addi a2, a2, 160 1247 .word 33974791 1248 .word 2806227191 # with round key w[40,43] 1249 addi a2, a2, -16 1250 .word 33974663 1251 .word 2804949239 # with round key w[36,39] 1252 addi a2, a2, -16 1253 .word 33974535 1254 .word 2803900663 # with round key w[32,35] 1255 addi a2, a2, -16 1256 .word 33974407 1257 .word 2802852087 # with round key w[28,31] 1258 addi a2, a2, -16 1259 .word 33974279 1260 .word 2801803511 # with round key w[24,27] 1261 addi a2, a2, -16 1262 .word 33974151 1263 .word 2800754935 # with round key w[20,23] 1264 addi a2, a2, -16 1265 .word 33974023 1266 .word 2799706359 # with round key w[16,19] 1267 addi a2, a2, -16 1268 .word 33973895 1269 .word 2798657783 # with round key w[12,15] 1270 addi a2, a2, -16 1271 .word 33973767 1272 .word 2797609207 # with round key w[ 8,11] 1273 addi a2, a2, -16 1274 .word 33973639 1275 .word 2796560631 # with round key w[ 4, 7] 1276 addi a2, a2, -16 1277 .word 33973511 1278 .word 2795544823 # with round key w[ 0, 3] 1279 1280 .word 33939623 1281 1282 ret 1283 .size L_dec_128,.-L_dec_128 1284 .p2align 3 1285 L_dec_192: 1286 .word 3439489111 1287 1288 .word 33906823 1289 1290 addi a2, a2, 192 1291 .word 33975047 1292 .word 2808324343 # with round key w[48,51] 1293 addi a2, a2, -16 1294 .word 33974919 1295 .word 2807046391 # with round key w[44,47] 1296 addi a2, a2, -16 1297 .word 33974791 1298 .word 2805997815 # with round key w[40,43] 1299 addi a2, a2, -16 1300 .word 33974663 1301 .word 2804949239 # with round key w[36,39] 1302 addi a2, a2, -16 1303 .word 33974535 1304 .word 2803900663 # with round key w[32,35] 1305 addi a2, a2, -16 1306 .word 33974407 1307 .word 2802852087 # with round key w[28,31] 1308 addi a2, a2, -16 1309 .word 33974279 1310 .word 2801803511 # with round key w[24,27] 1311 addi a2, a2, -16 1312 .word 33974151 1313 .word 2800754935 # with round key w[20,23] 1314 addi a2, a2, -16 1315 .word 33974023 1316 .word 2799706359 # with round key w[16,19] 1317 addi a2, a2, -16 1318 .word 33973895 1319 .word 2798657783 # with round key w[12,15] 1320 addi a2, a2, -16 1321 .word 33973767 1322 .word 2797609207 # with round key w[ 8,11] 1323 addi a2, a2, -16 1324 .word 33973639 1325 .word 2796560631 # with round key w[ 4, 7] 1326 addi a2, a2, -16 1327 .word 33973511 1328 .word 2795544823 # with round key w[ 0, 3] 1329 1330 .word 33939623 1331 1332 ret 1333 .size L_dec_192,.-L_dec_192 1334 .p2align 3 1335 L_dec_256: 1336 .word 3439489111 1337 1338 .word 33906823 1339 1340 addi a2, a2, 224 1341 .word 33975303 1342 .word 2810421495 # with round key w[56,59] 1343 addi a2, a2, -16 1344 .word 33975175 1345 .word 2809143543 # with round key w[52,55] 1346 addi a2, a2, -16 1347 .word 33975047 1348 .word 2808094967 # with round key w[48,51] 1349 addi a2, a2, -16 1350 .word 33974919 1351 .word 2807046391 # with round key w[44,47] 1352 addi a2, a2, -16 1353 .word 33974791 1354 .word 2805997815 # with round key w[40,43] 1355 addi a2, a2, -16 1356 .word 33974663 1357 .word 2804949239 # with round key w[36,39] 1358 addi a2, a2, -16 1359 .word 33974535 1360 .word 2803900663 # with round key w[32,35] 1361 addi a2, a2, -16 1362 .word 33974407 1363 .word 2802852087 # with round key w[28,31] 1364 addi a2, a2, -16 1365 .word 33974279 1366 .word 2801803511 # with round key w[24,27] 1367 addi a2, a2, -16 1368 .word 33974151 1369 .word 2800754935 # with round key w[20,23] 1370 addi a2, a2, -16 1371 .word 33974023 1372 .word 2799706359 # with round key w[16,19] 1373 addi a2, a2, -16 1374 .word 33973895 1375 .word 2798657783 # with round key w[12,15] 1376 addi a2, a2, -16 1377 .word 33973767 1378 .word 2797609207 # with round key w[ 8,11] 1379 addi a2, a2, -16 1380 .word 33973639 1381 .word 2796560631 # with round key w[ 4, 7] 1382 addi a2, a2, -16 1383 .word 33973511 1384 .word 2795544823 # with round key w[ 0, 3] 1385 1386 .word 33939623 1387 1388 ret 1389 .size L_dec_256,.-L_dec_256 1390 L_fail_m1: 1391 li a0, -1 1392 ret 1393 .size L_fail_m1,.-L_fail_m1 1394 1395 L_fail_m2: 1396 li a0, -2 1397 ret 1398 .size L_fail_m2,.-L_fail_m2 1399 1400 L_end: 1401 ret 1402 .size L_end,.-L_end 1403