| @@ -37,6 +37,7 @@ · 36 unmodified lines |
| 37 | #define VIRTIO_CRYPTO_SERVICE_HASH 1 | 37 | #define VIRTIO_CRYPTO_SERVICE_HASH 1 |
| 38 | #define VIRTIO_CRYPTO_SERVICE_MAC 2 | 38 | #define VIRTIO_CRYPTO_SERVICE_MAC 2 |
| 39 | #define VIRTIO_CRYPTO_SERVICE_AEAD 3 | 39 | #define VIRTIO_CRYPTO_SERVICE_AEAD 3 |
| | 40 | #define VIRTIO_CRYPTO_SERVICE_AKCIPHER 4 |
| 40 | | 41 | |
| 41 | #define VIRTIO_CRYPTO_OPCODE(service, op) (((service) << 8) | (op)) | 42 | #define VIRTIO_CRYPTO_OPCODE(service, op) (((service) << 8) | (op)) |
| 42 | | 43 | |
| @@ -57,6 +58,10 @@ struct virtio_crypto_ctrl_header { · 14 unmodified lines |
| 57 | VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x02) | 58 | VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x02) |
| 58 | #define VIRTIO_CRYPTO_AEAD_DESTROY_SESSION \ | 59 | #define VIRTIO_CRYPTO_AEAD_DESTROY_SESSION \ |
| 59 | VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x03) | 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) |
| 60 | __le32 opcode; | 65 | __le32 opcode; |
| 61 | __le32 algo; | 66 | __le32 algo; |
| 62 | __le32 flag; | 67 | __le32 flag; |
| @@ -180,6 +185,58 @@ struct virtio_crypto_aead_create_session_req { · 117 unmodified lines |
| 180 | __u8 padding[32]; | 185 | __u8 padding[32]; |
| 181 | }; | 186 | }; |
| 182 | | 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 | __le32 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 | __le32 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 | __le32 curve_id; |
| | 214 | __le32 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 | __le32 algo; |
| | 223 | |
| | 224 | #define VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PUBLIC 1 |
| | 225 | #define VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PRIVATE 2 |
| | 226 | __le32 keytype; |
| | 227 | __le32 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 | __u8 padding[36]; |
| | 238 | }; |
| | 239 | |
| 183 | struct virtio_crypto_alg_chain_session_para { | 240 | struct virtio_crypto_alg_chain_session_para { |
| 184 | #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER 1 | 241 | #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER 1 |
| 185 | #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH 2 | 242 | #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH 2 |
| @@ -247,6 +304,8 @@ struct virtio_crypto_op_ctrl_req { · 61 unmodified lines |
| 247 | mac_create_session; | 304 | mac_create_session; |
| 248 | struct virtio_crypto_aead_create_session_req | 305 | struct virtio_crypto_aead_create_session_req |
| 249 | aead_create_session; | 306 | aead_create_session; |
| | 307 | struct virtio_crypto_akcipher_create_session_req |
| | 308 | akcipher_create_session; |
| 250 | struct virtio_crypto_destroy_session_req | 309 | struct virtio_crypto_destroy_session_req |
| 251 | destroy_session; | 310 | destroy_session; |
| 252 | __u8 padding[56]; | 311 | __u8 padding[56]; |
| @@ -266,6 +325,14 @@ struct virtio_crypto_op_header { · 13 unmodified lines |
| 266 | VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x00) | 325 | VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x00) |
| 267 | #define VIRTIO_CRYPTO_AEAD_DECRYPT \ | 326 | #define VIRTIO_CRYPTO_AEAD_DECRYPT \ |
| 268 | VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x01) | 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 | #define VIRTIO_CRYPTO_AKCIPHER_SIGN \ |
| | 333 | VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x02) |
| | 334 | #define VIRTIO_CRYPTO_AKCIPHER_VERIFY \ |
| | 335 | VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x03) |
| 269 | __le32 opcode; | 336 | __le32 opcode; |
| 270 | /* algo should be service-specific algorithms */ | 337 | /* algo should be service-specific algorithms */ |
| 271 | __le32 algo; | 338 | __le32 algo; |
| @@ -390,6 +457,16 @@ struct virtio_crypto_aead_data_req { · 118 unmodified lines |
| 390 | __u8 padding[32]; | 457 | __u8 padding[32]; |
| 391 | }; | 458 | }; |
| 392 | | 459 | |
| | 460 | struct virtio_crypto_akcipher_para { |
| | 461 | __le32 src_data_len; |
| | 462 | __le32 dst_data_len; |
| | 463 | }; |
| | 464 | |
| | 465 | struct virtio_crypto_akcipher_data_req { |
| | 466 | struct virtio_crypto_akcipher_para para; |
| | 467 | __u8 padding[40]; |
| | 468 | }; |
| | 469 | |
| 393 | /* The request of the data virtqueue's packet */ | 470 | /* The request of the data virtqueue's packet */ |
| 394 | struct virtio_crypto_op_data_req { | 471 | struct virtio_crypto_op_data_req { |
| 395 | struct virtio_crypto_op_header header; | 472 | struct virtio_crypto_op_header header; |
| @@ -399,6 +476,7 @@ struct virtio_crypto_op_data_req { · 3 unmodified lines |
| 399 | struct virtio_crypto_hash_data_req hash_req; | 476 | struct virtio_crypto_hash_data_req hash_req; |
| 400 | struct virtio_crypto_mac_data_req mac_req; | 477 | struct virtio_crypto_mac_data_req mac_req; |
| 401 | struct virtio_crypto_aead_data_req aead_req; | 478 | struct virtio_crypto_aead_data_req aead_req; |
| | 479 | struct virtio_crypto_akcipher_data_req akcipher_req; |
| 402 | __u8 padding[48]; | 480 | __u8 padding[48]; |
| 403 | } u; | 481 | } u; |
| 404 | }; | 482 | }; |
| @@ -408,6 +486,8 @@ struct virtio_crypto_op_data_req { · 3 unmodified lines |
| 408 | #define VIRTIO_CRYPTO_BADMSG 2 | 486 | #define VIRTIO_CRYPTO_BADMSG 2 |
| 409 | #define VIRTIO_CRYPTO_NOTSUPP 3 | 487 | #define VIRTIO_CRYPTO_NOTSUPP 3 |
| 410 | #define VIRTIO_CRYPTO_INVSESS 4 /* Invalid session id */ | 488 | #define VIRTIO_CRYPTO_INVSESS 4 /* Invalid session id */ |
| | 489 | #define VIRTIO_CRYPTO_NOSPC 5 /* no free session ID */ |
| | 490 | #define VIRTIO_CRYPTO_KEY_REJECTED 6 /* Signature verification failed */ |
| 411 | | 491 | |
| 412 | /* The accelerator hardware is ready */ | 492 | /* The accelerator hardware is ready */ |
| 413 | #define VIRTIO_CRYPTO_S_HW_READY (1 << 0) | 493 | #define VIRTIO_CRYPTO_S_HW_READY (1 << 0) |
| @@ -438,7 +518,7 @@ struct virtio_crypto_config { · 24 unmodified lines |
| 438 | __le32 max_cipher_key_len; | 518 | __le32 max_cipher_key_len; |
| 439 | /* Maximum length of authenticated key */ | 519 | /* Maximum length of authenticated key */ |
| 440 | __le32 max_auth_key_len; | 520 | __le32 max_auth_key_len; |
| 441 | __le32 reserve; | 521 | __le32 akcipher_algo; |
| 442 | /* Maximum size of each crypto request's content */ | 522 | /* Maximum size of each crypto request's content */ |
| 443 | __le64 max_size; | 523 | __le64 max_size; |
| 444 | }; | 524 | }; |