📄 comm.c
字号:
/*****************************
comm.c:对密码器,下载机操作函数
编制人:李健
编制日期:2001/8/31
修改日期:
动态连接:libzfmm.so
*****************************/
#define Debug 0
#include <stdio.h>
#include "comm.h"
#define MACH_ID_LEN 10 /* 机具编号 */
#define CHIP_SN_LEN 8 /* 芯片序列号 */
#define ACCU_LEN 32 /* 帐号 */
#define CHIP_ID_LEN 32 /* 芯片ID */
#define VK_LEN 160 /* VK */
#define KEY_NUM_LEN 2 /* 密钥号 */
#define AK_LEN 32 /* AK支 */
#define SIG_LEN 16 /* SIG */
#define UNLOCK_CODE_LEN 16 /* 解锁密码 */
#define PADDING_LEN 30 /* 填充位 0 */
#define SERVICE_LEN 2 /* 业务种类 */
#define DATE_LEN 8 /* 日期 */
#define TICKET_NUM_LEN 8 /* 凭证号码 */
#define BANLANCE_LEN 16 /* 金额 */
#define PAY_CODE_LEN 20 /* 联机支付密码长度*/
#define ICZFMM_LEN 500 /* 对照表长度 */
/* 读机具号和芯片SN ,出口参数MACH_ID,CHIP_SN */
int Read_Sn(char *MACH_ID,char *CHIP_SN)
{
int ret;
char rece_buffer[PACKLEN];
memset(rece_buffer,0,PACKLEN);
ret=PORT_RW(READ_SN,"",rece_buffer);
#if Debug>0
fprintf(stderr,"\nRead_Sn ret=%d\n",ret);
#endif
if (ret!=True)
return ret;
#if Debug>0
fprintf(stderr,"rece_buffer=%s\n",rece_buffer);
#endif
strncpy(MACH_ID,rece_buffer,MACH_ID_LEN);
strncpy(CHIP_SN,&rece_buffer[MACH_ID_LEN],CHIP_SN_LEN);
return True;
}
/* 生成密钥对,入口参数:ACCU,出口参数:CHIP_ID,VK */
int Gen_Keypair(char *ACCU,char *CHIP_ID,char *VK)
{
int ret;
char rece_buffer[PACKLEN];
char send_buffer[PACKLEN];
char accu[ACCU_LEN];
memset(rece_buffer,0,PACKLEN);
memset(send_buffer,0,PACKLEN);
memset(accu,0,ACCU_LEN);
/* 过滤帐号 */
ACCU_accu(ACCU,accu);
strcat(send_buffer,accu);
ret=PORT_RW(GEN_KEYPAIR,send_buffer,rece_buffer);
#if Debug>0
fprintf(stderr,"\n生成密钥对ret=%d\n",ret);
#endif
if (ret!=True)
return ret;
#if Debug>0
fprintf(stderr,"rece_buffer=%s\n",rece_buffer);
#endif
strncpy(CHIP_ID,rece_buffer,CHIP_ID_LEN);
strncpy(VK,&rece_buffer[CHIP_ID_LEN],VK_LEN);
return True;
}
/* 下载AK支,入口参数:ACCU,KEY_NUM,AK支 */
int Load_Ak(char *ACCU,char *KEY_NUM,char *AK)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
char accu[ACCU_LEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
memset(accu,0,ACCU_LEN);
/* 过滤帐号 */
ACCU_accu(ACCU,accu);
strcat(send_buffer,accu);
strcat(send_buffer,KEY_NUM);
strcat(send_buffer,AK);
ret=PORT_RW(LOAD_AK,send_buffer,rece_buffer);
#if Debug>0
fprintf(stderr,"\n下载AKret=%d\n",ret);
#endif
if (ret!=True)
return ret;
#if Debug>0
fprintf(stderr,"rece_buffer=%s\n",rece_buffer);
#endif
return True;
}
/* 删除帐号,入口参数:ACCU */
int Del_Accu(char *ACCU)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
char accu[ACCU_LEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
memset(accu,0,ACCU_LEN);
/* 过滤帐号 */
ACCU_accu(ACCU,accu);
strcat(send_buffer,accu);
ret=PORT_RW(DEL_ACCU,send_buffer,rece_buffer);
#if Debug>0
fprintf(stderr,"\n删除帐号ret=%d\n",ret);
#endif
if (ret!=True)
return ret;
return True;
}
/* 增发签名,入口参数:ACCU,CHIP_ID,VK,出口参数:SIG */
int Add_Sig(char *ACCU,char *CHIP_ID,char *VK,char *SIG)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
char accu[ACCU_LEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
memset(accu,0,ACCU_LEN);
/* 过滤帐号 */
ACCU_accu(ACCU,accu);
strcat(send_buffer,accu);
strcat(send_buffer,CHIP_ID);
strcat(send_buffer,VK);
ret=PORT_RW(ADD_SIG,send_buffer,rece_buffer);
#if Debug>0
fprintf(stderr,"\n增发ret=%d\n",ret);
#endif
if (ret!=True)
return ret;
strncpy(SIG,rece_buffer,SIG_LEN);
return True;
}
/* 解锁,入口参数:UNLOCK_CODE */
int Unlock_Mach(char *UNLOCK_CODE)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
strcat(send_buffer,UNLOCK_CODE);
ret=PORT_RW(UNLOCK,send_buffer,rece_buffer);
#if Debug>0
fprintf(stderr,"\n解锁ret=%d\n",ret);
#endif
if (ret!=True)
return ret;
return True;
}
/* 发行机具,入口参数:UNLOCK_CODE */
int Dist_Mach(char *UNLOCK_CODE)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
strcat(send_buffer,UNLOCK_CODE);
ret=PORT_RW(DIST_MACH,send_buffer,rece_buffer);
#if Debug>0
fprintf(stderr,"\n发行机具ret=%d\n",ret);
#endif
if (ret!=True)
return ret;
#if Debug>0
fprintf(stderr,"发行机具rece_buffer=%s\n",rece_buffer);
#endif
return True;
}
/* 联机计算支付密码,入口参数:PLAIN_TXT:(ACCU,SERVICE,DATE,TICKET_NUM,
BANLANCE)
出口参数:PAY_CODE */
int Conn_Calu(char *PLAIN_TXT,char *PAY_CODE)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
char PADDING[PADDING_LEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
/* 填充0 */
memset(PADDING,'0',PADDING_LEN);
strncpy(send_buffer,PADDING,PADDING_LEN);
strncpy(&send_buffer[30],PLAIN_TXT,strlen(PLAIN_TXT));
ret=PORT_RW(CONN_CALU,send_buffer,rece_buffer);
if (ret!=True)
return ret;
#if Debug>0
fprintf(stderr,"rece_buffer=%s\n",rece_buffer);
#endif
strncpy(PAY_CODE,rece_buffer,PAY_CODE_LEN);
return True;
}
/******************************************************************************/
/* 初始化IC卡,入口参数:ICMM */
/******************************************************************************/
int Init_Ic(char *ICMM)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
strcat(send_buffer,ICMM);
ret=PORT_RW(INIT_IC,send_buffer,rece_buffer);
if (ret!=True)
return ret;
return True;
}
/******************************************************************************/
/* 验证密码,入口参数:ICMM */
/******************************************************************************/
int Ver_Icmm(char *ICMM)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
strcat(send_buffer,ICMM);
ret=PORT_RW(VER_ICMM,send_buffer,rece_buffer);
if (ret!=True)
return ret;
return True;
}
/******************************************************************************/
/* 修改密码,入口参数:ICMM */
/******************************************************************************/
int Chg_Icmm(char *ICMM)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
strcat(send_buffer,ICMM);
ret=PORT_RW(CHG_ICMM,send_buffer,rece_buffer);
if (ret!=True)
return ret;
return True;
}
/******************************************************************************/
/* 比较算法芯片号 */
/******************************************************************************/
int Comp_Chipno()
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
ret=PORT_RW(COMP_CHIPNO,send_buffer,rece_buffer);
if (ret!=True)
return ret;
return True;
}
/******************************************************************************/
/* 产生支付密码对照表,入口参数:ICMM
ACCU,SERVICE,DATE,TICKET_NUM_B,TICKET_NUM_E
出口参数:PAY_CODE */
/******************************************************************************/
int Iczfmm(char *ICMM,char *ACCU,char *SERVICE,char *DATE,
char *TICKET_NUM_B,char *TICKET_NUM_E,char *PAY_CODE)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
char accu[ACCU_LEN];
char PADDING[PADDING_LEN];
ret=Comp_Chipno();
if (ret!=True)
return 99;
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
memset(accu,0,ACCU_LEN);
/* 填充0 */
memset(PADDING,'0',PADDING_LEN);
/* 过滤帐号 */
ACCU_accu(ACCU,accu);
strcat(send_buffer,PADDING);
strcat(send_buffer,ICMM);
strcat(send_buffer,accu);
strcat(send_buffer,SERVICE);
strcat(send_buffer,DATE);
strcat(send_buffer,TICKET_NUM_B);
strcat(send_buffer,TICKET_NUM_E);
ret=PORT_RW(ICZFMM,send_buffer,rece_buffer);
if (ret!=True)
return ret;
strncpy(PAY_CODE,rece_buffer,ICZFMM_LEN);
return True;
}
/******************************************************************************/
/* ACE平台产生支付密码对照表,入口参数:ICMM,ACCU,PLAIN_TXT
PLAIN_TXT包括 SERVICE,DATE,TICKET_NUM_B,TICKET_NUM_E
出口参数:PAY_CODE */
/******************************************************************************/
int ACE_Iczfmm(char *ICMM, char *ACCU,char *PLAIN_TXT,char *PAY_CODE)
{
int ret;
char send_buffer[PACKLEN];
char rece_buffer[PACKLEN];
char accu[ACCU_LEN];
char PADDING[PADDING_LEN];
ret=Comp_Chipno();
if (ret!=True)
return 99;
memset(send_buffer,0,PACKLEN);
memset(rece_buffer,0,PACKLEN);
memset(accu,0,ACCU_LEN);
/* 填充0 */
memset(PADDING,'0',PADDING_LEN);
/* 过滤帐号 */
ACCU_accu(ACCU,accu);
strcat(send_buffer,PADDING);
strcat(send_buffer,ICMM);
strcat(send_buffer,accu);
strcat(send_buffer,PLAIN_TXT);
ret=PORT_RW(ICZFMM,send_buffer,rece_buffer);
if (ret!=True)
return ret;
strncpy(PAY_CODE,rece_buffer,ICZFMM_LEN);
return True;
}
/* 过滤帐号 */
ACCU_accu(char *inbuf,char outbuf[32])
{
int i,j;
j=0;
memset(outbuf,'0',32);
for(i=strlen(inbuf)-1;i>=0;i--)
if (inbuf[i]>='0'&&inbuf[i]<='9')
{
outbuf[31-j]=inbuf[i];
j++;
}
return;
}
/* */
fillamt(char *inbuf,char outbuf[16])
{
int i,j;
j=0;
memset(outbuf,'0',16);
for(i=strlen(inbuf)-1;i>=0;i--)
if (inbuf[i]>='0'&&inbuf[i]<='9')
{
outbuf[15-j]=inbuf[i];
j++;
}
return;
}
/* */
fillzfmm(char *inbuf,char outbuf[20])
{
int i,j;
j=0;
memset(outbuf,'0',20);
for(i=strlen(inbuf)-1;i>=0;i--)
if (inbuf[i]>='0'&&inbuf[i]<='9')
{
outbuf[19-j]=inbuf[i];
j++;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -