All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, mreitz@redhat.com,
	kwolf@redhat.com, den@openvz.org
Subject: Re: [Qemu-devel] [PATCH v2 2/5] crypto/block: refactor qcrypto_block_*crypt_helper functions
Date: Thu, 6 Dec 2018 10:36:03 +0000	[thread overview]
Message-ID: <20181206103603.GK29540@redhat.com> (raw)
In-Reply-To: <20181205144700.26563-3-vsementsov@virtuozzo.com>

On Wed, Dec 05, 2018 at 05:46:57PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> qcrypto_block_encrypt_helper and qcrypto_block_decrypt_helper are
> almost identical, let's reduce code duplication and simplify further
> improvements.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>  crypto/block.c | 81 +++++++++++++++++++-------------------------------
>  1 file changed, 31 insertions(+), 50 deletions(-)
> 
> diff --git a/crypto/block.c b/crypto/block.c
> index e59d1140fe..f4101f0841 100644
> --- a/crypto/block.c
> +++ b/crypto/block.c
> @@ -190,14 +190,21 @@ void qcrypto_block_free(QCryptoBlock *block)
>  }
>  
>  
> -int qcrypto_block_decrypt_helper(QCryptoCipher *cipher,
> -                                 size_t niv,
> -                                 QCryptoIVGen *ivgen,
> -                                 int sectorsize,
> -                                 uint64_t offset,
> -                                 uint8_t *buf,
> -                                 size_t len,
> -                                 Error **errp)
> +typedef int (*QCryptoCipherEncryptFunc)(QCryptoCipher *cipher,
> +                                        const void *in,
> +                                        void *out,
> +                                        size_t len,
> +                                        Error **errp);
> +
> +static int do_qcrypto_block_encrypt(QCryptoCipher *cipher,

Can we call this functuon 'encdec', since it is misleading to call
it just 'encrypt' when its used for decrypt too.

> +                                    size_t niv,
> +                                    QCryptoIVGen *ivgen,
> +                                    int sectorsize,
> +                                    uint64_t offset,
> +                                    uint8_t *buf,
> +                                    size_t len,
> +                                    QCryptoCipherEncryptFunc func,

And call this 'EncDecFunc' too

> +                                    Error **errp)
>  {
>      uint8_t *iv;
>      int ret = -1;
> @@ -226,8 +233,7 @@ int qcrypto_block_decrypt_helper(QCryptoCipher *cipher,
>          }
>  
>          nbytes = len > sectorsize ? sectorsize : len;
> -        if (qcrypto_cipher_decrypt(cipher, buf, buf,
> -                                   nbytes, errp) < 0) {
> +        if (func(cipher, buf, buf, nbytes, errp) < 0) {
>              goto cleanup;
>          }
>  
> @@ -243,7 +249,7 @@ int qcrypto_block_decrypt_helper(QCryptoCipher *cipher,
>  }
>  
>  
> -int qcrypto_block_encrypt_helper(QCryptoCipher *cipher,
> +int qcrypto_block_decrypt_helper(QCryptoCipher *cipher,
>                                   size_t niv,
>                                   QCryptoIVGen *ivgen,
>                                   int sectorsize,
> @@ -252,45 +258,20 @@ int qcrypto_block_encrypt_helper(QCryptoCipher *cipher,
>                                   size_t len,
>                                   Error **errp)
>  {
> -    uint8_t *iv;
> -    int ret = -1;
> -    uint64_t startsector = offset / sectorsize;
> -
> -    assert(QEMU_IS_ALIGNED(offset, sectorsize));
> -    assert(QEMU_IS_ALIGNED(len, sectorsize));
> -
> -    iv = niv ? g_new0(uint8_t, niv) : NULL;
> -
> -    while (len > 0) {
> -        size_t nbytes;
> -        if (niv) {
> -            if (qcrypto_ivgen_calculate(ivgen,
> -                                        startsector,
> -                                        iv, niv,
> -                                        errp) < 0) {
> -                goto cleanup;
> -            }
> -
> -            if (qcrypto_cipher_setiv(cipher,
> -                                     iv, niv,
> -                                     errp) < 0) {
> -                goto cleanup;
> -            }
> -        }
> -
> -        nbytes = len > sectorsize ? sectorsize : len;
> -        if (qcrypto_cipher_encrypt(cipher, buf, buf,
> -                                   nbytes, errp) < 0) {
> -            goto cleanup;
> -        }
> +    return do_qcrypto_block_encrypt(cipher, niv, ivgen, sectorsize, offset,
> +                                    buf, len, qcrypto_cipher_decrypt, errp);
> +}
>  
> -        startsector++;
> -        buf += nbytes;
> -        len -= nbytes;
> -    }
>  
> -    ret = 0;
> - cleanup:
> -    g_free(iv);
> -    return ret;
> +int qcrypto_block_encrypt_helper(QCryptoCipher *cipher,
> +                                 size_t niv,
> +                                 QCryptoIVGen *ivgen,
> +                                 int sectorsize,
> +                                 uint64_t offset,
> +                                 uint8_t *buf,
> +                                 size_t len,
> +                                 Error **errp)
> +{
> +    return do_qcrypto_block_encrypt(cipher, niv, ivgen, sectorsize, offset,
> +                                    buf, len, qcrypto_cipher_encrypt, errp);
>  }
> -- 
> 2.18.0
> 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

  reply	other threads:[~2018-12-06 10:38 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-05 14:46 [Qemu-devel] [PATCH v2 0/5] crypto threads Vladimir Sementsov-Ogievskiy
2018-12-05 14:46 ` [Qemu-devel] [PATCH v2 1/5] crypto/block-luks: fix memory leak in qcrypto_block_luks_create Vladimir Sementsov-Ogievskiy
2018-12-06 10:34   ` Daniel P. Berrangé
2018-12-07 12:27   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2018-12-05 14:46 ` [Qemu-devel] [PATCH v2 2/5] crypto/block: refactor qcrypto_block_*crypt_helper functions Vladimir Sementsov-Ogievskiy
2018-12-06 10:36   ` Daniel P. Berrangé [this message]
2018-12-06 17:36     ` Vladimir Sementsov-Ogievskiy
2018-12-07  9:45       ` Daniel P. Berrangé
2018-12-07 12:37   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2018-12-05 14:46 ` [Qemu-devel] [PATCH v2 3/5] crypto/block: rename qcrypto_block_*crypt_helper Vladimir Sementsov-Ogievskiy
2018-12-06 10:39   ` Daniel P. Berrangé
2018-12-05 14:46 ` [Qemu-devel] [PATCH v2 4/5] crypto/block: introduce qcrypto_block_*crypt_helper functions Vladimir Sementsov-Ogievskiy
2018-12-06 10:39   ` Daniel P. Berrangé
2018-12-05 14:47 ` [Qemu-devel] [PATCH v2 5/5] crypto: support multiple threads accessing one QCryptoBlock Vladimir Sementsov-Ogievskiy
2018-12-06 10:54   ` Daniel P. Berrangé
2018-12-06 17:42     ` Vladimir Sementsov-Ogievskiy
2018-12-07  9:45       ` Daniel P. Berrangé
2018-12-07 14:44     ` Vladimir Sementsov-Ogievskiy
2018-12-07 14:45       ` Daniel P. Berrangé

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=20181206103603.GK29540@redhat.com \
    --to=berrange@redhat.com \
    --cc=den@openvz.org \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@virtuozzo.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.