app/test: add libcrypto
[dpdk.git] / app / test / test_cryptodev.c
index 8f03157..9767704 100644 (file)
@@ -45,6 +45,8 @@
 
 #include "test_cryptodev_blockcipher.h"
 #include "test_cryptodev_aes_test_vectors.h"
+#include "test_cryptodev_des_test_vectors.h"
+#include "test_cryptodev_hash_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"
@@ -167,7 +169,7 @@ testsuite_setup(void)
                /* Not already created so create */
                ts_params->mbuf_pool = rte_pktmbuf_pool_create(
                                "CRYPTO_MBUFPOOL",
-                               NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
+                               NUM_MBUFS, MBUF_CACHE_SIZE, 0, UINT16_MAX,
                                rte_socket_id());
                if (ts_params->mbuf_pool == NULL) {
                        RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
@@ -308,6 +310,28 @@ testsuite_setup(void)
                }
        }
 
+       /* Create 2 LIBCRYPTO devices if required */
+       if (gbl_cryptodev_type == RTE_CRYPTODEV_LIBCRYPTO_PMD) {
+#ifndef RTE_LIBRTE_PMD_LIBCRYPTO
+               RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO must be"
+                       " enabled in config file to run this testsuite.\n");
+               return TEST_FAILED;
+#endif
+               nb_devs = rte_cryptodev_count_devtype(
+                               RTE_CRYPTODEV_LIBCRYPTO_PMD);
+               if (nb_devs < 2) {
+                       for (i = nb_devs; i < 2; i++) {
+                               ret = rte_eal_vdev_init(
+                                       RTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD),
+                                       NULL);
+
+                               TEST_ASSERT(ret == 0, "Failed to create "
+                                       "instance %u of pmd : %s", i,
+                                       RTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD));
+                       }
+               }
+       }
+
 #ifndef RTE_LIBRTE_PMD_QAT
        if (gbl_cryptodev_type == RTE_CRYPTODEV_QAT_SYM_PMD) {
                RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_QAT must be enabled "
@@ -877,6 +901,315 @@ static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
        0x18, 0x8c, 0x1d, 0x32
 };
 
