All of lore.kernel.org
 help / color / mirror / Atom feed
From: Declan Doherty <declan.doherty@intel.com>
To: dev@dpdk.org
Subject: [PATCH v5 09/10] app/test: add cryptodev unit and performance tests
Date: Mon,  9 Nov 2015 20:34:18 +0000	[thread overview]
Message-ID: <1447101259-18972-10-git-send-email-declan.doherty@intel.com> (raw)
In-Reply-To: <1447101259-18972-1-git-send-email-declan.doherty@intel.com>

unit tests are run by using cryptodev_qat_autotest or
cryptodev_aesni_autotest from the test apps interactive console.

performance tests are run by using the cryptodev_qat_perftest or
cryptodev_aesni_mb_perftest command from the test apps interactive
console.

If you which to run the tests on a QAT device there must be one
bound to igb_uio kernel driver.

Signed-off-by: Declan Doherty <declan.doherty@intel.com>
Signed-off-by: John Griffin <john.griffin@intel.com>
Signed-off-by: Des O Dea <des.j.o.dea@intel.com>
Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>

Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Signed-off-by: Declan Doherty <declan.doherty@intel.com>
---
 MAINTAINERS                          |    2 +
 app/test/Makefile                    |    4 +
 app/test/test.c                      |   92 +-
 app/test/test.h                      |   34 +-
 app/test/test_cryptodev.c            | 1986 ++++++++++++++++++++++++++++++++
 app/test/test_cryptodev.h            |   68 ++
 app/test/test_cryptodev_perf.c       | 2062 ++++++++++++++++++++++++++++++++++
 app/test/test_link_bonding.c         |    6 +-
 app/test/test_link_bonding_mode4.c   |    7 +-
 app/test/test_link_bonding_rssconf.c |    7 +-
 10 files changed, 4219 insertions(+), 49 deletions(-)
 create mode 100644 app/test/test_cryptodev.c
 create mode 100644 app/test/test_cryptodev.h
 create mode 100644 app/test/test_cryptodev_perf.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 2d5808c..1f72f8c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -204,6 +204,8 @@ Crypto API
 M: Declan Doherty <declan.doherty@intel.com>
 F: lib/librte_cryptodev
 F: docs/guides/cryptodevs
+F: app/test/test_cryptodev.c
+F: app/test/test_cryptodev_perf.c
 
 Drivers
 -------
diff --git a/app/test/Makefile b/app/test/Makefile
index de63235..ec33e1a 100644
--- a/app/test/Makefile
+++ b/app/test/Makefile
@@ -149,6 +149,10 @@ endif
 
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_RING) += test_pmd_ring.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_RING) += test_pmd_ring_perf.c
+
+SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_perf.c
+SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev.c
+
 SRCS-$(CONFIG_RTE_LIBRTE_KVARGS) += test_kvargs.c
 
 CFLAGS += -O3
