For RSA verify operations with RTE_CRYPTO_RSA_PADDING_NONE, the driver
cannot determine which padding algorithm the application is using.
As per the API specification in rte_crypto_asym.h, when
RTE_CRYPTO_RSA_PADDING_NONE and RTE_CRYPTO_ASYM_OP_VERIFY are selected,
the decrypted signature should be returned to the application in the
cipher output buffer.
Fixes: dfd038b97ec3 ("crypto/cnxk: refactor RSA verification")
Signed-off-by: Garvit Varshney <[email protected]>
---
.mailmap | 1 +
drivers/crypto/cnxk/cnxk_ae.h | 7 ++++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/.mailmap b/.mailmap
index 2f089326ff..730f02707a 100644
--- a/.mailmap
+++ b/.mailmap
@@ -496,6 +496,7 @@ Ganghui Zeng <[email protected]>
Gao Feng <[email protected]>
Gaoxiang Liu <[email protected]>
Gargi Sau <[email protected]>
+Garvit Varshney <[email protected]>
Gary Mussar <[email protected]>
Gaurav Singh <[email protected]>
Gautam Dawar <[email protected]>
diff --git a/drivers/crypto/cnxk/cnxk_ae.h b/drivers/crypto/cnxk/cnxk_ae.h
index 912a2a9496..21a0c8068a 100644
--- a/drivers/crypto/cnxk/cnxk_ae.h
+++ b/drivers/crypto/cnxk/cnxk_ae.h
@@ -1591,9 +1591,10 @@ cnxk_ae_dequeue_rsa_op(struct rte_crypto_op *cop,
uint8_t *rptr,
break;
case RTE_CRYPTO_ASYM_OP_VERIFY:
if (rsa_ctx->padding.type == RTE_CRYPTO_RSA_PADDING_NONE) {
- rsa->sign.length = rsa_ctx->n.length;
- if (memcmp(rptr, rsa->message.data,
rsa->message.length))
- cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
+ /* Application compares decrypted data with message for
SW padding schemes
+ */
+ rsa->cipher.length = rsa_ctx->n.length;
+ memcpy(rsa->cipher.data, rptr, rsa->cipher.length);
} else {
/* Get length of signed output */
rsa->sign.length = rte_cpu_to_be_16(*((uint16_t
*)rptr));
--
2.25.1