Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 807 of file asn.c.
{ BOOL ret = FALSE; TRACE("(0x%08x, %s, %p, %p, %p)\n", dwCertEncodingType, debugstr_a(lpszStructType), pvStructInfo, pbEncoded, pcbEncoded); __TRY { const SPC_SP_OPUS_INFO *info = pvStructInfo; if (info->pMoreInfo && info->pMoreInfo->dwLinkChoice != SPC_URL_LINK_CHOICE && info->pMoreInfo->dwLinkChoice != SPC_MONIKER_LINK_CHOICE && info->pMoreInfo->dwLinkChoice != SPC_FILE_LINK_CHOICE) SetLastError(E_INVALIDARG); else if (info->pPublisherInfo && info->pPublisherInfo->dwLinkChoice != SPC_URL_LINK_CHOICE && info->pPublisherInfo->dwLinkChoice != SPC_MONIKER_LINK_CHOICE && info->pPublisherInfo->dwLinkChoice != SPC_FILE_LINK_CHOICE) SetLastError(E_INVALIDARG); else { struct AsnEncodeSequenceItem items[3] = { { 0 } }; struct AsnConstructedItem constructed[3] = { { 0 } }; struct AsnEncodeTagSwappedItem swapped; DWORD cItem = 0, cConstructed = 0; if (info->pwszProgramName) { swapped.tag = ASN_CONTEXT; swapped.pvStructInfo = info->pwszProgramName; swapped.encodeFunc = CRYPT_AsnEncodeBMPString; constructed[cConstructed].tag = 0; constructed[cConstructed].pvStructInfo = &swapped; constructed[cConstructed].encodeFunc = CRYPT_AsnEncodeSwapTag; items[cItem].pvStructInfo = &constructed[cConstructed]; items[cItem].encodeFunc = CRYPT_AsnEncodeConstructed; cConstructed++; cItem++; } if (info->pMoreInfo) { constructed[cConstructed].tag = 1; constructed[cConstructed].pvStructInfo = info->pMoreInfo; constructed[cConstructed].encodeFunc = WVTAsn1SpcLinkEncode; items[cItem].pvStructInfo = &constructed[cConstructed]; items[cItem].encodeFunc = CRYPT_AsnEncodeConstructed; cConstructed++; cItem++; } if (info->pPublisherInfo) { constructed[cConstructed].tag = 2; constructed[cConstructed].pvStructInfo = info->pPublisherInfo; constructed[cConstructed].encodeFunc = WVTAsn1SpcLinkEncode; items[cItem].pvStructInfo = &constructed[cConstructed]; items[cItem].encodeFunc = CRYPT_AsnEncodeConstructed; cConstructed++; cItem++; } ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, cItem, pbEncoded, pcbEncoded); } } __EXCEPT_PAGE_FAULT { SetLastError(STATUS_ACCESS_VIOLATION); } __ENDTRY return ret; }