mbedtls 入门第四课--移植mbedtls到VS和ESP8266--8266SDK SHA256移植

2023-11-19

承接上篇,我们初步了解了mbedtls的文件路径以及文件作用以后就是想着如何将mbedtls移植到各种平台。

博主这里只有两种移植方法,第一是将代码移植到VS中,第二个是将代码移植到博主跑动的比较多的小众SOC ESP8266。

移植到ESP8266 SDK中采用了一种比较简单的方法,博主没有使用比较复杂的Mike修改方法,只是将代码复制过去,并将工程搭建起来,这里博主给出搭建的方法。

1.随便选一个ESP8266 的工程,如下所示。

 

2. 将mbedtls下的library和include两个文件复制到ESP8266的 SDK的路径下,这里博主不采用修改SDK的的mikefile文件的方式嵌入到SDK中,这样做到最小的修改数目。

3.将第三课中在VS中完美完成的测试的MD5代码或者SHA 256算法的代码放入到SDK中。

如将所有的include中的mbedtls代码直接复制到SDK的app\include路径下,如对比截图所示:

其中变化的地方就是博主主要patch的一个文件config.h配置文件。在该文件中,博主需要将仅适配Windows或Linux这种大型系统的特定宏注释掉。

当然这里有个比较取巧的方式,将原本属于mbedtls-2.14.1\configs下的config-mini-tls1_1.h直接复制替换 SDK mbedtls/config.h里面的内容,如图所示:

其中,博主尤其过滤了几个宏,这些宏经过博主的测试都是只能在Windows下发生作用,在ESP8266这种下面嵌入式平台下,会导致编译报错。

需要注释以下的宏:

MBEDTLS_NET_C

/**
 * \def MBEDTLS_NET_C
 *
 * Enable the TCP and UDP over IPv6/IPv4 networking routines.
 *
 * \note This module only works on POSIX/Unix (including Linux, BSD and OS X)
 * and Windows. For other platforms, you'll want to disable it, and write your
 * own networking callbacks to be passed to \c mbedtls_ssl_set_bio().
 *
 * \note See also our Knowledge Base article about porting to a new
 * environment:
 * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS
 *
 * Module:  library/net_sockets.c
 *
 * This module provides networking routines.
 */

根据博主的测试,以上的宏如果使能,会导致一些以太网功能的库文件编译失败,比如

 可以看出报错为找不到sys/socket.h以太网通讯使用的头文件,以及标注只能在一些大型系统中的报错提醒,对于博主来说直接禁用这个宏,解决所有问题。

MBEDTLS_FS_IO

 /**
 * \def MBEDTLS_FS_IO
 *
 * Enable functions that use the filesystem.
 */

 这个函数是因为博主所使用的是freertos的小型系统,里面并不具有文件系统功能,所以直接禁用了。不禁用也会出现编译报错问题,更为深刻的问题,博主没有探究,反正和本次移植Hash算法无关。

4.引用博主使用的配置文件的宏

#ifndef MBEDTLS_CONFIG_H
#define MBEDTLS_CONFIG_H

/* System support */
#define MBEDTLS_HAVE_ASM
#define MBEDTLS_HAVE_TIME

/* mbed TLS feature support */
#define MBEDTLS_CIPHER_MODE_CBC
#define MBEDTLS_PKCS1_V15
#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
#define MBEDTLS_SSL_PROTO_TLS1_1

/* mbed TLS modules */
#define MBEDTLS_AES_C
#define MBEDTLS_ASN1_PARSE_C
#define MBEDTLS_ASN1_WRITE_C
#define MBEDTLS_BIGNUM_C
#define MBEDTLS_CIPHER_C
#define MBEDTLS_CTR_DRBG_C
#define MBEDTLS_DES_C
#define MBEDTLS_ENTROPY_C
#define MBEDTLS_MD_C
#define MBEDTLS_MD5_C
//#define MBEDTLS_NET_C
#define MBEDTLS_OID_C
#define MBEDTLS_PK_C
#define MBEDTLS_PK_PARSE_C
#define MBEDTLS_RSA_C
#define MBEDTLS_SHA1_C
#define MBEDTLS_SHA256_C
#define MBEDTLS_SSL_CLI_C
#define MBEDTLS_SSL_SRV_C
#define MBEDTLS_SSL_TLS_C
#define MBEDTLS_X509_CRT_PARSE_C
#define MBEDTLS_X509_USE_C

