Home | History | Annotate | Line # | Download | only in riscv64
      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