ReactOS 0.4.17-dev-444-g71ee754
oid.c
Go to the documentation of this file.
1/*
2 * Copyright 2002 Mike McCormack for CodeWeavers
3 * Copyright 2005-2006 Juan Lang
4 * Copyright 2018 Dmitry Timoshkov
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include <stdio.h>
22#include <stdarg.h>
23#include <stdlib.h>
24
25#include "windef.h"
26#include "winbase.h"
27#define CRYPT_OID_INFO_HAS_EXTRA_FIELDS
28#include "wincrypt.h"
29#include "winreg.h"
30#include "winternl.h"
31#include "winuser.h"
32#include "wine/debug.h"
33#include "wine/list.h"
34#include "crypt32_private.h"
35#include "cryptres.h"
36
38
41{
42 0, 0, &funcSetCS,
44 0, 0, { (DWORD_PTR)(__FILE__ ": funcSetCS") }
45};
46static CRITICAL_SECTION funcSetCS = { &funcSetCSDebug, -1, 0, 0, 0, 0 };
47static struct list funcSets = { &funcSets, &funcSets };
48
50{
52 CRITICAL_SECTION cs; /* protects functions */
54 struct list next;
55};
56
58{
62 struct list next;
63};
64
65static const LPCWSTR LocalizedKeys[] =
66{
67 L"ROOT",
68 L"MY",
69 L"CA",
70 L"ADDRESSBOOK",
71 L"TrustedPublisher",
72 L"Disallowed"
73};
75
76static void free_function_sets(void)
77{
78 struct OIDFunctionSet *setCursor, *setNext;
79
80 LIST_FOR_EACH_ENTRY_SAFE(setCursor, setNext, &funcSets,
81 struct OIDFunctionSet, next)
82 {
83 struct OIDFunction *functionCursor, *funcNext;
84
85 list_remove(&setCursor->next);
86 CryptMemFree(setCursor->name);
87 LIST_FOR_EACH_ENTRY_SAFE(functionCursor, funcNext,
88 &setCursor->functions, struct OIDFunction, next)
89 {
90 list_remove(&functionCursor->next);
91 CryptMemFree(functionCursor);
92 }
93 setCursor->cs.DebugInfo->Spare[0] = 0;
94 DeleteCriticalSection(&setCursor->cs);
95 CryptMemFree(setCursor);
96 }
98}
99
100/* There is no free function associated with this; therefore, the sets are
101 * freed when crypt32.dll is unloaded.
102 */
105{
106 struct OIDFunctionSet *cursor, *ret = NULL;
107
108 TRACE("(%s, %lx)\n", debugstr_a(pszFuncName), dwFlags);
109
112 {
113 if (!stricmp(pszFuncName, cursor->name))
114 {
115 ret = cursor;
116 break;
117 }
118 }
119 if (!ret)
120 {
121 ret = CryptMemAlloc(sizeof(struct OIDFunctionSet));
122 if (ret)
123 {
124 memset(ret, 0, sizeof(*ret));
125 ret->name = CryptMemAlloc(strlen(pszFuncName) + 1);
126 if (ret->name)
127 {
129 ret->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": OIDFunctionSet.cs");
130 list_init(&ret->functions);
131 strcpy(ret->name, pszFuncName);
132 list_add_tail(&funcSets, &ret->next);
133 }
134 else
135 {
137 ret = NULL;
138 }
139 }
140 }
142
143 return ret;
144}
145
146static char *CRYPT_GetKeyName(DWORD dwEncodingType, LPCSTR pszFuncName,
147 LPCSTR pszOID)
148{
149 static const char szEncodingTypeFmt[] =
150 "Software\\Microsoft\\Cryptography\\OID\\EncodingType %ld\\%s\\%s";
151 UINT len;
152 char numericOID[7]; /* enough for "#65535" */
153 const char *oid;
154 LPSTR szKey;
155
156 /* MSDN says the encoding type is a mask, but it isn't treated that way.
157 * (E.g., if dwEncodingType were 3, the key names "EncodingType 1" and
158 * "EncodingType 2" would be expected if it were a mask. Instead native
159 * stores values in "EncodingType 3".
160 */
161 if (IS_INTOID(pszOID))
162 {
163 snprintf(numericOID, sizeof(numericOID), "#%d", LOWORD(pszOID));
164 oid = numericOID;
165 }
166 else
167 oid = pszOID;
168
169 /* This is enough: the lengths of the two string parameters are explicitly
170 * counted, and we need up to five additional characters for the encoding
171 * type. These are covered by the "%d", "%s", and "%s" characters in the
172 * format specifier that are removed by sprintf.
173 */
174 len = sizeof(szEncodingTypeFmt) + lstrlenA(pszFuncName) + lstrlenA(oid);
175 szKey = CryptMemAlloc(len);
176 if (szKey)
177 sprintf(szKey, szEncodingTypeFmt,
178 GET_CERT_ENCODING_TYPE(dwEncodingType), pszFuncName, oid);
179 return szKey;
180}
181
183 DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList)
184{
185 struct OIDFunctionSet *set = hFuncSet;
186 char *keyName;
187 HKEY key;
188 LSTATUS rc;
189
190 TRACE("(%p, %ld, %p, %p)\n", hFuncSet, dwEncodingType, pwszDllList,
191 pcchDllList);
192
193 keyName = CRYPT_GetKeyName(dwEncodingType, set->name, "DEFAULT");
194 rc = RegCreateKeyExA(HKEY_LOCAL_MACHINE, keyName, 0, NULL, 0,
195 KEY_READ, NULL, &key, NULL);
196 if (!rc)
197 {
198 DWORD size = *pcchDllList * sizeof(WCHAR);
199
200 rc = RegQueryValueExW(key, L"Dll", NULL, NULL, (LPBYTE)pwszDllList,
201 &size);
202 if (!rc)
203 *pcchDllList = size / sizeof(WCHAR);
204 else
205 {
206 /* No value, return an empty list */
207 if (pwszDllList && *pcchDllList)
208 *pwszDllList = '\0';
209 *pcchDllList = 1;
210 }
212 }
213 else
214 {
215 /* No value, return an empty list */
216 if (pwszDllList && *pcchDllList)
217 *pwszDllList = '\0';
218 *pcchDllList = 1;
219 }
220 CryptMemFree(keyName);
221
222 return TRUE;
223}
224
226 DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry,
227 const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags)
228{
229 BOOL ret = TRUE;
230 struct OIDFunctionSet *set;
231
232 TRACE("(%p, %ld, %s, %ld, %p, %08lx)\n", hModule, dwEncodingType,
233 debugstr_a(pszFuncName), cFuncEntry, rgFuncEntry, dwFlags);
234
235 set = CryptInitOIDFunctionSet(pszFuncName, 0);
236 if (set)
237 {
238 DWORD i;
239
241 for (i = 0; ret && i < cFuncEntry; i++)
242 {
243 struct OIDFunction *func;
244
245 TRACE("OID %s, func %p\n", debugstr_a(rgFuncEntry[i].pszOID), rgFuncEntry[i].pvFuncAddr);
246
247 if (!IS_INTOID(rgFuncEntry[i].pszOID))
248 func = CryptMemAlloc(sizeof(struct OIDFunction)
249 + strlen(rgFuncEntry[i].pszOID) + 1);
250 else
251 func = CryptMemAlloc(sizeof(struct OIDFunction));
252 if (func)
253 {
254 func->encoding = GET_CERT_ENCODING_TYPE(dwEncodingType);
255 if (!IS_INTOID(rgFuncEntry[i].pszOID))
256 {
257 LPSTR oid;
258
259 oid = (LPSTR)((LPBYTE)func + sizeof(*func));
260 strcpy(oid, rgFuncEntry[i].pszOID);
261 func->entry.pszOID = oid;
262 }
263 else
264 func->entry.pszOID = rgFuncEntry[i].pszOID;
265 func->entry.pvFuncAddr = rgFuncEntry[i].pvFuncAddr;
266 func->hModule = hModule;
267 list_add_tail(&set->functions, &func->next);
268 }
269 else
270 ret = FALSE;
271 }
273 }
274 else
275 ret = FALSE;
276 return ret;
277}
278
280{
284};
285
286static BOOL CRYPT_GetFuncFromReg(DWORD dwEncodingType, LPCSTR pszOID,
287 LPCSTR szFuncName, LPVOID *ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
288{
289 BOOL ret = FALSE;
290 char *keyName;
291 const char *funcName;
292 HKEY key;
293 LSTATUS rc;
294
295 keyName = CRYPT_GetKeyName(dwEncodingType, szFuncName, pszOID);
296 rc = RegOpenKeyExA(HKEY_LOCAL_MACHINE, keyName, 0, KEY_READ, &key);
297 if (!rc)
298 {
299 DWORD type, size = 0;
300
301 rc = RegQueryValueExA(key, "FuncName", NULL, &type, NULL, &size);
302 if ((!rc || rc == ERROR_MORE_DATA) && type == REG_SZ)
303 {
304 funcName = CryptMemAlloc(size);
305 rc = RegQueryValueExA(key, "FuncName", NULL, &type,
306 (LPBYTE)funcName, &size);
307 }
308 else
309 funcName = szFuncName;
310 rc = RegQueryValueExW(key, L"Dll", NULL, &type, NULL, &size);
311 if ((!rc || rc == ERROR_MORE_DATA) && type == REG_SZ)
312 {
313 LPWSTR dllName = CryptMemAlloc(size);
314
315 if (dllName)
316 {
317 rc = RegQueryValueExW(key, L"Dll", NULL, NULL,
318 (LPBYTE)dllName, &size);
319 if (!rc)
320 {
321 HMODULE lib;
322
323 /* This is a bit of a hack; MSDN describes a more
324 * complicated unload routine than this will allow.
325 * Still, this seems to suffice for now.
326 */
327 lib = LoadLibraryW(dllName);
328 if (lib)
329 {
330 *ppvFuncAddr = GetProcAddress(lib, funcName);
331 if (*ppvFuncAddr)
332 {
333 struct FuncAddr *addr =
334 CryptMemAlloc(sizeof(struct FuncAddr));
335
336 if (addr)
337 {
338 addr->lib = lib;
339 addr->dllList = addr->currentDll = NULL;
340 *phFuncAddr = addr;
341 ret = TRUE;
342 }
343 else
344 {
345 *phFuncAddr = NULL;
347 }
348 }
349 else
350 {
351 /* Unload the library, the caller doesn't want
352 * to unload it when the return value is NULL.
353 */
355 }
356 }
357 }
358 else
359 SetLastError(rc);
360 CryptMemFree(dllName);
361 }
362 }
363 else
364 SetLastError(rc);
365 if (funcName != szFuncName)
366 CryptMemFree((char *)funcName);
368 }
369 else
370 SetLastError(rc);
371 CryptMemFree(keyName);
372 return ret;
373}
374
376 DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr,
377 HCRYPTOIDFUNCADDR *phFuncAddr)
378{
379 BOOL ret = FALSE;
380 struct OIDFunctionSet *set = hFuncSet;
381
382 TRACE("(%p, %ld, %s, %08lx, %p, %p)\n", hFuncSet, dwEncodingType,
383 debugstr_a(pszOID), dwFlags, ppvFuncAddr, phFuncAddr);
384
385 *ppvFuncAddr = NULL;
387 {
388 struct OIDFunction *function;
389
391 LIST_FOR_EACH_ENTRY(function, &set->functions, struct OIDFunction, next)
392 {
393 if (function->encoding == GET_CERT_ENCODING_TYPE(dwEncodingType))
394 {
395 if (!IS_INTOID(pszOID))
396 {
397 if (!IS_INTOID(function->entry.pszOID) &&
398 !stricmp(function->entry.pszOID, pszOID))
399 {
400 *ppvFuncAddr = function->entry.pvFuncAddr;
401 *phFuncAddr = NULL; /* FIXME: what should it be? */
402 ret = TRUE;
403 break;
404 }
405 }
406 else if (function->entry.pszOID == pszOID)
407 {
408 *ppvFuncAddr = function->entry.pvFuncAddr;
409 *phFuncAddr = NULL; /* FIXME: what should it be? */
410 ret = TRUE;
411 break;
412 }
413 }
414 }
416 }
417 if (!*ppvFuncAddr)
418 ret = CRYPT_GetFuncFromReg(dwEncodingType, pszOID, set->name,
419 ppvFuncAddr, phFuncAddr);
420 TRACE("returning %d\n", ret);
421 return ret;
422}
423
425{
426 struct OIDFunctionSet *set;
427 BOOL ret = FALSE;
428
430
432 {
433 struct OIDFunction *function;
434
436
437 LIST_FOR_EACH_ENTRY(function, &set->functions, struct OIDFunction, next)
438 {
439 if (function->hModule == hModule)
440 {
441 ret = TRUE;
442 break;
443 }
444 }
445
447
448 if (ret) break;
449 }
450
452
453 return ret;
454}
455
458{
459 TRACE("(%p, %08lx)\n", hFuncAddr, dwFlags);
460
461 /* FIXME: as MSDN states, need to check for DllCanUnloadNow in the DLL,
462 * and only unload it if it can be unloaded. Also need to implement ref
463 * counting on the functions.
464 */
465 if (hFuncAddr)
466 {
467 struct FuncAddr *addr = hFuncAddr;
468
469 if (!is_module_registered(addr->lib))
470 {
471 CryptMemFree(addr->dllList);
472 FreeLibrary(addr->lib);
474 }
475 }
476 return TRUE;
477}
478
480 void **ppvFuncAddr)
481{
482 BOOL ret = FALSE;
483
484 *lib = LoadLibraryW(dll);
485 if (*lib)
486 {
487 *ppvFuncAddr = GetProcAddress(*lib, func);
488 if (*ppvFuncAddr)
489 ret = TRUE;
490 else
491 {
493 *lib = NULL;
494 }
495 }
496 return ret;
497}
498
500 DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr,
501 HCRYPTOIDFUNCADDR *phFuncAddr)
502{
503 struct OIDFunctionSet *set = hFuncSet;
504 BOOL ret = FALSE;
505
506 TRACE("(%p, %ld, %s, %08lx, %p, %p)\n", hFuncSet, dwEncodingType,
507 debugstr_w(pwszDll), dwFlags, ppvFuncAddr, phFuncAddr);
508
509 if (pwszDll)
510 {
511 HMODULE lib;
512
513 *phFuncAddr = NULL;
514 ret = CRYPT_GetFuncFromDll(pwszDll, set->name, &lib, ppvFuncAddr);
515 if (ret)
516 {
517 struct FuncAddr *addr = CryptMemAlloc(sizeof(struct FuncAddr));
518
519 if (addr)
520 {
521 addr->lib = lib;
522 addr->dllList = addr->currentDll = NULL;
523 *phFuncAddr = addr;
524 }
525 else
526 {
528 *ppvFuncAddr = NULL;
530 ret = FALSE;
531 }
532 }
533 else
535 }
536 else
537 {
538 struct FuncAddr *addr = *phFuncAddr;
539
540 if (!addr)
541 {
542 DWORD size;
543
544 ret = CryptGetDefaultOIDDllList(hFuncSet, dwEncodingType, NULL,
545 &size);
546 if (ret)
547 {
549
550 if (dllList)
551 {
552 ret = CryptGetDefaultOIDDllList(hFuncSet, dwEncodingType,
553 dllList, &size);
554 if (ret)
555 {
556 addr = CryptMemAlloc(sizeof(struct FuncAddr));
557 if (addr)
558 {
559 addr->dllList = dllList;
560 addr->currentDll = dllList;
561 addr->lib = NULL;
562 *phFuncAddr = addr;
563 }
564 else
565 {
568 ret = FALSE;
569 }
570 }
571 }
572 else
573 {
575 ret = FALSE;
576 }
577 }
578 }
579 if (addr)
580 {
581 if (!*addr->currentDll)
582 {
583 CryptFreeOIDFunctionAddress(*phFuncAddr, 0);
585 *phFuncAddr = NULL;
586 ret = FALSE;
587 }
588 else
589 {
590 /* FIXME: as elsewhere, can't free until DllCanUnloadNow says
591 * it's possible, and should defer unloading for some time to
592 * avoid repeated LoadLibrary/FreeLibrary on the same dll.
593 */
594 FreeLibrary(addr->lib);
595 ret = CRYPT_GetFuncFromDll(addr->currentDll, set->name,
596 &addr->lib, ppvFuncAddr);
597 if (ret)
598 {
599 /* Move past the current DLL */
600 addr->currentDll += lstrlenW(addr->currentDll) + 1;
601 *phFuncAddr = addr;
602 }
603 else
604 {
605 CryptFreeOIDFunctionAddress(*phFuncAddr, 0);
607 *phFuncAddr = NULL;
608 }
609 }
610 }
611 }
612 return ret;
613}
614
615/***********************************************************************
616 * CryptRegisterOIDFunction (CRYPT32.@)
617 *
618 * Register the DLL and the functions it uses to cover the combination
619 * of encoding type, function name and OID.
620 *
621 * PARAMS
622 * dwEncodingType [I] Encoding type to be used.
623 * pszFuncName [I] Name of the function to be registered.
624 * pszOID [I] OID of the function (numeric or string).
625 * pwszDll [I] The DLL that is to be registered.
626 * pszOverrideFuncName [I] Name of the function in the DLL.
627 *
628 * RETURNS
629 * Success: TRUE.
630 * Failure: FALSE. (Look at GetLastError()).
631 *
632 * NOTES
633 * Registry errors are always reported via SetLastError().
634 */
635BOOL WINAPI CryptRegisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName,
636 LPCSTR pszOID, LPCWSTR pwszDll, LPCSTR pszOverrideFuncName)
637{
638 LONG r;
639 HKEY hKey;
640 LPSTR szKey;
641
642 TRACE("(%lx, %s, %s, %s, %s)\n", dwEncodingType, debugstr_a(pszFuncName),
643 debugstr_a(pszOID), debugstr_w(pwszDll), debugstr_a(pszOverrideFuncName));
644
645 /* Native does nothing pwszDll is NULL */
646 if (!pwszDll)
647 return TRUE;
648
649 /* I'm not matching MS bug for bug here, because I doubt any app depends on
650 * it: native "succeeds" if pszFuncName is NULL, but the nonsensical entry
651 * it creates would never be used.
652 */
653 if (!pszFuncName || !pszOID)
654 {
656 return FALSE;
657 }
658
659 szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID);
660 TRACE("Key name is %s\n", debugstr_a(szKey));
661
662 if (!szKey)
663 return FALSE;
664
666 CryptMemFree(szKey);
667
668 if (r != ERROR_SUCCESS) goto error_close_key;
669
670 /* write the values */
671 if (pszOverrideFuncName)
672 {
673 r = RegSetValueExA(hKey, "FuncName", 0, REG_SZ,
674 (const BYTE*)pszOverrideFuncName, lstrlenA(pszOverrideFuncName) + 1);
675 if (r != ERROR_SUCCESS) goto error_close_key;
676 }
677 r = RegSetValueExW(hKey, L"Dll", 0, REG_SZ, (const BYTE*) pwszDll,
678 (lstrlenW(pwszDll) + 1) * sizeof (WCHAR));
679
680error_close_key:
681
683
684 if (r != ERROR_SUCCESS)
685 {
687 return FALSE;
688 }
689
690 return TRUE;
691}
692
693/***********************************************************************
694 * CryptUnregisterOIDInfo (CRYPT32.@)
695 */
697{
698 char *key_name;
699 HKEY root;
700 DWORD err;
701
702 TRACE("(%p)\n", info);
703
704 if (!info || info->cbSize != sizeof(*info) || !info->pszOID)
705 {
707 return FALSE;
708 }
709
710 err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CryptDllFindOIDInfo", 0, KEY_ALL_ACCESS, &root);
711 if (err != ERROR_SUCCESS)
712 {
714 return FALSE;
715 }
716
717 key_name = CryptMemAlloc(strlen(info->pszOID) + 16);
718 if (key_name)
719 {
720 sprintf(key_name, "%s!%lu", info->pszOID, info->dwGroupId);
722 }
723 else
725
728
729 if (err)
731
732 return !err;
733}
734
735/***********************************************************************
736 * CryptRegisterOIDInfo (CRYPT32.@)
737 */
739{
740 char *key_name;
741 HKEY root = 0, key = 0;
742 DWORD err;
743
744 TRACE("(%p, %lx)\n", info, flags );
745
746 if (!info || info->cbSize != sizeof(*info) || !info->pszOID)
747 {
749 return FALSE;
750 }
751
752 if (!info->dwGroupId) return TRUE;
753
754 key_name = CryptMemAlloc(strlen(info->pszOID) + 16);
755 if (!key_name)
756 {
758 goto done;
759 }
760
761 err = RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CryptDllFindOIDInfo",
762 0, NULL, 0, KEY_ALL_ACCESS, NULL, &root, NULL);
763 if (err != ERROR_SUCCESS) goto done;
764
765 sprintf(key_name, "%s!%lu", info->pszOID, info->dwGroupId);
767 if (err != ERROR_SUCCESS) goto done;
768
769 if (flags)
770 {
771 err = RegSetValueExW(key, L"Flags", 0, REG_DWORD, (const BYTE *)&flags, sizeof(flags));
772 if (err != ERROR_SUCCESS) goto done;
773 }
774
775 if (info->pwszName)
776 {
777 err = RegSetValueExW(key, L"Name", 0, REG_SZ, (const BYTE *)info->pwszName, (lstrlenW(info->pwszName) + 1) * sizeof(WCHAR));
778 if (err != ERROR_SUCCESS) goto done;
779 }
780
781 if (info->Algid)
782 {
783 err = RegSetValueExW(key, L"Algid", 0, REG_DWORD, (const BYTE *)&info->Algid, sizeof(info->Algid));
784 if (err != ERROR_SUCCESS) goto done;
785 }
786
787 if (info->ExtraInfo.cbData && info->ExtraInfo.pbData)
788 {
789 err = RegSetValueExW(key, L"ExtraInfo", 0, REG_BINARY, info->ExtraInfo.pbData, info->ExtraInfo.cbData);
790 if (err != ERROR_SUCCESS) goto done;
791 }
792
793 if (info->pwszCNGAlgid)
794 {
795 err = RegSetValueExW(key, L"CNGAlgid", 0, REG_SZ, (const BYTE *)info->pwszCNGAlgid, (lstrlenW(info->pwszCNGAlgid) + 1) * sizeof(WCHAR));
796 if (err != ERROR_SUCCESS) goto done;
797 }
798
799 if (info->pwszCNGExtraAlgid)
800 {
801 err = RegSetValueExW(key, L"CNGExtraAlgid", 0, REG_SZ, (const BYTE *)info->pwszCNGExtraAlgid, (lstrlenW(info->pwszCNGExtraAlgid) + 1) * sizeof(WCHAR));
802 if (err != ERROR_SUCCESS) goto done;
803 }
804
805done:
807 if (key) RegCloseKey(key);
808 if (root) RegCloseKey(root);
809
810 if (err)
812
813 return !err;
814}
815
816/***********************************************************************
817 * CryptUnregisterOIDFunction (CRYPT32.@)
818 */
820 LPCSTR pszOID)
821{
822 LPSTR szKey;
823 LONG rc;
824
825 TRACE("%lx %s %s\n", dwEncodingType, debugstr_a(pszFuncName),
826 debugstr_a(pszOID));
827
828 if (!pszFuncName || !pszOID)
829 {
831 return FALSE;
832 }
833
834 szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID);
836 CryptMemFree(szKey);
837 if (rc)
838 SetLastError(rc);
839 return !rc;
840}
841
842BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
843 LPCSTR pszOID, LPCWSTR pwszValueName, DWORD *pdwValueType, BYTE *pbValueData,
844 DWORD *pcbValueData)
845{
846 LPSTR szKey;
847 LONG rc;
848 HKEY hKey;
849
850 TRACE("%lx %s %s %s %p %p %p\n", dwEncodingType, debugstr_a(pszFuncName),
851 debugstr_a(pszOID), debugstr_w(pwszValueName), pdwValueType, pbValueData,
852 pcbValueData);
853
854 if (!GET_CERT_ENCODING_TYPE(dwEncodingType))
855 return TRUE;
856
857 if (!pszFuncName || !pszOID || !pwszValueName)
858 {
860 return FALSE;
861 }
862
863 szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID);
864 rc = RegOpenKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey);
865 CryptMemFree(szKey);
866 if (rc)
867 SetLastError(rc);
868 else
869 {
870 rc = RegQueryValueExW(hKey, pwszValueName, NULL, pdwValueType,
871 pbValueData, pcbValueData);
872 if (rc)
873 SetLastError(rc);
875 }
876 return !rc;
877}
878
879BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
880 LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType,
881 const BYTE *pbValueData, DWORD cbValueData)
882{
883 LPSTR szKey;
884 LONG rc;
885 HKEY hKey;
886
887 TRACE("%lx %s %s %s %ld %p %ld\n", dwEncodingType, debugstr_a(pszFuncName),
888 debugstr_a(pszOID), debugstr_w(pwszValueName), dwValueType, pbValueData,
889 cbValueData);
890
891 if (!GET_CERT_ENCODING_TYPE(dwEncodingType))
892 return TRUE;
893
894 if (!pszFuncName || !pszOID || !pwszValueName)
895 {
897 return FALSE;
898 }
899
900 szKey = CRYPT_GetKeyName(dwEncodingType, pszFuncName, pszOID);
901 rc = RegOpenKeyA(HKEY_LOCAL_MACHINE, szKey, &hKey);
902 CryptMemFree(szKey);
903 if (rc)
904 SetLastError(rc);
905 else
906 {
907 rc = RegSetValueExW(hKey, pwszValueName, 0, dwValueType, pbValueData,
908 cbValueData);
909 if (rc)
910 SetLastError(rc);
912 }
913 return !rc;
914}
915
917{
918 LPCWSTR ret = NULL, ptr;
919
920 for (ptr = multi; ptr && *ptr && !ret; ptr += lstrlenW(ptr) + 1)
921 {
922 if (!lstrcmpiW(ptr, toFind))
923 ret = ptr;
924 }
925 return ret;
926}
927
929{
930 DWORD ret;
931
932 if (multi)
933 {
934 LPCWSTR ptr;
935
936 /* Count terminating empty string */
937 ret = 1;
938 for (ptr = multi; *ptr; ptr += lstrlenW(ptr) + 1)
939 ret += lstrlenW(ptr) + 1;
940 }
941 else
942 ret = 0;
943 return ret;
944}
945
947 DWORD index)
948{
949 LPWSTR ret;
950
951 if (!multi)
952 {
953 /* FIXME: ignoring index, is that okay? */
954 ret = CryptMemAlloc((lstrlenW(toAdd) + 2) * sizeof(WCHAR));
955 if (ret)
956 {
957 /* copy string, including NULL terminator */
958 memcpy(ret, toAdd, (lstrlenW(toAdd) + 1) * sizeof(WCHAR));
959 /* add terminating empty string */
960 *(ret + lstrlenW(toAdd) + 1) = 0;
961 }
962 }
963 else
964 {
966
967 ret = CryptMemRealloc(multi, (len + lstrlenW(toAdd) + 1) *
968 sizeof(WCHAR));
969 if (ret)
970 {
971 LPWSTR spotToAdd;
972
974 spotToAdd = ret + len - 1;
975 else
976 {
977 DWORD i;
978
979 /* FIXME: if index is too large for the string, toAdd is
980 * added to the end. Is that okay?
981 */
982 for (i = 0, spotToAdd = ret; i < index && *spotToAdd;
983 spotToAdd += lstrlenW(spotToAdd) + 1)
984 ;
985 }
986 if (spotToAdd)
987 {
988 /* Copy existing string "right" */
989 memmove(spotToAdd + lstrlenW(toAdd) + 1, spotToAdd,
990 (len - (spotToAdd - ret)) * sizeof(WCHAR));
991 /* Copy new string */
992 memcpy(spotToAdd, toAdd, (lstrlenW(toAdd) + 1) * sizeof(WCHAR));
993 }
994 else
995 {
997 ret = NULL;
998 }
999 }
1000 }
1001 return ret;
1002}
1003
1005{
1006 LPWSTR spotToRemove = (LPWSTR)CRYPT_FindStringInMultiString(multi,
1007 toRemove);
1008 BOOL ret;
1009
1010 if (spotToRemove)
1011 {
1013
1014 if (spotToRemove + lstrlenW(toRemove) + 2 >= multi + len)
1015 {
1016 /* Removing last string in list, terminate multi string directly */
1017 *spotToRemove = 0;
1018 *(spotToRemove + 1) = 0;
1019 }
1020 else
1021 {
1022 LPCWSTR nextStr = spotToRemove + lstrlenW(toRemove) + 1;
1023
1024 /* Copy remainder of string "left" */
1025 memmove(spotToRemove, nextStr,
1026 (len - (nextStr - multi)) * sizeof(WCHAR));
1027 }
1028 ret = TRUE;
1029 }
1030 else
1031 {
1033 ret = FALSE;
1034 }
1035 return ret;
1036}
1037
1038static BOOL CRYPT_GetDefaultOIDKey(DWORD dwEncodingType, LPCSTR pszFuncName,
1039 PHKEY key)
1040{
1041 LPSTR keyName;
1042 LONG r;
1043
1044 keyName = CRYPT_GetKeyName(dwEncodingType, pszFuncName, "DEFAULT");
1045 TRACE("Key name is %s\n", debugstr_a(keyName));
1046
1047 if (!keyName)
1048 return FALSE;
1049
1051 NULL, key, NULL);
1052 CryptMemFree(keyName);
1053 if (r != ERROR_SUCCESS)
1054 {
1055 SetLastError(r);
1056 return FALSE;
1057 }
1058 return TRUE;
1059}
1060
1062{
1063 LONG r;
1064 DWORD type, size;
1065 LPWSTR dlls;
1066
1067 r = RegQueryValueExW(key, L"Dll", NULL, &type, NULL, &size);
1068 if (r == ERROR_SUCCESS && type == REG_MULTI_SZ)
1069 {
1071 r = RegQueryValueExW(key, L"Dll", NULL, &type, (LPBYTE)dlls, &size);
1072 if (r != ERROR_SUCCESS)
1073 {
1075 dlls = NULL;
1076 }
1077 }
1078 else
1079 dlls = NULL;
1080 return dlls;
1081}
1082
1084{
1086 LONG r;
1087
1088 if ((r = RegSetValueExW(key, L"Dll", 0, REG_MULTI_SZ, (const BYTE *)dlls,
1089 len * sizeof (WCHAR))))
1090 SetLastError(r);
1091 return r == ERROR_SUCCESS;
1092}
1093
1094/***********************************************************************
1095 * CryptRegisterDefaultOIDFunction (CRYPT32.@)
1096 */
1098 LPCSTR pszFuncName, DWORD dwIndex, LPCWSTR pwszDll)
1099{
1100 HKEY key;
1101 LPWSTR dlls;
1102 BOOL ret = FALSE;
1103
1104 TRACE("(%lx, %s, %ld, %s)\n", dwEncodingType, debugstr_a(pszFuncName),
1105 dwIndex, debugstr_w(pwszDll));
1106
1107 if (!pwszDll)
1108 {
1110 return FALSE;
1111 }
1112
1113 if (!CRYPT_GetDefaultOIDKey(dwEncodingType, pszFuncName, &key))
1114 return FALSE;
1115
1117 if (CRYPT_FindStringInMultiString(dlls, pwszDll))
1119 else
1120 {
1121 dlls = CRYPT_AddStringToMultiString(dlls, pwszDll, dwIndex);
1122 if (dlls)
1124 }
1127 return ret;
1128}
1129
1131 LPCSTR pszFuncName, LPCWSTR pwszDll)
1132{
1133 HKEY key;
1134 LPWSTR dlls;
1135 BOOL ret;
1136
1137 TRACE("(%lx, %s, %s)\n", dwEncodingType, debugstr_a(pszFuncName),
1138 debugstr_w(pwszDll));
1139
1140 if (!pwszDll)
1141 {
1143 return FALSE;
1144 }
1145
1146 if (!CRYPT_GetDefaultOIDKey(dwEncodingType, pszFuncName, &key))
1147 return FALSE;
1148
1150 if ((ret = CRYPT_RemoveStringFromMultiString(dlls, pwszDll)))
1154 return ret;
1155}
1156
1158{
1159 unsigned int i;
1160
1161 for(i = 0; i < ARRAY_SIZE(LocalizedKeys); i++)
1162 {
1164 }
1165}
1166
1167/********************************************************************
1168 * CryptFindLocalizedName (CRYPT32.@)
1169 */
1171{
1172 unsigned int i;
1173
1174 for(i = 0; i < ARRAY_SIZE(LocalizedKeys); i++)
1175 {
1176 if(!lstrcmpiW(LocalizedKeys[i], pwszCryptName))
1177 {
1178 return LocalizedNames[i];
1179 }
1180 }
1181
1182 FIXME("No name for: %s - stub\n",debugstr_w(pwszCryptName));
1183 return NULL;
1184}
1185
1188{
1189 0, 0, &oidInfoCS,
1191 0, 0, { (DWORD_PTR)(__FILE__ ": oidInfoCS") }
1192};
1193static CRITICAL_SECTION oidInfoCS = { &oidInfoCSDebug, -1, 0, 0, 0, 0 };
1194static struct list oidInfo = { &oidInfo, &oidInfo };
1195
1199static const CRYPT_DATA_BLOB noNullBlob = { sizeof(noNullFlag),
1200 (LPBYTE)&noNullFlag };
1202 (LPBYTE)&mosaicFlags };
1203
1205static const DWORD dssSign[2] = { CALG_DSS_SIGN,
1207static const DWORD mosaicSign[2] = { CALG_DSS_SIGN,
1211static const CRYPT_DATA_BLOB rsaSignBlob = { sizeof(rsaSign),
1212 (LPBYTE)&rsaSign };
1213static const CRYPT_DATA_BLOB dssSignBlob = { sizeof(dssSign),
1214 (LPBYTE)dssSign };
1216 (LPBYTE)mosaicSign };
1218
1219static const DWORD ia5String[] = { CERT_RDN_IA5_STRING, 0 };
1224static const CRYPT_DATA_BLOB ia5StringBlob = { sizeof(ia5String),
1225 (LPBYTE)ia5String };
1232
1233static const struct OIDInfoConstructor {
1241} oidInfoConstructors[] = {
1242 { 1, szOID_OIWSEC_sha1, CALG_SHA1, L"sha1", NULL },
1243 { 1, szOID_OIWSEC_sha1, CALG_SHA1, L"sha", NULL },
1244 { 1, szOID_OIWSEC_sha, CALG_SHA, L"sha", NULL },
1245 { 1, szOID_RSA_MD5, CALG_MD5, L"md5", NULL },
1246 { 1, szOID_RSA_MD4, CALG_MD4, L"md4", NULL },
1247 { 1, szOID_RSA_MD2, CALG_MD2, L"md2", NULL },
1248 /* NOTE: Windows Vista+ uses -1 instead of CALG_SHA_* following SHA entries. */
1249 { 1, szOID_NIST_sha256, CALG_SHA_256, L"sha256", NULL },
1250 { 1, szOID_NIST_sha384, CALG_SHA_384, L"sha384", NULL },
1251 { 1, szOID_NIST_sha512, CALG_SHA_512, L"sha512", NULL },
1252
1253 { 2, szOID_OIWSEC_desCBC, CALG_DES, L"des", NULL },
1254 { 2, szOID_RSA_DES_EDE3_CBC, CALG_3DES, L"3des", NULL },
1255 { 2, szOID_RSA_RC2CBC, CALG_RC2, L"rc2", NULL },
1256 { 2, szOID_RSA_RC4, CALG_RC4, L"rc4", NULL },
1257 { 2, szOID_RSA_SMIMEalgCMS3DESwrap, CALG_3DES, L"CMS3DESwrap", NULL },
1258 { 2, szOID_RSA_SMIMEalgCMSRC2wrap, CALG_RC2, L"CMSRC2wrap", NULL },
1259
1260 { 3, szOID_RSA_RSA, CALG_RSA_KEYX, L"RSA", NULL },
1261 { 3, szOID_X957_DSA, CALG_DSS_SIGN, L"DSA", &noNullBlob },
1263 { 3, szOID_RSA_RSA, CALG_RSA_KEYX, L"RSA_KEYX", NULL },
1264 { 3, szOID_RSA_RSA, CALG_RSA_SIGN, L"RSA", NULL },
1265 { 3, szOID_RSA_RSA, CALG_RSA_SIGN, L"RSA_SIGN", NULL },
1268 { 3, szOID_OIWSEC_dsa, CALG_DSS_SIGN, L"DSA_SIGN", &noNullBlob },
1269 { 3, szOID_RSA_DH, CALG_DH_SF, L"DH", &noNullBlob },
1270 { 3, szOID_OIWSEC_rsaXchg, CALG_RSA_KEYX, L"RSA_KEYX", NULL },
1271 { 3, szOID_INFOSEC_mosaicKMandUpdSig, CALG_DSS_SIGN, L"mosaicKMandUpdSig", &mosaicFlagsBlob },
1273 { 3, szOID_PKIX_NO_SIGNATURE, CALG_NO_SIGN, L"NOSIGN", NULL },
1276
1277 { 4, szOID_RSA_SHA1RSA, CALG_SHA1, L"sha1RSA", &rsaSignBlob },
1278 { 4, szOID_RSA_SHA256RSA, CALG_SHA_256, L"sha256RSA", &rsaSignBlob },
1279 { 4, szOID_RSA_SHA384RSA, CALG_SHA_384, L"sha384RSA", &rsaSignBlob },
1280 { 4, szOID_RSA_SHA512RSA, CALG_SHA_512, L"sha512RSA", &rsaSignBlob },
1281 { 4, szOID_RSA_MD5RSA, CALG_MD5, L"md5RSA", &rsaSignBlob },
1282 { 4, szOID_X957_SHA1DSA, CALG_SHA1, L"sha1DSA", &dssSignBlob },
1283 { 4, szOID_OIWSEC_sha1RSASign, CALG_SHA1, L"sha1RSA", &rsaSignBlob },
1285 { 4, szOID_OIWSEC_shaRSA, CALG_SHA1, L"shaRSA", &rsaSignBlob },
1286 { 4, szOID_OIWSEC_md5RSA, CALG_MD5, L"md5RSA", &rsaSignBlob },
1287 { 4, szOID_RSA_MD2RSA, CALG_MD2, L"md2RSA", &rsaSignBlob },
1288 { 4, szOID_RSA_MD4RSA, CALG_MD4, L"md4RSA", &rsaSignBlob },
1289 { 4, szOID_OIWSEC_md4RSA, CALG_MD4, L"md4RSA", &rsaSignBlob },
1290 { 4, szOID_OIWSEC_md4RSA2, CALG_MD4, L"md4RSA", &rsaSignBlob },
1291 { 4, szOID_OIWDIR_md2RSA, CALG_MD2, L"md2RSA", &rsaSignBlob },
1292 { 4, szOID_OIWSEC_shaDSA, CALG_SHA1, L"sha1DSA", &dssSignBlob },
1293 { 4, szOID_OIWSEC_shaDSA, CALG_SHA1, L"shaDSA", &dssSignBlob },
1294 { 4, szOID_OIWSEC_dsaSHA1, CALG_SHA1, L"dsaSHA1", &dssSignBlob },
1295 { 4, szOID_INFOSEC_mosaicUpdatedSig, CALG_SHA1, L"mosaicUpdatedSig", &mosaicSignBlob },
1300
1301 { 5, szOID_COMMON_NAME, 0, L"CN", NULL },
1302 { 5, szOID_LOCALITY_NAME, 0, L"L", NULL },
1303 { 5, szOID_ORGANIZATION_NAME, 0, L"O", NULL },
1304 { 5, szOID_ORGANIZATIONAL_UNIT_NAME, 0, L"OU", NULL },
1305 { 5, szOID_RSA_emailAddr, 0, L"E", &ia5StringBlob },
1306 { 5, szOID_RSA_emailAddr, 0, L"Email", &ia5StringBlob },
1308 { 5, szOID_STATE_OR_PROVINCE_NAME, 0, L"S", NULL },
1309 { 5, szOID_STATE_OR_PROVINCE_NAME, 0, L"ST", NULL },
1310 { 5, szOID_STREET_ADDRESS, 0, L"STREET", NULL },
1311 { 5, szOID_TITLE, 0, L"T", NULL },
1312 { 5, szOID_TITLE, 0, L"Title", NULL },
1313 { 5, szOID_GIVEN_NAME, 0, L"G", NULL },
1314 { 5, szOID_GIVEN_NAME, 0, L"GN", NULL },
1315 { 5, szOID_GIVEN_NAME, 0, L"GivenName", NULL },
1316 { 5, szOID_INITIALS, 0, L"I", NULL },
1317 { 5, szOID_INITIALS, 0, L"Initials", NULL },
1318 { 5, szOID_SUR_NAME, 0, L"SN", NULL },
1320 { 5, szOID_DESCRIPTION, 0, L"Description", NULL },
1321 { 5, szOID_POSTAL_CODE, 0, L"PostalCode", NULL },
1322 { 5, szOID_POST_OFFICE_BOX, 0, L"POBox", NULL },
1323 { 5, szOID_TELEPHONE_NUMBER, 0, L"Phone", &printableStringBlob },
1324 { 5, szOID_X21_ADDRESS, 0, L"X21Address", &numericStringBlob },
1325 { 5, szOID_DN_QUALIFIER, 0, L"dnQualifier", NULL },
1326 { 5, szOID_DEVICE_SERIAL_NUMBER, 0, L"SERIALNUMBER", NULL },
1327
1361 { 6, szOID_PKIX_OCSP, 0, (LPCWSTR)IDS_OCSP, NULL },
1374 { 6, "1.3.6.1.4.1.311.2.1.10", 0, L"SpcSpAgencyInfo", NULL },
1375 { 6, "1.3.6.1.4.1.311.2.1.27", 0, L"SpcFinancialCriteria", NULL },
1376 { 6, "1.3.6.1.4.1.311.2.1.26", 0, L"SpcMinimalCriteria", NULL },
1383 { 6, szOID_TITLE, 0, (LPCWSTR)IDS_TITLE, NULL },
1445
1456 { 7, szOID_KP_EFS, 0, (LPCWSTR)IDS_EFS, NULL },
1477
1480
1481struct OIDInfo {
1483 struct list entry;
1484};
1485
1487{
1488 HKEY key;
1489 DWORD len, oid_len, name_len = 0, extra_len = 0, cngalgid_len = 0, cngextra_len = 0, group_id = 0;
1490 struct OIDInfo *info;
1491 char *p;
1492
1494 return NULL;
1495
1496 p = strchr(key_name, '!');
1497 if (p)
1498 {
1499 group_id = strtol(p + 1, NULL, 10);
1500 *p = 0;
1501 }
1502
1503 oid_len = strlen(key_name) + 1;
1504
1505 RegQueryValueExW(key, L"Name", NULL, NULL, NULL, &name_len);
1506 RegQueryValueExW(key, L"ExtraInfo", NULL, NULL, NULL, &extra_len);
1507 RegQueryValueExW(key, L"CNGAlgid", NULL, NULL, NULL, &cngalgid_len);
1508 RegQueryValueExW(key, L"CNGExtraAlgid", NULL, NULL, NULL, &cngextra_len);
1509
1510 info = CryptMemAlloc(sizeof(*info) + oid_len + name_len + extra_len + cngalgid_len + cngextra_len);
1511 if (info)
1512 {
1513 *flags = 0;
1514 len = sizeof(*flags);
1515 RegQueryValueExW(key, L"Flags", NULL, NULL, (BYTE *)flags, &len);
1516
1517 memset(info, 0, sizeof(*info));
1518 info->info.cbSize = sizeof(info->info);
1519
1520 p = (char *)(info + 1);
1521
1522 info->info.pszOID = p;
1523 strcpy((char *)info->info.pszOID, key_name);
1524 p += oid_len;
1525
1526 if (name_len)
1527 {
1528 info->info.pwszName = (WCHAR *)p;
1529 RegQueryValueExW(key, L"Name", NULL, NULL, (BYTE *)info->info.pwszName, &name_len);
1530 p += name_len;
1531 }
1532
1533 info->info.dwGroupId = group_id;
1534
1535 len = sizeof(info->info.Algid);
1536 RegQueryValueExW(key, L"Algid", NULL, NULL, (BYTE *)&info->info.Algid, &len);
1537
1538 if (extra_len)
1539 {
1540 info->info.ExtraInfo.cbData = extra_len;
1541 info->info.ExtraInfo.pbData = (BYTE *)p;
1542 RegQueryValueExW(key, L"ExtraInfo", NULL, NULL, info->info.ExtraInfo.pbData, &extra_len);
1543 p += extra_len;
1544 }
1545
1546 if (cngalgid_len)
1547 {
1548 info->info.pwszCNGAlgid = (WCHAR *)p;
1549 RegQueryValueExW(key, L"CNGAlgid", NULL, NULL, (BYTE *)info->info.pwszCNGAlgid, &cngalgid_len);
1550 p += cngalgid_len;
1551 }
1552
1553 if (cngextra_len)
1554 {
1555 info->info.pwszCNGExtraAlgid = (WCHAR *)p;
1556 RegQueryValueExW(key, L"CNGExtraAlgid", NULL, NULL, (BYTE *)info->info.pwszCNGExtraAlgid, &cngalgid_len);
1557 }
1558 }
1559
1561
1562 return info;
1563}
1564
1566{
1567 DWORD err, idx;
1568 HKEY root;
1569
1570 err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CryptDllFindOIDInfo",
1571 0, KEY_ALL_ACCESS, &root);
1572 if (err != ERROR_SUCCESS) return;
1573
1574 idx = 0;
1575 for (;;)
1576 {
1577 char key_name[MAX_PATH];
1578 struct OIDInfo *info;
1579 DWORD flags;
1580
1582 if (err == ERROR_NO_MORE_ITEMS)
1583 break;
1584
1585 if (err == ERROR_SUCCESS)
1586 {
1587 if ((info = read_oid_info(root, key_name, &flags)))
1588 {
1589 TRACE("adding oid %s, name %s, groupid %lu, algid %u, extra %lu, CNG algid %s, CNG extra %s\n",
1590 debugstr_a(info->info.pszOID), debugstr_w(info->info.pwszName),
1591 info->info.dwGroupId, info->info.Algid, info->info.ExtraInfo.cbData,
1592 debugstr_w(info->info.pwszCNGAlgid), debugstr_w(info->info.pwszCNGExtraAlgid));
1593
1595 list_add_head(&oidInfo, &info->entry);
1596 else
1597 list_add_tail(&oidInfo, &info->entry);
1598 }
1599 }
1600 }
1601
1603}
1604
1605static void init_oid_info(void)
1606{
1607 DWORD i;
1608
1610 for (i = 0; i < ARRAY_SIZE(oidInfoConstructors); i++)
1611 {
1612 if (!IS_INTRESOURCE(oidInfoConstructors[i].pwszName))
1613 {
1614 struct OIDInfo *info;
1615
1616 /* The name is a static string, so just use the same pointer */
1617 info = CryptMemAlloc(sizeof(struct OIDInfo));
1618 if (info)
1619 {
1620 memset(info, 0, sizeof(*info));
1621 info->info.cbSize = sizeof(CRYPT_OID_INFO);
1622 info->info.pszOID = oidInfoConstructors[i].pszOID;
1623 info->info.pwszName = oidInfoConstructors[i].pwszName;
1624 info->info.dwGroupId = oidInfoConstructors[i].dwGroupId;
1625 info->info.Algid = oidInfoConstructors[i].Algid;
1627 {
1628 info->info.ExtraInfo.cbData =
1629 oidInfoConstructors[i].blob->cbData;
1630 info->info.ExtraInfo.pbData =
1631 oidInfoConstructors[i].blob->pbData;
1632 }
1633 info->info.pwszCNGAlgid = oidInfoConstructors[i].pwszCNGAlgid;
1634 info->info.pwszCNGExtraAlgid = oidInfoConstructors[i].pwszCNGExtraAlgid;
1635 list_add_tail(&oidInfo, &info->entry);
1636 }
1637 }
1638 else
1639 {
1640 LPCWSTR stringresource;
1642 (UINT_PTR)oidInfoConstructors[i].pwszName,
1643 (LPWSTR)&stringresource, 0);
1644
1645 if (len)
1646 {
1647 struct OIDInfo *info = CryptMemAlloc(sizeof(struct OIDInfo) +
1648 (len + 1) * sizeof(WCHAR));
1649
1650 if (info)
1651 {
1652 memset(info, 0, sizeof(*info));
1653 info->info.cbSize = sizeof(CRYPT_OID_INFO);
1654 info->info.pszOID = oidInfoConstructors[i].pszOID;
1655 info->info.pwszName = (LPWSTR)(info + 1);
1656 info->info.dwGroupId = oidInfoConstructors[i].dwGroupId;
1657 info->info.Algid = oidInfoConstructors[i].Algid;
1658 memcpy(info + 1, stringresource, len*sizeof(WCHAR));
1659 ((LPWSTR)(info + 1))[len] = 0;
1661 {
1662 info->info.ExtraInfo.cbData =
1663 oidInfoConstructors[i].blob->cbData;
1664 info->info.ExtraInfo.pbData =
1665 oidInfoConstructors[i].blob->pbData;
1666 }
1667 info->info.pwszCNGAlgid = oidInfoConstructors[i].pwszCNGAlgid;
1668 info->info.pwszCNGExtraAlgid = oidInfoConstructors[i].pwszCNGExtraAlgid;
1669 list_add_tail(&oidInfo, &info->entry);
1670 }
1671 }
1672 }
1673 }
1674}
1675
1676static void free_oid_info(void)
1677{
1678 struct OIDInfo *info, *next;
1679
1681 {
1682 list_remove(&info->entry);
1684 }
1686}
1687
1688/***********************************************************************
1689 * CryptEnumOIDInfo (CRYPT32.@)
1690 */
1692 PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo)
1693{
1694 BOOL ret = TRUE;
1695 struct OIDInfo *info;
1696
1697 TRACE("(%ld, %08lx, %p, %p)\n", dwGroupId, dwFlags, pvArg,
1698 pfnEnumOIDInfo);
1699
1702 {
1703 if (!dwGroupId || dwGroupId == info->info.dwGroupId)
1704 {
1705 ret = pfnEnumOIDInfo(&info->info, pvArg);
1706 if (!ret)
1707 break;
1708 }
1709 }
1711 return ret;
1712}
1713
1715 DWORD dwGroupId)
1716{
1718
1719 TRACE("(%ld, %p, %ld)\n", dwKeyType, pvKey, dwGroupId);
1720
1721 switch(dwKeyType)
1722 {
1724 {
1725 struct OIDInfo *info;
1726
1727 TRACE("CRYPT_OID_INFO_ALGID_KEY: %ld\n", *(DWORD *)pvKey);
1730 {
1731 if (info->info.Algid == *(DWORD *)pvKey &&
1732 (!dwGroupId || info->info.dwGroupId == dwGroupId))
1733 {
1734 ret = &info->info;
1735 break;
1736 }
1737 }
1739 break;
1740 }
1742 {
1743 struct OIDInfo *info;
1744
1745 TRACE("CRYPT_OID_INFO_NAME_KEY: %s\n", debugstr_w(pvKey));
1748 {
1749 if (!wcscmp(info->info.pwszName, pvKey) &&
1750 (!dwGroupId || info->info.dwGroupId == dwGroupId))
1751 {
1752 ret = &info->info;
1753 break;
1754 }
1755 }
1757 break;
1758 }
1760 {
1761 struct OIDInfo *info;
1762 LPSTR oid = pvKey;
1763
1764 TRACE("CRYPT_OID_INFO_OID_KEY: %s\n", debugstr_a(oid));
1767 {
1768 if (!lstrcmpA(info->info.pszOID, oid) &&
1769 (!dwGroupId || info->info.dwGroupId == dwGroupId))
1770 {
1771 ret = &info->info;
1772 break;
1773 }
1774 }
1776 break;
1777 }
1779 {
1780 struct OIDInfo *info;
1781
1782 TRACE("CRYPT_OID_INFO_SIGN_KEY: %ld\n", *(DWORD *)pvKey);
1785 {
1786 if (info->info.Algid == *(DWORD *)pvKey &&
1787 info->info.ExtraInfo.cbData >= sizeof(DWORD) &&
1788 *(DWORD *)info->info.ExtraInfo.pbData ==
1789 *(DWORD *)((LPBYTE)pvKey + sizeof(DWORD)) &&
1790 (!dwGroupId || info->info.dwGroupId == dwGroupId))
1791 {
1792 ret = &info->info;
1793 break;
1794 }
1795 }
1797 break;
1798 }
1799 }
1800 return ret;
1801}
1802
1804{
1805 LPCSTR ret;
1807 &dwAlgId, 0);
1808
1809 if (info)
1810 ret = info->pszOID;
1811 else
1812 ret = NULL;
1813 return ret;
1814}
1815
1817{
1818 DWORD ret;
1820 (void *)pszObjId, 0);
1821
1822 if (info)
1823 ret = info->Algid;
1824 else
1825 ret = 0;
1826 return ret;
1827}
1828
1830{
1831 init_oid_info();
1833}
1834
1836{
1838 free_oid_info();
1839}
static struct list dlls
Definition: apartment.c:63
#define IDS_TITLE
Definition: resource.h:30
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define IDS_OS_VERSION
Definition: resource.h:155
#define ARRAY_SIZE(A)
Definition: main.h:20
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
static void list_init(struct list_entry *head)
Definition: list.h:51
#define FIXME(fmt,...)
Definition: precomp.h:53
static const WCHAR BCRYPT_SHA384_ALGORITHM[]
Definition: bcrypt.h:190
static const WCHAR BCRYPT_SHA256_ALGORITHM[]
Definition: bcrypt.h:189
#define RegCloseKey(hKey)
Definition: registry.h:49
struct _root root
HINSTANCE hInstance
Definition: charmap.c:19
Definition: list.h:37
Definition: _set.h:50
#define IDS_KEY_PACK_LICENSES
Definition: cryptres.h:146
#define IDS_RDN_DUMMY_SIGNER
Definition: cryptres.h:115
#define IDS_NT5_CRYPTO
Definition: cryptres.h:143
#define IDS_SUBJECT_ALT_NAME
Definition: cryptres.h:26
#define IDS_SORTED_CTL
Definition: cryptres.h:127
#define IDS_IPSEC_USER
Definition: cryptres.h:140
#define IDS_PKCS_7_ENVELOPED
Definition: cryptres.h:104
#define IDS_ANY_CERT_POLICY
Definition: cryptres.h:160
#define IDS_CA_ISSUER
Definition: cryptres.h:52
#define IDS_CERT_MANIFOLD
Definition: cryptres.h:55
#define IDS_UNSTRUCTURED_NAME
Definition: cryptres.h:40
#define IDS_CA_EXCHANGE
Definition: cryptres.h:111
#define IDS_FILE_RECOVERY
Definition: cryptres.h:154
#define IDS_CLIENT_AUTHENTICATION
Definition: cryptres.h:132
#define IDS_SERIAL_NUMBER
Definition: cryptres.h:76
#define IDS_NETSCAPE_CERT_RENEWAL_URL
Definition: cryptres.h:60
#define IDS_POLICY_CONSTRAINTS
Definition: cryptres.h:91
#define IDS_KEY_RECOVERY
Definition: cryptres.h:151
#define IDS_QUALIFIED_SUBORDINATION
Definition: cryptres.h:150
#define IDS_GIVEN_NAME
Definition: cryptres.h:71
#define IDS_PKCS_7_ENCRYPTED
Definition: cryptres.h:107
#define IDS_IPSEC_TUNNEL
Definition: cryptres.h:139
#define IDS_DIGITAL_RIGHTS
Definition: cryptres.h:149
#define IDS_NEXT_UPDATE_LOCATION
Definition: cryptres.h:37
#define IDS_MICROSOFT_TIME_STAMPING
Definition: cryptres.h:137
#define IDS_OCSP
Definition: cryptres.h:51
#define IDS_LOCALITY
Definition: cryptres.h:68
#define IDS_UNSIGNED_CMC_REQUEST
Definition: cryptres.h:98
#define IDS_CERT_TEMPLATE_NAME
Definition: cryptres.h:53
#define IDS_NETSCAPE_REVOCATION_URL
Definition: cryptres.h:58
#define IDS_ISSUING_DIST_POINT
Definition: cryptres.h:87
#define IDS_KEY_RECOVERY_AGENT
Definition: cryptres.h:112
#define IDS_APPLICATION_POLICY_CONSTRAINTS
Definition: cryptres.h:95
#define IDS_IPSEC_IKE_INTERMEDIATE
Definition: cryptres.h:153
#define IDS_ARCHIVED_KEY_CERT_HASH
Definition: cryptres.h:128
#define IDS_CMC_EXTENSIONS
Definition: cryptres.h:100
#define IDS_REG_INFO
Definition: cryptres.h:122
#define IDS_KEY_USAGE
Definition: cryptres.h:29
#define IDS_NETSCAPE_CERT_TYPE
Definition: cryptres.h:56
#define IDS_PREVIOUS_CA_CERT_HASH
Definition: cryptres.h:108
#define IDS_SERIALIZED_SIG_SERIAL_NUMBER
Definition: cryptres.h:79
#define IDS_ENROLLMENT_NAME_VALUE_PAIR
Definition: cryptres.h:82
#define IDS_COUNTRY
Definition: cryptres.h:64
#define IDS_CLIENT_INFORMATION
Definition: cryptres.h:130
#define IDS_DOCUMENT_SIGNING
Definition: cryptres.h:152
#define IDS_PRIVATE_KEY_USAGE_PERIOD
Definition: cryptres.h:129
#define IDS_ENHANCED_KEY_USAGE
Definition: cryptres.h:34
#define IDS_ROOT_LIST_SIGNER
Definition: cryptres.h:155
#define IDS_QUERY_PENDING
Definition: cryptres.h:126
#define IDS_CODE_SIGNING
Definition: cryptres.h:133
#define IDS_NETSCAPE_COMMENT
Definition: cryptres.h:63
#define IDS_ORGANIZATIONAL_UNIT
Definition: cryptres.h:66
#define IDS_EFS
Definition: cryptres.h:141
#define IDS_PRINCIPAL_NAME
Definition: cryptres.h:80
#define IDS_SECURE_EMAIL
Definition: cryptres.h:134
#define IDS_TIME_STAMPING
Definition: cryptres.h:135
#define IDS_SIGNING_TIME
Definition: cryptres.h:43
#define IDS_CPS
Definition: cryptres.h:49
#define IDS_CMC_RESPONSE
Definition: cryptres.h:97
#define IDS_STATE_OR_PROVINCE
Definition: cryptres.h:69
#define IDS_ENROLLMENT_AGENT
Definition: cryptres.h:158
#define IDS_CROSS_CA_VERSION
Definition: cryptres.h:78
#define IDS_FRESHEST_CRL
Definition: cryptres.h:88
#define IDS_PREFER_SIGNED_DATA
Definition: cryptres.h:48
#define IDS_DOMAIN_COMPONENT
Definition: cryptres.h:74
#define IDS_CERTIFICATE_TEMPLATE
Definition: cryptres.h:113
#define IDS_EMAIL_ADDRESS
Definition: cryptres.h:39
#define IDS_NAME_CONSTRAINTS
Definition: cryptres.h:89
#define IDS_KEY_ATTRIBUTES
Definition: cryptres.h:24
#define IDS_INITIALS
Definition: cryptres.h:72
#define IDS_LICENSE_SERVER
Definition: cryptres.h:147
#define IDS_UNSTRUCTURED_ADDRESS
Definition: cryptres.h:46
#define IDS_ANY_APPLICATION_POLICIES
Definition: cryptres.h:156
#define IDS_ENTERPRISE_ROOT_OID
Definition: cryptres.h:114
#define IDS_CRL_REASON_CODE
Definition: cryptres.h:32
#define IDS_NETSCAPE_BASE_URL
Definition: cryptres.h:57
#define IDS_PKCS_7_SIGNED_ENVELOPED
Definition: cryptres.h:105
#define IDS_KEY_USAGE_RESTRICTION
Definition: cryptres.h:25
#define IDS_NETSCAPE_SSL_SERVER_NAME
Definition: cryptres.h:62
#define IDS_AUTHORITY_KEY_ID
Definition: cryptres.h:23
#define IDS_LIFETIME_SIGNING
Definition: cryptres.h:159
#define IDS_SMIME_CAPABILITIES
Definition: cryptres.h:47
#define IDS_PKCS_7_SIGNED
Definition: cryptres.h:103
#define IDS_LOCALIZEDNAME_ROOT
Definition: cryptres.h:162
#define IDS_CA_VERSION
Definition: cryptres.h:77
#define IDS_CONTENT_TYPE
Definition: cryptres.h:41
#define IDS_CMC_ATTRIBUTES
Definition: cryptres.h:101
#define IDS_CRL_NEXT_PUBLISH
Definition: cryptres.h:110
#define IDS_CERT_TYPE
Definition: cryptres.h:54
#define IDS_POLICY_MAPPINGS
Definition: cryptres.h:90
#define IDS_YES_OR_NO_TRUST
Definition: cryptres.h:38
#define IDS_ISSUER_ALT_NAME
Definition: cryptres.h:27
#define IDS_CERT_POLICIES
Definition: cryptres.h:30
#define IDS_REVOKE_REQUEST
Definition: cryptres.h:125
#define IDS_CERT_EXTENSIONS
Definition: cryptres.h:36
#define IDS_STREET_ADDRESS
Definition: cryptres.h:75
#define IDS_ORGANIZATION
Definition: cryptres.h:65
#define IDS_APPLICATION_POLICY_MAPPINGS
Definition: cryptres.h:94
#define IDS_PKCS_7_DATA
Definition: cryptres.h:102
#define IDS_CROSS_CERT_DIST_POINTS
Definition: cryptres.h:92
#define IDS_IPSEC_END_SYSTEM
Definition: cryptres.h:138
#define IDS_USER_NOTICE
Definition: cryptres.h:50
#define IDS_CRL_DIST_POINTS
Definition: cryptres.h:33
#define IDS_NETSCAPE_CA_REVOCATION_URL
Definition: cryptres.h:59
#define IDS_WHQL_CRYPTO
Definition: cryptres.h:142
#define IDS_AUTHORITY_INFO_ACCESS
Definition: cryptres.h:35
#define IDS_CMC_DATA
Definition: cryptres.h:96
#define IDS_SENDER_NONCE
Definition: cryptres.h:120
#define IDS_EMBEDDED_NT_CRYPTO
Definition: cryptres.h:145
#define IDS_DS_EMAIL_REPLICATION
Definition: cryptres.h:157
#define IDS_MESSAGE_DIGEST
Definition: cryptres.h:42
#define IDS_SUR_NAME
Definition: cryptres.h:73
#define IDS_REQUIRE_CERT_CHAIN_POLICY
Definition: cryptres.h:118
#define IDS_TRANSACTION_ID
Definition: cryptres.h:119
#define IDS_SUBJECT_KEY_IDENTIFIER
Definition: cryptres.h:31
#define IDS_APPLICATION_POLICIES
Definition: cryptres.h:93
#define IDS_OEM_WHQL_CRYPTO
Definition: cryptres.h:144
#define IDS_RECIPIENT_NONCE
Definition: cryptres.h:121
#define IDS_CHALLENGE_PASSWORD
Definition: cryptres.h:45
#define IDS_GET_CRL
Definition: cryptres.h:124
#define IDS_SERVER_AUTHENTICATION
Definition: cryptres.h:131
#define IDS_SMART_CARD_LOGON
Definition: cryptres.h:148
#define IDS_CRL_SELF_CDP
Definition: cryptres.h:117
#define IDS_ENROLLMENT_CSP
Definition: cryptres.h:84
#define IDS_DELTA_CRL_INDICATOR
Definition: cryptres.h:86
#define IDS_ARCHIVED_KEY_ATTR
Definition: cryptres.h:116
#define IDS_CRL_NUMBER
Definition: cryptres.h:85
#define IDS_CMC_STATUS_INFO
Definition: cryptres.h:99
#define IDS_BASIC_CONSTRAINTS
Definition: cryptres.h:28
#define IDS_MICROSOFT_TRUST_LIST_SIGNING
Definition: cryptres.h:136
#define IDS_CRL_VIRTUAL_BASE
Definition: cryptres.h:109
#define IDS_COUNTER_SIGN
Definition: cryptres.h:44
#define IDS_GET_CERTIFICATE
Definition: cryptres.h:123
#define IDS_PKCS_7_DIGESTED
Definition: cryptres.h:106
#define IDS_WINDOWS_PRODUCT_UPDATE
Definition: cryptres.h:81
#define IDS_NETSCAPE_CA_POLICY_URL
Definition: cryptres.h:61
#define IDS_COMMON_NAME
Definition: cryptres.h:67
#define IS_INTOID(x)
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define E_INVALIDARG
Definition: ddrawi.h:101
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int idx
Definition: utils.c:41
LONG WINAPI RegCreateKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1179
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
Definition: reg.c:4799
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3298
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3234
LONG WINAPI RegEnumKeyA(HKEY hKey, DWORD dwIndex, LPSTR lpName, DWORD cbName)
Definition: reg.c:2368
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
LONG WINAPI RegCreateKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD Reserved, _In_ LPSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_ LPDWORD lpdwDisposition)
Definition: reg.c:1034
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
Definition: reg.c:1224
HMODULE hModule
Definition: animate.c:44
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
Definition: main.c:136
LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize)
Definition: main.c:141
VOID WINAPI CryptMemFree(LPVOID pv)
Definition: main.c:146
static const CRYPT_DATA_BLOB numericStringBlob
Definition: oid.c:1226
BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO info, DWORD flags)
Definition: oid.c:738
static struct list oidInfo
Definition: oid.c:1194
void crypt_oid_init(void)
Definition: oid.c:1829
BOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, DWORD dwIndex, LPCWSTR pwszDll)
Definition: oid.c:1097
static const DWORD numericString[]
Definition: oid.c:1220
static CRITICAL_SECTION_DEBUG funcSetCSDebug
Definition: oid.c:40
static const LPCWSTR LocalizedKeys[]
Definition: oid.c:65
BOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, LPCWSTR pwszDll)
Definition: oid.c:1130
void crypt_oid_free(void)
Definition: oid.c:1835
static const DWORD mosaicFlags
Definition: oid.c:1197
static BOOL CRYPT_RemoveStringFromMultiString(LPWSTR multi, LPCWSTR toRemove)
Definition: oid.c:1004
BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType, const BYTE *pbValueData, DWORD cbValueData)
Definition: oid.c:879
HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName, DWORD dwFlags)
Definition: oid.c:103
BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
Definition: oid.c:499
static LPWSTR CRYPT_AddStringToMultiString(LPWSTR multi, LPCWSTR toAdd, DWORD index)
Definition: oid.c:946
static CRITICAL_SECTION_DEBUG oidInfoCSDebug
Definition: oid.c:1187
static const CRYPT_DATA_BLOB ia5StringBlob
Definition: oid.c:1224
BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo)
Definition: oid.c:1691
static const DWORD rsaSign
Definition: oid.c:1204
static LPCWSTR CRYPT_FindStringInMultiString(LPCWSTR multi, LPCWSTR toFind)
Definition: oid.c:916
PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey, DWORD dwGroupId)
Definition: oid.c:1714
static const DWORD noNullFlag
Definition: oid.c:1196
static const CRYPT_DATA_BLOB noNullBlob
Definition: oid.c:1199
static BOOL is_module_registered(HMODULE hModule)
Definition: oid.c:424
BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
Definition: oid.c:375
static void free_oid_info(void)
Definition: oid.c:1676
LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName)
Definition: oid.c:1170
BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList)
Definition: oid.c:182
static const DWORD ecdsaSign[2]
Definition: oid.c:1210
static const CRYPT_DATA_BLOB mosaicSignBlob
Definition: oid.c:1215
static void free_function_sets(void)
Definition: oid.c:76
static CRITICAL_SECTION oidInfoCS
Definition: oid.c:1186
static BOOL CRYPT_GetFuncFromReg(DWORD dwEncodingType, LPCSTR pszOID, LPCSTR szFuncName, LPVOID *ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
Definition: oid.c:286
static BOOL CRYPT_GetDefaultOIDKey(DWORD dwEncodingType, LPCSTR pszFuncName, PHKEY key)
Definition: oid.c:1038
static WCHAR LocalizedNames[ARRAY_SIZE(LocalizedKeys)][256]
Definition: oid.c:74
static char * CRYPT_GetKeyName(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID)
Definition: oid.c:146
static const DWORD dssSign[2]
Definition: oid.c:1205
static const DWORD domainCompTypes[]
Definition: oid.c:1222
static struct OIDInfo * read_oid_info(HKEY root, char *key_name, DWORD *flags)
Definition: oid.c:1486
static DWORD CRYPT_GetMultiStringCharacterLen(LPCWSTR multi)
Definition: oid.c:928
static const CRYPT_DATA_BLOB dssSignBlob
Definition: oid.c:1213
static const DWORD printableString[]
Definition: oid.c:1221
static const CRYPT_DATA_BLOB mosaicFlagsBlob
Definition: oid.c:1201
BOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule, DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry, const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags)
Definition: oid.c:225
static void init_oid_info(void)
Definition: oid.c:1605
static BOOL CRYPT_SetDefaultOIDDlls(HKEY key, LPCWSTR dlls)
Definition: oid.c:1083
static const CRYPT_DATA_BLOB domainCompTypesBlob
Definition: oid.c:1230
static const CRYPT_DATA_BLOB printableStringBlob
Definition: oid.c:1228
static BOOL CRYPT_GetFuncFromDll(LPCWSTR dll, LPCSTR func, HMODULE *lib, void **ppvFuncAddr)
Definition: oid.c:479
static const DWORD ia5String[]
Definition: oid.c:1219
BOOL WINAPI CryptRegisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszDll, LPCSTR pszOverrideFuncName)
Definition: oid.c:635
static CRITICAL_SECTION funcSetCS
Definition: oid.c:39
static void init_registered_oid_info(void)
Definition: oid.c:1565
LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId)
Definition: oid.c:1803
static const struct OIDInfoConstructor oidInfoConstructors[]
static const CRYPT_DATA_BLOB ecdsaSignBlob
Definition: oid.c:1217
DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId)
Definition: oid.c:1816
BOOL WINAPI CryptUnregisterOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID)
Definition: oid.c:819
static void oid_init_localizednames(void)
Definition: oid.c:1157
static const CRYPT_DATA_BLOB rsaSignBlob
Definition: oid.c:1211
static LPWSTR CRYPT_GetDefaultOIDDlls(HKEY key)
Definition: oid.c:1061
BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags)
Definition: oid.c:456
BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszValueName, DWORD *pdwValueType, BYTE *pbValueData, DWORD *pcbValueData)
Definition: oid.c:842
BOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO info)
Definition: oid.c:696
static const DWORD mosaicSign[2]
Definition: oid.c:1207
static struct list funcSets
Definition: oid.c:47
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:105
#define stricmp(_String1, _String2)
Definition: compat.h:24
#define MAX_PATH
Definition: compat.h:34
#define LoadLibraryW(x)
Definition: compat.h:747
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
Definition: sync.c:107
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4104
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
#define IS_INTRESOURCE(x)
Definition: loader.c:613
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
_ACRTIMP __msvcrt_long __cdecl strtol(const char *, char **, int)
Definition: string.c:1838
_ACRTIMP char *__cdecl strchr(const char *, int)
Definition: string.c:3291
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLenum func
Definition: glext.h:6028
GLsizeiptr size
Definition: glext.h:5919
GLuint index
Definition: glext.h:6031
GLbitfield flags
Definition: glext.h:7161
GLenum const GLvoid * addr
Definition: glext.h:9621
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
const char cursor[]
Definition: icontest.c:13
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
#define REG_SZ
Definition: layer.c:22
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static PVOID ptr
Definition: dispmode.c:27
#define sprintf
Definition: sprintf.c:45
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define REG_BINARY
Definition: nt_native.h:1499
#define KEY_ALL_ACCESS
Definition: nt_native.h:1044
#define KEY_READ
Definition: nt_native.h:1026
#define REG_MULTI_SZ
Definition: nt_native.h:1504
#define LOWORD(l)
Definition: pedump.c:82
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
static unsigned __int64 next
Definition: rand_nt.c:6
#define err(...)
#define REG_DWORD
Definition: sdbapi.c:615
strcpy
Definition: string.h:131
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define LoadStringW
Definition: utils.h:64
#define memset(x, y, z)
Definition: compat.h:39
#define TRACE(s)
Definition: solgame.cpp:4
Definition: oid.c:280
LPWSTR currentDll
Definition: oid.c:283
LPWSTR dllList
Definition: oid.c:282
HMODULE lib
Definition: oid.c:281
struct list next
Definition: oid.c:54
LPSTR name
Definition: oid.c:51
struct list functions
Definition: oid.c:53
CRITICAL_SECTION cs
Definition: oid.c:52
HMODULE hModule
Definition: oid.c:59
CRYPT_OID_FUNC_ENTRY entry
Definition: oid.c:61
struct list next
Definition: oid.c:62
DWORD encoding
Definition: oid.c:60
const CRYPT_DATA_BLOB * blob
Definition: oid.c:1238
const WCHAR * pwszCNGAlgid
Definition: oid.c:1239
const WCHAR * pwszCNGExtraAlgid
Definition: oid.c:1240
DWORD dwGroupId
Definition: oid.c:1234
LPCWSTR pwszName
Definition: oid.c:1237
LPCSTR pszOID
Definition: oid.c:1235
Definition: oid.c:1481
CRYPT_OID_INFO info
Definition: oid.c:1482
struct list entry
Definition: oid.c:1483
Definition: wincrypt.h:1568
void * pvFuncAddr
Definition: wincrypt.h:1570
LPCSTR pszOID
Definition: wincrypt.h:1569
PRTL_CRITICAL_SECTION_DEBUG DebugInfo
Definition: rtltypes.h:1450
Definition: image.c:134
Definition: copy.c:22
#define DWORD_PTR
Definition: treelist.c:76
const char * LPCSTR
Definition: typedefs.h:52
const uint16_t * LPCWSTR
Definition: typedefs.h:57
unsigned char * LPBYTE
Definition: typedefs.h:53
uint16_t * LPWSTR
Definition: typedefs.h:56
char * LPSTR
Definition: typedefs.h:51
_In_z_ PCWSTR pwszValueName
Definition: ntuser.h:42
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define szOID_PKIX_KP_IPSEC_END_SYSTEM
Definition: wincrypt.h:3454
#define szOID_RSA_DH
Definition: wincrypt.h:3180
#define szOID_CMC_TRANSACTION_ID
Definition: wincrypt.h:3464
#define szOID_RSA_SHA256RSA
Definition: wincrypt.h:3177
#define szOID_OIWSEC_sha1RSASign
Definition: wincrypt.h:3256
#define szOID_NT5_CRYPTO
Definition: wincrypt.h:3377
#define CALG_RC2
Definition: wincrypt.h:2083
#define CRYPT_GET_INSTALLED_OID_FUNC_FLAG
Definition: wincrypt.h:2703
static const WCHAR CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM[]
Definition: wincrypt.h:1608
#define szOID_APPLICATION_POLICY_CONSTRAINTS
Definition: wincrypt.h:3433
#define szOID_KP_DOCUMENT_SIGNING
Definition: wincrypt.h:3383
#define szOID_RSA_SHA512RSA
Definition: wincrypt.h:3179
#define szOID_AUTHORITY_KEY_IDENTIFIER
Definition: wincrypt.h:3331
#define szOID_INFOSEC_mosaicKMandUpdSig
Definition: wincrypt.h:3285
#define szOID_X957_SHA1DSA
Definition: wincrypt.h:3215
#define szOID_ARCHIVED_KEY_CERT_HASH
Definition: wincrypt.h:3437
#define szOID_RSA_SMIMECapabilities
Definition: wincrypt.h:3198
#define CERT_RDN_UTF8_STRING
Definition: wincrypt.h:2940
#define CERT_RDN_IA5_STRING
Definition: wincrypt.h:2931
#define szOID_EFS_RECOVERY
Definition: wincrypt.h:3375
#define szOID_CERT_EXTENSIONS
Definition: wincrypt.h:3364
#define szOID_RSA_envelopedData
Definition: wincrypt.h:3183
#define CALG_SHA1
Definition: wincrypt.h:2060
#define szOID_OIWSEC_dsaSHA1
Definition: wincrypt.h:3254
#define szOID_KP_KEY_RECOVERY_AGENT
Definition: wincrypt.h:3427
BOOL(WINAPI * PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo, void *pvArg)
Definition: wincrypt.h:1640
#define GET_CERT_ENCODING_TYPE(x)
Definition: wincrypt.h:2496
#define CRYPT_OID_INFO_SIGN_KEY
Definition: wincrypt.h:1958
#define szOID_SERIALIZED
Definition: wincrypt.h:3487
#define szOID_CRL_NEXT_PUBLISH
Definition: wincrypt.h:3425
#define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG
Definition: wincrypt.h:1951
#define szOID_PKIX_POLICY_QUALIFIER_CPS
Definition: wincrypt.h:3447
#define CERT_RDN_PRINTABLE_STRING
Definition: wincrypt.h:2927
#define szOID_CROSS_CERT_DIST_POINTS
Definition: wincrypt.h:3400
#define szOID_RSA_MD5RSA
Definition: wincrypt.h:3174
struct _CRYPT_OID_INFO CRYPT_OID_INFO
#define szOID_LICENSES
Definition: wincrypt.h:3394
#define szOID_POLICY_MAPPINGS
Definition: wincrypt.h:3355
#define szOID_ECDSA_SHA256
Definition: wincrypt.h:3219
#define szOID_DRM
Definition: wincrypt.h:3388
#define szOID_NIST_sha256
Definition: wincrypt.h:3287
#define CALG_RSA_SIGN
Definition: wincrypt.h:2069
#define szOID_CRL_DIST_POINTS
Definition: wincrypt.h:3352
#define szOID_OIWSEC_md4RSA
Definition: wincrypt.h:3230
#define szOID_BASIC_CONSTRAINTS2
Definition: wincrypt.h:3345
#define CALG_SHA_384
Definition: wincrypt.h:2067
#define szOID_CMC_GET_CERT
Definition: wincrypt.h:3471
#define szOID_CMC
Definition: wincrypt.h:3459
#define CALG_RC4
Definition: wincrypt.h:2091
#define szOID_FRESHEST_CRL
Definition: wincrypt.h:3359
#define szOID_RSA_MD4RSA
Definition: wincrypt.h:3173
#define CALG_MD5
Definition: wincrypt.h:2058
#define szOID_NETSCAPE_COMMENT
Definition: wincrypt.h:3503
#define szOID_LEGACY_POLICY_MAPPINGS
Definition: wincrypt.h:3335
#define szOID_ENROLLMENT_AGENT
Definition: wincrypt.h:3412
#define szOID_ENROLLMENT_CSP_PROVIDER
Definition: wincrypt.h:3406
#define szOID_NAME_CONSTRAINTS
Definition: wincrypt.h:3351
#define szOID_IPSEC_KP_IKE_INTERMEDIATE
Definition: wincrypt.h:3484
#define szOID_CMC_ADD_EXTENSIONS
Definition: wincrypt.h:3467
#define szOID_PKIX_OCSP
Definition: wincrypt.h:3482
#define szOID_ENTERPRISE_OID_ROOT
Definition: wincrypt.h:3429
#define szOID_OIWSEC_rsaXchg
Definition: wincrypt.h:3249
#define szOID_RSA_DES_EDE3_CBC
Definition: wincrypt.h:3209
#define szOID_OIWSEC_md4RSA2
Definition: wincrypt.h:3232
#define szOID_CT_PKI_RESPONSE
Definition: wincrypt.h:3480
#define szOID_KP_LIFETIME_SIGNING
Definition: wincrypt.h:3384
#define szOID_RSA_messageDigest
Definition: wincrypt.h:3191
#define szOID_ISSUER_ALT_NAME2
Definition: wincrypt.h:3344
#define szOID_RSA_SMIMEalgESDH
Definition: wincrypt.h:3201
#define szOID_PKIX_KP_CLIENT_AUTH
Definition: wincrypt.h:3451
#define szOID_DELTA_CRL_INDICATOR
Definition: wincrypt.h:3349
#define szOID_CERTSRV_CROSSCA_VERSION
Definition: wincrypt.h:3442
#define szOID_RSA_signedData
Definition: wincrypt.h:3182
#define CALG_SHA_256
Definition: wincrypt.h:2066
#define szOID_RSA_preferSignedData
Definition: wincrypt.h:3199
#define szOID_POST_OFFICE_BOX
Definition: wincrypt.h:3305
#define szOID_RSA_SHA384RSA
Definition: wincrypt.h:3178
#define szOID_RSA_MD4
Definition: wincrypt.h:3205
#define szOID_KEY_USAGE_RESTRICTION
Definition: wincrypt.h:3334
#define szOID_OIWSEC_md5RSA
Definition: wincrypt.h:3231
#define szOID_PKIX_KP_CODE_SIGNING
Definition: wincrypt.h:3452
#define szOID_SORTED_CTL
Definition: wincrypt.h:3402
#define szOID_YESNO_TRUST_ATTR
Definition: wincrypt.h:3386
#define szOID_NETSCAPE_CA_REVOCATION_URL
Definition: wincrypt.h:3499
#define szOID_GIVEN_NAME
Definition: wincrypt.h:3328
#define CALG_OID_INFO_PARAMETERS
Definition: wincrypt.h:1596
#define szOID_KEY_USAGE
Definition: wincrypt.h:3341
#define szOID_RSA_MD2
Definition: wincrypt.h:3204
#define szOID_STATE_OR_PROVINCE_NAME
Definition: wincrypt.h:3295
#define szOID_CMC_RECIPIENT_NONCE
Definition: wincrypt.h:3466
#define CRYPT_REGISTER_LAST_INDEX
Definition: wincrypt.h:2706
#define CALG_MD2
Definition: wincrypt.h:2056
#define CALG_OID_INFO_CNG_ONLY
Definition: wincrypt.h:1595
#define szOID_OIWSEC_shaRSA
Definition: wincrypt.h:3242
#define szOID_KP_TIME_STAMP_SIGNING
Definition: wincrypt.h:3367
#define szOID_ECC_PUBLIC_KEY
Definition: wincrypt.h:3216
#define szOID_PKIX_KP_IPSEC_USER
Definition: wincrypt.h:3456
#define szOID_CMC_STATUS_INFO
Definition: wincrypt.h:3460
#define szOID_COUNTRY_NAME
Definition: wincrypt.h:3293
#define szOID_PKIX_KP_TIMESTAMP_SIGNING
Definition: wincrypt.h:3457
#define szOID_PKIX_KP_IPSEC_TUNNEL
Definition: wincrypt.h:3455
#define szOID_NT_PRINCIPAL_NAME
Definition: wincrypt.h:3417
#define szOID_OEM_WHQL_CRYPTO
Definition: wincrypt.h:3378
#define CRYPT_OID_INFO_NAME_KEY
Definition: wincrypt.h:1956
#define szOID_ANY_CERT_POLICY
Definition: wincrypt.h:3354
#define szOID_REQUIRE_CERT_CHAIN_POLICY
Definition: wincrypt.h:3436
#define szOID_BASIC_CONSTRAINTS
Definition: wincrypt.h:3339
#define szOID_OIWSEC_desCBC
Definition: wincrypt.h:3234
#define szOID_OS_VERSION
Definition: wincrypt.h:3407
#define szOID_KEY_ATTRIBUTES
Definition: wincrypt.h:3332
#define szOID_NETSCAPE_CERT_RENEWAL_URL
Definition: wincrypt.h:3500
#define szOID_SUBJECT_KEY_IDENTIFIER
Definition: wincrypt.h:3340
#define szOID_DN_QUALIFIER
Definition: wincrypt.h:3330
#define szOID_PKIX_NO_SIGNATURE
Definition: wincrypt.h:3458
#define szOID_REQUEST_CLIENT_INFO
Definition: wincrypt.h:3440
#define szOID_OIWSEC_shaDSA
Definition: wincrypt.h:3240
#define szOID_NETSCAPE_BASE_URL
Definition: wincrypt.h:3497
#define szOID_KP_CTL_USAGE_SIGNING
Definition: wincrypt.h:3366
#define szOID_CMC_GET_CRL
Definition: wincrypt.h:3472
#define szOID_ENROLL_CERTTYPE_EXTENSION
Definition: wincrypt.h:3411
#define szOID_ORGANIZATIONAL_UNIT_NAME
Definition: wincrypt.h:3298
#define szOID_NETSCAPE_CA_POLICY_URL
Definition: wincrypt.h:3501
#define szOID_CRL_REASON_CODE
Definition: wincrypt.h:3347
#define szOID_RSA_emailAddr
Definition: wincrypt.h:3188
#define szOID_NIST_sha384
Definition: wincrypt.h:3288
#define CALG_RSA_KEYX
Definition: wincrypt.h:2080
#define szOID_CT_PKI_DATA
Definition: wincrypt.h:3479
#define szOID_RSA_contentType
Definition: wincrypt.h:3190
#define szOID_CERTSRV_PREVIOUS_CERT_HASH
Definition: wincrypt.h:3423
#define szOID_DEVICE_SERIAL_NUMBER
Definition: wincrypt.h:3292
#define szOID_NETSCAPE_REVOCATION_URL
Definition: wincrypt.h:3498
#define szOID_KP_QUALIFIED_SUBORDINATION
Definition: wincrypt.h:3381
#define szOID_NETSCAPE_CERT_TYPE
Definition: wincrypt.h:3496
#define szOID_SUR_NAME
Definition: wincrypt.h:3291
#define szOID_CMC_QUERY_PENDING
Definition: wincrypt.h:3476
#define CALG_DH_SF
Definition: wincrypt.h:2073
#define szOID_RSA_signingTime
Definition: wincrypt.h:3192
#define szOID_RSA_MD5
Definition: wincrypt.h:3206
#define szOID_KP_KEY_RECOVERY
Definition: wincrypt.h:3382
#define szOID_INFOSEC_mosaicUpdatedSig
Definition: wincrypt.h:3284
#define szOID_RSA_SMIMEalgCMS3DESwrap
Definition: wincrypt.h:3202
#define CALG_3DES
Definition: wincrypt.h:2084
#define szOID_SUBJECT_ALT_NAME
Definition: wincrypt.h:3336
#define szOID_RSA_RC4
Definition: wincrypt.h:3208
#define szOID_CERT_POLICIES
Definition: wincrypt.h:3353
#define szOID_KP_EFS
Definition: wincrypt.h:3374
#define szOID_RSA_MD2RSA
Definition: wincrypt.h:3172
#define szOID_PKIX_KP_SERVER_AUTH
Definition: wincrypt.h:3450
#define szOID_RDN_DUMMY_SIGNER
Definition: wincrypt.h:3430
#define szOID_DESCRIPTION
Definition: wincrypt.h:3300
#define szOID_X21_ADDRESS
Definition: wincrypt.h:3311
#define CALG_MD4
Definition: wincrypt.h:2057
#define szOID_LOCALITY_NAME
Definition: wincrypt.h:3294
#define szOID_CRL_VIRTUAL_BASE
Definition: wincrypt.h:3424
#define szOID_CERTIFICATE_TEMPLATE
Definition: wincrypt.h:3428
#define szOID_ENHANCED_KEY_USAGE
Definition: wincrypt.h:3358
#define szOID_RSA_RC2CBC
Definition: wincrypt.h:3207
#define szOID_OIWDIR_md2RSA
Definition: wincrypt.h:3262
#define szOID_X957_DSA
Definition: wincrypt.h:3214
#define szOID_SUBJECT_ALT_NAME2
Definition: wincrypt.h:3343
#define szOID_PKIX_KP_EMAIL_PROTECTION
Definition: wincrypt.h:3453
#define szOID_OIWSEC_sha1
Definition: wincrypt.h:3253
#define szOID_KP_SMARTCARD_LOGON
Definition: wincrypt.h:3414
#define CALG_NO_SIGN
Definition: wincrypt.h:2071
#define szOID_WHQL_CRYPTO
Definition: wincrypt.h:3376
#define CALG_SHA
Definition: wincrypt.h:2059
#define szOID_ECDSA_SHA384
Definition: wincrypt.h:3220
#define CALG_DH_EPHEM
Definition: wincrypt.h:2074
#define szOID_CERT_MANIFOLD
Definition: wincrypt.h:3419
#define szOID_TELEPHONE_NUMBER
Definition: wincrypt.h:3307
#define szOID_CMC_REG_INFO
Definition: wincrypt.h:3474
#define szOID_APPLICATION_POLICY_MAPPINGS
Definition: wincrypt.h:3432
#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE
Definition: wincrypt.h:3448
#define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG
Definition: wincrypt.h:1953
#define szOID_EMBEDDED_NT_CRYPTO
Definition: wincrypt.h:3379
#define szOID_PRIVATEKEY_USAGE_PERIOD
Definition: wincrypt.h:3342
#define szOID_NEXT_UPDATE_LOCATION
Definition: wincrypt.h:3365
#define szOID_STREET_ADDRESS
Definition: wincrypt.h:3296
#define szOID_RSA_SHA1RSA
Definition: wincrypt.h:3175
#define CERT_RDN_NUMERIC_STRING
Definition: wincrypt.h:2926
#define szOID_OIWSEC_sha
Definition: wincrypt.h:3245
#define szOID_AUTHORITY_INFO_ACCESS
Definition: wincrypt.h:3446
#define szOID_TITLE
Definition: wincrypt.h:3299
#define CRYPT_OID_INFO_OID_KEY
Definition: wincrypt.h:1955
#define szOID_NETSCAPE_SSL_SERVER_NAME
Definition: wincrypt.h:3502
#define CALG_DES
Definition: wincrypt.h:2082
#define szOID_CRL_NUMBER
Definition: wincrypt.h:3346
#define szOID_CTL
Definition: wincrypt.h:3401
#define szOID_AUTHORITY_KEY_IDENTIFIER2
Definition: wincrypt.h:3356
#define szOID_RSA_RSA
Definition: wincrypt.h:3168
#define szOID_COMMON_NAME
Definition: wincrypt.h:3290
#define szOID_INITIALS
Definition: wincrypt.h:3329
#define szOID_RSA_SMIMEalgCMSRC2wrap
Definition: wincrypt.h:3203
#define szOID_CMC_REVOKE_REQUEST
Definition: wincrypt.h:3473
#define szOID_KP_CA_EXCHANGE
Definition: wincrypt.h:3426
#define szOID_ARCHIVED_KEY_ATTR
Definition: wincrypt.h:3434
#define szOID_RSA_challengePwd
Definition: wincrypt.h:3194
#define CRYPT_INSTALL_OID_INFO_BEFORE_FLAG
Definition: wincrypt.h:2701
#define szOID_PRODUCT_UPDATE
Definition: wincrypt.h:3491
#define szOID_RSA_data
Definition: wincrypt.h:3181
#define szOID_RSA_certExtensions
Definition: wincrypt.h:3197
#define CALG_SHA_512
Definition: wincrypt.h:2068
#define szOID_OIWSEC_dsa
Definition: wincrypt.h:3239
#define CRYPT_OID_INFO_ALGID_KEY
Definition: wincrypt.h:1957
#define szOID_ANY_APPLICATION_POLICY
Definition: wincrypt.h:3403
#define szOID_POLICY_CONSTRAINTS
Definition: wincrypt.h:3357
#define szOID_RSA_signEnvData
Definition: wincrypt.h:3184
#define szOID_RSA_unstructName
Definition: wincrypt.h:3189
#define szOID_DOMAIN_COMPONENT
Definition: wincrypt.h:3361
#define szOID_ISSUING_DIST_POINT
Definition: wincrypt.h:3350
#define szOID_APPLICATION_CERT_POLICIES
Definition: wincrypt.h:3431
#define szOID_DS_EMAIL_REPLICATION
Definition: wincrypt.h:3439
#define szOID_CMC_SENDER_NONCE
Definition: wincrypt.h:3465
#define szOID_CERTSRV_CA_VERSION
Definition: wincrypt.h:3421
#define szOID_ANSI_X942_DH
Definition: wincrypt.h:3212
#define szOID_RSA_digestedData
Definition: wincrypt.h:3185
#define szOID_NIST_sha512
Definition: wincrypt.h:3289
#define CALG_DSS_SIGN
Definition: wincrypt.h:2070
#define szOID_PKIX_CA_ISSUERS
Definition: wincrypt.h:3483
#define szOID_RSA_counterSign
Definition: wincrypt.h:3193
#define szOID_ENROLLMENT_NAME_VALUE_PAIR
Definition: wincrypt.h:3405
#define szOID_CRL_SELF_CDP
Definition: wincrypt.h:3435
#define szOID_ROOT_LIST_SIGNER
Definition: wincrypt.h:3380
#define szOID_POSTAL_CODE
Definition: wincrypt.h:3304
#define szOID_RSA_unstructAddr
Definition: wincrypt.h:3195
#define szOID_LICENSE_SERVER
Definition: wincrypt.h:3397
#define szOID_ORGANIZATION_NAME
Definition: wincrypt.h:3297
#define szOID_RSA_encryptedData
Definition: wincrypt.h:3187
#define WINAPI
Definition: msvc.h:6
#define ERROR_FILE_EXISTS
Definition: winerror.h:287
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
Definition: winnt_old.h:1156
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define snprintf
Definition: wintirpc.h:48
unsigned char BYTE
Definition: xxhash.c:193