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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline anp_2k  
#1 Оставлено : 23 июля 2025 г. 11:22:34(UTC)
anp_2k

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

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

Сказал(а) «Спасибо»: 2 раз
Здравствуйте.

Наткнулся на странное поведение функции CryptDecodeObject начиная с CSP 5.0 R3 на Linux. Если перед выполнением функции CryptDecodeObject установлен не нулевой LastError (например SCARD_E_INVALID_CHV), то функция, в случае ошибки, его не сбрасывает и его же возвращает.
В моем случае должна была вернуть CRYPT_E_ASN1_ERROR, но возвращает SCARD_E_INVALID_CHV.

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

Offline Андрей *  
#2 Оставлено : 23 июля 2025 г. 12:07:37(UTC)
Андрей *

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

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

Сказал «Спасибо»: 594 раз
Поблагодарили: 2327 раз в 1825 постах
Автор: anp_2k Перейти к цитате
Здравствуйте.

Наткнулся на странное поведение функции CryptDecodeObject начиная с CSP 5.0 R3 на Linux. Если перед выполнением функции CryptDecodeObject установлен не нулевой LastError (например SCARD_E_INVALID_CHV), то функция, в случае ошибки, его не сбрасывает и его же возвращает.
В моем случае должна была вернуть CRYPT_E_ASN1_ERROR, но возвращает SCARD_E_INVALID_CHV.


Здравствуйте.
Т.е. в 5.0.13000 воспроизводится?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#3 Оставлено : 23 июля 2025 г. 12:11:52(UTC)
Андрей *

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

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

Сказал «Спасибо»: 594 раз
Поблагодарили: 2327 раз в 1825 постах
Информация передана разработчикам.
Спасибо.
Техническую поддержку оказываем тут
Наша база знаний
Offline anp_2k  
#4 Оставлено : 23 июля 2025 г. 12:12:52(UTC)
anp_2k

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Андрей * Перейти к цитате

Здравствуйте.
Т.е. в 5.0.13000 воспроизводится?


Да. Воспроизводиться на 5.0.13000 и на 5.0.13455
Offline Зубов Иван  
#5 Оставлено : 23 июля 2025 г. 12:27:03(UTC)
Зубов Иван

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

Группы: Участники
Зарегистрирован: 02.11.2017(UTC)
Сообщений: 65
Мужчина

Сказал «Спасибо»: 12 раз
Поблагодарили: 28 раз в 25 постах
Здравствуйте!

Спасибо за жалобу! Обязательно исправим, только научите, пожалуйста, воспроизводить вашу проблему. Прям с пол-тычка не воспроизвелось:
Код:

    BYTE arr[1000] = { 0 };
    DWORD cbData = 0;
    SetLastError((DWORD)SCARD_E_INVALID_CHV);
    CPPUNIT_ASSERT(!CryptDecodeObject(X509_ASN_ENCODING, X509_CERT, arr, sizeof(arr), 0, NULL, &cbData));
    assertLastError(CRYPT_E_ASN1_BADTAG);

И на Windows, и на *nix код ошибки затирается на правильный. А у вас какой был случай, чтобы на него посмотреть под отладчиком?
Техническую поддержку оказываем тут
Наша база знаний
Offline anp_2k  
#6 Оставлено : 23 июля 2025 г. 13:47:09(UTC)
anp_2k

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Зубов Иван Перейти к цитате
Здравствуйте!

Спасибо за жалобу! Обязательно исправим, только научите, пожалуйста, воспроизводить вашу проблему. Прям с пол-тычка не воспроизвелось:
Код:

    BYTE arr[1000] = { 0 };
    DWORD cbData = 0;
    SetLastError((DWORD)SCARD_E_INVALID_CHV);
    CPPUNIT_ASSERT(!CryptDecodeObject(X509_ASN_ENCODING, X509_CERT, arr, sizeof(arr), 0, NULL, &cbData));
    assertLastError(CRYPT_E_ASN1_BADTAG);

И на Windows, и на *nix код ошибки затирается на правильный. А у вас какой был случай, чтобы на него посмотреть под отладчиком?


Сертификат с полем Subject, значение которого содержит спецсимвол и поле имеет тип TeletexString.
Код:
Сертификат в buff размера sz
PCCERT_CONTEXT ctx = CertCreateCertificateContext(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, buff, sz);
SetLastError((DWORD)SCARD_E_INVALID_CHV);
DWORD cbData = 0;
if(!CryptDecodeObject(X509_ASN_ENCODING, X509_NAME, ctx->pCertInfo->Subject.pbData, ctx->pCertInfo->Subject.cbData, 0, nullptr, &cbData))
{
    assertLastError(CRYPT_E_ASN1_ERROR);
}

Offline Зубов Иван  
#7 Оставлено : 23 июля 2025 г. 13:52:44(UTC)
Зубов Иван

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

Группы: Участники
Зарегистрирован: 02.11.2017(UTC)
Сообщений: 65
Мужчина

Сказал «Спасибо»: 12 раз
Поблагодарили: 28 раз в 25 постах
Спасибо большое! А именем этим не поделитесь, пожалуйста? Это было бы совсем шикарно! Здесь или может в ЛС, если вам так будет удобно. Оригинальным или сокращённым до минимального примера, как вам удобно. Массивом байт.

Отредактировано пользователем 23 июля 2025 г. 13:53:30(UTC)  | Причина: уточнил сообщение

Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.