diff --git a/app/test/test.c b/app/test/test.c
index b94199a..f35b304 100644
--- a/app/test/test.c
+++ b/app/test/test.c
@@ -159,51 +159,81 @@ main(int argc, char **argv)
 int
 unit_test_suite_runner(struct unit_test_suite *suite)
 {
-	int retval, i = 0;
+	int test_success;
+	unsigned total = 0, executed = 0, skipped = 0, succeeded = 0, failed = 0;
 
 	if (suite->suite_name)
-		printf("Test Suite : %s\n", suite->suite_name);
+		printf(" + ------------------------------------------------------- +\n");
+		printf(" + Test Suite : %s\n", suite->suite_name);
 
 	if (suite->setup)
 		if (suite->setup() != 0)
-			return -1;
-
-	while (suite->unit_test_cases[i].testcase) {
-		/* Run test case setup */
-		if (suite->unit_test_cases[i].setup) {
-			retval = suite->unit_test_cases[i].setup();
-			if (retval != 0)
-				return retval;
-		}
+			goto suite_summary;
 
-		/* Run test case */
-		if (suite->unit_test_cases[i].testcase() == 0) {
-			printf("TestCase %2d: %s\n", i,
-					suite->unit_test_cases[i].success_msg ?
-					suite->unit_test_cases[i].success_msg :
-					"passed");
-		}
-		else {
-			printf("TestCase %2d: %s\n", i, suite->unit_test_cases[i].fail_msg ?
-					suite->unit_test_cases[i].fail_msg :
-					"failed");
-			return -1;
+	printf(" + ------------------------------------------------------- +\n");
+
+	while (suite->unit_test_cases[total].testcase) {
+		if (!suite->unit_test_cases[total].enabled) {
+			skipped++;
+			total++;
+			continue;
+		} else {
+			executed++;
 		}
 
-		/* Run test case teardown */
-		if (suite->unit_test_cases[i].teardown) {
-			retval = suite->unit_test_cases[i].teardown();
-			if (retval != 0)
-				return retval;
+		/* run test case setup */
+		if (suite->unit_test_cases[total].setup)
+			test_success = suite->unit_test_cases[total].setup();
+		else
+			test_success = TEST_SUCCESS;
+
+		if (test_success == TEST_SUCCESS) {
+			/* run the test case */
+			test_success = suite->unit_test_cases[total].testcase();
+			if (test_success == TEST_SUCCESS)
+				succeeded++;
+			else
+				failed++;
+		} else {
+			failed++;
 		}
 
-		i++;
+		/* run the test case teardown */
+		if (suite->unit_test_cases[total].teardown)
+			suite->unit_test_cases[total].teardown();
+
+		if (test_success == TEST_SUCCESS)
+			printf(" + TestCase [%2d] : %s\n", total,
+					suite->unit_test_cases[total].success_msg ?
+					suite->unit_test_cases[total].success_msg :
+					"passed");
+		else
+			printf(" + TestCase [%2d] : %s\n", total,
+					suite->unit_test_cases[total].fail_msg ?
+					suite->unit_test_cases[total].fail_msg :
+					"failed");
+
+		total++;
 	}
 
 	/* Run test suite teardown */
 	if (suite->teardown)
-		if (suite->teardown() != 0)
-			return -1;
+		suite->teardown();
+
+	goto suite_summary;
+
+suite_summary:
+	printf(" + ------------------------------------------------------- +\n");
+	printf(" + Test Suite Summary \n");
+	printf(" + Tests Total :       %2d\n", total);
+	printf(" + Tests Skipped :     %2d\n", skipped);
+	printf(" + Tests Executed :    %2d\n", executed);
+	printf(" + Tests Passed :      %2d\n", succeeded);
+	printf(" + Tests Failed :      %2d\n", failed);
+	printf(" + ------------------------------------------------------- +\n");
+
+	if (failed)
+		return -1;
 
 	return 0;
 }
diff --git a/app/test/test.h b/app/test/test.h
index 62eb51d..a2fba60 100644
--- a/app/test/test.h
+++ b/app/test/test.h
@@ -33,7 +33,7 @@
 
 #ifndef _TEST_H_
 #define _TEST_H_
-
+#include <stddef.h>
 #include <sys/queue.h>
 
 #define TEST_SUCCESS  (0)
@@ -64,6 +64,17 @@
 		}                                                        \
 } while (0)
 
+
+#define TEST_ASSERT_BUFFERS_ARE_EQUAL(a, b, len,  msg, ...) do {	\
+	if (memcmp(a, b, len)) {                                        \
+		printf("TestCase %s() line %d failed: "              \
+			msg "\n", __func__, __LINE__, ##__VA_ARGS__);    \
+		TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__);    \
+		return TEST_FAILED;                                  \
+	}                                                        \
+} while (0)
+
+
 #define TEST_ASSERT_NOT_EQUAL(a, b, msg, ...) do {               \
 		if (!(a != b)) {                                         \
 			printf("TestCase %s() line %d failed: "              \
@@ -113,27 +124,36 @@
 
 struct unit_test_case {
 	int (*setup)(void);
-	int (*teardown)(void);
+	void (*teardown)(void);
 	int (*testcase)(void);
 	const char *success_msg;
 	const char *fail_msg;
+	unsigned enabled;
 };
 
-#define TEST_CASE(fn) { NULL, NULL, fn, #fn " succeeded", #fn " failed"}
+#define TEST_CASE(fn) { NULL, NULL, fn, #fn " succeeded", #fn " failed", 1 }
 
 #define TEST_CASE_NAMED(name, fn) { NULL, NULL, fn, name " succeeded", \
-		name " failed"}
+		name " failed", 1 }
 
 #define TEST_CASE_ST(setup, teardown, testcase)         \
 		{ setup, teardown, testcase, #testcase " succeeded",    \
-		#testcase " failed "}
+		#testcase " failed ", 1 }
+
+
+#define TEST_CASE_DISABLED(fn) { NULL, NULL, fn, #fn " succeeded", \
+	#fn " failed", 0 }
+
+#define TEST_CASE_ST_DISABLED(setup, teardown, testcase)         \
+		{ setup, teardown, testcase, #testcase " succeeded",    \
+		#testcase " failed ", 0 }
 
-#define TEST_CASES_END() { NULL, NULL, NULL, NULL, NULL }
+#define TEST_CASES_END() { NULL, NULL, NULL, NULL, NULL, 0 }
 
 struct unit_test_suite {
 	const char *suite_name;
 	int (*setup)(void);
-	int (*teardown)(void);
+	void (*teardown)(void);
 	struct unit_test_case unit_test_cases[];
 };
 
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
new file mode 100644
index 0000000..fd5b7ec
--- /dev/null
+++ b/app/test/test_cryptodev.c
@@ -0,0 +1,1986 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2015 Intel Corporation. All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *	 * Redistributions of source code must retain the above copyright
+ *	   notice, this list of conditions and the following disclaimer.
+ *	 * Redistributions in binary form must reproduce the above copyright
+ *	   notice, this list of conditions and the following disclaimer in
+ *	   the documentation and/or other materials provided with the
+ *	   distribution.
+ *	 * Neither the name of Intel Corporation nor the names of its
+ *	   contributors may be used to endorse or promote products derived
+ *	   from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <rte_common.h>
+#include <rte_hexdump.h>
+#include <rte_mbuf.h>
+#include <rte_malloc.h>
+#include <rte_memcpy.h>
+#include <rte_mbuf_offload.h>
+
+#include <rte_crypto.h>
+#include <rte_cryptodev.h>
+#include <rte_cryptodev_pmd.h>
+
+#include "test.h"
+#include "test_cryptodev.h"
+
+static enum rte_cryptodev_type gbl_cryptodev_type;
+
+struct crypto_testsuite_params {
+	struct rte_mempool *mbuf_pool;
+	struct rte_mempool *mbuf_ol_pool;
+	struct rte_cryptodev_config conf;
+	struct rte_cryptodev_qp_conf qp_conf;
+
+	uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
+	uint8_t valid_dev_count;
+};
+
+struct crypto_unittest_params {
+	struct rte_crypto_xform cipher_xform;
+	struct rte_crypto_xform auth_xform;
+
+	struct rte_cryptodev_session *sess;
+
+	struct rte_mbuf_offload *ol;
+	struct rte_crypto_op *op;
+
+	struct rte_mbuf *obuf, *ibuf;
+
+	uint8_t *digest;
+};
+
+/*
+ * Forward declarations.
+ */
+static int
+test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
+		struct crypto_unittest_params *ut_params);
+
+static int
+test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_session *sess,
+		struct crypto_unittest_params *ut_params,
+		struct crypto_testsuite_params *ts_param);
+
+static struct rte_mbuf *
+setup_test_string(struct rte_mempool *mpool,
+		const char *string, size_t len, uint8_t blocksize)
+{
+	struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
+	size_t t_len = len - (blocksize ? (len % blocksize) : 0);
+
+	memset(m->buf_addr, 0, m->buf_len);
+	if (m) {
+		char *dst = rte_pktmbuf_append(m, t_len);
+
+		if (!dst) {
+			rte_pktmbuf_free(m);
+			return NULL;
+		}
+
+		rte_memcpy(dst, string, t_len);
+	}
+
+	return m;
+}
+
+#if HEX_DUMP
+static void
+hexdump_mbuf_data(FILE *f, const char *title, struct rte_mbuf *m)
+{
+	rte_hexdump(f, title, rte_pktmbuf_mtod(m, const void *), m->data_len);
+}
+#endif
+
+static struct rte_mbuf *
+process_crypto_request(uint8_t dev_id, struct rte_mbuf *ibuf)
+{
+	struct rte_mbuf *obuf = NULL;
+#if HEX_DUMP
+	hexdump_mbuf_data(stdout, "Enqueued Packet", ibuf);
+#endif
+
+	if (rte_cryptodev_enqueue_burst(dev_id, 0, &ibuf, 1) != 1) {
+		printf("Error sending packet for encryption");
+		return NULL;
+	}
+	while (rte_cryptodev_dequeue_burst(dev_id, 0, &obuf, 1) == 0)
+		rte_pause();
+
+#if HEX_DUMP
+	if (obuf)
+		hexdump_mbuf_data(stdout, "Dequeued Packet", obuf);
+#endif
+
+	return obuf;
+}
+
+static struct crypto_testsuite_params testsuite_params = { NULL };
+static struct crypto_unittest_params unittest_params;
+
+static int
+testsuite_setup(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct rte_cryptodev_info info;
+	unsigned i, nb_devs, dev_id = 0;
+	uint16_t qp_id;
+
+	memset(ts_params, 0, sizeof(*ts_params));
+
+	ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
+	if (ts_params->mbuf_pool == NULL) {
+		/* Not already created so create */
+		ts_params->mbuf_pool = rte_pktmbuf_pool_create(
+				"CRYPTO_MBUFPOOL",
+				NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
+				rte_socket_id());
+		if (ts_params->mbuf_pool == NULL) {
+			RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
+			return TEST_FAILED;
+		}
+	}
+
+	ts_params->mbuf_ol_pool = rte_pktmbuf_offload_pool_create(
+			"MBUF_OFFLOAD_POOL",
+			NUM_MBUFS, MBUF_CACHE_SIZE,
+			DEFAULT_NUM_XFORMS * sizeof(struct rte_crypto_xform),
+			rte_socket_id());
+	if (ts_params->mbuf_ol_pool == NULL) {
+		RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
+		return TEST_FAILED;
+	}
+
+	/* Create 2 AESNI MB devices if required */
+	if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD) {
+		nb_devs = rte_cryptodev_count_devtype(
+				RTE_CRYPTODEV_AESNI_MB_PMD);
+		if (nb_devs < 2) {
+			for (i = nb_devs; i < 2; i++) {
+				int dev_id = rte_eal_vdev_init(
+					CRYPTODEV_NAME_AESNI_MB_PMD, NULL);
+
+				TEST_ASSERT(dev_id >= 0,
+					"Failed to create instance %u of"
+					" pmd : %s",
+					i, CRYPTODEV_NAME_AESNI_MB_PMD);
+			}
+		}
+	}
+
+	nb_devs = rte_cryptodev_count();
+	if (nb_devs < 1) {
+		RTE_LOG(ERR, USER1, "No crypto devices found?");
+		return TEST_FAILED;
+	}
+
+	/* Create list of valid crypto devs */
+	for (i = 0; i < nb_devs; i++) {
+		rte_cryptodev_info_get(i, &info);
+		if (info.dev_type == gbl_cryptodev_type)
+			ts_params->valid_devs[ts_params->valid_dev_count++] = i;
+	}
+
+	if (ts_params->valid_dev_count < 1)
+		return TEST_FAILED;
+
+	/* Set up all the qps on the first of the valid devices found */
+	for (i = 0; i < 1; i++) {
+		dev_id = ts_params->valid_devs[i];
+
+		rte_cryptodev_info_get(dev_id, &info);
+
+		/*
+		 * Since we can't free and re-allocate queue memory always set
+		 * the queues on this device up to max size first so enough
+		 * memory is allocated for any later re-configures needed by
+		 * other tests
+		 */
+
+		ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
+		ts_params->conf.socket_id = SOCKET_ID_ANY;
+		ts_params->conf.session_mp.nb_objs = info.max_nb_sessions;
+
+		TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
+				&ts_params->conf),
+				"Failed to configure cryptodev %u with %u qps",
+				dev_id, ts_params->conf.nb_queue_pairs);
+
+		ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
+
+		for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
+			TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
+					dev_id, qp_id, &ts_params->qp_conf,
+					rte_cryptodev_socket_id(dev_id)),
+					"Failed to setup queue pair %u on "
+					"cryptodev %u",
+					qp_id, dev_id);
+		}
+	}
+
+	return TEST_SUCCESS;
+}
+
+static void
+testsuite_teardown(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+
+	if (ts_params->mbuf_pool != NULL) {
+		RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
+		rte_mempool_count(ts_params->mbuf_pool));
+	}
+
+
+	if (ts_params->mbuf_ol_pool != NULL) {
+		RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
+		rte_mempool_count(ts_params->mbuf_ol_pool));
+	}
+
+}
+
+static int
+ut_setup(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	uint16_t qp_id;
+
+	/* Clear unit test parameters before running test */
+	memset(ut_params, 0, sizeof(*ut_params));
+
+	/* Reconfigure device to default parameters */
+	ts_params->conf.nb_queue_pairs = DEFAULT_NUM_QPS_PER_QAT_DEVICE;
+	ts_params->conf.socket_id = SOCKET_ID_ANY;
+	ts_params->conf.session_mp.nb_objs =
+			(gbl_cryptodev_type == RTE_CRYPTODEV_QAT_PMD) ?
+					DEFAULT_NUM_OPS_INFLIGHT :
+					DEFAULT_NUM_OPS_INFLIGHT;
+
+	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
+			&ts_params->conf),
+			"Failed to configure cryptodev %u",
+			ts_params->valid_devs[0]);
+
+	/*
+	 * Now reconfigure queues to size we actually want to use in this
+	 * test suite.
+	 */
+	ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
+		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
+			ts_params->valid_devs[0], qp_id,
+			&ts_params->qp_conf,
+			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
+			"Failed to setup queue pair %u on cryptodev %u",
+			qp_id, ts_params->valid_devs[0]);
+	}
+
+
+	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
+
+	/* Start the device */
+	TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
+			"Failed to start cryptodev %u",
+			ts_params->valid_devs[0]);
+
+	return TEST_SUCCESS;
+}
+
+static void
+ut_teardown(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+	struct rte_cryptodev_stats stats;
+
+	/* free crypto session structure */
+	if (ut_params->sess) {
+		rte_cryptodev_session_free(ts_params->valid_devs[0],
+				ut_params->sess);
+		ut_params->sess = NULL;
+	}
+
+	/* free crypto operation structure */
+	if (ut_params->ol)
+		rte_pktmbuf_offload_free(ut_params->ol);
+
+	/*
+	 * free mbuf - both obuf and ibuf are usually the same,
+	 * but rte copes even if we call free twice
+	 */
+	if (ut_params->obuf) {
+		rte_pktmbuf_free(ut_params->obuf);
+		ut_params->obuf = 0;
+	}
+	if (ut_params->ibuf) {
+		rte_pktmbuf_free(ut_params->ibuf);
+		ut_params->ibuf = 0;
+	}
+
+	if (ts_params->mbuf_pool != NULL)
+		RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
+				rte_mempool_count(ts_params->mbuf_pool));
+
+	rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
+
+	/* Stop the device */
+	rte_cryptodev_stop(ts_params->valid_devs[0]);
+}
+
+static int
+test_device_configure_invalid_dev_id(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	uint16_t dev_id, num_devs = 0;
+
+	TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
+			"Need at least %d devices for test", 1);
+
+	/* valid dev_id values */
+	dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1];
+
+	/* Stop the device in case it's started so it can be configured */
+	rte_cryptodev_stop(ts_params->valid_devs[dev_id]);
+
+	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
+			"Failed test for rte_cryptodev_configure: "
+			"invalid dev_num %u", dev_id);
+
+	/* invalid dev_id values */
+	dev_id = num_devs;
+
+	TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
+			"Failed test for rte_cryptodev_configure: "
+			"invalid dev_num %u", dev_id);
+
+	dev_id = 0xff;
+
+	TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
+			"Failed test for rte_cryptodev_configure:"
+			"invalid dev_num %u", dev_id);
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_device_configure_invalid_queue_pair_ids(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+
+	/* Stop the device in case it's started so it can be configured */
+	rte_cryptodev_stop(ts_params->valid_devs[0]);
+
+	/* valid - one queue pairs */
+	ts_params->conf.nb_queue_pairs = 1;
+
+	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
+			&ts_params->conf),
+			"Failed to configure cryptodev: dev_id %u, qp_id %u",
+			ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
+
+
+	/* valid - max value queue pairs */
+	ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;
+
+	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
+			&ts_params->conf),
+			"Failed to configure cryptodev: dev_id %u, qp_id %u",
+			ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
+
+
+	/* invalid - zero queue pairs */
+	ts_params->conf.nb_queue_pairs = 0;
+
+	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
+			&ts_params->conf),
+			"Failed test for rte_cryptodev_configure, dev_id %u,"
+			" invalid qps: %u",
+			ts_params->valid_devs[0],
+			ts_params->conf.nb_queue_pairs);
+
+
+	/* invalid - max value supported by field queue pairs */
+	ts_params->conf.nb_queue_pairs = UINT16_MAX;
+
+	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
+			&ts_params->conf),
+			"Failed test for rte_cryptodev_configure, dev_id %u,"
+			" invalid qps: %u",
+			ts_params->valid_devs[0],
+			ts_params->conf.nb_queue_pairs);
+
+
+	/* invalid - max value + 1 queue pairs */
+	ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE + 1;
+
+	TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
+			&ts_params->conf),
+			"Failed test for rte_cryptodev_configure, dev_id %u,"
+			" invalid qps: %u",
+			ts_params->valid_devs[0],
+			ts_params->conf.nb_queue_pairs);
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_queue_pair_descriptor_setup(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct rte_cryptodev_info dev_info;
+	struct rte_cryptodev_qp_conf qp_conf = {
+		.nb_descriptors = MAX_NUM_OPS_INFLIGHT
+	};
+
+	uint16_t qp_id;
+
+	/* Stop the device in case it's started so it can be configured */
+	rte_cryptodev_stop(ts_params->valid_devs[0]);
+
+
+	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
+
+	ts_params->conf.session_mp.nb_objs = dev_info.max_nb_sessions;
+
+	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
+			&ts_params->conf), "Failed to configure cryptodev %u",
+			ts_params->valid_devs[0]);
+
+
+	/*
+	 * Test various ring sizes on this device. memzones can't be
+	 * freed so are re-used if ring is released and re-created.
+	 */
+	qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
+		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
+				ts_params->valid_devs[0], qp_id, &qp_conf,
+				rte_cryptodev_socket_id(
+						ts_params->valid_devs[0])),
+				"Failed test for "
+				"rte_cryptodev_queue_pair_setup: num_inflights "
+				"%u on qp %u on cryptodev %u",
+				qp_conf.nb_descriptors, qp_id,
+				ts_params->valid_devs[0]);
+	}
+
+	qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
+		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
+				ts_params->valid_devs[0], qp_id, &qp_conf,
+				rte_cryptodev_socket_id(
+						ts_params->valid_devs[0])),
+				"Failed test for"
+				" rte_cryptodev_queue_pair_setup: num_inflights"
+				" %u on qp %u on cryptodev %u",
+				qp_conf.nb_descriptors, qp_id,
+				ts_params->valid_devs[0]);
+	}
+
+	qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
+		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
+				ts_params->valid_devs[0], qp_id, &qp_conf,
+				rte_cryptodev_socket_id(
+						ts_params->valid_devs[0])),
+				"Failed test for "
+				"rte_cryptodev_queue_pair_setup: num_inflights"
+				" %u on qp %u on cryptodev %u",
+				qp_conf.nb_descriptors, qp_id,
+				ts_params->valid_devs[0]);
+	}
+
+	/* invalid number of descriptors - max supported + 2 */
+	qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
+		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
+				ts_params->valid_devs[0], qp_id, &qp_conf,
+				rte_cryptodev_socket_id(
+						ts_params->valid_devs[0])),
+				"Unexpectedly passed test for "
+				"rte_cryptodev_queue_pair_setup:"
+				"num_inflights %u on qp %u on cryptodev %u",
+				qp_conf.nb_descriptors, qp_id,
+				ts_params->valid_devs[0]);
+	}
+
+	/* invalid number of descriptors - max value of parameter */
+	qp_conf.nb_descriptors = UINT32_MAX-1;
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
+		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
+				ts_params->valid_devs[0], qp_id, &qp_conf,
+				rte_cryptodev_socket_id(
+						ts_params->valid_devs[0])),
+				"Unexpectedly passed test for "
+				"rte_cryptodev_queue_pair_setup:"
+				"num_inflights %u on qp %u on cryptodev %u",
+				qp_conf.nb_descriptors, qp_id,
+				ts_params->valid_devs[0]);
+	}
+
+	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
+		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
+				ts_params->valid_devs[0], qp_id, &qp_conf,
+				rte_cryptodev_socket_id(
+						ts_params->valid_devs[0])),
+				"Failed test for"
+				" rte_cryptodev_queue_pair_setup:"
+				"num_inflights %u on qp %u on cryptodev %u",
+				qp_conf.nb_descriptors, qp_id,
+				ts_params->valid_devs[0]);
+	}
+
+	/* invalid number of descriptors - max supported + 1 */
+	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
+		TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
+				ts_params->valid_devs[0], qp_id, &qp_conf,
+				rte_cryptodev_socket_id(
+						ts_params->valid_devs[0])),
+				"Unexpectedly passed test for "
+				"rte_cryptodev_queue_pair_setup:"
+				"num_inflights %u on qp %u on cryptodev %u",
+				qp_conf.nb_descriptors, qp_id,
+				ts_params->valid_devs[0]);
+	}
+
+	/* test invalid queue pair id */
+	qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;	/*valid */
+
+	qp_id = DEFAULT_NUM_QPS_PER_QAT_DEVICE;		/*invalid */
+
+	TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
+			ts_params->valid_devs[0],
+			qp_id, &qp_conf,
+			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
+			"Failed test for rte_cryptodev_queue_pair_setup:"
+			"invalid qp %u on cryptodev %u",
+			qp_id, ts_params->valid_devs[0]);
+
+	qp_id = 0xffff; /*invalid*/
+
+	TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
+			ts_params->valid_devs[0],
+			qp_id, &qp_conf,
+			rte_cryptodev_socket_id(ts_params->valid_devs[0])),
+			"Failed test for rte_cryptodev_queue_pair_setup:"
+			"invalid qp %u on cryptodev %u",
+			qp_id, ts_params->valid_devs[0]);
+
+	return TEST_SUCCESS;
+}
+
+/* ***** Plaintext data for tests ***** */
+
+const char catch_22_quote_1[] =
+		"There was only one catch and that was Catch-22, which "
+		"specified that a concern for one's safety in the face of "
+		"dangers that were real and immediate was the process of a "
+		"rational mind. Orr was crazy and could be grounded. All he "
+		"had to do was ask; and as soon as he did, he would no longer "
+		"be crazy and would have to fly more missions. Orr would be "
+		"crazy to fly more missions and sane if he didn't, but if he "
+		"was sane he had to fly them. If he flew them he was crazy "
+		"and didn't have to; but if he didn't want to he was sane and "
+		"had to. Yossarian was moved very deeply by the absolute "
+		"simplicity of this clause of Catch-22 and let out a "
+		"respectful whistle. \"That's some catch, that Catch-22\", he "
+		"observed. \"It's the best there is,\" Doc Daneeka agreed.";
+
+const char catch_22_quote[] =
+		"What a lousy earth! He wondered how many people were "
+		"destitute that same night even in his own prosperous country, "
+		"how many homes were shanties, how many husbands were drunk "
+		"and wives socked, and how many children were bullied, abused, "
+		"or abandoned. How many families hungered for food they could "
+		"not afford to buy? How many hearts were broken? How many "
+		"suicides would take place that same night, how many people "
+		"would go insane? How many cockroaches and landlords would "
+		"triumph? How many winners were losers, successes failures, "
+		"and rich men poor men? How many wise guys were stupid? How "
+		"many happy endings were unhappy endings? How many honest men "
+		"were liars, brave men cowards, loyal men traitors, how many "
+		"sainted men were corrupt, how many people in positions of "
+		"trust had sold their souls to bodyguards, how many had never "
+		"had souls? How many straight-and-narrow paths were crooked "
+		"paths? How many best families were worst families and how "
+		"many good people were bad people? When you added them all up "
+		"and then subtracted, you might be left with only the children, "
+		"and perhaps with Albert Einstein and an old violinist or "
+		"sculptor somewhere.";
+
+#define QUOTE_480_BYTES		(480)
+#define QUOTE_512_BYTES		(512)
+#define QUOTE_768_BYTES		(768)
+#define QUOTE_1024_BYTES	(1024)
+
+
+
+/* ***** SHA1 Hash Tests ***** */
+
+#define HMAC_KEY_LENGTH_SHA1	(DIGEST_BYTE_LENGTH_SHA1)
+
+static uint8_t hmac_sha1_key[] = {
+	0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
+	0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
+	0xDE, 0xF4, 0xDE, 0xAD };
+
+/* ***** SHA224 Hash Tests ***** */
+
+#define HMAC_KEY_LENGTH_SHA224	(DIGEST_BYTE_LENGTH_SHA224)
+
+
+/* ***** AES-CBC Cipher Tests ***** */
+
+#define CIPHER_KEY_LENGTH_AES_CBC	(16)
+#define CIPHER_IV_LENGTH_AES_CBC	(CIPHER_KEY_LENGTH_AES_CBC)
+
+static uint8_t aes_cbc_key[] = {
+	0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
+	0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
+
+static uint8_t aes_cbc_iv[] = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
+
+
+/* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
+
+static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
+	0x8B, 0X4D, 0XDA, 0X1B, 0XCF, 0X04, 0XA0, 0X31,
+	0XB4, 0XBF, 0XBD, 0X68, 0X43, 0X20, 0X7E, 0X76,
+	0XB1, 0X96, 0X8B, 0XA2, 0X7C, 0XA2, 0X83, 0X9E,
+	0X39, 0X5A, 0X2F, 0X7E, 0X92, 0XB4, 0X48, 0X1A,
+	0X3F, 0X6B, 0X5D, 0XDF, 0X52, 0X85, 0X5F, 0X8E,
+	0X42, 0X3C, 0XFB, 0XE9, 0X1A, 0X24, 0XD6, 0X08,
+	0XDD, 0XFD, 0X16, 0XFB, 0XE9, 0X55, 0XEF, 0XF0,
+	0XA0, 0X8D, 0X13, 0XAB, 0X81, 0XC6, 0X90, 0X01,
+	0XB5, 0X18, 0X84, 0XB3, 0XF6, 0XE6, 0X11, 0X57,
+	0XD6, 0X71, 0XC6, 0X3C, 0X3F, 0X2F, 0X33, 0XEE,
+	0X24, 0X42, 0X6E, 0XAC, 0X0B, 0XCA, 0XEC, 0XF9,
+	0X84, 0XF8, 0X22, 0XAA, 0X60, 0XF0, 0X32, 0XA9,
+	0X75, 0X75, 0X3B, 0XCB, 0X70, 0X21, 0X0A, 0X8D,
+	0X0F, 0XE0, 0XC4, 0X78, 0X2B, 0XF8, 0X97, 0XE3,
+	0XE4, 0X26, 0X4B, 0X29, 0XDA, 0X88, 0XCD, 0X46,
+	0XEC, 0XAA, 0XF9, 0X7F, 0XF1, 0X15, 0XEA, 0XC3,
+	0X87, 0XE6, 0X31, 0XF2, 0XCF, 0XDE, 0X4D, 0X80,
+	0X70, 0X91, 0X7E, 0X0C, 0XF7, 0X26, 0X3A, 0X92,
+	0X4F, 0X18, 0X83, 0XC0, 0X8F, 0X59, 0X01, 0XA5,
+	0X88, 0XD1, 0XDB, 0X26, 0X71, 0X27, 0X16, 0XF5,
+	0XEE, 0X10, 0X82, 0XAC, 0X68, 0X26, 0X9B, 0XE2,
+	0X6D, 0XD8, 0X9A, 0X80, 0XDF, 0X04, 0X31, 0XD5,
+	0XF1, 0X35, 0X5C, 0X3B, 0XDD, 0X9A, 0X65, 0XBA,
+	0X58, 0X34, 0X85, 0X61, 0X1C, 0X42, 0X10, 0X76,
+	0X73, 0X02, 0X42, 0XC9, 0X23, 0X18, 0X8E, 0XB4,
+	0X6F, 0XB4, 0XA3, 0X54, 0X6E, 0X88, 0X3B, 0X62,
+	0X7C, 0X02, 0X8D, 0X4C, 0X9F, 0XC8, 0X45, 0XF4,
+	0XC9, 0XDE, 0X4F, 0XEB, 0X22, 0X83, 0X1B, 0XE4,
+	0X49, 0X37, 0XE4, 0XAD, 0XE7, 0XCD, 0X21, 0X54,
+	0XBC, 0X1C, 0XC2, 0X04, 0X97, 0XB4, 0X10, 0X61,
+	0XF0, 0XE4, 0XEF, 0X27, 0X63, 0X3A, 0XDA, 0X91,
+	0X41, 0X25, 0X62, 0X1C, 0X5C, 0XB6, 0X38, 0X4A,
+	0X88, 0X71, 0X59, 0X5A, 0X8D, 0XA0, 0X09, 0XAF,
+	0X72, 0X94, 0XD7, 0X79, 0X5C, 0X60, 0X7C, 0X8F,
+	0X4C, 0XF5, 0XD9, 0XA1, 0X39, 0X6D, 0X81, 0X28,
+	0XEF, 0X13, 0X28, 0XDF, 0XF5, 0X3E, 0XF7, 0X8E,
+	0X09, 0X9C, 0X78, 0X18, 0X79, 0XB8, 0X68, 0XD7,
+	0XA8, 0X29, 0X62, 0XAD, 0XDE, 0XE1, 0X61, 0X76,
+	0X1B, 0X05, 0X16, 0XCD, 0XBF, 0X02, 0X8E, 0XA6,
+	0X43, 0X6E, 0X92, 0X55, 0X4F, 0X60, 0X9C, 0X03,
+	0XB8, 0X4F, 0XA3, 0X02, 0XAC, 0XA8, 0XA7, 0X0C,
+	0X1E, 0XB5, 0X6B, 0XF8, 0XC8, 0X4D, 0XDE, 0XD2,
+	0XB0, 0X29, 0X6E, 0X40, 0XE6, 0XD6, 0XC9, 0XE6,
+	0XB9, 0X0F, 0XB6, 0X63, 0XF5, 0XAA, 0X2B, 0X96,
+	0XA7, 0X16, 0XAC, 0X4E, 0X0A, 0X33, 0X1C, 0XA6,
+	0XE6, 0XBD, 0X8A, 0XCF, 0X40, 0XA9, 0XB2, 0XFA,
+	0X63, 0X27, 0XFD, 0X9B, 0XD9, 0XFC, 0XD5, 0X87,
+	0X8D, 0X4C, 0XB6, 0XA4, 0XCB, 0XE7, 0X74, 0X55,
+	0XF4, 0XFB, 0X41, 0X25, 0XB5, 0X4B, 0X0A, 0X1B,
+	0XB1, 0XD6, 0XB7, 0XD9, 0X47, 0X2A, 0XC3, 0X98,
+	0X6A, 0XC4, 0X03, 0X73, 0X1F, 0X93, 0X6E, 0X53,
+	0X19, 0X25, 0X64, 0X15, 0X83, 0XF9, 0X73, 0X2A,
+	0X74, 0XB4, 0X93, 0X69, 0XC4, 0X72, 0XFC, 0X26,
+	0XA2, 0X9F, 0X43, 0X45, 0XDD, 0XB9, 0XEF, 0X36,
+	0XC8, 0X3A, 0XCD, 0X99, 0X9B, 0X54, 0X1A, 0X36,
+	0XC1, 0X59, 0XF8, 0X98, 0XA8, 0XCC, 0X28, 0X0D,
+	0X73, 0X4C, 0XEE, 0X98, 0XCB, 0X7C, 0X58, 0X7E,
+	0X20, 0X75, 0X1E, 0XB7, 0XC9, 0XF8, 0XF2, 0X0E,
+	0X63, 0X9E, 0X05, 0X78, 0X1A, 0XB6, 0XA8, 0X7A,
+	0XF9, 0X98, 0X6A, 0XA6, 0X46, 0X84, 0X2E, 0XF6,
+	0X4B, 0XDC, 0X9B, 0X8F, 0X9B, 0X8F, 0XEE, 0XB4,
+	0XAA, 0X3F, 0XEE, 0XC0, 0X37, 0X27, 0X76, 0XC7,
+	0X95, 0XBB, 0X26, 0X74, 0X69, 0X12, 0X7F, 0XF1,
+	0XBB, 0XFF, 0XAE, 0XB5, 0X99, 0X6E, 0XCB, 0X0C
+};
+
+static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
+	0x9a, 0X4f, 0X88, 0X1b, 0Xb6, 0X8f, 0Xd8, 0X60,
+	0X42, 0X1a, 0X7d, 0X3d, 0Xf5, 0X82, 0X80, 0Xf1,
+	0X18, 0X8c, 0X1d, 0X32 };
+
+
+static int
+test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Generate test mbuf data and space for digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			catch_22_quote,	QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_SHA1);
+	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = &ut_params->auth_xform;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = NULL;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
+	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
+	ut_params->auth_xform.auth.key.data = hmac_sha1_key;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->cipher_xform);
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->digest.data = ut_params->digest;
+	ut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, QUOTE_512_BYTES);
+	ut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA1;
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
+			CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC,
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES,
+			"Ciphertext data not as expected");
+
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
+			gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?
+					TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
+					DIGEST_BYTE_LENGTH_SHA1,
+			"Generated digest data not as expected");
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_AES_CBC_HMAC_SHA1_encrypt_digest_sessionless(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Generate test mbuf data and space for digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			catch_22_quote, QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_SHA1);
+	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+	TEST_ASSERT_NOT_NULL(rte_pktmbuf_offload_alloc_crypto_xforms(
+			ut_params->ol, 2),
+			"failed to allocate space for crypto transforms");
+
+	/* Set crypto operation data parameters */
+	ut_params->op->xform->type = RTE_CRYPTO_XFORM_CIPHER;
+
+	/* cipher parameters */
+	ut_params->op->xform->cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+	ut_params->op->xform->cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->op->xform->cipher.key.data = aes_cbc_key;
+	ut_params->op->xform->cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* hash parameters */
+	ut_params->op->xform->next->type = RTE_CRYPTO_XFORM_AUTH;
+
+	ut_params->op->xform->next->auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+	ut_params->op->xform->next->auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
+	ut_params->op->xform->next->auth.key.length = HMAC_KEY_LENGTH_SHA1;
+	ut_params->op->xform->next->auth.key.data = hmac_sha1_key;
+	ut_params->op->xform->next->auth.digest_length =
+			DIGEST_BYTE_LENGTH_SHA1;
+
+	ut_params->op->digest.data = ut_params->digest;
+	ut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, QUOTE_512_BYTES);
+	ut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA1;
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
+			CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC,
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES,
+			"Ciphertext data not as expected");
+
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
+			gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?
+					TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
+					DIGEST_BYTE_LENGTH_SHA1,
+			"Generated digest data not as expected");
+
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_AES_CBC_HMAC_SHA1_decrypt_digest_verify(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Generate test mbuf data and digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			(const char *)
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_SHA1);
+	TEST_ASSERT_NOT_NULL(ut_params->digest,	"no room to append digest");
+
+	rte_memcpy(ut_params->digest,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
+			DIGEST_BYTE_LENGTH_SHA1);
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = NULL;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = &ut_params->cipher_xform;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
+	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
+	ut_params->auth_xform.auth.key.data = hmac_sha1_key;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->auth_xform);
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->digest.data = ut_params->digest;
+	ut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, QUOTE_512_BYTES);
+	ut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA1;
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
+			CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC,
+			catch_22_quote,
+			QUOTE_512_BYTES,
+			"Ciphertext data not as expected");
+
+	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
+			"Digest verification failed");
+
+
+	return TEST_SUCCESS;
+}
+
+
+/* ***** AES-CBC / HMAC-SHA256 Hash Tests ***** */
+
+#define HMAC_KEY_LENGTH_SHA256	(DIGEST_BYTE_LENGTH_SHA256)
+
+static uint8_t hmac_sha256_key[] = {
+	0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
+	0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
+	0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
+	0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60 };
+
+static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA256_digest[] = {
+	0xc8, 0x57, 0x57, 0x31, 0x03, 0xe0, 0x03, 0x55,
+	0x07, 0xc8, 0x9e, 0x7f, 0x48, 0x9a, 0x61, 0x9a,
+	0x68, 0xee, 0x03, 0x0e, 0x71, 0x75, 0xc7, 0xf4,
+	0x2e, 0x45, 0x26, 0x32, 0x7c, 0x12, 0x15, 0x15 };
+
+static int
+test_AES_CBC_HMAC_SHA256_encrypt_digest(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Generate test mbuf data and space for digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			catch_22_quote,	QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_SHA256);
+	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = &ut_params->auth_xform;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = NULL;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA256_HMAC;
+	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;
+	ut_params->auth_xform.auth.key.data = hmac_sha256_key;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->cipher_xform);
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->digest.data = ut_params->digest;
+	ut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, QUOTE_512_BYTES);
+	ut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA256;
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
+			CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC,
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES,
+			"Ciphertext data not as expected");
+
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA256_digest,
+			gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?
+					TRUNCATED_DIGEST_BYTE_LENGTH_SHA256 :
+					DIGEST_BYTE_LENGTH_SHA256,
+			"Generated digest data not as expected");
+
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_AES_CBC_HMAC_SHA256_decrypt_digest_verify(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Generate test mbuf data and digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			(const char *)
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_SHA256);
+	TEST_ASSERT_NOT_NULL(ut_params->digest,	"no room to append digest");
+
+	rte_memcpy(ut_params->digest,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA256_digest,
+			DIGEST_BYTE_LENGTH_SHA256);
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = NULL;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = &ut_params->cipher_xform;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA256_HMAC;
+	ut_params->auth_xform.auth.key.data = hmac_sha256_key;
+	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->auth_xform);
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->digest.data = ut_params->digest;
+	ut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, QUOTE_512_BYTES);
+	ut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA256;
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(
+			ut_params->ibuf, CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC, catch_22_quote,
+			QUOTE_512_BYTES,
+			"Plaintext data not as expected");
+
+	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
+			"Digest verification failed");
+
+
+	return TEST_SUCCESS;
+}
+
+/* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
+
+#define HMAC_KEY_LENGTH_SHA512  (DIGEST_BYTE_LENGTH_SHA512)
+
+static uint8_t hmac_sha512_key[] = {
+	0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
+	0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
+	0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
+	0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
+	0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
+	0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
+	0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
+	0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
+
+static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
+	0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
+	0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
+	0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
+	0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
+	0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
+	0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
+	0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
+	0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
+
+static int
+test_AES_CBC_HMAC_SHA512_encrypt_digest(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Generate test mbuf data and space for digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			catch_22_quote,	QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_SHA512);
+	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = &ut_params->auth_xform;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = NULL;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
+	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
+	ut_params->auth_xform.auth.key.data = hmac_sha512_key;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->cipher_xform);
+
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->digest.data = ut_params->digest;
+	ut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, QUOTE_512_BYTES);
+	ut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA512;
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
+			CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC,
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES,
+			"Ciphertext data not as expected");
+
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
+			gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?
+					TRUNCATED_DIGEST_BYTE_LENGTH_SHA512 :
+					DIGEST_BYTE_LENGTH_SHA512,
+			"Generated digest data not as expected");
+
+
+	return TEST_SUCCESS;
+}
+
+
+static int
+test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
+		struct crypto_unittest_params *ut_params);
+
+static int
+test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_session *sess,
+		struct crypto_unittest_params *ut_params,
+		struct crypto_testsuite_params *ts_params);
+
+static int
+test_AES_CBC_HMAC_SHA512_decrypt_digest_verify(void)
+{
+	struct crypto_unittest_params *ut_params = &unittest_params;
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+
+	TEST_ASSERT(test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
+			ut_params) == TEST_SUCCESS,
+			"Failed to create session params");
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->auth_xform);
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	return test_AES_CBC_HMAC_SHA512_decrypt_perform(ut_params->sess,
+			ut_params, ts_params);
+}
+
+static int
+test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
+		struct crypto_unittest_params *ut_params)
+{
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = NULL;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = &ut_params->cipher_xform;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
+	ut_params->auth_xform.auth.key.data = hmac_sha512_key;
+	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
+	return TEST_SUCCESS;
+}
+
+
+static int
+test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_session *sess,
+		struct crypto_unittest_params *ut_params,
+		struct crypto_testsuite_params *ts_params)
+{
+	/* Generate test mbuf data and digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			(const char *)
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_SHA512);
+	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+	rte_memcpy(ut_params->digest,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
+			DIGEST_BYTE_LENGTH_SHA512);
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, sess);
+
+	ut_params->op->digest.data = ut_params->digest;
+	ut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, QUOTE_512_BYTES);
+	ut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA512;
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(
+			ut_params->ibuf, CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, 0);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC, catch_22_quote,
+			QUOTE_512_BYTES,
+			"Plaintext data not as expected");
+
+	/* Validate obuf */
+	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
+			"Digest verification failed");
+
+
+
+	return TEST_SUCCESS;
+}
+
+/* ***** AES-CBC / HMAC-AES_XCBC Chain Tests ***** */
+
+static uint8_t aes_cbc_hmac_aes_xcbc_key[] = {
+	0x87, 0x61, 0x54, 0x53, 0xC4, 0x6D, 0xDD, 0x51,
+	0xE1, 0x9F, 0x86, 0x64, 0x39, 0x0A, 0xE6, 0x59
+	};
+
+static const uint8_t  catch_22_quote_2_512_bytes_HMAC_AES_XCBC_digest[] = {
+	0xE0, 0xAC, 0x9A, 0xC4, 0x22, 0x64, 0x35, 0x89,
+	0x77, 0x1D, 0x8B, 0x75
+	};
+
+static int
+test_AES_CBC_HMAC_AES_XCBC_encrypt_digest(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Generate test mbuf data and space for digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			catch_22_quote, QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_AES_XCBC);
+	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = &ut_params->auth_xform;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = NULL;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC;
+	ut_params->auth_xform.auth.key.length = AES_XCBC_MAC_KEY_SZ;
+	ut_params->auth_xform.auth.key.data = aes_cbc_hmac_aes_xcbc_key;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_AES_XCBC;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->cipher_xform);
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->iv.data = (uint8_t *)
+		rte_pktmbuf_prepend(ut_params->ibuf,
+				CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC,
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES,
+			"Ciphertext data not as expected");
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC + QUOTE_512_BYTES,
+			catch_22_quote_2_512_bytes_HMAC_AES_XCBC_digest,
+			DIGEST_BYTE_LENGTH_AES_XCBC,
+			"Generated digest data not as expected");
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_AES_CBC_HMAC_AES_XCBC_decrypt_digest_verify(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Generate test mbuf data and space for digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+		(const char *)catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+		QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_AES_XCBC);
+	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+	rte_memcpy(ut_params->digest,
+			catch_22_quote_2_512_bytes_HMAC_AES_XCBC_digest,
+			DIGEST_BYTE_LENGTH_AES_XCBC);
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = NULL;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = &ut_params->cipher_xform;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC;
+	ut_params->auth_xform.auth.key.length = AES_XCBC_MAC_KEY_SZ;
+	ut_params->auth_xform.auth.key.data = aes_cbc_hmac_aes_xcbc_key;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_AES_XCBC;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->auth_xform);
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
+			CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
+			CIPHER_IV_LENGTH_AES_CBC, catch_22_quote,
+			QUOTE_512_BYTES,
+			"Ciphertext data not as expected");
+
+	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
+			"Digest verification failed");
+
+	return TEST_SUCCESS;
+}
+
+
+/* ***** AES-GCM Tests ***** */
+
+static int
+test_stats(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct rte_cryptodev_stats stats;
+	struct rte_cryptodev *dev;
+	cryptodev_stats_get_t temp_pfn;
+
+	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
+	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
+			&stats) == -ENODEV),
+		"rte_cryptodev_stats_get invalid dev failed");
+	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
+		"rte_cryptodev_stats_get invalid Param failed");
+	dev = &rte_cryptodevs[ts_params->valid_devs[0]];
+	temp_pfn = dev->dev_ops->stats_get;
+	dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
+	TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
+			== -ENOTSUP),
+		"rte_cryptodev_stats_get invalid Param failed");
+	dev->dev_ops->stats_get = temp_pfn;
+
+	/* Test expected values */
+	ut_setup();
+	test_AES_CBC_HMAC_SHA1_encrypt_digest();
+	ut_teardown();
+	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
+			&stats),
+		"rte_cryptodev_stats_get failed");
+	TEST_ASSERT((stats.enqueued_count == 1),
+		"rte_cryptodev_stats_get returned unexpected enqueued stat");
+	TEST_ASSERT((stats.dequeued_count == 1),
+		"rte_cryptodev_stats_get returned unexpected enqueued stat");
+	TEST_ASSERT((stats.enqueue_err_count == 0),
+		"rte_cryptodev_stats_get returned unexpected enqueued stat");
+	TEST_ASSERT((stats.dequeue_err_count == 0),
+		"rte_cryptodev_stats_get returned unexpected enqueued stat");
+
+	/* invalid device but should ignore and not reset device stats*/
+	rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
+	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
+			&stats),
+		"rte_cryptodev_stats_get failed");
+	TEST_ASSERT((stats.enqueued_count == 1),
+		"rte_cryptodev_stats_get returned unexpected enqueued stat");
+
+	/* check that a valid reset clears stats */
+	rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
+	TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
+			&stats),
+					  "rte_cryptodev_stats_get failed");
+	TEST_ASSERT((stats.enqueued_count == 0),
+		"rte_cryptodev_stats_get returned unexpected enqueued stat");
+	TEST_ASSERT((stats.dequeued_count == 0),
+		"rte_cryptodev_stats_get returned unexpected enqueued stat");
+
+	return TEST_SUCCESS;
+}
+
+
+static int
+test_multi_session(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	struct rte_cryptodev_info dev_info;
+	struct rte_cryptodev_session **sessions;
+
+	uint16_t i;
+
+	test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params);
+
+
+	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
+
+	sessions = rte_malloc(NULL, (sizeof(struct rte_cryptodev_session *) *
+			dev_info.max_nb_sessions) + 1, 0);
+
+	/* Create multiple crypto sessions*/
+	for (i = 0; i < dev_info.max_nb_sessions; i++) {
+		sessions[i] = rte_cryptodev_session_create(
+				ts_params->valid_devs[0],
+			&ut_params->auth_xform);
+		TEST_ASSERT_NOT_NULL(sessions[i],
+				"Session creation failed at session number %u",
+				i);
+
+		/* Attempt to send a request on each session */
+		TEST_ASSERT_SUCCESS(test_AES_CBC_HMAC_SHA512_decrypt_perform(
+				sessions[i], ut_params, ts_params),
+				"Failed to perform decrypt on request "
+				"number %u.", i);
+	}
+
+	/* Next session create should fail */
+	sessions[i] = rte_cryptodev_session_create(ts_params->valid_devs[0],
+			&ut_params->auth_xform);
+	TEST_ASSERT_NULL(sessions[i],
+			"Session creation succeeded unexpectedly!");
+
+	for (i = 0; i < dev_info.max_nb_sessions; i++)
+		rte_cryptodev_session_free(ts_params->valid_devs[0],
+				sessions[i]);
+
+	rte_free(sessions);
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_not_in_place_crypto(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+	struct rte_mbuf *dst_m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
+
+	test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params);
+
+	/* Create multiple crypto sessions*/
+
+	ut_params->sess = rte_cryptodev_session_create(
+			ts_params->valid_devs[0], &ut_params->auth_xform);
+
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+
+	/* Generate test mbuf data and digest */
+	ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
+			(const char *)
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			QUOTE_512_BYTES, 0);
+
+	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+			DIGEST_BYTE_LENGTH_SHA512);
+	TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+	rte_memcpy(ut_params->digest,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
+			DIGEST_BYTE_LENGTH_SHA512);
+
+	/* Generate Crypto op data structure */
+	ut_params->ol = rte_pktmbuf_offload_alloc(ts_params->mbuf_ol_pool,
+				RTE_PKTMBUF_OL_CRYPTO);
+	TEST_ASSERT_NOT_NULL(ut_params->ol,
+			"Failed to allocate pktmbuf offload");
+
+	ut_params->op = &ut_params->ol->op.crypto;
+
+
+	/* Set crypto operation data parameters */
+	rte_crypto_op_attach_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->digest.data = ut_params->digest;
+	ut_params->op->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, QUOTE_512_BYTES);
+	ut_params->op->digest.length = DIGEST_BYTE_LENGTH_SHA512;
+
+	ut_params->op->iv.data = (uint8_t *)rte_pktmbuf_prepend(
+			ut_params->ibuf, CIPHER_IV_LENGTH_AES_CBC);
+	ut_params->op->iv.phys_addr = rte_pktmbuf_mtophys_offset(
+			ut_params->ibuf, 0);
+	ut_params->op->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	rte_memcpy(ut_params->op->iv.data, aes_cbc_iv,
+			CIPHER_IV_LENGTH_AES_CBC);
+
+	ut_params->op->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_cipher.length = QUOTE_512_BYTES;
+
+	ut_params->op->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+	ut_params->op->data.to_hash.length = QUOTE_512_BYTES;
+
+	ut_params->op->dst.m = dst_m;
+	ut_params->op->dst.offset = 0;
+
+	rte_pktmbuf_offload_attach(ut_params->ibuf, ut_params->ol);
+
+	/* Process crypto operation */
+	ut_params->obuf = process_crypto_request(ts_params->valid_devs[0],
+			ut_params->ibuf);
+	TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+	/* Validate obuf */
+	TEST_ASSERT_BUFFERS_ARE_EQUAL(
+			rte_pktmbuf_mtod(ut_params->op->dst.m, char *),
+			catch_22_quote,
+			QUOTE_512_BYTES,
+			"Plaintext data not as expected");
+
+	/* Validate obuf */
+
+	TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
+			"Digest verification failed");
+
+	return TEST_SUCCESS;
+}
+
+
+static struct unit_test_suite cryptodev_qat_testsuite  = {
+	.suite_name = "Crypto QAT Unit Test Suite",
+	.setup = testsuite_setup,
+	.teardown = testsuite_teardown,
+	.unit_test_cases = {
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_device_configure_invalid_dev_id),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_device_configure_invalid_queue_pair_ids),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_queue_pair_descriptor_setup),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_multi_session),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_AES_CBC_HMAC_SHA1_encrypt_digest),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_AES_CBC_HMAC_SHA1_decrypt_digest_verify),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_AES_CBC_HMAC_SHA256_encrypt_digest),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_AES_CBC_HMAC_SHA256_decrypt_digest_verify),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_AES_CBC_HMAC_SHA512_encrypt_digest),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_AES_CBC_HMAC_SHA512_decrypt_digest_verify),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_AES_CBC_HMAC_AES_XCBC_encrypt_digest),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_AES_CBC_HMAC_AES_XCBC_decrypt_digest_verify),
+
+		TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
+
+		TEST_CASES_END() /**< NULL terminate unit test array */
+	}
+};
+
+static struct unit_test_suite cryptodev_aesni_mb_testsuite  = {
+	.suite_name = "Crypto Device AESNI MB Unit Test Suite",
+	.setup = testsuite_setup,
+	.teardown = testsuite_teardown,
+	.unit_test_cases = {
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_SHA1_encrypt_digest),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_SHA1_decrypt_digest_verify),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_SHA256_encrypt_digest),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_SHA256_decrypt_digest_verify),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_SHA512_encrypt_digest),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_SHA512_decrypt_digest_verify),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_AES_XCBC_encrypt_digest),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_AES_XCBC_decrypt_digest_verify),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_AES_CBC_HMAC_SHA1_encrypt_digest_sessionless),
+
+		TEST_CASE_ST(ut_setup, ut_teardown,
+			test_not_in_place_crypto),
+
+		TEST_CASES_END() /**< NULL terminate unit test array */
+	}
+};
+
+static int
+test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
+{
+	gbl_cryptodev_type = RTE_CRYPTODEV_QAT_PMD;
+	return unit_test_suite_runner(&cryptodev_qat_testsuite);
+}
+static struct test_command cryptodev_qat_cmd = {
+	.command = "cryptodev_qat_autotest",
+	.callback = test_cryptodev_qat,
+};
+
+static int
+test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
+{
+	gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_MB_PMD;
+
+	return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
+}
+
+static struct test_command cryptodev_aesni_mb_cmd = {
+	.command = "cryptodev_aesni_mb_autotest",
+	.callback = test_cryptodev_aesni_mb,
+};
+
+REGISTER_TEST_COMMAND(cryptodev_qat_cmd);
+REGISTER_TEST_COMMAND(cryptodev_aesni_mb_cmd);
diff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h
new file mode 100644
index 0000000..034393e
--- /dev/null
+++ b/app/test/test_cryptodev.h
@@ -0,0 +1,68 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2015 Intel Corporation. All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *	 * Redistributions of source code must retain the above copyright
+ *	   notice, this list of conditions and the following disclaimer.
+ *	 * Redistributions in binary form must reproduce the above copyright
+ *	   notice, this list of conditions and the following disclaimer in
+ *	   the documentation and/or other materials provided with the
+ *	   distribution.
+ *	 * Neither the name of Intel Corporation nor the names of its
+ *	   contributors may be used to endorse or promote products derived
+ *	   from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef TEST_CRYPTODEV_H_
+#define TEST_CRYPTODEV_H_
+
+#define HEX_DUMP 0
+
+#define FALSE                           0
+#define TRUE                            1
+
+#define MAX_NUM_OPS_INFLIGHT            (4096)
+#define MIN_NUM_OPS_INFLIGHT            (128)
+#define DEFAULT_NUM_OPS_INFLIGHT        (128)
+
+#define MAX_NUM_QPS_PER_QAT_DEVICE      (2)
+#define DEFAULT_NUM_QPS_PER_QAT_DEVICE  (2)
+#define DEFAULT_BURST_SIZE              (64)
+#define DEFAULT_NUM_XFORMS              (2)
+#define NUM_MBUFS                       (8191)
+#define MBUF_CACHE_SIZE                 (250)
+#define MBUF_SIZE   (2048 + DIGEST_BYTE_LENGTH_SHA512 + \
+				sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)
+
+#define BYTE_LENGTH(x)				(x/8)
+/* HASH DIGEST LENGTHS */
+#define DIGEST_BYTE_LENGTH_MD5			(BYTE_LENGTH(128))
+#define DIGEST_BYTE_LENGTH_SHA1			(BYTE_LENGTH(160))
+#define DIGEST_BYTE_LENGTH_SHA224		(BYTE_LENGTH(224))
+#define DIGEST_BYTE_LENGTH_SHA256		(BYTE_LENGTH(256))
+#define DIGEST_BYTE_LENGTH_SHA384		(BYTE_LENGTH(384))
+#define DIGEST_BYTE_LENGTH_SHA512		(BYTE_LENGTH(512))
+#define DIGEST_BYTE_LENGTH_AES_XCBC		(BYTE_LENGTH(96))
+#define AES_XCBC_MAC_KEY_SZ			(16)
+
+#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA1		(12)
+#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA256		(16)
+#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA512		(32)
+
+#endif /* TEST_CRYPTODEV_H_ */
diff --git a/app/test/test_cryptodev_perf.c b/app/test/test_cryptodev_perf.c
new file mode 100644
index 0000000..f0cca8b
--- /dev/null
+++ b/app/test/test_cryptodev_perf.c
@@ -0,0 +1,2062 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2015 Intel Corporation. All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *	 * Redistributions of source code must retain the above copyright
+ *	   notice, this list of conditions and the following disclaimer.
+ *	 * Redistributions in binary form must reproduce the above copyright
+ *	   notice, this list of conditions and the following disclaimer in
+ *	   the documentation and/or other materials provided with the
+ *	   distribution.
+ *	 * Neither the name of Intel Corporation nor the names of its
+ *	   contributors may be used to endorse or promote products derived
+ *	   from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <rte_common.h>
+#include <rte_mbuf.h>
+#include <rte_mbuf_offload.h>
+#include <rte_malloc.h>
+#include <rte_memcpy.h>
+
+#include <rte_crypto.h>
+#include <rte_cryptodev.h>
+#include <rte_cycles.h>
+#include <rte_hexdump.h>
+
+#include "test.h"
+#include "test_cryptodev.h"
+
+
+#define PERF_NUM_OPS_INFLIGHT		(128)
+#define DEFAULT_NUM_REQS_TO_SUBMIT	(10000000)
+
+struct crypto_testsuite_params {
+	struct rte_mempool *mbuf_mp;
+	struct rte_mempool *mbuf_ol_pool;
+
+	uint16_t nb_queue_pairs;
+
+	struct rte_cryptodev_config conf;
+	struct rte_cryptodev_qp_conf qp_conf;
+	uint8_t dev_id;
+};
+
+
+#define MAX_NUM_OF_OPS_PER_UT	(128)
+
+struct crypto_unittest_params {
+	struct rte_crypto_xform cipher_xform;
+	struct rte_crypto_xform auth_xform;
+
+	struct rte_cryptodev_session *sess;
+
+	struct rte_crypto_op *op;
+	struct rte_mbuf_offload *ol;
+
+	struct rte_mbuf *obuf[MAX_NUM_OF_OPS_PER_UT];
+	struct rte_mbuf *ibuf[MAX_NUM_OF_OPS_PER_UT];
+
+	uint8_t *digest;
+};
+
+static struct rte_mbuf *
+setup_test_string(struct rte_mempool *mpool,
+		const char *string, size_t len, uint8_t blocksize)
+{
+	struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
+	size_t t_len = len - (blocksize ? (len % blocksize) : 0);
+
+	if (m) {
+		char *dst = rte_pktmbuf_append(m, t_len);
+
+		if (!dst) {
+			rte_pktmbuf_free(m);
+			return NULL;
+		}
+
+		rte_memcpy(dst, string, t_len);
+	}
+	return m;
+}
+
+static struct crypto_testsuite_params testsuite_params = { NULL };
+static struct crypto_unittest_params unittest_params;
+static enum rte_cryptodev_type gbl_cryptodev_preftest_devtype;
+
+static int
+testsuite_setup(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct rte_cryptodev_info info;
+	unsigned i, nb_devs, valid_dev_id = 0;
+	uint16_t qp_id;
+
+	ts_params->mbuf_mp = rte_mempool_lookup("CRYPTO_PERF_MBUFPOOL");
+	if (ts_params->mbuf_mp == NULL) {
+		/* Not already created so create */
+		ts_params->mbuf_mp = rte_mempool_create("CRYPTO_PERF_MBUFPOOL", NUM_MBUFS,
+			MBUF_SIZE, MBUF_CACHE_SIZE,
+			sizeof(struct rte_pktmbuf_pool_private),
+			rte_pktmbuf_pool_init, NULL, rte_pktmbuf_init, NULL,
+			rte_socket_id(), 0);
+		if (ts_params->mbuf_mp == NULL) {
+			RTE_LOG(ERR, USER1, "Can't create CRYPTO_PERF_MBUFPOOL\n");
+			return TEST_FAILED;
+		}
+	}
+
+	ts_params->mbuf_ol_pool = rte_pktmbuf_offload_pool_create("CRYPTO_OP_POOL",
+				NUM_MBUFS, MBUF_CACHE_SIZE,
+				DEFAULT_NUM_XFORMS *
+				sizeof(struct rte_crypto_xform),
+				rte_socket_id());
+		if (ts_params->mbuf_ol_pool == NULL) {
+			RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
+			return TEST_FAILED;
+		}
+
+	/* Create 2 AESNI MB devices if required */
+	if (gbl_cryptodev_preftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD) {
+		nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_MB_PMD);
+		if (nb_devs < 2) {
+			for (i = nb_devs; i < 2; i++) {
+				int dev_id = rte_eal_vdev_init(
+					CRYPTODEV_NAME_AESNI_MB_PMD, NULL);
+
+				TEST_ASSERT(dev_id >= 0,
+					"Failed to create instance %u of pmd : %s",
+					i, CRYPTODEV_NAME_AESNI_MB_PMD);
+			}
+		}
+	}
+
+	nb_devs = rte_cryptodev_count();
+	if (nb_devs < 1) {
+		RTE_LOG(ERR, USER1, "No crypto devices found?");
+		return TEST_FAILED;
+	}
+
+	/* Search for the first valid */
+	for (i = 0; i < nb_devs; i++) {
+		rte_cryptodev_info_get(i, &info);
+		if (info.dev_type == gbl_cryptodev_preftest_devtype) {
+			ts_params->dev_id = i;
+			valid_dev_id = 1;
+			break;
+		}
+	}
+
+	if (!valid_dev_id)
+		return TEST_FAILED;
+
+	/*
+	 * Using Crypto Device Id 0 by default.
+	 * Since we can't free and re-allocate queue memory always set the queues
+	 * on this device up to max size first so enough memory is allocated for
+	 * any later re-configures needed by other tests
+	 */
+
+	rte_cryptodev_info_get(ts_params->dev_id, &info);
+
+	ts_params->conf.nb_queue_pairs = DEFAULT_NUM_QPS_PER_QAT_DEVICE;
+	ts_params->conf.socket_id = SOCKET_ID_ANY;
+	ts_params->conf.session_mp.nb_objs = info.max_nb_sessions;
+
+	TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->dev_id,
+			&ts_params->conf),
+			"Failed to configure cryptodev %u",
+			ts_params->dev_id);
+
+
+	ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT;
+
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
+		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
+			ts_params->dev_id, qp_id,
+			&ts_params->qp_conf,
+			rte_cryptodev_socket_id(ts_params->dev_id)),
+			"Failed to setup queue pair %u on cryptodev %u",
+			qp_id, ts_params->dev_id);
+	}
+
+	/*Now reconfigure queues to size we actually want to use in this testsuite.*/
+	ts_params->qp_conf.nb_descriptors = PERF_NUM_OPS_INFLIGHT;
+	for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
+
+		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
+			ts_params->dev_id, qp_id,
+				&ts_params->qp_conf,
+				rte_cryptodev_socket_id(ts_params->dev_id)),
+				"Failed to setup queue pair %u on cryptodev %u",
+				qp_id, ts_params->dev_id);
+	}
+
+	return TEST_SUCCESS;
+}
+static void
+testsuite_teardown(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+
+	if (ts_params->mbuf_mp != NULL)
+		RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_MBUFPOOL count %u\n",
+		rte_mempool_count(ts_params->mbuf_mp));
+}
+
+static int
+ut_setup(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Clear unit test parameters before running test */
+	memset(ut_params, 0, sizeof(*ut_params));
+
+	rte_cryptodev_stats_reset(ts_params->dev_id);
+
+	/* Start the device */
+	TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->dev_id),
+			"Failed to start cryptodev %u",
+			ts_params->dev_id);
+
+	return TEST_SUCCESS;
+}
+
+static void
+ut_teardown(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+	struct rte_cryptodev_stats stats;
+
+	unsigned i;
+
+	/* free crypto session structure */
+	if (ut_params->sess)
+		rte_cryptodev_session_free(ts_params->dev_id,
+				ut_params->sess);
+
+	/* free crypto operation structure */
+	if (ut_params->ol)
+		rte_pktmbuf_offload_free(ut_params->ol);
+
+	for (i = 0; i < MAX_NUM_OF_OPS_PER_UT; i++) {
+		if (ut_params->obuf[i])
+			rte_pktmbuf_free(ut_params->obuf[i]);
+		else if (ut_params->ibuf[i])
+			rte_pktmbuf_free(ut_params->ibuf[i]);
+	}
+
+	if (ts_params->mbuf_mp != NULL)
+		RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_MBUFPOOL count %u\n",
+			rte_mempool_count(ts_params->mbuf_mp));
+
+	rte_cryptodev_stats_get(ts_params->dev_id, &stats);
+
+	/* Stop the device */
+	rte_cryptodev_stop(ts_params->dev_id);
+}
+
+const char plaintext_quote[] =
+		"THE COUNT OF MONTE CRISTO by Alexandre Dumas, Pere Chapter 1. "
+		"Marseilles--The Arrival. On the 24th of February, 1815, the "
+		"look-out at Notre-Dame de la Garde signalled the three-master,"
+		" the Pharaon from Smyrna, Trieste, and Naples. As usual, a "
+		"pilot put off immediately, and rounding the Chateau d'If, got "
+		"on board the vessel between Cape Morgion and Rion island. "
+		"Immediately, and according to custom, the ramparts of Fort "
+		"Saint-Jean were covered with spectators; it is always an event "
+		"at Marseilles for a ship to come into port, especially when "
+		"this ship, like the Pharaon, has been built, rigged, and laden"
+		" at the old Phocee docks, and belongs to an owner of the city."
+		" The ship drew on and had safely passed the strait, which some"
+		" volcanic shock has made between the Calasareigne and Jaros "
+		"islands; had doubled Pomegue, and approached the harbor under"
+		" topsails, jib, and spanker, but so slowly and sedately that"
+		" the idlers, with that instinct which is the forerunner of "
+		"evil, asked one another what misfortune could have happened "
+		"on board. However, those experienced in navigation saw plainly"
+		" that if any accident had occurred, it was not to the vessel "
+		"herself, for she bore down with all the evidence of being "
+		"skilfully handled, the anchor a-cockbill, the jib-boom guys "
+		"already eased off, and standing by the side of the pilot, who"
+		" was steering the Pharaon towards the narrow entrance of the"
+		" inner port, was a young man, who, with activity and vigilant"
+		" eye, watched every motion of the ship, and repeated each "
+		"direction of the pilot. The vague disquietude which prevailed "
+		"among the spectators had so much affected one of the crowd "
+		"that he did not await the arrival of the vessel in harbor, but"
+		" jumping into a small skiff, desired to be pulled alongside "
+		"the Pharaon, which he reached as she rounded into La Reserve "
+		"basin. When the young man on board saw this person approach, "
+		"he left his station by the pilot, and, hat in hand, leaned "
+		"over the ship's bulwarks. He was a fine, tall, slim young "
+		"fellow of eighteen or twenty, with black eyes, and hair as "
+		"dark as a raven's wing; and his whole appearance bespoke that "
+		"calmness and resolution peculiar to men accustomed from their "
+		"cradle to contend with danger. \"Ah, is it you, Dantes?\" "
+		"cried the man in the skiff. \"What's the matter? and why have "
+		"you such an air of sadness aboard?\" \"A great misfortune, M. "
+		"Morrel,\" replied the young man,--\"a great misfortune, for me"
+		" especially! Off Civita Vecchia we lost our brave Captain "
+		"Leclere.\" \"And the cargo?\" inquired the owner, eagerly. "
+		"\"Is all safe, M. Morrel; and I think you will be satisfied on"
+		" that head. But poor Captain Leclere--\" \"What happened to "
+		"him?\" asked the owner, with an air of considerable "
+		"resignation. \"What happened to the worthy captain?\" \"He "
+		"died.\" \"Fell into the sea?\" \"No, sir, he died of "
+		"brain-fever in dreadful agony.\" Then turning to the crew, "
+		"he said, \"Bear a hand there, to take in sail!\" All hands "
+		"obeyed, and at once the eight or ten seamen who composed the "
+		"crew, sprang to their respective stations at the spanker "
+		"brails and outhaul, topsail sheets and halyards, the jib "
+		"downhaul, and the topsail clewlines and buntlines. The young "
+		"sailor gave a look to see that his orders were promptly and "
+		"accurately obeyed, and then turned again to the owner. \"And "
+		"how did this misfortune occur?\" inquired the latter, resuming"
+		" the interrupted conversation. \"Alas, sir, in the most "
+		"unexpected manner. After a long talk with the harbor-master, "
+		"Captain Leclere left Naples greatly disturbed in mind. In "
+		"twenty-four hours he was attacked by a fever, and died three "
+		"days afterwards. We performed the usual burial service, and he"
+		" is at his rest, sewn up in his hammock with a thirty-six "
+		"pound shot at his head and his heels, off El Giglio island. "
+		"We bring to his widow his sword and cross of honor. It was "
+		"worth while, truly,\" added the young man with a melancholy "
+		"smile, \"to make war against the English for ten years, and "
+		"to die in his bed at last, like everybody else.";
+
+#define QUOTE_LEN_64B		(64)
+#define QUOTE_LEN_128B		(128)
+#define QUOTE_LEN_256B		(256)
+#define QUOTE_LEN_512B		(512)
+#define QUOTE_LEN_768B		(768)
+#define QUOTE_LEN_1024B		(1024)
+#define QUOTE_LEN_1280B		(1280)
+#define QUOTE_LEN_1536B		(1536)
+#define QUOTE_LEN_1792B		(1792)
+#define QUOTE_LEN_2048B		(2048)
+
+
+/* ***** AES-CBC / HMAC-SHA256 Performance Tests ***** */
+
+#define HMAC_KEY_LENGTH_SHA256	(DIGEST_BYTE_LENGTH_SHA256)
+
+#define CIPHER_KEY_LENGTH_AES_CBC	(16)
+#define CIPHER_IV_LENGTH_AES_CBC	(CIPHER_KEY_LENGTH_AES_CBC)
+
+
+static uint8_t aes_cbc_key[] = {
+		0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
+		0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA };
+
+static uint8_t aes_cbc_iv[] = {
+		0xf5, 0xd3, 0x89, 0x0f, 0x47, 0x00, 0xcb, 0x52,
+		0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1 };
+
+static uint8_t hmac_sha256_key[] = {
+		0xff, 0xcb, 0x37, 0x30, 0x1d, 0x4a, 0xc2, 0x41,
+		0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
+		0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
+		0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60 };
+
+
+/* Cipher text output */
+
+static const uint8_t AES_CBC_ciphertext_64B[] = {
+		0x05, 0x15, 0x77, 0x32, 0xc9, 0x66, 0x91, 0x50,
+		0x93, 0x9f, 0xbb, 0x4e, 0x2e, 0x5a, 0x02, 0xd0,
+		0x2d, 0x9d, 0x31, 0x5d, 0xc8, 0x9e, 0x86, 0x36,
+		0x54, 0x5c, 0x50, 0xe8, 0x75, 0x54, 0x74, 0x5e,
+		0xd5, 0xa2, 0x84, 0x21, 0x2d, 0xc5, 0xf8, 0x1c,
+		0x55, 0x1a, 0xba, 0x91, 0xce, 0xb5, 0xa3, 0x1e,
+		0x31, 0xbf, 0xe9, 0xa1, 0x97, 0x5c, 0x2b, 0xd6,
+		0x57, 0xa5, 0x9f, 0xab, 0xbd, 0xb0, 0x9b, 0x9c
+};
+
+static const uint8_t AES_CBC_ciphertext_128B[] = {
+		0x79, 0x92, 0x65, 0xc8, 0xfb, 0x0a, 0xc7, 0xc4,
+		0x9b, 0x3b, 0xbe, 0x69, 0x7f, 0x7c, 0xf4, 0x4e,
+		0xa5, 0x0d, 0xf6, 0x33, 0xc4, 0xdf, 0xf3, 0x0d,
+		0xdb, 0xb9, 0x68, 0x34, 0xb0, 0x0d, 0xbd, 0xb9,
+		0xa7, 0xf3, 0x86, 0x50, 0x2a, 0xbe, 0x50, 0x5d,
+		0xb3, 0xbe, 0x72, 0xf9, 0x02, 0xb1, 0x69, 0x0b,
+		0x8c, 0x96, 0x4c, 0x3c, 0x0c, 0x1e, 0x76, 0xe5,
+		0x7e, 0x75, 0xdd, 0xd0, 0xa9, 0x75, 0x00, 0x13,
+		0x6b, 0x1e, 0xc0, 0xad, 0xfc, 0x03, 0xb5, 0x99,
+		0xdc, 0x37, 0x35, 0xfc, 0x16, 0x34, 0xfd, 0xb4,
+		0xea, 0x1e, 0xb6, 0x51, 0xdf, 0xab, 0x87, 0xd6,
+		0x87, 0x41, 0xfa, 0x1c, 0xc6, 0x78, 0xa6, 0x3c,
+		0x1d, 0x76, 0xfe, 0xff, 0x65, 0xfc, 0x63, 0x1e,
+		0x1f, 0xe2, 0x7c, 0x9b, 0xa2, 0x72, 0xc3, 0x34,
+		0x23, 0xdf, 0x01, 0xf0, 0xfd, 0x02, 0x8b, 0x97,
+		0x00, 0x2b, 0x97, 0x4e, 0xab, 0x98, 0x21, 0x3c
+};
+
+static const uint8_t AES_CBC_ciphertext_256B[] = {
+		0xc7, 0x71, 0x2b, 0xed, 0x2c, 0x97, 0x59, 0xfa,
+		0xcf, 0x5a, 0xb9, 0x31, 0x92, 0xe0, 0xc9, 0x92,
+		0xc0, 0x2d, 0xd5, 0x9c, 0x84, 0xbf, 0x70, 0x36,
+		0x13, 0x48, 0xe0, 0xb1, 0xbf, 0x6c, 0xcd, 0x91,
+		0xa0, 0xc3, 0x57, 0x6c, 0x3f, 0x0e, 0x34, 0x41,
+		0xe7, 0x9c, 0xc0, 0xec, 0x18, 0x0c, 0x05, 0x52,
+		0x78, 0xe2, 0x3c, 0x6e, 0xdf, 0xa5, 0x49, 0xc7,
+		0xf2, 0x55, 0x00, 0x8f, 0x65, 0x6d, 0x4b, 0xd0,
+		0xcb, 0xd4, 0xd2, 0x0b, 0xea, 0xf4, 0xb0, 0x85,
+		0x61, 0x9e, 0x36, 0xc0, 0x71, 0xb7, 0x80, 0xad,
+		0x40, 0x78, 0xb4, 0x70, 0x2b, 0xe8, 0x80, 0xc5,
+		0x19, 0x35, 0x96, 0x55, 0x3b, 0x40, 0x03, 0xbb,
+		0x9f, 0xa6, 0xc2, 0x82, 0x92, 0x04, 0xc3, 0xa6,
+		0x96, 0xc4, 0x7f, 0x4c, 0x3e, 0x3c, 0x79, 0x82,
+		0x88, 0x8b, 0x3f, 0x8b, 0xc5, 0x9f, 0x44, 0xbe,
+		0x71, 0xe7, 0x09, 0xa2, 0x40, 0xa2, 0x23, 0x4e,
+		0x9f, 0x31, 0xab, 0x6f, 0xdf, 0x59, 0x40, 0xe1,
+		0x12, 0x15, 0x55, 0x4b, 0xea, 0x3f, 0xa1, 0x41,
+		0x4f, 0xaf, 0xcd, 0x27, 0x2a, 0x61, 0xa1, 0x9e,
+		0x82, 0x30, 0x05, 0x05, 0x55, 0xce, 0x99, 0xd3,
+		0x8f, 0x3f, 0x86, 0x79, 0xdc, 0x9f, 0x33, 0x07,
+		0x75, 0x26, 0xc8, 0x72, 0x81, 0x0f, 0x9b, 0xf7,
+		0xb1, 0xfb, 0xd3, 0x91, 0x36, 0x08, 0xab, 0x26,
+		0x70, 0x53, 0x0c, 0x99, 0xfd, 0xa9, 0x07, 0xb4,
+		0xe9, 0xce, 0xc1, 0xd6, 0xd2, 0x2c, 0x71, 0x80,
+		0xec, 0x59, 0x61, 0x0b, 0x24, 0xf0, 0x6d, 0x33,
+		0x73, 0x45, 0x6e, 0x80, 0x03, 0x45, 0xf2, 0x76,
+		0xa5, 0x8a, 0xc9, 0xcf, 0xaf, 0x4a, 0xed, 0x35,
+		0xc0, 0x97, 0x52, 0xc5, 0x00, 0xdf, 0xef, 0xc7,
+		0x9f, 0xf2, 0xe8, 0x15, 0x3e, 0xb3, 0x30, 0xe7,
+		0x00, 0xd0, 0x4e, 0xeb, 0x79, 0xf6, 0xf6, 0xcf,
+		0xf0, 0xe7, 0x61, 0xd5, 0x3d, 0x6a, 0x73, 0x9d
+};
+
+static const uint8_t AES_CBC_ciphertext_512B[] = {
+		0xb4, 0xc6, 0xc6, 0x5f, 0x7e, 0xca, 0x05, 0x70,
+		0x21, 0x7b, 0x92, 0x9e, 0x23, 0xe7, 0x92, 0xb8,
+		0x27, 0x3d, 0x20, 0x29, 0x57, 0xfa, 0x1f, 0x26,
+		0x0a, 0x04, 0x34, 0xa6, 0xf2, 0xdc, 0x44, 0xb6,
+		0x43, 0x40, 0x62, 0xde, 0x0c, 0xde, 0x1c, 0x30,
+		0x43, 0x85, 0x0b, 0xe8, 0x93, 0x1f, 0xa1, 0x2a,
+		0x8a, 0x27, 0x35, 0x39, 0x14, 0x9f, 0x37, 0x64,
+		0x59, 0xb5, 0x0e, 0x96, 0x82, 0x5d, 0x63, 0x45,
+		0xd6, 0x93, 0x89, 0x46, 0xe4, 0x71, 0x31, 0xeb,
+		0x0e, 0xd1, 0x7b, 0xda, 0x90, 0xb5, 0x81, 0xac,
+		0x76, 0x54, 0x54, 0x85, 0x0b, 0xa9, 0x46, 0x9c,
+		0xf0, 0xfd, 0xde, 0x5d, 0xa8, 0xe3, 0xee, 0xe9,
+		0xf4, 0x9d, 0x34, 0x76, 0x39, 0xe7, 0xc3, 0x4a,
+		0x84, 0x38, 0x92, 0x61, 0xf1, 0x12, 0x9f, 0x05,
+		0xda, 0xdb, 0xc1, 0xd4, 0xb0, 0xa0, 0x27, 0x19,
+		0xa0, 0x56, 0x5d, 0x9b, 0xcc, 0x47, 0x7c, 0x15,
+		0x1d, 0x52, 0x66, 0xd5, 0xff, 0xef, 0x12, 0x23,
+		0x86, 0xe2, 0xee, 0x81, 0x2c, 0x3d, 0x7d, 0x28,
+		0xd5, 0x42, 0xdf, 0xdb, 0x75, 0x1c, 0xeb, 0xdf,
+		0x13, 0x23, 0xd5, 0x17, 0x89, 0xea, 0xd7, 0x01,
+		0xff, 0x57, 0x6a, 0x44, 0x61, 0xf4, 0xea, 0xbe,
+		0x97, 0x9b, 0xc2, 0xb1, 0x9c, 0x5d, 0xff, 0x4f,
+		0x73, 0x2d, 0x3f, 0x57, 0x28, 0x38, 0xbf, 0x3d,
+		0x9f, 0xda, 0x49, 0x55, 0x8f, 0xb2, 0x77, 0xec,
+		0x0f, 0xbc, 0xce, 0xb8, 0xc6, 0xe1, 0x03, 0xed,
+		0x35, 0x9c, 0xf2, 0x4d, 0xa4, 0x29, 0x6c, 0xd6,
+		0x6e, 0x05, 0x53, 0x46, 0xc1, 0x41, 0x09, 0x36,
+		0x0b, 0x7d, 0xf4, 0x9e, 0x0f, 0xba, 0x86, 0x33,
+		0xdd, 0xf1, 0xa7, 0xf7, 0xd5, 0x29, 0xa8, 0xa7,
+		0x4d, 0xce, 0x0c, 0xf5, 0xb4, 0x6c, 0xd8, 0x27,
+		0xb0, 0x87, 0x2a, 0x6f, 0x7f, 0x3f, 0x8f, 0xc3,
+		0xe2, 0x3e, 0x94, 0xcf, 0x61, 0x4a, 0x09, 0x3d,
+		0xf9, 0x55, 0x19, 0x31, 0xf2, 0xd2, 0x4a, 0x3e,
+		0xc1, 0xf5, 0xed, 0x7c, 0x45, 0xb0, 0x0c, 0x7b,
+		0xdd, 0xa6, 0x0a, 0x26, 0x66, 0xec, 0x85, 0x49,
+		0x00, 0x38, 0x05, 0x7c, 0x9c, 0x1c, 0x92, 0xf5,
+		0xf7, 0xdb, 0x5d, 0xbd, 0x61, 0x0c, 0xc9, 0xaf,
+		0xfd, 0x57, 0x3f, 0xee, 0x2b, 0xad, 0x73, 0xef,
+		0xa3, 0xc1, 0x66, 0x26, 0x44, 0x5e, 0xf9, 0x12,
+		0x86, 0x66, 0xa9, 0x61, 0x75, 0xa1, 0xbc, 0x40,
+		0x7f, 0xa8, 0x08, 0x02, 0xc0, 0x76, 0x0e, 0x76,
+		0xb3, 0x26, 0x3d, 0x1c, 0x40, 0x65, 0xe4, 0x18,
+		0x0f, 0x62, 0x17, 0x8f, 0x1e, 0x61, 0xb8, 0x08,
+		0x83, 0x54, 0x42, 0x11, 0x03, 0x30, 0x8e, 0xb7,
+		0xc1, 0x9c, 0xec, 0x69, 0x52, 0x95, 0xfb, 0x7b,
+		0x1a, 0x0c, 0x20, 0x24, 0xf7, 0xb8, 0x38, 0x0c,
+		0xb8, 0x7b, 0xb6, 0x69, 0x70, 0xd0, 0x61, 0xb9,
+		0x70, 0x06, 0xc2, 0x5b, 0x20, 0x47, 0xf7, 0xd9,
+		0x32, 0xc2, 0xf2, 0x90, 0xb6, 0x4d, 0xcd, 0x3c,
+		0x6d, 0x74, 0xea, 0x82, 0x35, 0x1b, 0x08, 0x44,
+		0xba, 0xb7, 0x33, 0x82, 0x33, 0x27, 0x54, 0x77,
+		0x6e, 0x58, 0xfe, 0x46, 0x5a, 0xb4, 0x88, 0x53,
+		0x8d, 0x9b, 0xb1, 0xab, 0xdf, 0x04, 0xe1, 0xfb,
+		0xd7, 0x1e, 0xd7, 0x38, 0x64, 0x54, 0xba, 0xb0,
+		0x6c, 0x84, 0x7a, 0x0f, 0xa7, 0x80, 0x6b, 0x86,
+		0xd9, 0xc9, 0xc6, 0x31, 0x95, 0xfa, 0x8a, 0x2c,
+		0x14, 0xe1, 0x85, 0x66, 0x27, 0xfd, 0x63, 0x3e,
+		0xf0, 0xfa, 0x81, 0xc9, 0x89, 0x4f, 0xe2, 0x6a,
+		0x8c, 0x17, 0xb5, 0xc7, 0x9f, 0x5d, 0x3f, 0x6b,
+		0x3f, 0xcd, 0x13, 0x7a, 0x3c, 0xe6, 0x4e, 0xfa,
+		0x7a, 0x10, 0xb8, 0x7c, 0x40, 0xec, 0x93, 0x11,
+		0x1f, 0xd0, 0x9e, 0xc3, 0x56, 0xb9, 0xf5, 0x21,
+		0x18, 0x41, 0x31, 0xea, 0x01, 0x8d, 0xea, 0x1c,
+		0x95, 0x5e, 0x56, 0x33, 0xbc, 0x7a, 0x3f, 0x6f
+};
+
+static const uint8_t AES_CBC_ciphertext_768B[] = {
+		0x3e, 0x7f, 0x9e, 0x4c, 0x88, 0x15, 0x68, 0x69,
+		0x10, 0x09, 0xe1, 0xa7, 0x0f, 0x27, 0x88, 0x2d,
+		0x90, 0x73, 0x4f, 0x67, 0xd3, 0x8b, 0xaf, 0xa1,
+		0x2c, 0x37, 0xa5, 0x6c, 0x7c, 0xbd, 0x95, 0x4c,
+		0x82, 0xcf, 0x05, 0x49, 0x16, 0x5c, 0xe7, 0x06,
+		0xd4, 0xcb, 0x55, 0x65, 0x9a, 0xd0, 0xe1, 0x46,
+		0x3a, 0x37, 0x71, 0xad, 0xb0, 0xb4, 0x99, 0x1e,
+		0x23, 0x57, 0x48, 0x96, 0x9c, 0xc5, 0xc4, 0xdb,
+		0x64, 0x3e, 0xc9, 0x7f, 0x90, 0x5a, 0xa0, 0x08,
+		0x75, 0x4c, 0x09, 0x06, 0x31, 0x6e, 0x59, 0x29,
+		0xfc, 0x2f, 0x72, 0xde, 0xf2, 0x40, 0x5a, 0xfe,
+		0xd3, 0x66, 0x64, 0xb8, 0x9c, 0xc9, 0xa6, 0x1f,
+		0xc3, 0x52, 0xcd, 0xb5, 0xd1, 0x4f, 0x43, 0x3f,
+		0xf4, 0x59, 0x25, 0xc4, 0xdd, 0x3e, 0x58, 0x7c,
+		0x21, 0xd6, 0x21, 0xce, 0xa4, 0xbe, 0x08, 0x23,
+		0x46, 0x68, 0xc0, 0x00, 0x91, 0x47, 0xca, 0x9b,
+		0xe0, 0xb4, 0xe3, 0xab, 0xbf, 0xcf, 0x68, 0x26,
+		0x97, 0x23, 0x09, 0x93, 0x64, 0x8f, 0x57, 0x59,
+		0xe2, 0x41, 0x7c, 0xa2, 0x48, 0x7e, 0xd5, 0x2c,
+		0x54, 0x09, 0x1b, 0x07, 0x94, 0xca, 0x39, 0x83,
+		0xdd, 0xf4, 0x7a, 0x1d, 0x2d, 0xdd, 0x67, 0xf7,
+		0x3c, 0x30, 0x89, 0x3e, 0xc1, 0xdc, 0x1d, 0x8f,
+		0xfc, 0xb1, 0xe9, 0x13, 0x31, 0xb0, 0x16, 0xdb,
+		0x88, 0xf2, 0x32, 0x7e, 0x73, 0xa3, 0xdf, 0x08,
+		0x6b, 0x53, 0x92, 0x08, 0xc9, 0x9d, 0x98, 0xb2,
+		0xf4, 0x8c, 0xb1, 0x95, 0xdc, 0xb6, 0xfc, 0xec,
+		0xf1, 0xc9, 0x0d, 0x6d, 0x42, 0x2c, 0xf5, 0x38,
+		0x29, 0xf4, 0xd8, 0x98, 0x0f, 0xb0, 0x81, 0xa5,
+		0xaa, 0xe6, 0x1f, 0x6e, 0x87, 0x32, 0x1b, 0x02,
+		0x07, 0x57, 0x38, 0x83, 0xf3, 0xe4, 0x54, 0x7c,
+		0xa8, 0x43, 0xdf, 0x3f, 0x42, 0xfd, 0x67, 0x28,
+		0x06, 0x4d, 0xea, 0xce, 0x1f, 0x84, 0x4a, 0xcd,
+		0x8c, 0x61, 0x5e, 0x8f, 0x61, 0xed, 0x84, 0x03,
+		0x53, 0x6a, 0x9e, 0xbf, 0x68, 0x83, 0xa7, 0x42,
+		0x56, 0x57, 0xcd, 0x45, 0x29, 0xfc, 0x7b, 0x07,
+		0xfc, 0xe9, 0xb9, 0x42, 0xfd, 0x29, 0xd5, 0xfd,
+		0x98, 0x11, 0xd1, 0x8d, 0x67, 0x29, 0x47, 0x61,
+		0xd8, 0x27, 0x37, 0x79, 0x29, 0xd1, 0x94, 0x6f,
+		0x8d, 0xf3, 0x1b, 0x3d, 0x6a, 0xb1, 0x59, 0xef,
+		0x1b, 0xd4, 0x70, 0x0e, 0xac, 0xab, 0xa0, 0x2b,
+		0x1f, 0x5e, 0x04, 0xf0, 0x0e, 0x35, 0x72, 0x90,
+		0xfc, 0xcf, 0x86, 0x43, 0xea, 0x45, 0x6d, 0x22,
+		0x63, 0x06, 0x1a, 0x58, 0xd7, 0x2d, 0xc5, 0xb0,
+		0x60, 0x69, 0xe8, 0x53, 0xc2, 0xa2, 0x57, 0x83,
+		0xc4, 0x31, 0xb4, 0xc6, 0xb3, 0xa1, 0x77, 0xb3,
+		0x1c, 0xca, 0x89, 0x3f, 0xf5, 0x10, 0x3b, 0x36,
+		0x31, 0x7d, 0x00, 0x46, 0x00, 0x92, 0xa0, 0xa0,
+		0x34, 0xd8, 0x5e, 0x62, 0xa9, 0xe0, 0x23, 0x37,
+		0x50, 0x85, 0xc7, 0x3a, 0x20, 0xa3, 0x98, 0xc0,
+		0xac, 0x20, 0x06, 0x0f, 0x17, 0x3c, 0xfc, 0x43,
+		0x8c, 0x9d, 0xec, 0xf5, 0x9a, 0x35, 0x96, 0xf7,
+		0xb7, 0x4c, 0xf9, 0x69, 0xf8, 0xd4, 0x1e, 0x9e,
+		0xf9, 0x7c, 0xc4, 0xd2, 0x11, 0x14, 0x41, 0xb9,
+		0x89, 0xd6, 0x07, 0xd2, 0x37, 0x07, 0x5e, 0x5e,
+		0xae, 0x60, 0xdc, 0xe4, 0xeb, 0x38, 0x48, 0x6d,
+		0x95, 0x8d, 0x71, 0xf2, 0xba, 0xda, 0x5f, 0x08,
+		0x9d, 0x4a, 0x0f, 0x56, 0x90, 0x64, 0xab, 0xb6,
+		0x88, 0x22, 0xa8, 0x90, 0x1f, 0x76, 0x2c, 0x83,
+		0x43, 0xce, 0x32, 0x55, 0x45, 0x84, 0x57, 0x43,
+		0xf9, 0xa8, 0xd1, 0x4f, 0xe3, 0xc1, 0x72, 0x9c,
+		0xeb, 0x64, 0xf7, 0xe4, 0x61, 0x2b, 0x93, 0xd1,
+		0x1f, 0xbb, 0x5c, 0xff, 0xa1, 0x59, 0x69, 0xcf,
+		0xf7, 0xaf, 0x58, 0x45, 0xd5, 0x3e, 0x98, 0x7d,
+		0x26, 0x39, 0x5c, 0x75, 0x3c, 0x4a, 0xbf, 0x5e,
+		0x12, 0x10, 0xb0, 0x93, 0x0f, 0x86, 0x82, 0xcf,
+		0xb2, 0xec, 0x70, 0x5c, 0x0b, 0xad, 0x5d, 0x63,
+		0x65, 0x32, 0xa6, 0x04, 0x58, 0x03, 0x91, 0x2b,
+		0xdb, 0x8f, 0xd3, 0xa3, 0x2b, 0x3a, 0xf5, 0xa1,
+		0x62, 0x6c, 0xb6, 0xf0, 0x13, 0x3b, 0x8c, 0x07,
+		0x10, 0x82, 0xc9, 0x56, 0x24, 0x87, 0xfc, 0x56,
+		0xe8, 0xef, 0x90, 0x8b, 0xd6, 0x48, 0xda, 0x53,
+		0x04, 0x49, 0x41, 0xa4, 0x67, 0xe0, 0x33, 0x24,
+		0x6b, 0x9c, 0x07, 0x55, 0x4c, 0x5d, 0xe9, 0x35,
+		0xfa, 0xbd, 0xea, 0xa8, 0x3f, 0xe9, 0xf5, 0x20,
+		0x5c, 0x60, 0x0f, 0x0d, 0x24, 0xcb, 0x1a, 0xd6,
+		0xe8, 0x5c, 0xa8, 0x42, 0xae, 0xd0, 0xd2, 0xf2,
+		0xa8, 0xbe, 0xea, 0x0f, 0x8d, 0xfb, 0x81, 0xa3,
+		0xa4, 0xef, 0xb7, 0x3e, 0x91, 0xbd, 0x26, 0x0f,
+		0x8e, 0xf1, 0xb2, 0xa5, 0x47, 0x06, 0xfa, 0x40,
+		0x8b, 0x31, 0x7a, 0x5a, 0x74, 0x2a, 0x0a, 0x7c,
+		0x62, 0x5d, 0x39, 0xa4, 0xae, 0x14, 0x85, 0x08,
+		0x5b, 0x20, 0x85, 0xf1, 0x57, 0x6e, 0x71, 0x13,
+		0x4e, 0x2b, 0x49, 0x87, 0x01, 0xdf, 0x37, 0xed,
+		0x28, 0xee, 0x4d, 0xa1, 0xf4, 0xb3, 0x3b, 0xba,
+		0x2d, 0xb3, 0x46, 0x17, 0x84, 0x80, 0x9d, 0xd7,
+		0x93, 0x1f, 0x28, 0x7c, 0xf5, 0xf9, 0xd6, 0x85,
+		0x8c, 0xa5, 0x44, 0xe9, 0x2c, 0x65, 0x51, 0x5f,
+		0x53, 0x7a, 0x09, 0xd9, 0x30, 0x16, 0x95, 0x89,
+		0x9c, 0x0b, 0xef, 0x90, 0x6d, 0x23, 0xd3, 0x48,
+		0x57, 0x3b, 0x55, 0x69, 0x96, 0xfc, 0xf7, 0x52,
+		0x92, 0x38, 0x36, 0xbf, 0xa9, 0x0a, 0xbb, 0x68,
+		0x45, 0x08, 0x25, 0xee, 0x59, 0xfe, 0xee, 0xf2,
+		0x2c, 0xd4, 0x5f, 0x78, 0x59, 0x0d, 0x90, 0xf1,
+		0xd7, 0xe4, 0x39, 0x0e, 0x46, 0x36, 0xf5, 0x75,
+		0x03, 0x3c, 0x28, 0xfb, 0xfa, 0x8f, 0xef, 0xc9,
+		0x61, 0x00, 0x94, 0xc3, 0xd2, 0x0f, 0xd9, 0xda
+};
+
+static const uint8_t AES_CBC_ciphertext_1024B[] = {
+		0x7d, 0x01, 0x7e, 0x2f, 0x92, 0xb3, 0xea, 0x72,
+		0x4a, 0x3f, 0x10, 0xf9, 0x2b, 0xb0, 0xd5, 0xb9,
+		0x19, 0x68, 0x94, 0xe9, 0x93, 0xe9, 0xd5, 0x26,
+		0x20, 0x44, 0xe2, 0x47, 0x15, 0x8d, 0x75, 0x48,
+		0x8e, 0xe4, 0x40, 0x81, 0xb5, 0x06, 0xa8, 0xb8,
+		0x0e, 0x0f, 0x3b, 0xbc, 0x5b, 0xbe, 0x3b, 0xa2,
+		0x2a, 0x0c, 0x48, 0x98, 0x19, 0xdf, 0xe9, 0x25,
+		0x75, 0xab, 0x93, 0x44, 0xb1, 0x72, 0x70, 0xbb,
+		0x20, 0xcf, 0x78, 0xe9, 0x4d, 0xc6, 0xa9, 0xa9,
+		0x84, 0x78, 0xc5, 0xc0, 0xc4, 0xc9, 0x79, 0x1a,
+		0xbc, 0x61, 0x25, 0x5f, 0xac, 0x01, 0x03, 0xb7,
+		0xef, 0x07, 0xf2, 0x62, 0x98, 0xee, 0xe3, 0xad,
+		0x94, 0x75, 0x30, 0x67, 0xb9, 0x15, 0x00, 0xe7,
+		0x11, 0x32, 0x2e, 0x6b, 0x55, 0x9f, 0xac, 0x68,
+		0xde, 0x61, 0x05, 0x80, 0x01, 0xf3, 0xad, 0xab,
+		0xaf, 0x45, 0xe0, 0xf4, 0x68, 0x5c, 0xc0, 0x52,
+		0x92, 0xc8, 0x21, 0xb6, 0xf5, 0x8a, 0x1d, 0xbb,
+		0xfc, 0x4a, 0x11, 0x62, 0xa2, 0xc4, 0xf1, 0x2d,
+		0x0e, 0xb2, 0xc7, 0x17, 0x34, 0xb4, 0x2a, 0x54,
+		0x81, 0xc2, 0x1e, 0xcf, 0x51, 0x0a, 0x76, 0x54,
+		0xf1, 0x48, 0x0d, 0x5c, 0xcd, 0x38, 0x3e, 0x38,
+		0x3e, 0xf8, 0x46, 0x1d, 0x00, 0xf5, 0x62, 0xe1,
+		0x5c, 0xb7, 0x8d, 0xce, 0xd0, 0x3f, 0xbb, 0x22,
+		0xf1, 0xe5, 0xb1, 0xa0, 0x58, 0x5e, 0x3c, 0x0f,
+		0x15, 0xd1, 0xac, 0x3e, 0xc7, 0x72, 0xc4, 0xde,
+		0x8b, 0x95, 0x3e, 0x91, 0xf7, 0x1d, 0x04, 0x9a,
+		0xc8, 0xe4, 0xbf, 0xd3, 0x22, 0xca, 0x4a, 0xdc,
+		0xb6, 0x16, 0x79, 0x81, 0x75, 0x2f, 0x6b, 0xa7,
+		0x04, 0x98, 0xa7, 0x4e, 0xc1, 0x19, 0x90, 0x33,
+		0x33, 0x3c, 0x7f, 0xdd, 0xac, 0x09, 0x0c, 0xc3,
+		0x91, 0x34, 0x74, 0xab, 0xa5, 0x35, 0x0a, 0x13,
+		0xc3, 0x56, 0x67, 0x6d, 0x1a, 0x3e, 0xbf, 0x56,
+		0x06, 0x67, 0x15, 0x5f, 0xfc, 0x8b, 0xa2, 0x3c,
+		0x5e, 0xaf, 0x56, 0x1f, 0xe3, 0x2e, 0x9d, 0x0a,
+		0xf9, 0x9b, 0xc7, 0xb5, 0x03, 0x1c, 0x68, 0x99,
+		0xfa, 0x3c, 0x37, 0x59, 0xc1, 0xf7, 0x6a, 0x83,
+		0x22, 0xee, 0xca, 0x7f, 0x7d, 0x49, 0xe6, 0x48,
+		0x84, 0x54, 0x7a, 0xff, 0xb3, 0x72, 0x21, 0xd8,
+		0x7a, 0x5d, 0xb1, 0x4b, 0xcc, 0x01, 0x6f, 0x90,
+		0xc6, 0x68, 0x1c, 0x2c, 0xa1, 0xe2, 0x74, 0x40,
+		0x26, 0x9b, 0x57, 0x53, 0xa3, 0x7c, 0x0b, 0x0d,
+		0xcf, 0x05, 0x5d, 0x62, 0x4f, 0x75, 0x06, 0x62,
+		0x1f, 0x26, 0x32, 0xaa, 0x25, 0xcc, 0x26, 0x8d,
+		0xae, 0x01, 0x47, 0xa3, 0x00, 0x42, 0xe2, 0x4c,
+		0xee, 0x29, 0xa2, 0x81, 0xa0, 0xfd, 0xeb, 0xff,
+		0x9a, 0x66, 0x6e, 0x47, 0x5b, 0xab, 0x93, 0x5a,
+		0x02, 0x6d, 0x6f, 0xf2, 0x6e, 0x02, 0x9d, 0xb1,
+		0xab, 0x56, 0xdc, 0x8b, 0x9b, 0x17, 0xa8, 0xfb,
+		0x87, 0x42, 0x7c, 0x91, 0x1e, 0x14, 0xc6, 0x6f,
+		0xdc, 0xf0, 0x27, 0x30, 0xfa, 0x3f, 0xc4, 0xad,
+		0x57, 0x85, 0xd2, 0xc9, 0x32, 0x2c, 0x13, 0xa6,
+		0x04, 0x04, 0x50, 0x05, 0x2f, 0x72, 0xd9, 0x44,
+		0x55, 0x6e, 0x93, 0x40, 0xed, 0x7e, 0xd4, 0x40,
+		0x3e, 0x88, 0x3b, 0x8b, 0xb6, 0xeb, 0xc6, 0x5d,
+		0x9c, 0x99, 0xa1, 0xcf, 0x30, 0xb2, 0xdc, 0x48,
+		0x8a, 0x01, 0xa7, 0x61, 0x77, 0x50, 0x14, 0xf3,
+		0x0c, 0x49, 0x53, 0xb3, 0xb4, 0xb4, 0x28, 0x41,
+		0x4a, 0x2d, 0xd2, 0x4d, 0x2a, 0x30, 0x31, 0x83,
+		0x03, 0x5e, 0xaa, 0xd3, 0xa3, 0xd1, 0xa1, 0xca,
+		0x62, 0xf0, 0xe1, 0xf2, 0xff, 0xf0, 0x19, 0xa6,
+		0xde, 0x22, 0x47, 0xb5, 0x28, 0x7d, 0xf7, 0x07,
+		0x16, 0x0d, 0xb1, 0x55, 0x81, 0x95, 0xe5, 0x1d,
+		0x4d, 0x78, 0xa9, 0x3e, 0xce, 0xe3, 0x1c, 0xf9,
+		0x47, 0xc8, 0xec, 0xc5, 0xc5, 0x93, 0x4c, 0x34,
+		0x20, 0x6b, 0xee, 0x9a, 0xe6, 0x86, 0x57, 0x58,
+		0xd5, 0x58, 0xf1, 0x33, 0x10, 0x29, 0x9e, 0x93,
+		0x2f, 0xf5, 0x90, 0x00, 0x17, 0x67, 0x4f, 0x39,
+		0x18, 0xe1, 0xcf, 0x55, 0x78, 0xbb, 0xe6, 0x29,
+		0x3e, 0x77, 0xd5, 0x48, 0xb7, 0x42, 0x72, 0x53,
+		0x27, 0xfa, 0x5b, 0xe0, 0x36, 0x14, 0x97, 0xb8,
+		0x9b, 0x3c, 0x09, 0x77, 0xc1, 0x0a, 0xe4, 0xa2,
+		0x63, 0xfc, 0xbe, 0x5c, 0x17, 0xcf, 0x01, 0xf5,
+		0x03, 0x0f, 0x17, 0xbc, 0x93, 0xdd, 0x5f, 0xe2,
+		0xf3, 0x08, 0xa8, 0xb1, 0x85, 0xb6, 0x34, 0x3f,
+		0x87, 0x42, 0xa5, 0x42, 0x3b, 0x0e, 0xd6, 0x83,
+		0x6a, 0xfd, 0x5d, 0xc9, 0x67, 0xd5, 0x51, 0xc9,
+		0x2a, 0x4e, 0x91, 0xb0, 0x59, 0xb2, 0x0f, 0xa2,
+		0xe6, 0x47, 0x73, 0xc2, 0xa2, 0xae, 0xbb, 0xc8,
+		0x42, 0xa3, 0x2a, 0x27, 0x29, 0x48, 0x8c, 0x54,
+		0x6c, 0xec, 0x00, 0x2a, 0x42, 0xa3, 0x7a, 0x0f,
+		0x12, 0x66, 0x6b, 0x96, 0xf6, 0xd0, 0x56, 0x4f,
+		0x49, 0x5c, 0x47, 0xec, 0x05, 0x62, 0x54, 0xb2,
+		0x64, 0x5a, 0x69, 0x1f, 0x19, 0xb4, 0x84, 0x5c,
+		0xbe, 0x48, 0x8e, 0xfc, 0x58, 0x21, 0xce, 0xfa,
+		0xaa, 0x84, 0xd2, 0xc1, 0x08, 0xb3, 0x87, 0x0f,
+		0x4f, 0xa3, 0x3a, 0xb6, 0x44, 0xbe, 0x2e, 0x9a,
+		0xdd, 0xb5, 0x44, 0x80, 0xca, 0xf4, 0xc3, 0x6e,
+		0xba, 0x93, 0x77, 0xe0, 0x53, 0xfb, 0x37, 0xfb,
+		0x88, 0xc3, 0x1f, 0x25, 0xde, 0x3e, 0x11, 0xf4,
+		0x89, 0xe7, 0xd1, 0x3b, 0xb4, 0x23, 0xcb, 0x70,
+		0xba, 0x35, 0x97, 0x7c, 0xbe, 0x84, 0x13, 0xcf,
+		0xe0, 0x4d, 0x33, 0x91, 0x71, 0x85, 0xbb, 0x4b,
+		0x97, 0x32, 0x5d, 0xa0, 0xb9, 0x8f, 0xdc, 0x27,
+		0x5a, 0xeb, 0x71, 0xf1, 0xd5, 0x0d, 0x65, 0xb4,
+		0x22, 0x81, 0xde, 0xa7, 0x58, 0x20, 0x0b, 0x18,
+		0x11, 0x76, 0x5c, 0xe6, 0x6a, 0x2c, 0x99, 0x69,
+		0xdc, 0xed, 0x67, 0x08, 0x5d, 0x5e, 0xe9, 0x1e,
+		0x55, 0x70, 0xc1, 0x5a, 0x76, 0x1b, 0x8d, 0x2e,
+		0x0d, 0xf9, 0xcc, 0x30, 0x8c, 0x44, 0x0f, 0x63,
+		0x8c, 0x42, 0x8a, 0x9f, 0x4c, 0xd1, 0x48, 0x28,
+		0x8a, 0xf5, 0x56, 0x2e, 0x23, 0x12, 0xfe, 0x67,
+		0x9a, 0x13, 0x65, 0x75, 0x83, 0xf1, 0x3c, 0x98,
+		0x07, 0x6b, 0xb7, 0x27, 0x5b, 0xf0, 0x70, 0xda,
+		0x30, 0xf8, 0x74, 0x4e, 0x7a, 0x32, 0x84, 0xcc,
+		0x0e, 0xcd, 0x80, 0x8b, 0x82, 0x31, 0x9a, 0x48,
+		0xcf, 0x75, 0x00, 0x1f, 0x4f, 0xe0, 0x8e, 0xa3,
+		0x6a, 0x2c, 0xd4, 0x73, 0x4c, 0x63, 0x7c, 0xa6,
+		0x4d, 0x5e, 0xfd, 0x43, 0x3b, 0x27, 0xe1, 0x5e,
+		0xa3, 0xa9, 0x5c, 0x3b, 0x60, 0xdd, 0xc6, 0x8d,
+		0x5a, 0xf1, 0x3e, 0x89, 0x4b, 0x24, 0xcf, 0x01,
+		0x3a, 0x2d, 0x44, 0xe7, 0xda, 0xe7, 0xa1, 0xac,
+		0x11, 0x05, 0x0c, 0xa9, 0x7a, 0x82, 0x8c, 0x5c,
+		0x29, 0x68, 0x9c, 0x73, 0x13, 0xcc, 0x67, 0x32,
+		0x11, 0x5e, 0xe5, 0xcc, 0x8c, 0xf5, 0xa7, 0x52,
+		0x83, 0x9a, 0x70, 0xef, 0xde, 0x55, 0x9c, 0xc7,
+		0x8a, 0xed, 0xad, 0x28, 0x4a, 0xc5, 0x92, 0x6d,
+		0x8e, 0x47, 0xca, 0xe3, 0xf8, 0x77, 0xb5, 0x26,
+		0x64, 0x84, 0xc2, 0xf1, 0xd7, 0xae, 0x0c, 0xb9,
+		0x39, 0x0f, 0x43, 0x6b, 0xe9, 0xe0, 0x09, 0x4b,
+		0xe5, 0xe3, 0x17, 0xa6, 0x68, 0x69, 0x46, 0xf4,
+		0xf0, 0x68, 0x7f, 0x2f, 0x1c, 0x7e, 0x4c, 0xd2,
+		0xb5, 0xc6, 0x16, 0x85, 0xcf, 0x02, 0x4c, 0x89,
+		0x0b, 0x25, 0xb0, 0xeb, 0xf3, 0x77, 0x08, 0x6a,
+		0x46, 0x5c, 0xf6, 0x2f, 0xf1, 0x24, 0xc3, 0x4d,
+		0x80, 0x60, 0x4d, 0x69, 0x98, 0xde, 0xc7, 0xa1,
+		0xf6, 0x4e, 0x18, 0x0c, 0x2a, 0xb0, 0xb2, 0xe0,
+		0x46, 0xe7, 0x49, 0x37, 0xc8, 0x5a, 0x23, 0x24,
+		0xe3, 0x0f, 0xcc, 0x92, 0xb4, 0x8d, 0xdc, 0x9e
+};
+
+static const uint8_t AES_CBC_ciphertext_1280B[] = {
+		0x91, 0x99, 0x5e, 0x9e, 0x84, 0xff, 0x59, 0x45,
+		0xc1, 0xf4, 0xbc, 0x9c, 0xb9, 0x30, 0x6c, 0x51,
+		0x73, 0x52, 0xb4, 0x44, 0x09, 0x79, 0xe2, 0x89,
+		0x75, 0xeb, 0x54, 0x26, 0xce, 0xd8, 0x24, 0x98,
+		0xaa, 0xf8, 0x13, 0x16, 0x68, 0x58, 0xc4, 0x82,
+		0x0e, 0x31, 0xd3, 0x6a, 0x13, 0x58, 0x31, 0xe9,
+		0x3a, 0xc1, 0x8b, 0xc5, 0x3f, 0x50, 0x42, 0xd1,
+		0x93, 0xe4, 0x9b, 0x65, 0x2b, 0xf4, 0x1d, 0x9e,
+		0x2d, 0xdb, 0x48, 0xef, 0x9a, 0x01, 0x68, 0xb6,
+		0xea, 0x7a, 0x2b, 0xad, 0xfe, 0x77, 0x44, 0x7e,
+		0x5a, 0xc5, 0x64, 0xb4, 0xfe, 0x5c, 0x80, 0xf3,
+		0x20, 0x7e, 0xaf, 0x5b, 0xf8, 0xd1, 0x38, 0xa0,
+		0x8d, 0x09, 0x77, 0x06, 0xfe, 0xf5, 0xf4, 0xe4,
+		0xee, 0xb8, 0x95, 0x27, 0xed, 0x07, 0xb8, 0xaa,
+		0x25, 0xb4, 0xe1, 0x4c, 0xeb, 0x3f, 0xdb, 0x39,
+		0x66, 0x28, 0x1b, 0x60, 0x42, 0x8b, 0x99, 0xd9,
+		0x49, 0xd6, 0x8c, 0xa4, 0x9d, 0xd8, 0x93, 0x58,
+		0x8f, 0xfa, 0xd3, 0xf7, 0x37, 0x9c, 0x88, 0xab,
+		0x16, 0x50, 0xfe, 0x01, 0x1f, 0x88, 0x48, 0xbe,
+		0x21, 0xa9, 0x90, 0x9e, 0x73, 0xe9, 0x82, 0xf7,
+		0xbf, 0x4b, 0x43, 0xf4, 0xbf, 0x22, 0x3c, 0x45,
+		0x47, 0x95, 0x5b, 0x49, 0x71, 0x07, 0x1c, 0x8b,
+		0x49, 0xa4, 0xa3, 0x49, 0xc4, 0x5f, 0xb1, 0xf5,
+		0xe3, 0x6b, 0xf1, 0xdc, 0xea, 0x92, 0x7b, 0x29,
+		0x40, 0xc9, 0x39, 0x5f, 0xdb, 0xbd, 0xf3, 0x6a,
+		0x09, 0x9b, 0x2a, 0x5e, 0xc7, 0x0b, 0x25, 0x94,
+		0x55, 0x71, 0x9c, 0x7e, 0x0e, 0xb4, 0x08, 0x12,
+		0x8c, 0x6e, 0x77, 0xb8, 0x29, 0xf1, 0xc6, 0x71,
+		0x04, 0x40, 0x77, 0x18, 0x3f, 0x01, 0x09, 0x9c,
+		0x23, 0x2b, 0x5d, 0x2a, 0x88, 0x20, 0x23, 0x59,
+		0x74, 0x2a, 0x67, 0x8f, 0xb7, 0xba, 0x38, 0x9f,
+		0x0f, 0xcf, 0x94, 0xdf, 0xe1, 0x8f, 0x35, 0x5e,
+		0x34, 0x0c, 0x32, 0x92, 0x2b, 0x23, 0x81, 0xf4,
+		0x73, 0xa0, 0x5a, 0x2a, 0xbd, 0xa6, 0x6b, 0xae,
+		0x43, 0xe2, 0xdc, 0x01, 0xc1, 0xc6, 0xc3, 0x04,
+		0x06, 0xbb, 0xb0, 0x89, 0xb3, 0x4e, 0xbd, 0x81,
+		0x1b, 0x03, 0x63, 0x93, 0xed, 0x4e, 0xf6, 0xe5,
+		0x94, 0x6f, 0xd6, 0xf3, 0x20, 0xf3, 0xbc, 0x30,
+		0xc5, 0xd6, 0xbe, 0x1c, 0x05, 0x34, 0x26, 0x4d,
+		0x46, 0x5e, 0x56, 0x63, 0xfb, 0xdb, 0xcd, 0xed,
+		0xb0, 0x7f, 0x83, 0x94, 0x55, 0x54, 0x2f, 0xab,
+		0xc9, 0xb7, 0x16, 0x4f, 0x9e, 0x93, 0x25, 0xd7,
+		0x9f, 0x39, 0x2b, 0x63, 0xcf, 0x1e, 0xa3, 0x0e,
+		0x28, 0x47, 0x8a, 0x5f, 0x40, 0x02, 0x89, 0x1f,
+		0x83, 0xe7, 0x87, 0xd1, 0x90, 0x17, 0xb8, 0x27,
+		0x64, 0xe1, 0xe1, 0x48, 0x5a, 0x55, 0x74, 0x99,
+		0x27, 0x9d, 0x05, 0x67, 0xda, 0x70, 0x12, 0x8f,
+		0x94, 0x96, 0xfd, 0x36, 0xa4, 0x1d, 0x22, 0xe5,
+		0x0b, 0xe5, 0x2f, 0x38, 0x55, 0xa3, 0x5d, 0x0b,
+		0xcf, 0xd4, 0xa9, 0xb8, 0xd6, 0x9a, 0x16, 0x2e,
+		0x6c, 0x4a, 0x25, 0x51, 0x7a, 0x09, 0x48, 0xdd,
+		0xf0, 0xa3, 0x5b, 0x08, 0x1e, 0x2f, 0x03, 0x91,
+		0x80, 0xe8, 0x0f, 0xe9, 0x5a, 0x2f, 0x90, 0xd3,
+		0x64, 0xed, 0xd7, 0x51, 0x17, 0x66, 0x53, 0x40,
+		0x43, 0x74, 0xef, 0x0a, 0x0d, 0x49, 0x41, 0xf2,
+		0x67, 0x6e, 0xea, 0x14, 0xc8, 0x74, 0xd6, 0xa9,
+		0xb9, 0x6a, 0xe3, 0xec, 0x7d, 0xe8, 0x6a, 0x21,
+		0x3a, 0x52, 0x42, 0xfe, 0x9a, 0x15, 0x6d, 0x60,
+		0x64, 0x88, 0xc5, 0xb2, 0x8b, 0x15, 0x2c, 0xff,
+		0xe2, 0x35, 0xc3, 0xee, 0x9f, 0xcd, 0x82, 0xd9,
+		0x14, 0x35, 0x2a, 0xb7, 0xf5, 0x2f, 0x7b, 0xbc,
+		0x01, 0xfd, 0xa8, 0xe0, 0x21, 0x4e, 0x73, 0xf9,
+		0xf2, 0xb0, 0x79, 0xc9, 0x10, 0x52, 0x8f, 0xa8,
+		0x3e, 0x3b, 0xbe, 0xc5, 0xde, 0xf6, 0x53, 0xe3,
+		0x1c, 0x25, 0x3a, 0x1f, 0x13, 0xbf, 0x13, 0xbb,
+		0x94, 0xc2, 0x97, 0x43, 0x64, 0x47, 0x8f, 0x76,
+		0xd7, 0xaa, 0xeb, 0xa4, 0x03, 0x50, 0x0c, 0x10,
+		0x50, 0xd8, 0xf7, 0x75, 0x52, 0x42, 0xe2, 0x94,
+		0x67, 0xf4, 0x60, 0xfb, 0x21, 0x9b, 0x7a, 0x05,
+		0x50, 0x7c, 0x1b, 0x4a, 0x8b, 0x29, 0xe1, 0xac,
+		0xd7, 0x99, 0xfd, 0x0d, 0x65, 0x92, 0xcd, 0x23,
+		0xa7, 0x35, 0x8e, 0x13, 0xf2, 0xe4, 0x10, 0x74,
+		0xc6, 0x4f, 0x19, 0xf7, 0x01, 0x0b, 0x46, 0xab,
+		0xef, 0x8d, 0x4a, 0x4a, 0xfa, 0xda, 0xf3, 0xfb,
+		0x40, 0x28, 0x88, 0xa2, 0x65, 0x98, 0x4d, 0x88,
+		0xc7, 0xbf, 0x00, 0xc8, 0xd0, 0x91, 0xcb, 0x89,
+		0x2f, 0xb0, 0x85, 0xfc, 0xa1, 0xc1, 0x9e, 0x83,
+		0x88, 0xad, 0x95, 0xc0, 0x31, 0xa0, 0xad, 0xa2,
+		0x42, 0xb5, 0xe7, 0x55, 0xd4, 0x93, 0x5a, 0x74,
+		0x4e, 0x41, 0xc3, 0xcf, 0x96, 0x83, 0x46, 0xa1,
+		0xb7, 0x5b, 0xb1, 0x34, 0x67, 0x4e, 0xb1, 0xd7,
+		0x40, 0x20, 0x72, 0xe9, 0xc8, 0x74, 0xb7, 0xde,
+		0x72, 0x29, 0x77, 0x4c, 0x74, 0x7e, 0xcc, 0x18,
+		0xa5, 0x8d, 0x79, 0x8c, 0xd6, 0x6e, 0xcb, 0xd9,
+		0xe1, 0x61, 0xe7, 0x36, 0xbc, 0x37, 0xea, 0xee,
+		0xd8, 0x3c, 0x5e, 0x7c, 0x47, 0x50, 0xd5, 0xec,
+		0x37, 0xc5, 0x63, 0xc3, 0xc9, 0x99, 0x23, 0x9f,
+		0x64, 0x39, 0xdf, 0x13, 0x96, 0x6d, 0xea, 0x08,
+		0x0c, 0x27, 0x2d, 0xfe, 0x0f, 0xc2, 0xa3, 0x97,
+		0x04, 0x12, 0x66, 0x0d, 0x94, 0xbf, 0xbe, 0x3e,
+		0xb9, 0xcf, 0x8e, 0xc1, 0x9d, 0xb1, 0x64, 0x17,
+		0x54, 0x92, 0x3f, 0x0a, 0x51, 0xc8, 0xf5, 0x82,
+		0x98, 0x73, 0x03, 0xc0, 0x5a, 0x51, 0x01, 0x67,
+		0xb4, 0x01, 0x04, 0x06, 0xbc, 0x37, 0xde, 0x96,
+		0x23, 0x3c, 0xce, 0x98, 0x3f, 0xd6, 0x51, 0x1b,
+		0x01, 0x83, 0x0a, 0x1c, 0xf9, 0xeb, 0x7e, 0x72,
+		0xa9, 0x51, 0x23, 0xc8, 0xd7, 0x2f, 0x12, 0xbc,
+		0x08, 0xac, 0x07, 0xe7, 0xa7, 0xe6, 0x46, 0xae,
+		0x54, 0xa3, 0xc2, 0xf2, 0x05, 0x2d, 0x06, 0x5e,
+		0xfc, 0xe2, 0xa2, 0x23, 0xac, 0x86, 0xf2, 0x54,
+		0x83, 0x4a, 0xb6, 0x48, 0x93, 0xa1, 0x78, 0xc2,
+		0x07, 0xec, 0x82, 0xf0, 0x74, 0xa9, 0x18, 0xe9,
+		0x53, 0x44, 0x49, 0xc2, 0x94, 0xf8, 0x94, 0x92,
+		0x08, 0x3f, 0xbf, 0xa6, 0xe5, 0xc6, 0x03, 0x8a,
+		0xc6, 0x90, 0x48, 0x6c, 0xee, 0xbd, 0x44, 0x92,
+		0x1f, 0x2a, 0xce, 0x1d, 0xb8, 0x31, 0xa2, 0x9d,
+		0x24, 0x93, 0xa8, 0x9f, 0x36, 0x00, 0x04, 0x7b,
+		0xcb, 0x93, 0x59, 0xa1, 0x53, 0xdb, 0x13, 0x7a,
+		0x54, 0xb1, 0x04, 0xdb, 0xce, 0x48, 0x4f, 0xe5,
+		0x2f, 0xcb, 0xdf, 0x8f, 0x50, 0x7c, 0xfc, 0x76,
+		0x80, 0xb4, 0xdc, 0x3b, 0xc8, 0x98, 0x95, 0xf5,
+		0x50, 0xba, 0x70, 0x5a, 0x97, 0xd5, 0xfc, 0x98,
+		0x4d, 0xf3, 0x61, 0x0f, 0xcf, 0xac, 0x49, 0x0a,
+		0xdb, 0xc1, 0x42, 0x8f, 0xb6, 0x29, 0xd5, 0x65,
+		0xef, 0x83, 0xf1, 0x30, 0x4b, 0x84, 0xd0, 0x69,
+		0xde, 0xd2, 0x99, 0xe5, 0xec, 0xd3, 0x90, 0x86,
+		0x39, 0x2a, 0x6e, 0xd5, 0x32, 0xe3, 0x0d, 0x2d,
+		0x01, 0x8b, 0x17, 0x55, 0x1d, 0x65, 0x57, 0xbf,
+		0xd8, 0x75, 0xa4, 0x85, 0xb6, 0x4e, 0x35, 0x14,
+		0x58, 0xe4, 0x89, 0xb8, 0x7a, 0x58, 0x86, 0x0c,
+		0xbd, 0x8b, 0x05, 0x7b, 0x63, 0xc0, 0x86, 0x80,
+		0x33, 0x46, 0xd4, 0x9b, 0xb6, 0x0a, 0xeb, 0x6c,
+		0xae, 0xd6, 0x57, 0x7a, 0xc7, 0x59, 0x33, 0xa0,
+		0xda, 0xa4, 0x12, 0xbf, 0x52, 0x22, 0x05, 0x8d,
+		0xeb, 0xee, 0xd5, 0xec, 0xea, 0x29, 0x9b, 0x76,
+		0x95, 0x50, 0x6d, 0x99, 0xe1, 0x45, 0x63, 0x09,
+		0x16, 0x5f, 0xb0, 0xf2, 0x5b, 0x08, 0x33, 0xdd,
+		0x8f, 0xb7, 0x60, 0x7a, 0x8e, 0xc6, 0xfc, 0xac,
+		0xa9, 0x56, 0x2c, 0xa9, 0x8b, 0x74, 0x33, 0xad,
+		0x2a, 0x7e, 0x96, 0xb6, 0xba, 0x22, 0x28, 0xcf,
+		0x4d, 0x96, 0xb7, 0xd1, 0xfa, 0x99, 0x4a, 0x61,
+		0xe6, 0x84, 0xd1, 0x94, 0xca, 0xf5, 0x86, 0xb0,
+		0xba, 0x34, 0x7a, 0x04, 0xcc, 0xd4, 0x81, 0xcd,
+		0xd9, 0x86, 0xb6, 0xe0, 0x5a, 0x6f, 0x9b, 0x99,
+		0xf0, 0xdf, 0x49, 0xae, 0x6d, 0xc2, 0x54, 0x67,
+		0xe0, 0xb4, 0x34, 0x2d, 0x1c, 0x46, 0xdf, 0x73,
+		0x3b, 0x45, 0x43, 0xe7, 0x1f, 0xa3, 0x36, 0x35,
+		0x25, 0x33, 0xd9, 0xc0, 0x54, 0x38, 0x6e, 0x6b,
+		0x80, 0xcf, 0x50, 0xa4, 0xb6, 0x21, 0x17, 0xfd,
+		0x9b, 0x5c, 0x36, 0xca, 0xcc, 0x73, 0x73, 0xad,
+		0xe0, 0x57, 0x77, 0x90, 0x0e, 0x7f, 0x0f, 0x87,
+		0x7f, 0xdb, 0x73, 0xbf, 0xda, 0xc2, 0xb3, 0x05,
+		0x22, 0x06, 0xf5, 0xa3, 0xfc, 0x1e, 0x8f, 0xda,
+		0xcf, 0x49, 0xd6, 0xb3, 0x66, 0x2c, 0xb5, 0x00,
+		0xaf, 0x85, 0x6e, 0xb8, 0x5b, 0x8c, 0xa1, 0xa4,
+		0x21, 0xce, 0x40, 0xf3, 0x98, 0xac, 0xec, 0x88,
+		0x62, 0x43, 0x2a, 0xac, 0xca, 0xcf, 0xb9, 0x30,
+		0xeb, 0xfc, 0xef, 0xf0, 0x6e, 0x64, 0x6d, 0xe7,
+		0x54, 0x88, 0x6b, 0x22, 0x29, 0xbe, 0xa5, 0x8c,
+		0x31, 0x23, 0x3b, 0x4a, 0x80, 0x37, 0xe6, 0xd0,
+		0x05, 0xfc, 0x10, 0x0e, 0xdd, 0xbb, 0x00, 0xc5,
+		0x07, 0x20, 0x59, 0xd3, 0x41, 0x17, 0x86, 0x46,
+		0xab, 0x68, 0xf6, 0x48, 0x3c, 0xea, 0x5a, 0x06,
+		0x30, 0x21, 0x19, 0xed, 0x74, 0xbe, 0x0b, 0x97,
+		0xee, 0x91, 0x35, 0x94, 0x1f, 0xcb, 0x68, 0x7f,
+		0xe4, 0x48, 0xb0, 0x16, 0xfb, 0xf0, 0x74, 0xdb,
+		0x06, 0x59, 0x2e, 0x5a, 0x9c, 0xce, 0x8f, 0x7d,
+		0xba, 0x48, 0xd5, 0x3f, 0x5c, 0xb0, 0xc2, 0x33,
+		0x48, 0x60, 0x17, 0x08, 0x85, 0xba, 0xff, 0xb9,
+		0x34, 0x0a, 0x3d, 0x8f, 0x21, 0x13, 0x12, 0x1b
+};
+
+static const uint8_t AES_CBC_ciphertext_1536B[] = {
+		0x89, 0x93, 0x05, 0x99, 0xa9, 0xed, 0xea, 0x62,
+		0xc9, 0xda, 0x51, 0x15, 0xce, 0x42, 0x91, 0xc3,
+		0x80, 0xc8, 0x03, 0x88, 0xc2, 0x63, 0xda, 0x53,
+		0x1a, 0xf3, 0xeb, 0xd5, 0xba, 0x6f, 0x23, 0xb2,
+		0xed, 0x8f, 0x89, 0xb1, 0xb3, 0xca, 0x90, 0x7a,
+		0xdd, 0x3f, 0xf6, 0xca, 0x86, 0x58, 0x54, 0xbc,
+		0xab, 0x0f, 0xf4, 0xab, 0x6d, 0x5d, 0x42, 0xd0,
+		0x17, 0x49, 0x17, 0xd1, 0x93, 0xea, 0xe8, 0x22,
+		0xc1, 0x34, 0x9f, 0x3a, 0x3b, 0xaa, 0xe9, 0x1b,
+		0x93, 0xff, 0x6b, 0x68, 0xba, 0xe6, 0xd2, 0x39,
+		0x3d, 0x55, 0x34, 0x8f, 0x98, 0x86, 0xb4, 0xd8,
+		0x7c, 0x0d, 0x3e, 0x01, 0x63, 0x04, 0x01, 0xff,
+		0x16, 0x0f, 0x51, 0x5f, 0x73, 0x53, 0xf0, 0x3a,
+		0x38, 0xb4, 0x4d, 0x8d, 0xaf, 0xa3, 0xca, 0x2f,
+		0x6f, 0xdf, 0xc0, 0x41, 0x6c, 0x48, 0x60, 0x1a,
+		0xe4, 0xe7, 0x8a, 0x65, 0x6f, 0x8d, 0xd7, 0xe1,
+		0x10, 0xab, 0x78, 0x5b, 0xb9, 0x69, 0x1f, 0xe0,
+		0x5c, 0xf1, 0x19, 0x12, 0x21, 0xc7, 0x51, 0xbc,
+		0x61, 0x5f, 0xc0, 0x36, 0x17, 0xc0, 0x28, 0xd9,
+		0x51, 0xcb, 0x43, 0xd9, 0xfa, 0xd1, 0xad, 0x79,
+		0x69, 0x86, 0x49, 0xc5, 0xe5, 0x69, 0x27, 0xce,
+		0x22, 0xd0, 0xe1, 0x6a, 0xf9, 0x02, 0xca, 0x6c,
+		0x34, 0xc7, 0xb8, 0x02, 0xc1, 0x38, 0x7f, 0xd5,
+		0x15, 0xf5, 0xd6, 0xeb, 0xf9, 0x30, 0x40, 0x43,
+		0xea, 0x87, 0xde, 0x35, 0xf6, 0x83, 0x59, 0x09,
+		0x68, 0x62, 0x00, 0x87, 0xb8, 0xe7, 0xca, 0x05,
+		0x0f, 0xac, 0x42, 0x58, 0x45, 0xaa, 0xc9, 0x9b,
+		0xfd, 0x2a, 0xda, 0x65, 0x33, 0x93, 0x9d, 0xc6,
+		0x93, 0x8d, 0xe2, 0xc5, 0x71, 0xc1, 0x5c, 0x13,
+		0xde, 0x7b, 0xd4, 0xb9, 0x4c, 0x35, 0x61, 0x85,
+		0x90, 0x78, 0xf7, 0x81, 0x98, 0x45, 0x99, 0x24,
+		0x58, 0x73, 0x28, 0xf8, 0x31, 0xab, 0x54, 0x2e,
+		0xc0, 0x38, 0x77, 0x25, 0x5c, 0x06, 0x9c, 0xc3,
+		0x69, 0x21, 0x92, 0x76, 0xe1, 0x16, 0xdc, 0xa9,
+		0xee, 0xb6, 0x80, 0x66, 0x43, 0x11, 0x24, 0xb3,
+		0x07, 0x17, 0x89, 0x0f, 0xcb, 0xe0, 0x60, 0xa8,
+		0x9d, 0x06, 0x4b, 0x6e, 0x72, 0xb7, 0xbc, 0x4f,
+		0xb8, 0xc0, 0x80, 0xa2, 0xfb, 0x46, 0x5b, 0x8f,
+		0x11, 0x01, 0x92, 0x9d, 0x37, 0x09, 0x98, 0xc8,
+		0x0a, 0x46, 0xae, 0x12, 0xac, 0x61, 0x3f, 0xe7,
+		0x41, 0x1a, 0xaa, 0x2e, 0xdc, 0xd7, 0x2a, 0x47,
+		0xee, 0xdf, 0x08, 0xd1, 0xff, 0xea, 0x13, 0xc6,
+		0x05, 0xdb, 0x29, 0xcc, 0x03, 0xba, 0x7b, 0x6d,
+		0x40, 0xc1, 0xc9, 0x76, 0x75, 0x03, 0x7a, 0x71,
+		0xc9, 0x5f, 0xd9, 0xe0, 0x61, 0x69, 0x36, 0x8f,
+		0xb2, 0xbc, 0x28, 0xf3, 0x90, 0x71, 0xda, 0x5f,
+		0x08, 0xd5, 0x0d, 0xc1, 0xe6, 0xbd, 0x2b, 0xc6,
+		0x6c, 0x42, 0xfd, 0xbf, 0x10, 0xe8, 0x5f, 0x87,
+		0x3d, 0x21, 0x42, 0x85, 0x01, 0x0a, 0xbf, 0x8e,
+		0x49, 0xd3, 0x9c, 0x89, 0x3b, 0xea, 0xe1, 0xbf,
+		0xe9, 0x9b, 0x5e, 0x0e, 0xb8, 0xeb, 0xcd, 0x3a,
+		0xf6, 0x29, 0x41, 0x35, 0xdd, 0x9b, 0x13, 0x24,
+		0xe0, 0x1d, 0x8a, 0xcb, 0x20, 0xf8, 0x41, 0x51,
+		0x3e, 0x23, 0x8c, 0x67, 0x98, 0x39, 0x53, 0x77,
+		0x2a, 0x68, 0xf4, 0x3c, 0x7e, 0xd6, 0xc4, 0x6e,
+		0xf1, 0x53, 0xe9, 0xd8, 0x5c, 0xc1, 0xa9, 0x38,
+		0x6f, 0x5e, 0xe4, 0xd4, 0x29, 0x1c, 0x6c, 0xee,
+		0x2f, 0xea, 0xde, 0x61, 0x71, 0x5a, 0xea, 0xce,
+		0x23, 0x6e, 0x1b, 0x16, 0x43, 0xb7, 0xc0, 0xe3,
+		0x87, 0xa1, 0x95, 0x1e, 0x97, 0x4d, 0xea, 0xa6,
+		0xf7, 0x25, 0xac, 0x82, 0x2a, 0xd3, 0xa6, 0x99,
+		0x75, 0xdd, 0xc1, 0x55, 0x32, 0x6b, 0xea, 0x33,
+		0x88, 0xce, 0x06, 0xac, 0x15, 0x39, 0x19, 0xa3,
+		0x59, 0xaf, 0x7a, 0x1f, 0xd9, 0x72, 0x5e, 0xf7,
+		0x4c, 0xf3, 0x5d, 0x6b, 0xf2, 0x16, 0x92, 0xa8,
+		0x9e, 0x3d, 0xd4, 0x4c, 0x72, 0x55, 0x4e, 0x4a,
+		0xf7, 0x8b, 0x2f, 0x67, 0x5a, 0x90, 0xb7, 0xcf,
+		0x16, 0xd3, 0x7b, 0x5a, 0x9a, 0xc8, 0x9f, 0xbf,
+		0x01, 0x76, 0x3b, 0x86, 0x2c, 0x2a, 0x78, 0x10,
+		0x70, 0x05, 0x38, 0xf9, 0xdd, 0x2a, 0x1d, 0x00,
+		0x25, 0xb7, 0x10, 0xac, 0x3b, 0x3c, 0x4d, 0x3c,
+		0x01, 0x68, 0x3c, 0x5a, 0x29, 0xc2, 0xa0, 0x1b,
+		0x95, 0x67, 0xf9, 0x0a, 0x60, 0xb7, 0x11, 0x9c,
+		0x40, 0x45, 0xd7, 0xb0, 0xda, 0x49, 0x87, 0xcd,
+		0xb0, 0x9b, 0x61, 0x8c, 0xf4, 0x0d, 0x94, 0x1d,
+		0x79, 0x66, 0x13, 0x0b, 0xc6, 0x6b, 0x19, 0xee,
+		0xa0, 0x6b, 0x64, 0x7d, 0xc4, 0xff, 0x98, 0x72,
+		0x60, 0xab, 0x7f, 0x0f, 0x4d, 0x5d, 0x6b, 0xc3,
+		0xba, 0x5e, 0x0d, 0x04, 0xd9, 0x59, 0x17, 0xd0,
+		0x64, 0xbe, 0xfb, 0x58, 0xfc, 0xed, 0x18, 0xf6,
+		0xac, 0x19, 0xa4, 0xfd, 0x16, 0x59, 0x80, 0x58,
+		0xb8, 0x0f, 0x79, 0x24, 0x60, 0x18, 0x62, 0xa9,
+		0xa3, 0xa0, 0xe8, 0x81, 0xd6, 0xec, 0x5b, 0xfe,
+		0x5b, 0xb8, 0xa4, 0x00, 0xa9, 0xd0, 0x90, 0x17,
+		0xe5, 0x50, 0x3d, 0x2b, 0x12, 0x6e, 0x2a, 0x13,
+		0x65, 0x7c, 0xdf, 0xdf, 0xa7, 0xdd, 0x9f, 0x78,
+		0x5f, 0x8f, 0x4e, 0x90, 0xa6, 0x10, 0xe4, 0x7b,
+		0x68, 0x6b, 0xfd, 0xa9, 0x6d, 0x47, 0xfa, 0xec,
+		0x42, 0x35, 0x07, 0x12, 0x3e, 0x78, 0x23, 0x15,
+		0xff, 0xe2, 0x65, 0xc7, 0x47, 0x89, 0x2f, 0x97,
+		0x7c, 0xd7, 0x6b, 0x69, 0x35, 0x79, 0x6f, 0x85,
+		0xb4, 0xa9, 0x75, 0x04, 0x32, 0x9a, 0xfe, 0xf0,
+		0xce, 0xe3, 0xf1, 0xab, 0x15, 0x47, 0xe4, 0x9c,
+		0xc1, 0x48, 0x32, 0x3c, 0xbe, 0x44, 0x72, 0xc9,
+		0xaa, 0x50, 0x37, 0xa6, 0xbe, 0x41, 0xcf, 0xe8,
+		0x17, 0x4e, 0x37, 0xbe, 0xf1, 0x34, 0x2c, 0xd9,
+		0x60, 0x48, 0x09, 0xa5, 0x26, 0x00, 0x31, 0x77,
+		0x4e, 0xac, 0x7c, 0x89, 0x75, 0xe3, 0xde, 0x26,
+		0x4c, 0x32, 0x54, 0x27, 0x8e, 0x92, 0x26, 0x42,
+		0x85, 0x76, 0x01, 0x76, 0x62, 0x4c, 0x29, 0xe9,
+		0x38, 0x05, 0x51, 0x54, 0x97, 0xa3, 0x03, 0x59,
+		0x5e, 0xec, 0x0c, 0xe4, 0x96, 0xb7, 0x15, 0xa8,
+		0x41, 0x06, 0x2b, 0x78, 0x95, 0x24, 0xf6, 0x32,
+		0xc5, 0xec, 0xd7, 0x89, 0x28, 0x1e, 0xec, 0xb1,
+		0xc7, 0x21, 0x0c, 0xd3, 0x80, 0x7c, 0x5a, 0xe6,
+		0xb1, 0x3a, 0x52, 0x33, 0x84, 0x4e, 0x32, 0x6e,
+		0x7a, 0xf6, 0x43, 0x15, 0x5b, 0xa6, 0xba, 0xeb,
+		0xa8, 0xe4, 0xff, 0x4f, 0xbd, 0xbd, 0xa8, 0x5e,
+		0xbe, 0x27, 0xaf, 0xc5, 0xf7, 0x9e, 0xdf, 0x48,
+		0x22, 0xca, 0x6a, 0x0b, 0x3c, 0xd7, 0xe0, 0xdc,
+		0xf3, 0x71, 0x08, 0xdc, 0x28, 0x13, 0x08, 0xf2,
+		0x08, 0x1d, 0x9d, 0x7b, 0xd9, 0xde, 0x6f, 0xe6,
+		0xe8, 0x88, 0x18, 0xc2, 0xcd, 0x93, 0xc5, 0x38,
+		0x21, 0x68, 0x4c, 0x9a, 0xfb, 0xb6, 0x18, 0x16,
+		0x73, 0x2c, 0x1d, 0x6f, 0x95, 0xfb, 0x65, 0x4f,
+		0x7c, 0xec, 0x8d, 0x6c, 0xa8, 0xc0, 0x55, 0x28,
+		0xc6, 0xc3, 0xea, 0xeb, 0x05, 0xf5, 0x65, 0xeb,
+		0x53, 0xe1, 0x54, 0xef, 0xb8, 0x64, 0x98, 0x2d,
+		0x98, 0x9e, 0xc8, 0xfe, 0xa2, 0x07, 0x30, 0xf7,
+		0xf7, 0xae, 0xdb, 0x32, 0xf8, 0x71, 0x9d, 0x06,
+		0xdf, 0x9b, 0xda, 0x61, 0x7d, 0xdb, 0xae, 0x06,
+		0x24, 0x63, 0x74, 0xb6, 0xf3, 0x1b, 0x66, 0x09,
+		0x60, 0xff, 0x2b, 0x29, 0xf5, 0xa9, 0x9d, 0x61,
+		0x5d, 0x55, 0x10, 0x82, 0x21, 0xbb, 0x64, 0x0d,
+		0xef, 0x5c, 0xe3, 0x30, 0x1b, 0x60, 0x1e, 0x5b,
+		0xfe, 0x6c, 0xf5, 0x15, 0xa3, 0x86, 0x27, 0x58,
+		0x46, 0x00, 0x20, 0xcb, 0x86, 0x9a, 0x52, 0x29,
+		0x20, 0x68, 0x4d, 0x67, 0x88, 0x70, 0xc2, 0x31,
+		0xd8, 0xbb, 0xa5, 0xa7, 0x88, 0x7f, 0x66, 0xbc,
+		0xaa, 0x0f, 0xe1, 0x78, 0x7b, 0x97, 0x3c, 0xb7,
+		0xd7, 0xd8, 0x04, 0xe0, 0x09, 0x60, 0xc8, 0xd0,
+		0x9e, 0xe5, 0x6b, 0x31, 0x7f, 0x88, 0xfe, 0xc3,
+		0xfd, 0x89, 0xec, 0x76, 0x4b, 0xb3, 0xa7, 0x37,
+		0x03, 0xb7, 0xc6, 0x10, 0x7c, 0x9d, 0x0c, 0x75,
+		0xd3, 0x08, 0x14, 0x94, 0x03, 0x42, 0x25, 0x26,
+		0x85, 0xf7, 0xf0, 0x90, 0x06, 0x3e, 0x6f, 0x60,
+		0x52, 0x55, 0xd5, 0x0f, 0x79, 0x64, 0x69, 0x69,
+		0x46, 0xf9, 0x7f, 0x7f, 0x03, 0xf1, 0x1f, 0xdb,
+		0x39, 0x05, 0xba, 0x4a, 0x8f, 0x17, 0xe7, 0xba,
+		0xe2, 0x07, 0x7c, 0x1d, 0x9e, 0xbc, 0x94, 0xc0,
+		0x61, 0x59, 0x8e, 0x72, 0xaf, 0xfc, 0x99, 0xe4,
+		0xd5, 0xa8, 0xee, 0x0a, 0x48, 0x2d, 0x82, 0x8b,
+		0x34, 0x54, 0x8a, 0xce, 0xc7, 0xfa, 0xdd, 0xba,
+		0x54, 0xdf, 0xb3, 0x30, 0x33, 0x73, 0x2e, 0xd5,
+		0x52, 0xab, 0x49, 0x91, 0x4e, 0x0a, 0xd6, 0x2f,
+		0x67, 0xe4, 0xdd, 0x64, 0x48, 0x16, 0xd9, 0x85,
+		0xaa, 0x52, 0xa5, 0x0b, 0xd3, 0xb4, 0x2d, 0x77,
+		0x5e, 0x52, 0x77, 0x17, 0xcf, 0xbe, 0x88, 0x04,
+		0x01, 0x52, 0xe2, 0xf1, 0x46, 0xe2, 0x91, 0x30,
+		0x65, 0xcf, 0xc0, 0x65, 0x45, 0xc3, 0x7e, 0xf4,
+		0x2e, 0xb5, 0xaf, 0x6f, 0xab, 0x1a, 0xfa, 0x70,
+		0x35, 0xb8, 0x4f, 0x2d, 0x78, 0x90, 0x33, 0xb5,
+		0x9a, 0x67, 0xdb, 0x2f, 0x28, 0x32, 0xb6, 0x54,
+		0xab, 0x4c, 0x6b, 0x85, 0xed, 0x6c, 0x3e, 0x05,
+		0x2a, 0xc7, 0x32, 0xe8, 0xf5, 0xa3, 0x7b, 0x4e,
+		0x7b, 0x58, 0x24, 0x73, 0xf7, 0xfd, 0xc7, 0xc8,
+		0x6c, 0x71, 0x68, 0xb1, 0xf6, 0xc5, 0x9e, 0x1e,
+		0xe3, 0x5c, 0x25, 0xc0, 0x5b, 0x3e, 0x59, 0xa1,
+		0x18, 0x5a, 0xe8, 0xb5, 0xd1, 0x44, 0x13, 0xa3,
+		0xe6, 0x05, 0x76, 0xd2, 0x8d, 0x6e, 0x54, 0x68,
+		0x0c, 0xa4, 0x7b, 0x8b, 0xd3, 0x8c, 0x42, 0x13,
+		0x87, 0xda, 0xdf, 0x8f, 0xa5, 0x83, 0x7a, 0x42,
+		0x99, 0xb7, 0xeb, 0xe2, 0x79, 0xe0, 0xdb, 0xda,
+		0x33, 0xa8, 0x50, 0x3a, 0xd7, 0xe7, 0xd3, 0x61,
+		0x18, 0xb8, 0xaa, 0x2d, 0xc8, 0xd8, 0x2c, 0x28,
+		0xe5, 0x97, 0x0a, 0x7c, 0x6c, 0x7f, 0x09, 0xd7,
+		0x88, 0x80, 0xac, 0x12, 0xed, 0xf8, 0xc6, 0xb5,
+		0x2d, 0xd6, 0x63, 0x9b, 0x98, 0x35, 0x26, 0xde,
+		0xf6, 0x31, 0xee, 0x7e, 0xa0, 0xfb, 0x16, 0x98,
+		0xb1, 0x96, 0x1d, 0xee, 0xe3, 0x2f, 0xfb, 0x41,
+		0xdd, 0xea, 0x10, 0x1e, 0x03, 0x89, 0x18, 0xd2,
+		0x47, 0x0c, 0xa0, 0x57, 0xda, 0x76, 0x3a, 0x37,
+		0x2c, 0xe4, 0xf9, 0x77, 0xc8, 0x43, 0x5f, 0xcb,
+		0xd6, 0x85, 0xf7, 0x22, 0xe4, 0x32, 0x25, 0xa8,
+		0xdc, 0x21, 0xc0, 0xf5, 0x95, 0xb2, 0xf8, 0x83,
+		0xf0, 0x65, 0x61, 0x15, 0x48, 0x94, 0xb7, 0x03,
+		0x7f, 0x66, 0xa1, 0x39, 0x1f, 0xdd, 0xce, 0x96,
+		0xfe, 0x58, 0x81, 0x3d, 0x41, 0x11, 0x87, 0x13,
+		0x26, 0x1b, 0x6d, 0xf3, 0xca, 0x2e, 0x2c, 0x76,
+		0xd3, 0x2f, 0x6d, 0x49, 0x70, 0x53, 0x05, 0x96,
+		0xcc, 0x30, 0x2b, 0x83, 0xf2, 0xc6, 0xb2, 0x4b,
+		0x22, 0x13, 0x95, 0x42, 0xeb, 0x56, 0x4d, 0x22,
+		0xe6, 0x43, 0x6f, 0xba, 0xe7, 0x3b, 0xe5, 0x59,
+		0xce, 0x57, 0x88, 0x85, 0xb6, 0xbf, 0x15, 0x37,
+		0xb3, 0x7a, 0x7e, 0xc4, 0xbc, 0x99, 0xfc, 0xe4,
+		0x89, 0x00, 0x68, 0x39, 0xbc, 0x5a, 0xba, 0xab,
+		0x52, 0xab, 0xe6, 0x81, 0xfd, 0x93, 0x62, 0xe9,
+		0xb7, 0x12, 0xd1, 0x18, 0x1a, 0xb9, 0x55, 0x4a,
+		0x0f, 0xae, 0x35, 0x11, 0x04, 0x27, 0xf3, 0x42,
+		0x4e, 0xca, 0xdf, 0x9f, 0x12, 0x62, 0xea, 0x03,
+		0xc0, 0xa9, 0x22, 0x7b, 0x6c, 0x6c, 0xe3, 0xdf,
+		0x16, 0xad, 0x03, 0xc9, 0xfe, 0xa4, 0xdd, 0x4f
+};
+
+static const uint8_t AES_CBC_ciphertext_1792B[] = {
+		0x59, 0xcc, 0xfe, 0x8f, 0xb4, 0x9d, 0x0e, 0xd1,
+		0x85, 0xfc, 0x9b, 0x43, 0xc1, 0xb7, 0x54, 0x67,
+		0x01, 0xef, 0xb8, 0x71, 0x36, 0xdb, 0x50, 0x48,
+		0x7a, 0xea, 0xcf, 0xce, 0xba, 0x30, 0x10, 0x2e,
+		0x96, 0x2b, 0xfd, 0xcf, 0x00, 0xe3, 0x1f, 0xac,
+		0x66, 0x14, 0x30, 0x86, 0x49, 0xdb, 0x01, 0x8b,
+		0x07, 0xdd, 0x00, 0x9d, 0x0d, 0x5c, 0x19, 0x11,
+		0xe8, 0x44, 0x2b, 0x25, 0x70, 0xed, 0x7c, 0x33,
+		0x0d, 0xe3, 0x34, 0x93, 0x63, 0xad, 0x26, 0xb1,
+		0x11, 0x91, 0x34, 0x2e, 0x1d, 0x50, 0xaa, 0xd4,
+		0xef, 0x3a, 0x6d, 0xd7, 0x33, 0x20, 0x0d, 0x3f,
+		0x9b, 0xdd, 0xc3, 0xa5, 0xc5, 0xf1, 0x99, 0xdc,
+		0xea, 0x52, 0xda, 0x55, 0xea, 0xa2, 0x7a, 0xc5,
+		0x78, 0x44, 0x4a, 0x02, 0x33, 0x19, 0x62, 0x37,
+		0xf8, 0x8b, 0xd1, 0x0c, 0x21, 0xdf, 0x40, 0x19,
+		0x81, 0xea, 0xfb, 0x1c, 0xa7, 0xcc, 0x60, 0xfe,
+		0x63, 0x25, 0x8f, 0xf3, 0x73, 0x0f, 0x45, 0xe6,
+		0x6a, 0x18, 0xbf, 0xbe, 0xad, 0x92, 0x2a, 0x1e,
+		0x15, 0x65, 0x6f, 0xef, 0x92, 0xcd, 0x0e, 0x19,
+		0x3d, 0x42, 0xa8, 0xfc, 0x0d, 0x32, 0x58, 0xe0,
+		0x56, 0x9f, 0xd6, 0x9b, 0x8b, 0xec, 0xe0, 0x45,
+		0x4d, 0x7e, 0x73, 0x87, 0xff, 0x74, 0x92, 0x59,
+		0x60, 0x13, 0x93, 0xda, 0xec, 0xbf, 0xfa, 0x20,
+		0xb6, 0xe7, 0xdf, 0xc7, 0x10, 0xf5, 0x79, 0xb4,
+		0xd7, 0xac, 0xaf, 0x2b, 0x37, 0x52, 0x30, 0x1d,
+		0xbe, 0x0f, 0x60, 0x77, 0x3d, 0x03, 0x63, 0xa9,
+		0xae, 0xb1, 0xf3, 0xca, 0xca, 0xb4, 0x21, 0xd7,
+		0x6f, 0x2e, 0x5e, 0x9b, 0x68, 0x53, 0x80, 0xab,
+		0x30, 0x23, 0x0a, 0x72, 0x6b, 0xb1, 0xd8, 0x25,
+		0x5d, 0x3a, 0x62, 0x9b, 0x4f, 0x59, 0x3b, 0x79,
+		0xa8, 0x9e, 0x08, 0x6d, 0x37, 0xb0, 0xfc, 0x42,
+		0x51, 0x25, 0x86, 0xbd, 0x54, 0x5a, 0x95, 0x20,
+		0x6c, 0xac, 0xb9, 0x30, 0x1c, 0x03, 0xc9, 0x49,
+		0x38, 0x55, 0x31, 0x49, 0xed, 0xa9, 0x0e, 0xc3,
+		0x65, 0xb4, 0x68, 0x6b, 0x07, 0x4c, 0x0a, 0xf9,
+		0x21, 0x69, 0x7c, 0x9f, 0x28, 0x80, 0xe9, 0x49,
+		0x22, 0x7c, 0xec, 0x97, 0xf7, 0x70, 0xb4, 0xb8,
+		0x25, 0xe7, 0x80, 0x2c, 0x43, 0x24, 0x8a, 0x2e,
+		0xac, 0xa2, 0x84, 0x20, 0xe7, 0xf4, 0x6b, 0x86,
+		0x37, 0x05, 0xc7, 0x59, 0x04, 0x49, 0x2a, 0x99,
+		0x80, 0x46, 0x32, 0x19, 0xe6, 0x30, 0xce, 0xc0,
+		0xef, 0x6e, 0xec, 0xe5, 0x2f, 0x24, 0xc1, 0x78,
+		0x45, 0x02, 0xd3, 0x64, 0x99, 0xf5, 0xc7, 0xbc,
+		0x8f, 0x8c, 0x75, 0xb1, 0x0a, 0xc8, 0xc3, 0xbd,
+		0x5e, 0x7e, 0xbd, 0x0e, 0xdf, 0x4b, 0x96, 0x6a,
+		0xfd, 0x03, 0xdb, 0xd1, 0x31, 0x1e, 0x27, 0xf9,
+		0xe5, 0x83, 0x9a, 0xfc, 0x13, 0x4c, 0xd3, 0x04,
+		0xdb, 0xdb, 0x3f, 0x35, 0x93, 0x4e, 0x14, 0x6b,
+		0x00, 0x5c, 0xb6, 0x11, 0x50, 0xee, 0x61, 0x5c,
+		0x10, 0x5c, 0xd0, 0x90, 0x02, 0x2e, 0x12, 0xe0,
+		0x50, 0x44, 0xad, 0x75, 0xcd, 0x94, 0xcf, 0x92,
+		0xcb, 0xe3, 0xe8, 0x77, 0x4b, 0xd7, 0x1a, 0x7c,
+		0xdd, 0x6b, 0x49, 0x21, 0x7c, 0xe8, 0x2c, 0x25,
+		0x49, 0x86, 0x1e, 0x54, 0xae, 0xfc, 0x0e, 0x80,
+		0xb1, 0xd5, 0xa5, 0x23, 0xcf, 0xcc, 0x0e, 0x11,
+		0xe2, 0x7c, 0x3c, 0x25, 0x78, 0x64, 0x03, 0xa1,
+		0xdd, 0x9f, 0x74, 0x12, 0x7b, 0x21, 0xb5, 0x73,
+		0x15, 0x3c, 0xed, 0xad, 0x07, 0x62, 0x21, 0x79,
+		0xd4, 0x2f, 0x0d, 0x72, 0xe9, 0x7c, 0x6b, 0x96,
+		0x6e, 0xe5, 0x36, 0x4a, 0xd2, 0x38, 0xe1, 0xff,
+		0x6e, 0x26, 0xa4, 0xac, 0x83, 0x07, 0xe6, 0x67,
+		0x74, 0x6c, 0xec, 0x8b, 0x4b, 0x79, 0x33, 0x50,
+		0x2f, 0x8f, 0xa0, 0x8f, 0xfa, 0x38, 0x6a, 0xa2,
+		0x3a, 0x42, 0x85, 0x15, 0x90, 0xd0, 0xb3, 0x0d,
+		0x8a, 0xe4, 0x60, 0x03, 0xef, 0xf9, 0x65, 0x8a,
+		0x4e, 0x50, 0x8c, 0x65, 0xba, 0x61, 0x16, 0xc3,
+		0x93, 0xb7, 0x75, 0x21, 0x98, 0x25, 0x60, 0x6e,
+		0x3d, 0x68, 0xba, 0x7c, 0xe4, 0xf3, 0xd9, 0x9b,
+		0xfb, 0x7a, 0xed, 0x1f, 0xb3, 0x4b, 0x88, 0x74,
+		0x2c, 0xb8, 0x8c, 0x22, 0x95, 0xce, 0x90, 0xf1,
+		0xdb, 0x80, 0xa6, 0x39, 0xae, 0x82, 0xa1, 0xef,
+		0x75, 0xec, 0xfe, 0xf1, 0xe8, 0x04, 0xfd, 0x99,
+		0x1b, 0x5f, 0x45, 0x87, 0x4f, 0xfa, 0xa2, 0x3e,
+		0x3e, 0xb5, 0x01, 0x4b, 0x46, 0xeb, 0x13, 0x9a,
+		0xe4, 0x7d, 0x03, 0x87, 0xb1, 0x59, 0x91, 0x8e,
+		0x37, 0xd3, 0x16, 0xce, 0xef, 0x4b, 0xe9, 0x46,
+		0x8d, 0x2a, 0x50, 0x2f, 0x41, 0xd3, 0x7b, 0xcf,
+		0xf0, 0xb7, 0x8b, 0x65, 0x0f, 0xa3, 0x27, 0x10,
+		0xe9, 0xa9, 0xe9, 0x2c, 0xbe, 0xbb, 0x82, 0xe3,
+		0x7b, 0x0b, 0x81, 0x3e, 0xa4, 0x6a, 0x4f, 0x3b,
+		0xd5, 0x61, 0xf8, 0x47, 0x04, 0x99, 0x5b, 0xff,
+		0xf3, 0x14, 0x6e, 0x57, 0x5b, 0xbf, 0x1b, 0xb4,
+		0x3f, 0xf9, 0x31, 0xf6, 0x95, 0xd5, 0x10, 0xa9,
+		0x72, 0x28, 0x23, 0xa9, 0x6a, 0xa2, 0xcf, 0x7d,
+		0xe3, 0x18, 0x95, 0xda, 0xbc, 0x6f, 0xe9, 0xd8,
+		0xef, 0x49, 0x3f, 0xd3, 0xef, 0x1f, 0xe1, 0x50,
+		0xe8, 0x8a, 0xc0, 0xce, 0xcc, 0xb7, 0x5e, 0x0e,
+		0x8b, 0x95, 0x80, 0xfd, 0x58, 0x2a, 0x9b, 0xc8,
+		0xb4, 0x17, 0x04, 0x46, 0x74, 0xd4, 0x68, 0x91,
+		0x33, 0xc8, 0x31, 0x15, 0x84, 0x16, 0x35, 0x03,
+		0x64, 0x6d, 0xa9, 0x4e, 0x20, 0xeb, 0xa9, 0x3f,
+		0x21, 0x5e, 0x9b, 0x09, 0xc3, 0x45, 0xf8, 0x7c,
+		0x59, 0x62, 0x29, 0x9a, 0x5c, 0xcf, 0xb4, 0x27,
+		0x5e, 0x13, 0xea, 0xb3, 0xef, 0xd9, 0x01, 0x2a,
+		0x65, 0x5f, 0x14, 0xf4, 0xbf, 0x28, 0x89, 0x3d,
+		0xdd, 0x9d, 0x52, 0xbd, 0x9e, 0x5b, 0x3b, 0xd2,
+		0xc2, 0x81, 0x35, 0xb6, 0xac, 0xdd, 0x27, 0xc3,
+		0x7b, 0x01, 0x5a, 0x6d, 0x4c, 0x5e, 0x2c, 0x30,
+		0xcb, 0x3a, 0xfa, 0xc1, 0xd7, 0x31, 0x67, 0x3e,
+		0x08, 0x6a, 0xe8, 0x8c, 0x75, 0xac, 0x1a, 0x6a,
+		0x52, 0xf7, 0x51, 0xcd, 0x85, 0x3f, 0x3c, 0xa7,
+		0xea, 0xbc, 0xd7, 0x18, 0x9e, 0x27, 0x73, 0xe6,
+		0x2b, 0x58, 0xb6, 0xd2, 0x29, 0x68, 0xd5, 0x8f,
+		0x00, 0x4d, 0x55, 0xf6, 0x61, 0x5a, 0xcc, 0x51,
+		0xa6, 0x5e, 0x85, 0xcb, 0x0b, 0xfd, 0x06, 0xca,
+		0xf5, 0xbf, 0x0d, 0x13, 0x74, 0x78, 0x6d, 0x9e,
+		0x20, 0x11, 0x84, 0x3e, 0x78, 0x17, 0x04, 0x4f,
+		0x64, 0x2c, 0x3b, 0x3e, 0x93, 0x7b, 0x58, 0x33,
+		0x07, 0x52, 0xf7, 0x60, 0x6a, 0xa8, 0x3b, 0x19,
+		0x27, 0x7a, 0x93, 0xc5, 0x53, 0xad, 0xec, 0xf6,
+		0xc8, 0x94, 0xee, 0x92, 0xea, 0xee, 0x7e, 0xea,
+		0xb9, 0x5f, 0xac, 0x59, 0x5d, 0x2e, 0x78, 0x53,
+		0x72, 0x81, 0x92, 0xdd, 0x1c, 0x63, 0xbe, 0x02,
+		0xeb, 0xa8, 0x1b, 0x2a, 0x6e, 0x72, 0xe3, 0x2d,
+		0x84, 0x0d, 0x8a, 0x22, 0xf6, 0xba, 0xab, 0x04,
+		0x8e, 0x04, 0x24, 0xdb, 0xcc, 0xe2, 0x69, 0xeb,
+		0x4e, 0xfa, 0x6b, 0x5b, 0xc8, 0xc0, 0xd9, 0x25,
+		0xcb, 0x40, 0x8d, 0x4b, 0x8e, 0xa0, 0xd4, 0x72,
+		0x98, 0x36, 0x46, 0x3b, 0x4f, 0x5f, 0x96, 0x84,
+		0x03, 0x28, 0x86, 0x4d, 0xa1, 0x8a, 0xd7, 0xb2,
+		0x5b, 0x27, 0x01, 0x80, 0x62, 0x49, 0x56, 0xb9,
+		0xa0, 0xa1, 0xe3, 0x6e, 0x22, 0x2a, 0x5d, 0x03,
+		0x86, 0x40, 0x36, 0x22, 0x5e, 0xd2, 0xe5, 0xc0,
+		0x6b, 0xfa, 0xac, 0x80, 0x4e, 0x09, 0x99, 0xbc,
+		0x2f, 0x9b, 0xcc, 0xf3, 0x4e, 0xf7, 0x99, 0x98,
+		0x11, 0x6e, 0x6f, 0x62, 0x22, 0x6b, 0x92, 0x95,
+		0x3b, 0xc3, 0xd2, 0x8e, 0x0f, 0x07, 0xc2, 0x51,
+		0x5c, 0x4d, 0xb2, 0x6e, 0xc0, 0x27, 0x73, 0xcd,
+		0x57, 0xb7, 0xf0, 0xe9, 0x2e, 0xc8, 0xe2, 0x0c,
+		0xd1, 0xb5, 0x0f, 0xff, 0xf9, 0xec, 0x38, 0xba,
+		0x97, 0xd6, 0x94, 0x9b, 0xd1, 0x79, 0xb6, 0x6a,
+		0x01, 0x17, 0xe4, 0x7e, 0xa6, 0xd5, 0x86, 0x19,
+		0xae, 0xf3, 0xf0, 0x62, 0x73, 0xc0, 0xf0, 0x0a,
+		0x7a, 0x96, 0x93, 0x72, 0x89, 0x7e, 0x25, 0x57,
+		0xf8, 0xf7, 0xd5, 0x1e, 0xe5, 0xac, 0xd6, 0x38,
+		0x4f, 0xe8, 0x81, 0xd1, 0x53, 0x41, 0x07, 0x2d,
+		0x58, 0x34, 0x1c, 0xef, 0x74, 0x2e, 0x61, 0xca,
+		0xd3, 0xeb, 0xd6, 0x93, 0x0a, 0xf2, 0xf2, 0x86,
+		0x9c, 0xe3, 0x7a, 0x52, 0xf5, 0x42, 0xf1, 0x8b,
+		0x10, 0xf2, 0x25, 0x68, 0x7e, 0x61, 0xb1, 0x19,
+		0xcf, 0x8f, 0x5a, 0x53, 0xb7, 0x68, 0x4f, 0x1a,
+		0x71, 0xe9, 0x83, 0x91, 0x3a, 0x78, 0x0f, 0xf7,
+		0xd4, 0x74, 0xf5, 0x06, 0xd2, 0x88, 0xb0, 0x06,
+		0xe5, 0xc0, 0xfb, 0xb3, 0x91, 0xad, 0xc0, 0x84,
+		0x31, 0xf2, 0x3a, 0xcf, 0x63, 0xe6, 0x4a, 0xd3,
+		0x78, 0xbe, 0xde, 0x73, 0x3e, 0x02, 0x8e, 0xb8,
+		0x3a, 0xf6, 0x55, 0xa7, 0xf8, 0x5a, 0xb5, 0x0e,
+		0x0c, 0xc5, 0xe5, 0x66, 0xd5, 0xd2, 0x18, 0xf3,
+		0xef, 0xa5, 0xc9, 0x68, 0x69, 0xe0, 0xcd, 0x00,
+		0x33, 0x99, 0x6e, 0xea, 0xcb, 0x06, 0x7a, 0xe1,
+		0xe1, 0x19, 0x0b, 0xe7, 0x08, 0xcd, 0x09, 0x1b,
+		0x85, 0xec, 0xc4, 0xd4, 0x75, 0xf0, 0xd6, 0xfb,
+		0x84, 0x95, 0x07, 0x44, 0xca, 0xa5, 0x2a, 0x6c,
+		0xc2, 0x00, 0x58, 0x08, 0x87, 0x9e, 0x0a, 0xd4,
+		0x06, 0xe2, 0x91, 0x5f, 0xb7, 0x1b, 0x11, 0xfa,
+		0x85, 0xfc, 0x7c, 0xf2, 0x0f, 0x6e, 0x3c, 0x8a,
+		0xe1, 0x0f, 0xa0, 0x33, 0x84, 0xce, 0x81, 0x4d,
+		0x32, 0x4d, 0xeb, 0x41, 0xcf, 0x5a, 0x05, 0x60,
+		0x47, 0x6c, 0x2a, 0xc4, 0x17, 0xd5, 0x16, 0x3a,
+		0xe4, 0xe7, 0xab, 0x84, 0x94, 0x22, 0xff, 0x56,
+		0xb0, 0x0c, 0x92, 0x6c, 0x19, 0x11, 0x4c, 0xb3,
+		0xed, 0x58, 0x48, 0x84, 0x2a, 0xe2, 0x19, 0x2a,
+		0xe1, 0xc0, 0x56, 0x82, 0x3c, 0x83, 0xb4, 0x58,
+		0x2d, 0xf0, 0xb5, 0x1e, 0x76, 0x85, 0x51, 0xc2,
+		0xe4, 0x95, 0x27, 0x96, 0xd1, 0x90, 0xc3, 0x17,
+		0x75, 0xa1, 0xbb, 0x46, 0x5f, 0xa6, 0xf2, 0xef,
+		0x71, 0x56, 0x92, 0xc5, 0x8a, 0x85, 0x52, 0xe4,
+		0x63, 0x21, 0x6f, 0x55, 0x85, 0x2b, 0x6b, 0x0d,
+		0xc9, 0x92, 0x77, 0x67, 0xe3, 0xff, 0x2a, 0x2b,
+		0x90, 0x01, 0x3d, 0x74, 0x63, 0x04, 0x61, 0x3c,
+		0x8e, 0xf8, 0xfc, 0x04, 0xdd, 0x21, 0x85, 0x92,
+		0x1e, 0x4d, 0x51, 0x8d, 0xb5, 0x6b, 0xf1, 0xda,
+		0x96, 0xf5, 0x8e, 0x3c, 0x38, 0x5a, 0xac, 0x9b,
+		0xba, 0x0c, 0x84, 0x5d, 0x50, 0x12, 0xc7, 0xc5,
+		0x7a, 0xcb, 0xb1, 0xfa, 0x16, 0x93, 0xdf, 0x98,
+		0xda, 0x3f, 0x49, 0xa3, 0x94, 0x78, 0x70, 0xc7,
+		0x0b, 0xb6, 0x91, 0xa6, 0x16, 0x2e, 0xcf, 0xfd,
+		0x51, 0x6a, 0x5b, 0xad, 0x7a, 0xdd, 0xa9, 0x48,
+		0x48, 0xac, 0xd6, 0x45, 0xbc, 0x23, 0x31, 0x1d,
+		0x86, 0x54, 0x8a, 0x7f, 0x04, 0x97, 0x71, 0x9e,
+		0xbc, 0x2e, 0x6b, 0xd9, 0x33, 0xc8, 0x20, 0xc9,
+		0xe0, 0x25, 0x86, 0x59, 0x15, 0xcf, 0x63, 0xe5,
+		0x99, 0xf1, 0x24, 0xf1, 0xba, 0xc4, 0x15, 0x02,
+		0xe2, 0xdb, 0xfe, 0x4a, 0xf8, 0x3b, 0x91, 0x13,
+		0x8d, 0x03, 0x81, 0x9f, 0xb3, 0x3f, 0x04, 0x03,
+		0x58, 0xc0, 0xef, 0x27, 0x82, 0x14, 0xd2, 0x7f,
+		0x93, 0x70, 0xb7, 0xb2, 0x02, 0x21, 0xb3, 0x07,
+		0x7f, 0x1c, 0xef, 0x88, 0xee, 0x29, 0x7a, 0x0b,
+		0x3d, 0x75, 0x5a, 0x93, 0xfe, 0x7f, 0x14, 0xf7,
+		0x4e, 0x4b, 0x7f, 0x21, 0x02, 0xad, 0xf9, 0x43,
+		0x29, 0x1a, 0xe8, 0x1b, 0xf5, 0x32, 0xb2, 0x96,
+		0xe6, 0xe8, 0x96, 0x20, 0x9b, 0x96, 0x8e, 0x7b,
+		0xfe, 0xd8, 0xc9, 0x9c, 0x65, 0x16, 0xd6, 0x68,
+		0x95, 0xf8, 0x22, 0xe2, 0xae, 0x84, 0x03, 0xfd,
+		0x87, 0xa2, 0x72, 0x79, 0x74, 0x95, 0xfa, 0xe1,
+		0xfe, 0xd0, 0x4e, 0x3d, 0x39, 0x2e, 0x67, 0x55,
+		0x71, 0x6c, 0x89, 0x33, 0x49, 0x0c, 0x1b, 0x46,
+		0x92, 0x31, 0x6f, 0xa6, 0xf0, 0x09, 0xbd, 0x2d,
+		0xe2, 0xca, 0xda, 0x18, 0x33, 0xce, 0x67, 0x37,
+		0xfd, 0x6f, 0xcb, 0x9d, 0xbd, 0x42, 0xbc, 0xb2,
+		0x9c, 0x28, 0xcd, 0x65, 0x3c, 0x61, 0xbc, 0xde,
+		0x9d, 0xe1, 0x2a, 0x3e, 0xbf, 0xee, 0x3c, 0xcb,
+		0xb1, 0x50, 0xa9, 0x2c, 0xbe, 0xb5, 0x43, 0xd0,
+		0xec, 0x29, 0xf9, 0x16, 0x6f, 0x31, 0xd9, 0x9b,
+		0x92, 0xb1, 0x32, 0xae, 0x0f, 0xb6, 0x9d, 0x0e,
+		0x25, 0x7f, 0x89, 0x1f, 0x1d, 0x01, 0x68, 0xab,
+		0x3d, 0xd1, 0x74, 0x5b, 0x4c, 0x38, 0x7f, 0x3d,
+		0x33, 0xa5, 0xa2, 0x9f, 0xda, 0x84, 0xa5, 0x82,
+		0x2d, 0x16, 0x66, 0x46, 0x08, 0x30, 0x14, 0x48,
+		0x5e, 0xca, 0xe3, 0xf4, 0x8c, 0xcb, 0x32, 0xc6,
+		0xf1, 0x43, 0x62, 0xc6, 0xef, 0x16, 0xfa, 0x43,
+		0xae, 0x9c, 0x53, 0xe3, 0x49, 0x45, 0x80, 0xfd,
+		0x1d, 0x8c, 0xa9, 0x6d, 0x77, 0x76, 0xaa, 0x40,
+		0xc4, 0x4e, 0x7b, 0x78, 0x6b, 0xe0, 0x1d, 0xce,
+		0x56, 0x3d, 0xf0, 0x11, 0xfe, 0x4f, 0x6a, 0x6d,
+		0x0f, 0x4f, 0x90, 0x38, 0x92, 0x17, 0xfa, 0x56,
+		0x12, 0xa6, 0xa1, 0x0a, 0xea, 0x2f, 0x50, 0xf9,
+		0x60, 0x66, 0x6c, 0x7d, 0x5a, 0x08, 0x8e, 0x3c,
+		0xf3, 0xf0, 0x33, 0x02, 0x11, 0x02, 0xfe, 0x4c,
+		0x56, 0x2b, 0x9f, 0x0c, 0xbd, 0x65, 0x8a, 0x83,
+		0xde, 0x7c, 0x05, 0x26, 0x93, 0x19, 0xcc, 0xf3,
+		0x71, 0x0e, 0xad, 0x2f, 0xb3, 0xc9, 0x38, 0x50,
+		0x64, 0xd5, 0x4c, 0x60, 0x5f, 0x02, 0x13, 0x34,
+		0xc9, 0x75, 0xc4, 0x60, 0xab, 0x2e, 0x17, 0x7d
+};
+
+static const uint8_t AES_CBC_ciphertext_2048B[] = {
+		0x8b, 0x55, 0xbd, 0xfd, 0x2b, 0x35, 0x76, 0x5c,
+		0xd1, 0x90, 0xd7, 0x6a, 0x63, 0x1e, 0x39, 0x71,
+		0x0d, 0x5c, 0xd8, 0x03, 0x00, 0x75, 0xf1, 0x07,
+		0x03, 0x8d, 0x76, 0xeb, 0x3b, 0x00, 0x1e, 0x33,
+		0x88, 0xfc, 0x8f, 0x08, 0x4d, 0x33, 0xf1, 0x3c,
+		0xee, 0xd0, 0x5d, 0x19, 0x8b, 0x3c, 0x50, 0x86,
+		0xfd, 0x8d, 0x58, 0x21, 0xb4, 0xae, 0x0f, 0x81,
+		0xe9, 0x9f, 0xc9, 0xc0, 0x90, 0xf7, 0x04, 0x6f,
+		0x39, 0x1d, 0x8a, 0x3f, 0x8d, 0x32, 0x23, 0xb5,
+		0x1f, 0xcc, 0x8a, 0x12, 0x2d, 0x46, 0x82, 0x5e,
+		0x6a, 0x34, 0x8c, 0xb1, 0x93, 0x70, 0x3b, 0xde,
+		0x55, 0xaf, 0x16, 0x35, 0x99, 0x84, 0xd5, 0x88,
+		0xc9, 0x54, 0xb1, 0xb2, 0xd3, 0xeb, 0x9e, 0x55,
+		0x9a, 0xa9, 0xa7, 0xf5, 0xda, 0x29, 0xcf, 0xe1,
+		0x98, 0x64, 0x45, 0x77, 0xf2, 0x12, 0x69, 0x8f,
+		0x78, 0xd8, 0x82, 0x41, 0xb2, 0x9f, 0xe2, 0x1c,
+		0x63, 0x9b, 0x24, 0x81, 0x67, 0x95, 0xa2, 0xff,
+		0x26, 0x9d, 0x65, 0x48, 0x61, 0x30, 0x66, 0x41,
+		0x68, 0x84, 0xbb, 0x59, 0x14, 0x8e, 0x9a, 0x62,
+		0xb6, 0xca, 0xda, 0xbe, 0x7c, 0x41, 0x52, 0x6e,
+		0x1b, 0x86, 0xbf, 0x08, 0xeb, 0x37, 0x84, 0x60,
+		0xe4, 0xc4, 0x1e, 0xa8, 0x4c, 0x84, 0x60, 0x2f,
+		0x70, 0x90, 0xf2, 0x26, 0xe7, 0x65, 0x0c, 0xc4,
+		0x58, 0x36, 0x8e, 0x4d, 0xdf, 0xff, 0x9a, 0x39,
+		0x93, 0x01, 0xcf, 0x6f, 0x6d, 0xde, 0xef, 0x79,
+		0xb0, 0xce, 0xe2, 0x98, 0xdb, 0x85, 0x8d, 0x62,
+		0x9d, 0xb9, 0x63, 0xfd, 0xf0, 0x35, 0xb5, 0xa9,
+		0x1b, 0xf9, 0xe5, 0xd4, 0x2e, 0x22, 0x2d, 0xcc,
+		0x42, 0xbf, 0x0e, 0x51, 0xf7, 0x15, 0x07, 0x32,
+		0x75, 0x5b, 0x74, 0xbb, 0x00, 0xef, 0xd4, 0x66,
+		0x8b, 0xad, 0x71, 0x53, 0x94, 0xd7, 0x7d, 0x2c,
+		0x40, 0x3e, 0x69, 0xa0, 0x4c, 0x86, 0x5e, 0x06,
+		0xed, 0xdf, 0x22, 0xe2, 0x24, 0x25, 0x4e, 0x9b,
+		0x5f, 0x49, 0x74, 0xba, 0xed, 0xb1, 0xa6, 0xeb,
+		0xae, 0x3f, 0xc6, 0x9e, 0x0b, 0x29, 0x28, 0x9a,
+		0xb6, 0xb2, 0x74, 0x58, 0xec, 0xa6, 0x4a, 0xed,
+		0xe5, 0x10, 0x00, 0x85, 0xe1, 0x63, 0x41, 0x61,
+		0x30, 0x7c, 0x97, 0xcf, 0x75, 0xcf, 0xb6, 0xf3,
+		0xf7, 0xda, 0x35, 0x3f, 0x85, 0x8c, 0x64, 0xca,
+		0xb7, 0xea, 0x7f, 0xe4, 0xa3, 0x4d, 0x30, 0x84,
+		0x8c, 0x9c, 0x80, 0x5a, 0x50, 0xa5, 0x64, 0xae,
+		0x26, 0xd3, 0xb5, 0x01, 0x73, 0x36, 0x8a, 0x92,
+		0x49, 0xc4, 0x1a, 0x94, 0x81, 0x9d, 0xf5, 0x6c,
+		0x50, 0xe1, 0x58, 0x0b, 0x75, 0xdd, 0x6b, 0x6a,
+		0xca, 0x69, 0xea, 0xc3, 0x33, 0x90, 0x9f, 0x3b,
+		0x65, 0x5d, 0x5e, 0xee, 0x31, 0xb7, 0x32, 0xfd,
+		0x56, 0x83, 0xb6, 0xfb, 0xa8, 0x04, 0xfc, 0x1e,
+		0x11, 0xfb, 0x02, 0x23, 0x53, 0x49, 0x45, 0xb1,
+		0x07, 0xfc, 0xba, 0xe7, 0x5f, 0x5d, 0x2d, 0x7f,
+		0x9e, 0x46, 0xba, 0xe9, 0xb0, 0xdb, 0x32, 0x04,
+		0xa4, 0xa7, 0x98, 0xab, 0x91, 0xcd, 0x02, 0x05,
+		0xf5, 0x74, 0x31, 0x98, 0x83, 0x3d, 0x33, 0x11,
+		0x0e, 0xe3, 0x8d, 0xa8, 0xc9, 0x0e, 0xf3, 0xb9,
+		0x47, 0x67, 0xe9, 0x79, 0x2b, 0x34, 0xcd, 0x9b,
+		0x45, 0x75, 0x29, 0xf0, 0xbf, 0xcc, 0xda, 0x3a,
+		0x91, 0xb2, 0x15, 0x27, 0x7a, 0xe5, 0xf5, 0x6a,
+		0x5e, 0xbe, 0x2c, 0x98, 0xe8, 0x40, 0x96, 0x4f,
+		0x8a, 0x09, 0xfd, 0xf6, 0xb2, 0xe7, 0x45, 0xb6,
+		0x08, 0xc1, 0x69, 0xe1, 0xb3, 0xc4, 0x24, 0x34,
+		0x07, 0x85, 0xd5, 0xa9, 0x78, 0xca, 0xfa, 0x4b,
+		0x01, 0x19, 0x4d, 0x95, 0xdc, 0xa5, 0xc1, 0x9c,
+		0xec, 0x27, 0x5b, 0xa6, 0x54, 0x25, 0xbd, 0xc8,
+		0x0a, 0xb7, 0x11, 0xfb, 0x4e, 0xeb, 0x65, 0x2e,
+		0xe1, 0x08, 0x9c, 0x3a, 0x45, 0x44, 0x33, 0xef,
+		0x0d, 0xb9, 0xff, 0x3e, 0x68, 0x9c, 0x61, 0x2b,
+		0x11, 0xb8, 0x5c, 0x47, 0x0f, 0x94, 0xf2, 0xf8,
+		0x0b, 0xbb, 0x99, 0x18, 0x85, 0xa3, 0xba, 0x44,
+		0xf3, 0x79, 0xb3, 0x63, 0x2c, 0x1f, 0x2a, 0x35,
+		0x3b, 0x23, 0x98, 0xab, 0xf4, 0x16, 0x36, 0xf8,
+		0xde, 0x86, 0xa4, 0xd4, 0x75, 0xff, 0x51, 0xf9,
+		0xeb, 0x42, 0x5f, 0x55, 0xe2, 0xbe, 0xd1, 0x5b,
+		0xb5, 0x38, 0xeb, 0xb4, 0x4d, 0xec, 0xec, 0x99,
+		0xe1, 0x39, 0x43, 0xaa, 0x64, 0xf7, 0xc9, 0xd8,
+		0xf2, 0x9a, 0x71, 0x43, 0x39, 0x17, 0xe8, 0xa8,
+		0xa2, 0xe2, 0xa4, 0x2c, 0x18, 0x11, 0x49, 0xdf,
+		0x18, 0xdd, 0x85, 0x6e, 0x65, 0x96, 0xe2, 0xba,
+		0xa1, 0x0a, 0x2c, 0xca, 0xdc, 0x5f, 0xe4, 0xf4,
+		0x35, 0x03, 0xb2, 0xa9, 0xda, 0xcf, 0xb7, 0x6d,
+		0x65, 0x82, 0x82, 0x67, 0x9d, 0x0e, 0xf3, 0xe8,
+		0x85, 0x6c, 0x69, 0xb8, 0x4c, 0xa6, 0xc6, 0x2e,
+		0x40, 0xb5, 0x54, 0x28, 0x95, 0xe4, 0x57, 0xe0,
+		0x5b, 0xf8, 0xde, 0x59, 0xe0, 0xfd, 0x89, 0x48,
+		0xac, 0x56, 0x13, 0x54, 0xb9, 0x1b, 0xf5, 0x59,
+		0x97, 0xb6, 0xb3, 0xe8, 0xac, 0x2d, 0xfc, 0xd2,
+		0xea, 0x57, 0x96, 0x57, 0xa8, 0x26, 0x97, 0x2c,
+		0x01, 0x89, 0x56, 0xea, 0xec, 0x8c, 0x53, 0xd5,
+		0xd7, 0x9e, 0xc9, 0x98, 0x0b, 0xad, 0x03, 0x75,
+		0xa0, 0x6e, 0x98, 0x8b, 0x97, 0x8d, 0x8d, 0x85,
+		0x7d, 0x74, 0xa7, 0x2d, 0xde, 0x67, 0x0c, 0xcd,
+		0x54, 0xb8, 0x15, 0x7b, 0xeb, 0xf5, 0x84, 0xb9,
+		0x78, 0xab, 0xd8, 0x68, 0x91, 0x1f, 0x6a, 0xa6,
+		0x28, 0x22, 0xf7, 0x00, 0x49, 0x00, 0xbe, 0x41,
+		0x71, 0x0a, 0xf5, 0xe7, 0x9f, 0xb4, 0x11, 0x41,
+		0x3f, 0xcd, 0xa9, 0xa9, 0x01, 0x8b, 0x6a, 0xeb,
+		0x54, 0x4c, 0x58, 0x92, 0x68, 0x02, 0x0e, 0xe9,
+		0xed, 0x65, 0x4c, 0xfb, 0x95, 0x48, 0x58, 0xa2,
+		0xaa, 0x57, 0x69, 0x13, 0x82, 0x0c, 0x2c, 0x4b,
+		0x5d, 0x4e, 0x18, 0x30, 0xef, 0x1c, 0xb1, 0x9d,
+		0x05, 0x05, 0x02, 0x1c, 0x97, 0xc9, 0x48, 0xfe,
+		0x5e, 0x7b, 0x77, 0xa3, 0x1f, 0x2a, 0x81, 0x42,
+		0xf0, 0x4b, 0x85, 0x12, 0x9c, 0x1f, 0x44, 0xb1,
+		0x14, 0x91, 0x92, 0x65, 0x77, 0xb1, 0x87, 0xa2,
+		0xfc, 0xa4, 0xe7, 0xd2, 0x9b, 0xf2, 0x17, 0xf0,
+		0x30, 0x1c, 0x8d, 0x33, 0xbc, 0x25, 0x28, 0x48,
+		0xfd, 0x30, 0x79, 0x0a, 0x99, 0x3e, 0xb4, 0x0f,
+		0x1e, 0xa6, 0x68, 0x76, 0x19, 0x76, 0x29, 0xac,
+		0x5d, 0xb8, 0x1e, 0x42, 0xd6, 0x85, 0x04, 0xbf,
+		0x64, 0x1c, 0x2d, 0x53, 0xe9, 0x92, 0x78, 0xf8,
+		0xc3, 0xda, 0x96, 0x92, 0x10, 0x6f, 0x45, 0x85,
+		0xaf, 0x5e, 0xcc, 0xa8, 0xc0, 0xc6, 0x2e, 0x73,
+		0x51, 0x3f, 0x5e, 0xd7, 0x52, 0x33, 0x71, 0x12,
+		0x6d, 0x85, 0xee, 0xea, 0x85, 0xa8, 0x48, 0x2b,
+		0x40, 0x64, 0x6d, 0x28, 0x73, 0x16, 0xd7, 0x82,
+		0xd9, 0x90, 0xed, 0x1f, 0xa7, 0x5c, 0xb1, 0x5c,
+		0x27, 0xb9, 0x67, 0x8b, 0xb4, 0x17, 0x13, 0x83,
+		0x5f, 0x09, 0x72, 0x0a, 0xd7, 0xa0, 0xec, 0x81,
+		0x59, 0x19, 0xb9, 0xa6, 0x5a, 0x37, 0x34, 0x14,
+		0x47, 0xf6, 0xe7, 0x6c, 0xd2, 0x09, 0x10, 0xe7,
+		0xdd, 0xbb, 0x02, 0xd1, 0x28, 0xfa, 0x01, 0x2c,
+		0x93, 0x64, 0x2e, 0x1b, 0x4c, 0x02, 0x52, 0xcb,
+		0x07, 0xa1, 0xb6, 0x46, 0x02, 0x80, 0xd9, 0x8f,
+		0x5c, 0x62, 0xbe, 0x78, 0x9e, 0x75, 0xc4, 0x97,
+		0x91, 0x39, 0x12, 0x65, 0xb9, 0x3b, 0xc2, 0xd1,
+		0xaf, 0xf2, 0x1f, 0x4e, 0x4d, 0xd1, 0xf0, 0x9f,
+		0xb7, 0x12, 0xfd, 0xe8, 0x75, 0x18, 0xc0, 0x9d,
+		0x8c, 0x70, 0xff, 0x77, 0x05, 0xb6, 0x1a, 0x1f,
+		0x96, 0x48, 0xf6, 0xfe, 0xd5, 0x5d, 0x98, 0xa5,
+		0x72, 0x1c, 0x84, 0x76, 0x3e, 0xb8, 0x87, 0x37,
+		0xdd, 0xd4, 0x3a, 0x45, 0xdd, 0x09, 0xd8, 0xe7,
+		0x09, 0x2f, 0x3e, 0x33, 0x9e, 0x7b, 0x8c, 0xe4,
+		0x85, 0x12, 0x4e, 0xf8, 0x06, 0xb7, 0xb1, 0x85,
+		0x24, 0x96, 0xd8, 0xfe, 0x87, 0x92, 0x81, 0xb1,
+		0xa3, 0x38, 0xb9, 0x56, 0xe1, 0xf6, 0x36, 0x41,
+		0xbb, 0xd6, 0x56, 0x69, 0x94, 0x57, 0xb3, 0xa4,
+		0xca, 0xa4, 0xe1, 0x02, 0x3b, 0x96, 0x71, 0xe0,
+		0xb2, 0x2f, 0x85, 0x48, 0x1b, 0x4a, 0x41, 0x80,
+		0x4b, 0x9c, 0xe0, 0xc9, 0x39, 0xb8, 0xb1, 0xca,
+		0x64, 0x77, 0x46, 0x58, 0xe6, 0x84, 0xd5, 0x2b,
+		0x65, 0xce, 0xe9, 0x09, 0xa3, 0xaa, 0xfb, 0x83,
+		0xa9, 0x28, 0x68, 0xfd, 0xcd, 0xfd, 0x76, 0x83,
+		0xe1, 0x20, 0x22, 0x77, 0x3a, 0xa3, 0xb2, 0x93,
+		0x14, 0x91, 0xfc, 0xe2, 0x17, 0x63, 0x2b, 0xa6,
+		0x29, 0x38, 0x7b, 0x9b, 0x8b, 0x15, 0x77, 0xd6,
+		0xaa, 0x92, 0x51, 0x53, 0x50, 0xff, 0xa0, 0x35,
+		0xa0, 0x59, 0x7d, 0xf0, 0x11, 0x23, 0x49, 0xdf,
+		0x5a, 0x21, 0xc2, 0xfe, 0x35, 0xa0, 0x1d, 0xe2,
+		0xae, 0xa2, 0x8a, 0x61, 0x5b, 0xf7, 0xf1, 0x1c,
+		0x1c, 0xec, 0xc4, 0xf6, 0xdc, 0xaa, 0xc8, 0xc2,
+		0xe5, 0xa1, 0x2e, 0x14, 0xe5, 0xc6, 0xc9, 0x73,
+		0x03, 0x78, 0xeb, 0xed, 0xe0, 0x3e, 0xc5, 0xf4,
+		0xf1, 0x50, 0xb2, 0x01, 0x91, 0x96, 0xf5, 0xbb,
+		0xe1, 0x32, 0xcd, 0xa8, 0x66, 0xbf, 0x73, 0x85,
+		0x94, 0xd6, 0x7e, 0x68, 0xc5, 0xe4, 0xed, 0xd5,
+		0xe3, 0x67, 0x4c, 0xa5, 0xb3, 0x1f, 0xdf, 0xf8,
+		0xb3, 0x73, 0x5a, 0xac, 0xeb, 0x46, 0x16, 0x24,
+		0xab, 0xca, 0xa4, 0xdd, 0x87, 0x0e, 0x24, 0x83,
+		0x32, 0x04, 0x4c, 0xd8, 0xda, 0x7d, 0xdc, 0xe3,
+		0x01, 0x93, 0xf3, 0xc1, 0x5b, 0xbd, 0xc3, 0x1d,
+		0x40, 0x62, 0xde, 0x94, 0x03, 0x85, 0x91, 0x2a,
+		0xa0, 0x25, 0x10, 0xd3, 0x32, 0x9f, 0x93, 0x00,
+		0xa7, 0x8a, 0xfa, 0x77, 0x7c, 0xaf, 0x4d, 0xc8,
+		0x7a, 0xf3, 0x16, 0x2b, 0xba, 0xeb, 0x74, 0x51,
+		0xb8, 0xdd, 0x32, 0xad, 0x68, 0x7d, 0xdd, 0xca,
+		0x60, 0x98, 0xc9, 0x9b, 0xb6, 0x5d, 0x4d, 0x3a,
+		0x66, 0x8a, 0xbe, 0x05, 0xf9, 0x0c, 0xc5, 0xba,
+		0x52, 0x82, 0x09, 0x1f, 0x5a, 0x66, 0x89, 0x69,
+		0xa3, 0x5d, 0x93, 0x50, 0x7d, 0x44, 0xc3, 0x2a,
+		0xb8, 0xab, 0xec, 0xa6, 0x5a, 0xae, 0x4a, 0x6a,
+		0xcd, 0xfd, 0xb6, 0xff, 0x3d, 0x98, 0x05, 0xd9,
+		0x5b, 0x29, 0xc4, 0x6f, 0xe0, 0x76, 0xe2, 0x3f,
+		0xec, 0xd7, 0xa4, 0x91, 0x63, 0xf5, 0x4e, 0x4b,
+		0xab, 0x20, 0x8c, 0x3a, 0x41, 0xed, 0x8b, 0x4b,
+		0xb9, 0x01, 0x21, 0xc0, 0x6d, 0xfd, 0x70, 0x5b,
+		0x20, 0x92, 0x41, 0x89, 0x74, 0xb7, 0xe9, 0x8b,
+		0xfc, 0x6d, 0x17, 0x3f, 0x7f, 0x89, 0x3d, 0x6b,
+		0x8f, 0xbc, 0xd2, 0x57, 0xe9, 0xc9, 0x6e, 0xa7,
+		0x19, 0x26, 0x18, 0xad, 0xef, 0xb5, 0x87, 0xbf,
+		0xb8, 0xa8, 0xd6, 0x7d, 0xdd, 0x5f, 0x94, 0x54,
+		0x09, 0x92, 0x2b, 0xf5, 0x04, 0xf7, 0x36, 0x69,
+		0x8e, 0xf4, 0xdc, 0x1d, 0x6e, 0x55, 0xbb, 0xe9,
+		0x13, 0x05, 0x83, 0x35, 0x9c, 0xed, 0xcf, 0x8c,
+		0x26, 0x8c, 0x7b, 0xc7, 0x0b, 0xba, 0xfd, 0xe2,
+		0x84, 0x5c, 0x2a, 0x79, 0x43, 0x99, 0xb2, 0xc3,
+		0x82, 0x87, 0xc8, 0xcd, 0x37, 0x6d, 0xa1, 0x2b,
+		0x39, 0xb2, 0x38, 0x99, 0xd9, 0xfc, 0x02, 0x15,
+		0x55, 0x21, 0x62, 0x59, 0xeb, 0x00, 0x86, 0x08,
+		0x20, 0xbe, 0x1a, 0x62, 0x4d, 0x7e, 0xdf, 0x68,
+		0x73, 0x5b, 0x5f, 0xaf, 0x84, 0x96, 0x2e, 0x1f,
+		0x6b, 0x03, 0xc9, 0xa6, 0x75, 0x18, 0xe9, 0xd4,
+		0xbd, 0xc8, 0xec, 0x9a, 0x5a, 0xb3, 0x99, 0xab,
+		0x5f, 0x7c, 0x08, 0x7f, 0x69, 0x4d, 0x52, 0xa2,
+		0x30, 0x17, 0x3b, 0x16, 0x15, 0x1b, 0x11, 0x62,
+		0x3e, 0x80, 0x4b, 0x85, 0x7c, 0x9c, 0xd1, 0x3a,
+		0x13, 0x01, 0x5e, 0x45, 0xf1, 0xc8, 0x5f, 0xcd,
+		0x0e, 0x21, 0xf5, 0x82, 0xd4, 0x7b, 0x5c, 0x45,
+		0x27, 0x6b, 0xef, 0xfe, 0xb8, 0xc0, 0x6f, 0xdc,
+		0x60, 0x7b, 0xe4, 0xd5, 0x75, 0x71, 0xe6, 0xe8,
+		0x7d, 0x6b, 0x6d, 0x80, 0xaf, 0x76, 0x41, 0x58,
+		0xb7, 0xac, 0xb7, 0x13, 0x2f, 0x81, 0xcc, 0xf9,
+		0x19, 0x97, 0xe8, 0xee, 0x40, 0x91, 0xfc, 0x89,
+		0x13, 0x1e, 0x67, 0x9a, 0xdb, 0x8f, 0x8f, 0xc7,
+		0x4a, 0xc9, 0xaf, 0x2f, 0x67, 0x01, 0x3c, 0xb8,
+		0xa8, 0x3e, 0x78, 0x93, 0x1b, 0xdf, 0xbb, 0x34,
+		0x0b, 0x1a, 0xfa, 0xc2, 0x2d, 0xc5, 0x1c, 0xec,
+		0x97, 0x4f, 0x48, 0x41, 0x15, 0x0e, 0x75, 0xed,
+		0x66, 0x8c, 0x17, 0x7f, 0xb1, 0x48, 0x13, 0xc1,
+		0xfb, 0x60, 0x06, 0xf9, 0x72, 0x41, 0x3e, 0xcf,
+		0x6e, 0xb6, 0xc8, 0xeb, 0x4b, 0x5a, 0xd2, 0x0c,
+		0x28, 0xda, 0x02, 0x7a, 0x46, 0x21, 0x42, 0xb5,
+		0x34, 0xda, 0xcb, 0x5e, 0xbd, 0x66, 0x5c, 0xca,
+		0xff, 0x52, 0x43, 0x89, 0xf9, 0x10, 0x9a, 0x9e,
+		0x9b, 0xe3, 0xb0, 0x51, 0xe9, 0xf3, 0x0a, 0x35,
+		0x77, 0x54, 0xcc, 0xac, 0xa6, 0xf1, 0x2e, 0x36,
+		0x89, 0xac, 0xc5, 0xc6, 0x62, 0x5a, 0xc0, 0x6d,
+		0xc4, 0xe1, 0xf7, 0x64, 0x30, 0xff, 0x11, 0x40,
+		0x13, 0x89, 0xd8, 0xd7, 0x73, 0x3f, 0x93, 0x08,
+		0x68, 0xab, 0x66, 0x09, 0x1a, 0xea, 0x78, 0xc9,
+		0x52, 0xf2, 0xfd, 0x93, 0x1b, 0x94, 0xbe, 0x5c,
+		0xe5, 0x00, 0x6e, 0x00, 0xb9, 0xea, 0x27, 0xaa,
+		0xb3, 0xee, 0xe3, 0xc8, 0x6a, 0xb0, 0xc1, 0x8e,
+		0x9b, 0x54, 0x40, 0x10, 0x96, 0x06, 0xe8, 0xb3,
+		0xf5, 0x55, 0x77, 0xd7, 0x5c, 0x94, 0xc1, 0x74,
+		0xf3, 0x07, 0x64, 0xac, 0x1c, 0xde, 0xc7, 0x22,
+		0xb0, 0xbf, 0x2a, 0x5a, 0xc0, 0x8f, 0x8a, 0x83,
+		0x50, 0xc2, 0x5e, 0x97, 0xa0, 0xbe, 0x49, 0x7e,
+		0x47, 0xaf, 0xa7, 0x20, 0x02, 0x35, 0xa4, 0x57,
+		0xd9, 0x26, 0x63, 0xdb, 0xf1, 0x34, 0x42, 0x89,
+		0x36, 0xd1, 0x77, 0x6f, 0xb1, 0xea, 0x79, 0x7e,
+		0x95, 0x10, 0x5a, 0xee, 0xa3, 0xae, 0x6f, 0xba,
+		0xa9, 0xef, 0x5a, 0x7e, 0x34, 0x03, 0x04, 0x07,
+		0x92, 0xd6, 0x07, 0x79, 0xaa, 0x14, 0x90, 0x97,
+		0x05, 0x4d, 0xa6, 0x27, 0x10, 0x5c, 0x25, 0x24,
+		0xcb, 0xcc, 0xf6, 0x77, 0x9e, 0x43, 0x23, 0xd4,
+		0x98, 0xef, 0x22, 0xa8, 0xad, 0xf2, 0x26, 0x08,
+		0x59, 0x69, 0xa4, 0xc3, 0x97, 0xe0, 0x5c, 0x6f,
+		0xeb, 0x3d, 0xd4, 0x62, 0x6e, 0x80, 0x61, 0x02,
+		0xf4, 0xfc, 0x94, 0x79, 0xbb, 0x4e, 0x6d, 0xd7,
+		0x30, 0x5b, 0x10, 0x11, 0x5a, 0x3d, 0xa7, 0x50,
+		0x1d, 0x9a, 0x13, 0x5f, 0x4f, 0xa8, 0xa7, 0xb6,
+		0x39, 0xc7, 0xea, 0xe6, 0x19, 0x61, 0x69, 0xc7,
+		0x9a, 0x3a, 0xeb, 0x9d, 0xdc, 0xf7, 0x06, 0x37,
+		0xbd, 0xac, 0xe3, 0x18, 0xff, 0xfe, 0x11, 0xdb,
+		0x67, 0x42, 0xb4, 0xea, 0xa8, 0xbd, 0xb0, 0x76,
+		0xd2, 0x74, 0x32, 0xc2, 0xa4, 0x9c, 0xe7, 0x60,
+		0xc5, 0x30, 0x9a, 0x57, 0x66, 0xcd, 0x0f, 0x02,
+		0x4c, 0xea, 0xe9, 0xd3, 0x2a, 0x5c, 0x09, 0xc2,
+		0xff, 0x6a, 0xde, 0x5d, 0xb7, 0xe9, 0x75, 0x6b,
+		0x29, 0x94, 0xd6, 0xf7, 0xc3, 0xdf, 0xfb, 0x70,
+		0xec, 0xb5, 0x8c, 0xb0, 0x78, 0x7a, 0xee, 0x52,
+		0x5f, 0x8c, 0xae, 0x85, 0xe5, 0x98, 0xa2, 0xb7,
+		0x7c, 0x02, 0x2a, 0xcc, 0x9e, 0xde, 0x99, 0x5f,
+		0x84, 0x20, 0xbb, 0xdc, 0xf2, 0xd2, 0x13, 0x46,
+		0x3c, 0xd6, 0x4d, 0xe7, 0x50, 0xef, 0x55, 0xc3,
+		0x96, 0x9f, 0xec, 0x6c, 0xd8, 0xe2, 0xea, 0xed,
+		0xc7, 0x33, 0xc9, 0xb3, 0x1c, 0x4f, 0x1d, 0x83,
+		0x1d, 0xe4, 0xdd, 0xb2, 0x24, 0x8f, 0xf9, 0xf5
+};
+
+
+static const uint8_t HMAC_SHA256_ciphertext_64B_digest[] = {
+		0xc5, 0x6d, 0x4f, 0x29, 0xf4, 0xd2, 0xcc, 0x87,
+		0x3c, 0x81, 0x02, 0x6d, 0x38, 0x7a, 0x67, 0x3e,
+		0x95, 0x9c, 0x5c, 0x8f, 0xda, 0x5c, 0x06, 0xe0,
+		0x65, 0xf1, 0x6c, 0x51, 0x52, 0x49, 0x3e, 0x5f
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_128B_digest[] = {
+		0x76, 0x64, 0x2d, 0x69, 0x71, 0x5d, 0x6a, 0xd8,
+		0x9f, 0x74, 0x11, 0x2f, 0x58, 0xe0, 0x4a, 0x2f,
+		0x6c, 0x88, 0x5e, 0x4d, 0x9c, 0x79, 0x83, 0x1c,
+		0x8a, 0x14, 0xd0, 0x07, 0xfb, 0xbf, 0x6c, 0x8f
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_256B_digest[] = {
+		0x05, 0xa7, 0x44, 0xcd, 0x91, 0x8c, 0x95, 0xcf,
+		0x7b, 0x8f, 0xd3, 0x90, 0x86, 0x7e, 0x7b, 0xb9,
+		0x05, 0xd6, 0x6e, 0x7a, 0xc1, 0x7b, 0x26, 0xff,
+		0xd3, 0x4b, 0xe0, 0x22, 0x8b, 0xa8, 0x47, 0x52
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_512B_digest[] = {
+		0x08, 0xb7, 0x29, 0x54, 0x18, 0x7e, 0x97, 0x49,
+		0xc6, 0x7c, 0x9f, 0x94, 0xa5, 0x4f, 0xa2, 0x25,
+		0xd0, 0xe2, 0x30, 0x7b, 0xad, 0x93, 0xc9, 0x12,
+		0x0f, 0xf0, 0xf0, 0x71, 0xc2, 0xf6, 0x53, 0x8f
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_768B_digest[] = {
+		0xe4, 0x3e, 0x73, 0x93, 0x03, 0xaf, 0x6f, 0x9c,
+		0xca, 0x57, 0x3b, 0x4a, 0x6e, 0x83, 0x58, 0xf5,
+		0x66, 0xc2, 0xb4, 0xa7, 0xe0, 0xee, 0x63, 0x6b,
+		0x48, 0xb7, 0x50, 0x45, 0x69, 0xdf, 0x5c, 0x5b
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_1024B_digest[] = {
+		0x03, 0xb9, 0x96, 0x26, 0xdc, 0x1c, 0xab, 0xe2,
+		0xf5, 0x70, 0x55, 0x15, 0x67, 0x6e, 0x48, 0x11,
+		0xe7, 0x67, 0xea, 0xfa, 0x5c, 0x6b, 0x28, 0x22,
+		0xc9, 0x0e, 0x67, 0x04, 0xb3, 0x71, 0x7f, 0x88
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_1280B_digest[] = {
+		0x01, 0x91, 0xb8, 0x78, 0xd3, 0x21, 0x74, 0xa5,
+		0x1c, 0x8b, 0xd4, 0xd2, 0xc0, 0x49, 0xd7, 0xd2,
+		0x16, 0x46, 0x66, 0x85, 0x50, 0x6d, 0x08, 0xcc,
+		0xc7, 0x0a, 0xa3, 0x71, 0xcc, 0xde, 0xee, 0xdc
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_1536B_digest[] = {
+		0xf2, 0xe5, 0xe9, 0x57, 0x53, 0xd7, 0x69, 0x28,
+		0x7b, 0x69, 0xb5, 0x49, 0xa3, 0x31, 0x56, 0x5f,
+		0xa4, 0xe9, 0x87, 0x26, 0x2f, 0xe0, 0x2d, 0xd6,
+		0x08, 0x44, 0x01, 0x71, 0x0c, 0x93, 0x85, 0x84
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_1792B_digest[] = {
+		0xf6, 0x57, 0x62, 0x01, 0xbf, 0x2d, 0xea, 0x4a,
+		0xef, 0x43, 0x85, 0x60, 0x18, 0xdf, 0x8b, 0xb4,
+		0x60, 0xc0, 0xfd, 0x2f, 0x90, 0x15, 0xe6, 0x91,
+		0x56, 0x61, 0x68, 0x7f, 0x5e, 0x92, 0xa8, 0xdd
+};
+
+static const uint8_t HMAC_SHA256_ciphertext_2048B_digest[] = {
+		0x81, 0x1a, 0x29, 0xbc, 0x6b, 0x9f, 0xbb, 0xb8,
+		0xef, 0x71, 0x7b, 0x1f, 0x6f, 0xd4, 0x7e, 0x68,
+		0x3a, 0x9c, 0xb9, 0x98, 0x22, 0x81, 0xfa, 0x95,
+		0xee, 0xbc, 0x7f, 0x23, 0x29, 0x88, 0x76, 0xb8
+};
+
+struct crypto_data_params {
+	const char *name;
+	uint16_t length;
+	const char *plaintext;
+	struct crypto_expected_output {
+		const uint8_t *ciphertext;
+		const uint8_t *digest;
+	} expected;
+};
+
+#define MAX_PACKET_SIZE_INDEX	10
+
+struct crypto_data_params aes_cbc_hmac_sha256_output[MAX_PACKET_SIZE_INDEX] = {
+	{ "64B", 64, &plaintext_quote[sizeof(plaintext_quote) - 1 - 64],
+		{ AES_CBC_ciphertext_64B, HMAC_SHA256_ciphertext_64B_digest } },
+	{ "128B", 128, &plaintext_quote[sizeof(plaintext_quote) - 1 - 128],
+		{ AES_CBC_ciphertext_128B, HMAC_SHA256_ciphertext_128B_digest } },
+	{ "256B", 256, &plaintext_quote[sizeof(plaintext_quote) - 1 - 256],
+		{ AES_CBC_ciphertext_256B, HMAC_SHA256_ciphertext_256B_digest } },
+	{ "512B", 512, &plaintext_quote[sizeof(plaintext_quote) - 1 - 512],
+		{ AES_CBC_ciphertext_512B, HMAC_SHA256_ciphertext_512B_digest } },
+	{ "768B", 768, &plaintext_quote[sizeof(plaintext_quote) - 1 - 768],
+		{ AES_CBC_ciphertext_768B, HMAC_SHA256_ciphertext_768B_digest } },
+	{ "1024B", 1024, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1024],
+		{ AES_CBC_ciphertext_1024B, HMAC_SHA256_ciphertext_1024B_digest } },
+	{ "1280B", 1280, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1280],
+		{ AES_CBC_ciphertext_1280B, HMAC_SHA256_ciphertext_1280B_digest } },
+	{ "1536B", 1536, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1536],
+		{ AES_CBC_ciphertext_1536B, HMAC_SHA256_ciphertext_1536B_digest } },
+	{ "1792B", 1792, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1792],
+		{ AES_CBC_ciphertext_1792B, HMAC_SHA256_ciphertext_1792B_digest } },
+	{ "2048B", 2048, &plaintext_quote[sizeof(plaintext_quote) - 1 - 2048],
+		{ AES_CBC_ciphertext_2048B, HMAC_SHA256_ciphertext_2048B_digest } }
+};
+
+
+static int
+test_perf_crypto_qp_vary_burst_size(uint16_t dev_num)
+{
+	uint32_t num_to_submit = 2048, max_outstanding_reqs = 512;
+	struct rte_mbuf *rx_mbufs[num_to_submit], *tx_mbufs[num_to_submit];
+	uint64_t failed_polls, retries, start_cycles, end_cycles, total_cycles = 0;
+	uint32_t burst_sent, burst_received;
+	uint32_t b, burst_size, num_sent, num_received;
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+	struct crypto_data_params *data_params = aes_cbc_hmac_sha256_output;
+
+	if (rte_cryptodev_count() == 0) {
+		printf("\nNo crypto devices available. Is kernel driver loaded?\n");
+		return TEST_FAILED;
+	}
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = &ut_params->auth_xform;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_IV_LENGTH_AES_CBC;
+
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = NULL;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA256_HMAC;
+	ut_params->auth_xform.auth.key.data = hmac_sha256_key;
+	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->dev_id,
+		&ut_params->cipher_xform);
+
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	/* Generate Crypto op data structure(s) */
+	for (b = 0; b < num_to_submit ; b++) {
+		tx_mbufs[b] = setup_test_string(ts_params->mbuf_mp,
+				(const char *)data_params[0].expected.ciphertext,
+				data_params[0].length, 0);
+		TEST_ASSERT_NOT_NULL(tx_mbufs[b], "Failed to allocate tx_buf");
+
+		ut_params->digest = (uint8_t *)rte_pktmbuf_append(tx_mbufs[b],
+				DIGEST_BYTE_LENGTH_SHA256);
+		TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
+
+		rte_memcpy(ut_params->digest, data_params[0].expected.digest,
+			DIGEST_BYTE_LENGTH_SHA256);
+
+		struct rte_mbuf_offload *ol = rte_pktmbuf_offload_alloc(
+				ts_params->mbuf_ol_pool, RTE_PKTMBUF_OL_CRYPTO);
+		TEST_ASSERT_NOT_NULL(ol, "Failed to allocate pktmbuf offload");
+
+		struct rte_crypto_op *cop = &ol->op.crypto;
+
+		rte_crypto_op_attach_session(cop, ut_params->sess);
+
+		cop->digest.data = ut_params->digest;
+		cop->digest.phys_addr = rte_pktmbuf_mtophys_offset(tx_mbufs[b],
+				data_params[0].length);
+		cop->digest.length = DIGEST_BYTE_LENGTH_SHA256;
+
+		cop->iv.data = (uint8_t *)rte_pktmbuf_prepend(tx_mbufs[b],
+				CIPHER_IV_LENGTH_AES_CBC);
+		cop->iv.phys_addr = rte_pktmbuf_mtophys(tx_mbufs[b]);
+		cop->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+		rte_memcpy(cop->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);
+
+		cop->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+		cop->data.to_cipher.length = data_params[0].length;
+
+		cop->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+		cop->data.to_hash.length = data_params[0].length;
+
+		rte_pktmbuf_offload_attach(tx_mbufs[b], ol);
+	}
+
+	printf("\nTest to measure the IA cycle cost using AES128_CBC_SHA256_HMAC "
+			"algorithm with a constant request size of %u.",
+			data_params[0].length);
+	printf("\nThis test will keep retries at 0 and only measure IA cycle "
+			"cost for each request.");
+	printf("\nDev No\tQP No\tNum Sent\tNum Received\tTx/Rx burst");
+	printf("\tRetries (Device Busy)\tAverage IA cycle cost "
+			"(assuming 0 retries)");
+	for (b = 2; b <= 128 ; b *= 2) {
+		num_sent = 0;
+		num_received = 0;
+		retries = 0;
+		failed_polls = 0;
+		burst_size = b;
+		total_cycles = 0;
+		while (num_sent < num_to_submit) {
+			start_cycles = rte_rdtsc_precise();
+			burst_sent = rte_cryptodev_enqueue_burst(dev_num, 0,
+					&tx_mbufs[num_sent],
+					((num_to_submit-num_sent) < burst_size) ?
+					num_to_submit-num_sent : burst_size);
+			if (burst_sent == 0)
+				retries++;
+			else
+				num_sent += burst_sent;
+			end_cycles = rte_rdtsc_precise();
+			total_cycles += (end_cycles - start_cycles);
+			/*
+			 * Wait until requests have been sent.
+			 */
+			rte_delay_ms(1);
+
+			start_cycles = rte_rdtsc_precise();
+			burst_received = rte_cryptodev_dequeue_burst(dev_num,
+						0, rx_mbufs, burst_size);
+			if (burst_received == 0)
+				failed_polls++;
+			else
+				num_received += burst_received;
+			end_cycles = rte_rdtsc_precise();
+			total_cycles += end_cycles - start_cycles;
+		}
+		while (num_received != num_to_submit) {
+			if (gbl_cryptodev_preftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD)
+				rte_cryptodev_enqueue_burst(dev_num, 0, NULL, 0);
+
+			burst_received = rte_cryptodev_dequeue_burst(dev_num,
+						0, rx_mbufs, burst_size);
+			if (burst_received == 0)
+				failed_polls++;
+			else
+				num_received += burst_received;
+		}
+
+		printf("\n%u\t%u\t\%u\t\t%u\t\t%u", dev_num, 0,
+					num_sent, num_received, burst_size);
+		printf("\t\t%"PRIu64, retries);
+		printf("\t\t\t%"PRIu64, total_cycles/num_received);
+	}
+	printf("\n");
+
+	for (b = 0; b < max_outstanding_reqs ; b++) {
+		struct rte_mbuf_offload *ol = tx_mbufs[b]->offload_ops;
+
+		if (ol) {
+			do {
+				rte_pktmbuf_offload_free(ol);
+				ol = ol->next;
+			} while (ol != NULL);
+		}
+		rte_pktmbuf_free(tx_mbufs[b]);
+	}
+	return TEST_SUCCESS;
+}
+
+static int
+test_perf_AES_CBC_HMAC_SHA256_encrypt_digest_vary_req_size(uint16_t dev_num)
+{
+	uint16_t index;
+	uint32_t burst_sent, burst_received;
+	uint32_t b, num_sent, num_received, throughput;
+	uint64_t failed_polls, retries, start_cycles, end_cycles;
+	const uint64_t mhz = rte_get_tsc_hz()/1000000;
+	double mmps;
+	struct rte_mbuf *rx_mbufs[DEFAULT_BURST_SIZE], *tx_mbufs[DEFAULT_BURST_SIZE];
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+	struct crypto_data_params *data_params = aes_cbc_hmac_sha256_output;
+
+	if (rte_cryptodev_count() == 0) {
+		printf("\nNo crypto devices available. Is kernel driver loaded?\n");
+		return TEST_FAILED;
+	}
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_XFORM_CIPHER;
+	ut_params->cipher_xform.next = &ut_params->auth_xform;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+	ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
+	ut_params->cipher_xform.cipher.key.length = CIPHER_IV_LENGTH_AES_CBC;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_XFORM_AUTH;
+	ut_params->auth_xform.next = NULL;
+
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA256_HMAC;
+	ut_params->auth_xform.auth.key.data = hmac_sha256_key;
+	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;
+	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_session_create(ts_params->dev_id,
+			&ut_params->cipher_xform);
+
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	printf("\nThroughput test which will continually attempt to send "
+			"AES128_CBC_SHA256_HMAC requests with a constant burst "
+			"size of %u while varying payload sizes", DEFAULT_BURST_SIZE);
+	printf("\nDev No\tQP No\tReq Size(B)\tNum Sent\tNum Received\t"
+			"Mrps\tThoughput(Mbps)");
+	printf("\tRetries (Attempted a burst, but the device was busy)");
+	for (index = 0; index < MAX_PACKET_SIZE_INDEX; index++) {
+		num_sent = 0;
+		num_received = 0;
+		retries = 0;
+		failed_polls = 0;
+
+		/* Generate Crypto op data structure(s) */
+		for (b = 0; b < DEFAULT_BURST_SIZE ; b++) {
+			tx_mbufs[b] = setup_test_string(ts_params->mbuf_mp,
+					data_params[index].plaintext,
+					data_params[index].length,
+					0);
+
+			ut_params->digest = (uint8_t *)rte_pktmbuf_append(
+				tx_mbufs[b], DIGEST_BYTE_LENGTH_SHA256);
+			TEST_ASSERT_NOT_NULL(ut_params->digest,	"no room to append digest");
+
+			rte_memcpy(ut_params->digest, data_params[index].expected.digest,
+			DIGEST_BYTE_LENGTH_SHA256);
+
+			struct rte_mbuf_offload *ol = rte_pktmbuf_offload_alloc(
+						ts_params->mbuf_ol_pool,
+						RTE_PKTMBUF_OL_CRYPTO);
+			TEST_ASSERT_NOT_NULL(ol, "Failed to allocate pktmbuf offload");
+
+			struct rte_crypto_op *cop = &ol->op.crypto;
+
+			rte_crypto_op_attach_session(cop, ut_params->sess);
+
+			cop->digest.data = ut_params->digest;
+			cop->digest.phys_addr = rte_pktmbuf_mtophys_offset(
+				tx_mbufs[b], data_params[index].length);
+			cop->digest.length = DIGEST_BYTE_LENGTH_SHA256;
+
+			cop->iv.data = (uint8_t *)rte_pktmbuf_prepend(tx_mbufs[b],
+					CIPHER_IV_LENGTH_AES_CBC);
+			cop->iv.phys_addr = rte_pktmbuf_mtophys(tx_mbufs[b]);
+			cop->iv.length = CIPHER_IV_LENGTH_AES_CBC;
+
+			rte_memcpy(cop->iv.data, aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);
+
+			cop->data.to_cipher.offset = CIPHER_IV_LENGTH_AES_CBC;
+			cop->data.to_cipher.length = data_params[index].length;
+
+			cop->data.to_hash.offset = CIPHER_IV_LENGTH_AES_CBC;
+			cop->data.to_hash.length = data_params[index].length;
+
+			rte_pktmbuf_offload_attach(tx_mbufs[b], ol);
+		}
+		start_cycles = rte_rdtsc_precise();
+		while (num_sent < DEFAULT_NUM_REQS_TO_SUBMIT) {
+			burst_sent = rte_cryptodev_enqueue_burst(dev_num, 0, tx_mbufs,
+				((DEFAULT_NUM_REQS_TO_SUBMIT-num_sent) < DEFAULT_BURST_SIZE) ?
+				DEFAULT_NUM_REQS_TO_SUBMIT-num_sent : DEFAULT_BURST_SIZE);
+			if (burst_sent == 0)
+				retries++;
+			else
+				num_sent += burst_sent;
+
+			burst_received = rte_cryptodev_dequeue_burst(dev_num,
+					0, rx_mbufs, DEFAULT_BURST_SIZE);
+			if (burst_received == 0)
+				failed_polls++;
+			else
+				num_received += burst_received;
+		}
+		while (num_received != DEFAULT_NUM_REQS_TO_SUBMIT) {
+			if (gbl_cryptodev_preftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD)
+				rte_cryptodev_enqueue_burst(dev_num, 0, NULL, 0);
+
+			burst_received = rte_cryptodev_dequeue_burst(dev_num, 0,
+						rx_mbufs, DEFAULT_BURST_SIZE);
+			if (burst_received == 0)
+				failed_polls++;
+			else
+				num_received += burst_received;
+		}
+		end_cycles = rte_rdtsc_precise();
+		mmps = (double)num_received*mhz/(end_cycles - start_cycles);
+		throughput = mmps*data_params[index].length*8;
+		printf("\n%u\t%u\t%u\t\t%u\t%u", dev_num, 0,
+				data_params[index].length, num_sent, num_received);
+		printf("\t%.2f\t%u", mmps, throughput);
+		printf("\t\t%"PRIu64, retries);
+		for (b = 0; b < DEFAULT_BURST_SIZE ; b++) {
+			struct rte_mbuf_offload *ol = tx_mbufs[b]->offload_ops;
+
+			if (ol) {
+				do {
+					rte_pktmbuf_offload_free(ol);
+					ol = ol->next;
+				} while (ol != NULL);
+			}
+			rte_pktmbuf_free(tx_mbufs[b]);
+		}
+	}
+	printf("\n");
+	return TEST_SUCCESS;
+}
+
+static int
+test_perf_encrypt_digest_vary_req_size(void)
+{
+	return test_perf_AES_CBC_HMAC_SHA256_encrypt_digest_vary_req_size(
+			testsuite_params.dev_id);
+}
+
+static int
+test_perf_vary_burst_size(void)
+{
+	return test_perf_crypto_qp_vary_burst_size(testsuite_params.dev_id);
+}
+
+
+static struct unit_test_suite cryptodev_testsuite  = {
+	.suite_name = "Crypto Device Unit Test Suite",
+	.setup = testsuite_setup,
+	.teardown = testsuite_teardown,
+	.unit_test_cases = {
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_perf_encrypt_digest_vary_req_size),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+				test_perf_vary_burst_size),
+		TEST_CASES_END() /**< NULL terminate unit test array */
+	}
+};
+
+static int
+perftest_aesni_mb_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
+{
+	gbl_cryptodev_preftest_devtype = RTE_CRYPTODEV_AESNI_MB_PMD;
+
+	return unit_test_suite_runner(&cryptodev_testsuite);
+}
+
+static int
+perftest_qat_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
+{
+	gbl_cryptodev_preftest_devtype = RTE_CRYPTODEV_QAT_PMD;
+
+	return unit_test_suite_runner(&cryptodev_testsuite);
+}
+
+static struct test_command cryptodev_aesni_mb_perf_cmd = {
+	.command = "cryptodev_aesni_mb_perftest",
+	.callback = perftest_aesni_mb_cryptodev,
+};
+
+static struct test_command cryptodev_qat_perf_cmd = {
+	.command = "cryptodev_qat_perftest",
+	.callback = perftest_qat_cryptodev,
+};
+
+REGISTER_TEST_COMMAND(cryptodev_aesni_mb_perf_cmd);
+REGISTER_TEST_COMMAND(cryptodev_qat_perf_cmd);
diff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c
index 388cf11..2d98958 100644
--- a/app/test/test_link_bonding.c
+++ b/app/test/test_link_bonding.c
@@ -4020,7 +4020,7 @@ test_close_bonded_device(void)
 	return 0;
 }
 
