• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This header was generated from the Linux kernel headers by update_headers.py,
3  * to provide necessary information from kernel to userspace, such as constants,
4  * structures, and macros, and thus, contains no copyrightable information.
5  */
6 #ifndef _VIRTIO_CRYPTO_H
7 #define _VIRTIO_CRYPTO_H
8 #include <linux/types.h>
9 #include <linux/virtio_types.h>
10 #include <linux/virtio_ids.h>
11 #include <linux/virtio_config.h>
12 #define VIRTIO_CRYPTO_SERVICE_CIPHER 0
13 #define VIRTIO_CRYPTO_SERVICE_HASH   1
14 #define VIRTIO_CRYPTO_SERVICE_MAC    2
15 #define VIRTIO_CRYPTO_SERVICE_AEAD   3
16 #define VIRTIO_CRYPTO_OPCODE(service, op)   (((service) << 8) | (op))
17 struct virtio_crypto_ctrl_header {
18 #define VIRTIO_CRYPTO_CIPHER_CREATE_SESSION \
19 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x02)
20 #define VIRTIO_CRYPTO_CIPHER_DESTROY_SESSION \
21 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x03)
22 #define VIRTIO_CRYPTO_HASH_CREATE_SESSION \
23 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x02)
24 #define VIRTIO_CRYPTO_HASH_DESTROY_SESSION \
25 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x03)
26 #define VIRTIO_CRYPTO_MAC_CREATE_SESSION \
27 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x02)
28 #define VIRTIO_CRYPTO_MAC_DESTROY_SESSION \
29 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x03)
30 #define VIRTIO_CRYPTO_AEAD_CREATE_SESSION \
31 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x02)
32 #define VIRTIO_CRYPTO_AEAD_DESTROY_SESSION \
33 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x03)
34 	__le32 opcode;
35 	__le32 algo;
36 	__le32 flag;
37 
38 	__le32 queue_id;
39 };
40 struct virtio_crypto_cipher_session_para {
41 #define VIRTIO_CRYPTO_NO_CIPHER                 0
42 #define VIRTIO_CRYPTO_CIPHER_ARC4               1
43 #define VIRTIO_CRYPTO_CIPHER_AES_ECB            2
44 #define VIRTIO_CRYPTO_CIPHER_AES_CBC            3
45 #define VIRTIO_CRYPTO_CIPHER_AES_CTR            4
46 #define VIRTIO_CRYPTO_CIPHER_DES_ECB            5
47 #define VIRTIO_CRYPTO_CIPHER_DES_CBC            6
48 #define VIRTIO_CRYPTO_CIPHER_3DES_ECB           7
49 #define VIRTIO_CRYPTO_CIPHER_3DES_CBC           8
50 #define VIRTIO_CRYPTO_CIPHER_3DES_CTR           9
51 #define VIRTIO_CRYPTO_CIPHER_KASUMI_F8          10
52 #define VIRTIO_CRYPTO_CIPHER_SNOW3G_UEA2        11
53 #define VIRTIO_CRYPTO_CIPHER_AES_F8             12
54 #define VIRTIO_CRYPTO_CIPHER_AES_XTS            13
55 #define VIRTIO_CRYPTO_CIPHER_ZUC_EEA3           14
56 	__le32 algo;
57 
58 	__le32 keylen;
59 #define VIRTIO_CRYPTO_OP_ENCRYPT  1
60 #define VIRTIO_CRYPTO_OP_DECRYPT  2
61 
62 	__le32 op;
63 	__le32 padding;
64 };
65 struct virtio_crypto_session_input {
66 
67 	__le64 session_id;
68 	__le32 status;
69 	__le32 padding;
70 };
71 struct virtio_crypto_cipher_session_req {
72 	struct virtio_crypto_cipher_session_para para;
73 	__u8 padding[32];
74 };
75 struct virtio_crypto_hash_session_para {
76 #define VIRTIO_CRYPTO_NO_HASH            0
77 #define VIRTIO_CRYPTO_HASH_MD5           1
78 #define VIRTIO_CRYPTO_HASH_SHA1          2
79 #define VIRTIO_CRYPTO_HASH_SHA_224       3
80 #define VIRTIO_CRYPTO_HASH_SHA_256       4
81 #define VIRTIO_CRYPTO_HASH_SHA_384       5
82 #define VIRTIO_CRYPTO_HASH_SHA_512       6
83 #define VIRTIO_CRYPTO_HASH_SHA3_224      7
84 #define VIRTIO_CRYPTO_HASH_SHA3_256      8
85 #define VIRTIO_CRYPTO_HASH_SHA3_384      9
86 #define VIRTIO_CRYPTO_HASH_SHA3_512      10
87 #define VIRTIO_CRYPTO_HASH_SHA3_SHAKE128      11
88 #define VIRTIO_CRYPTO_HASH_SHA3_SHAKE256      12
89 	__le32 algo;
90 
91 	__le32 hash_result_len;
92 	__u8 padding[8];
93 };
94 struct virtio_crypto_hash_create_session_req {
95 	struct virtio_crypto_hash_session_para para;
96 	__u8 padding[40];
97 };
98 struct virtio_crypto_mac_session_para {
99 #define VIRTIO_CRYPTO_NO_MAC                       0
100 #define VIRTIO_CRYPTO_MAC_HMAC_MD5                 1
101 #define VIRTIO_CRYPTO_MAC_HMAC_SHA1                2
102 #define VIRTIO_CRYPTO_MAC_HMAC_SHA_224             3
103 #define VIRTIO_CRYPTO_MAC_HMAC_SHA_256             4
104 #define VIRTIO_CRYPTO_MAC_HMAC_SHA_384             5
105 #define VIRTIO_CRYPTO_MAC_HMAC_SHA_512             6
106 #define VIRTIO_CRYPTO_MAC_CMAC_3DES                25
107 #define VIRTIO_CRYPTO_MAC_CMAC_AES                 26
108 #define VIRTIO_CRYPTO_MAC_KASUMI_F9                27
109 #define VIRTIO_CRYPTO_MAC_SNOW3G_UIA2              28
110 #define VIRTIO_CRYPTO_MAC_GMAC_AES                 41
111 #define VIRTIO_CRYPTO_MAC_GMAC_TWOFISH             42
112 #define VIRTIO_CRYPTO_MAC_CBCMAC_AES               49
113 #define VIRTIO_CRYPTO_MAC_CBCMAC_KASUMI_F9         50
114 #define VIRTIO_CRYPTO_MAC_XCBC_AES                 53
115 	__le32 algo;
116 
117 	__le32 hash_result_len;
118 
119 	__le32 auth_key_len;
120 	__le32 padding;
121 };
122 struct virtio_crypto_mac_create_session_req {
123 	struct virtio_crypto_mac_session_para para;
124 	__u8 padding[40];
125 };
126 struct virtio_crypto_aead_session_para {
127 #define VIRTIO_CRYPTO_NO_AEAD     0
128 #define VIRTIO_CRYPTO_AEAD_GCM    1
129 #define VIRTIO_CRYPTO_AEAD_CCM    2
130 #define VIRTIO_CRYPTO_AEAD_CHACHA20_POLY1305  3
131 	__le32 algo;
132 
133 	__le32 key_len;
134 
135 	__le32 hash_result_len;
136 
137 	__le32 aad_len;
138 
139 	__le32 op;
140 	__le32 padding;
141 };
142 struct virtio_crypto_aead_create_session_req {
143 	struct virtio_crypto_aead_session_para para;
144 	__u8 padding[32];
145 };
146 struct virtio_crypto_alg_chain_session_para {
147 #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER  1
148 #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH  2
149 	__le32 alg_chain_order;
150 #define VIRTIO_CRYPTO_SYM_HASH_MODE_PLAIN    1
151 #define VIRTIO_CRYPTO_SYM_HASH_MODE_AUTH     2
152 #define VIRTIO_CRYPTO_SYM_HASH_MODE_NESTED   3
153 	__le32 hash_mode;
154 	struct virtio_crypto_cipher_session_para cipher_param;
155 	union {
156 		struct virtio_crypto_hash_session_para hash_param;
157 		struct virtio_crypto_mac_session_para mac_param;
158 		__u8 padding[16];
159 	} u;
160 
161 	__le32 aad_len;
162 	__le32 padding;
163 };
164 struct virtio_crypto_alg_chain_session_req {
165 	struct virtio_crypto_alg_chain_session_para para;
166 };
167 struct virtio_crypto_sym_create_session_req {
168 	union {
169 		struct virtio_crypto_cipher_session_req cipher;
170 		struct virtio_crypto_alg_chain_session_req chain;
171 		__u8 padding[48];
172 	} u;
173 
174 #define VIRTIO_CRYPTO_SYM_OP_NONE  0
175 #define VIRTIO_CRYPTO_SYM_OP_CIPHER  1
176 #define VIRTIO_CRYPTO_SYM_OP_ALGORITHM_CHAINING  2
177 	__le32 op_type;
178 	__le32 padding;
179 };
180 struct virtio_crypto_destroy_session_req {
181 
182 	__le64  session_id;
183 	__u8 padding[48];
184 };
185 struct virtio_crypto_op_ctrl_req {
186 	struct virtio_crypto_ctrl_header header;
187 	union {
188 		struct virtio_crypto_sym_create_session_req
189 			sym_create_session;
190 		struct virtio_crypto_hash_create_session_req
191 			hash_create_session;
192 		struct virtio_crypto_mac_create_session_req
193 			mac_create_session;
194 		struct virtio_crypto_aead_create_session_req
195 			aead_create_session;
196 		struct virtio_crypto_destroy_session_req
197 			destroy_session;
198 		__u8 padding[56];
199 	} u;
200 };
201 struct virtio_crypto_op_header {
202 #define VIRTIO_CRYPTO_CIPHER_ENCRYPT \
203 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x00)
204 #define VIRTIO_CRYPTO_CIPHER_DECRYPT \
205 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x01)
206 #define VIRTIO_CRYPTO_HASH \
207 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x00)
208 #define VIRTIO_CRYPTO_MAC \
209 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x00)
210 #define VIRTIO_CRYPTO_AEAD_ENCRYPT \
211 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x00)
212 #define VIRTIO_CRYPTO_AEAD_DECRYPT \
213 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x01)
214 	__le32 opcode;
215 
216 	__le32 algo;
217 
218 	__le64 session_id;
219 
220 	__le32 flag;
221 	__le32 padding;
222 };
223 struct virtio_crypto_cipher_para {
224 
225 	__le32 iv_len;
226 
227 	__le32 src_data_len;
228 
229 	__le32 dst_data_len;
230 	__le32 padding;
231 };
232 struct virtio_crypto_hash_para {
233 
234 	__le32 src_data_len;
235 
236 	__le32 hash_result_len;
237 };
238 struct virtio_crypto_mac_para {
239 	struct virtio_crypto_hash_para hash;
240 };
241 struct virtio_crypto_aead_para {
242 
243 	__le32 iv_len;
244 
245 	__le32 aad_len;
246 
247 	__le32 src_data_len;
248 
249 	__le32 dst_data_len;
250 };
251 struct virtio_crypto_cipher_data_req {
252 
253 	struct virtio_crypto_cipher_para para;
254 	__u8 padding[24];
255 };
256 struct virtio_crypto_hash_data_req {
257 
258 	struct virtio_crypto_hash_para para;
259 	__u8 padding[40];
260 };
261 struct virtio_crypto_mac_data_req {
262 
263 	struct virtio_crypto_mac_para para;
264 	__u8 padding[40];
265 };
266 struct virtio_crypto_alg_chain_data_para {
267 	__le32 iv_len;
268 
269 	__le32 src_data_len;
270 
271 	__le32 dst_data_len;
272 
273 	__le32 cipher_start_src_offset;
274 
275 	__le32 len_to_cipher;
276 
277 	__le32 hash_start_src_offset;
278 
279 	__le32 len_to_hash;
280 
281 	__le32 aad_len;
282 
283 	__le32 hash_result_len;
284 	__le32 reserved;
285 };
286 struct virtio_crypto_alg_chain_data_req {
287 
288 	struct virtio_crypto_alg_chain_data_para para;
289 };
290 struct virtio_crypto_sym_data_req {
291 	union {
292 		struct virtio_crypto_cipher_data_req cipher;
293 		struct virtio_crypto_alg_chain_data_req chain;
294 		__u8 padding[40];
295 	} u;
296 
297 	__le32 op_type;
298 	__le32 padding;
299 };
300 struct virtio_crypto_aead_data_req {
301 
302 	struct virtio_crypto_aead_para para;
303 	__u8 padding[32];
304 };
305 struct virtio_crypto_op_data_req {
306 	struct virtio_crypto_op_header header;
307 	union {
308 		struct virtio_crypto_sym_data_req  sym_req;
309 		struct virtio_crypto_hash_data_req hash_req;
310 		struct virtio_crypto_mac_data_req mac_req;
311 		struct virtio_crypto_aead_data_req aead_req;
312 		__u8 padding[48];
313 	} u;
314 };
315 #define VIRTIO_CRYPTO_OK        0
316 #define VIRTIO_CRYPTO_ERR       1
317 #define VIRTIO_CRYPTO_BADMSG    2
318 #define VIRTIO_CRYPTO_NOTSUPP   3
319 #define VIRTIO_CRYPTO_INVSESS   4
320 #define VIRTIO_CRYPTO_S_HW_READY  (1 << 0)
321 struct virtio_crypto_config {
322 
323 	__u32  status;
324 
325 	__u32  max_dataqueues;
326 
327 	__u32 crypto_services;
328 
329 	__u32 cipher_algo_l;
330 	__u32 cipher_algo_h;
331 	__u32 hash_algo;
332 	__u32 mac_algo_l;
333 	__u32 mac_algo_h;
334 	__u32 aead_algo;
335 
336 	__u32 max_cipher_key_len;
337 
338 	__u32 max_auth_key_len;
339 	__u32 reserve;
340 
341 	__u64 max_size;
342 };
343 struct virtio_crypto_inhdr {
344 
345 	__u8 status;
346 };
347 #endif
348