X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Ftest_cryptodev_asym.c;h=e4b3c211df3e67ac9f300a968f2bad03ec92bdd4;hb=6496922368fe03be9ab4137f2d615dba1a766f39;hp=50ff5c7c9da234a21726e6b44272a9fb192aa70e;hpb=0438b7dff3f873532894ac14549727f90605f27d;p=dpdk.git diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c index 50ff5c7c9d..e4b3c211df 100644 --- a/app/test/test_cryptodev_asym.c +++ b/app/test/test_cryptodev_asym.c @@ -3,8 +3,6 @@ * Copyright (c) 2019 Intel Corporation */ -#ifndef RTE_EXEC_ENV_WINDOWS - #include #include #include @@ -46,7 +44,7 @@ struct crypto_testsuite_params_asym { }; struct crypto_unittest_params { - struct rte_cryptodev_asym_session *sess; + void *sess; struct rte_crypto_op *op; }; @@ -67,7 +65,7 @@ static uint32_t test_index; static struct crypto_testsuite_params_asym testsuite_params = { NULL }; static int -queue_ops_rsa_sign_verify(struct rte_cryptodev_asym_session *sess) +queue_ops_rsa_sign_verify(void *sess) { struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; @@ -94,7 +92,7 @@ queue_ops_rsa_sign_verify(struct rte_cryptodev_asym_session *sess) asym_op->rsa.message.length = rsaplaintext.len; asym_op->rsa.sign.length = 0; asym_op->rsa.sign.data = output_buf; - asym_op->rsa.pad = RTE_CRYPTO_RSA_PADDING_PKCS1_5; + asym_op->rsa.padding.type = RTE_CRYPTO_RSA_PADDING_PKCS1_5; debug_hexdump(stdout, "message", asym_op->rsa.message.data, asym_op->rsa.message.length); @@ -126,7 +124,7 @@ queue_ops_rsa_sign_verify(struct rte_cryptodev_asym_session *sess) /* Verify sign */ asym_op->rsa.op_type = RTE_CRYPTO_ASYM_OP_VERIFY; - asym_op->rsa.pad = RTE_CRYPTO_RSA_PADDING_PKCS1_5; + asym_op->rsa.padding.type = RTE_CRYPTO_RSA_PADDING_PKCS1_5; /* Process crypto operation */ if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) { @@ -158,7 +156,7 @@ error_exit: } static int -queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session *sess) +queue_ops_rsa_enc_dec(void *sess) { struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; @@ -185,7 +183,7 @@ queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session *sess) 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.padding.type = RTE_CRYPTO_RSA_PADDING_PKCS1_5; debug_hexdump(stdout, "message", asym_op->rsa.message.data, asym_op->rsa.message.length); @@ -217,7 +215,7 @@ queue_ops_rsa_enc_dec(struct rte_cryptodev_asym_session *sess) asym_op = result_op->asym; asym_op->rsa.message.length = 0; asym_op->rsa.op_type = RTE_CRYPTO_ASYM_OP_DECRYPT; - asym_op->rsa.pad = RTE_CRYPTO_RSA_PADDING_PKCS1_5; + asym_op->rsa.padding.type = RTE_CRYPTO_RSA_PADDING_PKCS1_5; /* Process crypto operation */ if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) { @@ -310,14 +308,14 @@ test_cryptodev_asym_op(struct crypto_testsuite_params_asym *ts_params, struct rte_crypto_op *op = NULL; struct rte_crypto_op *result_op = NULL; struct rte_crypto_asym_xform xform_tc; - struct rte_cryptodev_asym_session *sess = NULL; + void *sess = NULL; struct rte_cryptodev_asym_capability_idx cap_idx; const struct rte_cryptodev_asymmetric_xform_capability *capability; uint8_t dev_id = ts_params->valid_devs[0]; uint8_t input[TEST_DATA_SIZE] = {0}; uint8_t *result = NULL; - int status = TEST_SUCCESS; + int ret, status = TEST_SUCCESS; xform_tc.next = NULL; xform_tc.xform_type = data_tc->modex.xform_type; @@ -414,7 +412,7 @@ test_cryptodev_asym_op(struct crypto_testsuite_params_asym *ts_params, } xform_tc.rsa.key_type = key_type; - op->asym->rsa.pad = data_tc->rsa_data.padding; + op->asym->rsa.padding.type = data_tc->rsa_data.padding; if (op->asym->rsa.op_type == RTE_CRYPTO_ASYM_OP_ENCRYPT) { asym_op->rsa.message.data = data_tc->rsa_data.pt.data; @@ -452,22 +450,14 @@ test_cryptodev_asym_op(struct crypto_testsuite_params_asym *ts_params, } if (!sessionless) { - sess = rte_cryptodev_asym_session_create(ts_params->session_mpool); - if (!sess) { + ret = rte_cryptodev_asym_session_create(dev_id, &xform_tc, + ts_params->session_mpool, &sess); + if (ret < 0) { snprintf(test_msg, ASYM_TEST_MSG_LEN, "line %u " "FAILED: %s", __LINE__, "Session creation failed"); - status = TEST_FAILED; - goto error_exit; - } - - if (rte_cryptodev_asym_session_init(dev_id, sess, &xform_tc, - ts_params->session_mpool) < 0) { - snprintf(test_msg, ASYM_TEST_MSG_LEN, - "line %u FAILED: %s", - __LINE__, "unabled to config sym session"); - status = TEST_FAILED; + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } @@ -512,10 +502,8 @@ test_cryptodev_asym_op(struct crypto_testsuite_params_asym *ts_params, snprintf(test_msg, ASYM_TEST_MSG_LEN, "SESSIONLESS PASS"); error_exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); @@ -559,7 +547,7 @@ test_one_case(const void *test_case, int sessionless) status = test_cryptodev_asym_op( &testsuite_params, &tc, test_msg, sessionless, i, - RTE_RSA_KET_TYPE_QT); + RTE_RSA_KEY_TYPE_QT); } if (status) break; @@ -653,9 +641,9 @@ test_rsa_sign_verify(void) struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; - struct rte_cryptodev_asym_session *sess; + void *sess = NULL; struct rte_cryptodev_info dev_info; - int status = TEST_SUCCESS; + int ret, status = TEST_SUCCESS; /* Test case supports op with exponent key only, * Check in PMD feature flag for RSA exponent key type support. @@ -668,28 +656,19 @@ test_rsa_sign_verify(void) return TEST_SKIPPED; } - sess = rte_cryptodev_asym_session_create(sess_mpool); + ret = rte_cryptodev_asym_session_create(dev_id, &rsa_xform, sess_mpool, &sess); - if (!sess) { + if (ret < 0) { RTE_LOG(ERR, USER1, "Session creation failed for " "sign_verify\n"); - return TEST_FAILED; - } - - if (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform, - sess_mpool) < 0) { - RTE_LOG(ERR, USER1, "Unable to config asym session for " - "sign_verify\n"); - status = TEST_FAILED; + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } status = queue_ops_rsa_sign_verify(sess); error_exit: - - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); + rte_cryptodev_asym_session_free(dev_id, sess); TEST_ASSERT_EQUAL(status, 0, "Test failed"); @@ -702,9 +681,9 @@ test_rsa_enc_dec(void) struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; - struct rte_cryptodev_asym_session *sess; + void *sess = NULL; struct rte_cryptodev_info dev_info; - int status = TEST_SUCCESS; + int ret, status = TEST_SUCCESS; /* Test case supports op with exponent key only, * Check in PMD feature flag for RSA exponent key type support. @@ -717,18 +696,11 @@ test_rsa_enc_dec(void) return TEST_SKIPPED; } - sess = rte_cryptodev_asym_session_create(sess_mpool); + ret = rte_cryptodev_asym_session_create(dev_id, &rsa_xform, sess_mpool, &sess); - if (!sess) { + if (ret < 0) { RTE_LOG(ERR, USER1, "Session creation failed for enc_dec\n"); - return TEST_FAILED; - } - - if (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform, - sess_mpool) < 0) { - RTE_LOG(ERR, USER1, "Unable to config asym session for " - "enc_dec\n"); - status = TEST_FAILED; + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } @@ -736,8 +708,7 @@ test_rsa_enc_dec(void) error_exit: - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); + rte_cryptodev_asym_session_free(dev_id, sess); TEST_ASSERT_EQUAL(status, 0, "Test failed"); @@ -750,9 +721,9 @@ test_rsa_sign_verify_crt(void) struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; - struct rte_cryptodev_asym_session *sess; + void *sess = NULL; struct rte_cryptodev_info dev_info; - int status = TEST_SUCCESS; + int ret, status = TEST_SUCCESS; /* Test case supports op with quintuple format key only, * Check im PMD feature flag for RSA quintuple key type support. @@ -764,28 +735,20 @@ test_rsa_sign_verify_crt(void) return TEST_SKIPPED; } - sess = rte_cryptodev_asym_session_create(sess_mpool); + ret = rte_cryptodev_asym_session_create(dev_id, &rsa_xform_crt, sess_mpool, &sess); - if (!sess) { + if (ret < 0) { RTE_LOG(ERR, USER1, "Session creation failed for " "sign_verify_crt\n"); - status = TEST_FAILED; - return status; - } - - if (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform_crt, - sess_mpool) < 0) { - RTE_LOG(ERR, USER1, "Unable to config asym session for " - "sign_verify_crt\n"); - status = TEST_FAILED; + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } + status = queue_ops_rsa_sign_verify(sess); error_exit: - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); + rte_cryptodev_asym_session_free(dev_id, sess); TEST_ASSERT_EQUAL(status, 0, "Test failed"); @@ -798,9 +761,9 @@ test_rsa_enc_dec_crt(void) struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *sess_mpool = ts_params->session_mpool; uint8_t dev_id = ts_params->valid_devs[0]; - struct rte_cryptodev_asym_session *sess; + void *sess = NULL; struct rte_cryptodev_info dev_info; - int status = TEST_SUCCESS; + int ret, status = TEST_SUCCESS; /* Test case supports op with quintuple format key only, * Check in PMD feature flag for RSA quintuple key type support. @@ -812,27 +775,20 @@ test_rsa_enc_dec_crt(void) return TEST_SKIPPED; } - sess = rte_cryptodev_asym_session_create(sess_mpool); + ret = rte_cryptodev_asym_session_create(dev_id, &rsa_xform_crt, sess_mpool, &sess); - if (!sess) { + if (ret < 0) { RTE_LOG(ERR, USER1, "Session creation failed for " "enc_dec_crt\n"); - return TEST_FAILED; - } - - if (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform_crt, - sess_mpool) < 0) { - RTE_LOG(ERR, USER1, "Unable to config asym session for " - "enc_dec_crt\n"); - status = TEST_FAILED; + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } + status = queue_ops_rsa_enc_dec(sess); error_exit: - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); + rte_cryptodev_asym_session_free(dev_id, sess); TEST_ASSERT_EQUAL(status, 0, "Test failed"); @@ -926,7 +882,6 @@ testsuite_setup(void) /* configure qp */ ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; ts_params->qp_conf.mp_session = ts_params->session_mpool; - ts_params->qp_conf.mp_session_private = ts_params->session_mpool; for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) { TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( dev_id, qp_id, &ts_params->qp_conf, @@ -935,21 +890,9 @@ testsuite_setup(void) qp_id, dev_id); } - /* setup asym session pool */ - unsigned int session_size = RTE_MAX( - rte_cryptodev_asym_get_private_session_size(dev_id), - rte_cryptodev_asym_get_header_session_size()); - /* - * Create mempool with TEST_NUM_SESSIONS * 2, - * to include the session headers - */ - ts_params->session_mpool = rte_mempool_create( - "test_asym_sess_mp", - TEST_NUM_SESSIONS * 2, - session_size, - 0, 0, NULL, NULL, NULL, - NULL, SOCKET_ID_ANY, - 0); + ts_params->session_mpool = rte_cryptodev_asym_session_pool_create( + "test_asym_sess_mp", TEST_NUM_SESSIONS, 0, 0, + SOCKET_ID_ANY); TEST_ASSERT_NOT_NULL(ts_params->session_mpool, "session mempool allocation failed"); @@ -1031,27 +974,30 @@ static inline void print_asym_capa( for (i = 0; i < RTE_CRYPTO_ASYM_OP_LIST_END; i++) { /* check supported operations */ - if (rte_cryptodev_asym_xform_capability_check_optype(capa, i)) - printf(" %s", - rte_crypto_asym_op_strings[i]); + if (rte_cryptodev_asym_xform_capability_check_optype(capa, i)) { + if (capa->xform_type == RTE_CRYPTO_ASYM_XFORM_DH) + printf(" %s", rte_crypto_asym_ke_strings[i]); + else + printf(" %s", rte_crypto_asym_op_strings[i]); } - switch (capa->xform_type) { - case RTE_CRYPTO_ASYM_XFORM_RSA: - case RTE_CRYPTO_ASYM_XFORM_MODINV: - case RTE_CRYPTO_ASYM_XFORM_MODEX: - case RTE_CRYPTO_ASYM_XFORM_DH: - case RTE_CRYPTO_ASYM_XFORM_DSA: - printf(" modlen: min %d max %d increment %d", - capa->modlen.min, - capa->modlen.max, - capa->modlen.increment); + } + switch (capa->xform_type) { + case RTE_CRYPTO_ASYM_XFORM_RSA: + case RTE_CRYPTO_ASYM_XFORM_MODINV: + case RTE_CRYPTO_ASYM_XFORM_MODEX: + case RTE_CRYPTO_ASYM_XFORM_DH: + case RTE_CRYPTO_ASYM_XFORM_DSA: + printf(" modlen: min %d max %d increment %d", + capa->modlen.min, + capa->modlen.max, + capa->modlen.increment); + break; + case RTE_CRYPTO_ASYM_XFORM_ECDSA: + case RTE_CRYPTO_ASYM_XFORM_ECPM: + default: break; - case RTE_CRYPTO_ASYM_XFORM_ECDSA: - case RTE_CRYPTO_ASYM_XFORM_ECPM: - default: - break; - } - printf("\n"); + } + printf("\n"); } static int @@ -1100,20 +1046,12 @@ test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm) uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_asym_op *asym_op = NULL; struct rte_crypto_op *op = NULL, *result_op = NULL; - struct rte_cryptodev_asym_session *sess = NULL; - int status = TEST_SUCCESS; + void *sess = NULL; + int ret, status = TEST_SUCCESS; uint8_t output[TEST_DH_MOD_LEN]; struct rte_crypto_asym_xform xform = *xfrm; uint8_t peer[] = "01234567890123456789012345678901234567890123456789"; - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (sess == NULL) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", __LINE__, - "Session creation failed"); - status = TEST_FAILED; - goto error_exit; - } /* set up crypto op data structure */ op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC); if (!op) { @@ -1127,8 +1065,8 @@ test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm) asym_op = op->asym; /* Setup a xform and op to generate private key only */ - xform.dh.type = RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE; xform.next = NULL; + asym_op->dh.ke_type = RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE; asym_op->dh.priv_key.data = dh_test_params.priv_key.data; asym_op->dh.priv_key.length = dh_test_params.priv_key.length; asym_op->dh.pub_key.data = (uint8_t *)peer; @@ -1136,12 +1074,12 @@ test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm) asym_op->dh.shared_secret.data = output; asym_op->dh.shared_secret.length = sizeof(output); - if (rte_cryptodev_asym_session_init(dev_id, sess, &xform, - sess_mpool) < 0) { + ret = rte_cryptodev_asym_session_create(dev_id, &xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, - "line %u FAILED: %s", - __LINE__, "unabled to config sym session"); - status = TEST_FAILED; + "line %u FAILED: %s", __LINE__, + "Session creation failed"); + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } @@ -1175,10 +1113,8 @@ test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm) asym_op->dh.shared_secret.length); error_exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); return status; @@ -1193,19 +1129,11 @@ test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm) uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_asym_op *asym_op = NULL; struct rte_crypto_op *op = NULL, *result_op = NULL; - struct rte_cryptodev_asym_session *sess = NULL; - int status = TEST_SUCCESS; + void *sess = NULL; + int ret, status = TEST_SUCCESS; uint8_t output[TEST_DH_MOD_LEN]; struct rte_crypto_asym_xform xform = *xfrm; - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (sess == NULL) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", __LINE__, - "Session creation failed"); - status = TEST_FAILED; - goto error_exit; - } /* set up crypto op data structure */ op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC); if (!op) { @@ -1219,17 +1147,17 @@ test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm) asym_op = op->asym; /* Setup a xform and op to generate private key only */ - xform.dh.type = RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE; xform.next = NULL; + asym_op->dh.ke_type = RTE_CRYPTO_ASYM_KE_PRIV_KEY_GENERATE; asym_op->dh.priv_key.data = output; asym_op->dh.priv_key.length = sizeof(output); - if (rte_cryptodev_asym_session_init(dev_id, sess, &xform, - sess_mpool) < 0) { + ret = rte_cryptodev_asym_session_create(dev_id, &xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, - "line %u FAILED: %s", - __LINE__, "unabled to config sym session"); - status = TEST_FAILED; + "line %u FAILED: %s", __LINE__, + "Session creation failed"); + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } @@ -1264,10 +1192,8 @@ test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm) error_exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); @@ -1284,19 +1210,11 @@ test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm) uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_asym_op *asym_op = NULL; struct rte_crypto_op *op = NULL, *result_op = NULL; - struct rte_cryptodev_asym_session *sess = NULL; - int status = TEST_SUCCESS; + void *sess = NULL; + int ret, status = TEST_SUCCESS; uint8_t output[TEST_DH_MOD_LEN]; struct rte_crypto_asym_xform xform = *xfrm; - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (sess == NULL) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", __LINE__, - "Session creation failed"); - status = TEST_FAILED; - goto error_exit; - } /* set up crypto op data structure */ op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC); if (!op) { @@ -1312,9 +1230,9 @@ test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm) * using test private key * */ - xform.dh.type = RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE; xform.next = NULL; + asym_op->dh.ke_type = RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE; asym_op->dh.pub_key.data = output; asym_op->dh.pub_key.length = sizeof(output); /* load pre-defined private key */ @@ -1323,12 +1241,12 @@ test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm) 0); asym_op->dh.priv_key = dh_test_params.priv_key; - if (rte_cryptodev_asym_session_init(dev_id, sess, &xform, - sess_mpool) < 0) { + ret = rte_cryptodev_asym_session_create(dev_id, &xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, - "line %u FAILED: %s", - __LINE__, "unabled to config sym session"); - status = TEST_FAILED; + "line %u FAILED: %s", __LINE__, + "Session creation failed"); + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } @@ -1364,10 +1282,8 @@ test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm) asym_op->dh.priv_key.data, asym_op->dh.priv_key.length); error_exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); @@ -1383,22 +1299,13 @@ test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm) uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_asym_op *asym_op = NULL; struct rte_crypto_op *op = NULL, *result_op = NULL; - struct rte_cryptodev_asym_session *sess = NULL; - int status = TEST_SUCCESS; + void *sess = NULL; + int ret, status = TEST_SUCCESS; uint8_t out_pub_key[TEST_DH_MOD_LEN]; uint8_t out_prv_key[TEST_DH_MOD_LEN]; struct rte_crypto_asym_xform pub_key_xform; struct rte_crypto_asym_xform xform = *xfrm; - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (sess == NULL) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", __LINE__, - "Session creation failed"); - status = TEST_FAILED; - goto error_exit; - } - /* set up crypto op data structure */ op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC); if (!op) { @@ -1413,21 +1320,22 @@ test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm) /* Setup a xform chain to generate * private key first followed by * public key - */xform.dh.type = RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE; + */ pub_key_xform.xform_type = RTE_CRYPTO_ASYM_XFORM_DH; - pub_key_xform.dh.type = RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE; xform.next = &pub_key_xform; + asym_op->dh.ke_type = RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE; asym_op->dh.pub_key.data = out_pub_key; asym_op->dh.pub_key.length = sizeof(out_pub_key); asym_op->dh.priv_key.data = out_prv_key; - asym_op->dh.priv_key.length = sizeof(out_prv_key); - if (rte_cryptodev_asym_session_init(dev_id, sess, &xform, - sess_mpool) < 0) { + asym_op->dh.priv_key.length = 0; + + ret = rte_cryptodev_asym_session_create(dev_id, &xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, - "line %u FAILED: %s", - __LINE__, "unabled to config sym session"); - status = TEST_FAILED; + "line %u FAILED: %s", __LINE__, + "Session creation failed"); + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } @@ -1461,10 +1369,8 @@ test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm) out_pub_key, asym_op->dh.pub_key.length); error_exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); @@ -1480,7 +1386,7 @@ test_mod_inv(void) uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_asym_op *asym_op = NULL; struct rte_crypto_op *op = NULL, *result_op = NULL; - struct rte_cryptodev_asym_session *sess = NULL; + void *sess = NULL; int status = TEST_SUCCESS; struct rte_cryptodev_asym_capability_idx cap_idx; const struct rte_cryptodev_asymmetric_xform_capability *capability; @@ -1513,21 +1419,12 @@ test_mod_inv(void) return TEST_SKIPPED; } - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (!sess) { + ret = rte_cryptodev_asym_session_create(dev_id, &modinv_xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, "line %u " "FAILED: %s", __LINE__, "Session creation failed"); - status = TEST_FAILED; - goto error_exit; - } - - if (rte_cryptodev_asym_session_init(dev_id, sess, &modinv_xform, - sess_mpool) < 0) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", - __LINE__, "unabled to config sym session"); - status = TEST_FAILED; + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } @@ -1582,10 +1479,8 @@ test_mod_inv(void) } error_exit: - if (sess) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess) + rte_cryptodev_asym_session_free(dev_id, sess); if (op) rte_crypto_op_free(op); @@ -1604,7 +1499,7 @@ test_mod_exp(void) uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_asym_op *asym_op = NULL; struct rte_crypto_op *op = NULL, *result_op = NULL; - struct rte_cryptodev_asym_session *sess = NULL; + void *sess = NULL; int status = TEST_SUCCESS; struct rte_cryptodev_asym_capability_idx cap_idx; const struct rte_cryptodev_asymmetric_xform_capability *capability; @@ -1648,22 +1543,13 @@ test_mod_exp(void) goto error_exit; } - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (!sess) { + ret = rte_cryptodev_asym_session_create(dev_id, &modex_xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, "line %u " "FAILED: %s", __LINE__, "Session creation failed"); - status = TEST_FAILED; - goto error_exit; - } - - if (rte_cryptodev_asym_session_init(dev_id, sess, &modex_xform, - sess_mpool) < 0) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", - __LINE__, "unabled to config sym session"); - status = TEST_FAILED; + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } @@ -1705,10 +1591,8 @@ test_mod_exp(void) } error_exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); @@ -1756,7 +1640,7 @@ test_dh_keygenration(void) } static int -test_dsa_sign(void) +test_dsa_sign(struct rte_crypto_dsa_op_param *dsa_op) { struct crypto_testsuite_params_asym *ts_params = &testsuite_params; struct rte_mempool *op_mpool = ts_params->op_mpool; @@ -1764,18 +1648,16 @@ test_dsa_sign(void) uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_asym_op *asym_op = NULL; struct rte_crypto_op *op = NULL, *result_op = NULL; - struct rte_cryptodev_asym_session *sess = NULL; + void *sess = NULL; int status = TEST_SUCCESS; - uint8_t r[TEST_DH_MOD_LEN]; - uint8_t s[TEST_DH_MOD_LEN]; - uint8_t dgst[] = "35d81554afaad2cf18f3a1770d5fedc4ea5be344"; + int ret; - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (sess == NULL) { + ret = rte_cryptodev_asym_session_create(dev_id, &dsa_xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, "line %u FAILED: %s", __LINE__, "Session creation failed"); - status = TEST_FAILED; + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto error_exit; } /* set up crypto op data structure */ @@ -1789,6 +1671,7 @@ test_dsa_sign(void) goto error_exit; } asym_op = op->asym; + asym_op->dsa = *dsa_op; debug_hexdump(stdout, "p: ", dsa_xform.dsa.p.data, dsa_xform.dsa.p.length); @@ -1799,25 +1682,9 @@ test_dsa_sign(void) debug_hexdump(stdout, "priv_key: ", dsa_xform.dsa.x.data, dsa_xform.dsa.x.length); - if (rte_cryptodev_asym_session_init(dev_id, sess, &dsa_xform, - sess_mpool) < 0) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", - __LINE__, "unabled to config sym session"); - status = TEST_FAILED; - goto error_exit; - } - /* attach asymmetric crypto session to crypto operations */ rte_crypto_op_attach_asym_session(op, sess); asym_op->dsa.op_type = RTE_CRYPTO_ASYM_OP_SIGN; - asym_op->dsa.message.data = dgst; - asym_op->dsa.message.length = sizeof(dgst); - asym_op->dsa.r.length = sizeof(r); - asym_op->dsa.r.data = r; - asym_op->dsa.s.length = sizeof(s); - asym_op->dsa.s.data = s; - RTE_LOG(DEBUG, USER1, "Process ASYM operation"); /* Process crypto operation */ @@ -1841,12 +1708,71 @@ test_dsa_sign(void) } asym_op = result_op->asym; + dsa_op->r.length = asym_op->dsa.r.length; + dsa_op->s.length = asym_op->dsa.s.length; debug_hexdump(stdout, "r:", asym_op->dsa.r.data, asym_op->dsa.r.length); debug_hexdump(stdout, "s:", asym_op->dsa.s.data, asym_op->dsa.s.length); +error_exit: + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); + if (op != NULL) + rte_crypto_op_free(op); + return status; +} + +static int +test_dsa_verify(struct rte_crypto_dsa_op_param *dsa_op) +{ + struct crypto_testsuite_params_asym *ts_params = &testsuite_params; + struct rte_mempool *op_mpool = ts_params->op_mpool; + struct rte_mempool *sess_mpool = ts_params->session_mpool; + uint8_t dev_id = ts_params->valid_devs[0]; + struct rte_crypto_asym_op *asym_op = NULL; + struct rte_crypto_op *op = NULL, *result_op = NULL; + void *sess = NULL; + int status = TEST_SUCCESS; + int ret; + ret = rte_cryptodev_asym_session_create(dev_id, &dsa_xform, sess_mpool, &sess); + if (ret < 0) { + RTE_LOG(ERR, USER1, + "line %u FAILED: %s", __LINE__, + "Session creation failed"); + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; + goto error_exit; + } + /* set up crypto op data structure */ + op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC); + if (!op) { + RTE_LOG(ERR, USER1, + "line %u FAILED: %s", + __LINE__, "Failed to allocate asymmetric crypto " + "operation struct"); + status = TEST_FAILED; + goto error_exit; + } + asym_op = op->asym; + asym_op->dsa = *dsa_op; + + debug_hexdump(stdout, "p: ", dsa_xform.dsa.p.data, + dsa_xform.dsa.p.length); + debug_hexdump(stdout, "q: ", dsa_xform.dsa.q.data, + dsa_xform.dsa.q.length); + debug_hexdump(stdout, "g: ", dsa_xform.dsa.g.data, + dsa_xform.dsa.g.length); + + /* attach asymmetric crypto session to crypto operations */ + rte_crypto_op_attach_asym_session(op, sess); + + debug_hexdump(stdout, "r:", + asym_op->dsa.r.data, asym_op->dsa.r.length); + debug_hexdump(stdout, "s:", + asym_op->dsa.s.data, asym_op->dsa.s.length); + + RTE_LOG(DEBUG, USER1, "Process ASYM verify operation"); /* Test PMD DSA sign verification using signer public key */ asym_op->dsa.op_type = RTE_CRYPTO_ASYM_OP_VERIFY; @@ -1881,10 +1807,8 @@ test_dsa_sign(void) status = TEST_FAILED; } error_exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); return status; @@ -1894,8 +1818,22 @@ static int test_dsa(void) { int status; - status = test_dsa_sign(); - TEST_ASSERT_EQUAL(status, 0, "Test failed"); + uint8_t r[TEST_DH_MOD_LEN]; + uint8_t s[TEST_DH_MOD_LEN]; + struct rte_crypto_dsa_op_param dsa_op; + uint8_t dgst[] = "35d81554afaad2cf18f3a1770d5fedc4ea5be344"; + + dsa_op.message.data = dgst; + dsa_op.message.length = sizeof(dgst); + dsa_op.r.data = r; + dsa_op.s.data = s; + dsa_op.r.length = sizeof(r); + dsa_op.s.length = sizeof(s); + + status = test_dsa_sign(&dsa_op); + TEST_ASSERT_EQUAL(status, 0, "DSA sign test failed"); + status = test_dsa_verify(&dsa_op); + TEST_ASSERT_EQUAL(status, 0, "DSA verify test failed"); return status; } @@ -1906,7 +1844,7 @@ test_ecdsa_sign_verify(enum curve curve_id) struct rte_mempool *sess_mpool = ts_params->session_mpool; struct rte_mempool *op_mpool = ts_params->op_mpool; struct crypto_testsuite_ecdsa_params input_params; - struct rte_cryptodev_asym_session *sess = NULL; + void *sess = NULL; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_op *result_op = NULL; uint8_t output_buf_r[TEST_DATA_SIZE]; @@ -1915,7 +1853,7 @@ test_ecdsa_sign_verify(enum curve curve_id) struct rte_crypto_asym_op *asym_op; struct rte_cryptodev_info dev_info; struct rte_crypto_op *op = NULL; - int status = TEST_SUCCESS, ret; + int ret, status = TEST_SUCCESS; switch (curve_id) { case SECP192R1: @@ -1943,15 +1881,6 @@ test_ecdsa_sign_verify(enum curve curve_id) rte_cryptodev_info_get(dev_id, &dev_info); - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (sess == NULL) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", __LINE__, - "Session creation failed\n"); - status = TEST_FAILED; - goto exit; - } - /* Setup crypto op data structure */ op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC); if (op == NULL) { @@ -1969,12 +1898,12 @@ test_ecdsa_sign_verify(enum curve curve_id) xform.xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA; xform.ec.curve_id = input_params.curve; - if (rte_cryptodev_asym_session_init(dev_id, sess, &xform, - sess_mpool) < 0) { + ret = rte_cryptodev_asym_session_create(dev_id, &xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, "line %u FAILED: %s", __LINE__, - "Unable to config asym session\n"); - status = TEST_FAILED; + "Session creation failed\n"); + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto exit; } @@ -2081,10 +2010,8 @@ test_ecdsa_sign_verify(enum curve curve_id) } exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); return status; @@ -2119,7 +2046,7 @@ test_ecpm(enum curve curve_id) struct rte_mempool *sess_mpool = ts_params->session_mpool; struct rte_mempool *op_mpool = ts_params->op_mpool; struct crypto_testsuite_ecpm_params input_params; - struct rte_cryptodev_asym_session *sess = NULL; + void *sess = NULL; uint8_t dev_id = ts_params->valid_devs[0]; struct rte_crypto_op *result_op = NULL; uint8_t output_buf_x[TEST_DATA_SIZE]; @@ -2128,7 +2055,7 @@ test_ecpm(enum curve curve_id) struct rte_crypto_asym_op *asym_op; struct rte_cryptodev_info dev_info; struct rte_crypto_op *op = NULL; - int status = TEST_SUCCESS, ret; + int ret, status = TEST_SUCCESS; switch (curve_id) { case SECP192R1: @@ -2156,15 +2083,6 @@ test_ecpm(enum curve curve_id) rte_cryptodev_info_get(dev_id, &dev_info); - sess = rte_cryptodev_asym_session_create(sess_mpool); - if (sess == NULL) { - RTE_LOG(ERR, USER1, - "line %u FAILED: %s", __LINE__, - "Session creation failed\n"); - status = TEST_FAILED; - goto exit; - } - /* Setup crypto op data structure */ op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC); if (op == NULL) { @@ -2182,12 +2100,12 @@ test_ecpm(enum curve curve_id) xform.xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM; xform.ec.curve_id = input_params.curve; - if (rte_cryptodev_asym_session_init(dev_id, sess, &xform, - sess_mpool) < 0) { + ret = rte_cryptodev_asym_session_create(dev_id, &xform, sess_mpool, &sess); + if (ret < 0) { RTE_LOG(ERR, USER1, "line %u FAILED: %s", __LINE__, - "Unable to config asym session\n"); - status = TEST_FAILED; + "Session creation failed\n"); + status = (ret == -ENOTSUP) ? TEST_SKIPPED : TEST_FAILED; goto exit; } @@ -2254,10 +2172,8 @@ test_ecpm(enum curve curve_id) } exit: - if (sess != NULL) { - rte_cryptodev_asym_session_clear(dev_id, sess); - rte_cryptodev_asym_session_free(sess); - } + if (sess != NULL) + rte_cryptodev_asym_session_free(dev_id, sess); if (op != NULL) rte_crypto_op_free(op); return status; @@ -2414,5 +2330,3 @@ REGISTER_TEST_COMMAND(cryptodev_octeontx_asym_autotest, test_cryptodev_octeontx_asym); REGISTER_TEST_COMMAND(cryptodev_cn9k_asym_autotest, test_cryptodev_cn9k_asym); REGISTER_TEST_COMMAND(cryptodev_cn10k_asym_autotest, test_cryptodev_cn10k_asym); - -#endif /* !RTE_EXEC_ENV_WINDOWS */