@@ -151,73 +151,56 @@ err:
return -1;
}
-static int cryptodev_builtin_create_cipher_session(
- CryptoDevBackendBuiltin *builtin,
+static int
+cryptodev_builtin_get_cipher_alg_mode(
CryptoDevBackendSymSessionInfo *sess_info,
+ int *algo, int *mode,
Error **errp)
{
- int algo;
- int mode;
- QCryptoCipher *cipher;
- int index;
- CryptoDevBackendBuiltinSession *sess;
-
- if (sess_info->op_type != VIRTIO_CRYPTO_SYM_OP_CIPHER) {
- error_setg(errp, "Unsupported optype :%u", sess_info->op_type);
- return -1;
- }
-
- index = cryptodev_builtin_get_unused_session_index(builtin);
- if (index < 0) {
- error_setg(errp, "Total number of sessions created exceeds %u",
- MAX_NUM_SESSIONS);
- return -1;
- }
-
switch (sess_info->cipher_alg) {
case VIRTIO_CRYPTO_CIPHER_AES_ECB:
- mode = QCRYPTO_CIPHER_MODE_ECB;
- algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
- mode, errp);
- if (algo < 0) {
+ *mode = QCRYPTO_CIPHER_MODE_ECB;
+ *algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
+ *mode, errp);
+ if (*algo < 0) {
return -1;
}
break;
case VIRTIO_CRYPTO_CIPHER_AES_CBC:
- mode = QCRYPTO_CIPHER_MODE_CBC;
- algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
- mode, errp);
- if (algo < 0) {
+ *mode = QCRYPTO_CIPHER_MODE_CBC;
+ *algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
+ *mode, errp);
+ if (*algo < 0) {
return -1;
}
break;
case VIRTIO_CRYPTO_CIPHER_AES_CTR:
- mode = QCRYPTO_CIPHER_MODE_CTR;
- algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
- mode, errp);
- if (algo < 0) {
+ *mode = QCRYPTO_CIPHER_MODE_CTR;
+ *algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
+ *mode, errp);
+ if (*algo < 0) {
return -1;
}
break;
case VIRTIO_CRYPTO_CIPHER_AES_XTS:
- mode = QCRYPTO_CIPHER_MODE_XTS;
- algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
- mode, errp);
- if (algo < 0) {
+ *mode = QCRYPTO_CIPHER_MODE_XTS;
+ *algo = cryptodev_builtin_get_aes_algo(sess_info->key_len,
+ *mode, errp);
+ if (*algo < 0) {
return -1;
}
break;
case VIRTIO_CRYPTO_CIPHER_3DES_ECB:
- mode = QCRYPTO_CIPHER_MODE_ECB;
- algo = QCRYPTO_CIPHER_ALG_3DES;
+ *mode = QCRYPTO_CIPHER_MODE_ECB;
+ *algo = QCRYPTO_CIPHER_ALG_3DES;
break;
case VIRTIO_CRYPTO_CIPHER_3DES_CBC:
- mode = QCRYPTO_CIPHER_MODE_CBC;
- algo = QCRYPTO_CIPHER_ALG_3DES;
+ *mode = QCRYPTO_CIPHER_MODE_CBC;
+ *algo = QCRYPTO_CIPHER_ALG_3DES;
break;
case VIRTIO_CRYPTO_CIPHER_3DES_CTR:
- mode = QCRYPTO_CIPHER_MODE_CTR;
- algo = QCRYPTO_CIPHER_ALG_3DES;
+ *mode = QCRYPTO_CIPHER_MODE_CTR;
+ *algo = QCRYPTO_CIPHER_ALG_3DES;
break;
default:
error_setg(errp, "Unsupported cipher alg :%u",
@@ -225,6 +208,39 @@ static int cryptodev_builtin_create_cipher_session(
return -1;
}
+ return 0;
+}
+
+static int cryptodev_builtin_create_cipher_session(
+ CryptoDevBackendBuiltin *builtin,
+ CryptoDevBackendSymSessionInfo *sess_info,
+ Error **errp)
+{
+ int algo;
+ int mode;
+ QCryptoCipher *cipher;
+ int index;
+ CryptoDevBackendBuiltinSession *sess;
+ int ret;
+
+ if (sess_info->op_type != VIRTIO_CRYPTO_SYM_OP_CIPHER) {
+ error_setg(errp, "Unsupported optype :%u", sess_info->op_type);
+ return -1;
+ }
+
+ index = cryptodev_builtin_get_unused_session_index(builtin);
+ if (index < 0) {
+ error_setg(errp, "Total number of sessions created exceeds %u",
+ MAX_NUM_SESSIONS);
+ return -1;
+ }
+
+ ret = cryptodev_builtin_get_cipher_alg_mode(sess_info,
+ &algo, &mode, errp);
+ if (ret < 0) {
+ return -1;
+ }
+
cipher = qcrypto_cipher_new(algo, mode,
sess_info->cipher_key,
sess_info->key_len,
So that the new function can be used by both seesion creation and the following stateless crypto operation. Signed-off-by: Gonglei <arei.gonglei@huawei.com> --- backends/cryptodev-builtin.c | 100 +++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 42 deletions(-)