Статус: Активный участник
Группы: Участники
Зарегистрирован: 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. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Мда, точно такая же ошибка при использовании CryptEncodeObject( ...X509_ALGORITHM_IDENTIFIER... ) с "HashEncryptionAlgorithm" из CMSG_SIGNER_INFO. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
Спасибо, посмотрим, поправим. |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 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)
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Ладно, пусть так. Спасибо за информацию! Всё-равно я уже сделал собственную функцию кодирования SignerInfo. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Автор: Миха Такая же ошибка возникает. Как исправить? Для Linux функция CryptEncodeObject реализована самими разработчиками компании "Крипто-Про". И для этой функции эти разработчики убрали кодирование PKCS7_SIGNER_INFO. Нет его. И это прописано в документации. Так что есть два выхода: 1) Ждать пока разработчики "Крипто-Про" доработают CryptEncodeObject; 2) Реализовать собственное кодирование для PKCS7_SIGNER_INFO; Я выбрал второй вариант. |
С уважением, Юрий Строжевский |
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close