From: Vidya Sagar Velumuri <vvelum...@marvell.com>

Add cases to try TLS record write(encrypt) + read(decrypt) operations.
This is used for testing TLS record features with all algorithms
supported by the security device.

Signed-off-by: Anoob Joseph <ano...@marvell.com>
Signed-off-by: Vidya Sagar Velumuri <vvelum...@marvell.com>
---
 app/test/test_cryptodev.c                     | 67 ++++++++++++++++++-
 app/test/test_cryptodev_security_tls_record.c | 60 +++++++++++++++++
 app/test/test_cryptodev_security_tls_record.h | 11 +++
 3 files changed, 136 insertions(+), 2 deletions(-)

diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index 0360f30bd1..6070e7f336 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -11704,6 +11704,7 @@ test_tls_record_proto_process(const struct 
tls_record_test_data td[],
        struct rte_security_tls_record_xform tls_record_xform;
        struct rte_security_capability_idx sec_cap_idx;
        const struct rte_security_capability *sec_cap;
+       struct tls_record_test_data *res_d_tmp = NULL;
        enum rte_security_tls_sess_type sess_type;
        uint8_t dev_id = ts_params->valid_devs[0];
        struct rte_security_ctx *ctx;
@@ -11841,7 +11842,10 @@ test_tls_record_proto_process(const struct 
tls_record_test_data td[],
                if (ret != TEST_SUCCESS)
                        goto crypto_op_free;
 
-               ret = test_tls_record_post_process(ut_params->ibuf, &td[i], 
NULL, silent);
+               if (res_d != NULL)
+                       res_d_tmp = &res_d[i];
+
+               ret = test_tls_record_post_process(ut_params->ibuf, &td[i], 
res_d_tmp, silent);
                if (ret != TEST_SUCCESS)
                        goto crypto_op_free;
 
@@ -11864,7 +11868,6 @@ test_tls_record_proto_process(const struct 
tls_record_test_data td[],
                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;
@@ -11903,6 +11906,58 @@ test_tls_record_proto_known_vec_read(const void 
*test_data)
        return test_tls_record_proto_process(&td_inb, NULL, 1, false, &flags);
 }
 
+static int
+test_tls_record_proto_all(const struct tls_record_test_flags *flags)
+{
+       struct tls_record_test_data td_outb[TEST_SEC_PKTS_MAX];
+       struct tls_record_test_data td_inb[TEST_SEC_PKTS_MAX];
+       unsigned int i, nb_pkts = 1, pass_cnt = 0;
+       int ret;
+
+       for (i = 0; i < RTE_DIM(sec_alg_list); i++) {
+               test_tls_record_td_prepare(sec_alg_list[i].param1, 
sec_alg_list[i].param2, flags,
+                                          td_outb, nb_pkts);
+
+               ret = test_tls_record_proto_process(td_outb, td_inb, nb_pkts, 
true, flags);
+               if (ret == TEST_SKIPPED)
+                       continue;
+
+               if (ret == TEST_FAILED)
+                       return TEST_FAILED;
+
+               test_tls_record_td_update(td_inb, td_outb, nb_pkts, flags);
+
+               ret = test_tls_record_proto_process(td_inb, NULL, nb_pkts, 
true, flags);
+               if (ret == TEST_SKIPPED)
+                       continue;
+
+               if (ret == TEST_FAILED)
+                       return TEST_FAILED;
+
+               if (flags->display_alg)
+                       test_sec_alg_display(sec_alg_list[i].param1, 
sec_alg_list[i].param2);
+
+               pass_cnt++;
+       }
+
+       if (pass_cnt > 0)
+               return TEST_SUCCESS;
+       else
+               return TEST_SKIPPED;
+}
+
+static int
+test_tls_record_proto_display_list(void)
+{
+       struct tls_record_test_flags flags;
+
+       memset(&flags, 0, sizeof(flags));
+
+       flags.display_alg = true;
+
+       return test_tls_record_proto_all(&flags);
+}
+
 #endif
 
 static int
@@ -16845,6 +16900,10 @@ static struct unit_test_suite 
tls12_record_proto_testsuite  = {
                        "Read record known vector AES-128-CBC-SHA1",
                        ut_setup_security, ut_teardown,
                        test_tls_record_proto_known_vec_read, 
&tls_test_data_aes_128_cbc_sha1_hmac),
+               TEST_CASE_NAMED_ST(
+                       "Combined test alg list",
+                       ut_setup_security, ut_teardown,
+                       test_tls_record_proto_display_list),
                TEST_CASES_END() /**< NULL terminate unit test array */
        }
 };
@@ -16869,6 +16928,10 @@ static struct unit_test_suite 
dtls12_record_proto_testsuite  = {
                        "Read record known vector AES-GCM-256",
                        ut_setup_security, ut_teardown,
                        test_tls_record_proto_known_vec_read, 
&dtls_test_data_aes_256_gcm),
+               TEST_CASE_NAMED_ST(
+                       "Combined test alg list",
+                       ut_setup_security, ut_teardown,
+                       test_tls_record_proto_display_list),
                TEST_CASES_END() /**< NULL terminate unit test array */
        }
 };