-static int
+static void
 testsuite_teardown(void)
 {
 	if (test_params->pkt_eth_hdr != NULL) {
@@ -4029,7 +4029,7 @@ testsuite_teardown(void)
 	}
 
 	/* Clean up and remove slaves from bonded device */
-	return remove_slaves_and_stop_bonded_device();
+	remove_slaves_and_stop_bonded_device();
 }
 
 static void
@@ -4993,7 +4993,7 @@ static struct unit_test_suite link_bonding_test_suite  = {
 		TEST_CASE(test_reconfigure_bonded_device),
 		TEST_CASE(test_close_bonded_device),
 
-		{ NULL, NULL, NULL, NULL, NULL } /**< NULL terminate unit test array */
+		TEST_CASES_END() /**< NULL terminate unit test array */
 	}
 };
 
diff --git a/app/test/test_link_bonding_mode4.c b/app/test/test_link_bonding_mode4.c
index 460539d..713368d 100644
--- a/app/test/test_link_bonding_mode4.c
+++ b/app/test/test_link_bonding_mode4.c
@@ -453,7 +453,7 @@ test_setup(void)
 	return 0;
 }
 
-static int
+static void
 testsuite_teardown(void)
 {
 	struct slave_conf *port;
@@ -467,8 +467,6 @@ testsuite_teardown(void)
 
 	FOR_EACH_PORT(i, port)
 		rte_eth_dev_stop(port->port_id);
-
-	return 0;
 }
 
 /*
@@ -1390,7 +1388,8 @@ static struct unit_test_suite link_bonding_mode4_test_suite  = {
 		TEST_CASE_NAMED("test_mode4_tx_burst", test_mode4_tx_burst_wrapper),
 		TEST_CASE_NAMED("test_mode4_marker", test_mode4_marker_wrapper),
 		TEST_CASE_NAMED("test_mode4_expired", test_mode4_expired_wrapper),
-		{ NULL, NULL, NULL, NULL, NULL } /**< NULL terminate unit test array */
+
+		TEST_CASES_END() /**< NULL terminate unit test array */
 	}
 };
 
