Split mbedtls_ctr_drbg_init() -> seed()
diff --git a/ChangeLog b/ChangeLog
index 0e876f0..c0afc05 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -18,6 +18,7 @@
      mbedtls_ccm_init() -> mbedtls_ccm_setkey()
      mbedtls_gcm_init() -> mbedtls_gcm_setkey()
      mbedtls_hmac_drbg_init() -> mbedtls_hmac_drbg_init(_buf)()
+     mbedtls_ctr_drbg_init()  -> mbedtls_ctr_drbg_init(_buf)()
    * In the threading layer, mbedtls_mutex_init() and mbedtls_mutex_free() now
      return void.
    * ecdsa_write_signature() gained an addtional md_alg argument and
diff --git a/include/mbedtls/ctr_drbg.h b/include/mbedtls/ctr_drbg.h
index f32ae80..3ea4af2 100644
--- a/include/mbedtls/ctr_drbg.h
+++ b/include/mbedtls/ctr_drbg.h
@@ -103,12 +103,22 @@
 mbedtls_ctr_drbg_context;
 
 /**
- * \brief               CTR_DRBG initialization
+ * \brief               CTR_DRBG context initialization
+ *                      Makes the context ready for mbetls_ctr_drbg_seed() or
+ *                      mbedtls_ctr_drbg_free().
+ *
+ * \param ctx           CTR_DRBG context to be initialized
+ */
+void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx );
+
+/**
+ * \brief               CTR_DRBG initial seeding
+ *                      Seed and setup entropy source for future reseeds.
  *
  * Note: Personalization data can be provided in addition to the more generic
  *       entropy source to make this instantiation as unique as possible.
  *
- * \param ctx           CTR_DRBG context to be initialized
+ * \param ctx           CTR_DRBG context to be seeded
  * \param f_entropy     Entropy callback (p_entropy, buffer to fill, buffer
  *                      length)
  * \param p_entropy     Entropy context
@@ -119,7 +129,7 @@
  * \return              0 if successful, or
  *                      MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
  */
-int mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx,
+int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx,
                    int (*f_entropy)(void *, unsigned char *, size_t),
                    void *p_entropy,
                    const unsigned char *custom,
@@ -262,7 +272,7 @@
 int mbedtls_ctr_drbg_self_test( int verbose );
 
 /* Internal functions (do not call directly) */
-int mbedtls_ctr_drbg_init_entropy_len( mbedtls_ctr_drbg_context *,
+int mbedtls_ctr_drbg_seed_entropy_len( mbedtls_ctr_drbg_context *,
                                int (*)(void *, unsigned char *, size_t), void *,
                                const unsigned char *, size_t, size_t );
 
diff --git a/include/mbedtls/hmac_drbg.h b/include/mbedtls/hmac_drbg.h
index ed85dfe..fb2ee0e 100644
--- a/include/mbedtls/hmac_drbg.h
+++ b/include/mbedtls/hmac_drbg.h
@@ -90,7 +90,7 @@
 } mbedtls_hmac_drbg_context;
 
 /**
- * \brief               HMAC_DRBG initialization (just make references valid)
+ * \brief               HMAC_DRBG context initialization
  *                      Makes the context ready for mbetls_hmac_drbg_seed(),
  *                      mbedtls_hmac_drbg_seed_buf() or
  *                      mbedtls_hmac_drbg_free().
@@ -101,7 +101,7 @@
 
 /**
  * \brief               HMAC_DRBG initial seeding
- *                      Seed and setup entropy pool for later re-seeding.
+ *                      Seed and setup entropy source for future reseeds.
  *
  * \param ctx           HMAC_DRBG context to be seeded
  * \param md_info       MD algorithm to use for HMAC_DRBG
diff --git a/library/ctr_drbg.c b/library/ctr_drbg.c
index 355d0f4..ec7d9a7 100644
--- a/library/ctr_drbg.c
+++ b/library/ctr_drbg.c
@@ -56,10 +56,18 @@
 }
 
 /*
+ * CTR_DRBG context initialization
+ */
+void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx )
+{
+    memset( ctx, 0, sizeof( mbedtls_ctr_drbg_context ) );
+}
+
+/*
  * Non-public function wrapped by ctr_crbg_init(). Necessary to allow NIST
  * tests to succeed (which require known length fixed entropy)
  */