+
+/* Multisession Vector context Test */
+/*Begin Session 0 */
+static uint8_t ms_aes_cbc_key0[] = {
+       0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+       0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static uint8_t ms_aes_cbc_iv0[] = {
+       0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+       0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static const uint8_t ms_aes_cbc_cipher0[] = {
+               0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,
+               0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,
+               0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,
+               0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,
+               0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,
+               0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,
+               0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,
+               0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,
+               0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,
+               0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,
+               0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,
+               0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,
+               0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,
+               0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,
+               0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,
+               0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,
+               0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,
+               0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,
+               0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,
+               0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,
+               0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,
+               0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,
+               0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,
+               0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,
+               0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,
+               0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,
+               0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,
+               0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,
+               0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,
+               0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,
+               0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,
+               0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,
+               0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,
+               0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,
+               0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,
+               0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,
+               0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,
+               0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,
+               0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,
+               0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,
+               0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,
+               0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,
+               0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,
+               0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,
+               0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,
+               0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,
+               0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,
+               0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,
+               0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,
+               0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,
+               0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,
+               0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,
+               0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,
+               0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,
+               0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,
+               0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,
+               0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,
+               0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,
+               0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,
+               0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,
+               0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,
+               0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,
+               0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,
+               0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF
+};
+
+
+static  uint8_t ms_hmac_key0[] = {
+               0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
+               0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
+               0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
+               0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
+               0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
+               0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
+               0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
+               0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
+};
+
+static const uint8_t ms_hmac_digest0[] = {
+               0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,
+               0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,
+               0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,
+               0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,
+               0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,
+               0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,
+               0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,
+               0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90
+               };
+
+/* End Session 0 */
+/* Begin session 1 */
+
+static  uint8_t ms_aes_cbc_key1[] = {
+               0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+               0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static  uint8_t ms_aes_cbc_iv1[] = {
+       0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+       0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static const uint8_t ms_aes_cbc_cipher1[] = {
+               0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,
+               0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,
+               0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,
+               0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,
+               0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,
+               0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,
+               0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,
+               0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,
+               0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,
+               0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,
+               0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,
+               0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,
+               0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,
+               0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,
+               0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,
+               0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,
+               0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,
+               0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,
+               0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,
+               0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,
+               0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,
+               0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,
+               0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,
+               0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,
+               0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,
+               0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,
+               0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,
+               0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,
+               0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,
+               0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,
+               0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,
+               0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,
+               0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,
+               0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,
+               0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,
+               0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,
+               0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,
+               0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,
+               0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,
+               0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,
+               0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,
+               0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,
+               0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,
+               0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,
+               0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,
+               0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,
+               0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,
+               0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,
+               0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,
+               0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,
+               0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,
+               0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,
+               0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,
+               0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,
+               0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,
+               0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,
+               0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,
+               0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,
+               0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,
+               0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,
+               0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,
+               0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,
+               0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,
+               0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3
+
+};
+
+static uint8_t ms_hmac_key1[] = {
+               0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
+               0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
+               0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
+               0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
+               0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
+               0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
+               0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
+               0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
+};
+
+static const uint8_t ms_hmac_digest1[] = {
+               0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,
+               0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,
+               0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,
+               0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,
+               0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,
+               0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,
+               0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,
+               0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F
+};
+/* End Session 1  */
+/* Begin Session 2 */
+static  uint8_t ms_aes_cbc_key2[] = {
+               0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+               0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static  uint8_t ms_aes_cbc_iv2[] = {
+               0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+               0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static const uint8_t ms_aes_cbc_cipher2[] = {
+               0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,
+               0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,
+               0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,
+               0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,
+               0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,
+               0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,
+               0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,
+               0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,
+               0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,
+               0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,
+               0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,
+               0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,
+               0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,
+               0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,
+               0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,
+               0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,
+               0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,
+               0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,
+               0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,
+               0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,
+               0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,
+               0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,
+               0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,
+               0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,
+               0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,
+               0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,
+               0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,
+               0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,
+               0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,
+               0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,
+               0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,
+               0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,
+               0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,
+               0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,
+               0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,
+               0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,
+               0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,
+               0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,
+               0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,
+               0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,
+               0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,
+               0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,
+               0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,
+               0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,
+               0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,
+               0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,
+               0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,
+               0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,
+               0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,
+               0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,
+               0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,
+               0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,
+               0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,
+               0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,
+               0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,
+               0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,
+               0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,
+               0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,
+               0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,
+               0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,
+               0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,
+               0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,
+               0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,
+               0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92
+};
+
+static  uint8_t ms_hmac_key2[] = {
+               0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
+               0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
+               0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
+               0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
+               0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
+               0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
+               0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
+               0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
+};
+
+static const uint8_t ms_hmac_digest2[] = {
+               0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,
+               0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,
+               0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,
+               0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,
+               0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,
+               0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,
+               0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,
+               0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59
+};
+
+/* End Session 2 */
+
+
 static int
 test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
 {
@@ -1144,6 +1477,38 @@ test_AES_chain_mb_all(void)
        return TEST_SUCCESS;
 }
 
+static int
+test_AES_chain_libcrypto_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool, ts_params->valid_devs[0],
+               RTE_CRYPTODEV_LIBCRYPTO_PMD,
+               BLKCIPHER_AES_CHAIN_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
+static int
+test_AES_cipheronly_libcrypto_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool, ts_params->valid_devs[0],
+               RTE_CRYPTODEV_LIBCRYPTO_PMD,
+               BLKCIPHER_AES_CIPHERONLY_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
 static int
 test_AES_chain_qat_all(void)
 {
@@ -1160,6 +1525,22 @@ test_AES_chain_qat_all(void)
        return TEST_SUCCESS;
 }
 
+static int
+test_authonly_libcrypto_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool, ts_params->valid_devs[0],
+               RTE_CRYPTODEV_LIBCRYPTO_PMD,
+               BLKCIPHER_AUTHONLY_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
 /* ***** SNOW 3G Tests ***** */
 static int
 create_wireless_algo_hash_session(uint8_t dev_id,
@@ -3411,6 +3792,70 @@ test_zuc_hash_generate_test_case_5(void)
        return test_zuc_authentication(&zuc_hash_test_case_5);
 }
 
+static int
+test_3DES_chain_qat_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool, ts_params->valid_devs[0],
+               RTE_CRYPTODEV_QAT_SYM_PMD,
+               BLKCIPHER_3DES_CHAIN_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
+static int
+test_3DES_cipheronly_qat_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool, ts_params->valid_devs[0],
+               RTE_CRYPTODEV_QAT_SYM_PMD,
+               BLKCIPHER_3DES_CIPHERONLY_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
+static int
+test_3DES_chain_libcrypto_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool, ts_params->valid_devs[0],
+               RTE_CRYPTODEV_LIBCRYPTO_PMD,
+               BLKCIPHER_3DES_CHAIN_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
+static int
+test_3DES_cipheronly_libcrypto_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool, ts_params->valid_devs[0],
+               RTE_CRYPTODEV_LIBCRYPTO_PMD,
+               BLKCIPHER_3DES_CIPHERONLY_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
 /* ***** AES-GCM Tests ***** */
 
 static int
@@ -4104,6 +4549,119 @@ test_multi_session(void)
        return TEST_SUCCESS;
 }
 
+struct multi_session_params {
+       struct crypto_unittest_params ut_params;
+       uint8_t *cipher_key;
+       uint8_t *hmac_key;
+       const uint8_t *cipher;
+       const uint8_t *digest;
+       uint8_t *iv;
+};
+
+#define MB_SESSION_NUMBER 3
+
+static int
+test_multi_session_random_usage(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       struct rte_cryptodev_info dev_info;
+       struct rte_cryptodev_sym_session **sessions;
+       uint32_t i, j;
+       struct multi_session_params ut_paramz[] = {
+
+               {
+                       .cipher_key = ms_aes_cbc_key0,
+                       .hmac_key = ms_hmac_key0,
+                       .cipher = ms_aes_cbc_cipher0,
+                       .digest = ms_hmac_digest0,
+                       .iv = ms_aes_cbc_iv0
+               },
+               {
+                       .cipher_key = ms_aes_cbc_key1,
+                       .hmac_key = ms_hmac_key1,
+                       .cipher = ms_aes_cbc_cipher1,
+                       .digest = ms_hmac_digest1,
+                       .iv = ms_aes_cbc_iv1
+               },
+               {
+                       .cipher_key = ms_aes_cbc_key2,
+                       .hmac_key = ms_hmac_key2,
+                       .cipher = ms_aes_cbc_cipher2,
+                       .digest = ms_hmac_digest2,
+                       .iv = ms_aes_cbc_iv2
+               },
+
+       };
+
+       rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
+
+       sessions = rte_malloc(NULL,
+                       (sizeof(struct rte_cryptodev_sym_session *)
+                                       * dev_info.sym.max_nb_sessions) + 1, 0);
+
+       for (i = 0; i < MB_SESSION_NUMBER; i++) {
+               rte_memcpy(&ut_paramz[i].ut_params, &testsuite_params,
+                               sizeof(struct crypto_unittest_params));
+
+               test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
+                               &ut_paramz[i].ut_params,
+                               ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
+
+               /* Create multiple crypto sessions*/
+               sessions[i] = rte_cryptodev_sym_session_create(
+                               ts_params->valid_devs[0],
+                               &ut_paramz[i].ut_params.auth_xform);
+
+               TEST_ASSERT_NOT_NULL(sessions[i],
+                               "Session creation failed at session number %u",
+                               i);
+
+       }
+
+       srand(time(NULL));
+       for (i = 0; i < 40000; i++) {
+
+               j = rand() % MB_SESSION_NUMBER;
+
+               TEST_ASSERT_SUCCESS(
+                       test_AES_CBC_HMAC_SHA512_decrypt_perform(
+                                       sessions[j],
+                                       &ut_paramz[j].ut_params,
+                                       ts_params, ut_paramz[j].cipher,
+                                       ut_paramz[j].digest,
+                                       ut_paramz[j].iv),
+                       "Failed to perform decrypt on request number %u.", i);
+
+               if (ut_paramz[j].ut_params.op)
+                       rte_crypto_op_free(ut_paramz[j].ut_params.op);
+
+               /*
+                * free mbuf - both obuf and ibuf are usually the same,
+                * so check if they point at the same address is necessary,
+                * to avoid freeing the mbuf twice.
+                */
+               if (ut_paramz[j].ut_params.obuf) {
+                       rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
+                       if (ut_paramz[j].ut_params.ibuf
+                                       == ut_paramz[j].ut_params.obuf)
+                               ut_paramz[j].ut_params.ibuf = 0;
+                       ut_paramz[j].ut_params.obuf = 0;
+               }
+               if (ut_paramz[j].ut_params.ibuf) {
+                       rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
+                       ut_paramz[j].ut_params.ibuf = 0;
+               }
+       }
+
+       for (i = 0; i < MB_SESSION_NUMBER; i++)
+               rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
+                               sessions[i]);
+
+       rte_free(sessions);
+
+       return TEST_SUCCESS;
+}
+
 static int
 test_null_cipher_only_operation(void)
 {
@@ -4457,6 +5015,15 @@ test_null_burst_operation(void)
        return TEST_SUCCESS;
 }
 
+static void
+generate_gmac_large_plaintext(uint8_t *data)
+{
+       uint16_t i;
+
+       for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
+               memcpy(&data[i], &data[0], 32);
+}
+
 static int
 create_gmac_operation(enum rte_crypto_auth_operation op,
                const struct gmac_test_data *tdata)
@@ -4471,6 +5038,14 @@ create_gmac_operation(enum rte_crypto_auth_operation op,
        iv_pad_len = RTE_ALIGN_CEIL(tdata->iv.len, 16);
        aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
 
+       /*
+        * Runtime generate the large plain text instead of use hard code
+        * plain text vector. It is done to avoid create huge source file
+        * with the test vector.
+        */
+       if (tdata->aad.len == GMAC_LARGE_PLAINTEXT_LENGTH)
+               generate_gmac_large_plaintext(tdata->aad.data);
+
        /* Generate Crypto op data structure */
        ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
                        RTE_CRYPTO_OP_TYPE_SYMMETRIC);
@@ -4647,6 +5222,12 @@ test_AES_GMAC_authentication_test_case_3(void)
        return test_AES_GMAC_authentication(&gmac_test_case_3);
 }
 
+static int
+test_AES_GMAC_authentication_test_case_4(void)
+{
+       return test_AES_GMAC_authentication(&gmac_test_case_4);
+}
+
 static int
 test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
 {
@@ -4707,64 +5288,782 @@ test_AES_GMAC_authentication_verify_test_case_3(void)
        return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
 }
 
-static struct unit_test_suite cryptodev_qat_testsuite  = {
-       .suite_name = "Crypto QAT Unit Test Suite",
-       .setup = testsuite_setup,
-       .teardown = testsuite_teardown,
-       .unit_test_cases = {
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                               test_device_configure_invalid_dev_id),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                               test_device_configure_invalid_queue_pair_ids),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                               test_queue_pair_descriptor_setup),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                               test_multi_session),
+static int
+test_AES_GMAC_authentication_verify_test_case_4(void)
+{
+       return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
+}
 
-               TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
-               TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
+struct test_crypto_vector {
+       enum rte_crypto_cipher_algorithm crypto_algo;
 
-               /** AES GCM Authenticated Encryption */
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_encryption_test_case_1),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_encryption_test_case_2),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_encryption_test_case_3),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_encryption_test_case_4),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_encryption_test_case_5),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_encryption_test_case_6),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_encryption_test_case_7),
+       struct {
+               uint8_t data[64];
+               unsigned int len;
+       } cipher_key;
 
