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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Юрий  
#1 Оставлено : 1 июля 2013 г. 6:19:55(UTC)
Юрий

Статус: Активный участник

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Во-первых возможно у вас неточность в документации: для функции CryptDecodeObject есть поддержка параметра PKCS7_SIGNER_INFO, а для CryptEncodeObject - нет.

Во-вторых когда я пытаюсь получить результат от CryptEncodeObject( ...PKCS7_SIGNER_INFO... ), то получаю странную ошибку 0x80092002 (Ошибка при шифровании или расшифровывании).
Учитывая то, что "AuthAttrs" и "EncryptedHash" у структуры CMSG_SIGNER_INFO заполнены, никакого шифрования там быть не должно.

P.S.: Да и вообще там никакого шифрования быть не должно - это функция простого кодирования структур в ASN.1 и более ничего там быть не должно.

Отредактировано пользователем 1 июля 2013 г. 6:21:53(UTC)  | Причина: добавил P.S.

С уважением,
Юрий Строжевский
Offline Юрий  
#2 Оставлено : 1 июля 2013 г. 7:05:33(UTC)
Юрий

Статус: Активный участник

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Мда, точно такая же ошибка при использовании CryptEncodeObject( ...X509_ALGORITHM_IDENTIFIER... ) с "HashEncryptionAlgorithm" из CMSG_SIGNER_INFO.
С уважением,
Юрий Строжевский
Offline Максим Коллегин  
#3 Оставлено : 1 июля 2013 г. 9:10:46(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Спасибо, посмотрим, поправим.
Знания в базе знаний, поддержка в техподдержке
Offline cross  
#4 Оставлено : 23 июля 2013 г. 10:38:37(UTC)
Анатолий Беляев

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Цитата:
Во-первых возможно у вас неточность в документации: для функции CryptDecodeObject есть поддержка параметра PKCS7_SIGNER_INFO, а для CryptEncodeObject - нет.

Во-вторых когда я пытаюсь получить результат от CryptEncodeObject( ...PKCS7_SIGNER_INFO... ), то получаю странную ошибку 0x80092002 (Ошибка при шифровании или расшифровывании).
Учитывая то, что "AuthAttrs" и "EncryptedHash" у структуры CMSG_SIGNER_INFO заполнены, никакого шифрования там быть не должно.

P.S.: Да и вообще там никакого шифрования быть не должно - это функция простого кодирования структур в ASN.1 и более ничего там быть не должно.

Нет, в документации написано правильно.
Насчет кода ошибки, это ошибка перевода в русской версии Win. Оригинал выглядит так
Цитата:

/* An error occurred during encode or decode operation.*/
/**/
#define CRYPT_E_BAD_ENCODE _HRESULT_TYPEDEF_(0x80092002L)
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline Юрий  
#5 Оставлено : 23 июля 2013 г. 11:06:33(UTC)
Юрий

Статус: Активный участник

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Ладно, пусть так. Спасибо за информацию!
Всё-равно я уже сделал собственную функцию кодирования SignerInfo.
С уважением,
Юрий Строжевский
Offline Миха  
#6 Оставлено : 13 января 2014 г. 4:04:22(UTC)
Миха

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

Группы: Участники
Зарегистрирован: 06.09.2013(UTC)
Сообщений: 14

Такая же ошибка возникает. Как исправить?

Код:

CMSG_SIGNER_INFO  signer;

signer.Issuer = pCertcontext->pCertInfo->Issuer;
signer.SerialNumber = pCertcontext->pCertInfo->SerialNumber;
signer.EncryptedHash.pbData= pbHash;
signer.EncryptedHash.cbData = cbHash;
signer.AuthAttrs.cAttr = 0;
signer.AuthAttrs.rgAttr = nil;
signer.UnauthAttrs.cAttr = 0;
signer.UnauthAttrs.rgAttr = nil;



DWORD sizePKCS = 0;

BYTE *signaturePKCS = 0;

if (!CryptEncodeObject(
		PKCS_7_ASN_ENCODING,
		PKCS7_SIGNER_INFO,
		&signer,
		NULL,
		&sizePKCS)) {
	printf("Error CryptEncodeObject() = 0x%x\n", CSP_GetLastError());
}

signaturePKCS = (BYTE *) malloc(sizePKCS);

if (!CryptEncodeObject(
		PKCS_7_ASN_ENCODING,
		PKCS7_SIGNER_INFO,
		&signer,
		signaturePKCS,
		&sizePKCS)) {
	printf("Error CryptEncodeObject() = %d\n", CSP_GetLastError());
}

Отредактировано пользователем 13 января 2014 г. 4:05:01(UTC)  | Причина: Не указана

Offline Юрий  
#7 Оставлено : 13 января 2014 г. 7:10:44(UTC)
Юрий

Статус: Активный участник

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Автор: Миха Перейти к цитате
Такая же ошибка возникает. Как исправить?

Для Linux функция CryptEncodeObject реализована самими разработчиками компании "Крипто-Про".
И для этой функции эти разработчики убрали кодирование PKCS7_SIGNER_INFO. Нет его. И это прописано в документации.

Так что есть два выхода:
1) Ждать пока разработчики "Крипто-Про" доработают CryptEncodeObject;
2) Реализовать собственное кодирование для PKCS7_SIGNER_INFO;

Я выбрал второй вариант.

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