47 DWORD dwCtrlType,
const void *pvCtrlPara);
68 DWORD dwCtrlType,
const void *pvCtrlPara)
70 TRACE(
"(%p, %08lx, %ld, %p)\n", hCryptMsg,
dwFlags, dwCtrlType, pvCtrlPara);
105 msg->stream_info = *pStreamInfo;
113 msg->get_param = get_param;
114 msg->update = update;
150 *pcbEncoded = 1 + lenBytes + dataLen;
154 pcbEncoded, 1 + lenBytes)))
157 pbEncoded = *(
BYTE **)pbEncoded;
171 if (
msg->base.streamed &&
msg->base.stream_info.cbContent == 0xffffffff)
173 static const BYTE headerValue[] = { 0x30,0x80,0x06,0x09,0x2a,0x86,0x48,
174 0x86,0xf7,0x0d,0x01,0x07,0x01,0xa0,0x80,0x24,0x80 };
179 header->cbData =
sizeof(headerValue);
180 memcpy(
header->pbData, headerValue,
sizeof(headerValue));
203 header->cbData -=
msg->base.stream_info.cbContent;
217 else if (
msg->base.streamed)
228 ret =
msg->base.stream_info.pfnStreamOutput(
237 if (
msg->base.stream_info.cbContent == 0xffffffff)
247 ret =
msg->base.stream_info.pfnStreamOutput(
248 msg->base.stream_info.pvArg,
header, headerLen,
255 ret =
msg->base.stream_info.pfnStreamOutput(
263 if (
msg->base.stream_info.cbContent == 0xffffffff)
265 BYTE indefinite_trailer[6] = { 0 };
267 ret =
msg->base.stream_info.pfnStreamOutput(
271 ret =
msg->base.stream_info.pfnStreamOutput(
272 msg->base.stream_info.pvArg, indefinite_trailer,
273 sizeof(indefinite_trailer),
TRUE);
276 ret =
msg->base.stream_info.pfnStreamOutput(
306 &
msg->bare_content_len);
342 if (
msg->base.streamed)
347 char rsa_data[] =
"1.2.840.113549.1.7.1";
349 info.pszObjId = rsa_data;
350 info.Content.cbData =
msg->bare_content_len;
351 info.Content.pbData =
msg->bare_content;
357 if (
msg->base.streamed)
361 msg->bare_content_len);
452 TRACE(
"(%p, %ld, %ld, %p, %p)\n", hCryptMsg, dwParamType, dwIndex,
458 if (
msg->base.streamed)
468 &
info.Content.cbData);
472 if (
info.Content.pbData)
475 info.Content.pbData, &
info.Content.cbData);
480 info.pszObjId = oid_rsa_hashed;
519 TRACE(
"(%p, %p, %ld, %d)\n", hCryptMsg, pbData,
cbData, fFinal);
541 if (
msg->data.pbData)
573 if (
info->hCryptProv)
574 prov =
info->hCryptProv;
583 dwFlags &= ~CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
592 msg->data.cbData = 0;
694 FIXME(
"CMSG_SIGNER_ENCODE_INFO with CMS fields unsupported\n");
715 out->cbData =
in->cbData;
743 for (
i = 0;
ret &&
i < cBlobs;
i++)
756 for (
i = 0;
i < cBlobs;
i++)
771 in->cValue,
in->rgValue);
783 out->cAttr =
in->cAttr;
813 &
in->pCertInfo->Issuer);
816 &
info->SignerId.IssuerSerialNumber.SerialNumber,
817 &
in->pCertInfo->SerialNumber);
819 info->HashEncryptionAlgorithm.pszObjId =
820 in->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId;
823 &
in->pCertInfo->SubjectPublicKeyInfo.Algorithm.Parameters);
832 if (!
in->SignerId.dwIdChoice)
836 &
in->pCertInfo->Issuer);
839 &
info->SignerId.IssuerSerialNumber.SerialNumber,
840 &
in->pCertInfo->SerialNumber);
848 &
in->SignerId.IssuerSerialNumber.Issuer);
851 &
info->SignerId.IssuerSerialNumber.SerialNumber,
852 &
in->SignerId.IssuerSerialNumber.SerialNumber);
860 &
in->SignerId.KeyId);
862 pEncrAlg =
in->HashEncryptionAlgorithm.
pszObjId ?
863 &
in->HashEncryptionAlgorithm :
864 &
in->pCertInfo->SubjectPublicKeyInfo.Algorithm;
865 info->HashEncryptionAlgorithm.pszObjId = pEncrAlg->
pszObjId;
873 info->HashAlgorithm.pszObjId =
in->HashAlgorithm.pszObjId;
876 &
in->HashAlgorithm.Parameters);
900 for (
i = 0;
i <
info->AuthAttrs.cAttr;
i++)
902 for (
j = 0;
j <
info->AuthAttrs.rgAttr[
i].cValue;
j++)
908 for (
i = 0;
i <
info->UnauthAttrs.cAttr;
i++)
910 for (
j = 0;
j <
info->UnauthAttrs.rgAttr[
i].cValue;
j++)
948 *
flags &= ~CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
1040 CRYPT_ATTRIBUTE messageDigestAttr = { messageDigest, 1, &encodedHash };
1046 &encodedHash.cbData);
1051 &messageDigestAttr);
1069 TRACE(
"(%p)\n", msg_data);
1077 BYTE oid_rsa_data_encoded[] = { 0x06,0x09,0x2a,0x86,0x48,0x86,
1078 0xf7,0x0d,0x01,0x07,0x01 };
1080 oid_rsa_data_encoded };
1118 for (
i = 0;
i <
hash->cbData / 2;
i++)
1120 tmp =
hash->pbData[
hash->cbData -
i - 1];
1122 hash->pbData[
i] = tmp;
1131 TRACE(
"(%p)\n", msg_data);
1197 msg->msg_data.info->rgCertEncoded);
1199 msg->msg_data.info->rgCrlEncoded);
1200 for (
i = 0;
i <
msg->msg_data.info->cSignerInfo;
i++)
1214 switch (dwParamType)
1221 &
info.Content.cbData);
1225 if (
info.Content.pbData)
1228 info.Content.pbData, &
info.Content.cbData);
1233 info.pszObjId = oid_rsa_signed;
1255 info.content.pszObjId = oid_rsa_data;
1258 if (
msg->data.cbData)
1264 &
info.content.Content.pbData, &
info.content.Content.cbData);
1269 info.content.Content.cbData = 0;
1270 info.content.Content.pbData =
NULL;
1276 info.content.pszObjId =
msg->innerOID;
1277 info.content.Content.cbData =
msg->data.cbData;
1278 info.content.Content.pbData =
msg->data.pbData;
1290 if (dwIndex >=
msg->msg_data.cSignerHandle)
1294 msg->msg_data.signerHandles[dwIndex].contentHash,
HP_HASHVAL,
1298 if (dwIndex >=
msg->msg_data.info->cSignerInfo)
1307 sizeof(
msg->msg_data.info->version));
1327 if (
msg->base.streamed)
1328 FIXME(
"streamed partial stub\n");
1340 if (
msg->data.pbData)
1359 const void *pvMsgEncodeInfo,
LPCSTR pszInnerContentObjID,
1373 info->cAttrCertEncoded)
1375 FIXME(
"CMSG_SIGNED_ENCODE_INFO with CMS fields unsupported\n");
1378 for (
i = 0;
i <
info->cSigners;
i++)
1389 if (pszInnerContentObjID)
1393 strcpy(
msg->innerOID, pszInnerContentObjID);
1399 msg->data.cbData = 0;
1405 if (
msg->msg_data.info)
1416 msg->msg_data.info->rgSignerInfo =
1418 if (
msg->msg_data.info->rgSignerInfo)
1420 msg->msg_data.info->cSignerInfo =
info->cSigners;
1421 memset(
msg->msg_data.info->rgSignerInfo, 0,
1422 msg->msg_data.info->cSignerInfo *
1426 if (!
msg->msg_data.info->signerKeySpec)
1428 for (
i = 0;
ret &&
i <
msg->msg_data.info->cSignerInfo;
i++)
1430 if (
info->rgSigners[
i].SignerId.dwIdChoice ==
1434 &
msg->msg_data.info->rgSignerInfo[
i],
1435 &
info->rgSigners[
i]);
1444 msg->msg_data.info->signerKeySpec[
i] =
1445 info->rgSigners[
i].dwKeySpec;
1453 msg->msg_data.info->cSignerInfo = 0;
1454 msg->msg_data.signerHandles =
NULL;
1455 msg->msg_data.cSignerHandle = 0;
1460 &
msg->msg_data.info->rgCertEncoded,
info->cCertEncoded,
1461 info->rgCertEncoded);
1464 &
msg->msg_data.info->rgCrlEncoded,
info->cCrlEncoded,
1465 info->rgCrlEncoded);
1521 out->cbData =
in->cbData;
1522 out->cUnusedBits =
in->cUnusedBits;
1546 info->ContentEncryptionAlgorithm.pszObjId, 0, (
void **)&genKeyFunc, &hFunc);
1554 &
info->hContentEncryptKey);
1630 info->rgCmsRecipients[
i].pKeyTrans;
1634 memset(&encryptInfo, 0,
sizeof(encryptInfo));
1635 encryptInfo.
cbSize =
sizeof(encryptInfo);
1649 ret = exportKeyFunc(
info, encodeInfo, &encryptInfo, 0,
NULL);
1681 info->hCryptProv = prov;
1683 &
in->ContentEncryptionAlgorithm);
1684 info->pvEncryptionAuxInfo =
in->pvEncryptionAuxInfo;
1685 info->cRecipients =
in->cRecipients;
1690 if (
info->rgCmsRecipients)
1694 for (
i = 0;
ret &&
i <
in->cRecipients; ++
i)
1699 info->rgCmsRecipients[
i].dwRecipientChoice =
1702 info->rgCmsRecipients[
i].pKeyTrans = encodeInfo;
1705 encodeInfo->
cbSize =
sizeof(*encodeInfo);
1708 &
cert->SubjectPublicKeyInfo.Algorithm);
1714 &
cert->SubjectPublicKeyInfo.PublicKey);
1722 &
cert->SerialNumber);
1740 if (
info->rgCmsRecipients)
1744 for (
i = 0;
i <
info->cRecipients; ++
i)
1747 info->rgCmsRecipients[
i].pKeyTrans;
1773 &
info->RecipientId.IssuerSerialNumber.SerialNumber,
1774 &
cert->SerialNumber);
1777 &
cert->SubjectPublicKeyInfo.Algorithm);
1778 info->EncryptedKey.cbData =
key->cbData;
1779 info->EncryptedKey.pbData =
key->pbData;
1801 if (
msg->recipientInfo)
1805 for (
i = 0;
i <
msg->cRecipientInfo; ++
i)
1818 switch (dwParamType)
1821 if (
msg->base.streamed)
1828 msg->recipientInfo, { oid_rsa_data, {
1830 {
msg->algo.Parameters.cbData,
msg->algo.Parameters.pbData }
1832 {
msg->data.cbData,
msg->data.pbData }
1845 &
info.Content.cbData);
1849 if (
info.Content.pbData)
1852 info.Content.pbData, &
info.Content.cbData);
1857 info.pszObjId = oid_rsa_enveloped;
1882 else if (
msg->base.streamed)
1884 FIXME(
"streamed stub\n");
1905 if (
msg->data.pbData)
1909 &dataLen,
msg->data.cbData);
1910 msg->data.cbData = dataLen;
1915 if (
msg->data.pbData)
1919 msg->data.pbData, &dataLen,
msg->data.cbData);
1931 msg->data.cbData = 0;
1944 const void *pvMsgEncodeInfo,
LPCSTR pszInnerContentObjID,
1959 FIXME(
"CMS fields unsupported\n");
1965 if (
info->cRecipients && !
info->rgpRecipientCert)
1970 if (
info->hCryptProv)
1971 prov =
info->hCryptProv;
1975 dwFlags &= ~CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
1989 &
info->ContentEncryptionAlgorithm);
1991 msg->data.cbData = 0;
1993 msg->cRecipientInfo =
info->cRecipients;
1996 if (!
msg->recipientInfo)
1998 memset(&encryptInfo, 0,
sizeof(encryptInfo));
2009 for (
i = 0;
ret &&
i <
msg->cRecipientInfo; ++
i)
2014 info->rgpRecipientCert[
i], &encryptedKey);
2029 DWORD dwMsgType,
const void *pvMsgEncodeInfo,
LPSTR pszInnerContentObjID,
2034 TRACE(
"(%08lx, %08lx, %08lx, %p, %s, %p)\n", dwMsgEncodingType,
dwFlags,
2035 dwMsgType, pvMsgEncodeInfo,
debugstr_a(pszInnerContentObjID), pStreamInfo);
2046 pszInnerContentObjID, pStreamInfo);
2050 pszInnerContentObjID, pStreamInfo);
2054 pszInnerContentObjID, pStreamInfo);
2058 pszInnerContentObjID, pStreamInfo);
2105 if (
msg->u.enveloped_data.crypt_prov)
2111 if (
msg->u.signed_data.info)
2172 len +=
id->Parameters.cbData;
2182 if (
id->Parameters.cbData ==
sizeof(nullParams) &&
2183 !
memcmp(
id->Parameters.pbData, nullParams,
sizeof(nullParams)))
2185 copy->Parameters.cbData = 0;
2186 len -=
sizeof(nullParams);
2189 copy->Parameters.cbData =
id->Parameters.cbData;
2190 if (
copy->Parameters.cbData)
2192 id->Parameters.cbData);
2202 id->Parameters.pbData = (
BYTE *)
id->pszObjId +
strlen(
id->pszObjId) + 1;
2253 msg->u.enveloped_data.data = envelopedData;
2268 msg->u.signed_data.info = signedInfo;
2348 if (!
msg->crypt_prov)
2351 if (
msg->crypt_prov)
2352 msg->base.open_flags &= ~CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
2387 &
msg->u.enveloped_data.data->encryptedContentInfo.encryptedContent;
2399 for (
i = 0;
ret &&
i <
msg->u.signed_data.info->cSignerInfo;
i++)
2401 &
msg->crypt_prov, &
msg->base.open_flags);
2414 content = &
msg->u.signed_data.info->content.Content;
2421 !
strcmp(
msg->u.signed_data.info->content.pszObjId,
2471 TRACE(
"(%p, %p, %ld, %d)\n", hCryptMsg, pbData,
cbData, fFinal);
2475 else if (
msg->base.streamed)
2477 FIXME(
"(%p, %p, %ld, %d): streamed update stub\n", hCryptMsg, pbData,
2479 switch (
msg->base.state)
2519 switch (
msg->base.state)
2537 if (
ret && fFinal &&
2553 switch (dwParamType)
2599 out->cbData =
in->cbData;
2602 out->pbData = *nextData;
2604 *nextData +=
in->cbData;
2623 out->cAttr =
in->cAttr;
2631 for (
i = 0;
i <
in->cAttr;
i++)
2633 if (
in->rgAttr[
i].pszObjId)
2635 out->rgAttr[
i].pszObjId = (
LPSTR)*nextData;
2637 *nextData +=
strlen(
in->rgAttr[
i].pszObjId) + 1;
2639 if (
in->rgAttr[
i].cValue)
2643 out->rgAttr[
i].cValue =
in->rgAttr[
i].cValue;
2647 for (
j = 0;
j <
in->rgAttr[
i].cValue;
j++)
2649 &
in->rgAttr[
i].rgValue[
j], nextData);
2659 for (
i = 0;
i <
attr->cAttr;
i++)
2661 if (
attr->rgAttr[
i].pszObjId)
2666 for (
j = 0;
j <
attr->rgAttr[
i].cValue;
j++)
2682 attr.pszObjId = oid_key_rdn;
2707 issuer->pbData = *nextData;
2708 attr.pszObjId = oid_key_rdn;
2716 *nextData += encodedLen;
2717 issuer->cbData = encodedLen;
2732 size +=
in->SignerId.IssuerSerialNumber.Issuer.cbData;
2733 size +=
in->SignerId.IssuerSerialNumber.SerialNumber.cbData;
2740 if (
in->HashAlgorithm.pszObjId)
2742 size +=
in->HashAlgorithm.Parameters.cbData;
2743 if (
in->HashEncryptionAlgorithm.pszObjId)
2744 size +=
strlen(
in->HashEncryptionAlgorithm.pszObjId) + 1;
2745 size +=
in->HashEncryptionAlgorithm.Parameters.cbData;
2746 size +=
in->EncryptedHash.cbData;
2766 out->dwVersion =
in->dwVersion;
2770 &
in->SignerId.IssuerSerialNumber.Issuer, &nextData);
2772 &
in->SignerId.IssuerSerialNumber.SerialNumber, &nextData);
2776 &
in->SignerId.KeyId, rdnSize, &nextData);
2782 &
in->HashEncryptionAlgorithm, &nextData);
2804 size +=
in->SignerId.IssuerSerialNumber.Issuer.cbData;
2805 size +=
in->SignerId.IssuerSerialNumber.SerialNumber.cbData;
2808 size +=
in->SignerId.KeyId.cbData;
2809 if (
in->HashAlgorithm.pszObjId)
2811 size +=
in->HashAlgorithm.Parameters.cbData;
2812 if (
in->HashEncryptionAlgorithm.pszObjId)
2813 size +=
strlen(
in->HashEncryptionAlgorithm.pszObjId) + 1;
2814 size +=
in->HashEncryptionAlgorithm.Parameters.cbData;
2815 size +=
in->EncryptedHash.cbData;
2836 out->dwVersion =
in->dwVersion;
2837 out->SignerId.dwIdChoice =
in->SignerId.dwIdChoice;
2841 &
in->SignerId.IssuerSerialNumber.Issuer, &nextData);
2843 &
in->SignerId.IssuerSerialNumber.SerialNumber, &nextData);
2850 &
in->HashEncryptionAlgorithm, &nextData);
2871 size +=
in->SignerId.IssuerSerialNumber.Issuer.cbData;
2872 size +=
in->SignerId.IssuerSerialNumber.SerialNumber.cbData;
2899 &
in->SignerId.IssuerSerialNumber.Issuer, &nextData);
2901 &
in->SignerId.IssuerSerialNumber.SerialNumber, &nextData);
2906 &
in->SignerId.KeyId, rdnSize, &nextData);
2920 size +=
in->SerialNumber.cbData;
2921 size +=
in->Issuer.cbData;
2951 switch (dwParamType)
2957 if (
msg->u.enveloped_data.data)
2959 msg->u.enveloped_data.content.pbData,
2960 msg->u.enveloped_data.content.cbData);
2965 if (
msg->u.enveloped_data.data)
2967 &
msg->u.enveloped_data.data->cRecipientInfo,
sizeof(
DWORD));
2972 if (
msg->u.enveloped_data.data)
2974 if (dwIndex < msg->
u.enveloped_data.data->cRecipientInfo)
2977 &
msg->u.enveloped_data.data->rgRecipientInfo[dwIndex];
2989 FIXME(
"unimplemented for %ld\n", dwParamType);
3026 switch (dwParamType)
3032 if (
msg->u.signed_data.info)
3034 if (!
strcmp(
msg->u.signed_data.info->content.pszObjId,
3041 msg->u.signed_data.info->content.Content.pbData,
3042 msg->u.signed_data.info->content.Content.cbData,
3053 msg->u.signed_data.info->content.Content.pbData,
3054 msg->u.signed_data.info->content.Content.cbData);
3060 if (
msg->u.signed_data.info)
3062 msg->u.signed_data.info->content.pszObjId,
3063 strlen(
msg->u.signed_data.info->content.pszObjId) + 1);
3068 if (
msg->u.signed_data.info)
3070 &
msg->u.signed_data.info->cSignerInfo,
sizeof(
DWORD));
3075 if (
msg->u.signed_data.info)
3077 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3081 &
msg->u.signed_data.info->rgSignerInfo[dwIndex]);
3087 if (
msg->u.signed_data.info)
3089 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3093 &
msg->u.signed_data.info->rgSignerInfo[dwIndex]);
3099 if (
msg->u.signed_data.info)
3101 &
msg->u.signed_data.info->cCertEncoded,
sizeof(
DWORD));
3106 if (
msg->u.signed_data.info)
3108 if (dwIndex >=
msg->u.signed_data.info->cCertEncoded)
3112 msg->u.signed_data.info->rgCertEncoded[dwIndex].pbData,
3113 msg->u.signed_data.info->rgCertEncoded[dwIndex].cbData);
3119 if (
msg->u.signed_data.info)
3121 &
msg->u.signed_data.info->cCrlEncoded,
sizeof(
DWORD));
3126 if (
msg->u.signed_data.info)
3128 if (dwIndex >=
msg->u.signed_data.info->cCrlEncoded)
3132 msg->u.signed_data.info->rgCrlEncoded[dwIndex].pbData,
3133 msg->u.signed_data.info->rgCrlEncoded[dwIndex].cbData);
3139 if (
msg->u.signed_data.info)
3141 if (dwIndex >=
msg->u.signed_data.cSignerHandle)
3145 msg->u.signed_data.signerHandles[dwIndex].contentHash,
3152 if (
msg->msg_data.pbData)
3158 if (
msg->u.signed_data.info)
3160 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3165 &
msg->u.signed_data.info->rgSignerInfo[dwIndex], 0,
NULL,
3172 if (
msg->u.signed_data.info)
3174 DWORD attrCertCount = 0;
3177 &attrCertCount,
sizeof(
DWORD));
3183 if (
msg->u.signed_data.info)
3189 if (
msg->u.signed_data.info)
3191 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3195 &
msg->u.signed_data.info->rgSignerInfo[dwIndex]);
3201 if (
msg->u.signed_data.info)
3203 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3207 &
msg->u.signed_data.info->rgSignerInfo[dwIndex].AuthAttrs);
3213 if (
msg->u.signed_data.info)
3215 if (dwIndex >=
msg->u.signed_data.info->cSignerInfo)
3219 &
msg->u.signed_data.info->rgSignerInfo[dwIndex].UnauthAttrs);
3225 FIXME(
"unimplemented for %ld\n", dwParamType);
3252 switch (dwParamType)
3284 DWORD computedHashSize = 0;
3288 if (
hashBlob.cbData == computedHashSize)
3295 computedHash, &computedHashSize);
3323 BYTE *hash_value, *sig_value =
NULL;
3324 DWORD hash_len, sig_len;
3336 FIXME(
"Failed to verify signature: %08lx.\n",
status);
3355 if (
msg->u.signed_data.info->rgSignerInfo[signerIndex].AuthAttrs.cAttr)
3356 hash =
msg->u.signed_data.signerHandles[signerIndex].authAttrHash;
3358 hash =
msg->u.signed_data.signerHandles[signerIndex].contentHash;
3365 prov =
msg->crypt_prov;
3372 &
msg->u.signed_data.info->rgSignerInfo[signerIndex].EncryptedHash);
3390 if (!
msg->u.signed_data.signerHandles)
3395 for (
i = 0; !
ret &&
i <
msg->u.signed_data.info->cSignerInfo;
i++)
3398 &
msg->u.signed_data.info->rgSignerInfo[
i];
3409 &
info->SerialNumber);
3416 FIXME(
"signer %ld: unimplemented for key id\n",
i);
3421 &
info->SubjectPublicKeyInfo);
3437 else if (!
msg->u.signed_data.signerHandles)
3492 pContentEncryptionAlgorithm->
pszObjId);
3494 for (
i = 0;
i < encryptedKey->
cbData; ++
i, --
k)
3495 keyBlob[
k] = encryptedKey->
pbData[
i];
3498 size,
key, 0, phContentEncryptKey);
3518 memset(&decryptPara, 0,
sizeof(decryptPara));
3519 decryptPara.
cbSize =
sizeof(decryptPara);
3528 (
void **)&importKeyFunc, &hFunc);
3531 ret = importKeyFunc(contEncrAlg, &decryptPara, 0,
NULL,
key);
3559 &
data->encryptedContentInfo.contentEncryptionAlgorithm, para,
3576 DWORD dwCtrlType,
const void *pvCtrlPara)
3600 msg->u.enveloped_data.crypt_prov =
3640 TRACE(
"(%08lx, %08lx, %08lx, %08Ix, %p, %p)\n", dwMsgEncodingType,
3641 dwFlags, dwMsgType, hCryptProv, pRecipientInfo, pStreamInfo);
3654 msg->type = dwMsgType;
3655 msg->crypt_prov = hCryptProv;
3657 msg->msg_data.cbData = 0;
3659 msg->detached_data.cbData = 0;
3660 msg->detached_data.pbData =
NULL;
3668 TRACE(
"(%p)\n", hCryptMsg);
3681 TRACE(
"(%p)\n", hCryptMsg);
3703 TRACE(
"(%p, %p, %ld, %d)\n", hCryptMsg, pbData,
cbData, fFinal);
3705 return msg->update(hCryptMsg, pbData,
cbData, fFinal);
3713 TRACE(
"(%p, %ld, %ld, %p, %p)\n", hCryptMsg, dwParamType, dwIndex,
3719 DWORD dwCtrlType,
const void *pvCtrlPara)
3723 TRACE(
"(%p, %08lx, %ld, %p)\n", hCryptMsg,
dwFlags, dwCtrlType,
3725 return msg->control(hCryptMsg,
dwFlags, dwCtrlType, pvCtrlPara);
3729 DWORD dwSignerIndex)
3741 dwSignerIndex, certInfo, &
size))
3753 DWORD *pdwSignerIndex)
3756 DWORD i, signerIndex = 0;
3760 TRACE(
"(%p, %ld, %p, %08lx, %p, %p)\n", hCryptMsg, cSignerStore,
3761 rghSignerStore,
dwFlags, ppSigner, pdwSignerIndex);
3767 *pdwSignerIndex = 0;
3780 for (
i = 0;
i < cSignerStore;
i++)
3791 signerIndex = *pdwSignerIndex;
3804 for (
i = 0; !signerCert &&
i <
count;
i++)
3835 *pdwSignerIndex = signerIndex;
3846 PBYTE pbSignerInfoCountersignature,
DWORD cbSignerInfoCountersignature,
3849 FIXME(
"(%08Ix, %08lx, %p, %ld, %p, %ld, %p): stub\n", hCryptProv,
3850 dwEncodingType, pbSignerInfo, cbSignerInfo, pbSignerInfoCountersignature,
3851 cbSignerInfoCountersignature, pciCountersigner);
3857 PBYTE pbSignerInfoCountersignature,
DWORD cbSignerInfoCountersignature,
3860 FIXME(
"(%08Ix, %08lx, %p, %ld, %p, %ld, %ld, %p, %08lx, %p): stub\n", hCryptProv,
3861 dwEncodingType, pbSignerInfo, cbSignerInfo, pbSignerInfoCountersignature,
3874 TRACE(
"(%08lx, %p, %p, %08lx, %p, %p)\n", dwMsgEncodingType, pCtlInfo,
3875 pSignInfo,
dwFlags, pbEncoded, pcbEncoded);
3886 pSignInfo,
dwFlags, pbEncoded, pcbEncoded);
3900 TRACE(
"(%08lx, %p, %ld, %p, %08lx, %p, %p)\n", dwMsgEncodingType,
3901 pbCtlContent, cbCtlContent, pSignInfo,
dwFlags, pbEncoded, pcbEncoded);
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)
NTSTATUS WINAPI BCryptDestroyKey(BCRYPT_KEY_HANDLE)
NTSTATUS WINAPI BCryptVerifySignature(BCRYPT_KEY_HANDLE, void *, UCHAR *, ULONG, UCHAR *, ULONG, ULONG)
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)
void ContextPropertyList_Free(CONTEXT_PROPERTY_LIST *list)
BOOL WINAPI CRYPT_AsnEncodeSequence(DWORD dwCertEncodingType, struct AsnEncodeSequenceItem items[], DWORD cItem, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
#define POINTER_ALIGN_DWORD_PTR(p)
BOOL CRYPT_AsnEncodePKCSDigestedData(const CRYPT_DIGESTED_DATA *digestedData, void *pvData, DWORD *pcbData)
BOOL WINAPI CRYPT_AsnEncodeOid(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
CONTEXT_PROPERTY_LIST * ContextPropertyList_Create(void)
BOOL CRYPT_AsnDecodeCMSSignedInfo(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_SIGNED_INFO *signedInfo, DWORD *pcbSignedInfo)
HCRYPTPROV WINAPI I_CryptGetDefaultCryptProv(ALG_ID)
BOOL CRYPT_AsnEncodePKCSEnvelopedData(const CRYPT_ENVELOPED_DATA *envelopedData, void *pvData, DWORD *pcbData)
BOOL WINAPI CRYPT_AsnEncodeConstructed(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL CRYPT_EncodeLen(DWORD len, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL CRYPT_EncodeEnsureSpace(DWORD dwFlags, const CRYPT_ENCODE_PARA *pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded, DWORD bytesNeeded)
BOOL WINAPI CRYPT_AsnEncodeOctets(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
BOOL ContextPropertyList_FindProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, PCRYPT_DATA_BLOB blob)
BOOL CRYPT_AsnEncodeCMSSignedInfo(CRYPT_SIGNED_INFO *, void *pvData, DWORD *pcbData)
BOOL CRYPT_AsnDecodePKCSDigestedData(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_DIGESTED_DATA *digestedData, DWORD *pcbDigestedData)
#define ALIGN_DWORD_PTR(x)
BOOL ContextPropertyList_SetProperty(CONTEXT_PROPERTY_LIST *list, DWORD id, const BYTE *pbData, size_t cbData)
BOOL CRYPT_AsnDecodePKCSEnvelopedData(const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, CRYPT_ENVELOPED_DATA *envelopedData, DWORD *pcbEnvelopedData)
#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)
BOOL cng_prepare_signature(const char *alg_oid, BYTE *encoded_sig, DWORD encoded_sig_len, BYTE **sig_value, DWORD *sig_len)
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 CryptImportPublicKeyInfoEx2(DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo, BCRYPT_KEY_HANDLE *phKey)
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)
static BOOL CRYPT_CopyAttr(void *pvData, DWORD *pcbData, const CRYPT_ATTRIBUTES *attr)
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 cng_verify_msg_signature(CMSG_CMS_SIGNER_INFO *signer, HCRYPTHASH hash, CERT_PUBLIC_KEY_INFO *key_info)
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 BOOL extract_hash(HCRYPTHASH hash, BYTE **data, DWORD *size)
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 __EXCEPT_PAGE_FAULT
static const WCHAR version[]
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
#define STATUS_ACCESS_VIOLATION
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 LPCWSTR LPVOID pvReserved
static HCRYPTPROV crypt_prov
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
_In_ _Out_writes_opt_ pcchValueName _Inout_opt_ LPDWORD _Out_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD pcbData
CRYPT_DATA_BLOB detached_data
CEnvelopedDecodeMsg enveloped_data
union _CDecodeMsg::@343 u
CSignedMsgData signed_data
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
#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
BOOL(WINAPI * PFN_CMSG_IMPORT_KEY_TRANS)(PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey)
#define CMSG_SIGNED_AND_ENVELOPED
#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
#define CALG_OID_INFO_PARAMETERS
#define CMSG_ENCODED_MESSAGE
#define CMSG_ENCODED_SIGNER
#define CALG_OID_INFO_CNG_ONLY
#define CMSG_CMS_SIGNER_INFO_PARAM
#define X509_ASN_ENCODING
#define CMSG_INNER_CONTENT_TYPE_PARAM
#define CRYPT_DECODE_ALLOC_FLAG
#define CMSG_CTRL_DECRYPT
struct _CMSG_SIGNER_INFO CMSG_SIGNER_INFO
#define CMSG_RECIPIENT_INFO_PARAM
BOOL(WINAPI * PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags, void *pvReserved)
#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
#define CMSG_SIGNER_ONLY_FLAG
#define CMSG_SIGNER_UNAUTH_ATTR_PARAM
#define CMSG_USE_SIGNER_INDEX_FLAG
BOOL(WINAPI * PFN_CMSG_EXPORT_KEY_TRANS)(PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo, PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo, DWORD dwFlags, void *pvReserved)
#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
struct _CMSG_CMS_SIGNER_INFO CMSG_CMS_SIGNER_INFO
#define CMSG_SIGNER_COUNT_PARAM
#define PKCS_7_ASN_ENCODING
#define CMSG_HASH_ALGORITHM_PARAM
#define CMSG_SIGNER_AUTH_ATTR_PARAM
#define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION
#define CMSG_HASH_DATA_PARAM
#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
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#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