Получить свойства ключей (криптоки)
От: irbis3003  
Дата: 14.09.10 03:54
Оценка:
Пытаюсь получить свойство излекаемости ключа (EXTRACTABLE) вот таким способом (pkcs#11):

CK_ATTRIBUTE itemplate = {CKA_EXTRACTABLE, NULL_PTR, 0}; //

     rv = pfn_C_GetAttributeValue(SessionHandle, PrivKey, &itemplate, 1);

     if (rv == CKR_OK)
     {
         //Memo1->Lines->Add("template.value: "+AnsiString((char*)itemplate.pValue));
         Memo1->Lines->Add("template.value: "+IntToStr(itemplate.pValue));
         Memo1->Lines->Add("template.type: "+IntToStr(itemplate.type));
         Memo1->Lines->Add("template.ulValueLen: "+IntToStr(itemplate.ulValueLen));
     }

и ни чего не получается
Значение template.value всегда возвращает ноль.
Делаю что-то не так, скажите что именно?
pkcs#11 critpoky getattributevalue
Re: Получить свойства ключей (криптоки)
От: irbis3003  
Дата: 14.09.10 04:04
Оценка:
а если так сделать (вроде более правильно):

CK_BYTE_PTR pModulus;
rv = pfn_C_GetAttributeValue(SessionHandle, PrivKey, &itemplate, 1);

     if (rv == CKR_OK)
     {
         pModulus = (CK_BYTE_PTR) malloc(itemplate.ulValueLen);
         itemplate.pValue = pModulus;

         rv = pfn_C_GetAttributeValue(SessionHandle, PrivKey, &itemplate, 1);
         if (rv == CKR_OK)
         {
            //Memo1->Lines->Add("template.value: "+AnsiString((char*)itemplate.pValue));
            Memo1->Lines->Add("template.value: "+IntToStr(itemplate.pValue));
            Memo1->Lines->Add("template.type: "+IntToStr(itemplate.type));
            Memo1->Lines->Add("template.ulValueLen: "+IntToStr(itemplate.ulValueLen));
         }
     }

то itemplate.pValue = 1 в независимости от того, каким был создан приватный ключ (CKA_EXTRACTABLE = true или CKA_EXTRACTABLE = false)
Re[2]: Получить свойства ключей (криптоки)
От: J.J.OK  
Дата: 14.09.10 05:21
Оценка:
Здравствуйте, irbis3003, Вы писали:

I>а если так сделать (вроде более правильно):

I>
...
I>

I>то itemplate.pValue = 1 в независимости от того, каким был создан приватный ключ (CKA_EXTRACTABLE = true или CKA_EXTRACTABLE = false)

Как правильно было подмечено, код в первом посте — это пол дела. А вообще, конечно, код лучше приводить все-таки одним куском — чтобы не надо было заглядывать в предыдущий пост за деталями. И еще: если это не универсальная обёртка, умеющая добывать значения любых атрибутов, то в данном конкретном месте, зная тип значения данного конкретного атрибута (CK_BBOOL), вполне можно использовать для его хранения переменную соотв. типа., Т.е.:

CK_BBOOL extractable = CK_FALSE;
CK_ATTRIBUTE at_extractable[] = { CKA_EXTRACTABLE, &extractable, sizeof( CK_BBOOL ) };
CK_RV rv;

rv = C_GetAttributeValue( hObject, hSession, &at_extractabe, COUNTOF( extractable ) );


Что касается полученных результатов, то, могу предположить, что там где написано

то itemplate.pValue = 1 в независимости от того, каким был создан приватный ключ (CKA_EXTRACTABLE = true или CKA_EXTRACTABLE = false)

на самом деле подразумевалось *(itemplate.pValue).
Если так, то вполне возможно, что данное конкретное PKCS#11-устройство не имеет нормальной поддержки атрибута CKA_EXTRACTABLE, и, чтобы не обламывать пользователя ошибками, всегда приводит его значение к CK_TRUE. Так, например, сделано в Mozilla NSS.

Удачи.
Чем безопаснеe — тем неудобнее ;-)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.