From: "Longpeng (Mike)" <longpeng2@huawei.com>
To: "Gonglei (Arei)" <arei.gonglei@huawei.com>
Cc: "berrange@redhat.com" <berrange@redhat.com>,
"Huangweidong (C)" <weidong.huang@huawei.com>,
"armbru@redhat.com" <armbru@redhat.com>,
"eblake@redhat.com" <eblake@redhat.com>,
"mst@redhat.com" <mst@redhat.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v2 for-2.10 14/18] crypto: hash: add afalg-backend hash support
Date: Sat, 22 Apr 2017 09:37:17 +0800 [thread overview]
Message-ID: <58FAB3CD.6000808@huawei.com> (raw)
In-Reply-To: <33183CC9F5247A488A2544077AF19020DA238C27@DGGEMA505-MBS.china.huawei.com>
On 2017/4/21 21:01, Gonglei (Arei) wrote:
> There are same problems with the previous patch.
>
Ok, I'll fix them in v3, thanks.
>
>
> Regards,
> -Gonglei
>
>
>> -----Original Message-----
>> From: longpeng
>> Sent: Monday, April 17, 2017 9:33 AM
>> To: berrange@redhat.com
>> Cc: Gonglei (Arei); Huangweidong (C); armbru@redhat.com;
>> eblake@redhat.com; mst@redhat.com; qemu-devel@nongnu.org; longpeng
>> Subject: [PATCH v2 for-2.10 14/18] crypto: hash: add afalg-backend hash
>> support
>>
>> Adds afalg-backend hash support: introduces some private APIs
>> firstly, and then intergrates them into qcrypto_hash_afalg_driver.
>>
>> Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com>
>> ---
>> crypto/Makefile.objs | 1 +
>> crypto/afalgpriv.h | 1 +
>> crypto/hash-afalg.c | 151
>> +++++++++++++++++++++++++++++++++++++++++++++++++++
>> crypto/hash.c | 11 ++++
>> crypto/hashpriv.h | 4 ++
>> 5 files changed, 168 insertions(+)
>> create mode 100644 crypto/hash-afalg.c
>>
>> diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs
>> index d2e8fa8..2b99e08 100644
>> --- a/crypto/Makefile.objs
>> +++ b/crypto/Makefile.objs
>> @@ -12,6 +12,7 @@ crypto-obj-y += desrfb.o
>> crypto-obj-y += cipher.o
>> crypto-obj-$(CONFIG_AF_ALG) += afalg.o
>> crypto-obj-$(CONFIG_AF_ALG) += cipher-afalg.o
>> +crypto-obj-$(CONFIG_AF_ALG) += hash-afalg.o
>> crypto-obj-y += tlscreds.o
>> crypto-obj-y += tlscredsanon.o
>> crypto-obj-y += tlscredsx509.o
>> diff --git a/crypto/afalgpriv.h b/crypto/afalgpriv.h
>> index 7db0597..71ec267 100644
>> --- a/crypto/afalgpriv.h
>> +++ b/crypto/afalgpriv.h
>> @@ -24,6 +24,7 @@
>> #endif
>>
>> #define AFALG_TYPE_CIPHER "skcipher"
>> +#define AFALG_TYPE_HASH "hash"
>>
>> #define ALG_OPTYPE_LEN 4
>> #define ALG_MSGIV_LEN(len) (sizeof(struct af_alg_iv) + (len))
>> diff --git a/crypto/hash-afalg.c b/crypto/hash-afalg.c
>> new file mode 100644
>> index 0000000..1d0e052
>> --- /dev/null
>> +++ b/crypto/hash-afalg.c
>> @@ -0,0 +1,151 @@
>> +/*
>> + * QEMU Crypto af_alg-backend hash support
>> + *
>> + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD.
>> + *
>> + * Authors:
>> + * Longpeng(Mike) <longpeng2@huawei.com>
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> + * (at your option) any later version. See the COPYING file in the
>> + * top-level directory.
>> + */
>> +#include "qemu/osdep.h"
>> +#include "qemu/iov.h"
>> +#include "qemu/sockets.h"
>> +#include "qemu-common.h"
>> +#include "qapi/error.h"
>> +#include "crypto/hash.h"
>> +#include "hashpriv.h"
>> +
>> +static char *
>> +qcrypto_afalg_hash_format_name(QCryptoHashAlgorithm alg,
>> + Error **errp)
>> +{
>> + char *name;
>> + const char *alg_name = NULL;
>> + int ret;
>> +
>> + switch (alg) {
>> + case QCRYPTO_HASH_ALG_MD5:
>> + alg_name = "md5";
>> + break;
>> + case QCRYPTO_HASH_ALG_SHA1:
>> + alg_name = "sha1";
>> + break;
>> + case QCRYPTO_HASH_ALG_SHA224:
>> + alg_name = "sha224";
>> + break;
>> + case QCRYPTO_HASH_ALG_SHA256:
>> + alg_name = "sha256";
>> + break;
>> + case QCRYPTO_HASH_ALG_SHA384:
>> + alg_name = "sha384";
>> + break;
>> + case QCRYPTO_HASH_ALG_SHA512:
>> + alg_name = "sha512";
>> + break;
>> + case QCRYPTO_HASH_ALG_RIPEMD160:
>> + alg_name = "rmd160";
>> + break;
>> +
>> + default:
>> + error_setg(errp, "Unsupported hash algorithm %d", alg);
>> + return NULL;
>> + }
>> +
>> + name = (char *)g_new0(int8_t, SALG_NAME_LEN_MAX);
>> + ret = snprintf(name, SALG_NAME_LEN_MAX, "%s", alg_name);
>> + if (ret < 0 || ret >= SALG_NAME_LEN_MAX) {
>> + error_setg(errp, "Build hash name(name='%s') failed",
>> + alg_name);
>> + g_free(name);
>> + return NULL;
>> + }
>> +
>> + return name;
>> +}
>> +
>> +static QCryptoAFAlg *
>> +qcrypto_afalg_hash_ctx_new(QCryptoHashAlgorithm alg, Error **errp)
>> +{
>> + QCryptoAFAlg *afalg;
>> + char *name;
>> +
>> + name = qcrypto_afalg_hash_format_name(alg, errp);
>> + if (!name) {
>> + return NULL;
>> + }
>> +
>> + afalg = qcrypto_afalg_comm_alloc(AFALG_TYPE_HASH, name, errp);
>> + if (!afalg) {
>> + goto error;
>> + }
>> +
>> + /* prepare msg header */
>> + afalg->msg = g_new0(struct msghdr, 1);
>> +
>> +cleanup:
>> + g_free(name);
>> + return afalg;
>> +
>> +error:
>> + qcrypto_afalg_comm_free(afalg);
>> + goto cleanup;
>> +}
>> +
>> +static int
>> +qcrypto_afalg_hash_bytesv(QCryptoHashAlgorithm alg,
>> + const struct iovec *iov,
>> + size_t niov, uint8_t **result,
>> + size_t *resultlen,
>> + Error **errp)
>> +{
>> + QCryptoAFAlg *afalg;
>> + struct iovec outv;
>> + int ret = 0;
>> + const int except_len = qcrypto_hash_digest_len(alg);
>> +
>> + if (*resultlen == 0) {
>> + *resultlen = except_len;
>> + *result = g_new0(uint8_t, *resultlen);
>> + } else if (*resultlen != except_len) {
>> + error_setg(errp,
>> + "Result buffer size %zu is not match hash %d",
>> + *resultlen, except_len);
>> + return -1;
>> + }
>> +
>> + afalg = qcrypto_afalg_hash_ctx_new(alg, errp);
>> + if (afalg == NULL) {
>> + return -1;
>> + }
>> +
>> + /* send data to kernel's crypto core */
>> + ret = iov_send_recv(afalg->opfd, iov, niov,
>> + 0, iov_size(iov, niov), true);
>> + if (ret < 0) {
>> + error_setg_errno(errp, errno, "Send data to afalg-core failed");
>> + goto out;
>> + }
>> +
>> + /* hash && get result */
>> + outv.iov_base = *result;
>> + outv.iov_len = *resultlen;
>> + afalg->msg->msg_iov = &outv;
>> + afalg->msg->msg_iovlen = 1;
>> + ret = recvmsg(afalg->opfd, afalg->msg, 0);
>> + if (ret != -1) {
>> + ret = 0;
>> + } else {
>> + error_setg_errno(errp, errno, "Recv result from afalg-core failed");
>> + }
>> +
>> +out:
>> + qcrypto_afalg_comm_free(afalg);
>> + return ret;
>> +}
>> +
>> +QCryptoHashDriver qcrypto_hash_afalg_driver = {
>> + .hash_bytesv = qcrypto_afalg_hash_bytesv,
>> +};
>> diff --git a/crypto/hash.c b/crypto/hash.c
>> index c43fd87..ba30c9b 100644
>> --- a/crypto/hash.c
>> +++ b/crypto/hash.c
>> @@ -46,6 +46,17 @@ int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg,
>> size_t *resultlen,
>> Error **errp)
>> {
>> +#ifdef CONFIG_AF_ALG
>> + int ret;
>> +
>> + ret = qcrypto_hash_afalg_driver.hash_bytesv(alg, iov, niov,
>> + result, resultlen,
>> + errp);
>> + if (ret == 0) {
>> + return ret;
>> + }
>> +#endif
>> +
>> return qcrypto_hash_lib_driver.hash_bytesv(alg, iov, niov,
>> result, resultlen,
>> errp);
>> diff --git a/crypto/hashpriv.h b/crypto/hashpriv.h
>> index 5e505e0..d23662f 100644
>> --- a/crypto/hashpriv.h
>> +++ b/crypto/hashpriv.h
>> @@ -15,6 +15,8 @@
>> #ifndef QCRYPTO_HASHPRIV_H
>> #define QCRYPTO_HASHPRIV_H
>>
>> +#include "afalgpriv.h"
>> +
>> typedef struct QCryptoHashDriver QCryptoHashDriver;
>>
>> struct QCryptoHashDriver {
>> @@ -28,4 +30,6 @@ struct QCryptoHashDriver {
>>
>> extern QCryptoHashDriver qcrypto_hash_lib_driver;
>>
>> +extern QCryptoHashDriver qcrypto_hash_afalg_driver;
>> +
>> #endif
>> --
>> 1.8.3.1
>>
>
> .
>
--
Regards,
Longpeng(Mike)
next prev parent reply other threads:[~2017-04-22 1:38 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-17 1:33 [Qemu-devel] [PATCH v2 for-2.10 00/18] crypto: add afalg-backend support Longpeng(Mike)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 01/18] crypto: cipher: introduce context free function Longpeng(Mike)
2017-04-21 11:55 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 02/18] crypto: cipher: introduce qcrypto_cipher_ctx_new for gcrypt-backend Longpeng(Mike)
2017-04-21 11:56 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 03/18] crypto: cipher: introduce qcrypto_cipher_ctx_new for nettle-backend Longpeng(Mike)
2017-04-21 11:56 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 04/18] crypto: cipher: introduce qcrypto_cipher_ctx_new for builtin-backend Longpeng(Mike)
2017-04-21 11:56 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 05/18] crypto: cipher: add cipher driver framework Longpeng(Mike)
2017-04-21 12:06 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 06/18] crypto: hash: add hash " Longpeng(Mike)
2017-04-21 12:09 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 07/18] crypto: hmac: move crypto/hmac.h into include/crypto/ Longpeng(Mike)
2017-04-17 13:35 ` Philippe Mathieu-Daudé
2017-04-21 12:11 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 08/18] crypto: hmac: introduce qcrypto_hmac_ctx_new for gcrypt-backend Longpeng(Mike)
2017-04-21 12:15 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 09/18] crypto: hmac: introduce qcrypto_hmac_ctx_new for nettle-backend Longpeng(Mike)
2017-04-21 12:16 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 10/18] crypto: hmac: introduce qcrypto_hmac_ctx_new for glib-backend Longpeng(Mike)
2017-04-21 12:16 ` Gonglei (Arei)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 11/18] crypto: hmac: add hmac driver framework Longpeng(Mike)
2017-04-21 12:25 ` Gonglei (Arei)
2017-04-22 1:26 ` Longpeng (Mike)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 12/18] crypto: introduce some common functions for af_alg backend Longpeng(Mike)
2017-04-21 12:36 ` Gonglei (Arei)
2017-04-22 1:29 ` Longpeng (Mike)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 13/18] crypto: cipher: add afalg-backend cipher support Longpeng(Mike)
2017-04-21 12:59 ` Gonglei (Arei)
2017-04-22 1:36 ` Longpeng (Mike)
2017-04-22 1:51 ` Gonglei (Arei)
2017-04-22 2:04 ` Longpeng (Mike)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 14/18] crypto: hash: add afalg-backend hash support Longpeng(Mike)
2017-04-21 13:01 ` Gonglei (Arei)
2017-04-22 1:37 ` Longpeng (Mike) [this message]
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 15/18] crypto: hmac: add af_alg hmac support Longpeng(Mike)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 16/18] tests: crypto: add cipher speed benchmark support Longpeng(Mike)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 17/18] tests: crypto: add hash " Longpeng(Mike)
2017-04-17 1:33 ` [Qemu-devel] [PATCH v2 for-2.10 18/18] tests: crypto: add hmac " Longpeng(Mike)
2017-04-17 2:12 ` [Qemu-devel] [PATCH v2 for-2.10 00/18] crypto: add afalg-backend support no-reply
2017-04-17 2:31 ` Longpeng (Mike)
2017-04-21 0:56 ` Longpeng (Mike)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=58FAB3CD.6000808@huawei.com \
--to=longpeng2@huawei.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=eblake@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=weidong.huang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.