get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 35815,
    "url": "https://patches.dpdk.org/api/patches/35815/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1520584520-130522-16-git-send-email-Ravi1.kumar@amd.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1520584520-130522-16-git-send-email-Ravi1.kumar@amd.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1520584520-130522-16-git-send-email-Ravi1.kumar@amd.com",
    "date": "2018-03-09T08:35:16",
    "name": "[dpdk-dev,v4,16/20] crypto/ccp: support sha3 family authentication algo",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "61feaf57a422fce2c08b966918fd6de42029e70a",
    "submitter": {
        "id": 819,
        "url": "https://patches.dpdk.org/api/people/819/?format=api",
        "name": "Kumar, Ravi1",
        "email": "ravi1.kumar@amd.com"
    },
    "delegate": {
        "id": 22,
        "url": "https://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": "https://patches.dpdk.org/project/dpdk/patch/1520584520-130522-16-git-send-email-Ravi1.kumar@amd.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/35815/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/35815/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 27E091322C;\n\tFri,  9 Mar 2018 09:36:08 +0100 (CET)",
            "from NAM01-BY2-obe.outbound.protection.outlook.com\n\t(mail-by2nam01on0069.outbound.protection.outlook.com [104.47.34.69])\n\tby dpdk.org (Postfix) with ESMTP id 327431AFF6\n\tfor <dev@dpdk.org>; Fri,  9 Mar 2018 09:36:06 +0100 (CET)",
            "from wallaby-smavila.amd.com (202.56.249.162) by\n\tMWHPR12MB1518.namprd12.prod.outlook.com (2603:10b6:301:b::22) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.548.14;\n\tFri, 9 Mar 2018 08:36:03 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=amdcloud.onmicrosoft.com; s=selector1-amd-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=rzk3DLxal7eNj99yvLuCF2W2LIcXZOOllQaVFtcUzrc=;\n\tb=QTXNQD6l79qhGiEs+SGZq3RaKaaoOT415Jomw1GFi/wTk5FstDuQ8RQ7pMbB2Hh0elU0mZvJr9ceNtKurrksbl9j1XZ453zaatRE0mDVJegG0No+bO8ZJUAuHptOsNkRnMaex+XUSikKFTTqyFcHgJhrP95PAfqgKvriwpFbmg4=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Ravi1.Kumar@amd.com; ",
        "From": "Ravi Kumar <Ravi1.kumar@amd.com>",
        "To": "dev@dpdk.org",
        "Cc": "pablo.de.lara.guarch@intel.com",
        "Date": "Fri,  9 Mar 2018 03:35:16 -0500",
        "Message-Id": "<1520584520-130522-16-git-send-email-Ravi1.kumar@amd.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1520584520-130522-1-git-send-email-Ravi1.kumar@amd.com>",
        "References": "<1515577379-18453-1-git-send-email-Ravi1.kumar@amd.com>\n\t<1520584520-130522-1-git-send-email-Ravi1.kumar@amd.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[202.56.249.162]",
        "X-ClientProxiedBy": "MA1PR0101CA0050.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:a00:20::12) To MWHPR12MB1518.namprd12.prod.outlook.com\n\t(2603:10b6:301:b::22)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-MS-Office365-Filtering-Correlation-Id": "3ee1c619-2e7c-4359-d09e-08d58598cb95",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);\n\tSRVR:MWHPR12MB1518; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; MWHPR12MB1518;\n\t3:hpARN23y5/RJesPECGV/T1ahkW5LhpGG5O/0yY0+m3K63Bg4oAYfyJOF75Su3jBcVVGyZ8myjdQfe8qc3YIFl6PIfnNvljf4kJ+ND6hMJOE6zxmylWJqRrQ//tVbsCnqwHMR/xGCeHLWrKslcHfZXZz2pxien9TAaRNtPKhcgiYKeKQE1CGyDrXRKshtr7CE6Q4O29eArNoP1nwXfN3OenfPJju1nWdrInraXnod4n5Ve4D4cz7jVx1Ws0XDe0dk;\n\t25:Oq/83sNEK291QkurNNmpDDbGQyto7i4MK85H1R4B8eC/B0lDvjkBnUnydmbL2ycr3mQ0s8+3kQ/3rSYV2+dlpSBHtpxFSyqzZnNvwt01gvEEHXAskbos5tJAuBE7usjdtpImh/DTap99GqRRYdfMvG3j/Xi1UG6WNhdJqa/x3F9UK1Fv2U6S9QqZs0Tu9kcilaG8Vvmm6+r37eKNsOVhMB8HDKXzTljb0Fe/Nf6VAF1xtJT8/U4KBr/Q+vGnKlcYKRj9wBUL7ag6vwnrCtnx7/bV4FjbAZYlq0vkQXw/x1lEiDEfYaLokBfe8F/ivUMC2U2T807DrMnAG/iDioCWyg==;\n\t31:vWDcL3akT31lnhQgKA+bp+eAQEkjD+4mjt6Md70PVKFRjpRGk+x6aMJUcQCKOibcUKWNAkwgW2+Ez4Q53Pbmd4cFbOaflZgNeAi2igN2RqPmGaP9nAWNxyeR2SU8vfZQDA7AWW6O37cKacJILEhFDRUVIoGudiXNLatOH7RtWBSbOo0Dqv1apVyyZBY4cojGMN2CWhXXGORfdIxknECIJvDPEmDLy3MmOQt50F0pZ/U=",
            "1; MWHPR12MB1518;\n\t20:anL1N8eidvR7s8/whqawK9JoweDK2BieRppVt2ADerBPf6PxqYZxrK64PGkX4joRRuOpAc33uWNe9eea0xP2CG06/O4SoJFzz7kA7/385M6CRwnvp5c6lMI3a6oNdJEm9AhofzPa2J+5kmDr7WE+Vg9eESRBvPL1fN3cl6txraoPlC/AikqouaKX45AhL+a93YZoelShiz2sfJjCMuMzOkN7ROb3V8WdjHbSjp0rztVenGx52yeNNILlV2HCiq4IwEfrDlv0xsE3sZRlxbxjvVl2rd+kfHjNJ2iQv0MJQV5qUogPcRsq70rnMeDEnyujSIHT3wqKjZY/C9Sccsq3ZN4p7n9BTZZkx3Q67qs1Zy3OtGOmr39Zeg9qtPWe7Jtu7Hm3nyoNrU5y+ehIzTX6uh1Jo0t9SYJXKhNuZ1gEKZDO5BKvPMwAwQDTfgpFHTqLnYQqh/75o8IAPQo7U9S8MxsmPTikn7BjuaAJjJKuVvd/Mh1AIrOD8/6qt5EExfBs;\n\t4:3Wc02Ur0fhWlQOgd3zWVhbp4Csk+A1ol00WcxmUyu6V3diJ5PUtot4Jyzp3L/oHfdju/1ttQZWEAyUP9kaWxerHl1qUT0wByoL0Qhwqx/diFZfzhe5+WcbM7wrqE7Q8Z+yD1u7T8+Tw1cAElRzyTxZwIbEL/bcV4PY5wtu2ZUtJFOZoZ89HttDMC3KzEREv/cH6sM87n0vEDFOPGESqh17xWrmo8AROUQUlHa+n7nsMcpIjFJlgOrfM/qlKIpgApEEMI6ds9JW6p2VAD5ZuX1tmIOH+/DgO3BJHePMOXHiOra6LDEuCjROek80spXIFM",
            "=?us-ascii?Q?1; MWHPR12MB1518;\n\t23:B5kt6TwUuApKWOxx+0FwpsmLyCCo8K+eFXMy6F299?=\n\tsS5PhMmyMyBrFgY3BlMyv/Cel4nZzT6Nqg7EV2oqj2yHA3wHES29Fuj51g6j6AmuQrt/vbdV403yM8Zo2sittSw5MbaLnl3W2XlMvXzryI+P+Wq7j2eLJCshqXKvMvRwc3hStMuYoGNvZBOChrnD3mpwV6f1qoJoCd2U/WEn79hzc7qYSOQu/zQ700t9vzT+TxFq38mxH8axO1olIYF407keP4n2zIi/+Fau6CXhVViZ6Ymd93VSin5OWOaG782pqv8t9+EFegi6iW7g5Z+XEd0Kr2yxL0L8vkGhHK85z9aS1huVoDPTTh60op0tpQ0bbm9ukxMVstiJyByotbDZQg9wcL07pp8IBhj+BATyqWVVxBR5R7irF8Nv0KMFYq8Mm2k42TGVJOTDepNsx3j60gRODTxreZYZal0qfPyrsRCed67lMqWtWwU8DIo80w1uq6FM8N8LqTCOndHrWKQJ8qhnQA5aCcYsc0CEImuJ2cdfX7cHXxvQH2o2chU6jToChZFVatYUSxZ6GD/R59hxC+tG73MaZZNbjV5h1PQPHGpH6scgSNZg2H9Eu8oHpRhieDGWxTjEkOoLaSt4mXrlhkV1i13i/0TuOoPTqSidc/sBsn2fwngMoObLMCoPNWqCT0q3qYbchON30ZWSvI14hN8almMJA7wJy0VmCVrBlq+Y2nz5vJ5jY70TgTDjGOeY+A7YxGnydiaHKViq5z+K+4S+LTJt/p3g+Pm7E10asgUIsvtF26iMDuYv5Sn+nbuTOWz3j9DaNxIZ45P3mjeO/Lvt5Y1mbO4kQOqCdNnUMHZkjr/fMOB+O2K8ShKPdkFXeCQvDyQZvrna10lQWcHqqm8GInnAgKTqo21Y/3Ndd16/kK6/D9IQTYbc94ctGauyA//qWmMrJPWMaQk0cY8xYgTmYBH+SufOI9zQknxNYeCUwl8qwwg11yzbKlQTAgNWNYKwe3PN5Gb6mtQW2TDE1iDH24xyYEKfNMKZ7ZwYDHkzdinxF3uDkKDyex6DQrqlLE+UC+MYkzNw9nZ64VIyeZhi6fV7dZYDnZVR/DL2+TNnGzSuaERz6jqjNKK5sQnl+8uAaTa5LAO+C0MWLlVdPvnjn0cErxHRLYOPVKNZStzHNsbPJ6jP/DTqq70j6B3yW9+49MjRJ3oUB7ocHRvRaiv",
            "1; MWHPR12MB1518;\n\t6:NNpx7dLxkbeyO82am4lPLfPfjpWyiGaGkuOamAC4cVVxevVVnpjPE76JBxQCq2pZrwN7czbhPQvZj9HP7rpaNP04teRsDELXKSGnl8pReJlshH3S0Waojq3mVPoMlhLRxJ/rFU+65OeBh8NxPDbAVdkmyEI8iUAhJz2LYHLKzXOEM8a0KWeKtSLvnNwFigbAiDZRrvJt3lNwFZPJWD2MNyYIpM4wDyoZgi9cFtfUopAyZRkTNa6WCsOX010nb9zlVJlwh5UD5lSaL2aInszLi91Q3zctecyi5/rbFQL9qvO98Yy7KibPzUCA7436DMLD+erklOdaaoyispF34AYN9n7lhlKbUIeMJDvF95AZY6k=;\n\t5:BTmRSj8+98fF1XP1dBUnUGabHVyTwzm48vJs3g0OceHfDj4oGUsMBNhWHbrGGZ648RrtrzK5r9gnTe0sZ6XagUu6+qzCzXby4P3rreY626TXfTbB2szJy0THdjN/PvdtMwFpjNrdNYlNJezR+ejXdy/Ga17DEd6uy1OVVB38Xsc=;\n\t24:wZ+hb5C95X9l6aIvXQ99zkrVVEzLoRrci9MrW5aTJG4cOXKloCHiqEPYYPBvp8dmaw5FK9szVNi6S5f/1I9bKlotWu9fLxQ18h5PdFoFBAU=;\n\t7:5tiWEDxcYIulCOK40WpBroDNPFJhS9lXlLbyWV9gzxkOz+Nxh+8s/tu8uj9wm6VLpjaoMuv5RjEy6B6SK35p70uyye1NIV+GJEMO78kSlMMG1S8mT32yq9KnBpXNil9IzS7xrmXu0iY7eCwraa6rZjhUr/QjQMBoNLDoNwoAEqz2Nz/EGbmcoEvJjVPoGdjow/ETad+B9CdZZBPrEJcFchLeVC+wM/3BQPksTwyH9M5quASlYAWvc/7B3W1OLy/t",
            "1; MWHPR12MB1518;\n\t20:wVBC9BA1rJUCZdCb3WK/2PPXCKeUL63Fu9NmUcXIto+7Xg/P9yMYhZEKDVJ+9wnhzt7oNV94HgER/+mKvMGozaPnaDO943N7/px1iCxW/kiXTxd2WPgTWiFvAUkg64SSfT3sJxQMgpZW2Uj/8irbbRWGkUDg4nVsLAvJLyoOGOl1UnagkxtAhQzM+1f0VRer8gJUXRFvC4DRBydN5FUX2caTKhvHvJfFupesUahd2+psdYrfmCfv9GN4Rcx+K2Xm"
        ],
        "X-MS-TrafficTypeDiagnostic": "MWHPR12MB1518:",
        "X-Microsoft-Antispam-PRVS": "<MWHPR12MB151843BA9B5A0AAFAD7A0276AEDE0@MWHPR12MB1518.namprd12.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(767451399110);",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231220)(944501244)(52105095)(10201501046)(93006095)(93001095)(6055026)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011);\n\tSRVR:MWHPR12MB1518; BCL:0; PCL:0; RULEID:; SRVR:MWHPR12MB1518; ",
        "X-Forefront-PRVS": "0606BBEB39",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(39860400002)(39380400002)(396003)(366004)(376002)(346002)(199004)(189003)(16586007)(26005)(81156014)(16526019)(8676002)(186003)(81166006)(25786009)(7736002)(3846002)(386003)(305945005)(4326008)(6116002)(6666003)(316002)(86362001)(76176011)(52116002)(8936002)(51416003)(50226002)(5660300001)(2906002)(2950100002)(6916009)(59450400001)(7696005)(36756003)(53946003)(106356001)(105586002)(6486002)(68736007)(48376002)(97736004)(53416004)(2361001)(2351001)(53936002)(50466002)(478600001)(47776003)(66066001)(72206003);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR12MB1518;\n\tH:wallaby-smavila.amd.com; FPR:; \n\tSPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: amd.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "LsJNy5NoUUFfjpPpSlBUqkMb/djjuPYtTCdZ6Anb7qANmK72orHkx3kiFqeVcOplUqlKOImt4s8klOWGwvsGjkm1JpydwFVhLn/afj5s3IfSHCcW9uSnC0W60LYDTUfe6G1AHfpsgprk4xQ8Ss/XjtGao/K+zLKMWQk2sKyT20onpqJ/EAAcSb74a3gbXVLu",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "amd.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "09 Mar 2018 08:36:03.1471\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "3ee1c619-2e7c-4359-d09e-08d58598cb95",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "3dd8961f-e488-4e60-8e11-a82d994e183d",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MWHPR12MB1518",
        "Subject": "[dpdk-dev] [PATCH v4 16/20] crypto/ccp: support sha3 family\n\tauthentication algo",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://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": "<https://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": "Signed-off-by: Ravi Kumar <Ravi1.kumar@amd.com>\n---\n drivers/crypto/ccp/ccp_crypto.c       | 667 +++++++++++++++++++++++++++++++++-\n drivers/crypto/ccp/ccp_crypto.h       |  22 ++\n drivers/crypto/ccp/ccp_pmd_ops.c      | 168 +++++++++\n lib/librte_cryptodev/rte_crypto_sym.h |  17 +\n 4 files changed, 873 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/crypto/ccp/ccp_crypto.c b/drivers/crypto/ccp/ccp_crypto.c\nindex 410e8bf..cb63bc6 100644\n--- a/drivers/crypto/ccp/ccp_crypto.c\n+++ b/drivers/crypto/ccp/ccp_crypto.c\n@@ -89,6 +89,74 @@ uint64_t ccp_sha512_init[SHA512_DIGEST_SIZE / sizeof(uint64_t)] = {\n \tSHA512_H1, SHA512_H0,\n };\n \n+#if defined(_MSC_VER)\n+#define SHA3_CONST(x) x\n+#else\n+#define SHA3_CONST(x) x##L\n+#endif\n+\n+/** 'Words' here refers to uint64_t */\n+#define SHA3_KECCAK_SPONGE_WORDS \\\n+\t(((1600) / 8) / sizeof(uint64_t))\n+typedef struct sha3_context_ {\n+\tuint64_t saved;\n+\t/**\n+\t * The portion of the input message that we\n+\t * didn't consume yet\n+\t */\n+\tunion {\n+\t\tuint64_t s[SHA3_KECCAK_SPONGE_WORDS];\n+\t\t/* Keccak's state */\n+\t\tuint8_t sb[SHA3_KECCAK_SPONGE_WORDS * 8];\n+\t\t/**total 200 ctx size**/\n+\t};\n+\tunsigned int byteIndex;\n+\t/**\n+\t * 0..7--the next byte after the set one\n+\t * (starts from 0; 0--none are buffered)\n+\t */\n+\tunsigned int wordIndex;\n+\t/**\n+\t * 0..24--the next word to integrate input\n+\t * (starts from 0)\n+\t */\n+\tunsigned int capacityWords;\n+\t/**\n+\t * the double size of the hash output in\n+\t * words (e.g. 16 for Keccak 512)\n+\t */\n+} sha3_context;\n+\n+#ifndef SHA3_ROTL64\n+#define SHA3_ROTL64(x, y) \\\n+\t(((x) << (y)) | ((x) >> ((sizeof(uint64_t)*8) - (y))))\n+#endif\n+\n+static const uint64_t keccakf_rndc[24] = {\n+\tSHA3_CONST(0x0000000000000001UL), SHA3_CONST(0x0000000000008082UL),\n+\tSHA3_CONST(0x800000000000808aUL), SHA3_CONST(0x8000000080008000UL),\n+\tSHA3_CONST(0x000000000000808bUL), SHA3_CONST(0x0000000080000001UL),\n+\tSHA3_CONST(0x8000000080008081UL), SHA3_CONST(0x8000000000008009UL),\n+\tSHA3_CONST(0x000000000000008aUL), SHA3_CONST(0x0000000000000088UL),\n+\tSHA3_CONST(0x0000000080008009UL), SHA3_CONST(0x000000008000000aUL),\n+\tSHA3_CONST(0x000000008000808bUL), SHA3_CONST(0x800000000000008bUL),\n+\tSHA3_CONST(0x8000000000008089UL), SHA3_CONST(0x8000000000008003UL),\n+\tSHA3_CONST(0x8000000000008002UL), SHA3_CONST(0x8000000000000080UL),\n+\tSHA3_CONST(0x000000000000800aUL), SHA3_CONST(0x800000008000000aUL),\n+\tSHA3_CONST(0x8000000080008081UL), SHA3_CONST(0x8000000000008080UL),\n+\tSHA3_CONST(0x0000000080000001UL), SHA3_CONST(0x8000000080008008UL)\n+};\n+\n+static const unsigned int keccakf_rotc[24] = {\n+\t1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, 27, 41, 56, 8, 25, 43, 62,\n+\t18, 39, 61, 20, 44\n+};\n+\n+static const unsigned int keccakf_piln[24] = {\n+\t10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, 15, 23, 19, 13, 12, 2, 20,\n+\t14, 22, 9, 6, 1\n+};\n+\n static enum ccp_cmd_order\n ccp_get_cmd_id(const struct rte_crypto_sym_xform *xform)\n {\n@@ -173,6 +241,223 @@ static int partial_hash_sha512(uint8_t *data_in, uint8_t *data_out)\n \treturn 0;\n }\n \n+static void\n+keccakf(uint64_t s[25])\n+{\n+\tint i, j, round;\n+\tuint64_t t, bc[5];\n+#define KECCAK_ROUNDS 24\n+\n+\tfor (round = 0; round < KECCAK_ROUNDS; round++) {\n+\n+\t\t/* Theta */\n+\t\tfor (i = 0; i < 5; i++)\n+\t\t\tbc[i] = s[i] ^ s[i + 5] ^ s[i + 10] ^ s[i + 15] ^\n+\t\t\t\ts[i + 20];\n+\n+\t\tfor (i = 0; i < 5; i++) {\n+\t\t\tt = bc[(i + 4) % 5] ^ SHA3_ROTL64(bc[(i + 1) % 5], 1);\n+\t\t\tfor (j = 0; j < 25; j += 5)\n+\t\t\t\ts[j + i] ^= t;\n+\t\t}\n+\n+\t\t/* Rho Pi */\n+\t\tt = s[1];\n+\t\tfor (i = 0; i < 24; i++) {\n+\t\t\tj = keccakf_piln[i];\n+\t\t\tbc[0] = s[j];\n+\t\t\ts[j] = SHA3_ROTL64(t, keccakf_rotc[i]);\n+\t\t\tt = bc[0];\n+\t\t}\n+\n+\t\t/* Chi */\n+\t\tfor (j = 0; j < 25; j += 5) {\n+\t\t\tfor (i = 0; i < 5; i++)\n+\t\t\t\tbc[i] = s[j + i];\n+\t\t\tfor (i = 0; i < 5; i++)\n+\t\t\t\ts[j + i] ^= (~bc[(i + 1) % 5]) &\n+\t\t\t\t\t    bc[(i + 2) % 5];\n+\t\t}\n+\n+\t\t/* Iota */\n+\t\ts[0] ^= keccakf_rndc[round];\n+\t}\n+}\n+\n+static void\n+sha3_Init224(void *priv)\n+{\n+\tsha3_context *ctx = (sha3_context *) priv;\n+\n+\tmemset(ctx, 0, sizeof(*ctx));\n+\tctx->capacityWords = 2 * 224 / (8 * sizeof(uint64_t));\n+}\n+\n+static void\n+sha3_Init256(void *priv)\n+{\n+\tsha3_context *ctx = (sha3_context *) priv;\n+\n+\tmemset(ctx, 0, sizeof(*ctx));\n+\tctx->capacityWords = 2 * 256 / (8 * sizeof(uint64_t));\n+}\n+\n+static void\n+sha3_Init384(void *priv)\n+{\n+\tsha3_context *ctx = (sha3_context *) priv;\n+\n+\tmemset(ctx, 0, sizeof(*ctx));\n+\tctx->capacityWords = 2 * 384 / (8 * sizeof(uint64_t));\n+}\n+\n+static void\n+sha3_Init512(void *priv)\n+{\n+\tsha3_context *ctx = (sha3_context *) priv;\n+\n+\tmemset(ctx, 0, sizeof(*ctx));\n+\tctx->capacityWords = 2 * 512 / (8 * sizeof(uint64_t));\n+}\n+\n+\n+/* This is simply the 'update' with the padding block.\n+ * The padding block is 0x01 || 0x00* || 0x80. First 0x01 and last 0x80\n+ * bytes are always present, but they can be the same byte.\n+ */\n+static void\n+sha3_Update(void *priv, void const *bufIn, size_t len)\n+{\n+\tsha3_context *ctx = (sha3_context *) priv;\n+\tunsigned int old_tail = (8 - ctx->byteIndex) & 7;\n+\tsize_t words;\n+\tunsigned int tail;\n+\tsize_t i;\n+\tconst uint8_t *buf = bufIn;\n+\n+\tif (len < old_tail) {\n+\t\twhile (len--)\n+\t\t\tctx->saved |= (uint64_t) (*(buf++)) <<\n+\t\t\t\t      ((ctx->byteIndex++) * 8);\n+\t\treturn;\n+\t}\n+\n+\tif (old_tail) {\n+\t\tlen -= old_tail;\n+\t\twhile (old_tail--)\n+\t\t\tctx->saved |= (uint64_t) (*(buf++)) <<\n+\t\t\t\t      ((ctx->byteIndex++) * 8);\n+\n+\t\tctx->s[ctx->wordIndex] ^= ctx->saved;\n+\t\tctx->byteIndex = 0;\n+\t\tctx->saved = 0;\n+\t\tif (++ctx->wordIndex ==\n+\t\t   (SHA3_KECCAK_SPONGE_WORDS - ctx->capacityWords)) {\n+\t\t\tkeccakf(ctx->s);\n+\t\t\tctx->wordIndex = 0;\n+\t\t}\n+\t}\n+\n+\twords = len / sizeof(uint64_t);\n+\ttail = len - words * sizeof(uint64_t);\n+\n+\tfor (i = 0; i < words; i++, buf += sizeof(uint64_t)) {\n+\t\tconst uint64_t t = (uint64_t) (buf[0]) |\n+\t\t\t((uint64_t) (buf[1]) << 8 * 1) |\n+\t\t\t((uint64_t) (buf[2]) << 8 * 2) |\n+\t\t\t((uint64_t) (buf[3]) << 8 * 3) |\n+\t\t\t((uint64_t) (buf[4]) << 8 * 4) |\n+\t\t\t((uint64_t) (buf[5]) << 8 * 5) |\n+\t\t\t((uint64_t) (buf[6]) << 8 * 6) |\n+\t\t\t((uint64_t) (buf[7]) << 8 * 7);\n+\t\tctx->s[ctx->wordIndex] ^= t;\n+\t\tif (++ctx->wordIndex ==\n+\t\t   (SHA3_KECCAK_SPONGE_WORDS - ctx->capacityWords)) {\n+\t\t\tkeccakf(ctx->s);\n+\t\t\tctx->wordIndex = 0;\n+\t\t}\n+\t}\n+\n+\twhile (tail--)\n+\t\tctx->saved |= (uint64_t) (*(buf++)) << ((ctx->byteIndex++) * 8);\n+}\n+\n+int partial_hash_sha3_224(uint8_t *data_in, uint8_t *data_out)\n+{\n+\tsha3_context *ctx;\n+\tint i;\n+\n+\tctx = rte_zmalloc(\"sha3-ctx\", sizeof(sha3_context), 0);\n+\tif (!ctx) {\n+\t\tCCP_LOG_ERR(\"sha3-ctx creation failed\");\n+\t\treturn -ENOMEM;\n+\t}\n+\tsha3_Init224(ctx);\n+\tsha3_Update(ctx, data_in, SHA3_224_BLOCK_SIZE);\n+\tfor (i = 0; i < CCP_SHA3_CTX_SIZE; i++, data_out++)\n+\t\t*data_out = ctx->sb[CCP_SHA3_CTX_SIZE - i - 1];\n+\trte_free(ctx);\n+\n+\treturn 0;\n+}\n+\n+int partial_hash_sha3_256(uint8_t *data_in, uint8_t *data_out)\n+{\n+\tsha3_context *ctx;\n+\tint i;\n+\n+\tctx = rte_zmalloc(\"sha3-ctx\", sizeof(sha3_context), 0);\n+\tif (!ctx) {\n+\t\tCCP_LOG_ERR(\"sha3-ctx creation failed\");\n+\t\treturn -ENOMEM;\n+\t}\n+\tsha3_Init256(ctx);\n+\tsha3_Update(ctx, data_in, SHA3_256_BLOCK_SIZE);\n+\tfor (i = 0; i < CCP_SHA3_CTX_SIZE; i++, data_out++)\n+\t\t*data_out = ctx->sb[CCP_SHA3_CTX_SIZE - i - 1];\n+\trte_free(ctx);\n+\n+\treturn 0;\n+}\n+\n+int partial_hash_sha3_384(uint8_t *data_in, uint8_t *data_out)\n+{\n+\tsha3_context *ctx;\n+\tint i;\n+\n+\tctx = rte_zmalloc(\"sha3-ctx\", sizeof(sha3_context), 0);\n+\tif (!ctx) {\n+\t\tCCP_LOG_ERR(\"sha3-ctx creation failed\");\n+\t\treturn -ENOMEM;\n+\t}\n+\tsha3_Init384(ctx);\n+\tsha3_Update(ctx, data_in, SHA3_384_BLOCK_SIZE);\n+\tfor (i = 0; i < CCP_SHA3_CTX_SIZE; i++, data_out++)\n+\t\t*data_out = ctx->sb[CCP_SHA3_CTX_SIZE - i - 1];\n+\trte_free(ctx);\n+\n+\treturn 0;\n+}\n+\n+int partial_hash_sha3_512(uint8_t *data_in, uint8_t *data_out)\n+{\n+\tsha3_context *ctx;\n+\tint i;\n+\n+\tctx = rte_zmalloc(\"sha3-ctx\", sizeof(sha3_context), 0);\n+\tif (!ctx) {\n+\t\tCCP_LOG_ERR(\"sha3-ctx creation failed\");\n+\t\treturn -ENOMEM;\n+\t}\n+\tsha3_Init512(ctx);\n+\tsha3_Update(ctx, data_in, SHA3_512_BLOCK_SIZE);\n+\tfor (i = 0; i < CCP_SHA3_CTX_SIZE; i++, data_out++)\n+\t\t*data_out = ctx->sb[CCP_SHA3_CTX_SIZE - i - 1];\n+\trte_free(ctx);\n+\n+\treturn 0;\n+}\n+\n static int generate_partial_hash(struct ccp_session *sess)\n {\n \n@@ -182,6 +467,7 @@ static int generate_partial_hash(struct ccp_session *sess)\n \tuint32_t *hash_value_be32, hash_temp32[8];\n \tuint64_t *hash_value_be64, hash_temp64[8];\n \tint i, count;\n+\tuint8_t *hash_value_sha3;\n \n \topad_t = ipad_t = (uint8_t *)sess->auth.key;\n \n@@ -225,6 +511,16 @@ static int generate_partial_hash(struct ccp_session *sess)\n \t\tfor (i = 0; i < count; i++, hash_value_be32++)\n \t\t\t*hash_value_be32 = hash_temp32[count - 1 - i];\n \t\treturn 0;\n+\tcase CCP_AUTH_ALGO_SHA3_224_HMAC:\n+\t\thash_value_sha3 = sess->auth.pre_compute;\n+\t\tif (partial_hash_sha3_224(ipad, hash_value_sha3))\n+\t\t\treturn -1;\n+\n+\t\thash_value_sha3 = (uint8_t *)(sess->auth.pre_compute\n+\t\t\t\t\t       + sess->auth.ctx_len);\n+\t\tif (partial_hash_sha3_224(opad, hash_value_sha3))\n+\t\t\treturn -1;\n+\t\treturn 0;\n \tcase CCP_AUTH_ALGO_SHA256_HMAC:\n \t\tcount = SHA256_DIGEST_SIZE >> 2;\n \n@@ -240,6 +536,16 @@ static int generate_partial_hash(struct ccp_session *sess)\n \t\tfor (i = 0; i < count; i++, hash_value_be32++)\n \t\t\t*hash_value_be32 = hash_temp32[count - 1 - i];\n \t\treturn 0;\n+\tcase CCP_AUTH_ALGO_SHA3_256_HMAC:\n+\t\thash_value_sha3 = sess->auth.pre_compute;\n+\t\tif (partial_hash_sha3_256(ipad, hash_value_sha3))\n+\t\t\treturn -1;\n+\n+\t\thash_value_sha3 = (uint8_t *)(sess->auth.pre_compute\n+\t\t\t\t\t      + sess->auth.ctx_len);\n+\t\tif (partial_hash_sha3_256(opad, hash_value_sha3))\n+\t\t\treturn -1;\n+\t\treturn 0;\n \tcase CCP_AUTH_ALGO_SHA384_HMAC:\n \t\tcount = SHA512_DIGEST_SIZE >> 3;\n \n@@ -255,6 +561,16 @@ static int generate_partial_hash(struct ccp_session *sess)\n \t\tfor (i = 0; i < count; i++, hash_value_be64++)\n \t\t\t*hash_value_be64 = hash_temp64[count - 1 - i];\n \t\treturn 0;\n+\tcase CCP_AUTH_ALGO_SHA3_384_HMAC:\n+\t\thash_value_sha3 = sess->auth.pre_compute;\n+\t\tif (partial_hash_sha3_384(ipad, hash_value_sha3))\n+\t\t\treturn -1;\n+\n+\t\thash_value_sha3 = (uint8_t *)(sess->auth.pre_compute\n+\t\t\t\t\t      + sess->auth.ctx_len);\n+\t\tif (partial_hash_sha3_384(opad, hash_value_sha3))\n+\t\t\treturn -1;\n+\t\treturn 0;\n \tcase CCP_AUTH_ALGO_SHA512_HMAC:\n \t\tcount = SHA512_DIGEST_SIZE >> 3;\n \n@@ -270,6 +586,16 @@ static int generate_partial_hash(struct ccp_session *sess)\n \t\tfor (i = 0; i < count; i++, hash_value_be64++)\n \t\t\t*hash_value_be64 = hash_temp64[count - 1 - i];\n \t\treturn 0;\n+\tcase CCP_AUTH_ALGO_SHA3_512_HMAC:\n+\t\thash_value_sha3 = sess->auth.pre_compute;\n+\t\tif (partial_hash_sha3_512(ipad, hash_value_sha3))\n+\t\t\treturn -1;\n+\n+\t\thash_value_sha3 = (uint8_t *)(sess->auth.pre_compute\n+\t\t\t\t\t      + sess->auth.ctx_len);\n+\t\tif (partial_hash_sha3_512(opad, hash_value_sha3))\n+\t\t\treturn -1;\n+\t\treturn 0;\n \tdefault:\n \t\tCCP_LOG_ERR(\"Invalid auth algo\");\n \t\treturn -1;\n@@ -510,6 +836,30 @@ ccp_configure_session_auth(struct ccp_session *sess,\n \t\tif (generate_partial_hash(sess))\n \t\t\treturn -1;\n \t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_SHA3_224:\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA3_224;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.ut.sha_type = CCP_SHA3_TYPE_224;\n+\t\tsess->auth.ctx_len = CCP_SHA3_CTX_SIZE;\n+\t\tsess->auth.offset = CCP_SHA3_CTX_SIZE - SHA224_DIGEST_SIZE;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_SHA3_224_HMAC:\n+\t\tif (auth_xform->key.length > SHA3_224_BLOCK_SIZE)\n+\t\t\treturn -1;\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA3_224_HMAC;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.ut.sha_type = CCP_SHA3_TYPE_224;\n+\t\tsess->auth.ctx_len = CCP_SHA3_CTX_SIZE;\n+\t\tsess->auth.offset = CCP_SHA3_CTX_SIZE - SHA224_DIGEST_SIZE;\n+\t\tsess->auth.block_size = SHA3_224_BLOCK_SIZE;\n+\t\tsess->auth.key_length = auth_xform->key.length;\n+\t\tmemset(sess->auth.key, 0, sess->auth.block_size);\n+\t\tmemset(sess->auth.pre_compute, 0, 2 * sess->auth.ctx_len);\n+\t\trte_memcpy(sess->auth.key, auth_xform->key.data,\n+\t\t\t   auth_xform->key.length);\n+\t\tif (generate_partial_hash(sess))\n+\t\t\treturn -1;\n+\t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA256:\n \t\tsess->auth.algo = CCP_AUTH_ALGO_SHA256;\n \t\tsess->auth.engine = CCP_ENGINE_SHA;\n@@ -535,6 +885,30 @@ ccp_configure_session_auth(struct ccp_session *sess,\n \t\tif (generate_partial_hash(sess))\n \t\t\treturn -1;\n \t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_SHA3_256:\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA3_256;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.ut.sha_type = CCP_SHA3_TYPE_256;\n+\t\tsess->auth.ctx_len = CCP_SHA3_CTX_SIZE;\n+\t\tsess->auth.offset = CCP_SHA3_CTX_SIZE - SHA256_DIGEST_SIZE;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_SHA3_256_HMAC:\n+\t\tif (auth_xform->key.length > SHA3_256_BLOCK_SIZE)\n+\t\t\treturn -1;\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA3_256_HMAC;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.ut.sha_type = CCP_SHA3_TYPE_256;\n+\t\tsess->auth.ctx_len = CCP_SHA3_CTX_SIZE;\n+\t\tsess->auth.offset = CCP_SHA3_CTX_SIZE - SHA256_DIGEST_SIZE;\n+\t\tsess->auth.block_size = SHA3_256_BLOCK_SIZE;\n+\t\tsess->auth.key_length = auth_xform->key.length;\n+\t\tmemset(sess->auth.key, 0, sess->auth.block_size);\n+\t\tmemset(sess->auth.pre_compute, 0, 2 * sess->auth.ctx_len);\n+\t\trte_memcpy(sess->auth.key, auth_xform->key.data,\n+\t\t\t   auth_xform->key.length);\n+\t\tif (generate_partial_hash(sess))\n+\t\t\treturn -1;\n+\t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA384:\n \t\tsess->auth.algo = CCP_AUTH_ALGO_SHA384;\n \t\tsess->auth.engine = CCP_ENGINE_SHA;\n@@ -560,6 +934,30 @@ ccp_configure_session_auth(struct ccp_session *sess,\n \t\tif (generate_partial_hash(sess))\n \t\t\treturn -1;\n \t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_SHA3_384:\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA3_384;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.ut.sha_type = CCP_SHA3_TYPE_384;\n+\t\tsess->auth.ctx_len = CCP_SHA3_CTX_SIZE;\n+\t\tsess->auth.offset = CCP_SHA3_CTX_SIZE - SHA384_DIGEST_SIZE;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_SHA3_384_HMAC:\n+\t\tif (auth_xform->key.length > SHA3_384_BLOCK_SIZE)\n+\t\t\treturn -1;\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA3_384_HMAC;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.ut.sha_type = CCP_SHA3_TYPE_384;\n+\t\tsess->auth.ctx_len = CCP_SHA3_CTX_SIZE;\n+\t\tsess->auth.offset = CCP_SHA3_CTX_SIZE - SHA384_DIGEST_SIZE;\n+\t\tsess->auth.block_size = SHA3_384_BLOCK_SIZE;\n+\t\tsess->auth.key_length = auth_xform->key.length;\n+\t\tmemset(sess->auth.key, 0, sess->auth.block_size);\n+\t\tmemset(sess->auth.pre_compute, 0, 2 * sess->auth.ctx_len);\n+\t\trte_memcpy(sess->auth.key, auth_xform->key.data,\n+\t\t\t   auth_xform->key.length);\n+\t\tif (generate_partial_hash(sess))\n+\t\t\treturn -1;\n+\t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA512:\n \t\tsess->auth.algo = CCP_AUTH_ALGO_SHA512;\n \t\tsess->auth.engine = CCP_ENGINE_SHA;\n@@ -585,7 +983,30 @@ ccp_configure_session_auth(struct ccp_session *sess,\n \t\tif (generate_partial_hash(sess))\n \t\t\treturn -1;\n \t\tbreak;\n-\n+\tcase RTE_CRYPTO_AUTH_SHA3_512:\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA3_512;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.ut.sha_type = CCP_SHA3_TYPE_512;\n+\t\tsess->auth.ctx_len = CCP_SHA3_CTX_SIZE;\n+\t\tsess->auth.offset = CCP_SHA3_CTX_SIZE - SHA512_DIGEST_SIZE;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_SHA3_512_HMAC:\n+\t\tif (auth_xform->key.length > SHA3_512_BLOCK_SIZE)\n+\t\t\treturn -1;\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA3_512_HMAC;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.ut.sha_type = CCP_SHA3_TYPE_512;\n+\t\tsess->auth.ctx_len = CCP_SHA3_CTX_SIZE;\n+\t\tsess->auth.offset = CCP_SHA3_CTX_SIZE - SHA512_DIGEST_SIZE;\n+\t\tsess->auth.block_size = SHA3_512_BLOCK_SIZE;\n+\t\tsess->auth.key_length = auth_xform->key.length;\n+\t\tmemset(sess->auth.key, 0, sess->auth.block_size);\n+\t\tmemset(sess->auth.pre_compute, 0, 2 * sess->auth.ctx_len);\n+\t\trte_memcpy(sess->auth.key, auth_xform->key.data,\n+\t\t\t   auth_xform->key.length);\n+\t\tif (generate_partial_hash(sess))\n+\t\t\treturn -1;\n+\t\tbreak;\n \tcase RTE_CRYPTO_AUTH_AES_CMAC:\n \t\tsess->auth.algo = CCP_AUTH_ALGO_AES_CMAC;\n \t\tsess->auth.engine = CCP_ENGINE_AES;\n@@ -806,6 +1227,26 @@ ccp_auth_slot(struct ccp_session *session)\n \t\t * 6. Retrieve HMAC output from LSB to host memory\n \t\t */\n \t\tbreak;\n+\tcase CCP_AUTH_ALGO_SHA3_224:\n+\tcase CCP_AUTH_ALGO_SHA3_256:\n+\tcase CCP_AUTH_ALGO_SHA3_384:\n+\tcase CCP_AUTH_ALGO_SHA3_512:\n+\t\tcount = 1;\n+\t\t/**< only op ctx and dst in host memory*/\n+\t\tbreak;\n+\tcase CCP_AUTH_ALGO_SHA3_224_HMAC:\n+\tcase CCP_AUTH_ALGO_SHA3_256_HMAC:\n+\t\tcount = 3;\n+\t\tbreak;\n+\tcase CCP_AUTH_ALGO_SHA3_384_HMAC:\n+\tcase CCP_AUTH_ALGO_SHA3_512_HMAC:\n+\t\tcount = 4;\n+\t\t/**\n+\t\t * 1. Op to Perform Ihash\n+\t\t * 2. Retrieve result from LSB to host memory\n+\t\t * 3. Perform final hash\n+\t\t */\n+\t\tbreak;\n \tcase CCP_AUTH_ALGO_AES_CMAC:\n \t\tcount = 4;\n \t\t/**\n@@ -1196,6 +1637,213 @@ ccp_perform_sha(struct rte_crypto_op *op,\n }\n \n static int\n+ccp_perform_sha3_hmac(struct rte_crypto_op *op,\n+\t\t      struct ccp_queue *cmd_q)\n+{\n+\tstruct ccp_session *session;\n+\tstruct ccp_passthru pst;\n+\tunion ccp_function function;\n+\tstruct ccp_desc *desc;\n+\tuint8_t *append_ptr;\n+\tuint32_t tail;\n+\tphys_addr_t src_addr, dest_addr, ctx_paddr, dest_addr_t;\n+\n+\tsession = (struct ccp_session *)get_session_private_data(\n+\t\t\t\t\t op->sym->session,\n+\t\t\t\t\tccp_cryptodev_driver_id);\n+\n+\tsrc_addr = rte_pktmbuf_mtophys_offset(op->sym->m_src,\n+\t\t\t\t\t      op->sym->auth.data.offset);\n+\tappend_ptr = (uint8_t *)rte_pktmbuf_append(op->sym->m_src,\n+\t\t\t\t\t\tsession->auth.ctx_len);\n+\tif (!append_ptr) {\n+\t\tCCP_LOG_ERR(\"CCP MBUF append failed\\n\");\n+\t\treturn -1;\n+\t}\n+\tdest_addr = (phys_addr_t)rte_mem_virt2phy((void *)append_ptr);\n+\tdest_addr_t = dest_addr + (session->auth.ctx_len / 2);\n+\tctx_paddr = (phys_addr_t)rte_mem_virt2phy((void\n+\t\t\t\t\t\t   *)session->auth.pre_compute);\n+\tdesc = &cmd_q->qbase_desc[cmd_q->qidx];\n+\tmemset(desc, 0, Q_DESC_SIZE);\n+\n+\t/*desc1 for SHA3-Ihash operation */\n+\tCCP_CMD_ENGINE(desc) = CCP_ENGINE_SHA;\n+\tCCP_CMD_INIT(desc) = 1;\n+\tCCP_CMD_EOM(desc) = 1;\n+\n+\tfunction.raw = 0;\n+\tCCP_SHA_TYPE(&function) = session->auth.ut.sha_type;\n+\tCCP_CMD_FUNCTION(desc) = function.raw;\n+\tCCP_CMD_LEN(desc) = op->sym->auth.data.length;\n+\n+\tCCP_CMD_SRC_LO(desc) = ((uint32_t)src_addr);\n+\tCCP_CMD_SRC_HI(desc) = high32_value(src_addr);\n+\tCCP_CMD_SRC_MEM(desc) = CCP_MEMTYPE_SYSTEM;\n+\n+\tCCP_CMD_DST_LO(desc) = (cmd_q->sb_sha * CCP_SB_BYTES);\n+\tCCP_CMD_DST_HI(desc) = 0;\n+\tCCP_CMD_DST_MEM(desc) = CCP_MEMTYPE_SB;\n+\n+\tCCP_CMD_KEY_LO(desc) = ((uint32_t)ctx_paddr);\n+\tCCP_CMD_KEY_HI(desc) = high32_value(ctx_paddr);\n+\tCCP_CMD_KEY_MEM(desc) = CCP_MEMTYPE_SYSTEM;\n+\n+\tcmd_q->qidx = (cmd_q->qidx + 1) % COMMANDS_PER_QUEUE;\n+\n+\trte_wmb();\n+\ttail = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx * Q_DESC_SIZE);\n+\tCCP_WRITE_REG(cmd_q->reg_base, CMD_Q_TAIL_LO_BASE, tail);\n+\tCCP_WRITE_REG(cmd_q->reg_base, CMD_Q_CONTROL_BASE,\n+\t\t      cmd_q->qcontrol | CMD_Q_RUN);\n+\n+\t/* Intermediate Hash value retrieve */\n+\tif ((session->auth.ut.sha_type == CCP_SHA3_TYPE_384) ||\n+\t    (session->auth.ut.sha_type == CCP_SHA3_TYPE_512)) {\n+\n+\t\tpst.src_addr =\n+\t\t\t(phys_addr_t)((cmd_q->sb_sha + 1) * CCP_SB_BYTES);\n+\t\tpst.dest_addr = dest_addr_t;\n+\t\tpst.len = CCP_SB_BYTES;\n+\t\tpst.dir = 0;\n+\t\tpst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP;\n+\t\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_256BIT;\n+\t\tccp_perform_passthru(&pst, cmd_q);\n+\n+\t\tpst.src_addr = (phys_addr_t)(cmd_q->sb_sha * CCP_SB_BYTES);\n+\t\tpst.dest_addr = dest_addr_t + CCP_SB_BYTES;\n+\t\tpst.len = CCP_SB_BYTES;\n+\t\tpst.dir = 0;\n+\t\tpst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP;\n+\t\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_256BIT;\n+\t\tccp_perform_passthru(&pst, cmd_q);\n+\n+\t} else {\n+\t\tpst.src_addr = (phys_addr_t)(cmd_q->sb_sha * CCP_SB_BYTES);\n+\t\tpst.dest_addr = dest_addr_t;\n+\t\tpst.len = CCP_SB_BYTES;\n+\t\tpst.dir = 0;\n+\t\tpst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP;\n+\t\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_256BIT;\n+\t\tccp_perform_passthru(&pst, cmd_q);\n+\t}\n+\n+\t/**sha engine command descriptor for FinalHash*/\n+\tctx_paddr += CCP_SHA3_CTX_SIZE;\n+\tdesc = &cmd_q->qbase_desc[cmd_q->qidx];\n+\tmemset(desc, 0, Q_DESC_SIZE);\n+\n+\tCCP_CMD_ENGINE(desc) = CCP_ENGINE_SHA;\n+\tCCP_CMD_INIT(desc) = 1;\n+\tCCP_CMD_EOM(desc) = 1;\n+\n+\tfunction.raw = 0;\n+\tCCP_SHA_TYPE(&function) = session->auth.ut.sha_type;\n+\tCCP_CMD_FUNCTION(desc) = function.raw;\n+\n+\tif (session->auth.ut.sha_type == CCP_SHA3_TYPE_224) {\n+\t\tdest_addr_t += (CCP_SB_BYTES - SHA224_DIGEST_SIZE);\n+\t\tCCP_CMD_LEN(desc) = SHA224_DIGEST_SIZE;\n+\t} else if (session->auth.ut.sha_type == CCP_SHA3_TYPE_256) {\n+\t\tCCP_CMD_LEN(desc) = SHA256_DIGEST_SIZE;\n+\t} else if (session->auth.ut.sha_type == CCP_SHA3_TYPE_384) {\n+\t\tdest_addr_t += (2 * CCP_SB_BYTES - SHA384_DIGEST_SIZE);\n+\t\tCCP_CMD_LEN(desc) = SHA384_DIGEST_SIZE;\n+\t} else {\n+\t\tCCP_CMD_LEN(desc) = SHA512_DIGEST_SIZE;\n+\t}\n+\n+\tCCP_CMD_SRC_LO(desc) = ((uint32_t)dest_addr_t);\n+\tCCP_CMD_SRC_HI(desc) = high32_value(dest_addr_t);\n+\tCCP_CMD_SRC_MEM(desc) = CCP_MEMTYPE_SYSTEM;\n+\n+\tCCP_CMD_DST_LO(desc) = (uint32_t)dest_addr;\n+\tCCP_CMD_DST_HI(desc) = high32_value(dest_addr);\n+\tCCP_CMD_DST_MEM(desc) = CCP_MEMTYPE_SYSTEM;\n+\n+\tCCP_CMD_KEY_LO(desc) = ((uint32_t)ctx_paddr);\n+\tCCP_CMD_KEY_HI(desc) = high32_value(ctx_paddr);\n+\tCCP_CMD_KEY_MEM(desc) = CCP_MEMTYPE_SYSTEM;\n+\n+\tcmd_q->qidx = (cmd_q->qidx + 1) % COMMANDS_PER_QUEUE;\n+\n+\trte_wmb();\n+\ttail = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx * Q_DESC_SIZE);\n+\tCCP_WRITE_REG(cmd_q->reg_base, CMD_Q_TAIL_LO_BASE, tail);\n+\tCCP_WRITE_REG(cmd_q->reg_base, CMD_Q_CONTROL_BASE,\n+\t\t      cmd_q->qcontrol | CMD_Q_RUN);\n+\n+\top->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;\n+\treturn 0;\n+}\n+\n+static int\n+ccp_perform_sha3(struct rte_crypto_op *op,\n+\t\t struct ccp_queue *cmd_q)\n+{\n+\tstruct ccp_session *session;\n+\tunion ccp_function function;\n+\tstruct ccp_desc *desc;\n+\tuint8_t *ctx_addr, *append_ptr;\n+\tuint32_t tail;\n+\tphys_addr_t src_addr, dest_addr, ctx_paddr;\n+\n+\tsession = (struct ccp_session *)get_session_private_data(\n+\t\t\t\t\t op->sym->session,\n+\t\t\t\t\tccp_cryptodev_driver_id);\n+\n+\tsrc_addr = rte_pktmbuf_mtophys_offset(op->sym->m_src,\n+\t\t\t\t\t      op->sym->auth.data.offset);\n+\tappend_ptr = (uint8_t *)rte_pktmbuf_append(op->sym->m_src,\n+\t\t\t\t\t\tsession->auth.ctx_len);\n+\tif (!append_ptr) {\n+\t\tCCP_LOG_ERR(\"CCP MBUF append failed\\n\");\n+\t\treturn -1;\n+\t}\n+\tdest_addr = (phys_addr_t)rte_mem_virt2phy((void *)append_ptr);\n+\tctx_addr = session->auth.sha3_ctx;\n+\tctx_paddr = (phys_addr_t)rte_mem_virt2phy((void *)ctx_addr);\n+\n+\tdesc = &cmd_q->qbase_desc[cmd_q->qidx];\n+\tmemset(desc, 0, Q_DESC_SIZE);\n+\n+\t/* prepare desc for SHA3 operation */\n+\tCCP_CMD_ENGINE(desc) = CCP_ENGINE_SHA;\n+\tCCP_CMD_INIT(desc) = 1;\n+\tCCP_CMD_EOM(desc) = 1;\n+\n+\tfunction.raw = 0;\n+\tCCP_SHA_TYPE(&function) = session->auth.ut.sha_type;\n+\tCCP_CMD_FUNCTION(desc) = function.raw;\n+\n+\tCCP_CMD_LEN(desc) = op->sym->auth.data.length;\n+\n+\tCCP_CMD_SRC_LO(desc) = ((uint32_t)src_addr);\n+\tCCP_CMD_SRC_HI(desc) = high32_value(src_addr);\n+\tCCP_CMD_SRC_MEM(desc) = CCP_MEMTYPE_SYSTEM;\n+\n+\tCCP_CMD_DST_LO(desc) = ((uint32_t)dest_addr);\n+\tCCP_CMD_DST_HI(desc) = high32_value(dest_addr);\n+\tCCP_CMD_DST_MEM(desc) = CCP_MEMTYPE_SYSTEM;\n+\n+\tCCP_CMD_KEY_LO(desc) = ((uint32_t)ctx_paddr);\n+\tCCP_CMD_KEY_HI(desc) = high32_value(ctx_paddr);\n+\tCCP_CMD_KEY_MEM(desc) = CCP_MEMTYPE_SYSTEM;\n+\n+\tcmd_q->qidx = (cmd_q->qidx + 1) % COMMANDS_PER_QUEUE;\n+\n+\trte_wmb();\n+\n+\ttail = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx * Q_DESC_SIZE);\n+\tCCP_WRITE_REG(cmd_q->reg_base, CMD_Q_TAIL_LO_BASE, tail);\n+\tCCP_WRITE_REG(cmd_q->reg_base, CMD_Q_CONTROL_BASE,\n+\t\t      cmd_q->qcontrol | CMD_Q_RUN);\n+\n+\top->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;\n+\treturn 0;\n+}\n+\n+static int\n ccp_perform_aes_cmac(struct rte_crypto_op *op,\n \t\t     struct ccp_queue *cmd_q)\n {\n@@ -1780,6 +2428,23 @@ ccp_crypto_auth(struct rte_crypto_op *op,\n \t\tresult = ccp_perform_hmac(op, cmd_q);\n \t\tb_info->desccnt += 7;\n \t\tbreak;\n+\tcase CCP_AUTH_ALGO_SHA3_224:\n+\tcase CCP_AUTH_ALGO_SHA3_256:\n+\tcase CCP_AUTH_ALGO_SHA3_384:\n+\tcase CCP_AUTH_ALGO_SHA3_512:\n+\t\tresult = ccp_perform_sha3(op, cmd_q);\n+\t\tb_info->desccnt += 1;\n+\t\tbreak;\n+\tcase CCP_AUTH_ALGO_SHA3_224_HMAC:\n+\tcase CCP_AUTH_ALGO_SHA3_256_HMAC:\n+\t\tresult = ccp_perform_sha3_hmac(op, cmd_q);\n+\t\tb_info->desccnt += 3;\n+\t\tbreak;\n+\tcase CCP_AUTH_ALGO_SHA3_384_HMAC:\n+\tcase CCP_AUTH_ALGO_SHA3_512_HMAC:\n+\t\tresult = ccp_perform_sha3_hmac(op, cmd_q);\n+\t\tb_info->desccnt += 4;\n+\t\tbreak;\n \tcase CCP_AUTH_ALGO_AES_CMAC:\n \t\tresult = ccp_perform_aes_cmac(op, cmd_q);\n \t\tb_info->desccnt += 4;\ndiff --git a/drivers/crypto/ccp/ccp_crypto.h b/drivers/crypto/ccp/ccp_crypto.h\nindex ca1c1a8..8459b71 100644\n--- a/drivers/crypto/ccp/ccp_crypto.h\n+++ b/drivers/crypto/ccp/ccp_crypto.h\n@@ -80,15 +80,19 @@\n \n #define SHA224_DIGEST_SIZE      28\n #define SHA224_BLOCK_SIZE       64\n+#define SHA3_224_BLOCK_SIZE     144\n \n #define SHA256_DIGEST_SIZE      32\n #define SHA256_BLOCK_SIZE       64\n+#define SHA3_256_BLOCK_SIZE     136\n \n #define SHA384_DIGEST_SIZE      48\n #define SHA384_BLOCK_SIZE       128\n+#define SHA3_384_BLOCK_SIZE\t104\n \n #define SHA512_DIGEST_SIZE      64\n #define SHA512_BLOCK_SIZE       128\n+#define SHA3_512_BLOCK_SIZE     72\n \n /* SHA LSB intialiazation values */\n \n@@ -386,4 +390,22 @@ int process_ops_to_dequeue(struct ccp_qp *qp,\n \t\t\t   struct rte_crypto_op **op,\n \t\t\t   uint16_t nb_ops);\n \n+\n+/**\n+ * Apis for SHA3 partial hash generation\n+ * @param data_in buffer pointer on which phash is applied\n+ * @param data_out phash result in ccp be format is written\n+ */\n+int partial_hash_sha3_224(uint8_t *data_in,\n+\t\t\t  uint8_t *data_out);\n+\n+int partial_hash_sha3_256(uint8_t *data_in,\n+\t\t\t  uint8_t *data_out);\n+\n+int partial_hash_sha3_384(uint8_t *data_in,\n+\t\t\t  uint8_t *data_out);\n+\n+int partial_hash_sha3_512(uint8_t *data_in,\n+\t\t\t  uint8_t *data_out);\n+\n #endif /* _CCP_CRYPTO_H_ */\ndiff --git a/drivers/crypto/ccp/ccp_pmd_ops.c b/drivers/crypto/ccp/ccp_pmd_ops.c\nindex ab6199f..bb59d15 100644\n--- a/drivers/crypto/ccp/ccp_pmd_ops.c\n+++ b/drivers/crypto/ccp/ccp_pmd_ops.c\n@@ -123,6 +123,48 @@ static const struct rte_cryptodev_capabilities ccp_pmd_capabilities[] = {\n \t\t\t }, }\n \t\t}, }\n \t},\n+\t{\t/* SHA3-224 */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t .algo = RTE_CRYPTO_AUTH_SHA3_224,\n+\t\t\t\t .block_size = 144,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 0,\n+\t\t\t\t\t .max = 0,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .digest_size = {\n+\t\t\t\t\t .min = 28,\n+\t\t\t\t\t .max = 28,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .aad_size = { 0 }\n+\t\t\t }, }\n+\t\t}, }\n+\t},\n+\t{\t/* SHA3-224  HMAC*/\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t .algo = RTE_CRYPTO_AUTH_SHA3_224_HMAC,\n+\t\t\t\t .block_size = 144,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 1,\n+\t\t\t\t\t .max = 144,\n+\t\t\t\t\t .increment = 1\n+\t\t\t\t },\n+\t\t\t\t .digest_size = {\n+\t\t\t\t\t .min = 28,\n+\t\t\t\t\t .max = 28,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .aad_size = { 0 }\n+\t\t\t }, }\n+\t\t}, }\n+\t},\n \t{\t/* SHA256 */\n \t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n \t\t{.sym = {\n@@ -165,6 +207,48 @@ static const struct rte_cryptodev_capabilities ccp_pmd_capabilities[] = {\n \t\t\t }, }\n \t\t}, }\n \t},\n+\t{\t/* SHA3-256 */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t .algo = RTE_CRYPTO_AUTH_SHA3_256,\n+\t\t\t\t .block_size = 136,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 0,\n+\t\t\t\t\t .max = 0,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .digest_size = {\n+\t\t\t\t\t .min = 32,\n+\t\t\t\t\t .max = 32,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .aad_size = { 0 }\n+\t\t\t }, }\n+\t\t}, }\n+\t},\n+\t{\t/* SHA3-256-HMAC */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t .algo = RTE_CRYPTO_AUTH_SHA3_256_HMAC,\n+\t\t\t\t .block_size = 136,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 1,\n+\t\t\t\t\t .max = 136,\n+\t\t\t\t\t .increment = 1\n+\t\t\t\t },\n+\t\t\t\t .digest_size = {\n+\t\t\t\t\t .min = 32,\n+\t\t\t\t\t .max = 32,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .aad_size = { 0 }\n+\t\t\t }, }\n+\t\t}, }\n+\t},\n \t{\t/* SHA384 */\n \t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n \t\t{.sym = {\n@@ -207,6 +291,48 @@ static const struct rte_cryptodev_capabilities ccp_pmd_capabilities[] = {\n \t\t\t }, }\n \t\t}, }\n \t},\n+\t{\t/* SHA3-384 */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t .algo = RTE_CRYPTO_AUTH_SHA3_384,\n+\t\t\t\t .block_size = 104,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 0,\n+\t\t\t\t\t .max = 0,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .digest_size = {\n+\t\t\t\t\t .min = 48,\n+\t\t\t\t\t .max = 48,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .aad_size = { 0 }\n+\t\t\t }, }\n+\t\t}, }\n+\t},\n+\t{\t/* SHA3-384-HMAC */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t .algo = RTE_CRYPTO_AUTH_SHA3_384_HMAC,\n+\t\t\t\t .block_size = 104,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 1,\n+\t\t\t\t\t .max = 104,\n+\t\t\t\t\t .increment = 1\n+\t\t\t\t },\n+\t\t\t\t .digest_size = {\n+\t\t\t\t\t .min = 48,\n+\t\t\t\t\t .max = 48,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .aad_size = { 0 }\n+\t\t\t }, }\n+\t\t}, }\n+\t},\n \t{\t/* SHA512  */\n \t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n \t\t{.sym = {\n@@ -249,6 +375,48 @@ static const struct rte_cryptodev_capabilities ccp_pmd_capabilities[] = {\n \t\t\t }, }\n \t\t}, }\n \t},\n+\t{\t/* SHA3-512  */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t .algo = RTE_CRYPTO_AUTH_SHA3_512,\n+\t\t\t\t .block_size = 72,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 0,\n+\t\t\t\t\t .max = 0,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .digest_size = {\n+\t\t\t\t\t .min = 64,\n+\t\t\t\t\t .max = 64,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .aad_size = { 0 }\n+\t\t\t }, }\n+\t\t}, }\n+\t},\n+\t{\t/* SHA3-512-HMAC  */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t .algo = RTE_CRYPTO_AUTH_SHA3_512_HMAC,\n+\t\t\t\t .block_size = 72,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 1,\n+\t\t\t\t\t .max = 72,\n+\t\t\t\t\t .increment = 1\n+\t\t\t\t },\n+\t\t\t\t .digest_size = {\n+\t\t\t\t\t .min = 64,\n+\t\t\t\t\t .max = 64,\n+\t\t\t\t\t .increment = 0\n+\t\t\t\t },\n+\t\t\t\t .aad_size = { 0 }\n+\t\t\t}, }\n+\t\t}, }\n+\t},\n \t{\t/*AES-CMAC */\n \t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n \t\t{.sym = {\ndiff --git a/lib/librte_cryptodev/rte_crypto_sym.h b/lib/librte_cryptodev/rte_crypto_sym.h\nindex 60797e9..eb5afc5 100644\n--- a/lib/librte_cryptodev/rte_crypto_sym.h\n+++ b/lib/librte_cryptodev/rte_crypto_sym.h\n@@ -245,6 +245,23 @@ enum rte_crypto_auth_algorithm {\n \tRTE_CRYPTO_AUTH_ZUC_EIA3,\n \t/**< ZUC algorithm in EIA3 mode */\n \n+\tRTE_CRYPTO_AUTH_SHA3_224,\n+\t/**< 224 bit SHA3 algorithm. */\n+\tRTE_CRYPTO_AUTH_SHA3_224_HMAC,\n+\t/**< HMAC using 224 bit SHA3 algorithm. */\n+\tRTE_CRYPTO_AUTH_SHA3_256,\n+\t/**< 256 bit SHA3 algorithm. */\n+\tRTE_CRYPTO_AUTH_SHA3_256_HMAC,\n+\t/**< HMAC using 256 bit SHA3 algorithm. */\n+\tRTE_CRYPTO_AUTH_SHA3_384,\n+\t/**< 384 bit SHA3 algorithm. */\n+\tRTE_CRYPTO_AUTH_SHA3_384_HMAC,\n+\t/**< HMAC using 384 bit SHA3 algorithm. */\n+\tRTE_CRYPTO_AUTH_SHA3_512,\n+\t/**< 512 bit SHA3 algorithm. */\n+\tRTE_CRYPTO_AUTH_SHA3_512_HMAC,\n+\t/**< HMAC using 512 bit SHA3 algorithm. */\n+\n \tRTE_CRYPTO_AUTH_LIST_END\n };\n \n",
    "prefixes": [
        "dpdk-dev",
        "v4",
        "16/20"
    ]
}