/* For test certificates */
#define MBEDTLS_BASE64_C
#define MBEDTLS_CERTS_C
#define MBEDTLS_PEM_PARSE_C
#define MBEDTLS_ENTROPY_HARDWARE_ALT
/* For testing with compat.sh */
//#define MBEDTLS_FS_IO
#define MBEDTLS_NO_PLATFORM_ENTROPY
#include "mbedtls/check_config.h"

#endif /* MBEDTLS_CONFIG_H */

以上的宏能够用支持HASH算法,RSA算法,其他的算法等待后续探索,但是完全能够满足本次使用的。

5.C库文件的使用

将library下的C文件直接复制到app\driver下,当然要注意不要使用到mbedtls的mikefile,而是沿用ESP8266的milefile文件,请参考博主的步骤,但是ESP8266 driver下的6个文件要保留。

 

 7. 后续就是直接使用博主的代码

#if !defined(MBEDTLS_CONFIG_FILE)
#include "mbedtls/config.h"
#else
#include MBEDTLS_CONFIG_FILE
#endif
#include "mbedtls/sha256.h"

void test_hash()
{
    int i;
    mbedtls_sha256_context sha256_ctx;

    const unsigned char encrypt[] = "hello_worled1234";
    os_printf("SHA-256 加密\n");
    mbedtls_sha256_init(&sha256_ctx);
    mbedtls_sha256_starts(&sha256_ctx, 0); // 0表示传sha256 , 1 表示传SHA-244
    mbedtls_sha256_update(&sha256_ctx, encrypt, strlen((char *)encrypt));
    mbedtls_sha256_finish(&sha256_ctx, hash);

    os_printf("SHA256加密前:[%s]\n", encrypt);
    os_printf("SHA256加密后:");
    for( i = 0; i < 32; i++)
    {
        os_printf("%02x", hash[i]);
        //os_printf("%02x", i);
    }
    os_printf("\r\n");

    mbedtls_sha256_free(&sha256_ctx);
}

主函数运行位置:

void user_init(void)
{
    uart_init_new();
    printf("SDK version:%s\n", system_get_sdk_version());

    printf("Ai-Thinker Technology Co. Ltd.\r\n%s %s\r\n", __DATE__, __TIME__);
    printf("Hello,World!\r\n");
    //xTaskCreate(test_hash, "test_hash", 2048, NULL, 4, NULL);
    //xTaskCreate(test_rsa, "test_rsa", 2048, NULL, 5, NULL);
    while(1)
    {
    //test_AES();
    //test_hash();
    test_rsa();
    //vTaskDelay(8 / portTICK_RATE_MS);
    }
    //test_rsa();
}
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mbedtls 入门第四课--移植mbedtls到VS和ESP8266--8266SDK SHA256移植 的相关文章

