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

CPU卡设计实例及程序设计(十九)卡和ESAM之间外部认证

已有 712 次阅读2017-2-27 22:20 |个人分类:CPU卡开发设计程序实例| 程序设计, 序列号, 认证, CPU卡

/*******************************************
函数名称:CardExterVali
函数功能:卡与ESAM之间外部认证
输入参数:cApplySerialNumber1[8]-卡公共应用信息文件中的序列号, 
          KeyNum2-外部认证密钥标识符
输出参数:无
描述:卡取随机数-ESAM用02密钥对序列号生成过程密钥-ESAM过程密钥内部认证
       --卡82H外部认证
*******************************************/
void CardAndEsamExternVerify(unsigned char cApplySerialNumber1[8],unsigned char KeyNum2)
{
  unsigned char *pcReceCardRand;
  unsigned char *pcReceCardData;
  unsigned char cReceCardData[8]={0};
  unsigned char cReceCardRand[8]={0};
      
    icflag1=ICSAM|icflag1;    
    pcReceCardRand=Get_RandNum();   //从卡上取随机数       
    if(ErrorReadWriteBIT&iErrorRWrCard) goto CardExterValiEnd;
        
    memcpy(&cReceCardRand[0],pcReceCardRand,8);
      
    icflag1=~ICSAM&icflag1;
    //ESAM用02密钥,将序列号生成过程密钥 
    GetProcessKey(cApplySerialNumber1,EsamInfoUpKey);  
    if(ErrorReadWriteBIT&iErrorRWrCard) goto CardExterValiEnd;
    icflag1=~ICSAM&icflag1;
    //ESAM用过程密钥对随机数做内部认证,生成数据D
    pcReceCardData=EsamInsideVerify(cReceCardRand,EsamKEYVerify);     
    if(ErrorReadWriteBIT&iErrorRWrCard) goto CardExterValiEnd;
        
    memcpy(&cReceCardData[0],pcReceCardData,8);     
    //cpu卡使用外部验证指令对数据D进行外部验证 
    icflag1=ICSAM|icflag1;       
    ExternVerify(cReceCardData,CardInfoUpKey);
CardExterValiEnd:
    _NOP();
    if(ErrorReadWriteBIT&iErrorRWrCard)  
    iErrorRWrCard=ErrorCardExtAuthBIT|iErrorRWrCard;
}
评论 (0 个评论)

facelist doodle 涂鸦板

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

热门文章