📄 sec2_diag.c
字号:
DRV_IPSEC_DBG("drv_sec2_3des_crypt: malloc DRV_SEC2_CONTEXT failed!\n");
return SEC2_ERROR;
}
/**************** 分配描述符内存 ****************/
ctx->dpdReqMem= (UINT8*)SEC2_GETBUF(sizeof(DES_LOADCTX_CRYPT_REQ));
if (NULL == ctx->dpdReqMem)
{
DRV_IPSEC_DBG("drv_sec2_3des_crypt: malloc ctx->dpdReqMem failed!\n");
drv_sec2_free_context(ctx);
return SEC2_ERROR;
}
ctx->msg = (void*)cbc;
cryptReq = (DES_LOADCTX_CRYPT_REQ*) (ctx->dpdReqMem);
/**************** 描述符填充: DES_LOADCTX_CRYPT_REQ ****************/
cryptReq->opId = DPD_TDES_CBC_CTX_ENCRYPT;
cryptReq->channel = 0; /*动态处理*/
cryptReq->notify = (PSEC_NOTIFY_ROUTINE)sec2_test_3des_callback;
cryptReq->pNotifyCtx = ctx;
cryptReq->notify_on_error = (PSEC_NOTIFY_ON_ERROR_ROUTINE)sec2_test_3des_callback;
cryptReq->ctxNotifyOnErr.request = ctx;
cryptReq->status = 0;
cryptReq->nextReq = NULL; /*the next req will be NULL*/
cryptReq->inIvBytes = (unsigned long)cbc->ivlen;
cryptReq->inIvData = (unsigned char*)cbc->iv;
cryptReq->keyBytes = (unsigned long)cbc->keyLen;
cryptReq->keyData = (unsigned char*)cbc->key;
cryptReq->inBytes = (unsigned long)cbc->inLen;
cryptReq->inData = (unsigned char*)cbc->inData;
cryptReq->outIvBytes = (unsigned long)cbc->ivlen;
cryptReq->outIvData = drv_ipsec_iv_out;
cryptReq->outData = (unsigned char*)cbc->outData;
/**************** 下发硬件处理 ****************/
ipsec_status = SEC2_ioctl(IOCTL_PROC_REQ, cryptReq);
if (SEC2_SUCCESS != ipsec_status)
{
DRV_IPSEC_DBG("drv_sec2_3des_crypt: Ioctl failed!\n");
drv_sec2_free_context(ctx);
}
return ipsec_status;
}
int sec2_test_3des_decrypt(algo_msg_crypt_t *cbc)
{
DRV_SEC2_CONTEXT *ctx = (DRV_SEC2_CONTEXT *)NULL; /* 上下文结构 */
DES_LOADCTX_CRYPT_REQ *cryptReq = (DES_LOADCTX_CRYPT_REQ *)NULL; /* 描述符 请求结构 */
int ipsec_status = SEC2_ERROR;
ctx = (DRV_SEC2_CONTEXT*)SEC2_GETBUF(sizeof(DRV_SEC2_CONTEXT));
if (NULL == ctx)
{
DRV_IPSEC_DBG("drv_sec2_3des_crypt: malloc DRV_SEC2_CONTEXT failed!\n");
return SEC2_ERROR;
}
/**************** 分配描述符内存 ****************/
ctx->dpdReqMem= (UINT8*)SEC2_GETBUF(sizeof(DES_LOADCTX_CRYPT_REQ));
if (NULL == ctx->dpdReqMem)
{
DRV_IPSEC_DBG("drv_sec2_3des_crypt: malloc ctx->dpdReqMem failed!\n");
drv_sec2_free_context(ctx);
return SEC2_ERROR;
}
cryptReq = (DES_LOADCTX_CRYPT_REQ*) (ctx->dpdReqMem);
/**************** 描述符填充: DES_LOADCTX_CRYPT_REQ ****************/
cryptReq->opId = DPD_TDES_CBC_CTX_DECRYPT;
cryptReq->channel = 0; /*动态处理*/
cryptReq->notify = (PSEC_NOTIFY_ROUTINE)drv_sec2_free_context;
cryptReq->pNotifyCtx = ctx;
cryptReq->notify_on_error = (PSEC_NOTIFY_ON_ERROR_ROUTINE)drv_sec2_free_context;
cryptReq->ctxNotifyOnErr.request = ctx;
cryptReq->status = 0;
cryptReq->nextReq = NULL; /*the next req will be NULL*/
cryptReq->inIvBytes = (unsigned long)cbc->ivlen;
cryptReq->inIvData = (unsigned char*)cbc->iv;
cryptReq->keyBytes = (unsigned long)cbc->keyLen;
cryptReq->keyData = (unsigned char*)cbc->key;
cryptReq->inBytes = (unsigned long)cbc->inLen;
cryptReq->inData = (unsigned char*)cbc->outData;
cryptReq->outIvBytes = (unsigned long)cbc->ivlen;
cryptReq->outIvData = drv_ipsec_iv_out;
cryptReq->outData = ipsec_onlytest;
/**************** 下发硬件处理 ****************/
ipsec_status = SEC2_ioctl(IOCTL_PROC_REQ, cryptReq);
if (SEC2_SUCCESS != ipsec_status)
{
DRV_IPSEC_DBG("drv_sec2_des_crypt: Ioctl failed!\n");
drv_sec2_free_context(ctx);
return SEC2_ERROR;
}
taskDelay(1);
if(memcmp(ipsec_onlytest,cbc->inData,128) == 0)
{
diag_sec2->sec2_3des_dec_succ_cnt++;
}
else
{
return SEC2_ERROR;
}
return SEC2_SUCCESS;
}
int sec2_diag_3des(algo_msg_crypt_t *cbc)
{
UINT8 pt3[24] = "012345670123456701234567";
cbc->inLen = 128; /*输入数据长度*/
cbc->inData = (UINT8*)malloc(cbc->inLen); /*分配输入内存*/
if (cbc->inData == NULL)
{
printf("sec2_test_des: failed to malloc inData!\n");
free(cbc);
return SEC2_ERROR;
}
memset(cbc->inData, 0x34, cbc->inLen); /*输入数据,128 位*/
cbc->keyLen = 24; /*输入密钥长度*/
cbc->key = (UINT8*)malloc(cbc->keyLen); /*分配内存空间*/
if (cbc->key == NULL)
{
printf("sec2_test_3des: failed to malloc key!\n");
free(cbc->inData);
free(cbc);
return SEC2_ERROR;
}
memcpy(cbc->key, pt3, (unsigned int)cbc->keyLen);
cbc->ivlen = 8;
cbc->iv = (UINT8*)malloc(cbc->ivlen);
if (cbc->iv == NULL)
{
printf("sec2_test_3des: failed to malloc iv!\n");
free(cbc->inData);
free(cbc->key);
free(cbc);
return SEC2_ERROR;
}
memcpy(cbc->iv, pt3, cbc->ivlen); /*初始化向量赋值*/
cbc->outLen = 128;
cbc->outData = (UINT8*)malloc(cbc->outLen); /*分配输出内存*/
if (cbc->outData == NULL) /*如果分配失败则释放*/
{
printf("sec2_test_3des: failed to malloc outData!\n");
free(cbc->inData);
free(cbc->key);
free(cbc->iv);
free(cbc);
return SEC2_ERROR;
}
memset(cbc->outData, 0, 128);
return SEC2_SUCCESS;
}
int sec2_diag_3des_ctrl(void)
{
algo_msg_crypt_t *cbc;
int test_cnt;
for(test_cnt = 0;test_cnt < 10;test_cnt++)
{
cbc = (algo_msg_crypt_t*)malloc(sizeof(algo_msg_crypt_t));
if(NULL == cbc)
{
return SEC2_ERROR;
}
sec2_diag_3des(cbc);
if(SEC2_SUCCESS == sec2_test_3des_encrypt(cbc))
{
diag_sec2->sec2_3des_enc_succ_cnt++;
}
else
{
if(NULL != cbc->outData)
{
free(cbc->outData);
}
if(NULL != cbc->inData)
{
free(cbc->inData);
}
if(NULL != cbc->key)
{
free(cbc->key);
}
if(NULL != cbc->iv)
{
free(cbc->iv);
}
if(NULL != cbc)
{
free(cbc);
}
}
taskDelay(1);
}
return SEC2_SUCCESS;
}
int sec2_test_aes_encrypt(algo_msg_crypt_t *cbc)
{
DRV_SEC2_CONTEXT *ctx = (DRV_SEC2_CONTEXT *)NULL;
DES_LOADCTX_CRYPT_REQ *cryptReq = (DES_LOADCTX_CRYPT_REQ *)NULL;
int ipsec_status = SEC2_ERROR;
ctx = (DRV_SEC2_CONTEXT*)SEC2_GETBUF(sizeof(DRV_SEC2_CONTEXT));
if (NULL == ctx)
{
DRV_IPSEC_DBG("drv_sec2_aes_crypt: malloc DRV_SEC2_CONTEXT failed!\n");
return SEC2_ERROR;
}
/**************** 分配描述符内存 ****************/
ctx->dpdReqMem= (UINT8*)SEC2_GETBUF(sizeof(DES_LOADCTX_CRYPT_REQ));
if (NULL == ctx->dpdReqMem)
{
DRV_IPSEC_DBG("drv_sec2_aes_crypt: malloc ctx->dpdReqMem failed!\n");
drv_sec2_free_context(ctx);
return SEC2_ERROR;
}
ctx->msg = (void*)cbc;
cryptReq = (DES_LOADCTX_CRYPT_REQ*) (ctx->dpdReqMem);
/**************** 描述符填充: DES_LOADCTX_CRYPT_REQ ****************/
cryptReq->opId = DPD_AESA_CBC_ENCRYPT_CRYPT;
cryptReq->channel = 0; /*动态处理*/
cryptReq->notify = (PSEC_NOTIFY_ROUTINE)sec2_test_aes_callback;
cryptReq->pNotifyCtx = ctx;
cryptReq->notify_on_error = (PSEC_NOTIFY_ON_ERROR_ROUTINE)sec2_test_aes_callback;
cryptReq->ctxNotifyOnErr.request = ctx;
cryptReq->status = 0;
cryptReq->nextReq = NULL; /*the next req will be NULL*/
cryptReq->inIvBytes = (unsigned long)cbc->ivlen;
cryptReq->inIvData = (unsigned char*)cbc->iv;
cryptReq->keyBytes = (unsigned long)cbc->keyLen;
cryptReq->keyData = (unsigned char*)cbc->key;
cryptReq->inBytes = (unsigned long)cbc->inLen;
cryptReq->inData = (unsigned char*)cbc->inData; /* 输入数据内存不需要再分配*/
cryptReq->outIvBytes = (unsigned long)cbc->ivlen;
cryptReq->outIvData = drv_ipsec_iv_out;
cryptReq->outData = (unsigned char*)cbc->outData;
/**************** 下发硬件处理 ****************/
ipsec_status = SEC2_ioctl(IOCTL_PROC_REQ, cryptReq);
if (SEC2_SUCCESS != ipsec_status)
{
DRV_IPSEC_DBG("drv_sec2_aes_crypt: Ioctl failed!\n");
drv_sec2_free_context(ctx);
}
return ipsec_status;
}
int sec2_test_aes_decrypt(algo_msg_crypt_t *cbc)
{
DRV_SEC2_CONTEXT *ctx = (DRV_SEC2_CONTEXT *)NULL; /* 上下文结构 */
DES_LOADCTX_CRYPT_REQ *cryptReq = (DES_LOADCTX_CRYPT_REQ *)NULL; /* 描述符 请求结构 */
int ipsec_status = SEC2_ERROR;
ctx = (DRV_SEC2_CONTEXT*)SEC2_GETBUF(sizeof(DRV_SEC2_CONTEXT));
if (NULL == ctx)
{
DRV_IPSEC_DBG("drv_sec2_aes_crypt: malloc DRV_SEC2_CONTEXT failed!\n");
return SEC2_ERROR;
}
/**************** 分配描述符内存 ****************/
ctx->dpdReqMem= (UINT8*)SEC2_GETBUF(sizeof(DES_LOADCTX_CRYPT_REQ));
if (NULL == ctx->dpdReqMem)
{
DRV_IPSEC_DBG("drv_sec2_aes_crypt: malloc ctx->dpdReqMem failed!\n");
drv_sec2_free_context(ctx);
return SEC2_ERROR;
}
cryptReq = (DES_LOADCTX_CRYPT_REQ*) (ctx->dpdReqMem);
/**************** 描述符填充: DES_LOADCTX_CRYPT_REQ ****************/
cryptReq->opId = DPD_AESA_CBC_DECRYPT_CRYPT;
cryptReq->channel = 0; /*动态处理*/
cryptReq->notify = (PSEC_NOTIFY_ROUTINE)drv_sec2_free_context;
cryptReq->pNotifyCtx = ctx;
cryptReq->notify_on_error = (PSEC_NOTIFY_ON_ERROR_ROUTINE)drv_sec2_free_context;
cryptReq->ctxNotifyOnErr.request = ctx;
cryptReq->status = 0;
cryptReq->nextReq = NULL; /*the next req will be NULL*/
cryptReq->inIvBytes = (unsigned long)cbc->ivlen;
cryptReq->inIvData = (unsigned char*)cbc->iv;
cryptReq->keyBytes = (unsigned long)cbc->keyLen;
cryptReq->keyData = (unsigned char*)cbc->key;
cryptReq->inBytes = (unsigned long)cbc->inLen;
cryptReq->inData = (unsigned char*)cbc->outData;
cryptReq->outIvBytes = (unsigned long)cbc->ivlen;
cryptReq->outIvData = drv_ipsec_iv_out;
cryptReq->outData = ipsec_onlytest;
/**************** 下发硬件处理 ****************/
ipsec_status = SEC2_ioctl(IOCTL_PROC_REQ, cryptReq);
if (SEC2_SUCCESS != ipsec_status)
{
DRV_IPSEC_DBG("drv_sec2_aes_crypt: Ioctl failed!\n");
drv_sec2_free_context(ctx);
return SEC2_ERROR;
}
taskDelay(1);
if(memcmp(ipsec_onlytest,cbc->inData,128) == 0)
{
diag_sec2->sec2_aes_dec_succ_cnt++;
}
else
{
return SEC2_ERROR;
}
return SEC2_SUCCESS;
}
int sec2_diag_aes(algo_msg_crypt_t *cbc)
{
UINT8 pt3[16] = "0123456701234567";
cbc->inLen = 128; /*输入数据长度*/
cbc->inData = (UINT8*)malloc(cbc->inLen); /*分配输入内存*/
if (cbc->inData == NULL)
{
printf("sec2_test_aes: failed to malloc inData!\n");
free(cbc);
return SEC2_ERROR;
}
memset(cbc->inData, 0x34, cbc->inLen); /*输入数据,128 位*/
cbc->keyLen = 16; /*输入密钥长度*/
cbc->key = (UINT8*)malloc(cbc->keyLen); /*分配内存空间*/
if (cbc->key == NULL)
{
printf("sec2_test_aes: failed to malloc key!\n");
free(cbc->inData);
free(cbc);
return SEC2_ERROR;
}
memcpy(cbc->key, pt3, cbc->keyLen); /*输入密钥*/
cbc->ivlen = 16; /*初始化向量长度*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -