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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline Andrew_Silver  
#11 Оставлено : 1 апреля 2008 г. 21:03:38(UTC)
Andrew_Silver

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

Группы: Участники
Зарегистрирован: 15.01.2008(UTC)
Сообщений: 18
Мужчина
Откуда: Пермь

проект представляет собой веб-сервис, собран в vs2008
пересобрать в vs2005 или так пойдет?
Offline Павел Смирнов  
#12 Оставлено : 1 апреля 2008 г. 21:04:26(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Пойдёт
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Andrew_Silver  
#13 Оставлено : 1 апреля 2008 г. 23:10:23(UTC)
Andrew_Silver

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

Группы: Участники
Зарегистрирован: 15.01.2008(UTC)
Сообщений: 18
Мужчина
Откуда: Пермь

Отправил, с адреса serebrov[cобака]prognoz.ru
Краткое описание в письме, если что спрашивайте плиз

Отредактировано пользователем 1 апреля 2008 г. 23:11:19(UTC)  | Причина: Не указана

Offline Павел Смирнов  
#14 Оставлено : 1 апреля 2008 г. 23:12:10(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
В письме вижу только "Доброго времени суток!"
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Павел Смирнов  
#15 Оставлено : 1 апреля 2008 г. 23:12:50(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
О! Так лучше!
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Павел Смирнов  
#16 Оставлено : 1 апреля 2008 г. 23:52:04(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Надо было мне раньше повнимательнее посмотреть. У Вас в коде на четыре вызова Marshal.AllocHGlobal() есть только два Marshal.FreeHGlobal(). Как же здесь не быть утечке?
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Andrew_Silver  
#17 Оставлено : 2 апреля 2008 г. 14:00:00(UTC)
Andrew_Silver

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

Группы: Участники
Зарегистрирован: 15.01.2008(UTC)
Сообщений: 18
Мужчина
Откуда: Пермь

Простой вызов FreeHGlobal для pdecoded и pverinfo приводит к ошибке с сообщением о неверном дескрипторе.

Я понимаю, что это видимо не совсем по адресу, но может подскажете в чем дело?
Offline Павел Смирнов  
#18 Оставлено : 2 апреля 2008 г. 16:56:56(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Теперь всё ясно. Вы вообще неправильно пользуетесь этими двумя указателями. Функция CadesVerifyMessage() сама выделяет память для out-параметров ppDecodedBlob и ppVerificationInfo. Вам лучше описать их в прототипе как out, а не ref, и просто передать в качестве этих параметров ничем не заполненные указатели IntPtr.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Andrew_Silver  
#19 Оставлено : 2 апреля 2008 г. 17:42:20(UTC)
Andrew_Silver

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

Группы: Участники
Зарегистрирован: 15.01.2008(UTC)
Сообщений: 18
Мужчина
Откуда: Пермь

Переделал по вашему совету, прекрасно все работает. Утечки тоже никуда не делись, процесс продолжает есть память
Код ниже:

Код:

public byte[] VerifyAux(byte[] pSignature)
    {
        byte[] message = new byte[0];
        IntPtr pdecoded = IntPtr.Zero;
        IntPtr pverinfo = IntPtr.Zero;
        IntPtr pcrpara = IntPtr.Zero;
        IntPtr pdata1 = IntPtr.Zero;
        int cbDecoded = pSignature.Length;
        try
        {
            CRYPT_VERIFY_MESSAGE_PARA crpara = new CRYPT_VERIFY_MESSAGE_PARA();
            crpara.cbSize = (uint)Marshal.SizeOf(crpara);
            crpara.dwMsgAndCertEncodingType = (uint)65537;
            crpara.hCryptProv = IntPtr.Zero;
            crpara.pfnGetSignerCertificate = IntPtr.Zero;
            crpara.pvGetArg = IntPtr.Zero;

            CADES_VERIFY_MESSAGE_PARA verpara = new CADES_VERIFY_MESSAGE_PARA();
            verpara.dwSize = (uint)Marshal.SizeOf(verpara);
            pcrpara = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(CRYPT_VERIFY_MESSAGE_PARA)));
            Marshal.StructureToPtr(crpara, pcrpara, false);
            verpara.pVerifyMessagePara = pcrpara;
            verpara.pCadesVerifyPara = IntPtr.Zero;

            CRYPTOAPI_BLOB decoded = new CRYPTOAPI_BLOB();
            CADES_VERIFICATION_INFO verinfo = new CADES_VERIFICATION_INFO();
            pdecoded = IntPtr.Zero;
            pverinfo = IntPtr.Zero;
 
            pdata1 = Marshal.AllocHGlobal(sizeof(byte) * pSignature.Length);
            Marshal.Copy(pSignature, 0, pdata1, pSignature.Length);
            if (Crypto.CadesVerifyMessage(ref verpara, 0, pdata1, (uint)cbDecoded, out pdecoded, out pverinfo)) ///!!!
            {
                decoded = (CRYPTOAPI_BLOB)Marshal.PtrToStructure(pdecoded, typeof(CRYPTOAPI_BLOB));
                verinfo = (CADES_VERIFICATION_INFO)Marshal.PtrToStructure(pverinfo, typeof(CADES_VERIFICATION_INFO));
                message = new byte[decoded.cbData];
                Marshal.Copy(decoded.pbData, message, 0, (int)decoded.cbData);
            }
            else
            {
                verinfo = (CADES_VERIFICATION_INFO)Marshal.PtrToStructure(pverinfo, typeof(CADES_VERIFICATION_INFO));
                Context.Items["LastError"] = (int)verinfo.dwStatus;
                throw new Exception("Некорректная подпись!");
            }
        }
        finally
        {
            Marshal.FreeHGlobal(pdata1);
            Marshal.FreeHGlobal(pcrpara);
            Crypto.CadesFreeBlob(pdecoded);
            Crypto.CadesFreeVerificationInfo(pverinfo);
        }

        return message;
    }
Offline Павел Смирнов  
#20 Оставлено : 2 апреля 2008 г. 18:47:43(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
У меня в тех же условиях утечка не наблюдается. Уточните используемую версию КриптоПро ЭЦП (версию SDK или CAdESCOM в зависимости от того, что установлено на машине, где производится тестирование).
Техническую поддержку оказываем тут.
Наша база знаний.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы<123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.