网络安全与加密库
AC79NN SDK 的网络安全与加密能力由 mbedTLS 3.4.0 提供核心加密原语、X.509 证书处理与 SSL/TLS/DTLS 协议实现,配合 tinydtls、云端 HMAC-SHA256 签名、AES 加解密封装,支撑 HTTPS、MQTT、CoAP、WebSocket 等安全通信及各类云平台接入认证。
Purpose and Scope
本页面覆盖 AC79NN SDK 中与网络安全与加密相关的完整能力,包括:
- mbedTLS 3.4.0 库的集成方式与裁剪配置(位于
lib/net/mbedtls_3_4_0/) - 基于 mbedTLS 的 TLS 客户端/服务端实现(证书加载、握手、验证)
- tinydtls DTLS 协议支持(
lib/net/tinydtls/) - 基于 mbedtls 消息摘要接口的 HMAC-SHA256 云端签名(
lib/net/EchoCloud/) - AES 对称加解密封装(
lib/net/telecom/ctei_aes.c) - mbedTLS 算法自测(self-test)与固件验证方式
以下相关主题由兄弟页面单独覆盖,不在本页详述:lwIP 协议栈与 socket 编程(网络基础层)、HTTP/HTTPS 与 MQTT 等应用协议本身的使用、各 AI 云平台(图灵、涂鸦、阿里云等)的接入协议细节。本页聚焦"加密与安全传输"这一横切能力。
Overview
安全能力在 SDK 中的定位
AC79NN 是面向 AIoT 场景的 Wi-Fi SoC,其联网应用(语音故事机、智能家居、云平台接入等)几乎全部涉及网络通信安全:
- 设备上云:涂鸦、阿里云、腾讯云、电信智能家居等平台均要求 TLS/HTTPS 或签名认证
- 本地通信:CoAP 使用 DTLS 加密,WebSocket 支持 WSS
- 数据保护:部分平台协议(如电信云)使用 AES 对业务数据进行加解密
- 身份认证:EchoCloud 等云平台使用 HMAC-SHA256 生成动态签名/密码
SDK 选择 mbedTLS 3.4.0 作为统一加密底座,而不是自研算法,其设计意图是:
- 可靠性:mbedTLS 是业界广泛使用、经过审计的嵌入式 TLS 实现,支持 AES、SHA-1/SHA-256、RSA、ECDSA、HMAC 等算法
- 代码足迹小:README 明确指出 "Its small code footprint makes it suitable for embedded systems",适合受限的 MCU 资源
- 协议覆盖全:同时实现 SSL/TLS 与 DTLS,兼顾 TCP 与 UDP 安全传输
- 可裁剪:通过
MBEDTLS_CONFIG宏按需开启算法与协议特性,控制固件体积
关键概念
| 概念 | 说明 |
|---|---|
| mbedtls_ssl | TLS 会话上下文,包含握手状态、传输回调、密码套件配置 |
| mbedtls_x509_crt | X.509 证书(CA 根证书、服务器证书、客户端证书)解析与验证 |
| mbedtls_pk | 公私钥对抽象(RSA/EC),用于证书私钥与签名 |
| mbedtls_ctr_drbg | 基于 AES-CTR 的确定性随机数生成器,为 TLS 握手提供熵源 |
| mbedtls_md / mbedtls_sha256 | 消息摘要抽象层 / SHA-256 具体实现,HMAC 签名基于此 |
| DTLS | Datagram TLS,为 UDP(如 CoAP)提供类似 TLS 的安全保护 |
| self-test | mbedTLS 内置算法自测,用于固件启动时验证加密功能正确性 |
Architecture
flowchart TD
subgraph sg_App["应用层 (apps/)"]
App["应用/云平台接入<br/>(故事机、涂鸦、阿里云等)"]
SelfTest["wl80_test.c<br/>mbedtls 算法自测"]
end
subgraph sg_NetLib["网络库层 (lib/net/)"]
subgraph sg_TLS["TLS/DTLS 传输安全"]
TLSClient["awtk mbedtls_client.c<br/>TLS 客户端"]
TLSServer["awtk mbedtls_server.c<br/>TLS 服务端"]
DTLS["tinydtls dtls.c<br/>DTLS 协议"]
end
subgraph sg_Crypto["加密/签名能力"]
EchoCloud["EchoCloud<br/>HMAC-SHA256 签名"]
TelecomAES["电信云 ctei_aes.c<br/>AES 加解密"]
end
end
subgraph sg_MbedTLS["mbedTLS 3.4.0 加密底座 (lib/net/mbedtls_3_4_0/)"]
SSL["mbedtls_ssl<br/>SSL/TLS 协议"]
X509["mbedtls_x509_crt<br/>证书解析与验证"]
PK["mbedtls_pk<br/>RSA/EC 密钥对"]
MD["mbedtls_md / sha256<br/>消息摘要与 HMAC"]
AES["mbedtls_aes<br/>对称加密"]
DRBG["mbedtls_ctr_drbg<br/>随机数生成器"]
end
subgraph sg_Net["网络基础层 (lwIP)"]
TCP["TCP/UDP socket"]
end
App --> TLSClient
App --> TLSServer
App --> SelfTest
App --> DTLS
App --> EchoCloud
App --> TelecomAES
TLSClient --> SSL
TLSServer --> SSL
DTLS --> SSL
EchoCloud --> MD
TelecomAES --> AES
SelfTest --> AES
SelfTest --> MD
SSL --> X509
SSL --> PK
SSL --> DRBG
SSL --> TCP
DTLS --> TCP
架构解读:整个安全体系呈"底座 + 封装 + 应用"三层结构。mbedTLS 3.4.0 是唯一的加密底座,向上提供 SSL/TLS 协议、X.509 证书、密钥对、摘要、AES 与随机数六大类能力;lib/net 下的 EchoCloud、电信云、tinydtls 是基于底座的具体封装;应用层既可直接使用 mbedTLS API(如 awtk 的 TLS 客户端/服务端示例),也可通过平台封装间接获得安全能力。随机数生成器(CTR_DRBG)为 TLS 握手提供熵源,这是 TLS 安全性的根基——没有足够的熵,所有密钥交换都不安全。
mbedTLS 3.4.0 集成与裁剪
库结构与设计意图
mbedTLS 3.4.0 以完整开源库形式存放于 lib/net/mbedtls_3_4_0/,其 README 明确了该库的定位:
Mbed TLS is a C library that implements cryptographic primitives, X.509 certificate manipulation and the SSL/TLS and DTLS protocols. Its small code footprint makes it suitable for embedded systems.
SDK 采用"随源码发布 + 预编译库链接"的方式:仓库内提供 mbedTLS 源码与头文件,最终链接时配合平台库文件(*.a)编译(见 README.md)。这意味着算法裁剪在编译期通过配置宏完成,而非运行时开关,从而把未使用算法的代码从固件中剔除。
能力清单
| 能力模块 | 提供组件 | 典型用途 |
|---|---|---|
| SSL/TLS 协议 | mbedtls_ssl_* | HTTPS、WSS、MQTT over TLS |
| DTLS 协议 | mbedtls_ssl(datagram 模式)与 tinydtls | CoAP 安全传输 |
| X.509 证书 | mbedtls_x509_crt_* | 服务器证书校验、客户端证书 |
| 公钥算法 | mbedtls_pk_*(RSA/EC) | 证书私钥、握手密钥交换 |
| 对称加密 | mbedtls_aes_* | 业务数据 AES 加解密(电信云等) |
| 消息摘要 | mbedtls_sha1/sha256/md5、mbedtls_md_* | 签名、校验和 |
| HMAC | mbedtls_md_hmac | 云平台动态签名(EchoCloud) |
| 随机数 | mbedtls_ctr_drbg_* + mbedtls_entropy | TLS 握手熵源 |
| 自测 | mbedtls_*_self_test | 固件加密功能验证 |
TLS 客户端实现(mbedtls_client.c)
awtk 网络流中的 mbedtls_client.c 是 SDK 内最完整的 TLS 客户端参考实现,演示了标准的 mbedTLS 使用范式:初始化 → 配置 → 握手 → 通信 → 释放。
上下文初始化
TLS 客户端持有四类核心上下文,在建立连接前必须逐一初始化:
mbedtls_ssl_config_init(&(client->conf));
mbedtls_x509_crt_init(&(client->cacert));
mbedtls_ctr_drbg_init(&(client->ctr_drbg));
Source: mbedtls_client.c
conf 保存 TLS 版本、密码套件、验证模式等握手参数;cacert 用于加载并保存 CA 根证书链;ctr_drbg 提供握手所需的随机数。三者生命周期贯穿整个 TLS 连接,在连接结束时通过 mbedtls_x509_crt_free、mbedtls_ssl_free、mbedtls_net_free 逆序释放,避免资源泄漏。
CA 证书加载
客户端以"服务器证书必须由可信 CA 签发"为安全前提,先解析 PEM 格式的 CA 根证书:
ret = mbedtls_x509_crt_parse(&(client->cacert), (const unsigned char *)cas_pem, cas_pem_len);
if (ret < 0) {
log_debug(" failed\n ! mbedtls_x509_crt_parse returned -0x%x\n\n", (unsigned int) - ret);
goto error;
}
Source: mbedtls_client.c
设计要点:mbedtls_x509_crt_parse 返回负值表示解析失败,错误码取反后以十六进制打印便于对照 mbedTLS 错误码表;证书解析失败直接 goto error 终止连接——这是"证书不可信即拒绝通信"的安全策略,防止中间人攻击。
证书验证失败诊断
握手后若证书链验证不通过,mbedTLS 会将验证标志位保存在 ssl.verify_result,示例通过 mbedtls_x509_crt_verify_info 生成人类可读的诊断信息:
mbedtls_x509_crt_verify_info(vrfy_buf, sizeof(vrfy_buf), " ! ", flags);
log_debug("%s\n", vrfy_buf);
Source: mbedtls_client.c
flags 是按位组合的验证结果(如证书过期、主机名不匹配、签名不可信),mbedtls_x509_crt_verify_info 将其翻译为逐条文本,对嵌入式联调极为重要——证书过期与域名不匹配是 IoT 设备上云最常见的两类失败。
TLS 服务端实现(mbedtls_server.c)
mbedtls_server.c 展示设备作为 TLS 服务端(如本地配网、设备间通信)的完整流程。与客户端不同,服务端必须持有服务器证书 + 私钥:
mbedtls_x509_crt_init(&(server->srvcert));
mbedtls_pk_init(&(server->pkey));
Source: mbedtls_server.c
随后加载服务器证书与私钥。源码注释特别指出,演示程序使用嵌入式测试证书,生产环境应改用文件解析接口:
This demonstration program uses embedded test certificates. Instead, you may want to use
mbedtls_x509_crt_parse_file()to read the server and CA certificates, as well asmbedtls_pk_parse_keyfile().
Source: mbedtls_server.c
证书加载分两步:先解析服务器证书本身,再解析签发它的 CA 证书(用于构造信任链):
ret = mbedtls_x509_crt_parse(&(server->srvcert), (const unsigned char *)srv_crt, srv_crt_len);
...
ret = mbedtls_x509_crt_parse(&(server->srvcert), (const unsigned char *)cas_pem, cas_pem_len);
Source: mbedtls_server.c
设计意图:srvcert 链同时包含服务器证书与 CA 证书,这样 TLS 握手时服务端能把完整证书链发给客户端,客户端只需持有根 CA 即可验证。释放时同样逆序:mbedtls_net_free → mbedtls_x509_crt_free → mbedtls_pk_free。
Core Flow — TLS 握手时序
sequenceDiagram
participant C as TLS 客户端 (mbedtls_client.c)
participant S as TLS 服务端 (mbedtls_server.c)
participant R as mbedTLS 底座 (mbedtls_3_4_0)
C->>R: mbedtls_ssl_config_init / x509_crt_init / ctr_drbg_init
C->>R: mbedtls_x509_crt_parse(CA 根证书)
C->>C: 建立 TCP 连接 (mbedtls_net_connect)
C->>R: mbedtls_ssl_setup + set_hostname + set_authmode
S->>R: mbedtls_x509_crt_parse(服务器证书 + CA)
S->>R: mbedtls_pk_parse_key(私钥)
S->>S: TCP 监听 (mbedtls_net_bind/accept)
C->>S: ClientHello (含随机数、密码套件列表)
S->>C: ServerHello + 服务器证书链 + ServerKeyExchange
C->>R: mbedtls_x509_crt_verify(证书链 + 主机名校验)
C->>S: ClientKeyExchange + ChangeCipherSpec + Finished
S->>C: ChangeCipherSpec + Finished
Note over C,S: 握手完成,会话密钥就绪
C->>S: 应用数据加密传输 (mbedtls_ssl_write/read)
C->>R: mbedtls_ssl_free / x509_crt_free / net_free
流程要点:
- 双向初始化:客户端与服务端各自初始化上下文;客户端加载 CA 根证书,服务端加载证书链与私钥
- 握手密钥协商:ClientHello/ServerHello 交换随机数与密码套件,ServerKeyExchange 携带密钥交换参数
- 证书验证:客户端用 CA 证书验证服务端证书链(有效期、签名、主机名),失败则终止——这是防中间人攻击的关键闸门
- 会话建立:双方交换密钥材料并完成 Finished 校验,之后所有应用数据经会话密钥加密
- 资源释放:连接结束逆序释放全部上下文,防止内存泄漏(嵌入式环境尤为敏感)
云端签名与对称加密封装
HMAC-SHA256 动态签名(EchoCloud)
EchoCloud 平台通过 HMAC-SHA256 生成设备认证签名。核心实现位于 echo_cloud_nonce.c,它直接复用 mbedTLS 的消息摘要抽象层:
int echo_cloud_get_hmac_sha256(const char *device_id, const char *channel_uuid, const char *nonce, char *signature, const char *hash_key)
{
...
if (0 != mbedtls_md_hmac(&mbedtls_sha256_info, (unsigned char *)hash_key, strlen(hash_key),
(unsigned char *)input, strlen(input), output)) {
return -1;
}
}
Source: echo_cloud_nonce.c
设计意图:mbedtls_md_hmac 是 mbedTLS 的消息摘要抽象接口,&mbedtls_sha256_info 指明使用 SHA-256 作为底层哈希。平台约定以 device_id + channel_uuid + nonce 作为输入、以 hash_key 作为密钥计算 HMAC,生成 64 字符十六进制签名。由于 nonce(随机数)每次不同,签名是动态的,防止重放攻击。
该签名被同时用于 HTTP 与 MQTT 两种接入通道(见 echo_cloud_http.c 与 echo_cloud_mqtt.c):
echo_cloud_get_hmac_sha256(hdl->auth->device_id, hdl->auth->channel_uuid, nonce, signature_str, hdl->auth->hash);
MQTT 场景下签名直接充当连接密码(mqtt->password),实现"无明文密码、动态口令"的设备认证。
AES 对称加解密(电信云)
电信云接入使用 AES 对业务数据加解密,实现在 ctei_aes.c,通过条件编译开关控制加解密代码是否编入固件:
#if (AES_ENCRYPT == 1)
/* AES 加密实现 */
#endif
#if (AES_DECRYPT == 1)
/* AES 解密实现 */
#endif
Source: ctei_aes.c 与 ctei_aes.c
设计意图:AES_ENCRYPT / AES_DECRYPT 两个宏允许按产品需求裁剪——只上云不发固件的设备可关闭解密分支,减少代码与内存占用;这也体现了 SDK"配置宏裁剪"的统一安全设计哲学。
DTLS 支持(tinydtls)
针对 CoAP 等 UDP 应用,SDK 集成了 tinydtls。其核心 dtls.c 通过编译宏选择哈希实现:
#ifdef WITH_SHA256
# include "sha2/sha2.h"
#endif
Source: dtls.c
设计意图:DTLS 为无连接的 UDP 增加与 TLS 等价的机密性、完整性与防重放保护。WITH_SHA256 宏控制 DTLS 握手使用的哈希算法(SHA-256 较 SHA-1 更安全),与 mbedTLS 底座形成互补——mbedTLS 本身也支持 DTLS 模式,tinydtls 则提供了更轻量的 UDP 安全选项。
算法自测(self-test)
固件可通过 wl80_test.c 对加密库做启动自检,验证 AES、SHA-1、SHA-256 算法在目标硬件上正确运行:
int mbedtls_sha1_self_test(int verbose);
int mbedtls_sha256_self_test(int verbose);
ASSERT(mbedtls_aes_self_test(0) == 0);
ASSERT(mbedtls_sha1_self_test(0) == 0);
ASSERT(mbedtls_sha256_self_test(0) == 0);
Source: wl80_test.c
设计意图:mbedTLS 内置自测向量(known-answer tests),verbose=0 静默执行、返回 0 表示通过。在量产固件启动阶段执行自测,能及早发现硬件随机数异常、Flash 中算法表损坏等问题,是嵌入式安全产品的常见健壮性手段。
Configuration Options
网络安全与加密能力主要通过编译期宏配置(裁剪)与运行时 API 参数(行为)两类方式控制:
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
AES_ENCRYPT | 编译宏 | 视平台定义 | 电信云 AES 加密分支是否编译(ctei_aes.c) |
AES_DECRYPT | 编译宏 | 视平台定义 | 电信云 AES 解密分支是否编译(ctei_aes.c) |
WITH_SHA256 | 编译宏 | 平台相关 | tinydtls 是否使用 SHA-256 作为握手哈希(dtls.c) |
| mbedTLS 配置宏 | 编译宏 | 由 mbedtls_config 决定 | 启用/禁用 AES、SHA、RSA、EC、TLS 1.2/1.3、DTLS 等特性 |
| auth 模式 | API 参数 | 由应用设置 | mbedtls_ssl_conf_authmode:MBEDTLS_SSL_VERIFY_REQUIRED 强制校验证书 |
| 验证标志位 | API 输出 | — | ssl.verify_result:握手后证书链验证结果(mbedtls_x509_crt_verify_info 可解读) |
| self-test verbose | API 参数 | 0 | mbedtls_*_self_test(verbose),1 输出详细测试向量日志 |
注意:mbedTLS 的裁剪宏在 SDK 中位于
lib/net/mbedtls_3_4_0/的配置头文件内,修改后需重新编译链接平台库(*.a)才能生效。未启用算法的相关调用会在编译期失败,属于预期行为。
API Reference
以下为 SDK 实际使用并验证的关键 mbedTLS API(完整签名以 mbedTLS 3.4.0 头文件为准):
mbedtls_x509_crt_parse(crt, buf, buflen)
解析 PEM/DER 格式的 X.509 证书并追加到证书链。
- 参数:
crt(mbedtls_x509_crt *)目标证书链;buf(const unsigned char *)证书数据;buflen(size_t)数据长度 - 返回:
0成功;负值失败,绝对值即 mbedTLS 错误码(示例中以-0x%x打印) - 用途:客户端加载 CA 根证书、服务端加载服务器证书与 CA 链
- 参考:mbedtls_client.c L66
mbedtls_x509_crt_verify_info(buf, size, prefix, flags)
将证书链验证标志位转换为可读诊断文本。
- 参数:
buf/size输出缓冲区;prefix每行前缀(示例用" ! ");flags验证结果位掩码 - 返回:写入字节数
- 用途:握手失败后输出证书过期、主机名不匹配等具体原因
- 参考:mbedtls_client.c L143
mbedtls_md_hmac(md_info, key, keylen, input, ilen, output)
基于指定摘要算法计算 HMAC 签名。
- 参数:
md_info摘要算法信息(如&mbedtls_sha256_info);key/keylenHMAC 密钥;input/ilen待签名数据;output摘要输出 - 返回:
0成功;负值失败 - 用途:EchoCloud 设备动态签名生成(HTTP 与 MQTT 通道共用)
- 参考:echo_cloud_nonce.c L143
echo_cloud_get_hmac_sha256(device_id, channel_uuid, nonce, signature, hash_key)
EchoCloud 平台签名封装函数(SDK 自研,非 mbedTLS 原生)。
- 参数:
device_id/channel_uuid设备标识;nonce随机数;signature输出 64 字符十六进制签名;hash_keyHMAC 密钥 - 返回:
0成功;-1HMAC 计算失败 - 用途:生成 HTTP 签名头与 MQTT 连接密码
- 参考:echo_cloud_nonce.c L136
mbedtls_aes_self_test(verbose) / mbedtls_sha1_self_test(verbose) / mbedtls_sha256_self_test(verbose)
算法自测入口,验证加密实现正确性。
- 参数:
verbose是否输出详细日志 - 返回:
0通过;非 0 失败 - 用途:固件启动自检(
ASSERT(... == 0)) - 参考:wl80_test.c L86-L91
失败模式、边界情况与并发
证书解析/验证失败
mbedtls_x509_crt_parse返回负值:PEM 损坏、证书过期或格式不匹配。示例中直接goto error终止连接,绝不降级为不校验继续通信- 握手后
verify_result非 0:证书链不可信、主机名不匹配。需用mbedtls_x509_crt_verify_info定位具体原因;生产环境应设置MBEDTLS_SSL_VERIFY_REQUIRED,避免自签证书风险
熵源与随机数
- TLS 握手依赖 CTR_DRBG 随机数;嵌入式平台若熵源(硬件 RNG/时钟抖动)不足,握手可能失败或密钥可预测。生产固件应确保熵源已正确接入
mbedtls_entropy模块,并可通过自测提前暴露问题
资源生命周期与内存
- 每个 TLS 连接必须成对调用 init/free(
ssl、x509_crt、net、pk),顺序错误或遗漏会导致内存泄漏与句柄耗尽——嵌入式 RAM 有限,反复重连后泄漏会最终导致 OOM - 服务端每 accept 一个连接即分配一套上下文,高并发下需关注 RAM 峰值
并发与重入
- mbedTLS 的
mbedtls_ssl上下文不支持多线程并发读写同一连接;多连接场景须为每连接分配独立上下文,并通过互斥锁保护共享的熵源与 DRBG - 签名函数
echo_cloud_get_hmac_sha256无全局状态,可安全并发调用;ctei_aes.c的加解密分支由宏静态裁剪,无运行时竞争
平台安全边界
- mbedTLS 与平台库(
*.a)配套编译(见 README.md),升级 mbedTLS 版本或更换平台库时必须整套重编,避免 ABI 不匹配导致的内存布局错误
性能与运维注意事项
- 裁剪是首要优化手段:TLS 握手是 CPU 密集型操作(RSA/EC 运算)。按产品实际需求关闭不用的算法(如只用 TLS 客户端则裁掉服务端代码、只上云则关掉本地 TLS),可同时减少固件体积与 RAM 占用。
AES_ENCRYPT/AES_DECRYPT、WITH_SHA256即此类裁剪的示例 - 会话复用:频繁重连的 MQTT/HTTPS 场景应启用 mbedTLS 会话缓存(session resumption),将握手开销从毫秒级 RSA 运算降为一次缓存查找,显著改善重连延迟
- 证书存储:CA 根证书通常以 PEM 数组内嵌在固件中(示例中的
cas_pem/cas_pem_len),也可改用文件接口(mbedtls_x509_crt_parse_file)从文件系统加载,便于远程更新证书而不重刷固件 - 日志与联调:握手失败时优先检查
verify_result的mbedtls_x509_crt_verify_info输出;self_test(verbose=1)可输出算法测试向量用于硬件排查 - 固件发布:
apps/common/example/readme.md将 mbedtls 列为独立章节,提示"用作服务器方法、客户端方法、证书配置"三块内容;发布前建议在目标硬件上跑一遍 wl80_test 中的自测用例
扩展点
- 新增云平台安全接入:仿照 EchoCloud 模式,在
lib/net/下新增平台目录,复用mbedtls_md_hmac生成签名、mbedtls_ssl建立安全通道,保持与现有auth->hash/nonce结构一致 - 证书管理策略:基于
mbedtls_x509_crt_parse扩展远程证书更新流程(如 OTA 下载新 CA 后替换内嵌证书数组) - DTLS 应用:为 CoAP 应用叠加 tinydtls(
WITH_SHA256)或 mbedTLS datagram 模式,实现 UDP 安全传输 - 算法自检集成:将
mbedtls_*_self_test接入产品自检流程,作为量产测试项
Related Links
- mbedTLS 3.4.0 库说明:官方定位、特性与 PSA Crypto API
- mbedtls_client.c:TLS 客户端完整参考实现
- mbedtls_server.c:TLS 服务端完整参考实现
- echo_cloud_nonce.c:HMAC-SHA256 动态签名实现
- ctei_aes.c:AES 加解密封装(宏裁剪示例)
- dtls.c:DTLS 协议实现
- wl80_test.c:mbedTLS 算法自测用例
- SDK 总览:基础协议与云平台清单
- 相关页面:网络基础协议(lwIP/socket)、HTTPS/MQTT 应用协议、云平台接入(涂鸦/阿里云/腾讯云等)
文档说明:本页基于 SDK 源码(
lib/net/mbedtls_3_4_0/、lib/net/EchoCloud/、lib/net/telecom/、lib/net/tinydtls/、apps/common/example/third_party/awtk/src/streams/inet/、apps/wifi_story_machine/test/)编写;mbedTLS 内部各算法模块的具体实现(如library/aes.c、library/ssl_tls.c)位于开源库内,本文未逐行展开,如需深入了解请直接查阅 mbedTLS 3.4.0 源码。