get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 36259,
    "url": "http://patches.dpdk.org/api/patches/36259/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1521462233-13590-14-git-send-email-Ravi1.kumar@amd.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": "<1521462233-13590-14-git-send-email-Ravi1.kumar@amd.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1521462233-13590-14-git-send-email-Ravi1.kumar@amd.com",
    "date": "2018-03-19T12:23:48",
    "name": "[dpdk-dev,v5,14/19] crypto/ccp: support sha1 authentication algo",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "28d3c340919bc8ed38508685669c43bc47ce1385",
    "submitter": {
        "id": 819,
        "url": "http://patches.dpdk.org/api/people/819/?format=api",
        "name": "Kumar, Ravi1",
        "email": "ravi1.kumar@amd.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/1521462233-13590-14-git-send-email-Ravi1.kumar@amd.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/36259/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/36259/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 366D41AFEB;\n\tMon, 19 Mar 2018 13:24:51 +0100 (CET)",
            "from NAM03-DM3-obe.outbound.protection.outlook.com\n\t(mail-dm3nam03on0071.outbound.protection.outlook.com [104.47.41.71])\n\tby dpdk.org (Postfix) with ESMTP id 048B77D19\n\tfor <dev@dpdk.org>; Mon, 19 Mar 2018 13:24:44 +0100 (CET)",
            "from wallaby-smavila.amd.com (202.56.249.162) by\n\tBN6PR12MB1505.namprd12.prod.outlook.com (10.172.24.146) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.588.14; Mon, 19 Mar 2018 12:24:41 +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=ICAzeIhGz+xJ76vVo+xoaS2DyNGoLS8TdOKSYd+JQgc=;\n\tb=3kFkiNy0R1hmiYfEdc6HXaL82B1LNUyBDlUV4bWZEfQjlnjTerD+NxyJyF1z69EEfuJGhjKvjRij5TVrBBUI14ueW+VMZ88lYNqBpy89avi//3TGUpOBAS5Q440GnlUN25Qsqs2zIW00NGJoo3jbxvZ/6e6UhBDB1ZbPr3fR00o=",
        "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,\n\themant.agrawal@nxp.com",
        "Date": "Mon, 19 Mar 2018 08:23:48 -0400",
        "Message-Id": "<1521462233-13590-14-git-send-email-Ravi1.kumar@amd.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1521462233-13590-1-git-send-email-Ravi1.kumar@amd.com>",
        "References": "<1520584520-130522-1-git-send-email-Ravi1.kumar@amd.com>\n\t<1521462233-13590-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": "MAXPR0101CA0025.INDPRD01.PROD.OUTLOOK.COM (10.174.62.139)\n\tTo BN6PR12MB1505.namprd12.prod.outlook.com (10.172.24.146)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-MS-Office365-Filtering-Correlation-Id": "6157993f-b72a-45b9-85b3-08d58d9464e9",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);\n\tSRVR:BN6PR12MB1505; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BN6PR12MB1505;\n\t3:u/TkHwHvSe+vQZoJoCEyMlnhMx9pxHGszCCPLALBSg2ejtymnN8Z27WH0uXld5juzO8QBtDXPN+qIrR8jJPcmh2Gq0GsQxYk7DUwv6NNkWgjmpr1LF+NJrjoWdM73ZSkcDNjzFm1rE0iYsOc4BS6eRbOC56DT2y9vYlF/TXG4Q2DOcVXTjP7/X95iQQPH/xngsCpjB1lVDzkgO+L6ilRqPpHiWkv4POcFU+awlTdtvzVqJhz2O6NaOnWQyzVdTUC;\n\t25:NCF3eAK71HQd4MVm3XSvTAbpBfRzNW/KQQcs1q7G0N4Jlca8oLFFo0MMVt+SdTji3WMOp6OULFXv4eTZmrDEpQex29H3MmGbWdAohG7VIgpL77FCz4ryDrwU3cIdft/WvV9o7LSJLtvI50J1o0fWBW0Xi6efXCdIi2Y9gMHUE3GiH4gMwxFCRi9p0Amss6uKJMaLkVZWcPskD26H0YddlaGw9ZNyQh6DhS3w3EWUacm45P0KZHmxFgUCw3GxHW7gmbu9KYNmYs7eoB0mH9vZDYy06IyoA92nwbBajHdntvuy48YEBUUH7R3zv/XS2gPDCMCFxSq/iFsOAEc/fewiRg==;\n\t31:SCzons7ZsuDohjsY22dMjN93rexLWthhEeee0r6wMX5bNB0NYzcaQmL0ZzCtVcWVZkKtVrkQOdDolNMUoRT7xb5kXePVGrx5vKBFCviXZcHHP7tHu5+D9Nz5xJQRlqxIkPGEGe2mUfDp5xn9taV5VddNxpgGJ/qpaQEYJWzRZE5pnqErbhupBtrswi3KSUurFkknjFgeBImNioGonw2mIZkjZgFcoyQ+pbB5e1Z3m+A=",
            "1; BN6PR12MB1505;\n\t20:QfSCJplHhzCqa41z41jKo1k51Zc2e/TH/hlsUcT/6BpeYXYSOHhTRFpE2btnSwEOmE9ZaSm4DC+xPIMCTxmE3JdjDwdWYRMepc0cz4sfm7K1wtbIn8mRE63jEx5gJuPb6meaLcRmQi34U9oX2x3dBQrmq6vlbLRxuharvP8oC7OJsDDD5jUv7h7DPZ9RXnP17pqGbbwowmdpQllvRblQpHPr+6OOGMIbqxtmyy2Nz4BmLOj2fDwEKxGE/6awEbsMzXjJFWxIEO2iZxVPUJj3B2oNF2gXqp1XQ7zan2SpqmJDgL+oC9An3SDGZYQn0ybDxGsl6PEFnacDST9Xmuk0UhtYtgm3uaBMXZ/Hm4IfWMrq1ngo6vNC4ZvXWYSfd0zDacHB5ttw27E8yJnGWwbBZDd1fPB2ALySkMr4farEhg6Jlb1Q4X0FloVI9Qvolbs9coJ69rDOjDcnW910shALawuYUa2BY3Ardb6+UJBuTq4FC0OGGPFr5dTNzdNwKbJ+;\n\t4:ggIHnSHeKYoHK/zvnA1WuaTThXx3pYjgSGyWGce0An4TdowENNQFRv8qVvmM4v4zOSdDggNKVnfMphNDWWUj3tXFVfx28SClwafWP8F9JBhsqnHwL0QbAy85DpJbpYPL9NAPwAnGow37wXGdop5GnUx9+N8Y+swmBxWZTSQn+Aj39r/35odUOccbBxww1J3VOcJiMojlHtNhki3nkisZH7jZUFdetAy5Rm6RLjuuSc4QpVYSYyW33WzTRobxapMhDnr0OXDK0wVPbub2qQqw4l8tFHIgM32r432bToqV3ruIzE86EUqjJIM2UcYuYuDl",
            "=?us-ascii?Q?1; BN6PR12MB1505;\n\t23:Srf+l1E/tO8SXZO5P4AtATAFghLRA5VEx4CGKw//9?=\n\tePIM/2D1rsGLVVB1FDY/DcYt+mSPkUDtptx9pVe97D2mDXWDD2i2PORt+TgupJZ6X3wHtwkjvoxMh0HEoB3HgezPVO64SxsjJV2cl8t3GheFZ66+0/fuDpNNylZhLEsvduzCwtRBWfMTyG392M3F+uKXBuysJgmk0ObeHobkiQZGwz+J1SrEk2cW3uh+0Ly0eNheQK6Di9i7GwufrVyEhhO0PjJ7TBDLLeZeNXT4Q5Yo8yZseex1eK9Z6CVrlv730BKfdN9QvOdIuOqW+plZ0H7yPX3LrF9lJ3bj3MEbT3LuRSQiAUOHgDKs8aYJ5B/YPoG27Ns6h4ANCTP/1JV4CtWVGtSlv9yYLqMNIiwL9nARtgyTn8MhYZhC5WUzVjwb0mUmNwM1F3eqksMAG/BF1Va5UqKi8UumpKfnSe//jaJGDNf+VqcfUtTYwxQ3uJ6sFNm5MeUou4FnuvAQisu/Y7C0J/PY5gPzrSqA72ol3Q1f8liJ9V6cDYAnE6E+oyBZu7ZvSjDK1EDixeSxT5Fkgzz9C/Uj9f2FNJiwQQPIoXKFT36K5Xx7JSWga2MHkRbiduRuPk1VAln/WkNVpkMU3rhmP9LJdw+zoZUWskhJkUQXwR3NcgBkPC1AgSUrD2FdlKjx/TKlUrLRqhr9uLcra0i7VXKAnfbTNNWFyONa4eA2g+x3RgaTTiUVEJAbNAEHxQX+Ea119IFBvM5iaSAbngB4WKJq6A+fQ/bhtjcwaZ+CrErFLDoXCCyGc/yY+bUj+G/r2V+cdsM4mosUHHbiKVj2SJexXUlh6mXakvMgXMqUYUjR4APvnhXxvFEQ1jHwFlA8v9jAkOF4zt5jLK6ad35hKHr4LmV4BMuDriQIR99Fg0UBnZ9efzL6dtg3XrIQg1gEn2J0R4HaoT+dkIb19AG6dGyAgMmqdYGfbYtk/vNKDaFdMqyTmPGEf3LZUsAvdrDzjqrSwQ91cPjvDXOVFia2I1iue7UY9jfQTS+pt32825fnIlK8P4GkV3/MbP+eb009hMdjOKoOWZK1fxQ3o6WwbmNSWpZnk1iYM1lLXRf9f5IIrWMNYUd2XdK9xqavjm2iMGAtJDN9X7u5+7NYdFJL53kdVAyT9N6Ph5EbRlJOc1FfypKNTxCYbRH/nlw8lUgt8LVS9YrUJSs0ZAB8sq7",
            "1; BN6PR12MB1505;\n\t6:JhcU10FyYj8JcBlOrg7+y344UVBncWMNZKGpzEpC/A2DYocCIHI6VM94cIhUwHSEasbqFGyLoDJ99f/PJnGggpEgSPhocYh9lScP/Owb4T4Z7Nhzap+t65XuYzkZL/5OaWqaMUXKhwAjs03Nt8wlRc6+6mWNAIdpm1bIPQP0TPdkTiOQL2G27qxiCj6WEOXtDam8ipQUs9NFp3Zl4ZbyUNcQE1EldnBJxyL12CbvvX1RONPC//wcYMVydULaGG75terimGnGMO+tDR2ZnIcelfeEyBmnle5syO/Y6EmVkSta/sdFCJkAkC3waKs4clFbrxSSp1oMauKXEmFc1Hri4K8gmvV9r07v8UjT7ajWt3s=;\n\t5:4/zVKnfSLeAs24Ya5mVbk+lFFqJlu0TuaqrNIg5A0Zv00h1BT0/szhizoc+SGGWCW4JnC2RmYucTdMEQMxEm7d4A+OYU9QHBS4gV9Emn6bx904c5Hl4+4cgM9w0N2gN70Ak13nVFDb2HCBfjES6PQ15aC8oe3FebGwRWGuVDBRM=;\n\t24:0VLjLrJHGYfGEGAv3fnjVGq0N6TBsAxKJYxtQzoVX8cqEYVDsJvE+55FyOSXD2dKhGJh/FKpQhxYfUkq9s2SsO8qW3nWKu7JtvO2d6ea5Ic=;\n\t7:EiZi3SNsB8rmgZSOnaIknwQbrV0Ju8ZwqpZOwsQS+xgSQS9d3gru6e1QfguRykQvGu8ftprhmxIM960mq91MttMvwKw0TQZjMt7lsxxtCLBeJMhXUjWxSuHq6dm/dPg5mtmBvgHaeePLfm66fygNUZJxhEMdC4yE7CCMhNuledXSoUNOZooBRsW9t+hmTR9qqcNZiJTCymujEYawU8GjW3gPpS+BC1WVMDSgIFmshCh0QMT2zAtwdB203vWJwYY7",
            "1; BN6PR12MB1505;\n\t20:4FiX1KpB7g6CHM6y7ubTMrXKE5lLhcSq4xgCgGf6p+gpeZYa8A/exsUZXrPi1ZoGUDJAilqvYH2IzxDywY19/BRYAanGEVPcrtIwFzhq9+eborgDAbG68IuYE795N3PLrPc23ecDVodGnYfRkBFY2N3FUbJtmbzV9+9e7PoHLPyV3a5KZmEaVV895VZeLLMvt4Mc+4g8VYl0LTp4LgWRA9LOkc2bzal/EiP3N9oGSYpFFWPXZbk9Qa/1ymjGciTp"
        ],
        "X-MS-TrafficTypeDiagnostic": "BN6PR12MB1505:",
        "X-Microsoft-Antispam-PRVS": "<BN6PR12MB150562B93E72EA48BD357C9DAED40@BN6PR12MB1505.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)(3231221)(944501300)(52105095)(3002001)(93006095)(93001095)(10201501046)(6055026)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(6072148)(201708071742011);\n\tSRVR:BN6PR12MB1505; BCL:0; PCL:0; RULEID:; SRVR:BN6PR12MB1505; ",
        "X-Forefront-PRVS": "06167FAD59",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(396003)(39380400002)(39860400002)(346002)(376002)(366004)(199004)(189003)(97736004)(105586002)(2361001)(2351001)(72206003)(48376002)(4326008)(50226002)(76176011)(59450400001)(8676002)(26005)(316002)(8936002)(53936002)(106356001)(16586007)(186003)(7696005)(51416003)(16526019)(52116002)(386003)(81166006)(81156014)(8656006)(25786009)(575784001)(66066001)(68736007)(86362001)(47776003)(6486002)(5660300001)(7736002)(53416004)(6116002)(305945005)(3846002)(478600001)(2950100002)(36756003)(6916009)(2906002)(50466002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR12MB1505;\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": "LdnayinshYOKfhd+e/KtgAXuoqIiEaU+jMXd5QaIj4jh6mwZ4QY3BgzLU3o64mujzHXMdDZcTgiDc4gS8F4MIE+6qntIS3e1A+zsfHn9tQ1RlveN1T7d0eOxrjG0bfTJWpf5cdXzQHfXD0Y0x2KDMmw2exyUxsNUGc0C7oBs7RD8VOjP3yTmx3ZPV1KxOa6d",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "amd.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "19 Mar 2018 12:24:41.7484\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "6157993f-b72a-45b9-85b3-08d58d9464e9",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "3dd8961f-e488-4e60-8e11-a82d994e183d",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BN6PR12MB1505",
        "Subject": "[dpdk-dev] [PATCH v5 14/19] crypto/ccp: support sha1 authentication\n\talgo",
        "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  | 367 +++++++++++++++++++++++++++++++++++++++\n drivers/crypto/ccp/ccp_crypto.h  |  23 +++\n drivers/crypto/ccp/ccp_pmd_ops.c |  42 +++++\n 3 files changed, 432 insertions(+)",
    "diff": "diff --git a/drivers/crypto/ccp/ccp_crypto.c b/drivers/crypto/ccp/ccp_crypto.c\nindex 3a14b77..517c284 100644\n--- a/drivers/crypto/ccp/ccp_crypto.c\n+++ b/drivers/crypto/ccp/ccp_crypto.c\n@@ -10,6 +10,7 @@\n #include <sys/queue.h>\n #include <sys/types.h>\n #include <unistd.h>\n+#include <openssl/sha.h>\n #include <openssl/cmac.h> /*sub key apis*/\n #include <openssl/evp.h> /*sub key apis*/\n \n@@ -26,6 +27,14 @@\n #include \"ccp_pci.h\"\n #include \"ccp_pmd_private.h\"\n \n+/* SHA initial context values */\n+static uint32_t ccp_sha1_init[SHA_COMMON_DIGEST_SIZE / sizeof(uint32_t)] = {\n+\tSHA1_H4, SHA1_H3,\n+\tSHA1_H2, SHA1_H1,\n+\tSHA1_H0, 0x0U,\n+\t0x0U, 0x0U,\n+};\n+\n static enum ccp_cmd_order\n ccp_get_cmd_id(const struct rte_crypto_sym_xform *xform)\n {\n@@ -50,6 +59,59 @@ ccp_get_cmd_id(const struct rte_crypto_sym_xform *xform)\n \treturn res;\n }\n \n+/* partial hash using openssl */\n+static int partial_hash_sha1(uint8_t *data_in, uint8_t *data_out)\n+{\n+\tSHA_CTX ctx;\n+\n+\tif (!SHA1_Init(&ctx))\n+\t\treturn -EFAULT;\n+\tSHA1_Transform(&ctx, data_in);\n+\trte_memcpy(data_out, &ctx, SHA_DIGEST_LENGTH);\n+\treturn 0;\n+}\n+\n+static int generate_partial_hash(struct ccp_session *sess)\n+{\n+\n+\tuint8_t ipad[sess->auth.block_size];\n+\tuint8_t\topad[sess->auth.block_size];\n+\tuint8_t *ipad_t, *opad_t;\n+\tuint32_t *hash_value_be32, hash_temp32[8];\n+\tint i, count;\n+\n+\topad_t = ipad_t = (uint8_t *)sess->auth.key;\n+\n+\thash_value_be32 = (uint32_t *)((uint8_t *)sess->auth.pre_compute);\n+\n+\t/* considering key size is always equal to block size of algorithm */\n+\tfor (i = 0; i < sess->auth.block_size; i++) {\n+\t\tipad[i] = (ipad_t[i] ^ HMAC_IPAD_VALUE);\n+\t\topad[i] = (opad_t[i] ^ HMAC_OPAD_VALUE);\n+\t}\n+\n+\tswitch (sess->auth.algo) {\n+\tcase CCP_AUTH_ALGO_SHA1_HMAC:\n+\t\tcount = SHA1_DIGEST_SIZE >> 2;\n+\n+\t\tif (partial_hash_sha1(ipad, (uint8_t *)hash_temp32))\n+\t\t\treturn -1;\n+\t\tfor (i = 0; i < count; i++, hash_value_be32++)\n+\t\t\t*hash_value_be32 = hash_temp32[count - 1 - i];\n+\n+\t\thash_value_be32 = (uint32_t *)((uint8_t *)sess->auth.pre_compute\n+\t\t\t\t\t       + sess->auth.ctx_len);\n+\t\tif (partial_hash_sha1(opad, (uint8_t *)hash_temp32))\n+\t\t\treturn -1;\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+\tdefault:\n+\t\tCCP_LOG_ERR(\"Invalid auth algo\");\n+\t\treturn -1;\n+\t}\n+}\n+\n /* prepare temporary keys K1 and K2 */\n static void prepare_key(unsigned char *k, unsigned char *l, int bl)\n {\n@@ -234,6 +296,31 @@ ccp_configure_session_auth(struct ccp_session *sess,\n \telse\n \t\tsess->auth.op = CCP_AUTH_OP_VERIFY;\n \tswitch (auth_xform->algo) {\n+\tcase RTE_CRYPTO_AUTH_SHA1:\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA1;\n+\t\tsess->auth.ut.sha_type = CCP_SHA_TYPE_1;\n+\t\tsess->auth.ctx = (void *)ccp_sha1_init;\n+\t\tsess->auth.ctx_len = CCP_SB_BYTES;\n+\t\tsess->auth.offset = CCP_SB_BYTES - SHA1_DIGEST_SIZE;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_SHA1_HMAC:\n+\t\tif (auth_xform->key.length > SHA1_BLOCK_SIZE)\n+\t\t\treturn -1;\n+\t\tsess->auth.engine = CCP_ENGINE_SHA;\n+\t\tsess->auth.algo = CCP_AUTH_ALGO_SHA1_HMAC;\n+\t\tsess->auth.ut.sha_type = CCP_SHA_TYPE_1;\n+\t\tsess->auth.ctx_len = CCP_SB_BYTES;\n+\t\tsess->auth.offset = CCP_SB_BYTES - SHA1_DIGEST_SIZE;\n+\t\tsess->auth.block_size = SHA1_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, sess->auth.ctx_len << 1);\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@@ -427,6 +514,13 @@ ccp_auth_slot(struct ccp_session *session)\n \tint count = 0;\n \n \tswitch (session->auth.algo) {\n+\tcase CCP_AUTH_ALGO_SHA1:\n+\t\tcount = 3;\n+\t\t/**< op + lsb passthrough cpy to/from*/\n+\t\tbreak;\n+\tcase CCP_AUTH_ALGO_SHA1_HMAC:\n+\t\tcount = 6;\n+\t\tbreak;\n \tcase CCP_AUTH_ALGO_AES_CMAC:\n \t\tcount = 4;\n \t\t/**\n@@ -552,6 +646,271 @@ ccp_perform_passthru(struct ccp_passthru *pst,\n }\n \n static int\n+ccp_perform_hmac(struct rte_crypto_op *op,\n+\t\t struct ccp_queue *cmd_q)\n+{\n+\n+\tstruct ccp_session *session;\n+\tunion ccp_function function;\n+\tstruct ccp_desc *desc;\n+\tuint32_t tail;\n+\tphys_addr_t src_addr, dest_addr, dest_addr_t;\n+\tstruct ccp_passthru pst;\n+\tuint64_t auth_msg_bits;\n+\tvoid *append_ptr;\n+\tuint8_t *addr;\n+\n+\tsession = (struct ccp_session *)get_session_private_data(\n+\t\t\t\t\t op->sym->session,\n+\t\t\t\t\t ccp_cryptodev_driver_id);\n+\taddr = session->auth.pre_compute;\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 = (void *)rte_pktmbuf_append(op->sym->m_src,\n+\t\t\t\t\t\tsession->auth.ctx_len);\n+\tdest_addr = (phys_addr_t)rte_mem_virt2phy(append_ptr);\n+\tdest_addr_t = dest_addr;\n+\n+\t/** Load PHash1 to LSB*/\n+\tpst.src_addr = (phys_addr_t)rte_mem_virt2phy((void *)addr);\n+\tpst.dest_addr = (phys_addr_t)(cmd_q->sb_sha * CCP_SB_BYTES);\n+\tpst.len = session->auth.ctx_len;\n+\tpst.dir = 1;\n+\tpst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP;\n+\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_NOOP;\n+\tccp_perform_passthru(&pst, cmd_q);\n+\n+\t/**sha engine command descriptor for IntermediateHash*/\n+\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+\n+\tCCP_CMD_SOC(desc) = 0;\n+\tCCP_CMD_IOC(desc) = 0;\n+\tCCP_CMD_INIT(desc) = 1;\n+\tCCP_CMD_EOM(desc) = 1;\n+\tCCP_CMD_PROT(desc) = 0;\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+\tauth_msg_bits = (op->sym->auth.data.length +\n+\t\t\t session->auth.block_size)  * 8;\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_LSB_ID(desc) = cmd_q->sb_sha;\n+\tCCP_CMD_SHA_LO(desc) = ((uint32_t)auth_msg_bits);\n+\tCCP_CMD_SHA_HI(desc) = high32_value(auth_msg_bits);\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+\t/* Intermediate Hash value retrieve */\n+\tif ((session->auth.ut.sha_type == CCP_SHA_TYPE_384) ||\n+\t    (session->auth.ut.sha_type == CCP_SHA_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 = session->auth.ctx_len;\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}\n+\n+\t/** Load PHash2 to LSB*/\n+\taddr += session->auth.ctx_len;\n+\tpst.src_addr = (phys_addr_t)rte_mem_virt2phy((void *)addr);\n+\tpst.dest_addr = (phys_addr_t)(cmd_q->sb_sha * CCP_SB_BYTES);\n+\tpst.len = session->auth.ctx_len;\n+\tpst.dir = 1;\n+\tpst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP;\n+\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_NOOP;\n+\tccp_perform_passthru(&pst, cmd_q);\n+\n+\t/**sha engine command descriptor for FinalHash*/\n+\tdest_addr_t += session->auth.offset;\n+\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+\n+\tCCP_CMD_SOC(desc) = 0;\n+\tCCP_CMD_IOC(desc) = 0;\n+\tCCP_CMD_INIT(desc) = 1;\n+\tCCP_CMD_EOM(desc) = 1;\n+\tCCP_CMD_PROT(desc) = 0;\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) = (session->auth.ctx_len -\n+\t\t\t     session->auth.offset);\n+\tauth_msg_bits = (session->auth.block_size +\n+\t\t\t session->auth.ctx_len -\n+\t\t\t session->auth.offset) * 8;\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_LSB_ID(desc) = cmd_q->sb_sha;\n+\tCCP_CMD_SHA_LO(desc) = ((uint32_t)auth_msg_bits);\n+\tCCP_CMD_SHA_HI(desc) = high32_value(auth_msg_bits);\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+\t/* Retrieve hmac output */\n+\tpst.src_addr = (phys_addr_t)(cmd_q->sb_sha * CCP_SB_BYTES);\n+\tpst.dest_addr = dest_addr;\n+\tpst.len = session->auth.ctx_len;\n+\tpst.dir = 0;\n+\tpst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP;\n+\tif ((session->auth.ut.sha_type == CCP_SHA_TYPE_384) ||\n+\t    (session->auth.ut.sha_type == CCP_SHA_TYPE_512))\n+\t\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_NOOP;\n+\telse\n+\t\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_256BIT;\n+\tccp_perform_passthru(&pst, cmd_q);\n+\n+\top->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;\n+\treturn 0;\n+\n+}\n+\n+static int\n+ccp_perform_sha(struct rte_crypto_op *op,\n+\t\tstruct ccp_queue *cmd_q)\n+{\n+\tstruct ccp_session *session;\n+\tunion ccp_function function;\n+\tstruct ccp_desc *desc;\n+\tuint32_t tail;\n+\tphys_addr_t src_addr, dest_addr;\n+\tstruct ccp_passthru pst;\n+\tvoid *append_ptr;\n+\tuint64_t auth_msg_bits;\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+\n+\tappend_ptr = (void *)rte_pktmbuf_append(op->sym->m_src,\n+\t\t\t\t\t\tsession->auth.ctx_len);\n+\tdest_addr = (phys_addr_t)rte_mem_virt2phy(append_ptr);\n+\n+\t/** Passthru sha context*/\n+\n+\tpst.src_addr = (phys_addr_t)rte_mem_virt2phy((void *)\n+\t\t\t\t\t\t     session->auth.ctx);\n+\tpst.dest_addr = (phys_addr_t)(cmd_q->sb_sha * CCP_SB_BYTES);\n+\tpst.len = session->auth.ctx_len;\n+\tpst.dir = 1;\n+\tpst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP;\n+\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_NOOP;\n+\tccp_perform_passthru(&pst, cmd_q);\n+\n+\t/**prepare sha command descriptor*/\n+\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+\n+\tCCP_CMD_SOC(desc) = 0;\n+\tCCP_CMD_IOC(desc) = 0;\n+\tCCP_CMD_INIT(desc) = 1;\n+\tCCP_CMD_EOM(desc) = 1;\n+\tCCP_CMD_PROT(desc) = 0;\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+\tauth_msg_bits = op->sym->auth.data.length * 8;\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_LSB_ID(desc) = cmd_q->sb_sha;\n+\tCCP_CMD_SHA_LO(desc) = ((uint32_t)auth_msg_bits);\n+\tCCP_CMD_SHA_HI(desc) = high32_value(auth_msg_bits);\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+\t/* Hash value retrieve */\n+\tpst.src_addr = (phys_addr_t)(cmd_q->sb_sha * CCP_SB_BYTES);\n+\tpst.dest_addr = dest_addr;\n+\tpst.len = session->auth.ctx_len;\n+\tpst.dir = 0;\n+\tpst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP;\n+\tif ((session->auth.ut.sha_type == CCP_SHA_TYPE_384) ||\n+\t    (session->auth.ut.sha_type == CCP_SHA_TYPE_512))\n+\t\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_NOOP;\n+\telse\n+\t\tpst.byte_swap = CCP_PASSTHRU_BYTESWAP_256BIT;\n+\tccp_perform_passthru(&pst, cmd_q);\n+\n+\top->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;\n+\treturn 0;\n+\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@@ -1117,6 +1476,14 @@ ccp_crypto_auth(struct rte_crypto_op *op,\n \t\t\t\t\tccp_cryptodev_driver_id);\n \n \tswitch (session->auth.algo) {\n+\tcase CCP_AUTH_ALGO_SHA1:\n+\t\tresult = ccp_perform_sha(op, cmd_q);\n+\t\tb_info->desccnt += 3;\n+\t\tbreak;\n+\tcase CCP_AUTH_ALGO_SHA1_HMAC:\n+\t\tresult = ccp_perform_hmac(op, cmd_q);\n+\t\tb_info->desccnt += 6;\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 3585c36..aa4787a 100644\n--- a/drivers/crypto/ccp/ccp_crypto.h\n+++ b/drivers/crypto/ccp/ccp_crypto.h\n@@ -34,9 +34,32 @@\n #define\tCCP_DES_ENCRYPT(p)\t((p)->des.encrypt)\n #define\tCCP_DES_MODE(p)\t\t((p)->des.mode)\n #define\tCCP_DES_TYPE(p)\t\t((p)->des.type)\n+#define\tCCP_SHA_TYPE(p)\t\t((p)->sha.type)\n #define\tCCP_PT_BYTESWAP(p)\t((p)->pt.byteswap)\n #define\tCCP_PT_BITWISE(p)\t((p)->pt.bitwise)\n \n+/* HMAC */\n+#define HMAC_IPAD_VALUE 0x36\n+#define HMAC_OPAD_VALUE 0x5c\n+\n+#ifdef RTE_LIBRTE_PMD_CCP_CPU_AUTH\n+#define MD5_DIGEST_SIZE         16\n+#define MD5_BLOCK_SIZE          64\n+#endif\n+\n+/* SHA */\n+#define SHA_COMMON_DIGEST_SIZE\t32\n+#define SHA1_DIGEST_SIZE        20\n+#define SHA1_BLOCK_SIZE         64\n+\n+/* SHA LSB intialiazation values */\n+\n+#define SHA1_H0\t\t0x67452301UL\n+#define SHA1_H1\t\t0xefcdab89UL\n+#define SHA1_H2\t\t0x98badcfeUL\n+#define SHA1_H3\t\t0x10325476UL\n+#define SHA1_H4\t\t0xc3d2e1f0UL\n+\n /**\n  * CCP supported AES modes\n  */\ndiff --git a/drivers/crypto/ccp/ccp_pmd_ops.c b/drivers/crypto/ccp/ccp_pmd_ops.c\nindex 1314c17..13f6820 100644\n--- a/drivers/crypto/ccp/ccp_pmd_ops.c\n+++ b/drivers/crypto/ccp/ccp_pmd_ops.c\n@@ -13,6 +13,48 @@\n #include \"ccp_crypto.h\"\n \n static const struct rte_cryptodev_capabilities ccp_pmd_capabilities[] = {\n+\t{\t/* SHA1 */\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_SHA1,\n+\t\t\t\t .block_size = 64,\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 = 20,\n+\t\t\t\t\t .max = 20,\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/* SHA1 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_SHA1_HMAC,\n+\t\t\t\t .block_size = 64,\n+\t\t\t\t .key_size = {\n+\t\t\t\t\t .min = 1,\n+\t\t\t\t\t .max = 64,\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 = 20,\n+\t\t\t\t\t .max = 20,\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 = {\n",
    "prefixes": [
        "dpdk-dev",
        "v5",
        "14/19"
    ]
}