提交 c051e521 编写于 作者: D Dr. Stephen Henson

Time value for various platforms.

The function gettimeofday() is not supported on all platforms. Use
more portable versions. Adapted from FIPS code.
上级 45473632
...@@ -120,10 +120,16 @@ ...@@ -120,10 +120,16 @@
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/time.h>
#include "e_os.h" #include "e_os.h"
#if !(defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYSNAME_DSPBIOS))
# include <sys/time.h>
#endif
#if defined(OPENSSL_SYS_VXWORKS)
# include <time.h>
#endif
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include <openssl/rand.h> #include <openssl/rand.h>
#include "rand_lcl.h" #include "rand_lcl.h"
...@@ -361,10 +367,27 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo) ...@@ -361,10 +367,27 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo)
pid_t curr_pid = getpid(); pid_t curr_pid = getpid();
#endif #endif
time_t curr_time = time(NULL); time_t curr_time = time(NULL);
struct timeval tv;
int do_stir_pool = 0; int do_stir_pool = 0;
/* time value for various platforms */
#ifdef OPENSSL_SYS_WIN32
FILETIME tv;
# ifdef _WIN32_WCE
SYSTEMTIME t;
GetSystemTime(&t);
SystemTimeToFileTime(&t, &tv);
# else
GetSystemTimeAsFileTime(&tv);
# endif
#elif defined(OPENSSL_SYS_VXWORKS)
struct timespec tv;
clock_gettime(CLOCK_REALTIME, &ts);
#elif defined(OPENSSL_SYSNAME_DSPBIOS)
unsigned long long tv, OPENSSL_rdtsc();
tv = OPENSSL_rdtsc();
#else
struct timeval tv;
gettimeofday(&tv, NULL); gettimeofday(&tv, NULL);
#endif
#ifdef PREDICT #ifdef PREDICT
if (rand_predictable) if (rand_predictable)
...@@ -504,14 +527,10 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo) ...@@ -504,14 +527,10 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo)
if (!MD_Update(&m,(unsigned char*)&curr_time, if (!MD_Update(&m,(unsigned char*)&curr_time,
sizeof curr_time)) sizeof curr_time))
goto err; goto err;
curr_time = 0;
}
if (tv.tv_sec) /* just in the first iteration to save time */
{
if (!MD_Update(&m,(unsigned char*)&tv, if (!MD_Update(&m,(unsigned char*)&tv,
sizeof tv)) sizeof tv))
goto err; goto err;
tv.tv_sec = 0; curr_time = 0;
} }
if (!MD_Update(&m,local_md,MD_DIGEST_LENGTH)) if (!MD_Update(&m,local_md,MD_DIGEST_LENGTH))
goto err; goto err;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册