Ошибка чтения объектов из смарт-карты Gemalto с помощью IAIK pkcs11wrapper
Я пытаюсь прочитать публичные имена сертификатов со смарт-карты для отображения пользователю, прежде чем они подпишут файл с помощью смарт-карты gemalto. Я следовал примеру getInfo из демонстраций iaikPkcs11Wrapper, как показано ниже:
Module pkcs11Module = Module.getInstance(settings.getCryptoDll());
Slot[] slotList;
try{
slotList = pkcs11Module.getSlotList(true);
}catch(TokenException tex){//module is not initialised
tex.printStackTrace();
pkcs11Module.initialize(new DefaultInitializeArgs());
slotList = pkcs11Module.getSlotList(true);
}
for (Slot slot : slotList) {
Token token = slot.getToken();
iaik.pkcs.pkcs11.Session session = token.openSession(true, SessionReadWriteBehavior.RO_SESSION, null, null);
session.findObjectsInit(null);
Object[] objects = new Object[0];
try {
objects = session.findObjects(1);
Это не всегда на линии objects = findObjects(1);
с исключением CKR_TEMPLATE_INCONSISTENT.
Как я понял из документации session.findObjectsInit(null)
следует просто вернуть все доступные объекты на карту и затем сравнить их по типу.
У меня есть разные смарт-карты, и все они терпят неудачу, как это, я также пытался позвонить session.findObjectsInit(tempObj)
с объектом GenericTemplate и X509PublicKeyCertificate, которые оба возвращают одно и то же исключение, и с X509AttributeCertificate, который не возвращает объектов, но не выдает исключение.
Буду признателен за любые советы, которые может дать каждый. Или мне нужно создать соответствующий объект шаблона с помощью GenericTemplate? Я не уверен, почему получаю исключение, так как думал, что передаю объект в метод getObjectInit, отфильтрованный для объекта thet, поэтому все возвращаемое значение должно совпадать.
РЕДАКТИРОВАТЬ Я впоследствии пытался с другими шаблонами и шаблонами для объектов, не находящихся на карте, просто вернуть пустой массив - не исключение, а те, которые, я думаю, есть на картах, просто выдают исключение ckr_template_inconsistent, любая помощь будет с благодарностью получена.
РЕДАКТИРОВАТЬ2 Я сейчас попробовал с некоторыми новыми картами 'V3', которые действительно работают, все мои тестовые карты работают с использованием другой техники (в настоящее время мы используем capicom через com4J для подписи), поэтому, возможно, есть проблема с оберткой iaik, или gclib.dll (или я).