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

来源:互联网 发布:农村淘宝服务站利润 编辑:程序博客网 时间:2024/06/02 06:52

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

函数名称: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;

}

0 0
原创粉丝点击