diff --git a/app/test/test_cryptodev_security_tls_record.c 
b/app/test/test_cryptodev_security_tls_record.c
index be8f5270cc..6f106050c2 100644
--- a/app/test/test_cryptodev_security_tls_record.c
+++ b/app/test/test_cryptodev_security_tls_record.c
@@ -7,6 +7,7 @@
 #include "test.h"
 #include "test_cryptodev_security_tls_record.h"
 #include "test_cryptodev_security_tls_record_test_vectors.h"
+#include "test_security_proto.h"
 
 int
 test_tls_record_status_check(struct rte_crypto_op *op)
@@ -56,6 +57,65 @@ test_tls_record_td_read_from_write(const struct 
tls_record_test_data *td_out,
        }
 }
 
+void
+test_tls_record_td_prepare(const struct crypto_param *param1, const struct 
crypto_param *param2,
+                          const struct tls_record_test_flags *flags,
+                          struct tls_record_test_data *td_array, int nb_td)
+{
+       struct tls_record_test_data *td = NULL;
+       int i;
+
+       memset(td_array, 0, nb_td * sizeof(*td));
+
+       for (i = 0; i < nb_td; i++) {
+               td = &td_array[i];
+
+               /* Prepare fields based on param */
+
+               if (param1->type == RTE_CRYPTO_SYM_XFORM_AEAD) {
+                       /* Copy template for packet & key fields */
+                       memcpy(td, &tls_test_data_aes_128_gcm_v1, sizeof(*td));
+
+                       td->aead = true;
+                       td->xform.aead.aead.algo = param1->alg.aead;
+                       td->xform.aead.aead.key.length = param1->key_length;
+                       td->xform.aead.aead.digest_length = 
param1->digest_length;
+               } else {
+                       /* Copy template for packet & key fields */
+                       memcpy(td, &tls_test_data_aes_128_cbc_sha1_hmac, 
sizeof(*td));
+
+                       td->aead = false;
+                       td->xform.chain.cipher.cipher.algo = param1->alg.cipher;
+                       td->xform.chain.cipher.cipher.key.length = 
param1->key_length;
+                       td->xform.chain.cipher.cipher.iv.length = 
param1->iv_length;
+                       td->xform.chain.auth.auth.algo = param2->alg.auth;
+                       td->xform.chain.auth.auth.key.length = 
param2->key_length;
+                       td->xform.chain.auth.auth.digest_length = 
param2->digest_length;
+               }
+       }
+
+       RTE_SET_USED(flags);
+}
+
+void
+test_tls_record_td_update(struct tls_record_test_data td_inb[],
+                         const struct tls_record_test_data td_outb[], int 
nb_td,
+                         const struct tls_record_test_flags *flags)
+{
+       int i;
+
+       for (i = 0; i < nb_td; i++) {
+               memcpy(td_inb[i].output_text.data, td_outb[i].input_text.data,
+                      td_outb[i].input_text.len);
+               td_inb[i].output_text.len = td_outb->input_text.len;
+
+               /* Clear outbound specific flags */
+               td_inb[i].tls_record_xform.options.iv_gen_disable = 0;
+       }
+
+       RTE_SET_USED(flags);
+}
+
 static int
 test_tls_record_td_verify(uint8_t *output_text, uint32_t len, const struct 
tls_record_test_data *td,
                         bool silent)
diff --git a/app/test/test_cryptodev_security_tls_record.h 
b/app/test/test_cryptodev_security_tls_record.h
index 18d689253b..68dd55fef2 100644
--- a/app/test/test_cryptodev_security_tls_record.h
+++ b/app/test/test_cryptodev_security_tls_record.h
@@ -8,6 +8,8 @@
 #include <rte_cryptodev.h>
 #include <rte_security.h>
 
+#include "test_security_proto.h"
+
 #define TLS_RECORD_MAX_LEN 16384u
 
 struct tls_record_test_data {
@@ -70,6 +72,15 @@ int test_tls_record_sec_caps_verify(struct 
rte_security_tls_record_xform *tls_re
 void test_tls_record_td_read_from_write(const struct tls_record_test_data 
*td_out,
                                        struct tls_record_test_data *td_in);
 
+void test_tls_record_td_prepare(const struct crypto_param *param1,
+                               const struct crypto_param *param2,
+                               const struct tls_record_test_flags *flags,
+                               struct tls_record_test_data *td_array, int 
nb_td);
+
+void test_tls_record_td_update(struct tls_record_test_data td_inb[],
+                              const struct tls_record_test_data td_outb[], int 
nb_td,
+                              const struct tls_record_test_flags *flags);
+
 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);
 
-- 
2.25.1

Reply via email to