init
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# SlickEdit generated file. Do not edit this file except in designated areas.
|
||||
|
||||
# Make command to use for dependencies
|
||||
MAKE=make
|
||||
RM=rm
|
||||
MKDIR=mkdir
|
||||
|
||||
# -----Begin user-editable area-----
|
||||
|
||||
# -----End user-editable area-----
|
||||
|
||||
# If no configuration is specified, "Debug" will be used
|
||||
ifndef CFG
|
||||
CFG=Debug
|
||||
endif
|
||||
|
||||
#
|
||||
# Configuration: Debug
|
||||
#
|
||||
ifeq "$(CFG)" "Debug"
|
||||
OUTDIR=Debug
|
||||
OUTFILE=../lib/demo
|
||||
CFG_INC=-I../inc
|
||||
CFG_LIB=-lsunyard -lpthread
|
||||
CFG_OBJ=
|
||||
COMMON_OBJ=$(OUTDIR)/demo.o $(OUTDIR)/demo_api.o
|
||||
OBJ=$(COMMON_OBJ) $(CFG_OBJ)
|
||||
ALL_OBJ=$(OUTDIR)/demo.o $(OUTDIR)/demo_api.o
|
||||
COMPILE=gcc -c -g -o "$(OUTDIR)/$(*F).o" $(CFG_INC) $<
|
||||
LINK=gcc -g -L ../lib -o "$(OUTFILE)" $(ALL_OBJ) $(CFG_LIB) -Wl,-rpath=../lib
|
||||
# Pattern rules
|
||||
$(OUTDIR)/%.o : %.c
|
||||
$(COMPILE)
|
||||
|
||||
# Build rules
|
||||
all: $(OUTFILE)
|
||||
|
||||
$(OUTFILE): $(OUTDIR) $(OBJ)
|
||||
$(LINK)
|
||||
|
||||
$(OUTDIR):
|
||||
$(MKDIR) -p "$(OUTDIR)"
|
||||
|
||||
# Rebuild this project
|
||||
rebuild: cleanall all
|
||||
|
||||
# Clean this project
|
||||
clean:
|
||||
$(RM) -f $(OUTFILE)
|
||||
$(RM) -f $(OBJ)
|
||||
|
||||
# Clean this project and all dependencies
|
||||
cleanall: clean
|
||||
endif
|
||||
+579
@@ -0,0 +1,579 @@
|
||||
#ifndef _DEMO_API_H_
|
||||
#include "demo_api.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "demo_xn.c"
|
||||
|
||||
static pthread_mutex_t g_mutex;
|
||||
static float g_allflow[300] = {0};
|
||||
static unsigned long g_threadnum = 0;
|
||||
|
||||
typedef struct {
|
||||
int datalen;
|
||||
int cmd;
|
||||
}XN_INFO;
|
||||
|
||||
int connect_test()
|
||||
{
|
||||
int ret = 0, i = 0;
|
||||
void *hHandle = NULL;
|
||||
const char *iplist[5] = {0};
|
||||
int port[5] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
iplist[1] = DEV_IP;
|
||||
port[1] = DEV_PORT;
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
ret = SYD_Connect_Ex(iplist, port, 1, CON_TIMEOUT, DEAL_TIMEOUT, 0, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return -1;
|
||||
}
|
||||
LOG("短连接正常测试|线程数:0|单个连接|成功");
|
||||
}
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
ret = SYD_Connect_Ex(iplist, port, 2, CON_TIMEOUT, DEAL_TIMEOUT, 0, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return -1;
|
||||
}
|
||||
LOG("短连接正常测试|线程数:0|2个连接|成功");
|
||||
}
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
ret = SYD_Connect_Ex(iplist, port, 1, CON_TIMEOUT, DEAL_TIMEOUT, 5, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return -1;
|
||||
}
|
||||
LOG("短连接正常测试|线程数:5|单个连接|成功");
|
||||
}
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
ret = SYD_Connect_Ex(iplist, port, 1, CON_TIMEOUT, DEAL_TIMEOUT, 5, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return -1;
|
||||
}
|
||||
LOG("短连接正常测试|线程数:5|2个连接|成功");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CMD(void *hHandle, int cmd)
|
||||
{
|
||||
int ret = 0;
|
||||
switch(cmd)
|
||||
{
|
||||
case 0:
|
||||
ret = SM4_ShortData_Test(hHandle);
|
||||
break;
|
||||
case 1:
|
||||
ret = SM4_BatchData_Test(hHandle);
|
||||
break;
|
||||
case 2:
|
||||
ret = SM4_LongData_Test_Special(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
ret = SM4_LongData_Test(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
ret = SM3_ShortHash_Test(hHandle);
|
||||
break;
|
||||
case 4:
|
||||
ret = SM3_LongHash_Test_Special(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
ret = SM3_LongHash_Test(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
ret = SM4Mac_ShortData(hHandle);
|
||||
break;
|
||||
case 6:
|
||||
ret = SM4Mac_BatchData(hHandle);
|
||||
break;
|
||||
case 7:
|
||||
ret = SM4Mac_LongData_Special(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = SM4Mac_LongData(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
ret = SM4_ShortData_CheckValue(hHandle);
|
||||
break;
|
||||
case 9:
|
||||
ret = SM4_BatchData_CheckValue(hHandle);
|
||||
break;
|
||||
case 10:
|
||||
ret = SM4_LongData_CheckValue(hHandle);
|
||||
break;
|
||||
default:
|
||||
LOG("cmd not exit");
|
||||
ret = 1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void short_connect_test()
|
||||
{
|
||||
int ret = 0, cmd = 0, i = 0;
|
||||
void *hHandle = NULL;
|
||||
const char *iplist[2] = {0};
|
||||
int port[2] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
iplist[1] = DEV2_IP;
|
||||
port[1] = DEV2_PORT;
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
ret = SYD_Connect_Ex(iplist, port, 2, CON_TIMEOUT, DEAL_TIMEOUT, 0, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
for(cmd = 0; cmd <= 9; cmd++)
|
||||
{
|
||||
ret = CMD(hHandle, cmd);
|
||||
if(ret != 0) goto END;
|
||||
}
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
LOG("遍历所有指令|总循环次数:10|已执行次数:%d|成功", i+1);
|
||||
}
|
||||
END:
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void threadpool_connect_test()
|
||||
{
|
||||
int ret = 0, i = 0, cmd = 0;
|
||||
void *hHandle = NULL;
|
||||
const char *iplist[2] = {0};
|
||||
int port[2] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
iplist[1] = DEV2_IP;
|
||||
port[1] = DEV2_PORT;
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
ret = SYD_Connect_Ex(iplist, port, 2, CON_TIMEOUT, DEAL_TIMEOUT, 5, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
for(cmd = 0; cmd <= 9; cmd++)
|
||||
{
|
||||
ret = CMD(hHandle, cmd);
|
||||
if(ret != 0) goto END;
|
||||
}
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
LOG("遍历所有指令|总循环次数:10|已执行次数:%d|成功", i+1);
|
||||
}
|
||||
END:
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void choose_cmd_test()
|
||||
{
|
||||
int ret = 0, i = 0;
|
||||
int cmd = 0;
|
||||
void *hHandle = NULL;
|
||||
const char *iplist[2] = {0};
|
||||
int port[2] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
iplist[1] = DEV2_IP;
|
||||
port[1] = DEV2_PORT;
|
||||
|
||||
while (1)
|
||||
{
|
||||
LOG_MSG("/----功能正确性测试-----/");
|
||||
LOG_MSG("0:SM4短数据");
|
||||
LOG_MSG("1:SM4批量数据");
|
||||
LOG_MSG("2:SM4长数据");
|
||||
LOG_MSG("3:SM3短数据");
|
||||
LOG_MSG("4:SM3长数据");
|
||||
LOG_MSG("5:SM4-MAC短数据");
|
||||
LOG_MSG("6:SM4-MAC批量数据");
|
||||
LOG_MSG("7:SM4-MAC长数据");
|
||||
LOG_MSG("8:SM4短数据+密文校验");
|
||||
LOG_MSG("9:SM4批量数据+密文校验");
|
||||
LOG_MSG("10:SM4长数据+密文校验");
|
||||
LOG_MSG("100:退出");
|
||||
LOG_MSG("请选择测试指令:");
|
||||
scanf("%d", &cmd);
|
||||
if(cmd == 100) return;
|
||||
|
||||
ret = SYD_Connect_Ex(iplist, port, 2, CON_TIMEOUT, DEAL_TIMEOUT, 0, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = CMD(hHandle, cmd);
|
||||
if(ret == 1) goto END;
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
END:
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void* CMD_XN(void *p)
|
||||
{
|
||||
XN_INFO* arg = (XN_INFO *)p;
|
||||
int ret = 0;
|
||||
float flow = 0;
|
||||
long difftime = 0;
|
||||
struct timeval start_time;
|
||||
struct timeval local_time;
|
||||
const char *iplist[5] = {0};
|
||||
int port[5] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
void *hHandle = NULL;
|
||||
ret = SYD_Connect_Ex(iplist, port, 1, CON_TIMEOUT, 1000, 0, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gettimeofday(&start_time, NULL);
|
||||
switch(arg->cmd)
|
||||
{
|
||||
case 0:
|
||||
ret = XN_SM4_Enc_LongData_Test(hHandle, arg->datalen);
|
||||
break;
|
||||
case 1:
|
||||
ret = XN_SM4_Dec_LongData_Test(hHandle, arg->datalen);
|
||||
break;
|
||||
case 2:
|
||||
ret = XN_SM4Mac_LongData_Test(hHandle, arg->datalen);
|
||||
break;
|
||||
case 3:
|
||||
ret = XN_SM3_LongHash_Test(hHandle, arg->datalen);
|
||||
break;
|
||||
case 4:
|
||||
ret = XN_SM4EncMac_LongData_Test(hHandle, arg->datalen);
|
||||
break;
|
||||
case 5:
|
||||
ret = XN_SM4DecMac_LongData_Test(hHandle, arg->datalen);
|
||||
break;
|
||||
default:
|
||||
LOG("cmd not exist");
|
||||
return NULL;
|
||||
}
|
||||
gettimeofday(&local_time, NULL);
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&g_mutex);
|
||||
difftime = us_difftime(start_time, local_time);
|
||||
flow = (arg->datalen / (difftime * 0.000001)) / (1024 * 1024);
|
||||
g_allflow[g_threadnum] = flow;
|
||||
LOG_MSG("线程:%ld|用时%ld(us)|数据长度:%d(bytes)|吞吐量:%f(MB/S)", g_threadnum, difftime, arg->datalen, flow);
|
||||
g_threadnum++;
|
||||
pthread_mutex_unlock(&g_mutex);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void xn_throughput_test()
|
||||
{
|
||||
int ret = 0, i = 0, cmd = 0;
|
||||
long alldatalen = 0;
|
||||
int run_conut = 0;
|
||||
float all_flow = 0;
|
||||
long thread_count = 0;
|
||||
pthread_t pthid[1000];
|
||||
XN_INFO arg = {0};
|
||||
pthread_mutex_init(&g_mutex, NULL);
|
||||
|
||||
while (1)
|
||||
{
|
||||
LOG_MSG("/------吞吐量测试------/");
|
||||
LOG_MSG("0:SM4加密长数据");
|
||||
LOG_MSG("1:SM4解密长数据");
|
||||
LOG_MSG("2:SM4-MAC长数据");
|
||||
LOG_MSG("3:SM3长数据");
|
||||
LOG_MSG("4:SM4加密+MAC长数据");
|
||||
LOG_MSG("5:SM4解密+MAC长数据");
|
||||
LOG_MSG("100:退出");
|
||||
LOG_MSG("请选择测试指令:");
|
||||
scanf("%d", &cmd);
|
||||
if(cmd == 100) goto END;
|
||||
LOG_MSG("请输出数据的总长度(MB):");
|
||||
scanf("%ld", &alldatalen);
|
||||
alldatalen = alldatalen * 1024 * 1024;
|
||||
LOG_MSG("请输入线程数:");
|
||||
scanf("%ld", &thread_count);
|
||||
g_threadnum = 0;
|
||||
memset(g_allflow, 0, sizeof(g_allflow));
|
||||
arg.cmd = cmd;
|
||||
arg.datalen = alldatalen / thread_count;
|
||||
for(i = 0; i < thread_count; i++)
|
||||
{
|
||||
ret = pthread_create(&pthid[i], NULL, CMD_XN, (void *)&arg);
|
||||
if(ret)
|
||||
{
|
||||
printf("Fail to create thread %d\n", (int)pthid[i]);
|
||||
goto END;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < thread_count; i++)
|
||||
{
|
||||
ret = pthread_join(pthid[i],NULL);
|
||||
if(ret)
|
||||
{
|
||||
printf("Thread %d join failed\n", (int)pthid[i]);
|
||||
goto END;
|
||||
}
|
||||
}
|
||||
|
||||
all_flow = 0;
|
||||
for (i = 0; i < thread_count; i++)
|
||||
{
|
||||
all_flow += g_allflow[i];
|
||||
}
|
||||
LOG_MSG("命令:%d|线程数:%ld|总吞吐量:%f(MB/S)", arg.cmd, thread_count, all_flow);
|
||||
}
|
||||
END:
|
||||
pthread_mutex_destroy(&g_mutex);
|
||||
}
|
||||
|
||||
int stability_test()
|
||||
{
|
||||
int ret = 0, cmd = 0;
|
||||
long long i = 0, count = 0;
|
||||
void *hHandle = NULL;
|
||||
const char *iplist[2] = {0};
|
||||
int port[5] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
ret = SYD_Connect_Ex(iplist, port, 1, CON_TIMEOUT, 5000, 0, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
|
||||
LOG_MSG("请输入循环次数:");
|
||||
scanf("%lld", &count);
|
||||
for(i = 0; i < count; i++)
|
||||
{
|
||||
for(cmd = 0; cmd <= 10; cmd++)
|
||||
{
|
||||
ret = CMD(hHandle, cmd);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("命令:%d|当前循环次数:%lld|错误!", cmd, i);
|
||||
goto END;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
END:
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int ret = 0, mode = 0;
|
||||
void *hHandle = NULL;
|
||||
char version[256] = {0};
|
||||
int version_len = sizeof(version);
|
||||
const char *iplist[5] = {0};
|
||||
int port[5] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
ret = SYD_SetLogConfig("./Log", 6, 2);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SetLogConfig ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = SYD_Connect_Ex(iplist, port, 1, CON_TIMEOUT, DEAL_TIMEOUT, 0, &hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = SYD_GetVersionInfo(hHandle, version, &version_len);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_GetVersionInfo ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
printf("%s\n", version);
|
||||
|
||||
ret = SYD_DisConnect_Ex(hHandle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*注意:该测试需要提前手动合成密钥,密钥合成方式如下
|
||||
*机构号16字节0 类型:ZEK(00A) 索引:8字节0 方案:X 不变种 分量个数:2
|
||||
*这里用的密钥分量为
|
||||
分量1:31313131313131313131313131313131
|
||||
分量2:32323232323232323232323232323232
|
||||
合成后的分量:03030303030303030303030303030303
|
||||
*/
|
||||
|
||||
while (1)
|
||||
{
|
||||
LOG_MSG("/---功能测试---/");
|
||||
LOG_MSG("0:连接正确性测试");
|
||||
LOG_MSG("1:金交所业务场景1:循环多次(短连接-遍历所有功能-断开连接)");
|
||||
LOG_MSG("2:金交所业务场景2:循环多次(连接池-遍历所有功能-断开连接)");
|
||||
LOG_MSG("3:功能正确性测试");
|
||||
LOG_MSG("4:吞吐量测试");
|
||||
LOG_MSG("5:TPS性能测试");
|
||||
LOG_MSG("6:稳定性测试");
|
||||
LOG_MSG("100:退出");
|
||||
LOG_MSG("请选择测试类型:");
|
||||
scanf("%d", &mode);
|
||||
switch (mode)
|
||||
{
|
||||
case 0:
|
||||
connect_test();
|
||||
break;
|
||||
case 1:
|
||||
short_connect_test();
|
||||
break;
|
||||
case 2:
|
||||
threadpool_connect_test();
|
||||
break;
|
||||
case 3:
|
||||
choose_cmd_test();
|
||||
break;
|
||||
case 4:
|
||||
xn_throughput_test();
|
||||
break;
|
||||
case 5:
|
||||
xn_cmd_tps();
|
||||
break;
|
||||
case 6:
|
||||
stability_test();
|
||||
break;
|
||||
case 100:
|
||||
return 0;
|
||||
default:
|
||||
LOG("mode not exist!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+1449
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,53 @@
|
||||
#ifndef _DEMO_API_H_
|
||||
#define _DEMO_API_H_
|
||||
|
||||
#ifndef _DEMO_TYPEDEF_H_
|
||||
#include "demo_typedef.h"
|
||||
#endif
|
||||
|
||||
#ifndef _SUNYARD_H_
|
||||
#include "sunyard.h"
|
||||
#endif
|
||||
|
||||
#define DEV_IP "127.0.0.1"
|
||||
#define DEV_PORT 8889
|
||||
|
||||
#define DEV2_IP "127.0.0.1"
|
||||
#define DEV2_PORT 8889
|
||||
|
||||
#define CON_TIMEOUT 5000
|
||||
#define DEAL_TIMEOUT 5000
|
||||
#define KEYINDEX 0
|
||||
#define CHECKINDEX 0
|
||||
|
||||
void IniOrgData(char *pcData, int iOrgDataLen, int k);
|
||||
void PrintHex(const char* Title, unsigned char* Data, int DataLen);
|
||||
void HexToBin(int iLen, unsigned char* pucInBuf, unsigned char* pucOutBuf);
|
||||
void BinToHex(int iLen, unsigned char* pucInBuf, unsigned char* pucOutBuf);
|
||||
int us_difftime(struct timeval start_time, struct timeval end_time);
|
||||
int ms_difftime(struct timeval start_time, struct timeval end_time);
|
||||
|
||||
int SM4_ShortData_Test(void *hHandle);
|
||||
int SM4_BatchData_Test(void *hHandle);
|
||||
int SM4_LongData_Test(void *hHandle);
|
||||
int SM4_LongData_Test_Special(void *hHandle);
|
||||
int SM3_ShortHash_Test(void *hHandle);
|
||||
int SM3_LongHash_Test(void *hHandle);
|
||||
int SM3_LongHash_Test_Special(void *hHandle);
|
||||
int SM4Mac_ShortData(void *hHandle);
|
||||
int SM4Mac_BatchData(void *hHandle);
|
||||
int SM4Mac_LongData(void *hHandle);
|
||||
int SM4Mac_LongData_Special(void *hHandle);
|
||||
int SM4_ShortData_CheckValue(void *hHandle);
|
||||
int SM4_BatchData_CheckValue(void *hHandle);
|
||||
int SM4_LongData_CheckValue(void *hHandle);
|
||||
|
||||
int XN_SM4_Enc_LongData_Test(void *hHandle, int datasize);
|
||||
int XN_SM4_Dec_LongData_Test(void *hHandle, int datasize);
|
||||
int XN_SM4Mac_LongData_Test(void *hHandle, int singlebytes);
|
||||
int XN_SM3_LongHash_Test(void *hHandle, int singlebytes);
|
||||
int XN_SM4EncMac_LongData_Test(void *hHandle, int datasize);
|
||||
int XN_SM4DecMac_LongData_Test(void *hHandle, int datasize);
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef _DEMO_TYPEDEF_H_
|
||||
#define _DEMO_TYPEDEF_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <pthread.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#define API_DEBUG 1
|
||||
#define API_DEBUG_ERR 1
|
||||
|
||||
#define LOG(format, ...) \
|
||||
if (API_DEBUG) \
|
||||
printf("[DEBUG|%s@%s,%d] " format "\n", \
|
||||
__FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#define LOG_MSG(format, ...) \
|
||||
if (API_DEBUG_ERR) \
|
||||
printf("[DEBUG|%s@%s,%d] " format "\n", \
|
||||
__FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#endif
|
||||
+462
@@ -0,0 +1,462 @@
|
||||
|
||||
#define BATCH_MAX_SIZE 4
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int cycle_num; /*<单线程循环次数>*/
|
||||
int cmd; /*<命令码>*/
|
||||
int data_len; /*<数据长度>*/
|
||||
} trd_arg_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int keyidex[BATCH_MAX_SIZE];
|
||||
int checkidex[BATCH_MAX_SIZE];
|
||||
char sm4_short_encdata[1024 + 16];
|
||||
int sm4_short_encdata_len;
|
||||
char sm4_short_decdata[1024];
|
||||
int sm4_short_decdata_len;
|
||||
char sm4_short_checkvalue[33];
|
||||
int sm4_short_checkvalue_len;
|
||||
char sm4_batch_encdata[BATCH_MAX_SIZE][1024 + 16];
|
||||
int sm4_batch_encdata_len[BATCH_MAX_SIZE];
|
||||
char *tmp_sm4_batch_encdata[BATCH_MAX_SIZE];
|
||||
char sm4_batch_decdata[BATCH_MAX_SIZE][1024];
|
||||
int sm4_batch_decdata_len[BATCH_MAX_SIZE];
|
||||
char *tmp_sm4_batch_decdata[BATCH_MAX_SIZE];
|
||||
char sm4_batch_checkvalue[BATCH_MAX_SIZE][33];
|
||||
int sm4_batch_checkvalue_len[BATCH_MAX_SIZE];
|
||||
char *tmp_sm4_batch_checkvalue[BATCH_MAX_SIZE];
|
||||
char sm4_batch_mac[BATCH_MAX_SIZE][33];
|
||||
int sm4_batch_mac_len[BATCH_MAX_SIZE];
|
||||
char *tmp_sm4_batch_mac[BATCH_MAX_SIZE];
|
||||
char batch_orgdata[BATCH_MAX_SIZE][2048];
|
||||
int batch_orgdata_len[BATCH_MAX_SIZE];
|
||||
char *tmp_batch_orgdata[BATCH_MAX_SIZE];
|
||||
char hash[33];
|
||||
char mac[33];
|
||||
int checkret[BATCH_MAX_SIZE];
|
||||
} xn_init_config_t;
|
||||
|
||||
xn_init_config_t g_stc_xn_init_config;
|
||||
static pthread_mutex_t g_time_mutex;
|
||||
static int g_thread_count = 0;
|
||||
static long g_all_time[300] = {0};
|
||||
static long g_all_average_time[300] = {0};
|
||||
static char g_org_data[9000] = {0};
|
||||
|
||||
long GetTime()
|
||||
{
|
||||
struct timeval t_time;
|
||||
gettimeofday(&t_time,NULL);
|
||||
return ((long)t_time.tv_sec) * 1000000 + ((long)t_time.tv_usec);
|
||||
}
|
||||
|
||||
static int xn_tps_init_data(int data_len)
|
||||
{
|
||||
if(data_len <= 0 || data_len > 1024)
|
||||
{
|
||||
LOG("输入数据长度错误, 范围为[1, 1024]");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ret = 0, i = 0;
|
||||
int check_ret[BATCH_MAX_SIZE] = {0};
|
||||
void *handle = NULL;
|
||||
const char *iplist[2] = {0};
|
||||
int port[2] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
ret = SYD_Connect_Ex(iplist, port, 1, CON_TIMEOUT, DEAL_TIMEOUT, 0, &handle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
memset(&g_stc_xn_init_config, 0, sizeof(xn_init_config_t));
|
||||
|
||||
for(i = 0; i < BATCH_MAX_SIZE; i++)
|
||||
{
|
||||
g_stc_xn_init_config.keyidex[i] = KEYINDEX;
|
||||
g_stc_xn_init_config.checkidex[i] = CHECKINDEX;
|
||||
g_stc_xn_init_config.sm4_short_encdata_len = sizeof(g_stc_xn_init_config.sm4_short_encdata);
|
||||
g_stc_xn_init_config.sm4_short_decdata_len = sizeof(g_stc_xn_init_config.sm4_short_decdata);
|
||||
g_stc_xn_init_config.sm4_short_checkvalue_len = sizeof(g_stc_xn_init_config.sm4_short_checkvalue);
|
||||
g_stc_xn_init_config.sm4_batch_encdata_len[i] = sizeof(g_stc_xn_init_config.sm4_batch_encdata[i]);
|
||||
g_stc_xn_init_config.tmp_sm4_batch_encdata[i] = g_stc_xn_init_config.sm4_batch_encdata[i];
|
||||
g_stc_xn_init_config.sm4_batch_decdata_len[i] = sizeof(g_stc_xn_init_config.sm4_batch_decdata[i]);
|
||||
g_stc_xn_init_config.tmp_sm4_batch_decdata[i] = g_stc_xn_init_config.sm4_batch_decdata[i];
|
||||
g_stc_xn_init_config.sm4_batch_checkvalue_len[i] = sizeof(g_stc_xn_init_config.sm4_batch_checkvalue[i]);
|
||||
g_stc_xn_init_config.tmp_sm4_batch_checkvalue[i] = g_stc_xn_init_config.sm4_batch_checkvalue[i];
|
||||
g_stc_xn_init_config.sm4_batch_mac_len[i] = sizeof(g_stc_xn_init_config.sm4_batch_mac[i]);
|
||||
g_stc_xn_init_config.tmp_sm4_batch_mac[i] = g_stc_xn_init_config.sm4_batch_mac[i];
|
||||
IniOrgData(g_stc_xn_init_config.batch_orgdata[i], 2048, 1);
|
||||
g_stc_xn_init_config.batch_orgdata_len[i] = data_len;
|
||||
g_stc_xn_init_config.tmp_batch_orgdata[i] = g_stc_xn_init_config.batch_orgdata[i];
|
||||
}
|
||||
|
||||
ret = SYD_SM4_Encrypt_Mac_ShortData(handle, g_stc_xn_init_config.keyidex[0], g_stc_xn_init_config.checkidex[0], \
|
||||
g_org_data, data_len, g_stc_xn_init_config.sm4_short_encdata, &g_stc_xn_init_config.sm4_short_encdata_len, \
|
||||
g_stc_xn_init_config.sm4_short_checkvalue);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_Encrypt_Mac_ShortData ret=%08x", ret);
|
||||
goto END;
|
||||
}
|
||||
g_stc_xn_init_config.sm4_short_checkvalue_len = 16;
|
||||
|
||||
ret = SYD_SM4_Encrypt_Mac_BatchData(handle, g_stc_xn_init_config.keyidex, g_stc_xn_init_config.checkidex, \
|
||||
g_stc_xn_init_config.tmp_batch_orgdata, g_stc_xn_init_config.batch_orgdata_len, BATCH_MAX_SIZE, \
|
||||
g_stc_xn_init_config.tmp_sm4_batch_encdata, g_stc_xn_init_config.sm4_batch_encdata_len, \
|
||||
g_stc_xn_init_config.tmp_sm4_batch_checkvalue);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_Encrypt_Mac_BatchData ret=%08x", ret);
|
||||
goto END;
|
||||
}
|
||||
g_stc_xn_init_config.sm4_short_checkvalue_len = 16;
|
||||
END:
|
||||
SYD_DisConnect_Ex(handle);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int xn_sm4_short_enc(void* handle, unsigned int data_len)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned int sm4_short_encdata_len = sizeof(g_stc_xn_init_config.sm4_short_encdata);
|
||||
ret = SYD_SM4_ShortData(handle, g_stc_xn_init_config.keyidex[0], g_org_data, data_len, \
|
||||
SM4_ENCRYPT, g_stc_xn_init_config.sm4_short_encdata, &sm4_short_encdata_len);
|
||||
if (ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_ShortData err ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_short_dec(void* handle, unsigned int data_len)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned int sm4_short_decdata_len = sizeof(g_stc_xn_init_config.sm4_short_decdata);
|
||||
ret = SYD_SM4_ShortData(handle, g_stc_xn_init_config.keyidex[0], g_stc_xn_init_config.sm4_short_encdata, \
|
||||
g_stc_xn_init_config.sm4_short_encdata_len, SM4_DECRYPT, g_stc_xn_init_config.sm4_short_decdata, \
|
||||
&sm4_short_decdata_len);
|
||||
if (ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_ShortData err ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_short_mac(void* handle, unsigned int data_len)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = SYD_SM4Mac_ShortData(handle, g_stc_xn_init_config.keyidex[0], g_org_data, data_len, \
|
||||
g_stc_xn_init_config.mac, NULL);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4Mac_ShortData ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_batch_mac(void* handle)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = SYD_SM4Mac_BatchData(handle, g_stc_xn_init_config.keyidex, g_stc_xn_init_config.tmp_batch_orgdata, \
|
||||
g_stc_xn_init_config.batch_orgdata_len, BATCH_MAX_SIZE, g_stc_xn_init_config.tmp_sm4_batch_mac, NULL);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4Mac_BatchData ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_batch_enc(void* handle)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = SYD_SM4_BatchData(handle, g_stc_xn_init_config.keyidex, g_stc_xn_init_config.tmp_batch_orgdata, \
|
||||
g_stc_xn_init_config.batch_orgdata_len, BATCH_MAX_SIZE, SM4_ENCRYPT, \
|
||||
g_stc_xn_init_config.tmp_sm4_batch_encdata, g_stc_xn_init_config.sm4_batch_encdata_len);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_BatchData ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_batch_dec(void* handle)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = SYD_SM4_BatchData(handle, g_stc_xn_init_config.keyidex, g_stc_xn_init_config.tmp_sm4_batch_encdata, \
|
||||
g_stc_xn_init_config.sm4_batch_encdata_len, BATCH_MAX_SIZE, SM4_DECRYPT, \
|
||||
g_stc_xn_init_config.tmp_sm4_batch_decdata, g_stc_xn_init_config.sm4_batch_decdata_len);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_BatchData ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm3_short_data(void* handle, unsigned int data_len)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = SYD_SM3_Hash_ShortData(handle, g_org_data, data_len, g_stc_xn_init_config.hash);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SM3_Hash_ShortData ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_enc_short_checkvalue(void* handle, unsigned int data_len)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned int sm4_short_encdata_len = sizeof(g_stc_xn_init_config.sm4_short_encdata);
|
||||
ret = SYD_SM4_Encrypt_Mac_ShortData(handle, g_stc_xn_init_config.keyidex[0], g_stc_xn_init_config.checkidex[0], \
|
||||
g_org_data, data_len, g_stc_xn_init_config.sm4_short_encdata, &sm4_short_encdata_len, g_stc_xn_init_config.mac);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_Encrypt_Mac_ShortData ret=%08x", ret);
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_dec_short_checkvalue(void* handle)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned int sm4_short_decdata_len = sizeof(g_stc_xn_init_config.sm4_short_decdata);
|
||||
ret = SYD_SM4_Decrypt_Mac_ShortData(handle, g_stc_xn_init_config.keyidex[0], g_stc_xn_init_config.checkidex[0], \
|
||||
g_stc_xn_init_config.sm4_short_encdata, g_stc_xn_init_config.sm4_short_encdata_len, g_stc_xn_init_config.sm4_short_checkvalue, \
|
||||
g_stc_xn_init_config.sm4_short_decdata, &sm4_short_decdata_len);
|
||||
if (ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_Decrypt_Mac_ShortData err ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_batch_enc_checkvalue(void* handle)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = SYD_SM4_Encrypt_Mac_BatchData(handle, g_stc_xn_init_config.keyidex, g_stc_xn_init_config.checkidex, \
|
||||
g_stc_xn_init_config.tmp_batch_orgdata, g_stc_xn_init_config.batch_orgdata_len, BATCH_MAX_SIZE, \
|
||||
g_stc_xn_init_config.tmp_sm4_batch_encdata, g_stc_xn_init_config.sm4_batch_encdata_len, \
|
||||
g_stc_xn_init_config.tmp_sm4_batch_checkvalue);
|
||||
if (ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_Encrypt_Mac_BatchData err ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xn_sm4_batch_dec_checkvalue(void* handle)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = SYD_SM4_Decrypt_Mac_BatchData(handle, g_stc_xn_init_config.keyidex, g_stc_xn_init_config.checkidex, \
|
||||
g_stc_xn_init_config.tmp_sm4_batch_encdata, g_stc_xn_init_config.sm4_batch_encdata_len, \
|
||||
g_stc_xn_init_config.tmp_sm4_batch_checkvalue, BATCH_MAX_SIZE, g_stc_xn_init_config.tmp_sm4_batch_decdata, \
|
||||
g_stc_xn_init_config.sm4_batch_decdata_len, g_stc_xn_init_config.checkret);
|
||||
if (ret != 0)
|
||||
{
|
||||
LOG("SYD_SM4_Decrypt_Mac_BatchData err ret=%08x", ret);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int command_tps(void* handle, int cmd, int data_len)
|
||||
{
|
||||
int ret = 0;
|
||||
switch(cmd)
|
||||
{
|
||||
case 0:
|
||||
ret = xn_sm4_short_enc(handle, data_len);
|
||||
break;
|
||||
case 1:
|
||||
ret = xn_sm4_short_dec(handle, data_len);
|
||||
break;
|
||||
case 2:
|
||||
ret = xn_sm4_batch_enc(handle);
|
||||
break;
|
||||
case 3:
|
||||
ret = xn_sm4_batch_dec(handle);
|
||||
break;
|
||||
case 4:
|
||||
ret = xn_sm4_short_mac(handle, data_len);
|
||||
break;
|
||||
case 5:
|
||||
ret = xn_sm4_batch_mac(handle);
|
||||
break;
|
||||
case 6:
|
||||
ret = xn_sm3_short_data(handle, data_len);
|
||||
break;
|
||||
case 7:
|
||||
ret = xn_sm4_enc_short_checkvalue(handle, data_len);
|
||||
break;
|
||||
case 8:
|
||||
ret = xn_sm4_dec_short_checkvalue(handle);
|
||||
break;
|
||||
case 9:
|
||||
ret = xn_sm4_batch_enc_checkvalue(handle);
|
||||
break;
|
||||
case 10:
|
||||
ret = xn_sm4_batch_dec_checkvalue(handle);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *xn_func_tps(void *arg)
|
||||
{
|
||||
int ret = 0, i = 0;
|
||||
long begin = 0, end = 0;
|
||||
trd_arg_t *trd_arg = (trd_arg_t *)arg;
|
||||
void *conn_handle = NULL;
|
||||
const char *iplist[5] = {0};
|
||||
int port[5] = {0};
|
||||
iplist[0] = DEV_IP;
|
||||
port[0] = DEV_PORT;
|
||||
ret = SYD_Connect_Ex(iplist, port, 1, CON_TIMEOUT, DEAL_TIMEOUT, 0, &conn_handle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_Connect_Ex ret=%08x", ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
begin = GetTime();
|
||||
for (i = 0; i < trd_arg->cycle_num; i++)
|
||||
{
|
||||
ret = command_tps(conn_handle, trd_arg->cmd, trd_arg->data_len);
|
||||
if (ret != 0) goto END;
|
||||
}
|
||||
end = GetTime() - begin;
|
||||
LOG_MSG("笔数=%d|总用时:%ld(us)|单笔用时:%ld(us)", trd_arg->cycle_num, end, (end/trd_arg->cycle_num));
|
||||
|
||||
pthread_mutex_lock(&g_time_mutex);
|
||||
printf("g_thread_count=%d\n", g_thread_count);
|
||||
g_all_time[g_thread_count] = end;
|
||||
g_all_average_time[g_thread_count] = (end/trd_arg->cycle_num);
|
||||
g_thread_count++;
|
||||
pthread_mutex_unlock(&g_time_mutex);
|
||||
|
||||
END:
|
||||
if (ret == 0)
|
||||
LOG_MSG("CMD:%d ok", trd_arg->cmd);
|
||||
else
|
||||
LOG_MSG("CMD:%d fail", trd_arg->cmd);
|
||||
|
||||
ret = SYD_DisConnect_Ex(conn_handle);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("SYD_DisConnect_Ex ret=%08x", ret);
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int xn_cmd_tps()
|
||||
{
|
||||
int ret = 0;
|
||||
float all_time = 0, all_average_time = 0, tps = 0;
|
||||
int i = 0, cmd = 0;
|
||||
long thread_count = 0, run_count = 0;
|
||||
pthread_t pthid[1000];
|
||||
trd_arg_t trd_arg;
|
||||
memset(&trd_arg, 0, sizeof(trd_arg_t));
|
||||
IniOrgData(g_org_data, 9000, 1);
|
||||
pthread_mutex_init(&g_time_mutex, NULL);
|
||||
|
||||
while(1)
|
||||
{
|
||||
LOG_MSG("/-------性能测试TPS------/");
|
||||
LOG_MSG("0:SM4短数据加密");
|
||||
LOG_MSG("1:SM4短数据解密 ");
|
||||
LOG_MSG("2:SM4批量加密 ");
|
||||
LOG_MSG("3:SM4批量解密 ");
|
||||
LOG_MSG("4:SM4-MAC短数据 ");
|
||||
LOG_MSG("5:SM4-MAC批量数据 ");
|
||||
LOG_MSG("6:SM3短数据");
|
||||
LOG_MSG("7:SM4短数据加密&校验值");
|
||||
LOG_MSG("8:SM4短数据解密&校验值");
|
||||
LOG_MSG("9:SM4批量数据加密&校验值");
|
||||
LOG_MSG("10:SM4批量数据解密&校验值");
|
||||
LOG_MSG("100:退出");
|
||||
LOG_MSG("请选择测试项:");
|
||||
scanf("%d", &trd_arg.cmd);
|
||||
if(trd_arg.cmd == 100) goto END;
|
||||
LOG_MSG("请输入线程数:");
|
||||
scanf("%ld", &thread_count);
|
||||
LOG_MSG("请输入循环笔数:");
|
||||
scanf("%ld", &run_count);
|
||||
LOG_MSG("请输入数据长度:");
|
||||
scanf("%d", &trd_arg.data_len);
|
||||
trd_arg.cycle_num = run_count / thread_count;
|
||||
g_thread_count = 0;
|
||||
|
||||
ret = xn_tps_init_data(trd_arg.data_len);
|
||||
if(ret != 0)
|
||||
{
|
||||
LOG("xn_tps_init_data err");
|
||||
goto END;
|
||||
}
|
||||
|
||||
for (i = 0; i < thread_count; i++)
|
||||
{
|
||||
ret = pthread_create(&pthid[i], NULL, xn_func_tps, (void *)&trd_arg);
|
||||
if(ret)
|
||||
{
|
||||
LOG("Fail to create thread %d", (int)pthid[i]);
|
||||
goto END;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < thread_count; i++)
|
||||
{
|
||||
ret = pthread_join(pthid[i], NULL);
|
||||
if(ret)
|
||||
{
|
||||
LOG("thread %d join failed\n", (int)pthid[i]);
|
||||
goto END;
|
||||
}
|
||||
}
|
||||
|
||||
/*计算总时间*/
|
||||
all_time = 0;
|
||||
all_average_time = 0;
|
||||
for(i = 0; i < g_thread_count; i++)
|
||||
{
|
||||
all_time += g_all_time[i];
|
||||
all_average_time += g_all_average_time[i];
|
||||
}
|
||||
|
||||
if(all_time == 0)
|
||||
{
|
||||
all_time = 1;
|
||||
}
|
||||
|
||||
if(all_average_time == 0)
|
||||
{
|
||||
all_average_time = 1;
|
||||
}
|
||||
/*****平均时间*****/
|
||||
tps = (run_count * 1000000) / (all_time / thread_count);
|
||||
LOG_MSG("[指令:%d] [笔数:%ld] [线程数:%ld] [总用时:%f(us)] [TPS:%f] [平均延时:%f(ms)]", \
|
||||
trd_arg.cmd, run_count, thread_count, (all_time / thread_count), tps, ((all_average_time / thread_count) / 1000));
|
||||
}
|
||||
|
||||
END:
|
||||
pthread_mutex_destroy(&g_time_mutex);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user