Развернуть все
Свернуть все

Отображение отделённой подписи (с передачей страниц)

Отображение отделенной усовершенствованной электронной цифровой

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