2022-06-03 19:15:11 +00:00
|
|
|
/* SPDX-License-Identifier: BSD-3-Clause
|
2022-11-01 20:26:26 +00:00
|
|
|
* Copyright (C) 2018 Intel Corporation.
|
2018-03-07 23:44:06 +00:00
|
|
|
* All rights reserved.
|
2022-03-11 12:15:57 +00:00
|
|
|
* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES.
|
|
|
|
* All rights reserved.
|
2018-03-07 23:44:06 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef SPDK_VBDEV_CRYPTO_H
|
|
|
|
#define SPDK_VBDEV_CRYPTO_H
|
|
|
|
|
|
|
|
#include "spdk/rpc.h"
|
|
|
|
#include "spdk/util.h"
|
|
|
|
#include "spdk/string.h"
|
2020-10-06 16:16:26 +00:00
|
|
|
#include "spdk/log.h"
|
2018-03-07 23:44:06 +00:00
|
|
|
|
|
|
|
#include "spdk/bdev.h"
|
|
|
|
|
2020-01-31 22:03:02 +00:00
|
|
|
#define AESNI_MB "crypto_aesni_mb"
|
|
|
|
#define QAT "crypto_qat"
|
2022-01-20 15:01:29 +00:00
|
|
|
#define QAT_ASYM "crypto_qat_asym"
|
2022-01-21 11:54:58 +00:00
|
|
|
#define MLX5 "mlx5_pci"
|
2020-01-31 22:03:02 +00:00
|
|
|
|
2020-01-31 22:19:09 +00:00
|
|
|
/* Supported ciphers */
|
|
|
|
#define AES_CBC "AES_CBC" /* QAT and AESNI_MB */
|
2022-01-21 11:54:58 +00:00
|
|
|
#define AES_XTS "AES_XTS" /* QAT and MLX5 */
|
2020-01-31 22:19:09 +00:00
|
|
|
|
2022-01-20 08:25:05 +00:00
|
|
|
/* Specific to AES_CBC. */
|
|
|
|
#define AES_CBC_KEY_LENGTH 16
|
|
|
|
|
|
|
|
#define AES_XTS_128_BLOCK_KEY_LENGTH 16 /* AES-XTS-128 block key size. */
|
|
|
|
#define AES_XTS_256_BLOCK_KEY_LENGTH 32 /* AES-XTS-256 block key size. */
|
|
|
|
#define AES_XTS_512_BLOCK_KEY_LENGTH 64 /* AES-XTS-512 block key size. */
|
|
|
|
|
|
|
|
#define AES_XTS_TWEAK_KEY_LENGTH 16 /* XTS part key size is always 128 bit. */
|
|
|
|
|
|
|
|
/* Structure to hold crypto options for crypto pmd setup. */
|
|
|
|
struct vbdev_crypto_opts {
|
|
|
|
char *vbdev_name; /* name of the vbdev to create */
|
|
|
|
char *bdev_name; /* base bdev name */
|
|
|
|
|
|
|
|
char *drv_name; /* name of the crypto device driver */
|
|
|
|
char *cipher; /* AES_CBC or AES_XTS */
|
|
|
|
|
|
|
|
/* Note, for dev/test we allow use of key in the config file, for production
|
|
|
|
* use, you must use an RPC to specify the key for security reasons.
|
|
|
|
*/
|
|
|
|
uint8_t *key; /* key per bdev */
|
|
|
|
uint8_t key_size; /* key size */
|
|
|
|
uint8_t *key2; /* key #2 for AES_XTS, per bdev */
|
|
|
|
uint8_t key2_size; /* key #2 size */
|
|
|
|
uint8_t *xts_key; /* key + key 2 */
|
|
|
|
};
|
|
|
|
|
2018-03-07 23:44:06 +00:00
|
|
|
typedef void (*spdk_delete_crypto_complete)(void *cb_arg, int bdeverrno);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create new crypto bdev.
|
|
|
|
*
|
2022-01-20 08:25:05 +00:00
|
|
|
* \param opts Crypto options populated by create_crypto_opts()
|
2018-03-07 23:44:06 +00:00
|
|
|
* \return 0 on success, other on failure.
|
|
|
|
*/
|
2022-01-20 08:25:05 +00:00
|
|
|
int create_crypto_disk(struct vbdev_crypto_opts *opts);
|
2018-03-07 23:44:06 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Delete crypto bdev.
|
|
|
|
*
|
2022-03-29 05:55:53 +00:00
|
|
|
* \param bdev_name Crypto bdev name.
|
2018-03-07 23:44:06 +00:00
|
|
|
* \param cb_fn Function to call after deletion.
|
|
|
|
* \param cb_arg Argument to pass to cb_fn.
|
|
|
|
*/
|
2022-03-29 05:55:53 +00:00
|
|
|
void delete_crypto_disk(const char *bdev_name, spdk_delete_crypto_complete cb_fn,
|
2018-03-07 23:44:06 +00:00
|
|
|
void *cb_arg);
|
|
|
|
|
2022-01-20 08:25:05 +00:00
|
|
|
/**
|
|
|
|
* Release crypto opts created with create_crypto_opts()
|
|
|
|
*
|
|
|
|
* \param opts Crypto opts to release
|
|
|
|
*/
|
|
|
|
void free_crypto_opts(struct vbdev_crypto_opts *opts);
|
|
|
|
|
2018-03-07 23:44:06 +00:00
|
|
|
#endif /* SPDK_VBDEV_CRYPTO_H */
|