41#define NONAMELESSUNION
53#define MAX_ENCODED_LEN 0x02000000
55#define ASN_FLAGS_MASK 0xe0
56#define ASN_TYPE_MASK 0x1f
113#define GET_LEN_BYTES(b) ((b) <= 0x80 ? 1 : 1 + ((b) & 0x7f))
153 if (lenLen >
sizeof(
DWORD) + 1)
158 else if (lenLen + 2 > cbEncoded)
173 if (
out + lenLen + 1 > cbEncoded)
215 if (pDecodePara && pDecodePara->
pfnAlloc)
216 *(
BYTE **)pvStructInfo = pDecodePara->
pfnAlloc(bytesNeeded);
219 if (!*(
BYTE **)pvStructInfo)
222 *pcbStructInfo = bytesNeeded;
224 else if (*pcbStructInfo < bytesNeeded)
226 *pcbStructInfo = bytesNeeded;
231 *pcbStructInfo = bytesNeeded;
237 if (pDecodePara && pDecodePara->
pfnFree)
250 if (*pcbStructInfo < bytesNeeded)
252 *pcbStructInfo = bytesNeeded;
258 *pcbStructInfo = bytesNeeded;
298#define FINALMEMBERSIZE(s, member) (sizeof(s) - offsetof(s, member))
299#define MEMBERSIZE(s, member, nextmember) \
300 (offsetof(s, nextmember) - offsetof(s, member))
311 void *pvStructInfo,
BYTE *nextData,
DWORD *cbDecoded)
317 TRACE(
"%p, %d, %p, %d, %08x, %p, %p, %p\n",
items, cItem,
pbEncoded,
318 cbEncoded,
dwFlags, pvStructInfo, nextData, cbDecoded);
333 DWORD itemEncodedLen;
338 itemEncodedLen = 1 + itemLenBytes + itemLen;
339 if (nextData && pvStructInfo &&
items[
i].hasPointer)
341 TRACE(
"Setting next pointer to %p\n",
344 items[
i].pointerOffset) = nextData;
351 TRACE(
"decoding item %d\n",
i);
353 TRACE(
"sizing item %d\n",
i);
368 if (nextData &&
items[
i].hasPointer &&
371 if (itemDecoded > itemEncodedLen)
373 WARN(
"decoded length %d exceeds encoded %d\n",
374 itemDecoded, itemEncodedLen);
381 decoded += itemDecoded;
382 TRACE(
"item %d: decoded %d bytes\n",
i,
389 TRACE(
"skipping optional item %d\n",
i);
395 TRACE(
"item %d failed: %08x\n",
i,
400 ERR(
"can't use indefinite length encoding without a decoder\n");
406 TRACE(
"item %d: decoded %d bytes\n",
i, itemEncodedLen);
407 ptr += itemEncodedLen;
408 decoded += itemEncodedLen;
414 TRACE(
"skipping optional item %d\n",
i);
419 TRACE(
"item %d: tag %02x doesn't match expected %02x\n",
428 TRACE(
"missing optional item %d, skipping\n",
i);
433 TRACE(
"not enough bytes for item %d, failing\n",
i);
439 *cbDecoded = decoded;
454 DWORD *pcbDecoded,
void *startingPointer)
458 TRACE(
"%p, %d, %p, %d, %08x, %p, %p, %d, %p\n",
items, cItem,
pbEncoded,
459 cbEncoded,
dwFlags, pDecodePara, pvStructInfo, *pcbStructInfo,
477 cbEncoded -= 1 + lenBytes;
484 else if (cbEncoded < dataLen)
486 TRACE(
"dataLen %d exceeds cbEncoded %d, failing\n", dataLen,
497 if (cbDecoded > cbEncoded - 2)
503 else if (*(
ptr + cbDecoded) != 0 ||
504 *(
ptr + cbDecoded + 1) != 0)
506 TRACE(
"expected 0 TLV\n");
514 if (
ret && !indefinite && cbDecoded != dataLen)
516 TRACE(
"expected %d decoded, got %d, failing\n", dataLen,
523 DWORD i, bytesNeeded = 0, structSize = 0;
525 for (
i = 0;
i < cItem;
i++)
531 bytesNeeded += structSize;
533 *pcbDecoded = 1 + lenBytes + cbDecoded;
535 *pcbStructInfo = bytesNeeded;
537 pDecodePara, pvStructInfo, pcbStructInfo, bytesNeeded)))
542 pvStructInfo = *(
BYTE **)pvStructInfo;
544 nextData = startingPointer;
546 nextData = (
BYTE *)pvStructInfo + structSize;
547 memset(pvStructInfo, 0, structSize);
549 ptr, dataLen,
dwFlags, pvStructInfo, nextData,
621 cbEncoded, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
640 decoded = 1 + lenBytes;
666 DWORD itemEncoded, itemDataLen, itemDecoded,
size = 0;
687 if (itemSizes != &itemSize)
696 *itemSizes = itemSize;
700 decoded += itemDecoded;
701 itemSizes[cItems - 1].
encodedLen = itemEncoded;
702 itemSizes[cItems - 1].size =
size;
715 *pcbDecoded = decoded;
717 *pcbStructInfo = bytesNeeded;
719 pvStructInfo, pcbStructInfo, bytesNeeded)))
727 pvStructInfo = *(
void **)pvStructInfo;
732 rgItems = (
BYTE *)pvStructInfo +
741 nextData = (
BYTE *)rgItems + cItems * arrayDesc->
itemSize;
755 &itemSizes[
i].size, &itemDecoded);
758 nextData += itemSizes[
i].size - arrayDesc->
itemSize;
766 if (itemSizes != &itemSize)
796 bytesNeeded += 1 + lenBytes + dataLen;
799 *pcbDecoded = 1 + lenBytes + dataLen;
801 *pcbStructInfo = bytesNeeded;
807 pvStructInfo = *(
BYTE **)pvStructInfo;
809 blob->cbData = 1 + lenBytes + dataLen;
838 pvStructInfo, *pcbStructInfo, pcbDecoded);
846 if (
ret && pvStructInfo)
855 for (
i = 0;
i <
blob->cbData / 2;
i++)
874 pDecodePara, pvStructInfo, *pcbStructInfo);
921 *pcbDecoded = 1 + lenBytes + dataLen;
956 pvStructInfo, *pcbStructInfo, pcbDecoded);
959 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
975 dataLen,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
976 if (
ret && pcbDecoded)
977 *pcbDecoded = 1 + lenBytes + dataLen;
1008 SubjectPublicKeyInfo.Algorithm.Parameters.pbData), 0 },
1021 pDecodePara, pvStructInfo, *pcbStructInfo);
1026 if (
ret && pvStructInfo)
1033 info = pvStructInfo;
1034 if (!
info->SerialNumber.cbData || !
info->Issuer.cbData ||
1035 !
info->Subject.cbData)
1056 pDecodePara, pvStructInfo, *pcbStructInfo);
1069 &signedCert, &
size);
1076 pvStructInfo, pcbStructInfo);
1086 pDecodePara, pvStructInfo, pcbStructInfo);
1111 pvStructInfo, *pcbStructInfo, pcbDecoded);
1114 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
1143 WARN(
"empty CRL entry serial number\n");
1164 pvStructInfo, *pcbStructInfo, pcbDecoded);
1167 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
1184 pvStructInfo, *pcbStructInfo, pcbDecoded);
1187 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
1203 dataLen,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
1204 if (
ret && pcbDecoded)
1205 *pcbDecoded = 1 + lenBytes + dataLen;
1237 pDecodePara, pvStructInfo, *pcbStructInfo);
1240 pDecodePara, pvStructInfo, pcbStructInfo,
NULL,
NULL);
1253 pDecodePara, pvStructInfo, *pcbStructInfo);
1273 pvStructInfo, pcbStructInfo);
1283 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo);
1303 pvStructInfo, *pcbStructInfo);
1348 *pcbDecoded = 1 + lenBytes + dataLen;
1350 *pcbStructInfo = bytesNeeded;
1351 else if (*pcbStructInfo < bytesNeeded)
1353 *pcbStructInfo = bytesNeeded;
1368 pszObjId +=
strlen(pszObjId);
1384 pszObjId +=
strlen(pszObjId);
1389 *pcbStructInfo = bytesNeeded;
1401 pvStructInfo, *pcbStructInfo);
1405 pvStructInfo, pcbStructInfo, pcbDecoded);
1434 TRACE(
"ext->pszObjId is %p\n",
ext->pszObjId);
1439 TRACE(
"ext->pszObjId is %p (%s)\n",
ext->pszObjId,
1452 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
1467 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
1500 bytesNeeded += dataLen;
1505 bytesNeeded += dataLen;
1510 bytesNeeded += dataLen;
1515 bytesNeeded += dataLen;
1520 bytesNeeded += dataLen;
1525 bytesNeeded += dataLen;
1530 bytesNeeded += dataLen;
1535 bytesNeeded += dataLen;
1540 bytesNeeded += dataLen;
1543 FIXME(
"ASN_UNIVERSALSTRING: unimplemented\n");
1548 bytesNeeded += dataLen;
1561 *pcbDecoded = 1 + lenBytes + dataLen;
1563 *pcbStructInfo = bytesNeeded;
1564 else if (*pcbStructInfo < bytesNeeded)
1566 *pcbStructInfo = bytesNeeded;
1572 *pcbStructInfo = bytesNeeded;
1573 value->dwValueType = valueType;
1590 value->Value.cbData = dataLen;
1605 value->Value.cbData = dataLen;
1606 for (
i = 0;
i < dataLen / 2;
i++)
1624 value->Value.cbData = 0;
1642 if (
ret && pvStructInfo)
1645 pcbStructInfo, *pcbStructInfo);
1651 pvStructInfo = *(
BYTE **)pvStructInfo;
1652 value = pvStructInfo;
1656 pcbStructInfo,
NULL);
1689 bytesNeeded += (dataLen + 1) * 2;
1694 bytesNeeded += (dataLen + 1) * 2;
1699 bytesNeeded += (dataLen + 1) * 2;
1704 bytesNeeded += (dataLen + 1) * 2;
1709 bytesNeeded += (dataLen + 1) * 2;
1714 bytesNeeded += (dataLen + 1) * 2;
1719 bytesNeeded += (dataLen + 1) * 2;
1724 bytesNeeded += (dataLen + 1) * 2;
1729 bytesNeeded += dataLen / 2 +
sizeof(
WCHAR);
1734 bytesNeeded += dataLen +
sizeof(
WCHAR);
1748 *pcbDecoded = 1 + lenBytes + dataLen;
1750 *pcbStructInfo = bytesNeeded;
1751 else if (*pcbStructInfo < bytesNeeded)
1753 *pcbStructInfo = bytesNeeded;
1759 *pcbStructInfo = bytesNeeded;
1760 value->dwValueType = valueType;
1777 value->Value.cbData = dataLen * 2;
1778 for (
i = 0;
i < dataLen;
i++)
1783 value->Value.cbData = dataLen / 2;
1784 for (
i = 0;
i < dataLen / 4;
i++)
1790 value->Value.cbData = dataLen;
1791 for (
i = 0;
i < dataLen / 2;
i++)
1807 value->Value.cbData = 0;
1825 if (
ret && pvStructInfo)
1828 pcbStructInfo, *pcbStructInfo);
1834 pvStructInfo = *(
BYTE **)pvStructInfo;
1835 value = pvStructInfo;
1839 pcbStructInfo,
NULL);
1869 pvStructInfo, *pcbStructInfo);
1872 TRACE(
"attr->pszObjId is %p\n",
attr->pszObjId);
1878 TRACE(
"attr->pszObjId is %p (%s)\n",
attr->pszObjId,
1880 TRACE(
"attr->dwValueType is %d\n",
attr->dwValueType);
1897 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
1914 DWORD bytesNeeded = 0;
1922 *pcbStructInfo = bytesNeeded;
1924 pvStructInfo, pcbStructInfo, bytesNeeded)))
1929 pvStructInfo = *(
BYTE **)pvStructInfo;
1930 info = pvStructInfo;
1935 &bytesNeeded,
NULL);
1966 pvStructInfo, *pcbStructInfo);
1969 TRACE(
"attr->pszObjId is %p\n",
attr->pszObjId);
1975 TRACE(
"attr->pszObjId is %p (%s)\n",
attr->pszObjId,
1977 TRACE(
"attr->dwValueType is %d\n",
attr->dwValueType);
1994 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2011 DWORD bytesNeeded = 0;
2019 *pcbStructInfo = bytesNeeded;
2021 pvStructInfo, pcbStructInfo, bytesNeeded)))
2026 pvStructInfo = *(
BYTE **)pvStructInfo;
2027 info = pvStructInfo;
2032 &bytesNeeded,
NULL);
2051 DWORD indefiniteNestingLevels = 0, decoded = 0;
2067 indefiniteNestingLevels++;
2069 cbEncoded -= 1 + lenBytes;
2070 decoded += 1 + lenBytes;
2071 TRACE(
"indefiniteNestingLevels = %d\n",
2072 indefiniteNestingLevels);
2077 indefiniteNestingLevels)
2079 indefiniteNestingLevels--;
2080 TRACE(
"indefiniteNestingLevels = %d\n",
2081 indefiniteNestingLevels);
2084 cbEncoded -= 1 + lenBytes + dataLen;
2085 decoded += 1 + lenBytes + dataLen;
2086 if (!indefiniteNestingLevels)
2090 }
while (
ret && !done);
2092 if (
ret && indefiniteNestingLevels)
2098 *pcbDecoded = decoded;
2099 TRACE(
"returning %d (%d)\n",
ret,
ret ? *pcbDecoded : 0);
2111 pvStructInfo, *pcbStructInfo);
2116 bytesNeeded += encodedLen;
2118 *pcbStructInfo = bytesNeeded;
2119 else if (*pcbStructInfo < bytesNeeded)
2122 *pcbStructInfo = bytesNeeded;
2129 *pcbStructInfo = bytesNeeded;
2130 blob->cbData = encodedLen;
2145 *pcbDecoded = encodedLen;
2161 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2177 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2216 pvStructInfo, *pcbStructInfo, pcbDecoded);
2219 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2235 pvStructInfo, *pcbStructInfo, pcbDecoded);
2238 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2254 dataLen,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
2255 if (
ret && pcbDecoded)
2256 *pcbDecoded = 1 + lenBytes + dataLen;
2268 pDecodePara, pvStructInfo, *pcbStructInfo);
2330 pvStructInfo, *pcbStructInfo);
2346 pDecodePara, pvStructInfo, *pcbStructInfo);
2361 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
2378 LPSTR *pStr = pvStructInfo;
2383 DWORD bytesNeeded =
sizeof(
LPSTR) +
sizeof(
char);
2392 bytesNeeded += dataLen;
2394 *pcbDecoded = 1 + lenBytes + dataLen;
2396 *pcbStructInfo = bytesNeeded;
2397 else if (*pcbStructInfo < bytesNeeded)
2399 *pcbStructInfo = bytesNeeded;
2405 *pcbStructInfo = bytesNeeded;
2434 pvStructInfo, pvStructInfo ? *pcbDecoded : 0);
2437 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2455 rgNoticeNumbers), 0 },
2457 DWORD bytesNeeded = 0;
2460 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
2475 *pcbStructInfo = bytesNeeded;
2476 else if (*pcbStructInfo < bytesNeeded)
2478 *pcbStructInfo = bytesNeeded;
2486 *pcbStructInfo = bytesNeeded;
2522 bytesNeeded += (dataLen + 1) * 2;
2526 bytesNeeded += (dataLen + 1) * 2;
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 / 2 +
sizeof(
WCHAR);
2558 bytesNeeded += dataLen +
sizeof(
WCHAR);
2571 *pcbDecoded = 1 + lenBytes + dataLen;
2573 *pcbStructInfo = bytesNeeded;
2574 else if (*pcbStructInfo < bytesNeeded)
2576 *pcbStructInfo = bytesNeeded;
2582 LPWSTR *pStr = pvStructInfo;
2584 *pcbStructInfo = bytesNeeded;
2601 for (
i = 0;
i < dataLen;
i++)
2606 for (
i = 0;
i < dataLen / 4;
i++)
2612 for (
i = 0;
i < dataLen / 2;
i++)
2651 pvStructInfo, *pcbStructInfo);
2663 void *pvStructInfo,
DWORD *pcbStructInfo)
2668 pDecodePara, pvStructInfo, *pcbStructInfo);
2672 DWORD bytesNeeded = 0;
2680 *pcbStructInfo = bytesNeeded;
2682 pvStructInfo, pcbStructInfo, bytesNeeded)))
2687 pvStructInfo = *(
BYTE **)pvStructInfo;
2689 notice->pNoticeReference =
2691 ((
BYTE *)pvStructInfo +
2695 pvStructInfo, &bytesNeeded,
NULL);
2722 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
2725 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2746 pvStructInfo, *pcbStructInfo);
2762 pDecodePara, pvStructInfo, *pcbStructInfo);
2766 DWORD bytesNeeded = 0;
2773 *pcbStructInfo = bytesNeeded;
2775 pvStructInfo, pcbStructInfo, bytesNeeded)))
2780 pvStructInfo = *(
BYTE **)pvStructInfo;
2781 attr = pvStructInfo;
2813 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
2824 pDecodePara, pvStructInfo, *pcbStructInfo);
2838 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
2864 pvStructInfo, *pcbStructInfo, pcbDecoded);
2869 if (
ret && pvStructInfo)
2886 Algorithm.pszObjId) },
2895 pcbDecoded,
info ?
info->Algorithm.Parameters.pbData :
NULL);
2907 DWORD bytesNeeded = 0;
2913 *pcbStructInfo = bytesNeeded;
2915 pvStructInfo, pcbStructInfo, bytesNeeded)))
2920 pvStructInfo = *(
BYTE **)pvStructInfo;
2921 info = pvStructInfo;
2922 info->Algorithm.Parameters.pbData = (
BYTE *)pvStructInfo +
2926 &bytesNeeded,
NULL);
2965 *pcbStructInfo =
sizeof(
BOOL);
2968 else if (*pcbStructInfo <
sizeof(
BOOL))
2970 *pcbStructInfo =
sizeof(
BOOL);
2976 *pcbStructInfo =
sizeof(
BOOL);
2992 pvStructInfo, *pcbStructInfo);
3000 if (1 + lenBytes > cbEncoded)
3018 bytesNeeded += (dataLen + 1) *
sizeof(
WCHAR);
3022 bytesNeeded += dataLen;
3032 bytesNeeded += dataLen -
sizeof(
LPSTR);
3054 *pcbDecoded = 1 + lenBytes + dataLen;
3056 *pcbStructInfo = bytesNeeded;
3057 else if (*pcbStructInfo < bytesNeeded)
3059 *pcbStructInfo = bytesNeeded;
3065 *pcbStructInfo = bytesNeeded;
3076 for (
i = 0;
i < dataLen;
i++)
3093 entry->u.IPAddress.cbData = dataLen;
3099 &
entry->u.pszRegisteredID, &dataLen,
NULL);
3121 pvStructInfo, *pcbStructInfo, pcbDecoded);
3124 NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
3179 AuthorityCertIssuer.rgAltEntry), 0 },
3184 AuthorityCertSerialNumber.pbData), 0 },
3226 pDecodePara, pvStructInfo, *pcbStructInfo);
3241 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
3259 pvStructInfo, *pcbStructInfo, pcbDecoded);
3270 cbEncoded -= 1 + lenBytes;
3279 pvStructInfo, pcbStructInfo, &decodedLen);
3285 TRACE(
"expected 0 TLV, got {%02x,%02x}\n",
3294 if (
ret && pcbDecoded)
3296 *pcbDecoded = 1 + lenBytes + decodedLen;
3297 TRACE(
"decoded %d bytes\n", *pcbDecoded);
3321 pvStructInfo, *pcbStructInfo, pcbDecoded);
3336 pDecodePara, pvStructInfo, *pcbStructInfo);
3342 if (
ret && pvStructInfo)
3345 pcbStructInfo, *pcbStructInfo);
3351 pvStructInfo = *(
BYTE **)pvStructInfo;
3352 info = pvStructInfo;
3357 pcbStructInfo,
NULL);
3386 ContentInfo.pszObjId), 0 },
3405 pDecodePara, pvStructInfo, *pcbStructInfo);
3409 DWORD bytesNeeded = 0;
3415 *pcbStructInfo = bytesNeeded;
3417 pvStructInfo, pcbStructInfo, bytesNeeded)))
3422 pvStructInfo = *(
BYTE **)pvStructInfo;
3423 name = pvStructInfo;
3428 &bytesNeeded,
NULL);
3457 pvStructInfo, *pcbStructInfo, pcbDecoded);
3463 *pcbStructInfo = bytesNeeded;
3465 else if (*pcbStructInfo < bytesNeeded)
3468 *pcbStructInfo = bytesNeeded;
3475 *pcbStructInfo = bytesNeeded;
3481 TRACE(
"got an int, dwPathLenConstraint is %d\n",
3501 pvStructInfo, *pcbStructInfo, pcbDecoded);
3504 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
3590 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3611 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3614 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
3635 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3650 pDecodePara, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3666 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
3692 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3707 pDecodePara, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3722 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
3753 fRequireExplicitPolicy, fInhibitPolicyMapping);
3756 *pcbStructInfo = bytesNeeded;
3757 else if (*pcbStructInfo < bytesNeeded)
3759 *pcbStructInfo = bytesNeeded;
3768 *pcbStructInfo = bytesNeeded;
3772 info->fRequireExplicitPolicy =
TRUE;
3773 info->dwRequireExplicitPolicySkipCerts =
skip;
3800 fInhibitPolicyMapping);
3803 *pcbStructInfo = bytesNeeded;
3804 else if (*pcbStructInfo < bytesNeeded)
3806 *pcbStructInfo = bytesNeeded;
3815 *pcbStructInfo = bytesNeeded;
3819 info->fInhibitPolicyMapping =
TRUE;
3820 info->dwInhibitPolicyMappingSkipCerts =
skip;
3829 void *pvStructInfo,
DWORD *pcbStructInfo)
3834 pDecodePara, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
3843 fInhibitPolicyMapping),
TRUE,
FALSE, 0, 0 },
3863#define RSA1_MAGIC 0x31415352
3900 *pcbStructInfo = bytesNeeded;
3904 pvStructInfo, pcbStructInfo, bytesNeeded)))
3910 pvStructInfo = *(
BYTE **)pvStructInfo;
3937#define RSA2_MAGIC 0x32415352
4024 *pcbStructInfo = bytesNeeded;
4028 pvStructInfo, pcbStructInfo, bytesNeeded)))
4035 pvStructInfo = *(
BYTE **)pvStructInfo;
4047 rsaPubKey->
bitlen = halflen * 16;
4049 vardata = (
BYTE*)(rsaPubKey + 1);
4050 memset(vardata, 0, halflen * 9);
4053 memcpy(vardata + halflen * 2,
4055 memcpy(vardata + halflen * 3,
4057 memcpy(vardata + halflen * 4,
4059 memcpy(vardata + halflen * 5,
4061 memcpy(vardata + halflen * 6,
4063 memcpy(vardata + halflen * 7,
4085 DWORD bytesNeeded, dataLen;
4088 pvStructInfo, *pcbStructInfo, pcbDecoded);
4099 *pcbDecoded = 1 + lenBytes + dataLen;
4101 *pcbStructInfo = bytesNeeded;
4102 else if (*pcbStructInfo < bytesNeeded)
4105 *pcbStructInfo = bytesNeeded;
4112 *pcbStructInfo = bytesNeeded;
4113 blob = pvStructInfo;
4114 blob->cbData = dataLen;
4132 DWORD decoded = 0, indefinite_len_depth = 0, len_size,
len, bytes_needed;
4142 encoded += 1 + len_size;
4143 encoded_size -= 1 + len_size;
4144 decoded += 1 + len_size;
4148 indefinite_len_depth++;
4149 if (encoded_size < 2)
4161 WARN(
"Unexpected tag %02x\n", encoded[0]);
4169 decoded += 1 + len_size +
len;
4170 encoded_size -= 1 + len_size;
4172 if (
len > encoded_size)
4178 *ret_decoded = decoded;
4180 encoded += 1 + len_size;
4184 while (indefinite_len_depth--)
4186 if (encoded[0] || encoded[1])
4188 TRACE(
"expected 0 TLV, got %02x %02x\n", encoded[0], encoded[1]);
4194 bytes_needed =
sizeof(*blob);
4198 *buf_size = bytes_needed;
4201 if (*buf_size < bytes_needed)
4204 *buf_size = bytes_needed;
4208 *buf_size = bytes_needed;
4213 else if (
blob->cbData)
4217 *ret_decoded = decoded;
4228 pDecodePara, pvStructInfo, *pcbStructInfo);
4238 DWORD bytesNeeded = 0;
4244 *pcbStructInfo = bytesNeeded;
4246 pvStructInfo, pcbStructInfo, bytesNeeded)))
4251 pvStructInfo = *(
BYTE **)pvStructInfo;
4252 blob = pvStructInfo;
4256 &bytesNeeded,
NULL);
4275 DWORD bytesNeeded, dataLen;
4279 pvStructInfo, *pcbStructInfo, pcbDecoded);
4288 *pcbDecoded = 1 + lenBytes + dataLen;
4290 *pcbStructInfo = bytesNeeded;
4291 else if (*pcbStructInfo < bytesNeeded)
4293 *pcbStructInfo = bytesNeeded;
4301 *pcbStructInfo = bytesNeeded;
4302 blob = pvStructInfo;
4303 blob->cbData = dataLen - 1;
4333 pDecodePara, pvStructInfo, pcbStructInfo);
4337 DWORD bytesNeeded = 0;
4353 *pcbStructInfo = bytesNeeded;
4355 pvStructInfo, pcbStructInfo, bytesNeeded)))
4360 pvStructInfo = *(
BYTE **)pvStructInfo;
4361 blob = pvStructInfo;
4365 &bytesNeeded,
NULL);
4393 *pcbDecoded = 1 + lenBytes + dataLen;
4394 if (dataLen >
sizeof(
int))
4399 else if (!pvStructInfo)
4400 *pcbStructInfo =
sizeof(
int);
4405 if (dataLen &&
pbEncoded[1 + lenBytes] & 0x80)
4412 for (
i = 0;
i < dataLen;
i++)
4417 memcpy(pvStructInfo, &
val,
sizeof(
int));
4431 DWORD bytesNeeded = 0;
4449 *pcbStructInfo = bytesNeeded;
4451 pvStructInfo, pcbStructInfo, bytesNeeded)))
4454 pvStructInfo = *(
BYTE **)pvStructInfo;
4457 &bytesNeeded,
NULL);
4477 DWORD bytesNeeded, dataLen;
4485 *pcbDecoded = 1 + lenBytes + dataLen;
4487 *pcbStructInfo = bytesNeeded;
4488 else if (*pcbStructInfo < bytesNeeded)
4490 *pcbStructInfo = bytesNeeded;
4498 *pcbStructInfo = bytesNeeded;
4499 blob->cbData = dataLen;
4505 for (
i = 0;
i <
blob->cbData;
i++)
4524 DWORD bytesNeeded = 0;
4537 *pcbStructInfo = bytesNeeded;
4539 pvStructInfo, pcbStructInfo, bytesNeeded)))
4544 pvStructInfo = *(
BYTE **)pvStructInfo;
4545 blob = pvStructInfo;
4546 blob->pbData = (
BYTE *)pvStructInfo +
4550 &bytesNeeded,
NULL);
4573 DWORD bytesNeeded, dataLen;
4580 *pcbDecoded = 1 + lenBytes + dataLen;
4583 *pcbStructInfo = bytesNeeded;
4584 else if (*pcbStructInfo < bytesNeeded)
4586 *pcbStructInfo = bytesNeeded;
4594 *pcbStructInfo = bytesNeeded;
4595 blob->cbData = dataLen;
4607 for (
i = 0;
i <
blob->cbData;
i++)
4632 DWORD bytesNeeded = 0;
4638 *pcbStructInfo = bytesNeeded;
4640 pvStructInfo, pcbStructInfo, bytesNeeded)))
4645 pvStructInfo = *(
BYTE **)pvStructInfo;
4646 blob = pvStructInfo;
4647 blob->pbData = (
BYTE *)pvStructInfo +
4651 &bytesNeeded,
NULL);
4674 *pcbStructInfo =
sizeof(
int);
4681 unsigned int val = 0,
i;
4700 if (
pbEncoded[1] >
sizeof(
unsigned int) + 1)
4711 pvStructInfo, pcbStructInfo,
sizeof(
unsigned int))))
4714 pvStructInfo = *(
BYTE **)pvStructInfo;
4715 memcpy(pvStructInfo, &
val,
sizeof(
unsigned int));
4737#define CRYPT_TIME_GET_DIGITS(pbEncoded, len, numDigits, word) \
4742 for (i = 0; (len) > 0 && i < (numDigits); i++, (len)--) \
4744 if (!isdigit(*(pbEncoded))) \
4746 SetLastError(CRYPT_E_ASN1_CORRUPT); \
4752 (word) += *(pbEncoded)++ - '0'; \
4764 WORD hours, minutes = 0;
4769 if (
ret && hours >= 24)
4777 if (
ret && minutes >= 60)
4787 sysTime->
wHour += hours;
4792 if (hours > sysTime->
wHour)
4795 sysTime->
wHour = 24 - (hours - sysTime->
wHour);
4798 sysTime->
wHour -= hours;
4799 if (minutes > sysTime->
wMinute)
4812#define MIN_ENCODED_TIME_LENGTH 10
4840 *pcbDecoded = 2 +
len;
4843 if (sysTime.
wYear >= 50)
4844 sysTime.
wYear += 1900;
4846 sysTime.
wYear += 2000;
4888 DWORD bytesNeeded = 0;
4895 *pcbStructInfo = bytesNeeded;
4897 pDecodePara, pvStructInfo, pcbStructInfo, bytesNeeded)))
4900 pvStructInfo = *(
BYTE **)pvStructInfo;
4903 &bytesNeeded,
NULL);
4944 *pcbDecoded = 2 +
len;
5002 pcbStructInfo, pcbDecoded);
5019 DWORD bytesNeeded = 0;
5026 *pcbStructInfo = bytesNeeded;
5028 pvStructInfo, pcbStructInfo, bytesNeeded)))
5031 pvStructInfo = *(
BYTE **)pvStructInfo;
5034 &bytesNeeded,
NULL);
5059 DWORD bytesNeeded, dataLen, remainingLen, cValue;
5070 remainingLen = dataLen;
5071 while (
ret && remainingLen)
5080 remainingLen -= 1 + nextLenBytes + nextLen;
5081 ptr += 1 + nextLenBytes + nextLen;
5084 bytesNeeded += 1 + nextLenBytes + nextLen;
5095 *pcbStructInfo = bytesNeeded;
5097 pvStructInfo, pcbStructInfo, bytesNeeded)))
5100 pvStructInfo = *(
BYTE **)pvStructInfo;
5108 remainingLen = dataLen;
5110 while (
ret && remainingLen)
5128 nextPtr += 1 + nextLenBytes + nextLen;
5130 remainingLen -= 1 + nextLenBytes + nextLen;
5131 ptr += 1 + nextLenBytes + nextLen;
5164 DWORD bytesNeeded = 0, dataLen;
5181 pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
5189 *pcbDecoded = 1 + lenBytes + dataLen;
5191 *pcbStructInfo = bytesNeeded;
5192 else if (*pcbStructInfo < bytesNeeded)
5194 *pcbStructInfo = bytesNeeded;
5202 *pcbStructInfo = bytesNeeded;
5207 pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
5231 DistPointName.u.FullName.rgAltEntry), 0 },
5244 pcbDecoded,
point ?
point->DistPointName.u.FullName.rgAltEntry :
NULL);
5255 pDecodePara, pvStructInfo, *pcbStructInfo);
5270 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
5288 pDecodePara, pvStructInfo, *pcbStructInfo);
5302 dwFlags, pDecodePara, pvStructInfo, pcbStructInfo,
NULL);
5320 pDecodePara, pvStructInfo, *pcbStructInfo);
5329 DistPointName.u.FullName.rgAltEntry), 0 },
5339 OnlySomeReasonFlags.pbData), 0 },
5365 pvStructInfo, *pcbStructInfo, pcbDecoded);
5383 *pcbStructInfo = bytesNeeded;
5384 else if (*pcbStructInfo < bytesNeeded)
5386 *pcbStructInfo = bytesNeeded;
5395 *pcbStructInfo = bytesNeeded;
5425 pvStructInfo, *pcbStructInfo, pcbDecoded);
5432 TRACE(
"%d\n", *pcbDecoded);
5433 if (*pcbDecoded < cbEncoded)
5455 pvStructInfo, *pcbStructInfo, pcbDecoded);
5458 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5475 pvStructInfo, *pcbStructInfo, pcbDecoded);
5478 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5489 pDecodePara, pvStructInfo, *pcbStructInfo);
5536 pvStructInfo, *pcbStructInfo, pcbDecoded);
5571 HashEncryptionAlgorithm.pszObjId), 0 },
5583 pvStructInfo, *pcbStructInfo);
5598 pDecodePara, pvStructInfo, *pcbStructInfo);
5604 if (
ret && pvStructInfo)
5607 pcbStructInfo, *pcbStructInfo);
5613 pvStructInfo = *(
BYTE **)pvStructInfo;
5614 info = pvStructInfo;
5619 pcbStructInfo,
NULL);
5647 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
5650 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5667 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
5670 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5684 id ? &
id->u.IssuerSerialNumber :
NULL, pcbStructInfo, pcbDecoded);
5690 *pcbStructInfo =
sizeof(
CERT_ID) + *pcbStructInfo -
5693 *pcbStructInfo =
sizeof(
CERT_ID);
5699 id ? &
id->u.KeyId :
NULL, pcbStructInfo, pcbDecoded);
5705 *pcbStructInfo =
sizeof(
CERT_ID) + *pcbStructInfo -
5708 *pcbStructInfo =
sizeof(
CERT_ID);
5740 HashEncryptionAlgorithm.pszObjId), 0 },
5752 pvStructInfo, *pcbStructInfo);
5756 pcbDecoded,
info ?
info->SignerId.u.KeyId.pbData :
NULL);
5767 pDecodePara, pvStructInfo, *pcbStructInfo);
5773 if (
ret && pvStructInfo)
5776 pcbStructInfo, *pcbStructInfo);
5782 pvStructInfo = *(
BYTE **)pvStructInfo;
5783 info = pvStructInfo;
5788 pcbStructInfo,
NULL);
5815 pvStructInfo, *pcbStructInfo, pcbDecoded);
5818 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5852 pDecodePara, signedInfo, pcbSignedInfo);
5873 RecipientId.u.IssuerSerialNumber.Issuer.pbData), 0 },
5878 KeyEncryptionAlgorithm.pszObjId), 0 },
5885 pvStructInfo, *pcbStructInfo, pcbDecoded);
5889 pcbDecoded,
info ?
info->RecipientId.u.IssuerSerialNumber.Issuer.pbData :
5908 RecipientId.u.IssuerSerialNumber.Issuer.pbData) };
5911 pvStructInfo, *pcbStructInfo, pcbDecoded);
5914 dwFlags,
NULL, pvStructInfo, pcbStructInfo, pcbDecoded);
5934 contentEncryptionAlgorithm.pszObjId), 0 },
5942 pvStructInfo, *pcbStructInfo, pcbDecoded);
5970 pDecodePara, envelopedData, pcbEnvelopedData);
5983 DWORD bytesNeeded = 0;
5993 *pcbStructInfo = bytesNeeded;
5999 pvStructInfo = *(
BYTE **)pvStructInfo;
6001 info = pvStructInfo;
6004 pvStructInfo, &bytesNeeded,
NULL);
6061 switch (
LOWORD(lpszStructType))
6280 DWORD *pcbStructInfo)
6294 TRACE_(crypt)(
"(0x%08x, %s, %p, %d, 0x%08x, %p, %p, %p)\n",
6296 cbEncoded,
dwFlags, pDecodePara, pvStructInfo, pcbStructInfo);
6298 if (!pvStructInfo && !pcbStructInfo)
6322 TRACE_(crypt)(
"OID %s not found or unimplemented, looking for DLL\n",
6329 cbEncoded,
dwFlags, pDecodePara, pvStructInfo, pcbStructInfo);
6338 if (pCryptDecodeObject)
6345 pvStructInfo, pcbStructInfo, *pcbStructInfo)))
6349 *(
BYTE **)pvStructInfo, pcbStructInfo);
6369 TRACE_(crypt)(
"(%p)\n", pPFX);
6387 if (pPFX->
cbData < 1 + lenLen + 3)
6390 pPFX->
pbData[1 + lenLen + 1] != 1 ||
6391 pPFX->
pbData[1 + lenLen + 2] != 3)
6403 FIXME_(crypt)(
"(%p, %p, %08x): stub\n", pPFX, szPassword,
dwFlags);
6410 FIXME_(crypt)(
"(%p, %p, %08x): stub\n", pPFX, szPassword,
dwFlags);
int strcmp(const char *String1, const char *String2)
ACPI_SIZE strlen(const char *String)
static BYTE decode(char c)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
_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)
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_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 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)
BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags)
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_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_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_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_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 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 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)
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 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_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)
HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags)
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_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_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 CRYPT_AsnDecodeCopyBytes(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 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)
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)
static const WCHAR Signature[]
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
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
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 * u
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
#define sprintf(buf, format,...)
static const struct encodedExtensions exts[]
static LPCSTR DWORD void BYTE * pbEncoded
static APTTYPEQUALIFIER * qualifier
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM ULONG int * pcItems
#define STATUS_ACCESS_VIOLATION
#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 modulus
DWORD dwPathLenConstraint
CRYPT_INTEGER_BLOB SerialNumber
CRYPT_DER_BLOB ToBeSigned
PCRYPT_SMIME_CAPABILITY rgCapability
#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
#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 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
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define CERT_RDN_VISIBLE_STRING
#define CRL_DIST_POINT_NO_NAME
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
_In_ DWORD dwCertEncodingType
#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
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_updates_bytes_to_ pdwDataLen BYTE * pbData
#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