xref: /spdk/module/bdev/crypto/vbdev_crypto.h (revision a6dbe3721eb3b5990707fc3e378c95e505dd8ab5)
1488570ebSJim Harris /*   SPDX-License-Identifier: BSD-3-Clause
2*a6dbe372Spaul luse  *   Copyright (C) 2018 Intel Corporation.
307fe6a43SSeth Howell  *   All rights reserved.
41434e255SYuriy Umanets  *   Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES.
51434e255SYuriy Umanets  *   All rights reserved.
607fe6a43SSeth Howell  */
707fe6a43SSeth Howell 
807fe6a43SSeth Howell #ifndef SPDK_VBDEV_CRYPTO_H
907fe6a43SSeth Howell #define SPDK_VBDEV_CRYPTO_H
1007fe6a43SSeth Howell 
1107fe6a43SSeth Howell #include "spdk/rpc.h"
1207fe6a43SSeth Howell #include "spdk/util.h"
1307fe6a43SSeth Howell #include "spdk/string.h"
144e8e97c8STomasz Zawadzki #include "spdk/log.h"
1507fe6a43SSeth Howell 
1607fe6a43SSeth Howell #include "spdk/bdev.h"
1707fe6a43SSeth Howell 
18593cb5b3Spaul luse #define AESNI_MB "crypto_aesni_mb"
19593cb5b3Spaul luse #define QAT "crypto_qat"
20ca89b502STomasz Zawadzki #define QAT_ASYM "crypto_qat_asym"
2145f24aebSYuriy Umanets #define MLX5 "mlx5_pci"
22593cb5b3Spaul luse 
23f070b78cSpaul luse /* Supported ciphers */
24f070b78cSpaul luse #define AES_CBC "AES_CBC" /* QAT and AESNI_MB */
2545f24aebSYuriy Umanets #define AES_XTS "AES_XTS" /* QAT and MLX5 */
26f070b78cSpaul luse 
275ba9b78eSYuriy Umanets /* Specific to AES_CBC. */
285ba9b78eSYuriy Umanets #define AES_CBC_KEY_LENGTH	     16
295ba9b78eSYuriy Umanets 
305ba9b78eSYuriy Umanets #define AES_XTS_128_BLOCK_KEY_LENGTH 16 /* AES-XTS-128 block key size. */
315ba9b78eSYuriy Umanets #define AES_XTS_256_BLOCK_KEY_LENGTH 32 /* AES-XTS-256 block key size. */
325ba9b78eSYuriy Umanets #define AES_XTS_512_BLOCK_KEY_LENGTH 64 /* AES-XTS-512 block key size. */
335ba9b78eSYuriy Umanets 
345ba9b78eSYuriy Umanets #define AES_XTS_TWEAK_KEY_LENGTH     16 /* XTS part key size is always 128 bit. */
355ba9b78eSYuriy Umanets 
365ba9b78eSYuriy Umanets /* Structure to hold crypto options for crypto pmd setup. */
375ba9b78eSYuriy Umanets struct vbdev_crypto_opts {
385ba9b78eSYuriy Umanets 	char				*vbdev_name;	/* name of the vbdev to create */
395ba9b78eSYuriy Umanets 	char				*bdev_name;	/* base bdev name */
405ba9b78eSYuriy Umanets 
415ba9b78eSYuriy Umanets 	char				*drv_name;	/* name of the crypto device driver */
425ba9b78eSYuriy Umanets 	char				*cipher;	/* AES_CBC or AES_XTS */
435ba9b78eSYuriy Umanets 
445ba9b78eSYuriy Umanets 	/* Note, for dev/test we allow use of key in the config file, for production
455ba9b78eSYuriy Umanets 	 * use, you must use an RPC to specify the key for security reasons.
465ba9b78eSYuriy Umanets 	 */
475ba9b78eSYuriy Umanets 	uint8_t				*key;		/* key per bdev */
485ba9b78eSYuriy Umanets 	uint8_t				key_size;	/* key size */
495ba9b78eSYuriy Umanets 	uint8_t				*key2;		/* key #2 for AES_XTS, per bdev */
505ba9b78eSYuriy Umanets 	uint8_t				key2_size;	/* key #2 size */
515ba9b78eSYuriy Umanets 	uint8_t				*xts_key;	/* key + key 2 */
525ba9b78eSYuriy Umanets };
535ba9b78eSYuriy Umanets 
5407fe6a43SSeth Howell typedef void (*spdk_delete_crypto_complete)(void *cb_arg, int bdeverrno);
5507fe6a43SSeth Howell 
5607fe6a43SSeth Howell /**
5707fe6a43SSeth Howell  * Create new crypto bdev.
5807fe6a43SSeth Howell  *
595ba9b78eSYuriy Umanets  * \param opts Crypto options populated by create_crypto_opts()
6007fe6a43SSeth Howell  * \return 0 on success, other on failure.
6107fe6a43SSeth Howell  */
625ba9b78eSYuriy Umanets int create_crypto_disk(struct vbdev_crypto_opts *opts);
6307fe6a43SSeth Howell 
6407fe6a43SSeth Howell /**
6507fe6a43SSeth Howell  * Delete crypto bdev.
6607fe6a43SSeth Howell  *
674573e4ccSShuhei Matsumoto  * \param bdev_name Crypto bdev name.
6807fe6a43SSeth Howell  * \param cb_fn Function to call after deletion.
6907fe6a43SSeth Howell  * \param cb_arg Argument to pass to cb_fn.
7007fe6a43SSeth Howell  */
714573e4ccSShuhei Matsumoto void delete_crypto_disk(const char *bdev_name, spdk_delete_crypto_complete cb_fn,
7207fe6a43SSeth Howell 			void *cb_arg);
7307fe6a43SSeth Howell 
745ba9b78eSYuriy Umanets /**
755ba9b78eSYuriy Umanets  * Release crypto opts created with create_crypto_opts()
765ba9b78eSYuriy Umanets  *
775ba9b78eSYuriy Umanets  * \param opts Crypto opts to release
785ba9b78eSYuriy Umanets  */
795ba9b78eSYuriy Umanets void free_crypto_opts(struct vbdev_crypto_opts *opts);
805ba9b78eSYuriy Umanets 
8107fe6a43SSeth Howell #endif /* SPDK_VBDEV_CRYPTO_H */
82