From: "Daniel P. Berrange" <berrange@redhat.com>
To: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v3 3/3] crypto: use CPP for wrapper definitions in nettle
Date: Fri, 17 Jul 2015 11:58:57 +0100 [thread overview]
Message-ID: <20150717105857.GH4835@redhat.com> (raw)
In-Reply-To: <1437062641-12684-4-git-send-email-rkrcmar@redhat.com>
On Thu, Jul 16, 2015 at 06:04:01PM +0200, Radim Krčmář wrote:
> It's horrible both ways and I prefer this one.
>
> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
As you say its ugly either way, but I think the amount of duplicated
code pattern is not too bad, and IMHO it is slightly clearer to read
without the macro usage.
I won't object to merge if other people think this macro usage is worth
while, but I don't think there's compelling need for it.
> ---
> v3: make wrappers 'static'
> v2: new
>
> crypto/cipher-nettle.c | 47 +++++++++++++++++------------------------------
> 1 file changed, 17 insertions(+), 30 deletions(-)
>
> diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c
> index 3e3c4c9cbf2f..5a9d506560ae 100644
> --- a/crypto/cipher-nettle.c
> +++ b/crypto/cipher-nettle.c
> @@ -33,34 +33,21 @@ typedef const void * cipher_ctx_t;
> typedef size_t cipher_length_t;
> #endif
>
> -static nettle_cipher_func aes_encrypt_wrapper;
> -static nettle_cipher_func aes_decrypt_wrapper;
> -static nettle_cipher_func des_encrypt_wrapper;
> -static nettle_cipher_func des_decrypt_wrapper;
> +#define WRAP(cipher) \
> + static nettle_cipher_func cipher##_wrapper; \
> + static void cipher##_wrapper(cipher_ctx_t ctx, cipher_length_t length, \
> + uint8_t *dst, const uint8_t *src) \
> + { \
> + cipher(ctx, length, dst, src); \
> + }
>
> -static void aes_encrypt_wrapper(cipher_ctx_t ctx, cipher_length_t length,
> - uint8_t *dst, const uint8_t *src)
> -{
> - aes_encrypt(ctx, length, dst, src);
> -}
> +#define WRAPPED(cipher) \
> + cipher##_wrapper
>
> -static void aes_decrypt_wrapper(cipher_ctx_t ctx, cipher_length_t length,
> - uint8_t *dst, const uint8_t *src)
> -{
> - aes_encrypt(ctx, length, dst, src);
> -}
> -
> -static void des_encrypt_wrapper(cipher_ctx_t ctx, cipher_length_t length,
> - uint8_t *dst, const uint8_t *src)
> -{
> - des_encrypt(ctx, length, dst, src);
> -}
> -
> -static void des_decrypt_wrapper(cipher_ctx_t ctx, cipher_length_t length,
> - uint8_t *dst, const uint8_t *src)
> -{
> - des_decrypt(ctx, length, dst, src);
> -}
> +WRAP(aes_encrypt)
> +WRAP(aes_decrypt)
> +WRAP(des_encrypt)
> +WRAP(des_decrypt)
>
> typedef struct QCryptoCipherNettle QCryptoCipherNettle;
> struct QCryptoCipherNettle {
> @@ -122,8 +109,8 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg,
> des_set_key(ctx->ctx_encrypt, rfbkey);
> g_free(rfbkey);
>
> - ctx->alg_encrypt = des_encrypt_wrapper;
> - ctx->alg_decrypt = des_decrypt_wrapper;
> + ctx->alg_encrypt = WRAPPED(des_encrypt);
> + ctx->alg_decrypt = WRAPPED(des_decrypt);
>
> ctx->niv = DES_BLOCK_SIZE;
> break;
> @@ -137,8 +124,8 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg,
> aes_set_encrypt_key(ctx->ctx_encrypt, nkey, key);
> aes_set_decrypt_key(ctx->ctx_decrypt, nkey, key);
>
> - ctx->alg_encrypt = aes_encrypt_wrapper;
> - ctx->alg_decrypt = aes_decrypt_wrapper;
> + ctx->alg_encrypt = WRAPPED(aes_encrypt);
> + ctx->alg_decrypt = WRAPPED(aes_decrypt);
>
> ctx->niv = AES_BLOCK_SIZE;
> break;
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
prev parent reply other threads:[~2015-07-17 10:59 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-16 16:03 [Qemu-devel] [PATCH v3 0/3] crypto: nettle fixes Radim Krčmář
2015-07-16 16:03 ` [Qemu-devel] [PATCH v3 1/3] crypto: fix build with nettle >= 3.0.0 Radim Krčmář
2015-07-17 10:54 ` Daniel P. Berrange
2015-07-16 16:04 ` [Qemu-devel] [PATCH v3 2/3] crypto: avoid undefined behavior in nettle calls Radim Krčmář
2015-07-17 10:55 ` Daniel P. Berrange
2015-07-17 17:43 ` Kevin Wolf
2015-07-16 16:04 ` [Qemu-devel] [PATCH v3 3/3] crypto: use CPP for wrapper definitions in nettle Radim Krčmář
2015-07-16 16:11 ` Paolo Bonzini
2015-07-17 11:00 ` Daniel P. Berrange
2015-07-17 11:00 ` Paolo Bonzini
2015-07-17 10:58 ` Daniel P. Berrange [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150717105857.GH4835@redhat.com \
--to=berrange@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rkrcmar@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.