]> sjero.net Git - wget/blobdiff - src/gen_sslfunc.c
[svn] Windows update from Herold Heiko.
[wget] / src / gen_sslfunc.c
index 247cbf465abcf29cb2a516e3fe3eb55c9e151bb5..f32e7d80ca7b1a1d67a59ff170b1c9e919bd781d 100644 (file)
@@ -24,6 +24,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include <assert.h>
 #include <errno.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
 
 #include <openssl/bio.h>
 #include <openssl/crypto.h>
@@ -50,11 +53,13 @@ ssl_init_prng (void)
     {
       char rand_file[256];
       time_t t;
-      pid_t pid;
       long l,seed;
 
       t = time(NULL);
-      pid = getpid();
+      /* gets random data from egd if opt.sslegdsock was set */
+      if (opt.sslegdsock != NULL)
+       RAND_egd(opt.sslegdsock);
+      /* gets the file ~/.rnd or $RANDFILE if set */
       RAND_file_name(rand_file, 256);
       if (rand_file != NULL)
        {
@@ -63,10 +68,9 @@ ssl_init_prng (void)
        }
       /* 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));
+#ifndef WINDOWS
       srand48(seed);
       while (RAND_status () == 0)
        {
@@ -75,6 +79,12 @@ ssl_init_prng (void)
          l = lrand48();
          RAND_seed((unsigned char *)&l, sizeof(long));
        }
+#else /* WINDOWS */
+      RAND_screen();
+      if (RAND_status() == 0)
+        /* Here we should probably disable the whole ssl protocol ? HEH */
+        DEBUGP (("SSL random data generator not seeded correctly, %i",RAND_status()));
+#endif /* WINDOWS */
       if (rand_file != NULL)
        {
          /* Write a rand_file */