get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 112052,
    "url": "http://patches.dpdk.org/api/patches/112052/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/39e2c589c8611f8b67b9705587197fc408eef971.1653913201.git.gmuthukrishn@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": "<39e2c589c8611f8b67b9705587197fc408eef971.1653913201.git.gmuthukrishn@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/39e2c589c8611f8b67b9705587197fc408eef971.1653913201.git.gmuthukrishn@marvell.com",
    "date": "2022-05-30T12:23:24",
    "name": "[v8,04/10] examples/fips_validation: allow json file as input",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2accf173e1c4c8c3bb97e52bc0e4b4b460654fa0",
    "submitter": {
        "id": 2301,
        "url": "http://patches.dpdk.org/api/people/2301/?format=api",
        "name": "Gowrishankar Muthukrishnan",
        "email": "gmuthukrishn@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/39e2c589c8611f8b67b9705587197fc408eef971.1653913201.git.gmuthukrishn@marvell.com/mbox/",
    "series": [
        {
            "id": 23241,
            "url": "http://patches.dpdk.org/api/series/23241/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=23241",
            "date": "2022-05-30T12:23:20",
            "name": "Add JSON vector set support to fips validation",
            "version": 8,
            "mbox": "http://patches.dpdk.org/series/23241/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/112052/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/112052/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 22BFFA00C4;\n\tMon, 30 May 2022 14:24:12 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 9DF5E42B94;\n\tMon, 30 May 2022 14:24:01 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id D2A2C42B9F\n for <dev@dpdk.org>; Mon, 30 May 2022 14:23:59 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id\n 24UCGL3s010101;\n Mon, 30 May 2022 05:23:59 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3gbk8n5c7v-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Mon, 30 May 2022 05:23:59 -0700",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18;\n Mon, 30 May 2022 05:23:56 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend\n Transport; Mon, 30 May 2022 05:23:56 -0700",
            "from localhost.localdomain (unknown [10.28.34.38])\n by maili.marvell.com (Postfix) with ESMTP id DF8713F7081;\n Mon, 30 May 2022 05:23:53 -0700 (PDT)"
        ],
        "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=pfpt0220;\n bh=3L9BvjtMQA5PMdI17sBJGBPIwD6OhNXMF6vl2LGszMs=;\n b=Ek7UaFLAJ0KAwKwyBkg6XQ59ScpkuueGB+JGbnVuFCOMKc78R4cNXAHUaRjaQepTMNzj\n j9jcysqs8iQIn/ZSBg4yuagR3VY+L+yUBI6PX02/2EBMB7i50VuC8+JUtjIvZwHzvOf1\n t5bUHKXeXi0aao1QzdctVSZdz1dqUwNpfFpGPcIEe9O6A4FUkQ1rT70B7BzG2xUI8zHS\n QLqRD93rUugUeCi3fwkZBSVRMY9NptDrHpObuMmqs+UbwOl6Kowq2kFqk+bYCHcvPXoL\n ObO6f5tUOOT4UjA6sr1uFuDiR7MHLzCa2RkNzV+ep9MdKskSTa6TAqOKzDqVEEogipcW ow==",
        "From": "Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "Fan Zhang <roy.fan.zhang@intel.com>, Brian Dooley\n <brian.dooley@intel.com>, <lylavoie@iol.unh.edu>, Anoob Joseph\n <anoobj@marvell.com>, Archana Muniganti <marchana@marvell.com>, Jerin Jacob\n <jerinj@marvell.com>, Brandon Lo <blo@iol.unh.edu>, \"Gowrishankar\n Muthukrishnan\" <gmuthukrishn@marvell.com>",
        "Subject": "[v8, 04/10] examples/fips_validation: allow json file as input",
        "Date": "Mon, 30 May 2022 17:53:24 +0530",
        "Message-ID": "\n <39e2c589c8611f8b67b9705587197fc408eef971.1653913201.git.gmuthukrishn@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<cover.1653913201.git.gmuthukrishn@marvell.com>",
        "References": "<cover.1653913201.git.gmuthukrishn@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "96G8BTfu3hB8H4T_ezazVfRgZrvBSlUJ",
        "X-Proofpoint-GUID": "96G8BTfu3hB8H4T_ezazVfRgZrvBSlUJ",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.205,Aquarius:18.0.874,Hydra:6.0.486,FMLib:17.11.64.514\n definitions=2022-05-30_04,2022-05-30_01,2022-02-23_01",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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"
    },
    "content": "From: Brandon Lo <blo@iol.unh.edu>\n\nAdded the ability to use the json format as the input\nand output of the example application.\n\nSigned-off-by: Brandon Lo <blo@iol.unh.edu>\nSigned-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>\n--\nv8:\n* dont steal refcount on write_set using _new as latter is updated\n  subsequently in same function.\n* fix fips_test_one_test_case to handle error code hence avoid\n  incorrect test data in response file since a test run for json\n  req file.\n* Do not show bypass string in response for json file test.\n\nv5:\n* fix to check info.file_type in json file type as well.\n\nv3:\n* fix checkpatch warnings\n\nv2:\n* remove use_json variable\n---\n examples/fips_validation/main.c | 206 +++++++++++++++++++++++++++++++-\n 1 file changed, 203 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/examples/fips_validation/main.c b/examples/fips_validation/main.c\nindex 11db983ab0..5bebff853e 100644\n--- a/examples/fips_validation/main.c\n+++ b/examples/fips_validation/main.c\n@@ -34,6 +34,8 @@ enum {\n \tOPT_CRYPTODEV_BK_ID_NUM,\n #define OPT_CRYPTODEV_BK_DIR_KEY    \"broken-test-dir\"\n \tOPT_CRYPTODEV_BK_DIR_KEY_NUM,\n+#define OPT_USE_JSON                \"use-json\"\n+\tOPT_USE_JSON_NUM,\n };\n \n struct fips_test_vector vec;\n@@ -170,6 +172,11 @@ cryptodev_fips_validate_app_uninit(void)\n static int\n fips_test_one_file(void);\n \n+#ifdef RTE_HAS_JANSSON\n+static int\n+fips_test_one_json_file(void);\n+#endif /* RTE_HAS_JANSSON */\n+\n static int\n parse_cryptodev_arg(char *arg)\n {\n@@ -429,8 +436,17 @@ main(int argc, char *argv[])\n \t\t\tgoto exit;\n \t\t}\n \n-\n+#ifdef RTE_HAS_JANSSON\n+\t\tif (info.file_type == FIPS_TYPE_JSON) {\n+\t\t\tret = fips_test_one_json_file();\n+\t\t\tjson_decref(json_info.json_root);\n+\t\t}  else {\n+\t\t\tret = fips_test_one_file();\n+\t\t}\n+#else /* RTE_HAS_JANSSON */\n \t\tret = fips_test_one_file();\n+#endif /* RTE_HAS_JANSSON */\n+\n \t\tif (ret < 0) {\n \t\t\tRTE_LOG(ERR, USER1, \"Error %i: Failed test %s\\n\",\n \t\t\t\t\tret, env.req_path);\n@@ -485,7 +501,17 @@ main(int argc, char *argv[])\n \t\t\t\tbreak;\n \t\t\t}\n \n+#ifdef RTE_HAS_JANSSON\n+\t\t\tif (info.file_type == FIPS_TYPE_JSON) {\n+\t\t\t\tret = fips_test_one_json_file();\n+\t\t\t\tjson_decref(json_info.json_root);\n+\t\t\t} else {\n+\t\t\t\tret = fips_test_one_file();\n+\t\t\t}\n+#else /* RTE_HAS_JANSSON */\n \t\t\tret = fips_test_one_file();\n+#endif /* RTE_HAS_JANSSON */\n+\n \t\t\tif (ret < 0) {\n \t\t\t\tRTE_LOG(ERR, USER1, \"Error %i: Failed test %s\\n\",\n \t\t\t\t\t\tret, req_path);\n@@ -1223,11 +1249,15 @@ fips_generic_test(void)\n \tstruct fips_val val = {NULL, 0};\n \tint ret;\n \n-\tfips_test_write_one_case();\n+\tif (info.file_type != FIPS_TYPE_JSON)\n+\t\tfips_test_write_one_case();\n \n \tret = fips_run_test();\n \tif (ret < 0) {\n \t\tif (ret == -EPERM || ret == -ENOTSUP) {\n+\t\t\tif (info.file_type == FIPS_TYPE_JSON)\n+\t\t\t\treturn ret;\n+\n \t\t\tfprintf(info.fp_wr, \"Bypass\\n\\n\");\n \t\t\treturn 0;\n \t\t}\n@@ -1242,6 +1272,7 @@ fips_generic_test(void)\n \tswitch (info.file_type) {\n \tcase FIPS_TYPE_REQ:\n \tcase FIPS_TYPE_RSP:\n+\tcase FIPS_TYPE_JSON:\n \t\tif (info.parse_writeback == NULL)\n \t\t\treturn -EPERM;\n \t\tret = info.parse_writeback(&val);\n@@ -1259,7 +1290,8 @@ fips_generic_test(void)\n \t\tbreak;\n \t}\n \n-\tfprintf(info.fp_wr, \"\\n\");\n+\tif (info.file_type != FIPS_TYPE_JSON)\n+\t\tfprintf(info.fp_wr, \"\\n\");\n \tfree(val.val);\n \n \treturn 0;\n@@ -1294,6 +1326,9 @@ fips_mct_tdes_test(void)\n \t\t\tret = fips_run_test();\n \t\t\tif (ret < 0) {\n \t\t\t\tif (ret == -EPERM) {\n+\t\t\t\t\tif (info.file_type == FIPS_TYPE_JSON)\n+\t\t\t\t\t\treturn ret;\n+\n \t\t\t\t\tfprintf(info.fp_wr, \"Bypass\\n\");\n \t\t\t\t\treturn 0;\n \t\t\t\t}\n@@ -1455,6 +1490,9 @@ fips_mct_aes_ecb_test(void)\n \t\t\tret = fips_run_test();\n \t\t\tif (ret < 0) {\n \t\t\t\tif (ret == -EPERM) {\n+\t\t\t\t\tif (info.file_type == FIPS_TYPE_JSON)\n+\t\t\t\t\t\treturn ret;\n+\n \t\t\t\t\tfprintf(info.fp_wr, \"Bypass\\n\");\n \t\t\t\t\treturn 0;\n \t\t\t\t}\n@@ -1537,6 +1575,9 @@ fips_mct_aes_test(void)\n \t\t\tret = fips_run_test();\n \t\t\tif (ret < 0) {\n \t\t\t\tif (ret == -EPERM) {\n+\t\t\t\t\tif (info.file_type == FIPS_TYPE_JSON)\n+\t\t\t\t\t\treturn ret;\n+\n \t\t\t\t\tfprintf(info.fp_wr, \"Bypass\\n\");\n \t\t\t\t\treturn 0;\n \t\t\t\t}\n@@ -1667,6 +1708,9 @@ fips_mct_sha_test(void)\n \t\t\tret = fips_run_test();\n \t\t\tif (ret < 0) {\n \t\t\t\tif (ret == -EPERM || ret == -ENOTSUP) {\n+\t\t\t\t\tif (info.file_type == FIPS_TYPE_JSON)\n+\t\t\t\t\t\treturn ret;\n+\n \t\t\t\t\tfprintf(info.fp_wr, \"Bypass\\n\\n\");\n \t\t\t\t\treturn 0;\n \t\t\t\t}\n@@ -1850,3 +1894,159 @@ fips_test_one_file(void)\n \n \treturn ret;\n }\n+\n+#ifdef RTE_HAS_JANSSON\n+static int\n+fips_test_json_init_writeback(void)\n+{\n+\tjson_t *session_info, *session_write;\n+\tsession_info = json_array_get(json_info.json_root, 0);\n+\tsession_write = json_object();\n+\tjson_info.json_write_root = json_array();\n+\n+\tjson_object_set(session_write, \"jwt\",\n+\t\tjson_object_get(session_info, \"jwt\"));\n+\tjson_object_set(session_write, \"url\",\n+\t\tjson_object_get(session_info, \"url\"));\n+\tjson_object_set(session_write, \"isSample\",\n+\t\tjson_object_get(session_info, \"isSample\"));\n+\n+\tjson_info.is_sample = json_boolean_value(\n+\t\tjson_object_get(session_info, \"isSample\"));\n+\n+\tjson_array_append_new(json_info.json_write_root, session_write);\n+\treturn 0;\n+}\n+\n+static int\n+fips_test_one_test_case(void)\n+{\n+\tint ret;\n+\n+\tret = fips_test_parse_one_json_case();\n+\n+\tswitch (ret) {\n+\tcase 0:\n+\t\tret = test_ops.test();\n+\t\tif ((ret == 0) || (ret == -EPERM || ret == -ENOTSUP))\n+\t\t\tbreak;\n+\t\tRTE_LOG(ERR, USER1, \"Error %i: test block\\n\",\n+\t\t\t\tret);\n+\t\tbreak;\n+\tdefault:\n+\t\tRTE_LOG(ERR, USER1, \"Error %i: Parse block\\n\",\n+\t\t\t\tret);\n+\t}\n+\treturn ret;\n+}\n+\n+static int\n+fips_test_one_test_group(void)\n+{\n+\tint ret;\n+\tjson_t *tests, *write_tests;\n+\tsize_t test_idx, tests_size;\n+\n+\twrite_tests = json_array();\n+\tjson_info.json_write_group = json_object();\n+\tjson_object_set(json_info.json_write_group, \"tgId\",\n+\t\tjson_object_get(json_info.json_test_group, \"tgId\"));\n+\tjson_object_set_new(json_info.json_write_group, \"tests\", write_tests);\n+\n+\tswitch (info.algo) {\n+\tcase FIPS_TEST_ALGO_AES_GCM:\n+\t\tret = parse_test_gcm_init();\n+\t\tbreak;\n+\tdefault:\n+\t\treturn -EINVAL;\n+\t}\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\tret = fips_test_parse_one_json_group();\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\tret = init_test_ops();\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\ttests = json_object_get(json_info.json_test_group, \"tests\");\n+\ttests_size = json_array_size(tests);\n+\tfor (test_idx = 0; test_idx < tests_size; test_idx++) {\n+\t\tjson_info.json_test_case = json_array_get(tests, test_idx);\n+\t\tif (fips_test_one_test_case() == 0)\n+\t\t\tjson_array_append_new(write_tests, json_info.json_write_case);\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+fips_test_one_vector_set(void)\n+{\n+\tint ret;\n+\tjson_t *test_groups, *write_groups, *write_version, *write_set;\n+\tsize_t group_idx, num_groups;\n+\n+\ttest_groups = json_object_get(json_info.json_vector_set, \"testGroups\");\n+\tnum_groups = json_array_size(test_groups);\n+\n+\tjson_info.json_write_set = json_array();\n+\twrite_version = json_object();\n+\tjson_object_set_new(write_version, \"acvVersion\", json_string(ACVVERSION));\n+\tjson_array_append_new(json_info.json_write_set, write_version);\n+\n+\twrite_set = json_object();\n+\tjson_array_append(json_info.json_write_set, write_set);\n+\twrite_groups = json_array();\n+\n+\tjson_object_set(write_set, \"vsId\",\n+\t\tjson_object_get(json_info.json_vector_set, \"vsId\"));\n+\tjson_object_set(write_set, \"algorithm\",\n+\t\tjson_object_get(json_info.json_vector_set, \"algorithm\"));\n+\tjson_object_set(write_set, \"revision\",\n+\t\tjson_object_get(json_info.json_vector_set, \"revision\"));\n+\tjson_object_set_new(write_set, \"isSample\",\n+\t\tjson_boolean(json_info.is_sample));\n+\tjson_object_set_new(write_set, \"testGroups\", write_groups);\n+\n+\tret = fips_test_parse_one_json_vector_set();\n+\tif (ret < 0) {\n+\t\tRTE_LOG(ERR, USER1, \"Error: Unsupported or invalid vector set algorithm: %s\\n\",\n+\t\t\tjson_string_value(json_object_get(json_info.json_vector_set, \"algorithm\")));\n+\t\treturn ret;\n+\t}\n+\n+\tfor (group_idx = 0; group_idx < num_groups; group_idx++) {\n+\t\tjson_info.json_test_group = json_array_get(test_groups, group_idx);\n+\t\tret = fips_test_one_test_group();\n+\t\tjson_array_append_new(write_groups, json_info.json_write_group);\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+fips_test_one_json_file(void)\n+{\n+\tsize_t vector_set_idx, root_size;\n+\n+\troot_size = json_array_size(json_info.json_root);\n+\tfips_test_json_init_writeback();\n+\n+\tfor (vector_set_idx = 1; vector_set_idx < root_size; vector_set_idx++) {\n+\t\t/* Vector set index starts at 1, the 0th index contains test session\n+\t\t * information.\n+\t\t */\n+\t\tjson_info.json_vector_set = json_array_get(json_info.json_root, vector_set_idx);\n+\t\tfips_test_one_vector_set();\n+\t\tjson_array_append_new(json_info.json_write_root, json_info.json_write_set);\n+\t}\n+\n+\tjson_dumpf(json_info.json_write_root, info.fp_wr, JSON_INDENT(4));\n+\tjson_decref(json_info.json_write_root);\n+\n+\treturn 0;\n+}\n+#endif /* RTE_HAS_JANSSON */\n",
    "prefixes": [
        "v8",
        "04/10"
    ]
}