crypto: sha3-generic - export init/update/final routines

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>
This commit is contained in:
Ard Biesheuvel 2018-01-19 12:04:36 +00:00 committed by Herbert Xu
parent beeb504adf
commit 6657674b23
2 changed files with 23 additions and 15 deletions

View 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); struct sha3_state *sctx = shash_desc_ctx(desc);
unsigned int digest_size = crypto_shash_digestsize(desc->tfm); 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)); memset(sctx->st, 0, sizeof(sctx->st));
return 0; 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) unsigned int len)
{ {
struct sha3_state *sctx = shash_desc_ctx(desc); 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; 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); struct sha3_state *sctx = shash_desc_ctx(desc);
unsigned int i, inlen = sctx->partial; 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)); memset(sctx, 0, sizeof(*sctx));
return 0; return 0;
} }
EXPORT_SYMBOL(crypto_sha3_final);
static struct shash_alg algs[] = { { static struct shash_alg algs[] = { {
.digestsize = SHA3_224_DIGEST_SIZE, .digestsize = SHA3_224_DIGEST_SIZE,
.init = sha3_init, .init = crypto_sha3_init,
.update = sha3_update, .update = crypto_sha3_update,
.final = sha3_final, .final = crypto_sha3_final,
.descsize = sizeof(struct sha3_state), .descsize = sizeof(struct sha3_state),
.base.cra_name = "sha3-224", .base.cra_name = "sha3-224",
.base.cra_driver_name = "sha3-224-generic", .base.cra_driver_name = "sha3-224-generic",
@ -234,9 +237,9 @@ static struct shash_alg algs[] = { {
.base.cra_module = THIS_MODULE, .base.cra_module = THIS_MODULE,
}, { }, {
.digestsize = SHA3_256_DIGEST_SIZE, .digestsize = SHA3_256_DIGEST_SIZE,
.init = sha3_init, .init = crypto_sha3_init,
.update = sha3_update, .update = crypto_sha3_update,
.final = sha3_final, .final = crypto_sha3_final,
.descsize = sizeof(struct sha3_state), .descsize = sizeof(struct sha3_state),
.base.cra_name = "sha3-256", .base.cra_name = "sha3-256",
.base.cra_driver_name = "sha3-256-generic", .base.cra_driver_name = "sha3-256-generic",
@ -245,9 +248,9 @@ static struct shash_alg algs[] = { {
.base.cra_module = THIS_MODULE, .base.cra_module = THIS_MODULE,
}, { }, {
.digestsize = SHA3_384_DIGEST_SIZE, .digestsize = SHA3_384_DIGEST_SIZE,
.init = sha3_init, .init = crypto_sha3_init,
.update = sha3_update, .update = crypto_sha3_update,
.final = sha3_final, .final = crypto_sha3_final,
.descsize = sizeof(struct sha3_state), .descsize = sizeof(struct sha3_state),
.base.cra_name = "sha3-384", .base.cra_name = "sha3-384",
.base.cra_driver_name = "sha3-384-generic", .base.cra_driver_name = "sha3-384-generic",
@ -256,9 +259,9 @@ static struct shash_alg algs[] = { {
.base.cra_module = THIS_MODULE, .base.cra_module = THIS_MODULE,
}, { }, {
.digestsize = SHA3_512_DIGEST_SIZE, .digestsize = SHA3_512_DIGEST_SIZE,
.init = sha3_init, .init = crypto_sha3_init,
.update = sha3_update, .update = crypto_sha3_update,
.final = sha3_final, .final = crypto_sha3_final,
.descsize = sizeof(struct sha3_state), .descsize = sizeof(struct sha3_state),
.base.cra_name = "sha3-512", .base.cra_name = "sha3-512",
.base.cra_driver_name = "sha3-512-generic", .base.cra_driver_name = "sha3-512-generic",

View File

@ -26,4 +26,9 @@ struct sha3_state {
u8 buf[SHA3_224_BLOCK_SIZE]; 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 #endif