mbedtls
概述
mbedtls github
mbedtls实现常用的加密/解密算法,X.509证书操作以及TLS/DTLS 协议。它的各个功能模块相对独立、耦合低,可以通过配置宏定义裁剪,非常适合用于嵌入式系统。mbedTLS是高度模块化的设计:每个组件,如加密函数,可以独立于框架的其余部分使用。mbedTLS完全是由C语言编写的,没有外部依赖,因此,mbedTLS是应用于嵌入式系统最理想的TLS加密算法库。更重要的一点是,mbedTSL是完全OpenSource的,支持Apache 2.0 license 或者GPL 2.0 license双重许可,可以自由应用于商业项目中。
编译
mbedtls主要有四个目录:
configs 是mbedtls参考的配置文件
include 是源码头文件,mbedtls的默认配置头文件是config.h就在这里面
library 是源码C文件,mbedtls的实现
programs 是一些示例,pkey目录包含rsa、证书加解密等。
mkdir build
cd build
cmake .. & make
生成的library中包含共享库:
libmbedcrypto.a libmbedtls.a libmbedx509.a
programs/pkey目录用于测试证书/RSA加解密:
./gen_key rsa_keysize=1024
./key_app_writer mode=private output_mode=public output_file=pub.pem
openssl rsa -pubin -inform PEM -text -noout < pub.pem
./pk_encrypt pub.pem hello
./pk_decrypt keyfile.key
测试工程
新创建工程目录如mbedtls_ws,并在此目录下创建
include library project
拷贝库目录下的include到当前目录include,生成的共享库拷贝到library,project下可以创建多个测试工程。
├── include
│ └── mbedtls
├── library
│ ├── libmbedcrypto.a
│ ├── libmbedtls.a
│ └── libmbedx509.a
└── project
├── aes
├── base64
├── rsa
└── rsa_decryp
每个工程下包含Makefile文件
PRJ_DIR :=$(PWD)
SDK_DIR :=$(PRJ_DIR)/../..
LIBS_DIR :=$(SDK_DIR)/library
INCDIRS :=$(SDK_DIR)/include
CROSS_COMPILE ?=
CC := $(CROSS_COMPILE)gcc
CFLAGS :=-I$(INCDIRS) -L$(LIBS_DIR) -lmbedcrypto -lmbedtls -lmbedx509
SRC = $(wildcard *.c)
BIN = $(SRC:%.c=%)
all : ${BIN}
${BIN}:%:%.c
${CC} $^ -o $@ $(CFLAGS)
clean:
rm -rf ${BIN}
.PHONY: all clean
拷贝pkey到project目录下,然后赋值上面的Makefile,直接make可生成测试程序。