[EXTERNAL] [PATCH 1/2] crypto/qat: fix asym session validation and gen4 EC caps

Rupesh Chiluka rchiluka at marvell.com
Tue Mar 24 08:08:26 CET 2026


Acked-by: Rupesh Chiluka <r<mailto:your.email at example.com>chiluka at marvell.com<mailto:chiluka at marvell.com>>
________________________________
From: Emma Finn <emma.finn at intel.com>
Sent: Monday, March 23, 2026 20:38
To: Akhil Goyal <gakhil at marvell.com>; Fan Zhang <fanzhang.oss at gmail.com>; Kai Ji <kai.ji at intel.com>; Rupesh Chiluka <rchiluka at marvell.com>
Cc: dev at dpdk.org <dev at dpdk.org>; Emma Finn <emma.finn at intel.com>
Subject: [EXTERNAL] [PATCH 1/2] crypto/qat: fix asym session validation and gen4 EC caps

Fix asym tests to return TEST_SKIPPED when session creation returns -ENOTSUP. Add missing ECDH, ECDSA and ECPM capabilities to GEN4 asym caps table. Reject unsupported RSA padding and EC curves at session configure time with -ENOTSUP. Bugzilla
ZjQcmQRYFpfptBannerStart
Prioritize security for external emails:
Confirm sender and content safety before clicking links or opening attachments
<https://us-phishalarm-ewt.proofpoint.com/EWT/v1/CRVmXkqW!te3Z1f8UYnW6tG-cGdxazuubvGPgl6yTU24HHC1z9RV5wPQjtl7qP0oEMSmeVZTwYYHqm4_Boxty5bBSBE8DJtAeSS0s7DY$>
Report Suspicious

ZjQcmQRYFpfptBannerEnd

Fix asym tests to return TEST_SKIPPED when session
creation returns -ENOTSUP. Add missing ECDH, ECDSA and ECPM
capabilities to GEN4 asym caps table. Reject unsupported RSA
padding and EC curves at session configure time with -ENOTSUP.

Bugzilla ID: 1903
Fixes: 064ef1b098d1 ("test/crypto: remove PMD-specific asym test suites")

Signed-off-by: Emma Finn <emma.finn at intel.com>
---
 app/test/test_cryptodev_asym.c               | 38 ++++++++++++++++----
 drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c | 13 +++++++
 drivers/crypto/qat/qat_asym.c                | 10 ++++++
 3 files changed, 55 insertions(+), 6 deletions(-)

diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c
index 793cc5dce6..1515372a35 100644
--- a/app/test/test_cryptodev_asym.c
+++ b/app/test/test_cryptodev_asym.c
@@ -318,6 +318,9 @@ test_rsa_sign_verify(void)
 error_exit:
        rte_cryptodev_asym_session_free(dev_id, sess);

+       if (status == TEST_SKIPPED)
+               return status;
+
        TEST_ASSERT_EQUAL(status, 0, "Test failed");

        return status;
@@ -368,6 +371,9 @@ test_rsa_enc_dec(void)

        rte_cryptodev_asym_session_free(dev_id, sess);

+       if (status == TEST_SKIPPED)
+               return status;
+
        TEST_ASSERT_EQUAL(status, 0, "Test failed");

        return status;
@@ -414,6 +420,9 @@ test_rsa_sign_verify_crt(void)

        rte_cryptodev_asym_session_free(dev_id, sess);

+       if (status == TEST_SKIPPED)
+               return status;
+
        TEST_ASSERT_EQUAL(status, 0, "Test failed");

        return status;
@@ -460,6 +469,9 @@ test_rsa_enc_dec_crt(void)

        rte_cryptodev_asym_session_free(dev_id, sess);

+       if (status == TEST_SKIPPED)
+               return status;
+
        TEST_ASSERT_EQUAL(status, 0, "Test failed");

        return status;
