From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 983C842B98; Thu, 25 May 2023 10:53:25 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7D71A410FA; Thu, 25 May 2023 10:53:24 +0200 (CEST) Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01on2059.outbound.protection.outlook.com [40.107.117.59]) by mails.dpdk.org (Postfix) with ESMTP id A86B9410DC for ; Thu, 25 May 2023 10:53:23 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mRlr0ADc28QFn+o35b1+S/S8IYBtql27lfY2PwBU05uNjQcRiZYYEU5xk9qD0hA797z1moFkqSJRBpkABBLjSnMoe62eVC/BvaD4IaVb2vWj/5We6er4d3fxvg4WNEIO4DEQHMsORot7jKll6dum+HGzBgSGLVsSNhFwb6PbeWcyU1v3TdyC5D8cljIJNqd1hvPISsaYrlimeQDjBTLslVu9P1LGZTEbbtq2ONyvpV2ssW0JaAwUTacPb0+wwfihNkPvl86gBEneO1KuQuebrGZiZkurCpdnEvUUvznDDCYAFm2l5HLf33ltuEbwgSmQH9HQIsfxNhJkb6o/vv2aVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MP67gj57MkiwFgxoJpaQkSy+FqULxW8CCBTvma0xoiA=; b=F/VjOnuyNcBTC/Dw/d8+vzCcOEi9Z2Ad2bFgPPP2tUEvqfhWZOxSm5WL6EmHd7Ga5fxUWx+b/zdxiQENAUNjf58vQoqrH2HCYd7BkzHyEDeFGgxuOZnORSCqMqr4mAo7Zghmrb0ZPVc1dwNGw4xNPyQja+yVY5UJNNPF95pMVuAm/qEF43PlBzQkGzofTmimHKomHQVGqxsYoKxIRIxQfsKbsPQtlVYU+av41C6+EIrHI9mdQAky7u7S5SrbtS0e2/bVBzkYDUMUQKmq8o4G/6+SgG/63Ef0g6flQ0MvvcsJ/Lia4Onj9XQ2P0pRL88GTS6vi2nv0D7k1eA9UKYfXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=jaguarmicro.com; dmarc=pass action=none header.from=jaguarmicro.com; dkim=pass header.d=jaguarmicro.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jaguarmicro.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MP67gj57MkiwFgxoJpaQkSy+FqULxW8CCBTvma0xoiA=; b=fQNzVqmWId81DSv1YXyJqWZITu0dHrbM8/V0PZlwl5P0PbC42Mw+PW72QzLu3pTnT9p9QfnGxC2MxxN9xyCjG4mT+rRL82/2thkOLnv9++WuNEQ4mjogIz8UQUR3lsxRKn3XDlKTx8ebsZt91eriAoiVMLoBKteCIFuzKsgh6tsmlkJ+hI/k/eZvOBA0KrKfbuwSsxdwtDVyZNubjQx0/r6f+naXlvL8MgHRCJOk2aw3vyWQTe/Uey08yUo7GiGN7+KZjAjva/dJLM9BZzMguBHzQkvs7GAI8RCwFXBVYZ2ZZbpoewzOkCDASMMf6XVJt7M+vYCN08Y+3NOU75qfBw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=jaguarmicro.com; Received: from KL1PR0601MB5567.apcprd06.prod.outlook.com (2603:1096:820:c5::14) by TYZPR06MB5345.apcprd06.prod.outlook.com (2603:1096:400:1f2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.27; Thu, 25 May 2023 08:53:20 +0000 Received: from KL1PR0601MB5567.apcprd06.prod.outlook.com ([fe80::fc7c:ec5e:aa02:44e9]) by KL1PR0601MB5567.apcprd06.prod.outlook.com ([fe80::fc7c:ec5e:aa02:44e9%7]) with mapi id 15.20.6411.029; Thu, 25 May 2023 08:53:20 +0000 From: Sunyang Wu To: dev@dpdk.org Cc: kai.ji@intel.com, gakhil@marvell.com Subject: [PATCH 2/2] test/crypto: Add SM3/SM4 test vectors for verification in test app Date: Thu, 25 May 2023 16:52:58 +0800 Message-Id: <20230525085258.14800-2-sunyang.wu@jaguarmicro.com> X-Mailer: git-send-email 2.19.0.rc0.windows.1 In-Reply-To: <20230525085258.14800-1-sunyang.wu@jaguarmicro.com> References: <20230525085258.14800-1-sunyang.wu@jaguarmicro.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SI1PR02CA0004.apcprd02.prod.outlook.com (2603:1096:4:1f7::12) To KL1PR0601MB5567.apcprd06.prod.outlook.com (2603:1096:820:c5::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: KL1PR0601MB5567:EE_|TYZPR06MB5345:EE_ X-MS-Office365-Filtering-Correlation-Id: 63274c00-fcb5-4d0a-1bb0-08db5cfd7d1d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NVrhXy7Lnqi3cLp4UT1qXpa6XeSGpXQ9a5XFasesS4FM98qvQf/WLLlfrhXoxHRiMAtAc66qGqQvzmCTdM+AO14AjhrDXaw1O4NEMm5k7JpBnv3ykflz5fCrOtLP8OagbriZ3n2bP/SqwNw80kZdxaQENo8xNn3fG0egmzh+IRaMJCqlFr0JWCrQCGdkwqkeHj1aO7KbztNZrRa9rTaaSyprAtZZleFer6yPaqSMNTsTV6xaCVEPEDTN+ZARKxcB2/1Tr9cjEoijwdpFKkRvoJ9zqLPNRyrrnbClvlxCrXO227Ad75mw2YXHBC0DscEJZ9WJOJFNAnbc3LLsWoScSkui3m8UxV5q7ayATF4/yubLwU8Ud/l8ZOQx6qb8ye6QY30+/dd+47DfxYZalN5VDPKpMOPUYcxD1ibBjxvv6JutBQ3aQF/Kgo9W19dRfw8deh0ytNteE98IrzUis7zUt1yabHaXwvIC7yu2+8HhpoKz0HOZkwBpaeNwVro8C3hd34OpGTQ/fwPbdNVWI425m5moSqHhFnFP7iO0huqhgGaNyzVzq5uwCxZbagD105+gi0hpuHyyG3LVvKckXu+qr0j4lxFTPdutMh74YTCF2hpiRqQrbtkoqfqVHM2nydNP X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:KL1PR0601MB5567.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(136003)(396003)(366004)(376002)(39830400003)(346002)(451199021)(6486002)(41300700001)(52116002)(44832011)(4326008)(15650500001)(316002)(1076003)(26005)(6512007)(6506007)(6666004)(8676002)(5660300002)(38100700002)(8936002)(36756003)(38350700002)(86362001)(478600001)(2616005)(83380400001)(30864003)(2906002)(66946007)(66556008)(186003)(66476007)(6916009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eGx1sjc//c0IQ74GNtYiw+OsM+d2cpfiFk+L0p/yH3+cB+6i1oGAUF3Bta2D?= =?us-ascii?Q?tHTOO3gF6LGhfRDvHqSr6CSxnHefSL+1Ww7k7T5RR5TtuiDcN+lJJNnQpGHe?= =?us-ascii?Q?nXTIJVevyTeFDvbn+GzWFtBSriukOC6RS2Voa7m7CEHmxXxIW+VENIKiaA+A?= =?us-ascii?Q?GxCrRRpkOhDLdDCVkErpNChVkAgjHcW7SdhZHRwWYZk1NfJEzPm4C8cgCgjS?= =?us-ascii?Q?k94iuryJvkmFW3V9eCcxV+G2b5FcwX++M88Rsrod4b6fBw8pbU0Ch5e/z5OC?= =?us-ascii?Q?ffpgibaTdYMjV3+ns/izK8LEK9klGoYoY549MWlBEpi2OTmU4rrXuRnmJ7Fe?= =?us-ascii?Q?11INxo1ylcthDPvjxj7V2JhiH8/vg4fTrV3bk75+DdwJoes98VkfVAgKyj/S?= =?us-ascii?Q?UvWVsjaOIAO3uzUqPS2Bm2kBHbtCGXEpaPimTrFkK6/piYUdEk3U/zK3Ydlj?= =?us-ascii?Q?leLBolmyLo+dIawxXvR1QOnWASpMDSEdIKGKeaSxS6Y7+mKjIM7vuiphvnZQ?= =?us-ascii?Q?Nh4+Ugu3CqP6k8fpxZPKLpFMoJd1pCN53eXQ9T5ZW0MmtEbtS7byy//HzRVA?= =?us-ascii?Q?SunECbkpjJaD230ayuRNzPQDG4mE7EGt3QXQd3PYQCLKuEVIjxcLrWWpJtQf?= =?us-ascii?Q?7EKgPnVnshCTyE/SzW0LK7DmhmvvswARuaxY5vpxO6jZR1eAMCjxwZ826sRB?= =?us-ascii?Q?JAWh/6eMG03i0BMZWlsH1wX2WsZv3JEyx13h/1oNWCX6rDwKTRc1mU+FEzhv?= =?us-ascii?Q?mbprCEYZSbND2Ufkk3OJSCMJjWW3HD5GMKMSZY3wMdQsPFrr5fK1dkpCJ+PW?= =?us-ascii?Q?6ypO1Mqo/opXD2pdsQb8ZPcYxiOGYsVHxIWhizpHlV2xgK7Ols/VXwAf4lkL?= =?us-ascii?Q?I2IyK2NEpDFr0ykjO9mpSFT+hCJtbarPYwLMOPLqh8OI5prFdc8C8VIi67As?= =?us-ascii?Q?csB7Zwrw3Vx+1sMIuh/frI6U4XbR3BhKNDeLnd2/QJEZR64WHAzyUFI9OMAt?= =?us-ascii?Q?GdfWeY1S6kKJxtEm0B3e1EpNDCUiGlKQptLt1lCopUuMcZ8bL4H+1Gg9OzrZ?= =?us-ascii?Q?mzy2HIKkS9aXN8H4fOqJbvhA24r8cT92iESbe/pc6115KNNr0jzJfj6Dg0BX?= =?us-ascii?Q?e/QywBmrMbzMl4a+4iS4MDik0d7ROI/UCaPmb0Dna9J1oW5XbNbbUBzO5Fwu?= =?us-ascii?Q?X8f8qm+prwuAbtyaPrPACFsNypgPuQrbPUBJcjk3exgEv2gIns0FsNsLgz9y?= =?us-ascii?Q?pYdL25OQa/0/0bpIMikZTsonyf86el9VLBAdp/mmexUGCgwb/EuvJrLFt/4o?= =?us-ascii?Q?GhBMPzjDAYh2wqeTaWCsLNc036Xavyg5Qwtw4f79YQQqJBU9ZHkRXVTPW4Xt?= =?us-ascii?Q?qfsaAunpKkhBDl4zUgiiX8/4FxbULHTojx5H3zBWS3HfeNlquNTvYT85BbwY?= =?us-ascii?Q?yXkX2gg6YUhxc8EDwqkk8+vu7HCVSu9CR0yJ/bz0GmiWYVMQc3KMcWyLR+n+?= =?us-ascii?Q?mmMN4tWy8eL1CcGWqbIX4BXqS6yTcQJVCo0Etj33ZrdxWS6GN+GoGfKZuj2D?= =?us-ascii?Q?rSynOPd5TTKL9MGHgftVewEAG3rcTxfYQ9cKkC38mIMlfwGwHL6LQ7Z/EYRB?= =?us-ascii?Q?bQ=3D=3D?= X-OriginatorOrg: jaguarmicro.com X-MS-Exchange-CrossTenant-Network-Message-Id: 63274c00-fcb5-4d0a-1bb0-08db5cfd7d1d X-MS-Exchange-CrossTenant-AuthSource: KL1PR0601MB5567.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 May 2023 08:53:20.2089 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 1e45a5c2-d3e1-46b3-a0e6-c5ebf6d8ba7b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: DptVfY4WPkQUJrvgwL0utn7lGAh6wsVMhQUsZ/J0DQ3AgMnvUE0gno0eZ9OOEBuF7Ym1WYs49THt8amh9Jx7cpQEBfpPcrrjqcHgElqj2HE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB5345 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add SM3/SM4 test vectors for verification in test app. Signed-off-by: Sunyang Wu --- The test results of using lib-openssl are as follows: + SM4 Chain : 24/24 passed, 0/24 skipped, 0/24 failed, 0/24 unsupported + SM4 Cipher Only : 10/10 passed, 0/10 skipped, 0/10 failed, 0/10 unsupported + Auth Only : 36/62 passed, 26/62 skipped, 0/62 failed, 0/62 unsupported --- app/test/test_cryptodev.c | 3 + app/test/test_cryptodev_blockcipher.c | 81 +++ app/test/test_cryptodev_blockcipher.h | 4 +- app/test/test_cryptodev_hash_test_vectors.h | 82 +++ app/test/test_cryptodev_sm4_test_vectors.h | 710 ++++++++++++++++++++ 5 files changed, 879 insertions(+), 1 deletion(-) create mode 100644 app/test/test_cryptodev_sm4_test_vectors.h diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c index 9c670e9a35..73238a447d 100644 --- a/app/test/test_cryptodev.c +++ b/app/test/test_cryptodev.c @@ -44,6 +44,7 @@ #include "test_cryptodev_aead_test_vectors.h" #include "test_cryptodev_hmac_test_vectors.h" #include "test_cryptodev_mixed_test_vectors.h" +#include "test_cryptodev_sm4_test_vectors.h" #ifdef RTE_LIB_SECURITY #include "test_cryptodev_security_ipsec.h" #include "test_cryptodev_security_ipsec_test_vectors.h" @@ -16928,6 +16929,8 @@ run_cryptodev_testsuite(const char *pmd_name) BLKCIPHER_3DES_CIPHERONLY_TYPE, BLKCIPHER_DES_CIPHERONLY_TYPE, BLKCIPHER_DES_DOCSIS_TYPE, + BLKCIPHER_SM4_CHAIN_TYPE, + BLKCIPHER_SM4_CIPHERONLY_TYPE, BLKCIPHER_AUTHONLY_TYPE}; struct unit_test_suite *static_suites[] = { &cryptodev_multi_session_testsuite, diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c index 6c9a5964ea..341cf1a54b 100644 --- a/app/test/test_cryptodev_blockcipher.c +++ b/app/test/test_cryptodev_blockcipher.c @@ -18,6 +18,7 @@ #include "test_cryptodev_aes_test_vectors.h" #include "test_cryptodev_des_test_vectors.h" #include "test_cryptodev_hash_test_vectors.h" +#include "test_cryptodev_sm4_test_vectors.h" static int verify_algo_support(const struct blockcipher_test_case *t, @@ -1119,6 +1120,74 @@ authonly_setup(void) return 0; } +static int +sm4_chain_setup(void) +{ + uint8_t dev_id = p_testsuite_params->valid_devs[0]; + struct rte_cryptodev_info dev_info; + uint64_t feat_flags; + const enum rte_crypto_cipher_algorithm ciphers[] = { + RTE_CRYPTO_CIPHER_SM4_CTR, + RTE_CRYPTO_CIPHER_SM4_CBC, + RTE_CRYPTO_CIPHER_SM4_OFB, + RTE_CRYPTO_CIPHER_SM4_CFB + }; + const enum rte_crypto_auth_algorithm auths[] = { + RTE_CRYPTO_AUTH_SM3, + RTE_CRYPTO_AUTH_SM3_HMAC, + }; + + rte_cryptodev_info_get(dev_id, &dev_info); + feat_flags = dev_info.feature_flags; + + if (!(feat_flags & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) || + (global_api_test_type == CRYPTODEV_RAW_API_TEST && + !(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) { + RTE_LOG(INFO, USER1, "Feature flag for SM4 Chain testsuite not met\n"); + return TEST_SKIPPED; + } + + if (check_cipher_capabilities_supported(ciphers, RTE_DIM(ciphers)) != 0 && + check_auth_capabilities_supported(auths, RTE_DIM(auths)) != 0) { + RTE_LOG(INFO, USER1, "Capability for SM4 Chain testsuite not met\n"); + return TEST_SKIPPED; + } + + return 0; +} + +static int +sm4_cipheronly_setup(void) +{ + uint8_t dev_id = p_testsuite_params->valid_devs[0]; + struct rte_cryptodev_info dev_info; + uint64_t feat_flags; + const enum rte_crypto_cipher_algorithm ciphers[] = { + RTE_CRYPTO_CIPHER_SM4_CBC, + RTE_CRYPTO_CIPHER_SM4_ECB, + RTE_CRYPTO_CIPHER_SM4_CTR, + RTE_CRYPTO_CIPHER_SM4_OFB, + RTE_CRYPTO_CIPHER_SM4_CFB + }; + + rte_cryptodev_info_get(dev_id, &dev_info); + feat_flags = dev_info.feature_flags; + + if (!(feat_flags & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) || + (global_api_test_type == CRYPTODEV_RAW_API_TEST && + !(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP))) { + RTE_LOG(INFO, USER1, "Feature flag for SM4 Cipheronly not met\n"); + return TEST_SKIPPED; + } + + if (check_cipher_capabilities_supported(ciphers, RTE_DIM(ciphers)) != 0) { + RTE_LOG(INFO, USER1, "Capability for SM4 Cipheronly not met\n"); + return TEST_SKIPPED; + } + + return 0; +} + struct unit_test_suite * build_blockcipher_test_suite(enum blockcipher_test_type test_type) { @@ -1172,6 +1241,18 @@ build_blockcipher_test_suite(enum blockcipher_test_type test_type) ts_name = "DES Docsis"; ts_setup = des_docsis_setup; break; + case BLKCIPHER_SM4_CHAIN_TYPE: + n_test_cases = RTE_DIM(sm4_chain_test_cases); + blk_tcs = sm4_chain_test_cases; + ts_name = "SM4 Chain"; + ts_setup = sm4_chain_setup; + break; + case BLKCIPHER_SM4_CIPHERONLY_TYPE: + n_test_cases = RTE_DIM(sm4_cipheronly_test_cases); + blk_tcs = sm4_cipheronly_test_cases; + ts_name = "SM4 Cipher Only"; + ts_setup = sm4_cipheronly_setup; + break; case BLKCIPHER_AUTHONLY_TYPE: n_test_cases = RTE_DIM(hash_test_cases); blk_tcs = hash_test_cases; diff --git a/app/test/test_cryptodev_blockcipher.h b/app/test/test_cryptodev_blockcipher.h index bad93a5ec1..e6f6c18067 100644 --- a/app/test/test_cryptodev_blockcipher.h +++ b/app/test/test_cryptodev_blockcipher.h @@ -49,7 +49,9 @@ enum blockcipher_test_type { BLKCIPHER_3DES_CIPHERONLY_TYPE, /* triple_des_cipheronly_test_cases[] */ BLKCIPHER_AUTHONLY_TYPE, /* use hash_test_cases[] */ BLKCIPHER_DES_CIPHERONLY_TYPE, /* use des_cipheronly_test_cases[] */ - BLKCIPHER_DES_DOCSIS_TYPE /* use des_docsis_test_cases[] */ + BLKCIPHER_DES_DOCSIS_TYPE, /* use des_docsis_test_cases[] */ + BLKCIPHER_SM4_CHAIN_TYPE, /* use sm4_chain_test_cases[] */ + BLKCIPHER_SM4_CIPHERONLY_TYPE /* use sm4_cipheronly_test_cases[] */ }; struct blockcipher_test_case { diff --git a/app/test/test_cryptodev_hash_test_vectors.h b/app/test/test_cryptodev_hash_test_vectors.h index fa9986a4da..65dd6bf81b 100644 --- a/app/test/test_cryptodev_hash_test_vectors.h +++ b/app/test/test_cryptodev_hash_test_vectors.h @@ -682,6 +682,56 @@ cmac_test_vector_12 = { } }; +static const struct blockcipher_test_data +sm3_test_vector = { + .auth_algo = RTE_CRYPTO_AUTH_SM3, + .ciphertext = { + .data = plaintext_hash, + .len = 512 + }, + .digest = { + .data = { + 0x9E, 0x86, 0xAB, 0x68, 0xD7, 0x8F, 0xD6, 0xFF, + 0x1C, 0x57, 0x12, 0x48, 0xC4, 0xA8, 0x26, 0xDE, + 0x9E, 0x53, 0xE9, 0xC4, 0xA6, 0xBB, 0xE7, 0x52, + 0x53, 0x9C, 0xDE, 0xC1, 0xD5, 0x7C, 0x43, 0xAB + }, + .len = 32 + } +}; + +static const struct blockcipher_test_data +hmac_sm3_test_vector = { + .auth_algo = RTE_CRYPTO_AUTH_SM3_HMAC, + .ciphertext = { + .data = plaintext_hash, + .len = 512 + }, + .auth_key = { + .data = { + 0x12, 0x70, 0x87, 0xd9, 0x76, 0x9e, 0xe0, 0xf0, + 0x14, 0xfb, 0xca, 0x5a, 0xb6, 0xcb, 0x8f, 0x9d, + 0x42, 0xd3, 0x1e, 0x09, 0x9a, 0x25, 0x9a, 0x3c, + 0x87, 0xee, 0x55, 0x63, 0x56, 0x33, 0x75, 0x69, + 0xa3, 0xfc, 0x42, 0x19, 0x9a, 0x22, 0x09, 0xae, + 0x1d, 0xd3, 0x09, 0xd3, 0x9e, 0x98, 0x71, 0xe1, + 0x6b, 0x8f, 0xea, 0x05, 0xb4, 0x85, 0x41, 0x3b, + 0x73, 0x97, 0x9e, 0xc9, 0xca, 0x13, 0x32, 0x6d + }, + .len = 64 + }, + .digest = { + .data = { + 0xBC, 0x71, 0xF5, 0x3B, 0x43, 0x28, 0x11, 0x7A, + 0x32, 0xD2, 0xC9, 0x2D, 0x3B, 0xFA, 0xE0, 0x47, + 0xA4, 0xD5, 0xEC, 0x81, 0xFB, 0x86, 0x6A, 0x11, + 0x64, 0xF3, 0xF5, 0x82, 0x3B, 0x8E, 0x0A, 0xBB + }, + .len = 32, + .truncated_len = 16 + } +}; + static const struct blockcipher_test_case hash_test_cases[] = { { .test_descr = "MD5 Digest", @@ -971,6 +1021,38 @@ static const struct blockcipher_test_case hash_test_cases[] = { .test_data = &aes_xcbc_mac_test_vector, .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY, }, + { + .test_descr = "SM3 Digest", + .test_data = &sm3_test_vector, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN, + }, + { + .test_descr = "SM3 Digest Verify", + .test_data = &sm3_test_vector, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY, + }, + { + .test_descr = "HMAC-SM3 Digest", + .test_data = &hmac_sm3_test_vector, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN, + }, + { + .test_descr = "HMAC-SM3 Digest Scatter Gather", + .test_data = &hmac_sm3_test_vector, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "HMAC-SM3 Digest Verify", + .test_data = &hmac_sm3_test_vector, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY, + }, + { + .test_descr = "HMAC-SM3 Digest Verify Scatter Gather", + .test_data = &hmac_sm3_test_vector, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG, + }, }; diff --git a/app/test/test_cryptodev_sm4_test_vectors.h b/app/test/test_cryptodev_sm4_test_vectors.h new file mode 100644 index 0000000000..582b333296 --- /dev/null +++ b/app/test/test_cryptodev_sm4_test_vectors.h @@ -0,0 +1,710 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2016-2019 Intel Corporation + */ + +#ifndef TEST_CRYPTODEV_SM4_TEST_VECTORS_H_ +#define TEST_CRYPTODEV_SM4_TEST_VECTORS_H_ + +static const uint8_t plaintext_sm4[] = { + 0x81, 0x70, 0x99, 0x44, 0xE0, 0xCB, 0x2E, 0x1D, + 0xB5, 0xB0, 0xA4, 0x77, 0xD1, 0xA8, 0x53, 0x9B, + 0x0A, 0x87, 0x86, 0xE3, 0x4E, 0xAA, 0xED, 0x99, + 0x30, 0x3E, 0xA6, 0x97, 0x55, 0x95, 0xB2, 0x45, + 0x4D, 0x5D, 0x7F, 0x91, 0xEB, 0xBD, 0x4A, 0xCD, + 0x72, 0x6C, 0x0E, 0x0E, 0x5E, 0x3E, 0xB5, 0x5E, + 0xF6, 0xB1, 0x5A, 0x13, 0x8E, 0x22, 0x6E, 0xCD, + 0x1B, 0x23, 0x5A, 0xB5, 0xBB, 0x52, 0x51, 0xC1, + 0x33, 0x76, 0xB2, 0x64, 0x48, 0xA9, 0xAC, 0x1D, + 0xE8, 0xBD, 0x52, 0x64, 0x8C, 0x0B, 0x5F, 0xFA, + 0x94, 0x44, 0x86, 0x82, 0xE3, 0xCB, 0x4D, 0xE9, + 0xCB, 0x8A, 0xE7, 0xF4, 0xBD, 0x41, 0x0E, 0xD5, + 0x02, 0xB1, 0x25, 0x3A, 0xD0, 0x8B, 0xB2, 0x79, + 0x69, 0xB5, 0xF0, 0x2B, 0x10, 0x02, 0x9D, 0x67, + 0xD0, 0x7E, 0x18, 0x64, 0xD9, 0x4D, 0x4F, 0xCA, + 0x20, 0x81, 0x51, 0xE2, 0x6F, 0x5F, 0xEE, 0x26 +}; + +static const uint8_t ciphertext_sm4_ecb[] = { + 0xCC, 0x62, 0x37, 0xA6, 0xA1, 0x35, 0x39, 0x75, + 0xFF, 0xF5, 0xEE, 0x6A, 0xFD, 0xD7, 0x70, 0x15, + 0xE1, 0x32, 0x23, 0x1F, 0x18, 0xB8, 0xC9, 0x16, + 0x07, 0x27, 0x9C, 0x6C, 0x7F, 0x8F, 0x7F, 0xF6, + 0xFD, 0xF1, 0xE4, 0x01, 0xEC, 0x7E, 0xD2, 0x60, + 0xFD, 0xE7, 0x5C, 0xE5, 0xCF, 0x6E, 0xE7, 0x87, + 0x97, 0x13, 0xCC, 0x01, 0x92, 0x1A, 0xC5, 0x62, + 0xB5, 0x0C, 0x45, 0xE4, 0xDC, 0x9A, 0x30, 0xC2, + 0x35, 0xED, 0x7D, 0x1A, 0x93, 0x0D, 0x33, 0x96, + 0xD6, 0xE1, 0x8B, 0x77, 0x64, 0x40, 0x25, 0x3D, + 0x9F, 0x4B, 0x8E, 0xFF, 0x3F, 0x11, 0x41, 0x58, + 0x3B, 0x55, 0x4F, 0x59, 0x38, 0x2E, 0xAA, 0xBB, + 0x8B, 0x42, 0xFA, 0x30, 0x38, 0x0D, 0x05, 0x3B, + 0x86, 0x7C, 0xB0, 0xF2, 0x77, 0xCE, 0xEE, 0x1B, + 0x78, 0xE8, 0x64, 0x7D, 0x59, 0xE3, 0xDA, 0x61, + 0x05, 0x27, 0x56, 0x12, 0x95, 0x6D, 0x34, 0x9C +}; + +static const uint8_t ciphertext_sm4_cbc[] = { + 0x60, 0x7A, 0xBE, 0xC9, 0xDA, 0xD7, 0x90, 0x73, + 0xC7, 0x96, 0xDB, 0x34, 0x26, 0xFD, 0x2C, 0x2F, + 0x8E, 0x39, 0xC7, 0x0B, 0x60, 0xB2, 0x3D, 0xBE, + 0xF3, 0xA9, 0xA5, 0x46, 0x65, 0x26, 0x41, 0xB7, + 0xAE, 0xC9, 0xC3, 0xAD, 0x8C, 0x9B, 0x95, 0x8D, + 0x17, 0x53, 0x15, 0x35, 0x40, 0x2A, 0x8C, 0x6B, + 0x02, 0x5C, 0xBD, 0x13, 0xA6, 0x7E, 0xB7, 0x63, + 0xC0, 0x3F, 0xA8, 0xBC, 0x73, 0xDD, 0x0B, 0x7A, + 0x88, 0x0E, 0xF8, 0xC5, 0x5B, 0x00, 0x07, 0xFF, + 0x53, 0x7B, 0xF1, 0x6A, 0xA0, 0xFD, 0x0B, 0x89, + 0x03, 0x91, 0x4D, 0xD8, 0xC4, 0xB3, 0xC0, 0x12, + 0x41, 0xEB, 0xF7, 0xCB, 0x0A, 0xFB, 0x68, 0xE7, + 0x8E, 0x0C, 0x14, 0x33, 0x1A, 0x34, 0x55, 0xDA, + 0x04, 0xE2, 0xA3, 0xFC, 0xBE, 0xB6, 0xDF, 0x2B, + 0x61, 0x33, 0x05, 0xBD, 0xBC, 0x0A, 0xB5, 0x8B, + 0x6D, 0x0F, 0x1B, 0x7D, 0x5F, 0x24, 0x46, 0x0E +}; + +static const uint8_t ciphertext_sm4_cfb[] = { + 0xC1, 0x27, 0x47, 0xC7, 0x44, 0x0C, 0x9A, 0x5C, + 0x7D, 0x51, 0x26, 0x0D, 0x1B, 0xDB, 0x0D, 0x9D, + 0x52, 0x59, 0xAD, 0x56, 0x05, 0xBE, 0x92, 0xD2, + 0xB7, 0x62, 0xF5, 0xD7, 0x53, 0xD3, 0x12, 0x2A, + 0x3C, 0x9A, 0x6E, 0x75, 0x80, 0xAB, 0x18, 0xE5, + 0x72, 0x49, 0x9A, 0xD9, 0x80, 0x99, 0xC2, 0xE7, + 0xCA, 0xD9, 0xDC, 0xD1, 0x45, 0x2F, 0xDD, 0xFC, + 0x01, 0x7F, 0xB8, 0x01, 0x51, 0xCF, 0x43, 0x74, + 0xC0, 0xBA, 0xFE, 0xB0, 0x28, 0xFE, 0xA4, 0xCD, + 0x35, 0x0E, 0xEC, 0xE5, 0x70, 0xA2, 0x7F, 0x5D, + 0x38, 0x1B, 0x50, 0xEB, 0x46, 0xBE, 0x61, 0x6E, + 0x6C, 0x76, 0xF3, 0x65, 0x75, 0xCD, 0xA1, 0xBB, + 0x9F, 0xFA, 0x7B, 0x86, 0x12, 0x87, 0x04, 0xEB, + 0x00, 0x24, 0x81, 0xE7, 0x91, 0xFC, 0x1B, 0xC7, + 0xA6, 0xB2, 0x67, 0xE2, 0x6E, 0x88, 0x8F, 0xB6, + 0x4C, 0x45, 0x96, 0xEF, 0xBF, 0x4C, 0x26, 0x69 +}; + +static const uint8_t ciphertext_sm4_ofb[] = { + 0xC1, 0x27, 0x47, 0xC7, 0x44, 0x0C, 0x9A, 0x5C, + 0x7D, 0x51, 0x26, 0x0D, 0x1B, 0xDB, 0x0D, 0x9D, + 0x0F, 0x0C, 0xAD, 0xA0, 0x2D, 0x18, 0x0B, 0x3C, + 0x54, 0xA9, 0x87, 0x86, 0xBC, 0x6B, 0xF9, 0xFB, + 0x18, 0x68, 0x51, 0x1E, 0xB2, 0x53, 0x1D, 0xD5, + 0x7F, 0x4B, 0xED, 0xB8, 0xCA, 0x8E, 0x81, 0xCE, + 0xE1, 0x16, 0x7F, 0x84, 0x69, 0xD1, 0x15, 0xCE, + 0x84, 0xF0, 0xB0, 0x3A, 0x21, 0xF2, 0x85, 0xA2, + 0xEB, 0x2F, 0xDF, 0x34, 0x52, 0x62, 0x42, 0x87, + 0xFA, 0x7F, 0x02, 0x2A, 0xC2, 0xD9, 0xE4, 0xB0, + 0x8D, 0xC5, 0x52, 0xEC, 0x3D, 0x96, 0x3F, 0xD3, + 0x8C, 0x39, 0x9C, 0x0F, 0xD9, 0x66, 0xDD, 0x29, + 0x90, 0x00, 0x5D, 0x4F, 0x4D, 0x82, 0x2A, 0x47, + 0x9E, 0x7E, 0x46, 0x87, 0x84, 0xE8, 0xDD, 0xAE, + 0xB3, 0x03, 0xF8, 0xE8, 0x7B, 0xA6, 0xC9, 0x9A, + 0x56, 0x9C, 0xC7, 0x82, 0x1E, 0x9A, 0x9D, 0x13 +}; + +static const uint8_t ciphertext_sm4_ctr[] = { + 0xC1, 0x27, 0x47, 0xC7, 0x44, 0x0C, 0x9A, 0x5C, + 0x7D, 0x51, 0x26, 0x0D, 0x1B, 0xDB, 0x0D, 0x9D, + 0xC3, 0x75, 0xCE, 0xBB, 0x63, 0x9A, 0x5B, 0x0C, + 0xED, 0x64, 0x3F, 0x33, 0x80, 0x8F, 0x97, 0x40, + 0xB7, 0x5C, 0xA7, 0xFE, 0x2F, 0x7F, 0xFB, 0x20, + 0x13, 0xEC, 0xDC, 0xBC, 0x96, 0xC8, 0x05, 0xF0, + 0xA4, 0x95, 0xC4, 0x0A, 0xB7, 0x1B, 0x18, 0xB4, + 0xDA, 0x35, 0xFF, 0xA5, 0xB5, 0x90, 0x1B, 0x07, + 0x5C, 0x5B, 0x91, 0x36, 0xF0, 0xC9, 0xFE, 0xFB, + 0xC4, 0x71, 0xD6, 0x3B, 0x03, 0x28, 0x62, 0xB9, + 0x22, 0x7A, 0x97, 0xC9, 0x54, 0xC0, 0x8C, 0x71, + 0xEC, 0x8F, 0xE1, 0xBB, 0x56, 0xAE, 0xAB, 0x16, + 0xF6, 0x57, 0x76, 0x65, 0xC2, 0x4B, 0xE0, 0x46, + 0x4E, 0x13, 0x77, 0x50, 0x91, 0x24, 0x76, 0xD9, + 0xB7, 0x16, 0xFF, 0x9E, 0xD0, 0x2E, 0x14, 0x23, + 0x27, 0xF4, 0x99, 0x03, 0xDA, 0x1C, 0x52, 0x04 +}; + +static const struct blockcipher_test_data +sm4_test_data_cbc = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_CBC, + .cipher_key = { + .data = { + 0xE0, 0x70, 0x99, 0xF1, 0xBF, 0xAF, 0xFD, 0x7F, + 0x24, 0x0C, 0xD7, 0x90, 0xCA, 0x4F, 0xE1, 0x34 + }, + .len = 16 + }, + .iv = { + .data = { + 0xC7, 0x2B, 0x65, 0x91, 0xA0, 0xD7, 0xDE, 0x8F, + 0x6B, 0x40, 0x72, 0x33, 0xAD, 0x35, 0x81, 0xD6 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_sm4, + .len = 128 + }, + .ciphertext = { + .data = ciphertext_sm4_cbc, + .len = 128 + }, +}; + +static const struct blockcipher_test_data +sm4_test_data_ctr = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_CTR, + .cipher_key = { + .data = { + 0xE0, 0x70, 0x99, 0xF1, 0xBF, 0xAF, 0xFD, 0x7F, + 0x24, 0x0C, 0xD7, 0x90, 0xCA, 0x4F, 0xE1, 0x34 + }, + .len = 16 + }, + .iv = { + .data = { + 0xC7, 0x2B, 0x65, 0x91, 0xA0, 0xD7, 0xDE, 0x8F, + 0x6B, 0x40, 0x72, 0x33, 0xAD, 0x35, 0x81, 0xD6 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_sm4, + .len = 128 + }, + .ciphertext = { + .data = ciphertext_sm4_ctr, + .len = 128 + }, +}; + +static const struct blockcipher_test_data +sm4_test_data_ecb = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_ECB, + .cipher_key = { + .data = { + 0xE0, 0x70, 0x99, 0xF1, 0xBF, 0xAF, 0xFD, 0x7F, + 0x24, 0x0C, 0xD7, 0x90, 0xCA, 0x4F, 0xE1, 0x34 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_sm4, + .len = 128 + }, + .ciphertext = { + .data = ciphertext_sm4_ecb, + .len = 128 + }, +}; + +static const struct blockcipher_test_data +sm4_test_data_ofb = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_OFB, + .cipher_key = { + .data = { + 0xE0, 0x70, 0x99, 0xF1, 0xBF, 0xAF, 0xFD, 0x7F, + 0x24, 0x0C, 0xD7, 0x90, 0xCA, 0x4F, 0xE1, 0x34 + }, + .len = 16 + }, + .iv = { + .data = { + 0xC7, 0x2B, 0x65, 0x91, 0xA0, 0xD7, 0xDE, 0x8F, + 0x6B, 0x40, 0x72, 0x33, 0xAD, 0x35, 0x81, 0xD6 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_sm4, + .len = 128 + }, + .ciphertext = { + .data = ciphertext_sm4_ofb, + .len = 128 + }, +}; + +static const struct blockcipher_test_data +sm4_test_data_cfb = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_CFB, + .cipher_key = { + .data = { + 0xE0, 0x70, 0x99, 0xF1, 0xBF, 0xAF, 0xFD, 0x7F, + 0x24, 0x0C, 0xD7, 0x90, 0xCA, 0x4F, 0xE1, 0x34 + }, + .len = 16 + }, + .iv = { + .data = { + 0xC7, 0x2B, 0x65, 0x91, 0xA0, 0xD7, 0xDE, 0x8F, + 0x6B, 0x40, 0x72, 0x33, 0xAD, 0x35, 0x81, 0xD6 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_sm4, + .len = 128 + }, + .ciphertext = { + .data = ciphertext_sm4_cfb, + .len = 128 + }, +}; + +static const struct blockcipher_test_case sm4_cipheronly_test_cases[] = { + { + .test_descr = "SM4-CBC Encryption", + .test_data = &sm4_test_data_cbc, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "SM4-CBC Decryption", + .test_data = &sm4_test_data_cbc, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, + { + .test_descr = "SM4-CTR Encryption", + .test_data = &sm4_test_data_ctr, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "SM4-CTR Decryption", + .test_data = &sm4_test_data_ctr, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, + { + .test_descr = "SM4-ECB Encryption", + .test_data = &sm4_test_data_ecb, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "SM4-ECB Decryption", + .test_data = &sm4_test_data_ecb, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, + { + .test_descr = "SM4-OFB Encryption", + .test_data = &sm4_test_data_ofb, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "SM4-OFB Decryption", + .test_data = &sm4_test_data_ofb, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, + { + .test_descr = "SM4-CFB Encryption", + .test_data = &sm4_test_data_cfb, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "SM4-CFB Decryption", + .test_data = &sm4_test_data_cfb, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, +}; + +static const uint8_t plaintext_sm4_common[] = { + "What a lousy earth! He wondered how many people were destitute that" +}; + +static const uint8_t ciphertext64_sm4_cbc[] = { + 0x5D, 0x93, 0x4E, 0x50, 0xDC, 0x26, 0x03, 0xB5, + 0x6C, 0xFC, 0xB7, 0x09, 0x11, 0x28, 0x2F, 0xF7, + 0x6C, 0xB6, 0xE6, 0xCC, 0xB8, 0xC5, 0x01, 0x5F, + 0xBE, 0x89, 0xF8, 0xD3, 0xE8, 0xCD, 0x51, 0xC6, + 0x17, 0x31, 0x07, 0xDE, 0xA5, 0x8F, 0xFD, 0x79, + 0x2A, 0xAC, 0xAC, 0x90, 0x47, 0x8D, 0x0F, 0x16, + 0x66, 0xCF, 0x16, 0xF1, 0xE2, 0x4C, 0x79, 0x4A, + 0x6B, 0x5D, 0x6C, 0xAB, 0x98, 0x2B, 0xDB, 0xF8 +}; + +/* test vectors */ +static const uint8_t plaintext64_sm4_ctr[] = { + 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, + 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, + 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, + 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, + 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, + 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF, + 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17, + 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 +}; + +static const uint8_t ciphertext64_sm4_ctr[] = { + 0x14, 0xAE, 0x4A, 0x72, 0xB9, 0x7A, 0x93, 0xCE, + 0x12, 0x16, 0xCC, 0xD9, 0x98, 0xE3, 0x71, 0xC1, + 0x60, 0xF7, 0xEF, 0x8B, 0x63, 0x44, 0xBD, 0x6D, + 0xA1, 0x99, 0x25, 0x05, 0xE5, 0xFC, 0x21, 0x9B, + 0x0B, 0xF0, 0x57, 0xF8, 0x6C, 0x5D, 0x75, 0x10, + 0x3C, 0x0F, 0x46, 0x51, 0x9C, 0x7F, 0xB2, 0xE7, + 0x29, 0x28, 0x05, 0x03, 0x5A, 0xDB, 0x9A, 0x90, + 0xEC, 0xEF, 0x14, 0x53, 0x59, 0xD7, 0xCF, 0x0E +}; + +static const struct blockcipher_test_data sm4_test_data_1 = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_CTR, + .cipher_key = { + .data = { + 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, + 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C + }, + .len = 16 + }, + .iv = { + .data = { + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF + }, + .len = 16 + }, + .plaintext = { + .data = plaintext64_sm4_ctr, + .len = 64 + }, + .ciphertext = { + .data = ciphertext64_sm4_ctr, + .len = 64 + }, + .auth_algo = RTE_CRYPTO_AUTH_SM3_HMAC, + .auth_key = { + .data = { + 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA, + 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD, + 0xDE, 0xF4, 0xDE, 0xAD + }, + .len = 20 + }, + .digest = { + .data = { + 0x3A, 0x90, 0x8E, 0x9E, 0x07, 0x48, 0xBE, 0xFE, + 0x29, 0xB9, 0x61, 0xD8, 0x1A, 0x01, 0x5E, 0x34, + 0x98, 0x1A, 0x35, 0xE5, 0x26, 0x1A, 0x28, 0x1E, + 0xB1, 0xDC, 0xDB, 0xEB, 0xC7, 0x16, 0xF9, 0x9E + }, + .len = 32, + .truncated_len = 16 + } +}; + +/* test vectors */ +static const uint8_t plaintext64_sm4_cfb[] = { + 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, + 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, + 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, + 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, + 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, + 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF, + 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17, + 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 +}; + +static const uint8_t ciphertext64_sm4_cfb[] = { + 0x14, 0xAE, 0x4A, 0x72, 0xB9, 0x7A, 0x93, 0xCE, + 0x12, 0x16, 0xCC, 0xD9, 0x98, 0xE3, 0x71, 0xC1, + 0xAA, 0x8A, 0x2C, 0x8C, 0x61, 0x89, 0x6B, 0x8B, + 0x7C, 0xF8, 0x32, 0x6A, 0xEB, 0xAC, 0xD4, 0x0C, + 0xD1, 0x5D, 0xFA, 0x1D, 0xFD, 0x17, 0x67, 0x02, + 0x06, 0xCD, 0x38, 0x2C, 0x4D, 0x04, 0xF3, 0x96, + 0x2F, 0x85, 0x5C, 0x3F, 0xBB, 0x79, 0x56, 0xA9, + 0xC4, 0x6F, 0x34, 0xB3, 0xBE, 0xEC, 0xCA, 0x40 +}; + +static const struct blockcipher_test_data sm4_test_data_2 = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_CFB, + .cipher_key = { + .data = { + 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, + 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C + }, + .len = 16 + }, + .iv = { + .data = { + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF + }, + .len = 16 + }, + .plaintext = { + .data = plaintext64_sm4_cfb, + .len = 64 + }, + .ciphertext = { + .data = ciphertext64_sm4_cfb, + .len = 64 + }, + .auth_algo = RTE_CRYPTO_AUTH_SM3_HMAC, + .auth_key = { + .data = { + 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA, + 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD, + 0xDE, 0xF4, 0xDE, 0xAD + }, + .len = 20 + }, + .digest = { + .data = { + 0x6F, 0x7C, 0xFA, 0x6D, 0x02, 0x5D, 0xE2, 0x4B, + 0x4A, 0xEE, 0xC6, 0x67, 0x0B, 0xD3, 0xCF, 0xBD, + 0x64, 0x8F, 0x01, 0x17, 0x19, 0xD6, 0xFB, 0xEC, + 0x3A, 0x27, 0xE8, 0x0F, 0x51, 0xA3, 0xE2, 0x3F + }, + .len = 32, + .truncated_len = 16 + } +}; + +/* test vectors */ +static const uint8_t plaintext64_sm4_ofb[] = { + 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, + 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, + 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, + 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, + 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, + 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF, + 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17, + 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 +}; + +static const uint8_t ciphertext64_sm4_ofb[] = { + 0x14, 0xAE, 0x4A, 0x72, 0xB9, 0x7A, 0x93, 0xCE, + 0x12, 0x16, 0xCC, 0xD9, 0x98, 0xE3, 0x71, 0xC1, + 0x94, 0x54, 0x3E, 0x9A, 0x3A, 0x0A, 0x22, 0x63, + 0x22, 0xE8, 0xA5, 0xF3, 0x82, 0xB9, 0x14, 0x2D, + 0xEF, 0x5F, 0x94, 0xCB, 0x49, 0x17, 0xEF, 0xA4, + 0xD9, 0xCF, 0x3F, 0xC3, 0x32, 0x30, 0x90, 0x11, + 0x12, 0x61, 0x52, 0xCC, 0xEC, 0x43, 0x61, 0xF2, + 0x6F, 0x1E, 0x1A, 0x8D, 0xB4, 0x9D, 0x2F, 0xC4 +}; + +static const struct blockcipher_test_data sm4_test_data_3 = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_OFB, + .cipher_key = { + .data = { + 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, + 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C + }, + .len = 16 + }, + .iv = { + .data = { + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF + }, + .len = 16 + }, + .plaintext = { + .data = plaintext64_sm4_ofb, + .len = 64 + }, + .ciphertext = { + .data = ciphertext64_sm4_ofb, + .len = 64 + }, + .auth_algo = RTE_CRYPTO_AUTH_SM3_HMAC, + .auth_key = { + .data = { + 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA, + 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD, + 0xDE, 0xF4, 0xDE, 0xAD + }, + .len = 20 + }, + .digest = { + .data = { + 0xA7, 0x6F, 0x7D, 0xB5, 0xFB, 0x35, 0x92, 0x82, + 0x97, 0xB7, 0x9B, 0xBF, 0xA9, 0xCE, 0xA8, 0x4C, + 0x5A, 0xC5, 0x53, 0x62, 0x9F, 0x03, 0x54, 0x88, + 0x7D, 0xFE, 0x2D, 0xD3, 0x9C, 0xFB, 0x56, 0xED + }, + .len = 32, + .truncated_len = 16 + } +}; + +static const struct blockcipher_test_data sm4_test_data_4 = { + .crypto_algo = RTE_CRYPTO_CIPHER_SM4_CBC, + .cipher_key = { + .data = { + 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, + 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A + }, + .len = 16 + }, + .iv = { + .data = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_sm4_common, + .len = 64 + }, + .ciphertext = { + .data = ciphertext64_sm4_cbc, + .len = 64 + }, + .auth_algo = RTE_CRYPTO_AUTH_SM3_HMAC, + .auth_key = { + .data = { + 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA, + 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD, + 0xDE, 0xF4, 0xDE, 0xAD + }, + .len = 20 + }, + .digest = { + .data = { + 0xA7, 0x87, 0x94, 0x53, 0x17, 0xAE, 0xF9, 0xCD, + 0x8A, 0x60, 0x34, 0xFB, 0x9F, 0x07, 0xED, 0x28, + 0x04, 0x13, 0x8C, 0xD4, 0x48, 0x83, 0x4A, 0xBA, + 0xB8, 0xE8, 0x45, 0xDB, 0xE0, 0x66, 0xF9, 0xDA + }, + .len = 32, + .truncated_len = 16 + } +}; + +static const struct blockcipher_test_case sm4_chain_test_cases[] = { + { + .test_descr = "SM4-CBC HMAC-SM3 Encryption Digest", + .test_data = &sm4_test_data_4, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + }, + { + .test_descr = "SM4-CBC HMAC-SM3 Decryption Digest Verify", + .test_data = &sm4_test_data_4, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + }, + { + .test_descr = "SM4-CBC HMAC-SM3 Encryption Digest Scatter Gather", + .test_data = &sm4_test_data_4, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG | + BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-CBC HMAC-SM3 Decryption Digest Verify Scatter Gather", + .test_data = &sm4_test_data_4, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "SM4-CBC HMAC-SM3 Encryption Digest OOP", + .test_data = &sm4_test_data_4, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-CBC HMAC-SM3 Decryption Digest Verify OOP", + .test_data = &sm4_test_data_4, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-CTR HMAC-SM3 Encryption Digest", + .test_data = &sm4_test_data_1, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + }, + { + .test_descr = "SM4-CTR HMAC-SM3 Decryption Digest Verify", + .test_data = &sm4_test_data_1, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + }, + { + .test_descr = "SM4-CTR HMAC-SM3 Encryption Digest Scatter Gather", + .test_data = &sm4_test_data_1, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG | + BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-CTR HMAC-SM3 Decryption Digest Verify Scatter Gather", + .test_data = &sm4_test_data_1, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "SM4-CTR HMAC-SM3 Encryption Digest OOP", + .test_data = &sm4_test_data_1, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-CTR HMAC-SM3 Decryption Digest Verify OOP", + .test_data = &sm4_test_data_1, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-CFB HMAC-SM3 Encryption Digest", + .test_data = &sm4_test_data_2, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + }, + { + .test_descr = "SM4-CFB HMAC-SM3 Decryption Digest Verify", + .test_data = &sm4_test_data_2, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + }, + { + .test_descr = "SM4-CFB HMAC-SM3 Encryption Digest Scatter Gather", + .test_data = &sm4_test_data_2, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG | + BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-CFB HMAC-SM3 Decryption Digest Verify Scatter Gather", + .test_data = &sm4_test_data_2, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "SM4-CFB HMAC-SM3 Encryption Digest OOP", + .test_data = &sm4_test_data_2, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-CFB HMAC-SM3 Decryption Digest Verify OOP", + .test_data = &sm4_test_data_2, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-OFB HMAC-SM3 Encryption Digest", + .test_data = &sm4_test_data_3, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + }, + { + .test_descr = "SM4-OFB HMAC-SM3 Decryption Digest Verify", + .test_data = &sm4_test_data_3, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + }, + { + .test_descr = "SM4-OFB HMAC-SM3 Encryption Digest Scatter Gather", + .test_data = &sm4_test_data_3, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG | + BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-OFB HMAC-SM3 Decryption Digest Verify Scatter Gather", + .test_data = &sm4_test_data_3, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "SM4-OFB HMAC-SM3 Encryption Digest OOP", + .test_data = &sm4_test_data_3, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + }, + { + .test_descr = "SM4-OFB HMAC-SM3 Decryption Digest Verify OOP", + .test_data = &sm4_test_data_3, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + }, +}; + +#endif -- 2.19.0.rc0.windows.1