Пример создания подписанного сообщения с помощью упрощённых функций КриптоПро ЭЦП SDK
C++
CRYPT_SIGN_MESSAGE_PARA signPara = { sizeof(signPara) };
signPara.dwMsgEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
signPara.pSigningCert = pContext; // 0 for window
signPara.HashAlgorithm.pszObjId = szOID_OIWSEC_sha1;
CADES_SIGN_MESSAGE_PARA para = { sizeof(para) };
para.pSignMessagePara = &signPara;
std::vector<BYTE> data(10,25);
const BYTE *pbToBeSigned[] = { &data[0] };
DWORD cbToBeSigned[] = { (DWORD)data.size() };
PCRYPT_DATA_BLOB pSignedMessage = 0;
if(!CadesSignMessage(¶,FALSE,1,pbToBeSigned,cbToBeSigned,
&pSignedMessage))
{
std::cout << "CadesSignMessage() failed" << std::endl;
return empty;
}
std::vector<BYTE> message(pSignedMessage->cbData);
std::copy(pSignedMessage->pbData,
pSignedMessage->pbData + pSignedMessage->cbData,message.begin());
if(!CadesFreeBlob(pSignedMessage))
{
std::cout << "CadesFreeBlob() failed" << std::endl;
return empty;
}
return message;