diff --git a/arch/arm/configs/imx_v7_defconfig b/arch/arm/configs/imx_v7_defconfig index d74db3cf2a947f18df5edc1c939cf701a72e8bd7..517c4a8071c51ac02f023adc5855f4fcd2074ad2 100644 --- a/arch/arm/configs/imx_v7_defconfig +++ b/arch/arm/configs/imx_v7_defconfig @@ -448,6 +448,7 @@ CONFIG_CRYPTO_TGR192=y CONFIG_CRYPTO_WP512=y CONFIG_CRYPTO_BLOWFISH=y CONFIG_CRYPTO_CAMELLIA=y +CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_TWOFISH=y CONFIG_CRYPTO_DEV_FSL_CAAM=y CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y diff --git a/drivers/crypto/caam/Kconfig b/drivers/crypto/caam/Kconfig index 855abf241db5fdb355ad281acf87e19754362405..c476e5b3c95d5a10b02d3abce6ce9524411d70be 100644 --- a/drivers/crypto/caam/Kconfig +++ b/drivers/crypto/caam/Kconfig @@ -80,7 +80,6 @@ config CRYPTO_DEV_FSL_CAAM_CRYPTO_API select CRYPTO_AEAD select CRYPTO_AUTHENC select CRYPTO_BLKCIPHER - select CRYPTO_DES help Selecting this will offload crypto for users of the scatterlist crypto API (such as the linux native IPSec diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index 5a1c75fdf99dabf64ea381c8dca5dcf1e3661e62..01db70e9d6576c71f18ac67564f5f8275b75b4de 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c @@ -788,33 +788,6 @@ exit: return ret; } - -static int ablkcipher_des_setkey(struct crypto_ablkcipher *ablkcipher, - const u8 *key, unsigned int keylen) -{ - u32 tmp[DES_EXPKEY_WORDS]; - u32 flags; - int ret; - - if (keylen != DES_KEY_SIZE) { - crypto_ablkcipher_set_flags(ablkcipher, - CRYPTO_TFM_RES_BAD_KEY_LEN); - return -EINVAL; - } - - ret = des_ekey(tmp, key); - - flags = crypto_ablkcipher_get_flags(ablkcipher); - if (!ret && (flags & CRYPTO_TFM_REQ_WEAK_KEY)) { - crypto_ablkcipher_set_flags(ablkcipher, - CRYPTO_TFM_RES_WEAK_KEY); - return -EINVAL; - } - - return ablkcipher_setkey(ablkcipher, key, keylen); -} - - static int xts_ablkcipher_setkey(struct crypto_ablkcipher *ablkcipher, const u8 *key, unsigned int keylen) { @@ -1301,9 +1274,6 @@ static void init_ablkcipher_giv_job(u32 *sh_desc, dma_addr_t ptr, append_seq_out_ptr(desc, dst_dma, req->nbytes + ivsize, LDST_SGF); } -static uint8_t *ecb_zero_iv; -static dma_addr_t ecb_ziv_dma; - /* * allocate and map the aead extended descriptor */ @@ -1607,7 +1577,6 @@ static struct ablkcipher_edesc *ablkcipher_edesc_alloc(struct ablkcipher_request u8 *iv; int ivsize = crypto_ablkcipher_ivsize(ablkcipher); int dst_sg_idx, sec4_sg_ents, sec4_sg_bytes; - uint32_t c1_alg_typ = ctx->cdata.algtype; src_nents = sg_nents_for_len(req->src, req->nbytes); if (unlikely(src_nents < 0)) { @@ -1677,19 +1646,13 @@ static struct ablkcipher_edesc *ablkcipher_edesc_alloc(struct ablkcipher_request iv = (u8 *)edesc->hw_desc + desc_bytes + sec4_sg_bytes; memcpy(iv, req->info, ivsize); - if ((!req->info && ivsize) && - ((c1_alg_typ & OP_ALG_ALGSEL_MASK) == OP_ALG_ALGSEL_AES) && - ((c1_alg_typ & OP_ALG_AAI_MASK) == OP_ALG_AAI_ECB)) { - iv_dma = ecb_ziv_dma; - } else { - iv_dma = dma_map_single(jrdev, iv, ivsize, DMA_TO_DEVICE); - if (dma_mapping_error(jrdev, iv_dma)) { - dev_err(jrdev, "unable to map IV\n"); - caam_unmap(jrdev, req->src, req->dst, src_nents, dst_nents, 0, - 0, DMA_NONE, 0, 0); - kfree(edesc); - return ERR_PTR(-ENOMEM); - } + iv_dma = dma_map_single(jrdev, iv, ivsize, DMA_TO_DEVICE); + if (dma_mapping_error(jrdev, iv_dma)) { + dev_err(jrdev, "unable to map IV\n"); + caam_unmap(jrdev, req->src, req->dst, src_nents, dst_nents, 0, + 0, DMA_NONE, 0, 0); + kfree(edesc); + return ERR_PTR(-ENOMEM); } dma_to_sec4_sg_one(edesc->sec4_sg, iv_dma, ivsize, 0); @@ -1995,23 +1958,6 @@ static struct caam_alg_template driver_algs[] = { .class1_alg_type = OP_ALG_ALGSEL_AES | OP_ALG_AAI_CBC, .support_tagged_key = true, }, - { - .name = "ecb(aes)", - .driver_name = "ecb-aes-caam", - .blocksize = AES_BLOCK_SIZE, - .type = CRYPTO_ALG_TYPE_ABLKCIPHER, - .template_ablkcipher = { - .setkey = ablkcipher_setkey, - .encrypt = ablkcipher_encrypt, - .decrypt = ablkcipher_decrypt, - .geniv = "eseqiv", - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .ivsize = 0, - }, - .class1_alg_type = OP_ALG_ALGSEL_AES | OP_ALG_AAI_ECB, - .support_tagged_key = true, - }, { .name = "cbc(des3_ede)", .driver_name = "cbc-3des-caam", @@ -2029,22 +1975,6 @@ static struct caam_alg_template driver_algs[] = { }, .class1_alg_type = OP_ALG_ALGSEL_3DES | OP_ALG_AAI_CBC, }, - { - .name = "ecb(des3_ede)", - .driver_name = "ecb-des3-caam", - .blocksize = DES3_EDE_BLOCK_SIZE, - .type = CRYPTO_ALG_TYPE_ABLKCIPHER, - .template_ablkcipher = { - .setkey = ablkcipher_setkey, - .encrypt = ablkcipher_encrypt, - .decrypt = ablkcipher_decrypt, - .geniv = "eseqiv", - .min_keysize = DES3_EDE_KEY_SIZE, - .max_keysize = DES3_EDE_KEY_SIZE, - .ivsize = DES3_EDE_BLOCK_SIZE, - }, - .class1_alg_type = OP_ALG_ALGSEL_3DES | OP_ALG_AAI_ECB, - }, { .name = "cbc(des)", .driver_name = "cbc-des-caam", @@ -2062,22 +1992,6 @@ static struct caam_alg_template driver_algs[] = { }, .class1_alg_type = OP_ALG_ALGSEL_DES | OP_ALG_AAI_CBC, }, - { - .name = "ecb(des)", - .driver_name = "ecb-des-caam", - .blocksize = DES_BLOCK_SIZE, - .type = CRYPTO_ALG_TYPE_ABLKCIPHER, - .template_ablkcipher = { - .setkey = ablkcipher_des_setkey, - .encrypt = ablkcipher_encrypt, - .decrypt = ablkcipher_decrypt, - .geniv = "eseqiv", - .min_keysize = DES_KEY_SIZE, - .max_keysize = DES_KEY_SIZE, - .ivsize = DES_BLOCK_SIZE, - }, - .class1_alg_type = OP_ALG_ALGSEL_DES | OP_ALG_AAI_ECB, - }, { .name = "ctr(aes)", .driver_name = "ctr-aes-caam", @@ -2129,23 +2043,6 @@ static struct caam_alg_template driver_algs[] = { }, .class1_alg_type = OP_ALG_ALGSEL_AES | OP_ALG_AAI_XTS, }, - { - .name = "ecb(arc4)", - .driver_name = "ecb-arc4-caam", - .blocksize = ARC4_BLOCK_SIZE, - .type = CRYPTO_ALG_TYPE_ABLKCIPHER, - .template_ablkcipher = { - .setkey = ablkcipher_setkey, - .encrypt = ablkcipher_encrypt, - .decrypt = ablkcipher_decrypt, - .geniv = "eseqiv", - .min_keysize = ARC4_MIN_KEY_SIZE, - .max_keysize = ARC4_MAX_KEY_SIZE, - .ivsize = ARC4_BLOCK_SIZE, - }, - .class1_alg_type = OP_ALG_ALGSEL_ARC4 | OP_ALG_AAI_ECB - }, - }; static struct caam_aead_alg driver_aeads[] = { @@ -3523,35 +3420,9 @@ static void caam_aead_exit(struct crypto_aead *tfm) static void __exit caam_algapi_exit(void) { - struct device_node *dev_node; - struct platform_device *pdev; - struct device *ctrldev; struct caam_crypto_alg *t_alg, *n; int i; - if (!ecb_zero_iv) - goto skip_ecb_ziv; - - dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0"); - if (!dev_node) { - dev_node = of_find_compatible_node(NULL, NULL, "fsl,sec4.0"); - if (!dev_node) - goto skip_ecb_ziv; - } - - pdev = of_find_device_by_node(dev_node); - - if (!pdev) { - of_node_put(dev_node); - goto skip_ecb_ziv; - } - - ctrldev = &pdev->dev; - - dma_unmap_single(ctrldev, ecb_ziv_dma, AES_BLOCK_SIZE, DMA_TO_DEVICE); - kfree(ecb_zero_iv); - -skip_ecb_ziv: for (i = 0; i < ARRAY_SIZE(driver_aeads); i++) { struct caam_aead_alg *t_alg = driver_aeads + i; @@ -3725,16 +3596,6 @@ static int __init caam_algapi_init(void) if (!priv) return -ENODEV; - ecb_zero_iv = kzalloc(AES_BLOCK_SIZE, GFP_KERNEL); - if (!ecb_zero_iv) - return -ENOMEM; - - ecb_ziv_dma = dma_map_single(ctrldev, ecb_zero_iv, AES_BLOCK_SIZE, - DMA_TO_DEVICE); - if (dma_mapping_error(ctrldev, ecb_ziv_dma)) { - kfree(ecb_zero_iv); - return -ENOMEM; - } INIT_LIST_HEAD(&alg_list); diff --git a/drivers/crypto/caam/desc.h b/drivers/crypto/caam/desc.h index a121df7ca5d993000723831846a09f37dec87478..158ef79d3f0ebdaddad9b2027800eb230c8cf109 100644 --- a/drivers/crypto/caam/desc.h +++ b/drivers/crypto/caam/desc.h @@ -1674,12 +1674,7 @@ /* Frame Descriptor Command for Replacement Job Descriptor */ #define FD_CMD_REPLACE_JOB_DESC 0x20000000 -#define ARC4_BLOCK_SIZE 1 -#define ARC4_MAX_KEY_SIZE 256 -#define ARC4_MIN_KEY_SIZE 1 - #define XCBC_MAC_DIGEST_SIZE 16 #define XCBC_MAC_BLOCK_WORDS 16 - #endif /* DESC_H */