我试图为mbedtls编写一个测试函数,它随机生成一个AES加密密钥。我使用mbedtls的原始教程代码。当执行"mbedtls_ctr_drbg_seed()“时,我的程序总是停止。
关于我的环境:来自STM_CUBEmx的基本源文件,板: ST32F767核心,基于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;
}提前谢谢你
发布于 2019-02-08 10:33:12
我找到了原因
STM32 Cube将RNG的hasn函数放在mbedtls Init之后,所以当我在mbedtls_init()中调用mbedtls_ctr_drbg_seed()时,RNG尚未初始化,它在其中永远迭代:
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 );解决方案
换行
发布于 2019-01-10 11:01:15
根据您的描述,我假设您的应用程序被困在了对mbedtls_ctr_drbg_seed()的调用中。最可能的原因,IMHO,是在函数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或类似的东西,并且您的hw熵收集器实际上返回熵数据。
https://stackoverflow.com/questions/53481818
复制相似问题