sm4-riscv64-zvksed.S revision 1.1 1 #include <machine/asm.h>
2 .text
3 .p2align 3
4 .globl rv64i_zvksed_sm4_set_encrypt_key
5 .type rv64i_zvksed_sm4_set_encrypt_key,@function
6 rv64i_zvksed_sm4_set_encrypt_key:
7 .word 0xc1027057
8
9 # Load the user key
10 .word 33906823
11 .word 1242865879
12
13 # Load the FK.
14 la t0, FK
15 .word 33743111
16
17 # Generate round keys.
18 .word 772866263
19 .word 2249204215 # rk[0:3]
20 .word 2251334263 # rk[4:7]
21 .word 2252415735 # rk[8:11]
22 .word 2253497207 # rk[12:15]
23 .word 2254578679 # rk[16:19]
24 .word 2255660151 # rk[20:23]
25 .word 2256741623 # rk[24:27]
26 .word 2257823095 # rk[28:31]
27
28 # Store round keys
29 .word 33939879 # rk[0:3]
30 addi a1, a1, 16
31 .word 33940007 # rk[4:7]
32 addi a1, a1, 16
33 .word 33940135 # rk[8:11]
34 addi a1, a1, 16
35 .word 33940263 # rk[12:15]
36 addi a1, a1, 16
37 .word 33940391 # rk[16:19]
38 addi a1, a1, 16
39 .word 33940519 # rk[20:23]
40 addi a1, a1, 16
41 .word 33940647 # rk[24:27]
42 addi a1, a1, 16
43 .word 33940775 # rk[28:31]
44
45 li a0, 1
46 ret
47 .size rv64i_zvksed_sm4_set_encrypt_key,.-rv64i_zvksed_sm4_set_encrypt_key
48 .p2align 3
49 .globl rv64i_zvksed_sm4_set_decrypt_key
50 .type rv64i_zvksed_sm4_set_decrypt_key,@function
51 rv64i_zvksed_sm4_set_decrypt_key:
52 .word 0xc1027057
53
54 # Load the user key
55 .word 33906823
56 .word 1242865879
57
58 # Load the FK.
59 la t0, FK
60 .word 33743111
61
62 # Generate round keys.
63 .word 772866263
64 .word 2249204215 # rk[0:3]
65 .word 2251334263 # rk[4:7]
66 .word 2252415735 # rk[8:11]
67 .word 2253497207 # rk[12:15]
68 .word 2254578679 # rk[16:19]
69 .word 2255660151 # rk[20:23]
70 .word 2256741623 # rk[24:27]
71 .word 2257823095 # rk[28:31]
72
73 # Store round keys in reverse order
74 addi a1, a1, 12
75 li t1, -4
76 .word 174449959 # rk[31:28]
77 addi a1, a1, 16
78 .word 174449831 # rk[27:24]
79 addi a1, a1, 16
80 .word 174449703 # rk[23:20]
81 addi a1, a1, 16
82 .word 174449575 # rk[19:16]
83 addi a1, a1, 16
84 .word 174449447 # rk[15:12]
85 addi a1, a1, 16
86 .word 174449319 # rk[11:8]
87 addi a1, a1, 16
88 .word 174449191 # rk[7:4]
89 addi a1, a1, 16
90 .word 174449063 # rk[3:0]
91
92 li a0, 1
93 ret
94 .size rv64i_zvksed_sm4_set_decrypt_key,.-rv64i_zvksed_sm4_set_decrypt_key
95 .p2align 3
96 .globl rv64i_zvksed_sm4_encrypt
97 .type rv64i_zvksed_sm4_encrypt,@function
98 rv64i_zvksed_sm4_encrypt:
99 .word 0xc1027057
100
101 # Order of elements was adjusted in set_encrypt_key()
102 .word 33972487 # rk[0:3]
103 addi a2, a2, 16
104 .word 33972615 # rk[4:7]
105 addi a2, a2, 16
106 .word 33972743 # rk[8:11]
107 addi a2, a2, 16
108 .word 33972871 # rk[12:15]
109 addi a2, a2, 16
110 .word 33972999 # rk[16:19]
111 addi a2, a2, 16
112 .word 33973127 # rk[20:23]
113 addi a2, a2, 16
114 .word 33973255 # rk[24:27]
115 addi a2, a2, 16
116 .word 33973383 # rk[28:31]
117
118 # Load input data
119 .word 33906823
120 .word 1242865879
121
122 # Encrypt with all keys
123 .word 2787647735
124 .word 2788696311
125 .word 2789744887
126 .word 2790793463
127 .word 2791842039
128 .word 2792890615
129 .word 2793939191
130 .word 2794987767
131
132 # Save the ciphertext (in reverse element order)
133 .word 1242865879
134 li t0, -4
135 addi a1, a1, 12
136 .word 173400231
137
138 ret
139 .size rv64i_zvksed_sm4_encrypt,.-rv64i_zvksed_sm4_encrypt
140 .p2align 3
141 .globl rv64i_zvksed_sm4_decrypt
142 .type rv64i_zvksed_sm4_decrypt,@function
143 rv64i_zvksed_sm4_decrypt:
144 .word 0xc1027057
145
146 # Order of elements was adjusted in set_decrypt_key()
147 .word 33973383 # rk[31:28]
148 addi a2, a2, 16
149 .word 33973255 # rk[27:24]
150 addi a2, a2, 16
151 .word 33973127 # rk[23:20]
152 addi a2, a2, 16
153 .word 33972999 # rk[19:16]
154 addi a2, a2, 16
155 .word 33972871 # rk[15:11]
156 addi a2, a2, 16
157 .word 33972743 # rk[11:8]
158 addi a2, a2, 16
159 .word 33972615 # rk[7:4]
160 addi a2, a2, 16
161 .word 33972487 # rk[3:0]
162
163 # Load input data
164 .word 33906823
165 .word 1242865879
166
167 # Encrypt with all keys
168 .word 2794987767
169 .word 2793939191
170 .word 2792890615
171 .word 2791842039
172 .word 2790793463
173 .word 2789744887
174 .word 2788696311
175 .word 2787647735
176
177 # Save the ciphertext (in reverse element order)
178 .word 1242865879
179 li t0, -4
180 addi a1, a1, 12
181 .word 173400231
182
183 ret
184 .size rv64i_zvksed_sm4_decrypt,.-rv64i_zvksed_sm4_decrypt
185 # Family Key (little-endian 32-bit chunks)
186 .p2align 3
187 FK:
188 .word 0xA3B1BAC6, 0x56AA3350, 0x677D9197, 0xB27022DC
189 .size FK,.-FK
190