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;
|
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)
|
static void mv_hash_algo_completion(void)
|
||||||
{
|
{
|
||||||
struct ahash_request *req = ahash_request_cast(cpg->cur_req);
|
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,
|
memcpy(req->result, cpg->sram + SRAM_DIGEST_BUF,
|
||||||
crypto_ahash_digestsize(crypto_ahash_reqtfm
|
crypto_ahash_digestsize(crypto_ahash_reqtfm
|
||||||
(req)));
|
(req)));
|
||||||
} else
|
} else {
|
||||||
|
mv_save_digest_state(ctx);
|
||||||
mv_hash_final_fallback(req);
|
mv_hash_final_fallback(req);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ctx->state[0] = readl(cpg->reg + DIGEST_INITIAL_VAL_A);
|
mv_save_digest_state(ctx);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue