get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 16369,
    "url": "http://patches.dpdk.org/api/patches/16369/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1475593882-32364-4-git-send-email-slawomirx.mrozowicz@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1475593882-32364-4-git-send-email-slawomirx.mrozowicz@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1475593882-32364-4-git-send-email-slawomirx.mrozowicz@intel.com",
    "date": "2016-10-04T15:11:21",
    "name": "[dpdk-dev,v6,3/4] app/test: added tests for libcrypto PMD",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "ebe6856b8788c8aaabdd2c88c007e5393e91f1fa",
    "submitter": {
        "id": 457,
        "url": "http://patches.dpdk.org/api/people/457/?format=api",
        "name": "Slawomir Mrozowicz",
        "email": "slawomirx.mrozowicz@intel.com"
    },
    "delegate": {
        "id": 22,
        "url": "http://patches.dpdk.org/api/users/22/?format=api",
        "username": "pdelarag",
        "first_name": "Pablo",
        "last_name": "de Lara Guarch",
        "email": "pablo.de.lara.guarch@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1475593882-32364-4-git-send-email-slawomirx.mrozowicz@intel.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/16369/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/16369/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 363222BFF;\n\tTue,  4 Oct 2016 15:22:18 +0200 (CEST)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby dpdk.org (Postfix) with ESMTP id 341712BF7\n\tfor <dev@dpdk.org>; Tue,  4 Oct 2016 15:22:13 +0200 (CEST)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n\tby orsmga103.jf.intel.com with ESMTP; 04 Oct 2016 06:21:52 -0700",
            "from gklab-246-019.igk.intel.com (HELO intel.com) ([10.217.246.19])\n\tby orsmga001.jf.intel.com with SMTP; 04 Oct 2016 06:21:46 -0700",
            "by intel.com (sSMTP sendmail emulation);\n\tTue, 04 Oct 2016 17:21:25 +0200"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos; i=\"5.31,295,1473145200\"; d=\"scan'208\";\n\ta=\"1040143261\"",
        "From": "Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>,\n\tPiotr Azarewicz <piotrx.t.azarewicz@intel.com>,\n\tMarcin Kerlin <marcinx.kerlin@intel.com>,\n\tDaniel Mrzyglod <danielx.t.mrzyglod@intel.com>",
        "Date": "Tue,  4 Oct 2016 17:11:21 +0200",
        "Message-Id": "<1475593882-32364-4-git-send-email-slawomirx.mrozowicz@intel.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1475593882-32364-1-git-send-email-slawomirx.mrozowicz@intel.com>",
        "References": "<1475504792-31557-1-git-send-email-slawomirx.mrozowicz@intel.com>\n\t<1475593882-32364-1-git-send-email-slawomirx.mrozowicz@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v6 3/4] app/test: added tests for libcrypto PMD",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This patch contains unit tests for libcrypto PMD. User can\nuse app/test application to check how to use this pmd and to\nverify crypto processing.\n\nTest name is cryptodev_libcrypto_autotest.\nFor performance test cryptodev_libcrypto_perftest can be used.\n\nSigned-off-by: Piotr Azarewicz <piotrx.t.azarewicz@intel.com>\nSigned-off-by: Marcin Kerlin <marcinx.kerlin@intel.com>\nSigned-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>\n---\nv2:\n- rename AES-named functions to blockcipher\n- replace different test cases with blockcipher functions pattern\n- add 3DES tests into QuickAssist PMD testsuite\n\nv3:\n- add nagative verification tests\n- add big data test\n\nv4:\n- move aes test rework to another patch\n- move big data test to another patch\n- checking if libcrypto pmd is available\n\nv5:\n- add reduced big data test\n\nv6:\n- fix checkpatch warnings\n---\n app/test/test_cryptodev.c                   | 1505 ++++++++++++++++++++++++++-\n app/test/test_cryptodev.h                   |    1 +\n app/test/test_cryptodev_aes_test_vectors.h  |  306 +++++-\n app/test/test_cryptodev_blockcipher.c       |   22 +\n app/test/test_cryptodev_blockcipher.h       |    1 +\n app/test/test_cryptodev_des_test_vectors.h  |  955 +++++++++++++++++\n app/test/test_cryptodev_gcm_test_vectors.h  |   36 +-\n app/test/test_cryptodev_hash_test_vectors.h |  491 +++++++++\n app/test/test_cryptodev_perf.c              |  712 ++++++++++++-\n 9 files changed, 3954 insertions(+), 75 deletions(-)\n create mode 100644 app/test/test_cryptodev_des_test_vectors.h\n create mode 100644 app/test/test_cryptodev_hash_test_vectors.h",
    "diff": "diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c\nindex 8f03157..9767704 100644\n--- a/app/test/test_cryptodev.c\n+++ b/app/test/test_cryptodev.c\n@@ -45,6 +45,8 @@\n \n #include \"test_cryptodev_blockcipher.h\"\n #include \"test_cryptodev_aes_test_vectors.h\"\n+#include \"test_cryptodev_des_test_vectors.h\"\n+#include \"test_cryptodev_hash_test_vectors.h\"\n #include \"test_cryptodev_kasumi_test_vectors.h\"\n #include \"test_cryptodev_kasumi_hash_test_vectors.h\"\n #include \"test_cryptodev_snow3g_test_vectors.h\"\n@@ -167,7 +169,7 @@ testsuite_setup(void)\n \t\t/* Not already created so create */\n \t\tts_params->mbuf_pool = rte_pktmbuf_pool_create(\n \t\t\t\t\"CRYPTO_MBUFPOOL\",\n-\t\t\t\tNUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,\n+\t\t\t\tNUM_MBUFS, MBUF_CACHE_SIZE, 0, UINT16_MAX,\n \t\t\t\trte_socket_id());\n \t\tif (ts_params->mbuf_pool == NULL) {\n \t\t\tRTE_LOG(ERR, USER1, \"Can't create CRYPTO_MBUFPOOL\\n\");\n@@ -308,6 +310,28 @@ testsuite_setup(void)\n \t\t}\n \t}\n \n+\t/* Create 2 LIBCRYPTO devices if required */\n+\tif (gbl_cryptodev_type == RTE_CRYPTODEV_LIBCRYPTO_PMD) {\n+#ifndef RTE_LIBRTE_PMD_LIBCRYPTO\n+\t\tRTE_LOG(ERR, USER1, \"CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO must be\"\n+\t\t\t\" enabled in config file to run this testsuite.\\n\");\n+\t\treturn TEST_FAILED;\n+#endif\n+\t\tnb_devs = rte_cryptodev_count_devtype(\n+\t\t\t\tRTE_CRYPTODEV_LIBCRYPTO_PMD);\n+\t\tif (nb_devs < 2) {\n+\t\t\tfor (i = nb_devs; i < 2; i++) {\n+\t\t\t\tret = rte_eal_vdev_init(\n+\t\t\t\t\tRTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD),\n+\t\t\t\t\tNULL);\n+\n+\t\t\t\tTEST_ASSERT(ret == 0, \"Failed to create \"\n+\t\t\t\t\t\"instance %u of pmd : %s\", i,\n+\t\t\t\t\tRTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD));\n+\t\t\t}\n+\t\t}\n+\t}\n+\n #ifndef RTE_LIBRTE_PMD_QAT\n \tif (gbl_cryptodev_type == RTE_CRYPTODEV_QAT_SYM_PMD) {\n \t\tRTE_LOG(ERR, USER1, \"CONFIG_RTE_LIBRTE_PMD_QAT must be enabled \"\n@@ -877,6 +901,315 @@ static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {\n \t0x18, 0x8c, 0x1d, 0x32\n };\n \n+\n+/* Multisession Vector context Test */\n+/*Begin Session 0 */\n+static uint8_t ms_aes_cbc_key0[] = {\n+\t0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,\n+\t0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n+};\n+\n+static uint8_t ms_aes_cbc_iv0[] = {\n+\t0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,\n+\t0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n+};\n+\n+static const uint8_t ms_aes_cbc_cipher0[] = {\n+\t\t0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,\n+\t\t0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,\n+\t\t0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,\n+\t\t0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,\n+\t\t0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,\n+\t\t0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,\n+\t\t0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,\n+\t\t0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,\n+\t\t0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,\n+\t\t0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,\n+\t\t0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,\n+\t\t0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,\n+\t\t0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,\n+\t\t0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,\n+\t\t0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,\n+\t\t0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,\n+\t\t0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,\n+\t\t0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,\n+\t\t0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,\n+\t\t0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,\n+\t\t0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,\n+\t\t0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,\n+\t\t0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,\n+\t\t0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,\n+\t\t0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,\n+\t\t0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,\n+\t\t0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,\n+\t\t0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,\n+\t\t0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,\n+\t\t0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,\n+\t\t0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,\n+\t\t0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,\n+\t\t0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,\n+\t\t0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,\n+\t\t0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,\n+\t\t0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,\n+\t\t0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,\n+\t\t0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,\n+\t\t0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,\n+\t\t0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,\n+\t\t0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,\n+\t\t0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,\n+\t\t0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,\n+\t\t0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,\n+\t\t0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,\n+\t\t0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,\n+\t\t0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,\n+\t\t0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,\n+\t\t0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,\n+\t\t0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,\n+\t\t0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,\n+\t\t0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,\n+\t\t0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,\n+\t\t0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,\n+\t\t0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,\n+\t\t0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,\n+\t\t0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,\n+\t\t0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,\n+\t\t0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,\n+\t\t0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,\n+\t\t0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,\n+\t\t0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,\n+\t\t0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,\n+\t\t0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF\n+};\n+\n+\n+static  uint8_t ms_hmac_key0[] = {\n+\t\t0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,\n+\t\t0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,\n+\t\t0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,\n+\t\t0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,\n+\t\t0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,\n+\t\t0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,\n+\t\t0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,\n+\t\t0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60\n+};\n+\n+static const uint8_t ms_hmac_digest0[] = {\n+\t\t0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,\n+\t\t0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,\n+\t\t0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,\n+\t\t0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,\n+\t\t0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,\n+\t\t0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,\n+\t\t0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,\n+\t\t0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90\n+\t\t};\n+\n+/* End Session 0 */\n+/* Begin session 1 */\n+\n+static  uint8_t ms_aes_cbc_key1[] = {\n+\t\t0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,\n+\t\t0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n+};\n+\n+static  uint8_t ms_aes_cbc_iv1[] = {\n+\t0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,\n+\t0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n+};\n+\n+static const uint8_t ms_aes_cbc_cipher1[] = {\n+\t\t0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,\n+\t\t0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,\n+\t\t0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,\n+\t\t0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,\n+\t\t0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,\n+\t\t0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,\n+\t\t0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,\n+\t\t0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,\n+\t\t0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,\n+\t\t0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,\n+\t\t0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,\n+\t\t0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,\n+\t\t0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,\n+\t\t0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,\n+\t\t0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,\n+\t\t0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,\n+\t\t0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,\n+\t\t0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,\n+\t\t0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,\n+\t\t0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,\n+\t\t0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,\n+\t\t0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,\n+\t\t0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,\n+\t\t0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,\n+\t\t0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,\n+\t\t0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,\n+\t\t0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,\n+\t\t0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,\n+\t\t0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,\n+\t\t0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,\n+\t\t0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,\n+\t\t0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,\n+\t\t0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,\n+\t\t0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,\n+\t\t0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,\n+\t\t0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,\n+\t\t0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,\n+\t\t0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,\n+\t\t0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,\n+\t\t0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,\n+\t\t0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,\n+\t\t0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,\n+\t\t0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,\n+\t\t0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,\n+\t\t0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,\n+\t\t0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,\n+\t\t0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,\n+\t\t0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,\n+\t\t0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,\n+\t\t0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,\n+\t\t0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,\n+\t\t0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,\n+\t\t0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,\n+\t\t0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,\n+\t\t0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,\n+\t\t0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,\n+\t\t0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,\n+\t\t0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,\n+\t\t0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,\n+\t\t0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,\n+\t\t0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,\n+\t\t0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,\n+\t\t0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,\n+\t\t0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3\n+\n+};\n+\n+static uint8_t ms_hmac_key1[] = {\n+\t\t0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,\n+\t\t0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,\n+\t\t0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,\n+\t\t0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,\n+\t\t0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,\n+\t\t0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,\n+\t\t0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,\n+\t\t0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60\n+};\n+\n+static const uint8_t ms_hmac_digest1[] = {\n+\t\t0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,\n+\t\t0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,\n+\t\t0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,\n+\t\t0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,\n+\t\t0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,\n+\t\t0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,\n+\t\t0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,\n+\t\t0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F\n+};\n+/* End Session 1  */\n+/* Begin Session 2 */\n+static  uint8_t ms_aes_cbc_key2[] = {\n+\t\t0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,\n+\t\t0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n+};\n+\n+static  uint8_t ms_aes_cbc_iv2[] = {\n+\t\t0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,\n+\t\t0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n+};\n+\n+static const uint8_t ms_aes_cbc_cipher2[] = {\n+\t\t0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,\n+\t\t0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,\n+\t\t0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,\n+\t\t0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,\n+\t\t0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,\n+\t\t0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,\n+\t\t0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,\n+\t\t0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,\n+\t\t0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,\n+\t\t0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,\n+\t\t0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,\n+\t\t0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,\n+\t\t0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,\n+\t\t0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,\n+\t\t0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,\n+\t\t0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,\n+\t\t0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,\n+\t\t0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,\n+\t\t0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,\n+\t\t0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,\n+\t\t0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,\n+\t\t0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,\n+\t\t0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,\n+\t\t0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,\n+\t\t0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,\n+\t\t0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,\n+\t\t0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,\n+\t\t0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,\n+\t\t0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,\n+\t\t0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,\n+\t\t0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,\n+\t\t0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,\n+\t\t0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,\n+\t\t0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,\n+\t\t0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,\n+\t\t0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,\n+\t\t0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,\n+\t\t0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,\n+\t\t0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,\n+\t\t0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,\n+\t\t0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,\n+\t\t0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,\n+\t\t0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,\n+\t\t0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,\n+\t\t0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,\n+\t\t0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,\n+\t\t0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,\n+\t\t0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,\n+\t\t0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,\n+\t\t0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,\n+\t\t0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,\n+\t\t0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,\n+\t\t0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,\n+\t\t0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,\n+\t\t0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,\n+\t\t0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,\n+\t\t0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,\n+\t\t0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,\n+\t\t0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,\n+\t\t0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,\n+\t\t0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,\n+\t\t0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,\n+\t\t0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,\n+\t\t0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92\n+};\n+\n+static  uint8_t ms_hmac_key2[] = {\n+\t\t0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,\n+\t\t0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,\n+\t\t0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,\n+\t\t0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,\n+\t\t0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,\n+\t\t0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,\n+\t\t0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,\n+\t\t0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60\n+};\n+\n+static const uint8_t ms_hmac_digest2[] = {\n+\t\t0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,\n+\t\t0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,\n+\t\t0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,\n+\t\t0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,\n+\t\t0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,\n+\t\t0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,\n+\t\t0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,\n+\t\t0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59\n+};\n+\n+/* End Session 2 */\n+\n+\n static int\n test_AES_CBC_HMAC_SHA1_encrypt_digest(void)\n {\n@@ -1145,6 +1478,38 @@ test_AES_chain_mb_all(void)\n }\n \n static int\n+test_AES_chain_libcrypto_all(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tint status;\n+\n+\tstatus = test_blockcipher_all_tests(ts_params->mbuf_pool,\n+\t\tts_params->op_mpool, ts_params->valid_devs[0],\n+\t\tRTE_CRYPTODEV_LIBCRYPTO_PMD,\n+\t\tBLKCIPHER_AES_CHAIN_TYPE);\n+\n+\tTEST_ASSERT_EQUAL(status, 0, \"Test failed\");\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_AES_cipheronly_libcrypto_all(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tint status;\n+\n+\tstatus = test_blockcipher_all_tests(ts_params->mbuf_pool,\n+\t\tts_params->op_mpool, ts_params->valid_devs[0],\n+\t\tRTE_CRYPTODEV_LIBCRYPTO_PMD,\n+\t\tBLKCIPHER_AES_CIPHERONLY_TYPE);\n+\n+\tTEST_ASSERT_EQUAL(status, 0, \"Test failed\");\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n test_AES_chain_qat_all(void)\n {\n \tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n@@ -1160,6 +1525,22 @@ test_AES_chain_qat_all(void)\n \treturn TEST_SUCCESS;\n }\n \n+static int\n+test_authonly_libcrypto_all(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tint status;\n+\n+\tstatus = test_blockcipher_all_tests(ts_params->mbuf_pool,\n+\t\tts_params->op_mpool, ts_params->valid_devs[0],\n+\t\tRTE_CRYPTODEV_LIBCRYPTO_PMD,\n+\t\tBLKCIPHER_AUTHONLY_TYPE);\n+\n+\tTEST_ASSERT_EQUAL(status, 0, \"Test failed\");\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n /* ***** SNOW 3G Tests ***** */\n static int\n create_wireless_algo_hash_session(uint8_t dev_id,\n@@ -3411,6 +3792,70 @@ test_zuc_hash_generate_test_case_5(void)\n \treturn test_zuc_authentication(&zuc_hash_test_case_5);\n }\n \n+static int\n+test_3DES_chain_qat_all(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tint status;\n+\n+\tstatus = test_blockcipher_all_tests(ts_params->mbuf_pool,\n+\t\tts_params->op_mpool, ts_params->valid_devs[0],\n+\t\tRTE_CRYPTODEV_QAT_SYM_PMD,\n+\t\tBLKCIPHER_3DES_CHAIN_TYPE);\n+\n+\tTEST_ASSERT_EQUAL(status, 0, \"Test failed\");\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_3DES_cipheronly_qat_all(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tint status;\n+\n+\tstatus = test_blockcipher_all_tests(ts_params->mbuf_pool,\n+\t\tts_params->op_mpool, ts_params->valid_devs[0],\n+\t\tRTE_CRYPTODEV_QAT_SYM_PMD,\n+\t\tBLKCIPHER_3DES_CIPHERONLY_TYPE);\n+\n+\tTEST_ASSERT_EQUAL(status, 0, \"Test failed\");\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_3DES_chain_libcrypto_all(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tint status;\n+\n+\tstatus = test_blockcipher_all_tests(ts_params->mbuf_pool,\n+\t\tts_params->op_mpool, ts_params->valid_devs[0],\n+\t\tRTE_CRYPTODEV_LIBCRYPTO_PMD,\n+\t\tBLKCIPHER_3DES_CHAIN_TYPE);\n+\n+\tTEST_ASSERT_EQUAL(status, 0, \"Test failed\");\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static int\n+test_3DES_cipheronly_libcrypto_all(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tint status;\n+\n+\tstatus = test_blockcipher_all_tests(ts_params->mbuf_pool,\n+\t\tts_params->op_mpool, ts_params->valid_devs[0],\n+\t\tRTE_CRYPTODEV_LIBCRYPTO_PMD,\n+\t\tBLKCIPHER_3DES_CIPHERONLY_TYPE);\n+\n+\tTEST_ASSERT_EQUAL(status, 0, \"Test failed\");\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n /* ***** AES-GCM Tests ***** */\n \n static int\n@@ -4104,6 +4549,119 @@ test_multi_session(void)\n \treturn TEST_SUCCESS;\n }\n \n+struct multi_session_params {\n+\tstruct crypto_unittest_params ut_params;\n+\tuint8_t *cipher_key;\n+\tuint8_t *hmac_key;\n+\tconst uint8_t *cipher;\n+\tconst uint8_t *digest;\n+\tuint8_t *iv;\n+};\n+\n+#define MB_SESSION_NUMBER 3\n+\n+static int\n+test_multi_session_random_usage(void)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct rte_cryptodev_info dev_info;\n+\tstruct rte_cryptodev_sym_session **sessions;\n+\tuint32_t i, j;\n+\tstruct multi_session_params ut_paramz[] = {\n+\n+\t\t{\n+\t\t\t.cipher_key = ms_aes_cbc_key0,\n+\t\t\t.hmac_key = ms_hmac_key0,\n+\t\t\t.cipher = ms_aes_cbc_cipher0,\n+\t\t\t.digest = ms_hmac_digest0,\n+\t\t\t.iv = ms_aes_cbc_iv0\n+\t\t},\n+\t\t{\n+\t\t\t.cipher_key = ms_aes_cbc_key1,\n+\t\t\t.hmac_key = ms_hmac_key1,\n+\t\t\t.cipher = ms_aes_cbc_cipher1,\n+\t\t\t.digest = ms_hmac_digest1,\n+\t\t\t.iv = ms_aes_cbc_iv1\n+\t\t},\n+\t\t{\n+\t\t\t.cipher_key = ms_aes_cbc_key2,\n+\t\t\t.hmac_key = ms_hmac_key2,\n+\t\t\t.cipher = ms_aes_cbc_cipher2,\n+\t\t\t.digest = ms_hmac_digest2,\n+\t\t\t.iv = ms_aes_cbc_iv2\n+\t\t},\n+\n+\t};\n+\n+\trte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);\n+\n+\tsessions = rte_malloc(NULL,\n+\t\t\t(sizeof(struct rte_cryptodev_sym_session *)\n+\t\t\t\t\t* dev_info.sym.max_nb_sessions) + 1, 0);\n+\n+\tfor (i = 0; i < MB_SESSION_NUMBER; i++) {\n+\t\trte_memcpy(&ut_paramz[i].ut_params, &testsuite_params,\n+\t\t\t\tsizeof(struct crypto_unittest_params));\n+\n+\t\ttest_AES_CBC_HMAC_SHA512_decrypt_create_session_params(\n+\t\t\t\t&ut_paramz[i].ut_params,\n+\t\t\t\tut_paramz[i].cipher_key, ut_paramz[i].hmac_key);\n+\n+\t\t/* Create multiple crypto sessions*/\n+\t\tsessions[i] = rte_cryptodev_sym_session_create(\n+\t\t\t\tts_params->valid_devs[0],\n+\t\t\t\t&ut_paramz[i].ut_params.auth_xform);\n+\n+\t\tTEST_ASSERT_NOT_NULL(sessions[i],\n+\t\t\t\t\"Session creation failed at session number %u\",\n+\t\t\t\ti);\n+\n+\t}\n+\n+\tsrand(time(NULL));\n+\tfor (i = 0; i < 40000; i++) {\n+\n+\t\tj = rand() % MB_SESSION_NUMBER;\n+\n+\t\tTEST_ASSERT_SUCCESS(\n+\t\t\ttest_AES_CBC_HMAC_SHA512_decrypt_perform(\n+\t\t\t\t\tsessions[j],\n+\t\t\t\t\t&ut_paramz[j].ut_params,\n+\t\t\t\t\tts_params, ut_paramz[j].cipher,\n+\t\t\t\t\tut_paramz[j].digest,\n+\t\t\t\t\tut_paramz[j].iv),\n+\t\t\t\"Failed to perform decrypt on request number %u.\", i);\n+\n+\t\tif (ut_paramz[j].ut_params.op)\n+\t\t\trte_crypto_op_free(ut_paramz[j].ut_params.op);\n+\n+\t\t/*\n+\t\t * free mbuf - both obuf and ibuf are usually the same,\n+\t\t * so check if they point at the same address is necessary,\n+\t\t * to avoid freeing the mbuf twice.\n+\t\t */\n+\t\tif (ut_paramz[j].ut_params.obuf) {\n+\t\t\trte_pktmbuf_free(ut_paramz[j].ut_params.obuf);\n+\t\t\tif (ut_paramz[j].ut_params.ibuf\n+\t\t\t\t\t== ut_paramz[j].ut_params.obuf)\n+\t\t\t\tut_paramz[j].ut_params.ibuf = 0;\n+\t\t\tut_paramz[j].ut_params.obuf = 0;\n+\t\t}\n+\t\tif (ut_paramz[j].ut_params.ibuf) {\n+\t\t\trte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);\n+\t\t\tut_paramz[j].ut_params.ibuf = 0;\n+\t\t}\n+\t}\n+\n+\tfor (i = 0; i < MB_SESSION_NUMBER; i++)\n+\t\trte_cryptodev_sym_session_free(ts_params->valid_devs[0],\n+\t\t\t\tsessions[i]);\n+\n+\trte_free(sessions);\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n static int\n test_null_cipher_only_operation(void)\n {\n@@ -4457,6 +5015,15 @@ test_null_burst_operation(void)\n \treturn TEST_SUCCESS;\n }\n \n+static void\n+generate_gmac_large_plaintext(uint8_t *data)\n+{\n+\tuint16_t i;\n+\n+\tfor (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)\n+\t\tmemcpy(&data[i], &data[0], 32);\n+}\n+\n static int\n create_gmac_operation(enum rte_crypto_auth_operation op,\n \t\tconst struct gmac_test_data *tdata)\n@@ -4471,6 +5038,14 @@ create_gmac_operation(enum rte_crypto_auth_operation op,\n \tiv_pad_len = RTE_ALIGN_CEIL(tdata->iv.len, 16);\n \taad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);\n \n+\t/*\n+\t * Runtime generate the large plain text instead of use hard code\n+\t * plain text vector. It is done to avoid create huge source file\n+\t * with the test vector.\n+\t */\n+\tif (tdata->aad.len == GMAC_LARGE_PLAINTEXT_LENGTH)\n+\t\tgenerate_gmac_large_plaintext(tdata->aad.data);\n+\n \t/* Generate Crypto op data structure */\n \tut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,\n \t\t\tRTE_CRYPTO_OP_TYPE_SYMMETRIC);\n@@ -4648,6 +5223,12 @@ test_AES_GMAC_authentication_test_case_3(void)\n }\n \n static int\n+test_AES_GMAC_authentication_test_case_4(void)\n+{\n+\treturn test_AES_GMAC_authentication(&gmac_test_case_4);\n+}\n+\n+static int\n test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)\n {\n \tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n@@ -4707,64 +5288,782 @@ test_AES_GMAC_authentication_verify_test_case_3(void)\n \treturn test_AES_GMAC_authentication_verify(&gmac_test_case_3);\n }\n \n-static struct unit_test_suite cryptodev_qat_testsuite  = {\n-\t.suite_name = \"Crypto QAT Unit Test Suite\",\n-\t.setup = testsuite_setup,\n-\t.teardown = testsuite_teardown,\n-\t.unit_test_cases = {\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\t\ttest_device_configure_invalid_dev_id),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\t\ttest_device_configure_invalid_queue_pair_ids),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\t\ttest_queue_pair_descriptor_setup),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\t\ttest_multi_session),\n+static int\n+test_AES_GMAC_authentication_verify_test_case_4(void)\n+{\n+\treturn test_AES_GMAC_authentication_verify(&gmac_test_case_4);\n+}\n \n-\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_stats),\n+struct test_crypto_vector {\n+\tenum rte_crypto_cipher_algorithm crypto_algo;\n \n-\t\t/** AES GCM Authenticated Encryption */\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_1),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_2),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_3),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_4),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_5),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_6),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_7),\n+\tstruct {\n+\t\tuint8_t data[64];\n+\t\tunsigned int len;\n+\t} cipher_key;\n \n-\t\t/** AES GCM Authenticated Decryption */\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_1),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_2),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_3),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_4),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_5),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_6),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_7),\n+\tstruct {\n+\t\tuint8_t data[64];\n+\t\tunsigned int len;\n+\t} iv;\n \n-\t\t/** AES GMAC Authentication */\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_AES_GMAC_authentication_test_case_1),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_AES_GMAC_authentication_verify_test_case_1),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_AES_GMAC_authentication_test_case_2),\n-\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n-\t\t\ttest_AES_GMAC_authentication_verify_test_case_2),\n+\tstruct {\n+\t\tconst uint8_t *data;\n+\t\tunsigned int len;\n+\t} plaintext;\n+\n+\tstruct {\n+\t\tconst uint8_t *data;\n+\t\tunsigned int len;\n+\t} ciphertext;\n+\n+\tenum rte_crypto_auth_algorithm auth_algo;\n+\n+\tstruct {\n+\t\tuint8_t data[128];\n+\t\tunsigned int len;\n+\t} auth_key;\n+\n+\tstruct {\n+\t\tconst uint8_t *data;\n+\t\tunsigned int len;\n+\t} aad;\n+\n+\tstruct {\n+\t\tuint8_t data[128];\n+\t\tunsigned int len;\n+\t} digest;\n+};\n+\n+static const struct test_crypto_vector\n+hmac_sha1_test_crypto_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,\n+\t.plaintext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD\n+\t\t},\n+\t\t.len = 20\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,\n+\t\t\t0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,\n+\t\t\t0x3F, 0x91, 0x64, 0x59\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const struct test_crypto_vector\n+aes128_gmac_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_AES_GCM,\n+\t.aad = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n+\t\t\t0x08, 0x09, 0x0A, 0x0B\n+\t\t},\n+\t\t.len = 12\n+\t},\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,\n+\t\t\t0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,\n+\t\t\t0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A\n+\t\t},\n+\t\t.len = 16\n+\t}\n+};\n+\n+static const struct test_crypto_vector\n+aes128cbc_hmac_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n+\t\t\t0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_aes128cbc,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD\n+\t\t},\n+\t\t.len = 20\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,\n+\t\t\t0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,\n+\t\t\t0x18, 0x8C, 0x1D, 0x32\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static void\n+data_corruption(uint8_t *data)\n+{\n+\tdata[0] += 1;\n+}\n+\n+static void\n+tag_corruption(uint8_t *data, unsigned int tag_offset)\n+{\n+\tdata[tag_offset] += 1;\n+}\n+\n+static int\n+create_auth_session(struct crypto_unittest_params *ut_params,\n+\t\tuint8_t dev_id,\n+\t\tconst struct test_crypto_vector *reference,\n+\t\tenum rte_crypto_auth_operation auth_op)\n+{\n+\tuint8_t auth_key[reference->auth_key.len + 1];\n+\n+\tmemcpy(auth_key, reference->auth_key.data, reference->auth_key.len);\n+\n+\t/* Setup Authentication Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;\n+\tut_params->auth_xform.auth.op = auth_op;\n+\tut_params->auth_xform.next = NULL;\n+\tut_params->auth_xform.auth.algo = reference->auth_algo;\n+\tut_params->auth_xform.auth.key.length = reference->auth_key.len;\n+\tut_params->auth_xform.auth.key.data = auth_key;\n+\tut_params->auth_xform.auth.digest_length = reference->digest.len;\n+\tut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_sym_session_create(dev_id,\n+\t\t\t\t&ut_params->auth_xform);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\treturn 0;\n+}\n+\n+static int\n+create_auth_cipher_session(struct crypto_unittest_params *ut_params,\n+\t\tuint8_t dev_id,\n+\t\tconst struct test_crypto_vector *reference,\n+\t\tenum rte_crypto_auth_operation auth_op,\n+\t\tenum rte_crypto_cipher_operation cipher_op)\n+{\n+\tuint8_t cipher_key[reference->cipher_key.len + 1];\n+\tuint8_t auth_key[reference->auth_key.len + 1];\n+\n+\tmemcpy(cipher_key, reference->cipher_key.data,\n+\t\t\treference->cipher_key.len);\n+\tmemcpy(auth_key, reference->auth_key.data, reference->auth_key.len);\n+\n+\t/* Setup Authentication Parameters */\n+\tut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;\n+\tut_params->auth_xform.auth.op = auth_op;\n+\tut_params->auth_xform.next = &ut_params->cipher_xform;\n+\tut_params->auth_xform.auth.algo = reference->auth_algo;\n+\tut_params->auth_xform.auth.key.length = reference->auth_key.len;\n+\tut_params->auth_xform.auth.key.data = auth_key;\n+\tut_params->auth_xform.auth.digest_length = reference->digest.len;\n+\tut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;\n+\n+\t/* Setup Cipher Parameters */\n+\tut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n+\tut_params->cipher_xform.next = NULL;\n+\tut_params->cipher_xform.cipher.algo = reference->crypto_algo;\n+\tut_params->cipher_xform.cipher.op = cipher_op;\n+\tut_params->cipher_xform.cipher.key.data = cipher_key;\n+\tut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;\n+\n+\t/* Create Crypto session*/\n+\tut_params->sess = rte_cryptodev_sym_session_create(dev_id,\n+\t\t\t\t&ut_params->auth_xform);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->sess, \"Session creation failed\");\n+\n+\treturn 0;\n+}\n+\n+static int\n+create_auth_operation(struct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference,\n+\t\tunsigned int auth_generate)\n+{\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,\n+\t\t\tRTE_CRYPTO_OP_TYPE_SYMMETRIC);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op,\n+\t\t\t\"Failed to allocate pktmbuf offload\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);\n+\n+\tstruct rte_crypto_sym_op *sym_op = ut_params->op->sym;\n+\n+\t/* set crypto operation source mbuf */\n+\tsym_op->m_src = ut_params->ibuf;\n+\n+\t/* digest */\n+\tsym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(\n+\t\t\tut_params->ibuf, reference->digest.len);\n+\n+\tTEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,\n+\t\t\t\"no room to append auth tag\");\n+\n+\tsym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(\n+\t\t\tut_params->ibuf, reference->plaintext.len);\n+\tsym_op->auth.digest.length = reference->digest.len;\n+\n+\tif (auth_generate)\n+\t\tmemset(sym_op->auth.digest.data, 0, reference->digest.len);\n+\telse\n+\t\tmemcpy(sym_op->auth.digest.data,\n+\t\t\t\treference->digest.data,\n+\t\t\t\treference->digest.len);\n+\n+\tTEST_HEXDUMP(stdout, \"digest:\",\n+\t\t\tsym_op->auth.digest.data,\n+\t\t\tsym_op->auth.digest.length);\n+\n+\tsym_op->auth.data.length = reference->plaintext.len;\n+\tsym_op->auth.data.offset = 0;\n+\n+\treturn 0;\n+}\n+\n+static int\n+create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference,\n+\t\tunsigned int auth_generate)\n+{\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,\n+\t\t\tRTE_CRYPTO_OP_TYPE_SYMMETRIC);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op,\n+\t\t\t\"Failed to allocate pktmbuf offload\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);\n+\n+\tstruct rte_crypto_sym_op *sym_op = ut_params->op->sym;\n+\n+\t/* set crypto operation source mbuf */\n+\tsym_op->m_src = ut_params->ibuf;\n+\n+\t/* aad */\n+\tsym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\treference->aad.len);\n+\tTEST_ASSERT_NOT_NULL(sym_op->auth.aad.data, \"no room to append AAD\");\n+\tmemcpy(sym_op->auth.aad.data, reference->aad.data, reference->aad.len);\n+\n+\tTEST_HEXDUMP(stdout, \"AAD:\", sym_op->auth.aad.data, reference->aad.len);\n+\n+\tsym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tsym_op->auth.aad.length = reference->aad.len;\n+\n+\t/* digest */\n+\tsym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(\n+\t\t\tut_params->ibuf, reference->digest.len);\n+\n+\tTEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,\n+\t\t\t\"no room to append auth tag\");\n+\n+\tsym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(\n+\t\t\tut_params->ibuf, reference->ciphertext.len);\n+\tsym_op->auth.digest.length = reference->digest.len;\n+\n+\tif (auth_generate)\n+\t\tmemset(sym_op->auth.digest.data, 0, reference->digest.len);\n+\telse\n+\t\tmemcpy(sym_op->auth.digest.data,\n+\t\t\t\treference->digest.data,\n+\t\t\t\treference->digest.len);\n+\n+\tTEST_HEXDUMP(stdout, \"digest:\",\n+\t\t\tsym_op->auth.digest.data,\n+\t\t\tsym_op->auth.digest.length);\n+\n+\tsym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(\n+\t\tut_params->ibuf, reference->iv.len);\n+\tTEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, \"no room to prepend iv\");\n+\n+\tsym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tsym_op->cipher.iv.length = reference->iv.len;\n+\n+\tmemcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);\n+\n+\tsym_op->cipher.data.length = 0;\n+\tsym_op->cipher.data.offset = 0;\n+\n+\tsym_op->auth.data.length = 0;\n+\tsym_op->auth.data.offset = 0;\n+\n+\treturn 0;\n+}\n+\n+static int\n+create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference,\n+\t\tunsigned int auth_generate)\n+{\n+\t/* Generate Crypto op data structure */\n+\tut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,\n+\t\t\tRTE_CRYPTO_OP_TYPE_SYMMETRIC);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op,\n+\t\t\t\"Failed to allocate pktmbuf offload\");\n+\n+\t/* Set crypto operation data parameters */\n+\trte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);\n+\n+\tstruct rte_crypto_sym_op *sym_op = ut_params->op->sym;\n+\n+\t/* set crypto operation source mbuf */\n+\tsym_op->m_src = ut_params->ibuf;\n+\n+\t/* digest */\n+\tsym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(\n+\t\t\tut_params->ibuf, reference->digest.len);\n+\n+\tTEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,\n+\t\t\t\"no room to append auth tag\");\n+\n+\tsym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(\n+\t\t\tut_params->ibuf, reference->ciphertext.len);\n+\tsym_op->auth.digest.length = reference->digest.len;\n+\n+\tif (auth_generate)\n+\t\tmemset(sym_op->auth.digest.data, 0, reference->digest.len);\n+\telse\n+\t\tmemcpy(sym_op->auth.digest.data,\n+\t\t\t\treference->digest.data,\n+\t\t\t\treference->digest.len);\n+\n+\tTEST_HEXDUMP(stdout, \"digest:\",\n+\t\t\tsym_op->auth.digest.data,\n+\t\t\tsym_op->auth.digest.length);\n+\n+\tsym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(\n+\t\tut_params->ibuf, reference->iv.len);\n+\tTEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, \"no room to prepend iv\");\n+\n+\tsym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);\n+\tsym_op->cipher.iv.length = reference->iv.len;\n+\n+\tmemcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);\n+\n+\tsym_op->cipher.data.length = reference->ciphertext.len;\n+\tsym_op->cipher.data.offset = reference->iv.len;\n+\n+\tsym_op->auth.data.length = reference->ciphertext.len;\n+\tsym_op->auth.data.offset = reference->iv.len;\n+\n+\treturn 0;\n+}\n+\n+static int\n+create_auth_verify_operation(struct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn create_auth_operation(ts_params, ut_params, reference, 0);\n+}\n+\n+static int\n+create_auth_verify_GMAC_operation(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn create_auth_GMAC_operation(ts_params, ut_params, reference, 0);\n+}\n+\n+static int\n+create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn create_cipher_auth_operation(ts_params, ut_params, reference, 0);\n+}\n+\n+static int\n+test_authentication_verify_fail_when_data_corruption(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference,\n+\t\tunsigned int data_corrupted)\n+{\n+\tint retval;\n+\n+\tuint8_t *plaintext;\n+\n+\t/* Create session */\n+\tretval = create_auth_session(ut_params,\n+\t\t\tts_params->valid_devs[0],\n+\t\t\treference,\n+\t\t\tRTE_CRYPTO_AUTH_OP_VERIFY);\n+\tif (retval < 0)\n+\t\treturn retval;\n+\n+\tut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->ibuf,\n+\t\t\t\"Failed to allocate input buffer in mempool\");\n+\n+\t/* clear mbuf payload */\n+\tmemset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,\n+\t\t\trte_pktmbuf_tailroom(ut_params->ibuf));\n+\n+\tplaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\treference->plaintext.len);\n+\tTEST_ASSERT_NOT_NULL(plaintext, \"no room to append plaintext\");\n+\tmemcpy(plaintext, reference->plaintext.data, reference->plaintext.len);\n+\n+\tTEST_HEXDUMP(stdout, \"plaintext:\", plaintext, reference->plaintext.len);\n+\n+\t/* Create operation */\n+\tretval = create_auth_verify_operation(ts_params, ut_params, reference);\n+\n+\tif (retval < 0)\n+\t\treturn retval;\n+\n+\tif (data_corrupted)\n+\t\tdata_corruption(plaintext);\n+\telse\n+\t\ttag_corruption(plaintext, reference->plaintext.len);\n+\n+\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->op);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed crypto process\");\n+\tTEST_ASSERT_EQUAL(ut_params->op->status,\n+\t\t\tRTE_CRYPTO_OP_STATUS_AUTH_FAILED,\n+\t\t\t\"authentication not failed\");\n+\n+\tut_params->obuf = ut_params->op->sym->m_src;\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\treturn 0;\n+}\n+\n+static int\n+test_authentication_verify_GMAC_fail_when_corruption(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference,\n+\t\tunsigned int data_corrupted)\n+{\n+\tint retval;\n+\n+\t/* Create session */\n+\tretval = create_auth_cipher_session(ut_params,\n+\t\t\tts_params->valid_devs[0],\n+\t\t\treference,\n+\t\t\tRTE_CRYPTO_AUTH_OP_VERIFY,\n+\t\t\tRTE_CRYPTO_CIPHER_OP_DECRYPT);\n+\tif (retval < 0)\n+\t\treturn retval;\n+\n+\tut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->ibuf,\n+\t\t\t\"Failed to allocate input buffer in mempool\");\n+\n+\t/* clear mbuf payload */\n+\tmemset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,\n+\t\t\trte_pktmbuf_tailroom(ut_params->ibuf));\n+\n+\t/* Create operation */\n+\tretval = create_auth_verify_GMAC_operation(ts_params,\n+\t\t\tut_params,\n+\t\t\treference);\n+\n+\tif (retval < 0)\n+\t\treturn retval;\n+\n+\tif (data_corrupted)\n+\t\tdata_corruption(ut_params->op->sym->auth.aad.data);\n+\telse\n+\t\ttag_corruption(ut_params->op->sym->auth.aad.data,\n+\t\t\t\treference->aad.len);\n+\n+\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->op);\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed crypto process\");\n+\tTEST_ASSERT_EQUAL(ut_params->op->status,\n+\t\t\tRTE_CRYPTO_OP_STATUS_AUTH_FAILED,\n+\t\t\t\"authentication not failed\");\n+\n+\tut_params->obuf = ut_params->op->sym->m_src;\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\treturn 0;\n+}\n+\n+static int\n+test_authenticated_decryption_fail_when_corruption(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference,\n+\t\tunsigned int data_corrupted)\n+{\n+\tint retval;\n+\n+\tuint8_t *ciphertext;\n+\n+\t/* Create session */\n+\tretval = create_auth_cipher_session(ut_params,\n+\t\t\tts_params->valid_devs[0],\n+\t\t\treference,\n+\t\t\tRTE_CRYPTO_AUTH_OP_VERIFY,\n+\t\t\tRTE_CRYPTO_CIPHER_OP_DECRYPT);\n+\tif (retval < 0)\n+\t\treturn retval;\n+\n+\tut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);\n+\tTEST_ASSERT_NOT_NULL(ut_params->ibuf,\n+\t\t\t\"Failed to allocate input buffer in mempool\");\n+\n+\t/* clear mbuf payload */\n+\tmemset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,\n+\t\t\trte_pktmbuf_tailroom(ut_params->ibuf));\n+\n+\tciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,\n+\t\t\treference->ciphertext.len);\n+\tTEST_ASSERT_NOT_NULL(ciphertext, \"no room to append ciphertext\");\n+\tmemcpy(ciphertext, reference->ciphertext.data,\n+\t\t\treference->ciphertext.len);\n+\n+\t/* Create operation */\n+\tretval = create_cipher_auth_verify_operation(ts_params,\n+\t\t\tut_params,\n+\t\t\treference);\n+\n+\tif (retval < 0)\n+\t\treturn retval;\n+\n+\tif (data_corrupted)\n+\t\tdata_corruption(ciphertext);\n+\telse\n+\t\ttag_corruption(ciphertext, reference->ciphertext.len);\n+\n+\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\tut_params->op);\n+\n+\tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed crypto process\");\n+\tTEST_ASSERT_EQUAL(ut_params->op->status,\n+\t\t\tRTE_CRYPTO_OP_STATUS_AUTH_FAILED,\n+\t\t\t\"authentication not failed\");\n+\n+\tut_params->obuf = ut_params->op->sym->m_src;\n+\tTEST_ASSERT_NOT_NULL(ut_params->obuf, \"failed to retrieve obuf\");\n+\n+\treturn 0;\n+}\n+\n+static int\n+test_authentication_verify_fail_when_data_corrupted(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn test_authentication_verify_fail_when_data_corruption(\n+\t\t\tts_params, ut_params, reference, 1);\n+}\n+\n+static int\n+test_authentication_verify_fail_when_tag_corrupted(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn test_authentication_verify_fail_when_data_corruption(\n+\t\t\tts_params, ut_params, reference, 0);\n+}\n+\n+static int\n+test_authentication_verify_GMAC_fail_when_data_corrupted(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn test_authentication_verify_GMAC_fail_when_corruption(\n+\t\t\tts_params, ut_params, reference, 1);\n+}\n+\n+static int\n+test_authentication_verify_GMAC_fail_when_tag_corrupted(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn test_authentication_verify_GMAC_fail_when_corruption(\n+\t\t\tts_params, ut_params, reference, 0);\n+}\n+\n+static int\n+test_authenticated_decryption_fail_when_data_corrupted(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn test_authenticated_decryption_fail_when_corruption(\n+\t\t\tts_params, ut_params, reference, 1);\n+}\n+\n+static int\n+test_authenticated_decryption_fail_when_tag_corrupted(\n+\t\tstruct crypto_testsuite_params *ts_params,\n+\t\tstruct crypto_unittest_params *ut_params,\n+\t\tconst struct test_crypto_vector *reference)\n+{\n+\treturn test_authenticated_decryption_fail_when_corruption(\n+\t\t\tts_params, ut_params, reference, 0);\n+}\n+\n+static int\n+authentication_verify_HMAC_SHA1_fail_data_corrupt(void)\n+{\n+\treturn test_authentication_verify_fail_when_data_corrupted(\n+\t\t\t&testsuite_params, &unittest_params,\n+\t\t\t&hmac_sha1_test_crypto_vector);\n+}\n+\n+static int\n+authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)\n+{\n+\treturn test_authentication_verify_fail_when_tag_corrupted(\n+\t\t\t&testsuite_params, &unittest_params,\n+\t\t\t&hmac_sha1_test_crypto_vector);\n+}\n+\n+static int\n+authentication_verify_AES128_GMAC_fail_data_corrupt(void)\n+{\n+\treturn test_authentication_verify_GMAC_fail_when_data_corrupted(\n+\t\t\t&testsuite_params, &unittest_params,\n+\t\t\t&aes128_gmac_test_vector);\n+}\n+\n+static int\n+authentication_verify_AES128_GMAC_fail_tag_corrupt(void)\n+{\n+\treturn test_authentication_verify_GMAC_fail_when_tag_corrupted(\n+\t\t\t&testsuite_params, &unittest_params,\n+\t\t\t&aes128_gmac_test_vector);\n+}\n+\n+static int\n+auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)\n+{\n+\treturn test_authenticated_decryption_fail_when_data_corrupted(\n+\t\t\t&testsuite_params,\n+\t\t\t&unittest_params,\n+\t\t\t&aes128cbc_hmac_sha1_test_vector);\n+}\n+\n+static int\n+auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)\n+{\n+\treturn test_authenticated_decryption_fail_when_tag_corrupted(\n+\t\t\t&testsuite_params,\n+\t\t\t&unittest_params,\n+\t\t\t&aes128cbc_hmac_sha1_test_vector);\n+}\n+\n+static struct unit_test_suite cryptodev_qat_testsuite  = {\n+\t.suite_name = \"Crypto QAT Unit Test Suite\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_device_configure_invalid_dev_id),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_device_configure_invalid_queue_pair_ids),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_queue_pair_descriptor_setup),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_multi_session),\n+\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\t\t\ttest_3DES_cipheronly_qat_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_stats),\n+\n+\t\t/** AES GCM Authenticated Encryption */\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_2),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_3),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_4),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_5),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_6),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_7),\n+\n+\t\t/** AES GCM Authenticated Decryption */\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_2),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_3),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_4),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_5),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_6),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_7),\n+\n+\t\t/** AES GMAC Authentication */\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_verify_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_test_case_2),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_verify_test_case_2),\n \t\tTEST_CASE_ST(ut_setup, ut_teardown,\n \t\t\ttest_AES_GMAC_authentication_test_case_3),\n \t\tTEST_CASE_ST(ut_setup, ut_teardown,\n@@ -4863,6 +6162,93 @@ static struct unit_test_suite cryptodev_aesni_mb_testsuite  = {\n \t}\n };\n \n+static struct unit_test_suite cryptodev_libcrypto_testsuite  = {\n+\t.suite_name = \"Crypto Device LIBCRYPTO Unit Test Suite\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_multi_session_random_usage),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_AES_chain_libcrypto_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_AES_cipheronly_libcrypto_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_3DES_chain_libcrypto_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_3DES_cipheronly_libcrypto_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_authonly_libcrypto_all),\n+\n+\t\t/** AES GCM Authenticated Encryption */\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_2),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_3),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_4),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_5),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_6),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_encryption_test_case_7),\n+\n+\t\t/** AES GCM Authenticated Decryption */\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_2),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_3),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_4),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_5),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_6),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_mb_AES_GCM_authenticated_decryption_test_case_7),\n+\n+\t\t/** AES GMAC Authentication */\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_verify_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_test_case_2),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_verify_test_case_2),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_test_case_3),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_verify_test_case_3),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_test_case_4),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GMAC_authentication_verify_test_case_4),\n+\n+\t\t/** Negative tests */\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\tauthentication_verify_HMAC_SHA1_fail_data_corrupt),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\tauthentication_verify_HMAC_SHA1_fail_tag_corrupt),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\tauthentication_verify_AES128_GMAC_fail_data_corrupt),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\tauthentication_verify_AES128_GMAC_fail_tag_corrupt),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\tauth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\tauth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),\n+\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\n+};\n+\n static struct unit_test_suite cryptodev_aesni_gcm_testsuite  = {\n \t.suite_name = \"Crypto Device AESNI GCM Unit Test Suite\",\n \t.setup = testsuite_setup,\n@@ -5106,6 +6492,14 @@ test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)\n }\n \n static int\n+test_cryptodev_libcrypto(void)\n+{\n+\tgbl_cryptodev_type = RTE_CRYPTODEV_LIBCRYPTO_PMD;\n+\n+\treturn unit_test_suite_runner(&cryptodev_libcrypto_testsuite);\n+}\n+\n+static int\n test_cryptodev_aesni_gcm(void)\n {\n \tgbl_cryptodev_type = RTE_CRYPTODEV_AESNI_GCM_PMD;\n@@ -5147,6 +6541,7 @@ test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)\n \n REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);\n REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);\n+REGISTER_TEST_COMMAND(cryptodev_libcrypto_autotest, test_cryptodev_libcrypto);\n REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);\n REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);\n REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);\ndiff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h\nindex 3c37c32..a9089aa 100644\n--- a/app/test/test_cryptodev.h\n+++ b/app/test/test_cryptodev.h\n@@ -63,6 +63,7 @@\n #define DIGEST_BYTE_LENGTH_SNOW3G_UIA2\t\t(BYTE_LENGTH(32))\n #define DIGEST_BYTE_LENGTH_KASUMI_F9\t\t(BYTE_LENGTH(32))\n #define AES_XCBC_MAC_KEY_SZ\t\t\t(16)\n+#define DIGEST_BYTE_LENGTH_AES_GCM\t\t(BYTE_LENGTH(128))\n \n #define TRUNCATED_DIGEST_BYTE_LENGTH_SHA1\t\t(12)\n #define TRUNCATED_DIGEST_BYTE_LENGTH_SHA224\t\t(16)\ndiff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h\nindex 92c0cc2..e922cd3 100644\n--- a/app/test/test_cryptodev_aes_test_vectors.h\n+++ b/app/test/test_cryptodev_aes_test_vectors.h\n@@ -634,12 +634,204 @@ static const struct blockcipher_test_data aes_test_data_9 = {\n \t}\n };\n \n+static const uint8_t ciphertext512_aes192cbc[] = {\n+\t0x45, 0xEE, 0x9A, 0xEA, 0x3C, 0x03, 0xFC, 0x4C,\n+\t0x84, 0x36, 0xB0, 0xDA, 0xB0, 0xDC, 0xF3, 0x5B,\n+\t0x75, 0xA7, 0xBE, 0x0E, 0xC0, 0x8D, 0x6C, 0xF8,\n+\t0xC1, 0x0F, 0xD0, 0x35, 0x1D, 0x82, 0xAE, 0x7C,\n+\t0x57, 0xC5, 0x7A, 0x55, 0x87, 0x1B, 0xD4, 0x03,\n+\t0x0A, 0x64, 0xC9, 0xE0, 0xF4, 0xC7, 0x6F, 0x57,\n+\t0x52, 0xC6, 0x73, 0xBA, 0x84, 0x0B, 0x5B, 0x89,\n+\t0x21, 0xD2, 0x9B, 0x88, 0x68, 0xF5, 0xA9, 0x7F,\n+\t0x3F, 0x49, 0xEB, 0xF4, 0xD4, 0x52, 0xD2, 0x64,\n+\t0x80, 0xB2, 0x53, 0xDA, 0x19, 0xF6, 0x10, 0x24,\n+\t0x23, 0x26, 0x7A, 0x7C, 0x07, 0x57, 0x4B, 0x0E,\n+\t0x58, 0x49, 0x61, 0xD1, 0xDC, 0x9A, 0x32, 0x6B,\n+\t0x0F, 0x43, 0x9E, 0x4D, 0xB4, 0x07, 0x4E, 0xB3,\n+\t0x51, 0x74, 0xDE, 0x29, 0xBC, 0x98, 0xF9, 0xDF,\n+\t0x78, 0x9A, 0x18, 0x9C, 0xD6, 0x7A, 0x55, 0x7C,\n+\t0xE6, 0x1D, 0x5C, 0x1A, 0x99, 0xD2, 0xC3, 0x7B,\n+\t0x9F, 0x96, 0x74, 0x2D, 0xE0, 0xEF, 0xD1, 0xE3,\n+\t0x08, 0x9F, 0xAF, 0xE6, 0xED, 0xCA, 0xE1, 0xEA,\n+\t0x23, 0x6F, 0x7C, 0x81, 0xA8, 0xC0, 0x5B, 0x8B,\n+\t0x53, 0x90, 0x51, 0x2D, 0x0F, 0xF6, 0x7D, 0xA7,\n+\t0x1C, 0xBD, 0x83, 0x84, 0x54, 0xA4, 0x15, 0xFB,\n+\t0x3E, 0x25, 0xA7, 0x3A, 0x0A, 0x73, 0xD9, 0x88,\n+\t0x6F, 0x80, 0x78, 0x95, 0x7F, 0x60, 0xAA, 0x86,\n+\t0x8A, 0xFC, 0xDF, 0xC1, 0xCB, 0xDE, 0xBB, 0x25,\n+\t0x52, 0x20, 0xC6, 0x79, 0xD4, 0x0F, 0x25, 0xE7,\n+\t0xDB, 0xB2, 0x17, 0xA4, 0x6F, 0x3C, 0x6F, 0x91,\n+\t0xF6, 0x44, 0x1E, 0xB6, 0x85, 0xBC, 0x7A, 0x14,\n+\t0x10, 0x72, 0xBD, 0x16, 0x63, 0x39, 0x9E, 0x7B,\n+\t0x84, 0x5B, 0x17, 0x61, 0xB1, 0x5D, 0x82, 0x0B,\n+\t0x6D, 0x37, 0xD7, 0x79, 0xB8, 0x24, 0x91, 0x30,\n+\t0x82, 0x91, 0x02, 0xB1, 0x18, 0x4B, 0xE0, 0xF4,\n+\t0x13, 0x1B, 0xB2, 0x4C, 0xDA, 0xB8, 0x99, 0x96,\n+\t0x83, 0x2F, 0xBE, 0x53, 0x8D, 0xDE, 0xFA, 0xAD,\n+\t0xF6, 0x5C, 0xDB, 0xE5, 0x66, 0x26, 0x8F, 0x13,\n+\t0x2B, 0x76, 0x47, 0x73, 0xDE, 0x1A, 0x74, 0xA6,\n+\t0x30, 0xAF, 0x42, 0xA0, 0xE5, 0xD2, 0x8F, 0xC2,\n+\t0xED, 0x3E, 0x9E, 0x29, 0x54, 0x3C, 0xDE, 0x9F,\n+\t0x5D, 0x30, 0x2B, 0x63, 0xFB, 0xE3, 0xB1, 0x07,\n+\t0xEE, 0x74, 0x4A, 0xAF, 0xB1, 0x20, 0x8D, 0xEC,\n+\t0xE6, 0x78, 0x16, 0x8D, 0xA4, 0x6E, 0x34, 0x7D,\n+\t0x47, 0xFB, 0x0B, 0xC1, 0x32, 0xD7, 0x0D, 0x6C,\n+\t0x6F, 0x93, 0x9C, 0x5E, 0xEF, 0x1F, 0x9C, 0x45,\n+\t0x80, 0x6B, 0x74, 0xA6, 0x81, 0xF2, 0xF6, 0xFA,\n+\t0xAA, 0x9D, 0x4F, 0xCA, 0xB5, 0x90, 0x59, 0xB0,\n+\t0x3B, 0xF2, 0xF0, 0x75, 0xFD, 0x8A, 0xD8, 0x97,\n+\t0x65, 0x88, 0x56, 0x4C, 0x44, 0xDF, 0x73, 0xF7,\n+\t0x56, 0x9C, 0x48, 0x7E, 0xB0, 0x1F, 0x1D, 0x7D,\n+\t0x6A, 0x11, 0xF5, 0xC2, 0xF4, 0x17, 0xEF, 0x58,\n+\t0xD8, 0x2A, 0xAF, 0x56, 0x2F, 0xCF, 0xEC, 0xA4,\n+\t0x58, 0x8B, 0x60, 0xCE, 0xD4, 0x0F, 0x9C, 0x21,\n+\t0xEC, 0x3E, 0x74, 0x7B, 0x81, 0x3D, 0x69, 0xC6,\n+\t0x5E, 0x12, 0x83, 0xE9, 0xEF, 0x81, 0x58, 0x36,\n+\t0x6A, 0x60, 0x0F, 0x54, 0x28, 0x11, 0xF9, 0x64,\n+\t0x36, 0xAD, 0x79, 0xF5, 0x1C, 0x74, 0xD0, 0xC3,\n+\t0x7B, 0x61, 0xE1, 0x92, 0xB0, 0x13, 0x91, 0x87,\n+\t0x32, 0x1F, 0xF2, 0x5A, 0xDA, 0x25, 0x69, 0xEB,\n+\t0xD7, 0x32, 0x7F, 0xF5, 0x23, 0x21, 0x54, 0x47,\n+\t0x7B, 0x1B, 0x33, 0xB0, 0x3D, 0xF6, 0xE2, 0x7E,\n+\t0x3E, 0xA2, 0x9E, 0xCA, 0x48, 0x0B, 0x4A, 0x29,\n+\t0x81, 0xD4, 0x4E, 0xD5, 0x69, 0xFB, 0xCD, 0x37,\n+\t0x8A, 0xC1, 0x5B, 0x50, 0xFF, 0xB5, 0x7D, 0x43,\n+\t0x0F, 0xAE, 0xA6, 0xC2, 0xE5, 0x8F, 0x45, 0xB2,\n+\t0x85, 0x99, 0x02, 0xA2, 0x9B, 0xBE, 0x90, 0x43,\n+\t0x4F, 0x2F, 0x50, 0xE2, 0x77, 0x62, 0xD9, 0xCC\n+};\n+\n+/** AES-192-CBC test vector */\n+static const struct blockcipher_test_data aes_test_data_10 = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t\t0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0\n+\t\t},\n+\t\t.len = 24\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n+\t\t\t0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_aes_common,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_aes192cbc,\n+\t\t.len = 512\n+\t}\n+};\n+\n+static const uint8_t ciphertext512_aes256cbc[] = {\n+\t0xF3, 0xDD, 0xF0, 0x0B, 0xFF, 0xA2, 0x6A, 0x04,\n+\t0xBE, 0xDA, 0x52, 0xA6, 0xFE, 0x6B, 0xA6, 0xA7,\n+\t0x48, 0x1D, 0x7D, 0x98, 0x65, 0xDB, 0xEF, 0x06,\n+\t0x26, 0xB5, 0x8E, 0xEB, 0x05, 0x0E, 0x77, 0x98,\n+\t0x17, 0x8E, 0xD0, 0xD4, 0x7B, 0x92, 0x8F, 0x5C,\n+\t0xD0, 0x74, 0x5C, 0xA8, 0x4B, 0x54, 0xB6, 0x2F,\n+\t0x83, 0x72, 0x2C, 0xFF, 0x72, 0xE9, 0xE4, 0x15,\n+\t0x4C, 0x32, 0xAF, 0xC8, 0xC9, 0x89, 0x3C, 0x6E,\n+\t0x31, 0xD5, 0xC0, 0x16, 0xC0, 0x31, 0x7D, 0x11,\n+\t0xAB, 0xCB, 0xDE, 0xD2, 0xD6, 0xAA, 0x76, 0x5E,\n+\t0xBA, 0xF6, 0xE2, 0x92, 0xCB, 0x86, 0x07, 0xFA,\n+\t0xD4, 0x9E, 0x83, 0xED, 0xFD, 0xB8, 0x70, 0x54,\n+\t0x6B, 0xBE, 0xEC, 0x72, 0xDD, 0x28, 0x5E, 0x95,\n+\t0x78, 0xA5, 0x28, 0x43, 0x3D, 0x6D, 0xB1, 0xD9,\n+\t0x69, 0x1F, 0xC9, 0x66, 0x0E, 0x32, 0x44, 0x08,\n+\t0xD2, 0xAE, 0x2C, 0x43, 0xF2, 0xD0, 0x7D, 0x26,\n+\t0x70, 0xE5, 0xA1, 0xCA, 0x37, 0xE9, 0x7D, 0xC7,\n+\t0xA3, 0xFA, 0x81, 0x91, 0x64, 0xAA, 0x64, 0x91,\n+\t0x9A, 0x95, 0x2D, 0xC9, 0xF9, 0xCE, 0xFE, 0x9F,\n+\t0xC4, 0xD8, 0x81, 0xBE, 0x57, 0x84, 0xC5, 0x02,\n+\t0xDB, 0x30, 0xC1, 0xD9, 0x0E, 0xA0, 0xA6, 0x00,\n+\t0xD6, 0xF3, 0x52, 0x7E, 0x0D, 0x23, 0x6B, 0x2B,\n+\t0x34, 0x99, 0x1F, 0x70, 0x27, 0x6D, 0x58, 0x84,\n+\t0x93, 0x77, 0xB8, 0x3E, 0xF1, 0x71, 0x58, 0x42,\n+\t0x8B, 0x2B, 0xC8, 0x6D, 0x05, 0x84, 0xFF, 0x4E,\n+\t0x85, 0xEF, 0x4A, 0x9D, 0x91, 0x6A, 0xD5, 0xE1,\n+\t0xAF, 0x01, 0xEB, 0x83, 0x8F, 0x23, 0x7C, 0x7F,\n+\t0x12, 0x91, 0x05, 0xF0, 0x4E, 0xD9, 0x17, 0x62,\n+\t0x75, 0xBB, 0xAC, 0x97, 0xEE, 0x3B, 0x4E, 0xC7,\n+\t0xE5, 0x92, 0xF8, 0x9D, 0x4C, 0xF9, 0xEE, 0x55,\n+\t0x18, 0xBB, 0xCC, 0xB4, 0xF2, 0x59, 0xB9, 0xFC,\n+\t0x7A, 0x0F, 0x98, 0xD4, 0x8B, 0xFE, 0xF7, 0x83,\n+\t0x46, 0xE2, 0x83, 0x33, 0x3E, 0x95, 0x8D, 0x17,\n+\t0x1E, 0x85, 0xF8, 0x8C, 0x51, 0xB0, 0x6C, 0xB5,\n+\t0x5E, 0x95, 0xBA, 0x4B, 0x69, 0x1B, 0x48, 0x69,\n+\t0x0B, 0x8F, 0xA5, 0x18, 0x13, 0xB9, 0x77, 0xD1,\n+\t0x80, 0x32, 0x32, 0x6D, 0x53, 0xA1, 0x95, 0x40,\n+\t0x96, 0x8A, 0xCC, 0xA3, 0x69, 0xF8, 0x9F, 0xB5,\n+\t0x8E, 0xD2, 0x68, 0x07, 0x4F, 0xA7, 0xEC, 0xF8,\n+\t0x20, 0x21, 0x58, 0xF8, 0xD8, 0x9E, 0x5F, 0x40,\n+\t0xBA, 0xB9, 0x76, 0x57, 0x3B, 0x17, 0xAD, 0xEE,\n+\t0xCB, 0xDF, 0x07, 0xC1, 0xDF, 0x66, 0xA8, 0x0D,\n+\t0xC2, 0xCE, 0x8F, 0x79, 0xC3, 0x32, 0xE0, 0x8C,\n+\t0xFE, 0x5A, 0xF3, 0x55, 0x27, 0x73, 0x6F, 0xA1,\n+\t0x54, 0xC6, 0xFC, 0x28, 0x9D, 0xBE, 0x97, 0xB9,\n+\t0x54, 0x97, 0x72, 0x3A, 0x61, 0xAF, 0x6F, 0xDE,\n+\t0xF8, 0x0E, 0xBB, 0x6B, 0x96, 0x84, 0xDD, 0x9B,\n+\t0x62, 0xBA, 0x47, 0xB5, 0xC9, 0x3B, 0x4E, 0x8C,\n+\t0x78, 0x2A, 0xCC, 0x0A, 0x69, 0x54, 0x25, 0x5E,\n+\t0x8B, 0xAC, 0x56, 0xD9, 0xFE, 0x48, 0xBA, 0xCE,\n+\t0xA9, 0xCE, 0xA6, 0x1D, 0xBF, 0x3E, 0x3C, 0x66,\n+\t0x40, 0x71, 0x79, 0xAD, 0x5B, 0x26, 0xAD, 0xBE,\n+\t0x58, 0x13, 0x64, 0x60, 0x7C, 0x05, 0xFC, 0xE3,\n+\t0x51, 0x7A, 0xF2, 0xCC, 0x54, 0x16, 0x2C, 0xA4,\n+\t0xCE, 0x5F, 0x59, 0x12, 0x77, 0xEB, 0xD9, 0x23,\n+\t0xE3, 0x86, 0xFB, 0xD7, 0x48, 0x76, 0x9D, 0xE3,\n+\t0x89, 0x87, 0x39, 0xFA, 0x7B, 0x21, 0x0B, 0x76,\n+\t0xB2, 0xED, 0x1C, 0x27, 0x4B, 0xD5, 0x27, 0x05,\n+\t0x8C, 0x7D, 0x58, 0x6C, 0xCA, 0xA5, 0x54, 0x9A,\n+\t0x0F, 0xCB, 0xE9, 0x88, 0x31, 0xAD, 0x49, 0xEE,\n+\t0x38, 0xFB, 0xC9, 0xFB, 0xB4, 0x7A, 0x00, 0x58,\n+\t0x20, 0x32, 0xD3, 0x53, 0x5A, 0xDD, 0x74, 0x95,\n+\t0x60, 0x59, 0x09, 0xAE, 0x7E, 0xEC, 0x74, 0xA3,\n+\t0xB7, 0x1C, 0x6D, 0xF2, 0xAE, 0x79, 0xA4, 0x7C\n+};\n+\n+/** AES-256-CBC test vector */\n+static const struct blockcipher_test_data aes_test_data_11 = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t\t0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0,\n+\t\t\t0x37, 0x07, 0xB8, 0x23, 0xA2, 0xA3, 0xB5, 0x8D\n+\t\t},\n+\t\t.len = 32\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n+\t\t\t0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_aes_common,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_aes256cbc,\n+\t\t.len = 512\n+\t}\n+};\n+\n static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t{\n \t\t.test_descr = \"AES-128-CTR HMAC-SHA1 Encryption Digest\",\n \t\t.test_data = &aes_test_data_1,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -648,6 +840,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_1,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -669,6 +862,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_3,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -677,6 +871,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_3,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -684,6 +879,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_4,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -692,6 +888,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_4,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -699,6 +896,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_5,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -707,6 +905,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_5,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -714,6 +913,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_6,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -722,7 +922,8 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_6,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,\n-\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n \t},\n \t{\n \t\t.test_descr = \"AES-128-CBC HMAC-SHA512 Decryption Digest \"\n@@ -730,6 +931,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_6,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -752,7 +954,8 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_4,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,\n-\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n \t},\n \t{\n \t\t.test_descr = \"AES-128-CBC HMAC-SHA1 Decryption Digest \"\n@@ -760,13 +963,15 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_4,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n \t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,\n-\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n \t},\n \t{\n \t\t.test_descr = \"AES-128-CBC HMAC-SHA224 Encryption Digest\",\n \t\t.test_data = &aes_test_data_8,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -775,6 +980,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_8,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -782,6 +988,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_9,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n \t{\n@@ -790,8 +997,101 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {\n \t\t.test_data = &aes_test_data_9,\n \t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n \t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n \t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n \t},\n+\t{\n+\t\t.test_descr = \"AES-128-CBC HMAC-SHA1 Encryption Digest \"\n+\t\t\t\t\"Sessionless\",\n+\t\t.test_data = &aes_test_data_4,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr =\n+\t\t\t\t\"AES-128-CBC HMAC-SHA1 Decryption Digest \"\n+\t\t\t\t\"Verify Sessionless\",\n+\t\t.test_data = &aes_test_data_4,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+};\n+\n+static const struct blockcipher_test_case aes_cipheronly_test_cases[] = {\n+\t{\n+\t\t.test_descr = \"AES-128-CBC Encryption\",\n+\t\t.test_data = &aes_test_data_4,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-128-CBC Decryption\",\n+\t\t.test_data = &aes_test_data_4,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-192-CBC Encryption\",\n+\t\t.test_data = &aes_test_data_10,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-192-CBC Decryption\",\n+\t\t.test_data = &aes_test_data_10,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-256-CBC Encryption\",\n+\t\t.test_data = &aes_test_data_11,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-256-CBC Decryption\",\n+\t\t.test_data = &aes_test_data_11,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-128-CTR Encryption\",\n+\t\t.test_data = &aes_test_data_1,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-128-CTR Decryption\",\n+\t\t.test_data = &aes_test_data_1,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-192-CTR Encryption\",\n+\t\t.test_data = &aes_test_data_2,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-192-CTR Decryption\",\n+\t\t.test_data = &aes_test_data_2,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-256-CTR Encryption\",\n+\t\t.test_data = &aes_test_data_3,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"AES-256-CTR Decryption\",\n+\t\t.test_data = &aes_test_data_3,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n };\n \n #endif /* TEST_CRYPTODEV_AES_TEST_VECTORS_H_ */\ndiff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c\nindex a1d8c8b..deb2ada 100644\n--- a/app/test/test_cryptodev_blockcipher.c\n+++ b/app/test/test_cryptodev_blockcipher.c\n@@ -43,6 +43,8 @@\n #include \"test.h\"\n #include \"test_cryptodev_blockcipher.h\"\n #include \"test_cryptodev_aes_test_vectors.h\"\n+#include \"test_cryptodev_des_test_vectors.h\"\n+#include \"test_cryptodev_hash_test_vectors.h\"\n \n static int\n test_blockcipher_one_case(const struct blockcipher_test_case *t,\n@@ -79,6 +81,7 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t,\n \n \tswitch (cryptodev_type) {\n \tcase RTE_CRYPTODEV_QAT_SYM_PMD:\n+\tcase RTE_CRYPTODEV_LIBCRYPTO_PMD:\n \t\tdigest_len = tdata->digest.len;\n \t\tbreak;\n \tcase RTE_CRYPTODEV_AESNI_MB_PMD:\n@@ -472,9 +475,25 @@ test_blockcipher_all_tests(struct rte_mempool *mbuf_pool,\n \t\ttcs = aes_chain_test_cases;\n \t\tbreak;\n \tcase BLKCIPHER_AES_CIPHERONLY_TYPE:\n+\t\tn_test_cases = sizeof(aes_cipheronly_test_cases) /\n+\t\tsizeof(aes_cipheronly_test_cases[0]);\n+\t\ttcs = aes_cipheronly_test_cases;\n+\t\tbreak;\n \tcase BLKCIPHER_3DES_CHAIN_TYPE:\n+\t\tn_test_cases = sizeof(triple_des_chain_test_cases) /\n+\t\tsizeof(triple_des_chain_test_cases[0]);\n+\t\ttcs = triple_des_chain_test_cases;\n+\t\tbreak;\n \tcase BLKCIPHER_3DES_CIPHERONLY_TYPE:\n+\t\tn_test_cases = sizeof(triple_des_cipheronly_test_cases) /\n+\t\tsizeof(triple_des_cipheronly_test_cases[0]);\n+\t\ttcs = triple_des_cipheronly_test_cases;\n+\t\tbreak;\n \tcase BLKCIPHER_AUTHONLY_TYPE:\n+\t\tn_test_cases = sizeof(hash_test_cases) /\n+\t\tsizeof(hash_test_cases[0]);\n+\t\ttcs = hash_test_cases;\n+\t\tbreak;\n \tdefault:\n \t\tbreak;\n \t}\n@@ -486,6 +505,9 @@ test_blockcipher_all_tests(struct rte_mempool *mbuf_pool,\n \tcase RTE_CRYPTODEV_QAT_SYM_PMD:\n \t\ttarget_pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT;\n \t\tbreak;\n+\tcase RTE_CRYPTODEV_LIBCRYPTO_PMD:\n+\t\ttarget_pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO;\n+\t\tbreak;\n \tdefault:\n \t\tTEST_ASSERT(0, \"Unrecognized cryptodev type\");\n \t\tbreak;\ndiff --git a/app/test/test_cryptodev_blockcipher.h b/app/test/test_cryptodev_blockcipher.h\nindex 3e25d4d..cce094d 100644\n--- a/app/test/test_cryptodev_blockcipher.h\n+++ b/app/test/test_cryptodev_blockcipher.h\n@@ -48,6 +48,7 @@\n \n #define BLOCKCIPHER_TEST_TARGET_PMD_MB\t\t0x0001 /* Multi-buffer flag */\n #define BLOCKCIPHER_TEST_TARGET_PMD_QAT\t\t\t0x0002 /* QAT flag */\n+#define BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\t0x0004 /* SW LIBCRYPTO flag */\n \n #define BLOCKCIPHER_TEST_OP_CIPHER\t(BLOCKCIPHER_TEST_OP_ENCRYPT | \\\n \t\t\t\t\tBLOCKCIPHER_TEST_OP_DECRYPT)\ndiff --git a/app/test/test_cryptodev_des_test_vectors.h b/app/test/test_cryptodev_des_test_vectors.h\nnew file mode 100644\nindex 0000000..687ccbe\n--- /dev/null\n+++ b/app/test/test_cryptodev_des_test_vectors.h\n@@ -0,0 +1,955 @@\n+/*\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2016 Intel Corporation. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *\t * Redistributions of source code must retain the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer.\n+ *\t * Redistributions in binary form must reproduce the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer in\n+ *\t   the documentation and/or other materials provided with the\n+ *\t   distribution.\n+ *\t * Neither the name of Intel Corporation nor the names of its\n+ *\t   contributors may be used to endorse or promote products derived\n+ *\t   from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef TEST_CRYPTODEV_DES_TEST_VECTORS_H_\n+#define TEST_CRYPTODEV_DES_TEST_VECTORS_H_\n+\n+static const uint8_t plaintext_des[] = {\n+\t\"What a lousy earth! He wondered how many people \"\n+\t\"were destitute that same night even in his own \"\n+\t\"prosperous country, how many homes were \"\n+\t\"shanties, how many husbands were drunk and \"\n+\t\"wives socked, and how many children were \"\n+\t\"bullied, abused, or abandoned. How many \"\n+\t\"families hungered for food they could not \"\n+\t\"afford to buy? How many hearts were broken? How \"\n+\t\"many suicides would take place that same night, \"\n+\t\"how many people would go insane? How many \"\n+\t\"cockroaches and landlords would triumph? How \"\n+\t\"many winners were losers, successes failures, \"\n+\t\"and rich men poor men? How many wise guys were \"\n+\t\"stupid? How many happy endings were unhappy \"\n+\t\"endings? How many honest men were liars, brave \"\n+\t\"men cowards, loyal men traitors, how many \"\n+\t\"sainted men were corrupt, how many people in \"\n+\t\"positions of trust had sold their souls to \"\n+\t\"bodyguards, how many had never had souls? How \"\n+\t\"many straight-and-narrow paths were crooked \"\n+\t\"paths? How many best families were worst \"\n+\t\"families and how many good people were bad \"\n+\t\"people? When you added them all up and then \"\n+\t\"subtracted, you might be left with only the \"\n+\t\"children, and perhaps with Albert Einstein and \"\n+\t\"an old violinist or sculptor somewhere.\"\n+};\n+\n+static const uint8_t ciphertext512_des128ctr[] = {\n+\t0x13, 0x39, 0x3B, 0xBC, 0x1D, 0xE3, 0x23, 0x09,\n+\t0x9B, 0x08, 0xD1, 0x09, 0x52, 0x93, 0x78, 0x29,\n+\t0x11, 0x21, 0xBA, 0x01, 0x15, 0xCD, 0xEC, 0xAA,\n+\t0x79, 0x77, 0x58, 0xAE, 0xAE, 0xBC, 0x97, 0x33,\n+\t0x94, 0xA9, 0x2D, 0xC0, 0x0A, 0xA9, 0xA4, 0x4B,\n+\t0x19, 0x07, 0x88, 0x06, 0x7E, 0x81, 0x0F, 0xB5,\n+\t0x60, 0xCF, 0xA7, 0xC3, 0x2A, 0x43, 0xFF, 0x16,\n+\t0x3A, 0x5F, 0x11, 0x2D, 0x11, 0x38, 0x37, 0x94,\n+\t0x2A, 0xC8, 0x3D, 0x20, 0xBB, 0x93, 0x95, 0x54,\n+\t0x12, 0xFF, 0x0C, 0x47, 0x89, 0x7D, 0x73, 0xD1,\n+\t0x2E, 0x3A, 0x80, 0x52, 0xA8, 0x92, 0x93, 0x99,\n+\t0x16, 0xB8, 0x12, 0x1B, 0x8B, 0xA8, 0xC1, 0x81,\n+\t0x95, 0x18, 0x82, 0xD6, 0x5A, 0xA7, 0xFE, 0xCF,\n+\t0xC4, 0xAC, 0x85, 0x91, 0x0C, 0x2F, 0x1D, 0x10,\n+\t0x9A, 0x65, 0x07, 0xB0, 0x2E, 0x5A, 0x2D, 0x48,\n+\t0x26, 0xF8, 0x17, 0x7A, 0x53, 0xD6, 0xB8, 0xDF,\n+\t0xB1, 0x10, 0x48, 0x7E, 0x8F, 0xBE, 0x2E, 0xA1,\n+\t0x0D, 0x9E, 0xA9, 0xF1, 0x3B, 0x3B, 0x33, 0xCD,\n+\t0xDC, 0x52, 0x7E, 0xC0, 0x0E, 0xA0, 0xD8, 0xA7,\n+\t0xC6, 0x34, 0x5A, 0xAA, 0x29, 0x8B, 0xA9, 0xAC,\n+\t0x1F, 0x78, 0xAD, 0xEE, 0x34, 0x59, 0x30, 0xFB,\n+\t0x2A, 0x20, 0x3D, 0x4D, 0x30, 0xA7, 0x7D, 0xD8,\n+\t0xA0, 0xC6, 0xA2, 0xD3, 0x9A, 0xFB, 0x50, 0x97,\n+\t0x4D, 0x25, 0xA2, 0x37, 0x51, 0x54, 0xB7, 0xEB,\n+\t0xED, 0x77, 0xDB, 0x94, 0x35, 0x8B, 0x70, 0x95,\n+\t0x4A, 0x00, 0xA7, 0xF1, 0x8A, 0x66, 0x0E, 0xC6,\n+\t0x05, 0x7B, 0x69, 0x05, 0x42, 0x03, 0x96, 0x2C,\n+\t0x55, 0x00, 0x1B, 0xC0, 0x19, 0x4D, 0x0D, 0x2E,\n+\t0xF5, 0x81, 0x11, 0x64, 0xCA, 0xBB, 0xF2, 0x0F,\n+\t0x9C, 0x60, 0xE2, 0xCC, 0x02, 0x6E, 0x83, 0xD5,\n+\t0x24, 0xF4, 0x12, 0x0E, 0x6A, 0xEA, 0x4F, 0x6C,\n+\t0x79, 0x69, 0x65, 0x67, 0xDB, 0xF7, 0xEA, 0x98,\n+\t0x5D, 0x56, 0x98, 0xB7, 0x88, 0xE7, 0x23, 0xC9,\n+\t0x17, 0x32, 0x92, 0x33, 0x5A, 0x0C, 0x15, 0x20,\n+\t0x3B, 0x1C, 0xF9, 0x0F, 0x4D, 0xD1, 0xE8, 0xE6,\n+\t0x9E, 0x5E, 0x24, 0x1B, 0xA4, 0xB8, 0xB9, 0xE9,\n+\t0x2F, 0xFC, 0x89, 0xB4, 0xB9, 0xF4, 0xA6, 0xAD,\n+\t0x55, 0xF4, 0xDF, 0x58, 0x63, 0x25, 0xE3, 0x41,\n+\t0x70, 0xDF, 0x10, 0xE7, 0x13, 0x87, 0x8D, 0xB3,\n+\t0x62, 0x4F, 0xF5, 0x86, 0x85, 0x8F, 0x59, 0xF0,\n+\t0x21, 0x0E, 0x8F, 0x11, 0xAD, 0xBF, 0xDD, 0x61,\n+\t0x68, 0x3F, 0x54, 0x57, 0x49, 0x38, 0xC8, 0x24,\n+\t0x8E, 0x0A, 0xAC, 0xCA, 0x2C, 0x36, 0x3E, 0x5F,\n+\t0x0A, 0xCE, 0xFD, 0x1A, 0x60, 0x63, 0x5A, 0xE6,\n+\t0x06, 0x64, 0xB5, 0x94, 0x3C, 0xC9, 0xAF, 0x7C,\n+\t0xCD, 0x49, 0x10, 0xCF, 0xAF, 0x0E, 0x2E, 0x79,\n+\t0x27, 0xB2, 0x67, 0x02, 0xED, 0xEE, 0x80, 0x77,\n+\t0x7C, 0x6D, 0x4B, 0xDB, 0xCF, 0x8D, 0x68, 0x00,\n+\t0x2E, 0xD9, 0xF0, 0x8E, 0x08, 0xBF, 0xA6, 0x9B,\n+\t0xFE, 0xA4, 0xFB, 0x19, 0x46, 0xAF, 0x1B, 0xA9,\n+\t0xF8, 0x22, 0x81, 0x21, 0x97, 0xFC, 0xC0, 0x8A,\n+\t0x26, 0x58, 0x13, 0x29, 0xB6, 0x69, 0x94, 0x4B,\n+\t0xAB, 0xB3, 0x88, 0x0D, 0xA9, 0x48, 0x0E, 0xE8,\n+\t0x70, 0xFC, 0xA1, 0x21, 0xC4, 0x2C, 0xE5, 0x99,\n+\t0xB4, 0xF1, 0x6F, 0xB2, 0x4B, 0x4B, 0xCD, 0x48,\n+\t0x15, 0x47, 0x2D, 0x72, 0x39, 0x99, 0x9D, 0x24,\n+\t0x0C, 0x8B, 0xDC, 0xA1, 0xEE, 0xF6, 0xF4, 0x73,\n+\t0xC3, 0xB8, 0x0C, 0x23, 0x0D, 0xA7, 0xC4, 0x7D,\n+\t0x27, 0xE2, 0x14, 0x11, 0x53, 0x19, 0xE7, 0xCA,\n+\t0x94, 0x4E, 0x0D, 0x2C, 0xF7, 0x36, 0x47, 0xDB,\n+\t0x77, 0x3C, 0x22, 0xAC, 0xBE, 0xE1, 0x06, 0x55,\n+\t0xE5, 0xDD, 0x8B, 0x65, 0xE8, 0xE9, 0x91, 0x52,\n+\t0x59, 0x97, 0xFC, 0x8C, 0xEE, 0x96, 0x22, 0x60,\n+\t0xEE, 0xBF, 0x82, 0xF0, 0xCA, 0x14, 0xF9, 0xD3\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des128ctr_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des128ctr,\n+\t\t.len = 512\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des128ctr_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des128ctr,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1,\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xC3, 0x40, 0xD5, 0xD9, 0x8F, 0x8A, 0xC0, 0xF0,\n+\t\t\t0x46, 0x28, 0x02, 0x01, 0xB5, 0xC1, 0x87, 0x4D,\n+\t\t\t0xAC, 0xFE, 0x48, 0x76\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des128ctr_hmac_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des128ctr,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD\n+\t\t},\n+\t\t.len = 20\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xF1, 0xC1, 0xDB, 0x4D, 0xFA, 0x7F, 0x2F, 0xE5,\n+\t\t\t0xF8, 0x49, 0xEA, 0x1D, 0x7F, 0xCB, 0x42, 0x59,\n+\t\t\t0xC4, 0x1E, 0xB1, 0x18\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const uint8_t ciphertext512_des192ctr[] = {\n+\t0xFF, 0x32, 0x52, 0x97, 0x10, 0xBF, 0x0B, 0x10,\n+\t0x68, 0x0F, 0x4F, 0x56, 0x8B, 0x2C, 0x7B, 0x8E,\n+\t0x39, 0x1E, 0x1A, 0x2F, 0x83, 0xDE, 0x5E, 0x35,\n+\t0xC8, 0x4B, 0xDF, 0xD5, 0xBC, 0x84, 0x50, 0x1A,\n+\t0x02, 0xDF, 0xB3, 0x11, 0xE4, 0xDA, 0xB8, 0x0E,\n+\t0x47, 0xC6, 0x0C, 0x51, 0x09, 0x62, 0x9C, 0x5D,\n+\t0x71, 0x40, 0x49, 0xD8, 0x55, 0xBD, 0x7D, 0x90,\n+\t0x71, 0xC5, 0xF7, 0x07, 0x6F, 0x08, 0x71, 0x2A,\n+\t0xB1, 0x77, 0x9B, 0x0F, 0xA1, 0xB0, 0xD6, 0x10,\n+\t0xB2, 0xE5, 0x31, 0xEC, 0x21, 0x13, 0x89, 0x2A,\n+\t0x09, 0x7E, 0x30, 0xDB, 0xA0, 0xF0, 0xDC, 0xE4,\n+\t0x74, 0x64, 0x39, 0xA3, 0xB0, 0xB1, 0x80, 0x66,\n+\t0x52, 0xD4, 0x4E, 0xC9, 0x5A, 0x52, 0x6A, 0xC7,\n+\t0xB5, 0x2B, 0x61, 0xD5, 0x17, 0xD5, 0xF3, 0xCC,\n+\t0x41, 0x61, 0xD2, 0xA6, 0xF4, 0x51, 0x24, 0x3A,\n+\t0x63, 0x5D, 0x23, 0xB1, 0xF0, 0x22, 0xE7, 0x45,\n+\t0xFA, 0x5F, 0x7E, 0x99, 0x00, 0x11, 0x28, 0x35,\n+\t0xA3, 0xF4, 0x61, 0x94, 0x0E, 0x98, 0xCE, 0x35,\n+\t0xDD, 0x91, 0x1B, 0x0B, 0x4D, 0xEE, 0xFF, 0xFF,\n+\t0x0B, 0xD4, 0xDC, 0x56, 0xFC, 0x71, 0xE9, 0xEC,\n+\t0xE8, 0x36, 0x51, 0xF8, 0x8B, 0x6A, 0xE1, 0x8C,\n+\t0x2B, 0x25, 0x91, 0x91, 0x9B, 0x92, 0x76, 0xB5,\n+\t0x3D, 0x26, 0xA8, 0x53, 0xEA, 0x30, 0x5B, 0x4D,\n+\t0xDA, 0x16, 0xDA, 0x7D, 0x04, 0x88, 0xF5, 0x22,\n+\t0xA8, 0x0C, 0xB9, 0x41, 0xC7, 0x91, 0x64, 0x86,\n+\t0x99, 0x7D, 0x18, 0xB9, 0x67, 0xA2, 0x6E, 0x05,\n+\t0x1A, 0x82, 0x8F, 0xA2, 0xEB, 0x4D, 0x0B, 0x8C,\n+\t0x88, 0x2D, 0xBA, 0x77, 0x87, 0x32, 0x50, 0x3C,\n+\t0x4C, 0xD8, 0xD3, 0x50, 0x39, 0xFA, 0xDF, 0x48,\n+\t0x3E, 0x30, 0xF5, 0x76, 0x06, 0xB0, 0x1A, 0x05,\n+\t0x60, 0x2C, 0xD3, 0xA0, 0x63, 0x1A, 0x19, 0x2D,\n+\t0x6B, 0x76, 0xF2, 0x31, 0x4C, 0xA7, 0xE6, 0x5C,\n+\t0x1B, 0x23, 0x20, 0x41, 0x32, 0xE5, 0x83, 0x47,\n+\t0x04, 0xB6, 0x3E, 0xE0, 0xFD, 0x49, 0x1E, 0x1B,\n+\t0x75, 0x10, 0x11, 0x46, 0xE9, 0xF9, 0x96, 0x9A,\n+\t0xD7, 0x59, 0xFE, 0x38, 0x31, 0xFE, 0x79, 0xC4,\n+\t0xC8, 0x46, 0x88, 0xDE, 0x2E, 0xAE, 0x20, 0xED,\n+\t0x77, 0x50, 0x40, 0x38, 0x26, 0xD3, 0x35, 0xF6,\n+\t0x29, 0x55, 0x6A, 0x6B, 0x38, 0x69, 0xFE, 0x90,\n+\t0x5B, 0xA7, 0xFA, 0x6B, 0x73, 0x4F, 0xB9, 0x5D,\n+\t0xDC, 0x6F, 0x98, 0xC3, 0x6A, 0xC4, 0xB5, 0x09,\n+\t0xC5, 0x84, 0xA5, 0x6A, 0x84, 0xA4, 0xB3, 0x8A,\n+\t0x5F, 0xCA, 0x92, 0x64, 0x9E, 0xC3, 0x0F, 0x84,\n+\t0x8B, 0x2D, 0x48, 0xC6, 0x67, 0xAE, 0x07, 0xE0,\n+\t0x28, 0x38, 0x6D, 0xC4, 0x4D, 0x13, 0x87, 0xE0,\n+\t0xB2, 0x2F, 0xAA, 0xC0, 0xCF, 0x68, 0xD7, 0x9C,\n+\t0xB8, 0x07, 0xE4, 0x51, 0xD7, 0x75, 0x86, 0xFA,\n+\t0x0C, 0x50, 0x74, 0x68, 0x00, 0x64, 0x2A, 0x27,\n+\t0x59, 0xE9, 0x80, 0xEB, 0xC2, 0xA3, 0xFA, 0x58,\n+\t0xCC, 0x03, 0xE7, 0x7B, 0x66, 0x53, 0xFF, 0x90,\n+\t0xA0, 0x85, 0xE2, 0xF8, 0x82, 0xFE, 0xC6, 0x2B,\n+\t0xFF, 0x5E, 0x70, 0x85, 0x34, 0xB7, 0x22, 0x38,\n+\t0xDB, 0xBC, 0x15, 0x30, 0x59, 0xC1, 0x48, 0x42,\n+\t0xE5, 0x38, 0x8D, 0x37, 0x59, 0xDB, 0xA3, 0x20,\n+\t0x17, 0x36, 0x1D, 0x4B, 0xBF, 0x4E, 0xA4, 0x35,\n+\t0xCC, 0xFE, 0xF5, 0x7A, 0x73, 0xB4, 0x6D, 0x20,\n+\t0x1D, 0xC0, 0xE5, 0x21, 0x5C, 0xD2, 0x8A, 0x65,\n+\t0x08, 0xB6, 0x63, 0xAC, 0x9A, 0x1E, 0x3F, 0x3C,\n+\t0xAB, 0xB6, 0x6D, 0x34, 0xB2, 0x3A, 0x08, 0xDA,\n+\t0x29, 0x63, 0xD1, 0xA4, 0x83, 0x52, 0xB0, 0x63,\n+\t0x1B, 0x89, 0x35, 0x57, 0x59, 0x2C, 0x0F, 0x72,\n+\t0x72, 0xFD, 0xA0, 0xAC, 0xDB, 0xB4, 0xA3, 0xA1,\n+\t0x18, 0x10, 0x12, 0x97, 0x99, 0x63, 0x38, 0x98,\n+\t0x96, 0xB5, 0x16, 0x07, 0x4E, 0xE9, 0x2C, 0x97\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des192ctr_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t\t0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0\n+\t\t},\n+\t\t.len = 24\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des192ctr,\n+\t\t.len = 512\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des192ctr_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t\t0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0\n+\t\t},\n+\t\t.len = 24\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des192ctr,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1,\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xEA, 0x62, 0xB9, 0xB2, 0x78, 0x6C, 0x8E, 0xDB,\n+\t\t\t0xA3, 0xB6, 0xFF, 0x23, 0x3A, 0x47, 0xD8, 0xC8,\n+\t\t\t0xED, 0x5E, 0x20, 0x1D\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des192ctr_hmac_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t\t0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0\n+\t\t},\n+\t\t.len = 24\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des192ctr,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD\n+\t\t},\n+\t\t.len = 20\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x32, 0xD5, 0x19, 0x8F, 0x79, 0x3A, 0xAA, 0x7B,\n+\t\t\t0x70, 0x67, 0x4E, 0x63, 0x88, 0xA3, 0x9A, 0x82,\n+\t\t\t0x07, 0x33, 0x12, 0x94\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const uint8_t ciphertext512_des128cbc[] = {\n+\t0x28, 0x2a, 0xff, 0x15, 0x5c, 0xdf, 0xd9, 0x6b,\n+\t0x54, 0xbc, 0x7b, 0xfb, 0xc5, 0x64, 0x4d, 0xdd,\n+\t0x3e, 0xf2, 0x9e, 0xb7, 0x53, 0x65, 0x37, 0x05,\n+\t0xe0, 0xdf, 0xae, 0xf7, 0xc9, 0x27, 0xe4, 0xec,\n+\t0x11, 0x27, 0xc2, 0x9e, 0x02, 0x4e, 0x03, 0x3b,\n+\t0x33, 0xf2, 0x66, 0x08, 0x24, 0x5f, 0xab, 0xc2,\n+\t0x7e, 0x21, 0x19, 0x5d, 0x51, 0xc3, 0xe2, 0x97,\n+\t0x6f, 0x2e, 0xb4, 0xaa, 0x34, 0x70, 0x88, 0x78,\n+\t0x4e, 0xe7, 0x3d, 0xe1, 0x9f, 0x87, 0x1c, 0x8b,\n+\t0xac, 0x8d, 0xa1, 0x1a, 0xcd, 0xb0, 0xf8, 0xb6,\n+\t0x24, 0x36, 0xe3, 0x8c, 0x07, 0xe7, 0xe4, 0x92,\n+\t0x13, 0x86, 0x6f, 0x13, 0xec, 0x04, 0x5c, 0xe9,\n+\t0xb9, 0xca, 0x45, 0x8a, 0x2c, 0x46, 0xda, 0x54,\n+\t0x1d, 0xb5, 0x81, 0xb1, 0xcd, 0xf3, 0x7d, 0x11,\n+\t0x6b, 0xb3, 0x0a, 0x45, 0xe5, 0x6e, 0x51, 0x3e,\n+\t0x2c, 0xac, 0x7c, 0xbc, 0xa7, 0x7e, 0x22, 0x4d,\n+\t0xe6, 0x02, 0xe3, 0x3f, 0x77, 0xd7, 0x73, 0x72,\n+\t0x0e, 0xfb, 0x42, 0x85, 0x80, 0xdf, 0xa8, 0x91,\n+\t0x60, 0x40, 0x48, 0xcd, 0x1b, 0xd9, 0xbf, 0x2f,\n+\t0xf2, 0xdf, 0xd0, 0xbd, 0x3f, 0x82, 0xce, 0x15,\n+\t0x9d, 0x6e, 0xc6, 0x59, 0x6f, 0x27, 0x0d, 0xf9,\n+\t0x26, 0xe2, 0x11, 0x29, 0x50, 0xc3, 0x0a, 0xb7,\n+\t0xde, 0x9d, 0xe9, 0x55, 0xa1, 0xe9, 0x01, 0x33,\n+\t0x56, 0x51, 0xa7, 0x3a, 0x9e, 0x63, 0xc5, 0x08,\n+\t0x01, 0x3b, 0x03, 0x4b, 0xc6, 0xc4, 0xa1, 0xc0,\n+\t0xc0, 0xd0, 0x0e, 0x48, 0xe5, 0x4c, 0x55, 0x6b,\n+\t0x4a, 0xc1, 0x0a, 0x24, 0x4b, 0xd0, 0x02, 0xf4,\n+\t0x31, 0x63, 0x11, 0xbd, 0xa6, 0x1f, 0xf4, 0xae,\n+\t0x23, 0x5a, 0x40, 0x7e, 0x0e, 0x4e, 0x63, 0x8b,\n+\t0x66, 0x3d, 0x55, 0x46, 0x6e, 0x5c, 0x76, 0xa7,\n+\t0x68, 0x31, 0xce, 0x5d, 0xca, 0xe2, 0xb4, 0xb0,\n+\t0xc1, 0x1f, 0x66, 0x18, 0x75, 0x64, 0x73, 0xa9,\n+\t0x9e, 0xd5, 0x0e, 0x0e, 0xf7, 0x77, 0x61, 0xf8,\n+\t0x89, 0xc6, 0xcf, 0x0c, 0x41, 0xd3, 0x8f, 0xfd,\n+\t0x22, 0x52, 0x4f, 0x94, 0x5c, 0x19, 0x11, 0x3a,\n+\t0xb5, 0x63, 0xe8, 0x81, 0x33, 0x13, 0x54, 0x3c,\n+\t0x93, 0x36, 0xb5, 0x5b, 0x51, 0xaf, 0x51, 0xa2,\n+\t0x08, 0xae, 0x83, 0x15, 0x77, 0x07, 0x28, 0x0d,\n+\t0x98, 0xe1, 0x2f, 0x69, 0x0e, 0xfb, 0x9a, 0x2e,\n+\t0x27, 0x27, 0xb0, 0xd5, 0xce, 0xf8, 0x16, 0x55,\n+\t0xfd, 0xaa, 0xd7, 0x1a, 0x1b, 0x2e, 0x4c, 0x86,\n+\t0x7a, 0x6a, 0x90, 0xf7, 0x0a, 0x07, 0xd3, 0x81,\n+\t0x4b, 0x75, 0x6a, 0x79, 0xdb, 0x63, 0x45, 0x0f,\n+\t0x31, 0x7e, 0xd0, 0x2a, 0x14, 0xff, 0xee, 0xcc,\n+\t0x97, 0x8a, 0x7d, 0x74, 0xbd, 0x9d, 0xaf, 0x00,\n+\t0xdb, 0x7e, 0xf3, 0xe6, 0x22, 0x76, 0x77, 0x58,\n+\t0xba, 0x1c, 0x06, 0x96, 0xfb, 0x6f, 0x41, 0x71,\n+\t0x66, 0x98, 0xae, 0x31, 0x7d, 0x29, 0x18, 0x71,\n+\t0x0e, 0xe4, 0x98, 0x7e, 0x59, 0x5a, 0xc9, 0x78,\n+\t0x9c, 0xfb, 0x6c, 0x81, 0x44, 0xb4, 0x0f, 0x5e,\n+\t0x18, 0x53, 0xb8, 0x6f, 0xbc, 0x3b, 0x15, 0xf0,\n+\t0x10, 0xdd, 0x0d, 0x4b, 0x0a, 0x36, 0x0e, 0xb4,\n+\t0x76, 0x0f, 0x16, 0xa7, 0x5c, 0x9d, 0xcf, 0xb0,\n+\t0x6d, 0x38, 0x02, 0x07, 0x05, 0xe9, 0xe9, 0x46,\n+\t0x08, 0xb8, 0x52, 0xd6, 0xd9, 0x4c, 0x81, 0x63,\n+\t0x1d, 0xe2, 0x5b, 0xd0, 0xf6, 0x5e, 0x1e, 0x81,\n+\t0x48, 0x08, 0x66, 0x3a, 0x85, 0xed, 0x65, 0xfe,\n+\t0xe8, 0x05, 0x7a, 0xe1, 0xe6, 0x12, 0xf2, 0x52,\n+\t0x83, 0xdd, 0x82, 0xbe, 0xf6, 0x34, 0x8a, 0x6f,\n+\t0xc5, 0x83, 0xcd, 0x3f, 0xbe, 0x58, 0x8b, 0x11,\n+\t0x78, 0xdc, 0x0c, 0x83, 0x72, 0x5d, 0x05, 0x2a,\n+\t0x01, 0x29, 0xee, 0x48, 0x9a, 0x67, 0x00, 0x6e,\n+\t0x14, 0x60, 0x2d, 0x00, 0x52, 0x87, 0x98, 0x5e,\n+\t0x43, 0xfe, 0xf1, 0x10, 0x14, 0xf1, 0x91, 0xcc\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des128cbc_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des128cbc,\n+\t\t.len = 512\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des128cbc_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des128cbc,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1,\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x94, 0x45, 0x7B, 0xDF, 0xFE, 0x80, 0xB9, 0xA6,\n+\t\t\t0xA0, 0x7A, 0xE8, 0x93, 0x40, 0x7B, 0x85, 0x02,\n+\t\t\t0x1C, 0xD7, 0xE8, 0x87\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des128cbc_hmac_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des128cbc,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD\n+\t\t},\n+\t\t.len = 20\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x7E, 0xBA, 0xFF, 0x86, 0x8D, 0x65, 0xCD, 0x08,\n+\t\t\t0x76, 0x34, 0x94, 0xE9, 0x9A, 0xCD, 0xB2, 0xBB,\n+\t\t\t0xBF, 0x65, 0xF5, 0x42\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const uint8_t ciphertext512_des192cbc[] = {\n+\t0xd0, 0xc9, 0xdc, 0x51, 0x29, 0x97, 0x03, 0x64,\n+\t0xcd, 0x22, 0xba, 0x3d, 0x2b, 0xbc, 0x21, 0x37,\n+\t0x7b, 0x1e, 0x29, 0x23, 0xeb, 0x51, 0x6e, 0xac,\n+\t0xbe, 0x5b, 0xd3, 0x67, 0xe0, 0x3f, 0xc3, 0xb5,\n+\t0xe3, 0x04, 0x17, 0x42, 0x2b, 0xaa, 0xdd, 0xd6,\n+\t0x0e, 0x69, 0xd0, 0x8f, 0x8a, 0xfc, 0xb4, 0x55,\n+\t0x67, 0x06, 0x51, 0xbb, 0x00, 0x57, 0xee, 0x95,\n+\t0x28, 0x79, 0x3f, 0xd9, 0x97, 0x2b, 0xb0, 0x02,\n+\t0x35, 0x08, 0xce, 0x7a, 0xc3, 0x43, 0x2c, 0x87,\n+\t0xaa, 0x97, 0x6a, 0xad, 0xf0, 0x26, 0xea, 0x1d,\n+\t0xbb, 0x08, 0xe9, 0x52, 0x11, 0xd3, 0xaf, 0x36,\n+\t0x17, 0x14, 0x21, 0xb2, 0xbc, 0x42, 0x51, 0x33,\n+\t0x27, 0x8c, 0xd8, 0x45, 0xb9, 0x76, 0xa0, 0x11,\n+\t0x24, 0x34, 0xde, 0x4d, 0x13, 0x67, 0x1b, 0xc3,\n+\t0x31, 0x12, 0x66, 0x56, 0x59, 0xd2, 0xb1, 0x8f,\n+\t0xec, 0x1e, 0xc0, 0x10, 0x7a, 0x86, 0xb1, 0x60,\n+\t0xc3, 0x01, 0xd6, 0xa8, 0x55, 0xad, 0x58, 0x63,\n+\t0xca, 0x68, 0xa9, 0x33, 0xe3, 0x93, 0x90, 0x7d,\n+\t0x8f, 0xca, 0xf8, 0x1c, 0xc2, 0x9e, 0xfb, 0xde,\n+\t0x9c, 0xc7, 0xf2, 0x6c, 0xff, 0xcc, 0x39, 0x17,\n+\t0x49, 0x33, 0x0d, 0x7c, 0xed, 0x07, 0x99, 0x91,\n+\t0x91, 0x6c, 0x5f, 0x3f, 0x02, 0x09, 0xdc, 0x70,\n+\t0xf9, 0x3b, 0x8d, 0xaa, 0xf4, 0xbc, 0x0e, 0xec,\n+\t0xf2, 0x26, 0xfb, 0xb2, 0x1c, 0x31, 0xae, 0xc6,\n+\t0x72, 0xe8, 0x0b, 0x75, 0x05, 0x57, 0x58, 0x98,\n+\t0x92, 0x37, 0x27, 0x8e, 0x3b, 0x0c, 0x25, 0xfb,\n+\t0xcf, 0x82, 0x02, 0xd5, 0x0b, 0x1f, 0x89, 0x49,\n+\t0xcd, 0x0f, 0xa1, 0xa7, 0x08, 0x63, 0x56, 0xa7,\n+\t0x1f, 0x80, 0x3a, 0xef, 0x24, 0x89, 0x57, 0x1a,\n+\t0x02, 0xdc, 0x2e, 0x51, 0xbd, 0x4a, 0x10, 0x23,\n+\t0xfc, 0x02, 0x1a, 0x3f, 0x34, 0xbf, 0x1c, 0x98,\n+\t0x1a, 0x40, 0x0a, 0x96, 0x8e, 0x41, 0xd5, 0x09,\n+\t0x55, 0x37, 0xe9, 0x25, 0x11, 0x83, 0xf8, 0xf3,\n+\t0xd4, 0xb0, 0xdb, 0x16, 0xd7, 0x51, 0x7e, 0x94,\n+\t0xf7, 0xb4, 0x26, 0xe0, 0xf4, 0x80, 0x01, 0x65,\n+\t0x51, 0xeb, 0xbc, 0xb0, 0x65, 0x8f, 0xdd, 0xb5,\n+\t0xf7, 0x00, 0xec, 0x40, 0xab, 0x7d, 0x96, 0xcc,\n+\t0x8d, 0xec, 0x89, 0x80, 0x31, 0x39, 0xa2, 0x5c,\n+\t0xb0, 0x55, 0x4c, 0xee, 0xdd, 0x15, 0x2b, 0xa9,\n+\t0x86, 0x4e, 0x23, 0x14, 0x36, 0xc5, 0x57, 0xf5,\n+\t0xe3, 0xe8, 0x89, 0xc9, 0xb7, 0xf8, 0xeb, 0x08,\n+\t0xe5, 0x93, 0x12, 0x5c, 0x0f, 0x79, 0xa1, 0x86,\n+\t0xe4, 0xc2, 0xeb, 0xa6, 0xa0, 0x50, 0x6a, 0xec,\n+\t0xd3, 0xce, 0x50, 0x78, 0x4e, 0x4f, 0x93, 0xd8,\n+\t0xdc, 0xb4, 0xec, 0x02, 0xe9, 0xbd, 0x17, 0x99,\n+\t0x1e, 0x16, 0x4e, 0xd7, 0xb0, 0x07, 0x02, 0x55,\n+\t0x63, 0x24, 0x4f, 0x7b, 0x8f, 0xc5, 0x7a, 0x12,\n+\t0x29, 0xff, 0x5d, 0xc1, 0xe7, 0xae, 0x48, 0xc8,\n+\t0x57, 0x53, 0xe7, 0xcd, 0x10, 0x6c, 0x19, 0xfc,\n+\t0xcc, 0xb9, 0xb1, 0xbe, 0x48, 0x9f, 0x2d, 0x3f,\n+\t0x39, 0x2e, 0xdd, 0x71, 0xde, 0x1b, 0x54, 0xee,\n+\t0x7d, 0x94, 0x8f, 0x27, 0x23, 0xe9, 0x74, 0x92,\n+\t0x14, 0x93, 0x84, 0x65, 0xc9, 0x22, 0x7c, 0xa8,\n+\t0x1b, 0x72, 0x73, 0xb1, 0x23, 0xa0, 0x6b, 0xcc,\n+\t0xb5, 0x22, 0x06, 0x15, 0xe5, 0x96, 0x03, 0x4a,\n+\t0x52, 0x8d, 0x1d, 0xbf, 0x3e, 0x82, 0x45, 0x9c,\n+\t0x75, 0x9e, 0xa9, 0x3a, 0x97, 0xb6, 0x5d, 0xc4,\n+\t0x75, 0x67, 0xa1, 0xf3, 0x0f, 0x7a, 0xfd, 0x71,\n+\t0x58, 0x04, 0xf9, 0xa7, 0xc2, 0x56, 0x74, 0x04,\n+\t0x74, 0x68, 0x6d, 0x8a, 0xf6, 0x6c, 0x5d, 0xd8,\n+\t0xb5, 0xed, 0x70, 0x23, 0x32, 0x4d, 0x75, 0x92,\n+\t0x88, 0x7b, 0x39, 0x37, 0x02, 0x4b, 0xb2, 0x1c,\n+\t0x1f, 0x7e, 0x5b, 0x1b, 0x10, 0xfc, 0x17, 0x21,\n+\t0x66, 0x62, 0x63, 0xc2, 0xcd, 0x16, 0x96, 0x3e\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des192cbc_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t\t0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0\n+\t\t},\n+\t\t.len = 24\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des192cbc,\n+\t\t.len = 512\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des192cbc_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t\t0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0\n+\t\t},\n+\t\t.len = 24\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des192cbc,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1,\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x53, 0x27, 0xC0, 0xE6, 0xD6, 0x1B, 0xD6, 0x45,\n+\t\t\t0x94, 0x2D, 0xCE, 0x8B, 0x29, 0xA3, 0x52, 0x14,\n+\t\t\t0xC1, 0x6B, 0x87, 0x99\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+triple_des192cbc_hmac_sha1_test_vector = {\n+\t.crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t.cipher_key = {\n+\t\t.data = {\n+\t\t\t0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,\n+\t\t\t0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,\n+\t\t\t0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0\n+\t\t},\n+\t\t.len = 24\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07\n+\t\t},\n+\t\t.len = 8\n+\t},\n+\t.plaintext = {\n+\t\t.data = plaintext_des,\n+\t\t.len = 512\n+\t},\n+\t.ciphertext = {\n+\t\t.data = ciphertext512_des192cbc,\n+\t\t.len = 512\n+\t},\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD\n+\t\t},\n+\t\t.len = 20\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xBA, 0xAC, 0x74, 0x19, 0x43, 0xB0, 0x72, 0xB8,\n+\t\t\t0x08, 0xF5, 0x24, 0xC4, 0x09, 0xBD, 0x48, 0xC1,\n+\t\t\t0x3C, 0x50, 0x1C, 0xDD\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const struct blockcipher_test_case triple_des_chain_test_cases[] = {\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC HMAC-SHA1 Encryption Digest\",\n+\t\t.test_data = &triple_des128cbc_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC HMAC-SHA1 Decryption Digest Verify\",\n+\t\t.test_data = &triple_des128cbc_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC SHA1 Encryption Digest\",\n+\t\t.test_data = &triple_des128cbc_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC SHA1 Decryption Digest Verify\",\n+\t\t.test_data = &triple_des128cbc_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CBC HMAC-SHA1 Encryption Digest\",\n+\t\t.test_data = &triple_des192cbc_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CBC HMAC-SHA1 Decryption Digest Verify\",\n+\t\t.test_data = &triple_des192cbc_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CBC SHA1 Encryption Digest\",\n+\t\t.test_data = &triple_des192cbc_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CBC SHA1 Decryption Digest Verify\",\n+\t\t.test_data = &triple_des192cbc_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CTR HMAC-SHA1 Encryption Digest\",\n+\t\t.test_data = &triple_des128ctr_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CTR HMAC-SHA1 Decryption Digest Verify\",\n+\t\t.test_data = &triple_des128ctr_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CTR SHA1 Encryption Digest\",\n+\t\t.test_data = &triple_des128ctr_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CTR SHA1 Decryption Digest Verify\",\n+\t\t.test_data = &triple_des128ctr_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CTR HMAC-SHA1 Encryption Digest\",\n+\t\t.test_data = &triple_des192ctr_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CTR HMAC-SHA1 Decryption Digest Verify\",\n+\t\t.test_data = &triple_des192ctr_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CTR SHA1 Encryption Digest\",\n+\t\t.test_data = &triple_des192ctr_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CTR SHA1 Decryption Digest Verify\",\n+\t\t.test_data = &triple_des192ctr_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC HMAC-SHA1 Encryption Digest OOP\",\n+\t\t.test_data = &triple_des128cbc_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC HMAC-SHA1 Decryption Digest\"\n+\t\t\t\t\" Verify OOP\",\n+\t\t.test_data = &triple_des128cbc_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC HMAC-SHA1 Encryption Digest\"\n+\t\t\t\t\" Sessionless\",\n+\t\t.test_data = &triple_des128cbc_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,\n+\t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr =\n+\t\t\t\t\"3DES-128-CBC HMAC-SHA1 Decryption Digest\"\n+\t\t\t\t\" Verify Sessionless\",\n+\t\t.test_data = &triple_des128cbc_hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,\n+\t\t.feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+};\n+\n+static const struct blockcipher_test_case triple_des_cipheronly_test_cases[] = {\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC Encryption\",\n+\t\t.test_data = &triple_des128cbc_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CBC Decryption\",\n+\t\t.test_data = &triple_des128cbc_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CBC Encryption\",\n+\t\t.test_data = &triple_des192cbc_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CBC Decryption\",\n+\t\t.test_data = &triple_des192cbc_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CTR Encryption\",\n+\t\t.test_data = &triple_des128ctr_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-128-CTR Decryption\",\n+\t\t.test_data = &triple_des128ctr_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CTR Encryption\",\n+\t\t.test_data = &triple_des192ctr_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t},\n+\t{\n+\t\t.test_descr = \"3DES-192-CTR Decryption\",\n+\t\t.test_data = &triple_des192ctr_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO |\n+\t\t\tBLOCKCIPHER_TEST_TARGET_PMD_QAT\n+\t}\n+};\n+\n+#endif /* TEST_CRYPTODEV_DES_TEST_VECTORS_H_ */\ndiff --git a/app/test/test_cryptodev_gcm_test_vectors.h b/app/test/test_cryptodev_gcm_test_vectors.h\nindex deca09d..b404242 100644\n--- a/app/test/test_cryptodev_gcm_test_vectors.h\n+++ b/app/test/test_cryptodev_gcm_test_vectors.h\n@@ -33,6 +33,8 @@\n #ifndef TEST_CRYPTODEV_GCM_TEST_VECTORS_H_\n #define TEST_CRYPTODEV_GCM_TEST_VECTORS_H_\n \n+#define GMAC_LARGE_PLAINTEXT_LENGTH\t\t65376\n+\n struct gcm_test_data {\n \tstruct {\n \t\tuint8_t data[64];\n@@ -449,7 +451,7 @@ static const struct gcm_test_data gcm_test_case_7 = {\n };\n \n /** GMAC Test Vectors */\n-static uint8_t gmac_plaintext[] = {\n+static uint8_t gmac_plaintext[GMAC_LARGE_PLAINTEXT_LENGTH] = {\n \t\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,\n \t\t\t0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,\n \t\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,\n@@ -1201,4 +1203,36 @@ static const struct cryptodev_perf_test_data AES_GCM_128_12IV_0AAD = {\n \t},\n };\n \n+static const struct gmac_test_data gmac_test_case_4 = {\n+\t.key = {\n+\t\t.data = {\n+\t\t\t0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,\n+\t\t\t0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.iv = {\n+\t\t.data = {\n+\t\t\t0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,\n+\t\t\t0xde, 0xca, 0xf8, 0x88\n+\t\t},\n+\t\t.len = 12\n+\t},\n+\t.aad = {\n+\t\t.data = gmac_plaintext,\n+\t\t.len = GMAC_LARGE_PLAINTEXT_LENGTH\n+\t},\n+\t.plaintext = {\n+\t\t.data = NULL,\n+\t\t.len = 0\n+\t},\n+\t.gmac_tag = {\n+\t\t.data = {\n+\t\t\t0x88, 0x82, 0xb4, 0x93, 0x8f, 0x04, 0xcd, 0x06,\n+\t\t\t0xfd, 0xac, 0x6d, 0x8b, 0x9c, 0x9e, 0x8f, 0xec\n+\t\t},\n+\t\t.len = 16\n+\t}\n+};\n+\n #endif /* TEST_CRYPTODEV_GCM_TEST_VECTORS_H_ */\ndiff --git a/app/test/test_cryptodev_hash_test_vectors.h b/app/test/test_cryptodev_hash_test_vectors.h\nnew file mode 100644\nindex 0000000..dfc84db\n--- /dev/null\n+++ b/app/test/test_cryptodev_hash_test_vectors.h\n@@ -0,0 +1,491 @@\n+/*\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2016 Intel Corporation. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *\t * Redistributions of source code must retain the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer.\n+ *\t * Redistributions in binary form must reproduce the above copyright\n+ *\t   notice, this list of conditions and the following disclaimer in\n+ *\t   the documentation and/or other materials provided with the\n+ *\t   distribution.\n+ *\t * Neither the name of Intel Corporation nor the names of its\n+ *\t   contributors may be used to endorse or promote products derived\n+ *\t   from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef TEST_CRYPTODEV_HASH_TEST_VECTORS_H_\n+#define TEST_CRYPTODEV_HASH_TEST_VECTORS_H_\n+\n+static const uint8_t plaintext_hash[] = {\n+\t\"What a lousy earth! He wondered how many people \"\n+\t\"were destitute that same night even in his own \"\n+\t\"prosperous country, how many homes were \"\n+\t\"shanties, how many husbands were drunk and \"\n+\t\"wives socked, and how many children were \"\n+\t\"bullied, abused, or abandoned. How many \"\n+\t\"families hungered for food they could not \"\n+\t\"afford to buy? How many hearts were broken? How \"\n+\t\"many suicides would take place that same night, \"\n+\t\"how many people would go insane? How many \"\n+\t\"cockroaches and landlords would triumph? How \"\n+\t\"many winners were losers, successes failures, \"\n+\t\"and rich men poor men? How many wise guys were \"\n+\t\"stupid? How many happy endings were unhappy \"\n+\t\"endings? How many honest men were liars, brave \"\n+\t\"men cowards, loyal men traitors, how many \"\n+\t\"sainted men were corrupt, how many people in \"\n+\t\"positions of trust had sold their souls to \"\n+\t\"bodyguards, how many had never had souls? How \"\n+\t\"many straight-and-narrow paths were crooked \"\n+\t\"paths? How many best families were worst \"\n+\t\"families and how many good people were bad \"\n+\t\"people? When you added them all up and then \"\n+\t\"subtracted, you might be left with only the \"\n+\t\"children, and perhaps with Albert Einstein and \"\n+\t\"an old violinist or sculptor somewhere.\"\n+};\n+\n+static const struct blockcipher_test_data\n+md5_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_MD5,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xB3, 0xE6, 0xBB, 0x50, 0x41, 0x35, 0x3C, 0x6B,\n+\t\t\t0x7A, 0xFF, 0xD2, 0x64, 0xAF, 0xD5, 0x1C, 0xB2\n+\t\t},\n+\t\t.len = 16\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+hmac_md5_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_MD5_HMAC,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD\n+\t\t},\n+\t\t.len = 16\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x50, 0xE8, 0xDE, 0xC5, 0xC1, 0x76, 0xAC, 0xAE,\n+\t\t\t0x15, 0x4A, 0xF1, 0x7F, 0x7E, 0x04, 0x42, 0x9B\n+\t\t},\n+\t\t.len = 16\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+sha1_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xA2, 0x8D, 0x40, 0x78, 0xDD, 0x9F, 0xBB, 0xD5,\n+\t\t\t0x35, 0x62, 0xFB, 0xFA, 0x93, 0xFD, 0x7D, 0x70,\n+\t\t\t0xA6, 0x7D, 0x45, 0xCA\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+hmac_sha1_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD\n+\t\t},\n+\t\t.len = 20\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,\n+\t\t\t0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,\n+\t\t\t0x3F, 0x91, 0x64, 0x59\n+\t\t},\n+\t\t.len = 20\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+sha224_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA224,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x91, 0xE7, 0xCD, 0x75, 0x14, 0x9C, 0xA9, 0xE9,\n+\t\t\t0x2E, 0x46, 0x12, 0x20, 0x22, 0xF9, 0x68, 0x28,\n+\t\t\t0x39, 0x26, 0xDF, 0xB5, 0x78, 0x62, 0xB2, 0x6E,\n+\t\t\t0x5E, 0x8F, 0x25, 0x84\n+\t\t},\n+\t\t.len = 28\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+hmac_sha224_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA224_HMAC,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD, 0x26, 0xEB, 0xAB, 0x92,\n+\t\t\t0xFB, 0xBF, 0xB0, 0x8C\n+\t\t},\n+\t\t.len = 28\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x70, 0x0F, 0x04, 0x4D, 0x22, 0x02, 0x7D, 0x31,\n+\t\t\t0x36, 0xDA, 0x77, 0x19, 0xB9, 0x66, 0x37, 0x7B,\n+\t\t\t0xF1, 0x8A, 0x63, 0xBB, 0x5D, 0x1D, 0xE3, 0x9F,\n+\t\t\t0x92, 0xF6, 0xAA, 0x19\n+\t\t},\n+\t\t.len = 28\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+sha256_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA256,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x7F, 0xF1, 0x0C, 0xF5, 0x90, 0x97, 0x19, 0x0F,\n+\t\t\t0x00, 0xE4, 0x83, 0x01, 0xCA, 0x59, 0x00, 0x2E,\n+\t\t\t0x1F, 0xC7, 0x84, 0xEE, 0x76, 0xA6, 0x39, 0x15,\n+\t\t\t0x76, 0x2F, 0x87, 0xF9, 0x01, 0x06, 0xF3, 0xB7\n+\t\t},\n+\t\t.len = 32\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+hmac_sha256_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD, 0x26, 0xEB, 0xAB, 0x92,\n+\t\t\t0xFB, 0xBF, 0xB0, 0x8C, 0x29, 0x87, 0x90, 0xAC\n+\t\t},\n+\t\t.len = 32\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xAF, 0x8F, 0x70, 0x1B, 0x4B, 0xAF, 0x34, 0xCB,\n+\t\t\t0x02, 0x24, 0x48, 0x45, 0x83, 0x52, 0x8F, 0x22,\n+\t\t\t0x06, 0x4D, 0x64, 0x09, 0x0A, 0xCC, 0x02, 0x77,\n+\t\t\t0x71, 0x83, 0x48, 0x71, 0x07, 0x02, 0x25, 0x17\n+\t\t},\n+\t\t.len = 32\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+sha384_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA384,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0x1D, 0xE7, 0x3F, 0x55, 0x86, 0xFE, 0x48, 0x9F,\n+\t\t\t0xAC, 0xC6, 0x85, 0x32, 0xFA, 0x8E, 0xA6, 0x77,\n+\t\t\t0x25, 0x84, 0xA5, 0x98, 0x8D, 0x0B, 0x80, 0xF4,\n+\t\t\t0xEB, 0x2C, 0xFB, 0x6C, 0xEA, 0x7B, 0xFD, 0xD5,\n+\t\t\t0xAD, 0x41, 0xAB, 0x15, 0xB0, 0x03, 0x15, 0xEC,\n+\t\t\t0x9E, 0x3D, 0xED, 0xCB, 0x80, 0x7B, 0xF4, 0xB6\n+\t\t},\n+\t\t.len = 48\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+hmac_sha384_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA384_HMAC,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD, 0x26, 0xEB, 0xAB, 0x92,\n+\t\t\t0xFB, 0xBF, 0xB0, 0x8C, 0x29, 0x87, 0x90, 0xAC,\n+\t\t\t0x39, 0x8B, 0x5C, 0x49, 0x68, 0x1E, 0x3A, 0x05,\n+\t\t\t0xCC, 0x68, 0x5C, 0x76, 0xCB, 0x3C, 0x71, 0x89\n+\t\t},\n+\t\t.len = 48\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xE2, 0x83, 0x18, 0x55, 0xB5, 0x8D, 0x94, 0x9B,\n+\t\t\t0x01, 0xB6, 0xE2, 0x57, 0x7A, 0x62, 0xF5, 0xF4,\n+\t\t\t0xAB, 0x39, 0xF3, 0x3C, 0x28, 0xA0, 0x0F, 0xCC,\n+\t\t\t0xEE, 0x1C, 0xF1, 0xF8, 0x69, 0xF1, 0x24, 0x3B,\n+\t\t\t0x10, 0x90, 0x0A, 0xE3, 0xF0, 0x59, 0xDD, 0xC0,\n+\t\t\t0x6F, 0xE6, 0x8C, 0x84, 0xD5, 0x03, 0xF8, 0x9E\n+\t\t},\n+\t\t.len = 48\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+sha512_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA512,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xB9, 0xBA, 0x28, 0x48, 0x3C, 0xC2, 0xD3, 0x65,\n+\t\t\t0x4A, 0xD6, 0x00, 0x1D, 0xCE, 0x61, 0x64, 0x54,\n+\t\t\t0x45, 0x8C, 0x64, 0x0E, 0xED, 0x0E, 0xD8, 0x1C,\n+\t\t\t0x72, 0xCE, 0xD2, 0x44, 0x91, 0xC8, 0xEB, 0xC7,\n+\t\t\t0x99, 0xC5, 0xCA, 0x89, 0x72, 0x64, 0x96, 0x41,\n+\t\t\t0xC8, 0xEA, 0xB2, 0x4E, 0xD1, 0x21, 0x13, 0x49,\n+\t\t\t0x64, 0x4E, 0x15, 0x68, 0x12, 0x67, 0x26, 0x0F,\n+\t\t\t0x2C, 0x3C, 0x83, 0x25, 0x27, 0x86, 0xF0, 0xDB\n+\t\t},\n+\t\t.len = 64\n+\t}\n+};\n+\n+static const struct blockcipher_test_data\n+hmac_sha512_test_vector = {\n+\t.auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC,\n+\t.ciphertext = {\n+\t\t.data = plaintext_hash,\n+\t\t.len = 512\n+\t},\n+\t.auth_key = {\n+\t\t.data = {\n+\t\t\t0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,\n+\t\t\t0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,\n+\t\t\t0xDE, 0xF4, 0xDE, 0xAD, 0x26, 0xEB, 0xAB, 0x92,\n+\t\t\t0xFB, 0xBF, 0xB0, 0x8C, 0x29, 0x87, 0x90, 0xAC,\n+\t\t\t0x39, 0x8B, 0x5C, 0x49, 0x68, 0x1E, 0x3A, 0x05,\n+\t\t\t0xCC, 0x68, 0x5C, 0x76, 0xCB, 0x3C, 0x71, 0x89,\n+\t\t\t0xDE, 0xAA, 0x36, 0x44, 0x98, 0x93, 0x97, 0x1E,\n+\t\t\t0x6D, 0x53, 0x83, 0x87, 0xB3, 0xB7, 0x56, 0x41\n+\t\t},\n+\t\t.len = 64\n+\t},\n+\t.digest = {\n+\t\t.data = {\n+\t\t\t0xB8, 0x0B, 0x35, 0x97, 0x3F, 0x24, 0x3F, 0x05,\n+\t\t\t0x2A, 0x7F, 0x2F, 0xD8, 0xD7, 0x56, 0x58, 0xAD,\n+\t\t\t0x6F, 0x8D, 0x1F, 0x4C, 0x30, 0xF9, 0xA8, 0x29,\n+\t\t\t0x7A, 0xE0, 0x8D, 0x88, 0xF5, 0x2E, 0x94, 0xF5,\n+\t\t\t0x06, 0xF7, 0x5D, 0x57, 0x32, 0xA8, 0x49, 0x29,\n+\t\t\t0xEA, 0x6B, 0x6D, 0x95, 0xBD, 0x76, 0xF5, 0x79,\n+\t\t\t0x97, 0x37, 0x0F, 0xBE, 0xC2, 0x45, 0xA0, 0x87,\n+\t\t\t0xAF, 0x24, 0x27, 0x0C, 0x78, 0xBA, 0xBE, 0x20\n+\t\t},\n+\t\t.len = 64\n+\t}\n+};\n+\n+static const struct blockcipher_test_case hash_test_cases[] = {\n+\t{\n+\t\t.test_descr = \"MD5 Digest\",\n+\t\t.test_data = &md5_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"MD5 Digest Verify\",\n+\t\t.test_data = &md5_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-MD5 Digest\",\n+\t\t.test_data = &hmac_md5_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-MD5 Digest Verify\",\n+\t\t.test_data = &hmac_md5_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA1 Digest\",\n+\t\t.test_data = &sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA1 Digest Verify\",\n+\t\t.test_data = &sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA1 Digest\",\n+\t\t.test_data = &hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA1 Digest Verify\",\n+\t\t.test_data = &hmac_sha1_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA224 Digest\",\n+\t\t.test_data = &sha224_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA224 Digest Verify\",\n+\t\t.test_data = &sha224_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA224 Digest\",\n+\t\t.test_data = &hmac_sha224_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA224 Digest Verify\",\n+\t\t.test_data = &hmac_sha224_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA256 Digest\",\n+\t\t.test_data = &sha256_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA256 Digest Verify\",\n+\t\t.test_data = &sha256_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA256 Digest\",\n+\t\t.test_data = &hmac_sha256_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA256 Digest Verify\",\n+\t\t.test_data = &hmac_sha256_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA384 Digest\",\n+\t\t.test_data = &sha384_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA384 Digest Verify\",\n+\t\t.test_data = &sha384_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA384 Digest\",\n+\t\t.test_data = &hmac_sha384_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA384 Digest Verify\",\n+\t\t.test_data = &hmac_sha384_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA512 Digest\",\n+\t\t.test_data = &sha512_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"SHA512 Digest Verify\",\n+\t\t.test_data = &sha512_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA512 Digest\",\n+\t\t.test_data = &hmac_sha512_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+\t{\n+\t\t.test_descr = \"HMAC-SHA512 Digest Verify\",\n+\t\t.test_data = &hmac_sha512_test_vector,\n+\t\t.op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,\n+\t\t.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_LIBCRYPTO\n+\t},\n+};\n+\n+#endif /* TEST_CRYPTODEV_HASH_TEST_VECTORS_H_ */\ndiff --git a/app/test/test_cryptodev_perf.c b/app/test/test_cryptodev_perf.c\nindex 6af0896..e8fc097 100644\n--- a/app/test/test_cryptodev_perf.c\n+++ b/app/test/test_cryptodev_perf.c\n@@ -149,7 +149,13 @@ struct crypto_unittest_params {\n \n static struct rte_cryptodev_sym_session *\n test_perf_create_snow3g_session(uint8_t dev_id, enum chain_mode chain,\n-\t\tenum rte_crypto_cipher_algorithm cipher_algo, unsigned cipher_key_len,\n+\t\tenum rte_crypto_cipher_algorithm cipher_algo,\n+\t\tunsigned int cipher_key_len,\n+\t\tenum rte_crypto_auth_algorithm auth_algo);\n+static struct rte_cryptodev_sym_session *\n+test_perf_create_libcrypto_session(uint8_t dev_id, enum chain_mode chain,\n+\t\tenum rte_crypto_cipher_algorithm cipher_algo,\n+\t\tunsigned int cipher_key_len,\n \t\tenum rte_crypto_auth_algorithm auth_algo);\n static struct rte_mbuf *\n test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz);\n@@ -157,6 +163,18 @@ static inline struct rte_crypto_op *\n test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,\n \t\tstruct rte_cryptodev_sym_session *sess, unsigned data_len,\n \t\tunsigned digest_len);\n+static inline struct rte_crypto_op *\n+test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,\n+\t\tstruct rte_cryptodev_sym_session *sess, unsigned int data_len,\n+\t\tunsigned int digest_len);\n+static inline struct rte_crypto_op *\n+test_perf_set_crypto_op_aes_gcm(struct rte_crypto_op *op, struct rte_mbuf *m,\n+\t\tstruct rte_cryptodev_sym_session *sess, unsigned int data_len,\n+\t\tunsigned int digest_len);\n+static inline struct rte_crypto_op *\n+test_perf_set_crypto_op_3des(struct rte_crypto_op *op, struct rte_mbuf *m,\n+\t\tstruct rte_cryptodev_sym_session *sess, unsigned int data_len,\n+\t\tunsigned int digest_len);\n static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo);\n \n \n@@ -357,6 +375,28 @@ testsuite_setup(void)\n \t\t}\n \t}\n \n+\t/* Create 2 LIBCRYPTO devices if required */\n+\tif (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_LIBCRYPTO_PMD) {\n+#ifndef RTE_LIBRTE_PMD_LIBCRYPTO\n+\t\tRTE_LOG(ERR, USER1, \"CONFIG_RTE_LIBRTE_PMD_LIBCRYPTO must be\"\n+\t\t\t\" enabled in config file to run this testsuite.\\n\");\n+\t\treturn TEST_FAILED;\n+#endif\n+\t\tnb_devs = rte_cryptodev_count_devtype(\n+\t\t\t\tRTE_CRYPTODEV_LIBCRYPTO_PMD);\n+\t\tif (nb_devs < 2) {\n+\t\t\tfor (i = nb_devs; i < 2; i++) {\n+\t\t\t\tret = rte_eal_vdev_init(\n+\t\t\t\t\tRTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD),\n+\t\t\t\t\tNULL);\n+\n+\t\t\t\tTEST_ASSERT(ret == 0, \"Failed to create \"\n+\t\t\t\t\t\"instance %u of pmd : %s\", i,\n+\t\t\t\t\tRTE_STR(CRYPTODEV_NAME_LIBCRYPTO_PMD));\n+\t\t\t}\n+\t\t}\n+\t}\n+\n #ifndef RTE_LIBRTE_PMD_QAT\n \tif (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_QAT_SYM_PMD) {\n \t\tRTE_LOG(ERR, USER1, \"CONFIG_RTE_LIBRTE_PMD_QAT must be enabled \"\n@@ -367,7 +407,7 @@ testsuite_setup(void)\n \n \tnb_devs = rte_cryptodev_count();\n \tif (nb_devs < 1) {\n-\t\tRTE_LOG(ERR, USER1, \"No crypto devices found?\");\n+\t\tRTE_LOG(ERR, USER1, \"No crypto devices found?\\n\");\n \t\treturn TEST_FAILED;\n \t}\n \n@@ -2242,6 +2282,161 @@ test_perf_snow3G_vary_burst_size(void)\n \treturn 0;\n }\n \n+static int\n+test_perf_libcrypto_optimise_cyclecount(struct perf_test_params *pparams)\n+{\n+\tuint32_t num_to_submit = pparams->total_operations;\n+\tstruct rte_crypto_op *c_ops[num_to_submit];\n+\tstruct rte_crypto_op *proc_ops[num_to_submit];\n+\tuint64_t failed_polls, retries, start_cycles,\n+\t\tend_cycles, total_cycles = 0;\n+\tuint32_t burst_sent = 0, burst_received = 0;\n+\tuint32_t i, burst_size, num_sent, num_ops_received;\n+\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\n+\tstatic struct rte_cryptodev_sym_session *sess;\n+\n+\tstatic struct rte_crypto_op *(*test_perf_set_crypto_op)\n+\t\t\t(struct rte_crypto_op *, struct rte_mbuf *,\n+\t\t\t\t\tstruct rte_cryptodev_sym_session *,\n+\t\t\t\t\tunsigned int, unsigned int);\n+\n+\tunsigned int digest_length = get_auth_digest_length(pparams->auth_algo);\n+\n+\tif (rte_cryptodev_count() == 0) {\n+\t\tprintf(\"\\nNo crypto devices found. Is PMD build configured?\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\t/* Create Crypto session*/\n+\tsess = test_perf_create_libcrypto_session(ts_params->dev_id,\n+\t\t\tpparams->chain, pparams->cipher_algo,\n+\t\t\tpparams->cipher_key_length, pparams->auth_algo);\n+\tTEST_ASSERT_NOT_NULL(sess, \"Session creation failed\");\n+\n+\t/* Generate Crypto op data structure(s)*/\n+\tfor (i = 0; i < num_to_submit ; i++) {\n+\t\tstruct rte_mbuf *m = test_perf_create_pktmbuf(\n+\t\t\t\t\t\tts_params->mbuf_mp,\n+\t\t\t\t\t\tpparams->buf_size);\n+\t\tTEST_ASSERT_NOT_NULL(m, \"Failed to allocate tx_buf\");\n+\n+\t\tstruct rte_crypto_op *op =\n+\t\t\t\trte_crypto_op_alloc(ts_params->op_mpool,\n+\t\t\t\t\t\tRTE_CRYPTO_OP_TYPE_SYMMETRIC);\n+\t\tTEST_ASSERT_NOT_NULL(op, \"Failed to allocate op\");\n+\n+\t\tswitch (pparams->cipher_algo) {\n+\t\tcase RTE_CRYPTO_CIPHER_3DES_CBC:\n+\t\tcase RTE_CRYPTO_CIPHER_3DES_CTR:\n+\t\t\ttest_perf_set_crypto_op = test_perf_set_crypto_op_3des;\n+\t\t\tbreak;\n+\t\tcase RTE_CRYPTO_CIPHER_AES_CBC:\n+\t\tcase RTE_CRYPTO_CIPHER_AES_CTR:\n+\t\t\ttest_perf_set_crypto_op = test_perf_set_crypto_op_aes;\n+\t\t\tbreak;\n+\t\tcase RTE_CRYPTO_CIPHER_AES_GCM:\n+\t\t\ttest_perf_set_crypto_op =\n+\t\t\t\t\ttest_perf_set_crypto_op_aes_gcm;\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\treturn TEST_FAILED;\n+\t\t}\n+\n+\t\top = test_perf_set_crypto_op(op, m, sess, pparams->buf_size,\n+\t\t\t\tdigest_length);\n+\t\tTEST_ASSERT_NOT_NULL(op, \"Failed to attach op to session\");\n+\n+\t\tc_ops[i] = op;\n+\t}\n+\n+\tprintf(\"\\nOn %s dev%u qp%u, %s, cipher algo:%s, cipher key length:%u, \"\n+\t\t\t\"auth_algo:%s, Packet Size %u bytes\",\n+\t\t\tpmd_name(gbl_cryptodev_perftest_devtype),\n+\t\t\tts_params->dev_id, 0,\n+\t\t\tchain_mode_name(pparams->chain),\n+\t\t\tcipher_algo_name(pparams->cipher_algo),\n+\t\t\tpparams->cipher_key_length,\n+\t\t\tauth_algo_name(pparams->auth_algo),\n+\t\t\tpparams->buf_size);\n+\tprintf(\"\\nOps Tx\\tOps Rx\\tOps/burst  \");\n+\tprintf(\"Retries  EmptyPolls\\tIACycles/CyOp\\tIACycles/Burst\\t\"\n+\t\t\t\"IACycles/Byte\");\n+\n+\tfor (i = 2; i <= 128 ; i *= 2) {\n+\t\tnum_sent = 0;\n+\t\tnum_ops_received = 0;\n+\t\tretries = 0;\n+\t\tfailed_polls = 0;\n+\t\tburst_size = i;\n+\t\ttotal_cycles = 0;\n+\t\twhile (num_sent < num_to_submit) {\n+\t\t\tstart_cycles = rte_rdtsc_precise();\n+\t\t\tburst_sent = rte_cryptodev_enqueue_burst(\n+\t\t\t\t\tts_params->dev_id,\n+\t\t\t\t\t0, &c_ops[num_sent],\n+\t\t\t\t\t((num_to_submit - num_sent) <\n+\t\t\t\t\t\tburst_size) ?\n+\t\t\t\t\tnum_to_submit - num_sent : burst_size);\n+\t\t\tend_cycles = rte_rdtsc_precise();\n+\t\t\tif (burst_sent == 0)\n+\t\t\t\tretries++;\n+\t\t\tnum_sent += burst_sent;\n+\t\t\ttotal_cycles += (end_cycles - start_cycles);\n+\n+\t\t\t/* Wait until requests have been sent. */\n+\t\t\trte_delay_ms(1);\n+\n+\t\t\tstart_cycles = rte_rdtsc_precise();\n+\t\t\tburst_received = rte_cryptodev_dequeue_burst(\n+\t\t\t\t\tts_params->dev_id, 0, proc_ops,\n+\t\t\t\t\tburst_size);\n+\t\t\tend_cycles = rte_rdtsc_precise();\n+\t\t\tif (burst_received < burst_sent)\n+\t\t\t\tfailed_polls++;\n+\t\t\tnum_ops_received += burst_received;\n+\n+\t\t\ttotal_cycles += end_cycles - start_cycles;\n+\t\t}\n+\n+\t\twhile (num_ops_received != num_to_submit) {\n+\t\t\t/* Sending 0 length burst to flush sw crypto device */\n+\t\t\trte_cryptodev_enqueue_burst(ts_params->dev_id, 0,\n+\t\t\t\t\tNULL, 0);\n+\n+\t\t\tstart_cycles = rte_rdtsc_precise();\n+\t\t\tburst_received = rte_cryptodev_dequeue_burst(\n+\t\t\t\t\tts_params->dev_id, 0, proc_ops,\n+\t\t\t\t\tburst_size);\n+\t\t\tend_cycles = rte_rdtsc_precise();\n+\n+\t\t\ttotal_cycles += end_cycles - start_cycles;\n+\t\t\tif (burst_received == 0)\n+\t\t\t\tfailed_polls++;\n+\t\t\tnum_ops_received += burst_received;\n+\t\t}\n+\n+\t\tprintf(\"\\n%u\\t%u\\t%u\", num_sent, num_ops_received, burst_size);\n+\t\tprintf(\"\\t\\t%\"PRIu64, retries);\n+\t\tprintf(\"\\t%\"PRIu64, failed_polls);\n+\t\tprintf(\"\\t\\t%\"PRIu64, total_cycles/num_ops_received);\n+\t\tprintf(\"\\t\\t%\"PRIu64, (total_cycles/num_ops_received) *\n+\t\t\t\tburst_size);\n+\t\tprintf(\"\\t\\t%\"PRIu64,\n+\t\t\t\ttotal_cycles /\n+\t\t\t\t(num_ops_received * pparams->buf_size));\n+\t}\n+\tprintf(\"\\n\");\n+\n+\tfor (i = 0; i < num_to_submit ; i++) {\n+\t\trte_pktmbuf_free(c_ops[i]->sym->m_src);\n+\t\trte_crypto_op_free(c_ops[i]);\n+\t}\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n static uint32_t get_auth_key_max_length(enum rte_crypto_auth_algorithm algo)\n {\n \tswitch (algo) {\n@@ -2257,6 +2452,8 @@ static uint32_t get_auth_key_max_length(enum rte_crypto_auth_algorithm algo)\n \t\treturn 128;\n \tcase RTE_CRYPTO_AUTH_SHA512_HMAC:\n \t\treturn 128;\n+\tcase RTE_CRYPTO_AUTH_AES_GCM:\n+\t\treturn 0;\n \tdefault:\n \t\treturn 0;\n \t}\n@@ -2277,23 +2474,35 @@ static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo)\n \t\treturn TRUNCATED_DIGEST_BYTE_LENGTH_SHA384;\n \tcase RTE_CRYPTO_AUTH_SHA512_HMAC:\n \t\treturn TRUNCATED_DIGEST_BYTE_LENGTH_SHA512;\n+\tcase RTE_CRYPTO_AUTH_AES_GCM:\n+\t\treturn DIGEST_BYTE_LENGTH_AES_GCM;\n \tdefault:\n \t\treturn 0;\n \t}\n }\n \n-static uint8_t aes_cbc_key[] = {\n+static uint8_t aes_key[] = {\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n };\n \n-static uint8_t aes_cbc_iv[] = {\n+static uint8_t aes_iv[] = {\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n };\n \n+static uint8_t triple_des_key[] = {\n+\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n+\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n+\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n+};\n+\n+static uint8_t triple_des_iv[] = {\n+\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n+};\n+\n static uint8_t hmac_sha_key[] = {\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n@@ -2343,7 +2552,7 @@ test_perf_create_aes_sha_session(uint8_t dev_id, enum chain_mode chain,\n \tcipher_xform.cipher.algo = cipher_algo;\n \tcipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;\n \n-\tcipher_xform.cipher.key.data = aes_cbc_key;\n+\tcipher_xform.cipher.key.data = aes_key;\n \tcipher_xform.cipher.key.length = cipher_key_len;\n \n \t/* Setup HMAC Parameters */\n@@ -2421,8 +2630,77 @@ test_perf_create_snow3g_session(uint8_t dev_id, enum chain_mode chain,\n \t}\n }\n \n-#define AES_CBC_BLOCK_SIZE 16\n-#define AES_CBC_CIPHER_IV_LENGTH 16\n+static struct rte_cryptodev_sym_session *\n+test_perf_create_libcrypto_session(uint8_t dev_id, enum chain_mode chain,\n+\t\tenum rte_crypto_cipher_algorithm cipher_algo,\n+\t\tunsigned int cipher_key_len,\n+\t\tenum rte_crypto_auth_algorithm auth_algo)\n+{\n+\tstruct rte_crypto_sym_xform cipher_xform = { 0 };\n+\tstruct rte_crypto_sym_xform auth_xform = { 0 };\n+\n+\t/* Setup Cipher Parameters */\n+\tcipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n+\tcipher_xform.cipher.algo = cipher_algo;\n+\tcipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;\n+\n+\tswitch (cipher_algo) {\n+\tcase RTE_CRYPTO_CIPHER_3DES_CBC:\n+\tcase RTE_CRYPTO_CIPHER_3DES_CTR:\n+\t\tcipher_xform.cipher.key.data = triple_des_key;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_AES_CBC:\n+\tcase RTE_CRYPTO_CIPHER_AES_CTR:\n+\tcase RTE_CRYPTO_CIPHER_AES_GCM:\n+\t\tcipher_xform.cipher.key.data = aes_key;\n+\t\tbreak;\n+\tdefault:\n+\t\treturn NULL;\n+\t}\n+\n+\tcipher_xform.cipher.key.length = cipher_key_len;\n+\n+\t/* Setup Auth Parameters */\n+\tauth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;\n+\tauth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;\n+\tauth_xform.auth.algo = auth_algo;\n+\n+\tswitch (auth_algo) {\n+\tcase RTE_CRYPTO_AUTH_SHA1_HMAC:\n+\t\tauth_xform.auth.key.data = hmac_sha_key;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_AES_GCM:\n+\t\tauth_xform.auth.key.data = NULL;\n+\t\tbreak;\n+\tdefault:\n+\t\treturn NULL;\n+\t}\n+\n+\tauth_xform.auth.key.length =  get_auth_key_max_length(auth_algo);\n+\tauth_xform.auth.digest_length = get_auth_digest_length(auth_algo);\n+\n+\tswitch (chain) {\n+\tcase CIPHER_HASH:\n+\t\tcipher_xform.next = &auth_xform;\n+\t\tauth_xform.next = NULL;\n+\t\t/* Create Crypto session*/\n+\t\treturn rte_cryptodev_sym_session_create(dev_id,\t&cipher_xform);\n+\tcase HASH_CIPHER:\n+\t\tauth_xform.next = &cipher_xform;\n+\t\tcipher_xform.next = NULL;\n+\t\t/* Create Crypto session*/\n+\t\treturn rte_cryptodev_sym_session_create(dev_id,\t&auth_xform);\n+\tdefault:\n+\t\treturn NULL;\n+\t}\n+}\n+\n+#define AES_BLOCK_SIZE 16\n+#define AES_CIPHER_IV_LENGTH 16\n+\n+#define TRIPLE_DES_BLOCK_SIZE 8\n+#define TRIPLE_DES_CIPHER_IV_LENGTH 8\n+\n #define SNOW3G_CIPHER_IV_LENGTH 16\n \n static struct rte_mbuf *\n@@ -2441,7 +2719,7 @@ test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz)\n }\n \n static inline struct rte_crypto_op *\n-test_perf_set_crypto_op(struct rte_crypto_op *op, struct rte_mbuf *m,\n+test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,\n \t\tstruct rte_cryptodev_sym_session *sess, unsigned data_len,\n \t\tunsigned digest_len)\n {\n@@ -2455,19 +2733,54 @@ test_perf_set_crypto_op(struct rte_crypto_op *op, struct rte_mbuf *m,\n \t\t\t\t\t(m->data_off + data_len);\n \top->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m, data_len);\n \top->sym->auth.digest.length = digest_len;\n-\top->sym->auth.aad.data = aes_cbc_iv;\n-\top->sym->auth.aad.length = AES_CBC_CIPHER_IV_LENGTH;\n+\top->sym->auth.aad.data = aes_iv;\n+\top->sym->auth.aad.length = AES_CIPHER_IV_LENGTH;\n \n \t/* Cipher Parameters */\n-\top->sym->cipher.iv.data = aes_cbc_iv;\n-\top->sym->cipher.iv.length = AES_CBC_CIPHER_IV_LENGTH;\n+\top->sym->cipher.iv.data = aes_iv;\n+\top->sym->cipher.iv.length = AES_CIPHER_IV_LENGTH;\n \n \t/* Data lengths/offsets Parameters */\n \top->sym->auth.data.offset = 0;\n \top->sym->auth.data.length = data_len;\n \n-\top->sym->cipher.data.offset = AES_CBC_BLOCK_SIZE;\n-\top->sym->cipher.data.length = data_len - AES_CBC_BLOCK_SIZE;\n+\top->sym->cipher.data.offset = AES_BLOCK_SIZE;\n+\top->sym->cipher.data.length = data_len - AES_BLOCK_SIZE;\n+\n+\top->sym->m_src = m;\n+\n+\treturn op;\n+}\n+\n+static inline struct rte_crypto_op *\n+test_perf_set_crypto_op_aes_gcm(struct rte_crypto_op *op, struct rte_mbuf *m,\n+\t\tstruct rte_cryptodev_sym_session *sess, unsigned int data_len,\n+\t\tunsigned int digest_len)\n+{\n+\tif (rte_crypto_op_attach_sym_session(op, sess) != 0) {\n+\t\trte_crypto_op_free(op);\n+\t\treturn NULL;\n+\t}\n+\n+\t/* Authentication Parameters */\n+\top->sym->auth.digest.data = (uint8_t *)m->buf_addr +\n+\t\t\t\t\t(m->data_off + data_len);\n+\top->sym->auth.digest.phys_addr =\n+\t\t\t\trte_pktmbuf_mtophys_offset(m, data_len);\n+\top->sym->auth.digest.length = digest_len;\n+\top->sym->auth.aad.data = aes_iv;\n+\top->sym->auth.aad.length = AES_CIPHER_IV_LENGTH;\n+\n+\t/* Cipher Parameters */\n+\top->sym->cipher.iv.data = aes_iv;\n+\top->sym->cipher.iv.length = AES_CIPHER_IV_LENGTH;\n+\n+\t/* Data lengths/offsets Parameters */\n+\top->sym->auth.data.offset = AES_BLOCK_SIZE;\n+\top->sym->auth.data.length = data_len - AES_BLOCK_SIZE;\n+\n+\top->sym->cipher.data.offset = AES_BLOCK_SIZE;\n+\top->sym->cipher.data.length = data_len - AES_BLOCK_SIZE;\n \n \top->sym->m_src = m;\n \n@@ -2487,7 +2800,8 @@ test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,\n \t/* Authentication Parameters */\n \top->sym->auth.digest.data = (uint8_t *)m->buf_addr +\n \t\t\t\t\t\t(m->data_off + data_len);\n-\top->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m, data_len);\n+\top->sym->auth.digest.phys_addr =\n+\t\t\t\trte_pktmbuf_mtophys_offset(m, data_len);\n \top->sym->auth.digest.length = digest_len;\n \top->sym->auth.aad.data = snow3g_iv;\n \top->sym->auth.aad.length = SNOW3G_CIPHER_IV_LENGTH;\n@@ -2508,7 +2822,40 @@ test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,\n \treturn op;\n }\n \n+static inline struct rte_crypto_op *\n+test_perf_set_crypto_op_3des(struct rte_crypto_op *op, struct rte_mbuf *m,\n+\t\tstruct rte_cryptodev_sym_session *sess, unsigned int data_len,\n+\t\tunsigned int digest_len)\n+{\n+\tif (rte_crypto_op_attach_sym_session(op, sess) != 0) {\n+\t\trte_crypto_op_free(op);\n+\t\treturn NULL;\n+\t}\n+\n+\t/* Authentication Parameters */\n+\top->sym->auth.digest.data = (uint8_t *)m->buf_addr +\n+\t\t\t\t\t(m->data_off + data_len);\n+\top->sym->auth.digest.phys_addr =\n+\t\t\t\trte_pktmbuf_mtophys_offset(m, data_len);\n+\top->sym->auth.digest.length = digest_len;\n+\top->sym->auth.aad.data = triple_des_iv;\n+\top->sym->auth.aad.length = TRIPLE_DES_CIPHER_IV_LENGTH;\n+\n+\t/* Cipher Parameters */\n+\top->sym->cipher.iv.data = triple_des_iv;\n+\top->sym->cipher.iv.length = TRIPLE_DES_CIPHER_IV_LENGTH;\n+\n+\t/* Data lengths/offsets Parameters */\n+\top->sym->auth.data.offset = 0;\n+\top->sym->auth.data.length = data_len;\n+\n+\top->sym->cipher.data.offset = TRIPLE_DES_BLOCK_SIZE;\n+\top->sym->cipher.data.length = data_len - TRIPLE_DES_BLOCK_SIZE;\n+\n+\top->sym->m_src = m;\n \n+\treturn op;\n+}\n \n /* An mbuf set is used in each burst. An mbuf can be used by multiple bursts at\n  * same time, i.e. as they're not dereferenced there's no need to wait until\n@@ -2579,7 +2926,7 @@ test_perf_aes_sha(uint8_t dev_id, uint16_t queue_id,\n \t\t\t\t\"and free ops below.\");\n \t\t} else {\n \t\t\tfor (i = 0; i < ops_needed; i++)\n-\t\t\t\tops[i] = test_perf_set_crypto_op(ops[i],\n+\t\t\t\tops[i] = test_perf_set_crypto_op_aes(ops[i],\n \t\t\t\t\tmbufs[i + (pparams->burst_size *\n \t\t\t\t\t\t(j % NUM_MBUF_SETS))],\n \t\t\t\t\tsess, pparams->buf_size, digest_length);\n@@ -2790,6 +3137,155 @@ test_perf_snow3g(uint8_t dev_id, uint16_t queue_id,\n \treturn TEST_SUCCESS;\n }\n \n+static int\n+test_perf_libcrypto(uint8_t dev_id, uint16_t queue_id,\n+\t\tstruct perf_test_params *pparams)\n+{\n+\tuint16_t i, k, l, m;\n+\tuint16_t j = 0;\n+\tuint16_t ops_unused = 0;\n+\n+\tuint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;\n+\tuint64_t processed = 0, failed_polls = 0, retries = 0;\n+\tuint64_t tsc_start = 0, tsc_end = 0;\n+\n+\tunsigned int digest_length = get_auth_digest_length(pparams->auth_algo);\n+\n+\tstruct rte_crypto_op *ops[pparams->burst_size];\n+\tstruct rte_crypto_op *proc_ops[pparams->burst_size];\n+\n+\tstruct rte_mbuf *mbufs[pparams->burst_size * NUM_MBUF_SETS];\n+\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\n+\tstatic struct rte_cryptodev_sym_session *sess;\n+\n+\tstatic struct rte_crypto_op *(*test_perf_set_crypto_op)\n+\t\t\t(struct rte_crypto_op *, struct rte_mbuf *,\n+\t\t\t\t\tstruct rte_cryptodev_sym_session *,\n+\t\t\t\t\tunsigned int, unsigned int);\n+\n+\tswitch (pparams->cipher_algo) {\n+\tcase RTE_CRYPTO_CIPHER_3DES_CBC:\n+\tcase RTE_CRYPTO_CIPHER_3DES_CTR:\n+\t\ttest_perf_set_crypto_op = test_perf_set_crypto_op_3des;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_AES_CBC:\n+\tcase RTE_CRYPTO_CIPHER_AES_CTR:\n+\t\ttest_perf_set_crypto_op = test_perf_set_crypto_op_aes;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_AES_GCM:\n+\t\ttest_perf_set_crypto_op = test_perf_set_crypto_op_aes_gcm;\n+\t\tbreak;\n+\tdefault:\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\tif (rte_cryptodev_count() == 0) {\n+\t\tprintf(\"\\nNo crypto devices found. Is PMD build configured?\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\t/* Create Crypto session*/\n+\tsess = test_perf_create_libcrypto_session(ts_params->dev_id,\n+\t\t\tpparams->chain, pparams->cipher_algo,\n+\t\t\tpparams->cipher_key_length, pparams->auth_algo);\n+\tTEST_ASSERT_NOT_NULL(sess, \"Session creation failed\");\n+\n+\t/* Generate a burst of crypto operations */\n+\tfor (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {\n+\t\tmbufs[i] = test_perf_create_pktmbuf(\n+\t\t\t\tts_params->mbuf_mp,\n+\t\t\t\tpparams->buf_size);\n+\n+\t\tif (mbufs[i] == NULL) {\n+\t\t\tprintf(\"\\nFailed to get mbuf - freeing the rest.\\n\");\n+\t\t\tfor (k = 0; k < i; k++)\n+\t\t\t\trte_pktmbuf_free(mbufs[k]);\n+\t\t\treturn -1;\n+\t\t}\n+\t}\n+\n+\ttsc_start = rte_rdtsc_precise();\n+\n+\twhile (total_enqueued < pparams->total_operations) {\n+\t\tuint16_t burst_size =\n+\t\ttotal_enqueued + pparams->burst_size <=\n+\t\tpparams->total_operations ? pparams->burst_size :\n+\t\t\t\tpparams->total_operations - total_enqueued;\n+\t\tuint16_t ops_needed = burst_size - ops_unused;\n+\n+\t\tif (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,\n+\t\t\t\tRTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){\n+\t\t\tprintf(\"\\nFailed to alloc enough ops, finish dequeuing \"\n+\t\t\t\t\"and free ops below.\");\n+\t\t} else {\n+\t\t\tfor (i = 0; i < ops_needed; i++)\n+\t\t\t\tops[i] = test_perf_set_crypto_op(ops[i],\n+\t\t\t\t\tmbufs[i + (pparams->burst_size *\n+\t\t\t\t\t\t(j % NUM_MBUF_SETS))],\n+\t\t\t\t\tsess, pparams->buf_size, digest_length);\n+\n+\t\t\t/* enqueue burst */\n+\t\t\tburst_enqueued = rte_cryptodev_enqueue_burst(dev_id,\n+\t\t\t\t\tqueue_id, ops, burst_size);\n+\n+\t\t\tif (burst_enqueued < burst_size)\n+\t\t\t\tretries++;\n+\n+\t\t\tops_unused = burst_size - burst_enqueued;\n+\t\t\ttotal_enqueued += burst_enqueued;\n+\t\t}\n+\n+\t\t/* dequeue burst */\n+\t\tburst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,\n+\t\t\t\tproc_ops, pparams->burst_size);\n+\t\tif (burst_dequeued == 0)\n+\t\t\tfailed_polls++;\n+\t\telse {\n+\t\t\tprocessed += burst_dequeued;\n+\n+\t\t\tfor (l = 0; l < burst_dequeued; l++)\n+\t\t\t\trte_crypto_op_free(proc_ops[l]);\n+\t\t}\n+\t\tj++;\n+\t}\n+\n+\t/* Dequeue any operations still in the crypto device */\n+\twhile (processed < pparams->total_operations) {\n+\t\t/* Sending 0 length burst to flush sw crypto device */\n+\t\trte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);\n+\n+\t\t/* dequeue burst */\n+\t\tburst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,\n+\t\t\t\tproc_ops, pparams->burst_size);\n+\t\tif (burst_dequeued == 0)\n+\t\t\tfailed_polls++;\n+\t\telse {\n+\t\t\tprocessed += burst_dequeued;\n+\n+\t\t\tfor (m = 0; m < burst_dequeued; m++)\n+\t\t\t\trte_crypto_op_free(proc_ops[m]);\n+\t\t}\n+\t}\n+\n+\ttsc_end = rte_rdtsc_precise();\n+\n+\tdouble ops_s = ((double)processed / (tsc_end - tsc_start))\n+\t\t\t\t\t* rte_get_tsc_hz();\n+\tdouble throughput = (ops_s * pparams->buf_size * NUM_MBUF_SETS)\n+\t\t\t\t\t/ 1000000000;\n+\n+\tprintf(\"\\t%u\\t%6.2f\\t%10.2f\\t%8\"PRIu64\"\\t%8\"PRIu64, pparams->buf_size,\n+\t\t\tops_s / 1000000, throughput, retries, failed_polls);\n+\n+\tfor (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)\n+\t\trte_pktmbuf_free(mbufs[i]);\n+\n+\tprintf(\"\\n\");\n+\treturn TEST_SUCCESS;\n+}\n+\n /*\n \n     perf_test_aes_sha(\"avx2\", HASH_CIPHER, 16, CBC, SHA1);\n@@ -2937,6 +3433,167 @@ test_perf_snow3G_vary_pkt_size(void)\n }\n \n static int\n+test_perf_libcrypto_vary_pkt_size(void)\n+{\n+\tunsigned int total_operations = 1000000;\n+\tunsigned int burst_size = { 64 };\n+\tunsigned int buf_lengths[] = { 64, 128, 256, 512, 768, 1024, 1280, 1536,\n+\t\t\t1792, 2048 };\n+\tuint8_t i, j;\n+\n+\tstruct perf_test_params params_set[] = {\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t\t\t.cipher_key_length = 16,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t\t\t.cipher_key_length = 24,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_AES_CTR,\n+\t\t\t.cipher_key_length = 16,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_AES_CTR,\n+\t\t\t.cipher_key_length = 32,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t\t\t.cipher_key_length = 16,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t\t\t.cipher_key_length = 24,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_AES_GCM,\n+\t\t\t.cipher_key_length = 16,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_AES_GCM\n+\t\t},\n+\t};\n+\n+\tfor (i = 0; i < RTE_DIM(params_set); i++) {\n+\t\tparams_set[i].total_operations = total_operations;\n+\t\tparams_set[i].burst_size = burst_size;\n+\t\tprintf(\"\\n%s. cipher algo: %s auth algo: %s cipher key size=%u.\"\n+\t\t\t\t\" burst_size: %d ops\\n\",\n+\t\t\t\tchain_mode_name(params_set[i].chain),\n+\t\t\t\tcipher_algo_name(params_set[i].cipher_algo),\n+\t\t\t\tauth_algo_name(params_set[i].auth_algo),\n+\t\t\t\tparams_set[i].cipher_key_length,\n+\t\t\t\tburst_size);\n+\t\tprintf(\"\\nBuffer Size(B)\\tOPS(M)\\tThroughput(Gbps)\\tRetries\\t\"\n+\t\t\t\t\"EmptyPolls\\n\");\n+\t\tfor (j = 0; j < RTE_DIM(buf_lengths); j++) {\n+\t\t\tparams_set[i].buf_size = buf_lengths[j];\n+\t\t\ttest_perf_libcrypto(testsuite_params.dev_id, 0,\n+\t\t\t\t\t&params_set[i]);\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+test_perf_libcrypto_vary_burst_size(void)\n+{\n+\tunsigned int total_operations = 4096;\n+\tuint16_t buf_lengths[] = { 40 };\n+\tuint8_t i, j;\n+\n+\tstruct perf_test_params params_set[] = {\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t\t\t.cipher_key_length = 16,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_3DES_CBC,\n+\t\t\t.cipher_key_length = 24,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_AES_CTR,\n+\t\t\t.cipher_key_length = 16,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_AES_CTR,\n+\t\t\t.cipher_key_length = 32,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t\t\t.cipher_key_length = 16,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_3DES_CTR,\n+\t\t\t.cipher_key_length = 24,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC\n+\t\t},\n+\t\t{\n+\t\t\t.chain = CIPHER_HASH,\n+\n+\t\t\t.cipher_algo  = RTE_CRYPTO_CIPHER_AES_GCM,\n+\t\t\t.cipher_key_length = 16,\n+\t\t\t.auth_algo = RTE_CRYPTO_AUTH_AES_GCM\n+\t\t},\n+\t};\n+\n+\tprintf(\"\\n\\nStart %s.\", __func__);\n+\tprintf(\"\\nThis Test measures the average IA cycle cost using a \"\n+\t\t\t\"constant request(packet) size. \");\n+\tprintf(\"Cycle cost is only valid when indicators show device is not\"\n+\t\t\t\" busy, i.e. Retries and EmptyPolls = 0\");\n+\n+\tfor (i = 0; i < RTE_DIM(params_set); i++) {\n+\t\tprintf(\"\\n\");\n+\t\tparams_set[i].total_operations = total_operations;\n+\n+\tfor (j = 0; j < RTE_DIM(buf_lengths); j++) {\n+\t\tparams_set[i].buf_size = buf_lengths[j];\n+\t\ttest_perf_libcrypto_optimise_cyclecount(&params_set[i]);\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n test_perf_aes_cbc_vary_burst_size(void)\n {\n \treturn test_perf_crypto_qp_vary_burst_size(testsuite_params.dev_id);\n@@ -3377,6 +4034,19 @@ static struct unit_test_suite cryptodev_snow3g_testsuite  = {\n \t}\n };\n \n+static struct unit_test_suite cryptodev_libcrypto_testsuite  = {\n+\t.suite_name = \"Crypto Device LIBCRYPTO Unit Test Suite\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_perf_libcrypto_vary_pkt_size),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\t\ttest_perf_libcrypto_vary_burst_size),\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\n+};\n+\n static int\n perftest_aesni_gcm_cryptodev(void)\n {\n@@ -3417,8 +4087,18 @@ perftest_qat_snow3g_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)\n \treturn unit_test_suite_runner(&cryptodev_snow3g_testsuite);\n }\n \n+static int\n+perftest_libcrypto_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)\n+{\n+\tgbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_LIBCRYPTO_PMD;\n+\n+\treturn unit_test_suite_runner(&cryptodev_libcrypto_testsuite);\n+}\n+\n REGISTER_TEST_COMMAND(cryptodev_aesni_mb_perftest, perftest_aesni_mb_cryptodev);\n REGISTER_TEST_COMMAND(cryptodev_qat_perftest, perftest_qat_cryptodev);\n REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_perftest, perftest_sw_snow3g_cryptodev);\n REGISTER_TEST_COMMAND(cryptodev_qat_snow3g_perftest, perftest_qat_snow3g_cryptodev);\n REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_perftest, perftest_aesni_gcm_cryptodev);\n+REGISTER_TEST_COMMAND(cryptodev_libcrypto_perftest,\n+\t\tperftest_libcrypto_cryptodev);\n",
    "prefixes": [
        "dpdk-dev",
        "v6",
        "3/4"
    ]
}