logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline kaper_75  
#1 Оставлено : 11 октября 2018 г. 15:41:44(UTC)
kaper_75

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

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

Сказал(а) «Спасибо»: 2 раз
Добрый день.

Кто-то формировал ЭЦП на Delphi
Столкнулся с проблемой при формировании подписи, пытаюсь использовать функцию CadesSignMessage

структуры:
CADES_SIGN_PARA
CADES_MESSAGE_PARA
не определены. Использую wcrypt2.pas, смотрел JwaWinCrypt.pas тоже самое. Описание отсутствует.
Поделитесь опытом.
Или все таки придется с С++ конвертировать?
Offline Андрей Писарев  
#2 Оставлено : 11 октября 2018 г. 15:57:43(UTC)
Андрей Писарев

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 7,791
Мужчина
Российская Федерация

Сказал «Спасибо»: 264 раз
Поблагодарили: 1034 раз в 830 постах
Здравствуйте.

Автор: kaper_75 Перейти к цитате

Или все таки придется с С++ конвертировать?


Да.
Поищите на форуме, кажется, были примеры
Offline Андрей Писарев  
#3 Оставлено : 11 октября 2018 г. 16:17:26(UTC)
Андрей Писарев

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 7,791
Мужчина
Российская Федерация

Сказал «Спасибо»: 264 раз
Поблагодарили: 1034 раз в 830 постах
Найти заголовки можно здесь:
\Program Files (x86)\Crypto Pro\SDK\include\cadescom.h
Offline Андрей Писарев  
#4 Оставлено : 11 октября 2018 г. 16:26:43(UTC)
Андрей Писарев

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 7,791
Мужчина
Российская Федерация

Сказал «Спасибо»: 264 раз
Поблагодарили: 1034 раз в 830 постах
После установки КриптоПро ЭЦП SDK
thanks 1 пользователь поблагодарил Андрей Писарев за этот пост.
kaper_75 оставлено 11.10.2018(UTC)
Offline two_oceans  
#5 Оставлено : 12 октября 2018 г. 5:17:30(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 184
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 40 раз в 40 постах
Посоветую, так как тоже пишу на Паскале. wcrypt2 вообще лучше не использовать, там неверные некоторые типы, скомпилировать сможете, но при запуске будут ошибки, кое-где на пустом месте. Особенно если компилировать под win64. JwaWinCrypt из комплекта Delphi тоже изрядно устарел, лучше скачать новую версию исходников Jwa* и заменить все Jwa* модули, в новой версии уже есть все типы, остается сконвертировать только константы из заголовочных файлов КриптоПро. Если определения некоторых функций закомментированы (CryptStringToBinary) - это проблемные функции, не правьте их определения, просто не используйте. Ну и есть обычные странности Паскаля в одном модуле объявлены CryptoAPI функции как var сам_тип, в другом как указатель_на_сам_тип, поэтому при переходе на другой модуль приходится вставлять/убирать взятие адреса @. а иногда и преобразование к Pointer.

Хотя называются типы по-другому и функция CryptSignMessage. Если не ошибаюсь, формирует как раз Cades. В сферу моих интересов cades не попадает (уже куча программ подписания cades), так что не проверял.
Offline kaper_75  
#6 Оставлено : 15 октября 2018 г. 11:56:57(UTC)
kaper_75

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

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

Сказал(а) «Спасибо»: 2 раз
правильно ли я понял что функция CryptSignMessage - создает подпись в формате CADES-BES? ЕЕ отличие от CasedSignMessage в том что ее надо вызвать 2 раза для определения размера данных?. Тюею мне фактически достаточно данной функции
Offline two_oceans  
#7 Оставлено : 16 октября 2018 г. 3:59:09(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 184
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 40 раз в 40 постах
Насчет cades-bes не проверял, хорошо бы увидеть подтверждение.

Два вызова CryptSignMessage нужны, только если все делать "по правилам" без перерасхода памяти. Сама функция при втором вызове не проверяет был первый "прицельный" вызов или нет. Если заранее выделить буфер больше чем ожидаемый размер данных, можно сразу делать второй вызов без "прицеливания". Если этот вызов вернет FALSE и GetLastError вернет ERROR_INSUFFICIENT_BUFFER, то в переменную длины будет записан нужный размер буфера, можно перевыделить буфер нового размера и вызвать снова. В этом случае будет один вызов если угадали с первого раза и два вызова если первый раз вызвали неудачно. Смотря как выстроите логику приложения, но, как видите, в примерах демонстрируется реализация "по правилам", не возвращающая FALSE (про коды ошибок ниже).

Два вызова любой функции, работающей с закрытым ключом, как правило, потребуют так же 2 раза ввести пин-код, что пользователем обычно воспринимается как "ой, первый раз ввел неправильно" и вызывает приступ паники. Поэтому если в программе ориентируетесь на большой буфер и один вызов это будет легче восприниматься для пользователя, хотя и "не по правилам". В каком-то из примеров видел комментарий про "магический" размер подходящий для cades-bes с первого раза - точно цифру не вспомню, приблизительно 128 Кбайт, по нынешним меркам мелочь. Естественно, если вместо cades-bes будет расширение стандарта, то "магический" размер тоже увеличится.

Заметьте, при возврате TRUE какой-либо функцией GetLastError() частенько возвращает ненулевой код ошибки (например, если криптопровайдер не смог загрузить пару необязательных библиотек). Если хотите узнать код ошибки конкретной операции не забывайте перед операцией сделать вызов SetLastError(0). Про количество вызовов и коды ошибок применимо к большинству stdcall winapi функций, не только к CryptSignMessage.

Отредактировано пользователем 16 октября 2018 г. 4:07:55(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
kaper_75 оставлено 16.10.2018(UTC)
Offline kaper_75  
#8 Оставлено : 22 октября 2018 г. 7:18:25(UTC)
kaper_75

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

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

Сказал(а) «Спасибо»: 2 раз
Добрый день. Можно ли как то понять что сформированная подпись соответствует формату CADES-BES. Проблема в том что подпись формируем с использованием функции CadesSignMessage, но налоговая утверждает что данная подпись не в формате CADES-BES.
Offline two_oceans  
#9 Оставлено : 22 октября 2018 г. 10:16:42(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 184
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 40 раз в 40 постах
Автор: kaper_75 Перейти к цитате
Добрый день. Можно ли как то понять что сформированная подпись соответствует формату CADES-BES. Проблема в том что подпись формируем с использованием функции CadesSignMessage, но налоговая утверждает что данная подпись не в формате CADES-BES.
В подробности cades не вникал, но в целом: если результат подписания записать в файл (декодировать из base64 если результат был в base64), а потом открыть программами для работы с соответствующей кодировкой (скорее всего ASN.1), то сверяясь по списку полей из самого стандарта cades-bes можно визуально определить присутствуют ли обязательные поля стандарта cades-bes и отсутствуют ли лишние поля стандарта cades-bes.
При желании конечно можно и программу проверки на соответствия написать. Еще можно попробовать программами проверки ЭП прогнать (которых как писал выше уже очень много, на слуху обычно КриптоАрм), возможно какая-то из них показывает подтип cades.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.