diff options
author | Longpeng(Mike) <longpeng2@huawei.com> | 2017-07-14 14:04:04 -0400 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2017-07-19 10:11:05 +0100 |
commit | 14a5a2aef47e27b6afd1f8855eb41c75b69440dc (patch) | |
tree | c8a273d9e48e5b6b4a50125238b96392f1e5481a /crypto/hmac-gcrypt.c | |
parent | d73c04e3ca3d4a1ac73da7f7952f769824417b47 (diff) | |
download | qemu-14a5a2aef47e27b6afd1f8855eb41c75b69440dc.zip qemu-14a5a2aef47e27b6afd1f8855eb41c75b69440dc.tar.gz qemu-14a5a2aef47e27b6afd1f8855eb41c75b69440dc.tar.bz2 |
crypto: hmac: add hmac driver framework
1) makes the public APIs in hmac-nettle/gcrypt/glib static,
and rename them with "nettle/gcrypt/glib" prefix.
2) introduces hmac framework, including QCryptoHmacDriver
and new public APIs.
Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'crypto/hmac-gcrypt.c')
-rw-r--r-- | crypto/hmac-gcrypt.c | 51 |
1 files changed, 17 insertions, 34 deletions
diff --git a/crypto/hmac-gcrypt.c b/crypto/hmac-gcrypt.c index 372ad7f..76ca61b 100644 --- a/crypto/hmac-gcrypt.c +++ b/crypto/hmac-gcrypt.c @@ -15,6 +15,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "crypto/hmac.h" +#include "hmacpriv.h" #include <gcrypt.h> static int qcrypto_hmac_alg_map[QCRYPTO_HASH_ALG__MAX] = { @@ -42,10 +43,9 @@ bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) return false; } -static QCryptoHmacGcrypt * -qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp) +void *qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) { QCryptoHmacGcrypt *ctx; gcry_error_t err; @@ -81,27 +81,24 @@ error: return NULL; } -void qcrypto_hmac_free(QCryptoHmac *hmac) +static void +qcrypto_gcrypt_hmac_ctx_free(QCryptoHmac *hmac) { QCryptoHmacGcrypt *ctx; - if (!hmac) { - return; - } - ctx = hmac->opaque; gcry_mac_close(ctx->handle); g_free(ctx); - g_free(hmac); } -int qcrypto_hmac_bytesv(QCryptoHmac *hmac, - const struct iovec *iov, - size_t niov, - uint8_t **result, - size_t *resultlen, - Error **errp) +static int +qcrypto_gcrypt_hmac_bytesv(QCryptoHmac *hmac, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) { QCryptoHmacGcrypt *ctx; gcry_error_t err; @@ -147,21 +144,7 @@ int qcrypto_hmac_bytesv(QCryptoHmac *hmac, return 0; } -QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoHmac *hmac; - QCryptoHmacGcrypt *ctx; - - ctx = qcrypto_hmac_ctx_new(alg, key, nkey, errp); - if (!ctx) { - return NULL; - } - - hmac = g_new0(QCryptoHmac, 1); - hmac->alg = alg; - hmac->opaque = ctx; - - return hmac; -} +QCryptoHmacDriver qcrypto_hmac_lib_driver = { + .hmac_bytesv = qcrypto_gcrypt_hmac_bytesv, + .hmac_free = qcrypto_gcrypt_hmac_ctx_free, +}; |