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

📄 iccapp.h

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 H
📖 第 1 页 / 共 3 页
字号:
 * ED_or_EP: 电子钱包或存折,01-ED, 02-EP ********
 * transinfo: 交易信息                           *
 *(密钥索引1字节+交易金额4字节+终端机编号6字节)*
 * outbuf:  输出如下:                           *
 * 余额*4 + 交易序号*2 + 密钥版本*1 + 算法标识*1 *
 * + 伪随机数*4 + MAC1*4                         *
 *************************************************/
int ICC_init_for_load(unsigned char ED_or_EP, char *transinfo, unsigned char *outbuf);

/*****************************************
 * Initialize for purchase(初始化消费)   *
 * CLA: 80, INS: 50                      *
 * Secret and protect mode: NO           *
 * Suport: PBOC                          *
 * ED_EP:   钱包或存折                   *
 * transinfo: 交易信息                   *
 * 密钥索引*1 + 交易金额*4 + 终端机编号*6*
 * outbuf: 输出数据                      *
 * 旧余额*4 + 交易序号*2 + 透支限额*3    *
 * + 密钥版本*1 + 密钥算法*1 + 伪随机数*4*
 *****************************************/
int ICC_init_for_purchase(unsigned char ED_EP, unsigned char *transinfo, char *outbuf);

/*****************************************
 * Initialize for cash withdraw(初始化取现) *
 * CLA: 80, INS: 50 ,P1=02  ,P2=01       *
 * Secret and protect mode: NO           *
 * Suport: PBOC                          *
 * 参数1:交易信息(密钥索引1字节+交易金额4字节+终端机编号6字节)*
 * 参数2:输出指针                        *
 *****************************************/
int ICC_init_for_cash(unsigned char *transinfo,unsigned char *outpuf);

/*****************************************
 * Credit for load                       *
 * CLA: 80, INS: 52                      *
 * Secret and protect mode: NO           *
 * Suport: PBOC                          *
 * inbuf: 交易日期*4 + 交易时间*2 + MAC2*4 *
 * outbuf: TAC * 4                         *
 *******************************************/
int ICC_credit_for_load(char *inbuf, char *outbuf);

/*****************************************
 * Case withdraw                         *
 * CLA: 80, INS: 54                      *
 * Secret and protect mode: NO           *
 * Suport: PBOC                          *
 * transinfo: 交易信息:交易序号*4       *
 * 交易日期*4 + 交易时间*3 + MAC1*4      *
 * outbuf: 输出,TAC*4 + MAC*4           *
 *****************************************/
int ICC_case_withdraw(char *transinfo, char *outbuf);

/*****************************************
 * Case withdraw                         *
 * CLA: 80, INS: 54                      *
 * Secret and protect mode: NO           *
 * Suport: PBOC                          *
 * transinfo: 交易信息:交易序号*4      *
 * 交易日期*4 + 交易时间*3 + MAC1*4      *
 * outbuf: 输出,TAC*4 + MAC*4           *
 *****************************************/
int ICC_debit_for_purchase(char *transinfo, char *outbuf);

/*****************************************
 * update overdraw limit (修改透支金额)*
 * CLA: 80, INS: 58                      *
 * Secret and protect mode: NO           *
 * Suport: PBOC                          *
 * 参数1:交易信息:透支限额(3字节)+日期(4字节)+时间(3字节)+MAC2*
 * 参数1:输出交易TAC 码                 *
 *****************************************/
int ICC_update_overdraw_limit(unsigned char *transinfo,unsigned char *TAC);

/*****************************************
 * Get Transaction Proof(取交易认证码) *
 * CLA: 80, INS: 5a                      *
 * Secret and protect mode: NO           *
 * Suport: TimeCOS /PBOC                 *
 *参数1:交易标识;参数2:联机/脱机交易序号(2字节);参数3:输出交易认证码 *
 *****************************************/
int ICC_get_transaction_proof(unsigned char trans_flag,unsigned char *trans_sn,unsigned char *MAC_TAC );

/*****************************************
 * Get balance                           *
 * CLA: 80, INS: 5c                      *
 * Secret and protect mode: NO           *
 * Suport: PBOC                          *
 * ed_ep: 01-ed(电子钱包), 02-ep(存折)*
 * balance: 余额                         *
 *****************************************/
int ICC_get_balance(char ed_ep, char *balance);

/*################################ 通用命令 #################################*/

/* 取回响应数据*/
/*****************************************
 * Get response from card                *
 * CLA: 00, INS: C0                      *
 * Secret and protect mode: NO           *
 * Suport: ISO/PBOC                      *
 * len:     期望得到的长度               *
 * buf:     输出,读到的内容             *
 *****************************************/
int ICC_get_response(unsigned char len, char *buf);

/* 选择文件                     *
 * flag: 定义如下,选择的方法   */
/********************************************************
 * flag: 0:通过表示符选择,1:通过文件名选择第一个     *
 *       2:通过文件名选择下一个                        *
 * filename_id: 文件名/标识                             *
 * len:         文件名称的长度                          *
 * fci:         文件控制信息(要提供必需的空间)        **************************
 * 6f 文件控制信息模板 84 DF名称(长度+名称)A5 文件控制信息专用摸板(长度+数据)*
 * (88 目录基本文件的短文标识) | (9F0C 发卡方自定数据的文件控制信息)         *
 *********************************************************************************/
