Exemple #1
0
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
}
Exemple #2
0
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
}