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