int ICC_select_file(char *filename_id, unsigned char len, unsigned char flag, char *fci);
/* the difination below is for parameter flag */
#define BYID        0   // 通过文件标识
#define BYNAMEFIRST 1   // 通过名称选择第一个DF
#define BYNAMENEXT  2   // 通过名称选择下一个DF

/* 获取命令后的数据 */
int ICC_get_cmd_data(unsigned char *buf);

#endif
/********************************************************************************************
 *  1,交易预处理:                                                                         *
 *                          1,插入IC卡  ,------------------------------.                   *
 *                               |       |返回:发卡方标识,应用标识    |                   *
 *                               V       |      应用序列号,应用启用日期|                   *
 *                          2,选择应用 <       应用有效日期,发卡方FCI |                   *
 *                               |       `,=============================|                   * 
 *                               V        |包括:黑名单、发卡方、有效期 |                   *
 *                         3,有效性检查 <       应用版本               |                   *
 *                               |        `-----------------------------'                   *
 *                               V                                                          *
 *                      4,选择电子钱包或存折                                               *
 *                               |                                                          * 
 *                  .--电子存折--^--电子钱包-----.                                          *
 *                  |                            |                                          *
 *                  V                            |                                          *
 *            5,输入PIN码                       |                                          *
 *                  |                            |                                          *
 *                  V                            |                                          * 
 *            6,校验PIN码                       |                                          *
 *                  |                            |                                          *
 *                  `------------;---------------'                                          *
 *                               |                                                          *
 *                               V                                                          *
 *                          交易类型选择                                                    * 
 *                                                                                          *
 *                                                ,---------------------------------.       *
 *                                                |IC卡产生过程密钥,返回:余额*4   |       *
 *  2,圈存交易:                                 |交易序号*2、密钥版本*1、         |       *
 *                        1,ICC_init_for_load() < 算法标识*1、伪随机数*4、MAC1*4   |       *
 *                                  |        ,----'=================================|       * 
 *                                  V        |根据IC卡返回的数据产生过程密钥校验MAC1|       *
 *                          2,主机处理交易 < 计算MAC2(交易金额、类型、终端编号、   |       *
 *                                  |        |主机日期、时间),银行扣款             |       *
 *                                  V        `------,===============================|       *
 *                        3,ICC_credit_for_load() < IC卡获得、验证MAC2,交易处理   |       *
 *                                  |               |形成交易明细,更改金额,返回TAC|       * 
 *                                  V               `-------------------------------'       *
 *                          返回确认,交易结束                                              *
 *                                                  ,-------------------------------.       *
 *                                                  |IC卡产生过程密钥,返回:余额*4 |       *
 *  3,圈提交易:                                   |交易序号*2、密钥版本*1、       |       *
 *                        1,ICC_init_for_unload() < 算法标识*1、伪随机数*4、MAC1*4 |       * 
 *                                  |        ,------'===============================|       *
 *                                  V        |根据IC卡返回的数据产生过程密钥校验MAC1|       *
 *                          2,主机处理交易 < 计算MAC2(交易金额、类型、终端编号、   |       *
 *                                  |        |主机日期、时间),                     |       *
 *                                  V        `------,===============================|       *
 *                       3,ICC_debit_for_unload() < IC卡获得、验证MAC2,交易处理   |       * 
 *                                  |               |形成交易明细,更改金额,       |       *
 *                                  |               |计算、返回MAC3                 |       *
 *                                  V      ,--------`===============================|       *
 *                            4,主机处理 < 验证MAC3,银行账户加钱                  |       *
 *                                  |      `----------------------------------------'       *
 *                                  V                                                       * 
 *                          返回确认,交易结束                                              *
 *                                                  ,-------------------------------.       *
 *                                                  |IC卡产生过程密钥,返回:余额*4 |       *
 *  4,消费交易:                                   |交易序号2、透支限额3、密钥版本1|       *
 *                     1,ICC_init_for_purchase()  < 算法标识*1、伪随机数*4         |       *
 *                                  |        ,------'===============================|       * 
 *                                  V        |根据IC卡返回的数据产生过程密钥、MAC1  |       *
 *             2,ICC_init_sam_for_purchase < 和交易序号                            |       *
 *                                  |        |======================================|       *
 *                                  V        | 验证MAC1,处理交易(钱包扣款等)     |       *
 *              3,ICC_debit_for_purchase() <  产生MAC2和TAC                        |       *
 *                                  |        `--------------------------------------'       * 
 *                                  V             ,---------------------------------.       *
 *              4,ICC_credit_sam_for_purchase() < 验证IC卡传来的MAC2               |       *
 *                                  |             `---------------------------------'       *
 *                                  V                                                       *
 *                            处理交易结果                                                  *
 *                              交易结束                                                    * 
 ********************************************************************************************/
                                                                    

⌨️ 快捷键说明

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