Отображение отделенной усовершенствованной электронной цифровой
подписи при помощи упрощенных функций КриптоПро ЭЦП 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);