Q258000 workaround, like crypto++

This commit is contained in:
Glenn Maynard
2007-01-24 22:32:59 +00:00
parent 853c84c0a5
commit c93f83c0ac
@@ -99,18 +99,22 @@ static unsigned long rng_ansic(unsigned char *buf, unsigned long len,
static unsigned long rng_win32(unsigned char *buf, unsigned long len, static unsigned long rng_win32(unsigned char *buf, unsigned long len,
void (*callback)(void)) void (*callback)(void))
{ {
HCRYPTPROV hProv = 0; // work around Q258000
static HCRYPTPROV hProv = 0;
if (!hProv)
{
if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL,
(CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) && (CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) &&
!CryptAcquireContext (&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, !CryptAcquireContext (&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET)) CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET))
return 0; return 0;
}
if (CryptGenRandom(hProv, len, buf) == TRUE) { if (CryptGenRandom(hProv, len, buf) == TRUE) {
CryptReleaseContext(hProv, 0); // CryptReleaseContext(hProv, 0);
return len; return len;
} else { } else {
CryptReleaseContext(hProv, 0); // CryptReleaseContext(hProv, 0);
return 0; return 0;
} }
} }