Message ID | 1492392806-53720-2-git-send-email-longpeng2@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> -----Original Message----- > From: longpeng > Sent: Monday, April 17, 2017 9:33 AM > To: berrange@redhat.com > Cc: Gonglei (Arei); Huangweidong (C); armbru@redhat.com; > eblake@redhat.com; mst@redhat.com; qemu-devel@nongnu.org; longpeng > Subject: [PATCH v2 for-2.10 01/18] crypto: cipher: introduce context free > function > > 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. > > Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> > --- > crypto/cipher-gcrypt.c | 31 ++++++++++++++++++------------- > crypto/cipher-nettle.c | 18 ++++++++++++++---- > 2 files changed, 32 insertions(+), 17 deletions(-) > Reviewed-by: Gonglei <arei.gonglei@huawei.com> > 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; > }; > > +static void gcrypt_cipher_free_ctx(QCryptoCipherGcrypt *ctx, > + QCryptoCipherMode mode) > +{ > + if (!ctx) { > + return; > + } > + > + gcry_cipher_close(ctx->handle); > + if (mode == 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(QCryptoCipherAlgorithm alg, > return cipher; > > error: > - gcry_cipher_close(ctx->handle); > - if (cipher->mode == 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(QCryptoCipherAlgorithm alg, > > void qcrypto_cipher_free(QCryptoCipher *cipher) > { > - QCryptoCipherGcrypt *ctx; > if (!cipher) { > return; > } > - ctx = cipher->opaque; > - gcry_cipher_close(ctx->handle); > - if (cipher->mode == 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); > } > > 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 alg, > } > > > +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) > } > > ctx = 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); > } > > -- > 1.8.3.1 >
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; }; +static void gcrypt_cipher_free_ctx(QCryptoCipherGcrypt *ctx, + QCryptoCipherMode mode) +{ + if (!ctx) { + return; + } + + gcry_cipher_close(ctx->handle); + if (mode == 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(QCryptoCipherAlgorithm alg, return cipher; error: - gcry_cipher_close(ctx->handle); - if (cipher->mode == 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(QCryptoCipherAlgorithm alg, void qcrypto_cipher_free(QCryptoCipher *cipher) { - QCryptoCipherGcrypt *ctx; if (!cipher) { return; } - ctx = cipher->opaque; - gcry_cipher_close(ctx->handle); - if (cipher->mode == 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); } 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 alg, } +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) } ctx = 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); }
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. Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> --- crypto/cipher-gcrypt.c | 31 ++++++++++++++++++------------- crypto/cipher-nettle.c | 18 ++++++++++++++---- 2 files changed, 32 insertions(+), 17 deletions(-)