old MSVC versions don't have rdtsc
[openssl.git] / crypto / rand / rand_win.c
index eed64e62a2313256949d290bf85bcac5f0f2a1c1..7453fe589ea02b87718a06899925ba123e0ba314 100644 (file)
 #include <openssl/rand.h>
 #include "rand_lcl.h"
 
-#if defined(WINDOWS) || defined(WIN32)
+#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)
 #include <windows.h>
 #ifndef _WIN32_WINNT
 # define _WIN32_WINNT 0x0400
@@ -254,6 +254,10 @@ int RAND_poll(void)
          * at random times on Windows 2000.  Reported by Jeffrey Altman.  
          * Only use it on NT.
         */
+       /* Wolfgang Marczy <WMarczy@topcall.co.at> reports that
+        * the RegQueryValueEx call below can hang on NT4.0 (SP6).
+        * So we don't use this at all for now. */
+#if 0
         if ( osverinfo.dwPlatformId == VER_PLATFORM_WIN32_NT &&
                osverinfo.dwMajorVersion < 5)
                {
@@ -290,6 +294,7 @@ int RAND_poll(void)
                if (buf)
                        free(buf);
                }
+#endif
 
        if (advapi)
                {
@@ -577,7 +582,8 @@ static void readtimer(void)
        if (have_tsc) {
          __try {
            __asm {
-             rdtsc
+             _emit 0x0f
+             _emix 0x31
              mov cyclecount, eax
              }
            RAND_add(&cyclecount, sizeof(cyclecount), 1);
@@ -684,53 +690,4 @@ static void readscreen(void)
   DeleteDC(hScrDC);
 }
 
-#else /* Unix version */
-
-#include <time.h>
-
-#ifdef NO_FP_API
-#  undef DEVRANDOM
-#endif
-
-int RAND_poll(void)
-{
-       unsigned long l;
-       pid_t curr_pid = getpid();
-#ifdef DEVRANDOM
-       FILE *fh;
-#endif
-
-#ifdef DEVRANDOM
-       /* Use a random entropy pool device. Linux, FreeBSD and OpenBSD
-        * have this. Use /dev/urandom if you can as /dev/random may block
-        * if it runs out of random entries.  */
-
-       if ((fh = fopen(DEVRANDOM, "r")) != NULL)
-               {
-               unsigned char tmpbuf[ENTROPY_NEEDED];
-               int n;
-               
-               setvbuf(fh, NULL, _IONBF, 0);
-               n=fread((unsigned char *)tmpbuf,1,ENTROPY_NEEDED,fh);
-               fclose(fh);
-               RAND_add(tmpbuf,sizeof tmpbuf,n);
-               memset(tmpbuf,0,n);
-               }
-#endif
-
-       /* put in some default random data, we need more than just this */
-       l=curr_pid;
-       RAND_add(&l,sizeof(l),0);
-       l=getuid();
-       RAND_add(&l,sizeof(l),0);
-
-       l=time(NULL);
-       RAND_add(&l,sizeof(l),0);
-
-#ifdef DEVRANDOM
-       return 1;
-#endif
-       return 0;
-}
-
 #endif