# include <sys/time.h>
static uint64_t get_time_stamp(void);
-static uint64_t get_timer_bits(void);
/* Macro to convert two thirty two bit values into a sixty four bit one */
# define TWO32TO64(a, b) ((((uint64_t)(a)) << 32) + (b))
return ossl_rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
}
-int ossl_rand_pool_add_additional_data(RAND_POOL *pool)
-{
- struct {
- int fork_id;
- CRYPTO_THREAD_ID tid;
- uint64_t time;
- } data;
-
- /* Erase the entire structure including any padding */
- memset(&data, 0, sizeof(data));
-
- /*
- * Add some noise from the thread id and a high resolution timer.
- * The fork_id adds some extra fork-safety.
- * The thread id adds a little randomness if the drbg is accessed
- * concurrently (which is the case for the <master> drbg).
- */
- data.fork_id = openssl_get_fork_id();
- data.tid = CRYPTO_THREAD_get_current_id();
- data.time = get_timer_bits();
-
- return ossl_rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
-}
-
-
/*
* Get the current time with the highest possible resolution
*
return time(NULL);
}
-/*
- * Get an arbitrary timer value of the highest possible resolution
- *
- * The timer value is added as random noise to the additional data,
- * which is not considered a trusted entropy sourec, so any result
- * is acceptable.
- */
-static uint64_t get_timer_bits(void)
-{
- uint64_t res = OPENSSL_rdtsc();
-
- if (res != 0)
- return res;
-
-# if defined(__sun) || defined(__hpux)
- return gethrtime();
-# elif defined(_AIX)
- {
- timebasestruct_t t;
-
- read_wall_time(&t, TIMEBASE_SZ);
- return TWO32TO64(t.tb_high, t.tb_low);
- }
-# elif defined(OSSL_POSIX_TIMER_OKAY)
- {
- struct timespec ts;
-
-# ifdef CLOCK_BOOTTIME
-# define CLOCK_TYPE CLOCK_BOOTTIME
-# elif defined(_POSIX_MONOTONIC_CLOCK)
-# define CLOCK_TYPE CLOCK_MONOTONIC
-# else
-# define CLOCK_TYPE CLOCK_REALTIME
-# endif
-
- if (clock_gettime(CLOCK_TYPE, &ts) == 0)
- return TWO32TO64(ts.tv_sec, ts.tv_nsec);
- }
-# endif
-# if defined(__unix__) \
- || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L)
- {
- struct timeval tv;
-
- if (gettimeofday(&tv, NULL) == 0)
- return TWO32TO64(tv.tv_sec, tv.tv_usec);
- }
-# endif
- return time(NULL);
-}
#endif /* (defined(OPENSSL_SYS_UNIX) && !defined(OPENSSL_SYS_VXWORKS))
|| defined(__DJGPP__) */
return data_collect_method(pool);
}
-
-int ossl_rand_pool_add_additional_data(RAND_POOL *pool)
-{
- struct {
- CRYPTO_THREAD_ID tid;
- unsigned __int64 time;
- } data;
-
- /* Erase the entire structure including any padding */
- memset(&data, 0, sizeof(data));
-
- /*
- * Add some noise from the thread id and a high resolution timer.
- * The thread id adds a little randomness if the drbg is accessed
- * concurrently (which is the case for the <master> drbg).
- */
- data.tid = CRYPTO_THREAD_get_current_id();
-#if __CRTL_VER >= 80400000
- sys$gettim_prec(&data.time);
-#else
- sys$gettim((void*)&data.time);
-#endif
-
- return ossl_rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
-}
-
int ossl_rand_pool_init(void)
{
return 1;
{
}
-int ossl_rand_pool_add_additional_data(RAND_POOL *pool)
-{
- struct {
- CRYPTO_THREAD_ID tid;
- uint64_t time;
- } data;
-
- memset(&data, 0, sizeof(data));
-
- /*
- * Add some noise from the thread id and a high resolution timer.
- * The thread id adds a little randomness if the drbg is accessed
- * concurrently (which is the case for the <master> drbg).
- */
- data.tid = CRYPTO_THREAD_get_current_id();
- data.time = get_timer_bits();
-
- return ossl_rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
-}
-
int ossl_pool_add_nonce_data(RAND_POOL *pool)
{
struct {
return ossl_rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
}
-int ossl_rand_pool_add_additional_data(RAND_POOL *pool)
-{
- struct {
- DWORD tid;
- LARGE_INTEGER time;
- } data;
-
- /* Erase the entire structure including any padding */
- memset(&data, 0, sizeof(data));
-
- /*
- * Add some noise from the thread id and a high resolution timer.
- * The thread id adds a little randomness if the drbg is accessed
- * concurrently (which is the case for the <master> drbg).
- */
- data.tid = GetCurrentThreadId();
- QueryPerformanceCounter(&data.time);
- return ossl_rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
-}
-
int ossl_rand_pool_init(void)
{
return 1;