📄 sec2_algo.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 + -