Browse Source

Merge pull request #628 from clamwin/compat-fixes-master

get_cryptgenrandom_seed: compat with old windows + fallback
tags/json-c-0.15-20200726
Eric Hawicz GitHub 5 years ago
parent
commit
bc06f82f85
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 10 deletions
  1. +18
    -10
      random_seed.c

+ 18
- 10
random_seed.c View File

@@ -226,28 +226,36 @@ static int get_dev_random_seed(void)
#pragma comment(lib, "advapi32.lib")
#endif

static int get_time_seed(void);

static int get_cryptgenrandom_seed(void)
{
HCRYPTPROV hProvider = 0;
DWORD dwFlags = CRYPT_VERIFYCONTEXT;
int r;

DEBUG_SEED("get_cryptgenrandom_seed");

if (!CryptAcquireContextW(&hProvider, 0, 0, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
/* WinNT 4 and Win98 do no support CRYPT_SILENT */
if (LOBYTE(LOWORD(GetVersion())) > 4)
dwFlags |= CRYPT_SILENT;

if (!CryptAcquireContextA(&hProvider, 0, 0, PROV_RSA_FULL, dwFlags))
{
fprintf(stderr, "error CryptAcquireContextW");
exit(1);
fprintf(stderr, "error CryptAcquireContextA 0x%08lx", GetLastError());
r = get_time_seed();
}

if (!CryptGenRandom(hProvider, sizeof(r), (BYTE *)&r))
else
{
fprintf(stderr, "error CryptGenRandom");
exit(1);
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;
}



Loading…
Cancel
Save