Пример усовершенствования подписи 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;
}
message.resize(size);
if(!CryptMsgClose(hMsg))
{
std::cout << "CryptMsgClose() failed" << std::endl;
return empty;
}
std::cout << "Signature was enhanced successfully." << std::endl;
return message;