diff --git a/programs/Makefile b/programs/Makefile
index ceb0622..c8b6def 100644
--- a/programs/Makefile
+++ b/programs/Makefile
@@ -19,7 +19,9 @@
 	pkey/rsa_sign_pss	pkey/rsa_verify_pss \
 	ssl/ssl_client1		ssl/ssl_client2		\
 	ssl/ssl_server		ssl/ssl_fork_server	\
-	ssl/ssl_mail_client	random/gen_random	\
+	ssl/ssl_mail_client	random/gen_entropy	\
+	random/gen_random_havege				\
+	random/gen_random_ctr_drbg				\
 	test/ssl_cert_test	test/benchmark		\
 	test/selftest		test/ssl_test		\
 	x509/cert_app		x509/crl_app
@@ -104,9 +106,17 @@
 	echo   "  CC    pkey/rsa_encrypt.c"
 	$(CC) $(CFLAGS) $(OFLAGS) pkey/rsa_encrypt.c    $(LDFLAGS) -o $@
 
-random/gen_random: random/gen_random.c ../library/libpolarssl.a
-	echo   "  CC    random/gen_random.c"
-	$(CC) $(CFLAGS) $(OFLAGS) random/gen_random.c $(LDFLAGS) -o $@
+random/gen_entropy: random/gen_entropy.c ../library/libpolarssl.a
+	echo   "  CC    random/gen_entropy.c"
+	$(CC) $(CFLAGS) $(OFLAGS) random/gen_entropy.c $(LDFLAGS) -o $@
+
+random/gen_random_havege: random/gen_random_havege.c ../library/libpolarssl.a
+	echo   "  CC    random/gen_random_havege.c"
+	$(CC) $(CFLAGS) $(OFLAGS) random/gen_random_havege.c $(LDFLAGS) -o $@
+
+random/gen_random_ctr_drbg: random/gen_random_ctr_drbg.c ../library/libpolarssl.a
+	echo   "  CC    random/gen_random_ctr_drbg.c"
+	$(CC) $(CFLAGS) $(OFLAGS) random/gen_random_ctr_drbg.c $(LDFLAGS) -o $@
 
 ssl/ssl_client1: ssl/ssl_client1.c ../library/libpolarssl.a
 	echo   "  CC    ssl/ssl_client1.c"
diff --git a/programs/random/CMakeLists.txt b/programs/random/CMakeLists.txt
index 3196e46..94814c4 100644
--- a/programs/random/CMakeLists.txt
+++ b/programs/random/CMakeLists.txt
@@ -1,6 +1,12 @@
-add_executable(gen_random gen_random.c)
-target_link_libraries(gen_random polarssl)
+add_executable(gen_random_havege gen_random.c)
+target_link_libraries(gen_random_havege polarssl)
 
