stm32f7 - Mbedtls 熵生成永远运行
问题描述
我正在尝试为 mbedtls 编写一个测试函数,它随机生成一个用于 AES 加密的密钥。我使用 mbedtls 的原始教程代码。执行“mbedtls_ctr_drbg_seed()”时,我的程序总是停止。
关于我的环境:STM_CUBEmx 的基本源文件,板:ST32F767 Nucleo,基于 STM_Cube 的 Makefile 编译
mbedtls_ctr_drbg_context ctr_drbg;
mbedtls_entropy_context entropy;
char *pers="anything";
int ret;
//Start
mbedtls_entropy_init(&entropy);
debugPrintln("Init entropy done");
mbedtls_ctr_drbg_init(&ctr_drbg);
debugPrintln("Init ctr_drbg done");
if((ret=mbedtls_ctr_drbg_seed(&ctr_drbg,mbedtls_entropy_func,&entropy,(unsigned char *) pers,strlen(pers)))!=0){
//Error info
debugPrintln("ERROR ctr_drbg_seed ");
return -1;
}
debugPrintln("Init ctr_drbg_seed done");
if((ret=mbedtls_ctr_drbg_random(&ctr_drbg,key,32))!=0){
return -1;
}
先感谢您
解决方案
根据您的描述,我假设您的应用程序被困在对mbedtls_ctr_drbg_seed()
. 恕我直言,最可能的原因在于功能mbedtls_entropy_func()
:
do
{
if( count++ > ENTROPY_MAX_LOOP )
{
ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED;
goto exit;
}
if( ( ret = entropy_gather_internal( ctx ) ) != 0 )
goto exit;
done = 1;
for( i = 0; i < ctx->source_count; i++ )
if( ctx->source[i].size < ctx->source[i].threshold )
done = 0;
}
while( ! done );
您应该检查您的熵收集是否增加了收集的大小,阈值不是MAX_INT
或类似的东西,并且您的硬件熵收集器实际上返回熵数据。
推荐阅读
- python - 链接到 python 文件的正确方法
- javascript - Lodash 等于并省略不能正常工作
- shell - 在编译时 shell 中访问 Makefile 变量
- javascript - 是否建议使用扩展运算符将用户输入存储在数据库中
- c++ - 如何在 C 中实现 binary128?
- sql - SQL 行包含每个变量的最大值
- arrays - 无法弄清楚如何在 Swift 中遍历数组并查找特定数据
- django - 胖模型,根据其他日期计算变量
- ios - flutter 新版 Google Maps SDK for iOS 可用:4.1.0.0
- firebase - 在本机反应中通过rest api进行通知