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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Voldemar  
#1 Оставлено : 14 января 2010 г. 14:48:52(UTC)
Voldemar

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

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

Стоит задача хранить в контейнере собственные бинарные данные, чтобы можно было получить к ним доступ без ввода пина на контейнер. Если я правильно понимаю, то нужно воспользоваться CPSetProvParam(PP_CONTAINER_EXTENSION). Код
Код:
CERT_EXTENSION extension;
extension.pszObjId = szOID_CERT_EXTENSIONS;
extension.fCritical = FALSE;
extension.Value.pbData = <собственные бинарные данные>;
extension.Value.cbData = <длина бинарных данных>;
CPSetProvParam(hProv, PP_CONTAINER_EXTENSION, (BYTE*)&extension, 0);

завершается без ошибки. Если написать extension.fCritical = TRUE, то с ошибкой NTE_FAIL.
Добавленные данные (в случае fCritical = FALSE) зачитываются так:
Код:
DWORD size = 0, flags = CRYPT_FIRST;
if (CPGetProvParam(hProv, PP_ENUM_CONTAINER_EXTENSION, NULL, &size, CRYPT_FIRST)) {
  DWORD sz = size;
  CK_BYTE_PTR buff = MALLOC(sz);
  while (CPGetProvParam(hProv, PP_ENUM_CONTAINER_EXTENSION, buff, &size, flags)) {
    CERT_EXTENSION* extension = (CERT_EXTENSION*)buff;
    //обработка
    size = sz;
    flags = 0;
  }
  FREE(buff, 0);
}

Управление доходит до //обработка, но в extension лежит что-то нехорошее, в частности, extension->pszObjId = NULL
Вопрос: можно ли вообще хранить в контейнере произвольные данные? Если подход правильный, где ошибка?
Offline Kirill Sobolev  
#2 Оставлено : 14 января 2010 г. 16:59:43(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Ошибка в чтении данных.
Цитата:
PP_ENUM_CONTAINER_EXTENSION
Имя одного из расширений ключевого контейнера, возвращаемое в форме структуры CONTAINER_EXTENSION строки. Прикладные программы могут вызывать функцию с данным параметром последоватьльно для перечисления всех расширений ключевого контейнера. Эта функция не является многопоточной, и поэтому при использовании ее в многопоточном контексте есть вероятность, что не все поддерживаемые считыватели будут перечислены.

Структура CONTAINER_EXTENSION описана в wincryptex.h.
Техническую поддержку оказываем тут
Наша база знаний
Offline Voldemar  
#3 Оставлено : 14 января 2010 г. 17:51:44(UTC)
Voldemar

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

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

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