This patch adds an example how to use padding none option with RSA.

Signed-off-by: Arek Kusztal <arkadiuszx.kusz...@intel.com>
---
 app/test/test_cryptodev_asym.c | 46 +++++++++++++++++++++++++++++++++---------
 1 file changed, 37 insertions(+), 9 deletions(-)

diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c
index 0e1277b..fa5ddab 100644
--- a/app/test/test_cryptodev_asym.c
+++ b/app/test/test_cryptodev_asym.c
@@ -157,13 +157,15 @@ queue_ops_rsa_sign_verify(struct 
rte_cryptodev_asym_session *sess)
 }
 
 static int
-queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session *sess)
+queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session *sess,
+               enum rte_crypto_rsa_padding_type padding)
 {
        struct crypto_testsuite_params *ts_params = &testsuite_params;
        struct rte_mempool *op_mpool = ts_params->op_mpool;
        uint8_t dev_id = ts_params->valid_devs[0];
        struct rte_crypto_op *op, *result_op;
        struct rte_crypto_asym_op *asym_op;
+       uint8_t input_buf[TEST_DATA_SIZE] = {0};
        uint8_t cipher_buf[TEST_DATA_SIZE] = {0};
        int ret, status = TEST_SUCCESS;
 
@@ -180,11 +182,19 @@ queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session 
*sess)
        /* Compute encryption on the test vector */
        asym_op->rsa.op_type = RTE_CRYPTO_ASYM_OP_ENCRYPT;
 
-       asym_op->rsa.message.data = rsaplaintext.data;
        asym_op->rsa.cipher.data = cipher_buf;
        asym_op->rsa.cipher.length = 0;
-       asym_op->rsa.message.length = rsaplaintext.len;
-       asym_op->rsa.pad = RTE_CRYPTO_RSA_PADDING_PKCS1_5;
+       asym_op->rsa.pad = padding;
+
+       if (padding == RTE_CRYPTO_RSA_PADDING_NONE) {
+               rsa_simulate_pkcs1_5_padding(0, input_buf, 
rsa_xform.rsa.n.length,
+                               rsaplaintext.data, rsaplaintext.len);
+               asym_op->rsa.message.length = rsa_xform.rsa.n.length;
+               asym_op->rsa.message.data = input_buf;
+       } else if (padding == RTE_CRYPTO_RSA_PADDING_PKCS1_5) {
+               asym_op->rsa.message.data = rsaplaintext.data;
+               asym_op->rsa.message.length = rsaplaintext.len;
+       }
 
        debug_hexdump(stdout, "message", asym_op->rsa.message.data,
                      asym_op->rsa.message.length);
@@ -215,7 +225,7 @@ queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session 
*sess)
        /* Use the resulted output as decryption Input vector*/
        asym_op = result_op->asym;
        asym_op->rsa.op_type = RTE_CRYPTO_ASYM_OP_DECRYPT;
-       asym_op->rsa.pad = RTE_CRYPTO_RSA_PADDING_PKCS1_5;
+       asym_op->rsa.pad = padding;
 
        /* Process crypto operation */
        if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
@@ -233,6 +243,13 @@ queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session 
*sess)
                goto error_exit;
        }
        status = TEST_SUCCESS;
+
+       if (padding == RTE_CRYPTO_RSA_PADDING_NONE) {
+               result_op->asym->rsa.message.length =
+                       
rsa_simulate_strip_pkcs1_5_padding(result_op->asym->rsa.message.data,
+                       rsa_xform.rsa.n.length);
+       }
+
        ret = rsa_verify(&rsaplaintext, result_op);
        if (ret)
                status = TEST_FAILED;
@@ -562,7 +579,7 @@ test_rsa_sign_verify(void)
 }
 
 static int
-test_rsa_enc_dec(void)
+test_rsa_enc_dec(enum rte_crypto_rsa_padding_type padding)
 {
        struct crypto_testsuite_params *ts_params = &testsuite_params;
        struct rte_mempool *sess_mpool = ts_params->session_mpool;
@@ -597,7 +614,7 @@ test_rsa_enc_dec(void)
                goto error_exit;
        }
 
-       status = queue_ops_rsa_enc_dec(sess);
+       status = queue_ops_rsa_enc_dec(sess, padding);
 
 error_exit:
 
@@ -610,6 +627,16 @@ test_rsa_enc_dec(void)
 }
 
 static int
+test_rsa_enc_dec_padding_none(void) {
+       return test_rsa_enc_dec(RTE_CRYPTO_RSA_PADDING_NONE);
+}
+
+static int
+test_rsa_enc_dec_padding_pkcs_1(void) {
+       return test_rsa_enc_dec(RTE_CRYPTO_RSA_PADDING_PKCS1_5);
+}
+
+static int
 test_rsa_sign_verify_crt(void)
 {
        struct crypto_testsuite_params *ts_params = &testsuite_params;
@@ -692,7 +719,7 @@ test_rsa_enc_dec_crt(void)
                status = TEST_FAILED;
                goto error_exit;
        }
-       status = queue_ops_rsa_enc_dec(sess);
+       status = queue_ops_rsa_enc_dec(sess, RTE_CRYPTO_RSA_PADDING_PKCS1_5);
 
 error_exit:
 
@@ -1767,7 +1794,8 @@ static struct unit_test_suite 
cryptodev_openssl_asym_testsuite  = {
                TEST_CASE_ST(ut_setup, ut_teardown, test_capability),
                TEST_CASE_ST(ut_setup, ut_teardown, test_dsa),
                TEST_CASE_ST(ut_setup, ut_teardown, test_dh_keygenration),
-               TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec),
+               TEST_CASE_ST(ut_setup, ut_teardown, 
test_rsa_enc_dec_padding_none),
+               TEST_CASE_ST(ut_setup, ut_teardown, 
test_rsa_enc_dec_padding_pkcs_1),
                TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_sign_verify),
                TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec_crt),
                TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_sign_verify_crt),
-- 
2.1.0

Reply via email to