Update some patch for uadk_engine from mainline. Signed-off-by: Yang Shen <shenyang39@huawei.com> (cherry picked from commit 6ae4d8c0999343eddb153c4e4e879a6b66ef528f)
60 lines
1.9 KiB
Diff
60 lines
1.9 KiB
Diff
From 11016568bf6a929aebc216f5e7f5fd28b2e1d2a6 Mon Sep 17 00:00:00 2001
|
|
From: Kai Ye <yekai13@huawei.com>
|
|
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 <yekai13@huawei.com>
|
|
---
|
|
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
|
|
|