/*******************************************
函数名称:CardInsideVerify
函数功能:卡内部认证
输入参数:pcReCardRand-卡产生的随机数, KEYID--认证密钥标识符
输出参数:pcReceDataBuff,加密后的数据
描述:发命令头-发命令数据-发“取响应数据”-判断是否正确
*******************************************/
unsigned char *CardInsideVerify(unsigned char pcReCardRand[8],unsigned char KEYID)
{
unsigned char cReceCardDatdBuff2[8]={0};
unsigned char *pcReceDataBuff;
unsigned int itemp;
cCommandLen=0x05;
TxAndRxBuff[0]=0x00;
TxAndRxBuff[1]=0x88;
TxAndRxBuff[2]=0x00;
TxAndRxBuff[3]=KEYID;
TxAndRxBuff[4]=0x08;
SendCommandHead_Pro();
if(ErrorReadWriteBIT&iErrorRWrCard) goto CardInsideValiEnd;
memcpy(&TxAndRxBuff[0],&pcReCardRand[0],8);
Delay1XETU(4);
cCommandLen=8;
SendCommand(cCommandLen);//
TxAndRxBuff[0]=CardReceChar();
TxAndRxBuff[1]=CardReceChar();
SendC0Comm();
if(ErrorReadWriteBIT&iErrorRWrCard) goto CardInsideValiEnd;
for(itemp=0;itemp<8;itemp++)
{
cReceCardDatdBuff2[itemp]=CardReceChar(); //接受cpu卡返回信息
if(ErrorReadWriteBIT&iErrorRWrCard) break;
}
TxAndRxBuff[0]=CardReceChar();
TxAndRxBuff[1]=CardReceChar();
if((TxAndRxBuff[0]!=0x90)&&(TxAndRxBuff[1]!=0x00))
{
iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard;
goto CardInsideValiEnd;
}
CardInsideValiEnd:
pcReceDataBuff=&cReceCardDatdBuff2[0];
delay_ms2M(5);
return pcReceDataBuff;
}