-int mbedtls_ctr_drbg_init_entropy_len(
+int mbedtls_ctr_drbg_seed_entropy_len(
                    mbedtls_ctr_drbg_context *ctx,
                    int (*f_entropy)(void *, unsigned char *, size_t),
                    void *p_entropy,
@@ -92,13 +100,13 @@
     return( 0 );
 }
 
-int mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx,
+int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx,
                    int (*f_entropy)(void *, unsigned char *, size_t),
                    void *p_entropy,
                    const unsigned char *custom,
                    size_t len )
 {
-    return( mbedtls_ctr_drbg_init_entropy_len( ctx, f_entropy, p_entropy, custom, len,
+    return( mbedtls_ctr_drbg_seed_entropy_len( ctx, f_entropy, p_entropy, custom, len,
                                        MBEDTLS_CTR_DRBG_ENTROPY_LEN ) );
 }
 
@@ -513,6 +521,8 @@
     mbedtls_ctr_drbg_context ctx;
     unsigned char buf[16];
 
+    mbedtls_ctr_drbg_init( &ctx );
+
     /*
      * Based on a NIST CTR_DRBG test vector (PR = True)
      */
@@ -520,7 +530,7 @@
         mbedtls_printf( "  CTR_DRBG (PR = TRUE) : " );
 
     test_offset = 0;
-    CHK( mbedtls_ctr_drbg_init_entropy_len( &ctx, ctr_drbg_self_test_entropy,
+    CHK( mbedtls_ctr_drbg_seed_entropy_len( &ctx, ctr_drbg_self_test_entropy,
                                 (void *) entropy_source_pr, nonce_pers_pr, 16, 32 ) );
     mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
     CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) );
@@ -537,7 +547,7 @@
         mbedtls_printf( "  CTR_DRBG (PR = FALSE): " );
 
     test_offset = 0;
-    CHK( mbedtls_ctr_drbg_init_entropy_len( &ctx, ctr_drbg_self_test_entropy,
+    CHK( mbedtls_ctr_drbg_seed_entropy_len( &ctx, ctr_drbg_self_test_entropy,
                             (void *) entropy_source_nopr, nonce_pers_nopr, 16, 32 ) );
     CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) );
     CHK( mbedtls_ctr_drbg_reseed( &ctx, NULL, 0 ) );
diff --git a/programs/test/benchmark.c b/programs/test/benchmark.c
index c752ba6..9f8990f 100644
--- a/programs/test/benchmark.c
+++ b/programs/test/benchmark.c
@@ -516,13 +516,15 @@
     {
         mbedtls_ctr_drbg_context ctr_drbg;
 
-        if( mbedtls_ctr_drbg_init( &ctr_drbg, myrand, NULL, NULL, 0 ) != 0 )
+        mbedtls_ctr_drbg_init( &ctr_drbg );
+
+        if( mbedtls_ctr_drbg_seed( &ctr_drbg, myrand, NULL, NULL, 0 ) != 0 )
             mbedtls_exit(1);
         TIME_AND_TSC( "CTR_DRBG (NOPR)",
                 if( mbedtls_ctr_drbg_random( &ctr_drbg, buf, BUFSIZE ) != 0 )
                 mbedtls_exit(1) );
 
-        if( mbedtls_ctr_drbg_init( &ctr_drbg, myrand, NULL, NULL, 0 ) != 0 )
+        if( mbedtls_ctr_drbg_seed( &ctr_drbg, myrand, NULL, NULL, 0 ) != 0 )
             mbedtls_exit(1);
         mbedtls_ctr_drbg_set_prediction_resistance( &ctr_drbg, MBEDTLS_CTR_DRBG_PR_ON );
         TIME_AND_TSC( "CTR_DRBG (PR)",
diff --git a/tests/suites/test_suite_ctr_drbg.function b/tests/suites/test_suite_ctr_drbg.function
index 8e53efb..b7d2bec 100644
--- a/tests/suites/test_suite_ctr_drbg.function
+++ b/tests/suites/test_suite_ctr_drbg.function
@@ -30,6 +30,7 @@
     unsigned char output_str[512];
     int add_init_len, add1_len, add2_len;
 
+    mbedtls_ctr_drbg_init( &ctx );
     memset( output_str, 0, 512 );
 
     unhexify( entropy, entropy_string );
@@ -38,7 +39,7 @@
     add2_len = unhexify( add2, add2_string );
 
     test_offset_idx = 0;
-    TEST_ASSERT( mbedtls_ctr_drbg_init_entropy_len( &ctx, mbedtls_entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
+    TEST_ASSERT( mbedtls_ctr_drbg_seed_entropy_len( &ctx, mbedtls_entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
     mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON );
 
     TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
@@ -66,6 +67,7 @@
     unsigned char output_str[512];
     int add_init_len, add1_len, add_reseed_len, add2_len;
 
+    mbedtls_ctr_drbg_init( &ctx );
     memset( output_str, 0, 512 );
 
     unhexify( entropy, entropy_string );
@@ -75,7 +77,7 @@
     add2_len = unhexify( add2, add2_string );
 
     test_offset_idx = 0;
-    TEST_ASSERT( mbedtls_ctr_drbg_init_entropy_len( &ctx, mbedtls_entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
+    TEST_ASSERT( mbedtls_ctr_drbg_seed_entropy_len( &ctx, mbedtls_entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
 
     TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
     TEST_ASSERT( mbedtls_ctr_drbg_reseed( &ctx, add_reseed, add_reseed_len ) == 0 );
@@ -98,6 +100,7 @@
     size_t i, reps = 10;
     int last_idx;
 
+    mbedtls_ctr_drbg_init( &ctx );
     test_offset_idx = 0;
     memset( entropy, 0, sizeof( entropy ) );
     memset( out, 0, sizeof( out ) );
@@ -105,7 +108,7 @@
 
     /* Init must use entropy */
     last_idx = test_offset_idx;
-    TEST_ASSERT( mbedtls_ctr_drbg_init( &ctx, mbedtls_entropy_func, entropy, NULL, 0 ) == 0 );
+    TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctx, mbedtls_entropy_func, entropy, NULL, 0 ) == 0 );
     TEST_ASSERT( last_idx < test_offset_idx );
 
     /* By default, PR is off and reseed_interval is large,
@@ -171,7 +174,9 @@
 {
     mbedtls_ctr_drbg_context ctx;
 
-    TEST_ASSERT( mbedtls_ctr_drbg_init( &ctx, rnd_std_rand, NULL, NULL, 0 ) == 0 );
+    mbedtls_ctr_drbg_init( &ctx );
+
+    TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctx, rnd_std_rand, NULL, NULL, 0 ) == 0 );
     TEST_ASSERT( mbedtls_ctr_drbg_write_seed_file( &ctx, path ) == ret );
     TEST_ASSERT( mbedtls_ctr_drbg_update_seed_file( &ctx, path ) == ret );
 
diff --git a/tests/suites/test_suite_rsa.function b/tests/suites/test_suite_rsa.function
index 0075f61..59cbb5c 100644
--- a/tests/suites/test_suite_rsa.function
+++ b/tests/suites/test_suite_rsa.function
@@ -666,8 +666,10 @@
     mbedtls_ctr_drbg_context ctr_drbg;
     const char *pers = "test_suite_rsa";
 
+    mbedtls_ctr_drbg_init( &ctr_drbg );
+
     mbedtls_entropy_init( &entropy );
-    TEST_ASSERT( mbedtls_ctr_drbg_init( &ctr_drbg, mbedtls_entropy_func, &entropy,
+    TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, &entropy,
                                 (const unsigned char *) pers, strlen( pers ) ) == 0 );
 
     mbedtls_rsa_init( &ctx, 0, 0 );