c - MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED

标签 c random diffie-hellman mbed mbedtls

我正在尝试将 Diffie-Hellman key 交换(客户端)编码到 XMC4500 中,我正在使用 ARMmbed lib .

这是我得到的代码(基于 dh_client.c ):

int dhm(空) {

int ret;
size_t n, buflen;

unsigned char *p, *end;
unsigned char buf[512];
unsigned char hash[32];
const char *pers = "dh_client";

mbedtls_entropy_context entropy;
mbedtls_ctr_drbg_context ctr_drbg;
mbedtls_rsa_context rsa;
mbedtls_dhm_context dhm;
mbedtls_aes_context aes;

mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_SHA256 );
mbedtls_dhm_init( &dhm );
mbedtls_aes_init( &aes );
mbedtls_ctr_drbg_init( &ctr_drbg );

/*
 * 1. Setup the RNG
 */

mbedtls_entropy_init( &entropy );
ret = mbedtls_ctr_drbg_seed( &ctr_drbg,
                            mbedtls_entropy_func,
                            &entropy,
                            (const unsigned char *) pers,
                            strlen( pers ) );

mbedtls_aes_free( &aes );
mbedtls_rsa_free( &rsa );
mbedtls_dhm_free( &dhm );
mbedtls_ctr_drbg_free( &ctr_drbg );
mbedtls_entropy_free( &entropy );

return ret;}

我没有尝试更进一步,因为它不起作用,而且它是 dhm 算法的开始。函数 mbedtls_ctr_drbg_seed 返回 MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED

也在ctr_drbg.h中我必须将 MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 从 384(默认)编辑为 336,否则代码会崩溃。其他一切都是默认的。

有人知道为什么返回此错误吗? 提前致谢。

注意:我在 main 中调用这个函数。运行代码没有给我带来任何错误。

最佳答案

当您的熵函数 (mbedtls_entropy_func) 失败时,会返回此错误。您启用了熵源吗?您的平台中可能没有配置任何强熵源,从而导致此失败。

关于c - MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50518826/

相关文章:

cryptography - Diffie-Hellman 椭圆曲线私钥的长度

c - 生出一个独立的 child

python - 从一组名称中打印两个随机的、不同的名称

c - 缓冲区溢出仍然可行吗?

random - 对三角形内的均匀随机点进行采样

python - 从列表列表中统一抽取5个元素

cryptography - 为什么我们需要 Diffie Hellman?

c++ - 如何使用 openSSL C++ 以 PEM 格式存储 Diffie HellMan 对象的 key

c - 在 c 中插入和编辑注释

c - 读取 CSV 文件 - 内存问题