Files

189 lines
4.3 KiB
ArmAsm

.text
.p2align 3
.globl rv64i_zvksed_sm4_set_encrypt_key
.type rv64i_zvksed_sm4_set_encrypt_key,@function
rv64i_zvksed_sm4_set_encrypt_key:
.word 0xc1027057
# Load the user key
.word 33906823
.word 1242865879
# Load the FK.
la t0, FK
.word 33743111
# Generate round keys.
.word 772866263
.word 2249204215 # rk[0:3]
.word 2251334263 # rk[4:7]
.word 2252415735 # rk[8:11]
.word 2253497207 # rk[12:15]
.word 2254578679 # rk[16:19]
.word 2255660151 # rk[20:23]
.word 2256741623 # rk[24:27]
.word 2257823095 # rk[28:31]
# Store round keys
.word 33939879 # rk[0:3]
addi a1, a1, 16
.word 33940007 # rk[4:7]
addi a1, a1, 16
.word 33940135 # rk[8:11]
addi a1, a1, 16
.word 33940263 # rk[12:15]
addi a1, a1, 16
.word 33940391 # rk[16:19]
addi a1, a1, 16
.word 33940519 # rk[20:23]
addi a1, a1, 16
.word 33940647 # rk[24:27]
addi a1, a1, 16
.word 33940775 # rk[28:31]
li a0, 1
ret
.size rv64i_zvksed_sm4_set_encrypt_key,.-rv64i_zvksed_sm4_set_encrypt_key
.p2align 3
.globl rv64i_zvksed_sm4_set_decrypt_key
.type rv64i_zvksed_sm4_set_decrypt_key,@function
rv64i_zvksed_sm4_set_decrypt_key:
.word 0xc1027057
# Load the user key
.word 33906823
.word 1242865879
# Load the FK.
la t0, FK
.word 33743111
# Generate round keys.
.word 772866263
.word 2249204215 # rk[0:3]
.word 2251334263 # rk[4:7]
.word 2252415735 # rk[8:11]
.word 2253497207 # rk[12:15]
.word 2254578679 # rk[16:19]
.word 2255660151 # rk[20:23]
.word 2256741623 # rk[24:27]
.word 2257823095 # rk[28:31]
# Store round keys in reverse order
addi a1, a1, 12
li t1, -4
.word 174449959 # rk[31:28]
addi a1, a1, 16
.word 174449831 # rk[27:24]
addi a1, a1, 16
.word 174449703 # rk[23:20]
addi a1, a1, 16
.word 174449575 # rk[19:16]
addi a1, a1, 16
.word 174449447 # rk[15:12]
addi a1, a1, 16
.word 174449319 # rk[11:8]
addi a1, a1, 16
.word 174449191 # rk[7:4]
addi a1, a1, 16
.word 174449063 # rk[3:0]
li a0, 1
ret
.size rv64i_zvksed_sm4_set_decrypt_key,.-rv64i_zvksed_sm4_set_decrypt_key
.p2align 3
.globl rv64i_zvksed_sm4_encrypt
.type rv64i_zvksed_sm4_encrypt,@function
rv64i_zvksed_sm4_encrypt:
.word 0xc1027057
# Order of elements was adjusted in set_encrypt_key()
.word 33972487 # rk[0:3]
addi a2, a2, 16
.word 33972615 # rk[4:7]
addi a2, a2, 16
.word 33972743 # rk[8:11]
addi a2, a2, 16
.word 33972871 # rk[12:15]
addi a2, a2, 16
.word 33972999 # rk[16:19]
addi a2, a2, 16
.word 33973127 # rk[20:23]
addi a2, a2, 16
.word 33973255 # rk[24:27]
addi a2, a2, 16
.word 33973383 # rk[28:31]
# Load input data
.word 33906823
.word 1242865879
# Encrypt with all keys
.word 2787647735
.word 2788696311
.word 2789744887
.word 2790793463
.word 2791842039
.word 2792890615
.word 2793939191
.word 2794987767
# Save the ciphertext (in reverse element order)
.word 1242865879
li t0, -4
addi a1, a1, 12
.word 173400231
ret
.size rv64i_zvksed_sm4_encrypt,.-rv64i_zvksed_sm4_encrypt
.p2align 3
.globl rv64i_zvksed_sm4_decrypt
.type rv64i_zvksed_sm4_decrypt,@function
rv64i_zvksed_sm4_decrypt:
.word 0xc1027057
# Order of elements was adjusted in set_decrypt_key()
.word 33973383 # rk[31:28]
addi a2, a2, 16
.word 33973255 # rk[27:24]
addi a2, a2, 16
.word 33973127 # rk[23:20]
addi a2, a2, 16
.word 33972999 # rk[19:16]
addi a2, a2, 16
.word 33972871 # rk[15:11]
addi a2, a2, 16
.word 33972743 # rk[11:8]
addi a2, a2, 16
.word 33972615 # rk[7:4]
addi a2, a2, 16
.word 33972487 # rk[3:0]
# Load input data
.word 33906823
.word 1242865879
# Encrypt with all keys
.word 2794987767
.word 2793939191
.word 2792890615
.word 2791842039
.word 2790793463
.word 2789744887
.word 2788696311
.word 2787647735
# Save the ciphertext (in reverse element order)
.word 1242865879
li t0, -4
addi a1, a1, 12
.word 173400231
ret
.size rv64i_zvksed_sm4_decrypt,.-rv64i_zvksed_sm4_decrypt
# Family Key (little-endian 32-bit chunks)
.p2align 3
FK:
.word 0xA3B1BAC6, 0x56AA3350, 0x677D9197, 0xB27022DC
.size FK,.-FK