-INSTALL(TARGETS gen_random
+add_executable(gen_random_ctr_drbg gen_random_ctr_drbg.c)
+target_link_libraries(gen_random_ctr_drbg polarssl)
+
+add_executable(gen_entropy gen_entropy.c)
+target_link_libraries(gen_entropy polarssl)
+
+INSTALL(TARGETS gen_random_havege gen_random_ctr_drbg gen_entropy
         DESTINATION "bin"
         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
diff --git a/programs/random/gen_entropy.c b/programs/random/gen_entropy.c
new file mode 100644
index 0000000..38c104c
--- /dev/null
+++ b/programs/random/gen_entropy.c
@@ -0,0 +1,87 @@
+/**
+ *  \brief Use and generate multiple entropies calls into a file
+ *
+ *  Copyright (C) 2006-2011, Brainspark B.V.
+ *
+ *  This file is part of PolarSSL (http://www.polarssl.org)
+ *  Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
+ *
+ *  All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "polarssl/config.h"
+
+#include "polarssl/entropy.h"
+
+#include <stdio.h>
+
+#if !defined(POLARSSL_ENTROPY_C)
+int main( int argc, char *argv[] )
+{
+    ((void) argc);
+    ((void) argv);
+
+    printf("POLARSSL_ENTROPY_C not defined.\n");
+    return( 0 );
+}
+#else
+int main( int argc, char *argv[] )
+{
+    FILE *f;
+    int i, k, ret;
+    entropy_context entropy;
+    unsigned char buf[ENTROPY_BLOCK_SIZE];
+
+    if( argc < 2 )
+    {
+        fprintf( stderr, "usage: %s <output filename>\n", argv[0] );
+        return( 1 );
+    }
+
+    if( ( f = fopen( argv[1], "wb+" ) ) == NULL )
+    {
+        printf( "failed to open '%s' for writing.\n", argv[0] );
+        return( 1 );
+    }
+
+    entropy_init( &entropy );
+
+    for( i = 0, k = 768; i < k; i++ )
+    {
+        ret = entropy_func( &entropy, buf, sizeof( buf ) );
+        if( ret != 0 )
+        {
+            printf("failed!\n");
+            goto cleanup;
+        }
+
+        fwrite( buf, 1, sizeof( buf ), f );
+
+        printf( "Generating 32Mb of data in file '%s'... %04.1f" \
+                "%% done\r", argv[1], (100 * (float) (i + 1)) / k );
+        fflush( stdout );
+    }
+
+    ret = 0;
+
+cleanup:
+
+    fclose( f );
+
+    return( ret );
+}
+#endif /* POLARSSL_ENTROPY_C */
diff --git a/programs/random/gen_random_ctr_drbg.c b/programs/random/gen_random_ctr_drbg.c
new file mode 100644
index 0000000..e926ad0
--- /dev/null
+++ b/programs/random/gen_random_ctr_drbg.c
@@ -0,0 +1,91 @@
+/**
+ *  \brief Use and generate random data into a file via the CTR_DBRG based on AES
+ *
+ *  Copyright (C) 2006-2011, Brainspark B.V.
+ *
+ *  This file is part of PolarSSL (http://www.polarssl.org)
+ *  Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
+ *
+ *  All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "polarssl/config.h"
+
+#include "polarssl/entropy.h"
+#include "polarssl/ctr_drbg.h"
+
+#include <stdio.h>
+
+#if !defined(POLARSSL_CTR_DRBG_C) || !defined(POLARSSL_ENTROPY_C)
+int main( int argc, char *argv[] )
+{
+    ((void) argc);
+    ((void) argv);
+
+    printf("POLARSSL_CTR_DRBG_C or POLARSSL_ENTROPY_C not defined.\n");
+    return( 0 );
+}
+#else
+int main( int argc, char *argv[] )
+{
+    FILE *f;
+    int i, k, ret;
+    ctr_drbg_context ctr_drbg;
+    entropy_context entropy;
+    unsigned char buf[1024];
+
+    if( argc < 2 )
+    {
+        fprintf( stderr, "usage: %s <output filename>\n", argv[0] );
+        return( 1 );
+    }
+
+    if( ( f = fopen( argv[1], "wb+" ) ) == NULL )
+    {
+        printf( "failed to open '%s' for writing.\n", argv[0] );
+        return( 1 );
+    }
+
+    entropy_init( &entropy );
+    ctr_drbg_init( &ctr_drbg, entropy_func, &entropy, (unsigned char *) "RANDOM_GEN", 10 );
+    ctr_drbg_set_prediction_resistance( &ctr_drbg, CTR_DRBG_PR_OFF );
+
+    for( i = 0, k = 768; i < k; i++ )
+    {
+        ret = ctr_drbg_random( &ctr_drbg, buf, sizeof( buf ) );
+        if( ret != 0 )
+        {
+            printf("failed!\n");
+            goto cleanup;
+        }
+
+        fwrite( buf, 1, sizeof( buf ), f );
+
+        printf( "Generating 32Mb of data in file '%s'... %04.1f" \
+                "%% done\r", argv[1], (100 * (float) (i + 1)) / k );
+        fflush( stdout );
+    }
+
+    ret = 0;
+
+cleanup:
+
+    fclose( f );
+
+    return( ret );
+}
+#endif /* POLARSSL_HAVEGE_C && POLARSSL_ENTROPY_C */
diff --git a/programs/random/gen_random.c b/programs/random/gen_random_havege.c
similarity index 100%
rename from programs/random/gen_random.c
rename to programs/random/gen_random_havege.c
