Пример усовершенствования подписи CAdES-BES до подписи CAdES-X Long Type 1 с помощью низкоуровневых функций КриптоПро ЭЦП SDK
C++
HCRYPTMSG hMsg = CryptMsgOpenToDecode(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0,0,0,0,0); if(!hMsg) { std::cout << "CryptMsgOpenToDecode() failed" << std::endl; return empty; } if(!CryptMsgUpdate(hMsg,&message[0],(DWORD)message.size(),TRUE)) { CryptMsgClose(hMsg); std::cout << "CryptMsgUpdate() failed" << std::endl; return empty; } // Усовершенствование подписи CAdES-BES до CAdES-X Long Type 1 CADES_SIGN_PARA signPara = { sizeof(signPara) }; signPara.dwCadesType = CADES_X_LONG_TYPE_1; if(!CadesMsgEnhanceSignature(hMsg, 0, &signPara)) { CryptMsgClose(hMsg); std::cout << "CadesMsgEnhanceSignature() failed" << std::endl; return empty; } DWORD size = 0; if(!CryptMsgGetParam(hMsg,CMSG_ENCODED_MESSAGE,0,0,&size)) { CryptMsgClose(hMsg); std::cout << "CryptMsgGetParam() failed" << std::endl; return empty; } message.resize(size); if(!CryptMsgGetParam(hMsg,CMSG_ENCODED_MESSAGE,0,&message[0],&size)) { CryptMsgClose(hMsg); std::cout << "CryptMsgGetParam() failed" << std::endl; return empty; } if(!CryptMsgClose(hMsg)) { std::cout << "CryptMsgClose() failed" << std::endl; return empty; } std::cout << "Signature was enhanced successfully." << std::endl; return message;