Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline dosik  
#1 Оставлено : 30 января 2017 г. 2:05:56(UTC)
dosik

Статус: Участник

Группы: Участники
Зарегистрирован: 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.
Offline cross  
#2 Оставлено : 31 января 2017 г. 16:41:10(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Попробуйте выставить
Цитата:
dwMsgAndCertEncodingType =
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;

Еще можно попробовать проверить по типу CADES_BES, может у вас старый SDK который еще не поддерживает CADES_T.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline dosik  
#3 Оставлено : 31 января 2017 г. 17:15:56(UTC)
dosik

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline cross  
#4 Оставлено : 31 января 2017 г. 17:52:34(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Это тип кодировки сообщения, без правильного декодирования проверить подпись не получится.
Лучше всего если вы будете добавлять сертификаты в доверенный и проверять подпись полностью. Если же все таки хочется проверять только целостность сообщения то можно конечно разобрать подписанное сообщение, достать 64 байта подписи и проверить только их, но это достаточно трудоемко.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline dosik  
#5 Оставлено : 3 февраля 2017 г. 13:34:58(UTC)
dosik

Статус: Участник

Группы: Участники
Зарегистрирован: 23.11.2016(UTC)
Сообщений: 14
Российская Федерация

Сказал(а) «Спасибо»: 2 раз
Автор: cross Перейти к цитате
Это тип кодировки сообщения, без правильного декодирования проверить подпись не получится.


Именно сообщения, а не сертификата? Вроде везде, в том числе и при подписании, использую только X509_ASN_ENCODING. От куда же тогда берется PKCS_7_ASN_ENCODING?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.