[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/6] crypto: introduce a xts_uint128 data type
From: |
Alberto Garcia |
Subject: |
Re: [Qemu-devel] [PATCH 3/6] crypto: introduce a xts_uint128 data type |
Date: |
Tue, 09 Oct 2018 17:14:51 +0200 |
User-agent: |
Notmuch/0.18.2 (http://notmuchmail.org) Emacs/24.4.1 (i586-pc-linux-gnu) |
On Tue 09 Oct 2018 04:58:39 PM CEST, Daniel P. Berrangé wrote:
>> > @@ -85,7 +90,7 @@ void xts_decrypt(const void *datactx,
>> > uint8_t *dst,
>> > const uint8_t *src)
>> > {
>> > - uint8_t PP[XTS_BLOCK_SIZE], CC[XTS_BLOCK_SIZE], T[XTS_BLOCK_SIZE];
>> > + xts_uint128 PP, CC, T;
>> > unsigned long i, m, mo, lim;
>>
>> [...]
>>
>> > /* Pm = first length % XTS_BLOCK_SIZE bytes of PP */
>> > for (i = 0; i < mo; i++) {
>> > - CC[i] = src[XTS_BLOCK_SIZE + i];
>> > - dst[XTS_BLOCK_SIZE + i] = PP[i];
>> > + ((uint8_t *)&CC)[i] = src[XTS_BLOCK_SIZE + i];
>> > + dst[XTS_BLOCK_SIZE + i] = ((uint8_t *)&PP)[i];
>> > }
>>
>> On second thoughts, these casts are a bit cumbersome. I wonder if it
>> isn't better to keep the array a uint8_t[] and only treat it as
>> xts_uint128 in the places where you actually do 64-bit operations
>> (xts_uint128_xor, xts_mult_x).
>
> I had done that originally, but it just shifts ugly casts from one
> place to another place in the code.
Does it really? There's a dozen casts to uint8_t * in different
places. If you use uint_8[] you would only need something like this:
static void xts_mult_x(uint8_t *I8)
{
xts_uint128 *I = (xts_uint128 *) I8;
/* ... the rest of the function remains the same ... */
}
And something similar in xts_uint128_xor(), which could be an inline
function instead of a macro.
Berto
[Qemu-devel] [PATCH 6/6] crypto: annotate xts_tweak_encdec as inlineable, Daniel P . Berrangé, 2018/10/09
[Qemu-devel] [PATCH 4/6] crypto: convert xts_tweak_encdec to use xts_uint128 type, Daniel P . Berrangé, 2018/10/09