From patchwork Mon Mar 25 13:51:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fan Zhang X-Patchwork-Id: 51631 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 22009378E; Mon, 25 Mar 2019 14:53:44 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 8F94A10A3 for ; Mon, 25 Mar 2019 14:53:40 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Mar 2019 06:53:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,269,1549958400"; d="scan'208";a="285683195" Received: from silpixa00398673.ir.intel.com (HELO silpixa00398673.ger.corp.intel.com) ([10.237.223.136]) by orsmga004.jf.intel.com with ESMTP; 25 Mar 2019 06:53:38 -0700 From: Fan Zhang To: dev@dpdk.org Cc: akhil.goyal@nxp.com, roy.fan.zhang@intel.com, arkadiuszx.kusztal@intel.com, pablo.de.lara.guarch@intel.com Date: Mon, 25 Mar 2019 13:51:21 +0000 Message-Id: <20190325135121.4484-3-roy.fan.zhang@intel.com> X-Mailer: git-send-email 2.14.5 In-Reply-To: <20190325135121.4484-1-roy.fan.zhang@intel.com> References: <20190228113619.76782-1-roy.fan.zhang@intel.com> <20190325135121.4484-1-roy.fan.zhang@intel.com> Subject: [dpdk-dev] [PATCH v3 2/2] test: add out of place test for AESNI-MB X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch updates the unit test to enable AESNI-MB PMD out-of-place tests. A special test type that swap both the source and destination buffer is added for a more comprehensive test set to take place. Signed-off-by: Fan Zhang Acked-by: Fiona Trahe --- app/test/test_cryptodev_aes_test_vectors.h | 110 ++++++++++++++++++++++++++--- app/test/test_cryptodev_blockcipher.c | 83 ++++++++++++++++++---- app/test/test_cryptodev_blockcipher.h | 3 + app/test/test_cryptodev_des_test_vectors.h | 24 ++++--- 4 files changed, 190 insertions(+), 30 deletions(-) diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h index 6dd8e5f96..3d3c7313b 100644 --- a/app/test/test_cryptodev_aes_test_vectors.h +++ b/app/test/test_cryptodev_aes_test_vectors.h @@ -1160,8 +1160,78 @@ static const struct blockcipher_test_data aes_test_data_docsis_3 = { } }; +static const uint8_t +cipher_aescbc_offset_16[] = { + 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C, + 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72, + 0x68, 0x2A, 0x6A, 0x82, 0xE0, 0x73, 0xC7, 0x51, + 0x81, 0xF4, 0x47, 0x27, 0x1A, 0xEF, 0x76, 0x15, + 0x1C, 0xE1, 0x38, 0x5F, 0xE1, 0x81, 0x77, 0xC7, + 0x8B, 0xF0, 0x69, 0xC3, 0x3C, 0x45, 0x1C, 0x0A, + 0xA3, 0x93, 0xBF, 0x60, 0x57, 0x88, 0xD2, 0xFF, + 0xE1, 0x8F, 0xC0, 0x64, 0x2C, 0x42, 0xC5, 0x22, + 0xE3, 0x5F, 0x71, 0x1F, 0xF7, 0x62, 0xA2, 0x7E, + 0x0D, 0x42, 0xD9, 0xE7, 0xF3, 0x10, 0xB0, 0xEE, +}; + +/** AES-128-CBC SHA1 OOP test vector for swapping src/dst */ +static const struct blockcipher_test_data aes_test_data_14 = { + .crypto_algo = RTE_CRYPTO_CIPHER_AES_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_aes_common, + .len = 80 + }, + .cipher_offset = 16, + .auth_offset = 0, + .ciphertext = { + .data = cipher_aescbc_offset_16, + .len = 80 + }, + .auth_algo = RTE_CRYPTO_AUTH_SHA1_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 = { + 0xCC, 0x15, 0x83, 0xF7, 0x23, 0x87, 0x96, 0xA7, + 0x29, 0x34, 0x32, 0xE4, 0x4C, 0x06, 0xE8, 0xEB, + 0x70, 0x72, 0x4B, 0xAD + }, + .len = 20, + .truncated_len = 12 + } +}; + static const struct blockcipher_test_case aes_chain_test_cases[] = { { + .test_descr = "AES-128-CBC HMAC-SHA1 Decryption Digest " + "Verify OOP Offset", + .test_data = &aes_test_data_14, + .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB | + BLOCKCIPHER_TEST_TARGET_PMD_QAT + }, + { .test_descr = "AES-128-CTR HMAC-SHA1 Encryption Digest", .test_data = &aes_test_data_1, .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, @@ -1471,8 +1541,18 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = { BLOCKCIPHER_TEST_TARGET_PMD_DPAA2_SEC | BLOCKCIPHER_TEST_TARGET_PMD_DPAA_SEC | BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR | + BLOCKCIPHER_TEST_TARGET_PMD_MB | BLOCKCIPHER_TEST_TARGET_PMD_OCTEONTX }, + { + .test_descr = "AES-128-CBC HMAC-SHA1 Encryption Digest " + "OOP Offset", + .test_data = &aes_test_data_14, + .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, + .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB | + BLOCKCIPHER_TEST_TARGET_PMD_QAT + }, { .test_descr = "AES-128-CBC HMAC-SHA1 Decryption Digest " "Verify OOP", @@ -1485,7 +1565,8 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = { BLOCKCIPHER_TEST_TARGET_PMD_DPAA2_SEC | BLOCKCIPHER_TEST_TARGET_PMD_DPAA_SEC | BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR | - BLOCKCIPHER_TEST_TARGET_PMD_OCTEONTX + BLOCKCIPHER_TEST_TARGET_PMD_OCTEONTX | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "AES-128-CBC HMAC-SHA224 Encryption Digest", @@ -1698,7 +1779,8 @@ static const struct blockcipher_test_case aes_cipheronly_test_cases[] = { BLOCKCIPHER_TEST_TARGET_PMD_DPAA_SEC | BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR | BLOCKCIPHER_TEST_TARGET_PMD_CCP | - BLOCKCIPHER_TEST_TARGET_PMD_VIRTIO + BLOCKCIPHER_TEST_TARGET_PMD_VIRTIO | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "AES-256-CBC OOP Decryption", @@ -1711,7 +1793,8 @@ static const struct blockcipher_test_case aes_cipheronly_test_cases[] = { BLOCKCIPHER_TEST_TARGET_PMD_DPAA_SEC | BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR | BLOCKCIPHER_TEST_TARGET_PMD_CCP | - BLOCKCIPHER_TEST_TARGET_PMD_VIRTIO + BLOCKCIPHER_TEST_TARGET_PMD_VIRTIO | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "AES-128-CTR Encryption", @@ -1873,42 +1956,49 @@ static const struct blockcipher_test_case aes_docsis_test_cases[] = { .test_data = &aes_test_data_docsis_1, .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, - .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT + .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "AES-DOCSIS-BPI OOP Runt Block Encryption", .test_data = &aes_test_data_docsis_2, .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, - .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT + .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, + { .test_descr = "AES-DOCSIS-BPI OOP Uneven Block Encryption", .test_data = &aes_test_data_docsis_3, .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, - .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT + .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "AES-DOCSIS-BPI OOP Full Block Decryption", .test_data = &aes_test_data_docsis_1, .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, - .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT + .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "AES-DOCSIS-BPI OOP Runt Block Decryption", .test_data = &aes_test_data_docsis_2, .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, - .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT + .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "AES-DOCSIS-BPI OOP Uneven Block Decryption", .test_data = &aes_test_data_docsis_3, .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, - .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT - } + .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB + }, }; #endif /* TEST_CRYPTODEV_AES_TEST_VECTORS_H_ */ diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c index 1f0689114..cdbdcce1e 100644 --- a/app/test/test_cryptodev_blockcipher.c +++ b/app/test/test_cryptodev_blockcipher.c @@ -79,6 +79,7 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t, RTE_STR(CRYPTODEV_NAME_OCTEONTX_SYM_PMD)); int nb_segs = 1; + uint32_t nb_iterates = 0; rte_cryptodev_info_get(dev_id, &dev_info); @@ -201,6 +202,48 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t, sym_op = op->sym; +iterate: + if (nb_iterates) { + struct rte_mbuf *tmp_buf = ibuf; + + ibuf = obuf; + obuf = tmp_buf; + + rte_pktmbuf_reset(ibuf); + rte_pktmbuf_reset(obuf); + + rte_pktmbuf_append(ibuf, tdata->ciphertext.len); + + /* only encryption requires plaintext.data input, + * decryption/(digest gen)/(digest verify) use ciphertext.data + * to be computed + */ + if (t->op_mask & BLOCKCIPHER_TEST_OP_ENCRYPT) + pktmbuf_write(ibuf, 0, tdata->plaintext.len, + tdata->plaintext.data); + else + pktmbuf_write(ibuf, 0, tdata->ciphertext.len, + tdata->ciphertext.data); + + buf_p = rte_pktmbuf_append(ibuf, digest_len); + if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_VERIFY) + rte_memcpy(buf_p, tdata->digest.data, digest_len); + else + memset(buf_p, 0, digest_len); + + memset(obuf->buf_addr, dst_pattern, obuf->buf_len); + + buf_p = rte_pktmbuf_append(obuf, buf_len); + if (!buf_p) { + snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u " + "FAILED: %s", __LINE__, + "No room to append mbuf"); + status = TEST_FAILED; + goto error_exit; + } + memset(buf_p, 0, buf_len); + } + sym_op->m_src = ibuf; if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP) { @@ -307,8 +350,9 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t, cipher_xform->cipher.iv.offset = IV_OFFSET; cipher_xform->cipher.iv.length = tdata->iv.len; - sym_op->cipher.data.offset = 0; - sym_op->cipher.data.length = tdata->ciphertext.len; + sym_op->cipher.data.offset = tdata->cipher_offset; + sym_op->cipher.data.length = tdata->ciphertext.len - + tdata->cipher_offset; rte_memcpy(rte_crypto_op_ctod_offset(op, uint8_t *, IV_OFFSET), tdata->iv.data, tdata->iv.len); @@ -339,12 +383,17 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t, digest_offset); } - sym_op->auth.data.offset = 0; - sym_op->auth.data.length = tdata->ciphertext.len; + sym_op->auth.data.offset = tdata->auth_offset; + sym_op->auth.data.length = tdata->ciphertext.len - + tdata->auth_offset; } - /* create session for sessioned op */ - if (!(t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)) { + /** + * Create session for sessioned op. For mbuf iteration test, + * skip the session creation for the second iteration. + */ + if (!(t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS) && + nb_iterates == 0) { sess = rte_cryptodev_sym_session_create(sess_mpool); rte_cryptodev_sym_session_init(dev_id, sess, init_xform, @@ -421,15 +470,20 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t, uint32_t compare_len; if (t->op_mask & BLOCKCIPHER_TEST_OP_ENCRYPT) { - compare_ref = tdata->ciphertext.data; - compare_len = tdata->ciphertext.len; + compare_ref = tdata->ciphertext.data + + tdata->cipher_offset; + compare_len = tdata->ciphertext.len - + tdata->cipher_offset; } else { - compare_ref = tdata->plaintext.data; - compare_len = tdata->plaintext.len; + compare_ref = tdata->plaintext.data + + tdata->cipher_offset; + compare_len = tdata->plaintext.len - + tdata->cipher_offset; } - if (memcmp(rte_pktmbuf_read(iobuf, 0, compare_len, - buffer), compare_ref, compare_len)) { + if (memcmp(rte_pktmbuf_read(iobuf, tdata->cipher_offset, + compare_len, buffer), compare_ref, + compare_len)) { snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u " "FAILED: %s", __LINE__, "Crypto data not as expected"); @@ -524,6 +578,11 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t, goto error_exit; } } + + if (!nb_iterates) { + nb_iterates++; + goto iterate; + } } else { /* In-place operation */ struct rte_mbuf *mbuf; diff --git a/app/test/test_cryptodev_blockcipher.h b/app/test/test_cryptodev_blockcipher.h index 6925a6c0d..060d10498 100644 --- a/app/test/test_cryptodev_blockcipher.h +++ b/app/test/test_cryptodev_blockcipher.h @@ -98,6 +98,9 @@ struct blockcipher_test_data { unsigned int len; /* for qat */ unsigned int truncated_len; /* for mb */ } digest; + + unsigned int cipher_offset; + unsigned int auth_offset; }; int diff --git a/app/test/test_cryptodev_des_test_vectors.h b/app/test/test_cryptodev_des_test_vectors.h index f1b8cbd45..a71b0e902 100644 --- a/app/test/test_cryptodev_des_test_vectors.h +++ b/app/test/test_cryptodev_des_test_vectors.h @@ -1016,7 +1016,8 @@ static const struct blockcipher_test_case des_docsis_test_cases[] = { .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL | - BLOCKCIPHER_TEST_TARGET_PMD_QAT + BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "DES-DOCSIS-BPI OOP Runt Block Encryption", @@ -1024,7 +1025,8 @@ static const struct blockcipher_test_case des_docsis_test_cases[] = { .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL | - BLOCKCIPHER_TEST_TARGET_PMD_QAT + BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "DES-DOCSIS-BPI OOP Uneven Encryption", @@ -1032,7 +1034,8 @@ static const struct blockcipher_test_case des_docsis_test_cases[] = { .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL | - BLOCKCIPHER_TEST_TARGET_PMD_QAT + BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "DES-DOCSIS-BPI OOP Full Block Decryption", @@ -1040,7 +1043,8 @@ static const struct blockcipher_test_case des_docsis_test_cases[] = { .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL | - BLOCKCIPHER_TEST_TARGET_PMD_QAT + BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "DES-DOCSIS-BPI OOP Runt Block Decryption", @@ -1048,7 +1052,8 @@ static const struct blockcipher_test_case des_docsis_test_cases[] = { .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL | - BLOCKCIPHER_TEST_TARGET_PMD_QAT + BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "DES-DOCSIS-BPI OOP Uneven Decryption", @@ -1056,7 +1061,8 @@ static const struct blockcipher_test_case des_docsis_test_cases[] = { .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP, .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL | - BLOCKCIPHER_TEST_TARGET_PMD_QAT + BLOCKCIPHER_TEST_TARGET_PMD_QAT | + BLOCKCIPHER_TEST_TARGET_PMD_MB } }; @@ -1200,7 +1206,8 @@ static const struct blockcipher_test_case triple_des_chain_test_cases[] = { BLOCKCIPHER_TEST_TARGET_PMD_QAT | BLOCKCIPHER_TEST_TARGET_PMD_DPAA2_SEC | BLOCKCIPHER_TEST_TARGET_PMD_DPAA_SEC | - BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR + BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "3DES-128-CBC HMAC-SHA1 Decryption Digest" @@ -1212,7 +1219,8 @@ static const struct blockcipher_test_case triple_des_chain_test_cases[] = { BLOCKCIPHER_TEST_TARGET_PMD_QAT | BLOCKCIPHER_TEST_TARGET_PMD_DPAA2_SEC | BLOCKCIPHER_TEST_TARGET_PMD_DPAA_SEC | - BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR + BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR | + BLOCKCIPHER_TEST_TARGET_PMD_MB }, { .test_descr = "3DES-128-CBC HMAC-SHA1 Encryption Digest"