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