📄 iccapp.h
字号:
* 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 + -