您的位置:首页 > 其它

CPU卡程序设计实例(二十五)ESAM过程密钥内部认证

2017-05-01 09:32 525 查看
/*******************************************

函数名称:EsamInsideVali

函数功能:ESAM过程密钥内部认证

输入参数: pcReceCardRand-卡产生的随机数,KEYNum1,内部认证密钥标识

输出参数:无

描述:发命令头--发数据-发取响应数据命令--获得数据

*******************************************/

unsigned char* EsamInsideVerify(unsigned char* pcReceCardRand,unsigned char KEYNum1)

{

unsigned char cReceCardDatdBuff2[8]={0};

unsigned char *pcReceDataBuff;

unsigned int itemp;

cCommandLen=0x05;

TxAndRxBuff[0]=0x80;

TxAndRxBuff[1]=0xfa;

TxAndRxBuff[2]=0x00;

TxAndRxBuff[3]=KEYNum1;

TxAndRxBuff[4]=0x08;

SendCommandHead_Pro(); //发命令头

if(ErrorRWBIT&CardError) goto EsamInsideValiEnd;

memcpy(&TxAndRxBuff[0],pcReceCardRand,8);

Delay1XETU(4);

cCommandLen=8;

SendCommand(cCommandLen);//发数据

TxAndRxBuff[0]=EsamReceChar();

TxAndRxBuff[1]=EsamReceChar();

SendC0Comm(); //发“取响应数据”命令

for(itemp=0;itemp<8;itemp++)

{

cReceCardDatdBuff2[itemp]=EsamReceChar(); //接受ESAM返回信息

if(ErrorRWBIT&CardError) break;

}

TxAndRxBuff[0]=EsamReceChar();

TxAndRxBuff[1]=EsamReceChar();

if((TxAndRxBuff[0]!=0x90)&&(TxAndRxBuff[1]!=0x00))

{

CardError=ErrorRWBIT|CardError;

goto EsamInsideValiEnd;

}

EsamInsideValiEnd:

pcReceDataBuff=&cReceCardDatdBuff2[0];

delay_ms2M(5);

return pcReceDataBuff;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息