Поиск объектов
Rutoken под Android. На токене один сертификат. Пытаюсь найти все объекты типа PublicKey (он один). Поиск возвращает, что ни одного объекта не найдено. Может, где ошибка - или PublicKey в начале надо генерить.
final CK_ATTRIBUTE[] template = (CK_ATTRIBUTE[]) (new CK_ATTRIBUTE()).toArray(1);
final NativeLongByReference keyClass =
new NativeLongByReference(Pkcs11Constants.CKO_PUBLIC_KEY);
template[0].type = Pkcs11Constants.CKA_CLASS;
template[0].pValue = keyClass.getPointer();
template[0].ulValueLen = new NativeLong(NativeLong.SIZE);
NativeLong pubKeyHandle = findObject(mPkcs11, session, template);
f (pubKeyHandle == null) {
Log.e(LOG_TAG, "PublicKey objects not found");
return;
}
private NativeLong findObject(RtPkcs11 pkcs11, NativeLong session, CK_ATTRIBUTE[] template)
throws Pkcs11Exception {
NativeLong rv = pkcs11.C_FindObjectsInit(session,
template, new NativeLong(template.length));
if (!rv.equals(Pkcs11Constants.CKR_OK)) {
throw Pkcs11Exception.exceptionWithCode(rv);
}
final NativeLong objects[] = new NativeLong[1];
NativeLongByReference count =
new NativeLongByReference(new NativeLong(objects.length));
rv = pkcs11.C_FindObjects(session, objects, new NativeLong(objects.length),
count);
if (!rv.equals(Pkcs11Constants.CKR_OK)) {
throw Pkcs11Exception.exceptionWithCode(rv);
}
rv = pkcs11.C_FindObjectsFinal(session);
if (!rv.equals(Pkcs11Constants.CKR_OK)) {
throw Pkcs11Exception.exceptionWithCode(rv);
}
if (count.getValue().intValue() <= 0) return null;
return objects[0];
}