All of lore.kernel.org
 help / color / mirror / Atom feed
From: Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>
To: dev@dpdk.org
Cc: Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>,
	Piotr Azarewicz <piotrx.t.azarewicz@intel.com>,
	Fiona Trahe <fiona.trahe@intel.com>
Subject: [PATCH v6 2/4] app/test: cryptodev AES tests rework
Date: Tue,  4 Oct 2016 17:11:20 +0200	[thread overview]
Message-ID: <1475593882-32364-3-git-send-email-slawomirx.mrozowicz@intel.com> (raw)
In-Reply-To: <1475593882-32364-1-git-send-email-slawomirx.mrozowicz@intel.com>

This patch rework AES tests .
In general - rename AES-named functions to blockcipher functions pattern.

Signed-off-by: Piotr Azarewicz <piotrx.t.azarewicz@intel.com>
Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
---
v6:
- fix checkpatch warnings
---
 app/test/Makefile                          |    2 +-
 app/test/test_cryptodev.c                  |   75 +-
 app/test/test_cryptodev_aes.c              |  687 -----------------
 app/test/test_cryptodev_aes.h              | 1124 ----------------------------
 app/test/test_cryptodev_aes_test_vectors.h |  797 ++++++++++++++++++++
 app/test/test_cryptodev_blockcipher.c      |  516 +++++++++++++
 app/test/test_cryptodev_blockcipher.h      |  124 +++
 7 files changed, 1486 insertions(+), 1839 deletions(-)
 delete mode 100644 app/test/test_cryptodev_aes.c
 delete mode 100644 app/test/test_cryptodev_aes.h
 create mode 100644 app/test/test_cryptodev_aes_test_vectors.h
 create mode 100644 app/test/test_cryptodev_blockcipher.c
 create mode 100644 app/test/test_cryptodev_blockcipher.h

diff --git a/app/test/Makefile b/app/test/Makefile
index 611d77a..5be023a 100644
--- a/app/test/Makefile
+++ b/app/test/Makefile
@@ -193,7 +193,7 @@ 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_aes.c
+SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_blockcipher.c
 SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_perf.c
 SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev.c
 
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index 9d7caba..8f03157 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -43,7 +43,8 @@
 #include "test.h"
 #include "test_cryptodev.h"
 
-#include "test_cryptodev_aes.h"
+#include "test_cryptodev_blockcipher.h"
+#include "test_cryptodev_aes_test_vectors.h"
 #include "test_cryptodev_kasumi_test_vectors.h"
 #include "test_cryptodev_kasumi_hash_test_vectors.h"
 #include "test_cryptodev_snow3g_test_vectors.h"
@@ -86,12 +87,16 @@ struct crypto_unittest_params {
  */
 static int
 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
-		struct crypto_unittest_params *ut_params);
+		struct crypto_unittest_params *ut_params, uint8_t *cipher_key,
+		uint8_t *hmac_key);
 
 static int
 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
 		struct crypto_unittest_params *ut_params,
-		struct crypto_testsuite_params *ts_param);
+		struct crypto_testsuite_params *ts_param,
+		const uint8_t *cipher,
+		const uint8_t *digest,
+		const uint8_t *iv);
 
 static struct rte_mbuf *
 setup_test_string(struct rte_mempool *mpool,
@@ -313,7 +318,7 @@ testsuite_setup(void)
 
 	nb_devs = rte_cryptodev_count();
 	if (nb_devs < 1) {
-		RTE_LOG(ERR, USER1, "No crypto devices found?");
+		RTE_LOG(ERR, USER1, "No crypto devices found?\n");
 		return TEST_FAILED;
 	}
 
@@ -872,7 +877,6 @@ static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
 	0x18, 0x8c, 0x1d, 0x32
 };
 
-
 static int
 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
 {
@@ -1003,17 +1007,24 @@ static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
 
 static int
 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
-		struct crypto_unittest_params *ut_params);
+		struct crypto_unittest_params *ut_params,
+		uint8_t *cipher_key,
+		uint8_t *hmac_key);
 
 static int
 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
 		struct crypto_unittest_params *ut_params,
-		struct crypto_testsuite_params *ts_params);
+		struct crypto_testsuite_params *ts_params,
+		const uint8_t *cipher,
+		const uint8_t *digest,
+		const uint8_t *iv);
 
 
 static int
 test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
-		struct crypto_unittest_params *ut_params)
+		struct crypto_unittest_params *ut_params,
+		uint8_t *cipher_key,
+		uint8_t *hmac_key)
 {
 
 	/* Setup Cipher Parameters */
@@ -1022,7 +1033,7 @@ test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
 
 	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.data = cipher_key;
 	ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
 
 	/* Setup HMAC Parameters */
@@ -1031,7 +1042,7 @@ test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
 
 	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.data = hmac_key;
 	ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
 	ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
 
@@ -1042,12 +1053,15 @@ test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
 static int
 test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
 		struct crypto_unittest_params *ut_params,
-		struct crypto_testsuite_params *ts_params)
+		struct crypto_testsuite_params *ts_params,
+		const uint8_t *cipher,
+		const uint8_t *digest,
+		const uint8_t *iv)
 {
 	/* 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,
+			cipher,
 			QUOTE_512_BYTES, 0);
 
 	ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
@@ -1055,7 +1069,7 @@ test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
 	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,
 			DIGEST_BYTE_LENGTH_SHA512);
 
 	/* Generate Crypto op data structure */
@@ -1085,7 +1099,7 @@ test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
 			ut_params->ibuf, 0);
 	sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
 
-	rte_memcpy(sym_op->cipher.iv.data, aes_cbc_iv,
+	rte_memcpy(sym_op->cipher.iv.data, iv,
 			CIPHER_IV_LENGTH_AES_CBC);
 
 	sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
@@ -1115,14 +1129,15 @@ test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
 }
 
 static int
-test_AES_mb_all(void)
+test_AES_chain_mb_all(void)
 {
 	struct crypto_testsuite_params *ts_params = &testsuite_params;
 	int status;
 
-	status = test_AES_all_tests(ts_params->mbuf_pool,
+	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
 		ts_params->op_mpool, ts_params->valid_devs[0],
-		RTE_CRYPTODEV_AESNI_MB_PMD);
+		RTE_CRYPTODEV_AESNI_MB_PMD,
+		BLKCIPHER_AES_CHAIN_TYPE);
 
 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
 
@@ -1130,14 +1145,15 @@ test_AES_mb_all(void)
 }
 
 static int
-test_AES_qat_all(void)
+test_AES_chain_qat_all(void)
 {
 	struct crypto_testsuite_params *ts_params = &testsuite_params;
 	int status;
 
-	status = test_AES_all_tests(ts_params->mbuf_pool,
+	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
 		ts_params->op_mpool, ts_params->valid_devs[0],
-		RTE_CRYPTODEV_QAT_SYM_PMD);
+		RTE_CRYPTODEV_QAT_SYM_PMD,
+		BLKCIPHER_AES_CHAIN_TYPE);
 
 	TEST_ASSERT_EQUAL(status, 0, "Test failed");
 
@@ -4024,7 +4040,8 @@ test_multi_session(void)
 
 	uint16_t i;
 
-	test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params);
+	test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
+			aes_cbc_key, hmac_sha512_key);
 
 
 	rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
@@ -4043,10 +4060,14 @@ test_multi_session(void)
 				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);
+		TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
+			sessions[i],
+			ut_params,
+			ts_params,
+			catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
+			catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
+			aes_cbc_iv),
+			"Failed to perform decrypt on request number %u.", i);
 		/* free crypto operation structure */
 		if (ut_params->op)
 			rte_crypto_op_free(ut_params->op);
@@ -4700,7 +4721,7 @@ static struct unit_test_suite cryptodev_qat_testsuite  = {
 		TEST_CASE_ST(ut_setup, ut_teardown,
 				test_multi_session),
 
-		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_qat_all),
+		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
 		TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
 
 		/** AES GCM Authenticated Encryption */
@@ -4836,7 +4857,7 @@ static struct unit_test_suite cryptodev_aesni_mb_testsuite  = {
 	.setup = testsuite_setup,
 	.teardown = testsuite_teardown,
 	.unit_test_cases = {
-		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_mb_all),
+		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_mb_all),
 
 		TEST_CASES_END() /**< NULL terminate unit test array */
 	}
