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