From 11016568bf6a929aebc216f5e7f5fd28b2e1d2a6 Mon Sep 17 00:00:00 2001 From: Kai Ye Date: Thu, 12 May 2022 10:31:56 +0800 Subject: [PATCH 42/57] cipher: adding an iv update to a decryption Adding an iv update to de-crypto method as cbc mode. the dst address should not be changed. So fix it. Signed-off-by: Kai Ye --- src/uadk_cipher.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/uadk_cipher.c b/src/uadk_cipher.c index 8a2c39d..49022f7 100644 --- a/src/uadk_cipher.c +++ b/src/uadk_cipher.c @@ -763,10 +763,13 @@ static void uadk_cipher_update_priv_ctx(struct cipher_priv_ctx *priv) switch (priv->setup.mode) { case WD_CIPHER_CBC: - if (priv->req.op_type == WD_CIPHER_ENCRYPTION) { - priv->req.dst += priv->req.in_bytes; - memcpy(priv->iv, priv->req.dst - iv_bytes, iv_bytes); - } + if (priv->req.op_type == WD_CIPHER_ENCRYPTION) + memcpy(priv->iv, priv->req.dst + priv->req.in_bytes - iv_bytes, + iv_bytes); + else + memcpy(priv->iv, priv->req.src + priv->req.in_bytes - iv_bytes, + iv_bytes); + break; case WD_CIPHER_OFB: for (i = 0; i < IV_LEN; i++) { @@ -776,13 +779,13 @@ static void uadk_cipher_update_priv_ctx(struct cipher_priv_ctx *priv) memcpy(priv->iv, K, iv_bytes); break; case WD_CIPHER_CFB: - if (priv->req.op_type == WD_CIPHER_ENCRYPTION) { - priv->req.dst += priv->req.in_bytes; - memcpy(priv->iv, priv->req.dst - iv_bytes, iv_bytes); - } else { - priv->req.src += priv->req.in_bytes; - memcpy(priv->iv, priv->req.src - iv_bytes, iv_bytes); - } + if (priv->req.op_type == WD_CIPHER_ENCRYPTION) + memcpy(priv->iv, priv->req.dst + priv->req.in_bytes - iv_bytes, + iv_bytes); + else + memcpy(priv->iv, priv->req.src + priv->req.in_bytes - iv_bytes, + iv_bytes); + break; case WD_CIPHER_CTR: ctr_iv_inc(priv->iv, priv->req.in_bytes >> CTR_MODE_LEN_SHIFT); -- 2.27.0