diff --git a/app/test/test_cryptodev_aes.c b/app/test/test_cryptodev_aes.c
deleted file mode 100644
index e19c45b..0000000
--- a/app/test/test_cryptodev_aes.c
+++ /dev/null
@@ -1,687 +0,0 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright(c) 2015-2016 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_crypto.h>
-#include <rte_cryptodev.h>
-#include <rte_cryptodev_pmd.h>
-
-#include "test.h"
-#include "test_cryptodev_aes.h"
-
-#ifndef AES_TEST_MSG_LEN
-#define AES_TEST_MSG_LEN		256
-#endif
-
-#define AES_TEST_OP_ENCRYPT		0x01
-#define AES_TEST_OP_DECRYPT		0x02
-#define AES_TEST_OP_AUTH_GEN		0x04
-#define AES_TEST_OP_AUTH_VERIFY		0x08
-
-#define AES_TEST_FEATURE_OOP		0x01
-#define AES_TEST_FEATURE_SESSIONLESS	0x02
-#define AES_TEST_FEATURE_STOPPER	0x04 /* stop upon failing */
-
-#define AES_TEST_TARGET_PMD_MB		0x0001 /* Multi-buffer flag */
-#define AES_TEST_TARGET_PMD_QAT		0x0002 /* QAT flag */
-
-#define AES_TEST_OP_CIPHER		(AES_TEST_OP_ENCRYPT |		\
-					AES_TEST_OP_DECRYPT)
-
-#define AES_TEST_OP_AUTH		(AES_TEST_OP_AUTH_GEN |		\
-					AES_TEST_OP_AUTH_VERIFY)
-
-#define AES_TEST_OP_ENC_AUTH_GEN	(AES_TEST_OP_ENCRYPT |		\
-					AES_TEST_OP_AUTH_GEN)
-
-#define AES_TEST_OP_AUTH_VERIFY_DEC	(AES_TEST_OP_DECRYPT |		\
-					AES_TEST_OP_AUTH_VERIFY)
-
-struct aes_test_case {
-	const char *test_descr; /* test description */
-	const struct aes_test_data *test_data;
-	uint8_t op_mask; /* operation mask */
-	uint8_t feature_mask;
-	uint32_t pmd_mask;
-};
-
-static const struct aes_test_case aes_test_cases[] = {
-	{
-		.test_descr = "AES-128-CTR HMAC-SHA1 Encryption Digest",
-		.test_data = &aes_test_data_1,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CTR HMAC-SHA1 Decryption Digest "
-			"Verify",
-		.test_data = &aes_test_data_1,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-192-CTR XCBC Encryption Digest",
-		.test_data = &aes_test_data_2,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-192-CTR XCBC Decryption Digest Verify",
-		.test_data = &aes_test_data_2,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-256-CTR HMAC-SHA1 Encryption Digest",
-		.test_data = &aes_test_data_3,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-256-CTR HMAC-SHA1 Decryption Digest "
-			"Verify",
-		.test_data = &aes_test_data_3,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA1 Encryption Digest",
-		.test_data = &aes_test_data_4,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA1 Decryption Digest "
-			"Verify",
-		.test_data = &aes_test_data_4,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA256 Encryption Digest",
-		.test_data = &aes_test_data_5,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA256 Decryption Digest "
-			"Verify",
-		.test_data = &aes_test_data_5,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA512 Encryption Digest",
-		.test_data = &aes_test_data_6,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA512 Encryption Digest "
-			"Sessionless",
-		.test_data = &aes_test_data_6,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.feature_mask = AES_TEST_FEATURE_SESSIONLESS,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA512 Decryption Digest "
-			"Verify",
-		.test_data = &aes_test_data_6,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC XCBC Encryption Digest",
-		.test_data = &aes_test_data_7,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC XCBC Decryption Digest Verify",
-		.test_data = &aes_test_data_7,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA1 Encryption Digest "
-			"OOP",
-		.test_data = &aes_test_data_4,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.feature_mask = AES_TEST_FEATURE_OOP,
-		.pmd_mask = AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA1 Decryption Digest "
-			"Verify OOP",
-		.test_data = &aes_test_data_4,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.feature_mask = AES_TEST_FEATURE_OOP,
-		.pmd_mask = AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA224 Encryption Digest",
-		.test_data = &aes_test_data_8,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA224 Decryption Digest "
-			"Verify",
-		.test_data = &aes_test_data_8,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA384 Encryption Digest",
-		.test_data = &aes_test_data_9,
-		.op_mask = AES_TEST_OP_ENC_AUTH_GEN,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-	{
-		.test_descr = "AES-128-CBC HMAC-SHA384 Decryption Digest "
-			"Verify",
-		.test_data = &aes_test_data_9,
-		.op_mask = AES_TEST_OP_AUTH_VERIFY_DEC,
-		.pmd_mask = AES_TEST_TARGET_PMD_MB |
-			AES_TEST_TARGET_PMD_QAT
-	},
-};
-
-static int
-test_AES_one_case(const struct aes_test_case *t,
-	struct rte_mempool *mbuf_pool,
-	struct rte_mempool *op_mpool,
-	uint8_t dev_id,
-	enum rte_cryptodev_type cryptodev_type,
-	char *test_msg)
-{
-	struct rte_mbuf *ibuf = NULL;
-	struct rte_mbuf *obuf = NULL;
-	struct rte_mbuf *iobuf;
-	struct rte_crypto_sym_xform *cipher_xform = NULL;
-	struct rte_crypto_sym_xform *auth_xform = NULL;
-	struct rte_crypto_sym_xform *init_xform = NULL;
-	struct rte_crypto_sym_op *sym_op = NULL;
-	struct rte_crypto_op *op = NULL;
-	struct rte_cryptodev_sym_session *sess = NULL;
-
-	int status = TEST_SUCCESS;
-	const struct aes_test_data *tdata = t->test_data;
-	uint8_t cipher_key[tdata->cipher_key.len];
-	uint8_t auth_key[tdata->auth_key.len];
-	uint32_t buf_len = tdata->ciphertext.len;
-	uint32_t digest_len = 0;
-	char *buf_p = NULL;
-
-	if (tdata->cipher_key.len)
-		memcpy(cipher_key, tdata->cipher_key.data,
-			tdata->cipher_key.len);
-	if (tdata->auth_key.len)
-		memcpy(auth_key, tdata->auth_key.data,
-			tdata->auth_key.len);
-
-	switch (cryptodev_type) {
-	case RTE_CRYPTODEV_QAT_SYM_PMD:
-		digest_len = tdata->digest.len;
-		break;
-	case RTE_CRYPTODEV_AESNI_MB_PMD:
-		digest_len = tdata->digest.truncated_len;
-		break;
-	default:
-		snprintf(test_msg, AES_TEST_MSG_LEN, "line %u FAILED: %s",
-			__LINE__, "Unsupported PMD type");
-		status = TEST_FAILED;
-		goto error_exit;
-	}
-
-	/* preparing data */
-	ibuf = rte_pktmbuf_alloc(mbuf_pool);
-	if (!ibuf) {
-		snprintf(test_msg, AES_TEST_MSG_LEN, "line %u FAILED: %s",
-			__LINE__, "Allocation of rte_mbuf failed");
-		status = TEST_FAILED;
-		goto error_exit;
-	}
-
-	if (t->op_mask & AES_TEST_OP_CIPHER)
-		buf_len += tdata->iv.len;
-	if (t->op_mask & AES_TEST_OP_AUTH)
-		buf_len += digest_len;
-
-	buf_p = rte_pktmbuf_append(ibuf, buf_len);
-	if (!buf_p) {
-		snprintf(test_msg, AES_TEST_MSG_LEN, "line %u FAILED: %s",
-			__LINE__, "No room to append mbuf");
-		status = TEST_FAILED;
-		goto error_exit;
-	}
-
-	if (t->op_mask & AES_TEST_OP_CIPHER) {
-		rte_memcpy(buf_p, tdata->iv.data, tdata->iv.len);
-		buf_p += tdata->iv.len;
-	}
-
-	/* only encryption requires plaintext.data input,
-	 * decryption/(digest gen)/(digest verify) use ciphertext.data
-	 * to be computed */
-	if (t->op_mask & AES_TEST_OP_ENCRYPT) {
-		rte_memcpy(buf_p, tdata->plaintext.data,
-			tdata->plaintext.len);
-		buf_p += tdata->plaintext.len;
-	} else {
-		rte_memcpy(buf_p, tdata->ciphertext.data,
-			tdata->ciphertext.len);
-		buf_p += tdata->ciphertext.len;
-	}
-
-	if (t->op_mask & AES_TEST_OP_AUTH_VERIFY)
-		rte_memcpy(buf_p, tdata->digest.data, digest_len);
-	else
-		memset(buf_p, 0, digest_len);
-
-	if (t->feature_mask & AES_TEST_FEATURE_OOP) {
-		obuf = rte_pktmbuf_alloc(mbuf_pool);
-		if (!obuf) {
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: %s", __LINE__,
-				"Allocation of rte_mbuf failed");
-			status = TEST_FAILED;
-			goto error_exit;
-		}
-
-		buf_p = rte_pktmbuf_append(obuf, buf_len);
-		if (!buf_p) {
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: %s", __LINE__,
-				"No room to append mbuf");
-			status = TEST_FAILED;
-			goto error_exit;
-		}
-		memset(buf_p, 0, buf_len);
-	}
-
-	/* Generate Crypto op data structure */
-	op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_SYMMETRIC);
-	if (!op) {
-		snprintf(test_msg, AES_TEST_MSG_LEN, "line %u FAILED: %s",
-			__LINE__, "Failed to allocate symmetric crypto "
-			"operation struct");
-		status = TEST_FAILED;
-		goto error_exit;
-	}
-
-	sym_op = op->sym;
-
-	sym_op->m_src = ibuf;
-
-	if (t->feature_mask & AES_TEST_FEATURE_OOP) {
-		sym_op->m_dst = obuf;
-		iobuf = obuf;
-	} else {
-		sym_op->m_dst = NULL;
-		iobuf = ibuf;
-	}
-
-	/* sessionless op requires allocate xform using
-	 * rte_crypto_op_sym_xforms_alloc(), otherwise rte_zmalloc()
-	 * is used */
-	if (t->feature_mask & AES_TEST_FEATURE_SESSIONLESS) {
-		uint32_t n_xforms = 0;
-
-		if (t->op_mask & AES_TEST_OP_CIPHER)
-			n_xforms++;
-		if (t->op_mask & AES_TEST_OP_AUTH)
-			n_xforms++;
-
-		if (rte_crypto_op_sym_xforms_alloc(op, n_xforms)
-			== NULL) {
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: %s", __LINE__, "Failed to "
-				"allocate space for crypto transforms");
-			status = TEST_FAILED;
-			goto error_exit;
-		}
-	} else {
-		cipher_xform = rte_zmalloc(NULL,
-			sizeof(struct rte_crypto_sym_xform), 0);
-
-		auth_xform = rte_zmalloc(NULL,
-			sizeof(struct rte_crypto_sym_xform), 0);
-
-		if (!cipher_xform || !auth_xform) {
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: %s", __LINE__, "Failed to "
-				"allocate memory for crypto transforms");
-			status = TEST_FAILED;
-			goto error_exit;
-		}
-	}
-
-	/* preparing xform, for sessioned op, init_xform is initialized
-	 * here and later as param in rte_cryptodev_sym_session_create()
-	 * call */
-	if (t->op_mask == AES_TEST_OP_ENC_AUTH_GEN) {
-		if (t->feature_mask & AES_TEST_FEATURE_SESSIONLESS) {
-			cipher_xform = op->sym->xform;
-			auth_xform = cipher_xform->next;
-			auth_xform->next = NULL;
-		} else {
-			cipher_xform->next = auth_xform;
-			auth_xform->next = NULL;
-			init_xform = cipher_xform;
-		}
-	} else if (t->op_mask == AES_TEST_OP_AUTH_VERIFY_DEC) {
-		if (t->feature_mask & AES_TEST_FEATURE_SESSIONLESS) {
-			auth_xform = op->sym->xform;
-			cipher_xform = auth_xform->next;
-			cipher_xform->next = NULL;
-		} else {
-			auth_xform->next = cipher_xform;
-			cipher_xform->next = NULL;
-			init_xform = auth_xform;
-		}
-	} else if ((t->op_mask == AES_TEST_OP_ENCRYPT) ||
-			(t->op_mask == AES_TEST_OP_DECRYPT)) {
-		if (t->feature_mask & AES_TEST_FEATURE_SESSIONLESS)
-			cipher_xform = op->sym->xform;
-		else
-			init_xform = cipher_xform;
-		cipher_xform->next = NULL;
-	} else if ((t->op_mask == AES_TEST_OP_AUTH_GEN) ||
-			(t->op_mask == AES_TEST_OP_AUTH_VERIFY)) {
-		if (t->feature_mask & AES_TEST_FEATURE_SESSIONLESS)
-			auth_xform = op->sym->xform;
-		else
-			init_xform = auth_xform;
-		auth_xform->next = NULL;
-	} else {
-		snprintf(test_msg, AES_TEST_MSG_LEN, "line %u FAILED: %s",
-			__LINE__, "Unrecognized operation");
-		status = TEST_FAILED;
-		goto error_exit;
-	}
-
-	/*configure xforms & sym_op cipher and auth data*/
-	if (t->op_mask & AES_TEST_OP_CIPHER) {
-		cipher_xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
-		cipher_xform->cipher.algo = tdata->crypto_algo;
-		if (t->op_mask & AES_TEST_OP_ENCRYPT)
-			cipher_xform->cipher.op =
-				RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-		else
-			cipher_xform->cipher.op =
-				RTE_CRYPTO_CIPHER_OP_DECRYPT;
-		cipher_xform->cipher.key.data = cipher_key;
-		cipher_xform->cipher.key.length = tdata->cipher_key.len;
-
-		sym_op->cipher.data.offset = tdata->iv.len;
-		sym_op->cipher.data.length = tdata->ciphertext.len;
-		sym_op->cipher.iv.data = rte_pktmbuf_mtod(sym_op->m_src,
-			uint8_t *);
-		sym_op->cipher.iv.length = tdata->iv.len;
-		sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(
-			sym_op->m_src);
-	}
-
-	if (t->op_mask & AES_TEST_OP_AUTH) {
-		uint32_t auth_data_offset = 0;
-		uint32_t digest_offset = tdata->ciphertext.len;
-
-		if (t->op_mask & AES_TEST_OP_CIPHER) {
-			digest_offset += tdata->iv.len;
-			auth_data_offset += tdata->iv.len;
-		}
-
-		auth_xform->type = RTE_CRYPTO_SYM_XFORM_AUTH;
-		auth_xform->auth.algo = tdata->auth_algo;
-		auth_xform->auth.key.length = tdata->auth_key.len;
-		auth_xform->auth.key.data = auth_key;
-		auth_xform->auth.digest_length = digest_len;
-
-		if (t->op_mask & AES_TEST_OP_AUTH_GEN) {
-			auth_xform->auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
-			sym_op->auth.digest.data = rte_pktmbuf_mtod_offset
-				(iobuf, uint8_t *, digest_offset);
-			sym_op->auth.digest.phys_addr =
-				rte_pktmbuf_mtophys_offset(iobuf,
-					digest_offset);
-		} else {
-			auth_xform->auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
-			sym_op->auth.digest.data = rte_pktmbuf_mtod_offset
-				(sym_op->m_src, uint8_t *, digest_offset);
-			sym_op->auth.digest.phys_addr =
-				rte_pktmbuf_mtophys_offset(sym_op->m_src,
-					digest_offset);
-		}
-
-		sym_op->auth.data.offset = auth_data_offset;
-		sym_op->auth.data.length = tdata->ciphertext.len;
-		sym_op->auth.digest.length = digest_len;
-	}
-
-	/* create session for sessioned op */
-	if (!(t->feature_mask & AES_TEST_FEATURE_SESSIONLESS)) {
-		sess = rte_cryptodev_sym_session_create(dev_id,
-			init_xform);
-		if (!sess) {
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: %s", __LINE__,
-				"Session creation failed");
-			status = TEST_FAILED;
-			goto error_exit;
-		}
-
-		/* attach symmetric crypto session to crypto operations */
-		rte_crypto_op_attach_sym_session(op, sess);
-	}
-
-	/* Process crypto operation */
-	if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
-		snprintf(test_msg, AES_TEST_MSG_LEN, "line %u FAILED: %s",
-			__LINE__, "Error sending packet for encryption");
-		status = TEST_FAILED;
-		goto error_exit;
-	}
-
-	op = NULL;
-
-	while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
-		rte_pause();
-
-	if (!op) {
-		snprintf(test_msg, AES_TEST_MSG_LEN, "line %u FAILED: %s",
-			__LINE__, "Failed to process sym crypto op");
-		status = TEST_FAILED;
-		goto error_exit;
-	}
-
-	TEST_HEXDUMP(stdout, "m_src:",
-		rte_pktmbuf_mtod(sym_op->m_src, uint8_t *), buf_len);
-	if (t->feature_mask & AES_TEST_FEATURE_OOP)
-		TEST_HEXDUMP(stdout, "m_dst:",
-			rte_pktmbuf_mtod(sym_op->m_dst, uint8_t *),
-			buf_len);
-
-	/* Verify results */
-	if (op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
-		if (t->op_mask & AES_TEST_OP_AUTH_VERIFY)
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: Digest verification failed "
-				"(0x%X)", __LINE__, op->status);
-		else
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: Digest verification failed "
-				"(0x%X)", __LINE__, op->status);
-		status = TEST_FAILED;
-		goto error_exit;
-	}
-
-	if (t->op_mask & AES_TEST_OP_CIPHER) {
-		uint8_t *crypto_res;
-		const uint8_t *compare_ref;
-		uint32_t compare_len;
-
-		crypto_res = rte_pktmbuf_mtod_offset(iobuf, uint8_t *,
-			tdata->iv.len);
-
-		if (t->op_mask & AES_TEST_OP_ENCRYPT) {
-			compare_ref = tdata->ciphertext.data;
-			compare_len = tdata->ciphertext.len;
-		} else {
-			compare_ref = tdata->plaintext.data;
-			compare_len = tdata->plaintext.len;
-		}
-
-		if (memcmp(crypto_res, compare_ref, compare_len)) {
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: %s", __LINE__,
-				"Crypto data not as expected");
-			status = TEST_FAILED;
-			goto error_exit;
-		}
-	}
-
-	if (t->op_mask & AES_TEST_OP_AUTH_GEN) {
-		uint8_t *auth_res;
-
-		if (t->op_mask & AES_TEST_OP_CIPHER)
-			auth_res = rte_pktmbuf_mtod_offset(iobuf,
-				uint8_t *,
-				tdata->iv.len + tdata->ciphertext.len);
-		else
-			auth_res = rte_pktmbuf_mtod_offset(iobuf,
-				uint8_t *, tdata->ciphertext.len);
-
-		if (memcmp(auth_res, tdata->digest.data, digest_len)) {
-			snprintf(test_msg, AES_TEST_MSG_LEN, "line %u "
-				"FAILED: %s", __LINE__, "Generated "
-				"digest data not as expected");
-			status = TEST_FAILED;
-			goto error_exit;
-		}
-	}
-
-	snprintf(test_msg, AES_TEST_MSG_LEN, "PASS");
-
-error_exit:
-	if (!(t->feature_mask & AES_TEST_FEATURE_SESSIONLESS)) {
-		if (sess)
-			rte_cryptodev_sym_session_free(dev_id, sess);
-		if (cipher_xform)
-			rte_free(cipher_xform);
-		if (auth_xform)
-			rte_free(auth_xform);
-	}
-
-	if (op)
-		rte_crypto_op_free(op);
-
-	if (obuf)
-		rte_pktmbuf_free(obuf);
-
-	if (ibuf)
-		rte_pktmbuf_free(ibuf);
-
-	return status;
-}
-
-int
-test_AES_all_tests(struct rte_mempool *mbuf_pool,
-	struct rte_mempool *op_mpool,
-	uint8_t dev_id,
-	enum rte_cryptodev_type cryptodev_type)
-{
-	int status, overall_status = TEST_SUCCESS;
-	uint32_t i, test_index = 0;
-	char test_msg[AES_TEST_MSG_LEN + 1];
-	uint32_t n_test_cases = sizeof(aes_test_cases) /
-			sizeof(aes_test_cases[0]);
-	uint32_t target_pmd_mask = 0;
-
-	switch (cryptodev_type) {
-	case RTE_CRYPTODEV_AESNI_MB_PMD:
-		target_pmd_mask = AES_TEST_TARGET_PMD_MB;
-		break;
-	case RTE_CRYPTODEV_QAT_SYM_PMD:
-		target_pmd_mask = AES_TEST_TARGET_PMD_QAT;
-		break;
-	default:
-		TEST_ASSERT(-1, "Unrecognized cryptodev type");
-		break;
-	}
-
-	for (i = 0; i < n_test_cases; i++) {
-		const struct aes_test_case *tc = &aes_test_cases[i];
-
-		if (!(tc->pmd_mask & target_pmd_mask))
-			continue;
-
-		status = test_AES_one_case(tc, mbuf_pool, op_mpool,
-			dev_id, cryptodev_type, test_msg);
-
-		printf("  %u) TestCase %s %s\n", test_index ++,
-			tc->test_descr, test_msg);
-
-		if (status != TEST_SUCCESS) {
-			if (overall_status == TEST_SUCCESS)
-				overall_status = status;
-
-			if (tc->feature_mask & AES_TEST_FEATURE_STOPPER)
-				break;
-		}
-	}
-
-	return overall_status;
-}
diff --git a/app/test/test_cryptodev_aes.h b/app/test/test_cryptodev_aes.h
deleted file mode 100644
index ef518e0..0000000
--- a/app/test/test_cryptodev_aes.h
+++ /dev/null
@@ -1,1124 +0,0 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright(c) 2016 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_AES_H_
-#define TEST_CRYPTODEV_AES_H_
-
-struct aes_test_data {
-	enum rte_crypto_cipher_algorithm crypto_algo;
-
-	struct {
-		uint8_t data[64];
-		unsigned len;
-	} cipher_key;
-
-	struct {
-		uint8_t data[64] __rte_aligned(16);
-		unsigned len;
-	} iv;
-
-	struct {
-		uint8_t data[2048];
-		unsigned len;
-	} plaintext;
-
-	struct {
-		uint8_t data[2048];
-		unsigned len;
-	} ciphertext;
-
-	enum rte_crypto_auth_algorithm auth_algo;
-
-	struct {
-		uint8_t data[128];
-		unsigned len;
-	} auth_key;
-
-	struct {
-		uint8_t data[128];
-		unsigned len;		/* for qat */
-		unsigned truncated_len;	/* for mb */
-	} digest;
-};
-
-int
-test_AES_all_tests(struct rte_mempool *mbuf_pool,
-	struct rte_mempool *op_mpool,
-	uint8_t dev_id,
-	enum rte_cryptodev_type cryptodev_type);
-
-/* test vectors */
-/* AES128-CTR-SHA1 test vector */
-static const struct aes_test_data aes_test_data_1 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
-	.cipher_key = {
-		.data = {
-			0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
-			0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
-		},
-		.len = 16
-	},
-	.iv = {
-		.data = {
-			0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
-			0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
-			0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
-			0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
-			0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
-			0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
-			0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
-			0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
-			0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10
-		},
-		.len = 64
-	},
-	.ciphertext = {
-		.data = {
-			0x87, 0x4D, 0x61, 0x91, 0xB6, 0x20, 0xE3, 0x26,
-			0x1B, 0xEF, 0x68, 0x64, 0x99, 0x0D, 0xB6, 0xCE,
-			0x98, 0x06, 0xF6, 0x6B, 0x79, 0x70, 0xFD, 0xFF,
-			0x86, 0x17, 0x18, 0x7B, 0xB9, 0xFF, 0xFD, 0xFF,
-			0x5A, 0xE4, 0xDF, 0x3E, 0xDB, 0xD5, 0xD3, 0x5E,
-			0x5B, 0x4F, 0x09, 0x02, 0x0D, 0xB0, 0x3E, 0xAB,
-			0x1E, 0x03, 0x1D, 0xDA, 0x2F, 0xBE, 0x03, 0xD1,
-			0x79, 0x21, 0x70, 0xA0, 0xF3, 0x00, 0x9C, 0xEE
-		},
-		.len = 64
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
-	.auth_key = {
-		.data = {
-			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
-			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
-			0xDE, 0xF4, 0xDE, 0xAD
-		},
-		.len = 20
-	},
-	.digest = {
-		.data = {
-			0x9B, 0x6F, 0x0C, 0x43, 0xF5, 0xC1, 0x3E, 0xB0,
-			0xB1, 0x70, 0xB8, 0x2B, 0x33, 0x09, 0xD2, 0xB2,
-			0x56, 0x20, 0xFB, 0xFE
-		},
-		.len = 20,
-		.truncated_len = 12
-	}
-};
-
-/** AES-192-CTR XCBC test vector */
-static const struct aes_test_data aes_test_data_2 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
-	.cipher_key = {
-		.data = {
-			0xCB, 0xC5, 0xED, 0x5B, 0xE7, 0x7C, 0xBD, 0x8C,
-			0x50, 0xD9, 0x30, 0xF2, 0xB5, 0x6A, 0x0E, 0x5F,
-			0xAA, 0xAE, 0xAD, 0xA2, 0x1F, 0x49, 0x52, 0xD4
-		},
-		.len = 24
-	},
-	.iv = {
-		.data = {
-			0x3F, 0x69, 0xA8, 0xCD, 0xE8, 0xF0, 0xEF, 0x40,
-			0xB8, 0x7A, 0x4B, 0xED, 0x2B, 0xAF, 0xBF, 0x57
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			0x01, 0x0F, 0x10, 0x1F, 0x20, 0x1C, 0x0E, 0xB8,
-			0xFB, 0x5C, 0xCD, 0xCC, 0x1F, 0xF9, 0xAF, 0x0B,
-			0x95, 0x03, 0x74, 0x99, 0x49, 0xE7, 0x62, 0x55,
-			0xDA, 0xEA, 0x13, 0x20, 0x1D, 0xC6, 0xCC, 0xCC,
-			0xD1, 0x70, 0x75, 0x47, 0x02, 0x2F, 0xFB, 0x86,
-			0xBB, 0x6B, 0x23, 0xD2, 0xC9, 0x74, 0xD7, 0x7B,
-			0x08, 0x03, 0x3B, 0x79, 0x39, 0xBB, 0x91, 0x29,
-			0xDA, 0x14, 0x39, 0x8D, 0xFF, 0x81, 0x50, 0x96,
-		},
-		.len = 64
-	},
-	.ciphertext = {
-		.data = {
-			0x4A, 0x6C, 0xC8, 0xCC, 0x96, 0x2A, 0x13, 0x84,
-			0x1C, 0x36, 0x88, 0xE9, 0xE5, 0x94, 0x70, 0xB2,
-			0x14, 0x5B, 0x13, 0x80, 0xEA, 0xD8, 0x8D, 0x37,
-			0xFD, 0x70, 0xA8, 0x83, 0xE8, 0x2B, 0x88, 0x1E,
-			0xBA, 0x94, 0x3F, 0xF6, 0xB3, 0x1F, 0xDE, 0x34,
-			0xF3, 0x5B, 0x80, 0xE9, 0xAB, 0xF5, 0x1C, 0x29,
-			0xB6, 0xD9, 0x76, 0x2B, 0x06, 0xC6, 0x74, 0xF1,
-			0x59, 0x5E, 0x9E, 0xA5, 0x7B, 0x2D, 0xD7, 0xF0
-		},
-		.len = 64
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
-	.auth_key = {
-		.data = {
-			0x87, 0x61, 0x54, 0x53, 0xC4, 0x6D, 0xDD, 0x51,
-			0xE1, 0x9F, 0x86, 0x64, 0x39, 0x0A, 0xE6, 0x59
-		},
-		.len = 16
-	},
-	.digest = {
-		.data = {
-			0xCA, 0x33, 0xB3, 0x3B, 0x16, 0x94, 0xAA, 0x55,
-			0x36, 0x6B, 0x45, 0x46
-		},
-		.len = 12,
-		.truncated_len = 12
-	}
-};
-
-/** AES-256-CTR SHA1 test vector */
-static const struct aes_test_data aes_test_data_3 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
-	.cipher_key = {
-		.data = {
-			0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE,
-			0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81,
-			0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7,
-			0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4
-		},
-		.len = 32
-	},
-	.iv = {
-		.data = {
-			0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
-			0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
-			0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
-			0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
-			0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
-			0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
-			0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
-			0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
-			0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10
-		},
-		.len = 64
-	},
-	.ciphertext = {
-		.data = {
-			0x60, 0x1E, 0xC3, 0x13, 0x77, 0x57, 0x89, 0xA5,
-			0xB7, 0xA7, 0xF5, 0x04, 0xBB, 0xF3, 0xD2, 0x28,
-			0xF4, 0x43, 0xE3, 0xCA, 0x4D, 0x62, 0xB5, 0x9A,
-			0xCA, 0x84, 0xE9, 0x90, 0xCA, 0xCA, 0xF5, 0xC5,
-			0x2B, 0x09, 0x30, 0xDA, 0xA2, 0x3D, 0xE9, 0x4C,
-			0xE8, 0x70, 0x17, 0xBA, 0x2D, 0x84, 0x98, 0x8D,
-			0xDF, 0xC9, 0xC5, 0x8D, 0xB6, 0x7A, 0xAD, 0xA6,
-			0x13, 0xC2, 0xDD, 0x08, 0x45, 0x79, 0x41, 0xA6
-		},
-		.len = 64
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
-	.auth_key = {
-		.data = {
-			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
-			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
-			0xDE, 0xF4, 0xDE, 0xAD
-		},
-		.len = 20
-	},
-	.digest = {
-		.data = {
-			0x3B, 0x1A, 0x9D, 0x82, 0x35, 0xD5, 0xDD, 0x64,
-			0xCC, 0x1B, 0xA9, 0xC0, 0xEB, 0xE9, 0x42, 0x16,
-			0xE7, 0x87, 0xA3, 0xEF
-		},
-		.len = 20,
-		.truncated_len = 12
-	}
-};
-
-/** AES-128-CBC SHA1 test vector */
-static const struct aes_test_data aes_test_data_4 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
-	.cipher_key = {
-		.data = {
-			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
-			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
-		},
-		.len = 16
-	},
-	.iv = {
-		.data = {
-			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			"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."
-		},
-		.len = 512
-	},
-	.ciphertext = {
-		.data = {
-			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
-		},
-		.len = 512
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
-	.auth_key = {
-		.data = {
-			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
-			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
-			0xDE, 0xF4, 0xDE, 0xAD
-		},
-		.len = 20
-	},
-	.digest = {
-		.data = {
-			0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
-			0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
-			0x18, 0x8C, 0x1D, 0x32
-		},
-		.len = 20,
-		.truncated_len = 12
-	}
-};
-
-/** AES-128-CBC SHA256 test vector */
-static const struct aes_test_data aes_test_data_5 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
-	.cipher_key = {
-		.data = {
-			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
-			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
-		},
-		.len = 16
-	},
-	.iv = {
-		.data = {
-			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			"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."
-		},
-		.len = 512
-	},
-	.ciphertext = {
-		.data = {
-			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
-		},
-		.len = 512
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
-	.auth_key = {
-		.data = {
-			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
-		},
-		.len = 32
-	},
-	.digest = {
-		.data = {
-			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
-		},
-		.len = 32,
-		.truncated_len = 16
-	}
-};
-
-/** AES-128-CBC SHA512 test vector */
-static const struct aes_test_data aes_test_data_6 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
-	.cipher_key = {
-		.data = {
-			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
-			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
-		},
-		.len = 16
-	},
-	.iv = {
-		.data = {
-			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			"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."
-		},
-		.len = 512
-	},
-	.ciphertext = {
-		.data = {
-			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
-		},
-		.len = 512
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
-	.auth_key = {
-		.data = {
-			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
-		},
-		.len = 64
-	},
-	.digest = {
-		.data = {
-			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
-		},
-		.len = 64,
-		.truncated_len = 32
-	}
-};
-
-/** AES-128-CBC XCBC test vector */
-static const struct aes_test_data aes_test_data_7 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
-	.cipher_key = {
-		.data = {
-			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
-			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
-		},
-		.len = 16
-	},
-	.iv = {
-		.data = {
-			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			"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."
-		},
-		.len = 512
-	},
-	.ciphertext = {
-		.data = {
-			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
-		},
-		.len = 512
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
-	.auth_key = {
-		.data = {
-			0x87, 0x61, 0x54, 0x53, 0xC4, 0x6D, 0xDD, 0x51,
-			0xE1, 0x9F, 0x86, 0x64, 0x39, 0x0A, 0xE6, 0x59
-		},
-		.len = 16
-	},
-	.digest = {
-		.data = {
-			0xE0, 0xAC, 0x9A, 0xC4, 0x22, 0x64, 0x35, 0x89,
-			0x77, 0x1D, 0x8B, 0x75
-		},
-		.len = 12,
-		.truncated_len = 12
-	}
-};
-
-/** AES-128-CBC SHA224 test vector */
-static const struct aes_test_data aes_test_data_8 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
-	.cipher_key = {
-		.data = {
-			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
-			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
-		},
-		.len = 16
-	},
-	.iv = {
-		.data = {
-			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			"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."
-		},
-		.len = 512
-	},
-	.ciphertext = {
-		.data = {
-			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
-		},
-		.len = 512
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
-	.auth_key = {
-		.data = {
-			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
-		},
-		.len = 64
-	},
-	.digest = {
-		.data = {
-			0xA3, 0xCA, 0xC7, 0x1D, 0xA8, 0x61, 0x30, 0x98,
-			0x3B, 0x8F, 0x01, 0x19, 0xAE, 0x8D, 0xBD, 0x34,
-			0x40, 0x63, 0xA8, 0x2F, 0xDF, 0x85, 0x2B, 0x7F,
-			0x63, 0x7C, 0xDD, 0xB7
-		},
-		.len = 28,
-		.truncated_len = 14
-	}
-};
-
-/** AES-128-CBC SHA384 test vector */
-static const struct aes_test_data aes_test_data_9 = {
-	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
-	.cipher_key = {
-		.data = {
-			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
-			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
-		},
-		.len = 16
-	},
-	.iv = {
-		.data = {
-			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
-		},
-		.len = 16
-	},
-	.plaintext = {
-		.data = {
-			"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."
-		},
-		.len = 512
-	},
-	.ciphertext = {
-		.data = {
-			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
-		},
-		.len = 512
-	},
-	.auth_algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
-	.auth_key = {
-		.data = {
-			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,
-			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
-		},
-		.len = 128
-	},
-	.digest = {
-		.data = {
-			0x23, 0x60, 0xC8, 0xB1, 0x2D, 0x6C, 0x1E, 0x72,
-			0x25, 0xAB, 0xF9, 0xC3, 0x9A, 0xA9, 0x4F, 0x8C,
-			0x56, 0x38, 0x65, 0x0E, 0x74, 0xD5, 0x45, 0x9D,
-			0xA3, 0xFD, 0x7E, 0x6D, 0x9E, 0x74, 0x88, 0x9D,
-			0xA7, 0x12, 0x9D, 0xD8, 0x81, 0x3C, 0x86, 0x2F,
-			0x4D, 0xF9, 0x6F, 0x0A, 0xB0, 0xC9, 0xEB, 0x0B
-		},
-		.len = 48,
-		.truncated_len = 24
-	}
-};
-
-#endif /* TEST_CRYPTODEV_AES_H_ */
diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h
new file mode 100644
index 0000000..92c0cc2
--- /dev/null
+++ b/app/test/test_cryptodev_aes_test_vectors.h
@@ -0,0 +1,797 @@
+/*
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2016 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_AES_TEST_VECTORS_H_
+#define TEST_CRYPTODEV_AES_TEST_VECTORS_H_
+
+/* test vectors */
+static const uint8_t plaintext_aes128ctr[] = {
+	0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
+	0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
+	0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
+	0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
+	0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
+	0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
+	0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
+	0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10
+};
+
+static const uint8_t ciphertext64_aes128ctr[] = {
+	0x87, 0x4D, 0x61, 0x91, 0xB6, 0x20, 0xE3, 0x26,
+	0x1B, 0xEF, 0x68, 0x64, 0x99, 0x0D, 0xB6, 0xCE,
+	0x98, 0x06, 0xF6, 0x6B, 0x79, 0x70, 0xFD, 0xFF,
+	0x86, 0x17, 0x18, 0x7B, 0xB9, 0xFF, 0xFD, 0xFF,
+	0x5A, 0xE4, 0xDF, 0x3E, 0xDB, 0xD5, 0xD3, 0x5E,
+	0x5B, 0x4F, 0x09, 0x02, 0x0D, 0xB0, 0x3E, 0xAB,
+	0x1E, 0x03, 0x1D, 0xDA, 0x2F, 0xBE, 0x03, 0xD1,
+	0x79, 0x21, 0x70, 0xA0, 0xF3, 0x00, 0x9C, 0xEE
+};
+
+static const uint8_t plaintext_aes192ctr[] = {
+	0x01, 0x0F, 0x10, 0x1F, 0x20, 0x1C, 0x0E, 0xB8,
+	0xFB, 0x5C, 0xCD, 0xCC, 0x1F, 0xF9, 0xAF, 0x0B,
+	0x95, 0x03, 0x74, 0x99, 0x49, 0xE7, 0x62, 0x55,
+	0xDA, 0xEA, 0x13, 0x20, 0x1D, 0xC6, 0xCC, 0xCC,
+	0xD1, 0x70, 0x75, 0x47, 0x02, 0x2F, 0xFB, 0x86,
+	0xBB, 0x6B, 0x23, 0xD2, 0xC9, 0x74, 0xD7, 0x7B,
+	0x08, 0x03, 0x3B, 0x79, 0x39, 0xBB, 0x91, 0x29,
+	0xDA, 0x14, 0x39, 0x8D, 0xFF, 0x81, 0x50, 0x96,
+};
+
+static const uint8_t ciphertext64_aes192ctr[] = {
+	0x4A, 0x6C, 0xC8, 0xCC, 0x96, 0x2A, 0x13, 0x84,
+	0x1C, 0x36, 0x88, 0xE9, 0xE5, 0x94, 0x70, 0xB2,
+	0x14, 0x5B, 0x13, 0x80, 0xEA, 0xD8, 0x8D, 0x37,
+	0xFD, 0x70, 0xA8, 0x83, 0xE8, 0x2B, 0x88, 0x1E,
+	0xBA, 0x94, 0x3F, 0xF6, 0xB3, 0x1F, 0xDE, 0x34,
+	0xF3, 0x5B, 0x80, 0xE9, 0xAB, 0xF5, 0x1C, 0x29,
+	0xB6, 0xD9, 0x76, 0x2B, 0x06, 0xC6, 0x74, 0xF1,
+	0x59, 0x5E, 0x9E, 0xA5, 0x7B, 0x2D, 0xD7, 0xF0
+};
+
+static const uint8_t plaintext_aes256ctr[] = {
+	0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
+	0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
+	0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
+	0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
+	0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
+	0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
+	0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
+	0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10
+};
+
+static const uint8_t ciphertext64_aes256ctr[] = {
+	0x60, 0x1E, 0xC3, 0x13, 0x77, 0x57, 0x89, 0xA5,
+	0xB7, 0xA7, 0xF5, 0x04, 0xBB, 0xF3, 0xD2, 0x28,
+	0xF4, 0x43, 0xE3, 0xCA, 0x4D, 0x62, 0xB5, 0x9A,
+	0xCA, 0x84, 0xE9, 0x90, 0xCA, 0xCA, 0xF5, 0xC5,
+	0x2B, 0x09, 0x30, 0xDA, 0xA2, 0x3D, 0xE9, 0x4C,
+	0xE8, 0x70, 0x17, 0xBA, 0x2D, 0x84, 0x98, 0x8D,
+	0xDF, 0xC9, 0xC5, 0x8D, 0xB6, 0x7A, 0xAD, 0xA6,
+	0x13, 0xC2, 0xDD, 0x08, 0x45, 0x79, 0x41, 0xA6
+};
+
+static const uint8_t plaintext_aes_common[] = {
+	"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."
+};
+
+static const uint8_t ciphertext512_aes128cbc[] = {
+	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
+};
+
+/* AES128-CTR-SHA1 test vector */
+static const struct blockcipher_test_data aes_test_data_1 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
+	.cipher_key = {
+		.data = {
+			0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
+			0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
+		},
+		.len = 16
+	},
+	.iv = {
+		.data = {
+			0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
+			0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes128ctr,
+		.len = 64
+	},
+	.ciphertext = {
+		.data = ciphertext64_aes128ctr,
+		.len = 64
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
+	.auth_key = {
+		.data = {
+			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
+			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
+			0xDE, 0xF4, 0xDE, 0xAD
+		},
+		.len = 20
+	},
+	.digest = {
+		.data = {
+			0x9B, 0x6F, 0x0C, 0x43, 0xF5, 0xC1, 0x3E, 0xB0,
+			0xB1, 0x70, 0xB8, 0x2B, 0x33, 0x09, 0xD2, 0xB2,
+			0x56, 0x20, 0xFB, 0xFE
+		},
+		.len = 20,
+		.truncated_len = 12
+	}
+};
+
+/** AES-192-CTR XCBC test vector */
+static const struct blockcipher_test_data aes_test_data_2 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
+	.cipher_key = {
+		.data = {
+			0xCB, 0xC5, 0xED, 0x5B, 0xE7, 0x7C, 0xBD, 0x8C,
+			0x50, 0xD9, 0x30, 0xF2, 0xB5, 0x6A, 0x0E, 0x5F,
+			0xAA, 0xAE, 0xAD, 0xA2, 0x1F, 0x49, 0x52, 0xD4
+		},
+		.len = 24
+	},
+	.iv = {
+		.data = {
+			0x3F, 0x69, 0xA8, 0xCD, 0xE8, 0xF0, 0xEF, 0x40,
+			0xB8, 0x7A, 0x4B, 0xED, 0x2B, 0xAF, 0xBF, 0x57
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes192ctr,
+		.len = 64
+	},
+	.ciphertext = {
+		.data = ciphertext64_aes192ctr,
+		.len = 64
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
+	.auth_key = {
+		.data = {
+			0x87, 0x61, 0x54, 0x53, 0xC4, 0x6D, 0xDD, 0x51,
+			0xE1, 0x9F, 0x86, 0x64, 0x39, 0x0A, 0xE6, 0x59
+		},
+		.len = 16
+	},
+	.digest = {
+		.data = {
+			0xCA, 0x33, 0xB3, 0x3B, 0x16, 0x94, 0xAA, 0x55,
+			0x36, 0x6B, 0x45, 0x46
+		},
+		.len = 12,
+		.truncated_len = 12
+	}
+};
+
+/** AES-256-CTR SHA1 test vector */
+static const struct blockcipher_test_data aes_test_data_3 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
+	.cipher_key = {
+		.data = {
+			0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE,
+			0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81,
+			0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7,
+			0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4
+		},
+		.len = 32
+	},
+	.iv = {
+		.data = {
+			0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
+			0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes256ctr,
+		.len = 64
+	},
+	.ciphertext = {
+		.data = ciphertext64_aes256ctr,
+		.len = 64
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
+	.auth_key = {
+		.data = {
+			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
+			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
+			0xDE, 0xF4, 0xDE, 0xAD
+		},
+		.len = 20
+	},
+	.digest = {
+		.data = {
+			0x3B, 0x1A, 0x9D, 0x82, 0x35, 0xD5, 0xDD, 0x64,
+			0xCC, 0x1B, 0xA9, 0xC0, 0xEB, 0xE9, 0x42, 0x16,
+			0xE7, 0x87, 0xA3, 0xEF
+		},
+		.len = 20,
+		.truncated_len = 12
+	}
+};
+
+/** AES-128-CBC SHA1 test vector */
+static const struct blockcipher_test_data aes_test_data_4 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
+	.cipher_key = {
+		.data = {
+			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
+			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
+		},
+		.len = 16
+	},
+	.iv = {
+		.data = {
+			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes_common,
+		.len = 512
+	},
+	.ciphertext = {
+		.data = ciphertext512_aes128cbc,
+		.len = 512
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
+	.auth_key = {
+		.data = {
+			0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
+			0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
+			0xDE, 0xF4, 0xDE, 0xAD
+		},
+		.len = 20
+	},
+	.digest = {
+		.data = {
+			0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
+			0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
+			0x18, 0x8C, 0x1D, 0x32
+		},
+		.len = 20,
+		.truncated_len = 12
+	}
+};
+
+/** AES-128-CBC SHA256 test vector */
+static const struct blockcipher_test_data aes_test_data_5 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
+	.cipher_key = {
+		.data = {
+			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
+			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
+		},
+		.len = 16
+	},
+	.iv = {
+		.data = {
+			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes_common,
+		.len = 512
+	},
+	.ciphertext = {
+		.data = ciphertext512_aes128cbc,
+		.len = 512
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
+	.auth_key = {
+		.data = {
+			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
+		},
+		.len = 32
+	},
+	.digest = {
+		.data = {
+			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
+		},
+		.len = 32,
+		.truncated_len = 16
+	}
+};
+
+/** AES-128-CBC SHA512 test vector */
+static const struct blockcipher_test_data aes_test_data_6 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
+	.cipher_key = {
+		.data = {
+			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
+			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
+		},
+		.len = 16
+	},
+	.iv = {
+		.data = {
+			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes_common,
+		.len = 512
+	},
+	.ciphertext = {
+		.data = ciphertext512_aes128cbc,
+		.len = 512
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
+	.auth_key = {
+		.data = {
+			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
+		},
+		.len = 64
+	},
+	.digest = {
+		.data = {
+			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
+		},
+		.len = 64,
+		.truncated_len = 32
+	}
+};
+
+/** AES-128-CBC XCBC test vector */
+static const struct blockcipher_test_data aes_test_data_7 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
+	.cipher_key = {
+		.data = {
+			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
+			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
+		},
+		.len = 16
+	},
+	.iv = {
+		.data = {
+			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes_common,
+		.len = 512
+	},
+	.ciphertext = {
+		.data = ciphertext512_aes128cbc,
+		.len = 512
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
+	.auth_key = {
+		.data = {
+			0x87, 0x61, 0x54, 0x53, 0xC4, 0x6D, 0xDD, 0x51,
+			0xE1, 0x9F, 0x86, 0x64, 0x39, 0x0A, 0xE6, 0x59
+		},
+		.len = 16
+	},
+	.digest = {
+		.data = {
+			0xE0, 0xAC, 0x9A, 0xC4, 0x22, 0x64, 0x35, 0x89,
+			0x77, 0x1D, 0x8B, 0x75
+		},
+		.len = 12,
+		.truncated_len = 12
+	}
+};
+
+/** AES-128-CBC SHA224 test vector */
+static const struct blockcipher_test_data aes_test_data_8 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
+	.cipher_key = {
+		.data = {
+			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
+			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
+		},
+		.len = 16
+	},
+	.iv = {
+		.data = {
+			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes_common,
+		.len = 512
+	},
+	.ciphertext = {
+		.data = ciphertext512_aes128cbc,
+		.len = 512
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
+	.auth_key = {
+		.data = {
+			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
+		},
+		.len = 64
+	},
+	.digest = {
+		.data = {
+			0xA3, 0xCA, 0xC7, 0x1D, 0xA8, 0x61, 0x30, 0x98,
+			0x3B, 0x8F, 0x01, 0x19, 0xAE, 0x8D, 0xBD, 0x34,
+			0x40, 0x63, 0xA8, 0x2F, 0xDF, 0x85, 0x2B, 0x7F,
+			0x63, 0x7C, 0xDD, 0xB7
+		},
+		.len = 28,
+		.truncated_len = 14
+	}
+};
+
+/** AES-128-CBC SHA384 test vector */
+static const struct blockcipher_test_data aes_test_data_9 = {
+	.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
+	.cipher_key = {
+		.data = {
+			0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
+			0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
+		},
+		.len = 16
+	},
+	.iv = {
+		.data = {
+			0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+			0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+		},
+		.len = 16
+	},
+	.plaintext = {
+		.data = plaintext_aes_common,
+		.len = 512
+	},
+	.ciphertext = {
+		.data = ciphertext512_aes128cbc,
+		.len = 512
+	},
+	.auth_algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
+	.auth_key = {
+		.data = {
+			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,
+			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
+		},
+		.len = 128
+	},
+	.digest = {
+		.data = {
+			0x23, 0x60, 0xC8, 0xB1, 0x2D, 0x6C, 0x1E, 0x72,
+			0x25, 0xAB, 0xF9, 0xC3, 0x9A, 0xA9, 0x4F, 0x8C,
+			0x56, 0x38, 0x65, 0x0E, 0x74, 0xD5, 0x45, 0x9D,
+			0xA3, 0xFD, 0x7E, 0x6D, 0x9E, 0x74, 0x88, 0x9D,
+			0xA7, 0x12, 0x9D, 0xD8, 0x81, 0x3C, 0x86, 0x2F,
+			0x4D, 0xF9, 0x6F, 0x0A, 0xB0, 0xC9, 0xEB, 0x0B
+		},
+		.len = 48,
+		.truncated_len = 24
+	}
+};
+
+static const struct blockcipher_test_case aes_chain_test_cases[] = {
+	{
+		.test_descr = "AES-128-CTR HMAC-SHA1 Encryption Digest",
+		.test_data = &aes_test_data_1,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CTR HMAC-SHA1 Decryption Digest "
+			"Verify",
+		.test_data = &aes_test_data_1,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-192-CTR XCBC Encryption Digest",
+		.test_data = &aes_test_data_2,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-192-CTR XCBC Decryption Digest Verify",
+		.test_data = &aes_test_data_2,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-256-CTR HMAC-SHA1 Encryption Digest",
+		.test_data = &aes_test_data_3,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-256-CTR HMAC-SHA1 Decryption Digest "
+			"Verify",
+		.test_data = &aes_test_data_3,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA1 Encryption Digest",
+		.test_data = &aes_test_data_4,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA1 Decryption Digest "
+			"Verify",
+		.test_data = &aes_test_data_4,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA256 Encryption Digest",
+		.test_data = &aes_test_data_5,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA256 Decryption Digest "
+			"Verify",
+		.test_data = &aes_test_data_5,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA512 Encryption Digest",
+		.test_data = &aes_test_data_6,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA512 Encryption Digest "
+			"Sessionless",
+		.test_data = &aes_test_data_6,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA512 Decryption Digest "
+			"Verify",
+		.test_data = &aes_test_data_6,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC XCBC Encryption Digest",
+		.test_data = &aes_test_data_7,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC XCBC Decryption Digest Verify",
+		.test_data = &aes_test_data_7,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA1 Encryption Digest "
+			"OOP",
+		.test_data = &aes_test_data_4,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA1 Decryption Digest "
+			"Verify OOP",
+		.test_data = &aes_test_data_4,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA224 Encryption Digest",
+		.test_data = &aes_test_data_8,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA224 Decryption Digest "
+			"Verify",
+		.test_data = &aes_test_data_8,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA384 Encryption Digest",
+		.test_data = &aes_test_data_9,
+		.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+	{
+		.test_descr = "AES-128-CBC HMAC-SHA384 Decryption Digest "
+			"Verify",
+		.test_data = &aes_test_data_9,
+		.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
+	},
+};
+
+#endif /* TEST_CRYPTODEV_AES_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c
new file mode 100644
index 0000000..a1d8c8b
--- /dev/null
+++ b/app/test/test_cryptodev_blockcipher.c
@@ -0,0 +1,516 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2015-2016 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_crypto.h>
+#include <rte_cryptodev.h>
+#include <rte_cryptodev_pmd.h>
+
+#include "test.h"
+#include "test_cryptodev_blockcipher.h"
+#include "test_cryptodev_aes_test_vectors.h"
+
+static int
+test_blockcipher_one_case(const struct blockcipher_test_case *t,
+	struct rte_mempool *mbuf_pool,
+	struct rte_mempool *op_mpool,
+	uint8_t dev_id,
+	enum rte_cryptodev_type cryptodev_type,
+	char *test_msg)
+{
+	struct rte_mbuf *ibuf = NULL;
+	struct rte_mbuf *obuf = NULL;
+	struct rte_mbuf *iobuf;
+	struct rte_crypto_sym_xform *cipher_xform = NULL;
+	struct rte_crypto_sym_xform *auth_xform = NULL;
+	struct rte_crypto_sym_xform *init_xform = NULL;
+	struct rte_crypto_sym_op *sym_op = NULL;
+	struct rte_crypto_op *op = NULL;
+	struct rte_cryptodev_sym_session *sess = NULL;
+
+	int status = TEST_SUCCESS;
+	const struct blockcipher_test_data *tdata = t->test_data;
+	uint8_t cipher_key[tdata->cipher_key.len];
+	uint8_t auth_key[tdata->auth_key.len];
+	uint32_t buf_len = tdata->ciphertext.len;
+	uint32_t digest_len = 0;
+	char *buf_p = NULL;
+
+	if (tdata->cipher_key.len)
+		memcpy(cipher_key, tdata->cipher_key.data,
+			tdata->cipher_key.len);
+	if (tdata->auth_key.len)
+		memcpy(auth_key, tdata->auth_key.data,
+			tdata->auth_key.len);
+
+	switch (cryptodev_type) {
+	case RTE_CRYPTODEV_QAT_SYM_PMD:
+		digest_len = tdata->digest.len;
+		break;
+	case RTE_CRYPTODEV_AESNI_MB_PMD:
+		digest_len = tdata->digest.truncated_len;
+		break;
+	default:
+		snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
+			"line %u FAILED: %s",
+			__LINE__, "Unsupported PMD type");
+		status = TEST_FAILED;
+		goto error_exit;
+	}
+
+	/* preparing data */
+	ibuf = rte_pktmbuf_alloc(mbuf_pool);
+	if (!ibuf) {
+		snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
+			"line %u FAILED: %s",
+			__LINE__, "Allocation of rte_mbuf failed");
+		status = TEST_FAILED;
+		goto error_exit;
+	}
+
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER)
+		buf_len += tdata->iv.len;
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH)
+		buf_len += digest_len;
+
+	buf_p = rte_pktmbuf_append(ibuf, buf_len);
+	if (!buf_p) {
+		snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
+			"line %u FAILED: %s",
+			__LINE__, "No room to append mbuf");
+		status = TEST_FAILED;
+		goto error_exit;
+	}
+
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
+		rte_memcpy(buf_p, tdata->iv.data, tdata->iv.len);
+		buf_p += tdata->iv.len;
+	}
+
+	/* only encryption requires plaintext.data input,
+	 * decryption/(digest gen)/(digest verify) use ciphertext.data
+	 * to be computed
+	 */
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_ENCRYPT) {
+		rte_memcpy(buf_p, tdata->plaintext.data,
+			tdata->plaintext.len);
+		buf_p += tdata->plaintext.len;
+	} else {
+		rte_memcpy(buf_p, tdata->ciphertext.data,
+			tdata->ciphertext.len);
+		buf_p += tdata->ciphertext.len;
+	}
+
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
+		rte_memcpy(buf_p, tdata->digest.data, digest_len);
+	else
+		memset(buf_p, 0, digest_len);
+
+	if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP) {
+		obuf = rte_pktmbuf_alloc(mbuf_pool);
+		if (!obuf) {
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: %s", __LINE__,
+				"Allocation of rte_mbuf failed");
+			status = TEST_FAILED;
+			goto error_exit;
+		}
+
+		buf_p = rte_pktmbuf_append(obuf, buf_len);
+		if (!buf_p) {
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: %s", __LINE__,
+				"No room to append mbuf");
+			status = TEST_FAILED;
+			goto error_exit;
+		}
+		memset(buf_p, 0, buf_len);
+	}
+
+	/* Generate Crypto op data structure */
+	op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_SYMMETRIC);
+	if (!op) {
+		snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
+			"line %u FAILED: %s",
+			__LINE__, "Failed to allocate symmetric crypto "
+			"operation struct");
+		status = TEST_FAILED;
+		goto error_exit;
+	}
+
+	sym_op = op->sym;
+
+	sym_op->m_src = ibuf;
+
+	if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP) {
+		sym_op->m_dst = obuf;
+		iobuf = obuf;
+	} else {
+		sym_op->m_dst = NULL;
+		iobuf = ibuf;
+	}
+
+	/* sessionless op requires allocate xform using
+	 * rte_crypto_op_sym_xforms_alloc(), otherwise rte_zmalloc()
+	 * is used
+	 */
+	if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS) {
+		uint32_t n_xforms = 0;
+
+		if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER)
+			n_xforms++;
+		if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH)
+			n_xforms++;
+
+		if (rte_crypto_op_sym_xforms_alloc(op, n_xforms)
+			== NULL) {
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: %s", __LINE__, "Failed to "
+				"allocate space for crypto transforms");
+			status = TEST_FAILED;
+			goto error_exit;
+		}
+	} else {
+		cipher_xform = rte_zmalloc(NULL,
+			sizeof(struct rte_crypto_sym_xform), 0);
+
+		auth_xform = rte_zmalloc(NULL,
+			sizeof(struct rte_crypto_sym_xform), 0);
+
+		if (!cipher_xform || !auth_xform) {
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: %s", __LINE__, "Failed to "
+				"allocate memory for crypto transforms");
+			status = TEST_FAILED;
+			goto error_exit;
+		}
+	}
+
+	/* preparing xform, for sessioned op, init_xform is initialized
+	 * here and later as param in rte_cryptodev_sym_session_create() call
+	 */
+	if (t->op_mask == BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN) {
+		if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS) {
+			cipher_xform = op->sym->xform;
+			auth_xform = cipher_xform->next;
+			auth_xform->next = NULL;
+		} else {
+			cipher_xform->next = auth_xform;
+			auth_xform->next = NULL;
+			init_xform = cipher_xform;
+		}
+	} else if (t->op_mask == BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC) {
+		if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS) {
+			auth_xform = op->sym->xform;
+			cipher_xform = auth_xform->next;
+			cipher_xform->next = NULL;
+		} else {
+			auth_xform->next = cipher_xform;
+			cipher_xform->next = NULL;
+			init_xform = auth_xform;
+		}
+	} else if ((t->op_mask == BLOCKCIPHER_TEST_OP_ENCRYPT) ||
+			(t->op_mask == BLOCKCIPHER_TEST_OP_DECRYPT)) {
+		if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)
+			cipher_xform = op->sym->xform;
+		else
+			init_xform = cipher_xform;
+		cipher_xform->next = NULL;
+	} else if ((t->op_mask == BLOCKCIPHER_TEST_OP_AUTH_GEN) ||
+			(t->op_mask == BLOCKCIPHER_TEST_OP_AUTH_VERIFY)) {
+		if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)
+			auth_xform = op->sym->xform;
+		else
+			init_xform = auth_xform;
+		auth_xform->next = NULL;
+	} else {
+		snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
+			"line %u FAILED: %s",
+			__LINE__, "Unrecognized operation");
+		status = TEST_FAILED;
+		goto error_exit;
+	}
+
+	/*configure xforms & sym_op cipher and auth data*/
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
+		cipher_xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+		cipher_xform->cipher.algo = tdata->crypto_algo;
+		if (t->op_mask & BLOCKCIPHER_TEST_OP_ENCRYPT)
+			cipher_xform->cipher.op =
+				RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+		else
+			cipher_xform->cipher.op =
+				RTE_CRYPTO_CIPHER_OP_DECRYPT;
+		cipher_xform->cipher.key.data = cipher_key;
+		cipher_xform->cipher.key.length = tdata->cipher_key.len;
+
+		sym_op->cipher.data.offset = tdata->iv.len;
+		sym_op->cipher.data.length = tdata->ciphertext.len;
+		sym_op->cipher.iv.data = rte_pktmbuf_mtod(sym_op->m_src,
+			uint8_t *);
+		sym_op->cipher.iv.length = tdata->iv.len;
+		sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(
+			sym_op->m_src);
+	}
+
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH) {
+		uint32_t auth_data_offset = 0;
+		uint32_t digest_offset = tdata->ciphertext.len;
+
+		if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
+			digest_offset += tdata->iv.len;
+			auth_data_offset += tdata->iv.len;
+		}
+
+		auth_xform->type = RTE_CRYPTO_SYM_XFORM_AUTH;
+		auth_xform->auth.algo = tdata->auth_algo;
+		auth_xform->auth.key.length = tdata->auth_key.len;
+		auth_xform->auth.key.data = auth_key;
+		auth_xform->auth.digest_length = digest_len;
+
+		if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_GEN) {
+			auth_xform->auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+			sym_op->auth.digest.data = rte_pktmbuf_mtod_offset
+				(iobuf, uint8_t *, digest_offset);
+			sym_op->auth.digest.phys_addr =
+				rte_pktmbuf_mtophys_offset(iobuf,
+					digest_offset);
+		} else {
+			auth_xform->auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
+			sym_op->auth.digest.data = rte_pktmbuf_mtod_offset
+				(sym_op->m_src, uint8_t *, digest_offset);
+			sym_op->auth.digest.phys_addr =
+				rte_pktmbuf_mtophys_offset(sym_op->m_src,
+					digest_offset);
+		}
+
+		sym_op->auth.data.offset = auth_data_offset;
+		sym_op->auth.data.length = tdata->ciphertext.len;
+		sym_op->auth.digest.length = digest_len;
+	}
+
+	/* create session for sessioned op */
+	if (!(t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)) {
+		sess = rte_cryptodev_sym_session_create(dev_id,
+			init_xform);
+		if (!sess) {
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: %s", __LINE__,
+				"Session creation failed");
+			status = TEST_FAILED;
+			goto error_exit;
+		}
+
+		/* attach symmetric crypto session to crypto operations */
+		rte_crypto_op_attach_sym_session(op, sess);
+	}
+
+	/* Process crypto operation */
+	if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
+		snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
+			"line %u FAILED: %s",
+			__LINE__, "Error sending packet for encryption");
+		status = TEST_FAILED;
+		goto error_exit;
+	}
+
+	op = NULL;
+
+	while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
+		rte_pause();
+
+	if (!op) {
+		snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
+			"line %u FAILED: %s",
+			__LINE__, "Failed to process sym crypto op");
+		status = TEST_FAILED;
+		goto error_exit;
+	}
+
+	TEST_HEXDUMP(stdout, "m_src:",
+		rte_pktmbuf_mtod(sym_op->m_src, uint8_t *), buf_len);
+	if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP)
+		TEST_HEXDUMP(stdout, "m_dst:",
+			rte_pktmbuf_mtod(sym_op->m_dst, uint8_t *),
+			buf_len);
+
+	/* Verify results */
+	if (op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
+		if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: Digest verification failed "
+				"(0x%X)", __LINE__, op->status);
+		else
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: Digest verification failed "
+				"(0x%X)", __LINE__, op->status);
+		status = TEST_FAILED;
+		goto error_exit;
+	}
+
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
+		uint8_t *crypto_res;
+		const uint8_t *compare_ref;
+		uint32_t compare_len;
+
+		crypto_res = rte_pktmbuf_mtod_offset(iobuf, uint8_t *,
+			tdata->iv.len);
+
+		if (t->op_mask & BLOCKCIPHER_TEST_OP_ENCRYPT) {
+			compare_ref = tdata->ciphertext.data;
+			compare_len = tdata->ciphertext.len;
+		} else {
+			compare_ref = tdata->plaintext.data;
+			compare_len = tdata->plaintext.len;
+		}
+
+		if (memcmp(crypto_res, compare_ref, compare_len)) {
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: %s", __LINE__,
+				"Crypto data not as expected");
+			status = TEST_FAILED;
+			goto error_exit;
+		}
+	}
+
+	if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_GEN) {
+		uint8_t *auth_res;
+
+		if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER)
+			auth_res = rte_pktmbuf_mtod_offset(iobuf,
+				uint8_t *,
+				tdata->iv.len + tdata->ciphertext.len);
+		else
+			auth_res = rte_pktmbuf_mtod_offset(iobuf,
+				uint8_t *, tdata->ciphertext.len);
+
+		if (memcmp(auth_res, tdata->digest.data, digest_len)) {
+			snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
+				"FAILED: %s", __LINE__, "Generated "
+				"digest data not as expected");
+			status = TEST_FAILED;
+			goto error_exit;
+		}
+	}
+
+	snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "PASS");
+
+error_exit:
+	if (!(t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)) {
+		if (sess)
+			rte_cryptodev_sym_session_free(dev_id, sess);
+		if (cipher_xform)
+			rte_free(cipher_xform);
+		if (auth_xform)
+			rte_free(auth_xform);
+	}
+
+	if (op)
+		rte_crypto_op_free(op);
+
+	if (obuf)
+		rte_pktmbuf_free(obuf);
+
+	if (ibuf)
+		rte_pktmbuf_free(ibuf);
+
+	return status;
+}
+
+int
+test_blockcipher_all_tests(struct rte_mempool *mbuf_pool,
+	struct rte_mempool *op_mpool,
+	uint8_t dev_id,
+	enum rte_cryptodev_type cryptodev_type,
+	enum blockcipher_test_type test_type)
+{
+	int status, overall_status = TEST_SUCCESS;
+	uint32_t i, test_index = 0;
+	char test_msg[BLOCKCIPHER_TEST_MSG_LEN + 1];
+	uint32_t n_test_cases = 0;
+	uint32_t target_pmd_mask = 0;
+	const struct blockcipher_test_case *tcs = NULL;
+
+	switch (test_type) {
+	case BLKCIPHER_AES_CHAIN_TYPE:
+		n_test_cases = sizeof(aes_chain_test_cases) /
+		sizeof(aes_chain_test_cases[0]);
+		tcs = aes_chain_test_cases;
+		break;
+	case BLKCIPHER_AES_CIPHERONLY_TYPE:
+	case BLKCIPHER_3DES_CHAIN_TYPE:
+	case BLKCIPHER_3DES_CIPHERONLY_TYPE:
+	case BLKCIPHER_AUTHONLY_TYPE:
+	default:
+		break;
+	}
+
+	switch (cryptodev_type) {
+	case RTE_CRYPTODEV_AESNI_MB_PMD:
+		target_pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB;
+		break;
+	case RTE_CRYPTODEV_QAT_SYM_PMD:
+		target_pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT;
+		break;
+	default:
+		TEST_ASSERT(0, "Unrecognized cryptodev type");
+		break;
+	}
+
+	for (i = 0; i < n_test_cases; i++) {
+		const struct blockcipher_test_case *tc = &tcs[i];
+
+		if (!(tc->pmd_mask & target_pmd_mask))
+			continue;
+
+		status = test_blockcipher_one_case(tc, mbuf_pool, op_mpool,
+			dev_id, cryptodev_type, test_msg);
+
+		printf("  %u) TestCase %s %s\n", test_index ++,
+			tc->test_descr, test_msg);
+
+		if (status != TEST_SUCCESS) {
+			if (overall_status == TEST_SUCCESS)
+				overall_status = status;
+
+			if (tc->feature_mask & BLOCKCIPHER_TEST_FEATURE_STOPPER)
+				break;
+		}
+	}
+
+	return overall_status;
+}
diff --git a/app/test/test_cryptodev_blockcipher.h b/app/test/test_cryptodev_blockcipher.h
new file mode 100644
index 0000000..3e25d4d
--- /dev/null
+++ b/app/test/test_cryptodev_blockcipher.h
@@ -0,0 +1,124 @@
+/*-
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2016 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_BLOCKCIPHER_H_
+#define TEST_CRYPTODEV_BLOCKCIPHER_H_
+
+#ifndef BLOCKCIPHER_TEST_MSG_LEN
+#define BLOCKCIPHER_TEST_MSG_LEN		256
+#endif
+
+#define BLOCKCIPHER_TEST_OP_ENCRYPT		0x01
+#define BLOCKCIPHER_TEST_OP_DECRYPT		0x02
+#define BLOCKCIPHER_TEST_OP_AUTH_GEN	0x04
+#define BLOCKCIPHER_TEST_OP_AUTH_VERIFY	0x08
+
+#define BLOCKCIPHER_TEST_FEATURE_OOP			0x01
+#define BLOCKCIPHER_TEST_FEATURE_SESSIONLESS	0x02
+#define BLOCKCIPHER_TEST_FEATURE_STOPPER	0x04 /* stop upon failing */
+
+#define BLOCKCIPHER_TEST_TARGET_PMD_MB		0x0001 /* Multi-buffer flag */
+#define BLOCKCIPHER_TEST_TARGET_PMD_QAT			0x0002 /* QAT flag */
+
+#define BLOCKCIPHER_TEST_OP_CIPHER	(BLOCKCIPHER_TEST_OP_ENCRYPT | \
+					BLOCKCIPHER_TEST_OP_DECRYPT)
+
+#define BLOCKCIPHER_TEST_OP_AUTH	(BLOCKCIPHER_TEST_OP_AUTH_GEN | \
+					BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
+
+#define BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN	(BLOCKCIPHER_TEST_OP_ENCRYPT | \
+					BLOCKCIPHER_TEST_OP_AUTH_GEN)
+
+#define BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC	(BLOCKCIPHER_TEST_OP_DECRYPT | \
+					BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
+
+enum blockcipher_test_type {
+	BLKCIPHER_AES_CHAIN_TYPE,	/* use aes_chain_test_cases[] */
+	BLKCIPHER_AES_CIPHERONLY_TYPE,	/* use aes_cipheronly_test_cases[] */
+	BLKCIPHER_3DES_CHAIN_TYPE,	/* use triple_des_chain_test_cases[] */
+	BLKCIPHER_3DES_CIPHERONLY_TYPE,	/* triple_des_cipheronly_test_cases[] */
+	BLKCIPHER_AUTHONLY_TYPE		/* use hash_test_cases[] */
+};
+
+struct blockcipher_test_case {
+	const char *test_descr; /* test description */
+	const struct blockcipher_test_data *test_data;
+	uint8_t op_mask; /* operation mask */
+	uint8_t feature_mask;
+	uint32_t pmd_mask;
+};
+
+struct blockcipher_test_data {
+	enum rte_crypto_cipher_algorithm crypto_algo;
+
+	struct {
+		uint8_t data[64];
+		unsigned int len;
+	} cipher_key;
+
+	struct {
+		uint8_t data[64] __rte_aligned(16);
+		unsigned int len;
+	} iv;
+
+	struct {
+		const uint8_t *data;
+		unsigned int len;
+	} plaintext;
+
+	struct {
+		const uint8_t *data;
+		unsigned int len;
+	} ciphertext;
+
+	enum rte_crypto_auth_algorithm auth_algo;
+
+	struct {
+		uint8_t data[128];
+		unsigned int len;
+	} auth_key;
+
+	struct {
+		uint8_t data[128];
+		unsigned int len;		/* for qat */
+		unsigned int truncated_len;	/* for mb */
+	} digest;
+};
+
+int
+test_blockcipher_all_tests(struct rte_mempool *mbuf_pool,
+	struct rte_mempool *op_mpool,
+	uint8_t dev_id,
+	enum rte_cryptodev_type cryptodev_type,
+	enum blockcipher_test_type test_type);
+
+#endif /* TEST_CRYPTODEV_BLOCKCIPHER_H_ */
-- 
2.5.0

  parent reply	other threads:[~2016-10-04 13:20 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-19  8:59 [PATCH v2 0/4] new crypto software based device Michal Jastrzebski
2016-09-19  8:59 ` [PATCH v2 1/4] libcrypto_pmd: initial implementation of SW crypto device Michal Jastrzebski
2016-09-19 22:52   ` De Lara Guarch, Pablo
2016-09-19  8:59 ` [PATCH v2 2/4] lib/cryptodev: added support to libcrypto PMD Michal Jastrzebski
2016-09-19 22:59   ` De Lara Guarch, Pablo
2016-09-19  8:59 ` [PATCH v2 3/4] app/test: added tests for " Michal Jastrzebski
2016-09-19  8:59 ` [PATCH v2 4/4] examples/l2fwd-crypto: updated example " Michal Jastrzebski
2016-09-19 23:58   ` De Lara Guarch, Pablo
2016-09-29 14:14 ` [PATCH v3 0/3] new crypto software based device Slawomir Mrozowicz
2016-09-29 14:14   ` [PATCH v3 1/3] libcrypto_pmd: initial implementation of SW crypto device Slawomir Mrozowicz
2016-09-29 14:14   ` [PATCH v3 2/3] app/test: added tests for libcrypto PMD Slawomir Mrozowicz
2016-09-29 14:39   ` [PATCH v3 3/3] examples/l2fwd-crypto: updated example " Slawomir Mrozowicz
2016-09-30 16:17   ` [PATCH v4 0/5] new crypto software based device Slawomir Mrozowicz
2016-09-30 16:17     ` [PATCH v4 1/5] libcrypto_pmd: initial implementation of SW crypto device Slawomir Mrozowicz
2016-09-30 16:32     ` [PATCH v4 2/5] app/test: cryptodev AES tests rework Slawomir Mrozowicz
2016-09-30 16:32       ` [PATCH v4 3/5] app/test: added tests for libcrypto PMD Slawomir Mrozowicz
2016-09-30 16:32       ` [PATCH v4 4/5] app/test: added big data GMAC test for libcrypto Slawomir Mrozowicz
2016-09-30 17:18         ` Thomas Monjalon
2016-10-03  8:12           ` Mrozowicz, SlawomirX
2016-09-30 16:32       ` [PATCH v4 5/5] examples/l2fwd-crypto: updated example for libcrypto PMD Slawomir Mrozowicz
2016-10-03 14:26     ` [PATCH v5 0/4] new crypto software based device Slawomir Mrozowicz
2016-10-03 14:45       ` [PATCH v5 1/4] libcrypto_pmd: initial implementation of SW crypto device Slawomir Mrozowicz
2016-10-03 15:02       ` [PATCH v5 2/4] app/test: cryptodev AES tests rework Slawomir Mrozowicz
2016-10-03 15:17       ` [PATCH v5 3/4] app/test: added tests for libcrypto PMD Slawomir Mrozowicz
2016-10-03 15:28       ` [PATCH v5 4/4] examples/l2fwd-crypto: updated example " Slawomir Mrozowicz
2016-10-03 22:36       ` [PATCH v5 0/4] new crypto software based device De Lara Guarch, Pablo
2016-10-04 15:11       ` [PATCH v6 " Slawomir Mrozowicz
2016-10-04 15:11         ` [PATCH v6 1/4] libcrypto_pmd: initial implementation of SW crypto device Slawomir Mrozowicz
2016-10-04 15:11         ` Slawomir Mrozowicz [this message]
2016-10-04 15:11         ` [PATCH v6 3/4] app/test: added tests for libcrypto PMD Slawomir Mrozowicz
2016-10-06 13:30           ` Trahe, Fiona
2016-10-06 13:53             ` Azarewicz, PiotrX T
2016-10-04 15:11         ` [PATCH v6 4/4] examples/l2fwd-crypto: updated example " Slawomir Mrozowicz
2016-10-04 23:36         ` [PATCH v6 0/4] new crypto software based device De Lara Guarch, Pablo
2016-10-05  0:05           ` De Lara Guarch, Pablo

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=1475593882-32364-3-git-send-email-slawomirx.mrozowicz@intel.com \
    --to=slawomirx.mrozowicz@intel.com \
    --cc=dev@dpdk.org \
    --cc=fiona.trahe@intel.com \
    --cc=piotrx.t.azarewicz@intel.com \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is 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.