承接上篇,我们初步了解了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();
}

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

  1. C#编程入门第四课,异常,switch-case选择结构,循环结构 while,break作用,do-while循环

    C#编程入门第四课 文章目录 C#编程入门第四课 1.异常 2. switch- case选择结构 3. 循环结构 while 4. break 作用 5. do-while循环 1.异常 那行代码有 ...

  2. Flash鼠绘入门第四课:绘制漂亮的梅花

    本课教学内容与目的:通过学习画梅花进一步掌握 flash 软件中线条工具.椭圆工具.混色器.变形面版.填充变形工具的使用. 一.先观看一下梅花的形态,建立梅花色形的感性认识. [img]/upload ...

  3. Python基础入门第四课--字符编码

    这一节本来是和上一节的变量.函数写在一起的,由于是基础入门,写的太多会理解不了,所以将这部分分开来阐述.这里主要说字符编码的相关问题. 1.字符编码 在C语言中,我们学到最基础最重要的概念莫过于字符串 ...

  4. 韩语学习之——基础入门第四课辅音

    一 概念 辅音分类: 送气音 紧音 二 送气音 2.1 不送气音 No 韩语 汉语发音 1 ㄱ 可(ke) 2 ㄷ 特(te) 3 ㅂ 破(po) 4 ㅈ 次(ci) 2.2 送气音 No 韩语 汉语 ...

  5. Flash鼠绘入门第四课:绘制漂亮的梅花-梅花照片分析与学习

    一.先观看一下梅花的形态,建立梅花色形的感性认识. 梅花照片1 梅花照片2 梅花照片3 打开 flash 软件建一文档并保存为<梅花>,属性默认. 一.新建图形元件-梅花1 1.把图层1改 ...

  6. Flash鼠绘入门第四课:绘制漂亮的梅花-梅花骨朵Flash鼠绘方法

    四.插入新建图形元件花骨朵 1.把图层 1 改名为花,用椭圆工具填充色禁止笔触随意,画一椭圆,用选择工具调整,填充色如梅花1,用填充变形工具调整删除边线如图: 梅花画法4-a 2.插入图层2改名为花托 ...

  7. Flash鼠绘入门第四课:绘制漂亮的梅花-梅花Flash鼠绘方法一

    3.插入图层2改名为花2,复制花 1图层的第一帧粘贴到花2图层第1帧,用变形面版约束打勾,宽改为80%回车,再用任意变形工具把这花2稍稍旋转一下角度,如图: 梅花画法1-b 4.插入图层3改名为花蕊1 ...

  8. 打开程序时固定位置_新手入门第五课:免费开源图像处理程序GIMP之矩形选择工具...

    GIMP是一款图像处理软件,是跟Photoshop同一类型的软件,为了方便介绍,后面每篇相关GIMP图像处理软件的介绍文章的开头,我都将插入一段文字,用于介绍GIMP是什么,让不熟悉的朋友知道这是干什 ...

  9. java包名和类名可以一样吗_Java入门第三课:Java基本语法

    Java基础 编写Java程序时,应注意以下几点: 1.大小写敏感: Java是大小写敏感的,这就意味着标识符Hello与hello是不同的.有些操作系统不区分大小写,不区分的话,文件名是不完全正确的 ...

最新文章

  1. 边缘检测、Hough变换、轮廓提取、种子填充、轮廓跟踪
  2. 更智能:人工智能与能源行业的革命
  3. 【NLP新闻-2013.06.03】New Book Where Humans Meet Machines
  4. mysql排序1 10 11_MySQL中的排序
  5. DIV周边添加投影及背景固定
  6. 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )
  7. 支付宝的高可用与容灾架构演进
  8. 多线程“基础篇”11之 生产消费者问题
  9. android自定义底部中间突出导航栏,Android选中突出背景效果的底部导航栏功能
  10. Python——eventlet.greenpool
  11. 本想制衡经销商价格,不料成为黄牛货源地!茅台电商公司被迫解散!
  12. oracle分同步事务和异步事务,oracle的事务隔离
  13. IE Adobe Flash Player版本已是最新,界面仍然提示版本过旧原因
  14. 轻松看懂P(Y=y|x;θ)表示的含义
  15. 达梦数据库大小写这个参数敏感怎样设置
  16. 如何进行 360 评估
  17. Word中怎样在方框里打钩?方框里打钩的符号的方法
  18. 空间分析方法在计算机上的应用,空间分析
  19. 概率分布分位点_概率统计计量经济学_假设检验中的重要概念_分位点/p值
  20. 移动硬盘更改驱动器号和路径_如何在Windows 10中更改默认硬盘驱动器以保存文档和应用程序...

热门文章

  1. 人工智能—语音识别技术发展史
  2. 低功耗蓝牙开发入门概念科普
  3. Java变态题目(持续更新)
  4. 扫盲:什么是单片机时序,如何看懂时序图
  5. 不懂这些高并发分布式架构、分布式系统的数据一致性解决方案,你如何能找到高新互联网工作呢?强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构...
  6. 图片的高频与低频分量 初识 与 相关博客
  7. 【USB笔记】 USB2.0 包格式 握手包Handshake Packets
  8. xsd文件 -- 伤痛
  9. 什么是 “零” 拷贝?
  10. 为什么总学不好PS?300集PS从入门到高级自学教程,全面且系统