Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(257)

Side by Side Diff: patches/nss-rtlgenrandom.patch

Issue 17058006: RNG_SystemRNG should fail rather than falling back on rng_systemFromNoise (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Use zu to print size_t Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « nss/lib/freebl/win_rand.c ('k') | patches/nss-urandom-abort.patch » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 diff --git a/lib/freebl/win_rand.c b/lib/freebl/win_rand.c
2 --- a/lib/freebl/win_rand.c
3 +++ b/lib/freebl/win_rand.c
4 @@ -362,102 +362,37 @@ void RNG_FileForRNG(const char *filename
5 }
6
7 nBytes = RNG_GetNoise(buffer, 20); // get up to 20 bytes
8 RNG_RandomUpdate(buffer, nBytes);
9 }
10
11
12 /*
13 - * CryptoAPI requires Windows NT 4.0 or Windows 95 OSR2 and later.
14 - * Until we drop support for Windows 95, we need to emulate some
15 - * definitions and declarations in <wincrypt.h> and look up the
16 - * functions in advapi32.dll at run time.
17 - */
18 -
19 -#ifndef WIN64
20 -typedef unsigned long HCRYPTPROV;
21 -#endif
22 -
23 -#define CRYPT_VERIFYCONTEXT 0xF0000000
24 -
25 -#define PROV_RSA_FULL 1
26 -
27 -typedef BOOL
28 -(WINAPI *CryptAcquireContextAFn)(
29 - HCRYPTPROV *phProv,
30 - LPCSTR pszContainer,
31 - LPCSTR pszProvider,
32 - DWORD dwProvType,
33 - DWORD dwFlags);
34 -
35 -typedef BOOL
36 -(WINAPI *CryptReleaseContextFn)(
37 - HCRYPTPROV hProv,
38 - DWORD dwFlags);
39 -
40 -typedef BOOL
41 -(WINAPI *CryptGenRandomFn)(
42 - HCRYPTPROV hProv,
43 - DWORD dwLen,
44 - BYTE *pbBuffer);
45 -
46 -/*
47 * Windows XP and Windows Server 2003 and later have RtlGenRandom,
48 * which must be looked up by the name SystemFunction036.
49 */
50 typedef BOOLEAN
51 (APIENTRY *RtlGenRandomFn)(
52 PVOID RandomBuffer,
53 ULONG RandomBufferLength);
54
55 size_t RNG_SystemRNG(void *dest, size_t maxLen)
56 {
57 HMODULE hModule;
58 RtlGenRandomFn pRtlGenRandom;
59 - CryptAcquireContextAFn pCryptAcquireContextA;
60 - CryptReleaseContextFn pCryptReleaseContext;
61 - CryptGenRandomFn pCryptGenRandom;
62 - HCRYPTPROV hCryptProv;
63 size_t bytes = 0;
64
65 usedWindowsPRNG = PR_FALSE;
66 hModule = LoadLibrary("advapi32.dll");
67 if (hModule == NULL) {
68 - return rng_systemFromNoise(dest,maxLen);
69 + return bytes;
70 }
71 pRtlGenRandom = (RtlGenRandomFn)
72 GetProcAddress(hModule, "SystemFunction036");
73 - if (pRtlGenRandom) {
74 - if (pRtlGenRandom(dest, maxLen)) {
75 - bytes = maxLen;
76 - usedWindowsPRNG = PR_TRUE;
77 - } else {
78 - bytes = rng_systemFromNoise(dest,maxLen);
79 - }
80 - goto done;
81 + if (pRtlGenRandom && pRtlGenRandom(dest, maxLen)) {
82 + bytes = maxLen;
83 + usedWindowsPRNG = PR_TRUE;
84 }
85 - pCryptAcquireContextA = (CryptAcquireContextAFn)
86 - GetProcAddress(hModule, "CryptAcquireContextA");
87 - pCryptReleaseContext = (CryptReleaseContextFn)
88 - GetProcAddress(hModule, "CryptReleaseContext");
89 - pCryptGenRandom = (CryptGenRandomFn)
90 - GetProcAddress(hModule, "CryptGenRandom");
91 - if (!pCryptAcquireContextA || !pCryptReleaseContext || !pCryptGenRandom) {
92 - bytes = rng_systemFromNoise(dest,maxLen);
93 - goto done;
94 - }
95 - if (pCryptAcquireContextA(&hCryptProv, NULL, NULL,
96 - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
97 - if (pCryptGenRandom(hCryptProv, maxLen, dest)) {
98 - bytes = maxLen;
99 - usedWindowsPRNG = PR_TRUE;
100 - }
101 - pCryptReleaseContext(hCryptProv, 0);
102 - }
103 - if (bytes == 0) {
104 - bytes = rng_systemFromNoise(dest,maxLen);
105 - }
106 -done:
107 FreeLibrary(hModule);
108 return bytes;
109 }
110 #endif /* is XP_WIN */
OLDNEW
« no previous file with comments | « nss/lib/freebl/win_rand.c ('k') | patches/nss-urandom-abort.patch » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698