|
@@ -592,7 +592,10 @@ skip_enc:
|
|
|
|
|
|
/* Read and write assoclen bytes */
|
|
|
append_math_add(desc, VARSEQINLEN, ZERO, REG3, CAAM_CMD_SZ);
|
|
|
- append_math_add(desc, VARSEQOUTLEN, ZERO, REG3, CAAM_CMD_SZ);
|
|
|
+ if (alg->caam.geniv)
|
|
|
+ append_math_add_imm_u32(desc, VARSEQOUTLEN, REG3, IMM, ivsize);
|
|
|
+ else
|
|
|
+ append_math_add(desc, VARSEQOUTLEN, ZERO, REG3, CAAM_CMD_SZ);
|
|
|
|
|
|
/* Skip assoc data */
|
|
|
append_seq_fifo_store(desc, 0, FIFOST_TYPE_SKIP | FIFOLDST_VLF);
|
|
@@ -601,6 +604,14 @@ skip_enc:
|
|
|
append_seq_fifo_load(desc, 0, FIFOLD_CLASS_CLASS2 | FIFOLD_TYPE_MSG |
|
|
|
KEY_VLF);
|
|
|
|
|
|
+ if (alg->caam.geniv) {
|
|
|
+ append_seq_load(desc, ivsize, LDST_CLASS_1_CCB |
|
|
|
+ LDST_SRCDST_BYTE_CONTEXT |
|
|
|
+ (ctx1_iv_off << LDST_OFFSET_SHIFT));
|
|
|
+ append_move(desc, MOVE_SRC_CLASS1CTX | MOVE_DEST_CLASS2INFIFO |
|
|
|
+ (ctx1_iv_off << MOVE_OFFSET_SHIFT) | ivsize);
|
|
|
+ }
|
|
|
+
|
|
|
/* Load Counter into CONTEXT1 reg */
|
|
|
if (is_rfc3686)
|
|
|
append_load_imm_be32(desc, 1, LDST_IMM | LDST_CLASS_1_CCB |
|
|
@@ -2184,7 +2195,7 @@ static void init_authenc_job(struct aead_request *req,
|
|
|
|
|
|
init_aead_job(req, edesc, all_contig, encrypt);
|
|
|
|
|
|
- if (ivsize && (is_rfc3686 || !(alg->caam.geniv && encrypt)))
|
|
|
+ if (ivsize && ((is_rfc3686 && encrypt) || !alg->caam.geniv))
|
|
|
append_load_as_imm(desc, req->iv, ivsize,
|
|
|
LDST_CLASS_1_CCB |
|
|
|
LDST_SRCDST_BYTE_CONTEXT |
|
|
@@ -2578,20 +2589,6 @@ static int aead_decrypt(struct aead_request *req)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int aead_givdecrypt(struct aead_request *req)
|
|
|
-{
|
|
|
- struct crypto_aead *aead = crypto_aead_reqtfm(req);
|
|
|
- unsigned int ivsize = crypto_aead_ivsize(aead);
|
|
|
-
|
|
|
- if (req->cryptlen < ivsize)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- req->cryptlen -= ivsize;
|
|
|
- req->assoclen += ivsize;
|
|
|
-
|
|
|
- return aead_decrypt(req);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* allocate and map the ablkcipher extended descriptor for ablkcipher
|
|
|
*/
|
|
@@ -3251,7 +3248,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = AES_BLOCK_SIZE,
|
|
|
.maxauthsize = MD5_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3297,7 +3294,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = AES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA1_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3343,7 +3340,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = AES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA224_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3389,7 +3386,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = AES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA256_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3435,7 +3432,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = AES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA384_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3481,7 +3478,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = AES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA512_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3527,7 +3524,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES3_EDE_BLOCK_SIZE,
|
|
|
.maxauthsize = MD5_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3575,7 +3572,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES3_EDE_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA1_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3623,7 +3620,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES3_EDE_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA224_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3671,7 +3668,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES3_EDE_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA256_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3719,7 +3716,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES3_EDE_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA384_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3767,7 +3764,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES3_EDE_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA512_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3813,7 +3810,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES_BLOCK_SIZE,
|
|
|
.maxauthsize = MD5_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3859,7 +3856,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA1_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3905,7 +3902,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA224_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3951,7 +3948,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA256_DIGEST_SIZE,
|
|
|
},
|
|
@@ -3997,7 +3994,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA384_DIGEST_SIZE,
|
|
|
},
|
|
@@ -4043,7 +4040,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = DES_BLOCK_SIZE,
|
|
|
.maxauthsize = SHA512_DIGEST_SIZE,
|
|
|
},
|
|
@@ -4092,7 +4089,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = CTR_RFC3686_IV_SIZE,
|
|
|
.maxauthsize = MD5_DIGEST_SIZE,
|
|
|
},
|
|
@@ -4143,7 +4140,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = CTR_RFC3686_IV_SIZE,
|
|
|
.maxauthsize = SHA1_DIGEST_SIZE,
|
|
|
},
|
|
@@ -4194,7 +4191,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = CTR_RFC3686_IV_SIZE,
|
|
|
.maxauthsize = SHA224_DIGEST_SIZE,
|
|
|
},
|
|
@@ -4245,7 +4242,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = CTR_RFC3686_IV_SIZE,
|
|
|
.maxauthsize = SHA256_DIGEST_SIZE,
|
|
|
},
|
|
@@ -4296,7 +4293,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = CTR_RFC3686_IV_SIZE,
|
|
|
.maxauthsize = SHA384_DIGEST_SIZE,
|
|
|
},
|
|
@@ -4347,7 +4344,7 @@ static struct caam_aead_alg driver_aeads[] = {
|
|
|
.setkey = aead_setkey,
|
|
|
.setauthsize = aead_setauthsize,
|
|
|
.encrypt = aead_encrypt,
|
|
|
- .decrypt = aead_givdecrypt,
|
|
|
+ .decrypt = aead_decrypt,
|
|
|
.ivsize = CTR_RFC3686_IV_SIZE,
|
|
|
.maxauthsize = SHA512_DIGEST_SIZE,
|
|
|
},
|