我试图将Diffie-Hellman密钥交换(客户端)编码到XMC4500中,我正在使用ARMmbed库。
这是我得到的代码(基于client.c):
int dhm (void) {
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.
在MBEDTLS_CTR_DRBG_MAX_SEED_INPUT中,我还必须将drbg.h从384(默认)编辑到336,否则代码就会崩溃。其他一切都是默认的。
有人知道为什么要返回这个错误吗?提前谢谢。
注:我在main中调用这个函数。运行代码不会给出任何错误。
发布于 2018-06-07 14:49:49
当熵函数(mbedtls_entropy_func)失败时,将返回此错误。你有启用熵源吗?您可能没有在您的平台中配置任何强熵源,从而导致此故障。
https://stackoverflow.com/questions/50518826
复制相似问题