From: Anoob Joseph <anoobj@marvell.com>
To: Akhil Goyal <gakhil@marvell.com>, Jerin Jacob <jerinj@marvell.com>
Cc: Harry van Haaren <harry.van.haaren@intel.com>,
Hemant Agrawal <hemant.agrawal@nxp.com>,
Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>,
<dev@dpdk.org>, Vidya Sagar Velumuri <vvelumuri@marvell.com>
Subject: [PATCH 06/14] test/crypto: add TLS record tests
Date: Thu, 7 Dec 2023 18:32:08 +0530 [thread overview]
Message-ID: <20231207130216.140-7-anoobj@marvell.com> (raw)
In-Reply-To: <20231207130216.140-1-anoobj@marvell.com>
Add framework for testing TLS record cases. The framework supports
testing with known vector tests in both session types (read & write).
Signed-off-by: Anoob Joseph <anoobj@marvell.com>
Signed-off-by: Vidya Sagar Velumuri <vvelumuri@marvell.com>
---
app/test/meson.build | 1 +
app/test/test_cryptodev.c | 282 +++++++++++++++++-
app/test/test_cryptodev.h | 2 +
app/test/test_cryptodev_security_tls_record.c | 151 ++++++++++
app/test/test_cryptodev_security_tls_record.h | 71 +++++
...yptodev_security_tls_record_test_vectors.h | 16 +
6 files changed, 515 insertions(+), 8 deletions(-)
create mode 100644 app/test/test_cryptodev_security_tls_record.c
create mode 100644 app/test/test_cryptodev_security_tls_record.h
create mode 100644 app/test/test_cryptodev_security_tls_record_test_vectors.h
diff --git a/app/test/meson.build b/app/test/meson.build
index 58e120a6ab..f9e81eda2e 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -56,6 +56,7 @@ source_file_deps = {
'test_cryptodev_crosscheck.c': test_cryptodev_deps,
'test_cryptodev_security_ipsec.c': test_cryptodev_deps,
'test_cryptodev_security_pdcp.c': test_cryptodev_deps,
+ 'test_cryptodev_security_tls_record.c': ['cryptodev', 'security'],
'test_cycles.c': [],
'test_debug.c': [],
'test_devargs.c': ['kvargs'],
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index fbb97d5456..cd83370790 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -53,6 +53,7 @@
#include "test_cryptodev_security_pdcp_sdap_test_vectors.h"
#include "test_cryptodev_security_pdcp_test_func.h"
#include "test_cryptodev_security_docsis_test_vectors.h"
+#include "test_cryptodev_security_tls_record.h"
#include "test_security_proto.h"
#define SDAP_DISABLED 0
@@ -807,7 +808,7 @@ crypto_gen_testsuite_setup(void)
#ifdef RTE_LIB_SECURITY
static int
-ipsec_proto_testsuite_setup(void)
+sec_proto_testsuite_setup(enum rte_security_session_protocol protocol)
{
struct crypto_testsuite_params *ts_params = &testsuite_params;
struct crypto_unittest_params *ut_params = &unittest_params;
@@ -817,8 +818,8 @@ ipsec_proto_testsuite_setup(void)
rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
if (!(dev_info.feature_flags & RTE_CRYPTODEV_FF_SECURITY)) {
- RTE_LOG(INFO, USER1, "Feature flag requirements for IPsec Proto "
- "testsuite not met\n");
+ RTE_LOG(INFO, USER1,
+ "Feature flag requirements for security protocol testsuite not met\n");
return TEST_SKIPPED;
}
@@ -830,11 +831,9 @@ ipsec_proto_testsuite_setup(void)
/* Set action type */
ut_params->type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL;
- if (security_proto_supported(
- RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
- RTE_SECURITY_PROTOCOL_IPSEC) < 0) {
- RTE_LOG(INFO, USER1, "Capability requirements for IPsec Proto "
- "test not met\n");
+ if (security_proto_supported(RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL, protocol) < 0) {
+ RTE_LOG(INFO, USER1,
+ "Capability requirements for security protocol test not met\n");
ret = TEST_SKIPPED;
}
@@ -850,6 +849,18 @@ ipsec_proto_testsuite_setup(void)
return ret;
}
+static int
+ipsec_proto_testsuite_setup(void)
+{
+ return sec_proto_testsuite_setup(RTE_SECURITY_PROTOCOL_IPSEC);
+}
+
+static int
+tls_record_proto_testsuite_setup(void)
+{
+ return sec_proto_testsuite_setup(RTE_SECURITY_PROTOCOL_TLS_RECORD);
+}
+
static int
pdcp_proto_testsuite_setup(void)
{
@@ -11654,6 +11665,244 @@ test_docsis_proto_downlink(const void *data)
return ret;
}
+
+static void
+test_tls_record_imp_nonce_update(const struct tls_record_test_data *td,
+ struct rte_security_tls_record_xform *tls_record_xform)
+{
+ unsigned int imp_nonce_len;
+ uint8_t *imp_nonce;
+
+ switch (tls_record_xform->ver) {
+ case RTE_SECURITY_VERSION_TLS_1_2:
+ imp_nonce_len = RTE_SECURITY_TLS_1_2_IMP_NONCE_LEN;
+ imp_nonce = tls_record_xform->tls_1_2.imp_nonce;
+ break;
+ case RTE_SECURITY_VERSION_DTLS_1_2:
+ imp_nonce_len = RTE_SECURITY_DTLS_1_2_IMP_NONCE_LEN;
+ imp_nonce = tls_record_xform->dtls_1_2.imp_nonce;
+ break;
+ case RTE_SECURITY_VERSION_TLS_1_3:
+ imp_nonce_len = RTE_SECURITY_TLS_1_3_IMP_NONCE_LEN;
+ imp_nonce = tls_record_xform->tls_1_3.imp_nonce;
+ break;
+ default:
+ return;
+ }
+
+ imp_nonce_len = RTE_MIN(imp_nonce_len, td[0].imp_nonce.len);
+ memcpy(imp_nonce, td[0].imp_nonce.data, imp_nonce_len);
+}
+
+static int
+test_tls_record_proto_process(const struct tls_record_test_data td[],
+ struct tls_record_test_data res_d[], int nb_td, bool silent,
+ const struct tls_record_test_flags *flags)
+{
+ struct crypto_testsuite_params *ts_params = &testsuite_params;
+ struct crypto_unittest_params *ut_params = &unittest_params;
+ struct rte_security_tls_record_xform tls_record_xform;
+ struct rte_security_capability_idx sec_cap_idx;
+ const struct rte_security_capability *sec_cap;
+ enum rte_security_tls_sess_type sess_type;
+ uint8_t dev_id = ts_params->valid_devs[0];
+ struct rte_security_ctx *ctx;
+ int i, ret = TEST_SUCCESS;
+
+ ut_params->type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL;
+ gbl_action_type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL;
+
+ /* Use first test data to create session */
+
+ /* Copy TLS record xform */
+ memcpy(&tls_record_xform, &td[0].tls_record_xform, sizeof(tls_record_xform));
+
+ sess_type = tls_record_xform.type;
+
+ ctx = rte_cryptodev_get_sec_ctx(dev_id);
+
+ sec_cap_idx.action = ut_params->type;
+ sec_cap_idx.protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD;
+ sec_cap_idx.tls_record.type = tls_record_xform.type;
+ sec_cap_idx.tls_record.ver = tls_record_xform.ver;
+
+ sec_cap = rte_security_capability_get(ctx, &sec_cap_idx);
+ if (sec_cap == NULL)
+ return TEST_SKIPPED;
+
+ /* Copy cipher session parameters */
+ if (td[0].aead) {
+ memcpy(&ut_params->aead_xform, &td[0].xform.aead, sizeof(ut_params->aead_xform));
+ ut_params->aead_xform.aead.key.data = td[0].key.data;
+ ut_params->aead_xform.aead.iv.offset = IV_OFFSET;
+
+ /* Verify crypto capabilities */
+ if (test_sec_crypto_caps_aead_verify(sec_cap, &ut_params->aead_xform) != 0) {
+ if (!silent)
+ RTE_LOG(INFO, USER1, "Crypto capabilities not supported\n");
+ return TEST_SKIPPED;
+ }
+ } else {
+ memcpy(&ut_params->cipher_xform, &td[0].xform.chain.cipher,
+ sizeof(ut_params->cipher_xform));
+ memcpy(&ut_params->auth_xform, &td[0].xform.chain.auth,
+ sizeof(ut_params->auth_xform));
+ ut_params->cipher_xform.cipher.key.data = td[0].key.data;
+ ut_params->cipher_xform.cipher.iv.offset = IV_OFFSET;
+ ut_params->auth_xform.auth.key.data = td[0].auth_key.data;
+
+ /* Verify crypto capabilities */
+
+ if (test_sec_crypto_caps_cipher_verify(sec_cap, &ut_params->cipher_xform) != 0) {
+ if (!silent)
+ RTE_LOG(INFO, USER1, "Cipher crypto capabilities not supported\n");
+ return TEST_SKIPPED;
+ }
+
+ if (test_sec_crypto_caps_auth_verify(sec_cap, &ut_params->auth_xform) != 0) {
+ if (!silent)
+ RTE_LOG(INFO, USER1, "Auth crypto capabilities not supported\n");
+ return TEST_SKIPPED;
+ }
+ }
+
+ if (test_tls_record_sec_caps_verify(&tls_record_xform, sec_cap, silent) != 0)
+ return TEST_SKIPPED;
+
+ struct rte_security_session_conf sess_conf = {
+ .action_type = ut_params->type,
+ .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
+ };
+
+ if (td[0].aead)
+ test_tls_record_imp_nonce_update(&td[0], &tls_record_xform);
+
+ sess_conf.tls_record = tls_record_xform;
+
+ if (td[0].aead) {
+ sess_conf.crypto_xform = &ut_params->aead_xform;
+ } else {
+ if (sess_type == RTE_SECURITY_TLS_SESS_TYPE_READ) {
+ sess_conf.crypto_xform = &ut_params->cipher_xform;
+ ut_params->cipher_xform.next = &ut_params->auth_xform;
+ } else {
+ sess_conf.crypto_xform = &ut_params->auth_xform;
+ ut_params->auth_xform.next = &ut_params->cipher_xform;
+ }
+ }
+
+ /* Create security session */
+ ut_params->sec_session = rte_security_session_create(ctx, &sess_conf,
+ ts_params->session_mpool);
+ if (ut_params->sec_session == NULL)
+ return TEST_SKIPPED;
+
+ for (i = 0; i < nb_td; i++) {
+ /* Setup source mbuf payload */
+ ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, td[i].input_text.len,
+ 1, 0);
+ pktmbuf_write(ut_params->ibuf, 0, td[i].input_text.len, td[i].input_text.data);
+
+ /* Generate crypto op data structure */
+ ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
+ RTE_CRYPTO_OP_TYPE_SYMMETRIC);
+ if (ut_params->op == NULL) {
+ printf("Could not allocate crypto op");
+ ret = TEST_FAILED;
+ goto crypto_op_free;
+ }
+
+ /* Attach session to operation */
+ rte_security_attach_session(ut_params->op, ut_params->sec_session);
+
+ /* Set crypto operation mbufs */
+ ut_params->op->sym->m_src = ut_params->ibuf;
+ ut_params->op->sym->m_dst = NULL;
+ ut_params->op->param1.tls_record.content_type = td[i].app_type;
+
+ /* Copy IV in crypto operation when IV generation is disabled */
+ if (sess_type == RTE_SECURITY_TLS_SESS_TYPE_WRITE &&
+ tls_record_xform.options.iv_gen_disable == 1) {
+ uint8_t *iv;
+ int len;
+
+ iv = rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET);
+ if (td[i].aead)
+ len = td[i].xform.aead.aead.iv.length - 4;
+ else
+ len = td[i].xform.chain.cipher.cipher.iv.length;
+ memcpy(iv, td[i].iv.data, len);
+ }
+
+ /* Process crypto operation */
+ process_crypto_request(dev_id, ut_params->op);
+
+ ret = test_tls_record_status_check(ut_params->op);
+ if (ret != TEST_SUCCESS)
+ goto crypto_op_free;
+
+ ret = test_tls_record_post_process(ut_params->ibuf, &td[i], NULL, silent);
+ if (ret != TEST_SUCCESS)
+ goto crypto_op_free;
+
+
+ rte_crypto_op_free(ut_params->op);
+ ut_params->op = NULL;
+
+ rte_pktmbuf_free(ut_params->ibuf);
+ ut_params->ibuf = NULL;
+ }
+
+crypto_op_free:
+ rte_crypto_op_free(ut_params->op);
+ ut_params->op = NULL;
+
+ rte_pktmbuf_free(ut_params->ibuf);
+ ut_params->ibuf = NULL;
+
+ if (ut_params->sec_session)
+ rte_security_session_destroy(ctx, ut_params->sec_session);
+ ut_params->sec_session = NULL;
+
+ RTE_SET_USED(res_d);
+ RTE_SET_USED(flags);
+
+ return ret;
+}
+
+static int
+test_tls_record_proto_known_vec(const void *test_data)
+{
+ struct tls_record_test_data td_write;
+ struct tls_record_test_flags flags;
+
+ memset(&flags, 0, sizeof(flags));
+
+ memcpy(&td_write, test_data, sizeof(td_write));
+
+ /* Disable IV gen to be able to test with known vectors */
+ td_write.tls_record_xform.options.iv_gen_disable = 1;
+
+ return test_tls_record_proto_process(&td_write, NULL, 1, false, &flags);
+}
+
+static int
+test_tls_record_proto_known_vec_read(const void *test_data)
+{
+ const struct tls_record_test_data *td = test_data;
+ struct tls_record_test_flags flags;
+ struct tls_record_test_data td_inb;
+
+ memset(&flags, 0, sizeof(flags));
+
+ if (td->tls_record_xform.type == RTE_SECURITY_TLS_SESS_TYPE_WRITE)
+ test_tls_record_td_read_from_write(td, &td_inb);
+ else
+ memcpy(&td_inb, td, sizeof(td_inb));
+
+ return test_tls_record_proto_process(&td_inb, NULL, 1, false, &flags);
+}
+
#endif
static int
@@ -16560,6 +16809,22 @@ static struct unit_test_suite pdcp_proto_testsuite = {
}
};
+static struct unit_test_suite tls12_record_proto_testsuite = {
+ .suite_name = "TLS 1.2 Record Protocol Unit Test Suite",
+ .setup = tls_record_proto_testsuite_setup,
+ .unit_test_cases = {
+ TEST_CASE_NAMED_WITH_DATA(
+ "Known vector TBD",
+ ut_setup_security, ut_teardown,
+ test_tls_record_proto_known_vec, &tls_test_data1),
+ TEST_CASE_NAMED_WITH_DATA(
+ "Known vector TBD",
+ ut_setup_security, ut_teardown,
+ test_tls_record_proto_known_vec_read, &tls_test_data1),
+ TEST_CASES_END() /**< NULL terminate unit test array */
+ }
+};
+
#define ADD_UPLINK_TESTCASE(data) \
TEST_CASE_NAMED_WITH_DATA(data.test_descr_uplink, ut_setup_security, \
ut_teardown, test_docsis_proto_uplink, (const void *) &data), \
@@ -17567,6 +17832,7 @@ run_cryptodev_testsuite(const char *pmd_name)
&ipsec_proto_testsuite,
&pdcp_proto_testsuite,
&docsis_proto_testsuite,
+ &tls12_record_proto_testsuite,
#endif
&end_testsuite
};
diff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h
index f2c417a267..f27d9697fd 100644
--- a/app/test/test_cryptodev.h
+++ b/app/test/test_cryptodev.h
@@ -4,6 +4,8 @@
#ifndef TEST_CRYPTODEV_H_
#define TEST_CRYPTODEV_H_
+#include <rte_cryptodev.h>
+
#define HEX_DUMP 0
#define FALSE 0
diff --git a/app/test/test_cryptodev_security_tls_record.c b/app/test/test_cryptodev_security_tls_record.c
new file mode 100644
index 0000000000..be8f5270cc
--- /dev/null
+++ b/app/test/test_cryptodev_security_tls_record.c
@@ -0,0 +1,151 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2023 Marvell.
+ */
+
+#include <rte_crypto.h>
+
+#include "test.h"
+#include "test_cryptodev_security_tls_record.h"
+#include "test_cryptodev_security_tls_record_test_vectors.h"
+
+int
+test_tls_record_status_check(struct rte_crypto_op *op)
+{
+ int ret = TEST_SUCCESS;
+
+ if (op->status != RTE_CRYPTO_OP_STATUS_SUCCESS)
+ ret = TEST_FAILED;
+
+ return ret;
+}
+
+int
+test_tls_record_sec_caps_verify(struct rte_security_tls_record_xform *tls_record_xform,
+ const struct rte_security_capability *sec_cap, bool silent)
+{
+ /* Verify security capabilities */
+
+ RTE_SET_USED(tls_record_xform);
+ RTE_SET_USED(sec_cap);
+ RTE_SET_USED(silent);
+
+ return 0;
+}
+
+void
+test_tls_record_td_read_from_write(const struct tls_record_test_data *td_out,
+ struct tls_record_test_data *td_in)
+{
+ memcpy(td_in, td_out, sizeof(*td_in));
+
+ /* Populate output text of td_in with input text of td_out */
+ memcpy(td_in->output_text.data, td_out->input_text.data, td_out->input_text.len);
+ td_in->output_text.len = td_out->input_text.len;
+
+ /* Populate input text of td_in with output text of td_out */
+ memcpy(td_in->input_text.data, td_out->output_text.data, td_out->output_text.len);
+ td_in->input_text.len = td_out->output_text.len;
+
+ td_in->tls_record_xform.type = RTE_SECURITY_TLS_SESS_TYPE_READ;
+
+ if (td_in->aead) {
+ td_in->xform.aead.aead.op = RTE_CRYPTO_AEAD_OP_DECRYPT;
+ } else {
+ td_in->xform.chain.auth.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
+ td_in->xform.chain.cipher.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
+ }
+}
+
+static int
+test_tls_record_td_verify(uint8_t *output_text, uint32_t len, const struct tls_record_test_data *td,
+ bool silent)
+{
+ if (len != td->output_text.len) {
+ printf("Output length (%d) not matching with expected (%d)\n",
+ len, td->output_text.len);
+ return TEST_FAILED;
+ }
+
+ if (memcmp(output_text, td->output_text.data, len)) {
+ if (silent)
+ return TEST_FAILED;
+
+ printf("[%s : %d] %s\n", __func__, __LINE__, "Output text not as expected\n");
+
+ rte_hexdump(stdout, "expected", td->output_text.data, len);
+ rte_hexdump(stdout, "actual", output_text, len);
+ return TEST_FAILED;
+ }
+
+ return TEST_SUCCESS;
+}
+
+static int
+test_tls_record_res_d_prepare(const uint8_t *output_text, uint32_t len,
+ const struct tls_record_test_data *td,
+ struct tls_record_test_data *res_d)
+{
+ memcpy(res_d, td, sizeof(*res_d));
+
+ memcpy(&res_d->input_text.data, output_text, len);
+ res_d->input_text.len = len;
+
+ res_d->tls_record_xform.type = RTE_SECURITY_TLS_SESS_TYPE_READ;
+ if (res_d->aead) {
+ res_d->xform.aead.aead.op = RTE_CRYPTO_AEAD_OP_DECRYPT;
+ } else {
+ res_d->xform.chain.cipher.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
+ res_d->xform.chain.auth.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
+ }
+
+ return TEST_SUCCESS;
+}
+
+int
+test_tls_record_post_process(const struct rte_mbuf *m, const struct tls_record_test_data *td,
+ struct tls_record_test_data *res_d, bool silent)
+{
+ uint32_t len = rte_pktmbuf_pkt_len(m), data_len;
+ uint8_t output_text[TLS_RECORD_MAX_LEN];
+ const struct rte_mbuf *seg;
+ const uint8_t *output;
+
+ memset(output_text, 0, TLS_RECORD_MAX_LEN);
+
+ /*
+ * Actual data in packet might be less in error cases, hence take minimum of pkt_len and sum
+ * of data_len. This is done to run through negative test cases.
+ */
+ data_len = 0;
+ seg = m;
+ while (seg) {
+ data_len += seg->data_len;
+ seg = seg->next;
+ }
+
+ len = RTE_MIN(len, data_len);
+ TEST_ASSERT(len <= TLS_RECORD_MAX_LEN, "Invalid packet length: %u", len);
+
+ /* Copy mbuf payload to continuous buffer */
+ output = rte_pktmbuf_read(m, 0, len, output_text);
+ if (output != output_text) {
+ /* Single segment mbuf, copy manually */
+ memcpy(output_text, output, len);
+ }
+
+ /*
+ * In case of known vector tests & all record read (decrypt) tests, res_d provided would be
+ * NULL and output data need to be validated against expected. For record read (decrypt),
+ * output_text would be plain payload and for record write (encrypt), output_text would TLS
+ * record. Validate by comparing against known vectors.
+ *
+ * In case of combined mode tests, the output_text from TLS write (encrypt) operation (ie,
+ * TLS record) would need to be decrypted using a TLS read operation to obtain the plain
+ * text. Copy output_text to result data, 'res_d', so that inbound processing can be done.
+ */
+
+ if (res_d == NULL)
+ return test_tls_record_td_verify(output_text, len, td, silent);
+ else
+ return test_tls_record_res_d_prepare(output_text, len, td, res_d);
+}
diff --git a/app/test/test_cryptodev_security_tls_record.h b/app/test/test_cryptodev_security_tls_record.h
new file mode 100644
index 0000000000..9a0cf70218
--- /dev/null
+++ b/app/test/test_cryptodev_security_tls_record.h
@@ -0,0 +1,71 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2023 Marvell.
+ */
+
+#ifndef _TEST_CRYPTODEV_SECURITY_TLS_RECORD_H_
+#define _TEST_CRYPTODEV_SECURITY_TLS_RECORD_H_
+
+#include <rte_cryptodev.h>
+#include <rte_security.h>
+
+#define TLS_RECORD_MAX_LEN 16384u
+
+struct tls_record_test_data {
+ struct {
+ uint8_t data[32];
+ } key;
+
+ struct {
+ uint8_t data[64];
+ } auth_key;
+
+ struct {
+ uint8_t data[TLS_RECORD_MAX_LEN];
+ unsigned int len;
+ } input_text;
+
+ struct {
+ uint8_t data[TLS_RECORD_MAX_LEN];
+ unsigned int len;
+ } output_text;
+
+ struct {
+ uint8_t data[12];
+ unsigned int len;
+ } imp_nonce;
+
+ struct {
+ uint8_t data[16];
+ } iv;
+
+ union {
+ struct {
+ struct rte_crypto_sym_xform cipher;
+ struct rte_crypto_sym_xform auth;
+ } chain;
+ struct rte_crypto_sym_xform aead;
+ } xform;
+
+ struct rte_security_tls_record_xform tls_record_xform;
+ uint8_t app_type;
+ bool aead;
+};
+
+struct tls_record_test_flags {
+ bool display_alg;
+};
+
+extern struct tls_record_test_data tls_test_data1;
+
+int test_tls_record_status_check(struct rte_crypto_op *op);
+
+int test_tls_record_sec_caps_verify(struct rte_security_tls_record_xform *tls_record_xform,
+ const struct rte_security_capability *sec_cap, bool silent);
+
+void test_tls_record_td_read_from_write(const struct tls_record_test_data *td_out,
+ struct tls_record_test_data *td_in);
+
+int test_tls_record_post_process(const struct rte_mbuf *m, const struct tls_record_test_data *td,
+ struct tls_record_test_data *res_d, bool silent);
+
+#endif
diff --git a/app/test/test_cryptodev_security_tls_record_test_vectors.h b/app/test/test_cryptodev_security_tls_record_test_vectors.h
new file mode 100644
index 0000000000..5aa0d27fda
--- /dev/null
+++ b/app/test/test_cryptodev_security_tls_record_test_vectors.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2023 Marvell
+ */
+
+#ifndef _TEST_CRYPTODEV_SECURITY_TLS_RECORD_TEST_VECTORS_H_
+#define _TEST_CRYPTODEV_SECURITY_TLS_RECORD_TEST_VECTORS_H_
+
+#include <rte_crypto.h>
+#include <rte_security.h>
+
+#include "test_cryptodev.h"
+#include "test_cryptodev_security_tls_record.h"
+
+struct tls_record_test_data tls_test_data1;
+
+#endif
--
2.25.1
next prev parent reply other threads:[~2023-12-07 13:03 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-07 13:02 [PATCH 00/14] Add TLS record test suite Anoob Joseph
2023-12-07 13:02 ` [PATCH 01/14] test/crypto: move security caps checks to separate file Anoob Joseph
2023-12-07 13:02 ` [PATCH 02/14] test/crypto: move algorithm list to common Anoob Joseph
2023-12-07 13:02 ` [PATCH 03/14] test/crypto: move algorithm display routines " Anoob Joseph
2023-12-07 13:02 ` [PATCH 04/14] test/security: add sha1-hmac to auth list Anoob Joseph
2023-12-07 13:02 ` [PATCH 05/14] test/crypto: move algorithm framework to common Anoob Joseph
2023-12-07 13:02 ` Anoob Joseph [this message]
2023-12-07 13:02 ` [PATCH 07/14] test/crypto: add AES-GCM 128 TLS 1.2 vector Anoob Joseph
2023-12-07 13:02 ` [PATCH 08/14] test/crypto: add TLS1.2 vectors Anoob Joseph
2023-12-07 13:02 ` [PATCH 09/14] test/crypto: add TLS1.2/DTLS1.2 AES-128/256-GCM vectors Anoob Joseph
2023-12-07 13:02 ` [PATCH 10/14] test/crypto: add combined mode cases Anoob Joseph
2023-12-07 13:02 ` [PATCH 11/14] test/crypto: add verification of TLS headers Anoob Joseph
2023-12-07 13:02 ` [PATCH 12/14] test/security: add more algos to combined tests Anoob Joseph
2023-12-07 13:02 ` [PATCH 13/14] test/security: add TLS 1.2 and DTLS 1.2 vectors Anoob Joseph
2023-12-07 13:02 ` [PATCH 14/14] test/crypto: add multi segmented cases Anoob Joseph
2024-01-16 9:02 ` [PATCH 00/14] Add TLS record test suite Akhil Goyal
2024-01-19 8:55 ` Akhil Goyal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231207130216.140-7-anoobj@marvell.com \
--to=anoobj@marvell.com \
--cc=dev@dpdk.org \
--cc=gakhil@marvell.com \
--cc=harry.van.haaren@intel.com \
--cc=hemant.agrawal@nxp.com \
--cc=jerinj@marvell.com \
--cc=konstantin.v.ananyev@yandex.ru \
--cc=vvelumuri@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).