珠海金盾电子科技有限公司

联系我们

13482583038

技术资料

您的当前位置:首页 > 新闻中心 > 技术资料

DX8加密芯片应用开发手册(五)

发布时间:2017-09-03浏览次数:载入中...来源:芯片 www.oldsongmovie.cn


芯片 www.oldsongmovie.cn DX8加密芯片应用开发手册(五)这个章节主讲DX81C04防抄板加密芯片的函数使用


7.2.防抄板认证函数:


防抄板认证的原理:主机发送随机挑战给DX8芯片,DX8芯片根据内部配置的密钥(KEYA)计算并返回结果,主机收到结果后,按照同样的方法对挑战随机数进行计算,然后比较两个结果,一致表示认证通过。


7.2.1. DX8芯片计算响应


u8_x DX8_HostAuth(u8_x  *challenge, u8_x  len, u8_x  *response);

功能描述:DX8芯片根据输入的挑战动态计算响应

参数:    challenge  输入的挑战随机数

              len        挑战随机数的长度

              response  返回的响应结果,20个字节

返回值:  响应计算成功返回0,否则返回错误代码


7.2.2. 主机软件计算响应


void Lib_HostAuth(u8_x *challenge, u8_x len, u8_x *buf, u8_x *response);

功能描述:主机软件根据挑战计算响应结果

参数:    challenge  输入的挑战随机数

          len        挑战随机数的长度

          buf        输入的16个字节KEYA

          response  返回的响应结果,20个字节

返回值:  计算成功返回0,否则返回错误代码

示例代码:

u8_x rv;

u8_x challenge[32],reponse_1[20],response_2[20];

GetSoftRandom(challenge,32);

rv = DX8_HostAuth (challenge, 32response_1);  //DX8芯片计算

if (rv) {

   printf(“HostAuth calculation failed, rv = 0x%.2x\n”, rv);

   return rv;

}

Lib_HostAuth(chanllenge, 32, keya_value, reponse_2); //主机软件计算

if (memcmp(reponse1, response_2)) {  // 比较响应结果

   printf(“Host Authentication Error!!\n”);

} else {

   printf(“Host Authentication Passed!!\n”);

}

说明:keya_value是在使用Dx8Configuration.exe时产生的dx8_engineer.h中定义,需要将dx8_engineer.h包含到应用程序中


7.3.读写EEPROM函数


DX81/DX82将芯片内部的EEPROM存储区域分成4-16zone,需要预先通过烧写器对每个zone的访问模式及其密钥进行配置,每个zone可以配置成三种访问模式:

l  正常模式

l  认证模式

l  加密模式

若配置为认证模式和加密模式,每个zone需要独立设定16个字节的访问密钥,zone密钥验证通过后才可对该zone进行读或者写,出厂所有zone默认为正常模式。具体每个zone配置好的信息在调用DX8_Reset()函数后存储在dx8-_info的结构体中,用户可直接访问:

 

模式

Read

Write

正常模式

不需要认证,传输线明文

不需要认证,传输线明文

认证模式

不需要认证,传输线明文

需要认证,传输线明文

加密模式

需要认证,传输线密文

需要认证,传输线密文

 

说明: 每个zone分区的地址都从0开始,正常模式时zone分区的大小为dx8_info.ZoneSize,认证模式和加密模式时zone分区的可用大小为dx8_info.ZoneSize-16,因为有16个字节用作该zone分区的密钥空间,该密钥空间永远无法访问。


7.3.1. 验证Zone Key


u8_x DX8_VerifyZone(u8_x zone, u8_x *seed, u8_x *buf);

功能描述:对指定的Zone分区密钥进行验证

参数:    zone   指定的zone分区(0 — ZoneNum-1)

          seed   输入的32个字节的随机数,主机对DX8认证

          buf    输入指定zone16个字节的密钥,DX8对主机认证

返回值:  认证通过返回0,否则返回错误代码

说明:若指定的zone为认证模式或者加密模式,并且该zone key验证通过后,才能执行对该zone的读或者写操作,任何出错或者非此zone的读写命令,都会将此zone的认证通过标志清除,若要继续此zone读或者写,需要重新对此zone key进行验证。

示例代码(以验证zone0为例)

u8_x rv;

u8_x seed[32];

GetSoftRandom(seed,32);

rv = DX8_VerifyZone(0, seed, zkey_0);  // 验证Zone0

if (rv) {

   printf(“Verify PIN failed, rv = 0x%.2x\n”, rv);

   return rv;

}

说明:zkey_0是在使用Dx8Configuration.exe时产生的dx8_engineer.h中定义,需要将dx8_engineer.h包含到应用程序中


7.3.2. EEPROM


u8_x DX8_WriteZone(u8_x zone, u16_x address, u16_x len, u8_x *buf);

功能描述:对指定的zone的地址空间进行数据操作

参数:    zone      指定的zone分区(0—(dx8_info.ZoneNum-1))

          address   写入数据的起始地址

          len        写入数据的长度

          buf        要写入的数据buffer

返回值:  写成功返回0,否则返回错误代码

说明:如该zone为认证模式或者加密模式,需要先用该zone的密钥DX8_VerifyZone验证成功后,才能执行写该zone的操作,输入的起始地址与操作的长度之和不能超过该zone的范围大小,否则会返回相应错误代码。

示例代码:

u8_x rv;

u8_x buf[32];

for (int i=0;i<32;i++) buf[i] = i;

rv = DX8_WriteZone(0,0,32,buf); // Zone 00地址开始写32个字节

if (rv) {

   printf(“Write Zone failed, rv = 0x%.2x\n”, rv);

   return rv;

}


7.3.3. EEPROM


u8_x DX8_ReadZone (u8_x zone, u16_x address, u16_x len, u8_x *buf);

功能描述:对指定的zone的地址空间进行数据操作

参数:    zone      指定的zone分区(0--(dx8_info.ZoneNum-1))

          address   读出数据的起始地址

          len        读出数据的长度

          buf        返回数据buffer

返回值:  读成功返回0,否则返回错误代码

说明:如该zone为加密模式,需要先用该zone的密钥DX8_VerifyZone验证成功后,才能执行读该zone的操作,输入的起始地址与操作的长度之和不能超过该zone的可访问空间,否则会返回相应错误代码。

示例代码:

u8_x rv;

u8_x buf[32];

rv = DX8_ReadZone(0,0,32,buf); // Zone 00地址开始读取32个字节

if (rv) {

   printf(“Read Zone failed, rv = 0x%.2x\n”, rv);

   return rv;



待续......

【返回列表】
o2VmOwFj8ZnyIR7E4fzj+mqB9B021S0kq1j2mEGzBrQ8R5Az6d/r5ZgqNQxlfmVOn2RUFVv3ntFBFkEKscPnyW26UV8vfSC020l/FRswnB6JLyOcBP9x2toJ5+w0Gk1o
ag8 | 博狗 | 真人娱乐 | 真人娱乐 | 亚洲城 | 环亚娱乐 | 澳门金沙 | 澳门金沙 | 真人娱乐 | 澳门葡京 | bet | 博狗 | 葡京娱乐 | 澳门葡京 | 365bet | 亚游集团 | 真人游戏 | 原创漫画 | 公务员网 | 28杠 | 网上彩票 | 北京快乐8 | 优德 | ag8 | 金沙 | ag8 | 韦德 | 开奖 | bet |