Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/crypto/hisilicon/sec2/sec_crypto.h
26289 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/* Copyright (c) 2019 HiSilicon Limited. */
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_MAX_AKEY_SIZE 128
11
#define SEC_COMM_SCENE 0
12
#define SEC_MIN_BLOCK_SZ 1
13
14
enum sec_calg {
15
SEC_CALG_3DES = 0x1,
16
SEC_CALG_AES = 0x2,
17
SEC_CALG_SM4 = 0x3,
18
};
19
20
enum sec_hash_alg {
21
SEC_A_HMAC_SHA1 = 0x10,
22
SEC_A_HMAC_SHA256 = 0x11,
23
SEC_A_HMAC_SHA512 = 0x15,
24
};
25
26
enum sec_cmode {
27
SEC_CMODE_ECB = 0x0,
28
SEC_CMODE_CBC = 0x1,
29
SEC_CMODE_CTR = 0x4,
30
SEC_CMODE_CCM = 0x5,
31
SEC_CMODE_GCM = 0x6,
32
SEC_CMODE_XTS = 0x7,
33
};
34
35
enum sec_ckey_type {
36
SEC_CKEY_128BIT = 0x0,
37
SEC_CKEY_192BIT = 0x1,
38
SEC_CKEY_256BIT = 0x2,
39
SEC_CKEY_3DES_3KEY = 0x1,
40
SEC_CKEY_3DES_2KEY = 0x3,
41
};
42
43
enum sec_bd_type {
44
SEC_BD_TYPE1 = 0x1,
45
SEC_BD_TYPE2 = 0x2,
46
SEC_BD_TYPE3 = 0x3,
47
};
48
49
enum sec_auth {
50
SEC_NO_AUTH = 0x0,
51
SEC_AUTH_TYPE1 = 0x1,
52
SEC_AUTH_TYPE2 = 0x2,
53
};
54
55
enum sec_cipher_dir {
56
SEC_CIPHER_ENC = 0x1,
57
SEC_CIPHER_DEC = 0x2,
58
};
59
60
enum sec_addr_type {
61
SEC_PBUF = 0x0,
62
SEC_SGL = 0x1,
63
SEC_PRP = 0x2,
64
};
65
66
struct bd_status {
67
u64 tag;
68
u8 done;
69
u8 err_type;
70
u16 flag;
71
u16 icv;
72
};
73
74
enum {
75
AUTHPAD_PAD,
76
AUTHPAD_NOPAD,
77
};
78
79
enum {
80
AIGEN_GEN,
81
AIGEN_NOGEN,
82
};
83
84
struct sec_sqe_type2 {
85
/*
86
* mac_len: 0~4 bits
87
* a_key_len: 5~10 bits
88
* a_alg: 11~16 bits
89
*/
90
__le32 mac_key_alg;
91
92
/*
93
* c_icv_len: 0~5 bits
94
* c_width: 6~8 bits
95
* c_key_len: 9~11 bits
96
* c_mode: 12~15 bits
97
*/
98
__le16 icvw_kmode;
99
100
/* c_alg: 0~3 bits */
101
__u8 c_alg;
102
__u8 rsvd4;
103
104
/*
105
* a_len: 0~23 bits
106
* iv_offset_l: 24~31 bits
107
*/
108
__le32 alen_ivllen;
109
110
/*
111
* c_len: 0~23 bits
112
* iv_offset_h: 24~31 bits
113
*/
114
__le32 clen_ivhlen;
115
116
__le16 auth_src_offset;
117
__le16 cipher_src_offset;
118
__le16 cs_ip_header_offset;
119
__le16 cs_udp_header_offset;
120
__le16 pass_word_len;
121
__le16 dk_len;
122
__u8 salt3;
123
__u8 salt2;
124
__u8 salt1;
125
__u8 salt0;
126
127
__le16 tag;
128
__le16 rsvd5;
129
130
/*
131
* c_pad_type: 0~3 bits
132
* c_pad_len: 4~11 bits
133
* c_pad_data_type: 12~15 bits
134
*/
135
__le16 cph_pad;
136
137
/* c_pad_len_field: 0~1 bits */
138
__le16 c_pad_len_field;
139
140
__le64 long_a_data_len;
141
__le64 a_ivin_addr;
142
__le64 a_key_addr;
143
__le64 mac_addr;
144
__le64 c_ivin_addr;
145
__le64 c_key_addr;
146
147
__le64 data_src_addr;
148
__le64 data_dst_addr;
149
150
/*
151
* done: 0 bit
152
* icv: 1~3 bits
153
* csc: 4~6 bits
154
* flag: 7-10 bits
155
* dif_check: 11~13 bits
156
*/
157
__le16 done_flag;
158
159
__u8 error_type;
160
__u8 warning_type;
161
__u8 mac_i3;
162
__u8 mac_i2;
163
__u8 mac_i1;
164
__u8 mac_i0;
165
__le16 check_sum_i;
166
__u8 tls_pad_len_i;
167
__u8 rsvd12;
168
__le32 counter;
169
};
170
171
struct sec_sqe {
172
/*
173
* type: 0~3 bits
174
* cipher: 4~5 bits
175
* auth: 6~7 bit s
176
*/
177
__u8 type_cipher_auth;
178
179
/*
180
* seq: 0 bit
181
* de: 1~2 bits
182
* scene: 3~6 bits
183
* src_addr_type: ~7 bit, with sdm_addr_type 0-1 bits
184
*/
185
__u8 sds_sa_type;
186
187
/*
188
* src_addr_type: 0~1 bits, not used now,
189
* if support PRP, set this field, or set zero.
190
* dst_addr_type: 2~4 bits
191
* mac_addr_type: 5~7 bits
192
*/
193
__u8 sdm_addr_type;
194
__u8 rsvd0;
195
196
/*
197
* nonce_len(type2): 0~3 bits
198
* huk(type2): 4 bit
199
* key_s(type2): 5 bit
200
* ci_gen: 6~7 bits
201
*/
202
__u8 huk_key_ci;
203
204
/*
205
* ai_gen: 0~1 bits
206
* a_pad(type2): 2~3 bits
207
* c_s(type2): 4~5 bits
208
*/
209
__u8 ai_apd_cs;
210
211
/*
212
* rhf(type2): 0 bit
213
* c_key_type: 1~2 bits
214
* a_key_type: 3~4 bits
215
* write_frame_len(type2): 5~7 bits
216
*/
217
__u8 rca_key_frm;
218
219
/*
220
* cal_iv_addr_en(type2): 0 bit
221
* tls_up(type2): 1 bit
222
* inveld: 7 bit
223
*/
224
__u8 iv_tls_ld;
225
226
/* Just using type2 BD now */
227
struct sec_sqe_type2 type2;
228
};
229
230
struct bd3_auth_ivin {
231
__le64 a_ivin_addr;
232
__le32 rsvd0;
233
__le32 rsvd1;
234
} __packed __aligned(4);
235
236
struct bd3_skip_data {
237
__le32 rsvd0;
238
239
/*
240
* gran_num: 0~15 bits
241
* reserved: 16~31 bits
242
*/
243
__le32 gran_num;
244
245
/*
246
* src_skip_data_len: 0~24 bits
247
* reserved: 25~31 bits
248
*/
249
__le32 src_skip_data_len;
250
251
/*
252
* dst_skip_data_len: 0~24 bits
253
* reserved: 25~31 bits
254
*/
255
__le32 dst_skip_data_len;
256
};
257
258
struct bd3_stream_scene {
259
__le64 c_ivin_addr;
260
__le64 long_a_data_len;
261
262
/*
263
* auth_pad: 0~1 bits
264
* stream_protocol: 2~4 bits
265
* reserved: 5~7 bits
266
*/
267
__u8 stream_auth_pad;
268
__u8 plaintext_type;
269
__le16 pad_len_1p3;
270
} __packed __aligned(4);
271
272
struct bd3_no_scene {
273
__le64 c_ivin_addr;
274
__le32 rsvd0;
275
__le32 rsvd1;
276
__le32 rsvd2;
277
} __packed __aligned(4);
278
279
struct bd3_check_sum {
280
__u8 rsvd0;
281
__u8 hac_sva_status;
282
__le16 check_sum_i;
283
};
284
285
struct bd3_tls_type_back {
286
__u8 tls_1p3_type_back;
287
__u8 hac_sva_status;
288
__le16 pad_len_1p3_back;
289
};
290
291
struct sec_sqe3 {
292
/*
293
* type: 0~3 bit
294
* bd_invalid: 4 bit
295
* scene: 5~8 bit
296
* de: 9~10 bit
297
* src_addr_type: 11~13 bit
298
* dst_addr_type: 14~16 bit
299
* mac_addr_type: 17~19 bit
300
* reserved: 20~31 bits
301
*/
302
__le32 bd_param;
303
304
/*
305
* cipher: 0~1 bits
306
* ci_gen: 2~3 bit
307
* c_icv_len: 4~9 bit
308
* c_width: 10~12 bits
309
* c_key_len: 13~15 bits
310
*/
311
__le16 c_icv_key;
312
313
/*
314
* c_mode : 0~3 bits
315
* c_alg : 4~7 bits
316
*/
317
__u8 c_mode_alg;
318
319
/*
320
* nonce_len : 0~3 bits
321
* huk : 4 bits
322
* cal_iv_addr_en : 5 bits
323
* seq : 6 bits
324
* reserved : 7 bits
325
*/
326
__u8 huk_iv_seq;
327
328
__le64 tag;
329
__le64 data_src_addr;
330
__le64 a_key_addr;
331
union {
332
struct bd3_auth_ivin auth_ivin;
333
struct bd3_skip_data skip_data;
334
};
335
336
__le64 c_key_addr;
337
338
/*
339
* auth: 0~1 bits
340
* ai_gen: 2~3 bits
341
* mac_len: 4~8 bits
342
* akey_len: 9~14 bits
343
* a_alg: 15~20 bits
344
* key_sel: 21~24 bits
345
* ctr_count_mode/sm4_xts: 25~26 bits
346
* sva_prefetch: 27 bits
347
* key_wrap_num: 28~30 bits
348
* update_key: 31 bits
349
*/
350
__le32 auth_mac_key;
351
__le32 salt;
352
__le16 auth_src_offset;
353
__le16 cipher_src_offset;
354
355
/*
356
* auth_len: 0~23 bit
357
* auth_key_offset: 24~31 bits
358
*/
359
__le32 a_len_key;
360
361
/*
362
* cipher_len: 0~23 bit
363
* auth_ivin_offset: 24~31 bits
364
*/
365
__le32 c_len_ivin;
366
__le64 data_dst_addr;
367
__le64 mac_addr;
368
union {
369
struct bd3_stream_scene stream_scene;
370
struct bd3_no_scene no_scene;
371
};
372
373
/*
374
* done: 0 bit
375
* icv: 1~3 bit
376
* csc: 4~6 bit
377
* flag: 7~10 bit
378
* reserved: 11~15 bit
379
*/
380
__le16 done_flag;
381
__u8 error_type;
382
__u8 warning_type;
383
union {
384
__le32 mac_i;
385
__le32 kek_key_addr_l;
386
};
387
union {
388
__le32 kek_key_addr_h;
389
struct bd3_check_sum check_sum;
390
struct bd3_tls_type_back tls_type_back;
391
};
392
__le32 counter;
393
} __packed __aligned(4);
394
395
int sec_register_to_crypto(struct hisi_qm *qm);
396
void sec_unregister_from_crypto(struct hisi_qm *qm);
397
#endif
398
399