On 2017/4/21 20:25, Gonglei (Arei) wrote:
> > >> -----Original Message----- >> From: longpeng >> Sent: Monday, April 17, 2017 9:33 AM >> To: berra...@redhat.com >> Cc: Gonglei (Arei); Huangweidong (C); arm...@redhat.com; >> ebl...@redhat.com; m...@redhat.com; qemu-devel@nongnu.org; longpeng >> Subject: [PATCH v2 for-2.10 11/18] 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) <longpe...@huawei.com> >> --- >> crypto/hmac-gcrypt.c | 51 ++++++++++++----------------------- >> crypto/hmac-glib.c | 75 >> +++++++++++++++++++++------------------------------ >> crypto/hmac-nettle.c | 52 ++++++++++++----------------------- >> crypto/hmac.c | 44 ++++++++++++++++++++++++++++++ >> crypto/hmacpriv.h | 36 +++++++++++++++++++++++++ >> include/crypto/hmac.h | 1 + >> 6 files changed, 145 insertions(+), 114 deletions(-) >> create mode 100644 crypto/hmacpriv.h >> >> diff --git a/crypto/hmac-gcrypt.c b/crypto/hmac-gcrypt.c >> index 42489f3..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) > > Why do this change? > pls see below :) >> { >> QCryptoHmacGcrypt *ctx; >> + >> +struct QCryptoHmacDriver { >> + int (*hmac_bytesv)(QCryptoHmac *hmac, >> + const struct iovec *iov, >> + size_t niov, >> + uint8_t **result, >> + size_t *resultlen, >> + Error **errp); >> + >> + void (*hmac_free)(QCryptoHmac *hmac); >> +}; >> + >> +extern void *qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg, >> + const uint8_t *key, size_t nkey, >> + Error **errp); > > I think the method of cipher is fine. > In cipher.c, we can see this: #ifdef CONFIG_GCRYPT #include "crypto/cipher-gcrypt.c" #elif defined CONFIG_NETTLE #include "crypto/cipher-nettle.c" #else #include "crypto/cipher-builtin.c" #endif it included cipher-*.c, so cipher.c can access the static methods in cipher-*.c directly. But in hmac.c, it just included hmac.h, it cannot access the static methods in hmac-*.c, so we must change qcrypto_hmac_ctx_new from 'static qcrypto_hmac_ctx_new *' to 'void *', and declare it in hmac.h. > >> +extern QCryptoHmacDriver qcrypto_hmac_lib_driver; >> + >> +#endif >> diff --git a/include/crypto/hmac.h b/include/crypto/hmac.h >> index 0d3acd7..5e88905 100644 >> --- a/include/crypto/hmac.h >> +++ b/include/crypto/hmac.h >> @@ -18,6 +18,7 @@ typedef struct QCryptoHmac QCryptoHmac; >> struct QCryptoHmac { >> QCryptoHashAlgorithm alg; >> void *opaque; >> + void *driver; >> }; >> >> /** >> -- >> 1.8.3.1 >> > > . > -- Regards, Longpeng(Mike)