当前位置: 首页 > news >正文

STM32嵌入式移植GmSSL库

前言

最近在做一个换电柜的项目,需要和云端平台对接json协议,由于服务端规定了,需要采用sm2 sm3 sm4用来加密。在嵌入式方面只能用北京大学的GmSSL了。

下载GmSSL

https://github.com/guanzhi/GmSSL下载库
也可以通过git命令下载,下载不了,请注意科学上网。
git clone https://github.com/guanzhi/GmSSL
我采用的3.0.0版本
git checkout 3.0.0

在linux下测试一下库是否能用

编译
mkdir build
cd build
cmake ..
cmake --build .
在build\bin可以看到有aestest block_ciphertest cmstest ectest gmssl hkdftest...等等可执行文件了。
测试通过后下面可以移植到嵌入式平台了。

添加一些缺少的C标准库函数

添加syscalls.c文件放到src目录下

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <time.h>  // 包含timegm需要的头文件
#include <stdio.h> // 用于assert// 用于断言的简单实现
void _exit(int status) { return; }void *_sbrk_r(struct _reent *r, int nbytes)
{extern char _end; // 末尾符号static char *heap_end;char *prev_heap_end;if (heap_end == 0){heap_end = &_end; // 初始化堆指针}prev_heap_end = heap_end;heap_end += nbytes;return (char *)prev_heap_end;
}int _write(int file, char *ptr, int len)
{// 将数据写入特定的输出设备,通常是串口return -1;
}int _open(const char *pathname, int flags)
{return -1;
}
int _close(int file) { return-1; }int _fstat(int file, struct stat *st) { return -1; }int _isatty(int file)
{return 1; // 默认所有文件为终端
}int _lseek(int file, int ptr, int dir) { return -1; }int _read(int file, char *ptr, int len)
{return -1;
}// 添加 _assert 函数
void _assert(const char *expr, const char *file, int line)
{// 这里可以根据需要处理// 例如:输出错误信息,或进入死循环while (1){// 进入死循环,或者根据需要重启系统}
}// 添加 timegm 函数
time_t timegm(struct tm *tm)
{// 这里可以实现根据 tm 结构计算 UTC 时间// 一个简单的实现示例,具体实现可能需要根据需要调整time_t seconds = 0;// 计算总秒数(这是一个简化的示例,实际可能需要更多处理)seconds += tm->tm_sec;seconds += tm->tm_min * 60;seconds += tm->tm_hour * 3600;seconds += (tm->tm_year - 70) * 31536000; // 1970年起的年数seconds += (tm->tm_mon) * 2592000;        // 简化的月份处理seconds += (tm->tm_mday - 1) * 86400;     // 日数return seconds;
}

GmSSL依赖随机数

修改src/rand.c为如下伪随机数函数

