23#define NONAMELESSUNION
47 DWORD dwCtrlType,
const void *pvCtrlPara);
50 DWORD dwCtrlType,
const void *pvCtrlPara)
52 TRACE(
"(%p, %08x, %d, %p)\n", hCryptMsg,
dwFlags, dwCtrlType, pvCtrlPara);
87 msg->stream_info = *pStreamInfo;
95 msg->get_param = get_param;
153 if (
msg->base.streamed &&
msg->base.stream_info.cbContent == 0xffffffff)
155 static const BYTE headerValue[] = { 0x30,0x80,0x06,0x09,0x2a,0x86,0x48,
156 0x86,0xf7,0x0d,0x01,0x07,0x01,0xa0,0x80,0x24,0x80 };
161 header->cbData =
sizeof(headerValue);
162 memcpy(
header->pbData, headerValue,
sizeof(headerValue));
185 header->cbData -=
msg->base.stream_info.cbContent;
199 else if (
msg->base.streamed)
210 ret =
msg->base.stream_info.pfnStreamOutput(
219 if (
msg->base.stream_info.cbContent == 0xffffffff)
229 ret =
msg->base.stream_info.pfnStreamOutput(
230 msg->base.stream_info.pvArg,
header, headerLen,
237 ret =
msg->base.stream_info.pfnStreamOutput(
245 if (
msg->base.stream_info.cbContent == 0xffffffff)
247 BYTE indefinite_trailer[6] = { 0 };
249 ret =
msg->base.stream_info.pfnStreamOutput(
253 ret =
msg->base.stream_info.pfnStreamOutput(
254 msg->base.stream_info.pvArg, indefinite_trailer,
255 sizeof(indefinite_trailer),
TRUE);
258 ret =
msg->base.stream_info.pfnStreamOutput(
288 &
msg->bare_content_len);
324 if (
msg->base.streamed)
329 char rsa_data[] =
"1.2.840.113549.1.7.1";
331 info.pszObjId = rsa_data;
332 info.Content.cbData =
msg->bare_content_len;
333 info.Content.pbData =
msg->bare_content;
339 if (
msg->base.streamed)
343 msg->bare_content_len);
445 TRACE(
"(%p, %d, %d, %p, %p)\n", hCryptMsg, dwParamType, dwIndex,
451 if (
msg->base.streamed)
461 &
info.Content.cbData);
465 if (
info.Content.pbData)
468 info.Content.pbData, &
info.Content.cbData);
473 info.pszObjId = oid_rsa_hashed;
512 TRACE(
"(%p, %p, %d, %d)\n", hCryptMsg,
pbData, cbData, fFinal);
534 if (
msg->data.pbData)
537 msg->data.cbData += cbData;
566 if (
info->hCryptProv)
567 prov =
info->hCryptProv;
576 dwFlags &= ~CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
585 msg->data.cbData = 0;
687 FIXME(
"CMSG_SIGNER_ENCODE_INFO with CMS fields unsupported\n");
708 out->cbData =
in->cbData;
736 for (
i = 0;
ret &&
i < cBlobs;
i++)
749 for (
i = 0;
i < cBlobs;
i++)
764 in->cValue,
in->rgValue);
776 out->cAttr =
in->cAttr;
806 &
in->pCertInfo->Issuer);
809 &
info->SignerId.u.IssuerSerialNumber.SerialNumber,
810 &
in->pCertInfo->SerialNumber);
812 info->HashEncryptionAlgorithm.pszObjId =
813 in->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId;
816 &
in->pCertInfo->SubjectPublicKeyInfo.Algorithm.Parameters);
825 if (!
in->SignerId.dwIdChoice)
829 &
in->pCertInfo->Issuer);
832 &
info->SignerId.u.IssuerSerialNumber.SerialNumber,
833 &
in->pCertInfo->SerialNumber);
841 &
in->SignerId.u.IssuerSerialNumber.Issuer);
844 &
info->SignerId.u.IssuerSerialNumber.SerialNumber,
845 &
in->SignerId.u.IssuerSerialNumber.SerialNumber);
853 &
in->SignerId.u.KeyId);
855 pEncrAlg =
in->HashEncryptionAlgorithm.
pszObjId ?
856 &
in->HashEncryptionAlgorithm :
857 &
in->pCertInfo->SubjectPublicKeyInfo.Algorithm;
858 info->HashEncryptionAlgorithm.pszObjId = pEncrAlg->
pszObjId;
866 info->HashAlgorithm.pszObjId =
in->HashAlgorithm.pszObjId;
869 &
in->HashAlgorithm.Parameters);
893 for (
i = 0;
i <
info->AuthAttrs.cAttr;
i++)
895 for (
j = 0;
j <
info->AuthAttrs.rgAttr[
i].cValue;
j++)
901 for (
i = 0;
i <
info->UnauthAttrs.cAttr;
i++)
903 for (
j = 0;
j <
info->UnauthAttrs.rgAttr[
i].cValue;
j++)
941 *
flags &= ~CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
1034 CRYPT_ATTRIBUTE messageDigestAttr = { messageDigest, 1, &encodedHash };
1049 NULL, (
LPBYTE)&encodedHash.pbData, &encodedHash.cbData);
1054 &messageDigestAttr);
1074 TRACE(
"(%p)\n", msg_data);
1082 BYTE oid_rsa_data_encoded[] = { 0x06,0x09,0x2a,0x86,0x48,0x86,
1083 0xf7,0x0d,0x01,0x07,0x01 };
1085 oid_rsa_data_encoded };
1123 for (
i = 0;
i <
hash->cbData / 2;
i++)
1125 tmp =
hash->pbData[
hash->cbData -
i - 1];
1127 hash->pbData[
i] = tmp;
1136 TRACE(
"(%p)\n", msg_data);
1202 msg->msg_data.info->rgCertEncoded);
1204 msg->msg_data.info->rgCrlEncoded);
1205 for (
i = 0;
i <
msg->msg_data.info->cSignerInfo;
i++)
1219 switch (dwParamType)
1226 &
info.Content.cbData);
1230 if (
info.Content.pbData)
1233 info.Content.pbData, &
info.Content.cbData);
1238 info.pszObjId = oid_rsa_signed;
1261 info.content.pszObjId = oid_rsa_data;
1264 if (
msg->data.cbData)
1270 &
info.content.Content.pbData, &
info.content.Content.cbData);
1275 info.content.Content.cbData = 0;
1276 info.content.Content.pbData =
NULL;
1282 info.content.pszObjId =
msg->innerOID;
1283 info.content.Content.cbData =
msg->data.cbData;
1284 info.content.Content.pbData =
msg->data.pbData;
1296 if (dwIndex >=
msg->msg_data.cSignerHandle)
1300 msg->msg_data.signerHandles[dwIndex].contentHash,
HP_HASHVAL,
1304 if (dwIndex >=
msg->msg_data.info->cSignerInfo)
1313 sizeof(
msg->msg_data.info->version));
1333 if (
msg->base.streamed)
1334 FIXME(
"streamed partial stub\n");
1346 if (
msg->data.pbData)
1349 msg->data.cbData = cbData;
1365 const void *pvMsgEncodeInfo,
LPCSTR pszInnerContentObjID,
1379 info->cAttrCertEncoded)
1381 FIXME(
"CMSG_SIGNED_ENCODE_INFO with CMS fields unsupported\n");
1384 for (
i = 0;
i <
info->cSigners;
i++)
1395 if (pszInnerContentObjID)
1399 strcpy(
msg->innerOID, pszInnerContentObjID);
1405 msg->data.cbData = 0;
1411 if (
msg->msg_data.info)
1422 msg->msg_data.info->rgSignerInfo =
1424 if (
msg->msg_data.info->rgSignerInfo)
1426 msg->msg_data.info->cSignerInfo =
info->cSigners;
1427 memset(
msg->msg_data.info->rgSignerInfo, 0,
1428 msg->msg_data.info->cSignerInfo *
1432 if (!
msg->msg_data.info->signerKeySpec)
1434 for (
i = 0;
ret &&
i <
msg->msg_data.info->cSignerInfo;
i++)
1436 if (
info->rgSigners[
i].SignerId.dwIdChoice ==
1440 &
msg->msg_data.info->rgSignerInfo[
i],
1441 &
info->rgSigners[
i]);
1450 msg->msg_data.info->signerKeySpec[
i] =
1451 info->rgSigners[
i].dwKeySpec;
1459 msg->msg_data.info->cSignerInfo = 0;
1460 msg->msg_data.signerHandles =
NULL;
1461 msg->msg_data.cSignerHandle = 0;
1466 &
msg->msg_data.info->rgCertEncoded,
info->cCertEncoded,
1467 info->rgCertEncoded);
1470 &
msg->msg_data.info->rgCrlEncoded,
info->cCrlEncoded,
1471 info->rgCrlEncoded);
1527 out->cbData =
in->cbData;
1528 out->cUnusedBits =
in->cUnusedBits;
1552 info->ContentEncryptionAlgorithm.pszObjId, 0, (
void **)&genKeyFunc, &hFunc);
1560 &
info->hContentEncryptKey);
1636 info->rgCmsRecipients[
i].u.pKeyTrans;
1640 memset(&encryptInfo, 0,
sizeof(encryptInfo));
1641 encryptInfo.
cbSize =
sizeof(encryptInfo);
1655 ret = exportKeyFunc(
info, encodeInfo, &encryptInfo, 0,
NULL);
1687 info->hCryptProv = prov;
1689 &
in->ContentEncryptionAlgorithm);
1690 info->pvEncryptionAuxInfo =
in->pvEncryptionAuxInfo;
1691 info->cRecipients =
in->cRecipients;
1696 if (
info->rgCmsRecipients)
1700 for (
i = 0;
ret &&
i <
in->cRecipients; ++
i)
1705 info->rgCmsRecipients[
i].dwRecipientChoice =
1708 info->rgCmsRecipients[
i].u.pKeyTrans = encodeInfo;
1711 encodeInfo->
cbSize =
sizeof(*encodeInfo);
1714 &
cert->SubjectPublicKeyInfo.Algorithm);
1720 &
cert->SubjectPublicKeyInfo.PublicKey);
1728 &
cert->SerialNumber);
1746 if (
info->rgCmsRecipients)
1750 for (
i = 0;
i <
info->cRecipients; ++
i)
1753 info->rgCmsRecipients[
i].u.pKeyTrans;
1779 &
info->RecipientId.u.IssuerSerialNumber.SerialNumber,
1780 &
cert->SerialNumber);
1783 &
cert->SubjectPublicKeyInfo.Algorithm);
1784 info->EncryptedKey.cbData =
key->cbData;
1785 info->EncryptedKey.pbData =
key->pbData;
1807 if (
msg->recipientInfo)
1811 for (
i = 0;
i <
msg->cRecipientInfo; ++
i)
1824 switch (dwParamType)
1827 if (
msg->base.streamed)
1834 msg->recipientInfo, { oid_rsa_data, {
1836 {
msg->algo.Parameters.cbData,
msg->algo.Parameters.pbData }
1838 {
msg->data.cbData,
msg->data.pbData }
1851 &
info.Content.cbData);
1855 if (
info.Content.pbData)
1858 info.Content.pbData, &
info.Content.cbData);
1863 info.pszObjId = oid_rsa_enveloped;
1888 else if (
msg->base.streamed)
1890 FIXME(
"streamed stub\n");
1907 DWORD dataLen = cbData;
1909 msg->data.cbData = cbData;
1911 if (
msg->data.pbData)
1915 &dataLen,
msg->data.cbData);
1916 msg->data.cbData = dataLen;
1917 if (dataLen > cbData)
1921 if (
msg->data.pbData)
1925 msg->data.pbData, &dataLen,
msg->data.cbData);
1937 msg->data.cbData = 0;
1950 const void *pvMsgEncodeInfo,
LPCSTR pszInnerContentObjID,
1965 FIXME(
"CMS fields unsupported\n");
1971 if (
info->cRecipients && !
info->rgpRecipientCert)
1976 if (
info->hCryptProv)
1977 prov =
info->hCryptProv;
1981 dwFlags &= ~CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
1995 &
info->ContentEncryptionAlgorithm);
1997 msg->data.cbData = 0;
1999 msg->cRecipientInfo =
info->cRecipients;
2002 if (!
msg->recipientInfo)
2004 memset(&encryptInfo, 0,
sizeof(encryptInfo));
2015 for (
i = 0;
ret &&
i <
msg->cRecipientInfo; ++
i)
2020 info->rgpRecipientCert[
i], &encryptedKey);
2035 DWORD dwMsgType,
const void *pvMsgEncodeInfo,
LPSTR pszInnerContentObjID,
2040 TRACE(
"(%08x, %08x, %08x, %p, %s, %p)\n", dwMsgEncodingType,
dwFlags,
2041 dwMsgType, pvMsgEncodeInfo,
debugstr_a(pszInnerContentObjID), pStreamInfo);
2052 pszInnerContentObjID, pStreamInfo);
2056 pszInnerContentObjID, pStreamInfo);
2060 pszInnerContentObjID, pStreamInfo);
2064 pszInnerContentObjID, pStreamInfo);
2111 if (
msg->u.enveloped_data.crypt_prov)
2117 if (
msg->u.signed_data.info)
2138 blob->cbData + cbData);
2144 blob->cbData += cbData;
2178 len +=
id->Parameters.cbData;
2188 if (
id->Parameters.cbData ==
sizeof(nullParams) &&
2189 !
memcmp(
id->Parameters.pbData, nullParams,
sizeof(nullParams)))
2191 copy->Parameters.cbData = 0;
2192 len -=
sizeof(nullParams);
2195 copy->Parameters.cbData =
id->Parameters.cbData;
2196 if (
copy->Parameters.cbData)
2198 id->Parameters.cbData);
2208 id->Parameters.pbData = (
BYTE *)
id->pszObjId +
strlen(
id->pszObjId) + 1;
2259 msg->u.enveloped_data.data = envelopedData;
2274 msg->u.signed_data.info = signedInfo;
2354 if (!
msg->crypt_prov)
2357 if (
msg->crypt_prov)
2358 msg->base.open_flags &= ~CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
2393 &
msg->u.enveloped_data.data->encryptedContentInfo.encryptedContent;
2405 for (
i = 0;
ret &&
i <
msg->u.signed_data.info->cSignerInfo;
i++)
2407 &
msg->crypt_prov, &
msg->base.open_flags);
2420 content = &
msg->u.signed_data.info->content.Content;
2427 !
strcmp(
msg->u.signed_data.info->content.pszObjId,
2477 TRACE(
"(%p, %p, %d, %d)\n", hCryptMsg,
pbData, cbData, fFinal);
2481 else if (
msg->base.streamed)
2483 FIXME(
"(%p, %p, %d, %d): streamed update stub\n", hCryptMsg,
pbData,
2485 switch (
msg->base.state)
2525 switch (
msg->base.state)
2543 if (
ret && fFinal &&
2559 switch (dwParamType)
2605 out->cbData =
in->cbData;
2608 out->pbData = *nextData;
2610 *nextData +=
in->cbData;
2629 out->cAttr =
in->cAttr;
2637 for (
i = 0;
i <
in->cAttr;
i++)
2639 if (
in->rgAttr[
i].pszObjId)
2641 out->rgAttr[
i].pszObjId = (
LPSTR)*nextData;
2643 *nextData +=
strlen(
in->rgAttr[
i].pszObjId) + 1;
2645 if (
in->rgAttr[
i].cValue)
2649 out->rgAttr[
i].cValue =
in->rgAttr[
i].cValue;
2653 for (
j = 0;
j <
in->rgAttr[
i].cValue;
j++)
2655 &
in->rgAttr[
i].rgValue[
j], nextData);
2665 for (
i = 0;
i <
attr->cAttr;
i++)
2667 if (
attr->rgAttr[
i].pszObjId)
2672 for (
j = 0;
j <
attr->rgAttr[
i].cValue;
j++)
2688 attr.pszObjId = oid_key_rdn;
2713 issuer->pbData = *nextData;
2714 attr.pszObjId = oid_key_rdn;
2722 *nextData += encodedLen;
2723 issuer->cbData = encodedLen;
2738 size +=
in->SignerId.u.IssuerSerialNumber.Issuer.cbData;
2739 size +=
in->SignerId.u.IssuerSerialNumber.SerialNumber.cbData;
2746 if (
in->HashAlgorithm.pszObjId)
2748 size +=
in->HashAlgorithm.Parameters.cbData;
2749 if (
in->HashEncryptionAlgorithm.pszObjId)
2750 size +=
strlen(
in->HashEncryptionAlgorithm.pszObjId) + 1;
2751 size +=
in->HashEncryptionAlgorithm.Parameters.cbData;
2752 size +=
in->EncryptedHash.cbData;
2772 out->dwVersion =
in->dwVersion;
2776 &
in->SignerId.u.IssuerSerialNumber.Issuer, &nextData);
2778 &
in->SignerId.u.IssuerSerialNumber.SerialNumber, &nextData);
2782 &
in->SignerId.u.KeyId, rdnSize, &nextData);
2788 &
in->HashEncryptionAlgorithm, &nextData);
2810 size +=
in->SignerId.u.IssuerSerialNumber.Issuer.cbData;
2811 size +=
in->SignerId.u.IssuerSerialNumber.SerialNumber.cbData;
2814 size +=
in->SignerId.u.KeyId.cbData;
2815 if (
in->HashAlgorithm.pszObjId)
2817 size +=
in->HashAlgorithm.Parameters.cbData;
2818 if (
in->HashEncryptionAlgorithm.pszObjId)
2819 size +=
strlen(
in->HashEncryptionAlgorithm.pszObjId) + 1;
2820 size +=
in->HashEncryptionAlgorithm.Parameters.cbData;
2821 size +=
in->EncryptedHash.cbData;
2842 out->dwVersion =
in->dwVersion;
2843 out->SignerId.dwIdChoice =
in->SignerId.dwIdChoice;
2847 &
in->SignerId.u.IssuerSerialNumber.Issuer, &nextData);
2849 &
in->SignerId.u.IssuerSerialNumber.SerialNumber, &nextData);
2856 &
in->HashEncryptionAlgorithm, &nextData);
2877 size +=
in->SignerId.u.IssuerSerialNumber.Issuer.cbData;
2878 size +=
in->SignerId.u.IssuerSerialNumber.SerialNumber.cbData;
2905 &
in->SignerId.u.IssuerSerialNumber.Issuer, &nextData);
2907 &
in->SignerId.u.IssuerSerialNumber.SerialNumber, &nextData);
2912 &
in->SignerId.u.KeyId, rdnSize, &nextData);
2926 size +=
in->SerialNumber.cbData;
2927 size +=
in->Issuer.cbData;
2957 switch (dwParamType)
2963 if (
msg->u.enveloped_data.data)
2965 msg->u.enveloped_data.content.pbData,
2966 msg->u.enveloped_data.content.cbData);
2971 if (
msg->u.enveloped_data.data)
2973 &
msg->u.enveloped_data.data->cRecipientInfo,
sizeof(
DWORD));
2978 if (
msg->u.enveloped_data.data)
2980 if (dwIndex < msg->
u.enveloped_data.data->cRecipientInfo)
2983 &
msg->u.enveloped_data.data->rgRecipientInfo[dwIndex];
2995 FIXME(
"unimplemented for %d\n", dwParamType);
3006 switch (dwParamType)
3012 if (
msg->u.signed_data.info)
3014 if (!
strcmp(
msg->u.signed_data.info->content.pszObjId,
3021 msg->u.signed_data.info->content.Content.pbData,
3022 msg->u.signed_data.info->content.Content.cbData,
3033 msg->u.signed_data.info->content.Content.pbData,
3034 msg->u.signed_data.info->content.Content.cbData);
3040 if (
msg->u.signed_data.info)
3042 msg->u.signed_data.info->content.pszObjId,
3043 strlen(
msg->u.signed_data.info->content.pszObjId) + 1);
3048 if (
msg->u.signed_data.info)
3050 &
msg->u.signed_data.info->cSignerInfo,
sizeof(
DWORD));
3055 if (
msg->u.signed_data.info)
3057 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3061 &
msg->u.signed_data.info->rgSignerInfo[dwIndex]);
3067 if (
msg->u.signed_data.info)
3069 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3073 &
msg->u.signed_data.info->rgSignerInfo[dwIndex]);
3079 if (
msg->u.signed_data.info)
3081 &
msg->u.signed_data.info->cCertEncoded,
sizeof(
DWORD));
3086 if (
msg->u.signed_data.info)
3088 if (dwIndex >=
msg->u.signed_data.info->cCertEncoded)
3092 msg->u.signed_data.info->rgCertEncoded[dwIndex].pbData,
3093 msg->u.signed_data.info->rgCertEncoded[dwIndex].cbData);
3099 if (
msg->u.signed_data.info)
3101 &
msg->u.signed_data.info->cCrlEncoded,
sizeof(
DWORD));
3106 if (
msg->u.signed_data.info)
3108 if (dwIndex >=
msg->u.signed_data.info->cCrlEncoded)
3112 msg->u.signed_data.info->rgCrlEncoded[dwIndex].pbData,
3113 msg->u.signed_data.info->rgCrlEncoded[dwIndex].cbData);
3119 if (
msg->u.signed_data.info)
3121 if (dwIndex >=
msg->u.signed_data.cSignerHandle)
3125 msg->u.signed_data.signerHandles[dwIndex].contentHash,
3132 if (
msg->u.signed_data.info)
3134 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3139 &
msg->u.signed_data.info->rgSignerInfo[dwIndex], 0,
NULL,
3146 if (
msg->u.signed_data.info)
3148 DWORD attrCertCount = 0;
3151 &attrCertCount,
sizeof(
DWORD));
3157 if (
msg->u.signed_data.info)
3163 if (
msg->u.signed_data.info)
3165 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3169 &
msg->u.signed_data.info->rgSignerInfo[dwIndex]);
3175 FIXME(
"unimplemented for %d\n", dwParamType);
3202 switch (dwParamType)
3234 DWORD computedHashSize = 0;
3238 if (
hashBlob.cbData == computedHashSize)
3245 computedHash, &computedHashSize);
3278 prov =
msg->crypt_prov;
3285 if (
msg->u.signed_data.info->rgSignerInfo[signerIndex].AuthAttrs.cAttr)
3286 hash =
msg->u.signed_data.signerHandles[signerIndex].authAttrHash;
3288 hash =
msg->u.signed_data.signerHandles[signerIndex].contentHash;
3290 &
msg->u.signed_data.info->rgSignerInfo[signerIndex].EncryptedHash);
3308 if (!
msg->u.signed_data.signerHandles)
3313 for (
i = 0; !
ret &&
i <
msg->u.signed_data.info->cSignerInfo;
i++)
3316 &
msg->u.signed_data.info->rgSignerInfo[
i];
3327 &
info->SerialNumber);
3334 FIXME(
"signer %d: unimplemented for key id\n",
i);
3339 &
info->SubjectPublicKeyInfo);
3355 else if (!
msg->u.signed_data.signerHandles)
3410 pContentEncryptionAlgorithm->
pszObjId);
3412 for (
i = 0;
i < encryptedKey->
cbData; ++
i, --
k)
3413 keyBlob[
k] = encryptedKey->
pbData[
i];
3416 size,
key, 0, phContentEncryptKey);
3436 memset(&decryptPara, 0,
sizeof(decryptPara));
3437 decryptPara.
cbSize =
sizeof(decryptPara);
3446 (
void **)&importKeyFunc, &hFunc);
3449 ret = importKeyFunc(contEncrAlg, &decryptPara, 0,
NULL,
key);
3477 &
data->encryptedContentInfo.contentEncryptionAlgorithm, para,
3494 DWORD dwCtrlType,
const void *pvCtrlPara)
3518 msg->u.enveloped_data.crypt_prov =
3558 TRACE(
"(%08x, %08x, %08x, %08lx, %p, %p)\n", dwMsgEncodingType,
3559 dwFlags, dwMsgType, hCryptProv, pRecipientInfo, pStreamInfo);
3572 msg->type = dwMsgType;
3573 msg->crypt_prov = hCryptProv;
3575 msg->msg_data.cbData = 0;
3577 msg->detached_data.cbData = 0;
3578 msg->detached_data.pbData =
NULL;
3586 TRACE(
"(%p)\n", hCryptMsg);
3599 TRACE(
"(%p)\n", hCryptMsg);
3621 TRACE(
"(%p, %p, %d, %d)\n", hCryptMsg,
pbData, cbData, fFinal);
3623 return msg->update(hCryptMsg,
pbData, cbData, fFinal);
3631 TRACE(
"(%p, %d, %d, %p, %p)\n", hCryptMsg, dwParamType, dwIndex,
3637 DWORD dwCtrlType,
const void *pvCtrlPara)
3641 TRACE(
"(%p, %08x, %d, %p)\n", hCryptMsg,
dwFlags, dwCtrlType,
3643 return msg->control(hCryptMsg,
dwFlags, dwCtrlType, pvCtrlPara);
3647 DWORD dwSignerIndex)
3659 dwSignerIndex, certInfo, &
size))
3674 DWORD i, signerIndex = 0;
3722 for (
i = 0; !signerCert &&
i <
count;
i++)
3764 PBYTE pbSignerInfoCountersignature,
DWORD cbSignerInfoCountersignature,
3767 FIXME(
"(%08lx, %08x, %p, %d, %p, %d, %p): stub\n", hCryptProv,
3768 dwEncodingType, pbSignerInfo, cbSignerInfo, pbSignerInfoCountersignature,
3769 cbSignerInfoCountersignature, pciCountersigner);
3775 PBYTE pbSignerInfoCountersignature,
DWORD cbSignerInfoCountersignature,
3778 FIXME(
"(%08lx, %08x, %p, %d, %p, %d, %d, %p, %08x, %p): stub\n", hCryptProv,
3779 dwEncodingType, pbSignerInfo, cbSignerInfo, pbSignerInfoCountersignature,
3792 TRACE(
"(%08x, %p, %p, %08x, %p, %p)\n", dwMsgEncodingType, pCtlInfo,
3818 TRACE(
"(%08x, %p, %d, %p, %08x, %p, %p)\n", dwMsgEncodingType,
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
struct outqueuenode * head
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority)
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
BOOL CRYPT_AsnDecodeCMSSignedInfo(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_SIGNED_INFO *signedInfo, DWORD *pcbSignedInfo) DECLSPEC_HIDDEN
BOOL CRYPT_AsnEncodePKCSDigestedData(const CRYPT_DIGESTED_DATA *digestedData, void *pvData, DWORD *pcbData) DECLSPEC_HIDDEN
BOOL WINAPI CRYPT_AsnEncodeOid(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded) DECLSPEC_HIDDEN
#define POINTER_ALIGN_DWORD_PTR(p)
BOOL CRYPT_AsnDecodePKCSEnvelopedData(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_ENVELOPED_DATA *envelopedData, DWORD *pcbEnvelopedData) DECLSPEC_HIDDEN
BOOL CRYPT_AsnEncodePKCSEnvelopedData(const CRYPT_ENVELOPED_DATA *envelopedData, void *pvData, DWORD *pcbData) DECLSPEC_HIDDEN
BOOL CRYPT_AsnEncodeCMSSignedInfo(CRYPT_SIGNED_INFO *, void *pvData, DWORD *pcbData) DECLSPEC_HIDDEN
void ContextPropertyList_Free(CONTEXT_PROPERTY_LIST *list) DECLSPEC_HIDDEN
BOOL ContextPropertyList_FindProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, PCRYPT_DATA_BLOB blob) DECLSPEC_HIDDEN
BOOL CRYPT_EncodeLen(DWORD len, BYTE *pbEncoded, DWORD *pcbEncoded) DECLSPEC_HIDDEN
BOOL CRYPT_EncodeEnsureSpace(DWORD dwFlags, const CRYPT_ENCODE_PARA *pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded, DWORD bytesNeeded) DECLSPEC_HIDDEN
BOOL WINAPI CRYPT_AsnEncodeConstructed(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded) DECLSPEC_HIDDEN
HCRYPTPROV WINAPI I_CryptGetDefaultCryptProv(ALG_ID)
BOOL CRYPT_AsnDecodePKCSDigestedData(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_DIGESTED_DATA *digestedData, DWORD *pcbDigestedData) DECLSPEC_HIDDEN
BOOL ContextPropertyList_SetProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, const BYTE *pbData, size_t cbData) DECLSPEC_HIDDEN
BOOL WINAPI CRYPT_AsnEncodeSequence(DWORD dwCertEncodingType, struct AsnEncodeSequenceItem items[], DWORD cItem, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded) DECLSPEC_HIDDEN
BOOL WINAPI CRYPT_AsnEncodeOctets(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded) DECLSPEC_HIDDEN
#define ALIGN_DWORD_PTR(x)
CONTEXT_PROPERTY_LIST * ContextPropertyList_Create(void) DECLSPEC_HIDDEN
#define mem_free(ptr, bsize)
BOOL WINAPI CryptExportKey(HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen)
BOOL WINAPI CryptCreateHash(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash)
BOOL WINAPI CryptGetHashParam(HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
BOOL WINAPI CryptDestroyKey(HCRYPTKEY hKey)
BOOL WINAPI CryptDestroyHash(HCRYPTHASH hHash)
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags)
BOOL WINAPI CryptHashData(HCRYPTHASH hHash, const BYTE *pbData, DWORD dwDataLen, DWORD dwFlags)
BOOL WINAPI CryptGenKey(HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey)
BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen)
BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags)
BOOL WINAPI CryptGetUserKey(HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey)
BOOL WINAPI CryptSignHashW(HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen)
BOOL WINAPI CryptEncrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen)
BOOL WINAPI CryptImportKey(HCRYPTPROV hProv, const BYTE *pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey)
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType, PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2)
PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFlags, DWORD dwType, const void *pvPara, PCCERT_CONTEXT pPrevCertContext)
PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT pCertContext)
BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2)
BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void *pvEncoded, DWORD *pcbEncoded)
BOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey)
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize)
VOID WINAPI CryptMemFree(LPVOID pv)
static BOOL CDecodeMsg_DecodeEnvelopedContent(CDecodeMsg *msg, const CRYPT_DER_BLOB *blob)
struct _CEnvelopedDecodeMsg CEnvelopedDecodeMsg
static BOOL CSignedEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static BOOL CDecodeMsg_DecodeSignedContent(CDecodeMsg *msg, const CRYPT_DER_BLOB *blob)
struct _CSignedMsgData CSignedMsgData
enum _CryptMsgState CryptMsgState
static BOOL CRYPT_DefaultMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags, DWORD dwCtrlType, const void *pvCtrlPara)
HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo)
static void CEnvelopedEncodeMsg_Close(HCRYPTMSG hCryptMsg)
static BOOL WINAPI CRYPT_ExportKeyTrans(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo, PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo, DWORD dwFlags, void *pvReserved)
static BOOL CRYPT_EncodeDataContentInfoHeader(const CDataEncodeMsg *msg, CRYPT_DATA_BLOB *header)
static BOOL CDecodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
BOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg, DWORD cSignerStore, HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner, DWORD *pdwSignerIndex)
struct _CSignerHandles CSignerHandles
static void CRYPT_CopyBlob(CRYPT_DATA_BLOB *out, const CRYPT_DATA_BLOB *in, LPBYTE *nextData)
static CERT_INFO * CRYPT_GetSignerCertInfoFromMsg(HCRYPTMSG msg, DWORD dwSignerIndex)
HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo, PCMSG_STREAM_INFO pStreamInfo)
static void CRYPT_FreeBlobArray(DWORD cBlobs, PCRYPT_DATA_BLOB blobs)
static BOOL CRYPT_ConstructAttribute(CRYPT_ATTRIBUTE *out, const CRYPT_ATTRIBUTE *in)
static BOOL CDecodeEnvelopedMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static void CContentEncryptInfo_Free(CMSG_CONTENT_ENCRYPT_INFO *info)
BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static BOOL CRYPT_ImportEncryptedKey(PCRYPT_ALGORITHM_IDENTIFIER contEncrAlg, PCMSG_CTRL_DECRYPT_PARA para, PCMSG_KEY_TRANS_RECIPIENT_INFO info, HCRYPTKEY *key)
static BOOL CSignerInfo_Construct(CMSG_CMS_SIGNER_INFO *info, const CMSG_SIGNER_ENCODE_INFO_WITH_CMS *in)
static BOOL CDecodeMsg_FinalizeContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob)
static BOOL CSignedMsgData_UpdateAuthenticatedAttributes(CSignedMsgData *msg_data, SignOrVerify flag)
BOOL(* CryptMsgUpdateFunc)(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal)
struct _CDataEncodeMsg CDataEncodeMsg
static BOOL CRYPT_ConstructAlgorithmId(CRYPT_ALGORITHM_IDENTIFIER *out, const CRYPT_ALGORITHM_IDENTIFIER *in)
BOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent, DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL CDecodeMsg_DecodeContent(CDecodeMsg *msg, const CRYPT_DER_BLOB *blob, DWORD type)
static BOOL CRYPT_CopySignerInfo(void *pvData, DWORD *pcbData, const CMSG_CMS_SIGNER_INFO *in)
static BOOL CRYPT_CopyCMSSignerInfo(void *pvData, DWORD *pcbData, const CMSG_CMS_SIGNER_INFO *in)
BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal)
static BOOL CRYPT_ExportEncryptedKey(CMSG_CONTENT_ENCRYPT_INFO *info, DWORD i, CRYPT_DATA_BLOB *key)
BOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags, DWORD dwCtrlType, const void *pvCtrlPara)
static BOOL CRYPT_EncodePKCSDigestedData(CHashEncodeMsg *msg, void *pvData, DWORD *pcbData)
static BOOL CRYPT_ConstructBlobArray(DWORD *outCBlobs, PCRYPT_DATA_BLOB *outPBlobs, DWORD cBlobs, const CRYPT_DATA_BLOB *pBlobs)
static BOOL WINAPI CRYPT_EncodeContentLength(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
static BOOL CDecodeSignedMsg_VerifySignature(CDecodeMsg *msg, PCERT_INFO info)
static BOOL CDecodeMsg_Control(HCRYPTMSG hCryptMsg, DWORD dwFlags, DWORD dwCtrlType, const void *pvCtrlPara)
static BOOL CSignedMsgData_Sign(CSignedMsgData *msg_data)
BOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType, PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded)
static void CryptMsgBase_Init(CryptMsgBase *msg, DWORD dwFlags, PCMSG_STREAM_INFO pStreamInfo, CryptMsgCloseFunc close, CryptMsgGetParamFunc get_param, CryptMsgUpdateFunc update, CryptMsgControlFunc control)
static void CRYPT_ReverseBytes(CRYPT_HASH_BLOB *hash)
BOOL(* CryptMsgControlFunc)(HCRYPTMSG hCryptMsg, DWORD dwFlags, DWORD dwCtrlType, const void *pvCtrlPara)
static BOOL CHashEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal)
static BOOL CHashEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static HCRYPTMSG CEnvelopedEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo, LPCSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo)
static BOOL CSignedEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal)
struct _CHashEncodeMsg CHashEncodeMsg
static const BYTE empty_data_content[]
static BOOL CRYPT_ConstructBlob(CRYPT_DATA_BLOB *out, const CRYPT_DATA_BLOB *in)
static BOOL WINAPI CRYPT_ImportKeyTrans(PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey)
static BOOL CEnvelopedEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal)
static BOOL CDataEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal)
static BOOL CRecipientInfo_Construct(CMSG_KEY_TRANS_RECIPIENT_INFO *info, const CERT_INFO *cert, CRYPT_DATA_BLOB *key)
static BOOL CDecodeSignedMsg_VerifySignatureEx(CDecodeMsg *msg, PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA para)
struct _CryptMsgBase CryptMsgBase
struct _CMSG_SIGNER_ENCODE_INFO_WITH_CMS CMSG_SIGNER_ENCODE_INFO_WITH_CMS
static BOOL CDecodeMsg_DecodeDataContent(CDecodeMsg *msg, const CRYPT_DER_BLOB *blob)
BOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV_LEGACY hCryptProv, DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved)
static void CDecodeMsg_Close(HCRYPTMSG hCryptMsg)
static void CRYPT_CopyAlgorithmId(CRYPT_ALGORITHM_IDENTIFIER *out, const CRYPT_ALGORITHM_IDENTIFIER *in, LPBYTE *nextData)
static void CRYPT_CopyAttributes(CRYPT_ATTRIBUTES *out, const CRYPT_ATTRIBUTES *in, LPBYTE *nextData)
static BOOL CRYPT_ConstructBitBlob(CRYPT_BIT_BLOB *out, const CRYPT_BIT_BLOB *in)
static BOOL CDecodeEnvelopedMsg_CrtlDecrypt(CDecodeMsg *msg, PCMSG_CTRL_DECRYPT_PARA para)
BOOL(* CryptMsgGetParamFunc)(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static HCRYPTMSG CHashEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo)
static BOOL CSignedMsgData_Update(CSignedMsgData *msg_data, const BYTE *pbData, DWORD cbData, BOOL fFinal, SignOrVerify flag)
struct _CMSG_ENVELOPED_ENCODE_INFO_WITH_CMS CMSG_ENVELOPED_ENCODE_INFO_WITH_CMS
HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg)
static BOOL CRYPT_CopyRecipientInfo(void *pvData, DWORD *pcbData, const CERT_ISSUER_SERIAL_NUMBER *in)
static BOOL CSignedMsgData_AppendMessageDigestAttribute(CSignedMsgData *msg_data, DWORD signerIndex)
static void CDecodeMsg_SaveAlgorithmID(CDecodeMsg *msg, DWORD param, const CRYPT_ALGORITHM_IDENTIFIER *id)
static HCRYPTMSG CSignedEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo, LPCSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo)
struct _CMSG_SIGNED_ENCODE_INFO_WITH_CMS CMSG_SIGNED_ENCODE_INFO_WITH_CMS
struct _CDecodeMsg CDecodeMsg
BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg)
static BOOL CDecodeHashMsg_VerifyHash(CDecodeMsg *msg)
static void CRecipientInfo_Free(CMSG_KEY_TRANS_RECIPIENT_INFO *info)
static BOOL CSignedMsgData_UpdateHash(CSignedMsgData *msg_data, const BYTE *pbData, DWORD cbData)
static BOOL CDecodeHashMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static BOOL CDecodeMsg_FinalizeHashedContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob)
static BOOL CDecodeMsg_FinalizeEnvelopedContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob)
static DWORD CRYPT_SizeOfKeyIdAsIssuerAndSerial(const CRYPT_DATA_BLOB *keyId)
static BOOL CSignedMsgData_AllocateHandles(CSignedMsgData *msg_data)
static BOOL CDecodeMsg_FinalizeSignedContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob)
static BOOL CSignedMsgData_ConstructSignerHandles(CSignedMsgData *msg_data, DWORD signerIndex, HCRYPTPROV *crypt_prov, DWORD *flags)
static BOOL CDecodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal)
static BOOL CRYPT_CopyParam(void *pvData, DWORD *pcbData, const void *src, DWORD len)
static BOOL CRYPT_GenKey(CMSG_CONTENT_ENCRYPT_INFO *info, ALG_ID algID)
static BOOL CRYPT_AppendAttribute(CRYPT_ATTRIBUTES *out, const CRYPT_ATTRIBUTE *in)
static void CDataEncodeMsg_Close(HCRYPTMSG hCryptMsg)
static BOOL CRYPT_CopySignerCertInfo(void *pvData, DWORD *pcbData, const CMSG_CMS_SIGNER_INFO *in)
static HCRYPTMSG CDataEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo)
static BOOL CContentEncryptInfo_Construct(CMSG_CONTENT_ENCRYPT_INFO *info, const CMSG_ENVELOPED_ENCODE_INFO_WITH_CMS *in, HCRYPTPROV prov)
static void CRYPT_FixUpAlgorithmID(CRYPT_ALGORITHM_IDENTIFIER *id)
static BOOL CRYPT_CopyKeyIdAsIssuerAndSerial(CERT_NAME_BLOB *issuer, CRYPT_INTEGER_BLOB *serialNumber, const CRYPT_DATA_BLOB *keyId, DWORD encodedLen, LPBYTE *nextData)
static BOOL CEnvelopedEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static void CHashEncodeMsg_Close(HCRYPTMSG hCryptMsg)
static BOOL CDecodeMsg_CopyData(CRYPT_DATA_BLOB *blob, const BYTE *pbData, DWORD cbData)
struct _CSignedEncodeMsg CSignedEncodeMsg
BOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV_LEGACY hCryptProv, DWORD dwEncodingType, BYTE *pbSignerInfo, DWORD cbSignerInfo, PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, CERT_INFO *pciCountersigner)
struct _CEnvelopedEncodeMsg CEnvelopedEncodeMsg
static BOOL CRYPT_ConstructAttributes(CRYPT_ATTRIBUTES *out, const CRYPT_ATTRIBUTES *in)
static void CSignedMsgData_CloseHandles(CSignedMsgData *msg_data)
static BOOL CRYPT_IsValidSigner(const CMSG_SIGNER_ENCODE_INFO_WITH_CMS *signer)
void(* CryptMsgCloseFunc)(HCRYPTMSG msg)
static BOOL CDecodeSignedMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static void CSignerInfo_Free(CMSG_CMS_SIGNER_INFO *info)
static void CSignedEncodeMsg_Close(HCRYPTMSG hCryptMsg)
static BOOL CDataEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData)
static DWORD CRYPT_SizeOfAttributes(const CRYPT_ATTRIBUTES *attr)
static BOOL CDecodeMsg_DecodeHashedContent(CDecodeMsg *msg, const CRYPT_DER_BLOB *blob)
static BOOL CDecodeSignedMsg_VerifySignatureWithKey(CDecodeMsg *msg, HCRYPTPROV prov, DWORD signerIndex, PCERT_PUBLIC_KEY_INFO keyInfo)
static WCHAR issuer[MAX_STRING_RESOURCE_LEN]
HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName, DWORD dwFlags)
BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr)
LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId)
DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId)
BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags)
HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwMsgAndCertEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara)
BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
#define ERROR_INVALID_PARAMETER
#define HeapFree(x, y, z)
#define __EXCEPT_PAGE_FAULT
static const WCHAR version[]
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
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 flag
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
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 GLint GLint j
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
#define memcpy(s1, s2, n)
static const BYTE hashBlob[]
static const BYTE serialNumber[]
static LPCSTR DWORD void * pvReserved
static LPCSTR DWORD void BYTE * pbEncoded
static LPCSTR DWORD void BYTE DWORD * pcbEncoded
static HCRYPTPROV crypt_prov
#define STATUS_ACCESS_VIOLATION
CRYPT_DATA_BLOB detached_data
CEnvelopedDecodeMsg enveloped_data
CSignedMsgData signed_data
union _CDecodeMsg::@375 u
CONTEXT_PROPERTY_LIST * properties
CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber
CRYPT_INTEGER_BLOB SerialNumber
CRYPT_INTEGER_BLOB SerialNumber
CRYPT_ALGORITHM_IDENTIFIER Algorithm
CRYPT_ENVELOPED_DATA * data
CMSG_KEY_TRANS_RECIPIENT_INFO * recipientInfo
CRYPT_ALGORITHM_IDENTIFIER algo
CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm
CRYPT_DATA_BLOB EncryptedHash
CRYPT_ATTRIBUTES AuthAttrs
HCRYPTKEY hContentEncryptKey
PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans
PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients
PCERT_BLOB rgAttrCertEncoded
CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm
void * pvEncryptionAuxInfo
PCERT_INFO * rgpRecipientCert
HCRYPTPROV_LEGACY hCryptProv
PCRYPT_ATTRIBUTE rgUnprotectedAttr
CRYPT_DATA_BLOB EncryptedKey
CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm
CRYPT_BIT_BLOB RecipientPublicKey
HCRYPTPROV_LEGACY hCryptProv
void * pvKeyEncryptionAuxInfo
CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm
PCERT_BLOB rgAttrCertEncoded
CMSG_SIGNER_ENCODE_INFO_WITH_CMS * rgSigners
CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm
PCRYPT_ATTRIBUTE rgAuthAttr
void * pvHashEncryptionAuxInfo
PCRYPT_ATTRIBUTE rgUnauthAttr
CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm
CRYPT_OBJID_BLOB Parameters
CRYPT_CONTENT_INFO ContentInfo
CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm
PCMSG_CMS_SIGNER_INFO rgSignerInfo
CSignerHandles * signerHandles
CryptMsgControlFunc control
CryptMsgGetParamFunc get_param
CMSG_STREAM_INFO stream_info
CryptMsgUpdateFunc update
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
struct _CMSG_CONTENT_ENCRYPT_INFO CMSG_CONTENT_ENCRYPT_INFO
#define CMSG_VERSION_PARAM
BOOL(WINAPI * PFN_CMSG_EXPORT_KEY_TRANS)(_In_ PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, _In_ PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo, _Inout_ PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo, _In_ DWORD dwFlags, _Reserved_ void *pvReserved)
#define CERT_ID_ISSUER_SERIAL_NUMBER
struct _CRYPT_ATTRIBUTE CRYPT_ATTRIBUTE
#define szOID_RSA_envelopedData
#define CMSG_SIGNER_INFO_V1
#define CMSG_OID_IMPORT_KEY_TRANS_FUNC
#define CMSG_ATTR_CERT_COUNT_PARAM
#define CERT_STORE_PROV_COLLECTION
#define CMSG_CTRL_VERIFY_HASH
ULONG_PTR HCRYPTPROV_LEGACY
#define CMSG_COMPUTED_HASH_PARAM
#define CMSG_BARE_CONTENT_PARAM
#define X509_OCTET_STRING
#define CERT_FIND_SUBJECT_CERT
#define CMSG_CRYPT_RELEASE_CONTEXT_FLAG
#define CMSG_SIGNER_CERT_INFO_PARAM
struct _CRYPTOAPI_BLOB CRYPT_DATA_BLOB
struct _CRYPT_ALGORITHM_IDENTIFIER CRYPT_ALGORITHM_IDENTIFIER
#define CMSG_SIGNED_AND_ENVELOPED
_In_ DWORD _In_ DWORD _Outptr_opt_ PCCERT_CONTEXT _Inout_opt_ DWORD * pdwSignerIndex
#define CERT_ID_KEY_IDENTIFIER
#define CMSG_SIGNED_DATA_V3
#define CMSG_OID_EXPORT_KEY_TRANS_FUNC
#define CERT_STORE_CREATE_NEW_FLAG
#define szOID_RSA_hashedData
#define CMSG_CTRL_VERIFY_SIGNATURE_EX
#define CMSG_SIGNED_DATA_V1
#define CMSG_VERIFY_SIGNER_CERT
#define szOID_RSA_messageDigest
struct _CRYPTOAPI_BLOB * PCRYPT_DATA_BLOB
#define PKCS_CONTENT_INFO
#define szOID_RSA_signedData
_In_ DWORD dwEncodingType
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
_In_ DWORD _In_ DWORD _Outptr_opt_ PCCERT_CONTEXT * ppSigner
#define CMSG_ENCODED_SIGNER
#define CMSG_CMS_SIGNER_INFO_PARAM
#define X509_ASN_ENCODING
#define CMSG_INNER_CONTENT_TYPE_PARAM
_In_ DWORD dwCertEncodingType
#define CRYPT_DECODE_ALLOC_FLAG
#define CMSG_CTRL_DECRYPT
struct _CMSG_SIGNER_INFO CMSG_SIGNER_INFO
#define CMSG_RECIPIENT_INFO_PARAM
#define CMSG_SIGNER_INFO_PARAM
#define CERT_STORE_PROV_MSG
struct _CMSG_CTRL_DECRYPT_PARA * PCMSG_CTRL_DECRYPT_PARA
#define szOID_RSA_contentType
#define CMSG_DETACHED_FLAG
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_updates_bytes_to_ pdwDataLen BYTE * pbData
#define CMSG_SIGNER_ONLY_FLAG
#define CMSG_USE_SIGNER_INDEX_FLAG
#define CMSG_HASHED_DATA_PKCS_1_5_VERSION
#define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC
struct _PUBLICKEYSTRUC BLOBHEADER
struct _CERT_INFO CERT_INFO
#define CMSG_KEY_TRANS_PKCS_1_5_VERSION
#define CMSG_SIGNER_INFO_V3
#define CERT_RDN_OCTET_STRING
#define CRYPT_ENCODE_ALLOC_FLAG
#define CMSG_KEY_TRANS_RECIPIENT
BOOL(WINAPI * PFN_CMSG_IMPORT_KEY_TRANS)(_In_ PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, _In_ PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, _In_ DWORD dwFlags, _Reserved_ void *pvReserved, _Out_ HCRYPTKEY *phContentEncryptKey)
struct _CMSG_CMS_SIGNER_INFO CMSG_CMS_SIGNER_INFO
#define CMSG_SIGNER_COUNT_PARAM
#define PKCS_7_ASN_ENCODING
#define CMSG_HASH_ALGORITHM_PARAM
_In_ DWORD _Out_writes_bytes_to_opt_ pcbData void _Inout_ DWORD * pcbData
#define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION
#define CMSG_HASH_DATA_PARAM
BOOL(WINAPI * PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(_Inout_ PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, _In_ DWORD dwFlags, _Reserved_ void *pvReserved)
#define CMSG_TRUSTED_SIGNER_FLAG
#define GET_CMSG_ENCODING_TYPE(x)
#define CMSG_ATTR_CERT_PARAM
#define szOID_RSA_digestedData
#define CMSG_CERT_COUNT_PARAM
#define CMSG_VERIFY_SIGNER_PUBKEY
#define CMSG_RECIPIENT_COUNT_PARAM
#define CMSG_CONTENT_PARAM
#define CMSG_CRL_COUNT_PARAM
#define CMSG_CTRL_VERIFY_SIGNATURE
_In_ ULONG _In_opt_ PVOID pvData
#define CRYPT_E_NO_TRUSTED_SIGNER
#define CRYPT_E_MSG_ERROR
#define CRYPT_E_HASH_VALUE
#define CRYPT_E_INVALID_INDEX
#define NTE_BAD_SIGNATURE
#define CRYPT_E_UNKNOWN_ALGO
#define CRYPT_E_SIGNER_NOT_FOUND
#define CRYPT_E_INVALID_MSG_TYPE
#define CRYPT_E_CONTROL_TYPE
#define CRYPT_E_ALREADY_DECRYPTED