-               /** AES GCM Authenticated Decryption */
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_decryption_test_case_1),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_decryption_test_case_2),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_decryption_test_case_3),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_decryption_test_case_4),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_decryption_test_case_5),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_decryption_test_case_6),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_mb_AES_GCM_authenticated_decryption_test_case_7),
+       struct {
+               uint8_t data[64];
+               unsigned int len;
+       } iv;
 
-               /** AES GMAC Authentication */
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_AES_GMAC_authentication_test_case_1),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_AES_GMAC_authentication_verify_test_case_1),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_AES_GMAC_authentication_test_case_2),
-               TEST_CASE_ST(ut_setup, ut_teardown,
-                       test_AES_GMAC_authentication_verify_test_case_2),
+       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 {
+               const uint8_t *data;
+               unsigned int len;
+       } aad;
+
+       struct {
+               uint8_t data[128];
+               unsigned int len;
+       } digest;
+};
+
+static const struct test_crypto_vector
+hmac_sha1_test_crypto_vector = {
+       .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
+       .plaintext = {
+               .data = plaintext_hash,
+               .len = 512
+       },
+       .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 = {
+                       0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
+                       0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
+                       0x3F, 0x91, 0x64, 0x59
+               },
+               .len = 20
+       }
+};
+
+static const struct test_crypto_vector
+aes128_gmac_test_vector = {
+       .auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
+       .crypto_algo = RTE_CRYPTO_CIPHER_AES_GCM,
+       .aad = {
+               .data = plaintext_hash,
+               .len = 512
+       },
+       .iv = {
+               .data = {
+                       0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+                       0x08, 0x09, 0x0A, 0x0B
+               },
+               .len = 12
+       },
+       .cipher_key = {
+               .data = {
+                       0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
+                       0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
+               },
+               .len = 16
+       },
+       .digest = {
+               .data = {
+                       0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
+                       0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
+               },
+               .len = 16
+       }
+};
+
+static const struct test_crypto_vector
+aes128cbc_hmac_sha1_test_vector = {
+       .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_hash,
+               .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
+       }
+};
+
+static void
+data_corruption(uint8_t *data)
+{
+       data[0] += 1;
+}
+
+static void
+tag_corruption(uint8_t *data, unsigned int tag_offset)
+{
+       data[tag_offset] += 1;
+}
+
+static int
+create_auth_session(struct crypto_unittest_params *ut_params,
+               uint8_t dev_id,
+               const struct test_crypto_vector *reference,
+               enum rte_crypto_auth_operation auth_op)
+{
+       uint8_t auth_key[reference->auth_key.len + 1];
+
+       memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
+
+       /* Setup Authentication Parameters */
+       ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+       ut_params->auth_xform.auth.op = auth_op;
+       ut_params->auth_xform.next = NULL;
+       ut_params->auth_xform.auth.algo = reference->auth_algo;
+       ut_params->auth_xform.auth.key.length = reference->auth_key.len;
+       ut_params->auth_xform.auth.key.data = auth_key;
+       ut_params->auth_xform.auth.digest_length = reference->digest.len;
+       ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
+
+       /* Create Crypto session*/
+       ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
+                               &ut_params->auth_xform);
+
+       TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+       return 0;
+}
+
+static int
+create_auth_cipher_session(struct crypto_unittest_params *ut_params,
+               uint8_t dev_id,
+               const struct test_crypto_vector *reference,
+               enum rte_crypto_auth_operation auth_op,
+               enum rte_crypto_cipher_operation cipher_op)
+{
+       uint8_t cipher_key[reference->cipher_key.len + 1];
+       uint8_t auth_key[reference->auth_key.len + 1];
+
+       memcpy(cipher_key, reference->cipher_key.data,
+                       reference->cipher_key.len);
+       memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
+
+       /* Setup Authentication Parameters */
+       ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+       ut_params->auth_xform.auth.op = auth_op;
+       ut_params->auth_xform.next = &ut_params->cipher_xform;
+       ut_params->auth_xform.auth.algo = reference->auth_algo;
+       ut_params->auth_xform.auth.key.length = reference->auth_key.len;
+       ut_params->auth_xform.auth.key.data = auth_key;
+       ut_params->auth_xform.auth.digest_length = reference->digest.len;
+       ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
+
+       /* Setup Cipher Parameters */
+       ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+       ut_params->cipher_xform.next = NULL;
+       ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
+       ut_params->cipher_xform.cipher.op = cipher_op;
+       ut_params->cipher_xform.cipher.key.data = cipher_key;
+       ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
+
+       /* Create Crypto session*/
+       ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
+                               &ut_params->auth_xform);
+
+       TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+       return 0;
+}
+
+static int
+create_auth_operation(struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference,
+               unsigned int auth_generate)
+{
+       /* Generate Crypto op data structure */
+       ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
+                       RTE_CRYPTO_OP_TYPE_SYMMETRIC);
+       TEST_ASSERT_NOT_NULL(ut_params->op,
+                       "Failed to allocate pktmbuf offload");
+
+       /* Set crypto operation data parameters */
+       rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
+
+       struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
+
+       /* set crypto operation source mbuf */
+       sym_op->m_src = ut_params->ibuf;
+
+       /* digest */
+       sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
+                       ut_params->ibuf, reference->digest.len);
+
+       TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
+                       "no room to append auth tag");
+
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+                       ut_params->ibuf, reference->plaintext.len);
+       sym_op->auth.digest.length = reference->digest.len;
+
+       if (auth_generate)
+               memset(sym_op->auth.digest.data, 0, reference->digest.len);
+       else
+               memcpy(sym_op->auth.digest.data,
+                               reference->digest.data,
+                               reference->digest.len);
+
+       TEST_HEXDUMP(stdout, "digest:",
+                       sym_op->auth.digest.data,
+                       sym_op->auth.digest.length);
+
+       sym_op->auth.data.length = reference->plaintext.len;
+       sym_op->auth.data.offset = 0;
+
+       return 0;
+}
+
+static int
+create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference,
+               unsigned int auth_generate)
+{
+       /* Generate Crypto op data structure */
+       ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
+                       RTE_CRYPTO_OP_TYPE_SYMMETRIC);
+       TEST_ASSERT_NOT_NULL(ut_params->op,
+                       "Failed to allocate pktmbuf offload");
+
+       /* Set crypto operation data parameters */
+       rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
+
+       struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
+
+       /* set crypto operation source mbuf */
+       sym_op->m_src = ut_params->ibuf;
+
+       /* aad */
+       sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+                       reference->aad.len);
+       TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data, "no room to append AAD");
+       memcpy(sym_op->auth.aad.data, reference->aad.data, reference->aad.len);
+
+       TEST_HEXDUMP(stdout, "AAD:", sym_op->auth.aad.data, reference->aad.len);
+
+       sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+       sym_op->auth.aad.length = reference->aad.len;
+
+       /* digest */
+       sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
+                       ut_params->ibuf, reference->digest.len);
+
+       TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
+                       "no room to append auth tag");
+
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+                       ut_params->ibuf, reference->ciphertext.len);
+       sym_op->auth.digest.length = reference->digest.len;
+
+       if (auth_generate)
+               memset(sym_op->auth.digest.data, 0, reference->digest.len);
+       else
+               memcpy(sym_op->auth.digest.data,
+                               reference->digest.data,
+                               reference->digest.len);
+
+       TEST_HEXDUMP(stdout, "digest:",
+                       sym_op->auth.digest.data,
+                       sym_op->auth.digest.length);
+
+       sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
+               ut_params->ibuf, reference->iv.len);
+       TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
+
+       sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+       sym_op->cipher.iv.length = reference->iv.len;
+
+       memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
+
+       sym_op->cipher.data.length = 0;
+       sym_op->cipher.data.offset = 0;
+
+       sym_op->auth.data.length = 0;
+       sym_op->auth.data.offset = 0;
+
+       return 0;
+}
+
+static int
+create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference,
+               unsigned int auth_generate)
+{
+       /* Generate Crypto op data structure */
+       ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
+                       RTE_CRYPTO_OP_TYPE_SYMMETRIC);
+       TEST_ASSERT_NOT_NULL(ut_params->op,
+                       "Failed to allocate pktmbuf offload");
+
+       /* Set crypto operation data parameters */
+       rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
+
+       struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
+
+       /* set crypto operation source mbuf */
+       sym_op->m_src = ut_params->ibuf;
+
+       /* digest */
+       sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
+                       ut_params->ibuf, reference->digest.len);
+
+       TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
+                       "no room to append auth tag");
+
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+                       ut_params->ibuf, reference->ciphertext.len);
+       sym_op->auth.digest.length = reference->digest.len;
+
+       if (auth_generate)
+               memset(sym_op->auth.digest.data, 0, reference->digest.len);
+       else
+               memcpy(sym_op->auth.digest.data,
+                               reference->digest.data,
+                               reference->digest.len);
+
+       TEST_HEXDUMP(stdout, "digest:",
+                       sym_op->auth.digest.data,
+                       sym_op->auth.digest.length);
+
+       sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
+               ut_params->ibuf, reference->iv.len);
+       TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
+
+       sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
+       sym_op->cipher.iv.length = reference->iv.len;
+
+       memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
+
+       sym_op->cipher.data.length = reference->ciphertext.len;
+       sym_op->cipher.data.offset = reference->iv.len;
+
+       sym_op->auth.data.length = reference->ciphertext.len;
+       sym_op->auth.data.offset = reference->iv.len;
+
+       return 0;
+}
+
+static int
+create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return create_auth_operation(ts_params, ut_params, reference, 0);
+}
+
+static int
+create_auth_verify_GMAC_operation(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
+}
+
+static int
+create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
+}
+
+static int
+test_authentication_verify_fail_when_data_corruption(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference,
+               unsigned int data_corrupted)
+{
+       int retval;
+
+       uint8_t *plaintext;
+
+       /* Create session */
+       retval = create_auth_session(ut_params,
+                       ts_params->valid_devs[0],
+                       reference,
+                       RTE_CRYPTO_AUTH_OP_VERIFY);
+       if (retval < 0)
+               return retval;
+
+       ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
+       TEST_ASSERT_NOT_NULL(ut_params->ibuf,
+                       "Failed to allocate input buffer in mempool");
+
+       /* clear mbuf payload */
+       memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
+                       rte_pktmbuf_tailroom(ut_params->ibuf));
+
+       plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+                       reference->plaintext.len);
+       TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
+       memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
+
+       TEST_HEXDUMP(stdout, "plaintext:", plaintext, reference->plaintext.len);
+
+       /* Create operation */
+       retval = create_auth_verify_operation(ts_params, ut_params, reference);
+
+       if (retval < 0)
+               return retval;
+
+       if (data_corrupted)
+               data_corruption(plaintext);
+       else
+               tag_corruption(plaintext, reference->plaintext.len);
+
+       ut_params->op = process_crypto_request(ts_params->valid_devs[0],
+                       ut_params->op);
+       TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
+       TEST_ASSERT_EQUAL(ut_params->op->status,
+                       RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
+                       "authentication not failed");
+
+       ut_params->obuf = ut_params->op->sym->m_src;
+       TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+       return 0;
+}
+
+static int
+test_authentication_verify_GMAC_fail_when_corruption(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference,
+               unsigned int data_corrupted)
+{
+       int retval;
+
+       /* Create session */
+       retval = create_auth_cipher_session(ut_params,
+                       ts_params->valid_devs[0],
+                       reference,
+                       RTE_CRYPTO_AUTH_OP_VERIFY,
+                       RTE_CRYPTO_CIPHER_OP_DECRYPT);
+       if (retval < 0)
+               return retval;
+
+       ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
+       TEST_ASSERT_NOT_NULL(ut_params->ibuf,
+                       "Failed to allocate input buffer in mempool");
+
+       /* clear mbuf payload */
+       memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
+                       rte_pktmbuf_tailroom(ut_params->ibuf));
+
+       /* Create operation */
+       retval = create_auth_verify_GMAC_operation(ts_params,
+                       ut_params,
+                       reference);
+
+       if (retval < 0)
+               return retval;
+
+       if (data_corrupted)
+               data_corruption(ut_params->op->sym->auth.aad.data);
+       else
+               tag_corruption(ut_params->op->sym->auth.aad.data,
+                               reference->aad.len);
+
+       ut_params->op = process_crypto_request(ts_params->valid_devs[0],
+                       ut_params->op);
+       TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
+       TEST_ASSERT_EQUAL(ut_params->op->status,
+                       RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
+                       "authentication not failed");
+
+       ut_params->obuf = ut_params->op->sym->m_src;
+       TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+       return 0;
+}
+
+static int
+test_authenticated_decryption_fail_when_corruption(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference,
+               unsigned int data_corrupted)
+{
+       int retval;
+
+       uint8_t *ciphertext;
+
+       /* Create session */
+       retval = create_auth_cipher_session(ut_params,
+                       ts_params->valid_devs[0],
+                       reference,
+                       RTE_CRYPTO_AUTH_OP_VERIFY,
+                       RTE_CRYPTO_CIPHER_OP_DECRYPT);
+       if (retval < 0)
+               return retval;
+
+       ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
+       TEST_ASSERT_NOT_NULL(ut_params->ibuf,
+                       "Failed to allocate input buffer in mempool");
+
+       /* clear mbuf payload */
+       memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
+                       rte_pktmbuf_tailroom(ut_params->ibuf));
+
+       ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
+                       reference->ciphertext.len);
+       TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
+       memcpy(ciphertext, reference->ciphertext.data,
+                       reference->ciphertext.len);
+
+       /* Create operation */
+       retval = create_cipher_auth_verify_operation(ts_params,
+                       ut_params,
+                       reference);
+
+       if (retval < 0)
+               return retval;
+
+       if (data_corrupted)
+               data_corruption(ciphertext);
+       else
+               tag_corruption(ciphertext, reference->ciphertext.len);
+
+       ut_params->op = process_crypto_request(ts_params->valid_devs[0],
+                       ut_params->op);
+
+       TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
+       TEST_ASSERT_EQUAL(ut_params->op->status,
+                       RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
+                       "authentication not failed");
+
+       ut_params->obuf = ut_params->op->sym->m_src;
+       TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
+
+       return 0;
+}
+
+static int
+test_authentication_verify_fail_when_data_corrupted(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return test_authentication_verify_fail_when_data_corruption(
+                       ts_params, ut_params, reference, 1);
+}
+
+static int
+test_authentication_verify_fail_when_tag_corrupted(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return test_authentication_verify_fail_when_data_corruption(
+                       ts_params, ut_params, reference, 0);
+}
+
+static int
+test_authentication_verify_GMAC_fail_when_data_corrupted(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return test_authentication_verify_GMAC_fail_when_corruption(
+                       ts_params, ut_params, reference, 1);
+}
+
+static int
+test_authentication_verify_GMAC_fail_when_tag_corrupted(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return test_authentication_verify_GMAC_fail_when_corruption(
+                       ts_params, ut_params, reference, 0);
+}
+
+static int
+test_authenticated_decryption_fail_when_data_corrupted(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return test_authenticated_decryption_fail_when_corruption(
+                       ts_params, ut_params, reference, 1);
+}
+
+static int
+test_authenticated_decryption_fail_when_tag_corrupted(
+               struct crypto_testsuite_params *ts_params,
+               struct crypto_unittest_params *ut_params,
+               const struct test_crypto_vector *reference)
+{
+       return test_authenticated_decryption_fail_when_corruption(
+                       ts_params, ut_params, reference, 0);
+}
+
+static int
+authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
+{
+       return test_authentication_verify_fail_when_data_corrupted(
+                       &testsuite_params, &unittest_params,
+                       &hmac_sha1_test_crypto_vector);
+}
+
+static int
+authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
+{
+       return test_authentication_verify_fail_when_tag_corrupted(
+                       &testsuite_params, &unittest_params,
+                       &hmac_sha1_test_crypto_vector);
+}
+
+static int
+authentication_verify_AES128_GMAC_fail_data_corrupt(void)
+{
+       return test_authentication_verify_GMAC_fail_when_data_corrupted(
+                       &testsuite_params, &unittest_params,
+                       &aes128_gmac_test_vector);
+}
+
+static int
+authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
+{
+       return test_authentication_verify_GMAC_fail_when_tag_corrupted(
+                       &testsuite_params, &unittest_params,
+                       &aes128_gmac_test_vector);
+}
+
+static int
+auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
+{
+       return test_authenticated_decryption_fail_when_data_corrupted(
+                       &testsuite_params,
+                       &unittest_params,
+                       &aes128cbc_hmac_sha1_test_vector);
+}
+
+static int
+auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
+{
+       return test_authenticated_decryption_fail_when_tag_corrupted(
+                       &testsuite_params,
+                       &unittest_params,
+                       &aes128cbc_hmac_sha1_test_vector);
+}
+
+static struct unit_test_suite cryptodev_qat_testsuite  = {
+       .suite_name = "Crypto QAT Unit Test Suite",
+       .setup = testsuite_setup,
+       .teardown = testsuite_teardown,
+       .unit_test_cases = {
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_device_configure_invalid_dev_id),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_device_configure_invalid_queue_pair_ids),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_queue_pair_descriptor_setup),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_multi_session),
+
+               TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
+               TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                                               test_3DES_cipheronly_qat_all),
+               TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
+
+               /** AES GCM Authenticated Encryption */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_2),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_3),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_4),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_5),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_6),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_7),
+
+               /** AES GCM Authenticated Decryption */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_2),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_3),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_4),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_5),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_6),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_7),
+
+               /** AES GMAC Authentication */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_verify_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_test_case_2),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_verify_test_case_2),
                TEST_CASE_ST(ut_setup, ut_teardown,
                        test_AES_GMAC_authentication_test_case_3),
                TEST_CASE_ST(ut_setup, ut_teardown,
@@ -4863,6 +6162,93 @@ static struct unit_test_suite cryptodev_aesni_mb_testsuite  = {
        }
 };
 
