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

📄 sec2_algo.h

📁 freescale ppc sec2加解密单元驱动
💻 H
字号:
/************************************************************************
* 版权所有 (C)2005, 深圳市中兴通讯股份有限公司。
* 
* 文件名称: mpc190_algo.h
* 文件标识: 见配置管理计划书
* 内容摘要: MPC190 提供给外部的接口文件
* 其它说明:
* 当前版本: V1.0
* 作           者: chentao135499
* 完成日期: 2005年09月11日
* 
* 修改记录1:
*    修改日期:
*    版 本 号:
*    修 改 人:
*    修改内容: 
* 修改记录2:…
************************************************************************/
#ifndef _SEC2_ALGO_H
#define _SEC2_ALGO_H

#ifdef __cplusplus
extern "C" {
#endif
#include "ros_ex.h"
#include "sec2.h"
#include "protocol/security/common/include/algo_msg.h"
/* 模块宏定义 */
#define DRV_SLOT_NUM  8
#define SEC2_PKEU_MAX_BYTE  256 /* sec2 PKEU 可处理报文上限 */

/* HASH 算法产生的消息摘要长度*/
#define DRV_IPSEC_MD5_DIG_LEN   16      /* MD5 为16byte */
#define DRV_IPSEC_SHA_DIG_LEN   20      /* SHA 为20byte */
/* #define DRV_IPSEC_SHA256_DIG_LEN  32 */   /* SHA256为32byte */ 

#define PCI_MAX_BUSSES 8
#define DRV_ALIGN_8BYTES(ptr)   ((UINT) (ptr+7) & 0xFFFFFFF8)   /* 地址以8byte 为边界*/
#define DRV_MULT_8BYTES(len)  ((UINT) (len+7) & 0xFFFFFFF8)   /* 长度转换为8byte 的倍数 */


/*sec2 上下文结构*/
typedef struct 
{
	void  *msg;   /* 平台传入的消息*/    

	/* 用于内存申请 */
	UINT8  *dpdReqMem;   /* 算法描述符,用于内存申请 */
	UINT8  *inParaMem;  /* 算法输入参数,用于内存申请 */
    UINT8  *outIvData;  /*  新生成的初始化向量,需要8byte 对齐*/  	

}DRV_SEC2_CONTEXT;


/**************** sec2 提供的字节判断函数  ****************/
BOOLEAN ChkDesIvLen(unsigned long len);
BOOLEAN ChkDesKeyLen(unsigned long len);
BOOLEAN ChkDesStaticDataLen(unsigned long len);
BOOLEAN ChkDesDataLen(unsigned long len);
BOOLEAN ChkDesCtxLen(unsigned long len);
BOOLEAN ChkArcKeyLen(unsigned long len);
BOOLEAN ChkArcCtxLen(unsigned long len);
BOOLEAN ChkOptionalArcCtxLen(unsigned long len);
BOOLEAN ChkEccLen(unsigned long len);
BOOLEAN FitInBlock(unsigned long len);

#if /*INSTALL_DBG_VERSION*/1
#define  SEC2_GETBUF(size)      Ros_GetBuf(size,10)
#define  SEC2_FREEBUF(pBuf)     Ros_FreeBuf(pBuf)
#else
#define  SEC2_GETBUF(size)      malloc(size)
#define  SEC2_FREEBUF(pBuf)     free(pBuf)
#endif

#if DRIVER_IPSEC_DBG   
#define  DRV_IPSEC_DBG(STRING)  printf (STRING)
#else
#define  DRV_IPSEC_DBG(STRING)
#endif


#ifdef __cplusplus
}
#endif

#endif  

