xref: /qemu/include/standard-headers/linux/virtio_crypto.h (revision ed2db97e60fdc32441f22526a26bd66a6557674d)
1 #ifndef _VIRTIO_CRYPTO_H
2 #define _VIRTIO_CRYPTO_H
3 /* This header is BSD licensed so anyone can use the definitions to implement
4  * compatible drivers/servers.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. Neither the name of IBM nor the names of its contributors
15  *    may be used to endorse or promote products derived from this software
16  *    without specific prior written permission.
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
27  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  */
30 #include "standard-headers/linux/types.h"
31 #include "standard-headers/linux/virtio_types.h"
32 #include "standard-headers/linux/virtio_ids.h"
33 #include "standard-headers/linux/virtio_config.h"
34 
35 
36 #define VIRTIO_CRYPTO_SERVICE_CIPHER 0
37 #define VIRTIO_CRYPTO_SERVICE_HASH   1
38 #define VIRTIO_CRYPTO_SERVICE_MAC    2
39 #define VIRTIO_CRYPTO_SERVICE_AEAD   3
40 #define VIRTIO_CRYPTO_SERVICE_AKCIPHER 4
41 
42 #define VIRTIO_CRYPTO_OPCODE(service, op)   (((service) << 8) | (op))
43 
44 struct virtio_crypto_ctrl_header {
45 #define VIRTIO_CRYPTO_CIPHER_CREATE_SESSION \
46 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x02)
47 #define VIRTIO_CRYPTO_CIPHER_DESTROY_SESSION \
48 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x03)
49 #define VIRTIO_CRYPTO_HASH_CREATE_SESSION \
50 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x02)
51 #define VIRTIO_CRYPTO_HASH_DESTROY_SESSION \
52 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x03)
53 #define VIRTIO_CRYPTO_MAC_CREATE_SESSION \
54 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x02)
55 #define VIRTIO_CRYPTO_MAC_DESTROY_SESSION \
56 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x03)
57 #define VIRTIO_CRYPTO_AEAD_CREATE_SESSION \
58 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x02)
59 #define VIRTIO_CRYPTO_AEAD_DESTROY_SESSION \
60 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x03)
61 #define VIRTIO_CRYPTO_AKCIPHER_CREATE_SESSION \
62 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x04)
63 #define VIRTIO_CRYPTO_AKCIPHER_DESTROY_SESSION \
64 	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x05)
65 	uint32_t opcode;
66 	uint32_t algo;
67 	uint32_t flag;
68 	/* data virtqueue id */
69 	uint32_t queue_id;
70 };
71 
72 struct virtio_crypto_cipher_session_para {
73 #define VIRTIO_CRYPTO_NO_CIPHER                 0
74 #define VIRTIO_CRYPTO_CIPHER_ARC4               1
75 #define VIRTIO_CRYPTO_CIPHER_AES_ECB            2
76 #define VIRTIO_CRYPTO_CIPHER_AES_CBC            3
77 #define VIRTIO_CRYPTO_CIPHER_AES_CTR            4
78 #define VIRTIO_CRYPTO_CIPHER_DES_ECB            5
79 #define VIRTIO_CRYPTO_CIPHER_DES_CBC            6
80 #define VIRTIO_CRYPTO_CIPHER_3DES_ECB           7
81 #define VIRTIO_CRYPTO_CIPHER_3DES_CBC           8
82 #define VIRTIO_CRYPTO_CIPHER_3DES_CTR           9
83 #define VIRTIO_CRYPTO_CIPHER_KASUMI_F8          10
84 #define VIRTIO_CRYPTO_CIPHER_SNOW3G_UEA2        11
85 #define VIRTIO_CRYPTO_CIPHER_AES_F8             12
86 #define VIRTIO_CRYPTO_CIPHER_AES_XTS            13
87 #define VIRTIO_CRYPTO_CIPHER_ZUC_EEA3           14
88 	uint32_t algo;
89 	/* length of key */
90 	uint32_t keylen;
91 
92 #define VIRTIO_CRYPTO_OP_ENCRYPT  1
93 #define VIRTIO_CRYPTO_OP_DECRYPT  2
94 	/* encrypt or decrypt */
95 	uint32_t op;
96 	uint32_t padding;
97 };
98 
99 struct virtio_crypto_session_input {
100 	/* Device-writable part */
101 	uint64_t session_id;
102 	uint32_t status;
103 	uint32_t padding;
104 };
105 
106 struct virtio_crypto_cipher_session_req {
107 	struct virtio_crypto_cipher_session_para para;
108 	uint8_t padding[32];
109 };
110 
111 struct virtio_crypto_hash_session_para {
112 #define VIRTIO_CRYPTO_NO_HASH            0
113 #define VIRTIO_CRYPTO_HASH_MD5           1
114 #define VIRTIO_CRYPTO_HASH_SHA1          2
115 #define VIRTIO_CRYPTO_HASH_SHA_224       3
116 #define VIRTIO_CRYPTO_HASH_SHA_256       4
117 #define VIRTIO_CRYPTO_HASH_SHA_384       5
118 #define VIRTIO_CRYPTO_HASH_SHA_512       6
119 #define VIRTIO_CRYPTO_HASH_SHA3_224      7
120 #define VIRTIO_CRYPTO_HASH_SHA3_256      8
121 #define VIRTIO_CRYPTO_HASH_SHA3_384      9
122 #define VIRTIO_CRYPTO_HASH_SHA3_512      10
123 #define VIRTIO_CRYPTO_HASH_SHA3_SHAKE128      11
124 #define VIRTIO_CRYPTO_HASH_SHA3_SHAKE256      12
125 	uint32_t algo;
126 	/* hash result length */
127 	uint32_t hash_result_len;
128 	uint8_t padding[8];
129 };
130 
131 struct virtio_crypto_hash_create_session_req {
132 	struct virtio_crypto_hash_session_para para;
133 	uint8_t padding[40];
134 };
135 
136 struct virtio_crypto_mac_session_para {
137 #define VIRTIO_CRYPTO_NO_MAC                       0
138 #define VIRTIO_CRYPTO_MAC_HMAC_MD5                 1
139 #define VIRTIO_CRYPTO_MAC_HMAC_SHA1                2
140 #define VIRTIO_CRYPTO_MAC_HMAC_SHA_224             3
141 #define VIRTIO_CRYPTO_MAC_HMAC_SHA_256             4
142 #define VIRTIO_CRYPTO_MAC_HMAC_SHA_384             5
143 #define VIRTIO_CRYPTO_MAC_HMAC_SHA_512             6
144 #define VIRTIO_CRYPTO_MAC_CMAC_3DES                25
145 #define VIRTIO_CRYPTO_MAC_CMAC_AES                 26
146 #define VIRTIO_CRYPTO_MAC_KASUMI_F9                27
147 #define VIRTIO_CRYPTO_MAC_SNOW3G_UIA2              28
148 #define VIRTIO_CRYPTO_MAC_GMAC_AES                 41
149 #define VIRTIO_CRYPTO_MAC_GMAC_TWOFISH             42
150 #define VIRTIO_CRYPTO_MAC_CBCMAC_AES               49
151 #define VIRTIO_CRYPTO_MAC_CBCMAC_KASUMI_F9         50
152 #define VIRTIO_CRYPTO_MAC_XCBC_AES                 53
153 	uint32_t algo;
154 	/* hash result length */
155 	uint32_t hash_result_len;
156 	/* length of authenticated key */
157 	uint32_t auth_key_len;
158 	uint32_t padding;
159 };
160 
161 struct virtio_crypto_mac_create_session_req {
162 	struct virtio_crypto_mac_session_para para;
163 	uint8_t padding[40];
164 };
165 
166 struct virtio_crypto_aead_session_para {
167 #define VIRTIO_CRYPTO_NO_AEAD     0
168 #define VIRTIO_CRYPTO_AEAD_GCM    1
169 #define VIRTIO_CRYPTO_AEAD_CCM    2
170 #define VIRTIO_CRYPTO_AEAD_CHACHA20_POLY1305  3
171 	uint32_t algo;
172 	/* length of key */
173 	uint32_t key_len;
174 	/* hash result length */
175 	uint32_t hash_result_len;
176 	/* length of the additional authenticated data (AAD) in bytes */
177 	uint32_t aad_len;
178 	/* encrypt or decrypt, See above VIRTIO_CRYPTO_OP_* */
179 	uint32_t op;
180 	uint32_t padding;
181 };
182 
183 struct virtio_crypto_aead_create_session_req {
184 	struct virtio_crypto_aead_session_para para;
185 	uint8_t padding[32];
186 };
187 
188 struct virtio_crypto_rsa_session_para {
189 #define VIRTIO_CRYPTO_RSA_RAW_PADDING   0
190 #define VIRTIO_CRYPTO_RSA_PKCS1_PADDING 1
191 	uint32_t padding_algo;
192 
193 #define VIRTIO_CRYPTO_RSA_NO_HASH   0
194 #define VIRTIO_CRYPTO_RSA_MD2       1
195 #define VIRTIO_CRYPTO_RSA_MD3       2
196 #define VIRTIO_CRYPTO_RSA_MD4       3
197 #define VIRTIO_CRYPTO_RSA_MD5       4
198 #define VIRTIO_CRYPTO_RSA_SHA1      5
199 #define VIRTIO_CRYPTO_RSA_SHA256    6
200 #define VIRTIO_CRYPTO_RSA_SHA384    7
201 #define VIRTIO_CRYPTO_RSA_SHA512    8
202 #define VIRTIO_CRYPTO_RSA_SHA224    9
203 	uint32_t hash_algo;
204 };
205 
206 struct virtio_crypto_ecdsa_session_para {
207 #define VIRTIO_CRYPTO_CURVE_UNKNOWN   0
208 #define VIRTIO_CRYPTO_CURVE_NIST_P192 1
209 #define VIRTIO_CRYPTO_CURVE_NIST_P224 2
210 #define VIRTIO_CRYPTO_CURVE_NIST_P256 3
211 #define VIRTIO_CRYPTO_CURVE_NIST_P384 4
212 #define VIRTIO_CRYPTO_CURVE_NIST_P521 5
213 	uint32_t curve_id;
214 	uint32_t padding;
215 };
216 
217 struct virtio_crypto_akcipher_session_para {
218 #define VIRTIO_CRYPTO_NO_AKCIPHER    0
219 #define VIRTIO_CRYPTO_AKCIPHER_RSA   1
220 #define VIRTIO_CRYPTO_AKCIPHER_DSA   2
221 #define VIRTIO_CRYPTO_AKCIPHER_ECDSA 3
222 	uint32_t algo;
223 
224 #define VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PUBLIC  1
225 #define VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PRIVATE 2
226 	uint32_t keytype;
227 	uint32_t keylen;
228 
229 	union {
230 		struct virtio_crypto_rsa_session_para rsa;
231 		struct virtio_crypto_ecdsa_session_para ecdsa;
232 	} u;
233 };
234 
235 struct virtio_crypto_akcipher_create_session_req {
236 	struct virtio_crypto_akcipher_session_para para;
237 	uint8_t padding[36];
238 };
239 
240 struct virtio_crypto_alg_chain_session_para {
241 #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER  1
242 #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH  2
243 	uint32_t alg_chain_order;
244 /* Plain hash */
245 #define VIRTIO_CRYPTO_SYM_HASH_MODE_PLAIN    1
246 /* Authenticated hash (mac) */
247 #define VIRTIO_CRYPTO_SYM_HASH_MODE_AUTH     2
248 /* Nested hash */
249 #define VIRTIO_CRYPTO_SYM_HASH_MODE_NESTED   3
250 	uint32_t hash_mode;
251 	struct virtio_crypto_cipher_session_para cipher_param;
252 	union {
253 		struct virtio_crypto_hash_session_para hash_param;
254 		struct virtio_crypto_mac_session_para mac_param;
255 		uint8_t padding[16];
256 	} u;
257 	/* length of the additional authenticated data (AAD) in bytes */
258 	uint32_t aad_len;
259 	uint32_t padding;
260 };
261 
262 struct virtio_crypto_alg_chain_session_req {
263 	struct virtio_crypto_alg_chain_session_para para;
264 };
265 
266 struct virtio_crypto_sym_create_session_req {
267 	union {
268 		struct virtio_crypto_cipher_session_req cipher;
269 		struct virtio_crypto_alg_chain_session_req chain;
270 		uint8_t padding[48];
271 	} u;
272 
273 	/* Device-readable part */
274 
275 /* No operation */
276 #define VIRTIO_CRYPTO_SYM_OP_NONE  0
277 /* Cipher only operation on the data */
278 #define VIRTIO_CRYPTO_SYM_OP_CIPHER  1
279 /*
280  * Chain any cipher with any hash or mac operation. The order
281  * depends on the value of alg_chain_order param
282  */
283 #define VIRTIO_CRYPTO_SYM_OP_ALGORITHM_CHAINING  2
284 	uint32_t op_type;
285 	uint32_t padding;
286 };
287 
288 struct virtio_crypto_destroy_session_req {
289 	/* Device-readable part */
290 	uint64_t  session_id;
291 	uint8_t padding[48];
292 };
293 
294 /* The request of the control virtqueue's packet */
295 struct virtio_crypto_op_ctrl_req {
296 	struct virtio_crypto_ctrl_header header;
297 
298 	union {
299 		struct virtio_crypto_sym_create_session_req
300 			sym_create_session;
301 		struct virtio_crypto_hash_create_session_req
302 			hash_create_session;
303 		struct virtio_crypto_mac_create_session_req
304 			mac_create_session;
305 		struct virtio_crypto_aead_create_session_req
306 			aead_create_session;
307 		struct virtio_crypto_akcipher_create_session_req
308 			akcipher_create_session;
309 		struct virtio_crypto_destroy_session_req
310 			destroy_session;
311 		uint8_t padding[56];
312 	} u;
313 };
314 
315 struct virtio_crypto_op_header {
316 #define VIRTIO_CRYPTO_CIPHER_ENCRYPT \
317 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x00)
318 #define VIRTIO_CRYPTO_CIPHER_DECRYPT \
319 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x01)
320 #define VIRTIO_CRYPTO_HASH \
321 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x00)
322 #define VIRTIO_CRYPTO_MAC \
323 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x00)
324 #define VIRTIO_CRYPTO_AEAD_ENCRYPT \
325 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x00)
326 #define VIRTIO_CRYPTO_AEAD_DECRYPT \
327 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x01)
328 #define VIRTIO_CRYPTO_AKCIPHER_ENCRYPT \
329 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x00)
330 #define VIRTIO_CRYPTO_AKCIPHER_DECRYPT \
331 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x01)
332 	/* akcipher sign/verify opcodes are deprecated */
333 #define VIRTIO_CRYPTO_AKCIPHER_SIGN \
334 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x02)
335 #define VIRTIO_CRYPTO_AKCIPHER_VERIFY \
336 	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x03)
337 	uint32_t opcode;
338 	/* algo should be service-specific algorithms */
339 	uint32_t algo;
340 	/* session_id should be service-specific algorithms */
341 	uint64_t session_id;
342 	/* control flag to control the request */
343 	uint32_t flag;
344 	uint32_t padding;
345 };
346 
347 struct virtio_crypto_cipher_para {
348 	/*
349 	 * Byte Length of valid IV/Counter
350 	 *
351 	 * For block ciphers in CBC or F8 mode, or for Kasumi in F8 mode, or for
352 	 *   SNOW3G in UEA2 mode, this is the length of the IV (which
353 	 *   must be the same as the block length of the cipher).
354 	 * For block ciphers in CTR mode, this is the length of the counter
355 	 *   (which must be the same as the block length of the cipher).
356 	 * For AES-XTS, this is the 128bit tweak, i, from IEEE Std 1619-2007.
357 	 *
358 	 * The IV/Counter will be updated after every partial cryptographic
359 	 * operation.
360 	 */
361 	uint32_t iv_len;
362 	/* length of source data */
363 	uint32_t src_data_len;
364 	/* length of dst data */
365 	uint32_t dst_data_len;
366 	uint32_t padding;
367 };
368 
369 struct virtio_crypto_hash_para {
370 	/* length of source data */
371 	uint32_t src_data_len;
372 	/* hash result length */
373 	uint32_t hash_result_len;
374 };
375 
376 struct virtio_crypto_mac_para {
377 	struct virtio_crypto_hash_para hash;
378 };
379 
380 struct virtio_crypto_aead_para {
381 	/*
382 	 * Byte Length of valid IV data pointed to by the below iv_addr
383 	 * parameter.
384 	 *
385 	 * For GCM mode, this is either 12 (for 96-bit IVs) or 16, in which
386 	 *   case iv_addr points to J0.
387 	 * For CCM mode, this is the length of the nonce, which can be in the
388 	 *   range 7 to 13 inclusive.
389 	 */
390 	uint32_t iv_len;
391 	/* length of additional auth data */
392 	uint32_t aad_len;
393 	/* length of source data */
394 	uint32_t src_data_len;
395 	/* length of dst data */
396 	uint32_t dst_data_len;
397 };
398 
399 struct virtio_crypto_cipher_data_req {
400 	/* Device-readable part */
401 	struct virtio_crypto_cipher_para para;
402 	uint8_t padding[24];
403 };
404 
405 struct virtio_crypto_hash_data_req {
406 	/* Device-readable part */
407 	struct virtio_crypto_hash_para para;
408 	uint8_t padding[40];
409 };
410 
411 struct virtio_crypto_mac_data_req {
412 	/* Device-readable part */
413 	struct virtio_crypto_mac_para para;
414 	uint8_t padding[40];
415 };
416 
417 struct virtio_crypto_alg_chain_data_para {
418 	uint32_t iv_len;
419 	/* Length of source data */
420 	uint32_t src_data_len;
421 	/* Length of destination data */
422 	uint32_t dst_data_len;
423 	/* Starting point for cipher processing in source data */
424 	uint32_t cipher_start_src_offset;
425 	/* Length of the source data that the cipher will be computed on */
426 	uint32_t len_to_cipher;
427 	/* Starting point for hash processing in source data */
428 	uint32_t hash_start_src_offset;
429 	/* Length of the source data that the hash will be computed on */
430 	uint32_t len_to_hash;
431 	/* Length of the additional auth data */
432 	uint32_t aad_len;
433 	/* Length of the hash result */
434 	uint32_t hash_result_len;
435 	uint32_t reserved;
436 };
437 
438 struct virtio_crypto_alg_chain_data_req {
439 	/* Device-readable part */
440 	struct virtio_crypto_alg_chain_data_para para;
441 };
442 
443 struct virtio_crypto_sym_data_req {
444 	union {
445 		struct virtio_crypto_cipher_data_req cipher;
446 		struct virtio_crypto_alg_chain_data_req chain;
447 		uint8_t padding[40];
448 	} u;
449 
450 	/* See above VIRTIO_CRYPTO_SYM_OP_* */
451 	uint32_t op_type;
452 	uint32_t padding;
453 };
454 
455 struct virtio_crypto_aead_data_req {
456 	/* Device-readable part */
457 	struct virtio_crypto_aead_para para;
458 	uint8_t padding[32];
459 };
460 
461 struct virtio_crypto_akcipher_para {
462 	uint32_t src_data_len;
463 	uint32_t dst_data_len;
464 };
465 
466 struct virtio_crypto_akcipher_data_req {
467 	struct virtio_crypto_akcipher_para para;
468 	uint8_t padding[40];
469 };
470 
471 /* The request of the data virtqueue's packet */
472 struct virtio_crypto_op_data_req {
473 	struct virtio_crypto_op_header header;
474 
475 	union {
476 		struct virtio_crypto_sym_data_req  sym_req;
477 		struct virtio_crypto_hash_data_req hash_req;
478 		struct virtio_crypto_mac_data_req mac_req;
479 		struct virtio_crypto_aead_data_req aead_req;
480 		struct virtio_crypto_akcipher_data_req akcipher_req;
481 		uint8_t padding[48];
482 	} u;
483 };
484 
485 #define VIRTIO_CRYPTO_OK        0
486 #define VIRTIO_CRYPTO_ERR       1
487 #define VIRTIO_CRYPTO_BADMSG    2
488 #define VIRTIO_CRYPTO_NOTSUPP   3
489 #define VIRTIO_CRYPTO_INVSESS   4 /* Invalid session id */
490 #define VIRTIO_CRYPTO_NOSPC     5 /* no free session ID */
491 #define VIRTIO_CRYPTO_KEY_REJECTED 6 /* Signature verification failed */
492 
493 /* The accelerator hardware is ready */
494 #define VIRTIO_CRYPTO_S_HW_READY  (1 << 0)
495 
496 struct virtio_crypto_config {
497 	/* See VIRTIO_CRYPTO_OP_* above */
498 	uint32_t  status;
499 
500 	/*
501 	 * Maximum number of data queue
502 	 */
503 	uint32_t  max_dataqueues;
504 
505 	/*
506 	 * Specifies the services mask which the device support,
507 	 * see VIRTIO_CRYPTO_SERVICE_* above
508 	 */
509 	uint32_t crypto_services;
510 
511 	/* Detailed algorithms mask */
512 	uint32_t cipher_algo_l;
513 	uint32_t cipher_algo_h;
514 	uint32_t hash_algo;
515 	uint32_t mac_algo_l;
516 	uint32_t mac_algo_h;
517 	uint32_t aead_algo;
518 	/* Maximum length of cipher key */
519 	uint32_t max_cipher_key_len;
520 	/* Maximum length of authenticated key */
521 	uint32_t max_auth_key_len;
522 	uint32_t akcipher_algo;
523 	/* Maximum size of each crypto request's content */
524 	uint64_t max_size;
525 };
526 
527 struct virtio_crypto_inhdr {
528 	/* See VIRTIO_CRYPTO_* above */
529 	uint8_t status;
530 };
531 #endif
532