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

📄 at88sc153.h

📁 此代码主要用于并口仿真IIC口用
💻 H
字号:

// Copyright (C) Elva, 1998

//#include "common_dll.h"
#define NB_COMMAND 17

#define TWC			10
#define TNbParam	unsigned char
#define SParameter  unsigned char

#define CONFIG_ZONE0	0x00
#define CONFIG_ZONE1	0x01
#define CONFIG_ZONE2	0x02
#define CONFIG_ZONE		0x03

#define CONFIG_SADDR	0x19


#define EEPROM_READ(zone)      (0xb0 | ((zone & 0x03) << 2) | 0x01)
#define EEPROM_WRITE(zone)     (0xb0 | ((zone & 0x03) << 2))

typedef enum
{
	NACK_COMMAND = 1,
	NACK_ADDRESS,
	NACK_DATA,
	NACK_ADDRESS_FUSES,
	NACK_ADDRESS_PASSWORD,
	NACK_PASSWORD,
	NACK_HOST,
	NACK_CHALLENGE,
	BAD_AUTHENTICATION_CARD,
	BAD_AUTHENTICATION_READER,
	BAD_PASSWORD,
	BAD_ADDRESS,
	BAD_WRITE,
	BAD_INDEX,
	BAD_ZONE,
	BAD_NUMBER_READ,
	NO_CARD,
}ERRNO;

typedef struct {
	char Name[20];
	unsigned int NbCommand;
	TNbParam NbParam[NB_COMMAND];
	SParameter **ParamIn[NB_COMMAND];
	SParameter **ParamOut[NB_COMMAND];
	char NameF[NB_COMMAND][20];
	char HelpF[NB_COMMAND][255];
} SInit;

typedef unsigned char BYTE;

class CGpa 
{
  private :
	// state var	
	unsigned char R[7];
	unsigned char S[7];
	unsigned char T[5];

	// key var
	unsigned char Crypto[8];	// cryptogram
	unsigned char GC[8];
	unsigned char Q0[8];
	unsigned char Q1[8];
	unsigned char Q2[8];

	void calculState(unsigned char Ri, unsigned char Ti, unsigned char Si);
	unsigned char calcul(void);

  public :

	CGpa();
	~CGpa();
	unsigned char calcul(unsigned char nbre);
	void calculKey(unsigned char key);
	void SetInit(unsigned char *crypto,unsigned char *graine,unsigned char *host);
	void Authenticate(unsigned char *q1,unsigned char *q2);
};

typedef BOOL (*DLL_INITN)(int);
typedef void (*DLL_VOID)(void);
typedef unsigned char (*DLL_PC)(void);
typedef BOOL (*DLL_COMMANDC)(BYTE,int);
typedef BOOL (*DLL_SENDBYTE)(BYTE );
typedef unsigned char (*DLL_READBYTE)(void);
typedef void (*DLL_RESET)(int,unsigned char *);

class SC153
{
public:
	~SC153();
	SC153();
	int RazCard(int number,BYTE *answer);
	int RemoveCard(void);
	int InitPRG(BYTE *secret,BYTE *crypto,BYTE *host);
	int Authenticate(BYTE chip,BYTE *q0,BYTE *q1,BYTE *q2);
	int PresentPWD(BYTE chip,BYTE num,BYTE dir,BYTE *pwd);
	int RunPRG(BYTE *ci1,BYTE *ci2);
	int ResetCard(BYTE *answer);

	int ReadEEPROM(BYTE chip,BYTE zone,BYTE add,BYTE *data,BYTE number);
	int WriteEEPROM(BYTE chip,BYTE zone,BYTE add,BYTE *data,BYTE number);
	int ReadFuse(BYTE chip, BYTE *fuse);
	int WriteFuse(BYTE chip, BYTE fuse);
	int VerifyPWD(BYTE chip, BYTE num,BYTE *pwd);
	int InitAuthentication(BYTE chip,BYTE *host);
	int VerifyAuthentication(BYTE chip, BYTE *challenge);
	int WriteLock(BYTE chip,BYTE zone,BYTE address,BYTE data);
	int WriteCheck(BYTE chip,BYTE zone,BYTE add,BYTE *data,BYTE number, BYTE *q0,BYTE *q1,BYTE *q2,BYTE *sc);
	int SimulCheck(BYTE nb, BYTE dir,BYTE *data,BYTE *sc);

	SInit Init;

protected:

	CGpa GPA;
	BOOL CardOk;

	HINSTANCE gLibDLL;
	DLL_COMMANDC gLibCommand;
	DLL_SENDBYTE gLibSendByte;
	DLL_READBYTE gLibReadByte;
	DLL_INITN	gLibInit;
	DLL_VOID	gLibPowOn;
	DLL_VOID	gLibPowOff;
	DLL_VOID	gLibStop;
	DLL_VOID	gLibAck;
	DLL_VOID	gLibNack;
	DLL_PC		gLibPC;
	DLL_RESET	gLibReset;
	
	int ErrNo;

	void IsCardPresent(void);
};

⌨️ 快捷键说明

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