/************************************************************************/
typedef enum{
	DRV_IPSEC_RNG_NUM=1,	DRV_IPSEC_DH_KEY=2,	DRV_IPSEC_RSA_KEY=3,	DRV_IPSEC_HASH_MD5_DIG=4,	DRV_IPSEC_HASH_SHA_DIG=5,	/*DRV_IPSEC_HASH_SHA256_DIG=6,*/ /*20060920*/
	DRV_IPSEC_HMAC_MD5_AUTH=6,
	DRV_IPSEC_HMAC_SHA_AUTH=7,
	/*DRV_IPSEC_HMAC_SHA256_AUTH=9,*/ /*20060920*/
	DRV_IPSEC_DES_ENCRYPT=8,
	DRV_IPSEC_DES_DECRYPT=9,
	DRV_IPSEC_3DES_ENCRYPT=10,
	DRV_IPSEC_3DES_DECRYPT=11,
	DRV_IPSEC_RSA_CRYPT=12,
	DRV_IPSEC_DES_HMAC_MD5_ENCRYPT=13,
	DRV_IPSEC_DES_HMAC_SHA_ENCRYPT=14,
    /*DRV_IPSEC_DES_HMAC_SHA256_ENCRYPT=17,*/ /*20060920*/
    
	DRV_IPSEC_3DES_HMAC_MD5_ENCRYPT=15,
	DRV_IPSEC_3DES_HMAC_SHA_ENCRYPT=16,
    /*DRV_IPSEC_3DES_HMAC_SHA256_ENCRYPT=20,*/ /*20060920 by jn*/
    
	DRV_IPSEC_DES_HMAC_MD5_DECRYPT=17,
	DRV_IPSEC_DES_HMAC_SHA_DECRYPT=18,
	/*DRV_IPSEC_DES_HMAC_SHA256_DECRYPT=23,*/ /*20060920*/
		DRV_IPSEC_3DES_HMAC_MD5_DECRYPT=19,
	DRV_IPSEC_3DES_HMAC_SHA_DECRYPT=20,
	/*DRV_IPSEC_3DES_HMAC_SHA256_DECRYPT=26,*/ /*20060920*/
		DRV_IPSEC_HASH_MD5_RSA_SIG=21,
	DRV_IPSEC_HASH_SHA_RSA_SIG=22,
    DRV_IPSEC_AES_HMAC_MD5_ENCRYPT=23,
    DRV_IPSEC_AES_HMAC_SHA_ENCRYPT=24,
    /*DRV_IPSEC_AES_HMAC_SHA256_ENCRYPT=31,*/ /*20060920*/
        	DRV_IPSEC_AES_HMAC_MD5_DECRYPT=25,
    DRV_IPSEC_AES_HMAC_SHA_DECRYPT=26,
    /*DRV_IPSEC_AES_HMAC_SHA256_DECRYPT=34,*/ /*20060920*/
	DRV_IPSEC_AES_ENCRYPT=27,
	DRV_IPSEC_AES_DECRYPT=28,
    DRV_IPSEC_AES_CTR_CRYPT = 29,
	DRV_IPSEC_AES_CCM_ENCRYPT=30,
	DRV_IPSEC_AES_CCM_DECRYPT=31,
    DRV_IPSEC_ALGO_LAST
}DRV_IPSEC_ALGO_TYPE; 

/*驱动提供给平台的参数结构*/
/*IPSEC 协议类型*/
typedef enum
{
    DRV_IPSEC_PROT_AH   = 1,
    DRV_IPSEC_PROT_ESP  = 2,
    DRV_IPSEC_PROT_IKE   = 3,
    DRV_IPSEC_PROT_LAST
}DRV_IPSEC_PROT_TYPE;



/*幂运算结构A^E mod N*/
typedef struct 
{
    UINT8    *aData;           /* 底数A */
    UINT16  aLen;           /* 底数A的字节长度 */
    UINT8    *expData;           /* 指数E*/
    UINT16  expLen;           /* 指数E的字节长度 */
    UINT8    *modData;           /* 模数N*/
    UINT16  modLen;           /* 模数N的字节长度 */
    UINT8    *outData;          /* 输出缓冲区 */
    UINT16  outLen;           /* 输出缓冲区长度 */
}DRV_MPC190_EXP_MOD;

extern int drv_sec2_rng_num(DRV_IPSEC_ALGO_TYPE algoType, VOID *arg_in);
extern int drv_sec2_des_crypt(DRV_IPSEC_ALGO_TYPE algoType,VOID *arg_in);
extern int drv_sec2_tdes_crypt(DRV_IPSEC_ALGO_TYPE algoType,VOID *arg_in);
extern int drv_sec2_Aes_crypt(DRV_IPSEC_ALGO_TYPE algoType,VOID *arg_in);
extern int drv_sec2_hash_dig(DRV_IPSEC_ALGO_TYPE algoType, VOID *arg_in);
extern int drv_sec2_hmac_auth(DRV_IPSEC_ALGO_TYPE algoType,VOID *arg_in);
extern int drv_sec2_des_hmac_crypt(DRV_IPSEC_ALGO_TYPE algoType, VOID *arg_in);
extern int drv_sec2_aes_hmac_crypt(DRV_IPSEC_ALGO_TYPE algoType, VOID *arg_in);
extern int drv_sec2_rsa_sig(DRV_IPSEC_ALGO_TYPE algoType,VOID *arg_in);
extern int drv_sec2_rsa_ss_crypt(DRV_IPSEC_ALGO_TYPE algoType, algo_msg_rsa_t *sig, VOID *msg);
extern int drv_sec2_Aes_Ccm_crypt(DRV_IPSEC_ALGO_TYPE algoType, algo_msg_crypt_t *crypt, algo_msg_hmac_t* auth,VOID *msg);
extern int drv_sec2_Aes_ctr_crypt(DRV_IPSEC_ALGO_TYPE algoType,VOID *arg_in);
extern int drv_sec2_dh_key(DRV_IPSEC_ALGO_TYPE algoType,VOID *arg_in);

⌨️ 快捷键说明

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