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