随机推荐

  • 【技术经验分享】计算机毕业设计Python+Spark视频推荐系统 短视频推荐系统 视频流量预测系统 短视频爬虫 视频数据分析 视频可视化 视频大数据 大数据毕业设计 大数据毕设

    开发技术 前端 vue js websocket element ui echarts 后端 springboot mybatis plus 数据库 mysql neo4j图数据库 知识图谱 数据分析 hadoop spark实时计算 算法
  • TscanCode代码扫描工具

    TscanCode介绍 TscanCode 是腾讯研发的静态代码扫描工具 最早的版本是基于 cppcheck 二次开发 之后又重新自研 不仅支持 C 还支持 C Lua 语言 在发掘 C 空指针 越界 未初始化 C 空引用 Lua变量未初始
  • 活动报名|如何使用70万预算从头训练千亿语言大模型

    王业全 北京智源人工智能研究院认知模型团队负责人 清华大学博士 中国中文信息学会情感计算专委会委员 2022年被评为AI 2000全球最具影响力人工智能学者 自然语言处理领域 主要从事语言大模型 自然语言处理方面的研究工作 代表成果有 FL
  • shell脚本读取csv数据迁移文件

    前言 仅记录学习笔记 如有错误欢迎指正 最近 这段时间一直在忙数据迁移的问题 现在碰见的问题是需要将目标服务器上的文件导入到本地库 思路 我们需要的数据不多 但是服务器上特别多 所以通过查询目标文件的目录位置和文件名称 导出为csv文件 之
  • Vue + ElementUI 实现批量删除功能

    第一步 在el table 组件绑定 selection change事件 第二步 在调用父组件的子组件中添加当表格项发生变化时会触发事件函数 selectionChange val 在method 函数中添加如下代码 selectionC
  • 从零基础开始开发自己的第一个微信小程序

    文章目录 内容介绍 小程序开发步骤 注册微信小程序账号 下载开发工具搭建开发环境 创建工程编写代码 手机上查看效果 工程里的文件作用介绍 总结 内容介绍 通过本篇blog 你可以熟悉从零开始 搭建小程序开发环境 并运行起自己的第一个小程序
  • QT中slot,signal,emit讲解

    Qt中的类库有接近一半是从基类QObject上继承下来 信号与反应槽 signals slot 机制就是用来在QObject类或其子类间通讯的方法 作为一种通用的处理机制 信号与反应槽非常灵活 可以携带任意数量的参数 参数的类型也由用户自定
  • 条码编码-Code39

    近来在研究条码的实现 遇到一些坑 现在把自己遇到的一些情况分享一下 世界上约有225种以上的条形码 一般较流行的有 39码 EAN码 UPC 码 128码 以及专门用於书刊管理的ISBN ISSN等 我们先从Code39码开始 Code39
  • 电子设计竞赛之备战

    一 学习框架 1 单片机编程 C语言 用来采集各种传感器的数据 控制各种电机 多写程序多看书 单片机学习的四个层次 1 完成单片机开发板的学习 理解单片机的工作 能看懂单片机程序 2 能够照着芯片手册 datasheet 试着编写各类芯片的
  • Tomcat启动Alias name [null] does not identify a key entry报错分析,涉及从公钥(CER)+私钥(KEY)转换为jks证书的方法

    先说原因是什么 之前百度 谷歌 CSDN上也搜过 搜到最多的答案是server xml中缺少指定keyAlias xxx 但是试了以后会发现还是报这个错 只是报错由Alias name null does not identify a ke
  • 【app测试】adb常用指令及华为卸载预置软件

    adb基础指令 1 adb devices 显示当前运行的全部Android设备 2 adb s 设备编号 对某一设备执行命令 3 adb install APK路径 安装应用程序 r表示replace覆盖安装 连接了多台设备时 需要指定设
  • ubuntu 12.04下双网卡绑定实现负载和冗余

    有一个需求是ubuntu下双网卡绑定 上连交换机已配置好 现在需要配置服务器 以下是配置过程 apt get install ifenslave 2 6 modprobe bonding 自动加载 编辑以下文件 vi etc mod 添加如
  • 「2020年大学生电子设计竞赛分享」电源题,省一等奖!

    点击上方 大鱼机器人 选择 置顶 星标公众号 福利干货 第一时间送达 01 到底参不参赛 嗡嗡嗡 随着手机的一声振动 锁屏弹出了消息提醒 没看全文 依稀瞄到2020 TI杯 几个字眼我便知道自己将面临一个艰难的抉择 庚子年春 突如其来的新型
  • 芜湖,前端这波起飞!

    前天加完班 回家路上翻了下粉丝群 发现群里最近在疯传一份叫 前端offer收割机养成指南 的资料 本来感觉这个title看起来有点离谱 结果没想到仔细一看 这份资料竟然真的有点东西 内容收纳的很全 而且融合了很多今年的新玩意 据我所知有人靠
  • BSD、Apache、MIT、GPL、LGPL几种常见的开源协议

    转载地址 https www cnblogs com Vito2008 p 4806677 html 1 BSD开源协议 original BSD license FreeBSD license Original BSD license B
  • u盘安装ubuntu问题:卡在引导界面不动

    问题 一直卡在如图界面不动 分析 既然一直提示syslinux 那我们就看看他是什么东西吧 原因 syslinux分区引导记录问题 解决方案1 安装bootice软件 将制作好的启动盘插入电脑 用bootice更改syslinux引导记录
  • 8.10:如何在Python中判断文件类型?

    在计算机科学领域中 文件类型判断是一个非常基础和重要的问题 不同类型的文件需要采取不同的处理方式 因此在处理文件时 我们需要准确地判断文件类型 Python作为一门流行的编程语言 提供了许多方法来判断文件类型 在本文中 我们将介绍几种常见的
  • @vitejsplugin-vue requires vue (>=3.2.13) or @vuecompiler-sfc to be present in the dependency tree

    运行项目的时候 首先会提示要安装 vue compiler sfc 但是安装后运行项目成功但是页面是空白并且报错 VUE HMR RUNTIME is not defined 摸索了半天 查看到package json依赖文件 没有vue
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • mbedtls 入门第四课--移植mbedtls到VS和ESP8266--8266SDK SHA256移植

    承接上篇 我们初步了解了mbedtls的文件路径以及文件作用以后就是想着如何将mbedtls移植到各种平台 博主这里只有两种移植方法 第一是将代码移植到VS中 第二个是将代码移植到博主跑动的比较多的小众SOC ESP8266 移植到ESP8