Hi Adam, > > This patch adds unit tests for QAT PMD for mixed encrypted-digest > cases, involving SNOW3G UIA2, ZUC EIA3, AES CMAC and NULL auth > algorithms together with SNOW3G UEA2, ZUC EEA3, AES CTR and NULL > cipher algorithms in various combinations. > > Signed-off-by: Adam Dybkowski <adamx.dybkow...@intel.com>
This patch doesn't apply on current tree. Could you please rebase. > --- > app/test/test_cryptodev.c | 470 ++++++- > app/test/test_cryptodev_mixed_test_vectors.h | 1320 +++++++++++++++++- > 2 files changed, 1721 insertions(+), 69 deletions(-) > //snip > /* Create the session */ > - retval = create_wireless_algo_auth_cipher_session( > - ts_params->valid_devs[0], > - (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT > - : RTE_CRYPTO_CIPHER_OP_ENCRYPT), > - (verify ? RTE_CRYPTO_AUTH_OP_VERIFY > - : RTE_CRYPTO_AUTH_OP_GENERATE), > - tdata->auth_algo, > - tdata->cipher_algo, > - tdata->auth_key.data, tdata->auth_key.len, > - tdata->auth_iv.len, tdata->digest_enc.len, > - tdata->cipher_iv.len); > - > + if (verify) > + retval = create_wireless_algo_cipher_auth_session( > + ts_params->valid_devs[0], > + RTE_CRYPTO_CIPHER_OP_DECRYPT, > + RTE_CRYPTO_AUTH_OP_VERIFY, > + tdata->auth_algo, > + tdata->cipher_algo, > + tdata->auth_key.data, tdata->auth_key.len, > + tdata->auth_iv.len, tdata->digest_enc.len, > + tdata->cipher_iv.len); > + else > + retval = create_wireless_algo_auth_cipher_session( > + ts_params->valid_devs[0], > + RTE_CRYPTO_CIPHER_OP_ENCRYPT, > + RTE_CRYPTO_AUTH_OP_GENERATE, > + tdata->auth_algo, > + tdata->cipher_algo, > + tdata->auth_key.data, tdata->auth_key.len, > + tdata->auth_iv.len, tdata->digest_enc.len, > + tdata->cipher_iv.len); Why are these changes done? It looked better previously. > if (retval < 0) > return retval; > > @@ -6642,25 +6690,45 @@ test_mixed_auth_cipher(const struct > mixed_cipher_auth_test_data *tdata, > } > > /* Create the operation */ > - retval = create_wireless_algo_auth_cipher_operation( > - tdata->digest_enc.len, > - tdata->cipher_iv.data, tdata->cipher_iv.len, > - tdata->auth_iv.data, tdata->auth_iv.len, > - (tdata->digest_enc.offset == 0 ? > - (verify ? ciphertext_pad_len : plaintext_pad_len) > - : tdata->digest_enc.offset), > - tdata->validCipherLen.len_bits, > - tdata->cipher.offset_bits, > - tdata->validAuthLen.len_bits, > - tdata->auth.offset_bits, > - op_mode, 0); > - > + if (verify) > + retval = create_wireless_algo_cipher_hash_operation( > + tdata->digest_enc.data, tdata->digest_enc.len, > + tdata->auth_iv.data, tdata->auth_iv.len, > + plaintext_len, RTE_CRYPTO_AUTH_OP_VERIFY, > + tdata->cipher_iv.data, tdata->cipher_iv.len, > + tdata->validCipherLen.len_bits, > + tdata->cipher.offset_bits, > + tdata->validAuthLen.len_bits, > + tdata->auth.offset_bits); > + else > + retval = create_wireless_algo_auth_cipher_operation( > + tdata->digest_enc.len, > + tdata->cipher_iv.data, tdata->cipher_iv.len, > + tdata->auth_iv.data, tdata->auth_iv.len, > + (tdata->digest_enc.offset == 0 ? > + plaintext_pad_len > + : tdata->digest_enc.offset), > + tdata->validCipherLen.len_bits, > + tdata->cipher.offset_bits, > + tdata->validAuthLen.len_bits, > + tdata->auth.offset_bits, > + op_mode, 0); > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + op = process_crypto_request(ts_params->valid_devs[0], > ut_params->op); > > + /* Check if the op failed because the device doesn't */ > + /* support this particular combination of algorithms */ > + if (op == NULL && ut_params->op->status == > + RTE_CRYPTO_OP_STATUS_INVALID_SESSION) { > + printf("Device doesn't support this mixed combination. " > + "Test Skipped.\n"); > + return -ENOTSUP; > + } > + ut_params->op = op; > + > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > ut_params->obuf = (op_mode == IN_PLACE ? > @@ -6675,12 +6743,10 @@ test_mixed_auth_cipher(const struct > mixed_cipher_auth_test_data *tdata, > (tdata->cipher.offset_bits >> 3); > > debug_hexdump(stdout, "plaintext:", plaintext, > - (tdata->plaintext.len_bits >> 3) - > - tdata->digest_enc.len); > + tdata->plaintext.len_bits >> 3); > debug_hexdump(stdout, "plaintext expected:", > tdata->plaintext.data, > - (tdata->plaintext.len_bits >> 3) - > - tdata->digest_enc.len); > + tdata->plaintext.len_bits >> 3); > } else { > if (ut_params->obuf) > ciphertext = rte_pktmbuf_mtod(ut_params->obuf, > @@ -6725,6 +6791,10 @@ test_mixed_auth_cipher(const struct > mixed_cipher_auth_test_data *tdata, > DIGEST_BYTE_LENGTH_SNOW3G_UIA2, > "Generated auth tag not as expected"); > } > + > + TEST_ASSERT_EQUAL(ut_params->op->status, > RTE_CRYPTO_OP_STATUS_SUCCESS, > + "crypto op processing failed"); > + > return 0; > } > > @@ -6748,6 +6818,7 @@ test_mixed_auth_cipher_sgl(const struct > mixed_cipher_auth_test_data *tdata, > uint8_t digest_buffer[10000]; > > struct rte_cryptodev_info dev_info; > + struct rte_crypto_op *op; > > /* Check if device supports particular algorithms */ > if (test_mixed_check_if_unsupported(tdata)) > @@ -6776,18 +6847,26 @@ test_mixed_auth_cipher_sgl(const struct > mixed_cipher_auth_test_data *tdata, > } > > /* Create the session */ > - retval = create_wireless_algo_auth_cipher_session( > - ts_params->valid_devs[0], > - (verify ? RTE_CRYPTO_CIPHER_OP_DECRYPT > - : RTE_CRYPTO_CIPHER_OP_ENCRYPT), > - (verify ? RTE_CRYPTO_AUTH_OP_VERIFY > - : RTE_CRYPTO_AUTH_OP_GENERATE), > - tdata->auth_algo, > - tdata->cipher_algo, > - tdata->auth_key.data, tdata->auth_key.len, > - tdata->auth_iv.len, tdata->digest_enc.len, > - tdata->cipher_iv.len); > - > + if (verify) > + retval = create_wireless_algo_cipher_auth_session( > + ts_params->valid_devs[0], > + RTE_CRYPTO_CIPHER_OP_DECRYPT, > + RTE_CRYPTO_AUTH_OP_VERIFY, > + tdata->auth_algo, > + tdata->cipher_algo, > + tdata->auth_key.data, tdata->auth_key.len, > + tdata->auth_iv.len, tdata->digest_enc.len, > + tdata->cipher_iv.len); > + else > + retval = create_wireless_algo_auth_cipher_session( > + ts_params->valid_devs[0], > + RTE_CRYPTO_CIPHER_OP_ENCRYPT, > + RTE_CRYPTO_AUTH_OP_GENERATE, > + tdata->auth_algo, > + tdata->cipher_algo, > + tdata->auth_key.data, tdata->auth_key.len, > + tdata->auth_iv.len, tdata->digest_enc.len, > + tdata->cipher_iv.len); > if (retval < 0) > return retval; > > @@ -6797,7 +6876,7 @@ test_mixed_auth_cipher_sgl(const struct > mixed_cipher_auth_test_data *tdata, > plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16); > > ut_params->ibuf = create_segmented_mbuf(ts_params->mbuf_pool, > - plaintext_pad_len, 15, 0); > + ciphertext_pad_len, 15, 0); > TEST_ASSERT_NOT_NULL(ut_params->ibuf, > "Failed to allocate input buffer in mempool"); > > @@ -6826,25 +6905,46 @@ test_mixed_auth_cipher_sgl(const struct > mixed_cipher_auth_test_data *tdata, > memset(buffer, 0, sizeof(buffer)); > > /* Create the operation */ > - retval = create_wireless_algo_auth_cipher_operation( > - tdata->digest_enc.len, > - tdata->cipher_iv.data, tdata->cipher_iv.len, > - tdata->auth_iv.data, tdata->auth_iv.len, > - (tdata->digest_enc.offset == 0 ? > - (verify ? ciphertext_pad_len : plaintext_pad_len) > - : tdata->digest_enc.offset), > - tdata->validCipherLen.len_bits, > - tdata->cipher.offset_bits, > - tdata->validAuthLen.len_bits, > - tdata->auth.offset_bits, > - op_mode, 1); > - > + if (verify) > + retval = create_wireless_algo_cipher_hash_operation( > + tdata->digest_enc.data, tdata->digest_enc.len, > + tdata->auth_iv.data, tdata->auth_iv.len, > + plaintext_len, RTE_CRYPTO_AUTH_OP_VERIFY, > + tdata->cipher_iv.data, tdata->cipher_iv.len, > + tdata->validCipherLen.len_bits, > + tdata->cipher.offset_bits, > + tdata->validAuthLen.len_bits, > + tdata->auth.offset_bits); > + else > + retval = create_wireless_algo_auth_cipher_operation( > + tdata->digest_enc.len, > + tdata->cipher_iv.data, tdata->cipher_iv.len, > + tdata->auth_iv.data, tdata->auth_iv.len, > + (tdata->digest_enc.offset == 0 ? > + plaintext_pad_len > + : tdata->digest_enc.offset), > + tdata->validCipherLen.len_bits, > + tdata->cipher.offset_bits, > + tdata->validAuthLen.len_bits, > + tdata->auth.offset_bits, > + op_mode, 1); > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + op = process_crypto_request(ts_params->valid_devs[0], > ut_params->op); > > + /* Check if the op failed because the device doesn't */ > + /* support this particular combination of algorithms */ > + if (op == NULL && ut_params->op->status == > + RTE_CRYPTO_OP_STATUS_INVALID_SESSION) { > + printf("Device doesn't support this mixed combination. " > + "Test Skipped.\n"); > + return -ENOTSUP; > + } > + > + ut_params->op = op; > + > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > ut_params->obuf = (op_mode == IN_PLACE ? > @@ -6917,6 +7017,10 @@ test_mixed_auth_cipher_sgl(const struct > mixed_cipher_auth_test_data *tdata, > tdata->digest_enc.len, > "Generated auth tag not as expected"); > } > + > + TEST_ASSERT_EQUAL(ut_params->op->status, > RTE_CRYPTO_OP_STATUS_SUCCESS, > + "crypto op processing failed"); > + > return 0; > } > > @@ -6978,6 +7082,176 @@ > test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl(void) > &auth_aes_cmac_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, > 1); > } > Can we have a single function to execute all cases with some function arguments? > +/** MIXED AUTH + CIPHER */ > + > +static int > +test_auth_zuc_cipher_snow_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_zuc_cipher_snow_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_zuc_cipher_snow_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_zuc_cipher_snow_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_aes_cmac_cipher_snow_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_aes_cmac_cipher_snow_test_case_1, OUT_OF_PLACE, > 0); > +} > + > +static int > +test_verify_auth_aes_cmac_cipher_snow_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_aes_cmac_cipher_snow_test_case_1, OUT_OF_PLACE, > 1); > +} > + > +static int > +test_auth_zuc_cipher_aes_ctr_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_zuc_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_zuc_cipher_aes_ctr_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_zuc_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_snow_cipher_aes_ctr_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_snow_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_snow_cipher_aes_ctr_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_snow_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_snow_cipher_zuc_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_snow_cipher_zuc_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_snow_cipher_zuc_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_snow_cipher_zuc_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_aes_cmac_cipher_zuc_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_aes_cmac_cipher_zuc_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_aes_cmac_cipher_zuc_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_aes_cmac_cipher_zuc_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_null_cipher_snow_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_null_cipher_snow_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_null_cipher_snow_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_null_cipher_snow_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_null_cipher_zuc_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_null_cipher_zuc_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_null_cipher_zuc_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_null_cipher_zuc_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_snow_cipher_null_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_snow_cipher_null_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_snow_cipher_null_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_snow_cipher_null_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_zuc_cipher_null_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_zuc_cipher_null_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_zuc_cipher_null_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_zuc_cipher_null_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_null_cipher_aes_ctr_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_null_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_null_cipher_aes_ctr_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_null_cipher_aes_ctr_test_case_1, OUT_OF_PLACE, 1); > +} > + > +static int > +test_auth_aes_cmac_cipher_null_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_aes_cmac_cipher_null_test_case_1, OUT_OF_PLACE, 0); > +} > + > +static int > +test_verify_auth_aes_cmac_cipher_null_test_case_1(void) > +{ > + return test_mixed_auth_cipher( > + &auth_aes_cmac_cipher_null_test_case_1, OUT_OF_PLACE, 1); > +} > + > static int > test_3DES_chain_qat_all(void) > { > @@ -12288,6 +12562,68 @@ static struct unit_test_suite > cryptodev_qat_testsuite = { > TEST_CASE_ST(ut_setup, ut_teardown, > > test_verify_aes_cmac_aes_ctr_digest_enc_test_case_1_oop_sgl), > > + /** AUTH ZUC + CIPHER SNOW3G */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_zuc_cipher_snow_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_zuc_cipher_snow_test_case_1), > + /** AUTH AES CMAC + CIPHER SNOW3G */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_aes_cmac_cipher_snow_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_aes_cmac_cipher_snow_test_case_1), > + /** AUTH ZUC + CIPHER AES CTR */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_zuc_cipher_aes_ctr_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_zuc_cipher_aes_ctr_test_case_1), > + /** AUTH SNOW3G + CIPHER AES CTR */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_snow_cipher_aes_ctr_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_snow_cipher_aes_ctr_test_case_1), > + /** AUTH SNOW3G + CIPHER ZUC */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_snow_cipher_zuc_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_snow_cipher_zuc_test_case_1), > + /** AUTH AES CMAC + CIPHER ZUC */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_aes_cmac_cipher_zuc_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_aes_cmac_cipher_zuc_test_case_1), > + > + /** AUTH NULL + CIPHER SNOW3G */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_null_cipher_snow_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_null_cipher_snow_test_case_1), > + /** AUTH NULL + CIPHER ZUC */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_null_cipher_zuc_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_null_cipher_zuc_test_case_1), > + /** AUTH SNOW3G + CIPHER NULL */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_snow_cipher_null_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_snow_cipher_null_test_case_1), > + /** AUTH ZUC + CIPHER NULL */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_zuc_cipher_null_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_zuc_cipher_null_test_case_1), > + /** AUTH NULL + CIPHER AES CTR */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_null_cipher_aes_ctr_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_null_cipher_aes_ctr_test_case_1), > + /** AUTH AES CMAC + CIPHER NULL */ > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_auth_aes_cmac_cipher_null_test_case_1), > + TEST_CASE_ST(ut_setup, ut_teardown, > + test_verify_auth_aes_cmac_cipher_null_test_case_1), > + > TEST_CASES_END() /**< NULL terminate unit test array */ > } > };