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

📄 armtypes.h

📁 IDEA对称算法的软件实现
💻 H
字号:
/********************************************************************
  armtypes.h
  Author : JimmyFan
  Copyright (c) 2001 DATech.

  数据类型、命令码、错误码、数据结构等的定义。
********************************************************************/

#ifndef _ARMTYPES_H
#define _ARMTYPES_H

#include "control.h"
#include <stddef.h>
/********************************************************************
  Basic data type definition;
********************************************************************/
typedef  char        		ARM_CHAR;
typedef  unsigned char      ARM_UINT8;
typedef  short       		ARM_INT16;
typedef  unsigned short     ARM_UINT16;
typedef  long        		ARM_INT32;
typedef  unsigned long      ARM_UINT32;
typedef  ARM_UINT32       	ARM_RV;
typedef  ARM_UINT8			ARM_Byte;
typedef  size_t				ARM_Size;

//////////////////////////
ARM_UINT8	*EEPROM;
#define		MAX_EEPROM_SIZE		65536
/********************************************************************
  data type definition for hash;
********************************************************************/
#define MD2_BLOCKBYTES	16
#define MD2_BLOCKWORDS	4
#define MD2_ITERATIONS	18
#define MD2_HASHBYTES	16

typedef struct ARM_MD2_CTX 
{
	ARM_Byte csum[MD2_BLOCKBYTES];	/* Accumulated checksum */
	ARM_Byte X[3*MD2_BLOCKBYTES];	/* X array which gets crunched */
	ARM_Byte data[MD2_BLOCKBYTES];	/* accumulate data up to 1 block */
	ARM_UINT32 bytesLo;
} ARM_MD2_CTX;

#define MD5_BLOCKBYTES	64
#define MD5_BLOCKWORDS	16

#define MD5_HASHBYTES	16
#define MD5_HASHWORDS	4

typedef struct MD5Context {
	ARM_UINT32 key[MD5_BLOCKWORDS];
	ARM_UINT32 iv[MD5_HASHWORDS];
	ARM_UINT32 bytesLo, bytesHi;
} ARM_MD5_CTX;

/********************************************************************
  data type definition for RSA;
********************************************************************/
// RSA key lengths.
#define ARM_MAX_RSA_MODULUS_BITS 2048
//#define ARM_MAX_RSA_MODULUS_BITS 1024
#define ARM_MAX_RSA_MODULUS_LEN ((ARM_MAX_RSA_MODULUS_BITS + 7) / 8)
#define ARM_MAX_RSA_PRIME_BITS ((ARM_MAX_RSA_MODULUS_BITS + 1) / 2)
#define ARM_MAX_RSA_PRIME_LEN ((ARM_MAX_RSA_PRIME_BITS + 7) / 8)


// RSA public and private key.

typedef struct {
	ARM_UINT32  bits;        // length in bits of modulus 
	ARM_UINT8   modulus[ARM_MAX_RSA_MODULUS_LEN];  // modulus 
	ARM_UINT8   publicExponent[ARM_MAX_RSA_MODULUS_LEN];  // public exponent 
} ARM_RSA_PUBLIC_KEY;

/***************************************************************
typedef struct rsa_pub_key{
    unsigned int      bits;    
	unsigned char        modulus[128]; 
	unsigned char        publicExponent [128];  
} ARM_RSA_PUBLIC_KEY;
****************************************************************/

typedef struct {
	ARM_UINT32  bits;    // length in bits of modulus 
	ARM_UINT8   modulus[ARM_MAX_RSA_MODULUS_LEN];  // modulus 
	ARM_UINT8   publicExponent[ARM_MAX_RSA_MODULUS_LEN];  // public exponent 
	ARM_UINT8   privateExponent[ARM_MAX_RSA_MODULUS_LEN];   // private exponent
	ARM_UINT8	prime[2][ARM_MAX_RSA_PRIME_LEN];               
	ARM_UINT8	exponent[2][ARM_MAX_RSA_PRIME_LEN];               
	ARM_UINT8	coefficient [ARM_MAX_RSA_PRIME_LEN];               
//	ARM_UINT8   p[ARM_MAX_RSA_PRIME_LEN];    // p
//	ARM_UINT8   q[ARM_MAX_RSA_PRIME_LEN];    // q
//	ARM_UINT8   dP[ARM_MAX_RSA_PRIME_LEN];    // dP
//	ARM_UINT8   dQ[ARM_MAX_RSA_PRIME_LEN];    // dQ
//	ARM_UINT8   qInv[ARM_MAX_RSA_PRIME_LEN];   // CRT coefficient
}ARM_RSA_PRIVATE_KEY;






//typedef struct rsa_pri_key{
//unsigned int    bits;    /* length in bits of modulus */
//unsigned char     modulus[128]; 
                   /* modulus  ----- n */
//unsigned char     publicExponent[128]; 
                   /* public exponent  ----- e */
//unsigned char     privateExponent[128];          
                   /* private exponent  ----- d */
//unsigned char     prime[2][64];               
//unsigned char     exponent[2][64];               
//unsigned char     coefficient [64];               
//} ARM_RSA_PRIVATE_KEY;

/********************************************************************
  data type definition for Des;
********************************************************************/
#define EN0	0
#define DE1	1

#define DES_KEYBYTES	128
#define DES_KEYLONGS	32
#define DES_BLOCKLEN	8

