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