1079|2

274

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

[ ST NUCLEO-U575ZI-Q 测评] 7-TrustZone工程的实践 [复制链接]

这几天研究了下密码学,准备试试板子上的硬件AES模块,这时候才发现硬件AES模块是在U585芯片上才有的。先弄一个假的加密算法吧。

这个项目是通过串口1接收字符串,串口1是在非安全区工作的。收到的数据调用安全区的加密函数,将其转换成密文,在通过串口1发送回去。

因此需要在NSC区实现2个功能:

1. 在非安全区创建一个缓存区,然后注册到安全区,供安全区将密文传递到非安全区。这就需要1个注册函数;

2. 还需要一个NSC的接口函数,供非安全区调用对收到的字符串进行加密。

注册缓存区的代码如下:

uint8_t *ptr_buf;
CMSE_NS_ENTRY void SECURE_RegisterCallback(SECURE_CallbackIDTypeDef CallbackId, void *func)
{
  if(func != NULL)
  {
    switch(CallbackId)
    {
	  case REGISTER_BUF_ID:
		ptr_buf = (uint8_t*)func;
        break;
      default:
        /* unknown */
        break;
    }
  }
}

供非安全区使用的加密函数如下:

CMSE_NS_ENTRY uint16_t encrypt_callback(uint8_t* plaintext,uint8_t len)
{
	memcpy(ptr_buf,"Encrypt:",8);
	memcpy(ptr_buf+8,plaintext,len);
	ptr_buf[len+8] = 0;

	return len+9;
}

因为这两个函数都是在NSC区的,所以函数前面都有前缀 CMSE_NS_ENTRY 。

在非安全区首先要注册缓存区,然后通过串口接收字符串,再调用加密的接口函数,获取密文,代码如下:

SECURE_RegisterCallback(REGISTER_BUF_ID,ciphertext_buf);
while (1){
  if(get_plaintext_text() != 0){
	HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin);
	uint16_t len = 0;
	len = encrypt_callback(plaintext_buf,recv_len);
	HAL_UART_Transmit(&huart1,ciphertext_buf,len,1000);
}

在编译代码的时候也要注意,需要先编译安全区的代码,因为非安全区的代码要调用安全区代码生成的一个库文件。如果先编译非安全区代码的话,会报错。

运行效果,当发送一个字符串后,会回复加了前缀"Encrypt:"的字符串,如下图所示

 

代码工程如下:

 

001.rar

16.31 MB, 下载次数: 0

工程文件

此帖出自无线连接论坛

最新回复

测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html   详情 回复 发表于 2023-1-12 09:22
点赞 关注
 

回复
举报

6815

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

楼主的假加密算法也是很逼真

此帖出自无线连接论坛
 
 

回复

1万

帖子

2853

TA的资源

管理员

板凳
 

测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html

此帖出自无线连接论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表