This commit reworks implementation of RSA algorithm
in OPENSSL PMD to be conformant to API changes.

Signed-off-by: Arek Kusztal <arkadiuszx.kusz...@intel.com>
---
 drivers/crypto/openssl/rte_openssl_pmd.c | 67 ++++++++++++++++++--------------
 1 file changed, 38 insertions(+), 29 deletions(-)

diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c 
b/drivers/crypto/openssl/rte_openssl_pmd.c
index 7c8bf0d..642580b 100644
--- a/drivers/crypto/openssl/rte_openssl_pmd.c
+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
@@ -1842,15 +1842,13 @@ process_openssl_rsa_op(struct rte_crypto_op *cop,
        int ret = 0;
        struct rte_crypto_asym_op *op = cop->asym;
        RSA *rsa = sess->u.r.rsa;
-       uint32_t pad = (op->rsa.pad);
+       uint32_t pad = (op->rsa.padding);
        uint8_t *tmp;
 
        cop->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
 
        switch (pad) {
-       case RTE_CRYPTO_RSA_PKCS1_V1_5_BT0:
-       case RTE_CRYPTO_RSA_PKCS1_V1_5_BT1:
-       case RTE_CRYPTO_RSA_PKCS1_V1_5_BT2:
+       case RTE_CRYPTO_RSA_PADDING_PKCS1:
                pad = RSA_PKCS1_PADDING;
                break;
        case RTE_CRYPTO_RSA_PADDING_NONE:
@@ -1867,19 +1865,19 @@ process_openssl_rsa_op(struct rte_crypto_op *cop,
        case RTE_CRYPTO_ASYM_OP_ENCRYPT:
                ret = RSA_public_encrypt(op->rsa.message.length,
                                op->rsa.message.data,
-                               op->rsa.message.data,
+                               op->rsa.cipher.data,
                                rsa,
                                pad);
 
                if (ret > 0)
-                       op->rsa.message.length = ret;
+                       op->rsa.cipher.length = ret;
                OPENSSL_LOG(DEBUG,
                                "length of encrypted text %d\n", ret);
                break;
 
        case RTE_CRYPTO_ASYM_OP_DECRYPT:
-               ret = RSA_private_decrypt(op->rsa.message.length,
-                               op->rsa.message.data,
+               ret = RSA_private_decrypt(op->rsa.cipher.length,
+                               op->rsa.cipher.data,
                                op->rsa.message.data,
                                rsa,
                                pad);
@@ -1898,28 +1896,39 @@ process_openssl_rsa_op(struct rte_crypto_op *cop,
                break;
 
        case RTE_CRYPTO_ASYM_OP_VERIFY:
-               tmp = rte_malloc(NULL, op->rsa.sign.length, 0);
-               if (tmp == NULL) {
-                       OPENSSL_LOG(ERR, "Memory allocation failed");
-                       cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-                       break;
-               }
-               ret = RSA_public_decrypt(op->rsa.sign.length,
-                               op->rsa.sign.data,
-                               tmp,
-                               rsa,
-                               pad);
-
-               OPENSSL_LOG(DEBUG,
-                               "Length of public_decrypt %d "
-                               "length of message %zd\n",
-                               ret, op->rsa.message.length);
-               if ((ret <= 0) || (CRYPTO_memcmp(tmp, op->rsa.message.data,
-                               op->rsa.message.length))) {
-                       OPENSSL_LOG(ERR, "RSA sign Verification failed");
-                       cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
+               if (pad == RSA_NO_PADDING) {
+                       ret = RSA_public_decrypt(op->rsa.sign.length,
+                                       op->rsa.sign.data,
+                                       op->rsa.message_to_verify.data,
+                                       rsa,
+                                       pad);
+
+                       if (ret > 0)
+                               op->rsa.message_to_verify.length = ret;
+               } else {
+                       tmp = rte_malloc(NULL, op->rsa.sign.length, 0);
+                       if (tmp == NULL) {
+                               OPENSSL_LOG(ERR, "Memory allocation failed");
+                               cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
+                               break;
+                       }
+                       ret = RSA_public_decrypt(op->rsa.sign.length,
+                                       op->rsa.sign.data,
+                                       tmp,
+                                       rsa,
+                                       pad);
+
+                       OPENSSL_LOG(DEBUG,
+                                       "Length of public_decrypt %d "
+                                       "length of message %zd\n",
+                                       ret, op->rsa.message.length);
+                       if ((ret <= 0) || (CRYPTO_memcmp(tmp, 
op->rsa.message.data,
+                                       op->rsa.message.length))) {
+                               OPENSSL_LOG(ERR, "RSA sign Verification 
failed");
+                               cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
+                       }
+                       rte_free(tmp);
                }
-               rte_free(tmp);
                break;
 
        default:
-- 
2.1.0

Reply via email to