All of lore.kernel.org
 help / color / mirror / Atom feed
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 :|

      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.