Re: [PATCH net-next v5 09/20] zinc: Poly1305 ARM and ARM64 implementations
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
Date: 2018-09-19 00:17:28
Also in:
linux-arm-kernel, linux-crypto, lkml
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
Date: 2018-09-19 00:17:28
Also in:
linux-arm-kernel, linux-crypto, lkml
Hi Eric, On Wed, Sep 19, 2018 at 12:55 AM Eric Biggers [off-list ref] wrote:
This will compute the wrong digest if called with simd_context=HAVE_FULL_SIMD and then later with simd_context=HAVE_NO_SIMD, since poly1305_blocks_neon() converts the accumulator from base 32 to base 26, whereas poly1305_blocks_arm() assumes it is still in base 32. Is that intentional? I'm sure this is a rare case, but my understanding is that the existing crypto API doesn't preclude calling successive steps in different contexts. And I'm concerned that it could be relevant in some cases, e.g. especially if people are importing a hash state that was exported earlier. Handling it by silently computing the wrong digest is not a great idea...
Indeed you're right; Samuel and I were just discussing that recently. I'd rather handle this correctly even if the contexts change, so I'll see if I can fix this up properly for that unlikely case in the next revision. Jason