⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sec2_diag.c

📁 freescale ppc sec2加解密单元驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
	
    for(loopCnt = 0; loopCnt < SEC2_HANDLE_QUEUE_DEPTH; loopCnt ++)
    {
        if((GENERIC_REQ*)NULL != sec2_queue->pReq)
        {
            useCnt++;
        }
        if(loopCnt < 10)
        {
            sprintf((buffer+strlen(buffer)),"%d ",loopCnt);
        }
        else
        {
            sprintf((buffer+strlen(buffer)),"%d",loopCnt);
        }
	    sprintf((buffer+strlen(buffer)),"\t 0x%x\n",sec2_queue->requestingTaskId);
		sec2_queue = sec2_Queue[loopCnt].next;
    }
	
    sprintf((buffer+strlen(buffer)),"handle queue   used = %d\n",useCnt);
    sprintf((buffer+strlen(buffer)),"handle queue unused = %d\n",SEC2_HANDLE_QUEUE_DEPTH-useCnt);
    sprintf(buffer+strlen(buffer),"\n======\tSec2 Core handle queue end\t ======\n");
}


void sec2_test_des_callback(DRV_SEC2_CONTEXT *ctx)
{
    algo_msg_crypt_t *crypt;

    crypt = (algo_msg_crypt_t *)(ctx->msg);    

    /*先释放上次的ctx*/
    drv_sec2_free_context(ctx);
    
    sec2_test_des_decrypt(crypt);
    
    /* 不管是否成功,都要释放内存 */
    if(NULL != crypt->outData)
    {
        free(crypt->outData);
    }
    if(NULL != crypt->inData)
    {
        free(crypt->inData);
    }
    if(NULL != crypt->key)
    {
        free(crypt->key);
    }
    if(NULL != crypt->iv)
    {
        free(crypt->iv);
    }
    if(NULL != crypt)
    {
        free(crypt);
    }

}

void sec2_test_3des_callback(DRV_SEC2_CONTEXT *ctx)
{
    algo_msg_crypt_t *crypt;

    crypt = (algo_msg_crypt_t *)ctx->msg;    

    /*先释放上次的ctx*/
    drv_sec2_free_context(ctx);

    sec2_test_3des_decrypt(crypt);

    /* 不管是否成功,都要释放内存 */
    if(NULL != crypt->outData)
    {
        free(crypt->outData);
    }
    if(NULL != crypt->inData)
    {
        free(crypt->inData);
    }
    if(NULL != crypt->key)
    {
        free(crypt->key);
    }
    if(NULL != crypt->iv)
    {
        free(crypt->iv);
    }
    if(NULL != crypt)
    {
        free(crypt);
    }

}

void sec2_test_aes_callback(DRV_SEC2_CONTEXT *ctx)
{
    algo_msg_crypt_t *crypt;

    crypt = (algo_msg_crypt_t *)ctx->msg;    

    /*先释放上次的ctx*/
    drv_sec2_free_context(ctx);

    sec2_test_aes_decrypt(crypt);

    /* 不管是否成功,都要释放内存 */
    if(NULL != crypt->outData)
    {
        free(crypt->outData);
    }
    if(NULL != crypt->inData)
    {
        free(crypt->inData);
    }
    if(NULL != crypt->key)
    {
        free(crypt->key);
    }
    if(NULL != crypt->iv)
    {
        free(crypt->iv);
    }
    if(NULL != crypt)
    {
        free(crypt);
    }

}


int sec2_test_des_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_des_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_des_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_SDES_CBC_CTX_ENCRYPT;
    cryptReq->channel = 0;                       /*动态处理*/
    cryptReq->notify  = (PSEC_NOTIFY_ROUTINE)sec2_test_des_callback;       
    cryptReq->pNotifyCtx = ctx;
    cryptReq->notify_on_error = (PSEC_NOTIFY_ON_ERROR_ROUTINE)sec2_test_des_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_des_crypt: Ioctl failed!\n");
       drv_sec2_free_context(ctx);
     }

    return ipsec_status;
}

int sec2_test_des_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_des_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_des_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_SDES_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_des_dec_succ_cnt++;
    }
    else
    {
        return SEC2_ERROR;
    }    
    
    return SEC2_SUCCESS;
}

int sec2_diag_des(algo_msg_crypt_t *cbc)
{
    UINT8 pt3[8] = "01234567"; 
    
    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, 0x67, cbc->inLen);                    /*输入数据,128 位*/
    
    cbc->keyLen = 8;                                                        /*输入密钥长度*/
    cbc->key = (UINT8*)malloc(cbc->keyLen);                /*分配内存空间*/
    if (cbc->key == NULL)
    {
        printf("sec2_test_des: failed to malloc key!\n");
        free(cbc->inData);
        free(cbc);
        return SEC2_ERROR;
    }
    memcpy(cbc->key, pt3, cbc->keyLen);                      /*输入密钥*/

    cbc->ivlen = 8;                                                           /*初始化向量长度*/
    cbc->iv = (UINT8*)malloc(cbc->ivlen);
    if (cbc->iv == NULL)
    {
        printf("sec2_test_des: 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_des: 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_des_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_des(cbc);

        if(SEC2_SUCCESS == sec2_test_des_encrypt(cbc))
        {
           diag_sec2->sec2_des_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_3des_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)
    {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -