get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 36576,
    "url": "http://patches.dpdk.org/api/patches/36576/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1522155281-16329-3-git-send-email-shally.verma@caviumnetworks.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": "<1522155281-16329-3-git-send-email-shally.verma@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1522155281-16329-3-git-send-email-shally.verma@caviumnetworks.com",
    "date": "2018-03-27T12:54:40",
    "name": "[dpdk-dev,v1,2/3] lib/cryptodev: add asymmetric crypto capability in cryptodev",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "11c7c6b7df1d85f67a59315c9b42a0711f2a895d",
    "submitter": {
        "id": 960,
        "url": "http://patches.dpdk.org/api/people/960/?format=api",
        "name": "Shally Verma",
        "email": "shally.verma@caviumnetworks.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/1522155281-16329-3-git-send-email-shally.verma@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/36576/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/36576/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 8F4824C93;\n\tTue, 27 Mar 2018 14:55:19 +0200 (CEST)",
            "from NAM03-BY2-obe.outbound.protection.outlook.com\n\t(mail-by2nam03on0045.outbound.protection.outlook.com [104.47.42.45])\n\tby dpdk.org (Postfix) with ESMTP id 873D54C93\n\tfor <dev@dpdk.org>; Tue, 27 Mar 2018 14:55:17 +0200 (CEST)",
            "from hyd1sverma-dt.caveonetworks.com (115.113.156.2) by\n\tMWHPR0701MB3644.namprd07.prod.outlook.com (2603:10b6:301:7d::37) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.609.10;\n\tTue, 27 Mar 2018 12:55:13 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=b/cwoWvZtPWIHNJ86xYzpxnc3QwuuMMhna8UW3P7U3I=;\n\tb=NfuvDGN/A7EHFrGya54bddyt+zoVmllCAaV9Bv8hyu5vMkqxCTfwNd1vcsMIcWE7xsuMAWbUDUToYhLmcCsRJSJ2unHkKgisy1w+NshQjpYEMEQ+IaX4r6UHC1zVyfxGAYrOKnw8NKM+TYm1NiX3i/b3necsgu1kIbeQpIqcna4=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Shally.Verma@cavium.com; ",
        "From": "Shally Verma <shally.verma@caviumnetworks.com>",
        "To": "pablo.de.lara.guarch@intel.com",
        "Cc": "declan.doherty@intel.com, fiona.trahe@intel.com,\n\tpathreya@caviumnetworks.com, ssahu@caviumnetworks.com,\n\tagupta@caviumnetworks.com, dev@dpdk.org,\n\tSunila Sahu <sunila.sahu@caviumnetworks.com>,\n\tAshish Gupta <ashish.gupta@caviumnetworks.com>",
        "Date": "Tue, 27 Mar 2018 18:24:40 +0530",
        "Message-Id": "<1522155281-16329-3-git-send-email-shally.verma@caviumnetworks.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1522155281-16329-1-git-send-email-shally.verma@caviumnetworks.com>",
        "References": "<1522155281-16329-1-git-send-email-shally.verma@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[115.113.156.2]",
        "X-ClientProxiedBy": "MA1PR01CA0089.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:a00::29)\n\tTo MWHPR0701MB3644.namprd07.prod.outlook.com\n\t(2603:10b6:301:7d::37)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "900a1bf4-53c2-44fa-7fcf-08d593e1fcb8",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);\n\tSRVR:MWHPR0701MB3644; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; MWHPR0701MB3644;\n\t3:syM3ysJqebDiRP4tATpeapbJlx5bImQCBdrFPyXWwDHrPyaA7JvFyw1Z8Plps2YuHB6K4ThdSl6sfSYgD9B7cHkschmZJ8EtiyS86u2tupv4NaZnScskj15WTn6hGG15fqAv/N0qhWXdcD/tZkGXhHtzC7lZVJEkKma5mPlVx+R/U7yFxODAAWGYeFS6dsytpnlNdPV8ywy9+EEFeE2UDobsFYue62/Dr7h5svzeyEQe26rEJqL2HlCv+U5uNsaJ;\n\t25:PfeEp0ndH60wf60P8KMxbiozs8urmfME5LxvQcvj+9smWwyGv0dVafA4k8rDMfqlUEFZ7exW4Zrpo2ttlio7XkmC00aBpZhi2nuY4phc9UKk78eWdj/LZ/THXm5FTUZoPgzDiTvQL469l6mUmzgsu46ORY64DyaQ8BB0DK2b/YBP6KuS07AZOIAP5/C1+uwefvgr+pheXaav0w+NM4TniNjZbPL5gvUoaLbTIpFqkVvWGjyoypQYol6hs9O0/hjcqj53sjnNDFcr4uVIqekoDhbMT79cPWCh50ikY37qbisbSGWM1Qu7ghZtNwMiaE1xrOPPCEyZIK6x0ctP00djCw==;\n\t31:yC/dkLxsD0b3i7TMXFYTjcrl0GScRUGAeD8IJobziGTl+Gr4z+i8dyCwFOoToRm92DzikLRksx/sOeRJbHAXlFjygl1sP9rSVuzg6xXH5gj/8cDGrpzIe8qs1jOwS5S7/+ViYYxuZSnY8wChdd9W15gjK8jFgxpNNZeU+NOG3cBwqqOo0HS0dRBnehPKacACYLDu8dIhnvFW3xHqvra6F43e7+3ypz2/JVvV+5qO8x4=",
            "1; MWHPR0701MB3644;\n\t20:oNhV2hJiuF2o7S/3og7OircxoM5Z3U94yPw3gXg7o+g8k/OIc+nE5q81o6PCZEo2Lxced1G5SryyPaNReU/zbMnwLFw2Pb3xH/M+YHpzFRFU8yuHJ7iHShefKi4v1MrbGNq9xtFNPtAAuUVNkWGfNg83/nY+MGMzpk6YzDIrD78qCyrgZkhYKtc25+4cnBP3DOKmqw4uuqQaQsn5HZQZVI5ZWQkCFP3Ld/WsyPTtm6yyTyOPR/5tTqqi72q+XzchbH26wrNg5wr2EU602rVd99WyiL1QRcIbgjcSM3zFpQypdD5YuYSjb0EDOUjwH6Vtcd1VIO+MpJLhPr9SX4cktbJZx15WKKckIFIF/4YjSS3rOlR84KEsZh0RzJWKVIQQlleqtMSXxSykD4ZGP4QLYZbpfSDJYzPMsU4lK8RTRNbLFesbM3lxtu87G7CjW6x7YvMS0jxZLRrZC6MMX00n7NJz603/KUjLNrPCG4wnt6K8xgGo8SYXi3eSIFQEzA6358/AcyPQmuWwu0Av7NppNcF6CuCrod8xJR2p7pA2m+q+zi97HiR9PmRKFOO/LbV7179C+4M3Gp8NRaWVmCWXqfbfr3dSnW7aGFlETmn4Kd0=;\n\t4:/vTlw2E/q1DZkxjEO20yHyYDFhE57Ln14gkgKAJ1qvspD+jW9QX62TSjaY7/mEWQqlOQZimFMuLc3NLecUEoJ6Wq12YGE7CKqaf25JQS2iGKFkhouUqTtNS5hOGOEHquX0tSui+lEdk60TY+vWb3JQv/3YFbDS38n6w/lTpsVVrNomvF76OZEVQYDMy6jzQpMSd/nMGdfY/eJZrH+0RO8L/DFRhtw+M8mWZO+gzyJjUzj0cp8QKdlRkvYgMOP4MRO/p41glk2IA949Dt2EzUAw==",
            "=?us-ascii?Q?1; MWHPR0701MB3644;\n\t23:+5h5nsycGDhq5/X5VNnHQ1XQiBUE63SiHNLk25N?=\n\tXNsKgftS5DFZ082VhbQmfccPPTzhyllqq5pQIIhM31OglF00HTkIrsZhbi4tylWriQCq7AA6FBf/XToJTkts3PYYPWpUfTcNnlqsAuZTh/KbHchindgLZ9KyojJaOrGRr6+iuAlH0LXy3hR1nJB5QVD2CWGP0NN7RjoMEZ4ba4+Oir2EJHMbgf4eP6cwkERv29TgmHks7BMBYyHvWeSLjOUql93jpiryRoZolgQ4bEkOZDeoLTcRFF2ykmDHRaXDyMUyo5Ymbm5w4OWliOef/ivWTKcByummhzekUtosvy2QokoVsDU4idphnS0IUbqtAaX8/z2gBDqcdsuUqajQOg3J18oJ+U7/aig89bZtnzgpKbhDBmclc4o4zUCXgKxLsAEgM/t/t3Vg/jOq3d+6bsIWnm+LIrAHlI0wAOy7eEQ0QCmDD4lH7d+2SMKX+2OpIkA+hktcedK6SCig0rNclOZx99pwwJ4sUJgpt4q7PH+czTmqDvHCJGK26HnWMfvRy/YUOI6TewjXAIpAu5xOJ7nXnG3KIorpibLmJdItz9bNTPFDB7wTQ0xRbWKSYpPxA8kWxhGCprZrMgGt6RZi9hvyl70Q2eDUnoxD45U/8lDKon0nOrhxSPQsuqeRiMiM6rEqm/EauX82AwMvCkq97ehsj6b4NtKcvaFNILe76eZtpYxKBLKvi0qLYg1cPPKfygy3gNm5euvdMhDahysFZRxWSGKU6GU9dJJ0Flvr+gegBQhfHttGGgpqH4SlLqXIn6JXvkZjuoeJO/i4/mkQtyK2gYyPI66AUEf5620t/vHcS4LyDoSuI3BuocA6+ehv0VvSQgPBb66eQtiizQWQvjyJaHSWIraS9v5U9iReJI+tv9pYGks56YZwHoCBQM6dUbkrYEvMAvifGxI1pJ2MJnsvW7DZf0hmGeXp5bdYUVXT87VagZK4PdG7npLs1ejrXKYHTFYyKn43PwdmEGStTeL/kidRFGMCzEg9YbZ8/ZGRp2rVIuvOHFvAirdtTirHw2xO+80yNSA2gm5wXtA4ozaQc2zsI1wlGCaqLG4K3LjxHrdiZnC3vPPPGMILLQKAFUAaTXA35owWIK6tLWP3MGEH+GA6BK1YF1TI8LRrwxs1a6Y4E3Tvr+DXNODVRl8IzmQCMpflNnvSRCGsK7NVMPHjD07dFVEit+faeKB+WlQihtFc8trVn1NYRsrezhVk8TX30eQ2XJXVXS0z6/OUtpx+oZejgEyuQHeCL1NTjwgCLVPVVImIqQg39bBeeFSqsTF3VZLJBxjbXXn92dNV0x8P6kfapn7PTqqFC+XOKxL85/tNzHdcLPLJD0vACZDpKhFw=",
            "1; MWHPR0701MB3644;\n\t6:iSKzzHKKaauA6q3332Q3w392gsNqbjm6vuTas4rJp/zXBSkxdAdGziLxizzr2ImIluT6ucibw8t3OSEL4LkYZn3IPd+0L8rRXeoUpmboq+XgGkKUBHvFmZ+MchYT2a9emtUNoOzT3zK8Hqi5NkKFumQEIMCx9634F2hBSgFaWNIZXT69mmpQq0DAENLNRu4nvQdN+37pQBoP+t4MEa6C91hbOElYHuT7HRG5mA0Q7ycpj608Vb6EWnlQdqtiQFeKUaBw47JLKvz+QO5wav+wlJTtt7ey466N3XJ/eM7w2qQMqg8qOIAHjslNJK1hkDyg1xRPV0RcEXSOelT5EFCiz7xYrtznMi8vK6nyJqj8DEmmhiKiCR29f7aIKhB0CvU+RXidp4meJFoHf7fyVyHmNeX8D9rAsz7pGEpmUDBUX3jBNdbLsa/uU1l2mTrM6SG9WMafK7z5h6SjbAyBuAKE2g==;\n\t5:tNi0rR1J7fhiJZpHBhb3paRY2gUtu+lIUNusFoGUo7vKhQdN2WBy32kgWLJQamHLqHKkrYN04dbeQoQ2DcsL6tLODyJnje4jcdi7I3pWpShP8Yo9k/rMmwRCvUcza1elKF+g87MVWfRJdVCtDytKGgRVa3UFNITbUj+y+Ye6yhA=;\n\t24:sojI02jueTmkbYvSxcDe/iL+jYOTum1RLDPY72Rc2JBiEXgovg3FMzv3jp0gbX05k/cdG0MI7QHjlVRjQyX2ckfE2xeTIJFxG+Ae8OOl3Cw=",
            "1; MWHPR0701MB3644;\n\t7:EgWJb2YN+kYvt415/DE6Evrg0v4TOgBxhkc4oiyLTY/Ha66TZlZyIus1L3DxkGcOXgCUXZYGScB4dIcA780WHsEDwjTJwSYQQhmK4kYT/2umNkWRjh/aENmpL3sW9mRQB3CiWgP6WQ/OYKnnIiw9ysKV3Tc1uznoeJxkq9LVa32lp+2h8cKTTy7dE2X82a77WeIYZ+PXwwko3YzTl5aVtRHW+URq6RGXRUmTJf7Gddeyz9ypgABKsRtKVDU75dC7"
        ],
        "X-MS-TrafficTypeDiagnostic": "MWHPR0701MB3644:",
        "X-Microsoft-Antispam-PRVS": "<MWHPR0701MB364488334AE9133289F251E0F0AC0@MWHPR0701MB3644.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231221)(944501327)(52105095)(93006095)(6041310)(20161123562045)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011);\n\tSRVR:MWHPR0701MB3644; BCL:0; PCL:0; RULEID:; SRVR:MWHPR0701MB3644; ",
        "X-Forefront-PRVS": "0624A2429E",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(346002)(366004)(39850400004)(396003)(376002)(39380400002)(189003)(199004)(55236004)(36756003)(81166006)(16586007)(68736007)(81156014)(50466002)(6666003)(106356001)(6916009)(53416004)(8676002)(5660300001)(478600001)(105586002)(2906002)(72206003)(50226002)(4326008)(3846002)(6116002)(69596002)(107886003)(48376002)(8936002)(2361001)(316002)(2351001)(97736004)(54906003)(6512007)(26005)(305945005)(42882007)(2616005)(446003)(16526019)(186003)(11346002)(6486002)(59450400001)(47776003)(7736002)(956004)(25786009)(53936002)(386003)(6506007)(51416003)(486005)(52116002)(76176011)(476003)(486005)(66066001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR0701MB3644;\n\tH:hyd1sverma-dt.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords;\n\tMX:1; A:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "I2GnzDjQJrvRUzgrSFAkmDAPCplJJhreACacKSAhuXu+TVeMW5LvTvx5XInl/ZSbh33jpdxNGoTm8qhnDPrAez0HFGSL0v3aFjb/kuJ4IkwWEz1RQKqoWo2nMh7WaGLkHRXm5NIV8zntztzEmaHj3T01qXJAtBDWyRofZ8fDU2ErJdmCoFTVxp1B7JetrFnE",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "27 Mar 2018 12:55:13.3104\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "900a1bf4-53c2-44fa-7fcf-08d593e1fcb8",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MWHPR0701MB3644",
        "Subject": "[dpdk-dev] [PATCH v1 2/3] lib/cryptodev: add asymmetric crypto\n\tcapability in cryptodev",
        "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": "Extend cryptodev with asymmetric capability APIs and\ndefinitions.\n\nSigned-off-by: Shally Verma <shally.verma@caviumnetworks.com>\nSigned-off-by: Sunila Sahu <sunila.sahu@caviumnetworks.com>\nSigned-off-by: Ashish Gupta <ashish.gupta@caviumnetworks.com>\n---\n lib/librte_cryptodev/rte_cryptodev.c           |  96 ++++++++++++++++++++++\n lib/librte_cryptodev/rte_cryptodev.h           | 105 ++++++++++++++++++++++++-\n lib/librte_cryptodev/rte_cryptodev_version.map |   4 +\n 3 files changed, 204 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c\nindex cca8d4cd4..f1e9f7d70 100644\n--- a/lib/librte_cryptodev/rte_cryptodev.c\n+++ b/lib/librte_cryptodev/rte_cryptodev.c\n@@ -166,6 +166,31 @@ rte_crypto_aead_operation_strings[] = {\n \t[RTE_CRYPTO_AEAD_OP_DECRYPT]\t= \"decrypt\"\n };\n \n+/**\n+ * Asymmetric crypto transform operation strings identifiers.\n+ */\n+const char *rte_crypto_asym_xform_strings[] = {\n+\t[RTE_CRYPTO_ASYM_XFORM_NONE]\t= \"none\",\n+\t[RTE_CRYPTO_ASYM_XFORM_RSA]\t= \"rsa\",\n+\t[RTE_CRYPTO_ASYM_XFORM_MODEX]\t= \"modexp\",\n+\t[RTE_CRYPTO_ASYM_XFORM_MODINV]\t= \"modinv\",\n+\t[RTE_CRYPTO_ASYM_XFORM_DH]\t= \"dh\",\n+\t[RTE_CRYPTO_ASYM_XFORM_DSA]\t= \"dsa\",\n+};\n+\n+/**\n+ * Asymmetric crypto operation strings identifiers.\n+ */\n+const char *rte_crypto_asym_op_strings[] = {\n+\t[RTE_CRYPTO_ASYM_OP_ENCRYPT]\t= \"encrypt\",\n+\t[RTE_CRYPTO_ASYM_OP_DECRYPT]\t= \"decrypt\",\n+\t[RTE_CRYPTO_ASYM_OP_SIGN]\t= \"sign\",\n+\t[RTE_CRYPTO_ASYM_OP_VERIFY]\t= \"verify\",\n+\t[RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE]\t= \"priv_key_generate\",\n+\t[RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE] = \"pub_key_generate\",\n+\t[RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE] = \"sharedsecret_compute\",\n+};\n+\n int\n rte_cryptodev_get_cipher_algo_enum(enum rte_crypto_cipher_algorithm *algo_enum,\n \t\tconst char *algo_string)\n@@ -217,6 +242,24 @@ rte_cryptodev_get_aead_algo_enum(enum rte_crypto_aead_algorithm *algo_enum,\n \treturn -1;\n }\n \n+int __rte_experimental\n+rte_cryptodev_get_asym_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,\n+\t\tconst char *xform_string)\n+{\n+\tunsigned int i;\n+\n+\tfor (i = 1; i < RTE_DIM(rte_crypto_asym_xform_strings); i++) {\n+\t\tif (strcmp(xform_string,\n+\t\t\t   rte_crypto_asym_xform_strings[i]) == 0) {\n+\t\t\t*xform_enum = (enum rte_crypto_asym_xform_type) i;\n+\t\t\treturn 0;\n+\t\t}\n+\t}\n+\n+\t/* Invalid string */\n+\treturn -1;\n+}\n+\n /**\n  * The crypto auth operation strings identifiers.\n  * It could be used in application command line.\n@@ -262,6 +305,28 @@ rte_cryptodev_sym_capability_get(uint8_t dev_id,\n \n }\n \n+const struct rte_cryptodev_asymmetric_xfrm_capability * __rte_experimental\n+rte_cryptodev_asym_capability_get(uint8_t dev_id,\n+\t\tconst struct rte_cryptodev_asym_capability_idx *idx)\n+{\n+\tconst struct rte_cryptodev_capabilities *capability;\n+\tstruct rte_cryptodev_info dev_info;\n+\tunsigned int i = 0;\n+\n+\tmemset(&dev_info, 0, sizeof(struct rte_cryptodev_info));\n+\trte_cryptodev_info_get(dev_id, &dev_info);\n+\n+\twhile ((capability = &dev_info.capabilities[i++])->op !=\n+\t\t\tRTE_CRYPTO_OP_TYPE_UNDEFINED) {\n+\t\tif (capability->op != RTE_CRYPTO_OP_TYPE_ASYMMETRIC)\n+\t\t\tcontinue;\n+\n+\t\tif (capability->asym.xform_type == idx->type)\n+\t\t\treturn &capability->asym.xfrm_capa;\n+\t}\n+\treturn NULL;\n+};\n+\n #define param_range_check(x, y) \\\n \t(((x < y.min) || (x > y.max)) || \\\n \t(y.increment != 0 && (x % y.increment) != 0))\n@@ -317,6 +382,37 @@ rte_cryptodev_sym_capability_check_aead(\n \n \treturn 0;\n }\n+int __rte_experimental\n+rte_cryptodev_asym_xfrm_capability_check_optype(\n+\tconst struct rte_cryptodev_asymmetric_xfrm_capability *capability,\n+\tenum rte_crypto_asym_op_type op_type)\n+{\n+\tif (capability->op_types & (1 << op_type))\n+\t\treturn 1;\n+\n+\treturn 0;\n+}\n+\n+int __rte_experimental\n+rte_cryptodev_asym_xfrm_capability_check_modlen(\n+\tconst struct rte_cryptodev_asymmetric_xfrm_capability *capability,\n+\tuint16_t modlen)\n+{\n+\t/* handle special case of 0 which mean PMD define no limit defined */\n+\tif ((capability->modlen.min != 0) &&\n+\t\t((modlen < capability->modlen.min) ||\n+\t\t(capability->modlen.increment != 0 &&\n+\t\t(modlen % (capability->modlen.increment)))))\n+\t\treturn -1;\n+\tif ((capability->modlen.max != 0) &&\n+\t\t((modlen > capability->modlen.max) ||\n+\t\t(capability->modlen.increment != 0 &&\n+\t\t(modlen % (capability->modlen.increment)))))\n+\t\treturn -1;\n+\n+\treturn 0;\n+}\n+\n \n const char *\n rte_cryptodev_get_feature_name(uint64_t flag)\ndiff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h\nindex 68d1ae19e..deae3d656 100644\n--- a/lib/librte_cryptodev/rte_cryptodev.h\n+++ b/lib/librte_cryptodev/rte_cryptodev.h\n@@ -178,6 +178,37 @@ struct rte_cryptodev_symmetric_capability {\n \t};\n };\n \n+/**\n+ * Asymmetric Xform Crypto Capability\n+ *\n+ */\n+struct rte_cryptodev_asymmetric_xfrm_capability {\n+\tenum rte_crypto_asym_xform_type xform_type;\n+\t/**< Transform type: RSA/MODEXP/DH/DSA/MODINV */\n+\n+\tuint32_t op_types;\n+\t/**< bitmask for supported rte_crypto_asym_op_type */\n+\n+\t__extension__\n+\tunion {\n+\t\tstruct rte_crypto_param_range modlen;\n+\t\t/**< Range of modulus length supported by modulus based xform.\n+\t\t * Value 0 mean implementation default\n+\t\t */\n+\t};\n+};\n+\n+/**\n+ * Asymmetric Crypto Capability\n+ *\n+ */\n+struct rte_cryptodev_asymmetric_capability {\n+\tenum rte_crypto_asym_xform_type xform_type;\n+\t/**< Transform type: RSA/MODEXP/DH/DSA/MODINV */\n+\tstruct rte_cryptodev_asymmetric_xfrm_capability xfrm_capa;\n+};\n+\n+\n /** Structure used to capture a capability of a crypto device */\n struct rte_cryptodev_capabilities {\n \tenum rte_crypto_op_type op;\n@@ -187,6 +218,8 @@ struct rte_cryptodev_capabilities {\n \tunion {\n \t\tstruct rte_cryptodev_symmetric_capability sym;\n \t\t/**< Symmetric operation capability parameters */\n+\t\tstruct rte_cryptodev_asymmetric_capability asym;\n+\t\t/**< Asymmetric operation capability parameters */\n \t};\n };\n \n@@ -201,7 +234,17 @@ struct rte_cryptodev_sym_capability_idx {\n };\n \n /**\n- *  Provide capabilities available for defined device and algorithm\n+ * Structure used to describe asymmetric crypto xforms\n+ * Each xform maps to one asym algorithm.\n+ *\n+ */\n+struct rte_cryptodev_asym_capability_idx {\n+\tenum rte_crypto_asym_xform_type type;\n+\t/**< Asymmetric xform (algo) type */\n+};\n+\n+/**\n+ * Provide capabilities available for defined device and algorithm\n  *\n  * @param\tdev_id\t\tThe identifier of the device.\n  * @param\tidx\t\tDescription of crypto algorithms.\n@@ -214,6 +257,20 @@ const struct rte_cryptodev_symmetric_capability *\n rte_cryptodev_sym_capability_get(uint8_t dev_id,\n \t\tconst struct rte_cryptodev_sym_capability_idx *idx);\n \n+/**\n+ *  Provide capabilities available for defined device and algorithm\n+ *\n+ * @param\tdev_id\t\tThe identifier of the device.\n+ * @param\talgo\t\tDescription of crypto algorithms.\n+ *\n+ * @return\n+ *   - Return description of the asymmetric crypto capability if exist.\n+ *   - Return NULL if the capability not exist.\n+ */\n+const struct rte_cryptodev_asymmetric_xfrm_capability * __rte_experimental\n+rte_cryptodev_asym_capability_get(uint8_t dev_id,\n+\t\tconst struct rte_cryptodev_asym_capability_idx *idx);\n+\n /**\n  * Check if key size and initial vector are supported\n  * in crypto cipher capability\n@@ -269,6 +326,36 @@ rte_cryptodev_sym_capability_check_aead(\n \t\tuint16_t key_size, uint16_t digest_size, uint16_t aad_size,\n \t\tuint16_t iv_size);\n \n+/**\n+ * Check if op type is supported\n+ *\n+ * @param\tcapability\tDescription of the asymmetric crypto capability.\n+ * @param\top_type\t\top type\n+ *\n+ * @return\n+ *   - Return 1 if the op type is supported\n+ *   - Return 0 if unsupported\n+ */\n+int __rte_experimental\n+rte_cryptodev_asym_xfrm_capability_check_optype(\n+\tconst struct rte_cryptodev_asymmetric_xfrm_capability *capability,\n+\t\tenum rte_crypto_asym_op_type op_type);\n+\n+/**\n+ * Check if modulus length is in supported range\n+ *\n+ * @param\tcapability\tDescription of the asymmetric crypto capability.\n+ * @param\tmodlen\t\tmodulus length.\n+ *\n+ * @return\n+ *   - Return 0 if the parameters are in range of the capability.\n+ *   - Return -1 if the parameters are out of range of the capability.\n+ */\n+int __rte_experimental\n+rte_cryptodev_asym_xfrm_capability_check_modlen(\n+\tconst struct rte_cryptodev_asymmetric_xfrm_capability *capability,\n+\t\tuint16_t modlen);\n+\n /**\n  * Provide the cipher algorithm enum, given an algorithm string\n  *\n@@ -314,6 +401,22 @@ int\n rte_cryptodev_get_aead_algo_enum(enum rte_crypto_aead_algorithm *algo_enum,\n \t\tconst char *algo_string);\n \n+/**\n+ * Provide the Asymmetric xform enum, given an xform string\n+ *\n+ * @param\txform_enum\tA pointer to the xform type\n+ *\t\t\t\tenum to be filled\n+ * @param\txform_string\txform string\n+ *\n+ * @return\n+ * - Return -1 if string is not valid\n+ * - Return 0 if the string is valid\n+ */\n+int __rte_experimental\n+rte_cryptodev_get_asym_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,\n+\t\tconst char *xform_string);\n+\n+\n /** Macro used at end of crypto PMD list */\n #define RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() \\\n \t{ RTE_CRYPTO_OP_TYPE_UNDEFINED }\ndiff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map\nindex d5bd12a6a..e7cef19f2 100644\n--- a/lib/librte_cryptodev/rte_cryptodev_version.map\n+++ b/lib/librte_cryptodev/rte_cryptodev_version.map\n@@ -89,11 +89,15 @@ DPDK_17.11 {\n EXPERIMENTAL {\n         global:\n \n+\trte_cryptodev_asym_capability_get;\n \trte_cryptodev_asym_session_clear;\n \trte_cryptodev_asym_session_create;\n \trte_cryptodev_asym_session_free;\n \trte_cryptodev_asym_session_init;\n+\trte_cryptodev_asym_xfrm_capability_check_modlen;\n+\trte_cryptodev_asym_xfrm_capability_check_optype;\n \trte_cryptodev_get_asym_session_private_size;\n+\trte_cryptodev_get_asym_xform_enum;\n \n         local: *;\n };\n",
    "prefixes": [
        "dpdk-dev",
        "v1",
        "2/3"
    ]
}