Статус: Участник
Группы: Участники
Зарегистрирован: 11.12.2024(UTC) Сообщений: 10  Откуда: Москва
|
Коллеги добрый день. Помогите разобраться. Используем csp v5.0.10013 KC1. Пытаемся подписать сообщение ключом с алгоритмом 1.2.643.7.1.1.1.2 и хеш алгоритмом 1.2.643.7.1.1.2.3 с помощью низкоуровневого и высокоуровневого апи криптопро csp. Но в результате проверки подписи видим что алгоритм ключа попадает в то место где должен быть алгоритм подписи указан и в итоге вместо ожидаемого 1.2.643.7.1.1.3.3 получаем 1.2.643.7.1.1.1.2 и в результате ошибку JCSP: no such algorithm: 1.2.643.7.1.1.1.2 for provider JCSP. Стали разбираться и нашли что в файле wincrypt.h сказано: Цитата:If HashEncryptionAlgorithm is present and not NULL its used instead of the SigningCert's PublicKeyInfo.Algorithm. Попробовали применить, но похоже что значение HashEncryptionAlgorithm игнорируется и в методе CryptSignMessage и в CryptMsgOpenToEncode. Подскажите пожалуйста, что делаем не так? Код: CryptAcquireCertificatePrivateKey(
pCertCtx_,
0,
NULL,
&hProv,
&dwKeySpec,
&fCallerFreeProv)
EncodedTime signTime = getCurrentEncodedTime();
result.date = signTime.localTime;
CRYPT_ATTR_BLOB attrBlob{};
CRYPT_ATTRIBUTE attr{};
attrBlob.cbData = signTime.asn1Data.size();
attrBlob.pbData = signTime.asn1Data.data();
attr.pszObjId = (LPSTR)szOID_RSA_signingTime;
attr.cValue = 1;
attr.rgValue = &attrBlob;
CRYPT_OBJID_BLOB emptyParam;
emptyParam.cbData = 0;
emptyParam.pbData = nullptr;
CRYPT_ALGORITHM_IDENTIFIER hashAlgo{};
CRYPT_ALGORITHM_IDENTIFIER signAlgo{};
[b]hashAlgo.pszObjId = (LPSTR)szOID_CP_GOST_R3411_12_512;
signAlgo.pszObjId = (LPSTR)szOID_CP_GOST_R3411_12_512_R3410[/b];
signAlgo.Parameters = emptyParam;
hashAlgo.Parameters = emptyParam;
CMSG_SIGNER_ENCODE_INFO signer{};
signer.cbSize = sizeof(signer);
signer.pCertInfo = pCertCtx_->pCertInfo;
signer.hCryptProv = hProv;
signer.dwKeySpec = dwKeySpec;
signer.HashAlgorithm = hashAlgo;
signer.HashEncryptionAlgorithm = signAlgo;
signer.pvHashAuxInfo = nullptr;
signer.pvHashEncryptionAuxInfo = nullptr;
signer.cAuthAttr = 1;
signer.rgAuthAttr = &attr;
CMSG_SIGNED_ENCODE_INFO signedInfo{};
signedInfo.cbSize = sizeof(signedInfo);
signedInfo.cSigners = 1;
signedInfo.rgSigners = &signer;
signedInfo.cCertEncoded = 0;
signedInfo.rgCertEncoded = NULL;
hMsg = CryptMsgOpenToEncode(
PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
CMSG_DETACHED_FLAG,
CMSG_SIGNED,
&signedInfo,
NULL,
NULL
);
CryptMsgUpdate(hMsg, reinterpret_cast<const BYTE*>(dataToSign.bytes()), dataToSign.length, TRUE)
Отредактировано пользователем 9 октября 2025 г. 11:54:41(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close