[PATCH v4 13/19] crypto: talitos/skcipher - 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 fallback setkey assignment (skcipher_alg->setkey ?: skcipher_setkey) is no longer needed because each macro specifies the correct setkey handler directly. Reviewed-by: Christophe Leroy (CS GROUP) <[email protected]> Signed-off-by: Paul Louvel <[email protected]> --- drivers/crypto/talitos/talitos-skcipher.c | 212 ++++++++++++------------------ 1 file changed, 82 insertions(+), 130 deletions(-) diff --git a/drivers/crypto/talitos/talitos-skcipher.c b/drivers/crypto/talitos/talitos-skcipher.c index 4c03573efb0a..b12191243aae 100644 --- a/drivers/crypto/talitos/talitos-skcipher.c +++ b/drivers/crypto/talitos/talitos-skcipher.c @@ -237,131 +237,89 @@ static void talitos_cra_exit_skcipher(struct crypto_skcipher *tfm) talitos_cra_exit(crypto_skcipher_tfm(tfm)); } +#define TALITOS_SKCIPHER_ALG_COMMON(name, blk_sz, iv_sz, min_ksz, max_ksz, \ + set_key, desc_template) \ + { \ + .type = CRYPTO_ALG_TYPE_SKCIPHER, \ + .alg.skcipher = { \ + .base.cra_name = name, \ + .base.cra_driver_name = name"-talitos", \ + .base.cra_blocksize = blk_sz, \ + .base.cra_flags = CRYPTO_ALG_ASYNC | \ + CRYPTO_ALG_ALLOCATES_MEMORY | \ + CRYPTO_ALG_KERN_DRIVER_ONLY, \ + .base.cra_priority = TALITOS_CRA_PRIORITY, \ + .base.cra_ctxsize = sizeof(struct talitos_ctx), \ + .base.cra_module = THIS_MODULE, \ + .min_keysize = min_ksz, \ + .max_keysize = max_ksz, \ + .ivsize = iv_sz, \ + .setkey = set_key, \ + .init = talitos_cra_init_skcipher, \ + .exit = talitos_cra_exit_skcipher, \ + .encrypt = skcipher_encrypt, \ + .decrypt = skcipher_decrypt, \ + }, \ + .desc_hdr_template = desc_template, \ + } + +#define TALITOS_SKCIPHER_ALG_AES(name, blk_sz, iv_sz, desc_template) \ + TALITOS_SKCIPHER_ALG_COMMON(name, blk_sz, iv_sz, AES_MIN_KEY_SIZE, \ + AES_MAX_KEY_SIZE, skcipher_aes_setkey, \ + desc_template) + +#define TALITOS_SKCIPHER_ALG_DES(name, blk_sz, iv_sz, desc_template) \ + TALITOS_SKCIPHER_ALG_COMMON(name, blk_sz, iv_sz, DES_KEY_SIZE, \ + DES_KEY_SIZE, skcipher_des_setkey, \ + desc_template) + +#define TALITOS_SKCIPHER_ALG_DES3(name, blk_sz, iv_sz, desc_template) \ + TALITOS_SKCIPHER_ALG_COMMON(name, blk_sz, iv_sz, DES3_EDE_KEY_SIZE, \ + DES3_EDE_KEY_SIZE, skcipher_des3_setkey, \ + desc_template) + static struct talitos_alg_template skcipher_driver_algs[] = { - { .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "ecb(aes)", - .base.cra_driver_name = "ecb-aes-talitos", - .base.cra_blocksize = AES_BLOCK_SIZE, - .base.cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY, - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .setkey = skcipher_aes_setkey, - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_AESU, - }, - { .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "cbc(aes)", - .base.cra_driver_name = "cbc-aes-talitos", - .base.cra_blocksize = AES_BLOCK_SIZE, - .base.cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY, - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .ivsize = AES_BLOCK_SIZE, - .setkey = skcipher_aes_setkey, - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_AESU | - DESC_HDR_MODE0_AESU_CBC, - }, - { .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "ctr(aes)", - .base.cra_driver_name = "ctr-aes-talitos", - .base.cra_blocksize = 1, - .base.cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY, - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .ivsize = AES_BLOCK_SIZE, - .setkey = skcipher_aes_setkey, - }, - .desc_hdr_template = DESC_HDR_TYPE_AESU_CTR_NONSNOOP | - DESC_HDR_SEL0_AESU | - DESC_HDR_MODE0_AESU_CTR, - }, - { .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "ctr(aes)", - .base.cra_driver_name = "ctr-aes-talitos", - .base.cra_blocksize = 1, - .base.cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY, - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .ivsize = AES_BLOCK_SIZE, - .setkey = skcipher_aes_setkey, - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_AESU | - DESC_HDR_MODE0_AESU_CTR, - }, - { .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "ecb(des)", - .base.cra_driver_name = "ecb-des-talitos", - .base.cra_blocksize = DES_BLOCK_SIZE, - .base.cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY, - .min_keysize = DES_KEY_SIZE, - .max_keysize = DES_KEY_SIZE, - .setkey = skcipher_des_setkey, - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_DEU, - }, - { .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "cbc(des)", - .base.cra_driver_name = "cbc-des-talitos", - .base.cra_blocksize = DES_BLOCK_SIZE, - .base.cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY, - .min_keysize = DES_KEY_SIZE, - .max_keysize = DES_KEY_SIZE, - .ivsize = DES_BLOCK_SIZE, - .setkey = skcipher_des_setkey, - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_DEU | - DESC_HDR_MODE0_DEU_CBC, - }, - { .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "ecb(des3_ede)", - .base.cra_driver_name = "ecb-3des-talitos", - .base.cra_blocksize = DES3_EDE_BLOCK_SIZE, - .base.cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY, - .min_keysize = DES3_EDE_KEY_SIZE, - .max_keysize = DES3_EDE_KEY_SIZE, - .setkey = skcipher_des3_setkey, - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_DEU | - DESC_HDR_MODE0_DEU_3DES, - }, - { .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "cbc(des3_ede)", - .base.cra_driver_name = "cbc-3des-talitos", - .base.cra_blocksize = DES3_EDE_BLOCK_SIZE, - .base.cra_flags = CRYPTO_ALG_ASYNC | - CRYPTO_ALG_ALLOCATES_MEMORY, - .min_keysize = DES3_EDE_KEY_SIZE, - .max_keysize = DES3_EDE_KEY_SIZE, - .ivsize = DES3_EDE_BLOCK_SIZE, - .setkey = skcipher_des3_setkey, - }, - .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | - DESC_HDR_SEL0_DEU | - DESC_HDR_MODE0_DEU_CBC | - DESC_HDR_MODE0_DEU_3DES, - }, + /* AES */ + + TALITOS_SKCIPHER_ALG_AES("ecb(aes)", AES_BLOCK_SIZE, 0, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_AESU), + + TALITOS_SKCIPHER_ALG_AES("cbc(aes)", AES_BLOCK_SIZE, AES_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_AESU | + DESC_HDR_MODE0_AESU_CBC), + + TALITOS_SKCIPHER_ALG_AES("ctr(aes)", 1, AES_BLOCK_SIZE, + DESC_HDR_TYPE_AESU_CTR_NONSNOOP | + DESC_HDR_SEL0_AESU | + DESC_HDR_MODE0_AESU_CTR), + + TALITOS_SKCIPHER_ALG_AES("ctr(aes)", 1, AES_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_AESU | + DESC_HDR_MODE0_AESU_CTR), + /* DES */ + + TALITOS_SKCIPHER_ALG_DES("ecb(des)", DES_BLOCK_SIZE, 0, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_DEU), + + TALITOS_SKCIPHER_ALG_DES("cbc(des)", DES_BLOCK_SIZE, DES_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_DEU | + DESC_HDR_MODE0_DEU_CBC), + /* DES3 */ + + TALITOS_SKCIPHER_ALG_DES3("ecb(des3_ede)", DES3_EDE_BLOCK_SIZE, 0, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | + DESC_HDR_SEL0_DEU | + DESC_HDR_MODE0_DEU_3DES), + + TALITOS_SKCIPHER_ALG_DES3( + "cbc(des3_ede)", DES3_EDE_BLOCK_SIZE, DES3_EDE_BLOCK_SIZE, + DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU | DESC_HDR_SEL0_DEU | + DESC_HDR_MODE0_DEU_CBC | DESC_HDR_MODE0_DEU_3DES), }; int talitos_register_skcipher(struct device *dev) @@ -383,12 +341,6 @@ int talitos_register_skcipher(struct device *dev) if (has_ftr_sec1(priv)) alg->cra_alignmask = 3; - skcipher_alg->init = talitos_cra_init_skcipher; - skcipher_alg->exit = talitos_cra_exit_skcipher; - skcipher_alg->setkey = skcipher_alg->setkey ?: skcipher_setkey; - skcipher_alg->encrypt = skcipher_encrypt; - skcipher_alg->decrypt = skcipher_decrypt; - if (!strcmp(alg->cra_name, "ctr(aes)") && !has_ftr_sec1(priv) && DESC_TYPE(skcipher_driver_algs[i].desc_hdr_template) != DESC_TYPE(DESC_HDR_TYPE_AESU_CTR_NONSNOOP)) { -- 2.55.0