diff --git a/app/test/test_link_bonding_rssconf.c b/app/test/test_link_bonding_rssconf.c
index e6714b4..0a3162e 100644
--- a/app/test/test_link_bonding_rssconf.c
+++ b/app/test/test_link_bonding_rssconf.c
@@ -586,7 +586,7 @@ test_setup(void)
 	return TEST_SUCCESS;
 }
 
-static int
+static void
 testsuite_teardown(void)
 {
 	struct slave_conf *port;
@@ -600,8 +600,6 @@ testsuite_teardown(void)
 
 	FOR_EACH_PORT(i, port)
 		rte_eth_dev_stop(port->port_id);
-
-	return 0;
 }
 
 static int
@@ -661,7 +659,8 @@ static struct unit_test_suite link_bonding_rssconf_test_suite  = {
 		TEST_CASE_NAMED("test_setup", test_setup_wrapper),
 		TEST_CASE_NAMED("test_rss", test_rss_wrapper),
 		TEST_CASE_NAMED("test_rss_lazy", test_rss_lazy_wrapper),
-		{ NULL, NULL, NULL, NULL, NULL } /**< NULL terminate unit test array */
+
+		TEST_CASES_END()
 	}
 };
 
-- 
2.4.3

  parent reply	other threads:[~2015-11-09 20:29 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-02 23:01 [PATCH 0/6] Crypto API and device framework Declan Doherty
2015-10-02 23:01 ` [PATCH 1/6] cryptodev: Initial DPDK Crypto APIs and device framework release Declan Doherty
2015-10-21  9:24   ` Thomas Monjalon
2015-10-21 11:16     ` Declan Doherty
2015-10-02 23:01 ` [PATCH 2/6] qat_crypto_pmd: Addition of a new QAT DPDK PMD Declan Doherty
2015-10-02 23:01 ` [PATCH 3/6] aesni_mb_pmd: Initial implementation of multi buffer based crypto device Declan Doherty
2015-10-02 23:01 ` [PATCH 4/6] docs: add getting started guides for multi-buffer pmd and qat pmd Declan Doherty
2015-10-21 11:34   ` Thomas Monjalon
2015-10-02 23:01 ` [PATCH 5/6] app/test: add cryptodev unit and performance tests Declan Doherty
2015-10-02 23:01 ` [PATCH 6/6] l2fwd-crypto: crypto Declan Doherty
2015-10-21  9:11 ` [PATCH 0/6] Crypto API and device framework Declan Doherty
2015-10-30 12:59 ` [PATCH v2 " Declan Doherty
2015-10-30 12:59   ` [PATCH v2 1/6] cryptodev: Initial DPDK Crypto APIs and device framework release Declan Doherty
2015-10-30 12:59   ` [PATCH v2 2/6] mbuf_offload: library to support attaching offloads to a mbuf Declan Doherty
2015-10-30 12:59   ` [PATCH v2 3/6] qat_crypto_pmd: Addition of a new QAT DPDK PMD Declan Doherty
2015-10-30 12:59   ` [PATCH v2 4/6] aesni_mb_pmd: Initial implementation of multi buffer based crypto device Declan Doherty
2015-10-30 12:59   ` [PATCH v2 5/6] app/test: add cryptodev unit and performance tests Declan Doherty
2015-10-30 12:59   ` [PATCH v2 6/6] l2fwd-crypto: crypto Declan Doherty
2015-10-30 16:08   ` [PATCH v3 0/6] Crypto API and device framework Declan Doherty
2015-10-30 16:08     ` [PATCH v3 1/6] cryptodev: Initial DPDK Crypto APIs and device framework release Declan Doherty
2015-10-30 16:08     ` [PATCH v3 2/6] mbuf_offload: library to support attaching offloads to a mbuf Declan Doherty
2015-10-30 16:34       ` Ananyev, Konstantin
2015-10-30 16:08     ` [PATCH v3 3/6] qat_crypto_pmd: Addition of a new QAT DPDK PMD Declan Doherty
2015-10-30 16:08     ` [PATCH v3 4/6] aesni_mb_pmd: Initial implementation of multi buffer based crypto device Declan Doherty
2015-10-30 16:08     ` [PATCH v3 5/6] app/test: add cryptodev unit and performance tests Declan Doherty
2015-10-30 16:08     ` [PATCH v3 6/6] l2fwd-crypto: crypto Declan Doherty
2015-11-03 17:45     ` [PATCH v4 0/6] Crypto API and device framework Declan Doherty
2015-11-03 17:45       ` [PATCH v4 1/6] cryptodev: Initial DPDK Crypto APIs and device framework release Declan Doherty
2015-11-03 17:45       ` [PATCH v4 2/6] mbuf_offload: library to support attaching offloads to a mbuf Declan Doherty
2015-11-03 17:45       ` [PATCH v4 3/6] qat_crypto_pmd: Addition of a new QAT DPDK PMD Declan Doherty
2015-11-03 17:45       ` [PATCH v4 4/6] aesni_mb_pmd: Initial implementation of multi buffer based crypto device Declan Doherty
2015-11-03 17:45       ` [PATCH v4 5/6] app/test: add cryptodev unit and performance tests Declan Doherty
2015-11-03 17:45       ` [PATCH v4 6/6] l2fwd-crypto: crypto Declan Doherty
2015-11-03 21:20       ` [PATCH v4 0/6] Crypto API and device framework Sergio Gonzalez Monroy
2015-11-09 20:34       ` [PATCH v5 00/10] " Declan Doherty
2015-11-09 20:34         ` [PATCH v5 01/10] ethdev: rename macros to have RTE_ prefix Declan Doherty
2015-11-10 10:30           ` Bruce Richardson
2015-11-09 20:34         ` [PATCH v5 02/10] ethdev: make error checking macros public Declan Doherty
2015-11-10 10:32           ` Bruce Richardson
2015-11-10 15:50           ` Adrien Mazarguil
2015-11-10 17:00             ` Declan Doherty
2015-11-09 20:34         ` [PATCH v5 03/10] eal: add __rte_packed /__rte_aligned macros Declan Doherty
2015-11-09 20:34         ` [PATCH v5 04/10] mbuf: add new marcos to get the physical address of data Declan Doherty
2015-11-09 20:34         ` [PATCH v5 05/10] cryptodev: Initial DPDK Crypto APIs and device framework release Declan Doherty
2015-11-09 20:34         ` [PATCH v5 06/10] mbuf_offload: library to support attaching offloads to a mbuf Declan Doherty
2015-11-09 20:34         ` [PATCH v5 07/10] qat_crypto_pmd: Addition of a new QAT DPDK PMD Declan Doherty
2015-11-09 20:34         ` [PATCH v5 08/10] aesni_mb_pmd: Initial implementation of multi buffer based crypto device Declan Doherty
2015-11-09 20:34         ` Declan Doherty [this message]
2015-11-09 20:34         ` [PATCH v5 10/10] l2fwd-crypto: crypto Declan Doherty
2015-11-10 17:32         ` [PATCH v6 00/10] Crypto API and device framework Declan Doherty
2015-11-10 17:32           ` [PATCH v6 01/10] ethdev: rename macros to have RTE_ prefix Declan Doherty
2015-11-10 17:32           ` [PATCH v6 02/10] ethdev: make error checking macros public Declan Doherty
2015-11-10 17:38             ` Adrien Mazarguil
2015-11-10 17:32           ` [PATCH v6 03/10] eal: add __rte_packed /__rte_aligned macros Declan Doherty
2015-11-13 15:35             ` Thomas Monjalon
2015-11-13 15:41               ` Declan Doherty
2015-11-10 17:32           ` [PATCH v6 04/10] mbuf: add new marcos to get the physical address of data Declan Doherty
2015-11-10 17:32           ` [PATCH v6 05/10] cryptodev: Initial DPDK Crypto APIs and device framework release Declan Doherty
2015-11-13 15:44             ` Thomas Monjalon
2015-11-10 17:32           ` [PATCH v6 06/10] mbuf_offload: library to support attaching offloads to a mbuf Declan Doherty
2015-11-13 15:59             ` Thomas Monjalon
2015-11-13 16:11             ` Thomas Monjalon
2015-11-10 17:32           ` [PATCH v6 07/10] qat_crypto_pmd: Addition of a new QAT DPDK PMD Declan Doherty
2015-11-13 16:00             ` Thomas Monjalon
2015-11-13 16:25               ` Declan Doherty
2015-11-10 17:32           ` [PATCH v6 08/10] aesni_mb_pmd: Initial implementation of multi buffer based crypto device Declan Doherty
2015-11-10 17:32           ` [PATCH v6 09/10] app/test: add cryptodev unit and performance tests Declan Doherty
2015-11-10 17:32           ` [PATCH v6 10/10] l2fwd-crypto: crypto Declan Doherty
2015-11-13 16:03             ` Thomas Monjalon
2015-11-13 18:58           ` [PATCH v7 00/10] Crypto API and device framework Declan Doherty
2015-11-13 18:58             ` [PATCH v7 01/10] ethdev: rename macros to have RTE_ prefix Declan Doherty
2015-11-17 14:44               ` Declan Doherty
2015-11-17 15:39                 ` Thomas Monjalon
2015-11-17 16:04               ` [PATCH v7.1 " Declan Doherty
2015-11-13 18:58             ` [PATCH v7 02/10] ethdev: make error checking macros public Declan Doherty
2015-11-13 18:58             ` [PATCH v7 03/10] eal: add __rte_packed /__rte_aligned macros Declan Doherty
2015-11-13 18:58             ` [PATCH v7 04/10] mbuf: add new marcos to get the physical address of data Declan Doherty
2015-11-25  0:25               ` Thomas Monjalon
2015-11-13 18:58             ` [PATCH v7 05/10] cryptodev: Initial DPDK Crypto APIs and device framework release Declan Doherty
2015-11-25  0:32               ` Thomas Monjalon
2015-11-13 18:58             ` [PATCH v7 06/10] mbuf_offload: library to support attaching offloads to a mbuf Declan Doherty
2015-11-20 15:27               ` Olivier MATZ
2015-11-20 17:26                 ` Declan Doherty
2015-11-23  9:10                   ` Olivier MATZ
2015-11-23 11:52                     ` Ananyev, Konstantin
2015-11-23 12:16                       ` Declan Doherty
2015-11-23 13:08                         ` Olivier MATZ
2015-11-23 14:17                           ` Thomas Monjalon
2015-11-23 14:46                             ` Thomas Monjalon
2015-11-23 15:47                               ` Declan Doherty
2015-11-23 14:33                           ` Declan Doherty
2015-11-13 18:58             ` [PATCH v7 07/10] qat_crypto_pmd: Addition of a new QAT DPDK PMD Declan Doherty
2015-11-25  1:00               ` Thomas Monjalon
2015-11-25  9:16                 ` Mcnamara, John
2015-11-25 10:34               ` Thomas Monjalon
2015-11-25 10:49                 ` Thomas Monjalon
2015-11-25 10:59                   ` Declan Doherty
2015-11-25 12:01               ` Mcnamara, John
2015-11-13 18:58             ` [PATCH v7 08/10] aesni_mb_pmd: Initial implementation of multi buffer based crypto device Declan Doherty
2015-11-25 10:32               ` Thomas Monjalon
2015-11-13 18:58             ` [PATCH v7 09/10] app/test: add cryptodev unit and performance tests Declan Doherty
2015-11-13 18:58             ` [PATCH v7 10/10] l2fwd-crypto: crypto Declan Doherty
2015-11-25  1:03               ` Thomas Monjalon
2015-11-25 13:25             ` [PATCH v8 00/10] Crypto API and device framework Declan Doherty
2015-11-25 13:25               ` [PATCH v8 01/10] ethdev: rename macros to have RTE_ prefix Declan Doherty
2015-11-25 13:25               ` [PATCH v8 02/10] ethdev: make error checking macros public Declan Doherty
2015-11-25 13:25               ` [PATCH v8 03/10] eal: add __rte_packed /__rte_aligned macros Declan Doherty
2015-11-25 13:25               ` [PATCH v8 04/10] mbuf: add new marcos to get the physical address of data Declan Doherty
2015-11-25 13:25               ` [PATCH v8 05/10] cryptodev: Initial DPDK Crypto APIs and device framework release Declan Doherty
2015-11-25 13:25               ` [PATCH v8 06/10] mbuf_offload: library to support attaching offloads to a mbuf Declan Doherty
2015-11-25 13:25               ` [PATCH v8 07/10] qat_crypto_pmd: Addition of a new QAT DPDK PMD Declan Doherty
2015-11-25 13:25               ` [PATCH v8 08/10] aesni_mb_pmd: Initial implementation of multi buffer based crypto device Declan Doherty
2015-11-25 13:25               ` [PATCH v8 09/10] app/test: add cryptodev unit and performance tests Declan Doherty
2015-11-25 13:25               ` [PATCH v8 10/10] l2fwd-crypto: crypto Declan Doherty
2015-11-25 17:44               ` [PATCH v8 00/10] Crypto API and device framework Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1447101259-18972-10-git-send-email-declan.doherty@intel.com \
    --to=declan.doherty@intel.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.