/**  Copyright 2014-2022 The GmSSL Project. All Rights Reserved.**  Licensed under the Apache License, Version 2.0 (the License); you may*  not use this file except in compliance with the License.**  http://www.apache.org/licenses/LICENSE-2.0*/#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <gmssl/rand.h>
#include <gmssl/error.h>#define RAND_MAX_BUF_SIZE 4096
static uint32_t seed = 123456789; // 初始种子static uint32_t lcg_rand()
{seed = (1103515245 * seed + 12345) % (1U << 31);return seed;
}int rand_bytes(uint8_t *buf, size_t len)
{if (!buf) {return -1;}if (len > RAND_MAX_BUF_SIZE) {return -1;}if (!len) {return 0;}for (size_t i = 0; i < len; i++) {buf[i] = lcg_rand() & 0xFF; // 取低8位}return 1;
}

编译通过,可以生成sm2test.elf没有链接错误了。

相关文章:

STM32嵌入式移植GmSSL库

前言 最近在做一个换电柜的项目&#xff0c;需要和云端平台对接json协议&#xff0c;由于服务端规定了&#xff0c;需要采用sm2 sm3 sm4用来加密。在嵌入式方面只能用北京大学的GmSSL了。 下载GmSSL 在https://github.com/guanzhi/GmSSL下载库 也可以通过git命令下载&#x…...

【mod分享】极品飞车10高清模组,,全新道路,全新建筑,高清植被,全新的道路围栏,全新的天空,画质直逼极品飞车20。支持光追

各位好&#xff0c;今天小编给大家带来一款新的高清重置魔改MOD&#xff0c;本次高清重置的游戏叫《极品飞车10卡本峡谷》。 《极品飞车10&#xff1a;卡本峡谷》该游戏可选择四个模式&#xff1a;生涯、快速比赛、挑战赛、多人连线游戏模式&#xff08;已不可用&#xff09;&…...

使用U-KAN训练自己的数据集 — 医疗影像分割

<U-KAN Makes Strong Backbone for Medical Image Segmentation and Generation> U-Net已成为各种视觉应用的基石,如图像分割和扩散概率模型。虽然通过整合变压器或mlp引入了许多创新设计和改进,但网络仍然局限于线性建模模式以及缺乏可解释性。为了应对这些挑战,受到…...

游戏盾在防御DDoS与CC攻击中的作用与实现

随着网络游戏的普及和发展&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击和CC&#xff08;Challenge Collapsar&#xff09;攻击成为了游戏服务器面临的主要威胁之一。游戏盾作为一种专门针对游戏行业设计的防御解决方案&#xff0c;能够在很大程度上减轻甚至消除…...

为什么说红帽认证(RHCE)是网络工程师的万金油证书?

在网络工程师圈子里&#xff0c;大家都知道考证的重要性&#xff0c;但面对一堆琳琅满目的认证&#xff0c;你可能会疑惑到底哪个证书含金量高、适用面广&#xff1f; 如果你问我&#xff0c;红帽认证&#xff08;RHCE&#xff09;绝对是当之无愧的“万金油”证书&#xff0c;…...

89.【C语言】编译和链接

1.翻译环境和运行环境总述 翻译环境:源代码被转换为机器码(又称为二进制指令)(包含编译和链接两个过程)依赖此环境 运行环境:可执行程序(Windows下的*.exe)到输出结果依赖此环境 2.翻译环境 翻译环境的解释 拆分为预处理(又称为预编译),编译和汇编三个过程 VS下的编译器:…...

优秀学员统计

题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动&#xff0c;他们开展这项学习活动已经一个月了&#xff0c;所以想统计下这个月优秀的打卡员工。每个员工会对应一个id&#xff0c;每天的打卡记录记录当天打卡员工的id集合&#xff0c;一共30天。 请你实现代码帮…...

电脑程序变化监控怎么设置?实时监控电脑程序变化的五大方法,手把手教会你!

​在现代办公和信息安全领域&#xff0c;实时监控电脑程序变化是一项至关重要的任务。 无论是企业内网安全、员工行为审计&#xff0c;还是个人电脑的隐私保护&#xff0c;了解并设置有效的监控方法都是必不可少的。 本文将详细介绍五种电脑程序变化监控的方法&#xff0c;帮助…...

2.1.3 编码和调制(下)

常用的调制方法 例题&#xff1a; 常用的QAM调制方案&#xff1a; QAM-16 即调制16种信号&#xff0c;1码元携带log2 164 bit数据 QAM-32 即调制32种信号&#xff0c;1码元携带log2 325 bit数据 QAM-64 即调制64种信号&#xff0c;1码元携带log2 646 bit数据 解题过程&…...

【网络安全渗透测试入门】之XSS漏洞检测、利用和防御机制XSS游戏(非常详细)收藏这一篇就够了!

一、前言 这是我给粉丝盆友们整理的网络安全渗透测试入门阶段XSS攻击基础教程。 本教程主要讲解XSS漏洞检测、利用和防御机制。 喜欢的朋友们&#xff0c;记得给我点赞支持和收藏一下&#xff0c;关注我&#xff0c;学习黑客技术。 Web的安全问题越来越严重&#xff0c;漏洞…...

[ComfyUI]Flux:超赞古风少女LORA,唯美江南水乡小桥流水轻舟江南美人

在数字艺术的世界里&#xff0c;ComfyUI的Flux技术再次展现了它的独特魅力。这次&#xff0c;它带来了一个全新的古风少女LORA模型&#xff0c;让用户能够轻松地创作出唯美江南水乡的场景&#xff0c;感受江南的韵味和小桥流水的诗意。 ComfyUI的Flux技术结合了先进的图像处理…...

从蚂蚁金服面试题窥探STW机制

背景 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;垃圾回收&#xff08;GC&#xff09;是一个至关重要的机制&#xff0c;它负责自动管理内存的分配和释放。然而&#xff0c;垃圾回收过程并非没有代价&#xff0c;其中最为显著的一个影响就是STW&#xff08;Stop-T…...

【MySQL数据库】MySQL高级语句(SQL语句进阶版)

文章目录 SQL语句进阶版MySQL查询数据的过程一、连接与身份验证二、查询缓存&#xff08;MySQL 8.0之前版本&#xff09;三、查询解析与优化四、查询执行五、返回结果 MySQL语句准备环境创建 location 表并插入数据创建 store_info 表并插入数据查询示例 语句示例SELECTDISTINC…...

Milvus 到 TiDB 向量迁移实践

作者&#xff1a; caiyfc 原文来源&#xff1a; https://tidb.net/blog/e0035e5e 一、背景 我最近在研究使用向量数据库搭建RAG应用&#xff0c;并且已经使用 Milvus、Llama 3、Ollama、LangChain 搭建完成。最近通过活动获取了 TiDB Cloud Serverless 使用配额&#xff…...

springboot集成jsoup解析xml文件

springboot集成jsoup解析xml文件 1、引入依赖2、xml转成需要的map结构3、测试数据 1、引入依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.16.2</version></dependency>2、xml转成需…...

基于Springboot相亲网站系统的设计与实现

基于 Springboot相亲网站系统的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https…...

解决提示”warning C317 attempt to redefine macro ‘XX‘“问题

今天来分享一个之前在开发时候遇到的一个告警&#xff0c;是一个关于不正当使用宏定义产生的告警。 先看告警提示&#xff1a;warning C317: attempt to redefine macro ‘WIFI_UART_SEND_BUF’&#xff1b; 意思是该宏定义存在重新定义&#xff1b; 而为什么编译器会这样提示…...

3D图片动画效果组件封装

1.效果 3D图片动画效果 2.组件部分 import "./index.less"/*** 3D图片动画效果* pictures: 图片数组[封面,英雄,标题]*/ export const Picture3D (props: any) > {console.log("3D图片动画效果", props)return <divclassNamepicture3DonClick{prop…...

高级优化算法之 fminunc函数 实践

说明 在本专栏机器学习_墨#≯的博客-CSDN博客前面几篇文章中&#xff0c;大多采用梯度下降法来求解。其实还有很多的高级优化算法可以用来求解回归和分类问题&#xff0c;本文就是在吴恩达机器学习视频课程[1]的启示下&#xff0c;想要简单尝试一下Matlab自带的无约束多变量函数…...

1.5 ROS架构

到目前为止&#xff0c;我们已经安装了ROS&#xff0c;运行了ROS中内置的小乌龟案例&#xff0c;并且也编写了ROS小程序&#xff0c;对ROS也有了一个大概的认知&#xff0c;当然这个认知可能还是比较模糊并不清晰的&#xff0c;接下来&#xff0c;我们要从宏观上来介绍一下ROS的…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...