crypto: ccp - Fix 3DES complaint from ccp-crypto module
Crypto self-tests reveal an error:
alg: skcipher: cbc-des3-ccp encryption test failed (wrong output IV) on test vector 0, cfg="in-place"
The offset value should not be recomputed when retrieving the context.
Also, a code path exists which makes decisions based on older (version 3)
hardware; a v3 device deosn't support 3DES so remove this check.
Fixes: 990672d485
('crypto: ccp - Enable 3DES function on v5 CCPs')
Signed-off-by: Gary R Hook <gary.hook@amd.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Родитель
c3b359d656
Коммит
89646fdda4
|
@ -1267,6 +1267,9 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
|
|||
int ret;
|
||||
|
||||
/* Error checks */
|
||||
if (cmd_q->ccp->vdata->version < CCP_VERSION(5, 0))
|
||||
return -EINVAL;
|
||||
|
||||
if (!cmd_q->ccp->vdata->perform->des3)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1349,8 +1352,6 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
|
|||
* passthru option to convert from big endian to little endian.
|
||||
*/
|
||||
if (des3->mode != CCP_DES3_MODE_ECB) {
|
||||
u32 load_mode;
|
||||
|
||||
op.sb_ctx = cmd_q->sb_ctx;
|
||||
|
||||
ret = ccp_init_dm_workarea(&ctx, cmd_q,
|
||||
|
@ -1366,12 +1367,8 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
|
|||
if (ret)
|
||||
goto e_ctx;
|
||||
|
||||
if (cmd_q->ccp->vdata->version == CCP_VERSION(3, 0))
|
||||
load_mode = CCP_PASSTHRU_BYTESWAP_NOOP;
|
||||
else
|
||||
load_mode = CCP_PASSTHRU_BYTESWAP_256BIT;
|
||||
ret = ccp_copy_to_sb(cmd_q, &ctx, op.jobid, op.sb_ctx,
|
||||
load_mode);
|
||||
CCP_PASSTHRU_BYTESWAP_256BIT);
|
||||
if (ret) {
|
||||
cmd->engine_error = cmd_q->cmd_error;
|
||||
goto e_ctx;
|
||||
|
@ -1433,10 +1430,6 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
|
|||
}
|
||||
|
||||
/* ...but we only need the last DES3_EDE_BLOCK_SIZE bytes */
|
||||
if (cmd_q->ccp->vdata->version == CCP_VERSION(3, 0))
|
||||
dm_offset = CCP_SB_BYTES - des3->iv_len;
|
||||
else
|
||||
dm_offset = 0;
|
||||
ccp_get_dm_area(&ctx, dm_offset, des3->iv, 0,
|
||||
DES3_EDE_BLOCK_SIZE);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче