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

📄 iccapp.h

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 H
📖 第 1 页 / 共 3 页
字号:
/************************
 *    iccapp.h          *
 * Designe by 刘俐训    *
 * Ic Card application  *
 ************************/
#ifndef _SAMAPP_H_
#define _SAMAPP_H_


/***************************************************** 
 * file type:   专用文件df:    38                   *
 *              二进制文件:     28                   *
 *              定长记录文件:   2A                   *
 *              循环文件:       2E                   *
 *              普通钱包文件:   2F                   *
 *              电子存折文件:   2F                   *
 *              变长记录文件:   2C                   *
 *              密钥文件:       3F                   *
 *                                                   *
 * b7-b6:       00: 无线路保护, 此时: byte7 = 0xff   *
 *              10: MAC                              *
 *              11: DES&MAC                          *
 *****************************************************/

/*****************************************************
 * file_id:     文件标识符.                          *
 *              MF:     3F00                         *
 *              KEY:    0000                         *
 *              电子存折文件:   0001                 *
 *              电子钱包文件:   0002                 *
 *****************************************************/
/********************************************************************************
 * byte7 for EF: |   b7    |  b6  |  b5  |  b4  |  b3  |  b2  |   b1  |  b0  |  *
 *              |是否线路保护|  1 |  1   |   1  | 读密钥标识符| 写密钥标识符 |  *
 *              -------------------------------------------------------------   *
 *              b7: 1  不支持线路保护读,b3-b2 = 11;  0: 必须线路保护读.         *
 *              b3-b2: 11: 用标识00的维护密钥.                                  *
 *                     10: 用标识01的维护密钥.                                  *
 *                     01: 用标识02的维护密钥.                                  *
 *                     00: 用标识03的维护密钥.                                  *
 *              b1-b0: 类似于b3b2.                                              *
 ********************************************************************************/
typedef struct
{
    unsigned int    id;                     // FILE ID = 0xp1p2
    unsigned char   type;                   // byte 1
    unsigned int    size;                   // byte 2, 3
    unsigned char   c_r_purview;            // DF下建立文件的权限。
                                            // ef(二进制文件、记录文件、循环文件)读权限。
                                            // 普通钱包文件扣款权限
                                            // 电子钱包文件使用权限
                                            // 密钥文件所在的df文件的短标示符
                                            // byte 4
                                            
    unsigned char   e_w_purview;            // DF下建立文件的权限。
                                            // ef的写权限
                                            // 普通钱包文件的存款权限
                                            // TAC密钥表示符
                                            // 密钥文件的增加权限
                                            // byte 5
                                            
    unsigned char   reserved1;              // 0xff
                                            // byte 6
                                            
    unsigned char   reserved2;              // DF: reserved, 0xff
                                            // EF: 保护信息, 信息文件的短标识符, the last byte.
                                            // byte 7
    
    unsigned char   reserved3;              // 0xff
    
    unsigned char   name[16];               // DF file name(5-16 bytes)
    unsigned char   name_len;               // length of name int bytes
} ICC_FILE;                                 
//============================================================================//

//================================================================================//
/*******************************************************************************
 * 密钥类型:30: DES加密; 31:DES解密;32:DESMAC;34:内部密钥;36:维护密钥 *
 *           39:主控/外部认证;37:口令解锁;38:口令重装;3C:修改透支限额   *
 *           3D:圈提;3E:消费;3A:口令;3B:解锁口令;3X:连接MF下的密钥    *
 *******************************************************************************/
#define DES_EN         0x30     // DES加密
#define DES_DE         0x31     // DES解密
#define DES_MAC        0x32     // DESMAC
#define INTERNAL       0x34     // 内部密钥
#define MAINTENANCE    0x36     // 维护密钥
#define MCTRL          0x39     // 主控/外部认证
#define EXTERNAL       0x39     // 
#define PIN_UB         0x37     // 口令解锁
#define PIN_RELOAD     0x38     // 口令重装
#define PER_PIN        0x3a     // 口令


#define DES_ENCRYPT 0x40
#define PROTECT     0xc0
#define NORMAL      0x00


//密钥用途
#define MCKey	0 //主控密钥
#define WHKey	1 //维护密钥
#define XFKey	2 //消费密钥
#define JSKey	3 //PIN解锁密钥
#define CZKey	4 //重装PIN密钥
#define YYKey	5 //用户卡应用维护密钥
#define MACKey	6 //MAC密钥
#define ENKey	7 //加密密钥
#define MEKey	8 //MAC加密密钥

//密钥算法标识
#define TDES	0 //3DES
#define SDES	1 //DES

typedef struct
{
    unsigned char type;                 // 密钥类型
    unsigned char use_purview;          // 使用权限
    unsigned char update_purview;       // 更改权限
    unsigned char edition_state;        // 密钥版本、后续状态
    unsigned char cid_cnt;              // 算法标识/错误计数器
    unsigned char key[16];              // 密钥值
    unsigned char keylen;               // 密钥长度,8或16
    unsigned char id;                   // 密钥标识
}KEY;

// return value of funcitons
#define SUCCESS     0x9000              /* 成功 */
#define MAY_ERROR   0x6281              /* 回送数据可能有错 */
#define INV_FILE    0x6283              /* 选择文件无效, 文件或密钥校验错误 */
#define STAT_DEAD   0x6400              /* 状态标志没有变化 */
#define WR_FAILE    0x6581              /* 写EEPROM 失败 */
#define ERR_LEN     0x6700              /* 错误的长度 */
#define REFUSE_CLA  0x6900              /* CLA与线路保护要求不匹配 */
#define INV_STAT    0x6901              /* 无效状态 */
#define BAD_CMD     0x6981              /* 命令与文件结构不相容 */
#define NOT_SAFE    0x6982              /* 不满足安全状态 */
#define KEY_LOCKED  0x6983              /* 密钥被锁死 */
#define INV_CON     0x6985              /* 使用条件不满足 */
#define NO_SAFE_UD  0x6987              /* 没有安全报文 */
#define ERR_SAFE_UD 0x6988              /* 安全报文数据不正确 */
#define ERR_PARA    0x6A80              /* 数据与参数错误 */
#define NO_MF       0x6A81              /* 没有MF或命令不支持 */
#define NO_FILE     0x6A82              /* 文件未找到 */
#define NO_REC      0x6A83              /* 记录未找到 */
#define FILE_FULL   0x6A84              /* 文件无足够空间 */
#define ERR_P1P2    0x6A86              /* 参数P1P2错误 */
#define FILE_EXIST  0x6a86              /* 文件已存在 */
#define OFFSET_ERR  0x6B00              /* 在达到Le/Lc字节之前文件结束,偏移量错误 */
#define INV_CLA     0x6E00              /* 无效CLA */
#define INV_DATA    0x6F00              /* 数据无效 */
#define MAC_ERR     0x9302              /* MAC错误 */ 
#define APP_LOCK    0x9303              /* 应用已锁定 */
#define NO_MONEY    0x9401              /* 金额不足 */
#define NO_KEY      0x9403              /* 密钥未找到 */
#define UNUSE_MAC   0x9406              /* 所需MAC不可用 */

#ifndef ERROR
#define ERROR       -1                  /* 一般错误 */
#endif
#ifndef TIMEOUT
#define TIMEOUT     -1                  /* 超时, SAM无响应 */
#endif
#ifndef CHECK_ERR
#define CHECK_ERR   -2                  /* 校验出错 */
#endif
#ifndef COMM_ERR
#define COMM_ERR    -3                  /* 通讯错误 */
#endif


/*################################## 辅助命令 ##################################*/

/*****************************************
 * 如果执行后面的命令后,                *
 * 返回数据长度未知,                    *
 * 可用该函数取回返回数据的长度。        *
 * 例如:ICC_sam_des_mac(...);           *
 *       len = ICC_get_rsp_len();        *
 * 则len即ICC_sam_des_mac()返回的数据长度*
 *****************************************/

/*################################## 发卡命令 ##################################*/

//int ICC_creat_file(ICC_FILE *file);
//int ICC_erase_df(void);
//int ICC_set_protocol();
//int ICC_write_key(KEY *key, int flag);
//write key
//#define LOAD    0
//#define UPDATE  1
/*############################## 针对SAM卡的命令 ###############################*/

/*****************************************
 * 计算MAC1                              *
 * 用户卡随机数,4字节                   *
 * 用户卡交易序号,2字节                 *
 * 交易金额,4字节                       *
 * 交易类型标识,1字节                   *
 * 交易日期(终端),4字节               *
 * 交易时间(终端),3字节               *
 * 消费密钥版本号,1字节                 *
 * 消费密钥算法标识,1字节               *
 * 用户卡应用序列号,8字节               *
 * 成员银行标识,8字节                   *
 * 试点城市标识,8字节                   *

⌨️ 快捷键说明

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