[PATCH v4 12/19] crypto: talitos/hash - Use macro for algorithm definitions
Paul Louvel <[email protected]>
| Newsgroups | org.kernel.vger.linux-crypto,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Replace the repetitive struct initializer entries with preprocessor macros. The HMAC setkey assignment, previously done by comparing the algorithm name at runtime, is now handled by passing ahash_setkey directly through the TALITOS_HMAC_HASH_ALG macro variant. Reviewed-by: Christophe Leroy (CS GROUP) <[email protected]> Signed-off-by: Paul Louvel <[email protected]> --- drivers/crypto/talitos/talitos-hash.c | 331 +++++++++++----------------------- 1 file changed, 103 insertions(+), 228 deletions(-) diff --git a/drivers/crypto/talitos/talitos-hash.c b/drivers/crypto/talitos/talitos-hash.c index c8d9f795147a..a52305969588 100644 --- a/drivers/crypto/talitos/talitos-hash.c +++ b/drivers/crypto/talitos/talitos-hash.c @@ -557,223 +557,110 @@ static void talitos_cra_exit_ahash(struct crypto_ahash *tfm) talitos_cra_exit(crypto_ahash_tfm(tfm)); } -static struct talitos_alg_template hash_driver_algs[] = { - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = MD5_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "md5", - .cra_driver_name = "md5-talitos", - .cra_blocksize = MD5_HMAC_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUA | - DESC_HDR_MODE0_MDEU_MD5, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA1_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "sha1", - .cra_driver_name = "sha1-talitos", - .cra_blocksize = SHA1_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUA | - DESC_HDR_MODE0_MDEU_SHA1, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA224_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "sha224", - .cra_driver_name = "sha224-talitos", - .cra_blocksize = SHA224_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUA | - DESC_HDR_MODE0_MDEU_SHA224, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA256_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "sha256", - .cra_driver_name = "sha256-talitos", - .cra_blocksize = SHA256_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUA | - DESC_HDR_MODE0_MDEU_SHA256, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA384_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "sha384", - .cra_driver_name = "sha384-talitos", - .cra_blocksize = SHA384_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUB | - DESC_HDR_MODE0_MDEUB_SHA384, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA512_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "sha512", - .cra_driver_name = "sha512-talitos", - .cra_blocksize = SHA512_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUB | - DESC_HDR_MODE0_MDEUB_SHA512, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = MD5_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "hmac(md5)", - .cra_driver_name = "hmac-md5-talitos", - .cra_blocksize = MD5_HMAC_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUA | - DESC_HDR_MODE0_MDEU_MD5, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA1_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "hmac(sha1)", - .cra_driver_name = "hmac-sha1-talitos", - .cra_blocksize = SHA1_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUA | - DESC_HDR_MODE0_MDEU_SHA1, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA224_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "hmac(sha224)", - .cra_driver_name = "hmac-sha224-talitos", - .cra_blocksize = SHA224_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUA | - DESC_HDR_MODE0_MDEU_SHA224, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA256_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "hmac(sha256)", - .cra_driver_name = "hmac-sha256-talitos", - .cra_blocksize = SHA256_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUA | - DESC_HDR_MODE0_MDEU_SHA256, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA384_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "hmac(sha384)", - .cra_driver_name = "hmac-sha384-talitos", - .cra_blocksize = SHA384_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUB | - DESC_HDR_MODE0_MDEUB_SHA384, - }, - { .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .halg.digestsize = SHA512_DIGEST_SIZE, - .halg.statesize = sizeof(struct talitos_export_state), - .halg.base = { - .cra_name = "hmac(sha512)", - .cra_driver_name = "hmac-sha512-talitos", - .cra_blocksize = SHA512_BLOCK_SIZE, - .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), - .cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_AHASH_ALG_BLOCK_ONLY, - } - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_MDEUB | - DESC_HDR_MODE0_MDEUB_SHA512, +#define TALITOS_HASH_ALG_COMMON(name, digest_size, block_size, template, \ + set_key) \ + { \ + .type = CRYPTO_ALG_TYPE_AHASH, \ + .alg.hash = { \ + .init_tfm = talitos_cra_init_ahash, \ + .exit_tfm = talitos_cra_exit_ahash, \ + .init = ahash_init, \ + .update = ahash_update, \ + .final = ahash_final, \ + .finup = ahash_finup, \ + .digest = ahash_digest, \ + .setkey = set_key, \ + .import = ahash_import, \ + .export = ahash_export, \ + .halg.digestsize = digest_size, \ + .halg.statesize = sizeof(struct talitos_export_state), \ + .halg.base = { \ + .cra_name = name, \ + .cra_driver_name = name"-talitos", \ + .cra_blocksize = block_size, \ + .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), \ + .cra_flags = CRYPTO_ALG_ASYNC | \ + CRYPTO_ALG_ALLOCATES_MEMORY | \ + CRYPTO_ALG_KERN_DRIVER_ONLY | \ + CRYPTO_AHASH_ALG_BLOCK_ONLY, \ + .cra_priority = TALITOS_CRA_PRIORITY, \ + .cra_ctxsize = sizeof(struct talitos_ctx), \ + .cra_module = THIS_MODULE, \ + }, \ + }, \ + .desc_hdr_template = template, \ } + +#define TALITOS_HASH_ALG(name, digest_size, block_size, desc_hdr_template) \ + TALITOS_HASH_ALG_COMMON(name, digest_size, block_size, \ + desc_hdr_template, NULL) + +#define TALITOS_HMAC_HASH_ALG(name, digest_size, block_size, \ + desc_hdr_template) \ + TALITOS_HASH_ALG_COMMON("hmac(" name ")", digest_size, block_size, \ + desc_hdr_template, ahash_setkey) + +static struct talitos_alg_template hash_driver_algs[] = { + TALITOS_HASH_ALG("md5", MD5_DIGEST_SIZE, MD5_HMAC_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUA | DESC_HDR_MODE0_MDEU_MD5), + + TALITOS_HASH_ALG("sha1", SHA1_DIGEST_SIZE, SHA1_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUA | + DESC_HDR_MODE0_MDEU_SHA1), + + TALITOS_HASH_ALG("sha224", SHA224_DIGEST_SIZE, SHA224_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUA | + DESC_HDR_MODE0_MDEU_SHA224), + + TALITOS_HASH_ALG("sha256", SHA256_DIGEST_SIZE, SHA256_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUA | + DESC_HDR_MODE0_MDEU_SHA256), + + TALITOS_HASH_ALG("sha384", SHA384_DIGEST_SIZE, SHA384_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUB | + DESC_HDR_MODE0_MDEUB_SHA384), + + TALITOS_HASH_ALG("sha512", SHA512_DIGEST_SIZE, SHA512_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUB | + DESC_HDR_MODE0_MDEUB_SHA512), + + /* HMAC */ + + TALITOS_HMAC_HASH_ALG("md5", MD5_DIGEST_SIZE, MD5_HMAC_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUA | + DESC_HDR_MODE0_MDEU_MD5), + + TALITOS_HMAC_HASH_ALG("sha1", SHA1_DIGEST_SIZE, SHA1_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUA | + DESC_HDR_MODE0_MDEU_SHA1), + + TALITOS_HMAC_HASH_ALG("sha224", SHA224_DIGEST_SIZE, SHA224_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUA | + DESC_HDR_MODE0_MDEU_SHA224), + + TALITOS_HMAC_HASH_ALG("sha256", SHA256_DIGEST_SIZE, SHA256_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUA | + DESC_HDR_MODE0_MDEU_SHA256), + + TALITOS_HMAC_HASH_ALG("sha384", SHA384_DIGEST_SIZE, SHA384_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUB | + DESC_HDR_MODE0_MDEUB_SHA384), + + TALITOS_HMAC_HASH_ALG("sha512", SHA512_DIGEST_SIZE, SHA512_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_MDEUB | + DESC_HDR_MODE0_MDEUB_SHA512), }; int talitos_register_hash(struct device *dev) @@ -792,18 +679,6 @@ int talitos_register_hash(struct device *dev) ahash_alg = &hash_driver_algs[i].alg.hash; alg = &ahash_alg->halg.base; - ahash_alg->init_tfm = talitos_cra_init_ahash; - ahash_alg->exit_tfm = talitos_cra_exit_ahash; - ahash_alg->init = ahash_init; - ahash_alg->update = ahash_update; - ahash_alg->final = ahash_final; - ahash_alg->finup = ahash_finup; - ahash_alg->digest = ahash_digest; - if (!strncmp(alg->cra_name, "hmac", 4)) - ahash_alg->setkey = ahash_setkey; - ahash_alg->import = ahash_import; - ahash_alg->export = ahash_export; - if (!(priv->features & TALITOS_FTR_HMAC_OK) && !strncmp(alg->cra_name, "hmac", 4)) { /* not supported */ -- 2.55.0