--- openvpn-2.0.5/crypto.c.orig	Fri Mar 24 18:25:11 2006
+++ openvpn-2.0.5/crypto.c	Fri Mar 24 18:26:33 2006
@@ -39,6 +39,8 @@
 
 #include "memdbg.h"
 
+#include <openssl/rand.h>
+
 /*
  * Check for key size creepage.
  */
@@ -1622,9 +1624,48 @@
 
 static uint8_t nonce_data [SHA_DIGEST_LENGTH + NONCE_SECRET_LEN]; /* GLOBAL */
 
+void SSLInitPRNG()
+{
+#if SSLEAY_VERSION_NUMBER >= 0x00905100
+    if (RAND_status() == 0) {
+        char rand_file[256];
+        time_t t;
+        pid_t pid;
+        long l,seed;
+
+        t = time(NULL);
+        pid = getpid();
+        RAND_file_name(rand_file, 256);
+        if(rand_file != NULL) {
+            /* Seed as much as 1024 bytes from RAND_file_name */
+            RAND_load_file(rand_file, 1024);
+        }
+        /* Seed in time (mod_ssl does this) */
+        RAND_seed((unsigned char *)&t, sizeof(time_t));
+        /* Seed in pid (mod_ssl does this) */
+        RAND_seed((unsigned char *)&pid, sizeof(pid_t));
+        /* Initialize system's random number generator */
+        RAND_bytes((unsigned char *)&seed, sizeof(long));
+        srand48(seed);
+        while (RAND_status() == 0) {
+            /* Repeatedly seed the PRNG using the system's random number generator until it has been seeded with enough data */
+            l = lrand48();
+            RAND_seed((unsigned char *)&l, sizeof(long));
+        }
+        if (rand_file != NULL) {
+            /* Write a rand_file */
+            RAND_write_file(rand_file);
+        }
+    }
+#endif /* SSLEAY_VERSION_NUMBER >= 0x00905100 */
+    return;
+}
+
+
 void
 prng_init (void)
 {
+  SSLInitPRNG();
   if (!RAND_bytes (nonce_data, sizeof(nonce_data)))
     msg (M_FATAL, "ERROR: Random number generator cannot obtain entropy for PRNG");
 }
