Files
2026-07-30 11:19:44 +05:30

1101 lines
37 KiB
C

/*
******************************************************************************
* INTERPEAK SOURCE FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: sec_dcl_api_ipfreescale.c,v $ $Revision: 1.7.12.1 $
* $Source: /home/interpeak/CVSRoot/ipfreescale/sec4/sec_dcl_api_ipfreescale.c,v $
* $Author: jsheng $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
******************************************************************************
*/
/*
* Ipfreescale extensions to the Freescale Netcomm SEC/DCL library.
*/
/* Include the internal definitions of this module */
#include <sec_dcl_api.h>
#include <sec_dcl_cmd.h>
#include <sec_dcl_ipfreescale.h>
#include <sec_dcl_api_ipfreescale.h>
#include <Sec4.h>
/* Include the external interfaces of other modules */
#include <error_ext.h>
#include <string_ext.h>
#define EXIT_IF(cond) ASSERT_COND(!(cond))
#define KEY_IMM_IF(cond) (uint32_t)((cond)? KEY_IMM:0)
#define CCMP_IV_BYTES (16)
#define CCMP_CTR0_BYTES (16)
#define CCMP_CTR0_SECCTX_OFFSET (16)
#define CCMP_CTR0_INCTX_OFFSET (32)
#define CCMP_MIC_SECCTX_OFFSET (32)
#define CCMP_MAC_BYTES (16)
#define CCMP_MIC_BYTES (16)
#define AESCCM_B0_BYTES (16)
#define AESCCM_CTR0_BYTES (16)
#define AESCCM_CTR0_SECCTX_OFFSET (16)
#define AESCCM_CTR0_INCTX_OFFSET (32)
#define AESCCM_SEC_OUTCTX_MIC_OFFSET (32)
uint32_t InitRandNumJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t dataLength,
uint8_t* data)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 | ALG_OP_ID_RNG);
CmdInsertRngFifoStore(&descHandle, RNG_FIFO_STORE_TYPE_ADDR, dataLength, data);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitMd5DigestJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inDataBytes,
uint32_t outDataBytes,
uint8_t* inData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* 0 size digest is not supported. Should be handled by caller */
if(inDataBytes == 0)
goto exit;
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_2_TYPE_MSG_L2, inDataBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_2 |
ALG_OP_ID_MD5 |
ALG_OP_AS_INITFINAL);
CmdInsertStore(&descHandle, STORE_CLASS_2_SRC_CTX, 0, outDataBytes, outData);
exit:
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitSha1DigestJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inDataBytes,
uint32_t outDataBytes,
uint8_t* inData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* 0 size digest is not supported. Should be handled by caller */
if(inDataBytes == 0)
goto exit;
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_2_TYPE_MSG_L2, inDataBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_2 |
ALG_OP_ID_SHA1 |
ALG_OP_AS_INITFINAL);
CmdInsertStore(&descHandle, STORE_CLASS_2_SRC_CTX, 0, outDataBytes, outData);
exit:
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitMd5HmacJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_2_DST_REGISTER, keyBytes, keyData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_2_TYPE_MSG_L2, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_2 |
ALG_OP_ID_MD5 |
ALG_OP_AAI_MDS_SHA_HMAC |
ALG_OP_AS_INITFINAL);
CmdInsertStore(&descHandle, STORE_CLASS_2_SRC_CTX, 0, outBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitSha1HmacJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_2_DST_REGISTER, keyBytes, keyData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_2_TYPE_MSG_L2, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_2 |
ALG_OP_ID_SHA1 |
ALG_OP_AAI_MDS_SHA_HMAC |
ALG_OP_AS_INITFINAL);
CmdInsertStore(&descHandle, STORE_CLASS_2_SRC_CTX, 0, outBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitDesCbcEncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t inIvBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* inIvData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER | KEY_IMM, keyBytes, keyData); /* DES has 8 has key size. We can use immediate */
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, inIvBytes, inIvData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
/* DES CBC encrypt with parity check */
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_DES |
ALG_OP_DIR_ENC |
ALG_OP_AAI_DES_CBC |
ALG_OP_ICV);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitDesCbcDecryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t inIvBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* inIvData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER | KEY_IMM, keyBytes, keyData); /* DES has key size = 8 bytes*/
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, inIvBytes, inIvData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_DES |
ALG_OP_DIR_DEC |
ALG_OP_AAI_DES_CBC);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitDesEcbEncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER | KEY_IMM, keyBytes, keyData); /* DES has 8 has key size */
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_DES |
ALG_OP_DIR_ENC |
ALG_OP_AAI_DES_ECB);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitDesEcbDecryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER | KEY_IMM, keyBytes, keyData); /* DES has 8 has key size */
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_DES |
ALG_OP_DIR_DEC |
ALG_OP_AAI_DES_ECB);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitTdesCbcEncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t inIvBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* inIvData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, inIvBytes, inIvData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_3DES |
ALG_OP_DIR_ENC |
ALG_OP_AAI_DES_CBC);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitTdesCbcDecryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t inIvBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* inIvData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, inIvBytes, inIvData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_3DES |
ALG_OP_DIR_DEC |
ALG_OP_AAI_DES_CBC);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitTdesEcbEncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_3DES |
ALG_OP_DIR_ENC |
ALG_OP_AAI_DES_ECB);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitTdesEcbDecryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_3DES |
ALG_OP_DIR_DEC |
ALG_OP_AAI_DES_ECB);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitAesCbcEncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t inIvBytes,
uint32_t outCtxBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* inIvData,
uint8_t* outData,
uint8_t* outCtxData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, inIvBytes, inIvData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_AES |
ALG_OP_AS_INITFINAL |
ALG_OP_DIR_ENC |
ALG_OP_AAI_AES_CBC);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CmdInsertStore(&descHandle, STORE_CLASS_1_SRC_CTX, 0, outCtxBytes, outCtxData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitAesCbcDecryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t inIvBytes,
uint32_t outCtxBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* inIvData,
uint8_t* outData,
uint8_t* outCtxData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, inIvBytes, inIvData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_AES |
ALG_OP_DIR_DEC |
ALG_OP_AS_INITFINAL |
ALG_OP_AAI_AES_CBC);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CmdInsertStore(&descHandle, STORE_CLASS_1_SRC_CTX, 0, outCtxBytes, outCtxData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitAesEcbEncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_AES |
ALG_OP_DIR_ENC |
ALG_OP_AAI_AES_ECB);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitAesEcbDecryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t outBytes,
uint8_t* inData,
uint8_t* keyData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_AES |
ALG_OP_DIR_DEC |
ALG_OP_AAI_AES_ECB);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitModExpJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t aBytes,
uint32_t expBytes,
uint32_t modBytes,
uint32_t outBytes,
uint8_t* aData,
uint8_t* expData,
uint8_t* modData,
uint8_t* outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* bData=adata^expData % modData */
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_PKHA_E_MEM, expBytes, expData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_PKHA_A, aBytes, aData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_PKHA_N, modBytes, modData);
CmdInsertPkhaOperation(&descHandle, PKHA_OP_MODE_MOD_EXP_B );
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_1_TYPE_PKHA_B, outBytes, outData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitRc4EncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t inCtxBytes,
uint32_t outCtxBytes,
uint8_t *inData,
uint8_t *keyData,
uint8_t *inCtxData,
uint8_t *outData,
uint8_t *outCtxData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* ENC bit needs to be set only for counter accuracy even though encrypt/decrypt is the same for rc4 */
cmdFlags = ALG_OP_TYPE_CLASS_1 | ALG_OP_ID_ARC4 | ALG_OP_DIR_ENC;
/* Add key if there is one (no input context) */
if(keyData != NULL)
{
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
cmdFlags |= ALG_OP_AS_INIT;
}
/* Load input context if there is one */
if (inCtxData != NULL)
{
/* Load S-box, I and J pointers (as black key) from earlier job */
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_AFHA_SBOX | KEY_ENC_ON_EKT_AES_ECB_TK_OFF, KEY_DST_AFHA_SBOX_LENGTH, inCtxData);
cmdFlags |= ALG_OP_AS_UPDATE;
}
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, cmdFlags);
/* Store msg */
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inBytes, outData);
/* Save Out context (S-box, I and J pointers (as black key) for jobs to come */
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_1_TYPE_AFHA_SBOX_ECB_JKEK, KEY_DST_AFHA_SBOX_LENGTH, outCtxData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitCcmpEncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t AADBytes,
uint32_t MICDataBytes,
uint32_t inCtxBytes,
uint32_t outBytes,
uint8_t *inData,
uint8_t *keyData,
uint8_t *AADData,
uint8_t *MICData,
uint8_t *inCtxData,
uint8_t *outData)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* inCtxData */
/* +--------------------------------+
* | [0:63] | IV [0:63] |
* +--------------------------------+
* | [64:127] | IV [64:127] |
* +--------------------------------+
* | [128:191] | CCMP CTR0 [0:63] |
* +--------------------------------+
* | [192:255] | |
* +--------------------------------+
*/
/* SEC4 Out Context Data */
/* +--------------------------------+
* | [0:63] | MAC [0:63] |
* +--------------------------------+
* | [64:127] | MAC [64:127] |
* +--------------------------------+
* | [128:191] | <hole> |
* +--------------------------------+
* | [192:255] | <hole> |
* +--------------------------------+
* | [256:319] | E(MAC[0:63]) |
* +--------------------------------+
* | [320:383] | E(MAC[64:127]) |
* +--------------------------------+
*/
/* Load key */
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
/* Load IV */
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, CCMP_IV_BYTES, inCtxData);
/* Load initial CTR0 value at offset in context*/
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, CCMP_CTR0_SECCTX_OFFSET, CCMP_CTR0_BYTES, inCtxData + CCMP_CTR0_INCTX_OFFSET);
/* AAD data */
if(AADBytes > 0)
{
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_AAD_F1, AADBytes, AADData);
}
/* Message data */
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_AES |
ALG_OP_DIR_ENC |
ALG_OP_AAI_AES_CCM |
ALG_OP_AAI_CTR_MOD128 |
ALG_OP_AS_INITFINAL );
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, outBytes, outData);
/* Store output MAC and MIC data */
CmdInsertStore(&descHandle, STORE_CLASS_1_SRC_CTX, 0, CCMP_MAC_BYTES, MICData);
CmdInsertStore(&descHandle, STORE_CLASS_1_SRC_CTX, CCMP_MIC_SECCTX_OFFSET, CCMP_MIC_BYTES, MICData + CCMP_MAC_BYTES);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitCRCJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inDataBytes,
uint8_t* inData,
uint8_t outDataBytes,
uint8_t* outData,
uint32_t inCtxBytes,
uint8_t* inCtxData,
uint8_t* polynomialData,
uint32_t crcOptions)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* 0 size CRC is not supported. Should be handled by caller */
if(inDataBytes == 0)
goto exit;
/* Load inCtx data, e.g. for chained CRC calculation */
if(inCtxData != NULL)
CmdInsertLoad(&descHandle, LOAD_CLASS_2_DST_CTX | LOAD_IMM, 0, inCtxBytes, inCtxData);
/* Input data */
cmdFlags = 0;
if(crcOptions & SEC4_OPT_INDATA_IS_SGT)
cmdFlags = FIFO_LOAD_SGT;
CmdInsertFifoLoad(&descHandle, cmdFlags | FIFO_LOAD_CLASS_2_TYPE_MSG_L2, inDataBytes, inData);
/* Load polynomial if needed */
if(!(crcOptions & (SEC4_DCL_OPT_CRC_IEEE802 | SEC4_DCL_OPT_CRC_IETF3385)))
{
/* Load key (polynomial) */
CmdInsertKey(&descHandle, KEY_CLASS_2_DST_REGISTER | KEY_IMM, outDataBytes, polynomialData);
}
/* Issue CRC command based on polynomial */
cmdFlags = ALG_OP_TYPE_CLASS_2 | ALG_OP_ID_CRC | ALG_OP_AS_INITFINAL; /* TODO: Support for partial CRC */
if(crcOptions & (SEC4_DCL_OPT_CRC_IEEE802))
cmdFlags |= ALG_OP_AAI_CRC_IEEE_802;
else if(crcOptions & (SEC4_DCL_OPT_CRC_IETF3385))
cmdFlags |= ALG_OP_AAI_CRC_IETF_3385;
else
cmdFlags |= ALG_OP_AAI_CRC_CUST_POLY;
if(crcOptions & SEC4_DCL_OPT_CRC_DIS)
cmdFlags |= ALG_OP_AAI_CRC_DIS;
if(crcOptions & SEC4_DCL_OPT_CRC_DOS)
cmdFlags |= ALG_OP_AAI_CRC_DOS;
if(crcOptions & SEC4_DCL_OPT_CRC_DOC)
cmdFlags |= ALG_OP_AAI_CRC_DOC;
/* TODO: Add options */
//ALG_OP_AAI_CRC_IVZ
CmdInsertAlgOperation(&descHandle, cmdFlags);
CmdInsertStore(&descHandle, STORE_CLASS_2_SRC_CTX, 0, outDataBytes, outData);
exit:
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitMoveDataJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inDataBytes,
uint8_t* inData,
uint8_t* outData,
uint32_t options)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* Disable automatic iNformation FIFO entries */
cmdFlags = DCTRL_LOAD_AUTO_IFIFO_DISABLED;
CmdInsertDctrlLoad(&descHandle,cmdFlags);
/* Input data */
cmdFlags = 0;
if(options & SEC4_OPT_INDATA_IS_SGT)
cmdFlags = FIFO_LOAD_SGT;
CmdInsertFifoLoad(&descHandle, cmdFlags | FIFO_LOAD_CLASS_BOTH_TYPE_MSG_L2_L1_F1, inDataBytes, inData);
/* Re-enable automatic iNformation FIFO entries*/
cmdFlags = DCTRL_LOAD_AUTO_IFIFO_ENABLED;
CmdInsertDctrlLoad(&descHandle,cmdFlags);
/* Move data to output FIFO */
/* When moving data from IFIFO to OFIFO, offset are treated as additional 8 bits for length */
CmdInsertMove(&descHandle, MOVE_AUX_FLSH_SRC_IFIFO1_DST_OFIFO, (inDataBytes >> 8) & 0xFF, inDataBytes & 0xFF);
/* Store output data */
cmdFlags = 0;
if(options & SEC4_OPT_OUTDATA_IS_SGT)
cmdFlags = FIFO_STORE_SGT;
CmdInsertFifoStore(&descHandle, cmdFlags | FIFO_STORE_CLASS_UNUSED_TYPE_MSG, inDataBytes, outData);
exit:
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitAesCcmEncryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t AADBytes,
uint32_t MICDataBytes,
uint32_t inCtxBytes,
uint32_t outBytes,
uint8_t *inData,
uint8_t *keyData,
uint8_t *AADData,
uint8_t *inMICData,
uint8_t *outMICData,
uint8_t *inCtxData,
uint8_t *outData,
uint32_t options)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* inCtxData */
/* +--------------------------------+
* | [0:63] | B0 (IV) [0:63] |
* +--------------------------------+
* | [64:127] | B0 (IV) [64:127] |
* +--------------------------------+
* | [128:191] | CTR0 [0:63] |
* +--------------------------------+
* | [192:255] | CTR0 [64:127] |
* +--------------------------------+
*/
/* SEC4 Out Context Data */
/* +--------------------------------+
* | [0:63] | MAC [0:63] |
* +--------------------------------+
* | [64:127] | MAC [64:127] |
* +--------------------------------+
* | [128:191] | <hole> |
* +--------------------------------+
* | [192:255] | <hole> |
* +--------------------------------+
* | [256:319] | E(MAC[0:63]) (MIC) |
* +--------------------------------+
* | [320:383] | E(MAC[64:127])(MIC)|
* +--------------------------------+
*/
/* Load key */
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
/* Load AES CCM initial B0 block */
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, AESCCM_B0_BYTES, inCtxData);
/* Load initial CTR0 value at offset in context*/
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, AESCCM_CTR0_SECCTX_OFFSET, AESCCM_CTR0_BYTES, inCtxData + AESCCM_CTR0_INCTX_OFFSET);
/* AAD data */
if(AADBytes > 0)
{
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_AAD_F1, AADBytes, AADData);
}
/* Load message data */
cmdFlags = 0;
if(options & SEC4_OPT_INDATA_IS_SGT)
cmdFlags = FIFO_LOAD_SGT;
CmdInsertFifoLoad(&descHandle, cmdFlags | FIFO_LOAD_CLASS_1_TYPE_MSG_L1, inBytes, inData);
CmdInsertAlgOperation(&descHandle, ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_AES |
ALG_OP_DIR_ENC |
ALG_OP_AAI_AES_CCM |
ALG_OP_AAI_CTR_MOD128 |
ALG_OP_AS_INITFINAL );
/* Store encrypted out data */
cmdFlags = 0;
if(options & SEC4_OPT_OUTDATA_IS_SGT)
cmdFlags = FIFO_STORE_SGT;
CmdInsertFifoStore(&descHandle, cmdFlags | FIFO_STORE_CLASS_UNUSED_TYPE_MSG, outBytes, outData);
/* Store output MIC data */
CmdInsertStore(&descHandle, STORE_CLASS_1_SRC_CTX, CCMP_MIC_SECCTX_OFFSET, MICDataBytes, outMICData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitAesCcmDecryptJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
uint32_t inBytes,
uint32_t keyBytes,
uint32_t AADBytes,
uint32_t MICDataBytes,
uint32_t inCtxBytes,
uint32_t outBytes,
uint8_t *inData,
uint8_t *keyData,
uint8_t *AADData,
uint8_t *inMICData,
uint8_t *outMICData,
uint8_t *inCtxData,
uint8_t *outData,
uint32_t options)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* inCtxData */
/* +--------------------------------+
* | [0:63] | B0 (IV) [0:63] |
* +--------------------------------+
* | [64:127] | B0 (IV) [64:127] |
* +--------------------------------+
* | [128:191] | CTR0 [0:63] |
* +--------------------------------+
* | [192:255] | CTR0 [64:127] |
* +--------------------------------+
*/
/* SEC4 Out Context Data */
/* +--------------------------------+
* | [0:63] | MAC [0:63] |
* +--------------------------------+
* | [64:127] | MAC [64:127] |
* +--------------------------------+
* | [128:191] | <hole> |
* +--------------------------------+
* | [192:255] | <hole> |
* +--------------------------------+
* | [256:319] | E(MAC[0:63]) (MIC) |
* +--------------------------------+
* | [320:383] | E(MAC[64:127])(MIC)|
* +--------------------------------+
*/
/* Load key */
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, keyBytes, keyData);
/* Load IV */
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, AESCCM_B0_BYTES, inCtxData);
/* Load initial CTR0 value at offset in context*/
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, AESCCM_CTR0_SECCTX_OFFSET, AESCCM_CTR0_BYTES, inCtxData + AESCCM_CTR0_INCTX_OFFSET);
/* AAD data */
if(AADBytes > 0)
{
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_AAD_F1, AADBytes, AADData);
}
/* Load message data */
cmdFlags = 0;
if(options & SEC4_OPT_INDATA_IS_SGT)
cmdFlags = FIFO_LOAD_SGT;
CmdInsertFifoLoad(&descHandle, cmdFlags | FIFO_LOAD_CLASS_1_TYPE_MSG_F1, inBytes, inData);
/* Input MIC data */
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_ICV_L1, MICDataBytes, inMICData);
/* Decrypt */
cmdFlags = ALG_OP_TYPE_CLASS_1 |
ALG_OP_ID_AES |
ALG_OP_DIR_DEC |
ALG_OP_AAI_AES_CCM |
ALG_OP_AAI_CTR_MOD128 |
ALG_OP_AS_INITFINAL;
if(options & SEC4_DCL_OPT_ICV)
cmdFlags |= ALG_OP_ICV;
CmdInsertAlgOperation(&descHandle, cmdFlags);
/* Store decrypted out data */
cmdFlags = 0;
if(options & SEC4_OPT_OUTDATA_IS_SGT)
cmdFlags = FIFO_STORE_SGT;
CmdInsertFifoStore(&descHandle, cmdFlags | FIFO_STORE_CLASS_UNUSED_TYPE_MSG, outBytes, outData);
/* Store output MAC data (decrypted MIC) */
CmdInsertStore(&descHandle, STORE_CLASS_1_SRC_CTX, AESCCM_SEC_OUTCTX_MIC_OFFSET, MICDataBytes, outMICData);
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}
uint32_t InitIpsecJobDesc(uint32_t* p_Desc,
uint32_t ptrSize,
t_IpsecJobDescParam *param)
{
t_DescHandle descHandle = NewDescHandle(p_Desc,ptrSize);
uint32_t cmdFlags;
/* Job descriptor header */
cmdFlags = JOB_DESC_HDR_CTYPE|JOB_DESC_HDR_SHARE_NEVER;
CmdInsertJobDescHdr(&descHandle,cmdFlags);
/* If decrypt, first generate digest over whole ESP pkt */
if (param->jobDirection == e_DCL_JOB_DEC)
{
CmdInsertKey(&descHandle, KEY_CLASS_2_DST_REGISTER | KEY_IMM, param->hashKeyDataBytes, param->hashKeyData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_2_TYPE_MSG_L2, param->hashInDataBytes + param->inDataBytes, param->hashInData);
cmdFlags = ALG_OP_TYPE_CLASS_2 | ALG_OP_AAI_MDS_SHA_HMAC | ALG_OP_AS_INITFINAL;
EXIT_IF((param->authAlg != e_IPSEC_AUTHEN_ALG_HMAC_SHA1_96) &&
(param->authAlg != e_IPSEC_AUTHEN_ALG_HMAC_MD5_96));
switch(param->authAlg)
{
case e_IPSEC_AUTHEN_ALG_HMAC_SHA1_96:
cmdFlags = cmdFlags | ALG_OP_ID_SHA1;
break;
case e_IPSEC_AUTHEN_ALG_HMAC_MD5_96:
cmdFlags = cmdFlags | ALG_OP_ID_MD5;
break;
default:
/* We shouldn't end up here */
cmdFlags = 0;
break;
}
CmdInsertAlgOperation(&descHandle, cmdFlags);
CmdInsertStore(&descHandle, STORE_CLASS_2_SRC_CTX, 0, param->hashOutDataBytes, param->hashOutData);
}
/*** Encrypt/Decrypt data ***/
CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER | KEY_IMM, param->cryptoKeyDataBytes, param->cryptoKeyData);
/*CmdInsertKey(&descHandle, KEY_CLASS_1_DST_REGISTER, param->cryptoKeyDataBytes, param->cryptoKeyData);*/
/* Initialization Vector (IV) */
CmdInsertLoad(&descHandle, LOAD_CLASS_1_DST_CTX, 0, param->inCtxDataBytes, param->inCtxData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_1_TYPE_MSG_L1, param->inDataBytes, param->inData);
cmdFlags = ALG_OP_TYPE_CLASS_1;
if (param->jobDirection == e_DCL_JOB_ENC)
cmdFlags = cmdFlags | ALG_OP_DIR_ENC;
else
cmdFlags = cmdFlags | ALG_OP_DIR_DEC;
EXIT_IF((param->cryptoAlg != e_IPSEC_CRYPTO_ALG_DES) &&
(param->cryptoAlg != e_IPSEC_CRYPTO_ALG_3DES) &&
(param->cryptoAlg != e_IPSEC_CRYPTO_ALG_AES_CBC));
switch(param->cryptoAlg)
{
case e_IPSEC_CRYPTO_ALG_DES:
cmdFlags = cmdFlags | ALG_OP_ID_DES | ALG_OP_AAI_DES_CBC;
break;
case e_IPSEC_CRYPTO_ALG_3DES:
cmdFlags = cmdFlags | ALG_OP_ID_3DES | ALG_OP_AAI_DES_CBC;
break;
case e_IPSEC_CRYPTO_ALG_AES_CBC:
cmdFlags = cmdFlags | ALG_OP_ID_AES | ALG_OP_AAI_AES_CBC;
break;
default:
/* We shouldn't end up here */
cmdFlags = 0;
break;
}
CmdInsertAlgOperation(&descHandle, cmdFlags);
CmdInsertFifoStore(&descHandle, FIFO_STORE_CLASS_UNUSED_TYPE_MSG, param->inDataBytes, param->outData + param->hashInDataBytes);
/* Store output ctx data (IV for next pkt) */
if(param->outCtxData != NULL)
CmdInsertStore(&descHandle, STORE_CLASS_1_SRC_CTX, 0, param->outCtxDataBytes, param->outCtxData);
/* If Encrypt, generate digest last over whole encrypted pkt and header */
if (param->jobDirection == e_DCL_JOB_ENC)
{
/* Generate Hash */ /* TODO: Optimize. Dont write back to memory and load it back again. Is it possible? */
CmdInsertKey(&descHandle, KEY_CLASS_2_DST_REGISTER | KEY_IMM, param->hashKeyDataBytes, param->hashKeyData);
CmdInsertFifoLoad(&descHandle, FIFO_LOAD_CLASS_2_TYPE_MSG_L2, param->hashInDataBytes + param->inDataBytes, param->outData);
cmdFlags = ALG_OP_TYPE_CLASS_2 | ALG_OP_AAI_MDS_SHA_HMAC | ALG_OP_AS_INITFINAL;
EXIT_IF((param->authAlg != e_IPSEC_AUTHEN_ALG_HMAC_SHA1_96) &&
(param->authAlg != e_IPSEC_AUTHEN_ALG_HMAC_MD5_96));
switch(param->authAlg)
{
case e_IPSEC_AUTHEN_ALG_HMAC_SHA1_96:
cmdFlags = cmdFlags | ALG_OP_ID_SHA1;
break;
case e_IPSEC_AUTHEN_ALG_HMAC_MD5_96:
cmdFlags = cmdFlags | ALG_OP_ID_MD5;
break;
default:
/* We shouldn't end up here */
cmdFlags = 0;
break;
}
CmdInsertAlgOperation(&descHandle, cmdFlags);
CmdInsertStore(&descHandle, STORE_CLASS_2_SRC_CTX, 0, param->hashOutDataBytes, param->hashOutData);
}
CloseJobDesc(&descHandle, 1);
return descHandle.nextIndex;
}