+static struct unit_test_suite cryptodev_libcrypto_testsuite  = {
+       .suite_name = "Crypto Device LIBCRYPTO Unit Test Suite",
+       .setup = testsuite_setup,
+       .teardown = testsuite_teardown,
+       .unit_test_cases = {
+               TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_multi_session_random_usage),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_AES_chain_libcrypto_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_AES_cipheronly_libcrypto_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_3DES_chain_libcrypto_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_3DES_cipheronly_libcrypto_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_authonly_libcrypto_all),
+
+               /** AES GCM Authenticated Encryption */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_2),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_3),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_4),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_5),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_6),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_encryption_test_case_7),
+
+               /** AES GCM Authenticated Decryption */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_2),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_3),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_4),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_5),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_6),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_mb_AES_GCM_authenticated_decryption_test_case_7),
+
+               /** AES GMAC Authentication */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_verify_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_test_case_2),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_verify_test_case_2),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_test_case_3),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_verify_test_case_3),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_test_case_4),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GMAC_authentication_verify_test_case_4),
+
+               /** Negative tests */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       authentication_verify_HMAC_SHA1_fail_data_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       authentication_verify_HMAC_SHA1_fail_tag_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       authentication_verify_AES128_GMAC_fail_data_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       authentication_verify_AES128_GMAC_fail_tag_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
+
+               TEST_CASES_END() /**< NULL terminate unit test array */
+       }
+};
+
 static struct unit_test_suite cryptodev_aesni_gcm_testsuite  = {
        .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
        .setup = testsuite_setup,
@@ -5105,6 +6491,14 @@ test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
        return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
 }
 
+static int
+test_cryptodev_libcrypto(void)
+{
+       gbl_cryptodev_type = RTE_CRYPTODEV_LIBCRYPTO_PMD;
+
+       return unit_test_suite_runner(&cryptodev_libcrypto_testsuite);
+}
+
 static int
 test_cryptodev_aesni_gcm(void)
 {
@@ -5147,6 +6541,7 @@ test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
 
 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
+REGISTER_TEST_COMMAND(cryptodev_libcrypto_autotest, test_cryptodev_libcrypto);
 REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
 REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);