lkml.org 
[lkml]   [2019]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.1 242/371] crypto: arm64/sha1-ce - correct digest for empty data in finup
    Date
    From: Elena Petrova <lenaptr@google.com>

    commit 1d4aaf16defa86d2665ae7db0259d6cb07e2091f upstream.

    The sha1-ce finup implementation for ARM64 produces wrong digest
    for empty input (len=0). Expected: da39a3ee..., result: 67452301...
    (initial value of SHA internal state). The error is in sha1_ce_finup:
    for empty data `finalize` will be 1, so the code is relying on
    sha1_ce_transform to make the final round. However, in
    sha1_base_do_update, the block function will not be called when
    len == 0.

    Fix it by setting finalize to 0 if data is empty.

    Fixes: 07eb54d306f4 ("crypto: arm64/sha1-ce - move SHA-1 ARMv8 implementation to base layer")
    Cc: stable@vger.kernel.org
    Signed-off-by: Elena Petrova <lenaptr@google.com>
    Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/arm64/crypto/sha1-ce-glue.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/arch/arm64/crypto/sha1-ce-glue.c
    +++ b/arch/arm64/crypto/sha1-ce-glue.c
    @@ -54,7 +54,7 @@ static int sha1_ce_finup(struct shash_de
    unsigned int len, u8 *out)
    {
    struct sha1_ce_state *sctx = shash_desc_ctx(desc);
    - bool finalize = !sctx->sst.count && !(len % SHA1_BLOCK_SIZE);
    + bool finalize = !sctx->sst.count && !(len % SHA1_BLOCK_SIZE) && len;

    if (!may_use_simd())
    return crypto_sha1_finup(desc, data, len, out);

    \
     
     \ /
      Last update: 2019-07-24 22:14    [W:2.868 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site