diff --git a/tests/suites/test_suite_ctr_drbg.function b/tests/suites/test_suite_ctr_drbg.function
index efa5161..09626ec 100644
--- a/tests/suites/test_suite_ctr_drbg.function
+++ b/tests/suites/test_suite_ctr_drbg.function
@@ -1,11 +1,15 @@
 /* BEGIN_HEADER */
+#include "mbedtls/entropy.h"
 #include "mbedtls/ctr_drbg.h"
 #include "string.h"
 
-static int test_offset_idx;
+static size_t test_offset_idx;
+static size_t test_max_idx;
 static int mbedtls_test_entropy_func( void *data, unsigned char *buf, size_t len )
 {
     const unsigned char *p = (unsigned char *) data;
+    if( test_offset_idx + len > test_max_idx )
+        return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED );
     memcpy( buf, p + test_offset_idx, len );
     test_offset_idx += len;
     return( 0 );
@@ -53,24 +57,32 @@
 /* BEGIN_CASE */
 void ctr_drbg_validate_pr( data_t * add_init, data_t * entropy,
                            data_t * add1, data_t * add2,
-                           data_t * result_str )
+                           char *result_string )
 {
     mbedtls_ctr_drbg_context ctx;
     unsigned char buf[512];
+    unsigned char result[512];
+    size_t entropy_len, add_init_len, add1_len, add2_len, result_len;
 
     mbedtls_ctr_drbg_init( &ctx );
 
+    entropy_len = unhexify( entropy, entropy_string );
+    result_len = unhexify( result, result_string );
 
     test_offset_idx = 0;
+    test_max_idx = entropy_len;
     /* CTR_DRBG_Instantiate(entropy[:entropy_len/3], nonce, perso, <ignored>)
      * where nonce||perso = add_init[add_init_len] */
+    TEST_ASSERT( mbedtls_ctr_drbg_seed_entropy_len( &ctx, mbedtls_test_entropy_func, entropy, add_init, add_init_len, entropy_len / 3 ) == 0 );
     mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
 
     /* CTR_DRBG_Generate(result_len * 8 bits, add1[:add1_len]) -> buf */
     /* Then reseed because of prediction resistance. */
-    TEST_ASSERT( hexcmp( buf, result_str->x, 16, result_str->len ) == 0 );
+    TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, result_len, add1, add1_len ) == 0 );
     /* CTR_DRBG_Generate(result_len * 8 bits, add2[:add2_len]) -> buf */
     /* Then reseed because of prediction resistance. */
+    TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, result_len, add2, add2_len ) == 0 );
+    TEST_ASSERT( memcmp( buf, result, result_len ) == 0 );
 
 exit:
     mbedtls_ctr_drbg_free( &ctx );
@@ -80,23 +92,31 @@
 /* BEGIN_CASE */
 void ctr_drbg_validate_nopr( data_t * add_init, data_t * entropy,
                              data_t * add1, data_t * add_reseed,
-                             data_t * add2, data_t * result_str )
+                             char *add2_string, char *result_string )
 {
     mbedtls_ctr_drbg_context ctx;
     unsigned char buf[512];
+    unsigned char result[512];
+    size_t entropy_len, add_init_len, add1_len, add_reseed_len, add2_len, result_len;
 
     mbedtls_ctr_drbg_init( &ctx );
 
+    entropy_len = unhexify( entropy, entropy_string );
+    result_len = unhexify( result, result_string );
 
     test_offset_idx = 0;
+    test_max_idx = entropy_len;
     /* CTR_DRBG_Instantiate(entropy[:entropy_len/2], nonce, perso, <ignored>)
      * where nonce||perso = add_init[add_init_len] */
+    TEST_ASSERT( mbedtls_ctr_drbg_seed_entropy_len( &ctx, mbedtls_test_entropy_func, entropy, add_init, add_init_len, entropy_len / 2 ) == 0 );
 
     /* CTR_DRBG_Generate(16 * 8 bits, add1[:add1_len]) -> buf */
-    TEST_ASSERT( mbedtls_ctr_drbg_reseed( &ctx, add_reseed->x, add_reseed->len ) == 0 );
+    TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, result_len, add1, add1_len ) == 0 );
     /* CTR_DRBG_Reseed(entropy[entropy_len/2:entropy_len], add_reseed[:add_reseed_len]) */
     TEST_ASSERT( hexcmp( buf, result_str->x, 16, result_str->len ) == 0 );
     /* CTR_DRBG_Generate(16 * 8 bits, add2[:add2_len]) -> buf */
+    TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, result_len, add2, add2_len ) == 0 );
+    TEST_ASSERT( memcmp( buf, result, result_len ) == 0 );
 
 exit:
     mbedtls_ctr_drbg_free( &ctx );
@@ -111,10 +131,11 @@
     unsigned char entropy[1024];
     mbedtls_ctr_drbg_context ctx;
     size_t i, reps = 10;
-    int last_idx;
+    size_t last_idx;
 
     mbedtls_ctr_drbg_init( &ctx );
     test_offset_idx = 0;
+    test_max_idx = sizeof( entropy );
     memset( entropy, 0, sizeof( entropy ) );
     memset( out, 0, sizeof( out ) );
     memset( add, 0, sizeof( add ) );
