Add aead test
build: ./autogen.sh; ./conf.sh; make -j;
test: while true;do strace -o /root/log ./uadk_tool test --m sec --aead 0 --sync --optype 0 --pktlen 16 --keylen 16 --times 1 --multi 1; cat /root/log|grep "222222" && exit ;done
Signed-off-by: Wenkai Lin linwenkai6@hisilicon.com --- .gitignore | 1 + Makefile.am | 2 +- uadk_tool/test/test_sec.c | 197 ++++++++++++++++++-------------------- 3 files changed, 96 insertions(+), 104 deletions(-)
diff --git a/.gitignore b/.gitignore index 6a1eb49..4d90d26 100644 --- a/.gitignore +++ b/.gitignore @@ -176,6 +176,7 @@ v1/test/hisi_zip_test/wd_zip_test v1/test/hisi_zip_test_sgl/sgl_test v1/test/hisi_zip_test_sgl/wd_zip_test_sgl v1/test/test_mm/test_wd_mem +v1/test *.gcda *.ut *.eml diff --git a/Makefile.am b/Makefile.am index d81e8cc..e574c43 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ ACLOCAL_AMFLAGS = -I m4 -I./include AUTOMAKE_OPTIONS = foreign subdir-objects -AM_CFLAGS=-Wall -Werror -fno-strict-aliasing -I$(top_srcdir)/include +AM_CFLAGS=-fPIC -Wall -Werror -fno-strict-aliasing -I$(top_srcdir)/include CLEANFILES =
if WITH_LOG_FILE diff --git a/uadk_tool/test/test_sec.c b/uadk_tool/test/test_sec.c index b00a933..53051de 100644 --- a/uadk_tool/test/test_sec.c +++ b/uadk_tool/test/test_sec.c @@ -11,6 +11,7 @@ #include <sys/time.h> #include <getopt.h> #include <numa.h> +#include <stdarg.h>
#include "sec_template_tv.h" #include "test_sec.h" @@ -2880,6 +2881,39 @@ int get_aead_resource(struct aead_testvec **alg_tv, return 0; }
+ +/* Allocates memory and generates random data. */ +int v2_key_from_random(int cnt, ...) +{ + srand((unsigned)time(NULL) * rand()); + int k = 0; + unsigned int i; + va_list p_args; + va_start(p_args, cnt); + unsigned char **dst; + unsigned char *src; + unsigned int size; + + while (k < cnt / 2) { + dst = va_arg(p_args, + unsigned char **); + size = va_arg(p_args, + unsigned int); + src = malloc(size); + *dst = src; + memset(src, 0, size); + for (i = 0; i < size; i++) { + src[i] = rand(); + } + if (*dst == NULL) { + return -1; + } + k++; + } + va_end(p_args); + return 0; +} + static int sec_aead_sync_once(void) { struct wd_aead_sess_setup setup = {0}; @@ -2892,11 +2926,11 @@ static int sec_aead_sync_once(void) float speed, time_used; unsigned long cnt = g_times; __u16 mac_bytes; - __u16 auth_size; - __u16 in_size; + __u32 in_size; __u16 iv_len; int ret; - size_t unit_sz; + struct sched_params param = {0}; + void *tmp_src = NULL, *tmp_dst = NULL;
/* config setup */ ret = init_aead_ctx_config(CTX_TYPE_ENCRYPT, CTX_MODE_SYNC); @@ -2914,60 +2948,35 @@ static int sec_aead_sync_once(void) return ret; }
+ setup.sched_param = ¶m; h_sess = wd_aead_alloc_sess(&setup); if (!h_sess) { ret = -EINVAL; goto out; }
- /* should set key */ - dump_mem("req src key--->:", WD_FLAT_BUF, (void *)tv->key, tv->klen); + unsigned char *input = NULL, *iv = NULL, *key = NULL, *assoc = NULL; + unsigned int key_size = 16; + unsigned int iv_size = 16; + unsigned int input_size = 1048576; + unsigned int assoc_size = 65279; + ret = v2_key_from_random(8, &input, input_size, &iv, iv_size, &key, key_size, &assoc, assoc_size); + if (setup.cmode == WD_CIPHER_CCM || setup.cmode == WD_CIPHER_GCM) { - ret = wd_aead_set_ckey(h_sess, (const __u8*)tv->key, tv->klen); + ret = wd_aead_set_ckey(h_sess, (const __u8*)key, 16); if (ret) { SEC_TST_PRT("aead sess set key failed!\n"); goto out_key; } - } else { - // AEAD template's cipher key is the tail data - ret = wd_aead_set_ckey(h_sess, (__u8*)tv->key + 0x28, 0x10); - if (ret) { - SEC_TST_PRT("set cipher key fail!\n"); - goto out_key; - } - // AEAD template's auth key is the mid data - ret = wd_aead_set_akey(h_sess, (__u8*)tv->key + 0x08, 0x20); - if (ret) { - SEC_TST_PRT("set auth key fail!\n"); - goto out_key; - } }
- auth_size = (__u16)(tv->clen - tv->plen); - mac_bytes = auth_size; - ret = wd_aead_set_authsize(h_sess, auth_size); + mac_bytes = 16; + ret = wd_aead_set_authsize(h_sess, mac_bytes); if (ret) { - SEC_TST_PRT("set auth size fail, authsize: %u\n", auth_size); + SEC_TST_PRT("set auth size fail, authsize: %u\n", mac_bytes); goto out_key; }
- // test the auth size - ret = wd_aead_get_authsize(h_sess); - if (ret != auth_size) { - SEC_TST_PRT("get auth size fail!\n"); - goto out_key; - } - - ret = wd_aead_get_maxauthsize(h_sess); - if (ret < auth_size) { - SEC_TST_PRT("get max auth size fail!\n"); - goto out_key; - } - SEC_TST_PRT("aead get max auth size: %u\n", ret); - - if (setup.cmode == WD_CIPHER_CCM || setup.cmode == WD_CIPHER_GCM) - mac_bytes = 16; - req.mac = malloc(mac_bytes); if (!req.mac) { SEC_TST_PRT("req iv mem malloc failed!\n"); @@ -2977,68 +2986,23 @@ static int sec_aead_sync_once(void) memset(req.mac, 0, mac_bytes); req.mac_bytes = mac_bytes;
- if (g_direction == 0) - req.op_type = WD_CIPHER_ENCRYPTION_DIGEST; - else - req.op_type = WD_CIPHER_DECRYPTION_DIGEST; - - req.assoc_bytes = tv->alen; - if (g_direction == 0) { - in_size = req.assoc_bytes + tv->plen; - } else { - in_size = req.assoc_bytes + tv->clen; - } - if (in_size > BUFF_SIZE) { - SEC_TST_PRT("alloc in buffer block size too small!\n"); - goto out_mac; - } - unit_sz = cal_unit_sz(in_size, g_sgl_num); - void *src = create_buf(WD_FLAT_BUF, in_size, unit_sz); - if (!src) { - ret = -ENOMEM; - goto out_src; - } - - memset(src, 0, in_size); - // copy the assoc data in the front of in data - SEC_TST_PRT("aead set assoc_bytes: %u\n", req.assoc_bytes); - if (g_direction == 0) { - memcpy(src, tv->assoc, tv->alen); - memcpy((src + req.assoc_bytes), tv->ptext, tv->plen); - req.in_bytes = tv->plen; - } else { - memcpy(src, tv->assoc, tv->alen); - memcpy(src + req.assoc_bytes, tv->ctext, tv->clen - auth_size); - req.in_bytes = tv->clen - auth_size; - memcpy(req.mac, tv->ctext + tv->clen - auth_size, auth_size); - } - - dump_mem("mac addr src is:", 0, req.mac, auth_size); - - req.src = create_buf(g_data_fmt, in_size, unit_sz); + in_size = 1113855; + req.src = malloc(in_size); if (!req.src) { ret = -ENOMEM; goto out_src; } - copy_mem(g_data_fmt, req.src, WD_FLAT_BUF, src, - (size_t)(req.in_bytes + tv->alen)); - free(src); - SEC_TST_PRT("aead req src len: %u\n", tv->alen + req.in_bytes); - dump_mem("aead req src in--->", g_data_fmt, req.src, tv->alen + req.in_bytes);
- if (g_direction == 0) { - req.out_bytes = req.assoc_bytes + tv->clen - auth_size; - } else { - req.out_bytes = req.assoc_bytes + tv->plen; - } + memcpy(req.src, assoc, assoc_size); + memcpy(req.src + assoc_size, input, input_size);
- // alloc out buffer memory - unit_sz = cal_unit_sz(req.out_bytes, g_sgl_num); - req.dst = create_buf(g_data_fmt, req.out_bytes, unit_sz); + req.out_bytes = 1113855; + req.dst = malloc(req.out_bytes); if (!req.dst) { ret = -ENOMEM; goto out_dst; } + memset(req.dst, 0, req.out_bytes);
req.iv = malloc(AES_BLOCK_SIZE); if (!req.iv) { @@ -3046,18 +3010,42 @@ static int sec_aead_sync_once(void) ret = -ENOMEM; goto out_iv; } - if (setup.cmode == WD_CIPHER_GCM) - iv_len = GCM_IV_SIZE; - else - iv_len = AES_BLOCK_SIZE; + + iv_len = 16; req.iv_bytes = iv_len; - memcpy(req.iv, tv->iv, iv_len); + memcpy(req.iv, iv, 16);
req.data_fmt = g_data_fmt;
gettimeofday(&start_tval, NULL); while (cnt) { + /* do encrypt first, device use req.src and req.dst to read and write data */ + req.op_type = WD_CIPHER_ENCRYPTION_DIGEST; + req.assoc_bytes = 65279; + req.out_bytes = 1113855; + req.in_bytes = 1048576; ret = wd_do_aead_sync(h_sess, &req); + if (ret || req.state) { + SEC_TST_PRT("wd_do_aead_sync 111111111 failed!!!!!!!!!!!!\n"); + goto out_job; + } + + /* do decrypt, need to do much times memcpy here */ + tmp_src = malloc(req.out_bytes); + tmp_dst = malloc(req.out_bytes); + memcpy(tmp_src, req.src, req.out_bytes); + memcpy(tmp_dst, req.dst, req.out_bytes); + memcpy(req.iv, iv, 16); + memcpy(req.src, tmp_dst, req.out_bytes); + req.op_type = WD_CIPHER_DECRYPTION_DIGEST; + + ret = wd_do_aead_sync(h_sess, &req); + memcpy(tmp_dst, req.dst + req.assoc_bytes, req.in_bytes); + if (ret || req.state || memcmp(tmp_dst, tmp_src + req.assoc_bytes, req.in_bytes)) { + WD_CONSOLE("wd_do_aead_sync 222222222 failed!!!!!!!!!!!!\n"); + goto out_job; + } + cnt--; } gettimeofday(&cur_tval, NULL); @@ -3070,16 +3058,19 @@ static int sec_aead_sync_once(void) SEC_TST_PRT("Pro-%d, thread_id-%d, speed:%0.3f ops, Perf: %ld KB/s\n", getpid(), (int)syscall(__NR_gettid), speed, Perf);
- dump_mem("aead dump out addr is:", g_data_fmt, req.dst, req.out_bytes); - dump_mem("aead dump mac addr is:", 0, req.mac, auth_size); - +out_job: + free(input); + free(assoc); + free(iv); + free(key); + free(tmp_dst); + free(tmp_src); free(req.iv); out_iv: - free_buf(g_data_fmt, req.dst); + free(req.dst); out_dst: - free_buf(g_data_fmt, req.src); + free(req.src); out_src: -out_mac: free(req.mac); out_key: wd_aead_free_sess(h_sess);