Здравствуйте, 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.
Удачи.