mirror of
https://github.com/json-c/json-c.git
synced 2026-04-02 11:59:07 +08:00
Merge pull request #628 from clamwin/compat-fixes-master
get_cryptgenrandom_seed: compat with old windows + fallback
This commit is contained in:
@@ -226,27 +226,35 @@ static int get_dev_random_seed(void)
|
|||||||
#pragma comment(lib, "advapi32.lib")
|
#pragma comment(lib, "advapi32.lib")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int get_time_seed(void);
|
||||||
|
|
||||||
static int get_cryptgenrandom_seed(void)
|
static int get_cryptgenrandom_seed(void)
|
||||||
{
|
{
|
||||||
HCRYPTPROV hProvider = 0;
|
HCRYPTPROV hProvider = 0;
|
||||||
|
DWORD dwFlags = CRYPT_VERIFYCONTEXT;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
DEBUG_SEED("get_cryptgenrandom_seed");
|
DEBUG_SEED("get_cryptgenrandom_seed");
|
||||||
|
|
||||||
if (!CryptAcquireContextW(&hProvider, 0, 0, PROV_RSA_FULL,
|
/* WinNT 4 and Win98 do no support CRYPT_SILENT */
|
||||||
CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
|
if (LOBYTE(LOWORD(GetVersion())) > 4)
|
||||||
{
|
dwFlags |= CRYPT_SILENT;
|
||||||
fprintf(stderr, "error CryptAcquireContextW");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!CryptGenRandom(hProvider, sizeof(r), (BYTE *)&r))
|
if (!CryptAcquireContextA(&hProvider, 0, 0, PROV_RSA_FULL, dwFlags))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "error CryptGenRandom");
|
fprintf(stderr, "error CryptAcquireContextA 0x%08lx", GetLastError());
|
||||||
exit(1);
|
r = get_time_seed();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BOOL ret = CryptGenRandom(hProvider, sizeof(r), (BYTE*)&r);
|
||||||
|
CryptReleaseContext(hProvider, 0);
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "error CryptGenRandom 0x%08lx", GetLastError());
|
||||||
|
r = get_time_seed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CryptReleaseContext(hProvider, 0);
|
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user