crypto: sha3-generic - export init/update/final routines
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Fri, 19 Jan 2018 12:04:36 +0000 (12:04 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 25 Jan 2018 14:10:34 +0000 (01:10 +1100)
To allow accelerated implementations to fall back to the generic
routines, e.g., in contexts where a SIMD based implementation is
not allowed to run, expose the generic SHA3 init/update/final
routines to other modules.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/sha3_generic.c
include/crypto/sha3.h

index c7084a24eaf92fd9a5a717d0ba353bfb481d6052..a965b9d8055983af4353ae39fe676b7789c8f93f 100644 (file)
@@ -145,7 +145,7 @@ static void __attribute__((__optimize__("O3"))) keccakf(u64 st[25])
        }
 }
 
-static int sha3_init(struct shash_desc *desc)
+int crypto_sha3_init(struct shash_desc *desc)
 {
        struct sha3_state *sctx = shash_desc_ctx(desc);
        unsigned int digest_size = crypto_shash_digestsize(desc->tfm);
@@ -157,8 +157,9 @@ static int sha3_init(struct shash_desc *desc)
        memset(sctx->st, 0, sizeof(sctx->st));
        return 0;
 }
+EXPORT_SYMBOL(crypto_sha3_init);
 
-static int sha3_update(struct shash_desc *desc, const u8 *data,
+int crypto_sha3_update(struct shash_desc *desc, const u8 *data,
                       unsigned int len)
 {
        struct sha3_state *sctx = shash_desc_ctx(desc);
@@ -194,8 +195,9 @@ static int sha3_update(struct shash_desc *desc, const u8 *data,
 
        return 0;
 }
+EXPORT_SYMBOL(crypto_sha3_update);
 
-static int sha3_final(struct shash_desc *desc, u8 *out)
+int crypto_sha3_final(struct shash_desc *desc, u8 *out)
 {
        struct sha3_state *sctx = shash_desc_ctx(desc);
        unsigned int i, inlen = sctx->partial;
@@ -220,12 +222,13 @@ static int sha3_final(struct shash_desc *desc, u8 *out)
        memset(sctx, 0, sizeof(*sctx));
        return 0;
 }
+EXPORT_SYMBOL(crypto_sha3_final);
 
 static struct shash_alg algs[] = { {
        .digestsize             = SHA3_224_DIGEST_SIZE,
-       .init                   = sha3_init,
-       .update                 = sha3_update,
-       .final                  = sha3_final,
+       .init                   = crypto_sha3_init,
+       .update                 = crypto_sha3_update,
+       .final                  = crypto_sha3_final,
        .descsize               = sizeof(struct sha3_state),
        .base.cra_name          = "sha3-224",
        .base.cra_driver_name   = "sha3-224-generic",
@@ -234,9 +237,9 @@ static struct shash_alg algs[] = { {
        .base.cra_module        = THIS_MODULE,
 }, {
        .digestsize             = SHA3_256_DIGEST_SIZE,
-       .init                   = sha3_init,
-       .update                 = sha3_update,
-       .final                  = sha3_final,
+       .init                   = crypto_sha3_init,
+       .update                 = crypto_sha3_update,
+       .final                  = crypto_sha3_final,
        .descsize               = sizeof(struct sha3_state),
        .base.cra_name          = "sha3-256",
        .base.cra_driver_name   = "sha3-256-generic",
@@ -245,9 +248,9 @@ static struct shash_alg algs[] = { {
        .base.cra_module        = THIS_MODULE,
 }, {
        .digestsize             = SHA3_384_DIGEST_SIZE,
-       .init                   = sha3_init,
-       .update                 = sha3_update,
-       .final                  = sha3_final,
+       .init                   = crypto_sha3_init,
+       .update                 = crypto_sha3_update,
+       .final                  = crypto_sha3_final,
        .descsize               = sizeof(struct sha3_state),
        .base.cra_name          = "sha3-384",
        .base.cra_driver_name   = "sha3-384-generic",
@@ -256,9 +259,9 @@ static struct shash_alg algs[] = { {
        .base.cra_module        = THIS_MODULE,
 }, {
        .digestsize             = SHA3_512_DIGEST_SIZE,
-       .init                   = sha3_init,
-       .update                 = sha3_update,
-       .final                  = sha3_final,
+       .init                   = crypto_sha3_init,
+       .update                 = crypto_sha3_update,
+       .final                  = crypto_sha3_final,
        .descsize               = sizeof(struct sha3_state),
        .base.cra_name          = "sha3-512",
        .base.cra_driver_name   = "sha3-512-generic",
index 1339dcdbc9b22d9db07c412622fa983c5501c37f..080f60c2e6b16012bd47d931b5179e263859609c 100644 (file)
@@ -26,4 +26,9 @@ struct sha3_state {
        u8              buf[SHA3_224_BLOCK_SIZE];
 };
 
+int crypto_sha3_init(struct shash_desc *desc);
+int crypto_sha3_update(struct shash_desc *desc, const u8 *data,
+                      unsigned int len);
+int crypto_sha3_final(struct shash_desc *desc, u8 *out);
+
 #endif