Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16 Откуда: Киров Сказал(а) «Спасибо»: 2 раз
|
Добрый день.
Кто-то формировал ЭЦП на Delphi Столкнулся с проблемой при формировании подписи, пытаюсь использовать функцию CadesSignMessage
структуры: CADES_SIGN_PARA CADES_MESSAGE_PARA не определены. Использую wcrypt2.pas, смотрел JwaWinCrypt.pas тоже самое. Описание отсутствует. Поделитесь опытом. Или все таки придется с С++ конвертировать?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2035 раз в 1579 постах
|
Здравствуйте. Автор: kaper_75 Или все таки придется с С++ конвертировать?
Да. Поищите на форуме, кажется, были примеры |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2035 раз в 1579 постах
|
Найти заголовки можно здесь: \Program Files (x86)\Crypto Pro\SDK\include\cadescom.h |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2035 раз в 1579 постах
|
После установки КриптоПро ЭЦП SDK
или извлечь без установки из \cadessdk.msi\Data1.cab\
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 393 раз в 366 постах
|
Посоветую, так как тоже пишу на Паскале. wcrypt2 вообще лучше не использовать, там неверные некоторые типы, скомпилировать сможете, но при запуске будут ошибки, кое-где на пустом месте. Особенно если компилировать под win64. JwaWinCrypt из комплекта Delphi тоже изрядно устарел, лучше скачать новую версию исходников Jwa* и заменить все Jwa* модули, в новой версии уже есть все типы, остается сконвертировать только константы из заголовочных файлов КриптоПро. Если определения некоторых функций закомментированы (CryptStringToBinary) - это проблемные функции, не правьте их определения, просто не используйте. Ну и есть обычные странности Паскаля в одном модуле объявлены CryptoAPI функции как var сам_тип, в другом как указатель_на_сам_тип, поэтому при переходе на другой модуль приходится вставлять/убирать взятие адреса @. а иногда и преобразование к Pointer.
Хотя называются типы по-другому и функция CryptSignMessage. Если не ошибаюсь, формирует как раз Cades. В сферу моих интересов cades не попадает (уже куча программ подписания cades), так что не проверял.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16 Откуда: Киров Сказал(а) «Спасибо»: 2 раз
|
правильно ли я понял что функция CryptSignMessage - создает подпись в формате CADES-BES? ЕЕ отличие от CasedSignMessage в том что ее надо вызвать 2 раза для определения размера данных?. Тюею мне фактически достаточно данной функции
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 393 раз в 366 постах
|
Насчет cades-bes не проверял, хорошо бы увидеть подтверждение. Два вызова CryptSignMessage нужны, только если все делать "по правилам" без перерасхода памяти. Сама функция при втором вызове не проверяет был первый "прицельный" вызов или нет. Если заранее выделить буфер больше чем ожидаемый размер данных, можно сразу делать второй вызов без "прицеливания". Если этот вызов вернет FALSE и GetLastError вернет ERROR_INSUFFICIENT_BUFFER, то в переменную длины будет записан нужный размер буфера, можно перевыделить буфер нового размера и вызвать снова. В этом случае будет один вызов если угадали с первого раза и два вызова если первый раз вызвали неудачно. Смотря как выстроите логику приложения, но, как видите, в примерах демонстрируется реализация "по правилам", не возвращающая FALSE (про коды ошибок ниже). Два вызова любой функции, работающей с закрытым ключом, как правило, потребуют так же 2 раза ввести пин-код, что пользователем обычно воспринимается как "ой, первый раз ввел неправильно" и вызывает приступ паники. Поэтому если в программе ориентируетесь на большой буфер и один вызов это будет легче восприниматься для пользователя, хотя и "не по правилам". В каком-то из примеров видел комментарий про "магический" размер подходящий для cades-bes с первого раза - точно цифру не вспомню, приблизительно 128 Кбайт, по нынешним меркам мелочь. Естественно, если вместо cades-bes будет расширение стандарта, то "магический" размер тоже увеличится. Заметьте, при возврате TRUE какой-либо функцией GetLastError() частенько возвращает ненулевой код ошибки (например, если криптопровайдер не смог загрузить пару необязательных библиотек). Если хотите узнать код ошибки конкретной операции не забывайте перед операцией сделать вызов SetLastError(0). Про количество вызовов и коды ошибок применимо к большинству stdcall winapi функций, не только к CryptSignMessage. Отредактировано пользователем 16 октября 2018 г. 7:07:55(UTC)
| Причина: Не указана
|
1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16 Откуда: Киров Сказал(а) «Спасибо»: 2 раз
|
Добрый день. Можно ли как то понять что сформированная подпись соответствует формату CADES-BES. Проблема в том что подпись формируем с использованием функции CadesSignMessage, но налоговая утверждает что данная подпись не в формате CADES-BES.
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 393 раз в 366 постах
|
Автор: kaper_75 Добрый день. Можно ли как то понять что сформированная подпись соответствует формату CADES-BES. Проблема в том что подпись формируем с использованием функции CadesSignMessage, но налоговая утверждает что данная подпись не в формате CADES-BES. В подробности cades не вникал, но в целом: если результат подписания записать в файл (декодировать из base64 если результат был в base64), а потом открыть программами для работы с соответствующей кодировкой (скорее всего ASN.1), то сверяясь по списку полей из самого стандарта cades-bes можно визуально определить присутствуют ли обязательные поля стандарта cades-bes и отсутствуют ли лишние поля стандарта cades-bes. При желании конечно можно и программу проверки на соответствия написать. Еще можно попробовать программами проверки ЭП прогнать (которых как писал выше уже очень много, на слуху обычно КриптоАрм), возможно какая-то из них показывает подтип cades.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close