44#define hton16(x) RtlUshortByteSwap(x)
45#define n16toh(x) RtlUshortByteSwap(x)
49#define ASN_BOOL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x01)
50#define ASN_BITSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)
51#define ASN_BMPSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x1e)
55 DWORD bytesNeeded, significantBytes = 0;
64 temp <<= 8, significantBytes--)
66 bytesNeeded = significantBytes + 1;
70 *pcbEncoded = bytesNeeded;
73 if (*pcbEncoded < bytesNeeded)
84 *pbEncoded++ = significantBytes | 0x80;
85 for (
i = 0;
i < significantBytes;
i++)
87 *(pbEncoded + significantBytes -
i - 1) = (
BYTE)(
len & 0xff);
91 *pcbEncoded = bytesNeeded;
96 LPCSTR lpszStructType,
const void *pvStructInfo,
BYTE *pbEncoded,
101 DWORD bytesNeeded, lenBytes;
103 TRACE(
"(%ld, %p), %p, %ld\n",
blob->cbData,
blob->pbData, pbEncoded,
107 bytesNeeded = 1 + lenBytes +
blob->cbData;
109 *pcbEncoded = bytesNeeded;
110 else if (*pcbEncoded < bytesNeeded)
112 *pcbEncoded = bytesNeeded;
120 pbEncoded += lenBytes;
129 LPCSTR lpszStructType,
const void *pvStructInfo,
BYTE *pbEncoded,
134 TRACE(
"(0x%08lx, %s, %p, %p, %p)\n", dwCertEncodingType,
135 debugstr_a(lpszStructType), pvStructInfo, pbEncoded,
141 DWORD bytesNeeded, lenBytes;
143 switch (
link->dwLinkChoice)
147 DWORD fileNameLen, fileNameLenBytes;
150 fileNameLen =
link->pwszFile ?
155 bytesNeeded = 2 + lenBytes + fileNameLenBytes + fileNameLen;
158 *pcbEncoded = bytesNeeded;
161 else if (*pcbEncoded < bytesNeeded)
164 *pcbEncoded = bytesNeeded;
168 *pcbEncoded = bytesNeeded;
172 pbEncoded += lenBytes;
175 pbEncoded += fileNameLenBytes;
179 pbEncoded +=
sizeof(
WCHAR);
187 DWORD classIdLenBytes, dataLenBytes, dataLen;
194 dataLen = 2 + classIdLenBytes + classId.
cbData +
195 dataLenBytes +
link->Moniker.SerializedData.cbData;
197 bytesNeeded = 1 + dataLen + lenBytes;
200 *pcbEncoded = bytesNeeded;
203 else if (*pcbEncoded < bytesNeeded)
206 *pcbEncoded = bytesNeeded;
212 *pcbEncoded = bytesNeeded;
215 pbEncoded += lenBytes;
220 size = 1 + dataLenBytes +
link->Moniker.SerializedData.cbData;
222 &
link->Moniker.SerializedData, pbEncoded, &
size);
248 bytesNeeded = 1 + lenBytes + urlLen;
250 *pcbEncoded = bytesNeeded;
251 else if (*pcbEncoded < bytesNeeded)
254 *pcbEncoded = bytesNeeded;
259 *pcbEncoded = bytesNeeded;
262 pbEncoded += lenBytes;
299 TRACE(
"%p, %ld, %p, %ld\n",
items, cItem, pbEncoded, *pcbEncoded);
306 *pcbEncoded =
items[
i].size;
311 DWORD lenBytes, bytesNeeded;
314 bytesNeeded = 1 + lenBytes + dataLen;
316 *pcbEncoded = bytesNeeded;
317 else if (*pcbEncoded < bytesNeeded)
319 *pcbEncoded = bytesNeeded;
325 *pcbEncoded = bytesNeeded;
328 pbEncoded += lenBytes;
329 for (
i = 0;
ret &&
i < cItem;
i++)
335 *pcbEncoded =
items[
i].size;
336 pbEncoded +=
items[
i].size;
345 LPCSTR lpszStructType,
const void *pvStructInfo,
BYTE *pbEncoded,
353 DWORD bytesNeeded, lenBytes, dataBytes;
357 if (!
blob->cUnusedBits)
359 dataBytes =
blob->cbData;
362 else if (
blob->cbData * 8 >
blob->cUnusedBits)
364 dataBytes = (
blob->cbData * 8 -
blob->cUnusedBits) / 8 + 1;
365 unusedBits =
blob->cUnusedBits >= 8 ?
blob->cUnusedBits / 8 :
374 bytesNeeded = 1 + lenBytes + dataBytes + 1;
377 *pcbEncoded = bytesNeeded;
380 else if (*pcbEncoded < bytesNeeded)
382 *pcbEncoded = bytesNeeded;
388 *pcbEncoded = bytesNeeded;
391 pbEncoded += lenBytes;
392 *pbEncoded++ = unusedBits;
399 memcpy(pbEncoded,
blob->pbData, dataBytes - 1);
400 pbEncoded += dataBytes - 1;
402 *pbEncoded = *(
blob->pbData + dataBytes - 1) &
mask;
422 LPCSTR lpszStructType,
const void *pvStructInfo,
BYTE *pbEncoded,
429 if ((
ret =
item->encodeFunc(dwCertEncodingType, lpszStructType,
432 DWORD dataLen, bytesNeeded;
435 bytesNeeded = 1 + dataLen +
len;
437 *pcbEncoded = bytesNeeded;
438 else if (*pcbEncoded < bytesNeeded)
440 *pcbEncoded = bytesNeeded;
446 *pcbEncoded = bytesNeeded;
449 pbEncoded += dataLen;
450 ret =
item->encodeFunc(dwCertEncodingType, lpszStructType,
451 item->pvStructInfo, pbEncoded, &
len);
475 TRACE(
"(0x%08lx, %s, %p, %p, %p)\n", dwCertEncodingType,
490 items[cItem].pvStructInfo = &imageData->
Flags;
494 if (imageData->
pFile)
496 items[cItem].pvStructInfo = &constructed;
502 pbEncoded, pcbEncoded);
518 DWORD bytesNeeded = 0, lenBytes;
530 if (
sscanf(pszObjId,
"%d.%d%n", &val1, &val2, &firstPos) != 2)
536 firstByte = val1 * 40 + val2;
537 ptr = pszObjId + firstPos;
550 if (val1 >= 0x10000000)
552 else if (val1 >= 0x200000)
554 else if (val1 >= 0x4000)
556 else if (val1 >= 0x80)
574 bytesNeeded += 1 + lenBytes;
577 if (*pcbEncoded < bytesNeeded)
586 pbEncoded += lenBytes;
592 *pbEncoded++ = firstByte;
593 ptr = pszObjId + firstPos;
598 unsigned char outBytes[5];
601 if (
val >= 0x10000000)
603 else if (
val >= 0x200000)
605 else if (
val >= 0x4000)
607 else if (
val >= 0x80)
611 for (
i = numBytes;
i > 0;
i--)
613 outBytes[
i - 1] =
val & 0x7f;
616 for (
i = 0;
i < numBytes - 1;
i++)
617 *pbEncoded++ = outBytes[
i] | 0x80;
618 *pbEncoded++ = outBytes[
i];
627 *pcbEncoded = bytesNeeded;
639 *pcbEncoded =
blob->cbData;
640 else if (*pcbEncoded < blob->
cbData)
642 *pcbEncoded =
blob->cbData;
650 *pcbEncoded =
blob->cbData;
674 items[1].pvStructInfo = &nullBlob;
678 pbEncoded, pcbEncoded);
693 pbEncoded, pcbEncoded);
703 LPCSTR lpszStructType,
const void *pvStructInfo,
BYTE *pbEncoded,
706 const struct SPCDigest *digest = pvStructInfo;
713 pbEncoded, pcbEncoded);
722 TRACE(
"(0x%08lx, %s, %p, %p, %p)\n", dwCertEncodingType,
734 pbEncoded, pcbEncoded);
750 DWORD bytesNeeded, lenBytes, strLen;
757 bytesNeeded = 1 + lenBytes + strLen * 2;
759 *pcbEncoded = bytesNeeded;
760 else if (*pcbEncoded < bytesNeeded)
762 *pcbEncoded = bytesNeeded;
770 *pcbEncoded = bytesNeeded;
773 pbEncoded += lenBytes;
774 for (
i = 0;
i < strLen;
i++)
776 *pbEncoded++ = (
str[
i] & 0xff00) >> 8;
777 *pbEncoded++ =
str[
i] & 0x00ff;
795 LPCSTR lpszStructType,
const void *pvStructInfo,
BYTE *pbEncoded,
801 ret =
item->encodeFunc(dwCertEncodingType, lpszStructType,
802 item->pvStructInfo, pbEncoded, pcbEncoded);
803 if (
ret && pbEncoded)
804 *pbEncoded =
item->tag;
814 TRACE(
"(0x%08lx, %s, %p, %p, %p)\n", dwCertEncodingType,
821 if (
info->pMoreInfo &&
826 else if (
info->pPublisherInfo &&
836 DWORD cItem = 0, cConstructed = 0;
838 if (
info->pwszProgramName)
843 constructed[cConstructed].
tag = 0;
846 items[cItem].pvStructInfo = &constructed[cConstructed];
853 constructed[cConstructed].
tag = 1;
856 items[cItem].pvStructInfo = &constructed[cConstructed];
861 if (
info->pPublisherInfo)
863 constructed[cConstructed].
tag = 2;
866 items[cItem].pvStructInfo = &constructed[cConstructed];
872 items, cItem, pbEncoded, pcbEncoded);
891 DWORD significantBytes, lenBytes, bytesNeeded;
896 significantBytes =
blob->cbData;
897 if (significantBytes)
899 if (
blob->pbData[significantBytes - 1] & 0x80)
902 for (; significantBytes > 0 &&
903 blob->pbData[significantBytes - 1] == 0xff; significantBytes--)
905 if (
blob->pbData[significantBytes - 1] < 0x80)
914 for (; significantBytes > 0 &&
915 !
blob->pbData[significantBytes - 1]; significantBytes--)
917 if (significantBytes == 0)
918 significantBytes = 1;
919 if (
blob->pbData[significantBytes - 1] > 0x7f)
930 bytesNeeded = 1 + lenBytes + significantBytes;
935 *pcbEncoded = bytesNeeded;
938 else if (*pcbEncoded < bytesNeeded)
940 *pcbEncoded = bytesNeeded;
946 *pcbEncoded = bytesNeeded;
951 pbEncoded += lenBytes;
952 *pbEncoded++ = padByte;
957 pbEncoded += lenBytes;
959 for (; significantBytes > 0; significantBytes--)
960 *(pbEncoded++) =
blob->pbData[significantBytes - 1];
980 &
blob, pbEncoded, pcbEncoded);
989 TRACE(
"(0x%08lx, %s, %p, %p, %p)\n", dwCertEncodingType,
1001 pbEncoded, pcbEncoded);
1017 TRACE(
"(0x%08lx, %s, %p, %p, %p)\n", dwCertEncodingType,
1030 pbEncoded, pcbEncoded);
1053 else if (*pcbEncoded < 3)
1064 *pbEncoded++ =
val ? 0xff : 0;
1077 TRACE(
"(0x%08lx, %s, %p, %p, %p)\n", dwCertEncodingType,
1089 pbEncoded, pcbEncoded);
1100#define GET_LEN_BYTES(b) ((b) <= 0x7f ? 1 : 1 + ((b) & 0x7f))
1116 else if (pbEncoded[1] <= 0x7f)
1118 if (pbEncoded[1] + 1 > cbEncoded)
1125 *
len = pbEncoded[1];
1129 else if (pbEncoded[1] == 0x80)
1131 FIXME(
"unimplemented for indefinite-length encoding\n");
1139 if (lenLen >
sizeof(
DWORD) + 1)
1144 else if (lenLen + 2 > cbEncoded)
1157 out |= *pbEncoded++;
1159 if (
out + lenLen + 1 > cbEncoded)
1179 DWORD bytesNeeded, dataLen;
1181 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1201 *pcbStructInfo = bytesNeeded;
1202 else if (*pcbStructInfo < bytesNeeded)
1205 *pcbStructInfo = bytesNeeded;
1214 blob->cbData = dataLen;
1216 blob->pbData = (
BYTE *)pbEncoded + 1 + lenBytes;
1221 memcpy(
blob->pbData, pbEncoded + 1 + lenBytes,
1236 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1244 switch (pbEncoded[0])
1247 bytesNeeded += (dataLen + 1) *
sizeof(
WCHAR);
1249 *pcbStructInfo = bytesNeeded;
1250 else if (*pcbStructInfo < bytesNeeded)
1252 *pcbStructInfo = bytesNeeded;
1262 for (
i = 0;
i < dataLen;
i++)
1264 *(pbEncoded + 1 + lenBytes +
i);
1265 link->pwszUrl[
i] =
'\0';
1275 pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
1292 pbEncoded + 3 + lenBytes + classId.
cbData,
1293 cbEncoded - 3 - lenBytes - classId.
cbData,
1296 bytesNeeded +=
data.cbData;
1298 *pcbStructInfo = bytesNeeded;
1299 else if (*pcbStructInfo < bytesNeeded)
1301 *pcbStructInfo = bytesNeeded;
1313 link->Moniker.SerializedData.pbData =
1319 link->Moniker.SerializedData.cbData =
data.cbData;
1327 if (dataLen && pbEncoded[1 + lenBytes] !=
ASN_CONTEXT)
1334 bytesNeeded += realDataLen +
sizeof(
WCHAR);
1336 *pcbStructInfo = bytesNeeded;
1337 else if (*pcbStructInfo < bytesNeeded)
1339 *pcbStructInfo = bytesNeeded;
1347 const BYTE *
ptr = pbEncoded + 2 + lenBytes + realLenBytes;
1350 for (
i = 0;
i < dataLen /
sizeof(
WCHAR);
i++)
1353 link->pwszFile[realDataLen /
sizeof(
WCHAR)] =
'\0';
1359 bytesNeeded +=
sizeof(
WCHAR);
1361 *pcbStructInfo = bytesNeeded;
1362 else if (*pcbStructInfo < bytesNeeded)
1364 *pcbStructInfo = bytesNeeded;
1373 link->pwszFile[0] =
'\0';
1392 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1400 lpszStructType, pbEncoded, cbEncoded,
dwFlags,
NULL, &bytesNeeded);
1404 *pcbStructInfo = bytesNeeded;
1405 else if (*pcbStructInfo < bytesNeeded)
1407 *pcbStructInfo = bytesNeeded;
1471#define ALIGN_DWORD_PTR(x) (((x) + sizeof(DWORD_PTR) - 1) & ~(sizeof(DWORD_PTR) - 1))
1473#define FINALMEMBERSIZE(s, member) (sizeof(s) - offsetof(s, member))
1474#define MEMBERSIZE(s, member, nextmember) \
1475 (offsetof(s, nextmember) - offsetof(s, member))
1493 TRACE(
"%p, %ld, %p, %ld, %08lx, %p, %p, %p\n",
items, cItem, pbEncoded,
1494 cbEncoded,
dwFlags, pvStructInfo, nextData, cbDecoded);
1498 if (cbEncoded - (
ptr - pbEncoded) != 0)
1509 if (nextData && pvStructInfo &&
items[
i].hasPointer)
1511 TRACE(
"Setting next pointer to %p\n",
1514 items[
i].pointerOffset) = nextData;
1519 TRACE(
"decoding item %ld\n",
i);
1521 TRACE(
"sizing item %ld\n",
i);
1522 ret =
items[
i].decodeFunc(dwCertEncodingType,
1523 NULL,
ptr, 1 + nextItemLenBytes + nextItemLen,
1537 if (nextData &&
items[
i].hasPointer &&
1540 ptr += 1 + nextItemLenBytes + nextItemLen;
1541 decoded += 1 + nextItemLenBytes + nextItemLen;
1542 TRACE(
"item %ld: decoded %ld bytes\n",
i,
1543 1 + nextItemLenBytes + nextItemLen);
1548 TRACE(
"skipping optional item %ld\n",
i);
1554 TRACE(
"item %ld failed: %08lx\n",
i,
1559 TRACE(
"item %ld: decoded %ld bytes\n",
i,
1560 1 + nextItemLenBytes + nextItemLen);
1561 ptr += 1 + nextItemLenBytes + nextItemLen;
1562 decoded += 1 + nextItemLenBytes + nextItemLen;
1568 TRACE(
"skipping optional item %ld\n",
i);
1573 TRACE(
"item %ld: tag %02x doesn't match expected %02x\n",
1582 TRACE(
"missing optional item %ld, skipping\n",
i);
1587 TRACE(
"not enough bytes for item %ld, failing\n",
i);
1593 *cbDecoded = decoded;
1608 void *startingPointer)
1612 TRACE(
"%p, %ld, %p, %ld, %08lx, %p, %ld, %p\n",
items, cItem, pbEncoded,
1613 cbEncoded,
dwFlags, pvStructInfo, *pcbStructInfo, startingPointer);
1622 const BYTE *
ptr = pbEncoded + 1 + lenBytes;
1624 cbEncoded -= 1 + lenBytes;
1625 if (cbEncoded < dataLen)
1627 TRACE(
"dataLen %ld exceeds cbEncoded %ld, failing\n", dataLen,
1635 if (
ret && cbDecoded != dataLen)
1637 TRACE(
"expected %ld decoded, got %ld, failing\n", dataLen,
1644 DWORD i, bytesNeeded = 0, structSize = 0;
1646 for (
i = 0;
i < cItem;
i++)
1648 bytesNeeded +=
items[
i].size;
1649 structSize +=
items[
i].minSize;
1652 *pcbStructInfo = bytesNeeded;
1653 else if (*pcbStructInfo < bytesNeeded)
1656 *pcbStructInfo = bytesNeeded;
1663 *pcbStructInfo = bytesNeeded;
1664 if (startingPointer)
1665 nextData = startingPointer;
1667 nextData = (
BYTE *)pvStructInfo + structSize;
1668 memset(pvStructInfo, 0, structSize);
1670 ptr, cbEncoded,
dwFlags, pvStructInfo, nextData,
1687 void *pvStructInfo,
DWORD *pcbStructInfo)
1691 TRACE(
"(%p, %ld, 0x%08lx, %p, %ld)\n", pbEncoded, cbEncoded,
dwFlags,
1692 pvStructInfo, *pcbStructInfo);
1696 DWORD bytesNeeded, dataLen;
1705 *pcbStructInfo = bytesNeeded;
1706 else if (*pcbStructInfo < bytesNeeded)
1708 *pcbStructInfo = bytesNeeded;
1716 blob = pvStructInfo;
1717 blob->cbData = dataLen - 1;
1718 blob->cUnusedBits = *(pbEncoded + 1 +
1722 blob->pbData = (
BYTE *)pbEncoded + 2 +
1751 void *pvStructInfo,
DWORD *pcbStructInfo)
1784 lpszStructType, pbEncoded + 1 + lenBytes, dataLen,
dwFlags,
1785 *pLink, pcbStructInfo);
1794 void *pvStructInfo,
DWORD *pcbStructInfo)
1798 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1799 pvStructInfo, *pcbStructInfo);
1813 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
1826 void *pvStructInfo,
DWORD *pcbStructInfo)
1831 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1832 pvStructInfo, *pcbStructInfo);
1848 pbEncoded[1 + lenBytes] / 40,
1849 pbEncoded[1 + lenBytes] - (pbEncoded[1 + lenBytes] / 40)
1851 bytesNeeded +=
strlen(firstTwo) + 1;
1852 for (
ptr = pbEncoded + 2 + lenBytes;
ret &&
1853 ptr - pbEncoded - 1 - lenBytes < dataLen; )
1859 while (
ptr - pbEncoded - 1 - lenBytes < dataLen &&
1866 if (
ptr - pbEncoded - 1 - lenBytes >= dataLen ||
1884 *pcbStructInfo = bytesNeeded;
1885 else if (*pcbStructInfo < bytesNeeded)
1887 *pcbStructInfo = bytesNeeded;
1900 pszObjId +=
sprintf(pszObjId,
"%d.%d", pbEncoded[1 + lenBytes] / 40,
1901 pbEncoded[1 + lenBytes] - (pbEncoded[1 + lenBytes] /
1903 for (
ptr = pbEncoded + 2 + lenBytes;
ret &&
1904 ptr - pbEncoded - 1 - lenBytes < dataLen; )
1908 while (
ptr - pbEncoded - 1 - lenBytes < dataLen &&
1920 *pcbStructInfo = bytesNeeded;
1928 void *pvStructInfo,
DWORD *pcbStructInfo)
1932 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1933 pvStructInfo, *pcbStructInfo);
1939 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo);
1947 void *pvStructInfo,
DWORD *pcbStructInfo)
1952 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1953 pvStructInfo, *pcbStructInfo);
1956 bytesNeeded += cbEncoded;
1958 *pcbStructInfo = bytesNeeded;
1959 else if (*pcbStructInfo < bytesNeeded)
1962 *pcbStructInfo = bytesNeeded;
1969 *pcbStructInfo = bytesNeeded;
1970 blob->cbData = cbEncoded;
1984 void *pvStructInfo,
DWORD *pcbStructInfo)
1996 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
1997 pvStructInfo, *pcbStructInfo);
2000 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo,
2006 void *pvStructInfo,
DWORD *pcbStructInfo)
2019 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2020 pvStructInfo, *pcbStructInfo);
2023 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo, algo ? algo->
pszObjId :
NULL);
2024 if (
ret && pvStructInfo)
2034 void *pvStructInfo,
DWORD *pcbStructInfo)
2036 struct SPCDigest *digest = pvStructInfo;
2047 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2048 pvStructInfo, *pcbStructInfo);
2051 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo,
2057 void *pvStructInfo,
DWORD *pcbStructInfo)
2061 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2062 pvStructInfo, *pcbStructInfo);
2078 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
2091 void *pvStructInfo,
DWORD *pcbStructInfo)
2094 DWORD bytesNeeded, dataLen;
2100 bytesNeeded = dataLen + 2 +
sizeof(
LPWSTR);
2102 *pcbStructInfo = bytesNeeded;
2103 else if (*pcbStructInfo < bytesNeeded)
2105 *pcbStructInfo = bytesNeeded;
2114 *pcbStructInfo = bytesNeeded;
2117 for (
i = 0;
i < dataLen / 2;
i++)
2118 str[
i] = (pbEncoded[1 + lenBytes + 2 *
i] << 8) |
2119 pbEncoded[1 + lenBytes + 2 *
i + 1];
2129 void *pvStructInfo,
DWORD *pcbStructInfo)
2134 TRACE(
"(%p, %ld, %08lx, %p, %ld)\n", pbEncoded, cbEncoded,
dwFlags,
2135 pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
2142 pbEncoded + 1 + lenBytes, dataLen,
dwFlags, pvStructInfo,
2150 void *pvStructInfo,
DWORD *pcbStructInfo)
2154 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2155 pvStructInfo, *pcbStructInfo);
2175 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
2189 void *pvStructInfo,
DWORD *pcbStructInfo)
2198 if (dataLen >
sizeof(
int))
2203 else if (!pvStructInfo)
2204 *pcbStructInfo =
sizeof(
int);
2205 else if (*pcbStructInfo <
sizeof(
int))
2207 *pcbStructInfo =
sizeof(
int);
2216 *pcbStructInfo =
sizeof(
int);
2217 if (dataLen && pbEncoded[1 + lenBytes] & 0x80)
2224 for (
i = 0;
i < dataLen;
i++)
2227 val |= pbEncoded[1 + lenBytes +
i];
2229 memcpy(pvStructInfo, &
val,
sizeof(
int));
2237 void *pvStructInfo,
DWORD *pcbStructInfo)
2241 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2242 pvStructInfo, *pcbStructInfo);
2256 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
2269 void *pvStructInfo,
DWORD *pcbStructInfo)
2273 TRACE(
"%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded,
dwFlags,
2274 pvStructInfo, *pcbStructInfo);
2291 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
2304 void *pvStructInfo,
DWORD *pcbStructInfo)
2318 if (pbEncoded[1] > 1)
2325 *pcbStructInfo =
sizeof(
BOOL);
2328 else if (*pcbStructInfo <
sizeof(
BOOL))
2330 *pcbStructInfo =
sizeof(
BOOL);
2336 *pcbStructInfo =
sizeof(
BOOL);
2337 *(
BOOL *)pvStructInfo = pbEncoded[2] != 0;
2346 void *pvStructInfo,
DWORD *pcbStructInfo)
2350 TRACE(
"(%p, %ld, %08lx, %p, %ld)\n", pbEncoded, cbEncoded,
dwFlags,
2351 pvStructInfo, *pcbStructInfo);
2358 fFinancialInfoAvailable, fMeetsCriteria),
FALSE,
FALSE, 0, 0 },
2365 pbEncoded, cbEncoded,
dwFlags, pvStructInfo, pcbStructInfo,
NULL);
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define __EXCEPT_PAGE_FAULT
_ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl sscanf(const char *, const char *,...) __WINE_CRT_SCANF_ATTR(2
_ACRTIMP size_t __cdecl strlen(const char *)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
BOOL WINAPI WVTAsn1SpcFinancialCriteriaInfoEncode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnDecodeAlgorithmId(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeOctets(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
#define MEMBERSIZE(s, member, nextmember)
static BOOL WINAPI CRYPT_AsnEncodeBits(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL CRYPT_GetLen(const BYTE *pbEncoded, DWORD cbEncoded, DWORD *len)
BOOL WINAPI WVTAsn1SpcLinkEncode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnDecodeBool(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeAttributeTypeValue(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_EncodeLen(DWORD len, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnDecodeBMPString(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeInt(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeSPCLinkPointer(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnEncodeSequence(DWORD dwCertEncodingType, struct AsnEncodeSequenceItem items[], DWORD cItem, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnEncodeBool(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnDecodeCopyBytes(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
BOOL WINAPI WVTAsn1SpcIndirectDataContentEncode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnEncodeOctets(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnDecodeOidIgnoreTag(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
BOOL(WINAPI * CryptEncodeObjectFunc)(DWORD, LPCSTR, const void *, BYTE *, DWORD *)
static BOOL WINAPI CRYPT_AsnDecodeProgramName(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnEncodeAlgorithmIdWithNullParams(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnEncodeOid(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
#define FINALMEMBERSIZE(s, member)
BOOL WINAPI WVTAsn1SpcPeImageDataDecode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnEncodeBMPString(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL WINAPI WVTAsn1CatMemberInfoDecode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnEncodeSPCDigest(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnEncodeSwapTag(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnEncodeAttributeTypeValue(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL WINAPI WVTAsn1SpcIndirectDataContentDecode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnDecodeSPCLinkInternal(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
BOOL WINAPI WVTAsn1SpcLinkDecode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
BOOL WINAPI WVTAsn1CatMemberInfoEncode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL CRYPT_AsnDecodeSequence(DWORD dwCertEncodingType, struct AsnDecodeSequenceItem items[], DWORD cItem, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, void *startingPointer)
static BOOL WINAPI CRYPT_AsnDecodeBitsInternal(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL CRYPT_AsnEncodeInteger(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL WINAPI WVTAsn1CatNameValueEncode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL(WINAPI * CryptDecodeObjectFunc)(DWORD, LPCSTR, const BYTE *, DWORD, DWORD, void *, DWORD *)
static BOOL WINAPI CRYPT_AsnEncodeInt(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL WINAPI WVTAsn1SpcFinancialCriteriaInfoDecode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
BOOL WINAPI WVTAsn1CatNameValueDecode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_AsnDecodeSPCDigest(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
static BOOL WINAPI CRYPT_CopyEncodedBlob(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL WINAPI CRYPT_AsnDecodeOid(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
#define ALIGN_DWORD_PTR(x)
BOOL WINAPI WVTAsn1SpcPeImageDataEncode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL CRYPT_AsnDecodeSequenceItems(DWORD dwCertEncodingType, struct AsnDecodeSequenceItem items[], DWORD cItem, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, BYTE *nextData, DWORD *cbDecoded)
static BOOL WINAPI CRYPT_AsnEncodeConstructed(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL WINAPI WVTAsn1SpcSpOpusInfoDecode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo)
BOOL WINAPI WVTAsn1SpcSpOpusInfoEncode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
#define STATUS_ACCESS_VIOLATION
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
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
#define memcpy(s1, s2, n)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
#define offsetof(TYPE, MEMBER)
#define ASN_OBJECTIDENTIFIER
const void * pvStructInfo
CryptEncodeObjectFunc encodeFunc
CryptEncodeObjectExFunc encodeFunc
CryptDecodeObjectFunc decodeFunc
const void * pvStructInfo
CryptEncodeObjectFunc encodeFunc
CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm
CRYPT_OBJID_BLOB Parameters
BOOL fFinancialInfoAvailable
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 _CRYPTOAPI_BLOB CRYPT_DER_BLOB
#define CRYPT_DECODE_NOCOPY_FLAG
#define X509_MULTI_BYTE_INTEGER
struct _CRYPTOAPI_BLOB CRYPT_DATA_BLOB
struct _CRYPT_ALGORITHM_IDENTIFIER CRYPT_ALGORITHM_IDENTIFIER
#define X509_ASN_ENCODING
#define CRYPT_DECODE_ALLOC_FLAG
struct _CRYPT_BIT_BLOB CRYPT_BIT_BLOB
struct _CRYPTOAPI_BLOB CRYPT_OBJID_BLOB
struct _CRYPT_ATTRIBUTE_TYPE_VALUE CRYPT_ATTRIBUTE_TYPE_VALUE
#define CRYPT_E_ASN1_ERROR
#define CRYPT_E_ASN1_CORRUPT
#define CRYPT_E_BAD_ENCODE
#define CRYPT_E_ASN1_LARGE
#define CRYPT_E_INVALID_IA5_STRING
#define CRYPT_E_ASN1_BADTAG
BYTE SPC_UUID[SPC_UUID_LENGTH]
struct SPC_LINK_ SPC_LINK
#define SPC_FILE_LINK_CHOICE
#define SPC_MONIKER_LINK_CHOICE
struct SPC_LINK_ * PSPC_LINK
#define SPC_URL_LINK_CHOICE
_Must_inspect_result_ _In_ ULONG Flags