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

Уведомление

Icon
Error

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

Статус: Новичок

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

Сказал(а) «Спасибо»: 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,718
Мужчина
Российская Федерация

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

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

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


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

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

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

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

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

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

Сказал «Спасибо»: 264 раз
Поблагодарили: 1007 раз в 817 постах
После установки КриптоПро ЭЦП 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)
Сообщений: 93
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 27 раз в 27 постах
Посоветую, так как тоже пишу на Паскале. 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)
Сообщений: 4
Российская Федерация
Откуда: Киров

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

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

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

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 27 раз в 27 постах
Насчет 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)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.