@roneld01: Thanks for the wonderful explanation.
Now I’ve updated my code to look like hmac_drbg
you mentioned in the comment above. I’m using hmac_drbg_pr()
as my reference.
My mbedtls_test_entropy_func()
now matches whatever is in that file. Apart from that, all my calls match hmac_drbg_pr()
from the file you mentioned.
mbedtls_hmac_drbg_init (&hmac_ctx);
md_info = mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 );
p_entropy.p = entropy_inputs;
p_entropy.len = strlen(entropy_inputs);
rc = mbedtls_hmac_drbg_seed( &hmac_ctx, md_info, mbedtls_test_entropy_func, entropy_inputs, nonce_pers, strlen(nonce_pers) );
mbedtls_hmac_drbg_set_prediction_resistance(&hmac_ctx, MBEDTLS_HMAC_DRBG_PR_ON );
rc = mbedtls_hmac_drbg_random_with_add(&hmac_ctx, result, resultLen, addInput1, addInputLength);
rc = mbedtls_hmac_drbg_random_with_add(&hmac_ctx, result, resultLen, addInput2, addInputLength);
It exactly matches hmac_drbg_pr()
. However, I get an error in entropy function at line memcpy( buf, ctx->p, len );
I’ve printed the values:
(gdb) print len $2 = 24 (gdb) print ctx->len $3 = 11840012698478436789
ctx->len seems to be wrong. May be that’s what is causing the error?
entropy_ctx *ctx = (entropy_ctx *) data;
This line is not assigning anything to ctx->len is it?
In mbedtls_test_entropy_func()
we just declare ctx of type entropy_ctx and assign data to it but nothing is assigned to ctx->len.