TokenCZ
unknown
c_cpp
9 months ago
3.7 kB
20
Indexable
int makeTokenCZ(uchar outData[50]) {
uchar form_factr_indData[9];
uchar form_factr_indTLV[32], form_factr_indAscii[65];
uchar sATC[5], SER_FLD_ACI[29];
int iLen=0;
memset(form_factr_indTLV, 0, sizeof(form_factr_indTLV));
if (APP_STATUS.currentCardRead.MsgType == PICC_MSG ) {
LOGGER(LOG_DEBUG, "MsgType == PICC_MSG");
//obtiene el Form Factor Indicator
Clss_GetTLVData(0x9F6E, form_factr_indTLV, &iLen, APP_STATUS.ucKernType);
//inicializa los arreglos
memset(form_factr_indData, 0, 9);
memset(form_factr_indAscii, 0, 65);
memset(SER_FLD_ACI, 0, 40);
//convierte de BCD a ASCII
logHexData("0x9F6E", form_factr_indTLV, iLen);
if (iLen > 0)
{
if (form_factr_indTLV[2] & 0x80 && APP_STATUS.ucKernType == KERNTYPE_MC)
{
memset(sATC, 0, 5);
PubBcd2Asc0(glProcInfo.stTranLog.sATC, 2, sATC);
LOGGER(LOG_DEBUG, "ATC [%s]", sATC);
//Rellena con espacios en blanco
memset(SER_FLD_ACI, 0x20, 36);
//
sprintf((char*)outData, "! CZ%05d %-4s%-36s", 40, sATC, form_factr_indData, SER_FLD_ACI);
}
else
{
if (APP_STATUS.ucKernType == KERNTYPE_MC)
{
uchar deviceType[5];
uchar RawdeviceType[5];
memset(deviceType, 0, sizeof(deviceType));
memset(RawdeviceType, 0, sizeof(RawdeviceType));
memcpy(RawdeviceType, &form_factr_indTLV[4], 2);
logHexData("deviceType", RawdeviceType, 2);
//Se obtiene el device type
PubBcd2Asc0(RawdeviceType, 2, deviceType);
LOGGER(LOG_DEBUG, "Device Type [%s]", deviceType);
//obtiene el Application Transaction Counter
memset(sATC, 0, 5);
PubBcd2Asc0(glProcInfo.stTranLog.sATC, 2, sATC);
LOGGER(LOG_DEBUG, "ATC [%s]", sATC);
//Rellena con espacios en blanco
memset(SER_FLD_ACI, 0x20, 28);
//
sprintf((char*)outData, "! CZ%05d %-4s%-4s%-4s%-28s", 40, sATC, deviceType,"0000", SER_FLD_ACI);
}
else
{
PubBcd2Asc0(form_factr_indTLV, iLen, form_factr_indAscii);
//Otiene solo los primeros 8 bytes de datos
memcpy(form_factr_indData, form_factr_indAscii, 8);
//obtiene el Application Transaction Counter
memset(sATC, 0, 5);
PubBcd2Asc0(glProcInfo.stTranLog.sATC, 2, sATC);
LOGGER(LOG_DEBUG, "ATC [%s]", sATC);
//Rellena con espacios en blanco
memset(SER_FLD_ACI, 0x20, 28);
//
sprintf((char*)outData, "! CZ%05d %-4s%-8s%-28s", 40, sATC, form_factr_indData, SER_FLD_ACI);
}
}
}
else
{
memset(sATC, 0, 5);
PubBcd2Asc0(glProcInfo.stTranLog.sATC, 2, sATC);
LOGGER(LOG_DEBUG, "ATC [%s]", sATC);
//Rellena con espacios en blanco
memset(SER_FLD_ACI, 0x20, 36);
//
sprintf((char*)outData, "! CZ%05d %-4s%-36s", 40, sATC, form_factr_indData, SER_FLD_ACI);
}
return 50;
}
else if(APP_STATUS.currentCardRead.MsgType == ICCARD_MSG ) {
LOGGER(LOG_DEBUG, "MsgType == ICCARD_MSG");
//inicializa los arreglos
memset(form_factr_indAscii, 0, 9);
memset(SER_FLD_ACI, 0, 29);
//obtiene el Application Transaction Counter
memset(sATC, 0, 5);
PubBcd2Asc0(glProcInfo.stTranLog.sATC, 2, sATC);
//Rellena con espacios en blanco
memset(SER_FLD_ACI, 0x20, 28);
memset(form_factr_indAscii, 0x20, 8);
//
sprintf((char*)outData, "! CZ%05d %-4s%-8s%-28s", 40,sATC, form_factr_indAscii,SER_FLD_ACI);
return 50;
}
else {
LOGGER(LOG_DEBUG, " ");
//inicializa los arreglos
memset(form_factr_indAscii, 0, 41);
//Rellena con espacios en blanco
memset(form_factr_indAscii, 0x20, 40);
sprintf((char*)outData, "! CZ%05d %-40s", 40, form_factr_indAscii);
return 50;
}
}Editor is loading...
Leave a Comment