Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline killy631  
#1 Оставлено : 4 апреля 2017 г. 15:02:45(UTC)
killy631

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

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

Сказал(а) «Спасибо»: 1 раз
CSP 4.0 (последний), AltLinux Кентавр 7.0.4, а также Debian 8.7.1. 64 бита.

provtype 75, серты получены с УЦ Крипто-Про (также со своего - тот же эффект).

CryptSignMessage на Windows выдает закодированный блок порядка 1.5 килобайт, на Linux - ~34 000. Выходные символы - какой-то заполнитель.
Причем CryptVerifyMessage все прекрасно проверяет, ASNEditor показывает полезных те же 1.5 килобайта.

Что за притча?

Offline Андрей Писарев  
#2 Оставлено : 4 апреля 2017 г. 15:21:58(UTC)
Андрей *

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

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

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

Примеры приложить можете для одного и того же файла из 2х ОС?
Техническую поддержку оказываем тут
Наша база знаний
Offline killy631  
#3 Оставлено : 4 апреля 2017 г. 15:49:53(UTC)
killy631

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

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

Сказал(а) «Спасибо»: 1 раз
Вот, собственно (кодировано в base64, но и сами бинарные ответы соотвественно большие)

debian-linux.base64.txt (46kb) загружен 3 раз(а). alt-linux.base64..txt (46kb) загружен 2 раз(а).
Offline Андрей Писарев  
#4 Оставлено : 4 апреля 2017 г. 16:29:05(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2044 раз в 1585 постах
В файлах после структуры ASN.1 - идет еще 32 Кб: x00 ...
Техническую поддержку оказываем тут
Наша база знаний
Offline killy631  
#5 Оставлено : 4 апреля 2017 г. 16:32:12(UTC)
killy631

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

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

Сказал(а) «Спасибо»: 1 раз
Я получаю бинарный вывод очень большого размера. Как положено, вызываю CryptSignMessage 2 раза - один раз одна возвращает
мне потребный размер буфера (~32000), потом я честно его выделяю и передаю ей. То есть нули - это есть порождение CryptSignMessage.
Сам я ничего не придумываю:)
Offline Dmitry_Bokovikov  
#6 Оставлено : 4 апреля 2017 г. 18:12:46(UTC)
Dmitry_Bokovikov

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

Группы: Участники
Зарегистрирован: 29.01.2014(UTC)
Сообщений: 172
Откуда: Москва

Поблагодарили: 18 раз в 17 постах
Автор: killy631 Перейти к цитате
Я получаю бинарный вывод очень большого размера. Как положено, вызываю CryptSignMessage 2 раза - один раз одна возвращает
мне потребный размер буфера (~32000), потом я честно его выделяю и передаю ей. То есть нули - это есть порождение CryptSignMessage.
Сам я ничего не придумываю:)


Ошибку воспроизвел, будем разбираться, спасибо.
thanks 1 пользователь поблагодарил Dmitry_Bokovikov за этот пост.
killy631 оставлено 05.04.2017(UTC)
Offline killy631  
#7 Оставлено : 5 апреля 2017 г. 12:46:50(UTC)
killy631

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

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

Сказал(а) «Спасибо»: 1 раз
Проблема решена следующим образом:

Второй вызов CryptSignMessage возвращает КОРРЕКТНЫЙ размер подписанного блока. Поэтому достаточно просто усечь результат до нужно размера,
или записать в целевой буфер ровно столько, сколько функция вернула. Кусочек кода в моем случае:

Код:

        DWORD reqSize = 0;

	Sys::ei_trace("Acquire required count of bytes...");
	CAPI_CHK(CryptSignMessage(&spara, FALSE, 1, messageArray, messageSizeArray, NULL, &reqSize));
	std::vector<BYTE> output(reqSize); // Тут размер слишком большой - примерно 32 K

	Sys::ei_trace_fmt("%d bytes has been allocated", reqSize);
	CAPI_CHK(CryptSignMessage(&spara, FALSE, 1, messageArray, messageSizeArray, &output[0], &reqSize));
	output.resize(reqSize); // Workaround: тут размер корректный, усекаем 

        return output; 



Хоть и совсем так, как это описано в MSDN, но - работает и ПРОБЛЕМА РЕШЕНА.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.