bugfix> c > 投稿

Diffie-Hellman鍵交換(クライアント側)をXMC4500にコーディングしようとしていますが、使用していますARMmbed lib。

これは私が得たコードです(に基づいてdh_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

またctr_drbg.h 編集しなければなりませんでしたMBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384(デフォルト)から336に設定すると、コードがクラッシュします。その他はすべてデフォルトです。

誰かがこのエラーを返す理由を知っていますか? 前もって感謝します。

注:メインでこの関数を呼び出しています。コードを実行してもエラーは発生しません。

回答 1 件
  • このエラーは、エントロピー関数( mbedtls_entropy_func )失敗します。エントロピーソースが有効になっていますか?おそらくプラットフォームに強力なエントロピーソースが設定されていないため、このエラーが発生します。

あなたの答え