]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: arm64/sha2-ce - implement ->digest for sha256
authorEric Biggers <ebiggers@google.com>
Mon, 9 Oct 2023 07:53:27 +0000 (00:53 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 20 Oct 2023 05:39:25 +0000 (13:39 +0800)
Implement a ->digest function for sha256-ce.  This improves the
performance of crypto_shash_digest() with this algorithm by reducing the
number of indirect calls that are made.  This only adds ~112 bytes of
code, mostly for the inlined init, as the finup function is tail-called.

For now, don't bother with this for sha224, since sha224 is rarely used.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/arm64/crypto/sha2-ce-glue.c

index c57a6119fefc586d9ac1264efaff8159bfe6aec3..f2f118b0e1c1f4f83bcbe5fae5a51d25577e57ca 100644 (file)
@@ -116,6 +116,13 @@ static int sha256_ce_final(struct shash_desc *desc, u8 *out)
        return sha256_base_finish(desc, out);
 }
 
+static int sha256_ce_digest(struct shash_desc *desc, const u8 *data,
+                           unsigned int len, u8 *out)
+{
+       sha256_base_init(desc);
+       return sha256_ce_finup(desc, data, len, out);
+}
+
 static int sha256_ce_export(struct shash_desc *desc, void *out)
 {
        struct sha256_ce_state *sctx = shash_desc_ctx(desc);
@@ -155,6 +162,7 @@ static struct shash_alg algs[] = { {
        .update                 = sha256_ce_update,
        .final                  = sha256_ce_final,
        .finup                  = sha256_ce_finup,
+       .digest                 = sha256_ce_digest,
        .export                 = sha256_ce_export,
        .import                 = sha256_ce_import,
        .descsize               = sizeof(struct sha256_ce_state),