PSA Crypto库Debug版二进制过大 如何通过配置裁剪缩小体积
PSA Crypto库裁剪解决RA6M1平台二进制体积过大问题
crypto_config.h的作用确认
你的判断完全正确。crypto_config.h是PSA Crypto(以及集成它的Mbed TLS)标准的编译期功能裁剪入口,库中所有算法、密钥类型的实现代码都会根据该文件内PSA_WANT_*系列宏的开关状态决定是否参与编译,是嵌入式场景下压缩加密库体积最核心的配置文件。
Segger Embedded工程未包含该文件的原因
- 你使用的PSA Crypto发行包默认使用内置的全功能配置,也就是你找到的那份开启了所有算法的头文件,没有主动暴露到用户工程目录
- 瑞萨针对RA系列的FSP软件包默认打包全量PSA Crypto功能以适配所有可能的用户场景,默认没有开放自定义配置入口,不会把配置头文件放到用户可见的工程路径下
- 工程头文件搜索路径未覆盖你自行存放
crypto_config.h的目录,编译器编译时不会读取你自定义的配置
裁剪配置操作步骤
你找到的默认配置开启了大量冗余功能:包括全系列ECC算法、MD2/MD4/MD5等老旧弱哈希、RSA OAEP/PSS等你不需要的RSA填充模式、SHA全系列哈希、TLS协议相关的PRF算法,这些冗余代码是Debug版本体积过大的核心原因。
按以下步骤操作即可完成裁剪:
- 新建自定义
crypto_config.h文件,仅保留你需要功能对应的宏,参考最小配置如下:
注意:RSASSA-PKCS1-v1_5签名验签必须搭配哈希算法使用,以下配置默认保留嵌入式场景最常用的SHA-256,如果你需要搭配其他哈希算法可自行添加对应宏,不需要的功能宏全部删除即可。
#ifndef PSA_CRYPTO_CONFIG_H #define PSA_CRYPTO_CONFIG_H // 仅保留RSA密钥类型,移除所有ECC相关宏 #define PSA_WANT_KEY_TYPE_RSA_KEY_PAIR 1 #define PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY 1 // 仅保留需要的RSA算法,移除其余非必要算法宏 #define PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 1 // RSA PKCS#1 v1.5加解密 #define PSA_WANT_ALG_RSA_PKCS1V15_SIGN 1 // RSA PKCS#1 v1.5签名验签 // 保留签名所需的哈希算法,此处以SHA-256为例 #define PSA_WANT_ALG_SHA_256 1 // 仅保留2048位RSA密钥长度支持 #define PSA_WANT_RSA_KEY_SIZE_2048 1 #endif /* PSA_CRYPTO_CONFIG_H */
- 将自定义的
crypto_config.h放到你的Segger Embedded工程用户源码目录中 - 在工程预处理器配置中添加宏
MBEDTLS_PSA_CRYPTO_CONFIG,强制开启PSA自定义配置功能 - 将存放
crypto_config.h的目录添加到工程头文件搜索路径的最优先级位置,保证编译器优先读取你的自定义配置,而不是库内置的全量配置 - 清理工程所有中间文件后全量重编译即可,Debug版本下二进制体积通常可缩减70%以上
如果编译过程中提示依赖宏缺失,根据编译报错补充对应依赖项即可,这类依赖通常是基础编解码工具宏,不会带来明显的体积增长
内容的提问来源于stack exchange,提问作者vico
相关产品推荐
相关产品推荐

