Random::Random() { s_randCleanup.Inited = true; Int64 ticks = DateTime::UtcNow().Ticks; ::RAND_add(&ticks, sizeof ticks, 2); #if UCFG_CPU_X86_X64 Int64 tsc = __rdtsc(); ::RAND_add(&tsc, sizeof tsc, 4); #endif #ifdef _WIN32 Int64 cnt = System.PerformanceCounter; ::RAND_add(&cnt, sizeof cnt, 4); #endif #ifdef WIN32 typedef BOOLEAN (APIENTRY *PFN_PRNG)(void*, ULONG); DlProcWrap<PFN_PRNG> pfnPrng("advapi32.dll", "SystemFunction036"); //!!! Undocumented if (pfnPrng) { byte buf[32]; if (pfnPrng(buf, sizeof buf)) ::RAND_add(&buf, sizeof buf, sizeof buf/2); } #endif }
Random::Random() { int64_t ticks = Clock::now().Ticks; ::RAND_add(&ticks, sizeof ticks, 2); #if UCFG_CPU_X86_X64 int64_t tsc = __rdtsc(); ::RAND_add(&tsc, sizeof tsc, 4); #endif #ifdef _WIN32 int64_t cnt = System.PerformanceCounter; ::RAND_add(&cnt, sizeof cnt, 4); #endif #ifdef WIN32 typedef BOOLEAN (APIENTRY *PFN_PRNG)(void*, ULONG); DlProcWrap<PFN_PRNG> pfnPrng("advapi32.dll", "SystemFunction036"); //!!! Undocumented if (pfnPrng) { uint8_t buf[32]; if (pfnPrng(buf, sizeof buf)) ::RAND_add(&buf, sizeof buf, sizeof buf/2); } #endif }