|
|
|
@ -2641,7 +2641,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
/* Skip assoc data */
|
|
|
|
|
append_seq_fifo_store(desc, 0, FIFOST_TYPE_SKIP | FIFOLDST_VLF);
|
|
|
|
|
@@ -456,29 +489,29 @@ EXPORT_SYMBOL(cnstr_shdsc_aead_decap);
|
|
|
|
|
@@ -456,30 +489,29 @@ EXPORT_SYMBOL(cnstr_shdsc_aead_decap);
|
|
|
|
|
* @cdata: pointer to block cipher transform definitions
|
|
|
|
|
* Valid algorithm values - one of OP_ALG_ALGSEL_{AES, DES, 3DES} ANDed
|
|
|
|
|
* with OP_ALG_AAI_CBC or OP_ALG_AAI_CTR_MOD128.
|
|
|
|
@ -2649,12 +2649,12 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
- * split key is to be used, the size of the split key itself is
|
|
|
|
|
- * specified. Valid algorithm values - one of OP_ALG_ALGSEL_{MD5, SHA1,
|
|
|
|
|
- * SHA224, SHA256, SHA384, SHA512} ANDed with OP_ALG_AAI_HMAC_PRECOMP.
|
|
|
|
|
- * @ivsize: initialization vector size
|
|
|
|
|
+ * @adata: pointer to authentication transform definitions.
|
|
|
|
|
+ * A split key is required for SEC Era < 6; the size of the split key
|
|
|
|
|
+ * is specified in this case. Valid algorithm values - one of
|
|
|
|
|
+ * OP_ALG_ALGSEL_{MD5, SHA1, SHA224, SHA256, SHA384, SHA512} ANDed
|
|
|
|
|
+ * with OP_ALG_AAI_HMAC_PRECOMP.
|
|
|
|
|
* @ivsize: initialization vector size
|
|
|
|
|
+ * with OP_ALG_AAI_HMAC_PRECOMP. * @ivsize: initialization vector size
|
|
|
|
|
* @icvsize: integrity check value (ICV) size (truncated or full)
|
|
|
|
|
* @is_rfc3686: true when ctr(aes) is wrapped by rfc3686 template
|
|
|
|
|
* @nonce: pointer to rfc3686 nonce
|
|
|
|
@ -2672,6 +2672,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
+ const bool is_qi, int era)
|
|
|
|
|
{
|
|
|
|
|
u32 geniv, moveiv;
|
|
|
|
|
u32 *wait_cmd;
|
|
|
|
|
|
|
|
|
|
/* Note: Context registers are saved. */
|
|
|
|
|
- init_sh_desc_key_aead(desc, cdata, adata, is_rfc3686, nonce);
|
|
|
|
@ -2679,7 +2680,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
if (is_qi) {
|
|
|
|
|
u32 *wait_load_cmd;
|
|
|
|
|
@@ -528,8 +561,13 @@ copy_iv:
|
|
|
|
|
@@ -529,8 +561,13 @@ copy_iv:
|
|
|
|
|
OP_ALG_ENCRYPT);
|
|
|
|
|
|
|
|
|
|
/* Read and write assoclen bytes */
|
|
|
|
@ -2695,7 +2696,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
/* Skip assoc data */
|
|
|
|
|
append_seq_fifo_store(desc, 0, FIFOST_TYPE_SKIP | FIFOLDST_VLF);
|
|
|
|
|
@@ -583,14 +621,431 @@ copy_iv:
|
|
|
|
|
@@ -592,14 +629,431 @@ copy_iv:
|
|
|
|
|
EXPORT_SYMBOL(cnstr_shdsc_aead_givencap);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -3128,7 +3129,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
{
|
|
|
|
|
u32 *key_jump_cmd, *zero_payload_jump_cmd, *zero_assoc_jump_cmd1,
|
|
|
|
|
*zero_assoc_jump_cmd2;
|
|
|
|
|
@@ -612,11 +1067,35 @@ void cnstr_shdsc_gcm_encap(u32 * const d
|
|
|
|
|
@@ -621,11 +1075,35 @@ void cnstr_shdsc_gcm_encap(u32 * const d
|
|
|
|
|
append_operation(desc, cdata->algtype | OP_ALG_AS_INITFINAL |
|
|
|
|
|
OP_ALG_ENCRYPT);
|
|
|
|
|
|
|
|
|
@ -3165,7 +3166,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
/* if assoclen is ZERO, skip reading the assoc data */
|
|
|
|
|
append_math_add(desc, VARSEQINLEN, ZERO, REG3, CAAM_CMD_SZ);
|
|
|
|
|
zero_assoc_jump_cmd1 = append_jump(desc, JUMP_TEST_ALL |
|
|
|
|
|
@@ -648,8 +1127,11 @@ void cnstr_shdsc_gcm_encap(u32 * const d
|
|
|
|
|
@@ -657,8 +1135,11 @@ void cnstr_shdsc_gcm_encap(u32 * const d
|
|
|
|
|
append_seq_fifo_load(desc, 0, FIFOLD_CLASS_CLASS1 | FIFOLDST_VLF |
|
|
|
|
|
FIFOLD_TYPE_MSG | FIFOLD_TYPE_LAST1);
|
|
|
|
|
|
|
|
|
@ -3179,7 +3180,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
/* zero-payload commands */
|
|
|
|
|
set_jump_tgt_here(desc, zero_payload_jump_cmd);
|
|
|
|
|
@@ -657,10 +1139,18 @@ void cnstr_shdsc_gcm_encap(u32 * const d
|
|
|
|
|
@@ -666,10 +1147,18 @@ void cnstr_shdsc_gcm_encap(u32 * const d
|
|
|
|
|
/* read assoc data */
|
|
|
|
|
append_seq_fifo_load(desc, 0, FIFOLD_CLASS_CLASS1 | FIFOLDST_VLF |
|
|
|
|
|
FIFOLD_TYPE_AAD | FIFOLD_TYPE_LAST1);
|
|
|
|
@ -3198,7 +3199,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
/* write ICV */
|
|
|
|
|
append_seq_store(desc, icvsize, LDST_CLASS_1_CCB |
|
|
|
|
|
LDST_SRCDST_BYTE_CONTEXT);
|
|
|
|
|
@@ -677,10 +1167,13 @@ EXPORT_SYMBOL(cnstr_shdsc_gcm_encap);
|
|
|
|
|
@@ -686,10 +1175,13 @@ EXPORT_SYMBOL(cnstr_shdsc_gcm_encap);
|
|
|
|
|
* @desc: pointer to buffer used for descriptor construction
|
|
|
|
|
* @cdata: pointer to block cipher transform definitions
|
|
|
|
|
* Valid algorithm values - OP_ALG_ALGSEL_AES ANDed with OP_ALG_AAI_GCM.
|
|
|
|
@ -3213,7 +3214,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
{
|
|
|
|
|
u32 *key_jump_cmd, *zero_payload_jump_cmd, *zero_assoc_jump_cmd1;
|
|
|
|
|
|
|
|
|
|
@@ -701,6 +1194,24 @@ void cnstr_shdsc_gcm_decap(u32 * const d
|
|
|
|
|
@@ -710,6 +1202,24 @@ void cnstr_shdsc_gcm_decap(u32 * const d
|
|
|
|
|
append_operation(desc, cdata->algtype | OP_ALG_AS_INITFINAL |
|
|
|
|
|
OP_ALG_DECRYPT | OP_ALG_ICV_ON);
|
|
|
|
|
|
|
|
|
@ -3238,7 +3239,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
/* if assoclen is ZERO, skip reading the assoc data */
|
|
|
|
|
append_math_add(desc, VARSEQINLEN, ZERO, REG3, CAAM_CMD_SZ);
|
|
|
|
|
zero_assoc_jump_cmd1 = append_jump(desc, JUMP_TEST_ALL |
|
|
|
|
|
@@ -753,10 +1264,13 @@ EXPORT_SYMBOL(cnstr_shdsc_gcm_decap);
|
|
|
|
|
@@ -762,10 +1272,13 @@ EXPORT_SYMBOL(cnstr_shdsc_gcm_decap);
|
|
|
|
|
* @desc: pointer to buffer used for descriptor construction
|
|
|
|
|
* @cdata: pointer to block cipher transform definitions
|
|
|
|
|
* Valid algorithm values - OP_ALG_ALGSEL_AES ANDed with OP_ALG_AAI_GCM.
|
|
|
|
@ -3253,7 +3254,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
{
|
|
|
|
|
u32 *key_jump_cmd;
|
|
|
|
|
|
|
|
|
|
@@ -777,7 +1291,29 @@ void cnstr_shdsc_rfc4106_encap(u32 * con
|
|
|
|
|
@@ -786,7 +1299,29 @@ void cnstr_shdsc_rfc4106_encap(u32 * con
|
|
|
|
|
append_operation(desc, cdata->algtype | OP_ALG_AS_INITFINAL |
|
|
|
|
|
OP_ALG_ENCRYPT);
|
|
|
|
|
|
|
|
|
@ -3284,7 +3285,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
append_math_add(desc, VARSEQOUTLEN, ZERO, REG3, CAAM_CMD_SZ);
|
|
|
|
|
|
|
|
|
|
/* Read assoc data */
|
|
|
|
|
@@ -785,7 +1321,7 @@ void cnstr_shdsc_rfc4106_encap(u32 * con
|
|
|
|
|
@@ -794,7 +1329,7 @@ void cnstr_shdsc_rfc4106_encap(u32 * con
|
|
|
|
|
FIFOLD_TYPE_AAD | FIFOLD_TYPE_FLUSH1);
|
|
|
|
|
|
|
|
|
|
/* Skip IV */
|
|
|
|
@ -3293,7 +3294,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
/* Will read cryptlen bytes */
|
|
|
|
|
append_math_sub(desc, VARSEQINLEN, SEQINLEN, REG0, CAAM_CMD_SZ);
|
|
|
|
|
@@ -824,10 +1360,13 @@ EXPORT_SYMBOL(cnstr_shdsc_rfc4106_encap)
|
|
|
|
|
@@ -833,10 +1368,13 @@ EXPORT_SYMBOL(cnstr_shdsc_rfc4106_encap)
|
|
|
|
|
* @desc: pointer to buffer used for descriptor construction
|
|
|
|
|
* @cdata: pointer to block cipher transform definitions
|
|
|
|
|
* Valid algorithm values - OP_ALG_ALGSEL_AES ANDed with OP_ALG_AAI_GCM.
|
|
|
|
@ -3308,7 +3309,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
{
|
|
|
|
|
u32 *key_jump_cmd;
|
|
|
|
|
|
|
|
|
|
@@ -849,7 +1388,29 @@ void cnstr_shdsc_rfc4106_decap(u32 * con
|
|
|
|
|
@@ -858,7 +1396,29 @@ void cnstr_shdsc_rfc4106_decap(u32 * con
|
|
|
|
|
append_operation(desc, cdata->algtype | OP_ALG_AS_INITFINAL |
|
|
|
|
|
OP_ALG_DECRYPT | OP_ALG_ICV_ON);
|
|
|
|
|
|
|
|
|
@ -3339,7 +3340,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
append_math_add(desc, VARSEQOUTLEN, ZERO, REG3, CAAM_CMD_SZ);
|
|
|
|
|
|
|
|
|
|
/* Read assoc data */
|
|
|
|
|
@@ -857,7 +1418,7 @@ void cnstr_shdsc_rfc4106_decap(u32 * con
|
|
|
|
|
@@ -866,7 +1426,7 @@ void cnstr_shdsc_rfc4106_decap(u32 * con
|
|
|
|
|
FIFOLD_TYPE_AAD | FIFOLD_TYPE_FLUSH1);
|
|
|
|
|
|
|
|
|
|
/* Skip IV */
|
|
|
|
@ -3348,7 +3349,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
/* Will read cryptlen bytes */
|
|
|
|
|
append_math_sub(desc, VARSEQINLEN, SEQOUTLEN, REG3, CAAM_CMD_SZ);
|
|
|
|
|
@@ -896,10 +1457,13 @@ EXPORT_SYMBOL(cnstr_shdsc_rfc4106_decap)
|
|
|
|
|
@@ -905,10 +1465,13 @@ EXPORT_SYMBOL(cnstr_shdsc_rfc4106_decap)
|
|
|
|
|
* @desc: pointer to buffer used for descriptor construction
|
|
|
|
|
* @cdata: pointer to block cipher transform definitions
|
|
|
|
|
* Valid algorithm values - OP_ALG_ALGSEL_AES ANDed with OP_ALG_AAI_GCM.
|
|
|
|
@ -3363,7 +3364,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
{
|
|
|
|
|
u32 *key_jump_cmd, *read_move_cmd, *write_move_cmd;
|
|
|
|
|
|
|
|
|
|
@@ -920,6 +1484,18 @@ void cnstr_shdsc_rfc4543_encap(u32 * con
|
|
|
|
|
@@ -929,6 +1492,18 @@ void cnstr_shdsc_rfc4543_encap(u32 * con
|
|
|
|
|
append_operation(desc, cdata->algtype | OP_ALG_AS_INITFINAL |
|
|
|
|
|
OP_ALG_ENCRYPT);
|
|
|
|
|
|
|
|
|
@ -3382,7 +3383,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
/* assoclen + cryptlen = seqinlen */
|
|
|
|
|
append_math_sub(desc, REG3, SEQINLEN, REG0, CAAM_CMD_SZ);
|
|
|
|
|
|
|
|
|
|
@@ -931,7 +1507,7 @@ void cnstr_shdsc_rfc4543_encap(u32 * con
|
|
|
|
|
@@ -940,7 +1515,7 @@ void cnstr_shdsc_rfc4543_encap(u32 * con
|
|
|
|
|
read_move_cmd = append_move(desc, MOVE_SRC_DESCBUF | MOVE_DEST_MATH3 |
|
|
|
|
|
(0x6 << MOVE_LEN_SHIFT));
|
|
|
|
|
write_move_cmd = append_move(desc, MOVE_SRC_MATH3 | MOVE_DEST_DESCBUF |
|
|
|
|
@ -3391,7 +3392,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
/* Will read assoclen + cryptlen bytes */
|
|
|
|
|
append_math_sub(desc, VARSEQINLEN, SEQINLEN, REG0, CAAM_CMD_SZ);
|
|
|
|
|
@@ -966,10 +1542,13 @@ EXPORT_SYMBOL(cnstr_shdsc_rfc4543_encap)
|
|
|
|
|
@@ -975,10 +1550,13 @@ EXPORT_SYMBOL(cnstr_shdsc_rfc4543_encap)
|
|
|
|
|
* @desc: pointer to buffer used for descriptor construction
|
|
|
|
|
* @cdata: pointer to block cipher transform definitions
|
|
|
|
|
* Valid algorithm values - OP_ALG_ALGSEL_AES ANDed with OP_ALG_AAI_GCM.
|
|
|
|
@ -3406,7 +3407,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
{
|
|
|
|
|
u32 *key_jump_cmd, *read_move_cmd, *write_move_cmd;
|
|
|
|
|
|
|
|
|
|
@@ -990,6 +1569,18 @@ void cnstr_shdsc_rfc4543_decap(u32 * con
|
|
|
|
|
@@ -999,6 +1577,18 @@ void cnstr_shdsc_rfc4543_decap(u32 * con
|
|
|
|
|
append_operation(desc, cdata->algtype | OP_ALG_AS_INITFINAL |
|
|
|
|
|
OP_ALG_DECRYPT | OP_ALG_ICV_ON);
|
|
|
|
|
|
|
|
|
@ -3425,7 +3426,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
/* assoclen + cryptlen = seqoutlen */
|
|
|
|
|
append_math_sub(desc, REG3, SEQOUTLEN, REG0, CAAM_CMD_SZ);
|
|
|
|
|
|
|
|
|
|
@@ -1001,7 +1592,7 @@ void cnstr_shdsc_rfc4543_decap(u32 * con
|
|
|
|
|
@@ -1010,7 +1600,7 @@ void cnstr_shdsc_rfc4543_decap(u32 * con
|
|
|
|
|
read_move_cmd = append_move(desc, MOVE_SRC_DESCBUF | MOVE_DEST_MATH3 |
|
|
|
|
|
(0x6 << MOVE_LEN_SHIFT));
|
|
|
|
|
write_move_cmd = append_move(desc, MOVE_SRC_MATH3 | MOVE_DEST_DESCBUF |
|
|
|
|
@ -3434,7 +3435,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
/* Will read assoclen + cryptlen bytes */
|
|
|
|
|
append_math_sub(desc, VARSEQINLEN, SEQOUTLEN, REG0, CAAM_CMD_SZ);
|
|
|
|
|
@@ -1035,6 +1626,138 @@ void cnstr_shdsc_rfc4543_decap(u32 * con
|
|
|
|
|
@@ -1044,6 +1634,138 @@ void cnstr_shdsc_rfc4543_decap(u32 * con
|
|
|
|
|
}
|
|
|
|
|
EXPORT_SYMBOL(cnstr_shdsc_rfc4543_decap);
|
|
|
|
|
|
|
|
|
@ -3573,7 +3574,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
/*
|
|
|
|
|
* For ablkcipher encrypt and decrypt, read from req->src and
|
|
|
|
|
* write to req->dst
|
|
|
|
|
@@ -1053,7 +1776,8 @@ static inline void ablkcipher_append_src
|
|
|
|
|
@@ -1062,7 +1784,8 @@ static inline void ablkcipher_append_src
|
|
|
|
|
* @desc: pointer to buffer used for descriptor construction
|
|
|
|
|
* @cdata: pointer to block cipher transform definitions
|
|
|
|
|
* Valid algorithm values - one of OP_ALG_ALGSEL_{AES, DES, 3DES} ANDed
|
|
|
|
@ -3583,7 +3584,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
* @ivsize: initialization vector size
|
|
|
|
|
* @is_rfc3686: true when ctr(aes) is wrapped by rfc3686 template
|
|
|
|
|
* @ctx1_iv_off: IV offset in CONTEXT1 register
|
|
|
|
|
@@ -1075,7 +1799,7 @@ void cnstr_shdsc_ablkcipher_encap(u32 *
|
|
|
|
|
@@ -1084,7 +1807,7 @@ void cnstr_shdsc_ablkcipher_encap(u32 *
|
|
|
|
|
|
|
|
|
|
/* Load nonce into CONTEXT1 reg */
|
|
|
|
|
if (is_rfc3686) {
|
|
|
|
@ -3592,7 +3593,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
append_load_as_imm(desc, nonce, CTR_RFC3686_NONCE_SIZE,
|
|
|
|
|
LDST_CLASS_IND_CCB |
|
|
|
|
|
@@ -1118,7 +1842,8 @@ EXPORT_SYMBOL(cnstr_shdsc_ablkcipher_enc
|
|
|
|
|
@@ -1127,7 +1850,8 @@ EXPORT_SYMBOL(cnstr_shdsc_ablkcipher_enc
|
|
|
|
|
* @desc: pointer to buffer used for descriptor construction
|
|
|
|
|
* @cdata: pointer to block cipher transform definitions
|
|
|
|
|
* Valid algorithm values - one of OP_ALG_ALGSEL_{AES, DES, 3DES} ANDed
|
|
|
|
@ -3602,7 +3603,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
* @ivsize: initialization vector size
|
|
|
|
|
* @is_rfc3686: true when ctr(aes) is wrapped by rfc3686 template
|
|
|
|
|
* @ctx1_iv_off: IV offset in CONTEXT1 register
|
|
|
|
|
@@ -1140,7 +1865,7 @@ void cnstr_shdsc_ablkcipher_decap(u32 *
|
|
|
|
|
@@ -1149,7 +1873,7 @@ void cnstr_shdsc_ablkcipher_decap(u32 *
|
|
|
|
|
|
|
|
|
|
/* Load nonce into CONTEXT1 reg */
|
|
|
|
|
if (is_rfc3686) {
|
|
|
|
@ -3611,7 +3612,7 @@ Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
|
|
|
|
|
|
|
|
|
append_load_as_imm(desc, nonce, CTR_RFC3686_NONCE_SIZE,
|
|
|
|
|
LDST_CLASS_IND_CCB |
|
|
|
|
|
@@ -1209,7 +1934,7 @@ void cnstr_shdsc_ablkcipher_givencap(u32
|
|
|
|
|
@@ -1218,7 +1942,7 @@ void cnstr_shdsc_ablkcipher_givencap(u32
|
|
|
|
|
|
|
|
|
|
/* Load Nonce into CONTEXT1 reg */
|
|
|
|
|
if (is_rfc3686) {
|
|
|
|
|