48#define MAX_ENCODED_LEN 0x04000000
50#define ASN_FLAGS_MASK 0xe0
51#define ASN_TYPE_MASK 0x1f
59 for (
i = 0;
i <
len;
i++) {
116#define GET_LEN_BYTES(b) ((b) <= 0x80 ? 1 : 1 + ((b) & 0x7f))
134 else if (pbEncoded[1] <= 0x7f)
136 if (pbEncoded[1] + 1 > cbEncoded)
147 else if (pbEncoded[1] == 0x80)
156 if (lenLen >
sizeof(
DWORD) + 1)
161 else if (lenLen + 2 > cbEncoded)
176 if (
out + lenLen + 1 > cbEncoded)
218 if (pDecodePara && pDecodePara->
pfnAlloc)
219 *(
BYTE **)pvStructInfo = pDecodePara->
pfnAlloc(bytesNeeded);
222 if (!*(
BYTE **)pvStructInfo)
225 *pcbStructInfo = bytesNeeded;
227 else if (*pcbStructInfo < bytesNeeded)
229 *pcbStructInfo = bytesNeeded;
234 *pcbStructInfo = bytesNeeded;
240 if (pDecodePara && pDecodePara->
pfnFree)
253 if (*pcbStructInfo < bytesNeeded)
255 *pcbStructInfo = bytesNeeded;
261 *pcbStructInfo = bytesNeeded;
301#define FINALMEMBERSIZE(s, member) (sizeof(s) - offsetof(s, member))
302#define MEMBERSIZE(s, member, nextmember) \
303 (offsetof(s, nextmember) - offsetof(s, member))
314 void *pvStructInfo,
BYTE *nextData,
DWORD *cbDecoded)
320 TRACE(
"%p, %ld, %p, %ld, %08lx, %p, %p, %p\n",
items, cItem, pbEncoded,
321 cbEncoded,
dwFlags, pvStructInfo, nextData, cbDecoded);
325 if (cbEncoded - (
ptr - pbEncoded) != 0)
330 cbEncoded - (
ptr - pbEncoded), &itemLen)))
336 DWORD itemEncodedLen;
339 itemEncodedLen = cbEncoded - (
ptr - pbEncoded);
341 itemEncodedLen = 1 + itemLenBytes + itemLen;
342 if (nextData && pvStructInfo &&
items[
i].hasPointer)
344 TRACE(
"Setting next pointer to %p\n",
347 items[
i].pointerOffset) = nextData;
354 TRACE(
"decoding item %ld\n",
i);
356 TRACE(
"sizing item %ld\n",
i);
371 if (nextData &&
items[
i].hasPointer &&
374 if (itemDecoded > itemEncodedLen)
376 WARN(
"decoded length %ld exceeds encoded %ld\n",
377 itemDecoded, itemEncodedLen);
384 decoded += itemDecoded;
385 TRACE(
"item %ld: decoded %ld bytes\n",
i,
392 TRACE(
"skipping optional item %ld\n",
i);
398 TRACE(
"item %ld failed: %08lx\n",
i,
403 ERR(
"can't use indefinite length encoding without a decoder\n");
409 TRACE(
"item %ld: decoded %ld bytes\n",
i, itemEncodedLen);
410 ptr += itemEncodedLen;
411 decoded += itemEncodedLen;
417 TRACE(
"skipping optional item %ld\n",
i);
422 TRACE(
"item %ld: tag %02x doesn't match expected %02x\n",
431 TRACE(
"missing optional item %ld, skipping\n",
i);
436 TRACE(
"not enough bytes for item %ld, failing\n",
i);
442 *cbDecoded = decoded;
457 DWORD *pcbDecoded,
void *startingPointer)
461 TRACE(
"%p, %ld, %p, %ld, %08lx, %p, %p, %ld, %p\n",
items, cItem, pbEncoded,
462 cbEncoded,
dwFlags, pDecodePara, pvStructInfo, *pcbStructInfo,
477 const BYTE *
ptr = pbEncoded + 1 + lenBytes;
480 cbEncoded -= 1 + lenBytes;
487 else if (cbEncoded < dataLen)
489 TRACE(
"dataLen %ld exceeds cbEncoded %ld, failing\n", dataLen,
500 if (cbDecoded > cbEncoded - 2)
506 else if (*(
ptr + cbDecoded) != 0 ||
507 *(
ptr + cbDecoded + 1) != 0)
509 TRACE(
"expected 0 TLV\n");
517 if (
ret && !indefinite && cbDecoded != dataLen)
519 TRACE(
"expected %ld decoded, got %ld, failing\n", dataLen,
526 DWORD i, bytesNeeded = 0, structSize = 0;
528 for (
i = 0;
i < cItem;
i++)
534 bytesNeeded += structSize;
536 *pcbDecoded = 1 + lenBytes + cbDecoded;
538 *pcbStructInfo = bytesNeeded;
540 pDecodePara, pvStructInfo, pcbStructInfo, bytesNeeded)))
545 pvStructInfo = *(
BYTE **)pvStructInfo;
547 nextData = startingPointer;
549 nextData = (
BYTE *)pvStructInfo + structSize;
550 memset(pvStructInfo, 0, structSize);
552 ptr, dataLen,
dwFlags, pvStructInfo, nextData,
623 TRACE(
"%p, %p, %ld, %p, %ld\n", arrayDesc, pbEncoded,
624 cbEncoded, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
631 else if (!arrayDesc->
tag || pbEncoded[0] == arrayDesc->
tag)
643 decoded = 1 + lenBytes;
649 for (
ptr = pbEncoded + 1 + lenBytes;
ret && !doneDecoding; )
665 else if (
ptr - pbEncoded - 1 - lenBytes >= dataLen)
669 DWORD itemEncoded, itemDataLen, itemDecoded,
size = 0;
675 cbEncoded - (
ptr - pbEncoded), &itemDataLen)))
678 itemEncoded = cbEncoded - (
ptr - pbEncoded);
697 itemSizes = &itemSize;
698 else if (itemSizes == &itemSize)
702 if (itemSizes) *itemSizes = itemSize;
704 else if (cItems > capacity)
706 capacity = capacity * 3 / 2;
711 decoded += itemDecoded;
712 itemSizes[cItems - 1].encodedLen = itemEncoded;
713 itemSizes[cItems - 1].size =
size;
726 *pcbDecoded = decoded;
728 *pcbStructInfo = bytesNeeded;
730 pvStructInfo, pcbStructInfo, bytesNeeded)))
738 pvStructInfo = *(
void **)pvStructInfo;
743 rgItems = (
BYTE *)pvStructInfo +
752 nextData = (
BYTE *)rgItems + cItems * arrayDesc->
itemSize;
753 for (
i = 0,
ptr = pbEncoded + 1 + lenBytes;
ret &&
754 i < cItems &&
ptr - pbEncoded - 1 - lenBytes <
766 &itemSizes[
i].size, &itemDecoded);
769 nextData += itemSizes[
i].size - arrayDesc->
itemSize;
777 if (itemSizes != &itemSize)
807 bytesNeeded += 1 + lenBytes + dataLen;
810 *pcbDecoded = 1 + lenBytes + dataLen;
812 *pcbStructInfo = bytesNeeded;
818 pvStructInfo = *(
BYTE **)pvStructInfo;
820 blob->cbData = 1 + lenBytes + dataLen;
848 TRACE(
"(%p, %ld, 0x%08lx, %p, %ld, %p)\n", pbEncoded, cbEncoded,
dwFlags,
849 pvStructInfo, *pcbStructInfo, pcbDecoded);
857 if (
ret && pvStructInfo)
866 for (
i = 0;
i <
blob->cbData / 2;
i++)
884 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
885 pDecodePara, pvStructInfo, *pcbStructInfo);
905 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
932 *pcbDecoded = 1 + lenBytes + dataLen;
950 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
966 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
967 pvStructInfo, *pcbStructInfo, pcbDecoded);
970 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
986 dataLen,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
987 if (
ret && pcbDecoded)
988 *pcbDecoded = 1 + lenBytes + dataLen;
1019 SubjectPublicKeyInfo.Algorithm.Parameters.pbData), 0 },
1031 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1032 pDecodePara, pvStructInfo, *pcbStructInfo);
1035 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
1037 if (
ret && pvStructInfo)
1044 info = pvStructInfo;
1045 if (!
info->SerialNumber.cbData || !
info->Issuer.cbData ||
1046 !
info->Subject.cbData)
1066 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1067 pDecodePara, pvStructInfo, *pcbStructInfo);
1080 &signedCert, &
size);
1087 pvStructInfo, pcbStructInfo);
1097 pDecodePara, pvStructInfo, pcbStructInfo);
1121 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
1122 pvStructInfo, *pcbStructInfo, pcbDecoded);
1125 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
1154 WARN(
"empty CRL entry serial number\n");
1174 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
1175 pvStructInfo, *pcbStructInfo, pcbDecoded);
1178 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
1194 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
1195 pvStructInfo, *pcbStructInfo, pcbDecoded);
1198 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
1214 dataLen,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
1215 if (
ret && pcbDecoded)
1216 *pcbDecoded = 1 + lenBytes + dataLen;
1247 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1248 pDecodePara, pvStructInfo, *pcbStructInfo);
1251 pDecodePara, pvStructInfo, pcbStructInfo,
NULL,
NULL);
1263 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1264 pDecodePara, pvStructInfo, *pcbStructInfo);
1284 pvStructInfo, pcbStructInfo);
1294 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo);
1313 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1314 pvStructInfo, *pcbStructInfo);
1327 pbEncoded[1 + lenBytes] / 40,
1328 pbEncoded[1 + lenBytes] - (pbEncoded[1 + lenBytes] / 40)
1331 for (
ptr = pbEncoded + 2 + lenBytes;
ret &&
1332 ptr - pbEncoded - 1 - lenBytes < dataLen; )
1336 while (
ptr - pbEncoded - 1 - lenBytes < dataLen &&
1343 if (
ptr - pbEncoded - 1 - lenBytes >= dataLen ||
1359 *pcbDecoded = 1 + lenBytes + dataLen;
1361 *pcbStructInfo = bytesNeeded;
1362 else if (*pcbStructInfo < bytesNeeded)
1364 *pcbStructInfo = bytesNeeded;
1376 sprintf(pszObjId,
"%d.%d", pbEncoded[1 + lenBytes] / 40,
1377 pbEncoded[1 + lenBytes] - (pbEncoded[1 + lenBytes] /
1379 pszObjId +=
strlen(pszObjId);
1380 for (
ptr = pbEncoded + 2 + lenBytes;
ret &&
1381 ptr - pbEncoded - 1 - lenBytes < dataLen; )
1385 while (
ptr - pbEncoded - 1 - lenBytes < dataLen &&
1395 pszObjId +=
strlen(pszObjId);
1400 *pcbStructInfo = bytesNeeded;
1411 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1412 pvStructInfo, *pcbStructInfo);
1416 pvStructInfo, pcbStructInfo, pcbDecoded);
1441 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
ext,
1445 TRACE(
"ext->pszObjId is %p\n",
ext->pszObjId);
1450 TRACE(
"ext->pszObjId is %p (%s)\n",
ext->pszObjId,
1462 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1463 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
1478 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
1506 switch (pbEncoded[0])
1511 bytesNeeded += dataLen;
1516 bytesNeeded += dataLen;
1521 bytesNeeded += dataLen;
1526 bytesNeeded += dataLen;
1531 bytesNeeded += dataLen;
1536 bytesNeeded += dataLen;
1541 bytesNeeded += dataLen;
1546 bytesNeeded += dataLen;
1551 bytesNeeded += dataLen;
1554 FIXME(
"ASN_UNIVERSALSTRING: unimplemented\n");
1559 bytesNeeded += dataLen;
1572 *pcbDecoded = 1 + lenBytes + dataLen;
1574 *pcbStructInfo = bytesNeeded;
1575 else if (*pcbStructInfo < bytesNeeded)
1577 *pcbStructInfo = bytesNeeded;
1583 *pcbStructInfo = bytesNeeded;
1584 value->dwValueType = valueType;
1590 switch (pbEncoded[0])
1601 value->Value.cbData = dataLen;
1604 pbEncoded + 1 + lenBytes, dataLen);
1613 value->Value.cbData = dataLen;
1614 for (
i = 0;
i < dataLen / 2;
i++)
1615 str[
i] = (pbEncoded[1 + lenBytes + 2 *
i] << 8) |
1616 pbEncoded[1 + lenBytes + 2 *
i + 1];
1624 (
LPCSTR)pbEncoded + 1 + lenBytes, dataLen,
1632 value->Value.cbData = 0;
1650 if (
ret && pvStructInfo)
1653 pcbStructInfo, *pcbStructInfo);
1659 pvStructInfo = *(
BYTE **)pvStructInfo;
1660 value = pvStructInfo;
1664 pcbStructInfo,
NULL);
1692 switch (pbEncoded[0])
1697 bytesNeeded += (dataLen + 1) * 2;
1702 bytesNeeded += (dataLen + 1) * 2;
1707 bytesNeeded += (dataLen + 1) * 2;
1712 bytesNeeded += (dataLen + 1) * 2;
1717 bytesNeeded += (dataLen + 1) * 2;
1722 bytesNeeded += (dataLen + 1) * 2;
1727 bytesNeeded += (dataLen + 1) * 2;
1732 bytesNeeded += (dataLen + 1) * 2;
1737 bytesNeeded += dataLen / 2 +
sizeof(
WCHAR);
1742 bytesNeeded += dataLen +
sizeof(
WCHAR);
1748 (
LPCSTR)pbEncoded + 1 + lenBytes, dataLen,
NULL, 0) + 1) * 2;
1756 *pcbDecoded = 1 + lenBytes + dataLen;
1758 *pcbStructInfo = bytesNeeded;
1759 else if (*pcbStructInfo < bytesNeeded)
1761 *pcbStructInfo = bytesNeeded;
1767 *pcbStructInfo = bytesNeeded;
1768 value->dwValueType = valueType;
1775 switch (pbEncoded[0])
1785 value->Value.cbData = dataLen * 2;
1786 for (
i = 0;
i < dataLen;
i++)
1787 str[
i] = pbEncoded[1 + lenBytes +
i];
1791 value->Value.cbData = dataLen / 2;
1792 for (
i = 0;
i < dataLen / 4;
i++)
1793 str[
i] = (pbEncoded[1 + lenBytes + 2 *
i + 2] << 8)
1794 | pbEncoded[1 + lenBytes + 2 *
i + 3];
1798 value->Value.cbData = dataLen;
1799 for (
i = 0;
i < dataLen / 2;
i++)
1800 str[
i] = (pbEncoded[1 + lenBytes + 2 *
i] << 8) |
1801 pbEncoded[1 + lenBytes + 2 *
i + 1];
1806 (
LPCSTR)pbEncoded + 1 + lenBytes, dataLen,
1815 value->Value.cbData = 0;
1833 if (
ret && pvStructInfo)
1836 pcbStructInfo, *pcbStructInfo);
1842 pvStructInfo = *(
BYTE **)pvStructInfo;
1843 value = pvStructInfo;
1847 pcbStructInfo,
NULL);
1876 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1877 pvStructInfo, *pcbStructInfo);
1880 TRACE(
"attr->pszObjId is %p\n",
attr->pszObjId);
1886 TRACE(
"attr->pszObjId is %p (%s)\n",
attr->pszObjId,
1888 TRACE(
"attr->dwValueType is %ld\n",
attr->dwValueType);
1905 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
1922 DWORD bytesNeeded = 0;
1930 *pcbStructInfo = bytesNeeded;
1932 pvStructInfo, pcbStructInfo, bytesNeeded)))
1937 pvStructInfo = *(
BYTE **)pvStructInfo;
1938 info = pvStructInfo;
1943 &bytesNeeded,
NULL);
1973 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1974 pvStructInfo, *pcbStructInfo);
1977 TRACE(
"attr->pszObjId is %p\n",
attr->pszObjId);
1983 TRACE(
"attr->pszObjId is %p (%s)\n",
attr->pszObjId,
1985 TRACE(
"attr->dwValueType is %ld\n",
attr->dwValueType);
2002 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2019 DWORD bytesNeeded = 0;
2027 *pcbStructInfo = bytesNeeded;
2029 pvStructInfo, pcbStructInfo, bytesNeeded)))
2034 pvStructInfo = *(
BYTE **)pvStructInfo;
2035 info = pvStructInfo;
2040 &bytesNeeded,
NULL);
2059 DWORD indefiniteNestingLevels = 0, decoded = 0;
2061 TRACE(
"(%p, %ld)\n", pbEncoded, cbEncoded);
2075 indefiniteNestingLevels++;
2076 pbEncoded += 1 + lenBytes;
2077 cbEncoded -= 1 + lenBytes;
2078 decoded += 1 + lenBytes;
2079 TRACE(
"indefiniteNestingLevels = %ld\n",
2080 indefiniteNestingLevels);
2084 if (pbEncoded[0] == 0 && pbEncoded[1] == 0 &&
2085 indefiniteNestingLevels)
2087 indefiniteNestingLevels--;
2088 TRACE(
"indefiniteNestingLevels = %ld\n",
2089 indefiniteNestingLevels);
2091 pbEncoded += 1 + lenBytes + dataLen;
2092 cbEncoded -= 1 + lenBytes + dataLen;
2093 decoded += 1 + lenBytes + dataLen;
2094 if (!indefiniteNestingLevels)
2098 }
while (
ret && !done);
2100 if (
ret && indefiniteNestingLevels)
2106 *pcbDecoded = decoded;
2107 TRACE(
"returning %d (%ld)\n",
ret,
ret ? *pcbDecoded : 0);
2118 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2119 pvStructInfo, *pcbStructInfo);
2124 bytesNeeded += encodedLen;
2126 *pcbStructInfo = bytesNeeded;
2127 else if (*pcbStructInfo < bytesNeeded)
2130 *pcbStructInfo = bytesNeeded;
2137 *pcbStructInfo = bytesNeeded;
2138 blob->cbData = encodedLen;
2153 *pcbDecoded = encodedLen;
2169 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2185 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2223 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
2224 pvStructInfo, *pcbStructInfo, pcbDecoded);
2227 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2242 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
2243 pvStructInfo, *pcbStructInfo, pcbDecoded);
2246 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2262 dataLen,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
2263 if (
ret && pcbDecoded)
2264 *pcbDecoded = 1 + lenBytes + dataLen;
2275 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2276 pDecodePara, pvStructInfo, *pcbStructInfo);
2311 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
2337 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2338 pvStructInfo, *pcbStructInfo);
2341 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
2353 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2354 pDecodePara, pvStructInfo, *pcbStructInfo);
2369 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
2386 LPSTR *pStr = pvStructInfo;
2391 DWORD bytesNeeded =
sizeof(
LPSTR) +
sizeof(
char);
2400 bytesNeeded += dataLen;
2402 *pcbDecoded = 1 + lenBytes + dataLen;
2404 *pcbStructInfo = bytesNeeded;
2405 else if (*pcbStructInfo < bytesNeeded)
2407 *pcbStructInfo = bytesNeeded;
2413 *pcbStructInfo = bytesNeeded;
2419 memcpy(
str, pbEncoded + 1 + lenBytes, dataLen);
2441 TRACE(
"(%p, %ld, %08lx, %p, %ld)\n", pbEncoded, cbEncoded,
dwFlags,
2442 pvStructInfo, pvStructInfo ? *pcbDecoded : 0);
2445 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2463 rgNoticeNumbers), 0 },
2465 DWORD bytesNeeded = 0;
2467 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2468 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
2483 *pcbStructInfo = bytesNeeded;
2484 else if (*pcbStructInfo < bytesNeeded)
2486 *pcbStructInfo = bytesNeeded;
2494 *pcbStructInfo = bytesNeeded;
2526 switch (pbEncoded[0])
2530 bytesNeeded += (dataLen + 1) * 2;
2534 bytesNeeded += (dataLen + 1) * 2;
2538 bytesNeeded += (dataLen + 1) * 2;
2542 bytesNeeded += (dataLen + 1) * 2;
2546 bytesNeeded += (dataLen + 1) * 2;
2550 bytesNeeded += (dataLen + 1) * 2;
2554 bytesNeeded += (dataLen + 1) * 2;
2558 bytesNeeded += (dataLen + 1) * 2;
2562 bytesNeeded += dataLen / 2 +
sizeof(
WCHAR);
2566 bytesNeeded += dataLen +
sizeof(
WCHAR);
2571 (
LPCSTR)pbEncoded + 1 + lenBytes, dataLen,
NULL, 0) + 1) * 2;
2579 *pcbDecoded = 1 + lenBytes + dataLen;
2581 *pcbStructInfo = bytesNeeded;
2582 else if (*pcbStructInfo < bytesNeeded)
2584 *pcbStructInfo = bytesNeeded;
2590 LPWSTR *pStr = pvStructInfo;
2592 *pcbStructInfo = bytesNeeded;
2599 switch (pbEncoded[0])
2609 for (
i = 0;
i < dataLen;
i++)
2610 str[
i] = pbEncoded[1 + lenBytes +
i];
2614 for (
i = 0;
i < dataLen / 4;
i++)
2615 str[
i] = (pbEncoded[1 + lenBytes + 2 *
i + 2] << 8)
2616 | pbEncoded[1 + lenBytes + 2 *
i + 3];
2620 for (
i = 0;
i < dataLen / 2;
i++)
2621 str[
i] = (pbEncoded[1 + lenBytes + 2 *
i] << 8) |
2622 pbEncoded[1 + lenBytes + 2 *
i + 1];
2628 (
LPCSTR)pbEncoded + 1 + lenBytes, dataLen,
2658 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2659 pvStructInfo, *pcbStructInfo);
2662 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
2669 DWORD dwCertEncodingType,
LPCSTR lpszStructType,
const BYTE *pbEncoded,
2671 void *pvStructInfo,
DWORD *pcbStructInfo)
2675 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2676 pDecodePara, pvStructInfo, *pcbStructInfo);
2680 DWORD bytesNeeded = 0;
2688 *pcbStructInfo = bytesNeeded;
2690 pvStructInfo, pcbStructInfo, bytesNeeded)))
2695 pvStructInfo = *(
BYTE **)pvStructInfo;
2697 notice->pNoticeReference =
2699 ((
BYTE *)pvStructInfo +
2703 pvStructInfo, &bytesNeeded,
NULL);
2729 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
2730 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
2733 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2753 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2754 pvStructInfo, *pcbStructInfo);
2757 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
2769 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2770 pDecodePara, pvStructInfo, *pcbStructInfo);
2774 DWORD bytesNeeded = 0;
2781 *pcbStructInfo = bytesNeeded;
2783 pvStructInfo, pcbStructInfo, bytesNeeded)))
2788 pvStructInfo = *(
BYTE **)pvStructInfo;
2789 attr = pvStructInfo;
2821 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2831 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2832 pDecodePara, pvStructInfo, *pcbStructInfo);
2846 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
2871 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
2872 pvStructInfo, *pcbStructInfo, pcbDecoded);
2875 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
2877 if (
ret && pvStructInfo)
2894 Algorithm.pszObjId) },
2902 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
2903 pcbDecoded,
info ?
info->Algorithm.Parameters.pbData :
NULL);
2915 DWORD bytesNeeded = 0;
2921 *pcbStructInfo = bytesNeeded;
2923 pvStructInfo, pcbStructInfo, bytesNeeded)))
2928 pvStructInfo = *(
BYTE **)pvStructInfo;
2929 info = pvStructInfo;
2930 info->Algorithm.Parameters.pbData = (
BYTE *)pvStructInfo +
2934 &bytesNeeded,
NULL);
2964 if (pbEncoded[1] > 1)
2973 *pcbStructInfo =
sizeof(
BOOL);
2976 else if (*pcbStructInfo <
sizeof(
BOOL))
2978 *pcbStructInfo =
sizeof(
BOOL);
2984 *pcbStructInfo =
sizeof(
BOOL);
2985 *(
BOOL *)pvStructInfo = pbEncoded[2] != 0;
2999 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3000 pvStructInfo, *pcbStructInfo);
3008 if (1 + lenBytes > cbEncoded)
3020 if (
memchr(pbEncoded + 1 + lenBytes, 0, dataLen))
3026 bytesNeeded += (dataLen + 1) *
sizeof(
WCHAR);
3030 bytesNeeded += dataLen;
3040 bytesNeeded += dataLen -
sizeof(
LPSTR);
3062 *pcbDecoded = 1 + lenBytes + dataLen;
3064 *pcbStructInfo = bytesNeeded;
3065 else if (*pcbStructInfo < bytesNeeded)
3067 *pcbStructInfo = bytesNeeded;
3073 *pcbStructInfo = bytesNeeded;
3084 for (
i = 0;
i < dataLen;
i++)
3085 entry->pwszURL[
i] = (
WCHAR)pbEncoded[1 + lenBytes +
i];
3100 entry->IPAddress.cbData = dataLen;
3101 memcpy(
entry->IPAddress.pbData, pbEncoded + 1 + lenBytes,
3106 &
entry->pszRegisteredID, &dataLen,
NULL);
3127 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
3128 pvStructInfo, *pcbStructInfo, pcbDecoded);
3131 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
3158 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
3186 AuthorityCertIssuer.rgAltEntry), 0 },
3191 AuthorityCertSerialNumber.pbData), 0 },
3195 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
3222 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
3232 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3233 pDecodePara, pvStructInfo, *pcbStructInfo);
3248 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
3265 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
3266 pvStructInfo, *pcbStructInfo, pcbDecoded);
3276 pbEncoded += 1 + lenBytes;
3277 cbEncoded -= 1 + lenBytes;
3286 pvStructInfo, pcbStructInfo, &decodedLen);
3289 if (*(pbEncoded + decodedLen) != 0 ||
3290 *(pbEncoded + decodedLen + 1) != 0)
3292 TRACE(
"expected 0 TLV, got {%02x,%02x}\n",
3293 *(pbEncoded + decodedLen),
3294 *(pbEncoded + decodedLen + 1));
3301 if (
ret && pcbDecoded)
3303 *pcbDecoded = 1 + lenBytes + decodedLen;
3304 TRACE(
"decoded %ld bytes\n", *pcbDecoded);
3327 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
3328 pvStructInfo, *pcbStructInfo, pcbDecoded);
3331 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
3342 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3343 pDecodePara, pvStructInfo, *pcbStructInfo);
3349 if (
ret && pvStructInfo)
3352 pcbStructInfo, *pcbStructInfo);
3358 pvStructInfo = *(
BYTE **)pvStructInfo;
3359 info = pvStructInfo;
3364 pcbStructInfo,
NULL);
3393 ContentInfo.pszObjId), 0 },
3400 pbEncoded, cbEncoded,
dwFlags, pDecodePara, digestedData, pcbDigestedData,
3411 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3412 pDecodePara, pvStructInfo, *pcbStructInfo);
3416 DWORD bytesNeeded = 0;
3422 *pcbStructInfo = bytesNeeded;
3424 pvStructInfo, pcbStructInfo, bytesNeeded)))
3429 pvStructInfo = *(
BYTE **)pvStructInfo;
3430 name = pvStructInfo;
3435 &bytesNeeded,
NULL);
3463 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
3464 pvStructInfo, *pcbStructInfo, pcbDecoded);
3470 *pcbStructInfo = bytesNeeded;
3472 else if (*pcbStructInfo < bytesNeeded)
3475 *pcbStructInfo = bytesNeeded;
3482 *pcbStructInfo = bytesNeeded;
3488 TRACE(
"got an int, dwPathLenConstraint is %ld\n",
3507 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
3508 pvStructInfo, *pcbStructInfo, pcbDecoded);
3511 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
3539 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
3568 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
3596 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3597 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3600 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
3617 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3618 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3621 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
3641 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3642 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3645 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
3656 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3657 pDecodePara, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3673 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
3698 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3699 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3702 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
3713 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3714 pDecodePara, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3729 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
3760 fRequireExplicitPolicy, fInhibitPolicyMapping);
3763 *pcbStructInfo = bytesNeeded;
3764 else if (*pcbStructInfo < bytesNeeded)
3766 *pcbStructInfo = bytesNeeded;
3775 *pcbStructInfo = bytesNeeded;
3779 info->fRequireExplicitPolicy =
TRUE;
3780 info->dwRequireExplicitPolicySkipCerts =
skip;
3807 fInhibitPolicyMapping);
3810 *pcbStructInfo = bytesNeeded;
3811 else if (*pcbStructInfo < bytesNeeded)
3813 *pcbStructInfo = bytesNeeded;
3822 *pcbStructInfo = bytesNeeded;
3826 info->fInhibitPolicyMapping =
TRUE;
3827 info->dwInhibitPolicyMappingSkipCerts =
skip;
3834 DWORD dwCertEncodingType,
LPCSTR lpszStructType,
const BYTE *pbEncoded,
3836 void *pvStructInfo,
DWORD *pcbStructInfo)
3840 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3841 pDecodePara, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3850 fInhibitPolicyMapping),
TRUE,
FALSE, 0, 0 },
3859 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
3870#define RSA1_MAGIC 0x31415352
3902 if (
ret && (*decodedKey)->pubexp.cbData >
sizeof(
DWORD))
3904 WARN(
"Unexpected exponent length %lu.\n", (*decodedKey)->pubexp.cbData);
3924 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
3925 pvStructInfo, *pcbStructInfo);
3936 *pcbStructInfo = bytesNeeded;
3940 pvStructInfo, pcbStructInfo, bytesNeeded)))
3945 pvStructInfo = *(
BYTE **)pvStructInfo;
3994 *pcbStructInfo = bytesNeeded;
3997 pvStructInfo, pcbStructInfo, bytesNeeded)))
4004 pvStructInfo = *(
BYTE **)pvStructInfo;
4035#define RSA2_MAGIC 0x32415352
4122 *pcbStructInfo = bytesNeeded;
4126 pvStructInfo, pcbStructInfo, bytesNeeded)))
4133 pvStructInfo = *(
BYTE **)pvStructInfo;
4145 rsaPubKey->
bitlen = halflen * 16;
4147 vardata = (
BYTE*)(rsaPubKey + 1);
4148 memset(vardata, 0, halflen * 9);
4151 memcpy(vardata + halflen * 2,
4153 memcpy(vardata + halflen * 3,
4155 memcpy(vardata + halflen * 4,
4157 memcpy(vardata + halflen * 5,
4159 memcpy(vardata + halflen * 6,
4161 memcpy(vardata + halflen * 7,
4183 DWORD bytesNeeded, dataLen;
4185 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
4186 pvStructInfo, *pcbStructInfo, pcbDecoded);
4197 *pcbDecoded = 1 + lenBytes + dataLen;
4199 *pcbStructInfo = bytesNeeded;
4200 else if (*pcbStructInfo < bytesNeeded)
4203 *pcbStructInfo = bytesNeeded;
4210 *pcbStructInfo = bytesNeeded;
4211 blob = pvStructInfo;
4212 blob->cbData = dataLen;
4214 blob->pbData = (
BYTE *)pbEncoded + 1 + lenBytes;
4219 memcpy(
blob->pbData, pbEncoded + 1 + lenBytes,
4230 DWORD decoded = 0, indefinite_len_depth = 0, len_size,
len, bytes_needed;
4240 encoded += 1 + len_size;
4241 encoded_size -= 1 + len_size;
4242 decoded += 1 + len_size;
4246 indefinite_len_depth++;
4247 if (encoded_size < 2)
4259 WARN(
"Unexpected tag %02x\n", encoded[0]);
4267 decoded += 1 + len_size +
len;
4268 encoded_size -= 1 + len_size;
4270 if (
len > encoded_size)
4276 *ret_decoded = decoded;
4278 encoded += 1 + len_size;
4282 while (indefinite_len_depth--)
4284 if (encoded[0] || encoded[1])
4286 TRACE(
"expected 0 TLV, got %02x %02x\n", encoded[0], encoded[1]);
4292 bytes_needed =
sizeof(*blob);
4296 *buf_size = bytes_needed;
4299 if (*buf_size < bytes_needed)
4302 *buf_size = bytes_needed;
4306 *buf_size = bytes_needed;
4311 else if (
blob->cbData)
4315 *ret_decoded = decoded;
4325 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
4326 pDecodePara, pvStructInfo, *pcbStructInfo);
4336 DWORD bytesNeeded = 0;
4342 *pcbStructInfo = bytesNeeded;
4344 pvStructInfo, pcbStructInfo, bytesNeeded)))
4349 pvStructInfo = *(
BYTE **)pvStructInfo;
4350 blob = pvStructInfo;
4354 &bytesNeeded,
NULL);
4373 DWORD bytesNeeded, dataLen;
4376 TRACE(
"(%p, %ld, 0x%08lx, %p, %ld, %p)\n", pbEncoded, cbEncoded,
dwFlags,
4377 pvStructInfo, *pcbStructInfo, pcbDecoded);
4386 *pcbDecoded = 1 + lenBytes + dataLen;
4388 *pcbStructInfo = bytesNeeded;
4389 else if (*pcbStructInfo < bytesNeeded)
4391 *pcbStructInfo = bytesNeeded;
4399 *pcbStructInfo = bytesNeeded;
4400 blob = pvStructInfo;
4401 blob->cbData = dataLen - 1;
4402 blob->cUnusedBits = *(pbEncoded + 1 + lenBytes);
4405 blob->pbData = (
BYTE *)pbEncoded + 2 + lenBytes;
4414 memcpy(
blob->pbData, pbEncoded + 2 + lenBytes,
4430 TRACE(
"(%p, %ld, 0x%08lx, %p, %p, %p)\n", pbEncoded, cbEncoded,
dwFlags,
4431 pDecodePara, pvStructInfo, pcbStructInfo);
4435 DWORD bytesNeeded = 0;
4451 *pcbStructInfo = bytesNeeded;
4453 pvStructInfo, pcbStructInfo, bytesNeeded)))
4458 pvStructInfo = *(
BYTE **)pvStructInfo;
4459 blob = pvStructInfo;
4463 &bytesNeeded,
NULL);
4491 *pcbDecoded = 1 + lenBytes + dataLen;
4492 if (dataLen >
sizeof(
int))
4497 else if (!pvStructInfo)
4498 *pcbStructInfo =
sizeof(
int);
4503 if (dataLen && pbEncoded[1 + lenBytes] & 0x80)
4510 for (
i = 0;
i < dataLen;
i++)
4513 val |= pbEncoded[1 + lenBytes +
i];
4515 memcpy(pvStructInfo, &
val,
sizeof(
int));
4529 DWORD bytesNeeded = 0;
4547 *pcbStructInfo = bytesNeeded;
4549 pvStructInfo, pcbStructInfo, bytesNeeded)))
4552 pvStructInfo = *(
BYTE **)pvStructInfo;
4555 &bytesNeeded,
NULL);
4575 DWORD bytesNeeded, dataLen;
4583 *pcbDecoded = 1 + lenBytes + dataLen;
4585 *pcbStructInfo = bytesNeeded;
4586 else if (*pcbStructInfo < bytesNeeded)
4588 *pcbStructInfo = bytesNeeded;
4596 *pcbStructInfo = bytesNeeded;
4597 blob->cbData = dataLen;
4603 for (
i = 0;
i <
blob->cbData;
i++)
4605 blob->pbData[
i] = *(pbEncoded + 1 + lenBytes +
4622 DWORD bytesNeeded = 0;
4635 *pcbStructInfo = bytesNeeded;
4637 pvStructInfo, pcbStructInfo, bytesNeeded)))
4642 pvStructInfo = *(
BYTE **)pvStructInfo;
4643 blob = pvStructInfo;
4644 blob->pbData = (
BYTE *)pvStructInfo +
4648 &bytesNeeded,
NULL);
4671 DWORD bytesNeeded, dataLen;
4678 *pcbDecoded = 1 + lenBytes + dataLen;
4681 *pcbStructInfo = bytesNeeded;
4682 else if (*pcbStructInfo < bytesNeeded)
4684 *pcbStructInfo = bytesNeeded;
4692 *pcbStructInfo = bytesNeeded;
4693 blob->cbData = dataLen;
4696 if (
blob->cbData && *(pbEncoded + 1 + lenBytes) == 0)
4705 for (
i = 0;
i <
blob->cbData;
i++)
4707 blob->pbData[
i] = *(pbEncoded + 1 + lenBytes +
4730 DWORD bytesNeeded = 0;
4736 *pcbStructInfo = bytesNeeded;
4738 pvStructInfo, pcbStructInfo, bytesNeeded)))
4743 pvStructInfo = *(
BYTE **)pvStructInfo;
4744 blob = pvStructInfo;
4745 blob->pbData = (
BYTE *)pvStructInfo +
4749 &bytesNeeded,
NULL);
4772 *pcbStructInfo =
sizeof(
int);
4779 unsigned int val = 0,
i;
4786 else if (pbEncoded[1] == 0)
4798 if (pbEncoded[1] >
sizeof(
unsigned int) + 1)
4803 for (
i = 0;
i < pbEncoded[1];
i++)
4806 val |= pbEncoded[2 +
i];
4809 pvStructInfo, pcbStructInfo,
sizeof(
unsigned int))))
4812 pvStructInfo = *(
BYTE **)pvStructInfo;
4813 memcpy(pvStructInfo, &
val,
sizeof(
unsigned int));
4835#define CRYPT_TIME_GET_DIGITS(pbEncoded, len, numDigits, word) \
4840 for (i = 0; (len) > 0 && i < (numDigits); i++, (len)--) \
4842 if (!isdigit(*(pbEncoded))) \
4844 SetLastError(CRYPT_E_ASN1_CORRUPT); \
4850 (word) += *(pbEncoded)++ - '0'; \
4860 if (
len >= 3 && (*pbEncoded ==
'+' || *pbEncoded ==
'-'))
4862 WORD hours, minutes = 0;
4867 if (
ret && hours >= 24)
4875 if (
ret && minutes >= 60)
4885 sysTime->
wHour += hours;
4890 if (hours > sysTime->
wHour)
4893 sysTime->
wHour = 24 - (hours - sysTime->
wHour);
4896 sysTime->
wHour -= hours;
4897 if (minutes > sysTime->
wMinute)
4910#define MIN_ENCODED_TIME_LENGTH 10
4922 else if (pbEncoded[1] > 0x7f)
4938 *pcbDecoded = 2 +
len;
4941 if (sysTime.
wYear >= 50)
4942 sysTime.
wYear += 1900;
4944 sysTime.
wYear += 2000;
4986 DWORD bytesNeeded = 0;
4993 *pcbStructInfo = bytesNeeded;
4995 pDecodePara, pvStructInfo, pcbStructInfo, bytesNeeded)))
4998 pvStructInfo = *(
BYTE **)pvStructInfo;
5001 &bytesNeeded,
NULL);
5025 else if (pbEncoded[1] > 0x7f)
5042 *pcbDecoded = 2 +
len;
5055 if (
ret &&
len > 0 && (*pbEncoded ==
'.' ||
5100 pcbStructInfo, pcbDecoded);
5117 DWORD bytesNeeded = 0;
5124 *pcbStructInfo = bytesNeeded;
5126 pvStructInfo, pcbStructInfo, bytesNeeded)))
5129 pvStructInfo = *(
BYTE **)pvStructInfo;
5132 &bytesNeeded,
NULL);
5157 DWORD bytesNeeded, dataLen, remainingLen, cValue;
5167 ptr = pbEncoded + 1 + lenBytes;
5168 remainingLen = dataLen;
5169 while (
ret && remainingLen)
5178 remainingLen -= 1 + nextLenBytes + nextLen;
5179 ptr += 1 + nextLenBytes + nextLen;
5182 bytesNeeded += 1 + nextLenBytes + nextLen;
5193 *pcbStructInfo = bytesNeeded;
5195 pvStructInfo, pcbStructInfo, bytesNeeded)))
5198 pvStructInfo = *(
BYTE **)pvStructInfo;
5205 ptr = pbEncoded + 1 + lenBytes;
5206 remainingLen = dataLen;
5208 while (
ret && remainingLen)
5226 nextPtr += 1 + nextLenBytes + nextLen;
5228 remainingLen -= 1 + nextLenBytes + nextLen;
5229 ptr += 1 + nextLenBytes + nextLen;
5262 DWORD bytesNeeded = 0, dataLen;
5279 pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
5287 *pcbDecoded = 1 + lenBytes + dataLen;
5289 *pcbStructInfo = bytesNeeded;
5290 else if (*pcbStructInfo < bytesNeeded)
5292 *pcbStructInfo = bytesNeeded;
5300 *pcbStructInfo = bytesNeeded;
5305 pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
5329 DistPointName.FullName.rgAltEntry), 0 },
5341 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
5342 pcbDecoded,
point ?
point->DistPointName.FullName.rgAltEntry :
NULL);
5352 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
5353 pDecodePara, pvStructInfo, *pcbStructInfo);
5368 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
5385 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
5386 pDecodePara, pvStructInfo, *pcbStructInfo);
5400 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
5417 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
5418 pDecodePara, pvStructInfo, *pcbStructInfo);
5427 DistPointName.FullName.rgAltEntry), 0 },
5437 OnlySomeReasonFlags.pbData), 0 },
5443 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
5462 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5463 pvStructInfo, *pcbStructInfo, pcbDecoded);
5481 *pcbStructInfo = bytesNeeded;
5482 else if (*pcbStructInfo < bytesNeeded)
5484 *pcbStructInfo = bytesNeeded;
5493 *pcbStructInfo = bytesNeeded;
5522 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5523 pvStructInfo, *pcbStructInfo, pcbDecoded);
5526 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
5530 TRACE(
"%ld\n", *pcbDecoded);
5531 if (*pcbDecoded < cbEncoded)
5532 TRACE(
"%02x %02x\n", *(pbEncoded + *pcbDecoded),
5533 *(pbEncoded + *pcbDecoded + 1));
5552 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5553 pvStructInfo, *pcbStructInfo, pcbDecoded);
5556 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5572 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5573 pvStructInfo, *pcbStructInfo, pcbDecoded);
5576 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5586 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
5587 pDecodePara, pvStructInfo, *pcbStructInfo);
5607 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
5633 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5634 pvStructInfo, *pcbStructInfo, pcbDecoded);
5637 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
5669 HashEncryptionAlgorithm.pszObjId), 0 },
5680 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
5681 pvStructInfo, *pcbStructInfo);
5684 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
5695 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
5696 pDecodePara, pvStructInfo, *pcbStructInfo);
5702 if (
ret && pvStructInfo)
5705 pcbStructInfo, *pcbStructInfo);
5711 pvStructInfo = *(
BYTE **)pvStructInfo;
5712 info = pvStructInfo;
5717 pcbStructInfo,
NULL);
5733 void *pvStructInfo,
DWORD *pcbStructInfo,
DWORD *pcbDecoded)
5763 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5764 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
5767 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5783 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5784 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
5787 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5801 id ? &
id->IssuerSerialNumber :
NULL, pcbStructInfo, pcbDecoded);
5807 *pcbStructInfo =
sizeof(
CERT_ID) + *pcbStructInfo -
5810 *pcbStructInfo =
sizeof(
CERT_ID);
5816 id ? &
id->KeyId :
NULL, pcbStructInfo, pcbDecoded);
5822 *pcbStructInfo =
sizeof(
CERT_ID) + *pcbStructInfo -
5825 *pcbStructInfo =
sizeof(
CERT_ID);
5854 HashEncryptionAlgorithm.pszObjId), 0 },
5865 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
5866 pvStructInfo, *pcbStructInfo);
5869 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
5870 pcbDecoded,
info ?
info->SignerId.KeyId.pbData :
NULL);
5880 TRACE(
"%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
5881 pDecodePara, pvStructInfo, *pcbStructInfo);
5887 if (
ret && pvStructInfo)
5890 pcbStructInfo, *pcbStructInfo);
5896 pvStructInfo = *(
BYTE **)pvStructInfo;
5897 info = pvStructInfo;
5902 pcbStructInfo,
NULL);
5928 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5929 pvStructInfo, *pcbStructInfo, pcbDecoded);
5932 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5965 TRACE(
"%p, %ld, %08lx, %p, %p, %p\n", pbEncoded, cbEncoded,
dwFlags,
5966 pDecodePara, signedInfo, pcbSignedInfo);
5969 pbEncoded, cbEncoded,
dwFlags, pDecodePara, signedInfo, pcbSignedInfo,
5987 RecipientId.IssuerSerialNumber.Issuer.pbData), 0 },
5992 KeyEncryptionAlgorithm.pszObjId), 0 },
5998 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
5999 pvStructInfo, *pcbStructInfo, pcbDecoded);
6002 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
6003 pcbDecoded,
info ?
info->RecipientId.IssuerSerialNumber.Issuer.pbData :
6022 RecipientId.IssuerSerialNumber.Issuer.pbData) };
6024 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
6025 pvStructInfo, *pcbStructInfo, pcbDecoded);
6028 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
6048 contentEncryptionAlgorithm.pszObjId), 0 },
6055 TRACE(
"%p, %ld, %08lx, %p, %ld, %p\n", pbEncoded, cbEncoded,
dwFlags,
6056 pvStructInfo, *pcbStructInfo, pcbDecoded);
6059 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo,
6083 TRACE(
"%p, %ld, %08lx, %p, %p, %p\n", pbEncoded, cbEncoded,
dwFlags,
6084 pDecodePara, envelopedData, pcbEnvelopedData);
6087 pbEncoded, cbEncoded,
dwFlags, pDecodePara, envelopedData,
6097 DWORD bytesNeeded = 0;
6107 *pcbStructInfo = bytesNeeded;
6113 pvStructInfo = *(
BYTE **)pvStructInfo;
6115 info = pvStructInfo;
6118 pvStructInfo, &bytesNeeded,
NULL);
6150 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
6178 pcbStructInfo, pcbDecoded);
6215 pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
dwFlags,
NULL,
6216 pvStructInfo, pcbStructInfo, &bytesNeeded,
NULL);
6217 if (
ret) *pcbDecoded = bytesNeeded + lenBytes + 1;
6240 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
6257 DWORD data_len, len_bytes;
6265 WARN(
"Unexpected tag %#x.\n", pbEncoded[0]);
6274 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
6276 *pcbDecoded = 1 + len_bytes + data_len;
6303 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
6340 pvStructInfo, pcbStructInfo, &bytesDecoded);
6341 if (
ret) *pcbDecoded = bytesDecoded + lenBytes + 1;
6372 pvStructInfo, pcbStructInfo, &bytesDecoded);
6373 if (
ret) *pcbDecoded = bytesDecoded + lenBytes + 1;
6399 WARN(
"Unexpected tag %02x\n",
tag);
6403 if (cbEncoded < 2 || pbEncoded[1])
6409 *pcbStructInfo = bytesNeeded;
6410 else if (*pcbStructInfo < bytesNeeded)
6412 *pcbStructInfo = bytesNeeded;
6418 *(
DWORD *)pvStructInfo = 0;
6423 *pcbStructInfo = bytesNeeded;
6433 WARN(
"Unexpected tag %02x\n",
tag);
6452 bytesNeeded +=
sizeof(*info);
6454 *pcbStructInfo = bytesNeeded;
6455 else if (*pcbStructInfo < bytesNeeded)
6457 *pcbStructInfo = bytesNeeded;
6463 *(
DWORD *)pvStructInfo = 1;
6469 *pcbStructInfo = bytesNeeded;
6470 *pcbDecoded = 1 + lenBytes + bytesDecoded;
6516 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo,
6517 pcbStructInfo, pcbDecoded,
NULL);
6531 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
6539 DWORD dataLen, decodedLen, lenBytes, bytesNeeded =
sizeof(*info);
6545 WARN(
"Unexpected tag %02x\n",
tag);
6553 cbEncoded -= 1 + lenBytes;
6555 if (dataLen > cbEncoded)
6560 pbEncoded += 1 + lenBytes;
6561 decodedLen = 1 + lenBytes + dataLen;
6565 WARN(
"Unexpected tag %02x %02x\n", pbEncoded[0], pbEncoded[1]);
6571 if (pvStructInfo && *pcbStructInfo >= bytesNeeded)
6573 info->dwResponderIdChoice = 1;
6576 blob->cbData = dataLen;
6579 else if (
blob->cbData)
6587 *pcbDecoded = decodedLen;
6591 *pcbStructInfo = bytesNeeded;
6595 if (*pcbStructInfo < bytesNeeded)
6598 *pcbStructInfo = bytesNeeded;
6602 *pcbStructInfo = bytesNeeded;
6611 DWORD dataLen, decodedLen, lenBytes, bytesNeeded =
sizeof(*info),
len;
6617 WARN(
"Unexpected tag %02x\n",
tag);
6625 cbEncoded -= 1 + lenBytes;
6626 decodedLen = 1 + lenBytes;
6628 if (dataLen > cbEncoded)
6633 pbEncoded += 1 + lenBytes;
6636 WARN(
"Unexpected tag %02x\n", pbEncoded[0]);
6644 decodedLen += 1 + lenBytes +
len;
6645 cbEncoded -= 1 + lenBytes;
6647 if (
len > cbEncoded)
6652 pbEncoded += 1 + lenBytes;
6655 if (pvStructInfo && *pcbStructInfo >= bytesNeeded)
6657 info->dwResponderIdChoice = 2;
6662 else if (
blob->cbData)
6670 *pcbDecoded = decodedLen;
6674 *pcbStructInfo = bytesNeeded;
6678 if (*pcbStructInfo < bytesNeeded)
6681 *pcbStructInfo = bytesNeeded;
6685 *pcbStructInfo = bytesNeeded;
6693 BYTE choice = pbEncoded[0] & 3;
6695 TRACE(
"choice %02x\n", choice);
6700 pvStructInfo, pcbStructInfo, pcbDecoded);
6703 pvStructInfo, pcbStructInfo, pcbDecoded);
6705 WARN(
"Unexpected choice %02x\n", choice);
6734 pbEncoded, cbEncoded,
dwFlags, pDecodePara, pvStructInfo,
6759 switch (
LOWORD(lpszStructType))
6992 DWORD *pcbStructInfo)
6995 pbEncoded, cbEncoded,
dwFlags,
NULL, pvStructInfo, pcbStructInfo);
7006 TRACE_(crypt)(
"(0x%08lx, %s, %p, %ld, 0x%08lx, %p, %p, %p)\n",
7007 dwCertEncodingType,
debugstr_a(lpszStructType), pbEncoded,
7008 cbEncoded,
dwFlags, pDecodePara, pvStructInfo, pcbStructInfo);
7010 if (!pvStructInfo && !pcbStructInfo)
7017 FIXME_(crypt)(
"Returning CRYPT_E_ASN1_LARGE, cbEncoded %lu.\n", cbEncoded);
7035 TRACE_(crypt)(
"OID %s not found or unimplemented, looking for DLL\n",
7042 FIXME(
"Unimplemented decoder for lpszStructType OID %d\n",
LOWORD(lpszStructType));
7044 FIXME(
"Unsupported decoder for lpszStructType %s\n", lpszStructType);
7048 ret =
decodeFunc(dwCertEncodingType, lpszStructType, pbEncoded,
7049 cbEncoded,
dwFlags, pDecodePara, pvStructInfo, pcbStructInfo);
7058 if (pCryptDecodeObject)
7062 ret = pCryptDecodeObject(dwCertEncodingType, lpszStructType,
7063 pbEncoded, cbEncoded,
dwFlags,
NULL, pcbStructInfo);
7065 pvStructInfo, pcbStructInfo, *pcbStructInfo)))
7067 ret = pCryptDecodeObject(dwCertEncodingType,
7068 lpszStructType, pbEncoded, cbEncoded,
dwFlags,
7069 *(
BYTE **)pvStructInfo, pcbStructInfo);
7075 ret = pCryptDecodeObject(dwCertEncodingType, lpszStructType,
7076 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo);
7089 TRACE_(crypt)(
"(%p)\n", pPFX);
7107 if (pPFX->
cbData < 1 + lenLen + 3)
7110 pPFX->
pbData[1 + lenLen + 1] != 1 ||
7111 pPFX->
pbData[1 + lenLen + 2] != 3)
static BYTE decode(char c)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
struct _BCRYPT_RSAKEY_BLOB BCRYPT_RSAKEY_BLOB
#define BCRYPT_RSAPUBLIC_MAGIC
_In_ PTRANSFER_PACKET _In_ ULONG _In_ PIRP _In_ ULONG ListIdentifier
static BOOL WINAPI CRYPT_AsnDecodeInt(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeAuthorityInfoAccess(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
#define MEMBERSIZE(s, member, nextmember)
void CRYPT_CopyReversed(BYTE *dst, const BYTE *src, size_t len)
static BOOL CRYPT_AsnDecodePolicyQualifierUserNoticeInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeRequireExplicit(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_GetLen(const BYTE *pbEncoded, DWORD cbEncoded, DWORD *len)
static BOOL CRYPT_AsnDecodeBitsInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodePubKeyInfoInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeBasicConstraints(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodePubKeyInfo(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeValidity(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeChoiceOfTimeInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodePKCSContent(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeOCSPBasicResponse(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeInteger(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeOidIgnoreTag(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodePKCSSignerInfo(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeRsaPubKey_Bcrypt(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeAlgorithmId(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeArray(const struct AsnArrayDescriptor *arrayDesc, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, const CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeCertPolicyConstraints(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeOidInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodePKCSAttribute(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeDistPoint(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX)
static BOOL WINAPI CRYPT_AsnDecodePolicyQualifierUserNotice(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeExtensions(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeIssuingDistPoint(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeSequenceOfAny(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeRecipientInfo(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeUtcTimeInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeNameValueInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeNameConstraints(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeUnicodeName(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeRsaPubKey(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeOCSPNextUpdate(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_GetLengthIndefinite(const BYTE *pbEncoded, DWORD cbEncoded, DWORD *len)
static BOOL WINAPI CRYPT_AsnDecodeAltName(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeOCSPResponseStatus(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeOCSPResponse(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCMSCrlEncoded(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeNoticeNumbers(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCertStatus(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCRLEntries(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeSMIMECapabilities(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeOCSPSignatureInfoCertEncoded(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeUnsignedIntegerInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeNoticeReference(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCTLEntries(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodePKCSContentInfo(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeRsaPrivKey(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeAuthorityKeyId2(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCTLEntry(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static void CRYPT_FreeSpace(const CRYPT_DECODE_PARA *pDecodePara, LPVOID pv)
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCRLEntry(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeOCSPBasicResponseEntry(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodePKCSAttributes(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeSMIMECapability(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeUtcTime(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCertExtensionsInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_FindEncodedLen(const BYTE *pbEncoded, DWORD cbEncoded, DWORD *pcbDecoded)
static BOOL CRYPT_raw_decode_rsa_pub_key(struct DECODED_RSA_PUB_KEY **decodedKey, DWORD *size, const BYTE *pbEncoded, DWORD cbEncoded)
static BOOL WINAPI CRYPT_AsnDecodeEnumerated(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCertInfo(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodePolicyQualifiers(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodePKCSAttributesInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
#define FINALMEMBERSIZE(s, member)
static BOOL CRYPT_AsnDecodePKCSContentInfoInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeBitsSwapBytes(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
BOOL CRYPT_AsnDecodeCMSSignedInfo(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_SIGNED_INFO *signedInfo, DWORD *pcbSignedInfo)
static BOOL CRYPT_AsnDecodeOctetStringInternal(const BYTE *encoded, DWORD encoded_size, DWORD flags, void *buf, DWORD *buf_size, DWORD *ret_decoded)
static BOOL CRYPT_AsnDecodeCRLExtensionsInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeName(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeRdnAttr(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeDerBlob(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeAccessDescription(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
BOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeOctetString(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeUnicodeString(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeResponderID(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
BOOL(WINAPI * CryptDecodeObjectExFunc)(DWORD, LPCSTR, const BYTE *, DWORD, DWORD, PCRYPT_DECODE_PARA, void *, DWORD *)
static BOOL CRYPT_AsnDecodeSequenceItems(struct AsnDecodeSequenceItem items[], DWORD cItem, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, BYTE *nextData, DWORD *cbDecoded)
static BOOL CRYPT_AsnDecodeCertExtensions(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCTLExtensionsInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
BOOL(* InternalDecodeFunc)(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeRdn(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeUnicodeNameValue(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeCertSignedContent(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCertVersion(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeCertPolicies(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeOCSPBasicResponseEntriesArray(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeCRL(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCertPolicyMapping(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeObjectIdentifier(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeAltNameEntry(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeMaximum(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeInhibitMapping(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeOCSPHashAlgorithm(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeBool(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeNameValue(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeTimeZone(const BYTE *pbEncoded, DWORD len, SYSTEMTIME *sysTime)
static BOOL CRYPT_AsnDecodePKCSSignerInfoInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCRLEntryExtensions(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeOctets(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static CryptDecodeObjectExFunc CRYPT_LoadDecoderExFunc(DWORD dwCertEncodingType, LPCSTR lpszStructType, HCRYPTOIDFUNCADDR *hFunc)
static BOOL WINAPI CRYPT_AsnDecodeChoiceOfTime(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCRLExtensions(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCMSSignerId(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeUnsignedInteger(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
#define MIN_ENCODED_TIME_LENGTH
static BOOL CRYPT_AsnDecodePathLenConstraint(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeDistPointName(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeIntInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeUnicodeRdn(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_DecodeSignerArray(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeEccSignature(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeSubtreeConstraints(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeOCSPBasicSignedResponse(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeCRLDistPoints(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_DecodeRecipientInfoArray(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeIA5String(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, LPCSTR lpszStructType)
static BOOL CRYPT_AsnDecodeCTLExtensions(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodePermittedSubtree(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeIssuerSerialNumber(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
BOOL(WINAPI * CryptDecodeObjectFunc)(DWORD, LPCSTR, const BYTE *, DWORD, DWORD, void *, DWORD *)
static BOOL WINAPI CRYPT_AsnDecodeAuthorityKeyId(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
#define CRYPT_TIME_GET_DIGITS(pbEncoded, len, numDigits, word)
static BOOL CRYPT_AsnDecodeCMSCertEncoded(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCRLInfo(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeCTLEntryAttributes(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeEnhancedKeyUsage(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeBits(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeEncryptedContentInfo(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeIntegerInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
BOOL CRYPT_AsnDecodePKCSDigestedData(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_DIGESTED_DATA *digestedData, DWORD *pcbDigestedData)
static BOOL CRYPT_AsnDecodePKCSAttributeValue(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodePolicyQualifier(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodePKCSAttributeInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeOCSPResponseBytes(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeUnicodeRdnAttr(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_DecodeEnsureSpace(DWORD dwFlags, const CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo, DWORD bytesNeeded)
static BOOL verify_and_copy_certificate(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCopyBytes(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeResponderIDByKey(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeCMSSignerInfo(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeSequence(struct AsnDecodeSequenceItem items[], DWORD cItem, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded, void *startingPointer)
static BOOL WINAPI CRYPT_AsnDecodeCert(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeCertPolicyMappings(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static CryptDecodeObjectFunc CRYPT_LoadDecoderFunc(DWORD dwCertEncodingType, LPCSTR lpszStructType, HCRYPTOIDFUNCADDR *hFunc)
static BOOL CRYPT_AsnDecodeCMSSignerInfoInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeExcludedSubtree(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeAltNameInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCertPolicy(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_DecodeCheckSpace(DWORD *pcbStructInfo, DWORD bytesNeeded)
static BOOL CRYPT_AsnDecodeUnicodeNameValueInternal(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeResponderIDByName(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeCTL(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeExtension(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL WINAPI CRYPT_AsnDecodeBasicConstraints2(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeSubtree(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
static BOOL CRYPT_AsnDecodeCTLUsage(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
BOOL CRYPT_AsnDecodePKCSEnvelopedData(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_ENVELOPED_DATA *envelopedData, DWORD *pcbEnvelopedData)
static BOOL CRYPT_AsnDecodeGeneralizedTime(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
#define ASN_GENERALSTRING
#define ASN_VIDEOTEXSTRING
struct _CRYPT_ENCRYPTED_CONTENT_INFO CRYPT_ENCRYPTED_CONTENT_INFO
#define ASN_NUMERICSTRING
#define ASN_GRAPHICSTRING
#define ASN_UNIVERSALSTRING
#define ASN_PRINTABLESTRING
#define ASN_VISIBLESTRING
#define ALIGN_DWORD_PTR(x)
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded)
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize)
VOID WINAPI CryptMemFree(LPVOID pv)
HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName, DWORD dwFlags)
BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags)
#define ERROR_INVALID_PARAMETER
#define WINE_DECLARE_DEBUG_CHANNEL(x)
#define MultiByteToWideChar
#define __EXCEPT_PAGE_FAULT
static const WCHAR *const ext[]
static const WCHAR version[]
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
static const WCHAR Signature[]
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
#define STATUS_ACCESS_VIOLATION
GLdouble GLdouble GLdouble r
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLenum GLenum GLenum mapping
GLsizeiptr const GLvoid GLenum usage
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
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
static const int digits[]
struct _FILETIME FILETIME
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static const struct encodedExtensions exts[]
static APTTYPEQUALIFIER * qualifier
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM ULONG int * pcItems
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
for(i=0;i< sizeof(testsuite)/sizeof(testsuite[0]);++i) ok(call_test(testsuite[i].func)
#define offsetof(TYPE, MEMBER)
#define ASN_OBJECTIDENTIFIER
InternalDecodeFunc decodeFunc
InternalDecodeFunc decodeFunc
CRYPT_INTEGER_BLOB privexp
CRYPT_INTEGER_BLOB exponent1
CRYPT_INTEGER_BLOB modulus
CRYPT_INTEGER_BLOB coefficient
CRYPT_INTEGER_BLOB prime2
CRYPT_INTEGER_BLOB prime1
CRYPT_INTEGER_BLOB exponent2
CRYPT_INTEGER_BLOB pubexp
CRYPT_INTEGER_BLOB modulus
DWORD dwPathLenConstraint
CRYPT_INTEGER_BLOB SerialNumber
CRYPT_DER_BLOB ToBeSigned
PCRYPT_SMIME_CAPABILITY rgCapability
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
DWORD WINAPI GetLastError(void)
struct _CERT_POLICIES_INFO CERT_POLICIES_INFO
#define X509_OBJECT_IDENTIFIER
#define X509_ISSUING_DIST_POINT
struct _CRYPTOAPI_BLOB CRYPT_UINT_BLOB
#define X509_AUTHORITY_KEY_ID2
#define szOID_AUTHORITY_KEY_IDENTIFIER
#define CERT_ID_ISSUER_SERIAL_NUMBER
struct _CRYPTOAPI_BLOB CRYPT_DER_BLOB
#define CERT_ENCODING_TYPE_MASK
struct _CRYPT_ATTRIBUTE CRYPT_ATTRIBUTE
#define szOID_RSA_SMIMECapabilities
#define CERT_RDN_UTF8_STRING
#define CERT_RDN_IA5_STRING
#define CERT_RDN_GENERAL_STRING
#define CRYPT_DECODE_NOCOPY_FLAG
#define szOID_CERT_EXTENSIONS
#define X509_POLICY_MAPPINGS
struct _CERT_PRIVATE_KEY_VALIDITY CERT_PRIVATE_KEY_VALIDITY
struct _CRYPTOAPI_BLOB CRYPT_INTEGER_BLOB
#define X509_CERT_TO_BE_SIGNED
struct _CMSG_KEY_TRANS_RECIPIENT_INFO CMSG_KEY_TRANS_RECIPIENT_INFO
#define X509_UNICODE_NAME
struct _CERT_ISSUER_SERIAL_NUMBER CERT_ISSUER_SERIAL_NUMBER
struct _CERT_ALT_NAME_ENTRY CERT_ALT_NAME_ENTRY
#define CERT_RDN_PRINTABLE_STRING
struct _CRL_ENTRY CRL_ENTRY
#define szOID_POLICY_MAPPINGS
#define X509_MULTI_BYTE_UINT
struct _CRYPT_ATTRIBUTES CRYPT_ATTRIBUTES
struct _OCSP_BASIC_RESPONSE_ENTRY OCSP_BASIC_RESPONSE_ENTRY
#define szOID_CRL_DIST_POINTS
struct _CRYPT_SMIME_CAPABILITIES CRYPT_SMIME_CAPABILITIES
struct _CERT_GENERAL_SUBTREE CERT_GENERAL_SUBTREE
#define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG
#define X509_OCTET_STRING
#define szOID_BASIC_CONSTRAINTS2
struct _CERT_PUBLIC_KEY_INFO CERT_PUBLIC_KEY_INFO
struct _CERT_EXTENSION CERT_EXTENSION
#define X509_MULTI_BYTE_INTEGER
struct _CRYPT_SEQUENCE_OF_ANY CRYPT_SEQUENCE_OF_ANY
struct _CERT_NAME_VALUE CERT_NAME_VALUE
struct _CRYPTOAPI_BLOB CRYPT_DATA_BLOB
struct _CRYPT_ALGORITHM_IDENTIFIER CRYPT_ALGORITHM_IDENTIFIER
#define CERT_ID_KEY_IDENTIFIER
#define szOID_LEGACY_POLICY_MAPPINGS
#define X509_AUTHORITY_INFO_ACCESS
#define OCSP_BASIC_RESPONSE
#define szOID_NAME_CONSTRAINTS
struct _CERT_NAME_INFO CERT_NAME_INFO
#define CRYPT_OID_DECODE_OBJECT_EX_FUNC
#define CMSG_ENCODING_TYPE_MASK
struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE CERT_POLICY_QUALIFIER_NOTICE_REFERENCE
#define CERT_RDN_UNIVERSAL_STRING
#define szOID_ISSUER_ALT_NAME2
#define PKCS_CONTENT_INFO
#define CRYPT_OID_DECODE_OBJECT_FUNC
struct _CTL_USAGE CERT_ENHKEY_USAGE
#define CERT_RDN_VISIBLE_STRING
#define OCSP_BASIC_SIGNED_RESPONSE
#define CRL_DIST_POINT_NO_NAME
#define CNG_RSA_PUBLIC_KEY_BLOB
struct _CRYPTOAPI_BLOB CRYPT_HASH_BLOB
#define szOID_ECC_PUBLIC_KEY
#define X509_ASN_ENCODING
#define X509_CHOICE_OF_TIME
#define szOID_BASIC_CONSTRAINTS
#define X509_ECC_SIGNATURE
#define CRYPT_DECODE_ALLOC_FLAG
#define CRL_DIST_POINT_FULL_NAME
#define szOID_SUBJECT_KEY_IDENTIFIER
#define X509_AUTHORITY_KEY_ID
#define CERT_RDN_VIDEOTEX_STRING
#define szOID_CRL_REASON_CODE
struct _CERT_POLICY_QUALIFIER_INFO CERT_POLICY_QUALIFIER_INFO
#define X509_CERT_POLICIES
struct _CRYPTOAPI_BLOB CERT_NAME_BLOB
#define RSA_CSP_PUBLICKEYBLOB
#define szOID_RSA_signingTime
#define X509_SEQUENCE_OF_ANY
struct _CRYPT_CONTENT_INFO CRYPT_CONTENT_INFO
#define szOID_SUBJECT_ALT_NAME
#define szOID_CERT_POLICIES
#define PKCS7_SIGNER_INFO
#define CERT_RDN_T61_STRING
#define szOID_ENHANCED_KEY_USAGE
struct _CRYPT_BIT_BLOB CRYPT_BIT_BLOB
struct _CRYPT_DECODE_PARA * PCRYPT_DECODE_PARA
#define szOID_SUBJECT_ALT_NAME2
struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE * PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE
#define CMSG_INDEFINITE_LENGTH
#define PKCS_RSA_PRIVATE_KEY
#define X509_BASIC_CONSTRAINTS2
struct _PUBLICKEYSTRUC BLOBHEADER
struct _CERT_EXTENSIONS CERT_EXTENSIONS
#define PKCS_SMIME_CAPABILITIES
#define CERT_RDN_OCTET_STRING
struct _CERT_POLICY_QUALIFIER_USER_NOTICE CERT_POLICY_QUALIFIER_USER_NOTICE
#define CRYPT_ENCODE_ALLOC_FLAG
#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE
struct _CTL_ENTRY CTL_ENTRY
#define szOID_NEXT_UPDATE_LOCATION
#define CERT_RDN_NUMERIC_STRING
#define X509_PUBLIC_KEY_INFO
struct _CRYPTOAPI_BLOB CRYPT_OBJID_BLOB
#define szOID_AUTHORITY_INFO_ACCESS
struct _CERT_ALT_NAME_INFO CERT_ALT_NAME_INFO
#define X509_ALTERNATE_NAME
struct _CERT_AUTHORITY_INFO_ACCESS CERT_AUTHORITY_INFO_ACCESS
#define szOID_AUTHORITY_KEY_IDENTIFIER2
struct _CTL_USAGE CTL_USAGE
struct _CMSG_CMS_SIGNER_INFO CMSG_CMS_SIGNER_INFO
#define CRYPT_DECODE_TO_BE_SIGNED_FLAG
#define PKCS_7_ASN_ENCODING
#define X509_NAME_CONSTRAINTS
#define CERT_RDN_BMP_STRING
#define szOID_POLICY_CONSTRAINTS
#define szOID_ISSUING_DIST_POINT
#define X509_CRL_DIST_POINTS
struct _CRL_DIST_POINT_NAME CRL_DIST_POINT_NAME
#define X509_CERT_CRL_TO_BE_SIGNED
#define X509_BASIC_CONSTRAINTS
struct _CRL_DIST_POINTS_INFO CRL_DIST_POINTS_INFO
#define X509_ENHANCED_KEY_USAGE
#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE
#define szOID_ISSUER_ALT_NAME
#define CERT_RDN_GRAPHIC_STRING
struct _CERT_RDN CERT_RDN
#define X509_POLICY_CONSTRAINTS
struct _CERT_ALT_NAME_ENTRY * PCERT_ALT_NAME_ENTRY
#define X509_UNICODE_NAME_VALUE
struct _CERT_POLICY_MAPPING CERT_POLICY_MAPPING
#define CRYPT_E_ASN1_RULE
#define CRYPT_E_ASN1_CORRUPT
#define CRYPT_E_ASN1_LARGE
#define CRYPT_E_ASN1_BADTAG
_In_ BOOLEAN _In_ ULONG HashAlgorithm