Здравствуйте. Подскажите пожалуйста.
Пробуем создать используя функции libcapi20 раздельную подпись в которой будет только идентификатор ключа подписанта
заполняем структуры
memset(&signerInfo, 0, sizeof(CMSG_SIGNER_ENCODE_INFO));
signerInfo.cbSize = sizeof(CMSG_SIGNER_ENCODE_INFO);
signerInfo.SignerId.dwIdChoice = CERT_ID_KEY_IDENTIFIER;
signerInfo.SignerId.f_name.KeyId.cbData = keyID.cbData;
signerInfo.SignerId.f_name.KeyId.pbData = keyID.pbData;
signerInfo.pCertInfo = nullptr;
signerInfo.hCryptProv = hCryptProv;
signerInfo.dwKeySpec = dwKeySpec;
signerInfo.HashAlgorithm.pszObjId = (LPSTR)szOID_CP_GOST_R3411_12_256;
memset(&signedInfo, 0, sizeof(CMSG_SIGNED_ENCODE_INFO));
signedInfo.cbSize = sizeof(CMSG_SIGNED_ENCODE_INFO);
signedInfo.cSigners = 1;
signedInfo.rgSigners = &signerInfo;
signedInfo.cCertEncoded = 0;
signedInfo.rgCertEncoded = nullptr;
и получаем аварийное завершение при вызове
hMsg = СryptMsgOpenToEncode(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
CMSG_DETACHED_FLAG,
CMSG_SIGNED,
&signedInfo,
nullptr,
nullptr);
если указываем вместо
signerInfo.SignerId.dwIdChoice = CERT_ID_KEY_IDENTIFIER;
signerInfo.SignerId.f_name.KeyId.cbData = keyID.cbData;
signerInfo.SignerId.f_name.KeyId.pbData = keyID.pbData;
signerInfo.pCertInfo = nullptr;
только
signerInfo.pCertInfo = pSignerCert->pCertInfo;
то подпись формируется успешно, но с данными структуры pCertInfo
Направте пожалуйста, как сделать раздельную подпись в которой будет только идентификатор ключа подписанта
Отредактировано пользователем 15 мая 2025 г. 10:30:42(UTC)
| Причина: Не указана