@@ -1712,6 +1724,8 @@ test_ecdsa_sign_verify_all_curve(void)
                status = test_ecdsa_sign_verify(curve_id);
                if (status == TEST_SUCCESS) {
                        msg = "succeeded";
+               } else if (status == TEST_SKIPPED) {
+                       msg = "skipped";
                } else {
                        msg = "failed";
                        overall_status = status;
@@ -1901,6 +1915,8 @@ test_ecpm_all_curve(void)
                status = test_ecpm(curve_id);
                if (status == TEST_SUCCESS) {
                        msg = "succeeded";
+               } else if (status == TEST_SKIPPED) {
+                       msg = "skipped";
                } else {
                        msg = "failed";
                        overall_status = status;
@@ -1956,10 +1972,10 @@ test_ecdh_priv_key_generate(enum curve curve_id)
        idx.type = RTE_CRYPTO_ASYM_XFORM_ECDH;
        capa = rte_cryptodev_asym_capability_get(dev_id, &idx);
        if (capa == NULL)
-               return -ENOTSUP;
+               return TEST_SKIPPED;

        if (!(capa->op_types & (1 <<  RTE_CRYPTO_ASYM_KE_PRIV_KEY_GENERATE)))
-               return -ENOTSUP;
+               return TEST_SKIPPED;

        switch (curve_id) {
        case SECP192R1:
@@ -2269,10 +2285,10 @@ test_ecdh_pub_key_verify(enum curve curve_id)
        idx.type = RTE_CRYPTO_ASYM_XFORM_ECDH;
        capa = rte_cryptodev_asym_capability_get(dev_id, &idx);
        if (capa == NULL)
-               return -ENOTSUP;
+               return TEST_SKIPPED;

        if (!(capa->op_types & (1 <<  RTE_CRYPTO_ASYM_KE_PUB_KEY_VERIFY)))
-               return -ENOTSUP;
+               return TEST_SKIPPED;

        switch (curve_id) {
        case SECP192R1:
@@ -2408,10 +2424,10 @@ test_ecdh_shared_secret(enum curve curve_id)
        idx.type = RTE_CRYPTO_ASYM_XFORM_ECDH;
        capa = rte_cryptodev_asym_capability_get(dev_id, &idx);
        if (capa == NULL)
-               return -ENOTSUP;
+               return TEST_SKIPPED;

        if (!(capa->op_types & (1 <<  RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE)))
-               return -ENOTSUP;
+               return TEST_SKIPPED;

        switch (curve_id) {
        case SECP192R1:
@@ -2668,6 +2684,8 @@ test_ecdh_all_curve(void)
                status = test_ecdh_priv_key_generate(curve_id);
                if (status == TEST_SUCCESS) {
                        msg = "succeeded";
+               } else if (status == TEST_SKIPPED) {
+                       msg = "skipped";
                } else {
                        msg = "failed";
                        overall_status = status;
@@ -2700,6 +2718,8 @@ test_ecdh_all_curve(void)
                status = test_ecdh_pub_key_verify(curve_id);
                if (status == TEST_SUCCESS) {
                        msg = "succeeded";
+               } else if (status == TEST_SKIPPED) {
+                       msg = "skipped";
                } else {
                        msg = "failed";
                        overall_status = status;
@@ -2715,6 +2735,8 @@ test_ecdh_all_curve(void)
                status = test_ecdh_shared_secret(curve_id);
                if (status == TEST_SUCCESS) {
                        msg = "succeeded";
+               } else if (status == TEST_SKIPPED) {
+                       msg = "skipped";
                } else {
                        msg = "failed";
                        overall_status = status;
@@ -2752,6 +2774,8 @@ test_ecdh_qat_curves(void)
                status = test_ecdh_pub_key_verify(curve_id);
                if (status == TEST_SUCCESS) {
                        msg = "succeeded";
+               } else if (status == TEST_SKIPPED) {
+                       msg = "skipped";
                } else {
                        msg = "failed";
                        overall_status = status;
@@ -2764,6 +2788,8 @@ test_ecdh_qat_curves(void)
                status = test_ecdh_shared_secret(curve_id);
                if (status == TEST_SUCCESS) {
                        msg = "succeeded";
+               } else if (status == TEST_SKIPPED) {
+                       msg = "skipped";
                } else {
                        msg = "failed";
                        overall_status = status;
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c b/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
index 82c5a40501..52577f6907 100644
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
@@ -144,6 +144,19 @@ static struct rte_cryptodev_capabilities qat_asym_crypto_caps_gen4[] = {
                }
                }
        },
+       QAT_ASYM_CAP(ECDH,
+                       ((1 << RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE) |
+                       (1 << RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE) |
+                       (1 << RTE_CRYPTO_ASYM_KE_PUB_KEY_VERIFY)),
+                       64, 512, 64),
+       QAT_ASYM_CAP(ECDSA,
+                       ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
+                       (1 << RTE_CRYPTO_ASYM_OP_VERIFY)),
+                       64, 512, 64),
+       QAT_ASYM_CAP(ECPM,
+                       ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
+                       (1 << RTE_CRYPTO_ASYM_OP_VERIFY)),
+                       64, 512, 64),
        RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
 };

diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c
index 06f037cc14..beb5a27805 100644
--- a/drivers/crypto/qat/qat_asym.c
+++ b/drivers/crypto/qat/qat_asym.c
@@ -1483,6 +1483,12 @@ static int
 session_set_ec(struct qat_asym_session *qat_session,
                        struct rte_crypto_asym_xform *xform)
 {
+       /* Validate curve for EC operations using pick_curve (not SM2) */
+       if (xform->xform_type != RTE_CRYPTO_ASYM_XFORM_SM2) {
+               if (pick_curve(xform) < 0)
+                       return -ENOTSUP;
+       }
+
        uint8_t *pkey = xform->ec.pkey.data;
        uint8_t *q_x = xform->ec.q.x.data;
        uint8_t *q_y = xform->ec.q.y.data;
@@ -1545,6 +1551,10 @@ qat_asym_session_configure(struct rte_cryptodev *dev __rte_unused,
                ret = session_set_modinv(qat_session, xform);
                break;
        case RTE_CRYPTO_ASYM_XFORM_RSA: {
+               if (xform->rsa.padding.type != RTE_CRYPTO_RSA_PADDING_NONE) {
+                       ret = -ENOTSUP;
+                       return ret;
+               }
                if (unlikely((xform->rsa.n.length < RSA_MODULUS_2048_BITS)
                                && (crypto_qat->qat_dev->options.legacy_alg == 0))) {
                        ret = -ENOTSUP;
--
2.43.0


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20260324/80102854/attachment-0001.htm>


More information about the dev mailing list