X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=examples%2Ffips_validation%2Ffips_dev_self_test.c;h=17e85973c044ed0cda9b14b43725fc08575ad6dc;hb=cfa9e98d3c135e4f937265263feb7377330219f6;hp=2c7e9d24162d17ad7edddfcbcb53bf5c841cbd43;hpb=41d561cbdd249919196a6ed0e4fb817dd7df0af3;p=dpdk.git diff --git a/examples/fips_validation/fips_dev_self_test.c b/examples/fips_validation/fips_dev_self_test.c index 2c7e9d2416..17e85973c0 100644 --- a/examples/fips_validation/fips_dev_self_test.c +++ b/examples/fips_validation/fips_dev_self_test.c @@ -10,6 +10,7 @@ #define IV_OFF (sizeof(struct rte_crypto_op) + sizeof(struct rte_crypto_sym_op)) #define FIPS_DEV_TEST_DATA_MAX_SIZE 8096 +#define AES_CCM_AAD_PAD_SIZE 18 struct fips_dev_self_test_vector { const char *name; @@ -1236,6 +1237,8 @@ prepare_auth_op(struct rte_crypto_op *op, memcpy(dst, vec->input.data, vec->input.len); sym->auth.data.length = vec->input.len; sym->auth.digest.data = dst + vec->input.len; + sym->auth.digest.phys_addr = rte_pktmbuf_iova_offset(mbuf, + vec->input.len); if (dir == self_test_dir_dec_auth_verify) memcpy(dst + vec->input.len, vec->digest.data, vec->digest.len); @@ -1277,7 +1280,8 @@ prepare_aead_op(struct rte_crypto_op *op, return -ENOMEM; } - dst = (uint8_t *)rte_pktmbuf_append(mbuf, len + vec->digest.len); + dst = (uint8_t *)rte_pktmbuf_append(mbuf, RTE_ALIGN_CEIL(len + + vec->digest.len, 16)); if (!dst) { RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM); return -ENOMEM; @@ -1286,13 +1290,33 @@ prepare_aead_op(struct rte_crypto_op *op, sym->m_src = mbuf; sym->aead.data.length = len; sym->aead.data.offset = 0; - sym->aead.aad.data = vec->aead.aad.data; - sym->aead.digest.data = dst + vec->input.len; memcpy(dst, src, len); + sym->aead.digest.data = dst + vec->input.len; + sym->aead.digest.phys_addr = rte_pktmbuf_iova_offset(mbuf, + vec->input.len); if (dir == self_test_dir_dec_auth_verify) memcpy(sym->aead.digest.data, vec->digest.data, vec->digest.len); + len = (vec->aead.algo == RTE_CRYPTO_AEAD_AES_CCM) ? + (vec->aead.aad.len + AES_CCM_AAD_PAD_SIZE) : + vec->aead.aad.len; + + dst = rte_malloc(NULL, len, 16); + if (!dst) { + RTE_LOG(ERR, PMD, "Error %i: Not enough memory\n", -ENOMEM); + return -ENOMEM; + } + + sym->aead.aad.data = dst; + sym->aead.aad.phys_addr = rte_malloc_virt2iova(dst); + if (vec->aead.algo == RTE_CRYPTO_AEAD_AES_CCM) + memcpy(dst, vec->aead.aad.data, + vec->aead.aad.len + AES_CCM_AAD_PAD_SIZE); + else + memcpy(dst, vec->aead.aad.data, + vec->aead.aad.len); + rte_crypto_op_attach_sym_session(op, session); return 0; @@ -1309,6 +1333,9 @@ check_cipher_result(struct rte_crypto_op *op, uint32_t len, src_len; int ret; + if (!mbuf) + return -1; + if (dir == self_test_dir_enc_auth_gen) { src = vec->output.data; src_len = vec->output.len; @@ -1318,7 +1345,7 @@ check_cipher_result(struct rte_crypto_op *op, } GET_MBUF_DATA(data, len, mbuf); - if (len != src_len) + if (!len) return -1; ret = memcmp(data, src, src_len); @@ -1338,8 +1365,11 @@ check_auth_result(struct rte_crypto_op *op, uint32_t len; int ret; + if (mbuf == NULL) + return -1; + GET_MBUF_DATA(data, len, mbuf); - if (len != vec->input.len + vec->digest.len) + if (!len) return -1; if (dir == self_test_dir_enc_auth_gen) { @@ -1363,6 +1393,12 @@ check_aead_result(struct rte_crypto_op *op, uint32_t len, src_len; int ret; + if (!mbuf) + return -1; + + if (op->sym->aead.aad.data) + rte_free(op->sym->aead.aad.data); + if (dir == self_test_dir_enc_auth_gen) { src = vec->output.data; src_len = vec->output.len; @@ -1372,7 +1408,7 @@ check_aead_result(struct rte_crypto_op *op, } GET_MBUF_DATA(data, len, mbuf); - if (len != src_len + vec->digest.len) + if (!len) return -1; ret = memcmp(data, src, src_len); @@ -1449,7 +1485,7 @@ run_single_test(uint8_t dev_id, return -ENOMEM; ret = rte_cryptodev_sym_session_init(dev_id, - sess, &xform, env->sess_pool); + sess, &xform, env->sess_priv_pool); if (ret < 0) { RTE_LOG(ERR, PMD, "Error %i: Init session\n", ret); return ret; @@ -1521,12 +1557,16 @@ fips_dev_auto_test_uninit(uint8_t dev_id, static int fips_dev_auto_test_init(uint8_t dev_id, struct fips_dev_auto_test_env *env) { - struct rte_cryptodev_config conf = {rte_cryptodev_socket_id(dev_id), 1}; struct rte_cryptodev_qp_conf qp_conf = {128, NULL, NULL}; uint32_t sess_sz = rte_cryptodev_sym_get_private_session_size(dev_id); + struct rte_cryptodev_config conf; char name[128]; int ret; + conf.socket_id = rte_cryptodev_socket_id(dev_id); + conf.nb_queue_pairs = 1; + conf.ff_disable = 0; + ret = rte_cryptodev_configure(dev_id, &conf); if (ret < 0) return ret;