typedef struct {
	unsigned long	ek[DES_KEYLONGS];
	int	ekLen;
	unsigned long	dk[DES_KEYLONGS];
	int	dkLen;
	ARM_UINT8	CbcCtx[DES_BLOCKLEN];
	int	IsFirstBlock;
} ARM_DES_CTX;

/********************************************************************
  data type definition for Idea;
********************************************************************/
#define IDEAROUNDS 8
#define IDEAKEYLEN (6*IDEAROUNDS+4)
#define IDEAKEYBYTES	2*IDEAKEYLEN
#define IDEABLOCKBYTES	8

typedef struct
        {
	ARM_UINT16 ek[IDEAKEYLEN];
	ARM_UINT16 dk[IDEAKEYLEN];
	ARM_UINT32	ekBytes;
	ARM_UINT32	dkBytes;
	ARM_UINT8	CbcCtx[IDEABLOCKBYTES];
	int	IsFirstBlock;
}ARM_IDEA_CTX;

/********************************************************************
 * Limits
 *********************************************************************/
#define CHAR_BIT      8         /* number of bits in a char */
#define UCHAR_MAX     0xff      /* maximum unsigned char value */

/********************************************************************
  命令码定义
********************************************************************/

#define  CMD_GET_VERSION                0X0001
#define  CMD_SET_HARD_CFG               0X0002
#define  CMD_GET_HARD_CFG               0X0003

#define  CMD_GET_SECTRL_INFO            0X0100
#define  CMD_SET_SECTRL_POLICY          0X0101
#define  CMD_SET_SECTRL_INI_FLAG        0X0102
#define  CMD_LOCK_SECTRL_INI_FLAG       0X0103
#define  CMD_INI_MGR_PASSWD             0X0104
#define  CMD_RD_MGR_NO                  0X0103
#define  CMD_MGR_LOGIN                  0X0105
#define  CMD_MGR_LOGOUT                 0X0106
#define  CMD_CHG_MGR_PASSWD             0X0104
#define  CMD_ADD_ONE_MGR                0X0104
#define  CMD_DEL_ONE_MGR                0X0104
#define  CMD_CHG_OPER_PASSWD            0X0104
#define  CMD_ADD_ONE_OPER               0X0104
#define  CMD_RD_OPER_NO                 0X0103
#define  CMD_OPER_LOGIN                 0X0105
#define  CMD_OPER_LOGOUT                0X0106

#define  CMD_GEN_RANDNUM				0X0201
#define	 CMD_GEN_HASHMD2				0X0202
#define  CMD_GEN_HASHMD5				0X0203
#define	 CMD_RSA_BLOCK					0X0204
#define  CMD_DES_BLOCK					0X0207
#define  CMD_IDEA_BLOCK					0X0208
#define	 CMD_KEY_RW				    0X0209	
/********************************************************************
  Error code definition;
********************************************************************/

#define  ARMERR_SUCCESS                 0x0000
#define  ARMERR_GENERIC_ERROR			0xffff
//通信模块错误码定义:
//    0x0001 到 0x001F
#define  ARMERR_HOST_TIMEOUT            0x0001
#define  ARMERR_MPU_TIMEOUT             0x0002
//并行EEPROM读写模块错误码定义:
//    0x0020 到 0x003F
#define  ARMERR_EEPROM_ADDRESS          0x0020
#define  ARMERR_EEPROM_LENGTH           0x0021
#define  ARMERR_EEPROM_READ_ERROR	0x0022
//IC卡读写模块错误码定义:
//    0x0040 到 0x005F
#define  ARMERR_IC_ADDRESS              0x0040
#define  ARMERR_IC_LENGTH               0x0041
#define  ARMERR_IC_PIN                  0x0042
#define  ARMERR_IC_TYPE                 0x0043
//内存分配错误码定义:
//    0x0060 到 0x006F
#define  ARMERR_MEM_ALLOC				0x0060
//随机数错误码定义:
//    0x0070 到 0x007F
#define  ARMERR_PARAM_LEN				0x0070
#define  ARMERR_PARAM					0x0071

//安控模块错误码定义:
//    0x0080 到 0x008F
#define  ARMERR_CTRL_MGRLOGIN				0x0080
#define  ARMERR_CTRL_MGRADD				0x0081
#define  ARMERR_CTRL_MGRDEL				0x0082
#define  ARMERR_CTRL_OPER_LOGIN				0x0085
#define  ARMERR_CTRL_OPER_RIGHT				0x0086
#define  ARMERR_CTRL_MGR_RIGHT				0x0087
/********************************************************************
  数据结构定义
********************************************************************/

//Host to card command
typedef struct
{
	ARM_UINT32 	nLength;						//Data length
	ARM_UINT32 	nInstruction;					//命令码
	ARM_CHAR	pParameter[ARM_MAX_PARAM_LEN];	//命令参数
} CardCommand;

//Card to host result
typedef struct
{
	ARM_UINT32 	nLength;						//Data length
	ARM_UINT32 	nReturnCode;					//返回码
	ARM_CHAR	pResult[ARM_MAX_PARAM_LEN];		//返回数据
} CardResult;

//For command-function table
typedef struct
{
	ARM_UINT32 	nInstruction;					//Instruction
	ARM_RV		(*pfnCommandFunction)();		//Corresponding fuction
} CommandFunction;

#endif //_ARMTYPES_H

⌨️ 快捷键说明

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