?? 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 + -