mbedtls学习笔记
1.关于mbedtls
1.主要提供了的 SSL/TLS 支持(在传输层对网络进行加密),各种加密算法,各种哈希算法,随机数生成以及 X.509(密码学里公钥证书的格式标准)的支持。
2.mbedTLS 支持的加密算法含对称加密和非对称加密。
mbedTLS 支持的对称加密算法有:
AES, ARCFOUR, Blowfish/BF, Camellia, DES/3DES, GCM, XTEA。加密和解密用到的密钥是相同的,加密速度快,适合数据收发通信,缺点是密钥的传输略麻烦。
mbedTLS 支持的非对称加密算法有:
Diffie-Hellman-Merkle, RSA, Elliptic Curves over GF§, Elliptic Curve Digital Signature Algorithm (ECDSA)和 Elliptic Curve Diffie Hellman (ECDH)加密和解密用的密钥是不同的,加密的速度慢,适合密钥的传输。
2.STM32移植方法
移植mbedtls开源库到stm32有3种方法:
① 针对STM32CubeMX中Middleware下面已经提供mbedtks库的情况:直接使用cubeMX配置即可;
② 针对STM32CubeMX中没有提供mbedtls库的情况:手动下载源码移植。
2.1STM32cubemx移植
1.开启RNG外设支持(可选)
一些STM32系列中有RNG外设(随机数发生器),如果有的话就开启,没有就不用开启
2.RTC支持和网络支持(可选)
网络支持需要提供一套TCP/IP协议栈,比如基于AT模组的SAL层、lwip协议栈等,这里我们不使用网络连接功能,后续在带操作系统移植时讲解。
RTC支持是为了校验CA证书有效期提供时间支持,这里我们不使用时间功能,后续在带操作系统移植时讲解。
3.开启mbedtls库
在Middleware下开启mbedtls库支持:
4. 配置mbedtls
mebdtls库提供的算法非常多,全都通过宏定义来配置。
① 特性配置:保持默认即可。
② 使用功能模块配置(重点):
5. 编写测试代码
main.c增加如下代码
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "mbedtls/sha1.h" //使用sha1相关加密函数
#include "string.h" //使用到了strlen函数
/* USER CODE END Includes */
-----------------------------------
/* USER CODE BEGIN 2 */
printf("mbedtls port on ATK-STM32F407 board by mculover666\r\n");
/* sha1 test */
char *source_cxt = "mcu