crypto: mv_cesa - fix for hash finalisation with data
Since mv_hash_final_fallback() uses ctx->state, read out the digest state register before calling it. Signed-off-by: Phil Sutter <phil.sutter@viprinet.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
5741d2eeae
commit
4d03c5047a
|
@ -423,6 +423,15 @@ out:
|
|||
return rc;
|
||||
}
|
||||
|
||||
static void mv_save_digest_state(struct mv_req_hash_ctx *ctx)
|
||||
{
|
||||
ctx->state[0] = readl(cpg->reg + DIGEST_INITIAL_VAL_A);
|
||||
ctx->state[1] = readl(cpg->reg + DIGEST_INITIAL_VAL_B);
|
||||
ctx->state[2] = readl(cpg->reg + DIGEST_INITIAL_VAL_C);
|
||||
ctx->state[3] = readl(cpg->reg + DIGEST_INITIAL_VAL_D);
|
||||
ctx->state[4] = readl(cpg->reg + DIGEST_INITIAL_VAL_E);
|
||||
}
|
||||
|
||||
static void mv_hash_algo_completion(void)
|
||||
{
|
||||
struct ahash_request *req = ahash_request_cast(cpg->cur_req);
|
||||
|
@ -437,14 +446,12 @@ static void mv_hash_algo_completion(void)
|
|||
memcpy(req->result, cpg->sram + SRAM_DIGEST_BUF,
|
||||
crypto_ahash_digestsize(crypto_ahash_reqtfm
|
||||
(req)));
|
||||
} else
|
||||
mv_hash_final_fallback(req);
|
||||
} else {
|
||||
ctx->state[0] = readl(cpg->reg + DIGEST_INITIAL_VAL_A);
|
||||
ctx->state[1] = readl(cpg->reg + DIGEST_INITIAL_VAL_B);
|
||||
ctx->state[2] = readl(cpg->reg + DIGEST_INITIAL_VAL_C);
|
||||
ctx->state[3] = readl(cpg->reg + DIGEST_INITIAL_VAL_D);
|
||||
ctx->state[4] = readl(cpg->reg + DIGEST_INITIAL_VAL_E);
|
||||
mv_save_digest_state(ctx);
|
||||
mv_hash_final_fallback(req);
|
||||
}
|
||||
} else {
|
||||
mv_save_digest_state(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue