ATSHA204A加密芯片之--MAC校验代码
代码较多,先上传秘钥校验,借鉴了坛子里部分同学的代码
本文实现ATSHA204A 32字节随机数+16选1随机秘钥的MAC秘钥校验,如下是demo代码
static int atsha204_mac(struct i2c_client *client)
{
uint8_t recbuf[39] = {0};
uint8_t rand_buf[32] = {0};
int i = 0,ret = -99;
int ii=0;
int len = 0x58; //MsgBuf has 88 byte data
#define SLOT_COUNT 32
#define SLOT_NUMBER 66 // 32+32+4-1-1
#define SLOT_NUMBER_DIG 3 // 4+1-1-1
#define SLOT_COUNT_DIG 5
sha256_ctx ctx;
uint8_t MsgBuf[128] = {0x11,0x11,0x23,0xB6,0xCC,0x53,0xB7,0xB9,0xE9,0xBB,0x51,0xFD,0x2F,0x74,0xCD,0x0E,
0x91,0xD9,0x7F,0xEB,0x84,0x7B,0x98,0x09,0xF4,0xCD,0x93,0x6A,0xB6,0x48,0x11,0x11,
0x23,0x66,0x17,0xc8,0xba,0x55,0xf9,0x56,0x71,0x93,0x16,0xdc,0x5d,0xa2,0x76,0x46,
0x14,0x85,0x46,0x95,0x31,0xaa,0x82,0x37,0x43,0xa6,0xe7,0xe8,0x39,0xd7,0x23,0x88,
0x08,0x00,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xee,0x00,0x00,0x00,0x00,0x01,0x23,0x00,0x00};
uint8_t Digest[32] = {0};
uint8_t buffer1[39] = {0x27,
0x08,0x00,0x01,0x00,
0x23,0x66,0x17,0xc8,0xba,0x55,0xf9,0x56,0x71,0x93,0x16,0xdc,0x5d,0xa2,0x76,0x46,
0x14,0x85,0x46,0x95,0x31,0xaa,0x82,0x37,0x43,0xa6,0xe7,0xe8,0x39,0xd7,0x23,0x88,
0x00,0x00};
get_random_bytes(rand_buf,sizeof(rand_buf));
for(i = 0;i < 32;i++)
atsh204_print("%02X ",rand_buf[i]);
memcpy(&MsgBuf[SLOT_COUNT],rand_buf,32);
memcpy(&buffer1[SLOT_COUNT_DIG],rand_buf,32);
ii = rand_buf[1] % 13; //magic
atsh204_print("Slot Number =%d:\n ",ii);
switch(ii)
{
case 0:
memcpy(MsgBuf,&Buffer1[5],32);
break;
case 1:
memcpy(MsgBuf,&Buffer2[5],32);
break;
case 2:
memcpy(MsgBuf,&Buffer3[5],32);
break;
case 3:
memcpy(MsgBuf,&Buffer4[5],32);
break;
case 4:
memcpy(MsgBuf,&Buffer5[5],32);
break;
case 5:
memcpy(MsgBuf,&Buffer6[5],32);
break;
case 6:
memcpy(MsgBuf,&Buffer7[5],32);
break;
case 7:
memcpy(MsgBuf,&Buffer8[5],32);
break;
case 8:
memcpy(MsgBuf,&Buffer9[5],32);
break;
case 9:
memcpy(MsgBuf,&Buffer10[5],32);
break;
case 10:
memcpy(MsgBuf,&Buffer11[5],32);
break;
case 11:
memcpy(MsgBuf,&Buffer12[5],32);
break;
case 12:
memcpy(MsgBuf,&Buffer13[5],32);
break;
case 13:
memcpy(MsgBuf,&Buffer14[5],32);
break;
case 14:
memcpy(MsgBuf,&Buffer15[5],32);
break;
case 15:
memcpy(MsgBuf,&Buffer16[5],32);
break;
default:
break;
}
MsgBuf[SLOT_NUMBER] = ii;
buffer1[3] = ii;
atsh204_print("final MsgBuf .... .\n");
for(i=0; i<32; i++)
atsh204_print("%02X ",MsgBuf[i]);
atsh204_print("\n");
for(i=32; i<64; i++)
atsh204_print("%02X ",MsgBuf[i]);
atsh204_print("\n");
for(i=64; i<88; i++)
atsh204_print("%02X ",MsgBuf[i]);
atsh204_print("\n");
//memcpy(MsgBuf,Buffer3,32);
sha204c_calculate_crc(37,buffer1,&buffer1[37]);
atsha204_i2c_write_bytes(client,COMMAND_ADDRESS,buffer1,buffer1[0]);
msleep(50); //different commands have different delay times
i2c_master_recv(client, recbuf, 35);
ret = sha204c_check_crc(recbuf);
sha256_init(&ctx);
sha256_update(&ctx, MsgBuf, len);
sha256_final(&ctx, Digest);
atsh204_dbg(">>>>>> atsha204 digest is :\n");
for(i = 0;i < 32;i++){
atsh204_dbg("%02X ",Digest[i]);
if(recbuf[i+1] != Digest[i]){
atsh204_dbg(">>>>>>> atsha204 check fail : Digest[i] != recbuf[i+1] :%2X <<<<<<<<<<<<\n",Digest[i]);
ret = -1;
break;
}
if((i+1) % 16 == 0)
atsh204_dbg("\n");
if(i == 31)
atsh204_dbg(">>>>>>> atsha204 check success <<<<<<<<<<<<\n");
}
}
for(i = 0;i < 35;i++){
atsh204_print("%02X ",recbuf[i]);
if(i % 16 == 0)
atsh204_dbg("\n");
}
return 0;
}
ATSHA204A加密芯片之--MAC校验代码相关推荐
- atsha204a加密芯片使用攻略——配置篇
大家好,这是接上一篇使用篇的博客,本篇文章主讲atsha204a加密芯片的配置方式,前面讲到,atsha204a加密芯片内部rom分三个区域,一个是config zone,一个是slot zone,还 ...
- ATSHA204A加密芯片攻略——使用篇
ATSHA204A加密芯片是ATMEL公司研发的一款高安全性的,功能丰富的加密IC,使用SHA-256算法进行加密操作,内置16*32字节的slot(EEPROM)可以存储用户数据和秘钥,唯一的9字节 ...
- 蓝牙:CRC原理详解(附crc16校验代码)
CRC原理详解(附crc16校验代码) 参考链接: https://www.cnblogs.com/esestt/archive/2007/08/09/848856.html Cyclic Redun ...
- win 10 电脑与 H C-05蓝牙模块连接方法集合(含k60 CRC 校验代码软件下载地址)
在飞思卡尔比赛,有时需要通过蓝牙模块让电脑和小车连接,然后用串口将小车的实时数据发送到电脑,以便调车.但是在蓝牙模块与电脑连接时,因为驱动等原因,容易连接失败.经过网上搜查,与个人及队友试验,总结以下 ...
- ipv4、ipv6格式校验代码
ipv4.ipv6格式校验代码 一.题目 IPv4 地址格式: IPv4地址由4组十进制数组成,每组范围为 0 - 255,用"."分割. 注意:IPv4 地址内的数不能以 0 开 ...
- CRC-32校验和CRC-32校验代码
crc-32校验代码:测试结果如下 uint32_t crc32(uint8_t const * p_data, uint32_t size, uint32_t const * p_crc) { ...
- html保留两位小数php,JS保留两位小数输入数校验代码
这次给大家带来JS保留两位小数输入数校验代码,JS保留两位小数输入数校验的注意事项有哪些,下面就是实战案例,一起来看一下. 输入input 的格式校验:$(function(){ var data = ...
- 哪款Mac代码编辑器好用?Mac文本代码编辑器推荐—-CudaText for Mac
一款好的代码编辑器可以使工作更有效率,今天要给大家推荐一款Mac文本代码编辑器推荐--CudaText.CudaText Mac版是一款轻便好用的跨平台文本代码编辑器,具有很好的配置可能性和许多高级功 ...
- 在线 OJ 项目(三) · 处理项目异常 · UUID · 校验代码的安全性 · 阶段性总结
一.处理异常 二.区分不同请求的工作目录 UUID 对 Task 类进行重构 三.校验代码的安全性 四.阶段性总结 书接上回,我们自己测试没问题,是因为使用了正常数据:万一用户输入的是非法的请求,该咋 ...
最新文章
- 【Linux】10_存储管理EXT4文件系统详解
- 学习笔记Flink(二)—— Flink数据流模型、时间窗口和核心概念
- InnoDB与MyISAM等存储引擎对比
- java对象赋值给另一个对象_java面向对象编程
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- CSS中position的4种定位详解
- 在Windows中为文件添加“可执行”权限(chmod +x 文件名 不起作用)
- Python机器学习的一些文档
- MATLAB 图像滤波器
- 互联网金融消费利用场景化带动行业发展趋势
- linux进程cpu时间片,Linux性能监控之CPU篇
- github新手入门
- scrapy框架之全站数据的爬取
- 1051 复数乘法 (C++)
- GitChat · 软件工程 | 一小时教你学会 Maven 项目的构建与管理
- 【AUTOSAR】【以太网】Eth驱动
- docker学习——杂记
- go语言生成指定个数数字验证码
- 硒鼓带不带芯片区别_硒鼓芯片的价格为什么相差悬殊?
- C#模拟HTTP请求Post JSON