отличия ЭЦП Bluetooth
Здравствуйте!
Имеется приложение под андроид, успешно работающее с вашими токенами ЭЦП 1.0 и 2.0.
Вопрос: если ли разница в хранении сертификатов на USB-токенах и Bluetooth-токенах?
Дело в том, что мне необходимо получить идентификатор ключевой пары, связанной с сертификатом. Я считываю значение сертификата из токена; из него получаю значение открытого ключа; по значению открытого ключа нахожу его handle; по handle'у находу значение атрибуто CKA_ID.
вот код для поиска объекта открытого ключа по значению:
byte[] keyValue=null;
final X509CertificateHolder certificateHolder;
try {
certificateHolder = new X509CertificateHolder(attributes[1].pValue.getByteArray(0, attributes[1].ulValueLen));
mIssuer=certificateHolder.getIssuer().toString();
SubjectPublicKeyInfo publicKeyInfo = certificateHolder.getSubjectPublicKeyInfo();
keyValue = publicKeyInfo.parsePublicKey().getEncoded();
} catch (IOException exception) {
throw new CertParsingException();
}
if (keyValue == null) {
throw new KeyNotFoundException();
}
mPublicKeyValue = keyValue.clone();
// уберём заголовок ключа (первые 2 байта)
keyValue = copyOfRange(keyValue, 2, keyValue.length);
final CK_ATTRIBUTE[] template = (CK_ATTRIBUTE[]) (new CK_ATTRIBUTE()).toArray(2);
template[0].set(Pkcs11Constants.CKA_CLASS, Pkcs11Constants.CKO_PUBLIC_KEY);
template[1].set(Pkcs11Constants.CKA_VALUE, keyValue);
attributes[1] - это тело сертификата
с помощью шаблона template в обычном токене с успехом получается найти объект открытого ключа и получить его handle.
А вот в блютус-токене подобная процедура не находит объект в токене.
В чём может быть дело?