1
2
3
4#ifndef __HISI_SEC_V2_CRYPTO_H
5#define __HISI_SEC_V2_CRYPTO_H
6
7#define SEC_AIV_SIZE 12
8#define SEC_IV_SIZE 24
9#define SEC_MAX_KEY_SIZE 64
10#define SEC_COMM_SCENE 0
11#define SEC_MIN_BLOCK_SZ 1
12
13enum sec_calg {
14 SEC_CALG_3DES = 0x1,
15 SEC_CALG_AES = 0x2,
16 SEC_CALG_SM4 = 0x3,
17};
18
19enum sec_hash_alg {
20 SEC_A_HMAC_SHA1 = 0x10,
21 SEC_A_HMAC_SHA256 = 0x11,
22 SEC_A_HMAC_SHA512 = 0x15,
23};
24
25enum sec_mac_len {
26 SEC_HMAC_CCM_MAC = 16,
27 SEC_HMAC_GCM_MAC = 16,
28 SEC_SM3_MAC = 32,
29 SEC_HMAC_SM3_MAC = 32,
30 SEC_HMAC_MD5_MAC = 16,
31 SEC_HMAC_SHA1_MAC = 20,
32 SEC_HMAC_SHA256_MAC = 32,
33 SEC_HMAC_SHA512_MAC = 64,
34};
35
36enum sec_cmode {
37 SEC_CMODE_ECB = 0x0,
38 SEC_CMODE_CBC = 0x1,
39 SEC_CMODE_CFB = 0x2,
40 SEC_CMODE_OFB = 0x3,
41 SEC_CMODE_CTR = 0x4,
42 SEC_CMODE_CCM = 0x5,
43 SEC_CMODE_GCM = 0x6,
44 SEC_CMODE_XTS = 0x7,
45};
46
47enum sec_ckey_type {
48 SEC_CKEY_128BIT = 0x0,
49 SEC_CKEY_192BIT = 0x1,
50 SEC_CKEY_256BIT = 0x2,
51 SEC_CKEY_3DES_3KEY = 0x1,
52 SEC_CKEY_3DES_2KEY = 0x3,
53};
54
55enum sec_bd_type {
56 SEC_BD_TYPE1 = 0x1,
57 SEC_BD_TYPE2 = 0x2,
58 SEC_BD_TYPE3 = 0x3,
59};
60
61enum sec_auth {
62 SEC_NO_AUTH = 0x0,
63 SEC_AUTH_TYPE1 = 0x1,
64 SEC_AUTH_TYPE2 = 0x2,
65};
66
67enum sec_cipher_dir {
68 SEC_CIPHER_ENC = 0x1,
69 SEC_CIPHER_DEC = 0x2,
70};
71
72enum sec_addr_type {
73 SEC_PBUF = 0x0,
74 SEC_SGL = 0x1,
75 SEC_PRP = 0x2,
76};
77
78struct bd_status {
79 u64 tag;
80 u8 done;
81 u8 err_type;
82 u16 flag;
83 u16 icv;
84};
85
86enum {
87 AUTHPAD_PAD,
88 AUTHPAD_NOPAD,
89};
90
91enum {
92 AIGEN_GEN,
93 AIGEN_NOGEN,
94};
95
96struct sec_sqe_type2 {
97
98
99
100
101
102 __le32 mac_key_alg;
103
104
105
106
107
108
109
110 __le16 icvw_kmode;
111
112
113 __u8 c_alg;
114 __u8 rsvd4;
115
116
117
118
119
120 __le32 alen_ivllen;
121
122
123
124
125
126 __le32 clen_ivhlen;
127
128 __le16 auth_src_offset;
129 __le16 cipher_src_offset;
130 __le16 cs_ip_header_offset;
131 __le16 cs_udp_header_offset;
132 __le16 pass_word_len;
133 __le16 dk_len;
134 __u8 salt3;
135 __u8 salt2;
136 __u8 salt1;
137 __u8 salt0;
138
139 __le16 tag;
140 __le16 rsvd5;
141
142
143
144
145
146
147 __le16 cph_pad;
148
149
150 __le16 c_pad_len_field;
151
152 __le64 long_a_data_len;
153 __le64 a_ivin_addr;
154 __le64 a_key_addr;
155 __le64 mac_addr;
156 __le64 c_ivin_addr;
157 __le64 c_key_addr;
158
159 __le64 data_src_addr;
160 __le64 data_dst_addr;
161
162
163
164
165
166
167
168
169 __le16 done_flag;
170
171 __u8 error_type;
172 __u8 warning_type;
173 __u8 mac_i3;
174 __u8 mac_i2;
175 __u8 mac_i1;
176 __u8 mac_i0;
177 __le16 check_sum_i;
178 __u8 tls_pad_len_i;
179 __u8 rsvd12;
180 __le32 counter;
181};
182
183struct sec_sqe {
184
185
186
187
188
189 __u8 type_cipher_auth;
190
191
192
193
194
195
196
197 __u8 sds_sa_type;
198
199
200
201
202
203
204
205 __u8 sdm_addr_type;
206 __u8 rsvd0;
207
208
209
210
211
212
213
214 __u8 huk_key_ci;
215
216
217
218
219
220
221 __u8 ai_apd_cs;
222
223
224
225
226
227
228
229 __u8 rca_key_frm;
230
231
232
233
234
235
236 __u8 iv_tls_ld;
237
238
239 struct sec_sqe_type2 type2;
240};
241
242struct bd3_auth_ivin {
243 __le64 a_ivin_addr;
244 __le32 rsvd0;
245 __le32 rsvd1;
246} __packed __aligned(4);
247
248struct bd3_skip_data {
249 __le32 rsvd0;
250
251
252
253
254
255 __le32 gran_num;
256
257
258
259
260
261 __le32 src_skip_data_len;
262
263
264
265
266
267 __le32 dst_skip_data_len;
268};
269
270struct bd3_stream_scene {
271 __le64 c_ivin_addr;
272 __le64 long_a_data_len;
273
274
275
276
277
278
279 __u8 stream_auth_pad;
280 __u8 plaintext_type;
281 __le16 pad_len_1p3;
282} __packed __aligned(4);
283
284struct bd3_no_scene {
285 __le64 c_ivin_addr;
286 __le32 rsvd0;
287 __le32 rsvd1;
288 __le32 rsvd2;
289} __packed __aligned(4);
290
291struct bd3_check_sum {
292 __u8 rsvd0;
293 __u8 hac_sva_status;
294 __le16 check_sum_i;
295};
296
297struct bd3_tls_type_back {
298 __u8 tls_1p3_type_back;
299 __u8 hac_sva_status;
300 __le16 pad_len_1p3_back;
301};
302
303struct sec_sqe3 {
304
305
306
307
308
309
310
311
312
313
314 __le32 bd_param;
315
316
317
318
319
320
321
322
323 __le16 c_icv_key;
324
325
326
327
328
329 __u8 c_mode_alg;
330
331
332
333
334
335
336
337
338 __u8 huk_iv_seq;
339
340 __le64 tag;
341 __le64 data_src_addr;
342 __le64 a_key_addr;
343 union {
344 struct bd3_auth_ivin auth_ivin;
345 struct bd3_skip_data skip_data;
346 };
347
348 __le64 c_key_addr;
349
350
351
352
353
354
355
356
357
358
359
360 __le32 auth_mac_key;
361 __le32 salt;
362 __le16 auth_src_offset;
363 __le16 cipher_src_offset;
364
365
366
367
368
369 __le32 a_len_key;
370
371
372
373
374
375 __le32 c_len_ivin;
376 __le64 data_dst_addr;
377 __le64 mac_addr;
378 union {
379 struct bd3_stream_scene stream_scene;
380 struct bd3_no_scene no_scene;
381 };
382
383
384
385
386
387
388
389
390 __le16 done_flag;
391 __u8 error_type;
392 __u8 warning_type;
393 union {
394 __le32 mac_i;
395 __le32 kek_key_addr_l;
396 };
397 union {
398 __le32 kek_key_addr_h;
399 struct bd3_check_sum check_sum;
400 struct bd3_tls_type_back tls_type_back;
401 };
402 __le32 counter;
403} __packed __aligned(4);
404
405int sec_register_to_crypto(struct hisi_qm *qm);
406void sec_unregister_from_crypto(struct hisi_qm *qm);
407#endif
408