Статус: Участник
Группы: Участники
Зарегистрирован: 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 килобайта.
Что за притча?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,691 Сказал «Спасибо»: 500 раз Поблагодарили: 2044 раз в 1585 постах
|
Здравствуйте.
Примеры приложить можете для одного и того же файла из 2х ОС? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.04.2015(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 1 раз
|
Вот, собственно (кодировано в base64, но и сами бинарные ответы соотвественно большие) debian-linux.base64.txt (46kb) загружен 3 раз(а). alt-linux.base64..txt (46kb) загружен 2 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,691 Сказал «Спасибо»: 500 раз Поблагодарили: 2044 раз в 1585 постах
|
В файлах после структуры ASN.1 - идет еще 32 Кб: x00 ...
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.04.2015(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 1 раз
|
Я получаю бинарный вывод очень большого размера. Как положено, вызываю CryptSignMessage 2 раза - один раз одна возвращает мне потребный размер буфера (~32000), потом я честно его выделяю и передаю ей. То есть нули - это есть порождение CryptSignMessage. Сам я ничего не придумываю:)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 29.01.2014(UTC) Сообщений: 172 Откуда: Москва
Поблагодарили: 18 раз в 17 постах
|
Автор: killy631 Я получаю бинарный вывод очень большого размера. Как положено, вызываю CryptSignMessage 2 раза - один раз одна возвращает мне потребный размер буфера (~32000), потом я честно его выделяю и передаю ей. То есть нули - это есть порождение CryptSignMessage. Сам я ничего не придумываю:)
Ошибку воспроизвел, будем разбираться, спасибо.
|
1 пользователь поблагодарил Dmitry_Bokovikov за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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, но - работает и ПРОБЛЕМА РЕШЕНА.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close