diff options
author | Longpeng(Mike) <longpeng2@huawei.com> | 2017-07-14 14:04:06 -0400 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2017-07-19 10:11:05 +0100 |
commit | 25c60df32b9aad71a86cbb3aeaed60bf7567918a (patch) | |
tree | fe58cccce4f3a4729cf8a393e820da69ac2d952f /crypto/cipher.c | |
parent | f0d92b56d8831de4b7df43ed3e6404cae5d42ed8 (diff) |
crypto: cipher: add afalg-backend cipher support
Adds afalg-backend cipher support: introduces some private APIs
firstly, and then intergrates them into qcrypto_cipher_afalg_driver.
Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'crypto/cipher.c')
-rw-r--r-- | crypto/cipher.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/crypto/cipher.c b/crypto/cipher.c index 0a3d2e5b1d..0aad9d6d79 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -163,18 +163,33 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, Error **errp) { QCryptoCipher *cipher; - void *ctx; + void *ctx = NULL; + Error *err2 = NULL; + QCryptoCipherDriver *drv = NULL; + +#ifdef CONFIG_AF_ALG + ctx = qcrypto_afalg_cipher_ctx_new(alg, mode, key, nkey, &err2); + if (ctx) { + drv = &qcrypto_cipher_afalg_driver; + } +#endif - ctx = qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); if (!ctx) { - return NULL; + ctx = qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); + if (!ctx) { + error_free(err2); + return NULL; + } + + drv = &qcrypto_cipher_lib_driver; + error_free(err2); } cipher = g_new0(QCryptoCipher, 1); cipher->alg = alg; cipher->mode = mode; cipher->opaque = ctx; - cipher->driver = (void *)&qcrypto_cipher_lib_driver; + cipher->driver = (void *)drv; return cipher; } |