Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Возможно, что существует ошибка в реализации функции CryptMsgGetParam в Linux.
При первичной загрузке корректного криптографического сообщения (CryptMsgOpenToDecode -> CryptMsgUpdate) с типом CMSG_SIGNED (signed data) последующий вызов:
CryptMsgGetParam( ...CMSG_VERSION_PARAM... )
приводит к ошибке 0x80091004 (Недопустимый тип криптографического сообщения).
Вместе с тем вызов CryptMsgGetParam( ...CMSG_TYPE_PARAM... ) заканчивается корректно и возвращает 2 (CMSG_SIGNED). Ошибка воспроизводится на абсолютно любой присоединённой подписи. Тот же самый код в Windows прекрасно работает.
Прошу проверить наличие/отсутствие ошибки в реализации CryptMsgGetParam от Крипто-ПРО. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Действительно, реализации этого параметра для SignedMessage не было :(. В следующей версии будет исправлено. Спасибо за сообщение об ошибке. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Также скорее всего точно такая же ошибка есть и для другого параметра:
CryptMsgGetParam( ...CMSG_SIGNER_HASH_ALGORITHM_PARAM... )
Опять же ошибка появляется на сообщении типа CMSG_SIGNED (присоединённая подпись).
|
С уважением, Юрий Строжевский |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Напишу сюда же, ибо опять ошибка в Linux и опять с SignedMessage.
При создании контекста криптографического сообщения с помощью явного задания типа загружаемого контента
CryptMsgOpenToDecode( ...dwMsgType = CMSG_SIGNED... )
и последующей загрузкой присоединённой подписи с помощью CryptMsgUpdate (загрузка производится блоками по 1024 байта, если это важно) при загрузке финального (именно только одного блока, предыдущие загружаются без ошибок) блока функция CryptMsgUpdate возвращает ошибку 0x57 (Неверный параметр). В случае же когда в CryptMsgOpenToDecode используется автоопределение типа загружаемого контента (то есть dwMsgType = 0) вся загрузка присоединённой подписи проходит отлично. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Цитата:CryptMsgGetParam( ...CMSG_SIGNER_HASH_ALGORITHM_PARAM... ) Ни разу не возникало потребности в этом параметре. Его реализации нет, и скорее всего в ближайшее время не будет. Цитата:Напишу сюда же, ибо опять ошибка в Linux и опять с SignedMessage.
При создании контекста криптографического сообщения с помощью явного задания типа загружаемого контента
CryptMsgOpenToDecode( ...dwMsgType = CMSG_SIGNED... )
и последующей загрузкой присоединённой подписи с помощью CryptMsgUpdate (загрузка производится блоками по 1024 байта, если это важно) при загрузке финального (именно только одного блока, предыдущие загружаются без ошибок) блока функция CryptMsgUpdate возвращает ошибку 0x57 (Неверный параметр). В случае же когда в CryptMsgOpenToDecode используется автоопределение типа загружаемого контента (то есть dwMsgType = 0) вся загрузка присоединённой подписи проходит отлично. Это не ошибка. При указании типа сообщения явно в CryptOpenToDecode, функция CryptMsgUpdate ожидает на входе получить сообщение с обрезанным Content Type. Соответственно, если его подать туда целиком, получится ошибка декодирования. Надо отдать должное, из описания на MSDN, это можно понять только телепатически. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Точно такая же проблема с получение информации по CRL из SignedMessage.
То есть завершаются с ошибками вызовы:
CryptMsgGetParam( ...CMSG_CRL_COUNT_PARAM.. ) CryptMsgGetParam( ...CMSG_CRL_PARAM.. ) |
С уважением, Юрий Строжевский |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Автор: cross Это не ошибка. При указании типа сообщения явно в CryptOpenToDecode, функция CryptMsgUpdate ожидает на входе получить сообщение с обрезанным Content Type. Соответственно, если его подать туда целиком, получится ошибка декодирования. Надо отдать должное, из описания на MSDN, это можно понять только телепатически.
Что значит "с обрезанным Content Type"? Если имеется в виду "attached\detached" то для этого у CryptMsgOpenToDecode есть отдельный флаг. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Цитата:Что значит "с обрезанным Content Type"? Если имеется в виду "attached\detached" то для этого у CryptMsgOpenToDecode есть отдельный флаг. Обычное сообщение начинается примерно вот так Код: <30 82 19 8C 06 09 2A 86 48 86 F7 0D 01 07 02 A0 82 19 7D 30 82 19 79 02>
0 6540: SEQUENCE {
<06 09 2A 86 48 86 F7 0D 01 07 02>
4 9: OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
<A0 82 19 7D 30 82 19 79 02 01 01 31 0C 30 0A 06 06 2A 85 03 02 02 09 05>
15 6525: [0] {
<30 82 19 79 02 01 01 31 0C 30 0A 06 06 2A 85 03 02 02 09 05 00 30 1F 06>
19 6521: SEQUENCE {
<02 01 01>
23 1: INTEGER 1
<31 0C 30 0A 06 06 2A 85 03 02 02 09 05 00>
26 12: SET {
<30 0A 06 06 2A 85 03 02 02 09 05 00>
28 10: SEQUENCE {
<06 06 2A 85 03 02 02 09>
CryptMsgUpdate при явном указании типа при открытии хочет что бы первых n байт с <06 09 2A 86 48 86 F7 0D 01 07 02> OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2) не было. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Ок, спасибо за разъяснения. На будущее - в документации к Crypto API то, что вы описали, называют "inner content". |
С уважением, Юрий Строжевский |
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Цитата: Точно такая же проблема с получение информации по CRL из SignedMessage.
То есть завершаются с ошибками вызовы:
CryptMsgGetParam( ...CMSG_CRL_COUNT_PARAM.. ) CryptMsgGetParam( ...CMSG_CRL_PARAM.. )
Вот эти две функции должны работать. Юрий можно от вас получить небольшой примерчик который воспроизводит ошибку? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close