mbedtls 入门第四课--移植mbedtls到VS和ESP8266--8266SDK SHA256移植
承接上篇,我们初步了解了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移植相关推荐
- C#编程入门第四课,异常,switch-case选择结构,循环结构 while,break作用,do-while循环
C#编程入门第四课 文章目录 C#编程入门第四课 1.异常 2. switch- case选择结构 3. 循环结构 while 4. break 作用 5. do-while循环 1.异常 那行代码有 ...
- Flash鼠绘入门第四课:绘制漂亮的梅花
本课教学内容与目的:通过学习画梅花进一步掌握 flash 软件中线条工具.椭圆工具.混色器.变形面版.填充变形工具的使用. 一.先观看一下梅花的形态,建立梅花色形的感性认识. [img]/upload ...
- Python基础入门第四课--字符编码
这一节本来是和上一节的变量.函数写在一起的,由于是基础入门,写的太多会理解不了,所以将这部分分开来阐述.这里主要说字符编码的相关问题. 1.字符编码 在C语言中,我们学到最基础最重要的概念莫过于字符串 ...
- 韩语学习之——基础入门第四课辅音
一 概念 辅音分类: 送气音 紧音 二 送气音 2.1 不送气音 No 韩语 汉语发音 1 ㄱ 可(ke) 2 ㄷ 特(te) 3 ㅂ 破(po) 4 ㅈ 次(ci) 2.2 送气音 No 韩语 汉语 ...
- Flash鼠绘入门第四课:绘制漂亮的梅花-梅花照片分析与学习
一.先观看一下梅花的形态,建立梅花色形的感性认识. 梅花照片1 梅花照片2 梅花照片3 打开 flash 软件建一文档并保存为<梅花>,属性默认. 一.新建图形元件-梅花1 1.把图层1改 ...
- Flash鼠绘入门第四课:绘制漂亮的梅花-梅花骨朵Flash鼠绘方法
四.插入新建图形元件花骨朵 1.把图层 1 改名为花,用椭圆工具填充色禁止笔触随意,画一椭圆,用选择工具调整,填充色如梅花1,用填充变形工具调整删除边线如图: 梅花画法4-a 2.插入图层2改名为花托 ...
- Flash鼠绘入门第四课:绘制漂亮的梅花-梅花Flash鼠绘方法一
3.插入图层2改名为花2,复制花 1图层的第一帧粘贴到花2图层第1帧,用变形面版约束打勾,宽改为80%回车,再用任意变形工具把这花2稍稍旋转一下角度,如图: 梅花画法1-b 4.插入图层3改名为花蕊1 ...
- 打开程序时固定位置_新手入门第五课:免费开源图像处理程序GIMP之矩形选择工具...
GIMP是一款图像处理软件,是跟Photoshop同一类型的软件,为了方便介绍,后面每篇相关GIMP图像处理软件的介绍文章的开头,我都将插入一段文字,用于介绍GIMP是什么,让不熟悉的朋友知道这是干什 ...
- java包名和类名可以一样吗_Java入门第三课:Java基本语法
Java基础 编写Java程序时,应注意以下几点: 1.大小写敏感: Java是大小写敏感的,这就意味着标识符Hello与hello是不同的.有些操作系统不区分大小写,不区分的话,文件名是不完全正确的 ...
最新文章
- 边缘检测、Hough变换、轮廓提取、种子填充、轮廓跟踪
- 更智能:人工智能与能源行业的革命
- 【NLP新闻-2013.06.03】New Book Where Humans Meet Machines
- mysql排序1 10 11_MySQL中的排序
- DIV周边添加投影及背景固定
- 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )
- 支付宝的高可用与容灾架构演进
- 多线程“基础篇”11之 生产消费者问题
- android自定义底部中间突出导航栏,Android选中突出背景效果的底部导航栏功能
- Python——eventlet.greenpool
- 本想制衡经销商价格,不料成为黄牛货源地!茅台电商公司被迫解散!
- oracle分同步事务和异步事务,oracle的事务隔离
- IE Adobe Flash Player版本已是最新,界面仍然提示版本过旧原因
- 轻松看懂P(Y=y|x;θ)表示的含义
- 达梦数据库大小写这个参数敏感怎样设置
- 如何进行 360 评估
- Word中怎样在方框里打钩?方框里打钩的符号的方法
- 空间分析方法在计算机上的应用,空间分析
- 概率分布分位点_概率统计计量经济学_假设检验中的重要概念_分位点/p值
- 移动硬盘更改驱动器号和路径_如何在Windows 10中更改默认硬盘驱动器以保存文档和应用程序...
热门文章
- 人工智能—语音识别技术发展史
- 低功耗蓝牙开发入门概念科普
- Java变态题目(持续更新)
- 扫盲:什么是单片机时序,如何看懂时序图
- 不懂这些高并发分布式架构、分布式系统的数据一致性解决方案,你如何能找到高新互联网工作呢?强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构...
- 图片的高频与低频分量 初识 与 相关博客
- 【USB笔记】 USB2.0 包格式 握手包Handshake Packets
- xsd文件 -- 伤痛
- 什么是 “零” 拷贝?
- 为什么总学不好PS?300集PS从入门到高级自学教程,全面且系统