CPU卡程序设计实例(二十三)卡和ESAM之间内部认证
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之间内部认证相关推荐
- CPU卡程序设计实例(十三)终端向ESAM发送数据
终端向ESAM发送一个字节函数 /************************************** 函数名称:EsamSendChar 函数功能:向Esam发送一个字节 入口参数:cSen ...
- CPU卡程序设计实例(二十五)ESAM过程密钥内部认证
/******************************************* 函数名称:EsamInsideVali 函数功能:ESAM过程密钥内部认证 输入参数: pcReceCardR ...
- CPU卡程序设计实例(二十六)卡和ESAM之间外部认证
/******************************************* 函数名称:CardExterVali 函数功能:卡与ESAM之间外部认证 输入参数:cApplySerialN ...
- CPU卡设计实例及程序设计(二十八)ESAM外部认证
/******************************************* 函数名称:EsamExternVerify 函数功能:ESAM外部认证 输入参数: 输出参数: 描述:ESAM ...
- CPU卡程序设计实例(六)ETU配置
1.数据位宽时间(ETU)计算程序 前面已经说过,数据位宽是CPU卡程序设计中非常重要的一环,涉及到数据读写的可靠性和稳定性.下面这段程序就是在IAR环境下,基于MSP430单片机C语言的数据位宽计算 ...
- Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇
回顾一下前面的知识,MMC 子系统范围三个部分: HOST 部分是针对不同主机的驱动程序,这一部是驱动程序工程师需要根据自己的特点平台来完成的. CORE 部分: 这是整个MMC 的核心存,这部分完成 ...
- CPU卡程序设计实例(十二)ESAM模块字节接收函数
ESAM模块字节接收函数 /************************************** 函数名称:EsamReceChar 函数功能:Esam接收一个字节 入口参数:无 出口参数:i ...
- CPU卡程序设计实例(十)ESAM复位程序
ESAM复位程序 /************************************** 函数名称:*EsamRst 函数功能:Esam复位 入口参数:无 出口参数:复位数据 描述: Esam ...
- CPU卡程序设计实例(八)ESAM模块卡上、下电
1.3 ESAM模块上电程序 /******************************************* 函数名称:EsamPowerUp 函数功能:Esam上电 输入参数:无 输出参数 ...
最新文章
- mof提权原理及其过程
- 试试这个文字冒险游戏,故事是AI写的:情节丰满逻辑不乱,进去就出不来了,在线可玩...
- 【Go语言】使用 http 库进行简单的接口测试
- 【Matlab】怎么判断两个字符串相等?
- 【IPFS + 区块链 系列】 入门篇 - IPFS+IPNS+个人博客搭建
- 从零学PyTorch:DataLoader构建高效的自定义数据集
- leetcode486. 预测赢家(动态规划)
- android webservices 返回多行多列数据,NoahWeb实现表格多行多列
- VS2010+OpenMP的简单使用
- 疑似荣耀V30 Pro 5G网络测试截图曝光:前置开孔双摄加持
- 巧用Delegate在Silverlight多个页面、控件中传递回调方法
- python学习感悟
- excel数据分析模块
- cpu倍频模式怎么调_CPU超频详细设置图文教程 CPU怎么超频
- studing method for linux
- Windwos2008如何关闭IE增强的安全配置
- 机器学习之线性模型一
- 【微信小程序】 apache配置https,nginx配置https
- Lending Club贷款数据分析
- linux 重启网卡命令
热门文章
- 金半接触-肖特基接触(Schottky contact)-欧姆接触(Ohmic contact)
- 环境配置:Win10 - VSCode - MinGW64 - OpenCV 4.5.0 - ZBar 0.23.92
- 添加mysql 函数库_mysql函数创建
- 精易模块中普通填表初始化失败的解决方案
- 经典网络结构 (六):DenseNet (Densely Connected Networks 稠密连接网络)
- zulutrade外汇自动跟单系统介绍
- Spring5的WebClient使用详解
- 最大似然估计MLE与贝叶斯估计
- 小说阅读器开发(二)文本的排版与分页
- php屏蔽蜘蛛,如何屏蔽垃圾蜘蛛抓取页面