Отображение отделенной усовершенствованной электронной цифровой
подписи при помощи упрощенных функций КриптоПро ЭЦП SDK с получением отдельных страниц свойств УЭЦП
C++
const BYTE *pDataArray[1]; pDataArray[0] = &original[0]; DWORD cDataArray[1]; cDataArray[0] = (DWORD)original.size(); CADES_VIEW_SIGNATURE_PARA viewPara = { sizeof(viewPara) }; viewPara.dwMsgAndCertEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING; LPPROPSHEETPAGEW *pPropSheetPages = NULL; DWORD cPropSheetPages = 0; if (!CadesViewSignatureDetached(0, &viewPara, &detachedMsg[0], (DWORD)detachedMsg.size(), 1, pDataArray, cDataArray, &pPropSheetPages, &cPropSheetPages)) { CadesFreeSignaturePropPages(pPropSheetPages, cPropSheetPages); std::cout << "CadesViewSignatureDetached() failed." << std::endl; return; } std::vector<HPROPSHEETPAGE> pages(cPropSheetPages); for (DWORD i=0; i<cPropSheetPages; i++) { pages[i] = ::CreatePropertySheetPage(pPropSheetPages[i]); } PROPSHEETHEADER psh = {}; psh.pszCaption = L"Подпись"; psh.dwSize = sizeof(PROPSHEETHEADER); psh.hwndParent = NULL; psh.hInstance = _AtlBaseModule.m_hInst; psh.nPages = cPropSheetPages; psh.phpage = &pages[0]; psh.dwFlags = PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP | PSH_USECALLBACK; INT_PTR ret; ret = ::PropertySheet(&psh); if (ret < 0) { std::cout << "View Detached Signature failed." << std::endl; } CadesFreeSignaturePropPages(pPropSheetPages, cPropSheetPages);