|
程序设计实例:CPU卡ESAM过程密钥内部认证
[复制链接]
/*******************************************
函数名称: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;
}
|
|