get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/7384/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 7384,
    "url": "https://patches.dpdk.org/api/patches/7384/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1443826867-21004-6-git-send-email-declan.doherty@intel.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1443826867-21004-6-git-send-email-declan.doherty@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1443826867-21004-6-git-send-email-declan.doherty@intel.com",
    "date": "2015-10-02T23:01:06",
    "name": "[dpdk-dev,5/6] app/test: add cryptodev unit and performance tests",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "ffd5d2029a6287a32e2ba1bde7e5bc3a9c87afe0",
    "submitter": {
        "id": 11,
        "url": "https://patches.dpdk.org/api/people/11/?format=api",
        "name": "Doherty, Declan",
        "email": "declan.doherty@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1443826867-21004-6-git-send-email-declan.doherty@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/7384/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/7384/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id BDE798E6F;\n\tSat,  3 Oct 2015 00:54:39 +0200 (CEST)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby dpdk.org (Postfix) with ESMTP id 039518E94\n\tfor <dev@dpdk.org>; Sat,  3 Oct 2015 00:54:26 +0200 (CEST)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n\tby orsmga103.jf.intel.com with ESMTP; 02 Oct 2015 15:54:26 -0700",
            "from unknown (HELO dwdohert-dpdk-fedora-20.ir.intel.com)\n\t([163.33.213.96])\n\tby orsmga001.jf.intel.com with ESMTP; 02 Oct 2015 15:54:24 -0700"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.17,625,1437462000\"; d=\"scan'208\";a=\"783186152\"",
        "From": "Declan Doherty <declan.doherty@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Sat,  3 Oct 2015 00:01:06 +0100",
        "Message-Id": "<1443826867-21004-6-git-send-email-declan.doherty@intel.com>",
        "X-Mailer": "git-send-email 2.4.3",
        "In-Reply-To": "<1443826867-21004-1-git-send-email-declan.doherty@intel.com>",
        "References": "<1443826867-21004-1-git-send-email-declan.doherty@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 5/6] app/test: add cryptodev unit and performance\n\ttests",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Co-authored-by: Des O Dea <des.j.o.dea@intel.com>\nCo-authored-by: John Griffin <john.griffin@intel.com>\nCo-authored-by: Fiona Trahe <fiona.trahe@intel.com>\n\nunit tests are run by using cryptodev_qat_autotest or\ncryptodev_aesni_autotest from the test apps interactive console.\n\nperformance tests are run by using the cryptodev_qat_perftest or\ncryptodev_aesni_mb_perftest command from the test apps interactive\nconsole.\n\nIf you which to run the tests on a QAT device there must be one\nbound to igb_uio kernel driver.\n\nSigned-off-by: Declan Doherty <declan.doherty@intel.com>\n---\n app/test/Makefile                  |    3 +\n app/test/test.c                    |   92 +-\n app/test/test.h                    |   34 +-\n app/test/test_cryptodev.c          | 1993 ++++++++++++++++++++++++++++++++++++\n app/test/test_cryptodev.h          |   68 ++\n app/test/test_cryptodev_perf.c     | 1415 +++++++++++++++++++++++++\n app/test/test_link_bonding.c       |    6 +-\n app/test/test_link_bonding_mode4.c |    7 +-\n 8 files changed, 3573 insertions(+), 45 deletions(-)\n create mode 100644 app/test/test_cryptodev.c\n create mode 100644 app/test/test_cryptodev.h\n create mode 100644 app/test/test_cryptodev_perf.c",
    "diff": "diff --git a/app/test/Makefile b/app/test/Makefile\nindex 294618f..b7de576 100644\n--- a/app/test/Makefile\n+++ b/app/test/Makefile\n@@ -140,6 +140,9 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += test_link_bonding.c\n SRCS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += test_link_bonding_mode4.c\n endif\n \n+SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_perf.c\n+SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev.c\n+\n SRCS-$(CONFIG_RTE_LIBRTE_PMD_RING) += test_pmd_ring.c\n SRCS-$(CONFIG_RTE_LIBRTE_KVARGS) += test_kvargs.c\n \ndiff --git a/app/test/test.c b/app/test/test.c\nindex e8992f4..e58f266 100644\n--- a/app/test/test.c\n+++ b/app/test/test.c\n@@ -159,51 +159,81 @@ main(int argc, char **argv)\n int\n unit_test_suite_runner(struct unit_test_suite *suite)\n {\n-\tint retval, i = 0;\n+\tint test_success;\n+\tunsigned total = 0, executed = 0, skipped = 0, succeeded = 0, failed = 0;\n \n \tif (suite->suite_name)\n-\t\tprintf(\"Test Suite : %s\\n\", suite->suite_name);\n+\t\tprintf(\" + ------------------------------------------------------- +\\n\");\n+\t\tprintf(\" + Test Suite : %s\\n\", suite->suite_name);\n \n \tif (suite->setup)\n \t\tif (suite->setup() != 0)\n-\t\t\treturn -1;\n-\n-\twhile (suite->unit_test_cases[i].testcase) {\n-\t\t/* Run test case setup */\n-\t\tif (suite->unit_test_cases[i].setup) {\n-\t\t\tretval = suite->unit_test_cases[i].setup();\n-\t\t\tif (retval != 0)\n-\t\t\t\treturn retval;\n-\t\t}\n+\t\t\tgoto suite_summary;\n \n-\t\t/* Run test case */\n-\t\tif (suite->unit_test_cases[i].testcase() == 0) {\n-\t\t\tprintf(\"TestCase %2d: %s\\n\", i,\n-\t\t\t\t\tsuite->unit_test_cases[i].success_msg ?\n-\t\t\t\t\tsuite->unit_test_cases[i].success_msg :\n-\t\t\t\t\t\"passed\");\n-\t\t}\n-\t\telse {\n-\t\t\tprintf(\"TestCase %2d: %s\\n\", i, suite->unit_test_cases[i].fail_msg ?\n-\t\t\t\t\tsuite->unit_test_cases[i].fail_msg :\n-\t\t\t\t\t\"failed\");\n-\t\t\treturn -1;\n+\tprintf(\" + ------------------------------------------------------- +\\n\");\n+\n+\twhile (suite->unit_test_cases[total].testcase) {\n+\t\tif (!suite->unit_test_cases[total].enabled) {\n+\t\t\tskipped++;\n+\t\t\ttotal++;\n+\t\t\tcontinue;\n+\t\t} else {\n+\t\t\texecuted++;\n \t\t}\n \n-\t\t/* Run test case teardown */\n-\t\tif (suite->unit_test_cases[i].teardown) {\n-\t\t\tretval = suite->unit_test_cases[i].teardown();\n-\t\t\tif (retval != 0)\n-\t\t\t\treturn retval;\n+\t\t/* run test case setup */\n+\t\tif (suite->unit_test_cases[total].setup)\n+\t\t\ttest_success = suite->unit_test_cases[total].setup();\n+\t\telse\n+\t\t\ttest_success = TEST_SUCCESS;\n+\n+\t\tif (test_success == TEST_SUCCESS) {\n+\t\t\t/* run the test case */\n+\t\t\ttest_success = suite->unit_test_cases[total].testcase();\n+\t\t\tif (test_success == TEST_SUCCESS)\n+\t\t\t\tsucceeded++;\n+\t\t\telse\n+\t\t\t\tfailed++;\n+\t\t} else {\n+\t\t\tfailed++;\n \t\t}\n \n-\t\ti++;\n+\t\t/* run the test case teardown */\n+\t\tif (suite->unit_test_cases[total].teardown)\n+\t\t\tsuite->unit_test_cases[total].teardown();\n+\n+\t\tif (test_success == TEST_SUCCESS)\n+\t\t\tprintf(\" + TestCase [%2d] : %s\\n\", total,\n+\t\t\t\t\tsuite->unit_test_cases[total].success_msg ?\n+\t\t\t\t\tsuite->unit_test_cases[total].success_msg :\n+\t\t\t\t\t\"passed\");\n+\t\telse\n+\t\t\tprintf(\" + TestCase [%2d] : %s\\n\", total,\n+\t\t\t\t\tsuite->unit_test_cases[total].fail_msg ?\n+\t\t\t\t\tsuite->unit_test_cases[total].fail_msg :\n+\t\t\t\t\t\"failed\");\n+\n+\t\ttotal++;\n \t}\n \n \t/* Run test suite teardown */\n \tif (suite->teardown)\n-\t\tif (suite->teardown() != 0)\n-\t\t\treturn -1;\n+\t\tsuite->teardown();\n+\n+\tgoto suite_summary;\n+\n+suite_summary:\n+\tprintf(\" + ------------------------------------------------------- +\\n\");\n+\tprintf(\" + Test Suite Summary \\n\");\n+\tprintf(\" + Tests Total :       %2d\\n\", total);\n+\tprintf(\" + Tests Skipped :     %2d\\n\", skipped);\n+\tprintf(\" + Tests Executed :    %2d\\n\", executed);\n+\tprintf(\" + Tests Passed :      %2d\\n\", succeeded);\n+\tprintf(\" + Tests Failed :      %2d\\n\", failed);\n+\tprintf(\" + ------------------------------------------------------- +\\n\");\n+\n+\tif (failed)\n+\t\treturn -1;\n \n \treturn 0;\n }\ndiff --git a/app/test/test.h b/app/test/test.h\nindex 62eb51d..a2fba60 100644\n--- a/app/test/test.h\n+++ b/app/test/test.h\n@@ -33,7 +33,7 @@\n \n #ifndef _TEST_H_\n #define _TEST_H_\n-\n+#include <stddef.h>\n #include <sys/queue.h>\n \n #define TEST_SUCCESS  (0)\n@@ -64,6 +64,17 @@\n \t\t}                                                        \\\n } while (0)\n \n+\n+#define TEST_ASSERT_BUFFERS_ARE_EQUAL(a, b, len,  msg, ...) do {\t\\\n+\tif (memcmp(a, b, len)) {                                        \\\n+\t\tprintf(\"TestCase %s() line %d failed: \"              \\\n+\t\t\tmsg \"\\n\", __func__, __LINE__, ##__VA_ARGS__);    \\\n+\t\tTEST_TRACE_FAILURE(__FILE__, __LINE__, __func__);    \\\n+\t\treturn TEST_FAILED;                                  \\\n+\t}                                                        \\\n+} while (0)\n+\n+\n #define TEST_ASSERT_NOT_EQUAL(a, b, msg, ...) do {               \\\n \t\tif (!(a != b)) {                                         \\\n \t\t\tprintf(\"TestCase %s() line %d failed: \"              \\\n@@ -113,27 +124,36 @@\n \n struct unit_test_case {\n \tint (*setup)(void);\n-\tint (*teardown)(void);\n+\tvoid (*teardown)(void);\n \tint (*testcase)(void);\n \tconst char *success_msg;\n \tconst char *fail_msg;\n+\tunsigned enabled;\n };\n \n-#define TEST_CASE(fn) { NULL, NULL, fn, #fn \" succeeded\", #fn \" failed\"}\n+#define TEST_CASE(fn) { NULL, NULL, fn, #fn \" succeeded\", #fn \" failed\", 1 }\n \n #define TEST_CASE_NAMED(name, fn) { NULL, NULL, fn, name \" succeeded\", \\\n-\t\tname \" failed\"}\n+\t\tname \" failed\", 1 }\n \n #define TEST_CASE_ST(setup, teardown, testcase)         \\\n \t\t{ setup, teardown, testcase, #testcase \" succeeded\",    \\\n-\t\t#testcase \" failed \"}\n+\t\t#testcase \" failed \", 1 }\n+\n+\n+#define TEST_CASE_DISABLED(fn) { NULL, NULL, fn, #fn \" succeeded\", \\\n+\t#fn \" failed\", 0 }\n+\n+#define TEST_CASE_ST_DISABLED(setup, teardown, testcase)         \\\n+\t\t{ setup, teardown, testcase, #testcase \" succeeded\",    \\\n+\t\t#testcase \" failed \", 0 }\n \n-#define TEST_CASES_END() { NULL, NULL, NULL, NULL, NULL }\n+#define TEST_CASES_END() { NULL, NULL, NULL, NULL, NULL, 0 }\n \n struct unit_test_suite {\n \tconst char *suite_name;\n \tint (*setup)(void);\n-\tint (*teardown)(void);\n+\tvoid (*teardown)(void);\n \tstruct unit_test_case unit_test_cases[];\n };\n \ndiff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c\nnew file mode 100644\nindex 0000000..7a181d0\n--- /dev/null\n+++ b/app/test/test_cryptodev.c\n@@ -0,0 +1,1993 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2015 Intel Corporation. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *\t * Redistributions of source code must retain the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer.\n+ *\t * Redistributions in binary form must reproduce the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer in\n+ *\t   the documentation and/or other materials provided with the\n+ *\t   distribution.\n+ *\t * Neither the name of Intel Corporation nor the names of its\n+ *\t   contributors may be used to endorse or promote products derived\n+ *\t   from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#include <rte_common.h>\n+#include <rte_hexdump.h>\n+#include <rte_mbuf.h>\n+#include <rte_malloc.h>\n+#include <rte_memcpy.h>\n+\n+#include <rte_crypto.h>\n+#include <rte_cryptodev.h>\n+#include <rte_cryptodev_pmd.h>\n+\n+#include \"test.h\"\n+#include \"test_cryptodev.h\"\n+\n+static enum rte_cryptodev_type gbl_cryptodev_type;\n+\n+struct crypto_testsuite_params {\n+\tstruct rte_mempool *mbuf_pool;\n+\tstruct rte_mempool *crypto_op_pool;\n+\tstruct rte_cryptodev_config conf;\n+\tstruct rte_cryptodev_qp_conf qp_conf;\n+\n+\tuint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];\n+\tuint8_t valid_dev_count;\n+};\n+\n+struct crypto_unittest_params {\n+\tstruct rte_crypto_xform cipher_xform;\n+\tstruct rte_crypto_xform auth_xform;\n+\n+\tstruct rte_cryptodev_session *sess;\n+\n+\tstruct rte_crypto_op_data *op;\n+\n+\tstruct rte_mbuf *obuf, *ibuf;\n+\n+\tuint8_t *digest;\n+};\n+\n+/*\n+ * Forward declarations.\n+ */\n+static int\n+test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(struct crypto_unittest_params *ut_params);\n+\n+static int\n+test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_session *sess,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tstruct crypto_testsuite_params *ts_param);\n+\n+static struct rte_mbuf *\n+setup_test_string(struct rte_mempool *mpool,\n+\t\tconst char *string, size_t len, uint8_t blocksize)\n+{\n+\tstruct rte_mbuf *m = rte_pktmbuf_alloc(mpool);\n+\tsize_t t_len = len - (blocksize ? (len % blocksize) : 0);\n+\n+\tif (m) {\n+\t\tchar *dst = rte_pktmbuf_append(m, t_len);\n+\n+\t\tif (!dst) {\n+\t\t\trte_pktmbuf_free(m);\n+\t\t\treturn NULL;\n+\t\t}\n+\n+\t\trte_memcpy(dst, string, t_len);\n+\t}\n+\n+\treturn m;\n+}\n+\n+#if HEX_DUMP\n+static void\n+hexdump_mbuf_data(FILE *f, const char *title, struct rte_mbuf *m)\n+{\n+\trte_hexdump(f, title, rte_pktmbuf_mtod(m, const void *), m->data_len);\n+}\n+#endif\n+\n+static struct rte_mbuf *\n+process_crypto_request(uint8_t dev_id, struct rte_mbuf *ibuf)\n+{\n+\tstruct rte_mbuf *obuf = NULL;\n+#if HEX_DUMP\n+\thexdump_mbuf_data(stdout, \"Enqueued Packet\", ibuf);\n+#endif\n+\n+\tif (rte_cryptodev_enqueue_burst(dev_id, 0, &ibuf, 1) != 1) {\n+\t\tprintf(\"Error sending packet for encryption\");\n+\t\treturn NULL;\n+\t}\n+\twhile (rte_cryptodev_dequeue_burst(dev_id, 0, &obuf, 1) == 0)\n+\t\trte_pause();\n+\n+#if HEX_DUMP\n+\tif (obuf)\n+\t\thexdump_mbuf_data(stdout, \"Dequeued Packet\", obuf);\n+#endif\n+\n+\treturn obuf;\n+}\n+\n+static struct crypto_testsuite_params testsuite_params = { NULL };\n+static struct crypto_unittest_params unittest_params;\n+\n+static void\n+free_testsuite_mbufs(void)\n+{\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\t/* free mbuf - both obuf and ibuf are usually the same,\n+\t * but rte copes even if we call free twice */\n+\tif (ut_params->obuf) {\n+\t\trte_pktmbuf_free(ut_params->obuf);\n+\t\tut_params->obuf = 0;\n+\t}\n+\tif (ut_params->ibuf) {\n+\t\trte_pktmbuf_free(ut_params->ibuf);\n+\t\tut_params->ibuf = 0;\n+\t}\n+}\n+\n+static int\n+testsuite_setup(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct rte_cryptodev_info info;\n+\tunsigned i, nb_devs, dev_id = 0;\n+\tuint16_t qp_id;\n+\t\n+\tmemset(ts_params, 0, sizeof(*ts_params));\n+\n+\tts_params->mbuf_pool = rte_mempool_lookup(\"CRYPTO_MBUFPOOL\");\n+\tif (ts_params->mbuf_pool == NULL) {\n+\t\t/* Not already created so create */\n+\t\tts_params->mbuf_pool = rte_pktmbuf_pool_create(\"CRYPTO_MBUFPOOL\",\n+\t\t\t\tNUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,\n+\t\t\t\trte_socket_id());\n+\t\tif (ts_params->mbuf_pool == NULL) {\n+\t\t\tRTE_LOG(ERR, USER1, \"Can't create CRYPTO_MBUFPOOL\\n\");\n+\t\t\treturn TEST_FAILED;\n+\t\t}\n+\t}\n+\n+\tts_params->crypto_op_pool = rte_crypto_op_pool_create(\"CRYPTO_OP_POOL\",\n+\t\t\tNUM_MBUFS, MBUF_CACHE_SIZE, DEFAULT_NUM_XFORMS, rte_socket_id());\n+\tif (ts_params->crypto_op_pool == NULL) {\n+\t\tRTE_LOG(ERR, USER1, \"Can't create CRYPTO_OP_POOL\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\t/* Create 2 AESNI MB devices if required */\n+\tif (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD) {\n+\t\tnb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_MB_PMD);\n+\t\tif (nb_devs < 2) {\n+\t\t\tfor (i = nb_devs; i < 2; i++) {\n+\t\t\t\tint dev_id = rte_eal_vdev_init(\n+\t\t\t\t\tCRYPTODEV_NAME_AESNI_MB_PMD, NULL);\n+\n+\t\t\t\tTEST_ASSERT(dev_id >= 0,\n+\t\t\t\t\t\"Failed to create instance %u of pmd : %s\",\n+\t\t\t\t\ti, CRYPTODEV_NAME_AESNI_MB_PMD);\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tnb_devs = rte_cryptodev_count();\n+\tif (nb_devs < 1) {\n+\t\tRTE_LOG(ERR, USER1, \"No crypto devices found?\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\t/* Create list of valid crypto devs */\n+\tfor (i = 0; i < nb_devs; i++) {\n+\t\trte_cryptodev_info_get(i, &info);\n+\t\tif (info.dev_type == gbl_cryptodev_type) {\n+\t\t\tts_params->valid_devs[ts_params->valid_dev_count++] = i;\n+\t\t}\n+\t}\n+\n+\tif (ts_params->valid_dev_count < 1)\n+\t\treturn TEST_FAILED;\n+\n+\t/* Set up all the qps on the first of the valid devices found */\n+\tfor (i = 0; i < 1; i++) {\n+\t\tdev_id = ts_params->valid_devs[i];\n+\n+\t\t/* Since we can't free and re-allocate queue memory always set the\n+\t\t * queues on this device up to max size first so enough memory is\n+\t\t * allocated for any later re-configures needed by other tests */\n+\n+\t\tts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;\n+\t\tts_params->conf.socket_id = SOCKET_ID_ANY;\n+\t\tts_params->conf.session_mp.nb_objs =\n+\t\t\t\t(gbl_cryptodev_type == RTE_CRYPTODEV_QAT_PMD) ?\n+\t\t\t\t\t\tRTE_LIBRTE_PMD_QAT_MAX_SESSIONS :\n+\t\t\t\t\t\tRTE_LIBRTE_PMD_AESNI_MB_MAX_SESSIONS;\n+\n+\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,\n+\t\t\t\t&ts_params->conf),\n+\t\t\t\t\"Failed to configure cryptodev %u with %u qps\",\n+\t\t\t\tdev_id, ts_params->conf.nb_queue_pairs);\n+\n+\t\tts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;\n+\n+\t\tfor (qp_id = 0; qp_id < MAX_NUM_QPS_PER_QAT_DEVICE; qp_id++) {\n+\t\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n+\t\t\t\t\tdev_id, qp_id, &ts_params->qp_conf,\n+\t\t\t\t\trte_cryptodev_socket_id(dev_id)),\n+\t\t\t\t\t\"Failed to setup queue pair %u on cryptodev %u\",\n+\t\t\t\t\tqp_id, dev_id);\n+\t\t}\n+\t}\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static void\n+testsuite_teardown(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\n+\tif (ts_params->mbuf_pool != NULL) {\n+\t\tRTE_LOG(DEBUG, USER1, \"CRYPTO_MBUFPOOL count %u\\n\",\n+\t\trte_mempool_count(ts_params->mbuf_pool));\n+\t}\n+\n+\n+\tif (ts_params->crypto_op_pool != NULL) {\n+\t\tRTE_LOG(DEBUG, USER1, \"CRYPTO_OP_POOL count %u\\n\",\n+\t\trte_mempool_count(ts_params->crypto_op_pool));\n+\t}\n+\n+}\n+\n+static int\n+ut_setup(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\tuint16_t qp_id;\n+\n+\t/* Clear unit test parameters before running test */\n+\tmemset(ut_params, 0, sizeof(*ut_params));\n+\n+\t/* Reconfigure device to default parameters */\n+\tts_params->conf.nb_queue_pairs = DEFAULT_NUM_QPS_PER_QAT_DEVICE;\n+\tts_params->conf.socket_id = SOCKET_ID_ANY;\n+\tts_params->conf.session_mp.nb_objs =\n+\t\t\t(gbl_cryptodev_type == RTE_CRYPTODEV_QAT_PMD) ?\n+\t\t\t\t\tDEFAULT_NUM_OPS_INFLIGHT :\n+\t\t\t\t\tDEFAULT_NUM_OPS_INFLIGHT;\n+\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],\n+\t\t\t&ts_params->conf),\n+\t\t\t\"Failed to configure cryptodev %u\",\n+\t\t\tts_params->valid_devs[0]);\n+\n+\t/* Now reconfigure queues to size we actually want to use in this\n+\t * test suite. */\n+\tts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {\n+\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n+\t\t\tts_params->valid_devs[0], qp_id,\n+\t\t\t&ts_params->qp_conf,\n+\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\"Failed to setup queue pair %u on cryptodev %u\",\n+\t\t\tqp_id, ts_params->valid_devs[0]);\n+\t}\n+\n+\n+\trte_cryptodev_stats_reset(ts_params->valid_devs[0]);\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static void\n+ut_teardown(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\tstruct rte_cryptodev_stats stats;\n+\n+\t/* free crypto session structure */\n+\tif (ut_params->sess) {\n+\t\trte_cryptodev_session_free(ts_params->valid_devs[0],\n+\t\t\t\tut_params->sess);\n+\t\tut_params->sess = NULL;\n+\t}\n+\n+\t/* free crypto operation structure */\n+\tif (ut_params->op)\n+\t\trte_crypto_op_free(ut_params->op);\n+\n+\t/* just in case test didn't free mbufs */\n+\tfree_testsuite_mbufs();\n+\n+\tif (ts_params->mbuf_pool != NULL)\n+\t\tRTE_LOG(DEBUG, USER1, \"CRYPTO_MBUFPOOL count %u\\n\",\n+\t\t\t\trte_mempool_count(ts_params->mbuf_pool));\n+\n+\trte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);\n+\n+}\n+\n+static int\n+test_device_configure_invalid_dev_id(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t dev_id, num_devs = 0;\n+\n+\tTEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,\n+\t\t\t\"Need at least %d devices for test\", 1);\n+\n+\t/* valid dev_id values */\n+\tdev_id = ts_params->valid_devs[ts_params->valid_dev_count -1];\n+\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),\n+\t\t\t\"Failed test for rte_cryptodev_configure: \"\n+\t\t\t\"invalid dev_num %u\", dev_id);\n+\n+\t/* invalid dev_id values */\n+\tdev_id = num_devs;\n+\n+\tTEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),\n+\t\t\t\"Failed test for rte_cryptodev_configure: \"\n+\t\t\t\"invalid dev_num %u\", dev_id);\n+\n+\tdev_id = 0xff;\n+\n+\tTEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),\n+\t\t\t\"Failed test for rte_cryptodev_configure:\"\n+\t\t\t\"invalid dev_num %u\", dev_id);\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_device_configure_invalid_queue_pair_ids(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\n+\n+\t/* valid - one queue pairs */\n+\tts_params->conf.nb_queue_pairs = 1;\n+\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0], &ts_params->conf),\n+\t\t\t\"Failed to configure cryptodev: dev_id %u, qp_id %u\",\n+\t\t\tts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);\n+\n+\n+\t/* valid - max value queue pairs */\n+\tts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;\n+\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0], &ts_params->conf),\n+\t\t\t\"Failed to configure cryptodev: dev_id %u, qp_id %u\",\n+\t\t\tts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);\n+\n+\n+\t/* invalid - zero queue pairs */\n+\tts_params->conf.nb_queue_pairs = 0;\n+\n+\tTEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0], &ts_params->conf),\n+\t\t\t\"Failed test for rte_cryptodev_configure, dev_id %u, invalid qps: %u\",\n+\t\t\tts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);\n+\n+\n+\t/* invalid - max value supported by field queue pairs */\n+\tts_params->conf.nb_queue_pairs = UINT16_MAX;\n+\n+\tTEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0], &ts_params->conf),\n+\t\t\t\t\"Failed test for rte_cryptodev_configure, dev_id %u, invalid qps: %u\",\n+\t\t\t\tts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);\n+\n+\n+\t/* invalid - max value + 1 queue pairs */\n+\tts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE + 1;\n+\n+\tTEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0], &ts_params->conf),\n+\t\t\t\t\"Failed test for rte_cryptodev_configure, dev_id %u, invalid qps: %u\",\n+\t\t\t\tts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_queue_pair_descriptor_setup(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct rte_cryptodev_qp_conf qp_conf = {\n+\t\t.nb_descriptors = MAX_NUM_OPS_INFLIGHT\n+\t};\n+\n+\tuint16_t qp_id;\n+\n+\tts_params->conf.session_mp.nb_objs = RTE_LIBRTE_PMD_QAT_MAX_SESSIONS;\n+\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],\n+\t\t\t&ts_params->conf), \"Failed to configure cryptodev %u\",\n+\t\t\tts_params->valid_devs[0]);\n+\n+\n+\t/* Test various ring sizes on this device. memzones can't be\n+\t * freed so are re-used if ring is released and re-created. */\n+\tqp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {\n+\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n+\t\t\t\tts_params->valid_devs[0], qp_id, &qp_conf,\n+\t\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\t\"Failed test for rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\t\"num_inflights %u on qp %u on cryptodev %u\",\n+\t\t\t\tqp_conf.nb_descriptors, qp_id, ts_params->valid_devs[0]);\n+\t}\n+\n+\tqp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2); /* valid */\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {\n+\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n+\t\t\t\tts_params->valid_devs[0], qp_id, &qp_conf,\n+\t\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\t\"Failed test for rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\t\"num_inflights %u on qp %u on cryptodev %u\",\n+\t\t\t\tqp_conf.nb_descriptors, qp_id, ts_params->valid_devs[0]);\n+\t}\n+\n+\tqp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {\n+\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n+\t\t\t\tts_params->valid_devs[0], qp_id, &qp_conf,\n+\t\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\t\"Failed test for rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\t\"num_inflights %u on qp %u on cryptodev %u\",\n+\t\t\t\tqp_conf.nb_descriptors, qp_id, ts_params->valid_devs[0]);\n+\t}\n+\n+\t/* invalid number of descriptors - max supported + 2 */\n+\tqp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {\n+\t\tTEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(\n+\t\t\t\tts_params->valid_devs[0], qp_id, &qp_conf,\n+\t\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\t\"Unexpectedly passed test for \"\n+\t\t\t\t\"rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\t\"num_inflights %u on qp %u on cryptodev %u\",\n+\t\t\t\tqp_conf.nb_descriptors, qp_id, ts_params->valid_devs[0]);\n+\t}\n+\n+\t/* invalid number of descriptors - max value of parameter */\n+\tqp_conf.nb_descriptors = UINT32_MAX-1;\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {\n+\t\tTEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(\n+\t\t\t\tts_params->valid_devs[0], qp_id, &qp_conf,\n+\t\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\t\"Unexpectedly passed test for \"\n+\t\t\t\t\"rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\t\"num_inflights %u on qp %u on cryptodev %u\",\n+\t\t\t\tqp_conf.nb_descriptors, qp_id, ts_params->valid_devs[0]);\n+\t}\n+\n+\tqp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {\n+\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n+\t\t\t\tts_params->valid_devs[0], qp_id, &qp_conf,\n+\t\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\t\"Failed test for rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\t\"num_inflights %u on qp %u on cryptodev %u\",\n+\t\t\t\tqp_conf.nb_descriptors, qp_id, ts_params->valid_devs[0]);\n+\t}\n+\n+\t/* invalid number of descriptors - max supported + 1 */\n+\tqp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {\n+\t\tTEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(\n+\t\t\t\tts_params->valid_devs[0], qp_id, &qp_conf,\n+\t\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\t\"Unexpectedly passed test for \"\n+\t\t\t\t\"rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\t\"num_inflights %u on qp %u on cryptodev %u\",\n+\t\t\t\tqp_conf.nb_descriptors, qp_id, ts_params->valid_devs[0]);\n+\t}\n+\n+\t/* test invalid queue pair id */\n+\tqp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;\t/*valid */\n+\n+\tqp_id = DEFAULT_NUM_QPS_PER_QAT_DEVICE; \t\t/*invalid */\n+\n+\tTEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(ts_params->valid_devs[0],\n+\t\t\tqp_id, &qp_conf,\n+\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\"Failed test for rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\"invalid qp %u on cryptodev %u\",\n+\t\t\tqp_id, ts_params->valid_devs[0]);\n+\n+\tqp_id = 0xffff; /*invalid*/\n+\n+\tTEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(ts_params->valid_devs[0],\n+\t\t\tqp_id, &qp_conf,\n+\t\t\trte_cryptodev_socket_id(ts_params->valid_devs[0])),\n+\t\t\t\"Failed test for rte_cryptodev_queue_pair_setup:\"\n+\t\t\t\"invalid qp %u on cryptodev %u\",\n+\t\t\tqp_id, ts_params->valid_devs[0]);\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+/* ***** Plaintext data for tests ***** */\n+\n+const char catch_22_quote_1[] =\n+\t\t\"There was only one catch and that was Catch-22, which \"\n+\t\t\"specified that a concern for one's safety in the face of \"\n+\t\t\"dangers that were real and immediate was the process of a \"\n+\t\t\"rational mind. Orr was crazy and could be grounded. All he \"\n+\t\t\"had to do was ask; and as soon as he did, he would no longer \"\n+\t\t\"be crazy and would have to fly more missions. Orr would be \"\n+\t\t\"crazy to fly more missions and sane if he didn't, but if he \"\n+\t\t\"was sane he had to fly them. If he flew them he was crazy \"\n+\t\t\"and didn't have to; but if he didn't want to he was sane and \"\n+\t\t\"had to. Yossarian was moved very deeply by the absolute \"\n+\t\t\"simplicity of this clause of Catch-22 and let out a \"\n+\t\t\"respectful whistle. \\\"That's some catch, that Catch-22\\\", he \"\n+\t\t\"observed. \\\"It's the best there is,\\\" Doc Daneeka agreed.\";\n+\n+const char catch_22_quote[] =\n+\t\t\"What a lousy earth! He wondered how many people were \"\n+\t\t\"destitute that same night even in his own prosperous country, \"\n+\t\t\"how many homes were shanties, how many husbands were drunk \"\n+\t\t\"and wives socked, and how many children were bullied, abused, \"\n+\t\t\"or abandoned. How many families hungered for food they could \"\n+\t\t\"not afford to buy? How many hearts were broken? How many \"\n+\t\t\"suicides would take place that same night, how many people \"\n+\t\t\"would go insane? How many cockroaches and landlords would \"\n+\t\t\"triumph? How many winners were losers, successes failures, \"\n+\t\t\"and rich men poor men? How many wise guys were stupid? How \"\n+\t\t\"many happy endings were unhappy endings? How many honest men \"\n+\t\t\"were liars, brave men cowards, loyal men traitors, how many \"\n+\t\t\"sainted men were corrupt, how many people in positions of \"\n+\t\t\"trust had sold their souls to bodyguards, how many had never \"\n+\t\t\"had souls? How many straight-and-narrow paths were crooked \"\n+\t\t\"paths? How many best families were worst families and how \"\n+\t\t\"many good people were bad people? When you added them all up \"\n+\t\t\"and then subtracted, you might be left with only the children, \"\n+\t\t\"and perhaps with Albert Einstein and an old violinist or \"\n+\t\t\"sculptor somewhere.\";\n+\n+#define QUOTE_480_BYTES\t\t(480)\n+#define QUOTE_512_BYTES\t\t(512)\n+#define QUOTE_768_BYTES\t\t(768)\n+#define QUOTE_1024_BYTES\t(1024)\n+\n+\n+\n+/* ***** SHA1 Hash Tests ***** */\n+\n+#define HMAC_KEY_LENGTH_SHA1\t(DIGEST_BYTE_LENGTH_SHA1)\n+\n+static uint8_t hmac_sha1_key[] = {\n+\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t0xDE, 0xF4, 0xDE, 0xAD };\n+\n+static const uint8_t catch_22_480_bytes_SHA1_digest[] = {\n+\t0xae, 0xd5, 0x60, 0x7e, 0xf5, 0x37, 0xe2, 0xf6,\n+\t0x28, 0x68, 0x71, 0x91, 0xab, 0x3d, 0x34, 0xba,\n+\t0x20, 0xb4, 0x57, 0x05 };\n+\n+static const uint8_t catch_22_512_bytes_HMAC_SHA1_digest[] = {\n+\t0xc5, 0x1a, 0x08, 0x57, 0x3e, 0x52, 0x59, 0x75,\n+\t0xa5, 0x2b, 0xb9, 0xef, 0x66, 0xfc, 0xc3, 0x3b,\n+\t0xf0, 0xa8, 0x46, 0xbd };\n+\n+/* ***** SHA224 Hash Tests ***** */\n+\n+#define HMAC_KEY_LENGTH_SHA224\t(DIGEST_BYTE_LENGTH_SHA224)\n+\n+static const uint8_t catch_22_512_bytes_SHA244_digest[] = {\n+\t0x35, 0x86, 0x49, 0x1e, 0xdb, 0xaa, 0x9b, 0x6e,\n+\t0xab, 0x45, 0x19, 0xe0, 0x71, 0xae, 0xa6, 0x6b,\n+\t0x62, 0x46, 0x72, 0x7b, 0x3d, 0x40, 0x78, 0x25,\n+\t0x58, 0xde, 0xdf, 0xd0 };\n+\n+static const uint8_t catch_22_512_bytes_HMAC_SHA244_digest[] = {\n+\t0x5d, 0x4c, 0xba, 0xcc, 0x1f, 0x6e, 0x94, 0x19,\n+\t0xb7, 0xe4, 0x2b, 0x5f, 0x20, 0x80, 0xc7, 0xb8,\n+\t0x14, 0x8c, 0x6d, 0x66, 0xaa, 0xc7, 0x3d, 0x48,\n+\t0x68, 0x0b, 0xe4, 0x85 };\n+\n+\n+/* ***** AES-CBC Cipher Tests ***** */\n+\n+#define CIPHER_KEY_LENGTH_AES_CBC\t(16)\n+#define CIPHER_IV_LENGTH_AES_CBC\t(CIPHER_KEY_LENGTH_AES_CBC)\n+\n+static uint8_t aes_cbc_key[] = {\n+\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };\n+\n+static uint8_t aes_cbc_iv[] = {\n+\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n+\t0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };\n+\n+static const uint8_t catch_22_quote_2_1Kb_AES_CBC_ciphertext[] = {\n+\t0x8B, 0X4D, 0XDA, 0X1B, 0XCF, 0X04, 0XA0, 0X31, 0XB4, 0XBF, 0XBD, 0X68, 0X43, 0X20, 0X7E, 0X76,\n+\t0XB1, 0X96, 0X8B, 0XA2, 0X7C, 0XA2, 0X83, 0X9E, 0X39, 0X5A, 0X2F, 0X7E, 0X92, 0XB4, 0X48, 0X1A,\n+\t0X3F, 0X6B, 0X5D, 0XDF, 0X52, 0X85, 0X5F, 0X8E, 0X42, 0X3C, 0XFB, 0XE9, 0X1A, 0X24, 0XD6, 0X08,\n+\t0XDD, 0XFD, 0X16, 0XFB, 0XE9, 0X55, 0XEF, 0XF0, 0XA0, 0X8D, 0X13, 0XAB, 0X81, 0XC6, 0X90, 0X01,\n+\t0XB5, 0X18, 0X84, 0XB3, 0XF6, 0XE6, 0X11, 0X57, 0XD6, 0X71, 0XC6, 0X3C, 0X3F, 0X2F, 0X33, 0XEE,\n+\t0X24, 0X42, 0X6E, 0XAC, 0X0B, 0XCA, 0XEC, 0XF9, 0X84, 0XF8, 0X22, 0XAA, 0X60, 0XF0, 0X32, 0XA9,\n+\t0X75, 0X75, 0X3B, 0XCB, 0X70, 0X21, 0X0A, 0X8D, 0X0F, 0XE0, 0XC4, 0X78, 0X2B, 0XF8, 0X97, 0XE3,\n+\t0XE4, 0X26, 0X4B, 0X29, 0XDA, 0X88, 0XCD, 0X46, 0XEC, 0XAA, 0XF9, 0X7F, 0XF1, 0X15, 0XEA, 0XC3,\n+\t0X87, 0XE6, 0X31, 0XF2, 0XCF, 0XDE, 0X4D, 0X80, 0X70, 0X91, 0X7E, 0X0C, 0XF7, 0X26, 0X3A, 0X92,\n+\t0X4F, 0X18, 0X83, 0XC0, 0X8F, 0X59, 0X01, 0XA5, 0X88, 0XD1, 0XDB, 0X26, 0X71, 0X27, 0X16, 0XF5,\n+\t0XEE, 0X10, 0X82, 0XAC, 0X68, 0X26, 0X9B, 0XE2, 0X6D, 0XD8, 0X9A, 0X80, 0XDF, 0X04, 0X31, 0XD5,\n+\t0XF1, 0X35, 0X5C, 0X3B, 0XDD, 0X9A, 0X65, 0XBA, 0X58, 0X34, 0X85, 0X61, 0X1C, 0X42, 0X10, 0X76,\n+\t0X73, 0X02, 0X42, 0XC9, 0X23, 0X18, 0X8E, 0XB4, 0X6F, 0XB4, 0XA3, 0X54, 0X6E, 0X88, 0X3B, 0X62,\n+\t0X7C, 0X02, 0X8D, 0X4C, 0X9F, 0XC8, 0X45, 0XF4, 0XC9, 0XDE, 0X4F, 0XEB, 0X22, 0X83, 0X1B, 0XE4,\n+\t0X49, 0X37, 0XE4, 0XAD, 0XE7, 0XCD, 0X21, 0X54, 0XBC, 0X1C, 0XC2, 0X04, 0X97, 0XB4, 0X10, 0X61,\n+\t0XF0, 0XE4, 0XEF, 0X27, 0X63, 0X3A, 0XDA, 0X91, 0X41, 0X25, 0X62, 0X1C, 0X5C, 0XB6, 0X38, 0X4A,\n+\t0X88, 0X71, 0X59, 0X5A, 0X8D, 0XA0, 0X09, 0XAF, 0X72, 0X94, 0XD7, 0X79, 0X5C, 0X60, 0X7C, 0X8F,\n+\t0X4C, 0XF5, 0XD9, 0XA1, 0X39, 0X6D, 0X81, 0X28, 0XEF, 0X13, 0X28, 0XDF, 0XF5, 0X3E, 0XF7, 0X8E,\n+\t0X09, 0X9C, 0X78, 0X18, 0X79, 0XB8, 0X68, 0XD7, 0XA8, 0X29, 0X62, 0XAD, 0XDE, 0XE1, 0X61, 0X76,\n+\t0X1B, 0X05, 0X16, 0XCD, 0XBF, 0X02, 0X8E, 0XA6, 0X43, 0X6E, 0X92, 0X55, 0X4F, 0X60, 0X9C, 0X03,\n+\t0XB8, 0X4F, 0XA3, 0X02, 0XAC, 0XA8, 0XA7, 0X0C, 0X1E, 0XB5, 0X6B, 0XF8, 0XC8, 0X4D, 0XDE, 0XD2,\n+\t0XB0, 0X29, 0X6E, 0X40, 0XE6, 0XD6, 0XC9, 0XE6, 0XB9, 0X0F, 0XB6, 0X63, 0XF5, 0XAA, 0X2B, 0X96,\n+\t0XA7, 0X16, 0XAC, 0X4E, 0X0A, 0X33, 0X1C, 0XA6, 0XE6, 0XBD, 0X8A, 0XCF, 0X40, 0XA9, 0XB2, 0XFA,\n+\t0X63, 0X27, 0XFD, 0X9B, 0XD9, 0XFC, 0XD5, 0X87, 0X8D, 0X4C, 0XB6, 0XA4, 0XCB, 0XE7, 0X74, 0X55,\n+\t0XF4, 0XFB, 0X41, 0X25, 0XB5, 0X4B, 0X0A, 0X1B, 0XB1, 0XD6, 0XB7, 0XD9, 0X47, 0X2A, 0XC3, 0X98,\n+\t0X6A, 0XC4, 0X03, 0X73, 0X1F, 0X93, 0X6E, 0X53, 0X19, 0X25, 0X64, 0X15, 0X83, 0XF9, 0X73, 0X2A,\n+\t0X74, 0XB4, 0X93, 0X69, 0XC4, 0X72, 0XFC, 0X26, 0XA2, 0X9F, 0X43, 0X45, 0XDD, 0XB9, 0XEF, 0X36,\n+\t0XC8, 0X3A, 0XCD, 0X99, 0X9B, 0X54, 0X1A, 0X36, 0XC1, 0X59, 0XF8, 0X98, 0XA8, 0XCC, 0X28, 0X0D,\n+\t0X73, 0X4C, 0XEE, 0X98, 0XCB, 0X7C, 0X58, 0X7E, 0X20, 0X75, 0X1E, 0XB7, 0XC9, 0XF8, 0XF2, 0X0E,\n+\t0X63, 0X9E, 0X05, 0X78, 0X1A, 0XB6, 0XA8, 0X7A, 0XF9, 0X98, 0X6A, 0XA6, 0X46, 0X84, 0X2E, 0XF6,\n+\t0X4B, 0XDC, 0X9B, 0X8F, 0X9B, 0X8F, 0XEE, 0XB4, 0XAA, 0X3F, 0XEE, 0XC0, 0X37, 0X27, 0X76, 0XC7,\n+\t0X95, 0XBB, 0X26, 0X74, 0X69, 0X12, 0X7F, 0XF1, 0XBB, 0XFF, 0XAE, 0XB5, 0X99, 0X6E, 0XCB, 0X0C,\n+\t0XB9, 0X9F, 0X8B, 0X21, 0XC6, 0X44, 0X3F, 0XB1, 0X2A, 0XA0, 0X63, 0X9E, 0X3F, 0X26, 0X21, 0X64,\n+\t0X62, 0XE3, 0X54, 0X71, 0X6D, 0XE7, 0X1C, 0X10, 0X72, 0X72, 0XBB, 0X93, 0X75, 0XA0, 0X79, 0X3E,\n+\t0X7B, 0X6F, 0XDA, 0XF7, 0X52, 0X45, 0X4C, 0X5B, 0XF6, 0X01, 0XAD, 0X2D, 0X50, 0XBE, 0X34, 0XEE,\n+\t0X67, 0X10, 0X73, 0X68, 0X3D, 0X00, 0X3B, 0XD5, 0XA3, 0X8E, 0XC8, 0X9D, 0X41, 0X66, 0X0D, 0XB5,\n+\t0X5B, 0X93, 0X50, 0X2F, 0XBD, 0X27, 0X5C, 0XAE, 0X01, 0X8B, 0XE4, 0XB1, 0X08, 0XDD, 0XD3, 0X16,\n+\t0X0F, 0XFE, 0XA2, 0X40, 0X64, 0X5C, 0XE5, 0XBB, 0X3A, 0X51, 0X12, 0X27, 0XAB, 0X04, 0X4E, 0X36,\n+\t0XD1, 0XC4, 0X4E, 0X44, 0XF6, 0XD1, 0XFE, 0X0E, 0X3A, 0XEA, 0X9B, 0X0E, 0X76, 0XB8, 0X42, 0X68,\n+\t0X53, 0XD4, 0XFA, 0XBD, 0XEC, 0XD8, 0X81, 0X5D, 0X6D, 0XB7, 0X5A, 0XDF, 0X33, 0X60, 0XBB, 0X91,\n+\t0XBC, 0X1C, 0X1D, 0X74, 0XEA, 0X21, 0XE8, 0XF9, 0X85, 0X9E, 0XB3, 0X86, 0XB2, 0X3C, 0X73, 0X2F,\n+\t0X70, 0XBB, 0XBB, 0X92, 0XC4, 0XDB, 0XF4, 0X0D, 0XF8, 0X26, 0X4A, 0X30, 0X05, 0X8A, 0X78, 0X94,\n+\t0X0D, 0X76, 0XC2, 0XB3, 0XFF, 0X27, 0X6C, 0X3E, 0X6D, 0XFD, 0XB7, 0XA8, 0X1E, 0X7E, 0X22, 0X57,\n+\t0X63, 0XAF, 0X17, 0X36, 0X97, 0X5E, 0XEA, 0X22, 0X1F, 0XD1, 0X1C, 0X1D, 0X69, 0XC7, 0X1D, 0X4E,\n+\t0X6F, 0X44, 0X5B, 0XD0, 0X8D, 0X97, 0XE4, 0X68, 0X0A, 0XB2, 0X4E, 0X9D, 0X7D, 0X3C, 0X0A, 0X28,\n+\t0X81, 0X69, 0X77, 0X0C, 0X97, 0X0C, 0X62, 0X6E, 0X41, 0X1D, 0XE8, 0XEC, 0XFB, 0X07, 0X00, 0X3D,\n+\t0XD5, 0XBB, 0XAB, 0X9F, 0XFC, 0X9F, 0X49, 0XC9, 0XD2, 0XC9, 0XE6, 0XBB, 0X22, 0XA9, 0X61, 0X3A,\n+\t0X6B, 0X3C, 0XDA, 0XFD, 0XC9, 0X67, 0X3A, 0XAF, 0X53, 0X9B, 0XFA, 0X13, 0X68, 0XB5, 0XB1, 0XBD,\n+\t0XAC, 0X91, 0XBA, 0X3F, 0X6F, 0X82, 0X81, 0XE8, 0X1B, 0X47, 0XC4, 0XE4, 0X2D, 0X23, 0X92, 0X45,\n+\t0X96, 0XDA, 0X96, 0X49, 0X7D, 0XF9, 0X29, 0X2C, 0X02, 0X9E, 0XD2, 0X43, 0X45, 0X18, 0XA2, 0X13,\n+\t0X00, 0X93, 0X77, 0X38, 0XB8, 0X93, 0XAB, 0X1A, 0XB9, 0X64, 0XD5, 0X15, 0X3C, 0X04, 0X28, 0X6D,\n+\t0X66, 0X58, 0XF2, 0X20, 0XB1, 0XD7, 0X10, 0XB5, 0X14, 0XB5, 0XBF, 0X9E, 0XA8, 0X75, 0X47, 0X3C,\n+\t0X8C, 0XAA, 0XC9, 0X0F, 0X81, 0X79, 0X62, 0XCB, 0X64, 0X95, 0X32, 0X63, 0X16, 0XCD, 0X5D, 0X01,\n+\t0XF7, 0X3C, 0X1F, 0X69, 0XD8, 0X0F, 0XC6, 0X70, 0X19, 0X35, 0X76, 0XEB, 0XE4, 0XFE, 0XEA, 0XF3,\n+\t0X81, 0X78, 0XCD, 0XCD, 0XBA, 0X91, 0XE2, 0XDF, 0X73, 0X39, 0X5F, 0X1E, 0X7D, 0X2B, 0XEE, 0X64,\n+\t0X33, 0X9B, 0XB1, 0X9D, 0X1F, 0X73, 0X3D, 0XDC, 0XA9, 0X35, 0XB6, 0XC6, 0XAF, 0XE2, 0X97, 0X29,\n+\t0X38, 0XEE, 0X38, 0X26, 0X52, 0X98, 0X17, 0X76, 0XA3, 0X4B, 0XAF, 0X7D, 0XD0, 0X2D, 0X43, 0X52,\n+\t0XAD, 0X58, 0X4F, 0X0A, 0X6B, 0X4F, 0X10, 0XB9, 0X38, 0XAB, 0X3A, 0XD5, 0X77, 0XAE, 0X83, 0XF3,\n+\t0X8C, 0X48, 0X1A, 0XC6, 0X61, 0XCF, 0XE5, 0XA6, 0X2B, 0X5B, 0X60, 0X94, 0XFB, 0X04, 0X34, 0XFC,\n+\t0X0F, 0X67, 0X1F, 0XFE, 0X42, 0X0E, 0XE1, 0X58, 0X2B, 0X04, 0X11, 0XEB, 0X83, 0X74, 0X06, 0XC5,\n+\t0XEF, 0X83, 0XA5, 0X40, 0XCB, 0X69, 0X18, 0X7E, 0XDB, 0X71, 0XBF, 0XC2, 0XFA, 0XEF, 0XF5, 0XB9,\n+\t0X03, 0XF1, 0XF8, 0X78, 0X7F, 0X71, 0XE3, 0XBB, 0XDE, 0XF3, 0XC3, 0X03, 0X29, 0X9A, 0XBF, 0XD6,\n+\t0XCD, 0XA7, 0X35, 0XD5, 0XE8, 0X88, 0XAE, 0X89, 0XCE, 0X4B, 0X93, 0X4E, 0X04, 0X02, 0X41, 0X86,\n+\t0X7F, 0X4A, 0X96, 0X23, 0X19, 0X6D, 0XD1, 0X2C, 0X9C, 0X7A, 0X2C, 0X3B, 0XD6, 0X98, 0X7B, 0X4C\n+};\n+\n+\n+/* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */\n+\n+static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {\n+\t0x8B, 0X4D, 0XDA, 0X1B, 0XCF, 0X04, 0XA0, 0X31, 0XB4, 0XBF, 0XBD, 0X68, 0X43, 0X20, 0X7E, 0X76,\n+\t0XB1, 0X96, 0X8B, 0XA2, 0X7C, 0XA2, 0X83, 0X9E, 0X39, 0X5A, 0X2F, 0X7E, 0X92, 0XB4, 0X48, 0X1A,\n+\t0X3F, 0X6B, 0X5D, 0XDF, 0X52, 0X85, 0X5F, 0X8E, 0X42, 0X3C, 0XFB, 0XE9, 0X1A, 0X24, 0XD6, 0X08,\n+\t0XDD, 0XFD, 0X16, 0XFB, 0XE9, 0X55, 0XEF, 0XF0, 0XA0, 0X8D, 0X13, 0XAB, 0X81, 0XC6, 0X90, 0X01,\n+\t0XB5, 0X18, 0X84, 0XB3, 0XF6, 0XE6, 0X11, 0X57, 0XD6, 0X71, 0XC6, 0X3C, 0X3F, 0X2F, 0X33, 0XEE,\n+\t0X24, 0X42, 0X6E, 0XAC, 0X0B, 0XCA, 0XEC, 0XF9, 0X84, 0XF8, 0X22, 0XAA, 0X60, 0XF0, 0X32, 0XA9,\n+\t0X75, 0X75, 0X3B, 0XCB, 0X70, 0X21, 0X0A, 0X8D, 0X0F, 0XE0, 0XC4, 0X78, 0X2B, 0XF8, 0X97, 0XE3,\n+\t0XE4, 0X26, 0X4B, 0X29, 0XDA, 0X88, 0XCD, 0X46, 0XEC, 0XAA, 0XF9, 0X7F, 0XF1, 0X15, 0XEA, 0XC3,\n+\t0X87, 0XE6, 0X31, 0XF2, 0XCF, 0XDE, 0X4D, 0X80, 0X70, 0X91, 0X7E, 0X0C, 0XF7, 0X26, 0X3A, 0X92,\n+\t0X4F, 0X18, 0X83, 0XC0, 0X8F, 0X59, 0X01, 0XA5, 0X88, 0XD1, 0XDB, 0X26, 0X71, 0X27, 0X16, 0XF5,\n+\t0XEE, 0X10, 0X82, 0XAC, 0X68, 0X26, 0X9B, 0XE2, 0X6D, 0XD8, 0X9A, 0X80, 0XDF, 0X04, 0X31, 0XD5,\n+\t0XF1, 0X35, 0X5C, 0X3B, 0XDD, 0X9A, 0X65, 0XBA, 0X58, 0X34, 0X85, 0X61, 0X1C, 0X42, 0X10, 0X76,\n+\t0X73, 0X02, 0X42, 0XC9, 0X23, 0X18, 0X8E, 0XB4, 0X6F, 0XB4, 0XA3, 0X54, 0X6E, 0X88, 0X3B, 0X62,\n+\t0X7C, 0X02, 0X8D, 0X4C, 0X9F, 0XC8, 0X45, 0XF4, 0XC9, 0XDE, 0X4F, 0XEB, 0X22, 0X83, 0X1B, 0XE4,\n+\t0X49, 0X37, 0XE4, 0XAD, 0XE7, 0XCD, 0X21, 0X54, 0XBC, 0X1C, 0XC2, 0X04, 0X97, 0XB4, 0X10, 0X61,\n+\t0XF0, 0XE4, 0XEF, 0X27, 0X63, 0X3A, 0XDA, 0X91, 0X41, 0X25, 0X62, 0X1C, 0X5C, 0XB6, 0X38, 0X4A,\n+\t0X88, 0X71, 0X59, 0X5A, 0X8D, 0XA0, 0X09, 0XAF, 0X72, 0X94, 0XD7, 0X79, 0X5C, 0X60, 0X7C, 0X8F,\n+\t0X4C, 0XF5, 0XD9, 0XA1, 0X39, 0X6D, 0X81, 0X28, 0XEF, 0X13, 0X28, 0XDF, 0XF5, 0X3E, 0XF7, 0X8E,\n+\t0X09, 0X9C, 0X78, 0X18, 0X79, 0XB8, 0X68, 0XD7, 0XA8, 0X29, 0X62, 0XAD, 0XDE, 0XE1, 0X61, 0X76,\n+\t0X1B, 0X05, 0X16, 0XCD, 0XBF, 0X02, 0X8E, 0XA6, 0X43, 0X6E, 0X92, 0X55, 0X4F, 0X60, 0X9C, 0X03,\n+\t0XB8, 0X4F, 0XA3, 0X02, 0XAC, 0XA8, 0XA7, 0X0C, 0X1E, 0XB5, 0X6B, 0XF8, 0XC8, 0X4D, 0XDE, 0XD2,\n+\t0XB0, 0X29, 0X6E, 0X40, 0XE6, 0XD6, 0XC9, 0XE6, 0XB9, 0X0F, 0XB6, 0X63, 0XF5, 0XAA, 0X2B, 0X96,\n+\t0XA7, 0X16, 0XAC, 0X4E, 0X0A, 0X33, 0X1C, 0XA6, 0XE6, 0XBD, 0X8A, 0XCF, 0X40, 0XA9, 0XB2, 0XFA,\n+\t0X63, 0X27, 0XFD, 0X9B, 0XD9, 0XFC, 0XD5, 0X87, 0X8D, 0X4C, 0XB6, 0XA4, 0XCB, 0XE7, 0X74, 0X55,\n+\t0XF4, 0XFB, 0X41, 0X25, 0XB5, 0X4B, 0X0A, 0X1B, 0XB1, 0XD6, 0XB7, 0XD9, 0X47, 0X2A, 0XC3, 0X98,\n+\t0X6A, 0XC4, 0X03, 0X73, 0X1F, 0X93, 0X6E, 0X53, 0X19, 0X25, 0X64, 0X15, 0X83, 0XF9, 0X73, 0X2A,\n+\t0X74, 0XB4, 0X93, 0X69, 0XC4, 0X72, 0XFC, 0X26, 0XA2, 0X9F, 0X43, 0X45, 0XDD, 0XB9, 0XEF, 0X36,\n+\t0XC8, 0X3A, 0XCD, 0X99, 0X9B, 0X54, 0X1A, 0X36, 0XC1, 0X59, 0XF8, 0X98, 0XA8, 0XCC, 0X28, 0X0D,\n+\t0X73, 0X4C, 0XEE, 0X98, 0XCB, 0X7C, 0X58, 0X7E, 0X20, 0X75, 0X1E, 0XB7, 0XC9, 0XF8, 0XF2, 0X0E,\n+\t0X63, 0X9E, 0X05, 0X78, 0X1A, 0XB6, 0XA8, 0X7A, 0XF9, 0X98, 0X6A, 0XA6, 0X46, 0X84, 0X2E, 0XF6,\n+\t0X4B, 0XDC, 0X9B, 0X8F, 0X9B, 0X8F, 0XEE, 0XB4, 0XAA, 0X3F, 0XEE, 0XC0, 0X37, 0X27, 0X76, 0XC7,\n+\t0X95, 0XBB, 0X26, 0X74, 0X69, 0X12, 0X7F, 0XF1, 0XBB, 0XFF, 0XAE, 0XB5, 0X99, 0X6E, 0XCB, 0X0C\n+};\n+\n+static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {\n+\t0x9a, 0X4f, 0X88, 0X1b, 0Xb6, 0X8f, 0Xd8, 0X60,\n+\t0X42, 0X1a, 0X7d, 0X3d, 0Xf5, 0X82, 0X80, 0Xf1,\n+\t0X18, 0X8c, 0X1d, 0X32 };\n+\n+\n+static int\n+test_AES_CBC_HMAC_SHA1_encrypt_digest(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and space for digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA1);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = &ut_params->auth_xform;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_ENCRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = NULL;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_GENERATE;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_SHA1_HMAC;\n+\tut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;\n+\tut_params->auth_xform.auth.key.data = hmac_sha1_key;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->cipher_xform);\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, ut_params->sess);\n+\n+\tut_params->op->digest.data = ut_params->digest;\n+\tut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(ut_params->ibuf,\n+\t\t\tQUOTE_512_BYTES);\n+\tut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA1;\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Ciphertext data not as expected\");\n+\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,\n+\t\t\tgbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?\n+\t\t\t\t\tTRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :\n+\t\t\t\t\tDIGEST_BYTE_LENGTH_SHA1,\n+\t\t\t\"Generated digest data not as expected\");\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+\n+static int\n+test_AES_CBC_HMAC_SHA1_encrypt_digest_sessionless(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and space for digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA1);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc_sessionless(ts_params->crypto_op_pool, 2);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\tut_params->op->xform->type = RTE_CRYPTO_XFORM_CIPHER;\n+\n+\t/* cipher parameters */\n+\tut_params->op->xform->cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_ENCRYPT;\n+\tut_params->op->xform->cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->op->xform->cipher.key.data = aes_cbc_key;\n+\tut_params->op->xform->cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* hash parameters */\n+\tut_params->op->xform->next->type = RTE_CRYPTO_XFORM_AUTH;\n+\n+\tut_params->op->xform->next->auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_GENERATE;\n+\tut_params->op->xform->next->auth.algo = RTE_CRYPTO_SYM_HASH_SHA1_HMAC;\n+\tut_params->op->xform->next->auth.key.length = HMAC_KEY_LENGTH_SHA1;\n+\tut_params->op->xform->next->auth.key.data = hmac_sha1_key;\n+\tut_params->op->xform->next->auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;\n+\n+\tut_params->op->digest.data = ut_params->digest;\n+\tut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(ut_params->ibuf,\n+\t\t\tQUOTE_512_BYTES);\n+\tut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA1;\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Ciphertext data not as expected\");\n+\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,\n+\t\t\tgbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?\n+\t\t\t\t\tTRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :\n+\t\t\t\t\tDIGEST_BYTE_LENGTH_SHA1,\n+\t\t\t\"Generated digest data not as expected\");\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_AES_CBC_HMAC_SHA1_decrypt_digest_verify(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool,\n+\t\t\t(const char *)catch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA1);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest,\t\"no room to append digest\");\n+\n+\trte_memcpy(ut_params->digest,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA1);\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = NULL;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_DECRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = &ut_params->cipher_xform;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_VERIFY;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_SHA1_HMAC;\n+\tut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;\n+\tut_params->auth_xform.auth.key.data = hmac_sha1_key;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->auth_xform);\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, ut_params->sess);\n+\n+\tut_params->op->digest.data = ut_params->digest;\n+\tut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(\n+\t\t\tut_params->ibuf, QUOTE_512_BYTES);\n+\tut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA1;\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC,\n+\t\t\tcatch_22_quote,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Ciphertext data not as expected\");\n+\n+\tut_params->op = ut_params->obuf->crypto_op;\n+\tTEST_ASSERT(!(ut_params->obuf->ol_flags & PKT_RX_CRYPTO_DIGEST_BAD),\n+\t\t\t\"Digest verification failed\");\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+\n+/* ***** AES-CBC / HMAC-SHA256 Hash Tests ***** */\n+\n+#define HMAC_KEY_LENGTH_SHA256\t(DIGEST_BYTE_LENGTH_SHA256)\n+\n+static uint8_t hmac_sha256_key[] = {\n+\t0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,\n+\t0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,\n+\t0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,\n+\t0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60 };\n+\n+static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA256_digest[] = {\n+\t0xc8, 0x57, 0x57, 0x31, 0x03, 0xe0, 0x03, 0x55,\n+\t0x07, 0xc8, 0x9e, 0x7f, 0x48, 0x9a, 0x61, 0x9a,\n+\t0x68, 0xee, 0x03, 0x0e, 0x71, 0x75, 0xc7, 0xf4,\n+\t0x2e, 0x45, 0x26, 0x32, 0x7c, 0x12, 0x15, 0x15 };\n+\n+static int\n+test_AES_CBC_HMAC_SHA256_encrypt_digest(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and space for digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA256);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = &ut_params->auth_xform;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_ENCRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = NULL;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_GENERATE;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_SHA256_HMAC;\n+\tut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;\n+\tut_params->auth_xform.auth.key.data = hmac_sha256_key;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->cipher_xform);\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, ut_params->sess);\n+\n+\tut_params->op->digest.data = ut_params->digest;\n+\tut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(\n+\t\t\tut_params->ibuf, QUOTE_512_BYTES);\n+\tut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA256;\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Ciphertext data not as expected\");\n+\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA256_digest,\n+\t\t\tgbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?\n+\t\t\t\t\tTRUNCATED_DIGEST_BYTE_LENGTH_SHA256 :\n+\t\t\t\t\tDIGEST_BYTE_LENGTH_SHA256,\n+\t\t\t\"Generated digest data not as expected\");\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_AES_CBC_HMAC_SHA256_decrypt_digest_verify(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool,\n+\t\t\t(const char *)catch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA256);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest,\t\"no room to append digest\");\n+\n+\trte_memcpy(ut_params->digest,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA256_digest,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA256);\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = NULL;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_DECRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = &ut_params->cipher_xform;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_VERIFY;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_SHA256_HMAC;\n+\tut_params->auth_xform.auth.key.data = hmac_sha256_key;\n+\tut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->auth_xform);\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, ut_params->sess);\n+\n+\tut_params->op->digest.data = ut_params->digest;\n+\tut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(\n+\t\t\tut_params->ibuf, QUOTE_512_BYTES);\n+\tut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA256;\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\t\t\t\t\tCIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Plaintext data not as expected\");\n+\n+\t/* Validate obuf */\n+\tut_params->op = ut_params->obuf->crypto_op;\n+\n+\tTEST_ASSERT(!(ut_params->obuf->ol_flags & PKT_RX_CRYPTO_DIGEST_BAD),\n+\t\t\t\"Digest verification failed\");\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+/* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */\n+\n+#define HMAC_KEY_LENGTH_SHA512  (DIGEST_BYTE_LENGTH_SHA512)\n+\n+static uint8_t hmac_sha512_key[] = {\n+\t0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,\n+\t0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,\n+\t0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,\n+\t0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,\n+\t0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,\n+\t0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,\n+\t0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,\n+\t0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };\n+\n+static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {\n+\t0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,\n+\t0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,\n+\t0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,\n+\t0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,\n+\t0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,\n+\t0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,\n+\t0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,\n+\t0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };\n+\n+static int\n+test_AES_CBC_HMAC_SHA512_encrypt_digest(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and space for digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA512);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = &ut_params->auth_xform;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_ENCRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = NULL;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_GENERATE;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_SHA512_HMAC;\n+\tut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;\n+\tut_params->auth_xform.auth.key.data = hmac_sha512_key;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->cipher_xform);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, ut_params->sess);\n+\n+\tut_params->op->digest.data = ut_params->digest;\n+\tut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(\n+\t\t\tut_params->ibuf, QUOTE_512_BYTES);\n+\tut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA512;\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Ciphertext data not as expected\");\n+\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,\n+\t\t\tgbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?\n+\t\t\t\t\tTRUNCATED_DIGEST_BYTE_LENGTH_SHA512 :\n+\t\t\t\t\tDIGEST_BYTE_LENGTH_SHA512,\n+\t\t\t\"Generated digest data not as expected\");\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+\n+static int\n+test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(\n+\t\tstruct crypto_unittest_params *ut_params);\n+\n+static int\n+test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_session *sess,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tstruct crypto_testsuite_params *ts_params);\n+\n+static int\n+test_AES_CBC_HMAC_SHA512_decrypt_digest_verify(void)\n+{\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\n+\tTEST_ASSERT(test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params)\n+\t\t\t== TEST_SUCCESS, \"Failed to create session params\");\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->auth_xform);\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\treturn test_AES_CBC_HMAC_SHA512_decrypt_perform(ut_params->sess,\n+\t\t\tut_params, ts_params);\n+}\n+\n+static int\n+test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(struct crypto_unittest_params *ut_params)\n+{\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = NULL;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_DECRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = &ut_params->cipher_xform;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_VERIFY;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_SHA512_HMAC;\n+\tut_params->auth_xform.auth.key.data = hmac_sha512_key;\n+\tut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;\n+\treturn TEST_SUCCESS;\n+}\n+\n+\n+static int\n+test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_session *sess,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tstruct crypto_testsuite_params *ts_params)\n+{\n+\t/* Generate test mbuf data and digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool,\n+\t\t\t(const char *)catch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA512);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\trte_memcpy(ut_params->digest,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA512);\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, sess);\n+\n+\tut_params->op->digest.data = ut_params->digest;\n+\tut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(ut_params->ibuf, QUOTE_512_BYTES);\n+\tut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA512;\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf, CIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys_offset(ut_params->ibuf, 0);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0], ut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Plaintext data not as expected\");\n+\n+\t/* Validate obuf */\n+\tut_params->op = ut_params->obuf->crypto_op;\n+\n+\tTEST_ASSERT(!(ut_params->obuf->ol_flags & PKT_RX_CRYPTO_DIGEST_BAD),\n+\t\t\t\"Digest verification failed\");\n+\n+\t/*\n+\t * Free crypto operation structure and buffers.\n+\t */\n+\tif (ut_params->op)\n+\t{\n+\t\trte_crypto_op_free(ut_params->op);\n+\t\tut_params->op = NULL;\n+\t}\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+/* ***** AES-CBC / HMAC-AES_XCBC Chain Tests ***** */\n+\n+static uint8_t aes_cbc_hmac_aes_xcbc_key[] = {\n+\t0x87, 0x61, 0x54, 0x53, 0xC4, 0x6D, 0xDD, 0x51,\n+\t0xE1, 0x9F, 0x86, 0x64, 0x39, 0x0A, 0xE6, 0x59\n+\t};\n+\n+static const uint8_t  catch_22_quote_2_512_bytes_HMAC_AES_XCBC_digest[] = {\n+\t0xE0, 0xAC, 0x9A, 0xC4, 0x22, 0x64, 0x35, 0x89,\n+\t0x77, 0x1D, 0x8B, 0x75\n+\t};\n+\n+static int\n+test_AES_CBC_HMAC_AES_XCBC_encrypt_digest(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and space for digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_AES_XCBC);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = &ut_params->auth_xform;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_ENCRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = NULL;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_GENERATE;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_AES_XCBC_MAC;\n+\tut_params->auth_xform.auth.key.length = AES_XCBC_MAC_KEY_SZ;\n+\tut_params->auth_xform.auth.key.data = aes_cbc_hmac_aes_xcbc_key;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_AES_XCBC;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->cipher_xform);\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, ut_params->sess);\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+                        CIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+                        ut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC,\n+\t\t\tcatch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Ciphertext data not as expected\");\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,\n+\t\t\tcatch_22_quote_2_512_bytes_HMAC_AES_XCBC_digest,\n+\t\t\tDIGEST_BYTE_LENGTH_AES_XCBC,\n+\t\t\t\"Generated digest data not as expected\");\n+\n+\t/*\n+\t* Free crypto operation structure and buffers.\n+\t*/\n+\tif (ut_params->op)\n+\t{\n+\t\trte_crypto_op_free(ut_params->op);\n+\t\tut_params->op = NULL;\n+\t}\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_AES_CBC_HMAC_AES_XCBC_decrypt_digest_verify(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and space for digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool,\n+\t\t(const char *)catch_22_quote_2_512_bytes_AES_CBC_ciphertext,\n+\t\tQUOTE_512_BYTES, 0);\n+\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tDIGEST_BYTE_LENGTH_AES_XCBC);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\trte_memcpy(ut_params->digest,\n+\t\t\tcatch_22_quote_2_512_bytes_HMAC_AES_XCBC_digest,\n+\t\t\tDIGEST_BYTE_LENGTH_AES_XCBC);\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = NULL;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_DECRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = &ut_params->cipher_xform;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_VERIFY;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_AES_XCBC_MAC;\n+\tut_params->auth_xform.auth.key.length = AES_XCBC_MAC_KEY_SZ;\n+\tut_params->auth_xform.auth.key.data = aes_cbc_hmac_aes_xcbc_key;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_AES_XCBC;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->auth_xform);\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, ut_params->sess);\n+\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC);\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\trte_memcpy(ut_params->op->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_CBC, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"Ciphertext data not as expected\");\n+\n+\tut_params->op = ut_params->obuf->crypto_op;\n+\tTEST_ASSERT(!(ut_params->obuf->ol_flags & PKT_RX_CRYPTO_DIGEST_BAD),\n+\t\t\t\"Digest verification failed\");\n+\n+\t/*\n+\t* Free crypto operation structure and buffers.\n+\t*/\n+\tif (ut_params->op)\n+\t{\n+\t\trte_crypto_op_free(ut_params->op);\n+\t\tut_params->op = NULL;\n+\t}\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+\n+/* ***** AES-GCM Tests ***** */\n+\n+#define CIPHER_KEY_LENGTH_AES_GCM\t16 \n+#define AAD_LENGTH_AES_GCM\t\t20\n+#define AAD_LENGTH_AES_GCM_ROUNDUP\t32 // Roundup to multiple of GCM block size(16)\n+#define CIPHER_IV_LENGTH_AES_GCM\t16\n+#define AUTH_TAG_LENGTH_AES_GCM\t\t16\n+\n+static uint8_t gcm_cipher_key[] = {\n+\t0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,\n+\t0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08\n+};\n+\n+static uint8_t gcm_cipher_text[] = {\n+\t0xCC, 0xDA, 0x4D, 0x93, 0xF9, 0x92, 0x52, 0xAD, 0x81, 0x5E, 0x5B, 0x0B, 0x0B, 0x40, 0x93, 0x74,\n+\t0x11, 0x65, 0xA9, 0x5C, 0x71, 0x53, 0x73, 0x4D, 0x74, 0xE3, 0x2A, 0x7B, 0xD1, 0xF8, 0x4F, 0x7C,\n+\t0x55, 0x86, 0x6F, 0x07, 0xAC, 0x6F, 0xF4, 0x36, 0x72, 0x30, 0x01, 0x11, 0x95, 0x4E, 0x7A, 0x00,\n+\t0xDD, 0xAC, 0x94, 0xA9, 0xE0, 0x63, 0x2F, 0xB3, 0xF3, 0x52, 0xEF, 0xDD, 0x29, 0xF5, 0xAB, 0xA4,\n+\t0xB5, 0xC9, 0x13, 0xE4, 0xBD, 0x93, 0xDC, 0x94, 0x98, 0xC7, 0x96, 0x2E, 0xA2, 0x54, 0xAB, 0x04,\n+\t0x60, 0xBD, 0x9A, 0xD1, 0xAA, 0xA7, 0x07, 0x57, 0x4A, 0xA4, 0x78, 0x73, 0xB4, 0x1D, 0xC4, 0x11,\n+\t0x82, 0x71, 0x2F, 0xCF, 0xC0, 0x5D, 0x2F, 0x87, 0x23, 0x2C, 0x64, 0xAB, 0x6A, 0x59, 0x05, 0x03,\n+\t0xB8, 0x91, 0xD4, 0xDD, 0x0F, 0x11, 0xA3, 0x1D, 0xE5, 0xE4, 0xD3, 0x16, 0x6E, 0x75, 0xFA, 0x3D,\n+\t0x8D, 0xF6, 0x8A, 0xD4, 0x9A, 0x5E, 0x84, 0x6C, 0x4B, 0x18, 0x58, 0xDF, 0x2F, 0x05, 0x56, 0xEC,\n+\t0xE0, 0xDE, 0xB3, 0xF1, 0x02, 0x28, 0xE9, 0x54, 0xEB, 0xF3, 0x90, 0xA1, 0x48, 0x5B, 0xC7, 0x45,\n+\t0x16, 0x1E, 0x66, 0x61, 0xC8, 0xDB, 0x81, 0x91, 0x65, 0x35, 0xEB, 0xEF, 0x5F, 0x22, 0x47, 0xD1,\n+\t0xE5, 0x9C, 0x0C, 0xA8, 0xD3, 0xAC, 0x44, 0x09, 0x00, 0x83, 0xDD, 0xE9, 0xFF, 0x9B, 0x7B, 0x00,\n+\t0xC5, 0xDD, 0x60, 0xDE, 0xF2, 0xFE, 0xDE, 0x8E, 0xC2, 0xA5, 0xAA, 0xD8, 0x8F, 0x3D, 0xC6, 0xDB,\n+\t0x42, 0xF6, 0xCC, 0x46, 0x14, 0x53, 0xC4, 0x72, 0x39, 0x87, 0xC5, 0x5A, 0xF5, 0xF5, 0xC9, 0x53,\n+\t0xD5, 0xF9, 0x52, 0xD1, 0xE8, 0x74, 0xAF, 0xD5, 0x92, 0xE5, 0x51, 0x13, 0x2A, 0x31, 0x0A, 0xF2,\n+\t0xD3, 0xF1, 0x54, 0xBD, 0xF8, 0x09, 0x93, 0x74, 0xE8, 0xB1, 0x58, 0x45, 0x7D, 0x05, 0xC9, 0x0D,\n+\t0x4F, 0x18, 0x21, 0xEF, 0x91, 0xF4, 0xCC, 0xC1, 0x2D, 0xEC, 0x7F, 0xAC, 0x70, 0xF6, 0x4B, 0x8F,\n+\t0xE4, 0x10, 0x1F, 0x3F, 0x4C, 0x6A, 0xFE, 0x69, 0x5C, 0x85, 0xDC, 0x9F, 0x1D, 0x97, 0x9C, 0xA5,\n+\t0xEB, 0x61, 0xBB, 0x4B, 0xA7, 0x60, 0xE4, 0x61, 0x43, 0x52, 0xB3, 0x30, 0xAB, 0x19, 0xB2, 0x82,\n+\t0xE7, 0x79, 0x53, 0xD2, 0x8E, 0xA5, 0x5E, 0x56, 0xB1, 0xC7, 0x10, 0xD3, 0x8C, 0xD2, 0x77, 0xDD,\n+\t0xAD, 0x58, 0x32, 0xA5, 0x22, 0x83, 0x3B, 0x13, 0x03, 0x26, 0x26, 0xBE, 0x3D, 0xA0, 0xB1, 0xB3,\n+\t0xA8, 0xD3, 0x5C, 0xCC, 0x52, 0x9A, 0xCA, 0x5D, 0x02, 0xE1, 0x80, 0x5C, 0xD1, 0xB4, 0x29, 0xD3,\n+\t0xA9, 0xE3, 0x2E, 0xC4, 0x3D, 0xD6, 0x39, 0xAB, 0xED, 0xEA, 0x2D, 0xEA, 0x2C, 0xE4, 0x7B, 0xED,\n+\t0xB9, 0x95, 0x67, 0xCF, 0x81, 0xDC, 0x38, 0x8E, 0x13, 0xB5, 0xD5, 0x94, 0x4D, 0x31, 0x97, 0x0C,\n+\t0x0F, 0x1B, 0x31, 0x88, 0x56, 0x77, 0x70, 0x68, 0x75, 0x42, 0x92, 0x32, 0x9C, 0x07, 0xBC, 0x3E,\n+\t0x73, 0xAB, 0xC9, 0x29, 0xC9, 0xF1, 0x8A, 0x98, 0x88, 0x99, 0x54, 0x44, 0xCA, 0xFC, 0x96, 0xF8,\n+\t0xD9, 0xB8, 0x0B, 0x74, 0xC5, 0xBF, 0x75, 0x3E, 0x35, 0x09, 0x4B, 0x16, 0xDA, 0x20, 0x8D, 0x1F,\n+\t0x2F, 0xFF, 0xBF, 0x7F, 0xAB, 0xBA, 0x4C, 0x95, 0x48, 0x8B, 0x94, 0xBA, 0x09, 0x1E, 0x84, 0x1C,\n+\t0x2D, 0x7F, 0x2F, 0x2A, 0x15, 0x1C, 0x63, 0xBF, 0x57, 0xED, 0x0B, 0x76, 0xDA, 0xDE, 0x60, 0x4C,\n+\t0x62, 0x49, 0x5D, 0xDE, 0x31, 0xCA, 0x87, 0xA7, 0xF7, 0x8B, 0x13, 0xE6, 0xB3, 0x5B, 0x8B, 0xC2,\n+\t0xE2, 0x54, 0x05, 0x12, 0x92, 0x03, 0xD2, 0xAF, 0x3E, 0xB5, 0xE3, 0x9E, 0x26, 0x27, 0x8F, 0x35,\n+\t0x62, 0xDC, 0xDC, 0xE2, 0x69, 0x61, 0x01, 0x0B, 0x30, 0x76, 0x50, 0x71, 0x90, 0x79, 0x8A, 0x46\n+};\n+\n+static uint8_t gcm_aad[] = {\n+\t0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,\n+\t0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,\n+\t0xab, 0xad, 0xda, 0xcc\n+};\n+\n+static uint8_t gcm_iv[] = {\n+\t0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,\n+\t0xde, 0xca, 0xf8, 0x88 \n+};\n+\n+static uint8_t gcm_auth_tag[] = {\n+\t0xDB, 0x54, 0xA0, 0x7E, 0x65, 0xF2, 0xEF, 0x84,\n+\t0xF9, 0x16, 0xC0, 0xF9, 0xDE, 0x7F, 0xDE, 0xFE\n+};\n+\n+static int test_AES_GCM(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Generate test mbuf data and space for digest */\n+\tut_params->ibuf = setup_test_string(ts_params->mbuf_pool, catch_22_quote,\n+\t\t\tQUOTE_512_BYTES, 0);\n+\tut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\tAUTH_TAG_LENGTH_AES_GCM);\n+\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = &ut_params->auth_xform;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_GCM;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_ENCRYPT;\n+\tut_params->cipher_xform.cipher.key.data = gcm_cipher_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_GCM;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = NULL;\n+\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_AES_GCM;\n+\tut_params->auth_xform.auth.digest_length = AUTH_TAG_LENGTH_AES_GCM;\n+\tut_params->auth_xform.auth.add_auth_data_length = AAD_LENGTH_AES_GCM;\n+\tut_params->auth_xform.auth.key.length = 0;\n+\tut_params->auth_xform.auth.key.data = NULL;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->cipher_xform);\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->crypto_op_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"Failed to allocate crypto_op\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_session(ut_params->op, ut_params->sess);\n+\n+\t/* iv */\n+\tut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\tCIPHER_IV_LENGTH_AES_GCM);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op->iv.data, \"no room to prepend iv\");\n+\tut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tut_params->op->iv.length = CIPHER_IV_LENGTH_AES_GCM;\n+\n+\t/* aad */\n+\tut_params->op->additional_auth.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,\n+\t\t\t\t\tAAD_LENGTH_AES_GCM_ROUNDUP );\n+\tTEST_ASSERT_NOT_NULL(ut_params->op->additional_auth.data, \"no room to prepend aad\");\n+\tut_params->op->additional_auth.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\trte_memcpy(ut_params->op->additional_auth.data, gcm_aad, AAD_LENGTH_AES_GCM);\n+\n+\n+\t/* CalcY0  TODO: Add for ivLen = 16 */\n+\tif (sizeof(gcm_iv) == 12) {\n+\t\tmemset(ut_params->op->iv.data, 0, CIPHER_IV_LENGTH_AES_GCM);\n+\trte_memcpy(ut_params->op->iv.data, gcm_iv, sizeof(gcm_iv));\n+\t\tut_params->op->iv.data[15] = 1;\n+\t}\n+\n+\tut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_GCM + AAD_LENGTH_AES_GCM_ROUNDUP;\n+\tut_params->op->data.to_cipher.length = QUOTE_512_BYTES;\n+\tut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_GCM + AAD_LENGTH_AES_GCM_ROUNDUP;\n+\tut_params->op->data.to_hash.length = QUOTE_512_BYTES;\n+\trte_pktmbuf_attach_crypto_op(ut_params->ibuf, ut_params->op);\n+\n+\t/* Process crypto operation */\n+\tut_params->obuf = process_crypto_request(ts_params->valid_devs[0],\n+\t\tut_params->ibuf);\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\t/* Validate obuf */\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_GCM + AAD_LENGTH_AES_GCM_ROUNDUP,\n+\t\t\tgcm_cipher_text,\n+\t\t\tQUOTE_512_BYTES,\n+\t\t\t\"GCM Ciphertext data not as expected\");\n+\n+\tTEST_ASSERT_BUFFERS_ARE_EQUAL(\n+\t\t\trte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +\n+\t\t\tCIPHER_IV_LENGTH_AES_GCM + AAD_LENGTH_AES_GCM_ROUNDUP + QUOTE_512_BYTES,\n+\t\t\tgcm_auth_tag,\n+\t\t\tAUTH_TAG_LENGTH_AES_GCM,\n+\t\t\t\"GCM Generated auth tag not as expected\");\n+\n+\t/*\n+\t* Free crypto operation structure and buffers.\n+\t*/\n+\tif (ut_params->op)\n+\t{\n+\t\trte_crypto_op_free(ut_params->op);\n+\t\tut_params->op = NULL;\n+\t}\n+\n+\tfree_testsuite_mbufs();\n+\treturn TEST_SUCCESS;\n+}\n+\n+\n+static int\n+test_stats(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct rte_cryptodev_stats stats;\n+\tstruct rte_cryptodev *dev;\n+\tcryptodev_stats_get_t temp_pfn;\n+\n+\trte_cryptodev_stats_reset(ts_params->valid_devs[0]);\n+\tTEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600, &stats) == -ENODEV),\n+\t\t\"rte_cryptodev_stats_get invalid dev failed\");\n+\tTEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),\n+\t\t\"rte_cryptodev_stats_get invalid Param failed\");\n+\tdev = &rte_crypto_devices[ts_params->valid_devs[0]];\n+\ttemp_pfn = dev->dev_ops->stats_get;\n+\tdev->dev_ops->stats_get = (cryptodev_stats_get_t)0;\n+\tTEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats) == -ENOTSUP),\n+\t\t\"rte_cryptodev_stats_get invalid Param failed\");\n+\tdev->dev_ops->stats_get = temp_pfn;\n+\n+\t/* Test expected values */\n+\tut_setup();\n+\ttest_AES_CBC_HMAC_SHA1_encrypt_digest();\n+\tut_teardown();\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats),\n+\t\t\"rte_cryptodev_stats_get failed\");\n+\tTEST_ASSERT((stats.enqueued_count == 1),\n+\t\t\"rte_cryptodev_stats_get returned unexpected enqueued stat\");\n+\tTEST_ASSERT((stats.dequeued_count == 1),\n+\t\t\"rte_cryptodev_stats_get returned unexpected enqueued stat\");\n+\tTEST_ASSERT((stats.enqueue_err_count == 0),\n+\t\t\"rte_cryptodev_stats_get returned unexpected enqueued stat\");\n+\tTEST_ASSERT((stats.dequeue_err_count == 0),\n+\t\t\"rte_cryptodev_stats_get returned unexpected enqueued stat\");\n+\n+\t/* invalid device but should ignore and not reset device stats*/\n+\trte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats),\n+\t\t\"rte_cryptodev_stats_get failed\");\n+\tTEST_ASSERT((stats.enqueued_count == 1),\n+\t\t\"rte_cryptodev_stats_get returned unexpected enqueued stat\");\n+\n+\t/* check that a valid reset clears stats */\n+\trte_cryptodev_stats_reset(ts_params->valid_devs[0]);\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats),\n+\t\t\t\t\t  \"rte_cryptodev_stats_get failed\");\n+\tTEST_ASSERT((stats.enqueued_count == 0),\n+\t\t\"rte_cryptodev_stats_get returned unexpected enqueued stat\");\n+\tTEST_ASSERT((stats.dequeued_count == 0),\n+\t\t\"rte_cryptodev_stats_get returned unexpected enqueued stat\");\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+\n+static int\n+test_multi_session(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\tunsigned nb_sessions = gbl_cryptodev_type == RTE_CRYPTODEV_QAT_PMD ?\n+\t\t\tRTE_LIBRTE_PMD_QAT_MAX_SESSIONS :\n+\t\t\tRTE_LIBRTE_PMD_AESNI_MB_MAX_SESSIONS;\n+\tstruct rte_cryptodev_session *sessions[nb_sessions + 1];\n+\tuint16_t i;\n+\n+\ttest_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params);\n+\n+\t/* Create multiple crypto sessions*/\n+\tfor (i = 0; i < nb_sessions; i++) {\n+\t\tsessions[i] = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->auth_xform);\n+\t\tTEST_ASSERT_NOT_NULL(sessions[i], \"Session creation failed at session number %u\", i);\n+\n+\t\t/* Attempt to send a request on each session */\n+\t\tTEST_ASSERT_SUCCESS(test_AES_CBC_HMAC_SHA512_decrypt_perform(\n+\t\t\t\tsessions[i], ut_params, ts_params),\n+\t\t\t\t\"Failed to perform decrypt on request number %u.\", i);\n+\t}\n+\n+\t/* Next session create should fail */\n+\tsessions[i] = rte_cryptodev_session_create(ts_params->valid_devs[0],\n+\t\t\t&ut_params->auth_xform);\n+\tTEST_ASSERT_NULL(sessions[i], \"Session creation succeeded unexpectedly!\");\n+\n+\tfor (i = 0; i < nb_sessions; i++)\n+\t\trte_cryptodev_session_free(ts_params->valid_devs[0], sessions[i]);\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static struct unit_test_suite cryptodev_testsuite  = {\n+\t.suite_name = \"Crypto Device Unit Test Suite\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_device_configure_invalid_dev_id),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_device_configure_invalid_queue_pair_ids),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_queue_pair_descriptor_setup),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA1_encrypt_digest),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA1_decrypt_digest_verify),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA256_encrypt_digest),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA256_decrypt_digest_verify),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA512_encrypt_digest),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA512_decrypt_digest_verify),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_AES_XCBC_encrypt_digest),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_AES_XCBC_decrypt_digest_verify),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_GCM),\n+\n+\t\tTEST_CASE(test_stats),\n+\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\n+};\n+\n+static struct unit_test_suite cryptodev_aesni_testsuite  = {\n+\t.suite_name = \"Crypto Device AESNI Unit Test Suite\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA1_encrypt_digest),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA1_decrypt_digest_verify),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA256_encrypt_digest),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA256_decrypt_digest_verify),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA512_encrypt_digest),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA512_decrypt_digest_verify),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_AES_XCBC_encrypt_digest),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_AES_XCBC_decrypt_digest_verify),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_CBC_HMAC_SHA1_encrypt_digest_sessionless),\n+\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\n+};\n+\n+\n+static int\n+test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)\n+{\n+\tgbl_cryptodev_type = RTE_CRYPTODEV_QAT_PMD;\n+\treturn unit_test_suite_runner(&cryptodev_testsuite);\n+}\n+static struct test_command cryptodev_qat_cmd = {\n+\t.command = \"cryptodev_qat_autotest\",\n+\t.callback = test_cryptodev_qat,\n+};\n+\n+static int\n+test_cryptodev_aesni(void /*argv __rte_unused, int argc __rte_unused*/)\n+{\n+\tgbl_cryptodev_type = RTE_CRYPTODEV_AESNI_MB_PMD;\n+\n+\treturn unit_test_suite_runner(&cryptodev_aesni_testsuite);\n+}\n+\n+static struct test_command cryptodev_aesni_cmd = {\n+\t.command = \"cryptodev_aesni_autotest\",\n+\t.callback = test_cryptodev_aesni,\n+};\n+\n+REGISTER_TEST_COMMAND(cryptodev_qat_cmd);\n+REGISTER_TEST_COMMAND(cryptodev_aesni_cmd);\ndiff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h\nnew file mode 100644\nindex 0000000..034393e\n--- /dev/null\n+++ b/app/test/test_cryptodev.h\n@@ -0,0 +1,68 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2015 Intel Corporation. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *\t * Redistributions of source code must retain the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer.\n+ *\t * Redistributions in binary form must reproduce the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer in\n+ *\t   the documentation and/or other materials provided with the\n+ *\t   distribution.\n+ *\t * Neither the name of Intel Corporation nor the names of its\n+ *\t   contributors may be used to endorse or promote products derived\n+ *\t   from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+#ifndef TEST_CRYPTODEV_H_\n+#define TEST_CRYPTODEV_H_\n+\n+#define HEX_DUMP 0\n+\n+#define FALSE                           0\n+#define TRUE                            1\n+\n+#define MAX_NUM_OPS_INFLIGHT            (4096)\n+#define MIN_NUM_OPS_INFLIGHT            (128)\n+#define DEFAULT_NUM_OPS_INFLIGHT        (128)\n+\n+#define MAX_NUM_QPS_PER_QAT_DEVICE      (2)\n+#define DEFAULT_NUM_QPS_PER_QAT_DEVICE  (2)\n+#define DEFAULT_BURST_SIZE              (64)\n+#define DEFAULT_NUM_XFORMS              (2)\n+#define NUM_MBUFS                       (8191)\n+#define MBUF_CACHE_SIZE                 (250)\n+#define MBUF_SIZE   (2048 + DIGEST_BYTE_LENGTH_SHA512 + \\\n+\t\t\t\tsizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)\n+\n+#define BYTE_LENGTH(x)\t\t\t\t(x/8)\n+/* HASH DIGEST LENGTHS */\n+#define DIGEST_BYTE_LENGTH_MD5\t\t\t(BYTE_LENGTH(128))\n+#define DIGEST_BYTE_LENGTH_SHA1\t\t\t(BYTE_LENGTH(160))\n+#define DIGEST_BYTE_LENGTH_SHA224\t\t(BYTE_LENGTH(224))\n+#define DIGEST_BYTE_LENGTH_SHA256\t\t(BYTE_LENGTH(256))\n+#define DIGEST_BYTE_LENGTH_SHA384\t\t(BYTE_LENGTH(384))\n+#define DIGEST_BYTE_LENGTH_SHA512\t\t(BYTE_LENGTH(512))\n+#define DIGEST_BYTE_LENGTH_AES_XCBC\t\t(BYTE_LENGTH(96))\n+#define AES_XCBC_MAC_KEY_SZ\t\t\t(16)\n+\n+#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA1\t\t(12)\n+#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA256\t\t(16)\n+#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA512\t\t(32)\n+\n+#endif /* TEST_CRYPTODEV_H_ */\ndiff --git a/app/test/test_cryptodev_perf.c b/app/test/test_cryptodev_perf.c\nnew file mode 100644\nindex 0000000..c2f8fe1\n--- /dev/null\n+++ b/app/test/test_cryptodev_perf.c\n@@ -0,0 +1,1415 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2015 Intel Corporation. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *\t * Redistributions of source code must retain the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer.\n+ *\t * Redistributions in binary form must reproduce the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer in\n+ *\t   the documentation and/or other materials provided with the\n+ *\t   distribution.\n+ *\t * Neither the name of Intel Corporation nor the names of its\n+ *\t   contributors may be used to endorse or promote products derived\n+ *\t   from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#include <rte_common.h>\n+#include <rte_mbuf.h>\n+#include <rte_malloc.h>\n+#include <rte_memcpy.h>\n+\n+#include <rte_crypto.h>\n+#include <rte_cryptodev.h>\n+#include <rte_cycles.h>\n+#include <rte_hexdump.h>\n+\n+#include \"test.h\"\n+#include \"test_cryptodev.h\"\n+\n+\n+#define PERF_NUM_OPS_INFLIGHT\t\t(128)\n+#define DEFAULT_NUM_REQS_TO_SUBMIT\t(10000000)\n+\n+struct crypto_testsuite_params {\n+\tstruct rte_mempool *mbuf_mp;\n+\tstruct rte_mempool *crypto_op_mp;\n+\n+\tuint16_t nb_queue_pairs;\n+\n+\tstruct rte_cryptodev_config conf;\n+\tstruct rte_cryptodev_qp_conf qp_conf;\n+\tuint8_t dev_id;\n+};\n+\n+\n+#define MAX_NUM_OF_OPS_PER_UT\t(128)\n+\n+struct crypto_unittest_params {\n+\tstruct rte_crypto_xform cipher_xform;\n+\tstruct rte_crypto_xform auth_xform;\n+\n+\tstruct rte_cryptodev_session *sess;\n+\n+\tstruct rte_crypto_op_data *op;\n+\n+\tstruct rte_mbuf *obuf[MAX_NUM_OF_OPS_PER_UT];\n+\tstruct rte_mbuf *ibuf[MAX_NUM_OF_OPS_PER_UT];\n+\n+\tuint8_t *digest;\n+};\n+\n+static struct rte_mbuf *\n+setup_test_string(struct rte_mempool *mpool,\n+\t\tconst char *string, size_t len, uint8_t blocksize)\n+{\n+\tstruct rte_mbuf *m = rte_pktmbuf_alloc(mpool);\n+\tsize_t t_len = len - (blocksize ? (len % blocksize) : 0);\n+\n+\tif (m) {\n+\t\tchar *dst = rte_pktmbuf_append(m, t_len);\n+\n+\t\tif (!dst) {\n+\t\t\trte_pktmbuf_free(m);\n+\t\t\treturn NULL;\n+\t\t}\n+\n+\t\trte_memcpy(dst, string, t_len);\n+\t}\n+\treturn m;\n+}\n+\n+static struct crypto_testsuite_params testsuite_params = { NULL };\n+static struct crypto_unittest_params unittest_params;\n+static enum rte_cryptodev_type gbl_cryptodev_preftest_devtype;\n+\n+static int\n+testsuite_setup(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct rte_cryptodev_info info;\n+\tunsigned i, nb_devs, valid_dev_id = 0;\n+\tuint16_t qp_id;\n+\n+\tts_params->mbuf_mp = rte_mempool_lookup(\"CRYPTO_PERF_MBUFPOOL\");\n+\tif (ts_params->mbuf_mp == NULL) {\n+\t\t/* Not already created so create */\n+\t\tts_params->mbuf_mp = rte_mempool_create(\"CRYPTO_PERF_MBUFPOOL\", NUM_MBUFS,\n+\t\t\tMBUF_SIZE, MBUF_CACHE_SIZE,\n+\t\t\tsizeof(struct rte_pktmbuf_pool_private),\n+\t\t\trte_pktmbuf_pool_init, NULL, rte_pktmbuf_init, NULL,\n+\t\t\trte_socket_id(), 0);\n+\t\tif (ts_params->mbuf_mp == NULL) {\n+\t\t\tRTE_LOG(ERR, USER1, \"Can't create CRYPTO_PERF_MBUFPOOL\\n\");\n+\t\t\treturn TEST_FAILED;\n+\t\t}\n+\t}\n+\n+\tts_params->crypto_op_mp = rte_crypto_op_pool_create(\"CRYPTO_OP_POOL\",\n+\t\t\tNUM_MBUFS, MBUF_CACHE_SIZE, DEFAULT_NUM_XFORMS, rte_socket_id());\n+\tif (ts_params->crypto_op_mp == NULL) {\n+\t\tRTE_LOG(ERR, USER1, \"Can't create CRYPTO_OP_POOL\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\t/* Create 2 AESNI MB devices if required */\n+\tif (gbl_cryptodev_preftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD) {\n+\t\tnb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_MB_PMD);\n+\t\tif (nb_devs < 2) {\n+\t\t\tfor (i = nb_devs; i < 2; i++) {\n+\t\t\t\tint dev_id = rte_eal_vdev_init(\n+\t\t\t\t\tCRYPTODEV_NAME_AESNI_MB_PMD, NULL);\n+\n+\t\t\t\tTEST_ASSERT(dev_id >= 0,\n+\t\t\t\t\t\"Failed to create instance %u of pmd : %s\",\n+\t\t\t\t\ti, CRYPTODEV_NAME_AESNI_MB_PMD);\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tnb_devs = rte_cryptodev_count();\n+\tif (nb_devs < 1) {\n+\t\tRTE_LOG(ERR, USER1, \"No crypto devices found?\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\t/* Search for the first valid */\n+\tfor (i = 0; i < nb_devs; i++) {\n+\t\trte_cryptodev_info_get(i, &info);\n+\t\tif (info.dev_type == gbl_cryptodev_preftest_devtype) {\n+\t\t\tts_params->dev_id = i;\n+\t\t\tvalid_dev_id = 1;\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tif (!valid_dev_id)\n+\t\treturn TEST_FAILED;\n+\n+\t/* Using Crypto Device Id 0 by default.\n+\t * Since we can't free and re-allocate queue memory always set the queues\n+\t * on this device up to max size first so enough memory is allocated for\n+\t * any later re-configures needed by other tests */\n+\n+\tts_params->conf.nb_queue_pairs = DEFAULT_NUM_QPS_PER_QAT_DEVICE;\n+\tts_params->conf.socket_id = SOCKET_ID_ANY;\n+\tts_params->conf.session_mp.nb_objs =\n+\t\t\t(gbl_cryptodev_preftest_devtype == RTE_CRYPTODEV_QAT_PMD) ?\n+\t\t\t\t\tRTE_LIBRTE_PMD_QAT_MAX_SESSIONS :\n+\t\t\t\t\tRTE_LIBRTE_PMD_AESNI_MB_MAX_SESSIONS;\n+\n+\tTEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->dev_id,\n+\t\t\t&ts_params->conf),\n+\t\t\t\"Failed to configure cryptodev %u\",\n+\t\t\tts_params->dev_id);\n+\n+\n+\tts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;\n+\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {\n+\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n+\t\t\tts_params->dev_id, qp_id,\n+\t\t\t&ts_params->qp_conf,\n+\t\t\trte_cryptodev_socket_id(ts_params->dev_id)),\n+\t\t\t\"Failed to setup queue pair %u on cryptodev %u\",\n+\t\t\tqp_id, ts_params->dev_id);\n+\t}\n+\n+\t/*Now reconfigure queues to size we actually want to use in this testsuite.*/\n+\tts_params->qp_conf.nb_descriptors = PERF_NUM_OPS_INFLIGHT;\n+\tfor (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {\n+\n+\t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n+\t\t\tts_params->dev_id, qp_id,\n+\t\t\t\t&ts_params->qp_conf,\n+\t\t\t\trte_cryptodev_socket_id(ts_params->dev_id)),\n+\t\t\t\t\"Failed to setup queue pair %u on cryptodev %u\",\n+\t\t\t\tqp_id, ts_params->dev_id);\n+\t}\n+\n+\treturn TEST_SUCCESS;\n+}\n+static void\n+testsuite_teardown(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\n+\tif (ts_params->mbuf_mp != NULL)\n+\t\tRTE_LOG(DEBUG, USER1, \"CRYPTO_PERF_MBUFPOOL count %u\\n\",\n+\t\trte_mempool_count(ts_params->mbuf_mp));\n+}\n+\n+static int\n+ut_setup(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\n+\t/* Clear unit test parameters before running test */\n+\tmemset(ut_params, 0, sizeof(*ut_params));\n+\n+\trte_cryptodev_stats_reset(ts_params->dev_id);\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static void\n+ut_teardown(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\tstruct rte_cryptodev_stats stats;\n+\n+\tunsigned i;\n+\n+\t/* free crypto session structure */\n+\tif (ut_params->sess)\n+\t\trte_cryptodev_session_free(ts_params->dev_id,\n+\t\t\t\tut_params->sess);\n+\n+\t/* free crypto operation structure */\n+\tif (ut_params->op)\n+\t\trte_crypto_op_free(ut_params->op);\n+\n+\tfor (i = 0; i < MAX_NUM_OF_OPS_PER_UT; i++) {\n+\t\tif (ut_params->obuf[i])\n+\t\t\trte_pktmbuf_free(ut_params->obuf[i]);\n+\t\telse if (ut_params->ibuf[i])\n+\t\t\trte_pktmbuf_free(ut_params->ibuf[i]);\n+\t}\n+\n+\tif (ts_params->mbuf_mp != NULL)\n+\t\tRTE_LOG(DEBUG, USER1, \"CRYPTO_PERF_MBUFPOOL count %u\\n\",\n+\t\t\trte_mempool_count(ts_params->mbuf_mp));\n+\n+\trte_cryptodev_stats_get(ts_params->dev_id, &stats);\n+\n+}\n+\n+const char plaintext_quote[] =\n+\t\t\"THE COUNT OF MONTE CRISTO by Alexandre Dumas, Pere Chapter 1. \"\n+\t\t\"Marseilles--The Arrival. On the 24th of February, 1815, the \"\n+\t\t\"look-out at Notre-Dame de la Garde signalled the three-master,\"\n+\t\t\" the Pharaon from Smyrna, Trieste, and Naples. As usual, a \"\n+\t\t\"pilot put off immediately, and rounding the Chateau d'If, got \"\n+\t\t\"on board the vessel between Cape Morgion and Rion island. \"\n+\t\t\"Immediately, and according to custom, the ramparts of Fort \"\n+\t\t\"Saint-Jean were covered with spectators; it is always an event \"\n+\t\t\"at Marseilles for a ship to come into port, especially when \"\n+\t\t\"this ship, like the Pharaon, has been built, rigged, and laden\"\n+\t\t\" at the old Phocee docks, and belongs to an owner of the city.\"\n+\t\t\" The ship drew on and had safely passed the strait, which some\"\n+\t\t\" volcanic shock has made between the Calasareigne and Jaros \"\n+\t\t\"islands; had doubled Pomegue, and approached the harbor under\"\n+\t\t\" topsails, jib, and spanker, but so slowly and sedately that\"\n+\t\t\" the idlers, with that instinct which is the forerunner of \"\n+\t\t\"evil, asked one another what misfortune could have happened \"\n+\t\t\"on board. However, those experienced in navigation saw plainly\"\n+\t\t\" that if any accident had occurred, it was not to the vessel \"\n+\t\t\"herself, for she bore down with all the evidence of being \"\n+\t\t\"skilfully handled, the anchor a-cockbill, the jib-boom guys \"\n+\t\t\"already eased off, and standing by the side of the pilot, who\"\n+\t\t\" was steering the Pharaon towards the narrow entrance of the\"\n+\t\t\" inner port, was a young man, who, with activity and vigilant\"\n+\t\t\" eye, watched every motion of the ship, and repeated each \"\n+\t\t\"direction of the pilot. The vague disquietude which prevailed \"\n+\t\t\"among the spectators had so much affected one of the crowd \"\n+\t\t\"that he did not await the arrival of the vessel in harbor, but\"\n+\t\t\" jumping into a small skiff, desired to be pulled alongside \"\n+\t\t\"the Pharaon, which he reached as she rounded into La Reserve \"\n+\t\t\"basin. When the young man on board saw this person approach, \"\n+\t\t\"he left his station by the pilot, and, hat in hand, leaned \"\n+\t\t\"over the ship's bulwarks. He was a fine, tall, slim young \"\n+\t\t\"fellow of eighteen or twenty, with black eyes, and hair as \"\n+\t\t\"dark as a raven's wing; and his whole appearance bespoke that \"\n+\t\t\"calmness and resolution peculiar to men accustomed from their \"\n+\t\t\"cradle to contend with danger. \\\"Ah, is it you, Dantes?\\\" \"\n+\t\t\"cried the man in the skiff. \\\"What's the matter? and why have \"\n+\t\t\"you such an air of sadness aboard?\\\" \\\"A great misfortune, M. \"\n+\t\t\"Morrel,\\\" replied the young man,--\\\"a great misfortune, for me\"\n+\t\t\" especially! Off Civita Vecchia we lost our brave Captain \"\n+\t\t\"Leclere.\\\" \\\"And the cargo?\\\" inquired the owner, eagerly. \"\n+\t\t\"\\\"Is all safe, M. Morrel; and I think you will be satisfied on\"\n+\t\t\" that head. But poor Captain Leclere--\\\" \\\"What happened to \"\n+\t\t\"him?\\\" asked the owner, with an air of considerable \"\n+\t\t\"resignation. \\\"What happened to the worthy captain?\\\" \\\"He \"\n+\t\t\"died.\\\" \\\"Fell into the sea?\\\" \\\"No, sir, he died of \"\n+\t\t\"brain-fever in dreadful agony.\\\" Then turning to the crew, \"\n+\t\t\"he said, \\\"Bear a hand there, to take in sail!\\\" All hands \"\n+\t\t\"obeyed, and at once the eight or ten seamen who composed the \"\n+\t\t\"crew, sprang to their respective stations at the spanker \"\n+\t\t\"brails and outhaul, topsail sheets and halyards, the jib \"\n+\t\t\"downhaul, and the topsail clewlines and buntlines. The young \"\n+\t\t\"sailor gave a look to see that his orders were promptly and \"\n+\t\t\"accurately obeyed, and then turned again to the owner. \\\"And \"\n+\t\t\"how did this misfortune occur?\\\" inquired the latter, resuming\"\n+\t\t\" the interrupted conversation. \\\"Alas, sir, in the most \"\n+\t\t\"unexpected manner. After a long talk with the harbor-master, \"\n+\t\t\"Captain Leclere left Naples greatly disturbed in mind. In \"\n+\t\t\"twenty-four hours he was attacked by a fever, and died three \"\n+\t\t\"days afterwards. We performed the usual burial service, and he\"\n+\t\t\" is at his rest, sewn up in his hammock with a thirty-six \"\n+\t\t\"pound shot at his head and his heels, off El Giglio island. \"\n+\t\t\"We bring to his widow his sword and cross of honor. It was \"\n+\t\t\"worth while, truly,\\\" added the young man with a melancholy \"\n+\t\t\"smile, \\\"to make war against the English for ten years, and \"\n+\t\t\"to die in his bed at last, like everybody else.\";\n+\n+#define QUOTE_LEN_64B\t\t(64)\n+#define QUOTE_LEN_128B\t\t(128)\n+#define QUOTE_LEN_256B\t\t(256)\n+#define QUOTE_LEN_512B\t\t(512)\n+#define QUOTE_LEN_768B\t\t(768)\n+#define QUOTE_LEN_1024B\t\t(1024)\n+#define QUOTE_LEN_1280B\t\t(1280)\n+#define QUOTE_LEN_1536B\t\t(1536)\n+#define QUOTE_LEN_1792B\t\t(1792)\n+#define QUOTE_LEN_2048B\t\t(2048)\n+\n+\n+/* ***** AES-CBC / HMAC-SHA256 Performance Tests ***** */\n+\n+#define HMAC_KEY_LENGTH_SHA256\t(DIGEST_BYTE_LENGTH_SHA256)\n+\n+#define CIPHER_KEY_LENGTH_AES_CBC\t(16)\n+#define CIPHER_IV_LENGTH_AES_CBC\t(CIPHER_KEY_LENGTH_AES_CBC)\n+\n+\n+static uint8_t aes_cbc_key[] = {\n+\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA };\n+\n+static uint8_t aes_cbc_iv[] = {\n+\t\t0xf5, 0xd3, 0x89, 0x0f, 0x47, 0x00, 0xcb, 0x52,\n+\t\t0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1 };\n+\n+static uint8_t hmac_sha256_key[] = {\n+\t\t0xff, 0xcb, 0x37, 0x30, 0x1d, 0x4a, 0xc2, 0x41,\n+\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,\n+\t\t0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60 };\n+\n+\n+/* Cipher text output */\n+\n+static const uint8_t AES_CBC_ciphertext_64B[] = {\n+\t\t0x05, 0x15, 0x77, 0x32, 0xc9, 0x66, 0x91, 0x50, 0x93, 0x9f, 0xbb, 0x4e, 0x2e, 0x5a, 0x02, 0xd0,\n+\t\t0x2d, 0x9d, 0x31, 0x5d, 0xc8, 0x9e, 0x86, 0x36, 0x54, 0x5c, 0x50, 0xe8, 0x75, 0x54, 0x74, 0x5e,\n+\t\t0xd5, 0xa2, 0x84, 0x21, 0x2d, 0xc5, 0xf8, 0x1c, 0x55, 0x1a, 0xba, 0x91, 0xce, 0xb5, 0xa3, 0x1e,\n+\t\t0x31, 0xbf, 0xe9, 0xa1, 0x97, 0x5c, 0x2b, 0xd6, 0x57, 0xa5, 0x9f, 0xab, 0xbd, 0xb0, 0x9b, 0x9c\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_128B[] = {\n+\t\t0x79, 0x92, 0x65, 0xc8, 0xfb, 0x0a, 0xc7, 0xc4, 0x9b, 0x3b, 0xbe, 0x69, 0x7f, 0x7c, 0xf4, 0x4e,\n+\t\t0xa5, 0x0d, 0xf6, 0x33, 0xc4, 0xdf, 0xf3, 0x0d, 0xdb, 0xb9, 0x68, 0x34, 0xb0, 0x0d, 0xbd, 0xb9,\n+\t\t0xa7, 0xf3, 0x86, 0x50, 0x2a, 0xbe, 0x50, 0x5d, 0xb3, 0xbe, 0x72, 0xf9, 0x02, 0xb1, 0x69, 0x0b,\n+\t\t0x8c, 0x96, 0x4c, 0x3c, 0x0c, 0x1e, 0x76, 0xe5, 0x7e, 0x75, 0xdd, 0xd0, 0xa9, 0x75, 0x00, 0x13,\n+\t\t0x6b, 0x1e, 0xc0, 0xad, 0xfc, 0x03, 0xb5, 0x99, 0xdc, 0x37, 0x35, 0xfc, 0x16, 0x34, 0xfd, 0xb4,\n+\t\t0xea, 0x1e, 0xb6, 0x51, 0xdf, 0xab, 0x87, 0xd6, 0x87, 0x41, 0xfa, 0x1c, 0xc6, 0x78, 0xa6, 0x3c,\n+\t\t0x1d, 0x76, 0xfe, 0xff, 0x65, 0xfc, 0x63, 0x1e, 0x1f, 0xe2, 0x7c, 0x9b, 0xa2, 0x72, 0xc3, 0x34,\n+\t\t0x23, 0xdf, 0x01, 0xf0, 0xfd, 0x02, 0x8b, 0x97, 0x00, 0x2b, 0x97, 0x4e, 0xab, 0x98, 0x21, 0x3c\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_256B[] = {\n+\t\t0xc7, 0x71, 0x2b, 0xed, 0x2c, 0x97, 0x59, 0xfa, 0xcf, 0x5a, 0xb9, 0x31, 0x92, 0xe0, 0xc9, 0x92,\n+\t\t0xc0, 0x2d, 0xd5, 0x9c, 0x84, 0xbf, 0x70, 0x36, 0x13, 0x48, 0xe0, 0xb1, 0xbf, 0x6c, 0xcd, 0x91,\n+\t\t0xa0, 0xc3, 0x57, 0x6c, 0x3f, 0x0e, 0x34, 0x41, 0xe7, 0x9c, 0xc0, 0xec, 0x18, 0x0c, 0x05, 0x52,\n+\t\t0x78, 0xe2, 0x3c, 0x6e, 0xdf, 0xa5, 0x49, 0xc7, 0xf2, 0x55, 0x00, 0x8f, 0x65, 0x6d, 0x4b, 0xd0,\n+\t\t0xcb, 0xd4, 0xd2, 0x0b, 0xea, 0xf4, 0xb0, 0x85, 0x61, 0x9e, 0x36, 0xc0, 0x71, 0xb7, 0x80, 0xad,\n+\t\t0x40, 0x78, 0xb4, 0x70, 0x2b, 0xe8, 0x80, 0xc5, 0x19, 0x35, 0x96, 0x55, 0x3b, 0x40, 0x03, 0xbb,\n+\t\t0x9f, 0xa6, 0xc2, 0x82, 0x92, 0x04, 0xc3, 0xa6, 0x96, 0xc4, 0x7f, 0x4c, 0x3e, 0x3c, 0x79, 0x82,\n+\t\t0x88, 0x8b, 0x3f, 0x8b, 0xc5, 0x9f, 0x44, 0xbe, 0x71, 0xe7, 0x09, 0xa2, 0x40, 0xa2, 0x23, 0x4e,\n+\t\t0x9f, 0x31, 0xab, 0x6f, 0xdf, 0x59, 0x40, 0xe1, 0x12, 0x15, 0x55, 0x4b, 0xea, 0x3f, 0xa1, 0x41,\n+\t\t0x4f, 0xaf, 0xcd, 0x27, 0x2a, 0x61, 0xa1, 0x9e, 0x82, 0x30, 0x05, 0x05, 0x55, 0xce, 0x99, 0xd3,\n+\t\t0x8f, 0x3f, 0x86, 0x79, 0xdc, 0x9f, 0x33, 0x07, 0x75, 0x26, 0xc8, 0x72, 0x81, 0x0f, 0x9b, 0xf7,\n+\t\t0xb1, 0xfb, 0xd3, 0x91, 0x36, 0x08, 0xab, 0x26, 0x70, 0x53, 0x0c, 0x99, 0xfd, 0xa9, 0x07, 0xb4,\n+\t\t0xe9, 0xce, 0xc1, 0xd6, 0xd2, 0x2c, 0x71, 0x80, 0xec, 0x59, 0x61, 0x0b, 0x24, 0xf0, 0x6d, 0x33,\n+\t\t0x73, 0x45, 0x6e, 0x80, 0x03, 0x45, 0xf2, 0x76, 0xa5, 0x8a, 0xc9, 0xcf, 0xaf, 0x4a, 0xed, 0x35,\n+\t\t0xc0, 0x97, 0x52, 0xc5, 0x00, 0xdf, 0xef, 0xc7, 0x9f, 0xf2, 0xe8, 0x15, 0x3e, 0xb3, 0x30, 0xe7,\n+\t\t0x00, 0xd0, 0x4e, 0xeb, 0x79, 0xf6, 0xf6, 0xcf, 0xf0, 0xe7, 0x61, 0xd5, 0x3d, 0x6a, 0x73, 0x9d\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_512B[] = {\n+\t\t0xb4, 0xc6, 0xc6, 0x5f, 0x7e, 0xca, 0x05, 0x70, 0x21, 0x7b, 0x92, 0x9e, 0x23, 0xe7, 0x92, 0xb8,\n+\t\t0x27, 0x3d, 0x20, 0x29, 0x57, 0xfa, 0x1f, 0x26, 0x0a, 0x04, 0x34, 0xa6, 0xf2, 0xdc, 0x44, 0xb6,\n+\t\t0x43, 0x40, 0x62, 0xde, 0x0c, 0xde, 0x1c, 0x30, 0x43, 0x85, 0x0b, 0xe8, 0x93, 0x1f, 0xa1, 0x2a,\n+\t\t0x8a, 0x27, 0x35, 0x39, 0x14, 0x9f, 0x37, 0x64, 0x59, 0xb5, 0x0e, 0x96, 0x82, 0x5d, 0x63, 0x45,\n+\t\t0xd6, 0x93, 0x89, 0x46, 0xe4, 0x71, 0x31, 0xeb, 0x0e, 0xd1, 0x7b, 0xda, 0x90, 0xb5, 0x81, 0xac,\n+\t\t0x76, 0x54, 0x54, 0x85, 0x0b, 0xa9, 0x46, 0x9c, 0xf0, 0xfd, 0xde, 0x5d, 0xa8, 0xe3, 0xee, 0xe9,\n+\t\t0xf4, 0x9d, 0x34, 0x76, 0x39, 0xe7, 0xc3, 0x4a, 0x84, 0x38, 0x92, 0x61, 0xf1, 0x12, 0x9f, 0x05,\n+\t\t0xda, 0xdb, 0xc1, 0xd4, 0xb0, 0xa0, 0x27, 0x19, 0xa0, 0x56, 0x5d, 0x9b, 0xcc, 0x47, 0x7c, 0x15,\n+\t\t0x1d, 0x52, 0x66, 0xd5, 0xff, 0xef, 0x12, 0x23, 0x86, 0xe2, 0xee, 0x81, 0x2c, 0x3d, 0x7d, 0x28,\n+\t\t0xd5, 0x42, 0xdf, 0xdb, 0x75, 0x1c, 0xeb, 0xdf, 0x13, 0x23, 0xd5, 0x17, 0x89, 0xea, 0xd7, 0x01,\n+\t\t0xff, 0x57, 0x6a, 0x44, 0x61, 0xf4, 0xea, 0xbe, 0x97, 0x9b, 0xc2, 0xb1, 0x9c, 0x5d, 0xff, 0x4f,\n+\t\t0x73, 0x2d, 0x3f, 0x57, 0x28, 0x38, 0xbf, 0x3d, 0x9f, 0xda, 0x49, 0x55, 0x8f, 0xb2, 0x77, 0xec,\n+\t\t0x0f, 0xbc, 0xce, 0xb8, 0xc6, 0xe1, 0x03, 0xed, 0x35, 0x9c, 0xf2, 0x4d, 0xa4, 0x29, 0x6c, 0xd6,\n+\t\t0x6e, 0x05, 0x53, 0x46, 0xc1, 0x41, 0x09, 0x36, 0x0b, 0x7d, 0xf4, 0x9e, 0x0f, 0xba, 0x86, 0x33,\n+\t\t0xdd, 0xf1, 0xa7, 0xf7, 0xd5, 0x29, 0xa8, 0xa7, 0x4d, 0xce, 0x0c, 0xf5, 0xb4, 0x6c, 0xd8, 0x27,\n+\t\t0xb0, 0x87, 0x2a, 0x6f, 0x7f, 0x3f, 0x8f, 0xc3, 0xe2, 0x3e, 0x94, 0xcf, 0x61, 0x4a, 0x09, 0x3d,\n+\t\t0xf9, 0x55, 0x19, 0x31, 0xf2, 0xd2, 0x4a, 0x3e, 0xc1, 0xf5, 0xed, 0x7c, 0x45, 0xb0, 0x0c, 0x7b,\n+\t\t0xdd, 0xa6, 0x0a, 0x26, 0x66, 0xec, 0x85, 0x49, 0x00, 0x38, 0x05, 0x7c, 0x9c, 0x1c, 0x92, 0xf5,\n+\t\t0xf7, 0xdb, 0x5d, 0xbd, 0x61, 0x0c, 0xc9, 0xaf, 0xfd, 0x57, 0x3f, 0xee, 0x2b, 0xad, 0x73, 0xef,\n+\t\t0xa3, 0xc1, 0x66, 0x26, 0x44, 0x5e, 0xf9, 0x12, 0x86, 0x66, 0xa9, 0x61, 0x75, 0xa1, 0xbc, 0x40,\n+\t\t0x7f, 0xa8, 0x08, 0x02, 0xc0, 0x76, 0x0e, 0x76, 0xb3, 0x26, 0x3d, 0x1c, 0x40, 0x65, 0xe4, 0x18,\n+\t\t0x0f, 0x62, 0x17, 0x8f, 0x1e, 0x61, 0xb8, 0x08, 0x83, 0x54, 0x42, 0x11, 0x03, 0x30, 0x8e, 0xb7,\n+\t\t0xc1, 0x9c, 0xec, 0x69, 0x52, 0x95, 0xfb, 0x7b, 0x1a, 0x0c, 0x20, 0x24, 0xf7, 0xb8, 0x38, 0x0c,\n+\t\t0xb8, 0x7b, 0xb6, 0x69, 0x70, 0xd0, 0x61, 0xb9, 0x70, 0x06, 0xc2, 0x5b, 0x20, 0x47, 0xf7, 0xd9,\n+\t\t0x32, 0xc2, 0xf2, 0x90, 0xb6, 0x4d, 0xcd, 0x3c, 0x6d, 0x74, 0xea, 0x82, 0x35, 0x1b, 0x08, 0x44,\n+\t\t0xba, 0xb7, 0x33, 0x82, 0x33, 0x27, 0x54, 0x77, 0x6e, 0x58, 0xfe, 0x46, 0x5a, 0xb4, 0x88, 0x53,\n+\t\t0x8d, 0x9b, 0xb1, 0xab, 0xdf, 0x04, 0xe1, 0xfb, 0xd7, 0x1e, 0xd7, 0x38, 0x64, 0x54, 0xba, 0xb0,\n+\t\t0x6c, 0x84, 0x7a, 0x0f, 0xa7, 0x80, 0x6b, 0x86, 0xd9, 0xc9, 0xc6, 0x31, 0x95, 0xfa, 0x8a, 0x2c,\n+\t\t0x14, 0xe1, 0x85, 0x66, 0x27, 0xfd, 0x63, 0x3e, 0xf0, 0xfa, 0x81, 0xc9, 0x89, 0x4f, 0xe2, 0x6a,\n+\t\t0x8c, 0x17, 0xb5, 0xc7, 0x9f, 0x5d, 0x3f, 0x6b, 0x3f, 0xcd, 0x13, 0x7a, 0x3c, 0xe6, 0x4e, 0xfa,\n+\t\t0x7a, 0x10, 0xb8, 0x7c, 0x40, 0xec, 0x93, 0x11, 0x1f, 0xd0, 0x9e, 0xc3, 0x56, 0xb9, 0xf5, 0x21,\n+\t\t0x18, 0x41, 0x31, 0xea, 0x01, 0x8d, 0xea, 0x1c, 0x95, 0x5e, 0x56, 0x33, 0xbc, 0x7a, 0x3f, 0x6f\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_768B[] = {\n+\t\t0x3e, 0x7f, 0x9e, 0x4c, 0x88, 0x15, 0x68, 0x69, 0x10, 0x09, 0xe1, 0xa7, 0x0f, 0x27, 0x88, 0x2d,\n+\t\t0x90, 0x73, 0x4f, 0x67, 0xd3, 0x8b, 0xaf, 0xa1, 0x2c, 0x37, 0xa5, 0x6c, 0x7c, 0xbd, 0x95, 0x4c,\n+\t\t0x82, 0xcf, 0x05, 0x49, 0x16, 0x5c, 0xe7, 0x06, 0xd4, 0xcb, 0x55, 0x65, 0x9a, 0xd0, 0xe1, 0x46,\n+\t\t0x3a, 0x37, 0x71, 0xad, 0xb0, 0xb4, 0x99, 0x1e, 0x23, 0x57, 0x48, 0x96, 0x9c, 0xc5, 0xc4, 0xdb,\n+\t\t0x64, 0x3e, 0xc9, 0x7f, 0x90, 0x5a, 0xa0, 0x08, 0x75, 0x4c, 0x09, 0x06, 0x31, 0x6e, 0x59, 0x29,\n+\t\t0xfc, 0x2f, 0x72, 0xde, 0xf2, 0x40, 0x5a, 0xfe, 0xd3, 0x66, 0x64, 0xb8, 0x9c, 0xc9, 0xa6, 0x1f,\n+\t\t0xc3, 0x52, 0xcd, 0xb5, 0xd1, 0x4f, 0x43, 0x3f, 0xf4, 0x59, 0x25, 0xc4, 0xdd, 0x3e, 0x58, 0x7c,\n+\t\t0x21, 0xd6, 0x21, 0xce, 0xa4, 0xbe, 0x08, 0x23, 0x46, 0x68, 0xc0, 0x00, 0x91, 0x47, 0xca, 0x9b,\n+\t\t0xe0, 0xb4, 0xe3, 0xab, 0xbf, 0xcf, 0x68, 0x26, 0x97, 0x23, 0x09, 0x93, 0x64, 0x8f, 0x57, 0x59,\n+\t\t0xe2, 0x41, 0x7c, 0xa2, 0x48, 0x7e, 0xd5, 0x2c, 0x54, 0x09, 0x1b, 0x07, 0x94, 0xca, 0x39, 0x83,\n+\t\t0xdd, 0xf4, 0x7a, 0x1d, 0x2d, 0xdd, 0x67, 0xf7, 0x3c, 0x30, 0x89, 0x3e, 0xc1, 0xdc, 0x1d, 0x8f,\n+\t\t0xfc, 0xb1, 0xe9, 0x13, 0x31, 0xb0, 0x16, 0xdb, 0x88, 0xf2, 0x32, 0x7e, 0x73, 0xa3, 0xdf, 0x08,\n+\t\t0x6b, 0x53, 0x92, 0x08, 0xc9, 0x9d, 0x98, 0xb2, 0xf4, 0x8c, 0xb1, 0x95, 0xdc, 0xb6, 0xfc, 0xec,\n+\t\t0xf1, 0xc9, 0x0d, 0x6d, 0x42, 0x2c, 0xf5, 0x38, 0x29, 0xf4, 0xd8, 0x98, 0x0f, 0xb0, 0x81, 0xa5,\n+\t\t0xaa, 0xe6, 0x1f, 0x6e, 0x87, 0x32, 0x1b, 0x02, 0x07, 0x57, 0x38, 0x83, 0xf3, 0xe4, 0x54, 0x7c,\n+\t\t0xa8, 0x43, 0xdf, 0x3f, 0x42, 0xfd, 0x67, 0x28, 0x06, 0x4d, 0xea, 0xce, 0x1f, 0x84, 0x4a, 0xcd,\n+\t\t0x8c, 0x61, 0x5e, 0x8f, 0x61, 0xed, 0x84, 0x03, 0x53, 0x6a, 0x9e, 0xbf, 0x68, 0x83, 0xa7, 0x42,\n+\t\t0x56, 0x57, 0xcd, 0x45, 0x29, 0xfc, 0x7b, 0x07, 0xfc, 0xe9, 0xb9, 0x42, 0xfd, 0x29, 0xd5, 0xfd,\n+\t\t0x98, 0x11, 0xd1, 0x8d, 0x67, 0x29, 0x47, 0x61, 0xd8, 0x27, 0x37, 0x79, 0x29, 0xd1, 0x94, 0x6f,\n+\t\t0x8d, 0xf3, 0x1b, 0x3d, 0x6a, 0xb1, 0x59, 0xef, 0x1b, 0xd4, 0x70, 0x0e, 0xac, 0xab, 0xa0, 0x2b,\n+\t\t0x1f, 0x5e, 0x04, 0xf0, 0x0e, 0x35, 0x72, 0x90, 0xfc, 0xcf, 0x86, 0x43, 0xea, 0x45, 0x6d, 0x22,\n+\t\t0x63, 0x06, 0x1a, 0x58, 0xd7, 0x2d, 0xc5, 0xb0, 0x60, 0x69, 0xe8, 0x53, 0xc2, 0xa2, 0x57, 0x83,\n+\t\t0xc4, 0x31, 0xb4, 0xc6, 0xb3, 0xa1, 0x77, 0xb3, 0x1c, 0xca, 0x89, 0x3f, 0xf5, 0x10, 0x3b, 0x36,\n+\t\t0x31, 0x7d, 0x00, 0x46, 0x00, 0x92, 0xa0, 0xa0, 0x34, 0xd8, 0x5e, 0x62, 0xa9, 0xe0, 0x23, 0x37,\n+\t\t0x50, 0x85, 0xc7, 0x3a, 0x20, 0xa3, 0x98, 0xc0, 0xac, 0x20, 0x06, 0x0f, 0x17, 0x3c, 0xfc, 0x43,\n+\t\t0x8c, 0x9d, 0xec, 0xf5, 0x9a, 0x35, 0x96, 0xf7, 0xb7, 0x4c, 0xf9, 0x69, 0xf8, 0xd4, 0x1e, 0x9e,\n+\t\t0xf9, 0x7c, 0xc4, 0xd2, 0x11, 0x14, 0x41, 0xb9, 0x89, 0xd6, 0x07, 0xd2, 0x37, 0x07, 0x5e, 0x5e,\n+\t\t0xae, 0x60, 0xdc, 0xe4, 0xeb, 0x38, 0x48, 0x6d, 0x95, 0x8d, 0x71, 0xf2, 0xba, 0xda, 0x5f, 0x08,\n+\t\t0x9d, 0x4a, 0x0f, 0x56, 0x90, 0x64, 0xab, 0xb6, 0x88, 0x22, 0xa8, 0x90, 0x1f, 0x76, 0x2c, 0x83,\n+\t\t0x43, 0xce, 0x32, 0x55, 0x45, 0x84, 0x57, 0x43, 0xf9, 0xa8, 0xd1, 0x4f, 0xe3, 0xc1, 0x72, 0x9c,\n+\t\t0xeb, 0x64, 0xf7, 0xe4, 0x61, 0x2b, 0x93, 0xd1, 0x1f, 0xbb, 0x5c, 0xff, 0xa1, 0x59, 0x69, 0xcf,\n+\t\t0xf7, 0xaf, 0x58, 0x45, 0xd5, 0x3e, 0x98, 0x7d, 0x26, 0x39, 0x5c, 0x75, 0x3c, 0x4a, 0xbf, 0x5e,\n+\t\t0x12, 0x10, 0xb0, 0x93, 0x0f, 0x86, 0x82, 0xcf, 0xb2, 0xec, 0x70, 0x5c, 0x0b, 0xad, 0x5d, 0x63,\n+\t\t0x65, 0x32, 0xa6, 0x04, 0x58, 0x03, 0x91, 0x2b, 0xdb, 0x8f, 0xd3, 0xa3, 0x2b, 0x3a, 0xf5, 0xa1,\n+\t\t0x62, 0x6c, 0xb6, 0xf0, 0x13, 0x3b, 0x8c, 0x07, 0x10, 0x82, 0xc9, 0x56, 0x24, 0x87, 0xfc, 0x56,\n+\t\t0xe8, 0xef, 0x90, 0x8b, 0xd6, 0x48, 0xda, 0x53, 0x04, 0x49, 0x41, 0xa4, 0x67, 0xe0, 0x33, 0x24,\n+\t\t0x6b, 0x9c, 0x07, 0x55, 0x4c, 0x5d, 0xe9, 0x35, 0xfa, 0xbd, 0xea, 0xa8, 0x3f, 0xe9, 0xf5, 0x20,\n+\t\t0x5c, 0x60, 0x0f, 0x0d, 0x24, 0xcb, 0x1a, 0xd6, 0xe8, 0x5c, 0xa8, 0x42, 0xae, 0xd0, 0xd2, 0xf2,\n+\t\t0xa8, 0xbe, 0xea, 0x0f, 0x8d, 0xfb, 0x81, 0xa3, 0xa4, 0xef, 0xb7, 0x3e, 0x91, 0xbd, 0x26, 0x0f,\n+\t\t0x8e, 0xf1, 0xb2, 0xa5, 0x47, 0x06, 0xfa, 0x40, 0x8b, 0x31, 0x7a, 0x5a, 0x74, 0x2a, 0x0a, 0x7c,\n+\t\t0x62, 0x5d, 0x39, 0xa4, 0xae, 0x14, 0x85, 0x08, 0x5b, 0x20, 0x85, 0xf1, 0x57, 0x6e, 0x71, 0x13,\n+\t\t0x4e, 0x2b, 0x49, 0x87, 0x01, 0xdf, 0x37, 0xed, 0x28, 0xee, 0x4d, 0xa1, 0xf4, 0xb3, 0x3b, 0xba,\n+\t\t0x2d, 0xb3, 0x46, 0x17, 0x84, 0x80, 0x9d, 0xd7, 0x93, 0x1f, 0x28, 0x7c, 0xf5, 0xf9, 0xd6, 0x85,\n+\t\t0x8c, 0xa5, 0x44, 0xe9, 0x2c, 0x65, 0x51, 0x5f, 0x53, 0x7a, 0x09, 0xd9, 0x30, 0x16, 0x95, 0x89,\n+\t\t0x9c, 0x0b, 0xef, 0x90, 0x6d, 0x23, 0xd3, 0x48, 0x57, 0x3b, 0x55, 0x69, 0x96, 0xfc, 0xf7, 0x52,\n+\t\t0x92, 0x38, 0x36, 0xbf, 0xa9, 0x0a, 0xbb, 0x68, 0x45, 0x08, 0x25, 0xee, 0x59, 0xfe, 0xee, 0xf2,\n+\t\t0x2c, 0xd4, 0x5f, 0x78, 0x59, 0x0d, 0x90, 0xf1, 0xd7, 0xe4, 0x39, 0x0e, 0x46, 0x36, 0xf5, 0x75,\n+\t\t0x03, 0x3c, 0x28, 0xfb, 0xfa, 0x8f, 0xef, 0xc9, 0x61, 0x00, 0x94, 0xc3, 0xd2, 0x0f, 0xd9, 0xda\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_1024B[] = {\n+\t\t0x7d, 0x01, 0x7e, 0x2f, 0x92, 0xb3, 0xea, 0x72, 0x4a, 0x3f, 0x10, 0xf9, 0x2b, 0xb0, 0xd5, 0xb9,\n+\t\t0x19, 0x68, 0x94, 0xe9, 0x93, 0xe9, 0xd5, 0x26, 0x20, 0x44, 0xe2, 0x47, 0x15, 0x8d, 0x75, 0x48,\n+\t\t0x8e, 0xe4, 0x40, 0x81, 0xb5, 0x06, 0xa8, 0xb8, 0x0e, 0x0f, 0x3b, 0xbc, 0x5b, 0xbe, 0x3b, 0xa2,\n+\t\t0x2a, 0x0c, 0x48, 0x98, 0x19, 0xdf, 0xe9, 0x25, 0x75, 0xab, 0x93, 0x44, 0xb1, 0x72, 0x70, 0xbb,\n+\t\t0x20, 0xcf, 0x78, 0xe9, 0x4d, 0xc6, 0xa9, 0xa9, 0x84, 0x78, 0xc5, 0xc0, 0xc4, 0xc9, 0x79, 0x1a,\n+\t\t0xbc, 0x61, 0x25, 0x5f, 0xac, 0x01, 0x03, 0xb7, 0xef, 0x07, 0xf2, 0x62, 0x98, 0xee, 0xe3, 0xad,\n+\t\t0x94, 0x75, 0x30, 0x67, 0xb9, 0x15, 0x00, 0xe7, 0x11, 0x32, 0x2e, 0x6b, 0x55, 0x9f, 0xac, 0x68,\n+\t\t0xde, 0x61, 0x05, 0x80, 0x01, 0xf3, 0xad, 0xab, 0xaf, 0x45, 0xe0, 0xf4, 0x68, 0x5c, 0xc0, 0x52,\n+\t\t0x92, 0xc8, 0x21, 0xb6, 0xf5, 0x8a, 0x1d, 0xbb, 0xfc, 0x4a, 0x11, 0x62, 0xa2, 0xc4, 0xf1, 0x2d,\n+\t\t0x0e, 0xb2, 0xc7, 0x17, 0x34, 0xb4, 0x2a, 0x54, 0x81, 0xc2, 0x1e, 0xcf, 0x51, 0x0a, 0x76, 0x54,\n+\t\t0xf1, 0x48, 0x0d, 0x5c, 0xcd, 0x38, 0x3e, 0x38, 0x3e, 0xf8, 0x46, 0x1d, 0x00, 0xf5, 0x62, 0xe1,\n+\t\t0x5c, 0xb7, 0x8d, 0xce, 0xd0, 0x3f, 0xbb, 0x22, 0xf1, 0xe5, 0xb1, 0xa0, 0x58, 0x5e, 0x3c, 0x0f,\n+\t\t0x15, 0xd1, 0xac, 0x3e, 0xc7, 0x72, 0xc4, 0xde, 0x8b, 0x95, 0x3e, 0x91, 0xf7, 0x1d, 0x04, 0x9a,\n+\t\t0xc8, 0xe4, 0xbf, 0xd3, 0x22, 0xca, 0x4a, 0xdc, 0xb6, 0x16, 0x79, 0x81, 0x75, 0x2f, 0x6b, 0xa7,\n+\t\t0x04, 0x98, 0xa7, 0x4e, 0xc1, 0x19, 0x90, 0x33, 0x33, 0x3c, 0x7f, 0xdd, 0xac, 0x09, 0x0c, 0xc3,\n+\t\t0x91, 0x34, 0x74, 0xab, 0xa5, 0x35, 0x0a, 0x13, 0xc3, 0x56, 0x67, 0x6d, 0x1a, 0x3e, 0xbf, 0x56,\n+\t\t0x06, 0x67, 0x15, 0x5f, 0xfc, 0x8b, 0xa2, 0x3c, 0x5e, 0xaf, 0x56, 0x1f, 0xe3, 0x2e, 0x9d, 0x0a,\n+\t\t0xf9, 0x9b, 0xc7, 0xb5, 0x03, 0x1c, 0x68, 0x99, 0xfa, 0x3c, 0x37, 0x59, 0xc1, 0xf7, 0x6a, 0x83,\n+\t\t0x22, 0xee, 0xca, 0x7f, 0x7d, 0x49, 0xe6, 0x48, 0x84, 0x54, 0x7a, 0xff, 0xb3, 0x72, 0x21, 0xd8,\n+\t\t0x7a, 0x5d, 0xb1, 0x4b, 0xcc, 0x01, 0x6f, 0x90, 0xc6, 0x68, 0x1c, 0x2c, 0xa1, 0xe2, 0x74, 0x40,\n+\t\t0x26, 0x9b, 0x57, 0x53, 0xa3, 0x7c, 0x0b, 0x0d, 0xcf, 0x05, 0x5d, 0x62, 0x4f, 0x75, 0x06, 0x62,\n+\t\t0x1f, 0x26, 0x32, 0xaa, 0x25, 0xcc, 0x26, 0x8d, 0xae, 0x01, 0x47, 0xa3, 0x00, 0x42, 0xe2, 0x4c,\n+\t\t0xee, 0x29, 0xa2, 0x81, 0xa0, 0xfd, 0xeb, 0xff, 0x9a, 0x66, 0x6e, 0x47, 0x5b, 0xab, 0x93, 0x5a,\n+\t\t0x02, 0x6d, 0x6f, 0xf2, 0x6e, 0x02, 0x9d, 0xb1, 0xab, 0x56, 0xdc, 0x8b, 0x9b, 0x17, 0xa8, 0xfb,\n+\t\t0x87, 0x42, 0x7c, 0x91, 0x1e, 0x14, 0xc6, 0x6f, 0xdc, 0xf0, 0x27, 0x30, 0xfa, 0x3f, 0xc4, 0xad,\n+\t\t0x57, 0x85, 0xd2, 0xc9, 0x32, 0x2c, 0x13, 0xa6, 0x04, 0x04, 0x50, 0x05, 0x2f, 0x72, 0xd9, 0x44,\n+\t\t0x55, 0x6e, 0x93, 0x40, 0xed, 0x7e, 0xd4, 0x40, 0x3e, 0x88, 0x3b, 0x8b, 0xb6, 0xeb, 0xc6, 0x5d,\n+\t\t0x9c, 0x99, 0xa1, 0xcf, 0x30, 0xb2, 0xdc, 0x48, 0x8a, 0x01, 0xa7, 0x61, 0x77, 0x50, 0x14, 0xf3,\n+\t\t0x0c, 0x49, 0x53, 0xb3, 0xb4, 0xb4, 0x28, 0x41, 0x4a, 0x2d, 0xd2, 0x4d, 0x2a, 0x30, 0x31, 0x83,\n+\t\t0x03, 0x5e, 0xaa, 0xd3, 0xa3, 0xd1, 0xa1, 0xca, 0x62, 0xf0, 0xe1, 0xf2, 0xff, 0xf0, 0x19, 0xa6,\n+\t\t0xde, 0x22, 0x47, 0xb5, 0x28, 0x7d, 0xf7, 0x07, 0x16, 0x0d, 0xb1, 0x55, 0x81, 0x95, 0xe5, 0x1d,\n+\t\t0x4d, 0x78, 0xa9, 0x3e, 0xce, 0xe3, 0x1c, 0xf9, 0x47, 0xc8, 0xec, 0xc5, 0xc5, 0x93, 0x4c, 0x34,\n+\t\t0x20, 0x6b, 0xee, 0x9a, 0xe6, 0x86, 0x57, 0x58, 0xd5, 0x58, 0xf1, 0x33, 0x10, 0x29, 0x9e, 0x93,\n+\t\t0x2f, 0xf5, 0x90, 0x00, 0x17, 0x67, 0x4f, 0x39, 0x18, 0xe1, 0xcf, 0x55, 0x78, 0xbb, 0xe6, 0x29,\n+\t\t0x3e, 0x77, 0xd5, 0x48, 0xb7, 0x42, 0x72, 0x53, 0x27, 0xfa, 0x5b, 0xe0, 0x36, 0x14, 0x97, 0xb8,\n+\t\t0x9b, 0x3c, 0x09, 0x77, 0xc1, 0x0a, 0xe4, 0xa2, 0x63, 0xfc, 0xbe, 0x5c, 0x17, 0xcf, 0x01, 0xf5,\n+\t\t0x03, 0x0f, 0x17, 0xbc, 0x93, 0xdd, 0x5f, 0xe2, 0xf3, 0x08, 0xa8, 0xb1, 0x85, 0xb6, 0x34, 0x3f,\n+\t\t0x87, 0x42, 0xa5, 0x42, 0x3b, 0x0e, 0xd6, 0x83, 0x6a, 0xfd, 0x5d, 0xc9, 0x67, 0xd5, 0x51, 0xc9,\n+\t\t0x2a, 0x4e, 0x91, 0xb0, 0x59, 0xb2, 0x0f, 0xa2, 0xe6, 0x47, 0x73, 0xc2, 0xa2, 0xae, 0xbb, 0xc8,\n+\t\t0x42, 0xa3, 0x2a, 0x27, 0x29, 0x48, 0x8c, 0x54, 0x6c, 0xec, 0x00, 0x2a, 0x42, 0xa3, 0x7a, 0x0f,\n+\t\t0x12, 0x66, 0x6b, 0x96, 0xf6, 0xd0, 0x56, 0x4f, 0x49, 0x5c, 0x47, 0xec, 0x05, 0x62, 0x54, 0xb2,\n+\t\t0x64, 0x5a, 0x69, 0x1f, 0x19, 0xb4, 0x84, 0x5c, 0xbe, 0x48, 0x8e, 0xfc, 0x58, 0x21, 0xce, 0xfa,\n+\t\t0xaa, 0x84, 0xd2, 0xc1, 0x08, 0xb3, 0x87, 0x0f, 0x4f, 0xa3, 0x3a, 0xb6, 0x44, 0xbe, 0x2e, 0x9a,\n+\t\t0xdd, 0xb5, 0x44, 0x80, 0xca, 0xf4, 0xc3, 0x6e, 0xba, 0x93, 0x77, 0xe0, 0x53, 0xfb, 0x37, 0xfb,\n+\t\t0x88, 0xc3, 0x1f, 0x25, 0xde, 0x3e, 0x11, 0xf4, 0x89, 0xe7, 0xd1, 0x3b, 0xb4, 0x23, 0xcb, 0x70,\n+\t\t0xba, 0x35, 0x97, 0x7c, 0xbe, 0x84, 0x13, 0xcf, 0xe0, 0x4d, 0x33, 0x91, 0x71, 0x85, 0xbb, 0x4b,\n+\t\t0x97, 0x32, 0x5d, 0xa0, 0xb9, 0x8f, 0xdc, 0x27, 0x5a, 0xeb, 0x71, 0xf1, 0xd5, 0x0d, 0x65, 0xb4,\n+\t\t0x22, 0x81, 0xde, 0xa7, 0x58, 0x20, 0x0b, 0x18, 0x11, 0x76, 0x5c, 0xe6, 0x6a, 0x2c, 0x99, 0x69,\n+\t\t0xdc, 0xed, 0x67, 0x08, 0x5d, 0x5e, 0xe9, 0x1e, 0x55, 0x70, 0xc1, 0x5a, 0x76, 0x1b, 0x8d, 0x2e,\n+\t\t0x0d, 0xf9, 0xcc, 0x30, 0x8c, 0x44, 0x0f, 0x63, 0x8c, 0x42, 0x8a, 0x9f, 0x4c, 0xd1, 0x48, 0x28,\n+\t\t0x8a, 0xf5, 0x56, 0x2e, 0x23, 0x12, 0xfe, 0x67, 0x9a, 0x13, 0x65, 0x75, 0x83, 0xf1, 0x3c, 0x98,\n+\t\t0x07, 0x6b, 0xb7, 0x27, 0x5b, 0xf0, 0x70, 0xda, 0x30, 0xf8, 0x74, 0x4e, 0x7a, 0x32, 0x84, 0xcc,\n+\t\t0x0e, 0xcd, 0x80, 0x8b, 0x82, 0x31, 0x9a, 0x48, 0xcf, 0x75, 0x00, 0x1f, 0x4f, 0xe0, 0x8e, 0xa3,\n+\t\t0x6a, 0x2c, 0xd4, 0x73, 0x4c, 0x63, 0x7c, 0xa6, 0x4d, 0x5e, 0xfd, 0x43, 0x3b, 0x27, 0xe1, 0x5e,\n+\t\t0xa3, 0xa9, 0x5c, 0x3b, 0x60, 0xdd, 0xc6, 0x8d, 0x5a, 0xf1, 0x3e, 0x89, 0x4b, 0x24, 0xcf, 0x01,\n+\t\t0x3a, 0x2d, 0x44, 0xe7, 0xda, 0xe7, 0xa1, 0xac, 0x11, 0x05, 0x0c, 0xa9, 0x7a, 0x82, 0x8c, 0x5c,\n+\t\t0x29, 0x68, 0x9c, 0x73, 0x13, 0xcc, 0x67, 0x32, 0x11, 0x5e, 0xe5, 0xcc, 0x8c, 0xf5, 0xa7, 0x52,\n+\t\t0x83, 0x9a, 0x70, 0xef, 0xde, 0x55, 0x9c, 0xc7, 0x8a, 0xed, 0xad, 0x28, 0x4a, 0xc5, 0x92, 0x6d,\n+\t\t0x8e, 0x47, 0xca, 0xe3, 0xf8, 0x77, 0xb5, 0x26, 0x64, 0x84, 0xc2, 0xf1, 0xd7, 0xae, 0x0c, 0xb9,\n+\t\t0x39, 0x0f, 0x43, 0x6b, 0xe9, 0xe0, 0x09, 0x4b, 0xe5, 0xe3, 0x17, 0xa6, 0x68, 0x69, 0x46, 0xf4,\n+\t\t0xf0, 0x68, 0x7f, 0x2f, 0x1c, 0x7e, 0x4c, 0xd2, 0xb5, 0xc6, 0x16, 0x85, 0xcf, 0x02, 0x4c, 0x89,\n+\t\t0x0b, 0x25, 0xb0, 0xeb, 0xf3, 0x77, 0x08, 0x6a, 0x46, 0x5c, 0xf6, 0x2f, 0xf1, 0x24, 0xc3, 0x4d,\n+\t\t0x80, 0x60, 0x4d, 0x69, 0x98, 0xde, 0xc7, 0xa1, 0xf6, 0x4e, 0x18, 0x0c, 0x2a, 0xb0, 0xb2, 0xe0,\n+\t\t0x46, 0xe7, 0x49, 0x37, 0xc8, 0x5a, 0x23, 0x24, 0xe3, 0x0f, 0xcc, 0x92, 0xb4, 0x8d, 0xdc, 0x9e\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_1280B[] = {\n+\t\t0x91, 0x99, 0x5e, 0x9e, 0x84, 0xff, 0x59, 0x45, 0xc1, 0xf4, 0xbc, 0x9c, 0xb9, 0x30, 0x6c, 0x51,\n+\t\t0x73, 0x52, 0xb4, 0x44, 0x09, 0x79, 0xe2, 0x89, 0x75, 0xeb, 0x54, 0x26, 0xce, 0xd8, 0x24, 0x98,\n+\t\t0xaa, 0xf8, 0x13, 0x16, 0x68, 0x58, 0xc4, 0x82, 0x0e, 0x31, 0xd3, 0x6a, 0x13, 0x58, 0x31, 0xe9,\n+\t\t0x3a, 0xc1, 0x8b, 0xc5, 0x3f, 0x50, 0x42, 0xd1, 0x93, 0xe4, 0x9b, 0x65, 0x2b, 0xf4, 0x1d, 0x9e,\n+\t\t0x2d, 0xdb, 0x48, 0xef, 0x9a, 0x01, 0x68, 0xb6, 0xea, 0x7a, 0x2b, 0xad, 0xfe, 0x77, 0x44, 0x7e,\n+\t\t0x5a, 0xc5, 0x64, 0xb4, 0xfe, 0x5c, 0x80, 0xf3, 0x20, 0x7e, 0xaf, 0x5b, 0xf8, 0xd1, 0x38, 0xa0,\n+\t\t0x8d, 0x09, 0x77, 0x06, 0xfe, 0xf5, 0xf4, 0xe4, 0xee, 0xb8, 0x95, 0x27, 0xed, 0x07, 0xb8, 0xaa,\n+\t\t0x25, 0xb4, 0xe1, 0x4c, 0xeb, 0x3f, 0xdb, 0x39, 0x66, 0x28, 0x1b, 0x60, 0x42, 0x8b, 0x99, 0xd9,\n+\t\t0x49, 0xd6, 0x8c, 0xa4, 0x9d, 0xd8, 0x93, 0x58, 0x8f, 0xfa, 0xd3, 0xf7, 0x37, 0x9c, 0x88, 0xab,\n+\t\t0x16, 0x50, 0xfe, 0x01, 0x1f, 0x88, 0x48, 0xbe, 0x21, 0xa9, 0x90, 0x9e, 0x73, 0xe9, 0x82, 0xf7,\n+\t\t0xbf, 0x4b, 0x43, 0xf4, 0xbf, 0x22, 0x3c, 0x45, 0x47, 0x95, 0x5b, 0x49, 0x71, 0x07, 0x1c, 0x8b,\n+\t\t0x49, 0xa4, 0xa3, 0x49, 0xc4, 0x5f, 0xb1, 0xf5, 0xe3, 0x6b, 0xf1, 0xdc, 0xea, 0x92, 0x7b, 0x29,\n+\t\t0x40, 0xc9, 0x39, 0x5f, 0xdb, 0xbd, 0xf3, 0x6a, 0x09, 0x9b, 0x2a, 0x5e, 0xc7, 0x0b, 0x25, 0x94,\n+\t\t0x55, 0x71, 0x9c, 0x7e, 0x0e, 0xb4, 0x08, 0x12, 0x8c, 0x6e, 0x77, 0xb8, 0x29, 0xf1, 0xc6, 0x71,\n+\t\t0x04, 0x40, 0x77, 0x18, 0x3f, 0x01, 0x09, 0x9c, 0x23, 0x2b, 0x5d, 0x2a, 0x88, 0x20, 0x23, 0x59,\n+\t\t0x74, 0x2a, 0x67, 0x8f, 0xb7, 0xba, 0x38, 0x9f, 0x0f, 0xcf, 0x94, 0xdf, 0xe1, 0x8f, 0x35, 0x5e,\n+\t\t0x34, 0x0c, 0x32, 0x92, 0x2b, 0x23, 0x81, 0xf4, 0x73, 0xa0, 0x5a, 0x2a, 0xbd, 0xa6, 0x6b, 0xae,\n+\t\t0x43, 0xe2, 0xdc, 0x01, 0xc1, 0xc6, 0xc3, 0x04, 0x06, 0xbb, 0xb0, 0x89, 0xb3, 0x4e, 0xbd, 0x81,\n+\t\t0x1b, 0x03, 0x63, 0x93, 0xed, 0x4e, 0xf6, 0xe5, 0x94, 0x6f, 0xd6, 0xf3, 0x20, 0xf3, 0xbc, 0x30,\n+\t\t0xc5, 0xd6, 0xbe, 0x1c, 0x05, 0x34, 0x26, 0x4d, 0x46, 0x5e, 0x56, 0x63, 0xfb, 0xdb, 0xcd, 0xed,\n+\t\t0xb0, 0x7f, 0x83, 0x94, 0x55, 0x54, 0x2f, 0xab, 0xc9, 0xb7, 0x16, 0x4f, 0x9e, 0x93, 0x25, 0xd7,\n+\t\t0x9f, 0x39, 0x2b, 0x63, 0xcf, 0x1e, 0xa3, 0x0e, 0x28, 0x47, 0x8a, 0x5f, 0x40, 0x02, 0x89, 0x1f,\n+\t\t0x83, 0xe7, 0x87, 0xd1, 0x90, 0x17, 0xb8, 0x27, 0x64, 0xe1, 0xe1, 0x48, 0x5a, 0x55, 0x74, 0x99,\n+\t\t0x27, 0x9d, 0x05, 0x67, 0xda, 0x70, 0x12, 0x8f, 0x94, 0x96, 0xfd, 0x36, 0xa4, 0x1d, 0x22, 0xe5,\n+\t\t0x0b, 0xe5, 0x2f, 0x38, 0x55, 0xa3, 0x5d, 0x0b, 0xcf, 0xd4, 0xa9, 0xb8, 0xd6, 0x9a, 0x16, 0x2e,\n+\t\t0x6c, 0x4a, 0x25, 0x51, 0x7a, 0x09, 0x48, 0xdd, 0xf0, 0xa3, 0x5b, 0x08, 0x1e, 0x2f, 0x03, 0x91,\n+\t\t0x80, 0xe8, 0x0f, 0xe9, 0x5a, 0x2f, 0x90, 0xd3, 0x64, 0xed, 0xd7, 0x51, 0x17, 0x66, 0x53, 0x40,\n+\t\t0x43, 0x74, 0xef, 0x0a, 0x0d, 0x49, 0x41, 0xf2, 0x67, 0x6e, 0xea, 0x14, 0xc8, 0x74, 0xd6, 0xa9,\n+\t\t0xb9, 0x6a, 0xe3, 0xec, 0x7d, 0xe8, 0x6a, 0x21, 0x3a, 0x52, 0x42, 0xfe, 0x9a, 0x15, 0x6d, 0x60,\n+\t\t0x64, 0x88, 0xc5, 0xb2, 0x8b, 0x15, 0x2c, 0xff, 0xe2, 0x35, 0xc3, 0xee, 0x9f, 0xcd, 0x82, 0xd9,\n+\t\t0x14, 0x35, 0x2a, 0xb7, 0xf5, 0x2f, 0x7b, 0xbc, 0x01, 0xfd, 0xa8, 0xe0, 0x21, 0x4e, 0x73, 0xf9,\n+\t\t0xf2, 0xb0, 0x79, 0xc9, 0x10, 0x52, 0x8f, 0xa8, 0x3e, 0x3b, 0xbe, 0xc5, 0xde, 0xf6, 0x53, 0xe3,\n+\t\t0x1c, 0x25, 0x3a, 0x1f, 0x13, 0xbf, 0x13, 0xbb, 0x94, 0xc2, 0x97, 0x43, 0x64, 0x47, 0x8f, 0x76,\n+\t\t0xd7, 0xaa, 0xeb, 0xa4, 0x03, 0x50, 0x0c, 0x10, 0x50, 0xd8, 0xf7, 0x75, 0x52, 0x42, 0xe2, 0x94,\n+\t\t0x67, 0xf4, 0x60, 0xfb, 0x21, 0x9b, 0x7a, 0x05, 0x50, 0x7c, 0x1b, 0x4a, 0x8b, 0x29, 0xe1, 0xac,\n+\t\t0xd7, 0x99, 0xfd, 0x0d, 0x65, 0x92, 0xcd, 0x23, 0xa7, 0x35, 0x8e, 0x13, 0xf2, 0xe4, 0x10, 0x74,\n+\t\t0xc6, 0x4f, 0x19, 0xf7, 0x01, 0x0b, 0x46, 0xab, 0xef, 0x8d, 0x4a, 0x4a, 0xfa, 0xda, 0xf3, 0xfb,\n+\t\t0x40, 0x28, 0x88, 0xa2, 0x65, 0x98, 0x4d, 0x88, 0xc7, 0xbf, 0x00, 0xc8, 0xd0, 0x91, 0xcb, 0x89,\n+\t\t0x2f, 0xb0, 0x85, 0xfc, 0xa1, 0xc1, 0x9e, 0x83, 0x88, 0xad, 0x95, 0xc0, 0x31, 0xa0, 0xad, 0xa2,\n+\t\t0x42, 0xb5, 0xe7, 0x55, 0xd4, 0x93, 0x5a, 0x74, 0x4e, 0x41, 0xc3, 0xcf, 0x96, 0x83, 0x46, 0xa1,\n+\t\t0xb7, 0x5b, 0xb1, 0x34, 0x67, 0x4e, 0xb1, 0xd7, 0x40, 0x20, 0x72, 0xe9, 0xc8, 0x74, 0xb7, 0xde,\n+\t\t0x72, 0x29, 0x77, 0x4c, 0x74, 0x7e, 0xcc, 0x18, 0xa5, 0x8d, 0x79, 0x8c, 0xd6, 0x6e, 0xcb, 0xd9,\n+\t\t0xe1, 0x61, 0xe7, 0x36, 0xbc, 0x37, 0xea, 0xee, 0xd8, 0x3c, 0x5e, 0x7c, 0x47, 0x50, 0xd5, 0xec,\n+\t\t0x37, 0xc5, 0x63, 0xc3, 0xc9, 0x99, 0x23, 0x9f, 0x64, 0x39, 0xdf, 0x13, 0x96, 0x6d, 0xea, 0x08,\n+\t\t0x0c, 0x27, 0x2d, 0xfe, 0x0f, 0xc2, 0xa3, 0x97, 0x04, 0x12, 0x66, 0x0d, 0x94, 0xbf, 0xbe, 0x3e,\n+\t\t0xb9, 0xcf, 0x8e, 0xc1, 0x9d, 0xb1, 0x64, 0x17, 0x54, 0x92, 0x3f, 0x0a, 0x51, 0xc8, 0xf5, 0x82,\n+\t\t0x98, 0x73, 0x03, 0xc0, 0x5a, 0x51, 0x01, 0x67, 0xb4, 0x01, 0x04, 0x06, 0xbc, 0x37, 0xde, 0x96,\n+\t\t0x23, 0x3c, 0xce, 0x98, 0x3f, 0xd6, 0x51, 0x1b, 0x01, 0x83, 0x0a, 0x1c, 0xf9, 0xeb, 0x7e, 0x72,\n+\t\t0xa9, 0x51, 0x23, 0xc8, 0xd7, 0x2f, 0x12, 0xbc, 0x08, 0xac, 0x07, 0xe7, 0xa7, 0xe6, 0x46, 0xae,\n+\t\t0x54, 0xa3, 0xc2, 0xf2, 0x05, 0x2d, 0x06, 0x5e, 0xfc, 0xe2, 0xa2, 0x23, 0xac, 0x86, 0xf2, 0x54,\n+\t\t0x83, 0x4a, 0xb6, 0x48, 0x93, 0xa1, 0x78, 0xc2, 0x07, 0xec, 0x82, 0xf0, 0x74, 0xa9, 0x18, 0xe9,\n+\t\t0x53, 0x44, 0x49, 0xc2, 0x94, 0xf8, 0x94, 0x92, 0x08, 0x3f, 0xbf, 0xa6, 0xe5, 0xc6, 0x03, 0x8a,\n+\t\t0xc6, 0x90, 0x48, 0x6c, 0xee, 0xbd, 0x44, 0x92, 0x1f, 0x2a, 0xce, 0x1d, 0xb8, 0x31, 0xa2, 0x9d,\n+\t\t0x24, 0x93, 0xa8, 0x9f, 0x36, 0x00, 0x04, 0x7b, 0xcb, 0x93, 0x59, 0xa1, 0x53, 0xdb, 0x13, 0x7a,\n+\t\t0x54, 0xb1, 0x04, 0xdb, 0xce, 0x48, 0x4f, 0xe5, 0x2f, 0xcb, 0xdf, 0x8f, 0x50, 0x7c, 0xfc, 0x76,\n+\t\t0x80, 0xb4, 0xdc, 0x3b, 0xc8, 0x98, 0x95, 0xf5, 0x50, 0xba, 0x70, 0x5a, 0x97, 0xd5, 0xfc, 0x98,\n+\t\t0x4d, 0xf3, 0x61, 0x0f, 0xcf, 0xac, 0x49, 0x0a, 0xdb, 0xc1, 0x42, 0x8f, 0xb6, 0x29, 0xd5, 0x65,\n+\t\t0xef, 0x83, 0xf1, 0x30, 0x4b, 0x84, 0xd0, 0x69, 0xde, 0xd2, 0x99, 0xe5, 0xec, 0xd3, 0x90, 0x86,\n+\t\t0x39, 0x2a, 0x6e, 0xd5, 0x32, 0xe3, 0x0d, 0x2d, 0x01, 0x8b, 0x17, 0x55, 0x1d, 0x65, 0x57, 0xbf,\n+\t\t0xd8, 0x75, 0xa4, 0x85, 0xb6, 0x4e, 0x35, 0x14, 0x58, 0xe4, 0x89, 0xb8, 0x7a, 0x58, 0x86, 0x0c,\n+\t\t0xbd, 0x8b, 0x05, 0x7b, 0x63, 0xc0, 0x86, 0x80, 0x33, 0x46, 0xd4, 0x9b, 0xb6, 0x0a, 0xeb, 0x6c,\n+\t\t0xae, 0xd6, 0x57, 0x7a, 0xc7, 0x59, 0x33, 0xa0, 0xda, 0xa4, 0x12, 0xbf, 0x52, 0x22, 0x05, 0x8d,\n+\t\t0xeb, 0xee, 0xd5, 0xec, 0xea, 0x29, 0x9b, 0x76, 0x95, 0x50, 0x6d, 0x99, 0xe1, 0x45, 0x63, 0x09,\n+\t\t0x16, 0x5f, 0xb0, 0xf2, 0x5b, 0x08, 0x33, 0xdd, 0x8f, 0xb7, 0x60, 0x7a, 0x8e, 0xc6, 0xfc, 0xac,\n+\t\t0xa9, 0x56, 0x2c, 0xa9, 0x8b, 0x74, 0x33, 0xad, 0x2a, 0x7e, 0x96, 0xb6, 0xba, 0x22, 0x28, 0xcf,\n+\t\t0x4d, 0x96, 0xb7, 0xd1, 0xfa, 0x99, 0x4a, 0x61, 0xe6, 0x84, 0xd1, 0x94, 0xca, 0xf5, 0x86, 0xb0,\n+\t\t0xba, 0x34, 0x7a, 0x04, 0xcc, 0xd4, 0x81, 0xcd, 0xd9, 0x86, 0xb6, 0xe0, 0x5a, 0x6f, 0x9b, 0x99,\n+\t\t0xf0, 0xdf, 0x49, 0xae, 0x6d, 0xc2, 0x54, 0x67, 0xe0, 0xb4, 0x34, 0x2d, 0x1c, 0x46, 0xdf, 0x73,\n+\t\t0x3b, 0x45, 0x43, 0xe7, 0x1f, 0xa3, 0x36, 0x35, 0x25, 0x33, 0xd9, 0xc0, 0x54, 0x38, 0x6e, 0x6b,\n+\t\t0x80, 0xcf, 0x50, 0xa4, 0xb6, 0x21, 0x17, 0xfd, 0x9b, 0x5c, 0x36, 0xca, 0xcc, 0x73, 0x73, 0xad,\n+\t\t0xe0, 0x57, 0x77, 0x90, 0x0e, 0x7f, 0x0f, 0x87, 0x7f, 0xdb, 0x73, 0xbf, 0xda, 0xc2, 0xb3, 0x05,\n+\t\t0x22, 0x06, 0xf5, 0xa3, 0xfc, 0x1e, 0x8f, 0xda, 0xcf, 0x49, 0xd6, 0xb3, 0x66, 0x2c, 0xb5, 0x00,\n+\t\t0xaf, 0x85, 0x6e, 0xb8, 0x5b, 0x8c, 0xa1, 0xa4, 0x21, 0xce, 0x40, 0xf3, 0x98, 0xac, 0xec, 0x88,\n+\t\t0x62, 0x43, 0x2a, 0xac, 0xca, 0xcf, 0xb9, 0x30, 0xeb, 0xfc, 0xef, 0xf0, 0x6e, 0x64, 0x6d, 0xe7,\n+\t\t0x54, 0x88, 0x6b, 0x22, 0x29, 0xbe, 0xa5, 0x8c, 0x31, 0x23, 0x3b, 0x4a, 0x80, 0x37, 0xe6, 0xd0,\n+\t\t0x05, 0xfc, 0x10, 0x0e, 0xdd, 0xbb, 0x00, 0xc5, 0x07, 0x20, 0x59, 0xd3, 0x41, 0x17, 0x86, 0x46,\n+\t\t0xab, 0x68, 0xf6, 0x48, 0x3c, 0xea, 0x5a, 0x06, 0x30, 0x21, 0x19, 0xed, 0x74, 0xbe, 0x0b, 0x97,\n+\t\t0xee, 0x91, 0x35, 0x94, 0x1f, 0xcb, 0x68, 0x7f, 0xe4, 0x48, 0xb0, 0x16, 0xfb, 0xf0, 0x74, 0xdb,\n+\t\t0x06, 0x59, 0x2e, 0x5a, 0x9c, 0xce, 0x8f, 0x7d, 0xba, 0x48, 0xd5, 0x3f, 0x5c, 0xb0, 0xc2, 0x33,\n+\t\t0x48, 0x60, 0x17, 0x08, 0x85, 0xba, 0xff, 0xb9, 0x34, 0x0a, 0x3d, 0x8f, 0x21, 0x13, 0x12, 0x1b\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_1536B[] = {\n+\t\t0x89, 0x93, 0x05, 0x99, 0xa9, 0xed, 0xea, 0x62, 0xc9, 0xda, 0x51, 0x15, 0xce, 0x42, 0x91, 0xc3,\n+\t\t0x80, 0xc8, 0x03, 0x88, 0xc2, 0x63, 0xda, 0x53, 0x1a, 0xf3, 0xeb, 0xd5, 0xba, 0x6f, 0x23, 0xb2,\n+\t\t0xed, 0x8f, 0x89, 0xb1, 0xb3, 0xca, 0x90, 0x7a, 0xdd, 0x3f, 0xf6, 0xca, 0x86, 0x58, 0x54, 0xbc,\n+\t\t0xab, 0x0f, 0xf4, 0xab, 0x6d, 0x5d, 0x42, 0xd0, 0x17, 0x49, 0x17, 0xd1, 0x93, 0xea, 0xe8, 0x22,\n+\t\t0xc1, 0x34, 0x9f, 0x3a, 0x3b, 0xaa, 0xe9, 0x1b, 0x93, 0xff, 0x6b, 0x68, 0xba, 0xe6, 0xd2, 0x39,\n+\t\t0x3d, 0x55, 0x34, 0x8f, 0x98, 0x86, 0xb4, 0xd8, 0x7c, 0x0d, 0x3e, 0x01, 0x63, 0x04, 0x01, 0xff,\n+\t\t0x16, 0x0f, 0x51, 0x5f, 0x73, 0x53, 0xf0, 0x3a, 0x38, 0xb4, 0x4d, 0x8d, 0xaf, 0xa3, 0xca, 0x2f,\n+\t\t0x6f, 0xdf, 0xc0, 0x41, 0x6c, 0x48, 0x60, 0x1a, 0xe4, 0xe7, 0x8a, 0x65, 0x6f, 0x8d, 0xd7, 0xe1,\n+\t\t0x10, 0xab, 0x78, 0x5b, 0xb9, 0x69, 0x1f, 0xe0, 0x5c, 0xf1, 0x19, 0x12, 0x21, 0xc7, 0x51, 0xbc,\n+\t\t0x61, 0x5f, 0xc0, 0x36, 0x17, 0xc0, 0x28, 0xd9, 0x51, 0xcb, 0x43, 0xd9, 0xfa, 0xd1, 0xad, 0x79,\n+\t\t0x69, 0x86, 0x49, 0xc5, 0xe5, 0x69, 0x27, 0xce, 0x22, 0xd0, 0xe1, 0x6a, 0xf9, 0x02, 0xca, 0x6c,\n+\t\t0x34, 0xc7, 0xb8, 0x02, 0xc1, 0x38, 0x7f, 0xd5, 0x15, 0xf5, 0xd6, 0xeb, 0xf9, 0x30, 0x40, 0x43,\n+\t\t0xea, 0x87, 0xde, 0x35, 0xf6, 0x83, 0x59, 0x09, 0x68, 0x62, 0x00, 0x87, 0xb8, 0xe7, 0xca, 0x05,\n+\t\t0x0f, 0xac, 0x42, 0x58, 0x45, 0xaa, 0xc9, 0x9b, 0xfd, 0x2a, 0xda, 0x65, 0x33, 0x93, 0x9d, 0xc6,\n+\t\t0x93, 0x8d, 0xe2, 0xc5, 0x71, 0xc1, 0x5c, 0x13, 0xde, 0x7b, 0xd4, 0xb9, 0x4c, 0x35, 0x61, 0x85,\n+\t\t0x90, 0x78, 0xf7, 0x81, 0x98, 0x45, 0x99, 0x24, 0x58, 0x73, 0x28, 0xf8, 0x31, 0xab, 0x54, 0x2e,\n+\t\t0xc0, 0x38, 0x77, 0x25, 0x5c, 0x06, 0x9c, 0xc3, 0x69, 0x21, 0x92, 0x76, 0xe1, 0x16, 0xdc, 0xa9,\n+\t\t0xee, 0xb6, 0x80, 0x66, 0x43, 0x11, 0x24, 0xb3, 0x07, 0x17, 0x89, 0x0f, 0xcb, 0xe0, 0x60, 0xa8,\n+\t\t0x9d, 0x06, 0x4b, 0x6e, 0x72, 0xb7, 0xbc, 0x4f, 0xb8, 0xc0, 0x80, 0xa2, 0xfb, 0x46, 0x5b, 0x8f,\n+\t\t0x11, 0x01, 0x92, 0x9d, 0x37, 0x09, 0x98, 0xc8, 0x0a, 0x46, 0xae, 0x12, 0xac, 0x61, 0x3f, 0xe7,\n+\t\t0x41, 0x1a, 0xaa, 0x2e, 0xdc, 0xd7, 0x2a, 0x47, 0xee, 0xdf, 0x08, 0xd1, 0xff, 0xea, 0x13, 0xc6,\n+\t\t0x05, 0xdb, 0x29, 0xcc, 0x03, 0xba, 0x7b, 0x6d, 0x40, 0xc1, 0xc9, 0x76, 0x75, 0x03, 0x7a, 0x71,\n+\t\t0xc9, 0x5f, 0xd9, 0xe0, 0x61, 0x69, 0x36, 0x8f, 0xb2, 0xbc, 0x28, 0xf3, 0x90, 0x71, 0xda, 0x5f,\n+\t\t0x08, 0xd5, 0x0d, 0xc1, 0xe6, 0xbd, 0x2b, 0xc6, 0x6c, 0x42, 0xfd, 0xbf, 0x10, 0xe8, 0x5f, 0x87,\n+\t\t0x3d, 0x21, 0x42, 0x85, 0x01, 0x0a, 0xbf, 0x8e, 0x49, 0xd3, 0x9c, 0x89, 0x3b, 0xea, 0xe1, 0xbf,\n+\t\t0xe9, 0x9b, 0x5e, 0x0e, 0xb8, 0xeb, 0xcd, 0x3a, 0xf6, 0x29, 0x41, 0x35, 0xdd, 0x9b, 0x13, 0x24,\n+\t\t0xe0, 0x1d, 0x8a, 0xcb, 0x20, 0xf8, 0x41, 0x51, 0x3e, 0x23, 0x8c, 0x67, 0x98, 0x39, 0x53, 0x77,\n+\t\t0x2a, 0x68, 0xf4, 0x3c, 0x7e, 0xd6, 0xc4, 0x6e, 0xf1, 0x53, 0xe9, 0xd8, 0x5c, 0xc1, 0xa9, 0x38,\n+\t\t0x6f, 0x5e, 0xe4, 0xd4, 0x29, 0x1c, 0x6c, 0xee, 0x2f, 0xea, 0xde, 0x61, 0x71, 0x5a, 0xea, 0xce,\n+\t\t0x23, 0x6e, 0x1b, 0x16, 0x43, 0xb7, 0xc0, 0xe3, 0x87, 0xa1, 0x95, 0x1e, 0x97, 0x4d, 0xea, 0xa6,\n+\t\t0xf7, 0x25, 0xac, 0x82, 0x2a, 0xd3, 0xa6, 0x99, 0x75, 0xdd, 0xc1, 0x55, 0x32, 0x6b, 0xea, 0x33,\n+\t\t0x88, 0xce, 0x06, 0xac, 0x15, 0x39, 0x19, 0xa3, 0x59, 0xaf, 0x7a, 0x1f, 0xd9, 0x72, 0x5e, 0xf7,\n+\t\t0x4c, 0xf3, 0x5d, 0x6b, 0xf2, 0x16, 0x92, 0xa8, 0x9e, 0x3d, 0xd4, 0x4c, 0x72, 0x55, 0x4e, 0x4a,\n+\t\t0xf7, 0x8b, 0x2f, 0x67, 0x5a, 0x90, 0xb7, 0xcf, 0x16, 0xd3, 0x7b, 0x5a, 0x9a, 0xc8, 0x9f, 0xbf,\n+\t\t0x01, 0x76, 0x3b, 0x86, 0x2c, 0x2a, 0x78, 0x10, 0x70, 0x05, 0x38, 0xf9, 0xdd, 0x2a, 0x1d, 0x00,\n+\t\t0x25, 0xb7, 0x10, 0xac, 0x3b, 0x3c, 0x4d, 0x3c, 0x01, 0x68, 0x3c, 0x5a, 0x29, 0xc2, 0xa0, 0x1b,\n+\t\t0x95, 0x67, 0xf9, 0x0a, 0x60, 0xb7, 0x11, 0x9c, 0x40, 0x45, 0xd7, 0xb0, 0xda, 0x49, 0x87, 0xcd,\n+\t\t0xb0, 0x9b, 0x61, 0x8c, 0xf4, 0x0d, 0x94, 0x1d, 0x79, 0x66, 0x13, 0x0b, 0xc6, 0x6b, 0x19, 0xee,\n+\t\t0xa0, 0x6b, 0x64, 0x7d, 0xc4, 0xff, 0x98, 0x72, 0x60, 0xab, 0x7f, 0x0f, 0x4d, 0x5d, 0x6b, 0xc3,\n+\t\t0xba, 0x5e, 0x0d, 0x04, 0xd9, 0x59, 0x17, 0xd0, 0x64, 0xbe, 0xfb, 0x58, 0xfc, 0xed, 0x18, 0xf6,\n+\t\t0xac, 0x19, 0xa4, 0xfd, 0x16, 0x59, 0x80, 0x58, 0xb8, 0x0f, 0x79, 0x24, 0x60, 0x18, 0x62, 0xa9,\n+\t\t0xa3, 0xa0, 0xe8, 0x81, 0xd6, 0xec, 0x5b, 0xfe, 0x5b, 0xb8, 0xa4, 0x00, 0xa9, 0xd0, 0x90, 0x17,\n+\t\t0xe5, 0x50, 0x3d, 0x2b, 0x12, 0x6e, 0x2a, 0x13, 0x65, 0x7c, 0xdf, 0xdf, 0xa7, 0xdd, 0x9f, 0x78,\n+\t\t0x5f, 0x8f, 0x4e, 0x90, 0xa6, 0x10, 0xe4, 0x7b, 0x68, 0x6b, 0xfd, 0xa9, 0x6d, 0x47, 0xfa, 0xec,\n+\t\t0x42, 0x35, 0x07, 0x12, 0x3e, 0x78, 0x23, 0x15, 0xff, 0xe2, 0x65, 0xc7, 0x47, 0x89, 0x2f, 0x97,\n+\t\t0x7c, 0xd7, 0x6b, 0x69, 0x35, 0x79, 0x6f, 0x85, 0xb4, 0xa9, 0x75, 0x04, 0x32, 0x9a, 0xfe, 0xf0,\n+\t\t0xce, 0xe3, 0xf1, 0xab, 0x15, 0x47, 0xe4, 0x9c, 0xc1, 0x48, 0x32, 0x3c, 0xbe, 0x44, 0x72, 0xc9,\n+\t\t0xaa, 0x50, 0x37, 0xa6, 0xbe, 0x41, 0xcf, 0xe8, 0x17, 0x4e, 0x37, 0xbe, 0xf1, 0x34, 0x2c, 0xd9,\n+\t\t0x60, 0x48, 0x09, 0xa5, 0x26, 0x00, 0x31, 0x77, 0x4e, 0xac, 0x7c, 0x89, 0x75, 0xe3, 0xde, 0x26,\n+\t\t0x4c, 0x32, 0x54, 0x27, 0x8e, 0x92, 0x26, 0x42, 0x85, 0x76, 0x01, 0x76, 0x62, 0x4c, 0x29, 0xe9,\n+\t\t0x38, 0x05, 0x51, 0x54, 0x97, 0xa3, 0x03, 0x59, 0x5e, 0xec, 0x0c, 0xe4, 0x96, 0xb7, 0x15, 0xa8,\n+\t\t0x41, 0x06, 0x2b, 0x78, 0x95, 0x24, 0xf6, 0x32, 0xc5, 0xec, 0xd7, 0x89, 0x28, 0x1e, 0xec, 0xb1,\n+\t\t0xc7, 0x21, 0x0c, 0xd3, 0x80, 0x7c, 0x5a, 0xe6, 0xb1, 0x3a, 0x52, 0x33, 0x84, 0x4e, 0x32, 0x6e,\n+\t\t0x7a, 0xf6, 0x43, 0x15, 0x5b, 0xa6, 0xba, 0xeb, 0xa8, 0xe4, 0xff, 0x4f, 0xbd, 0xbd, 0xa8, 0x5e,\n+\t\t0xbe, 0x27, 0xaf, 0xc5, 0xf7, 0x9e, 0xdf, 0x48, 0x22, 0xca, 0x6a, 0x0b, 0x3c, 0xd7, 0xe0, 0xdc,\n+\t\t0xf3, 0x71, 0x08, 0xdc, 0x28, 0x13, 0x08, 0xf2, 0x08, 0x1d, 0x9d, 0x7b, 0xd9, 0xde, 0x6f, 0xe6,\n+\t\t0xe8, 0x88, 0x18, 0xc2, 0xcd, 0x93, 0xc5, 0x38, 0x21, 0x68, 0x4c, 0x9a, 0xfb, 0xb6, 0x18, 0x16,\n+\t\t0x73, 0x2c, 0x1d, 0x6f, 0x95, 0xfb, 0x65, 0x4f, 0x7c, 0xec, 0x8d, 0x6c, 0xa8, 0xc0, 0x55, 0x28,\n+\t\t0xc6, 0xc3, 0xea, 0xeb, 0x05, 0xf5, 0x65, 0xeb, 0x53, 0xe1, 0x54, 0xef, 0xb8, 0x64, 0x98, 0x2d,\n+\t\t0x98, 0x9e, 0xc8, 0xfe, 0xa2, 0x07, 0x30, 0xf7, 0xf7, 0xae, 0xdb, 0x32, 0xf8, 0x71, 0x9d, 0x06,\n+\t\t0xdf, 0x9b, 0xda, 0x61, 0x7d, 0xdb, 0xae, 0x06, 0x24, 0x63, 0x74, 0xb6, 0xf3, 0x1b, 0x66, 0x09,\n+\t\t0x60, 0xff, 0x2b, 0x29, 0xf5, 0xa9, 0x9d, 0x61, 0x5d, 0x55, 0x10, 0x82, 0x21, 0xbb, 0x64, 0x0d,\n+\t\t0xef, 0x5c, 0xe3, 0x30, 0x1b, 0x60, 0x1e, 0x5b, 0xfe, 0x6c, 0xf5, 0x15, 0xa3, 0x86, 0x27, 0x58,\n+\t\t0x46, 0x00, 0x20, 0xcb, 0x86, 0x9a, 0x52, 0x29, 0x20, 0x68, 0x4d, 0x67, 0x88, 0x70, 0xc2, 0x31,\n+\t\t0xd8, 0xbb, 0xa5, 0xa7, 0x88, 0x7f, 0x66, 0xbc, 0xaa, 0x0f, 0xe1, 0x78, 0x7b, 0x97, 0x3c, 0xb7,\n+\t\t0xd7, 0xd8, 0x04, 0xe0, 0x09, 0x60, 0xc8, 0xd0, 0x9e, 0xe5, 0x6b, 0x31, 0x7f, 0x88, 0xfe, 0xc3,\n+\t\t0xfd, 0x89, 0xec, 0x76, 0x4b, 0xb3, 0xa7, 0x37, 0x03, 0xb7, 0xc6, 0x10, 0x7c, 0x9d, 0x0c, 0x75,\n+\t\t0xd3, 0x08, 0x14, 0x94, 0x03, 0x42, 0x25, 0x26, 0x85, 0xf7, 0xf0, 0x90, 0x06, 0x3e, 0x6f, 0x60,\n+\t\t0x52, 0x55, 0xd5, 0x0f, 0x79, 0x64, 0x69, 0x69, 0x46, 0xf9, 0x7f, 0x7f, 0x03, 0xf1, 0x1f, 0xdb,\n+\t\t0x39, 0x05, 0xba, 0x4a, 0x8f, 0x17, 0xe7, 0xba, 0xe2, 0x07, 0x7c, 0x1d, 0x9e, 0xbc, 0x94, 0xc0,\n+\t\t0x61, 0x59, 0x8e, 0x72, 0xaf, 0xfc, 0x99, 0xe4, 0xd5, 0xa8, 0xee, 0x0a, 0x48, 0x2d, 0x82, 0x8b,\n+\t\t0x34, 0x54, 0x8a, 0xce, 0xc7, 0xfa, 0xdd, 0xba, 0x54, 0xdf, 0xb3, 0x30, 0x33, 0x73, 0x2e, 0xd5,\n+\t\t0x52, 0xab, 0x49, 0x91, 0x4e, 0x0a, 0xd6, 0x2f, 0x67, 0xe4, 0xdd, 0x64, 0x48, 0x16, 0xd9, 0x85,\n+\t\t0xaa, 0x52, 0xa5, 0x0b, 0xd3, 0xb4, 0x2d, 0x77, 0x5e, 0x52, 0x77, 0x17, 0xcf, 0xbe, 0x88, 0x04,\n+\t\t0x01, 0x52, 0xe2, 0xf1, 0x46, 0xe2, 0x91, 0x30, 0x65, 0xcf, 0xc0, 0x65, 0x45, 0xc3, 0x7e, 0xf4,\n+\t\t0x2e, 0xb5, 0xaf, 0x6f, 0xab, 0x1a, 0xfa, 0x70, 0x35, 0xb8, 0x4f, 0x2d, 0x78, 0x90, 0x33, 0xb5,\n+\t\t0x9a, 0x67, 0xdb, 0x2f, 0x28, 0x32, 0xb6, 0x54, 0xab, 0x4c, 0x6b, 0x85, 0xed, 0x6c, 0x3e, 0x05,\n+\t\t0x2a, 0xc7, 0x32, 0xe8, 0xf5, 0xa3, 0x7b, 0x4e, 0x7b, 0x58, 0x24, 0x73, 0xf7, 0xfd, 0xc7, 0xc8,\n+\t\t0x6c, 0x71, 0x68, 0xb1, 0xf6, 0xc5, 0x9e, 0x1e, 0xe3, 0x5c, 0x25, 0xc0, 0x5b, 0x3e, 0x59, 0xa1,\n+\t\t0x18, 0x5a, 0xe8, 0xb5, 0xd1, 0x44, 0x13, 0xa3, 0xe6, 0x05, 0x76, 0xd2, 0x8d, 0x6e, 0x54, 0x68,\n+\t\t0x0c, 0xa4, 0x7b, 0x8b, 0xd3, 0x8c, 0x42, 0x13, 0x87, 0xda, 0xdf, 0x8f, 0xa5, 0x83, 0x7a, 0x42,\n+\t\t0x99, 0xb7, 0xeb, 0xe2, 0x79, 0xe0, 0xdb, 0xda, 0x33, 0xa8, 0x50, 0x3a, 0xd7, 0xe7, 0xd3, 0x61,\n+\t\t0x18, 0xb8, 0xaa, 0x2d, 0xc8, 0xd8, 0x2c, 0x28, 0xe5, 0x97, 0x0a, 0x7c, 0x6c, 0x7f, 0x09, 0xd7,\n+\t\t0x88, 0x80, 0xac, 0x12, 0xed, 0xf8, 0xc6, 0xb5, 0x2d, 0xd6, 0x63, 0x9b, 0x98, 0x35, 0x26, 0xde,\n+\t\t0xf6, 0x31, 0xee, 0x7e, 0xa0, 0xfb, 0x16, 0x98, 0xb1, 0x96, 0x1d, 0xee, 0xe3, 0x2f, 0xfb, 0x41,\n+\t\t0xdd, 0xea, 0x10, 0x1e, 0x03, 0x89, 0x18, 0xd2, 0x47, 0x0c, 0xa0, 0x57, 0xda, 0x76, 0x3a, 0x37,\n+\t\t0x2c, 0xe4, 0xf9, 0x77, 0xc8, 0x43, 0x5f, 0xcb, 0xd6, 0x85, 0xf7, 0x22, 0xe4, 0x32, 0x25, 0xa8,\n+\t\t0xdc, 0x21, 0xc0, 0xf5, 0x95, 0xb2, 0xf8, 0x83, 0xf0, 0x65, 0x61, 0x15, 0x48, 0x94, 0xb7, 0x03,\n+\t\t0x7f, 0x66, 0xa1, 0x39, 0x1f, 0xdd, 0xce, 0x96, 0xfe, 0x58, 0x81, 0x3d, 0x41, 0x11, 0x87, 0x13,\n+\t\t0x26, 0x1b, 0x6d, 0xf3, 0xca, 0x2e, 0x2c, 0x76, 0xd3, 0x2f, 0x6d, 0x49, 0x70, 0x53, 0x05, 0x96,\n+\t\t0xcc, 0x30, 0x2b, 0x83, 0xf2, 0xc6, 0xb2, 0x4b, 0x22, 0x13, 0x95, 0x42, 0xeb, 0x56, 0x4d, 0x22,\n+\t\t0xe6, 0x43, 0x6f, 0xba, 0xe7, 0x3b, 0xe5, 0x59, 0xce, 0x57, 0x88, 0x85, 0xb6, 0xbf, 0x15, 0x37,\n+\t\t0xb3, 0x7a, 0x7e, 0xc4, 0xbc, 0x99, 0xfc, 0xe4, 0x89, 0x00, 0x68, 0x39, 0xbc, 0x5a, 0xba, 0xab,\n+\t\t0x52, 0xab, 0xe6, 0x81, 0xfd, 0x93, 0x62, 0xe9, 0xb7, 0x12, 0xd1, 0x18, 0x1a, 0xb9, 0x55, 0x4a,\n+\t\t0x0f, 0xae, 0x35, 0x11, 0x04, 0x27, 0xf3, 0x42, 0x4e, 0xca, 0xdf, 0x9f, 0x12, 0x62, 0xea, 0x03,\n+\t\t0xc0, 0xa9, 0x22, 0x7b, 0x6c, 0x6c, 0xe3, 0xdf, 0x16, 0xad, 0x03, 0xc9, 0xfe, 0xa4, 0xdd, 0x4f\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_1792B[] = {\n+\t\t0x59, 0xcc, 0xfe, 0x8f, 0xb4, 0x9d, 0x0e, 0xd1, 0x85, 0xfc, 0x9b, 0x43, 0xc1, 0xb7, 0x54, 0x67,\n+\t\t0x01, 0xef, 0xb8, 0x71, 0x36, 0xdb, 0x50, 0x48, 0x7a, 0xea, 0xcf, 0xce, 0xba, 0x30, 0x10, 0x2e,\n+\t\t0x96, 0x2b, 0xfd, 0xcf, 0x00, 0xe3, 0x1f, 0xac, 0x66, 0x14, 0x30, 0x86, 0x49, 0xdb, 0x01, 0x8b,\n+\t\t0x07, 0xdd, 0x00, 0x9d, 0x0d, 0x5c, 0x19, 0x11, 0xe8, 0x44, 0x2b, 0x25, 0x70, 0xed, 0x7c, 0x33,\n+\t\t0x0d, 0xe3, 0x34, 0x93, 0x63, 0xad, 0x26, 0xb1, 0x11, 0x91, 0x34, 0x2e, 0x1d, 0x50, 0xaa, 0xd4,\n+\t\t0xef, 0x3a, 0x6d, 0xd7, 0x33, 0x20, 0x0d, 0x3f, 0x9b, 0xdd, 0xc3, 0xa5, 0xc5, 0xf1, 0x99, 0xdc,\n+\t\t0xea, 0x52, 0xda, 0x55, 0xea, 0xa2, 0x7a, 0xc5, 0x78, 0x44, 0x4a, 0x02, 0x33, 0x19, 0x62, 0x37,\n+\t\t0xf8, 0x8b, 0xd1, 0x0c, 0x21, 0xdf, 0x40, 0x19, 0x81, 0xea, 0xfb, 0x1c, 0xa7, 0xcc, 0x60, 0xfe,\n+\t\t0x63, 0x25, 0x8f, 0xf3, 0x73, 0x0f, 0x45, 0xe6, 0x6a, 0x18, 0xbf, 0xbe, 0xad, 0x92, 0x2a, 0x1e,\n+\t\t0x15, 0x65, 0x6f, 0xef, 0x92, 0xcd, 0x0e, 0x19, 0x3d, 0x42, 0xa8, 0xfc, 0x0d, 0x32, 0x58, 0xe0,\n+\t\t0x56, 0x9f, 0xd6, 0x9b, 0x8b, 0xec, 0xe0, 0x45, 0x4d, 0x7e, 0x73, 0x87, 0xff, 0x74, 0x92, 0x59,\n+\t\t0x60, 0x13, 0x93, 0xda, 0xec, 0xbf, 0xfa, 0x20, 0xb6, 0xe7, 0xdf, 0xc7, 0x10, 0xf5, 0x79, 0xb4,\n+\t\t0xd7, 0xac, 0xaf, 0x2b, 0x37, 0x52, 0x30, 0x1d, 0xbe, 0x0f, 0x60, 0x77, 0x3d, 0x03, 0x63, 0xa9,\n+\t\t0xae, 0xb1, 0xf3, 0xca, 0xca, 0xb4, 0x21, 0xd7, 0x6f, 0x2e, 0x5e, 0x9b, 0x68, 0x53, 0x80, 0xab,\n+\t\t0x30, 0x23, 0x0a, 0x72, 0x6b, 0xb1, 0xd8, 0x25, 0x5d, 0x3a, 0x62, 0x9b, 0x4f, 0x59, 0x3b, 0x79,\n+\t\t0xa8, 0x9e, 0x08, 0x6d, 0x37, 0xb0, 0xfc, 0x42, 0x51, 0x25, 0x86, 0xbd, 0x54, 0x5a, 0x95, 0x20,\n+\t\t0x6c, 0xac, 0xb9, 0x30, 0x1c, 0x03, 0xc9, 0x49, 0x38, 0x55, 0x31, 0x49, 0xed, 0xa9, 0x0e, 0xc3,\n+\t\t0x65, 0xb4, 0x68, 0x6b, 0x07, 0x4c, 0x0a, 0xf9, 0x21, 0x69, 0x7c, 0x9f, 0x28, 0x80, 0xe9, 0x49,\n+\t\t0x22, 0x7c, 0xec, 0x97, 0xf7, 0x70, 0xb4, 0xb8, 0x25, 0xe7, 0x80, 0x2c, 0x43, 0x24, 0x8a, 0x2e,\n+\t\t0xac, 0xa2, 0x84, 0x20, 0xe7, 0xf4, 0x6b, 0x86, 0x37, 0x05, 0xc7, 0x59, 0x04, 0x49, 0x2a, 0x99,\n+\t\t0x80, 0x46, 0x32, 0x19, 0xe6, 0x30, 0xce, 0xc0, 0xef, 0x6e, 0xec, 0xe5, 0x2f, 0x24, 0xc1, 0x78,\n+\t\t0x45, 0x02, 0xd3, 0x64, 0x99, 0xf5, 0xc7, 0xbc, 0x8f, 0x8c, 0x75, 0xb1, 0x0a, 0xc8, 0xc3, 0xbd,\n+\t\t0x5e, 0x7e, 0xbd, 0x0e, 0xdf, 0x4b, 0x96, 0x6a, 0xfd, 0x03, 0xdb, 0xd1, 0x31, 0x1e, 0x27, 0xf9,\n+\t\t0xe5, 0x83, 0x9a, 0xfc, 0x13, 0x4c, 0xd3, 0x04, 0xdb, 0xdb, 0x3f, 0x35, 0x93, 0x4e, 0x14, 0x6b,\n+\t\t0x00, 0x5c, 0xb6, 0x11, 0x50, 0xee, 0x61, 0x5c, 0x10, 0x5c, 0xd0, 0x90, 0x02, 0x2e, 0x12, 0xe0,\n+\t\t0x50, 0x44, 0xad, 0x75, 0xcd, 0x94, 0xcf, 0x92, 0xcb, 0xe3, 0xe8, 0x77, 0x4b, 0xd7, 0x1a, 0x7c,\n+\t\t0xdd, 0x6b, 0x49, 0x21, 0x7c, 0xe8, 0x2c, 0x25, 0x49, 0x86, 0x1e, 0x54, 0xae, 0xfc, 0x0e, 0x80,\n+\t\t0xb1, 0xd5, 0xa5, 0x23, 0xcf, 0xcc, 0x0e, 0x11, 0xe2, 0x7c, 0x3c, 0x25, 0x78, 0x64, 0x03, 0xa1,\n+\t\t0xdd, 0x9f, 0x74, 0x12, 0x7b, 0x21, 0xb5, 0x73, 0x15, 0x3c, 0xed, 0xad, 0x07, 0x62, 0x21, 0x79,\n+\t\t0xd4, 0x2f, 0x0d, 0x72, 0xe9, 0x7c, 0x6b, 0x96, 0x6e, 0xe5, 0x36, 0x4a, 0xd2, 0x38, 0xe1, 0xff,\n+\t\t0x6e, 0x26, 0xa4, 0xac, 0x83, 0x07, 0xe6, 0x67, 0x74, 0x6c, 0xec, 0x8b, 0x4b, 0x79, 0x33, 0x50,\n+\t\t0x2f, 0x8f, 0xa0, 0x8f, 0xfa, 0x38, 0x6a, 0xa2, 0x3a, 0x42, 0x85, 0x15, 0x90, 0xd0, 0xb3, 0x0d,\n+\t\t0x8a, 0xe4, 0x60, 0x03, 0xef, 0xf9, 0x65, 0x8a, 0x4e, 0x50, 0x8c, 0x65, 0xba, 0x61, 0x16, 0xc3,\n+\t\t0x93, 0xb7, 0x75, 0x21, 0x98, 0x25, 0x60, 0x6e, 0x3d, 0x68, 0xba, 0x7c, 0xe4, 0xf3, 0xd9, 0x9b,\n+\t\t0xfb, 0x7a, 0xed, 0x1f, 0xb3, 0x4b, 0x88, 0x74, 0x2c, 0xb8, 0x8c, 0x22, 0x95, 0xce, 0x90, 0xf1,\n+\t\t0xdb, 0x80, 0xa6, 0x39, 0xae, 0x82, 0xa1, 0xef, 0x75, 0xec, 0xfe, 0xf1, 0xe8, 0x04, 0xfd, 0x99,\n+\t\t0x1b, 0x5f, 0x45, 0x87, 0x4f, 0xfa, 0xa2, 0x3e, 0x3e, 0xb5, 0x01, 0x4b, 0x46, 0xeb, 0x13, 0x9a,\n+\t\t0xe4, 0x7d, 0x03, 0x87, 0xb1, 0x59, 0x91, 0x8e, 0x37, 0xd3, 0x16, 0xce, 0xef, 0x4b, 0xe9, 0x46,\n+\t\t0x8d, 0x2a, 0x50, 0x2f, 0x41, 0xd3, 0x7b, 0xcf, 0xf0, 0xb7, 0x8b, 0x65, 0x0f, 0xa3, 0x27, 0x10,\n+\t\t0xe9, 0xa9, 0xe9, 0x2c, 0xbe, 0xbb, 0x82, 0xe3, 0x7b, 0x0b, 0x81, 0x3e, 0xa4, 0x6a, 0x4f, 0x3b,\n+\t\t0xd5, 0x61, 0xf8, 0x47, 0x04, 0x99, 0x5b, 0xff, 0xf3, 0x14, 0x6e, 0x57, 0x5b, 0xbf, 0x1b, 0xb4,\n+\t\t0x3f, 0xf9, 0x31, 0xf6, 0x95, 0xd5, 0x10, 0xa9, 0x72, 0x28, 0x23, 0xa9, 0x6a, 0xa2, 0xcf, 0x7d,\n+\t\t0xe3, 0x18, 0x95, 0xda, 0xbc, 0x6f, 0xe9, 0xd8, 0xef, 0x49, 0x3f, 0xd3, 0xef, 0x1f, 0xe1, 0x50,\n+\t\t0xe8, 0x8a, 0xc0, 0xce, 0xcc, 0xb7, 0x5e, 0x0e, 0x8b, 0x95, 0x80, 0xfd, 0x58, 0x2a, 0x9b, 0xc8,\n+\t\t0xb4, 0x17, 0x04, 0x46, 0x74, 0xd4, 0x68, 0x91, 0x33, 0xc8, 0x31, 0x15, 0x84, 0x16, 0x35, 0x03,\n+\t\t0x64, 0x6d, 0xa9, 0x4e, 0x20, 0xeb, 0xa9, 0x3f, 0x21, 0x5e, 0x9b, 0x09, 0xc3, 0x45, 0xf8, 0x7c,\n+\t\t0x59, 0x62, 0x29, 0x9a, 0x5c, 0xcf, 0xb4, 0x27, 0x5e, 0x13, 0xea, 0xb3, 0xef, 0xd9, 0x01, 0x2a,\n+\t\t0x65, 0x5f, 0x14, 0xf4, 0xbf, 0x28, 0x89, 0x3d, 0xdd, 0x9d, 0x52, 0xbd, 0x9e, 0x5b, 0x3b, 0xd2,\n+\t\t0xc2, 0x81, 0x35, 0xb6, 0xac, 0xdd, 0x27, 0xc3, 0x7b, 0x01, 0x5a, 0x6d, 0x4c, 0x5e, 0x2c, 0x30,\n+\t\t0xcb, 0x3a, 0xfa, 0xc1, 0xd7, 0x31, 0x67, 0x3e, 0x08, 0x6a, 0xe8, 0x8c, 0x75, 0xac, 0x1a, 0x6a,\n+\t\t0x52, 0xf7, 0x51, 0xcd, 0x85, 0x3f, 0x3c, 0xa7, 0xea, 0xbc, 0xd7, 0x18, 0x9e, 0x27, 0x73, 0xe6,\n+\t\t0x2b, 0x58, 0xb6, 0xd2, 0x29, 0x68, 0xd5, 0x8f, 0x00, 0x4d, 0x55, 0xf6, 0x61, 0x5a, 0xcc, 0x51,\n+\t\t0xa6, 0x5e, 0x85, 0xcb, 0x0b, 0xfd, 0x06, 0xca, 0xf5, 0xbf, 0x0d, 0x13, 0x74, 0x78, 0x6d, 0x9e,\n+\t\t0x20, 0x11, 0x84, 0x3e, 0x78, 0x17, 0x04, 0x4f, 0x64, 0x2c, 0x3b, 0x3e, 0x93, 0x7b, 0x58, 0x33,\n+\t\t0x07, 0x52, 0xf7, 0x60, 0x6a, 0xa8, 0x3b, 0x19, 0x27, 0x7a, 0x93, 0xc5, 0x53, 0xad, 0xec, 0xf6,\n+\t\t0xc8, 0x94, 0xee, 0x92, 0xea, 0xee, 0x7e, 0xea, 0xb9, 0x5f, 0xac, 0x59, 0x5d, 0x2e, 0x78, 0x53,\n+\t\t0x72, 0x81, 0x92, 0xdd, 0x1c, 0x63, 0xbe, 0x02, 0xeb, 0xa8, 0x1b, 0x2a, 0x6e, 0x72, 0xe3, 0x2d,\n+\t\t0x84, 0x0d, 0x8a, 0x22, 0xf6, 0xba, 0xab, 0x04, 0x8e, 0x04, 0x24, 0xdb, 0xcc, 0xe2, 0x69, 0xeb,\n+\t\t0x4e, 0xfa, 0x6b, 0x5b, 0xc8, 0xc0, 0xd9, 0x25, 0xcb, 0x40, 0x8d, 0x4b, 0x8e, 0xa0, 0xd4, 0x72,\n+\t\t0x98, 0x36, 0x46, 0x3b, 0x4f, 0x5f, 0x96, 0x84, 0x03, 0x28, 0x86, 0x4d, 0xa1, 0x8a, 0xd7, 0xb2,\n+\t\t0x5b, 0x27, 0x01, 0x80, 0x62, 0x49, 0x56, 0xb9, 0xa0, 0xa1, 0xe3, 0x6e, 0x22, 0x2a, 0x5d, 0x03,\n+\t\t0x86, 0x40, 0x36, 0x22, 0x5e, 0xd2, 0xe5, 0xc0, 0x6b, 0xfa, 0xac, 0x80, 0x4e, 0x09, 0x99, 0xbc,\n+\t\t0x2f, 0x9b, 0xcc, 0xf3, 0x4e, 0xf7, 0x99, 0x98, 0x11, 0x6e, 0x6f, 0x62, 0x22, 0x6b, 0x92, 0x95,\n+\t\t0x3b, 0xc3, 0xd2, 0x8e, 0x0f, 0x07, 0xc2, 0x51, 0x5c, 0x4d, 0xb2, 0x6e, 0xc0, 0x27, 0x73, 0xcd,\n+\t\t0x57, 0xb7, 0xf0, 0xe9, 0x2e, 0xc8, 0xe2, 0x0c, 0xd1, 0xb5, 0x0f, 0xff, 0xf9, 0xec, 0x38, 0xba,\n+\t\t0x97, 0xd6, 0x94, 0x9b, 0xd1, 0x79, 0xb6, 0x6a, 0x01, 0x17, 0xe4, 0x7e, 0xa6, 0xd5, 0x86, 0x19,\n+\t\t0xae, 0xf3, 0xf0, 0x62, 0x73, 0xc0, 0xf0, 0x0a, 0x7a, 0x96, 0x93, 0x72, 0x89, 0x7e, 0x25, 0x57,\n+\t\t0xf8, 0xf7, 0xd5, 0x1e, 0xe5, 0xac, 0xd6, 0x38, 0x4f, 0xe8, 0x81, 0xd1, 0x53, 0x41, 0x07, 0x2d,\n+\t\t0x58, 0x34, 0x1c, 0xef, 0x74, 0x2e, 0x61, 0xca, 0xd3, 0xeb, 0xd6, 0x93, 0x0a, 0xf2, 0xf2, 0x86,\n+\t\t0x9c, 0xe3, 0x7a, 0x52, 0xf5, 0x42, 0xf1, 0x8b, 0x10, 0xf2, 0x25, 0x68, 0x7e, 0x61, 0xb1, 0x19,\n+\t\t0xcf, 0x8f, 0x5a, 0x53, 0xb7, 0x68, 0x4f, 0x1a, 0x71, 0xe9, 0x83, 0x91, 0x3a, 0x78, 0x0f, 0xf7,\n+\t\t0xd4, 0x74, 0xf5, 0x06, 0xd2, 0x88, 0xb0, 0x06, 0xe5, 0xc0, 0xfb, 0xb3, 0x91, 0xad, 0xc0, 0x84,\n+\t\t0x31, 0xf2, 0x3a, 0xcf, 0x63, 0xe6, 0x4a, 0xd3, 0x78, 0xbe, 0xde, 0x73, 0x3e, 0x02, 0x8e, 0xb8,\n+\t\t0x3a, 0xf6, 0x55, 0xa7, 0xf8, 0x5a, 0xb5, 0x0e, 0x0c, 0xc5, 0xe5, 0x66, 0xd5, 0xd2, 0x18, 0xf3,\n+\t\t0xef, 0xa5, 0xc9, 0x68, 0x69, 0xe0, 0xcd, 0x00, 0x33, 0x99, 0x6e, 0xea, 0xcb, 0x06, 0x7a, 0xe1,\n+\t\t0xe1, 0x19, 0x0b, 0xe7, 0x08, 0xcd, 0x09, 0x1b, 0x85, 0xec, 0xc4, 0xd4, 0x75, 0xf0, 0xd6, 0xfb,\n+\t\t0x84, 0x95, 0x07, 0x44, 0xca, 0xa5, 0x2a, 0x6c, 0xc2, 0x00, 0x58, 0x08, 0x87, 0x9e, 0x0a, 0xd4,\n+\t\t0x06, 0xe2, 0x91, 0x5f, 0xb7, 0x1b, 0x11, 0xfa, 0x85, 0xfc, 0x7c, 0xf2, 0x0f, 0x6e, 0x3c, 0x8a,\n+\t\t0xe1, 0x0f, 0xa0, 0x33, 0x84, 0xce, 0x81, 0x4d, 0x32, 0x4d, 0xeb, 0x41, 0xcf, 0x5a, 0x05, 0x60,\n+\t\t0x47, 0x6c, 0x2a, 0xc4, 0x17, 0xd5, 0x16, 0x3a, 0xe4, 0xe7, 0xab, 0x84, 0x94, 0x22, 0xff, 0x56,\n+\t\t0xb0, 0x0c, 0x92, 0x6c, 0x19, 0x11, 0x4c, 0xb3, 0xed, 0x58, 0x48, 0x84, 0x2a, 0xe2, 0x19, 0x2a,\n+\t\t0xe1, 0xc0, 0x56, 0x82, 0x3c, 0x83, 0xb4, 0x58, 0x2d, 0xf0, 0xb5, 0x1e, 0x76, 0x85, 0x51, 0xc2,\n+\t\t0xe4, 0x95, 0x27, 0x96, 0xd1, 0x90, 0xc3, 0x17, 0x75, 0xa1, 0xbb, 0x46, 0x5f, 0xa6, 0xf2, 0xef,\n+\t\t0x71, 0x56, 0x92, 0xc5, 0x8a, 0x85, 0x52, 0xe4, 0x63, 0x21, 0x6f, 0x55, 0x85, 0x2b, 0x6b, 0x0d,\n+\t\t0xc9, 0x92, 0x77, 0x67, 0xe3, 0xff, 0x2a, 0x2b, 0x90, 0x01, 0x3d, 0x74, 0x63, 0x04, 0x61, 0x3c,\n+\t\t0x8e, 0xf8, 0xfc, 0x04, 0xdd, 0x21, 0x85, 0x92, 0x1e, 0x4d, 0x51, 0x8d, 0xb5, 0x6b, 0xf1, 0xda,\n+\t\t0x96, 0xf5, 0x8e, 0x3c, 0x38, 0x5a, 0xac, 0x9b, 0xba, 0x0c, 0x84, 0x5d, 0x50, 0x12, 0xc7, 0xc5,\n+\t\t0x7a, 0xcb, 0xb1, 0xfa, 0x16, 0x93, 0xdf, 0x98, 0xda, 0x3f, 0x49, 0xa3, 0x94, 0x78, 0x70, 0xc7,\n+\t\t0x0b, 0xb6, 0x91, 0xa6, 0x16, 0x2e, 0xcf, 0xfd, 0x51, 0x6a, 0x5b, 0xad, 0x7a, 0xdd, 0xa9, 0x48,\n+\t\t0x48, 0xac, 0xd6, 0x45, 0xbc, 0x23, 0x31, 0x1d, 0x86, 0x54, 0x8a, 0x7f, 0x04, 0x97, 0x71, 0x9e,\n+\t\t0xbc, 0x2e, 0x6b, 0xd9, 0x33, 0xc8, 0x20, 0xc9, 0xe0, 0x25, 0x86, 0x59, 0x15, 0xcf, 0x63, 0xe5,\n+\t\t0x99, 0xf1, 0x24, 0xf1, 0xba, 0xc4, 0x15, 0x02, 0xe2, 0xdb, 0xfe, 0x4a, 0xf8, 0x3b, 0x91, 0x13,\n+\t\t0x8d, 0x03, 0x81, 0x9f, 0xb3, 0x3f, 0x04, 0x03, 0x58, 0xc0, 0xef, 0x27, 0x82, 0x14, 0xd2, 0x7f,\n+\t\t0x93, 0x70, 0xb7, 0xb2, 0x02, 0x21, 0xb3, 0x07, 0x7f, 0x1c, 0xef, 0x88, 0xee, 0x29, 0x7a, 0x0b,\n+\t\t0x3d, 0x75, 0x5a, 0x93, 0xfe, 0x7f, 0x14, 0xf7, 0x4e, 0x4b, 0x7f, 0x21, 0x02, 0xad, 0xf9, 0x43,\n+\t\t0x29, 0x1a, 0xe8, 0x1b, 0xf5, 0x32, 0xb2, 0x96, 0xe6, 0xe8, 0x96, 0x20, 0x9b, 0x96, 0x8e, 0x7b,\n+\t\t0xfe, 0xd8, 0xc9, 0x9c, 0x65, 0x16, 0xd6, 0x68, 0x95, 0xf8, 0x22, 0xe2, 0xae, 0x84, 0x03, 0xfd,\n+\t\t0x87, 0xa2, 0x72, 0x79, 0x74, 0x95, 0xfa, 0xe1, 0xfe, 0xd0, 0x4e, 0x3d, 0x39, 0x2e, 0x67, 0x55,\n+\t\t0x71, 0x6c, 0x89, 0x33, 0x49, 0x0c, 0x1b, 0x46, 0x92, 0x31, 0x6f, 0xa6, 0xf0, 0x09, 0xbd, 0x2d,\n+\t\t0xe2, 0xca, 0xda, 0x18, 0x33, 0xce, 0x67, 0x37, 0xfd, 0x6f, 0xcb, 0x9d, 0xbd, 0x42, 0xbc, 0xb2,\n+\t\t0x9c, 0x28, 0xcd, 0x65, 0x3c, 0x61, 0xbc, 0xde, 0x9d, 0xe1, 0x2a, 0x3e, 0xbf, 0xee, 0x3c, 0xcb,\n+\t\t0xb1, 0x50, 0xa9, 0x2c, 0xbe, 0xb5, 0x43, 0xd0, 0xec, 0x29, 0xf9, 0x16, 0x6f, 0x31, 0xd9, 0x9b,\n+\t\t0x92, 0xb1, 0x32, 0xae, 0x0f, 0xb6, 0x9d, 0x0e, 0x25, 0x7f, 0x89, 0x1f, 0x1d, 0x01, 0x68, 0xab,\n+\t\t0x3d, 0xd1, 0x74, 0x5b, 0x4c, 0x38, 0x7f, 0x3d, 0x33, 0xa5, 0xa2, 0x9f, 0xda, 0x84, 0xa5, 0x82,\n+\t\t0x2d, 0x16, 0x66, 0x46, 0x08, 0x30, 0x14, 0x48, 0x5e, 0xca, 0xe3, 0xf4, 0x8c, 0xcb, 0x32, 0xc6,\n+\t\t0xf1, 0x43, 0x62, 0xc6, 0xef, 0x16, 0xfa, 0x43, 0xae, 0x9c, 0x53, 0xe3, 0x49, 0x45, 0x80, 0xfd,\n+\t\t0x1d, 0x8c, 0xa9, 0x6d, 0x77, 0x76, 0xaa, 0x40, 0xc4, 0x4e, 0x7b, 0x78, 0x6b, 0xe0, 0x1d, 0xce,\n+\t\t0x56, 0x3d, 0xf0, 0x11, 0xfe, 0x4f, 0x6a, 0x6d, 0x0f, 0x4f, 0x90, 0x38, 0x92, 0x17, 0xfa, 0x56,\n+\t\t0x12, 0xa6, 0xa1, 0x0a, 0xea, 0x2f, 0x50, 0xf9, 0x60, 0x66, 0x6c, 0x7d, 0x5a, 0x08, 0x8e, 0x3c,\n+\t\t0xf3, 0xf0, 0x33, 0x02, 0x11, 0x02, 0xfe, 0x4c, 0x56, 0x2b, 0x9f, 0x0c, 0xbd, 0x65, 0x8a, 0x83,\n+\t\t0xde, 0x7c, 0x05, 0x26, 0x93, 0x19, 0xcc, 0xf3, 0x71, 0x0e, 0xad, 0x2f, 0xb3, 0xc9, 0x38, 0x50,\n+\t\t0x64, 0xd5, 0x4c, 0x60, 0x5f, 0x02, 0x13, 0x34, 0xc9, 0x75, 0xc4, 0x60, 0xab, 0x2e, 0x17, 0x7d\n+};\n+\n+static const uint8_t AES_CBC_ciphertext_2048B[] = {\n+\t\t0x8b, 0x55, 0xbd, 0xfd, 0x2b, 0x35, 0x76, 0x5c, 0xd1, 0x90, 0xd7, 0x6a, 0x63, 0x1e, 0x39, 0x71,\n+\t\t0x0d, 0x5c, 0xd8, 0x03, 0x00, 0x75, 0xf1, 0x07, 0x03, 0x8d, 0x76, 0xeb, 0x3b, 0x00, 0x1e, 0x33,\n+\t\t0x88, 0xfc, 0x8f, 0x08, 0x4d, 0x33, 0xf1, 0x3c, 0xee, 0xd0, 0x5d, 0x19, 0x8b, 0x3c, 0x50, 0x86,\n+\t\t0xfd, 0x8d, 0x58, 0x21, 0xb4, 0xae, 0x0f, 0x81, 0xe9, 0x9f, 0xc9, 0xc0, 0x90, 0xf7, 0x04, 0x6f,\n+\t\t0x39, 0x1d, 0x8a, 0x3f, 0x8d, 0x32, 0x23, 0xb5, 0x1f, 0xcc, 0x8a, 0x12, 0x2d, 0x46, 0x82, 0x5e,\n+\t\t0x6a, 0x34, 0x8c, 0xb1, 0x93, 0x70, 0x3b, 0xde, 0x55, 0xaf, 0x16, 0x35, 0x99, 0x84, 0xd5, 0x88,\n+\t\t0xc9, 0x54, 0xb1, 0xb2, 0xd3, 0xeb, 0x9e, 0x55, 0x9a, 0xa9, 0xa7, 0xf5, 0xda, 0x29, 0xcf, 0xe1,\n+\t\t0x98, 0x64, 0x45, 0x77, 0xf2, 0x12, 0x69, 0x8f, 0x78, 0xd8, 0x82, 0x41, 0xb2, 0x9f, 0xe2, 0x1c,\n+\t\t0x63, 0x9b, 0x24, 0x81, 0x67, 0x95, 0xa2, 0xff, 0x26, 0x9d, 0x65, 0x48, 0x61, 0x30, 0x66, 0x41,\n+\t\t0x68, 0x84, 0xbb, 0x59, 0x14, 0x8e, 0x9a, 0x62, 0xb6, 0xca, 0xda, 0xbe, 0x7c, 0x41, 0x52, 0x6e,\n+\t\t0x1b, 0x86, 0xbf, 0x08, 0xeb, 0x37, 0x84, 0x60, 0xe4, 0xc4, 0x1e, 0xa8, 0x4c, 0x84, 0x60, 0x2f,\n+\t\t0x70, 0x90, 0xf2, 0x26, 0xe7, 0x65, 0x0c, 0xc4, 0x58, 0x36, 0x8e, 0x4d, 0xdf, 0xff, 0x9a, 0x39,\n+\t\t0x93, 0x01, 0xcf, 0x6f, 0x6d, 0xde, 0xef, 0x79, 0xb0, 0xce, 0xe2, 0x98, 0xdb, 0x85, 0x8d, 0x62,\n+\t\t0x9d, 0xb9, 0x63, 0xfd, 0xf0, 0x35, 0xb5, 0xa9, 0x1b, 0xf9, 0xe5, 0xd4, 0x2e, 0x22, 0x2d, 0xcc,\n+\t\t0x42, 0xbf, 0x0e, 0x51, 0xf7, 0x15, 0x07, 0x32, 0x75, 0x5b, 0x74, 0xbb, 0x00, 0xef, 0xd4, 0x66,\n+\t\t0x8b, 0xad, 0x71, 0x53, 0x94, 0xd7, 0x7d, 0x2c, 0x40, 0x3e, 0x69, 0xa0, 0x4c, 0x86, 0x5e, 0x06,\n+\t\t0xed, 0xdf, 0x22, 0xe2, 0x24, 0x25, 0x4e, 0x9b, 0x5f, 0x49, 0x74, 0xba, 0xed, 0xb1, 0xa6, 0xeb,\n+\t\t0xae, 0x3f, 0xc6, 0x9e, 0x0b, 0x29, 0x28, 0x9a, 0xb6, 0xb2, 0x74, 0x58, 0xec, 0xa6, 0x4a, 0xed,\n+\t\t0xe5, 0x10, 0x00, 0x85, 0xe1, 0x63, 0x41, 0x61, 0x30, 0x7c, 0x97, 0xcf, 0x75, 0xcf, 0xb6, 0xf3,\n+\t\t0xf7, 0xda, 0x35, 0x3f, 0x85, 0x8c, 0x64, 0xca, 0xb7, 0xea, 0x7f, 0xe4, 0xa3, 0x4d, 0x30, 0x84,\n+\t\t0x8c, 0x9c, 0x80, 0x5a, 0x50, 0xa5, 0x64, 0xae, 0x26, 0xd3, 0xb5, 0x01, 0x73, 0x36, 0x8a, 0x92,\n+\t\t0x49, 0xc4, 0x1a, 0x94, 0x81, 0x9d, 0xf5, 0x6c, 0x50, 0xe1, 0x58, 0x0b, 0x75, 0xdd, 0x6b, 0x6a,\n+\t\t0xca, 0x69, 0xea, 0xc3, 0x33, 0x90, 0x9f, 0x3b, 0x65, 0x5d, 0x5e, 0xee, 0x31, 0xb7, 0x32, 0xfd,\n+\t\t0x56, 0x83, 0xb6, 0xfb, 0xa8, 0x04, 0xfc, 0x1e, 0x11, 0xfb, 0x02, 0x23, 0x53, 0x49, 0x45, 0xb1,\n+\t\t0x07, 0xfc, 0xba, 0xe7, 0x5f, 0x5d, 0x2d, 0x7f, 0x9e, 0x46, 0xba, 0xe9, 0xb0, 0xdb, 0x32, 0x04,\n+\t\t0xa4, 0xa7, 0x98, 0xab, 0x91, 0xcd, 0x02, 0x05, 0xf5, 0x74, 0x31, 0x98, 0x83, 0x3d, 0x33, 0x11,\n+\t\t0x0e, 0xe3, 0x8d, 0xa8, 0xc9, 0x0e, 0xf3, 0xb9, 0x47, 0x67, 0xe9, 0x79, 0x2b, 0x34, 0xcd, 0x9b,\n+\t\t0x45, 0x75, 0x29, 0xf0, 0xbf, 0xcc, 0xda, 0x3a, 0x91, 0xb2, 0x15, 0x27, 0x7a, 0xe5, 0xf5, 0x6a,\n+\t\t0x5e, 0xbe, 0x2c, 0x98, 0xe8, 0x40, 0x96, 0x4f, 0x8a, 0x09, 0xfd, 0xf6, 0xb2, 0xe7, 0x45, 0xb6,\n+\t\t0x08, 0xc1, 0x69, 0xe1, 0xb3, 0xc4, 0x24, 0x34, 0x07, 0x85, 0xd5, 0xa9, 0x78, 0xca, 0xfa, 0x4b,\n+\t\t0x01, 0x19, 0x4d, 0x95, 0xdc, 0xa5, 0xc1, 0x9c, 0xec, 0x27, 0x5b, 0xa6, 0x54, 0x25, 0xbd, 0xc8,\n+\t\t0x0a, 0xb7, 0x11, 0xfb, 0x4e, 0xeb, 0x65, 0x2e, 0xe1, 0x08, 0x9c, 0x3a, 0x45, 0x44, 0x33, 0xef,\n+\t\t0x0d, 0xb9, 0xff, 0x3e, 0x68, 0x9c, 0x61, 0x2b, 0x11, 0xb8, 0x5c, 0x47, 0x0f, 0x94, 0xf2, 0xf8,\n+\t\t0x0b, 0xbb, 0x99, 0x18, 0x85, 0xa3, 0xba, 0x44, 0xf3, 0x79, 0xb3, 0x63, 0x2c, 0x1f, 0x2a, 0x35,\n+\t\t0x3b, 0x23, 0x98, 0xab, 0xf4, 0x16, 0x36, 0xf8, 0xde, 0x86, 0xa4, 0xd4, 0x75, 0xff, 0x51, 0xf9,\n+\t\t0xeb, 0x42, 0x5f, 0x55, 0xe2, 0xbe, 0xd1, 0x5b, 0xb5, 0x38, 0xeb, 0xb4, 0x4d, 0xec, 0xec, 0x99,\n+\t\t0xe1, 0x39, 0x43, 0xaa, 0x64, 0xf7, 0xc9, 0xd8, 0xf2, 0x9a, 0x71, 0x43, 0x39, 0x17, 0xe8, 0xa8,\n+\t\t0xa2, 0xe2, 0xa4, 0x2c, 0x18, 0x11, 0x49, 0xdf, 0x18, 0xdd, 0x85, 0x6e, 0x65, 0x96, 0xe2, 0xba,\n+\t\t0xa1, 0x0a, 0x2c, 0xca, 0xdc, 0x5f, 0xe4, 0xf4, 0x35, 0x03, 0xb2, 0xa9, 0xda, 0xcf, 0xb7, 0x6d,\n+\t\t0x65, 0x82, 0x82, 0x67, 0x9d, 0x0e, 0xf3, 0xe8, 0x85, 0x6c, 0x69, 0xb8, 0x4c, 0xa6, 0xc6, 0x2e,\n+\t\t0x40, 0xb5, 0x54, 0x28, 0x95, 0xe4, 0x57, 0xe0, 0x5b, 0xf8, 0xde, 0x59, 0xe0, 0xfd, 0x89, 0x48,\n+\t\t0xac, 0x56, 0x13, 0x54, 0xb9, 0x1b, 0xf5, 0x59, 0x97, 0xb6, 0xb3, 0xe8, 0xac, 0x2d, 0xfc, 0xd2,\n+\t\t0xea, 0x57, 0x96, 0x57, 0xa8, 0x26, 0x97, 0x2c, 0x01, 0x89, 0x56, 0xea, 0xec, 0x8c, 0x53, 0xd5,\n+\t\t0xd7, 0x9e, 0xc9, 0x98, 0x0b, 0xad, 0x03, 0x75, 0xa0, 0x6e, 0x98, 0x8b, 0x97, 0x8d, 0x8d, 0x85,\n+\t\t0x7d, 0x74, 0xa7, 0x2d, 0xde, 0x67, 0x0c, 0xcd, 0x54, 0xb8, 0x15, 0x7b, 0xeb, 0xf5, 0x84, 0xb9,\n+\t\t0x78, 0xab, 0xd8, 0x68, 0x91, 0x1f, 0x6a, 0xa6, 0x28, 0x22, 0xf7, 0x00, 0x49, 0x00, 0xbe, 0x41,\n+\t\t0x71, 0x0a, 0xf5, 0xe7, 0x9f, 0xb4, 0x11, 0x41, 0x3f, 0xcd, 0xa9, 0xa9, 0x01, 0x8b, 0x6a, 0xeb,\n+\t\t0x54, 0x4c, 0x58, 0x92, 0x68, 0x02, 0x0e, 0xe9, 0xed, 0x65, 0x4c, 0xfb, 0x95, 0x48, 0x58, 0xa2,\n+\t\t0xaa, 0x57, 0x69, 0x13, 0x82, 0x0c, 0x2c, 0x4b, 0x5d, 0x4e, 0x18, 0x30, 0xef, 0x1c, 0xb1, 0x9d,\n+\t\t0x05, 0x05, 0x02, 0x1c, 0x97, 0xc9, 0x48, 0xfe, 0x5e, 0x7b, 0x77, 0xa3, 0x1f, 0x2a, 0x81, 0x42,\n+\t\t0xf0, 0x4b, 0x85, 0x12, 0x9c, 0x1f, 0x44, 0xb1, 0x14, 0x91, 0x92, 0x65, 0x77, 0xb1, 0x87, 0xa2,\n+\t\t0xfc, 0xa4, 0xe7, 0xd2, 0x9b, 0xf2, 0x17, 0xf0, 0x30, 0x1c, 0x8d, 0x33, 0xbc, 0x25, 0x28, 0x48,\n+\t\t0xfd, 0x30, 0x79, 0x0a, 0x99, 0x3e, 0xb4, 0x0f, 0x1e, 0xa6, 0x68, 0x76, 0x19, 0x76, 0x29, 0xac,\n+\t\t0x5d, 0xb8, 0x1e, 0x42, 0xd6, 0x85, 0x04, 0xbf, 0x64, 0x1c, 0x2d, 0x53, 0xe9, 0x92, 0x78, 0xf8,\n+\t\t0xc3, 0xda, 0x96, 0x92, 0x10, 0x6f, 0x45, 0x85, 0xaf, 0x5e, 0xcc, 0xa8, 0xc0, 0xc6, 0x2e, 0x73,\n+\t\t0x51, 0x3f, 0x5e, 0xd7, 0x52, 0x33, 0x71, 0x12, 0x6d, 0x85, 0xee, 0xea, 0x85, 0xa8, 0x48, 0x2b,\n+\t\t0x40, 0x64, 0x6d, 0x28, 0x73, 0x16, 0xd7, 0x82, 0xd9, 0x90, 0xed, 0x1f, 0xa7, 0x5c, 0xb1, 0x5c,\n+\t\t0x27, 0xb9, 0x67, 0x8b, 0xb4, 0x17, 0x13, 0x83, 0x5f, 0x09, 0x72, 0x0a, 0xd7, 0xa0, 0xec, 0x81,\n+\t\t0x59, 0x19, 0xb9, 0xa6, 0x5a, 0x37, 0x34, 0x14, 0x47, 0xf6, 0xe7, 0x6c, 0xd2, 0x09, 0x10, 0xe7,\n+\t\t0xdd, 0xbb, 0x02, 0xd1, 0x28, 0xfa, 0x01, 0x2c, 0x93, 0x64, 0x2e, 0x1b, 0x4c, 0x02, 0x52, 0xcb,\n+\t\t0x07, 0xa1, 0xb6, 0x46, 0x02, 0x80, 0xd9, 0x8f, 0x5c, 0x62, 0xbe, 0x78, 0x9e, 0x75, 0xc4, 0x97,\n+\t\t0x91, 0x39, 0x12, 0x65, 0xb9, 0x3b, 0xc2, 0xd1, 0xaf, 0xf2, 0x1f, 0x4e, 0x4d, 0xd1, 0xf0, 0x9f,\n+\t\t0xb7, 0x12, 0xfd, 0xe8, 0x75, 0x18, 0xc0, 0x9d, 0x8c, 0x70, 0xff, 0x77, 0x05, 0xb6, 0x1a, 0x1f,\n+\t\t0x96, 0x48, 0xf6, 0xfe, 0xd5, 0x5d, 0x98, 0xa5, 0x72, 0x1c, 0x84, 0x76, 0x3e, 0xb8, 0x87, 0x37,\n+\t\t0xdd, 0xd4, 0x3a, 0x45, 0xdd, 0x09, 0xd8, 0xe7, 0x09, 0x2f, 0x3e, 0x33, 0x9e, 0x7b, 0x8c, 0xe4,\n+\t\t0x85, 0x12, 0x4e, 0xf8, 0x06, 0xb7, 0xb1, 0x85, 0x24, 0x96, 0xd8, 0xfe, 0x87, 0x92, 0x81, 0xb1,\n+\t\t0xa3, 0x38, 0xb9, 0x56, 0xe1, 0xf6, 0x36, 0x41, 0xbb, 0xd6, 0x56, 0x69, 0x94, 0x57, 0xb3, 0xa4,\n+\t\t0xca, 0xa4, 0xe1, 0x02, 0x3b, 0x96, 0x71, 0xe0, 0xb2, 0x2f, 0x85, 0x48, 0x1b, 0x4a, 0x41, 0x80,\n+\t\t0x4b, 0x9c, 0xe0, 0xc9, 0x39, 0xb8, 0xb1, 0xca, 0x64, 0x77, 0x46, 0x58, 0xe6, 0x84, 0xd5, 0x2b,\n+\t\t0x65, 0xce, 0xe9, 0x09, 0xa3, 0xaa, 0xfb, 0x83, 0xa9, 0x28, 0x68, 0xfd, 0xcd, 0xfd, 0x76, 0x83,\n+\t\t0xe1, 0x20, 0x22, 0x77, 0x3a, 0xa3, 0xb2, 0x93, 0x14, 0x91, 0xfc, 0xe2, 0x17, 0x63, 0x2b, 0xa6,\n+\t\t0x29, 0x38, 0x7b, 0x9b, 0x8b, 0x15, 0x77, 0xd6, 0xaa, 0x92, 0x51, 0x53, 0x50, 0xff, 0xa0, 0x35,\n+\t\t0xa0, 0x59, 0x7d, 0xf0, 0x11, 0x23, 0x49, 0xdf, 0x5a, 0x21, 0xc2, 0xfe, 0x35, 0xa0, 0x1d, 0xe2,\n+\t\t0xae, 0xa2, 0x8a, 0x61, 0x5b, 0xf7, 0xf1, 0x1c, 0x1c, 0xec, 0xc4, 0xf6, 0xdc, 0xaa, 0xc8, 0xc2,\n+\t\t0xe5, 0xa1, 0x2e, 0x14, 0xe5, 0xc6, 0xc9, 0x73, 0x03, 0x78, 0xeb, 0xed, 0xe0, 0x3e, 0xc5, 0xf4,\n+\t\t0xf1, 0x50, 0xb2, 0x01, 0x91, 0x96, 0xf5, 0xbb, 0xe1, 0x32, 0xcd, 0xa8, 0x66, 0xbf, 0x73, 0x85,\n+\t\t0x94, 0xd6, 0x7e, 0x68, 0xc5, 0xe4, 0xed, 0xd5, 0xe3, 0x67, 0x4c, 0xa5, 0xb3, 0x1f, 0xdf, 0xf8,\n+\t\t0xb3, 0x73, 0x5a, 0xac, 0xeb, 0x46, 0x16, 0x24, 0xab, 0xca, 0xa4, 0xdd, 0x87, 0x0e, 0x24, 0x83,\n+\t\t0x32, 0x04, 0x4c, 0xd8, 0xda, 0x7d, 0xdc, 0xe3, 0x01, 0x93, 0xf3, 0xc1, 0x5b, 0xbd, 0xc3, 0x1d,\n+\t\t0x40, 0x62, 0xde, 0x94, 0x03, 0x85, 0x91, 0x2a, 0xa0, 0x25, 0x10, 0xd3, 0x32, 0x9f, 0x93, 0x00,\n+\t\t0xa7, 0x8a, 0xfa, 0x77, 0x7c, 0xaf, 0x4d, 0xc8, 0x7a, 0xf3, 0x16, 0x2b, 0xba, 0xeb, 0x74, 0x51,\n+\t\t0xb8, 0xdd, 0x32, 0xad, 0x68, 0x7d, 0xdd, 0xca, 0x60, 0x98, 0xc9, 0x9b, 0xb6, 0x5d, 0x4d, 0x3a,\n+\t\t0x66, 0x8a, 0xbe, 0x05, 0xf9, 0x0c, 0xc5, 0xba, 0x52, 0x82, 0x09, 0x1f, 0x5a, 0x66, 0x89, 0x69,\n+\t\t0xa3, 0x5d, 0x93, 0x50, 0x7d, 0x44, 0xc3, 0x2a, 0xb8, 0xab, 0xec, 0xa6, 0x5a, 0xae, 0x4a, 0x6a,\n+\t\t0xcd, 0xfd, 0xb6, 0xff, 0x3d, 0x98, 0x05, 0xd9, 0x5b, 0x29, 0xc4, 0x6f, 0xe0, 0x76, 0xe2, 0x3f,\n+\t\t0xec, 0xd7, 0xa4, 0x91, 0x63, 0xf5, 0x4e, 0x4b, 0xab, 0x20, 0x8c, 0x3a, 0x41, 0xed, 0x8b, 0x4b,\n+\t\t0xb9, 0x01, 0x21, 0xc0, 0x6d, 0xfd, 0x70, 0x5b, 0x20, 0x92, 0x41, 0x89, 0x74, 0xb7, 0xe9, 0x8b,\n+\t\t0xfc, 0x6d, 0x17, 0x3f, 0x7f, 0x89, 0x3d, 0x6b, 0x8f, 0xbc, 0xd2, 0x57, 0xe9, 0xc9, 0x6e, 0xa7,\n+\t\t0x19, 0x26, 0x18, 0xad, 0xef, 0xb5, 0x87, 0xbf, 0xb8, 0xa8, 0xd6, 0x7d, 0xdd, 0x5f, 0x94, 0x54,\n+\t\t0x09, 0x92, 0x2b, 0xf5, 0x04, 0xf7, 0x36, 0x69, 0x8e, 0xf4, 0xdc, 0x1d, 0x6e, 0x55, 0xbb, 0xe9,\n+\t\t0x13, 0x05, 0x83, 0x35, 0x9c, 0xed, 0xcf, 0x8c, 0x26, 0x8c, 0x7b, 0xc7, 0x0b, 0xba, 0xfd, 0xe2,\n+\t\t0x84, 0x5c, 0x2a, 0x79, 0x43, 0x99, 0xb2, 0xc3, 0x82, 0x87, 0xc8, 0xcd, 0x37, 0x6d, 0xa1, 0x2b,\n+\t\t0x39, 0xb2, 0x38, 0x99, 0xd9, 0xfc, 0x02, 0x15, 0x55, 0x21, 0x62, 0x59, 0xeb, 0x00, 0x86, 0x08,\n+\t\t0x20, 0xbe, 0x1a, 0x62, 0x4d, 0x7e, 0xdf, 0x68, 0x73, 0x5b, 0x5f, 0xaf, 0x84, 0x96, 0x2e, 0x1f,\n+\t\t0x6b, 0x03, 0xc9, 0xa6, 0x75, 0x18, 0xe9, 0xd4, 0xbd, 0xc8, 0xec, 0x9a, 0x5a, 0xb3, 0x99, 0xab,\n+\t\t0x5f, 0x7c, 0x08, 0x7f, 0x69, 0x4d, 0x52, 0xa2, 0x30, 0x17, 0x3b, 0x16, 0x15, 0x1b, 0x11, 0x62,\n+\t\t0x3e, 0x80, 0x4b, 0x85, 0x7c, 0x9c, 0xd1, 0x3a, 0x13, 0x01, 0x5e, 0x45, 0xf1, 0xc8, 0x5f, 0xcd,\n+\t\t0x0e, 0x21, 0xf5, 0x82, 0xd4, 0x7b, 0x5c, 0x45, 0x27, 0x6b, 0xef, 0xfe, 0xb8, 0xc0, 0x6f, 0xdc,\n+\t\t0x60, 0x7b, 0xe4, 0xd5, 0x75, 0x71, 0xe6, 0xe8, 0x7d, 0x6b, 0x6d, 0x80, 0xaf, 0x76, 0x41, 0x58,\n+\t\t0xb7, 0xac, 0xb7, 0x13, 0x2f, 0x81, 0xcc, 0xf9, 0x19, 0x97, 0xe8, 0xee, 0x40, 0x91, 0xfc, 0x89,\n+\t\t0x13, 0x1e, 0x67, 0x9a, 0xdb, 0x8f, 0x8f, 0xc7, 0x4a, 0xc9, 0xaf, 0x2f, 0x67, 0x01, 0x3c, 0xb8,\n+\t\t0xa8, 0x3e, 0x78, 0x93, 0x1b, 0xdf, 0xbb, 0x34, 0x0b, 0x1a, 0xfa, 0xc2, 0x2d, 0xc5, 0x1c, 0xec,\n+\t\t0x97, 0x4f, 0x48, 0x41, 0x15, 0x0e, 0x75, 0xed, 0x66, 0x8c, 0x17, 0x7f, 0xb1, 0x48, 0x13, 0xc1,\n+\t\t0xfb, 0x60, 0x06, 0xf9, 0x72, 0x41, 0x3e, 0xcf, 0x6e, 0xb6, 0xc8, 0xeb, 0x4b, 0x5a, 0xd2, 0x0c,\n+\t\t0x28, 0xda, 0x02, 0x7a, 0x46, 0x21, 0x42, 0xb5, 0x34, 0xda, 0xcb, 0x5e, 0xbd, 0x66, 0x5c, 0xca,\n+\t\t0xff, 0x52, 0x43, 0x89, 0xf9, 0x10, 0x9a, 0x9e, 0x9b, 0xe3, 0xb0, 0x51, 0xe9, 0xf3, 0x0a, 0x35,\n+\t\t0x77, 0x54, 0xcc, 0xac, 0xa6, 0xf1, 0x2e, 0x36, 0x89, 0xac, 0xc5, 0xc6, 0x62, 0x5a, 0xc0, 0x6d,\n+\t\t0xc4, 0xe1, 0xf7, 0x64, 0x30, 0xff, 0x11, 0x40, 0x13, 0x89, 0xd8, 0xd7, 0x73, 0x3f, 0x93, 0x08,\n+\t\t0x68, 0xab, 0x66, 0x09, 0x1a, 0xea, 0x78, 0xc9, 0x52, 0xf2, 0xfd, 0x93, 0x1b, 0x94, 0xbe, 0x5c,\n+\t\t0xe5, 0x00, 0x6e, 0x00, 0xb9, 0xea, 0x27, 0xaa, 0xb3, 0xee, 0xe3, 0xc8, 0x6a, 0xb0, 0xc1, 0x8e,\n+\t\t0x9b, 0x54, 0x40, 0x10, 0x96, 0x06, 0xe8, 0xb3, 0xf5, 0x55, 0x77, 0xd7, 0x5c, 0x94, 0xc1, 0x74,\n+\t\t0xf3, 0x07, 0x64, 0xac, 0x1c, 0xde, 0xc7, 0x22, 0xb0, 0xbf, 0x2a, 0x5a, 0xc0, 0x8f, 0x8a, 0x83,\n+\t\t0x50, 0xc2, 0x5e, 0x97, 0xa0, 0xbe, 0x49, 0x7e, 0x47, 0xaf, 0xa7, 0x20, 0x02, 0x35, 0xa4, 0x57,\n+\t\t0xd9, 0x26, 0x63, 0xdb, 0xf1, 0x34, 0x42, 0x89, 0x36, 0xd1, 0x77, 0x6f, 0xb1, 0xea, 0x79, 0x7e,\n+\t\t0x95, 0x10, 0x5a, 0xee, 0xa3, 0xae, 0x6f, 0xba, 0xa9, 0xef, 0x5a, 0x7e, 0x34, 0x03, 0x04, 0x07,\n+\t\t0x92, 0xd6, 0x07, 0x79, 0xaa, 0x14, 0x90, 0x97, 0x05, 0x4d, 0xa6, 0x27, 0x10, 0x5c, 0x25, 0x24,\n+\t\t0xcb, 0xcc, 0xf6, 0x77, 0x9e, 0x43, 0x23, 0xd4, 0x98, 0xef, 0x22, 0xa8, 0xad, 0xf2, 0x26, 0x08,\n+\t\t0x59, 0x69, 0xa4, 0xc3, 0x97, 0xe0, 0x5c, 0x6f, 0xeb, 0x3d, 0xd4, 0x62, 0x6e, 0x80, 0x61, 0x02,\n+\t\t0xf4, 0xfc, 0x94, 0x79, 0xbb, 0x4e, 0x6d, 0xd7, 0x30, 0x5b, 0x10, 0x11, 0x5a, 0x3d, 0xa7, 0x50,\n+\t\t0x1d, 0x9a, 0x13, 0x5f, 0x4f, 0xa8, 0xa7, 0xb6, 0x39, 0xc7, 0xea, 0xe6, 0x19, 0x61, 0x69, 0xc7,\n+\t\t0x9a, 0x3a, 0xeb, 0x9d, 0xdc, 0xf7, 0x06, 0x37, 0xbd, 0xac, 0xe3, 0x18, 0xff, 0xfe, 0x11, 0xdb,\n+\t\t0x67, 0x42, 0xb4, 0xea, 0xa8, 0xbd, 0xb0, 0x76, 0xd2, 0x74, 0x32, 0xc2, 0xa4, 0x9c, 0xe7, 0x60,\n+\t\t0xc5, 0x30, 0x9a, 0x57, 0x66, 0xcd, 0x0f, 0x02, 0x4c, 0xea, 0xe9, 0xd3, 0x2a, 0x5c, 0x09, 0xc2,\n+\t\t0xff, 0x6a, 0xde, 0x5d, 0xb7, 0xe9, 0x75, 0x6b, 0x29, 0x94, 0xd6, 0xf7, 0xc3, 0xdf, 0xfb, 0x70,\n+\t\t0xec, 0xb5, 0x8c, 0xb0, 0x78, 0x7a, 0xee, 0x52, 0x5f, 0x8c, 0xae, 0x85, 0xe5, 0x98, 0xa2, 0xb7,\n+\t\t0x7c, 0x02, 0x2a, 0xcc, 0x9e, 0xde, 0x99, 0x5f, 0x84, 0x20, 0xbb, 0xdc, 0xf2, 0xd2, 0x13, 0x46,\n+\t\t0x3c, 0xd6, 0x4d, 0xe7, 0x50, 0xef, 0x55, 0xc3, 0x96, 0x9f, 0xec, 0x6c, 0xd8, 0xe2, 0xea, 0xed,\n+\t\t0xc7, 0x33, 0xc9, 0xb3, 0x1c, 0x4f, 0x1d, 0x83, 0x1d, 0xe4, 0xdd, 0xb2, 0x24, 0x8f, 0xf9, 0xf5\n+};\n+\n+\n+static const uint8_t HMAC_SHA256_ciphertext_64B_digest[] = {\n+\t\t0xc5, 0x6d, 0x4f, 0x29, 0xf4, 0xd2, 0xcc, 0x87,\n+\t\t0x3c, 0x81, 0x02, 0x6d, 0x38, 0x7a, 0x67, 0x3e,\n+\t\t0x95, 0x9c, 0x5c, 0x8f, 0xda, 0x5c, 0x06, 0xe0,\n+\t\t0x65, 0xf1, 0x6c, 0x51, 0x52, 0x49, 0x3e, 0x5f\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_128B_digest[] = {\n+\t\t0x76, 0x64, 0x2d, 0x69, 0x71, 0x5d, 0x6a, 0xd8,\n+\t\t0x9f, 0x74, 0x11, 0x2f, 0x58, 0xe0, 0x4a, 0x2f,\n+\t\t0x6c, 0x88, 0x5e, 0x4d, 0x9c, 0x79, 0x83, 0x1c,\n+\t\t0x8a, 0x14, 0xd0, 0x07, 0xfb, 0xbf, 0x6c, 0x8f\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_256B_digest[] = {\n+\t\t0x05, 0xa7, 0x44, 0xcd, 0x91, 0x8c, 0x95, 0xcf,\n+\t\t0x7b, 0x8f, 0xd3, 0x90, 0x86, 0x7e, 0x7b, 0xb9,\n+\t\t0x05, 0xd6, 0x6e, 0x7a, 0xc1, 0x7b, 0x26, 0xff,\n+\t\t0xd3, 0x4b, 0xe0, 0x22, 0x8b, 0xa8, 0x47, 0x52\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_512B_digest[] = {\n+\t\t0x08, 0xb7, 0x29, 0x54, 0x18, 0x7e, 0x97, 0x49,\n+\t\t0xc6, 0x7c, 0x9f, 0x94, 0xa5, 0x4f, 0xa2, 0x25,\n+\t\t0xd0, 0xe2, 0x30, 0x7b, 0xad, 0x93, 0xc9, 0x12,\n+\t\t0x0f, 0xf0, 0xf0, 0x71, 0xc2, 0xf6, 0x53, 0x8f\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_768B_digest[] = {\n+\t\t0xe4, 0x3e, 0x73, 0x93, 0x03, 0xaf, 0x6f, 0x9c,\n+\t\t0xca, 0x57, 0x3b, 0x4a, 0x6e, 0x83, 0x58, 0xf5,\n+\t\t0x66, 0xc2, 0xb4, 0xa7, 0xe0, 0xee, 0x63, 0x6b,\n+\t\t0x48, 0xb7, 0x50, 0x45, 0x69, 0xdf, 0x5c, 0x5b\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_1024B_digest[] = {\n+\t\t0x03, 0xb9, 0x96, 0x26, 0xdc, 0x1c, 0xab, 0xe2,\n+\t\t0xf5, 0x70, 0x55, 0x15, 0x67, 0x6e, 0x48, 0x11,\n+\t\t0xe7, 0x67, 0xea, 0xfa, 0x5c, 0x6b, 0x28, 0x22,\n+\t\t0xc9, 0x0e, 0x67, 0x04, 0xb3, 0x71, 0x7f, 0x88\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_1280B_digest[] = {\n+\t\t0x01, 0x91, 0xb8, 0x78, 0xd3, 0x21, 0x74, 0xa5,\n+\t\t0x1c, 0x8b, 0xd4, 0xd2, 0xc0, 0x49, 0xd7, 0xd2,\n+\t\t0x16, 0x46, 0x66, 0x85, 0x50, 0x6d, 0x08, 0xcc,\n+\t\t0xc7, 0x0a, 0xa3, 0x71, 0xcc, 0xde, 0xee, 0xdc\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_1536B_digest[] = {\n+\t\t0xf2, 0xe5, 0xe9, 0x57, 0x53, 0xd7, 0x69, 0x28,\n+\t\t0x7b, 0x69, 0xb5, 0x49, 0xa3, 0x31, 0x56, 0x5f,\n+\t\t0xa4, 0xe9, 0x87, 0x26, 0x2f, 0xe0, 0x2d, 0xd6,\n+\t\t0x08, 0x44, 0x01, 0x71, 0x0c, 0x93, 0x85, 0x84\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_1792B_digest[] = {\n+\t\t0xf6, 0x57, 0x62, 0x01, 0xbf, 0x2d, 0xea, 0x4a,\n+\t\t0xef, 0x43, 0x85, 0x60, 0x18, 0xdf, 0x8b, 0xb4,\n+\t\t0x60, 0xc0, 0xfd, 0x2f, 0x90, 0x15, 0xe6, 0x91,\n+\t\t0x56, 0x61, 0x68, 0x7f, 0x5e, 0x92, 0xa8, 0xdd\n+};\n+\n+static const uint8_t HMAC_SHA256_ciphertext_2048B_digest[] = {\n+\t\t0x81, 0x1a, 0x29, 0xbc, 0x6b, 0x9f, 0xbb, 0xb8,\n+\t\t0xef, 0x71, 0x7b, 0x1f, 0x6f, 0xd4, 0x7e, 0x68,\n+\t\t0x3a, 0x9c, 0xb9, 0x98, 0x22, 0x81, 0xfa, 0x95,\n+\t\t0xee, 0xbc, 0x7f, 0x23, 0x29, 0x88, 0x76, 0xb8\n+};\n+\n+struct crypto_data_params {\n+\tconst char *name;\n+\tuint16_t length;\n+\tconst char *plaintext;\n+\tstruct crypto_expected_output {\n+\t\tconst uint8_t *ciphertext;\n+\t\tconst uint8_t *digest;\n+\t} expected;\n+};\n+\n+#define MAX_PACKET_SIZE_INDEX\t10\n+\n+struct crypto_data_params aes_cbc_hmac_sha256_output[MAX_PACKET_SIZE_INDEX] = {\n+\t\t{ \"64B\", 64, &plaintext_quote[sizeof(plaintext_quote) - 1 - 64], { AES_CBC_ciphertext_64B, HMAC_SHA256_ciphertext_64B_digest } },\n+\t\t{ \"128B\", 128, &plaintext_quote[sizeof(plaintext_quote) - 1 - 128], { AES_CBC_ciphertext_128B, HMAC_SHA256_ciphertext_128B_digest } },\n+\t\t{ \"256B\", 256, &plaintext_quote[sizeof(plaintext_quote) - 1 - 256], { AES_CBC_ciphertext_256B, HMAC_SHA256_ciphertext_256B_digest } },\n+\t\t{ \"512B\", 512, &plaintext_quote[sizeof(plaintext_quote) - 1 - 512], { AES_CBC_ciphertext_512B, HMAC_SHA256_ciphertext_512B_digest } },\n+\t\t{ \"768B\", 768, &plaintext_quote[sizeof(plaintext_quote) - 1 - 768], { AES_CBC_ciphertext_768B, HMAC_SHA256_ciphertext_768B_digest } },\n+\t\t{ \"1024B\", 1024, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1024], { AES_CBC_ciphertext_1024B, HMAC_SHA256_ciphertext_1024B_digest } },\n+\t\t{ \"1280B\", 1280, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1280], { AES_CBC_ciphertext_1280B, HMAC_SHA256_ciphertext_1280B_digest } },\n+\t\t{ \"1536B\", 1536, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1536], { AES_CBC_ciphertext_1536B, HMAC_SHA256_ciphertext_1536B_digest } },\n+\t\t{ \"1792B\", 1792, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1792], { AES_CBC_ciphertext_1792B, HMAC_SHA256_ciphertext_1792B_digest } },\n+\t\t{ \"2048B\", 2048, &plaintext_quote[sizeof(plaintext_quote) - 1 - 2048], { AES_CBC_ciphertext_2048B, HMAC_SHA256_ciphertext_2048B_digest } }\n+};\n+\n+\n+static int\n+test_perf_crypto_qp_vary_burst_size(uint16_t dev_num)\n+{\n+\tuint32_t num_to_submit = 2048, max_outstanding_reqs = 512;\n+\tstruct rte_mbuf *rx_mbufs[num_to_submit], *tx_mbufs[num_to_submit];\n+\tuint64_t failed_polls, retries, start_cycles, end_cycles, total_cycles = 0;\n+\tuint32_t burst_sent, burst_received;\n+\tuint32_t b, burst_size, num_sent, num_received;\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\tstruct crypto_data_params *data_params = aes_cbc_hmac_sha256_output;\n+\n+\tif (rte_cryptodev_count() == 0) {\n+\t\tprintf(\"\\nNo crypto devices available. Is kernel driver loaded?\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = &ut_params->auth_xform;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_DECRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = NULL;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_VERIFY;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_SHA256_HMAC;\n+\tut_params->auth_xform.auth.key.data = hmac_sha256_key;\n+\tut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->dev_id,\n+\t\t&ut_params->cipher_xform);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure(s) */\n+\tfor (b = 0; b < num_to_submit ; b++) {\n+\t\ttx_mbufs[b] = setup_test_string(ts_params->mbuf_mp,\n+\t\t\t\t(const char *)data_params[0].expected.ciphertext,\n+\t\t\t\tdata_params[0].length, 0);\n+\t\tTEST_ASSERT_NOT_NULL(tx_mbufs[b], \"Failed to allocate tx_buf\");\n+\n+\t\tut_params->digest = (uint8_t *)rte_pktmbuf_append(tx_mbufs[b],\n+\t\t\t\tDIGEST_BYTE_LENGTH_SHA256);\n+\t\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\t\trte_memcpy(ut_params->digest, data_params[0].expected.digest,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA256);\n+\n+\t\tstruct rte_crypto_op_data *cop = rte_crypto_op_alloc(ts_params->crypto_op_mp);\n+\t\tTEST_ASSERT_NOT_NULL(cop, \"Failed to allocate crypto_op\");\n+\n+\t\trte_crypto_op_attach_session(cop, ut_params->sess);\n+\n+\t\tcop->digest.data = ut_params->digest;\n+\t\tcop->digest.phys_addr = rte_pktmbuf_mtophys_offset(tx_mbufs[b], data_params[0].length);\n+\t\tcop->digest.length = DIGEST_BYTE_LENGTH_SHA256;\n+\n+\t\tcop->iv.data = (uint8_t *)rte_pktmbuf_prepend(tx_mbufs[b], CIPHER_IV_LENGTH_AES_CBC);\n+\t\tcop->iv.phys_addr = rte_pktmbuf_mtophys(tx_mbufs[b]);\n+\t\tcop->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\t\trte_memcpy(cop->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\t\tcop->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\t\tcop->data.to_cipher.length = data_params[0].length;\n+\n+\t\tcop->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\t\tcop->data.to_hash.length = data_params[0].length;\n+\n+\t\trte_pktmbuf_attach_crypto_op(tx_mbufs[b], cop);\n+\t}\n+\n+\tprintf(\"\\nTest to measure the IA cycle cost using AES128_CBC_SHA256_HMAC algorithm with \"\n+\t\t\t\"a constant request size of %u.\", data_params[0].length);\n+\tprintf(\"\\nThis test will keep retries at 0 and only measure IA cycle cost for each request.\");\n+\tprintf(\"\\nDev No\\tQP No\\tNum Sent\\tNum Received\\tTx/Rx burst\");\n+\tprintf(\"\\tRetries (Device Busy)\\tAverage IA cycle cost (assuming 0 retries)\");\n+\tfor (b = 2; b <= 128 ; b *= 2) {\n+\t\tnum_sent = 0;\n+\t\tnum_received = 0;\n+\t\tretries = 0;\n+\t\tfailed_polls = 0;\n+\t\tburst_size = b;\n+\t\ttotal_cycles = 0;\n+\t\twhile (num_sent < num_to_submit) {\n+\t\t\tstart_cycles = rte_rdtsc_precise();\n+\t\t\tburst_sent = rte_cryptodev_enqueue_burst(dev_num, 0,\n+\t\t\t\t\t&tx_mbufs[num_sent],\n+\t\t\t\t\t((num_to_submit-num_sent) < burst_size) ?\n+\t\t\t\t\tnum_to_submit-num_sent : burst_size);\n+\t\t\tif (burst_sent == 0)\n+\t\t\t\tretries++;\n+\t\t\telse\n+\t\t\t\tnum_sent += burst_sent;\n+\t\t\tend_cycles = rte_rdtsc_precise();\n+\t\t\ttotal_cycles += (end_cycles - start_cycles);\n+\t\t\t/*\n+\t\t\t * Wait until requests have been sent.\n+\t\t\t */\n+\t\t\trte_delay_ms(1);\n+\n+\t\t\tstart_cycles = rte_rdtsc_precise();\n+\t\t\tburst_received = rte_cryptodev_dequeue_burst(dev_num,\n+\t\t\t\t\t\t0, rx_mbufs, burst_size);\n+\t\t\tif (burst_received == 0)\n+\t\t\t\tfailed_polls++;\n+\t\t\telse\n+\t\t\t\tnum_received += burst_received;\n+\t\t\tend_cycles = rte_rdtsc_precise();\n+\t\t\ttotal_cycles += end_cycles - start_cycles;\n+\t\t}\n+\t\twhile (num_received != num_to_submit) {\n+\t\t\tif (gbl_cryptodev_preftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD)\n+\t\t\t\trte_cryptodev_enqueue_burst(dev_num, 0, NULL, 0);\n+\n+\t\t\tburst_received = rte_cryptodev_dequeue_burst(dev_num,\n+\t\t\t\t\t\t0, rx_mbufs, burst_size);\n+\t\t\tif (burst_received == 0)\n+\t\t\t\tfailed_polls++;\n+\t\t\telse\n+\t\t\t\tnum_received += burst_received;\n+\t\t}\n+\n+\t\tprintf(\"\\n%u\\t%u\\t\\%u\\t\\t%u\\t\\t%u\", dev_num, 0,\n+\t\t\t\t\tnum_sent, num_received, burst_size);\n+\t\tprintf(\"\\t\\t%\"PRIu64, retries);\n+\t\tprintf(\"\\t\\t\\t%\"PRIu64, total_cycles/num_received);\n+\t}\n+\tprintf(\"\\n\");\n+\n+\tfor (b = 0; b < max_outstanding_reqs ; b++) {\n+\t\trte_crypto_op_free(tx_mbufs[b]->crypto_op);\n+\t\trte_pktmbuf_free(tx_mbufs[b]);\n+\t}\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_perf_AES_CBC_HMAC_SHA256_encrypt_digest_vary_req_size(uint16_t dev_num)\n+{\n+\tuint16_t index;\n+\tuint32_t burst_sent, burst_received;\n+\tuint32_t b, num_sent, num_received, throughput;\n+\tuint64_t failed_polls, retries, start_cycles, end_cycles;\n+\tconst uint64_t mhz = rte_get_tsc_hz()/1000000;\n+\tdouble mmps;\n+\tstruct rte_mbuf *rx_mbufs[DEFAULT_BURST_SIZE], *tx_mbufs[DEFAULT_BURST_SIZE];\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct crypto_unittest_params *ut_params = &unittest_params;\n+\tstruct crypto_data_params *data_params = aes_cbc_hmac_sha256_output;\n+\n+\tif (rte_cryptodev_count() == 0) {\n+\t\tprintf(\"\\nNo crypto devices available. Is kernel driver loaded?\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = &ut_params->auth_xform;\n+\n+\tut_params->cipher_xform.cipher.algo = RTE_CRYPTO_SYM_CIPHER_AES_CBC;\n+\tut_params->cipher_xform.cipher.op = RTE_CRYPTO_SYM_CIPHER_OP_ENCRYPT;\n+\tut_params->cipher_xform.cipher.key.data = aes_cbc_key;\n+\tut_params->cipher_xform.cipher.key.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\t/* Setup HMAC Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;\n+\tut_params->auth_xform.next = NULL;\n+\n+\tut_params->auth_xform.auth.op = RTE_CRYPTO_SYM_HASH_OP_DIGEST_GENERATE;\n+\tut_params->auth_xform.auth.algo = RTE_CRYPTO_SYM_HASH_SHA256_HMAC;\n+\tut_params->auth_xform.auth.key.data = hmac_sha256_key;\n+\tut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;\n+\tut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_session_create(ts_params->dev_id,\n+\t\t\t&ut_params->cipher_xform);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\tprintf(\"\\nThroughput test which will continually attempt to send AES128_CBC_SHA256_HMAC requests \"\n+\t\t\"with a constant burst size of %u while varying payload sizes\", DEFAULT_BURST_SIZE);\n+\tprintf(\"\\nDev No\\tQP No\\tReq Size(B)\\tNum Sent\\tNum Received\\tMrps\\tThoughput(Mbps)\");\n+\tprintf(\"\\tRetries (Attempted a burst, but the device was busy)\");\n+\tfor (index = 0; index < MAX_PACKET_SIZE_INDEX; index++) {\n+\t\tnum_sent = 0;\n+\t\tnum_received = 0;\n+\t\tretries = 0;\n+\t\tfailed_polls = 0;\n+\n+\t\t/* Generate Crypto op data structure(s) */\n+\t\tfor (b = 0; b < DEFAULT_BURST_SIZE ; b++) {\n+\t\t\ttx_mbufs[b] = setup_test_string(ts_params->mbuf_mp,\n+\t\t\t\t\tdata_params[index].plaintext, data_params[index].length, 0);\n+\n+\t\t\tut_params->digest = (uint8_t *)rte_pktmbuf_append(\n+\t\t\t\ttx_mbufs[b], DIGEST_BYTE_LENGTH_SHA256);\n+\t\t\tTEST_ASSERT_NOT_NULL(ut_params->digest, \"no room to append digest\");\n+\n+\t\t\trte_memcpy(ut_params->digest, data_params[index].expected.digest,\n+\t\t\tDIGEST_BYTE_LENGTH_SHA256);\n+\t\t\tstruct rte_crypto_op_data *cop = rte_crypto_op_alloc(ts_params->crypto_op_mp);\n+\t\t\tTEST_ASSERT_NOT_NULL(cop, \"Failed to allocate crypto_op\");\n+\n+\t\t\trte_crypto_op_attach_session(cop, ut_params->sess);\n+\n+\t\t\tcop->digest.data = ut_params->digest;\n+\t\t\tcop->digest.phys_addr = rte_pktmbuf_mtophys_offset(\n+\t\t\t\ttx_mbufs[b], data_params[index].length);\n+\t\t\tcop->digest.length = DIGEST_BYTE_LENGTH_SHA256;\n+\n+\t\t\tcop->iv.data = (uint8_t *)rte_pktmbuf_prepend(tx_mbufs[b],\n+\t\t\t\t\tCIPHER_IV_LENGTH_AES_CBC);\n+\t\t\tcop->iv.phys_addr = rte_pktmbuf_mtophys(tx_mbufs[b]);\n+\t\t\tcop->iv.length = CIPHER_IV_LENGTH_AES_CBC;\n+\n+\t\t\trte_memcpy(cop->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);\n+\n+\t\t\tcop->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\t\t\tcop->data.to_cipher.length = data_params[index].length;\n+\n+\t\t\tcop->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;\n+\t\t\tcop->data.to_hash.length = data_params[index].length;\n+\n+\t\t\trte_pktmbuf_attach_crypto_op(tx_mbufs[b], cop);\n+\t\t}\n+\t\tstart_cycles = rte_rdtsc_precise();\n+\t\twhile (num_sent < DEFAULT_NUM_REQS_TO_SUBMIT) {\n+\t\t\tburst_sent = rte_cryptodev_enqueue_burst(dev_num, 0, tx_mbufs,\n+\t\t\t\t((DEFAULT_NUM_REQS_TO_SUBMIT-num_sent) < DEFAULT_BURST_SIZE) ?\n+\t\t\t\tDEFAULT_NUM_REQS_TO_SUBMIT-num_sent : DEFAULT_BURST_SIZE);\n+\t\t\tif (burst_sent == 0)\n+\t\t\t\tretries++;\n+\t\t\telse\n+\t\t\t\tnum_sent += burst_sent;\n+\n+\t\t\tburst_received = rte_cryptodev_dequeue_burst(dev_num, 0, rx_mbufs, DEFAULT_BURST_SIZE);\n+\t\t\tif (burst_received == 0)\n+\t\t\t\tfailed_polls++;\n+\t\t\telse\n+\t\t\t\tnum_received += burst_received;\n+\t\t}\n+\t\twhile (num_received != DEFAULT_NUM_REQS_TO_SUBMIT) {\n+\t\t\tif (gbl_cryptodev_preftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD)\n+\t\t\t\trte_cryptodev_enqueue_burst(dev_num, 0, NULL, 0);\n+\n+\t\t\tburst_received = rte_cryptodev_dequeue_burst(dev_num, 0,\n+\t\t\t\t\t\trx_mbufs, DEFAULT_BURST_SIZE);\n+\t\t\tif (burst_received == 0)\n+\t\t\t\tfailed_polls++;\n+\t\t\telse\n+\t\t\t\tnum_received += burst_received;\n+\t\t}\n+\t\tend_cycles = rte_rdtsc_precise();\n+\t\tmmps = (double)num_received*mhz/(end_cycles - start_cycles);\n+\t\tthroughput = mmps*data_params[index].length*8;\n+\t\tprintf(\"\\n%u\\t%u\\t%u\\t\\t%u\\t%u\", dev_num, 0, data_params[index].length, num_sent, num_received);\n+\t\tprintf(\"\\t%.2f\\t%u\", mmps, throughput);\n+\t\tprintf(\"\\t\\t%\"PRIu64, retries);\n+\t\tfor (b = 0; b < DEFAULT_BURST_SIZE ; b++) {\n+\t\t\trte_crypto_op_free(tx_mbufs[b]->crypto_op);\n+\t\t\trte_pktmbuf_free(tx_mbufs[b]);\n+\t\t}\n+\t}\n+\tprintf(\"\\n\");\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_perf_encrypt_digest_vary_req_size(void)\n+{\n+\treturn test_perf_AES_CBC_HMAC_SHA256_encrypt_digest_vary_req_size(testsuite_params.dev_id);\n+}\n+\n+static int\n+test_perf_vary_burst_size(void)\n+{\n+\treturn test_perf_crypto_qp_vary_burst_size(testsuite_params.dev_id);\n+}\n+\n+\n+static struct unit_test_suite cryptodev_testsuite  = {\n+\t.suite_name = \"Crypto Device Unit Test Suite\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_perf_encrypt_digest_vary_req_size),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_perf_vary_burst_size),\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\n+};\n+\n+static int\n+perftest_aesni_mb_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)\n+{\n+\tgbl_cryptodev_preftest_devtype = RTE_CRYPTODEV_AESNI_MB_PMD;\n+\n+\treturn unit_test_suite_runner(&cryptodev_testsuite);\n+}\n+\n+static int\n+perftest_qat_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)\n+{\n+\tgbl_cryptodev_preftest_devtype = RTE_CRYPTODEV_QAT_PMD;\n+\n+\treturn unit_test_suite_runner(&cryptodev_testsuite);\n+}\n+\n+static struct test_command cryptodev_aesni_mb_perf_cmd = {\n+\t.command = \"cryptodev_aesni_mb_perftest\",\n+\t.callback = perftest_aesni_mb_cryptodev,\n+};\n+\n+static struct test_command cryptodev_qat_perf_cmd = {\n+\t.command = \"cryptodev_qat_perftest\",\n+\t.callback = perftest_qat_cryptodev,\n+};\n+\n+REGISTER_TEST_COMMAND(cryptodev_aesni_mb_perf_cmd);\n+REGISTER_TEST_COMMAND(cryptodev_qat_perf_cmd);\ndiff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c\nindex 388cf11..2d98958 100644\n--- a/app/test/test_link_bonding.c\n+++ b/app/test/test_link_bonding.c\n@@ -4020,7 +4020,7 @@ test_close_bonded_device(void)\n \treturn 0;\n }\n \n-static int\n+static void\n testsuite_teardown(void)\n {\n \tif (test_params->pkt_eth_hdr != NULL) {\n@@ -4029,7 +4029,7 @@ testsuite_teardown(void)\n \t}\n \n \t/* Clean up and remove slaves from bonded device */\n-\treturn remove_slaves_and_stop_bonded_device();\n+\tremove_slaves_and_stop_bonded_device();\n }\n \n static void\n@@ -4993,7 +4993,7 @@ static struct unit_test_suite link_bonding_test_suite  = {\n \t\tTEST_CASE(test_reconfigure_bonded_device),\n \t\tTEST_CASE(test_close_bonded_device),\n \n-\t\t{ NULL, NULL, NULL, NULL, NULL } /**< NULL terminate unit test array */\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n \t}\n };\n \ndiff --git a/app/test/test_link_bonding_mode4.c b/app/test/test_link_bonding_mode4.c\nindex 460539d..713368d 100644\n--- a/app/test/test_link_bonding_mode4.c\n+++ b/app/test/test_link_bonding_mode4.c\n@@ -453,7 +453,7 @@ test_setup(void)\n \treturn 0;\n }\n \n-static int\n+static void\n testsuite_teardown(void)\n {\n \tstruct slave_conf *port;\n@@ -467,8 +467,6 @@ testsuite_teardown(void)\n \n \tFOR_EACH_PORT(i, port)\n \t\trte_eth_dev_stop(port->port_id);\n-\n-\treturn 0;\n }\n \n /*\n@@ -1390,7 +1388,8 @@ static struct unit_test_suite link_bonding_mode4_test_suite  = {\n \t\tTEST_CASE_NAMED(\"test_mode4_tx_burst\", test_mode4_tx_burst_wrapper),\n \t\tTEST_CASE_NAMED(\"test_mode4_marker\", test_mode4_marker_wrapper),\n \t\tTEST_CASE_NAMED(\"test_mode4_expired\", test_mode4_expired_wrapper),\n-\t\t{ NULL, NULL, NULL, NULL, NULL } /**< NULL terminate unit test array */\n+\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n \t}\n };\n \n",
    "prefixes": [
        "dpdk-dev",
        "5/6"
    ]
}