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