注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
tiankai001的个人空间 https://home.eeworld.com.cn/space-uid-139222.html [收藏] [复制] [分享] [RSS]
日志

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

已有 1522 次阅读2017-2-28 23:07 |个人分类:CPU卡开发设计程序实例| 程序设计, 认证, CPU卡

/*******************************************
函数名称: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(ErrorReadWriteBIT&iErrorRWrCard) 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(ErrorReadWriteBIT&iErrorRWrCard) break;
  }
  TxAndRxBuff[0]=EsamReceChar(); 
  TxAndRxBuff[1]=EsamReceChar();
  if((TxAndRxBuff[0]!=0x90)&&(TxAndRxBuff[1]!=0x00)) 
  {
    iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard;
    goto EsamInsideValiEnd; 
  }  
EsamInsideValiEnd:
  pcReceDataBuff=&cReceCardDatdBuff2[0];
  delay_ms2M(5);
  return pcReceDataBuff; 
}
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章