mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-22 05:24:14 +00:00
crypto: Move cipher->driver init to qcrypto_*_cipher_ctx_new
The class vtable should be set by the class initializer. This will also allow additional subclassing, reducing the amount of indirection in the hierarchy. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
3eedf5cc9d
commit
da30cd77e1
@ -58,6 +58,8 @@ qcrypto_afalg_cipher_format_name(QCryptoCipherAlgorithm alg,
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver;
|
||||||
|
|
||||||
QCryptoCipher *
|
QCryptoCipher *
|
||||||
qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg,
|
qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg,
|
||||||
QCryptoCipherMode mode,
|
QCryptoCipherMode mode,
|
||||||
@ -109,6 +111,7 @@ qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg,
|
|||||||
}
|
}
|
||||||
afalg->cmsg = CMSG_FIRSTHDR(afalg->msg);
|
afalg->cmsg = CMSG_FIRSTHDR(afalg->msg);
|
||||||
|
|
||||||
|
afalg->base.driver = &qcrypto_cipher_afalg_driver;
|
||||||
return &afalg->base;
|
return &afalg->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,7 +225,7 @@ static void qcrypto_afalg_comm_ctx_free(QCryptoCipher *cipher)
|
|||||||
qcrypto_afalg_comm_free(afalg);
|
qcrypto_afalg_comm_free(afalg);
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver = {
|
static const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver = {
|
||||||
.cipher_encrypt = qcrypto_afalg_cipher_encrypt,
|
.cipher_encrypt = qcrypto_afalg_cipher_encrypt,
|
||||||
.cipher_decrypt = qcrypto_afalg_cipher_decrypt,
|
.cipher_decrypt = qcrypto_afalg_cipher_decrypt,
|
||||||
.cipher_setiv = qcrypto_afalg_cipher_setiv,
|
.cipher_setiv = qcrypto_afalg_cipher_setiv,
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
#include "crypto/desrfb.h"
|
#include "crypto/desrfb.h"
|
||||||
#include "crypto/xts.h"
|
#include "crypto/xts.h"
|
||||||
|
|
||||||
|
static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver;
|
||||||
|
|
||||||
typedef struct QCryptoCipherBuiltinAESContext QCryptoCipherBuiltinAESContext;
|
typedef struct QCryptoCipherBuiltinAESContext QCryptoCipherBuiltinAESContext;
|
||||||
struct QCryptoCipherBuiltinAESContext {
|
struct QCryptoCipherBuiltinAESContext {
|
||||||
AES_KEY enc;
|
AES_KEY enc;
|
||||||
@ -292,6 +294,7 @@ qcrypto_cipher_init_aes(QCryptoCipherMode mode,
|
|||||||
ctxt->encrypt = qcrypto_cipher_encrypt_aes;
|
ctxt->encrypt = qcrypto_cipher_encrypt_aes;
|
||||||
ctxt->decrypt = qcrypto_cipher_decrypt_aes;
|
ctxt->decrypt = qcrypto_cipher_decrypt_aes;
|
||||||
|
|
||||||
|
ctxt->base.driver = &qcrypto_cipher_lib_driver;
|
||||||
return &ctxt->base;
|
return &ctxt->base;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
@ -396,6 +399,7 @@ qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode,
|
|||||||
ctxt->encrypt = qcrypto_cipher_encrypt_des_rfb;
|
ctxt->encrypt = qcrypto_cipher_encrypt_des_rfb;
|
||||||
ctxt->decrypt = qcrypto_cipher_decrypt_des_rfb;
|
ctxt->decrypt = qcrypto_cipher_decrypt_des_rfb;
|
||||||
|
|
||||||
|
ctxt->base.driver = &qcrypto_cipher_lib_driver;
|
||||||
return &ctxt->base;
|
return &ctxt->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include <gcrypt.h>
|
#include <gcrypt.h>
|
||||||
|
|
||||||
|
static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver;
|
||||||
|
|
||||||
bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg,
|
bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg,
|
||||||
QCryptoCipherMode mode)
|
QCryptoCipherMode mode)
|
||||||
@ -258,6 +259,7 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ctx->base.driver = &qcrypto_cipher_lib_driver;
|
||||||
return &ctx->base;
|
return &ctx->base;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
@ -34,6 +34,8 @@
|
|||||||
#include <nettle/xts.h>
|
#include <nettle/xts.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver;
|
||||||
|
|
||||||
typedef void (*QCryptoCipherNettleFuncWrapper)(const void *ctx,
|
typedef void (*QCryptoCipherNettleFuncWrapper)(const void *ctx,
|
||||||
size_t length,
|
size_t length,
|
||||||
uint8_t *dst,
|
uint8_t *dst,
|
||||||
@ -587,6 +589,7 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,
|
|||||||
|
|
||||||
ctx->iv = g_new0(uint8_t, ctx->blocksize);
|
ctx->iv = g_new0(uint8_t, ctx->blocksize);
|
||||||
|
|
||||||
|
ctx->base.driver = &qcrypto_cipher_lib_driver;
|
||||||
return &ctx->base;
|
return &ctx->base;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
@ -164,13 +164,9 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg,
|
|||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
QCryptoCipher *cipher = NULL;
|
QCryptoCipher *cipher = NULL;
|
||||||
const QCryptoCipherDriver *drv = NULL;
|
|
||||||
|
|
||||||
#ifdef CONFIG_AF_ALG
|
#ifdef CONFIG_AF_ALG
|
||||||
cipher = qcrypto_afalg_cipher_ctx_new(alg, mode, key, nkey, NULL);
|
cipher = qcrypto_afalg_cipher_ctx_new(alg, mode, key, nkey, NULL);
|
||||||
if (cipher) {
|
|
||||||
drv = &qcrypto_cipher_afalg_driver;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!cipher) {
|
if (!cipher) {
|
||||||
@ -178,13 +174,10 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg,
|
|||||||
if (!cipher) {
|
if (!cipher) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
drv = &qcrypto_cipher_lib_driver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cipher->alg = alg;
|
cipher->alg = alg;
|
||||||
cipher->mode = mode;
|
cipher->mode = mode;
|
||||||
cipher->driver = drv;
|
|
||||||
|
|
||||||
return cipher;
|
return cipher;
|
||||||
}
|
}
|
||||||
|
@ -47,8 +47,6 @@ qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg,
|
|||||||
const uint8_t *key,
|
const uint8_t *key,
|
||||||
size_t nkey, Error **errp);
|
size_t nkey, Error **errp);
|
||||||
|
|
||||||
extern const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user