• Eric Biggers's avatar
    crypto: shash - optimize the default digest and finup · 313a4074
    Eric Biggers authored
    For an shash algorithm that doesn't implement ->digest, currently
    crypto_shash_digest() with aligned input makes 5 indirect calls: 1 to
    shash_digest_unaligned(), 1 to ->init, 2 to ->update ('alignmask + 1'
    bytes, then the rest), then 1 to ->final.  This is true even if the
    algorithm implements ->finup.  This is caused by an unnecessary fallback
    to code meant to handle unaligned inputs.  In fact,
    crypto_shash_digest() already does the needed alignment check earlier.
    Therefore, optimize the number of indirect calls for aligned inputs to 3
    when the algorithm implements ->finup.  It remains at 5 when the
    algorithm implements neither ->finup nor ->digest.
    
    Similarly, for an shash algorithm that doesn't implement ->finup,
    currently crypto_shash_finup() with aligned input makes 4 indirect
    calls: 1 to shash_finup_unaligned(), 2 to ->update, and
    1 to ->final.  Optimize this to 3 calls.
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    313a4074
shash.c 18.4 KB