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

📄 ctcomm.h

📁 RSA C++源代码DEMO,附加DESMD5等众多算法
💻 H
字号:
///*
// *  Common defination and Virtual Reader Class
// *
// *   writen by Alfred Meng 2000
// */
#ifndef     __CTCOMM_H
#define     __CTCOMM_H

#include <stdio.h> // for NULL
#include <string.h>

#ifndef _WINDEF_
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
#define LOBYTE(w)           ((BYTE)(w))
#define HIBYTE(w)           ((BYTE)(((WORD)(w) >> 8) & 0xFF))
#endif

#define BUF_SIZE 	    2048

#define IC_ICC     0        // can't modified
#define IC_PLUG0   1        // can't modified
#define IC_PLUG1   2        // can't modified
#define IC_PLUG2   3        // can't modified
#define IC_PLUG3   4        // can't modified
#define IC_PLUG4   5        // can't modified
#define IC_PLUG5   6        // can't modified

/* command type */
#define  CASE1	0x11    /* Not transmit and recieve data */
#define  CASE2	0x12    /* Only recieve data */
#define  CASE3	0x13	/* Only transmit data */
#define  CASE4	0x14    /* transmit and recieve data */

typedef enum { CASE4_Disable = 0, CASE4_Enable } TCASE4OPT;

class  TAPDU {
public:
    unsigned char    apdu[BUF_SIZE];
    int      len;
    void   * tag;
    unsigned long gap;

    TAPDU();
/* follow is the suggested method */
    TAPDU(unsigned char ucCLA, unsigned char ucINS, unsigned char ucP1, unsigned char ucP2, unsigned char ucP3);
    void CLA( unsigned char ucCLA );
    void INS( unsigned char ucINS );
    void P1( unsigned char  ucP1 );
    void P2( unsigned char  ucP2 );
    void P3( unsigned char  ucP3 );
    void DATA( unsigned char *data, unsigned char ucLc );
};

#define ISO7816_CLA     0x0
#define ISO7816_INS     0x1
#define ISO7816_P1      0x2
#define ISO7816_P2      0x3
#define ISO7816_P3      0x4
#define ISO7816_DATA    0x5

typedef struct {
    unsigned char    cla;
    unsigned char    ins;
    unsigned char    type;
} TICCMD;

#define  VAILD_CMD       0
#define  INVAILD_CMD    -1
#define  MAXICCMDNAME    32

typedef struct {
    int		id;
    char   *    name;
    TICCMD      apdu;
} TCommand;

typedef struct {
        char  sid;
        char  fid[2];
        int   offset; // ,size;
        char  type,am;
} TFILE;

/* define file type */
#define  FT_BINARY      0x01
#define  FT_LINFIX      0x02
#define  FT_CYCLIC      0x07
#define  FT_COMPUTE     0x17

/* parameter for SELECT */
#define  SELFID         0x00
#define  SELSID         0x02
#define  SELAID         0x04

typedef void (*TApduHookFun)(TAPDU *pApdu,char *pPC, short pUS );

class TVSCReader {

    short         count;
    short         lastc;
    TCommand   *  cset;
    TCASE4OPT     _case4_op_;
friend class TPCSC;
    TApduHookFun  __fHook;

public:

    TVSCReader();
    virtual ~TVSCReader(){};

    unsigned char SW1,SW2;
    unsigned char Resp[BUF_SIZE];
    unsigned char __iso_cla;
    short  	  RespLen,rc;
    TAPDU        __apdu;

    virtual int   openterm(short  port)  = 0;
    virtual int   closeterm() = 0;
    virtual int   opened() = 0;

    virtual int   opensam(int plug)  = 0;
    virtual int   selectICC(int icc,bool reqATR = true)  = 0;

    virtual int   hascard()  = 0;
    virtual int   RequestATR()  = 0;
    virtual int   ejectcard(bool beep = true)  = 0;

    virtual int   sendapdu(TAPDU *)  = 0;

    virtual char  TermType() const = 0;
    virtual char *GetError() const = 0;

// command set utility
    int   assign(TCommand *,int total);
    int   findbyID(int id);
    int	  findbyCI(unsigned char cla, unsigned char ins);
    char *findName(int id);
    void  iso_case4( TCASE4OPT op ){ _case4_op_ = op; }
    void  iso_CLA( unsigned char cla) { __iso_cla = cla; }

// utility
    int   checkresp(unsigned char asw1=0x90, unsigned char asw2=0x00);
    void  set_apdu_hook(TApduHookFun);

    /* file level */
    TFILE *fopen_bin( char sid );
    TFILE *fopen_rec( char sid );
    int    read_rec(TFILE *fp, char *buff,int recno );
    int    read_bin(TFILE *fp, char *buff,int size );
    int    seek(TFILE *fp, short offset_from_head ); // only for binary file
    int    write(TFILE *fp, char *buff,int size_recno );
    void   fclose(TFILE *fp);

    // advance level
    int   select(char *fid);
    int   verify(char *pin,int pl,char kid=0x01);
    int   execute(int cmd,unsigned char p1,unsigned char p2, \
                unsigned char lc=0,unsigned char *data=(unsigned char *)NULL,unsigned char le=0);
    int   magcommand(char *asccmd );
    int   batchprocess(char *fname, int &Lines ); // NOT Delete MF automaticly

    int   lastcmd() { return lastc; } /* return last command's order */
    TAPDU *lastAPDU() { return &__apdu; };
    void  lastAPDU( TAPDU &p) { memcpy(&p,&__apdu,sizeof(TAPDU)); };

// GD Only
    void   deleteMF();
    //void   creatEnd(char *id="\x3F\x00");

};

#endif

⌨️ 快捷键说明

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