From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500032436621333.0483557454771; Fri, 14 Jul 2017 04:40:36 -0700 (PDT) Received: from localhost ([::1]:37177 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyxW-0002lh-AP for importer@patchew.org; Fri, 14 Jul 2017 07:40:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35510) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvr-0000uN-So for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvn-0007i6-Th for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:51 -0400 Received: from mail-pf0-x243.google.com ([2607:f8b0:400e:c00::243]:34946) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvn-0007gb-OR for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:47 -0400 Received: by mail-pf0-x243.google.com with SMTP id q85so10728147pfq.2 for ; Fri, 14 Jul 2017 04:38:46 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id d18sm23905167pgn.27.2017.07.14.04.38.44 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kLjfTKXYACheyjfd72zcKFg4tvUGQaic7q3VlkEPP2E=; b=CkRSyi1mtONWJxbsjZJ45RwaEYVaaxnpKAFDYKh0F/UVDJthAardbmYQxJU8CPMkuc SFpz4q2R3DScxuv0TOwNh4FMmkxbjVeO1978TpXRHdpsQMRZJhAiS7j9pn4iVZgMfGeC KeDcql4L0R5p5Ipgz8514Rqu68wLkRfTJpJ5W+yI1Fe5RibFw4bahCDiPmebc1E2PAQW EWzioy2DpgJ1kFnn4+SCdKSNCGV5T2/9WkRCeS1E3Ux0AGPV+UVvAxBNzlgpXiM8nZou kAmw78kQ0zt1cOjiuFQJYA8la4sNbYZG5zFCSbe6xTCwUGZMqjIB283kcc6BpyppMjzm 0nRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kLjfTKXYACheyjfd72zcKFg4tvUGQaic7q3VlkEPP2E=; b=jQ0Mv0/ds8kgwUi5DP0Y4Wo/El3gIaYBFtmdGRIL1nBdz11tL896iVQ94rsSgSBS8X faU9+bIdrRNFJwpIrUDG/LstjR7HCgtA9th9p5aZ9ymhkAEZJTUADIfFbdoFeIr+buNS YN28KOp0jwyKZKqCtfPywFgeILiiIxzl63yPzj5aTtv+TfDxyEOxx6d2QvmU07qtTQNX qJUZq+vnDVgglZ1yvjj8CCGcqQCLa/oU/NhCvFbGCqSC6oqUiglbqBMdqBjQpfKSIzfX BGJHwmRLv2Ox1z89MChyh3KY0e9v30ligLfdtr+2nPBRAANPjygZ9oho6wqtGr8nr2YL XWQg== X-Gm-Message-State: AIVw112vh/gnhTS2Aos/3SG3C5CAOq9Tv+jJLdj+nKHkNeTRaWdfv4jx JN7o/+7LkBwC/2qHHX0= X-Received: by 10.99.115.18 with SMTP id o18mr14203123pgc.103.1500032325310; Fri, 14 Jul 2017 04:38:45 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:23 -0400 Message-Id: <1500032321-13951-2-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::243 Subject: [Qemu-devel] [PATCH v5 01/18] crypto: cipher: introduce context free function X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Refactors the qcrypto_cipher_free(), splits it into two parts. One is gcrypt/nettle__cipher_free_ctx() to free the special context. This makes code more clear, what's more, it would be used by the later patch. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/cipher-gcrypt.c | 31 ++++++++++++++++++------------- crypto/cipher-nettle.c | 18 ++++++++++++++---- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/crypto/cipher-gcrypt.c b/crypto/cipher-gcrypt.c index 6487eca..0ecffa2 100644 --- a/crypto/cipher-gcrypt.c +++ b/crypto/cipher-gcrypt.c @@ -64,6 +64,22 @@ struct QCryptoCipherGcrypt { uint8_t *iv; }; =20 +static void gcrypt_cipher_free_ctx(QCryptoCipherGcrypt *ctx, + QCryptoCipherMode mode) +{ + if (!ctx) { + return; + } + + gcry_cipher_close(ctx->handle); + if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { + gcry_cipher_close(ctx->tweakhandle); + } + g_free(ctx->iv); + g_free(ctx); +} + + QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode, const uint8_t *key, size_t nkey, @@ -228,11 +244,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorit= hm alg, return cipher; =20 error: - gcry_cipher_close(ctx->handle); - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - gcry_cipher_close(ctx->tweakhandle); - } - g_free(ctx); + gcrypt_cipher_free_ctx(ctx, mode); g_free(cipher); return NULL; } @@ -240,17 +252,10 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgori= thm alg, =20 void qcrypto_cipher_free(QCryptoCipher *cipher) { - QCryptoCipherGcrypt *ctx; if (!cipher) { return; } - ctx =3D cipher->opaque; - gcry_cipher_close(ctx->handle); - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - gcry_cipher_close(ctx->tweakhandle); - } - g_free(ctx->iv); - g_free(ctx); + gcrypt_cipher_free_ctx(cipher->opaque, cipher->mode); g_free(cipher); } =20 diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c index dfc9030..e04e3a1 100644 --- a/crypto/cipher-nettle.c +++ b/crypto/cipher-nettle.c @@ -249,6 +249,19 @@ bool qcrypto_cipher_supports(QCryptoCipherAlgorithm al= g, } =20 =20 +static void nettle_cipher_free_ctx(QCryptoCipherNettle *ctx) +{ + if (!ctx) { + return; + } + + g_free(ctx->iv); + g_free(ctx->ctx); + g_free(ctx->ctx_tweak); + g_free(ctx); +} + + QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode, const uint8_t *key, size_t nkey, @@ -440,10 +453,7 @@ void qcrypto_cipher_free(QCryptoCipher *cipher) } =20 ctx =3D cipher->opaque; - g_free(ctx->iv); - g_free(ctx->ctx); - g_free(ctx->ctx_tweak); - g_free(ctx); + nettle_cipher_free_ctx(ctx); g_free(cipher); } =20 --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033235088345.76328298361386; Fri, 14 Jul 2017 04:53:55 -0700 (PDT) Received: from localhost ([::1]:37241 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVzAO-0007mE-NL for importer@patchew.org; Fri, 14 Jul 2017 07:53:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35508) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvr-0000uM-Sa for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvn-0007hx-Kh for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:51 -0400 Received: from mail-pg0-x241.google.com ([2607:f8b0:400e:c05::241]:33840) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvn-0007hL-Cn for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:47 -0400 Received: by mail-pg0-x241.google.com with SMTP id j186so10399248pge.1 for ; Fri, 14 Jul 2017 04:38:47 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id t11sm17574160pfi.66.2017.07.14.04.38.45 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=zA6R4j+s3RaGE6vDHeuhYZ1YZgI7F9bAM2qBExxEYrk=; b=C/XAUWG2JBU9OTYglTP5skrBjh/N4JYxC9wS/O1Ja2HFWND9xmJPFIb/lQIiar9tY/ mGb4l2iz+L85op4Rc6Npct+ivNTcf915/psUEDG0N5mIT3ArnCeHtlButnpRd4Yzdj47 syQ/QlqWYCH0gqO1Mjzu/5bcls+IuhkW3iXv1wCU2bb6WhtNZ8EtdqOGjHaLSNYWfhra D0LInTFVsm+Jao6jtADGyfRPjeMMIm3V8A86sbxfGuBkPxkMFSxf4rPw+aMTsgU6H/WF /j3UMBEIyP+W46emJcluJLUyCcpmQHV0cOVIkY72ohdMZSWhDyD58cRZvvZIbtcBRYD+ J5eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=zA6R4j+s3RaGE6vDHeuhYZ1YZgI7F9bAM2qBExxEYrk=; b=P6aDRYPDDnOKN5BzZuJYoAaMHzWSj1kcwbnbTNKb4HGtYu268jS9+yAyJvDS0dN2n6 wIfk9E/cuRFgDFwoxROWoX7kyTwuI3thdpMOWJ+XXMqr7COXFFKmqjuRK1zUan3HFB83 eo2gKWYBE25fg9WqGfV5RwSR6B5uQw0wBf0TOMlF6Na0+lhf0l6yuvlnRrho3cSBEnew qBz7og+uhUz1cVCX69iCbnc4ZJHbGQ/liWGg3INBYji4Z6RWhIDPgBrd5Jn8XS2nQLwv fuDVqfXD/gabDDoF8yijjqcLnnWXo8sf98ZHN91fyNBKKXQrXJssZFgQR472U6z8jM1R 4vJQ== X-Gm-Message-State: AIVw112eAC/hKl6jrfPbZgh20rFB5fsgYT/5d0IaeEEdl0dm1LsJQAlR axiz/lpU/YL/mQ== X-Received: by 10.99.97.78 with SMTP id v75mr14621101pgb.158.1500032326474; Fri, 14 Jul 2017 04:38:46 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:24 -0400 Message-Id: <1500032321-13951-3-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::241 Subject: [Qemu-devel] [PATCH v5 02/18] crypto: cipher: introduce qcrypto_cipher_ctx_new for gcrypt-backend X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Extracts qcrypto_cipher_ctx_new() from qcrypto_cipher_new() for gcrypt-backend impls. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/cipher-gcrypt.c | 50 +++++++++++++++++++++++++++++++++-------------= ---- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/crypto/cipher-gcrypt.c b/crypto/cipher-gcrypt.c index 0ecffa2..4939386 100644 --- a/crypto/cipher-gcrypt.c +++ b/crypto/cipher-gcrypt.c @@ -80,12 +80,12 @@ static void gcrypt_cipher_free_ctx(QCryptoCipherGcrypt = *ctx, } =20 =20 -QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, - QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoCipherGcrypt *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm = alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, + Error **errp) { - QCryptoCipher *cipher; QCryptoCipherGcrypt *ctx; gcry_error_t err; int gcryalg, gcrymode; @@ -162,10 +162,6 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorit= hm alg, return NULL; } =20 - cipher =3D g_new0(QCryptoCipher, 1); - cipher->alg =3D alg; - cipher->mode =3D mode; - ctx =3D g_new0(QCryptoCipherGcrypt, 1); =20 err =3D gcry_cipher_open(&ctx->handle, gcryalg, gcrymode, 0); @@ -174,7 +170,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorith= m alg, gcry_strerror(err)); goto error; } - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { + if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { err =3D gcry_cipher_open(&ctx->tweakhandle, gcryalg, gcrymode, 0); if (err !=3D 0) { error_setg(errp, "Cannot initialize cipher: %s", @@ -183,7 +179,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorith= m alg, } } =20 - if (cipher->alg =3D=3D QCRYPTO_CIPHER_ALG_DES_RFB) { + if (alg =3D=3D QCRYPTO_CIPHER_ALG_DES_RFB) { /* We're using standard DES cipher from gcrypt, so we need * to munge the key so that the results are the same as the * bizarre RFB variant of DES :-) @@ -193,7 +189,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorith= m alg, g_free(rfbkey); ctx->blocksize =3D 8; } else { - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { + if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { nkey /=3D 2; err =3D gcry_cipher_setkey(ctx->handle, key, nkey); if (err !=3D 0) { @@ -210,7 +206,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorith= m alg, gcry_strerror(err)); goto error; } - switch (cipher->alg) { + switch (alg) { case QCRYPTO_CIPHER_ALG_AES_128: case QCRYPTO_CIPHER_ALG_AES_192: case QCRYPTO_CIPHER_ALG_AES_256: @@ -230,7 +226,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorith= m alg, } } =20 - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { + if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { if (ctx->blocksize !=3D XTS_BLOCK_SIZE) { error_setg(errp, "Cipher block size %zu must equal XTS block size %d= ", @@ -240,12 +236,10 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgori= thm alg, ctx->iv =3D g_new0(uint8_t, ctx->blocksize); } =20 - cipher->opaque =3D ctx; - return cipher; + return ctx; =20 error: gcrypt_cipher_free_ctx(ctx, mode); - g_free(cipher); return NULL; } =20 @@ -385,3 +379,25 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, =20 return 0; } + + +QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoCipher *cipher; + QCryptoCipherGcrypt *ctx; + + ctx =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); + if (!ctx) { + return NULL; + } + + cipher =3D g_new0(QCryptoCipher, 1); + cipher->alg =3D alg; + cipher->mode =3D mode; + cipher->opaque =3D ctx; + + return cipher; +} --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500032546933801.7421335015989; Fri, 14 Jul 2017 04:42:26 -0700 (PDT) Received: from localhost ([::1]:37184 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyzI-0004hi-Mz for importer@patchew.org; Fri, 14 Jul 2017 07:42:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35507) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvr-0000uK-S1 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvo-0007iq-Pz for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:51 -0400 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:33727) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvo-0007iE-Jr for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:48 -0400 Received: by mail-pf0-x242.google.com with SMTP id e199so10743410pfh.0 for ; Fri, 14 Jul 2017 04:38:48 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id 28sm20683787pfq.125.2017.07.14.04.38.46 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4oYrGBqUTGqt7+2pMsePic9NEyXfunjgsJDFVUucTzw=; b=UrCbIr8beT5nTGxW70cpwoXIXN4Ocp9t8/SzBwm+fdzjGxd9KnJFbgO3rD7nz+Q/Y/ J94LOg0HE6E3LiJAaARfTrqITNP8BXvjDX+dDDRpRLpQ6qIpQgoYn6YgiUhYQtoaJxtt +kbJ8dmQ3G5tRUkMRWGE9TJujl8MrbQ6XOQBUwIS4Psbp/rn7df7thtwwPyGF9fbOrCB bRz0AouFRY2HLPwNtqInRcs9PWOPU8fbxeODvciUB5DLlbkklEgWudBWsRO6qtxRZLGU r47Qsi2cOvwqez+y3LZEc+Dz2ObmqQegb3DGYGDRr20T7iYDuVzvvtVdxK9Arv1NMCcS F96Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4oYrGBqUTGqt7+2pMsePic9NEyXfunjgsJDFVUucTzw=; b=HYlFEdmfr2kB0VhyLlWnikRkCK28YihoF5qlAS+zhZt6ancNJeiDwsuzcRYm36M9Jz xv0gkOCL2K8XV1KnYk/y62n9czYewQ1wJtsWtWNmH+x+LmfaqhpArs8lYMV1js8D1w9i J2eKRfBepdE5SM/sxLqPQxBcbB+4fJxqGDBbVdvnerzOobL5e/d8ixhvXvM5xSY5xdjc FaXID5Ic+HZLvNlKUdzoaWUbLZWJrSwfODLq5ITikztnunZFk9SfcLb113wMVLpX9fjx oHJx655TXo/E8amo7/pPojVWXvjrRbZXbQQY2ybasN2gPXTSp5J1BgrquO92dcTndI36 LQ2A== X-Gm-Message-State: AIVw110xiTnAYVY+FFxH5js/xb4obXZLL6X6vSn+j+jsA32tOL+IF884 ay/JToHBfKgoiA== X-Received: by 10.98.42.4 with SMTP id q4mr4868331pfq.143.1500032327707; Fri, 14 Jul 2017 04:38:47 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:25 -0400 Message-Id: <1500032321-13951-4-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [PATCH v5 03/18] crypto: cipher: introduce qcrypto_cipher_ctx_new for nettle-backend X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Extracts qcrypto_cipher_ctx_new() from qcrypto_cipher_new() for nettle-backend impls. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/cipher-nettle.c | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c index e04e3a1..e6d6e6c 100644 --- a/crypto/cipher-nettle.c +++ b/crypto/cipher-nettle.c @@ -262,12 +262,12 @@ static void nettle_cipher_free_ctx(QCryptoCipherNettl= e *ctx) } =20 =20 -QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, - QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoCipherNettle *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm = alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, + Error **errp) { - QCryptoCipher *cipher; QCryptoCipherNettle *ctx; uint8_t *rfbkey; =20 @@ -287,12 +287,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorit= hm alg, return NULL; } =20 - cipher =3D g_new0(QCryptoCipher, 1); - cipher->alg =3D alg; - cipher->mode =3D mode; - ctx =3D g_new0(QCryptoCipherNettle, 1); - cipher->opaque =3D ctx; =20 switch (alg) { case QCRYPTO_CIPHER_ALG_DES_RFB: @@ -436,10 +431,10 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgori= thm alg, =20 ctx->iv =3D g_new0(uint8_t, ctx->blocksize); =20 - return cipher; + return ctx; =20 error: - qcrypto_cipher_free(cipher); + nettle_cipher_free_ctx(ctx); return NULL; } =20 @@ -561,3 +556,25 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, memcpy(ctx->iv, iv, niv); return 0; } + + +QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoCipher *cipher; + QCryptoCipherNettle *ctx; + + ctx =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); + if (!ctx) { + return NULL; + } + + cipher =3D g_new0(QCryptoCipher, 1); + cipher->alg =3D alg; + cipher->mode =3D mode; + cipher->opaque =3D ctx; + + return cipher; +} --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500032699869523.2188678923068; Fri, 14 Jul 2017 04:44:59 -0700 (PDT) Received: from localhost ([::1]:37196 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVz1j-0007OH-Fp for importer@patchew.org; Fri, 14 Jul 2017 07:44:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35512) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvr-0000uP-Th for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvq-0007jV-4j for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:51 -0400 Received: from mail-pf0-x241.google.com ([2607:f8b0:400e:c00::241]:36068) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvp-0007j3-Sm for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:50 -0400 Received: by mail-pf0-x241.google.com with SMTP id z6so10753719pfk.3 for ; Fri, 14 Jul 2017 04:38:49 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id v70sm18357776pfi.110.2017.07.14.04.38.48 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=S1OqGz7HmjPUuyiqmTp94rpmbZ3LXpn0vdrkZUmN40I=; b=Sby8bvUxvxaB2csxbDfge3mLyWOoum78yj135Jk6Q6sRsC7OwF6YfyrKdyGrOkIyN8 9tExqqjBZees2waUYxBchI17z3/aZ+OXsvkGcmDcEwfxkvHgI4lIkdKMbHaxDsUuGDb4 Kzg0NEVhjKd6g8A6ca+ONw/MDlyTWaU59VmG3mq4yVCHD+xF/k1D6Mcgsm3OdrXM3klO tqoX7Fu/3G3pbv9nsavCsLDmoO6OGhj1/lkOFAkGxpWWvl4z6Cd7pwSUq2HmAPI9Eh/K 9H946ohDGdvxPCQ+nPSnKQPlnuVzbvw9ncby3RbjHjQyV5QFxjBQlJbtK2Qi4S/zjPSZ Q6yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=S1OqGz7HmjPUuyiqmTp94rpmbZ3LXpn0vdrkZUmN40I=; b=eXJFlq5I7Uk+FtqHPL452NxNJuQZ7/8A3bOA3tRxKJtwVHtWF6r7jA8XfL7JGGH+WX Hyu67GsU+xhQ5cy5uboKYuOUk/YlXyogF7876W4cwO/NnBygM/ZJzZDcIbtHyrf7iqzt TcP1OLFOfvOj5qwKCGlzqncaK8gsaWy+uXKPpCekneWnxPuRyG1tzxZLuig4RTz+mSCV LtiszJhDrhxgX83WdyX8lLTxN3fyrf785DvhFz544Mq/UQpzGnU29shqAAW0b8iBCayT ns3/l+25FTIulYHWBQpbxUvWVpzJlui1qww2Ff9rulBiYHugf3pceGBrrbpQCcOEmB6H ygow== X-Gm-Message-State: AIVw111IWQCHhSHRAq6GleMfKJd/ohgem09syQYrRbTrnRTWPPGmNuoY 0iyMWWccBrgnSg== X-Received: by 10.84.132.74 with SMTP id 68mr15341147ple.179.1500032328917; Fri, 14 Jul 2017 04:38:48 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:26 -0400 Message-Id: <1500032321-13951-5-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::241 Subject: [Qemu-devel] [PATCH v5 04/18] crypto: cipher: introduce qcrypto_cipher_ctx_new for builtin-backend X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Extracts qcrypto_cipher_ctx_new() from qcrypto_cipher_new() for builtin-backend impls. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/cipher-builtin.c | 101 ++++++++++++++++++++++++++------------------= ---- 1 file changed, 55 insertions(+), 46 deletions(-) diff --git a/crypto/cipher-builtin.c b/crypto/cipher-builtin.c index b4bc2b9..4ecd15e 100644 --- a/crypto/cipher-builtin.c +++ b/crypto/cipher-builtin.c @@ -235,23 +235,24 @@ static int qcrypto_cipher_setiv_aes(QCryptoCipher *ci= pher, =20 =20 =20 -static int qcrypto_cipher_init_aes(QCryptoCipher *cipher, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoCipherBuiltin * +qcrypto_cipher_init_aes(QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) { QCryptoCipherBuiltin *ctxt; =20 - if (cipher->mode !=3D QCRYPTO_CIPHER_MODE_CBC && - cipher->mode !=3D QCRYPTO_CIPHER_MODE_ECB && - cipher->mode !=3D QCRYPTO_CIPHER_MODE_XTS) { + if (mode !=3D QCRYPTO_CIPHER_MODE_CBC && + mode !=3D QCRYPTO_CIPHER_MODE_ECB && + mode !=3D QCRYPTO_CIPHER_MODE_XTS) { error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_lookup[cipher->mode]); - return -1; + QCryptoCipherMode_lookup[mode]); + return NULL; } =20 ctxt =3D g_new0(QCryptoCipherBuiltin, 1); =20 - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { + if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { if (AES_set_encrypt_key(key, nkey * 4, &ctxt->state.aes.key.enc) != =3D 0) { error_setg(errp, "Failed to set encryption key"); goto error; @@ -291,13 +292,11 @@ static int qcrypto_cipher_init_aes(QCryptoCipher *cip= her, ctxt->encrypt =3D qcrypto_cipher_encrypt_aes; ctxt->decrypt =3D qcrypto_cipher_decrypt_aes; =20 - cipher->opaque =3D ctxt; - - return 0; + return ctxt; =20 error: g_free(ctxt); - return -1; + return NULL; } =20 =20 @@ -370,16 +369,17 @@ static int qcrypto_cipher_setiv_des_rfb(QCryptoCipher= *cipher, } =20 =20 -static int qcrypto_cipher_init_des_rfb(QCryptoCipher *cipher, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoCipherBuiltin * +qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) { QCryptoCipherBuiltin *ctxt; =20 - if (cipher->mode !=3D QCRYPTO_CIPHER_MODE_ECB) { + if (mode !=3D QCRYPTO_CIPHER_MODE_ECB) { error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_lookup[cipher->mode]); - return -1; + QCryptoCipherMode_lookup[mode]); + return NULL; } =20 ctxt =3D g_new0(QCryptoCipherBuiltin, 1); @@ -394,9 +394,7 @@ static int qcrypto_cipher_init_des_rfb(QCryptoCipher *c= ipher, ctxt->encrypt =3D qcrypto_cipher_encrypt_des_rfb; ctxt->decrypt =3D qcrypto_cipher_decrypt_des_rfb; =20 - cipher->opaque =3D ctxt; - - return 0; + return ctxt; } =20 =20 @@ -426,12 +424,13 @@ bool qcrypto_cipher_supports(QCryptoCipherAlgorithm a= lg, } =20 =20 -QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, - QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoCipherBuiltin *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm= alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, + Error **errp) { - QCryptoCipher *cipher; + QCryptoCipherBuiltin *ctxt; =20 switch (mode) { case QCRYPTO_CIPHER_MODE_ECB: @@ -444,39 +443,27 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgori= thm alg, return NULL; } =20 - cipher =3D g_new0(QCryptoCipher, 1); - cipher->alg =3D alg; - cipher->mode =3D mode; - if (!qcrypto_cipher_validate_key_length(alg, mode, nkey, errp)) { - goto error; + return NULL; } =20 - switch (cipher->alg) { + switch (alg) { case QCRYPTO_CIPHER_ALG_DES_RFB: - if (qcrypto_cipher_init_des_rfb(cipher, key, nkey, errp) < 0) { - goto error; - } + ctxt =3D qcrypto_cipher_init_des_rfb(mode, key, nkey, errp); break; case QCRYPTO_CIPHER_ALG_AES_128: case QCRYPTO_CIPHER_ALG_AES_192: case QCRYPTO_CIPHER_ALG_AES_256: - if (qcrypto_cipher_init_aes(cipher, key, nkey, errp) < 0) { - goto error; - } + ctxt =3D qcrypto_cipher_init_aes(mode, key, nkey, errp); break; default: error_setg(errp, "Unsupported cipher algorithm %s", - QCryptoCipherAlgorithm_lookup[cipher->alg]); - goto error; + QCryptoCipherAlgorithm_lookup[alg]); + return NULL; } =20 - return cipher; - - error: - g_free(cipher); - return NULL; + return ctxt; } =20 void qcrypto_cipher_free(QCryptoCipher *cipher) @@ -537,3 +524,25 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, =20 return ctxt->setiv(cipher, iv, niv, errp); } + + +QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoCipher *cipher; + QCryptoCipherBuiltin *ctxt; + + ctxt =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); + if (!ctxt) { + return NULL; + } + + cipher =3D g_new0(QCryptoCipher, 1); + cipher->alg =3D alg; + cipher->mode =3D mode; + cipher->opaque =3D ctxt; + + return cipher; +} --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500032696334511.652300381097; Fri, 14 Jul 2017 04:44:56 -0700 (PDT) Received: from localhost ([::1]:37195 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVz1h-0007NG-W9 for importer@patchew.org; Fri, 14 Jul 2017 07:44:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35548) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvt-0000ul-Di for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvr-0007kJ-DR for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:53 -0400 Received: from mail-pg0-x242.google.com ([2607:f8b0:400e:c05::242]:33847) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvr-0007jo-4v for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:51 -0400 Received: by mail-pg0-x242.google.com with SMTP id j186so10399412pge.1 for ; Fri, 14 Jul 2017 04:38:51 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id z6sm20505531pff.46.2017.07.14.04.38.49 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=uxq0ODblstWlOT1yn/6nMk03/1icIp/MOwJpg+iSaT4=; b=Vi2oJF0Oz8ZJavk/7u0C3/Pfc4SeUHBiS9ox96Rhm62bnXvsJUTjMv5FOGXe6DpP+v g8Gpmh08xK14HzXGG2ypSbXW917FcfGfAGk0DILR8s/wBCzXXH24KQVdAJf+OMSohg16 TGt70rQDEeHkmFIDYmdeqV776uQSJi0nQ9wZFnZHGTETOZeAvomS9BGUA3PQmto65lh0 fHA1c2mI89q1HaHYTXZGquX03j+45W8A7/Xauj/Qhm1upjWfR4gVFHf5YW9lvC/x08U8 OPA7ddgtObvz6FHMJr0pA8+lmkOqCGT3XKVpgdCrXFyd+snZtcUDkMHiw+HEviIzA6L4 8BWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=uxq0ODblstWlOT1yn/6nMk03/1icIp/MOwJpg+iSaT4=; b=I5jlWgQjiCknk/c17cDE8fr8MyVc/7N1Vd1VWmV4fRVzTGsGxjcWcWiO/na/NN9l9Q 2Akzs8gFd920uYgoSPML1yoYreOFO3bkygXEDt382KnkRcN4yXnjwGO2jwcXY0uJpROt FdpEB2MSnXD2kxeZTs6UgLURDgUJU/JNT/j9Cvm60IGcvsmtny0SDqjODK1CTOIK5YD8 jib9Dc5ZGNpgsKbsnPKUlDUrFkO6DWAWd13dyxeLvTWiMjbk7Z1btRL02P+s6Fsr+9sa D7oyBq/4mEU/v0qACMjJxKu+/5+8GlxoiX5SUb75n4re90tbb50K0QYANkLUcQnqLirS 7gOQ== X-Gm-Message-State: AIVw110M1x128UVGz4n1RhMkYx3U7v0lWvASkrqZJ5TsgVC4k9NJBNHb W9EAKm1bvjCQTlRizzQ= X-Received: by 10.99.114.73 with SMTP id c9mr14703627pgn.267.1500032330154; Fri, 14 Jul 2017 04:38:50 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:27 -0400 Message-Id: <1500032321-13951-6-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::242 Subject: [Qemu-devel] [PATCH v5 05/18] crypto: cipher: add cipher driver framework X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" 1) makes the public APIs in cipher-nettle/gcrypt/builtin static, and rename them with "nettle/gcrypt/builtin" prefix. 2) introduces cipher framework, including QCryptoCipherDriver and new public APIs. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/cipher-builtin.c | 64 +++++++++++++++++-------------------------- crypto/cipher-gcrypt.c | 72 +++++++++++++++++++++------------------------= ---- crypto/cipher-nettle.c | 71 ++++++++++++++++++++-------------------------= --- crypto/cipher.c | 65 ++++++++++++++++++++++++++++++++++++++++++++ crypto/cipherpriv.h | 40 +++++++++++++++++++++++++++ include/crypto/cipher.h | 1 + 6 files changed, 190 insertions(+), 123 deletions(-) create mode 100644 crypto/cipherpriv.h diff --git a/crypto/cipher-builtin.c b/crypto/cipher-builtin.c index 4ecd15e..16a36d4 100644 --- a/crypto/cipher-builtin.c +++ b/crypto/cipher-builtin.c @@ -22,6 +22,7 @@ #include "crypto/aes.h" #include "crypto/desrfb.h" #include "crypto/xts.h" +#include "cipherpriv.h" =20 typedef struct QCryptoCipherBuiltinAESContext QCryptoCipherBuiltinAESConte= xt; struct QCryptoCipherBuiltinAESContext { @@ -466,25 +467,22 @@ static QCryptoCipherBuiltin *qcrypto_cipher_ctx_new(Q= CryptoCipherAlgorithm alg, return ctxt; } =20 -void qcrypto_cipher_free(QCryptoCipher *cipher) +static void +qcrypto_builtin_cipher_ctx_free(QCryptoCipher *cipher) { QCryptoCipherBuiltin *ctxt; =20 - if (!cipher) { - return; - } - ctxt =3D cipher->opaque; ctxt->free(cipher); - g_free(cipher); } =20 =20 -int qcrypto_cipher_encrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) +static int +qcrypto_builtin_cipher_encrypt(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp) { QCryptoCipherBuiltin *ctxt =3D cipher->opaque; =20 @@ -498,11 +496,12 @@ int qcrypto_cipher_encrypt(QCryptoCipher *cipher, } =20 =20 -int qcrypto_cipher_decrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) +static int +qcrypto_builtin_cipher_decrypt(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp) { QCryptoCipherBuiltin *ctxt =3D cipher->opaque; =20 @@ -516,9 +515,10 @@ int qcrypto_cipher_decrypt(QCryptoCipher *cipher, } =20 =20 -int qcrypto_cipher_setiv(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp) +static int +qcrypto_builtin_cipher_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) { QCryptoCipherBuiltin *ctxt =3D cipher->opaque; =20 @@ -526,23 +526,9 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, } =20 =20 -QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, - QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoCipher *cipher; - QCryptoCipherBuiltin *ctxt; - - ctxt =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); - if (!ctxt) { - return NULL; - } - - cipher =3D g_new0(QCryptoCipher, 1); - cipher->alg =3D alg; - cipher->mode =3D mode; - cipher->opaque =3D ctxt; - - return cipher; -} +static struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { + .cipher_encrypt =3D qcrypto_builtin_cipher_encrypt, + .cipher_decrypt =3D qcrypto_builtin_cipher_decrypt, + .cipher_setiv =3D qcrypto_builtin_cipher_setiv, + .cipher_free =3D qcrypto_builtin_cipher_ctx_free, +}; diff --git a/crypto/cipher-gcrypt.c b/crypto/cipher-gcrypt.c index 4939386..0489147 100644 --- a/crypto/cipher-gcrypt.c +++ b/crypto/cipher-gcrypt.c @@ -20,6 +20,7 @@ =20 #include "qemu/osdep.h" #include "crypto/xts.h" +#include "cipherpriv.h" =20 #include =20 @@ -64,8 +65,9 @@ struct QCryptoCipherGcrypt { uint8_t *iv; }; =20 -static void gcrypt_cipher_free_ctx(QCryptoCipherGcrypt *ctx, - QCryptoCipherMode mode) +static void +qcrypto_gcrypt_cipher_free_ctx(QCryptoCipherGcrypt *ctx, + QCryptoCipherMode mode) { if (!ctx) { return; @@ -239,18 +241,15 @@ static QCryptoCipherGcrypt *qcrypto_cipher_ctx_new(QC= ryptoCipherAlgorithm alg, return ctx; =20 error: - gcrypt_cipher_free_ctx(ctx, mode); + qcrypto_gcrypt_cipher_free_ctx(ctx, mode); return NULL; } =20 =20 -void qcrypto_cipher_free(QCryptoCipher *cipher) +static void +qcrypto_gcrypt_cipher_ctx_free(QCryptoCipher *cipher) { - if (!cipher) { - return; - } - gcrypt_cipher_free_ctx(cipher->opaque, cipher->mode); - g_free(cipher); + qcrypto_gcrypt_cipher_free_ctx(cipher->opaque, cipher->mode); } =20 =20 @@ -274,11 +273,12 @@ static void qcrypto_gcrypt_xts_decrypt(const void *ct= x, g_assert(err =3D=3D 0); } =20 -int qcrypto_cipher_encrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) +static int +qcrypto_gcrypt_cipher_encrypt(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp) { QCryptoCipherGcrypt *ctx =3D cipher->opaque; gcry_error_t err; @@ -309,11 +309,12 @@ int qcrypto_cipher_encrypt(QCryptoCipher *cipher, } =20 =20 -int qcrypto_cipher_decrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) +static int +qcrypto_gcrypt_cipher_decrypt(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp) { QCryptoCipherGcrypt *ctx =3D cipher->opaque; gcry_error_t err; @@ -343,9 +344,10 @@ int qcrypto_cipher_decrypt(QCryptoCipher *cipher, return 0; } =20 -int qcrypto_cipher_setiv(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp) +static int +qcrypto_gcrypt_cipher_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) { QCryptoCipherGcrypt *ctx =3D cipher->opaque; gcry_error_t err; @@ -381,23 +383,9 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, } =20 =20 -QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, - QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoCipher *cipher; - QCryptoCipherGcrypt *ctx; - - ctx =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); - if (!ctx) { - return NULL; - } - - cipher =3D g_new0(QCryptoCipher, 1); - cipher->alg =3D alg; - cipher->mode =3D mode; - cipher->opaque =3D ctx; - - return cipher; -} +static struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { + .cipher_encrypt =3D qcrypto_gcrypt_cipher_encrypt, + .cipher_decrypt =3D qcrypto_gcrypt_cipher_decrypt, + .cipher_setiv =3D qcrypto_gcrypt_cipher_setiv, + .cipher_free =3D qcrypto_gcrypt_cipher_ctx_free, +}; diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c index e6d6e6c..c51f119 100644 --- a/crypto/cipher-nettle.c +++ b/crypto/cipher-nettle.c @@ -20,6 +20,7 @@ =20 #include "qemu/osdep.h" #include "crypto/xts.h" +#include "cipherpriv.h" =20 #include #include @@ -249,7 +250,8 @@ bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, } =20 =20 -static void nettle_cipher_free_ctx(QCryptoCipherNettle *ctx) +static void +qcrypto_nettle_cipher_free_ctx(QCryptoCipherNettle *ctx) { if (!ctx) { return; @@ -434,30 +436,27 @@ static QCryptoCipherNettle *qcrypto_cipher_ctx_new(QC= ryptoCipherAlgorithm alg, return ctx; =20 error: - nettle_cipher_free_ctx(ctx); + qcrypto_nettle_cipher_free_ctx(ctx); return NULL; } =20 =20 -void qcrypto_cipher_free(QCryptoCipher *cipher) +static void +qcrypto_nettle_cipher_ctx_free(QCryptoCipher *cipher) { QCryptoCipherNettle *ctx; =20 - if (!cipher) { - return; - } - ctx =3D cipher->opaque; - nettle_cipher_free_ctx(ctx); - g_free(cipher); + qcrypto_nettle_cipher_free_ctx(ctx); } =20 =20 -int qcrypto_cipher_encrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) +static int +qcrypto_nettle_cipher_encrypt(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp) { QCryptoCipherNettle *ctx =3D cipher->opaque; =20 @@ -499,11 +498,12 @@ int qcrypto_cipher_encrypt(QCryptoCipher *cipher, } =20 =20 -int qcrypto_cipher_decrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) +static int +qcrypto_nettle_cipher_decrypt(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp) { QCryptoCipherNettle *ctx =3D cipher->opaque; =20 @@ -543,9 +543,10 @@ int qcrypto_cipher_decrypt(QCryptoCipher *cipher, return 0; } =20 -int qcrypto_cipher_setiv(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp) +static int +qcrypto_nettle_cipher_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) { QCryptoCipherNettle *ctx =3D cipher->opaque; if (niv !=3D ctx->blocksize) { @@ -558,23 +559,9 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, } =20 =20 -QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, - QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoCipher *cipher; - QCryptoCipherNettle *ctx; - - ctx =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); - if (!ctx) { - return NULL; - } - - cipher =3D g_new0(QCryptoCipher, 1); - cipher->alg =3D alg; - cipher->mode =3D mode; - cipher->opaque =3D ctx; - - return cipher; -} +static struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { + .cipher_encrypt =3D qcrypto_nettle_cipher_encrypt, + .cipher_decrypt =3D qcrypto_nettle_cipher_decrypt, + .cipher_setiv =3D qcrypto_nettle_cipher_setiv, + .cipher_free =3D qcrypto_nettle_cipher_ctx_free, +}; diff --git a/crypto/cipher.c b/crypto/cipher.c index 5a96489..0a3d2e5 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -21,6 +21,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "crypto/cipher.h" +#include "cipherpriv.h" =20 =20 static size_t alg_key_len[QCRYPTO_CIPHER_ALG__MAX] =3D { @@ -155,3 +156,67 @@ qcrypto_cipher_munge_des_rfb_key(const uint8_t *key, #else #include "crypto/cipher-builtin.c" #endif + +QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoCipher *cipher; + void *ctx; + + ctx =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); + if (!ctx) { + return NULL; + } + + cipher =3D g_new0(QCryptoCipher, 1); + cipher->alg =3D alg; + cipher->mode =3D mode; + cipher->opaque =3D ctx; + cipher->driver =3D (void *)&qcrypto_cipher_lib_driver; + + return cipher; +} + + +int qcrypto_cipher_encrypt(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp) +{ + QCryptoCipherDriver *drv =3D cipher->driver; + return drv->cipher_encrypt(cipher, in, out, len, errp); +} + + +int qcrypto_cipher_decrypt(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp) +{ + QCryptoCipherDriver *drv =3D cipher->driver; + return drv->cipher_decrypt(cipher, in, out, len, errp); +} + + +int qcrypto_cipher_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) +{ + QCryptoCipherDriver *drv =3D cipher->driver; + return drv->cipher_setiv(cipher, iv, niv, errp); +} + + +void qcrypto_cipher_free(QCryptoCipher *cipher) +{ + QCryptoCipherDriver *drv; + if (cipher) { + drv =3D cipher->driver; + drv->cipher_free(cipher); + g_free(cipher); + } +} diff --git a/crypto/cipherpriv.h b/crypto/cipherpriv.h new file mode 100644 index 0000000..4af5e85 --- /dev/null +++ b/crypto/cipherpriv.h @@ -0,0 +1,40 @@ +/* + * QEMU Crypto cipher driver supports + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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. + * + */ + +#ifndef QCRYPTO_CIPHERPRIV_H +#define QCRYPTO_CIPHERPRIV_H + +typedef struct QCryptoCipherDriver QCryptoCipherDriver; + +struct QCryptoCipherDriver { + int (*cipher_encrypt)(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp); + + int (*cipher_decrypt)(QCryptoCipher *cipher, + const void *in, + void *out, + size_t len, + Error **errp); + + int (*cipher_setiv)(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp); + + void (*cipher_free)(QCryptoCipher *cipher); +}; + +#endif diff --git a/include/crypto/cipher.h b/include/crypto/cipher.h index bec9f41..984fb82 100644 --- a/include/crypto/cipher.h +++ b/include/crypto/cipher.h @@ -80,6 +80,7 @@ struct QCryptoCipher { QCryptoCipherAlgorithm alg; QCryptoCipherMode mode; void *opaque; + void *driver; }; =20 /** --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500032852133279.64967726022314; Fri, 14 Jul 2017 04:47:32 -0700 (PDT) Received: from localhost ([::1]:37210 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVz4B-0001bD-RX for importer@patchew.org; Fri, 14 Jul 2017 07:47:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35552) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvt-0000um-JX for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvs-0007lE-CG for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:53 -0400 Received: from mail-pg0-x242.google.com ([2607:f8b0:400e:c05::242]:33849) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvs-0007kX-5U for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:52 -0400 Received: by mail-pg0-x242.google.com with SMTP id j186so10399446pge.1 for ; Fri, 14 Jul 2017 04:38:52 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id b85sm18385615pfe.94.2017.07.14.04.38.50 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3T/Ytu7nWKDWHiMOWPNZ4+oh0I1rtTMYFF0p9qzhNmw=; b=Thbkb8xupCurWCDnmopnhDJMby/bzO9iN2qSb7gw5Jpa74DXOv1nL33QlsVobrTgKP Zsk5GTQNpI4+qGHmNgo3VaAeFmImCLLziQB/8LRTfllcFzblDlgi/RNvQPfnVXkpYbom A3PUC+gMntj4hZstf67EItWC33H35l8n3FdRlr+AK8DNpDuiDwafhQzmmKT14hIfag0M SCwoiIBfW9yVezHve6smAAY90vjD9MIIkJKZzQiA9/2dBT61u9swoKKnpCCe66KuYPLX MdmVDCoiPsNvSvXZ9C5gV+uOMHCve3dnMU234VwNwI4stvio2CmWW4E4ovLaPuTQqqgL r7eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3T/Ytu7nWKDWHiMOWPNZ4+oh0I1rtTMYFF0p9qzhNmw=; b=XEBnoaiJCesjhm9xVm4CWwxJ952NiwvSBs77U1Tj+Z48/W5tV1zdTHvz2LqP9RDu6d u/ZhAxx834vnfdHWFFn5VEdP5df1ijko03+tJLecfL3ir/kAONaxMZceCXVHcbYVDH/l bNdd6zLy2AEed62oIHC0gaqeuMo6EwrOM4TX673ZC8OGWnWXXh1gB9F5iYf3jLdRWy6E DY4A5sDvi61AZbqbMpzg3N+cglSNtr1Z9grIrFOphxaM6sHu7nv+jZERbEsxG7lZWRNv nngDJM5sFHpgRwvC2zc6P3HgBQXSJv5qpZMuI7kuWejK7dFM1cuhNiM1i4bC8sqnO4su Go+w== X-Gm-Message-State: AIVw110Kg2SdbaVCSFZ1PMDli6w6O1GyMygvyrOYthypt5BczqSh6SLn DwYyHbss3ijfjZDZ/rc= X-Received: by 10.84.195.131 with SMTP id j3mr15686014pld.147.1500032331350; Fri, 14 Jul 2017 04:38:51 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:28 -0400 Message-Id: <1500032321-13951-7-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::242 Subject: [Qemu-devel] [PATCH v5 06/18] crypto: hash: add hash driver framework X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" 1) makes the public APIs in hash-nettle/gcrypt/glib static, and rename them with "nettle/gcrypt/glib" prefix. 2) introduces hash framework, including QCryptoHashDriver and new public APIs. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/hash-gcrypt.c | 19 +++++++++++++------ crypto/hash-glib.c | 19 +++++++++++++------ crypto/hash-nettle.c | 19 +++++++++++++------ crypto/hash.c | 13 +++++++++++++ crypto/hashpriv.h | 31 +++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 18 deletions(-) create mode 100644 crypto/hashpriv.h diff --git a/crypto/hash-gcrypt.c b/crypto/hash-gcrypt.c index 7690690..972beaa 100644 --- a/crypto/hash-gcrypt.c +++ b/crypto/hash-gcrypt.c @@ -22,6 +22,7 @@ #include #include "qapi/error.h" #include "crypto/hash.h" +#include "hashpriv.h" =20 =20 static int qcrypto_hash_alg_map[QCRYPTO_HASH_ALG__MAX] =3D { @@ -44,12 +45,13 @@ gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg) } =20 =20 -int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg, - const struct iovec *iov, - size_t niov, - uint8_t **result, - size_t *resultlen, - Error **errp) +static int +qcrypto_gcrypt_hash_bytesv(QCryptoHashAlgorithm alg, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) { int i, ret; gcry_md_hd_t md; @@ -107,3 +109,8 @@ int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg, gcry_md_close(md); return -1; } + + +QCryptoHashDriver qcrypto_hash_lib_driver =3D { + .hash_bytesv =3D qcrypto_gcrypt_hash_bytesv, +}; diff --git a/crypto/hash-glib.c b/crypto/hash-glib.c index ec99ac9..a5871cc 100644 --- a/crypto/hash-glib.c +++ b/crypto/hash-glib.c @@ -21,6 +21,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "crypto/hash.h" +#include "hashpriv.h" =20 =20 static int qcrypto_hash_alg_map[QCRYPTO_HASH_ALG__MAX] =3D { @@ -47,12 +48,13 @@ gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg) } =20 =20 -int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg, - const struct iovec *iov, - size_t niov, - uint8_t **result, - size_t *resultlen, - Error **errp) +static int +qcrypto_glib_hash_bytesv(QCryptoHashAlgorithm alg, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) { int i, ret; GChecksum *cs; @@ -95,3 +97,8 @@ int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg, g_checksum_free(cs); return -1; } + + +QCryptoHashDriver qcrypto_hash_lib_driver =3D { + .hash_bytesv =3D qcrypto_glib_hash_bytesv, +}; diff --git a/crypto/hash-nettle.c b/crypto/hash-nettle.c index 6a206dc..96f186f 100644 --- a/crypto/hash-nettle.c +++ b/crypto/hash-nettle.c @@ -21,6 +21,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "crypto/hash.h" +#include "hashpriv.h" #include #include #include @@ -103,12 +104,13 @@ gboolean qcrypto_hash_supports(QCryptoHashAlgorithm a= lg) } =20 =20 -int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg, - const struct iovec *iov, - size_t niov, - uint8_t **result, - size_t *resultlen, - Error **errp) +static int +qcrypto_nettle_hash_bytesv(QCryptoHashAlgorithm alg, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) { int i; union qcrypto_hash_ctx ctx; @@ -152,3 +154,8 @@ int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg, =20 return 0; } + + +QCryptoHashDriver qcrypto_hash_lib_driver =3D { + .hash_bytesv =3D qcrypto_nettle_hash_bytesv, +}; diff --git a/crypto/hash.c b/crypto/hash.c index 0f1ceac..c43fd87 100644 --- a/crypto/hash.c +++ b/crypto/hash.c @@ -21,6 +21,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "crypto/hash.h" +#include "hashpriv.h" =20 static size_t qcrypto_hash_alg_size[QCRYPTO_HASH_ALG__MAX] =3D { [QCRYPTO_HASH_ALG_MD5] =3D 16, @@ -38,6 +39,18 @@ size_t qcrypto_hash_digest_len(QCryptoHashAlgorithm alg) return qcrypto_hash_alg_size[alg]; } =20 +int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) +{ + return qcrypto_hash_lib_driver.hash_bytesv(alg, iov, niov, + result, resultlen, + errp); +} + =20 int qcrypto_hash_bytes(QCryptoHashAlgorithm alg, const char *buf, diff --git a/crypto/hashpriv.h b/crypto/hashpriv.h new file mode 100644 index 0000000..5e505e0 --- /dev/null +++ b/crypto/hashpriv.h @@ -0,0 +1,31 @@ +/* + * QEMU Crypto hash driver supports + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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. + * + */ + +#ifndef QCRYPTO_HASHPRIV_H +#define QCRYPTO_HASHPRIV_H + +typedef struct QCryptoHashDriver QCryptoHashDriver; + +struct QCryptoHashDriver { + int (*hash_bytesv)(QCryptoHashAlgorithm alg, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp); +}; + +extern QCryptoHashDriver qcrypto_hash_lib_driver; + +#endif --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500032587363468.76583701427774; Fri, 14 Jul 2017 04:43:07 -0700 (PDT) Received: from localhost ([::1]:37185 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyzv-0005Dk-P3 for importer@patchew.org; Fri, 14 Jul 2017 07:43:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35589) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvv-0000xT-OW for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvu-0007mX-1z for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:55 -0400 Received: from mail-pg0-x244.google.com ([2607:f8b0:400e:c05::244]:33851) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvt-0007lf-PG for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:53 -0400 Received: by mail-pg0-x244.google.com with SMTP id j186so10399492pge.1 for ; Fri, 14 Jul 2017 04:38:53 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id q88sm21202373pfa.10.2017.07.14.04.38.51 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jUvPIpQ5pnALbxS30vuZbBnrM19Mz0vY6KmXxcZNDsw=; b=OJXRrH6LeILkNNUBRdqKp1gqr2J0g30NvtM6q2jJQEiXnUauMs/EpJ90hJJZUySaem 2ZBmbpWFa0KRWzL51T5MRjr5eM4mN76wGr/nB/Ac+4oKU1ezSpHgKH+S+yzXd1Pypg8U ueaOk0/AejBVPX35duYjVab0/OqslyUg7lLFD7m9+GEpLvzvn/iEafLgMfsq8zwatcVp mE1hrsNuq6jC7HMxzBgNNMIypQoGn7Vd0mdcLW+PCXSFrkGxxzMnq2dZmH1VV4laFTMb PxeP3/Qb/9XEKvcQunWdPzfdLRgVpc87FOMtySd59IKmtbWd68FHtJnLWUq0ljOq6EuD 6/CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jUvPIpQ5pnALbxS30vuZbBnrM19Mz0vY6KmXxcZNDsw=; b=XASwlimV7HpYTAOztsBxRn+ERrU7qxyxYKflOyn2YN0bfyP1HyYbJ7sC/DmDRqgmE6 +EHX0M2nQc5+rI9eZZfY/50bvOhS7CIeSD3pWq1cyB0/T7gXomhKmlAKzAvHM0NjCar3 aP0BGyyYTd6Br1xx80u0vwZnOrh1KPoTF4Wk6dAEZPMamAhsj6KePbY38O39UcjyKtk6 2s36rzb7eoc7EVwzMkfaLGsDRRlKXU3/+o9isNxuw6Z53Wi7yFH7XFlJkLrohkAfyX9y zDsX8LwE8TlWw0tboDv2BnHGXXPdViZI0oTwDUiTFqr+irfp2KgUudIC2+MwtPssy/4/ 86wQ== X-Gm-Message-State: AIVw1102eRZmJaVDNRURxjiuM9tm2xabHOxHEqQ3JLD4yZKOk3flSPR5 gY4C4Hx5/3NSMw== X-Received: by 10.84.213.9 with SMTP id f9mr15336204pli.22.1500032332672; Fri, 14 Jul 2017 04:38:52 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:29 -0400 Message-Id: <1500032321-13951-8-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::244 Subject: [Qemu-devel] [PATCH v5 07/18] crypto: hmac: move crypto/hmac.h into include/crypto/ X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 From: "Longpeng(Mike)" Moves crypto/hmac.h into include/crypto/, likes cipher.h and hash.h Reviewed-by: Daniel P. Berrange Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/hmac.h | 166 ----------------------------------------------= ---- include/crypto/hmac.h | 166 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 166 insertions(+), 166 deletions(-) delete mode 100644 crypto/hmac.h create mode 100644 include/crypto/hmac.h diff --git a/crypto/hmac.h b/crypto/hmac.h deleted file mode 100644 index 0d3acd7..0000000 --- a/crypto/hmac.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - * QEMU Crypto hmac algorithms - * - * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. - * - * 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. - * - */ - -#ifndef QCRYPTO_HMAC_H -#define QCRYPTO_HMAC_H - -#include "qapi-types.h" - -typedef struct QCryptoHmac QCryptoHmac; -struct QCryptoHmac { - QCryptoHashAlgorithm alg; - void *opaque; -}; - -/** - * qcrypto_hmac_supports: - * @alg: the hmac algorithm - * - * Determine if @alg hmac algorithm is supported by - * the current configured build - * - * Returns: - * true if the algorithm is supported, false otherwise - */ -bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg); - -/** - * qcrypto_hmac_new: - * @alg: the hmac algorithm - * @key: the key bytes - * @nkey: the length of @key - * @errp: pointer to a NULL-initialized error object - * - * Creates a new hmac object with the algorithm @alg - * - * The @key parameter provides the bytes representing - * the secret key to use. The @nkey parameter specifies - * the length of @key in bytes - * - * Note: must use qcrypto_hmac_free() to release the - * returned hmac object when no longer required - * - * Returns: - * a new hmac object, or NULL on error - */ -QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp); - -/** - * qcrypto_hmac_free: - * @hmac: the hmac object - * - * Release the memory associated with @hmac that was - * previously allocated by qcrypto_hmac_new() - */ -void qcrypto_hmac_free(QCryptoHmac *hmac); - -/** - * qcrypto_hmac_bytesv: - * @hmac: the hmac object - * @iov: the array of memory regions to hmac - * @niov: the length of @iov - * @result: pointer to hold output hmac - * @resultlen: pointer to hold length of @result - * @errp: pointer to a NULL-initialized error object - * - * Computes the hmac across all the memory regions - * present in @iov. The @result pointer will be - * filled with raw bytes representing the computed - * hmac, which will have length @resultlen. The - * memory pointer in @result must be released - * with a call to g_free() when no longer required. - * - * Returns: - * 0 on success, -1 on error - */ -int qcrypto_hmac_bytesv(QCryptoHmac *hmac, - const struct iovec *iov, - size_t niov, - uint8_t **result, - size_t *resultlen, - Error **errp); - -/** - * qcrypto_hmac_bytes: - * @hmac: the hmac object - * @buf: the memory region to hmac - * @len: the length of @buf - * @result: pointer to hold output hmac - * @resultlen: pointer to hold length of @result - * @errp: pointer to a NULL-initialized error object - * - * Computes the hmac across all the memory region - * @buf of length @len. The @result pointer will be - * filled with raw bytes representing the computed - * hmac, which will have length @resultlen. The - * memory pointer in @result must be released - * with a call to g_free() when no longer required. - * - * Returns: - * 0 on success, -1 on error - */ -int qcrypto_hmac_bytes(QCryptoHmac *hmac, - const char *buf, - size_t len, - uint8_t **result, - size_t *resultlen, - Error **errp); - -/** - * qcrypto_hmac_digestv: - * @hmac: the hmac object - * @iov: the array of memory regions to hmac - * @niov: the length of @iov - * @digest: pointer to hold output hmac - * @errp: pointer to a NULL-initialized error object - * - * Computes the hmac across all the memory regions - * present in @iov. The @digest pointer will be - * filled with the printable hex digest of the computed - * hmac, which will be terminated by '\0'. The - * memory pointer in @digest must be released - * with a call to g_free() when no longer required. - * - * Returns: - * 0 on success, -1 on error - */ -int qcrypto_hmac_digestv(QCryptoHmac *hmac, - const struct iovec *iov, - size_t niov, - char **digest, - Error **errp); - -/** - * qcrypto_hmac_digest: - * @hmac: the hmac object - * @buf: the memory region to hmac - * @len: the length of @buf - * @digest: pointer to hold output hmac - * @errp: pointer to a NULL-initialized error object - * - * Computes the hmac across all the memory region - * @buf of length @len. The @digest pointer will be - * filled with the printable hex digest of the computed - * hmac, which will be terminated by '\0'. The - * memory pointer in @digest must be released - * with a call to g_free() when no longer required. - * - * Returns: 0 on success, -1 on error - */ -int qcrypto_hmac_digest(QCryptoHmac *hmac, - const char *buf, - size_t len, - char **digest, - Error **errp); - -#endif diff --git a/include/crypto/hmac.h b/include/crypto/hmac.h new file mode 100644 index 0000000..0d3acd7 --- /dev/null +++ b/include/crypto/hmac.h @@ -0,0 +1,166 @@ +/* + * QEMU Crypto hmac algorithms + * + * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. + * + * 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. + * + */ + +#ifndef QCRYPTO_HMAC_H +#define QCRYPTO_HMAC_H + +#include "qapi-types.h" + +typedef struct QCryptoHmac QCryptoHmac; +struct QCryptoHmac { + QCryptoHashAlgorithm alg; + void *opaque; +}; + +/** + * qcrypto_hmac_supports: + * @alg: the hmac algorithm + * + * Determine if @alg hmac algorithm is supported by + * the current configured build + * + * Returns: + * true if the algorithm is supported, false otherwise + */ +bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg); + +/** + * qcrypto_hmac_new: + * @alg: the hmac algorithm + * @key: the key bytes + * @nkey: the length of @key + * @errp: pointer to a NULL-initialized error object + * + * Creates a new hmac object with the algorithm @alg + * + * The @key parameter provides the bytes representing + * the secret key to use. The @nkey parameter specifies + * the length of @key in bytes + * + * Note: must use qcrypto_hmac_free() to release the + * returned hmac object when no longer required + * + * Returns: + * a new hmac object, or NULL on error + */ +QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp); + +/** + * qcrypto_hmac_free: + * @hmac: the hmac object + * + * Release the memory associated with @hmac that was + * previously allocated by qcrypto_hmac_new() + */ +void qcrypto_hmac_free(QCryptoHmac *hmac); + +/** + * qcrypto_hmac_bytesv: + * @hmac: the hmac object + * @iov: the array of memory regions to hmac + * @niov: the length of @iov + * @result: pointer to hold output hmac + * @resultlen: pointer to hold length of @result + * @errp: pointer to a NULL-initialized error object + * + * Computes the hmac across all the memory regions + * present in @iov. The @result pointer will be + * filled with raw bytes representing the computed + * hmac, which will have length @resultlen. The + * memory pointer in @result must be released + * with a call to g_free() when no longer required. + * + * Returns: + * 0 on success, -1 on error + */ +int qcrypto_hmac_bytesv(QCryptoHmac *hmac, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp); + +/** + * qcrypto_hmac_bytes: + * @hmac: the hmac object + * @buf: the memory region to hmac + * @len: the length of @buf + * @result: pointer to hold output hmac + * @resultlen: pointer to hold length of @result + * @errp: pointer to a NULL-initialized error object + * + * Computes the hmac across all the memory region + * @buf of length @len. The @result pointer will be + * filled with raw bytes representing the computed + * hmac, which will have length @resultlen. The + * memory pointer in @result must be released + * with a call to g_free() when no longer required. + * + * Returns: + * 0 on success, -1 on error + */ +int qcrypto_hmac_bytes(QCryptoHmac *hmac, + const char *buf, + size_t len, + uint8_t **result, + size_t *resultlen, + Error **errp); + +/** + * qcrypto_hmac_digestv: + * @hmac: the hmac object + * @iov: the array of memory regions to hmac + * @niov: the length of @iov + * @digest: pointer to hold output hmac + * @errp: pointer to a NULL-initialized error object + * + * Computes the hmac across all the memory regions + * present in @iov. The @digest pointer will be + * filled with the printable hex digest of the computed + * hmac, which will be terminated by '\0'. The + * memory pointer in @digest must be released + * with a call to g_free() when no longer required. + * + * Returns: + * 0 on success, -1 on error + */ +int qcrypto_hmac_digestv(QCryptoHmac *hmac, + const struct iovec *iov, + size_t niov, + char **digest, + Error **errp); + +/** + * qcrypto_hmac_digest: + * @hmac: the hmac object + * @buf: the memory region to hmac + * @len: the length of @buf + * @digest: pointer to hold output hmac + * @errp: pointer to a NULL-initialized error object + * + * Computes the hmac across all the memory region + * @buf of length @len. The @digest pointer will be + * filled with the printable hex digest of the computed + * hmac, which will be terminated by '\0'. The + * memory pointer in @digest must be released + * with a call to g_free() when no longer required. + * + * Returns: 0 on success, -1 on error + */ +int qcrypto_hmac_digest(QCryptoHmac *hmac, + const char *buf, + size_t len, + char **digest, + Error **errp); + +#endif --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033340170603.8558763950505; Fri, 14 Jul 2017 04:55:40 -0700 (PDT) Received: from localhost ([::1]:37252 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVzC4-0000kx-Si for importer@patchew.org; Fri, 14 Jul 2017 07:55:36 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35587) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvv-0000xF-G4 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvu-0007n9-OU for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:55 -0400 Received: from mail-pf0-x243.google.com ([2607:f8b0:400e:c00::243]:36077) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvu-0007mm-JW for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:54 -0400 Received: by mail-pf0-x243.google.com with SMTP id z6so10753935pfk.3 for ; Fri, 14 Jul 2017 04:38:54 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id d3sm19176057pfj.47.2017.07.14.04.38.53 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xeeBA9Xf4XM1R9yH0ixx/jOKrcEJCfPziyHxLwOeoiQ=; b=rfWFqFP2p+gtO4icCrew8ytp44SPZcGdIQC581bdYyRA3kqUbOo2OmOC29lsqa8BF/ PmGphv4vt9jnFUnnWTlFKD5HxNQhBs/qP7iMgEYenoDGbkqkx0icA3srCkqj/or6MQ+M +hqGiedguQbVQeCLSMzuVRK/ExSrx8yAiCNM8eSNwkNNWirNvCIAHnXg9SihN5oXJQzj 5+zQtV6Jb5Ev0n9iswBtjMVfPqgq4vPkhaIrWfgXEAlNBjKNawMXxO8nM/VEoHpgH9TV /1Fr0geC43AkSTFiOpxpMzyR532BV0EZt8Pt43pd4r6OCWXflpo3JzXsnQn6JfaItwzs 4SBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xeeBA9Xf4XM1R9yH0ixx/jOKrcEJCfPziyHxLwOeoiQ=; b=tGXdzqfoG1JY/4ka5g8Snrv6F3V6TN1uJTMqOCYf7kgqWsfACObToA+B7Fd1o8lIJM MqZkmLDy51I1JJAxyqxjz/voOpMPG8WuUAZ5ru7PJyNC8oq8o4tD+acLnTzB0nerZxsY zzRHwW7VDnU3wzy0S/sq9gGOhxYLR02cksSBd8Mom3iGC5uI5bUlFqim+welfr68gm6R bGB+XFvGWwEwYPDyCVlTMAYyxF0umtZOl0SdlysJmWt99vOL8Qm2t6mXDQB6YdROeZJ+ GBOrIPPDdoVoq9hk+k3nhzq4zar7hNubXqSQhiQb3nlYVPhTQtiWjve3pauNMgxW4+24 /B1w== X-Gm-Message-State: AIVw111+fcD6GDdQYzV1hbaYPYdezpf5FXXcoycTA2HUT/PckSN7U6ob HIQprYOoSbPhMg== X-Received: by 10.84.143.131 with SMTP id 3mr15121740plz.17.1500032333849; Fri, 14 Jul 2017 04:38:53 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:30 -0400 Message-Id: <1500032321-13951-9-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::243 Subject: [Qemu-devel] [PATCH v5 08/18] crypto: hmac: introduce qcrypto_hmac_ctx_new for gcrypt-backend X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" 1) Fix a handle-leak problem in qcrypto_hmac_new(), didn't free ctx->handle if gcry_mac_setkey fails. 2) Extracts qcrypto_hmac_ctx_new() from qcrypto_hmac_new() for gcrypt-backend impls. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/hmac-gcrypt.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/crypto/hmac-gcrypt.c b/crypto/hmac-gcrypt.c index 21189e6..372ad7f 100644 --- a/crypto/hmac-gcrypt.c +++ b/crypto/hmac-gcrypt.c @@ -42,11 +42,11 @@ bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) return false; } =20 -QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoHmacGcrypt * +qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) { - QCryptoHmac *hmac; QCryptoHmacGcrypt *ctx; gcry_error_t err; =20 @@ -56,9 +56,6 @@ QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, return NULL; } =20 - hmac =3D g_new0(QCryptoHmac, 1); - hmac->alg =3D alg; - ctx =3D g_new0(QCryptoHmacGcrypt, 1); =20 err =3D gcry_mac_open(&ctx->handle, qcrypto_hmac_alg_map[alg], @@ -73,15 +70,14 @@ QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, if (err !=3D 0) { error_setg(errp, "Cannot set key: %s", gcry_strerror(err)); + gcry_mac_close(ctx->handle); goto error; } =20 - hmac->opaque =3D ctx; - return hmac; + return ctx; =20 error: g_free(ctx); - g_free(hmac); return NULL; } =20 @@ -150,3 +146,22 @@ int qcrypto_hmac_bytesv(QCryptoHmac *hmac, =20 return 0; } + +QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoHmac *hmac; + QCryptoHmacGcrypt *ctx; + + ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); + if (!ctx) { + return NULL; + } + + hmac =3D g_new0(QCryptoHmac, 1); + hmac->alg =3D alg; + hmac->opaque =3D ctx; + + return hmac; +} --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033422291185.92862119673975; Fri, 14 Jul 2017 04:57:02 -0700 (PDT) Received: from localhost ([::1]:37260 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVzDO-0001mG-WB for importer@patchew.org; Fri, 14 Jul 2017 07:56:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35601) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyvw-0000zr-Mi for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvv-0007o3-T9 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:56 -0400 Received: from mail-pg0-x244.google.com ([2607:f8b0:400e:c05::244]:33856) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvv-0007nX-NV for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:55 -0400 Received: by mail-pg0-x244.google.com with SMTP id j186so10399579pge.1 for ; Fri, 14 Jul 2017 04:38:55 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id i126sm23974891pgc.6.2017.07.14.04.38.54 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=X/XrCDttJqKRe+u3ulI2zsgMyRFbIRjsUbnMWpnLe4o=; b=PhK9dz4OTSS6bEmxim2OegvieuBDnOGPYpDuc+kKkpG1MUAWeXt8hCmxsLrN+us1nw Fpui8ijYK1YuCVoAP5+3GajvlX+pGY3NCTOedtYTZIbGD5ZK1NMRoqEzjAn8u2fIMNxh zmI7fnGat2QkaFGSDy9TWZgVgqGTHbZKprr0ttClziSLyKTIOHTOLRmUqgY9oXPTWl9G HmQ87WE7p63ezKvxR5sfEYLrKq9huZdZY/CCcdyGmDwtFq5s9oM7Znt/o20PeIkWTI3z JlTGdZYyGQPmwpO86aw6WKgkmw9c4pZeKHulakFEt05MqqquqsBAHoP71+D/OWdPah89 Bj9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=X/XrCDttJqKRe+u3ulI2zsgMyRFbIRjsUbnMWpnLe4o=; b=jWMxGTVFfPEnuo9CYjqkYTSMgmC0K+i+kg4CkWG+gD4iQyaHUdP93HJdRDMgPNOz/i VQdiEDrRYd02qkJ6gybbpqOiBg+t/NZmuep4T79isDNjRieu+7tia6BQYPhkCHMT46zf m2iGjsVHuxMyDDXpTNTpb/an/1rSA8CYfbNx/J+Rg1Bbmc+7mu8ueiS5LbI8a1ixm6uo fgzjw+NYTvuQ+TG+ic+gRvp/olnvbI/2iDs6Kqgu4NmLufqDtG6SS315dRmIxNZ5z6EW TyvsSg82muHXyR6IFZIIc9NHrREoj0TNimVNQkPvIM83AHFGw2rLN8JhQhIv1FGoIDIr dY7A== X-Gm-Message-State: AIVw112N6zOI3ZFxHzO+VuvcqKRRjOO1NBqrxRFKaCVc+cISLt3QNDgH r1566LggA+UVJA== X-Received: by 10.98.84.194 with SMTP id i185mr4715030pfb.69.1500032334950; Fri, 14 Jul 2017 04:38:54 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:31 -0400 Message-Id: <1500032321-13951-10-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::244 Subject: [Qemu-devel] [PATCH v5 09/18] crypto: hmac: introduce qcrypto_hmac_ctx_new for nettle-backend X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Extracts qcrypto_hmac_ctx_new() from qcrypto_hmac_new() for nettle-backend impls. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/hmac-nettle.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/crypto/hmac-nettle.c b/crypto/hmac-nettle.c index 4a9e6b2..000dfd9 100644 --- a/crypto/hmac-nettle.c +++ b/crypto/hmac-nettle.c @@ -97,11 +97,11 @@ bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) return false; } =20 -QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoHmacNettle * +qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) { - QCryptoHmac *hmac; QCryptoHmacNettle *ctx; =20 if (!qcrypto_hmac_supports(alg)) { @@ -110,16 +110,11 @@ QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm al= g, return NULL; } =20 - hmac =3D g_new0(QCryptoHmac, 1); - hmac->alg =3D alg; - ctx =3D g_new0(QCryptoHmacNettle, 1); =20 qcrypto_hmac_alg_map[alg].setkey(&ctx->u, nkey, key); =20 - hmac->opaque =3D ctx; - - return hmac; + return ctx; } =20 void qcrypto_hmac_free(QCryptoHmac *hmac) @@ -173,3 +168,22 @@ int qcrypto_hmac_bytesv(QCryptoHmac *hmac, =20 return 0; } + +QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoHmac *hmac; + QCryptoHmacNettle *ctx; + + ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); + if (!ctx) { + return NULL; + } + + hmac =3D g_new0(QCryptoHmac, 1); + hmac->alg =3D alg; + hmac->opaque =3D ctx; + + return hmac; +} --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500032851601344.43602521047444; Fri, 14 Jul 2017 04:47:31 -0700 (PDT) Received: from localhost ([::1]:37209 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVz4B-0001ab-5V for importer@patchew.org; Fri, 14 Jul 2017 07:47:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35652) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw2-0001Cn-2A for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvx-0007p5-5u for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:02 -0400 Received: from mail-pg0-x243.google.com ([2607:f8b0:400e:c05::243]:33859) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvx-0007oV-01 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:57 -0400 Received: by mail-pg0-x243.google.com with SMTP id j186so10399622pge.1 for ; Fri, 14 Jul 2017 04:38:56 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id f10sm15849972pgu.54.2017.07.14.04.38.55 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tu9HnCtwAaYKj9xNpuvx5voUZ1kSyRjgyPTrhRHlOQI=; b=fPGfqDFzA+UgCZN7l53j9Dj70feuMxDqenXjNFEt85B0azuQfxcQLImhvWoEyMy4XW lEIJcV18QXIKbYU3RP7sTne2WYQ8jfGG3qPopx/lh2FTJCzDAlobenQ9TRZ411FEXnNs jtWWLIKU/U7VIJa94ge9GHXK63Bhdev5bCV9CZk4W4Mp7xfnonyCz+G58NwFcmTZtMco ZpfabJX4i7muJbXjHRfIO+MRXn1qFTt14Aw4f0s1kSlGtu5xVTuuUY1W7SzWLrWzFxJ7 fkdLB+0cHWEee6L3yk6ExREhjrOOvER6eboxLvyH2/gTUnX9LewPxmZSktHjWvz97hXy eWpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=tu9HnCtwAaYKj9xNpuvx5voUZ1kSyRjgyPTrhRHlOQI=; b=A9lDuTIOk9I6zQFNDEHwdUiny/hx9cQTYdain3LCAZ3B3WTMWGKUr8C04MQnTIJbpF RerC8ZglAQOClFHh2QA6ZJL00mqWVVogLbP8ySlDz0tniIM4MOzCnXGufeZ99uz68Y5A C86eXaIbB3Uieiui+wCc/BwWol+1I7aHB4y3sqK+PBGHGPzkXXah9MevYwj4tT+aWuRt uGpR7DzjveoQz8zdlVwh1ANJWo8rCYTsEYHPR6IAaVjfgHgWM0VamPLI0BcqReSVyIla XpcH6JrI3Ygl1KjwjGWZOMlwX7BwUJQ8AnH1raKO+avZ+OE686Lha4BeSjIgTXcDR7wT qQIw== X-Gm-Message-State: AIVw1135ZFKl2P9G7cNVlmfvDABWAdZ9Qa/EN8w68XHPKYxD0EMeicmT OOriFmFaiFzDrg== X-Received: by 10.98.224.206 with SMTP id d75mr4818598pfm.12.1500032336104; Fri, 14 Jul 2017 04:38:56 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:32 -0400 Message-Id: <1500032321-13951-11-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::243 Subject: [Qemu-devel] [PATCH v5 10/18] crypto: hmac: introduce qcrypto_hmac_ctx_new for glib-backend X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Extracts qcrypto_hmac_ctx_new() from qcrypto_hmac_new() for glib-backend impls. Reviewed-by: Daniel P. Berrange Reviewed-by: Gonglei Signed-off-by: Longpeng(Mike) --- crypto/hmac-glib.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/crypto/hmac-glib.c b/crypto/hmac-glib.c index 08a1fdd..f0ccfd6 100644 --- a/crypto/hmac-glib.c +++ b/crypto/hmac-glib.c @@ -49,11 +49,11 @@ bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) return false; } =20 -QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoHmacGlib * +qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) { - QCryptoHmac *hmac; QCryptoHmacGlib *ctx; =20 if (!qcrypto_hmac_supports(alg)) { @@ -62,9 +62,6 @@ QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, return NULL; } =20 - hmac =3D g_new0(QCryptoHmac, 1); - hmac->alg =3D alg; - ctx =3D g_new0(QCryptoHmacGlib, 1); =20 ctx->ghmac =3D g_hmac_new(qcrypto_hmac_alg_map[alg], @@ -74,12 +71,10 @@ QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, goto error; } =20 - hmac->opaque =3D ctx; - return hmac; + return ctx; =20 error: g_free(ctx); - g_free(hmac); return NULL; } =20 @@ -134,6 +129,25 @@ int qcrypto_hmac_bytesv(QCryptoHmac *hmac, return 0; } =20 +QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoHmac *hmac; + QCryptoHmacGlib *ctx; + + ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); + if (!ctx) { + return NULL; + } + + hmac =3D g_new0(QCryptoHmac, 1); + hmac->alg =3D alg; + hmac->opaque =3D ctx; + + return hmac; +} + #else =20 bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033657673723.1100943630818; Fri, 14 Jul 2017 05:00:57 -0700 (PDT) Received: from localhost ([::1]:37287 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVzHC-0005dV-Ao for importer@patchew.org; Fri, 14 Jul 2017 08:00:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35653) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw2-0001Co-2f for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvy-0007q0-H0 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:02 -0400 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]:33745) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvy-0007pV-8V for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:58 -0400 Received: by mail-pf0-x244.google.com with SMTP id e199so10743801pfh.0 for ; Fri, 14 Jul 2017 04:38:58 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id b6sm20605324pgn.67.2017.07.14.04.38.56 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Rey6cZZDn3hXg+RXI4njZUu9V26nOXnx6/qp2hgpwFg=; b=BREj4vZhNuElRw1FBujdLcwJqrjCxOiAoZDfvwv5k2unOwRTf3z1FBF0W5zBGNsLhE vKUd9bLaeDRJWRrEKvL6DX4JGHiiuiBPsbQz1F/XSxxCLI4g9wmxlk6czUkojOQ1We0H V8HzYo8nw4vQPMOQi6ds7feOk4W7xEt4uSu9/AtkEwDyNlLPqTxlUx3nFGAdNHnVe6+X SRS79DOw0D5gY+8RRaYp84a+zZUWb/fRDiOqwTa4ZByhpfoJOBdQSjydR6eFxmZ5KjXS ERXs/aZMR47VcBlApdJU+7wOpCUK6mrn1CcJX4sTRo21RbC3S9YzV5ygqM9FCocxgDRS +fPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Rey6cZZDn3hXg+RXI4njZUu9V26nOXnx6/qp2hgpwFg=; b=uVpARGIEaNb88/5UhLMHPipG3KyqTByFCB+6YrhN+77+hLnV9MretR1zJ269NKk6iW BuyWWLH75hzkJwJ1J8pzY/ZoxRiGR93Kxj5dKjeUdFK6LNklVjyygaXq9WPs7MlwzdGS n9W7o1bFmqq/qZxH/2MxSkTDSfsXR81zfpU3BNiMJPUp/nSe1nf0/9XhUi0XC0QOddGB dflknBGR0Ac11KphFmDozFXfc6sjyFJUMLnwY3O/W+0a1LCe7a9eYuMuX9OC+xOUvR91 rywCXExTHfZ4XRWcmmF7hmIptX4JCPHryTbA4AcyFAonGQVBHZAyVZBR2SsLmWsiCbOw geoA== X-Gm-Message-State: AIVw111idZOVG2VTHTT6b/xkLCtm8uB4UczoEdZUk5h5rrILH8aHPcnI ptLxaU1mGO6X4g== X-Received: by 10.84.143.36 with SMTP id 33mr15205444ply.171.1500032337290; Fri, 14 Jul 2017 04:38:57 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:33 -0400 Message-Id: <1500032321-13951-12-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::244 Subject: [Qemu-devel] [PATCH v5 11/18] crypto: hmac: add hmac driver framework X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" 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. Reviewed-by: Daniel P. Berrange Signed-off-by: Longpeng(Mike) --- 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 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 =20 static int qcrypto_hmac_alg_map[QCRYPTO_HASH_ALG__MAX] =3D { @@ -42,10 +43,9 @@ bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) return false; } =20 -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; } =20 -void qcrypto_hmac_free(QCryptoHmac *hmac) +static void +qcrypto_gcrypt_hmac_ctx_free(QCryptoHmac *hmac) { QCryptoHmacGcrypt *ctx; =20 - if (!hmac) { - return; - } - ctx =3D hmac->opaque; gcry_mac_close(ctx->handle); =20 g_free(ctx); - g_free(hmac); } =20 -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; } =20 -QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoHmac *hmac; - QCryptoHmacGcrypt *ctx; - - ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); - if (!ctx) { - return NULL; - } - - hmac =3D g_new0(QCryptoHmac, 1); - hmac->alg =3D alg; - hmac->opaque =3D ctx; - - return hmac; -} +QCryptoHmacDriver qcrypto_hmac_lib_driver =3D { + .hmac_bytesv =3D qcrypto_gcrypt_hmac_bytesv, + .hmac_free =3D qcrypto_gcrypt_hmac_ctx_free, +}; diff --git a/crypto/hmac-glib.c b/crypto/hmac-glib.c index f0ccfd6..8cf6b22 100644 --- a/crypto/hmac-glib.c +++ b/crypto/hmac-glib.c @@ -15,6 +15,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "crypto/hmac.h" +#include "hmacpriv.h" =20 /* Support for HMAC Algos has been added in GLib 2.30 */ #if GLIB_CHECK_VERSION(2, 30, 0) @@ -49,10 +50,9 @@ bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) return false; } =20 -static QCryptoHmacGlib * -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) { QCryptoHmacGlib *ctx; =20 @@ -78,27 +78,24 @@ error: return NULL; } =20 -void qcrypto_hmac_free(QCryptoHmac *hmac) +static void +qcrypto_glib_hmac_ctx_free(QCryptoHmac *hmac) { QCryptoHmacGlib *ctx; =20 - if (!hmac) { - return; - } - ctx =3D hmac->opaque; g_hmac_unref(ctx->ghmac); =20 g_free(ctx); - g_free(hmac); } =20 -int qcrypto_hmac_bytesv(QCryptoHmac *hmac, - const struct iovec *iov, - size_t niov, - uint8_t **result, - size_t *resultlen, - Error **errp) +static int +qcrypto_glib_hmac_bytesv(QCryptoHmac *hmac, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) { QCryptoHmacGlib *ctx; int i, ret; @@ -129,25 +126,6 @@ int qcrypto_hmac_bytesv(QCryptoHmac *hmac, return 0; } =20 -QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoHmac *hmac; - QCryptoHmacGlib *ctx; - - ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); - if (!ctx) { - return NULL; - } - - hmac =3D g_new0(QCryptoHmac, 1); - hmac->alg =3D alg; - hmac->opaque =3D ctx; - - return hmac; -} - #else =20 bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) @@ -155,26 +133,33 @@ bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) return false; } =20 -QCryptoHmac *qcrypto_hmac_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) { return NULL; } =20 -void qcrypto_hmac_free(QCryptoHmac *hmac) +static void +qcrypto_glib_hmac_ctx_free(QCryptoHmac *hmac) { return; } =20 -int qcrypto_hmac_bytesv(QCryptoHmac *hmac, - const struct iovec *iov, - size_t niov, - uint8_t **result, - size_t *resultlen, - Error **errp) +static int +qcrypto_glib_hmac_bytesv(QCryptoHmac *hmac, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) { return -1; } =20 #endif + +QCryptoHmacDriver qcrypto_hmac_lib_driver =3D { + .hmac_bytesv =3D qcrypto_glib_hmac_bytesv, + .hmac_free =3D qcrypto_glib_hmac_ctx_free, +}; diff --git a/crypto/hmac-nettle.c b/crypto/hmac-nettle.c index 000dfd9..1d5a915 100644 --- a/crypto/hmac-nettle.c +++ b/crypto/hmac-nettle.c @@ -15,6 +15,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "crypto/hmac.h" +#include "hmacpriv.h" #include =20 typedef void (*qcrypto_nettle_hmac_setkey)(void *ctx, @@ -97,10 +98,9 @@ bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg) return false; } =20 -static QCryptoHmacNettle * -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) { QCryptoHmacNettle *ctx; =20 @@ -117,26 +117,22 @@ qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg, return ctx; } =20 -void qcrypto_hmac_free(QCryptoHmac *hmac) +static void +qcrypto_nettle_hmac_ctx_free(QCryptoHmac *hmac) { QCryptoHmacNettle *ctx; =20 - if (!hmac) { - return; - } - ctx =3D hmac->opaque; - g_free(ctx); - g_free(hmac); } =20 -int qcrypto_hmac_bytesv(QCryptoHmac *hmac, - const struct iovec *iov, - size_t niov, - uint8_t **result, - size_t *resultlen, - Error **errp) +static int +qcrypto_nettle_hmac_bytesv(QCryptoHmac *hmac, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) { QCryptoHmacNettle *ctx; int i; @@ -169,21 +165,7 @@ int qcrypto_hmac_bytesv(QCryptoHmac *hmac, return 0; } =20 -QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoHmac *hmac; - QCryptoHmacNettle *ctx; - - ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); - if (!ctx) { - return NULL; - } - - hmac =3D g_new0(QCryptoHmac, 1); - hmac->alg =3D alg; - hmac->opaque =3D ctx; - - return hmac; -} +QCryptoHmacDriver qcrypto_hmac_lib_driver =3D { + .hmac_bytesv =3D qcrypto_nettle_hmac_bytesv, + .hmac_free =3D qcrypto_nettle_hmac_ctx_free, +}; diff --git a/crypto/hmac.c b/crypto/hmac.c index 5750405..a4690e3 100644 --- a/crypto/hmac.c +++ b/crypto/hmac.c @@ -12,9 +12,22 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "crypto/hmac.h" +#include "hmacpriv.h" =20 static const char hex[] =3D "0123456789abcdef"; =20 +int qcrypto_hmac_bytesv(QCryptoHmac *hmac, + const struct iovec *iov, + size_t niov, + uint8_t **result, + size_t *resultlen, + Error **errp) +{ + QCryptoHmacDriver *drv =3D hmac->driver; + + return drv->hmac_bytesv(hmac, iov, niov, result, resultlen, errp); +} + int qcrypto_hmac_bytes(QCryptoHmac *hmac, const char *buf, size_t len, @@ -70,3 +83,34 @@ int qcrypto_hmac_digest(QCryptoHmac *hmac, =20 return qcrypto_hmac_digestv(hmac, &iov, 1, digest, errp); } + +QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoHmac *hmac; + void *ctx; + + ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); + if (!ctx) { + return NULL; + } + + hmac =3D g_new0(QCryptoHmac, 1); + hmac->alg =3D alg; + hmac->opaque =3D ctx; + hmac->driver =3D (void *)&qcrypto_hmac_lib_driver; + + return hmac; +} + +void qcrypto_hmac_free(QCryptoHmac *hmac) +{ + QCryptoHmacDriver *drv; + + if (hmac) { + drv =3D hmac->driver; + drv->hmac_free(hmac); + g_free(hmac); + } +} diff --git a/crypto/hmacpriv.h b/crypto/hmacpriv.h new file mode 100644 index 0000000..2be389a --- /dev/null +++ b/crypto/hmacpriv.h @@ -0,0 +1,36 @@ +/* + * QEMU Crypto hmac driver supports + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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. + * + */ + +#ifndef QCRYPTO_HMACPRIV_H +#define QCRYPTO_HMACPRIV_H + +typedef struct QCryptoHmacDriver QCryptoHmacDriver; + +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); +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; }; =20 /** --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033508633665.6751176097454; Fri, 14 Jul 2017 04:58:28 -0700 (PDT) Received: from localhost ([::1]:37267 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVzEn-0002Zh-2q for importer@patchew.org; Fri, 14 Jul 2017 07:58:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35655) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw2-0001Cs-2l for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyvz-0007qy-K0 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:02 -0400 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:33890) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyvz-0007qG-Be for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:38:59 -0400 Received: by mail-pf0-x242.google.com with SMTP id c24so10758682pfe.1 for ; Fri, 14 Jul 2017 04:38:59 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id p15sm19953445pfi.99.2017.07.14.04.38.57 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=yCFe6g01TOWzV1lZF4AtYVKWnQxdqeL4OlbXD7WzSH4=; b=dFDCPlnCrUcwJqb24R+LebXqbGRTCKSbSKmSoQsGT0qnL04hWX3DCMHF9HWPxr0smo 2BlT+rw0VtaUdJhEoGU/js10Ct5XumqmCrl7PK/2FmIHpDz2TUqFSXorqry8uTvlwDmK V1eLd0wi9ToN1i4lrEJlyl8LWPeMmZWMG0nsD6h5cF3b163U94nwrr5W+QmdkWPNF0uP Ec+ZRuDXqESdAxJjFZ6ca5iOrtU9UBnlQmqbEBwURp5cR+FMz30tfvHUGGbrBavPkp2Y iGkBwM9THKErM4gd6F9NI9fmCjInb4HnlyoCd8WLlN1LzIJN2Hr3ceQ+xbQhi1ZdGK+T S5Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=yCFe6g01TOWzV1lZF4AtYVKWnQxdqeL4OlbXD7WzSH4=; b=Blpf0IdSWH4TGzZ3N2ahBlObALl6K2VPTrldFxJeoJ4zN9u7jouIv0y+PvfqlET9fB dQkZE8beNzghJMF01OiiUa72z06t2APNRsmzcCWQcWiLmdswYXXRTuw0MQBOlOas0a8f UY/P/Jy7jITxdxy2qHLC6ZTA0oSOl9k4tUqC/F+GS5sa7EUFMONkWnbS8yBGsSkqdGRB ltyz4+peipJhkTFNTFAkQeeTTHRjE4OyKTt6a8uiuDZNUPcUmAylpB+Fhgs7tqPhGclY RwJS/uQ9HhdEg5eGp7+QjyGYMG7XcquvHTZCIjkfT5HIevmgS+iZt5IV+NLQ/wLllwIa S4Mw== X-Gm-Message-State: AIVw113HP8ZOWCAKxv0d2xO5IovNRuiw8zx/I5Fvo3u0WsHgymYi5Lto bVfTuv5BzapFbg== X-Received: by 10.84.195.3 with SMTP id i3mr15219450pld.65.1500032338476; Fri, 14 Jul 2017 04:38:58 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:34 -0400 Message-Id: <1500032321-13951-13-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [PATCH v5 12/18] crypto: introduce some common functions for af_alg backend X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" The AF_ALG socket family is the userspace interface for linux crypto API, this patch adds af_alg family support and some common functions for af_alg backend. It'll be used by afalg-backend crypto latter. Signed-off-by: Longpeng(Mike) --- configure | 22 ++++++++++ crypto/Makefile.objs | 1 + crypto/afalg.c | 116 +++++++++++++++++++++++++++++++++++++++++++++++= ++++ crypto/afalgpriv.h | 54 ++++++++++++++++++++++++ 4 files changed, 193 insertions(+) create mode 100644 crypto/afalg.c create mode 100644 crypto/afalgpriv.h diff --git a/configure b/configure index 902653a..7ddc531 100755 --- a/configure +++ b/configure @@ -4834,6 +4834,24 @@ if compile_prog "" "" ; then have_af_vsock=3Dyes fi =20 +########################################## +# check for usable AF_ALG environment +hava_af_alg=3Dno +cat > $TMPC << EOF +#include +#include +#include +#include +int main(void) { + int sock; + sock =3D socket(AF_ALG, SOCK_SEQPACKET, 0); + return sock; +} +EOF +if compile_prog "" "" ; then + have_af_alg=3Dyes +fi + ################################################# # Sparc implicitly links with --relax, which is # incompatible with -r, so --no-relax should be @@ -5951,6 +5969,10 @@ if test "$have_af_vsock" =3D "yes" ; then echo "CONFIG_AF_VSOCK=3Dy" >> $config_host_mak fi =20 +if test "$have_af_alg" =3D "yes" ; then + echo "CONFIG_AF_ALG=3Dy" >> $config_host_mak +fi + if test "$have_sysmacros" =3D "yes" ; then echo "CONFIG_SYSMACROS=3Dy" >> $config_host_mak fi diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs index 1f749f2..2be5a3a 100644 --- a/crypto/Makefile.objs +++ b/crypto/Makefile.objs @@ -10,6 +10,7 @@ crypto-obj-$(if $(CONFIG_NETTLE),n,$(if $(CONFIG_GCRYPT_H= MAC),n,y)) +=3D hmac-glib crypto-obj-y +=3D aes.o crypto-obj-y +=3D desrfb.o crypto-obj-y +=3D cipher.o +crypto-obj-$(CONFIG_AF_ALG) +=3D afalg.o crypto-obj-y +=3D tlscreds.o crypto-obj-y +=3D tlscredsanon.o crypto-obj-y +=3D tlscredsx509.o diff --git a/crypto/afalg.c b/crypto/afalg.c new file mode 100644 index 0000000..10046bb --- /dev/null +++ b/crypto/afalg.c @@ -0,0 +1,116 @@ +/* + * QEMU Crypto af_alg support + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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/cutils.h" +#include "qemu/sockets.h" +#include "qapi/error.h" +#include "afalgpriv.h" + +static bool +qcrypto_afalg_build_saddr(const char *type, const char *name, + struct sockaddr_alg *salg, Error **errp) +{ + salg->salg_family =3D AF_ALG; + + if (strnlen(type, SALG_TYPE_LEN_MAX) >=3D SALG_TYPE_LEN_MAX) { + error_setg(errp, "Afalg type(%s) is larger than %d bytes", + type, SALG_TYPE_LEN_MAX); + return false; + } + + if (strnlen(name, SALG_NAME_LEN_MAX) >=3D SALG_NAME_LEN_MAX) { + error_setg(errp, "Afalg name(%s) is larger than %d bytes", + name, SALG_NAME_LEN_MAX); + return false; + } + + pstrcpy((char *)salg->salg_type, SALG_TYPE_LEN_MAX, type); + pstrcpy((char *)salg->salg_name, SALG_NAME_LEN_MAX, name); + + return true; +} + +static int +qcrypto_afalg_socket_bind(const char *type, const char *name, + Error **errp) +{ + int sbind; + struct sockaddr_alg salg =3D {0}; + + if (!qcrypto_afalg_build_saddr(type, name, &salg, errp)) { + return -1; + } + + sbind =3D qemu_socket(AF_ALG, SOCK_SEQPACKET, 0); + if (sbind < 0) { + error_setg_errno(errp, errno, "Failed to create socket"); + return -1; + } + + if (bind(sbind, (const struct sockaddr *)&salg, sizeof(salg)) !=3D 0) { + error_setg_errno(errp, errno, "Failed to bind socket"); + closesocket(sbind); + return -1; + } + + return sbind; +} + +QCryptoAFAlg * +qcrypto_afalg_comm_alloc(const char *type, const char *name, + Error **errp) +{ + QCryptoAFAlg *afalg; + + afalg =3D g_new0(QCryptoAFAlg, 1); + /* initilize crypto API socket */ + afalg->opfd =3D -1; + afalg->tfmfd =3D qcrypto_afalg_socket_bind(type, name, errp); + if (afalg->tfmfd =3D=3D -1) { + goto error; + } + + afalg->opfd =3D qemu_accept(afalg->tfmfd, NULL, 0); + if (afalg->opfd =3D=3D -1) { + error_setg_errno(errp, errno, "Failed to accept socket"); + goto error; + } + + return afalg; + +error: + qcrypto_afalg_comm_free(afalg); + return NULL; +} + +void qcrypto_afalg_comm_free(QCryptoAFAlg *afalg) +{ + if (!afalg) { + return; + } + + if (afalg->msg) { + g_free(afalg->msg->msg_control); + g_free(afalg->msg); + } + + if (afalg->tfmfd !=3D -1) { + closesocket(afalg->tfmfd); + } + + if (afalg->opfd !=3D -1) { + closesocket(afalg->opfd); + } + + g_free(afalg); +} diff --git a/crypto/afalgpriv.h b/crypto/afalgpriv.h new file mode 100644 index 0000000..76118cf --- /dev/null +++ b/crypto/afalgpriv.h @@ -0,0 +1,54 @@ +/* + * QEMU Crypto af_alg support + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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. + */ + +#ifndef QCRYPTO_AFALGPRIV_H +#define QCRYPTO_AFALGPRIV_H + +#include + +#define SALG_TYPE_LEN_MAX 14 +#define SALG_NAME_LEN_MAX 64 + +typedef struct QCryptoAFAlg QCryptoAFAlg; + +struct QCryptoAFAlg { + int tfmfd; + int opfd; + struct msghdr *msg; + struct cmsghdr *cmsg; +}; + +/** + * qcrypto_afalg_comm_alloc: + * @type: the type of crypto operation + * @name: the name of crypto operation + * + * Allocate a QCryptoAFAlg object and bind itself to + * a AF_ALG socket. + * + * Returns: + * a new QCryptoAFAlg object, or NULL in error. + */ +QCryptoAFAlg * +qcrypto_afalg_comm_alloc(const char *type, const char *name, + Error **errp); + +/** + * afalg_comm_free: + * @afalg: the QCryptoAFAlg object + * + * Free the @afalg. + */ +void qcrypto_afalg_comm_free(QCryptoAFAlg *afalg); + +#endif --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500032728401170.89556004185317; Fri, 14 Jul 2017 04:45:28 -0700 (PDT) Received: from localhost ([::1]:37198 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVz2E-0008KA-Sm for importer@patchew.org; Fri, 14 Jul 2017 07:45:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35668) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw2-0001Ef-JH for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyw0-0007ru-Rp for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:02 -0400 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]:34972) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyw0-0007rQ-JW for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:00 -0400 Received: by mail-pf0-x244.google.com with SMTP id q85so10728750pfq.2 for ; Fri, 14 Jul 2017 04:39:00 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id d3sm19177130pfj.47.2017.07.14.04.38.58 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:38:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=PYarjqA3DqM9B1mA4kcHxOSbxTZdqKzaJqnS1ISWQk0=; b=lAatt5WPd7+u4k8vTykvzn0zdWfqUj2bweLK6lPbkheXZNAWl/W9gTjayA0fYQy3Cf CevQff/T5e0fixB3hSFGwYa7SN1xZyocRS394uodOMzNJCBOv3oRf5Gtnjbljrc35th0 PgFy8ob5vNxTj1QQXt271xICN54aqtb+PNdmbXShz9KyRsX6stogxDPAGQpNyq6/s2Vv TASk+TgVKuj7xYxCkWYrdxZbAXkrEiS3AWFykyMxfqNq8BfvgcktP9SrFZHih5/ZPl30 K/vdBeEHZ2knruKdQOxY5ESDPtG1tLHw8svhex+j2Wiu4eA+iP6UvOxzD1D1x94RfHLC t2bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=PYarjqA3DqM9B1mA4kcHxOSbxTZdqKzaJqnS1ISWQk0=; b=XFlQzonahQwRuIZptnhUwx6k+6T6+XfDd+7m8WiBmzIRLUUCfSn1P2tjJh+SO0n+JZ jnFrefzUTBk0dVEOZ1vTUAPT0QzuvNCiTMR77+UhlggVzGRePvsp2IAts7oYwhp6IAZL LklONELwJo9hY3Xjgbf9KFAePFgz/3x+LU8UWYvrTd4DYp/NpI0x2A802H1Srd3PX+8v h+DzPmFtNmDrc/fre6/IccOoX5hHAWeB8qp72NnSH35r+cA3lPUt5jRz/EFLcBiKw1JY 1IzxOftiKT5IOylSaO0v9qczUoFG1SKeNPR0GgcHuPlxz9FWFPYENsx1BCCRBA6EbYP/ L9Dg== X-Gm-Message-State: AIVw111Xle+VWGsCNNUaxx1C6E1PMEhKMOMdgDV2NR3Dw0ei5IK7S+vP e2sGJjT0L3tlkOO3YD0= X-Received: by 10.84.217.142 with SMTP id p14mr3404680pli.202.1500032339677; Fri, 14 Jul 2017 04:38:59 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:35 -0400 Message-Id: <1500032321-13951-14-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::244 Subject: [Qemu-devel] [PATCH v5 13/18] crypto: cipher: add afalg-backend cipher support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Adds afalg-backend cipher support: introduces some private APIs firstly, and then intergrates them into qcrypto_cipher_afalg_driver. Signed-off-by: Longpeng(Mike) --- crypto/Makefile.objs | 1 + crypto/afalgpriv.h | 9 ++ crypto/cipher-afalg.c | 226 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ crypto/cipher.c | 23 ++++- crypto/cipherpriv.h | 16 ++++ 5 files changed, 271 insertions(+), 4 deletions(-) create mode 100644 crypto/cipher-afalg.c diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs index 2be5a3a..d2e8fa8 100644 --- a/crypto/Makefile.objs +++ b/crypto/Makefile.objs @@ -11,6 +11,7 @@ crypto-obj-y +=3D aes.o crypto-obj-y +=3D desrfb.o crypto-obj-y +=3D cipher.o crypto-obj-$(CONFIG_AF_ALG) +=3D afalg.o +crypto-obj-$(CONFIG_AF_ALG) +=3D cipher-afalg.o crypto-obj-y +=3D tlscreds.o crypto-obj-y +=3D tlscredsanon.o crypto-obj-y +=3D tlscredsx509.o diff --git a/crypto/afalgpriv.h b/crypto/afalgpriv.h index 76118cf..d0941d4 100644 --- a/crypto/afalgpriv.h +++ b/crypto/afalgpriv.h @@ -19,6 +19,15 @@ #define SALG_TYPE_LEN_MAX 14 #define SALG_NAME_LEN_MAX 64 =20 +#ifndef SOL_ALG +#define SOL_ALG 279 +#endif + +#define AFALG_TYPE_CIPHER "skcipher" + +#define ALG_OPTYPE_LEN 4 +#define ALG_MSGIV_LEN(len) (sizeof(struct af_alg_iv) + (len)) + typedef struct QCryptoAFAlg QCryptoAFAlg; =20 struct QCryptoAFAlg { diff --git a/crypto/cipher-afalg.c b/crypto/cipher-afalg.c new file mode 100644 index 0000000..01343b2 --- /dev/null +++ b/crypto/cipher-afalg.c @@ -0,0 +1,226 @@ +/* + * QEMU Crypto af_alg-backend cipher support + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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/sockets.h" +#include "qemu-common.h" +#include "qapi/error.h" +#include "crypto/cipher.h" +#include "cipherpriv.h" + + +static char * +qcrypto_afalg_cipher_format_name(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + Error **errp) +{ + char *name; + const char *alg_name; + const char *mode_name; + + switch (alg) { + case QCRYPTO_CIPHER_ALG_AES_128: + case QCRYPTO_CIPHER_ALG_AES_192: + case QCRYPTO_CIPHER_ALG_AES_256: + alg_name =3D "aes"; + break; + case QCRYPTO_CIPHER_ALG_CAST5_128: + alg_name =3D "cast5"; + break; + case QCRYPTO_CIPHER_ALG_SERPENT_128: + case QCRYPTO_CIPHER_ALG_SERPENT_192: + case QCRYPTO_CIPHER_ALG_SERPENT_256: + alg_name =3D "serpent"; + break; + case QCRYPTO_CIPHER_ALG_TWOFISH_128: + case QCRYPTO_CIPHER_ALG_TWOFISH_192: + case QCRYPTO_CIPHER_ALG_TWOFISH_256: + alg_name =3D "twofish"; + break; + + default: + error_setg(errp, "Unsupported cipher algorithm %d", alg); + return NULL; + } + + mode_name =3D QCryptoCipherMode_lookup[mode]; + name =3D g_strdup_printf("%s(%s)", mode_name, alg_name); + + return name; +} + +QCryptoAFAlg * +qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, Error **errp) +{ + QCryptoAFAlg *afalg; + size_t expect_niv; + char *name; + + name =3D qcrypto_afalg_cipher_format_name(alg, mode, errp); + if (!name) { + return NULL; + } + + afalg =3D qcrypto_afalg_comm_alloc(AFALG_TYPE_CIPHER, name, errp); + if (!afalg) { + g_free(name); + return NULL; + } + + g_free(name); + + /* setkey */ + if (qemu_setsockopt(afalg->tfmfd, SOL_ALG, ALG_SET_KEY, key, + nkey) !=3D 0) { + error_setg_errno(errp, errno, "Set key failed"); + qcrypto_afalg_comm_free(afalg); + return NULL; + } + + /* prepare msg header */ + afalg->msg =3D g_new0(struct msghdr, 1); + afalg->msg->msg_controllen +=3D CMSG_SPACE(ALG_OPTYPE_LEN); + expect_niv =3D qcrypto_cipher_get_iv_len(alg, mode); + if (expect_niv) { + afalg->msg->msg_controllen +=3D CMSG_SPACE(ALG_MSGIV_LEN(expect_ni= v)); + } + afalg->msg->msg_control =3D g_new0(uint8_t, afalg->msg->msg_controllen= ); + + /* We use 1st msghdr for crypto-info and 2nd msghdr for IV-info */ + afalg->cmsg =3D CMSG_FIRSTHDR(afalg->msg); + afalg->cmsg->cmsg_type =3D ALG_SET_OP; + afalg->cmsg->cmsg_len =3D CMSG_SPACE(ALG_OPTYPE_LEN); + if (expect_niv) { + afalg->cmsg =3D CMSG_NXTHDR(afalg->msg, afalg->cmsg); + afalg->cmsg->cmsg_type =3D ALG_SET_IV; + afalg->cmsg->cmsg_len =3D CMSG_SPACE(ALG_MSGIV_LEN(expect_niv)); + } + afalg->cmsg =3D CMSG_FIRSTHDR(afalg->msg); + + return afalg; +} + +static int +qcrypto_afalg_cipher_setiv(QCryptoCipher *cipher, + const uint8_t *iv, + size_t niv, Error **errp) +{ + struct af_alg_iv *alg_iv; + size_t expect_niv; + QCryptoAFAlg *afalg =3D cipher->opaque; + + expect_niv =3D qcrypto_cipher_get_iv_len(cipher->alg, cipher->mode); + if (niv !=3D expect_niv) { + error_setg(errp, "Set IV len(%zu) not match expected(%zu)", + niv, expect_niv); + return -1; + } + + /* move ->cmsg to next msghdr, for IV-info */ + afalg->cmsg =3D CMSG_NXTHDR(afalg->msg, afalg->cmsg); + + /* build setiv msg */ + afalg->cmsg->cmsg_level =3D SOL_ALG; + alg_iv =3D (struct af_alg_iv *)CMSG_DATA(afalg->cmsg); + alg_iv->ivlen =3D niv; + memcpy(alg_iv->iv, iv, niv); + + return 0; +} + +static int +qcrypto_afalg_cipher_op(QCryptoAFAlg *afalg, + const void *in, void *out, + size_t len, bool do_encrypt, + Error **errp) +{ + uint32_t *type =3D NULL; + struct iovec iov; + size_t ret, rlen, done =3D 0; + uint32_t origin_controllen; + + origin_controllen =3D afalg->msg->msg_controllen; + /* movev ->cmsg to first header, for crypto-info */ + afalg->cmsg =3D CMSG_FIRSTHDR(afalg->msg); + + /* build encrypt msg */ + afalg->cmsg->cmsg_level =3D SOL_ALG; + afalg->msg->msg_iov =3D &iov; + afalg->msg->msg_iovlen =3D 1; + type =3D (uint32_t *)CMSG_DATA(afalg->cmsg); + if (do_encrypt) { + *type =3D ALG_OP_ENCRYPT; + } else { + *type =3D ALG_OP_DECRYPT; + } + + do { + iov.iov_base =3D (void *)in + done; + iov.iov_len =3D len - done; + + /* send info to AF_ALG core */ + ret =3D sendmsg(afalg->opfd, afalg->msg, 0); + if (ret =3D=3D -1) { + error_setg_errno(errp, errno, "Send data to AF_ALG core failed= "); + return -1; + } + + /* encrypto && get result */ + rlen =3D read(afalg->opfd, out, ret); + if (rlen =3D=3D -1) { + error_setg_errno(errp, errno, "Get result from AF_ALG core fai= led"); + return -1; + } + assert(rlen =3D=3D ret); + + /* do not update IV for following chunks */ + afalg->msg->msg_controllen =3D 0; + done +=3D ret; + } while (done < len); + + afalg->msg->msg_controllen =3D origin_controllen; + + return 0; +} + +static int +qcrypto_afalg_cipher_encrypt(QCryptoCipher *cipher, + const void *in, void *out, + size_t len, Error **errp) +{ + return qcrypto_afalg_cipher_op(cipher->opaque, in, out, + len, true, errp); +} + +static int +qcrypto_afalg_cipher_decrypt(QCryptoCipher *cipher, + const void *in, void *out, + size_t len, Error **errp) +{ + return qcrypto_afalg_cipher_op(cipher->opaque, in, out, + len, false, errp); +} + +static void qcrypto_afalg_comm_ctx_free(QCryptoCipher *cipher) +{ + qcrypto_afalg_comm_free(cipher->opaque); +} + +struct QCryptoCipherDriver qcrypto_cipher_afalg_driver =3D { + .cipher_encrypt =3D qcrypto_afalg_cipher_encrypt, + .cipher_decrypt =3D qcrypto_afalg_cipher_decrypt, + .cipher_setiv =3D qcrypto_afalg_cipher_setiv, + .cipher_free =3D qcrypto_afalg_comm_ctx_free, +}; diff --git a/crypto/cipher.c b/crypto/cipher.c index 0a3d2e5..a487270 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -163,18 +163,33 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgori= thm alg, Error **errp) { QCryptoCipher *cipher; - void *ctx; + void *ctx =3D NULL; + Error *err2 =3D NULL; + QCryptoCipherDriver *drv; + +#ifdef CONFIG_AF_ALG + ctx =3D qcrypto_afalg_cipher_ctx_new(alg, mode, key, nkey, &err2); + if (ctx) { + drv =3D &qcrypto_cipher_afalg_driver; + } +#endif =20 - ctx =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); if (!ctx) { - return NULL; + ctx =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); + if (!ctx) { + error_free(err2); + return NULL; + } + + drv =3D &qcrypto_cipher_lib_driver; + error_free(err2); } =20 cipher =3D g_new0(QCryptoCipher, 1); cipher->alg =3D alg; cipher->mode =3D mode; cipher->opaque =3D ctx; - cipher->driver =3D (void *)&qcrypto_cipher_lib_driver; + cipher->driver =3D (void *)drv; =20 return cipher; } diff --git a/crypto/cipherpriv.h b/crypto/cipherpriv.h index 4af5e85..77da4c2 100644 --- a/crypto/cipherpriv.h +++ b/crypto/cipherpriv.h @@ -15,6 +15,8 @@ #ifndef QCRYPTO_CIPHERPRIV_H #define QCRYPTO_CIPHERPRIV_H =20 +#include "qapi-types.h" + typedef struct QCryptoCipherDriver QCryptoCipherDriver; =20 struct QCryptoCipherDriver { @@ -37,4 +39,18 @@ struct QCryptoCipherDriver { void (*cipher_free)(QCryptoCipher *cipher); }; =20 +#ifdef CONFIG_AF_ALG + +#include "afalgpriv.h" + +extern QCryptoAFAlg * +qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, Error **errp); + +extern struct QCryptoCipherDriver qcrypto_cipher_afalg_driver; + +#endif + #endif --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150003288527557.50172570415339; Fri, 14 Jul 2017 04:48:05 -0700 (PDT) Received: from localhost ([::1]:37211 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVz4l-000235-Rf for importer@patchew.org; Fri, 14 Jul 2017 07:48:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35681) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw3-0001GO-63 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyw1-0007sr-Th for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:03 -0400 Received: from mail-pg0-x241.google.com ([2607:f8b0:400e:c05::241]:33238) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyw1-0007sE-LG for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:01 -0400 Received: by mail-pg0-x241.google.com with SMTP id u62so10397304pgb.0 for ; Fri, 14 Jul 2017 04:39:01 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id p21sm16264759pgn.12.2017.07.14.04.39.00 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:39:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=h/vSD3/V1enal26E9liKlnm7amTt8CC3u5e55RBrSCE=; b=IQeub2hLtWiLB1r3GIIby/g68UEWVuB+yqRpXNAC0qEvoi3mZpuzGjopq58c7k9sAX 7DX9lsUdwdShjZxnndP4H6nKhBGJXvGV6xc9V/dmhjGPXA9SZKHEZVkBMHBR0+mXYQGC DLIg1eiWbIh+WW/dni+j5F0GLMnkGg2OlbGIPUoN+BjKzgWNlFc3qO+E1wFmlQAFdqns reYqwrYftlMeY6PdcYqvhCvzctsp+h4xmiDDifUJIaoutUlNCRoaYlijNK2Dqm5cyCq9 xg3YwwNwAoBt975tBCM2zUKLEP624MeFJyN1+j0ifPDAk30nnWDWGA+jeS//sv2+5yhW hyKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=h/vSD3/V1enal26E9liKlnm7amTt8CC3u5e55RBrSCE=; b=WydwGpkq7whuWdvqN+2NA1ezq5Rfj7tRv8XsCp70yPk4qZ6Fuc4PyXUG9w0JgoSueC 5D3mSEVoatR6rMp9UnfOymTvF5BJI2+Z86+0gvlvJ9o9nVItuuRxDLt6g4/cbNMqGqqG B6uc65ZzOsXfQugUNqZuSeXvtnHCnPcRu9hOrqzXwZtXjz6BaQyaWHH3mZMolCh21C22 4gY0GVJmwoLXopH7boxs+N4DHQ9EHu/g/v7WBOOuAj7A426N9QFataz9xeCzC5SGOBK9 3nc/jzbzbU9yAaTH94L3zFOfPDiuS5w4CsvxovQQ5ArEzr73mVq7OwnNRnxRdSojjd3/ SivQ== X-Gm-Message-State: AIVw110YnLPK1Ko3h0VbvgYGt2f2rWlIF6x8d3Jm6pKOOpLopR+oUNSN 3UH3UTu5qO8Xrw== X-Received: by 10.84.128.69 with SMTP id 63mr15376513pla.54.1500032340848; Fri, 14 Jul 2017 04:39:00 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:36 -0400 Message-Id: <1500032321-13951-15-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::241 Subject: [Qemu-devel] [PATCH v5 14/18] crypto: hash: add afalg-backend hash support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Adds afalg-backend hash support: introduces some private APIs firstly, and then intergrates them into qcrypto_hash_afalg_driver. Signed-off-by: Longpeng(Mike) --- crypto/Makefile.objs | 1 + crypto/afalgpriv.h | 1 + crypto/hash-afalg.c | 136 +++++++++++++++++++++++++++++++++++++++++++++++= ++++ crypto/hash.c | 17 +++++++ crypto/hashpriv.h | 8 +++ 5 files changed, 163 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 +=3D desrfb.o crypto-obj-y +=3D cipher.o crypto-obj-$(CONFIG_AF_ALG) +=3D afalg.o crypto-obj-$(CONFIG_AF_ALG) +=3D cipher-afalg.o +crypto-obj-$(CONFIG_AF_ALG) +=3D hash-afalg.o crypto-obj-y +=3D tlscreds.o crypto-obj-y +=3D tlscredsanon.o crypto-obj-y +=3D tlscredsx509.o diff --git a/crypto/afalgpriv.h b/crypto/afalgpriv.h index d0941d4..f6550b5 100644 --- a/crypto/afalgpriv.h +++ b/crypto/afalgpriv.h @@ -24,6 +24,7 @@ #endif =20 #define AFALG_TYPE_CIPHER "skcipher" +#define AFALG_TYPE_HASH "hash" =20 #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..70ab414 --- /dev/null +++ b/crypto/hash-afalg.c @@ -0,0 +1,136 @@ +/* + * QEMU Crypto af_alg-backend hash support + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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; + + switch (alg) { + case QCRYPTO_HASH_ALG_MD5: + alg_name =3D "md5"; + break; + case QCRYPTO_HASH_ALG_SHA1: + alg_name =3D "sha1"; + break; + case QCRYPTO_HASH_ALG_SHA224: + alg_name =3D "sha224"; + break; + case QCRYPTO_HASH_ALG_SHA256: + alg_name =3D "sha256"; + break; + case QCRYPTO_HASH_ALG_SHA384: + alg_name =3D "sha384"; + break; + case QCRYPTO_HASH_ALG_SHA512: + alg_name =3D "sha512"; + break; + case QCRYPTO_HASH_ALG_RIPEMD160: + alg_name =3D "rmd160"; + break; + + default: + error_setg(errp, "Unsupported hash algorithm %d", alg); + return NULL; + } + + name =3D g_strdup_printf("%s", alg_name); + + return name; +} + +static QCryptoAFAlg * +qcrypto_afalg_hash_ctx_new(QCryptoHashAlgorithm alg, Error **errp) +{ + QCryptoAFAlg *afalg; + char *name; + + name =3D qcrypto_afalg_hash_format_name(alg, errp); + if (!name) { + return NULL; + } + + afalg =3D qcrypto_afalg_comm_alloc(AFALG_TYPE_HASH, name, errp); + if (!afalg) { + g_free(name); + return NULL; + } + + g_free(name); + + return afalg; +} + +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 =3D 0; + const int expect_len =3D qcrypto_hash_digest_len(alg); + + if (*resultlen =3D=3D 0) { + *resultlen =3D expect_len; + *result =3D g_new0(uint8_t, *resultlen); + } else if (*resultlen !=3D expect_len) { + error_setg(errp, + "Result buffer size %zu is not match hash %d", + *resultlen, expect_len); + return -1; + } + + afalg =3D qcrypto_afalg_hash_ctx_new(alg, errp); + if (!afalg) { + return -1; + } + + /* send data to kernel's crypto core */ + ret =3D 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 =3D *result; + outv.iov_len =3D *resultlen; + ret =3D iov_send_recv(afalg->opfd, &outv, 1, + 0, iov_size(&outv, 1), false); + if (ret < 0) { + error_setg_errno(errp, errno, "Recv result from afalg-core failed"= ); + } else { + ret =3D 0; + } + +out: + qcrypto_afalg_comm_free(afalg); + return ret; +} + +QCryptoHashDriver qcrypto_hash_afalg_driver =3D { + .hash_bytesv =3D qcrypto_afalg_hash_bytesv, +}; diff --git a/crypto/hash.c b/crypto/hash.c index c43fd87..ac59c63 100644 --- a/crypto/hash.c +++ b/crypto/hash.c @@ -46,6 +46,23 @@ int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg, size_t *resultlen, Error **errp) { +#ifdef CONFIG_AF_ALG + int ret; + + ret =3D qcrypto_hash_afalg_driver.hash_bytesv(alg, iov, niov, + result, resultlen, + errp); + if (ret =3D=3D 0) { + return ret; + } + + /* + * TODO: + * Maybe we should treat some afalg errors as fatal + */ + error_free(*errp); +#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..cee26cc 100644 --- a/crypto/hashpriv.h +++ b/crypto/hashpriv.h @@ -28,4 +28,12 @@ struct QCryptoHashDriver { =20 extern QCryptoHashDriver qcrypto_hash_lib_driver; =20 +#ifdef CONFIG_AF_ALG + +#include "afalgpriv.h" + +extern QCryptoHashDriver qcrypto_hash_afalg_driver; + +#endif + #endif --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033013624654.6796839980848; Fri, 14 Jul 2017 04:50:13 -0700 (PDT) Received: from localhost ([::1]:37219 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVz6o-0004Sb-7k for importer@patchew.org; Fri, 14 Jul 2017 07:50:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35712) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw4-0001Hw-Bt for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyw3-0007u5-3Y for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:04 -0400 Received: from mail-pf0-x241.google.com ([2607:f8b0:400e:c00::241]:36092) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyw2-0007tV-SF for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:03 -0400 Received: by mail-pf0-x241.google.com with SMTP id z6so10754294pfk.3 for ; Fri, 14 Jul 2017 04:39:02 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id k67sm15742709pfg.37.2017.07.14.04.39.01 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:39:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=IqChpPDAxMqZSZ/OXp/szN6Aqd/sjvGub/+s3znB5wc=; b=InQqxedi/WD1sfPTJEj3WgLjlSXhGhm2m+owkXoiZfAONgGi6TOVvJcU7rAorWZhVt S7Ko8U3Tt9WH3wd9QKjiNhEMa0YXuxZhVPDwSS+GAx6ycqP85/IU8lFZTT0iv0UOANlV 6cnDpD3ac9mr5OXEc6dVk/A9aslC91EBPiVYxXUaQ7zlEvsStWqaTAUTBEITySqFHj86 UsmHLVrkuMc9t/FM+xg8Y4Byv9tiVYmLWX4PHL0ND6C674H0acFXzmqGKfsVjz7gSk4N PO4PBYQ3fP+nqFqGp88WQbc3yzFSvWA/PSvndGJ+KE3DugZCWCaAUBM/lE/wuKmnrh6X UUag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=IqChpPDAxMqZSZ/OXp/szN6Aqd/sjvGub/+s3znB5wc=; b=FYU0KV5KqutdWqRvg4NKhIWXpyZ+LZ4WWlRSw/UW8wgwyZKr2f7CL/JdYMszzigSKL 88m3kVulMY+uKZc3I+HQ2Bbh0GNUGvId14rZ6c6wdTLuliL5gE/Fi62g0S/LGmebnyEp MzU2v1SlDD7Xg0c0/hAFYYWoSwFeId182Jg2AMCDEcpoAqRVyGjKrGV95x3mc5NSWJd9 kmE6oeI38XYvbDmIQO+f5CkjYP8JQZSu8gJng9PVa6pGuugTXPyi5bxfnha6OQKCLo3T CBCWmFP5HxEWvUJBI2XYMe7Dfb137/7Q9arG2L1kPr6msJAQcdW2bj8N1UMop5/VtcHH wcrg== X-Gm-Message-State: AIVw112lWYahGfLf7gVV3K0UZTAttTB2OiU10e69pg3pOgrYo8ljsjft 6wyRlyrxx9wXARrdnKY= X-Received: by 10.99.227.81 with SMTP id o17mr14040907pgj.41.1500032342042; Fri, 14 Jul 2017 04:39:02 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:37 -0400 Message-Id: <1500032321-13951-16-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::241 Subject: [Qemu-devel] [PATCH v5 15/18] crypto: hmac: add af_alg-backend hmac support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Adds afalg-backend hmac support: introduces some private APIs firstly, and then intergrates them into qcrypto_hmac_afalg_driver. Signed-off-by: Longpeng(Mike) --- crypto/hash-afalg.c | 104 +++++++++++++++++++++++++++++++++++++++++++++---= ---- crypto/hmac.c | 22 +++++++++-- crypto/hmacpriv.h | 12 ++++++ 3 files changed, 121 insertions(+), 17 deletions(-) diff --git a/crypto/hash-afalg.c b/crypto/hash-afalg.c index 70ab414..cf34c69 100644 --- a/crypto/hash-afalg.c +++ b/crypto/hash-afalg.c @@ -1,5 +1,5 @@ /* - * QEMU Crypto af_alg-backend hash support + * QEMU Crypto af_alg-backend hash/hmac support * * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. * @@ -16,10 +16,13 @@ #include "qemu-common.h" #include "qapi/error.h" #include "crypto/hash.h" +#include "crypto/hmac.h" #include "hashpriv.h" +#include "hmacpriv.h" =20 static char * qcrypto_afalg_hash_format_name(QCryptoHashAlgorithm alg, + bool is_hmac, Error **errp) { char *name; @@ -53,18 +56,24 @@ qcrypto_afalg_hash_format_name(QCryptoHashAlgorithm alg, return NULL; } =20 - name =3D g_strdup_printf("%s", alg_name); + if (is_hmac) { + name =3D g_strdup_printf("hmac(%s)", alg_name); + } else { + name =3D g_strdup_printf("%s", alg_name); + } =20 return name; } =20 static QCryptoAFAlg * -qcrypto_afalg_hash_ctx_new(QCryptoHashAlgorithm alg, Error **errp) +qcrypto_afalg_hash_hmac_ctx_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + bool is_hmac, Error **errp) { QCryptoAFAlg *afalg; char *name; =20 - name =3D qcrypto_afalg_hash_format_name(alg, errp); + name =3D qcrypto_afalg_hash_format_name(alg, is_hmac, errp); if (!name) { return NULL; } @@ -77,19 +86,46 @@ qcrypto_afalg_hash_ctx_new(QCryptoHashAlgorithm alg, Er= ror **errp) =20 g_free(name); =20 + /* HMAC needs setkey */ + if (is_hmac) { + if (qemu_setsockopt(afalg->tfmfd, SOL_ALG, ALG_SET_KEY, + key, nkey) !=3D 0) { + error_setg_errno(errp, errno, "Set hmac key failed"); + qcrypto_afalg_comm_free(afalg); + return NULL; + } + } + return afalg; } =20 +static QCryptoAFAlg * +qcrypto_afalg_hash_ctx_new(QCryptoHashAlgorithm alg, + Error **errp) +{ + return qcrypto_afalg_hash_hmac_ctx_new(alg, NULL, 0, false, errp); +} + +QCryptoAFAlg * +qcrypto_afalg_hmac_ctx_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp) +{ + return qcrypto_afalg_hash_hmac_ctx_new(alg, key, nkey, true, errp); +} + static int -qcrypto_afalg_hash_bytesv(QCryptoHashAlgorithm alg, - const struct iovec *iov, - size_t niov, uint8_t **result, - size_t *resultlen, - Error **errp) +qcrypto_afalg_hash_hmac_bytesv(QCryptoAFAlg *hmac, + QCryptoHashAlgorithm alg, + const struct iovec *iov, + size_t niov, uint8_t **result, + size_t *resultlen, + Error **errp) { QCryptoAFAlg *afalg; struct iovec outv; int ret =3D 0; + bool is_hmac =3D (hmac !=3D NULL) ? true : false; const int expect_len =3D qcrypto_hash_digest_len(alg); =20 if (*resultlen =3D=3D 0) { @@ -102,9 +138,13 @@ qcrypto_afalg_hash_bytesv(QCryptoHashAlgorithm alg, return -1; } =20 - afalg =3D qcrypto_afalg_hash_ctx_new(alg, errp); - if (!afalg) { - return -1; + if (is_hmac) { + afalg =3D hmac; + } else { + afalg =3D qcrypto_afalg_hash_ctx_new(alg, errp); + if (!afalg) { + return -1; + } } =20 /* send data to kernel's crypto core */ @@ -127,10 +167,48 @@ qcrypto_afalg_hash_bytesv(QCryptoHashAlgorithm alg, } =20 out: - qcrypto_afalg_comm_free(afalg); + if (!is_hmac) { + qcrypto_afalg_comm_free(afalg); + } return ret; } =20 +static int +qcrypto_afalg_hash_bytesv(QCryptoHashAlgorithm alg, + const struct iovec *iov, + size_t niov, uint8_t **result, + size_t *resultlen, + Error **errp) +{ + return qcrypto_afalg_hash_hmac_bytesv(NULL, alg, iov, niov, result, + resultlen, errp); +} + +static int +qcrypto_afalg_hmac_bytesv(QCryptoHmac *hmac, + const struct iovec *iov, + size_t niov, uint8_t **result, + size_t *resultlen, + Error **errp) +{ + return qcrypto_afalg_hash_hmac_bytesv(hmac->opaque, hmac->alg, + iov, niov, result, resultlen, + errp); +} + +static void qcrypto_afalg_hmac_ctx_free(QCryptoHmac *hmac) +{ + QCryptoAFAlg *afalg; + + afalg =3D hmac->opaque; + qcrypto_afalg_comm_free(afalg); +} + QCryptoHashDriver qcrypto_hash_afalg_driver =3D { .hash_bytesv =3D qcrypto_afalg_hash_bytesv, }; + +QCryptoHmacDriver qcrypto_hmac_afalg_driver =3D { + .hmac_bytesv =3D qcrypto_afalg_hmac_bytesv, + .hmac_free =3D qcrypto_afalg_hmac_ctx_free, +}; diff --git a/crypto/hmac.c b/crypto/hmac.c index a4690e3..37e2af2 100644 --- a/crypto/hmac.c +++ b/crypto/hmac.c @@ -89,17 +89,31 @@ QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg, Error **errp) { QCryptoHmac *hmac; - void *ctx; + void *ctx =3D NULL; + Error *err2 =3D NULL; + QCryptoHmacDriver *drv; + +#ifdef CONFIG_AF_ALG + ctx =3D qcrypto_afalg_hmac_ctx_new(alg, key, nkey, &err2); + if (ctx) { + drv =3D &qcrypto_hmac_afalg_driver; + } +#endif =20 - ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); if (!ctx) { - return NULL; + ctx =3D qcrypto_hmac_ctx_new(alg, key, nkey, errp); + if (!ctx) { + return NULL; + } + + drv =3D &qcrypto_hmac_lib_driver; + error_free(err2); } =20 hmac =3D g_new0(QCryptoHmac, 1); hmac->alg =3D alg; hmac->opaque =3D ctx; - hmac->driver =3D (void *)&qcrypto_hmac_lib_driver; + hmac->driver =3D (void *)drv; =20 return hmac; } diff --git a/crypto/hmacpriv.h b/crypto/hmacpriv.h index 2be389a..4387ca2 100644 --- a/crypto/hmacpriv.h +++ b/crypto/hmacpriv.h @@ -33,4 +33,16 @@ extern void *qcrypto_hmac_ctx_new(QCryptoHashAlgorithm a= lg, Error **errp); extern QCryptoHmacDriver qcrypto_hmac_lib_driver; =20 +#ifdef CONFIG_AF_ALG + +#include "afalgpriv.h" + +extern QCryptoAFAlg * +qcrypto_afalg_hmac_ctx_new(QCryptoHashAlgorithm alg, + const uint8_t *key, size_t nkey, + Error **errp); +extern QCryptoHmacDriver qcrypto_hmac_afalg_driver; + +#endif + #endif --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033796451258.6865752669986; Fri, 14 Jul 2017 05:03:16 -0700 (PDT) Received: from localhost ([::1]:37386 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVzJM-0008Ob-0Y for importer@patchew.org; Fri, 14 Jul 2017 08:03:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35746) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw5-0001KP-PZ for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyw4-0007vS-Aq for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:05 -0400 Received: from mail-pf0-x241.google.com ([2607:f8b0:400e:c00::241]:34980) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyw4-0007ub-3a for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:04 -0400 Received: by mail-pf0-x241.google.com with SMTP id q85so10728913pfq.2 for ; Fri, 14 Jul 2017 04:39:03 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id r62sm19103509pfb.39.2017.07.14.04.39.02 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:39:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZfDKTPibyKEklujKREbwUVy8iB47XYMk/FQcb/qForc=; b=LdVK02mZHq3JMAMrmFKESgrjCnBGwj1mVf2n8xIUK26K0CWuW4c3vsLf+xYHSYeiBZ lPgq6PAjMqhaKrK57OyDeLSzdC2iB/Nc0fbR59vtKrZi100j8RApSJ3rm+i4YwFMevQ+ 4KNtUM0zGLIGLQuOheY8sPZ6gm9xZQIngzLaCtjg9EtHOdXq+fjEdzn7D5qt+9oRl/A4 2TXacp0/qFcxAZkLIyRqwlGsE2D4gYvh3tey4Ew9HAtIMJnsREMiIZnzJH25BEm2J7qo auxwWWsXPcuuSFFEKAQNvv7LaQiP/ch8F46Wbc9t2URIt0lxm0T4HxsVrU/2HcEP3dE7 5Piw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZfDKTPibyKEklujKREbwUVy8iB47XYMk/FQcb/qForc=; b=re73N3zC6lcjP6Em5ZP/lHn/ndVO01iV6PdUkG7ZOEgjayBYEyl7PaeYgd4+BgqDKw H1EUMIt1x37gPog+LIhlEs/w1fS/eu3RGOFMkZmsB+WeRqYaeto39EGq6T2eMqZJVDvS Vb1aYNF5oWCNI15S5kIZ+JvLwrCLSlMioigHSOviwa9FXJXh3OtEY37QsABwDZiRa9y/ K3k3aV74KF+2f66ksGouAp8v3izMjPWY8TlpoHiuD3ems4yQxBvEPV/3bDFoqsNPEMI3 Bl1MPrlGyX1jfUrbsmjWbWOINLqaSnnTCOp8gRI7WIIuveS2JVGaSxTDpRlADPgOhNIE 9mSw== X-Gm-Message-State: AIVw110+RzmXB5qxScF4TYuzkimmEdeXVFpmv61bw5cGgWonzuMCHg/n hFGC+im1XK3rSw== X-Received: by 10.99.124.5 with SMTP id x5mr14137617pgc.280.1500032343212; Fri, 14 Jul 2017 04:39:03 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:38 -0400 Message-Id: <1500032321-13951-17-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::241 Subject: [Qemu-devel] [PATCH v5 16/18] tests: crypto: add cipher speed benchmark support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" Now we have two qcrypto backends, libiary-backend and afalg-backend, but which one is faster? This patch add a cipher speed benchmark, it helps us to measure the performance by using "make check-speed" or using "./tests/benchmark-crypto-cipher" directly. Signed-off-by: Longpeng(Mike) --- tests/Makefile.include | 9 ++++- tests/benchmark-crypto-cipher.c | 88 +++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 tests/benchmark-crypto-cipher.c diff --git a/tests/Makefile.include b/tests/Makefile.include index 42e17e2..2f34c60 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -99,6 +99,7 @@ gcov-files-test-write-threshold-y =3D block/write-thresho= ld.c check-unit-y +=3D tests/test-crypto-hash$(EXESUF) check-unit-y +=3D tests/test-crypto-hmac$(EXESUF) check-unit-y +=3D tests/test-crypto-cipher$(EXESUF) +check-speed-y +=3D tests/benchmark-crypto-cipher$(EXESUF) check-unit-y +=3D tests/test-crypto-secret$(EXESUF) check-unit-$(CONFIG_GNUTLS) +=3D tests/test-crypto-tlscredsx509$(EXESUF) check-unit-$(CONFIG_GNUTLS) +=3D tests/test-crypto-tlssession$(EXESUF) @@ -532,6 +533,7 @@ test-qom-obj-y =3D $(qom-obj-y) $(test-util-obj-y) test-qapi-obj-y =3D tests/test-qapi-visit.o tests/test-qapi-types.o \ tests/test-qapi-event.o tests/test-qmp-introspect.o \ $(test-qom-obj-y) +benchmark-crypto-obj-y =3D $(crypto-obj-y) $(test-qom-obj-y) test-crypto-obj-y =3D $(crypto-obj-y) $(test-qom-obj-y) test-io-obj-y =3D $(io-obj-y) $(test-crypto-obj-y) test-block-obj-y =3D $(block-obj-y) $(test-io-obj-y) tests/iothread.o @@ -635,6 +637,7 @@ tests/test-bitcnt$(EXESUF): tests/test-bitcnt.o $(test-= util-obj-y) tests/test-crypto-hash$(EXESUF): tests/test-crypto-hash.o $(test-crypto-ob= j-y) tests/test-crypto-hmac$(EXESUF): tests/test-crypto-hmac.o $(test-crypto-ob= j-y) tests/test-crypto-cipher$(EXESUF): tests/test-crypto-cipher.o $(test-crypt= o-obj-y) +tests/benchmark-crypto-cipher$(EXESUF): tests/benchmark-crypto-cipher.o $(= test-crypto-obj-y) tests/test-crypto-secret$(EXESUF): tests/test-crypto-secret.o $(test-crypt= o-obj-y) tests/test-crypto-xts$(EXESUF): tests/test-crypto-xts.o $(test-crypto-obj-= y) =20 @@ -803,6 +806,7 @@ check-help: @echo " make check-qtest-TARGET Run qtest tests for given target" @echo " make check-qtest Run qtest tests" @echo " make check-unit Run qobject tests" + @echo " make check-speed Run qobject speed tests" @echo " make check-qapi-schema Run QAPI schema tests" @echo " make check-block Run block tests" @echo " make check-report.html Generates an HTML test report" @@ -833,8 +837,8 @@ $(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-q= test-%: $(check-qtest-y) $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \ done,) =20 -.PHONY: $(patsubst %, check-%, $(check-unit-y)) -$(patsubst %, check-%, $(check-unit-y)): check-%: % +.PHONY: $(patsubst %, check-%, $(check-unit-y) $(check-speed-y)) +$(patsubst %, check-%, $(check-unit-y) $(check-speed-y)): check-%: % $(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,) $(call quiet-command, \ MALLOC_PERTURB_=3D$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \ @@ -893,6 +897,7 @@ check-tests/qapi-schema/doc-good.texi: tests/qapi-schem= a/doc-good.test.texi check-qapi-schema: $(patsubst %,check-%, $(check-qapi-schema-y)) check-tes= ts/qapi-schema/doc-good.texi check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS)) check-unit: $(patsubst %,check-%, $(check-unit-y)) +check-speed: $(patsubst %,check-%, $(check-speed-y)) check-block: $(patsubst %,check-%, $(check-block-y)) check: check-qapi-schema check-unit check-qtest check-clean: diff --git a/tests/benchmark-crypto-cipher.c b/tests/benchmark-crypto-ciphe= r.c new file mode 100644 index 0000000..c6a4092 --- /dev/null +++ b/tests/benchmark-crypto-cipher.c @@ -0,0 +1,88 @@ +/* + * QEMU Crypto cipher speed benchmark + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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 "crypto/init.h" +#include "crypto/cipher.h" + +static void test_cipher_speed(const void *opaque) +{ + QCryptoCipher *cipher; + Error *err =3D NULL; + double total =3D 0.0; + size_t chunk_size =3D (size_t)opaque; + uint8_t *key =3D NULL, *iv =3D NULL; + uint8_t *plaintext =3D NULL, *ciphertext =3D NULL; + size_t nkey =3D qcrypto_cipher_get_key_len(QCRYPTO_CIPHER_ALG_AES_128); + size_t niv =3D qcrypto_cipher_get_iv_len(QCRYPTO_CIPHER_ALG_AES_128, + QCRYPTO_CIPHER_MODE_CBC); + + key =3D g_new0(uint8_t, nkey); + memset(key, g_test_rand_int(), nkey); + + iv =3D g_new0(uint8_t, niv); + memset(iv, g_test_rand_int(), niv); + + ciphertext =3D g_new0(uint8_t, chunk_size); + + plaintext =3D g_new0(uint8_t, chunk_size); + memset(plaintext, g_test_rand_int(), chunk_size); + + cipher =3D qcrypto_cipher_new(QCRYPTO_CIPHER_ALG_AES_128, + QCRYPTO_CIPHER_MODE_CBC, + key, nkey, &err); + g_assert(cipher !=3D NULL); + + g_assert(qcrypto_cipher_setiv(cipher, + iv, niv, + &err) =3D=3D 0); + + g_test_timer_start(); + do { + g_assert(qcrypto_cipher_encrypt(cipher, + plaintext, + ciphertext, + chunk_size, + &err) =3D=3D 0); + total +=3D chunk_size; + } while (g_test_timer_elapsed() < 5.0); + + total /=3D 1024 * 1024; /* to MB */ + + g_print("cbc(aes128): "); + g_print("Testing chunk_size %ld bytes ", chunk_size); + g_print("done: %.2f MB in %.2f secs: ", total, g_test_timer_last()); + g_print("%.2f MB/sec\n", total / g_test_timer_last()); + + qcrypto_cipher_free(cipher); + g_free(plaintext); + g_free(ciphertext); + g_free(iv); + g_free(key); +} + +int main(int argc, char **argv) +{ + size_t i; + char name[64]; + + g_test_init(&argc, &argv, NULL); + g_assert(qcrypto_init(NULL) =3D=3D 0); + + for (i =3D 512; i <=3D (64 * 1204); i *=3D 2) { + memset(name, 0 , sizeof(name)); + snprintf(name, sizeof(name), "/crypto/cipher/speed-%lu", i); + g_test_add_data_func(name, (void *)i, test_cipher_speed); + } + + return g_test_run(); +} --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033919564727.2983331335587; Fri, 14 Jul 2017 05:05:19 -0700 (PDT) Received: from localhost ([::1]:37453 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVzLP-0002QJ-5T for importer@patchew.org; Fri, 14 Jul 2017 08:05:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35769) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw6-0001N1-K2 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyw5-0007wF-EV for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:06 -0400 Received: from mail-pg0-x244.google.com ([2607:f8b0:400e:c05::244]:33875) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyw5-0007vg-7c for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:05 -0400 Received: by mail-pg0-x244.google.com with SMTP id j186so10400053pge.1 for ; Fri, 14 Jul 2017 04:39:05 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id v205sm14538680pgb.51.2017.07.14.04.39.03 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:39:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=X5byj+IoNv3TUKzxaIMkeIP4J98w9WGuH6jKXJfXuMU=; b=vCaOzfPPTlIU2Zkxx5/RnFKG3Y5puv4PfXYCRlRF7l2TBmv7KDztRwwciQUQ4B+yAc HTpFO7iO1OKjkumAJ7DH9owF8BTvcRlnU7BsqXj4anbpfqYHYv8clIyml7Svohrk8H+Y XjUJDgd041F+9yOnxn9+znpDsJF+gOHrkdWLznkCYppbGulmaZqLSUNeQNkFQMgT6QWR 0Afd2m9FY5XYsR08be/rC7Aq9nkpzCtRZP2w8rqSIgpAZ8qftR8pUrBQKqzrAm6jVxrm qExuS0sxywArcrY3IPIAbf2xDzGKiO2ZY6vvmXAvqHzE4fXywl4+r6e9xrAw+qvJULCu ZY+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=X5byj+IoNv3TUKzxaIMkeIP4J98w9WGuH6jKXJfXuMU=; b=f9BA/FC49vUa0JNqbPnQQwntd6cYpSYGaGzVQyWyPTG30O0PQTDzlze8JOu4CaTg4/ Z06rS1bN4YbSgs637JEJ8eaZTYCFfEJ7j5kVqMcq1RKdTbFoBNlvZLClC+QVnhKmoMDa bBtpwyjHEwUfJSdKPEt59YDlZEsjNKnw4pIozMjqj6i+603Uy8UTW3jSBNUgb7xz+zoF u/o3cS3kzuWbVAqHSFYS/yjU7iNA7XoohqhCQm5iNZkaDN9AboZ19bKNJn+Vfyvo3T4O 6iE6nFe7YKmfarvk1rvSw6rvU1KA7b0kW8dYYRQ8UN/wFAOZ21WCq4vkcOMDEfPNyHgr lEBQ== X-Gm-Message-State: AIVw1120vHCK2wUbzhvtWEd32mu+WKBFIU4SVYIk0ihYECXnJjZvE6L9 kBKsQ55lqTkd2Q== X-Received: by 10.84.212.144 with SMTP id e16mr15658581pli.115.1500032344407; Fri, 14 Jul 2017 04:39:04 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:39 -0400 Message-Id: <1500032321-13951-18-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::244 Subject: [Qemu-devel] [PATCH v5 17/18] tests: crypto: add hash speed benchmark support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" This patch add a hash speed benchmark, it helps us to measure the performance by using "make check-speed" or using "./tests/benchmark-crypto-hash" directly. Signed-off-by: Longpeng(Mike) --- tests/Makefile.include | 2 ++ tests/benchmark-crypto-hash.c | 67 +++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 69 insertions(+) create mode 100644 tests/benchmark-crypto-hash.c diff --git a/tests/Makefile.include b/tests/Makefile.include index 2f34c60..c5a67a3 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -97,6 +97,7 @@ gcov-files-test-keyval-y =3D util/keyval.c check-unit-y +=3D tests/test-write-threshold$(EXESUF) gcov-files-test-write-threshold-y =3D block/write-threshold.c check-unit-y +=3D tests/test-crypto-hash$(EXESUF) +check-speed-y +=3D tests/benchmark-crypto-hash$(EXESUF) check-unit-y +=3D tests/test-crypto-hmac$(EXESUF) check-unit-y +=3D tests/test-crypto-cipher$(EXESUF) check-speed-y +=3D tests/benchmark-crypto-cipher$(EXESUF) @@ -635,6 +636,7 @@ tests/test-mul64$(EXESUF): tests/test-mul64.o $(test-ut= il-obj-y) tests/test-bitops$(EXESUF): tests/test-bitops.o $(test-util-obj-y) tests/test-bitcnt$(EXESUF): tests/test-bitcnt.o $(test-util-obj-y) tests/test-crypto-hash$(EXESUF): tests/test-crypto-hash.o $(test-crypto-ob= j-y) +tests/benchmark-crypto-hash$(EXESUF): tests/benchmark-crypto-hash.o $(test= -crypto-obj-y) tests/test-crypto-hmac$(EXESUF): tests/test-crypto-hmac.o $(test-crypto-ob= j-y) tests/test-crypto-cipher$(EXESUF): tests/test-crypto-cipher.o $(test-crypt= o-obj-y) tests/benchmark-crypto-cipher$(EXESUF): tests/benchmark-crypto-cipher.o $(= test-crypto-obj-y) diff --git a/tests/benchmark-crypto-hash.c b/tests/benchmark-crypto-hash.c new file mode 100644 index 0000000..6769d2a --- /dev/null +++ b/tests/benchmark-crypto-hash.c @@ -0,0 +1,67 @@ +/* + * QEMU Crypto hash speed benchmark + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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 "crypto/init.h" +#include "crypto/hash.h" + +static void test_hash_speed(const void *opaque) +{ + size_t chunk_size =3D (size_t)opaque; + uint8_t *in =3D NULL, *out =3D NULL; + size_t out_len =3D 0; + double total =3D 0.0; + struct iovec iov; + int ret; + + in =3D g_new0(uint8_t, chunk_size); + memset(in, g_test_rand_int(), chunk_size); + + iov.iov_base =3D (char *)in; + iov.iov_len =3D chunk_size; + + g_test_timer_start(); + do { + ret =3D qcrypto_hash_bytesv(QCRYPTO_HASH_ALG_SHA256, + &iov, 1, &out, &out_len, + NULL); + g_assert(ret =3D=3D 0); + + total +=3D chunk_size; + } while (g_test_timer_elapsed() < 5.0); + + total /=3D 1024 * 1024; /* to MB */ + g_print("sha256: "); + g_print("Testing chunk_size %ld bytes ", chunk_size); + g_print("done: %.2f MB in %.2f secs: ", total, g_test_timer_last()); + g_print("%.2f MB/sec\n", total / g_test_timer_last()); + + g_free(out); + g_free(in); +} + +int main(int argc, char **argv) +{ + size_t i; + char name[64]; + + g_test_init(&argc, &argv, NULL); + g_assert(qcrypto_init(NULL) =3D=3D 0); + + for (i =3D 512; i <=3D (64 * 1204); i *=3D 2) { + memset(name, 0 , sizeof(name)); + snprintf(name, sizeof(name), "/crypto/hash/speed-%lu", i); + g_test_add_data_func(name, (void *)i, test_hash_speed); + } + + return g_test_run(); +} --=20 1.8.3.1 From nobody Thu May 2 10:36:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500033076795958.8900578972473; Fri, 14 Jul 2017 04:51:16 -0700 (PDT) Received: from localhost ([::1]:37228 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVz7q-0005eH-Hq for importer@patchew.org; Fri, 14 Jul 2017 07:51:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35803) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVyw7-0001OY-PM for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVyw6-0007y1-MK for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:07 -0400 Received: from mail-pg0-x241.google.com ([2607:f8b0:400e:c05::241]:36368) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVyw6-0007x1-Et for qemu-devel@nongnu.org; Fri, 14 Jul 2017 07:39:06 -0400 Received: by mail-pg0-x241.google.com with SMTP id y129so10416679pgy.3 for ; Fri, 14 Jul 2017 04:39:06 -0700 (PDT) Received: from localhost (45.78.25.254.16clouds.com. [45.78.25.254]) by smtp.gmail.com with ESMTPSA id q88sm21204571pfa.10.2017.07.14.04.39.04 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 14 Jul 2017 04:39:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KH+WmtkojMWa4mPuiAOJNqpbw+fR9dm5KLbXEYNbBrI=; b=emig5qM6KtY2QGaMZ86tQhCHkEmmOpc0kAf6/MCJHb8WDE1e5h0qL5Q4GKtx1/I/jq EExEeOqgT1zoCK7uGgmQPlImSBPNiStPQxqDrvK0IO3CaD/u2O4lK+4rvCLNF0AHc7p1 ciaeUQXO3zu5OAdHqSvgOWCWu3yV+sRg/xHTK0ZlDk9O6DLTGtQNedewUjcqr0N7lBI4 v06vpNr8dWo5SOuyLEjtmDzHa2IyCFe7l3IYFlRpAs//L8ieAKnmIBEjvKGbTkNjGUGT 7AcCa7KY3F3I/1Tm1jHPEYdd1iejauSmTp7c4+3kKDnDAf/AgSCt5ryEOVJJ7PTsVw7j IFUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=KH+WmtkojMWa4mPuiAOJNqpbw+fR9dm5KLbXEYNbBrI=; b=RBXvVV6e67/PdV5BFg41XUvZsHIE1m0i/WXH/Pb/pPxDm4cQxQrjLCkchyypJZyzxD sag++AzR7xc4qjcYr4SEkcqI+b0OguIuzOWplFGOBEaxEg+LlVy5KJcJI/+C5bLqgrX2 LFchb410sN0iCr5vXttYUWsKbuLDQrNpSaH7PLG8Ntf/OydwO7KOV/lsRX73dto4z8Vt DG5JQYa00SZCjkUtkeAeLzDDbJjOkofGv+WpmuyqNqcxvSubRYpMn3NuAL0ss0BKGgZ2 S2sIrupT+XK4MUE7QD/uN3pNIKV2lyzsOS90dW1KE+rNyBykD9kK0QIB7YBj1T1noF7v 8YWA== X-Gm-Message-State: AIVw111IhWbI1lxUgC3VDu9u4wyMsEAvw9IRtwWksaCxI8T2yDPTRUOb SEMujt3OMFuStg== X-Received: by 10.84.229.76 with SMTP id d12mr15629229pln.222.1500032345633; Fri, 14 Jul 2017 04:39:05 -0700 (PDT) From: longpeng.mike@gmail.com To: berrange@redhat.com Date: Fri, 14 Jul 2017 07:38:40 -0400 Message-Id: <1500032321-13951-19-git-send-email-longpeng.mike@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> References: <1500032321-13951-1-git-send-email-longpeng.mike@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::241 Subject: [Qemu-devel] [PATCH v5 18/18] tests: crypto: add hmac speed benchmark support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Longpeng\(Mike\)" , arei.gonglei@huawei.com, weidong.huang@huawei.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Longpeng(Mike)" This patch add a hmac speed benchmark, it helps us to measure the performance by using "make check-speed" or using "./tests/benchmark-crypto-hmac" directly. Signed-off-by: Longpeng(Mike) --- tests/Makefile.include | 2 ++ tests/benchmark-crypto-hmac.c | 82 +++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 84 insertions(+) create mode 100644 tests/benchmark-crypto-hmac.c diff --git a/tests/Makefile.include b/tests/Makefile.include index c5a67a3..18f9359 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -99,6 +99,7 @@ gcov-files-test-write-threshold-y =3D block/write-thresho= ld.c check-unit-y +=3D tests/test-crypto-hash$(EXESUF) check-speed-y +=3D tests/benchmark-crypto-hash$(EXESUF) check-unit-y +=3D tests/test-crypto-hmac$(EXESUF) +check-speed-y +=3D tests/benchmark-crypto-hmac$(EXESUF) check-unit-y +=3D tests/test-crypto-cipher$(EXESUF) check-speed-y +=3D tests/benchmark-crypto-cipher$(EXESUF) check-unit-y +=3D tests/test-crypto-secret$(EXESUF) @@ -638,6 +639,7 @@ tests/test-bitcnt$(EXESUF): tests/test-bitcnt.o $(test-= util-obj-y) tests/test-crypto-hash$(EXESUF): tests/test-crypto-hash.o $(test-crypto-ob= j-y) tests/benchmark-crypto-hash$(EXESUF): tests/benchmark-crypto-hash.o $(test= -crypto-obj-y) tests/test-crypto-hmac$(EXESUF): tests/test-crypto-hmac.o $(test-crypto-ob= j-y) +tests/benchmark-crypto-hmac$(EXESUF): tests/benchmark-crypto-hmac.o $(test= -crypto-obj-y) tests/test-crypto-cipher$(EXESUF): tests/test-crypto-cipher.o $(test-crypt= o-obj-y) tests/benchmark-crypto-cipher$(EXESUF): tests/benchmark-crypto-cipher.o $(= test-crypto-obj-y) tests/test-crypto-secret$(EXESUF): tests/test-crypto-secret.o $(test-crypt= o-obj-y) diff --git a/tests/benchmark-crypto-hmac.c b/tests/benchmark-crypto-hmac.c new file mode 100644 index 0000000..72408be --- /dev/null +++ b/tests/benchmark-crypto-hmac.c @@ -0,0 +1,82 @@ +/* + * QEMU Crypto hmac speed benchmark + * + * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. + * + * Authors: + * Longpeng(Mike) + * + * 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 "crypto/init.h" +#include "crypto/hmac.h" + +#define KEY "monkey monkey monkey monkey" + +static void test_hmac_speed(const void *opaque) +{ + size_t chunk_size =3D (size_t)opaque; + QCryptoHmac *hmac =3D NULL; + uint8_t *in =3D NULL, *out =3D NULL; + size_t out_len =3D 0; + double total =3D 0.0; + struct iovec iov; + Error *err =3D NULL; + int ret; + + if (!qcrypto_hmac_supports(QCRYPTO_HASH_ALG_SHA256)) { + return; + } + + in =3D g_new0(uint8_t, chunk_size); + memset(in, g_test_rand_int(), chunk_size); + + iov.iov_base =3D (char *)in; + iov.iov_len =3D chunk_size; + + g_test_timer_start(); + do { + hmac =3D qcrypto_hmac_new(QCRYPTO_HASH_ALG_SHA256, + (const uint8_t *)KEY, strlen(KEY), &err); + g_assert(err =3D=3D NULL); + g_assert(hmac !=3D NULL); + + ret =3D qcrypto_hmac_bytesv(hmac, &iov, 1, &out, &out_len, &err); + g_assert(ret =3D=3D 0); + g_assert(err =3D=3D NULL); + + qcrypto_hmac_free(hmac); + + total +=3D chunk_size; + } while (g_test_timer_elapsed() < 5.0); + + total /=3D 1024 * 1024; /* to MB */ + + g_print("hmac(sha256): "); + g_print("Testing chunk_size %ld bytes ", chunk_size); + g_print("done: %.2f MB in %.2f secs: ", total, g_test_timer_last()); + g_print("%.2f MB/sec\n", total / g_test_timer_last()); + + g_free(out); + g_free(in); +} + +int main(int argc, char **argv) +{ + size_t i; + char name[64]; + + g_test_init(&argc, &argv, NULL); + g_assert(qcrypto_init(NULL) =3D=3D 0); + + for (i =3D 512; i <=3D (64 * 1204); i *=3D 2) { + memset(name, 0 , sizeof(name)); + snprintf(name, sizeof(name), "/crypto/hmac/speed-%lu", i); + g_test_add_data_func(name, (void *)i, test_hmac_speed); + } + + return g_test_run(); +} --=20 1.8.3.1