Статус: Участник
Группы: Участники
Зарегистрирован: 23.11.2016(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 2 раз
|
Делаю как в примере: Код:
bool verifyCadesSign(HCRYPTHASH hHash, std::vector<unsigned char> sign)
unsigned long hashSize;
//std::unique_ptr<unsigned char[]> getBinaryHash(HCRYPTHASH hHash, unsigned long& size)
auto hashPtr = getBinaryHash(hHash, hashSize);
CRYPT_VERIFY_MESSAGE_PARA cryptVerifyPara = {sizeof(cryptVerifyPara)};
cryptVerifyPara.dwMsgAndCertEncodingType = X509_ASN_ENCODING;
CADES_VERIFICATION_PARA cadesVerifyPara = {sizeof(cadesVerifyPara)};
cadesVerifyPara.dwCadesType = CADES_T;
CADES_VERIFY_MESSAGE_PARA verifyPara = {sizeof(verifyPara)};
verifyPara.pVerifyMessagePara = &cryptVerifyPara;
verifyPara.pCadesVerifyPara = &cadesVerifyPara;
CRYPT_ALGORITHM_IDENTIFIER alg{0};
memset(&alg, 0, sizeof(CRYPT_ALGORITHM_IDENTIFIER));
size_t length = strlen(szOID_CP_GOST_R3411);
alg.pszObjId = (LPSTR)malloc(length + 1);
memcpy(alg.pszObjId, szOID_CP_GOST_R3411, length + 1);
PCADES_VERIFICATION_INFO pVerifyInfo = 0;
BOOL res = CadesVerifyHash(&verifyPara, 0, sign.data(), sign.size(), hashPtr.get(), hashSize, &alg, &pVerifyInfo);
DWORD err = GetLastError(); //0x80070057
Возвращает ошибку 0x80070057 Что означает эта ошибка и что может быть не так? Проверяемую подпись формировал сам с помощью CadesSignHash.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Попробуйте выставить Цитата:dwMsgAndCertEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING; Еще можно попробовать проверить по типу CADES_BES, может у вас старый SDK который еще не поддерживает CADES_T. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 23.11.2016(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 2 раз
|
Автор: cross  Попробуйте выставить Цитата:dwMsgAndCertEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING; Еще можно попробовать проверить по типу CADES_BES, может у вас старый SDK который еще не поддерживает CADES_T. Добавление PKCS_7_ASN_ENCODING решило проблему. Заработало в том числе и CADES_T. А что же так жеcтко то? И есть ли возможность в случае получения ошибки CADES_VERIFY_NO_CHAIN все же проверить целостность сообщения на основе открытого ключа сертифиаката, а уж цепочка на усмотрение проверяющего. Или в любом случае надо вытаскивать корневой сертификат цепочки и прописывать в системе как доверенный? Отредактировано пользователем 31 января 2017 г. 17:19:23(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Это тип кодировки сообщения, без правильного декодирования проверить подпись не получится. Лучше всего если вы будете добавлять сертификаты в доверенный и проверять подпись полностью. Если же все таки хочется проверять только целостность сообщения то можно конечно разобрать подписанное сообщение, достать 64 байта подписи и проверить только их, но это достаточно трудоемко. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 23.11.2016(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 2 раз
|
Автор: cross  Это тип кодировки сообщения, без правильного декодирования проверить подпись не получится. Именно сообщения, а не сертификата? Вроде везде, в том числе и при подписании, использую только X509_ASN_ENCODING. От куда же тогда берется PKCS_7_ASN_ENCODING?
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close