1、标识符宏定义

//CPU卡密钥标识

#define CardInfoDownKey 0x81 //

#define CardInfoUpKey 0x82 //

#define CardInsideVerifyKEY 0x83 //

#define CardInfoUpdateKEY 0x84 //

#define CardKEYUpdateKey 0x85 //

#define CardVolumeUpdateKey 0x86 //

//ESAM密钥标识

#define EsamKEYVerify 0x00 //

#define EsamInfoDownKey 0x01 //

#define EsamInfoUpKey 0x02 //

#define EsamInsideVerifyKEY 0x03 //

#define EsamInfoUpdateKEY 0x04 //

#define EsamKEYUpdateKey 0x05 //

#define EsamVolumeUpdateKey 0x06 //

//cTxAndRxStatus CPU卡接收数据正确标志

#define ReceINSRightBIT BIT0

2、卡和ESAM内部认证

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

函数名称:CardAndEsamInterVali

函数功能:卡和ESAM内部认证

输入参数:cApplySerialNumber[8],卡应用序列号

输出参数:

描述:卡与esam模块之间的内部认证过程:

从卡取随机数--卡对随机数作内部认证,得到D1--ESAM用应用序列号

产生过程密钥--ESAM用过程密钥对随机数内部认证,得到D2--比较D1与D2

--相等则认证成功

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

void CardAndEsamInsideVerify(unsigned char cApplySerialNumber[8])

{

unsigned char *pcReceCardData1,*pcReceCardData2;

unsigned char cReceCardData1[8]={0},cReceCardData2[8]={0};

unsigned char cReceCardRand1[8]={0};

unsigned char ctemp;

pcReceCardData1=Get_RandNum(); //取8字节随机数

if((ErrorRWBIT+ErrorRandBIT)&CardError) goto CardAndEsamInsideVerifyEnd;

//随机数存放在数组中

memcpy(&cReceCardRand1[0],pcReceCardData1,8);

delay_ms2M(5);

//卡83H内部认证

pcReceCardData1=CardInsideVerify(cReceCardRand1,CardInsideVerifyKEY);

if(ErrorRWBIT&CardError) goto CardAndEsamInsideVerifyEnd;

//内部认证获得的加密值,作为D1

memcpy(&cReceCardData1[0],pcReceCardData1,8);

//对ESAM操作

CardWorkFlag=~CardORESAM&CardWorkFlag;

//ESAM用03密钥将应用序列号生成过程密钥

GetProcessKey(cApplySerialNumber,EsamInsideVerifyKEY);

if(ErrorRWBIT&CardError) goto CardAndEsamInsideVerifyEnd;

//用过程密钥对随机数进行内部认证,生成D2

pcReceCardData2=EsamInsideVerify(cReceCardRand1,EsamKEYVerify);

if(ErrorRWBIT&CardError) goto CardAndEsamInsideVerifyEnd;

memcpy(&cReceCardData2[0],pcReceCardData2,8);

//比较D1,D2,相等则认证成功

ctemp=memcmp(&cReceCardData2[0],&cReceCardData1[0],8);

if(ctemp!=0)

{

CardError=ErrorPasswBIT|CardError;

}

CardAndEsamInsideVerifyEnd:

_NOP();

}

CPU卡程序设计实例(二十三)卡和ESAM之间内部认证相关推荐

  1. CPU卡程序设计实例(十三)终端向ESAM发送数据

    终端向ESAM发送一个字节函数 /************************************** 函数名称:EsamSendChar 函数功能:向Esam发送一个字节 入口参数:cSen ...

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

    /******************************************* 函数名称:EsamInsideVali 函数功能:ESAM过程密钥内部认证 输入参数: pcReceCardR ...

  3. CPU卡程序设计实例(二十六)卡和ESAM之间外部认证

    /******************************************* 函数名称:CardExterVali 函数功能:卡与ESAM之间外部认证 输入参数:cApplySerialN ...

  4. CPU卡设计实例及程序设计(二十八)ESAM外部认证

    /******************************************* 函数名称:EsamExternVerify 函数功能:ESAM外部认证 输入参数: 输出参数: 描述:ESAM ...

  5. CPU卡程序设计实例(六)ETU配置

    1.数据位宽时间(ETU)计算程序 前面已经说过,数据位宽是CPU卡程序设计中非常重要的一环,涉及到数据读写的可靠性和稳定性.下面这段程序就是在IAR环境下,基于MSP430单片机C语言的数据位宽计算 ...

  6. Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇

    回顾一下前面的知识,MMC 子系统范围三个部分: HOST 部分是针对不同主机的驱动程序,这一部是驱动程序工程师需要根据自己的特点平台来完成的. CORE 部分: 这是整个MMC 的核心存,这部分完成 ...

  7. CPU卡程序设计实例(十二)ESAM模块字节接收函数

    ESAM模块字节接收函数 /************************************** 函数名称:EsamReceChar 函数功能:Esam接收一个字节 入口参数:无 出口参数:i ...

  8. CPU卡程序设计实例(十)ESAM复位程序

    ESAM复位程序 /************************************** 函数名称:*EsamRst 函数功能:Esam复位 入口参数:无 出口参数:复位数据 描述: Esam ...

  9. CPU卡程序设计实例(八)ESAM模块卡上、下电

    1.3 ESAM模块上电程序 /******************************************* 函数名称:EsamPowerUp 函数功能:Esam上电 输入参数:无 输出参数 ...

最新文章

  1. mof提权原理及其过程
  2. 试试这个文字冒险游戏,故事是AI写的:情节丰满逻辑不乱,进去就出不来了,在线可玩...
  3. 【Go语言】使用 http 库进行简单的接口测试
  4. 【Matlab】怎么判断两个字符串相等?
  5. 【IPFS + 区块链 系列】 入门篇 - IPFS+IPNS+个人博客搭建
  6. 从零学PyTorch:DataLoader构建高效的自定义数据集
  7. leetcode486. 预测赢家(动态规划)
  8. android webservices 返回多行多列数据,NoahWeb实现表格多行多列
  9. VS2010+OpenMP的简单使用
  10. 疑似荣耀V30 Pro 5G网络测试截图曝光:前置开孔双摄加持
  11. 巧用Delegate在Silverlight多个页面、控件中传递回调方法
  12. python学习感悟
  13. excel数据分析模块
  14. cpu倍频模式怎么调_CPU超频详细设置图文教程 CPU怎么超频
  15. studing method for linux
  16. Windwos2008如何关闭IE增强的安全配置
  17. 机器学习之线性模型一
  18. 【微信小程序】 apache配置https,nginx配置https
  19. Lending Club贷款数据分析
  20. linux 重启网卡命令

热门文章

  1. 金半接触-肖特基接触(Schottky contact)-欧姆接触(Ohmic contact)
  2. 环境配置:Win10 - VSCode - MinGW64 - OpenCV 4.5.0 - ZBar 0.23.92
  3. 添加mysql 函数库_mysql函数创建
  4. 精易模块中普通填表初始化失败的解决方案
  5. 经典网络结构 (六):DenseNet (Densely Connected Networks 稠密连接网络)
  6. zulutrade外汇自动跟单系统介绍
  7. Spring5的WebClient使用详解
  8. 最大似然估计MLE与贝叶斯估计
  9. 小说阅读器开发(二)文本的排版与分页
  10. php屏蔽蜘蛛,如何屏蔽垃圾蜘蛛抓取页面