get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 64704,
    "url": "http://patches.dpdk.org/api/patches/64704/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1579092994-15978-5-git-send-email-anoobj@marvell.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": "<1579092994-15978-5-git-send-email-anoobj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1579092994-15978-5-git-send-email-anoobj@marvell.com",
    "date": "2020-01-15T12:56:34",
    "name": "[v2,4/4] app/test: add ECPM tests",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "30a0776a0a651d32a18b5470749b9c57c4bc5a0b",
    "submitter": {
        "id": 1205,
        "url": "http://patches.dpdk.org/api/people/1205/?format=api",
        "name": "Anoob Joseph",
        "email": "anoobj@marvell.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1579092994-15978-5-git-send-email-anoobj@marvell.com/mbox/",
    "series": [
        {
            "id": 8136,
            "url": "http://patches.dpdk.org/api/series/8136/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8136",
            "date": "2020-01-15T12:56:30",
            "name": "add ECPM support",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/8136/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/64704/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/64704/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 80F11A0514;\n\tWed, 15 Jan 2020 13:57:32 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id DF8801C12B;\n\tWed, 15 Jan 2020 13:57:20 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 3CD351C12B\n for <dev@dpdk.org>; Wed, 15 Jan 2020 13:57:19 +0100 (CET)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id\n 00FCtLfK028608; Wed, 15 Jan 2020 04:57:18 -0800",
            "from sc-exch03.marvell.com ([199.233.58.183])\n by mx0b-0016f401.pphosted.com with ESMTP id 2xhrhe26ty-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Wed, 15 Jan 2020 04:57:18 -0800",
            "from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH03.marvell.com\n (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 15 Jan\n 2020 04:57:16 -0800",
            "from maili.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com\n (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend\n Transport; Wed, 15 Jan 2020 04:57:16 -0800",
            "from ajoseph83.caveonetworks.com (unknown [10.29.45.60])\n by maili.marvell.com (Postfix) with ESMTP id D20383F703F;\n Wed, 15 Jan 2020 04:57:12 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0818;\n bh=DEt+jf8JWlcLsCPcg8VIkF52SNk0JiRDfG6fJBgPFCU=;\n b=vqHBfRV0BF4D2kl91NtM01/jdfqbD/lfECgLxWOv8l157ZIN+egwPsPCt1ok1mcLPtrG\n 0gp7cORmuk9XdkYuAf9xHsJE2WYHQqGgQeid2IM3/X8wZC5leJm3czxsyHH/ibtUUMcG\n 29uUeC/qh/g8AbsrsbNfOcYYphYZtyEt2D7u/xbtDN1Z2oWebn2WLbOCDf662uElP3f+\n Mc/9e0lPHgiKpCOiqndYs6RrxtvUW+y9v23IGIptZTYvrV9+eH9LfDJDl7IAHKSKRkhe\n l3CiMyaIW1cchOdPzzmoAW5ShyUcDnTD6RYcABSQvn9a9/tOiIQoARmHCX5XIy9RiVC2 sg==",
        "From": "Anoob Joseph <anoobj@marvell.com>",
        "To": "Akhil Goyal <akhil.goyal@nxp.com>, Declan Doherty\n <declan.doherty@intel.com>, Pablo de Lara <pablo.de.lara.guarch@intel.com>",
        "CC": "Sunila Sahu <ssahu@marvell.com>, Fiona Trahe <fiona.trahe@intel.com>,\n \"Arek Kusztal\" <arkadiuszx.kusztal@intel.com>, Jerin Jacob\n <jerinj@marvell.com>, Narayana Prasad <pathreya@marvell.com>, Shally Verma\n <shallyv@marvell.com>,\n Ankur Dwivedi <adwivedi@marvell.com>, <dev@dpdk.org>,\n Anoob Joseph <anoobj@marvell.com>",
        "Date": "Wed, 15 Jan 2020 18:26:34 +0530",
        "Message-ID": "<1579092994-15978-5-git-send-email-anoobj@marvell.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1579092994-15978-1-git-send-email-anoobj@marvell.com>",
        "References": "<1575560280-3261-1-git-send-email-anoobj@marvell.com>\n <1579092994-15978-1-git-send-email-anoobj@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572\n definitions=2020-01-15_02:2020-01-15,\n 2020-01-14 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v2 4/4] app/test: add ECPM tests",
        "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://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Sunila Sahu <ssahu@marvell.com>\n\nAdd test vectors and verify routines for asymmetric operation, EC Point\nMultiplication.\n\nSigned-off-by: Anoob Joseph <anoobj@marvell.com>\nSigned-off-by: Sunila Sahu <ssahu@marvell.com>\n---\n app/test/test_cryptodev_asym.c              | 176 ++++++++++++++\n app/test/test_cryptodev_asym_util.h         |  11 +\n app/test/test_cryptodev_ecpm_test_vectors.h | 353 ++++++++++++++++++++++++++++\n 3 files changed, 540 insertions(+)\n create mode 100644 app/test/test_cryptodev_ecpm_test_vectors.h",
    "diff": "diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c\nindex 08479bb..b8e0500 100644\n--- a/app/test/test_cryptodev_asym.c\n+++ b/app/test/test_cryptodev_asym.c\n@@ -19,6 +19,7 @@\n #include \"test_cryptodev_dh_test_vectors.h\"\n #include \"test_cryptodev_dsa_test_vectors.h\"\n #include \"test_cryptodev_ecdsa_test_vectors.h\"\n+#include \"test_cryptodev_ecpm_test_vectors.h\"\n #include \"test_cryptodev_mod_test_vectors.h\"\n #include \"test_cryptodev_rsa_test_vectors.h\"\n #include \"test_cryptodev_asym_util.h\"\n@@ -1044,6 +1045,7 @@ static inline void print_asym_capa(\n \t\t\t\t\tcapa->modlen.increment);\n \t\tbreak;\n \t\tcase RTE_CRYPTO_ASYM_XFORM_ECDSA:\n+\t\tcase RTE_CRYPTO_ASYM_XFORM_ECPM:\n \t\tdefault:\n \t\t\tbreak;\n \t\t}\n@@ -2108,6 +2110,179 @@ test_ecdsa_sign_verify_all_curve(void)\n \treturn overall_status;\n }\n \n+static int\n+test_ecpm(enum curve curve_id)\n+{\n+\tstruct crypto_testsuite_params *ts_params = &testsuite_params;\n+\tstruct rte_mempool *sess_mpool = ts_params->session_mpool;\n+\tstruct rte_mempool *op_mpool = ts_params->op_mpool;\n+\tstruct crypto_testsuite_ecpm_params input_params;\n+\tstruct rte_cryptodev_asym_session *sess = NULL;\n+\tuint8_t dev_id = ts_params->valid_devs[0];\n+\tstruct rte_crypto_op *result_op = NULL;\n+\tuint8_t output_buf_x[TEST_DATA_SIZE];\n+\tuint8_t output_buf_y[TEST_DATA_SIZE];\n+\tstruct rte_crypto_asym_xform xform;\n+\tstruct rte_crypto_asym_op *asym_op;\n+\tstruct rte_cryptodev_info dev_info;\n+\tstruct rte_crypto_op *op = NULL;\n+\tint status = TEST_SUCCESS, ret;\n+\n+\tswitch (curve_id) {\n+\tcase SECP192R1:\n+\t\tinput_params = ecpm_param_secp192r1;\n+\t\tbreak;\n+\tcase SECP224R1:\n+\t\tinput_params = ecpm_param_secp224r1;\n+\t\tbreak;\n+\tcase SECP256R1:\n+\t\tinput_params = ecpm_param_secp256r1;\n+\t\tbreak;\n+\tcase SECP384R1:\n+\t\tinput_params = ecpm_param_secp384r1;\n+\t\tbreak;\n+\tcase SECP521R1:\n+\t\tinput_params = ecpm_param_secp521r1;\n+\t\tbreak;\n+\tdefault:\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Unsupported curve id\\n\");\n+\t\tstatus = TEST_FAILED;\n+\t\tgoto exit;\n+\t}\n+\n+\trte_cryptodev_info_get(dev_id, &dev_info);\n+\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n+\tif (sess == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Session creation failed\\n\");\n+\t\tstatus = TEST_FAILED;\n+\t\tgoto exit;\n+\t}\n+\n+\t/* Setup crypto op data structure */\n+\top = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC);\n+\tif (op == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Failed to allocate asymmetric crypto \"\n+\t\t\t\t\"operation struct\\n\");\n+\t\tstatus = TEST_FAILED;\n+\t\tgoto exit;\n+\t}\n+\tasym_op = op->asym;\n+\n+\t/* Setup asym xform */\n+\txform.next = NULL;\n+\txform.xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM;\n+\txform.ec.curve_id = input_params.curve;\n+\n+\tif (rte_cryptodev_asym_session_init(dev_id, sess, &xform,\n+\t\t\t\tsess_mpool) < 0) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Unable to config asym session\\n\");\n+\t\tstatus = TEST_FAILED;\n+\t\tgoto exit;\n+\t}\n+\n+\t/* Attach asymmetric crypto session to crypto operations */\n+\trte_crypto_op_attach_asym_session(op, sess);\n+\n+\t/* Populate op with operational details */\n+\top->asym->ecpm.p.x.data = input_params.gen_x.data;\n+\top->asym->ecpm.p.x.length = input_params.gen_x.length;\n+\top->asym->ecpm.p.y.data = input_params.gen_y.data;\n+\top->asym->ecpm.p.y.length = input_params.gen_y.length;\n+\top->asym->ecpm.scalar.data = input_params.privkey.data;\n+\top->asym->ecpm.scalar.length = input_params.privkey.length;\n+\n+\t/* Init out buf */\n+\top->asym->ecpm.r.x.data = output_buf_x;\n+\top->asym->ecpm.r.y.data = output_buf_y;\n+\n+\tRTE_LOG(DEBUG, USER1, \"Process ASYM operation\\n\");\n+\n+\t/* Process crypto operation */\n+\tif (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Error sending packet for operation\\n\");\n+\t\tstatus = TEST_FAILED;\n+\t\tgoto exit;\n+\t}\n+\n+\twhile (rte_cryptodev_dequeue_burst(dev_id, 0, &result_op, 1) == 0)\n+\t\trte_pause();\n+\n+\tif (result_op == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Failed to process asym crypto op\\n\");\n+\t\tstatus = TEST_FAILED;\n+\t\tgoto exit;\n+\t}\n+\n+\tif (result_op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Failed to process asym crypto op\\n\");\n+\t\tstatus = TEST_FAILED;\n+\t\tgoto exit;\n+\t}\n+\n+\tasym_op = result_op->asym;\n+\n+\tdebug_hexdump(stdout, \"r x:\",\n+\t\t\tasym_op->ecpm.r.x.data, asym_op->ecpm.r.x.length);\n+\tdebug_hexdump(stdout, \"r y:\",\n+\t\t\tasym_op->ecpm.r.y.data, asym_op->ecpm.r.y.length);\n+\n+\tret = verify_ecpm(input_params.pubkey_x.data,\n+\t\t\t\tinput_params.pubkey_y.data, result_op);\n+\tif (ret) {\n+\t\tstatus = TEST_FAILED;\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"EC Point Multiplication failed.\\n\");\n+\t\tgoto exit;\n+\t}\n+\n+exit:\n+\tif (sess != NULL) {\n+\t\trte_cryptodev_asym_session_clear(dev_id, sess);\n+\t\trte_cryptodev_asym_session_free(sess);\n+\t}\n+\tif (op != NULL)\n+\t\trte_crypto_op_free(op);\n+\treturn status;\n+}\n+\n+static int\n+test_ecpm_all_curve(void)\n+{\n+\tint status, overall_status = TEST_SUCCESS;\n+\tenum curve curve_id;\n+\tint test_index = 0;\n+\tconst char *msg;\n+\n+\tfor (curve_id = SECP192R1; curve_id < END_OF_CURVE_LIST; curve_id++) {\n+\t\tstatus = test_ecpm(curve_id);\n+\t\tif (status == TEST_SUCCESS) {\n+\t\t\tmsg = \"succeeded\";\n+\t\t} else {\n+\t\t\tmsg = \"failed\";\n+\t\t\toverall_status = status;\n+\t\t}\n+\t\tprintf(\"  %u) TestCase EC Point Mul Curve %s  %s\\n\",\n+\t\t       test_index ++, curve[curve_id], msg);\n+\t}\n+\treturn overall_status;\n+}\n+\n static struct unit_test_suite cryptodev_openssl_asym_testsuite  = {\n \t.suite_name = \"Crypto Device OPENSSL ASYM Unit Test Suite\",\n \t.setup = testsuite_setup,\n@@ -2148,6 +2323,7 @@ static struct unit_test_suite cryptodev_octeontx_asym_testsuite  = {\n \t\tTEST_CASE_ST(ut_setup, ut_teardown, test_mod_exp),\n \t\tTEST_CASE_ST(ut_setup, ut_teardown,\n \t\t\t     test_ecdsa_sign_verify_all_curve),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_ecpm_all_curve),\n \t\tTEST_CASES_END() /**< NULL terminate unit test array */\n \t}\n };\ndiff --git a/app/test/test_cryptodev_asym_util.h b/app/test/test_cryptodev_asym_util.h\nindex bddeda0..83dc265 100644\n--- a/app/test/test_cryptodev_asym_util.h\n+++ b/app/test/test_cryptodev_asym_util.h\n@@ -46,4 +46,15 @@ static inline int verify_ecdsa_sign(uint8_t *sign_r,\n \treturn 0;\n }\n \n+static inline int verify_ecpm(uint8_t *result_x, uint8_t *result_y,\n+\t\t\t      struct rte_crypto_op *result_op)\n+{\n+\tif (memcmp(result_x, result_op->asym->ecpm.r.x.data,\n+\t\t   result_op->asym->ecpm.r.x.length) ||\n+\t\t   memcmp(result_y, result_op->asym->ecpm.r.y.data,\n+\t\t   result_op->asym->ecpm.r.y.length))\n+\t\treturn -1;\n+\n+\treturn 0;\n+}\n #endif /* TEST_CRYPTODEV_ASYM_TEST_UTIL_H__ */\ndiff --git a/app/test/test_cryptodev_ecpm_test_vectors.h b/app/test/test_cryptodev_ecpm_test_vectors.h\nnew file mode 100644\nindex 0000000..ade106c\n--- /dev/null\n+++ b/app/test/test_cryptodev_ecpm_test_vectors.h\n@@ -0,0 +1,353 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (C) 2020 Marvell International Ltd.\n+ */\n+\n+#ifndef __TEST_CRYPTODEV_ECPM_TEST_VECTORS_H__\n+#define __TEST_CRYPTODEV_ECPM_TEST_VECTORS_H__\n+\n+#include \"rte_crypto_asym.h\"\n+\n+struct crypto_testsuite_ecpm_params {\n+\trte_crypto_param gen_x;\n+\trte_crypto_param gen_y;\n+\trte_crypto_param privkey;\n+\trte_crypto_param pubkey_x;\n+\trte_crypto_param pubkey_y;\n+\tint curve;\n+};\n+\n+/* SECP192R1 (P-192 NIST) test vectors */\n+\n+static uint8_t gen_x_secp192r1[] = {\n+\t0x18, 0x8d, 0xa8, 0x0e, 0xb0, 0x30, 0x90, 0xf6,\n+\t0x7c, 0xbf, 0x20, 0xeb, 0x43, 0xa1, 0x88, 0x00,\n+\t0xf4, 0xff, 0x0a, 0xfd, 0x82, 0xff, 0x10, 0x12\n+};\n+\n+static uint8_t gen_y_secp192r1[] = {\n+\t0x07, 0x19, 0x2b, 0x95, 0xff, 0xc8, 0xda, 0x78,\n+\t0x63, 0x10, 0x11, 0xed, 0x6b, 0x24, 0xcd, 0xd5,\n+\t0x73, 0xf9, 0x77, 0xa1, 0x1e, 0x79, 0x48, 0x11\n+};\n+\n+static uint8_t privkey_secp192r1[] = {\n+\t0x24, 0xed, 0xd2, 0x2f, 0x7d, 0xdd, 0x6f, 0xa5,\n+\t0xbc, 0x61, 0xfc, 0x06, 0x53, 0x47, 0x9a, 0xa4,\n+\t0x08, 0x09, 0xef, 0x86, 0x5c, 0xf2, 0x7a, 0x47\n+};\n+static uint8_t pubkey_x_secp192r1[] = {\n+\t0x9b, 0xf1, 0x2d, 0x71, 0x74, 0xb7, 0x70, 0x8a,\n+\t0x07, 0x6a, 0x38, 0xbc, 0x80, 0xaa, 0x28, 0x66,\n+\t0x2f, 0x25, 0x1e, 0x2e, 0xd8, 0xd4, 0x14, 0xdc\n+};\n+\n+static uint8_t pubkey_y_secp192r1[] = {\n+\t0x48, 0x54, 0xc8, 0xd0, 0x7d, 0xfc, 0x08, 0x82,\n+\t0x4e, 0x9e, 0x47, 0x1c, 0xa2, 0xfe, 0xdc, 0xfc,\n+\t0xff, 0x3d, 0xdc, 0xb0, 0x11, 0x57, 0x34, 0x98\n+};\n+\n+struct crypto_testsuite_ecpm_params ecpm_param_secp192r1 = {\n+\t.gen_x = {\n+\t\t.data = gen_x_secp192r1,\n+\t\t.length = sizeof(gen_x_secp192r1),\n+\t},\n+\t.gen_y = {\n+\t\t.data = gen_y_secp192r1,\n+\t\t.length = sizeof(gen_y_secp192r1),\n+\t},\n+\t.privkey = {\n+\t\t.data = privkey_secp192r1,\n+\t\t.length = sizeof(privkey_secp192r1),\n+\t},\n+\t.pubkey_x = {\n+\t\t.data = pubkey_x_secp192r1,\n+\t\t.length = sizeof(pubkey_x_secp192r1),\n+\t},\n+\t.pubkey_y = {\n+\t\t.data = pubkey_y_secp192r1,\n+\t\t.length = sizeof(pubkey_y_secp192r1),\n+\t},\n+\t.curve = RTE_CRYPTO_EC_GROUP_SECP192R1\n+};\n+\n+/* SECP224R1 (P-224 NIST) test vectors */\n+\n+static uint8_t gen_x_secp224r1[] = {\n+\t0xb7, 0x0e, 0x0c, 0xbd, 0x6b, 0xb4, 0xbf, 0x7f,\n+\t0x32, 0x13, 0x90, 0xb9, 0x4a, 0x03, 0xc1, 0xd3,\n+\t0x56, 0xc2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xd6,\n+\t0x11, 0x5c, 0x1d, 0x21\n+};\n+\n+static uint8_t gen_y_secp224r1[] = {\n+\t0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb,\n+\t0x4c, 0x22, 0xdf, 0xe6, 0xcd, 0x43, 0x75, 0xa0,\n+\t0x5a, 0x07, 0x47, 0x64, 0x44, 0xd5, 0x81, 0x99,\n+\t0x85, 0x00, 0x7e, 0x34\n+};\n+\n+static uint8_t privkey_secp224r1[] = {\n+\t0x88, 0x8f, 0xc9, 0x92, 0x89, 0x3b, 0xdd, 0x8a,\n+\t0xa0, 0x2c, 0x80, 0x76, 0x88, 0x32, 0x60, 0x5d,\n+\t0x02, 0x0b, 0x81, 0xae, 0x0b, 0x25, 0x47, 0x41,\n+\t0x54, 0xec, 0x89, 0xaa\n+};\n+\n+static uint8_t pubkey_x_secp224r1[] = {\n+\t0x4c, 0x74, 0x1e, 0x4d, 0x20, 0x10, 0x36, 0x70,\n+\t0xb7, 0x16, 0x1a, 0xe7, 0x22, 0x71, 0x08, 0x21,\n+\t0x55, 0x83, 0x84, 0x18, 0x08, 0x43, 0x35, 0x33,\n+\t0x8a, 0xc3, 0x8f, 0xa4\n+};\n+\n+static uint8_t pubkey_y_secp224r1[] = {\n+\t0xdb, 0x79, 0x19, 0x15, 0x1a, 0xc2, 0x85, 0x87,\n+\t0xb7, 0x2b, 0xad, 0x7a, 0xb1, 0x80, 0xec, 0x8e,\n+\t0x95, 0xab, 0x9e, 0x2c, 0x8d, 0x81, 0xd9, 0xb9,\n+\t0xd7, 0xe2, 0xe3, 0x83\n+};\n+\n+struct crypto_testsuite_ecpm_params ecpm_param_secp224r1 = {\n+\t.gen_x = {\n+\t\t.data = gen_x_secp224r1,\n+\t\t.length = sizeof(gen_x_secp224r1),\n+\t},\n+\t.gen_y = {\n+\t\t.data = gen_y_secp224r1,\n+\t\t.length = sizeof(gen_y_secp224r1),\n+\t},\n+\t.privkey = {\n+\t\t.data = privkey_secp224r1,\n+\t\t.length = sizeof(privkey_secp224r1),\n+\t},\n+\t.pubkey_x = {\n+\t\t.data = pubkey_x_secp224r1,\n+\t\t.length = sizeof(pubkey_x_secp224r1),\n+\t},\n+\t.pubkey_y = {\n+\t\t.data = pubkey_y_secp224r1,\n+\t\t.length = sizeof(pubkey_y_secp224r1),\n+\t},\n+\t.curve = RTE_CRYPTO_EC_GROUP_SECP224R1\n+};\n+\n+/* SECP256R1 (P-256 NIST) test vectors */\n+\n+static uint8_t gen_x_secp256r1[] = {\n+\t0x6b, 0x17, 0xd1, 0xf2, 0xe1, 0x2c, 0x42, 0x47,\n+\t0xf8, 0xbc, 0xe6, 0xe5, 0x63, 0xa4, 0x40, 0xf2,\n+\t0x77, 0x03, 0x7d, 0x81, 0x2d, 0xeb, 0x33, 0xa0,\n+\t0xf4, 0xa1, 0x39, 0x45, 0xd8, 0x98, 0xc2, 0x96\n+};\n+\n+static uint8_t gen_y_secp256r1[] = {\n+\t0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b,\n+\t0x8e, 0xe7, 0xeb, 0x4a, 0x7c, 0x0f, 0x9e, 0x16,\n+\t0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce,\n+\t0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5\n+};\n+\n+static uint8_t pubkey_x_secp256r1[] = {\n+\t0x06, 0x27, 0x5d, 0x38, 0x7b, 0x8f, 0xcd, 0x29,\n+\t0x12, 0x02, 0xa5, 0xad, 0x72, 0x35, 0x55, 0xd4,\n+\t0xe1, 0xca, 0xd6, 0x32, 0x91, 0xe7, 0x8c, 0xb7,\n+\t0xf9, 0x85, 0xfe, 0xb5, 0xca, 0x61, 0xfd, 0xa7,\n+};\n+\n+static uint8_t pubkey_y_secp256r1[] = {\n+\t0x6d, 0x28, 0x17, 0x9c, 0x88, 0x2a, 0x06, 0x8c,\n+\t0x85, 0x52, 0x44, 0xc1, 0x2f, 0xf6, 0x45, 0x80,\n+\t0x63, 0x1c, 0x52, 0xe4, 0xa5, 0xf8, 0x21, 0x43,\n+\t0xec, 0xeb, 0xe2, 0xbb, 0x39, 0xff, 0x1f, 0xd8\n+};\n+\n+static uint8_t privkey_secp256r1[] = {\n+\t0x36, 0xf7, 0xe3, 0x07, 0x84, 0xfa, 0xb5, 0x8d,\n+\t0x8d, 0x1d, 0x00, 0x21, 0x8b, 0x59, 0xd1, 0x70,\n+\t0x14, 0x94, 0x86, 0x69, 0xec, 0xd3, 0x99, 0xc8,\n+\t0x7a, 0xf0, 0x2d, 0x05, 0xbf, 0x16, 0xed, 0x36\n+};\n+\n+struct crypto_testsuite_ecpm_params ecpm_param_secp256r1 = {\n+\t.gen_x = {\n+\t\t.data = gen_x_secp256r1,\n+\t\t.length = sizeof(gen_x_secp256r1),\n+\t},\n+\t.gen_y = {\n+\t\t.data = gen_y_secp256r1,\n+\t\t.length = sizeof(gen_y_secp256r1),\n+\t},\n+\t.privkey = {\n+\t\t.data = privkey_secp256r1,\n+\t\t.length = sizeof(privkey_secp256r1),\n+\t},\n+\t.pubkey_x = {\n+\t\t.data = pubkey_x_secp256r1,\n+\t\t.length = sizeof(pubkey_x_secp256r1),\n+\t},\n+\t.pubkey_y = {\n+\t\t.data = pubkey_y_secp256r1,\n+\t\t.length = sizeof(pubkey_y_secp256r1),\n+\t},\n+\t.curve = RTE_CRYPTO_EC_GROUP_SECP256R1\n+};\n+\n+/* SECP384R1 (P-384 NIST) test vectors */\n+\n+static uint8_t gen_x_secp384r1[] = {\n+\t0xAA, 0x87, 0xCA, 0x22, 0xBE, 0x8B, 0x05, 0x37,\n+\t0x8E, 0xB1, 0xC7, 0x1E, 0xF3, 0x20, 0xAD, 0x74,\n+\t0x6E, 0x1D, 0x3B, 0x62, 0x8B, 0xA7, 0x9B, 0x98,\n+\t0x59, 0xF7, 0x41, 0xE0, 0x82, 0x54, 0x2A, 0x38,\n+\t0x55, 0x02, 0xF2, 0x5D, 0xBF, 0x55, 0x29, 0x6C,\n+\t0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7\n+};\n+\n+static uint8_t gen_y_secp384r1[] = {\n+\t0x36, 0x17, 0xDE, 0x4A, 0x96, 0x26, 0x2C, 0x6F,\n+\t0x5D, 0x9E, 0x98, 0xBF, 0x92, 0x92, 0xDC, 0x29,\n+\t0xF8, 0xF4, 0x1D, 0xBD, 0x28, 0x9A, 0x14, 0x7C,\n+\t0xE9, 0xDA, 0x31, 0x13, 0xB5, 0xF0, 0xB8, 0xC0,\n+\t0x0A, 0x60, 0xB1, 0xCE, 0x1D, 0x7E, 0x81, 0x9D,\n+\t0x7A, 0x43, 0x1D, 0x7C, 0x90, 0xEA, 0x0E, 0x5F\n+};\n+\n+static uint8_t privkey_secp384r1[] = {\n+\t0xc6, 0x02, 0xbc, 0x74, 0xa3, 0x45, 0x92, 0xc3,\n+\t0x11, 0xa6, 0x56, 0x96, 0x61, 0xe0, 0x83, 0x2c,\n+\t0x84, 0xf7, 0x20, 0x72, 0x74, 0x67, 0x6c, 0xc4,\n+\t0x2a, 0x89, 0xf0, 0x58, 0x16, 0x26, 0x30, 0x18,\n+\t0x4b, 0x52, 0xf0, 0xd9, 0x9b, 0x85, 0x5a, 0x77,\n+\t0x83, 0xc9, 0x87, 0x47, 0x6d, 0x7f, 0x9e, 0x6b\n+};\n+\n+static uint8_t pubkey_x_secp384r1[] = {\n+\t0x04, 0x00, 0x19, 0x3b, 0x21, 0xf0, 0x7c, 0xd0,\n+\t0x59, 0x82, 0x6e, 0x94, 0x53, 0xd3, 0xe9, 0x6d,\n+\t0xd1, 0x45, 0x04, 0x1c, 0x97, 0xd4, 0x9f, 0xf6,\n+\t0xb7, 0x04, 0x7f, 0x86, 0xbb, 0x0b, 0x04, 0x39,\n+\t0xe9, 0x09, 0x27, 0x4c, 0xb9, 0xc2, 0x82, 0xbf,\n+\t0xab, 0x88, 0x67, 0x4c, 0x07, 0x65, 0xbc, 0x75\n+};\n+\n+static uint8_t pubkey_y_secp384r1[] = {\n+\t0xf7, 0x0d, 0x89, 0xc5, 0x2a, 0xcb, 0xc7, 0x04,\n+\t0x68, 0xd2, 0xc5, 0xae, 0x75, 0xc7, 0x6d, 0x7f,\n+\t0x69, 0xb7, 0x6a, 0xf6, 0x2d, 0xcf, 0x95, 0xe9,\n+\t0x9e, 0xba, 0x5d, 0xd1, 0x1a, 0xdf, 0x8f, 0x42,\n+\t0xec, 0x9a, 0x42, 0x5b, 0x0c, 0x5e, 0xc9, 0x8e,\n+\t0x2f, 0x23, 0x4a, 0x92, 0x6b, 0x82, 0xa1, 0x47\n+};\n+\n+struct crypto_testsuite_ecpm_params ecpm_param_secp384r1 = {\n+\t.gen_x = {\n+\t\t.data = gen_x_secp384r1,\n+\t\t.length = sizeof(gen_x_secp384r1),\n+\t},\n+\t.gen_y = {\n+\t\t.data = gen_y_secp384r1,\n+\t\t.length = sizeof(gen_y_secp384r1),\n+\t},\n+\t.privkey = {\n+\t\t.data = privkey_secp384r1,\n+\t\t.length = sizeof(privkey_secp384r1),\n+\t},\n+\t.pubkey_x = {\n+\t\t.data = pubkey_x_secp384r1,\n+\t\t.length = sizeof(pubkey_x_secp384r1),\n+\t},\n+\t.pubkey_y = {\n+\t\t.data = pubkey_y_secp384r1,\n+\t\t.length = sizeof(pubkey_y_secp384r1),\n+\t},\n+\t.curve = RTE_CRYPTO_EC_GROUP_SECP384R1\n+};\n+\n+/* SECP521R1 (P-521 NIST) test vectors */\n+\n+static uint8_t gen_x_secp521r1[] = {\n+\t0xc6, 0x85, 0x8e, 0x06, 0xb7, 0x04, 0x04,\n+\t0xe9, 0xcd, 0x9e, 0x3e, 0xcb, 0x66, 0x23, 0x95,\n+\t0xb4, 0x42, 0x9c, 0x64, 0x81, 0x39, 0x05, 0x3f,\n+\t0xb5, 0x21, 0xf8, 0x28, 0xaf, 0x60, 0x6b, 0x4d,\n+\t0x3d, 0xba, 0xa1, 0x4b, 0x5e, 0x77, 0xef, 0xe7,\n+\t0x59, 0x28, 0xfe, 0x1d, 0xc1, 0x27, 0xa2, 0xff,\n+\t0xa8, 0xde, 0x33, 0x48, 0xb3, 0xc1, 0x85, 0x6a,\n+\t0x42, 0x9b, 0xf9, 0x7e, 0x7e, 0x31, 0xc2, 0xe5,\n+\t0xbd, 0x66\n+};\n+\n+static uint8_t gen_y_secp521r1[] = {\n+\t0x01, 0x18, 0x39, 0x29, 0x6a, 0x78, 0x9a, 0x3b,\n+\t0xc0, 0x04, 0x5c, 0x8a, 0x5f, 0xb4, 0x2c, 0x7d,\n+\t0x1b, 0xd9, 0x98, 0xf5, 0x44, 0x49, 0x57, 0x9b,\n+\t0x44, 0x68, 0x17, 0xaf, 0xbd, 0x17, 0x27, 0x3e,\n+\t0x66, 0x2c, 0x97, 0xee, 0x72, 0x99, 0x5e, 0xf4,\n+\t0x26, 0x40, 0xc5, 0x50, 0xb9, 0x01, 0x3f, 0xad,\n+\t0x07, 0x61, 0x35, 0x3c, 0x70, 0x86, 0xa2, 0x72,\n+\t0xc2, 0x40, 0x88, 0xbe, 0x94, 0x76, 0x9f, 0xd1,\n+\t0x66, 0x50\n+};\n+\n+static uint8_t privkey_secp521r1[] = {\n+\t0x01, 0xe8, 0xc0, 0x59, 0x96, 0xb8, 0x5e, 0x6f,\n+\t0x3f, 0x87, 0x57, 0x12, 0xa0, 0x9c, 0x1b, 0x40,\n+\t0x67, 0x2b, 0x5e, 0x7a, 0x78, 0xd5, 0x85, 0x2d,\n+\t0xe0, 0x15, 0x85, 0xc5, 0xfb, 0x99, 0x0b, 0xf3,\n+\t0x81, 0x2c, 0x32, 0x45, 0x53, 0x4a, 0x71, 0x43,\n+\t0x89, 0xae, 0x90, 0x14, 0xd6, 0x77, 0xa4, 0x49,\n+\t0xef, 0xd6, 0x58, 0x25, 0x4e, 0x61, 0x0d, 0xa8,\n+\t0xe6, 0xca, 0xd3, 0x34, 0x14, 0xb9, 0xd3, 0x3e,\n+\t0x0d, 0x7a\n+};\n+\n+static uint8_t pubkey_x_secp521r1[] = {\n+\t0x00, 0x7d, 0x04, 0x2c, 0xa1, 0x94, 0x08, 0x52,\n+\t0x4e, 0x68, 0xb9, 0x81, 0xf1, 0x41, 0x93, 0x51,\n+\t0xe3, 0xb8, 0x47, 0x36, 0xc7, 0x7f, 0xe5, 0x8f,\n+\t0xee, 0x7d, 0x11, 0x31, 0x7d, 0xf2, 0xe8, 0x50,\n+\t0xd9, 0x60, 0xc7, 0xdd, 0x10, 0xd1, 0x0b, 0xa7,\n+\t0x14, 0xc8, 0xa6, 0x09, 0xd1, 0x63, 0x50, 0x2b,\n+\t0x79, 0xd6, 0x82, 0xe8, 0xbb, 0xec, 0xd4, 0xf5,\n+\t0x25, 0x91, 0xd2, 0x74, 0x85, 0x33, 0xe4, 0x5a,\n+\t0x86, 0x7a\n+};\n+\n+static uint8_t pubkey_y_secp521r1[] = {\n+\t0x01, 0x97, 0xac, 0x64, 0x16, 0x11, 0x1c, 0xcf,\n+\t0x98, 0x7d, 0x29, 0x04, 0x59, 0xeb, 0xc8, 0xad,\n+\t0x9e, 0xc5, 0x6e, 0x49, 0x05, 0x9c, 0x99, 0x21,\n+\t0x55, 0x53, 0x9a, 0x36, 0xa6, 0x26, 0x63, 0x1f,\n+\t0x4a, 0x2d, 0x89, 0x16, 0x4b, 0x98, 0x51, 0x54,\n+\t0xf2, 0xdd, 0xdc, 0x02, 0x81, 0xee, 0x5b, 0x51,\n+\t0x78, 0x27, 0x1f, 0x3a, 0x76, 0xa0, 0x91, 0x4c,\n+\t0x3f, 0xcd, 0x1f, 0x97, 0xbe, 0x8e, 0x83, 0x76,\n+\t0xef, 0xb3\n+};\n+\n+struct crypto_testsuite_ecpm_params ecpm_param_secp521r1 = {\n+\t.gen_x = {\n+\t\t.data = gen_x_secp521r1,\n+\t\t.length = sizeof(gen_x_secp521r1),\n+\t},\n+\t.gen_y = {\n+\t\t.data = gen_y_secp521r1,\n+\t\t.length = sizeof(gen_y_secp521r1),\n+\t},\n+\t.privkey = {\n+\t\t.data = privkey_secp521r1,\n+\t\t.length = sizeof(privkey_secp521r1),\n+\t},\n+\t.pubkey_x = {\n+\t\t.data = pubkey_x_secp521r1,\n+\t\t.length = sizeof(pubkey_x_secp521r1),\n+\t},\n+\t.pubkey_y = {\n+\t\t.data = pubkey_y_secp521r1,\n+\t\t.length = sizeof(pubkey_y_secp521r1),\n+\t},\n+\t.curve = RTE_CRYPTO_EC_GROUP_SECP521R1\n+};\n+\n+#endif /* __TEST_CRYPTODEV_ECPM_TEST_VECTORS_H__ */\n",
    "prefixes": [
        "v2",
        "4/4"
    ]
}