aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto/caam/caamalg.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/crypto/caam/caamalg.c')
-rw-r--r--drivers/crypto/caam/caamalg.c77
1 files changed, 37 insertions, 40 deletions
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
index 6dc597126b79..b3044219772c 100644
--- a/drivers/crypto/caam/caamalg.c
+++ b/drivers/crypto/caam/caamalg.c
@@ -556,7 +556,10 @@ skip_enc:
556 556
557 /* Read and write assoclen bytes */ 557 /* Read and write assoclen bytes */
558 append_math_add(desc, VARSEQINLEN, ZERO, REG3, CAAM_CMD_SZ); 558 append_math_add(desc, VARSEQINLEN, ZERO, REG3, CAAM_CMD_SZ);
559 append_math_add(desc, VARSEQOUTLEN, ZERO, REG3, CAAM_CMD_SZ); 559 if (alg->caam.geniv)
560 append_math_add_imm_u32(desc, VARSEQOUTLEN, REG3, IMM, ivsize);
561 else
562 append_math_add(desc, VARSEQOUTLEN, ZERO, REG3, CAAM_CMD_SZ);
560 563
561 /* Skip assoc data */ 564 /* Skip assoc data */
562 append_seq_fifo_store(desc, 0, FIFOST_TYPE_SKIP | FIFOLDST_VLF); 565 append_seq_fifo_store(desc, 0, FIFOST_TYPE_SKIP | FIFOLDST_VLF);
@@ -565,6 +568,14 @@ skip_enc:
565 append_seq_fifo_load(desc, 0, FIFOLD_CLASS_CLASS2 | FIFOLD_TYPE_MSG | 568 append_seq_fifo_load(desc, 0, FIFOLD_CLASS_CLASS2 | FIFOLD_TYPE_MSG |
566 KEY_VLF); 569 KEY_VLF);
567 570
571 if (alg->caam.geniv) {
572 append_seq_load(desc, ivsize, LDST_CLASS_1_CCB |
573 LDST_SRCDST_BYTE_CONTEXT |
574 (ctx1_iv_off << LDST_OFFSET_SHIFT));
575 append_move(desc, MOVE_SRC_CLASS1CTX | MOVE_DEST_CLASS2INFIFO |
576 (ctx1_iv_off << MOVE_OFFSET_SHIFT) | ivsize);
577 }
578
568 /* Load Counter into CONTEXT1 reg */ 579 /* Load Counter into CONTEXT1 reg */
569 if (is_rfc3686) 580 if (is_rfc3686)
570 append_load_imm_u32(desc, be32_to_cpu(1), LDST_IMM | 581 append_load_imm_u32(desc, be32_to_cpu(1), LDST_IMM |
@@ -2150,7 +2161,7 @@ static void init_authenc_job(struct aead_request *req,
2150 2161
2151 init_aead_job(req, edesc, all_contig, encrypt); 2162 init_aead_job(req, edesc, all_contig, encrypt);
2152 2163
2153 if (ivsize && (is_rfc3686 || !(alg->caam.geniv && encrypt))) 2164 if (ivsize && ((is_rfc3686 && encrypt) || !alg->caam.geniv))
2154 append_load_as_imm(desc, req->iv, ivsize, 2165 append_load_as_imm(desc, req->iv, ivsize,
2155 LDST_CLASS_1_CCB | 2166 LDST_CLASS_1_CCB |
2156 LDST_SRCDST_BYTE_CONTEXT | 2167 LDST_SRCDST_BYTE_CONTEXT |
@@ -2537,20 +2548,6 @@ static int aead_decrypt(struct aead_request *req)
2537 return ret; 2548 return ret;
2538} 2549}
2539 2550
2540static int aead_givdecrypt(struct aead_request *req)
2541{
2542 struct crypto_aead *aead = crypto_aead_reqtfm(req);
2543 unsigned int ivsize = crypto_aead_ivsize(aead);
2544
2545 if (req->cryptlen < ivsize)
2546 return -EINVAL;
2547
2548 req->cryptlen -= ivsize;
2549 req->assoclen += ivsize;
2550
2551 return aead_decrypt(req);
2552}
2553
2554/* 2551/*
2555 * allocate and map the ablkcipher extended descriptor for ablkcipher 2552 * allocate and map the ablkcipher extended descriptor for ablkcipher
2556 */ 2553 */
@@ -3210,7 +3207,7 @@ static struct caam_aead_alg driver_aeads[] = {
3210 .setkey = aead_setkey, 3207 .setkey = aead_setkey,
3211 .setauthsize = aead_setauthsize, 3208 .setauthsize = aead_setauthsize,
3212 .encrypt = aead_encrypt, 3209 .encrypt = aead_encrypt,
3213 .decrypt = aead_givdecrypt, 3210 .decrypt = aead_decrypt,
3214 .ivsize = AES_BLOCK_SIZE, 3211 .ivsize = AES_BLOCK_SIZE,
3215 .maxauthsize = MD5_DIGEST_SIZE, 3212 .maxauthsize = MD5_DIGEST_SIZE,
3216 }, 3213 },
@@ -3256,7 +3253,7 @@ static struct caam_aead_alg driver_aeads[] = {
3256 .setkey = aead_setkey, 3253 .setkey = aead_setkey,
3257 .setauthsize = aead_setauthsize, 3254 .setauthsize = aead_setauthsize,
3258 .encrypt = aead_encrypt, 3255 .encrypt = aead_encrypt,
3259 .decrypt = aead_givdecrypt, 3256 .decrypt = aead_decrypt,
3260 .ivsize = AES_BLOCK_SIZE, 3257 .ivsize = AES_BLOCK_SIZE,
3261 .maxauthsize = SHA1_DIGEST_SIZE, 3258 .maxauthsize = SHA1_DIGEST_SIZE,
3262 }, 3259 },
@@ -3302,7 +3299,7 @@ static struct caam_aead_alg driver_aeads[] = {
3302 .setkey = aead_setkey, 3299 .setkey = aead_setkey,
3303 .setauthsize = aead_setauthsize, 3300 .setauthsize = aead_setauthsize,
3304 .encrypt = aead_encrypt, 3301 .encrypt = aead_encrypt,
3305 .decrypt = aead_givdecrypt, 3302 .decrypt = aead_decrypt,
3306 .ivsize = AES_BLOCK_SIZE, 3303 .ivsize = AES_BLOCK_SIZE,
3307 .maxauthsize = SHA224_DIGEST_SIZE, 3304 .maxauthsize = SHA224_DIGEST_SIZE,
3308 }, 3305 },
@@ -3348,7 +3345,7 @@ static struct caam_aead_alg driver_aeads[] = {
3348 .setkey = aead_setkey, 3345 .setkey = aead_setkey,
3349 .setauthsize = aead_setauthsize, 3346 .setauthsize = aead_setauthsize,
3350 .encrypt = aead_encrypt, 3347 .encrypt = aead_encrypt,
3351 .decrypt = aead_givdecrypt, 3348 .decrypt = aead_decrypt,
3352 .ivsize = AES_BLOCK_SIZE, 3349 .ivsize = AES_BLOCK_SIZE,
3353 .maxauthsize = SHA256_DIGEST_SIZE, 3350 .maxauthsize = SHA256_DIGEST_SIZE,
3354 }, 3351 },
@@ -3394,7 +3391,7 @@ static struct caam_aead_alg driver_aeads[] = {
3394 .setkey = aead_setkey, 3391 .setkey = aead_setkey,
3395 .setauthsize = aead_setauthsize, 3392 .setauthsize = aead_setauthsize,
3396 .encrypt = aead_encrypt, 3393 .encrypt = aead_encrypt,
3397 .decrypt = aead_givdecrypt, 3394 .decrypt = aead_decrypt,
3398 .ivsize = AES_BLOCK_SIZE, 3395 .ivsize = AES_BLOCK_SIZE,
3399 .maxauthsize = SHA384_DIGEST_SIZE, 3396 .maxauthsize = SHA384_DIGEST_SIZE,
3400 }, 3397 },
@@ -3440,7 +3437,7 @@ static struct caam_aead_alg driver_aeads[] = {
3440 .setkey = aead_setkey, 3437 .setkey = aead_setkey,
3441 .setauthsize = aead_setauthsize, 3438 .setauthsize = aead_setauthsize,
3442 .encrypt = aead_encrypt, 3439 .encrypt = aead_encrypt,
3443 .decrypt = aead_givdecrypt, 3440 .decrypt = aead_decrypt,
3444 .ivsize = AES_BLOCK_SIZE, 3441 .ivsize = AES_BLOCK_SIZE,
3445 .maxauthsize = SHA512_DIGEST_SIZE, 3442 .maxauthsize = SHA512_DIGEST_SIZE,
3446 }, 3443 },
@@ -3486,7 +3483,7 @@ static struct caam_aead_alg driver_aeads[] = {
3486 .setkey = aead_setkey, 3483 .setkey = aead_setkey,
3487 .setauthsize = aead_setauthsize, 3484 .setauthsize = aead_setauthsize,
3488 .encrypt = aead_encrypt, 3485 .encrypt = aead_encrypt,
3489 .decrypt = aead_givdecrypt, 3486 .decrypt = aead_decrypt,
3490 .ivsize = DES3_EDE_BLOCK_SIZE, 3487 .ivsize = DES3_EDE_BLOCK_SIZE,
3491 .maxauthsize = MD5_DIGEST_SIZE, 3488 .maxauthsize = MD5_DIGEST_SIZE,
3492 }, 3489 },
@@ -3534,7 +3531,7 @@ static struct caam_aead_alg driver_aeads[] = {
3534 .setkey = aead_setkey, 3531 .setkey = aead_setkey,
3535 .setauthsize = aead_setauthsize, 3532 .setauthsize = aead_setauthsize,
3536 .encrypt = aead_encrypt, 3533 .encrypt = aead_encrypt,
3537 .decrypt = aead_givdecrypt, 3534 .decrypt = aead_decrypt,
3538 .ivsize = DES3_EDE_BLOCK_SIZE, 3535 .ivsize = DES3_EDE_BLOCK_SIZE,
3539 .maxauthsize = SHA1_DIGEST_SIZE, 3536 .maxauthsize = SHA1_DIGEST_SIZE,
3540 }, 3537 },
@@ -3582,7 +3579,7 @@ static struct caam_aead_alg driver_aeads[] = {
3582 .setkey = aead_setkey, 3579 .setkey = aead_setkey,
3583 .setauthsize = aead_setauthsize, 3580 .setauthsize = aead_setauthsize,
3584 .encrypt = aead_encrypt, 3581 .encrypt = aead_encrypt,
3585 .decrypt = aead_givdecrypt, 3582 .decrypt = aead_decrypt,
3586 .ivsize = DES3_EDE_BLOCK_SIZE, 3583 .ivsize = DES3_EDE_BLOCK_SIZE,
3587 .maxauthsize = SHA224_DIGEST_SIZE, 3584 .maxauthsize = SHA224_DIGEST_SIZE,
3588 }, 3585 },
@@ -3630,7 +3627,7 @@ static struct caam_aead_alg driver_aeads[] = {
3630 .setkey = aead_setkey, 3627 .setkey = aead_setkey,
3631 .setauthsize = aead_setauthsize, 3628 .setauthsize = aead_setauthsize,
3632 .encrypt = aead_encrypt, 3629 .encrypt = aead_encrypt,
3633 .decrypt = aead_givdecrypt, 3630 .decrypt = aead_decrypt,
3634 .ivsize = DES3_EDE_BLOCK_SIZE, 3631 .ivsize = DES3_EDE_BLOCK_SIZE,
3635 .maxauthsize = SHA256_DIGEST_SIZE, 3632 .maxauthsize = SHA256_DIGEST_SIZE,
3636 }, 3633 },
@@ -3678,7 +3675,7 @@ static struct caam_aead_alg driver_aeads[] = {
3678 .setkey = aead_setkey, 3675 .setkey = aead_setkey,
3679 .setauthsize = aead_setauthsize, 3676 .setauthsize = aead_setauthsize,
3680 .encrypt = aead_encrypt, 3677 .encrypt = aead_encrypt,
3681 .decrypt = aead_givdecrypt, 3678 .decrypt = aead_decrypt,
3682 .ivsize = DES3_EDE_BLOCK_SIZE, 3679 .ivsize = DES3_EDE_BLOCK_SIZE,
3683 .maxauthsize = SHA384_DIGEST_SIZE, 3680 .maxauthsize = SHA384_DIGEST_SIZE,
3684 }, 3681 },
@@ -3726,7 +3723,7 @@ static struct caam_aead_alg driver_aeads[] = {
3726 .setkey = aead_setkey, 3723 .setkey = aead_setkey,
3727 .setauthsize = aead_setauthsize, 3724 .setauthsize = aead_setauthsize,
3728 .encrypt = aead_encrypt, 3725 .encrypt = aead_encrypt,
3729 .decrypt = aead_givdecrypt, 3726 .decrypt = aead_decrypt,
3730 .ivsize = DES3_EDE_BLOCK_SIZE, 3727 .ivsize = DES3_EDE_BLOCK_SIZE,
3731 .maxauthsize = SHA512_DIGEST_SIZE, 3728 .maxauthsize = SHA512_DIGEST_SIZE,
3732 }, 3729 },
@@ -3772,7 +3769,7 @@ static struct caam_aead_alg driver_aeads[] = {
3772 .setkey = aead_setkey, 3769 .setkey = aead_setkey,
3773 .setauthsize = aead_setauthsize, 3770 .setauthsize = aead_setauthsize,
3774 .encrypt = aead_encrypt, 3771 .encrypt = aead_encrypt,
3775 .decrypt = aead_givdecrypt, 3772 .decrypt = aead_decrypt,
3776 .ivsize = DES_BLOCK_SIZE, 3773 .ivsize = DES_BLOCK_SIZE,
3777 .maxauthsize = MD5_DIGEST_SIZE, 3774 .maxauthsize = MD5_DIGEST_SIZE,
3778 }, 3775 },
@@ -3818,7 +3815,7 @@ static struct caam_aead_alg driver_aeads[] = {
3818 .setkey = aead_setkey, 3815 .setkey = aead_setkey,
3819 .setauthsize = aead_setauthsize, 3816 .setauthsize = aead_setauthsize,
3820 .encrypt = aead_encrypt, 3817 .encrypt = aead_encrypt,
3821 .decrypt = aead_givdecrypt, 3818 .decrypt = aead_decrypt,
3822 .ivsize = DES_BLOCK_SIZE, 3819 .ivsize = DES_BLOCK_SIZE,
3823 .maxauthsize = SHA1_DIGEST_SIZE, 3820 .maxauthsize = SHA1_DIGEST_SIZE,
3824 }, 3821 },
@@ -3864,7 +3861,7 @@ static struct caam_aead_alg driver_aeads[] = {
3864 .setkey = aead_setkey, 3861 .setkey = aead_setkey,
3865 .setauthsize = aead_setauthsize, 3862 .setauthsize = aead_setauthsize,
3866 .encrypt = aead_encrypt, 3863 .encrypt = aead_encrypt,
3867 .decrypt = aead_givdecrypt, 3864 .decrypt = aead_decrypt,
3868 .ivsize = DES_BLOCK_SIZE, 3865 .ivsize = DES_BLOCK_SIZE,
3869 .maxauthsize = SHA224_DIGEST_SIZE, 3866 .maxauthsize = SHA224_DIGEST_SIZE,
3870 }, 3867 },
@@ -3910,7 +3907,7 @@ static struct caam_aead_alg driver_aeads[] = {
3910 .setkey = aead_setkey, 3907 .setkey = aead_setkey,
3911 .setauthsize = aead_setauthsize, 3908 .setauthsize = aead_setauthsize,
3912 .encrypt = aead_encrypt, 3909 .encrypt = aead_encrypt,
3913 .decrypt = aead_givdecrypt, 3910 .decrypt = aead_decrypt,
3914 .ivsize = DES_BLOCK_SIZE, 3911 .ivsize = DES_BLOCK_SIZE,
3915 .maxauthsize = SHA256_DIGEST_SIZE, 3912 .maxauthsize = SHA256_DIGEST_SIZE,
3916 }, 3913 },
@@ -3956,7 +3953,7 @@ static struct caam_aead_alg driver_aeads[] = {
3956 .setkey = aead_setkey, 3953 .setkey = aead_setkey,
3957 .setauthsize = aead_setauthsize, 3954 .setauthsize = aead_setauthsize,
3958 .encrypt = aead_encrypt, 3955 .encrypt = aead_encrypt,
3959 .decrypt = aead_givdecrypt, 3956 .decrypt = aead_decrypt,
3960 .ivsize = DES_BLOCK_SIZE, 3957 .ivsize = DES_BLOCK_SIZE,
3961 .maxauthsize = SHA384_DIGEST_SIZE, 3958 .maxauthsize = SHA384_DIGEST_SIZE,
3962 }, 3959 },
@@ -4002,7 +3999,7 @@ static struct caam_aead_alg driver_aeads[] = {
4002 .setkey = aead_setkey, 3999 .setkey = aead_setkey,
4003 .setauthsize = aead_setauthsize, 4000 .setauthsize = aead_setauthsize,
4004 .encrypt = aead_encrypt, 4001 .encrypt = aead_encrypt,
4005 .decrypt = aead_givdecrypt, 4002 .decrypt = aead_decrypt,
4006 .ivsize = DES_BLOCK_SIZE, 4003 .ivsize = DES_BLOCK_SIZE,
4007 .maxauthsize = SHA512_DIGEST_SIZE, 4004 .maxauthsize = SHA512_DIGEST_SIZE,
4008 }, 4005 },
@@ -4051,7 +4048,7 @@ static struct caam_aead_alg driver_aeads[] = {
4051 .setkey = aead_setkey, 4048 .setkey = aead_setkey,
4052 .setauthsize = aead_setauthsize, 4049 .setauthsize = aead_setauthsize,
4053 .encrypt = aead_encrypt, 4050 .encrypt = aead_encrypt,
4054 .decrypt = aead_givdecrypt, 4051 .decrypt = aead_decrypt,
4055 .ivsize = CTR_RFC3686_IV_SIZE, 4052 .ivsize = CTR_RFC3686_IV_SIZE,
4056 .maxauthsize = MD5_DIGEST_SIZE, 4053 .maxauthsize = MD5_DIGEST_SIZE,
4057 }, 4054 },
@@ -4102,7 +4099,7 @@ static struct caam_aead_alg driver_aeads[] = {
4102 .setkey = aead_setkey, 4099 .setkey = aead_setkey,
4103 .setauthsize = aead_setauthsize, 4100 .setauthsize = aead_setauthsize,
4104 .encrypt = aead_encrypt, 4101 .encrypt = aead_encrypt,
4105 .decrypt = aead_givdecrypt, 4102 .decrypt = aead_decrypt,
4106 .ivsize = CTR_RFC3686_IV_SIZE, 4103 .ivsize = CTR_RFC3686_IV_SIZE,
4107 .maxauthsize = SHA1_DIGEST_SIZE, 4104 .maxauthsize = SHA1_DIGEST_SIZE,
4108 }, 4105 },
@@ -4153,7 +4150,7 @@ static struct caam_aead_alg driver_aeads[] = {
4153 .setkey = aead_setkey, 4150 .setkey = aead_setkey,
4154 .setauthsize = aead_setauthsize, 4151 .setauthsize = aead_setauthsize,
4155 .encrypt = aead_encrypt, 4152 .encrypt = aead_encrypt,
4156 .decrypt = aead_givdecrypt, 4153 .decrypt = aead_decrypt,
4157 .ivsize = CTR_RFC3686_IV_SIZE, 4154 .ivsize = CTR_RFC3686_IV_SIZE,
4158 .maxauthsize = SHA224_DIGEST_SIZE, 4155 .maxauthsize = SHA224_DIGEST_SIZE,
4159 }, 4156 },
@@ -4204,7 +4201,7 @@ static struct caam_aead_alg driver_aeads[] = {
4204 .setkey = aead_setkey, 4201 .setkey = aead_setkey,
4205 .setauthsize = aead_setauthsize, 4202 .setauthsize = aead_setauthsize,
4206 .encrypt = aead_encrypt, 4203 .encrypt = aead_encrypt,
4207 .decrypt = aead_givdecrypt, 4204 .decrypt = aead_decrypt,
4208 .ivsize = CTR_RFC3686_IV_SIZE, 4205 .ivsize = CTR_RFC3686_IV_SIZE,
4209 .maxauthsize = SHA256_DIGEST_SIZE, 4206 .maxauthsize = SHA256_DIGEST_SIZE,
4210 }, 4207 },
@@ -4255,7 +4252,7 @@ static struct caam_aead_alg driver_aeads[] = {
4255 .setkey = aead_setkey, 4252 .setkey = aead_setkey,
4256 .setauthsize = aead_setauthsize, 4253 .setauthsize = aead_setauthsize,
4257 .encrypt = aead_encrypt, 4254 .encrypt = aead_encrypt,
4258 .decrypt = aead_givdecrypt, 4255 .decrypt = aead_decrypt,
4259 .ivsize = CTR_RFC3686_IV_SIZE, 4256 .ivsize = CTR_RFC3686_IV_SIZE,
4260 .maxauthsize = SHA384_DIGEST_SIZE, 4257 .maxauthsize = SHA384_DIGEST_SIZE,
4261 }, 4258 },
@@ -4306,7 +4303,7 @@ static struct caam_aead_alg driver_aeads[] = {
4306 .setkey = aead_setkey, 4303 .setkey = aead_setkey,
4307 .setauthsize = aead_setauthsize, 4304 .setauthsize = aead_setauthsize,
4308 .encrypt = aead_encrypt, 4305 .encrypt = aead_encrypt,
4309 .decrypt = aead_givdecrypt, 4306 .decrypt = aead_decrypt,
4310 .ivsize = CTR_RFC3686_IV_SIZE, 4307 .ivsize = CTR_RFC3686_IV_SIZE,
4311 .maxauthsize = SHA512_DIGEST_SIZE, 4308 .maxauthsize = SHA512_DIGEST_SIZE,
4312 }, 4309 },